我经常使用以下声明。但是,我想知道
if ( clock'event and clock = '1' ) then
[do something]
我们真的需要在上面的语句中写出clock'event吗? 如果是,为什么?
答案 0 :(得分:5)
你可以让模拟在没有clock'event
条件的情况下完美地工作,但合成将会出错。
关于可综合VHDL 的IEEE标准要求您添加clock'event
。
编写if rising_edge(clock)
代替了普遍接受的良好做法。这样可以更好地传达您的意图。允许rising_edge
和falling_edge
函数作为可合成的VHDL结构。
用于模拟:
process (clock) is
-- stuff
begin
if clock='1' then -- EVIL! don't do this
-- do things
end if;
end process;
假设clock
只是从'0'切换回'1'并返回(没有元值),行为将与您使用{获得的行为相同{1}}条件。同样,这不会合成你想要的!你可能会得到一个锁存器,而不是D触发器。
(任何人试图合成这个并获得结果的奖励积分!)
答案 1 :(得分:-3)
是的,否则以下代码会在时钟信号为高电平的整个时间内执行,而不仅仅是在时钟的上升沿。