Skip to content

Commit 0232329

Browse files
Merge pull request #5179 from YosysHQ/krys/assert2cover
2 parents d21a553 + fa68299 commit 0232329

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed

passes/cmds/chformal.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ struct ChformalPass : public Pass {
115115
log("\n");
116116
#endif
117117
log(" -assert2assume\n");
118+
log(" -assert2cover\n");
118119
log(" -assume2assert\n");
119120
log(" -live2fair\n");
120121
log(" -fair2live\n");
@@ -129,6 +130,7 @@ struct ChformalPass : public Pass {
129130
void execute(std::vector<std::string> args, RTLIL::Design *design) override
130131
{
131132
bool assert2assume = false;
133+
bool assert2cover = false;
132134
bool assume2assert = false;
133135
bool live2fair = false;
134136
bool fair2live = false;
@@ -187,6 +189,11 @@ struct ChformalPass : public Pass {
187189
mode = 'c';
188190
continue;
189191
}
192+
if ((mode == 0 || mode == 'c') && args[argidx] == "-assert2cover") {
193+
assert2cover = true;
194+
mode = 'c';
195+
continue;
196+
}
190197
if ((mode == 0 || mode == 'c') && args[argidx] == "-assume2assert") {
191198
assume2assert = true;
192199
mode = 'c';
@@ -218,6 +225,10 @@ struct ChformalPass : public Pass {
218225
constr_types.insert(ID($cover));
219226
}
220227

228+
if (assert2assume && assert2cover) {
229+
log_cmd_error("Cannot use both -assert2assume and -assert2cover.\n");
230+
}
231+
221232
if (mode == 0)
222233
log_cmd_error("Mode option is missing.\n");
223234

@@ -381,6 +392,8 @@ struct ChformalPass : public Pass {
381392
IdString flavor = formal_flavor(cell);
382393
if (assert2assume && flavor == ID($assert))
383394
set_formal_flavor(cell, ID($assume));
395+
if (assert2cover && flavor == ID($assert))
396+
set_formal_flavor(cell, ID($cover));
384397
else if (assume2assert && flavor == ID($assume))
385398
set_formal_flavor(cell, ID($assert));
386399
else if (live2fair && flavor == ID($live))

tests/various/chformal_check.ys

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ select -assert-count 1 t:$assert
3636

3737
design -load prep
3838

39+
chformal -assert2cover
40+
41+
select -assert-count 1 t:$check r:FLAVOR=cover %i
42+
43+
design -load prep
44+
3945
chformal -assert2assume
4046
async2sync
4147
chformal -lower
@@ -66,3 +72,8 @@ design -copy-from gate -as gate top
6672
miter -equiv -flatten -make_assert gold gate miter
6773

6874
sat -verify -prove-asserts -tempinduct miter
75+
76+
design -load prep
77+
78+
logger -expect error "Cannot use both" 1
79+
chformal -assert2assume -assert2cover

tests/verific/chformal.ys

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
verific -formal <<EOT
2+
3+
module top(input clk, a, en);
4+
reg a_q = '0;
5+
reg en_q = '0;
6+
7+
always @(posedge clk) begin
8+
a_q <= a;
9+
en_q <= en;
10+
end
11+
12+
always @(posedge clk)
13+
if (en_q)
14+
assert(a_q);
15+
endmodule
16+
EOT
17+
18+
prep
19+
20+
design -save prep
21+
22+
select -assert-count 1 t:$assert
23+
24+
chformal -assert2assume
25+
26+
select -assert-count 1 t:$assume
27+
28+
chformal -assume2assert
29+
30+
select -assert-count 1 t:$assert
31+
32+
async2sync
33+
34+
chformal -lower
35+
select -assert-count 1 t:$assert
36+
37+
design -load prep
38+
39+
chformal -assert2cover
40+
41+
select -assert-count 1 t:$cover
42+
43+
design -load prep
44+
45+
chformal -assert2assume
46+
async2sync
47+
chformal -lower
48+
chformal -assume -early
49+
50+
rename -enumerate -pattern assume_% t:$assume
51+
expose -evert t:$assume
52+
53+
design -save gold
54+
55+
design -load prep
56+
57+
chformal -assert2assume
58+
chformal -assume -early
59+
async2sync
60+
chformal -lower
61+
62+
rename -enumerate -pattern assume_% t:$assume
63+
expose -evert t:$assume
64+
65+
design -save gate
66+
67+
design -reset
68+
69+
design -copy-from gold -as gold top
70+
design -copy-from gate -as gate top
71+
72+
miter -equiv -flatten -make_assert gold gate miter
73+
74+
sat -verify -prove-asserts -tempinduct miter

0 commit comments

Comments
 (0)