verilator/test_regress/t/t_gate_elim.v

148 lines
2.3 KiB
Systemverilog

// 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