问题描述
我正在尝试使用 txt 文件编写一个简单的测试平台,以将数字读入我的测试平台。
我有以下测试台
temp_tb.v
module temp_tb();
logic clk;
logic rst;
logic [0:31] data [639:0];
logic output_valid;
logic [0:31] output_data_r [63:0];
logic [0:31] output_data_i [63:0];
top_level t0(
.clk(clk),.rst(rst),.data(data),.output_valid(output_valid),.output_data_r(output_data_r),.output_data_i(output_data_i));
// set up clock
// tests
initial begin
$readmemb("song.mem",data);
// put your tests here
$vcdpluson;
rst = 1'b0;
clk = 1'b0;
#100
clk = 1'b1;
#100
clk = 1'b0;
#100
clk = 1'b1;
#100
rst = 1'b1;
clk = 1'b0;
#100
clk = 1'b1;
#100
clk = 1'b0;
#100
clk = 1'b1;
#100
rst = 1'b0;
for (int i = 0; i < 999; i++) begin
clk = ~clk;
#100;
end
$finish;
end
endmodule
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
// etc etc etc etc
但是,当我使用 VCS 运行此测试台时,它不会吐出任何错误,但是波形看起来像这样
以前我把数据逻辑的宽度弄错了,它出现在日志中。但是我现在在日志中没有看到错误。是否有可能应该是 [31:0] 而不是 [0:31] 我在其他地方看到过这个,但不确定它是什么意思。目标是有 640 个整数。
解决方法
你确定你的模拟已经开始了吗? [31:0],[0:31] 没有区别,即使尺寸错误也会加载。
如果变量比文件数据宽,压缩维度用零扩展,但如果文件数据比变量宽,则不加载内存。
如果数据的行数比文件多,那么它将用文件中的数据填充初始条目,其余的将保留 'xxxxx'。如果数据的行数较少,它将用文件中的初始行填充变量。
你可以在 $readmemb 之后 $display 一些东西。
这将显示加载后日志中的内存内容
$readmemb("song.mem",data);
foreach(data[i]) $display("%h",data[i]);