move FPPipeContext to concurrentunit: rename to PipeContext
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 15 Jul 2020 13:41:35 +0000 (14:41 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 15 Jul 2020 13:41:35 +0000 (14:41 +0100)
see https://bugs.libre-soc.org/show_bug.cgi?id=431

src/nmutil/concurrentunit.py

index 05dd2a6f20d20b58f3a32315cea54dd2a9cc04e7..7e896466ed1a6addfdfe453d1f58a887b8632677 100644 (file)
@@ -20,6 +20,29 @@ from nmutil.multipipe import PriorityCombMuxInPipe
 def num_bits(n):
     return int(log(n) / log(2))
 
+class PipeContext:
+
+    def __init__(self, pspec):
+        """ creates a pipeline context.  currently: operator (op) and muxid
+
+            opkls (within pspec) - the class to create that will be the
+                                   "operator". instance must have an "eq"
+                                   function.
+        """
+        self.id_wid = pspec.id_wid
+        self.op_wid = pspec.op_wid
+        self.muxid = Signal(self.id_wid, reset_less=True)   # RS multiplex ID
+        opkls = pspec.opkls
+        if opkls is None:
+            self.op = Signal(self.op_wid, reset_less=True)
+        else:
+            self.op = opkls(pspec)
+
+    def eq(self, i):
+        ret = [self.muxid.eq(i.muxid)]
+        ret.append(self.op.eq(i.op))
+        return ret
+
 
 class InMuxPipe(PriorityCombMuxInPipe):
     def __init__(self, num_rows, iospecfn, maskwid=0):