【问题标题】:Verilog testbench for ROM like DUT not working用于 ROM 的 Verilog 测试平台(如 DUT)无法正常工作
【发布时间】:2018-03-27 09:59:43
【问题描述】:

我正在尝试实现一个测试平台并编写所有 我的 DUT 到文件的可能输入组合:

module CONTROL_LOGIC_tb();
    // Inputs
    reg [3:0] select_i;
    reg [15:0] addr_i;
    // Output
    wire [7:0] ctrl_o;

    // Instantiate the UUT
    CONTROL_LOGIC UUT(
        .select_i(select_i),
        .ctrl_i(addr_i),
        .ctrl_o(ctrl_o) );

    // Do test
    integer outFile;
    integer idx;

    initial begin
        select_i = 0;
        outFile = $fopen(".\\CTRL.bin", "wb");

        for (idx = 0; idx < 65536; idx = idx +1)
        begin
            addr_i = idx;
            $fwrite(outFile, "%c", ctrl_o);
        end
        $fclose(outFile);
        $finish;
    end
endmodule

不幸的是,文件“CTRL.bin”没有填充任何有用的数据。 但是它的大小是 64kB……至少这是可行的!

使用变量“idx”作为 DUT 的输入我做错了什么?

ps:我在 ispLever 中使用 Aldec 函数模拟(如果这很重要?)。

【问题讨论】:

    标签: verilog test-bench


    【解决方案1】:

    for 循环中没有延迟:

    for (idx = 0; idx < 65536; idx = idx +1)
    

    您的输入之间必须始终存在一些延迟,否则生成它们的代码只会在零时间内运行,每个新输入只会覆盖前一个输入,并且不会将任何输入应用于被测设计,例如:

    for (idx = 0; idx < 65536; idx = idx +1)
        begin
            addr_i = idx;
            #10;
            $fwrite(outFile, "%c", ctrl_o);
        end
    

    【讨论】:

    • 您可能希望给 ROM 一些时间来响应更改的地址。我会在你设置好地址后放 #10。
    • @oldfart 你是对的。我没有注意到他们正在将 DUT 输出写入文件。我会编辑它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多