Vhdl D触发器可合成
我想做一个D ff,复位时有一点延迟,D始终为“1”,clk将由开关控制(它将为电梯上的特定楼层发出命令),count_aux将为1Hz时钟,但当我尝试合成时,它显示了这个错误“错误:Xst:1534-节点的顺序逻辑似乎由多个时钟控制。”。我不想将clk理解为时钟,因为它将只是一个开关。我如何才能做到这一点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
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')
应该是重置中的一个计时过程??