550 lines
23 KiB
Systemverilog
550 lines
23 KiB
Systemverilog
//********************************************************************************
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// Copyright 2020 Western Digital Corporation or its affiliates.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//********************************************************************************
|
|
|
|
typedef struct packed {
|
|
logic TEST1;
|
|
logic RME;
|
|
logic [3:0] RM;
|
|
|
|
logic LS;
|
|
logic DS;
|
|
logic SD;
|
|
logic TEST_RNM;
|
|
logic BC1;
|
|
logic BC2;
|
|
} iccm_ext_in_pkt_t;
|
|
|
|
typedef struct packed {
|
|
logic TEST1;
|
|
logic RME;
|
|
logic [3:0] RM;
|
|
logic LS;
|
|
logic DS;
|
|
logic SD;
|
|
logic TEST_RNM;
|
|
logic BC1;
|
|
logic BC2;
|
|
} dccm_ext_in_pkt_t;
|
|
|
|
|
|
typedef struct packed {
|
|
logic TEST1;
|
|
logic RME;
|
|
logic [3:0] RM;
|
|
logic LS;
|
|
logic DS;
|
|
logic SD;
|
|
logic TEST_RNM;
|
|
logic BC1;
|
|
logic BC2;
|
|
} ic_data_ext_in_pkt_t;
|
|
|
|
|
|
typedef struct packed {
|
|
logic TEST1;
|
|
logic RME;
|
|
logic [3:0] RM;
|
|
logic LS;
|
|
logic DS;
|
|
logic SD;
|
|
logic TEST_RNM;
|
|
logic BC1;
|
|
logic BC2;
|
|
} ic_tag_ext_in_pkt_t;
|
|
module mem#(
|
|
parameter ICACHE_BEAT_BITS,
|
|
parameter ICCM_BITS,
|
|
parameter ICACHE_NUM_WAYS,
|
|
parameter DCCM_BYTE_WIDTH,
|
|
parameter ICCM_BANK_INDEX_LO,
|
|
parameter ICACHE_BANK_BITS,
|
|
parameter DCCM_BITS,
|
|
parameter ICACHE_BEAT_ADDR_HI,
|
|
parameter ICCM_INDEX_BITS,
|
|
parameter ICCM_BANK_HI,
|
|
parameter ICACHE_BANKS_WAY,
|
|
parameter ICACHE_INDEX_HI,
|
|
parameter DCCM_NUM_BANKS,
|
|
parameter ICACHE_BANK_HI,
|
|
parameter ICACHE_BANK_LO,
|
|
parameter DCCM_ENABLE= 'b1,
|
|
parameter ICACHE_TAG_LO,
|
|
parameter ICACHE_DATA_INDEX_LO,
|
|
parameter ICCM_NUM_BANKS,
|
|
parameter ICACHE_ECC,
|
|
parameter ICACHE_ENABLE= 'b1,
|
|
parameter DCCM_BANK_BITS,
|
|
parameter ICCM_ENABLE= 'b1,
|
|
parameter ICCM_BANK_BITS,
|
|
parameter ICACHE_TAG_DEPTH,
|
|
parameter ICACHE_WAYPACK,
|
|
parameter DCCM_SIZE,
|
|
parameter DCCM_FDATA_WIDTH,
|
|
parameter ICACHE_TAG_INDEX_LO,
|
|
parameter ICACHE_DATA_DEPTH,
|
|
parameter DCCM_WIDTH_BITS,
|
|
parameter ICACHE_NUM_BYPASS,
|
|
parameter ICACHE_TAG_NUM_BYPASS,
|
|
parameter ICACHE_TAG_NUM_BYPASS_WIDTH,
|
|
parameter ICACHE_TAG_BYPASS_ENABLE,
|
|
parameter ICACHE_NUM_BYPASS_WIDTH,
|
|
parameter ICACHE_BYPASS_ENABLE,
|
|
parameter ICACHE_LN_SZ
|
|
)
|
|
|
|
(
|
|
input logic clk,
|
|
input logic rst_l,
|
|
input logic dccm_clk_override,
|
|
input logic icm_clk_override,
|
|
input logic dec_tlu_core_ecc_disable,
|
|
|
|
//DCCM ports
|
|
input logic dccm_wren,
|
|
input logic dccm_rden,
|
|
input logic [DCCM_BITS-1:0] dccm_wr_addr_lo,
|
|
input logic [DCCM_BITS-1:0] dccm_wr_addr_hi,
|
|
input logic [DCCM_BITS-1:0] dccm_rd_addr_lo,
|
|
input logic [DCCM_BITS-1:0] dccm_rd_addr_hi,
|
|
input logic [DCCM_FDATA_WIDTH-1:0] dccm_wr_data_lo,
|
|
input logic [DCCM_FDATA_WIDTH-1:0] dccm_wr_data_hi,
|
|
|
|
|
|
output logic [DCCM_FDATA_WIDTH-1:0] dccm_rd_data_lo,
|
|
output logic [DCCM_FDATA_WIDTH-1:0] dccm_rd_data_hi,
|
|
|
|
//`ifdef DCCM_ENABLE
|
|
//input dccm_ext_in_pkt_t [DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,
|
|
input logic dccm_ext_in_pkt_TEST1_0,
|
|
input logic dccm_ext_in_pkt_RME_0,
|
|
input logic [3:0] dccm_ext_in_pkt_RM_0,
|
|
input logic dccm_ext_in_pkt_LS_0,
|
|
input logic dccm_ext_in_pkt_DS_0,
|
|
input logic dccm_ext_in_pkt_SD_0,
|
|
input logic dccm_ext_in_pkt_TEST_RNM_0,
|
|
input logic dccm_ext_in_pkt_BC1_0,
|
|
input logic dccm_ext_in_pkt_BC2_0,
|
|
|
|
input logic dccm_ext_in_pkt_TEST1_1,
|
|
input logic dccm_ext_in_pkt_RME_1,
|
|
input logic [3:0] dccm_ext_in_pkt_RM_1,
|
|
input logic dccm_ext_in_pkt_LS_1,
|
|
input logic dccm_ext_in_pkt_DS_1,
|
|
input logic dccm_ext_in_pkt_SD_1,
|
|
input logic dccm_ext_in_pkt_TEST_RNM_1,
|
|
input logic dccm_ext_in_pkt_BC1_1,
|
|
input logic dccm_ext_in_pkt_BC2_1,
|
|
|
|
input logic dccm_ext_in_pkt_TEST1_2,
|
|
input logic dccm_ext_in_pkt_RME_2,
|
|
input logic [3:0] dccm_ext_in_pkt_RM_2,
|
|
input logic dccm_ext_in_pkt_LS_2,
|
|
input logic dccm_ext_in_pkt_DS_2,
|
|
input logic dccm_ext_in_pkt_SD_2,
|
|
input logic dccm_ext_in_pkt_TEST_RNM_2,
|
|
input logic dccm_ext_in_pkt_BC1_2,
|
|
input logic dccm_ext_in_pkt_BC2_2,
|
|
|
|
input logic dccm_ext_in_pkt_TEST1_3,
|
|
input logic dccm_ext_in_pkt_RME_3,
|
|
input logic [3:0] dccm_ext_in_pkt_RM_3,
|
|
input logic dccm_ext_in_pkt_LS_3,
|
|
input logic dccm_ext_in_pkt_DS_3,
|
|
input logic dccm_ext_in_pkt_SD_3,
|
|
input logic dccm_ext_in_pkt_TEST_RNM_3,
|
|
input logic dccm_ext_in_pkt_BC1_3,
|
|
input logic dccm_ext_in_pkt_BC2_3,
|
|
|
|
//`endif
|
|
|
|
//ICCM ports
|
|
input logic iccm_ext_in_pkt_TEST1_0,
|
|
input logic iccm_ext_in_pkt_RME_0,
|
|
input logic [3:0] iccm_ext_in_pkt_RM_0,
|
|
input logic iccm_ext_in_pkt_LS_0,
|
|
input logic iccm_ext_in_pkt_DS_0,
|
|
input logic iccm_ext_in_pkt_SD_0,
|
|
input logic iccm_ext_in_pkt_TEST_RNM_0,
|
|
input logic iccm_ext_in_pkt_BC1_0,
|
|
input logic iccm_ext_in_pkt_BC2_0,
|
|
|
|
input logic iccm_ext_in_pkt_TEST1_1,
|
|
input logic iccm_ext_in_pkt_RME_1,
|
|
input logic [3:0] iccm_ext_in_pkt_RM_1,
|
|
input logic iccm_ext_in_pkt_LS_1,
|
|
input logic iccm_ext_in_pkt_DS_1,
|
|
input logic iccm_ext_in_pkt_SD_1,
|
|
input logic iccm_ext_in_pkt_TEST_RNM_1,
|
|
input logic iccm_ext_in_pkt_BC1_1,
|
|
input logic iccm_ext_in_pkt_BC2_1,
|
|
|
|
input logic iccm_ext_in_pkt_TEST1_2,
|
|
input logic iccm_ext_in_pkt_RME_2,
|
|
input logic [3:0] iccm_ext_in_pkt_RM_2,
|
|
input logic iccm_ext_in_pkt_LS_2,
|
|
input logic iccm_ext_in_pkt_DS_2,
|
|
input logic iccm_ext_in_pkt_SD_2,
|
|
input logic iccm_ext_in_pkt_TEST_RNM_2,
|
|
input logic iccm_ext_in_pkt_BC1_2,
|
|
input logic iccm_ext_in_pkt_BC2_2,
|
|
|
|
input logic iccm_ext_in_pkt_TEST1_3,
|
|
input logic iccm_ext_in_pkt_RME_3,
|
|
input logic [3:0] iccm_ext_in_pkt_RM_3,
|
|
input logic iccm_ext_in_pkt_LS_3,
|
|
input logic iccm_ext_in_pkt_DS_3,
|
|
input logic iccm_ext_in_pkt_SD_3,
|
|
input logic iccm_ext_in_pkt_TEST_RNM_3,
|
|
input logic iccm_ext_in_pkt_BC1_3,
|
|
input logic iccm_ext_in_pkt_BC2_3,
|
|
|
|
input logic [ICCM_BITS-1:1] iccm_rw_addr,
|
|
input logic iccm_buf_correct_ecc, // ICCM is doing a single bit error correct cycle
|
|
input logic iccm_correction_state, // ICCM is doing a single bit error correct cycle
|
|
input logic iccm_wren,
|
|
input logic iccm_rden,
|
|
input logic [2:0] iccm_wr_size,
|
|
input logic [77:0] iccm_wr_data,
|
|
|
|
output logic [63:0] iccm_rd_data,
|
|
output logic [77:0] iccm_rd_data_ecc,
|
|
|
|
// Icache and Itag Ports
|
|
|
|
input logic [31:1] ic_rw_addr,
|
|
input logic [ICACHE_NUM_WAYS-1:0] ic_tag_valid,
|
|
input logic [ICACHE_NUM_WAYS-1:0] ic_wr_en,
|
|
input logic ic_rd_en,
|
|
input logic [63:0] ic_premux_data, // Premux data to be muxed with each way of the Icache.
|
|
input logic ic_sel_premux_data, // Premux data sel
|
|
// input ic_data_ext_in_pkt_t [ICACHE_NUM_WAYS-1:0][ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,
|
|
input logic ic_tag_ext_in_pkt_TEST1_0,
|
|
input logic ic_tag_ext_in_pkt_RME_0,
|
|
input logic [3:0] ic_tag_ext_in_pkt_RM_0,
|
|
input logic ic_tag_ext_in_pkt_LS_0,
|
|
input logic ic_tag_ext_in_pkt_DS_0,
|
|
input logic ic_tag_ext_in_pkt_SD_0,
|
|
input logic ic_tag_ext_in_pkt_TEST_RNM_0,
|
|
input logic ic_tag_ext_in_pkt_BC1_0,
|
|
input logic ic_tag_ext_in_pkt_BC2_0,
|
|
|
|
input logic ic_tag_ext_in_pkt_TEST1_1,
|
|
input logic ic_tag_ext_in_pkt_RME_1,
|
|
input logic [3:0] ic_tag_ext_in_pkt_RM_1,
|
|
input logic ic_tag_ext_in_pkt_LS_1,
|
|
input logic ic_tag_ext_in_pkt_DS_1,
|
|
input logic ic_tag_ext_in_pkt_SD_1,
|
|
input logic ic_tag_ext_in_pkt_TEST_RNM_1,
|
|
input logic ic_tag_ext_in_pkt_BC1_1,
|
|
input logic ic_tag_ext_in_pkt_BC2_1,
|
|
|
|
input logic ic_data_ext_in_pkt_0_TEST1_0,
|
|
input logic ic_data_ext_in_pkt_0_RME_0,
|
|
input logic [3:0] ic_data_ext_in_pkt_0_RM_0,
|
|
input logic ic_data_ext_in_pkt_0_LS_0,
|
|
input logic ic_data_ext_in_pkt_0_DS_0,
|
|
input logic ic_data_ext_in_pkt_0_SD_0,
|
|
input logic ic_data_ext_in_pkt_0_TEST_RNM_0,
|
|
input logic ic_data_ext_in_pkt_0_BC1_0,
|
|
input logic ic_data_ext_in_pkt_0_BC2_0,
|
|
|
|
input logic ic_data_ext_in_pkt_0_TEST1_1,
|
|
input logic ic_data_ext_in_pkt_0_RME_1,
|
|
input logic [3:0] ic_data_ext_in_pkt_0_RM_1,
|
|
input logic ic_data_ext_in_pkt_0_LS_1,
|
|
input logic ic_data_ext_in_pkt_0_DS_1,
|
|
input logic ic_data_ext_in_pkt_0_SD_1,
|
|
input logic ic_data_ext_in_pkt_0_TEST_RNM_1,
|
|
input logic ic_data_ext_in_pkt_0_BC1_1,
|
|
input logic ic_data_ext_in_pkt_0_BC2_1,
|
|
|
|
input logic ic_data_ext_in_pkt_1_TEST1_0,
|
|
input logic ic_data_ext_in_pkt_1_RME_0,
|
|
input logic [3:0] ic_data_ext_in_pkt_1_RM_0,
|
|
input logic ic_data_ext_in_pkt_1_LS_0,
|
|
input logic ic_data_ext_in_pkt_1_DS_0,
|
|
input logic ic_data_ext_in_pkt_1_SD_0,
|
|
input logic ic_data_ext_in_pkt_1_TEST_RNM_0,
|
|
input logic ic_data_ext_in_pkt_1_BC1_0,
|
|
input logic ic_data_ext_in_pkt_1_BC2_0,
|
|
|
|
input logic ic_data_ext_in_pkt_1_TEST1_1,
|
|
input logic ic_data_ext_in_pkt_1_RME_1,
|
|
input logic [3:0] ic_data_ext_in_pkt_1_RM_1,
|
|
input logic ic_data_ext_in_pkt_1_LS_1,
|
|
input logic ic_data_ext_in_pkt_1_DS_1,
|
|
input logic ic_data_ext_in_pkt_1_SD_1,
|
|
input logic ic_data_ext_in_pkt_1_TEST_RNM_1,
|
|
input logic ic_data_ext_in_pkt_1_BC1_1,
|
|
input logic ic_data_ext_in_pkt_1_BC2_1,
|
|
|
|
// input logic [ICACHE_BANKS_WAY-1:0][70:0] ic_wr_data, // Data to fill to the Icache. With ECC
|
|
input logic [70:0] ic_wr_data_0, // Data to fill to the Icache. With ECC
|
|
input logic [70:0] ic_wr_data_1, // Data to fill to the Icache. With ECC
|
|
input logic [70:0] ic_debug_wr_data, // Debug wr cache.
|
|
output logic [70:0] ic_debug_rd_data , // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
|
|
input logic [ICACHE_INDEX_HI:3] ic_debug_addr, // Read/Write addresss to the Icache.
|
|
input logic ic_debug_rd_en, // Icache debug rd
|
|
input logic ic_debug_wr_en, // Icache debug wr
|
|
input logic ic_debug_tag_array, // Debug tag array
|
|
input logic [ICACHE_NUM_WAYS-1:0] ic_debug_way, // Debug way. Rd or Wr.
|
|
|
|
output logic [63:0] ic_rd_data , // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
|
|
output logic [25:0] ic_tag_debug_rd_data,// Debug icache tag.
|
|
|
|
|
|
output logic [ICACHE_BANKS_WAY-1:0] ic_eccerr, // ecc error per bank
|
|
output logic [ICACHE_BANKS_WAY-1:0] ic_parerr, // parity error per bank
|
|
output logic [ICACHE_NUM_WAYS-1:0] ic_rd_hit,
|
|
output logic ic_tag_perr, // Icache Tag parity error
|
|
|
|
|
|
input logic scan_mode
|
|
|
|
);
|
|
|
|
iccm_ext_in_pkt_t [ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt;
|
|
dccm_ext_in_pkt_t [DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt;
|
|
ic_data_ext_in_pkt_t [ICACHE_NUM_WAYS-1:0][ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt;
|
|
ic_tag_ext_in_pkt_t [ICACHE_NUM_WAYS-1:0] ic_tag_ext_in_pkt;
|
|
|
|
|
|
assign dccm_ext_in_pkt[0].TEST1 = dccm_ext_in_pkt_TEST1_0;
|
|
assign dccm_ext_in_pkt[0].RME = dccm_ext_in_pkt_RME_0;
|
|
assign dccm_ext_in_pkt[0].RM = dccm_ext_in_pkt_RM_0[3:0];
|
|
assign dccm_ext_in_pkt[0].LS = dccm_ext_in_pkt_LS_0;
|
|
assign dccm_ext_in_pkt[0].DS = dccm_ext_in_pkt_DS_0;
|
|
assign dccm_ext_in_pkt[0].SD = dccm_ext_in_pkt_SD_0;
|
|
assign dccm_ext_in_pkt[0].TEST_RNM = dccm_ext_in_pkt_TEST_RNM_0;
|
|
assign dccm_ext_in_pkt[0].BC1 = dccm_ext_in_pkt_BC1_0;
|
|
assign dccm_ext_in_pkt[0].BC2 = dccm_ext_in_pkt_BC2_0;
|
|
|
|
assign dccm_ext_in_pkt[1].TEST1 = dccm_ext_in_pkt_TEST1_1;
|
|
assign dccm_ext_in_pkt[1].RME = dccm_ext_in_pkt_RME_1;
|
|
assign dccm_ext_in_pkt[1].RM = dccm_ext_in_pkt_RM_1[3:0];
|
|
assign dccm_ext_in_pkt[1].LS = dccm_ext_in_pkt_LS_1;
|
|
assign dccm_ext_in_pkt[1].DS = dccm_ext_in_pkt_DS_1;
|
|
assign dccm_ext_in_pkt[1].SD = dccm_ext_in_pkt_SD_1;
|
|
assign dccm_ext_in_pkt[1].TEST_RNM = dccm_ext_in_pkt_TEST_RNM_1;
|
|
assign dccm_ext_in_pkt[1].BC1 = dccm_ext_in_pkt_BC1_1;
|
|
assign dccm_ext_in_pkt[1].BC2 = dccm_ext_in_pkt_BC2_1;
|
|
|
|
|
|
assign dccm_ext_in_pkt[2].TEST1 = dccm_ext_in_pkt_TEST1_2;
|
|
assign dccm_ext_in_pkt[2].RME = dccm_ext_in_pkt_RME_2;
|
|
assign dccm_ext_in_pkt[2].RM = dccm_ext_in_pkt_RM_2[3:0];
|
|
assign dccm_ext_in_pkt[2].LS = dccm_ext_in_pkt_LS_2;
|
|
assign dccm_ext_in_pkt[2].DS = dccm_ext_in_pkt_DS_2;
|
|
assign dccm_ext_in_pkt[2].SD = dccm_ext_in_pkt_SD_2;
|
|
assign dccm_ext_in_pkt[2].TEST_RNM = dccm_ext_in_pkt_TEST_RNM_2;
|
|
assign dccm_ext_in_pkt[2].BC1 = dccm_ext_in_pkt_BC1_2;
|
|
assign dccm_ext_in_pkt[2].BC2 = dccm_ext_in_pkt_BC2_2;
|
|
|
|
assign dccm_ext_in_pkt[3].TEST1 = dccm_ext_in_pkt_TEST1_3;
|
|
assign dccm_ext_in_pkt[3].RME = dccm_ext_in_pkt_RME_3;
|
|
assign dccm_ext_in_pkt[3].RM = dccm_ext_in_pkt_RM_3[3:0];
|
|
assign dccm_ext_in_pkt[3].LS = dccm_ext_in_pkt_LS_3;
|
|
assign dccm_ext_in_pkt[3].DS = dccm_ext_in_pkt_DS_3;
|
|
assign dccm_ext_in_pkt[3].SD = dccm_ext_in_pkt_SD_3;
|
|
assign dccm_ext_in_pkt[3].TEST_RNM = dccm_ext_in_pkt_TEST_RNM_3;
|
|
assign dccm_ext_in_pkt[3].BC1 = dccm_ext_in_pkt_BC1_3;
|
|
assign dccm_ext_in_pkt[3].BC2 = dccm_ext_in_pkt_BC2_3;
|
|
|
|
assign iccm_ext_in_pkt[0].TEST1 = iccm_ext_in_pkt_TEST1_0;
|
|
assign iccm_ext_in_pkt[0].RME = iccm_ext_in_pkt_RME_0;
|
|
assign iccm_ext_in_pkt[0].RM = iccm_ext_in_pkt_RM_0[3:0];
|
|
assign iccm_ext_in_pkt[0].LS = iccm_ext_in_pkt_LS_0;
|
|
assign iccm_ext_in_pkt[0].DS = iccm_ext_in_pkt_DS_0;
|
|
assign iccm_ext_in_pkt[0].SD = iccm_ext_in_pkt_SD_0;
|
|
assign iccm_ext_in_pkt[0].TEST_RNM = iccm_ext_in_pkt_TEST_RNM_0;
|
|
assign iccm_ext_in_pkt[0].BC1 = iccm_ext_in_pkt_BC1_0;
|
|
assign iccm_ext_in_pkt[0].BC2 = iccm_ext_in_pkt_BC2_0;
|
|
|
|
assign iccm_ext_in_pkt[1].TEST1 = iccm_ext_in_pkt_TEST1_1;
|
|
assign iccm_ext_in_pkt[1].RME = iccm_ext_in_pkt_RME_1;
|
|
assign iccm_ext_in_pkt[1].RM = iccm_ext_in_pkt_RM_1[3:0];
|
|
assign iccm_ext_in_pkt[1].LS = iccm_ext_in_pkt_LS_1;
|
|
assign iccm_ext_in_pkt[1].DS = iccm_ext_in_pkt_DS_1;
|
|
assign iccm_ext_in_pkt[1].SD = iccm_ext_in_pkt_SD_1;
|
|
assign iccm_ext_in_pkt[1].TEST_RNM = iccm_ext_in_pkt_TEST_RNM_1;
|
|
assign iccm_ext_in_pkt[1].BC1 = iccm_ext_in_pkt_BC1_1;
|
|
assign iccm_ext_in_pkt[1].BC2 = iccm_ext_in_pkt_BC2_1;
|
|
|
|
|
|
assign iccm_ext_in_pkt[2].TEST1 = iccm_ext_in_pkt_TEST1_2;
|
|
assign iccm_ext_in_pkt[2].RME = iccm_ext_in_pkt_RME_2;
|
|
assign iccm_ext_in_pkt[2].RM = iccm_ext_in_pkt_RM_2[3:0];
|
|
assign iccm_ext_in_pkt[2].LS = iccm_ext_in_pkt_LS_2;
|
|
assign iccm_ext_in_pkt[2].DS = iccm_ext_in_pkt_DS_2;
|
|
assign iccm_ext_in_pkt[2].SD = iccm_ext_in_pkt_SD_2;
|
|
assign iccm_ext_in_pkt[2].TEST_RNM = iccm_ext_in_pkt_TEST_RNM_2;
|
|
assign iccm_ext_in_pkt[2].BC1 = iccm_ext_in_pkt_BC1_2;
|
|
assign iccm_ext_in_pkt[2].BC2 = iccm_ext_in_pkt_BC2_2;
|
|
|
|
assign iccm_ext_in_pkt[3].TEST1 = iccm_ext_in_pkt_TEST1_3;
|
|
assign iccm_ext_in_pkt[3].RME = iccm_ext_in_pkt_RME_3;
|
|
assign iccm_ext_in_pkt[3].RM = iccm_ext_in_pkt_RM_3[3:0];
|
|
assign iccm_ext_in_pkt[3].LS = iccm_ext_in_pkt_LS_3;
|
|
assign iccm_ext_in_pkt[3].DS = iccm_ext_in_pkt_DS_3;
|
|
assign iccm_ext_in_pkt[3].SD = iccm_ext_in_pkt_SD_3;
|
|
assign iccm_ext_in_pkt[3].TEST_RNM = iccm_ext_in_pkt_TEST_RNM_3;
|
|
assign iccm_ext_in_pkt[3].BC1 = iccm_ext_in_pkt_BC1_3;
|
|
assign iccm_ext_in_pkt[3].BC2 = iccm_ext_in_pkt_BC2_3;
|
|
|
|
|
|
assign ic_tag_ext_in_pkt[0].TEST1 = ic_tag_ext_in_pkt_TEST1_0;
|
|
assign ic_tag_ext_in_pkt[0].RME = ic_tag_ext_in_pkt_RME_0;
|
|
assign ic_tag_ext_in_pkt[0].RM = ic_tag_ext_in_pkt_RM_0[3:0];
|
|
assign ic_tag_ext_in_pkt[0].LS = ic_tag_ext_in_pkt_LS_0;
|
|
assign ic_tag_ext_in_pkt[0].DS = ic_tag_ext_in_pkt_DS_0;
|
|
assign ic_tag_ext_in_pkt[0].SD = ic_tag_ext_in_pkt_SD_0;
|
|
assign ic_tag_ext_in_pkt[0].TEST_RNM = ic_tag_ext_in_pkt_TEST_RNM_0;
|
|
assign ic_tag_ext_in_pkt[0].BC1 = ic_tag_ext_in_pkt_BC1_0;
|
|
assign ic_tag_ext_in_pkt[0].BC2 = ic_tag_ext_in_pkt_BC2_0;
|
|
|
|
assign ic_tag_ext_in_pkt[1].TEST1 = ic_tag_ext_in_pkt_TEST1_1;
|
|
assign ic_tag_ext_in_pkt[1].RME = ic_tag_ext_in_pkt_RME_1;
|
|
assign ic_tag_ext_in_pkt[1].RM = ic_tag_ext_in_pkt_RM_1[3:0];
|
|
assign ic_tag_ext_in_pkt[1].LS = ic_tag_ext_in_pkt_LS_1;
|
|
assign ic_tag_ext_in_pkt[1].DS = ic_tag_ext_in_pkt_DS_1;
|
|
assign ic_tag_ext_in_pkt[1].SD = ic_tag_ext_in_pkt_SD_1;
|
|
assign ic_tag_ext_in_pkt[1].TEST_RNM = ic_tag_ext_in_pkt_TEST_RNM_1;
|
|
assign ic_tag_ext_in_pkt[1].BC1 = ic_tag_ext_in_pkt_BC1_1;
|
|
assign ic_tag_ext_in_pkt[1].BC2 = ic_tag_ext_in_pkt_BC2_1;
|
|
|
|
// PKT connection
|
|
assign ic_data_ext_in_pkt[0][0].TEST1 = ic_data_ext_in_pkt_0_TEST1_0;
|
|
assign ic_data_ext_in_pkt[0][0].RME = ic_data_ext_in_pkt_0_RME_0;
|
|
assign ic_data_ext_in_pkt[0][0].RM = ic_data_ext_in_pkt_0_RM_0[3:0];
|
|
assign ic_data_ext_in_pkt[0][0].LS = ic_data_ext_in_pkt_0_LS_0;
|
|
assign ic_data_ext_in_pkt[0][0].DS = ic_data_ext_in_pkt_0_DS_0;
|
|
assign ic_data_ext_in_pkt[0][0].SD = ic_data_ext_in_pkt_0_SD_0;
|
|
assign ic_data_ext_in_pkt[0][0].TEST_RNM = ic_data_ext_in_pkt_0_TEST_RNM_0;
|
|
assign ic_data_ext_in_pkt[0][0].BC1 = ic_data_ext_in_pkt_0_BC1_0;
|
|
assign ic_data_ext_in_pkt[0][0].BC2 = ic_data_ext_in_pkt_0_BC2_0;
|
|
|
|
assign ic_data_ext_in_pkt[0][1].TEST1 = ic_data_ext_in_pkt_1_TEST1_1;
|
|
assign ic_data_ext_in_pkt[0][1].RME = ic_data_ext_in_pkt_1_RME_1;
|
|
assign ic_data_ext_in_pkt[0][1].RM = ic_data_ext_in_pkt_1_RM_1[3:0];
|
|
assign ic_data_ext_in_pkt[0][1].LS = ic_data_ext_in_pkt_1_LS_1;
|
|
assign ic_data_ext_in_pkt[0][1].DS = ic_data_ext_in_pkt_1_DS_1;
|
|
assign ic_data_ext_in_pkt[0][1].SD = ic_data_ext_in_pkt_1_SD_1;
|
|
assign ic_data_ext_in_pkt[0][1].TEST_RNM = ic_data_ext_in_pkt_1_TEST_RNM_1;
|
|
assign ic_data_ext_in_pkt[0][1].BC1 = ic_data_ext_in_pkt_1_BC1_1;
|
|
assign ic_data_ext_in_pkt[0][1].BC2 = ic_data_ext_in_pkt_1_BC2_1;
|
|
|
|
assign ic_data_ext_in_pkt[1][0].TEST1 = ic_data_ext_in_pkt_1_TEST1_0;
|
|
assign ic_data_ext_in_pkt[1][0].RME = ic_data_ext_in_pkt_1_RME_0;
|
|
assign ic_data_ext_in_pkt[1][0].RM = ic_data_ext_in_pkt_1_RM_0[3:0];
|
|
assign ic_data_ext_in_pkt[1][0].LS = ic_data_ext_in_pkt_1_LS_0;
|
|
assign ic_data_ext_in_pkt[1][0].DS = ic_data_ext_in_pkt_1_DS_0;
|
|
assign ic_data_ext_in_pkt[1][0].SD = ic_data_ext_in_pkt_1_SD_0;
|
|
assign ic_data_ext_in_pkt[1][0].TEST_RNM = ic_data_ext_in_pkt_1_TEST_RNM_0;
|
|
assign ic_data_ext_in_pkt[1][0].BC1 = ic_data_ext_in_pkt_1_BC1_0;
|
|
assign ic_data_ext_in_pkt[1][0].BC2 = ic_data_ext_in_pkt_1_BC2_0;
|
|
|
|
assign ic_data_ext_in_pkt[1][1].TEST1 = ic_data_ext_in_pkt_1_TEST1_1;
|
|
assign ic_data_ext_in_pkt[1][1].RME = ic_data_ext_in_pkt_1_RME_1;
|
|
assign ic_data_ext_in_pkt[1][1].RM = ic_data_ext_in_pkt_1_RM_1[3:0];
|
|
assign ic_data_ext_in_pkt[1][1].LS = ic_data_ext_in_pkt_1_LS_1;
|
|
assign ic_data_ext_in_pkt[1][1].DS = ic_data_ext_in_pkt_1_DS_1;
|
|
assign ic_data_ext_in_pkt[1][1].SD = ic_data_ext_in_pkt_1_SD_1;
|
|
assign ic_data_ext_in_pkt[1][1].TEST_RNM = ic_data_ext_in_pkt_1_TEST_RNM_1;
|
|
assign ic_data_ext_in_pkt[1][1].BC1 = ic_data_ext_in_pkt_1_BC1_1;
|
|
assign ic_data_ext_in_pkt[1][1].BC2 = ic_data_ext_in_pkt_1_BC2_1;
|
|
|
|
wire active_clk;
|
|
|
|
rvoclkhdr active_cg ( .en(1'b1), .l1clk(active_clk), .* );
|
|
|
|
// DCCM Instantiation
|
|
if (DCCM_ENABLE == 1) begin: Gen_dccm_enable
|
|
lsu_dccm_mem #(
|
|
.DCCM_BYTE_WIDTH(DCCM_BYTE_WIDTH),
|
|
.DCCM_BITS(DCCM_BITS),
|
|
.DCCM_NUM_BANKS(DCCM_NUM_BANKS),
|
|
.DCCM_BANK_BITS(DCCM_BANK_BITS),
|
|
.DCCM_SIZE(DCCM_SIZE),
|
|
.DCCM_FDATA_WIDTH(DCCM_FDATA_WIDTH),
|
|
.DCCM_WIDTH_BITS(DCCM_WIDTH_BITS)) dccm (
|
|
.clk_override(dccm_clk_override),
|
|
.*
|
|
);
|
|
end else begin: Gen_dccm_disable
|
|
assign dccm_rd_data_lo = '0;
|
|
assign dccm_rd_data_hi = '0;
|
|
end
|
|
|
|
if ( ICACHE_ENABLE ) begin: icache
|
|
ifu_ic_mem #(
|
|
.ICACHE_BEAT_BITS(ICACHE_BEAT_BITS),
|
|
.ICACHE_NUM_WAYS(ICACHE_NUM_WAYS),
|
|
.ICACHE_BANK_BITS(ICACHE_BANK_BITS),
|
|
.ICACHE_BEAT_ADDR_HI(ICACHE_BEAT_ADDR_HI),
|
|
.ICACHE_BANKS_WAY(ICACHE_BANKS_WAY),
|
|
.ICACHE_INDEX_HI(ICACHE_INDEX_HI),
|
|
.ICACHE_BANK_HI(ICACHE_BANK_HI),
|
|
.ICACHE_BANK_LO(ICACHE_BANK_LO),
|
|
.ICACHE_TAG_LO(ICACHE_TAG_LO),
|
|
.ICACHE_DATA_INDEX_LO(ICACHE_DATA_INDEX_LO),
|
|
.ICACHE_ECC(ICACHE_ECC),
|
|
.ICACHE_TAG_DEPTH(ICACHE_TAG_DEPTH),
|
|
.ICACHE_WAYPACK(ICACHE_WAYPACK),
|
|
.ICACHE_TAG_INDEX_LO(ICACHE_TAG_INDEX_LO),
|
|
.ICACHE_DATA_DEPTH(ICACHE_DATA_DEPTH),
|
|
.ICACHE_TAG_NUM_BYPASS(ICACHE_TAG_NUM_BYPASS),
|
|
.ICACHE_TAG_NUM_BYPASS_WIDTH(ICACHE_TAG_NUM_BYPASS_WIDTH),
|
|
.ICACHE_TAG_BYPASS_ENABLE(ICACHE_TAG_BYPASS_ENABLE),
|
|
.ICACHE_NUM_BYPASS_WIDTH(ICACHE_NUM_BYPASS_WIDTH),
|
|
.ICACHE_BYPASS_ENABLE(ICACHE_BYPASS_ENABLE),
|
|
.ICACHE_NUM_BYPASS(ICACHE_NUM_BYPASS),
|
|
.ICACHE_LN_SZ(ICACHE_LN_SZ)) icm (
|
|
.clk_override(icm_clk_override),
|
|
.*
|
|
);
|
|
end
|
|
else begin
|
|
assign ic_rd_hit[ICACHE_NUM_WAYS-1:0] = '0;
|
|
assign ic_tag_perr = '0 ;
|
|
assign ic_rd_data = '0 ;
|
|
assign ic_tag_debug_rd_data = '0 ;
|
|
end // else: !if( ICACHE_ENABLE )
|
|
|
|
|
|
|
|
if (ICCM_ENABLE) begin : iccm
|
|
ifu_iccm_mem #(
|
|
.ICCM_BITS(ICCM_BITS),
|
|
.ICCM_BANK_INDEX_LO(ICCM_BANK_INDEX_LO),
|
|
.ICCM_INDEX_BITS(ICCM_INDEX_BITS),
|
|
.ICCM_BANK_HI(ICCM_BANK_HI),
|
|
.ICCM_NUM_BANKS(ICCM_NUM_BANKS),
|
|
.ICCM_BANK_BITS(ICCM_BANK_BITS)) iccm (.*,
|
|
.clk_override(icm_clk_override),
|
|
.iccm_rw_addr(iccm_rw_addr[ICCM_BITS-1:1]),
|
|
.iccm_rd_data(iccm_rd_data[63:0])
|
|
);
|
|
end
|
|
else begin
|
|
assign iccm_rd_data = '0 ;
|
|
assign iccm_rd_data_ecc = '0 ;
|
|
end
|
|
|
|
|
|
endmodule
|
|
|