Skip to content

Commit 1867a62

Browse files
committed
Instance array is supported in vparser but not supported in dataflow analyzer.
1 parent 8f9e7a9 commit 1867a62

File tree

3 files changed

+45
-6
lines changed

3 files changed

+45
-6
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
module TOP
2+
(
3+
input [3:0] VAL,
4+
output [3:0] LED0,
5+
output [3:0] LED1,
6+
output [3:0] LED2
7+
);
8+
9+
SUB
10+
# (.MODE(0))
11+
inst_sub0 (VAL[0], LED0[0]),
12+
inst_sub1 (VAL[1], LED0[1]),
13+
inst_sub2 (VAL[2], LED0[2]),
14+
inst_sub3 (VAL[3], LED0[3]);
15+
16+
SUB
17+
# (.MODE(0))
18+
inst_sub4[3:0] (VAL, LED1),
19+
inst_sub5[3:0] (VAL, LED2);
20+
21+
endmodule
22+
23+
module SUB #
24+
(
25+
parameter MODE = 0
26+
)
27+
(
28+
input VAL,
29+
output LED
30+
);
31+
assign LED = ~VAL & MODE;
32+
endmodule
33+

pyverilog/vparser/ast.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,15 +589,17 @@ def children(self):
589589

590590
class Instance(Node):
591591
attr_names = ('name', 'module')
592-
def __init__(self, module, name, portlist, parameterlist):
592+
def __init__(self, module, name, portlist, parameterlist, array=None):
593593
self.module = module
594594
self.name = name
595595
self.portlist = portlist
596596
self.parameterlist = parameterlist
597+
self.array = array
597598
def children(self):
598599
nodelist = []
599600
if self.portlist: nodelist.extend(self.portlist)
600601
if self.parameterlist: nodelist.extend(self.parameterlist)
602+
if self.array: nodelist.append(self.array)
601603
return tuple(nodelist)
602604

603605
class ParamArg(Node):

pyverilog/vparser/parser.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,15 +1314,15 @@ def p_forever_statement(self, p):
13141314
def p_instance(self, p):
13151315
'instance : ID parameterlist instance_bodylist SEMICOLON'
13161316
instancelist = []
1317-
for instance_name, instance_ports in p[3]:
1318-
instancelist.append( Instance(p[1], instance_name, instance_ports, p[2]) )
1317+
for instance_name, instance_ports, instance_array in p[3]:
1318+
instancelist.append( Instance(p[1], instance_name, instance_ports, p[2], instance_array) )
13191319
p[0] = InstanceList( tuple(instancelist) )
13201320

13211321
def p_instance_or(self, p):
13221322
'instance : SENS_OR parameterlist instance_bodylist SEMICOLON'
13231323
instancelist = []
1324-
for instance_name, instance_ports in p[3]:
1325-
instancelist.append( Instance(p[1], instance_name, instance_ports, p[2]) )
1324+
for instance_name, instance_ports, instance_array in p[3]:
1325+
instancelist.append( Instance(p[1], instance_name, instance_ports, p[2], instance_array) )
13261326
p[0] = InstanceList( tuple(instancelist) )
13271327

13281328
def p_instance_bodylist(self, p):
@@ -1335,7 +1335,11 @@ def p_instance_bodylist_one(self, p):
13351335

13361336
def p_instance_body(self, p):
13371337
'instance_body : ID LPAREN instance_ports RPAREN'
1338-
p[0] = (p[1], p[3],)
1338+
p[0] = (p[1], p[3], None)
1339+
1340+
def p_instance_body_array(self, p):
1341+
'instance_body : ID width LPAREN instance_ports RPAREN'
1342+
p[0] = (p[1], p[4], p[2])
13391343

13401344
def p_parameterlist(self, p):
13411345
'parameterlist : DELAY LPAREN param_args RPAREN'

0 commit comments

Comments
 (0)