亚稳态:由于违背了触发器的建立和保持时间而产生的,在时钟上升沿这段时间窗口内,数据输入信号必须保持稳定。如果数据在这段时间发生了变化,则输出为“亚稳态”,输出会产生毛刺,或者需要较长时间才能回到稳定状态。
建立时间:即时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器。
保持时间:即指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
本来经过一定的延时值tco之后就会输出正确的稳定的电平值;由于产生了亚稳态,亚稳态持续了tMET时长后,恢复到稳定的电平状态(稳定,但不一定是正确的!),这段持续的时间叫做亚稳态的恢复时间,一般情况下这段时间不会超过一个或者两个时钟周期(取决于触发器的性能)。如果亚稳态持续时间过长(超过一个或者两个时钟周期),就有可能被下一级的触发器捕获,导致下一级触发器也处于亚稳态,这就是亚稳态的传播现象。
值得注意的是,进入亚稳态后,亚稳态持续时间是不确定的。
亚稳态窗口具有特定的时间长度,在这段时间内输入信号和时钟都应该保持不变(亚稳态窗口的概念我没有找到)。建立时间和保持时间共同决定亚稳态窗口的宽度,(在这段时间内输入信号和时钟都应该保持不变,如果发生变化,则输出可能变为亚稳态);窗口越大,进入亚稳态的概率越高。较新的逻辑器件有更小亚稳态窗口。
当系统的故障率恒定时,MTBF(Mean/Average Time Between Failures,平均无故障时间),故障率的倒数。
其中:
W-亚稳态窗口宽度,以及触发器的亚稳态时间常数于电气特性有关,会根据工艺技术而改变
τ-触发器的亚稳态时间常数
tr-允许超出器件正常传输延迟时间的解析时间。
fc-时钟频率
fd-异步信号边沿频率
τ的计算公式是:
根据公式1.1和1.2可以计算出两级同步器的MTBF:
(1)输入信号是异步信号
(2)时钟偏移/摆动高于容限值
(3)信号在不同频率或者相同频率但相位和偏移不同的时钟域下跨时钟域工作
(4)组合延迟使触发器的数据输入在亚稳态窗口发生变化
值得注意的是,这几种方法都不能保证阻止亚稳态传播,仅仅减小了亚稳态发生的概率。
使用上升沿D触发器,输入一个异步信号;再下降沿D触发器(增加亚稳态的概率),将D触发器的输出Q端分别输入D触发器和经过一个非门输入D触发器,之后输出两个D触发器同或,如果输出为1,则说明发生了亚稳态。
当异步输入信号比时钟周期大得多最有效,不能用于异步输入信号的宽度小于时钟周期的情况)模式A 如果输入与输出不同,则CLR=1; (1)采用多级同步器 由于使用了更多的触发器,延迟会累积增加。常常使用行波计数器对时钟进行幂为2的分频(在功耗较高的系统中能大量降低由逻辑或SOC引起的峰值功耗) 时钟线上的门控单元会导致时钟偏移并对毛刺敏感,并引入尖峰脉冲作用作用于触发器。含有门控时钟的设计在仿真时可能正常工作,但是在综合时就会出现问题。 在传统的同步设计风格中,系统时钟连接到每个寄存器的时钟端。动态功耗主要由三个部分组成: 不含锁存器的门控时钟电路(使用一个简单的与门 或 或门实现,取决于触发器使用哪个边沿)为避免过早截断时钟脉冲或误产生多个时钟脉冲,应使使能信号从时钟的上升沿起到时钟的下降沿止一直保持不变。 基于锁存器的门控时钟电路加入一个电平敏感锁存器,无需依靠门控自身满足上述条件,使能信号只需在时钟上升沿附近保持稳定。但必须特别注意时钟的占空比以及产生使能信号逻辑的延迟,因为使能信号必须在半时钟周期时产生。 解码器输入端会导致大量门翻转,可以用使能或选择信号阻止切换行为的传播。 两个触发器由两个相位相反的时钟信号控制。这会为使用同步复位和使用插入扫描链困难,同时也会增加确定关键信号的路径的难度。 相比于双倍同步时钟的优点: 组合环路是数字设计中导致不稳定和不可靠的最常见因素。在同步设计中,所有反馈回路都应包含寄存器。组合环路简历了不含寄存器的直接反馈回路,这违背了同步设计原理。 在用两个或者多个带有扇入和单扇出的连续节点产生延时是,就会形成延时链。通常将反相器链接在一起以增加延时,延时链通常出现在异步设计中,有时候解决其他组合逻辑导致的竞争条件。 设计通常要求基于某些事件产生脉冲。设计人员有时会使用延时链产生单个脉冲或一系列脉冲。这些技术是纯异步的,应该可能避免使用。 解决方案:使用同步方案产生脉冲 如果一个变量未能在always语句的所有可能执行条件下赋值,就会形成锁存器。 使用双边沿时钟能达到双倍的吞吐率,但会有一系列的问题。 设计者应该尽可能避免在内部产生时钟,因为如果操作不当,它会导致设计功能和时序问题。由于组合逻辑搭建的时钟会产生毛刺,使功能出现问题,比如时钟毛刺会导致计数器误增的情况。而且窄毛刺会违背寄存器的最小脉冲宽度要求。产生内部时钟的组合逻辑也会增加时钟线上的延时,如果时钟偏移大于数据延迟,则违背寄存器的时序要求。 解决方案:在组合逻辑的输出端增加一个寄存器,用寄存器的输出作为后面的时钟信号,以防止组合逻辑所产生的毛刺 在设计中要保证大多数时钟来自PLL。使用PLL避免异步时钟分频逻辑引起的许多问题,在对主时钟进行分频时,应该使用同步计数器或者状态机。寄存器直接产生分频时钟信号,不要对计数器或状态机的输出进行解码,然后产生时钟信号,会导致毛刺和尖峰脉冲。 使用行波计数器对时钟进行幂为2的分频,行为使用的门数更少。 时钟多路器用于同一个逻辑功能具有不同的时钟。 复位最基本的目的:SOC进入一个能进入稳定操作的确定状态,避免SOC在上电后进入随机状态而死机。 同步复位的复位信号只有在时钟的有效沿到来时才能影响或者触发器的状态。 同步复位的优点: 异步复位触发器在设计时加入一个复位引脚,当触发器复位端触发复位信号,进入复位状态。 异步复位的缺点: 异步复位的优点: 移除系统中的异步复位会使芯片进入不稳定的未知状态。 (1)违背复位恢复时间(复位撤销后和时钟再一次置高之间的时间):可能会出现亚稳态问题 异步复位对毛刺很迷干,这就意味着任何满足触发器最小复位脉冲宽度的额输入都能引发的输入都能硬气触发器复位。 **时钟偏移:**整个芯片时钟信号到达时间的差异(如果顺序相邻且时钟沿偏移较大的寄存器,就可能会有违背时序的问题)
两级采样的同步器 与一级同步相比,两级同步能够更可靠地避免亚稳态的出现,而三级以上同步器的效果并不能提高多少。
如果clk1模式B:
综上:减小亚稳态发生概率
(2)采用响应更快的触发器(减小亚稳态窗口)
(3)减小采样速率
(4)避免使用dV/dt 低的输入信号**时钟与复位
同步设计
避免使用行波计数器(即输出是下一级寄存器的时钟信号)
门控时钟
门控时钟是减少功耗的有力手段。在时钟被门控关闭后,该时钟网络和其中的寄存器都将停止翻转。而使用同步时钟使能,时钟树一直保持翻转而且每个触发器的内部电路保持活跃(触发器的输出没有改变),无法降低功耗。功耗组成
(1)在每个时钟沿变化的组合逻辑所产生的功耗(由于触发器驱动这些组合逻辑)
(2)由触发器产生的功耗
(3)时钟树产生的功耗(几乎消耗了芯片功耗的一半)不含锁存器的门控时钟电路
基于锁存器的门控时钟电路
加入控制信号,该信号可以再锁存器前先与使能信号进行一次或操作。
门控信号
双边沿或混合边沿时钟
(1)性能的提高
(2)功耗的降低 (优先使用双倍同步时钟)
用触发器驱动另一个触发器的异步复位端
推荐的设计技术
避免在设计中使用组合环路
1、组合逻辑违反了同步设计原则,很容易产生振荡,毛刺和时序违规。
2、组合逻辑实现的逻辑功能完全依赖于环路上的逻辑门延迟和布线延迟,当延迟发生改变,原来的逻辑功能也同样会发生变化,而且改变后的功能很难预测。
3、组合逻辑会设计软件进入无尽的计算中,为了完成计算,一些EDA工具会将环路割断,而不同的EDA软件对环路割断处理的过程是不尽相同的,这种过程不但使电路的实现偏离了最初的设计意图,而且使电路的实现呈现不确定性。
解决这个问题的方法:在组合环路中引入一个触发器或寄存器
另一个是将寄存器的输出端通过组合逻辑反馈到同一个寄存器的异步端(异步复位)
避免数字设计中的延时链
1、增加设计对操作环境的敏感性,降低设计的可靠度
2、增加设计移植到不同器件上的难度
解决方法:在设计中用同步技术取代异步技术避免使用异步脉冲产生器
assign b=a&!a;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
q<=0;
else
q<=1;
end
assign rst_n=~q;
下面的同步触发器可以检测输入
避免使用锁存器
1、上一级的毛刺会传递至下一级
2、锁存器时序模糊
避免使用双边沿时钟
使用双边沿遇到的问题:
1、不对称的时钟占空比会导致违背建立和保持时间
2、很难确定关键信号的路径
3、插入扫描链要求所有寄存器使用同样的时钟边沿(或者插入多路复用器保证在测试模式下使用单一时钟)时钟方案
内部产生的时钟
always@(*)begin
#50 clk1=~clk1;
end
always@(posedge clk)
begin
#50 clk2<=clk1;
end
分频时钟
行波计数器
在功耗较高的系统中很适合使用这种计数器,因为这样能大量降低由逻辑或SoC所引起的峰值功耗。多路时钟
满足以下标准,多路时钟是可以接受的(否则必须采用同步设计):
(1)初始化后,多路时钟逻辑不再改变
(2)在测试时,设计会选择普通时钟
(3)时钟切换时,寄存器始终处于复位状态
(4)时钟切换时,产生的短暂错误没有负面影响复位信号设计策略
在系统没有明确要求的情况下为SOC每个触发器提供复位信号;但在某些情况下(如流水线),应去掉某些寄存器的复位信号以使设计达到更高性能
同步复位
由于复位树的高扇出,复位延迟较时钟周期高。always@(posedge clk)
begin
if(!rst_n)
out<=1'b0;
else if(load)
out<=in;
end
使用同步复位会出现一个问题是综合工具无法分辨复位信号和其他信号的区别,可能会产生以下电路结构:
同步复位的缺点:
(1)同步复位可能需要一个脉冲展宽器,以保证复位信号出现在时钟有效沿处,增加了逻辑器件
(2)复位信号可能如上文一样被标记为x,被外部引脚控制
(3)如果使用门控时钟,在复位信号发出时,时钟可能关闭(只能使用异步复位)
(1)确保电路同步
(2)会综合为更小的触发器
(3)同步复位确保复位只发生在有效时钟沿,时钟可以作为过滤毛刺的方法。异步复位
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
out<=1'b0;
else if(load)
out<=in;
end
(1)异步复位不管产生或撤销复位信号,都是一个异步过程。加入异步复位在触发器时钟有效沿附近释放,输出就会进入亚稳态。
(2)复位电路源头存在毛刺问题
(1)只要库有带有异步复位的触发器,能保证没有任何复位信号加在数据路径上,对于时序很紧的设计,无法承担加入同步复位带来的额外单元门和额外线路延迟。
(2)异步复位不管有没有时钟都可以进行复位移除异步复位的问题
(2)复位移除可能会在不同时序元件的不同时钟周期内发生针对移除异步复位,采用异步复位同步释放的方案:
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
reg1<=0;
reg2<=0;
end
else
begin
reg1<=1;
reg2<=reg1;
end
end
过滤复位毛刺
过滤复位毛刺的方法
(1)复位输入引脚必须是施密特触发器
(2)采用延迟复位信号与复位信号做与门,过滤掉毛刺信号
控制时钟偏移
Tskew=Tci-Tcj
短路径问题