Преглед изворни кода

IEE floating point issues WIP

Min пре 4 година
родитељ
комит
00f881c935
2 измењених фајлова са 10 додато и 8 уклоњено
  1. 7 7
      src/fpu32/adder.v
  2. 3 1
      src/fpu32/fpu32.sv

+ 7 - 7
src/fpu32/adder.v

@@ -105,19 +105,19 @@ module adder(
       special_cases:
       begin
         //if a is NaN return a
-        if (a_e == 8'hff && a_m != 0) begin
-          z <= {a_s, a_e, a[22:0]};
+        if (a_e == 128 && a_m != 0) begin
+          z <= {a_s, 8'hff, a[22], a[21:0]};
           state <= put_z;
-        end else if (b_e == 8'hff && b_m != 0) begin
-          z <= {b_s, b_e, b[22:0]};
+        end else if (b_e == 128 && b_m != 0) begin
+          z <= {b_s, 8'hff, b[22:0]};
           state <= put_z;
         //if a is inf return inf
-        end else if (a_e == 8'hff) begin
+        end else if (a_e == 128 && a_m == 0) begin
           z[31] <= a_s;
           z[30:23] <= 255;
           z[22:0] <= 0;
           //if a is inf and signs don't match return nan
-          if ((b_e == 8'hff) && (a_s != b_s)) begin
+          if ((b_e == 128) && (a_s != b_s)) begin
               z[31] <= b_s;
               z[30:23] <= 255;
               z[22] <= 1;
@@ -125,7 +125,7 @@ module adder(
           end
           state <= put_z;
         //if b is inf return inf
-        end else if (b_e == 8'hff) begin
+        end else if (b_e == 128 && b_m == 0) begin
           z[31] <= b_s;
           z[30:23] <= 255;
           z[22:0] <= 0;

+ 3 - 1
src/fpu32/fpu32.sv

@@ -66,6 +66,8 @@ module fpu32_tb();
         for (int i=0; i < $size(test_mem); i++) begin
             input_a = test_mem[i][0];
             input_b = test_mem[i][1];
+//            input_a = 'h7faf0d48;
+//            input_b = 'h077dc1bc;
             adder_input_stb = 1;
             mult_input_stb = 1;
 
@@ -86,7 +88,7 @@ module fpu32_tb();
 
             if(result_mult != test_mem[i][3]) begin
                 if(num_err < 20)
-                    $display("FAIL ADD: %H * %H = %H, expected %H", input_a, input_b, result_add, test_mem[i][3]);
+                    $display("FAIL MUL: %H * %H = %H, expected %H", input_a, input_b, result_add, test_mem[i][3]);
                 num_err = num_err + 1;
             end