【问题标题】:VCS completely ignoring readmemb "not loaded"VCS 完全忽略自述文件“未加载”
【发布时间】:2021-06-09 01:58:56
【问题描述】:

我正在尝试使用 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 运行此测试台时,它不会吐出任何错误,但是波形看起来像这样

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

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

【问题讨论】:

    标签: verilog test-bench


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2023-03-07
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      相关资源
      最近更新 更多