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

时间:2018-06-22 20:30:10

标签: verilog hardware flip-flop timing-diagram

这个问题是否与FPGA综合有关?数据表(iCE40UP)指出,每个逻辑单元都有一个D型触发器,具有异步复位和时钟使能输入。

许多verilog教程介绍了类似以下内容的顺序逻辑:

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

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

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

  • 请注意不要意外创建闩锁,因为您真正需要的是正确的寄存器。
  • always @(posedge clk or [pos|neg]edge reset)
  • always @(*)

在Wikipedia中,我读到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?

1 个答案:

答案 0 :(得分:2)

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

如果您的设计包含缺少复位功能的寄存器(例如RAM块),则在向寄存器馈送adr,数据和控制信号到RAM的寄存器上使用异步复位会在发生复位时导致RAM内容损坏。因此,如果您需要在必须保留RAM内容的情况下进行热复位,请执行以下操作:对最接近RAM的逻辑使用同步热复位。

Altera和Xilinx通过建议其客户仅使用同步重置来增加混乱。 由于Altera和Xilinx都是基于SRAM的FPGA架构,因此仅使用同步复位就可以很好地工作,因此上电毛刺不再是问题。

但是,如果要使设计可移植到其他体系结构(例如ASIC或闪存FPGA),则异步复位可能是更好的默认选择。

关于异步重置引起的亚稳定性的问题。那是对的。完全异步的复位信号可能导致亚稳。 因此,您必须始终同步低电平有效异步复位信号的上升沿。 只有复位的下降沿可以完全异步。

仅同步上升沿是由两个触发器完成的。

锁存器:不,您几乎从不需要时钟设计的锁存器。 优良作法是在发现闩锁的情况下让DRC触发错误。

相关问题