Skip to content

Commit e7a4cb4

Browse files
committed
copy and connect methods now support include patterns.
1 parent 6cf6300 commit e7a4cb4

File tree

1 file changed

+86
-15
lines changed

1 file changed

+86
-15
lines changed

veriloggen/core/module.py

Lines changed: 86 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -515,19 +515,29 @@ def __getitem__(self, r):
515515
# raise e
516516

517517
#-------------------------------------------------------------------------
518-
def copy_params(self, src, prefix=None, postfix=None, exclude=None):
518+
def copy_params(self, src, prefix=None, postfix=None, include=None, exclude=None):
519519
if prefix is None:
520520
prefix = ''
521521
if postfix is None:
522522
postfix = ''
523+
if include is None:
524+
include = ()
525+
if isinstance(include, str):
526+
include = [include]
523527
if exclude is None:
524528
exclude = ()
525529
if isinstance(exclude, str):
526530
exclude = [exclude]
527531
visitor = rename_visitor.RenameVisitor(prefix, postfix)
528532
ret = collections.OrderedDict()
529533
for key, obj in src.global_constant.items():
530-
skip = False
534+
if not include:
535+
skip = False
536+
else:
537+
skip = True
538+
for inc in include:
539+
if re.match(inc, key):
540+
skip = False
531541
for ex in exclude:
532542
if re.match(ex, key):
533543
skip = True
@@ -541,19 +551,29 @@ def copy_params(self, src, prefix=None, postfix=None, exclude=None):
541551
ret[copy_obj.name] = copy_obj
542552
return ret
543553

544-
def copy_localparams(self, src, prefix=None, postfix=None, exclude=None):
554+
def copy_localparams(self, src, prefix=None, postfix=None, include=None, exclude=None):
545555
if prefix is None:
546556
prefix = ''
547557
if postfix is None:
548558
postfix = ''
559+
if include is None:
560+
include = ()
561+
if isinstance(include, str):
562+
include = [include]
549563
if exclude is None:
550564
exclude = ()
551565
if isinstance(exclude, str):
552566
exclude = [exclude]
553567
visitor = rename_visitor.RenameVisitor(prefix, postfix)
554568
ret = collections.OrderedDict()
555569
for key, obj in src.constant.items():
556-
skip = False
570+
if not include:
571+
skip = False
572+
else:
573+
skip = True
574+
for inc in include:
575+
if re.match(inc, key):
576+
skip = False
557577
for ex in exclude:
558578
if re.match(ex, key):
559579
skip = True
@@ -567,19 +587,29 @@ def copy_localparams(self, src, prefix=None, postfix=None, exclude=None):
567587
ret[copy_obj.name] = copy_obj
568588
return ret
569589

570-
def copy_ports(self, src, prefix=None, postfix=None, exclude=None):
590+
def copy_ports(self, src, prefix=None, postfix=None, include=None, exclude=None):
571591
if prefix is None:
572592
prefix = ''
573593
if postfix is None:
574594
postfix = ''
595+
if include is None:
596+
include = ()
597+
if isinstance(include, str):
598+
include = [include]
575599
if exclude is None:
576600
exclude = ()
577601
if isinstance(exclude, str):
578602
exclude = [exclude]
579603
visitor = rename_visitor.RenameVisitor(prefix, postfix)
580604
ret = collections.OrderedDict()
581605
for key, obj in src.io_variable.items():
582-
skip = False
606+
if not include:
607+
skip = False
608+
else:
609+
skip = True
610+
for inc in include:
611+
if re.match(inc, key):
612+
skip = False
583613
for ex in exclude:
584614
if re.match(ex, key):
585615
skip = True
@@ -593,19 +623,29 @@ def copy_ports(self, src, prefix=None, postfix=None, exclude=None):
593623
ret[copy_obj.name] = copy_obj
594624
return ret
595625

596-
def copy_vars(self, src, prefix=None, postfix=None, exclude=None):
626+
def copy_vars(self, src, prefix=None, postfix=None, include=None, exclude=None):
597627
if prefix is None:
598628
prefix = ''
599629
if postfix is None:
600630
postfix = ''
631+
if include is None:
632+
include = ()
633+
if isinstance(include, str):
634+
include = [include]
601635
if exclude is None:
602636
exclude = ()
603637
if isinstance(exclude, str):
604638
exclude = [exclude]
605639
visitor = rename_visitor.RenameVisitor(prefix, postfix)
606640
ret = collections.OrderedDict()
607641
for key, obj in src.variable.items():
608-
skip = False
642+
if not include:
643+
skip = False
644+
else:
645+
skip = True
646+
for inc in include:
647+
if re.match(inc, key):
648+
skip = False
609649
for ex in exclude:
610650
if re.match(ex, key):
611651
skip = True
@@ -619,25 +659,36 @@ def copy_vars(self, src, prefix=None, postfix=None, exclude=None):
619659
ret[copy_obj.name] = copy_obj
620660
return ret
621661

622-
def copy_sim_ports(self, src, prefix=None, postfix=None, exclude=None):
662+
def copy_sim_ports(self, src, prefix=None, postfix=None, include=None, exclude=None,
663+
use_wire=False):
623664
if prefix is None:
624665
prefix = ''
625666
if postfix is None:
626667
postfix = ''
668+
if include is None:
669+
include = ()
670+
if isinstance(include, str):
671+
include = [include]
627672
if exclude is None:
628673
exclude = ()
629674
if isinstance(exclude, str):
630675
exclude = [exclude]
631676
visitor = rename_visitor.RenameVisitor(prefix, postfix)
632677
ret = collections.OrderedDict()
633678
for key, obj in src.io_variable.items():
634-
skip = False
679+
if not include:
680+
skip = False
681+
else:
682+
skip = True
683+
for inc in include:
684+
if re.match(inc, key):
685+
skip = False
635686
for ex in exclude:
636687
if re.match(ex, key):
637688
skip = True
638689
if skip:
639690
continue
640-
copy_obj = self.get_opposite_variable(obj)(
691+
copy_obj = self.get_opposite_variable(obj, use_wire)(
641692
name=key, width=copy.deepcopy(obj.width))
642693
copy_obj.name = ''.join([prefix, copy_obj.name, postfix])
643694
copy_obj.width = visitor.visit(copy_obj.width)
@@ -647,18 +698,28 @@ def copy_sim_ports(self, src, prefix=None, postfix=None, exclude=None):
647698
return ret
648699

649700
#-------------------------------------------------------------------------
650-
def connect_params(self, targ, prefix=None, postfix=None, exclude=None, strict=False):
701+
def connect_params(self, targ, prefix=None, postfix=None, include=None, exclude=None, strict=False):
651702
if prefix is None:
652703
prefix = ''
653704
if postfix is None:
654705
postfix = ''
706+
if include is None:
707+
include = ()
708+
if isinstance(include, str):
709+
include = [include]
655710
if exclude is None:
656711
exclude = ()
657712
if isinstance(exclude, str):
658713
exclude = [exclude]
659714
ret = []
660715
for key, obj in targ.global_constant.items():
661-
skip = False
716+
if not include:
717+
skip = False
718+
else:
719+
skip = True
720+
for inc in include:
721+
if re.match(inc, key):
722+
skip = False
662723
for ex in exclude:
663724
if re.match(ex, key):
664725
skip = True
@@ -674,18 +735,28 @@ def connect_params(self, targ, prefix=None, postfix=None, exclude=None, strict=F
674735
ret.append((key, self.local_constant[my_key]))
675736
return ret
676737

677-
def connect_ports(self, targ, prefix=None, postfix=None, exclude=None, strict=False):
738+
def connect_ports(self, targ, prefix=None, postfix=None, include=None, exclude=None, strict=False):
678739
if prefix is None:
679740
prefix = ''
680741
if postfix is None:
681742
postfix = ''
743+
if include is None:
744+
include = ()
745+
if isinstance(include, str):
746+
include = [include]
682747
if exclude is None:
683748
exclude = ()
684749
if isinstance(exclude, str):
685750
exclude = [exclude]
686751
ret = []
687752
for key, obj in targ.io_variable.items():
688-
skip = False
753+
if not include:
754+
skip = False
755+
else:
756+
skip = True
757+
for inc in include:
758+
if re.match(inc, key):
759+
skip = False
689760
for ex in exclude:
690761
if re.match(ex, key):
691762
skip = True

0 commit comments

Comments
 (0)