84
84
(r'--.*\n' , None ),
85
85
],
86
86
'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' ),
88
90
(r'/\*' , 'block_comment' , 'block_comment' ),
89
91
(r'--.*\n' , None ),
90
92
],
@@ -290,6 +292,30 @@ def __init__(self, name, package, parameters, desc=None):
290
292
def __repr__ (self ):
291
293
return "VhdlProcedure('{}')" .format (self .name )
292
294
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 )))
293
319
294
320
class VhdlComponent (VhdlObject ):
295
321
'''Component declaration
@@ -423,6 +449,15 @@ def parse_vhdl(text):
423
449
kind = None
424
450
name = None
425
451
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
+
426
461
elif action == 'component' :
427
462
kind = 'component'
428
463
name = groups [0 ]
@@ -443,6 +478,9 @@ def parse_vhdl(text):
443
478
param_items = []
444
479
last_item = generics [- 1 ]
445
480
481
+ elif action == 'generic_param_default' :
482
+ last_item .default_value = groups [0 ]
483
+
446
484
elif action == 'port_param' :
447
485
param_items .append (groups [0 ])
448
486
port_param_index += 1
@@ -456,6 +494,9 @@ def parse_vhdl(text):
456
494
param_items = []
457
495
last_item = ports [- 1 ]
458
496
497
+ elif action == 'port_param_default' :
498
+ last_item .default_value = groups [0 ]
499
+
459
500
elif action == 'port_array_param_type' :
460
501
mode , ptype = groups
461
502
array_range_start_pos = pos [1 ]
@@ -469,6 +510,12 @@ def parse_vhdl(text):
469
510
param_items = []
470
511
last_item = ports [- 1 ]
471
512
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
+
472
519
elif action == 'end_component' :
473
520
vobj = VhdlComponent (name , cur_package , ports , generics , dict (sections ), metacomments )
474
521
objects .append (vobj )
0 commit comments