Also copy the module in PartotionSignal.like()
[ieee754fpu.git] / src / ieee754 / part / partsig.py
index 3d3cd675dae4ea82248cdc4261d6a9cc030ad6ae..24fd80d4cb7985588a134a8789a1b2add2d480dd 100644 (file)
@@ -60,10 +60,21 @@ class PartitionedSignal:
     def eq(self, val):
         return self.sig.eq(getsig(val))
 
+    @staticmethod
+    def like(other, *args, **kwargs):
+        """Builds a new PartitionedSignal with the same PartitionPoints and
+        Signal properties as the other"""
+        result = PartitionedSignal(other.partpoints)
+        result.sig = Signal.like(other.sig, *args, **kwargs)
+        result.m = other.m
+        return result
+
     # unary ops that do not require partitioning
 
     def __invert__(self):
-        return ~self.sig
+        result = PartitionedSignal.like(self)
+        self.m.d.comb += result.sig.eq(~self.sig)
+        return result
 
     # unary ops that require partitioning
 
@@ -320,4 +331,4 @@ class PartitionedSignal:
             ``1`` otherwise.
         """
         # amazingly, this should actually work.
-        return ~premise | conclusion
+        return conclusion | ~premise