From b6ea4e2d4989c6280e9948288e2542fda1bc283e Mon Sep 17 00:00:00 2001
From: Daniel Newbrook <dwn1c21@soton.ac.uk>
Date: Wed, 19 Jul 2023 12:11:24 +0100
Subject: [PATCH] Initial commit

---
 sram/verilog/sl_ahb_sram.v | 87 ++++++++++++++++++++++++++++++++++++++
 sram/verilog/sl_sram.v     | 45 ++++++++++++++++++++
 2 files changed, 132 insertions(+)
 create mode 100644 sram/verilog/sl_ahb_sram.v
 create mode 100644 sram/verilog/sl_sram.v

diff --git a/sram/verilog/sl_ahb_sram.v b/sram/verilog/sl_ahb_sram.v
new file mode 100644
index 0000000..ca625b6
--- /dev/null
+++ b/sram/verilog/sl_ahb_sram.v
@@ -0,0 +1,87 @@
+//-----------------------------------------------------------------------------
+// SoCLabs FPGA SRAM 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_sram #(
+    // 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
+)(
+    // --------------------------------------------------------------------------
+    // 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_sram #(
+        .AW (RAM_ADDR_W)
+    ) 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
diff --git a/sram/verilog/sl_sram.v b/sram/verilog/sl_sram.v
new file mode 100644
index 0000000..c15a2c2
--- /dev/null
+++ b/sram/verilog/sl_sram.v
@@ -0,0 +1,45 @@
+module sl_sram #(
+// --------------------------------------------------------------------------
+// Parameter Declarations
+// --------------------------------------------------------------------------
+  parameter AW = 16
+ )
+ (
+  // Inputs
+  input  wire          CLK,
+  input  wire [AW-1:2] ADDR,
+  input  wire [31:0]   WDATA,
+  input  wire [3:0]    WREN,
+  input  wire          CS,
+
+  // Outputs
+  output wire [31:0]   RDATA
+  );
+
+localparam TIE_EMA = 3'b010;
+localparam TIE_EMAW = 2'b00;
+wire       GWEN = (&WREN);
+wire  [31:0] WEN;
+assign WEN = ({{8{WREN[3]}},{8{WREN[2]}},{8{WREN[1]}},{8{WREN[0]}}});
+localparam TIE_RET1N = 1'b1;
+
+  rf_sp_hdf
+    u_rf_sp_hdf (
+`ifdef POWER_PINS
+    .VDDCE (1'b1),
+    .VDDPE (1'b1),
+    .VSSE  (1'b0),
+`endif
+    .Q (RDATA),
+    .CLK (CLK),
+    .CEN (!CS),
+    .WEN (WEN),
+    .A (ADDR),
+    .D (WDATA),
+    .EMA (TIE_EMA),
+    .EMAW (TIE_EMAW),
+    .GWEN (GWEN),
+    .RET1N (TIE_RET1N)
+   );
+
+endmodule
-- 
GitLab