我对Verilog HDL有一个奇怪的问题。 我在我的代码中发现,如果我将一个变量乘以2,但是然后 将该值赋给同一个变量,它会全部搞砸了。 有时,simv程序甚至崩溃。我原本需要这样做, ,因为我有一个for循环移位或旋转一定的数量。但是, 然后我发现不仅移动相同的变量不起作用,但 ,加法,减法,乘法或除法也不起作用。verilog分配给相同的变量不起作用
所以在我的代码示例中,如果将a设置为16'b0001_0000_1010_0101,并将b设置为3,则可以获得16'b0000_0000_0000_0000的输出。请注意,我现在无视b ...我应该得到16'b0010_0001_0100_1010 ...但是出了问题。
所以,这是我的代码文件test.v:
// ALU module.
module test(in1, in2, out1);
input [15:0] in1;
input [15:0] in2;
output reg [15:0] out1;
// Variables for shifting right and for rotating left or right.
reg [15:0] shiftedValue;
[email protected](in1, in2)
begin
assign shiftedValue = in1;
assign shiftedValue = shiftedValue * 2;
assign out1 = shiftedValue;
// This display value is correct!
// but it's still wrong in the test bench.
$display("out1 == %b", out1);
end
endmodule
module testStim;
reg [15:0] a;
reg [15:0] b;
wire [15:0] c;
// create ALU instance.
test myTest(a, b, c);
initial
begin
a = 16'b0001_0000_1010_0101;
b = 3;
#10
$display("op1In == %b, op1Out == %b", a, c);
$finish;
end
endmodule
这是运行通气后输出(I剥离出来的错误的垃圾...):
out1 == 0010000101001010
op1In == 0001000010100101, op1Out == 0000000000000000
谢谢, Erik W.
谢谢,这样做更有意义。 – Erik343
@ Erik343请接受关闭此问题的答案。 – sharvil111