VCS 完全忽略自述文件“未加载”

问题描述

我正在尝试使用 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

还有一个代码文件 Song.mem 读取

00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
00000000000000000000010000000000
// etc etc etc etc

但是,当我使用 VCS 运行此测试台时,它不会吐出任何错误,但是波形看起来像这样

Not Loaded

所有代码文件和内存都在这文件夹中。

以前我把数据逻辑的宽度弄错了,它出现在日志中。但是我现在在日志中没有看到错误。是否有可能应该是 [31:0] 而不是 [0:31] 我在其他地方看到过这个,但不确定它是什么意思。目标是有 640 个整数。

解决方法

你确定你的模拟已经开始了吗? [31:0],[0:31] 没有区别,即使尺寸错误也会加载。

如果变量比文件数据宽,压缩维度用零扩展,但如果文件数据比变量宽,则不加载内存。

如果数据的行数比文件多,那么它将用文件中的数据填充初始条目,其余的将保留 'xxxxx'。如果数据的行数较少,它将用文件中的初始行填充变量。

你可以在 $readmemb 之后 $display 一些东西。

这将显示加载后日志中的内存内容

    $readmemb("song.mem",data);
    foreach(data[i]) $display("%h",data[i]);