一.亚稳态
1.亚稳态的产生原因
为了确保在时钟沿进行可靠稳定的操作,需要数据在时钟沿的前后稳定不变,时钟沿前数据应该保持不变的时间称为建立时间(Tsu),时钟沿后数据应该保持不变的时间称为保持时间(Th)。
信号在传输期间,不符合保持时间和建立时间的要求,寄存器输入端数据在对应时钟的保持时间和建立时间的时序窗口内变化,导致寄存器输出端处于一个不稳定的状态,如图一,然后此不稳定的状态逐级传递到其他寄存器,其他寄存器会采到不同的值,整个系统就会处于一种不一致的状态,逻辑混乱。

2.什么情况下会产生亚稳态?
(1)信号在不同时钟域进行传输,由于源时钟域和目的时钟域的相位不一样,导致源寄存器的输出会在任意的时间点到达目的寄存器,可能就会不满足建立时间和保持时间的要求。
(2)采集异步信号(例如异步复位电路的设计),由于异步信号会在任意时间到达目的寄存器,所以也可能会出现不满足建立时间和保持时间的要求。
二.CDC单bit信号处理
1.概述
按照上面产生亚稳态的两种情况可以分为,信号传输的跨时钟域处理以及采集异步信号的跨时钟域处理。信号传输的跨时钟域处理又可以分为单bit信号以及多bit信号传输的跨时钟域处理。采集异步信号的跨时钟域处理在前面的博文中已经讲过(异步复位,同步释放)。本次内容为单bit信号传输的跨时钟域处理。
单比特信号传输的跨时钟域处理可以分为快时钟到慢时钟以及幔时钟到快时钟。
2.幔时钟到快时钟
幔时钟到快时钟,可以用同步器打拍的模式。一般打两拍就行。如下图。
网上亚稳态寄存器打拍对应的时序图有很多,但是感觉这张图非常不错。完美地将建立时间,保持时间,寄存器时钟有效到数据输出的时间,以及亚稳态恢复时间都描述到了,神图哇。
亚稳态恢复时间 Tmet 关系到后级寄存器的采集稳定问题,Tmet影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成Tmet增长。
触发器在时钟CLK上升沿采样,数据sig在建立保持时间Tsu和Th内需要稳定不变,否则出现亚稳态!我们在这个时间“窗口”内采样到的数据即为触发器采样到的数据,经过Tco的时间后,触发器就会输出采样到的数据,因为不满足数据sig在建立保持时间Tsu和Th内需要稳定不变的要求,所以Reg1的输出出现亚稳态。

当Tmet持续时间大于一个时钟周期时,Reg2也会采集到亚稳态,只不过由于Tmet和寄存器采集到亚稳态离稳定态的时刻有关,所以对于Reg2来说Tmet会更小,当小于一个时钟周期时,Reg3就会采集到稳点状态。
对于这种单bit信号从慢时钟域到快时钟域的传输,打两拍就可以大概率避免亚稳态。
3.从快时钟到幔时钟
此情况分为两种:电平信号和脉冲信号。
3.1电平信号
电平信号是指长时间保持不变的信号。保持不变的时间限定是相对于慢时钟而言的。只要快时钟的信号保持高电平或低电平的时间足够长,以至于能被慢时钟在满足时序约束的条件下采集到,就可以认为该信号为电平信号。既然电平信号能够被安全的采集到,所以从快时钟域到慢时钟域的电平信号也采用延迟打拍的方法做同步。
3.1脉冲信号
脉冲信号是指从快时钟域输出的有效宽度小于慢时钟周期的信号。如果慢时钟域直接去采集这种窄脉冲信号,有可能会漏掉。此时可以通过相互握手的方式对窄脉冲信号进行脉宽扩展,这样就能确保幔时钟域能采集到信号。
(1) 快时钟域对脉冲信号进行检测,检测为高电平时输出高电平信号 pulse_fast_r。或者快时钟域输出高电平信号时,不要急于将信号拉低,先保持输出信号为高电平状态。
(2) 慢时钟域对快时钟域的信号 pulse_fast_r 进行延迟打拍采样。因为此时的脉冲信号被快时钟域保持拉高状态,延迟打拍肯定会采集到该信号。
(3) 慢时钟域确认采样得到高电平信号 pulse_fast2s_r 后,再反馈给快时钟域。
(4) 快时钟域对反馈信号 pulse_fast2s_r 进行延迟打拍采样。如果检测到反馈信号为高电平,证明慢时钟域已经接收到有效的高电平信号。如果此时快时钟域自身逻辑不再要求脉冲信号为高电平状态,拉低快时钟域的脉冲信号即可。
从快时钟到慢时钟的信号处理参考4.3 Verilog 跨时钟域传输:快到慢 | 菜鸟教程
Note:
CDC多bit信号处理,下一节在总结。