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
294320class 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