iverilog/ivtest/ivltests/always_latch.v

88 lines
1.6 KiB
Verilog

module top;
reg y, a, b, flip, hidden, en;
reg pass;
function f_and (input i1, i2);
reg partial;
begin
partial = i1 & i2;
f_and = partial | hidden;
end
endfunction
reg intr;
always_latch begin
if (en) begin
intr = flip;
y <= f_and(a, b) ^ intr;
end
end
initial begin
pass = 1'b1;
en = 1'b1;
flip = 1'b0;
hidden = 1'b0;
a = 1'b0;
b = 1'b0;
#1;
if (y !== 1'b0) begin
$display("FAILED: a=1'b0, b=1'b0, hidden=1'b0, expected 1'b0, got %b", y);
pass = 1'b0;
end
a = 1'b0;
b = 1'b1;
#1;
if (y !== 1'b0) begin
$display("FAILED: a=1'b0, b=1'b1, hidden=1'b0, expected 1'b0, got %b", y);
pass = 1'b0;
end
a = 1'b1;
b = 1'b0;
#1;
if (y !== 1'b0) begin
$display("FAILED: a=1'b1, b=1'b0, hidden=1'b0, expected 1'b0, got %b", y);
pass = 1'b0;
end
a = 1'b1;
b = 1'b1;
#1;
if (y !== 1'b1) begin
$display("FAILED: a=1'b1, b=1'b1, hidden=1'b0, expected 1'b1, got %b", y);
pass = 1'b0;
end
hidden = 1'b0;
a = 1'b0;
b = 1'b0;
#1;
if (y !== 1'b0) begin
$display("FAILED: a=1'b0, b=1'b0, hidden=1'b0, expected 1'b0, got %b", y);
pass = 1'b0;
end
hidden = 1'b1;
a = 1'b0;
b = 1'b0;
#1;
if (y !== 1'b1) begin
$display("FAILED: a=1'b0, b=1'b0, hidden=1'b1, expected 1'b1, got %b", y);
pass = 1'b0;
end
en = 1'b0;
hidden = 1'b0;
#1;
if (y !== 1'b1) begin
$display("FAILED: en=1'b0, expected 1'b1, got %b", y);
pass = 1'b0;
end
if (pass) $display("PASSED");
end
endmodule