Verilog readmemh读取的值错误

Verilog readmemh读取的值错误,verilog,alu,Verilog,Alu,我读取了testvect.tv,但tb_a和tb_b的MSB丢失,LSB设置为0,类似于 module tb_alu32(); reg clk, reset; reg [31:0] tb_a, tb_b, tb_yexpected; reg [2:0] tb_op; wire [31:0] tb_result; reg[31:0] vectornum, errors; reg[99:0] testvectors[10000:0]; ... always begin clk=0;#5;clk=1;

我读取了testvect.tv,但tb_a和tb_b的MSB丢失,LSB设置为0,类似于

module tb_alu32();
reg clk, reset;
reg [31:0] tb_a, tb_b, tb_yexpected;
reg [2:0] tb_op;
wire [31:0] tb_result;
reg[31:0] vectornum, errors;
reg[99:0] testvectors[10000:0];
...
always
begin
clk=0;#5;clk=1;#5;
end
$readmemh("C:/altera/13.0/practice/week3/alu32/testvect.tv",testvectors);
always @ (posedge clk)
begin
#1; {tb_a,tb_b,tb_op,tb_yexpected} = testvectors[vectornum];
end
endmodule
我怎样才能解决这个问题? 如果我使用readmemb,它工作得很好

如果我赋值,效果会很好


为什么会发生这种情况?

这就是导致错误的原因 你的
{tb_a,tb_b,tb_op,tb_yexpected}=testvectors[vectornum]

LHS是99位,RHS是100位。申报

0000_0001->0000_0002
0000_0002->0000_0004
FFFF_FFFF->FFFF_FFFE
FFFF_FFFE->FFFF_FFFC 
8000_0001->0000_0002

i、 将
testvectors
声明为99位,而不是100位。

我还没有运行你的代码,但是看起来,readmemh之后左移了1位。这可能是我的问题。实际上,当我修复testvector[98:0]时,问题还没有解决。。。。或者97或100…同样的情况也发生了。我只是不明白为什么readmemb工作得很好,但readmemh在我使用readmemh时没有发生移位,但在我使用readmemb时没有发生移位(testvect.tv固定为二进制输入)
reg[98:0] testvectors[10000:0];