// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: sii_ild_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 [1:0] sii_mb0_ild_fail_l;
wire ff_sii_mb0_ild_fail_scanin;
wire ff_sii_mb0_ild_fail_scanout;
wire ff_sii_mb0_wdata_rrr_scanin;
wire ff_sii_mb0_wdata_rrr_scanout;
wire [7:0] sii_mb0_wdata_rr;
wire [7:0] sii_mb0_wdata_rrr;
wire ff_sii_mb0_wdata_rr_scanin;
wire ff_sii_mb0_wdata_rr_scanout;
wire [7:0] sii_mb0_wdata_r;
wire ff_sii_mb0_wdata_r_scanin;
wire ff_sii_mb0_wdata_r_scanout;
wire ilc_ild_de_sel_cyc_unused;
wire [1:0] ilc_ild_de_sel_cyc;
wire [13:0] ildq_ild_ecc;
wire [63:0] ildq_ild_data;
wire [69:0] ild_curhdr_ecc;
wire ff_sii_l2b_ecc_scanin;
wire ff_sii_l2b_ecc_scanout;
wire [6:0] sii_l2b_ecc_hdr;
wire sii_l2b_ecc_hdr_unused;
wire [6:0] sii_l2b_ecc_l;
wire sii_l2b_ecc_l_unused;
wire ff_sii_l2t_req_scanin;
wire ff_sii_l2t_req_scanout;
wire [31:0] sii_l2t_req_l;
wire [69:0] sii_l2t_hdr0;
wire [69:0] sii_l2t_hdr1;
wire [69:0] sii_l2t_hdr2;
wire [69:0] sii_l2t_hdr3;
wire [69:0] ipcc_data_out_buff;
wire ff_sii_l2t_hdr0_scanin;
wire ff_sii_l2t_hdr0_scanout;
wire ff_sii_l2t_hdr1_scanin;
wire ff_sii_l2t_hdr1_scanout;
wire ff_sii_l2t_hdr2_scanin;
wire ff_sii_l2t_hdr2_scanout;
wire ff_sii_l2t_hdr3_scanin;
wire ff_sii_l2t_hdr3_scanout;
output [31:0] sii_l2t_req;
output [6:0] sii_l2b_ecc;
//------inter-submodule signals-------
input [1:0] ilc_ild_de_sel;
input [3:0] ilc_ild_ldhdr; // load into the hdr register
input [3:0] ilc_ild_addr_h; // select the header register
input [3:0] ilc_ild_addr_lo; // select the header register
input [1:0] ilc_ild_hdr_sel; // select hdr cycle 1 or 2
input [1:0] ilc_ild_cyc_sel;
input [63:0] ilc_ild_newhdr; // l2 formatted header
output [63:0] ild_ilc_curhdr; // current transaction hdr
//-------from data path -----------
input [81:0] ildq_ild_dout; // from the queue for data
input [69:0] ipcc_data_out; // partial from data bus for header
input [7:0] sii_mb0_wdata;
output [1:0] sii_mb0_ild_fail;
//************************************************************************
// MBIST COMPARATOR SECTIONS
//************************************************************************
sii_ild_dpinv_macro__width_2 inv_fail
.dout(sii_mb0_ild_fail_l[1:0])
sii_ild_dpmsff_macro__stack_2c__width_2 ff_sii_mb0_ild_fail
.scan_in(ff_sii_mb0_ild_fail_scanin),
.scan_out(ff_sii_mb0_ild_fail_scanout),
.din (sii_mb0_ild_fail_l[1:0]),
.dout (sii_mb0_ild_fail[1:0]),
sii_ild_dpmsff_macro__stack_8c__width_8 ff_sii_mb0_wdata_rrr
.scan_in(ff_sii_mb0_wdata_rrr_scanin),
.scan_out(ff_sii_mb0_wdata_rrr_scanout),
.din (sii_mb0_wdata_rr[7:0]),
.dout (sii_mb0_wdata_rrr[7:0]),
sii_ild_dpmsff_macro__stack_8c__width_8 ff_sii_mb0_wdata_rr
.scan_in(ff_sii_mb0_wdata_rr_scanin),
.scan_out(ff_sii_mb0_wdata_rr_scanout),
.din (sii_mb0_wdata_r[7:0]),
.dout (sii_mb0_wdata_rr[7:0]),
sii_ild_dpmsff_macro__stack_8c__width_8 ff_sii_mb0_wdata_r
.scan_in(ff_sii_mb0_wdata_r_scanin),
.scan_out(ff_sii_mb0_wdata_r_scanout),
.din (sii_mb0_wdata[7:0]),
.dout (sii_mb0_wdata_r[7:0]),
assign mb_data[31:0] = {14'b0, sii_mb0_wdata_rrr[1:0], {2{sii_mb0_wdata_rrr[7:0]}}};
sii_ild_dpcmp_macro__dcmp_8x__width_32 cmp_81_64 (
.din0 ({14'b0, ildq_ild_dout[81:64]}),
sii_ild_dpcmp_macro__dcmp_8x__width_64 cmp_63_0 (
.din0 (ildq_ild_dout[63:0]),
.din1 ({8{sii_mb0_wdata_rrr[7:0]}}),
//************************************************************************
//************************************************************************
assign pce_ov = tcu_pce_ov;
assign stop = tcu_clk_stop;
assign ilc_ild_de_sel_cyc_unused = ilc_ild_de_sel_cyc[0];
//assign parity[3:0] = ildq_ild_dout[81:78];
assign ildq_ild_ecc[6:0] = ildq_ild_dout[70:64];
assign ildq_ild_ecc[13:7] = ildq_ild_dout[77:71];
assign ildq_ild_data[63:0] = ildq_ild_dout[63:0];
assign ild_ilc_curhdr[63:0] = ild_curhdr_ecc[63:0];
assign hdr_ecc[6:0] = {1'b0 , ild_curhdr_ecc[69:64]};
sii_ild_dpmsff_macro__stack_8c__width_8 ff_sii_l2b_ecc
.scan_in(ff_sii_l2b_ecc_scanin),
.scan_out(ff_sii_l2b_ecc_scanout),
.din ({1'b0, sii_l2b_ecc_hdr[6:0]} ),
.dout ({sii_l2b_ecc_unused, sii_l2b_ecc[6:0]}),
sii_ild_dpmux_macro__mux_aonpe__ports_2__stack_32r__width_8 mux_sii_l2b_ecc_hdr
.dout ({sii_l2b_ecc_hdr_unused, sii_l2b_ecc_hdr[6:0]}) ,
.din0 ({1'b0, hdr_ecc[6:0]}),
.din1 ({1'b0, sii_l2b_ecc_l[6:0]}),
.sel0 (ilc_ild_cyc_sel[0]),
.sel1 (ilc_ild_cyc_sel[1])
sii_ild_dpmux_macro__mux_aonpe__ports_2__stack_32r__width_8 mux_sii_l2b_ecc
.dout ({sii_l2b_ecc_l_unused, sii_l2b_ecc_l[6:0]}) ,
.din0 ({1'b0, ildq_ild_ecc[6:0]}),
.din1 ({1'b0, ildq_ild_ecc[13:7]}),
.sel0 (ilc_ild_de_sel[0]),
.sel1 (ilc_ild_de_sel[1])
sii_ild_dpmsff_macro__dmsff_32x__stack_32c__width_32 ff_sii_l2t_req
.scan_in(ff_sii_l2t_req_scanin),
.scan_out(ff_sii_l2t_req_scanout),
.din (sii_l2t_req_l[31:0]),
.dout (sii_l2t_req[31:0]),
//******************************************
//******************************************
sii_ild_dpmux_macro__dmux_8x__mux_aonpe__ports_4__stack_32l__width_32 mux_sii_l2t_req
.dout (sii_l2t_req_l[31:0]),
.din0 (ilc_ild_newhdr[31:0]),
.din1 (ilc_ild_newhdr[63:32]),
.din2 (ildq_ild_data[31:0]),
.din3 (ildq_ild_data[63:32]),
.sel0 (ilc_ild_hdr_sel[0]),
.sel1 (ilc_ild_hdr_sel[1]),
.sel2 (ilc_ild_de_sel_cyc[0]),
.sel3 (ilc_ild_de_sel_cyc[1])
sii_ild_dpand_macro__left_0__ports_2__stack_4r__width_2 and_data_cyc_sel
.din0 ({ilc_ild_de_sel[1], ilc_ild_de_sel[0]}),
.din1 ({ilc_ild_cyc_sel[1], ilc_ild_cyc_sel[1]}),
.dout ({ilc_ild_de_sel_cyc[1], ilc_ild_de_sel_cyc[0]} )
//******************************************
//******************************************
//mux_macro mux_ild_ilc_curhdr_h (width=36,ports=4,mux=aonpe,stack=36r,buffsel=none,dmux=8x)
sii_ild_dpmux_macro__dmux_8x__mux_aonpe__ports_4__stack_36r__width_36 mux_ild_ilc_curhdr_h
.dout (ild_curhdr_ecc[69:34]),
.din0 (sii_l2t_hdr0[69:34]),
.din1 (sii_l2t_hdr1[69:34]),
.din2 (sii_l2t_hdr2[69:34]),
.din3 (sii_l2t_hdr3[69:34]),
.sel0 (ilc_ild_addr_h[0]),
.sel1 (ilc_ild_addr_h[1]),
.sel2 (ilc_ild_addr_h[2]),
.sel3 (ilc_ild_addr_h[3])
//mux_macro mux_ild_ilc_curhdr_l (width=34,ports=4,mux=aonpe,stack=34l,buffsel=none,dmux=8x)
sii_ild_dpmux_macro__dmux_8x__mux_aonpe__ports_4__stack_34l__width_34 mux_ild_ilc_curhdr_l
.dout (ild_curhdr_ecc[33:0]),
.din0 (sii_l2t_hdr0[33:0]),
.din1 (sii_l2t_hdr1[33:0]),
.din2 (sii_l2t_hdr2[33:0]),
.din3 (sii_l2t_hdr3[33:0]),
.sel0 (ilc_ild_addr_lo[0]),
.sel1 (ilc_ild_addr_lo[1]),
.sel2 (ilc_ild_addr_lo[2]),
.sel3 (ilc_ild_addr_lo[3])
sii_ild_dpbuff_macro__dbuff_16x__stack_34c__width_34 buff_ipcc_data_out_h
.dout (ipcc_data_out_buff[69:36]),
.din (ipcc_data_out[69:36])
sii_ild_dpbuff_macro__dbuff_16x__stack_36c__width_36 buff_ipcc_data_out_l
.dout (ipcc_data_out_buff[35:0]),
.din (ipcc_data_out[35:0])
sii_ild_dpmsff_macro__stack_70c__width_70 ff_sii_l2t_hdr0
.scan_in(ff_sii_l2t_hdr0_scanin),
.scan_out(ff_sii_l2t_hdr0_scanout),
.din (ipcc_data_out_buff[69:0]),
.dout (sii_l2t_hdr0[69:0]),
sii_ild_dpmsff_macro__stack_70c__width_70 ff_sii_l2t_hdr1
.scan_in(ff_sii_l2t_hdr1_scanin),
.scan_out(ff_sii_l2t_hdr1_scanout),
.din (ipcc_data_out_buff[69:0]),
.dout (sii_l2t_hdr1[69:0]),
sii_ild_dpmsff_macro__stack_70c__width_70 ff_sii_l2t_hdr2
.scan_in(ff_sii_l2t_hdr2_scanin),
.scan_out(ff_sii_l2t_hdr2_scanout),
.din (ipcc_data_out_buff[69:0]),
.dout (sii_l2t_hdr2[69:0]),
sii_ild_dpmsff_macro__stack_70c__width_70 ff_sii_l2t_hdr3
.scan_in(ff_sii_l2t_hdr3_scanin),
.scan_out(ff_sii_l2t_hdr3_scanout),
.din (ipcc_data_out_buff[69:0]),
.dout (sii_l2t_hdr3[69:0]),
assign ff_sii_mb0_ild_fail_scanin = scan_in ;
assign ff_sii_mb0_wdata_rrr_scanin = ff_sii_mb0_ild_fail_scanout;
assign ff_sii_mb0_wdata_rr_scanin = ff_sii_mb0_wdata_rrr_scanout;
assign ff_sii_mb0_wdata_r_scanin = ff_sii_mb0_wdata_rr_scanout;
assign ff_sii_l2b_ecc_scanin = ff_sii_mb0_wdata_r_scanout;
assign ff_sii_l2t_req_scanin = ff_sii_l2b_ecc_scanout ;
assign ff_sii_l2t_hdr0_scanin = ff_sii_l2t_req_scanout ;
assign ff_sii_l2t_hdr1_scanin = ff_sii_l2t_hdr0_scanout ;
assign ff_sii_l2t_hdr2_scanin = ff_sii_l2t_hdr1_scanout ;
assign ff_sii_l2t_hdr3_scanin = ff_sii_l2t_hdr2_scanout ;
assign scan_out = ff_sii_l2t_hdr3_scanout ;
module sii_ild_dpinv_macro__width_2 (
// any PARAMS parms go into naming of macro
module sii_ild_dpmsff_macro__stack_2c__width_2 (
// any PARAMS parms go into naming of macro
module sii_ild_dpmsff_macro__stack_8c__width_8 (
// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
module sii_ild_dpcmp_macro__dcmp_8x__width_32 (
// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
module sii_ild_dpcmp_macro__dcmp_8x__width_64 (
// 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 sii_ild_dpmux_macro__mux_aonpe__ports_2__stack_32r__width_8 (
cl_dp1_muxbuff2_8x c0_0 (
// any PARAMS parms go into naming of macro
module sii_ild_dpmsff_macro__dmsff_32x__stack_32c__width_32 (
.so({so[30:0],scan_out}),
// 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 sii_ild_dpmux_macro__dmux_8x__mux_aonpe__ports_4__stack_32l__width_32 (
cl_dp1_muxbuff4_8x c0_0 (
// and macro for ports = 2,3,4
module sii_ild_dpand_macro__left_0__ports_2__stack_4r__width_2 (
// 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 sii_ild_dpmux_macro__dmux_8x__mux_aonpe__ports_4__stack_36r__width_36 (
cl_dp1_muxbuff4_8x c0_0 (
// 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 sii_ild_dpmux_macro__dmux_8x__mux_aonpe__ports_4__stack_34l__width_34 (
cl_dp1_muxbuff4_8x c0_0 (
module sii_ild_dpbuff_macro__dbuff_16x__stack_34c__width_34 (
module sii_ild_dpbuff_macro__dbuff_16x__stack_36c__width_36 (
// any PARAMS parms go into naming of macro
module sii_ild_dpmsff_macro__stack_70c__width_70 (
.so({so[68:0],scan_out}),