blob: 1d86363f2805a3ff237e0acf7a3de0877a1aa315 [file] [log] [blame]
// ========== 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