网站建设与应用岗位,做网站赚钱的点在哪里,织梦网站更换域名,忻州网站建设费用前言
本系列整理数字系统设计的相关知识体系架构#xff0c;为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中#xff0c;D触发器是最常用的器件#xff0c;也可以说是时序逻辑的核心#xff0c;本文根据个人的思考历程结合相关书籍内容和网上文章#xff0c;聊一聊D…前言
本系列整理数字系统设计的相关知识体系架构为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中D触发器是最常用的器件也可以说是时序逻辑的核心本文根据个人的思考历程结合相关书籍内容和网上文章聊一聊D触发器与亚稳态的那些事。
D触发器结构
由传输门和两个反相器组成一个循环电路锁存器再由前后两级锁存器按主从结构连接而成。分别用两个反相时钟控制 触发器在时钟有效沿的短期时间 “ 窗口” 采样数据。传输门起开关的作用随着CLK的状态变化切换开关。从输出来看的话前级的锁存器的值会有序传送给后级随着时钟输入。 D触发器的工作时序如下图图中的D为上图D触发器输入端Q为D触发器输出端。此处分析并不考虑时钟存在抖动偏移的情况认为时钟是理想的没有抖动偏移的。 时钟为低电平时也即主锁存器工作时D触发器的主锁存器进行锁存在图中标号1为输入的信号。主锁存器经过传输门和反相器进行数据寄存此时后级的从锁存器和前级隔开从锁存器输出上一个时钟周期的数据。 时钟为高电平时也即从锁存器工作时D输入端和主锁存器断开确保数据稳定然后主锁存器将数据传输给从锁存器然后输出到Q端。 标号2的虚线表示理想条件下无延时主锁存器的锁存边沿实际上主锁存器稳定锁存需要时间所以相比理想条件需要延时一段时间。标号3的虚线表示理想条件下无延时从锁存器的锁存边沿实际上从锁存器稳定锁存需要时间所以相比理想条件需要延时一段时间。根据主从锁存器的输出结果可得到D触发器输出Q的波形。图中的标号4中的虚线表示理想条件下无延时从锁存器的锁存边沿这里的延时是经过传输门 TG3 和反相器到输出端 Q 的延迟。
同时当时钟由低电平变为高电平时涉及到了两组传输门的切换因为实际的物理模型开关切换都是需要时间的并且每个开关进行开断时都有一定的时间偏差所以在此时D端的输入改变就容易造成从锁存器的锁存错误从而造成从锁存器的反相器环路想后级传递值时给出错误的数据值进而影响功能。
与主锁存器相关的建立时间
此时再回顾建立时间的定义建立时间 通常表示为tsu指在时钟上升沿来临之前信号保持稳定的最小时间。结合前面的分析建立时间的存在意义也就是于此。在时钟电平跳变前主锁存器需要稳定锁存我们想要的数据由于实际物理电路的延迟需要提前一段时间进行将数据进行稳定。因此建立时间实质上是主锁存器锁存需要的时间。
与从锁存器相关的保持时间
再回顾保持时间的定义保持时间通常表示为th指在时钟上升沿来临之后信号保持稳定的最小时间。结合前面的分析保持时间的存在意义也就是于此。当时钟进入高电平后由于传输门关断需要一定的时间因此输入D必须继续稳定一段时间才能够保证数据被稳定锁存。因此保持时间实质上是传输门切换至从锁存器锁存数据需要的时间。
简单来说主锁存器决定了D触发器的建立时间从锁存器决定了D触发器的保持时间从上面的例子中可以很容易看到同时说明一点上面的分析均基于理想时钟的情况下同样的道理时钟的抖动也会影响数据正常锁存。
亚稳态理论引入
所以根据前文D触发器模型的分析可知当信号没有满足两个锁存器的锁存时间时也即违背了触发器的建立和保持时间就没法正常的让系统工作。设计中任何一个触发器都有特定的建立和保持时间在时钟上升沿前后的这段时间窗口内数据输入信号必须保持稳定。如果信号在这段时期发生了变化那么输出将是未知的。这种有害状态的传播就叫做亚稳态。
亚稳态窗口
因此可以定义触发器的建立时间和保持时间为亚稳态窗口( Metastability Window)。在亚稳态窗口内如果信号发生变化输出就可能变成亚稳态。建立时间和保持时间共同决定亚稳态窗口的宽度。 窗口越大进人亚稳态的概率越高。在大多数情况下较新的逻辑器件会有更小的亚稳态窗口也就意味着器件进入亚稳态的概率会更小。
异步系统容易发生亚稳态
在同步系统中输入信号总是满足触发器的时序要求所以不会发生亚稳态。但是在异步系统中由于数据和时钟的关系不是固定的因此有时会出现违反建立和保持时间的现象。此时触发器的输出会因此而产生毛刺或者暂时保持在不稳定状态而且需要较长时间才能回到稳定状态。
当触发器处在亚稳态时输出会在高低电平之间波动这会导致延迟输出转换过程并超出所规定的时钟到输出的延迟值(tco)。亚稳态输出恢复到稳定状态所需的超出t的额外时间部分称为稳定时间(tMET)。并非所有不满足建立和保持时间的输入变化都会导致亚稳态输出。触发器是否进入亚稳态和返回稳态所需时间取决于生产器件的工艺技术与外界环境。一般来说触发器都会在一个或者两个时钟周期内返回稳态。 当信号在一个时钟域( src_data_out里变化在另一个时钟域(dest_data_in)内采样时就会导致输出变成亚稳态。这就是所谓的同步失败会导致逻辑功能的异常。 平均无故障时间MTBF
当系统的故障率恒定时MTBF ( Mean/ Average Time Between Failures,平均无故障时间)就是故障率的倒数。我们可以从中知道特定触发器发生故障的频率。
对于一个具有给定时钟频率和在该时钟周期内具有均匀概率密度的异步数据信号边沿的单级同步器亚稳态事件的发生率可以用建立、保持时间窗口和时钟周期的比值乘以信号触发频率来计算。 $$ \begin{aligned} \frac {1}{故障率}\ MTBF \ \frac {e(t_r/\tau)}{Wf_cf_d}\
\end{aligned} $$ t r : 允许超出器件正常传输延迟的解析时间 τ 触发器的亚稳态 ( 解析 ) 时间常数 W 亚稳态窗口 f c 时钟频率 f d 异步信号边沿频率 \begin{aligned} t_r:允许超出器件正常传输延迟的解析时间\\ \tau触发器的亚稳态(解析)时间常数\\ W亚稳态窗口\\ f_c时钟频率\\ f_d异步信号边沿频率\\ \end{aligned} trτWfcfd:允许超出器件正常传输延迟的解析时间触发器的亚稳态(解析)时间常数亚稳态窗口时钟频率异步信号边沿频率
常数W和τ跟触发器的电气特性有关会根据工艺技术而改变。所以相同工艺生产出来的不同器件有着相似的W和τ值。
如何尽量避免亚稳态
每当违背建立、保持时间时亚稳态就会出现所以了解在何种情况下容易发生亚稳态自然也就知道如何更好的避免亚稳态。在以下条件中信号可能违背建立时间和保持时间的要求
异步信号 输入信号是异步信号。时钟不稳定 时钟偏移/摆动上升/下降时间)高于容限值。跨时钟域工作 信号在两个不同频率或者相同频率但是相位和偏移不同的时钟域下跨时钟域工作。组合延迟过大 使触发器的数据输入在亚稳态窗口内发生变化。
亚稳态会引起过多的传输延迟和系统故障所有的触发器和寄存器都存在亚稳态可能。
亚稳态不能根除但是可以减小亚稳态发生的概率。
在最简单的情况下设可以通过确保时钟周期足够长来避免亚稳态也即降低时钟频率但这种方法很难再满足性能的要求。另一种避免亚稳态的方法就是使用同步器这种同步器最好在单Bit信号的情况下使用。
使用多级同步器
避免亚稳态最常见的方法是在跨时钟域的信号上加上一个或者多个同步触发器如下图所示。这种方法用一个完整的时钟周期来解决第一级同步触发器的亚稳态问题不包括第二级触发器的建立时间)。但是这种方式增加了同步逻辑输入的延迟。 简而言之就是对于异步信号进行打拍处理这个在数字系统设计中很常用。
使用时钟倍频电路的多级同步器
多级同步器的一个局限就是系统需要花费较长的时间去响应异步输入。解决这个问题的办法就是使用倍频时钟作为两个同步触发器的时钟输入。Altera的FPGA中具有这项称为时钟倍频的技术。 这种方法不仅能够让系统在一个系统时钟周期内响应一个异步输入而且改善了MTBF。尽管这种倍频时钟能够降低MTBF但是这个影响要超过两级触发器引起的偏移量。
两种方法都不能保证同步器阻止亚稳态传播下去它们仅仅减少了亚稳态发生的概率。
同步器的类型
根据MTBF的计算公式 一个异步输入电路的MTBF和用于从亚稳态恢复的时间呈指数关系。 用同步器构成的时间缓冲器可以帮助从亚稳态中恢复。这里参考的是《硬件架构的艺术》这本书但是个人感觉翻译的笔者可能把这段搞混掉了如果看了原书的人可能没太能搞懂他说的两种同步器图片和内容在我看来好像是存在不对应的情况这里就依据个人理解对书中的内容进行勘误。
在《硬件架构的艺术》这本书中介绍了两级同步器的两种不同的模式模式A慢时钟域转快时钟域和模式B快时钟域转慢时钟域。
模式A慢时钟域转快时钟域
模式A是一个标准的电路当异步输入信号比时钟周期大得多时最有效。这里根据我的个人理解他可能想表达的就是常规在目的时钟域中打两拍的做同步所以我这里暂且认定前面提到的多级同步器是他这里说的标准电路 使用在目的时钟域打两拍的方式作为两级同步器即使异步输入在建立时间区间之外稳定它仍然需要由时钟驱动产生两个周期的延迟否则FF1可能进入亚稳态。如果亚稳态在不到一个时钟周期内就解析了FF2就会有稳定的输入否则就需要级联更多的触发器作为同步器。
模式B快时钟域转慢时钟域
对于同步器的模式B第一级触发器的输入D与Vcc相连同时时钟信号是异步输入信号。另外两个触发器直接由系统时钟clk控制。一个短脉冲让q1变成高电平这个高电平在经过两个时钟clk沿后从sync_out输出。 本节总结
当信号存在跨时钟域工作或者为异步信号时此时要采用同步器进行同步确保工作稳定。如果是慢时钟域转快时钟域的场景可以进行打拍处理如果是快时钟域转慢时钟域就采用同步器的模式B。
面对亚稳态建议
在两个相互异步系统的交界面亚稳态是不可避免的。下面的几点建议可以明显减小亚稳态发生的概率。
工艺器件角度
采用响应更快的触发器缩短亚稳态窗口 Tw )。使用亚稳态硬化触发器专为高宽带设计并且减少为时钟域输入电路而优化的采样时间)。
设计角度
采用同步器。使用级联触发器两个或者多个)作为同步器。如果一个触发器的亚稳态失败概率为P那么N个触发器的亚稳态失败率就是P^{N}。减少采样速率或者说降低时钟频率。避免使用dV/dt低的输入信号电压突变较慢的输入信号。
小思与总结
本文针对前面D触发器的分析没有进行考虑时钟的偏移情况相关内容在后续介绍时序约束时进行整理同时本文的同步方法建议在单Bit信号进行使用多Bit信号或者单Bit信号处理的其他方法待后续进行整理。
为什么多Bit信号不能使用文中的同步器方式呢在《硬件架构的艺术》书中提到了这样一句话一个异步信号不应该被两个或者多个同步器所同步这样做会存在多个同步器输出产生不同信号的风险。 这大概也就是这个问题的答案具体分析将在后面关于跨时钟处理的文章中进行整理解答笔者水平有限如有错误欢迎讨论。
reference
CMOS的宽/长比、传输门与三态门、锁存器与触发器、简单版图、竞争与冒险一文解决关于建立保持时间的困惑 - 知乎硬件架构的艺术