繁体   English   中英

如何编写一个 verilog 测试平台来循环 4 个输入?

[英]How to write a verilog testbench to loop through 4 inputs?

我必须为此原理图创建 verilog 代码和测试平台。

问题

我这里有它的设计。

module prob1(input wire a,b,c,d, output wire out);
    assign out = (a||d)&&(!d&&b&&c);
endmodule

到目前为止,这是我对测试平台的了解。

module prob1_tb();
    reg a,b,c,d;
    wire out;

    prob1 prob1_test(a,b,c,d, out);

    initial begin
        for(i=0; i=16; i=i+1)
            <loop code here>
        end
    end
endmodule

现在我想我遇到的问题是如何将该数字转换为原理图中正在使用的 4 个输入。 或者有没有更好的方法来做到这一点?

这是使用连接运算符的简单方法:

module prob1(input wire a,b,c,d, output wire out);
    assign out = (a||d)&&(!d&&b&&c);
endmodule

module prob1_tb();
    reg a,b,c,d;
    wire out;

    prob1 prob1_test(a,b,c,d, out);

    initial begin
        $monitor(a,b,c,d,out);
        for (int i=0; i<16; i=i+1) begin
            {a,b,c,d} = i;
            #1;
        end
    end
endmodule

输出:

00000
00010
00100
00110
01000
01010
01100
01110
10000
10010
10100
10110
11000
11010
11101
11110

是的,有更好的方法来验证逻辑。 首先要做的是引入随机值(参考 IEEE Std 1800-2009 中的$urandom函数)。 当然,您还需要使用模型来检查您的输出,这在您的情况下是微不足道的。

根据您有多少时间(和培训),您可以采用标准流程,例如通用验证方法 (UVM)。 人们围绕验证建立职业。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM