在下面的Verilog分配寄存器rotationDoneR
被分配给信号,然后另一个寄存器rotationDoneRR
被分配给同一个寄存器。这是不是意味着两个寄存器都保持相同的值,条件永远不会成立?
input wire RotationDone; // from the module definition
reg rotationDoneR;
reg rotationDoneRR;
rotationDoneR <= RotationDone;
rotationDoneRR <= rotationDoneR;
if ( rotationDoneR && (! rotationDoneRR ) ) begin
InterruptToCPU <= 1;
end
感谢您的任何澄清!
答案 0 :(得分:5)
我 假设 根据您的代码中的时钟事件边缘,有一些程序块。< / p>
如果您有非阻止分配(<=
),则评估RHS 会在活动事件区域中进行,而 LHS 在 NBA地区中更新。
考虑以下示例,非阻塞分配会评估活动区域中的RHS,并将值内部临时存储为相同的时间戳(旧值 of { {1}}内部存储在此处)。然后在NBA地区更新LHS(a
得到b
的旧值,a
获得a
的值。
inp
同样,此处// synthesize to simple wire
a = inp;
b = a;
// synthesize to shift register
a <= inp;
b <= a;
是rotationDoneRR
的翻牌版。由于在某个时钟边缘,rotationDoneR
加载了rotationDoneR
,同时RotationDone
加载了rotationDoneRR
。
因此,rotationDoneR
条件在以下情况下评估为真:当前输入值为TRUE(当前输入if
= RotationDone
) 并且 否定输入的先前值(之前的输入1'b1
= RotationDone
)。
请参阅网络上的非阻止作业URI和link,包括many other PDFs以获取更多信息。