| |
Async reset在使用的时候,容易和clock撞到recovery or removal violation,如果电路没有足够的容错性,那么会使电路出现问题。下图展示了reset synchronizer的电路图,通过两级DFF re-sample,reset由async变为sync signal。
下面这个图举例说明了reset synchronizer的具体处理情况,可以看到,经过synchronizer的处理,o_reset变为和clk_B同步的reset信号了。
下面为reset synchronizer的RTL code:
always@(posedge clk_B or negedge reset)
if(~reset) B <= 1'b0;
else B <= 1'b1;
always@(posedge clk_B or negedge reset)
if(~reset) o_reset <= 1'b0;
else o_reset <= B;
Async复位信号reset有可能是通过MCU下进来的一个signal,通过reset synchronizer的同步,最后得到的o_reset就可以用到clk_B的时域去做复位信号了。