使用时钟并使能

Using clock and enable

我得到了启用 D 型触发器的代码。

process(clk, en)
    begin
        if rising_edge(clk) then
             if en = ‘1’ then
                 Q <= D;
        end if;
     end if;
end process;
  1. 我被告知我应该使用if rising_edge(clk) and en = ‘1’ then ...为什么?
  2. 为什么 en = '1' 的 if 不是在时钟的 if 之前,因为时钟变化更频繁?
  3. 而且在过程括号process(clk, en)中是否需要指定en

以下是您所有 3 个问题的答案:

如果您要编写时序逻辑代码,坚持使用模板是明智的。这是一个这样的时序逻辑模板,没有异步复位,所有综合工具都应该理解它:

process(clock)  -- nothing else should go in the sensitivity list
begin
    -- never put anything here
    if rising_edge(clock) then  -- or falling_edge(clock)
        -- put the synchronous stuff here
        -- ie the stuff that happens on the rising or falling edge of the clock
    end if;
     -- never put anything here
end process;        

所以en不应该在敏感度列表中,也不应该在测试时钟的同一个if语句中进行测试。

如果你仔细想想,en 不应该在敏感列表中还有另一个很好的理由:没有异步复位的触发器的输出只在时钟改变时改变; D输入变化时不变化

  1. 有些人认为 VHDL 编译器和合成器无法弄清楚它与您在此处展示的是同一回事。我从来没有直接比较过输出,但如果它重要的话我会很伤心。

  2. 更频繁地更改在硬件中并不重要。从理论上讲,这应该无关紧要。实际上,如果您更改了条件的顺序,编译器可能会错误地警告您的敏感列表。

  3. 不是。