2022-05-10 21:06:26 +08:00
// 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.
//********************************************************************************
// $Id$
//
// Function: Top level SWERV core file
// Comments:
//
//********************************************************************************
module el2_swerv
2022-05-23 22:16:04 +08:00
import el2_pkg::* ;
2022-05-10 21:06:26 +08:00
# (
2022-05-23 22:16:04 +08:00
`include " el2_param.vh "
) (
input logic clk ,
input logic rst_l ,
input logic dbg_rst_l ,
input logic [ 31 : 1 ] rst_vec ,
input logic nmi_int ,
input logic [ 31 : 1 ] nmi_vec ,
output logic core_rst_l , // This is "rst_l | dbg_rst_l"
output logic active_l2clk ,
output logic free_l2clk ,
output logic [ 31 : 0 ] trace_rv_i_insn_ip ,
output logic [ 31 : 0 ] trace_rv_i_address_ip ,
output logic trace_rv_i_valid_ip ,
output logic trace_rv_i_exception_ip ,
output logic [ 4 : 0 ] trace_rv_i_ecause_ip ,
output logic trace_rv_i_interrupt_ip ,
output logic [ 31 : 0 ] trace_rv_i_tval_ip ,
output logic dccm_clk_override ,
output logic icm_clk_override ,
output logic dec_tlu_core_ecc_disable ,
// external halt/run interface
input logic i_cpu_halt_req , // Asynchronous Halt request to CPU
input logic i_cpu_run_req , // Asynchronous Restart request to CPU
output logic o_cpu_halt_ack , // Core Acknowledge to Halt request
output logic o_cpu_halt_status , // 1'b1 indicates processor is halted
output logic o_cpu_run_ack , // Core Acknowledge to run request
output logic o_debug_mode_status , // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
input logic [ 31 : 4 ] core_id , // CORE ID
// external MPC halt/run interface
input logic mpc_debug_halt_req , // Async halt request
input logic mpc_debug_run_req , // Async run request
input logic mpc_reset_run_req , // Run/halt after reset
output logic mpc_debug_halt_ack , // Halt ack
output logic mpc_debug_run_ack , // Run ack
output logic debug_brkpt_status , // debug breakpoint
output logic dec_tlu_perfcnt0 , // toggles when slot0 perf counter 0 has an event inc
output logic dec_tlu_perfcnt1 ,
output logic dec_tlu_perfcnt2 ,
output logic dec_tlu_perfcnt3 ,
// DCCM ports
output logic dccm_wren ,
output logic dccm_rden ,
output logic [ pt . DCCM_BITS - 1 : 0 ] dccm_wr_addr_lo ,
output logic [ pt . DCCM_BITS - 1 : 0 ] dccm_wr_addr_hi ,
output logic [ pt . DCCM_BITS - 1 : 0 ] dccm_rd_addr_lo ,
output logic [ pt . DCCM_BITS - 1 : 0 ] dccm_rd_addr_hi ,
output logic [ pt . DCCM_FDATA_WIDTH - 1 : 0 ] dccm_wr_data_lo ,
output logic [ pt . DCCM_FDATA_WIDTH - 1 : 0 ] dccm_wr_data_hi ,
input logic [ pt . DCCM_FDATA_WIDTH - 1 : 0 ] dccm_rd_data_lo ,
input logic [ pt . DCCM_FDATA_WIDTH - 1 : 0 ] dccm_rd_data_hi ,
// ICCM ports
output logic [ pt . ICCM_BITS - 1 : 1 ] iccm_rw_addr ,
output logic iccm_wren ,
output logic iccm_rden ,
output logic [ 2 : 0 ] iccm_wr_size ,
output logic [ 77 : 0 ] iccm_wr_data ,
output logic iccm_buf_correct_ecc ,
output logic iccm_correction_state ,
input logic [ 63 : 0 ] iccm_rd_data ,
input logic [ 77 : 0 ] iccm_rd_data_ecc ,
// ICache , ITAG ports
output logic [ 31 : 1 ] ic_rw_addr ,
output logic [ pt . ICACHE_NUM_WAYS - 1 : 0 ] ic_tag_valid ,
output logic [ pt . ICACHE_NUM_WAYS - 1 : 0 ] ic_wr_en ,
output logic ic_rd_en ,
output logic [ pt . ICACHE_BANKS_WAY - 1 : 0 ] [ 70 : 0 ] ic_wr_data , // Data to fill to the Icache. With ECC
input logic [ 63 : 0 ] ic_rd_data , // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
input logic [ 70 : 0 ] ic_debug_rd_data , // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
input logic [ 25 : 0 ] ictag_debug_rd_data , // Debug icache tag.
output logic [ 70 : 0 ] ic_debug_wr_data , // Debug wr cache.
input logic [ pt . ICACHE_BANKS_WAY - 1 : 0 ] ic_eccerr ,
input logic [ pt . ICACHE_BANKS_WAY - 1 : 0 ] ic_parerr ,
output logic [ 63 : 0 ] ic_premux_data , // Premux data to be muxed with each way of the Icache.
output logic ic_sel_premux_data , // Select premux data
output logic [ pt . ICACHE_INDEX_HI: 3 ] ic_debug_addr , // Read/Write addresss to the Icache.
output logic ic_debug_rd_en , // Icache debug rd
output logic ic_debug_wr_en , // Icache debug wr
output logic ic_debug_tag_array , // Debug tag array
output logic [ pt . ICACHE_NUM_WAYS - 1 : 0 ] ic_debug_way , // Debug way. Rd or Wr.
input logic [ pt . ICACHE_NUM_WAYS - 1 : 0 ] ic_rd_hit ,
input logic ic_tag_perr , // Icache Tag parity error
//-------------------------- LSU AXI signals--------------------------
// AXI Write Channels
output logic lsu_axi_awvalid ,
input logic lsu_axi_awready ,
output logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_awid ,
output logic [ 31 : 0 ] lsu_axi_awaddr ,
output logic [ 3 : 0 ] lsu_axi_awregion ,
output logic [ 7 : 0 ] lsu_axi_awlen ,
output logic [ 2 : 0 ] lsu_axi_awsize ,
output logic [ 1 : 0 ] lsu_axi_awburst ,
output logic lsu_axi_awlock ,
output logic [ 3 : 0 ] lsu_axi_awcache ,
output logic [ 2 : 0 ] lsu_axi_awprot ,
output logic [ 3 : 0 ] lsu_axi_awqos ,
output logic lsu_axi_wvalid ,
input logic lsu_axi_wready ,
output logic [ 63 : 0 ] lsu_axi_wdata ,
output logic [ 7 : 0 ] lsu_axi_wstrb ,
output logic lsu_axi_wlast ,
input logic lsu_axi_bvalid ,
output logic lsu_axi_bready ,
input logic [ 1 : 0 ] lsu_axi_bresp ,
input logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_bid ,
// AXI Read Channels
output logic lsu_axi_arvalid ,
input logic lsu_axi_arready ,
output logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_arid ,
output logic [ 31 : 0 ] lsu_axi_araddr ,
output logic [ 3 : 0 ] lsu_axi_arregion ,
output logic [ 7 : 0 ] lsu_axi_arlen ,
output logic [ 2 : 0 ] lsu_axi_arsize ,
output logic [ 1 : 0 ] lsu_axi_arburst ,
output logic lsu_axi_arlock ,
output logic [ 3 : 0 ] lsu_axi_arcache ,
output logic [ 2 : 0 ] lsu_axi_arprot ,
output logic [ 3 : 0 ] lsu_axi_arqos ,
input logic lsu_axi_rvalid ,
output logic lsu_axi_rready ,
input logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_rid ,
input logic [ 63 : 0 ] lsu_axi_rdata ,
input logic [ 1 : 0 ] lsu_axi_rresp ,
input logic lsu_axi_rlast ,
//-------------------------- IFU AXI signals--------------------------
// AXI Write Channels
output logic ifu_axi_awvalid ,
input logic ifu_axi_awready ,
output logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_awid ,
output logic [ 31 : 0 ] ifu_axi_awaddr ,
output logic [ 3 : 0 ] ifu_axi_awregion ,
output logic [ 7 : 0 ] ifu_axi_awlen ,
output logic [ 2 : 0 ] ifu_axi_awsize ,
output logic [ 1 : 0 ] ifu_axi_awburst ,
output logic ifu_axi_awlock ,
output logic [ 3 : 0 ] ifu_axi_awcache ,
output logic [ 2 : 0 ] ifu_axi_awprot ,
output logic [ 3 : 0 ] ifu_axi_awqos ,
output logic ifu_axi_wvalid ,
input logic ifu_axi_wready ,
output logic [ 63 : 0 ] ifu_axi_wdata ,
output logic [ 7 : 0 ] ifu_axi_wstrb ,
output logic ifu_axi_wlast ,
input logic ifu_axi_bvalid ,
output logic ifu_axi_bready ,
input logic [ 1 : 0 ] ifu_axi_bresp ,
input logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_bid ,
// AXI Read Channels
output logic ifu_axi_arvalid ,
input logic ifu_axi_arready ,
output logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_arid ,
output logic [ 31 : 0 ] ifu_axi_araddr ,
output logic [ 3 : 0 ] ifu_axi_arregion ,
output logic [ 7 : 0 ] ifu_axi_arlen ,
output logic [ 2 : 0 ] ifu_axi_arsize ,
output logic [ 1 : 0 ] ifu_axi_arburst ,
output logic ifu_axi_arlock ,
output logic [ 3 : 0 ] ifu_axi_arcache ,
output logic [ 2 : 0 ] ifu_axi_arprot ,
output logic [ 3 : 0 ] ifu_axi_arqos ,
input logic ifu_axi_rvalid ,
output logic ifu_axi_rready ,
input logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_rid ,
input logic [ 63 : 0 ] ifu_axi_rdata ,
input logic [ 1 : 0 ] ifu_axi_rresp ,
input logic ifu_axi_rlast ,
//-------------------------- SB AXI signals--------------------------
// AXI Write Channels
output logic sb_axi_awvalid ,
input logic sb_axi_awready ,
output logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_awid ,
output logic [ 31 : 0 ] sb_axi_awaddr ,
output logic [ 3 : 0 ] sb_axi_awregion ,
output logic [ 7 : 0 ] sb_axi_awlen ,
output logic [ 2 : 0 ] sb_axi_awsize ,
output logic [ 1 : 0 ] sb_axi_awburst ,
output logic sb_axi_awlock ,
output logic [ 3 : 0 ] sb_axi_awcache ,
output logic [ 2 : 0 ] sb_axi_awprot ,
output logic [ 3 : 0 ] sb_axi_awqos ,
output logic sb_axi_wvalid ,
input logic sb_axi_wready ,
output logic [ 63 : 0 ] sb_axi_wdata ,
output logic [ 7 : 0 ] sb_axi_wstrb ,
output logic sb_axi_wlast ,
input logic sb_axi_bvalid ,
output logic sb_axi_bready ,
input logic [ 1 : 0 ] sb_axi_bresp ,
input logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_bid ,
// AXI Read Channels
output logic sb_axi_arvalid ,
input logic sb_axi_arready ,
output logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_arid ,
output logic [ 31 : 0 ] sb_axi_araddr ,
output logic [ 3 : 0 ] sb_axi_arregion ,
output logic [ 7 : 0 ] sb_axi_arlen ,
output logic [ 2 : 0 ] sb_axi_arsize ,
output logic [ 1 : 0 ] sb_axi_arburst ,
output logic sb_axi_arlock ,
output logic [ 3 : 0 ] sb_axi_arcache ,
output logic [ 2 : 0 ] sb_axi_arprot ,
output logic [ 3 : 0 ] sb_axi_arqos ,
input logic sb_axi_rvalid ,
output logic sb_axi_rready ,
input logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_rid ,
input logic [ 63 : 0 ] sb_axi_rdata ,
input logic [ 1 : 0 ] sb_axi_rresp ,
input logic sb_axi_rlast ,
//-------------------------- DMA AXI signals--------------------------
// AXI Write Channels
input logic dma_axi_awvalid ,
output logic dma_axi_awready ,
input logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_awid ,
input logic [ 31 : 0 ] dma_axi_awaddr ,
input logic [ 2 : 0 ] dma_axi_awsize ,
input logic [ 2 : 0 ] dma_axi_awprot ,
input logic [ 7 : 0 ] dma_axi_awlen ,
input logic [ 1 : 0 ] dma_axi_awburst ,
input logic dma_axi_wvalid ,
output logic dma_axi_wready ,
input logic [ 63 : 0 ] dma_axi_wdata ,
input logic [ 7 : 0 ] dma_axi_wstrb ,
input logic dma_axi_wlast ,
output logic dma_axi_bvalid ,
input logic dma_axi_bready ,
output logic [ 1 : 0 ] dma_axi_bresp ,
output logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_bid ,
// AXI Read Channels
input logic dma_axi_arvalid ,
output logic dma_axi_arready ,
input logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_arid ,
input logic [ 31 : 0 ] dma_axi_araddr ,
input logic [ 2 : 0 ] dma_axi_arsize ,
input logic [ 2 : 0 ] dma_axi_arprot ,
input logic [ 7 : 0 ] dma_axi_arlen ,
input logic [ 1 : 0 ] dma_axi_arburst ,
output logic dma_axi_rvalid ,
input logic dma_axi_rready ,
output logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_rid ,
output logic [ 63 : 0 ] dma_axi_rdata ,
output logic [ 1 : 0 ] dma_axi_rresp ,
output logic dma_axi_rlast ,
//// AHB LITE BUS
output logic [ 31 : 0 ] haddr ,
output logic [ 2 : 0 ] hburst ,
output logic hmastlock ,
output logic [ 3 : 0 ] hprot ,
output logic [ 2 : 0 ] hsize ,
output logic [ 1 : 0 ] htrans ,
output logic hwrite ,
input logic [ 63 : 0 ] hrdata ,
input logic hready ,
input logic hresp ,
// LSU AHB Master
output logic [ 31 : 0 ] lsu_haddr ,
output logic [ 2 : 0 ] lsu_hburst ,
output logic lsu_hmastlock ,
output logic [ 3 : 0 ] lsu_hprot ,
output logic [ 2 : 0 ] lsu_hsize ,
output logic [ 1 : 0 ] lsu_htrans ,
output logic lsu_hwrite ,
output logic [ 63 : 0 ] lsu_hwdata ,
input logic [ 63 : 0 ] lsu_hrdata ,
input logic lsu_hready ,
input logic lsu_hresp ,
//System Bus Debug Master
output logic [ 31 : 0 ] sb_haddr ,
output logic [ 2 : 0 ] sb_hburst ,
output logic sb_hmastlock ,
output logic [ 3 : 0 ] sb_hprot ,
output logic [ 2 : 0 ] sb_hsize ,
output logic [ 1 : 0 ] sb_htrans ,
output logic sb_hwrite ,
output logic [ 63 : 0 ] sb_hwdata ,
input logic [ 63 : 0 ] sb_hrdata ,
input logic sb_hready ,
input logic sb_hresp ,
// DMA Slave
input logic dma_hsel ,
input logic [ 31 : 0 ] dma_haddr ,
input logic [ 2 : 0 ] dma_hburst ,
input logic dma_hmastlock ,
input logic [ 3 : 0 ] dma_hprot ,
input logic [ 2 : 0 ] dma_hsize ,
input logic [ 1 : 0 ] dma_htrans ,
input logic dma_hwrite ,
input logic [ 63 : 0 ] dma_hwdata ,
input logic dma_hreadyin ,
output logic [ 63 : 0 ] dma_hrdata ,
output logic dma_hreadyout ,
output logic dma_hresp ,
input logic lsu_bus_clk_en ,
input logic ifu_bus_clk_en ,
input logic dbg_bus_clk_en ,
input logic dma_bus_clk_en ,
input logic dmi_reg_en , // read or write
input logic [ 6 : 0 ] dmi_reg_addr , // address of DM register
input logic dmi_reg_wr_en , // write instruction
input logic [ 31 : 0 ] dmi_reg_wdata , // write data
output logic [ 31 : 0 ] dmi_reg_rdata ,
input logic [ pt . PIC_TOTAL_INT: 1 ] extintsrc_req ,
input logic timer_int ,
input logic soft_int ,
input logic scan_mode
2022-05-10 21:06:26 +08:00
) ;
2022-05-23 22:16:04 +08:00
logic [ 63 : 0 ] hwdata_nc ;
//----------------------------------------------------------------------
//
//----------------------------------------------------------------------
logic ifu_pmu_instr_aligned ;
logic ifu_ic_error_start ;
logic ifu_iccm_rd_ecc_single_err ;
logic lsu_axi_awready_ahb ;
logic lsu_axi_wready_ahb ;
logic lsu_axi_bvalid_ahb ;
logic lsu_axi_bready_ahb ;
logic [ 1 : 0 ] lsu_axi_bresp_ahb ;
logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_bid_ahb ;
logic lsu_axi_arready_ahb ;
logic lsu_axi_rvalid_ahb ;
logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_rid_ahb ;
logic [ 63 : 0 ] lsu_axi_rdata_ahb ;
logic [ 1 : 0 ] lsu_axi_rresp_ahb ;
logic lsu_axi_rlast_ahb ;
logic lsu_axi_awready_int ;
logic lsu_axi_wready_int ;
logic lsu_axi_bvalid_int ;
logic lsu_axi_bready_int ;
logic [ 1 : 0 ] lsu_axi_bresp_int ;
logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_bid_int ;
logic lsu_axi_arready_int ;
logic lsu_axi_rvalid_int ;
logic [ pt . LSU_BUS_TAG - 1 : 0 ] lsu_axi_rid_int ;
logic [ 63 : 0 ] lsu_axi_rdata_int ;
logic [ 1 : 0 ] lsu_axi_rresp_int ;
logic lsu_axi_rlast_int ;
logic ifu_axi_awready_ahb ;
logic ifu_axi_wready_ahb ;
logic ifu_axi_bvalid_ahb ;
logic ifu_axi_bready_ahb ;
logic [ 1 : 0 ] ifu_axi_bresp_ahb ;
logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_bid_ahb ;
logic ifu_axi_arready_ahb ;
logic ifu_axi_rvalid_ahb ;
logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_rid_ahb ;
logic [ 63 : 0 ] ifu_axi_rdata_ahb ;
logic [ 1 : 0 ] ifu_axi_rresp_ahb ;
logic ifu_axi_rlast_ahb ;
logic ifu_axi_awready_int ;
logic ifu_axi_wready_int ;
logic ifu_axi_bvalid_int ;
logic ifu_axi_bready_int ;
logic [ 1 : 0 ] ifu_axi_bresp_int ;
logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_bid_int ;
logic ifu_axi_arready_int ;
logic ifu_axi_rvalid_int ;
logic [ pt . IFU_BUS_TAG - 1 : 0 ] ifu_axi_rid_int ;
logic [ 63 : 0 ] ifu_axi_rdata_int ;
logic [ 1 : 0 ] ifu_axi_rresp_int ;
logic ifu_axi_rlast_int ;
logic sb_axi_awready_ahb ;
logic sb_axi_wready_ahb ;
logic sb_axi_bvalid_ahb ;
logic sb_axi_bready_ahb ;
logic [ 1 : 0 ] sb_axi_bresp_ahb ;
logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_bid_ahb ;
logic sb_axi_arready_ahb ;
logic sb_axi_rvalid_ahb ;
logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_rid_ahb ;
logic [ 63 : 0 ] sb_axi_rdata_ahb ;
logic [ 1 : 0 ] sb_axi_rresp_ahb ;
logic sb_axi_rlast_ahb ;
logic sb_axi_awready_int ;
logic sb_axi_wready_int ;
logic sb_axi_bvalid_int ;
logic sb_axi_bready_int ;
logic [ 1 : 0 ] sb_axi_bresp_int ;
logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_bid_int ;
logic sb_axi_arready_int ;
logic sb_axi_rvalid_int ;
logic [ pt . SB_BUS_TAG - 1 : 0 ] sb_axi_rid_int ;
logic [ 63 : 0 ] sb_axi_rdata_int ;
logic [ 1 : 0 ] sb_axi_rresp_int ;
logic sb_axi_rlast_int ;
logic dma_axi_awvalid_ahb ;
logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_awid_ahb ;
logic [ 31 : 0 ] dma_axi_awaddr_ahb ;
logic [ 2 : 0 ] dma_axi_awsize_ahb ;
logic [ 2 : 0 ] dma_axi_awprot_ahb ;
logic [ 7 : 0 ] dma_axi_awlen_ahb ;
logic [ 1 : 0 ] dma_axi_awburst_ahb ;
logic dma_axi_wvalid_ahb ;
logic [ 63 : 0 ] dma_axi_wdata_ahb ;
logic [ 7 : 0 ] dma_axi_wstrb_ahb ;
logic dma_axi_wlast_ahb ;
logic dma_axi_bready_ahb ;
logic dma_axi_arvalid_ahb ;
logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_arid_ahb ;
logic [ 31 : 0 ] dma_axi_araddr_ahb ;
logic [ 2 : 0 ] dma_axi_arsize_ahb ;
logic [ 2 : 0 ] dma_axi_arprot_ahb ;
logic [ 7 : 0 ] dma_axi_arlen_ahb ;
logic [ 1 : 0 ] dma_axi_arburst_ahb ;
logic dma_axi_rready_ahb ;
logic dma_axi_awvalid_int ;
logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_awid_int ;
logic [ 31 : 0 ] dma_axi_awaddr_int ;
logic [ 2 : 0 ] dma_axi_awsize_int ;
logic [ 2 : 0 ] dma_axi_awprot_int ;
logic [ 7 : 0 ] dma_axi_awlen_int ;
logic [ 1 : 0 ] dma_axi_awburst_int ;
logic dma_axi_wvalid_int ;
logic [ 63 : 0 ] dma_axi_wdata_int ;
logic [ 7 : 0 ] dma_axi_wstrb_int ;
logic dma_axi_wlast_int ;
logic dma_axi_bready_int ;
logic dma_axi_arvalid_int ;
logic [ pt . DMA_BUS_TAG - 1 : 0 ] dma_axi_arid_int ;
logic [ 31 : 0 ] dma_axi_araddr_int ;
logic [ 2 : 0 ] dma_axi_arsize_int ;
logic [ 2 : 0 ] dma_axi_arprot_int ;
logic [ 7 : 0 ] dma_axi_arlen_int ;
logic [ 1 : 0 ] dma_axi_arburst_int ;
logic dma_axi_rready_int ;
// Icache debug
logic [ 70 : 0 ] ifu_ic_debug_rd_data ; // diagnostic icache read data
logic ifu_ic_debug_rd_data_valid ; // diagnostic icache read data valid
el2_cache_debug_pkt_t dec_tlu_ic_diag_pkt ; // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
logic dec_i0_rs1_en_d ;
logic dec_i0_rs2_en_d ;
logic [ 31 : 0 ] gpr_i0_rs1_d ;
logic [ 31 : 0 ] gpr_i0_rs2_d ;
logic [ 31 : 0 ] dec_i0_result_r ;
logic [ 31 : 0 ] exu_i0_result_x ;
logic [ 31 : 1 ] exu_i0_pc_x ;
logic [ 31 : 1 ] exu_npc_r ;
el2_alu_pkt_t i0_ap ;
// Trigger signals
el2_trigger_pkt_t [ 3 : 0 ] trigger_pkt_any ;
logic [ 3 : 0 ] lsu_trigger_match_m ;
logic [ 31 : 0 ] dec_i0_immed_d ;
logic [ 12 : 1 ] dec_i0_br_immed_d ;
logic dec_i0_select_pc_d ;
logic [ 31 : 1 ] dec_i0_pc_d ;
logic [ 3 : 0 ] dec_i0_rs1_bypass_en_d ;
logic [ 3 : 0 ] dec_i0_rs2_bypass_en_d ;
logic dec_i0_alu_decode_d ;
logic dec_i0_branch_d ;
logic ifu_miss_state_idle ;
logic dec_tlu_flush_noredir_r ;
logic dec_tlu_flush_leak_one_r ;
logic dec_tlu_flush_err_r ;
logic ifu_i0_valid ;
logic [ 31 : 0 ] ifu_i0_instr ;
logic [ 31 : 1 ] ifu_i0_pc ;
logic exu_flush_final ;
logic [ 31 : 1 ] exu_flush_path_final ;
logic [ 31 : 0 ] exu_lsu_rs1_d ;
logic [ 31 : 0 ] exu_lsu_rs2_d ;
el2_lsu_pkt_t lsu_p ;
logic dec_qual_lsu_d ;
logic dec_lsu_valid_raw_d ;
logic [ 11 : 0 ] dec_lsu_offset_d ;
logic [ 31 : 0 ] lsu_result_m ;
logic [ 31 : 0 ] lsu_result_corr_r ; // This is the ECC corrected data going to RF
logic lsu_single_ecc_error_incr ; // Increment the ecc counter
el2_lsu_error_pkt_t lsu_error_pkt_r ;
logic lsu_imprecise_error_load_any ;
logic lsu_imprecise_error_store_any ;
logic [ 31 : 0 ] lsu_imprecise_error_addr_any ;
logic lsu_load_stall_any ; // This is for blocking loads
logic lsu_store_stall_any ; // This is for blocking stores
logic lsu_idle_any ; // doesn't include DMA
logic lsu_active ; // lsu is active. used for clock
logic [ 31 : 1 ] lsu_fir_addr ; // fast interrupt address
logic [ 1 : 0 ] lsu_fir_error ; // Error during fast interrupt lookup
// Non-blocking loads
logic lsu_nonblock_load_valid_m ;
logic [ pt . LSU_NUM_NBLOAD_WIDTH - 1 : 0 ] lsu_nonblock_load_tag_m ;
logic lsu_nonblock_load_inv_r ;
logic [ pt . LSU_NUM_NBLOAD_WIDTH - 1 : 0 ] lsu_nonblock_load_inv_tag_r ;
logic lsu_nonblock_load_data_valid ;
logic [ pt . LSU_NUM_NBLOAD_WIDTH - 1 : 0 ] lsu_nonblock_load_data_tag ;
logic [ 31 : 0 ] lsu_nonblock_load_data ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dec_csr_ren_d ;
logic [ 31 : 0 ] dec_csr_rddata_d ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ 31 : 0 ] exu_csr_rs1_x ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dec_tlu_i0_commit_cmt ;
logic dec_tlu_flush_lower_r ;
logic dec_tlu_flush_lower_wb ;
logic dec_tlu_i0_kill_writeb_r ; // I0 is flushed, don't writeback any results to arch state
logic dec_tlu_fence_i_r ; // flush is a fence_i rfnpc, flush icache
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ 31 : 1 ] dec_tlu_flush_path_r ;
logic [ 31 : 0 ] dec_tlu_mrac_ff ; // CSR for memory region control
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic ifu_i0_pc4 ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
el2_mul_pkt_t mul_p ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
el2_div_pkt_t div_p ;
logic dec_div_cancel ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ 31 : 0 ] exu_div_result ;
logic exu_div_wren ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dec_i0_decode_d ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ 31 : 1 ] pred_correct_npc_x ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
el2_br_tlu_pkt_t dec_tlu_br0_r_pkt ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
el2_predict_pkt_t exu_mp_pkt ;
logic [ pt . BHT_GHR_SIZE - 1 : 0 ] exu_mp_eghr ;
logic [ pt . BHT_GHR_SIZE - 1 : 0 ] exu_mp_fghr ;
logic [ pt . BTB_ADDR_HI: pt . BTB_ADDR_LO ] exu_mp_index ;
logic [ pt . BTB_BTAG_SIZE - 1 : 0 ] exu_mp_btag ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ pt . BHT_GHR_SIZE - 1 : 0 ] exu_i0_br_fghr_r ;
logic [ 1 : 0 ] exu_i0_br_hist_r ;
logic exu_i0_br_error_r ;
logic exu_i0_br_start_error_r ;
logic exu_i0_br_valid_r ;
logic exu_i0_br_mp_r ;
logic exu_i0_br_middle_r ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic exu_i0_br_way_r ;
logic [ pt . BTB_ADDR_HI: pt . BTB_ADDR_LO ] exu_i0_br_index_r ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dma_dccm_req ;
logic dma_iccm_req ;
logic [ 2 : 0 ] dma_mem_tag ;
logic [ 31 : 0 ] dma_mem_addr ;
logic [ 2 : 0 ] dma_mem_sz ;
logic dma_mem_write ;
logic [ 63 : 0 ] dma_mem_wdata ;
logic dccm_dma_rvalid ;
logic dccm_dma_ecc_error ;
logic [ 2 : 0 ] dccm_dma_rtag ;
logic [ 63 : 0 ] dccm_dma_rdata ;
logic iccm_dma_rvalid ;
logic iccm_dma_ecc_error ;
logic [ 2 : 0 ] iccm_dma_rtag ;
logic [ 63 : 0 ] iccm_dma_rdata ;
logic dma_dccm_stall_any ; // Stall the ld/st in decode if asserted
logic dma_iccm_stall_any ; // Stall the fetch
logic dccm_ready ;
logic iccm_ready ;
logic dma_pmu_dccm_read ;
logic dma_pmu_dccm_write ;
logic dma_pmu_any_read ;
logic dma_pmu_any_write ;
logic ifu_i0_icaf ;
logic [ 1 : 0 ] ifu_i0_icaf_type ;
logic ifu_i0_icaf_second ;
logic ifu_i0_dbecc ;
logic iccm_dma_sb_error ;
el2_br_pkt_t i0_brp ;
logic [ pt . BTB_ADDR_HI: pt . BTB_ADDR_LO ] ifu_i0_bp_index ;
logic [ pt . BHT_GHR_SIZE - 1 : 0 ] ifu_i0_bp_fghr ;
logic [ pt . BTB_BTAG_SIZE - 1 : 0 ] ifu_i0_bp_btag ;
logic [ $clog2 ( pt . BTB_SIZE ) - 1 : 0 ] ifu_i0_fa_index ;
logic [ $clog2 ( pt . BTB_SIZE ) - 1 : 0 ] dec_fa_error_index ; // Fully associative btb error index
el2_predict_pkt_t dec_i0_predict_p_d ;
logic [ pt . BHT_GHR_SIZE - 1 : 0 ] i0_predict_fghr_d ; // DEC predict fghr
logic [ pt . BTB_ADDR_HI: pt . BTB_ADDR_LO ] i0_predict_index_d ; // DEC predict index
logic [ pt . BTB_BTAG_SIZE - 1 : 0 ] i0_predict_btag_d ; // DEC predict branch tag
// PIC ports
logic picm_wren ;
logic picm_rden ;
logic picm_mken ;
logic [ 31 : 0 ] picm_rdaddr ;
logic [ 31 : 0 ] picm_wraddr ;
logic [ 31 : 0 ] picm_wr_data ;
logic [ 31 : 0 ] picm_rd_data ;
// feature disable from mfdc
logic dec_tlu_external_ldfwd_disable ; // disable external load forwarding
logic dec_tlu_bpred_disable ;
logic dec_tlu_wb_coalescing_disable ;
logic dec_tlu_sideeffect_posted_disable ;
logic [ 2 : 0 ] dec_tlu_dma_qos_prty ; // DMA QoS priority coming from MFDC [18:16]
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
// clock gating overrides from mcgc
logic dec_tlu_misc_clk_override ;
logic dec_tlu_ifu_clk_override ;
logic dec_tlu_lsu_clk_override ;
logic dec_tlu_bus_clk_override ;
logic dec_tlu_pic_clk_override ;
logic dec_tlu_dccm_clk_override ;
logic dec_tlu_icm_clk_override ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dec_tlu_picio_clk_override ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
assign dccm_clk_override = dec_tlu_dccm_clk_override ; // dccm memory
assign icm_clk_override = dec_tlu_icm_clk_override ; // icache/iccm memory
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
// -----------------------DEBUG START -------------------------------
logic [ 31 : 0 ] dbg_cmd_addr ; // the address of the debug command to used by the core
logic [ 31 : 0 ] dbg_cmd_wrdata ; // If the debug command is a write command, this has the data to be written to the CSR/GPR
logic dbg_cmd_valid ; // commad is being driven by the dbg module. One pulse. Only dirven when core_halted has been seen
logic dbg_cmd_write ; // 1: write command; 0: read_command
logic [ 1 : 0 ] dbg_cmd_type ; // 0:gpr 1:csr 2: memory
logic [ 1 : 0 ] dbg_cmd_size ; // size of the abstract mem access debug command
logic dbg_halt_req ; // Sticky signal indicating that the debug module wants to start the entering of debug mode ( start the halting sequence )
logic dbg_resume_req ; // Sticky signal indicating that the debug module wants to resume from debug mode
logic dbg_core_rst_l ; // Core reset from DM
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic core_dbg_cmd_done ; // Final muxed cmd done to debug
logic core_dbg_cmd_fail ; // Final muxed cmd done to debug
logic [ 31 : 0 ] core_dbg_rddata ; // Final muxed cmd done to debug
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dma_dbg_cmd_done ; // Abstarct memory command sent to dma is done
logic dma_dbg_cmd_fail ; // Abstarct memory command sent to dma failed
logic [ 31 : 0 ] dma_dbg_rddata ; // Read data for abstract memory access
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dbg_dma_bubble ; // Debug needs a bubble to send a valid
logic dma_dbg_ready ; // DMA is ready to accept debug request
logic [ 31 : 0 ] dec_dbg_rddata ; // The core drives this data ( intercepts the pipe and sends it here )
logic dec_dbg_cmd_done ; // This will be treated like a valid signal
logic dec_dbg_cmd_fail ; // Abstract command failed
logic dec_tlu_mpc_halted_only ; // Only halted due to MPC
logic dec_tlu_dbg_halted ; // The core has finished the queiscing sequence. Sticks this signal high
logic dec_tlu_resume_ack ;
logic dec_tlu_debug_mode ; // Core is in debug mode
logic dec_debug_wdata_rs1_d ;
logic dec_tlu_force_halt ; // halt has been forced
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ 1 : 0 ] dec_data_en ;
logic [ 1 : 0 ] dec_ctl_en ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
// PMU Signals
logic exu_pmu_i0_br_misp ;
logic exu_pmu_i0_br_ataken ;
logic exu_pmu_i0_pc4 ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic lsu_pmu_load_external_m ;
logic lsu_pmu_store_external_m ;
logic lsu_pmu_misaligned_m ;
logic lsu_pmu_bus_trxn ;
logic lsu_pmu_bus_misaligned ;
logic lsu_pmu_bus_error ;
logic lsu_pmu_bus_busy ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic ifu_pmu_fetch_stall ;
logic ifu_pmu_ic_miss ;
logic ifu_pmu_ic_hit ;
logic ifu_pmu_bus_error ;
logic ifu_pmu_bus_busy ;
logic ifu_pmu_bus_trxn ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic active_state ;
logic free_clk ;
logic active_clk ;
logic dec_pause_state_cg ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic lsu_nonblock_load_data_error ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ 15 : 0 ] ifu_i0_cinst ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
// fast interrupt
logic [ 31 : 2 ] dec_tlu_meihap ;
logic dec_extint_stall ;
el2_trace_pkt_t trace_rv_trace_pkt ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic lsu_fastint_stall_any ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic [ 7 : 0 ] pic_claimid ;
logic [ 3 : 0 ] pic_pl , dec_tlu_meicurpl , dec_tlu_meipt ;
logic mexintpend ;
logic mhwakeup ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dma_active ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic pause_state ;
logic halt_state ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
logic dec_tlu_core_empty ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
assign pause_state = dec_pause_state_cg & ~ ( dma_active | lsu_active ) & dec_tlu_core_empty ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
assign halt_state = o_cpu_halt_status & ~ ( dma_active | lsu_active ) ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
assign active_state = ( ~ ( halt_state | pause_state ) | dec_tlu_flush_lower_r | dec_tlu_flush_lower_wb ) | dec_tlu_misc_clk_override ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
rvoclkhdr free_cg2 (
. clk ( clk ) ,
. en ( 1 'b1 ) ,
. l1clk ( free_l2clk ) ,
. *
) ;
rvoclkhdr active_cg2 (
. clk ( clk ) ,
. en ( active_state ) ,
. l1clk ( active_l2clk ) ,
. *
) ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
// all other clock headers are 1st level
rvoclkhdr free_cg1 (
. clk ( free_l2clk ) ,
. en ( 1 'b1 ) ,
. l1clk ( free_clk ) ,
. *
) ;
rvoclkhdr active_cg1 (
. clk ( active_l2clk ) ,
. en ( 1 'b1 ) ,
. l1clk ( active_clk ) ,
. *
) ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
assign core_dbg_cmd_done = dma_dbg_cmd_done | dec_dbg_cmd_done ;
assign core_dbg_cmd_fail = dma_dbg_cmd_fail | dec_dbg_cmd_fail ;
assign core_dbg_rddata [ 31 : 0 ] = dma_dbg_cmd_done ? dma_dbg_rddata [ 31 : 0 ] : dec_dbg_rddata [ 31 : 0 ] ;
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
el2_dbg # (
. pt ( pt )
) dbg (
. rst_l ( core_rst_l ) ,
. clk ( free_l2clk ) ,
. clk_override ( dec_tlu_misc_clk_override ) ,
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
// AXI signals
. sb_axi_awready ( sb_axi_awready_int ) ,
. sb_axi_wready ( sb_axi_wready_int ) ,
. sb_axi_bvalid ( sb_axi_bvalid_int ) ,
. sb_axi_bresp ( sb_axi_bresp_int [ 1 : 0 ] ) ,
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
. sb_axi_arready ( sb_axi_arready_int ) ,
. sb_axi_rvalid ( sb_axi_rvalid_int ) ,
. sb_axi_rdata ( sb_axi_rdata_int [ 63 : 0 ] ) ,
. sb_axi_rresp ( sb_axi_rresp_int [ 1 : 0 ] ) ,
. *
) ;
// ----------------- DEBUG END -----------------------------
assign core_rst_l = rst_l & ( dbg_core_rst_l | scan_mode ) ;
// fetch
el2_ifu # (
. pt ( pt )
) ifu (
. clk ( active_l2clk ) ,
. rst_l ( core_rst_l ) ,
. dec_tlu_flush_err_wb ( dec_tlu_flush_err_r ) ,
. dec_tlu_flush_noredir_wb ( dec_tlu_flush_noredir_r ) ,
. dec_tlu_fence_i_wb ( dec_tlu_fence_i_r ) ,
. dec_tlu_flush_leak_one_wb ( dec_tlu_flush_leak_one_r ) ,
. dec_tlu_flush_lower_wb ( dec_tlu_flush_lower_r ) ,
2022-05-10 21:06:26 +08:00
2022-05-23 22:16:04 +08:00
// AXI signals
. ifu_axi_arready ( ifu_axi_arready_int ) ,
. ifu_axi_rvalid ( ifu_axi_rvalid_int ) ,
. ifu_axi_rid ( ifu_axi_rid_int [ pt . IFU_BUS_TAG - 1 : 0 ] ) ,
. ifu_axi_rdata ( ifu_axi_rdata_int [ 63 : 0 ] ) ,
. ifu_axi_rresp ( ifu_axi_rresp_int [ 1 : 0 ] ) ,
. *
) ;
el2_dec # (
. pt ( pt )
) dec (
. clk ( active_l2clk ) ,
. dbg_cmd_wrdata ( dbg_cmd_wrdata [ 1 : 0 ] ) ,
2022-05-10 21:06:26 +08:00
. rst_l ( core_rst_l ) ,
2022-05-23 22:16:04 +08:00
. *
) ;
el2_exu # (
. pt ( pt )
) exu (
. clk ( active_l2clk ) ,
. rst_l ( core_rst_l ) ,
. *
) ;
el2_lsu # (
. pt ( pt )
) lsu (
. clk ( active_l2clk ) ,
. rst_l ( core_rst_l ) ,
. clk_override ( dec_tlu_lsu_clk_override ) ,
. dec_tlu_i0_kill_writeb_r ( dec_tlu_i0_kill_writeb_r ) ,
// AXI signals
. lsu_axi_awready ( lsu_axi_awready_int ) ,
. lsu_axi_wready ( lsu_axi_wready_int ) ,
. lsu_axi_bvalid ( lsu_axi_bvalid_int ) ,
. lsu_axi_bid ( lsu_axi_bid_int [ pt . LSU_BUS_TAG - 1 : 0 ] ) ,
. lsu_axi_bresp ( lsu_axi_bresp_int [ 1 : 0 ] ) ,
. lsu_axi_arready ( lsu_axi_arready_int ) ,
. lsu_axi_rvalid ( lsu_axi_rvalid_int ) ,
. lsu_axi_rid ( lsu_axi_rid_int [ pt . LSU_BUS_TAG - 1 : 0 ] ) ,
. lsu_axi_rdata ( lsu_axi_rdata_int [ 63 : 0 ] ) ,
. lsu_axi_rresp ( lsu_axi_rresp_int [ 1 : 0 ] ) ,
. lsu_axi_rlast ( lsu_axi_rlast_int ) ,
. *
) ;
el2_pic_ctrl # (
. pt ( pt )
) pic_ctrl_inst (
2022-05-10 21:06:26 +08:00
. clk ( free_l2clk ) ,
2022-05-23 22:16:04 +08:00
. clk_override ( dec_tlu_pic_clk_override ) ,
. io_clk_override ( dec_tlu_picio_clk_override ) ,
. picm_mken ( picm_mken ) ,
. extintsrc_req ( { extintsrc_req [ pt . PIC_TOTAL_INT: 1 ] , 1 'b0 } ) ,
. pl ( pic_pl [ 3 : 0 ] ) ,
. claimid ( pic_claimid [ 7 : 0 ] ) ,
. meicurpl ( dec_tlu_meicurpl [ 3 : 0 ] ) ,
. meipt ( dec_tlu_meipt [ 3 : 0 ] ) ,
. rst_l ( core_rst_l ) ,
. *
) ;
el2_dma_ctrl # (
. pt ( pt )
) dma_ctrl (
. clk ( free_l2clk ) ,
. rst_l ( core_rst_l ) ,
2022-05-10 21:06:26 +08:00
. clk_override ( dec_tlu_misc_clk_override ) ,
// AXI signals
2022-05-23 22:16:04 +08:00
. dma_axi_awvalid ( dma_axi_awvalid_int ) ,
. dma_axi_awid ( dma_axi_awid_int [ pt . DMA_BUS_TAG - 1 : 0 ] ) ,
. dma_axi_awaddr ( dma_axi_awaddr_int [ 31 : 0 ] ) ,
. dma_axi_awsize ( dma_axi_awsize_int [ 2 : 0 ] ) ,
. dma_axi_wvalid ( dma_axi_wvalid_int ) ,
. dma_axi_wdata ( dma_axi_wdata_int [ 63 : 0 ] ) ,
. dma_axi_wstrb ( dma_axi_wstrb_int [ 7 : 0 ] ) ,
. dma_axi_bready ( dma_axi_bready_int ) ,
. dma_axi_arvalid ( dma_axi_arvalid_int ) ,
. dma_axi_arid ( dma_axi_arid_int [ pt . DMA_BUS_TAG - 1 : 0 ] ) ,
. dma_axi_araddr ( dma_axi_araddr_int [ 31 : 0 ] ) ,
. dma_axi_arsize ( dma_axi_arsize_int [ 2 : 0 ] ) ,
. dma_axi_rready ( dma_axi_rready_int ) ,
2022-05-10 21:06:26 +08:00
. *
2022-05-23 22:16:04 +08:00
) ;
// Drive the final AXI inputs
2022-05-23 22:45:23 +08:00
assign lsu_axi_awready_int = lsu_axi_awready ;
assign lsu_axi_wready_int = lsu_axi_wready ;
assign lsu_axi_bvalid_int = lsu_axi_bvalid ;
assign lsu_axi_bready_int = lsu_axi_bready ;
assign lsu_axi_bresp_int [ 1 : 0 ] = lsu_axi_bresp [ 1 : 0 ] ;
assign lsu_axi_bid_int [ pt . LSU_BUS_TAG - 1 : 0 ] = lsu_axi_bid [ pt . LSU_BUS_TAG - 1 : 0 ] ;
assign lsu_axi_arready_int = lsu_axi_arready ;
assign lsu_axi_rvalid_int = lsu_axi_rvalid ;
assign lsu_axi_rid_int [ pt . LSU_BUS_TAG - 1 : 0 ] = lsu_axi_rid [ pt . LSU_BUS_TAG - 1 : 0 ] ;
assign lsu_axi_rdata_int [ 63 : 0 ] = lsu_axi_rdata [ 63 : 0 ] ;
assign lsu_axi_rresp_int [ 1 : 0 ] = lsu_axi_rresp [ 1 : 0 ] ;
assign lsu_axi_rlast_int = lsu_axi_rlast ;
assign ifu_axi_awready_int = ifu_axi_awready ;
assign ifu_axi_wready_int = ifu_axi_wready ;
assign ifu_axi_bvalid_int = ifu_axi_bvalid ;
assign ifu_axi_bready_int = ifu_axi_bready ;
assign ifu_axi_bresp_int [ 1 : 0 ] = ifu_axi_bresp [ 1 : 0 ] ;
assign ifu_axi_bid_int [ pt . IFU_BUS_TAG - 1 : 0 ] = ifu_axi_bid [ pt . IFU_BUS_TAG - 1 : 0 ] ;
assign ifu_axi_arready_int = ifu_axi_arready ;
assign ifu_axi_rvalid_int = ifu_axi_rvalid ;
assign ifu_axi_rid_int [ pt . IFU_BUS_TAG - 1 : 0 ] = ifu_axi_rid [ pt . IFU_BUS_TAG - 1 : 0 ] ;
assign ifu_axi_rdata_int [ 63 : 0 ] = ifu_axi_rdata [ 63 : 0 ] ;
assign ifu_axi_rresp_int [ 1 : 0 ] = ifu_axi_rresp [ 1 : 0 ] ;
assign ifu_axi_rlast_int = ifu_axi_rlast ;
assign sb_axi_awready_int = sb_axi_awready ;
assign sb_axi_wready_int = sb_axi_wready ;
assign sb_axi_bvalid_int = sb_axi_bvalid ;
assign sb_axi_bready_int = sb_axi_bready ;
assign sb_axi_bresp_int [ 1 : 0 ] = sb_axi_bresp [ 1 : 0 ] ;
assign sb_axi_bid_int [ pt . SB_BUS_TAG - 1 : 0 ] = sb_axi_bid [ pt . SB_BUS_TAG - 1 : 0 ] ;
assign sb_axi_arready_int = sb_axi_arready ;
assign sb_axi_rvalid_int = sb_axi_rvalid ;
assign sb_axi_rid_int [ pt . SB_BUS_TAG - 1 : 0 ] = sb_axi_rid [ pt . SB_BUS_TAG - 1 : 0 ] ;
assign sb_axi_rdata_int [ 63 : 0 ] = sb_axi_rdata [ 63 : 0 ] ;
assign sb_axi_rresp_int [ 1 : 0 ] = sb_axi_rresp [ 1 : 0 ] ;
assign sb_axi_rlast_int = sb_axi_rlast ;
assign dma_axi_awvalid_int = dma_axi_awvalid ;
assign dma_axi_awid_int [ pt . DMA_BUS_TAG - 1 : 0 ] = dma_axi_awid [ pt . DMA_BUS_TAG - 1 : 0 ] ;
assign dma_axi_awaddr_int [ 31 : 0 ] = dma_axi_awaddr [ 31 : 0 ] ;
assign dma_axi_awsize_int [ 2 : 0 ] = dma_axi_awsize [ 2 : 0 ] ;
assign dma_axi_awprot_int [ 2 : 0 ] = dma_axi_awprot [ 2 : 0 ] ;
assign dma_axi_awlen_int [ 7 : 0 ] = dma_axi_awlen [ 7 : 0 ] ;
assign dma_axi_awburst_int [ 1 : 0 ] = dma_axi_awburst [ 1 : 0 ] ;
assign dma_axi_wvalid_int = dma_axi_wvalid ;
assign dma_axi_wdata_int [ 63 : 0 ] = dma_axi_wdata ;
assign dma_axi_wstrb_int [ 7 : 0 ] = dma_axi_wstrb [ 7 : 0 ] ;
assign dma_axi_wlast_int = dma_axi_wlast ;
assign dma_axi_bready_int = dma_axi_bready ;
assign dma_axi_arvalid_int = dma_axi_arvalid ;
assign dma_axi_arid_int [ pt . DMA_BUS_TAG - 1 : 0 ] = dma_axi_arid [ pt . DMA_BUS_TAG - 1 : 0 ] ;
assign dma_axi_araddr_int [ 31 : 0 ] = dma_axi_araddr [ 31 : 0 ] ;
assign dma_axi_arsize_int [ 2 : 0 ] = dma_axi_arsize [ 2 : 0 ] ;
assign dma_axi_arprot_int [ 2 : 0 ] = dma_axi_arprot [ 2 : 0 ] ;
assign dma_axi_arlen_int [ 7 : 0 ] = dma_axi_arlen [ 7 : 0 ] ;
assign dma_axi_arburst_int [ 1 : 0 ] = dma_axi_arburst [ 1 : 0 ] ;
assign dma_axi_rready_int = dma_axi_rready ;
// unpack packet
// also need retires_p==3
assign trace_rv_i_insn_ip [ 31 : 0 ] = trace_rv_trace_pkt . trace_rv_i_insn_ip [ 31 : 0 ] ;
assign trace_rv_i_address_ip [ 31 : 0 ] = trace_rv_trace_pkt . trace_rv_i_address_ip [ 31 : 0 ] ;
assign trace_rv_i_valid_ip = trace_rv_trace_pkt . trace_rv_i_valid_ip ;
assign trace_rv_i_exception_ip = trace_rv_trace_pkt . trace_rv_i_exception_ip ;
assign trace_rv_i_ecause_ip [ 4 : 0 ] = trace_rv_trace_pkt . trace_rv_i_ecause_ip [ 4 : 0 ] ;
assign trace_rv_i_interrupt_ip = trace_rv_trace_pkt . trace_rv_i_interrupt_ip ;
assign trace_rv_i_tval_ip [ 31 : 0 ] = trace_rv_trace_pkt . trace_rv_i_tval_ip [ 31 : 0 ] ;
2022-05-23 22:16:04 +08:00
endmodule // el2_swerv
2022-05-10 21:06:26 +08:00