// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: ifu_ibu_ibf_dp.v
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
// This 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 program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// ========== Copyright Header End ============================================
ftu_instr_0_exceptions_c,
ftu_instr_1_exceptions_c,
ftu_instr_2_exceptions_c,
ftu_instr_3_exceptions_c,
ibq_buf0_sel_inst0_pick_,
ibq_buf0_sel_inst1_pick_,
ibq_buf0_sel_inst2_pick_,
ibq_buf0_sel_inst3_pick_,
ibq_buf0_sel_buf1to7_pick,
ibq_buf0_sel_buf1to7_pick_,
wire buf0_sel_inst0_int0;
wire buf0_sel_inst1_int0;
wire buf0_sel_inst2_int0;
wire buf0_sel_inst3_int0;
wire buf0_sel_buf1to7_int0;
wire buf0_sel_inst0_int1;
wire buf0_sel_inst1_int1;
wire buf0_sel_inst2_int1;
wire buf0_sel_inst3_int1;
wire buf0_sel_buf1to7_int1;
wire [4:0] instr_1_exceptions_c_mod;
wire [4:0] instr_2_exceptions_c_mod;
wire [4:0] instr_3_exceptions_c_mod;
input tcu_pce_ov; // scan signals
input [32:0] ftu_instr_0_c;
input [32:0] ftu_instr_1_c;
input [32:0] ftu_instr_2_c;
input [32:0] ftu_instr_3_c;
input [4:0] ftu_instr_0_exceptions_c;
input [4:0] ftu_instr_1_exceptions_c;
input [4:0] ftu_instr_2_exceptions_c;
input [4:0] ftu_instr_3_exceptions_c;
input ibq_buf0_sel_inst0_pick ;
input ibq_buf0_sel_inst1_pick ;
input ibq_buf0_sel_inst2_pick ;
input ibq_buf0_sel_inst3_pick ;
input ibq_buf0_sel_inst0_pick_;
input ibq_buf0_sel_inst1_pick_;
input ibq_buf0_sel_inst2_pick_;
input ibq_buf0_sel_inst3_pick_;
input ibq_buf0_sel_buf1 ;
input ibq_buf0_sel_buf2 ;
input ibq_buf0_sel_buf3 ;
input ibq_buf0_sel_buf4 ;
input ibq_buf0_sel_buf5 ;
input ibq_buf0_sel_buf6 ;
input ibq_buf0_sel_buf7 ;
input ibq_buf0_sel_hold_pick ;
input ibq_buf0_sel_hold_pick_ ;
input ibq_buf0_sel_buf1to7_pick;
input ibq_buf0_sel_buf1to7_pick_;
input ibq_buf1_sel_inst0 ;
input ibq_buf1_sel_inst1 ;
input ibq_buf1_sel_inst2 ;
input ibq_buf1_sel_inst3 ;
input ibq_buf1_sel_hold ;
input ibq_buf2_sel_inst0 ;
input ibq_buf2_sel_inst1 ;
input ibq_buf2_sel_inst2 ;
input ibq_buf2_sel_inst3 ;
input ibq_buf2_sel_hold ;
input ibq_buf3_sel_inst0 ;
input ibq_buf3_sel_inst1 ;
input ibq_buf3_sel_inst2 ;
input ibq_buf3_sel_inst3 ;
input ibq_buf3_sel_hold ;
input ibq_buf4_sel_inst0 ;
input ibq_buf4_sel_inst1 ;
input ibq_buf4_sel_inst2 ;
input ibq_buf4_sel_inst3 ;
input ibq_buf4_sel_hold ;
input ibq_buf5_sel_inst0 ;
input ibq_buf5_sel_inst1 ;
input ibq_buf5_sel_inst2 ;
input ibq_buf5_sel_inst3 ;
input ibq_buf5_sel_hold ;
input ibq_buf6_sel_inst0 ;
input ibq_buf6_sel_inst1 ;
input ibq_buf6_sel_inst2 ;
input ibq_buf6_sel_inst3 ;
input ibq_buf6_sel_hold ;
input ibq_buf7_sel_inst0 ;
input ibq_buf7_sel_inst1 ;
input ibq_buf7_sel_inst2 ;
input ibq_buf7_sel_inst3 ;
input ibq_buf7_sel_hold ;
output[32:0] ifu_buf0_inst ;
output[4:0] ifu_buf0_excp ;
// assign pce_ov = tcu_pce_ov;
// assign siclk = spc_aclk;
// assign soclk = spc_bclk;
ifu_ibu_ibf_dp_buff_macro__dbuff_32x__stack_none__width_4 test_rep0 (
.din ({tcu_scan_en,tcu_pce_ov,spc_aclk,spc_bclk}),
.dout({se,pce_ov,siclk,soclk})
///////////////////////////////////////////////////////////
// Muxing for each buffer //
///////////////////////////////////////////////////////////
// mux types can be decided later based on area/timing. Can also use other types of logic (i.e. and/or)
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_7__stack_38c__width_38 buf0_muxa (
.sel0(ibq_buf0_sel_buf1),
.sel1(ibq_buf0_sel_buf2),
.sel2(ibq_buf0_sel_buf3),
.sel3(ibq_buf0_sel_buf4),
.sel4(ibq_buf0_sel_buf5),
.sel5(ibq_buf0_sel_buf6),
.sel6(ibq_buf0_sel_buf7),
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
ifu_ibu_ibf_dp_inv_macro__dinv_12x__width_3 pick_inv (
.dout({pick0_,pick1_,pick2_}));
ifu_ibu_ibf_dp_nand_macro__dnand_20x__width_6 ibuf0_sel0_n0 (
.din1 ({ibq_buf0_sel_inst0_pick,ibq_buf0_sel_inst1_pick,ibq_buf0_sel_inst2_pick,
ibq_buf0_sel_inst3_pick,ibq_buf0_sel_buf1to7_pick,ibq_buf0_sel_hold_pick}),
.dout ({buf0_sel_inst0_int0,buf0_sel_inst1_int0,buf0_sel_inst2_int0,
buf0_sel_inst3_int0,buf0_sel_buf1to7_int0,buf0_sel_hold_int0})) ;
ifu_ibu_ibf_dp_nand_macro__dnand_20x__width_6 ibuf0_sel0_n1 (
.din0 ({2{pick0_,pick1_,pick2_}}),
.din1 ({ibq_buf0_sel_inst0_pick_,ibq_buf0_sel_inst1_pick_,ibq_buf0_sel_inst2_pick_,
ibq_buf0_sel_inst3_pick_,ibq_buf0_sel_buf1to7_pick_,ibq_buf0_sel_hold_pick_}),
.dout ({buf0_sel_inst0_int1,buf0_sel_inst1_int1,buf0_sel_inst2_int1,
buf0_sel_inst3_int1,buf0_sel_buf1to7_int1,buf0_sel_hold_int1})) ;
ifu_ibu_ibf_dp_nand_macro__dnand_32x__width_6 ibuf0_sel0_n2 (
.din0 ({buf0_sel_inst0_int1,buf0_sel_inst1_int1,buf0_sel_inst2_int1,
buf0_sel_inst3_int1,buf0_sel_buf1to7_int1,buf0_sel_hold_int1}),
.din1 ({buf0_sel_inst0_int0,buf0_sel_inst1_int0,buf0_sel_inst2_int0,
buf0_sel_inst3_int0,buf0_sel_buf1to7_int0,buf0_sel_hold_int0}),
.dout ({buf0_sel_inst0,buf0_sel_inst1,buf0_sel_inst2,
buf0_sel_inst3,buf0_sel_buf1to7,buf0_sel_hold})) ;
////////////////////////////////////////////////////////////////////
// Zero out the exception bits when in Ic by-pass mode and no_err //
// This is done to avoid the PMU counting cache-misses and other //
// info more than once. I.e only one instruction should be marked //
// NOTE: we can not do that when there are errors becuse we need //
// to have at least two instruction marked just in case one of //
////////////////////////////////////////////////////////////////////
ifu_ibu_ibf_dp_buff_macro__dbuff_32x__stack_none__width_1 ic_no_err_buff (
ifu_ibu_ibf_dp_and_macro__dnand_32x__width_5 except_1_and (
.din1 ({5{ic_no_err_c_buf}}),
.din0 ( ftu_instr_1_exceptions_c[4:0]),
.dout ( instr_1_exceptions_c_mod[4:0]));
ifu_ibu_ibf_dp_and_macro__dnand_32x__width_5 except_2_and (
.din1 ({5{ic_no_err_c_buf}}),
.din0 ( ftu_instr_2_exceptions_c[4:0]),
.dout ( instr_2_exceptions_c_mod[4:0]));
ifu_ibu_ibf_dp_and_macro__dnand_32x__width_5 except_3_and (
.din1 ({5{ic_no_err_c_buf}}),
.din0 ( ftu_instr_3_exceptions_c[4:0]),
.dout ( instr_3_exceptions_c_mod[4:0]));
///////////////////////////////////////////////////////////////////
// Changed this mux to 7x1 because the instructions are no longer//
// ordered and we do not know which one the first instruction is //
///////////////////////////////////////////////////////////////////
ifu_ibu_ibf_dp_mux_macro__buffsel_none__mux_aonpe__ports_6__stack_38c__width_38 buf0_muxb (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.din4(buf0_in7to1[37:0]),
.din5({ifu_buf0_excp[4:0], ifu_buf0_inst[32:0]}),
// mux_macro buf0_muxc (width=38,ports=2,mux=aope,stack=38c) (
// .din0(buf0_flush0[37:0]),
// .din1({ifu_buf0_excp[4:0], ifu_buf0_inst[32:0]}),
// .sel0(ibq_buf0_sel_hold),
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 buf1_mux (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.sel0(ibq_buf1_sel_inst0),
.sel1(ibq_buf1_sel_inst1),
.sel2(ibq_buf1_sel_inst2),
.sel3(ibq_buf1_sel_inst3),
.sel4(ibq_buf1_sel_hold),
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 buf2_mux (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.sel0(ibq_buf2_sel_inst0),
.sel1(ibq_buf2_sel_inst1),
.sel2(ibq_buf2_sel_inst2),
.sel3(ibq_buf2_sel_inst3),
.sel4(ibq_buf2_sel_hold),
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 buf3_mux (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.sel0(ibq_buf3_sel_inst0),
.sel1(ibq_buf3_sel_inst1),
.sel2(ibq_buf3_sel_inst2),
.sel3(ibq_buf3_sel_inst3),
.sel4(ibq_buf3_sel_hold),
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 buf4_mux (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.sel0(ibq_buf4_sel_inst0),
.sel1(ibq_buf4_sel_inst1),
.sel2(ibq_buf4_sel_inst2),
.sel3(ibq_buf4_sel_inst3),
.sel4(ibq_buf4_sel_hold),
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 buf5_mux (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.sel0(ibq_buf5_sel_inst0),
.sel1(ibq_buf5_sel_inst1),
.sel2(ibq_buf5_sel_inst2),
.sel3(ibq_buf5_sel_inst3),
.sel4(ibq_buf5_sel_hold),
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 buf6_mux (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.sel0(ibq_buf6_sel_inst0),
.sel1(ibq_buf6_sel_inst1),
.sel2(ibq_buf6_sel_inst2),
.sel3(ibq_buf6_sel_inst3),
.sel4(ibq_buf6_sel_hold),
ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 buf7_mux (
.din0({ftu_instr_0_exceptions_c[4:0],ftu_instr_0_c[32:0]}),
.din1({instr_1_exceptions_c_mod[4:0],ftu_instr_1_c[32:0]}),
.din2({instr_2_exceptions_c_mod[4:0],ftu_instr_2_c[32:0]}),
.din3({instr_3_exceptions_c_mod[4:0],ftu_instr_3_c[32:0]}),
.sel0(ibq_buf7_sel_inst0),
.sel1(ibq_buf7_sel_inst1),
.sel2(ibq_buf7_sel_inst2),
.sel3(ibq_buf7_sel_inst3),
.sel4(ibq_buf7_sel_hold),
///////////////////////////////////////////////////////////
// Flops for the buffers //
///////////////////////////////////////////////////////////
ifu_ibu_ibf_dp_msff_macro__dmsff_32x__stack_38c__width_38 buf0_ff (
.scan_in(buf0_ff_scanin),
.scan_out(buf0_ff_scanout),
.dout ({ifu_buf0_excp[4:0],ifu_buf0_inst[32:0]}),
ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 buf1_ff (
.scan_in(buf1_ff_scanin),
.scan_out(buf1_ff_scanout),
ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 buf2_ff (
.scan_in(buf2_ff_scanin),
.scan_out(buf2_ff_scanout),
ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 buf3_ff (
.scan_in(buf3_ff_scanin),
.scan_out(buf3_ff_scanout),
ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 buf4_ff (
.scan_in(buf4_ff_scanin),
.scan_out(buf4_ff_scanout),
ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 buf5_ff (
.scan_in(buf5_ff_scanin),
.scan_out(buf5_ff_scanout),
ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 buf6_ff (
.scan_in(buf6_ff_scanin),
.scan_out(buf6_ff_scanout),
ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 buf7_ff (
.scan_in(buf7_ff_scanin),
.scan_out(buf7_ff_scanout),
assign buf0_ff_scanin = scan_in ;
assign buf1_ff_scanin = buf0_ff_scanout ;
assign buf2_ff_scanin = buf1_ff_scanout ;
assign buf3_ff_scanin = buf2_ff_scanout ;
assign buf4_ff_scanin = buf3_ff_scanout ;
assign buf5_ff_scanin = buf4_ff_scanout ;
assign buf6_ff_scanin = buf5_ff_scanout ;
assign buf7_ff_scanin = buf6_ff_scanout ;
assign scan_out = buf7_ff_scanout ;
// assign se = tcu_scan_en ;
module ifu_ibu_ibf_dp_buff_macro__dbuff_32x__stack_none__width_4 (
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_7__stack_38c__width_38 (
cl_dp1_muxbuff7_8x c0_0 (
module ifu_ibu_ibf_dp_inv_macro__dinv_12x__width_3 (
// nand macro for ports = 2,3,4
module ifu_ibu_ibf_dp_nand_macro__dnand_20x__width_6 (
// nand macro for ports = 2,3,4
module ifu_ibu_ibf_dp_nand_macro__dnand_32x__width_6 (
module ifu_ibu_ibf_dp_buff_macro__dbuff_32x__stack_none__width_1 (
// and macro for ports = 2,3,4
module ifu_ibu_ibf_dp_and_macro__dnand_32x__width_5 (
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module ifu_ibu_ibf_dp_mux_macro__buffsel_none__mux_aonpe__ports_6__stack_38c__width_38 (
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module ifu_ibu_ibf_dp_mux_macro__mux_aonpe__ports_5__stack_38c__width_38 (
cl_dp1_muxbuff5_8x c0_0 (
// any PARAMS parms go into naming of macro
module ifu_ibu_ibf_dp_msff_macro__dmsff_32x__stack_38c__width_38 (
.so({so[36:0],scan_out}),
// any PARAMS parms go into naming of macro
module ifu_ibu_ibf_dp_msff_macro__stack_38c__width_38 (
.so({so[36:0],scan_out}),