一般来说,我是VHDL和硬件方面的业余爱好者,但是我一直在为一个学校项目工作,遇到了一些我听不懂的东西。
我有一个寄存器(类型D FF),该寄存器正在处理时钟信号以存储输入值,并且在仿真中,如果在clk输入中使用“强制时钟”,但如果尝试“仿真”,则可以正常工作通过用“强制常数”将其手动从0更改为1来设置时钟,依此类推,它不会在上升沿“拾取”。
这是正常行为吗?我认为从0到1时它仍然可以检测到上升沿。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity register_D is
generic (
WIDTH : POSITIVE := 1
);
Port ( CLK : in STD_LOGIC;
RST : in STD_LOGIC;
EN : in STD_LOGIC;
D : in STD_LOGIC_VECTOR(WIDTH-1 downto 0);
Q : out STD_LOGIC_VECTOR(WIDTH-1 downto 0));
end register_D;
architecture Behavioral of register_D is
begin
process (CLK, RST, EN)
begin
if (RST='1') then
Q <= (others=>'0');
elsif (rising_edge(CLK) and EN = '1') then
Q <= D;
end if;
end process;
end Behavioral;
我尝试通过手动设置时钟来触发FF的屏幕截图(并且不起作用):
在这里,当我将clk从“强制常量”切换为“强制时钟”时,您可以看到它正在工作: