SoC中RDC的问题以及解决方法

时间:2024-03-30 12:14:43

什么是RDC?

由于异步时钟域交叉(CDC)而导致的设计亚稳定性是一个众所周知的问题。可使用行业标准的高级工具来捕获设计中的此类结构或功能问题。但是,CDC不是信号相对于目标时钟域变为异步的唯一原因。在同步设计中,即使数据路径在相同的时钟域中,如果源寄存器的复位与目标寄存器的复位不同,这将创建异步交叉路径,并导致目标寄存器处的亚稳定性。当启动和捕获触发器的复位信号不同时,就会发生这种情况,称为复位域交叉(RDC),如图1所示。

SoC中RDC的问题以及解决方法

                                                                                   图1

 

复位复杂性的问题
随着数字设计复杂性的增加,复位结构也变得非常复杂。在实现这种复杂的结构时,设计人员倾向于犯一些错误,这些错误可能导致系统的亚稳定性或其他功能故障。例如,如果源触发器由于其异步复位断言而异步转换到复位状态,并且目标触发器处于正常状态,则目标触发器的输入可能会在该触发器的建立或保持窗口内变化,从而导致亚稳态。

在SoC中,全局芯片复位功能用于组合软件或硬件生成的集成电路中的各种复位源,包括:上电复位(POR),低压检测复位,看门狗超时复位,调试复位,软件复位和损耗时钟复位等。

但是,系统的某些部分即使处于全局复位状态,例如计时功能和日历功能,也始终不处于复位状态。同样,在某些情况下,特定的复位状态寄存器会捕获本地的复位事件并导致全局系统复位。根据各种功能需求,需要多次复位来复位SoC的各个子系统,因为如果其中一个子系统开始异步运行,那么错误的复位状态可能会破坏未处于复位状态的其他逻辑。

在此类设计中,通常需要决定在设计中使用同步复位还是异步复位。同步复位基于这样的前提,即复位信号只会在时钟的有效沿上影响或复位触发器的状态。在某些设计中,复位必须由一组内部条件产生。对于这些类型的设计,建议使用同步复位,因为它会过滤时钟之间的逻辑方程式毛刺。 

但是,如果我们有一个门控时钟来节省功耗,则可能会与复位声明同时关闭该时钟。在这种情况下,只有异步复位才能起作用,因为在恢复时钟之前可能会除去复位。

下面的电路中, 两个触发器都有不同的复位源,即async_rstA_b 和async_rstB_b。驱动async_rstA_b而async_rstB_b 不被驱动可引起目的触发器的亚稳态,并且如果目的地触发器的输出向下行被进一步使用,那么可能会有一些功能故障。如图2

SoC中RDC的问题以及解决方法

                                                                                      图2

考虑一种情况,其中我们有两个复位源rst1 和rst2。两者都“AND”连接到第一触发器D1的复位引脚,而第二触发器的复位仅连接到rst2。

可以说源触发器的复位源实际上是目标触发器的复位源的超集。因此,可能存在这样的情况,即由于第一触发器输出的异步更改,我们只有第一触发器进行复位并在第二触发器注入亚稳态。图3所示。

 SoC中RDC的问题以及解决方法

                                                                                       图3

模块配置时的亚稳态
芯片中有些功能只能在POR期间复位,而在全局/热复位期间仍保持功能。因此,在全局复位期间,该功能的配置寄存器需要保持完整。但是,如果发生热复位,则在写入该特定寄存器时会破坏寄存器的内容,从而导致任何功能故障。图4,图5描述了这种情况。

SoC中RDC的问题以及解决方法

                                                                            图4

SoC中RDC的问题以及解决方法

                                                                                      图5

在这种情况下,目标寄存器(B [7:0])是配置寄存器,只能通过POR复位。如果程序员正在写该寄存器,而源触发器突然复位,则目标触发器可能变得亚稳态,并可能稳定为未定义或不需要的值。

由于异步复位导致时钟故障,如图6,

SoC中RDC的问题以及解决方法

                                                                                                     图6

 

异步复位期间导致同步内存损坏
系统同步内存应在热重置期间保留其内容。但是由于重置域交叉问题,内存数据损坏的可能性很高。尽管在热复位过程中不会使存储器复位,但是控制存储器的存储器控​​制器逻辑可以异步进入复位状态。如下图所示,在此期间,如果启用了内存(启用了内存芯片选择并且正在进行某些内存写操作),则其同步接口将违反时序,并会损坏。

在时序图中,热复位(RST_B)在有效时钟沿附近断言,这将 异步更改存储器控制器输出chip_select,address,write_data,write_enable,从而导致存储器接口处的时序违规并导致数据损坏。

 

SoC中RDC的问题以及解决方法

 

SoC中RDC的问题以及解决方法

 

 

缓解RDC问题的电路
根据功能要求,解决方案将有所不同。但是以下是一些基本的结构解决方案。但请注意:它们并不总是在所有情况下都有效,因此设计人员将需要判断哪种方法适合其特定情况。

使用目标触发器的同步输出。使用简单的两触发器同步器有时可以解决问题,方法是确保在目标触发器S1处发生的亚稳态 将被S2阻止, 并且不会传播到设计的其余部分。

SoC中RDC的问题以及解决方法