gen/genlib/record: rename leave_out by omit and add keep parameter to Record.connect
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 21 Apr 2016 06:08:47 +0000 (08:08 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 21 Apr 2016 07:39:12 +0000 (09:39 +0200)
litex/gen/genlib/record.py

index 0038b069759c2f19ba1147b28efdfda6380ef4e8..9b4ce3db6e8c954e8b3514522bfe164bf2da21c4 100644 (file)
@@ -131,15 +131,24 @@ class Record:
     def raw_bits(self):
         return Cat(*self.flatten())
 
-    def connect(self, *slaves, leave_out=set()):
-        if isinstance(leave_out, str):
-            leave_out = {leave_out}
+    def connect(self, *slaves, keep=None, omit=None):
+        if keep is None:
+            keep = set([f[0] for f in self.layout])
+        if isinstance(keep, list):
+            keep = set(keep)
+        if omit is None:
+            omit = set()
+        if isinstance(omit, list):
+            omit = set(omit)
+
+        keep = keep - omit
+
         r = []
         for f in self.layout:
             field = f[0]
-            if field not in leave_out:
-                self_e = getattr(self, field)
-                if isinstance(self_e, Signal):
+            self_e = getattr(self, field)
+            if isinstance(self_e, Signal):
+                if field in keep:
                     direction = f[2]
                     if direction == DIR_M_TO_S:
                         r += [getattr(slave, field).eq(self_e) for slave in slaves]
@@ -147,9 +156,9 @@ class Record:
                         r.append(self_e.eq(reduce(or_, [getattr(slave, field) for slave in slaves])))
                     else:
                         raise TypeError
-                else:
-                    for slave in slaves:
-                        r += self_e.connect(getattr(slave, field), leave_out=leave_out)
+            else:
+                for slave in slaves:
+                    r += self_e.connect(getattr(slave, field), keep=keep, omit=omit)
         return r
 
     def connect_flat(self, *slaves):