Skip to content
Snippets Groups Projects
Commit a5dfe47e authored by dam1n19's avatar dam1n19
Browse files

Reworked DMA subsystem to use Defines

parent c28a7ab9
No related branches found
No related tags found
1 merge request!1changed imem to rom to allow initial program loading, updated bootloader code...
......@@ -31,6 +31,3 @@
// DMAC IP
-f $(SOCLABS_SLDMA230_TECH_DIR)/flist/sldma230_ip.flist
// DMA Subystem
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v
......@@ -32,6 +32,7 @@ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_subsystems/debug/verilog/nanosoc_ss_
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_subsystems/expansion/verilog/nanosoc_ss_expansion.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v
// Bus Matrix
-f $(SOCLABS_NANOSOC_TECH_DIR)/flist/nanosoc_busmatrix_ip.flist
......
......@@ -76,6 +76,8 @@ endif
# Defines to pass to filelist compile
NANOSOC_DEFINES += $(ACCELERATOR_SUBSYSTEM)
NANOSOC_DEFINES += DMAC_0_PL230
# Compile Testcodes and Bootrom
code:
......@@ -83,7 +85,8 @@ code:
@$(MAKE) -C $(SOCLABS_NANOSOC_TECH_DIR) bootrom
defs_nanosoc:
@$(MAKE) -C $(SOCLABS_NANOSOC_TECH_DIR) defs_gen DEFINES_DIR=$(DEFINES_DIR) NANOSOC_DEFINES=$(NANOSOC_DEFINES) DEFINES_FILE=$(DEFINES_FILE)
@mkdir -p $(DEFINES_DIR)
@$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/defines_compile.py -d $(NANOSOC_DEFINES) -o $(DEFINES_FILE)
# Generate TCL filelist from flists
flist_nanosoc: defs_nanosoc
......
......@@ -95,6 +95,7 @@ ifeq ($(ACCELERATOR),yes)
NANOSOC_DEFINES += ACCELERATOR_SUBSYSTEM
endif
NANOSOC_DEFINES += DMAC_0_PL230
NANOSOC_DEFINES += IMEM_0_RAM_PRELOAD
# Is the Arm QuickStart being used?
......
//-----------------------------------------------------------------------------
// NanoSoC DMA Subsystem - Contains DMA Controllers
// - Version with no DMA Controllers connected
// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
//
// Contributors
//
// David Mapstone (d.a.mapstone@soton.ac.uk)
//
// Copyright 2021-3, SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------
module nanosoc_ss_dma #(
parameter SYS_ADDR_W = 32, // System Address Width
parameter SYS_DATA_W = 32, // System Data Width
parameter DMAC_0_CFG_ADDR_W = 12, // DMAC 0 Configuration Port Address Width
parameter DMAC_1_CFG_ADDR_W = 12, // DMAC 1 Configuration Port Address Width
parameter DMAC_0_CHANNEL_NUM = 2, // DMAC 0 Number of DMA Channels
parameter DMAC_1_CHANNEL_NUM = 2 // DMAC 1 Number of DMA Channels
)(
// System AHB Clocks and Resets
input wire SYS_HCLK,
input wire SYS_HRESETn,
input wire SYS_PCLKEN, // APB clock enable
// DMAC 0 AHB Lite Port
output wire [SYS_ADDR_W-1:0] DMAC_0_HADDR, // Address bus
output wire [1:0] DMAC_0_HTRANS, // Transfer type
output wire DMAC_0_HWRITE, // Transfer direction
output wire [2:0] DMAC_0_HSIZE, // Transfer size
output wire [2:0] DMAC_0_HBURST, // Burst type
output wire [3:0] DMAC_0_HPROT, // Protection control
output wire [SYS_DATA_W-1:0] DMAC_0_HWDATA, // Write data
output wire DMAC_0_HMASTLOCK, // Locked Sequence
input wire [SYS_DATA_W-1:0] DMAC_0_HRDATA, // Read data bus
input wire DMAC_0_HREADY, // HREADY feedback
input wire DMAC_0_HRESP, // Transfer response
// DMAC 0 APB Configurtation Port
input wire DMAC_0_PSEL, // APB peripheral select
input wire DMAC_0_PEN, // APB transfer enable
input wire DMAC_0_PWRITE, // APB transfer direction
input wire [DMAC_0_CFG_ADDR_W-1:0] DMAC_0_PADDR, // APB address
input wire [SYS_DATA_W-1:0] DMAC_0_PWDATA, // APB write data
output wire [SYS_DATA_W-1:0] DMAC_0_PRDATA, // APB read data
// DMAC 0 DMA Request and Status Port
input wire [DMAC_0_CHANNEL_NUM-1:0] DMAC_0_DMA_REQ, // DMA transfer request
output wire [DMAC_0_CHANNEL_NUM-1:0] DMAC_0_DMA_DONE, // DMA transfer done
output wire DMAC_0_DMA_ERR, // DMA slave response not OK
// DMAC 1 AHB Lite Port
output wire [SYS_ADDR_W-1:0] DMAC_1_HADDR, // Address bus
output wire [1:0] DMAC_1_HTRANS, // Transfer type
output wire DMAC_1_HWRITE, // Transfer direction
output wire [2:0] DMAC_1_HSIZE, // Transfer size
output wire [2:0] DMAC_1_HBURST, // Burst type
output wire [3:0] DMAC_1_HPROT, // Protection control
output wire [SYS_DATA_W-1:0] DMAC_1_HWDATA, // Write data
output wire DMAC_1_HMASTLOCK, // Locked Sequence
input wire [SYS_DATA_W-1:0] DMAC_1_HRDATA, // Read data bus
input wire DMAC_1_HREADY, // HREADY feedback
input wire DMAC_1_HRESP, // Transfer response
// DMAC 1 APB Configurtation Port
input wire DMAC_1_PSEL, // APB peripheral select
input wire DMAC_1_PEN, // APB transfer enable
input wire DMAC_1_PWRITE, // APB transfer direction
input wire [DMAC_1_CFG_ADDR_W-1:0] DMAC_1_PADDR, // APB address
input wire [SYS_DATA_W-1:0] DMAC_1_PWDATA, // APB write data
output wire [SYS_DATA_W-1:0] DMAC_1_PRDATA, // APB read data
// DMAC 1 DMA Request and Status Port
input wire [DMAC_1_CHANNEL_NUM-1:0] DMAC_1_DMA_REQ, // DMA transfer request
output wire [DMAC_1_CHANNEL_NUM-1:0] DMAC_1_DMA_DONE, // DMA transfer done
output wire DMAC_1_DMA_ERR // DMA slave response not OK
);
// -------------------------------
// DMA Controller 0 Instantiation - Not implemented
// -------------------------------
// AHB Tie-off signals
assign DMAC_0_HADDR = 32'd0;
assign DMAC_0_HTRANS = 2'd0;
assign DMAC_0_HWRITE = 1'd0;
assign DMAC_0_HSIZE = 3'd0;
assign DMAC_0_HBURST = 3'd0;
assign DMAC_0_HPROT = 4'd0;
assign DMAC_0_HWDATA = 32'd0;
assign DMAC_0_HMASTLOCK = 1'd0;
// APB Tie-off signals
assign DMAC_0_PRDATA = 32'd0;
// DMA Status Tie-off signals
assign DMAC_0_DMA_DONE = {DMAC_0_CHANNEL_NUM{1'b0}};
assign DMAC_0_DMA_ERR = 1'b0;
// -------------------------------
// DMA Controller 1 Instantiation - Not implemented
// -------------------------------
// AHB Tie-off signals
assign DMAC_1_HADDR = 32'd0;
assign DMAC_1_HTRANS = 2'd0;
assign DMAC_1_HWRITE = 1'd0;
assign DMAC_1_HSIZE = 3'd0;
assign DMAC_1_HBURST = 3'd0;
assign DMAC_1_HPROT = 4'd0;
assign DMAC_1_HWDATA = 32'd0;
assign DMAC_1_HMASTLOCK = 1'd0;
// APB Tie-off signals
assign DMAC_1_PRDATA = 32'd0;
// DMA Status Tie-off signals
assign DMAC_1_DMA_DONE = {DMAC_1_CHANNEL_NUM{1'b0}};
assign DMAC_1_DMA_ERR = 1'b0;
endmodule
\ No newline at end of file
......@@ -80,6 +80,7 @@ module nanosoc_ss_dma #(
output wire DMAC_1_DMA_ERR // DMA slave response not OK
);
`ifdef DMAC_0_PL230
// -------------------------------
// DMA Controller 0 Instantiation
// -------------------------------
......@@ -125,10 +126,77 @@ module nanosoc_ss_dma #(
//--------------------------
assign DMAC_0_PREADY = 1'b1;
assign DMAC_0_PSLVERR = 1'b0;
`else
// -------------------------------
// DMA Controller 0 Instantiation - Not implemented
// -------------------------------
// AHB Tie-off signals
assign DMAC_0_HADDR = 32'd0;
assign DMAC_0_HTRANS = 2'd0;
assign DMAC_0_HWRITE = 1'd0;
assign DMAC_0_HSIZE = 3'd0;
assign DMAC_0_HBURST = 3'd0;
assign DMAC_0_HPROT = 4'd0;
assign DMAC_0_HWDATA = 32'd0;
assign DMAC_0_HMASTLOCK = 1'd0;
// APB Tie-off signals
assign DMAC_0_PRDATA = 32'd0;
// DMA Status Tie-off signals
assign DMAC_0_DMA_DONE = {DMAC_0_CHANNEL_NUM{1'b0}};
assign DMAC_0_DMA_ERR = 1'b0;
`endif
`ifdef DMAC_1_PL230
// -------------------------------
// DMA Controller 1 Instantiation - Not implemented
// DMA Controller 0 Instantiation
// -------------------------------
sldma230 #(
.SYS_ADDR_W (SYS_ADDR_W),
.SYS_DATA_W (SYS_DATA_W),
.CFG_ADDR_W (DMAC_1_CFG_ADDR_W),
.CHANNEL_NUM (DMAC_1_CHANNEL_NUM)
) u_dmac_0 (
// AHB Clocks and Resets
.HCLK(SYS_HCLK),
.HRESETn(SYS_HRESETn),
// AHB Lite Port
.HADDR(DMAC_1_HADDR),
.HTRANS(DMAC_1_HTRANS),
.HWRITE(DMAC_1_HWRITE),
.HSIZE(DMAC_1_HSIZE),
.HBURST(DMAC_1_HBURST),
.HPROT(DMAC_1_HPROT),
.HWDATA(DMAC_1_HWDATA),
.HMASTLOCK(DMAC_1_HMASTLOCK),
.HRDATA(DMAC_1_HRDATA),
.HREADY(DMAC_1_HREADY),
.HRESP(DMAC_1_HRESP),
// APB Configuration Port
.PCLKEN(SYS_PCLKEN),
.PSEL(DMAC_1_PSEL),
.PEN(DMAC_1_PEN),
.PWRITE(DMAC_1_PWRITE),
.PADDR(DMAC_1_PADDR),
.PWDATA(DMAC_1_PWDATA),
.PRDATA(DMAC_1_PRDATA),
// DMA Request and Status Port
.DMA_REQ(DMAC_1_DMA_REQ),
.DMA_DONE(DMAC_1_DMA_DONE),
.DMA_ERR(DMAC_1_DMA_ERR)
);
// APB Assignments
//--------------------------
assign DMAC_1_PREADY = 1'b1;
assign DMAC_1_PSLVERR = 1'b0;
`else
// -------------------------------
// DMA Controller 0 Instantiation - Not implemented
// -------------------------------
// AHB Tie-off signals
assign DMAC_1_HADDR = 32'd0;
......@@ -142,13 +210,10 @@ module nanosoc_ss_dma #(
// APB Tie-off signals
assign DMAC_1_PRDATA = 32'd0;
assign DMAC_1_PREADY = 1'b1;
assign DMAC_1_PSLVERR = 1'b1;
// DMA Status Tie-off signals
assign DMAC_1_DMA_DONE = {DMAC_1_CHANNEL_NUM{1'b0}};
assign DMAC_1_DMA_ERR = 1'b0;
`endif
endmodule
\ No newline at end of file
Subproject commit 04639f9ccf3717e38e741dadd5027453f6856a37
Subproject commit a29b96684da03df7701d8bf7fa3db1c13d171756
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment