Skip to content

Commit 488464b

Browse files
Merge pull request #4 from andresmanelli/entity
Add entity parsing
2 parents be7cdab + 21b54a6 commit 488464b

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

hdlparse/vhdl_parser.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@
8484
(r'--.*\n', None),
8585
],
8686
'entity': [
87-
(r'end\s+entity\s*;', 'end_entity', '#pop'),
87+
(r'generic\s*\(', None, 'generic_list'),
88+
(r'port\s*\(', None, 'port_list'),
89+
(r'end\s+\w+\s*;', 'end_entity', '#pop'),
8890
(r'/\*', 'block_comment', 'block_comment'),
8991
(r'--.*\n', None),
9092
],
@@ -290,6 +292,30 @@ def __init__(self, name, package, parameters, desc=None):
290292
def __repr__(self):
291293
return "VhdlProcedure('{}')".format(self.name)
292294

295+
class VhdlEntity(VhdlObject):
296+
'''Entity declaration
297+
298+
Args:
299+
name (str): Name of the entity
300+
ports (list of VhdlParameter): Port parameters to the entity
301+
generics (list of VhdlParameter): Generic parameters to the entity
302+
sections (list of str): Metacomment sections
303+
desc (str, optional): Description from object metacomments
304+
'''
305+
def __init__(self, name, ports, generics=None, sections=None, desc=None):
306+
VhdlObject.__init__(self, name, desc)
307+
self.kind = 'entity'
308+
self.generics = generics if generics is not None else []
309+
self.ports = ports
310+
self.sections = sections if sections is not None else {}
311+
312+
def __repr__(self):
313+
return "VhdlEntity('{}')".format(self.name)
314+
315+
def dump(self):
316+
print('VHDL entity: {}'.format(self.name))
317+
for p in self.ports:
318+
print('\t{} ({}), {} ({})'.format(p.name, type(p.name), p.data_type, type(p.data_type)))
293319

294320
class VhdlComponent(VhdlObject):
295321
'''Component declaration
@@ -423,6 +449,15 @@ def parse_vhdl(text):
423449
kind = None
424450
name = None
425451

452+
elif action == 'entity':
453+
kind = 'entity'
454+
name = groups[0]
455+
generics = []
456+
ports = []
457+
param_items = []
458+
sections = []
459+
port_param_index = 0
460+
426461
elif action == 'component':
427462
kind = 'component'
428463
name = groups[0]
@@ -443,6 +478,9 @@ def parse_vhdl(text):
443478
param_items = []
444479
last_item = generics[-1]
445480

481+
elif action == 'generic_param_default':
482+
last_item.default_value = groups[0]
483+
446484
elif action == 'port_param':
447485
param_items.append(groups[0])
448486
port_param_index += 1
@@ -456,6 +494,9 @@ def parse_vhdl(text):
456494
param_items = []
457495
last_item = ports[-1]
458496

497+
elif action == 'port_param_default':
498+
last_item.default_value = groups[0]
499+
459500
elif action == 'port_array_param_type':
460501
mode, ptype = groups
461502
array_range_start_pos = pos[1]
@@ -469,6 +510,12 @@ def parse_vhdl(text):
469510
param_items = []
470511
last_item = ports[-1]
471512

513+
elif action == 'end_entity':
514+
vobj = VhdlEntity(name, ports, generics, dict(sections), metacomments)
515+
objects.append(vobj)
516+
last_item = None
517+
metacomments = []
518+
472519
elif action == 'end_component':
473520
vobj = VhdlComponent(name, cur_package, ports, generics, dict(sections), metacomments)
474521
objects.append(vobj)

0 commit comments

Comments
 (0)