OpenCores
URL https://opencores.org/ocsvn/s1_core/s1_core/trunk

Subversion Repositories s1_core

[/] [s1_core/] [trunk/] [hdl/] [rtl/] [sparc_core/] [sparc_ifu_ifqdp.v] - Diff between revs 105 and 113

Show entire file | Details | Blame | View Log

Rev 105 Rev 113
Line 16... Line 16...
// You should have received a copy of the GNU General Public
// You should have received a copy of the GNU General Public
// License along with this work; if not, write to the Free Software
// License along with this work; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
// 
// 
// ========== Copyright Header End ============================================
// ========== Copyright Header End ============================================
 
`ifdef SIMPLY_RISC_TWEAKS
 
`define SIMPLY_RISC_SCANIN .si(0)
 
`else
 
`define SIMPLY_RISC_SCANIN .si()
 
`endif
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
/*
/*
//  Module Name: sparc_ifu_ifqdp
//  Module Name: sparc_ifu_ifqdp
//  Description:
//  Description:
//  The IFQ is the icache fill queue.  This communicates between the
//  The IFQ is the icache fill queue.  This communicates between the
Line 27... Line 32...
//  invalidate requests from the crossbar.
//  invalidate requests from the crossbar.
//
//
*/
*/
 
 
//FPGA_SYN enables all FPGA related modifications
//FPGA_SYN enables all FPGA related modifications
 
`ifdef FPGA_SYN
 
`define FPGA_SYN_CLK_EN
 
`define FPGA_SYN_CLK_DFF
 
`endif
 
 
 
 
 
 
 
 
 
 
////////////////////////////////////////////////////////////////////////
 
// Global header file includes
 
////////////////////////////////////////////////////////////////////////
 
 
 
/*
 
/* ========== Copyright Header Begin ==========================================
 
*
 
* OpenSPARC T1 Processor File: iop.h
 
* 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 ============================================
 
*/
 
//-*- verilog -*-
 
////////////////////////////////////////////////////////////////////////
 
/*
 
//
 
//  Description:        Global header file that contain definitions that
 
//                      are common/shared at the IOP chip level
 
*/
 
////////////////////////////////////////////////////////////////////////
 
 
 
 
 
// Address Map Defines
 
// ===================
 
 
 
 
 
 
 
 
 
// CMP space
 
 
 
 
 
 
 
// IOP space
 
 
 
 
 
 
 
 
 
                               //`define ENET_ING_CSR     8'h84
 
                               //`define ENET_EGR_CMD_CSR 8'h85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// L2 space
 
 
 
 
 
 
 
// More IOP space
 
 
 
 
 
 
 
 
 
 
 
//Cache Crossbar Width and Field Defines
 
//======================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//bits 133:128 are shared by different fields
 
//for different packet types.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//End cache crossbar defines
 
 
 
 
 
// Number of COS supported by EECU 
 
 
 
 
 
 
 
// 
 
// BSC bus sizes
 
// =============
 
//
 
 
 
// General
 
 
 
 
 
 
 
 
 
// CTags
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// reinstated temporarily
 
 
 
 
 
 
 
 
 
// CoS
 
 
 
 
 
 
 
 
 
 
 
 
 
// L2$ Bank
 
 
 
 
 
 
 
// L2$ Req
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// L2$ Ack
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Enet Egress Command Unit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Enet Egress Packet Unit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// This is cleaved in between Egress Datapath Ack's
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Enet Egress Datapath
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// In-Order / Ordered Queue: EEPU
 
// Tag is: TLEN, SOF, EOF, QID = 15
 
 
 
 
 
 
 
 
 
 
 
 
 
// Nack + Tag Info + CTag
 
 
 
 
 
 
 
 
 
// ENET Ingress Queue Management Req
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// ENET Ingress Queue Management Ack
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Enet Ingress Packet Unit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// ENET Ingress Packet Unit Ack
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// In-Order / Ordered Queue: PCI
 
// Tag is: CTAG
 
 
 
 
 
 
 
 
 
 
 
// PCI-X Request
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// PCI_X Acknowledge
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// BSC array sizes
 
//================
 
//
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// ECC syndrome bits per memory element
 
 
 
 
 
 
 
 
 
//
 
// BSC Port Definitions
 
// ====================
 
//
 
// Bits 7 to 4 of curr_port_id
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Number of ports of each type
 
 
 
 
 
// Bits needed to represent above
 
 
 
 
 
// How wide the linked list pointers are
 
// 60b for no payload (2CoS)
 
// 80b for payload (2CoS)
 
 
 
//`define BSC_OBJ_PTR   80
 
//`define BSC_HD1_HI    69
 
//`define BSC_HD1_LO    60
 
//`define BSC_TL1_HI    59
 
//`define BSC_TL1_LO    50
 
//`define BSC_CT1_HI    49
 
//`define BSC_CT1_LO    40
 
//`define BSC_HD0_HI    29
 
//`define BSC_HD0_LO    20
 
//`define BSC_TL0_HI    19
 
//`define BSC_TL0_LO    10
 
//`define BSC_CT0_HI     9
 
//`define BSC_CT0_LO     0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// I2C STATES in DRAMctl
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// IOB defines
 
// ===========
 
//
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//`define IOB_INT_STAT_WIDTH   32
 
//`define IOB_INT_STAT_HI      31
 
//`define IOB_INT_STAT_LO       0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// fixme - double check address mapping
 
// CREG in `IOB_INT_CSR space
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// CREG in `IOB_MAN_CSR space
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Address map for TAP access of SPARC ASI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// CIOP UCB Bus Width
 
// ==================
 
//
 
//`define IOB_EECU_WIDTH       16  // ethernet egress command
 
//`define EECU_IOB_WIDTH       16
 
 
 
//`define IOB_NRAM_WIDTH       16  // NRAM (RLDRAM previously)
 
//`define NRAM_IOB_WIDTH        4
 
 
 
 
 
 
 
 
 
//`define IOB_ENET_ING_WIDTH   32  // ethernet ingress
 
//`define ENET_ING_IOB_WIDTH    8
 
 
 
//`define IOB_ENET_EGR_WIDTH    4  // ethernet egress
 
//`define ENET_EGR_IOB_WIDTH    4
 
 
 
//`define IOB_ENET_MAC_WIDTH    4  // ethernet MAC
 
//`define ENET_MAC_IOB_WIDTH    4
 
 
 
 
 
 
 
 
 
//`define IOB_BSC_WIDTH         4  // BSC
 
//`define BSC_IOB_WIDTH         4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//`define IOB_CLSP_WIDTH        4  // clk spine unit
 
//`define CLSP_IOB_WIDTH        4
 
 
 
 
 
 
 
 
 
 
 
//
 
// CIOP UCB Buf ID Type
 
// ====================
 
//
 
 
 
 
 
 
 
//
 
// Interrupt Device ID
 
// ===================
 
//
 
// Caution: DUMMY_DEV_ID has to be 9 bit wide
 
//          for fields to line up properly in the IOB.
 
 
 
 
 
 
 
//
 
// Soft Error related definitions 
 
// ==============================
 
//
 
 
 
 
 
 
 
//
 
// CMP clock
 
// =========
 
//
 
 
 
 
 
 
 
 
 
//
 
// NRAM/IO Interface
 
// =================
 
//
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// NRAM/ENET Interface
 
// ===================
 
//
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// IO/FCRAM Interface
 
// ==================
 
//
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// PCI Interface
 
// ==================
 
// Load/store size encodings
 
// -------------------------
 
// Size encoding
 
// 000 - byte
 
// 001 - half-word
 
// 010 - word
 
// 011 - double-word
 
// 100 - quad
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// JBI<->SCTAG Interface
 
// =======================
 
// Outbound Header Format
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Inbound Header Format
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//
 
// JBI->IOB Mondo Header Format
 
// ============================
 
//
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// JBI->IOB Mondo Bus Width/Cycle
 
// ==============================
 
// Cycle  1 Header[15:8]
 
// Cycle  2 Header[ 7:0]
 
// Cycle  3 J_AD[127:120]
 
// Cycle  4 J_AD[119:112]
 
// .....
 
// Cycle 18 J_AD[  7:  0]
 
 
 
 
 
/*
 
/* ========== Copyright Header Begin ==========================================
 
*
 
* OpenSPARC T1 Processor File: ifu.h
 
* 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 ============================================
 
*/
 
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/*
// Global header file includes
//
////////////////////////////////////////////////////////////////////////
//  Module Name: ifu.h
 
//  Description:
 
//  All ifu defines
 
*/
 
 
 
//--------------------------------------------
 
// Icache Values in IFU::ICD/ICV/ICT/FDP/IFQDP
 
//--------------------------------------------
 
// Set Values
 
 
 
// IC_IDX_HI = log(icache_size/4ways) - 1
 
 
 
 
 
// !!IMPORTANT!! a change to IC_LINE_SZ will mean a change to the code as
 
//   well.  Unfortunately this has not been properly parametrized.
 
//   Changing the IC_LINE_SZ param alone is *not* enough.
 
 
 
 
 
// !!IMPORTANT!! a change to IC_TAG_HI will mean a change to the code as
 
//   well.  Changing the IC_TAG_HI param alone is *not* enough to
 
//   change the PA range. 
 
// highest bit of PA
 
 
 
 
 
 
 
// Derived Values
 
// 4095
 
 
 
 
 
// number of entries - 1 = 511
 
 
 
 
 
// 12
 
 
 
 
 
// 28
 
 
 
 
 
// 7
 
 
 
 
 
// tags for all 4 ways + parity
 
// 116
 
 
 
 
 
// 115
 
 
 
 
 
 
 
//----------------------------------------------------------------------
 
// For thread scheduler in IFU::DTU::SWL
 
//----------------------------------------------------------------------
 
// thread states:  (thr_state[4:0])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// thread configuration register bit fields
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//----------------------------------------------------------------------
 
// For MIL fsm in IFU::IFQ
 
//----------------------------------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//---------------------------------------------------
 
// Interrupt Block
 
//---------------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//-------------------------------------
 
// IFQ
 
//-------------------------------------
 
// valid bit plus ifill
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//`ifdef SPARC_L2_64B
 
 
 
 
 
//`else
 
//`define BANK_ID_HI 8
 
//`define BANK_ID_LO 7
 
//`endif
 
 
 
//`define CPX_INV_PA_HI  116
 
//`define CPX_INV_PA_LO  112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//----------------------------------------
 
// IFU Traps
 
//----------------------------------------
 
// precise
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// disrupting
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
`include "iop.h"
 
`include "ifu.h"
 
 
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Local header file includes / local defines
// Local header file includes / local defines
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
 
 
Line 1094... Line 82...
 
 
   input         rclk,
   input         rclk,
           se,
           se,
           si;
           si;
 
 
   input [145-1:0] lsu_ifu_cpxpkt_i1;
   input [`CPX_WIDTH-1:0] lsu_ifu_cpxpkt_i1;
   input [17:0]   lsu_ifu_asi_addr;
   input [17:0]   lsu_ifu_asi_addr;
   input [47:0]   lsu_ifu_stxa_data;
   input [47:0]   lsu_ifu_stxa_data;
 
 
   input [39:10]  itlb_ifq_paddr_s;
   input [39:10]  itlb_ifq_paddr_s;
   input [9:2]    fdp_ifq_paddr_f;
   input [9:2]    fdp_ifq_paddr_f;
Line 1146... Line 134...
   output [51:0] ifu_lsu_pcxpkt_e;
   output [51:0] ifu_lsu_pcxpkt_e;
 
 
   output [32:0] ifq_fdp_fill_inst;
   output [32:0] ifq_fdp_fill_inst;
   output [47:0] ifq_erb_asidata_i2;
   output [47:0] ifq_erb_asidata_i2;
 
 
   output [145-1:0] ifd_inv_ifqop_i2;
   output [`CPX_WIDTH-1:0] ifd_inv_ifqop_i2;
 
 
   output [11:2]  ifq_icd_index_bf;   // index for wr and bist
   output [`IC_IDX_HI:2]  ifq_icd_index_bf;   // index for wr and bist
 
 
   output [135:0]         ifq_icd_wrdata_i2;
   output [135:0]         ifq_icd_wrdata_i2;
   output [(39 - 11):0]  ifq_ict_wrtag_f;      // fill tag
   output [`IC_TAG_SZ:0]  ifq_ict_wrtag_f;      // fill tag
//   output [`IC_TAG_SZ-1:0] ifq_erb_wrtag_f;      // tag w/o parity
//   output [`IC_TAG_SZ-1:0] ifq_erb_wrtag_f;      // tag w/o parity
   output [11:4]   ifq_erb_wrindex_f;
   output [`IC_IDX_HI:4]   ifq_erb_wrindex_f;
   output [1:0]            ifq_icd_wrway_bf;     // fill data way
   output [1:0]            ifq_icd_wrway_bf;     // fill data way
 
 
   output [3:0]           ifd_ifc_milhit_s;     // if an Imiss hits in MIL
   output [3:0]           ifd_ifc_milhit_s;     // if an Imiss hits in MIL
//   output [7:0]           ifd_ifc_mil_repway_s;
//   output [7:0]           ifd_ifc_mil_repway_s;
 
 
Line 1166... Line 154...
   output [1:0]           ifd_ifc_instoffset2;   // to select inst to TIR
   output [1:0]           ifd_ifc_instoffset2;   // to select inst to TIR
   output [1:0]           ifd_ifc_instoffset3;   // to select inst to TIR
   output [1:0]           ifd_ifc_instoffset3;   // to select inst to TIR
 
 
   output [1:0]            ifd_ifc_cpxthr_nxt;
   output [1:0]            ifd_ifc_cpxthr_nxt;
   output [3:0]            ifd_ifc_cpxreq_nxt;    // cpx reqtype + vbit
   output [3:0]            ifd_ifc_cpxreq_nxt;    // cpx reqtype + vbit
   output [(143 - 140 + 1):0] ifd_ifc_cpxreq_i1;    // cpx reqtype + vbit
   output [`CPX_RQ_SIZE:0] ifd_ifc_cpxreq_i1;    // cpx reqtype + vbit
 
 
 
 
   output [2:0]            ifd_ifc_destid0,
   output [2:0]            ifd_ifc_destid0,
                                       ifd_ifc_destid1,
                                       ifd_ifc_destid1,
                                       ifd_ifc_destid2,
                                       ifd_ifc_destid2,
Line 1231... Line 219...
                                       bist_addr_i2;
                                       bist_addr_i2;
 
 
   wire [42:4]             wraddr_f;
   wire [42:4]             wraddr_f;
 
 
 
 
   wire [145-1:0]   inq_cpxpkt_i1,   // output from inq
   wire [`CPX_WIDTH-1:0]   inq_cpxpkt_i1,   // output from inq
//                                           inq_cpxpkt_nxt,
//                                           inq_cpxpkt_nxt,
                                             stxa_data_pkt,
                                             stxa_data_pkt,
                           fwd_data_pkt,
                           fwd_data_pkt,
                                             ifqop_i1,
                                             ifqop_i1,
                                             ifqop_i2;        // ifq op currently being processed
                                             ifqop_i2;        // ifq op currently being processed
Line 1264... Line 252...
   //----------------------------------------------------------------------
   //----------------------------------------------------------------------
   // Instruction Miss - Fill Request Datapath
   // Instruction Miss - Fill Request Datapath
   //----------------------------------------------------------------------
   //----------------------------------------------------------------------
 
 
   // new set of flops
   // new set of flops
   dff #(8) pcs_reg(.din (fdp_ifq_paddr_f[9:2]),
   dff_s #(8) pcs_reg(.din (fdp_ifq_paddr_f[9:2]),
                    .q   (lcl_paddr_s[9:2]),
                    .q   (lcl_paddr_s[9:2]),
                    .clk (clk), .se(se), .si(), .so());
                    .clk (clk), .se(se), `SIMPLY_RISC_SCANIN, .so());
 
 
 
 
   // bits 1:0 are floating
   // bits 1:0 are floating
   assign  imiss_paddr_s = {itlb_ifq_paddr_s[39:10],
   assign  imiss_paddr_s = {itlb_ifq_paddr_s[39:10],
                            lcl_paddr_s[9:2],
                            lcl_paddr_s[9:2],
Line 1309... Line 297...
//                                        mil_entry1[41:40],
//                                        mil_entry1[41:40],
//                                        mil_entry0[41:40]};
//                                        mil_entry0[41:40]};
 
 
 
 
   // calculate tag parity
   // calculate tag parity
   sparc_ifu_par32 tag_par(.in  ({{(32 - (39 - 11)){1'b0}},
   sparc_ifu_par32 tag_par(.in  ({{`ICT_FILL_BITS{1'b0}},
                                  imiss_paddr_s[39:(11 + 1)]}),
                                  imiss_paddr_s[`IC_TAG_HI:`IC_TAG_LO]}),
                                             .out (tag_par_s));
                                             .out (tag_par_s));
 
 
 
 
   // Missed Instruction List
   // Missed Instruction List
   // 43    - NOT cacheable
   // 43    - NOT cacheable
Line 1344... Line 332...
//                                                      .in0  (mil_entry3), 
//                                                      .in0  (mil_entry3), 
//                                                      .in1  (newmil_entry_s),
//                                                      .in1  (newmil_entry_s),
//                                                      .sel  (ifc_ifd_ldmil_sel_new[3]));
//                                                      .sel  (ifc_ifd_ldmil_sel_new[3]));
 
 
   wire    clk_mil0;
   wire    clk_mil0;
 
`ifdef FPGA_SYN_CLK_EN
 
`else
 
   bw_u1_ckenbuf_6x  ckenmil0(.rclk (rclk),
 
                              .clk  (clk_mil0),
 
                              .en_l (~ifc_ifd_ldmil_sel_new[0]),
 
                              .tm_l (~se));
 
`endif
   wire    clk_mil1;
   wire    clk_mil1;
 
`ifdef FPGA_SYN_CLK_EN
 
`else
 
   bw_u1_ckenbuf_6x  ckenmil1(.rclk (rclk),
 
                              .clk  (clk_mil1),
 
                              .en_l (~ifc_ifd_ldmil_sel_new[1]),
 
                              .tm_l (~se));
 
`endif
   wire    clk_mil2;
   wire    clk_mil2;
 
`ifdef FPGA_SYN_CLK_EN
 
`else
 
   bw_u1_ckenbuf_6x  ckenmil2(.rclk (rclk),
 
                              .clk  (clk_mil2),
 
                              .en_l (~ifc_ifd_ldmil_sel_new[2]),
 
                              .tm_l (~se));
 
`endif
   wire    clk_mil3;
   wire    clk_mil3;
 
`ifdef FPGA_SYN_CLK_EN
 
`else
 
   bw_u1_ckenbuf_6x  ckenmil3(.rclk (rclk),
 
                              .clk  (clk_mil3),
 
                              .en_l (~ifc_ifd_ldmil_sel_new[3]),
 
                              .tm_l (~se));
 
`endif
 
 
 
 
 
`ifdef FPGA_SYN_CLK_DFF
 
   dffe_s #(41)   mil0(.din  (newmil_entry_s),
 
 
 
 
 
 
 
 
 
 
 
 
   dffe #(41)   mil0(.din  (newmil_entry_s),
 
                                .en (~(~ifc_ifd_ldmil_sel_new[0])), .clk(rclk),
                                .en (~(~ifc_ifd_ldmil_sel_new[0])), .clk(rclk),
                                .q    (mil_entry0),
                                .q    (mil_entry0),
                                .se   (se), .si(), .so());
                                .se   (se), `SIMPLY_RISC_SCANIN, .so());
 
`else
 
   dff_s #(41)   mil0(.din  (newmil_entry_s),
 
                                .clk  (clk_mil0),
 
                                .q    (mil_entry0),
 
                                .se   (se), `SIMPLY_RISC_SCANIN, .so());
 
`endif
 
 
 
 
   dffe #(41)   mil1(.din (newmil_entry_s),
`ifdef FPGA_SYN_CLK_DFF
 
   dffe_s #(41)   mil1(.din (newmil_entry_s),
                                .en (~(~ifc_ifd_ldmil_sel_new[1])), .clk(rclk),
                                .en (~(~ifc_ifd_ldmil_sel_new[1])), .clk(rclk),
                                .q   (mil_entry1),
                                .q   (mil_entry1),
                                .se  (se), .si(), .so());
                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`else
 
   dff_s #(41)   mil1(.din (newmil_entry_s),
 
                                .clk (clk_mil1),
 
                                .q   (mil_entry1),
 
                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`endif
 
 
 
 
   dffe #(41)   mil2(.din (newmil_entry_s),
`ifdef FPGA_SYN_CLK_DFF
 
   dffe_s #(41)   mil2(.din (newmil_entry_s),
                                .en (~(~ifc_ifd_ldmil_sel_new[2])), .clk(rclk),
                                .en (~(~ifc_ifd_ldmil_sel_new[2])), .clk(rclk),
                                .q   (mil_entry2),
                                .q   (mil_entry2),
                                .se  (se), .si(), .so());
                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`else
 
   dff_s #(41)   mil2(.din (newmil_entry_s),
 
                                .clk (clk_mil2),
 
                                .q   (mil_entry2),
 
                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`endif
 
 
 
 
   dffe #(41)   mil3(.din (newmil_entry_s),
`ifdef FPGA_SYN_CLK_DFF
 
   dffe_s #(41)   mil3(.din (newmil_entry_s),
                                .en (~(~ifc_ifd_ldmil_sel_new[3])), .clk(rclk),
                                .en (~(~ifc_ifd_ldmil_sel_new[3])), .clk(rclk),
                                .q   (mil_entry3),
                                .q   (mil_entry3),
                                .se  (se), .si(), .so());
                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`else
 
   dff_s #(41)   mil3(.din (newmil_entry_s),
 
                                .clk (clk_mil3),
 
                                .q   (mil_entry3),
 
                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`endif
 
 
   assign  ifd_ifc_newdestid_s = {imiss_paddr_s[39],
   assign  ifd_ifc_newdestid_s = {imiss_paddr_s[39],
                                                          imiss_paddr_s[7:6]};
                                                          imiss_paddr_s[`BANK_ID_HI:`BANK_ID_LO]};
   assign  ifd_ifc_destid0 = {mil_entry0[39],
   assign  ifd_ifc_destid0 = {mil_entry0[39],
                                                mil_entry0[7:6]};
                                                mil_entry0[`BANK_ID_HI:`BANK_ID_LO]};
   assign  ifd_ifc_destid1 = {mil_entry1[39],
   assign  ifd_ifc_destid1 = {mil_entry1[39],
                                                mil_entry1[7:6]};
                                                mil_entry1[`BANK_ID_HI:`BANK_ID_LO]};
   assign  ifd_ifc_destid2 = {mil_entry2[39],
   assign  ifd_ifc_destid2 = {mil_entry2[39],
                                                mil_entry2[7:6]};
                                                mil_entry2[`BANK_ID_HI:`BANK_ID_LO]};
   assign  ifd_ifc_destid3 = {mil_entry3[39],
   assign  ifd_ifc_destid3 = {mil_entry3[39],
                                                mil_entry3[7:6]};
                                                mil_entry3[`BANK_ID_HI:`BANK_ID_LO]};
 
 
   assign  ifd_ifc_instoffset0 = mil_entry0[3:2];
   assign  ifd_ifc_instoffset0 = mil_entry0[3:2];
   assign  ifd_ifc_instoffset1 = mil_entry1[3:2];
   assign  ifd_ifc_instoffset1 = mil_entry1[3:2];
   assign  ifd_ifc_instoffset2 = mil_entry2[3:2];
   assign  ifd_ifc_instoffset2 = mil_entry2[3:2];
   assign  ifd_ifc_instoffset3 = mil_entry3[3:2];
   assign  ifd_ifc_instoffset3 = mil_entry3[3:2];
Line 1471... Line 459...
 
 
   assign  pcxreq_d[42:5] = mil_pcxreq_d[42:5];
   assign  pcxreq_d[42:5] = mil_pcxreq_d[42:5];
   assign  pcxreq_d[4:2] = ifc_ifd_pcxline_adj_d[4:2];
   assign  pcxreq_d[4:2] = ifc_ifd_pcxline_adj_d[4:2];
//   assign  pcxreq_d[1:0] = mil_pcxreq_d[1:0];  // dont need this
//   assign  pcxreq_d[1:0] = mil_pcxreq_d[1:0];  // dont need this
 
 
   dff #(41) pcxreq_reg (.din  (pcxreq_d),
   dff_s #(41) pcxreq_reg (.din  (pcxreq_d),
                                            .clk  (clk),
                                            .clk  (clk),
                                            .q    (pcxreq_e),
                                            .q    (pcxreq_e),
                                            .se   (se), .si(), .so());
                                            .se   (se), `SIMPLY_RISC_SCANIN, .so());
 
 
// CHANGE to regular dff   
// CHANGE to regular dff   
//   dffe #(44) pcxreq_reg (.din  (pcxreq_d),
//   dffe #(44) pcxreq_reg (.din  (pcxreq_d),
//                                          .clk  (clk),
//                                          .clk  (clk),
//                                          .q    (pcxreq_e),
//                                          .q    (pcxreq_e),
//                          .en   (ifc_ifd_nxtpcx_sel_new_d),
//                          .en   (ifc_ifd_nxtpcx_sel_new_d),
//                                          .se   (se), .si(), .so());
//                                          .se   (se), `SIMPLY_RISC_SCANIN, .so());
 
 
   // PCX Req Reg -- req type is 5 bits
   // PCX Req Reg -- req type is 5 bits
   assign   ifu_lsu_pcxpkt_e = {ifc_ifd_reqvalid_e,   // 51    - valid
   assign   ifu_lsu_pcxpkt_e = {ifc_ifd_reqvalid_e,   // 51    - valid
                                                  ifc_ifd_errinv_e,     // 50 - inv all ways
                                                  ifc_ifd_errinv_e,     // 50 - inv all ways
                                ifc_ifd_uncached_e,   // 49 - not cacheable
                                ifc_ifd_uncached_e,   // 49 - not cacheable
                                                  {5'b10000},          // 48:44 - req type
                                                  {`IMISS_RQ},          // 48:44 - req type
                                                  pcxreq_e[41:40],      // 43:42 - rep way
                                                  pcxreq_e[41:40],      // 43:42 - rep way
                                                  ifc_ifd_thrid_e[1:0], // 41:40 - thrid
                                                  ifc_ifd_thrid_e[1:0], // 41:40 - thrid
                                                  pcxreq_e[39:2],       // 39:2  - word address
                                                  pcxreq_e[39:2],       // 39:2  - word address
                                                  2'b0};                // force to zero
                                                  2'b0};                // force to zero
 
 
Line 1542... Line 530...
//                                              .in0  (wraddr_f),
//                                              .in0  (wraddr_f),
//                                              .in1  (icaddr_i2[42:4]),
//                                              .in1  (icaddr_i2[42:4]),
//                                              .sel  (ifc_ifd_ifqadv_i2));
//                                              .sel  (ifc_ifd_ifqadv_i2));
 
 
 
 
   dff #(39) wraddr_reg(.din  (icaddr_i2[42:4]),
   dff_s #(39) wraddr_reg(.din  (icaddr_i2[42:4]),
                                    .clk  (clk),
                                    .clk  (clk),
                                    .q    (wraddr_f[42:4]),
                                    .q    (wraddr_f[42:4]),
                                    .se   (se), .si(), .so());
                                    .se   (se), `SIMPLY_RISC_SCANIN, .so());
 
 
   // tag = parity bit + `IC_TAG_SZ bits of address
   // tag = parity bit + `IC_TAG_SZ bits of address
   assign  ifq_erb_wrindex_f = wraddr_f[11:4];
   assign  ifq_erb_wrindex_f = wraddr_f[`IC_IDX_HI:4];
   assign  ifq_ict_wrtag_f = {wraddr_f[42], wraddr_f[39:(11 + 1)]};
   assign  ifq_ict_wrtag_f = {wraddr_f[42], wraddr_f[`IC_TAG_HI:`IC_TAG_LO]};
 
 
   assign  ifq_icd_index_bf = icaddr_i2[11:2];
   assign  ifq_icd_index_bf = icaddr_i2[`IC_IDX_HI:2];
   assign  ifq_icd_wrway_bf = icaddr_i2[41:40];
   assign  ifq_icd_wrway_bf = icaddr_i2[41:40];
 
 
   //----------------------------------------------------------------------
   //----------------------------------------------------------------------
   // Fill Return Data
   // Fill Return Data
   //----------------------------------------------------------------------
   //----------------------------------------------------------------------
Line 1568... Line 556...
//                                                           .in0 (inq_cpxpkt_i1),
//                                                           .in0 (inq_cpxpkt_i1),
//                                                           .in1 (lsu_ifu_cpxpkt_i1), 
//                                                           .in1 (lsu_ifu_cpxpkt_i1), 
//                                                           .sel (ifc_ifd_ld_inq_i1));
//                                                           .sel (ifc_ifd_ld_inq_i1));
 
 
   wire    clk_ibuf1;
   wire    clk_ibuf1;
 
`ifdef FPGA_SYN_CLK_EN
 
`else
 
   bw_u1_ckenbuf_6x  ckenibuf(.rclk (rclk),
 
                              .clk  (clk_ibuf1),
 
                              .en_l (~ifc_ifd_ld_inq_i1),
 
                              .tm_l (~se));
 
`endif
 
 
 
`ifdef FPGA_SYN_CLK_DFF
 
   dffe_s #(`CPX_WIDTH) ibuf(.din (lsu_ifu_cpxpkt_i1),
 
 
 
 
 
 
 
 
 
 
 
 
   dffe #(145) ibuf(.din (lsu_ifu_cpxpkt_i1),
 
                                          .q   (inq_cpxpkt_i1),
                                          .q   (inq_cpxpkt_i1),
                                          .en (~(~ifc_ifd_ld_inq_i1)), .clk(rclk),
                                          .en (~(~ifc_ifd_ld_inq_i1)), .clk(rclk),
                                          .se  (se), .si(), .so());
                                          .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`else
 
   dff_s #(`CPX_WIDTH) ibuf(.din (lsu_ifu_cpxpkt_i1),
 
                                          .q   (inq_cpxpkt_i1),
 
                                          .clk (clk_ibuf1),
 
                                          .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`endif
 
 
   assign  ifd_ifc_cpxreq_i1 = {inq_cpxpkt_i1[144],
   assign  ifd_ifc_cpxreq_i1 = {inq_cpxpkt_i1[`CPX_VLD],
                                                  inq_cpxpkt_i1[143:140]};
                                                  inq_cpxpkt_i1[`CPX_REQFIELD]};
 
 
   // ifq operand bypass mux
   // ifq operand bypass mux
   // fill pkt is 128d+2w+2t+3iw+1v+1nc+4r = 140
   // fill pkt is 128d+2w+2t+3iw+1v+1nc+4r = 140
   dp_mux4ds  #(145)  ifq_bypmux(.dout (ifqop_i1),
   dp_mux4ds  #(`CPX_WIDTH)  ifq_bypmux(.dout (ifqop_i1),
                                                              .in0 (fwd_data_pkt),
                                                              .in0 (fwd_data_pkt),
                                                              .in1 (inq_cpxpkt_i1),
                                                              .in1 (inq_cpxpkt_i1),
                                                              .in2 (stxa_data_pkt),
                                                              .in2 (stxa_data_pkt),
                                                              .in3 (lsu_ifu_cpxpkt_i1),
                                                              .in3 (lsu_ifu_cpxpkt_i1),
                                                              .sel0_l (ifc_ifd_ifqbyp_sel_fwd_l),
                                                              .sel0_l (ifc_ifd_ifqbyp_sel_fwd_l),
                                                              .sel1_l (ifc_ifd_ifqbyp_sel_inq_l),
                                                              .sel1_l (ifc_ifd_ifqbyp_sel_inq_l),
                                                              .sel2_l (ifc_ifd_ifqbyp_sel_asi_l),
                                                              .sel2_l (ifc_ifd_ifqbyp_sel_asi_l),
                                                              .sel3_l (ifc_ifd_ifqbyp_sel_lsu_l));
                                                              .sel3_l (ifc_ifd_ifqbyp_sel_lsu_l));
 
 
   wire    clk_ifqop;
   wire    clk_ifqop;
 
`ifdef FPGA_SYN_CLK_EN
 
`else
 
   bw_u1_ckenbuf_6x  ckenifop(.rclk (rclk),
 
                              .clk  (clk_ifqop),
 
                              .en_l (ifc_ifd_ifqbyp_en_l),
 
                              .tm_l (~se));
 
`endif
 
 
 
`ifdef FPGA_SYN_CLK_DFF
 
   dffe_s #(`CPX_WIDTH)  ifqop_reg(.din (ifqop_i1),
 
 
 
 
 
 
 
 
 
 
 
 
   dffe #(145)  ifqop_reg(.din (ifqop_i1),
 
                                                .q   (ifqop_i2),
                                                .q   (ifqop_i2),
                                                .en (~(ifc_ifd_ifqbyp_en_l)), .clk(rclk),
                                                .en (~(ifc_ifd_ifqbyp_en_l)), .clk(rclk),
                                                .se  (se), .si(), .so());
                                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`else
 
   dff_s #(`CPX_WIDTH)  ifqop_reg(.din (ifqop_i1),
 
                                                .q   (ifqop_i2),
 
                                                .clk (clk_ifqop),
 
                                                .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
`endif
   assign  ifd_inv_ifqop_i2 = ifqop_i2;
   assign  ifd_inv_ifqop_i2 = ifqop_i2;
 
 
   // switch condition pre decode
   // switch condition pre decode
   sparc_ifu_swpla  swpla0(.in  (ifqop_i2[31:0]),
   sparc_ifu_swpla  swpla0(.in  (ifqop_i2[31:0]),
                                             .out (swc_i2[0]));
                                             .out (swc_i2[0]));
Line 1664... Line 652...
   // write data to icache
   // write data to icache
   assign ifq_icd_wrdata_i2 = icdata_i2;
   assign ifq_icd_wrdata_i2 = icdata_i2;
 
 
 
 
   // very critical
   // very critical
   assign ifd_ifc_cpxreq_nxt   = ifqop_i1[143:140];
   assign ifd_ifc_cpxreq_nxt   = ifqop_i1[`CPX_REQFIELD];
   assign ifd_ifc_cpxthr_nxt   = ifqop_i1[135:134];
   assign ifd_ifc_cpxthr_nxt   = ifqop_i1[`CPX_THRFIELD];
 
 
   assign ifd_ifc_cpxvld_i2   = ifqop_i2[144];
   assign ifd_ifc_cpxvld_i2   = ifqop_i2[`CPX_VLD];
   assign ifd_ifc_4bpkt_i2    = ifqop_i2[130];
   assign ifd_ifc_4bpkt_i2    = ifqop_i2[`CPX_IF4B];
   assign ifd_ifc_cpxce_i2    = ifqop_i2[137];
   assign ifd_ifc_cpxce_i2    = ifqop_i2[`CPX_ERR_LO];
   assign ifd_ifc_cpxue_i2    = ifqop_i2[(137 + 1)];
   assign ifd_ifc_cpxue_i2    = ifqop_i2[(`CPX_ERR_LO + 1)];
   assign ifd_ifc_cpxms_i2    = ifqop_i2[(137 + 2)];
   assign ifd_ifc_cpxms_i2    = ifqop_i2[(`CPX_ERR_LO + 2)];
   assign ifd_ifc_cpxnc_i2    = ifqop_i2[136];
   assign ifd_ifc_cpxnc_i2    = ifqop_i2[`CPX_NC];
   assign ifd_ifc_fwd2ic_i2   = ifqop_i2[103];
   assign ifd_ifc_fwd2ic_i2   = ifqop_i2[103];
 
 
   // instr sel mux to write to thread inst regsiter in S stage
   // instr sel mux to write to thread inst regsiter in S stage
   // instr is always BIG ENDIAN
   // instr is always BIG ENDIAN
   dp_mux4ds  #(33)  fillinst_mux(.dout (ifq_fdp_fill_inst),
   dp_mux4ds  #(33)  fillinst_mux(.dout (ifq_fdp_fill_inst),
Line 1694... Line 682...
//`else
//`else
//   always @ (ifq_fdp_fill_inst or ifd_ifc_cpxreq_i2)
//   always @ (ifq_fdp_fill_inst or ifd_ifc_cpxreq_i2)
//     if (((^ifq_fdp_fill_inst[32:0]) == 1'bx) && (ifd_ifc_cpxreq_i2 == `CPX_IFILLPKT))
//     if (((^ifq_fdp_fill_inst[32:0]) == 1'bx) && (ifd_ifc_cpxreq_i2 == `CPX_IFILLPKT))
//       begin
//       begin
//          $display("ifqdp.v: Imiss Return val = %h\n", ifqop_i2);
//          $display("ifqdp.v: Imiss Return val = %h\n", ifqop_i2);
//          $display("IFQCPX", "Error: X's detected in Imiss Return Inst %h", 
//          $error("IFQCPX", "Error: X's detected in Imiss Return Inst %h", 
//                 ifq_fdp_fill_inst[31:0]);
//                 ifq_fdp_fill_inst[31:0]);
//       end
//       end
//`endif
//`endif
   // synopsys translate_on
   // synopsys translate_on
 
 
Line 1710... Line 698...
 
 
   //----------------------------------------------------------------------
   //----------------------------------------------------------------------
   // ASI Access
   // ASI Access
   //----------------------------------------------------------------------
   //----------------------------------------------------------------------
   // mux stxa pkt into the cpx
   // mux stxa pkt into the cpx
   assign  stxa_data_pkt[144] = 1'b0;
   assign  stxa_data_pkt[`CPX_VLD] = 1'b0;
   // vbits and parity are muxed into the cpxreq
   // vbits and parity are muxed into the cpxreq
   assign  stxa_data_pkt[143:140] = {1'b1, lsu_ifu_stxa_data[34:32]};
   assign  stxa_data_pkt[`CPX_REQFIELD] = {1'b1, lsu_ifu_stxa_data[34:32]};
//   assign  stxa_data_pkt[`CPX_THRFIELD] = lsu_ifu_asi_thrid[1:0];
//   assign  stxa_data_pkt[`CPX_THRFIELD] = lsu_ifu_asi_thrid[1:0];
   assign  stxa_data_pkt[135:134] = 2'b0;
   assign  stxa_data_pkt[`CPX_THRFIELD] = 2'b0;
   // use parity to insert error in icache inst or tag
   // use parity to insert error in icache inst or tag
   assign  stxa_data_pkt[(137 + 1)] = lsu_ifu_stxa_data[32];
   assign  stxa_data_pkt[(`CPX_ERR_LO + 1)] = lsu_ifu_stxa_data[32];
   assign  stxa_data_pkt[127:0] = {4{lsu_ifu_stxa_data[31:0]}};
   assign  stxa_data_pkt[127:0] = {4{lsu_ifu_stxa_data[31:0]}};
 
 
   // other bits need to be tied off
   // other bits need to be tied off
   assign  stxa_data_pkt[133:128] = 6'b0;
   assign  stxa_data_pkt[133:128] = 6'b0;
   assign  stxa_data_pkt[137:136] = 2'b0;
   assign  stxa_data_pkt[137:136] = 2'b0;
   assign  stxa_data_pkt[139] = 1'b0;
   assign  stxa_data_pkt[139] = 1'b0;
 
 
   // format fwd data pkt in a similar way
   // format fwd data pkt in a similar way
   assign  fwd_data_pkt[144:(137 + 2)] = ifqop_i2[144:(137 + 2)];
   assign  fwd_data_pkt[`CPX_VLD:(`CPX_ERR_LO + 2)] = ifqop_i2[`CPX_VLD:(`CPX_ERR_LO + 2)];
   assign  fwd_data_pkt[(137 + 1)] = ifqop_i2[32];
   assign  fwd_data_pkt[(`CPX_ERR_LO + 1)] = ifqop_i2[32];
   assign  fwd_data_pkt[137:128] = ifqop_i2[137:128];
   assign  fwd_data_pkt[`CPX_ERR_LO:128] = ifqop_i2[`CPX_ERR_LO:128];
   assign  fwd_data_pkt[127:0] = {4{ifqop_i2[31:0]}};
   assign  fwd_data_pkt[127:0] = {4{ifqop_i2[31:0]}};
 
 
 
 
 
 
   dff #(16) stxa_ff(.din (lsu_ifu_stxa_data[47:32]),
   dff_s #(16) stxa_ff(.din (lsu_ifu_stxa_data[47:32]),
                                 .q   (ifq_erb_asidata_i2[47:32]),
                                 .q   (ifq_erb_asidata_i2[47:32]),
                                 .clk (clk), .se(se), .si(), .so());
                                 .clk (clk), .se(se), `SIMPLY_RISC_SCANIN, .so());
   assign  ifq_erb_asidata_i2[31:0] = ifqop_i2[31:0];
   assign  ifq_erb_asidata_i2[31:0] = ifqop_i2[31:0];
 
 
   // va[63:32] is truncated
   // va[63:32] is truncated
   // In this architecture we only need va[17:0]
   // In this architecture we only need va[17:0]
   // rest of the bits ar ehere only for the address range check
   // rest of the bits ar ehere only for the address range check
Line 1756... Line 744...
   assign asi_va_i1 = {asi_fwd_index[13:12],
   assign asi_va_i1 = {asi_fwd_index[13:12],
                       lsu_ifu_asi_addr[15:13],
                       lsu_ifu_asi_addr[15:13],
                       asi_fwd_index[11:2],
                       asi_fwd_index[11:2],
                       lsu_ifu_asi_addr[2:0]};
                       lsu_ifu_asi_addr[2:0]};
 
 
   dff #(18) asi_addr_reg(.din (asi_va_i1[17:0]),  // 15:13 is not used
   dff_s #(18) asi_addr_reg(.din (asi_va_i1[17:0]),  // 15:13 is not used
                                            .q   (asi_va_i2[17:0]),
                                            .q   (asi_va_i2[17:0]),
                                            .clk (clk),
                                            .clk (clk),
                                            .se  (se), .si(), .so());
                                            .se  (se), `SIMPLY_RISC_SCANIN, .so());
 
 
   // 16b zero cmp: leave out bit 3!! (imask is 0x8)
   // 16b zero cmp: leave out bit 3!! (imask is 0x8)
   assign  ifd_ifc_asi_vachklo_i2 = (|asi_va_i2[16:4]) | (|asi_va_i2[2:0]);
   assign  ifd_ifc_asi_vachklo_i2 = (|asi_va_i2[16:4]) | (|asi_va_i2[2:0]);
 
 
   // mux in ifqop and asi_va_i2 to create new asi va?
   // mux in ifqop and asi_va_i2 to create new asi va?

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.