【发布时间】:2025-12-03 18:00:01
【问题描述】:
如果这有什么不同的话,这个问题是在 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?
【问题讨论】:
-
你混合了很多问题并提出了问题。它们解决了完全不同的问题。我建议你就一个主题而不是九个问题问一两个问题!您在这里提出的问题。
-
所以基本问题是“从异步信号中导出输入到寄存器的值而不考虑建立和保持时间如何正确?”其余的都直接从它继承而来。
-
我可以回答,但有更好的答案,在 WWW 上有很多漂亮的图片。只需寻找“数字逻辑同步”。而no,其余的并没有随之而来,因为它没有解决锁存器或如何处理复位或为什么在 FPGA 中更多地使用异步复位。
标签: verilog hardware flip-flop timing-diagram