Я пытаюсь использовать тестовый стенд для тестирования некоторых функций 4X1 Mux [a, b, c, d - это входы, z - это выход, а s - это строка выбора]. Вот мой код:
module testbench_MUX();
reg a,b,c,d;
reg [1:0] s;
wire z ;
MUX4_1 mux(.a(a) ,.b(b),.c(c),.d(d), .s(s),.z(z));
initial begin
$dumpfile("dump.vcd");
$dumpvars;
end
initial begin // {
a='b0;b='b1 ;c='b0 ;d='b1 ;s='d0;#15
if(z==0) $display("time : %0t Test # 1 : passed",$time);
a='b0;b='b1 ;c='b0 ;d='b1 ;s='d1;#15
if(z==1) $display("Test # 2 : passed");
a='b0;b='b0 ;c='b1 ;d='b1 ;s='d1; #15
if(z==0) $display("Test # 3 : passed");
a='b1;b='b0 ;c='b0 ;d='b0 ;s='d1; #15
if(z==0) $display("Test # 4 : passed");
$finish;
end // }
Вот форма волны:
Ядро показывает, что тест 1 пройден, что означает что z = 0:
# KERNEL: time : 15Test # 1 : passed
Но, как вы можете видеть из осциллограммы в момент времени 15 нс (временной масштаб моделирования равен 1 нс / 1 нс), z = 1. Почему выполняется оператор if
?
Код дизайна MUX:
module MUX4_1(
input a,b,c,d,
input [1:0] s,
output reg z
);
always @ (*) begin
if ( s==0)
z=a;
else if ( s==1)
z=b;
else if ( s==2)
z=c;
else if (s==3)
z=d;
else
z=a;
end
endmodule: MUX4_1