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.
883 lines
39 KiB
Verilog
883 lines
39 KiB
Verilog
2 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
|
||
|
|
||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||
|
//@@ replicate critical select latch to PO
|
||
|
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||
|
|
||
|
//xxx_lcbor: tri_lcbor generic map (expand_type => expand_type ) port map (
|
||
|
// clkoff_b => clkoff_b,
|
||
|
// thold => pc_func_sl_thold_0(0),
|
||
|
// sg => pc_sg_0(0),
|
||
|
// act_dis => act_dis,
|
||
|
// force => force,
|
||
|
// thold_b => pc_func_sl_thold_0_b );
|
||
|
//
|
||
|
// print "alter --d_mode 0 b\n";
|
||
|
// print "alter delay_lclkr 0 b\n";
|
||
|
// print "alter mpw1_b 1 b\n";
|
||
|
// print "alter mpw2_b 1 b\n";
|
||
|
// print "alter clkoff_b 1 b\n";
|
||
|
// print "alter dis_act 0 b\n";
|
||
|
// print "alter scan_diag 0 b\n";
|
||
|
|
||
|
// PPC FP STORE reformating
|
||
|
// (1) DP STORE : sp_denorm needs to normalize
|
||
|
// (2) SP STORE : dp_norm may need to denormalize
|
||
|
// (3) stfwix : pass througn
|
||
|
|
||
|
`include "tri_a2o.vh"
|
||
|
|
||
|
|
||
|
module fu_sto(
|
||
|
vdd,
|
||
|
gnd,
|
||
|
clkoff_b,
|
||
|
act_dis,
|
||
|
flush,
|
||
|
delay_lclkr,
|
||
|
mpw1_b,
|
||
|
mpw2_b,
|
||
|
sg_1,
|
||
|
thold_1,
|
||
|
fpu_enable,
|
||
|
nclk,
|
||
|
f_sto_si,
|
||
|
f_sto_so,
|
||
|
f_dcd_ex1_sto_act,
|
||
|
f_dcd_ex1_sto_v,
|
||
|
f_fpr_ex2_s_expo_extra,
|
||
|
f_fpr_ex2_s_par,
|
||
|
f_sto_ex3_s_parity_check,
|
||
|
f_dcd_ex1_sto_dp,
|
||
|
f_dcd_ex1_sto_sp,
|
||
|
f_dcd_ex1_sto_wd,
|
||
|
f_byp_ex1_s_sign,
|
||
|
f_byp_ex1_s_expo,
|
||
|
f_byp_ex1_s_frac,
|
||
|
f_sto_ex3_sto_data
|
||
|
);
|
||
|
inout vdd;
|
||
|
inout gnd;
|
||
|
input clkoff_b; // tiup
|
||
|
input act_dis; // ??tidn??
|
||
|
input flush; // ??tidn??
|
||
|
input [1:2] delay_lclkr; // tidn,
|
||
|
input [1:2] mpw1_b; // tidn,
|
||
|
input [0:0] mpw2_b; // tidn,
|
||
|
input sg_1;
|
||
|
input thold_1;
|
||
|
input fpu_enable; //dc_act
|
||
|
input [0:`NCLK_WIDTH-1] nclk;
|
||
|
|
||
|
input f_sto_si;
|
||
|
output f_sto_so;
|
||
|
input f_dcd_ex1_sto_act;
|
||
|
input f_dcd_ex1_sto_v;
|
||
|
|
||
|
input [0:1] f_fpr_ex2_s_expo_extra;
|
||
|
input [0:7] f_fpr_ex2_s_par;
|
||
|
output f_sto_ex3_s_parity_check; // raw calculation
|
||
|
|
||
|
input f_dcd_ex1_sto_dp;
|
||
|
input f_dcd_ex1_sto_sp;
|
||
|
input f_dcd_ex1_sto_wd;
|
||
|
|
||
|
input f_byp_ex1_s_sign;
|
||
|
input [1:11] f_byp_ex1_s_expo;
|
||
|
input [0:52] f_byp_ex1_s_frac;
|
||
|
|
||
|
output [0:63] f_sto_ex3_sto_data;
|
||
|
|
||
|
// end ports
|
||
|
|
||
|
// ENTITY
|
||
|
|
||
|
|
||
|
parameter tiup = 1'b1;
|
||
|
parameter tidn = 1'b0;
|
||
|
|
||
|
wire sg_0;
|
||
|
wire thold_0_b;
|
||
|
wire thold_0;
|
||
|
|
||
|
wire ex1_act;
|
||
|
|
||
|
wire ex2_act;
|
||
|
|
||
|
(* analysis_not_referenced="TRUE" *)
|
||
|
wire [0:1] spare_unused;
|
||
|
|
||
|
//-----------------
|
||
|
wire [0:3] act_so; //SCAN
|
||
|
wire [0:3] act_si; //SCAN
|
||
|
wire [0:2] ex2_sins_so;
|
||
|
wire [0:2] ex2_sins_si;
|
||
|
wire [0:64] ex2_sop_so;
|
||
|
wire [0:64] ex2_sop_si;
|
||
|
wire [0:72] ex3_sto_so;
|
||
|
wire [0:72] ex3_sto_si;
|
||
|
//-----------------
|
||
|
wire ex2_s_sign;
|
||
|
wire [1:11] ex2_s_expo;
|
||
|
wire [0:52] ex2_s_frac;
|
||
|
wire [0:63] ex2_sto_data;
|
||
|
wire [0:63] ex3_sto_data;
|
||
|
wire ex2_sto_dp;
|
||
|
wire ex2_sto_sp;
|
||
|
wire ex2_sto_wd;
|
||
|
wire ex2_den_ramt8_02;
|
||
|
wire ex2_den_ramt8_18;
|
||
|
wire ex2_den_ramt4_12;
|
||
|
wire ex2_den_ramt4_08;
|
||
|
wire ex2_den_ramt4_04;
|
||
|
wire ex2_den_ramt4_00;
|
||
|
wire ex2_den_ramt1_03;
|
||
|
wire ex2_den_ramt1_02;
|
||
|
wire ex2_den_ramt1_01;
|
||
|
wire ex2_den_ramt1_00;
|
||
|
wire ex2_expo_eq896;
|
||
|
wire ex2_expo_ge896;
|
||
|
wire ex2_expo_lt896;
|
||
|
wire ex2_sts_lt896;
|
||
|
wire ex2_sts_ge896;
|
||
|
wire ex2_sts_expo_nz;
|
||
|
wire ex2_fixden;
|
||
|
wire ex2_fixden_small;
|
||
|
wire ex2_fixden_big;
|
||
|
wire ex2_std_nonden;
|
||
|
wire ex2_std_fixden_big;
|
||
|
wire ex2_std_fixden_small;
|
||
|
wire ex2_std_nonbig;
|
||
|
wire ex2_std_nonden_wd;
|
||
|
wire ex2_std_lamt8_02;
|
||
|
wire ex2_std_lamt8_10;
|
||
|
wire ex2_std_lamt8_18;
|
||
|
wire ex2_std_lamt2_0;
|
||
|
wire ex2_std_lamt2_2;
|
||
|
wire ex2_std_lamt2_4;
|
||
|
wire ex2_std_lamt2_6;
|
||
|
wire ex2_std_lamt1_0;
|
||
|
wire ex2_std_lamt1_1;
|
||
|
wire [0:23] ex2_sts_sh8;
|
||
|
wire [0:23] ex2_sts_sh4;
|
||
|
wire [0:23] ex2_sts_sh1;
|
||
|
wire [0:23] ex2_sts_nrm;
|
||
|
wire [1:23] ex2_sts_frac;
|
||
|
wire [1:8] ex2_sts_expo;
|
||
|
wire [0:10] ex2_clz02_or;
|
||
|
wire [0:10] ex2_clz02_enc4;
|
||
|
wire [0:5] ex2_clz04_or;
|
||
|
wire [0:5] ex2_clz04_enc3;
|
||
|
wire [0:5] ex2_clz04_enc4;
|
||
|
wire [0:2] ex2_clz08_or;
|
||
|
wire [0:2] ex2_clz08_enc2;
|
||
|
wire [0:2] ex2_clz08_enc3;
|
||
|
wire [0:2] ex2_clz08_enc4;
|
||
|
wire [0:1] ex2_clz16_or;
|
||
|
wire [0:1] ex2_clz16_enc1;
|
||
|
wire [0:1] ex2_clz16_enc2;
|
||
|
wire [0:1] ex2_clz16_enc3;
|
||
|
wire [0:1] ex2_clz16_enc4;
|
||
|
wire [0:4] ex2_sto_clz;
|
||
|
wire [1:11] ex2_expo_nonden;
|
||
|
wire [1:11] ex2_expo_fixden;
|
||
|
wire [1:11] ex2_std_expo;
|
||
|
wire [1:52] ex2_std_frac_nrm;
|
||
|
wire [0:23] ex2_std_sh8;
|
||
|
wire [0:23] ex2_std_sh2;
|
||
|
wire [1:23] ex2_std_frac_den;
|
||
|
wire ex2_ge874;
|
||
|
wire ex2_any_edge;
|
||
|
wire [0:63] ex3_sto_data_rot0_b;
|
||
|
wire [0:63] ex3_sto_data_rot1_b;
|
||
|
|
||
|
wire [0:3] ex3_sto_wd;
|
||
|
wire [0:3] ex3_sto_sp;
|
||
|
wire force_t;
|
||
|
|
||
|
wire ex2_s_party_chick;
|
||
|
wire ex3_s_party_chick;
|
||
|
wire [0:7] ex2_s_party;
|
||
|
|
||
|
wire ex2_sto_v;
|
||
|
|
||
|
|
||
|
(* analysis_not_referenced="TRUE" *) // unused
|
||
|
wire [0:1] unused;
|
||
|
|
||
|
////############################################
|
||
|
////# pervasive
|
||
|
////############################################
|
||
|
|
||
|
assign unused[0] = ex2_sts_sh1[0] | ex2_sts_nrm[0] | ex2_std_sh2[0];
|
||
|
|
||
|
|
||
|
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 LATCHES
|
||
|
////############################################
|
||
|
|
||
|
assign ex1_act = f_dcd_ex1_sto_act;
|
||
|
|
||
|
tri_rlmreg_p #(.WIDTH(4)) act_lat(
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.nclk(nclk),
|
||
|
.force_t(force_t), // tidn
|
||
|
.d_mode(tiup),
|
||
|
.delay_lclkr(delay_lclkr[1]), // tidn,
|
||
|
.mpw1_b(mpw1_b[1]), // tidn,
|
||
|
.mpw2_b(mpw2_b[0]), // tidn,
|
||
|
.act(tiup),
|
||
|
.thold_b(thold_0_b),
|
||
|
.sg(sg_0),
|
||
|
.scout(act_so),
|
||
|
.scin(act_si),
|
||
|
//-----------------
|
||
|
.din({ ex1_act,
|
||
|
spare_unused[0],
|
||
|
spare_unused[1],
|
||
|
f_dcd_ex1_sto_v}),
|
||
|
//-----------------
|
||
|
.dout({ ex2_act,
|
||
|
spare_unused[0],
|
||
|
spare_unused[1],
|
||
|
ex2_sto_v})
|
||
|
);
|
||
|
assign unused[1] = ex2_sto_v;
|
||
|
|
||
|
|
||
|
////##############################################
|
||
|
////# EX2 latch inputs from ex1
|
||
|
////##############################################
|
||
|
|
||
|
|
||
|
tri_rlmreg_p #(.WIDTH(3), .IBUF(1'B1)) ex2_sins_lat(
|
||
|
.force_t(force_t), //tidn,
|
||
|
.d_mode(tiup),
|
||
|
.delay_lclkr(delay_lclkr[1]), //tidn,
|
||
|
.mpw1_b(mpw1_b[1]), //tidn,
|
||
|
.mpw2_b(mpw2_b[0]), //tidn,
|
||
|
.nclk(nclk),
|
||
|
.thold_b(thold_0_b),
|
||
|
.sg(sg_0),
|
||
|
.act(ex1_act),
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.scout(ex2_sins_so),
|
||
|
.scin(ex2_sins_si),
|
||
|
//-----------------
|
||
|
.din({ f_dcd_ex1_sto_dp,
|
||
|
f_dcd_ex1_sto_sp,
|
||
|
f_dcd_ex1_sto_wd}),
|
||
|
//-----------------
|
||
|
.dout({ ex2_sto_dp,
|
||
|
ex2_sto_sp,
|
||
|
ex2_sto_wd})
|
||
|
);
|
||
|
|
||
|
|
||
|
tri_rlmreg_p #(.WIDTH(65), .NEEDS_SRESET(0), .IBUF(1'B1)) ex2_sop_lat(
|
||
|
.force_t(force_t), //tidn,
|
||
|
.d_mode(tiup),
|
||
|
.delay_lclkr(delay_lclkr[1]), //tidn,
|
||
|
.mpw1_b(mpw1_b[1]), //tidn,
|
||
|
.mpw2_b(mpw2_b[0]), //tidn,
|
||
|
.nclk(nclk),
|
||
|
.thold_b(thold_0_b),
|
||
|
.sg(sg_0),
|
||
|
.act(ex1_act),
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.scout(ex2_sop_so),
|
||
|
.scin(ex2_sop_si),
|
||
|
//-----------------
|
||
|
.din({ f_byp_ex1_s_sign,
|
||
|
f_byp_ex1_s_expo[1:11],
|
||
|
f_byp_ex1_s_frac[0:52]}),
|
||
|
//-----------------
|
||
|
.dout({ ex2_s_sign,
|
||
|
ex2_s_expo[1:11],
|
||
|
ex2_s_frac[0:52]})
|
||
|
);
|
||
|
|
||
|
////##############################################
|
||
|
////# EX2 logic
|
||
|
////##############################################
|
||
|
|
||
|
////###################################################
|
||
|
////# shifting for store sp
|
||
|
////###################################################
|
||
|
// output of dp instr with expo below x381 needs to denormalize to sp format.
|
||
|
// x380 d896 011_1000_0000 => right 1 11 11 11 <== treat as special case
|
||
|
// x37F d895 011_0111_1111 => right 2 00 00 00
|
||
|
// x37E d894 011_0111_1110 => right 3 00 00 01
|
||
|
// x37D d893 011_0111_1101 => right 4 00 00 10
|
||
|
// x37C d892 011_0111_1100 => right 5 00 00 11
|
||
|
// x37B d891 011_0111_1011 => right 6 00 01 00
|
||
|
// x37A d890 011_0111_1010 => right 7 00 01 01
|
||
|
// x379 d889 011_0111_1001 => right 8 00 01 10
|
||
|
// x378 d888 011_0111_1000 => right 9 00 01 11
|
||
|
// x377 d887 011_0111_0111 => right 10 00 10 00
|
||
|
// x376 d886 011_0111_0110 => right 11 00 10 01
|
||
|
// x375 d885 011_0111_0101 => right 12 00 10 10
|
||
|
// x374 d884 011_0111_0100 => right 13 00 10 11
|
||
|
// x373 d883 011_0111_0011 => right 14 00 11 00
|
||
|
// x372 d882 011_0111_0010 => right 15 00 11 01
|
||
|
// x371 d881 011_0111_0001 => right 16 00 11 10
|
||
|
// x370 d880 011_0111_0000 => right 17 00 11 11
|
||
|
// x36F d879 011_0110_1111 => right 18 01 00 00
|
||
|
// x36E d878 011_0110_1110 => right 19 01 00 01
|
||
|
// x36B d877 011_0110_1101 => right 20 01 00 10
|
||
|
// x36C d876 011_0110_1100 => right 21 01 00 11
|
||
|
// x36B d875 011_0110_1011 => right 22 01 01 00
|
||
|
// x36A d874 011_0110_1010 => right 23 01 01 01
|
||
|
// x369 d873 011_0110_1001 => right 24 01 01 10 ===> result is zero after here
|
||
|
//------------------------
|
||
|
// 000 0000 0011
|
||
|
// 123 4567 8901
|
||
|
|
||
|
assign ex2_den_ramt8_02 = ex2_s_expo[6] & ex2_s_expo[7];
|
||
|
assign ex2_den_ramt8_18 = ex2_s_expo[6] & (~ex2_s_expo[7]);
|
||
|
|
||
|
assign ex2_den_ramt4_12 = (~ex2_s_expo[8]) & (~ex2_s_expo[9]);
|
||
|
assign ex2_den_ramt4_08 = (~ex2_s_expo[8]) & ex2_s_expo[9];
|
||
|
assign ex2_den_ramt4_04 = ex2_s_expo[8] & (~ex2_s_expo[9]);
|
||
|
assign ex2_den_ramt4_00 = ex2_s_expo[8] & ex2_s_expo[9];
|
||
|
|
||
|
assign ex2_den_ramt1_03 = (~ex2_s_expo[10]) & (~ex2_s_expo[11]);
|
||
|
assign ex2_den_ramt1_02 = (~ex2_s_expo[10]) & ex2_s_expo[11];
|
||
|
assign ex2_den_ramt1_01 = ex2_s_expo[10] & (~ex2_s_expo[11]);
|
||
|
assign ex2_den_ramt1_00 = ex2_s_expo[10] & ex2_s_expo[11];
|
||
|
|
||
|
assign ex2_expo_eq896 = (~ex2_s_expo[1]) & ex2_s_expo[2] & ex2_s_expo[3] & ex2_s_expo[4] & (~ex2_s_expo[5]) & (~ex2_s_expo[6]) & (~ex2_s_expo[7]) & (~ex2_s_expo[8]) & (~ex2_s_expo[9]) & (~ex2_s_expo[10]) & (~ex2_s_expo[11]); // 011_1000_0000
|
||
|
|
||
|
assign ex2_expo_ge896 = (ex2_s_expo[1]) | (ex2_s_expo[2] & ex2_s_expo[3] & ex2_s_expo[4]);
|
||
|
|
||
|
assign ex2_ge874 = (ex2_s_expo[1]) | (ex2_s_expo[2] & ex2_s_expo[3] & ex2_s_expo[4]) | (ex2_s_expo[2] & ex2_s_expo[3] & ex2_s_expo[5] & ex2_s_expo[6]); // 011_0110_1010 -- enough so shifter does not wrap 011_0110_xxxx
|
||
|
|
||
|
assign ex2_expo_lt896 = (~ex2_expo_ge896);
|
||
|
assign ex2_sts_lt896 = ex2_sto_sp & ex2_expo_lt896 & ex2_ge874; // result = zero when lt 874
|
||
|
assign ex2_sts_ge896 = ex2_sto_sp & ex2_expo_ge896;
|
||
|
|
||
|
assign ex2_sts_sh8[0:23] = ({24{ex2_den_ramt8_02}} & ({{2{tidn}}, ex2_s_frac[0:21]})) |
|
||
|
({24{ex2_den_ramt8_18}} & ({{18{tidn}}, ex2_s_frac[0:5]}));
|
||
|
|
||
|
assign ex2_sts_sh4[0:23] = ({24{ex2_den_ramt4_12}} & ({{12{tidn}}, ex2_sts_sh8[0:11]})) |
|
||
|
({24{ex2_den_ramt4_08}} & ({{8{tidn}}, ex2_sts_sh8[0:15]})) |
|
||
|
({24{ex2_den_ramt4_04}} & ({{4{tidn}}, ex2_sts_sh8[0:19]})) |
|
||
|
({24{ex2_den_ramt4_00}} & (ex2_sts_sh8[0:23]));
|
||
|
|
||
|
assign ex2_sts_sh1[0:23] = ({24{ex2_den_ramt1_03}} & ({{3{tidn}}, ex2_sts_sh4[0:20]})) |
|
||
|
({24{ex2_den_ramt1_02}} & ({{2{tidn}}, ex2_sts_sh4[0:21]})) |
|
||
|
({24{ex2_den_ramt1_01}} & ({tidn, ex2_sts_sh4[0:22]})) |
|
||
|
({24{ex2_den_ramt1_00}} & (ex2_sts_sh4[0:23]));
|
||
|
|
||
|
assign ex2_sts_nrm[0:23] = ({24{ex2_expo_eq896}} & ({tidn, ex2_s_frac[0:22]})) |
|
||
|
({24{(~ex2_expo_eq896)}} & (ex2_s_frac[0:23]));
|
||
|
|
||
|
assign ex2_sts_frac[1:23] = ({23{ex2_sts_lt896}} & ex2_sts_sh1[1:23]) |
|
||
|
({23{ex2_sts_ge896}} & ex2_sts_nrm[1:23]);
|
||
|
|
||
|
////###################################################
|
||
|
////# store_sp : calc shift amount :
|
||
|
////###################################################
|
||
|
|
||
|
assign ex2_sts_expo_nz = ex2_sto_sp & ex2_expo_ge896;
|
||
|
assign ex2_sts_expo[1] = ex2_s_expo[1] & ex2_sts_expo_nz;
|
||
|
assign ex2_sts_expo[2:7] = ex2_s_expo[5:10] & {6{ex2_sts_expo_nz}};
|
||
|
assign ex2_sts_expo[8] = ex2_s_expo[11] & ex2_s_frac[0] & ex2_sts_expo_nz;
|
||
|
|
||
|
////###################################################
|
||
|
////# normalization shift left amount for store_dp
|
||
|
////###################################################
|
||
|
// count leading zeroes to get the shift amount
|
||
|
//bit pos dp_expo bin_expo inv clz lsb shift left to norm
|
||
|
//
|
||
|
// 00 x381 011_1000_0001 1_1110 00 0_0000 <== normal
|
||
|
// 01 x380 011_1000_0000 1_1111 01 0_0001
|
||
|
// 02 x37F 011_0111_1111 0_0000 02 0_0010 <=== start clz on bit 2;
|
||
|
// 03 x37E 011_0111_1110 0_0001 03 0_0010
|
||
|
// 04 x37D 011_0111_1101 0_0010 04 0_0010
|
||
|
// 05 x37C 011_0111_1100 0_0011 05 0_0010
|
||
|
// 06 x37B 011_0111_1011 0_0100 06 0_0010
|
||
|
// 07 x37A 011_0111_1010 0_0101 07 0_0010
|
||
|
// 08 x379 011_0111_1001 0_0110 08 0_0010
|
||
|
// 09 x378 011_0111_1000 0_0111 09 0_0010
|
||
|
// 10 x377 011_0111_0111 0_1000 10 0_0010
|
||
|
// 11 x376 011_0111_0110 0_1001 11 0_0010
|
||
|
// 12 x375 011_0111_0101 0_1010 12 0_0010
|
||
|
// 13 x374 011_0111_0100 0_1011 13 0_0010
|
||
|
// 14 x373 011_0111_0011 0_1100 14 0_0010
|
||
|
// 15 x372 011_0111_0010 0_1101 15 0_0010
|
||
|
// 16 x371 011_0111_0001 0_1110 16 0_0010
|
||
|
// 17 x370 011_0111_0000 0_1111 17 0_0010
|
||
|
// 18 x36F 011_0110_1111 1_0000 18 0_0010
|
||
|
// 19 x36E 011_0110_1110 1_0001 19 0_0010
|
||
|
// 20 x36D 011_0110_1101 1_0010 20 0_0010
|
||
|
// 21 x36C 011_0110_1100 1_0011 21 0_0010
|
||
|
// 22 x36B 011_0110_1011 1_0100 22 0_0010
|
||
|
// 23 x36A 011_0110_1010 1_0101 23 0_0010
|
||
|
|
||
|
// if clz does not find leading bit (shift of 0 is ok)
|
||
|
|
||
|
assign ex2_clz02_or[0] = ex2_s_frac[2] | ex2_s_frac[3];
|
||
|
assign ex2_clz02_enc4[0] = (~ex2_s_frac[2]) & ex2_s_frac[3];
|
||
|
|
||
|
assign ex2_clz02_or[1] = ex2_s_frac[4] | ex2_s_frac[5];
|
||
|
assign ex2_clz02_enc4[1] = (~ex2_s_frac[4]) & ex2_s_frac[5];
|
||
|
|
||
|
assign ex2_clz02_or[2] = ex2_s_frac[6] | ex2_s_frac[7];
|
||
|
assign ex2_clz02_enc4[2] = (~ex2_s_frac[6]) & ex2_s_frac[7];
|
||
|
|
||
|
assign ex2_clz02_or[3] = ex2_s_frac[8] | ex2_s_frac[9];
|
||
|
assign ex2_clz02_enc4[3] = (~ex2_s_frac[8]) & ex2_s_frac[9];
|
||
|
|
||
|
assign ex2_clz02_or[4] = ex2_s_frac[10] | ex2_s_frac[11];
|
||
|
assign ex2_clz02_enc4[4] = (~ex2_s_frac[10]) & ex2_s_frac[11];
|
||
|
|
||
|
assign ex2_clz02_or[5] = ex2_s_frac[12] | ex2_s_frac[13];
|
||
|
assign ex2_clz02_enc4[5] = (~ex2_s_frac[12]) & ex2_s_frac[13];
|
||
|
|
||
|
assign ex2_clz02_or[6] = ex2_s_frac[14] | ex2_s_frac[15];
|
||
|
assign ex2_clz02_enc4[6] = (~ex2_s_frac[14]) & ex2_s_frac[15];
|
||
|
|
||
|
assign ex2_clz02_or[7] = ex2_s_frac[16] | ex2_s_frac[17];
|
||
|
assign ex2_clz02_enc4[7] = (~ex2_s_frac[16]) & ex2_s_frac[17];
|
||
|
|
||
|
assign ex2_clz02_or[8] = ex2_s_frac[18] | ex2_s_frac[19];
|
||
|
assign ex2_clz02_enc4[8] = (~ex2_s_frac[18]) & ex2_s_frac[19];
|
||
|
|
||
|
assign ex2_clz02_or[9] = ex2_s_frac[20] | ex2_s_frac[21];
|
||
|
assign ex2_clz02_enc4[9] = (~ex2_s_frac[20]) & ex2_s_frac[21];
|
||
|
|
||
|
assign ex2_clz02_or[10] = ex2_s_frac[22] | ex2_s_frac[23];
|
||
|
assign ex2_clz02_enc4[10] = (~ex2_s_frac[22]) & ex2_s_frac[23];
|
||
|
|
||
|
assign ex2_clz04_or[0] = ex2_clz02_or[0] | ex2_clz02_or[1];
|
||
|
assign ex2_clz04_enc3[0] = (~ex2_clz02_or[0]) & ex2_clz02_or[1];
|
||
|
assign ex2_clz04_enc4[0] = ex2_clz02_enc4[0] | ((~ex2_clz02_or[0]) & ex2_clz02_enc4[1]);
|
||
|
|
||
|
assign ex2_clz04_or[1] = ex2_clz02_or[2] | ex2_clz02_or[3];
|
||
|
assign ex2_clz04_enc3[1] = (~ex2_clz02_or[2]) & ex2_clz02_or[3];
|
||
|
assign ex2_clz04_enc4[1] = ex2_clz02_enc4[2] | ((~ex2_clz02_or[2]) & ex2_clz02_enc4[3]);
|
||
|
|
||
|
assign ex2_clz04_or[2] = ex2_clz02_or[4] | ex2_clz02_or[5];
|
||
|
assign ex2_clz04_enc3[2] = (~ex2_clz02_or[4]) & ex2_clz02_or[5];
|
||
|
assign ex2_clz04_enc4[2] = ex2_clz02_enc4[4] | ((~ex2_clz02_or[4]) & ex2_clz02_enc4[5]);
|
||
|
|
||
|
assign ex2_clz04_or[3] = ex2_clz02_or[6] | ex2_clz02_or[7];
|
||
|
assign ex2_clz04_enc3[3] = (~ex2_clz02_or[6]) & ex2_clz02_or[7];
|
||
|
assign ex2_clz04_enc4[3] = ex2_clz02_enc4[6] | ((~ex2_clz02_or[6]) & ex2_clz02_enc4[7]);
|
||
|
|
||
|
assign ex2_clz04_or[4] = ex2_clz02_or[8] | ex2_clz02_or[9];
|
||
|
assign ex2_clz04_enc3[4] = (~ex2_clz02_or[8]) & ex2_clz02_or[9];
|
||
|
assign ex2_clz04_enc4[4] = ex2_clz02_enc4[8] | ((~ex2_clz02_or[8]) & ex2_clz02_enc4[9]);
|
||
|
|
||
|
assign ex2_clz04_or[5] = ex2_clz02_or[10];
|
||
|
assign ex2_clz04_enc3[5] = tidn;
|
||
|
assign ex2_clz04_enc4[5] = ex2_clz02_enc4[10];
|
||
|
|
||
|
assign ex2_clz08_or[0] = ex2_clz04_or[0] | ex2_clz04_or[1];
|
||
|
assign ex2_clz08_enc2[0] = (~ex2_clz04_or[0]) & ex2_clz04_or[1];
|
||
|
assign ex2_clz08_enc3[0] = ex2_clz04_enc3[0] | ((~ex2_clz04_or[0]) & ex2_clz04_enc3[1]);
|
||
|
assign ex2_clz08_enc4[0] = ex2_clz04_enc4[0] | ((~ex2_clz04_or[0]) & ex2_clz04_enc4[1]);
|
||
|
|
||
|
assign ex2_clz08_or[1] = ex2_clz04_or[2] | ex2_clz04_or[3];
|
||
|
assign ex2_clz08_enc2[1] = (~ex2_clz04_or[2]) & ex2_clz04_or[3];
|
||
|
assign ex2_clz08_enc3[1] = ex2_clz04_enc3[2] | ((~ex2_clz04_or[2]) & ex2_clz04_enc3[3]);
|
||
|
assign ex2_clz08_enc4[1] = ex2_clz04_enc4[2] | ((~ex2_clz04_or[2]) & ex2_clz04_enc4[3]);
|
||
|
|
||
|
assign ex2_clz08_or[2] = ex2_clz04_or[4] | ex2_clz04_or[5];
|
||
|
assign ex2_clz08_enc2[2] = (~ex2_clz04_or[4]) & ex2_clz04_or[5];
|
||
|
assign ex2_clz08_enc3[2] = ex2_clz04_enc3[4] | ((~ex2_clz04_or[4]) & ex2_clz04_enc3[5]);
|
||
|
assign ex2_clz08_enc4[2] = ex2_clz04_enc4[4] | ((~ex2_clz04_or[4]) & ex2_clz04_enc4[5]);
|
||
|
|
||
|
assign ex2_clz16_or[0] = ex2_clz08_or[0] | ex2_clz08_or[1];
|
||
|
assign ex2_clz16_enc1[0] = (~ex2_clz08_or[0]) & ex2_clz08_or[1];
|
||
|
assign ex2_clz16_enc2[0] = ex2_clz08_enc2[0] | ((~ex2_clz08_or[0]) & ex2_clz08_enc2[1]);
|
||
|
assign ex2_clz16_enc3[0] = ex2_clz08_enc3[0] | ((~ex2_clz08_or[0]) & ex2_clz08_enc3[1]);
|
||
|
assign ex2_clz16_enc4[0] = ex2_clz08_enc4[0] | ((~ex2_clz08_or[0]) & ex2_clz08_enc4[1]);
|
||
|
|
||
|
assign ex2_clz16_or[1] = ex2_clz08_or[2];
|
||
|
assign ex2_clz16_enc1[1] = tidn;
|
||
|
assign ex2_clz16_enc2[1] = ex2_clz08_enc2[2];
|
||
|
assign ex2_clz16_enc3[1] = ex2_clz08_enc3[2];
|
||
|
assign ex2_clz16_enc4[1] = ex2_clz08_enc4[2];
|
||
|
|
||
|
assign ex2_sto_clz[0] = (~ex2_clz16_or[0]) & ex2_clz16_or[1];
|
||
|
assign ex2_sto_clz[1] = ex2_clz16_enc1[0] | ((~ex2_clz16_or[0]) & ex2_clz16_enc1[1]);
|
||
|
assign ex2_sto_clz[2] = ex2_clz16_enc2[0] | ((~ex2_clz16_or[0]) & ex2_clz16_enc2[1]);
|
||
|
assign ex2_sto_clz[3] = ex2_clz16_enc3[0] | ((~ex2_clz16_or[0]) & ex2_clz16_enc3[1]);
|
||
|
assign ex2_sto_clz[4] = ex2_clz16_enc4[0] | ((~ex2_clz16_or[0]) & ex2_clz16_enc4[1]);
|
||
|
|
||
|
assign ex2_any_edge = (ex2_clz16_or[0] | ex2_clz16_or[1]);
|
||
|
|
||
|
////###################################################
|
||
|
////# exponent for store dp
|
||
|
////###################################################
|
||
|
// exponent must be zero when input is zero x001 * !imp
|
||
|
|
||
|
assign ex2_fixden = ex2_s_expo[2] & (~ex2_s_frac[0]); // sp denorm or zero
|
||
|
assign ex2_fixden_small = ex2_s_expo[2] & (~ex2_s_frac[0]) & ex2_s_frac[1];
|
||
|
assign ex2_fixden_big = ex2_s_expo[2] & (~ex2_s_frac[0]) & (~ex2_s_frac[1]);
|
||
|
|
||
|
assign ex2_std_nonden = ex2_sto_dp & (~ex2_fixden);
|
||
|
assign ex2_std_fixden_big = ex2_sto_dp & ex2_fixden_big; // denorm more than 1
|
||
|
assign ex2_std_fixden_small = ex2_sto_dp & ex2_fixden_small; // denorm by 1
|
||
|
assign ex2_std_nonbig = ex2_sto_dp & (~ex2_fixden_big);
|
||
|
|
||
|
// dp denorm/zero turn of expo lsb
|
||
|
// sp denorm(1) goes to x380 (turn off lsb)
|
||
|
assign ex2_expo_nonden[1:10] = ex2_s_expo[1:10] & {10{ex2_std_nonbig}};
|
||
|
assign ex2_expo_nonden[11] = ex2_s_expo[11] & ex2_s_frac[0] & ex2_std_nonden;
|
||
|
|
||
|
assign ex2_expo_fixden[1] = tidn; // 011_011x_xxx
|
||
|
assign ex2_expo_fixden[2] = ex2_any_edge; // 011_011x_xxx
|
||
|
assign ex2_expo_fixden[3] = ex2_any_edge; // 011_011x_xxx
|
||
|
assign ex2_expo_fixden[4] = tidn; // 011_011x_xxx
|
||
|
assign ex2_expo_fixden[5] = ex2_any_edge; // 011_011x_xxx
|
||
|
assign ex2_expo_fixden[6] = ex2_any_edge; // 011_011x_xxx
|
||
|
assign ex2_expo_fixden[7:11] = (~ex2_sto_clz[0:4]) & {5{ex2_any_edge}};
|
||
|
|
||
|
assign ex2_std_expo[1:11] = (ex2_expo_nonden[1:11]) |
|
||
|
(ex2_expo_fixden[1:11] & {11{ex2_std_fixden_big}});
|
||
|
|
||
|
////#########################################################################
|
||
|
////# shifting for store dp
|
||
|
////#########################################################################
|
||
|
|
||
|
assign ex2_std_nonden_wd = ex2_std_nonden | ex2_sto_wd;
|
||
|
|
||
|
assign ex2_std_frac_nrm[1:20] = (ex2_s_frac[2:21] & {20{ex2_std_fixden_small}}) |
|
||
|
(ex2_s_frac[1:20] & {20{ex2_std_nonden}});
|
||
|
assign ex2_std_frac_nrm[21:52] = (({ex2_s_frac[22:52], tidn}) & {32{ex2_std_fixden_small}}) |
|
||
|
(ex2_s_frac[21:52] & {32{ex2_std_nonden_wd}}); // stfiwx has a 32 bit result f[21:52]
|
||
|
|
||
|
assign ex2_std_lamt8_02 = (~ex2_sto_clz[0]) & (~ex2_sto_clz[1]); // 0 + 2
|
||
|
assign ex2_std_lamt8_10 = (~ex2_sto_clz[0]) & ex2_sto_clz[1]; // 8 + 2
|
||
|
assign ex2_std_lamt8_18 = ex2_sto_clz[0] & (~ex2_sto_clz[1]); //16 + 2
|
||
|
|
||
|
assign ex2_std_lamt2_0 = (~ex2_sto_clz[2]) & (~ex2_sto_clz[3]);
|
||
|
assign ex2_std_lamt2_2 = (~ex2_sto_clz[2]) & ex2_sto_clz[3];
|
||
|
assign ex2_std_lamt2_4 = ex2_sto_clz[2] & (~ex2_sto_clz[3]);
|
||
|
assign ex2_std_lamt2_6 = ex2_sto_clz[2] & ex2_sto_clz[3];
|
||
|
|
||
|
assign ex2_std_lamt1_0 = ex2_std_fixden_big & (~ex2_sto_clz[4]);
|
||
|
assign ex2_std_lamt1_1 = ex2_std_fixden_big & ex2_sto_clz[4];
|
||
|
|
||
|
//@-- -- if the input was an sp denorm (sp format) then there are only 24 input bits [0:23]
|
||
|
|
||
|
assign ex2_std_sh8[0:23] = (({ex2_s_frac[2:23], {2{tidn}}}) & {24{ex2_std_lamt8_02}}) |
|
||
|
(({ex2_s_frac[10:23], {10{tidn}}}) & {24{ex2_std_lamt8_10}}) |
|
||
|
(({ex2_s_frac[18:23], {18{tidn}}}) & {24{ex2_std_lamt8_18}});
|
||
|
|
||
|
assign ex2_std_sh2[0:23] = (ex2_std_sh8[0:23] & {24{ex2_std_lamt2_0}}) |
|
||
|
(({ex2_std_sh8[2:23], {2{tidn}}}) & {24{ex2_std_lamt2_2}}) |
|
||
|
(({ex2_std_sh8[4:23], {4{tidn}}}) & {24{ex2_std_lamt2_4}}) |
|
||
|
(({ex2_std_sh8[6:23], {6{tidn}}}) & {24{ex2_std_lamt2_6}});
|
||
|
|
||
|
assign ex2_std_frac_den[1:23] = (ex2_std_sh2[1:23] & {23{ex2_std_lamt1_0}}) |
|
||
|
(({ex2_std_sh2[2:23], tidn}) & {23{ex2_std_lamt1_1}});
|
||
|
|
||
|
////###################################################
|
||
|
////# final combinations
|
||
|
////###################################################
|
||
|
|
||
|
assign ex2_sto_data[0] = ex2_s_sign & (~ex2_sto_wd); // sign bit
|
||
|
|
||
|
assign ex2_sto_data[1:8] = ex2_sts_expo[1:8] | ex2_std_expo[1:8];
|
||
|
|
||
|
assign ex2_sto_data[9:11] = ex2_sts_frac[1:3] | ex2_std_expo[9:11];
|
||
|
|
||
|
assign ex2_sto_data[12:31] = ex2_sts_frac[4:23] | ex2_std_frac_nrm[1:20] | ex2_std_frac_den[1:20];
|
||
|
|
||
|
assign ex2_sto_data[32:34] = ex2_std_frac_nrm[21:23] | ex2_std_frac_den[21:23]; //03 bits (includes stfwix)
|
||
|
|
||
|
assign ex2_sto_data[35:63] = ex2_std_frac_nrm[24:52]; //29 bits (includes stfwix)
|
||
|
|
||
|
////##############################################
|
||
|
////# EX3 latches
|
||
|
////##############################################
|
||
|
|
||
|
|
||
|
tri_rlmreg_p #(.WIDTH(73), .NEEDS_SRESET(0), .IBUF(1'B1)) ex3_sto_lat(
|
||
|
.force_t(force_t), //tidn,
|
||
|
.d_mode(tiup),
|
||
|
.delay_lclkr(delay_lclkr[2]), //tidn,
|
||
|
.mpw1_b(mpw1_b[2]), //tidn,
|
||
|
.mpw2_b(mpw2_b[0]), //tidn,
|
||
|
.nclk(nclk),
|
||
|
.thold_b(thold_0_b),
|
||
|
.sg(sg_0),
|
||
|
.act(ex2_act),
|
||
|
.vd(vdd),
|
||
|
.gd(gnd),
|
||
|
.scout(ex3_sto_so),
|
||
|
.scin(ex3_sto_si),
|
||
|
//-----------------
|
||
|
.din({ ex2_sto_data[0:63],
|
||
|
ex2_sto_sp,
|
||
|
ex2_sto_sp,
|
||
|
ex2_sto_sp,
|
||
|
ex2_sto_sp,
|
||
|
ex2_sto_wd,
|
||
|
ex2_sto_wd,
|
||
|
ex2_sto_wd,
|
||
|
ex2_sto_wd,
|
||
|
ex2_s_party_chick}),
|
||
|
|
||
|
.dout({ ex3_sto_data[0:63], //LAT--
|
||
|
ex3_sto_sp[0], //LAT--
|
||
|
ex3_sto_sp[1], //LAT--
|
||
|
ex3_sto_sp[2], //LAT--
|
||
|
ex3_sto_sp[3], //LAT--
|
||
|
ex3_sto_wd[0], //LAT--
|
||
|
ex3_sto_wd[1], //LAT--
|
||
|
ex3_sto_wd[2], //LAT--
|
||
|
ex3_sto_wd[3], //LAT--
|
||
|
ex3_s_party_chick}) //LAT--
|
||
|
);
|
||
|
|
||
|
assign f_sto_ex3_s_parity_check = ex3_s_party_chick;
|
||
|
|
||
|
// 1 unused
|
||
|
// 2 xx
|
||
|
// 3 1
|
||
|
// 4 2
|
||
|
// 5 3
|
||
|
// 6 4
|
||
|
// 7 5
|
||
|
// 8 6
|
||
|
// 9 7
|
||
|
// 10 8
|
||
|
// 11 9
|
||
|
// 12 10
|
||
|
// 13 11
|
||
|
|
||
|
assign ex2_s_party[0] = ex2_s_sign ^ f_fpr_ex2_s_expo_extra[0] ^ f_fpr_ex2_s_expo_extra[1] ^ ex2_s_expo[1] ^ ex2_s_expo[2] ^ ex2_s_expo[3] ^ ex2_s_expo[4] ^ ex2_s_expo[5] ^ ex2_s_expo[6] ^ ex2_s_expo[7];
|
||
|
assign ex2_s_party[1] = ex2_s_expo[8] ^ ex2_s_expo[9] ^ ex2_s_expo[10] ^ ex2_s_expo[11] ^ ex2_s_frac[0] ^ ex2_s_frac[1] ^ ex2_s_frac[2] ^ ex2_s_frac[3] ^ ex2_s_frac[4];
|
||
|
assign ex2_s_party[2] = ex2_s_frac[5] ^ ex2_s_frac[6] ^ ex2_s_frac[7] ^ ex2_s_frac[8] ^ ex2_s_frac[9] ^ ex2_s_frac[10] ^ ex2_s_frac[11] ^ ex2_s_frac[12];
|
||
|
assign ex2_s_party[3] = ex2_s_frac[13] ^ ex2_s_frac[14] ^ ex2_s_frac[15] ^ ex2_s_frac[16] ^ ex2_s_frac[17] ^ ex2_s_frac[18] ^ ex2_s_frac[19] ^ ex2_s_frac[20];
|
||
|
assign ex2_s_party[4] = ex2_s_frac[21] ^ ex2_s_frac[22] ^ ex2_s_frac[23] ^ ex2_s_frac[24] ^ ex2_s_frac[25] ^ ex2_s_frac[26] ^ ex2_s_frac[27] ^ ex2_s_frac[28];
|
||
|
assign ex2_s_party[5] = ex2_s_frac[29] ^ ex2_s_frac[30] ^ ex2_s_frac[31] ^ ex2_s_frac[32] ^ ex2_s_frac[33] ^ ex2_s_frac[34] ^ ex2_s_frac[35] ^ ex2_s_frac[36];
|
||
|
assign ex2_s_party[6] = ex2_s_frac[37] ^ ex2_s_frac[38] ^ ex2_s_frac[39] ^ ex2_s_frac[40] ^ ex2_s_frac[41] ^ ex2_s_frac[42] ^ ex2_s_frac[43] ^ ex2_s_frac[44];
|
||
|
assign ex2_s_party[7] = ex2_s_frac[45] ^ ex2_s_frac[46] ^ ex2_s_frac[47] ^ ex2_s_frac[48] ^ ex2_s_frac[49] ^ ex2_s_frac[50] ^ ex2_s_frac[51] ^ ex2_s_frac[52];
|
||
|
|
||
|
assign ex2_s_party_chick = (ex2_s_party[0] ^ f_fpr_ex2_s_par[0]) | (ex2_s_party[1] ^ f_fpr_ex2_s_par[1]) | (ex2_s_party[2] ^ f_fpr_ex2_s_par[2]) | (ex2_s_party[3] ^ f_fpr_ex2_s_par[3]) | (ex2_s_party[4] ^ f_fpr_ex2_s_par[4]) | (ex2_s_party[5] ^ f_fpr_ex2_s_par[5]) | (ex2_s_party[6] ^ f_fpr_ex2_s_par[6]) | (ex2_s_party[7] ^ f_fpr_ex2_s_par[7]);
|
||
|
|
||
|
////##############################################
|
||
|
////# EX3 logic
|
||
|
////##############################################
|
||
|
//@@ ex3_sto_data_rot(0 to 31) <=
|
||
|
//@@ ( ex3_sto_data( 0 to 31) and ( 0 to 31=> not ex3_sto_wd) ) or
|
||
|
//@@ ( ex3_sto_data(32 to 63) and ( 0 to 31=> ex3_sto_wd) );
|
||
|
//@@
|
||
|
//@@ ex3_sto_data_rot(32 to 63) <=
|
||
|
//@@ ( ex3_sto_data( 0 to 31) and (32 to 63=> ex3_sto_sp) ) or
|
||
|
//@@ ( ex3_sto_data(32 to 63) and (32 to 63=> not ex3_sto_sp) );
|
||
|
//@@
|
||
|
//@@
|
||
|
//@@ f_sto_ex3_sto_data( 0 to 63) <= ex3_sto_data_rot(0 to 63);
|
||
|
//@@
|
||
|
|
||
|
assign ex3_sto_data_rot0_b[0] = (~(ex3_sto_data[0] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[1] = (~(ex3_sto_data[1] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[2] = (~(ex3_sto_data[2] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[3] = (~(ex3_sto_data[3] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[4] = (~(ex3_sto_data[4] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[5] = (~(ex3_sto_data[5] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[6] = (~(ex3_sto_data[6] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[7] = (~(ex3_sto_data[7] & (~ex3_sto_wd[0])));
|
||
|
assign ex3_sto_data_rot0_b[8] = (~(ex3_sto_data[8] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[9] = (~(ex3_sto_data[9] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[10] = (~(ex3_sto_data[10] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[11] = (~(ex3_sto_data[11] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[12] = (~(ex3_sto_data[12] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[13] = (~(ex3_sto_data[13] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[14] = (~(ex3_sto_data[14] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[15] = (~(ex3_sto_data[15] & (~ex3_sto_wd[1])));
|
||
|
assign ex3_sto_data_rot0_b[16] = (~(ex3_sto_data[16] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[17] = (~(ex3_sto_data[17] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[18] = (~(ex3_sto_data[18] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[19] = (~(ex3_sto_data[19] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[20] = (~(ex3_sto_data[20] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[21] = (~(ex3_sto_data[21] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[22] = (~(ex3_sto_data[22] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[23] = (~(ex3_sto_data[23] & (~ex3_sto_wd[2])));
|
||
|
assign ex3_sto_data_rot0_b[24] = (~(ex3_sto_data[24] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[25] = (~(ex3_sto_data[25] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[26] = (~(ex3_sto_data[26] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[27] = (~(ex3_sto_data[27] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[28] = (~(ex3_sto_data[28] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[29] = (~(ex3_sto_data[29] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[30] = (~(ex3_sto_data[30] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[31] = (~(ex3_sto_data[31] & (~ex3_sto_wd[3])));
|
||
|
assign ex3_sto_data_rot0_b[32] = (~(ex3_sto_data[0] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[33] = (~(ex3_sto_data[1] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[34] = (~(ex3_sto_data[2] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[35] = (~(ex3_sto_data[3] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[36] = (~(ex3_sto_data[4] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[37] = (~(ex3_sto_data[5] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[38] = (~(ex3_sto_data[6] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[39] = (~(ex3_sto_data[7] & ex3_sto_sp[0]));
|
||
|
assign ex3_sto_data_rot0_b[40] = (~(ex3_sto_data[8] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[41] = (~(ex3_sto_data[9] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[42] = (~(ex3_sto_data[10] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[43] = (~(ex3_sto_data[11] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[44] = (~(ex3_sto_data[12] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[45] = (~(ex3_sto_data[13] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[46] = (~(ex3_sto_data[14] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[47] = (~(ex3_sto_data[15] & ex3_sto_sp[1]));
|
||
|
assign ex3_sto_data_rot0_b[48] = (~(ex3_sto_data[16] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[49] = (~(ex3_sto_data[17] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[50] = (~(ex3_sto_data[18] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[51] = (~(ex3_sto_data[19] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[52] = (~(ex3_sto_data[20] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[53] = (~(ex3_sto_data[21] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[54] = (~(ex3_sto_data[22] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[55] = (~(ex3_sto_data[23] & ex3_sto_sp[2]));
|
||
|
assign ex3_sto_data_rot0_b[56] = (~(ex3_sto_data[24] & ex3_sto_sp[3]));
|
||
|
assign ex3_sto_data_rot0_b[57] = (~(ex3_sto_data[25] & ex3_sto_sp[3]));
|
||
|
assign ex3_sto_data_rot0_b[58] = (~(ex3_sto_data[26] & ex3_sto_sp[3]));
|
||
|
assign ex3_sto_data_rot0_b[59] = (~(ex3_sto_data[27] & ex3_sto_sp[3]));
|
||
|
assign ex3_sto_data_rot0_b[60] = (~(ex3_sto_data[28] & ex3_sto_sp[3]));
|
||
|
assign ex3_sto_data_rot0_b[61] = (~(ex3_sto_data[29] & ex3_sto_sp[3]));
|
||
|
assign ex3_sto_data_rot0_b[62] = (~(ex3_sto_data[30] & ex3_sto_sp[3]));
|
||
|
assign ex3_sto_data_rot0_b[63] = (~(ex3_sto_data[31] & ex3_sto_sp[3]));
|
||
|
|
||
|
assign ex3_sto_data_rot1_b[0] = (~(ex3_sto_data[32] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[1] = (~(ex3_sto_data[33] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[2] = (~(ex3_sto_data[34] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[3] = (~(ex3_sto_data[35] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[4] = (~(ex3_sto_data[36] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[5] = (~(ex3_sto_data[37] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[6] = (~(ex3_sto_data[38] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[7] = (~(ex3_sto_data[39] & ex3_sto_wd[0]));
|
||
|
assign ex3_sto_data_rot1_b[8] = (~(ex3_sto_data[40] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[9] = (~(ex3_sto_data[41] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[10] = (~(ex3_sto_data[42] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[11] = (~(ex3_sto_data[43] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[12] = (~(ex3_sto_data[44] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[13] = (~(ex3_sto_data[45] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[14] = (~(ex3_sto_data[46] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[15] = (~(ex3_sto_data[47] & ex3_sto_wd[1]));
|
||
|
assign ex3_sto_data_rot1_b[16] = (~(ex3_sto_data[48] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[17] = (~(ex3_sto_data[49] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[18] = (~(ex3_sto_data[50] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[19] = (~(ex3_sto_data[51] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[20] = (~(ex3_sto_data[52] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[21] = (~(ex3_sto_data[53] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[22] = (~(ex3_sto_data[54] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[23] = (~(ex3_sto_data[55] & ex3_sto_wd[2]));
|
||
|
assign ex3_sto_data_rot1_b[24] = (~(ex3_sto_data[56] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[25] = (~(ex3_sto_data[57] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[26] = (~(ex3_sto_data[58] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[27] = (~(ex3_sto_data[59] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[28] = (~(ex3_sto_data[60] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[29] = (~(ex3_sto_data[61] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[30] = (~(ex3_sto_data[62] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[31] = (~(ex3_sto_data[63] & ex3_sto_wd[3]));
|
||
|
assign ex3_sto_data_rot1_b[32] = (~(ex3_sto_data[32] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[33] = (~(ex3_sto_data[33] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[34] = (~(ex3_sto_data[34] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[35] = (~(ex3_sto_data[35] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[36] = (~(ex3_sto_data[36] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[37] = (~(ex3_sto_data[37] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[38] = (~(ex3_sto_data[38] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[39] = (~(ex3_sto_data[39] & (~ex3_sto_sp[0])));
|
||
|
assign ex3_sto_data_rot1_b[40] = (~(ex3_sto_data[40] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[41] = (~(ex3_sto_data[41] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[42] = (~(ex3_sto_data[42] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[43] = (~(ex3_sto_data[43] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[44] = (~(ex3_sto_data[44] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[45] = (~(ex3_sto_data[45] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[46] = (~(ex3_sto_data[46] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[47] = (~(ex3_sto_data[47] & (~ex3_sto_sp[1])));
|
||
|
assign ex3_sto_data_rot1_b[48] = (~(ex3_sto_data[48] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[49] = (~(ex3_sto_data[49] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[50] = (~(ex3_sto_data[50] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[51] = (~(ex3_sto_data[51] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[52] = (~(ex3_sto_data[52] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[53] = (~(ex3_sto_data[53] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[54] = (~(ex3_sto_data[54] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[55] = (~(ex3_sto_data[55] & (~ex3_sto_sp[2])));
|
||
|
assign ex3_sto_data_rot1_b[56] = (~(ex3_sto_data[56] & (~ex3_sto_sp[3])));
|
||
|
assign ex3_sto_data_rot1_b[57] = (~(ex3_sto_data[57] & (~ex3_sto_sp[3])));
|
||
|
assign ex3_sto_data_rot1_b[58] = (~(ex3_sto_data[58] & (~ex3_sto_sp[3])));
|
||
|
assign ex3_sto_data_rot1_b[59] = (~(ex3_sto_data[59] & (~ex3_sto_sp[3])));
|
||
|
assign ex3_sto_data_rot1_b[60] = (~(ex3_sto_data[60] & (~ex3_sto_sp[3])));
|
||
|
assign ex3_sto_data_rot1_b[61] = (~(ex3_sto_data[61] & (~ex3_sto_sp[3])));
|
||
|
assign ex3_sto_data_rot1_b[62] = (~(ex3_sto_data[62] & (~ex3_sto_sp[3])));
|
||
|
assign ex3_sto_data_rot1_b[63] = (~(ex3_sto_data[63] & (~ex3_sto_sp[3])));
|
||
|
|
||
|
assign f_sto_ex3_sto_data[0:63] = (~(ex3_sto_data_rot0_b[0:63] & ex3_sto_data_rot1_b[0:63]));
|
||
|
|
||
|
////############################################
|
||
|
////# scan
|
||
|
////############################################
|
||
|
|
||
|
assign ex2_sins_si[0:2] = {ex2_sins_so[1:2], f_sto_si};
|
||
|
assign ex2_sop_si[0:64] = {ex2_sop_so[1:64], ex2_sins_so[0]};
|
||
|
assign ex3_sto_si[0:72] = {ex3_sto_so[1:72], ex2_sop_so[0]};
|
||
|
assign act_si[0:3] = {act_so[1:3], ex3_sto_so[0]};
|
||
|
assign f_sto_so = act_so[0];
|
||
|
|
||
|
endmodule
|