为什么verilog教程通常会使重置异步?

问题描述 投票:1回答:1

如果这有任何区别,那么这个问题就在FPGA综合的背景下。数据手册(iCE40UP)规定每个逻辑单元都有一个D型触发器,具有异步复位和时钟使能输入。

许多verilog教程都介绍了顺序逻辑,例如:

always @(posedge clk)
  begin
    some_reg <= [...]
  end

我熟悉时钟逻辑,这对我来说很直观。

然后介绍的下一个概念通常是:

  • 小心不要意外地创建一个锁存器,因为你真正需要的是一个合适的寄存器。
  • always @(posedge clk or [pos|neg]edge reset)
  • always @(*)

在维基百科中,我读了scary statements like“如果系统依赖于任何连续输入那么这些可能很容易受到亚稳状态的影响。[...]如果仲裁器或触发器的输入几乎同时到达,则电路很可能将穿越亚稳态点。“

由于形成不良而面临关闭我的问题的风险......我错过了什么?

  • 是异步复位推荐的设计实践吗?通过不像任何其他输入那样处理重置并使其在下一个周期生效而获得了什么?实际芯片的文档通常要求RST *引脚在很多时钟周期内保持低电平。
  • 在设计中有一个锁存器使它异步吗?在存在由时钟域外的某些东西驱动的锁存器时,我们如何确保观察到正确的时序?
  • 什么时候有人真的想要一个时钟设计的闩锁?为什么verilog会让你轻易创建一个?

谢谢!

看似相关的问题: - Verilog D-Flip-Flop not re-latching after asynchronous reset - What if I used Asynchronous reset, Should I have to make as synchronous turned it?

verilog hardware flip-flop timing-diagram
1个回答
2
投票

同步与异步复位与大端与小端的CPU争夺有一些相似之处。在许多情况下,两种类型都同样有效。但有些情况下,任何一种类型都有优势。在上电或断电等情况下,您可能没有有效的时钟,但仍需要重置以使系统处于已知的被动状态,并避免危险的I / O故障。只有异步复位才能做到这一点。

如果您的设计包含缺少复位功能的寄存器,例如RAM模块,则在寄存器上使用异步复位时,向RAM提供数据和控制信号会导致复位时RAM内容损坏。因此,如果您需要能够执行热复位,其中必须保留RAM内容:对最靠近RAM的逻辑使用同步热复位。

Altera和Xilinx通过建议客户仅使用同步复位来增加混乱。仅使用同步复位可以在Altera和Xilinx上很好地工作,因为它们都是基于SRAM的FPGA架构,因此上电故障从不关注。

但是如果你想让你的设计可以移植到其他架构,比如ASIC或闪存FPGA,那么异步复位可能是更好的默认选择。

关于异步复位引起的亚稳态问题。那是正确的。完全异步的复位信号可能会导致亚稳态。这就是为什么必须始终同步有效低异步复位信号的上升沿的原因。只有复位的下降沿才能完全异步。

仅通过两个触发器来同步上升沿。

锁存器:不,你几乎不想要时钟设计中的锁存器。好的做法是让DRC在发现锁存器时触发错误。

© www.soinside.com 2019 - 2024. All rights reserved.