你写的功能模块没有明显的语法错误,case语句也很完备,可以编译通过,但是可能会有警告,因为out和a、b的位宽不一样。以下是一个针对该模块的简单testbench激励模块,望采纳。
module mathunit_test;
wire[4:0] out;
reg[2:0] select;
reg[3:0] a, b;
reg clk;
initial
begin
clk = 0;
select = 0;
a = 0;
b= 1;
#2000 $stop();
end
always #2 clk = ~clk;
always@(posedge clk)
begin
a <= a +1;
end
always@(posedge clk)
begin
b <= b +1;
end
always@(posedge clk)
begin
select <= select +1;
end
mathunit mathunit_u ((out, select, a, b);
endmodule
解释一下上面为什么加了一个clk信号。因为你写的是组合逻辑,如果我不加一个始终信号,依次来改变select和a、b的值,每次施加激励只能测出一种结果,覆盖率很难测。加一个clk信号,这三个变量的值就好控制了。
因为你的模块中有b做分母的情况,所以我初始化时设为1.
我用的是隐式实例化,大型工程不建议这样用。
欢迎采纳,如果有什么问题,欢迎追问。你可以到我百度空间中下载写testbench的技巧资料。