我获得了启用D触发器的代码。
process(clk, en)
begin
if rising_edge(clk) then
if en = ‘1’ then
Q <= D;
end if;
end if;
end process;
if rising_edge(clk) and en = ‘1’ then ...
。 为什么? en = '1'
之前的if en
? process(clk, en)
中指定document.getElementById("hello").style.left="100px";
document.getElementById("hello").style.top="100px";
?答案 0 :(得分:3)
有些人认为VHDL编译器和合成器无法弄清楚它与你在这里展示的一样。我从来没有直接比较输出,但如果重要的话,我会非常难过。
更频繁地更改在硬件中并不重要。从理论上讲,这应该不重要。实际上,如果您更改了条件的顺序,编译器可能会错误地警告您的敏感列表。
不是。
答案 1 :(得分:2)
以下是您所有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输入改变时,它不会改变。