Skip to content

Commit 7c6f2f5

Browse files
authored
Merge pull request #166 from liujed/verify-pfpu32_mul
Formal verification for pfpu32_muldiv: MULT (and some DIV)
2 parents 976c613 + aac6714 commit 7c6f2f5

File tree

7 files changed

+571
-103
lines changed

7 files changed

+571
-103
lines changed

bench/formal/Makefile

+3-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ TESTS := mor1kx_cache_lru \
2828
mor1kx_rf_cappuccino \
2929
mor1kx_bus_if_wb32 \
3030
pfpu32_addsub \
31-
pfpu32_cmp
31+
pfpu32_cmp \
32+
pfpu32_muldiv_check \
33+
pfpu32_muldiv
3234

3335
# tests that no longer work keep them here so we can easily
3436
# run them if we want to try and fix them.

bench/formal/f_multiclock_pfpu32_addsub.v renamed to bench/formal/f_multiclock_pfpu32_op.v

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
/* ****************************************************************************
22
SPDX-License-Identifier: CERN-OHL-W-2.0
33
4-
Description: mor1kx formal multiclock pfpu32 addsub checker
4+
Description: mor1kx formal multiclock pfpu32 operation checker
55
6-
Checks that an pfpu32 addsub operation finishes within a number of clock
7-
cycles. The completion of the operation is signaled by asserting add_rdy_i.
6+
Checks that an pfpu32 operation finishes within a number of clock cycles.
7+
The completion of the operation is signaled by asserting result_rdy_i.
88
99
***************************************************************************** */
1010

11-
module f_multiclock_pfpu32_addsub
11+
module f_multiclock_pfpu32_op
1212
#(
1313
parameter OP_MAX_CLOCKS = 3
1414
) (
1515
input clk,
1616
input flush_i,
1717
input adv_i,
18-
input add_rdy_i,
18+
input result_rdy_i,
1919
input start_i,
2020
input f_initialized,
2121
);
@@ -25,18 +25,18 @@ module f_multiclock_pfpu32_addsub
2525
initial f_op_count = 0;
2626
initial f_op = 0;
2727

28-
// Valid addsub output is seen after three clocks.
28+
// Valid output is seen after OP_MAX_CLOCKS cycles.
2929
always @(posedge clk) begin
3030
if (f_initialized) begin
3131
if (flush_i)
3232
// The pipeline is being flushed. The results of any operations in
3333
// flight will not be reported. Stop counting.
3434
f_op <= 0;
35-
else if ($rose(adv_i & start_i)) begin
35+
else if (adv_i & start_i) begin
3636
// A new operation is starting. Start/reset the counter.
3737
f_op <= 1;
3838
f_op_count <= 1;
39-
end else if (add_rdy_i)
39+
end else if (result_rdy_i)
4040
// Result is ready. Stop counting.
4141
f_op <= 0;
4242
else if (f_op) begin

bench/formal/pfpu32_addsub.sby

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ depth 10
66
smtbmc yices
77

88
[script]
9-
read -formal f_multiclock_pfpu32_addsub.v
9+
read -formal f_multiclock_pfpu32_op.v
1010
read -formal -D PFPU32_ADDSUB pfpu32_addsub.v
1111

1212

1313
prep -top pfpu32_addsub
1414

1515
[files]
16-
f_multiclock_pfpu32_addsub.v
16+
f_multiclock_pfpu32_op.v
1717
../../rtl/verilog/pfpu32/pfpu32_addsub.v
1818
../../rtl/verilog/mor1kx-defines.v
1919
../../rtl/verilog/mor1kx-sprs.v

bench/formal/pfpu32_muldiv.sby

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[options]
2+
mode prove
3+
depth 20
4+
5+
[engines]
6+
smtbmc yices
7+
8+
[script]
9+
read -formal f_multiclock_pfpu32_op.v
10+
read -formal -D PFPU32_MULDIV pfpu32_muldiv.v
11+
12+
13+
prep -top pfpu32_muldiv
14+
15+
[files]
16+
f_multiclock_pfpu32_op.v
17+
../../rtl/verilog/pfpu32/pfpu32_muldiv.v
18+
../../rtl/verilog/mor1kx-defines.v
19+
../../rtl/verilog/mor1kx-sprs.v

bench/formal/pfpu32_muldiv_check.sby

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[options]
2+
mode prove
3+
depth 20
4+
5+
[engines]
6+
smtbmc yices
7+
8+
[script]
9+
read -formal f_multiclock_pfpu32_op.v
10+
read -formal -D PFPU32_MULDIV -D PFPU32_CHECK_MUL_ASSUMPTIONS pfpu32_muldiv.v
11+
12+
13+
prep -top pfpu32_muldiv
14+
15+
[files]
16+
f_multiclock_pfpu32_op.v
17+
../../rtl/verilog/pfpu32/pfpu32_muldiv.v
18+
../../rtl/verilog/mor1kx-defines.v
19+
../../rtl/verilog/mor1kx-sprs.v

rtl/verilog/pfpu32/pfpu32_addsub.v

+2-2
Original file line numberDiff line numberDiff line change
@@ -573,14 +573,14 @@ module pfpu32_addsub
573573
// Verify that a result is produced after three clocks.
574574
generate
575575
begin : f_addsub_multiclock
576-
f_multiclock_pfpu32_addsub #(
576+
f_multiclock_pfpu32_op #(
577577
.OP_MAX_CLOCKS(3),
578578
) u_f_multiclock (
579579
.clk(clk),
580580
.flush_i(flush_i),
581581
.adv_i(adv_i),
582582
.start_i(start_i),
583-
.add_rdy_i(add_rdy_o),
583+
.result_rdy_i(add_rdy_o),
584584
.f_initialized(f_initialized),
585585
);
586586
end

0 commit comments

Comments
 (0)