如果这有什么不同的话,这个问题是在 FPGA 综合的背景下进行的。数据表 (iCE40UP) 指出,每个逻辑单元都有一个带异步复位和时钟使能输入的 D 型触发器。
许多verilog教程介绍了顺序逻辑,例如:
always @(posedge clk)
begin
some_reg <= [...]
end
我熟悉时钟逻辑,这对我来说很直观。
然后引入的下一个概念通常是:
- 小心不要意外创建锁存器,因为您真正需要的是正确的寄存器。
always @(posedge clk or [pos|neg]edge reset)
always @(*)
在维基百科中,我读到了一些可怕的陈述,例如“如果系统依赖于任何连续输入,那么这些输入很可能容易受到亚稳态的影响。[...] 如果仲裁器或触发器的输入几乎同时到达,则电路很可能会穿过一个亚稳态点。”
冒着因为格式不正确而关闭我的问题的风险......我错过了什么?
异步复位是推荐的设计实践吗?不将复位视为任何其他输入并使其在下一个周期生效,可以获得什么?实际芯片的文档通常要求 RST* 引脚在多个时钟周期内保持低电平。
设计中的锁存器是否使其异步?我们如何确保在存在由时钟域之外的东西驱动的锁存器时观察到正确的时序?
什么时候会有人真正想要时钟设计中的锁存器?为什么 verilog 让意外创建一个变得如此容易?
谢谢!
看似相关的问题: - Verilog D-Flip-Flop not re-latch after asynchronous reset -如果我使用异步复位怎么办,我应该把它设为同步吗?