点击上方蓝字“Alphabole”关注我们呦!

本文经授权转载自公众号“数字芯片作坊记”(作者:雨奇)

1

简介

在为ASIC 选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位还是异步复位,是否每一个触发器都要接收到复位信号等。

复位最基本的目的是使Soc进入一个能进行稳定操作的状态 。这可以避免Soc在上电后进入随机状态而死机。一旦Soc生产出来,是否需要对Soc使用复位就由系统、Soc的应用场景以及Soc的自身的设计方式来决定。好的设计指南会在系统没有明确要求的情况下为Soc中的每个触发器提供复位信号。 在某些情况下,当流水线的寄存器(移位寄存器触发器)在高速应用时,应该去掉某些寄存器的复位信号以使设计达到更高性能。

设计可以使用异步复位或者同步复位,或者同时使用两者。两种复位方式都有各自明显的优点和缺点,在实际的设计中任何一种方法可以有效使用。设计者必须选择最合适于设计本身的复位方式。

笔记:所有的电路都离不开复位信号,一个系统最重要的就是时钟和复位信号来,如果这两个出问题,那么芯片回来真可能成砖头了。对于带异步复位端的寄存器速度一般要慢于不带异步复位端的寄存器的,同时面积也要大于不带异步复位端的寄存器。所以对于高速设计应用时,对于数据通路(datapath)可以考虑使用不带异步复位的寄存器,但也要小心数据通路会不会对控制通路带来影响。控制通路的话一般保险起见还是都用上复位的比较安全。

2

用同步复位进行设计

同步复位的复位信号只有在时钟的有效沿到来时才能影响或者复位触发器的状态。在某些仿真器中,根据电路的逻辑,可能会阻止复位信号到达触发器中。这只是仿真中出现的现象,并不存在于真实的硬件中。

由于复位树的高扇出,复位相对于时钟周期可能是一个"迟到的信号"。即使复位信号经过了复位缓冲树的缓冲,也要尽可能减少其到达本地逻辑前穿过的逻辑数量。图2.29展示了带有同步复位的可加载触发器的RTL代码。图2.30为对应的硬件实现。

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

图2.31所示的电路在功能上与图2.30中的完全一样,区别仅仅在于复位与门在多路器之外。现在,思考在门级仿真时会出现什么现象。当"rst_n"信号为低时,能使多路器的两个输人强制为0,然而如果"load"是未知状态(X)并且多路器模型是悲观的,这时触发器就会停在未知态(X),而不会复位。注意,这只是仿真过程中出现的问题。实际电路将会正常工作,触发器也会复位到0值。

综合工作经常会提供编译指令,以告知综合工具指定的信号是同步复位信号(或置位信号)。综合工具会将该信号"拉"得尽可能接近触发器,以避免初始化问题的发生。

推荐的方式是在项目开始时把这些指令加入RTL代码中以避免重新综合影响到项目进度。

2.1 使用同步复位的优点

1)同步复位一般能确保电路是100%同步的。

2)同步复位会综合为更小的触发器,特别在该复位信号被触发器的输入逻辑门控时。

3)同步复位确保复位只发生在有效时钟沿。时钟可以作为过滤掉复位毛刺的手段。

4) 在一些设计中,复位必须由一组内部条件产生。推荐在这样的设计中使用同步复位信号,这样可以将时钟之间的复位毛刺过滤 掉。

2.2 使用同步复位的缺点

并不是所有ASIC库都带有内置的同步复位触发器。因为同步复位信号只是一个数据信号,所以很容易把复位逻辑综合到触发器自身之外(如图2.30和图2.31所示)。

1) 同步复位可能需要一个脉冲展宽器, 以保证复位信号能出现在时钟有效沿处。在进行多时钟设计时,这是必须要考虑的一个重要问题。可以使用一个小计数器来保证具有指定周期数的复位脉冲宽度。

2)如果复位由SoC的组合逻辑产生或复位必定经过多级组合逻辑, 就会存在潜在的问题。在仿真过程中,根据复位的产生方式或在功能模块上的使用方式,复位信号可能标记为X。问题并不是得到了一个什么样的 复位信号,而是该复位信号是否可以容易地被外部引脚控 制。

3) 就其本质而言,同步复位需要时钟以复位电路 。在出于节省功耗的目的而使用门控时钟时,就可能出现问题。在复位信号发出时,时钟可能关闭。在这种情况下只能使用异步复位,并在时钟恢复前移除复位信号。

如果ASIC/FPGA有内部三态总线,就迫切需要时钟来产生复位动作。为了阻止芯片上电时内部三态总线出现竞争,芯片应当有图2.32 所示的异步上电复位。

可以使用同步复位信号;但是也必须使用复位信号直接撤销三态使能(见图2.33)。这种同步技术的优点是能简化复位-高阻这一路径的时序分析。

笔记:同步复位一般就是脉冲信号将寄存器输出置为一个特定的状态,它只有在时钟上升沿来了之后才有效,这样就可以忽略时钟之间的复位毛刺,而异步复位需要注意毛刺。另外同步复位一般需要时钟产生电路,该电路有时为了低功耗设计使用门控时钟,需要特别注意不要发生复位信号无法产生的场景。(针对验证的话,验证环境不要出现force的原因也在此,防止电路出现自锁)

3

使用异步复位进行设计

异步复位触发器在设计时加入了一个复位引脚。通过低电平有效的复位(在设计中经常使用),当该信号使触发器的复位端变为逻辑低电平时, 触发器进入复位状态。

图2.34是带有异步复位的可加载触发器的RTL代码。图2.35是对应的硬件实现图。

3.1 使用异步复位的优点

1) 使用异步复位的最大好处在于只要生产方提供的库中有带有异步复位的触发器,就能保证数据路径上是干净的。 对于数据路径时序已经很紧的设计,无法承担由于加入同步复位带来的额外单元门和额外线路延迟。而使用异步复位,设计人员就能保证没有任何复位信号加在数据路径上(见图2.35)。

2)异步复位最明显的优势电路是不管有没有时钟都能复位。综合工具能自动推断出异步复位而不必加入任何综合参数。

3.2 使用异步复位的缺点

1)在 DFT时,如果异步复位信号不能直接被 I/O引脚驱动,就必须将异步复位线路与复位驱动器断开以保证 DFT扫描和测试的正确。

2) 异步复位最大的问题是不管产生或撤销复位信号,它们都是一个异步过程。 产生复位信号不存在问题,但是撤销时就出现了问题。如果异步复位在触发器时钟有效沿附近释放,触发器的输出就会进入亚稳态,因此 SoC 的复位状态就会丢失。

3) 异步复位的另一个问题与其源头有关,即由板级或系统复位所产生的噪声或毛刺引发的伪复位 。需要设计毛刺过滤器来消除复位电路上毛刺的影响。如果在系统中这真是一个问题,那么设计人员就应该考虑使用同步复位的方案。

4)对于同步和异步复位,复位树都应是时间可控的,以确保复位能在一个时钟周期内释放。必须在设计版图后分析复位树的时序以确保满足时序要求。解决这个问题的一种方法是使用分布式复位同步触发器。

笔记:对于系统设计,异步复位要注意毛刺问题,涉及到去毛刺电路的设计,另外对于IO 引脚也要注意异步信号的上升时间,逻辑设计可能是理想的,但实际电路可能又是一回事。

4

带异步复位和异步置位的触发器

大多数设计并没有既包含异步置位又包含异步复位的触发器,但是有时需要这样的触发器。

图2.36是异步置位/复位触发器的Verilog RTL代码。

综合工具能正确推断出带有异步置位/复位的触发器,但是在仿真时并不是这样。仿真的问题是只在置位、复位或时钟信号的有效沿才进入al-ways 块。

如果复位信号首先有效,然后置位信号有效,之后复位信号无效,触发器应该先进入复位状态,然后进入置位状态(见图2.37中的时序图)。

由于以上所有输入都是异步的,因此只要一移除置位复位就应该有效,但是在Verilog中并不是这样,因为在下一个时钟上升沿到来前,没有其他方式能触发always块。always块仅对于图2.37所示的1和2事件才触发,并跳过3和4事件。

在某些很少见的设计中,允许复位和置位同时发出,然后复位先撤销,修复这种仿真问题的方式是将自校验码附着在正确的编译器指令中对触发器建模,并在这种情况发生时将触发器输出强制为正确的值。 建议最好尽可能避免使用同时带有异步置位和异步复位的触发器。

图2.38 所示的代码是使仿真正确,并且能保证综合前和综合后仿真结果一致的修改方案。

5

移除异步复位的问题

移除系统中的异步复位会使芯片进入不稳定的未知状态。在释放复位时必须要特别注意避免这种情况的发生。 在使用同步复位时,复位信号的前沿和尾沿必须远离时钟的有效边沿。

如图2.39所示,在移除异步复位信号时,有两个潜在的问题。

1)违背复位恢复时间。复位恢复时间指复位撤销后和时钟再一次置高之间的时间。违背复位恢复时间会使寄存器数据输出端出现数据完整性或亚稳态问题。

2)复位移除会在不同时序元件的不同时钟周期内发生。当复位移除与时钟上升沿异步时,在复位信号和/或时钟信号上不同的传播延迟会导致某些寄存器或触发器提前退出复位状态。

笔记:异步复位撤离时会出现的 问题有1) 违背复位恢复时间 。2)复位移除会在不同时序元件的不同时钟周期内发生。

6

复位同步器

在2.6.4节中提到解决异步复位移 除问题的方法是使用复位同步器 。对于使用异步复位信号的电路,这是确保正确移除复位最常使用的方法。如果没有复位同步器,即使在仿真时复位能正常工作,最终系统中的异步复位信号仍然是无效的。

图2.40中设计的复位同步逻辑最好用于异步复位和同步复位。

用外部异步复位信号来复位一对触发器,这对触发器异步地依次驱动主复位信号通过复位缓冲树,再到达设计中的其他触发器。然后整个设计异步复位。

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

将复位信号与时钟脉冲同步需要两个触发器,这里第二个触发器用于移除由于异步撤销的复位信号与时钟上升沿过于接近所导致的亚稳态。还要注意的一点是在移除复位后,第二个触发器不存在亚稳态问题。复位同步器的第一个触发器有潜在亚稳态风险的原因是其输人固定为高电平,输出异步复位为0并且复位可能在触发器规定的恢复时间内移除(复位可能与同一个触发器的时钟输人上升沿过于接近)。这就是需要第二个触发器的原因。

复位同步器中的第二个触发器不会出现恢复时间亚稳态问题,因为在移除复位时该触发器的输入和输出都为低电平。由于这个触发器的输入和输出没有差别,因此其输出也就没有机会在不同逻辑值之间振荡。下面的等式计算了总的复位分布时间:

笔记:异步复位同步撤离一般也是Soc系统最常见的复位电路。

7

过滤复位毛刺

异步复位对毛刺很敏感 ,这就意味着任何满足触发器最小复位脉冲宽度的输入都能引起触发器复位。如果复位线受到毛刺的影响,这就真的成为问题了。在设计中,可能没有足够高频的采样时钟来检测复位上的小毛刺;本节将会介绍过滤掉毛刺的方法。该方法需要一个数字延时来过滤毛刺。 复位输入引脚也必须是施密特触发器引脚才有助于毛刺过滤。 图2.41显示了复位毛刺滤波器的电路和时序图。

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

由于该方法使用了延迟链,因此一个缺点是所产生的延迟会随着温度、电压和工艺而变化。必须注意确保延迟在所有PVT环境下都能满足设计要求。

笔记:知识点:复位输入引脚必须有施密特功能,必须进行滤毛刺处理,这点很重要。