硬件架构的艺术(一)

亚稳态

亚稳态的概念

亚稳态:由于违背了触发器的建立和保持时间而产生的,在时钟上升沿这段时间窗口内,数据输入信号必须保持稳定。如果数据在这段时间发生了变化,则输出为“亚稳态”,输出会产生毛刺,或者需要较长时间才能回到稳定状态。
建立时间:即时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器。
保持时间:即指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
亚稳态时序参数本来经过一定的延时值tco之后就会输出正确的稳定的电平值;由于产生了亚稳态,亚稳态持续了tMET时长后,恢复到稳定的电平状态(稳定,但不一定是正确的!),这段持续的时间叫做亚稳态的恢复时间,一般情况下这段时间不会超过一个或者两个时钟周期(取决于触发器的性能)。如果亚稳态持续时间过长(超过一个或者两个时钟周期),就有可能被下一级的触发器捕获,导致下一级触发器也处于亚稳态,这就是亚稳态的传播现象。
触发器中的亚稳态值得注意的是,进入亚稳态后,亚稳态持续时间是不确定的。

亚稳态窗口

亚稳态窗口具有特定的时间长度,在这段时间内输入信号和时钟都应该保持不变(亚稳态窗口的概念我没有找到)。建立时间和保持时间共同决定亚稳态窗口的宽度,(在这段时间内输入信号和时钟都应该保持不变,如果发生变化,则输出可能变为亚稳态);窗口越大,进入亚稳态的概率越高。较新的逻辑器件有更小亚稳态窗口。
亚稳态窗口

MTBF

当系统的故障率恒定时,MTBF(Mean/Average Time Between Failures,平均无故障时间),故障率的倒数。
MTBF的计算公式
其中:
W-亚稳态窗口宽度,以及触发器的亚稳态时间常数于电气特性有关,会根据工艺技术而改变
τ-触发器的亚稳态时间常数
tr-允许超出器件正常传输延迟时间的解析时间。
fc-时钟频率
fd-异步信号边沿频率
τ的计算公式是:
τ计算公式根据公式1.1和1.2可以计算出两级同步器的MTBF:
两级同步器的MTBF计算公式

以下情况可能会发生亚稳态:

(1)输入信号是异步信号
(2)时钟偏移/摆动高于容限值
(3)信号在不同频率或者相同频率但相位和偏移不同的时钟域下跨时钟域工作
(4)组合延迟使触发器的数据输入在亚稳态窗口发生变化

减小亚稳态发生的概率的方法:

  1. 最简单的方法:确保时钟周期足够长避免亚稳态,即确保fc比较小,能够使得故障率降低。
  2. 使用多级同步器:允许输出出现的亚稳态可以长达一个周期,在这个周期内,亚稳态特性减弱。在第二个时钟沿到来时,第二级同步器采样,之后才把该信号传递到内部逻辑中去。第二级输出是稳定且已被同步了的。如果在第二级采样时保持时间不够,第一级的输出仍然处于很强的亚稳态,将会导致第二级同步器也进入亚稳态,但这种故障出现的概率比较小。正如MTBF(1.3)公式所示,加入二级同步器能够增加MTBF的值,即降低故障率。

多级同步器

  1. 使用时钟倍频的多级同步器。由于多级同步器的一个局限就是系统需要花费较长的时间去响应异步输入(即亚稳态不需要一个时钟周期,即可稳定),但使用倍频时钟降低MTBF能让系统在一个系统时钟周期内响应一个异步输入。

倍频的多级同步器
值得注意的是,这几种方法都不能保证阻止亚稳态传播,仅仅减小了亚稳态发生的概率。

亚稳态测试电路

使用上升沿D触发器,输入一个异步信号;再下降沿D触发器(增加亚稳态的概率),将D触发器的输出Q端分别输入D触发器和经过一个非门输入D触发器,之后输出两个D触发器同或,如果输出为1,则说明发生了亚稳态。
亚稳态测试电路

同步器的类型:

模式A:

当异步输入信号比时钟周期大得多最有效,不能用于异步输入信号的宽度小于时钟周期的情况)模式A 如果输入与输出不同,则CLR=1;
同步器
两级采样的同步器 与一级同步相比,两级同步能够更可靠地避免亚稳态的出现,而三级以上同步器的效果并不能提高多少。
如果clk1<clk2, 时钟域2中采用同步器模式A,否则则采用同步器模式B

模式B:

第一级触发器的输入D与VCC连,输入时钟是异步输入信号。
两级同步器

综上:减小亚稳态发生概率

(1)采用多级同步器
(2)采用响应更快的触发器(减小亚稳态窗口)
(3)减小采样速率
(4)避免使用dV/dt 低的输入信号**

时钟与复位

同步设计

避免使用行波计数器(即输出是下一级寄存器的时钟信号)

由于使用了更多的触发器,延迟会累积增加。常常使用行波计数器对时钟进行幂为2的分频(在功耗较高的系统中能大量降低由逻辑或SOC引起的峰值功耗)
行波计数器

门控时钟

时钟线上的门控单元会导致时钟偏移并对毛刺敏感,并引入尖峰脉冲作用作用于触发器。含有门控时钟的设计在仿真时可能正常工作,但是在综合时就会出现问题
门控时钟线同步时钟使能
门控时钟是减少功耗的有力手段。在时钟被门控关闭后,该时钟网络和其中的寄存器都将停止翻转。而使用同步时钟使能,时钟树一直保持翻转而且每个触发器的内部电路保持活跃(触发器的输出没有改变),无法降低功耗。

功耗组成

在传统的同步设计风格中,系统时钟连接到每个寄存器的时钟端。动态功耗主要由三个部分组成:
(1)在每个时钟沿变化的组合逻辑所产生的功耗(由于触发器驱动这些组合逻辑)
(2)由触发器产生的功耗
(3)时钟树产生的功耗(几乎消耗了芯片功耗的一半)

不含锁存器的门控时钟电路

不含锁存器的门控时钟电路(使用一个简单的与门 或 或门实现,取决于触发器使用哪个边沿)为避免过早截断时钟脉冲或误产生多个时钟脉冲,应使使能信号从时钟的上升沿起到时钟的下降沿止一直保持不变。
不含锁存器的时钟门控电路

基于锁存器的门控时钟电路

基于锁存器的门控时钟电路加入一个电平敏感锁存器,无需依靠门控自身满足上述条件,使能信号只需在时钟上升沿附近保持稳定。但必须特别注意时钟的占空比以及产生使能信号逻辑的延迟,因为使能信号必须在半时钟周期时产生。
基于锁存器的时钟门控电路加入控制信号,该信号可以再锁存器前先与使能信号进行一次或操作。
标准时钟门控单元

门控信号

解码器输入端会导致大量门翻转,可以用使能或选择信号阻止切换行为的传播。
使能端的解码器

双边沿或混合边沿时钟

两个触发器由两个相位相反的时钟信号控制。这会为使用同步复位和使用插入扫描链困难,同时也会增加确定关键信号的路径的难度。

相比于双倍同步时钟的优点
(1)性能的提高
(2)功耗的降低 (优先使用双倍同步时钟)
双边沿时钟

用触发器驱动另一个触发器的异步复位端

用触发器驱动另一个触发器的异步复位端

推荐的设计技术

避免在设计中使用组合环路

组合环路是数字设计中导致不稳定和不可靠的最常见因素。在同步设计中,所有反馈回路都应包含寄存器。组合环路简历了不含寄存器的直接反馈回路,这违背了同步设计原理。
1、组合逻辑违反了同步设计原则,很容易产生振荡,毛刺和时序违规。
2、组合逻辑实现的逻辑功能完全依赖于环路上的逻辑门延迟和布线延迟,当延迟发生改变,原来的逻辑功能也同样会发生变化,而且改变后的功能很难预测。
3、组合逻辑会设计软件进入无尽的计算中,为了完成计算,一些EDA工具会将环路割断,而不同的EDA软件对环路割断处理的过程是不尽相同的,这种过程不但使电路的实现偏离了最初的设计意图,而且使电路的实现呈现不确定性。
解决这个问题的方法:在组合环路中引入一个触发器或寄存器
组合环路的例子
另一个是将寄存器的输出端通过组合逻辑反馈到同一个寄存器的异步端(异步复位)
草拟过异步控制端口的组合环路

避免数字设计中的延时链

在用两个或者多个带有扇入和单扇出的连续节点产生延时是,就会形成延时链。通常将反相器链接在一起以增加延时,延时链通常出现在异步设计中,有时候解决其他组合逻辑导致的竞争条件
1、增加设计对操作环境的敏感性,降低设计的可靠度
2、增加设计移植到不同器件上的难度
解决方法:在设计中用同步技术取代异步技术

避免使用异步脉冲产生器

设计通常要求基于某些事件产生脉冲。设计人员有时会使用延时链产生单个脉冲或一系列脉冲。这些技术是纯异步的,应该可能避免使用。

  1. 将同一个触发信号接到两个输入与门的输入端,但是对其中一个输入端的信号取反或加入延迟链。
assign b=a&!a;
  1. 寄存器输出经过延迟链后驱动同一个寄存器的异步复位端
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		q<=0;
	else
		q<=1;
end
	assign rst_n=~q;

解决方案:使用同步方案产生脉冲
下面的同步触发器可以检测输入
同步脉冲触发器

避免使用锁存器

如果一个变量未能在always语句的所有可能执行条件下赋值,就会形成锁存器。
1、上一级的毛刺会传递至下一级
2、锁存器时序模糊
锁存器的竞争条件

避免使用双边沿时钟

使用双边沿时钟能达到双倍的吞吐率,但会有一系列的问题。
双边沿时钟
使用双边沿遇到的问题
1、不对称的时钟占空比会导致违背建立和保持时间
2、很难确定关键信号的路径
3、插入扫描链要求所有寄存器使用同样的时钟边沿(或者插入多路复用器保证在测试模式下使用单一时钟)

时钟方案

内部产生的时钟

设计者应该尽可能避免在内部产生时钟,因为如果操作不当,它会导致设计功能和时序问题。由于组合逻辑搭建的时钟会产生毛刺,使功能出现问题,比如时钟毛刺会导致计数器误增的情况。而且窄毛刺会违背寄存器的最小脉冲宽度要求。产生内部时钟的组合逻辑也会增加时钟线上的延时,如果时钟偏移大于数据延迟,则违背寄存器的时序要求。
内部产生时钟例子

always@(*)begin
 #50 clk1=~clk1;
 end

解决方案:在组合逻辑的输出端增加一个寄存器,用寄存器的输出作为后面的时钟信号,以防止组合逻辑所产生的毛刺

always@(posedge clk)
begin
#50 clk2<=clk1;
end

分频时钟

在设计中要保证大多数时钟来自PLL。使用PLL避免异步时钟分频逻辑引起的许多问题,在对主时钟进行分频时,应该使用同步计数器或者状态机。寄存器直接产生分频时钟信号,不要对计数器或状态机的输出进行解码,然后产生时钟信号,会导致毛刺和尖峰脉冲。

行波计数器

使用行波计数器对时钟进行幂为2的分频,行为使用的门数更少。
行波计数器在功耗较高的系统中很适合使用这种计数器,因为这样能大量降低由逻辑或SoC所引起的峰值功耗。

多路时钟

时钟多路器用于同一个逻辑功能具有不同的时钟。
多路时钟满足以下标准,多路时钟是可以接受的(否则必须采用同步设计):
(1)初始化后,多路时钟逻辑不再改变
(2)在测试时,设计会选择普通时钟
(3)时钟切换时,寄存器始终处于复位状态
(4)时钟切换时,产生的短暂错误没有负面影响

复位信号设计策略

复位最基本的目的:SOC进入一个能进入稳定操作的确定状态,避免SOC在上电后进入随机状态而死机。
在系统没有明确要求的情况下为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)异步复位不管有没有时钟都可以进行复位

移除异步复位的问题

移除系统中的异步复位会使芯片进入不稳定的未知状态。

(1)违背复位恢复时间(复位撤销后和时钟再一次置高之间的时间):可能会出现亚稳态问题
(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
时钟偏移

短路径问题

短路径问题如何改善时钟偏移(使其最小)

  1. 在数据路径上加入延迟
  2. 时钟反转(在发送寄存器接受时钟沿前,时钟会先驱动接受触发器读入发送值) 时钟反转方法学
  3. 交替相位时钟
    (1)交替使用时钟沿:为时钟偏移提供半个时钟周期的余量。
    (2)交替使用时钟相位:相邻触发器组有同一时钟的两个不同相位驱动。
    (3)行波时钟:只有当上一个触发器输出翻转,下一个触发器发挥被时钟驱动,避免了数据传播延迟比时钟偏移还短时。
    交替相位时钟
  4. 平衡线路长度
  • 11
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值