add use of PartitionedAssign in PartitionedSignal, behind __Assign__
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 29 Sep 2021 18:35:23 +0000 (19:35 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 29 Sep 2021 18:35:23 +0000 (19:35 +0100)
move to separate module due to recursive import issues

src/ieee754/part/partsig.py
src/ieee754/part_ass/assign.py
src/ieee754/part_ass/passign.py [new file with mode: 0644]
src/ieee754/part_cat/cat.py

index d3518984327dfc535a4168c1626e51ff3d1e76e4..032749cf45b0b39256b02d703f2b6a7a1b52c324 100644 (file)
@@ -23,6 +23,7 @@ from ieee754.part_shift.part_shift_dynamic import PartitionedDynamicShift
 from ieee754.part_shift.part_shift_scalar import PartitionedScalarShift
 from ieee754.part_mul_add.partpoints import make_partition2, PartitionPoints
 from ieee754.part_mux.part_mux import PMux
+from ieee754.part_ass.passign import PAssign
 from ieee754.part_cat.pcat import PCat
 from operator import or_, xor, and_, not_
 
@@ -99,6 +100,10 @@ class PartitionedSignal(UserValue):
             "val1 == %d, val2 == %d" % (len(val1), len(val2))
         return PMux(self.m, self.partpoints, self, val1, val2)
 
+    def __Assign__(self, val):
+        # print ("partsig ass", self, val)
+        return PAssign(self.m, self.shape(), val, self.partpoints)
+
     def __Cat__(self, *args, src_loc_at=0):
         args = [self] + list(args)
         for sig in args:
index 1bc87c7451d6f4f5e9340500988e30e3cc1f9e22..d6fdc6cebb0a9eb2cafdbc8c858f5e8e07dcdee7 100644 (file)
@@ -22,15 +22,6 @@ from ieee754.part_mul_add.partpoints import PartitionPoints
 from ieee754.part.partsig import PartitionedSignal
 
 
-modcount = 0 # global for now
-def PAssign(m, arglist, mask):
-    global modcount
-    modcount += 1
-    pc = PartitionedAssign(arglist, mask)
-    setattr(m.submodules, "pass%d" % modcount, pc)
-    return pc.output
-
-
 def get_runlengths(pbit, size):
     res = []
     count = 1
diff --git a/src/ieee754/part_ass/passign.py b/src/ieee754/part_ass/passign.py
new file mode 100644 (file)
index 0000000..00de739
--- /dev/null
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+# See Notices.txt for copyright information
+
+"""
+Copyright (C) 2021 Luke Kenneth Casson Leighton <lkcl@lkcl.net>
+
+dynamically-partitionable "assign" class, directly equivalent
+to nmigen Assign
+
+See:
+
+* http://libre-riscv.org/3d_gpu/architecture/dynamic_simd/assign
+* http://bugs.libre-riscv.org/show_bug.cgi?id=709
+
+"""
+
+
+
+modcount = 0 # global for now
+def PAssign(m, shape, assign, mask):
+    from ieee754.part_ass.assign import PartitionedAssign # recursion issue
+    global modcount
+    modcount += 1
+    pc = PartitionedAssign(shape, assign, mask)
+    setattr(m.submodules, "pass%d" % modcount, pc)
+    return pc.output
+
+
index 6fdfb66b1b1c32f8700c2511f978862d85f34d6f..27abb19abc644b467bb060e5234adb43b68da18d 100644 (file)
@@ -38,15 +38,6 @@ from ieee754.part.partsig import PartitionedSignal
 from ieee754.part.test.test_partsig import create_simulator
 
 
-modcount = 0 # global for now
-def PCat(m, arglist, mask):
-    global modcount
-    modcount += 1
-    pc = PartitionedCat(arglist, mask)
-    setattr(m.submodules, "pcat%d" % modcount, pc)
-    return pc.output
-
-
 def get_runlengths(pbit, size):
     res = []
     count = 1