亚稳态问是时序电路中寄存器的信号传输问题,也是老生常谈。
1. 亚稳态定义
对于一个寄存器来说,需要posedge clk采样D端的信号嘛,采样之后还需要寄存器将D端的信号驱动到Q端嘛。
为了保证采样和驱动的稳定,就需要在posedge clk之前D端信号就得稳定了,并且要一直稳定到Q端被正确驱动之后。
所以有了以下两个寄存器特性
● 建立时间 T s e t u p T_{setup} Tsetup:触发器CK端有效时钟沿到来之前,D端输入数据保持稳定的最短时间。
● 保持时间 T h o l d T_{hold} Thold:触发器CK端有效时钟沿到来之后,D端输入数据保持稳定的最短时间。
● 亚稳态:触发器建立时间或保持时间不满足,导致Q端输出电平为介于高电平和低电平之间的第三稳定点。
需要一定时间恢复
2. 亚稳态的原因
2.1. 同步时钟
静态时序分析(Static Timing Analysis, STA)
2.2. 异步时钟
其实STA的分析是对于同步电路而言,异步电路同样会出现亚稳态问题,就是跨时钟域了。
跨时钟域
就是两个触发器用的时钟频率不相同,那么UFF1/CK采样的时候采样或驱动时UFF1/D端不稳定那可太常见了。
3. 亚稳态 的解决方案
亚稳态问题解决方案总结如下。
如图所示,跨时钟域这么多情形,都可以追溯至电平信号打两拍解决亚稳态问题。例如当单bit跨时钟域不满足“3个沿”条件,即可以稳定采样时,就需要找到一个满足“3个沿”条件的电平信号,因此先使用异或展宽构造一个电平信号。
多bit跨时钟域时若满足“3个沿”,可以稳定采样时,使用Grey码将多bit跨时钟域 转化为单bit电平跨时钟域,之后就可以电平同步了。也可以使用valid作为多bit的等效电平信号,之后直接电平同步即可。