| // ========== Copyright Header Begin ========================================== |
| // |
| // OpenSPARC T1 Processor File: fpu_cnt_lead0_64b.v |
| // Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. |
| // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES. |
| // |
| // The above named program is free software; you can redistribute it and/or |
| // modify it under the terms of the GNU General Public |
| // License version 2 as published by the Free Software Foundation. |
| // |
| // The above named program is distributed in the hope that it will be |
| // useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| // General Public License for more details. |
| // |
| // You should have received a copy of the GNU General Public |
| // License along with this work; if not, write to the Free Software |
| // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. |
| // |
| // ========== Copyright Header End ============================================ |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // 64 bit lead 0 counter. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| module fpu_cnt_lead0_64b ( |
| din, |
| |
| lead0 |
| ); |
| |
| |
| input [63:0] din; // data in- count its leading 0's |
| |
| output [5:0] lead0; // number of leading 0's in data in |
| |
| |
| wire din_63_60_eq_0; |
| wire din_63_62_eq_0; |
| wire lead0_63_60_0; |
| wire din_59_56_eq_0; |
| wire din_59_58_eq_0; |
| wire lead0_59_56_0; |
| wire din_55_52_eq_0; |
| wire din_55_54_eq_0; |
| wire lead0_55_52_0; |
| wire din_51_48_eq_0; |
| wire din_51_50_eq_0; |
| wire lead0_51_48_0; |
| wire din_47_44_eq_0; |
| wire din_47_46_eq_0; |
| wire lead0_47_44_0; |
| wire din_43_40_eq_0; |
| wire din_43_42_eq_0; |
| wire lead0_43_40_0; |
| wire din_39_36_eq_0; |
| wire din_39_38_eq_0; |
| wire lead0_39_36_0; |
| wire din_35_32_eq_0; |
| wire din_35_34_eq_0; |
| wire lead0_35_32_0; |
| wire din_31_28_eq_0; |
| wire din_31_30_eq_0; |
| wire lead0_31_28_0; |
| wire din_27_24_eq_0; |
| wire din_27_26_eq_0; |
| wire lead0_27_24_0; |
| wire din_23_20_eq_0; |
| wire din_23_22_eq_0; |
| wire lead0_23_20_0; |
| wire din_19_16_eq_0; |
| wire din_19_18_eq_0; |
| wire lead0_19_16_0; |
| wire din_15_12_eq_0; |
| wire din_15_14_eq_0; |
| wire lead0_15_12_0; |
| wire din_11_8_eq_0; |
| wire din_11_10_eq_0; |
| wire lead0_11_8_0; |
| wire din_7_4_eq_0; |
| wire din_7_6_eq_0; |
| wire lead0_7_4_0; |
| wire din_3_0_eq_0; |
| wire din_3_2_eq_0; |
| wire lead0_3_0_0; |
| wire din_63_56_eq_0; |
| wire lead0_63_56_1; |
| wire lead0_63_56_0; |
| wire din_55_48_eq_0; |
| wire lead0_55_48_1; |
| wire lead0_55_48_0; |
| wire din_47_40_eq_0; |
| wire lead0_47_40_1; |
| wire lead0_47_40_0; |
| wire din_39_32_eq_0; |
| wire lead0_39_32_1; |
| wire lead0_39_32_0; |
| wire din_31_24_eq_0; |
| wire lead0_31_24_1; |
| wire lead0_31_24_0; |
| wire din_23_16_eq_0; |
| wire lead0_23_16_1; |
| wire lead0_23_16_0; |
| wire din_15_8_eq_0; |
| wire lead0_15_8_1; |
| wire lead0_15_8_0; |
| wire din_7_0_eq_0; |
| wire lead0_7_0_1; |
| wire lead0_7_0_0; |
| wire din_63_48_eq_0; |
| wire lead0_63_48_2; |
| wire lead0_63_48_1; |
| wire lead0_63_48_0; |
| wire din_47_32_eq_0; |
| wire lead0_47_32_2; |
| wire lead0_47_32_1; |
| wire lead0_47_32_0; |
| wire din_31_16_eq_0; |
| wire lead0_31_16_2; |
| wire lead0_31_16_1; |
| wire lead0_31_16_0; |
| wire din_15_0_eq_0; |
| wire lead0_15_0_2; |
| wire lead0_15_0_1; |
| wire lead0_15_0_0; |
| wire din_63_32_eq_0; |
| wire lead0_63_32_3; |
| wire lead0_63_32_2; |
| wire lead0_63_32_1; |
| wire din_31_0_eq_0; |
| wire lead0_31_0_3; |
| wire lead0_31_0_2; |
| wire lead0_31_0_1; |
| wire lead0_31_0_0; |
| wire lead0_6; |
| wire lead0_5; |
| wire lead0_4; |
| wire lead0_3; |
| wire lead0_2; |
| wire lead0_1; |
| wire lead0_0; |
| wire [5:0] lead0; |
| |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // Instantiations of lead 0 building blocks. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_63_60 ( |
| .din (din[63:60]), |
| |
| .din_3_0_eq_0 (din_63_60_eq_0), |
| .din_3_2_eq_0 (din_63_62_eq_0), |
| .lead0_4b_0 (lead0_63_60_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_59_56 ( |
| .din (din[59:56]), |
| |
| .din_3_0_eq_0 (din_59_56_eq_0), |
| .din_3_2_eq_0 (din_59_58_eq_0), |
| .lead0_4b_0 (lead0_59_56_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_55_52 ( |
| .din (din[55:52]), |
| |
| .din_3_0_eq_0 (din_55_52_eq_0), |
| .din_3_2_eq_0 (din_55_54_eq_0), |
| .lead0_4b_0 (lead0_55_52_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_51_48 ( |
| .din (din[51:48]), |
| |
| .din_3_0_eq_0 (din_51_48_eq_0), |
| .din_3_2_eq_0 (din_51_50_eq_0), |
| .lead0_4b_0 (lead0_51_48_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_47_44 ( |
| .din (din[47:44]), |
| |
| .din_3_0_eq_0 (din_47_44_eq_0), |
| .din_3_2_eq_0 (din_47_46_eq_0), |
| .lead0_4b_0 (lead0_47_44_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_43_40 ( |
| .din (din[43:40]), |
| |
| .din_3_0_eq_0 (din_43_40_eq_0), |
| .din_3_2_eq_0 (din_43_42_eq_0), |
| .lead0_4b_0 (lead0_43_40_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_39_36 ( |
| .din (din[39:36]), |
| |
| .din_3_0_eq_0 (din_39_36_eq_0), |
| .din_3_2_eq_0 (din_39_38_eq_0), |
| .lead0_4b_0 (lead0_39_36_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_35_32 ( |
| .din (din[35:32]), |
| |
| .din_3_0_eq_0 (din_35_32_eq_0), |
| .din_3_2_eq_0 (din_35_34_eq_0), |
| .lead0_4b_0 (lead0_35_32_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_31_28 ( |
| .din (din[31:28]), |
| |
| .din_3_0_eq_0 (din_31_28_eq_0), |
| .din_3_2_eq_0 (din_31_30_eq_0), |
| .lead0_4b_0 (lead0_31_28_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_27_24 ( |
| .din (din[27:24]), |
| |
| .din_3_0_eq_0 (din_27_24_eq_0), |
| .din_3_2_eq_0 (din_27_26_eq_0), |
| .lead0_4b_0 (lead0_27_24_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_23_20 ( |
| .din (din[23:20]), |
| |
| .din_3_0_eq_0 (din_23_20_eq_0), |
| .din_3_2_eq_0 (din_23_22_eq_0), |
| .lead0_4b_0 (lead0_23_20_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_19_16 ( |
| .din (din[19:16]), |
| |
| .din_3_0_eq_0 (din_19_16_eq_0), |
| .din_3_2_eq_0 (din_19_18_eq_0), |
| .lead0_4b_0 (lead0_19_16_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_15_12 ( |
| .din (din[15:12]), |
| |
| .din_3_0_eq_0 (din_15_12_eq_0), |
| .din_3_2_eq_0 (din_15_14_eq_0), |
| .lead0_4b_0 (lead0_15_12_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_11_8 ( |
| .din (din[11:8]), |
| |
| .din_3_0_eq_0 (din_11_8_eq_0), |
| .din_3_2_eq_0 (din_11_10_eq_0), |
| .lead0_4b_0 (lead0_11_8_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_7_4 ( |
| .din (din[7:4]), |
| |
| .din_3_0_eq_0 (din_7_4_eq_0), |
| .din_3_2_eq_0 (din_7_6_eq_0), |
| .lead0_4b_0 (lead0_7_4_0) |
| ); |
| |
| fpu_cnt_lead0_lvl1 i_fpu_cnt_lead0_lvl1_3_0 ( |
| .din (din[3:0]), |
| |
| .din_3_0_eq_0 (din_3_0_eq_0), |
| .din_3_2_eq_0 (din_3_2_eq_0), |
| .lead0_4b_0 (lead0_3_0_0) |
| ); |
| |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_63_56 ( |
| .din_7_4_eq_0 (din_63_60_eq_0), |
| .din_7_6_eq_0 (din_63_62_eq_0), |
| .lead0_4b_0_hi (lead0_63_60_0), |
| .din_3_0_eq_0 (din_59_56_eq_0), |
| .din_3_2_eq_0 (din_59_58_eq_0), |
| .lead0_4b_0_lo (lead0_59_56_0), |
| |
| .din_7_0_eq_0 (din_63_56_eq_0), |
| .lead0_8b_1 (lead0_63_56_1), |
| .lead0_8b_0 (lead0_63_56_0) |
| ); |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_55_48 ( |
| .din_7_4_eq_0 (din_55_52_eq_0), |
| .din_7_6_eq_0 (din_55_54_eq_0), |
| .lead0_4b_0_hi (lead0_55_52_0), |
| .din_3_0_eq_0 (din_51_48_eq_0), |
| .din_3_2_eq_0 (din_51_50_eq_0), |
| .lead0_4b_0_lo (lead0_51_48_0), |
| |
| .din_7_0_eq_0 (din_55_48_eq_0), |
| .lead0_8b_1 (lead0_55_48_1), |
| .lead0_8b_0 (lead0_55_48_0) |
| ); |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_47_40 ( |
| .din_7_4_eq_0 (din_47_44_eq_0), |
| .din_7_6_eq_0 (din_47_46_eq_0), |
| .lead0_4b_0_hi (lead0_47_44_0), |
| .din_3_0_eq_0 (din_43_40_eq_0), |
| .din_3_2_eq_0 (din_43_42_eq_0), |
| .lead0_4b_0_lo (lead0_43_40_0), |
| |
| .din_7_0_eq_0 (din_47_40_eq_0), |
| .lead0_8b_1 (lead0_47_40_1), |
| .lead0_8b_0 (lead0_47_40_0) |
| ); |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_39_32 ( |
| .din_7_4_eq_0 (din_39_36_eq_0), |
| .din_7_6_eq_0 (din_39_38_eq_0), |
| .lead0_4b_0_hi (lead0_39_36_0), |
| .din_3_0_eq_0 (din_35_32_eq_0), |
| .din_3_2_eq_0 (din_35_34_eq_0), |
| .lead0_4b_0_lo (lead0_35_32_0), |
| |
| .din_7_0_eq_0 (din_39_32_eq_0), |
| .lead0_8b_1 (lead0_39_32_1), |
| .lead0_8b_0 (lead0_39_32_0) |
| ); |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_31_24 ( |
| .din_7_4_eq_0 (din_31_28_eq_0), |
| .din_7_6_eq_0 (din_31_30_eq_0), |
| .lead0_4b_0_hi (lead0_31_28_0), |
| .din_3_0_eq_0 (din_27_24_eq_0), |
| .din_3_2_eq_0 (din_27_26_eq_0), |
| .lead0_4b_0_lo (lead0_27_24_0), |
| |
| .din_7_0_eq_0 (din_31_24_eq_0), |
| .lead0_8b_1 (lead0_31_24_1), |
| .lead0_8b_0 (lead0_31_24_0) |
| ); |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_23_16 ( |
| .din_7_4_eq_0 (din_23_20_eq_0), |
| .din_7_6_eq_0 (din_23_22_eq_0), |
| .lead0_4b_0_hi (lead0_23_20_0), |
| .din_3_0_eq_0 (din_19_16_eq_0), |
| .din_3_2_eq_0 (din_19_18_eq_0), |
| .lead0_4b_0_lo (lead0_19_16_0), |
| |
| .din_7_0_eq_0 (din_23_16_eq_0), |
| .lead0_8b_1 (lead0_23_16_1), |
| .lead0_8b_0 (lead0_23_16_0) |
| ); |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_15_8 ( |
| .din_7_4_eq_0 (din_15_12_eq_0), |
| .din_7_6_eq_0 (din_15_14_eq_0), |
| .lead0_4b_0_hi (lead0_15_12_0), |
| .din_3_0_eq_0 (din_11_8_eq_0), |
| .din_3_2_eq_0 (din_11_10_eq_0), |
| .lead0_4b_0_lo (lead0_11_8_0), |
| |
| .din_7_0_eq_0 (din_15_8_eq_0), |
| .lead0_8b_1 (lead0_15_8_1), |
| .lead0_8b_0 (lead0_15_8_0) |
| ); |
| |
| fpu_cnt_lead0_lvl2 i_fpu_cnt_lead0_lvl2_7_0 ( |
| .din_7_4_eq_0 (din_7_4_eq_0), |
| .din_7_6_eq_0 (din_7_6_eq_0), |
| .lead0_4b_0_hi (lead0_7_4_0), |
| .din_3_0_eq_0 (din_3_0_eq_0), |
| .din_3_2_eq_0 (din_3_2_eq_0), |
| .lead0_4b_0_lo (lead0_3_0_0), |
| |
| .din_7_0_eq_0 (din_7_0_eq_0), |
| .lead0_8b_1 (lead0_7_0_1), |
| .lead0_8b_0 (lead0_7_0_0) |
| ); |
| |
| |
| fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_63_48 ( |
| .din_15_8_eq_0 (din_63_56_eq_0), |
| .din_15_12_eq_0 (din_63_60_eq_0), |
| .lead0_8b_1_hi (lead0_63_56_1), |
| .lead0_8b_0_hi (lead0_63_56_0), |
| .din_7_0_eq_0 (din_55_48_eq_0), |
| .din_7_4_eq_0 (din_55_52_eq_0), |
| .lead0_8b_1_lo (lead0_55_48_1), |
| .lead0_8b_0_lo (lead0_55_48_0), |
| |
| .din_15_0_eq_0 (din_63_48_eq_0), |
| .lead0_16b_2 (lead0_63_48_2), |
| .lead0_16b_1 (lead0_63_48_1), |
| .lead0_16b_0 (lead0_63_48_0) |
| ); |
| |
| fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_47_32 ( |
| .din_15_8_eq_0 (din_47_40_eq_0), |
| .din_15_12_eq_0 (din_47_44_eq_0), |
| .lead0_8b_1_hi (lead0_47_40_1), |
| .lead0_8b_0_hi (lead0_47_40_0), |
| .din_7_0_eq_0 (din_39_32_eq_0), |
| .din_7_4_eq_0 (din_39_36_eq_0), |
| .lead0_8b_1_lo (lead0_39_32_1), |
| .lead0_8b_0_lo (lead0_39_32_0), |
| |
| .din_15_0_eq_0 (din_47_32_eq_0), |
| .lead0_16b_2 (lead0_47_32_2), |
| .lead0_16b_1 (lead0_47_32_1), |
| .lead0_16b_0 (lead0_47_32_0) |
| ); |
| |
| fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_31_16 ( |
| .din_15_8_eq_0 (din_31_24_eq_0), |
| .din_15_12_eq_0 (din_31_28_eq_0), |
| .lead0_8b_1_hi (lead0_31_24_1), |
| .lead0_8b_0_hi (lead0_31_24_0), |
| .din_7_0_eq_0 (din_23_16_eq_0), |
| .din_7_4_eq_0 (din_23_20_eq_0), |
| .lead0_8b_1_lo (lead0_23_16_1), |
| .lead0_8b_0_lo (lead0_23_16_0), |
| |
| .din_15_0_eq_0 (din_31_16_eq_0), |
| .lead0_16b_2 (lead0_31_16_2), |
| .lead0_16b_1 (lead0_31_16_1), |
| .lead0_16b_0 (lead0_31_16_0) |
| ); |
| |
| fpu_cnt_lead0_lvl3 i_fpu_cnt_lead0_lvl3_15_0 ( |
| .din_15_8_eq_0 (din_15_8_eq_0), |
| .din_15_12_eq_0 (din_15_12_eq_0), |
| .lead0_8b_1_hi (lead0_15_8_1), |
| .lead0_8b_0_hi (lead0_15_8_0), |
| .din_7_0_eq_0 (din_7_0_eq_0), |
| .din_7_4_eq_0 (din_7_4_eq_0), |
| .lead0_8b_1_lo (lead0_7_0_1), |
| .lead0_8b_0_lo (lead0_7_0_0), |
| |
| .din_15_0_eq_0 (din_15_0_eq_0), |
| .lead0_16b_2 (lead0_15_0_2), |
| .lead0_16b_1 (lead0_15_0_1), |
| .lead0_16b_0 (lead0_15_0_0) |
| ); |
| |
| |
| fpu_cnt_lead0_lvl4 i_fpu_cnt_lead0_lvl4_63_32 ( |
| .din_31_16_eq_0 (din_63_48_eq_0), |
| .din_31_24_eq_0 (din_63_56_eq_0), |
| .lead0_16b_2_hi (lead0_63_48_2), |
| .lead0_16b_1_hi (lead0_63_48_1), |
| .lead0_16b_0_hi (lead0_63_48_0), |
| .din_15_0_eq_0 (din_47_32_eq_0), |
| .din_15_8_eq_0 (din_47_40_eq_0), |
| .lead0_16b_2_lo (lead0_47_32_2), |
| .lead0_16b_1_lo (lead0_47_32_1), |
| .lead0_16b_0_lo (lead0_47_32_0), |
| |
| .din_31_0_eq_0 (din_63_32_eq_0), |
| .lead0_32b_3 (lead0_63_32_3), |
| .lead0_32b_2 (lead0_63_32_2), |
| .lead0_32b_1 (lead0_63_32_1), |
| .lead0_32b_0 (lead0_63_32_0) |
| ); |
| |
| fpu_cnt_lead0_lvl4 i_fpu_cnt_lead0_lvl4_31_0 ( |
| .din_31_16_eq_0 (din_31_16_eq_0), |
| .din_31_24_eq_0 (din_31_24_eq_0), |
| .lead0_16b_2_hi (lead0_31_16_2), |
| .lead0_16b_1_hi (lead0_31_16_1), |
| .lead0_16b_0_hi (lead0_31_16_0), |
| .din_15_0_eq_0 (din_15_0_eq_0), |
| .din_15_8_eq_0 (din_15_8_eq_0), |
| .lead0_16b_2_lo (lead0_15_0_2), |
| .lead0_16b_1_lo (lead0_15_0_1), |
| .lead0_16b_0_lo (lead0_15_0_0), |
| |
| .din_31_0_eq_0 (din_31_0_eq_0), |
| .lead0_32b_3 (lead0_31_0_3), |
| .lead0_32b_2 (lead0_31_0_2), |
| .lead0_32b_1 (lead0_31_0_1), |
| .lead0_32b_0 (lead0_31_0_0) |
| ); |
| |
| |
| assign lead0_6= din_63_32_eq_0 && din_31_0_eq_0; |
| |
| assign lead0_5= (!lead0_6) && din_63_32_eq_0; |
| |
| assign lead0_4= ((!din_63_32_eq_0) && din_63_48_eq_0) |
| || (din_63_32_eq_0 && din_31_16_eq_0 && (!lead0_6)); |
| |
| assign lead0_3= ((!din_63_32_eq_0) && lead0_63_32_3) |
| || (din_63_32_eq_0 && lead0_31_0_3 && (!lead0_6)); |
| |
| assign lead0_2= ((!din_63_32_eq_0) && lead0_63_32_2) |
| || (din_63_32_eq_0 && lead0_31_0_2 && (!lead0_6)); |
| |
| assign lead0_1= ((!din_63_32_eq_0) && lead0_63_32_1) |
| || (din_63_32_eq_0 && lead0_31_0_1 && (!lead0_6)); |
| |
| assign lead0_0= ((!din_63_32_eq_0) && lead0_63_32_0) |
| || (din_63_32_eq_0 && lead0_31_0_0 && (!lead0_6)); |
| |
| assign lead0[5:0]= {lead0_5, lead0_4, lead0_3, lead0_2, lead0_1, |
| lead0_0}; |
| |
| |
| endmodule |
| |
| |