为什么数组不能为wdata赋值?
Why the array cannot assign value for wdata?
我写了一个测试,当我写入数据时,另一个数组会保留数据以与红色数据进行比较正确与否。但是,数组只打印 x 给我。
reg [31:0] wdata;
reg [31:0] array_wdata [0:15];
wire [31:0] rdata;
task check_read;
begin
integer i;
for (i=0; i<16; i+=1)
begin
@(negedge clk) begin
wr_en_i = 1;
wdata = wdata + 1;
array_wdata[i] = wdata;
end
end
for (i=0; i<16; i+=1)
begin
$display( "\tArray data[i]=%0d", array_wdata[i]);
end
end
endtask
您将 wdata
声明为 reg
,这意味着它将具有初始值 X。由于您只看到 X 被打印出来,这可能意味着您没有分配初始值第一次调用 check_read
任务之前的值。另外,X加1,结果还是X。
要去除这些 X,您需要在调用任务之前设置 wdata
。例如:
module tb;
reg wr_en_i;
reg [31:0] wdata;
reg [31:0] array_wdata [0:15];
wire [31:0] rdata;
bit clk;
always #5 clk++;
task check_read;
begin
integer i;
for (i=0; i<16; i+=1)
begin
@(negedge clk) begin
wr_en_i = 1;
wdata = wdata + 1;
array_wdata[i] = wdata;
end
end
for (i=0; i<16; i+=1)
begin
$display( "\tArray data[i]=%0d", array_wdata[i]);
end
end
endtask
initial begin
wdata = 'h5555;
check_read();
#500 $finish;
end
endmodule
输出:
Array data[i]=21846
Array data[i]=21847
Array data[i]=21848
Array data[i]=21849
Array data[i]=21850
Array data[i]=21851
Array data[i]=21852
Array data[i]=21853
Array data[i]=21854
Array data[i]=21855
Array data[i]=21856
Array data[i]=21857
Array data[i]=21858
Array data[i]=21859
Array data[i]=21860
Array data[i]=21861
我写了一个测试,当我写入数据时,另一个数组会保留数据以与红色数据进行比较正确与否。但是,数组只打印 x 给我。
reg [31:0] wdata;
reg [31:0] array_wdata [0:15];
wire [31:0] rdata;
task check_read;
begin
integer i;
for (i=0; i<16; i+=1)
begin
@(negedge clk) begin
wr_en_i = 1;
wdata = wdata + 1;
array_wdata[i] = wdata;
end
end
for (i=0; i<16; i+=1)
begin
$display( "\tArray data[i]=%0d", array_wdata[i]);
end
end
endtask
您将 wdata
声明为 reg
,这意味着它将具有初始值 X。由于您只看到 X 被打印出来,这可能意味着您没有分配初始值第一次调用 check_read
任务之前的值。另外,X加1,结果还是X。
要去除这些 X,您需要在调用任务之前设置 wdata
。例如:
module tb;
reg wr_en_i;
reg [31:0] wdata;
reg [31:0] array_wdata [0:15];
wire [31:0] rdata;
bit clk;
always #5 clk++;
task check_read;
begin
integer i;
for (i=0; i<16; i+=1)
begin
@(negedge clk) begin
wr_en_i = 1;
wdata = wdata + 1;
array_wdata[i] = wdata;
end
end
for (i=0; i<16; i+=1)
begin
$display( "\tArray data[i]=%0d", array_wdata[i]);
end
end
endtask
initial begin
wdata = 'h5555;
check_read();
#500 $finish;
end
endmodule
输出:
Array data[i]=21846
Array data[i]=21847
Array data[i]=21848
Array data[i]=21849
Array data[i]=21850
Array data[i]=21851
Array data[i]=21852
Array data[i]=21853
Array data[i]=21854
Array data[i]=21855
Array data[i]=21856
Array data[i]=21857
Array data[i]=21858
Array data[i]=21859
Array data[i]=21860
Array data[i]=21861