diff --git a/flist/nanosoc_ip.flist b/flist/nanosoc_ip.flist index 95250e2f8fc777a97c7d4733c0d44b07095af09c..76f4dd7b8b9c1a06349a8d35565f90554be648ab 100644 --- a/flist/nanosoc_ip.flist +++ b/flist/nanosoc_ip.flist @@ -42,9 +42,7 @@ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/bootrom_0/verilog/nanosoc_re // NanoSoC Regions - CPU Memories $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/dmem_0/verilog/nanosoc_region_dmem_0.v - -// TODO: Use ROM Memory for IMEM - switch back to SRAM -$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/imem_0/rom/verilog/nanosoc_region_imem_0.v +$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v // NanoSoC Regions - Expansion Regions $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/exp/verilog/nanosoc_region_exp.v diff --git a/makefile b/makefile index 621b279a895369c5451daa5d8994017e608557c6..856f9e02a633d622384284fdde296750aa718194 100644 --- a/makefile +++ b/makefile @@ -95,6 +95,8 @@ ifeq ($(ACCELERATOR),yes) NANOSOC_DEFINES += ACCELERATOR_SUBSYSTEM endif +NANOSOC_DEFINES += IMEM_0_ROM + # Is the Arm QuickStart being used? QUICKSTART ?= no diff --git a/nanosoc/nanosoc_regions/imem_0/rom/verilog/nanosoc_region_imem_0.v b/nanosoc/nanosoc_regions/imem_0/rom/verilog/nanosoc_region_imem_0.v deleted file mode 100644 index f5575d6cfde487a29efa722f3371f4b374abf6c9..0000000000000000000000000000000000000000 --- a/nanosoc/nanosoc_regions/imem_0/rom/verilog/nanosoc_region_imem_0.v +++ /dev/null @@ -1,63 +0,0 @@ -//----------------------------------------------------------------------------- -// Nanosoc CPU Instruction Memory Region (IMEM) - ROM -// - Region Mapped to: 0x20000000-0x2fffffff -// - Memory Exhibits Wrapping Behaviour -// 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_region_imem_0 #( - parameter SYS_ADDR_W = 32, // System Address Width - parameter SYS_DATA_W = 32, // System Data Width - parameter IMEM_RAM_ADDR_W = 14, // Width of IMEM RAM Address - Default 16KB - parameter IMEM_RAM_DATA_W = 32, // Width of IMEM RAM Data Bus - Default 32 bits - parameter IMEM_MEM_FPGA_IMG = "image.hex" // Image to Preload into ROM -)( - input wire HCLK, - input wire HRESETn, - - // AHB connection to Initiator - input wire HSEL, - input wire [SYS_ADDR_W-1:0] HADDR, - input wire [1:0] HTRANS, - input wire [2:0] HSIZE, - input wire [3:0] HPROT, - input wire HWRITE, - input wire HREADY, - input wire [SYS_DATA_W-1:0] HWDATA, - - output wire HREADYOUT, - output wire HRESP, - output wire [SYS_DATA_W-1:0] HRDATA -); - - // ROM Instantiation - sl_ahb_rom #( - .SYS_DATA_W (SYS_DATA_W), - .RAM_ADDR_W (IMEM_RAM_ADDR_W), - .RAM_DATA_W (IMEM_RAM_DATA_W), - .FILENAME (IMEM_MEM_FPGA_IMG) - ) u_imem_0 ( - // AHB Inputs - .HCLK (HCLK), - .HRESETn (HRESETn), - .HSEL (HSEL), - .HADDR (HADDR [IMEM_RAM_ADDR_W-1:0]), - .HTRANS (HTRANS), - .HSIZE (HSIZE), - .HWRITE (HWRITE), - .HWDATA (HWDATA), - .HREADY (HREADY), - - // AHB Outputs - .HREADYOUT (HREADYOUT), - .HRDATA (HRDATA), - .HRESP (HRESP) - ); - -endmodule \ No newline at end of file diff --git a/nanosoc/nanosoc_regions/imem_0/ram/verilog/nanosoc_region_imem_0.v b/nanosoc/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v similarity index 77% rename from nanosoc/nanosoc_regions/imem_0/ram/verilog/nanosoc_region_imem_0.v rename to nanosoc/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v index 7c7c0e23682958d508cb1d60f9feb0ed9c8c8452..72298185fc8fced1b3d969e5923eaa75c0b52d99 100644 --- a/nanosoc/nanosoc_regions/imem_0/ram/verilog/nanosoc_region_imem_0.v +++ b/nanosoc/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v @@ -36,6 +36,31 @@ module nanosoc_region_imem_0 #( output wire [SYS_DATA_W-1:0] HRDATA ); +`ifdef IMEM_0_ROM + // ROM Instantiation + sl_ahb_rom #( + .SYS_DATA_W (SYS_DATA_W), + .RAM_ADDR_W (IMEM_RAM_ADDR_W), + .RAM_DATA_W (IMEM_RAM_DATA_W), + .FILENAME (IMEM_MEM_FPGA_IMG) + ) u_imem_0 ( + // AHB Inputs + .HCLK (HCLK), + .HRESETn (HRESETn), + .HSEL (HSEL), + .HADDR (HADDR [IMEM_RAM_ADDR_W-1:0]), + .HTRANS (HTRANS), + .HSIZE (HSIZE), + .HWRITE (HWRITE), + .HWDATA (HWDATA), + .HREADY (HREADY), + + // AHB Outputs + .HREADYOUT (HREADYOUT), + .HRDATA (HRDATA), + .HRESP (HRESP) + ); +`else // SRAM Instantiation sl_ahb_sram #( .SYS_DATA_W (SYS_DATA_W), @@ -58,5 +83,7 @@ module nanosoc_region_imem_0 #( .HRDATA (HRDATA), .HRESP (HRESP) ); +`endif + endmodule \ No newline at end of file