diff --git a/flist/ahb/ahb_vip.flist b/flist/ahb/ahb_vip.flist
index 94383c6b0b17ed09a7d7e5e8aa0fee73da7094f3..86e67d2772f42b00acb99e5c310df6d3c6d0ff20 100644
--- a/flist/ahb/ahb_vip.flist
+++ b/flist/ahb/ahb_vip.flist
@@ -16,6 +16,6 @@
 +libext+.v+.vlib
 
 // =============    Accelerator Module search path    =============
-+incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/msdk_ahb_fileread_masters/verilog
++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_fileread_masters/verilog
 
--y $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/msdk_ahb_fileread_masters/verilog
+-y $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_fileread_masters/verilog
diff --git a/wrapper/src/wrapper_accelerator.sv b/wrapper/src/wrapper_accelerator.sv
index d24638af418a34f3d5fb10a8d1e19179e253265f..e90ddf717e35f9f5cf256b24335a20a3f816a0b8 100644
--- a/wrapper/src/wrapper_accelerator.sv
+++ b/wrapper/src/wrapper_accelerator.sv
@@ -1 +1,522 @@
-// T
\ No newline at end of file
+//-----------------------------------------------------------------------------
+// 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_accelerator #(
+  parameter AHBADDRWIDTH=12,
+  parameter INPACKETWIDTH=512,
+  parameter CFGSIZEWIDTH=64,
+  parameter CFGSCHEMEWIDTH=2,
+  parameter OUTPACKETWIDTH=256
+  ) (
+    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  [3:0]              HPROTS,
+    input  logic                     HWRITES,
+    input  logic                     HREADYS,
+    input  logic  [31:0]             HWDATAS,
+
+    output logic                     HREADYOUTS,
+    output logic                     HRESPS,
+    output logic  [31:0]             HRDATAS,
+
+    // Input Data Request Signal to DMAC
+    output logic                     in_data_req,
+
+    // Output Data Request Signal to DMAC
+    output logic                     out_data_req
+  );
+  
+
+  //**********************************************************
+  // Internal AHB Parameters
+  //**********************************************************
+
+  // Input Port Parameters
+  localparam [AHBADDRWIDTH-1:0] INPORTADDR         = 'h000;
+  localparam                    INPORTAHBADDRWIDTH = AHBADDRWIDTH - 2;
+
+  // Output Port Parameters
+  localparam [AHBADDRWIDTH-1:0] OUTPORTADDR         = 'h400;
+  localparam                    OUTPORTAHBADDRWIDTH = AHBADDRWIDTH - 2;
+
+  localparam OUTPACKETBYTEWIDTH  = $clog2(OUTPACKETWIDTH/8);               // Number of Bytes in Packet
+  localparam OUTPACKETSPACEWIDTH = OUTPORTAHBADDRWIDTH-OUTPACKETBYTEWIDTH; // Number of Bits to represent all Packets in Address Space
+
+  // Control and Status Register Parameters
+  localparam [AHBADDRWIDTH-1:0] CSRADDR         = 'h800;
+  localparam                    CSRADDRWIDTH    = AHBADDRWIDTH - 2;
+  
+  //**********************************************************
+  // 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 - CSRs 
+  logic             hsel2;
+  logic             hreadyout2;
+  logic             hresp2;
+  logic [31:0]      hrdata2;
+
+  // AHB Target 3 - Default Target
+  logic             hsel3;
+  logic             hreadyout3;
+  logic             hresp3;
+  logic [31:0]      hrdata3;
+
+  // Internal AHB Address Assignment
+  assign hsel0 = ((HADDRS < OUTPORTADDR) && (HADDRS >= INPORTADDR)) ? 1'b1:1'b0; // Input Port Select
+  assign hsel1 = ((HADDRS < CSRADDR) && (HADDRS >= OUTPORTADDR)) ? 1'b1:1'b0; // Output Port Select
+  assign hsel2 = (HADDRS >= CSRADDR) ? 1'b1:1'b0;                                // CSR Select
+  assign hsel3 = (hsel0 | hsel1 | hsel2) ? 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       (hsel3),     // Input Port 3
+    .HREADYOUT3  (hreadyout3),
+    .HRESP3      (hresp3),
+    .HRDATA3     (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;
+
+  // DMA 
+  logic in_dma_req_act;
+
+  // 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[INPORTAHBADDRWIDTH-1: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_dma_req_act)
+  );
+
+  //----------------------------------------------------------
+  // 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;
+
+  // DMA Request Line
+  logic out_dma_req_act;
+
+  // 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[OUTPORTAHBADDRWIDTH-1: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_dma_req_act),
+
+    // Read Address Interface
+   .block_read_addr     (block_read_addr)
+  );
+
+  //----------------------------------------------------------
+  // Wrapper Control and Staus Registers
+  //----------------------------------------------------------
+
+  // CSR APB wiring logic
+  logic [CSRADDRWIDTH-1:0] CSRPADDR;
+  logic                    CSRPENABLE;
+  logic                    CSRPWRITE;
+  logic [3:0]              CSRPSTRB;
+  logic [2:0]              CSRPPROT;
+  logic [31:0]             CSRPWDATA;
+  logic                    CSRPSEL;
+
+  logic                    CSRAPBACTIVE;
+  logic [31:0]             CSRPRDATA;
+  logic                    CSRPREADY;
+  logic                    CSRPSLVERR;
+
+  // CSR register wiring logic
+  logic  [CSRADDRWIDTH-1:0] csr_reg_addr;
+  logic                     csr_reg_read_en;
+  logic                     csr_reg_write_en;
+  logic  [31:0]             csr_reg_wdata;
+  logic  [31:0]             csr_reg_rdata;
+
+  // AHB to APB Bridge
+  cmsdk_ahb_to_apb #(
+    CSRADDRWIDTH
+  ) u_csr_ahb_apb_bridge (
+    .HCLK       (HCLK),    // Clock
+    .HRESETn    (HRESETn), // Reset
+    .PCLKEN     (1'b1),    // APB clock enable signal
+    
+    .HSEL       (hsel2),      // Device select
+    .HADDR     (HADDRS[CSRADDRWIDTH-1:0]),   // Address
+    .HTRANS     (HTRANSS),    // Transfer control
+    .HSIZE      (HSIZES),     // Transfer size
+    .HPROT      (4'b1111),    // Protection control
+    .HWRITE     (HWRITES),    // Write control
+    .HREADY    (HREADYS),     // Transfer phase done
+    .HWDATA     (HWDATAS),    // Write data
+
+    .HREADYOUT  (hreadyout2), // Device ready
+    .HRDATA     (hrdata2),    // Read data output
+    .HRESP      (hresp2),     // Device response
+    
+    // APB Output
+    .PADDR     (CSRPADDR),      // APB Address
+    .PENABLE   (CSRPENABLE),    // APB Enable
+    .PWRITE    (CSRPWRITE),     // APB Write
+    .PSTRB     (CSRPSTRB),      // APB Byte Strobe
+    .PPROT     (CSRPPROT),      // APB Prot
+    .PWDATA    (CSRPWDATA),     // APB write data
+    .PSEL      (CSRPSEL),       // APB Select
+
+    .APBACTIVE (CSRAPBACTIVE),  // APB bus is active, for clock gating
+    // of APB bus
+
+    // APB Input
+    .PRDATA    (CSRPRDATA),    // Read data for each APB slave
+    .PREADY    (CSRPREADY),    // Ready for each APB slave
+    .PSLVERR   (CSRPSLVERR)    // Error state for each APB slave
+  );  
+
+  // APB to Register Interface
+  cmsdk_apb3_eg_slave_interface #(
+    CSRADDRWIDTH
+  ) u_csr_reg_inf (
+
+    .pclk            (HCLK),     // pclk
+    .presetn         (HRESETn),  // reset
+
+    .psel            (CSRPSEL),     // apb interface inputs
+    .paddr           (CSRPADDR),
+    .penable         (CSRPENABLE),
+    .pwrite          (CSRPWRITE),
+    .pwdata          (CSRPWDATA),
+
+    .prdata          (CSRPRDATA),   // apb interface outputs
+    .pready          (CSRPREADY),
+    .pslverr         (CSRPSLVERR),
+
+    // Register interface
+    .addr            (csr_reg_addr),
+    .read_en         (csr_reg_read_en),
+    .write_en        (csr_reg_write_en),
+    .wdata           (csr_reg_wdata),
+    .rdata           (csr_reg_rdata)
+  );
+
+  logic ctrl_reg_write_en, ctrl_reg_read_en;
+  assign ctrl_reg_write_en = csr_reg_write_en & (csr_reg_addr < 10'h100);
+  assign ctrl_reg_read_en  = csr_reg_read_en  & (csr_reg_addr < 10'h100);
+  // // Example Register Block
+  // cmsdk_apb3_eg_slave_reg #(
+  //   CSRADDRWIDTH
+  // ) u_csr_block (
+  //   .pclk            (HCLK),
+  //   .presetn         (HRESETn),
+
+  //   // Register interface
+  //   .addr            (csr_reg_addr),
+  //   .read_en         (csr_reg_read_en),
+  //   .write_en        (csr_reg_write_en),
+  //   .wdata           (csr_reg_wdata),
+  //   .ecorevnum       (4'd0),
+  //   .rdata           (csr_reg_rdata)
+  // );
+
+  //----------------------------------------------------------
+  // Default AHB Target Logic
+  //----------------------------------------------------------
+
+  // AHB Default Target Instantiation
+  cmsdk_ahb_default_slave  u_ahb_default_slave(
+    .HCLK         (HCLK),
+    .HRESETn      (HRESETn),
+    .HSEL         (hsel3),
+    .HTRANS       (HTRANSS),
+    .HREADY       (HREADYS),
+    .HREADYOUT    (hreadyout3),
+    .HRESP        (hresp3)
+  );
+
+  // Default Targets Data is tied off
+  assign hrdata3 = {32{1'b0}};
+
+  //**********************************************************
+  // Wrapper Interrupt Generation
+  //**********************************************************
+
+  // TODO: Instantiate IRQ Generator
+
+  //**********************************************************
+  // Wrapper DMA Data Request Generation
+  //**********************************************************
+
+  wrapper_req_ctrl_reg #(
+    CSRADDRWIDTH
+  ) u_wrapper_req_ctrl_reg (
+    .hclk        (HCLK),       
+    .hresetn     (HRESETn),    
+    .addr        (csr_reg_addr),
+    .read_en     (ctrl_reg_read_en),
+    .write_en    (ctrl_reg_write_en),
+    .wdata       (csr_reg_wdata),
+    .rdata       (csr_reg_rdata),
+
+    // Data Transfer Request Signaling
+    .req_act_ch0 (in_dma_req_act),
+    .req_act_ch1 (out_dma_req_act),
+    .req_act_ch2 (1'b0),
+    .req_act_ch3 (1'b0),
+    .req_act_ch4 (1'b0),
+
+    // DMA Request Output
+    .drq_ch0     (in_data_req),
+    .drq_ch1     (out_data_req),
+    .drq_ch2     (),
+    .drq_ch3     (),
+    .drq_ch4     (),
+
+    // Interrupt Request Output
+    .irq_ch0     (),
+    .irq_ch1     (),
+    .irq_ch2     (),
+    .irq_ch3     (),
+    .irq_ch4     (),
+    .irq_merged  ()
+  );
+
+  //**********************************************************
+  // Accelerator Engine
+  //**********************************************************
+
+  //----------------------------------------------------------
+  // 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_valid_filter u_valid_filter (
+        .clk            (HCLK),
+        .rst            (~HRESETn),
+
+        // Data in Channel
+        .data_in_valid     (in_packet_valid),
+        .data_in_ready     (in_packet_ready),
+        .data_in_last      (in_packet_last),
+
+        // Data Out Channel
+        .data_out_valid    (out_digest_valid),
+        .payload_out_valid (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