Skip to content

Commit 82e6ac2

Browse files
author
Rajsekhar Setaluri
committed
Extend all port decls to be n-d arrays
All port declarations can now be declared as n-d arrays (with arbitrary number of dimensions).
1 parent c890c30 commit 82e6ac2

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

pyverilog/ast_code_generator/codegen.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,8 @@ def visit_Ioport(self, node):
371371
'second': '' if node.second is None else node.second.__class__.__name__.lower(),
372372
'name': escape(node.first.name),
373373
'width': '' if node.first.width is None else self.visit(node.first.width),
374-
'signed': node.first.signed or (node.second is not None and node.second.signed)
374+
'signed': node.first.signed or (node.second is not None and node.second.signed),
375+
'dimensions': '' if node.first.dimensions is None else self.visit(node.first.dimensions)
375376
}
376377
rslt = template.render(template_dict)
377378
return rslt
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{ first }} {% if second != '' %}{{ second }} {% endif %}{% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}
1+
{{ first }} {% if second != '' %}{{ second }} {% endif %}{% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %}

pyverilog/vparser/parser.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -365,26 +365,25 @@ def p_ioports_one(self, p):
365365
p[0] = (p[1],)
366366
p.set_lineno(0, p.lineno(1))
367367

368-
def create_ioport(self, sigtypes, name, width=None, lineno=0):
368+
def create_ioport(self, sigtypes, name, width=None, dimensions=None, lineno=0):
369369
self.typecheck_ioport(sigtypes)
370370
first = None
371371
second = None
372372
signed = False
373373
if 'signed' in sigtypes:
374374
signed = True
375375
if 'input' in sigtypes:
376-
first = Input(name=name, width=width, signed=signed, lineno=lineno)
376+
first = Input(name=name, width=width, signed=signed, dimensions=dimensions, lineno=lineno)
377377
if 'output' in sigtypes:
378-
first = Output(name=name, width=width,
379-
signed=signed, lineno=lineno)
378+
first = Output(name=name, width=width, signed=signed, dimensions=dimensions, lineno=lineno)
380379
if 'inout' in sigtypes:
381-
first = Inout(name=name, width=width, signed=signed, lineno=lineno)
380+
first = Inout(name=name, width=width, signed=signed, dimensions=dimensions, lineno=lineno)
382381
if 'wire' in sigtypes:
383-
second = Wire(name=name, width=width, signed=signed, lineno=lineno)
382+
second = Wire(name=name, width=width, signed=signed, dimensions=dimensions, lineno=lineno)
384383
if 'reg' in sigtypes:
385-
second = Reg(name=name, width=width, signed=signed, lineno=lineno)
384+
second = Reg(name=name, width=width, signed=signed, dimensions=dimensions, lineno=lineno)
386385
if 'tri' in sigtypes:
387-
second = Tri(name=name, width=width, signed=signed, lineno=lineno)
386+
second = Tri(name=name, width=width, signed=signed, dimensions=dimensions, lineno=lineno)
388387
return Ioport(first, second, lineno=lineno)
389388

390389
def typecheck_ioport(self, sigtypes):
@@ -415,6 +414,11 @@ def p_ioport_width(self, p):
415414
p[0] = self.create_ioport(p[1], p[3], width=p[2], lineno=p.lineno(3))
416415
p.set_lineno(0, p.lineno(1))
417416

417+
def p_ioport_dimensions(self, p):
418+
'ioport : sigtypes width portname dimensions'
419+
p[0] = self.create_ioport(p[1], p[3], width=p[2], dimensions=p[4], lineno=p.lineno(3))
420+
p.set_lineno(0, p.lineno(1))
421+
418422
def p_ioport_head(self, p):
419423
'ioport_head : sigtypes portname'
420424
p[0] = self.create_ioport(p[1], p[2], lineno=p.lineno(2))
@@ -425,6 +429,11 @@ def p_ioport_head_width(self, p):
425429
p[0] = self.create_ioport(p[1], p[3], width=p[2], lineno=p.lineno(3))
426430
p.set_lineno(0, p.lineno(1))
427431

432+
def p_ioport_head_dimensions(self, p):
433+
'ioport_head : sigtypes width portname dimensions'
434+
p[0] = self.create_ioport(p[1], p[3], width=p[2], dimensions=p[4], lineno=p.lineno(3))
435+
p.set_lineno(0, p.lineno(1))
436+
428437
def p_ioport_portname(self, p):
429438
'ioport : portname'
430439
p[0] = p[1]

0 commit comments

Comments
 (0)