diff --git a/flow/socgen.py b/flow/socgen.py
new file mode 100644
index 0000000000000000000000000000000000000000..b7b9754e770323675ebaa303b1e3b5596fc0c2f8
--- /dev/null
+++ b/flow/socgen.py
@@ -0,0 +1,20 @@
+import yaml, os
+from yaml.loader import SafeLoader
+from pprint import pprint
+
+class wrapper_class:
+    def __init__ (self, name, engine_name,size):
+        self.name   = name
+        self.engine = engine_name
+        self.size   = size
+
+def generate(yaml_file):
+    print("Generating")
+    with open(yaml_file) as f:
+        data = yaml.load(f, Loader=SafeLoader)
+        pprint(data)
+        # print(data)
+
+if __name__ == "__main__":
+    yaml_file = os.environ["SOC_TOP_DIR"] + "/wrapper/yaml/" + "secworks_sha256.yaml"
+    generate(yaml_file)
\ No newline at end of file
diff --git a/wrapper/src/eg_socgen_wrapper.sv b/wrapper/src/eg_socgen_wrapper.sv
new file mode 100644
index 0000000000000000000000000000000000000000..dce3f18d6b5f70f4e86f8beddfb2e60e5ff3076f
--- /dev/null
+++ b/wrapper/src/eg_socgen_wrapper.sv
@@ -0,0 +1,397 @@
+//-----------------------------------------------------------------------------
+// SoC Labs Basic Example Accelerator Wrapper
+// A joint work commissioned on behalf of SoC Labs; under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+//
+// Copyright 2023; SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module wrapper #(
+  //----------------------------------------------------------
+  // SOCGEN: Wrapper Parameters
+  //----------------------------------------------------------
+  parameter AHBADDRWIDTH=12,
+  parameter INPACKETWIDTH=512,
+  parameter CFGSIZEWIDTH=64,
+  parameter CFGSCHEMEWIDTH=2,
+  parameter OUTPACKETWIDTH=256
+  ) (
+    //----------------------------------------------------------
+    // SOCGEN: Wrapper Ports
+    //----------------------------------------------------------
+    //----------------------------------------------------------
+    // SOCGEN: AHB Port
+    //----------------------------------------------------------
+    input  logic                     HCLK,       // Clock
+    input  logic                     HRESETn,    // Reset
+
+    // AHB connection to Initiator
+    input  logic                     HSELS,
+    input  logic  [AHBADDRWIDTH-1:0] HADDRS,
+    input  logic  [1:0]              HTRANSS,
+    input  logic  [2:0]              HSIZES,
+    input  logic                     HWRITES,
+    input  logic                     HREADYS,
+    input  logic  [31:0]             HWDATAS,
+
+    output logic                     HREADYOUTS,
+    output logic                     HRESPS,
+    output logic  [31:0]             HRDATAS,
+
+    //----------------------------------------------------------
+    // SOCGEN: DMA in_data DMA Request
+    //----------------------------------------------------------
+    // Input Data Request Signal to DMAC
+    output logic                  in_data_req,
+
+    //----------------------------------------------------------
+    // SOCGEN: DMA out_data DMA Request
+    //----------------------------------------------------------
+    // Output Data Request Signal to DMAC
+    output logic                  out_data_req
+  );
+  
+
+  //**********************************************************
+  // Internal AHB Parameters
+  //**********************************************************
+
+  //----------------------------------------------------------
+  // SOCGEN: inport Local Parameters
+  //----------------------------------------------------------
+  localparam [AHBADDRWIDTH-1:0] INPORTADDR         = 'h000;
+  localparam                    INPORTAHBADDRWIDTH = AHBADDRWIDTH - 1;
+
+  //----------------------------------------------------------
+  // SOCGEN: outport Local Parameters
+  //----------------------------------------------------------
+  localparam [AHBADDRWIDTH-1:0] OUTPORTADDR         = 'h800;
+  localparam                    OUTPORTAHBADDRWIDTH = AHBADDRWIDTH - 1;
+
+  localparam OUTPACKETBYTEWIDTH  = $clog2(OUTPACKETWIDTH/8);               // Number of Bytes in Packet
+  localparam OUTPACKETSPACEWIDTH = OUTPORTAHBADDRWIDTH-OUTPACKETBYTEWIDTH; // Number of Bits to represent all Packets in Address Space
+
+  // CSR Parameters
+  localparam [AHBADDRWIDTH-1:0] CSRBASEADDR        = 'h800;
+
+  //**********************************************************
+  // Wrapper AHB Components
+  //**********************************************************
+
+  //----------------------------------------------------------
+  // Internal AHB Decode Logic
+  //----------------------------------------------------------
+
+  // AHB Target 0 - Engine Input Port
+  logic             hsel0;
+  logic             hreadyout0;
+  logic             hresp0;
+  logic [31:0]      hrdata0;
+
+  // AHB Target 1 - Engine Output Port
+  logic             hsel1;
+  logic             hreadyout1;
+  logic             hresp1;
+  logic [31:0]      hrdata1;
+
+  // AHB Target 2 - Default Target
+  logic             hsel2;
+  logic             hreadyout2;
+  logic             hresp2;
+  logic [31:0]      hrdata2;
+
+  // Internal AHB Address Assignment
+  assign hsel0 = ((HADDRS < OUTPORTADDR) && (HADDRS >= INPORTADDR)) ? 1'b1:1'b0; // Input Port Select
+  assign hsel1 = (HADDRS >= OUTPORTADDR) ? 1'b1:1'b0;                            // Output Port Select
+  assign hsel2 = (hsel0 | hsel1) ? 1'b0:1'b1;                                    // Default Target Select
+
+  // AHB Target Multiplexer
+  cmsdk_ahb_slave_mux  #(
+    1, //PORT0_ENABLE
+    1, //PORT1_ENABLE
+    1, //PORT2_ENABLE
+    0, //PORT3_ENABLE
+    0, //PORT4_ENABLE
+    0, //PORT5_ENABLE
+    0, //PORT6_ENABLE
+    0, //PORT7_ENABLE
+    0, //PORT8_ENABLE
+    0  //PORT9_ENABLE  
+  ) u_ahb_slave_mux (
+    .HCLK        (HCLK),
+    .HRESETn     (HRESETn),
+    .HREADY      (HREADYS),
+    .HSEL0       (hsel0),     // Input Port 0
+    .HREADYOUT0  (hreadyout0),
+    .HRESP0      (hresp0),
+    .HRDATA0     (hrdata0),
+    .HSEL1       (hsel1),     // Input Port 1
+    .HREADYOUT1  (hreadyout1),
+    .HRESP1      (hresp1),
+    .HRDATA1     (hrdata1),
+    .HSEL2       (hsel2),     // Input Port 2
+    .HREADYOUT2  (hreadyout2),
+    .HRESP2      (hresp2),
+    .HRDATA2     (hrdata2),
+    .HSEL3       (1'b0),      // Input Port 3
+    .HREADYOUT3  (),
+    .HRESP3      (),
+    .HRDATA3     (),
+    .HSEL4       (1'b0),      // Input Port 4
+    .HREADYOUT4  (),
+    .HRESP4      (),
+    .HRDATA4     (),
+    .HSEL5       (1'b0),      // Input Port 5
+    .HREADYOUT5  (),
+    .HRESP5      (),
+    .HRDATA5     (),
+    .HSEL6       (1'b0),      // Input Port 6
+    .HREADYOUT6  (),
+    .HRESP6      (),
+    .HRDATA6     (),
+    .HSEL7       (1'b0),      // Input Port 7
+    .HREADYOUT7  (),
+    .HRESP7      (),
+    .HRDATA7     (),
+    .HSEL8       (1'b0),      // Input Port 8
+    .HREADYOUT8  (),
+    .HRESP8      (),
+    .HRDATA8     (),
+    .HSEL9       (1'b0),      // Input Port 9
+    .HREADYOUT9  (),
+    .HRESP9      (),
+    .HRDATA9     (),
+  
+    .HREADYOUT   (HREADYOUTS),     // Outputs
+    .HRESP       (HRESPS),
+    .HRDATA      (HRDATAS)
+  );
+
+  //----------------------------------------------------------
+  // Input Port Logic
+  //----------------------------------------------------------
+
+  // Engine Input Port Wire declarations
+  logic [INPACKETWIDTH-1:0]       in_packet;    
+  logic                           in_packet_last; 
+  logic                           in_packet_valid;
+  logic                           in_packet_ready;
+
+  // Packet Constructor Instantiation
+  wrapper_ahb_packet_constructor #(
+    INPORTAHBADDRWIDTH,
+    INPACKETWIDTH
+  ) u_wrapper_data_input_port (
+    .hclk         (HCLK),
+    .hresetn      (HRESETn),
+
+    // Input slave port: 32 bit data bus interface
+    .hsels        (hsel0),
+    .haddrs       (HADDRS[AHBADDRWIDTH-2:0]),
+    .htranss      (HTRANSS),
+    .hsizes       (HSIZES),
+    .hwrites      (HWRITES),
+    .hreadys      (HREADYS),
+    .hwdatas      (HWDATAS),
+
+    .hreadyouts   (hreadyout0),
+    .hresps       (hresp0),
+    .hrdatas      (hrdata0),
+
+    // Valid/Ready Interface
+    .packet_data       (in_packet),
+    .packet_data_last  (in_packet_last),
+    .packet_data_valid (in_packet_valid),
+    .packet_data_ready (in_packet_ready),
+
+    // Input Data Request
+    .data_req          (in_data_req)
+  );
+
+  //----------------------------------------------------------
+  // Configuration Port Logic
+  //----------------------------------------------------------
+
+  // Engine Configuration Port Wire declarations
+  logic [CFGSIZEWIDTH-1:0]        cfg_size;
+  logic [CFGSCHEMEWIDTH-1:0]      cfg_scheme;
+  logic                           cfg_last;
+  logic                           cfg_valid;
+  logic                           cfg_ready;
+
+  // Engine Configuration Port Tied-off to fixed values
+  assign cfg_size   = 64'd512;
+  assign cfg_scheme = 2'd0;
+  assign cfg_last   = 1'b1;
+  assign cfg_valid  = 1'b1;
+
+  //----------------------------------------------------------
+  // Output Port Logic
+  //----------------------------------------------------------
+
+  // Engine Output Port Wire declarations
+  logic [OUTPACKETWIDTH-1:0]      out_hash;    
+  logic                           out_hash_last; 
+  logic [OUTPACKETSPACEWIDTH-1:0] out_hash_remain;    
+  logic                           out_hash_valid;
+  logic                           out_hash_ready;
+  
+
+  // Relative Read Address for Start of Current Block  
+  logic [OUTPORTAHBADDRWIDTH-1:0]    block_read_addr;
+
+
+
+  // Packet Deconstructor Instantiation
+  wrapper_ahb_packet_deconstructor #(
+    OUTPORTAHBADDRWIDTH,
+    OUTPACKETWIDTH
+  ) u_wrapper_data_output_port (
+    .hclk         (HCLK),
+    .hresetn      (HRESETn),
+
+    // Input slave port: 32 bit data bus interface
+    .hsels        (hsel1),
+    .haddrs       (HADDRS[AHBADDRWIDTH-2:0]),
+    .htranss      (HTRANSS),
+    .hsizes       (HSIZES),
+    .hwrites      (HWRITES),
+    .hreadys      (HREADYS),
+    .hwdatas      (HWDATAS),
+
+    .hreadyouts   (hreadyout1),
+    .hresps       (hresp1),
+    .hrdatas      (hrdata1),
+
+    // Valid/Ready Interface
+    .packet_data        (out_hash),
+    .packet_data_last   (out_hash_last),
+    .packet_data_remain (out_hash_remain),
+    .packet_data_valid  (out_hash_valid),
+    .packet_data_ready  (out_hash_ready),
+
+    // Input Data Request
+    .data_req          (out_data_req),
+
+    // Read Address Interface
+   .block_read_addr           (block_read_addr)
+  );
+
+  //----------------------------------------------------------
+  // Default AHB Target Logic
+  //----------------------------------------------------------
+
+  // AHB Default Target Instantiation
+  cmsdk_ahb_default_slave  u_ahb_default_slave(
+    .HCLK         (HCLK),
+    .HRESETn      (HRESETn),
+    .HSEL         (hsel2),
+    .HTRANS       (HTRANSS),
+    .HREADY       (HREADYS),
+    .HREADYOUT    (hreadyout2),
+    .HRESP        (hresp2)
+  );
+
+  // Default Targets Data is tied off
+  assign hrdata2 = {32{1'b0}};
+
+  //**********************************************************
+  // Wrapper APB Components
+  //**********************************************************
+
+  // TODO: Instantiate APB Mux
+
+  // TODO: Instantiate APB Default Target
+
+  // TODO: Wrapper Register Blocks
+
+  //**********************************************************
+  // Wrapper Interrupt Generation
+  //**********************************************************
+
+  // TODO: Instantiate IRQ Generator
+
+  //**********************************************************
+  // Wrapper DMA Data Request Generation
+  //**********************************************************
+
+  // TODO: Write up data request logic through registers
+
+  //**********************************************************
+  // Accelerator Engine
+  //**********************************************************
+
+  //----------------------------------------------------------
+  // SOCGEN: Accelerator Engine Logic
+  //----------------------------------------------------------
+
+  logic out_digest_valid;
+
+  // Engine Output Port Wire declarations
+  logic [OUTPACKETWIDTH-1:0]      out_packet;    
+  logic                           out_packet_last; 
+  logic [OUTPACKETSPACEWIDTH-1:0] out_packet_remain;    
+  logic                           out_packet_valid;
+  logic                           out_packet_ready;
+
+    // Block Packets Remaining Tie-off (only ever one packet per block)
+  assign out_packet_remain = {OUTPACKETSPACEWIDTH{1'b0}};
+
+  // Hashing Accelerator Instatiation
+  wrapper_digest_filter u_digest_filter (
+        .clk            (HCLK),
+        .rst            (~HRESETn),
+
+        // Data in Channel
+        .s_tvalid_i     (in_packet_valid),
+        .s_tready_o     (in_packet_ready),
+        .s_tlast_i      (in_packet_last),
+
+        // Data Out Channel
+        .digest_valid_o (out_digest_valid),
+        .hash_valid_o   (out_packet_valid)
+    );
+
+
+  // Hashing Accelerator Instatiation
+  sha256_stream u_sha256_stream (
+        .clk            (HCLK),
+        .rst            (~HRESETn),
+        .mode           (1'b1),
+
+        // Data in Channel
+        .s_tdata_i      (in_packet),
+        .s_tvalid_i     (in_packet_valid),
+        .s_tready_o     (in_packet_ready),
+        .s_tlast_i      (in_packet_last),
+
+        // Data Out Channel
+        .digest_o       (out_packet),
+        .digest_valid_o (out_digest_valid)
+    );
+  
+  assign out_packet_last  = 1'b1;
+
+  // Output FIFO (Output has no handshaking)
+  fifo_vr #(
+    4,
+    256
+  ) u_output_fifo (
+    .clk  (HCLK),
+    .nrst (HRESETn),
+    .en   (1'b1),
+    .sync_rst (1'b0),
+    .data_in       (out_packet),
+    .data_in_last  (out_packet_last),
+    .data_in_valid  (out_packet_valid),
+    .data_in_ready  (),
+    .data_out       (out_hash),
+    .data_out_valid (out_hash_valid),
+    .data_out_ready (out_hash_ready),
+    .data_out_last  (out_hash_last),
+    .status_ptr_dif ()
+  );
+endmodule
\ No newline at end of file
diff --git a/wrapper/src/wrapper_secworks_sha256.sv b/wrapper/src/wrapper_secworks_sha256.sv
index b271dd0983b83c14c6376c549b32f0b6bcf5d8fb..38771cf073c2b24b7ccabd47c7fe9249ab97a3be 100644
--- a/wrapper/src/wrapper_secworks_sha256.sv
+++ b/wrapper/src/wrapper_secworks_sha256.sv
@@ -32,8 +32,6 @@ module wrapper_secworks_sha256 #(
     output logic                     HRESPS,
     output logic  [31:0]             HRDATAS,
 
-    //TODO: Add APB Interface
-
     // Input Data Request Signal to DMAC
     output logic                  in_data_req,
 
@@ -54,9 +52,12 @@ module wrapper_secworks_sha256 #(
   localparam [AHBADDRWIDTH-1:0] OUTPORTADDR         = 'h800;
   localparam                    OUTPORTAHBADDRWIDTH = AHBADDRWIDTH - 1;
 
-  localparam OUTPACKETBYTEWIDTH  = $clog2(OUTPACKETWIDTH/8);            // Number of Bytes in Packet
+  localparam OUTPACKETBYTEWIDTH  = $clog2(OUTPACKETWIDTH/8);               // Number of Bytes in Packet
   localparam OUTPACKETSPACEWIDTH = OUTPORTAHBADDRWIDTH-OUTPACKETBYTEWIDTH; // Number of Bits to represent all Packets in Address Space
-  
+
+  // CSR Parameters
+  localparam [AHBADDRWIDTH-1:0] CSRBASEADDR        = 'h800;
+
   //**********************************************************
   // Wrapper AHB Components
   //**********************************************************
diff --git a/wrapper/yaml/secworks_sha256.yaml b/wrapper/yaml/secworks_sha256.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8d6b666c0d744bbc4ab26a3f1c9d600bb855efb0
--- /dev/null
+++ b/wrapper/yaml/secworks_sha256.yaml
@@ -0,0 +1,63 @@
+#-----------------------------------------------------------------------------
+# Example YAML Wrapper Generation File 
+# 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)
+#-----------------------------------------------------------------------------
+---
+wrapper:
+  wrapper_name: secwork_sha256
+  wrapper_size: 0x1000
+  wrapper_ports: 
+  - name: AHB
+    type: AHB
+    data_width: 32
+
+  - name: in_data
+    type: dma_req
+    data_width: 1
+
+  - name: out_data
+    type: dma_req
+    data_width: 1
+
+  engine_name: stream_sha256
+  engine_ports:
+  - name: inport
+    type: input
+    interfaces:
+    - name:  packet
+      width: 512
+    size: 0x0400
+    base: 0x0000
+
+  - name: cfg
+    type: tied
+    interfaces:
+    - name:  size
+      width: 64
+    - name:  scheme
+      width: 2
+    size: 0x0000
+    base: 0x0400
+
+  - name: outport
+    type: output
+    interfaces:
+    - name: packet
+      width: 256
+    size: 0x0400
+    base: 0x0800
+
+  wrapper_registers:
+  # Allocated Space to CSR Region
+  - name: wrapper_status
+    base: 0x0800
+    size: 0x0400
+
+
+