mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-08-14 15:29:12 +00:00
87 lines
2.3 KiB
Coq
87 lines
2.3 KiB
Coq
|
// DESCRIPTION: Verilator: Verilog Test module
|
||
|
//
|
||
|
// This file ONLY is placed into the Public Domain, for any use,
|
||
|
// without warranty, 2003 by Wilson Snyder.
|
||
|
|
||
|
module t (/*AUTOARG*/
|
||
|
// Inputs
|
||
|
clk
|
||
|
);
|
||
|
|
||
|
input clk;
|
||
|
integer cyc; initial cyc=1;
|
||
|
|
||
|
// verilator lint_off GENCLK
|
||
|
reg gendlyclk_r;
|
||
|
reg [31:0] gendlydata_r;
|
||
|
reg [31:0] dlydata_gr;
|
||
|
|
||
|
reg genblkclk;
|
||
|
reg [31:0] genblkdata;
|
||
|
reg [31:0] blkdata_gr;
|
||
|
|
||
|
wire [31:0] constwire = 32'h11;
|
||
|
reg [31:0] initwire;
|
||
|
|
||
|
integer i;
|
||
|
initial begin
|
||
|
for (i=0; i<10000; i=i+1) begin
|
||
|
initwire = 32'h2200;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
wire [31:0] either = gendlydata_r | dlydata_gr | blkdata_gr | initwire | constwire;
|
||
|
wire [31:0] either_unused = gendlydata_r | dlydata_gr | blkdata_gr | initwire | constwire;
|
||
|
|
||
|
always @ (posedge clk) begin
|
||
|
gendlydata_r <= 32'h0011_0000;
|
||
|
gendlyclk_r <= 0;
|
||
|
// surefire lint_off SEQASS
|
||
|
genblkclk = 0;
|
||
|
genblkdata = 0;
|
||
|
if (cyc!=0) begin
|
||
|
cyc <= cyc + 1;
|
||
|
if (cyc==2) begin
|
||
|
gendlyclk_r <= 1;
|
||
|
gendlydata_r <= 32'h00540000;
|
||
|
genblkclk = 1;
|
||
|
genblkdata = 32'hace;
|
||
|
$write("[%0t] Send pulse\n", $time);
|
||
|
end
|
||
|
if (cyc==3) begin
|
||
|
genblkdata = 32'hdce;
|
||
|
gendlydata_r <= 32'h00ff0000;
|
||
|
if (either != 32'h87542211) $stop;
|
||
|
$write("*-* All Finished *-*\n");
|
||
|
$finish;
|
||
|
end
|
||
|
end
|
||
|
// surefire lint_on SEQASS
|
||
|
end
|
||
|
|
||
|
always @ (posedge gendlyclk_r) begin
|
||
|
if ($time>0) begin // Hack, don't split the block
|
||
|
$write("[%0t] Got gendlyclk_r, d=%x b=%x\n", $time, gendlydata_r, genblkdata);
|
||
|
dlydata_gr <= 32'h80000000;
|
||
|
// Delayed activity list will already be completed for gendlydata
|
||
|
// because genclk is from a delayed assignment.
|
||
|
// Thus we get the NEW not old value of gendlydata_r
|
||
|
if (gendlydata_r != 32'h00540000) $stop;
|
||
|
if (genblkdata != 32'hace) $stop;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
always @ (posedge genblkclk) begin
|
||
|
if ($time>0) begin // Hack, don't split the block
|
||
|
$write("[%0t] Got genblkclk, d=%x b=%x\n", $time, gendlydata_r, genblkdata);
|
||
|
blkdata_gr <= 32'h07000000;
|
||
|
// Clock from non-delayed assignment, we get old value of gendlydata_r
|
||
|
`ifdef verilator `else // V3.2 races... technically legal
|
||
|
if (gendlydata_r != 32'h00110000) $stop;
|
||
|
`endif
|
||
|
if (genblkdata != 32'hace) $stop;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endmodule
|