From 10e6d5846b77906200decc670a31c00ef3ca559e Mon Sep 17 00:00:00 2001 From: David Harris Date: Wed, 19 Jun 2024 09:18:51 -0700 Subject: [PATCH] Removed unnecessary Umfirst from early termination --- src/fpu/fdivsqrt/fdivsqrt.sv | 5 ++--- src/fpu/fdivsqrt/fdivsqrtiter.sv | 2 -- src/fpu/fdivsqrt/fdivsqrtpostproc.sv | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/fpu/fdivsqrt/fdivsqrt.sv b/src/fpu/fdivsqrt/fdivsqrt.sv index 2824c860a..2a43b2d91 100644 --- a/src/fpu/fdivsqrt/fdivsqrt.sv +++ b/src/fpu/fdivsqrt/fdivsqrt.sv @@ -61,7 +61,6 @@ module fdivsqrt import cvw::*; #(parameter cvw_t P) ( logic [P.DIVb+3:0] D; // Iterator Divisor logic [P.DIVb:0] FirstU, FirstUM; // Intermediate result values logic [P.DIVb+1:0] FirstC; // Step tracker - logic Firstun; // Quotient selection logic WZeroE; // Early termination flag logic [P.DURLEN-1:0] CyclesE; // FSM cycles logic SpecialCaseM; // Divide by zero, square root of negative, etc. @@ -89,11 +88,11 @@ module fdivsqrt import cvw::*; #(parameter cvw_t P) ( fdivsqrtiter #(P) fdivsqrtiter( // CSA Iterator .clk, .IFDivStartE, .FDivBusyE, .SqrtE, .X, .D, - .FirstU, .FirstUM, .FirstC, .Firstun, .FirstWS(WS), .FirstWC(WC)); + .FirstU, .FirstUM, .FirstC, .FirstWS(WS), .FirstWC(WC)); fdivsqrtpostproc #(P) fdivsqrtpostproc( // Postprocessor .clk, .reset, .StallM, .WS, .WC, .D, .FirstU, .FirstUM, .FirstC, - .SqrtE, .Firstun, .SqrtM, .SpecialCaseM, + .SqrtE, .SqrtM, .SpecialCaseM, .UmM, .WZeroE, .DivStickyM, // Int-specific .IntNormShiftM, .ALTBM, .AsM, .BsM, .BZeroM, .W64M, .RemOpM(Funct3M[1]), .AM, diff --git a/src/fpu/fdivsqrt/fdivsqrtiter.sv b/src/fpu/fdivsqrt/fdivsqrtiter.sv index dc6b0057a..39de58855 100644 --- a/src/fpu/fdivsqrt/fdivsqrtiter.sv +++ b/src/fpu/fdivsqrt/fdivsqrtiter.sv @@ -35,7 +35,6 @@ module fdivsqrtiter import cvw::*; #(parameter cvw_t P) ( input logic [P.DIVb+3:0] X, D, // Q4.DIVb output logic [P.DIVb:0] FirstU, FirstUM, // U1.DIVb output logic [P.DIVb+1:0] FirstC, // Q2.DIVb - output logic Firstun, output logic [P.DIVb+3:0] FirstWS, FirstWC // Q4.DIVb ); @@ -119,6 +118,5 @@ module fdivsqrtiter import cvw::*; #(parameter cvw_t P) ( assign FirstU = U[0]; assign FirstUM = UM[0]; assign FirstC = C[0]; - assign Firstun = un[0]; endmodule diff --git a/src/fpu/fdivsqrt/fdivsqrtpostproc.sv b/src/fpu/fdivsqrt/fdivsqrtpostproc.sv index 6a2830421..83eee245a 100644 --- a/src/fpu/fdivsqrt/fdivsqrtpostproc.sv +++ b/src/fpu/fdivsqrt/fdivsqrtpostproc.sv @@ -35,7 +35,7 @@ module fdivsqrtpostproc import cvw::*; #(parameter cvw_t P) ( input logic [P.DIVb:0] FirstU, FirstUM, // U1.DIVb input logic [P.DIVb+1:0] FirstC, // Q2.DIVb input logic SqrtE, - input logic Firstun, SqrtM, SpecialCaseM, + input logic SqrtM, SpecialCaseM, input logic [P.XLEN-1:0] AM, // U/Q(XLEN.0) input logic RemOpM, ALTBM, BZeroM, AsM, BsM, W64M, input logic [P.DIVBLEN-1:0] IntNormShiftM, @@ -71,7 +71,7 @@ module fdivsqrtpostproc import cvw::*; #(parameter cvw_t P) ( mux2 #(P.DIVb+4) fzeromux(FZeroDivE, FZeroSqrtE, SqrtE, FZeroE); csa #(P.DIVb+4) fadd(WS, WC, FZeroE, 1'b0, WSF, WCF); // compute {WCF, WSF} = {WS + WC + FZero}; aplusbeq0 #(P.DIVb+4) wcfpluswsfeq0(WCF, WSF, wfeq0E); - assign WZeroE = weq0E|(wfeq0E & Firstun); + assign WZeroE = weq0E | wfeq0E; end else begin assign WZeroE = weq0E; end