【问题标题】:Is the use of 'event attribute on non-clock signal bad practice?在非时钟信号上使用“事件属性”是不好的做法吗?
【发布时间】: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(您已标记)。

标签: vhdl fpga


【解决方案1】:

任何用作X'event and X= 1rising_edge.(X) 的信号都将被综合工具视为时钟。

在 FPGA 中,这意味着路由工具将尝试为信号分配一个专用时钟网络,以及它所需要的一切。例如信号必须路由到专用时钟输入,这可能会导致显着延迟和对其他信号的偏斜。

此外,信号最好是“干净的”。这意味着如果信号上有最微小的尖峰,FF 将计时。这也意味着,如果您的信号不“干净”,一些 FF 可能会触发,而另一些可能不会。

计时工具需要知道周期和高/低时间,并尝试使设置和保持时间与所有其他时钟一起工作。这可能会导致设计中出现重大问题和/或额外的逻辑。如果信号与其他时钟完全异步,您可以获得元稳定性,并且可能需要在时钟寄存器之后添加同步器。

因此归结为:强烈建议仅对 X'event and X= 1rising_edge.(X) 结构使用“真实”时钟信号。

与此同时,数字设计中有一条规则说:如果没有其他解决方案,所有规则都将失效。

在我来自的 ASIC 行业,在违反基本规则之前,您必须与一些高级设计师交谈。然后你必须在代码周围添加一些强调的注释 “是的,这违反了规则,但没有其他办法,因为我们有这个,这个和这个,它已经被 X 和 Y 审查和签名“ 是的,我曾经在设计中使用过闩锁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多