参考:
同步电路与全局异步电路
同步电路
同步电路的定义
即电路中的所有受时钟控制的单元(如触发器Flip Flop、寄存器Register),全部由一个统一的全局时钟控制。
例子:
两个触发器都受同一个时钟来控制。
同步电路设计的优缺点
同步电路设计的优点:
- 在同步设计中,EDA工具可以保证电路系统的时序收敛, 有效避免了电路设计中竞争冒险现象
- 由于触发器只有在时钟边缘才改变取值,很大限度地减少了整个电路受毛刺和噪声影响的可能
同步电路设计的缺点:
因为电路里面所有的触发器都由时钟网络来控制,所以必须要构建时钟树(时钟网络)。
在时钟网络中,触发器距离时钟源点的不同,会产生时钟偏斜(Clock Skew)。时钟偏斜(Clock Skew)、时钟抖动(Clock Jitter)等所有对时钟时序产生影响的因素,都会对触发器有影响。
时钟网络的存在, 也使得电路中增加了大量的缓冲器,增加了面积和功耗。(时钟树综合,需要加入大量的延迟单元,使得电路的面积和功耗大大增加)
例子:
时钟偏斜
全局异步电路
全局异步电路的定义
全局异步设计跟同步设计最大的不同就是它的电路中的数据传输可以在任何时候发生,电路中没有一个全局的或局部的控制时钟。
例子:
两个触发器的控制信号不同,时钟不同,这两个触发器相对独立。
异步电路设计的优缺点
异步电路设计的优点(与同步电路相比)
模块化特性突出,运行相对独立,不需要统一时钟控制。所以对信号的延迟不敏感 ,也没有时钟偏斜问题
没有时钟网络的影响,因此有潜在的高性能特性 、好的电磁兼容性 、具有低功耗的特性。
异步电路设计的缺点
由于模块独立性强,且缺乏统一的调度,设计复杂 ,缺少相应的EDA工具的支持。
在大规模集成电路设计中应 避免采用异步电路设计 。
同步时钟和异步时钟
注意区分同一个时钟域和不同的时钟域
同一个时钟域 、不同时钟域 主要针对时钟源点来说
例子:
好几个时钟,都是从同一个锁相环PLL出来的,这些时钟之间的相位和倍数都是可控的,它们之间是同步时钟。
两个时钟是从不同的锁相环PLL出来的,即使频率相同,也是异步时钟。因为它们之间的相位关系,无法控制。
在过去的20多年里,大部分数字电路设计都基于全局的时钟信号,即同步电路设计。
在一个理想的全局时钟控制下,只要电路的各个功能环节都实现了时序收敛,整个电路就可以可靠工作了。
由于EDA工具的广泛支持,采用同步电路设计的方法是目前ASIC和SoC设计的基本要求。
但是,通常大规模ASIC和SoC芯片中都采用了全局异步、局部同步的方法。
因此,在设计中必须要注意异步信号与同步电路的交互问题。
跨时钟域传递信号
在不同时钟域之间如何安全地传递信号
跨时钟域电路分类
跨时钟域电路主要分为这几种:
- 双锁存器法
- 单 bit 信号跨时钟域(单bit信号的跨时钟域电路又分为慢时钟到快时钟, 快时钟到慢时钟。)
- 多 bit 指示信号跨时钟域
- 多 bit数据跨时钟传输
双锁存器法
亚稳态相关概念和原理
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。
当一个数据刚好处于数据翻转过程中,既不是1也不是0,这个时候,触发器就进入了亚稳态。
一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测 何时输出才能稳定在某个正确的电平上。 在这个期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且 这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
亚稳态不能从根本上消除,但可以通过采取一定的措施使其对电路 造成的影响降低。
通常使用故障间隔平均时间(MTBF)来衡量亚稳态的影响。MTBF越大,说明亚稳态影响越小。
故障间隔平均时间
时间:
指正常没有亚稳态情况下,寄存器输出信号从源寄存器到目的寄存器的建立时间余量
tMET时间 = 采样时钟周期时间
– 输出信号正常的Tco时间
– 数据到达下一级寄存器的输入端口的其它延时时间T_data
– 下一级寄存器T_su时间
+ 时钟网络延时时间T_clk2-T_clk1
决定取值的参数中,Tco和Tsu是由器件本身的工艺 以及工作环境决定的。
设置时钟网络延时参数也很大程度上由器件决定。
在设计的时候,时钟周期是基本是定值。
所以,设计者要做的是减小T_data的时间。
T_data,指两个寄存器间的逻辑延时以及走线延时之和,要最大程度的减小它, 只能是不在连个寄存器间添加任何逻辑而已。(例如,简单的input=output)
基于此分析,得到双锁存器电平同步器。
双锁存器电平同步器
注意:虽然说是双锁存器,这里是两个触发器。
如果不采用触发器,直接将信号从a时钟域传递到b时钟域
一个信号在过渡到另一个时钟域时,如果仅仅用一个触发器将其锁存,那么用 b_clk 进 行采样的结果将可能是亚稳态。这也是信号在跨时钟域时应该注意的问题。
采用触发器传递信号
为了避免上节所述的亚稳态问题,就应当使参数 MTBF 尽可能的大。
通常采用的方法是双锁存器法, 即在一个信号进入另一个时钟域之前, 将该信号用两个锁存器连续锁存两次,最后得到的采样结果就可以消除亚稳态问题。
双锁存器同步法的优缺点
优点:
- 结构简单、易实现
缺点:
- 增加了两级触发器延时(在高性能计算中,两个时钟周期的消耗对系统性能有消极的影响。如果电路中时钟较多,跨时钟域则会浪费很多有效的时钟周期)
- 当快时钟域转到慢时钟域时,易造成慢时钟 采样丢失(还未来得及采样,数据就变化了)。故常用于慢时钟域转到快时钟域
双锁存器同步法适用条件:
用于慢时钟域转到快时钟域
{(Clk_slow的周期)} > {(Clk_fast的周期) + (路径延时)}
//确保信号可以被 Clk_fast采样到(假设Clk_fast和Clk_slow起始时刻相同求得)
//假设Clk_slow和Clk_fast起始时刻是相同的
{(data数据变化间隔)} > {(Clk_slow的周期)+2*(Clk_fast的周期) + (路径 延时)}
//确保所有的数据变化均能采集到。
亚稳态—双锁存器同步法例子
对于典型的 0.25µm 工艺 ASIC 库中的一个触发器,则 MTBF=2.01(day),即触发器每两天便可能出现一次亚稳态。如果将采样时间f 和异步事件触发频率α都提高,亚稳态出现还要频繁。
对于同样的参数,双锁存器法可将MTBF提升为9.57*10^9年,这个数值足够保证电子系统稳定地运行。
双锁存器同步法结论:
- 两级触发器已经将MTBF变得足够大;
- 三级或者更多级虽然能将亚稳态出现概率降得更低,但是影响电路效率;
通过前面的分析可知, 增加寄存器进行同步的方法只是不断降低亚稳态出现概率。
单bit信号的跨时钟域传输
边沿检测同步器
对于慢时钟到快时钟的信号传输,采用边沿检测同步器电路。
边沿检测同步器
边沿检测同步器电路如图:
这种方法通常应用在慢速向快速时钟传递过程中,可以检测输入信号的上升沿,也可以检测它的下降沿。
为什么称之为边沿检测呢?
慢时钟域下的一个有效脉冲最短等于慢时钟的一个周期,
站在快时钟域的角度来看,就会觉得这个原本慢时钟域一个周期的信号可能会在快时钟域下持续的好几个周期,但是呢,其实这个脉冲只发生了一次,所以快时钟去检查有效脉冲的翻转边沿是最为准确的,边沿上升或者下降只有一次。
这里我们也能看得出来,边沿检测同步器的功能:
将慢时钟域下一个时钟周期宽的脉冲搬移并缩小为快时钟域下一个时钟周期的脉冲。
边沿检测电路特点:
问题:这个设计能够实现边沿检测的效果吗?
例子:
clk1是慢时钟,clk2是快时钟
input即输入的data信号,是慢时钟域clk1下的一个脉冲。经过clk2两级同步。
逻辑门的B引脚波形比A引脚晚一个时钟周期。
将慢时钟域下一个时钟周期宽的脉冲搬移并缩小为快时钟域下一个时钟周期的脉冲。
边沿检测同步器适用条件:
delay(input data) > clk_fast + hold time (sync_Flip Flop)
//上面的clk_fast是clk2
最安全的 delay(input data)=2 clk_fast
输入数据的宽度必须比一个接受时钟周期加上一个同步触发器的hold时间要长。
最安全的就是两个同步周期宽度。
这样才可以保证,慢时钟域的脉冲足够保持到被快时钟的同步器拿到
脉冲同步器
对于快时钟域到慢时钟域,通常采用脉冲同步器进行同步。
脉冲同步器基本功能:
从快时钟域取出一个单时钟宽度脉冲,然后在慢时钟域中建立另一个单时钟宽度的脉冲。
脉冲同步器电路结构:
- 最左边是快时钟域下的一个翻转电路
- 中间是慢时钟域的两级同步器
- 最后是慢时钟域一级触发器+一个逻辑门
脉冲同步器电路功能分析:
快时钟的时钟频率比慢时钟频率高,慢时钟直接去采快时钟的脉冲,很有可能采不到。
通过翻转电路,将快时钟域,前后间隔较多周期的脉冲进行有效标定,形成toggle波形
这样就可以在慢时钟域下,先通过同步电路,将这个toggle信号进行同步,形成A、B信号的波形。
最后使用异或逻辑门,对A、B信号进行逻辑操作。
脉冲同步器限制条件:
- 输入脉冲之间的最小间隔必须等于两个同步器时钟周期。
- 如果输入脉冲相互过近,则新时钟域中的输出脉冲也紧密相邻,结果是 输出脉冲宽度比一个时钟周期宽。
- 当输入脉冲时钟周期大于两个同步器时钟周期时,这个问题更加严重。
- 这种情况下,如果输入脉冲相邻太近,则同步器就不能检测到每个脉冲。
三种同步器比较
结绳法
快时钟→慢时钟:
信号从快时钟域到慢时钟域过渡时,慢时钟将可能无法对变化太快的信号实现正确采样;
上述同步器法对两个时钟之间的关系要求很严格, 而“结绳法”适合任何时钟域的过渡。
“结绳法”原理:
将快时钟信号的脉冲周期延长,等到慢时钟同步 采样后再“解绳” ,还原为原来的脉冲周期宽度。
“结绳法”——利用数据的边沿作时钟
可以将脉冲无限延长,直到可以采集到数据,然后复位,要考虑产生数据的频率。
输入数据Din_clkA,作为快时钟域下触发器的时钟(上升沿)
当数据有上升沿的时,寄存器1的输出将会稳定在高电平,此时等待ClkB采样
当ClkB完成采样后,寄存器4会输出高电平
寄存器4的输出信号,同时反馈给寄存器1
若此时输入数据Din_clkA为低电平,与门输出的就是高电平,寄存器1完成复位
开始下一 次采样等待
注意:
是当数据来临(即上升沿)时,ClkB域需要等待3个ClkB才会在寄存器4输出并完成输入端的复位。
所以Din_ClkA如果变化较快,即持续时间短于3个ClkB,也就是Din_ClkA频率大于ClkB的1/3,那么这时Din_ClkA的变化 将无法被采样到。
因为ClkB域需要3个ClkB才能完成采样,并且此时Din_ClkA 必须是低电平才能复位,采用异步复位。
利用数据的边沿作时钟的“结绳法”结论:
在慢时钟采样快时钟的时候,结绳法适合采样数据较少(即脉冲间隔较大)的控制信号。
即脉冲间隔Ta>3Tb;即等待3个clkB时钟后,完成复位,才允许下一个输入脉冲。
“结绳法”——利用数据作为置位信号/异步复位信号
快时钟→慢时钟:
利用clkB的时钟周期,将触发器的输出展宽为单周期脉冲。
“结绳法”——利用两个时钟域的握手协议
翻转电路,将快时钟域的信号进行结绳,经过慢时钟域的两级同步器,将信号送到慢时钟的解绳电路中,最终得到慢时钟域下单周期的脉冲信号
慢时钟域得到这个信号后,也会对该信号进行结绳, 通过快时钟同步器 将信号送到快时钟的解绳电路中。解绳后,快时钟域就能得到慢时钟域给回来的响应信号。此时,快时钟域就知道慢时钟域已经收到刚才发送的消息。
“结绳法”总结:
快时钟→慢时钟 ,结绳就是将单脉冲延长,以方便采集到数据
结绳的方法归结为2类:
- 利用脉冲的边沿做时钟;
- 利用脉冲的电平(部分场合要求最小脉冲宽度)做选择器或者异步复位,置位。
关键点:什么时候结绳结束(采集到了数据就要让对方回到初始状态)
结绳结束方法:
- 利用采集到的脉冲做异步复位,置位。
- 利用采集到的脉冲再次结绳采集做握手响应信号
结绳法优缺点
- 结绳法可以解决快时钟域向慢时钟域过渡的问题, 且其适用的范围很广。
- 结绳法实现较为复杂,特别是其效率不高,在对设计性能要求较高的场合应该慎用。
问题:
采样中“快到慢”与“慢到快”在考虑问题时有什么区 别?为什么不能用慢时钟直接采用快时钟域的信号?
慢到快
只需要考虑亚稳态问题
快到慢
除亚稳态问题外,还需考虑慢时钟的采样速率问题。
因为根据采样定理,采样频率低于信号最高频率2倍的时候,是 无法完整采样的
参考: