首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么verilog教程通常会使复位异步?

为什么verilog教程通常会使复位异步?
EN

Stack Overflow用户
提问于 2018-06-22 20:30:10
回答 1查看 1.8K关注 0票数 1

这个问题是在FPGA合成的背景下,如果有任何不同的话。数据表(iCE40UP)声明每个逻辑单元都有一个D型触发器,具有异步复位和时钟启用输入。

许多verilog教程引入了顺序逻辑,如下所示:

代码语言:javascript
复制
always @(posedge clk)
  begin
    some_reg <= [...]
  end

我熟悉时钟逻辑,这对我来说很有直觉意义。

接下来引入的概念通常是:

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

在维基百科中,我读到了可怕的说法,如,“如果系统依赖于任何连续的输入,那么这些输入很可能容易受到亚稳态的影响……如果仲裁器或触发器的输入几乎同时到达,电路最有可能穿过一个亚稳态点。”

冒着让我的问题结束的危险,因为我的问题很糟糕.我遗漏了什么?

  • 异步复位是否推荐设计实践?如果不像对待任何其他输入一样对待重置并使其在下一个周期生效,会得到什么好处?实际芯片的文档通常要求RST*引脚在许多时钟周期中保持在较低的位置。
  • 在设计中有锁存器是否使其成为异步的?我们如何确保在时钟域以外的东西驱动的锁存器存在时观察到适当的定时?
  • 什么时候会有人真正想要一个锁紧的时钟设计?为什么verilog会让意外的创建变得如此容易?

谢谢!

看似相关的问题:- Verilog D-触发器异步复位后不重新锁定 - 如果我使用的是异步复位,我是否应该做同步切换呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 22:18:12

同步和异步重置与大端对小端CPU的争夺有一些相似之处。在许多情况下,这两种类型同样工作良好。但在某些情况下,这两种类型都比另一种有优势。在诸如powerup或关机的情况下,您可能没有一个有效的时钟,但您仍然需要重置才能使系统处于已知的被动状态,并避免危险的I/O故障。只有异步重置才能做到这一点。

如果您的设计包含缺乏复位功能的寄存器,例如RAM块,那么在输入adr的寄存器上使用异步复位,当发生复位时,数据和控制信号可能会导致RAM内容的损坏。因此,如果您需要在必须保留RAM内容的地方进行热重置:对最接近RAM的逻辑使用同步热复位。

Altera和Xilinx通过推荐他们的客户只使用同步重置来增加混乱。只使用同步复位在Altera和Xilinx上可以很好地工作,因为两者都是基于SRAM的FPGA架构,所以powerup故障从来都不是问题。

但是,如果您想要将您的设计移植到其他架构,例如ASIC或flash,那么异步重置可能是更好的默认选择。

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

同步只有上升的边缘是通过两个触发器。

锁锁:不,你几乎从来不想在一个时钟设计的闩锁。好的做法是让DRC触发一个错误,以防找到闩锁。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50995190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档