Verilog:将寄存器分配给寄存器

时间:2016-04-25 10:14:39

标签: verilog variable-assignment

在下面的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 

感谢您的任何澄清!

1 个答案:

答案 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)。

请参阅网络上的非阻止作业URIlink,包括many other PDFs以获取更多信息。