Skip to content

Commit 30190ba

Browse files
authored
Merge branch 'main' into verilog_string
2 parents 3fb4d16 + 698d536 commit 30190ba

18 files changed

+163
-53
lines changed

CHANGELOG

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* SystemVerilog: $bitstoreal/$bitstoshortreal, $realtobits/$shortrealtobits
1010
* SystemVerilog: $itor, $rtoi
1111
* SystemVerilog: chandle, event, string
12+
* SystemVerilog: package scope operator
1213

1314
# EBMC 5.4
1415

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CORE
2+
package2.sv
3+
4+
^^\[.*\] always main\.Q == 123: PROVED$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package moo;
2+
3+
parameter P = 123;
4+
5+
endpackage
6+
7+
module main;
8+
9+
import moo::*;
10+
11+
parameter Q = moo::P;
12+
13+
assert final (Q == 123);
14+
15+
endmodule
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
KNOWNBUG
2+
package_enum1.sv
3+
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
--
8+
Support for enums in packages is missing.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package moo;
2+
3+
typedef enum { RED, GREEN } my_type;
4+
5+
endpackage
6+
7+
module main;
8+
9+
import moo::*;
10+
11+
assert final (moo::GREEN == 1);
12+
13+
endmodule
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
KNOWNBUG
2+
package_typedef1.sv
3+
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
--
8+
Support for typedefs in packages is missing.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package moo;
2+
3+
typedef byte my_type;
4+
5+
endpackage
6+
7+
module main;
8+
9+
import moo::*;
10+
11+
moo::my_type some_var;
12+
13+
assert final ($typename(some_var) == "byte");
14+
15+
endmodule

src/hw_cbmc_irep_ids.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ IREP_ID_ONE(verilog_class)
251251
IREP_ID_ONE(verilog_module)
252252
IREP_ID_ONE(verilog_package)
253253
IREP_ID_ONE(verilog_package_import)
254+
IREP_ID_ONE(verilog_package_scope)
254255
IREP_ID_ONE(verilog_program)
255256
IREP_ID_ONE(verilog_udp)
256257
IREP_ID_ONE(module_source)

src/verilog/parser.y

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,9 +1355,13 @@ package_import_item_brace:
13551355

13561356
package_import_item:
13571357
package_identifier "::" identifier
1358-
{ init($$, ID_verilog_import_item); mto($$, $1); mto($$, $3); }
1358+
{ init($$, ID_verilog_import_item);
1359+
stack_expr($$).set(ID_verilog_package, stack_expr($1).id());
1360+
stack_expr($$).set(ID_identifier, stack_expr($3).id()); }
13591361
| package_identifier "::" "*"
1360-
{ init($$, ID_verilog_import_item); mto($$, $1); }
1362+
{ init($$, ID_verilog_import_item);
1363+
stack_expr($$).set(ID_verilog_package, stack_expr($1).id());
1364+
stack_expr($$).set(ID_identifier, "*"); }
13611365
;
13621366

13631367
genvar_declaration:
@@ -4032,6 +4036,10 @@ part_select_range:
40324036

40334037
primary: primary_literal
40344038
| hierarchical_identifier_select
4039+
| package_scope hierarchical_identifier_select
4040+
{ init($$, ID_verilog_package_scope);
4041+
mto($$, $1);
4042+
mto($$, $2); }
40354043
| concatenation
40364044
| multiple_concatenation
40374045
| function_subroutine_call
@@ -4209,6 +4217,9 @@ net_identifier: identifier;
42094217

42104218
package_identifier: TOK_NON_TYPE_IDENTIFIER;
42114219

4220+
package_scope: package_identifier "::"
4221+
;
4222+
42124223
param_identifier: TOK_NON_TYPE_IDENTIFIER;
42134224

42144225
port_identifier: identifier;

src/verilog/verilog_expr.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ static void dependencies_rec(
100100
{
101101
dependencies_rec(to_verilog_generate_for(module_item).body(), dest);
102102
}
103+
else if(module_item.id() == ID_verilog_package_import)
104+
{
105+
for(auto &import_item : module_item.get_sub())
106+
{
107+
dest.push_back(
108+
verilog_package_identifier(import_item.get(ID_verilog_package)));
109+
}
110+
}
103111
}
104112

105113
std::vector<irep_idt> verilog_item_containert::dependencies() const

0 commit comments

Comments
 (0)