diff --git a/rom/verilog/sl_ahb_rom.v b/rom/verilog/sl_ahb_rom.v new file mode 100644 index 0000000000000000000000000000000000000000..54322e16cdc75b43d54ccd03bb8ad327ef3e373e --- /dev/null +++ b/rom/verilog/sl_ahb_rom.v @@ -0,0 +1,89 @@ +//----------------------------------------------------------------------------- +// SoCLabs FPGA ROM Wrapper +// - to be substitued with same name file in filelist when moving to ASIC +// 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 sl_ahb_rom #( + // System Parameters + parameter SYS_DATA_W = 32, // System Data Width + parameter RAM_ADDR_W = 14, // Size of SRAM + parameter RAM_DATA_W = 32, // Data Width of RAM + parameter FILENAME = "image.hex" // Initial Image to Populate Memory with +)( + // -------------------------------------------------------------------------- + // Port Definitions + // -------------------------------------------------------------------------- + input wire HCLK, // system bus clock + input wire HRESETn, // system bus reset + input wire HSEL, // AHB peripheral select + input wire HREADY, // AHB ready input + input wire [1:0] HTRANS, // AHB transfer type + input wire [2:0] HSIZE, // AHB hsize + input wire HWRITE, // AHB hwrite + input wire [RAM_ADDR_W-1:0] HADDR, // AHB address bus + input wire [SYS_DATA_W-1:0] HWDATA, // AHB write data bus + output wire HREADYOUT, // AHB ready output to S->M mux + output wire HRESP, // AHB response + output wire [SYS_DATA_W-1:0] HRDATA // AHB read data bus +); + + // Internal Wiring + wire [RAM_ADDR_W-3:0] addr; + wire [RAM_DATA_W-1:0] wdata; + wire [RAM_DATA_W-1:0] rdata; + wire [3:0] wen; + wire cs; + + // AHB to SRAM Conversion + cmsdk_ahb_to_sram #( + .AW (RAM_ADDR_W) + ) u_ahb_to_sram ( + // AHB Inputs + .HCLK (HCLK), + .HRESETn (HRESETn), + .HSEL (HSEL), + .HADDR (HADDR[RAM_ADDR_W-1:0]), + .HTRANS (HTRANS), + .HSIZE (HSIZE), + .HWRITE (HWRITE), + .HWDATA (HWDATA), + .HREADY (HREADY), + + // AHB Outputs + .HREADYOUT (HREADYOUT), + .HRDATA (HRDATA), + .HRESP (HRESP), + + // SRAM input + .SRAMRDATA (rdata), + + // SRAM Outputs + .SRAMADDR (addr), + .SRAMWDATA (wdata), + .SRAMWEN (wen), + .SRAMCS (cs) + ); + + // FPGA SRAM model + cmsdk_fpga_rom #( + .AW (RAM_ADDR_W), + .filename (FILENAME) + ) u_sram ( + // SRAM Inputs + .CLK (HCLK), + .ADDR (addr), + .WDATA (wdata), + .WREN (wen), + .CS (cs), + + // SRAM Output + .RDATA (rdata) + ); +endmodule \ No newline at end of file