【发布时间】:2018-11-09 09:01:06
【问题描述】:
有一个类似的问题here,用
回答是的,
rising_edge()/falling_edge()只能用于时钟 信号。虽然它在模拟中工作,但它可能会导致问题和 合成中的意外硬件。
使用'event 属性检测非时钟信号的边沿是否同样适用,如下例所示?
process (rndm_sig)
begin
if (rndm_sig'event and rndm_sig = 1) then
-- do something.
end if;
end process;
【问题讨论】:
-
在这里,您定义与
if rising_edge(rndm_sig) then相同的东西!在综合中,rndm_sig将被视为时钟信号。 -
是的,但是如果
rndm_sig是来自输入端口的信号,则该信号必须连接到时钟缓冲区,根据另一个线程,这将导致错误合成,对吗?我的问题基本上是:使用'event是否同样如此? -
您说
rising_edge(some_signal)还是some_signal=1 and some_signal'event完全无关紧要。在这两个some_signal中都将连接到触发器的时钟输入,因此是一个时钟。 -
听起来像是一个 X-Y 问题,老实说,在数字设计中检测到的边缘是没有意义的,除非它是一个时钟,或者该边缘可以相对于将使用检测到的边缘的决定的时钟来表示。在第一种情况下,您的问题是无效的,在第二种情况下,如果您的时钟符合 Nyquist,则没有理由使用 'event,而第三种选择是您没有进行纯数字设计,这意味着您不应该使用 FPGA(您已标记)。