1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
module top(input i, output o); A A(); B B(); assign A.i = i; assign o = B.o; always @* assert(o == i); endmodule module A; wire i, y; `ifdef FAIL assign B.x = i; `else assign B.x = !i; `endif assign y = !B.y; endmodule module B; wire x, y, o; assign y = x, o = A.y; endmodule