手动更改时钟值时,rising_edge(clk)无法检测到边沿

时间:2018-12-02 00:55:08

标签: vhdl hardware-programming

一般来说,我是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的屏幕截图(并且不起作用):

Screenshot of me trying to trigger the FF by manually setting the clock

在这里,当我将clk从“强制常量”切换为“强制时钟”时,您可以看到它正在工作:

here you can see it working when I switch clk from "Force constant" to "Force clock".

0 个答案:

没有答案