diff --git a/wally-pipelined/src/fpu/fma.sv b/wally-pipelined/src/fpu/fma.sv index 5dcfe883d..1f196a315 100644 --- a/wally-pipelined/src/fpu/fma.sv +++ b/wally-pipelined/src/fpu/fma.sv @@ -381,15 +381,10 @@ module posloa( // Apply function to determine Leading pattern - logic [3*`NF+6:0] pf; - assign pf = T^{Z[3*`NF+5:0], 1'b0}; + logic [3*`NF+6:0] f; + assign f = T^{Z[3*`NF+5:0], 1'b0}; - logic [8:0] i; - always_comb begin - i = 0; - while (~pf[3*`NF+6-i] && $unsigned(i) <= $unsigned(9'd3*9'd`NF+9'd6)) i = i+1; // search for leading one - PCnt = i; - end + lzc lzc(.f, .Cnt(PCnt)); endmodule @@ -410,17 +405,23 @@ module negloa( logic [3*`NF+6:0] f; assign f = T^{~Z, 1'b0}; - logic [8:0] i; - always_comb begin - i = 0; - while (~f[3*`NF+6-i] && $unsigned(i) <= $unsigned(9'd3*9'd`NF+9'd6)) i = i+1; // search for leading one - NCnt = i; - end + lzc lzc(.f, .Cnt(NCnt)); endmodule - +module lzc( + input logic [3*`NF+6:0] f, + output logic [8:0] Cnt // normalization shift count for the negitive result +); + + logic [8:0] i; + always_comb begin + i = 0; + while (~f[3*`NF+6-i] && $unsigned(i) <= $unsigned(9'd3*9'd`NF+9'd6)) i = i+1; // search for leading one + Cnt = i; + end +endmodule diff --git a/wally-pipelined/testbench/tests.vh b/wally-pipelined/testbench/tests.vh index ac1136265..a82e22830 100644 --- a/wally-pipelined/testbench/tests.vh +++ b/wally-pipelined/testbench/tests.vh @@ -85,10 +85,10 @@ string imperas32f[] = '{ "rv64f/I-FSW-01", "2000", "rv64f/I-FCLASS-S-01", "2000", "rv64f/I-FADD-S-01", "2000", -// "rv64f/I-FCVT-S-L-01", "2000", -// "rv64f/I-FCVT-S-LU-01", "2000", -// "rv64f/I-FCVT-S-W-01", "2000", -// "rv64f/I-FCVT-S-WU-01", "2000", + "rv64f/I-FCVT-S-L-01", "2000", + "rv64f/I-FCVT-S-LU-01", "2000", + "rv64f/I-FCVT-S-W-01", "2000", + "rv64f/I-FCVT-S-WU-01", "2000", "rv64f/I-FCVT-L-S-01", "2000", "rv64f/I-FCVT-LU-S-01", "2000", "rv64f/I-FCVT-W-S-01", "2000", @@ -135,11 +135,11 @@ string imperas32f[] = '{ "rv64d/I-FSGNJX-D-01", "2000", "rv64d/I-FSQRT-D-01", "2000", "rv64d/I-FSUB-D-01", "2000", -// "rv64d/I-FCVT-D-L-01", "2000", -// "rv64d/I-FCVT-D-LU-01", "2000", + "rv64d/I-FCVT-D-L-01", "2000", + "rv64d/I-FCVT-D-LU-01", "2000", "rv64d/I-FCVT-D-S-01", "2000", -// "rv64d/I-FCVT-D-W-01", "2000", -// "rv64d/I-FCVT-D-WU-01", "2000", + "rv64d/I-FCVT-D-W-01", "2000", + "rv64d/I-FCVT-D-WU-01", "2000", "rv64d/I-FCVT-L-D-01", "2000", "rv64d/I-FCVT-LU-D-01", "2000", "rv64d/I-FCVT-S-D-01", "2000",