// © 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