verilog - 关于异步复位如何在复位边缘工作的问题
问题描述
我正在查看“asic-world”中的一些 Verilog 内容,并且对异步重置有疑问。不太确定当复位处于上升沿时它是如何工作的。如果只考虑reset的上升沿,下面的Verilog代码检查reset是否等于1进行reset。如果复位为 1,则输出复位为零。但是由于它发生在reset的上升沿,reset处于亚稳态,既不是0也不是1。所以,在reset的上升沿检查reset的值对我来说并没有什么意义。谁能解释一下?
来自 Asic-world 的 Verilog 代码:
module asyn_reset(clk,reset,a,c);
input clk;
input reset;
input a;
output c;
wire clk;
wire reset;
wire a;
reg c;
always @ (posedge clk or posedge reset)
if ( reset == 1'b1) begin
c <= 0;
end else begin
c <= a;
end
endmodule
解决方案
异步复位意味着只要复位信号处于活动状态“与时钟无关”,您的电路就应该复位。自然,这应该包含在敏感度列表中,因为这种语法使其被视为异步重置。请注意,将触发器带入默认(复位)状态不需要活动时钟,进入复位状态时您不应担心任何亚稳态问题。这里需要始终处理的第一个块(检查重置输入状态),您需要遵守这种编码风格。最重要的一点是在Reset Assertion期间可以忽略时钟和复位之间的相对时序。重置版本必须与时钟同步,因为它确实会导致亚稳态问题。有一些已知的电路可用于异步复位释放过程(这些电路有点具体,但在 ASIC 世界中广泛使用,因此您应该能够通过谷歌浏览器找到参考资料)。
推荐阅读
- java - 在哪些情况下,JpaRepository 会自动创建查询,而无需使用 @Query 注释
- android-architecture-navigation - 如何使用底部导航视图更改选项卡切换之间的动画?
- vba - 在 VBA 中单击 Userform/runtime error 上的 QueryClose 后,如何关闭特定的隐藏 excel 文件?
- javascript - 有没有办法创建一个语句,例如: if (CSS prop === something) then do something else
- javascript - 如何限制突出显示 iframe
- excel - 如何根据校验列的值计算两个单元格的差异?
- amazon-cloudwatch - 如何识别 kinesis 流中特定 KCL 的云观察指标
- macos - 在 Mac 中,为什么我必须按选项键才能使用 Python IDLE 中的快捷键?
- vue.js - 如何将带有查询参数的路由器添加到路由器列表中?
- javascript - array.includes 的奇怪行为对于字符串“sku”总是返回 false