| // Copyright 2018 ETH Zurich and University of Bologna. |
| // Copyright and related rights are licensed under the Solderpad Hardware |
| // License, Version 0.51 (the “License”); you may not use this file except in |
| // compliance with the License. You may obtain a copy of the License at |
| // http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law |
| // or agreed to in writing, software, hardware and materials distributed under |
| // this License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR |
| // CONDITIONS OF ANY KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations under the License. |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Company: IIS @ ETHZ - Federal Institute of Technology // |
| // // |
| // Engineers: Lei Li lile@iis.ee.ethz.ch // |
| // // |
| // Additional contributions by: // |
| // // |
| // // |
| // // |
| // Create Date: 04/03/2018 // |
| // Design Name: FPU // |
| // Module Name: control_mvp.sv // |
| // Project Name: Private FPU // |
| // Language: SystemVerilog // |
| // // |
| // Description: the control logic of div and sqrt // |
| // // |
| // Revision Date: 12/04/2018 // |
| // Lei Li // |
| // To address some requirements by Stefan and add low power // |
| // control for special cases // |
| // Revision Date: 13/04/2018 // |
| // Lei Li // |
| // To fix some bug found in Control FSM // |
| // when Iteration_unit_num_S = 2'b10 // |
| // // |
| // // |
| // // |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| import defs_div_sqrt_mvp::*; |
| |
| module control_mvp |
| |
| (//Input |
| input logic Clk_CI, |
| input logic Rst_RBI, |
| input logic Div_start_SI , |
| input logic Sqrt_start_SI, |
| input logic Start_SI, |
| input logic Kill_SI, |
| input logic Special_case_SBI, |
| input logic Special_case_dly_SBI, |
| input logic [C_PC-1:0] Precision_ctl_SI, |
| input logic [1:0] Format_sel_SI, |
| input logic [C_MANT_FP64:0] Numerator_DI, |
| input logic [C_EXP_FP64:0] Exp_num_DI, |
| input logic [C_MANT_FP64:0] Denominator_DI, |
| input logic [C_EXP_FP64:0] Exp_den_DI, |
| |
| |
| output logic Div_start_dly_SO , |
| output logic Sqrt_start_dly_SO, |
| output logic Div_enable_SO, |
| output logic Sqrt_enable_SO, |
| |
| |
| //To next stage |
| output logic Full_precision_SO, |
| output logic FP32_SO, |
| output logic FP64_SO, |
| output logic FP16_SO, |
| output logic FP16ALT_SO, |
| |
| output logic Ready_SO, |
| output logic Done_SO, |
| |
| output logic [C_MANT_FP64+4:0] Mant_result_prenorm_DO, |
| // output logic [3:0] Round_bit_DO, |
| output logic [C_EXP_FP64+1:0] Exp_result_prenorm_DO |
| ); |
| |
| logic [C_MANT_FP64+1+4:0] Partial_remainder_DN,Partial_remainder_DP; //58bits,r=q+2 |
| logic [C_MANT_FP64+4:0] Quotient_DP; //57bits |
| ///////////////////////////////////////////////////////////////////////////// |
| // Assign Inputs // |
| ///////////////////////////////////////////////////////////////////////////// |
| logic [C_MANT_FP64+1:0] Numerator_se_D; //sign extension and hidden bit |
| logic [C_MANT_FP64+1:0] Denominator_se_D; //signa extension and hidden bit |
| logic [C_MANT_FP64+1:0] Denominator_se_DB; //1's complement |
| |
| assign Numerator_se_D={1'b0,Numerator_DI}; |
| |
| assign Denominator_se_D={1'b0,Denominator_DI}; |
| |
| always_comb |
| begin |
| if(FP32_SO) |
| begin |
| Denominator_se_DB={~Denominator_se_D[C_MANT_FP64+1:C_MANT_FP64-C_MANT_FP32], {(C_MANT_FP64-C_MANT_FP32){1'b0}} }; |
| end |
| else if(FP64_SO) begin |
| Denominator_se_DB=~Denominator_se_D; |
| end |
| else if(FP16_SO) begin |
| Denominator_se_DB={~Denominator_se_D[C_MANT_FP64+1:C_MANT_FP64-C_MANT_FP16], {(C_MANT_FP64-C_MANT_FP16){1'b0}} }; |
| end |
| else begin |
| Denominator_se_DB={~Denominator_se_D[C_MANT_FP64+1:C_MANT_FP64-C_MANT_FP16ALT], {(C_MANT_FP64-C_MANT_FP16ALT){1'b0}} }; |
| end |
| end |
| |
| |
| logic [C_MANT_FP64+1:0] Mant_D_sqrt_Norm; |
| |
| assign Mant_D_sqrt_Norm=Exp_num_DI[0]?{1'b0,Numerator_DI}:{Numerator_DI,1'b0}; //for sqrt |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Format Selection // |
| ///////////////////////////////////////////////////////////////////////////// |
| logic [1:0] Format_sel_S; |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) |
| begin |
| if(~Rst_RBI) |
| begin |
| Format_sel_S<='b0; |
| end |
| else if(Start_SI&&Ready_SO) |
| begin |
| Format_sel_S<=Format_sel_SI; |
| end |
| else |
| begin |
| Format_sel_S<=Format_sel_S; |
| end |
| end |
| |
| assign FP32_SO = (Format_sel_S==2'b00); |
| assign FP64_SO = (Format_sel_S==2'b01); |
| assign FP16_SO = (Format_sel_S==2'b10); |
| assign FP16ALT_SO = (Format_sel_S==2'b11); |
| |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Precision Control // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| logic [C_PC-1:0] Precision_ctl_S; |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) |
| begin |
| if(~Rst_RBI) |
| begin |
| Precision_ctl_S<='b0; |
| end |
| else if(Start_SI&&Ready_SO) |
| begin |
| Precision_ctl_S<=Precision_ctl_SI; |
| end |
| else |
| begin |
| Precision_ctl_S<=Precision_ctl_S; |
| end |
| end |
| assign Full_precision_SO = (Precision_ctl_S==6'h00); |
| |
| |
| |
| logic [5:0] State_ctl_S; |
| logic [5:0] State_Two_iteration_unit_S; |
| logic [5:0] State_Four_iteration_unit_S; |
| |
| assign State_Two_iteration_unit_S = Precision_ctl_S[C_PC-1:1]; //Two iteration units |
| assign State_Four_iteration_unit_S = Precision_ctl_S[C_PC-1:2]; //Four iteration units |
| always_comb |
| begin |
| case(Iteration_unit_num_S) |
| //////////////////////one iteration unit, start/////////////////////////////////////// |
| 2'b00: //one iteration unit |
| begin |
| case(Format_sel_S) |
| 2'b00: //FP32 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h1b; //24+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = Precision_ctl_S; |
| end |
| end |
| 2'b01: //FP64 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h38; //53+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = Precision_ctl_S; |
| end |
| end |
| 2'b10: //FP16 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h0e; //11+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = Precision_ctl_S; |
| end |
| end |
| 2'b11: //FP16ALT |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h0b; //8+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = Precision_ctl_S; |
| end |
| end |
| endcase |
| end |
| //////////////////////one iteration unit, end/////////////////////////////////////// |
| |
| //////////////////////two iteration units, start/////////////////////////////////////// |
| 2'b01: //two iteration units |
| begin |
| case(Format_sel_S) |
| 2'b00: //FP32 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h0d; //24+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Two_iteration_unit_S; |
| end |
| end |
| 2'b01: //FP64 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h1b; //53+3 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Two_iteration_unit_S; |
| end |
| end |
| 2'b10: //FP16 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h06; //11+3 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Two_iteration_unit_S; |
| end |
| end |
| 2'b11: //FP16ALT |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h05; //8+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Two_iteration_unit_S; |
| end |
| end |
| endcase |
| end |
| //////////////////////two iteration units, end/////////////////////////////////////// |
| |
| //////////////////////three iteration units, start/////////////////////////////////////// |
| 2'b10: //three iteration units |
| begin |
| case(Format_sel_S) |
| 2'b00: //FP32 |
| begin |
| case(Precision_ctl_S) |
| 6'h00: |
| begin |
| State_ctl_S = 6'h08; //24+3 more iterations for rounding bits |
| end |
| 6'h06,6'h07,6'h08: |
| begin |
| State_ctl_S = 6'h02; |
| end |
| 6'h09,6'h0a,6'h0b: |
| begin |
| State_ctl_S = 6'h03; |
| end |
| 6'h0c,6'h0d,6'h0e: |
| begin |
| State_ctl_S = 6'h04; |
| end |
| 6'h0f,6'h10,6'h11: |
| begin |
| State_ctl_S = 6'h05; |
| end |
| 6'h12,6'h13,6'h14: |
| begin |
| State_ctl_S = 6'h06; |
| end |
| 6'h15,6'h16,6'h17: |
| begin |
| State_ctl_S = 6'h07; |
| end |
| default: |
| begin |
| State_ctl_S = 6'h08; //24+3 more iterations for rounding bits |
| end |
| endcase |
| end |
| 2'b01: //FP64 |
| begin |
| case(Precision_ctl_S) |
| 6'h00: |
| begin |
| State_ctl_S = 6'h12; //53+4 more iterations for rounding bits |
| end |
| 6'h06,6'h07,6'h08: |
| begin |
| State_ctl_S = 6'h02; |
| end |
| 6'h09,6'h0a,6'h0b: |
| begin |
| State_ctl_S = 6'h03; |
| end |
| 6'h0c,6'h0d,6'h0e: |
| begin |
| State_ctl_S = 6'h04; |
| end |
| 6'h0f,6'h10,6'h11: |
| begin |
| State_ctl_S = 6'h05; |
| end |
| 6'h12,6'h13,6'h14: |
| begin |
| State_ctl_S = 6'h06; |
| end |
| 6'h15,6'h16,6'h17: |
| begin |
| State_ctl_S = 6'h07; |
| end |
| 6'h18,6'h19,6'h1a: |
| begin |
| State_ctl_S = 6'h08; |
| end |
| 6'h1b,6'h1c,6'h1d: |
| begin |
| State_ctl_S = 6'h09; |
| end |
| 6'h1e,6'h1f,6'h20: |
| begin |
| State_ctl_S = 6'h0a; |
| end |
| 6'h21,6'h22,6'h23: |
| begin |
| State_ctl_S = 6'h0b; |
| end |
| 6'h24,6'h25,6'h26: |
| begin |
| State_ctl_S = 6'h0c; |
| end |
| 6'h27,6'h28,6'h29: |
| begin |
| State_ctl_S = 6'h0d; |
| end |
| 6'h2a,6'h2b,6'h2c: |
| begin |
| State_ctl_S = 6'h0e; |
| end |
| 6'h2d,6'h2e,6'h2f: |
| begin |
| State_ctl_S = 6'h0f; |
| end |
| 6'h30,6'h31,6'h32: |
| begin |
| State_ctl_S = 6'h10; |
| end |
| 6'h33,6'h34,6'h35: |
| begin |
| State_ctl_S = 6'h11; |
| end |
| default: |
| begin |
| State_ctl_S = 6'h12; //53+4 more iterations for rounding bits |
| end |
| endcase |
| end |
| 2'b10: //FP16 |
| begin |
| case(Precision_ctl_S) |
| 6'h00: |
| begin |
| State_ctl_S = 6'h04; //12+3 more iterations for rounding bits |
| end |
| 6'h06,6'h07,6'h08: |
| begin |
| State_ctl_S = 6'h02; |
| end |
| 6'h09,6'h0a,6'h0b: |
| begin |
| State_ctl_S = 6'h03; |
| end |
| default: |
| begin |
| State_ctl_S = 6'h04; //12+3 more iterations for rounding bits |
| end |
| endcase |
| end |
| 2'b11: //FP16ALT |
| begin |
| case(Precision_ctl_S) |
| 6'h00: |
| begin |
| State_ctl_S = 6'h03; //8+4 more iterations for rounding bits |
| end |
| 6'h06,6'h07,6'h08: |
| begin |
| State_ctl_S = 6'h02; |
| end |
| default: |
| begin |
| State_ctl_S = 6'h03; //8+4 more iterations for rounding bits |
| end |
| endcase |
| end |
| endcase |
| end |
| //////////////////////three iteration units, end/////////////////////////////////////// |
| |
| //////////////////////four iteration units, start/////////////////////////////////////// |
| 2'b11: //four iteration units |
| begin |
| case(Format_sel_S) |
| 2'b00: //FP32 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h06; //24+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Four_iteration_unit_S; |
| end |
| end |
| 2'b01: //FP64 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h0d; //53+3 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Four_iteration_unit_S; |
| end |
| end |
| 2'b10: //FP16 |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h03; //11+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Four_iteration_unit_S; |
| end |
| end |
| 2'b11: //FP16ALT |
| begin |
| if(Full_precision_SO) |
| begin |
| State_ctl_S = 6'h02; //8+4 more iterations for rounding bits |
| end |
| else |
| begin |
| State_ctl_S = State_Four_iteration_unit_S; |
| end |
| end |
| endcase |
| end |
| //////////////////////four iteration units, end/////////////////////////////////////// |
| |
| endcase |
| end |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // control logic // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| logic Div_start_dly_S; |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) // generate Div_start_dly_S signal |
| begin |
| if(~Rst_RBI) |
| begin |
| Div_start_dly_S<=1'b0; |
| end |
| else if(Div_start_SI&&Ready_SO) |
| begin |
| Div_start_dly_S<=1'b1; |
| end |
| else |
| begin |
| Div_start_dly_S<=1'b0; |
| end |
| end |
| |
| assign Div_start_dly_SO=Div_start_dly_S; |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) begin // generate Div_enable_SO signal |
| if(~Rst_RBI) |
| Div_enable_SO<=1'b0; |
| // Synchronous rst_ni with Flush |
| else if (Kill_SI) |
| Div_enable_SO <= 1'b0; |
| else if(Div_start_SI&&Ready_SO) |
| Div_enable_SO<=1'b1; |
| else if(Done_SO) |
| Div_enable_SO<=1'b0; |
| else |
| Div_enable_SO<=Div_enable_SO; |
| end |
| |
| logic Sqrt_start_dly_S; |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) // generate Sqrt_start_dly_SI signal |
| begin |
| if(~Rst_RBI) |
| begin |
| Sqrt_start_dly_S<=1'b0; |
| end |
| else if(Sqrt_start_SI&&Ready_SO) |
| begin |
| Sqrt_start_dly_S<=1'b1; |
| end |
| else |
| begin |
| Sqrt_start_dly_S<=1'b0; |
| end |
| end |
| assign Sqrt_start_dly_SO=Sqrt_start_dly_S; |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) begin // generate Sqrt_enable_SO signal |
| if(~Rst_RBI) |
| Sqrt_enable_SO<=1'b0; |
| else if (Kill_SI) |
| Sqrt_enable_SO <= 1'b0; |
| else if(Sqrt_start_SI&&Ready_SO) |
| Sqrt_enable_SO<=1'b1; |
| else if(Done_SO) |
| Sqrt_enable_SO<=1'b0; |
| else |
| Sqrt_enable_SO<=Sqrt_enable_SO; |
| end |
| |
| logic [5:0] Crtl_cnt_S; |
| logic Start_dly_S; |
| |
| assign Start_dly_S=Div_start_dly_S |Sqrt_start_dly_S; |
| |
| logic Fsm_enable_S; |
| assign Fsm_enable_S=( (Start_dly_S | (| Crtl_cnt_S)) && (~Kill_SI) && Special_case_dly_SBI); |
| |
| logic Final_state_S; |
| assign Final_state_S= (Crtl_cnt_S==State_ctl_S); |
| |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) //control_FSM |
| begin |
| if (~Rst_RBI) |
| begin |
| Crtl_cnt_S <= '0; |
| end |
| else if (Final_state_S | Kill_SI) |
| begin |
| Crtl_cnt_S <= '0; |
| end |
| else if(Fsm_enable_S) // one cycle Start_SI |
| begin |
| Crtl_cnt_S <= Crtl_cnt_S+1; |
| end |
| else |
| begin |
| Crtl_cnt_S <= '0; |
| end |
| end // always_ff |
| |
| |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) //Generate Done_SO, they can share this Done_SO. |
| begin |
| if(~Rst_RBI) |
| begin |
| Done_SO<=1'b0; |
| end |
| else if(Start_SI&&Ready_SO) |
| begin |
| if(~Special_case_SBI) |
| begin |
| Done_SO<=1'b1; |
| end |
| else |
| begin |
| Done_SO<=1'b0; |
| end |
| end |
| else if(Final_state_S) |
| begin |
| Done_SO<=1'b1; |
| end |
| else |
| begin |
| Done_SO<=1'b0; |
| end |
| end |
| |
| |
| |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) //Generate Ready_SO |
| begin |
| if(~Rst_RBI) |
| begin |
| Ready_SO<=1'b1; |
| end |
| |
| else if(Start_SI&&Ready_SO) |
| begin |
| if(~Special_case_SBI) |
| begin |
| Ready_SO<=1'b1; |
| end |
| else |
| begin |
| Ready_SO<=1'b0; |
| end |
| end |
| else if(Final_state_S | Kill_SI) |
| begin |
| Ready_SO<=1'b1; |
| end |
| else |
| begin |
| Ready_SO<=Ready_SO; |
| end |
| end |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b00, start // |
| //////////////////////////////////////////////////////////////////////////// |
| |
| logic Qcnt_one_0; |
| logic Qcnt_one_1; |
| logic [1:0] Qcnt_one_2; |
| logic [2:0] Qcnt_one_3; |
| logic [3:0] Qcnt_one_4; |
| logic [4:0] Qcnt_one_5; |
| logic [5:0] Qcnt_one_6; |
| logic [6:0] Qcnt_one_7; |
| logic [7:0] Qcnt_one_8; |
| logic [8:0] Qcnt_one_9; |
| logic [9:0] Qcnt_one_10; |
| logic [10:0] Qcnt_one_11; |
| logic [11:0] Qcnt_one_12; |
| logic [12:0] Qcnt_one_13; |
| logic [13:0] Qcnt_one_14; |
| logic [14:0] Qcnt_one_15; |
| logic [15:0] Qcnt_one_16; |
| logic [16:0] Qcnt_one_17; |
| logic [17:0] Qcnt_one_18; |
| logic [18:0] Qcnt_one_19; |
| logic [19:0] Qcnt_one_20; |
| logic [20:0] Qcnt_one_21; |
| logic [21:0] Qcnt_one_22; |
| logic [22:0] Qcnt_one_23; |
| logic [23:0] Qcnt_one_24; |
| logic [24:0] Qcnt_one_25; |
| logic [25:0] Qcnt_one_26; |
| logic [26:0] Qcnt_one_27; |
| logic [27:0] Qcnt_one_28; |
| logic [28:0] Qcnt_one_29; |
| logic [29:0] Qcnt_one_30; |
| logic [30:0] Qcnt_one_31; |
| logic [31:0] Qcnt_one_32; |
| logic [32:0] Qcnt_one_33; |
| logic [33:0] Qcnt_one_34; |
| logic [34:0] Qcnt_one_35; |
| logic [35:0] Qcnt_one_36; |
| logic [36:0] Qcnt_one_37; |
| logic [37:0] Qcnt_one_38; |
| logic [38:0] Qcnt_one_39; |
| logic [39:0] Qcnt_one_40; |
| logic [40:0] Qcnt_one_41; |
| logic [41:0] Qcnt_one_42; |
| logic [42:0] Qcnt_one_43; |
| logic [43:0] Qcnt_one_44; |
| logic [44:0] Qcnt_one_45; |
| logic [45:0] Qcnt_one_46; |
| logic [46:0] Qcnt_one_47; |
| logic [47:0] Qcnt_one_48; |
| logic [48:0] Qcnt_one_49; |
| logic [49:0] Qcnt_one_50; |
| logic [50:0] Qcnt_one_51; |
| logic [51:0] Qcnt_one_52; |
| logic [52:0] Qcnt_one_53; |
| logic [53:0] Qcnt_one_54; |
| logic [54:0] Qcnt_one_55; |
| logic [55:0] Qcnt_one_56; |
| logic [56:0] Qcnt_one_57; |
| logic [57:0] Qcnt_one_58; |
| logic [58:0] Qcnt_one_59; |
| logic [59:0] Qcnt_one_60; |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b00, end // |
| //////////////////////////////////////////////////////////////////////////// |
| |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b01, start // |
| //////////////////////////////////////////////////////////////////////////// |
| logic [1:0] Qcnt_two_0; |
| logic [2:0] Qcnt_two_1; |
| logic [4:0] Qcnt_two_2; |
| logic [6:0] Qcnt_two_3; |
| logic [8:0] Qcnt_two_4; |
| logic [10:0] Qcnt_two_5; |
| logic [12:0] Qcnt_two_6; |
| logic [14:0] Qcnt_two_7; |
| logic [16:0] Qcnt_two_8; |
| logic [18:0] Qcnt_two_9; |
| logic [20:0] Qcnt_two_10; |
| logic [22:0] Qcnt_two_11; |
| logic [24:0] Qcnt_two_12; |
| logic [26:0] Qcnt_two_13; |
| logic [28:0] Qcnt_two_14; |
| logic [30:0] Qcnt_two_15; |
| logic [32:0] Qcnt_two_16; |
| logic [34:0] Qcnt_two_17; |
| logic [36:0] Qcnt_two_18; |
| logic [38:0] Qcnt_two_19; |
| logic [40:0] Qcnt_two_20; |
| logic [42:0] Qcnt_two_21; |
| logic [44:0] Qcnt_two_22; |
| logic [46:0] Qcnt_two_23; |
| logic [48:0] Qcnt_two_24; |
| logic [50:0] Qcnt_two_25; |
| logic [52:0] Qcnt_two_26; |
| logic [54:0] Qcnt_two_27; |
| logic [56:0] Qcnt_two_28; |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b01, end // |
| //////////////////////////////////////////////////////////////////////////// |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b10, start // |
| //////////////////////////////////////////////////////////////////////////// |
| logic [2:0] Qcnt_three_0; |
| logic [4:0] Qcnt_three_1; |
| logic [7:0] Qcnt_three_2; |
| logic [10:0] Qcnt_three_3; |
| logic [13:0] Qcnt_three_4; |
| logic [16:0] Qcnt_three_5; |
| logic [19:0] Qcnt_three_6; |
| logic [22:0] Qcnt_three_7; |
| logic [25:0] Qcnt_three_8; |
| logic [28:0] Qcnt_three_9; |
| logic [31:0] Qcnt_three_10; |
| logic [34:0] Qcnt_three_11; |
| logic [37:0] Qcnt_three_12; |
| logic [40:0] Qcnt_three_13; |
| logic [43:0] Qcnt_three_14; |
| logic [46:0] Qcnt_three_15; |
| logic [49:0] Qcnt_three_16; |
| logic [52:0] Qcnt_three_17; |
| logic [55:0] Qcnt_three_18; |
| logic [58:0] Qcnt_three_19; |
| logic [61:0] Qcnt_three_20; |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b10, end // |
| //////////////////////////////////////////////////////////////////////////// |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b11, start // |
| //////////////////////////////////////////////////////////////////////////// |
| logic [3:0] Qcnt_four_0; |
| logic [6:0] Qcnt_four_1; |
| logic [10:0] Qcnt_four_2; |
| logic [14:0] Qcnt_four_3; |
| logic [18:0] Qcnt_four_4; |
| logic [22:0] Qcnt_four_5; |
| logic [26:0] Qcnt_four_6; |
| logic [30:0] Qcnt_four_7; |
| logic [34:0] Qcnt_four_8; |
| logic [38:0] Qcnt_four_9; |
| logic [42:0] Qcnt_four_10; |
| logic [46:0] Qcnt_four_11; |
| logic [50:0] Qcnt_four_12; |
| logic [54:0] Qcnt_four_13; |
| logic [58:0] Qcnt_four_14; |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Declarations for square root when Iteration_unit_num_S = 2'b11, end // |
| //////////////////////////////////////////////////////////////////////////// |
| |
| |
| |
| logic [C_MANT_FP64+1+4:0] Sqrt_R0,Sqrt_Q0,Q_sqrt0,Q_sqrt_com_0; |
| logic [C_MANT_FP64+1+4:0] Sqrt_R1,Sqrt_Q1,Q_sqrt1,Q_sqrt_com_1; |
| logic [C_MANT_FP64+1+4:0] Sqrt_R2,Sqrt_Q2,Q_sqrt2,Q_sqrt_com_2; |
| logic [C_MANT_FP64+1+4:0] Sqrt_R3,Sqrt_Q3,Q_sqrt3,Q_sqrt_com_3,Sqrt_R4; //Sqrt_Q4; |
| |
| |
| logic [1:0] Sqrt_DI [3:0]; |
| logic [1:0] Sqrt_DO [3:0]; |
| logic Sqrt_carry_DO; |
| |
| |
| logic [C_MANT_FP64+1+4:0] Iteration_cell_a_D [3:0]; |
| logic [C_MANT_FP64+1+4:0] Iteration_cell_b_D [3:0]; |
| logic [C_MANT_FP64+1+4:0] Iteration_cell_a_BMASK_D [3:0]; |
| logic [C_MANT_FP64+1+4:0] Iteration_cell_b_BMASK_D [3:0]; |
| logic Iteration_cell_carry_D [3:0]; |
| logic [C_MANT_FP64+1+4:0] Iteration_cell_sum_D [3:0]; |
| logic [C_MANT_FP64+1+4:0] Iteration_cell_sum_AMASK_D [3:0]; |
| |
| |
| logic [3:0] Sqrt_quotinent_S; |
| |
| |
| always_comb |
| begin // |
| case (Format_sel_S) |
| 2'b00: |
| begin |
| Sqrt_quotinent_S = {(~Iteration_cell_sum_AMASK_D[0][C_MANT_FP32+5]),(~Iteration_cell_sum_AMASK_D[1][C_MANT_FP32+5]),(~Iteration_cell_sum_AMASK_D[2][C_MANT_FP32+5]),(~Iteration_cell_sum_AMASK_D[3][C_MANT_FP32+5])}; |
| Q_sqrt_com_0 ={ {(C_MANT_FP64-C_MANT_FP32){1'b0}},~Q_sqrt0[C_MANT_FP32+5:0] }; |
| Q_sqrt_com_1 ={ {(C_MANT_FP64-C_MANT_FP32){1'b0}},~Q_sqrt1[C_MANT_FP32+5:0] }; |
| Q_sqrt_com_2 ={ {(C_MANT_FP64-C_MANT_FP32){1'b0}},~Q_sqrt2[C_MANT_FP32+5:0] }; |
| Q_sqrt_com_3 ={ {(C_MANT_FP64-C_MANT_FP32){1'b0}},~Q_sqrt3[C_MANT_FP32+5:0] }; |
| end |
| 2'b01: |
| begin |
| Sqrt_quotinent_S = {Iteration_cell_carry_D[0],Iteration_cell_carry_D[1],Iteration_cell_carry_D[2],Iteration_cell_carry_D[3]}; |
| Q_sqrt_com_0=~Q_sqrt0; |
| Q_sqrt_com_1=~Q_sqrt1; |
| Q_sqrt_com_2=~Q_sqrt2; |
| Q_sqrt_com_3=~Q_sqrt3; |
| end |
| 2'b10: |
| begin |
| Sqrt_quotinent_S = {(~Iteration_cell_sum_AMASK_D[0][C_MANT_FP16+5]),(~Iteration_cell_sum_AMASK_D[1][C_MANT_FP16+5]),(~Iteration_cell_sum_AMASK_D[2][C_MANT_FP16+5]),(~Iteration_cell_sum_AMASK_D[3][C_MANT_FP16+5])}; |
| Q_sqrt_com_0 ={ {(C_MANT_FP64-C_MANT_FP16){1'b0}},~Q_sqrt0[C_MANT_FP16+5:0] }; |
| Q_sqrt_com_1 ={ {(C_MANT_FP64-C_MANT_FP16){1'b0}},~Q_sqrt1[C_MANT_FP16+5:0] }; |
| Q_sqrt_com_2 ={ {(C_MANT_FP64-C_MANT_FP16){1'b0}},~Q_sqrt2[C_MANT_FP16+5:0] }; |
| Q_sqrt_com_3 ={ {(C_MANT_FP64-C_MANT_FP16){1'b0}},~Q_sqrt3[C_MANT_FP16+5:0] }; |
| end |
| 2'b11: |
| begin |
| Sqrt_quotinent_S = {(~Iteration_cell_sum_AMASK_D[0][C_MANT_FP16ALT+5]),(~Iteration_cell_sum_AMASK_D[1][C_MANT_FP16ALT+5]),(~Iteration_cell_sum_AMASK_D[2][C_MANT_FP16ALT+5]),(~Iteration_cell_sum_AMASK_D[3][C_MANT_FP16ALT+5])}; |
| Q_sqrt_com_0 ={ {(C_MANT_FP64-C_MANT_FP16ALT){1'b0}},~Q_sqrt0[C_MANT_FP16ALT+5:0] }; |
| Q_sqrt_com_1 ={ {(C_MANT_FP64-C_MANT_FP16ALT){1'b0}},~Q_sqrt1[C_MANT_FP16ALT+5:0] }; |
| Q_sqrt_com_2 ={ {(C_MANT_FP64-C_MANT_FP16ALT){1'b0}},~Q_sqrt2[C_MANT_FP16ALT+5:0] }; |
| Q_sqrt_com_3 ={ {(C_MANT_FP64-C_MANT_FP16ALT){1'b0}},~Q_sqrt3[C_MANT_FP16ALT+5:0] }; |
| end |
| endcase |
| end |
| |
| |
| |
| assign Qcnt_one_0= {1'b0}; //qk for each feedback |
| assign Qcnt_one_1= {Quotient_DP[0]}; |
| assign Qcnt_one_2= {Quotient_DP[1:0]}; |
| assign Qcnt_one_3= {Quotient_DP[2:0]}; |
| assign Qcnt_one_4= {Quotient_DP[3:0]}; |
| assign Qcnt_one_5= {Quotient_DP[4:0]}; |
| assign Qcnt_one_6= {Quotient_DP[5:0]}; |
| assign Qcnt_one_7= {Quotient_DP[6:0]}; |
| assign Qcnt_one_8= {Quotient_DP[7:0]}; |
| assign Qcnt_one_9= {Quotient_DP[8:0]}; |
| assign Qcnt_one_10= {Quotient_DP[9:0]}; |
| assign Qcnt_one_11= {Quotient_DP[10:0]}; |
| assign Qcnt_one_12= {Quotient_DP[11:0]}; |
| assign Qcnt_one_13= {Quotient_DP[12:0]}; |
| assign Qcnt_one_14= {Quotient_DP[13:0]}; |
| assign Qcnt_one_15= {Quotient_DP[14:0]}; |
| assign Qcnt_one_16= {Quotient_DP[15:0]}; |
| assign Qcnt_one_17= {Quotient_DP[16:0]}; |
| assign Qcnt_one_18= {Quotient_DP[17:0]}; |
| assign Qcnt_one_19= {Quotient_DP[18:0]}; |
| assign Qcnt_one_20= {Quotient_DP[19:0]}; |
| assign Qcnt_one_21= {Quotient_DP[20:0]}; |
| assign Qcnt_one_22= {Quotient_DP[21:0]}; |
| assign Qcnt_one_23= {Quotient_DP[22:0]}; |
| assign Qcnt_one_24= {Quotient_DP[23:0]}; |
| assign Qcnt_one_25= {Quotient_DP[24:0]}; |
| assign Qcnt_one_26= {Quotient_DP[25:0]}; |
| assign Qcnt_one_27= {Quotient_DP[26:0]}; |
| assign Qcnt_one_28= {Quotient_DP[27:0]}; |
| assign Qcnt_one_29= {Quotient_DP[28:0]}; |
| assign Qcnt_one_30= {Quotient_DP[29:0]}; |
| assign Qcnt_one_31= {Quotient_DP[30:0]}; |
| assign Qcnt_one_32= {Quotient_DP[31:0]}; |
| assign Qcnt_one_33= {Quotient_DP[32:0]}; |
| assign Qcnt_one_34= {Quotient_DP[33:0]}; |
| assign Qcnt_one_35= {Quotient_DP[34:0]}; |
| assign Qcnt_one_36= {Quotient_DP[35:0]}; |
| assign Qcnt_one_37= {Quotient_DP[36:0]}; |
| assign Qcnt_one_38= {Quotient_DP[37:0]}; |
| assign Qcnt_one_39= {Quotient_DP[38:0]}; |
| assign Qcnt_one_40= {Quotient_DP[39:0]}; |
| assign Qcnt_one_41= {Quotient_DP[40:0]}; |
| assign Qcnt_one_42= {Quotient_DP[41:0]}; |
| assign Qcnt_one_43= {Quotient_DP[42:0]}; |
| assign Qcnt_one_44= {Quotient_DP[43:0]}; |
| assign Qcnt_one_45= {Quotient_DP[44:0]}; |
| assign Qcnt_one_46= {Quotient_DP[45:0]}; |
| assign Qcnt_one_47= {Quotient_DP[46:0]}; |
| assign Qcnt_one_48= {Quotient_DP[47:0]}; |
| assign Qcnt_one_49= {Quotient_DP[48:0]}; |
| assign Qcnt_one_50= {Quotient_DP[49:0]}; |
| assign Qcnt_one_51= {Quotient_DP[50:0]}; |
| assign Qcnt_one_52= {Quotient_DP[51:0]}; |
| assign Qcnt_one_53= {Quotient_DP[52:0]}; |
| assign Qcnt_one_54= {Quotient_DP[53:0]}; |
| assign Qcnt_one_55= {Quotient_DP[54:0]}; |
| assign Qcnt_one_56= {Quotient_DP[55:0]}; |
| assign Qcnt_one_57= {Quotient_DP[56:0]}; |
| |
| |
| assign Qcnt_two_0 = {1'b0, Sqrt_quotinent_S[3]}; //qk for each feedback |
| assign Qcnt_two_1 = {Quotient_DP[1:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_2 = {Quotient_DP[3:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_3 = {Quotient_DP[5:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_4 = {Quotient_DP[7:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_5 = {Quotient_DP[9:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_6 = {Quotient_DP[11:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_7 = {Quotient_DP[13:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_8 = {Quotient_DP[15:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_9 = {Quotient_DP[17:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_10 = {Quotient_DP[19:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_11 = {Quotient_DP[21:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_12 = {Quotient_DP[23:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_13 = {Quotient_DP[25:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_14 = {Quotient_DP[27:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_15 = {Quotient_DP[29:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_16 = {Quotient_DP[31:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_17 = {Quotient_DP[33:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_18 = {Quotient_DP[35:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_19 = {Quotient_DP[37:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_20 = {Quotient_DP[39:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_21 = {Quotient_DP[41:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_22 = {Quotient_DP[43:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_23 = {Quotient_DP[45:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_24 = {Quotient_DP[47:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_25 = {Quotient_DP[49:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_26 = {Quotient_DP[51:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_27 = {Quotient_DP[53:0],Sqrt_quotinent_S[3]}; |
| assign Qcnt_two_28 = {Quotient_DP[55:0],Sqrt_quotinent_S[3]}; |
| |
| |
| assign Qcnt_three_0 = {1'b0, Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; //qk for each feedback |
| assign Qcnt_three_1 = {Quotient_DP[2:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_2 = {Quotient_DP[5:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_3 = {Quotient_DP[8:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_4 = {Quotient_DP[11:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_5 = {Quotient_DP[14:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_6 = {Quotient_DP[17:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_7 = {Quotient_DP[20:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_8 = {Quotient_DP[23:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_9 = {Quotient_DP[26:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_10 = {Quotient_DP[29:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_11 = {Quotient_DP[32:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_12 = {Quotient_DP[35:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_13 = {Quotient_DP[38:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_14 = {Quotient_DP[41:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_15 = {Quotient_DP[44:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_16 = {Quotient_DP[47:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_17 = {Quotient_DP[50:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_18 = {Quotient_DP[53:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| assign Qcnt_three_19 = {Quotient_DP[56:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2]}; |
| |
| |
| assign Qcnt_four_0 = {1'b0, Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_1 = {Quotient_DP[3:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_2 = {Quotient_DP[7:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_3 = {Quotient_DP[11:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_4 = {Quotient_DP[15:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_5 = {Quotient_DP[19:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_6 = {Quotient_DP[23:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_7 = {Quotient_DP[27:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_8 = {Quotient_DP[31:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_9 = {Quotient_DP[35:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_10 = {Quotient_DP[39:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_11 = {Quotient_DP[43:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_12 = {Quotient_DP[47:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_13 = {Quotient_DP[51:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| assign Qcnt_four_14 = {Quotient_DP[55:0],Sqrt_quotinent_S[3],Sqrt_quotinent_S[2],Sqrt_quotinent_S[1]}; |
| |
| |
| |
| |
| always_comb begin // the intermediate operands for sqrt |
| |
| case(Iteration_unit_num_S) |
| 2'b00: |
| begin |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b00, start // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| |
| |
| |
| case(Crtl_cnt_S) |
| |
| 6'b000000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64+1:C_MANT_FP64]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_one_0}; |
| Sqrt_Q0=Q_sqrt_com_0; |
| end |
| 6'b000001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-1:C_MANT_FP64-2]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_one_1}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b000010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-3:C_MANT_FP64-4]; |
| Q_sqrt0={{(C_MANT_FP64+4){1'b0}},Qcnt_one_2}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b000011: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-5:C_MANT_FP64-6]; |
| Q_sqrt0={{(C_MANT_FP64+3){1'b0}},Qcnt_one_3}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b000100: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-7:C_MANT_FP64-8]; |
| Q_sqrt0={{(C_MANT_FP64+2){1'b0}},Qcnt_one_4}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b000101: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-9:C_MANT_FP64-10]; |
| Q_sqrt0={{(C_MANT_FP64+1){1'b0}},Qcnt_one_5}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b000110: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-11:C_MANT_FP64-12]; |
| Q_sqrt0={{(C_MANT_FP64){1'b0}},Qcnt_one_6}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b000111: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-13:C_MANT_FP64-14]; |
| Q_sqrt0={{(C_MANT_FP64-1){1'b0}},Qcnt_one_7}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-15:C_MANT_FP64-16]; |
| Q_sqrt0={{(C_MANT_FP64-2){1'b0}},Qcnt_one_8}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-17:C_MANT_FP64-18]; |
| Q_sqrt0={{(C_MANT_FP64-3){1'b0}},Qcnt_one_9}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-19:C_MANT_FP64-20]; |
| Q_sqrt0={{(C_MANT_FP64-4){1'b0}},Qcnt_one_10}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001011: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-21:C_MANT_FP64-22]; |
| Q_sqrt0={{(C_MANT_FP64-5){1'b0}},Qcnt_one_11}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001100: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-23:C_MANT_FP64-24]; |
| Q_sqrt0={{(C_MANT_FP64-6){1'b0}},Qcnt_one_12}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001101: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-25:C_MANT_FP64-26]; |
| Q_sqrt0={{(C_MANT_FP64-7){1'b0}},Qcnt_one_13}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001110: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-27:C_MANT_FP64-28]; |
| Q_sqrt0={{(C_MANT_FP64-8){1'b0}},Qcnt_one_14}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b001111: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-29:C_MANT_FP64-30]; |
| Q_sqrt0={{(C_MANT_FP64-9){1'b0}},Qcnt_one_15}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-31:C_MANT_FP64-32]; |
| Q_sqrt0={{(C_MANT_FP64-10){1'b0}},Qcnt_one_16}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-33:C_MANT_FP64-34]; |
| Q_sqrt0={{(C_MANT_FP64-11){1'b0}},Qcnt_one_17}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-35:C_MANT_FP64-36]; |
| Q_sqrt0={{(C_MANT_FP64-12){1'b0}},Qcnt_one_18}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010011: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-37:C_MANT_FP64-38]; |
| Q_sqrt0={{(C_MANT_FP64-13){1'b0}},Qcnt_one_19}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010100: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-39:C_MANT_FP64-40]; |
| Q_sqrt0={{(C_MANT_FP64-14){1'b0}},Qcnt_one_20}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010101: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-41:C_MANT_FP64-42]; |
| Q_sqrt0={{(C_MANT_FP64-15){1'b0}},Qcnt_one_21}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010110: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-43:C_MANT_FP64-44]; |
| Q_sqrt0={{(C_MANT_FP64-16){1'b0}},Qcnt_one_22}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b010111: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-45:C_MANT_FP64-46]; |
| Q_sqrt0={{(C_MANT_FP64-17){1'b0}},Qcnt_one_23}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-47:C_MANT_FP64-48]; |
| Q_sqrt0={{(C_MANT_FP64-18){1'b0}},Qcnt_one_24}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-49:C_MANT_FP64-50]; |
| Q_sqrt0={{(C_MANT_FP64-19){1'b0}},Qcnt_one_25}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-51:C_MANT_FP64-52]; |
| Q_sqrt0={{(C_MANT_FP64-20){1'b0}},Qcnt_one_26}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-21){1'b0}},Qcnt_one_27}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-22){1'b0}},Qcnt_one_28}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011101: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-23){1'b0}},Qcnt_one_29}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011110: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-24){1'b0}},Qcnt_one_30}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b011111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-25){1'b0}},Qcnt_one_31}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-26){1'b0}},Qcnt_one_32}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-27){1'b0}},Qcnt_one_33}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-28){1'b0}},Qcnt_one_34}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-29){1'b0}},Qcnt_one_35}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-30){1'b0}},Qcnt_one_36}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100101: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-31){1'b0}},Qcnt_one_37}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100110: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-32){1'b0}},Qcnt_one_38}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b100111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-33){1'b0}},Qcnt_one_39}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-34){1'b0}},Qcnt_one_40}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-35){1'b0}},Qcnt_one_41}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-36){1'b0}},Qcnt_one_42}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-37){1'b0}},Qcnt_one_43}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-38){1'b0}},Qcnt_one_44}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101101: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-39){1'b0}},Qcnt_one_45}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101110: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-40){1'b0}},Qcnt_one_46}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b101111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-41){1'b0}},Qcnt_one_47}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-42){1'b0}},Qcnt_one_48}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-43){1'b0}},Qcnt_one_49}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-44){1'b0}},Qcnt_one_50}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-45){1'b0}},Qcnt_one_51}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-46){1'b0}},Qcnt_one_52}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110101: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-47){1'b0}},Qcnt_one_53}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110110: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-48){1'b0}},Qcnt_one_54}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b110111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-49){1'b0}},Qcnt_one_55}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| 6'b111000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-50){1'b0}},Qcnt_one_56}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| end |
| |
| default: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0='0; |
| Sqrt_Q0='0; |
| end |
| endcase |
| end |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b00, end // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| |
| 2'b01: |
| begin |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b01, start // |
| ///////////////////////////////////////////////////////////////////////////// |
| case(Crtl_cnt_S) |
| |
| 6'b000000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64+1:C_MANT_FP64]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_two_0[1]}; |
| Sqrt_Q0=Q_sqrt_com_0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-1:C_MANT_FP64-2]; |
| Q_sqrt1={{(C_MANT_FP64+4){1'b0}},Qcnt_two_0[1:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b000001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-3:C_MANT_FP64-4]; |
| Q_sqrt0={{(C_MANT_FP64+4){1'b0}},Qcnt_two_1[2:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-5:C_MANT_FP64-6]; |
| Q_sqrt1={{(C_MANT_FP64+3){1'b0}},Qcnt_two_1[2:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b000010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-7:C_MANT_FP64-8]; |
| Q_sqrt0={{(C_MANT_FP64+2){1'b0}},Qcnt_two_2[4:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-9:C_MANT_FP64-10]; |
| Q_sqrt1={{(C_MANT_FP64+1){1'b0}},Qcnt_two_2[4:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b000011: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-11:C_MANT_FP64-12]; |
| Q_sqrt0={{(C_MANT_FP64){1'b0}},Qcnt_two_3[6:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-13:C_MANT_FP64-14]; |
| Q_sqrt1={{(C_MANT_FP64-1){1'b0}},Qcnt_two_3[6:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b000100: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-15:C_MANT_FP64-16]; |
| Q_sqrt0={{(C_MANT_FP64-2){1'b0}},Qcnt_two_4[8:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-17:C_MANT_FP64-18]; |
| Q_sqrt1={{(C_MANT_FP64-3){1'b0}},Qcnt_two_4[8:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b000101: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-19:C_MANT_FP64-20]; |
| Q_sqrt0={{(C_MANT_FP64-4){1'b0}},Qcnt_two_5[10:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-21:C_MANT_FP64-22]; |
| Q_sqrt1={{(C_MANT_FP64-5){1'b0}},Qcnt_two_5[10:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b000110: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-23:C_MANT_FP64-24]; |
| Q_sqrt0={{(C_MANT_FP64-6){1'b0}},Qcnt_two_6[12:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-25:C_MANT_FP64-26]; |
| Q_sqrt1={{(C_MANT_FP64-7){1'b0}},Qcnt_two_6[12:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b000111: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-27:C_MANT_FP64-28]; |
| Q_sqrt0={{(C_MANT_FP64-8){1'b0}},Qcnt_two_7[14:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-29:C_MANT_FP64-30]; |
| Q_sqrt1={{(C_MANT_FP64-9){1'b0}},Qcnt_two_7[14:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-31:C_MANT_FP64-32]; |
| Q_sqrt0={{(C_MANT_FP64-10){1'b0}},Qcnt_two_8[16:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-33:C_MANT_FP64-34]; |
| Q_sqrt1={{(C_MANT_FP64-11){1'b0}},Qcnt_two_8[16:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-35:C_MANT_FP64-36]; |
| Q_sqrt0={{(C_MANT_FP64-12){1'b0}},Qcnt_two_9[18:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-37:C_MANT_FP64-38]; |
| Q_sqrt1={{(C_MANT_FP64-13){1'b0}},Qcnt_two_9[18:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-39:C_MANT_FP64-40]; |
| Q_sqrt0={{(C_MANT_FP64-14){1'b0}},Qcnt_two_10[20:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-41:C_MANT_FP64-42]; |
| Q_sqrt1={{(C_MANT_FP64-15){1'b0}},Qcnt_two_10[20:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001011: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-43:C_MANT_FP64-44]; |
| Q_sqrt0={{(C_MANT_FP64-16){1'b0}},Qcnt_two_11[22:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-45:C_MANT_FP64-46]; |
| Q_sqrt1={{(C_MANT_FP64-17){1'b0}},Qcnt_two_11[22:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001100: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-47:C_MANT_FP64-48]; |
| Q_sqrt0={{(C_MANT_FP64-18){1'b0}},Qcnt_two_12[24:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-49:C_MANT_FP64-50]; |
| Q_sqrt1={{(C_MANT_FP64-19){1'b0}},Qcnt_two_12[24:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001101: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-51:C_MANT_FP64-52]; |
| Q_sqrt0={{(C_MANT_FP64-20){1'b0}},Qcnt_two_13[26:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-21){1'b0}},Qcnt_two_13[26:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001110: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-22){1'b0}},Qcnt_two_14[28:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-23){1'b0}},Qcnt_two_14[28:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b001111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-24){1'b0}},Qcnt_two_15[30:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-25){1'b0}},Qcnt_two_15[30:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-26){1'b0}},Qcnt_two_16[32:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-27){1'b0}},Qcnt_two_16[32:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-28){1'b0}},Qcnt_two_17[34:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-29){1'b0}},Qcnt_two_17[34:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-30){1'b0}},Qcnt_two_18[36:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-31){1'b0}},Qcnt_two_18[36:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-32){1'b0}},Qcnt_two_19[38:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-33){1'b0}},Qcnt_two_19[38:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-34){1'b0}},Qcnt_two_20[40:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-35){1'b0}},Qcnt_two_20[40:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010101: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-36){1'b0}},Qcnt_two_21[42:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-37){1'b0}},Qcnt_two_21[42:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010110: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-38){1'b0}},Qcnt_two_22[44:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-39){1'b0}},Qcnt_two_22[44:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b010111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-40){1'b0}},Qcnt_two_23[46:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-41){1'b0}},Qcnt_two_23[46:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b011000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-42){1'b0}},Qcnt_two_24[48:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-43){1'b0}},Qcnt_two_24[48:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b011001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-44){1'b0}},Qcnt_two_25[50:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-45){1'b0}},Qcnt_two_25[50:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b011010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-46){1'b0}},Qcnt_two_26[52:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-47){1'b0}},Qcnt_two_26[52:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b011011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-48){1'b0}},Qcnt_two_27[54:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-49){1'b0}},Qcnt_two_27[54:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| 6'b011100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-50){1'b0}},Qcnt_two_28[56:1]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-51){1'b0}},Qcnt_two_28[56:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| default: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64+1:C_MANT_FP64]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_two_0[1]}; |
| Sqrt_Q0=Q_sqrt_com_0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-1:C_MANT_FP64-2]; |
| Q_sqrt1={{(C_MANT_FP64+4){1'b0}},Qcnt_two_0[1:0]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| end |
| |
| endcase |
| end |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b01, end // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| |
| 2'b10: |
| begin |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b10, start // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| case(Crtl_cnt_S) |
| 6'b000000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64+1:C_MANT_FP64]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_three_0[2]}; |
| Sqrt_Q0=Q_sqrt_com_0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-1:C_MANT_FP64-2]; |
| Q_sqrt1={{(C_MANT_FP64+4){1'b0}},Qcnt_three_0[2:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-3:C_MANT_FP64-4]; |
| Q_sqrt2={{(C_MANT_FP64+3){1'b0}},Qcnt_three_0[2:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b000001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-5:C_MANT_FP64-6]; |
| Q_sqrt0={{(C_MANT_FP64+2){1'b0}},Qcnt_three_1[4:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-7:C_MANT_FP64-8]; |
| Q_sqrt1={{(C_MANT_FP64+1){1'b0}},Qcnt_three_1[4:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-9:C_MANT_FP64-10]; |
| Q_sqrt2={{(C_MANT_FP64){1'b0}},Qcnt_three_1[4:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b000010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-11:C_MANT_FP64-12]; |
| Q_sqrt0={{(C_MANT_FP64-1){1'b0}},Qcnt_three_2[7:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-13:C_MANT_FP64-14]; |
| Q_sqrt1={{(C_MANT_FP64-2){1'b0}},Qcnt_three_2[7:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-15:C_MANT_FP64-16]; |
| Q_sqrt2={{(C_MANT_FP64-3){1'b0}},Qcnt_three_2[7:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b000011: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-17:C_MANT_FP64-18]; |
| Q_sqrt0={{(C_MANT_FP64-4){1'b0}},Qcnt_three_3[10:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-19:C_MANT_FP64-20]; |
| Q_sqrt1={{(C_MANT_FP64-5){1'b0}},Qcnt_three_3[10:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-21:C_MANT_FP64-22]; |
| Q_sqrt2={{(C_MANT_FP64-6){1'b0}},Qcnt_three_3[10:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b000100: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-23:C_MANT_FP64-24]; |
| Q_sqrt0={{(C_MANT_FP64-7){1'b0}},Qcnt_three_4[13:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-25:C_MANT_FP64-26]; |
| Q_sqrt1={{(C_MANT_FP64-8){1'b0}},Qcnt_three_4[13:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-27:C_MANT_FP64-28]; |
| Q_sqrt2={{(C_MANT_FP64-9){1'b0}},Qcnt_three_4[13:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b000101: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-29:C_MANT_FP64-30]; |
| Q_sqrt0={{(C_MANT_FP64-10){1'b0}},Qcnt_three_5[16:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-31:C_MANT_FP64-32]; |
| Q_sqrt1={{(C_MANT_FP64-11){1'b0}},Qcnt_three_5[16:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-33:C_MANT_FP64-34]; |
| Q_sqrt2={{(C_MANT_FP64-12){1'b0}},Qcnt_three_5[16:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b000110: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-35:C_MANT_FP64-36]; |
| Q_sqrt0={{(C_MANT_FP64-13){1'b0}},Qcnt_three_6[19:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-37:C_MANT_FP64-38]; |
| Q_sqrt1={{(C_MANT_FP64-14){1'b0}},Qcnt_three_6[19:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-39:C_MANT_FP64-40]; |
| Q_sqrt2={{(C_MANT_FP64-15){1'b0}},Qcnt_three_6[19:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b000111: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-41:C_MANT_FP64-42]; |
| Q_sqrt0={{(C_MANT_FP64-16){1'b0}},Qcnt_three_7[22:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-43:C_MANT_FP64-44]; |
| Q_sqrt1={{(C_MANT_FP64-17){1'b0}},Qcnt_three_7[22:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-45:C_MANT_FP64-46]; |
| Q_sqrt2={{(C_MANT_FP64-18){1'b0}},Qcnt_three_7[22:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-47:C_MANT_FP64-48]; |
| Q_sqrt0={{(C_MANT_FP64-19){1'b0}},Qcnt_three_8[25:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-49:C_MANT_FP64-50]; |
| Q_sqrt1={{(C_MANT_FP64-20){1'b0}},Qcnt_three_8[25:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-51:C_MANT_FP64-52]; |
| Q_sqrt2={{(C_MANT_FP64-21){1'b0}},Qcnt_three_8[25:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-22){1'b0}},Qcnt_three_9[28:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-23){1'b0}},Qcnt_three_9[28:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-24){1'b0}},Qcnt_three_9[28:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-25){1'b0}},Qcnt_three_10[31:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-26){1'b0}},Qcnt_three_10[31:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-27){1'b0}},Qcnt_three_10[31:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-28){1'b0}},Qcnt_three_11[34:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-29){1'b0}},Qcnt_three_11[34:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-30){1'b0}},Qcnt_three_11[34:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-31){1'b0}},Qcnt_three_12[37:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-32){1'b0}},Qcnt_three_12[37:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-33){1'b0}},Qcnt_three_12[37:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001101: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-34){1'b0}},Qcnt_three_13[40:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-35){1'b0}},Qcnt_three_13[40:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-36){1'b0}},Qcnt_three_13[40:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001110: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-37){1'b0}},Qcnt_three_14[43:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-38){1'b0}},Qcnt_three_14[43:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-39){1'b0}},Qcnt_three_14[43:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b001111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-40){1'b0}},Qcnt_three_15[46:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-41){1'b0}},Qcnt_three_15[46:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-42){1'b0}},Qcnt_three_15[46:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b010000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-43){1'b0}},Qcnt_three_16[49:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-44){1'b0}},Qcnt_three_16[49:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-45){1'b0}},Qcnt_three_16[49:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b010001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-46){1'b0}},Qcnt_three_17[52:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-47){1'b0}},Qcnt_three_17[52:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-48){1'b0}},Qcnt_three_17[52:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| 6'b010010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-49){1'b0}},Qcnt_three_18[55:2]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-50){1'b0}},Qcnt_three_18[55:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-51){1'b0}},Qcnt_three_18[55:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| |
| default : |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64+1:C_MANT_FP64]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_three_0[2]}; |
| Sqrt_Q0=Q_sqrt_com_0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-1:C_MANT_FP64-2]; |
| Q_sqrt1={{(C_MANT_FP64+4){1'b0}},Qcnt_three_0[2:1]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-3:C_MANT_FP64-4]; |
| Q_sqrt2={{(C_MANT_FP64+3){1'b0}},Qcnt_three_0[2:0]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| end |
| endcase |
| |
| end |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b10, end // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| |
| 2'b11: |
| begin |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b11, start // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| case(Crtl_cnt_S) |
| |
| 6'b000000: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64+1:C_MANT_FP64]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_four_0[3]}; |
| Sqrt_Q0=Q_sqrt_com_0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-1:C_MANT_FP64-2]; |
| Q_sqrt1={{(C_MANT_FP64+4){1'b0}},Qcnt_four_0[3:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-3:C_MANT_FP64-4]; |
| Q_sqrt2={{(C_MANT_FP64+3){1'b0}},Qcnt_four_0[3:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=Mant_D_sqrt_Norm[C_MANT_FP64-5:C_MANT_FP64-6]; |
| Q_sqrt3={{(C_MANT_FP64+2){1'b0}},Qcnt_four_0[3:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b000001: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-7:C_MANT_FP64-8]; |
| Q_sqrt0={{(C_MANT_FP64+1){1'b0}},Qcnt_four_1[6:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-9:C_MANT_FP64-10]; |
| Q_sqrt1={{(C_MANT_FP64){1'b0}},Qcnt_four_1[6:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-11:C_MANT_FP64-12]; |
| Q_sqrt2={{(C_MANT_FP64-1){1'b0}},Qcnt_four_1[6:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=Mant_D_sqrt_Norm[C_MANT_FP64-13:C_MANT_FP64-14]; |
| Q_sqrt3={{(C_MANT_FP64-2){1'b0}},Qcnt_four_1[6:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b000010: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-15:C_MANT_FP64-16]; |
| Q_sqrt0={{(C_MANT_FP64-3){1'b0}},Qcnt_four_2[10:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-17:C_MANT_FP64-18]; |
| Q_sqrt1={{(C_MANT_FP64-4){1'b0}},Qcnt_four_2[10:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-19:C_MANT_FP64-20]; |
| Q_sqrt2={{(C_MANT_FP64-5){1'b0}},Qcnt_four_2[10:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=Mant_D_sqrt_Norm[C_MANT_FP64-21:C_MANT_FP64-22]; |
| Q_sqrt3={{(C_MANT_FP64-6){1'b0}},Qcnt_four_2[10:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b000011: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-23:C_MANT_FP64-24]; |
| Q_sqrt0={{(C_MANT_FP64-7){1'b0}},Qcnt_four_3[14:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-25:C_MANT_FP64-26]; |
| Q_sqrt1={{(C_MANT_FP64-8){1'b0}},Qcnt_four_3[14:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-27:C_MANT_FP64-28]; |
| Q_sqrt2={{(C_MANT_FP64-9){1'b0}},Qcnt_four_3[14:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=Mant_D_sqrt_Norm[C_MANT_FP64-29:C_MANT_FP64-30]; |
| Q_sqrt3={{(C_MANT_FP64-10){1'b0}},Qcnt_four_3[14:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b000100: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-31:C_MANT_FP64-32]; |
| Q_sqrt0={{(C_MANT_FP64-11){1'b0}},Qcnt_four_4[18:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-33:C_MANT_FP64-34]; |
| Q_sqrt1={{(C_MANT_FP64-12){1'b0}},Qcnt_four_4[18:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-35:C_MANT_FP64-36]; |
| Q_sqrt2={{(C_MANT_FP64-13){1'b0}},Qcnt_four_4[18:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=Mant_D_sqrt_Norm[C_MANT_FP64-37:C_MANT_FP64-38]; |
| Q_sqrt3={{(C_MANT_FP64-14){1'b0}},Qcnt_four_4[18:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b000101: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-39:C_MANT_FP64-40]; |
| Q_sqrt0={{(C_MANT_FP64-15){1'b0}},Qcnt_four_5[22:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-41:C_MANT_FP64-42]; |
| Q_sqrt1={{(C_MANT_FP64-16){1'b0}},Qcnt_four_5[22:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-43:C_MANT_FP64-44]; |
| Q_sqrt2={{(C_MANT_FP64-17){1'b0}},Qcnt_four_5[22:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=Mant_D_sqrt_Norm[C_MANT_FP64-45:C_MANT_FP64-46]; |
| Q_sqrt3={{(C_MANT_FP64-18){1'b0}},Qcnt_four_5[22:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b000110: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64-47:C_MANT_FP64-48]; |
| Q_sqrt0={{(C_MANT_FP64-19){1'b0}},Qcnt_four_6[26:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-49:C_MANT_FP64-50]; |
| Q_sqrt1={{(C_MANT_FP64-20){1'b0}},Qcnt_four_6[26:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-51:C_MANT_FP64-52]; |
| Q_sqrt2={{(C_MANT_FP64-21){1'b0}},Qcnt_four_6[26:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-22){1'b0}},Qcnt_four_6[26:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b000111: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-23){1'b0}},Qcnt_four_7[30:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-24){1'b0}},Qcnt_four_7[30:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-25){1'b0}},Qcnt_four_7[30:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-26){1'b0}},Qcnt_four_7[30:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b001000: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-27){1'b0}},Qcnt_four_8[34:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-28){1'b0}},Qcnt_four_8[34:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-29){1'b0}},Qcnt_four_8[34:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-30){1'b0}},Qcnt_four_8[34:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b001001: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-31){1'b0}},Qcnt_four_9[38:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-32){1'b0}},Qcnt_four_9[38:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-33){1'b0}},Qcnt_four_9[38:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-34){1'b0}},Qcnt_four_9[38:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b001010: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-35){1'b0}},Qcnt_four_10[42:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-36){1'b0}},Qcnt_four_10[42:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-37){1'b0}},Qcnt_four_10[42:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-38){1'b0}},Qcnt_four_10[42:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b001011: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-39){1'b0}},Qcnt_four_11[46:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-40){1'b0}},Qcnt_four_11[46:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-41){1'b0}},Qcnt_four_11[46:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-42){1'b0}},Qcnt_four_11[46:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b001100: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-43){1'b0}},Qcnt_four_12[50:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-44){1'b0}},Qcnt_four_12[50:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-45){1'b0}},Qcnt_four_12[50:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-46){1'b0}},Qcnt_four_12[50:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| 6'b001101: |
| begin |
| Sqrt_DI[0]=2'b00; |
| Q_sqrt0={{(C_MANT_FP64-47){1'b0}},Qcnt_four_13[54:3]}; |
| Sqrt_Q0=Quotient_DP[0]?Q_sqrt_com_0:Q_sqrt0; |
| Sqrt_DI[1]=2'b00; |
| Q_sqrt1={{(C_MANT_FP64-48){1'b0}},Qcnt_four_13[54:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=2'b00; |
| Q_sqrt2={{(C_MANT_FP64-49){1'b0}},Qcnt_four_13[54:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=2'b00; |
| Q_sqrt3={{(C_MANT_FP64-50){1'b0}},Qcnt_four_13[54:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| |
| default: |
| begin |
| Sqrt_DI[0]=Mant_D_sqrt_Norm[C_MANT_FP64+1:C_MANT_FP64]; |
| Q_sqrt0={{(C_MANT_FP64+5){1'b0}},Qcnt_four_0[3]}; |
| Sqrt_Q0=Q_sqrt_com_0; |
| Sqrt_DI[1]=Mant_D_sqrt_Norm[C_MANT_FP64-1:C_MANT_FP64-2]; |
| Q_sqrt1={{(C_MANT_FP64+4){1'b0}},Qcnt_four_0[3:2]}; |
| Sqrt_Q1=Sqrt_quotinent_S[3]?Q_sqrt_com_1:Q_sqrt1; |
| Sqrt_DI[2]=Mant_D_sqrt_Norm[C_MANT_FP64-3:C_MANT_FP64-4]; |
| Q_sqrt2={{(C_MANT_FP64+3){1'b0}},Qcnt_four_0[3:1]}; |
| Sqrt_Q2=Sqrt_quotinent_S[2]?Q_sqrt_com_2:Q_sqrt2; |
| Sqrt_DI[3]=Mant_D_sqrt_Norm[C_MANT_FP64-5:C_MANT_FP64-6]; |
| Q_sqrt3={{(C_MANT_FP64+2){1'b0}},Qcnt_four_0[3:0]}; |
| Sqrt_Q3=Sqrt_quotinent_S[1]?Q_sqrt_com_3:Q_sqrt3; |
| end |
| endcase |
| end |
| endcase |
| ///////////////////////////////////////////////////////////////////////////// |
| // Operands for square root when Iteration_unit_num_S = 2'b11, end // |
| ///////////////////////////////////////////////////////////////////////////// |
| end |
| |
| |
| |
| assign Sqrt_R0= ((Sqrt_start_dly_S)?'0:{Partial_remainder_DP[C_MANT_FP64+5:0]}); |
| assign Sqrt_R1= {Iteration_cell_sum_AMASK_D[0][C_MANT_FP64+5],Iteration_cell_sum_AMASK_D[0][C_MANT_FP64+2:0],Sqrt_DO[0]} ; |
| assign Sqrt_R2= {Iteration_cell_sum_AMASK_D[1][C_MANT_FP64+5],Iteration_cell_sum_AMASK_D[1][C_MANT_FP64+2:0],Sqrt_DO[1]}; |
| assign Sqrt_R3= {Iteration_cell_sum_AMASK_D[2][C_MANT_FP64+5],Iteration_cell_sum_AMASK_D[2][C_MANT_FP64+2:0],Sqrt_DO[2]}; |
| assign Sqrt_R4= {Iteration_cell_sum_AMASK_D[3][C_MANT_FP64+5],Iteration_cell_sum_AMASK_D[3][C_MANT_FP64+2:0],Sqrt_DO[3]}; |
| |
| logic [C_MANT_FP64+5:0] Denominator_se_format_DB; // |
| |
| assign Denominator_se_format_DB={Denominator_se_DB[C_MANT_FP64+1:C_MANT_FP64-C_MANT_FP16ALT],{FP16ALT_SO?FP16ALT_SO:Denominator_se_DB[C_MANT_FP64-C_MANT_FP16ALT-1]}, |
| Denominator_se_DB[C_MANT_FP64-C_MANT_FP16ALT-2:C_MANT_FP64-C_MANT_FP16],{FP16_SO?FP16_SO:Denominator_se_DB[C_MANT_FP64-C_MANT_FP16-1]}, |
| Denominator_se_DB[C_MANT_FP64-C_MANT_FP16-2:C_MANT_FP64-C_MANT_FP32],{FP32_SO?FP32_SO:Denominator_se_DB[C_MANT_FP64-C_MANT_FP32-1]}, |
| Denominator_se_DB[C_MANT_FP64-C_MANT_FP32-2:C_MANT_FP64-C_MANT_FP64],FP64_SO,3'b0} ; |
| // for iteration cell_U0 |
| logic [C_MANT_FP64+5:0] First_iteration_cell_div_a_D,First_iteration_cell_div_b_D; |
| logic Sel_b_for_first_S; |
| |
| |
| assign First_iteration_cell_div_a_D=(Div_start_dly_S)?{Numerator_se_D[C_MANT_FP64+1:C_MANT_FP64-C_MANT_FP16ALT],{FP16ALT_SO?FP16ALT_SO:Numerator_se_D[C_MANT_FP64-C_MANT_FP16ALT-1]}, |
| Numerator_se_D[C_MANT_FP64-C_MANT_FP16ALT-2:C_MANT_FP64-C_MANT_FP16],{FP16_SO?FP16_SO:Numerator_se_D[C_MANT_FP64-C_MANT_FP16-1]}, |
| Numerator_se_D[C_MANT_FP64-C_MANT_FP16-2:C_MANT_FP64-C_MANT_FP32],{FP32_SO?FP32_SO:Numerator_se_D[C_MANT_FP64-C_MANT_FP32-1]}, |
| Numerator_se_D[C_MANT_FP64-C_MANT_FP32-2:C_MANT_FP64-C_MANT_FP64],FP64_SO,3'b0} |
| :{Partial_remainder_DP[C_MANT_FP64+4:C_MANT_FP64-C_MANT_FP16ALT+3],{FP16ALT_SO?Quotient_DP[0]:Partial_remainder_DP[C_MANT_FP64-C_MANT_FP16ALT+2]}, |
| Partial_remainder_DP[C_MANT_FP64-C_MANT_FP16ALT+1:C_MANT_FP64-C_MANT_FP16+3],{FP16_SO?Quotient_DP[0]:Partial_remainder_DP[C_MANT_FP64-C_MANT_FP16+2]}, |
| Partial_remainder_DP[C_MANT_FP64-C_MANT_FP16+1:C_MANT_FP64-C_MANT_FP32+3],{FP32_SO?Quotient_DP[0]:Partial_remainder_DP[C_MANT_FP64-C_MANT_FP32+2]}, |
| Partial_remainder_DP[C_MANT_FP64-C_MANT_FP32+1:C_MANT_FP64-C_MANT_FP64+3],FP64_SO&&Quotient_DP[0],3'b0}; |
| assign Sel_b_for_first_S=(Div_start_dly_S)?1:Quotient_DP[0]; |
| assign First_iteration_cell_div_b_D=Sel_b_for_first_S?Denominator_se_format_DB:{Denominator_se_D,4'b0}; |
| assign Iteration_cell_a_BMASK_D[0]=Sqrt_enable_SO?Sqrt_R0:{First_iteration_cell_div_a_D}; |
| assign Iteration_cell_b_BMASK_D[0]=Sqrt_enable_SO?Sqrt_Q0:{First_iteration_cell_div_b_D}; |
| |
| |
| |
| // for iteration cell_U1 |
| logic [C_MANT_FP64+5:0] Sec_iteration_cell_div_a_D,Sec_iteration_cell_div_b_D; |
| logic Sel_b_for_sec_S; |
| generate |
| if(|Iteration_unit_num_S) |
| begin |
| assign Sel_b_for_sec_S=~Iteration_cell_sum_AMASK_D[0][C_MANT_FP64+5]; |
| assign Sec_iteration_cell_div_a_D={Iteration_cell_sum_AMASK_D[0][C_MANT_FP64+4:C_MANT_FP64-C_MANT_FP16ALT+3],{FP16ALT_SO?Sel_b_for_sec_S:Iteration_cell_sum_AMASK_D[0][C_MANT_FP64-C_MANT_FP16ALT+2]}, |
| Iteration_cell_sum_AMASK_D[0][C_MANT_FP64-C_MANT_FP16ALT+1:C_MANT_FP64-C_MANT_FP16+3],{FP16_SO?Sel_b_for_sec_S:Iteration_cell_sum_AMASK_D[0][C_MANT_FP64-C_MANT_FP16+2]}, |
| Iteration_cell_sum_AMASK_D[0][C_MANT_FP64-C_MANT_FP16+1:C_MANT_FP64-C_MANT_FP32+3],{FP32_SO?Sel_b_for_sec_S:Iteration_cell_sum_AMASK_D[0][C_MANT_FP64-C_MANT_FP32+2]}, |
| Iteration_cell_sum_AMASK_D[0][C_MANT_FP64-C_MANT_FP32+1:C_MANT_FP64-C_MANT_FP64+3],FP64_SO&&Sel_b_for_sec_S,3'b0}; |
| assign Sec_iteration_cell_div_b_D=Sel_b_for_sec_S?Denominator_se_format_DB:{Denominator_se_D,4'b0}; |
| assign Iteration_cell_a_BMASK_D[1]=Sqrt_enable_SO?Sqrt_R1:{Sec_iteration_cell_div_a_D}; |
| assign Iteration_cell_b_BMASK_D[1]=Sqrt_enable_SO?Sqrt_Q1:{Sec_iteration_cell_div_b_D}; |
| end |
| endgenerate |
| |
| // for iteration cell_U2 |
| logic [C_MANT_FP64+5:0] Thi_iteration_cell_div_a_D,Thi_iteration_cell_div_b_D; |
| logic Sel_b_for_thi_S; |
| generate |
| if((Iteration_unit_num_S==2'b10) | (Iteration_unit_num_S==2'b11)) |
| begin |
| assign Sel_b_for_thi_S=~Iteration_cell_sum_AMASK_D[1][C_MANT_FP64+5]; |
| assign Thi_iteration_cell_div_a_D={Iteration_cell_sum_AMASK_D[1][C_MANT_FP64+4:C_MANT_FP64-C_MANT_FP16ALT+3],{FP16ALT_SO?Sel_b_for_thi_S:Iteration_cell_sum_AMASK_D[1][C_MANT_FP64-C_MANT_FP16ALT+2]}, |
| Iteration_cell_sum_AMASK_D[1][C_MANT_FP64-C_MANT_FP16ALT+1:C_MANT_FP64-C_MANT_FP16+3],{FP16_SO?Sel_b_for_thi_S:Iteration_cell_sum_AMASK_D[1][C_MANT_FP64-C_MANT_FP16+2]}, |
| Iteration_cell_sum_AMASK_D[1][C_MANT_FP64-C_MANT_FP16+1:C_MANT_FP64-C_MANT_FP32+3],{FP32_SO?Sel_b_for_thi_S:Iteration_cell_sum_AMASK_D[1][C_MANT_FP64-C_MANT_FP32+2]}, |
| Iteration_cell_sum_AMASK_D[1][C_MANT_FP64-C_MANT_FP32+1:C_MANT_FP64-C_MANT_FP64+3],FP64_SO&&Sel_b_for_thi_S,3'b0}; |
| assign Thi_iteration_cell_div_b_D=Sel_b_for_thi_S?Denominator_se_format_DB:{Denominator_se_D,4'b0}; |
| assign Iteration_cell_a_BMASK_D[2]=Sqrt_enable_SO?Sqrt_R2:{Thi_iteration_cell_div_a_D}; |
| assign Iteration_cell_b_BMASK_D[2]=Sqrt_enable_SO?Sqrt_Q2:{Thi_iteration_cell_div_b_D}; |
| end |
| endgenerate |
| |
| // for iteration cell_U3 |
| logic [C_MANT_FP64+5:0] Fou_iteration_cell_div_a_D,Fou_iteration_cell_div_b_D; |
| logic Sel_b_for_fou_S; |
| |
| generate |
| if(Iteration_unit_num_S==2'b11) |
| begin |
| assign Sel_b_for_fou_S=~Iteration_cell_sum_AMASK_D[2][C_MANT_FP64+5]; |
| assign Fou_iteration_cell_div_a_D={Iteration_cell_sum_AMASK_D[2][C_MANT_FP64+4:C_MANT_FP64-C_MANT_FP16ALT+3],{FP16ALT_SO?Sel_b_for_fou_S:Iteration_cell_sum_AMASK_D[2][C_MANT_FP64-C_MANT_FP16ALT+2]}, |
| Iteration_cell_sum_AMASK_D[2][C_MANT_FP64-C_MANT_FP16ALT+1:C_MANT_FP64-C_MANT_FP16+3],{FP16_SO?Sel_b_for_fou_S:Iteration_cell_sum_AMASK_D[2][C_MANT_FP64-C_MANT_FP16+2]}, |
| Iteration_cell_sum_AMASK_D[2][C_MANT_FP64-C_MANT_FP16+1:C_MANT_FP64-C_MANT_FP32+3],{FP32_SO?Sel_b_for_fou_S:Iteration_cell_sum_AMASK_D[2][C_MANT_FP64-C_MANT_FP32+2]}, |
| Iteration_cell_sum_AMASK_D[2][C_MANT_FP64-C_MANT_FP32+1:C_MANT_FP64-C_MANT_FP64+3],FP64_SO&&Sel_b_for_fou_S,3'b0}; |
| assign Fou_iteration_cell_div_b_D=Sel_b_for_fou_S?Denominator_se_format_DB:{Denominator_se_D,4'b0}; |
| assign Iteration_cell_a_BMASK_D[3]=Sqrt_enable_SO?Sqrt_R3:{Fou_iteration_cell_div_a_D}; |
| assign Iteration_cell_b_BMASK_D[3]=Sqrt_enable_SO?Sqrt_Q3:{Fou_iteration_cell_div_b_D}; |
| end |
| endgenerate |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Masking Contrl // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| |
| logic [C_MANT_FP64+1+4:0] Mask_bits_ctl_S; //For extension |
| |
| assign Mask_bits_ctl_S =58'h3ff_ffff_ffff_ffff; //It is not needed. The corresponding process is handled the above codes |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Iteration Instances with masking control // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| |
| logic Div_enable_SI [3:0]; |
| logic Div_start_dly_SI [3:0]; |
| logic Sqrt_enable_SI [3:0]; |
| generate |
| genvar i,j; |
| for (i=0; i <= Iteration_unit_num_S ; i++) |
| begin |
| for (j = 0; j <= C_MANT_FP64+5; j++) begin |
| assign Iteration_cell_a_D[i][j] = Mask_bits_ctl_S[j] && Iteration_cell_a_BMASK_D[i][j]; |
| assign Iteration_cell_b_D[i][j] = Mask_bits_ctl_S[j] && Iteration_cell_b_BMASK_D[i][j]; |
| assign Iteration_cell_sum_AMASK_D[i][j] = Mask_bits_ctl_S[j] && Iteration_cell_sum_D[i][j]; |
| end |
| |
| assign Div_enable_SI[i] = Div_enable_SO; |
| assign Div_start_dly_SI[i] = Div_start_dly_S; |
| assign Sqrt_enable_SI[i] = Sqrt_enable_SO; |
| iteration_div_sqrt_mvp #(C_MANT_FP64+6) iteration_div_sqrt |
| ( |
| .A_DI (Iteration_cell_a_D[i] ), |
| .B_DI (Iteration_cell_b_D[i] ), |
| .Div_enable_SI (Div_enable_SI[i] ), |
| .Div_start_dly_SI (Div_start_dly_SI[i] ), |
| .Sqrt_enable_SI (Sqrt_enable_SI[i] ), |
| .D_DI (Sqrt_DI[i] ), |
| .D_DO (Sqrt_DO[i] ), |
| .Sum_DO (Iteration_cell_sum_D[i] ), |
| .Carry_out_DO (Iteration_cell_carry_D[i] ) |
| ); |
| |
| end |
| |
| endgenerate |
| |
| |
| |
| always_comb |
| begin |
| case (Iteration_unit_num_S) |
| 2'b00: |
| begin |
| if(Fsm_enable_S) |
| Partial_remainder_DN = Sqrt_enable_SO?Sqrt_R1:Iteration_cell_sum_AMASK_D[0]; |
| else |
| Partial_remainder_DN = Partial_remainder_DP; |
| end |
| 2'b01: |
| begin |
| if(Fsm_enable_S) |
| Partial_remainder_DN = Sqrt_enable_SO?Sqrt_R2:Iteration_cell_sum_AMASK_D[1]; |
| else |
| Partial_remainder_DN = Partial_remainder_DP; |
| end |
| 2'b10: |
| begin |
| if(Fsm_enable_S) |
| Partial_remainder_DN = Sqrt_enable_SO?Sqrt_R3:Iteration_cell_sum_AMASK_D[2]; |
| else |
| Partial_remainder_DN = Partial_remainder_DP; |
| end |
| 2'b11: |
| begin |
| if(Fsm_enable_S) |
| Partial_remainder_DN = Sqrt_enable_SO?Sqrt_R4:Iteration_cell_sum_AMASK_D[3]; |
| else |
| Partial_remainder_DN = Partial_remainder_DP; |
| end |
| endcase |
| end |
| |
| |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) // partial_remainder |
| begin |
| if(~Rst_RBI) |
| begin |
| Partial_remainder_DP <= '0; |
| end |
| else |
| begin |
| Partial_remainder_DP <= Partial_remainder_DN; |
| end |
| end |
| |
| logic [C_MANT_FP64+4:0] Quotient_DN; |
| |
| always_comb // Can choosen the different carry-outs based on different operations |
| begin |
| case (Iteration_unit_num_S) |
| 2'b00: |
| begin |
| if(Fsm_enable_S) |
| Quotient_DN= Sqrt_enable_SO ? {Quotient_DP[C_MANT_FP64+3:0],Sqrt_quotinent_S[3]} :{Quotient_DP[C_MANT_FP64+3:0],Iteration_cell_carry_D[0]}; |
| else |
| Quotient_DN= Quotient_DP; |
| end |
| 2'b01: |
| begin |
| if(Fsm_enable_S) |
| Quotient_DN= Sqrt_enable_SO ? {Quotient_DP[C_MANT_FP64+2:0],Sqrt_quotinent_S[3:2]} :{Quotient_DP[C_MANT_FP64+2:0],Iteration_cell_carry_D[0],Iteration_cell_carry_D[1]}; |
| else |
| Quotient_DN= Quotient_DP; |
| end |
| 2'b10: |
| begin |
| if(Fsm_enable_S) |
| Quotient_DN= Sqrt_enable_SO ? {Quotient_DP[C_MANT_FP64+1:0],Sqrt_quotinent_S[3:1]} : {Quotient_DP[C_MANT_FP64+1:0],Iteration_cell_carry_D[0],Iteration_cell_carry_D[1],Iteration_cell_carry_D[2]}; |
| else |
| Quotient_DN= Quotient_DP; |
| end |
| 2'b11: |
| begin |
| if(Fsm_enable_S) |
| Quotient_DN= Sqrt_enable_SO ? {Quotient_DP[C_MANT_FP64:0],Sqrt_quotinent_S } : {Quotient_DP[C_MANT_FP64:0],Iteration_cell_carry_D[0],Iteration_cell_carry_D[1],Iteration_cell_carry_D[2],Iteration_cell_carry_D[3]}; |
| else |
| Quotient_DN= Quotient_DP; |
| end |
| endcase |
| end |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) // Quotient |
| begin |
| if(~Rst_RBI) |
| begin |
| Quotient_DP <= '0; |
| end |
| else |
| Quotient_DP <= Quotient_DN; |
| end |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // Precision Control for outputs // |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| |
| //////////////////////one iteration unit, start/////////////////////////////////////// |
| generate |
| if(Iteration_unit_num_S==2'b00) |
| begin |
| always_comb |
| begin |
| case (Format_sel_S) |
| 2'b00: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+4:0],{(C_MANT_FP64-C_MANT_FP32){1'b0}}}; //+4 |
| end |
| 6'h17: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32:0],{(C_MANT_FP64-C_MANT_FP32+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h16: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-1:0],{(C_MANT_FP64-C_MANT_FP32+4+1){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h15: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-2:0],{(C_MANT_FP64-C_MANT_FP32+4+2){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h14: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-3:0],{(C_MANT_FP64-C_MANT_FP32+4+3){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h13: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-4:0],{(C_MANT_FP64-C_MANT_FP32+4+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h12: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-5:0],{(C_MANT_FP64-C_MANT_FP32+4+5){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h11: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-6:0],{(C_MANT_FP64-C_MANT_FP32+4+6){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h10: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-7:0],{(C_MANT_FP64-C_MANT_FP32+4+7){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0f: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-8:0],{(C_MANT_FP64-C_MANT_FP32+4+8){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-9:0],{(C_MANT_FP64-C_MANT_FP32+4+9){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0d: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-10:0],{(C_MANT_FP64-C_MANT_FP32+4+10){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-11:0],{(C_MANT_FP64-C_MANT_FP32+4+11){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0b: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-12:0],{(C_MANT_FP64-C_MANT_FP32+4+12){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-13:0],{(C_MANT_FP64-C_MANT_FP32+4+13){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h09: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-14:0],{(C_MANT_FP64-C_MANT_FP32+4+14){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-15:0],{(C_MANT_FP64-C_MANT_FP32+4+15){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h07: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-16:0],{(C_MANT_FP64-C_MANT_FP32+4+16){1'b0}}}; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+4:0],{(C_MANT_FP64-C_MANT_FP32){1'b0}}}; //+4 |
| end |
| endcase |
| end |
| |
| 2'b01: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = Quotient_DP[C_MANT_FP64+4:0]; //+4 |
| end |
| 6'h34: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64:0],{(4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h33: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-1:0],{(4+1){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h32: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-2:0],{(4+2){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h31: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-3:0],{(4+3){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h30: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-4:0],{(4+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h2f: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-5:0],{(4+5){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h2e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-6:0],{(4+6){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h2d: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-7:0],{(4+7){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h2c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-8:0],{(4+8){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h2b: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-9:0],{(4+9){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h2a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-10:0],{(4+10){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h29: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-11:0],{(4+11){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h28: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-12:0],{(4+12){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h27: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-13:0],{(4+13){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h26: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-14:0],{(4+14){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h25: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-15:0],{(4+15){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h24: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-16:0],{(4+16){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h23: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-17:0],{(4+17){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h22: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-18:0],{(4+18){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h21: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-19:0],{(4+19){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h20: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-20:0],{(4+20){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h1f: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-21:0],{(4+21){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h1e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-22:0],{(4+22){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h1d: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-23:0],{(4+23){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h1c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-24:0],{(4+24){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h1b: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-25:0],{(4+25){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h1a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-26:0],{(4+26){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h19: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-27:0],{(4+27){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h18: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-28:0],{(4+28){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h17: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-29:0],{(4+29){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h16: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-30:0],{(4+30){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h15: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-31:0],{(4+31){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h14: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-32:0],{(4+32){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h13: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-33:0],{(4+33){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h12: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-34:0],{(4+34){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h11: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-35:0],{(4+35){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h10: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-36:0],{(4+36){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0f: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-37:0],{(4+37){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-38:0],{(4+38){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0d: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-39:0],{(4+39){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-40:0],{(4+40){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0b: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-41:0],{(4+41){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-42:0],{(4+42){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h09: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-43:0],{(4+43){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-44:0],{(4+44){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h07: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-45:0],{(4+45){1'b0}}}; //Precision_ctl_S+1 |
| end |
| default: |
| begin |
| Mant_result_prenorm_DO = Quotient_DP[C_MANT_FP64+4:0]; //+4 |
| end |
| endcase |
| end |
| |
| 2'b10: |
| begin |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+4:0],{(C_MANT_FP64-C_MANT_FP16){1'b0}}}; //+4 |
| end |
| 6'h0a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16:0],{(C_MANT_FP64-C_MANT_FP16+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h09: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16-1:0],{(C_MANT_FP64-C_MANT_FP16+4+1){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16-2:0],{(C_MANT_FP64-C_MANT_FP16+4+2){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h07: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16-3:0],{(C_MANT_FP64-C_MANT_FP16+4+3){1'b0}}}; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+4:0],{(C_MANT_FP64-C_MANT_FP16){1'b0}}}; //+4 |
| end |
| endcase |
| end |
| |
| 2'b11: |
| begin |
| |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}}}; //+4 |
| end |
| 6'h07: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT:0],{(C_MANT_FP64-C_MANT_FP16ALT+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}}}; //+4 |
| end |
| endcase |
| end |
| endcase |
| end |
| end |
| endgenerate |
| //////////////////////one iteration unit, end////////////////////////////////////////// |
| |
| //////////////////////two iteration units, start/////////////////////////////////////// |
| generate |
| if(Iteration_unit_num_S==2'b01) |
| begin |
| always_comb |
| begin |
| case (Format_sel_S) |
| 2'b00: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+4:0],{(C_MANT_FP64-C_MANT_FP32){1'b0}}}; //+4 |
| end |
| 6'h17,6'h16: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32:0],{(C_MANT_FP64-C_MANT_FP32+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h15,6'h14: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-2:0],{(C_MANT_FP64-C_MANT_FP32+4+2){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h13,6'h12: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-4:0],{(C_MANT_FP64-C_MANT_FP32+4+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h11,6'h10: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-6:0],{(C_MANT_FP64-C_MANT_FP32+4+6){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0f,6'h0e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-8:0],{(C_MANT_FP64-C_MANT_FP32+4+8){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0d,6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-10:0],{(C_MANT_FP64-C_MANT_FP32+4+10){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0b,6'h0a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-12:0],{(C_MANT_FP64-C_MANT_FP32+4+12){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h09,6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-14:0],{(C_MANT_FP64-C_MANT_FP32+4+14){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-16:0],{(C_MANT_FP64-C_MANT_FP32+4+16){1'b0}}}; //Precision_ctl_S+1 |
| end |
| default: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+4:0],{(C_MANT_FP64-C_MANT_FP32){1'b0}}}; //+4 |
| end |
| endcase |
| end |
| 2'b01: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64+3:0],1'b0}; //+3 |
| end |
| 6'h34: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64+1:1],{(4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h33,6'h32: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-1:0],{(4+1){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h31,6'h30: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-3:0],{(4+3){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h2f,6'h2e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-5:0],{(4+5){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h2d,6'h2c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-7:0],{(4+7){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h2b,6'h2a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-9:0],{(4+9){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h29,6'h28: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-11:0],{(4+11){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h27,6'h26: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-13:0],{(4+13){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h25,6'h24: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-15:0],{(4+15){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h23,6'h22: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-17:0],{(4+17){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h21,6'h20: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-19:0],{(4+19){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h1f,6'h1e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-21:0],{(4+21){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h1d,6'h1c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-23:0],{(4+23){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h1b,6'h1a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-25:0],{(4+25){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h19,6'h18: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-27:0],{(4+27){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h17,6'h16: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-29:0],{(4+29){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h15,6'h14: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-31:0],{(4+31){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h13,6'h12: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-33:0],{(4+33){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h11,6'h10: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-35:0],{(4+35){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h0f,6'h0e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-37:0],{(4+37){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h0d,6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-39:0],{(4+39){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h0b,6'h0a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-41:0],{(4+41){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h09,6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-43:0],{(4+43){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h07: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-45:0],{(4+45){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64+3:0],1'b0}; //+3 |
| end |
| endcase |
| end |
| |
| 2'b10: |
| begin |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+3:0],{(C_MANT_FP64-C_MANT_FP16+1){1'b0}} }; //+3 |
| end |
| 6'h0a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+1:1],{(C_MANT_FP64-C_MANT_FP16+4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h09,6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16-1:0],{(C_MANT_FP64-C_MANT_FP16+4+1){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h07: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16-3:0],{(C_MANT_FP64-C_MANT_FP16+4+3){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+4:0],{(C_MANT_FP64-C_MANT_FP16){1'b0}} }; //+4 |
| end |
| endcase |
| end |
| |
| 2'b11: |
| begin |
| |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}} }; //+4 |
| end |
| 6'h07: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT:0],{(C_MANT_FP64-C_MANT_FP16ALT+4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}} }; //+4 |
| end |
| endcase |
| end |
| endcase |
| end |
| end |
| endgenerate |
| //////////////////////two iteration units, end////////////////////////////////////////// |
| |
| //////////////////////three iteration units, start/////////////////////////////////////// |
| generate |
| if(Iteration_unit_num_S==2'b10) |
| begin |
| always_comb |
| begin |
| case (Format_sel_S) |
| 2'b00: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+3:0],{(C_MANT_FP64-C_MANT_FP32+1){1'b0}}}; //+3 |
| end |
| 6'h17,6'h16,6'h15: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32:0],{(C_MANT_FP64-C_MANT_FP32+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h14,6'h13,6'h12: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-3:0],{(C_MANT_FP64-C_MANT_FP32+4+3){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h11,6'h10,6'h0f: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-6:0],{(C_MANT_FP64-C_MANT_FP32+4+6){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0e,6'h0d,6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-9:0],{(C_MANT_FP64-C_MANT_FP32+4+9){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0b,6'h0a,6'h09: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-12:0],{(C_MANT_FP64-C_MANT_FP32+4+12){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h08,6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-15:0],{(C_MANT_FP64-C_MANT_FP32+4+15){1'b0}}}; //Precision_ctl_S+1 |
| end |
| default: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+3:0],{(C_MANT_FP64-C_MANT_FP32+1){1'b0}}}; //+3 |
| end |
| endcase |
| end |
| |
| 2'b01: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = Quotient_DP[C_MANT_FP64+4:0]; //+4 |
| end |
| 6'h34,6'h33: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64+1:1],{(4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h32,6'h31,6'h30: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-2:0],{(4+2){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h2f,6'h2e,6'h2d: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-5:0],{(4+5){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h2c,6'h2b,6'h2a: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-8:0],{(4+8){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h29,6'h28,6'h27: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-11:0],{(4+11){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h26,6'h25,6'h24: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-14:0],{(4+14){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h23,6'h22,6'h21: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-17:0],{(4+17){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h20,6'h1f,6'h1e: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-20:0],{(4+20){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h1d,6'h1c,6'h1b: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-23:0],{(4+23){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h1a,6'h19,6'h18: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-26:0],{(4+26){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h17,6'h16,6'h15: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-29:0],{(4+29){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h14,6'h13,6'h12: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-32:0],{(4+32){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h11,6'h10,6'h0f: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-35:0],{(4+35){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h0e,6'h0d,6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-38:0],{(4+38){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h0b,6'h0a,6'h09: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-41:0],{(4+41){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h08,6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-44:0],{(4+44){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default: |
| begin |
| Mant_result_prenorm_DO = Quotient_DP[C_MANT_FP64+4:0]; //+4 |
| end |
| endcase |
| end |
| |
| 2'b10: |
| begin |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+4:0],{(C_MANT_FP64-C_MANT_FP16){1'b0}} }; //+4 |
| end |
| 6'h0a,6'h09: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+1:1],{(C_MANT_FP64-C_MANT_FP16+4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h08,6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16-2:0],{(C_MANT_FP64-C_MANT_FP16+4+2){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+4:0],{(C_MANT_FP64-C_MANT_FP16){1'b0}} }; //+4 |
| end |
| endcase |
| end |
| |
| 2'b11: |
| begin |
| |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}} }; //+4 |
| end |
| 6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+1:1],{(C_MANT_FP64-C_MANT_FP16ALT+4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}} }; //+4 |
| end |
| endcase |
| end |
| endcase |
| end |
| end |
| endgenerate |
| //////////////////////three iteration units, end////////////////////////////////////////// |
| |
| //////////////////////four iteration units, start/////////////////////////////////////// |
| generate |
| if(Iteration_unit_num_S==2'b11) |
| begin |
| always_comb |
| begin |
| case (Format_sel_S) |
| 2'b00: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+4:0],{(C_MANT_FP64-C_MANT_FP32){1'b0}}}; //+4 |
| end |
| 6'h17,6'h16,6'h15,6'h14: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32:0],{(C_MANT_FP64-C_MANT_FP32+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h13,6'h12,6'h11,6'h10: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-4:0],{(C_MANT_FP64-C_MANT_FP32+4+4){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0f,6'h0e,6'h0d,6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-8:0],{(C_MANT_FP64-C_MANT_FP32+4+8){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h0b,6'h0a,6'h09,6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-12:0],{(C_MANT_FP64-C_MANT_FP32+4+12){1'b0}}}; //Precision_ctl_S+1 |
| end |
| 6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32-16:0],{(C_MANT_FP64-C_MANT_FP32+4+16){1'b0}}}; //Precision_ctl_S+1 |
| end |
| default: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP32+4:0],{(C_MANT_FP64-C_MANT_FP32){1'b0}}}; //+4 |
| end |
| endcase |
| end |
| |
| 2'b01: |
| begin |
| case (Precision_ctl_S) |
| 6'h00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64+3:0],{(1){1'b0}}}; //+3 |
| end |
| 6'h34: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64+3:0],{(1){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h33,6'h32,6'h31,6'h30: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-1:0],{(5){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h2f,6'h2e,6'h2d,6'h2c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-5:0],{(9){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h2b,6'h2a,6'h29,6'h28: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-9:0],{(13){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h27,6'h26,6'h25,6'h24: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-13:0],{(17){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h23,6'h22,6'h21,6'h20: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-17:0],{(21){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h1f,6'h1e,6'h1d,6'h1c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-21:0],{(25){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h1b,6'h1a,6'h19,6'h18: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-25:0],{(29){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h17,6'h16,6'h15,6'h14: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-29:0],{(33){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h13,6'h12,6'h11,6'h10: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-33:0],{(37){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h0f,6'h0e,6'h0d,6'h0c: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-37:0],{(41){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h0b,6'h0a,6'h09,6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-41:0],{(45){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64-45:0],{(49){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP64+3:0],{(1){1'b0}}}; //+3 |
| end |
| endcase |
| end |
| |
| 2'b10: |
| begin |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+5:0],{(C_MANT_FP64-C_MANT_FP16-1){1'b0}} }; //+5 |
| end |
| 6'h0a,6'h09,6'h08: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+1:1],{(C_MANT_FP64-C_MANT_FP16+4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| 6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+1-4:0],{(C_MANT_FP64-C_MANT_FP16+4+3){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16+5:0],{(C_MANT_FP64-C_MANT_FP16-1){1'b0}} }; //+5 |
| end |
| endcase |
| end |
| |
| 2'b11: |
| begin |
| |
| case (Precision_ctl_S) |
| 6'b00: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}} }; //+4 |
| end |
| 6'h07,6'h06: |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT:0],{(C_MANT_FP64-C_MANT_FP16ALT+4){1'b0}} }; //Precision_ctl_S+1 |
| end |
| default : |
| begin |
| Mant_result_prenorm_DO = {Quotient_DP[C_MANT_FP16ALT+4:0],{(C_MANT_FP64-C_MANT_FP16ALT){1'b0}} }; //+4 |
| end |
| endcase |
| end |
| endcase |
| end |
| end |
| endgenerate |
| //////////////////////four iteration units, end/////////////////////////////////////// |
| |
| |
| |
| |
| |
| // resultant exponent |
| logic [C_EXP_FP64+1:0] Exp_result_prenorm_DN,Exp_result_prenorm_DP; |
| |
| logic [C_EXP_FP64+1:0] Exp_add_a_D; |
| logic [C_EXP_FP64+1:0] Exp_add_b_D; |
| logic [C_EXP_FP64+1:0] Exp_add_c_D; |
| |
| integer C_BIAS_AONE, C_HALF_BIAS; |
| always_comb |
| begin // |
| case (Format_sel_S) |
| 2'b00: |
| begin |
| C_BIAS_AONE =C_BIAS_AONE_FP32; |
| C_HALF_BIAS =C_HALF_BIAS_FP32; |
| end |
| 2'b01: |
| begin |
| C_BIAS_AONE =C_BIAS_AONE_FP64; |
| C_HALF_BIAS =C_HALF_BIAS_FP64; |
| end |
| 2'b10: |
| begin |
| C_BIAS_AONE =C_BIAS_AONE_FP16; |
| C_HALF_BIAS =C_HALF_BIAS_FP16; |
| end |
| 2'b11: |
| begin |
| C_BIAS_AONE =C_BIAS_AONE_FP16ALT; |
| C_HALF_BIAS =C_HALF_BIAS_FP16ALT; |
| end |
| endcase |
| end |
| |
| //For division, exponent=(Exp_a_D-LZ1)-(Exp_b_D-LZ2)+BIAS |
| //For square root, exponent=(Exp_a_D-LZ1)/2+(Exp_a_D-LZ1)%2+C_HALF_BIAS |
| //For exponent, in preprorces module, (Exp_a_D-LZ1) and (Exp_b_D-LZ2) have been processed with the corresponding process for denormal numbers. |
| |
| assign Exp_add_a_D = {Sqrt_start_dly_S?{Exp_num_DI[C_EXP_FP64],Exp_num_DI[C_EXP_FP64],Exp_num_DI[C_EXP_FP64],Exp_num_DI[C_EXP_FP64:1]}:{Exp_num_DI[C_EXP_FP64],Exp_num_DI[C_EXP_FP64],Exp_num_DI}}; |
| assign Exp_add_b_D = {Sqrt_start_dly_S?{1'b0,{C_EXP_ZERO_FP64},Exp_num_DI[0]}:{~Exp_den_DI[C_EXP_FP64],~Exp_den_DI[C_EXP_FP64],~Exp_den_DI}}; |
| assign Exp_add_c_D = {Div_start_dly_S?{{C_BIAS_AONE}}:{{C_HALF_BIAS}}}; |
| assign Exp_result_prenorm_DN = (Start_dly_S)?{Exp_add_a_D + Exp_add_b_D + Exp_add_c_D}:Exp_result_prenorm_DP; |
| |
| |
| always_ff @(posedge Clk_CI, negedge Rst_RBI) |
| begin |
| if(~Rst_RBI) |
| begin |
| Exp_result_prenorm_DP <= '0; |
| end |
| else |
| begin |
| Exp_result_prenorm_DP<= Exp_result_prenorm_DN; |
| end |
| end |
| |
| assign Exp_result_prenorm_DO = Exp_result_prenorm_DP; |
| |
| endmodule |