// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: dmu_clu.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 ============================================
// jbc : jbc req/cpl port
// ilu: dou-dma status port
// rmu: dou dma buffer rel port
// tmu: diu buffer mgr port
// cru : config packet setup
// force 1 outstanding non-posted write
// enables for 2 fixes for bug 107207 from spare imu
// >>>>>>>>>>>>>>>>>>>>>>>>> Parameter Declarations <<<<<<<<<<<<<<<<<<<<<<<<<
// >>>>>>>>>>>>>>>>>>>>>>>>> Port Declarations <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// --------------------------------------------------------
// --------------------------------------------------------
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CTM: DMC Req/Cpl Port -----
output [(`FIRE_D2J_CMD_WDTH - 1):0] d2j_cmd;
output [(`FIRE_D2J_ADDR_WDTH - 1):0] d2j_addr;
output [(`FIRE_D2J_CTAG_WDTH - 1):0] d2j_ctag;
output [(`FIRE_D2J_DATA_WDTH - 1):0] d2j_data;
output [(`FIRE_D2J_BMSK_WDTH - 1):0] d2j_bmsk;
output [(`FIRE_D2J_DPAR_WDTH - 1):0] d2j_data_par;
// ----- CTM: DMA Wrack Port -----
input [(`FIRE_J2D_D_WRACK_WDTH - 1):0] j2d_d_wrack_tag;
// ----- CRM: Req/Cpl Command Port -----
input [(`FIRE_J2D_DI_CMD_WDTH - 1):0] j2d_di_cmd;
input [(`FIRE_J2D_DI_CTAG_WDTH - 1):0] j2d_di_ctag;
input [(`FIRE_J2D_P_CMD_WDTH - 1):0] j2d_p_cmd;
input [(`FIRE_J2D_P_ADDR_WDTH - 1):0] j2d_p_addr;
input [(`FIRE_J2D_P_BMSK_WDTH - 1):0] j2d_p_bmsk;
input [(`FIRE_J2D_P_CTAG_WDTH - 1):0] j2d_p_ctag;
// ----- CRM: Req/Cpl Data Port -----
input [(`FIRE_J2D_D_DATA_WDTH - 1):0] j2d_d_data;
input [(`FIRE_J2D_D_DPAR_WDTH - 1):0] j2d_d_data_par;
input [(`FIRE_J2D_P_DATA_WDTH - 1):0] j2d_p_data;
input [(`FIRE_J2D_P_DPAR_WDTH - 1):0] j2d_p_data_par;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CRM: DOU-DMA Status Port -----
output [(`FIRE_DLC_DOU_REL_WDTH - 1):0] k2y_dou_dptr;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CRM: Scoreboard Access Port -----
output [(`FIRE_DLC_PSR_CMD_TYPE_WDTH - 1):0] cl2ps_e_cmd_type;
output [(`FIRE_DLC_PSR_TRN_WDTH - 1):0] cl2ps_e_trn;
output [(`FIRE_DLC_PSR_PIO_DATA_WDTH - 1):0] cl2ps_e_wr_data;
input [(`FIRE_DLC_PSR_DMA_DATA_WDTH - 1):0] ps2cl_e_rd_data;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CTM: Ingress Command Record (ICR) Port -----
input [(`FIRE_DLC_ICR_REC_WDTH - 1):0] pm2cl_rcd;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CRM: Egress Packet Record (EPR) Port -----
output [(`FIRE_DLC_EPR_REC_WDTH - 1):0] cl2cm_rcd;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CTM: Tablewalk Command Record (TCR) Port -----
input [(`FIRE_DLC_TCR_WDTH - 1):0] mm2cl_tcr_rcd;
// ----- CRM: Tablewalk Data Record (TDR) Port -----
output [(`FIRE_DLC_TDR_WDTH - 1):0] cl2mm_tdr_rcd;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CTM: DOU DMA Buffer Release Port -----
input [(`FIRE_DLC_DOU_REL_WDTH - 1):0] rm2cl_bufrel;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CTM: DIU Buffer Manager Port -----
output [(`FIRE_DLC_DMA_RPTR_WDTH - 1):0] cl2tm_dma_rptr;
output [(`FIRE_DLC_INT_RPTR_WDTH - 1):0] cl2tm_int_rptr;
input [(`FIRE_DLC_DMA_WPTR_WDTH - 1):0] tm2cl_dma_wptr;
input [(`FIRE_DLC_PIO_WPTR_WDTH - 1):0] tm2cl_pio_wptr;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CTM: Data Buffer Read Port -----
output [(`FIRE_DLC_CRD_ADDR_WDTH - 1):0] cl2di_addr;
input [(`FIRE_DLC_CRD_DATA_WDTH - 1):0] di2cl_data;
input [(`FIRE_DLC_CRD_BMASK_WDTH - 1):0] di2cl_bmask;
input [(`FIRE_DLC_CRD_DPAR_WDTH - 1):0] di2cl_dpar;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- CRM: DMA Data Buffer Write Port -----
output [(`FIRE_DLC_CDD_DATA_WDTH - 1):0] cl2do_dma_data;
output [(`FIRE_DLC_CDD_DPAR_WDTH - 1):0] cl2do_dma_dpar;
output [(`FIRE_DLC_CDD_ADDR_WDTH - 1):0] cl2do_dma_addr;
// ----- CRM: PIO Data Buffer Write Port -----
output [(`FIRE_DLC_CPD_DATA_WDTH - 1):0] cl2do_pio_data;
output [(`FIRE_DLC_CPD_DPAR_WDTH - 1):0] cl2do_pio_dpar;
output [(`FIRE_DLC_CPD_ADDR_WDTH - 1):0] cl2do_pio_addr;
// --------------------------------------------------------
// --------------------------------------------------------
// ----- Debug Ports -----
output [`FIRE_DBG_DATA_BITS] cl2cr_dbg_a;
output [`FIRE_DBG_DATA_BITS] cl2cr_dbg_b;
input [5:0] cr2cl_dbg_sel_a;
input [5:0] cr2cl_dbg_sel_b;
// ----- Config Packet Setup -----
input [`FIRE_PCIE_BUS_NUM_BITS] cr2cl_bus_num;
// ----- Config Packet Setup -----
// ----- force 1 outstanding non-posted write -----
input im2crm_bc_stall_en;
input im2crm_ilu_stall_en;
// >>>>>>>>>>>>>>>>>>>>>>>>> Data Type Declarations <<<<<<<<<<<<<<<<<<<<<<<<<
// ~~~~~~~~~~~~~~~~~~~~~~~~~ NETS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// --------------------------------------------------------
// CTM-CRM Sub-block Interface
// --------------------------------------------------------
// ----- Unsupported Request Record (URR) Port -----
wire [(`FIRE_DLC_CLU_URR_WDTH - 1):0] ctm2crm_rcd;
// ----- DMA/INT Tag Return Port -----
// ----- Debug Ports -----
wire [`FIRE_DBG_DATA_BITS] ctm_dbg0_bus_a;
wire [`FIRE_DBG_DATA_BITS] ctm_dbg0_bus_b;
wire [`FIRE_DBG_DATA_BITS] ctm_dbg1_bus_a;
wire [`FIRE_DBG_DATA_BITS] ctm_dbg1_bus_b;
wire [`FIRE_DBG_DATA_BITS] crm_dbg0_bus_a;
wire [`FIRE_DBG_DATA_BITS] crm_dbg0_bus_b;
wire [`FIRE_DBG_DATA_BITS] crm_dbg1_bus_a;
wire [`FIRE_DBG_DATA_BITS] crm_dbg1_bus_b;
// >>>>>>>>>>>>>>>>>>>>>>>>> Instantiations <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.d2j_cmd_vld (d2j_cmd_vld),
.d2j_data_par (d2j_data_par),
.d2j_data_vld (d2j_data_vld),
.j2d_d_wrack_tag (j2d_d_wrack_tag),
.j2d_d_wrack_vld (j2d_d_wrack_vld),
.cl2pm_rcd_full (cl2pm_rcd_full),
.pm2cl_rcd_enq (pm2cl_rcd_enq),
.cl2mm_tcr_ack (cl2mm_tcr_ack),
.mm2cl_tcr_rcd (mm2cl_tcr_rcd),
.mm2cl_tcr_req (mm2cl_tcr_req),
// rmu : dou dma buffer rel port
.rm2cl_bufrel (rm2cl_bufrel),
.rm2cl_bufrel_enq (rm2cl_bufrel_enq),
// tmu: diu buffer mgr port
.cl2tm_dma_rptr (cl2tm_dma_rptr),
.cl2tm_int_rptr (cl2tm_int_rptr),
.tm2cl_dma_wptr (tm2cl_dma_wptr),
.tm2cl_pio_wptr (tm2cl_pio_wptr),
.cl2di_addr (cl2di_addr),
.cl2di_rd_en (cl2di_rd_en),
.di2cl_data (di2cl_data),
.di2cl_bmask (di2cl_bmask),
.di2cl_dpar (di2cl_dpar),
.ctm2crm_rcd (ctm2crm_rcd),
.ctm2crm_rcd_enq (ctm2crm_rcd_enq),
.crm2ctm_rcd_deq (crm2ctm_rcd_deq),
// crm: dma tag return port
.crm2ctm_tag (crm2ctm_tag),
.crm2ctm_tag_enq (crm2ctm_tag_enq),
.ctm_dbg0_bus_a (ctm_dbg0_bus_a),
.ctm_dbg0_bus_b (ctm_dbg0_bus_b),
.ctm_dbg1_bus_a (ctm_dbg1_bus_a),
.ctm_dbg1_bus_b (ctm_dbg1_bus_b),
.cr2cl_dbg_sel_a (cr2cl_dbg_sel_a[2:0]),
.cr2cl_dbg_sel_b (cr2cl_dbg_sel_b[2:0]),
.ds2cl_stall (ds2cl_stall)
.j2d_di_cmd (j2d_di_cmd),
.j2d_di_ctag (j2d_di_ctag),
.j2d_di_cmd_vld (j2d_di_cmd_vld),
.j2d_d_data (j2d_d_data),
.j2d_d_data_par (j2d_d_data_par),
.j2d_d_data_err (j2d_d_data_err),
.j2d_d_data_vld (j2d_d_data_vld),
// jbc: pio rd/wr req port
.j2d_p_addr (j2d_p_addr),
.j2d_p_bmsk (j2d_p_bmsk),
.j2d_p_ctag (j2d_p_ctag),
.j2d_p_cmd_vld (j2d_p_cmd_vld),
.j2d_p_data (j2d_p_data),
.j2d_p_data_par (j2d_p_data_par),
.j2d_p_data_vld (j2d_p_data_vld),
// ilu: dou-dma status port
.k2y_dou_dptr (k2y_dou_dptr),
.k2y_dou_err (k2y_dou_err),
.k2y_dou_vld (k2y_dou_vld),
.cl2ps_e_cmd_type (cl2ps_e_cmd_type),
.cl2ps_e_trn (cl2ps_e_trn),
.cl2ps_e_wr_data (cl2ps_e_wr_data),
.cl2ps_e_req (cl2ps_e_req),
.ps2cl_e_rd_data (ps2cl_e_rd_data),
.ps2cl_e_gnt (ps2cl_e_gnt),
.cl2cm_rcd_enq (cl2cm_rcd_enq),
.cm2cl_rcd_full (cm2cl_rcd_full),
.cl2mm_tdr_rcd (cl2mm_tdr_rcd),
.cl2mm_tdr_vld (cl2mm_tdr_vld),
.cl2do_dma_data (cl2do_dma_data),
.cl2do_dma_dpar (cl2do_dma_dpar),
.cl2do_dma_addr (cl2do_dma_addr),
.cl2do_dma_wr (cl2do_dma_wr),
.cl2do_pio_data (cl2do_pio_data),
.cl2do_pio_dpar (cl2do_pio_dpar),
.cl2do_pio_addr (cl2do_pio_addr),
.cl2do_pio_wr (cl2do_pio_wr),
.crm2ctm_rcd_deq (crm2ctm_rcd_deq),
.ctm2crm_rcd (ctm2crm_rcd),
.ctm2crm_rcd_enq (ctm2crm_rcd_enq),
// ctm: dma/int tag return port
.crm2ctm_tag (crm2ctm_tag),
.crm2ctm_tag_enq (crm2ctm_tag_enq),
.crm_dbg0_bus_a (crm_dbg0_bus_a),
.crm_dbg0_bus_b (crm_dbg0_bus_b),
.crm_dbg1_bus_a (crm_dbg1_bus_a),
.crm_dbg1_bus_b (crm_dbg1_bus_b),
.cr2cl_dbg_sel_a (cr2cl_dbg_sel_a[2:0]),
.cr2cl_dbg_sel_b (cr2cl_dbg_sel_b[2:0]),
// cru : config packet setup
.cr2cl_bus_num (cr2cl_bus_num),
// force 1 outstanding non-posted pio write
.p2d_npwr_stall_en (p2d_npwr_stall_en),
.rm2crm_npwr_wrack (rm2crm_npwr_wrack),
.im2crm_bc_stall_en (im2crm_bc_stall_en),
.im2crm_ilu_stall_en (im2crm_ilu_stall_en),
.il2cl_gr_16 (il2cl_gr_16),
// used to keep ehb from filling for stall
.d2j_cmd_bit3 (d2j_cmd[3]),
.d2j_cmd_vld (d2j_cmd_vld)
.cl2cr_dbg_a (cl2cr_dbg_a),
.cl2cr_dbg_b (cl2cr_dbg_b),
.cr2cl_dbg_sel_a (cr2cl_dbg_sel_a[5:3]),
.cr2cl_dbg_sel_b (cr2cl_dbg_sel_b[5:3]),
.ctm_dbg0_bus_a (ctm_dbg0_bus_a),
.ctm_dbg0_bus_b (ctm_dbg0_bus_b),
.ctm_dbg1_bus_a (ctm_dbg1_bus_a),
.ctm_dbg1_bus_b (ctm_dbg1_bus_b),
.crm_dbg0_bus_a (crm_dbg0_bus_a),
.crm_dbg0_bus_b (crm_dbg0_bus_b),
.crm_dbg1_bus_a (crm_dbg1_bus_a),
.crm_dbg1_bus_b (crm_dbg1_bus_b)