用于ROM的Verilog测试平台,如DUT无法正常工作

时间:2018-03-27 09:59:44

标签: verilog lattice test-bench

我正在尝试实现一个测试平台并编写所有内容 我的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功能模拟(如果重要的话?)。

1 个答案:

答案 0 :(得分: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