| // ========== Copyright Header Begin ========================================== |
| // |
| // OpenSPARC T1 Processor File: fpu_denorm_frac.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 ============================================ |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // Fraction comparison of two inputs that both have leading 0's. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| module fpu_denorm_frac ( |
| din1, |
| din2, |
| |
| din2_din1_denorm, |
| din2_din1_denorm_inv, |
| din2_din1_denorma, |
| din2_din1_denorm_inva |
| ); |
| |
| |
| input [53:0] din1; // input 1- fraction |
| input [53:0] din2; // input 2- fraction |
| |
| output din2_din1_denorm; // input 1 == denorm |
| output din2_din1_denorm_inv; // input 1 != denorm |
| output din2_din1_denorma; // input 1 == denorm- copy |
| output din2_din1_denorm_inva; // input 1 != denorm- copy |
| |
| |
| wire din2_din1_nz_53_51; |
| wire din2_din1_denorm_53_51; |
| wire din2_din1_nz_50_48; |
| wire din2_din1_denorm_50_48; |
| wire din2_din1_nz_47_45; |
| wire din2_din1_denorm_47_45; |
| wire din2_din1_nz_44_42; |
| wire din2_din1_denorm_44_42; |
| wire din2_din1_nz_41_39; |
| wire din2_din1_denorm_41_39; |
| wire din2_din1_nz_38_36; |
| wire din2_din1_denorm_38_36; |
| wire din2_din1_nz_35_33; |
| wire din2_din1_denorm_35_33; |
| wire din2_din1_nz_32_30; |
| wire din2_din1_denorm_32_30; |
| wire din2_din1_nz_29_27; |
| wire din2_din1_denorm_29_27; |
| wire din2_din1_nz_26_24; |
| wire din2_din1_denorm_26_24; |
| wire din2_din1_nz_23_21; |
| wire din2_din1_denorm_23_21; |
| wire din2_din1_nz_20_18; |
| wire din2_din1_denorm_20_18; |
| wire din2_din1_nz_17_15; |
| wire din2_din1_denorm_17_15; |
| wire din2_din1_nz_14_12; |
| wire din2_din1_denorm_14_12; |
| wire din2_din1_nz_11_9; |
| wire din2_din1_denorm_11_9; |
| wire din2_din1_nz_8_6; |
| wire din2_din1_denorm_8_6; |
| wire din2_din1_nz_5_3; |
| wire din2_din1_denorm_5_3; |
| wire din2_din1_nz_2_0; |
| wire din2_din1_denorm_2_0; |
| wire din2_din1_nz_53_45; |
| wire din2_din1_denorm_53_45; |
| wire din2_din1_nz_44_36; |
| wire din2_din1_denorm_44_36; |
| wire din2_din1_nz_35_27; |
| wire din2_din1_denorm_35_27; |
| wire din2_din1_nz_26_18; |
| wire din2_din1_denorm_26_18; |
| wire din2_din1_nz_17_9; |
| wire din2_din1_denorm_17_9; |
| wire din2_din1_nz_8_0; |
| wire din2_din1_denorm_8_0; |
| wire din2_din1_nz_53_27; |
| wire din2_din1_denorm_53_27; |
| wire din2_din1_nz_26_0; |
| wire din2_din1_denorm_26_0; |
| wire din2_din1_denorm; |
| wire din2_din1_denorm_inv; |
| wire din2_din1_denorma; |
| wire din2_din1_denorm_inva; |
| |
| |
| fpu_denorm_3b i_fpu_denorm_53_51 ( |
| .din1 (din1[53:51]), |
| .din2 (din2[53:51]), |
| |
| .din2_din1_nz (din2_din1_nz_53_51), |
| .din2_din1_denorm (din2_din1_denorm_53_51) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_50_48 ( |
| .din1 (din1[50:48]), |
| .din2 (din2[50:48]), |
| |
| .din2_din1_nz (din2_din1_nz_50_48), |
| .din2_din1_denorm (din2_din1_denorm_50_48) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_47_45 ( |
| .din1 (din1[47:45]), |
| .din2 (din2[47:45]), |
| |
| .din2_din1_nz (din2_din1_nz_47_45), |
| .din2_din1_denorm (din2_din1_denorm_47_45) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_44_42 ( |
| .din1 (din1[44:42]), |
| .din2 (din2[44:42]), |
| |
| .din2_din1_nz (din2_din1_nz_44_42), |
| .din2_din1_denorm (din2_din1_denorm_44_42) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_41_39 ( |
| .din1 (din1[41:39]), |
| .din2 (din2[41:39]), |
| |
| .din2_din1_nz (din2_din1_nz_41_39), |
| .din2_din1_denorm (din2_din1_denorm_41_39) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_38_36 ( |
| .din1 (din1[38:36]), |
| .din2 (din2[38:36]), |
| |
| .din2_din1_nz (din2_din1_nz_38_36), |
| .din2_din1_denorm (din2_din1_denorm_38_36) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_35_33 ( |
| .din1 (din1[35:33]), |
| .din2 (din2[35:33]), |
| |
| .din2_din1_nz (din2_din1_nz_35_33), |
| .din2_din1_denorm (din2_din1_denorm_35_33) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_32_30 ( |
| .din1 (din1[32:30]), |
| .din2 (din2[32:30]), |
| |
| .din2_din1_nz (din2_din1_nz_32_30), |
| .din2_din1_denorm (din2_din1_denorm_32_30) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_29_27 ( |
| .din1 (din1[29:27]), |
| .din2 (din2[29:27]), |
| |
| .din2_din1_nz (din2_din1_nz_29_27), |
| .din2_din1_denorm (din2_din1_denorm_29_27) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_26_24 ( |
| .din1 (din1[26:24]), |
| .din2 (din2[26:24]), |
| |
| .din2_din1_nz (din2_din1_nz_26_24), |
| .din2_din1_denorm (din2_din1_denorm_26_24) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_23_21 ( |
| .din1 (din1[23:21]), |
| .din2 (din2[23:21]), |
| |
| .din2_din1_nz (din2_din1_nz_23_21), |
| .din2_din1_denorm (din2_din1_denorm_23_21) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_20_18 ( |
| .din1 (din1[20:18]), |
| .din2 (din2[20:18]), |
| |
| .din2_din1_nz (din2_din1_nz_20_18), |
| .din2_din1_denorm (din2_din1_denorm_20_18) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_17_15 ( |
| .din1 (din1[17:15]), |
| .din2 (din2[17:15]), |
| |
| .din2_din1_nz (din2_din1_nz_17_15), |
| .din2_din1_denorm (din2_din1_denorm_17_15) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_14_12 ( |
| .din1 (din1[14:12]), |
| .din2 (din2[14:12]), |
| |
| .din2_din1_nz (din2_din1_nz_14_12), |
| .din2_din1_denorm (din2_din1_denorm_14_12) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_11_9 ( |
| .din1 (din1[11:9]), |
| .din2 (din2[11:9]), |
| |
| .din2_din1_nz (din2_din1_nz_11_9), |
| .din2_din1_denorm (din2_din1_denorm_11_9) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_8_6 ( |
| .din1 (din1[8:6]), |
| .din2 (din2[8:6]), |
| |
| .din2_din1_nz (din2_din1_nz_8_6), |
| .din2_din1_denorm (din2_din1_denorm_8_6) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_5_3 ( |
| .din1 (din1[5:3]), |
| .din2 (din2[5:3]), |
| |
| .din2_din1_nz (din2_din1_nz_5_3), |
| .din2_din1_denorm (din2_din1_denorm_5_3) |
| ); |
| |
| fpu_denorm_3b i_fpu_denorm_2_0 ( |
| .din1 (din1[2:0]), |
| .din2 (din2[2:0]), |
| |
| .din2_din1_nz (din2_din1_nz_2_0), |
| .din2_din1_denorm (din2_din1_denorm_2_0) |
| ); |
| |
| |
| fpu_denorm_3to1 i_fpu_denorm_53_45 ( |
| .din2_din1_nz_hi (din2_din1_nz_53_51), |
| .din2_din1_denorm_hi (din2_din1_denorm_53_51), |
| .din2_din1_nz_mid (din2_din1_nz_50_48), |
| .din2_din1_denorm_mid (din2_din1_denorm_50_48), |
| .din2_din1_nz_lo (din2_din1_nz_47_45), |
| .din2_din1_denorm_lo (din2_din1_denorm_47_45), |
| |
| .din2_din1_nz (din2_din1_nz_53_45), |
| .din2_din1_denorm (din2_din1_denorm_53_45) |
| ); |
| |
| fpu_denorm_3to1 i_fpu_denorm_44_36 ( |
| .din2_din1_nz_hi (din2_din1_nz_44_42), |
| .din2_din1_denorm_hi (din2_din1_denorm_44_42), |
| .din2_din1_nz_mid (din2_din1_nz_41_39), |
| .din2_din1_denorm_mid (din2_din1_denorm_41_39), |
| .din2_din1_nz_lo (din2_din1_nz_38_36), |
| .din2_din1_denorm_lo (din2_din1_denorm_38_36), |
| |
| .din2_din1_nz (din2_din1_nz_44_36), |
| .din2_din1_denorm (din2_din1_denorm_44_36) |
| ); |
| |
| fpu_denorm_3to1 i_fpu_denorm_35_27 ( |
| .din2_din1_nz_hi (din2_din1_nz_35_33), |
| .din2_din1_denorm_hi (din2_din1_denorm_35_33), |
| .din2_din1_nz_mid (din2_din1_nz_32_30), |
| .din2_din1_denorm_mid (din2_din1_denorm_32_30), |
| .din2_din1_nz_lo (din2_din1_nz_29_27), |
| .din2_din1_denorm_lo (din2_din1_denorm_29_27), |
| |
| .din2_din1_nz (din2_din1_nz_35_27), |
| .din2_din1_denorm (din2_din1_denorm_35_27) |
| ); |
| |
| fpu_denorm_3to1 i_fpu_denorm_26_18 ( |
| .din2_din1_nz_hi (din2_din1_nz_26_24), |
| .din2_din1_denorm_hi (din2_din1_denorm_26_24), |
| .din2_din1_nz_mid (din2_din1_nz_23_21), |
| .din2_din1_denorm_mid (din2_din1_denorm_23_21), |
| .din2_din1_nz_lo (din2_din1_nz_20_18), |
| .din2_din1_denorm_lo (din2_din1_denorm_20_18), |
| |
| .din2_din1_nz (din2_din1_nz_26_18), |
| .din2_din1_denorm (din2_din1_denorm_26_18) |
| ); |
| |
| fpu_denorm_3to1 i_fpu_denorm_17_9 ( |
| .din2_din1_nz_hi (din2_din1_nz_17_15), |
| .din2_din1_denorm_hi (din2_din1_denorm_17_15), |
| .din2_din1_nz_mid (din2_din1_nz_14_12), |
| .din2_din1_denorm_mid (din2_din1_denorm_14_12), |
| .din2_din1_nz_lo (din2_din1_nz_11_9), |
| .din2_din1_denorm_lo (din2_din1_denorm_11_9), |
| |
| .din2_din1_nz (din2_din1_nz_17_9), |
| .din2_din1_denorm (din2_din1_denorm_17_9) |
| ); |
| |
| fpu_denorm_3to1 i_fpu_denorm_8_0 ( |
| .din2_din1_nz_hi (din2_din1_nz_8_6), |
| .din2_din1_denorm_hi (din2_din1_denorm_8_6), |
| .din2_din1_nz_mid (din2_din1_nz_5_3), |
| .din2_din1_denorm_mid (din2_din1_denorm_5_3), |
| .din2_din1_nz_lo (din2_din1_nz_2_0), |
| .din2_din1_denorm_lo (din2_din1_denorm_2_0), |
| |
| .din2_din1_nz (din2_din1_nz_8_0), |
| .din2_din1_denorm (din2_din1_denorm_8_0) |
| ); |
| |
| |
| fpu_denorm_3to1 i_fpu_denorm_53_27 ( |
| .din2_din1_nz_hi (din2_din1_nz_53_45), |
| .din2_din1_denorm_hi (din2_din1_denorm_53_45), |
| .din2_din1_nz_mid (din2_din1_nz_44_36), |
| .din2_din1_denorm_mid (din2_din1_denorm_44_36), |
| .din2_din1_nz_lo (din2_din1_nz_35_27), |
| .din2_din1_denorm_lo (din2_din1_denorm_35_27), |
| |
| .din2_din1_nz (din2_din1_nz_53_27), |
| .din2_din1_denorm (din2_din1_denorm_53_27) |
| ); |
| |
| fpu_denorm_3to1 i_fpu_denorm_26_0 ( |
| .din2_din1_nz_hi (din2_din1_nz_26_18), |
| .din2_din1_denorm_hi (din2_din1_denorm_26_18), |
| .din2_din1_nz_mid (din2_din1_nz_17_9), |
| .din2_din1_denorm_mid (din2_din1_denorm_17_9), |
| .din2_din1_nz_lo (din2_din1_nz_8_0), |
| .din2_din1_denorm_lo (din2_din1_denorm_8_0), |
| |
| .din2_din1_nz (din2_din1_nz_26_0), |
| .din2_din1_denorm (din2_din1_denorm_26_0) |
| ); |
| |
| |
| assign din2_din1_denorm= (din2_din1_nz_53_27 && din2_din1_denorm_53_27) |
| || ((!din2_din1_nz_53_27) && (!din2_din1_nz_26_0)) |
| || ((!din2_din1_nz_53_27) && din2_din1_denorm_26_0); |
| |
| assign din2_din1_denorm_inv= (!din2_din1_denorm); |
| |
| assign din2_din1_denorma= din2_din1_denorm; |
| |
| assign din2_din1_denorm_inva= din2_din1_denorm_inv; |
| |
| |
| endmodule |
| |
| |