Bladeren bron

Fixed cascade adder

Min 4 jaren geleden
bovenliggende
commit
a4a822bad5
3 gewijzigde bestanden met toevoegingen van 58 en 21 verwijderingen
  1. 6 3
      scripts/fpu_test_gen.py
  2. 42 0
      simulation/modelsim/wave_adder_casc_tb.do
  3. 10 18
      src/neural/comp.sv

+ 6 - 3
scripts/fpu_test_gen.py

@@ -10,13 +10,16 @@ def reverse_endian(data):
     return bytes(result)
 
 
-def generate_numbers(cases, dtype=np.float16):
+def dtype_size(dtype):
     if dtype == np.float16:
-        dsize = 2
+        return 2
     elif dtype == np.float32:
-        dsize = 4
+        return 4
     else:
         raise ValueError(f"Unknown dtype {dtype}")
+
+def generate_numbers(cases, dtype=np.float16):
+    dsize = dtype_size(dtype)
     x = np.frombuffer(os.urandom(cases * dsize), dtype=dtype)
     y = np.frombuffer(os.urandom(cases * dsize), dtype=dtype)
     return x, y, dsize

File diff suppressed because it is too large
+ 42 - 0
simulation/modelsim/wave_adder_casc_tb.do


+ 10 - 18
src/neural/comp.sv

@@ -20,8 +20,8 @@ module cadder#(parameter N=32)(clk, rst, x, x_ack, x_stb, y, y_ack, y_stb);
     output y_stb;
 
     wire left_ack, left_stb;
-    assign x_ack[0] = left_ack;
-    assign x_ack[1] = left_ack;
+    assign x_ack[0] = left_stb & left_ack;
+    assign x_ack[1] = left_stb & left_ack;
     assign left_stb = x_stb[0] & x_stb[1];
 
     adder add0 (
@@ -134,7 +134,7 @@ endmodule : adder_casc
 module adder_casc_tb();
     logic clk, rst;
     
-    localparam K=4;
+    localparam K=2;
     logic [31:0] x [2**K-1:0];
     logic [31:0] y;
     logic ack [2**K-1:0];
@@ -162,23 +162,15 @@ module adder_casc_tb();
         
         foreach(stb[i]) stb[i] = 0;
         output_io.ack = 0;
-        #20
-        rst = 0;
         // Initialise with floating point 2**i
-        foreach(x[i]) x[i] = ('h400 + (i*8)) << 20;
-        foreach(stb[i]) stb[i] = 1;
+        // foreach(x[i]) x[i] = ('h400 + (i*8)) << 20;
+        x = {'h41ea6000, 'h42ea6000, 'h411ba000, 'h413cc000};
 
-        fork
-            foreach(ack[i]) begin
-                fork
-                    wait(ack[i] == 1);
-                    #20
-                    stb[i] = 0;
-                join
-            end
-        join
-        #20
-        
+        #10;
+        rst = 0;
+        foreach(stb[i]) stb[i] = 1;
+        #20;
+        foreach(stb[i]) stb[i] = 0;
         wait(output_io.stb == 1);
         output_io.ack = 1;
         assert(y[0] == 'h47ffff00);