2021-12-16 20:07:50 +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.
|
|
|
|
//
|
|
|
|
|
2022-02-14 20:32:21 +08:00
|
|
|
module soc_top (
|
|
|
|
input clk,
|
|
|
|
input dbg_rst,
|
|
|
|
input rst,
|
|
|
|
output jtag_tdo,
|
|
|
|
input jtag_tck,
|
|
|
|
input jtag_tms,
|
|
|
|
input jtag_tdi,
|
|
|
|
input jtag_trst_n
|
2021-12-16 20:07:50 +08:00
|
|
|
);
|
|
|
|
|
2022-02-17 19:35:01 +08:00
|
|
|
logic nmi_int;
|
|
|
|
|
|
|
|
logic [ 31:0] reset_vector;
|
|
|
|
logic [ 31:0] nmi_vector;
|
|
|
|
logic [ 31:1] jtag_id;
|
|
|
|
|
|
|
|
logic [ 31:0] ic_haddr;
|
|
|
|
logic [ 2:0] ic_hburst;
|
|
|
|
logic ic_hmastlock;
|
|
|
|
logic [ 3:0] ic_hprot;
|
|
|
|
logic [ 2:0] ic_hsize;
|
|
|
|
logic [ 1:0] ic_htrans;
|
|
|
|
logic ic_hwrite;
|
|
|
|
logic [ 63:0] ic_hrdata;
|
|
|
|
logic ic_hready;
|
|
|
|
logic ic_hresp;
|
|
|
|
|
|
|
|
logic [ 31:0] lsu_haddr;
|
|
|
|
logic [ 2:0] lsu_hburst;
|
|
|
|
logic lsu_hmastlock;
|
|
|
|
logic [ 3:0] lsu_hprot;
|
|
|
|
logic [ 2:0] lsu_hsize;
|
|
|
|
logic [ 1:0] lsu_htrans;
|
|
|
|
logic lsu_hwrite;
|
|
|
|
logic [ 63:0] lsu_hrdata;
|
|
|
|
logic [ 63:0] lsu_hwdata;
|
|
|
|
logic lsu_hready;
|
|
|
|
logic lsu_hresp;
|
|
|
|
|
|
|
|
logic [ 31:0] sb_haddr;
|
|
|
|
logic [ 2:0] sb_hburst;
|
|
|
|
logic sb_hmastlock;
|
|
|
|
logic [ 3:0] sb_hprot;
|
|
|
|
logic [ 2:0] sb_hsize;
|
|
|
|
logic [ 1:0] sb_htrans;
|
|
|
|
logic sb_hwrite;
|
|
|
|
|
|
|
|
logic [ 63:0] sb_hrdata;
|
|
|
|
logic [ 63:0] sb_hwdata;
|
|
|
|
logic sb_hready;
|
|
|
|
logic sb_hresp;
|
|
|
|
|
|
|
|
logic [ 63:0] trace_rv_i_insn_ip;
|
|
|
|
logic [ 63:0] trace_rv_i_address_ip;
|
|
|
|
logic [ 2:0] trace_rv_i_valid_ip;
|
|
|
|
logic [ 2:0] trace_rv_i_exception_ip;
|
|
|
|
logic [ 4:0] trace_rv_i_ecause_ip;
|
|
|
|
logic [ 2:0] trace_rv_i_interrupt_ip;
|
|
|
|
logic [ 31:0] trace_rv_i_tval_ip;
|
|
|
|
|
|
|
|
logic o_debug_mode_status;
|
|
|
|
logic [ 1:0] dec_tlu_perfcnt0;
|
|
|
|
logic [ 1:0] dec_tlu_perfcnt1;
|
|
|
|
logic [ 1:0] dec_tlu_perfcnt2;
|
|
|
|
logic [ 1:0] dec_tlu_perfcnt3;
|
|
|
|
|
|
|
|
logic o_cpu_halt_ack;
|
|
|
|
logic o_cpu_halt_status;
|
|
|
|
logic o_cpu_run_ack;
|
|
|
|
|
|
|
|
logic mailbox_write;
|
|
|
|
logic [ 63:0] dma_hrdata;
|
|
|
|
logic [ 63:0] dma_hwdata;
|
|
|
|
logic dma_hready;
|
|
|
|
logic dma_hresp;
|
|
|
|
|
|
|
|
logic mpc_debug_halt_req;
|
|
|
|
logic mpc_debug_run_req;
|
|
|
|
logic mpc_reset_run_req;
|
|
|
|
logic mpc_debug_halt_ack;
|
|
|
|
logic mpc_debug_run_ack;
|
|
|
|
logic debug_brkpt_status;
|
|
|
|
|
|
|
|
wire dma_hready_out;
|
|
|
|
|
|
|
|
|
|
|
|
//-------------------------- LSU AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
wire lsu_axi_awvalid;
|
|
|
|
wire lsu_axi_awready;
|
|
|
|
wire [`RV_LSU_BUS_TAG-1:0] lsu_axi_awid;
|
|
|
|
wire [ 31:0] lsu_axi_awaddr;
|
|
|
|
wire [ 3:0] lsu_axi_awregion;
|
|
|
|
wire [ 7:0] lsu_axi_awlen;
|
|
|
|
wire [ 2:0] lsu_axi_awsize;
|
|
|
|
wire [ 1:0] lsu_axi_awburst;
|
|
|
|
wire lsu_axi_awlock;
|
|
|
|
wire [ 3:0] lsu_axi_awcache;
|
|
|
|
wire [ 2:0] lsu_axi_awprot;
|
|
|
|
wire [ 3:0] lsu_axi_awqos;
|
|
|
|
|
|
|
|
wire lsu_axi_wvalid;
|
|
|
|
wire lsu_axi_wready;
|
|
|
|
wire [ 63:0] lsu_axi_wdata;
|
|
|
|
wire [ 7:0] lsu_axi_wstrb;
|
|
|
|
wire lsu_axi_wlast;
|
|
|
|
|
|
|
|
wire lsu_axi_bvalid;
|
|
|
|
wire lsu_axi_bready;
|
|
|
|
wire [ 1:0] lsu_axi_bresp;
|
|
|
|
wire [`RV_LSU_BUS_TAG-1:0] lsu_axi_bid;
|
|
|
|
|
|
|
|
// AXI Read Channels
|
|
|
|
wire lsu_axi_arvalid;
|
|
|
|
wire lsu_axi_arready;
|
|
|
|
wire [`RV_LSU_BUS_TAG-1:0] lsu_axi_arid;
|
|
|
|
wire [ 31:0] lsu_axi_araddr;
|
|
|
|
wire [ 3:0] lsu_axi_arregion;
|
|
|
|
wire [ 7:0] lsu_axi_arlen;
|
|
|
|
wire [ 2:0] lsu_axi_arsize;
|
|
|
|
wire [ 1:0] lsu_axi_arburst;
|
|
|
|
wire lsu_axi_arlock;
|
|
|
|
wire [ 3:0] lsu_axi_arcache;
|
|
|
|
wire [ 2:0] lsu_axi_arprot;
|
|
|
|
wire [ 3:0] lsu_axi_arqos;
|
|
|
|
|
|
|
|
wire lsu_axi_rvalid;
|
|
|
|
wire lsu_axi_rready;
|
|
|
|
wire [`RV_LSU_BUS_TAG-1:0] lsu_axi_rid;
|
|
|
|
wire [ 63:0] lsu_axi_rdata;
|
|
|
|
wire [ 1:0] lsu_axi_rresp;
|
|
|
|
wire lsu_axi_rlast;
|
|
|
|
|
|
|
|
//-------------------------- IFU AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
wire ifu_axi_awvalid;
|
|
|
|
wire ifu_axi_awready;
|
|
|
|
wire [`RV_IFU_BUS_TAG-1:0] ifu_axi_awid;
|
|
|
|
wire [ 31:0] ifu_axi_awaddr;
|
|
|
|
wire [ 3:0] ifu_axi_awregion;
|
|
|
|
wire [ 7:0] ifu_axi_awlen;
|
|
|
|
wire [ 2:0] ifu_axi_awsize;
|
|
|
|
wire [ 1:0] ifu_axi_awburst;
|
|
|
|
wire ifu_axi_awlock;
|
|
|
|
wire [ 3:0] ifu_axi_awcache;
|
|
|
|
wire [ 2:0] ifu_axi_awprot;
|
|
|
|
wire [ 3:0] ifu_axi_awqos;
|
|
|
|
|
|
|
|
wire ifu_axi_wvalid;
|
|
|
|
wire ifu_axi_wready;
|
|
|
|
wire [ 63:0] ifu_axi_wdata;
|
|
|
|
wire [ 7:0] ifu_axi_wstrb;
|
|
|
|
wire ifu_axi_wlast;
|
|
|
|
|
|
|
|
wire ifu_axi_bvalid;
|
|
|
|
wire ifu_axi_bready;
|
|
|
|
wire [ 1:0] ifu_axi_bresp;
|
|
|
|
wire [`RV_IFU_BUS_TAG-1:0] ifu_axi_bid;
|
|
|
|
|
|
|
|
// AXI Read Channels
|
|
|
|
wire ifu_axi_arvalid;
|
|
|
|
wire ifu_axi_arready;
|
|
|
|
wire [`RV_IFU_BUS_TAG-1:0] ifu_axi_arid;
|
|
|
|
wire [ 31:0] ifu_axi_araddr;
|
|
|
|
wire [ 3:0] ifu_axi_arregion;
|
|
|
|
wire [ 7:0] ifu_axi_arlen;
|
|
|
|
wire [ 2:0] ifu_axi_arsize;
|
|
|
|
wire [ 1:0] ifu_axi_arburst;
|
|
|
|
wire ifu_axi_arlock;
|
|
|
|
wire [ 3:0] ifu_axi_arcache;
|
|
|
|
wire [ 2:0] ifu_axi_arprot;
|
|
|
|
wire [ 3:0] ifu_axi_arqos;
|
|
|
|
|
|
|
|
wire ifu_axi_rvalid;
|
|
|
|
wire ifu_axi_rready;
|
|
|
|
wire [`RV_IFU_BUS_TAG-1:0] ifu_axi_rid;
|
|
|
|
wire [ 63:0] ifu_axi_rdata;
|
|
|
|
wire [ 1:0] ifu_axi_rresp;
|
|
|
|
wire ifu_axi_rlast;
|
|
|
|
|
|
|
|
//-------------------------- SB AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
wire sb_axi_awvalid;
|
|
|
|
wire sb_axi_awready;
|
|
|
|
wire [ `RV_SB_BUS_TAG-1:0] sb_axi_awid;
|
|
|
|
wire [ 31:0] sb_axi_awaddr;
|
|
|
|
wire [ 3:0] sb_axi_awregion;
|
|
|
|
wire [ 7:0] sb_axi_awlen;
|
|
|
|
wire [ 2:0] sb_axi_awsize;
|
|
|
|
wire [ 1:0] sb_axi_awburst;
|
|
|
|
wire sb_axi_awlock;
|
|
|
|
wire [ 3:0] sb_axi_awcache;
|
|
|
|
wire [ 2:0] sb_axi_awprot;
|
|
|
|
wire [ 3:0] sb_axi_awqos;
|
|
|
|
|
|
|
|
wire sb_axi_wvalid;
|
|
|
|
wire sb_axi_wready;
|
|
|
|
wire [ 63:0] sb_axi_wdata;
|
|
|
|
wire [ 7:0] sb_axi_wstrb;
|
|
|
|
wire sb_axi_wlast;
|
|
|
|
|
|
|
|
wire sb_axi_bvalid;
|
|
|
|
wire sb_axi_bready;
|
|
|
|
wire [ 1:0] sb_axi_bresp;
|
|
|
|
wire [ `RV_SB_BUS_TAG-1:0] sb_axi_bid;
|
|
|
|
|
|
|
|
// AXI Read Channels
|
|
|
|
wire sb_axi_arvalid;
|
|
|
|
wire sb_axi_arready;
|
|
|
|
wire [ `RV_SB_BUS_TAG-1:0] sb_axi_arid;
|
|
|
|
wire [ 31:0] sb_axi_araddr;
|
|
|
|
wire [ 3:0] sb_axi_arregion;
|
|
|
|
wire [ 7:0] sb_axi_arlen;
|
|
|
|
wire [ 2:0] sb_axi_arsize;
|
|
|
|
wire [ 1:0] sb_axi_arburst;
|
|
|
|
wire sb_axi_arlock;
|
|
|
|
wire [ 3:0] sb_axi_arcache;
|
|
|
|
wire [ 2:0] sb_axi_arprot;
|
|
|
|
wire [ 3:0] sb_axi_arqos;
|
|
|
|
|
|
|
|
wire sb_axi_rvalid;
|
|
|
|
wire sb_axi_rready;
|
|
|
|
wire [ `RV_SB_BUS_TAG-1:0] sb_axi_rid;
|
|
|
|
wire [ 63:0] sb_axi_rdata;
|
|
|
|
wire [ 1:0] sb_axi_rresp;
|
|
|
|
wire sb_axi_rlast;
|
|
|
|
|
|
|
|
//-------------------------- DMA AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
wire dma_axi_awvalid;
|
|
|
|
wire dma_axi_awready;
|
|
|
|
wire [`RV_DMA_BUS_TAG-1:0] dma_axi_awid;
|
|
|
|
wire [ 31:0] dma_axi_awaddr;
|
|
|
|
wire [ 2:0] dma_axi_awsize;
|
|
|
|
wire [ 2:0] dma_axi_awprot;
|
|
|
|
wire [ 7:0] dma_axi_awlen;
|
|
|
|
wire [ 1:0] dma_axi_awburst;
|
|
|
|
|
|
|
|
|
|
|
|
wire dma_axi_wvalid;
|
|
|
|
wire dma_axi_wready;
|
|
|
|
wire [ 63:0] dma_axi_wdata;
|
|
|
|
wire [ 7:0] dma_axi_wstrb;
|
|
|
|
wire dma_axi_wlast;
|
|
|
|
|
|
|
|
wire dma_axi_bvalid;
|
|
|
|
wire dma_axi_bready;
|
|
|
|
wire [ 1:0] dma_axi_bresp;
|
|
|
|
wire [`RV_DMA_BUS_TAG-1:0] dma_axi_bid;
|
|
|
|
|
|
|
|
// AXI Read Channels
|
|
|
|
wire dma_axi_arvalid;
|
|
|
|
wire dma_axi_arready;
|
|
|
|
wire [`RV_DMA_BUS_TAG-1:0] dma_axi_arid;
|
|
|
|
wire [ 31:0] dma_axi_araddr;
|
|
|
|
wire [ 2:0] dma_axi_arsize;
|
|
|
|
wire [ 2:0] dma_axi_arprot;
|
|
|
|
wire [ 7:0] dma_axi_arlen;
|
|
|
|
wire [ 1:0] dma_axi_arburst;
|
|
|
|
|
|
|
|
wire dma_axi_rvalid;
|
|
|
|
wire dma_axi_rready;
|
|
|
|
wire [`RV_DMA_BUS_TAG-1:0] dma_axi_rid;
|
|
|
|
wire [ 63:0] dma_axi_rdata;
|
|
|
|
wire [ 1:0] dma_axi_rresp;
|
|
|
|
wire dma_axi_rlast;
|
|
|
|
|
|
|
|
wire lmem_axi_arvalid;
|
|
|
|
wire lmem_axi_arready;
|
|
|
|
|
|
|
|
wire lmem_axi_rvalid;
|
|
|
|
wire [`RV_LSU_BUS_TAG-1:0] lmem_axi_rid;
|
|
|
|
wire [ 1:0] lmem_axi_rresp;
|
|
|
|
wire [ 63:0] lmem_axi_rdata;
|
|
|
|
wire lmem_axi_rlast;
|
|
|
|
wire lmem_axi_rready;
|
|
|
|
|
|
|
|
wire lmem_axi_awvalid;
|
|
|
|
wire lmem_axi_awready;
|
|
|
|
|
|
|
|
wire lmem_axi_wvalid;
|
|
|
|
wire lmem_axi_wready;
|
|
|
|
|
|
|
|
wire [ 1:0] lmem_axi_bresp;
|
|
|
|
wire lmem_axi_bvalid;
|
|
|
|
wire [`RV_LSU_BUS_TAG-1:0] lmem_axi_bid;
|
|
|
|
wire lmem_axi_bready;
|
|
|
|
|
2022-02-14 20:32:21 +08:00
|
|
|
|
|
|
|
initial begin
|
|
|
|
jtag_id[31:28] = 4'b1;
|
|
|
|
jtag_id[27:12] = '0;
|
|
|
|
jtag_id[11:1] = 11'h45;
|
|
|
|
reset_vector = 32'h0;
|
|
|
|
nmi_vector = 32'hee000000;
|
|
|
|
nmi_int = 0;
|
|
|
|
|
|
|
|
$readmemh("program.hex", lmem.mem);
|
|
|
|
$readmemh("program.hex", imem.mem);
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
swerv_wrapper rvtop (
|
|
|
|
.rst_l (rst),
|
|
|
|
.dbg_rst_l(dbg_rst),
|
|
|
|
.clk (clk),
|
|
|
|
.rst_vec (reset_vector[31:1]),
|
|
|
|
.nmi_int (nmi_int),
|
|
|
|
.nmi_vec (nmi_vector[31:1]),
|
|
|
|
.jtag_id (jtag_id[31:1]),
|
|
|
|
|
2022-02-17 19:35:01 +08:00
|
|
|
//-------------------------- LSU AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
.lsu_axi_awvalid (lsu_axi_awvalid),
|
|
|
|
.lsu_axi_awready (lsu_axi_awready),
|
|
|
|
.lsu_axi_awid (lsu_axi_awid),
|
|
|
|
.lsu_axi_awaddr (lsu_axi_awaddr),
|
|
|
|
.lsu_axi_awregion(lsu_axi_awregion),
|
|
|
|
.lsu_axi_awlen (lsu_axi_awlen),
|
|
|
|
.lsu_axi_awsize (lsu_axi_awsize),
|
|
|
|
.lsu_axi_awburst (lsu_axi_awburst),
|
|
|
|
.lsu_axi_awlock (lsu_axi_awlock),
|
|
|
|
.lsu_axi_awcache (lsu_axi_awcache),
|
|
|
|
.lsu_axi_awprot (lsu_axi_awprot),
|
|
|
|
.lsu_axi_awqos (lsu_axi_awqos),
|
|
|
|
|
|
|
|
.lsu_axi_wvalid(lsu_axi_wvalid),
|
|
|
|
.lsu_axi_wready(lsu_axi_wready),
|
|
|
|
.lsu_axi_wdata (lsu_axi_wdata),
|
|
|
|
.lsu_axi_wstrb (lsu_axi_wstrb),
|
|
|
|
.lsu_axi_wlast (lsu_axi_wlast),
|
|
|
|
|
|
|
|
.lsu_axi_bvalid(lsu_axi_bvalid),
|
|
|
|
.lsu_axi_bready(lsu_axi_bready),
|
|
|
|
.lsu_axi_bresp (lsu_axi_bresp),
|
|
|
|
.lsu_axi_bid (lsu_axi_bid),
|
|
|
|
|
|
|
|
|
|
|
|
.lsu_axi_arvalid (lsu_axi_arvalid),
|
|
|
|
.lsu_axi_arready (lsu_axi_arready),
|
|
|
|
.lsu_axi_arid (lsu_axi_arid),
|
|
|
|
.lsu_axi_araddr (lsu_axi_araddr),
|
|
|
|
.lsu_axi_arregion(lsu_axi_arregion),
|
|
|
|
.lsu_axi_arlen (lsu_axi_arlen),
|
|
|
|
.lsu_axi_arsize (lsu_axi_arsize),
|
|
|
|
.lsu_axi_arburst (lsu_axi_arburst),
|
|
|
|
.lsu_axi_arlock (lsu_axi_arlock),
|
|
|
|
.lsu_axi_arcache (lsu_axi_arcache),
|
|
|
|
.lsu_axi_arprot (lsu_axi_arprot),
|
|
|
|
.lsu_axi_arqos (lsu_axi_arqos),
|
|
|
|
|
|
|
|
.lsu_axi_rvalid(lsu_axi_rvalid),
|
|
|
|
.lsu_axi_rready(lsu_axi_rready),
|
|
|
|
.lsu_axi_rid (lsu_axi_rid),
|
|
|
|
.lsu_axi_rdata (lsu_axi_rdata),
|
|
|
|
.lsu_axi_rresp (lsu_axi_rresp),
|
|
|
|
.lsu_axi_rlast (lsu_axi_rlast),
|
|
|
|
|
|
|
|
//-------------------------- IFU AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
.ifu_axi_awvalid (ifu_axi_awvalid),
|
|
|
|
.ifu_axi_awready (ifu_axi_awready),
|
|
|
|
.ifu_axi_awid (ifu_axi_awid),
|
|
|
|
.ifu_axi_awaddr (ifu_axi_awaddr),
|
|
|
|
.ifu_axi_awregion(ifu_axi_awregion),
|
|
|
|
.ifu_axi_awlen (ifu_axi_awlen),
|
|
|
|
.ifu_axi_awsize (ifu_axi_awsize),
|
|
|
|
.ifu_axi_awburst (ifu_axi_awburst),
|
|
|
|
.ifu_axi_awlock (ifu_axi_awlock),
|
|
|
|
.ifu_axi_awcache (ifu_axi_awcache),
|
|
|
|
.ifu_axi_awprot (ifu_axi_awprot),
|
|
|
|
.ifu_axi_awqos (ifu_axi_awqos),
|
|
|
|
|
|
|
|
.ifu_axi_wvalid(ifu_axi_wvalid),
|
|
|
|
.ifu_axi_wready(ifu_axi_wready),
|
|
|
|
.ifu_axi_wdata (ifu_axi_wdata),
|
|
|
|
.ifu_axi_wstrb (ifu_axi_wstrb),
|
|
|
|
.ifu_axi_wlast (ifu_axi_wlast),
|
|
|
|
|
|
|
|
.ifu_axi_bvalid(ifu_axi_bvalid),
|
|
|
|
.ifu_axi_bready(ifu_axi_bready),
|
|
|
|
.ifu_axi_bresp (ifu_axi_bresp),
|
|
|
|
.ifu_axi_bid (ifu_axi_bid),
|
|
|
|
|
|
|
|
.ifu_axi_arvalid (ifu_axi_arvalid),
|
|
|
|
.ifu_axi_arready (ifu_axi_arready),
|
|
|
|
.ifu_axi_arid (ifu_axi_arid),
|
|
|
|
.ifu_axi_araddr (ifu_axi_araddr),
|
|
|
|
.ifu_axi_arregion(ifu_axi_arregion),
|
|
|
|
.ifu_axi_arlen (ifu_axi_arlen),
|
|
|
|
.ifu_axi_arsize (ifu_axi_arsize),
|
|
|
|
.ifu_axi_arburst (ifu_axi_arburst),
|
|
|
|
.ifu_axi_arlock (ifu_axi_arlock),
|
|
|
|
.ifu_axi_arcache (ifu_axi_arcache),
|
|
|
|
.ifu_axi_arprot (ifu_axi_arprot),
|
|
|
|
.ifu_axi_arqos (ifu_axi_arqos),
|
|
|
|
|
|
|
|
.ifu_axi_rvalid(ifu_axi_rvalid),
|
|
|
|
.ifu_axi_rready(ifu_axi_rready),
|
|
|
|
.ifu_axi_rid (ifu_axi_rid),
|
|
|
|
.ifu_axi_rdata (ifu_axi_rdata),
|
|
|
|
.ifu_axi_rresp (ifu_axi_rresp),
|
|
|
|
.ifu_axi_rlast (ifu_axi_rlast),
|
|
|
|
|
|
|
|
//-------------------------- SB AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
.sb_axi_awvalid (sb_axi_awvalid),
|
|
|
|
.sb_axi_awready (sb_axi_awready),
|
|
|
|
.sb_axi_awid (sb_axi_awid),
|
|
|
|
.sb_axi_awaddr (sb_axi_awaddr),
|
|
|
|
.sb_axi_awregion(sb_axi_awregion),
|
|
|
|
.sb_axi_awlen (sb_axi_awlen),
|
|
|
|
.sb_axi_awsize (sb_axi_awsize),
|
|
|
|
.sb_axi_awburst (sb_axi_awburst),
|
|
|
|
.sb_axi_awlock (sb_axi_awlock),
|
|
|
|
.sb_axi_awcache (sb_axi_awcache),
|
|
|
|
.sb_axi_awprot (sb_axi_awprot),
|
|
|
|
.sb_axi_awqos (sb_axi_awqos),
|
|
|
|
|
|
|
|
.sb_axi_wvalid(sb_axi_wvalid),
|
|
|
|
.sb_axi_wready(sb_axi_wready),
|
|
|
|
.sb_axi_wdata (sb_axi_wdata),
|
|
|
|
.sb_axi_wstrb (sb_axi_wstrb),
|
|
|
|
.sb_axi_wlast (sb_axi_wlast),
|
|
|
|
|
|
|
|
.sb_axi_bvalid(sb_axi_bvalid),
|
|
|
|
.sb_axi_bready(sb_axi_bready),
|
|
|
|
.sb_axi_bresp (sb_axi_bresp),
|
|
|
|
.sb_axi_bid (sb_axi_bid),
|
|
|
|
|
|
|
|
|
|
|
|
.sb_axi_arvalid (sb_axi_arvalid),
|
|
|
|
.sb_axi_arready (sb_axi_arready),
|
|
|
|
.sb_axi_arid (sb_axi_arid),
|
|
|
|
.sb_axi_araddr (sb_axi_araddr),
|
|
|
|
.sb_axi_arregion(sb_axi_arregion),
|
|
|
|
.sb_axi_arlen (sb_axi_arlen),
|
|
|
|
.sb_axi_arsize (sb_axi_arsize),
|
|
|
|
.sb_axi_arburst (sb_axi_arburst),
|
|
|
|
.sb_axi_arlock (sb_axi_arlock),
|
|
|
|
.sb_axi_arcache (sb_axi_arcache),
|
|
|
|
.sb_axi_arprot (sb_axi_arprot),
|
|
|
|
.sb_axi_arqos (sb_axi_arqos),
|
|
|
|
|
|
|
|
.sb_axi_rvalid(sb_axi_rvalid),
|
|
|
|
.sb_axi_rready(sb_axi_rready),
|
|
|
|
.sb_axi_rid (sb_axi_rid),
|
|
|
|
.sb_axi_rdata (sb_axi_rdata),
|
|
|
|
.sb_axi_rresp (sb_axi_rresp),
|
|
|
|
.sb_axi_rlast (sb_axi_rlast),
|
|
|
|
|
|
|
|
//-------------------------- DMA AXI signals--------------------------
|
|
|
|
// AXI Write Channels
|
|
|
|
.dma_axi_awvalid(dma_axi_awvalid),
|
|
|
|
.dma_axi_awready(dma_axi_awready),
|
|
|
|
.dma_axi_awid ('0), // ids are not used on DMA since it always responses in order
|
|
|
|
.dma_axi_awaddr(lsu_axi_awaddr),
|
|
|
|
.dma_axi_awsize(lsu_axi_awsize),
|
|
|
|
.dma_axi_awprot('0),
|
|
|
|
.dma_axi_awlen('0),
|
|
|
|
.dma_axi_awburst('0),
|
|
|
|
|
|
|
|
|
|
|
|
.dma_axi_wvalid(dma_axi_wvalid),
|
|
|
|
.dma_axi_wready(dma_axi_wready),
|
|
|
|
.dma_axi_wdata (lsu_axi_wdata),
|
|
|
|
.dma_axi_wstrb (lsu_axi_wstrb),
|
|
|
|
.dma_axi_wlast (1'b1),
|
|
|
|
|
|
|
|
.dma_axi_bvalid(dma_axi_bvalid),
|
|
|
|
.dma_axi_bready(dma_axi_bready),
|
|
|
|
.dma_axi_bresp (dma_axi_bresp),
|
|
|
|
.dma_axi_bid (),
|
|
|
|
|
|
|
|
|
|
|
|
.dma_axi_arvalid(dma_axi_arvalid),
|
|
|
|
.dma_axi_arready(dma_axi_arready),
|
|
|
|
.dma_axi_arid ('0),
|
|
|
|
.dma_axi_araddr (lsu_axi_araddr),
|
|
|
|
.dma_axi_arsize (lsu_axi_arsize),
|
|
|
|
.dma_axi_arprot ('0),
|
|
|
|
.dma_axi_arlen ('0),
|
|
|
|
.dma_axi_arburst('0),
|
|
|
|
|
|
|
|
.dma_axi_rvalid(dma_axi_rvalid),
|
|
|
|
.dma_axi_rready(dma_axi_rready),
|
|
|
|
.dma_axi_rid (),
|
|
|
|
.dma_axi_rdata (dma_axi_rdata),
|
|
|
|
.dma_axi_rresp (dma_axi_rresp),
|
|
|
|
.dma_axi_rlast (dma_axi_rlast),
|
|
|
|
|
2022-02-14 20:32:21 +08:00
|
|
|
|
|
|
|
.timer_int (1'b0),
|
|
|
|
.extintsrc_req('0),
|
|
|
|
|
|
|
|
.lsu_bus_clk_en(1'b1),
|
|
|
|
.ifu_bus_clk_en(1'b1),
|
|
|
|
.dbg_bus_clk_en(1'b1),
|
|
|
|
.dma_bus_clk_en(1'b1),
|
|
|
|
|
|
|
|
.trace_rv_i_insn_ip (trace_rv_i_insn_ip),
|
|
|
|
.trace_rv_i_address_ip (trace_rv_i_address_ip),
|
|
|
|
.trace_rv_i_valid_ip (trace_rv_i_valid_ip),
|
|
|
|
.trace_rv_i_exception_ip(trace_rv_i_exception_ip),
|
|
|
|
.trace_rv_i_ecause_ip (trace_rv_i_ecause_ip),
|
|
|
|
.trace_rv_i_interrupt_ip(trace_rv_i_interrupt_ip),
|
|
|
|
.trace_rv_i_tval_ip (trace_rv_i_tval_ip),
|
|
|
|
|
|
|
|
.jtag_tck (jtag_tck),
|
|
|
|
.jtag_tms (jtag_tms),
|
|
|
|
.jtag_tdi (jtag_tdi),
|
|
|
|
.jtag_trst_n(jtag_trst_n),
|
|
|
|
.jtag_tdo (jtag_tdo),
|
|
|
|
|
|
|
|
.mpc_debug_halt_ack(mpc_debug_halt_ack),
|
|
|
|
.mpc_debug_halt_req(1'b0),
|
|
|
|
.mpc_debug_run_ack (mpc_debug_run_ack),
|
|
|
|
.mpc_debug_run_req (1'b1),
|
|
|
|
.mpc_reset_run_req (1'b1),
|
|
|
|
.debug_brkpt_status(debug_brkpt_status),
|
|
|
|
|
|
|
|
.i_cpu_halt_req (1'b0),
|
|
|
|
.o_cpu_halt_ack (o_cpu_halt_ack),
|
|
|
|
.o_cpu_halt_status (o_cpu_halt_status),
|
|
|
|
.i_cpu_run_req (1'b0),
|
|
|
|
.o_debug_mode_status(o_debug_mode_status),
|
|
|
|
.o_cpu_run_ack (o_cpu_run_ack),
|
|
|
|
|
|
|
|
.dec_tlu_perfcnt0(dec_tlu_perfcnt0),
|
|
|
|
.dec_tlu_perfcnt1(dec_tlu_perfcnt1),
|
|
|
|
.dec_tlu_perfcnt2(dec_tlu_perfcnt2),
|
|
|
|
.dec_tlu_perfcnt3(dec_tlu_perfcnt3),
|
|
|
|
|
|
|
|
.scan_mode (1'b0),
|
|
|
|
.mbist_mode(1'b0)
|
2021-12-16 20:07:50 +08:00
|
|
|
|
2022-02-14 20:32:21 +08:00
|
|
|
);
|
2021-12-16 20:07:50 +08:00
|
|
|
|
2022-02-17 19:35:01 +08:00
|
|
|
axi_slv #(
|
|
|
|
.TAGW(`RV_IFU_BUS_TAG)
|
|
|
|
) imem (
|
|
|
|
.aclk(clk),
|
|
|
|
.rst_l(rst),
|
|
|
|
.arvalid(ifu_axi_arvalid),
|
|
|
|
.arready(ifu_axi_arready),
|
|
|
|
.araddr(ifu_axi_araddr),
|
|
|
|
.arid(ifu_axi_arid),
|
|
|
|
.arlen(ifu_axi_arlen),
|
|
|
|
.arburst(ifu_axi_arburst),
|
|
|
|
.arsize(ifu_axi_arsize),
|
|
|
|
|
|
|
|
.rvalid(ifu_axi_rvalid),
|
|
|
|
.rready(ifu_axi_rready),
|
|
|
|
.rdata(ifu_axi_rdata),
|
|
|
|
.rresp(ifu_axi_rresp),
|
|
|
|
.rid(ifu_axi_rid),
|
|
|
|
.rlast(ifu_axi_rlast),
|
|
|
|
|
|
|
|
.awvalid(1'b0),
|
|
|
|
.awready(),
|
|
|
|
.awaddr('0),
|
|
|
|
.awid('0),
|
|
|
|
.awlen('0),
|
|
|
|
.awburst('0),
|
|
|
|
.awsize('0),
|
|
|
|
|
|
|
|
.wdata ('0),
|
|
|
|
.wstrb ('0),
|
|
|
|
.wvalid(1'b0),
|
|
|
|
.wready(),
|
|
|
|
|
|
|
|
.bvalid(),
|
|
|
|
.bready(1'b0),
|
|
|
|
.bresp(),
|
|
|
|
.bid()
|
2022-02-14 20:32:21 +08:00
|
|
|
);
|
2021-12-16 20:07:50 +08:00
|
|
|
|
2022-02-17 19:35:01 +08:00
|
|
|
defparam lmem.TAGW = `RV_LSU_BUS_TAG;
|
|
|
|
|
|
|
|
//axi_slv #(.TAGW(`RV_LSU_BUS_TAG)) lmem(
|
|
|
|
axi_slv lmem (
|
|
|
|
.aclk(clk),
|
|
|
|
.rst_l(rst),
|
|
|
|
.arvalid(lmem_axi_arvalid),
|
|
|
|
.arready(lmem_axi_arready),
|
|
|
|
.araddr(lsu_axi_araddr),
|
|
|
|
.arid(lsu_axi_arid),
|
|
|
|
.arlen(lsu_axi_arlen),
|
|
|
|
.arburst(lsu_axi_arburst),
|
|
|
|
.arsize(lsu_axi_arsize),
|
|
|
|
|
|
|
|
.rvalid(lmem_axi_rvalid),
|
|
|
|
.rready(lmem_axi_rready),
|
|
|
|
.rdata(lmem_axi_rdata),
|
|
|
|
.rresp(lmem_axi_rresp),
|
|
|
|
.rid(lmem_axi_rid),
|
|
|
|
.rlast(lmem_axi_rlast),
|
|
|
|
|
|
|
|
.awvalid(lmem_axi_awvalid),
|
|
|
|
.awready(lmem_axi_awready),
|
|
|
|
.awaddr(lsu_axi_awaddr),
|
|
|
|
.awid(lsu_axi_awid),
|
|
|
|
.awlen(lsu_axi_awlen),
|
|
|
|
.awburst(lsu_axi_awburst),
|
|
|
|
.awsize(lsu_axi_awsize),
|
|
|
|
|
|
|
|
.wdata (lsu_axi_wdata),
|
|
|
|
.wstrb (lsu_axi_wstrb),
|
|
|
|
.wvalid(lmem_axi_wvalid),
|
|
|
|
.wready(lmem_axi_wready),
|
|
|
|
|
|
|
|
.bvalid(lmem_axi_bvalid),
|
|
|
|
.bready(lmem_axi_bready),
|
|
|
|
.bresp(lmem_axi_bresp),
|
|
|
|
.bid(lmem_axi_bid)
|
2022-02-14 20:32:21 +08:00
|
|
|
);
|
2021-12-16 20:07:50 +08:00
|
|
|
|
2022-02-17 19:35:01 +08:00
|
|
|
axi_lsu_dma_bridge #(`RV_LSU_BUS_TAG, `RV_LSU_BUS_TAG) bridge (
|
|
|
|
.clk(clk),
|
|
|
|
.reset_l(rst),
|
|
|
|
|
|
|
|
.m_arvalid(lsu_axi_arvalid),
|
|
|
|
.m_arid(lsu_axi_arid),
|
|
|
|
.m_araddr(lsu_axi_araddr),
|
|
|
|
.m_arready(lsu_axi_arready),
|
|
|
|
|
|
|
|
.m_rvalid(lsu_axi_rvalid),
|
|
|
|
.m_rready(lsu_axi_rready),
|
|
|
|
.m_rdata(lsu_axi_rdata),
|
|
|
|
.m_rid(lsu_axi_rid),
|
|
|
|
.m_rresp(lsu_axi_rresp),
|
|
|
|
.m_rlast(lsu_axi_rlast),
|
|
|
|
|
|
|
|
.m_awvalid(lsu_axi_awvalid),
|
|
|
|
.m_awid(lsu_axi_awid),
|
|
|
|
.m_awaddr(lsu_axi_awaddr),
|
|
|
|
.m_awready(lsu_axi_awready),
|
|
|
|
|
|
|
|
.m_wvalid(lsu_axi_wvalid),
|
|
|
|
.m_wready(lsu_axi_wready),
|
|
|
|
|
|
|
|
.m_bresp(lsu_axi_bresp),
|
|
|
|
.m_bvalid(lsu_axi_bvalid),
|
|
|
|
.m_bid(lsu_axi_bid),
|
|
|
|
.m_bready(lsu_axi_bready),
|
|
|
|
|
|
|
|
.s0_arvalid(lmem_axi_arvalid),
|
|
|
|
.s0_arready(lmem_axi_arready),
|
|
|
|
|
|
|
|
.s0_rvalid(lmem_axi_rvalid),
|
|
|
|
.s0_rid(lmem_axi_rid),
|
|
|
|
.s0_rresp(lmem_axi_rresp),
|
|
|
|
.s0_rdata(lmem_axi_rdata),
|
|
|
|
.s0_rlast(lmem_axi_rlast),
|
|
|
|
.s0_rready(lmem_axi_rready),
|
|
|
|
|
|
|
|
.s0_awvalid(lmem_axi_awvalid),
|
|
|
|
.s0_awready(lmem_axi_awready),
|
|
|
|
|
|
|
|
.s0_wvalid(lmem_axi_wvalid),
|
|
|
|
.s0_wready(lmem_axi_wready),
|
|
|
|
.s0_bresp(lmem_axi_bresp),
|
|
|
|
.s0_bvalid(lmem_axi_bvalid),
|
|
|
|
.s0_bid(lmem_axi_bid),
|
|
|
|
.s0_bready(lmem_axi_bready),
|
|
|
|
|
|
|
|
|
|
|
|
.s1_arvalid(dma_axi_arvalid),
|
|
|
|
.s1_arready(dma_axi_arready),
|
|
|
|
|
|
|
|
.s1_rvalid(dma_axi_rvalid),
|
|
|
|
.s1_rresp (dma_axi_rresp),
|
|
|
|
.s1_rdata (dma_axi_rdata),
|
|
|
|
.s1_rlast (dma_axi_rlast),
|
|
|
|
.s1_rready(dma_axi_rready),
|
|
|
|
|
|
|
|
.s1_awvalid(dma_axi_awvalid),
|
|
|
|
.s1_awready(dma_axi_awready),
|
|
|
|
|
|
|
|
.s1_wvalid(dma_axi_wvalid),
|
|
|
|
.s1_wready(dma_axi_wready),
|
|
|
|
|
|
|
|
.s1_bresp (dma_axi_bresp),
|
|
|
|
.s1_bvalid(dma_axi_bvalid),
|
|
|
|
.s1_bready(dma_axi_bready)
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
2021-12-16 20:07:50 +08:00
|
|
|
endmodule
|