iverilog/ivtest/ivltests/not_a_latch1.v

61 lines
1.2 KiB
Verilog

module test(input wire load, in,
output reg out1, out2);
(* ivl_combinational *)
always @* begin
out1 = 0;
if (load) begin
out1 = in;
out2 = in;
end else begin
out2 = ~in;
end
end
endmodule // test
module test_bench;
reg load;
reg val;
wire out1, out2;
test DUT(.load(load), .in(val), .out1(out1), .out2(out2));
(* ivl_synthesis_off *)
initial begin
val = 0;
load = 1;
#1 ;
if (out1 !== 0 || out2 !== 0) begin
$display("FAILED -- load=%b, val=%b, out1=%b, out2=%b", load, val, out1, out2);
$finish;
end
val = 1;
#1 ;
if (out1 !== 1 || out2 !== 1) begin
$display("FAILED -- load=%b, val=%b, out1=%b, out2=%b", load, val, out1, out2);
$finish;
end
load = 0;
#1 ;
if (out1 !== 0 || out2 !== 0) begin
$display("FAILED -- load=%b, val=%b, out1=%b, out2=%b", load, val, out1, out2);
$finish;
end
val = 0;
#1 ;
if (out1 !== 0 || out2 !== 1) begin
$display("FAILED -- load=%b, val=%b, out1=%b, out2=%b", load, val, out1, out2);
$finish;
end
$display("PASSED");
end // initial begin
endmodule // test_bench