Skip to content

Commit 01ca94a

Browse files
authored
Merge pull request #1428 from diffblue/verilog-parameter-port-declarations
Verilog: parameter port declarations
2 parents b3d524d + 487cf23 commit 01ca94a

File tree

7 files changed

+35
-28
lines changed

7 files changed

+35
-28
lines changed

src/hw_cbmc_irep_ids.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,11 +311,11 @@ IREP_ID_ONE(verilog_module)
311311
IREP_ID_ONE(verilog_package)
312312
IREP_ID_ONE(verilog_package_import)
313313
IREP_ID_ONE(verilog_package_scope)
314+
IREP_ID_ONE(verilog_parameter_port_decls)
314315
IREP_ID_ONE(verilog_program)
315316
IREP_ID_ONE(verilog_udp)
316317
IREP_ID_ONE(module_source)
317318
IREP_ID_ONE(module_items)
318-
IREP_ID_ONE(parameter_port_list)
319319
IREP_ID_ONE(named_block)
320320
IREP_ID_ONE(primitive_module_instance)
321321
IREP_ID_ONE(all)

src/verilog/parser.y

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1984,12 +1984,13 @@ list_of_variable_identifiers:
19841984
// to cover list_of_param_assignments.
19851985
parameter_port_declaration:
19861986
TOK_PARAMETER data_type_or_implicit param_assignment
1987-
{ $$ = $3; }
1987+
{ init($$, ID_decl); stack_expr($$).type() = std::move(stack_type($2)); mto($$, $3); }
19881988
| TOK_LOCALPARAM data_type_or_implicit param_assignment
1989-
{ $$ = $3; }
1989+
{ init($$, ID_decl); stack_expr($$).type() = std::move(stack_type($2)); mto($$, $3); }
19901990
| data_type param_assignment
1991-
{ $$ = $2; }
1991+
{ init($$, ID_decl); stack_expr($$).type() = std::move(stack_type($1)); mto($$, $2); }
19921992
| param_assignment
1993+
{ init($$, ID_decl); mto($$, $1); }
19931994
;
19941995

19951996
list_of_defparam_assignments:

src/verilog/verilog_elaborate.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -987,8 +987,9 @@ verilog_typecheckt::elaborate(const verilog_module_sourcet &module_source)
987987
// and the expansion of generate blocks.
988988

989989
// At the top level of the module, include the parameter ports.
990-
for(auto &parameter_port_decl : module_source.parameter_port_list())
991-
collect_symbols(typet(ID_nil), parameter_port_decl);
990+
for(auto &declaration : module_source.parameter_port_decls())
991+
for(auto &declarator : declaration.declarators())
992+
collect_symbols(typet(ID_nil), declarator);
992993

993994
// At the top level of the module, include the non-parameter module port
994995
// module items.

src/verilog/verilog_expr.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ void verilog_module_sourcet::show(std::ostream &out) const
6161
{
6262
out << "Module: " << base_name() << '\n';
6363

64-
out << " Parameters:\n";
64+
out << " Parameter ports:\n";
6565

66-
for(auto &parameter : parameter_port_list())
66+
for(auto &parameter : parameter_port_decls())
6767
out << " " << parameter.pretty() << '\n';
6868

6969
out << '\n';

src/verilog/verilog_expr.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2355,17 +2355,18 @@ class verilog_module_sourcet : public verilog_item_containert
23552355
{
23562356
}
23572357

2358-
using parameter_port_listt = verilog_parameter_declt::declaratorst;
2358+
using parameter_port_declst = std::vector<verilog_parameter_declt>;
23592359

2360-
const parameter_port_listt &parameter_port_list() const
2360+
const parameter_port_declst &parameter_port_decls() const
23612361
{
2362-
return (
2363-
const parameter_port_listt &)(find(ID_parameter_port_list).get_sub());
2362+
return (const parameter_port_declst &)(find(ID_verilog_parameter_port_decls)
2363+
.get_sub());
23642364
}
23652365

2366-
parameter_port_listt &parameter_port_list()
2366+
parameter_port_declst &parameter_port_decls()
23672367
{
2368-
return (parameter_port_listt &)(add(ID_parameter_port_list).get_sub());
2368+
return (
2369+
parameter_port_declst &)(add(ID_verilog_parameter_port_decls).get_sub());
23692370
}
23702371

23712372
using port_listt = std::vector<verilog_declt>;

src/verilog/verilog_parameterize_module.cpp

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ verilog_typecheckt::get_parameter_declarators(
3333
std::vector<verilog_parameter_declt::declaratort> declarators;
3434

3535
// We do the parameter ports first.
36-
const auto &parameter_port_list = module_source.parameter_port_list();
36+
const auto &parameter_port_decls = module_source.parameter_port_decls();
3737

38-
for(auto &decl : parameter_port_list)
39-
declarators.push_back(decl);
38+
for(auto &declaration : parameter_port_decls)
39+
for(auto &declarator : declaration.declarators())
40+
declarators.push_back(declarator);
4041

4142
// We do the module item ports second.
4243
const auto &module_items = module_source.module_items();
@@ -155,18 +156,20 @@ void verilog_typecheckt::set_parameter_values(
155156
{
156157
auto p_it=parameter_values.begin();
157158

158-
auto &parameter_port_list = module_source.parameter_port_list();
159+
auto &parameter_port_decls = module_source.parameter_port_decls();
159160

160-
for(auto &declarator : parameter_port_list)
161-
{
162-
DATA_INVARIANT(p_it != parameter_values.end(), "have enough parameter values");
161+
for(auto &declaration : parameter_port_decls)
162+
for(auto &declarator : declaration.declarators())
163+
{
164+
DATA_INVARIANT(
165+
p_it != parameter_values.end(), "have enough parameter values");
163166

164-
// only overwrite when actually assigned
165-
if(p_it->is_not_nil())
166-
declarator.value() = *p_it;
167+
// only overwrite when actually assigned
168+
if(p_it->is_not_nil())
169+
declarator.value() = *p_it;
167170

168-
p_it++;
169-
}
171+
p_it++;
172+
}
170173

171174
auto &module_items = module_source.module_items();
172175

src/verilog/verilog_parse_tree.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ exprt verilog_parse_treet::create_module(
2525
irept &attributes,
2626
irept &module_keyword,
2727
exprt &name,
28-
exprt &parameter_port_list,
28+
exprt &parameter_port_decls,
2929
exprt &ports,
3030
exprt &module_items)
3131
{
@@ -35,7 +35,8 @@ exprt verilog_parse_treet::create_module(
3535

3636
verilog_module_sourcet new_module{name.id()};
3737

38-
new_module.add(ID_parameter_port_list) = std::move(parameter_port_list);
38+
new_module.add(ID_verilog_parameter_port_decls) =
39+
std::move(parameter_port_decls);
3940
new_module.add(ID_ports) = std::move(ports);
4041
new_module.add_source_location() =
4142
((const exprt &)module_keyword).source_location();

0 commit comments

Comments
 (0)