quasar/src/main/scala/el2_swerv_wrapper.scala

705 lines
25 KiB
Scala

import chisel3._
import el2_mem._
import chisel3.util._
import dmi._
import lib._
class el2_swerv_wrapper extends Module with el2_lib with RequireAsyncReset {
val io = IO(new Bundle{
val dbg_rst_l = Input(AsyncReset())
val rst_vec = Input(UInt(31.W))
val nmi_int = Input(Bool())
val nmi_vec = Input(UInt(31.W))
val jtag_id = Input(UInt(31.W))
val trace_rv_i_insn_ip = Output(UInt(32.W))
val trace_rv_i_address_ip = Output(UInt(32.W))
val trace_rv_i_valid_ip = Output(UInt(2.W))
val trace_rv_i_exception_ip = Output(UInt(2.W))
val trace_rv_i_ecause_ip = Output(UInt(5.W))
val trace_rv_i_interrupt_ip = Output(UInt(2.W))
val trace_rv_i_tval_ip = Output(UInt(32.W))
// AXI Signals
val lsu_axi_awvalid = Output(Bool())
val lsu_axi_awready = Input(Bool())
val lsu_axi_awid = Output(UInt(LSU_BUS_TAG.W))
val lsu_axi_awaddr = Output(UInt(32.W))
val lsu_axi_awregion = Output(UInt(4.W))
val lsu_axi_awlen = Output(UInt(8.W))
val lsu_axi_awsize = Output(UInt(3.W))
val lsu_axi_awburst = Output(UInt(2.W))
val lsu_axi_awlock = Output(Bool())
val lsu_axi_awcache = Output(UInt(4.W))
val lsu_axi_awprot = Output(UInt(3.W))
val lsu_axi_awqos = Output(UInt(4.W))
val lsu_axi_wvalid = Output(Bool())
val lsu_axi_wready = Input(Bool())
val lsu_axi_wdata = Output(UInt(64.W))
val lsu_axi_wstrb = Output(UInt(8.W))
val lsu_axi_wlast = Output(Bool())
val lsu_axi_bvalid = Input(Bool())
val lsu_axi_bready = Output(Bool())
val lsu_axi_bresp = Input(UInt(2.W))
val lsu_axi_bid = Input(UInt(LSU_BUS_TAG.W))
val lsu_axi_arvalid = Output(Bool())
val lsu_axi_arready = Input(Bool())
val lsu_axi_arid = Output(UInt(LSU_BUS_TAG.W))
val lsu_axi_araddr = Output(UInt(32.W))
val lsu_axi_arregion = Output(UInt(4.W))
val lsu_axi_arlen = Output(UInt(8.W))
val lsu_axi_arsize = Output(UInt(3.W))
val lsu_axi_arburst = Output(UInt(2.W))
val lsu_axi_arlock = Output(Bool())
val lsu_axi_arcache = Output(UInt(4.W))
val lsu_axi_arprot = Output(UInt(3.W))
val lsu_axi_arqos = Output(UInt(4.W))
val lsu_axi_rvalid = Input(Bool())
val lsu_axi_rready = Output(Bool())
val lsu_axi_rid = Input(UInt(LSU_BUS_TAG.W))
val lsu_axi_rdata = Input(UInt(64.W))
val lsu_axi_rresp = Input(UInt(2.W))
val lsu_axi_rlast = Input(Bool())
// AXI IFU Signals
val ifu_axi_awvalid = Output(Bool())
val ifu_axi_awready = Input(Bool())
val ifu_axi_awid = Output(UInt(IFU_BUS_TAG.W))
val ifu_axi_awaddr = Output(UInt(32.W))
val ifu_axi_awregion = Output(UInt(4.W))
val ifu_axi_awlen = Output(UInt(8.W))
val ifu_axi_awsize = Output(UInt(3.W))
val ifu_axi_awburst = Output(UInt(2.W))
val ifu_axi_awlock = Output(Bool())
val ifu_axi_awcache = Output(UInt(4.W))
val ifu_axi_awprot = Output(UInt(3.W))
val ifu_axi_awqos = Output(UInt(4.W))
val ifu_axi_wvalid = Output(Bool())
val ifu_axi_wready = Input(Bool())
val ifu_axi_wdata = Output(UInt(64.W))
val ifu_axi_wstrb = Output(UInt(8.W))
val ifu_axi_wlast = Output(Bool())
val ifu_axi_bvalid = Input(Bool())
val ifu_axi_bready = Output(Bool())
val ifu_axi_bresp = Input(UInt(2.W))
val ifu_axi_bid = Input(UInt(IFU_BUS_TAG.W))
val ifu_axi_arvalid = Output(Bool())
val ifu_axi_arready = Input(Bool())
val ifu_axi_arid = Output(UInt(IFU_BUS_TAG.W))
val ifu_axi_araddr = Output(UInt(32.W))
val ifu_axi_arregion = Output(UInt(4.W))
val ifu_axi_arlen = Output(UInt(8.W))
val ifu_axi_arsize = Output(UInt(3.W))
val ifu_axi_arburst = Output(UInt(2.W))
val ifu_axi_arlock = Output(Bool())
val ifu_axi_arcache = Output(UInt(4.W))
val ifu_axi_arprot = Output(UInt(3.W))
val ifu_axi_arqos = Output(UInt(4.W))
val ifu_axi_rvalid = Input(Bool())
val ifu_axi_rready = Output(Bool())
val ifu_axi_rid = Input(UInt(IFU_BUS_TAG.W))
val ifu_axi_rdata = Input(UInt(64.W))
val ifu_axi_rresp = Input(UInt(2.W))
val ifu_axi_rlast = Input(Bool())
// SB AXI Signals
val sb_axi_awvalid = Output(Bool())
val sb_axi_awready = Input(Bool())
val sb_axi_awid = Output(UInt(SB_BUS_TAG.W))
val sb_axi_awaddr = Output(UInt(32.W))
val sb_axi_awregion = Output(UInt(4.W))
val sb_axi_awlen = Output(UInt(8.W))
val sb_axi_awsize = Output(UInt(3.W))
val sb_axi_awburst = Output(UInt(2.W))
val sb_axi_awlock = Output(Bool())
val sb_axi_awcache = Output(UInt(4.W))
val sb_axi_awprot = Output(UInt(3.W))
val sb_axi_awqos = Output(UInt(4.W))
val sb_axi_wvalid = Output(Bool())
val sb_axi_wready = Input(Bool())
val sb_axi_wdata = Output(UInt(64.W))
val sb_axi_wstrb = Output(UInt(8.W))
val sb_axi_wlast = Output(Bool())
val sb_axi_bvalid = Input(Bool())
val sb_axi_bready = Output(Bool())
val sb_axi_bresp = Input(UInt(2.W))
val sb_axi_bid = Input(UInt(SB_BUS_TAG.W))
val sb_axi_arvalid = Output(Bool())
val sb_axi_arready = Input(Bool())
val sb_axi_arid = Output(UInt(SB_BUS_TAG.W))
val sb_axi_araddr = Output(UInt(32.W))
val sb_axi_arregion = Output(UInt(4.W))
val sb_axi_arlen = Output(UInt(8.W))
val sb_axi_arsize = Output(UInt(3.W))
val sb_axi_arburst = Output(UInt(2.W))
val sb_axi_arlock = Output(Bool())
val sb_axi_arcache = Output(UInt(4.W))
val sb_axi_arprot = Output(UInt(3.W))
val sb_axi_arqos = Output(UInt(4.W))
val sb_axi_rvalid = Input(Bool())
val sb_axi_rready = Output(Bool())
val sb_axi_rid = Input(UInt(SB_BUS_TAG.W))
val sb_axi_rdata = Input(UInt(64.W))
val sb_axi_rresp = Input(UInt(2.W))
val sb_axi_rlast = Input(Bool())
// DMA signals
val dma_axi_awvalid = Input(Bool())
val dma_axi_awready = Output(Bool())
val dma_axi_awid = Input(UInt(DMA_BUS_TAG.W))
val dma_axi_awaddr = Input(UInt(32.W))
val dma_axi_awsize = Input(UInt(3.W))
val dma_axi_awprot = Input(UInt(3.W))
val dma_axi_awlen = Input(UInt(8.W))
val dma_axi_awburst = Input(UInt(2.W))
val dma_axi_wvalid = Input(Bool())
val dma_axi_wready = Output(Bool())
val dma_axi_wdata = Input(UInt(64.W))
val dma_axi_wstrb = Input(UInt(8.W))
val dma_axi_wlast = Input(Bool())
val dma_axi_bvalid = Output(Bool())
val dma_axi_bready = Input(Bool())
val dma_axi_bresp = Output(UInt(2.W))
val dma_axi_bid = Output(UInt(DMA_BUS_TAG.W))
// AXI Read Channels
val dma_axi_arvalid = Input(Bool())
val dma_axi_arready = Output(Bool())
val dma_axi_arid = Input(UInt(DMA_BUS_TAG.W))
val dma_axi_araddr = Input(UInt(32.W))
val dma_axi_arsize = Input(UInt(3.W))
val dma_axi_arprot = Input(UInt(3.W))
val dma_axi_arlen = Input(UInt(8.W))
val dma_axi_arburst = Input(UInt(2.W))
val dma_axi_rvalid = Output(Bool())
val dma_axi_rready = Input(Bool())
val dma_axi_rid = Output(UInt(DMA_BUS_TAG.W))
val dma_axi_rdata = Output(UInt(64.W))
val dma_axi_rresp = Output(UInt(2.W))
val dma_axi_rlast = Output(Bool())
// AHB Lite Bus
// val haddr = Output(UInt(32.W))
// val hburst = Output(UInt(3.W))
// val hmastlock = Output(Bool())
// val hprot = Output(UInt(4.W))
// val hsize = Output(UInt(3.W))
// val htrans = Output(UInt(2.W))
// val hwrite = Output(Bool())
// val hrdata = Input(UInt(64.W))
// val hready = Input(Bool())
// val hresp = Input(Bool())
//
// // AHB Master
// val lsu_haddr = Output(UInt(32.W))
// val lsu_hburst = Output(UInt(3.W))
// val lsu_hmastlock = Output(Bool())
// val lsu_hprot = Output(UInt(4.W))
// val lsu_hsize = Output(UInt(3.W))
// val lsu_htrans = Output(UInt(2.W))
// val lsu_hwrite = Output(Bool())
// val lsu_hwdata = Output(UInt(64.W))
// val lsu_hrdata = Input(UInt(64.W))
// val lsu_hready = Input(Bool())
// val lsu_hresp = Input(Bool())
// System Bus Debug Master
// val sb_haddr = Output(UInt(32.W))
// val sb_hburst = Output(UInt(3.W))
// val sb_hmastlock = Output(Bool())
// val sb_hprot = Output(UInt(4.W))
// val sb_hsize = Output(UInt(3.W))
// val sb_htrans = Output(UInt(2.W))
// val sb_hwrite = Output(Bool())
// val sb_hwdata = Output(UInt(64.W))
// val sb_hrdata = Input(UInt(64.W))
// val sb_hready = Input(Bool())
// val sb_hresp = Input(Bool())
// DMA slave
val dma_hsel = Input(Bool())
val dma_haddr = Input(UInt(32.W))
val dma_hburst = Input(UInt(3.W))
val dma_hmastlock = Input(Bool())
val dma_hprot = Input(UInt(4.W))
val dma_hsize = Input(UInt(3.W))
val dma_htrans = Input(UInt(2.W))
val dma_hwrite = Input(Bool())
val dma_hwdata = Input(UInt(64.W))
val dma_hreadyin = Input(Bool())
val dma_hrdata = Output(UInt(64.W))
val dma_hreadyout = Output(Bool())
val dma_hresp = Output(Bool())
val lsu_bus_clk_en = Input(Bool())
val ifu_bus_clk_en = Input(Bool())
val dbg_bus_clk_en = Input(Bool())
val dma_bus_clk_en = Input(Bool())
val timer_int = Input(Bool())
val soft_int = Input(Bool())
val extintsrc_req = Input(UInt(PIC_TOTAL_INT.W))
val dec_tlu_perfcnt0 = Output(Bool())
val dec_tlu_perfcnt1 = Output(Bool())
val dec_tlu_perfcnt2 = Output(Bool())
val dec_tlu_perfcnt3 = Output(Bool())
val jtag_tck = Input(Clock())
val jtag_tms = Input(Bool())
val jtag_tdi = Input(Bool())
val jtag_trst_n = Input(Bool())
val jtag_tdo = Output(Bool())
val core_id = Input(UInt(28.W))
val mpc_debug_halt_req = Input(Bool())
val mpc_debug_run_req = Input(Bool())
val mpc_reset_run_req = Input(Bool())
val mpc_debug_halt_ack = Output(Bool())
val mpc_debug_run_ack = Output(Bool())
val debug_brkpt_status = Output(Bool())
val i_cpu_halt_req = Input(Bool())
val i_cpu_run_req = Input(Bool())
val o_cpu_halt_ack = Output(Bool())
val o_cpu_halt_status = Output(Bool())
val o_debug_mode_status = Output(Bool())
val o_cpu_run_ack = Output(Bool())
val mbist_mode = Input(Bool())
val scan_mode = Input(Bool())
// AHB signals
/*val haddr = Output(UInt(32.W))
val hburst = Output(UInt(3.W))
val hmastlock = Output(Bool())
val hprot = Output(UInt(4.W))
val hsize = Output(UInt(3.W))
val htrans = Output(UInt(2.W))
val hwrite = Output(Bool())
val hrdata = Input(UInt(64.W))
val hready = Input(Bool())
val hresp = Input(Bool())
// LSU AHB Master
val lsu_haddr = Output(UInt(32.W))
val lsu_hburst = Output(UInt(3.W))
val lsu_hmastlock = Output(Bool())
val lsu_hprot = Output(UInt(4.W))
val lsu_hsize = Output(UInt(3.W))
val lsu_htrans = Output(UInt(2.W))
val lsu_hwrite = Output(Bool())
val lsu_hwdata = Output(UInt(64.W))
val lsu_hrdata = Input(UInt(64.W))
val lsu_hready = Input(Bool())
val lsu_hresp = Input(Bool())
// Debug Syster Bus AHB
val sb_haddr = Output(UInt(32.W))
val sb_hburst = Output(UInt(3.W))
val sb_hmastlock = Output(Bool())
val sb_hprot = Output(UInt(4.W))
val sb_hsize = Output(UInt(3.W))
val sb_htrans = Output(UInt(2.W))
val sb_hwrite = Output(Bool())
val sb_hwdata = Output(UInt(64.W))
val sb_hrdata = Input(UInt(64.W))
val sb_hready = Input(Bool())
val sb_hresp = Input(Bool())
// DMA Slave
val dma_hsel = Input(Bool())
val dma_haddr = Input(UInt(32.W))
val dma_hburst = Input(UInt(3.W))
val dma_hmastlock = Input(Bool())
val dma_hprot = Input(UInt(4.W))
val dma_hsize = Input(UInt(3.W))
val dma_htrans = Input(UInt(2.W))
val dma_hwrite = Input(Bool())
val dma_hwdata = Input(UInt(64.W))
val dma_hreadyin = Input(Bool())
val dma_hrdata = Output(UInt(64.W))
val dma_hreadyout = Output(Bool())
val dma_hresp = Output(Bool())
*/
})
val mem = Module(new quasar.el2_mem())
val dmi_wrapper = Module(new dmi_wrapper())
val swerv = Module(new el2_swerv())
dmi_wrapper.io.trst_n := io.jtag_trst_n
dmi_wrapper.io.tck := io.jtag_tck
dmi_wrapper.io.tms := io.jtag_tms
dmi_wrapper.io.tdi := io.jtag_tdi
dmi_wrapper.io.core_clk := clock
dmi_wrapper.io.jtag_id := io.jtag_id
dmi_wrapper.io.rd_data := swerv.io.dmi_reg_rdata
dmi_wrapper.io.core_rst_n := io.dbg_rst_l
swerv.io.dmi_reg_wdata := dmi_wrapper.io.reg_wr_data
swerv.io.dmi_reg_addr := dmi_wrapper.io.reg_wr_addr
swerv.io.dmi_reg_en := dmi_wrapper.io.reg_en
swerv.io.dmi_reg_wr_en := dmi_wrapper.io.reg_wr_en
swerv.io.dmi_hard_reset := dmi_wrapper.io.dmi_hard_reset
io.jtag_tdo := dmi_wrapper.io.tdo
// Memory signals
mem.io.dccm_clk_override := swerv.io.dccm_clk_override
mem.io.icm_clk_override := swerv.io.icm_clk_override
mem.io.dec_tlu_core_ecc_disable := swerv.io.dec_tlu_core_ecc_disable
mem.io.dccm_wren := swerv.io.dccm_wren
mem.io.dccm_rden := swerv.io.dccm_rden
mem.io.dccm_wr_addr_lo := swerv.io.dccm_wr_addr_lo
mem.io.dccm_wr_addr_hi := swerv.io.dccm_wr_addr_hi
mem.io.dccm_rd_addr_lo := swerv.io.dccm_rd_addr_lo
mem.io.dccm_wr_data_lo := swerv.io.dccm_wr_data_lo
mem.io.dccm_wr_data_hi := swerv.io.dccm_wr_data_hi
swerv.io.dccm_rd_data_lo := mem.io.dccm_rd_data_lo
mem.io.dccm_rd_addr_hi := swerv.io.dccm_rd_addr_hi
mem.io.iccm_rw_addr := swerv.io.iccm_rw_addr
mem.io.iccm_buf_correct_ecc := swerv.io.iccm_buf_correct_ecc
mem.io.iccm_correction_state := swerv.io.iccm_correction_state
mem.io.iccm_wren := swerv.io.iccm_wren
mem.io.iccm_rden := swerv.io.iccm_rden
mem.io.iccm_wr_size := swerv.io.iccm_wr_size
mem.io.iccm_wr_data := swerv.io.iccm_wr_data
mem.io.ic_rw_addr := swerv.io.ic_rw_addr
mem.io.ic_tag_valid := swerv.io.ic_tag_valid
mem.io.ic_wr_en := swerv.io.ic_wr_en
mem.io.ic_rd_en := swerv.io.ic_rd_en
mem.io.ic_premux_data := swerv.io.ic_premux_data
mem.io.ic_sel_premux_data := swerv.io.ic_sel_premux_data
mem.io.ic_wr_data := swerv.io.ic_wr_data
mem.io.ic_debug_wr_data := swerv.io.ic_debug_wr_data
mem.io.ic_debug_addr := swerv.io.ic_debug_addr
mem.io.ic_debug_rd_en := swerv.io.ic_debug_rd_en
mem.io.ic_debug_wr_en := swerv.io.ic_debug_wr_en
mem.io.ic_debug_tag_array := swerv.io.ic_debug_tag_array
mem.io.ic_debug_way := swerv.io.ic_debug_way
mem.io.rst_l := reset
mem.io.clk := clock
mem.io.scan_mode := io.scan_mode
// Memory outputs
swerv.io.dbg_rst_l := io.dbg_rst_l
swerv.io.iccm_rd_data_ecc := mem.io.iccm_rd_data_ecc
swerv.io.dccm_rd_data_hi := mem.io.dccm_rd_data_hi
swerv.io.ic_rd_data := mem.io.ic_rd_data
swerv.io.ictag_debug_rd_data := mem.io.ictag_debug_rd_data
swerv.io.ic_eccerr := mem.io.ic_eccerr
swerv.io.ic_parerr := mem.io.ic_parerr
swerv.io.ic_rd_hit := mem.io.ic_rd_hit
swerv.io.ic_tag_perr := mem.io.ic_tag_perr
swerv.io.ic_debug_rd_data := mem.io.ic_debug_rd_data
swerv.io.iccm_rd_data := mem.io.iccm_rd_data
swerv.io.sb_hready := 0.U
swerv.io.hrdata := 0.U
swerv.io.sb_hresp := 0.U
swerv.io.lsu_hrdata := 0.U
swerv.io.lsu_hresp := 0.U
swerv.io.lsu_hready := 0.U
swerv.io.hready := 0.U
swerv.io.hresp := 0.U
swerv.io.sb_hrdata := 0.U
swerv.io.scan_mode := io.scan_mode
// SweRV Inputs
swerv.io.dbg_rst_l := io.dbg_rst_l
swerv.io.rst_vec := io.rst_vec
swerv.io.nmi_int := io.nmi_int
swerv.io.nmi_vec := io.nmi_vec
// external halt/run interface
swerv.io.i_cpu_halt_req := io.i_cpu_halt_req
swerv.io.i_cpu_run_req := io.i_cpu_run_req
swerv.io.core_id := io.core_id
// external MPC halt/run interface
swerv.io.mpc_debug_halt_req := io.mpc_debug_halt_req
swerv.io.mpc_debug_run_req := io.mpc_debug_run_req
swerv.io.mpc_reset_run_req := io.mpc_reset_run_req
//-------------------------- LSU AXI signals--------------------------
// AXI Write Channels
swerv.io.lsu_axi_awready := io.lsu_axi_awready
swerv.io.lsu_axi_wready := io.lsu_axi_wready
swerv.io.lsu_axi_bvalid := io.lsu_axi_bvalid
swerv.io.lsu_axi_bresp := io.lsu_axi_bresp
swerv.io.lsu_axi_bid := io.lsu_axi_bid
// AXI Read Channels
swerv.io.lsu_axi_arready := io.lsu_axi_arready
swerv.io.lsu_axi_rvalid := io.lsu_axi_rvalid
swerv.io.lsu_axi_rid := io.lsu_axi_rid
swerv.io.lsu_axi_rdata := io.lsu_axi_rdata
swerv.io.lsu_axi_rresp := io.lsu_axi_rresp
swerv.io.lsu_axi_rlast := io.lsu_axi_rlast
//-------------------------- IFU AXI signals--------------------------
// AXI Write Channels
swerv.io.ifu_axi_awready := io.ifu_axi_awready
swerv.io.ifu_axi_wready := io.ifu_axi_wready
swerv.io.ifu_axi_bvalid := io.ifu_axi_bvalid
swerv.io.ifu_axi_bresp := io.ifu_axi_bresp
swerv.io.ifu_axi_bid := io.ifu_axi_bid
// AXI Read Channels
swerv.io.ifu_axi_arready := io.ifu_axi_arready
swerv.io.ifu_axi_rvalid := io.ifu_axi_rvalid
swerv.io.ifu_axi_rid := io.ifu_axi_rid
swerv.io.ifu_axi_rdata := io.ifu_axi_rdata
swerv.io.ifu_axi_rresp := io.ifu_axi_rresp
swerv.io.ifu_axi_rlast := io.ifu_axi_rlast
//-------------------------- SB AXI signals--------------------------
// AXI Write Channels
swerv.io.sb_axi_awready := io.sb_axi_awready
swerv.io.sb_axi_wready := io.sb_axi_wready
swerv.io.sb_axi_bvalid := io.sb_axi_bvalid
swerv.io.sb_axi_bresp := io.sb_axi_bresp
swerv.io.sb_axi_bid := io.sb_axi_bid
// AXI Read Channels
swerv.io.sb_axi_arready := io.sb_axi_arready
swerv.io.sb_axi_rvalid := io.sb_axi_rvalid
swerv.io.sb_axi_rid := io.sb_axi_rid
swerv.io.sb_axi_rdata := io.sb_axi_rdata
swerv.io.sb_axi_rresp := io.sb_axi_rresp
swerv.io.sb_axi_rlast := io.sb_axi_rlast
//-------------------------- DMA AXI signals--------------------------
// AXI Write Channels
swerv.io.dma_axi_awvalid := io.dma_axi_awvalid
swerv.io.dma_axi_awid := io.dma_axi_awid
swerv.io.dma_axi_awaddr := io.dma_axi_awaddr
swerv.io.dma_axi_awsize := io.dma_axi_awsize
swerv.io.dma_axi_awprot := io.dma_axi_awprot
swerv.io.dma_axi_awlen := io.dma_axi_awlen
swerv.io.dma_axi_awburst := io.dma_axi_awburst
swerv.io.dma_axi_wvalid := io.dma_axi_wvalid
swerv.io.dma_axi_wdata := io.dma_axi_wdata
swerv.io.dma_axi_wstrb := io.dma_axi_wstrb
swerv.io.dma_axi_wlast := io.dma_axi_wlast
swerv.io.dma_axi_bready := io.dma_axi_bready
// AXI Read Channels
swerv.io.dma_axi_arvalid := io.dma_axi_arvalid
swerv.io.dma_axi_arid := io.dma_axi_arid
swerv.io.dma_axi_araddr := io.dma_axi_araddr
swerv.io.dma_axi_arsize := io.dma_axi_arsize
swerv.io.dma_axi_arprot := io.dma_axi_arprot
swerv.io.dma_axi_arlen := io.dma_axi_arlen
swerv.io.dma_axi_arburst := io.dma_axi_arburst
swerv.io.dma_axi_rready := io.dma_axi_rready
// DMA Slave
swerv.io.dma_hsel := io.dma_hsel
swerv.io.dma_haddr := io.dma_haddr
swerv.io.dma_hburst := io.dma_hburst
swerv.io.dma_hmastlock := io.dma_hmastlock
swerv.io.dma_hprot := io.dma_hprot
swerv.io.dma_hsize := io.dma_hsize
swerv.io.dma_htrans := io.dma_htrans
swerv.io.dma_hwrite := io.dma_hwrite
swerv.io.dma_hwdata := io.dma_hwdata
swerv.io.dma_hreadyin := io.dma_hreadyin
swerv.io.lsu_bus_clk_en
swerv.io.ifu_bus_clk_en
swerv.io.dbg_bus_clk_en
swerv.io.dma_bus_clk_en
swerv.io.dmi_reg_en
swerv.io.dmi_reg_addr
swerv.io.dmi_reg_wr_en
swerv.io.dmi_reg_wdata
swerv.io.dmi_hard_reset
swerv.io.extintsrc_req
swerv.io.timer_int
swerv.io.soft_int
swerv.io.scan_mode
swerv.io.lsu_bus_clk_en := io.lsu_bus_clk_en
swerv.io.ifu_bus_clk_en := io.ifu_bus_clk_en
swerv.io.dbg_bus_clk_en := io.dbg_bus_clk_en
swerv.io.dma_bus_clk_en := io.dma_bus_clk_en
swerv.io.timer_int := io.timer_int
swerv.io.soft_int := io.soft_int
swerv.io.extintsrc_req := io.extintsrc_req
// Outputs
val core_rst_l = swerv.io.core_rst_l
io.trace_rv_i_insn_ip := swerv.io.trace_rv_i_insn_ip
io.trace_rv_i_address_ip := swerv.io.trace_rv_i_address_ip
io.trace_rv_i_valid_ip := swerv.io.trace_rv_i_valid_ip
io.trace_rv_i_exception_ip := swerv.io.trace_rv_i_exception_ip
io.trace_rv_i_ecause_ip := swerv.io.trace_rv_i_ecause_ip
io.trace_rv_i_interrupt_ip := swerv.io.trace_rv_i_interrupt_ip
io.trace_rv_i_tval_ip := swerv.io.trace_rv_i_tval_ip
// external halt/run interface
io.o_cpu_halt_ack := swerv.io.o_cpu_halt_ack
io.o_cpu_halt_status := swerv.io.o_cpu_halt_status
io.o_cpu_run_ack := swerv.io.o_cpu_run_ack
io.o_debug_mode_status := swerv.io.o_debug_mode_status
io.mpc_debug_halt_ack := swerv.io.mpc_debug_halt_ack
io.mpc_debug_run_ack := swerv.io.mpc_debug_run_ack
io.debug_brkpt_status := swerv.io.debug_brkpt_status
io.dec_tlu_perfcnt0 := swerv.io.dec_tlu_perfcnt0
io.dec_tlu_perfcnt1 := swerv.io.dec_tlu_perfcnt1
io.dec_tlu_perfcnt2 := swerv.io.dec_tlu_perfcnt2
io.dec_tlu_perfcnt3 := swerv.io.dec_tlu_perfcnt3
//-------------------------- LSU AXI signals--------------------------
// AXI Write Channels
io.lsu_axi_awvalid := swerv.io.lsu_axi_awvalid
io.lsu_axi_awid := swerv.io.lsu_axi_awid
io.lsu_axi_awaddr := swerv.io.lsu_axi_awaddr
io.lsu_axi_awregion := swerv.io.lsu_axi_awregion
io.lsu_axi_awlen := swerv.io.lsu_axi_awlen
io.lsu_axi_awsize := swerv.io.lsu_axi_awsize
io.lsu_axi_awburst := swerv.io.lsu_axi_awburst
io.lsu_axi_awlock := swerv.io.lsu_axi_awlock
io.lsu_axi_awcache := swerv.io.lsu_axi_awcache
io.lsu_axi_awprot := swerv.io.lsu_axi_awprot
io.lsu_axi_awqos := swerv.io.lsu_axi_awqos
io.lsu_axi_wvalid := swerv.io.lsu_axi_wvalid
io.lsu_axi_wdata := swerv.io.lsu_axi_wdata
io.lsu_axi_wstrb := swerv.io.lsu_axi_wstrb
io.lsu_axi_wlast := swerv.io.lsu_axi_wlast
io.lsu_axi_bready := swerv.io.lsu_axi_bready
// AXI Read Channels
io.lsu_axi_arvalid := swerv.io.lsu_axi_arvalid
io.lsu_axi_arid := swerv.io.lsu_axi_arid
io.lsu_axi_araddr := swerv.io.lsu_axi_araddr
io.lsu_axi_arregion := swerv.io.lsu_axi_arregion
io.lsu_axi_arlen := swerv.io.lsu_axi_arlen
io.lsu_axi_arsize := swerv.io.lsu_axi_arsize
io.lsu_axi_arburst := swerv.io.lsu_axi_arburst
io.lsu_axi_arlock := swerv.io.lsu_axi_arlock
io.lsu_axi_arcache := swerv.io.lsu_axi_arcache
io.lsu_axi_arprot := swerv.io.lsu_axi_arprot
io.lsu_axi_arqos := swerv.io.lsu_axi_arqos
io.lsu_axi_rready := swerv.io.lsu_axi_rready
// AXI Write Channels
io.ifu_axi_awvalid := swerv.io.ifu_axi_awvalid
io.ifu_axi_awid := swerv.io.ifu_axi_awid
io.ifu_axi_awaddr := swerv.io.ifu_axi_awaddr
io.ifu_axi_awregion := swerv.io.ifu_axi_awregion
io.ifu_axi_awlen := swerv.io.ifu_axi_awlen
io.ifu_axi_awsize := swerv.io.ifu_axi_awsize
io.ifu_axi_awburst := swerv.io.ifu_axi_awburst
io.ifu_axi_awlock := swerv.io.ifu_axi_awlock
io.ifu_axi_awcache := swerv.io.ifu_axi_awcache
io.ifu_axi_awprot := swerv.io.ifu_axi_awprot
io.ifu_axi_awqos := swerv.io.ifu_axi_awqos
io.ifu_axi_wvalid := swerv.io.ifu_axi_wvalid
io.ifu_axi_wdata := swerv.io.ifu_axi_wdata
io.ifu_axi_wstrb := swerv.io.ifu_axi_wstrb
io.ifu_axi_wlast := swerv.io.ifu_axi_wlast
io.ifu_axi_bready := swerv.io.ifu_axi_bready
// AXI Read Channels
io.ifu_axi_arvalid := swerv.io.ifu_axi_arvalid
io.ifu_axi_arid := swerv.io.ifu_axi_arid
io.ifu_axi_araddr := swerv.io.ifu_axi_araddr
io.ifu_axi_arregion := swerv.io.ifu_axi_arregion
io.ifu_axi_arlen := swerv.io.ifu_axi_arlen
io.ifu_axi_arsize := swerv.io.ifu_axi_arsize
io.ifu_axi_arburst := swerv.io.ifu_axi_arburst
io.ifu_axi_arlock := swerv.io.ifu_axi_arlock
io.ifu_axi_arcache := swerv.io.ifu_axi_arcache
io.ifu_axi_arprot := swerv.io.ifu_axi_arprot
io.ifu_axi_arqos := swerv.io.ifu_axi_arqos
io.ifu_axi_rready := swerv.io.ifu_axi_rready
//-------------------------- SB AXI signals--------------------------
// AXI Write Channels
io.sb_axi_awvalid := swerv.io.sb_axi_awvalid
io.sb_axi_awid := swerv.io.sb_axi_awid
io.sb_axi_awaddr := swerv.io.sb_axi_awaddr
io.sb_axi_awregion := swerv.io.sb_axi_awregion
io.sb_axi_awlen := swerv.io.sb_axi_awlen
io.sb_axi_awsize := swerv.io.sb_axi_awsize
io.sb_axi_awburst := swerv.io.sb_axi_awburst
io.sb_axi_awlock := swerv.io.sb_axi_awlock
io.sb_axi_awcache := swerv.io.sb_axi_awcache
io.sb_axi_awprot := swerv.io.sb_axi_awprot
io.sb_axi_awqos := swerv.io.sb_axi_awqos
io.sb_axi_wvalid:= swerv.io.sb_axi_wvalid
io.sb_axi_wdata := swerv.io.sb_axi_wdata
io.sb_axi_wstrb := swerv.io.sb_axi_wstrb
io.sb_axi_wlast := swerv.io.sb_axi_wlast
io.sb_axi_bready := swerv.io.sb_axi_bready
// AXI Read Channels
io.sb_axi_arvalid := swerv.io.sb_axi_arvalid
io.sb_axi_arid := swerv.io.sb_axi_arid
io.sb_axi_araddr := swerv.io.sb_axi_araddr
io.sb_axi_arregion := swerv.io.sb_axi_arregion
io.sb_axi_arlen := swerv.io.sb_axi_arlen
io.sb_axi_arsize := swerv.io.sb_axi_arsize
io.sb_axi_arburst := swerv.io.sb_axi_arburst
io.sb_axi_arlock := swerv.io.sb_axi_arlock
io.sb_axi_arcache := swerv.io.sb_axi_arcache
io.sb_axi_arprot := swerv.io.sb_axi_arprot
io.sb_axi_arqos := swerv.io.sb_axi_arqos
io.sb_axi_rready := swerv.io.sb_axi_rready
//-------------------------- DMA AXI signals--------------------------
// AXI Write Channels
io.dma_axi_awready := swerv.io.dma_axi_awready
io.dma_axi_wready := swerv.io.dma_axi_wready
io.dma_axi_bvalid := swerv.io.dma_axi_bvalid
io.dma_axi_bresp := swerv.io.dma_axi_bresp
io.dma_axi_bid := swerv.io.dma_axi_bid
// AXI Read Channels
io.dma_axi_arready := swerv.io.dma_axi_arready
io.dma_axi_rvalid := swerv.io.dma_axi_rvalid
io.dma_axi_rid := swerv.io.dma_axi_rid
io.dma_axi_rdata := swerv.io.dma_axi_rdata
io.dma_axi_rresp := swerv.io.dma_axi_rresp
io.dma_axi_rlast := swerv.io.dma_axi_rlast
// DMA Slave
io.dma_hrdata := swerv.io.dma_hrdata
io.dma_hreadyout := swerv.io.dma_hreadyout
io.dma_hresp := swerv.io.dma_hresp
}
object SWERV_Wrp extends App {
println((new chisel3.stage.ChiselStage).emitVerilog(new el2_swerv_wrapper()))
}