- UID
- 840062
|
verilog testbench 测试输出 问题求解
//下面我简单代码
module dec2x4(a,b,enable,out);//it is 2-4解码器实例
input a,b,enable;
output [3:0]out;
reg [3:0]out_o;
assign out = out_o;
always @(a or b or enable)
if(!enable)
out_o <= 4'b1111;
else if(enable)
begin
case ({a,b})
2'b00 : out_o <= 4'b1110;
2'b01 : out_o <= 4'b1101;
2'b10 : out_o <= 4'b1011;
2'b11 : out_o <= 4'b0111;
endcase
end
endmodule
//////编译通过后,我写了测试脚本
`timescale 1 ns/ 1 ps
module dec2x4_vlg_tst();
reg a;
reg b;
reg enable;
wire [3:0] out;
integer fp;
reg [3:0]out_t;预先定义的输出,用于与实际的输出相比较,检测数据
dec2x4 i1 (
.a(a),
.b(b),
.enable(enable),
.out(out)
);
initial begin
fp = $fopen("log.txt");//创建一个文件,获取文件指针
enable = 0;
a = 0;
b = 0;
#10 enable = 1;
#10 b = 1;
#10 a = 1;
#10 force out = 4'b0000;//强制转换输出,用于验证测试
#10 release out;
#10 b = 0;
#10 a = 0;
repeat (5) begin //增加随机测试,循环5次
#10 a <= { $random };
b <= { $random };
enable <= { $random };
end
#10 $stop;
$fclose(fp);
end
always @ (a or b or enable )
if(!enable)
out_t <= 4'b1111;
else if(enable)
begin
case ({a,b})
2'b00 : out_t <= 4'b1110;
2'b01 : out_t <= 4'b1101;
2'b10 : out_t <= 4'b1011;
2'b11 : out_t <= 4'b0111;
endcase
end
always @ ( out or b or enable or a )
if(out_t == out)
$fwrite (fp,"At time %6t ,input a==%b,b==%b,enable==%b,output==%b; true\n",$time,a,b,enable,out);
else
$fwrite (fp,"At time %6t ,input a==%b,b==%b,enable==%b,output==%b; error\n",$time,a,b,enable,out);
endmodule
//////////然后打开文本,看到如下结果
At time 0 ,input a==0,b==0,enable==0,output==xxxx; error
At time 0 ,input a==0,b==0,enable==0,output==1111; true
At time 10000 ,input a==0,b==0,enable==1,output==1111; true
At time 10000 ,input a==0,b==0,enable==1,output==1110; true
At time 20000 ,input a==0,b==1,enable==1,output==1110; true
At time 20000 ,input a==0,b==1,enable==1,output==1101; true
At time 30000 ,input a==1,b==1,enable==1,output==1101; true
At time 30000 ,input a==1,b==1,enable==1,output==0111; true
At time 40000 ,input a==1,b==1,enable==1,output==0000; error
At time 50000 ,input a==1,b==1,enable==1,output==0111; true
At time 60000 ,input a==1,b==0,enable==1,output==0111; true
At time 60000 ,input a==1,b==0,enable==1,output==1011; true
At time 70000 ,input a==0,b==0,enable==1,output==1011; true
At time 70000 ,input a==0,b==0,enable==1,output==1110; true
At time 80000 ,input a==0,b==1,enable==1,output==1110; true
At time 80000 ,input a==0,b==1,enable==1,output==1101; true
At time 90000 ,input a==1,b==1,enable==1,output==1101; true
At time 90000 ,input a==1,b==1,enable==1,output==0111; true
At time 100000 ,input a==1,b==0,enable==1,output==0111; true
At time 100000 ,input a==1,b==0,enable==1,output==1011; true
////////////////////////////////////////////
我想请问的是,如何编写代码,使得上面的文本输出不会在同一个时间节点重复输出。
看到上述结果,发现在always语句中,在同一个时间节点,若两个或以上的参数变化,它要执行多次么,真的是这样的么??????? |
|