重置:同步与异步


15

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

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

谢谢

Answers:


11

对此似乎有很多看法。
异步断言,同步断言据说是一种好习惯。这避免了时钟在同步声明时不运行(或运行得太慢而无法捕获复位信号)以及异步取消声明时可能的亚稳定性的问题。

您将使用一个复位同步器(两个FF),并将输出绑定到其余的设计复位:

重启

几个讨论:
异步和同步重置同步时的
字母与异步重置


释放锁存器的复位信号与其时钟之间的建立/保持时间要求与数据输入的要求相比如何?如果系统中的锁存器看到复位信号的结束发生在无效时钟沿,我会感到更舒服。是否可以保证在活动时钟沿释放异步复位不会影响其发生的周期?
supercat

不可以,由于需要一定的复位恢复时间(例如建立/保持),因此不能保证异步释放复位是干净的。这就是为什么要同步释放复位的原因。
奥利·格拉泽

我的问题是,使闩锁1在与闩锁2使用相同的时钟沿上释放提供复位信号的闩锁2是否完全符合要求,即从闩锁1的时钟到其输出的最小传播时间是否满足闩锁2的复位输入的保持要求。顺便说一句,您如何看待我上面的回答?当几乎可以完全抵抗时,您绘制的电路几乎无法抵抗复位线上的矮脉冲。
supercat

经过进一步的考虑,可以通过添加第三个锁存器来增加针对矮脉冲的保护,并使其异步复位信号成为馈入前两个锁存器的信号的毛刺抑制版本,这样异步干扰第三个锁存器的信号将成为保证彻底重置前两个。复位输入上的欠幅脉冲可能会导致芯片中的主复位线获得欠幅脉冲,但是如果发生了这种脉冲,则会在其后跟随一个同步复位脉冲。
supercat

抱歉,我想我明白你的意思了。如果您是指从同步器中的第二个锁存器输出到系统FF复位,我的理解是复位恢复时间通常小于相同FF的数据建立时间,因此应该可以。我同意欠幅脉冲,它对那些没有您建议的东西的人没有免疫力。
奥利·格拉泽

7

由于某些原因(无特定顺序),我宁愿异步重置胜于同步重置:

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

最终,我认为这些问题都不是阻碍因素,但它们肯定会导致ASIC强烈倾向于异步复位。


2
使用异步复位进入内部逻辑的一种危险是,复位输入上的欠幅脉冲可能会造成任何形式的破坏。如果要允许一个人的电路被异步复位,则应以一种方式设计输入电路,以确保足以引起任何类型的异步复位到达内部电路的任何复位脉冲也将引起发生同步重置。
supercat

4

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

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

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

干杯。


我认为卡明斯先生在他的论文中遗漏的一个问题是,虽然毛刺检测器可以抑制原本为矮脉冲,但它们也可以将合法长度的脉冲转变为矮脉冲。这样的效果是,恰好长度合适的脉冲可以任意破坏系统状态,而不会引起适当的复位。由于在没有双同步的情况下很难避免亚稳态,因此我建议使用两个异步捕获电路,其中一个具有“更严格的”毛刺检测标准,然后……
supercat,

...安排一些东西,以便短时的毛刺可能会或可能不会在一个或两个周期后发生复位,但是足够长的脉冲会导致立即复位。同样,虽然在触发器上使用“异步复位”输入可能有助于某些拓扑结构的综合,但这并不意味着它们必须异步使用。即使驱动锁存器上的“异步复位”输入,也可以使大多数内部复位信号与时钟同步。
supercat

卡明斯确实表示,故障过滤器“很丑”。我从未在所研究的IC中见过这样的人。为了避免这些问题,我们倾向于在所有输入焊盘单元上使用施密特触发器,并且同样清除了我使用的上电复位。顺便问一下,在什么情况下,复位线上会有短脉冲?我已经在某些扫描测试方案中看到了这一点,但是它们仍然是大约时钟周期长,而不是有目的的短脉冲。关于您的最后一条评论,必须将复位的断言与时钟同步,以避免在复位时违反s / h,并确保所有触发器在同一沿退出复位。
mixed_signal_old 2011年

毛刺滤波器通常对于确定哪些类型的输入会引起亚稳性很有用,但它们并不能消除亚稳态。毛刺滤波器的目标应该是确保可能发生的任何亚稳态处于“无关”状态。有时,必须使一个设备能够重置插入其中的另一设备。除非复位线是双同步的,否则附近的ESD事件和其他类似事故可能会产生矮脉冲。
supercat

关于最后一点,我只是说,甚至有人正在硬件上合成一种设计,该设计在触发器上提供“免费”异步复位输入,这并不意味着一个人不能完全将信号同步到两个主时钟上。断言和释放。面向外的信号可能必须对复位输入进行异步反应,但这并不意味着需要异步复位所有锁存器。实际上,为了避免出现不一致的状态,将设计中的两个锁存器中的所有锁存器保持同步可能会很有用。
supercat

2

似乎比“异步断言/同步释放”方法更安全的另一种方法是具有一个异步复位检测器(与其他地方所述的一样,具有异步“断言”和同步“释放”),但输出来自它可以对任何面向外的I / O设备进行门控,而无需异步复位任何东西(检测器本身的锁存器除外)。如果一个使用两个异步复位检测器,一个用于I / O线,一个用于向同步复位检测器供电,如果一个设计一个用于I / O线,那么它只能被复位脉冲跳闸,复位脉冲的声音足够可靠。使主检测器跳闸,即使不打算重置CPU,也可以避免输出毛刺。请注意,如果这样做,则合法长度的复位脉冲将异步复位输出,

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

顺便说一句,这是一个说明概念的电路。左下角附近有两个用于复位的逻辑输入。一个将产生一个“干净”的复位脉冲,另一个将产生一个非常棘手的脉冲。黄色LED指示主系统已复位;青色LED指示I / O使能。击中干净的复位将导致输出立即“复位”。触发棘手的重置将导致输出延迟重置,或者不影响输出(在模拟器中,无法导致“不影响它们”的情况)。


我认为这听起来不错。如此多的灰色阴影,看起来像是简单的事情,例如重置。
奥利·格拉泽

0

作为一名经验丰富的工程师(三年从事FPGA设计和嵌入式系统工作)),我告诉您需要检查FPGA的数据表和用户指南。这不是一个简单的答案。

您必须使设计适合您选择的FPGA类型。一些FPGA的FlipFlops专为异步复位而设计,一些则为同步复位而设计。

您必须查看FPGA用户指南以了解您拥有哪种类型的触发器。

实施者/映射者将为您的重置选择专用的路由代码可以以更高的频率运行,并且占用更少的空间如果您将代码与FPGA原语类型匹配,)。

您的设计将在 任何情况下都可以使用,但是有时FPGA实施器会竭尽全力使您的逻辑正常工作(添加更多逻辑),但这将导致较低的最大频率和/或更多的FPGA资源。

示例:使用Xilinx的ZYNQ测试(FPGA专为同步复位而设计-请参见基元用户指南)。通过将重置从异步更改为同步,最大稳定频率从220MHz变为258MHz,因此我通过了频率裕量。

我还可以补充一点,实现者不知道什么是时钟和复位信号。它通过ORDER(而不是名称)将触发器引脚分配给信号。因此,在某些FPGA中,实现者会选择VHDL中“ process()开始”之后的第一个信号作为时钟,在某些情况下将其作为复位,这取决于实现者所设置的FPGA。


我不同意您的说法,即“实施者不知道什么是时钟和复位信号”。综合工具推断哪个是时钟,哪个通过使用方式重置。时钟信号用于边沿规格,不使用复位。此外,任何触发器都可以与同步复位规范一起使用,并且正如您所观察到的,这通常会导致更快的关键路径。
乔·哈斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.