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.

871 lines
47 KiB
VHDL

-- © 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.
library ieee,ibm,support,tri,work;
use ieee.std_logic_1164.all;
use ibm.std_ulogic_unsigned.all;
use ibm.std_ulogic_support.all;
use ibm.std_ulogic_function_support.all;
use support.power_logic_pkg.all;
use tri.tri_latches_pkg.all;
use ibm.std_ulogic_ao_support.all;
use ibm.std_ulogic_mux_support.all;
-- 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
ENTITY fuq_sto IS
generic(
expand_type : integer := 2 ); -- 0 - ibm tech, 1 - other );
PORT(
vdd :inout power_logic;
gnd :inout power_logic;
clkoff_b :in std_ulogic; -- tiup
act_dis :in std_ulogic; -- ??tidn??
flush :in std_ulogic; -- ??tidn??
delay_lclkr :in std_ulogic_vector(1 to 2); -- tidn,
mpw1_b :in std_ulogic_vector(1 to 2); -- tidn,
mpw2_b :in std_ulogic_vector(0 to 0); -- tidn,
sg_1 :in std_ulogic;
thold_1 :in std_ulogic;
fpu_enable :in std_ulogic; --dc_act
nclk :in clk_logic;
f_sto_si :in std_ulogic;
f_sto_so :out std_ulogic;
f_dcd_rf1_sto_act :in std_ulogic;
f_fpr_ex1_s_expo_extra :in std_ulogic ;
f_fpr_ex1_s_par :in std_ulogic_vector(0 to 7) ;
f_sto_ex2_s_parity_check :out std_ulogic ;
f_dcd_rf1_sto_dp :in std_ulogic ;
f_dcd_rf1_sto_sp :in std_ulogic ;
f_dcd_rf1_sto_wd :in std_ulogic ;
f_byp_rf1_s_sign :in std_ulogic ;
f_byp_rf1_s_expo :in std_ulogic_vector(1 to 11) ;
f_byp_rf1_s_frac :in std_ulogic_vector(0 to 52) ;
f_sto_ex2_sto_data :out std_ulogic_vector(0 to 63)
); -- end ports
end fuq_sto; -- ENTITY
architecture fuq_sto of fuq_sto is
constant tiup :std_ulogic := '1';
constant tidn :std_ulogic := '0';
signal sg_0 :std_ulogic ;
signal thold_0_b, thold_0 :std_ulogic ;
signal rf1_act :std_ulogic ;
signal ex1_act :std_ulogic ;
signal spare_unused :std_ulogic_vector(0 to 2) ;
-------------------
signal act_so :std_ulogic_vector(0 to 3) ;--SCAN
signal act_si :std_ulogic_vector(0 to 3) ;--SCAN
signal ex1_sins_so :std_ulogic_vector(0 to 2) ;
signal ex1_sins_si :std_ulogic_vector(0 to 2) ;
signal ex1_sop_so :std_ulogic_vector(0 to 64) ;
signal ex1_sop_si :std_ulogic_vector(0 to 64) ;
signal ex2_sto_so :std_ulogic_vector(0 to 72) ;
signal ex2_sto_si :std_ulogic_vector(0 to 72) ;
-------------------
signal ex1_s_sign :std_ulogic;
signal ex1_s_expo :std_ulogic_vector(1 to 11);
signal ex1_s_frac :std_ulogic_vector(0 to 52);
signal ex1_sto_data :std_ulogic_vector(0 to 63) ;
signal ex2_sto_data :std_ulogic_vector(0 to 63) ;
signal ex1_sto_dp :std_ulogic ;
signal ex1_sto_sp :std_ulogic ;
signal ex1_sto_wd :std_ulogic ;
signal ex1_den_ramt8_02 :std_ulogic;
signal ex1_den_ramt8_18 :std_ulogic;
signal ex1_den_ramt4_12 :std_ulogic;
signal ex1_den_ramt4_08 :std_ulogic;
signal ex1_den_ramt4_04 :std_ulogic;
signal ex1_den_ramt4_00 :std_ulogic;
signal ex1_den_ramt1_03 :std_ulogic;
signal ex1_den_ramt1_02 :std_ulogic;
signal ex1_den_ramt1_01 :std_ulogic;
signal ex1_den_ramt1_00 :std_ulogic;
signal ex1_expo_eq896 :std_ulogic;
signal ex1_expo_ge896 :std_ulogic;
signal ex1_expo_lt896 :std_ulogic;
signal ex1_sts_lt896 :std_ulogic;
signal ex1_sts_ge896 :std_ulogic;
signal ex1_sts_expo_nz :std_ulogic;
signal ex1_fixden :std_ulogic;
signal ex1_fixden_small :std_ulogic;
signal ex1_fixden_big :std_ulogic;
signal ex1_std_nonden :std_ulogic;
signal ex1_std_fixden_big :std_ulogic;
signal ex1_std_fixden_small :std_ulogic;
signal ex1_std_nonbig :std_ulogic;
signal ex1_std_nonden_wd :std_ulogic;
signal ex1_std_lamt8_02 :std_ulogic;
signal ex1_std_lamt8_10 :std_ulogic;
signal ex1_std_lamt8_18 :std_ulogic;
signal ex1_std_lamt2_0 :std_ulogic;
signal ex1_std_lamt2_2 :std_ulogic;
signal ex1_std_lamt2_4 :std_ulogic;
signal ex1_std_lamt2_6 :std_ulogic;
signal ex1_std_lamt1_0 :std_ulogic;
signal ex1_std_lamt1_1 :std_ulogic;
signal ex1_sts_sh8 :std_ulogic_vector(0 to 23) ;
signal ex1_sts_sh4 :std_ulogic_vector(0 to 23) ;
signal ex1_sts_sh1 :std_ulogic_vector(0 to 23) ;
signal ex1_sts_nrm :std_ulogic_vector(0 to 23) ;
signal ex1_sts_frac :std_ulogic_vector(1 to 23) ;
signal ex1_sts_expo :std_ulogic_vector(1 to 8) ;
signal ex1_clz02_or :std_ulogic_vector(0 to 10) ;
signal ex1_clz02_enc4 :std_ulogic_vector(0 to 10) ;
signal ex1_clz04_or :std_ulogic_vector(0 to 5) ;
signal ex1_clz04_enc3 :std_ulogic_vector(0 to 5) ;
signal ex1_clz04_enc4 :std_ulogic_vector(0 to 5) ;
signal ex1_clz08_or :std_ulogic_vector(0 to 2) ;
signal ex1_clz08_enc2 :std_ulogic_vector(0 to 2) ;
signal ex1_clz08_enc3 :std_ulogic_vector(0 to 2) ;
signal ex1_clz08_enc4 :std_ulogic_vector(0 to 2) ;
signal ex1_clz16_or :std_ulogic_vector(0 to 1) ;
signal ex1_clz16_enc1 :std_ulogic_vector(0 to 1) ;
signal ex1_clz16_enc2 :std_ulogic_vector(0 to 1) ;
signal ex1_clz16_enc3 :std_ulogic_vector(0 to 1) ;
signal ex1_clz16_enc4 :std_ulogic_vector(0 to 1) ;
signal ex1_sto_clz :std_ulogic_vector(0 to 4) ;
signal ex1_expo_nonden :std_ulogic_vector(1 to 11) ;
signal ex1_expo_fixden :std_ulogic_vector(1 to 11) ;
signal ex1_std_expo :std_ulogic_vector(1 to 11) ;
signal ex1_std_frac_nrm :std_ulogic_vector(1 to 52) ;
signal ex1_std_sh8 :std_ulogic_vector(0 to 23) ;
signal ex1_std_sh2 :std_ulogic_vector(0 to 23) ;
signal ex1_std_frac_den :std_ulogic_vector(1 to 23) ;
signal ex1_ge874 :std_ulogic;
signal ex1_any_edge :std_ulogic;
signal ex2_sto_data_rot0_b , ex2_sto_data_rot1_b :std_ulogic_vector(0 to 63);
signal ex2_sto_wd, ex2_sto_sp :std_ulogic_vector(0 to 3);
signal forcee :std_ulogic;
signal ex1_s_party_chick, ex2_s_party_chick :std_ulogic ;
signal ex1_s_party : std_ulogic_vector(0 to 7);
signal unused :std_ulogic;
begin
--//############################################
--//# pervasive
--//############################################
unused <= ex1_sts_sh1(0) or ex1_sts_nrm(0) or ex1_std_sh2(0) ;
thold_reg_0: tri_plat generic map (expand_type => expand_type) port map (
vd => vdd,
gd => gnd,
nclk => nclk,
flush => flush ,
din(0) => thold_1,
q(0) => thold_0 );
sg_reg_0: tri_plat generic map (expand_type => expand_type) port map (
vd => vdd,
gd => gnd,
nclk => nclk,
flush => flush ,
din(0) => sg_1 ,
q(0) => sg_0 );
lcbor_0: tri_lcbor generic map (expand_type => expand_type ) port map (
clkoff_b => clkoff_b,
thold => thold_0,
sg => sg_0,
act_dis => act_dis,
forcee => forcee,
thold_b => thold_0_b );
--//############################################
--//# ACT LATCHES
--//############################################
rf1_act <= f_dcd_rf1_sto_act;
act_lat: tri_rlmreg_p generic map (width=> 4, expand_type => expand_type) port map (
vd => vdd,
gd => gnd,
nclk => nclk,
forcee => forcee, -- tidn
delay_lclkr => delay_lclkr(1), -- tidn,
mpw1_b => mpw1_b(1), -- tidn,
mpw2_b => mpw2_b(0), -- tidn,
act => fpu_enable,
thold_b => thold_0_b,
sg => sg_0,
scout => act_so ,
scin => act_si ,
-------------------
din(0) => rf1_act,
din(1 to 3) => spare_unused(0 to 2) ,
-------------------
dout(0) => ex1_act ,
dout(1 to 3) => spare_unused(0 to 2) );
--//##############################################
--//# EX1 latch inputs from rf1
--//##############################################
ex1_sins_lat: entity tri.tri_rlmreg_p generic map (width=> 3, expand_type => expand_type, ibuf => true ) port map (
forcee => forcee,--tidn,
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 => rf1_act,
vd => vdd,
gd => gnd,
scout => ex1_sins_so ,
scin => ex1_sins_si ,
-------------------
din(0) => f_dcd_rf1_sto_dp ,
din(1) => f_dcd_rf1_sto_sp ,
din(2) => f_dcd_rf1_sto_wd ,
-------------------
dout(0) => ex1_sto_dp ,
dout(1) => ex1_sto_sp ,
dout(2) => ex1_sto_wd );
ex1_sop_lat: entity tri.tri_rlmreg_p generic map (width=> 65, expand_type => expand_type, needs_sreset => 0, ibuf => true) port map (
forcee => forcee,--tidn,
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 => rf1_act,
vd => vdd,
gd => gnd,
scout => ex1_sop_so ,
scin => ex1_sop_si ,
-------------------
din(0) => f_byp_rf1_s_sign ,
din(1 to 11) => f_byp_rf1_s_expo(1 to 11) ,
din(12 to 64) => f_byp_rf1_s_frac(0 to 52) ,
-------------------
dout(0) => ex1_s_sign ,
dout(1 to 11) => ex1_s_expo(1 to 11),
dout(12 to 64) => ex1_s_frac(0 to 52) );
--//##############################################
--//# EX1 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
ex1_den_ramt8_02 <= ex1_s_expo(6) and ex1_s_expo(7);
ex1_den_ramt8_18 <= ex1_s_expo(6) and not ex1_s_expo(7);
ex1_den_ramt4_12 <= not ex1_s_expo(8) and not ex1_s_expo(9);
ex1_den_ramt4_08 <= not ex1_s_expo(8) and ex1_s_expo(9);
ex1_den_ramt4_04 <= ex1_s_expo(8) and not ex1_s_expo(9);
ex1_den_ramt4_00 <= ex1_s_expo(8) and ex1_s_expo(9);
ex1_den_ramt1_03 <= not ex1_s_expo(10) and not ex1_s_expo(11);
ex1_den_ramt1_02 <= not ex1_s_expo(10) and ex1_s_expo(11);
ex1_den_ramt1_01 <= ex1_s_expo(10) and not ex1_s_expo(11);
ex1_den_ramt1_00 <= ex1_s_expo(10) and ex1_s_expo(11);
ex1_expo_eq896 <= not ex1_s_expo(1) and -- 011_1000_0000
ex1_s_expo(2) and
ex1_s_expo(3) and
ex1_s_expo(4) and
not ex1_s_expo(5) and
not ex1_s_expo(6) and
not ex1_s_expo(7) and
not ex1_s_expo(8) and
not ex1_s_expo(9) and
not ex1_s_expo(10) and
not ex1_s_expo(11) ;
ex1_expo_ge896 <=
( ex1_s_expo(1) ) or
( ex1_s_expo(2) and ex1_s_expo(3) and ex1_s_expo(4) ) ;
ex1_ge874 <= -- 011_0110_1010 -- enough so shifter does not wrap 011_0110_xxxx
( ex1_s_expo(1) ) or
( ex1_s_expo(2) and ex1_s_expo(3) and ex1_s_expo(4) ) or
( ex1_s_expo(2) and ex1_s_expo(3) and ex1_s_expo(5) and ex1_s_expo(6) );
ex1_expo_lt896 <= not ex1_expo_ge896;
ex1_sts_lt896 <= ex1_sto_sp and ex1_expo_lt896 and ex1_ge874 ; -- result = zero when lt 874
ex1_sts_ge896 <= ex1_sto_sp and ex1_expo_ge896 ;
ex1_sts_sh8(0 to 23) <=
( (0 to 23 => ex1_den_ramt8_02) and ( (0 to 1 => tidn) & ex1_s_frac(0 to 21) ) ) or
( (0 to 23 => ex1_den_ramt8_18) and ( (0 to 17 => tidn) & ex1_s_frac(0 to 5) ) ) ;
ex1_sts_sh4(0 to 23) <=
( (0 to 23 => ex1_den_ramt4_12) and ( (0 to 11 => tidn) & ex1_sts_sh8(0 to 11) ) ) or
( (0 to 23 => ex1_den_ramt4_08) and ( (0 to 7 => tidn) & ex1_sts_sh8(0 to 15) ) ) or
( (0 to 23 => ex1_den_ramt4_04) and ( (0 to 3 => tidn) & ex1_sts_sh8(0 to 19) ) ) or
( (0 to 23 => ex1_den_ramt4_00) and ( ex1_sts_sh8(0 to 23) ) ) ;
ex1_sts_sh1(0 to 23) <=
( (0 to 23 => ex1_den_ramt1_03) and ( (0 to 2 => tidn) & ex1_sts_sh4(0 to 20) ) ) or
( (0 to 23 => ex1_den_ramt1_02) and ( (0 to 1 => tidn) & ex1_sts_sh4(0 to 21) ) ) or
( (0 to 23 => ex1_den_ramt1_01) and ( tidn & ex1_sts_sh4(0 to 22) ) ) or
( (0 to 23 => ex1_den_ramt1_00) and ( ex1_sts_sh4(0 to 23) ) ) ;
ex1_sts_nrm(0 to 23) <=
( (0 to 23 => ex1_expo_eq896) and ( tidn & ex1_s_frac(0 to 22) ) ) or
( (0 to 23 => not ex1_expo_eq896) and ( ex1_s_frac(0 to 23) ) ) ;
ex1_sts_frac(1 to 23) <=
( (1 to 23 => ex1_sts_lt896) and ex1_sts_sh1(1 to 23) ) or
( (1 to 23 => ex1_sts_ge896) and ex1_sts_nrm(1 to 23) ) ;
--//###################################################
--//# store_sp : calc shift amount :
--//###################################################
ex1_sts_expo_nz <= ex1_sto_sp and ex1_expo_ge896 ;
ex1_sts_expo(1) <= ex1_s_expo(1) and ex1_sts_expo_nz ;
ex1_sts_expo(2 to 7) <= ex1_s_expo(5 to 10) and (2 to 7=> ex1_sts_expo_nz);
ex1_sts_expo(8) <= ex1_s_expo(11) and ex1_s_frac(0) and ex1_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)
ex1_clz02_or ( 0) <= ex1_s_frac( 2) or ex1_s_frac( 3);
ex1_clz02_enc4( 0) <= not ex1_s_frac( 2) and ex1_s_frac( 3);
ex1_clz02_or ( 1) <= ex1_s_frac( 4) or ex1_s_frac( 5);
ex1_clz02_enc4( 1) <= not ex1_s_frac( 4) and ex1_s_frac( 5);
ex1_clz02_or ( 2) <= ex1_s_frac( 6) or ex1_s_frac( 7);
ex1_clz02_enc4( 2) <= not ex1_s_frac( 6) and ex1_s_frac( 7);
ex1_clz02_or ( 3) <= ex1_s_frac( 8) or ex1_s_frac( 9);
ex1_clz02_enc4( 3) <= not ex1_s_frac( 8) and ex1_s_frac( 9);
ex1_clz02_or ( 4) <= ex1_s_frac(10) or ex1_s_frac(11);
ex1_clz02_enc4( 4) <= not ex1_s_frac(10) and ex1_s_frac(11);
ex1_clz02_or ( 5) <= ex1_s_frac(12) or ex1_s_frac(13);
ex1_clz02_enc4( 5) <= not ex1_s_frac(12) and ex1_s_frac(13);
ex1_clz02_or ( 6) <= ex1_s_frac(14) or ex1_s_frac(15);
ex1_clz02_enc4( 6) <= not ex1_s_frac(14) and ex1_s_frac(15);
ex1_clz02_or ( 7) <= ex1_s_frac(16) or ex1_s_frac(17);
ex1_clz02_enc4( 7) <= not ex1_s_frac(16) and ex1_s_frac(17);
ex1_clz02_or ( 8) <= ex1_s_frac(18) or ex1_s_frac(19);
ex1_clz02_enc4( 8) <= not ex1_s_frac(18) and ex1_s_frac(19);
ex1_clz02_or ( 9) <= ex1_s_frac(20) or ex1_s_frac(21);
ex1_clz02_enc4( 9) <= not ex1_s_frac(20) and ex1_s_frac(21);
ex1_clz02_or (10) <= ex1_s_frac(22) or ex1_s_frac(23);
ex1_clz02_enc4(10) <= not ex1_s_frac(22) and ex1_s_frac(23);
ex1_clz04_or ( 0) <= ex1_clz02_or( 0) or ex1_clz02_or ( 1) ;
ex1_clz04_enc3( 0) <= not ex1_clz02_or( 0) and ex1_clz02_or ( 1) ;
ex1_clz04_enc4( 0) <= ex1_clz02_enc4( 0) or (not ex1_clz02_or( 0) and ex1_clz02_enc4( 1) );
ex1_clz04_or ( 1) <= ex1_clz02_or( 2) or ex1_clz02_or ( 3) ;
ex1_clz04_enc3( 1) <= not ex1_clz02_or( 2) and ex1_clz02_or ( 3) ;
ex1_clz04_enc4( 1) <= ex1_clz02_enc4( 2) or (not ex1_clz02_or( 2) and ex1_clz02_enc4( 3) );
ex1_clz04_or ( 2) <= ex1_clz02_or( 4) or ex1_clz02_or ( 5) ;
ex1_clz04_enc3( 2) <= not ex1_clz02_or( 4) and ex1_clz02_or ( 5) ;
ex1_clz04_enc4( 2) <= ex1_clz02_enc4( 4) or (not ex1_clz02_or( 4) and ex1_clz02_enc4( 5) );
ex1_clz04_or ( 3) <= ex1_clz02_or( 6) or ex1_clz02_or ( 7) ;
ex1_clz04_enc3( 3) <= not ex1_clz02_or( 6) and ex1_clz02_or ( 7) ;
ex1_clz04_enc4( 3) <= ex1_clz02_enc4( 6) or (not ex1_clz02_or( 6) and ex1_clz02_enc4( 7) );
ex1_clz04_or ( 4) <= ex1_clz02_or( 8) or ex1_clz02_or ( 9) ;
ex1_clz04_enc3( 4) <= not ex1_clz02_or( 8) and ex1_clz02_or ( 9) ;
ex1_clz04_enc4( 4) <= ex1_clz02_enc4( 8) or (not ex1_clz02_or( 8) and ex1_clz02_enc4( 9) );
ex1_clz04_or ( 5) <= ex1_clz02_or(10) ;
ex1_clz04_enc3( 5) <= tidn;
ex1_clz04_enc4( 5) <= ex1_clz02_enc4(10);
ex1_clz08_or ( 0) <= ex1_clz04_or( 0) or ex1_clz04_or ( 1) ;
ex1_clz08_enc2( 0) <= not ex1_clz04_or( 0) and ex1_clz04_or ( 1) ;
ex1_clz08_enc3( 0) <= ex1_clz04_enc3( 0) or (not ex1_clz04_or( 0) and ex1_clz04_enc3( 1) );
ex1_clz08_enc4( 0) <= ex1_clz04_enc4( 0) or (not ex1_clz04_or( 0) and ex1_clz04_enc4( 1) );
ex1_clz08_or ( 1) <= ex1_clz04_or( 2) or ex1_clz04_or ( 3) ;
ex1_clz08_enc2( 1) <= not ex1_clz04_or( 2) and ex1_clz04_or ( 3) ;
ex1_clz08_enc3( 1) <= ex1_clz04_enc3( 2) or (not ex1_clz04_or( 2) and ex1_clz04_enc3( 3) );
ex1_clz08_enc4( 1) <= ex1_clz04_enc4( 2) or (not ex1_clz04_or( 2) and ex1_clz04_enc4( 3) );
ex1_clz08_or ( 2) <= ex1_clz04_or( 4) or ex1_clz04_or ( 5) ;
ex1_clz08_enc2( 2) <= not ex1_clz04_or( 4) and ex1_clz04_or ( 5) ;
ex1_clz08_enc3( 2) <= ex1_clz04_enc3( 4) or (not ex1_clz04_or( 4) and ex1_clz04_enc3( 5) );
ex1_clz08_enc4( 2) <= ex1_clz04_enc4( 4) or (not ex1_clz04_or( 4) and ex1_clz04_enc4( 5) );
ex1_clz16_or ( 0) <= ex1_clz08_or( 0) or ex1_clz08_or ( 1) ;
ex1_clz16_enc1( 0) <= not ex1_clz08_or( 0) and ex1_clz08_or ( 1) ;
ex1_clz16_enc2( 0) <= ex1_clz08_enc2( 0) or (not ex1_clz08_or( 0) and ex1_clz08_enc2( 1) );
ex1_clz16_enc3( 0) <= ex1_clz08_enc3( 0) or (not ex1_clz08_or( 0) and ex1_clz08_enc3( 1) );
ex1_clz16_enc4( 0) <= ex1_clz08_enc4( 0) or (not ex1_clz08_or( 0) and ex1_clz08_enc4( 1) );
ex1_clz16_or ( 1) <= ex1_clz08_or( 2) ;
ex1_clz16_enc1( 1) <= tidn;
ex1_clz16_enc2( 1) <= ex1_clz08_enc2( 2) ;
ex1_clz16_enc3( 1) <= ex1_clz08_enc3( 2) ;
ex1_clz16_enc4( 1) <= ex1_clz08_enc4( 2) ;
ex1_sto_clz( 0) <= not ex1_clz16_or( 0) and ex1_clz16_or ( 1) ;
ex1_sto_clz( 1) <= ex1_clz16_enc1( 0) or (not ex1_clz16_or( 0) and ex1_clz16_enc1( 1) );
ex1_sto_clz( 2) <= ex1_clz16_enc2( 0) or (not ex1_clz16_or( 0) and ex1_clz16_enc2( 1) );
ex1_sto_clz( 3) <= ex1_clz16_enc3( 0) or (not ex1_clz16_or( 0) and ex1_clz16_enc3( 1) );
ex1_sto_clz( 4) <= ex1_clz16_enc4( 0) or (not ex1_clz16_or( 0) and ex1_clz16_enc4( 1) );
ex1_any_edge <= ( ex1_clz16_or( 0) or ex1_clz16_or ( 1) );
--//###################################################
--//# exponent for store dp
--//###################################################
-- exponent must be zero when input is zero x001 * !imp
ex1_fixden <= ex1_s_expo(2) and not ex1_s_frac(0); -- sp denorm or zero
ex1_fixden_small <= ex1_s_expo(2) and not ex1_s_frac(0) and ex1_s_frac(1);
ex1_fixden_big <= ex1_s_expo(2) and not ex1_s_frac(0) and not ex1_s_frac(1);
--ex1_std_fixden <= ex1_sto_dp and ex1_fixden ; -- x381 denorm
ex1_std_nonden <= ex1_sto_dp and not ex1_fixden ;
ex1_std_fixden_big <= ex1_sto_dp and ex1_fixden_big ; -- denorm more than 1
ex1_std_fixden_small <= ex1_sto_dp and ex1_fixden_small ; -- denorm by 1
ex1_std_nonbig <= ex1_sto_dp and not ex1_fixden_big;
-- dp denorm/zero turn of expo lsb
-- sp denorm(1) goes to x380 (turn off lsb)
ex1_expo_nonden(1 to 10) <= ex1_s_expo(1 to 10) and (1 to 10=> ex1_std_nonbig );
ex1_expo_nonden(11) <= ex1_s_expo(11) and ex1_s_frac(0) and ex1_std_nonden ;
ex1_expo_fixden(1) <= tidn ; -- 011_011x_xxx
ex1_expo_fixden(2) <= ex1_any_edge; -- 011_011x_xxx
ex1_expo_fixden(3) <= ex1_any_edge; -- 011_011x_xxx
ex1_expo_fixden(4) <= tidn ; -- 011_011x_xxx
ex1_expo_fixden(5) <= ex1_any_edge; -- 011_011x_xxx
ex1_expo_fixden(6) <= ex1_any_edge; -- 011_011x_xxx
ex1_expo_fixden(7 to 11) <= not ex1_sto_clz(0 to 4) and (0 to 4 => ex1_any_edge) ;
ex1_std_expo(1 to 11) <=
( ex1_expo_nonden(1 to 11) ) or
( ex1_expo_fixden(1 to 11) and (1 to 11=> ex1_std_fixden_big) );
--//#########################################################################
--//# shifting for store dp
--//#########################################################################
ex1_std_nonden_wd <= ex1_std_nonden or ex1_sto_wd;
ex1_std_frac_nrm(1 to 20) <=
( ex1_s_frac( 2 to 21) and ( 1 to 20=> ex1_std_fixden_small) ) or
( ex1_s_frac( 1 to 20) and ( 1 to 20=> ex1_std_nonden) ) ;
ex1_std_frac_nrm(21 to 52) <= -- stfiwx has a 32 bit result f[21:52]
( (ex1_s_frac(22 to 52) & tidn) and (21 to 52=> ex1_std_fixden_small) ) or
( ex1_s_frac(21 to 52) and (21 to 52=> ex1_std_nonden_wd) ) ;
ex1_std_lamt8_02 <= not ex1_sto_clz(0) and not ex1_sto_clz(1) ; -- 0 + 2
ex1_std_lamt8_10 <= not ex1_sto_clz(0) and ex1_sto_clz(1) ; -- 8 + 2
ex1_std_lamt8_18 <= ex1_sto_clz(0) and not ex1_sto_clz(1) ; --16 + 2
ex1_std_lamt2_0 <= not ex1_sto_clz(2) and not ex1_sto_clz(3) ;
ex1_std_lamt2_2 <= not ex1_sto_clz(2) and ex1_sto_clz(3) ;
ex1_std_lamt2_4 <= ex1_sto_clz(2) and not ex1_sto_clz(3) ;
ex1_std_lamt2_6 <= ex1_sto_clz(2) and ex1_sto_clz(3) ;
ex1_std_lamt1_0 <= ex1_std_fixden_big and not ex1_sto_clz(4) ;
ex1_std_lamt1_1 <= ex1_std_fixden_big and ex1_sto_clz(4) ;
ex1_std_sh8(0 to 23) <=
( ( ex1_s_frac( 2 to 23) & (0 to 1=> tidn) ) and (0 to 23=> ex1_std_lamt8_02 ) ) or
( ( ex1_s_frac(10 to 23) & (0 to 9=> tidn) ) and (0 to 23=> ex1_std_lamt8_10 ) ) or
( ( ex1_s_frac(18 to 23) & (0 to 17=> tidn) ) and (0 to 23=> ex1_std_lamt8_18 ) ) ;
ex1_std_sh2(0 to 23) <=
( ex1_std_sh8(0 to 23) and (0 to 23=> ex1_std_lamt2_0) ) or
( (ex1_std_sh8(2 to 23) & (0 to 1=> tidn) ) and (0 to 23=> ex1_std_lamt2_2) ) or
( (ex1_std_sh8(4 to 23) & (0 to 3=> tidn) ) and (0 to 23=> ex1_std_lamt2_4) ) or
( (ex1_std_sh8(6 to 23) & (0 to 5=> tidn) ) and (0 to 23=> ex1_std_lamt2_6) ) ;
ex1_std_frac_den(1 to 23) <=
( ex1_std_sh2(1 to 23) and (1 to 23=> ex1_std_lamt1_0) ) or
( (ex1_std_sh2(2 to 23) & tidn) and (1 to 23=> ex1_std_lamt1_1) ) ;
--//###################################################
--//# final combinations
--//###################################################
ex1_sto_data(0) <= ex1_s_sign and not ex1_sto_wd; -- sign bit
ex1_sto_data(1 to 8) <= ex1_sts_expo(1 to 8) or
ex1_std_expo(1 to 8);
ex1_sto_data(9 to 11) <= ex1_sts_frac(1 to 3) or
ex1_std_expo(9 to 11);
ex1_sto_data(12 to 31) <= ex1_sts_frac(4 to 23) or
ex1_std_frac_nrm(1 to 20) or
ex1_std_frac_den(1 to 20) ;
ex1_sto_data(32 to 34) <= ex1_std_frac_nrm(21 to 23) or --03 bits (includes stfwix)
ex1_std_frac_den(21 to 23) ;
ex1_sto_data(35 to 63) <= ex1_std_frac_nrm(24 to 52) ; --29 bits (includes stfwix)
--//##############################################
--//# EX2 latches
--//##############################################
ex2_sto_lat: entity tri.tri_rlmreg_p generic map (width=> 73, expand_type => expand_type, needs_sreset => 0, ibuf => true) port map (
forcee => forcee,--tidn,
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 => ex1_act,
vd => vdd,
gd => gnd,
scout => ex2_sto_so ,
scin => ex2_sto_si ,
-------------------
din(0 to 63) => ex1_sto_data(0 to 63) ,
din(64) => ex1_sto_sp ,
din(65) => ex1_sto_sp ,
din(66) => ex1_sto_sp ,
din(67) => ex1_sto_sp ,
din(68) => ex1_sto_wd ,
din(69) => ex1_sto_wd ,
din(70) => ex1_sto_wd ,
din(71) => ex1_sto_wd ,
din(72) => ex1_s_party_chick ,
dout(0 to 63) => ex2_sto_data(0 to 63) ,--LAT--
dout(64) => ex2_sto_sp(0) ,--LAT--
dout(65) => ex2_sto_sp(1) ,--LAT--
dout(66) => ex2_sto_sp(2) ,--LAT--
dout(67) => ex2_sto_sp(3) ,--LAT--
dout(68) => ex2_sto_wd(0) ,--LAT--
dout(69) => ex2_sto_wd(1) ,--LAT--
dout(70) => ex2_sto_wd(2) ,--LAT--
dout(71) => ex2_sto_wd(3) ,--LAT--
dout(72) => ex2_s_party_chick );--LAT--
f_sto_ex2_s_parity_check <= ex2_s_party_chick ;
ex1_s_party(0) <= ex1_s_sign xor f_fpr_ex1_s_expo_extra xor ex1_s_expo(1) xor ex1_s_expo(2) xor ex1_s_expo(3) xor
ex1_s_expo(4) xor ex1_s_expo(5) xor ex1_s_expo(6) xor ex1_s_expo(7) ;
ex1_s_party(1) <= ex1_s_expo(8) xor ex1_s_expo(9) xor ex1_s_expo(10) xor ex1_s_expo(11) xor ex1_s_frac(0) xor
ex1_s_frac(1) xor ex1_s_frac(2) xor ex1_s_frac(3) xor ex1_s_frac(4) ;
ex1_s_party(2) <= ex1_s_frac(5) xor ex1_s_frac(6) xor ex1_s_frac(7) xor ex1_s_frac(8) xor
ex1_s_frac(9) xor ex1_s_frac(10) xor ex1_s_frac(11) xor ex1_s_frac(12) ;
ex1_s_party(3) <= ex1_s_frac(13) xor ex1_s_frac(14) xor ex1_s_frac(15) xor ex1_s_frac(16) xor
ex1_s_frac(17) xor ex1_s_frac(18) xor ex1_s_frac(19) xor ex1_s_frac(20) ;
ex1_s_party(4) <= ex1_s_frac(21) xor ex1_s_frac(22) xor ex1_s_frac(23) xor ex1_s_frac(24) xor
ex1_s_frac(25) xor ex1_s_frac(26) xor ex1_s_frac(27) xor ex1_s_frac(28) ;
ex1_s_party(5) <= ex1_s_frac(29) xor ex1_s_frac(30) xor ex1_s_frac(31) xor ex1_s_frac(32) xor
ex1_s_frac(33) xor ex1_s_frac(34) xor ex1_s_frac(35) xor ex1_s_frac(36) ;
ex1_s_party(6) <= ex1_s_frac(37) xor ex1_s_frac(38) xor ex1_s_frac(39) xor ex1_s_frac(40) xor
ex1_s_frac(41) xor ex1_s_frac(42) xor ex1_s_frac(43) xor ex1_s_frac(44) ;
ex1_s_party(7) <= ex1_s_frac(45) xor ex1_s_frac(46) xor ex1_s_frac(47) xor ex1_s_frac(48) xor
ex1_s_frac(49) xor ex1_s_frac(50) xor ex1_s_frac(51) xor ex1_s_frac(52) ;
ex1_s_party_chick <= (ex1_s_party(0) xor f_fpr_ex1_s_par(0) ) or
(ex1_s_party(1) xor f_fpr_ex1_s_par(1) ) or
(ex1_s_party(2) xor f_fpr_ex1_s_par(2) ) or
(ex1_s_party(3) xor f_fpr_ex1_s_par(3) ) or
(ex1_s_party(4) xor f_fpr_ex1_s_par(4) ) or
(ex1_s_party(5) xor f_fpr_ex1_s_par(5) ) or
(ex1_s_party(6) xor f_fpr_ex1_s_par(6) ) or
(ex1_s_party(7) xor f_fpr_ex1_s_par(7) ) ;
u_rot0_0: ex2_sto_data_rot0_b(0) <= not( ex2_sto_data(0) and not ex2_sto_wd(0) );
u_rot0_1: ex2_sto_data_rot0_b(1) <= not( ex2_sto_data(1) and not ex2_sto_wd(0) );
u_rot0_2: ex2_sto_data_rot0_b(2) <= not( ex2_sto_data(2) and not ex2_sto_wd(0) );
u_rot0_3: ex2_sto_data_rot0_b(3) <= not( ex2_sto_data(3) and not ex2_sto_wd(0) );
u_rot0_4: ex2_sto_data_rot0_b(4) <= not( ex2_sto_data(4) and not ex2_sto_wd(0) );
u_rot0_5: ex2_sto_data_rot0_b(5) <= not( ex2_sto_data(5) and not ex2_sto_wd(0) );
u_rot0_6: ex2_sto_data_rot0_b(6) <= not( ex2_sto_data(6) and not ex2_sto_wd(0) );
u_rot0_7: ex2_sto_data_rot0_b(7) <= not( ex2_sto_data(7) and not ex2_sto_wd(0) );
u_rot0_8: ex2_sto_data_rot0_b(8) <= not( ex2_sto_data(8) and not ex2_sto_wd(1) );
u_rot0_9: ex2_sto_data_rot0_b(9) <= not( ex2_sto_data(9) and not ex2_sto_wd(1) );
u_rot0_10: ex2_sto_data_rot0_b(10) <= not( ex2_sto_data(10) and not ex2_sto_wd(1) );
u_rot0_11: ex2_sto_data_rot0_b(11) <= not( ex2_sto_data(11) and not ex2_sto_wd(1) );
u_rot0_12: ex2_sto_data_rot0_b(12) <= not( ex2_sto_data(12) and not ex2_sto_wd(1) );
u_rot0_13: ex2_sto_data_rot0_b(13) <= not( ex2_sto_data(13) and not ex2_sto_wd(1) );
u_rot0_14: ex2_sto_data_rot0_b(14) <= not( ex2_sto_data(14) and not ex2_sto_wd(1) );
u_rot0_15: ex2_sto_data_rot0_b(15) <= not( ex2_sto_data(15) and not ex2_sto_wd(1) );
u_rot0_16: ex2_sto_data_rot0_b(16) <= not( ex2_sto_data(16) and not ex2_sto_wd(2) );
u_rot0_17: ex2_sto_data_rot0_b(17) <= not( ex2_sto_data(17) and not ex2_sto_wd(2) );
u_rot0_18: ex2_sto_data_rot0_b(18) <= not( ex2_sto_data(18) and not ex2_sto_wd(2) );
u_rot0_19: ex2_sto_data_rot0_b(19) <= not( ex2_sto_data(19) and not ex2_sto_wd(2) );
u_rot0_20: ex2_sto_data_rot0_b(20) <= not( ex2_sto_data(20) and not ex2_sto_wd(2) );
u_rot0_21: ex2_sto_data_rot0_b(21) <= not( ex2_sto_data(21) and not ex2_sto_wd(2) );
u_rot0_22: ex2_sto_data_rot0_b(22) <= not( ex2_sto_data(22) and not ex2_sto_wd(2) );
u_rot0_23: ex2_sto_data_rot0_b(23) <= not( ex2_sto_data(23) and not ex2_sto_wd(2) );
u_rot0_24: ex2_sto_data_rot0_b(24) <= not( ex2_sto_data(24) and not ex2_sto_wd(3) );
u_rot0_25: ex2_sto_data_rot0_b(25) <= not( ex2_sto_data(25) and not ex2_sto_wd(3) );
u_rot0_26: ex2_sto_data_rot0_b(26) <= not( ex2_sto_data(26) and not ex2_sto_wd(3) );
u_rot0_27: ex2_sto_data_rot0_b(27) <= not( ex2_sto_data(27) and not ex2_sto_wd(3) );
u_rot0_28: ex2_sto_data_rot0_b(28) <= not( ex2_sto_data(28) and not ex2_sto_wd(3) );
u_rot0_29: ex2_sto_data_rot0_b(29) <= not( ex2_sto_data(29) and not ex2_sto_wd(3) );
u_rot0_30: ex2_sto_data_rot0_b(30) <= not( ex2_sto_data(30) and not ex2_sto_wd(3) );
u_rot0_31: ex2_sto_data_rot0_b(31) <= not( ex2_sto_data(31) and not ex2_sto_wd(3) );
u_rot0_32: ex2_sto_data_rot0_b(32) <= not( ex2_sto_data(0) and ex2_sto_sp(0) );
u_rot0_33: ex2_sto_data_rot0_b(33) <= not( ex2_sto_data(1) and ex2_sto_sp(0) );
u_rot0_34: ex2_sto_data_rot0_b(34) <= not( ex2_sto_data(2) and ex2_sto_sp(0) );
u_rot0_35: ex2_sto_data_rot0_b(35) <= not( ex2_sto_data(3) and ex2_sto_sp(0) );
u_rot0_36: ex2_sto_data_rot0_b(36) <= not( ex2_sto_data(4) and ex2_sto_sp(0) );
u_rot0_37: ex2_sto_data_rot0_b(37) <= not( ex2_sto_data(5) and ex2_sto_sp(0) );
u_rot0_38: ex2_sto_data_rot0_b(38) <= not( ex2_sto_data(6) and ex2_sto_sp(0) );
u_rot0_39: ex2_sto_data_rot0_b(39) <= not( ex2_sto_data(7) and ex2_sto_sp(0) );
u_rot0_40: ex2_sto_data_rot0_b(40) <= not( ex2_sto_data(8) and ex2_sto_sp(1) );
u_rot0_41: ex2_sto_data_rot0_b(41) <= not( ex2_sto_data(9) and ex2_sto_sp(1) );
u_rot0_42: ex2_sto_data_rot0_b(42) <= not( ex2_sto_data(10) and ex2_sto_sp(1) );
u_rot0_43: ex2_sto_data_rot0_b(43) <= not( ex2_sto_data(11) and ex2_sto_sp(1) );
u_rot0_44: ex2_sto_data_rot0_b(44) <= not( ex2_sto_data(12) and ex2_sto_sp(1) );
u_rot0_45: ex2_sto_data_rot0_b(45) <= not( ex2_sto_data(13) and ex2_sto_sp(1) );
u_rot0_46: ex2_sto_data_rot0_b(46) <= not( ex2_sto_data(14) and ex2_sto_sp(1) );
u_rot0_47: ex2_sto_data_rot0_b(47) <= not( ex2_sto_data(15) and ex2_sto_sp(1) );
u_rot0_48: ex2_sto_data_rot0_b(48) <= not( ex2_sto_data(16) and ex2_sto_sp(2) );
u_rot0_49: ex2_sto_data_rot0_b(49) <= not( ex2_sto_data(17) and ex2_sto_sp(2) );
u_rot0_50: ex2_sto_data_rot0_b(50) <= not( ex2_sto_data(18) and ex2_sto_sp(2) );
u_rot0_51: ex2_sto_data_rot0_b(51) <= not( ex2_sto_data(19) and ex2_sto_sp(2) );
u_rot0_52: ex2_sto_data_rot0_b(52) <= not( ex2_sto_data(20) and ex2_sto_sp(2) );
u_rot0_53: ex2_sto_data_rot0_b(53) <= not( ex2_sto_data(21) and ex2_sto_sp(2) );
u_rot0_54: ex2_sto_data_rot0_b(54) <= not( ex2_sto_data(22) and ex2_sto_sp(2) );
u_rot0_55: ex2_sto_data_rot0_b(55) <= not( ex2_sto_data(23) and ex2_sto_sp(2) );
u_rot0_56: ex2_sto_data_rot0_b(56) <= not( ex2_sto_data(24) and ex2_sto_sp(3) );
u_rot0_57: ex2_sto_data_rot0_b(57) <= not( ex2_sto_data(25) and ex2_sto_sp(3) );
u_rot0_58: ex2_sto_data_rot0_b(58) <= not( ex2_sto_data(26) and ex2_sto_sp(3) );
u_rot0_59: ex2_sto_data_rot0_b(59) <= not( ex2_sto_data(27) and ex2_sto_sp(3) );
u_rot0_60: ex2_sto_data_rot0_b(60) <= not( ex2_sto_data(28) and ex2_sto_sp(3) );
u_rot0_61: ex2_sto_data_rot0_b(61) <= not( ex2_sto_data(29) and ex2_sto_sp(3) );
u_rot0_62: ex2_sto_data_rot0_b(62) <= not( ex2_sto_data(30) and ex2_sto_sp(3) );
u_rot0_63: ex2_sto_data_rot0_b(63) <= not( ex2_sto_data(31) and ex2_sto_sp(3) );
u_rot1_0: ex2_sto_data_rot1_b(0) <= not( ex2_sto_data(32) and ex2_sto_wd(0) );
u_rot1_1: ex2_sto_data_rot1_b(1) <= not( ex2_sto_data(33) and ex2_sto_wd(0) );
u_rot1_2: ex2_sto_data_rot1_b(2) <= not( ex2_sto_data(34) and ex2_sto_wd(0) );
u_rot1_3: ex2_sto_data_rot1_b(3) <= not( ex2_sto_data(35) and ex2_sto_wd(0) );
u_rot1_4: ex2_sto_data_rot1_b(4) <= not( ex2_sto_data(36) and ex2_sto_wd(0) );
u_rot1_5: ex2_sto_data_rot1_b(5) <= not( ex2_sto_data(37) and ex2_sto_wd(0) );
u_rot1_6: ex2_sto_data_rot1_b(6) <= not( ex2_sto_data(38) and ex2_sto_wd(0) );
u_rot1_7: ex2_sto_data_rot1_b(7) <= not( ex2_sto_data(39) and ex2_sto_wd(0) );
u_rot1_8: ex2_sto_data_rot1_b(8) <= not( ex2_sto_data(40) and ex2_sto_wd(1) );
u_rot1_9: ex2_sto_data_rot1_b(9) <= not( ex2_sto_data(41) and ex2_sto_wd(1) );
u_rot1_10: ex2_sto_data_rot1_b(10) <= not( ex2_sto_data(42) and ex2_sto_wd(1) );
u_rot1_11: ex2_sto_data_rot1_b(11) <= not( ex2_sto_data(43) and ex2_sto_wd(1) );
u_rot1_12: ex2_sto_data_rot1_b(12) <= not( ex2_sto_data(44) and ex2_sto_wd(1) );
u_rot1_13: ex2_sto_data_rot1_b(13) <= not( ex2_sto_data(45) and ex2_sto_wd(1) );
u_rot1_14: ex2_sto_data_rot1_b(14) <= not( ex2_sto_data(46) and ex2_sto_wd(1) );
u_rot1_15: ex2_sto_data_rot1_b(15) <= not( ex2_sto_data(47) and ex2_sto_wd(1) );
u_rot1_16: ex2_sto_data_rot1_b(16) <= not( ex2_sto_data(48) and ex2_sto_wd(2) );
u_rot1_17: ex2_sto_data_rot1_b(17) <= not( ex2_sto_data(49) and ex2_sto_wd(2) );
u_rot1_18: ex2_sto_data_rot1_b(18) <= not( ex2_sto_data(50) and ex2_sto_wd(2) );
u_rot1_19: ex2_sto_data_rot1_b(19) <= not( ex2_sto_data(51) and ex2_sto_wd(2) );
u_rot1_20: ex2_sto_data_rot1_b(20) <= not( ex2_sto_data(52) and ex2_sto_wd(2) );
u_rot1_21: ex2_sto_data_rot1_b(21) <= not( ex2_sto_data(53) and ex2_sto_wd(2) );
u_rot1_22: ex2_sto_data_rot1_b(22) <= not( ex2_sto_data(54) and ex2_sto_wd(2) );
u_rot1_23: ex2_sto_data_rot1_b(23) <= not( ex2_sto_data(55) and ex2_sto_wd(2) );
u_rot1_24: ex2_sto_data_rot1_b(24) <= not( ex2_sto_data(56) and ex2_sto_wd(3) );
u_rot1_25: ex2_sto_data_rot1_b(25) <= not( ex2_sto_data(57) and ex2_sto_wd(3) );
u_rot1_26: ex2_sto_data_rot1_b(26) <= not( ex2_sto_data(58) and ex2_sto_wd(3) );
u_rot1_27: ex2_sto_data_rot1_b(27) <= not( ex2_sto_data(59) and ex2_sto_wd(3) );
u_rot1_28: ex2_sto_data_rot1_b(28) <= not( ex2_sto_data(60) and ex2_sto_wd(3) );
u_rot1_29: ex2_sto_data_rot1_b(29) <= not( ex2_sto_data(61) and ex2_sto_wd(3) );
u_rot1_30: ex2_sto_data_rot1_b(30) <= not( ex2_sto_data(62) and ex2_sto_wd(3) );
u_rot1_31: ex2_sto_data_rot1_b(31) <= not( ex2_sto_data(63) and ex2_sto_wd(3) );
u_rot1_32: ex2_sto_data_rot1_b(32) <= not( ex2_sto_data(32) and not ex2_sto_sp(0) );
u_rot1_33: ex2_sto_data_rot1_b(33) <= not( ex2_sto_data(33) and not ex2_sto_sp(0) );
u_rot1_34: ex2_sto_data_rot1_b(34) <= not( ex2_sto_data(34) and not ex2_sto_sp(0) );
u_rot1_35: ex2_sto_data_rot1_b(35) <= not( ex2_sto_data(35) and not ex2_sto_sp(0) );
u_rot1_36: ex2_sto_data_rot1_b(36) <= not( ex2_sto_data(36) and not ex2_sto_sp(0) );
u_rot1_37: ex2_sto_data_rot1_b(37) <= not( ex2_sto_data(37) and not ex2_sto_sp(0) );
u_rot1_38: ex2_sto_data_rot1_b(38) <= not( ex2_sto_data(38) and not ex2_sto_sp(0) );
u_rot1_39: ex2_sto_data_rot1_b(39) <= not( ex2_sto_data(39) and not ex2_sto_sp(0) );
u_rot1_40: ex2_sto_data_rot1_b(40) <= not( ex2_sto_data(40) and not ex2_sto_sp(1) );
u_rot1_41: ex2_sto_data_rot1_b(41) <= not( ex2_sto_data(41) and not ex2_sto_sp(1) );
u_rot1_42: ex2_sto_data_rot1_b(42) <= not( ex2_sto_data(42) and not ex2_sto_sp(1) );
u_rot1_43: ex2_sto_data_rot1_b(43) <= not( ex2_sto_data(43) and not ex2_sto_sp(1) );
u_rot1_44: ex2_sto_data_rot1_b(44) <= not( ex2_sto_data(44) and not ex2_sto_sp(1) );
u_rot1_45: ex2_sto_data_rot1_b(45) <= not( ex2_sto_data(45) and not ex2_sto_sp(1) );
u_rot1_46: ex2_sto_data_rot1_b(46) <= not( ex2_sto_data(46) and not ex2_sto_sp(1) );
u_rot1_47: ex2_sto_data_rot1_b(47) <= not( ex2_sto_data(47) and not ex2_sto_sp(1) );
u_rot1_48: ex2_sto_data_rot1_b(48) <= not( ex2_sto_data(48) and not ex2_sto_sp(2) );
u_rot1_49: ex2_sto_data_rot1_b(49) <= not( ex2_sto_data(49) and not ex2_sto_sp(2) );
u_rot1_50: ex2_sto_data_rot1_b(50) <= not( ex2_sto_data(50) and not ex2_sto_sp(2) );
u_rot1_51: ex2_sto_data_rot1_b(51) <= not( ex2_sto_data(51) and not ex2_sto_sp(2) );
u_rot1_52: ex2_sto_data_rot1_b(52) <= not( ex2_sto_data(52) and not ex2_sto_sp(2) );
u_rot1_53: ex2_sto_data_rot1_b(53) <= not( ex2_sto_data(53) and not ex2_sto_sp(2) );
u_rot1_54: ex2_sto_data_rot1_b(54) <= not( ex2_sto_data(54) and not ex2_sto_sp(2) );
u_rot1_55: ex2_sto_data_rot1_b(55) <= not( ex2_sto_data(55) and not ex2_sto_sp(2) );
u_rot1_56: ex2_sto_data_rot1_b(56) <= not( ex2_sto_data(56) and not ex2_sto_sp(3) );
u_rot1_57: ex2_sto_data_rot1_b(57) <= not( ex2_sto_data(57) and not ex2_sto_sp(3) );
u_rot1_58: ex2_sto_data_rot1_b(58) <= not( ex2_sto_data(58) and not ex2_sto_sp(3) );
u_rot1_59: ex2_sto_data_rot1_b(59) <= not( ex2_sto_data(59) and not ex2_sto_sp(3) );
u_rot1_60: ex2_sto_data_rot1_b(60) <= not( ex2_sto_data(60) and not ex2_sto_sp(3) );
u_rot1_61: ex2_sto_data_rot1_b(61) <= not( ex2_sto_data(61) and not ex2_sto_sp(3) );
u_rot1_62: ex2_sto_data_rot1_b(62) <= not( ex2_sto_data(62) and not ex2_sto_sp(3) );
u_rot1_63: ex2_sto_data_rot1_b(63) <= not( ex2_sto_data(63) and not ex2_sto_sp(3) );
u_rot: f_sto_ex2_sto_data(0 to 63) <= not( ex2_sto_data_rot0_b(0 to 63) and ex2_sto_data_rot1_b(0 to 63) );
--//############################################
--//# scan
--//############################################
ex1_sins_si (0 to 2) <= ex1_sins_so (1 to 2) & f_sto_si ;
ex1_sop_si (0 to 64) <= ex1_sop_so (1 to 64) & ex1_sins_so (0) ;
ex2_sto_si (0 to 72) <= ex2_sto_so (1 to 72) & ex1_sop_so (0) ;
act_si (0 to 3 ) <= act_so ( 1 to 3) & ex2_sto_so (0);
f_sto_so <= act_so (0) ; -- xor dc_scan_diag;
end; -- fuq_sto ARCHITECTURE