148 lines
2.3 KiB
Systemverilog
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
|