【《硬件架构的艺术》读书笔记】02 时钟和复位(3)
2.6.1 用同步复位进行设计
上面两个电路功能一样,但是下面的电路如果load信号为X,触发器便会停在不定态。可以使用编译指令告诉指定的信号为复位信号,综合工具就会使该信号尽可能接近触发器,防止初始化的问题发生。(将这些指令加入RTL代码中以避免重新综合)
2.6.1.1 使用同步复位的优点。
保证电路100%同步。
同步复位会综合为更小的触发器,特别是复位信号被触发器输入逻辑门控(如上图)。
确保复位只发生在有效时钟沿,过滤掉毛刺。
一些设计中复位由内部产生,这样的设计中使用同步复位信号,可以将时钟间的复位毛刺过滤掉。
2.6.1.2 缺点
不是所有ASIC库中都带有内置的同步复位触发器,很容易把复位逻辑综合到触发器本身之外。
可能需要一个脉冲展宽器,保证复位信号出现在时钟有效沿。多时钟设计中必须考虑这个问题。
复位经过组合逻辑产生就会存在潜在的问题。
在复位信号发出时,时钟可能关闭,这时只能使用异步复位,并在时钟恢复前移除复位信号。
有三态就需要oe立即动作适合使用异步复位,下面同步复位信号也可以直接做到立即撤销使能,且可以简化时序分析。
2.6.2 使用异步复位进行设计
异步复位没有额外的路径,比同步复位更简单。
2.6.2.1 使用异步复位的优点
1、器件库有带异步复位的触发器,就能保证数据路径上是干净的。不会引入额外的逻辑门和额外的延时,保证了没有任何复位信号加在数据路径上。
2、不管有没有时钟都能复位。综合工具能自动判断异步复位无需加入任何综合参数。
2.6.2.2 异步复位的缺点
1、DFT时,异步复位引脚若不能直接被IO驱动,就必须将异步复位电路和复位驱动器断开保证DFT的正确。
2、在触发器时钟有效沿附近释放,触发器就会进入亚稳态,复位状态就会丢失。
3、复位信号毛刺会引发伪复位,需要设计毛刺过滤器。这个问题可以考虑使用同步复位。
4、复位树应是时间可控的,以保证复位能在一个时钟周期内释放。解决方法:使用分布式异步复位同步触发器(这种异步复位方法将复位同步器放置在设计的每个层次结构中。)
2.6.3 带异步复位和异步置位的触发器
这段代码能正确地综合成实际的器件,但是在仿真时会有问题,因为always事件会只在敏感事件的有效边沿触发。
图中只对1和2时间触发,3和4由于不是敏感事件所以不会触发。
正确的仿真模型应该在set_n在rst_n前面撤走时将输出置为1。
2.6.4 移除异步复位的问题
移除系统中的异步复位会使芯片进入不稳定的未知状态。同步复位时,复位信号的前沿和尾沿必须远离时钟的有效边沿。
两个问题:
1、违背复位恢复时间。复位恢复时间类似于建立时间,复位信号撤离应在时钟有效沿前一段时间到达,否则可能导致寄存器数据输出出现信号完整性问题或者亚稳态问题。
2、复位移除会在不同时序元件的不同周期内发生。异步复位移除传播延迟可能导致某些寄存器或者触发器提前退出复位状态。
2.6.5 复位同步器
这是确保正确移除复位最常使用的方法。没有复位同步器,即使仿真时复位能正常工作,最终系统中的异步复位信号仍然是无效的。
复位撤销后,典型情况下需要两个时钟上升沿来同步移除主复位信号。两级的主要目的就是为了消除亚稳态。
第一级可能的亚稳态是因为不满足复位恢复时间。
第二个触发器不会出现恢复亚稳态问题,因为移除复位时,触发器输入输出都为低电平。
总的复位分布时间:
2.6.6 过滤复位毛刺
异步复位对毛刺很敏感。
可以将复位信号和延迟后的复位信号相或过滤毛刺。
复位输入引脚也必须是施密特触发器引脚才有助于毛刺过滤。(施密特触发器:即滞回比较器,有两个判决电平,起到了减小毛刺的作用)
延时使用提供的宏单元或者在优化后的已综合设计中手动加入延时,如加多个较慢的缓冲器。缺点:延迟会随温度电压工艺变化,需要保证在所有PVT环境中都能满足设计要求。
2.7 控制时钟偏移(Skew)
时钟偏移:整个芯片中时钟到达时间的差异。
两个相邻寄存器的时钟相差较大,就会有违背时序的潜在风险。
两个顺序相邻触发器和一个等电位时钟分布网络的时钟偏移:
两个T分别是时钟源到两个触发器的延迟。
2.7.1 短路径问题
当数据传播路径比时钟偏移还短,数据就会提前传到第二个触发器输出。如下图。正常情况下,数据传播延迟应该大于时钟延迟,第二个触发器应该首先采的是第一个触发器上个周期的值。
2.7.2 时钟偏移和短路径分析
满足下列式子就会出现明显的短路径问题。注意区分短路径问题和亚稳态,短路径并不一定会造成亚稳态,如上图情况b;当SK>T1-H且SK<T1时会出现亚稳态,同时也是短路径,如图c。
短路径可能不会亚稳态且采到一个稳定的值,但这个值是第一个触发器本时钟沿输出的值,会与预期功能不一致。
2.7.3 使时钟偏移最小化
将时钟偏移减到最小值是解决短路径问题的最好方式。
2.7.3.1 在数据路径上加入延迟
如图2.44,在数据路径上增加延迟使整个数据路径的延迟大于时钟偏移,可以消除短路径问题。
2.7.3.2 时钟反转
感觉这里翻译的也有问题,一开始还以为这里是要对时钟做一个反向,看英文原文发现意思应该是让时钟传播方向(右到左)和数据传播方向(左到右)相反,这样自然就可以消除时钟偏移了。
延迟足够时,可以使接收触发器比源触发器先接收到时钟有效沿。这是一种牺牲建立时间为代价提高保持时间的方法。
不难看出时钟反转就增大了Tlaunch减小了Tcapture,使得建立时间更难满足。
该方法对于约翰逊计数器和新型反馈移位寄存器这样的环路结构并不是很有效。因为起点触发器和终点触发器还是连在一起,还是会存在短路径问题。
2.7.3.3 交替相位时钟
交替使用时钟沿,顺序相邻的触发器使用相反的时钟沿触发,为时钟偏移提供了约半个时钟周期的短路径时钟偏移余量。
从时序图可以看到如果没有中间的一级下降沿触发器,第一级输出直接到第三级输入,第三个触发器就会直接采集到第一个触发器触发后的值,与预期的逻辑不相符,中间加了一级下降沿触发器之后,中间的触发器会首先锁存上一个周期的值,此时第三个触发器会锁存这个值;CLK2下降沿之后,触发器2的输出才发生变化,此时输出的才是触发器1变化后的值,与预期逻辑相符。
交替使用时钟相位,原理同上一种方法。
行波时钟结构。每个触发器的输出驱动下一个触发器的时钟端。由于触发器不在同一个时钟,这样就消除了时钟偏移。上图为Ripple-down计数器,Ripple-up只需要把时钟改为下降沿即可。
2.7.3.4 平衡线路长度
设计者应保持所有时钟线长度相等,也应保证各终端负载相同。
设计应遵守的一些指南: