使用'事件属性对非时钟信号的不良做法?

And*_* Ef 1 fpga vhdl

还有一个类似的问题在这里,这是回答

是的,rising_edge()/falling_edge()应该只用于时钟信号.虽然它在仿真中工作,但它可能会导致问题和合成中的意外硬件.

使用'event属性检测非时钟信号的边缘是否同样如下例所示?

process (rndm_sig)
begin
    if (rndm_sig'event and rndm_sig = 1) then
    -- do something.
    end if;
end process;
Run Code Online (Sandbox Code Playgroud)

Old*_*art 5

作为时钟使用X'event and X= 1rising_edge.(X)将被合成工具处理的任何信号.

在FPGA中,这意味着路由工具将尝试为信号分配专用时钟网络,以及所需的全部功能.例如,信号必须被路由到专用时钟输入,这可能导致显着的延迟和与其他信号的偏斜.

此外,信号最好是'干净'.这意味着如果信号上出现最微小的尖峰,FF将会计时.这也意味着如果你的信号不是"干净",一些FF可能会触发,有些则可能不会.

定时工具需要知道周期和高/低时间,并尝试使设置和保持时间与所有其他时钟相对应.这可能导致设计中的主要问题和/或额外逻辑.如果信号与其他时钟完全异步,则可以具有元稳定性,并且可能需要在时钟寄存器之后添加同步器.

所以它归结为:这是强烈建议使用的唯一的"真正的"时钟信号X'event and X= 1rising_edge.(X)构造.

与此同时,数字设计中有一条规则是:如果没有其他解决方案,所有规则都将被淘汰.

在ASIC行业,我来自哪里,你必须在违反基本规则之前与一些资深设计师交谈.然后你必须在代码中添加一些强烈的强调评论,声明"是的,这打破了规则,但没有其他办法,因为我们有这个和这个和它,它已经由X和Y审查和签署",是的,我曾经在设计中使用过闩锁.