我使用fpgas已有多年,并且一直对电路的每个部分(需要它)使用同步复位。它有助于电路在给定的时钟周期内全局复位。
但是,有人告诉我,在ASIC电路中,人们倾向于在各处使用异步复位。我想知道为什么,以及某些fpga设计是否也是如此。我很想听听专业意见。
谢谢
我使用fpgas已有多年,并且一直对电路的每个部分(需要它)使用同步复位。它有助于电路在给定的时钟周期内全局复位。
但是,有人告诉我,在ASIC电路中,人们倾向于在各处使用异步复位。我想知道为什么,以及某些fpga设计是否也是如此。我很想听听专业意见。
谢谢
Answers:
对此似乎有很多看法。
异步断言,同步断言据说是一种好习惯。这避免了时钟在同步声明时不运行(或运行得太慢而无法捕获复位信号)以及异步取消声明时可能的亚稳定性的问题。
您将使用一个复位同步器(两个FF),并将输出绑定到其余的设计复位:
几个讨论:
异步和同步重置同步时的
字母与异步重置
由于某些原因(无特定顺序),我宁愿异步重置胜于同步重置:
最终,我认为这些问题都不是阻碍因素,但它们肯定会导致ASIC强烈倾向于异步复位。
带有异步取消激活的异步复位效果很好。如上所述,异步复位触发器较小,不需要时钟激活即可确保复位,因此您可以仅通过电源和单个硬接线引脚或通过电源将一个部件强制复位(通常是已知的低功耗状态)。重置时。
如果您真的想深入研究这个问题,可以阅读卡明关于此问题的论文,特别是:
http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf
干杯。
似乎比“异步断言/同步释放”方法更安全的另一种方法是具有一个异步复位检测器(与其他地方所述的一样,具有异步“断言”和同步“释放”),但输出来自它可以对任何面向外的I / O设备进行门控,而无需异步复位任何东西(检测器本身的锁存器除外)。如果一个使用两个异步复位检测器,一个用于I / O线,一个用于向同步复位检测器供电,如果一个设计一个用于I / O线,那么它只能被复位脉冲跳闸,复位脉冲的声音足够可靠。使主检测器跳闸,即使不打算重置CPU,也可以避免输出毛刺。请注意,如果这样做,则合法长度的复位脉冲将异步复位输出,
要考虑的另一件事是,系统通常具有一些不应受到复位影响的寄存器。如果异步复位可能击中写入这些寄存器的电路,那么即使是干净(非中断)脉冲,在错误的时间到达的复位脉冲也有可能破坏这些寄存器。例如,如果代码正在尝试写入地址1111,并且异步复位在时钟脉冲即将到达时钟脉冲之前迫使地址锁存器之一变为零之前到达,则可能导致对地址1110的错误写入。一个人可以使用多个具有组合延迟的内部复位线来确保在破坏地址之前禁用寄存器写操作,使用同步内部复位逻辑可以完全避免该问题。
顺便说一句,这是一个说明概念的电路。左下角附近有两个用于复位的逻辑输入。一个将产生一个“干净”的复位脉冲,另一个将产生一个非常棘手的脉冲。黄色LED指示主系统已复位;青色LED指示I / O使能。击中干净的复位将导致输出立即“复位”。触发棘手的重置将导致输出延迟重置,或者不影响输出(在模拟器中,无法导致“不影响它们”的情况)。
作为一名经验丰富的工程师(三年从事FPGA设计和嵌入式系统工作)),我告诉您需要检查FPGA的数据表和用户指南。这不是一个简单的答案。
您必须使设计适合您选择的FPGA类型。一些FPGA的FlipFlops专为异步复位而设计,另一些则为同步复位而设计。
您必须查看FPGA用户指南以了解您拥有哪种类型的触发器。
实施者/映射者将为您的重置选择专用的路由(代码可以以更高的频率运行,并且占用更少的空间如果您将代码与FPGA原语类型匹配,)。
您的设计将在 任何情况下都可以使用,但是有时FPGA实施器会竭尽全力使您的逻辑正常工作(添加更多逻辑),但这将导致较低的最大频率和/或更多的FPGA资源。
示例:使用Xilinx的ZYNQ测试(FPGA专为同步复位而设计-请参见基元用户指南)。通过将重置从异步更改为同步,最大稳定频率从220MHz变为258MHz,因此我通过了频率裕量。
我还可以补充一点,实现者不知道什么是时钟和复位信号。它通过ORDER(而不是名称)将触发器引脚分配给信号。因此,在某些FPGA中,实现者会选择VHDL中“ process()开始”之后的第一个信号作为时钟,在某些情况下将其作为复位,这取决于实现者所设置的FPGA。