复位设计中的结构性缺陷及解决方案(一)
然而,如果复位源(SW_Q)在复位状态机(触发器的SET/CLR输入)为全局复位断言被异步使用,那么复位干扰可能能够复位整个系统(通过断言全局复位),因为全局系统复位去断言不仅仅与复位源去断言相关。当该复位源(有干扰)被同步使用或在触发器D输入使用的情况下可能依然有一个问题。干扰范围可能无法在至少一个周期内保持稳定,因此这不会被目标触发器捕获。此外,该复位源不能被用作任何电路的时钟(除了脉冲捕捉电路),因为它可能违反时钟宽度。
图3:复位源干扰(问题2)
在上图中,复位源SW_Q将出现干扰。虽然如果复位源SW_Q的干扰在某个触发器被捕捉作为复位事件状态(在S)或用于其他目的,全局复位输出(rst_b)都没有干扰,但它将导致时序违反/亚稳态,或根本不可能被捕获。
2. 解决方案
* 设计人员永远都不应犯下上述(图2)低级错误。
* 如果复位实现如图3所示,那么设计人员应保证复位源(在该示例中为SW_Q)总是在触发器的SET/CLR输入使用,而不在D或CLK使用。
* 解决这个问题的最好的方法是在复位状态机中使用之前注册该复位源。 虽然它将导致时钟依靠全局复位断言,但是无论如何,如果没有时钟,该内部复位(SW_Q)都不会断言。请参见图4.
图4:解决方案1
此外,用户也可以扩展SW_Q断言,然后再在设计中使用它,复位断言与时钟无关。 请参见图5.
图5:解决方案2
复位路径的组合逻辑
1. 问题(I)
如果组合逻辑输入大约在同一时间发生变化,那么使用复位路径中的组合逻辑可能产生干扰,这可能在设计中触发虚假复位。下面是一个RTL代码,它会在设计中意外复位。
assign module_a_rstb = !((slave_addr[7:0]==8‘h02 write_enable (wdata[7:0]==00))
always @(posedge clk or negedge module_rst_b)

评论