Skip to content

Commit 22c82a2

Browse files
committed
SystemVerilog queue benchmarks
This adds SystemVerilog benchmarks that implement various queues.
1 parent 8907e68 commit 22c82a2

9 files changed

Lines changed: 131 additions & 2 deletions

regression/ebmc/Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ default: test
33
TEST_PL = ../../lib/cbmc/regression/test.pl
44

55
test:
6-
@$(TEST_PL) -e -p -c ../../../src/ebmc/ebmc
6+
@$(TEST_PL) -e -p -c ../../../src/ebmc/ebmc -X buechi
7+
8+
test-buechi:
9+
@$(TEST_PL) -e -p -c ../../../src/ebmc/ebmc -I buechi
710

811
test-z3:
9-
@$(TEST_PL) -e -p -c "../../../src/ebmc/ebmc --z3" -X broken-smt-backend
12+
@$(TEST_PL) -e -p -c "../../../src/ebmc/ebmc --z3" -X broken-smt-backend -X buechi
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE buechi
2+
queue_depth1.sv
3+
--bdd --buechi
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
--
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module queue(
2+
input in_data, in_valid,
3+
output out_data, out_valid,
4+
input clk);
5+
6+
reg data;
7+
reg valid;
8+
9+
initial valid = 0;
10+
11+
always_ff @(posedge clk)
12+
{data, valid} <= {in_data, in_valid};
13+
14+
assign out_data = data;
15+
assign out_valid = valid;
16+
17+
assert property (@(posedge clk) in_valid implies s_eventually out_valid);
18+
19+
endmodule
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE buechi
2+
queue_depth2.sv
3+
--bdd --buechi
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
--
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
module queue(
2+
input in_data, in_valid,
3+
output out_data, out_valid,
4+
input clk);
5+
6+
reg data0, data1;
7+
reg valid0, valid1;
8+
9+
initial {valid0, valid1} = 2'b00;
10+
11+
always_ff @(posedge clk) begin
12+
{data0, valid0} <= {in_data, in_valid};
13+
{data1, valid1} <= {data0, valid0};
14+
end
15+
16+
assign out_data = data1;
17+
assign out_valid = valid1;
18+
19+
assert property (@(posedge clk) in_valid implies s_eventually out_valid);
20+
21+
endmodule
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE buechi
2+
queue_depthN.sv
3+
--bdd --buechi
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
--
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module queue
2+
#(parameter N = 10)
3+
(input in_data, in_valid,
4+
output out_data, out_valid,
5+
input clk);
6+
7+
reg [N-1:0] data;
8+
reg [N-1:0] valid;
9+
10+
initial valid = {N{1'b0}};
11+
12+
always_ff @(posedge clk)
13+
{data[0], valid[0]} <= {in_data, in_valid};
14+
15+
always_ff @(posedge clk)
16+
for(integer i=1; i<N; i++)
17+
{data[i], valid[i]} <= {data[i-1], valid[i-1]};
18+
19+
assign out_data = data[N-1];
20+
assign out_valid = valid[N-1];
21+
22+
assert property (@(posedge clk) in_valid implies s_eventually out_valid);
23+
24+
endmodule
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE buechi
2+
queue_with_simple_stallN.sv
3+
--bdd --buechi
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
--
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
module queue
2+
#(parameter N = 10)
3+
(input in_data, in_valid, in_stall,
4+
output out_data, out_valid, out_stall,
5+
input clk);
6+
7+
reg [N-1:0] data;
8+
reg [N-1:0] valid;
9+
10+
initial valid = {N{1'b0}};
11+
12+
always_ff @(posedge clk)
13+
if(!out_stall)
14+
{data[0], valid[0]} <= {in_data, in_valid};
15+
16+
always_ff @(posedge clk)
17+
for(integer i=1; i<N; i++)
18+
if(!out_stall)
19+
{data[i], valid[i]} <= {data[i-1], valid[i-1]};
20+
21+
assign out_data = data[N-1];
22+
assign out_valid = valid[N-1];
23+
assign out_stall = in_stall;
24+
25+
// we need to assume we are not stalled indefinitively
26+
assume property (@(posedge clk) s_eventually !in_stall);
27+
28+
assert property (@(posedge clk) (in_valid && !out_stall) implies s_eventually out_valid);
29+
30+
endmodule

0 commit comments

Comments
 (0)