Skip to content

Commit dd331d3

Browse files
authored
Merge pull request #51 from leonardt/add-nd-arrays
Extend parser for n-d array support
2 parents 3fbde9b + a832763 commit dd331d3

File tree

15 files changed

+84
-117
lines changed

15 files changed

+84
-117
lines changed

pyverilog/ast_code_generator/codegen.py

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ def visit_Variable(self, node):
258258
'name': escape(node.name),
259259
'width': '' if node.width is None else self.visit(node.width),
260260
'signed': node.signed,
261+
'dimensions': '' if node.dimensions is None else self.visit(node.dimensions),
261262
}
262263
rslt = template.render(template_dict)
263264
return rslt
@@ -269,6 +270,7 @@ def visit_Input(self, node):
269270
'name': escape(node.name),
270271
'width': '' if node.width is None else self.visit(node.width),
271272
'signed': node.signed,
273+
'dimensions': '' if node.dimensions is None else self.visit(node.dimensions),
272274
}
273275
rslt = template.render(template_dict)
274276
return rslt
@@ -280,6 +282,7 @@ def visit_Output(self, node):
280282
'name': escape(node.name),
281283
'width': '' if node.width is None else self.visit(node.width),
282284
'signed': node.signed,
285+
'dimensions': '' if node.dimensions is None else self.visit(node.dimensions),
283286
}
284287
rslt = template.render(template_dict)
285288
return rslt
@@ -291,6 +294,7 @@ def visit_Inout(self, node):
291294
'name': escape(node.name),
292295
'width': '' if node.width is None else self.visit(node.width),
293296
'signed': node.signed,
297+
'dimensions': '' if node.dimensions is None else self.visit(node.dimensions),
294298
}
295299
rslt = template.render(template_dict)
296300
return rslt
@@ -302,6 +306,7 @@ def visit_Tri(self, node):
302306
'name': escape(node.name),
303307
'width': '' if node.width is None else self.visit(node.width),
304308
'signed': node.signed,
309+
'dimensions': '' if node.dimensions is None else self.visit(node.dimensions),
305310
}
306311
rslt = template.render(template_dict)
307312
return rslt
@@ -313,6 +318,7 @@ def visit_Wire(self, node):
313318
'name': escape(node.name),
314319
'width': '' if node.width is None else self.visit(node.width),
315320
'signed': node.signed,
321+
'dimensions': '' if node.dimensions is None else self.visit(node.dimensions),
316322
}
317323
rslt = template.render(template_dict)
318324
return rslt
@@ -324,30 +330,7 @@ def visit_Reg(self, node):
324330
'name': escape(node.name),
325331
'width': '' if node.width is None else self.visit(node.width),
326332
'signed': node.signed,
327-
}
328-
rslt = template.render(template_dict)
329-
return rslt
330-
331-
def visit_WireArray(self, node):
332-
filename = getfilename(node)
333-
template = self.get_template(filename)
334-
template_dict = {
335-
'name': escape(node.name),
336-
'width': '' if node.width is None else self.visit(node.width),
337-
'length': self.visit(node.length),
338-
'signed': node.signed,
339-
}
340-
rslt = template.render(template_dict)
341-
return rslt
342-
343-
def visit_RegArray(self, node):
344-
filename = getfilename(node)
345-
template = self.get_template(filename)
346-
template_dict = {
347-
'name': escape(node.name),
348-
'width': '' if node.width is None else self.visit(node.width),
349-
'length': self.visit(node.length),
350-
'signed': node.signed,
333+
'dimensions': '' if node.dimensions is None else self.visit(node.dimensions),
351334
}
352335
rslt = template.render(template_dict)
353336
return rslt
@@ -388,7 +371,8 @@ def visit_Ioport(self, node):
388371
'second': '' if node.second is None else node.second.__class__.__name__.lower(),
389372
'name': escape(node.first.name),
390373
'width': '' if node.first.width is None else self.visit(node.first.width),
391-
'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)
392376
}
393377
rslt = template.render(template_dict)
394378
return rslt

pyverilog/ast_code_generator/list_ast.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Portlist
66
Port
77
Width
88
Length
9+
Dimensions
910
Identifier
1011
Value
1112
Constant
@@ -19,8 +20,6 @@ Inout
1920
Tri
2021
Wire
2122
Reg
22-
WireArray
23-
RegArray
2423
Integer
2524
Real
2625
Genvar
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
inout {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }};
1+
inout {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
input {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }};
1+
input {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
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 %}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
output {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }};
1+
output {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
reg {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }};
1+
reg {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};

pyverilog/ast_code_generator/template/regarray.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
tri {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }};
1+
tri {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
variable {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }};
1+
variable {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};

0 commit comments

Comments
 (0)