add id to pack and putz
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Tue, 5 Mar 2019 02:36:50 +0000 (02:36 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Tue, 5 Mar 2019 02:36:50 +0000 (02:36 +0000)
src/add/nmigen_add_experiment.py

index 73a35bc7a16194615ca50ceff93143c3ea4515ca..b7d58ddf68ff9c7e276aaa7c0131ec20f3886808 100644 (file)
@@ -943,16 +943,20 @@ class FPPack(FPState, FPID):
 
 class FPPutZ(FPState):
 
-    def __init__(self, state, in_z, out_z):
+    def __init__(self, state, in_z, out_z, in_mid, out_mid):
         FPState.__init__(self, state)
         self.in_z = in_z
         self.out_z = out_z
+        self.in_mid = in_mid
+        self.out_mid = out_mid
 
     def action(self, m):
         m.d.sync += [
           self.out_z.v.eq(self.in_z.v)
         ]
         with m.If(self.out_z.stb & self.out_z.ack):
+            if self.in_mid:
+                m.d.sync += self.out_mid.eq(self.in_mid)
             m.d.sync += self.out_z.stb.eq(0)
             m.next = "get_a"
         with m.Else():
@@ -1031,9 +1035,11 @@ class FPADD(FPID):
         pa = self.add_state(FPPack(self.width, self.id_wid))
         pa.setup(m, cor.out_z, rn.in_mid)
 
-        ppz = self.add_state(FPPutZ("pack_put_z", pa.out_z, self.out_z))
+        ppz = self.add_state(FPPutZ("pack_put_z", pa.out_z, self.out_z,
+                                    pa.in_mid, self.out_mid))
 
-        pz = self.add_state(FPPutZ("put_z", sc.out_z, self.out_z))
+        pz = self.add_state(FPPutZ("put_z", sc.out_z, self.out_z,
+                                    pa.in_mid, self.out_mid))
 
         with m.FSM() as fsm: