重置:同步与异步

电器工程 FPGA 重置 ASIC
2022-01-04 21:42:32

我多年来一直在使用 fpgas,并且总是对电路的每个部分(需要它)使用同步复位。它有助于在给定的时钟周期内对电路进行全局复位。

然而,有人告诉我,在 ASIC 电路中,人们倾向于到处使用异步复位。我想知道为什么,如果在某些 fpga 设计中也是如此。我很想听听专业意见。

谢谢

4个回答

对此,似乎众说纷纭。
异步断言,同步去断言据说是很好的做法。这避免了同步断言时时钟不运行(或运行太慢而无法捕获复位信号)的问题,以及异步解除断言时可能出现的亚稳态问题。

您将使用一个复位同步器(两个 FF),其输出与其余设计复位​​相关联:

重置

几个讨论:
异步和同步重置
Letters On Sync vs. Async Resets

出于以下几个原因(无特定顺序),我倾向于异步重置而不是同步重置:

  • 由于将逻辑集成到单个单元中,向触发器添加异步置位或复位功能可能会导致设计更小(与输入上带有与门的不可复位触发器相比)
  • 更少的门导致更少的拥挤布线/布局和布线
  • 重置芯片的过程更简单/更容易(对用户/测试更友好)
  • 使复位路径异步简化了复位信号的静态时序分析划分
  • 同步复位会在数据流关键路径中添加额外的逻辑,并使其更难以满足建立和保持要求
  • 虽然 FPGA 在输入端具有 4-6 输入任意逻辑功能,但您将每个输入“支付”到 ASIC 上的一个门中(更多输入 = 更大的门;复杂的功能 = 多个门)

最终,我认为这些问题中的任何一个都不是阻碍因素,但它们肯定会导致强烈偏好 ASIC 上的异步重置。

带有同步取消断言的异步复位效果很好。如上所述,异步复位触发器更小,不需要激活时钟来确保复位,因此您可以通过电源和单个硬接线引脚或电源强制部件复位(通常是已知的低功耗状态)在复位。

如果你真的想深入研究这个,你可以阅读卡明关于这个的论文,特别是:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

干杯。

另一种似乎比“异步断言/同步释放”方法更安全的方法是使用异步复位检测器(就像在其他地方描述的那样,具有异步“断言”和同步“释放”),但输出来自门控任何面向外的 I/O 设备,而无需异步重置任何东西(探测器本身的锁存器除外)。如果一个人使用两个异步复位检测器,一个用于 I/O 线,一个用于同步复位检测器,如果一个设计用于 I/O 线,那么它只会被足够可靠的复位脉冲触发使主检测器跳闸,在不会重置 CPU 的情况下,甚至可以避免输出故障。请注意,如果这样做,合法长度的复位脉冲将异步复位输出,

要考虑的另一件事是,系统通常有一些不应该受到复位影响的寄存器。如果异步复位可能会影响写入这些寄存器的电路,那么即使是一个干净的(非矮小的)脉冲,在错误时间到达的复位脉冲也可能会破坏这些寄存器。例如,如果代码正试图写入地址 1111,而异步复位恰好在时钟脉冲到达之前迫使地址锁存器之一在时钟脉冲到达时为零,则可能导致对地址 1110 的错误写入。可以使用多个具有组合延迟的内部复位线,以确保在地址被破坏之前禁用寄存器写入,使用同步内部复位逻辑完全避免了这个问题。

顺便说一句,这是一个说明这个概念的电路。靠近左下角的是两个用于复位的逻辑输入。一个会产生一个“干净”的复位脉冲,另一个会产生一个非常糟糕的复位脉冲。黄色 LED 指示主系统复位;青色 LED 指示 I/O 启用。完全复位将导致输出立即“复位”;碰到 icky 重置会导致输出延迟重置,或者不影响它们(在模拟器中,没有办法导致“不受影响”的情况)。