我想在复位时稍微延迟制作D ff,D将始终为'1',clk将由开关控制(它将为电梯上的特定楼层发出命令)并且count_aux将是一个1Hz的时钟,但当我尝试合成时,它显示我的错误“错误:Xst:1534 - 节点的顺序逻辑似乎由多个时钟控制。”。我不想把它理解为时钟,因为它只是一个开关。我怎样才能做到这一点?
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;
答案 0 :(得分:0)
你在这个过程中使用 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;