在
FPGA或者数字AISC的设计中,最全局网络的考虑是很重要的,除
电源网络外,还包括时钟网络和复位网络。
而通常设计者对时钟网络考虑得很多,可却忽视了复位网络,把复位信号想得很简单,其实复位跟时钟一样也是一个覆盖全局、高扇出的信号,如果处理不当也会导致意想不到的错误。在最近的一些数字电路设计的过程中,我就在思考,到底应该怎样选择复位方式呢?到底复位信号选择同步还是异步、高电平还是低电平有效?
首先对比同步复位和异步复位:
同步复位 |
异步复位 |
可以选择小的FF,但需要额外的组合逻辑资源 |
无需组合逻辑 |
复位过程与时钟同步,可消除毛刺影响 |
复位与时钟无关,在release阶段容易出现亚稳态 |
有最小复位脉冲限制 |
复位脉冲宽度无限制 |
同步过程电平的选择:
这个选择其实不是主要的,如果要考虑的话,可以从信号上升或者下降沿的快慢来考虑。例如在CMOS电路中,下降沿会比上升沿的变化快。如果对复位过程要求高,则选择低电平有效,如果对释放后要求高,则可以选择高电平有效。但设计电路时最好把时序都考虑进去,不应该靠概率来保证。
异步复位同步释放:
可以节省同步所需的额外逻辑资源,同时又能消除异步复位带来的亚稳态;其实现方案可如图所示,其中级联的触发器的数量决定了复位信号脉冲的宽度:
异步复位同步释放信号可能遇到的问题:
在asic设计中,假如在一个设计的顶层定义了一个异步复位信号,由于复位信号路径的延迟差异,使用全局复位信号可能导致recovery和removel时序问题。
如果使用异步复位同步释放的方式实现的话,也还还需要考虑复位信号的高扇出的影响,特别是在高速电路的设计中,扇出不能太大,否则将会导致transition time太大,影响电路的时序。
如图4所示使用级联复位结构,将异步复位信号同步释放,根据模块进行分区,在每个分区内再级联同步释放结构,这样可以降低复位信号的扇出,从而有效的结果高扇出的问题,但需要注意的是,模块的划分要合理,不宜在一个模块中放太多的寄存器。