【问题标题】:Non Blocking assignment in VerilogVerilog中的非阻塞赋值
【发布时间】:2021-12-29 10:36:05
【问题描述】:
我有两种状态 - 一种用于将 a 中的值加载到 temp_a,另一种用于将 a 中的值存储到 temp_b。这基本上是为了在连续的时钟周期内接收两个输入。我正在使用相同的非阻塞分配。但是我可以看到模拟中的分配延迟了一个时钟周期。在使用非阻塞分配时这是预期的吗?
案例(状态)
1 : 开始
temp_a
2 : 开始
temp_b
因此,在第一个时钟沿期间,我希望将输入存储到 temp_a 并将需要存储的连续输入存储到 temp_b ,因此我将两个输入存储在不同的变量中。
【问题讨论】:
标签:
verilog
system-verilog
【解决方案1】:
我不完全确定您在问什么,但是是的,时钟始终块(应该使用非阻塞分配)通常会引入一个时钟周期的延迟。
您可能会问,如果 a 在状态机代码运行的同时更改值会发生什么 - temp_a 会获得 a 的旧值还是新值?答案是,有一些一般假设(例如,a 与时钟同步)是它获取旧值。因此,使用以下代码,temp_a 将始终比a 滞后一个时钟周期:
always_ff @(posedge clk)
begin
temp_a <= a;
end