Skip to content

Commit e750bad

Browse files
authored
Merge pull request #981 from diffblue/default-disable-iff-not-supported
SystemVerilog: parsing and type checking for default
2 parents 31591f7 + a489081 commit e750bad

File tree

7 files changed

+38
-2
lines changed

7 files changed

+38
-2
lines changed

regression/verilog/SVA/default_disable1.desc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
KNOWNBUG
1+
CORE
22
default_disable1.sv
33

4-
^EXIT=10$
4+
^file .* line 5: default disable iff is unsupported$
5+
^EXIT=2$
56
^SIGNAL=0$
67
--
78
^warning: ignoring

src/hw_cbmc_irep_ids.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ IREP_ID_ONE(verilog_array_range)
8080
IREP_ID_ONE(verilog_assignment_pattern)
8181
IREP_ID_ONE(verilog_associative_array)
8282
IREP_ID_ONE(verilog_declarations)
83+
IREP_ID_ONE(verilog_default_clocking)
84+
IREP_ID_ONE(verilog_default_disable)
8385
IREP_ID_ONE(verilog_lifetime)
8486
IREP_ID_ONE(verilog_logical_equality)
8587
IREP_ID_ONE(verilog_logical_inequality)

src/verilog/parser.y

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,7 +1032,9 @@ module_or_generate_item_declaration:
10321032
| genvar_declaration
10331033
| clocking_declaration
10341034
| TOK_DEFAULT TOK_CLOCKING clocking_identifier ';'
1035+
{ init($$, ID_verilog_default_clocking); mto($$, $3); }
10351036
| TOK_DEFAULT TOK_DISABLE TOK_IFF expression_or_dist ';'
1037+
{ init($$, ID_verilog_default_disable); mto($$, $4); }
10361038
;
10371039

10381040
non_port_module_item:

src/verilog/verilog_elaborate.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,12 @@ void verilog_typecheckt::collect_symbols(
850850
else if(module_item.id() == ID_verilog_covergroup)
851851
{
852852
}
853+
else if(module_item.id() == ID_verilog_default_clocking)
854+
{
855+
}
856+
else if(module_item.id() == ID_verilog_default_disable)
857+
{
858+
}
853859
else if(module_item.id() == ID_verilog_property_declaration)
854860
{
855861
collect_symbols(to_verilog_property_declaration(module_item));

src/verilog/verilog_interfaces.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,12 @@ void verilog_typecheckt::interface_module_item(
306306
else if(module_item.id() == ID_verilog_covergroup)
307307
{
308308
}
309+
else if(module_item.id() == ID_verilog_default_clocking)
310+
{
311+
}
312+
else if(module_item.id() == ID_verilog_default_disable)
313+
{
314+
}
309315
else if(module_item.id() == ID_verilog_property_declaration)
310316
{
311317
}

src/verilog/verilog_synthesis.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3282,6 +3282,14 @@ void verilog_synthesist::synth_module_item(
32823282
else if(module_item.id() == ID_verilog_covergroup)
32833283
{
32843284
}
3285+
else if(module_item.id() == ID_verilog_default_clocking)
3286+
{
3287+
}
3288+
else if(module_item.id() == ID_verilog_default_disable)
3289+
{
3290+
throw errort().with_location(module_item.source_location())
3291+
<< "default disable iff is unsupported";
3292+
}
32853293
else if(module_item.id() == ID_verilog_property_declaration)
32863294
{
32873295
}

src/verilog/verilog_typecheck.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1740,6 +1740,17 @@ void verilog_typecheckt::convert_module_item(
17401740
else if(module_item.id() == ID_verilog_covergroup)
17411741
{
17421742
}
1743+
else if(module_item.id() == ID_verilog_default_clocking)
1744+
{
1745+
exprt &cond = to_unary_expr(module_item).op();
1746+
convert_expr(cond);
1747+
}
1748+
else if(module_item.id() == ID_verilog_default_disable)
1749+
{
1750+
exprt &cond = to_unary_expr(module_item).op();
1751+
convert_expr(cond);
1752+
make_boolean(cond);
1753+
}
17431754
else if(module_item.id() == ID_verilog_property_declaration)
17441755
{
17451756
convert_property_declaration(to_verilog_property_declaration(module_item));

0 commit comments

Comments
 (0)