Vhdl D触发器可合成

Vhdl D触发器可合成,vhdl,Vhdl,我想做一个D ff,复位时有一点延迟,D始终为“1”,clk将由开关控制(它将为电梯上的特定楼层发出命令),count_aux将为1Hz时钟,但当我尝试合成时,它显示了这个错误“错误:Xst:1534-节点的顺序逻辑似乎由多个时钟控制。”。我不想将clk理解为时钟,因为它将只是一个开关。我如何才能做到这一点 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_u

我想做一个D ff,复位时有一点延迟,D始终为“1”,clk将由开关控制(它将为电梯上的特定楼层发出命令),count_aux将为1Hz时钟,但当我尝试合成时,它显示了这个错误“错误:Xst:1534-节点的顺序逻辑似乎由多个时钟控制。”。我不想将clk理解为时钟,因为它将只是一个开关。我如何才能做到这一点

library ieee;  
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity D_FF is
port ( D: in std_logic;
clk: in std_logic;
count_aux: in std_logic;
reset: in std_logic;
Q: out std_logic:='0'
); 
end D_FF;    

architecture a1 of D_FF is
signal i: std_logic_vector(3 downto 0):="0000";
begin
proc: process (D,clk,reset)


begin  

    if (reset='1') then 
        if(count_aux'event and count_aux='1') then i<=i+1;
            if (i="0001") then 
        q<='0';
        i<="0000";
            end if;
        end if;
    elsif (clk'event and clk='1') then 
        q<=d;   
    end if;  
    end process proc;
end a1;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_arith.all;
使用ieee.std_logic_unsigned.all;
实体D_FF是
端口(D:标准逻辑中的;
clk:标准逻辑中;
计数辅助:在标准逻辑中;
复位:在标准逻辑中;
Q:out标准_逻辑:='0'
); 
结束D_FF;
D_FF的架构a1为
信号i:std_逻辑_向量(3到0):=“0000”;
开始
过程:过程(D、clk、复位)
开始
如果(reset='1'),则
如果(count_aux'event和count_aux='1'),那么我您在这个过程中使用clk作为时钟,所以它将是一个时钟;),但是对于合成来说,奇怪的事情是您想要一个时钟触发器(顺序元素或regeister或其他任何东西)但是你也把组合逻辑包括在重置中,所以它不知道合成什么,因为它的库中没有这个逻辑的组件

因此,我的建议是将顺序逻辑和组合逻辑分开。顺序逻辑在灵敏度列表中只有clk和reset,并且具有以下代码结构:

process(clk, reset)
begin
  if reset = 1 then
    foobar <= '0';
  elsif rising_edge(clk) then
    foobar <= foo + bar;
  end if;
end process;
过程(时钟、复位)
开始
如果重置=1,则

foobar这个答案应该让你知道什么是
if(count_aux'event and count_aux='1')
应该是重置中的一个计时过程??