iverilog/ivtest/ivltests/br_gh316c.v

67 lines
992 B
Verilog

module dut(input EN, input DIR, inout A, inout B);
assign A = EN && DIR == 0 ? B : 1'bz;
assign B = EN && DIR == 1 ? A : 1'bz;
specify
(A => B) = (2);
(B => A) = (3);
(EN => A) = (4);
(EN => B) = (4);
endspecify
endmodule
module test();
wire EN1;
wire EN2;
wire I1;
wire I2;
tri O;
pulldown(O);
dut dut1(EN1, 1'b1, I1, O);
dut dut2(EN2, 1'b0, O, I2);
reg failed = 0;
initial begin
$monitor($time,,EN1,,I1,,EN2,,I2,,O);
force EN1 = 0;
force EN2 = 0;
#4;
#0 if (O !== 0) failed = 1;
force I1 = 1;
force I2 = 1;
#1;
force EN1 = 1;
#3;
#0 if (O !== 0) failed = 1;
#1;
#0 if (O !== 1) failed = 1;
force I1 = 0;
#1;
#0 if (O !== 1) failed = 1;
#1;
#0 if (O !== 0) failed = 1;
force EN1 = 0;
force EN2 = 1;
#3;
#0 if (O !== 0) failed = 1;
#1;
#0 if (O !== 1) failed = 1;
force I2 = 0;
#2;
#0 if (O !== 1) failed = 1;
#1;
if (failed)
$display("FAILED");
else
$display("PASSED");
end
endmodule