mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-12-03 11:49:20 +00:00
131 lines
2.5 KiB
Coq
131 lines
2.5 KiB
Coq
|
// DESCRIPTION: Verilator: Verilog Test module
|
||
|
//
|
||
|
// This file ONLY is placed into the Public Domain, for any use,
|
||
|
// without warranty, 2019 by Peter Monsson.
|
||
|
// SPDX-License-Identifier: CC0-1.0
|
||
|
|
||
|
module t (/*AUTOARG*/
|
||
|
// Inputs
|
||
|
clk
|
||
|
);
|
||
|
|
||
|
input clk;
|
||
|
integer cyc; initial cyc=1;
|
||
|
|
||
|
Test test (/*AUTOINST*/
|
||
|
// Inputs
|
||
|
.clk(clk),
|
||
|
.cyc(cyc));
|
||
|
|
||
|
always @ (posedge clk) begin
|
||
|
if (cyc!=0) begin
|
||
|
cyc <= cyc + 1;
|
||
|
`ifdef TEST_VERBOSE
|
||
|
$display("cyc=%0d", cyc);
|
||
|
`endif
|
||
|
if (cyc==10) begin
|
||
|
$write("*-* All Finished *-*\n");
|
||
|
$finish;
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module Test
|
||
|
(
|
||
|
input clk,
|
||
|
input integer cyc
|
||
|
);
|
||
|
|
||
|
`ifdef FAIL_ASSERT_1
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
1 |-> 0
|
||
|
) else $display("[%0t] wrong implication", $time);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
1 |=> 0
|
||
|
) else $display("[%0t] wrong implication", $time);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
cyc%3==1 |=> cyc%3==1
|
||
|
) else $display("[%0t] wrong implication (step)", $time);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
cyc%3==1 |=> cyc%3==0
|
||
|
) else $display("[%0t] wrong implication (step)", $time);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk) disable iff (cyc == 3)
|
||
|
(cyc == 4) |=> 0
|
||
|
) else $display("[%0t] wrong implication (disable)", $time);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk) disable iff (cyc == 6)
|
||
|
(cyc == 4) |=> 0
|
||
|
) else $display("[%0t] wrong implication (disable)", $time);
|
||
|
|
||
|
`endif
|
||
|
|
||
|
// Test |->
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
1 |-> 1
|
||
|
);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
0 |-> 0
|
||
|
);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
0 |-> 1
|
||
|
);
|
||
|
|
||
|
// Test |=>
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
1 |=> 1
|
||
|
);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
0 |=> 0
|
||
|
);
|
||
|
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
0 |=> 1
|
||
|
);
|
||
|
|
||
|
// Test correct handling of time step in |=>
|
||
|
assert property (
|
||
|
@(posedge clk)
|
||
|
cyc%3==1 |=> cyc%3==2
|
||
|
);
|
||
|
|
||
|
// Test correct handling of disable iff
|
||
|
assert property (
|
||
|
@(posedge clk) disable iff (cyc < 3)
|
||
|
1 |=> cyc > 3
|
||
|
);
|
||
|
|
||
|
// Test correct handling of disable iff in current cycle
|
||
|
assert property (
|
||
|
@(posedge clk) disable iff (cyc == 4)
|
||
|
(cyc == 4) |=> 0
|
||
|
);
|
||
|
|
||
|
// Test correct handling of disable iff in previous cycle
|
||
|
assert property (
|
||
|
@(posedge clk) disable iff (cyc == 5)
|
||
|
(cyc == 4) |=> 0
|
||
|
);
|
||
|
|
||
|
endmodule
|