Started to translate special cases
authorAleksandar Kostovic <alexandar.kostovic@gmail.com>
Sun, 17 Feb 2019 15:00:29 +0000 (16:00 +0100)
committerAleksandar Kostovic <alexandar.kostovic@gmail.com>
Sun, 17 Feb 2019 15:00:29 +0000 (16:00 +0100)
src/add/fmul.py

index d41d974b077c992653380d8d608d62d855beea16..373f79762425b50b463764a0ea1dd2c50ab9fae2 100644 (file)
@@ -57,55 +57,30 @@ class FPMUL(FPBase):
                        b.e.eq(b[23:31] - 127),
                        a.s.eq(a[31]),
                        b.s.eq(b[31])
-
+                       ]
+               
+               with m.State("special_cases"):
+                       m.next = "normalise_a"
+                       with m.If(a.is_nan() | b.is_nan()):
+                               m.next += "put_z"
+                               m.d.sync += [
+                               z[31].eq(1),
+                               z[23:31].eq(255),
+                               z[22].eq(1),
+                               z[0:22].eq(0)
                        ]
-                       
+                       with m.Elif(a.e.is_inf()):
+                               m.next += "put_z"
+                               m.d.sync += [
+                               z[31].eq(a.s ^ b.s),
+                               z[23:31].eq(255),
+                               z[0:22].eq(0)
+                               ]
 """
-always @(posedge clk)
-  begin
-
-    case(state)
-
-      get_a:
-      begin
-        s_input_a_ack <= 1;
-        if (s_input_a_ack && input_a_stb) begin
-          a <= input_a;
-          s_input_a_ack <= 0;
-          state <= get_b;
-        end
-      end
-
-      get_b:
-      begin
-        s_input_b_ack <= 1;
-        if (s_input_b_ack && input_b_stb) begin
-          b <= input_b;
-          s_input_b_ack <= 0;
-          state <= unpack;
-        end
-      end
-
-      unpack:
-      begin
-        a_m <= a[22 : 0];
-        b_m <= b[22 : 0];
-        a_e <= a[30 : 23] - 127;
-        b_e <= b[30 : 23] - 127;
-        a_s <= a[31];
-        b_s <= b[31];
-        state <= special_cases;
-      end
 
       special_cases:
       begin
-        //if a is NaN or b is NaN return NaN 
-        if ((a_e == 128 && a_m != 0) || (b_e == 128 && b_m != 0)) begin
-          z[31] <= 1;
-          z[30:23] <= 255;
-          z[22] <= 1;
-          z[21:0] <= 0;
-          state <= put_z;
+
         //if a is inf return inf
         end else if (a_e == 128) begin
           z[31] <= a_s ^ b_s;