verilog写测试模块问题

verilog写测试模块代码时能不能在同一个测试文件中同时测试多个模块,还是要将多个模块封装为一个模块再对这个模块写测试文件

这个并没有规定,测试多个模块是可以的,封装成一个模块,在进行测试也是可以的,关键是你得在测试模块中例化所要测试的模块,并给出激励信号,而这激励信号得需要你自己来写的追问

那测试文件里面的所有wire都是输出?有些wire我只想作为中间连线,不想给它输出来,我之前没写过测试文件,看了几个例子,都是只有一个测试模块的例子,发现reg类型的变量都是输入,wire类型的变量都是输出,并且好像已经没有input,output这类变量了。

追答

测试文件的wire类是作为连线来使用的,比如你实例一个模块,它在自己的模块中(被测模块中)是作为输出端口的,可能是wire,也可能是reg型,但是在测试时,它相当于测试的输入,同理,被测模块的输入是测试模块的输出,所以是等价的
由于是测试,所以input、output当然没有了,甚至连端口信号也没有了,
你所看见的reg作为输入,因为它在本模块是输出信号,一般为寄存器的,持续赋值,如clk信号

追问

多有麻烦,决定再加点分,另麻烦再讲解一下,我结合下面这个例子提问:
module t;
reg a, b, sel;
wire out;
mux2_m (out, a, b, sel);
initial begin a=0; b=1; sel=0;
#10 b=0;
#10 $stop;
end
endmodule
一个模块的情况,定义的所有变量都会被显示在波形图上,那么如果有两个以上模块,连接两个模块间的wire会被显示在仿真波形上吗?这样不是不合逻辑?

追答

module t; //测试模块名
reg a, b, sel; //测试的激励输入,一般为reg型
wire out; //被测模块的结果输出
mux2_m (out, a, b, sel); //被测模块的例化,你这是位置对应,out应该是被测模块的输出的
initial begin a=0; b=1; sel=0; //给出初始激励值,这里必须为reg型,在initial块中
#10 b=0; //延迟10,将b赋为0
#10 $stop;//仿真结束
end
endmodule
你若想查看仿真结果是否正确,还得使用$display或$monitor,或者直接看波形图

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-16
你可以先对每个模块都写一个测试文件进行测试,然后写个顶层文件将所有模块都连接到一起,再对这个顶层模块写测试文件测试。这样的测试才比较全面。
相似回答