逻辑设计方法学【4】 --复位信号设计方法

在为ASIC选择复位策略前必须考虑许多方面的问题。对于复位,我们都只到有同步复位和异步复位,那么在实际设计的时候,就需要知道该选择哪种复位方式,还有所有的触发器是否都需要接收复位信号。


复位最基本的目的是使SoC进入一个能进行稳定操作的确定状态,这样可以避免SoC在上电后进入随机状态而死机。在verilog中,有四种逻辑状态:0,1,x,z。但是在进行IC设计的时候,会有十几种逻辑状态。所以添加复位信号十分有必要。一旦SoC生产出来,是否需要对SoC使用复位就由系统、SoC的使用环境以及SoC的自身的设计方式来决定。好的设计指南会在系统没有明确要求的情况下为SoC中的每一个触发器都提供复位信号。在某些情况下,当流水线的寄存器在高速应用中使用时,应该去掉某些寄存器的复位信号以使设计达到更高性能。


设计可以选择异步复位或同步复位,或者同时使用两者。两种复位方式各都有各自的优点和缺点。在实际设计中没有完全确定的复位方法,我们必须根据实际设计,选择最合适的复位方法。

同步复位与异步复位

图1用verilog描述了什么是同步复位以及异步复位

逻辑设计方法学【4】 --复位信号设计方法

图 1 同步复位和异步复位


1 用同步复位进行设计

同步复位的复位信号只有在时钟的有效沿到来时才能对寄存器进行复位。由于复位树具有高扇出,复位相对于时钟周期可能是一个“迟到的信号”。即使复位信号经过了复位缓冲树的缓冲,也要尽可能减少其到达本地逻辑前穿过的逻辑数量。

图2表示了带有同步复位的可加载触发器的RTL代码,图3位对应的硬件实现。

逻辑设计方法学【4】 --复位信号设计方法

图 2 同步复位可加载触发器的RTL代码


逻辑设计方法学【4】 --复位信号设计方法

图 3 带同步复位的可加载触发器


使用同步复位会出现的一个问题是综合工具无法分辨复位信号和其他的数据信号。对于同步复位,综合工具可能产生图4所示的电路结构

逻辑设计方法学【4】 --复位信号设计方法

图 4 同步复位可加载触发器的另一种实现方式


图4所示的电路在功能上与图3中的完全一致,区别仅仅在于复位与门在多路器之外。当“rst_n”信号为低的时候,多路选择器的两个输入端强制为0,如果load是未知状态(x),当处于仿真情况下,触发器就会停在未知状态(x),而不会复位;但如果处于实际工作情况下,触发器会复位到0状态。


1.1 使用同步复位的优点

  1. 同步复位一般能确保电路是100%复位的
  2. 同步复位会综合为更小的触发器(没有控制信号的触发器),特别是该复位信号被触发器的输入逻辑门控时
  3. 同步复位确保复位只发生在有效时钟沿,时钟可以作为过滤掉复位毛刺的手段
  4. 在一些设计中,复位必须由一组内部条件产生。推荐在这样的设计中使用同步复位信号,这样可以将时钟之间的复位毛刺过滤掉。

1.2 同步复位信号的缺点

因为同步复位信号指示一个数据信号,并且并不是所有的ASIC库都带有内置的同步复位触发器,所以很容易把复位逻辑综合到触发器自身以外(如图3和图4)
  1. 复位信号如果较时钟短的话,那么必须使用一个脉冲展宽器,以保证复位信号能出现在时钟有效沿处。在进行多时钟设计时,这是必须要考虑的一个重要问题(高时钟域过渡到低时钟域),可以使用一个小计数器来保证具有制定周期数的复位脉冲宽度。
  2. 如果复位由SoC的组合逻辑产生,或者复位信号必须经过多级组合逻辑,就需要考虑延迟以及毛刺的问题。
  3. 就其本质而言,同步复位需要时钟以复位电路。在处于节省功耗的目的而使用门控时钟的时候,就可能出现问题。在复位信号发出时,时钟可能关闭,在这种情况下只能使用异步复位。


2 使用异步复位进行设计

异步复位触发器在设计时加入了一个复位引脚。通过低电平有效的复位,当该信号是触发器的复位端变为逻辑低电平时,触发器进入复位状态。图5是带有异步复位的可加载触发器的RTL代码,图6是其对应的逻辑实现。
逻辑设计方法学【4】 --复位信号设计方法
图 5 带有异步复位的可加载触发器的RTL代码

逻辑设计方法学【4】 --复位信号设计方法
图 6 异步复位可加载触发器

2.1 异步复位的优点

  1. 使用异步复位的最大好处在于只要生产方提供的库中有带有异步复位的触发器,就能保证数据路径上是干净的。对于数据路径时序已经很紧的设计,无法承担由于加入同步复位带来的额外单元门和额外线路延迟。而使用异步复位,设计人员就能保证没有任何复位信号加载数据路径上(见图5)
  2. 异步复位最明显的优势是电路不管有没有时钟都能复位。综合工具能自动地推断出异步复位而不必加入任何综合参数。

2.2 异步复位的缺点

  1. 异步复位最大的问题是不管产生或撤销复位信号,它们都是一个异步的过程。产生复位信号不存在问题,但是撤销时就出现了问题。如果异步复位在触发器时钟有效沿附近释放,触发器的输出就会进入亚稳态,因此SoC的复位状态会丢失,即达不到复位的目的。
  2. 异步复位的另一个问题与源头有关,即由班级或系统复位所产生的噪声或毛刺引发的伪复位。需要设计毛刺过滤器来消除复位电路上毛刺的影响。如果毛刺真是一个在系统中至关重要的问题,那么久应该采用同步复位。
  3. 对于同步和异步复位,复位树都应该是时间可控的,以确保复位能在一个时钟周期内释放。必须在设计版图后分析复位树的时序以确保满足时序要求。解决这个问题的一种方法是使用分布式复位同步触发器。
由以上的分析中,我们需要重点考虑三点:一是异步复位到底该如何移除;二是什么是分布式复位同步触发器;三是怎么过滤复位中的毛刺。

3 异步复位的移除

移除系统中的异步复位会使芯片进入不稳定的未知状态,在释放复位信号时,必须要特别注意避免这种情况发生。在移除异步复位信号时,有两个潜在的问题:

逻辑设计方法学【4】 --复位信号设计方法
图 7 移除异步复位的恢复时间问题

  1. 违背复位恢复时间。复位恢复时间指复位撤销后和时钟再一次置高之间的时间。违背复位恢复时间会使寄存器数据输出端出现数据完整性或亚稳态问题。
  2. 复位移除会在不同时序元件的不同时钟周期内发生。当复位移除与时钟上升沿异步时,传播延迟会导致某些寄存器或触发器提前退出复位状态。

4 分布式复位同步触发器

在上面提到的移除异步复位引起的这两个问题中,为了解决这两个问题,最好的解决方法为使用复位同步触发器。对于使用异步复位信号的电路,这时保证正确溢出复位最常用的方法。如果没有复位同步器,在实际工作的系统中,很容易出现上述问题,导致数据错误或者复位无效。图8中设计的复位同步触发器逻辑最好用于异步复位和同步复位。
用外部异步复位信号来复位一对触发器,这对触发器异步地依次驱动主复位信号通过复位缓冲器,再到达设计中的其他触发器。然后整个设计异步复位。

逻辑设计方法学【4】 --复位信号设计方法
图 8 分布式复位同步触发器模块图

通过撤销复位信号将复位移除,这时允许第一个主复位寄存器的D输入端信号在时钟控制下穿过复位同步器。在复位撤销后,典型情况下需要两个时钟上升沿来同步移除主复位信号。(两级同步器)

将复位信号与时钟脉冲同步需要两个触发器,哲理第二个触发器用于移除由于异步撤销的复位信号与时钟上升沿过于接近所导致的亚稳态。

还需要注意的一点是在移除复位后,第二个触发器不存在亚稳态问题,这是因为在移除复位时该触发器的输入和输出都为低电平。由于这个触发器的输入和输出没有差别,因此其输出也就没有机会在不同逻辑之间发生跳变。复位同步器的第一个触发器有潜在亚稳态风险的原因是其输入固定为高电平,输出异步复位为0并且复位可能在触发器规定的恢复时间内移除(复位可能与同一个触发器的时钟输入上升沿过于接近)。这就是需要第二个触发器的原因。

下图9中的公式描述了总的复位分布时间
逻辑设计方法学【4】 --复位信号设计方法

5 过滤复位毛刺


异步复位对毛刺很敏感,这就意味着任何满足触发器最小复位脉冲宽度的输入都能引起触发器复位。在设计中,可能没有足够高频的采样时钟来检测复位上的小毛刺,这就需要将毛刺过滤掉。下面来介绍过滤毛刺的方法。该方法需要一个数字延时来过滤毛刺。复位输入引脚也必须是施密特触发器引脚才有助于毛刺过滤。图10显示了复位毛刺滤波器的电路图和时序图。
逻辑设计方法学【4】 --复位信号设计方法
图 10 复位毛刺滤波器

为了加入延迟,一些生产商提供了用于延迟且能够手动实例化的宏单元。如果没有这样的宏单元,设计人员就需要再优化后的已综合设计中手动加入延迟。第二种方法需要创建一个包含较慢缓冲器的模块,在多次实例化该模块以达到所期望的延迟。

由于这种方法使用了延迟链,因此一个缺点是所产生的延迟会随着温度、电压和工艺而发生变化。

最后需要注意的是,对于生产出来的ASIC,其所有的触发器的类型已经固定,例如在xilinx FPGA中,所有的触发器都带有异步复位置位端,如果两个触发器的控制端不相同,即使在该设计中仅仅只用到了两个触发器,综合器也会把这两个触发器综合到不同的slice中。

参考文献

[1] Mohit Arora.硬件架构的艺术.机械工业出版社. 32-42