这个问题是在FPGA合成的背景下,如果有任何不同的话。数据表(iCE40UP)声明每个逻辑单元都有一个D型触发器,具有异步复位和时钟启用输入。
许多verilog教程引入了顺序逻辑,如下所示:
always @(posedge clk)
begin
some_reg <= [...]
end我熟悉时钟逻辑,这对我来说很有直觉意义。
接下来引入的概念通常是:
always @(posedge clk or [pos|neg]edge reset)always @(*)在维基百科中,我读到了可怕的说法,如,“如果系统依赖于任何连续的输入,那么这些输入很可能容易受到亚稳态的影响……如果仲裁器或触发器的输入几乎同时到达,电路最有可能穿过一个亚稳态点。”
冒着让我的问题结束的危险,因为我的问题很糟糕.我遗漏了什么?
谢谢!
看似相关的问题:- Verilog D-触发器异步复位后不重新锁定 - 如果我使用的是异步复位,我是否应该做同步切换呢?
发布于 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触发一个错误,以防找到闩锁。
https://stackoverflow.com/questions/50995190
复制相似问题