// DESCRIPTION: Verilator: Verilog Test module // // This file ONLY is placed under the Creative Commons Public Domain. // SPDX-FileCopyrightText: 2005 Wilson Snyder // SPDX-License-Identifier: CC0-1.0 module t ( input clk ); integer cyc; initial cyc = 1; reg b; wire vconst1 = 1'b0; wire vconst2 = !(vconst1); wire vconst3 = !vconst2; wire vconst = vconst3; wire qa; wire qb; wire qc; wire qd; wire qe; ta ta ( .b(b), .vconst(vconst), .q(qa) ); tb tb ( .clk(clk), .vconst(vconst), .q(qb) ); tc tc ( .b(b), .vconst(vconst), .q(qc) ); td td ( .b(b), .vconst(vconst), .q(qd) ); te te ( .clk(clk), .b(b), .vconst(vconst), .q(qe) ); always @(posedge clk) begin `ifdef TEST_VERBOSE $display("%b", {qa, qb, qc, qd, qe}); `endif if (cyc != 0) begin cyc <= cyc + 1; if (cyc == 1) begin b <= 1'b1; end if (cyc == 2) begin if (qa != 1'b1) $stop; if (qb != 1'b0) $stop; if (qd != 1'b0) $stop; b <= 1'b0; end if (cyc == 3) begin if (qa != 1'b0) $stop; if (qb != 1'b0) $stop; if (qd != 1'b0) $stop; if (qe != 1'b0) $stop; b <= 1'b1; end if (cyc == 4) begin if (qa != 1'b1) $stop; if (qb != 1'b0) $stop; if (qd != 1'b0) $stop; if (qe != 1'b1) $stop; b <= 1'b0; end if (cyc == 5) begin $write("*-* All Finished *-*\n"); $finish; end end end endmodule module ta ( input vconst, input b, output reg q ); always @( /*AS*/ b or vconst) begin q = vconst | b; end endmodule module tb ( input vconst, input clk, output reg q ); always @(posedge clk) begin q <= vconst; end endmodule module tc ( input vconst, input b, output reg q ); always @(posedge vconst) begin q <= b; $stop; end endmodule module td ( input vconst, input b, output reg q ); always @( /*AS*/ vconst) begin q = vconst; end endmodule module te ( input clk, input vconst, input b, output reg q ); reg qmid; always @(posedge vconst or posedge clk) begin qmid <= b; end always @(posedge clk or posedge vconst) begin q <= qmid; end endmodule