readmemh错误地读取值

时间:2017-09-18 01:12:23

标签: verilog alu

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

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

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

我该如何解决这个问题?  如果我使用readmemb,它运作良好。

如果我指定值,则效果很好。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

这是造成错误的原因 您的{tb_a,tb_b,tb_op,tb_yexpected} = testvectors[vectornum];

LHS是99位,RHS是100位。只需声明

reg[98:0] testvectors[10000:0];

,即代替100位,将testvectors声明为99位。