Skip to content

Commit 8f9e7a9

Browse files
committed
Declarationn of multiple instances is supported.
1 parent 23fdd01 commit 8f9e7a9

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

pyverilog/vparser/ast.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,15 @@ def children(self):
578578
if self.delay: nodelist.append(self.delay)
579579
return tuple(nodelist)
580580

581+
class InstanceList(Node):
582+
attr_names = ()
583+
def __init__(self, list):
584+
self.list = list
585+
def children(self):
586+
nodelist = []
587+
if self.list: nodelist.extend(self.list)
588+
return tuple(nodelist)
589+
581590
class Instance(Node):
582591
attr_names = ('name', 'module')
583592
def __init__(self, module, name, portlist, parameterlist):

pyverilog/vparser/parser.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,12 +1312,30 @@ def p_forever_statement(self, p):
13121312

13131313
######################################################################
13141314
def p_instance(self, p):
1315-
'instance : ID parameterlist ID LPAREN instance_ports RPAREN SEMICOLON'
1316-
p[0] = Instance(p[1], p[3], p[5], p[2])
1315+
'instance : ID parameterlist instance_bodylist SEMICOLON'
1316+
instancelist = []
1317+
for instance_name, instance_ports in p[3]:
1318+
instancelist.append( Instance(p[1], instance_name, instance_ports, p[2]) )
1319+
p[0] = InstanceList( tuple(instancelist) )
13171320

13181321
def p_instance_or(self, p):
1319-
'instance : SENS_OR parameterlist ID LPAREN instance_ports RPAREN SEMICOLON'
1320-
p[0] = Instance(p[1], p[3], p[5], p[2])
1322+
'instance : SENS_OR parameterlist instance_bodylist SEMICOLON'
1323+
instancelist = []
1324+
for instance_name, instance_ports in p[3]:
1325+
instancelist.append( Instance(p[1], instance_name, instance_ports, p[2]) )
1326+
p[0] = InstanceList( tuple(instancelist) )
1327+
1328+
def p_instance_bodylist(self, p):
1329+
'instance_bodylist : instance_bodylist COMMA instance_body'
1330+
p[0] = p[1] + (p[3],)
1331+
1332+
def p_instance_bodylist_one(self, p):
1333+
'instance_bodylist : instance_body'
1334+
p[0] = (p[1],)
1335+
1336+
def p_instance_body(self, p):
1337+
'instance_body : ID LPAREN instance_ports RPAREN'
1338+
p[0] = (p[1], p[3],)
13211339

13221340
def p_parameterlist(self, p):
13231341
'parameterlist : DELAY LPAREN param_args RPAREN'

0 commit comments

Comments
 (0)