RDC问题定义
在芯片设计中,RDC是reset domain crossing 的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错误逻辑的模块,而使其它模块保持正常工作。
RDC问题描述
RDC的一个例子如下:
在上图中,有2个reset信号,分别是reset1_n和reset2_n。其中flop F1是被reset1_n给异步reset的。而F3是被reset2_n给异步reset的。F2可能是被同步reset给复位,也可能没有reset。而这其中,F1的输出Q是F2和F3输入D的fan-in,也就是说F1的变化会影响到F2和F3的值。
考虑这种情况:
reset1_n assert了,但是reset2_n并未assert,即F3和F2仍然工作在正常模式,并没有被复位,那么F2和F3可能会产生metastability,导致芯片发生逻辑错误:由于reset1_n对F1是异步reset,也就是说,当reset1_n assert,F1立马会被reset,F1的Q立刻会发生变化。而我们说,asynchronous reset 的assertion是可以在任何时间的