//(方法一): //---------------文件名 compare.v ----------------- modulecompare(equal,a,b); inputa,b; outputequal; assign equal = (a==b)? 1 : 0; //a等于b时,equal输出为1;a不等于b时,equal输出为0。 endmodule //(方法二): modulecompare(equal,a,b); inputa,b; outputequal; regequal; always @(a or b) if(a==b) //a等于b时,equal输出为1; equal =1; else //a不等于b时,equal输出为0。 equal = 0; //思考:如果不写else 部分会产生什么逻辑? endmodule //------------------------------------------------------------- //----------测试模块源代码(方法之一): `timescale1ns/1ns // 定义时间单位。 `include "./compare.v" // 包含模块文件。在有的仿真调试环境中并不需要此语句。 //而需要从调试环境的菜单中键入有关模块文件的路径和名称 modulet; reg a,b; wire equal; initial //initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 a=0;b=0; #100 $stop; //系统任务,暂停仿真以便观察仿真波形。 end compare m(.equal(equal),.a(a),.b(b)); //调用被测试模块t.m endmodule //----------测试模块源代码(方法之二):------------------------- `timescale1ns/1ns // 定义时间单位。 `include "./compare.v" // 包含模块文件。在有的仿真调试环境中并不需要此语句。 //而需要从调试环境的菜单中键入有关模块文件的路径和名称 modulet; reg a,b; reg clock; wire equal; initial //initial常用于仿真时信号的给出。 begin a=0; b=0; clock = 0; //定义一个时钟变量 end always #50 clock = ~clock; //产生周期性的时钟 always @ (posedge clock) //在每次时钟正跳变沿时刻产生不同的a和b begin a = {$random}%2; // 每次a是0还是1是随机的。 b = {$random}%2; // 每次b是0还是1是随机的。 end initial begin #100000 $stop; end //系统任务,暂停仿真以便观察仿真波形。 compare m(.equal(equal),.a(a),.b(b)); //调用被测试模块t.m endmodule
|