You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
930 lines
34 KiB
Verilog
930 lines
34 KiB
Verilog
3 years ago
|
// © IBM Corp. 2020
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License"), as modified by
|
||
|
// the terms below; you may not use the files in this repository except in
|
||
|
// compliance with the License as modified.
|
||
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Modified Terms:
|
||
|
//
|
||
|
// 1) For the purpose of the patent license granted to you in Section 3 of the
|
||
|
// License, the "Work" hereby includes implementations of the work of authorship
|
||
|
// in physical form.
|
||
|
//
|
||
|
// 2) Notwithstanding any terms to the contrary in the License, any licenses
|
||
|
// necessary for implementation of the Work that are available from OpenPOWER
|
||
|
// via the Power ISA End User License Agreement (EULA) are explicitly excluded
|
||
|
// hereunder, and may be obtained from OpenPOWER under the terms and conditions
|
||
|
// of the EULA.
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, the reference design
|
||
|
// distributed under the 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.
|
||
|
//
|
||
|
// Additional rights, including the ability to physically implement a softcore that
|
||
|
// is compliant with the required sections of the Power ISA Specification, are
|
||
|
// available at no cost under the terms of the OpenPOWER Power ISA EULA, which can be
|
||
|
// obtained (along with the Power ISA) here: https://openpowerfoundation.org.
|
||
|
|
||
|
`timescale 1 ns / 1 ns
|
||
|
|
||
|
`include "tri_a2o.vh"
|
||
|
|
||
|
module fu_tbllut(
|
||
|
vdd,
|
||
|
gnd,
|
||
|
clkoff_b,
|
||
|
act_dis,
|
||
|
flush,
|
||
|
delay_lclkr,
|
||
|
mpw1_b,
|
||
|
mpw2_b,
|
||
|
sg_1,
|
||
|
thold_1,
|
||
|
fpu_enable,
|
||
|
nclk,
|
||
|
si,
|
||
|
so,
|
||
|
ex2_act,
|
||
|
f_fmt_ex2_b_frac,
|
||
|
f_fmt_ex3_b_frac,
|
||
|
f_tbe_ex3_expo_lsb,
|
||
|
f_tbe_ex3_est_recip,
|
||
|
f_tbe_ex3_est_rsqrt,
|
||
|
f_tbe_ex4_recip_ue1,
|
||
|
f_tbe_ex4_lu_sh,
|
||
|
f_tbe_ex4_match_en_sp,
|
||
|
f_tbe_ex4_match_en_dp,
|
||
|
f_tbe_ex4_recip_2046,
|
||
|
f_tbe_ex4_recip_2045,
|
||
|
f_tbe_ex4_recip_2044,
|
||
|
f_tbl_ex6_est_frac,
|
||
|
f_tbl_ex5_unf_expo,
|
||
|
f_tbl_ex6_recip_den
|
||
|
);
|
||
|
inout vdd;
|
||
|
inout gnd;
|
||
|
input clkoff_b; // tiup
|
||
|
input act_dis; // ??tidn??
|
||
|
input flush; // ??tidn??
|
||
|
input [2:5] delay_lclkr; // tidn,
|
||
|
input [2:5] mpw1_b; // tidn,
|
||
|
input [0:1] mpw2_b; // tidn,
|
||
|
input sg_1;
|
||
|
input thold_1;
|
||
|
input fpu_enable; //dc_act
|
||
|
input [0:`NCLK_WIDTH-1] nclk;
|
||
|
|
||
|
input si; //perv
|
||
|
output so; //perv
|
||
|
input ex2_act; //act
|
||
|
//----------------------------
|
||
|
input [1:6] f_fmt_ex2_b_frac;
|
||
|
input [7:22] f_fmt_ex3_b_frac;
|
||
|
input f_tbe_ex3_expo_lsb;
|
||
|
input f_tbe_ex3_est_recip;
|
||
|
input f_tbe_ex3_est_rsqrt;
|
||
|
input f_tbe_ex4_recip_ue1;
|
||
|
input f_tbe_ex4_lu_sh;
|
||
|
input f_tbe_ex4_match_en_sp;
|
||
|
input f_tbe_ex4_match_en_dp;
|
||
|
input f_tbe_ex4_recip_2046;
|
||
|
input f_tbe_ex4_recip_2045;
|
||
|
input f_tbe_ex4_recip_2044;
|
||
|
//----------------------------
|
||
|
output [0:26] f_tbl_ex6_est_frac;
|
||
|
output f_tbl_ex5_unf_expo;
|
||
|
output f_tbl_ex6_recip_den; //generates den flag
|
||
|
|
||
|
// ENTITY
|
||
|
|
||
|
|
||
|
parameter tiup = 1'b1;
|
||
|
parameter tidn = 1'b0;
|
||
|
|
||
|
wire ex5_unf_expo;
|
||
|
wire [1:6] ex3_f;
|
||
|
wire ex3_sel_recip;
|
||
|
wire ex3_sel_rsqte;
|
||
|
wire ex3_sel_rsqto;
|
||
|
wire [1:20] ex3_est;
|
||
|
wire [1:20] ex3_est_recip;
|
||
|
wire [1:20] ex3_est_rsqte;
|
||
|
wire [1:20] ex3_est_rsqto;
|
||
|
wire [6:20] ex3_rng;
|
||
|
wire [6:20] ex3_rng_recip;
|
||
|
wire [6:20] ex3_rng_rsqte;
|
||
|
wire [6:20] ex3_rng_rsqto;
|
||
|
|
||
|
wire thold_0_b;
|
||
|
wire thold_0;
|
||
|
wire force_t;
|
||
|
wire sg_0;
|
||
|
wire ex3_act;
|
||
|
wire ex4_act;
|
||
|
wire ex5_act;
|
||
|
wire [0:3] spare_unused;
|
||
|
|
||
|
wire [0:5] ex3_lut_so;
|
||
|
wire [0:5] ex3_lut_si;
|
||
|
wire [0:6] act_so;
|
||
|
wire [0:6] act_si;
|
||
|
wire [0:19] ex4_lut_e_so;
|
||
|
wire [0:19] ex4_lut_e_si;
|
||
|
wire [0:14] ex4_lut_r_so;
|
||
|
wire [0:14] ex4_lut_r_si;
|
||
|
wire [0:15] ex4_lut_b_so;
|
||
|
wire [0:15] ex4_lut_b_si;
|
||
|
|
||
|
wire [6:20] ex4_rng;
|
||
|
wire [6:20] ex4_rng_b;
|
||
|
wire [1:20] ex4_est;
|
||
|
wire [1:20] ex4_est_b;
|
||
|
wire [7:22] ex4_bop;
|
||
|
wire [7:22] ex4_bop_b;
|
||
|
wire [0:36] ex4_tbl_sum;
|
||
|
wire [0:35] ex4_tbl_car;
|
||
|
wire [0:38] ex5_tbl_sum;
|
||
|
wire [0:38] ex5_tbl_car;
|
||
|
|
||
|
wire [0:79] ex5_lut_so;
|
||
|
wire [0:79] ex5_lut_si;
|
||
|
|
||
|
wire [0:27] ex6_lut_so;
|
||
|
wire [0:27] ex6_lut_si;
|
||
|
wire [0:27] ex5_lu;
|
||
|
wire [0:27] ex5_lux;
|
||
|
wire [0:26] ex5_lu_nrm;
|
||
|
wire [0:26] ex6_lu;
|
||
|
|
||
|
wire [0:27] lua_p;
|
||
|
wire [1:37] lua_t;
|
||
|
wire [1:38] lua_g;
|
||
|
wire [1:38] lua_g2;
|
||
|
wire [1:36] lua_g4;
|
||
|
wire [1:32] lua_g8;
|
||
|
wire [1:36] lua_t2;
|
||
|
wire [1:32] lua_t4;
|
||
|
wire [1:28] lua_t8;
|
||
|
wire [1:28] lua_gt8;
|
||
|
wire [0:27] lua_s0_b;
|
||
|
wire [0:27] lua_s1_b;
|
||
|
wire [0:3] lua_g16;
|
||
|
wire [0:1] lua_t16;
|
||
|
wire lua_c32;
|
||
|
wire lua_c24;
|
||
|
wire lua_c16;
|
||
|
wire lua_c08;
|
||
|
wire ex5_recip_den;
|
||
|
wire ex6_recip_den;
|
||
|
wire ex5_lu_sh;
|
||
|
wire ex5_recip_ue1;
|
||
|
wire ex5_recip_2044;
|
||
|
wire ex5_recip_2046;
|
||
|
wire ex5_recip_2045;
|
||
|
wire ex5_recip_2044_dp;
|
||
|
wire ex5_recip_2046_dp;
|
||
|
wire ex5_recip_2045_dp;
|
||
|
wire ex5_recip_2044_sp;
|
||
|
wire ex5_recip_2046_sp;
|
||
|
wire ex5_recip_2045_sp;
|
||
|
|
||
|
wire ex5_shlft_1;
|
||
|
wire ex5_shlft_0;
|
||
|
wire ex5_shrgt_1;
|
||
|
wire ex5_shrgt_2;
|
||
|
wire ex5_match_en_sp;
|
||
|
wire ex5_match_en_dp;
|
||
|
wire tbl_ex4_d1clk;
|
||
|
wire tbl_ex4_d2clk;
|
||
|
wire tbl_ex5_d1clk;
|
||
|
wire tbl_ex5_d2clk;
|
||
|
wire [0:`NCLK_WIDTH-1] tbl_ex4_lclk;
|
||
|
wire [0:`NCLK_WIDTH-1] tbl_ex5_lclk;
|
||
|
wire unused;
|
||
|
wire [0:36] ex5_tbl_sum_b;
|
||
|
wire [0:35] ex5_tbl_car_b;
|
||
|
wire ex5_match_en_sp_b;
|
||
|
wire ex5_match_en_dp_b;
|
||
|
wire ex5_recip_2046_b;
|
||
|
wire ex5_recip_2045_b;
|
||
|
wire ex5_recip_2044_b;
|
||
|
wire ex5_lu_sh_b;
|
||
|
wire ex5_recip_ue1_b;
|
||
|
|
||
|
wire ex5_sp_chop_24;
|
||
|
wire ex5_sp_chop_23;
|
||
|
wire ex5_sp_chop_22;
|
||
|
wire ex5_sp_chop_21;
|
||
|
|
||
|
//==##############################################################
|
||
|
//= map block attributes
|
||
|
//==##############################################################
|
||
|
|
||
|
assign unused = |(lua_g8[29:31]) | |(lua_g4[33:35]);
|
||
|
|
||
|
//==##############################################################
|
||
|
//= ex3 logic
|
||
|
//==##############################################################
|
||
|
|
||
|
|
||
|
tri_rlmreg_p #(.WIDTH(6)) ex3_lut_lat(
|
||
|
.force_t(force_t),
|
||
|
.d_mode(tiup),
|
||
|
.delay_lclkr(delay_lclkr[2]),
|
||
|
.mpw1_b(mpw1_b[2]),
|
||
|
.mpw2_b(mpw2_b[0]),
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.nclk(nclk),
|
||
|
.act(ex2_act),
|
||
|
.thold_b(thold_0_b),
|
||
|
.sg(sg_0),
|
||
|
.scout(ex3_lut_so),
|
||
|
.scin(ex3_lut_si),
|
||
|
//-----------------
|
||
|
.din(f_fmt_ex2_b_frac[1:6]),
|
||
|
.dout(ex3_f[1:6])
|
||
|
);
|
||
|
|
||
|
//==##############################################################
|
||
|
//= ex3 logic
|
||
|
//==##############################################################
|
||
|
|
||
|
//==###########################################
|
||
|
//= rsqrt ev lookup table
|
||
|
//==###########################################
|
||
|
|
||
|
|
||
|
fu_tblsqe ftbe(
|
||
|
.f(ex3_f[1:6]), //i--
|
||
|
.est(ex3_est_rsqte[1:20]), //o--
|
||
|
.rng(ex3_rng_rsqte[6:20]) //o--
|
||
|
);
|
||
|
|
||
|
//==###########################################
|
||
|
//= rsqrt od lookup table
|
||
|
//==###########################################
|
||
|
|
||
|
|
||
|
fu_tblsqo ftbo(
|
||
|
.f(ex3_f[1:6]), //i--
|
||
|
.est(ex3_est_rsqto[1:20]), //o--
|
||
|
.rng(ex3_rng_rsqto[6:20]) //o--
|
||
|
);
|
||
|
|
||
|
//==###########################################
|
||
|
//= recip lookup table
|
||
|
//==###########################################
|
||
|
|
||
|
|
||
|
fu_tblres ftbr(
|
||
|
.f(ex3_f[1:6]), //i--
|
||
|
.est(ex3_est_recip[1:20]), //o--
|
||
|
.rng(ex3_rng_recip[6:20]) //o--
|
||
|
);
|
||
|
|
||
|
//==###########################################
|
||
|
//= muxing
|
||
|
//==###########################################
|
||
|
|
||
|
assign ex3_sel_recip = f_tbe_ex3_est_recip;
|
||
|
assign ex3_sel_rsqte = f_tbe_ex3_est_rsqrt & (~f_tbe_ex3_expo_lsb);
|
||
|
assign ex3_sel_rsqto = f_tbe_ex3_est_rsqrt & f_tbe_ex3_expo_lsb;
|
||
|
|
||
|
assign ex3_est[1:20] = ({20{ex3_sel_recip}} & ex3_est_recip[1:20]) |
|
||
|
({20{ex3_sel_rsqte}} & ex3_est_rsqte[1:20]) |
|
||
|
({20{ex3_sel_rsqto}} & ex3_est_rsqto[1:20]); // nand2 / nand3
|
||
|
|
||
|
assign ex3_rng[6:20] = ({15{ex3_sel_recip}} & (ex3_rng_recip[6:20])) |
|
||
|
({15{ex3_sel_rsqte}} & (ex3_rng_rsqte[6:20])) |
|
||
|
({15{ex3_sel_rsqto}} & (ex3_rng_rsqto[6:20])); // nand2 / nand3
|
||
|
|
||
|
//==##############################################################
|
||
|
//= ex4 latches
|
||
|
//==##############################################################
|
||
|
|
||
|
|
||
|
tri_inv_nlats #(.WIDTH(20), .NEEDS_SRESET(0)) ex4_lut_e_lat(
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.lclk(tbl_ex4_lclk), // lclk.clk
|
||
|
.d1clk(tbl_ex4_d1clk),
|
||
|
.d2clk(tbl_ex4_d2clk),
|
||
|
.scanin(ex4_lut_e_si),
|
||
|
.scanout(ex4_lut_e_so),
|
||
|
.d(ex3_est[1:20]), //0:19
|
||
|
.qb(ex4_est_b[1:20]) //0:19
|
||
|
);
|
||
|
|
||
|
|
||
|
tri_inv_nlats #(.WIDTH(15), .NEEDS_SRESET(0)) ex4_lut_r_lat(
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.lclk(tbl_ex4_lclk), // lclk.clk
|
||
|
.d1clk(tbl_ex4_d1clk),
|
||
|
.d2clk(tbl_ex4_d2clk),
|
||
|
.scanin(ex4_lut_r_si),
|
||
|
.scanout(ex4_lut_r_so),
|
||
|
.d(ex3_rng[6:20]), //20:34
|
||
|
.qb(ex4_rng_b[6:20]) //20:34
|
||
|
);
|
||
|
|
||
|
|
||
|
tri_inv_nlats #(.WIDTH(16), .NEEDS_SRESET(0)) ex4_lut_b_lat(
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.lclk(tbl_ex4_lclk), // lclk.clk
|
||
|
.d1clk(tbl_ex4_d1clk),
|
||
|
.d2clk(tbl_ex4_d2clk),
|
||
|
.scanin(ex4_lut_b_si),
|
||
|
.scanout(ex4_lut_b_so),
|
||
|
.d(f_fmt_ex3_b_frac[7:22]), //35:50
|
||
|
.qb(ex4_bop_b[7:22]) //35:50
|
||
|
);
|
||
|
|
||
|
assign ex4_est[1:20] = (~ex4_est_b[1:20]);
|
||
|
assign ex4_rng[6:20] = (~ex4_rng_b[6:20]);
|
||
|
assign ex4_bop[7:22] = (~ex4_bop_b[7:22]);
|
||
|
|
||
|
//==##############################################################
|
||
|
//= ex4 logic : multiply
|
||
|
//==##############################################################
|
||
|
|
||
|
|
||
|
tri_fu_tblmul ftbm(
|
||
|
.vdd(vdd),
|
||
|
.gnd(gnd),
|
||
|
.x(ex4_rng[6:20]), //i-- RECODED
|
||
|
.y(ex4_bop[7:22]), //i-- SHIFTED
|
||
|
.z({tiup,ex4_est[1:20]}), //i--
|
||
|
.tbl_sum(ex4_tbl_sum[0:36]), //o--
|
||
|
.tbl_car(ex4_tbl_car[0:35]) //o--
|
||
|
);
|
||
|
|
||
|
//==##############################################################
|
||
|
//= ex5 latches
|
||
|
//==##############################################################
|
||
|
|
||
|
|
||
|
tri_inv_nlats #(.WIDTH(80), .NEEDS_SRESET(0)) ex5_lut_lat(
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.lclk(tbl_ex5_lclk), // lclk.clk
|
||
|
.d1clk(tbl_ex5_d1clk),
|
||
|
.d2clk(tbl_ex5_d2clk),
|
||
|
.scanin(ex5_lut_si),
|
||
|
.scanout(ex5_lut_so),
|
||
|
.d({ex4_tbl_sum[0:36],
|
||
|
ex4_tbl_car[0:35],
|
||
|
f_tbe_ex4_match_en_sp,
|
||
|
f_tbe_ex4_match_en_dp,
|
||
|
f_tbe_ex4_recip_2046,
|
||
|
f_tbe_ex4_recip_2045,
|
||
|
f_tbe_ex4_recip_2044,
|
||
|
f_tbe_ex4_lu_sh,
|
||
|
f_tbe_ex4_recip_ue1}),
|
||
|
//----
|
||
|
.qb({
|
||
|
ex5_tbl_sum_b[0:36],
|
||
|
ex5_tbl_car_b[0:35],
|
||
|
ex5_match_en_sp_b,
|
||
|
ex5_match_en_dp_b,
|
||
|
ex5_recip_2046_b,
|
||
|
ex5_recip_2045_b,
|
||
|
ex5_recip_2044_b,
|
||
|
ex5_lu_sh_b,
|
||
|
ex5_recip_ue1_b})
|
||
|
);
|
||
|
|
||
|
assign ex5_tbl_sum[0:36] = (~ex5_tbl_sum_b[0:36]);
|
||
|
assign ex5_tbl_car[0:35] = (~ex5_tbl_car_b[0:35]);
|
||
|
assign ex5_match_en_sp = (~ex5_match_en_sp_b);
|
||
|
assign ex5_match_en_dp = (~ex5_match_en_dp_b);
|
||
|
assign ex5_recip_2046 = (~ex5_recip_2046_b);
|
||
|
assign ex5_recip_2045 = (~ex5_recip_2045_b);
|
||
|
assign ex5_recip_2044 = (~ex5_recip_2044_b);
|
||
|
assign ex5_lu_sh = (~ex5_lu_sh_b);
|
||
|
assign ex5_recip_ue1 = (~ex5_recip_ue1_b);
|
||
|
|
||
|
assign ex5_tbl_sum[37] = tidn;
|
||
|
assign ex5_tbl_sum[38] = tidn;
|
||
|
|
||
|
assign ex5_tbl_car[36] = tidn; //tiup; -- the +1 in -mul = !mul + 1
|
||
|
assign ex5_tbl_car[37] = tidn; //tiup; -- the +1 in -mul = !mul + 1
|
||
|
assign ex5_tbl_car[38] = tidn; //tiup; -- the +1 in -mul = !mul + 1
|
||
|
|
||
|
//==##############################################################
|
||
|
//= ex5 logic : add
|
||
|
//==##############################################################
|
||
|
// all bits paricipate in the carry, but only upper bits of sum are returned
|
||
|
|
||
|
// P/G/T ------------------------------------------------------
|
||
|
assign lua_p[0:27] = ex5_tbl_sum[0:27] ^ ex5_tbl_car[0:27];
|
||
|
assign lua_t[1:37] = ex5_tbl_sum[1:37] | ex5_tbl_car[1:37];
|
||
|
assign lua_g[1:38] = ex5_tbl_sum[1:38] & ex5_tbl_car[1:38];
|
||
|
|
||
|
// LOCAL BYTE CARRY --------------------------------------------------
|
||
|
|
||
|
assign lua_g2[38] = lua_g[38];
|
||
|
assign lua_g2[37] = lua_g[37] | (lua_t[37] & lua_g[38]);
|
||
|
assign lua_g2[36] = lua_g[36] | (lua_t[36] & lua_g[37]);
|
||
|
assign lua_g2[35] = lua_g[35] | (lua_t[35] & lua_g[36]);
|
||
|
assign lua_g2[34] = lua_g[34] | (lua_t[34] & lua_g[35]);
|
||
|
assign lua_g2[33] = lua_g[33] | (lua_t[33] & lua_g[34]);
|
||
|
assign lua_g2[32] = lua_g[32] | (lua_t[32] & lua_g[33]);
|
||
|
// lua_t2(38) <= lua_t(38) ;
|
||
|
// lua_t2(37) <= lua_t(37) and lua_t(38) ;
|
||
|
assign lua_t2[36] = lua_t[36] & lua_t[37];
|
||
|
assign lua_t2[35] = lua_t[35] & lua_t[36];
|
||
|
assign lua_t2[34] = lua_t[34] & lua_t[35];
|
||
|
assign lua_t2[33] = lua_t[33] & lua_t[34];
|
||
|
assign lua_t2[32] = lua_t[32] & lua_t[33];
|
||
|
// lua_g4(38) <= lua_g2(38) ;
|
||
|
// lua_g4(37) <= lua_g2(37) ;
|
||
|
assign lua_g4[36] = lua_g2[36] | (lua_t2[36] & lua_g2[38]);
|
||
|
assign lua_g4[35] = lua_g2[35] | (lua_t2[35] & lua_g2[37]);
|
||
|
assign lua_g4[34] = lua_g2[34] | (lua_t2[34] & lua_g2[36]);
|
||
|
assign lua_g4[33] = lua_g2[33] | (lua_t2[33] & lua_g2[35]);
|
||
|
assign lua_g4[32] = lua_g2[32] | (lua_t2[32] & lua_g2[34]);
|
||
|
// lua_t4(38) <= lua_t2(38) ;
|
||
|
// lua_t4(37) <= lua_t2(37) ;
|
||
|
// lua_t4(36) <= lua_t2(36) and lua_t2(38) ;
|
||
|
// lua_t4(35) <= lua_t2(35) and lua_t2(37) ;
|
||
|
// lua_t4(34) <= lua_t2(34) and lua_t2(36) ;
|
||
|
// lua_t4(33) <= lua_t2(33) and lua_t2(35) ;
|
||
|
assign lua_t4[32] = lua_t2[32] & lua_t2[34];
|
||
|
//lua_g8(38) <= lua_g4(38) ;
|
||
|
//lua_g8(37) <= lua_g4(37) ;
|
||
|
//lua_g8(36) <= lua_g4(36) ;
|
||
|
//lua_g8(35) <= lua_g4(35) ;
|
||
|
//lua_g8(34) <= lua_g4(34) or (lua_t4(34) and lua_g4(38) );
|
||
|
//lua_g8(33) <= lua_g4(33) or (lua_t4(33) and lua_g4(37) );
|
||
|
assign lua_g8[32] = lua_g4[32] | (lua_t4[32] & lua_g4[36]);
|
||
|
//lua_t8(38) <= lua_t4(38) ;
|
||
|
//lua_t8(37) <= lua_t4(37) ;
|
||
|
//lua_t8(36) <= lua_t4(36) ;
|
||
|
//lua_t8(35) <= lua_t4(35) ;
|
||
|
//lua_t8(34) <= lua_t4(34) and lua_t4(38) ;
|
||
|
//lua_t8(33) <= lua_t4(33) and lua_t4(37) ;
|
||
|
//lua_t8(32) <= lua_t4(32) and lua_t4(36) ;
|
||
|
|
||
|
assign lua_g2[31] = lua_g[31];
|
||
|
assign lua_g2[30] = lua_g[30] | (lua_t[30] & lua_g[31]);
|
||
|
assign lua_g2[29] = lua_g[29] | (lua_t[29] & lua_g[30]);
|
||
|
assign lua_g2[28] = lua_g[28] | (lua_t[28] & lua_g[29]);
|
||
|
assign lua_g2[27] = lua_g[27] | (lua_t[27] & lua_g[28]);
|
||
|
assign lua_g2[26] = lua_g[26] | (lua_t[26] & lua_g[27]);
|
||
|
assign lua_g2[25] = lua_g[25] | (lua_t[25] & lua_g[26]);
|
||
|
assign lua_g2[24] = lua_g[24] | (lua_t[24] & lua_g[25]);
|
||
|
assign lua_t2[31] = lua_t[31];
|
||
|
assign lua_t2[30] = lua_t[30] & lua_t[31];
|
||
|
assign lua_t2[29] = lua_t[29] & lua_t[30];
|
||
|
assign lua_t2[28] = lua_t[28] & lua_t[29];
|
||
|
assign lua_t2[27] = lua_t[27] & lua_t[28];
|
||
|
assign lua_t2[26] = lua_t[26] & lua_t[27];
|
||
|
assign lua_t2[25] = lua_t[25] & lua_t[26];
|
||
|
assign lua_t2[24] = lua_t[24] & lua_t[25];
|
||
|
assign lua_g4[31] = lua_g2[31];
|
||
|
assign lua_g4[30] = lua_g2[30];
|
||
|
assign lua_g4[29] = lua_g2[29] | (lua_t2[29] & lua_g2[31]);
|
||
|
assign lua_g4[28] = lua_g2[28] | (lua_t2[28] & lua_g2[30]);
|
||
|
assign lua_g4[27] = lua_g2[27] | (lua_t2[27] & lua_g2[29]);
|
||
|
assign lua_g4[26] = lua_g2[26] | (lua_t2[26] & lua_g2[28]);
|
||
|
assign lua_g4[25] = lua_g2[25] | (lua_t2[25] & lua_g2[27]);
|
||
|
assign lua_g4[24] = lua_g2[24] | (lua_t2[24] & lua_g2[26]);
|
||
|
assign lua_t4[31] = lua_t2[31];
|
||
|
assign lua_t4[30] = lua_t2[30];
|
||
|
assign lua_t4[29] = lua_t2[29] & lua_t2[31];
|
||
|
assign lua_t4[28] = lua_t2[28] & lua_t2[30];
|
||
|
assign lua_t4[27] = lua_t2[27] & lua_t2[29];
|
||
|
assign lua_t4[26] = lua_t2[26] & lua_t2[28];
|
||
|
assign lua_t4[25] = lua_t2[25] & lua_t2[27];
|
||
|
assign lua_t4[24] = lua_t2[24] & lua_t2[26];
|
||
|
assign lua_g8[31] = lua_g4[31];
|
||
|
assign lua_g8[30] = lua_g4[30];
|
||
|
assign lua_g8[29] = lua_g4[29];
|
||
|
assign lua_g8[28] = lua_g4[28];
|
||
|
assign lua_g8[27] = lua_g4[27] | (lua_t4[27] & lua_g4[31]);
|
||
|
assign lua_g8[26] = lua_g4[26] | (lua_t4[26] & lua_g4[30]);
|
||
|
assign lua_g8[25] = lua_g4[25] | (lua_t4[25] & lua_g4[29]);
|
||
|
assign lua_g8[24] = lua_g4[24] | (lua_t4[24] & lua_g4[28]);
|
||
|
// lua_t8(31) <= lua_t4(31) ;
|
||
|
// lua_t8(30) <= lua_t4(30) ;
|
||
|
// lua_t8(29) <= lua_t4(29) ;
|
||
|
assign lua_t8[28] = lua_t4[28];
|
||
|
assign lua_t8[27] = lua_t4[27] & lua_t4[31];
|
||
|
assign lua_t8[26] = lua_t4[26] & lua_t4[30];
|
||
|
assign lua_t8[25] = lua_t4[25] & lua_t4[29];
|
||
|
assign lua_t8[24] = lua_t4[24] & lua_t4[28];
|
||
|
|
||
|
assign lua_g2[23] = lua_g[23];
|
||
|
assign lua_g2[22] = lua_g[22] | (lua_t[22] & lua_g[23]);
|
||
|
assign lua_g2[21] = lua_g[21] | (lua_t[21] & lua_g[22]);
|
||
|
assign lua_g2[20] = lua_g[20] | (lua_t[20] & lua_g[21]);
|
||
|
assign lua_g2[19] = lua_g[19] | (lua_t[19] & lua_g[20]);
|
||
|
assign lua_g2[18] = lua_g[18] | (lua_t[18] & lua_g[19]);
|
||
|
assign lua_g2[17] = lua_g[17] | (lua_t[17] & lua_g[18]);
|
||
|
assign lua_g2[16] = lua_g[16] | (lua_t[16] & lua_g[17]);
|
||
|
assign lua_t2[23] = lua_t[23];
|
||
|
assign lua_t2[22] = lua_t[22] & lua_t[23];
|
||
|
assign lua_t2[21] = lua_t[21] & lua_t[22];
|
||
|
assign lua_t2[20] = lua_t[20] & lua_t[21];
|
||
|
assign lua_t2[19] = lua_t[19] & lua_t[20];
|
||
|
assign lua_t2[18] = lua_t[18] & lua_t[19];
|
||
|
assign lua_t2[17] = lua_t[17] & lua_t[18];
|
||
|
assign lua_t2[16] = lua_t[16] & lua_t[17];
|
||
|
assign lua_g4[23] = lua_g2[23];
|
||
|
assign lua_g4[22] = lua_g2[22];
|
||
|
assign lua_g4[21] = lua_g2[21] | (lua_t2[21] & lua_g2[23]);
|
||
|
assign lua_g4[20] = lua_g2[20] | (lua_t2[20] & lua_g2[22]);
|
||
|
assign lua_g4[19] = lua_g2[19] | (lua_t2[19] & lua_g2[21]);
|
||
|
assign lua_g4[18] = lua_g2[18] | (lua_t2[18] & lua_g2[20]);
|
||
|
assign lua_g4[17] = lua_g2[17] | (lua_t2[17] & lua_g2[19]);
|
||
|
assign lua_g4[16] = lua_g2[16] | (lua_t2[16] & lua_g2[18]);
|
||
|
assign lua_t4[23] = lua_t2[23];
|
||
|
assign lua_t4[22] = lua_t2[22];
|
||
|
assign lua_t4[21] = lua_t2[21] & lua_t2[23];
|
||
|
assign lua_t4[20] = lua_t2[20] & lua_t2[22];
|
||
|
assign lua_t4[19] = lua_t2[19] & lua_t2[21];
|
||
|
assign lua_t4[18] = lua_t2[18] & lua_t2[20];
|
||
|
assign lua_t4[17] = lua_t2[17] & lua_t2[19];
|
||
|
assign lua_t4[16] = lua_t2[16] & lua_t2[18];
|
||
|
assign lua_g8[23] = lua_g4[23];
|
||
|
assign lua_g8[22] = lua_g4[22];
|
||
|
assign lua_g8[21] = lua_g4[21];
|
||
|
assign lua_g8[20] = lua_g4[20];
|
||
|
assign lua_g8[19] = lua_g4[19] | (lua_t4[19] & lua_g4[23]);
|
||
|
assign lua_g8[18] = lua_g4[18] | (lua_t4[18] & lua_g4[22]);
|
||
|
assign lua_g8[17] = lua_g4[17] | (lua_t4[17] & lua_g4[21]);
|
||
|
assign lua_g8[16] = lua_g4[16] | (lua_t4[16] & lua_g4[20]);
|
||
|
assign lua_t8[23] = lua_t4[23];
|
||
|
assign lua_t8[22] = lua_t4[22];
|
||
|
assign lua_t8[21] = lua_t4[21];
|
||
|
assign lua_t8[20] = lua_t4[20];
|
||
|
assign lua_t8[19] = lua_t4[19] & lua_t4[23];
|
||
|
assign lua_t8[18] = lua_t4[18] & lua_t4[22];
|
||
|
assign lua_t8[17] = lua_t4[17] & lua_t4[21];
|
||
|
assign lua_t8[16] = lua_t4[16] & lua_t4[20];
|
||
|
|
||
|
assign lua_g2[15] = lua_g[15];
|
||
|
assign lua_g2[14] = lua_g[14] | (lua_t[14] & lua_g[15]);
|
||
|
assign lua_g2[13] = lua_g[13] | (lua_t[13] & lua_g[14]);
|
||
|
assign lua_g2[12] = lua_g[12] | (lua_t[12] & lua_g[13]);
|
||
|
assign lua_g2[11] = lua_g[11] | (lua_t[11] & lua_g[12]);
|
||
|
assign lua_g2[10] = lua_g[10] | (lua_t[10] & lua_g[11]);
|
||
|
assign lua_g2[9] = lua_g[9] | (lua_t[9] & lua_g[10]);
|
||
|
assign lua_g2[8] = lua_g[8] | (lua_t[8] & lua_g[9]);
|
||
|
assign lua_t2[15] = lua_t[15];
|
||
|
assign lua_t2[14] = lua_t[14] & lua_t[15];
|
||
|
assign lua_t2[13] = lua_t[13] & lua_t[14];
|
||
|
assign lua_t2[12] = lua_t[12] & lua_t[13];
|
||
|
assign lua_t2[11] = lua_t[11] & lua_t[12];
|
||
|
assign lua_t2[10] = lua_t[10] & lua_t[11];
|
||
|
assign lua_t2[9] = lua_t[9] & lua_t[10];
|
||
|
assign lua_t2[8] = lua_t[8] & lua_t[9];
|
||
|
assign lua_g4[15] = lua_g2[15];
|
||
|
assign lua_g4[14] = lua_g2[14];
|
||
|
assign lua_g4[13] = lua_g2[13] | (lua_t2[13] & lua_g2[15]);
|
||
|
assign lua_g4[12] = lua_g2[12] | (lua_t2[12] & lua_g2[14]);
|
||
|
assign lua_g4[11] = lua_g2[11] | (lua_t2[11] & lua_g2[13]);
|
||
|
assign lua_g4[10] = lua_g2[10] | (lua_t2[10] & lua_g2[12]);
|
||
|
assign lua_g4[9] = lua_g2[9] | (lua_t2[9] & lua_g2[11]);
|
||
|
assign lua_g4[8] = lua_g2[8] | (lua_t2[8] & lua_g2[10]);
|
||
|
assign lua_t4[15] = lua_t2[15];
|
||
|
assign lua_t4[14] = lua_t2[14];
|
||
|
assign lua_t4[13] = lua_t2[13] & lua_t2[15];
|
||
|
assign lua_t4[12] = lua_t2[12] & lua_t2[14];
|
||
|
assign lua_t4[11] = lua_t2[11] & lua_t2[13];
|
||
|
assign lua_t4[10] = lua_t2[10] & lua_t2[12];
|
||
|
assign lua_t4[9] = lua_t2[9] & lua_t2[11];
|
||
|
assign lua_t4[8] = lua_t2[8] & lua_t2[10];
|
||
|
assign lua_g8[15] = lua_g4[15];
|
||
|
assign lua_g8[14] = lua_g4[14];
|
||
|
assign lua_g8[13] = lua_g4[13];
|
||
|
assign lua_g8[12] = lua_g4[12];
|
||
|
assign lua_g8[11] = lua_g4[11] | (lua_t4[11] & lua_g4[15]);
|
||
|
assign lua_g8[10] = lua_g4[10] | (lua_t4[10] & lua_g4[14]);
|
||
|
assign lua_g8[9] = lua_g4[9] | (lua_t4[9] & lua_g4[13]);
|
||
|
assign lua_g8[8] = lua_g4[8] | (lua_t4[8] & lua_g4[12]);
|
||
|
assign lua_t8[15] = lua_t4[15];
|
||
|
assign lua_t8[14] = lua_t4[14];
|
||
|
assign lua_t8[13] = lua_t4[13];
|
||
|
assign lua_t8[12] = lua_t4[12];
|
||
|
assign lua_t8[11] = lua_t4[11] & lua_t4[15];
|
||
|
assign lua_t8[10] = lua_t4[10] & lua_t4[14];
|
||
|
assign lua_t8[9] = lua_t4[9] & lua_t4[13];
|
||
|
assign lua_t8[8] = lua_t4[8] & lua_t4[12];
|
||
|
|
||
|
assign lua_g2[7] = lua_g[7];
|
||
|
assign lua_g2[6] = lua_g[6] | (lua_t[6] & lua_g[7]);
|
||
|
assign lua_g2[5] = lua_g[5] | (lua_t[5] & lua_g[6]);
|
||
|
assign lua_g2[4] = lua_g[4] | (lua_t[4] & lua_g[5]);
|
||
|
assign lua_g2[3] = lua_g[3] | (lua_t[3] & lua_g[4]);
|
||
|
assign lua_g2[2] = lua_g[2] | (lua_t[2] & lua_g[3]);
|
||
|
assign lua_g2[1] = lua_g[1] | (lua_t[1] & lua_g[2]);
|
||
|
// lua_g2(0) <= lua_g(0) or (lua_t(0) and lua_g(1) );
|
||
|
assign lua_t2[7] = lua_t[7];
|
||
|
assign lua_t2[6] = lua_t[6] & lua_t[7];
|
||
|
assign lua_t2[5] = lua_t[5] & lua_t[6];
|
||
|
assign lua_t2[4] = lua_t[4] & lua_t[5];
|
||
|
assign lua_t2[3] = lua_t[3] & lua_t[4];
|
||
|
assign lua_t2[2] = lua_t[2] & lua_t[3];
|
||
|
assign lua_t2[1] = lua_t[1] & lua_t[2];
|
||
|
// lua_t2(0) <= lua_t(0) and lua_t(1) ;
|
||
|
assign lua_g4[7] = lua_g2[7];
|
||
|
assign lua_g4[6] = lua_g2[6];
|
||
|
assign lua_g4[5] = lua_g2[5] | (lua_t2[5] & lua_g2[7]);
|
||
|
assign lua_g4[4] = lua_g2[4] | (lua_t2[4] & lua_g2[6]);
|
||
|
assign lua_g4[3] = lua_g2[3] | (lua_t2[3] & lua_g2[5]);
|
||
|
assign lua_g4[2] = lua_g2[2] | (lua_t2[2] & lua_g2[4]);
|
||
|
assign lua_g4[1] = lua_g2[1] | (lua_t2[1] & lua_g2[3]);
|
||
|
// lua_g4(0) <= lua_g2(0) or (lua_t2(0) and lua_g2(2) );
|
||
|
assign lua_t4[7] = lua_t2[7];
|
||
|
assign lua_t4[6] = lua_t2[6];
|
||
|
assign lua_t4[5] = lua_t2[5] & lua_t2[7];
|
||
|
assign lua_t4[4] = lua_t2[4] & lua_t2[6];
|
||
|
assign lua_t4[3] = lua_t2[3] & lua_t2[5];
|
||
|
assign lua_t4[2] = lua_t2[2] & lua_t2[4];
|
||
|
assign lua_t4[1] = lua_t2[1] & lua_t2[3];
|
||
|
// lua_t4(0) <= lua_t2(0) and lua_t2(2) ;
|
||
|
assign lua_g8[7] = lua_g4[7];
|
||
|
assign lua_g8[6] = lua_g4[6];
|
||
|
assign lua_g8[5] = lua_g4[5];
|
||
|
assign lua_g8[4] = lua_g4[4];
|
||
|
assign lua_g8[3] = lua_g4[3] | (lua_t4[3] & lua_g4[7]);
|
||
|
assign lua_g8[2] = lua_g4[2] | (lua_t4[2] & lua_g4[6]);
|
||
|
assign lua_g8[1] = lua_g4[1] | (lua_t4[1] & lua_g4[5]);
|
||
|
//lua_g8(0) <= lua_g4(0) or (lua_t4(0) and lua_g4(4) );
|
||
|
assign lua_t8[7] = lua_t4[7];
|
||
|
assign lua_t8[6] = lua_t4[6];
|
||
|
assign lua_t8[5] = lua_t4[5];
|
||
|
assign lua_t8[4] = lua_t4[4];
|
||
|
assign lua_t8[3] = lua_t4[3] & lua_t4[7];
|
||
|
assign lua_t8[2] = lua_t4[2] & lua_t4[6];
|
||
|
assign lua_t8[1] = lua_t4[1] & lua_t4[5];
|
||
|
//lua_t8(0) <= lua_t4(0) and lua_t4(4) ;
|
||
|
|
||
|
// CONDITIONL SUM ---------------------------------------------
|
||
|
|
||
|
assign lua_gt8[1:28] = lua_g8[1:28] | lua_t8[1:28];
|
||
|
|
||
|
assign lua_s1_b[0:27] = (~(lua_p[0:27] ^ lua_gt8[1:28]));
|
||
|
assign lua_s0_b[0:27] = (~(lua_p[0:27] ^ lua_g8[1:28]));
|
||
|
|
||
|
// BYTE SELECT ------------------------------
|
||
|
// ex5_lu(0 to 27) <= not( ex5_lu_p(0 to 27) xor ex5_lu_c(1 to 28) ); -- invert
|
||
|
|
||
|
assign ex5_lu[0] = (lua_s0_b[0] & (~lua_c08)) | (lua_s1_b[0] & lua_c08);
|
||
|
assign ex5_lu[1] = (lua_s0_b[1] & (~lua_c08)) | (lua_s1_b[1] & lua_c08);
|
||
|
assign ex5_lu[2] = (lua_s0_b[2] & (~lua_c08)) | (lua_s1_b[2] & lua_c08);
|
||
|
assign ex5_lu[3] = (lua_s0_b[3] & (~lua_c08)) | (lua_s1_b[3] & lua_c08);
|
||
|
assign ex5_lu[4] = (lua_s0_b[4] & (~lua_c08)) | (lua_s1_b[4] & lua_c08);
|
||
|
assign ex5_lu[5] = (lua_s0_b[5] & (~lua_c08)) | (lua_s1_b[5] & lua_c08);
|
||
|
assign ex5_lu[6] = (lua_s0_b[6] & (~lua_c08)) | (lua_s1_b[6] & lua_c08);
|
||
|
assign ex5_lu[7] = (lua_s0_b[7] & (~lua_c08)) | (lua_s1_b[7] & lua_c08);
|
||
|
|
||
|
assign ex5_lu[8] = (lua_s0_b[8] & (~lua_c16)) | (lua_s1_b[8] & lua_c16);
|
||
|
assign ex5_lu[9] = (lua_s0_b[9] & (~lua_c16)) | (lua_s1_b[9] & lua_c16);
|
||
|
assign ex5_lu[10] = (lua_s0_b[10] & (~lua_c16)) | (lua_s1_b[10] & lua_c16);
|
||
|
assign ex5_lu[11] = (lua_s0_b[11] & (~lua_c16)) | (lua_s1_b[11] & lua_c16);
|
||
|
assign ex5_lu[12] = (lua_s0_b[12] & (~lua_c16)) | (lua_s1_b[12] & lua_c16);
|
||
|
assign ex5_lu[13] = (lua_s0_b[13] & (~lua_c16)) | (lua_s1_b[13] & lua_c16);
|
||
|
assign ex5_lu[14] = (lua_s0_b[14] & (~lua_c16)) | (lua_s1_b[14] & lua_c16);
|
||
|
assign ex5_lu[15] = (lua_s0_b[15] & (~lua_c16)) | (lua_s1_b[15] & lua_c16);
|
||
|
|
||
|
assign ex5_lu[16] = (lua_s0_b[16] & (~lua_c24)) | (lua_s1_b[16] & lua_c24);
|
||
|
assign ex5_lu[17] = (lua_s0_b[17] & (~lua_c24)) | (lua_s1_b[17] & lua_c24);
|
||
|
assign ex5_lu[18] = (lua_s0_b[18] & (~lua_c24)) | (lua_s1_b[18] & lua_c24);
|
||
|
assign ex5_lu[19] = (lua_s0_b[19] & (~lua_c24)) | (lua_s1_b[19] & lua_c24);
|
||
|
assign ex5_lu[20] = (lua_s0_b[20] & (~lua_c24)) | (lua_s1_b[20] & lua_c24);
|
||
|
assign ex5_lu[21] = (lua_s0_b[21] & (~lua_c24)) | (lua_s1_b[21] & lua_c24);
|
||
|
assign ex5_lu[22] = (lua_s0_b[22] & (~lua_c24)) | (lua_s1_b[22] & lua_c24);
|
||
|
assign ex5_lu[23] = (lua_s0_b[23] & (~lua_c24)) | (lua_s1_b[23] & lua_c24);
|
||
|
|
||
|
assign ex5_lu[24] = (lua_s0_b[24] & (~lua_c32)) | (lua_s1_b[24] & lua_c32);
|
||
|
assign ex5_lu[25] = (lua_s0_b[25] & (~lua_c32)) | (lua_s1_b[25] & lua_c32);
|
||
|
assign ex5_lu[26] = (lua_s0_b[26] & (~lua_c32)) | (lua_s1_b[26] & lua_c32);
|
||
|
assign ex5_lu[27] = (lua_s0_b[27] & (~lua_c32)) | (lua_s1_b[27] & lua_c32);
|
||
|
|
||
|
// GLOBAL BYTE CARRY ------------------------------
|
||
|
|
||
|
assign lua_g16[3] = lua_g8[32];
|
||
|
assign lua_g16[2] = lua_g8[24] | (lua_t8[24] & lua_g8[32]);
|
||
|
assign lua_g16[1] = lua_g8[16] | (lua_t8[16] & lua_g8[24]);
|
||
|
assign lua_g16[0] = lua_g8[8] | (lua_t8[8] & lua_g8[16]);
|
||
|
|
||
|
//lua_t16(3) <= lua_t8(32);
|
||
|
//lua_t16(2) <= lua_t8(24) and lua_t8(32) ;
|
||
|
assign lua_t16[1] = lua_t8[16] & lua_t8[24];
|
||
|
assign lua_t16[0] = lua_t8[8] & lua_t8[16];
|
||
|
|
||
|
assign lua_c32 = lua_g16[3];
|
||
|
assign lua_c24 = lua_g16[2];
|
||
|
assign lua_c16 = lua_g16[1] | (lua_t16[1] & lua_g16[3]);
|
||
|
assign lua_c08 = lua_g16[0] | (lua_t16[0] & lua_g16[2]);
|
||
|
|
||
|
//---------------------------------------------------------------
|
||
|
// normalize
|
||
|
//---------------------------------------------------------------
|
||
|
// expo=2046 ==> imp=0 shift right 1
|
||
|
// expo=2045 ==> imp=0 shift right 0
|
||
|
// expo=other => imp=1 shift right 0 <normal reslts>
|
||
|
assign ex5_recip_2044_dp = ex5_recip_2044 & ex5_match_en_dp & (~ex5_recip_ue1);
|
||
|
assign ex5_recip_2045_dp = ex5_recip_2045 & ex5_match_en_dp & (~ex5_recip_ue1);
|
||
|
assign ex5_recip_2046_dp = ex5_recip_2046 & ex5_match_en_dp & (~ex5_recip_ue1);
|
||
|
|
||
|
assign ex5_recip_2044_sp = ex5_recip_2044 & ex5_match_en_sp & (~ex5_recip_ue1);
|
||
|
assign ex5_recip_2045_sp = ex5_recip_2045 & ex5_match_en_sp & (~ex5_recip_ue1);
|
||
|
assign ex5_recip_2046_sp = ex5_recip_2046 & ex5_match_en_sp & (~ex5_recip_ue1);
|
||
|
|
||
|
// lu_sh means : shift left one, and decr exponent (unless it will create a denorm exponent)
|
||
|
|
||
|
// result in norm dp fmt, but set fpscr flag for sp unf
|
||
|
// result in norm dp fmt, but set fpscr flag for sp unf
|
||
|
// result in norm dp fmt, but set fpscr flag for sp unf
|
||
|
assign ex5_recip_den = ex5_recip_2046_sp | ex5_recip_2045_sp | (ex5_lu_sh & ex5_recip_2044_sp) | ex5_recip_2046_dp | ex5_recip_2045_dp | (ex5_lu_sh & ex5_recip_2044_dp); // use in round to set implicit bit
|
||
|
// cannot shift left , denorm result
|
||
|
|
||
|
// by not denormalizing sp the fpscr(ux) is set even though the implicit bit is set
|
||
|
// divide does not want the denormed result
|
||
|
// for setting UX (same for ue=0, ue=1
|
||
|
// ( ex5_match_en_dp) and -- leave SP normalized
|
||
|
assign ex5_unf_expo = (ex5_match_en_sp | ex5_match_en_dp) & (ex5_recip_2046 | ex5_recip_2045 | (ex5_recip_2044 & ex5_lu_sh)); // leave SP normalized
|
||
|
|
||
|
assign f_tbl_ex5_unf_expo = ex5_unf_expo; //output--
|
||
|
|
||
|
assign ex5_shlft_1 = (~ex5_recip_2046_dp) & (~ex5_recip_2045_dp) & (ex5_lu_sh & (~ex5_recip_2044_dp));
|
||
|
assign ex5_shlft_0 = (~ex5_recip_2046_dp) & (~ex5_recip_2045_dp) & (~(ex5_lu_sh & (~ex5_recip_2044_dp)));
|
||
|
assign ex5_shrgt_1 = ex5_recip_2045_dp;
|
||
|
assign ex5_shrgt_2 = ex5_recip_2046_dp;
|
||
|
|
||
|
// the final sp result will be in dp_norm format for an sp_denorm.
|
||
|
// emulate the dropping of bits when an sp is shifted right then fitted into 23 frac bits.
|
||
|
|
||
|
assign ex5_sp_chop_24 = ex5_recip_2046_sp | ex5_recip_2045_sp | ex5_recip_2044_sp;
|
||
|
assign ex5_sp_chop_23 = ex5_recip_2046_sp | ex5_recip_2045_sp;
|
||
|
assign ex5_sp_chop_22 = ex5_recip_2046_sp;
|
||
|
assign ex5_sp_chop_21 = tidn;
|
||
|
|
||
|
assign ex5_lux[0:20] = ex5_lu[0:20];
|
||
|
assign ex5_lux[21] = ex5_lu[21] & (~ex5_sp_chop_21);
|
||
|
assign ex5_lux[22] = ex5_lu[22] & (~ex5_sp_chop_22);
|
||
|
assign ex5_lux[23] = ex5_lu[23] & (~ex5_sp_chop_23);
|
||
|
assign ex5_lux[24] = ex5_lu[24] & (~ex5_sp_chop_24);
|
||
|
assign ex5_lux[25:27] = ex5_lu[25:27];
|
||
|
|
||
|
assign ex5_lu_nrm[0:26] = ({27{ex5_shlft_1}} & (ex5_lux[1:27])) |
|
||
|
({27{ex5_shlft_0}} & (ex5_lux[0:26])) |
|
||
|
({27{ex5_shrgt_1}} & ({tidn, ex5_lux[0:25]})) |
|
||
|
({27{ex5_shrgt_2}} & ({tidn, tidn, ex5_lux[0:24]}));
|
||
|
|
||
|
//==##############################################################
|
||
|
//= ex6 latches
|
||
|
//==##############################################################
|
||
|
|
||
|
|
||
|
tri_rlmreg_p #(.WIDTH(28)) ex6_lut_lat(
|
||
|
.force_t(force_t),
|
||
|
.d_mode(tiup),
|
||
|
.delay_lclkr(delay_lclkr[5]),
|
||
|
.mpw1_b(mpw1_b[5]),
|
||
|
.mpw2_b(mpw2_b[1]),
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.nclk(nclk),
|
||
|
.act(ex5_act),
|
||
|
.thold_b(thold_0_b),
|
||
|
.sg(sg_0),
|
||
|
.scout(ex6_lut_so),
|
||
|
.scin(ex6_lut_si),
|
||
|
//-----------------
|
||
|
.din({ex5_lu_nrm[0:26],
|
||
|
ex5_recip_den}),
|
||
|
.dout({ex6_lu[0:26],
|
||
|
ex6_recip_den})
|
||
|
);
|
||
|
|
||
|
assign f_tbl_ex6_est_frac[0:26] = ex6_lu[0:26];
|
||
|
assign f_tbl_ex6_recip_den = ex6_recip_den;
|
||
|
|
||
|
//==##############################################################
|
||
|
//= pervasive
|
||
|
//==##############################################################
|
||
|
|
||
|
|
||
|
tri_plat thold_reg_0(
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.nclk(nclk),
|
||
|
.flush(flush),
|
||
|
.din(thold_1),
|
||
|
.q(thold_0)
|
||
|
);
|
||
|
|
||
|
|
||
|
tri_plat sg_reg_0(
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.nclk(nclk),
|
||
|
.flush(flush),
|
||
|
.din(sg_1),
|
||
|
.q(sg_0)
|
||
|
);
|
||
|
|
||
|
|
||
|
tri_lcbor lcbor_0(
|
||
|
.clkoff_b(clkoff_b),
|
||
|
.thold(thold_0),
|
||
|
.sg(sg_0),
|
||
|
.act_dis(act_dis),
|
||
|
.force_t(force_t),
|
||
|
.thold_b(thold_0_b)
|
||
|
);
|
||
|
|
||
|
//==##############################################################
|
||
|
//= act
|
||
|
//==##############################################################
|
||
|
|
||
|
|
||
|
tri_rlmreg_p #(.WIDTH(7)) act_lat(
|
||
|
.force_t(force_t),
|
||
|
.d_mode(tiup),
|
||
|
.delay_lclkr(delay_lclkr[4]),
|
||
|
.mpw1_b(mpw1_b[4]),
|
||
|
.mpw2_b(mpw2_b[0]),
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.nclk(nclk),
|
||
|
.act(fpu_enable),
|
||
|
.thold_b(thold_0_b),
|
||
|
.sg(sg_0),
|
||
|
.scout(act_so),
|
||
|
.scin(act_si),
|
||
|
//-----------------
|
||
|
.din({spare_unused[0],
|
||
|
spare_unused[1],
|
||
|
ex2_act,
|
||
|
ex3_act,
|
||
|
ex4_act,
|
||
|
spare_unused[2],
|
||
|
spare_unused[3]}),
|
||
|
//-----------------
|
||
|
.dout({ spare_unused[0],
|
||
|
spare_unused[1],
|
||
|
ex3_act,
|
||
|
ex4_act,
|
||
|
ex5_act,
|
||
|
spare_unused[2],
|
||
|
spare_unused[3]})
|
||
|
);
|
||
|
|
||
|
|
||
|
tri_lcbnd tbl_ex4_lcb(
|
||
|
.delay_lclkr(delay_lclkr[3]), // tidn ,--in
|
||
|
.mpw1_b(mpw1_b[3]), // tidn ,--in
|
||
|
.mpw2_b(mpw2_b[0]), // tidn ,--in
|
||
|
.force_t(force_t), // tidn ,--in
|
||
|
.nclk(nclk), //in
|
||
|
.vd(vdd), //inout
|
||
|
.gd(gnd), //inout
|
||
|
.act(ex3_act), //in
|
||
|
.sg(sg_0), //in
|
||
|
.thold_b(thold_0_b), //in
|
||
|
.d1clk(tbl_ex4_d1clk), //out
|
||
|
.d2clk(tbl_ex4_d2clk), //out
|
||
|
.lclk(tbl_ex4_lclk) //out
|
||
|
);
|
||
|
|
||
|
|
||
|
tri_lcbnd tbl_ex5_lcb(
|
||
|
.delay_lclkr(delay_lclkr[4]), // tidn ,--in
|
||
|
.mpw1_b(mpw1_b[4]), // tidn ,--in
|
||
|
.mpw2_b(mpw2_b[0]), // tidn ,--in
|
||
|
.force_t(force_t), // tidn ,--in
|
||
|
.nclk(nclk), //in
|
||
|
.vd(vdd), //inout
|
||
|
.gd(gnd), //inout
|
||
|
.act(ex4_act), //in
|
||
|
.sg(sg_0), //in
|
||
|
.thold_b(thold_0_b), //in
|
||
|
.d1clk(tbl_ex5_d1clk), //out
|
||
|
.d2clk(tbl_ex5_d2clk), //out
|
||
|
.lclk(tbl_ex5_lclk) //out
|
||
|
);
|
||
|
|
||
|
//==##############################################################
|
||
|
//= scan string
|
||
|
//==##############################################################
|
||
|
|
||
|
assign ex3_lut_si[0:5] = {ex3_lut_so[1:5], si};
|
||
|
assign ex4_lut_e_si[0:19] = {ex4_lut_e_so[1:19], ex3_lut_so[0]};
|
||
|
assign ex4_lut_r_si[0:14] = {ex4_lut_r_so[1:14], ex4_lut_e_so[0]};
|
||
|
assign ex4_lut_b_si[0:15] = {ex4_lut_b_so[1:15], ex4_lut_r_so[0]};
|
||
|
assign ex5_lut_si[0:79] = {ex5_lut_so[1:79], ex4_lut_b_so[0]};
|
||
|
assign ex6_lut_si[0:27] = {ex6_lut_so[1:27], ex5_lut_so[0]};
|
||
|
assign act_si[0:6] = {act_so[1:6], ex6_lut_so[0]};
|
||
|
assign so = act_so[0]; //SCAN
|
||
|
|
||
|
endmodule
|