2016-04-25 114 views
-1

在下面的Verilog分配寄存器rotationDoneR被分配给该信号,然后另一个寄存器rotationDoneRR被分配给相同的寄存器。这是否意味着两个寄存器都保持相同的值,并且条件从来都不是真的?Verilog:将寄存器分配给寄存器

input wire RotationDone; // from the module definition 

reg rotationDoneR; 
reg rotationDoneRR; 

rotationDoneR <= RotationDone; 
rotationDoneRR <= rotationDoneR; 

if (rotationDoneR && (! rotationDoneRR)) begin 
    InterruptToCPU <= 1; 
end 

感谢您的任何澄清!

回答

5

承担有基于代码中的时钟事件的边缘的一些程序块

当你有非阻塞分配<=),RHS评价发生在活动事件地区的地方,而LHSNBA区域被更新。

考虑下面的例子中,非阻塞赋值评估RHS在有源区和存储所述值内部,暂时对于相同的时戳(该较旧的值的a被存储在内部这里)。然后在NBA区域中,更新LHS(b得到的旧值为aa得到值inp)。

// synthesize to simple wire 
a = inp; 
b = a; 

// synthesize to shift register 
a <= inp; 
b <= a; 

同样,这里rotationDoneRR翻牌-ED版本的rotationDoneR。由于在某个时钟边缘,rotationDoneR加载了RotationDone,与此同时,rotationDoneRR加载了rotationDoneR。该当前输入值是TRUE(电流输入RotationDone = 1'b1否定输入的先前值(先前的输入RotationDone = 1'b0)得以满足:

所以,每当if条件计算真。

请参考非阻塞作业linkmany other PDFs通过网络,包括CummingsSNUG2000SJ_NBA_rev1_2 Paper欲知更多信息。