diff --git a/flist/nanosoc.flist b/flist/nanosoc.flist index 8d57eecac9ba47f4582c7515190bd13dba5273aa..c54ebc1c8defb6a6fb44bb9eea4585c10f4fbd3b 100644 --- a/flist/nanosoc.flist +++ b/flist/nanosoc.flist @@ -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 diff --git a/flist/nanosoc_ip.flist b/flist/nanosoc_ip.flist index 76f4dd7b8b9c1a06349a8d35565f90554be648ab..ea78c8ca5db2f8d9f5fdb1dd21b83be9cddd1bd8 100644 --- a/flist/nanosoc_ip.flist +++ b/flist/nanosoc_ip.flist @@ -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 diff --git a/fpga/makefile b/fpga/makefile index 62ea7d8060c419ebb7625921019b44dca8cad641..71be7bce379cfb2c1382ca3d57857c4267510ce8 100644 --- a/fpga/makefile +++ b/fpga/makefile @@ -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 diff --git a/makefile b/makefile index bd508e2e9fdc30cb4bfc20165035673900c3e37f..01e18b565729db619f3054470af80c0fbf29012d 100644 --- a/makefile +++ b/makefile @@ -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? diff --git a/nanosoc/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v b/nanosoc/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v deleted file mode 100644 index 135db1b98dd3e16b2ce15ff10d282710c0deffc0..0000000000000000000000000000000000000000 --- a/nanosoc/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v +++ /dev/null @@ -1,119 +0,0 @@ -//----------------------------------------------------------------------------- -// 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 diff --git a/nanosoc/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v b/nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v similarity index 77% rename from nanosoc/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v rename to nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v index 3102dc43475ab75cefa99bff7c6ae0ab77f9604a..7c4df12b0616a132ea4affe1cc44592292883994 100644 --- a/nanosoc/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v +++ b/nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v @@ -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 diff --git a/nanosoc/socdebug_tech b/nanosoc/socdebug_tech index 04639f9ccf3717e38e741dadd5027453f6856a37..a29b96684da03df7701d8bf7fa3db1c13d171756 160000 --- a/nanosoc/socdebug_tech +++ b/nanosoc/socdebug_tech @@ -1 +1 @@ -Subproject commit 04639f9ccf3717e38e741dadd5027453f6856a37 +Subproject commit a29b96684da03df7701d8bf7fa3db1c13d171756