// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: ifu_cmu_lsi_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 ============================================
wire [32:0] w0_data_r1_buf;
wire [32:0] w1_data_r1_buf;
wire [32:0] w2_data_r1_buf;
wire [32:0] w3_data_r1_buf;
wire [32:0] w4_data_r1_buf;
wire [32:0] w5_data_r1_buf;
wire [32:0] w6_data_r1_buf;
wire [32:0] w7_data_r1_buf;
wire fill_data_w0_reg_scanin;
wire fill_data_w0_reg_scanout;
wire fill_data_w1_reg_scanin;
wire fill_data_w1_reg_scanout;
wire fill_data_w2_reg_scanin;
wire fill_data_w2_reg_scanout;
wire fill_data_w3_reg_scanin;
wire fill_data_w3_reg_scanout;
wire fill_data_w4_reg_scanin;
wire fill_data_w4_reg_scanout;
wire fill_data_w5_reg_scanin;
wire fill_data_w5_reg_scanout;
wire fill_data_w6_reg_scanin;
wire fill_data_w6_reg_scanout;
wire fill_data_w7_reg_scanin;
wire fill_data_w7_reg_scanout;
wire [7:0] lsc_data_sel_lat;
wire [32:0] cmu_fill_inst0_prebuf;
wire [32:0] cmu_fill_inst1_prebuf;
wire [32:0] cmu_fill_inst2_prebuf;
wire [32:0] cmu_fill_inst3_prebuf;
input [7:0] lsc_data_sel;
input [127:0] l15_spc_data1;
input [3:0] gkt_ifu_legal;
input [3:0] gkt_ifu_flip_parity;
output [263:0] cmu_ic_data;
output [32:0] cmu_fill_inst0;
output [32:0] cmu_fill_inst1;
output [32:0] cmu_fill_inst2;
output [32:0] cmu_fill_inst3;
ifu_cmu_lsi_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 test_rep0 (
.din ({tcu_scan_en,tcu_pce_ov,spc_aclk,spc_bclk}),
.dout({se,pce_ov,siclk,soclk})
////////////////////////////////////////////////////////
// Compute parity on input data from gkt
// Data from gkt arrives at ~350ps, parity should be 250 ps.
////////////////////////////////////////////////////////
ifu_cmu_lsi_dp_prty_macro__dprty_8x__width_32 w0_parity (
.din(l15_spc_data1[127:96]),
ifu_cmu_lsi_dp_xor_macro__ports_2__stack_34c__width_1 w0_parity_final (
.din0(l15_w0_parity_pre),
.din1(gkt_ifu_flip_parity[3]),
ifu_cmu_lsi_dp_prty_macro__dprty_8x__width_32 w1_parity (
.din(l15_spc_data1[95:64]),
ifu_cmu_lsi_dp_xor_macro__ports_2__stack_34c__width_1 w1_parity_final (
.din0(l15_w1_parity_pre),
.din1(gkt_ifu_flip_parity[2]),
ifu_cmu_lsi_dp_prty_macro__dprty_8x__width_32 w2_parity (
.din(l15_spc_data1[63:32]),
ifu_cmu_lsi_dp_xor_macro__ports_2__stack_34c__width_1 w2_parity_final (
.din0(l15_w2_parity_pre),
.din1(gkt_ifu_flip_parity[1]),
ifu_cmu_lsi_dp_prty_macro__dprty_8x__width_32 w3_parity (
.din(l15_spc_data1[31:0]),
ifu_cmu_lsi_dp_xor_macro__ports_2__stack_34c__width_1 w3_parity_final (
.din0(l15_w3_parity_pre),
.din1(gkt_ifu_flip_parity[0]),
////////////////////////////////////////////////////////
// For illegal instructions, 0 out bits 31,30,24,23,22 of instruction
////////////////////////////////////////////////////////
ifu_cmu_lsi_dp_and_macro__stack_34c__width_5 zero_opc_and0 (
.din0 ({l15_spc_data1[31],l15_spc_data1[30],l15_spc_data1[24],l15_spc_data1[23],l15_spc_data1[22]}),
.din1 ({5{gkt_ifu_legal[0]}}),
.dout ({gkt_data[31],gkt_data[30],gkt_data[24],gkt_data[23],gkt_data[22]})
ifu_cmu_lsi_dp_and_macro__stack_34c__width_5 zero_opc_and1 (
.din0 ({l15_spc_data1[63],l15_spc_data1[62],l15_spc_data1[56],l15_spc_data1[55],l15_spc_data1[54]}),
.din1 ({5{gkt_ifu_legal[1]}}),
.dout ({gkt_data[63],gkt_data[62],gkt_data[56],gkt_data[55],gkt_data[54]})
ifu_cmu_lsi_dp_and_macro__stack_34c__width_5 zero_opc_and2 (
.din0 ({l15_spc_data1[95],l15_spc_data1[94],l15_spc_data1[88],l15_spc_data1[87],l15_spc_data1[86]}),
.din1 ({5{gkt_ifu_legal[2]}}),
.dout ({gkt_data[95],gkt_data[94],gkt_data[88],gkt_data[87],gkt_data[86]})
ifu_cmu_lsi_dp_and_macro__stack_34c__width_5 zero_opc_and3 (
.din0 ({l15_spc_data1[127],l15_spc_data1[126],l15_spc_data1[120],l15_spc_data1[119],l15_spc_data1[118]}),
.din1 ({5{gkt_ifu_legal[3]}}),
.dout ({gkt_data[127],gkt_data[126],gkt_data[120],gkt_data[119],gkt_data[118]})
assign gkt_data[29:25] = l15_spc_data1[29:25];
assign gkt_data[21:0] = l15_spc_data1[21:0];
assign gkt_data[61:57] = l15_spc_data1[61:57];
assign gkt_data[53:32] = l15_spc_data1[53:32];
assign gkt_data[93:89] = l15_spc_data1[93:89];
assign gkt_data[85:64] = l15_spc_data1[85:64];
assign gkt_data[125:121] = l15_spc_data1[125:121];
assign gkt_data[117:96] = l15_spc_data1[117:96];
////////////////////////////////////////////////////////
// Flopping input data from gkt
////////////////////////////////////////////////////////
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w0_data_mux (
.din1(w0_data_r1_buf[32:0]),
.din0({l15_w0_parity,gkt_data[127:96]}),
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w1_data_mux (
.din1(w1_data_r1_buf[32:0]),
.din0({l15_w1_parity,gkt_data[95:64]}),
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w2_data_mux (
.din1(w2_data_r1_buf[32:0]),
.din0({l15_w2_parity,gkt_data[63:32]}),
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w3_data_mux (
.din1(w3_data_r1_buf[32:0]),
.din0({l15_w3_parity,gkt_data[31:0]}),
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w4_data_mux (
.din1(w4_data_r1_buf[32:0]),
.din0({l15_w0_parity,gkt_data[127:96]}),
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w5_data_mux (
.din1(w5_data_r1_buf[32:0]),
.din0({l15_w1_parity,gkt_data[95:64]}),
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w6_data_mux (
.din1(w6_data_r1_buf[32:0]),
.din0({l15_w2_parity,gkt_data[63:32]}),
ifu_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 w7_data_mux (
.din1(w7_data_r1_buf[32:0]),
.din0({l15_w3_parity,gkt_data[31:0]}),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w0_reg (
.scan_in(fill_data_w0_reg_scanin),
.scan_out(fill_data_w0_reg_scanout),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w1_reg (
.scan_in(fill_data_w1_reg_scanin),
.scan_out(fill_data_w1_reg_scanout),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w2_reg (
.scan_in(fill_data_w2_reg_scanin),
.scan_out(fill_data_w2_reg_scanout),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w3_reg (
.scan_in(fill_data_w3_reg_scanin),
.scan_out(fill_data_w3_reg_scanout),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w4_reg (
.scan_in(fill_data_w4_reg_scanin),
.scan_out(fill_data_w4_reg_scanout),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w5_reg (
.scan_in(fill_data_w5_reg_scanin),
.scan_out(fill_data_w5_reg_scanout),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w6_reg (
.scan_in(fill_data_w6_reg_scanin),
.scan_out(fill_data_w6_reg_scanout),
ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 fill_data_w7_reg (
.scan_in(fill_data_w7_reg_scanin),
.scan_out(fill_data_w7_reg_scanout),
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
ifu_cmu_lsi_dp_msff_macro__left_8__stack_16l__width_8 paddr_lat (
.scan_in(paddr_lat_scanin),
.scan_out(paddr_lat_scanout),
.din (lsc_data_sel[7:0]),
.dout(lsc_data_sel_lat[7:0]),
ifu_cmu_lsi_dp_mux_macro__mux_aonpe__ports_8__stack_34c__width_33 inst0_mux (
.din0(w0_data_r1_buf[32:0]),
.din1(w1_data_r1_buf[32:0]),
.din2(w2_data_r1_buf[32:0]),
.din3(w3_data_r1_buf[32:0]),
.din4(w4_data_r1_buf[32:0]),
.din5(w5_data_r1_buf[32:0]),
.din6(w6_data_r1_buf[32:0]),
.din7(w7_data_r1_buf[32:0]),
.sel0(lsc_data_sel_lat[0]),
.sel1(lsc_data_sel_lat[1]),
.sel2(lsc_data_sel_lat[2]),
.sel3(lsc_data_sel_lat[3]),
.sel4(lsc_data_sel_lat[4]),
.sel5(lsc_data_sel_lat[5]),
.sel6(lsc_data_sel_lat[6]),
.sel7(lsc_data_sel_lat[7]),
.dout(cmu_fill_inst0_prebuf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 inst0_buf (
.din (cmu_fill_inst0_prebuf[32:0]),
.dout (cmu_fill_inst0[32:0])
ifu_cmu_lsi_dp_mux_macro__mux_aonpe__ports_8__stack_34c__width_33 inst1_mux (
.din0(w1_data_r1_buf[32:0]),
.din1(w2_data_r1_buf[32:0]),
.din2(w3_data_r1_buf[32:0]),
.din3(w4_data_r1_buf[32:0]),
.din4(w5_data_r1_buf[32:0]),
.din5(w6_data_r1_buf[32:0]),
.din6(w7_data_r1_buf[32:0]),
.din7(w0_data_r1_buf[32:0]),
.sel0(lsc_data_sel_lat[0]),
.sel1(lsc_data_sel_lat[1]),
.sel2(lsc_data_sel_lat[2]),
.sel3(lsc_data_sel_lat[3]),
.sel4(lsc_data_sel_lat[4]),
.sel5(lsc_data_sel_lat[5]),
.sel6(lsc_data_sel_lat[6]),
.sel7(lsc_data_sel_lat[7]),
.dout(cmu_fill_inst1_prebuf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 inst1_buf (
.din (cmu_fill_inst1_prebuf[32:0]),
.dout (cmu_fill_inst1[32:0])
ifu_cmu_lsi_dp_mux_macro__mux_aonpe__ports_8__stack_34c__width_33 inst2_mux (
.din0(w2_data_r1_buf[32:0]),
.din1(w3_data_r1_buf[32:0]),
.din2(w4_data_r1_buf[32:0]),
.din3(w5_data_r1_buf[32:0]),
.din4(w6_data_r1_buf[32:0]),
.din5(w7_data_r1_buf[32:0]),
.din6(w0_data_r1_buf[32:0]),
.din7(w1_data_r1_buf[32:0]),
.sel0(lsc_data_sel_lat[0]),
.sel1(lsc_data_sel_lat[1]),
.sel2(lsc_data_sel_lat[2]),
.sel3(lsc_data_sel_lat[3]),
.sel4(lsc_data_sel_lat[4]),
.sel5(lsc_data_sel_lat[5]),
.sel6(lsc_data_sel_lat[6]),
.sel7(lsc_data_sel_lat[7]),
.dout(cmu_fill_inst2_prebuf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 inst2_buf (
.din (cmu_fill_inst2_prebuf[32:0]),
.dout (cmu_fill_inst2[32:0])
ifu_cmu_lsi_dp_mux_macro__mux_aonpe__ports_8__stack_34c__width_33 inst3_mux (
.din0(w3_data_r1_buf[32:0]),
.din1(w4_data_r1_buf[32:0]),
.din2(w5_data_r1_buf[32:0]),
.din3(w6_data_r1_buf[32:0]),
.din4(w7_data_r1_buf[32:0]),
.din5(w0_data_r1_buf[32:0]),
.din6(w1_data_r1_buf[32:0]),
.din7(w2_data_r1_buf[32:0]),
.sel0(lsc_data_sel_lat[0]),
.sel1(lsc_data_sel_lat[1]),
.sel2(lsc_data_sel_lat[2]),
.sel3(lsc_data_sel_lat[3]),
.sel4(lsc_data_sel_lat[4]),
.sel5(lsc_data_sel_lat[5]),
.sel6(lsc_data_sel_lat[6]),
.sel7(lsc_data_sel_lat[7]),
.dout(cmu_fill_inst3_prebuf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 inst3_buf (
.din (cmu_fill_inst3_prebuf[32:0]),
.dout (cmu_fill_inst3[32:0])
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w0_data_buf (
.dout (w0_data_r1_buf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w1_data_buf (
.dout (w1_data_r1_buf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w2_data_buf (
.dout (w2_data_r1_buf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w3_data_buf (
.dout (w3_data_r1_buf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w4_data_buf (
.dout (w4_data_r1_buf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w5_data_buf (
.dout (w5_data_r1_buf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w6_data_buf (
.dout (w6_data_r1_buf[32:0])
ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 w7_data_buf (
.dout (w7_data_r1_buf[32:0])
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
assign cmu_ic_data[32:0] = w0_data_r1_buf[32:0];
assign cmu_ic_data[65:33] = w1_data_r1_buf[32:0];
assign cmu_ic_data[98:66] = w2_data_r1_buf[32:0];
assign cmu_ic_data[131:99] = w3_data_r1_buf[32:0];
assign cmu_ic_data[164:132] = w4_data_r1_buf[32:0];
assign cmu_ic_data[197:165] = w5_data_r1_buf[32:0];
assign cmu_ic_data[230:198] = w6_data_r1_buf[32:0];
assign cmu_ic_data[263:231] = w7_data_r1_buf[32:0];
assign fill_data_w0_reg_scanin = scan_in ;
assign fill_data_w1_reg_scanin = fill_data_w0_reg_scanout ;
assign fill_data_w2_reg_scanin = fill_data_w1_reg_scanout ;
assign fill_data_w3_reg_scanin = fill_data_w2_reg_scanout ;
assign fill_data_w4_reg_scanin = fill_data_w3_reg_scanout ;
assign fill_data_w5_reg_scanin = fill_data_w4_reg_scanout ;
assign fill_data_w6_reg_scanin = fill_data_w5_reg_scanout ;
assign fill_data_w7_reg_scanin = fill_data_w6_reg_scanout ;
assign paddr_lat_scanin = fill_data_w7_reg_scanout ;
assign scan_out = paddr_lat_scanout ;
module ifu_cmu_lsi_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 (
// parity macro (even parity)
module ifu_cmu_lsi_dp_prty_macro__dprty_8x__width_32 (
// xor macro for ports = 2,3
module ifu_cmu_lsi_dp_xor_macro__ports_2__stack_34c__width_1 (
// and macro for ports = 2,3,4
module ifu_cmu_lsi_dp_and_macro__stack_34c__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_cmu_lsi_dp_mux_macro__mux_aope__ports_2__stack_34c__width_33 (
// any PARAMS parms go into naming of macro
module ifu_cmu_lsi_dp_msff_macro__stack_34c__width_33 (
.so({so[31:0],scan_out}),
// any PARAMS parms go into naming of macro
module ifu_cmu_lsi_dp_msff_macro__left_8__stack_16l__width_8 (
// 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_cmu_lsi_dp_mux_macro__mux_aonpe__ports_8__stack_34c__width_33 (
cl_dp1_muxbuff8_8x c0_0 (
module ifu_cmu_lsi_dp_buff_macro__stack_34c__width_33 (