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

时间:2014-10-05 20:42:27

标签: loops testing verilog

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

problem

我在这里有设计。

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个输入。或者有更好的方法来做这件事吗?

1 个答案:

答案 0 :(得分:2)

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

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

/*

Output:

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

*/

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

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