这里有一个类似的问题,答案是 是的,rising_edge()/ falling_edge()只能用于时钟 信号。虽然它在模拟中起作用但它可能会导致问题和 …
任何信号用作 X'event and X= 1 要么 rising_edge.(X) 将被综合工具视为时钟。
X'event and X= 1
rising_edge.(X)
在FPGA中,这意味着路由工具将尝试为信号分配专用时钟网络,以及所需的全部功能。例如信号必须被路由到专用时钟输入,这可能导致显着的延迟和与其他信号的偏斜。
此外,信号最好是'干净'。这意味着如果信号上有最微小的尖峰,FF将会计时。这也意味着如果你的信号不是“干净”,一些FF可能会触发,有些则可能没有。
定时工具需要知道周期和高/低时间,并尝试使设置和保持时间与所有其他时钟相对应。这可能导致设计中的主要问题和/或额外逻辑。如果信号与其他时钟完全异步,则可以具有元稳定性,并且可能需要在时钟寄存器之后添加同步器。
所以它归结为:它是 的 强力推荐 强> 只使用'真实'时钟信号 X'event and X= 1 要么 rising_edge.(X) 结构体。
与此同时,数字设计中有一条规则是:如果没有其他解决方案,所有规则都将被淘汰。
<子> 在ASIC行业,我来自哪里,你必须在违反基本规则之前与一些资深设计师交谈。然后你必须在代码说明中添加一些强调的重点评论 “是的,这打破了规则,但没有其他办法,因为我们有这个,这个和这个,它已经由X和Y审查和签署” 是的,我曾经在设计中使用过锁扣。 子>