diff --git a/axi2sramcrs/rtl/axi2axilite/axi2axilite.v b/axi2sramcrs/rtl/axi2axilite/axi2axilite.v
new file mode 100644
index 0000000..68e4946
--- /dev/null
+++ b/axi2sramcrs/rtl/axi2axilite/axi2axilite.v
@@ -0,0 +1,556 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module axi2axilite
+ #(
+  //id width
+  parameter       ARID_WIDTH=4,
+  parameter       AWID_WIDTH=4,
+  //addr width
+  parameter       ADDR_WIDTH=32,
+  //user width
+  parameter       USER_WIDTH=4 )
+
+  (
+  input                            aclk,
+  input                            aresetn,
+  //===========================================
+  //==slave port
+  //===========================================
+
+  input   [AWID_WIDTH-1:0]         awid_s,
+  input   [ADDR_WIDTH-1:0]         awaddr_s,
+  input   [7:0]                    awlen_s,
+  input   [2:0]                    awsize_s,
+  input   [1:0]                    awburst_s,
+  input   [1:0]                    awlock_s,
+  input   [3:0]                    awcache_s,
+  input   [2:0]                    awprot_s,
+  input                            awvalid_s,
+  output reg                       awready_s,
+  input  [USER_WIDTH-1:0]          awuser_s,
+  input  [3:0]                     awregion_s,
+
+  input   [AWID_WIDTH-1:0]         wid_s,
+  input   [255:0]                   wdata_s,
+  input   [31:0]                    wstrb_s,
+  input                            wlast_s,
+  input                            wvalid_s,
+  output                           wready_s,
+  input  [USER_WIDTH-1:0]          wuser_s,
+
+
+  output reg [AWID_WIDTH-1:0]      bid_s,
+  output reg [1:0]                 bresp_s,
+  output reg                       bvalid_s,
+  input                            bready_s,
+  output reg [USER_WIDTH-1:0]      buser_s,
+
+
+  input   [ARID_WIDTH-1:0]         arid_s,
+  input   [ADDR_WIDTH-1:0]         araddr_s,
+  input   [7:0]                    arlen_s,
+  input   [2:0]                    arsize_s,
+  input   [1:0]                    arburst_s,
+  input   [1:0]                    arlock_s,
+  input   [3:0]                    arcache_s,
+  input   [2:0]                    arprot_s,
+  input                            arvalid_s,
+  output reg                       arready_s,
+  input  [USER_WIDTH-1:0]          aruser_s,
+  input  [3:0]                     arregion_s,
+
+
+  output reg [ARID_WIDTH-1:0]      rid_s,
+  output     [31:0]                rdata_s,
+  output     [1:0]                 rresp_s,
+  output reg                       rlast_s,
+  output                           rvalid_s,
+  input                            rready_s,
+  output reg [USER_WIDTH-1:0]      ruser_s,
+
+
+  input   [3:0]                    awqos_s,
+  input   [3:0]                    arqos_s,
+
+  //===========================================
+  //==master port
+  //===========================================
+  output reg                       awvalid_m,
+  input                            awready_m,
+  output reg [ADDR_WIDTH-1:0]      awaddr_m,
+  output reg [2:0]                 awprot_m,
+  output reg [USER_WIDTH-1:0]      awuser_m,
+
+  output                           wvalid_m,
+  input                            wready_m,
+  output     [255:0]                wdata_m,
+  output     [31:0]                 wstrb_m,
+
+  input                            bvalid_m,
+  output                           bready_m,
+  input      [1:0]                 bresp_m,
+
+  output reg                       arvalid_m,
+  input                            arready_m,
+  output reg [ADDR_WIDTH-1:0]      araddr_m,
+  output reg [2:0]                 arprot_m,
+  output reg [USER_WIDTH-1:0]      aruser_m,
+
+  input                            rvalid_m,
+  output                           rready_m,
+  input      [31:0]                rdata_m,
+  input      [1:0]                 rresp_m
+  );
+
+localparam      R_SLICE_TYPE_S=2'h0;
+localparam      W_SLICE_TYPE_S=2'h0;
+localparam      R_DATA_WIDTH_S=(32+2);
+localparam      W_DATA_WIDTH_S=(256+32);
+
+//===========================================
+//==wire and reg declaration
+//===========================================
+
+wire    [W_DATA_WIDTH_S-1:0]  src_data_w_sm , dst_data_w_sm;
+wire    [R_DATA_WIDTH_S-1:0]  src_data_r_ms , dst_data_r_ms;
+wire                          wready_s_l,rvalid_s_l;
+wire    [1:0]                 rresp_s_l;
+wire    [31:0]                rdata_s_l;
+wire                          illegal_w,illegal_r;
+reg                           illegal_wr,illegal_rr;
+reg     [7:0]                 awlen_s_r,arlen_s_r,awaddr_cnt,araddr_cnt,bresp_cnt,rdata_cnt;
+reg     [1:0]                 awburst_s_r,arburst_s_r;
+reg                           now_in_wr;
+reg     [1:0]                 bresp_m_r;
+
+//===========================================
+// --------------------------------------------------------------------
+// invalid cmd from SI will be block:
+//   1. data_width != 256
+//non-bufferable not merge
+//assign illegal_w = ((awsize_s != 3'b101)&&awvalid_s&&awready_s)?1'b1:1'b0;
+assign illegal_w = 1'b0;
+assign illegal_r = ((arsize_s != 3'b101)&&arvalid_s&&arready_s)?1'b1:1'b0;
+
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      illegal_wr <= 1'b0;
+    else if(wlast_s&&wvalid_s&&wready_s)
+      illegal_wr <= 1'b0;
+    else if(illegal_w)
+      illegal_wr <= 1'b1;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      illegal_rr <= 1'b0;
+    else if(rlast_s&&rvalid_s&&rready_s)
+      illegal_rr <= 1'b0;
+    else if(illegal_r)
+      illegal_rr <= 1'b1;
+  end
+
+assign wready_s = illegal_wr || (wready_s_l&&now_in_wr) ; //always wready_s when illegal
+assign rvalid_s = illegal_rr || rvalid_s_l ; //always vvalid_s when illegal
+assign rresp_s  = illegal_rr ? 2'b10 : rresp_s_l ; //ERROR when illegal wr
+assign rdata_s  = illegal_rr ? 32'h0 : rdata_s_l ; //read data all-0 when illegal rd
+
+
+//===========================================
+// aw channel
+//===========================================
+
+//axi-port
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      awready_s <= 1'b1;
+    else if(bvalid_s&&bready_s)
+      awready_s <= 1'b1;
+    else if(awvalid_s&&awready_s)
+      awready_s <= 1'b0;
+  end
+
+//axilite-port
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      awvalid_m <= 1'b0;
+    else if(awvalid_s&&awready_s&&(~illegal_w))
+      awvalid_m <= 1'b1;
+    else if(awvalid_m&&awready_m&&((awaddr_cnt==awlen_s_r)))
+      awvalid_m <= 1'b0;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      awaddr_m <= {ADDR_WIDTH{1'b0}};
+    else if(awvalid_s&&awready_s&&(~illegal_w))
+      awaddr_m <= {awaddr_s[ADDR_WIDTH-1:5],5'b00};//address not change in 32B
+     else if(awvalid_m&&awready_m&&(awaddr_cnt!=awlen_s_r))
+       begin
+         if(awburst_s_r==2'b01)//INCR: Updated
+           awaddr_m <= awaddr_m + {{(ADDR_WIDTH-4){1'b0}},4'd8};
+         else if(awburst_s_r == 2'b10)//WRAP: dont touched
+           begin
+             if(awlen_s_r[7])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:10],(awaddr_m[9:0] + 10'h4)};
+             else if(awlen_s_r[6])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:9],(awaddr_m[8:0] + 9'h4)};
+             else if(awlen_s_r[5])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:8],(awaddr_m[7:0] + 8'h4)};
+             else if(awlen_s_r[4])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:7],(awaddr_m[6:0] + 7'h4)};
+             else if(awlen_s_r[3])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:6],(awaddr_m[5:0] + 6'h4)};
+             else if(awlen_s_r[2])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:5],(awaddr_m[4:0] + 5'h4)};
+             else if(awlen_s_r[1])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:4],(awaddr_m[3:0] + 4'h4)};
+             else if(awlen_s_r[0])
+               awaddr_m <= {awaddr_m[ADDR_WIDTH-1:3],(awaddr_m[2:0] + 3'h4)};
+           end
+      end
+  end
+
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      begin
+        awprot_m <= 3'h0;
+        awuser_m <= {USER_WIDTH{1'b0}};
+      end
+    else if(awvalid_s&&awready_s)
+      begin
+        awprot_m <= awprot_s;
+        awuser_m <= awuser_s;
+      end
+ end
+
+//local signal
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      awaddr_cnt  <= 8'h0;
+    else if(awvalid_s&&awready_s)
+      awaddr_cnt  <= 8'h0;
+    else if(awvalid_m&&awready_m&&(awaddr_cnt!=awlen_s_r))
+      awaddr_cnt <= awaddr_cnt + 8'h1;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      begin
+        awlen_s_r   <= 8'h0;
+        awburst_s_r <= 2'h0;
+      end
+    else if(awvalid_s&&awready_s)
+      begin
+        awlen_s_r   <= awlen_s;
+        awburst_s_r <= awburst_s;
+      end
+  end
+
+
+
+//===========================================
+// wdata channel
+//===========================================
+
+assign src_data_w_sm={
+wstrb_s,
+wdata_s
+};
+assign  {
+wstrb_m,
+wdata_m
+}=dst_data_w_sm;
+axi_slice #(
+    .HNDSHK_MODE(W_SLICE_TYPE_S),
+    .PAYLD_WIDTH(W_DATA_WIDTH_S))
+    u_axi_w_sm(
+               // Outputs
+               .dst_data                (dst_data_w_sm),         // Templated
+               .src_ready               (wready_s_l),              // Templated
+               .dst_valid               (wvalid_m),              // Templated
+               // Inputs
+               .aresetn                 (aresetn),
+               .aclk                    (aclk),
+               .src_data                (src_data_w_sm),         // Templated
+               .src_valid               (wvalid_s&&(~illegal_wr)&&now_in_wr), // Templated
+               .dst_ready               (wready_m));             // Templated
+
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      now_in_wr <= 1'b0;
+    else if(wlast_s&&wvalid_s&&wready_s)
+      now_in_wr <= 1'b0;
+    else if(awvalid_s&&awready_s)
+      now_in_wr <= 1'b1;
+  end
+
+//===========================================
+//b channel
+//===========================================
+
+//axi-port
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      bresp_s <= 2'h0;
+    else if(bvalid_s&&bready_s)
+      bresp_s <= 2'h0;
+    else if((bresp_cnt == awlen_s_r)&&illegal_wr&&wvalid_s&&wready_s)
+      bresp_s <= 2'b10;
+    else if((bresp_cnt == awlen_s_r)&&bvalid_m&&bready_m)
+      begin
+        if(bresp_m_r != 2'h0)
+          bresp_s <= bresp_m_r;
+        else
+          bresp_s <= bresp_m;
+      end
+  end
+
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      bresp_m_r <= 2'h0;
+    else if(bvalid_s&&bready_s)
+      bresp_m_r <= 2'h0;
+    else if((bresp_m_r == 2'h0)&&(bresp_m != 2'h0)&&bvalid_m&&bready_m)//store 1st ERROR
+      bresp_m_r <= bresp_m;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      bvalid_s <= 1'b0;
+    else if(bvalid_s&&bready_s)
+      bvalid_s <= 1'b0;
+    else if(wlast_s&&wvalid_s&&wready_s&&illegal_wr)//illegal bresp
+      bvalid_s <= 1'b1;
+    else if((bresp_cnt == awlen_s_r)&&bvalid_m&&bready_m)
+      bvalid_s <= 1'b1;
+  end
+
+always @(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      bid_s <= {ARID_WIDTH{1'b0}};
+    else if(awvalid_s&&awready_s)
+      bid_s <= awid_s;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      buser_s <= {USER_WIDTH{1'b0}};
+    else if(awvalid_s&&awready_s)
+      buser_s <= awuser_s;
+  end
+
+//axilite-port
+assign bready_m = 1'b1;
+
+//local signals
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      bresp_cnt <= 8'h0;
+    else if(bvalid_s&&bready_s)
+      bresp_cnt <= 8'h0;
+    else if(illegal_wr&&wvalid_s&&wready_s)
+      bresp_cnt <= bresp_cnt + 8'h1;
+    else if(bvalid_m&&bready_m)
+      bresp_cnt <= bresp_cnt + 8'h1;
+  end
+
+//===========================================
+// ar channel
+//===========================================
+
+//axi-port
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      arready_s <= 1'b1;
+    else if(rvalid_s&&rready_s&&rlast_s)
+      arready_s <= 1'b1;
+    else if(arvalid_s&&arready_s)
+      arready_s <= 1'b0;
+  end
+
+//axilite-port
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      arvalid_m <= 1'b0;
+    else if(arvalid_s&&arready_s&&(~illegal_r))
+      arvalid_m <= 1'b1;
+    else if(arvalid_m&&arready_m&&((araddr_cnt==arlen_s_r)))
+      arvalid_m <= 1'b0;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      araddr_m <= {ADDR_WIDTH{1'b0}};
+    else if(arvalid_s&&arready_s&&(~illegal_r))
+      araddr_m <= {araddr_s[ADDR_WIDTH-1:2],2'b00}; //if unalign
+    else if(arvalid_m&&arready_m&&(araddr_cnt!=arlen_s_r))
+      begin
+        if(arburst_s_r==2'b01)//INCR
+          araddr_m <= araddr_m + {{(ADDR_WIDTH-3){1'b0}},3'h4};
+        else if(arburst_s_r == 2'b10)//WRAP
+          begin
+            if(arlen_s_r[7])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:10],(araddr_m[9:0] + 10'h4)};
+            else if(arlen_s_r[6])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:9],(araddr_m[8:0] + 9'h4)};
+            else if(arlen_s_r[5])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:8],(araddr_m[7:0] + 8'h4)};
+            else if(arlen_s_r[4])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:7],(araddr_m[6:0] + 7'h4)};
+            else if(arlen_s_r[3])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:6],(araddr_m[5:0] + 6'h4)};
+            else if(arlen_s_r[2])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:5],(araddr_m[4:0] + 5'h4)};
+            else if(arlen_s_r[1])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:4],(araddr_m[3:0] + 4'h4)};
+            else if(arlen_s_r[0])
+              araddr_m <= {araddr_m[ADDR_WIDTH-1:3],(araddr_m[2:0] + 3'h4)};
+          end
+      end
+  end
+
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      begin
+        arprot_m <= 3'h0;
+        aruser_m <= {USER_WIDTH{1'b0}};
+      end
+    else if(arvalid_s&&arready_s&&(~illegal_r))
+      begin
+        arprot_m <= arprot_s;
+        aruser_m <= aruser_s;
+      end
+ end
+
+//local signals
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      begin
+        araddr_cnt  <= 8'h0;
+        arlen_s_r   <= 8'h0;
+        arburst_s_r <= 2'h0;
+      end
+    else if(arvalid_s&&arready_s)
+      begin
+        araddr_cnt  <= 8'h0;
+        arlen_s_r   <= arlen_s;
+        arburst_s_r <= arburst_s;
+      end
+    else if(arvalid_m&&arready_m&&(araddr_cnt!=arlen_s_r))
+      araddr_cnt <= araddr_cnt + 8'h1;
+  end
+
+
+//===========================================
+// rdata channel
+//===========================================
+
+assign src_data_r_ms={
+rresp_m,
+rdata_m
+};
+assign  {
+rresp_s_l,
+rdata_s_l
+}=dst_data_r_ms;
+axi_slice #(
+    .HNDSHK_MODE(R_SLICE_TYPE_S),
+    .PAYLD_WIDTH(R_DATA_WIDTH_S))
+    u_axi_r_ms(
+               // Outputs
+               .dst_data                (dst_data_r_ms),         // Templated
+               .src_ready               (rready_m),              // Templated
+               .dst_valid               (rvalid_s_l),              // Templated
+               // Inputs
+               .aresetn                 (aresetn),
+               .aclk                    (aclk),
+               .src_data                (src_data_r_ms),         // Templated
+               .src_valid               (rvalid_m),              // Templated
+               .dst_ready               (rready_s));             // Templated
+
+//axi-port
+always @(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      begin
+        rid_s <= {ARID_WIDTH{1'b0}};
+        ruser_s <= {USER_WIDTH{1'b0}};
+      end
+    else if(arvalid_s&&arready_s)
+      begin
+        rid_s <= arid_s;
+        ruser_s <= aruser_s;
+      end
+  end
+
+
+//local signals
+always @(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      rdata_cnt <= 8'h0;
+    else if(rlast_s)
+      rdata_cnt <= 8'h0;
+    else if(rvalid_s&&rready_s)
+      rdata_cnt <= rdata_cnt + 8'h1;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      rlast_s <= 1'b0;
+    else if(rlast_s&&rvalid_s&&rready_s)
+      rlast_s <= 1'b0;
+    else if((arlen_s == 8'h0)&&arvalid_s&&arready_s)
+      rlast_s <= 1'b1;
+    else if((rdata_cnt == (arlen_s_r - 8'h1))&&rvalid_s&&rready_s)
+      rlast_s <= 1'b1;
+  end
+
+endmodule
diff --git a/axi2sramcrs/rtl/axi2sramcrs.v b/axi2sramcrs/rtl/axi2sramcrs.v
new file mode 100644
index 0000000..216c01a
--- /dev/null
+++ b/axi2sramcrs/rtl/axi2sramcrs.v
@@ -0,0 +1,347 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module axi2sramcrs #(
+    parameter       ARID_WIDTH=4,
+    parameter       AWID_WIDTH=4,
+    parameter       ADDR_WIDTH=32,
+    parameter       US_DATA_WIDTH=64,
+    parameter       DS_DATA_WIDTH=256,
+    parameter       USER_WIDTH=16,
+    parameter       IS_AXI3=1'h1,
+    parameter       AXLEN_WIDTH=(IS_AXI3==1'h1) ? 4 : 8,
+    parameter       RD_ISS=128,
+    parameter       WR_ISS=128,
+    parameter      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8,
+    parameter      US_WSTRB_WIDTH=US_DATA_WIDTH/8)
+(
+  input                            aclk,
+  input                            aresetn,
+
+  input   [AWID_WIDTH-1:0]       awid_s,
+  input   [ADDR_WIDTH-1:0]      awaddr_s,
+  input   [AXLEN_WIDTH-1:0]       awlen_s,
+  input   [2:0]       awsize_s,
+  input   [1:0]       awburst_s,
+  input   [1:0]       awlock_s,
+  input   [3:0]       awcache_s,
+  input   [2:0]       awprot_s,
+  input               awvalid_s,
+  output              awready_s,
+  input  [USER_WIDTH-1:0]       awuser_s,
+  input  [3:0]                  awregion_s,
+  input   [US_DATA_WIDTH-1:0]     wdata_s,
+  input   [US_WSTRB_WIDTH-1:0]      wstrb_s,
+  input               wlast_s,
+  input               wvalid_s,
+  output              wready_s,
+  input  [AWID_WIDTH-1:0]       wid_s,
+  input  [USER_WIDTH-1:0]       wuser_s,
+  output  [AWID_WIDTH-1:0]       bid_s,
+  output  [1:0]       bresp_s,
+  output              bvalid_s,
+  input               bready_s,
+  output  [USER_WIDTH-1:0]      buser_s,
+  input   [3:0]       awqos_s,
+
+  output                        sram_cvalid,
+  input                         sram_cready,
+  output                        sram_cwrite,
+  output  [31:0]                sram_caddr,
+  output  [7:0]                 sram_cid,
+  output  [255:0]               sram_wdata,
+  output  [31:0]                sram_wmask
+);
+
+localparam      DS_AXI3=IS_AXI3;
+localparam      DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam      US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam	ARFMT_WIDTH=1+1+ARID_WIDTH+DS_ADDR_AL_WIDTH*3+1+3;
+localparam	AWFMT_WIDTH=AWID_WIDTH+1+4+1+DS_ADDR_AL_WIDTH*2+3+1;
+localparam      US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam      US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam      US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam      AW_IDB_WIDTH=US_AW_WIDTH;
+localparam      AR_IDB_WIDTH=US_AR_WIDTH;
+localparam      W_IDB_WIDTH=AWID_WIDTH+USER_WIDTH+DS_DATA_WIDTH+DS_WSTRB_WIDTH+1;
+localparam	R_IDB_WIDTH=USER_WIDTH+ARID_WIDTH+DS_DATA_WIDTH+2+1;
+localparam      B_IDB_WIDTH=USER_WIDTH+2+AWID_WIDTH;
+
+
+//Interface between upsizer and axi2axilite
+wire  [AWID_WIDTH-1:0]       awid_m;
+wire  [ADDR_WIDTH-1:0]      awaddr_m;
+wire  [AXLEN_WIDTH-1:0]       awlen_m;
+wire  [2:0]       awsize_m;
+wire  [1:0]       awburst_m;
+wire  [1:0]       awlock_m;
+wire  [3:0]       awcache_m;
+wire  [2:0]       awprot_m;
+wire              awvalid_m;
+wire              awready_m;
+wire  [USER_WIDTH-1:0]      awuser_m;
+wire  [3:0]                 awregion_m;
+wire  [DS_DATA_WIDTH-1:0]     wdata_m;
+wire  [DS_WSTRB_WIDTH-1:0]      wstrb_m;
+wire              wlast_m;
+wire              wvalid_m;
+wire              wready_m;
+wire  [AWID_WIDTH-1:0]      wid_m;
+wire  [USER_WIDTH-1:0]      wuser_m;
+wire  [AWID_WIDTH-1:0]       bid_m;
+wire  [1:0]       bresp_m;
+wire              bvalid_m;
+wire              bready_m;
+wire  [USER_WIDTH-1:0]      buser_m;
+wire  [ARID_WIDTH-1:0]       arid_m;
+wire  [ADDR_WIDTH-1:0]      araddr_m;
+wire  [AXLEN_WIDTH-1:0]       arlen_m;
+wire  [2:0]       arsize_m;
+wire  [1:0]       arburst_m;
+wire  [1:0]       arlock_m;
+wire  [3:0]       arcache_m;
+wire  [2:0]       arprot_m;
+wire              arvalid_m;
+wire              arready_m;
+wire  [USER_WIDTH-1:0]      aruser_m;
+wire  [3:0]                 arregion_m;
+wire  [ARID_WIDTH-1:0]       rid_m;
+wire  [DS_DATA_WIDTH-1:0]     rdata_m;
+wire  [1:0]       rresp_m;
+wire              rlast_m;
+wire              rvalid_m;
+wire              rready_m;
+wire  [USER_WIDTH-1:0]      ruser_m;
+wire  [3:0]       awqos_m;
+wire  [3:0]       arqos_m;
+//Interface between axi2axilite and axilite2sram
+wire                       awvalid_lite_m;
+wire                       awready_lite_m;
+wire [ADDR_WIDTH-1:0]      awaddr_lite_m;
+wire [2:0]                 awprot_lite_m;
+wire [USER_WIDTH-1:0]      awuser_lite_m;
+wire                       wvalid_lite_m;
+wire                       wready_lite_m;
+wire    [255:0]            wdata_lite_m;
+wire    [31:0]             wstrb_lite_m;
+wire                       bvalid_lite_m;
+wire                       bready_lite_m;
+wire      [1:0]            bresp_lite_m;
+
+axi_upsizer u_upsizer(/*AUTOINST*/
+                      // Outputs
+                      .awid_m           (awid_m[AWID_WIDTH-1:0]),
+                      .awaddr_m         (awaddr_m[ADDR_WIDTH-1:0]),
+                      .awlen_m          (awlen_m[AXLEN_WIDTH-1:0]),
+                      .awsize_m         (awsize_m[2:0]),
+                      .awburst_m        (awburst_m[1:0]),
+                      .awlock_m         (awlock_m[1:0]),
+                      .awcache_m        (awcache_m[3:0]),
+                      .awprot_m         (awprot_m[2:0]),
+                      .awvalid_m        (awvalid_m),
+                      .awuser_m         (awuser_m[USER_WIDTH-1:0]),
+                      .awregion_m       (awregion_m[3:0]),
+                      .wdata_m          (wdata_m[DS_DATA_WIDTH-1:0]),
+                      .wstrb_m          (wstrb_m[DS_WSTRB_WIDTH-1:0]),
+                      .wlast_m          (wlast_m),
+                      .wvalid_m         (wvalid_m),
+                      .wid_m            (wid_m[AWID_WIDTH-1:0]),
+                      .wuser_m          (wuser_m[USER_WIDTH-1:0]),
+                      .bready_m         (bready_m),
+                      .arid_m           (arid_m[ARID_WIDTH-1:0]),
+                      .araddr_m         (araddr_m[ADDR_WIDTH-1:0]),
+                      .arlen_m          (arlen_m[AXLEN_WIDTH-1:0]),
+                      .arsize_m         (arsize_m[2:0]),
+                      .arburst_m        (arburst_m[1:0]),
+                      .arlock_m         (arlock_m[1:0]),
+                      .arcache_m        (arcache_m[3:0]),
+                      .arprot_m         (arprot_m[2:0]),
+                      .arvalid_m        (arvalid_m),
+                      .aruser_m         (aruser_m[USER_WIDTH-1:0]),
+                      .arregion_m       (arregion_m[3:0]),
+                      .rready_m         (rready_m),
+                      .awqos_m          (awqos_m[3:0]),
+                      .arqos_m          (arqos_m[3:0]),
+                      .awready_s        (awready_s),
+                      .wready_s         (wready_s),
+                      .bid_s            (bid_s[AWID_WIDTH-1:0]),
+                      .bresp_s          (bresp_s[1:0]),
+                      .bvalid_s         (bvalid_s),
+                      .buser_s          (buser_s[USER_WIDTH-1:0]),
+                      .arready_s        (),
+                      .rid_s            (),
+                      .rdata_s          (),
+                      .rresp_s          (),
+                      .rlast_s          (),
+                      .rvalid_s         (),
+                      .ruser_s          (),
+                      // Inputs
+                      .aclk             (aclk),
+                      .aresetn          (aresetn),
+                      .awready_m        (awready_m),
+                      .wready_m         (wready_m),
+                      .bid_m            (bid_m[AWID_WIDTH-1:0]),
+                      .bresp_m          (bresp_m[1:0]),
+                      .bvalid_m         (bvalid_m),
+                      .buser_m          (buser_m[USER_WIDTH-1:0]),
+                      .arready_m        (arready_m),
+                      .rid_m            (rid_m[ARID_WIDTH-1:0]),
+                      .rdata_m          (rdata_m[DS_DATA_WIDTH-1:0]),
+                      .rresp_m          (rresp_m[1:0]),
+                      .rlast_m          (rlast_m),
+                      .rvalid_m         (rvalid_m),
+                      .ruser_m          (ruser_m[USER_WIDTH-1:0]),
+                      .awid_s           (awid_s[AWID_WIDTH-1:0]),
+                      .awaddr_s         (awaddr_s[ADDR_WIDTH-1:0]),
+                      .awlen_s          (awlen_s[AXLEN_WIDTH-1:0]),
+                      .awsize_s         (awsize_s[2:0]),
+                      .awburst_s        (awburst_s[1:0]),
+                      .awlock_s         (awlock_s[1:0]),
+                      .awcache_s        (awcache_s[3:0]),
+                      .awprot_s         (awprot_s[2:0]),
+                      .awvalid_s        (awvalid_s),
+                      .awuser_s         (awuser_s[USER_WIDTH-1:0]),
+                      .awregion_s       (awregion_s[3:0]),
+                      .wdata_s          (wdata_s[US_DATA_WIDTH-1:0]),
+                      .wstrb_s          (wstrb_s[US_WSTRB_WIDTH-1:0]),
+                      .wlast_s          (wlast_s),
+                      .wvalid_s         (wvalid_s),
+                      .wid_s            (wid_s[AWID_WIDTH-1:0]),
+                      .wuser_s          (wuser_s[USER_WIDTH-1:0]),
+                      .bready_s         (bready_s),
+                      .arid_s           (4'b0),
+                      .araddr_s         (32'b0),
+                      .arlen_s          (4'b0),
+                      .arsize_s         (3'b0),
+                      .arburst_s        (2'b0),
+                      .arlock_s         (2'b0),
+                      .arcache_s        (4'b0),
+                      .arprot_s         (3'b0),
+                      .arvalid_s        (1'b0),
+                      .aruser_s         (16'b0),
+                      .arregion_s       (4'b0),
+                      .rready_s         (1'b0),
+                      .awqos_s          (awqos_m[3:0]),
+                      .arqos_s          (4'b0));
+
+
+axi2axilite u_axi2axilite(/*AUTOINST*/
+                          // Outputs
+                          .awready_s            (awready_m),
+                          .wready_s             (wready_m),
+                          .bid_s                (bid_m[AWID_WIDTH-1:0]),
+                          .bresp_s              (bresp_m[1:0]),
+                          .bvalid_s             (bvalid_m),
+                          .buser_s              (buser_m[USER_WIDTH-1:0]),
+                          .arready_s            (arready_m),
+                          .rid_s                (rid_m[ARID_WIDTH-1:0]),
+                          .rdata_s              (rdata_m[31:0]),
+                          .rresp_s              (rresp_m[1:0]),
+                          .rlast_s              (rlast_m),
+                          .rvalid_s             (rvalid_m),
+                          .ruser_s              (ruser_m[USER_WIDTH-1:0]),
+                          .awvalid_m            (awvalid_lite_m),
+                          .awaddr_m             (awaddr_lite_m[ADDR_WIDTH-1:0]),
+                          .awprot_m             (awprot_lite_m[2:0]),
+                          .awuser_m             (awuser_lite_m[USER_WIDTH-1:0]),
+                          .wvalid_m             (wvalid_lite_m),
+                          .wdata_m              (wdata_lite_m[255:0]),
+                          .wstrb_m              (wstrb_lite_m[31:0]),
+                          .bready_m             (bready_lite_m),
+                          .arvalid_m            (),//Floating
+                          .araddr_m             (),//Floating
+                          .arprot_m             (),//Floating
+                          .aruser_m             (),//Floating
+                          .rready_m             (),//Floating
+                          // Inputs
+                          .aclk                 (aclk),
+                          .aresetn              (aresetn),
+                          .awid_s               (awid_m[AWID_WIDTH-1:0]),
+                          .awaddr_s             (awaddr_m[ADDR_WIDTH-1:0]),
+                          .awlen_s              ({4'b0,awlen_m[3:0]}),
+                          .awsize_s             (awsize_m[2:0]),
+                          .awburst_s            (awburst_m[1:0]),
+                          .awlock_s             (awlock_m[1:0]),
+                          .awcache_s            (awcache_m[3:0]),
+                          .awprot_s             (awprot_m[2:0]),
+                          .awvalid_s            (awvalid_m),
+                          .awuser_s             (awuser_m[USER_WIDTH-1:0]),
+                          .awregion_s           (awregion_m[3:0]),
+                          .wid_s                (wid_m[AWID_WIDTH-1:0]),
+                          .wdata_s              (wdata_m[255:0]),
+                          .wstrb_s              (wstrb_m[31:0]),
+                          .wlast_s              (wlast_m),
+                          .wvalid_s             (wvalid_m),
+                          .wuser_s              (wuser_m[USER_WIDTH-1:0]),
+                          .bready_s             (bready_m),
+                          .arid_s               (arid_m[ARID_WIDTH-1:0]),
+                          .araddr_s             (araddr_m[ADDR_WIDTH-1:0]),
+                          .arlen_s              ({4'b0,arlen_m[3:0]}),
+                          .arsize_s             (arsize_m[2:0]),
+                          .arburst_s            (arburst_m[1:0]),
+                          .arlock_s             (arlock_m[1:0]),
+                          .arcache_s            (arcache_m[3:0]),
+                          .arprot_s             (arprot_m[2:0]),
+                          .arvalid_s            (arvalid_m),
+                          .aruser_s             (aruser_m[USER_WIDTH-1:0]),
+                          .arregion_s           (arregion_m[3:0]),
+                          .rready_s             (rready_m),
+                          .awqos_s              (awqos_m[3:0]),
+                          .arqos_s              (arqos_m[3:0]),
+                          .awready_m            (awready_lite_m),
+                          .wready_m             (wready_lite_m),
+                          .bvalid_m             (bvalid_lite_m),
+                          .bresp_m              (bresp_lite_m[1:0]),
+                          .arready_m            (1'b0),//Tie
+                          .rvalid_m             (1'b0),//Tie
+                          .rdata_m              (32'b0),//Tie
+                          .rresp_m              (2'b0));//Tie
+
+axilite2sram u_axilite2sram(/*AUTOINST*/
+                            // Outputs
+                            .awready_s          (awready_lite_m),
+                            .wready_s           (wready_lite_m),
+                            .bvalid_s           (bvalid_lite_m),
+                            .bresp_s            (bresp_lite_m[1:0]),
+                            .sram_cvalid        (sram_cvalid),
+                            .sram_cwrite        (sram_cwrite),
+                            .sram_caddr         (sram_caddr[31:0]),
+                            .sram_cid           (sram_cid[7:0]),
+                            .sram_wdata         (sram_wdata[255:0]),
+                            .sram_wmask         (sram_wmask[31:0]),
+                            // Inputs
+                            .aclk               (aclk),
+                            .aresetn            (aresetn),
+                            .awvalid_s          (awvalid_lite_m),
+                            .awaddr_s           (awaddr_lite_m[ADDR_WIDTH-1:0]),
+                            .awprot_s           (awprot_lite_m[2:0]),
+                            .awuser_s           (awuser_lite_m[USER_WIDTH-1:0]),
+                            .wvalid_s           (wvalid_lite_m),
+                            .wdata_s            (wdata_lite_m[255:0]),
+                            .wstrb_s            (wstrb_lite_m[31:0]),
+                            .bready_s           (bready_lite_m),
+                            .sram_cready        (sram_cready));
+
+
+
+endmodule
diff --git a/axi2sramcrs/rtl/axilite2sram.v b/axi2sramcrs/rtl/axilite2sram.v
new file mode 100644
index 0000000..1c95d24
--- /dev/null
+++ b/axi2sramcrs/rtl/axilite2sram.v
@@ -0,0 +1,113 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module axilite2sram
+ #(
+  //id width
+  parameter       ARID_WIDTH=4,
+  parameter       AWID_WIDTH=4,
+  //addr width
+  parameter       ADDR_WIDTH=32,
+  //user width
+  parameter       USER_WIDTH=4 )
+
+(
+  input                            aclk,
+  input                            aresetn,
+  //===========================================
+  //==slave port write only
+  //===========================================
+  input                        awvalid_s,
+  output                       awready_s,
+  input  [ADDR_WIDTH-1:0]      awaddr_s,
+  input  [2:0]                 awprot_s,//N.A
+  input  [USER_WIDTH-1:0]      awuser_s,//N.A
+
+  input                        wvalid_s,
+  output                       wready_s,
+  input     [255:0]            wdata_s,
+  input     [31:0]             wstrb_s,
+
+  output    reg                bvalid_s,
+  input                        bready_s,
+  output      [1:0]            bresp_s,
+
+  output                        sram_cvalid,
+  input                         sram_cready,
+  output                        sram_cwrite,
+  output  [31:0]                sram_caddr,
+  output  [7:0]                 sram_cid,
+  output  [255:0]               sram_wdata,
+  output  [31:0]                sram_wmask
+);
+
+
+reg awvalid_latch;
+reg [31:0] awaddr_latch;
+
+assign wready_s  = awvalid_latch & sram_cready;
+//assign awready_s = awvalid_latch1'b1;
+assign awready_s = ~awvalid_latch;//no more ostd
+assign bresp_s = 2'b0;
+
+assign sram_wdata = wdata_s;
+assign sram_wmask = wstrb_s;
+assign sram_cid = 8'b0;
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      awvalid_latch <= 1'b0;
+    else if(awvalid_s&&awready_s)
+      awvalid_latch <= 1'b1;
+//    else if(bvalid_s&&bready_s)
+//      awvalid_latch <= 1'b0;
+    else if(wvalid_s&&wready_s)
+      awvalid_latch <= 1'b0;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      awaddr_latch <= 32'b0;
+    else if(awvalid_s&&awready_s)
+      awaddr_latch <= awaddr_s;
+  end
+
+always@(posedge aclk or negedge aresetn)
+  begin
+    if(~aresetn)
+      bvalid_s <= 1'b0;
+    else if(bvalid_s&bready_s)
+      bvalid_s <= 1'b0;
+    else if(wvalid_s&&wready_s)
+      bvalid_s <= 1'b1;
+  end
+
+
+assign sram_cvalid = awvalid_latch  && wvalid_s;
+//assign sram_cvalid = wvalid_s;
+assign sram_cwrite = awvalid_latch  && wvalid_s;
+//assign sram_cwrite = wvalid_s;
+assign sram_caddr  = awaddr_latch;
+
+
+endmodule
diff --git a/axi2sramcrs/rtl/share/Axi.v b/axi2sramcrs/rtl/share/Axi.v
new file mode 100644
index 0000000..45cf494
--- /dev/null
+++ b/axi2sramcrs/rtl/share/Axi.v
@@ -0,0 +1,55 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+`define AXI_ALEN_1            4'b0000
+`define AXI_ALEN_2            4'b0001
+`define AXI_ALEN_3            4'b0010
+`define AXI_ALEN_4            4'b0011
+`define AXI_ALEN_5            4'b0100
+`define AXI_ALEN_6            4'b0101
+`define AXI_ALEN_7            4'b0110
+`define AXI_ALEN_8            4'b0111
+`define AXI_ALEN_9            4'b1000
+`define AXI_ALEN_10           4'b1001
+`define AXI_ALEN_11           4'b1010
+`define AXI_ALEN_12           4'b1011
+`define AXI_ALEN_13           4'b1100
+`define AXI_ALEN_14           4'b1101
+`define AXI_ALEN_15           4'b1110
+`define AXI_ALEN_16           4'b1111
+`define AXI_ASIZE_8           3'b000
+`define AXI_ASIZE_16          3'b001
+`define AXI_ASIZE_32          3'b010
+`define AXI_ASIZE_64          3'b011
+`define AXI_ASIZE_128         3'b100
+`define AXI_ASIZE_256         3'b101
+`define AXI_ASIZE_512         3'b110
+`define AXI_ASIZE_1024        3'b111
+`define AXI_ABURST_FIXED      2'b00
+`define AXI_ABURST_INCR       2'b01
+`define AXI_ABURST_WRAP       2'b10
+`define AXI_ALOCK_NOLOCK      2'b00
+`define AXI_ALOCK_EXCL        2'b01
+`define AXI_ALOCK_LOCKED      2'b10
+`define AXI_RESP_OKAY         2'b00
+`define AXI_RESP_EXOKAY       2'b01
+`define AXI_RESP_SLVERR       2'b10
+`define AXI_RESP_DECERR       2'b11
diff --git a/axi2sramcrs/rtl/share/Axi_undefs.v b/axi2sramcrs/rtl/share/Axi_undefs.v
new file mode 100644
index 0000000..0854a76
--- /dev/null
+++ b/axi2sramcrs/rtl/share/Axi_undefs.v
@@ -0,0 +1,55 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+`undef AXI_ALEN_1
+`undef AXI_ALEN_2
+`undef AXI_ALEN_3
+`undef AXI_ALEN_4
+`undef AXI_ALEN_5
+`undef AXI_ALEN_6
+`undef AXI_ALEN_7
+`undef AXI_ALEN_8
+`undef AXI_ALEN_9
+`undef AXI_ALEN_10
+`undef AXI_ALEN_11
+`undef AXI_ALEN_12
+`undef AXI_ALEN_13
+`undef AXI_ALEN_14
+`undef AXI_ALEN_15
+`undef AXI_ALEN_16
+`undef AXI_ASIZE_8
+`undef AXI_ASIZE_16
+`undef AXI_ASIZE_32
+`undef AXI_ASIZE_64
+`undef AXI_ASIZE_128
+`undef AXI_ASIZE_256
+`undef AXI_ASIZE_512
+`undef AXI_ASIZE_1024
+`undef AXI_ABURST_FIXED
+`undef AXI_ABURST_INCR
+`undef AXI_ABURST_WRAP
+`undef AXI_ALOCK_NOLOCK
+`undef AXI_ALOCK_EXCL
+`undef AXI_ALOCK_LOCKED
+`undef AXI_RESP_OKAY
+`undef AXI_RESP_EXOKAY
+`undef AXI_RESP_SLVERR
+`undef AXI_RESP_DECERR
diff --git a/axi2sramcrs/rtl/share/axi_slice/axi_ful_regd_slice.v b/axi2sramcrs/rtl/share/axi_slice/axi_ful_regd_slice.v
new file mode 100644
index 0000000..08097bc
--- /dev/null
+++ b/axi2sramcrs/rtl/share/axi_slice/axi_ful_regd_slice.v
@@ -0,0 +1,144 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module axi_ful_regd_slice
+  (
+   aresetn,
+   aclk,
+   valid_src,
+   ready_dst,
+   payload_src,
+   valid_dst,
+   ready_src,
+   payload_dst
+   );
+  parameter PAYLD_WIDTH = 2;
+  parameter PAYLD_MAX = (PAYLD_WIDTH - 1);
+  parameter NUM_SEL_LINES  = (PAYLD_WIDTH + 7) / 8;
+  parameter REM_SEL_LINE   = (((PAYLD_WIDTH - 1) % 8) + 1);
+  input                 aresetn;
+  input                 aclk;
+  input                 valid_src;
+  input                 ready_dst;
+  input [PAYLD_MAX:0]   payload_src;
+  output                valid_dst;
+  output                ready_src;
+  output [PAYLD_MAX:0]  payload_dst;
+  wire                  aresetn;
+  wire                  aclk;
+  wire                  valid_src;
+  wire                  ready_dst;
+  wire [PAYLD_MAX:0]    payload_src;
+  wire                  valid_dst;
+  wire                  ready_src;
+  reg [PAYLD_MAX:0]     payload_dst;
+  wire                  enable_a;
+  wire                  enable_b;
+  wire                  load_sel_en;
+  wire                  nxt_valid_a;
+  wire                  nxt_valid_b;
+  reg [PAYLD_MAX:0]     payload_reg_a;
+  reg [PAYLD_MAX:0]     payload_reg_b;
+  reg                   valid_a;
+  reg                   valid_b;
+  wire                  iready_src;
+  wire                  ivalid_dst;
+  reg                   load_b;
+  reg [NUM_SEL_LINES:0] sel_b;
+  wire                  sel_b_en;
+  assign valid_dst = ivalid_dst;
+  assign ready_src = iready_src;
+  always @(sel_b or payload_reg_a or payload_reg_b)
+  begin : p_payload_mux
+    integer i;
+    integer j;
+    integer base;
+    base = 0;
+    for (i=1; i<NUM_SEL_LINES; i=i+1)
+    begin
+      for (j=base; j<(base+8); j=j+1)
+        payload_dst[j] = (sel_b[i] ? payload_reg_b[j] : payload_reg_a[j]);
+      base = (8 * i);
+    end
+    for (j=base; j<(base+REM_SEL_LINE); j=j+1)
+      payload_dst[j] = (sel_b[NUM_SEL_LINES] ? payload_reg_b[j] : payload_reg_a[j]);
+  end
+  assign enable_a = ~load_b & valid_src & iready_src;
+  assign enable_b = load_b & valid_src & iready_src;
+  assign load_sel_en = valid_src & iready_src;
+  assign nxt_valid_a = (enable_a ? 1'b1
+                      :((~sel_b[0] & ivalid_dst & ready_dst) ? 1'b0
+                        : valid_a));
+  assign nxt_valid_b = (enable_b ? 1'b1
+                      :((sel_b[0] & ivalid_dst & ready_dst) ? 1'b0
+                        : valid_b));
+  //end
+  always @(posedge aclk or negedge aresetn)
+  begin : p_payload_reg_a
+    if (~aresetn)
+      payload_reg_a <= {PAYLD_WIDTH{1'b0}};
+    else if (enable_a)
+      payload_reg_a <= payload_src;
+  end
+  //end
+  always @(posedge aclk or negedge aresetn)
+  begin : p_payload_reg_b
+    if (~aresetn)
+      payload_reg_b <= {PAYLD_WIDTH{1'b0}};
+    else if (enable_b)
+      payload_reg_b <= payload_src;
+  end
+  always @(posedge aclk or negedge aresetn)
+  begin : p_valid_a
+    if (~aresetn)
+      valid_a <= 1'b0;
+    else
+      valid_a <= nxt_valid_a;
+  end
+  always @(posedge aclk or negedge aresetn)
+  begin : p_valid_b
+    if (~aresetn)
+      valid_b <= 1'b0;
+    else
+      valid_b <= nxt_valid_b;
+  end
+  assign iready_src = ~valid_a | ~valid_b;
+  assign ivalid_dst = valid_a | valid_b;
+  always @(posedge aclk or negedge aresetn)
+  begin : p_load_b
+    if (~aresetn)
+      load_b <= 1'b0;
+    else
+      if (load_sel_en)
+        load_b <= ~load_b;
+  end
+  assign sel_b_en = ((~sel_b[0] & nxt_valid_b & (~valid_a | ready_dst)) |
+                     ( sel_b[0] & nxt_valid_a & (~valid_b | ready_dst)));
+
+  always @(posedge aclk or negedge aresetn)
+  begin : p_sel_b
+    if (~aresetn)
+      sel_b <= {NUM_SEL_LINES+1{1'b0}};
+    else
+      if (sel_b_en)
+        sel_b <= ~sel_b;
+  end
+endmodule
diff --git a/axi2sramcrs/rtl/share/axi_slice/axi_fwd_regd_slice.v b/axi2sramcrs/rtl/share/axi_slice/axi_fwd_regd_slice.v
new file mode 100644
index 0000000..a4ee8d8
--- /dev/null
+++ b/axi2sramcrs/rtl/share/axi_slice/axi_fwd_regd_slice.v
@@ -0,0 +1,75 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module axi_fwd_regd_slice
+  (
+   aresetn,
+   aclk,
+   valid_src,
+   ready_dst,
+   payload_src,
+   ready_src,
+   valid_dst,
+   payload_dst
+   );
+  parameter PAYLD_WIDTH = 2;
+  parameter PAYLD_MAX = (PAYLD_WIDTH - 1);
+  input                 aresetn;
+  input                 aclk;
+  input                 valid_src;
+  input                 ready_dst;
+  input [PAYLD_MAX:0]   payload_src;
+  output                valid_dst;
+  output                ready_src;
+  output [PAYLD_MAX:0]  payload_dst;
+  wire                  aresetn;
+  wire                  aclk;
+  wire                  valid_src;
+  wire                  ready_dst;
+  wire [PAYLD_MAX:0]    payload_src;
+  wire                  valid_dst;
+  wire                  ready_src;
+  reg [PAYLD_MAX:0]     payload_dst;
+  wire                  payload_en;
+  wire                  valid_dst_en;
+  reg                   ivalid_dst;
+  assign valid_dst = ivalid_dst;
+  assign ready_src = ready_dst | ~ivalid_dst;
+  //end
+  always @(posedge aclk or negedge aresetn)
+  begin : p_payload_dst
+    if (~aresetn)
+      payload_dst <= {PAYLD_WIDTH{1'b0}};
+    else if (payload_en)
+      payload_dst <= payload_src;
+  end
+  assign payload_en = ((valid_src & ~ivalid_dst) |
+                       (valid_src & ivalid_dst & ready_dst));
+  assign valid_dst_en = (valid_src | ready_dst);
+  always @(posedge aclk or negedge aresetn)
+  begin : p_ivalid_dst
+    if (~aresetn)
+      ivalid_dst <= 1'b0;
+    else if (valid_dst_en)
+      ivalid_dst <= valid_src;
+  end
+
+endmodule
diff --git a/axi2sramcrs/rtl/share/axi_slice/axi_rev_regd_slice.v b/axi2sramcrs/rtl/share/axi_slice/axi_rev_regd_slice.v
new file mode 100644
index 0000000..5d83b7e
--- /dev/null
+++ b/axi2sramcrs/rtl/share/axi_slice/axi_rev_regd_slice.v
@@ -0,0 +1,84 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module axi_rev_regd_slice
+  (
+    aresetn,
+    aclk,
+    valid_src,
+    ready_dst,
+    payload_src,
+    valid_dst,
+    ready_src,
+    payload_dst
+  );
+  parameter PAYLD_WIDTH = 1;
+  parameter PAYLD_MAX      = PAYLD_WIDTH - 1;
+  parameter NUM_SEL_LINES  = (PAYLD_WIDTH + 7) / 8;
+  parameter REM_SEL_LINE   = (((PAYLD_WIDTH - 1) % 8) + 1);
+  input                 aclk;
+  input                 aresetn;
+  input [PAYLD_MAX:0]   payload_src;
+  output [PAYLD_MAX:0]  payload_dst;
+  input                 valid_src;
+  output                ready_src;
+  output                valid_dst;
+  input                 ready_dst;
+  reg [PAYLD_MAX:0]     payload_dst;
+  reg [PAYLD_MAX:0]     payload_reg;
+  wire                  buffer_en;
+  wire                  buffer_full_en;
+  reg [NUM_SEL_LINES:0] buffer_full;
+  assign buffer_en = (valid_src & ~buffer_full[0] & ~ready_dst);
+  always @(negedge aresetn or posedge aclk)
+  begin : p_buffer_seq
+    if (~aresetn)
+      payload_reg <= {PAYLD_WIDTH{1'b0}};
+    else if (buffer_en)
+      payload_reg <= payload_src;
+  end
+  assign buffer_full_en = (buffer_en | ready_dst);
+  always @(negedge aresetn or posedge aclk)
+  begin : p_buffer_full_seq
+    if (~aresetn)
+      buffer_full <= {NUM_SEL_LINES+1{1'b0}};
+    else if (buffer_full_en)
+      buffer_full <= {NUM_SEL_LINES+1{buffer_en}};
+  end
+  assign ready_src = ~buffer_full[0];
+  assign valid_dst = (valid_src | buffer_full[0]);
+  always @(buffer_full or payload_reg or payload_src)
+  begin : p_payload_mux
+    integer i;
+    integer j;
+    integer base;
+    base = 0;
+    for (i=1; i<NUM_SEL_LINES; i=i+1)
+    begin
+      for (j=base; j<(base+8); j=j+1)
+        payload_dst[j] = (buffer_full[i] ? payload_reg[j] : payload_src[j]);
+      base = (8 * i);
+    end
+    for (j=base; j<(base+REM_SEL_LINE); j=j+1)
+      payload_dst[j] = (buffer_full[NUM_SEL_LINES] ? payload_reg[j]
+                         : payload_src[j]);
+  end
+endmodule
diff --git a/axi2sramcrs/rtl/share/axi_slice/axi_slice.v b/axi2sramcrs/rtl/share/axi_slice/axi_slice.v
new file mode 100644
index 0000000..6cc3875
--- /dev/null
+++ b/axi2sramcrs/rtl/share/axi_slice/axi_slice.v
@@ -0,0 +1,111 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+`include "defs_axi_slice.v"
+module axi_slice
+  (
+   aresetn,
+   aclk,
+   src_data,
+   src_valid,
+   src_ready,
+   dst_data,
+   dst_valid,
+   dst_ready
+   );
+  parameter HNDSHK_MODE = `RS_REV_REG;
+  parameter PAYLD_WIDTH = 12;
+  parameter PAYLD_MAX   = (PAYLD_WIDTH - 1);
+  parameter INT_HNDSHK_MODE = HNDSHK_MODE;
+
+  input                 aresetn;
+  input                 aclk;
+  input  [PAYLD_MAX:0]  src_data;
+  output [PAYLD_MAX:0]  dst_data;
+  input                 src_valid;
+  output                src_ready;
+  output                dst_valid;
+  input                 dst_ready;
+  wire [PAYLD_MAX:0]    payld_src;
+  wire [PAYLD_MAX:0]    payld_regd;
+  wire [PAYLD_MAX:0]    payld_fwd_regd;
+  wire [PAYLD_MAX:0]    payld_rev_regd;
+  wire                  valid_regd;
+  wire                  valid_fwd_regd;
+  wire                  valid_rev_regd;
+  wire                  ready_regd;
+  wire                  ready_fwd_regd;
+  wire                  ready_rev_regd;
+  assign src_ready = ((INT_HNDSHK_MODE == `RS_REGD)         ? ready_regd
+                       :((INT_HNDSHK_MODE == `RS_FWD_REG)   ? ready_fwd_regd
+                         :((INT_HNDSHK_MODE == `RS_REV_REG) ? ready_rev_regd
+                           : dst_ready)));
+  assign dst_data = ((INT_HNDSHK_MODE == `RS_REGD)         ? payld_regd
+                      :((INT_HNDSHK_MODE == `RS_FWD_REG)   ? payld_fwd_regd
+                        :((INT_HNDSHK_MODE == `RS_REV_REG) ? payld_rev_regd
+                          : src_data)));
+  assign dst_valid = ((INT_HNDSHK_MODE == `RS_REGD)         ? valid_regd
+                       :((INT_HNDSHK_MODE == `RS_FWD_REG)   ? valid_fwd_regd
+                         :((INT_HNDSHK_MODE == `RS_REV_REG) ? valid_rev_regd
+                           : src_valid)));
+  assign payld_src = src_data;
+  axi_ful_regd_slice #(
+          .PAYLD_WIDTH (PAYLD_WIDTH)
+          ) u_ful_regd_slice
+    (
+     .aresetn        (aresetn),
+     .aclk           (aclk),
+     .valid_src       (src_valid),
+     .ready_dst       (dst_ready),
+     .payload_src     (payld_src),
+     .ready_src       (ready_regd),
+     .valid_dst       (valid_regd),
+     .payload_dst     (payld_regd)
+     );
+  axi_fwd_regd_slice #(
+          .PAYLD_WIDTH(PAYLD_WIDTH)
+          ) u_fwd_regd_slice
+    (
+     .aresetn        (aresetn),
+     .aclk           (aclk),
+     .valid_src       (src_valid),
+     .ready_dst       (dst_ready),
+     .payload_src     (payld_src),
+     .ready_src       (ready_fwd_regd),
+     .valid_dst       (valid_fwd_regd),
+     .payload_dst     (payld_fwd_regd)
+     );
+  axi_rev_regd_slice #(
+          .PAYLD_WIDTH(PAYLD_WIDTH)
+          ) u_rev_regd_slice
+    (
+     .aresetn        (aresetn),
+     .aclk           (aclk),
+     .valid_src       (src_valid),
+     .ready_dst       (dst_ready),
+     .payload_src     (payld_src),
+     .ready_src       (ready_rev_regd),
+     .valid_dst       (valid_rev_regd),
+     .payload_dst     (payld_rev_regd)
+     );
+
+endmodule
+`include "undefs_axi_slice.v"
diff --git a/axi2sramcrs/rtl/share/axi_slice/defs_axi_slice.v b/axi2sramcrs/rtl/share/axi_slice/defs_axi_slice.v
new file mode 100644
index 0000000..8772649
--- /dev/null
+++ b/axi2sramcrs/rtl/share/axi_slice/defs_axi_slice.v
@@ -0,0 +1,25 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+`define RS_REGD            0
+`define RS_FWD_REG         1
+`define RS_REV_REG         2
+`define RS_STATIC_BYPASS   3
diff --git a/axi2sramcrs/rtl/share/axi_slice/undefs_axi_slice.v b/axi2sramcrs/rtl/share/axi_slice/undefs_axi_slice.v
new file mode 100644
index 0000000..e597cde
--- /dev/null
+++ b/axi2sramcrs/rtl/share/axi_slice/undefs_axi_slice.v
@@ -0,0 +1,25 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+`undef RS_REGD
+`undef RS_FWD_REG
+`undef RS_REV_REG
+`undef RS_STATIC_BYPASS
diff --git a/axi2sramcrs/rtl/upsizer/axi_upsizer.v b/axi2sramcrs/rtl/upsizer/axi_upsizer.v
new file mode 100644
index 0000000..8bbaac0
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/axi_upsizer.v
@@ -0,0 +1,339 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module axi_upsizer(
+   awid_m, awaddr_m, awlen_m, awsize_m, awburst_m, awlock_m,
+   awcache_m, awprot_m, awvalid_m, awuser_m, awregion_m, wdata_m,
+   wstrb_m, wlast_m, wvalid_m, wid_m, wuser_m, bready_m, arid_m,
+   araddr_m, arlen_m, arsize_m, arburst_m, arlock_m, arcache_m,
+   arprot_m, arvalid_m, aruser_m, arregion_m, rready_m, awqos_m,
+   arqos_m, awready_s, wready_s, bid_s, bresp_s, bvalid_s, buser_s,
+   arready_s, rid_s, rdata_s, rresp_s, rlast_s, rvalid_s, ruser_s,
+   aclk, aresetn, awready_m, wready_m, bid_m, bresp_m, bvalid_m,
+   buser_m, arready_m, rid_m, rdata_m, rresp_m, rlast_m, rvalid_m,
+   ruser_m, awid_s, awaddr_s, awlen_s, awsize_s, awburst_s, awlock_s,
+   awcache_s, awprot_s, awvalid_s, awuser_s, awregion_s, wdata_s,
+   wstrb_s, wlast_s, wvalid_s, wid_s, wuser_s, bready_s, arid_s,
+   araddr_s, arlen_s, arsize_s, arburst_s, arlock_s, arcache_s,
+   arprot_s, arvalid_s, aruser_s, arregion_s, rready_s, awqos_s,
+   arqos_s
+   );
+parameter       ARID_WIDTH=16;
+parameter       AWID_WIDTH=16;
+parameter       ADDR_WIDTH=61;
+parameter       US_DATA_WIDTH=64;
+parameter       DS_DATA_WIDTH=256;
+parameter       USER_WIDTH=16;
+parameter       IS_AXI3=1'h1;
+parameter       RD_ISS=128;
+parameter       WR_ISS=128;
+parameter      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+parameter      US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam      AXLEN_WIDTH=(IS_AXI3==1'h1) ? 4 : 8;
+localparam      DS_AXI3=IS_AXI3;
+localparam      DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam      US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam	ARFMT_WIDTH=1+1+ARID_WIDTH+DS_ADDR_AL_WIDTH*3+1+3;
+localparam	AWFMT_WIDTH=AWID_WIDTH+1+4+1+DS_ADDR_AL_WIDTH*2+3+1;
+localparam      US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam      US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam      US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam      AW_IDB_WIDTH=US_AW_WIDTH;
+localparam      AR_IDB_WIDTH=US_AR_WIDTH;
+localparam      W_IDB_WIDTH=AWID_WIDTH+USER_WIDTH+DS_DATA_WIDTH+DS_WSTRB_WIDTH+1;
+localparam	R_IDB_WIDTH=USER_WIDTH+ARID_WIDTH+DS_DATA_WIDTH+2+1;
+localparam      B_IDB_WIDTH=USER_WIDTH+2+AWID_WIDTH;
+input   aclk;
+input   aresetn;
+  output  [AWID_WIDTH-1:0]       awid_m;
+  output  [ADDR_WIDTH-1:0]      awaddr_m;
+  output  [AXLEN_WIDTH-1:0]       awlen_m;
+  output  [2:0]       awsize_m;
+  output  [1:0]       awburst_m;
+  output  [1:0]       awlock_m;
+  output  [3:0]       awcache_m;
+  output  [2:0]       awprot_m;
+  output              awvalid_m;
+  input               awready_m;
+  output  [USER_WIDTH-1:0]      awuser_m;
+  output  [3:0]                 awregion_m;
+  output  [DS_DATA_WIDTH-1:0]     wdata_m;
+  output  [DS_WSTRB_WIDTH-1:0]      wstrb_m;
+  output              wlast_m;
+  output              wvalid_m;
+  input               wready_m;
+  output  [AWID_WIDTH-1:0]      wid_m;
+  output  [USER_WIDTH-1:0]      wuser_m;
+  input   [AWID_WIDTH-1:0]       bid_m;
+  input   [1:0]       bresp_m;
+  input               bvalid_m;
+  output              bready_m;
+  input   [USER_WIDTH-1:0]      buser_m;
+  output  [ARID_WIDTH-1:0]       arid_m;
+  output  [ADDR_WIDTH-1:0]      araddr_m;
+  output  [AXLEN_WIDTH-1:0]       arlen_m;
+  output  [2:0]       arsize_m;
+  output  [1:0]       arburst_m;
+  output  [1:0]       arlock_m;
+  output  [3:0]       arcache_m;
+  output  [2:0]       arprot_m;
+  output              arvalid_m;
+  input               arready_m;
+  output  [USER_WIDTH-1:0]      aruser_m;
+  output  [3:0]                 arregion_m;
+  input   [ARID_WIDTH-1:0]       rid_m;
+  input   [DS_DATA_WIDTH-1:0]     rdata_m;
+  input   [1:0]       rresp_m;
+  input               rlast_m;
+  input               rvalid_m;
+  output              rready_m;
+  input   [USER_WIDTH-1:0]      ruser_m;
+  output  [3:0]       awqos_m;
+  output  [3:0]       arqos_m;
+  input   [AWID_WIDTH-1:0]       awid_s;
+  input   [ADDR_WIDTH-1:0]      awaddr_s;
+  input   [AXLEN_WIDTH-1:0]       awlen_s;
+  input   [2:0]       awsize_s;
+  input   [1:0]       awburst_s;
+  input   [1:0]       awlock_s;
+  input   [3:0]       awcache_s;
+  input   [2:0]       awprot_s;
+  input               awvalid_s;
+  output              awready_s;
+  input  [USER_WIDTH-1:0]       awuser_s;
+  input  [3:0]                  awregion_s;
+  input   [US_DATA_WIDTH-1:0]     wdata_s;
+  input   [US_WSTRB_WIDTH-1:0]      wstrb_s;
+  input               wlast_s;
+  input               wvalid_s;
+  output              wready_s;
+  input  [AWID_WIDTH-1:0]       wid_s;
+  input  [USER_WIDTH-1:0]       wuser_s;
+  output  [AWID_WIDTH-1:0]       bid_s;
+  output  [1:0]       bresp_s;
+  output              bvalid_s;
+  input               bready_s;
+  output  [USER_WIDTH-1:0]      buser_s;
+  input   [ARID_WIDTH-1:0]       arid_s;
+  input   [ADDR_WIDTH-1:0]      araddr_s;
+  input   [AXLEN_WIDTH-1:0]       arlen_s;
+  input   [2:0]       arsize_s;
+  input   [1:0]       arburst_s;
+  input   [1:0]       arlock_s;
+  input   [3:0]       arcache_s;
+  input   [2:0]       arprot_s;
+  input               arvalid_s;
+  output              arready_s;
+  input  [USER_WIDTH-1:0]       aruser_s;
+  input  [3:0]                  arregion_s;
+  output  [ARID_WIDTH-1:0]       rid_s;
+  output  [US_DATA_WIDTH-1:0]     rdata_s;
+  output  [1:0]       rresp_s;
+  output              rlast_s;
+  output              rvalid_s;
+  input               rready_s;
+  output  [USER_WIDTH-1:0]      ruser_s;
+  input   [3:0]       awqos_s;
+  input   [3:0]       arqos_s;
+wire [AR_IDB_WIDTH-1:0]	ar_data;
+wire			ar_ready;
+wire			ar_valid;
+wire [AW_IDB_WIDTH-1:0]	aw_data;
+wire			aw_ready;
+wire			aw_valid;
+wire [B_IDB_WIDTH-1:0]	b_data;
+wire			b_ready;
+wire			b_valid;
+wire [R_IDB_WIDTH-1:0]	r_data;
+wire			r_ready;
+wire			r_valid;
+wire [W_IDB_WIDTH-1:0]	w_data;
+wire			w_ready;
+wire			w_valid;
+wire    [7:0]   arlen_s_ext;
+wire    [7:0]   awlen_s_ext;
+wire    [7:0]   arlen_m_ext;
+wire    [7:0]   awlen_m_ext;
+generate
+ if(AXLEN_WIDTH==8) begin
+        assign  arlen_s_ext=arlen_s;
+        assign  awlen_s_ext=awlen_s;
+        assign  arlen_m=arlen_m_ext;
+        assign  awlen_m=awlen_m_ext;
+ end
+ else begin
+        assign  arlen_s_ext={4'h0,arlen_s};
+        assign  awlen_s_ext={4'h0,awlen_s};
+        assign  arlen_m=arlen_m_ext[3:0];
+        assign  awlen_m=awlen_m_ext[3:0];
+ end
+endgenerate
+upsize_slave_domain #(
+		      .ARID_WIDTH	(ARID_WIDTH),
+		      .AWID_WIDTH	(AWID_WIDTH),
+		      .ADDR_WIDTH	(ADDR_WIDTH),
+		      .US_DATA_WIDTH	(US_DATA_WIDTH),
+		      .DS_DATA_WIDTH	(DS_DATA_WIDTH),
+		      .USER_WIDTH	(USER_WIDTH),
+		      .RD_ISS		(RD_ISS),
+		      .WR_ISS		(WR_ISS),
+		      .DS_AXI3		(DS_AXI3))
+                                        u_slave_domain(
+                                                       .arqv_s     (arqos_s),
+                                                       .awqv_s     (awqos_s),
+                                                       .awlen_s    (awlen_s_ext),
+                                                       .arlen_s    (arlen_s_ext),
+                                                       .awvalid_vect_s(1'h0),
+                                                       .arvalid_vect_s(1'h0),
+						       .awready_s	(awready_s),
+						       .wready_s	(wready_s),
+						       .bid_s		(bid_s[AWID_WIDTH-1:0]),
+						       .bresp_s		(bresp_s[1:0]),
+						       .bvalid_s	(bvalid_s),
+						       .buser_s		(buser_s[USER_WIDTH-1:0]),
+						       .arready_s	(arready_s),
+						       .rid_s		(rid_s[ARID_WIDTH-1:0]),
+						       .rdata_s		(rdata_s[US_DATA_WIDTH-1:0]),
+						       .rresp_s		(rresp_s[1:0]),
+						       .rlast_s		(rlast_s),
+						       .rvalid_s	(rvalid_s),
+						       .ruser_s		(ruser_s[USER_WIDTH-1:0]),
+						       .aw_data		(aw_data[AW_IDB_WIDTH-1:0]),
+						       .aw_valid	(aw_valid),
+						       .b_ready		(b_ready),
+						       .ar_data		(ar_data[AR_IDB_WIDTH-1:0]),
+						       .ar_valid	(ar_valid),
+						       .r_ready		(r_ready),
+						       .w_data		(w_data[W_IDB_WIDTH-1:0]),
+						       .w_valid		(w_valid),
+						       .awid_s		(awid_s[AWID_WIDTH-1:0]),
+						       .awaddr_s	(awaddr_s[ADDR_WIDTH-1:0]),
+						       .awsize_s	(awsize_s[2:0]),
+						       .awburst_s	(awburst_s[1:0]),
+						       .awlock_s	(awlock_s[1:0]),
+						       .awcache_s	(awcache_s[3:0]),
+						       .awprot_s	(awprot_s[2:0]),
+						       .awvalid_s	(awvalid_s),
+						       .awuser_s	(awuser_s[USER_WIDTH-1:0]),
+						       .awregion_s	(awregion_s[3:0]),
+						       .wdata_s		(wdata_s[US_DATA_WIDTH-1:0]),
+						       .wstrb_s		(wstrb_s[US_WSTRB_WIDTH-1:0]),
+						       .wlast_s		(wlast_s),
+						       .wvalid_s	(wvalid_s),
+						       .wid_s		(wid_s[AWID_WIDTH-1:0]),
+						       .wuser_s		(wuser_s[USER_WIDTH-1:0]),
+						       .bready_s	(bready_s),
+						       .arid_s		(arid_s[ARID_WIDTH-1:0]),
+						       .araddr_s	(araddr_s[ADDR_WIDTH-1:0]),
+						       .arsize_s	(arsize_s[2:0]),
+						       .arburst_s	(arburst_s[1:0]),
+						       .arlock_s	(arlock_s[1:0]),
+						       .arcache_s	(arcache_s[3:0]),
+						       .arprot_s	(arprot_s[2:0]),
+						       .arvalid_s	(arvalid_s),
+						       .aruser_s	(aruser_s[USER_WIDTH-1:0]),
+						       .arregion_s	(arregion_s[3:0]),
+						       .rready_s	(rready_s),
+						       .aw_ready	(aw_ready),
+						       .b_data		(b_data[B_IDB_WIDTH-1:0]),
+						       .b_valid		(b_valid),
+						       .ar_ready	(ar_ready),
+						       .r_data		(r_data[R_IDB_WIDTH-1:0]),
+						       .r_valid		(r_valid),
+						       .w_ready		(w_ready),
+						       .aclk		(aclk),
+						       .aresetn		(aresetn));
+upsize_master_domain #(
+		       .ARID_WIDTH	(ARID_WIDTH),
+		       .AWID_WIDTH	(AWID_WIDTH),
+		       .ADDR_WIDTH	(ADDR_WIDTH),
+		       .US_DATA_WIDTH	(US_DATA_WIDTH),
+		       .DS_DATA_WIDTH	(DS_DATA_WIDTH),
+		       .USER_WIDTH	(USER_WIDTH),
+		       .RD_ISS		(RD_ISS),
+		       .WR_ISS		(WR_ISS)) u_master_domain(
+                                                  .awqv_m      (awqos_m),
+                                                  .arqv_m      (arqos_m),
+                                                  .arlen_m     (arlen_m_ext),
+                                                  .awlen_m     (awlen_m_ext),
+                                                  .awvalid_vect_m  (),
+                                                  .arvalid_vect_m  (),
+								  .awid_m		(awid_m[AWID_WIDTH-1:0]),
+								  .awaddr_m		(awaddr_m[ADDR_WIDTH-1:0]),
+								  .awsize_m		(awsize_m[2:0]),
+								  .awburst_m		(awburst_m[1:0]),
+								  .awlock_m		(awlock_m[1:0]),
+								  .awcache_m		(awcache_m[3:0]),
+								  .awprot_m		(awprot_m[2:0]),
+								  .awvalid_m		(awvalid_m),
+								  .awuser_m		(awuser_m[USER_WIDTH-1:0]),
+								  .awregion_m		(awregion_m[3:0]),
+								  .wdata_m		(wdata_m[DS_DATA_WIDTH-1:0]),
+								  .wstrb_m		(wstrb_m[DS_WSTRB_WIDTH-1:0]),
+								  .wlast_m		(wlast_m),
+								  .wvalid_m		(wvalid_m),
+								  .wid_m		(wid_m[AWID_WIDTH-1:0]),
+								  .wuser_m		(wuser_m[USER_WIDTH-1:0]),
+								  .bready_m		(bready_m),
+								  .arid_m		(arid_m[ARID_WIDTH-1:0]),
+								  .araddr_m		(araddr_m[ADDR_WIDTH-1:0]),
+								  .arsize_m		(arsize_m[2:0]),
+								  .arburst_m		(arburst_m[1:0]),
+								  .arlock_m		(arlock_m[1:0]),
+								  .arcache_m		(arcache_m[3:0]),
+								  .arprot_m		(arprot_m[2:0]),
+								  .arvalid_m		(arvalid_m),
+								  .aruser_m		(aruser_m[USER_WIDTH-1:0]),
+								  .arregion_m		(arregion_m[3:0]),
+								  .rready_m		(rready_m),
+								  .aw_ready		(aw_ready),
+								  .b_data		(b_data[B_IDB_WIDTH-1:0]),
+								  .b_valid		(b_valid),
+								  .ar_ready		(ar_ready),
+								  .r_data		(r_data[R_IDB_WIDTH-1:0]),
+								  .r_valid		(r_valid),
+								  .w_ready		(w_ready),
+								  .awready_m		(awready_m),
+								  .wready_m		(wready_m),
+								  .bid_m		(bid_m[AWID_WIDTH-1:0]),
+								  .bresp_m		(bresp_m[1:0]),
+								  .bvalid_m		(bvalid_m),
+								  .buser_m		(buser_m[USER_WIDTH-1:0]),
+								  .arready_m		(arready_m),
+								  .rid_m		(rid_m[ARID_WIDTH-1:0]),
+								  .rdata_m		(rdata_m[DS_DATA_WIDTH-1:0]),
+								  .rresp_m		(rresp_m[1:0]),
+								  .rlast_m		(rlast_m),
+								  .rvalid_m		(rvalid_m),
+								  .ruser_m		(ruser_m[USER_WIDTH-1:0]),
+								  .aw_data		(aw_data[AW_IDB_WIDTH-1:0]),
+								  .aw_valid		(aw_valid),
+								  .b_ready		(b_ready),
+								  .ar_data		(ar_data[AR_IDB_WIDTH-1:0]),
+								  .ar_valid		(ar_valid),
+								  .r_ready		(r_ready),
+								  .w_data		(w_data[W_IDB_WIDTH-1:0]),
+								  .w_valid		(w_valid),
+								  .aclk			(aclk),
+								  .aresetn		(aresetn));
+endmodule
diff --git a/axi2sramcrs/rtl/upsizer/maskcntl.v b/axi2sramcrs/rtl/upsizer/maskcntl.v
new file mode 100644
index 0000000..ab3fbf2
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/maskcntl.v
@@ -0,0 +1,303 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+//=========================================================================
+//==maskcntl: mask the incoming transctions to garantee the outgoing outstanding transactions
+//====meet the outstanding configs
+//=========================================================================
+module maskcntl
+  (
+    // Master Interface address channel handshake signals
+    awvalid_m,
+    awready_m,
+    arvalid_m,
+    arready_m,
+    // Lock control signals
+    pre_awvalid,
+    pre_arvalid,
+    awlock,
+    arlock,
+    lock_seq,
+    // QoS input signals
+    aw_qos_s,
+    ar_qos_s,
+    // Master Interface return channel handshake signals
+    bvalid_m,
+    bready_m,
+    rvalid_m,
+    rready_m,
+    // Mask signals
+    wr_cnt_empty,
+    mask_w,
+    mask_r,
+    // QoS output signals
+    aw_qos_m,
+    ar_qos_m,
+    // Miscellaneous connections
+    aclk,
+    aresetn
+  );
+
+  // ---------------------------------------------------------------------------
+  //  parameters
+  // ---------------------------------------------------------------------------
+//read outstanding issues
+parameter	RD_ISS=8;
+//write outstanding issues
+parameter	WR_ISS=8;
+
+localparam	RCNT_WIDTH=$clog2(RD_ISS+1);
+localparam	WCNT_WIDTH=$clog2(WR_ISS+1);
+localparam	COMBCNT_WIDTH=(RCNT_WIDTH>WCNT_WIDTH) ? (RCNT_WIDTH+1) : (WCNT_WIDTH+1);
+  // ---------------------------------------------------------------------------
+  //  Port definitions
+  // ---------------------------------------------------------------------------
+
+  // Master Interface address channel handshake signals
+  input             awvalid_m;
+  input             awready_m;
+  input             arvalid_m;
+  input             arready_m;
+  // Lock control signals
+  input             pre_awvalid;
+  input             pre_arvalid;
+  input             awlock;
+  input             arlock;
+  // QoS input signals
+  input [3:0]       aw_qos_s;
+  input [3:0]       ar_qos_s;
+  // Master Interface return channel handshake signals
+  input             bvalid_m;
+  input             bready_m;
+  input             rvalid_m;
+  input             rready_m;
+  // Mask signals
+  output            wr_cnt_empty;
+  output            mask_w;
+  output            mask_r;
+  // QoS output signals
+  output [3:0]      aw_qos_m;
+  output [3:0]      ar_qos_m;
+  // Lock sequence signal
+  output            lock_seq;
+  // Miscelaneous connections
+  input             aclk;
+  input             aresetn;
+
+  //------------------------------------------------------------------------------
+  // Wires
+  //------------------------------------------------------------------------------
+
+  wire              push_rd;         // Read address accepted;
+  wire              push_wr;         // Write address accepted
+  wire              pop_rd;          // Last read beat accepted
+  wire              pop_wr;          // Write transaction accepted
+  wire              next_wr_cnt_empty;     // Next Write counter empty
+  wire              wr_cnt_en;
+  wire              rd_cnt_en;
+  wire              comb_cnt_en;
+  wire              wr_mask_en;
+  wire              rd_mask_en;
+  wire  [RCNT_WIDTH-1:0]            next_rd_cnt;     // next outstanding reads count
+  wire  [WCNT_WIDTH-1:0]            next_wr_cnt;     // next outstanding writes count
+  reg   [COMBCNT_WIDTH-1:0]       next_comb_cnt;      // next outstanding trans count
+  reg  [WCNT_WIDTH-1:0]             wr_iss_d;
+  reg  [RCNT_WIDTH-1:0]             rd_iss_d;
+  reg               next_mask_w;
+  reg               next_mask_r;
+
+  wire              nxt_lock_seq;
+  wire              lock_seq_en;
+
+  wire [3:0]        aw_qos_s;
+  wire [3:0]        ar_qos_s;
+
+
+  //------------------------------------------------------------------------------
+  // Registers
+  //------------------------------------------------------------------------------
+
+  reg   [RCNT_WIDTH-1:0]            rd_cnt;          // outstanding reads count
+  reg   [WCNT_WIDTH-1:0]            wr_cnt;          // outstanding writes count
+  reg   [COMBCNT_WIDTH-1:0]       comb_cnt;        // outstanding trans count
+  reg               lock_seq;
+  reg               wr_cnt_empty;     // Write counter empty
+  reg               reg_mask_w;
+  reg               reg_mask_r;
+
+  // ---------------------------------------------------------------------------
+  //  start of code
+  // ---------------------------------------------------------------------------
+
+  //---------------------------- Drive QoS outputs ----------------------------
+
+
+  // Pass through input Qos Value
+  assign aw_qos_m = aw_qos_s;
+  assign ar_qos_m = ar_qos_s;
+
+
+ //-------------------- Outstanding transaction counters ---------------------
+
+  assign push_rd = arvalid_m & arready_m;
+  assign push_wr = awvalid_m & awready_m;
+
+  assign pop_rd = rvalid_m & rready_m;
+  assign pop_wr = bvalid_m & bready_m;
+
+  // Determine next outstanding read counter
+  assign next_rd_cnt = (push_rd & ~pop_rd) ? rd_cnt + 1'b1
+                         : ((~push_rd & pop_rd) ? rd_cnt - 1'b1
+                           : rd_cnt);
+
+  // Determine next outstanding write counter
+  assign next_wr_cnt = (push_wr & ~pop_wr) ? wr_cnt + 1'b1
+                         : ((~push_wr & pop_wr) ? wr_cnt - 1'b1
+                           : wr_cnt);
+
+  // Determine next combined outstanding counter
+   always @(*)
+     begin : p_next_comb
+      case({push_wr, push_rd, pop_wr, pop_rd})
+        4'b0001,
+        4'b0010,
+        4'b0111,
+        4'b1011  : next_comb_cnt = (comb_cnt - 2'h1);
+        4'b0011  : next_comb_cnt = (comb_cnt - 2'h2);
+        4'b0100,
+        4'b1000,
+        4'b1101,
+        4'b1110  : next_comb_cnt = (comb_cnt + 2'h1);
+        4'b1100  : next_comb_cnt = (comb_cnt + 2'h2);
+        default  : next_comb_cnt = comb_cnt;
+      endcase
+     end // p_next_comb
+
+
+
+
+  assign wr_cnt_en = push_wr ^ pop_wr;
+  assign rd_cnt_en = push_rd ^ pop_rd;
+  assign comb_cnt_en = push_wr | push_rd | pop_wr | pop_rd;
+
+  assign next_wr_cnt_empty = (next_wr_cnt == 1'b0);
+
+   always @(posedge aclk or negedge aresetn)
+     begin : p_wr_cnt_seq
+       if (!aresetn)
+         begin
+           wr_cnt <= {WCNT_WIDTH{1'b0}};
+           wr_cnt_empty <= 1'b1;
+           rd_cnt <= {RCNT_WIDTH{1'b0}};
+           comb_cnt <= {3{1'b0}};
+         end
+       else
+         begin
+           if (wr_cnt_en)
+           begin
+                wr_cnt <= next_wr_cnt;
+                wr_cnt_empty <= next_wr_cnt_empty;
+           end
+           if (rd_cnt_en)
+           begin
+                rd_cnt <= next_rd_cnt;
+           end
+           if (comb_cnt_en)
+           begin
+                comb_cnt <= next_comb_cnt;
+           end
+         end
+     end // p_wr_cnt_seq
+
+  //--------------------------- Mask Generation -------------------------------
+
+  always @(next_wr_cnt or next_rd_cnt)
+   begin : p_mask_comb
+     wr_iss_d = WR_ISS;
+     rd_iss_d = RD_ISS;
+
+     next_mask_w = 1'b0;
+     next_mask_r = 1'b0;
+
+     // If the next write count will be reached then
+     // mask all the write slave interfaces
+     if (next_wr_cnt == wr_iss_d )
+        next_mask_w = 1'b1;
+     // If the next read count will be reached then
+     // mask all the read slave interfaces
+     if (next_rd_cnt ==  rd_iss_d )
+        next_mask_r = 1'b1;
+  end // p_mask_comb
+
+
+
+  assign wr_mask_en =push_wr | pop_wr;
+  assign rd_mask_en = push_rd | pop_rd;
+
+   always @(posedge aclk or negedge aresetn)
+     begin : p_wr_mask_seq
+       if (!aresetn)
+         begin
+           reg_mask_w <= 1'b0;
+         end
+       else if (wr_mask_en)
+         begin
+           reg_mask_w <= next_mask_w;
+         end
+     end // p_wr_mask_seq
+
+  assign mask_w = reg_mask_w;
+
+   always @(posedge aclk or negedge aresetn)
+     begin : p_rd_mask_seq
+       if (!aresetn)
+         begin
+           reg_mask_r <= 1'b0;
+         end
+       else if (rd_mask_en)
+         begin
+           reg_mask_r <= next_mask_r;
+         end
+     end // p_rd_mask_seq
+
+  assign mask_r = reg_mask_r;
+  //--------------------------- Lock Seq Register -------------------------------
+
+  assign nxt_lock_seq = ((pre_awvalid & awlock) | (pre_arvalid & arlock))
+                        ? 1'b1
+                        : (((pre_awvalid & ~awlock) | (pre_arvalid & ~arlock)) & ~|comb_cnt
+                          ? 1'b0
+                          : lock_seq);
+
+  assign lock_seq_en = pre_awvalid || pre_arvalid;
+
+  always @(posedge aclk or negedge aresetn)
+     begin : p_lock_seq
+       if (!aresetn)
+         begin
+           lock_seq <= 1'b0;
+         end
+       else if (lock_seq_en)
+         begin
+           lock_seq <= nxt_lock_seq;
+         end
+     end // p_lock_seq
+
+  endmodule
diff --git a/axi2sramcrs/rtl/upsizer/upsize_master_domain.v b/axi2sramcrs/rtl/upsizer/upsize_master_domain.v
new file mode 100644
index 0000000..a3565fe
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_master_domain.v
@@ -0,0 +1,233 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+`include "Axi.v"
+module upsize_master_domain
+  (
+   awid_m, awaddr_m, awlen_m, awsize_m, awburst_m, awlock_m,
+   awcache_m, awprot_m, awvalid_m, awvalid_vect_m, awuser_m,
+   awregion_m, wdata_m, wstrb_m, wlast_m, wvalid_m, wid_m, wuser_m,
+   bready_m, arid_m, araddr_m, arlen_m, arsize_m, arburst_m, arlock_m,
+   arcache_m, arprot_m, arvalid_m, arvalid_vect_m, aruser_m,
+   arregion_m, rready_m, awqv_m, arqv_m, aw_ready, b_data, b_valid,
+   ar_ready, r_data, r_valid, w_ready,
+   awready_m, wready_m, bid_m, bresp_m, bvalid_m, buser_m, arready_m,
+   rid_m, rdata_m, rresp_m, rlast_m, rvalid_m, ruser_m, aw_data,
+   aw_valid, b_ready, ar_data, ar_valid, r_ready, w_data, w_valid,
+   aclk, aresetn
+   );
+parameter       ARID_WIDTH=4;
+parameter       AWID_WIDTH=4;
+parameter       ADDR_WIDTH=32;
+parameter       US_DATA_WIDTH=128;
+parameter       DS_DATA_WIDTH=256;
+parameter       USER_WIDTH=4;
+parameter       RD_ISS=8;
+parameter       WR_ISS=8;
+localparam      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam      US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam      DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam      US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam	ARFMT_WIDTH=1+1+ARID_WIDTH+DS_ADDR_AL_WIDTH*3+1+3;
+localparam	AWFMT_WIDTH=AWID_WIDTH+1+4+1+DS_ADDR_AL_WIDTH*2+3+1;
+localparam      US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam      US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam      US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam      AW_IDB_WIDTH=US_AW_WIDTH;
+localparam      AR_IDB_WIDTH=US_AR_WIDTH;
+localparam      W_IDB_WIDTH=AWID_WIDTH+USER_WIDTH+DS_DATA_WIDTH+DS_WSTRB_WIDTH+1;
+localparam      R_IDB_WIDTH=USER_WIDTH+ARID_WIDTH+DS_DATA_WIDTH+2+1;
+localparam      B_IDB_WIDTH=USER_WIDTH+2+AWID_WIDTH;
+  output  [AWID_WIDTH-1:0]       awid_m;
+  output  [ADDR_WIDTH-1:0]      awaddr_m;
+  output  [7:0]       awlen_m;
+  output  [2:0]       awsize_m;
+  output  [1:0]       awburst_m;
+  output  [1:0]            awlock_m;
+  output  [3:0]       awcache_m;
+  output  [2:0]       awprot_m;
+  output              awvalid_m;
+  output              awvalid_vect_m;
+  input               awready_m;
+  output  [USER_WIDTH-1:0]      awuser_m;
+  output  [3:0]                 awregion_m;
+  output  [DS_DATA_WIDTH-1:0]     wdata_m;
+  output  [DS_WSTRB_WIDTH-1:0]      wstrb_m;
+  output              wlast_m;
+  output              wvalid_m;
+  input               wready_m;
+  output  [AWID_WIDTH-1:0]      wid_m;
+  output  [USER_WIDTH-1:0]      wuser_m;
+  input   [AWID_WIDTH-1:0]       bid_m;
+  input   [1:0]       bresp_m;
+  input               bvalid_m;
+  output              bready_m;
+  input   [USER_WIDTH-1:0]      buser_m;
+  output  [ARID_WIDTH-1:0]       arid_m;
+  output  [ADDR_WIDTH-1:0]      araddr_m;
+  output  [7:0]       arlen_m;
+  output  [2:0]       arsize_m;
+  output  [1:0]       arburst_m;
+  output  [1:0]            arlock_m;
+  output  [3:0]       arcache_m;
+  output  [2:0]       arprot_m;
+  output              arvalid_m;
+  output              arvalid_vect_m;
+  input               arready_m;
+  output  [USER_WIDTH-1:0]      aruser_m;
+  output  [3:0]                 arregion_m;
+  input   [ARID_WIDTH-1:0]       rid_m;
+  input   [DS_DATA_WIDTH-1:0]     rdata_m;
+  input   [1:0]       rresp_m;
+  input               rlast_m;
+  input               rvalid_m;
+  output              rready_m;
+  input   [USER_WIDTH-1:0]      ruser_m;
+  output  [3:0]       awqv_m;
+  output  [3:0]       arqv_m;
+  input   [AW_IDB_WIDTH-1:0]      aw_data;
+  input               aw_valid;
+  output              aw_ready;
+  output  [B_IDB_WIDTH-1:0]       b_data;
+  output              b_valid;
+  input               b_ready;
+  input   [AR_IDB_WIDTH-1:0]      ar_data;
+  input               ar_valid;
+  output              ar_ready;
+  output  [R_IDB_WIDTH-1:0]     r_data;
+  output              r_valid;
+  input               r_ready;
+  input   [W_IDB_WIDTH-1:0]     w_data;
+  input               w_valid;
+  output              w_ready;
+  input               aclk;
+  input               aresetn;
+  wire                awvalid_master;
+  wire                awready_master;
+  wire                arvalid_master;
+  wire                arready_master;
+  wire                bvalid_master;
+  wire                bready_master;
+  wire                rvalid_master;
+  wire                awvalid_vector;
+  wire                arvalid_vector;
+  wire                wr_cnt_empty;
+  wire                mask_w;
+  wire                mask_r;
+  wire [3:0]          aw_qos_s;
+  wire [3:0]          ar_qos_s;
+  wire                awvalid_lock;
+  wire                arvalid_lock;
+  wire                lock_seq;
+  assign {
+          awregion_m,
+          awuser_m,
+          awid_m,
+          awaddr_m,
+          awlen_m,
+          awsize_m,
+          awburst_m,
+          awlock_m,
+          awcache_m,
+          aw_qos_s,
+          awprot_m,
+          awvalid_vector} = aw_data;
+  assign awvalid_master = aw_valid;
+  assign aw_ready = awready_master;
+  assign {
+          arregion_m,
+          aruser_m,
+          arid_m,
+          araddr_m,
+          arlen_m,
+          arsize_m,
+          arburst_m,
+          arlock_m,
+          arcache_m,
+          ar_qos_s,
+          arprot_m,
+          arvalid_vector} = ar_data;
+  assign arvalid_master= ar_valid;
+  assign ar_ready = arready_master;
+  assign {
+          wid_m,
+          wuser_m,
+          wdata_m,
+          wstrb_m,
+          wlast_m} = w_data;
+  assign wvalid_m= w_valid;
+  assign w_ready = wready_m;
+  assign r_data = {
+          ruser_m,
+          rid_m,
+          rdata_m,
+          rresp_m,
+          rlast_m};
+  assign r_valid = rvalid_m;
+  assign rready_m= r_ready;
+  assign b_data = {
+          buser_m,
+          bid_m,
+          bresp_m};
+  assign b_valid = bvalid_master;
+  assign bready_master = b_ready;
+maskcntl #(
+        .RD_ISS(RD_ISS),
+        .WR_ISS(WR_ISS)
+        ) u_maskcntl (
+        .awvalid_m    (awvalid_master),
+        .arvalid_m    (arvalid_master),
+        .awready_m    (awready_master),
+        .arready_m    (arready_master),
+        .aw_qos_s     (aw_qos_s),
+        .ar_qos_s     (ar_qos_s),
+        .bvalid_m     (bvalid_master),
+        .bready_m     (bready_master),
+        .rvalid_m     (rvalid_master),
+        .rready_m     (rready_m),
+        .pre_awvalid  (awvalid_master),
+        .pre_arvalid  (arvalid_master),
+        .awlock       (awlock_m[1]),
+        .arlock       (arlock_m[1]),
+        .lock_seq     (lock_seq),
+        .wr_cnt_empty (wr_cnt_empty),
+        .mask_w       (mask_w),
+        .mask_r       (mask_r),
+        .aw_qos_m     (awqv_m),
+        .ar_qos_m     (arqv_m),
+        .aclk         (aclk),
+        .aresetn      (aresetn)
+        );
+  assign awvalid_lock = (awvalid_master & awlock_m[1]);
+  assign arvalid_lock = (arvalid_master & arlock_m[1]);
+  assign awvalid_m = ~mask_w & ((awvalid_master & ~lock_seq) | awvalid_lock);
+  assign arvalid_m = ~mask_r & ((arvalid_master & ~lock_seq) | arvalid_lock);
+  assign awready_master = (awready_m & (~lock_seq | (awvalid_master & awlock_m[1])) & !mask_w);
+  assign arready_master = (arready_m & (~lock_seq | (arvalid_master & arlock_m[1])) & !mask_r);
+  assign bvalid_master = (bvalid_m & !wr_cnt_empty);
+  assign bready_m = (bready_master & !wr_cnt_empty);
+  assign rvalid_master = rvalid_m & rlast_m;
+  assign awvalid_vect_m = ({1{awvalid_m}} & awvalid_vector);
+  assign arvalid_vect_m = ({1{arvalid_m}} & arvalid_vector);
+endmodule
+`include "Axi_undefs.v"
diff --git a/axi2sramcrs/rtl/upsizer/upsize_rd_addr_fmt.v b/axi2sramcrs/rtl/upsizer/upsize_rd_addr_fmt.v
new file mode 100644
index 0000000..6f5ab9d
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_rd_addr_fmt.v
@@ -0,0 +1,774 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_rd_addr_fmt
+  (
+   ar_lock_hndshk, ar_unlock_hndshk, ardata_valid, ardata_data,
+   arready_s, arid_m, araddr_m, arlen_m, arsize_m, arburst_m,
+   arcache_m, arprot_m, arlock_m, arvalid_m, aruser_m, arregion_m,
+   aclk, aresetn, lock_seq, ardata_ready, arid_s, araddr_s, arlen_s,
+   arsize_s, arburst_s, arcache_s, arprot_s, arvalid_s, arlock_s,
+   aruser_s, arregion_s, arready_m
+   );
+`include "Axi.v"
+parameter	ARID_WIDTH=4;
+parameter	AWID_WIDTH=4;
+parameter	ADDR_WIDTH=32;
+parameter	US_DATA_WIDTH=128;
+parameter	DS_DATA_WIDTH=256;
+parameter	USER_WIDTH=4;
+parameter	DS_AXI3=1'h1;
+localparam	US_AXLEN_WIDTH=8;
+localparam	DS_AXLEN_WIDTH=8;
+localparam	DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam	US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam	DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam	US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam	ARFMT_WIDTH=1+1+ARID_WIDTH+DS_ADDR_AL_WIDTH*3+1+3;
+localparam	US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam	US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam	US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam	US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam	US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam	AW_IDB_WIDTH=US_AW_WIDTH+US_ADDR_AL_WIDTH-DS_ADDR_AL_WIDTH;
+localparam	AR_IDB_WIDTH=US_AR_WIDTH+ARFMT_WIDTH;
+localparam	W_IDB_WIDTH=USER_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam	R_IDB_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1+DS_ADDR_AL_WIDTH;
+localparam	B_IDB_WIDTH=USER_WIDTH+2+AWID_WIDTH;
+localparam  RDATA_CAM_WIDTH_UP =DS_ADDR_AL_WIDTH-US_ADDR_AL_WIDTH;
+localparam  TOTAL_BYTES_WIDTH = US_ADDR_AL_WIDTH+8;
+  input                    aclk;
+  input                    aresetn;
+  input                    lock_seq;
+  output                   ar_lock_hndshk;
+  output                   ar_unlock_hndshk;
+  input                    ardata_ready;
+  output                   ardata_valid;
+  output [ARFMT_WIDTH-1:0]            ardata_data;
+  input [ARID_WIDTH-1:0]              arid_s;
+  input [ADDR_WIDTH-1:0]             araddr_s;
+  input [US_AXLEN_WIDTH-1:0]              arlen_s;
+  input [2:0]              arsize_s;
+  input [1:0]              arburst_s;
+  input [3:0]              arcache_s;
+  input [2:0]              arprot_s;
+  input                    arvalid_s;
+  input [1:0]                   arlock_s;
+  output                   arready_s;
+  input  [USER_WIDTH-1:0]	aruser_s;
+  input  [3:0]			arregion_s;
+  output [ARID_WIDTH-1:0]              arid_m;
+  output [ADDR_WIDTH-1:0]             araddr_m;
+  output [DS_AXLEN_WIDTH-1:0]              arlen_m;
+  output [2:0]              arsize_m;
+  output [1:0]              arburst_m;
+  output [3:0]              arcache_m;
+  output [2:0]              arprot_m;
+  output [1:0]                   arlock_m;
+  output                    arvalid_m;
+  input                     arready_m;
+  output  [USER_WIDTH-1:0]	aruser_m;
+  output  [3:0]			arregion_m;
+  reg [ADDR_WIDTH-1:0]                araddro;              // transaction start address (int)
+  reg [7:0]                 arleno;               // transaction length (int)
+  reg [2:0]                 arsizeo;              // transaction transfer size (int)
+  reg [1:0]                 arbursto;             // transaction burst type (int)
+  reg [ARID_WIDTH-1:0]                 arido;
+  reg [3:0]                 arcacheo;
+  reg [2:0]                 arproto;
+  reg [1:0]                      arlocko;
+  reg [USER_WIDTH-1:0]		arusero;
+  reg [3:0]		arregiono;
+  reg                       excl_override_reg;
+  reg                       busy_reg;
+  reg [TOTAL_BYTES_WIDTH-1:0]                 wrap_bytes_remaining_reg;
+  reg [DS_ADDR_AL_WIDTH-1:0]                 align_mask;
+  reg [DS_ADDR_AL_WIDTH-1:0]                 read_mask;
+  wire                         n_response;
+  reg [TOTAL_BYTES_WIDTH-1:0]                 total_bytes;
+  reg [TOTAL_BYTES_WIDTH-1:0]                 total_bytes_masked;
+  reg [2:0]                 wrapsize;
+  reg [2:0]                 wrapfitsize;
+  reg [3:0]                 wraplen;
+  reg [DS_ADDR_AL_WIDTH:0]                 wrapalignmask;
+  reg                       wrap_split_reg;
+  reg [2:0]                 incrsize;
+  wire                      slave_hndshk;
+  wire                      master_hndshk;
+  wire                      bypass;
+  wire [ADDR_WIDTH-1:0]               araddr_aligned;
+  wire [DS_ADDR_AL_WIDTH+8-1:0]                total_bytes_ext;
+  wire [TOTAL_BYTES_WIDTH-1:0]                wrap_boundary_mask;
+  wire                      wrap_aligned;
+  wire                      wrap_is_incr;
+  wire                      wrap_split;
+  wire                      wrap_fits;
+  wire [TOTAL_BYTES_WIDTH-1:0]                wrap_fits_mask;
+  wire [DS_ADDR_AL_WIDTH:0]                working_addr;
+  wire                      wrap_split_reg_nxt;
+  wire                      wrap_split_reg_wr_en;
+  wire                      wrap_info_write_en;
+  wire [TOTAL_BYTES_WIDTH-1:0]                next_wrap_bytes_remaining_reg;
+  wire [TOTAL_BYTES_WIDTH-1:0]                addr_less_one;
+  wire [7:0]                wraplen_i;
+  wire [7:0]                arlen_1;
+  wire [7:0]                incrlen;
+  wire [TOTAL_BYTES_WIDTH-1:0]                bytes_to_transfer;
+  wire [TOTAL_BYTES_WIDTH+8-1:0]              bytes_to_transfer_large;
+  wire [TOTAL_BYTES_WIDTH-1:0]                bytes_to_transfer_wrap1;
+  wire [DS_ADDR_AL_WIDTH-1:0]                offset_address;
+  wire [7:0]                incrlenmaxsize;
+  wire [DS_ADDR_AL_WIDTH:0]                final_address;
+  wire                      overflow;
+  wire                      bytes_lt_one_byte;
+  wire                      bytes_lt_two_byte;
+  wire                      bytes_lt_two_half;
+  wire                      bytes_lt_four_half;
+  wire                      half_carry;
+  wire                      half_carry_double;
+  wire                      bytes_lt_four_word;
+  wire                      bytes_lt_eight_word;
+  wire [2:0]                word_carry;
+  wire                      word_carry_double;
+  wire                      bytes_lt_eight_dword;
+  wire                      bytes_lt_sixt_dword;
+  wire [3:0]                dword_carry;
+  wire                      dword_carry_double;
+  wire                      bytes_lt_sixt_qword;
+  wire                      bytes_lt_ttwo_qword;
+  wire [4:0]                qword_carry;
+  wire                      qword_carry_double;
+  wire                      bytes_lt_ttwo_oword;
+  wire                      bytes_lt_sfour_oword;
+  wire [5:0]                oword_carry;
+  wire                      oword_carry_double;
+  wire                      buffers_ok;
+  wire                      new_transaction;
+  wire                      trans_in_progress;
+  wire                      new_trans_avail;
+  wire                      trans_complete;
+  wire                      next_busy_reg;
+  wire                      busy_reg_wr_en;
+  wire                      excl_override;
+ assign slave_hndshk = arvalid_s & arready_s;
+ assign master_hndshk = arvalid_m & arready_m;
+assign	ardata_data = {
+		wrap_fits,
+		n_response,
+		arid_s,
+		((arburst_s == `AXI_ABURST_WRAP) & ~wrap_is_incr) ? addr_less_one[DS_ADDR_AL_WIDTH-1:0] & align_mask : final_address[DS_ADDR_AL_WIDTH-1:0] & align_mask,
+		read_mask,
+		araddr_s[DS_ADDR_AL_WIDTH-1:0] & align_mask,
+		bypass,
+		arsize_s
+		};
+ assign ardata_valid = new_transaction;
+ always @(*)
+  begin : p_new_addr_incr_en_r
+    read_mask = {DS_ADDR_AL_WIDTH{1'b0}};
+    case (arburst_s)
+      `AXI_ABURST_FIXED : read_mask = {DS_ADDR_AL_WIDTH{1'b0}};
+      `AXI_ABURST_WRAP  : read_mask = total_bytes[DS_ADDR_AL_WIDTH-1:0];
+      `AXI_ABURST_INCR  : read_mask = {DS_ADDR_AL_WIDTH{1'b1}};
+      default           : read_mask = {DS_ADDR_AL_WIDTH{1'b0}};
+    endcase
+  end
+ assign n_response = wrap_split;
+ assign buffers_ok = ardata_ready;
+ assign  trans_complete = ~(wrap_split & ~wrap_split_reg);
+ assign trans_in_progress = new_transaction | busy_reg;
+ assign new_transaction = new_trans_avail & buffers_ok;
+ assign new_trans_avail = arvalid_s & ~busy_reg;
+ assign next_busy_reg = (trans_complete & slave_hndshk)  ? 1'b0 :
+                        ((new_transaction & ~slave_hndshk) ? 1'b1 : busy_reg);
+ assign busy_reg_wr_en = busy_reg ^ next_busy_reg;
+ always @(posedge aclk or negedge aresetn)
+   begin : busy_reg_p
+      if (!aresetn) begin
+          busy_reg <= 1'b0;
+      end else if (busy_reg_wr_en) begin
+          busy_reg <= next_busy_reg;
+      end
+    end
+ assign excl_override = (new_transaction) ? n_response | (|arleno[7:4]) : excl_override_reg;
+ always @(posedge aclk or negedge aresetn)
+   begin : excl_override_reg_p
+      if (!aresetn) begin
+          excl_override_reg <= 1'b0;
+      end else if (new_transaction) begin
+          excl_override_reg <= excl_override;
+      end
+    end
+ assign arid_m =     arido;
+ assign arcache_m =  arcacheo;
+ assign arprot_m =   arproto;
+ assign arlen_m =    arleno;
+ assign arsize_m =   arsizeo;
+ assign araddr_m =   araddro;
+ assign arburst_m =  arbursto;
+ assign arlock_m =   arlocko;
+ assign aruser_m =   arusero;
+ assign arregion_m = arregiono;
+ assign arvalid_m = arvalid_s && trans_in_progress;
+ assign arready_s = master_hndshk && trans_complete;
+ always @(*) begin
+      arleno = incrlen;
+      arsizeo = incrsize;
+      arbursto = `AXI_ABURST_INCR;
+      arido = arid_s;
+      arcacheo = arcache_s;
+      arproto = arprot_s;
+      arusero = aruser_s;
+      arregiono = arregion_s;
+      araddro = araddr_aligned;
+      arlocko = {(arlock_s[1] | (lock_seq & ~trans_complete)),(arlock_s[0] && (~excl_override))};
+      if (!wrap_split_reg) begin
+         araddro = araddr_s;
+         if (wrap_aligned) begin
+            arleno = wraplen_i;
+            arsizeo = wrapsize;
+            arbursto = `AXI_ABURST_WRAP;
+         end else if (bypass) begin
+            arleno = arlen_s;
+            arsizeo = arsize_s;
+            arbursto = arburst_s;
+         end else if (wrap_fits) begin
+            araddro = araddr_aligned;
+            arleno = arlen_1;
+            arsizeo = wrapfitsize;
+            arbursto = `AXI_ABURST_INCR;
+         end
+      end
+  end
+ assign wraplen_i = {4'b0000,wraplen};
+ assign arlen_1 = {4'b0000,`AXI_ALEN_1};
+ assign addr_less_one = araddr_s[TOTAL_BYTES_WIDTH-1:0] - {{TOTAL_BYTES_WIDTH{1'b0}},1'b1};
+ assign next_wrap_bytes_remaining_reg = (addr_less_one & total_bytes);
+ assign wrap_info_write_en = wrap_split & master_hndshk;
+ always @(posedge aclk or negedge aresetn)
+   begin : wrap_bytes_remaining_reg_p
+      if (!aresetn) begin
+          wrap_bytes_remaining_reg <= {TOTAL_BYTES_WIDTH{1'b0}};
+      end else if (wrap_info_write_en) begin
+          wrap_bytes_remaining_reg <= next_wrap_bytes_remaining_reg;
+      end
+    end
+ assign araddr_aligned = {araddr_s[ADDR_WIDTH-1:TOTAL_BYTES_WIDTH],((araddr_s[TOTAL_BYTES_WIDTH-1:0]) & (~total_bytes))};
+ assign wrap_split_reg_nxt = wrap_split & ~(wrap_split_reg);
+ assign wrap_split_reg_wr_en = master_hndshk;
+ always @(posedge aclk or negedge aresetn)
+   begin : wrap_split_p
+      if (!aresetn)
+          wrap_split_reg <= 1'b0;
+      else if (wrap_split_reg_wr_en)
+          wrap_split_reg <= wrap_split_reg_nxt;
+    end
+  assign  ar_lock_hndshk = (slave_hndshk & arlock_s[1]);
+  assign  ar_unlock_hndshk = (master_hndshk & ~arlock_m[1]);
+ assign bypass = (arburst_s == `AXI_ABURST_FIXED ) || ~arcache_s[1] || (arlen_s == `AXI_ALEN_1);
+
+generate
+
+if(TOTAL_BYTES_WIDTH == 10) begin: tb10
+always @(*)
+  begin : total_bytes_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes = {2'h0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes = {1'h0, arlen_s, 1'b1};
+       `AXI_ASIZE_32   : total_bytes = {      arlen_s, 2'b11};
+       `AXI_ASIZE_64   : total_bytes = {      arlen_s[6:0], 3'b111};
+       `AXI_ASIZE_128  : total_bytes = {      arlen_s[5:0], 4'b1111};
+       `AXI_ASIZE_256  : total_bytes = {      arlen_s[4:0], 5'b11111};
+       `AXI_ASIZE_512  : total_bytes = {      arlen_s[3:0], 6'b111111};
+       `AXI_ASIZE_1024 : total_bytes = {2'h0, arlen_s};
+       default         : total_bytes = {10'hx};
+    endcase
+  end
+end
+else if(TOTAL_BYTES_WIDTH == 11) begin: tb11
+always @(*)
+  begin : total_bytes_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes = {3'b0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes = {2'b0, arlen_s, 1'b1};
+       `AXI_ASIZE_32   : total_bytes = {1'b0, arlen_s, 2'b11};
+       `AXI_ASIZE_64   : total_bytes = {      arlen_s, 3'b111};
+       `AXI_ASIZE_128  : total_bytes = {      arlen_s[6:0], 4'b1111};
+       `AXI_ASIZE_256  : total_bytes = {      arlen_s[5:0], 5'b11111};
+       `AXI_ASIZE_512  : total_bytes = {      arlen_s[4:0], 6'b111111};
+       `AXI_ASIZE_1024 : total_bytes = {3'b0, arlen_s};
+       default         : total_bytes = {11'b0};
+    endcase
+  end
+
+end
+else if(TOTAL_BYTES_WIDTH == 12) begin: tb12
+always @(*)
+  begin : total_bytes_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes = {4'b0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes = {3'b0, arlen_s, 1'b1};
+       `AXI_ASIZE_32   : total_bytes = {2'b0, arlen_s, 2'b11};
+       `AXI_ASIZE_64   : total_bytes = {1'b0, arlen_s, 3'b111};
+       `AXI_ASIZE_128  : total_bytes = {      arlen_s, 4'b1111};
+       `AXI_ASIZE_256  : total_bytes = {      arlen_s[6:0], 5'b11111};
+       `AXI_ASIZE_512  : total_bytes = {      arlen_s[5:0], 6'b111111};
+       `AXI_ASIZE_1024 : total_bytes = {4'b0, arlen_s};
+       default         : total_bytes = {12'b0};
+    endcase
+  end
+
+end
+else if(TOTAL_BYTES_WIDTH == 13) begin: tb13
+always @(*)
+  begin : total_bytes_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes = {5'b0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes = {4'b0, arlen_s, 1'b1};
+       `AXI_ASIZE_32   : total_bytes = {3'b0, arlen_s, 2'b11};
+       `AXI_ASIZE_64   : total_bytes = {2'b0, arlen_s, 3'b111};
+       `AXI_ASIZE_128  : total_bytes = {1'b0, arlen_s, 4'b1111};
+       `AXI_ASIZE_256  : total_bytes = {      arlen_s, 5'b11111};
+       `AXI_ASIZE_512  : total_bytes = {      arlen_s[6:0], 6'b111111};
+       `AXI_ASIZE_1024 : total_bytes = {5'b0, arlen_s};
+       default         : total_bytes = {13'b0};
+    endcase
+  end
+
+end
+
+else  begin: tb_o
+
+always @(*)
+  begin : total_bytes_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes = {6'b0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes = {5'b0, arlen_s, 1'b1};
+       `AXI_ASIZE_32   : total_bytes = {4'b0, arlen_s, 2'b11};
+       `AXI_ASIZE_64   : total_bytes = {3'b0, arlen_s, 3'b111};
+       `AXI_ASIZE_128  : total_bytes = {2'b0, arlen_s, 4'b1111};
+       `AXI_ASIZE_256  : total_bytes = {1'b0, arlen_s, 5'b11111};
+       `AXI_ASIZE_512  : total_bytes = {      arlen_s, 6'b111111};
+       `AXI_ASIZE_1024 : total_bytes = {6'b0, arlen_s};
+       default         : total_bytes = {14'b0};
+    endcase
+  end
+
+end
+
+endgenerate
+
+
+  assign total_bytes_ext = { {RDATA_CAM_WIDTH_UP{1'b0}},total_bytes };
+
+
+generate
+
+if(DS_DATA_WIDTH==512) begin: wmsk_512
+
+always @(*)
+  begin : wrap_size_len
+    if (total_bytes_ext[6]&&(DS_DATA_WIDTH>=512)) begin
+      wrapfitsize = `AXI_ASIZE_1024;
+      wrapsize = `AXI_ASIZE_512;
+      wraplen = total_bytes_ext[9:6];
+      wrapalignmask = {1'b0, 6'b111111};
+    end else if (total_bytes_ext[5]&&(DS_DATA_WIDTH>=256)) begin
+      wrapfitsize = `AXI_ASIZE_512;
+      wrapsize = `AXI_ASIZE_256;
+      wraplen = total_bytes_ext[8:5];
+      wrapalignmask = {2'b0, 5'b11111};
+    end else if (total_bytes_ext[4]&&(DS_DATA_WIDTH>=128)) begin
+      wrapfitsize = `AXI_ASIZE_256;
+      wrapsize = `AXI_ASIZE_128;
+      wraplen = total_bytes_ext[7:4];
+      wrapalignmask = {3'b0, 4'b1111};
+    end else if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+      wrapfitsize = `AXI_ASIZE_128;
+      wrapsize = `AXI_ASIZE_64;
+      wraplen = total_bytes_ext[6:3];
+      wrapalignmask = {4'b0, 3'b111};
+    end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+      wrapfitsize = `AXI_ASIZE_64;
+      wrapsize = `AXI_ASIZE_32;
+      wraplen = total_bytes_ext[5:2];
+      wrapalignmask = {5'b0, 2'b11};
+    end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+      wrapfitsize = `AXI_ASIZE_32;
+      wrapsize = `AXI_ASIZE_16;
+      wraplen = total_bytes_ext[4:1];
+      wrapalignmask = {6'b0, 1'b1};
+    end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+      wrapfitsize = `AXI_ASIZE_16;
+      wrapsize = `AXI_ASIZE_8;
+      wraplen = total_bytes_ext[3:0];
+      wrapalignmask = 7'b0;
+    end else begin
+      wrapfitsize = 3'b0;
+      wrapsize = 3'b0;
+      wraplen = 4'b0;
+      wrapalignmask = 7'b0;
+    end
+  end
+
+end
+
+if(DS_DATA_WIDTH==256) begin: wmsk_256
+
+always @(*)
+  begin : wrap_size_len
+   if (total_bytes_ext[5]&&(DS_DATA_WIDTH>=256)) begin
+      wrapfitsize = `AXI_ASIZE_512;
+      wrapsize = `AXI_ASIZE_256;
+      wraplen = total_bytes_ext[8:5];
+      wrapalignmask = {2'b0, 5'b11111};
+    end else if (total_bytes_ext[4]&&(DS_DATA_WIDTH>=128)) begin
+      wrapfitsize = `AXI_ASIZE_256;
+      wrapsize = `AXI_ASIZE_128;
+      wraplen = total_bytes_ext[7:4];
+      wrapalignmask = {3'b0, 4'b1111};
+    end else if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+      wrapfitsize = `AXI_ASIZE_128;
+      wrapsize = `AXI_ASIZE_64;
+      wraplen = total_bytes_ext[6:3];
+      wrapalignmask = {4'b0, 3'b111};
+    end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+      wrapfitsize = `AXI_ASIZE_64;
+      wrapsize = `AXI_ASIZE_32;
+      wraplen = total_bytes_ext[5:2];
+      wrapalignmask = {5'b0, 2'b11};
+    end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+      wrapfitsize = `AXI_ASIZE_32;
+      wrapsize = `AXI_ASIZE_16;
+      wraplen = total_bytes_ext[4:1];
+      wrapalignmask = {6'b0, 1'b1};
+    end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+      wrapfitsize = `AXI_ASIZE_16;
+      wrapsize = `AXI_ASIZE_8;
+      wraplen = total_bytes_ext[3:0];
+      wrapalignmask = 7'b0;
+    end else begin
+      wrapfitsize = 3'b0;//x;
+      wrapsize = 3'b0;//x;
+      wraplen = 4'b0;//x;
+      wrapalignmask = 7'b0;//x;
+    end
+  end
+
+end
+
+if(DS_DATA_WIDTH==128) begin: wmsk_128
+
+always @(*)
+  begin : wrap_size_len
+    if (total_bytes_ext[4]&&(DS_DATA_WIDTH>=128)) begin
+      wrapfitsize = `AXI_ASIZE_256;
+      wrapsize = `AXI_ASIZE_128;
+      wraplen = total_bytes_ext[7:4];
+      wrapalignmask = {3'b0, 4'b1111};
+    end else if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+      wrapfitsize = `AXI_ASIZE_128;
+      wrapsize = `AXI_ASIZE_64;
+      wraplen = total_bytes_ext[6:3];
+      wrapalignmask = {4'b0, 3'b111};
+    end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+      wrapfitsize = `AXI_ASIZE_64;
+      wrapsize = `AXI_ASIZE_32;
+      wraplen = total_bytes_ext[5:2];
+      wrapalignmask = {5'b0, 2'b11};
+    end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+      wrapfitsize = `AXI_ASIZE_32;
+      wrapsize = `AXI_ASIZE_16;
+      wraplen = total_bytes_ext[4:1];
+      wrapalignmask = {6'b0, 1'b1};
+    end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+      wrapfitsize = `AXI_ASIZE_16;
+      wrapsize = `AXI_ASIZE_8;
+      wraplen = total_bytes_ext[3:0];
+      wrapalignmask = 7'b0;
+    end else begin
+      wrapfitsize = 3'b0;//x;
+      wrapsize = 3'b0;//x;
+      wraplen = 4'b0;//x;
+      wrapalignmask = 7'b0;//x;
+    end
+  end
+
+end
+if(DS_DATA_WIDTH==64) begin: wmsk_64
+
+always @(*)
+  begin : wrap_size_len
+    if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+      wrapfitsize = `AXI_ASIZE_128;
+      wrapsize = `AXI_ASIZE_64;
+      wraplen = total_bytes_ext[6:3];
+      wrapalignmask = {4'b0, 3'b111};
+    end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+      wrapfitsize = `AXI_ASIZE_64;
+      wrapsize = `AXI_ASIZE_32;
+      wraplen = total_bytes_ext[5:2];
+      wrapalignmask = {5'b0, 2'b11};
+    end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+      wrapfitsize = `AXI_ASIZE_32;
+      wrapsize = `AXI_ASIZE_16;
+      wraplen = total_bytes_ext[4:1];
+      wrapalignmask = {6'b0, 1'b1};
+    end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+      wrapfitsize = `AXI_ASIZE_16;
+      wrapsize = `AXI_ASIZE_8;
+      wraplen = total_bytes_ext[3:0];
+      wrapalignmask = 7'b0;
+    end else begin
+      wrapfitsize = 3'b0;
+      wrapsize = 3'b0;
+      wraplen = 4'b0;
+      wrapalignmask = 7'b0;
+    end
+  end
+
+end
+
+if(DS_DATA_WIDTH==32) begin: wmsk_32
+
+always @(*)
+  begin : wrap_size_len
+    if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+      wrapfitsize = `AXI_ASIZE_64;
+      wrapsize = `AXI_ASIZE_32;
+      wraplen = total_bytes_ext[5:2];
+      wrapalignmask = {5'b0, 2'b11};
+    end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+      wrapfitsize = `AXI_ASIZE_32;
+      wrapsize = `AXI_ASIZE_16;
+      wraplen = total_bytes_ext[4:1];
+      wrapalignmask = {6'b0, 1'b1};
+    end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+      wrapfitsize = `AXI_ASIZE_16;
+      wrapsize = `AXI_ASIZE_8;
+      wraplen = total_bytes_ext[3:0];
+      wrapalignmask = 7'b0;
+    end else begin
+      wrapfitsize = 3'b0;
+      wrapsize = 3'b0;
+      wraplen = 4'b0;
+      wrapalignmask = 7'b0;
+    end
+  end
+
+end
+
+endgenerate
+
+
+ assign working_addr = araddr_s[DS_ADDR_AL_WIDTH:0] & wrapalignmask;
+ assign wrap_fits_mask = ({(TOTAL_BYTES_WIDTH-DS_ADDR_AL_WIDTH){1'b1}}<<DS_ADDR_AL_WIDTH);
+ assign  wrap_fits = ~|(total_bytes & wrap_fits_mask) & (arburst_s == `AXI_ABURST_WRAP);
+ assign  wrap_is_incr = ~|(araddr_s[TOTAL_BYTES_WIDTH-1:0] & total_bytes);
+ assign  wrap_aligned = ~|working_addr & (arburst_s == `AXI_ABURST_WRAP) & ~bypass & ~wrap_is_incr & ~wrap_fits ;
+ assign  wrap_split = ((|working_addr)) & (arburst_s == `AXI_ABURST_WRAP) & ~bypass & ~wrap_fits;
+ assign wrap_boundary_mask = total_bytes;
+ assign bytes_to_transfer_wrap1 = ~(araddr_s[TOTAL_BYTES_WIDTH-1:0]) & wrap_boundary_mask;
+ assign bytes_to_transfer = (wrap_split_reg) ? wrap_bytes_remaining_reg
+                            : ((arburst_s == `AXI_ABURST_WRAP) ? bytes_to_transfer_wrap1
+                            : total_bytes_masked);
+generate
+if(TOTAL_BYTES_WIDTH == 10) begin:tbm10
+always @(*)
+  begin : total_bytes_masked_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes_masked = { 2'h0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes_masked = { 1'h0, arlen_s, ~araddr_s[0]};
+       `AXI_ASIZE_32   : total_bytes_masked = {       arlen_s, ~araddr_s[1:0]};
+       `AXI_ASIZE_64   : total_bytes_masked = {       arlen_s[6:0], ~araddr_s[2:0]};
+       `AXI_ASIZE_128  : total_bytes_masked = {       arlen_s[5:0], ~araddr_s[3:0]};
+       `AXI_ASIZE_256  : total_bytes_masked = {       arlen_s[4:0], ~araddr_s[4:0]};
+       `AXI_ASIZE_512  : total_bytes_masked = {       arlen_s[3:0], ~araddr_s[5:0]};
+       `AXI_ASIZE_1024 : total_bytes_masked = { 2'h0, arlen_s};
+       default         : total_bytes_masked = {10{1'b0}};
+    endcase
+ end
+end
+
+
+else if(TOTAL_BYTES_WIDTH == 11) begin:tbm11
+always @(*)
+  begin : total_bytes_masked_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes_masked = { 3'h0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes_masked = { 2'h0, arlen_s, ~araddr_s[0]};
+       `AXI_ASIZE_32   : total_bytes_masked = { 1'h0, arlen_s, ~araddr_s[1:0]};
+       `AXI_ASIZE_64   : total_bytes_masked = {       arlen_s, ~araddr_s[2:0]};
+       `AXI_ASIZE_128  : total_bytes_masked = {       arlen_s[6:0], ~araddr_s[3:0]};
+       `AXI_ASIZE_256  : total_bytes_masked = {       arlen_s[5:0], ~araddr_s[4:0]};
+       `AXI_ASIZE_512  : total_bytes_masked = {       arlen_s[4:0], ~araddr_s[5:0]};
+       `AXI_ASIZE_1024 : total_bytes_masked = { 3'h0, arlen_s};
+       default         : total_bytes_masked = {11{1'b0}};
+    endcase
+ end
+end
+
+
+else if(TOTAL_BYTES_WIDTH == 12) begin:tbm12
+always @(*)
+  begin : total_bytes_masked_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes_masked = { 4'h0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes_masked = { 3'h0, arlen_s, ~araddr_s[0]};
+       `AXI_ASIZE_32   : total_bytes_masked = { 2'h0, arlen_s, ~araddr_s[1:0]};
+       `AXI_ASIZE_64   : total_bytes_masked = { 1'b0, arlen_s, ~araddr_s[2:0]};
+       `AXI_ASIZE_128  : total_bytes_masked = {       arlen_s, ~araddr_s[3:0]};
+       `AXI_ASIZE_256  : total_bytes_masked = {       arlen_s[6:0], ~araddr_s[4:0]};
+       `AXI_ASIZE_512  : total_bytes_masked = {       arlen_s[5:0], ~araddr_s[5:0]};
+       `AXI_ASIZE_1024 : total_bytes_masked = { 4'h0, arlen_s};
+       default         : total_bytes_masked = {12{1'b0}};
+    endcase
+ end
+end
+
+
+else if(TOTAL_BYTES_WIDTH == 13) begin:tbm13
+always @(*)
+  begin : total_bytes_masked_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes_masked = { 5'h0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes_masked = { 4'h0, arlen_s, ~araddr_s[0]};
+       `AXI_ASIZE_32   : total_bytes_masked = { 3'h0, arlen_s, ~araddr_s[1:0]};
+       `AXI_ASIZE_64   : total_bytes_masked = { 2'h0, arlen_s, ~araddr_s[2:0]};
+       `AXI_ASIZE_128  : total_bytes_masked = { 1'h0, arlen_s, ~araddr_s[3:0]};
+       `AXI_ASIZE_256  : total_bytes_masked = {       arlen_s, ~araddr_s[4:0]};
+       `AXI_ASIZE_512  : total_bytes_masked = {       arlen_s[6:0], ~araddr_s[5:0]};
+       `AXI_ASIZE_1024 : total_bytes_masked = { 5'h0, arlen_s};
+       default         : total_bytes_masked = {13{1'b0}};
+    endcase
+ end
+end
+
+
+else begin:tbm_o
+always @(*)
+  begin : total_bytes_masked_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : total_bytes_masked = { 6'h0, arlen_s};
+       `AXI_ASIZE_16   : total_bytes_masked = { 5'h0, arlen_s, ~araddr_s[0]};
+       `AXI_ASIZE_32   : total_bytes_masked = { 4'h0, arlen_s, ~araddr_s[1:0]};
+       `AXI_ASIZE_64   : total_bytes_masked = { 3'h0, arlen_s, ~araddr_s[2:0]};
+       `AXI_ASIZE_128  : total_bytes_masked = { 2'h0, arlen_s, ~araddr_s[3:0]};
+       `AXI_ASIZE_256  : total_bytes_masked = { 1'h0, arlen_s, ~araddr_s[4:0]};
+       `AXI_ASIZE_512  : total_bytes_masked = {       arlen_s, ~araddr_s[5:0]};
+       `AXI_ASIZE_1024 : total_bytes_masked = { 6'h0, arlen_s};
+       default         : total_bytes_masked = {14{1'b0}};
+    endcase
+ end
+end
+
+
+endgenerate
+
+
+
+
+ always @(*)
+  begin : align_mask_p
+    case (arsize_s)
+       `AXI_ASIZE_8    : align_mask = {DS_ADDR_AL_WIDTH{1'b1}};
+       `AXI_ASIZE_16   : align_mask = {DS_ADDR_AL_WIDTH{1'b1}}<<1;
+       `AXI_ASIZE_32   : align_mask = {DS_ADDR_AL_WIDTH{1'b1}}<<2;
+       `AXI_ASIZE_64   : align_mask = {DS_ADDR_AL_WIDTH{1'b1}}<<3;
+       `AXI_ASIZE_128  : align_mask = {DS_ADDR_AL_WIDTH{1'b1}}<<4;
+       `AXI_ASIZE_256  : align_mask = {DS_ADDR_AL_WIDTH{1'b1}}<<5;
+       `AXI_ASIZE_512  : align_mask = {DS_ADDR_AL_WIDTH{1'b1}}<<6;
+       default         : align_mask = {DS_ADDR_AL_WIDTH{1'b0}};
+    endcase
+  end
+ assign offset_address = (wrap_split_reg) ? araddr_aligned[DS_ADDR_AL_WIDTH-1:0] :
+                            araddr_s[DS_ADDR_AL_WIDTH-1:0];
+ assign  half_carry =  bytes_to_transfer[0] & offset_address[0];
+ assign  half_carry_double = half_carry & bytes_to_transfer[1];
+ assign  word_carry =  {1'b0, bytes_to_transfer[1:0]} + {1'b0, offset_address[1:0]};
+ assign  word_carry_double = word_carry[2] & bytes_to_transfer[2];
+generate
+ if(DS_DATA_WIDTH>=64) begin: dword_carry_64
+ 	assign  dword_carry =  {1'b0, bytes_to_transfer[2:0]} + {1'b0, offset_address[2:0]};
+ 	assign  dword_carry_double = dword_carry[3] & bytes_to_transfer[3];
+ end
+ else begin: dword_carry_useless
+	assign	dword_carry=4'h0;
+	assign	dword_carry_double=1'h0;
+ end
+endgenerate
+generate
+ if(DS_DATA_WIDTH>=128) begin: qword_carry_128
+ 	assign  qword_carry =  {1'b0, bytes_to_transfer[3:0]} + {1'b0, offset_address[3:0]};
+ 	assign  qword_carry_double = qword_carry[4] & bytes_to_transfer[4];
+ end
+ else begin: qword_carry_useless
+	assign	qword_carry=5'h0;
+	assign	qword_carry_double=1'h0;
+ end
+endgenerate
+generate
+ if(DS_DATA_WIDTH>=256) begin: oword_carry_256
+ 	assign  oword_carry =  {1'b0, bytes_to_transfer[4:0]} + {1'b0, offset_address[4:0]};
+ 	assign  oword_carry_double = oword_carry[5] & bytes_to_transfer[5];
+ end
+ else begin: oword_carry_useless
+	assign	oword_carry=6'h0;
+	assign	oword_carry_double=1'h0;
+ end
+endgenerate
+ assign  bytes_lt_one_byte   = ~|bytes_to_transfer;
+ assign  bytes_lt_two_byte   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1];
+ assign  bytes_lt_two_half   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1] & ~half_carry;
+ assign  bytes_lt_four_half  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~half_carry_double;
+ assign  bytes_lt_four_word  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~word_carry[2];
+ assign  bytes_lt_eight_word = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~word_carry_double;
+ assign  bytes_lt_eight_dword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~dword_carry[3];
+ assign  bytes_lt_sixt_dword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~dword_carry_double;
+ assign  bytes_lt_sixt_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~qword_carry[4];
+ assign  bytes_lt_ttwo_qword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~qword_carry_double;
+ assign  bytes_lt_ttwo_oword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~oword_carry[5];
+ assign  bytes_lt_sfour_oword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:6] & ~oword_carry_double;
+ always @(*)
+  begin : size_lookup
+        incrsize = DS_ADDR_AL_WIDTH;
+        if ((bytes_lt_one_byte || (bytes_lt_two_byte && (&offset_address[DS_ADDR_AL_WIDTH-1:0])))&&(DS_DATA_WIDTH>=16)) begin
+            incrsize = `AXI_ASIZE_8;
+        end else if ((bytes_lt_two_half || (bytes_lt_four_half && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=2) ? 1:0)])))&&(DS_DATA_WIDTH>=32)) begin
+            incrsize = `AXI_ASIZE_16;
+        end else if ((bytes_lt_four_word || (bytes_lt_eight_word && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=3) ? 2:0)])))&&(DS_DATA_WIDTH>=64)) begin
+            incrsize = `AXI_ASIZE_32;
+        end else if ((bytes_lt_eight_dword || (bytes_lt_sixt_dword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=4) ? 3:0)])))&&(DS_DATA_WIDTH>=128)) begin
+            incrsize = `AXI_ASIZE_64;
+        end else if ((bytes_lt_sixt_qword || (bytes_lt_ttwo_qword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=5) ? 4:0)])))&&(DS_DATA_WIDTH>=256)) begin
+            incrsize = `AXI_ASIZE_128;
+        end else if ((bytes_lt_ttwo_oword || (bytes_lt_sfour_oword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=6) ? 5:0)])))&&(DS_DATA_WIDTH>=512)) begin
+            incrsize = `AXI_ASIZE_256;
+        end
+  end
+  assign final_address = {1'b0, offset_address} + {1'b0, bytes_to_transfer_large[DS_ADDR_AL_WIDTH-1:0]};
+  assign overflow =  final_address[DS_ADDR_AL_WIDTH];
+  assign bytes_to_transfer_large = {8'h0, bytes_to_transfer};
+  assign incrlenmaxsize =  bytes_to_transfer_large[DS_ADDR_AL_WIDTH+:((DS_AXI3==1) ? 4 : 8)] + 4'b1;
+  assign incrlen = (overflow) ? incrlenmaxsize : ((DS_AXI3==1) ? {4'b0000,bytes_to_transfer_large[DS_ADDR_AL_WIDTH+:4]} : bytes_to_transfer_large[DS_ADDR_AL_WIDTH+:8]);
+
+endmodule
+`include "Axi_undefs.v"
diff --git a/axi2sramcrs/rtl/upsizer/upsize_rd_cam_slice.v b/axi2sramcrs/rtl/upsizer/upsize_rd_cam_slice.v
new file mode 100644
index 0000000..4656541
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_rd_cam_slice.v
@@ -0,0 +1,263 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_rd_cam_slice
+  (
+    aresetn,
+    aclk,
+    match_id,
+    store,
+    push_slice,
+    pop_slice,
+    update,
+    match_pointer,
+    hazard_in,
+    hazard_pointer,
+    archannel_data,
+    rlast_in,
+    hazard,
+    match,
+    addr_out,
+    last_addr_match,
+    valid,
+    beat_complete,
+    rdata_byte_mask
+  );
+`include "Axi.v"
+parameter       ARID_WIDTH=4;
+parameter       US_DATA_WIDTH=128;
+parameter       DS_DATA_WIDTH=256;
+parameter       RD_ISS=8;
+parameter   	ARCHAN_WIDTH=20;
+localparam      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam      US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam      DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam      US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam   	PTR_WIDTH=$clog2(RD_ISS+1);
+localparam	UPSIZE_WIDTH=DS_ADDR_AL_WIDTH-US_ADDR_AL_WIDTH;
+  input                aresetn;
+  input                aclk;
+  input [ARID_WIDTH-1:0]          match_id;
+  input                store;
+  input                push_slice;
+  input                pop_slice;
+  input                update;
+  input   [PTR_WIDTH-1:0]             hazard_pointer;
+  input   [PTR_WIDTH-1:0]             match_pointer;
+  input                hazard_in;
+  input [ARCHAN_WIDTH-1:0]         archannel_data;
+  input                rlast_in;
+  wire                 wrap_fits;
+  output               hazard;
+  output               valid;
+  output               match;
+  output  [UPSIZE_WIDTH-1:0]              addr_out;
+  output               last_addr_match;
+  output               beat_complete;
+  output [US_WSTRB_WIDTH-1:0]        rdata_byte_mask;
+  reg [ARID_WIDTH-1:0]            id_reg;
+  reg [PTR_WIDTH-1:0]                 pointer_reg;
+  reg                  hazard_reg;
+  reg                  valid_reg;
+  reg                  last_reg;
+  reg                          n_response_reg;
+  reg                  wrap_fits_reg;
+  reg [DS_ADDR_AL_WIDTH-1:0]            addr_reg;
+  reg [DS_ADDR_AL_WIDTH-1:0]            addr_mask_reg;
+  reg [DS_ADDR_AL_WIDTH-1:0]            addr_mask_end_reg;
+  reg [2:0]            size_reg;
+  reg                  bypass_reg;
+  reg [DS_ADDR_AL_WIDTH-1:0]            addr_next;
+  reg [7:0]            size_incr;
+  wire [ARID_WIDTH-1:0]           next_id_reg;
+  wire [PTR_WIDTH-1:0]            next_pointer_reg;
+  wire                 next_hazard_reg;
+  wire                 next_valid_reg;
+  wire                 next_last_reg;
+  wire                         next_n_response_reg;
+  wire [DS_ADDR_AL_WIDTH-1:0]           next_addr_reg;
+  wire                 allowed_to_match;
+  wire                 rid_match;
+  wire                 arid_match;
+  wire                 pointer_match;
+  wire                 match_i;
+  wire                 last_reg_wr_en;
+  wire                 hazard_reg_wr_en;
+  wire                 valid_reg_wr_en;
+  wire                 n_response_reg_wr_en;
+  wire                 default_reg_wr_en;
+  wire                 addr_reg_wr;
+  wire [2:0]           size_in;
+  wire                         n_response;
+  wire                 bypass_in;
+  wire [DS_ADDR_AL_WIDTH-1:0]           addr;
+  wire [DS_ADDR_AL_WIDTH-1:0]           addr_mask;
+  wire [DS_ADDR_AL_WIDTH-1:0]           addr_mask_end;
+  wire [ARID_WIDTH-1:0]           hazard_id;
+  wire                 boundary_cross;
+  wire [DS_ADDR_AL_WIDTH:0]           addr_incr;
+  wire                 can_complete;
+  wire                 last_addr_match_int;
+  wire                 beat_complete_i;
+assign	{
+	wrap_fits,
+	n_response,
+	hazard_id,
+	addr_mask_end,
+	addr_mask,
+	addr,
+	bypass_in,
+	size_in
+	} = archannel_data;
+ assign rid_match = (match_id == id_reg);
+ assign arid_match = (hazard_id == id_reg);
+ assign allowed_to_match = valid_reg && ~hazard_reg;
+ assign match_i = allowed_to_match && rid_match;
+ assign match = match_i;
+ assign can_complete = match_i && ~|n_response_reg;
+ reg  [63:0] size_mask_r;
+ wire  [US_WSTRB_WIDTH-1:0] size_mask,byte_mask,byte_mask_r;
+ wire [US_WSTRB_WIDTH-1:0] rdata_byte_mask ;
+ assign rdata_byte_mask = byte_mask & {US_WSTRB_WIDTH{match_i}};
+ always @(size_reg)
+  begin : size_mask_p
+    case (size_reg)
+       3'b000    : size_mask_r = {64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000001};
+       3'b001    : size_mask_r = {64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000011};
+       3'b010    : size_mask_r = {64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00001111};
+       3'b011    : size_mask_r = {64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_11111111};
+       3'b100    : size_mask_r = {64'b00000000_00000000_00000000_00000000_00000000_00000000_11111111_11111111};
+       3'b101    : size_mask_r = {64'b00000000_00000000_00000000_00000000_11111111_11111111_11111111_11111111};
+       3'b110    : size_mask_r = {64'b00000000_00000000_11111111_11111111_11111111_11111111_11111111_11111111};
+       3'b111    : size_mask_r = {64'b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111};
+       default   : size_mask_r = {64'bx};
+    endcase
+  end
+assign size_mask = size_mask_r[US_WSTRB_WIDTH-1:0] ;
+assign byte_mask_r = (size_mask << addr_reg[US_ADDR_AL_WIDTH-1:0]) ;//& { {(US_WSTRB_WIDTH-addr_reg){1'b1}}, {addr_reg{1'b0}}};
+assign byte_mask = byte_mask_r[US_WSTRB_WIDTH-1:0] ;
+ assign hazard = arid_match && last_reg && valid_reg && ~(can_complete && pop_slice);
+ assign default_reg_wr_en = (store && push_slice);
+ assign next_id_reg = hazard_id;
+ always @(posedge aclk)
+   begin : id_seq
+      if (default_reg_wr_en)
+         id_reg <= next_id_reg;
+   end
+ assign next_pointer_reg = hazard_pointer;
+  always @(posedge aclk)
+   begin : pointer_seq
+      if (default_reg_wr_en)
+         pointer_reg <= next_pointer_reg;
+   end
+ assign next_last_reg = (store) ? 1'b1 :
+                        ((arid_match) ? 1'b0 : last_reg);
+ assign last_reg_wr_en = (default_reg_wr_en || (arid_match && valid_reg && push_slice));
+  always @(posedge aclk)
+   begin : last_seq
+      if (last_reg_wr_en)
+         last_reg <= next_last_reg;
+   end
+ assign pointer_match = (pointer_reg == match_pointer);
+ assign next_hazard_reg = (store) ? hazard_in : 1'b0;
+ assign hazard_reg_wr_en = (default_reg_wr_en || (pointer_match && valid_reg && pop_slice && rid_match));
+  always @(posedge aclk)
+   begin : hazard_seq
+      if (hazard_reg_wr_en)
+         hazard_reg <= next_hazard_reg;
+   end
+ assign next_valid_reg = (store && push_slice) || (n_response_reg);
+ assign valid_reg_wr_en = default_reg_wr_en || (match_i && pop_slice);
+   always @(posedge aclk or negedge aresetn)
+   begin : valid_seq
+      if (!aresetn)
+         valid_reg <= 1'b0;
+      else if (valid_reg_wr_en)
+         valid_reg <= next_valid_reg;
+   end
+  assign valid = valid_reg;
+  assign next_n_response_reg = (store && push_slice) ? n_response : (n_response_reg - 1'b1);
+  assign n_response_reg_wr_en =  (rid_match && ~hazard_reg && rlast_in && update && beat_complete_i) || default_reg_wr_en;
+  always @(posedge aclk or negedge aresetn)
+   begin : two_resp_seq
+     if (!aresetn)
+         n_response_reg <= {1{1'b0}};
+     else if (n_response_reg_wr_en)
+         n_response_reg <= next_n_response_reg;
+   end
+  assign boundary_cross = |((addr_incr ^ {1'b0, addr_reg}) & {1'b1, ~addr_mask_reg}) & ~wrap_fits_reg;
+  always @(*)
+  begin : size_incr_p
+    case (size_reg)
+       `AXI_ASIZE_8    : size_incr = {7'b0, 1'b1};
+       `AXI_ASIZE_16   : size_incr = {6'b0, 2'b10};
+       `AXI_ASIZE_32   : size_incr = {5'b0, 3'b100};
+       `AXI_ASIZE_64   : size_incr = {4'b0, 4'b1000};
+       `AXI_ASIZE_128  : size_incr = {3'b0, 5'b10000};
+       `AXI_ASIZE_256  : size_incr = {2'b0, 6'b100000};
+       `AXI_ASIZE_512  : size_incr = {1'b0, 7'b1000000};
+       default         : size_incr = {8'bx};
+    endcase
+  end
+  assign addr_incr = {1'b0, addr_reg} + size_incr[DS_ADDR_AL_WIDTH:0];
+  always @(*)
+  begin : addr_reg_nxt_p
+     integer index_i;
+     for (index_i = 0; index_i < DS_ADDR_AL_WIDTH ; index_i = index_i + 1)
+     begin
+       if ( addr_mask_reg[index_i] == 1'b1)
+         addr_next[index_i] = addr_incr[index_i];
+       else
+         addr_next[index_i] = addr_reg[index_i];
+     end
+   end
+  assign addr_reg_wr = default_reg_wr_en || (match_i && update);
+  assign next_addr_reg = (store && push_slice) ? addr : addr_next;
+  always @(posedge aclk or negedge aresetn)
+   begin : addr_seq
+     if (!aresetn)
+         addr_reg <= {DS_ADDR_AL_WIDTH{1'b0}};
+     else if (addr_reg_wr)
+         addr_reg <= next_addr_reg;
+   end
+  assign addr_out = addr_reg[DS_ADDR_AL_WIDTH-1:US_ADDR_AL_WIDTH] & {UPSIZE_WIDTH{match_i}};
+  assign last_addr_match_int = (((addr_reg & addr_mask_reg) == (addr_mask_end_reg & addr_mask_reg)) || bypass_reg) && ~|n_response_reg;
+  assign last_addr_match = last_addr_match_int;
+  assign beat_complete_i = boundary_cross || bypass_reg;
+  assign beat_complete   = beat_complete_i;
+  always @(posedge aclk or negedge aresetn)
+   begin : ardata_seq
+     if (!aresetn) begin
+         addr_mask_reg <= {DS_ADDR_AL_WIDTH{1'b0}};
+         addr_mask_end_reg <= {DS_ADDR_AL_WIDTH{1'b0}};
+         size_reg  <= 3'b0;
+         bypass_reg <= 1'b0;
+         wrap_fits_reg <= 1'b0;
+     end else if (default_reg_wr_en) begin
+         addr_mask_reg <= addr_mask;
+         addr_mask_end_reg  <= addr_mask_end;
+         size_reg <= size_in;
+         bypass_reg <= bypass_in;
+         wrap_fits_reg <= wrap_fits;
+     end
+   end
+endmodule
+`include "Axi_undefs.v"
diff --git a/axi2sramcrs/rtl/upsizer/upsize_rd_chan.v b/axi2sramcrs/rtl/upsizer/upsize_rd_chan.v
new file mode 100644
index 0000000..debc58c
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_rd_chan.v
@@ -0,0 +1,280 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_rd_chan
+  (
+   archannel_ready, rready_m, rvalid_s, rdata_s, rid_s, rresp_s,
+   rlast_s, ruser_s,
+   aclk, aresetn, archannel_valid, archannel_data, rvalid_m, rdata_m,
+   rid_m, rresp_m, rlast_m, ruser_m, rready_s
+   );
+parameter       ARID_WIDTH=4;
+parameter       AWID_WIDTH=4;
+parameter       ADDR_WIDTH=32;
+parameter       US_DATA_WIDTH=128;
+parameter       DS_DATA_WIDTH=256;
+parameter       USER_WIDTH=4;
+parameter       RD_ISS=8;
+localparam      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam      US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam      DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam      US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam	ARFMT_WIDTH=1+1+ARID_WIDTH+DS_ADDR_AL_WIDTH*3+1+3;
+localparam      AWFMT_WIDTH=1+US_ADDR_AL_WIDTH*2+3+1;
+localparam      US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam      US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam      US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam      PTR_WIDTH=$clog2(RD_ISS+1);
+localparam	UPSIZE_WIDTH=DS_ADDR_AL_WIDTH-US_ADDR_AL_WIDTH;
+localparam	DATA_RATIO=(DS_DATA_WIDTH/US_DATA_WIDTH);
+  input                     aclk;
+  input                     aresetn;
+  input                     archannel_valid;
+  output                    archannel_ready;
+  input [ARFMT_WIDTH-1:0]              archannel_data;
+  input                     rvalid_m;
+  output                    rready_m;
+  input [DS_DATA_WIDTH-1:0]             rdata_m;
+  input [ARID_WIDTH-1:0]               rid_m;
+  input [1:0]               rresp_m;
+  input                     rlast_m;
+  input   [USER_WIDTH-1:0]      ruser_m;
+  input                     rready_s;
+  output                    rvalid_s;
+  output [US_DATA_WIDTH-1:0]            rdata_s;
+  output [ARID_WIDTH-1:0]              rid_s;
+  output [1:0]              rresp_s;
+  output                    rlast_s;
+  output  [USER_WIDTH-1:0]      ruser_s;
+   wire                                                archannel_ready_i;
+   wire   [RD_ISS-1:0]                  match_bus;
+   wire   [RD_ISS-1:0]                  hazard_bus;
+   wire   [RD_ISS-1:0]                  valid_bus;
+   wire   [RD_ISS-1:0]                  last_addr_match_bus;
+   wire   [RD_ISS-1:0]                  beat_complete_slice_bus;
+   wire                     hazard;
+   wire                     last_addr_match;
+   wire                     beat_complete_slice;
+   wire                     archannel_hndshk;
+   wire                     rchannel_hndshk;
+   wire                     push_slice;
+   wire                     pop_slice;
+   wire                     update;
+   wire                     beat_complete;
+   wire  [UPSIZE_WIDTH-1:0]                   data_select;
+   reg  [UPSIZE_WIDTH-1:0]                   addr;
+   wire [ARID_WIDTH-1:0]               rid_m;
+   wire [DS_DATA_WIDTH-1:0]             rdata;
+   wire                     rlast_in;
+   wire                     rlast_s_i;
+   wire [1:0]               rresp_s;
+   wire [UPSIZE_WIDTH-1:0]                    addr_out[RD_ISS-1:0];
+   wire [US_WSTRB_WIDTH-1:0]                  rdata_byte_mask[RD_ISS-1:0];
+   wire [RD_ISS-1:0]    const_onehot[RD_ISS-1:0];
+   wire   [RD_ISS-1:0]                valid_bus_zero_lsb;
+   wire [PTR_WIDTH-1:0] hazard_bus_one_pos[RD_ISS-1:0];
+   wire [PTR_WIDTH-1:0] match_bus_one_pos[RD_ISS-1:0];
+   reg  [US_DATA_WIDTH-1:0]             rdata_beat_mask;
+   reg [US_DATA_WIDTH-1:0]               rdata_s_demux;
+   reg [PTR_WIDTH-1:0]                     hazard_pointer;
+   reg [PTR_WIDTH-1:0]                     match_pointer;
+   reg [RD_ISS-1:0]                     store;
+   assign rid_s = rid_m;
+   assign rlast_in = rlast_m;
+   assign rresp_s = rresp_m;
+   assign ruser_s = ruser_m;
+   assign rdata = rdata_m;
+   assign hazard = |hazard_bus;
+   assign last_addr_match = |(last_addr_match_bus & match_bus);
+   assign beat_complete_slice = |(beat_complete_slice_bus & match_bus);
+always @(*)
+begin:for_addr
+  integer i,j;
+  addr = {UPSIZE_WIDTH{1'h0}};
+  for(i=0;i<UPSIZE_WIDTH;i=i+1)
+    begin: for_addr_i
+      for(j=0;j<RD_ISS;j=j+1)
+        begin: for_addr_j
+          addr[i] = addr[i]|addr_out[j][i];
+        end
+    end
+end
+reg [US_WSTRB_WIDTH-1:0]  rdata_byte_mask_i;
+always @(*)
+begin:for_rdata_beat
+  integer i,j;
+  rdata_beat_mask = {US_DATA_WIDTH{1'b0}};
+  for(i=0;i<US_WSTRB_WIDTH;i=i+1)
+    for(j=0;j<8;j=j+1)
+      rdata_beat_mask[i*8+j] = rdata_byte_mask_i[i];
+end
+always @(*)
+begin:for_rdata_byte
+  integer i,j;
+  rdata_byte_mask_i = {US_WSTRB_WIDTH{1'b0}};
+  for(i=0;i<US_WSTRB_WIDTH;i=i+1)
+    for(j=0;j<RD_ISS;j=j+1)
+      begin
+        rdata_byte_mask_i[i] = rdata_byte_mask_i[i] | rdata_byte_mask[j][i] ;
+      end
+end
+   assign data_select = addr;
+/*
+always@(*)
+begin:rdata_s_demux_a
+ integer i;
+  for(i=0;i<DATA_RATIO;i=i+1)
+    begin
+      if(data_select == i)
+        begin
+          rdata_s_demux = rdata[US_DATA_WIDTH*i+:US_DATA_WIDTH];//[(US_DATA_WIDTH*(i+1)-1):US_DATA_WIDTH*i];
+        end
+    end
+end
+*/
+generate
+  if(DATA_RATIO==2)
+    begin:demux_D2
+      always@(*)
+        begin
+          case(data_select)
+            0:rdata_s_demux=rdata[US_DATA_WIDTH-1:0];
+            1:rdata_s_demux=rdata[US_DATA_WIDTH*2-1:US_DATA_WIDTH];
+            default:rdata_s_demux= {US_DATA_WIDTH{1'b0}};
+          endcase
+        end
+    end
+  else if(DATA_RATIO==4)
+    begin:demux_D4
+      always@(*)
+        begin
+          case(data_select)
+            0:rdata_s_demux=rdata[US_DATA_WIDTH-1:0];
+            1:rdata_s_demux=rdata[US_DATA_WIDTH*2-1:US_DATA_WIDTH];
+            2:rdata_s_demux=rdata[US_DATA_WIDTH*3-1:US_DATA_WIDTH*2];
+            3:rdata_s_demux=rdata[US_DATA_WIDTH*4-1:US_DATA_WIDTH*3];
+            default:rdata_s_demux={US_DATA_WIDTH{1'b0}};
+          endcase
+        end
+    end
+  else if(DATA_RATIO==8)
+    begin:demux_D8
+      always@(*)
+        begin
+          case(data_select)
+            0:rdata_s_demux=rdata[US_DATA_WIDTH-1:0];
+            1:rdata_s_demux=rdata[US_DATA_WIDTH*2-1:US_DATA_WIDTH];
+            2:rdata_s_demux=rdata[US_DATA_WIDTH*3-1:US_DATA_WIDTH*2];
+            3:rdata_s_demux=rdata[US_DATA_WIDTH*4-1:US_DATA_WIDTH*3];
+            4:rdata_s_demux=rdata[US_DATA_WIDTH*5-1:US_DATA_WIDTH*4];
+            5:rdata_s_demux=rdata[US_DATA_WIDTH*6-1:US_DATA_WIDTH*5];
+            6:rdata_s_demux=rdata[US_DATA_WIDTH*7-1:US_DATA_WIDTH*6];
+            7:rdata_s_demux=rdata[US_DATA_WIDTH*8-1:US_DATA_WIDTH*7];
+            default:rdata_s_demux={US_DATA_WIDTH{1'b0}};
+          endcase
+        end
+    end
+endgenerate
+assign rdata_s = rdata_s_demux & rdata_beat_mask;
+   assign rlast_s_i = last_addr_match  && rlast_in;
+   assign rlast_s   = rlast_s_i;
+   assign archannel_ready_i = ~&valid_bus;
+   assign archannel_ready   = archannel_ready_i;
+   assign archannel_hndshk = archannel_ready_i && archannel_valid;
+   assign push_slice = archannel_hndshk;
+genvar i;
+generate
+ for(i=0;i<RD_ISS;i=i+1) begin:const_onehot_g
+        if(RD_ISS==1) begin: rd_iss_1
+                assign  const_onehot[i]=(1'h1<<i);
+        end
+        else begin: rd_iss_n
+                assign  const_onehot[i]=({{(RD_ISS-1){1'h0}},1'h1}<<i);
+        end
+        assign  valid_bus_zero_lsb[i]=((~valid_bus[i:0])==const_onehot[i][i:0]);
+        assign  hazard_bus_one_pos[i]={PTR_WIDTH{hazard_bus[i]}}&i;
+        assign  match_bus_one_pos[i]={PTR_WIDTH{match_bus[i]}}&i;
+   always @(*)
+     begin : store_decode
+        if (&valid_bus)
+           store[i] = match_bus[i];
+        else
+            store[i] = valid_bus_zero_lsb[i];
+      end
+ end
+endgenerate
+   always @(*)
+     begin : hazard_num_distibution
+        integer a;
+        hazard_pointer={PTR_WIDTH{1'h0}};
+        for(a=0;a<RD_ISS;a=a+1) begin
+                hazard_pointer=hazard_pointer | hazard_bus_one_pos[a];
+        end
+     end
+   always @(*)
+     begin : match_num_distibution
+        integer a;
+        match_pointer={PTR_WIDTH{1'h0}};
+        for(a=0;a<RD_ISS;a=a+1) begin
+                match_pointer=match_pointer | match_bus_one_pos[a];
+        end
+     end
+   assign beat_complete = (rlast_s_i | beat_complete_slice) && update;
+   assign rready_m = beat_complete && rvalid_m;
+   assign rvalid_s = rvalid_m;
+   assign rchannel_hndshk = rvalid_s && rready_s;
+   assign update = rchannel_hndshk;
+   assign pop_slice = update && rlast_s_i;
+generate
+for(i=0;i<RD_ISS;i=i+1) begin: rd_cam_slice_inst
+     upsize_rd_cam_slice #(
+	.ARID_WIDTH(ARID_WIDTH),
+    .US_DATA_WIDTH(US_DATA_WIDTH),
+	.DS_DATA_WIDTH(DS_DATA_WIDTH),
+	.RD_ISS(RD_ISS),
+	.ARCHAN_WIDTH(ARFMT_WIDTH)
+	) u_upsize_rd_cam_slice
+     (
+        .aresetn              (aresetn),
+        .aclk                 (aclk),
+        .match_id              (rid_m),
+        .store                (store[i]),
+        .push_slice           (push_slice),
+        .pop_slice            (pop_slice),
+        .update               (update),
+        .match_pointer        (match_pointer),
+        .archannel_data       (archannel_data),
+        .rlast_in             (rlast_in),
+        .hazard_in            (hazard),
+        .hazard_pointer       (hazard_pointer),
+        .hazard               (hazard_bus[i]),
+        .match                (match_bus[i]),
+        .valid                (valid_bus[i]),
+        .addr_out             (addr_out[i]),
+        .last_addr_match      (last_addr_match_bus[i]),
+        .beat_complete        (beat_complete_slice_bus[i]),
+	.rdata_byte_mask      (rdata_byte_mask[i])
+     );
+end
+endgenerate
+endmodule
diff --git a/axi2sramcrs/rtl/upsizer/upsize_resp_cam_slice.v b/axi2sramcrs/rtl/upsizer/upsize_resp_cam_slice.v
new file mode 100644
index 0000000..0f0a899
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_resp_cam_slice.v
@@ -0,0 +1,145 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_resp_cam_slice
+  (
+    aresetn,
+    aclk,
+    matchid,
+    hazardid,
+    store,
+    push_slice,
+    pop_slice,
+    update,
+    match_pointer,
+    hazard_in,
+    hazard_pointer,
+    n_response,
+    bresp_in,
+    hazard,
+    match,
+    valid,
+    bresp_out
+  );
+parameter       ID_WIDTH=4;
+parameter       USER_WIDTH=4;
+parameter       PTR_WIDTH=8;
+  input                 aresetn;
+  input                 aclk;
+  input [ID_WIDTH-1:0]           matchid;
+  input [ID_WIDTH-1:0]           hazardid;
+  input                 store;
+  input                 push_slice;
+  input                 pop_slice;
+  input                 update;
+  input  [PTR_WIDTH-1:0]               hazard_pointer;
+  input  [PTR_WIDTH-1:0]               match_pointer;
+  input                 hazard_in;
+  input            n_response;
+  input [1:0]           bresp_in;
+  output                hazard;
+  output                match;
+  output                valid;
+  output [1:0]          bresp_out;
+  reg [ID_WIDTH-1:0]             id_reg;
+  reg  [PTR_WIDTH-1:0]                 pointer_reg;
+  reg                   hazard_reg;
+  reg                   valid_reg;
+  reg                   last_reg;
+  reg              n_response_reg;
+  reg [1:0]             bresp_reg;
+  wire [ID_WIDTH-1:0]            next_id_reg;
+  wire [PTR_WIDTH-1:0]                 next_pointer_reg;
+  wire                  next_hazard_reg;
+  wire                  next_valid_reg;
+  wire                  next_last_reg;
+  wire             next_n_response_reg;
+  wire [1:0]            next_bresp_reg;
+  wire                  allowed_to_match;
+  wire                  bid_match;
+  wire                  awid_match;
+  wire                  match_i;
+  wire                  last_reg_wr_en;
+  wire                  hazard_reg_wr_en;
+  wire                  valid_reg_wr_en;
+  wire                  n_response_reg_wr_en;
+  wire                  default_reg_wr_en;
+  wire                  pointer_match;
+ assign bid_match = (matchid == id_reg);
+ assign awid_match = (hazardid == id_reg);
+ assign allowed_to_match = valid_reg && ~hazard_reg && ~n_response_reg;
+ assign match_i = allowed_to_match && bid_match;
+ assign match   = match_i;
+ assign hazard = awid_match && last_reg && valid_reg && ~(match_i && pop_slice);
+ assign default_reg_wr_en = (store && push_slice);
+ assign next_id_reg = hazardid;
+ always @(posedge aclk)
+   begin : id_seq
+      if (default_reg_wr_en)
+         id_reg <= next_id_reg;
+   end
+ assign next_pointer_reg = hazard_pointer;
+  always @(posedge aclk)
+   begin : pointer_seq
+      if (default_reg_wr_en)
+         pointer_reg <= next_pointer_reg;
+   end
+ assign next_last_reg = (store && push_slice) ? 1'b1 :
+                        ((awid_match) ? 1'b0 : last_reg);
+ assign last_reg_wr_en = (default_reg_wr_en || (awid_match && valid_reg && push_slice));
+  always @(posedge aclk)
+   begin : last_seq
+      if (last_reg_wr_en)
+         last_reg <= next_last_reg;
+   end
+ assign pointer_match = (pointer_reg == match_pointer);
+ assign next_hazard_reg = (store && push_slice) ? hazard_in : 1'b0;
+ assign hazard_reg_wr_en = (default_reg_wr_en || (pointer_match && valid_reg && pop_slice));
+  always @(posedge aclk)
+   begin : hazard_seq
+      if (hazard_reg_wr_en)
+         hazard_reg <= next_hazard_reg;
+   end
+ assign next_valid_reg = (store && push_slice) || (n_response_reg);
+ assign valid_reg_wr_en = default_reg_wr_en || (match_i && pop_slice);
+   always @(posedge aclk or negedge aresetn)
+   begin : valid_seq
+      if (!aresetn)
+         valid_reg <= 1'b0;
+      else if (valid_reg_wr_en)
+         valid_reg <= next_valid_reg;
+   end
+  assign valid = valid_reg;
+  assign next_n_response_reg = (store && push_slice) ? n_response : 1'b0;
+  assign next_bresp_reg = (store && push_slice) ? 2'b0 : (bresp_in | bresp_reg);
+  assign n_response_reg_wr_en = (bid_match && ~hazard_reg && update && (n_response_reg)) || (store && push_slice);
+  always @(posedge aclk or negedge aresetn)
+   begin : two_resp_seq
+     if (!aresetn) begin
+         n_response_reg <= 1'b0;
+         bresp_reg <= 2'b0;
+     end else if (n_response_reg_wr_en) begin
+         n_response_reg <= next_n_response_reg;
+         bresp_reg <= next_bresp_reg;
+     end
+   end
+   assign bresp_out = {2{match_i}} & bresp_reg;
+endmodule
diff --git a/axi2sramcrs/rtl/upsizer/upsize_slave_domain.v b/axi2sramcrs/rtl/upsizer/upsize_slave_domain.v
new file mode 100644
index 0000000..b9a9799
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_slave_domain.v
@@ -0,0 +1,754 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+`include "Axi.v"
+module upsize_slave_domain
+  (
+   awready_s, wready_s, bid_s, bresp_s, bvalid_s, buser_s, arready_s,
+   rid_s, rdata_s, rresp_s, rlast_s, rvalid_s, ruser_s, aw_data,
+   aw_valid, b_ready, ar_data, ar_valid, r_ready, w_data, w_valid,
+   awid_s, awaddr_s, awlen_s, awsize_s, awburst_s, awlock_s,
+   awcache_s, awprot_s, awvalid_s, awvalid_vect_s, awuser_s,
+   awregion_s, wdata_s, wstrb_s, wlast_s, wvalid_s, wid_s, wuser_s,
+   bready_s, arid_s, araddr_s, arlen_s, arsize_s, arburst_s, arlock_s,
+   arcache_s, arprot_s, arvalid_s, arvalid_vect_s, aruser_s,
+   arregion_s, rready_s, awqv_s, arqv_s, aw_ready, b_data, b_valid,
+   ar_ready, r_data, r_valid, w_ready, aclk, aresetn
+   );
+parameter       ARID_WIDTH=4;
+parameter       AWID_WIDTH=4;
+parameter       ADDR_WIDTH=32;
+parameter       US_DATA_WIDTH=128;
+parameter       DS_DATA_WIDTH=256;
+parameter       USER_WIDTH=4;
+parameter       RD_ISS=8;
+parameter       WR_ISS=8;
+parameter	DS_AXI3=1'h1;
+localparam      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam      US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam      DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam      US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam	ARFMT_WIDTH=1+1+ARID_WIDTH+DS_ADDR_AL_WIDTH*3+1+3;
+localparam	AWFMT_WIDTH=AWID_WIDTH+1+4+1+DS_ADDR_AL_WIDTH*2+3+1;
+localparam      US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam      US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam      US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam      AW_IDB_WIDTH=US_AW_WIDTH;
+localparam      AR_IDB_WIDTH=US_AR_WIDTH;
+localparam      W_IDB_WIDTH=AWID_WIDTH+USER_WIDTH+DS_DATA_WIDTH+DS_WSTRB_WIDTH+1;
+localparam	R_IDB_WIDTH=USER_WIDTH+ARID_WIDTH+DS_DATA_WIDTH+2+1;
+localparam      B_IDB_WIDTH=USER_WIDTH+2+AWID_WIDTH;
+localparam	DATA_RATIO=(DS_DATA_WIDTH/US_DATA_WIDTH);
+localparam	BCHAN_WIDTH=AWID_WIDTH+1;
+  input   [AWID_WIDTH-1:0]      awid_s;
+  input   [ADDR_WIDTH-1:0]      awaddr_s;
+  input   [7:0]       awlen_s;
+  input   [2:0]       awsize_s;
+  input   [1:0]       awburst_s;
+  input   [1:0]       awlock_s;
+  input   [3:0]       awcache_s;
+  input   [2:0]       awprot_s;
+  input               awvalid_s;
+  input               awvalid_vect_s;
+  output              awready_s;
+  input  [USER_WIDTH-1:0]       awuser_s;
+  input  [3:0]                  awregion_s;
+  input   [US_DATA_WIDTH-1:0]     wdata_s;
+  input   [US_WSTRB_WIDTH-1:0]      wstrb_s;
+  input               wlast_s;
+  input               wvalid_s;
+  output              wready_s;
+  input  [AWID_WIDTH-1:0]       wid_s;
+  input  [USER_WIDTH-1:0]       wuser_s;
+  output  [AWID_WIDTH-1:0]       bid_s;
+  output  [1:0]       bresp_s;
+  output              bvalid_s;
+  input               bready_s;
+  output  [USER_WIDTH-1:0]      buser_s;
+  input   [ARID_WIDTH-1:0]       arid_s;
+  input   [ADDR_WIDTH-1:0]      araddr_s;
+  input   [7:0]       arlen_s;
+  input   [2:0]       arsize_s;
+  input   [1:0]       arburst_s;
+  input   [1:0]            arlock_s;
+  input   [3:0]       arcache_s;
+  input   [2:0]       arprot_s;
+  input               arvalid_s;
+  input               arvalid_vect_s;
+  output              arready_s;
+  input  [USER_WIDTH-1:0]       aruser_s;
+  input  [3:0]                  arregion_s;
+  output  [ARID_WIDTH-1:0]       rid_s;
+  output  [US_DATA_WIDTH-1:0]     rdata_s;
+  output  [1:0]       rresp_s;
+  output              rlast_s;
+  output              rvalid_s;
+  input               rready_s;
+  output  [USER_WIDTH-1:0]      ruser_s;
+  input   [3:0]       awqv_s;
+  input   [3:0]       arqv_s;
+  output  [AW_IDB_WIDTH-1:0]      aw_data;
+  output              aw_valid;
+  input               aw_ready;
+  input   [B_IDB_WIDTH-1:0]       b_data;
+  input               b_valid;
+  output              b_ready;
+  output  [AR_IDB_WIDTH-1:0]      ar_data;
+  output              ar_valid;
+  input               ar_ready;
+  input   [R_IDB_WIDTH-1:0]     r_data;
+  input               r_valid;
+  output              r_ready;
+  output  [W_IDB_WIDTH-1:0]     w_data;
+  output              w_valid;
+  input               w_ready;
+  input               aclk;
+  input               aresetn;
+  wire [W_IDB_WIDTH-1:0]        w_boundary_src_data;
+  wire [W_IDB_WIDTH-1:0]        w_boundary_dst_data;
+  wire                w_boundary_dst_valid;
+  wire                w_boundary_dst_ready;
+  wire                w_boundary_src_valid;
+  wire                w_boundary_src_ready;
+  wire [US_AW_WIDTH-1:0]        aw_slave_port_src_data;
+  wire [US_AW_WIDTH-1:0]        aw_slave_port_dst_data;
+  wire                aw_slave_port_dst_valid;
+  wire                aw_slave_port_dst_ready;
+  wire                aw_slave_port_src_valid;
+  wire                aw_slave_port_src_ready;
+  wire [US_AR_WIDTH-1:0]        ar_slave_port_src_data;
+  wire [US_AR_WIDTH-1:0]        ar_slave_port_dst_data;
+  wire                ar_slave_port_dst_valid;
+  wire                ar_slave_port_dst_ready;
+  wire                ar_slave_port_src_valid;
+  wire                ar_slave_port_src_ready;
+  wire [US_R_WIDTH-1:0]        r_slave_port_src_data;
+  wire [US_R_WIDTH-1:0]        r_slave_port_dst_data;
+  wire [US_W_WIDTH-1:0]        w_slave_port_src_data;
+  wire [US_W_WIDTH-1:0]        w_slave_port_dst_data;
+  wire [US_B_WIDTH-1:0]         b_slave_port_src_data;
+  wire [US_B_WIDTH-1:0]         b_slave_port_dst_data;
+  wire [BCHAN_WIDTH-1:0]         bdata_data;
+  wire                bdata_valid;
+  wire                bdata_ready;
+  wire [AWFMT_WIDTH-1:0]         awdata_data;
+  wire                awdata_valid;
+  wire                awdata_ready;
+  wire                merge;
+  wire                merge_clear;
+  wire [DATA_RATIO-1:0]          data_select;
+  wire                strb_skid_valid;
+  wire [DS_DATA_WIDTH-1:0]        wdata_merged;
+  wire [DS_WSTRB_WIDTH-1:0]         wstrb_merged;
+  wire [ARFMT_WIDTH-1:0]         arfifo_data;
+  wire                arfifo_valid;
+  wire                arfifo_ready;
+  wire  [US_AW_WIDTH-1:0]        aw_fmt_src_data;
+  wire  [US_AR_WIDTH-1:0]        ar_fmt_src_data;
+  wire  [US_AW_WIDTH-1:0]        aw_fmt_dst_data;
+  wire  [US_AR_WIDTH-1:0]        ar_fmt_dst_data;
+  wire  [USER_WIDTH-1:0]        awuser_bif;
+  wire  [3:0]                   awregion_bif;
+  wire [AWID_WIDTH-1:0]          awid_bif;
+  wire [ADDR_WIDTH-1:0]         awaddr_bif;
+  wire [7:0]          awlen_bif;
+  wire [2:0]          awsize_bif;
+  wire [1:0]          awburst_bif;
+  wire [1:0]          awlock_bif;
+  wire [3:0]          awcache_bif;
+  wire [2:0]          awprot_bif;
+  wire                awvalid_bif;
+  wire                awvalid_vect_bif;
+  wire                awready_bif;
+  wire [3:0]          awqv_bif;
+  wire  [USER_WIDTH-1:0]        aruser_bif;
+  wire  [3:0]                   arregion_bif;
+  wire [ARID_WIDTH-1:0]          arid_bif;
+  wire [ADDR_WIDTH-1:0]         araddr_bif;
+  wire [7:0]          arlen_bif;
+  wire [2:0]          arsize_bif;
+  wire [1:0]          arburst_bif;
+  wire [1:0]          arlock_bif;
+  wire [3:0]          arcache_bif;
+  wire [2:0]          arprot_bif;
+  wire                arvalid_bif;
+  wire                arvalid_vect_bif;
+  wire                arready_bif;
+  wire [3:0]          arqv_bif;
+  wire                lock_seq;
+  wire                ar_lock_hndshk;
+  wire                ar_unlock_hndshk;
+  wire  [USER_WIDTH-1:0] wuser_bif;
+  wire  [AWID_WIDTH-1:0] wid_bif;
+  wire                wvalid_bif;
+  wire                wready_bif;
+  wire [DS_DATA_WIDTH-1:0]        wdata_bif;
+  wire [DS_WSTRB_WIDTH-1:0]         wstrb_bif;
+  wire                wlast_bif;
+  wire  [USER_WIDTH-1:0] buser_bif;
+  wire [AWID_WIDTH-1:0]         bid_bif;
+  wire [1:0]          bresp_bif;
+  wire                bvalid_bif;
+  wire                bready_bif;
+  wire  [USER_WIDTH-1:0] ruser_bif;
+  wire [ARID_WIDTH-1:0]         rid_bif;
+  wire [1:0]          rresp_bif;
+  wire [DS_DATA_WIDTH-1:0]        rdata_bif;
+  wire                rlast_bif;
+  wire                rvalid_bif;
+  wire                rready_bif;
+  wire  [USER_WIDTH-1:0]        aruser_fmt;
+  wire  [3:0]                   arregion_fmt;
+  wire                arvalid_fmt;
+  wire                arvalid_vect_fmt;
+  wire [ADDR_WIDTH-1:0]         araddr_fmt;
+  wire [7:0]          arlen_fmt;
+  wire [2:0]          arsize_fmt;
+  wire [1:0]          arburst_fmt;
+  wire [1:0]          arlock_fmt;
+  wire [3:0]          arcache_fmt;
+  wire [2:0]          arprot_fmt;
+  wire [ARID_WIDTH-1:0]          arid_fmt;
+  wire                arready_fmt;
+  wire [3:0]          arqv_fmt;
+  wire  [USER_WIDTH-1:0]        awuser_fmt;
+  wire  [3:0]                   awregion_fmt;
+  wire                awvalid_fmt;
+  wire                awvalid_vect_fmt;
+  wire [ADDR_WIDTH-1:0]         awaddr_fmt;
+  wire [7:0]          awlen_fmt;
+  wire [2:0]          awsize_fmt;
+  wire [1:0]          awburst_fmt;
+  wire [1:0]          awlock_fmt;
+  wire [3:0]          awcache_fmt;
+  wire [2:0]          awprot_fmt;
+  wire [AWID_WIDTH-1:0]          awid_fmt;
+  wire                awready_fmt;
+  wire [3:0]          awqv_fmt;
+  wire  [USER_WIDTH-1:0]        aruser_axi_r;
+  wire  [3:0]                   arregion_axi_r;
+  wire                arvalid_axi_r;
+  wire                arvalid_vect_axi_r;
+  wire [ADDR_WIDTH-1:0]         araddr_axi_r;
+  wire [7:0]          arlen_axi_r;
+  wire [2:0]          arsize_axi_r;
+  wire [1:0]          arburst_axi_r;
+  wire [1:0]          arlock_axi_r;
+  wire [3:0]          arcache_axi_r;
+  wire [2:0]          arprot_axi_r;
+  wire [ARID_WIDTH-1:0]          arid_axi_r;
+  wire                arready_axi_r;
+  wire [3:0]          arqv_axi_r;
+  wire  [USER_WIDTH-1:0]        awuser_axi_r;
+  wire  [3:0]                   awregion_axi_r;
+  wire                awvalid_axi_r;
+  wire                awvalid_vect_axi_r;
+  wire [ADDR_WIDTH-1:0]         awaddr_axi_r;
+  wire [7:0]          awlen_axi_r;
+  wire [2:0]          awsize_axi_r;
+  wire [1:0]          awburst_axi_r;
+  wire [1:0]          awlock_axi_r;
+  wire [3:0]          awcache_axi_r;
+  wire [2:0]          awprot_axi_r;
+  wire [AWID_WIDTH-1:0]          awid_axi_r;
+  wire                awready_axi_r;
+  wire [3:0]          awqv_axi_r;
+  wire  [USER_WIDTH-1:0] ruser_axi_r;
+  wire                rvalid_axi_r;
+  wire                rlast_axi_r;
+  wire [US_DATA_WIDTH-1:0]        rdata_axi_r;
+  wire [1:0]          rresp_axi_r;
+  wire [ARID_WIDTH-1:0]         rid_axi_r;
+  wire                rready_axi_r;
+  wire  [USER_WIDTH-1:0] wuser_axi_r;
+  wire  [AWID_WIDTH-1:0] wid_axi_r;
+  wire                wvalid_axi_r;
+  wire                wlast_axi_r;
+  wire [US_DATA_WIDTH-1:0]        wdata_axi_r;
+  wire [US_WSTRB_WIDTH-1:0]         wstrb_axi_r;
+  wire                wready_axi_r;
+  wire  [USER_WIDTH-1:0] buser_axi_r;
+  wire                bvalid_axi_r;
+  wire [1:0]          bresp_axi_r;
+  wire [AWID_WIDTH-1:0]         bid_axi_r;
+  wire                bready_axi_r;
+  assign aw_fmt_src_data = {
+          awregion_axi_r,
+          awuser_axi_r,
+          awid_axi_r,
+          awaddr_axi_r,
+          awlen_axi_r,
+          awsize_axi_r,
+          awburst_axi_r,
+          awlock_axi_r,
+          awcache_axi_r,
+          awqv_axi_r,
+          awprot_axi_r,
+          awvalid_vect_axi_r};
+  assign awvalid_fmt  = awvalid_axi_r;
+  assign awready_axi_r = awready_fmt;
+  assign aw_fmt_dst_data  = aw_fmt_src_data;
+  assign {
+          awregion_fmt,
+          awuser_fmt,
+          awid_fmt,
+          awaddr_fmt,
+          awlen_fmt,
+          awsize_fmt,
+          awburst_fmt,
+          awlock_fmt,
+          awcache_fmt,
+          awqv_fmt,
+          awprot_fmt,
+          awvalid_vect_fmt} = aw_fmt_dst_data;
+  upsize_wr_addr_fmt #(
+        .ARID_WIDTH(ARID_WIDTH),
+        .AWID_WIDTH(AWID_WIDTH),
+        .ADDR_WIDTH(ADDR_WIDTH),
+        .US_DATA_WIDTH(US_DATA_WIDTH),
+        .DS_DATA_WIDTH(DS_DATA_WIDTH),
+        .USER_WIDTH(USER_WIDTH),
+	.DS_AXI3(DS_AXI3)
+        ) u_axi_write_address_format
+  (
+    .aresetn                          (aresetn),
+    .aclk                             (aclk),
+    .lock_seq                         (lock_seq),
+    .ar_lock_hndshk                   (ar_lock_hndshk),
+    .ar_unlock_hndshk                 (ar_unlock_hndshk),
+    .bdata_data                       (bdata_data),
+    .bdata_valid                      (bdata_valid),
+    .bdata_ready                      (bdata_ready),
+    .awfmt_valid                      (awdata_valid),
+    .awfmt_ready                      (awdata_ready),
+    .awfmt_data                       (awdata_data),
+    .awid_s                           (awid_fmt),
+    .awaddr_s                         (awaddr_fmt),
+    .awlen_s                          (awlen_fmt),
+    .awsize_s                         (awsize_fmt),
+    .awburst_s                        (awburst_fmt),
+    .awvalid_s                        (awvalid_fmt),
+    .awready_s                        (awready_fmt),
+    .awprot_s                         (awprot_fmt),
+    .awcache_s                        (awcache_fmt),
+    .awlock_s                         (awlock_fmt),
+    .awuser_s                         (awuser_fmt),
+    .awregion_s                         (awregion_fmt),
+    .awid_m                           (awid_bif),
+    .awaddr_m                         (awaddr_bif),
+    .awlen_m                          (awlen_bif),
+    .awsize_m                         (awsize_bif),
+    .awburst_m                        (awburst_bif),
+    .awvalid_m                        (awvalid_bif),
+    .awready_m                        (awready_bif),
+    .awprot_m                         (awprot_bif),
+    .awlock_m                         (awlock_bif),
+    .awcache_m                        (awcache_bif),
+    .awuser_m                        (awuser_bif),
+    .awregion_m                        (awregion_bif)
+  );
+  assign awvalid_vect_bif = awvalid_vect_fmt;
+  assign awqv_bif = awqv_fmt;
+upsize_wr_cntrl #(
+        .ARID_WIDTH(ARID_WIDTH),
+        .AWID_WIDTH(AWID_WIDTH),
+        .ADDR_WIDTH(ADDR_WIDTH),
+        .US_DATA_WIDTH(US_DATA_WIDTH),
+        .DS_DATA_WIDTH(DS_DATA_WIDTH),
+        .USER_WIDTH(USER_WIDTH)
+        ) u_upsize_axi_write_control
+  (
+    .aresetn                          (aresetn),
+    .aclk                             (aclk),
+    .awfifo_valid                     (awdata_valid),
+    .awfifo_ready                     (awdata_ready),
+    .awfifo_data                      (awdata_data),
+    .wvalid_s                         (wvalid_axi_r),
+    .wready_s                         (wready_axi_r),
+    .wlast                            (wlast_axi_r),
+    .wuser                            (wuser_axi_r),
+    .wid                            (wid_axi_r),
+    .merge                            (merge),
+    .merge_clear                      (merge_clear),
+    .data_select                      (data_select),
+    .strb_skid_valid                  (strb_skid_valid),
+    .wdata_merged                     (wdata_merged),
+    .wstrb_merged                     (wstrb_merged),
+    .wvalid_m                         (wvalid_bif),
+    .wready_m                         (wready_bif),
+    .wlast_m                          (wlast_bif),
+    .wuser_m                          (wuser_bif),
+    .wid_m                          (wid_bif),
+    .wdata_m                          (wdata_bif),
+    .wstrb_m                          (wstrb_bif)
+  );
+  upsize_wr_merge_buffer #(
+        .US_DATA_WIDTH(US_DATA_WIDTH),
+	.DS_DATA_WIDTH(DS_DATA_WIDTH)
+        ) u_upsize_axi_write_merge_buffer
+  (
+    .aresetn                          (aresetn),
+    .aclk                             (aclk),
+    .wdata_out                        (wdata_merged),
+    .wstrb_out                        (wstrb_merged),
+    .wdata_in                         (wdata_axi_r),
+    .wstrb_in                         (wstrb_axi_r),
+    .data_select                      (data_select),
+    .merge_skid_valid                 (strb_skid_valid),
+    .merge                            (merge),
+    .merge_clear                      (merge_clear)
+  );
+  upsize_wr_resp_block #(
+        .AWID_WIDTH(AWID_WIDTH),
+        .USER_WIDTH(USER_WIDTH),
+        .WR_ISS(WR_ISS)
+        ) u_upsize_axi_write_response_block
+  (
+  .aclk                               (aclk),
+  .aresetn                            (aresetn),
+  .bchannel_ready                     (bdata_ready),
+  .bchannel_valid                     (bdata_valid),
+  .bchannel_data                      (bdata_data),
+  .bready_s                           (bready_axi_r),
+  .bvalid_s                           (bvalid_axi_r),
+  .bid_s                              (bid_axi_r),
+  .buser_s                              (buser_axi_r),
+  .bresp_s                            (bresp_axi_r),
+  .buser_m                            (buser_bif),
+  .bresp_m                            (bresp_bif),
+  .bid_m                              (bid_bif),
+  .bvalid_m                           (bvalid_bif),
+  .bready_m                           (bready_bif)
+  );
+  assign ar_fmt_src_data = {
+          arregion_axi_r,
+          aruser_axi_r,
+          arid_axi_r,
+          araddr_axi_r,
+          arlen_axi_r,
+          arsize_axi_r,
+          arburst_axi_r,
+          arlock_axi_r,
+          arcache_axi_r,
+          arqv_axi_r,
+          arprot_axi_r,
+          arvalid_vect_axi_r};
+  assign arvalid_fmt  = arvalid_axi_r;
+  assign arready_axi_r = arready_fmt;
+  assign ar_fmt_dst_data  = ar_fmt_src_data;
+  assign {
+          arregion_fmt,
+          aruser_fmt,
+          arid_fmt,
+          araddr_fmt,
+          arlen_fmt,
+          arsize_fmt,
+          arburst_fmt,
+          arlock_fmt,
+          arcache_fmt,
+          arqv_fmt,
+          arprot_fmt,
+          arvalid_vect_fmt} = ar_fmt_dst_data;
+  upsize_rd_addr_fmt #(
+        .ARID_WIDTH(ARID_WIDTH),
+        .AWID_WIDTH(AWID_WIDTH),
+        .ADDR_WIDTH(ADDR_WIDTH),
+        .US_DATA_WIDTH(US_DATA_WIDTH),
+        .DS_DATA_WIDTH(DS_DATA_WIDTH),
+        .USER_WIDTH(USER_WIDTH),
+	.DS_AXI3(DS_AXI3)
+        ) u_axi_read_address_format
+  (
+    .aresetn                          (aresetn),
+    .aclk                             (aclk),
+    .lock_seq                         (lock_seq),
+    .ar_lock_hndshk                   (ar_lock_hndshk),
+    .ar_unlock_hndshk                 (ar_unlock_hndshk),
+    .ardata_valid                     (arfifo_valid),
+    .ardata_ready                     (arfifo_ready),
+    .ardata_data                      (arfifo_data),
+    .arid_s                           (arid_fmt),
+    .araddr_s                         (araddr_fmt),
+    .arlen_s                          (arlen_fmt),
+    .arsize_s                         (arsize_fmt),
+    .arburst_s                        (arburst_fmt),
+    .arvalid_s                        (arvalid_fmt),
+    .arready_s                        (arready_fmt),
+    .arprot_s                         (arprot_fmt),
+    .arcache_s                        (arcache_fmt),
+    .arlock_s                         (arlock_fmt),
+    .aruser_s                         (aruser_fmt),
+    .arregion_s                         (arregion_fmt),
+    .arid_m                           (arid_bif),
+    .araddr_m                         (araddr_bif),
+    .arlen_m                          (arlen_bif),
+    .arsize_m                         (arsize_bif),
+    .arburst_m                        (arburst_bif),
+    .arvalid_m                        (arvalid_bif),
+    .arready_m                        (arready_bif),
+    .arprot_m                         (arprot_bif),
+    .arlock_m                         (arlock_bif),
+    .aruser_m                         (aruser_bif),
+    .arregion_m                         (arregion_bif),
+    .arcache_m                        (arcache_bif)
+  );
+  assign arvalid_vect_bif = arvalid_vect_fmt;
+  assign arqv_bif         = arqv_fmt;
+  upsize_rd_chan
+    #(
+.ARID_WIDTH      (ARID_WIDTH   ),
+.AWID_WIDTH      (AWID_WIDTH   ),
+.ADDR_WIDTH      (ADDR_WIDTH   ),
+.US_DATA_WIDTH   (US_DATA_WIDTH),
+.DS_DATA_WIDTH   (DS_DATA_WIDTH),
+.USER_WIDTH      (USER_WIDTH   ),
+.RD_ISS          (RD_ISS       )
+          )
+u_upsize_axi_read_channel
+  (
+  .aresetn                           (aresetn),
+  .aclk                              (aclk),
+  .archannel_data                    (arfifo_data),
+  .archannel_valid                   (arfifo_valid),
+  .archannel_ready                   (arfifo_ready),
+  .rvalid_s                          (rvalid_axi_r),
+  .rdata_s                           (rdata_axi_r),
+  .rlast_s                           (rlast_axi_r),
+  .rid_s                             (rid_axi_r),
+  .rresp_s                           (rresp_axi_r),
+  .ruser_s                           (ruser_axi_r),
+  .rready_s                          (rready_axi_r),
+  .rvalid_m                          (rvalid_bif),
+  .rdata_m                           (rdata_bif),
+  .rlast_m                           (rlast_bif),
+  .rid_m                             (rid_bif),
+  .rresp_m                           (rresp_bif),
+  .ruser_m                           (ruser_bif),
+  .rready_m                          (rready_bif)
+  );
+  assign aw_data = {
+          awregion_bif,
+          awuser_bif,
+          awid_bif,
+          awaddr_bif,
+          awlen_bif,
+          awsize_bif,
+          awburst_bif,
+          awlock_bif,
+          awcache_bif,
+          awqv_bif,
+          awprot_bif,
+          awvalid_vect_bif};
+  assign aw_valid = awvalid_bif;
+  assign awready_bif = aw_ready;
+  assign ar_data = {
+          arregion_bif,
+          aruser_bif,
+          arid_bif,
+          araddr_bif,
+          arlen_bif,
+          arsize_bif,
+          arburst_bif,
+          arlock_bif,
+          arcache_bif,
+          arqv_bif,
+          arprot_bif,
+          arvalid_vect_bif};
+  assign ar_valid = arvalid_bif;
+  assign arready_bif = ar_ready;
+  assign w_boundary_src_data = {
+          wid_bif,
+          wuser_bif,
+          wdata_bif,
+          wstrb_bif,
+          wlast_bif};
+  assign w_boundary_src_valid = wvalid_bif;
+  assign wready_bif = w_boundary_src_ready;
+  assign w_data = w_boundary_dst_data;
+  assign w_valid = w_boundary_dst_valid;
+  assign w_boundary_dst_ready = w_ready;
+  assign {
+          ruser_bif,
+          rid_bif,
+          rdata_bif,
+          rresp_bif,
+          rlast_bif} = r_data;
+  assign r_ready = rready_bif;
+  assign rvalid_bif = r_valid;
+  assign {
+          buser_bif,
+          bid_bif,
+          bresp_bif} = b_data;
+  assign b_ready = bready_bif;
+  assign bvalid_bif = b_valid;
+  assign aw_slave_port_src_data = {
+          awregion_s,
+          awuser_s,
+          awid_s,
+          awaddr_s,
+          awlen_s,
+          awsize_s,
+          awburst_s,
+          awlock_s,
+          awcache_s,
+          awqv_s,
+          awprot_s,
+          awvalid_vect_s};
+  assign {
+          awregion_axi_r,
+          awuser_axi_r,
+          awid_axi_r,
+          awaddr_axi_r,
+          awlen_axi_r,
+          awsize_axi_r,
+          awburst_axi_r,
+          awlock_axi_r,
+          awcache_axi_r,
+          awqv_axi_r,
+          awprot_axi_r,
+          awvalid_vect_axi_r} = aw_slave_port_dst_data;
+  assign awvalid_axi_r = aw_slave_port_dst_valid;
+  assign aw_slave_port_dst_ready = awready_axi_r;
+  assign aw_slave_port_src_valid = awvalid_s;
+  assign awready_s = aw_slave_port_src_ready;
+  assign ar_slave_port_src_data = {
+          arregion_s,
+          aruser_s,
+          arid_s,
+          araddr_s,
+          arlen_s,
+          arsize_s,
+          arburst_s,
+          arlock_s,
+          arcache_s,
+          arqv_s,
+          arprot_s,
+          arvalid_vect_s};
+  assign {
+          arregion_axi_r,
+          aruser_axi_r,
+          arid_axi_r,
+          araddr_axi_r,
+          arlen_axi_r,
+          arsize_axi_r,
+          arburst_axi_r,
+          arlock_axi_r,
+          arcache_axi_r,
+          arqv_axi_r,
+          arprot_axi_r,
+          arvalid_vect_axi_r} = ar_slave_port_dst_data;
+  assign arvalid_axi_r = ar_slave_port_dst_valid;
+  assign ar_slave_port_dst_ready = arready_axi_r;
+  assign ar_slave_port_src_valid = arvalid_s;
+  assign arready_s = ar_slave_port_src_ready;
+  assign r_slave_port_src_data = {
+          ruser_axi_r,
+          rid_axi_r,
+          rdata_axi_r,
+          rresp_axi_r,
+          rlast_axi_r};
+  assign {
+          ruser_s,
+          rid_s,
+          rdata_s,
+          rresp_s,
+          rlast_s} = r_slave_port_dst_data;
+  assign r_slave_port_dst_data = r_slave_port_src_data;
+  assign rvalid_s = rvalid_axi_r;
+  assign rready_axi_r = rready_s;
+  assign w_slave_port_src_data = {
+          wid_s,
+          wuser_s,
+          wdata_s,
+          wstrb_s,
+          wlast_s};
+  assign {
+          wid_axi_r,
+          wuser_axi_r,
+          wdata_axi_r,
+          wstrb_axi_r,
+          wlast_axi_r} = w_slave_port_dst_data;
+  assign w_slave_port_dst_data = w_slave_port_src_data;
+  assign wvalid_axi_r = wvalid_s;
+  assign wready_s = wready_axi_r;
+  assign b_slave_port_src_data = {
+          buser_axi_r,
+          bid_axi_r,
+          bresp_axi_r};
+  assign {
+          buser_s,
+          bid_s,
+          bresp_s} = b_slave_port_dst_data;
+  assign b_slave_port_dst_data = b_slave_port_src_data;
+  assign bvalid_s = bvalid_axi_r;
+  assign bready_axi_r = bready_s;
+  axi_slice
+    #(
+      .HNDSHK_MODE (2'h0),
+      .PAYLD_WIDTH (W_IDB_WIDTH)
+     )
+  u_w_boundary_chan_slice
+    (
+     .aresetn               (aresetn),
+     .aclk                  (aclk),
+     .src_valid             (w_boundary_src_valid),
+     .src_data              (w_boundary_src_data),
+     .dst_ready             (w_boundary_dst_ready),
+     .src_ready             (w_boundary_src_ready),
+     .dst_data              (w_boundary_dst_data),
+     .dst_valid             (w_boundary_dst_valid)
+     );
+  axi_slice
+    #(
+      .HNDSHK_MODE  (2'h0),
+      .PAYLD_WIDTH  (US_AW_WIDTH)
+     )
+  u_aw_slave_port_chan_slice
+    (
+     .aresetn               (aresetn),
+     .aclk                  (aclk),
+     .src_valid             (aw_slave_port_src_valid),
+     .src_data              (aw_slave_port_src_data),
+     .dst_ready             (aw_slave_port_dst_ready),
+     .src_ready             (aw_slave_port_src_ready),
+     .dst_data              (aw_slave_port_dst_data),
+     .dst_valid             (aw_slave_port_dst_valid)
+     );
+ axi_slice
+    #(
+      .HNDSHK_MODE  (2'h0),
+      .PAYLD_WIDTH  (US_AR_WIDTH)
+     )
+  u_ar_slave_port_chan_slice
+    (
+     .aresetn               (aresetn),
+     .aclk                  (aclk),
+     .src_valid             (ar_slave_port_src_valid),
+     .src_data              (ar_slave_port_src_data),
+     .dst_ready             (ar_slave_port_dst_ready),
+     .src_ready             (ar_slave_port_src_ready),
+     .dst_data              (ar_slave_port_dst_data),
+     .dst_valid             (ar_slave_port_dst_valid)
+     );
+endmodule
+`include "Axi_undefs.v"
diff --git a/axi2sramcrs/rtl/upsizer/upsize_wr_addr_fmt.v b/axi2sramcrs/rtl/upsizer/upsize_wr_addr_fmt.v
new file mode 100644
index 0000000..8db1554
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_wr_addr_fmt.v
@@ -0,0 +1,1049 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_wr_addr_fmt
+  (
+   lock_seq, bdata_data, bdata_valid, awfmt_valid, awfmt_data,
+   awready_s, awid_m, awaddr_m, awlen_m, awsize_m, awburst_m,
+   awcache_m, awprot_m, awlock_m, awvalid_m, awuser_m, awregion_m,
+   aclk, aresetn, ar_lock_hndshk, ar_unlock_hndshk, bdata_ready,
+   awfmt_ready, awid_s, awaddr_s, awlen_s, awsize_s, awburst_s,
+   awcache_s, awprot_s, awvalid_s, awlock_s, awuser_s, awregion_s,
+   awready_m
+   );
+`include "Axi.v"
+parameter	ARID_WIDTH=4;
+parameter	AWID_WIDTH=4;
+parameter	ADDR_WIDTH=32;
+parameter	US_DATA_WIDTH=128;
+parameter	DS_DATA_WIDTH=256;
+parameter	USER_WIDTH=4;
+parameter	DS_AXI3=1'h1;
+localparam	DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam	US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam	DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam	US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam	AWFMT_WIDTH=AWID_WIDTH+1+4+1+DS_ADDR_AL_WIDTH*2+3+1;
+localparam	US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam	US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam	US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam	US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam	US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam	AW_IDB_WIDTH=US_AW_WIDTH;
+localparam	W_IDB_WIDTH=USER_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam	B_IDB_WIDTH=USER_WIDTH+2+AWID_WIDTH;
+localparam	BCHAN_WIDTH=AWID_WIDTH+1;
+localparam  WDATA_CAM_WIDTH_UP =DS_ADDR_AL_WIDTH-US_ADDR_AL_WIDTH;
+localparam  TOTAL_BYTES_WIDTH = US_ADDR_AL_WIDTH+8;
+  input                    aclk;
+  input                    aresetn;
+  input                    ar_lock_hndshk;
+  input                    ar_unlock_hndshk;
+  output                   lock_seq;
+  output [BCHAN_WIDTH-1:0]             bdata_data;
+  output                   bdata_valid;
+  input                    bdata_ready;
+  input                    awfmt_ready;
+  output                   awfmt_valid;
+  output [AWFMT_WIDTH-1:0]            awfmt_data;
+  input [AWID_WIDTH-1:0]              awid_s;
+  input [ADDR_WIDTH-1:0]             awaddr_s;
+  input [7:0]              awlen_s;
+  input [2:0]              awsize_s;
+  input [1:0]              awburst_s;
+  input [3:0]              awcache_s;
+  input [2:0]              awprot_s;
+  input                    awvalid_s;
+  input [1:0]                   awlock_s;
+  output                   awready_s;
+  input  [USER_WIDTH-1:0]	awuser_s;
+  input  [3:0]			awregion_s;
+  output [AWID_WIDTH-1:0]              awid_m;
+  output [ADDR_WIDTH-1:0]             awaddr_m;
+  output [7:0]              awlen_m;
+  output [2:0]              awsize_m;
+  output [1:0]              awburst_m;
+  output [3:0]              awcache_m;
+  output [2:0]              awprot_m;
+  output [1:0]                   awlock_m;
+  output                    awvalid_m;
+  input                     awready_m;
+  output  [USER_WIDTH-1:0]	awuser_m;
+  output  [3:0]			awregion_m;
+  reg [ADDR_WIDTH-1:0]                awaddro;              // transaction start address (int)
+  reg [7:0]                 awleno;               // transaction length (int)
+  reg [2:0]                 awsizeo;              // transaction transfer size (int)
+  reg [1:0]                 awbursto;             // transaction burst type (int)
+  reg [AWID_WIDTH-1:0]                 awido;
+  reg [3:0]                 awcacheo;
+  reg [2:0]                 awproto;
+  reg [1:0]                      awlocko;
+  reg  [USER_WIDTH-1:0]	awusero;
+  reg  [3:0]			awregiono;
+  reg                       excl_override_reg;
+  reg                       busy_reg;
+  reg [TOTAL_BYTES_WIDTH-1:0]                 wrap_bytes_remaining_reg;
+  reg [DS_ADDR_AL_WIDTH-1:0]                 write_mask;
+  wire                         n_response;
+  reg [TOTAL_BYTES_WIDTH-1:0]                 total_bytes;
+  reg [TOTAL_BYTES_WIDTH-1:0]                 total_bytes_masked;
+  reg [2:0]                 wrapsize;
+  reg [2:0]                 wrapfitsize;
+  reg [3:0]                 wraplen;
+  reg [DS_ADDR_AL_WIDTH:0]                 wrapalignmask;
+  reg                       wrap_split_reg;
+  reg [2:0]                 incrsize;
+  reg                       lock_seq;
+  wire                      slave_hndshk;
+  wire                      master_hndshk;
+  wire                      bypass;
+  wire [ADDR_WIDTH-1:0]               awaddr_aligned;
+  wire [DS_ADDR_AL_WIDTH+8-1:0]                total_bytes_ext;
+  wire [TOTAL_BYTES_WIDTH-1:0]                wrap_boundary_mask;
+  wire                      wrap_aligned;
+  wire                      wrap_is_incr;
+  wire                      wrap_split;
+  wire                      wrap_fits;
+  wire [TOTAL_BYTES_WIDTH-1:0]                wrap_fits_mask;
+  wire [DS_ADDR_AL_WIDTH:0]                working_addr;
+  wire                      wrap_split_reg_nxt;
+  wire                      wrap_split_reg_wr_en;
+  wire                      wrap_info_write_en;
+  wire [TOTAL_BYTES_WIDTH-1:0]                next_wrap_bytes_remaining_reg;
+  wire [TOTAL_BYTES_WIDTH-1:0]                addr_less_one;
+  wire [7:0]                wraplen_i;
+  wire [7:0]                awlen_1;
+  wire [7:0]                incrlen;
+  wire [TOTAL_BYTES_WIDTH-1:0]                bytes_to_transfer;
+  wire [TOTAL_BYTES_WIDTH+8-1:0]              bytes_to_transfer_large;
+  wire [TOTAL_BYTES_WIDTH-1:0]                bytes_to_transfer_wrap1;
+  wire [DS_ADDR_AL_WIDTH-1:0]                offset_address;
+  wire [7:0]                incrlenmaxsize;
+  wire [DS_ADDR_AL_WIDTH:0]                final_address;
+  wire                      overflow;
+  wire                      bytes_lt_one_byte;
+  wire                      bytes_lt_two_byte;
+  wire                      bytes_lt_two_half;
+  wire                      bytes_lt_four_half;
+  wire                      half_carry;
+  wire                      half_carry_double;
+  wire                      bytes_lt_four_word;
+  wire                      bytes_lt_eight_word;
+  wire [2:0]                word_carry;
+  wire                      word_carry_double;
+  wire                      bytes_lt_eight_dword;
+  wire                      bytes_lt_sixt_dword;
+  wire [3:0]                dword_carry;
+  wire                      dword_carry_double;
+  wire                      bytes_lt_sixt_qword;
+  wire                      bytes_lt_ttwo_qword;
+  wire [4:0]                qword_carry;
+  wire                      qword_carry_double;
+  wire                      bytes_lt_ttwo_oword;
+  wire                      bytes_lt_sfour_oword;
+  wire [5:0]                oword_carry;
+  wire                      oword_carry_double;
+  wire                      buffers_ok;
+  wire                      new_transaction;
+  wire                      trans_in_progress;
+  wire                      new_trans_avail;
+  wire                      trans_complete;
+  wire                      next_busy_reg;
+  wire                      busy_reg_wr_en;
+  wire                      excl_override;
+ assign slave_hndshk = awvalid_s & awready_s;
+ assign master_hndshk = awvalid_m & awready_m;
+assign	awfmt_data = {
+	awid_s,
+	wrap_split,
+	awleno[3:0],
+	wrap_fits,
+	write_mask,
+	awaddr_s[DS_ADDR_AL_WIDTH-1:0],
+	awsize_s,
+	bypass || (awburst_s == `AXI_ABURST_FIXED)
+	};
+ assign awfmt_valid = new_transaction;
+ always @(*)
+  begin : p_new_addr_incr_en_w
+    write_mask = {DS_ADDR_AL_WIDTH{1'b0}};
+    case (awburst_s)
+      `AXI_ABURST_FIXED : write_mask = {DS_ADDR_AL_WIDTH{1'b0}};
+      `AXI_ABURST_WRAP  : write_mask = total_bytes[DS_ADDR_AL_WIDTH-1:0];
+      `AXI_ABURST_INCR  : write_mask = {DS_ADDR_AL_WIDTH{1'b1}};
+      default           : write_mask = {DS_ADDR_AL_WIDTH{1'b0}};
+    endcase
+  end
+ assign bdata_data = {awid_s, n_response};
+ assign bdata_valid = new_transaction;
+ assign n_response = wrap_split;
+ assign buffers_ok = bdata_ready & awfmt_ready;
+ assign  trans_complete = ~((wrap_split & ~wrap_split_reg) );
+ assign trans_in_progress = new_transaction | busy_reg;
+ assign new_transaction = new_trans_avail & buffers_ok;
+ assign new_trans_avail = awvalid_s & ~busy_reg;
+ assign next_busy_reg = (trans_complete & slave_hndshk)  ? 1'b0 :
+                        ((new_transaction & ~slave_hndshk) ? 1'b1 : busy_reg);
+ assign busy_reg_wr_en = busy_reg ^ next_busy_reg;
+ always @(posedge aclk or negedge aresetn)
+   begin : busy_reg_p
+      if (!aresetn) begin
+          busy_reg <= 1'b0;
+      end else if (busy_reg_wr_en) begin
+          busy_reg <= next_busy_reg;
+      end
+    end
+ assign excl_override = (new_transaction) ? n_response | (|awleno[7:4]) : excl_override_reg;
+ always @(posedge aclk or negedge aresetn)
+   begin : excl_override_reg_p
+      if (!aresetn) begin
+          excl_override_reg <= 1'b0;
+      end else if (new_transaction) begin
+          excl_override_reg <= excl_override;
+      end
+    end
+ assign awregion_m =     awregiono;
+ assign awuser_m =     awusero;
+ assign awid_m =     awido;
+ assign awcache_m =  awcacheo;
+ assign awprot_m =   awproto;
+ assign awlen_m =    awleno;
+ assign awsize_m =   awsizeo;
+ assign awaddr_m =   awaddro;
+ assign awburst_m =  awbursto;
+ assign awlock_m =   awlocko;
+ assign awvalid_m = awvalid_s && trans_in_progress;
+ assign awready_s = master_hndshk && trans_complete;
+ always @(*) begin
+      awleno = incrlen;
+      awsizeo = incrsize;
+      awbursto = `AXI_ABURST_INCR;
+      awido = awid_s;
+      awusero = awuser_s;
+      awregiono = awregion_s;
+      awcacheo = awcache_s;
+      awproto = awprot_s;
+      awaddro = awaddr_aligned;
+      awlocko = {(awlock_s[1] | (lock_seq & ~trans_complete)),(awlock_s[0] && (~excl_override))};
+      if (!wrap_split_reg) begin
+         awaddro = awaddr_s;
+         if (wrap_aligned) begin
+            awleno = wraplen_i;
+            awsizeo = wrapsize;
+            awbursto = `AXI_ABURST_WRAP;
+         end else if (bypass) begin
+            awleno = awlen_s;
+            awsizeo = awsize_s;
+            awbursto = awburst_s;
+         end else if (wrap_fits) begin
+            awaddro = awaddr_aligned;
+            awleno = awlen_1;
+            awsizeo = wrapfitsize;
+            awbursto = `AXI_ABURST_INCR;
+         end
+      end
+  end
+ assign wraplen_i = {4'b0000,wraplen};
+ assign awlen_1 = {4'b0000,`AXI_ALEN_1};
+ assign addr_less_one = awaddr_s[TOTAL_BYTES_WIDTH-1:0] - {{TOTAL_BYTES_WIDTH{1'b0}},1'b1};
+ assign next_wrap_bytes_remaining_reg = (addr_less_one & total_bytes);
+ assign wrap_info_write_en = wrap_split & master_hndshk;
+ always @(posedge aclk or negedge aresetn)
+   begin : wrap_bytes_remaining_reg_p
+      if (!aresetn) begin
+          wrap_bytes_remaining_reg <= {TOTAL_BYTES_WIDTH{1'b0}};
+      end else if (wrap_info_write_en) begin
+          wrap_bytes_remaining_reg <= next_wrap_bytes_remaining_reg;
+      end
+    end
+ assign awaddr_aligned = {awaddr_s[ADDR_WIDTH-1:TOTAL_BYTES_WIDTH],((awaddr_s[TOTAL_BYTES_WIDTH-1:0]) & (~total_bytes))};
+ assign wrap_split_reg_nxt = wrap_split & ~(wrap_split_reg);
+ assign wrap_split_reg_wr_en = master_hndshk;
+ always @(posedge aclk or negedge aresetn)
+   begin : wrap_split_p
+      if (!aresetn)
+          wrap_split_reg <= 1'b0;
+      else if (wrap_split_reg_wr_en)
+          wrap_split_reg <= wrap_split_reg_nxt;
+    end
+ assign next_lock_seq = (ar_lock_hndshk | (slave_hndshk & awlock_s[1])) ?
+                        1'b1 : ((ar_unlock_hndshk | (master_hndshk & ~awlock_m[1])) ?
+                        1'b0 : lock_seq);
+ always @(posedge aclk or negedge aresetn)
+   begin : locked_sequence_reg
+      if (!aresetn)
+          lock_seq <= 1'b0;
+      else if (master_hndshk || slave_hndshk || ar_lock_hndshk || ar_unlock_hndshk)
+          lock_seq <= next_lock_seq;
+    end
+ assign bypass = (awburst_s == `AXI_ABURST_FIXED ) || ~awcache_s[1] || (awlen_s == `AXI_ALEN_1);
+generate
+  if( US_DATA_WIDTH == 32 )
+    begin
+       always @(*)
+         begin : total_bytes_p32
+           case (awsize_s)
+              `AXI_ASIZE_8    :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+              `AXI_ASIZE_16   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}}, awlen_s, 1'b1};
+              `AXI_ASIZE_32   :
+                               total_bytes = {                                  awlen_s, 2'b11};
+               default         :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+           endcase
+         end
+    end
+  else if( US_DATA_WIDTH == 64 )
+    begin
+       always @(*)
+         begin : total_bytes_p64
+           case (awsize_s)
+              `AXI_ASIZE_8    :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+              `AXI_ASIZE_16   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}}, awlen_s, 1'b1};
+              `AXI_ASIZE_32   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}}, awlen_s, 2'b11};
+              `AXI_ASIZE_64   :
+                              total_bytes = {                                   awlen_s, 3'b111};
+               default         :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+           endcase
+         end
+    end
+  else if( US_DATA_WIDTH == 128 )
+    begin
+       always @(*)
+         begin : total_bytes_p128
+           case (awsize_s)
+              `AXI_ASIZE_8    :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+              `AXI_ASIZE_16   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}}, awlen_s, 1'b1};
+              `AXI_ASIZE_32   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}}, awlen_s, 2'b11};
+              `AXI_ASIZE_64   :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}}, awlen_s, 3'b111};
+              `AXI_ASIZE_128  :
+                              total_bytes = {                                  awlen_s, 4'b1111};
+               default        :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+           endcase
+         end
+    end
+  else if( US_DATA_WIDTH == 256 )
+    begin
+       always @(*)
+         begin : total_bytes_p256
+           case (awsize_s)
+              `AXI_ASIZE_8    :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+              `AXI_ASIZE_16   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}}, awlen_s, 1'b1};
+              `AXI_ASIZE_32   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}}, awlen_s, 2'b11};
+              `AXI_ASIZE_64   :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}}, awlen_s, 3'b111};
+              `AXI_ASIZE_128  :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-4){1'b0}}, awlen_s, 4'b1111};
+              `AXI_ASIZE_256  :
+                              total_bytes = {                                  awlen_s, 5'b11111};
+               default        :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+           endcase
+         end
+    end
+  else if( US_DATA_WIDTH == 512 )
+    begin
+       always @(*)
+         begin : total_bytes_p512
+           case (awsize_s)
+              `AXI_ASIZE_8    :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+              `AXI_ASIZE_16   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}}, awlen_s, 1'b1};
+              `AXI_ASIZE_32   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}}, awlen_s, 2'b11};
+              `AXI_ASIZE_64   :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}}, awlen_s, 3'b111};
+              `AXI_ASIZE_128  :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-4){1'b0}}, awlen_s, 4'b1111};
+              `AXI_ASIZE_256  :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-5){1'b0}}, awlen_s, 5'b11111};
+              `AXI_ASIZE_512  :
+                              total_bytes = {                                  awlen_s, 6'b111111};
+               default        :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+           endcase
+         end
+    end
+  else
+    begin
+       always @(*)
+         begin : total_bytes_p_others
+           case (awsize_s)
+              `AXI_ASIZE_8    :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+              `AXI_ASIZE_16   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}}, awlen_s, 1'b1};
+              `AXI_ASIZE_32   :
+                               total_bytes = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}}, awlen_s, 2'b11};
+              `AXI_ASIZE_64   :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}}, awlen_s, 3'b111};
+              `AXI_ASIZE_128  :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-4){1'b0}}, awlen_s, 4'b1111};
+              `AXI_ASIZE_256  :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8-5){1'b0}}, awlen_s, 5'b11111};
+              `AXI_ASIZE_512  :
+                              total_bytes = {                                  awlen_s, 6'b111111};
+               default        :
+                              total_bytes = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+           endcase
+         end
+    end
+endgenerate
+
+  assign total_bytes_ext = { {WDATA_CAM_WIDTH_UP{1'b0}},total_bytes };
+
+
+generate
+
+
+if(DS_DATA_WIDTH==512) begin:wrmsk512
+   always @(*)
+     begin : wrap_size_len
+
+     if (total_bytes_ext[6]&&(DS_DATA_WIDTH>=512)) begin
+       wrapfitsize = `AXI_ASIZE_1024;
+       wrapsize = `AXI_ASIZE_512;
+       wraplen = total_bytes_ext[9:6];
+       wrapalignmask = {1'b0, 6'b111111};
+     end else if (total_bytes_ext[5]&&(DS_DATA_WIDTH>=256)) begin
+       wrapfitsize = `AXI_ASIZE_512;
+       wrapsize = `AXI_ASIZE_256;
+       wraplen = total_bytes_ext[8:5];
+       wrapalignmask = {2'b0, 5'b11111};
+     end else if (total_bytes_ext[4]&&(DS_DATA_WIDTH>=128)) begin
+       wrapfitsize = `AXI_ASIZE_256;
+       wrapsize = `AXI_ASIZE_128;
+       wraplen = total_bytes_ext[7:4];
+       wrapalignmask = {3'b0, 4'b1111};
+     end else if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+       wrapfitsize = `AXI_ASIZE_128;
+       wrapsize = `AXI_ASIZE_64;
+       wraplen = total_bytes_ext[6:3];
+       wrapalignmask = {4'b0, 3'b111};
+     end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+       wrapfitsize = `AXI_ASIZE_64;
+       wrapsize = `AXI_ASIZE_32;
+       wraplen = total_bytes_ext[5:2];
+       wrapalignmask = {5'b0, 2'b11};
+     end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+       wrapfitsize = `AXI_ASIZE_32;
+       wrapsize = `AXI_ASIZE_16;
+       wraplen = total_bytes_ext[4:1];
+       wrapalignmask = {6'b0, 1'b1};
+     end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+       wrapfitsize = `AXI_ASIZE_16;
+       wrapsize = `AXI_ASIZE_8;
+       wraplen = total_bytes_ext[3:0];
+       wrapalignmask = 7'b0;
+     end else begin
+       wrapfitsize = 3'b0;
+       wrapsize = 3'b0;
+       wraplen = 4'b0;
+       wrapalignmask = 7'b0;
+     end
+   end
+ end
+
+
+if(DS_DATA_WIDTH==256) begin:wrmsk256
+   always @(*)
+     begin : wrap_size_len
+
+     if (total_bytes_ext[5]&&(DS_DATA_WIDTH>=256)) begin
+       wrapfitsize = `AXI_ASIZE_512;
+       wrapsize = `AXI_ASIZE_256;
+       wraplen = total_bytes_ext[8:5];
+       wrapalignmask = {2'b0, 5'b11111};
+     end else if (total_bytes_ext[4]&&(DS_DATA_WIDTH>=128)) begin
+       wrapfitsize = `AXI_ASIZE_256;
+       wrapsize = `AXI_ASIZE_128;
+       wraplen = total_bytes_ext[7:4];
+       wrapalignmask = {3'b0, 4'b1111};
+     end else if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+       wrapfitsize = `AXI_ASIZE_128;
+       wrapsize = `AXI_ASIZE_64;
+       wraplen = total_bytes_ext[6:3];
+       wrapalignmask = {4'b0, 3'b111};
+     end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+       wrapfitsize = `AXI_ASIZE_64;
+       wrapsize = `AXI_ASIZE_32;
+       wraplen = total_bytes_ext[5:2];
+       wrapalignmask = {5'b0, 2'b11};
+     end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+       wrapfitsize = `AXI_ASIZE_32;
+       wrapsize = `AXI_ASIZE_16;
+       wraplen = total_bytes_ext[4:1];
+       wrapalignmask = {6'b0, 1'b1};
+     end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+       wrapfitsize = `AXI_ASIZE_16;
+       wrapsize = `AXI_ASIZE_8;
+       wraplen = total_bytes_ext[3:0];
+       wrapalignmask = 7'b0;
+     end else begin
+       wrapfitsize = 3'b0;//x;
+       wrapsize = 3'b0;//x;
+       wraplen = 4'b0;//x;
+       wrapalignmask = 7'b0;//x;
+     end
+   end
+ end
+
+
+if(DS_DATA_WIDTH==128) begin:wrmsk128
+   always @(*)
+     begin : wrap_size_len
+
+     if (total_bytes_ext[4]&&(DS_DATA_WIDTH>=128)) begin
+       wrapfitsize = `AXI_ASIZE_256;
+       wrapsize = `AXI_ASIZE_128;
+       wraplen = total_bytes_ext[7:4];
+       wrapalignmask = {3'b0, 4'b1111};
+     end else if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+       wrapfitsize = `AXI_ASIZE_128;
+       wrapsize = `AXI_ASIZE_64;
+       wraplen = total_bytes_ext[6:3];
+       wrapalignmask = {4'b0, 3'b111};
+     end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+       wrapfitsize = `AXI_ASIZE_64;
+       wrapsize = `AXI_ASIZE_32;
+       wraplen = total_bytes_ext[5:2];
+       wrapalignmask = {5'b0, 2'b11};
+     end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+       wrapfitsize = `AXI_ASIZE_32;
+       wrapsize = `AXI_ASIZE_16;
+       wraplen = total_bytes_ext[4:1];
+       wrapalignmask = {6'b0, 1'b1};
+     end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+       wrapfitsize = `AXI_ASIZE_16;
+       wrapsize = `AXI_ASIZE_8;
+       wraplen = total_bytes_ext[3:0];
+       wrapalignmask = 7'b0;
+     end else begin
+       wrapfitsize = 3'b0;
+       wrapsize = 3'b0;
+       wraplen = 4'b0;
+       wrapalignmask = 7'b0;
+     end
+   end
+ end
+
+
+
+if(DS_DATA_WIDTH==64) begin:wrmsk64
+   always @(*)
+     begin : wrap_size_len
+
+   if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+       wrapfitsize = `AXI_ASIZE_128;
+       wrapsize = `AXI_ASIZE_64;
+       wraplen = total_bytes_ext[6:3];
+       wrapalignmask = {4'b0, 3'b111};
+     end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+       wrapfitsize = `AXI_ASIZE_64;
+       wrapsize = `AXI_ASIZE_32;
+       wraplen = total_bytes_ext[5:2];
+       wrapalignmask = {5'b0, 2'b11};
+     end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+       wrapfitsize = `AXI_ASIZE_32;
+       wrapsize = `AXI_ASIZE_16;
+       wraplen = total_bytes_ext[4:1];
+       wrapalignmask = {6'b0, 1'b1};
+     end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+       wrapfitsize = `AXI_ASIZE_16;
+       wrapsize = `AXI_ASIZE_8;
+       wraplen = total_bytes_ext[3:0];
+       wrapalignmask = 7'b0;
+     end else begin
+       wrapfitsize = 3'b0;
+       wrapsize = 3'b0;
+       wraplen = 4'b0;
+       wrapalignmask = 7'b0;
+     end
+   end
+ end
+
+
+
+if(DS_DATA_WIDTH==32) begin:wrmsk32
+   always @(*)
+     begin : wrap_size_len
+     if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+       wrapfitsize = `AXI_ASIZE_64;
+       wrapsize = `AXI_ASIZE_32;
+       wraplen = total_bytes_ext[5:2];
+       wrapalignmask = {5'b0, 2'b11};
+     end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+       wrapfitsize = `AXI_ASIZE_32;
+       wrapsize = `AXI_ASIZE_16;
+       wraplen = total_bytes_ext[4:1];
+       wrapalignmask = {6'b0, 1'b1};
+     end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+       wrapfitsize = `AXI_ASIZE_16;
+       wrapsize = `AXI_ASIZE_8;
+       wraplen = total_bytes_ext[3:0];
+       wrapalignmask = 7'b0;
+     end else begin
+       wrapfitsize = 3'b0;
+       wrapsize = 3'b0;
+       wraplen = 4'b0;
+       wrapalignmask = 7'b0;
+     end
+   end
+ end
+
+endgenerate
+
+
+
+/*
+
+   always @(*)
+       begin : wrap_size_len
+   if (total_bytes_ext[6]&&(DS_DATA_WIDTH>=512)) begin
+            wrapfitsize = `AXI_ASIZE_1024;
+            wrapsize = `AXI_ASIZE_512;
+            wraplen = total_bytes_ext[9:6];
+            wrapalignmask = {1'b0, 6'b111111};
+  end else
+          if (total_bytes_ext[5]&&(DS_DATA_WIDTH>=256)) begin
+                    wrapfitsize = `AXI_ASIZE_512;
+                    wrapsize = `AXI_ASIZE_256;
+                    wraplen = total_bytes_ext[8:5];
+                    wrapalignmask = {2'b0, 5'b11111};
+          end else if (total_bytes_ext[4]&&(DS_DATA_WIDTH>=128)) begin
+                    wrapfitsize = `AXI_ASIZE_256;
+                    wrapsize = `AXI_ASIZE_128;
+                    wraplen = total_bytes_ext[7:4];
+                    wrapalignmask = {3'b0, 4'b1111};
+          end else if (total_bytes_ext[3]&&(DS_DATA_WIDTH>=64)) begin
+                    wrapfitsize = `AXI_ASIZE_128;
+                    wrapsize = `AXI_ASIZE_64;
+            wraplen = total_bytes_ext[6:3];
+                    wrapalignmask = {4'b0, 3'b111};
+  end else if (total_bytes_ext[2]&&(DS_DATA_WIDTH>=32)) begin
+            wrapfitsize = `AXI_ASIZE_64;
+            wrapsize = `AXI_ASIZE_32;
+            wraplen = total_bytes_ext[5:2];
+                    wrapalignmask = {5'b0, 2'b11};
+  end else if (total_bytes_ext[1]&&(DS_DATA_WIDTH>=16)) begin
+            wrapfitsize = `AXI_ASIZE_32;
+            wrapsize = `AXI_ASIZE_16;
+            wraplen = total_bytes_ext[4:1];
+                    wrapalignmask = {6'b0, 1'b1};
+  end else if (total_bytes_ext[0]&&(DS_DATA_WIDTH>=8))begin
+            wrapfitsize = `AXI_ASIZE_16;
+            wrapsize = `AXI_ASIZE_8;
+            wraplen = total_bytes_ext[3:0];
+                    wrapalignmask = 7'b0;
+  end else begin
+            wrapfitsize = 3'b0;
+            wrapsize = 3'b0;
+            wraplen = 4'b0;
+                    wrapalignmask = 7'b0;
+                end
+          end
+
+*/
+
+ assign working_addr = awaddr_s[DS_ADDR_AL_WIDTH:0] & wrapalignmask[DS_ADDR_AL_WIDTH:0];
+ assign wrap_fits_mask = {{(TOTAL_BYTES_WIDTH-DS_ADDR_AL_WIDTH){1'b1}}, {DS_ADDR_AL_WIDTH{1'b0}}};
+ assign  wrap_fits = ~|(total_bytes & wrap_fits_mask) & (awburst_s == `AXI_ABURST_WRAP);
+ assign  wrap_is_incr = ~|(awaddr_s[TOTAL_BYTES_WIDTH-1:0] & total_bytes);
+ assign  wrap_aligned = ~|working_addr & (awburst_s == `AXI_ABURST_WRAP) & ~bypass & ~wrap_is_incr & ~wrap_fits ;
+ assign  wrap_split = ((|working_addr)) & (awburst_s == `AXI_ABURST_WRAP) & ~bypass & ~wrap_fits;
+ assign wrap_boundary_mask = total_bytes;
+ assign bytes_to_transfer_wrap1 = ~(awaddr_s[TOTAL_BYTES_WIDTH-1:0]) & wrap_boundary_mask;
+ assign bytes_to_transfer = (wrap_split_reg) ? wrap_bytes_remaining_reg
+                            : ((awburst_s == `AXI_ABURST_WRAP) ? bytes_to_transfer_wrap1
+                            : total_bytes_masked);
+generate
+  if(US_DATA_WIDTH == 32)
+    begin
+      always @(*)
+        begin : total_bytes_masked_p32
+          case (awsize_s)
+             `AXI_ASIZE_8    :
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+             `AXI_ASIZE_16   : //total_bytes_masked = {5'h0, awlen_s, ~awaddr_s[0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}}, awlen_s, ~awaddr_s[0]};
+             `AXI_ASIZE_32   : //total_bytes_masked = {4'h0, awlen_s, ~awaddr_s[1:0]};
+                               total_bytes_masked = {                                  awlen_s, ~awaddr_s[1:0]};
+              default         :
+                               total_bytes_masked =  {TOTAL_BYTES_WIDTH{1'b0}};
+           endcase
+        end
+    end
+  else if(US_DATA_WIDTH == 64)
+    begin
+      always @(*)
+        begin : total_bytes_masked_p64
+          case (awsize_s)
+             `AXI_ASIZE_8    :
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+             `AXI_ASIZE_16   : //total_bytes_masked = {5'h0, awlen_s, ~awaddr_s[0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}} , awlen_s, ~awaddr_s[0]};
+             `AXI_ASIZE_32   : //total_bytes_masked = {4'h0, awlen_s, ~awaddr_s[1:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}} , awlen_s, ~awaddr_s[1:0]};
+             `AXI_ASIZE_64   : //total_bytes_masked = {3'h0, awlen_s, ~awaddr_s[2:0]};
+                               total_bytes_masked = {                                   awlen_s, ~awaddr_s[2:0]};
+              default         :
+                               total_bytes_masked =  {TOTAL_BYTES_WIDTH{1'b0}};
+           endcase
+        end
+    end
+  else if(US_DATA_WIDTH == 128)
+    begin
+      always @(*)
+        begin : total_bytes_masked_p128
+          case (awsize_s)
+             `AXI_ASIZE_8    :
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+             `AXI_ASIZE_16   : //total_bytes_masked = {5'h0, awlen_s, ~awaddr_s[0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}} , awlen_s, ~awaddr_s[0]};
+             `AXI_ASIZE_32   : //total_bytes_masked = {4'h0, awlen_s, ~awaddr_s[1:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}} , awlen_s, ~awaddr_s[1:0]};
+             `AXI_ASIZE_64   : //total_bytes_masked = {3'h0, awlen_s, ~awaddr_s[2:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}} , awlen_s, ~awaddr_s[2:0]};
+             `AXI_ASIZE_128  : //total_bytes_masked = {2'h0, awlen_s, ~awaddr_s[3:0]};
+                               total_bytes_masked = {  awlen_s, ~awaddr_s[3:0]};
+              default         :
+                               total_bytes_masked =  {TOTAL_BYTES_WIDTH{1'b0}};
+           endcase
+        end
+    end
+  else if(US_DATA_WIDTH == 256)
+    begin
+      always @(*)
+        begin : total_bytes_masked_p256
+          case (awsize_s)
+             `AXI_ASIZE_8    :
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+             `AXI_ASIZE_16   : //total_bytes_masked = {5'h0, awlen_s, ~awaddr_s[0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}},  awlen_s, ~awaddr_s[0]};
+             `AXI_ASIZE_32   : //total_bytes_masked = {4'h0, awlen_s, ~awaddr_s[1:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}},  awlen_s, ~awaddr_s[1:0]};
+             `AXI_ASIZE_64   : //total_bytes_masked = {3'h0, awlen_s, ~awaddr_s[2:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}},  awlen_s, ~awaddr_s[2:0]};
+             `AXI_ASIZE_128  : //total_bytes_masked = {2'h0, awlen_s, ~awaddr_s[3:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-4){1'b0}},  awlen_s, ~awaddr_s[3:0]};
+              `AXI_ASIZE_256  : //total_bytes_masked = {1'h0, awlen_s, ~awaddr_s[4:0]};
+                               total_bytes_masked = {                                   awlen_s, ~awaddr_s[4:0]};
+              default         :
+                               total_bytes_masked =  {TOTAL_BYTES_WIDTH{1'b0}};
+           endcase
+        end
+    end
+  else if(US_DATA_WIDTH == 512)
+    begin
+      always @(*)
+        begin : total_bytes_masked_p512
+          case (awsize_s)
+             `AXI_ASIZE_8    :
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+             `AXI_ASIZE_16   : //total_bytes_masked = {5'h0, awlen_s, ~awaddr_s[0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}},  awlen_s, ~awaddr_s[0]};
+             `AXI_ASIZE_32   : //total_bytes_masked = {4'h0, awlen_s, ~awaddr_s[1:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}},  awlen_s, ~awaddr_s[1:0]};
+             `AXI_ASIZE_64   : //total_bytes_masked = {3'h0, awlen_s, ~awaddr_s[2:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}},  awlen_s, ~awaddr_s[2:0]};
+             `AXI_ASIZE_128  : //total_bytes_masked = {2'h0, awlen_s, ~awaddr_s[3:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-4){1'b0}},  awlen_s, ~awaddr_s[3:0]};
+             `AXI_ASIZE_256  : //total_bytes_masked = {1'h0, awlen_s, ~awaddr_s[4:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-5){1'b0}},  awlen_s, ~awaddr_s[4:0]};
+             `AXI_ASIZE_512  : total_bytes_masked = {      awlen_s, ~awaddr_s[5:0]};
+              default         :
+                               total_bytes_masked =  {TOTAL_BYTES_WIDTH{1'b0}};
+           endcase
+        end
+    end
+  else
+    begin
+      always @(*)
+        begin : total_bytes_masked_pothers
+          case (awsize_s)
+             `AXI_ASIZE_8    :
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8){1'b0}}, awlen_s};
+             `AXI_ASIZE_16   : //total_bytes_masked = {5'h0, awlen_s, ~awaddr_s[0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-1){1'b0}},  awlen_s, ~awaddr_s[0]};
+             `AXI_ASIZE_32   : //total_bytes_masked = {4'h0, awlen_s, ~awaddr_s[1:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-2){1'b0}},  awlen_s, ~awaddr_s[1:0]};
+             `AXI_ASIZE_64   : //total_bytes_masked = {3'h0, awlen_s, ~awaddr_s[2:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-3){1'b0}},  awlen_s, ~awaddr_s[2:0]};
+             `AXI_ASIZE_128  : //total_bytes_masked = {2'h0, awlen_s, ~awaddr_s[3:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-4){1'b0}},  awlen_s, ~awaddr_s[3:0]};
+             `AXI_ASIZE_256  : //total_bytes_masked = {1'h0, awlen_s, ~awaddr_s[4:0]};
+                               total_bytes_masked = { {(TOTAL_BYTES_WIDTH-8-5){1'b0}},  awlen_s, ~awaddr_s[4:0]};
+             `AXI_ASIZE_512  : total_bytes_masked = {      awlen_s, ~awaddr_s[5:0]};
+              default         :
+                               total_bytes_masked =  {TOTAL_BYTES_WIDTH{1'b0}};
+           endcase
+        end
+    end
+endgenerate
+
+ assign offset_address = (wrap_split_reg) ? awaddr_aligned[DS_ADDR_AL_WIDTH-1:0] :
+                            awaddr_s[DS_ADDR_AL_WIDTH-1:0];
+ assign  half_carry =  bytes_to_transfer[0] & offset_address[0];
+ assign  half_carry_double = half_carry & bytes_to_transfer[1];
+ assign  word_carry =  {1'b0, bytes_to_transfer[1:0]} + {1'b0, offset_address[1:0]};
+ assign  word_carry_double = word_carry[2] & bytes_to_transfer[2];
+ generate
+ if(DS_DATA_WIDTH>=64) begin: dword_carry_64
+ 	assign  dword_carry =  {1'b0, bytes_to_transfer[2:0]} + {1'b0, offset_address[2:0]};
+ 	assign  dword_carry_double = dword_carry[3] & bytes_to_transfer[3];
+ end
+ else begin: dword_carry_useless
+	assign	dword_carry=4'h0;
+	assign	dword_carry_double=1'h0;
+ end
+endgenerate
+generate
+ if(DS_DATA_WIDTH>=128) begin: qword_carry_128
+ 	assign  qword_carry =  {1'b0, bytes_to_transfer[3:0]} + {1'b0, offset_address[3:0]};
+ 	assign  qword_carry_double = qword_carry[4] & bytes_to_transfer[4];
+ end
+ else begin: qword_carry_useless
+	assign	qword_carry=5'h0;
+	assign	qword_carry_double=1'h0;
+ end
+endgenerate
+generate
+ if(DS_DATA_WIDTH>=256) begin: oword_carry_256
+ 	assign  oword_carry =  {1'b0, bytes_to_transfer[4:0]} + {1'b0, offset_address[4:0]};
+ 	assign  oword_carry_double = oword_carry[5] & bytes_to_transfer[5];
+ end
+ else begin: oword_carry_useless
+	assign	oword_carry=6'h0;
+	assign	oword_carry_double=1'h0;
+ end
+endgenerate
+
+generate
+  if(DS_DATA_WIDTH == 32)
+    begin:bytes_lt_32
+      assign  bytes_lt_one_byte    = ~|bytes_to_transfer;
+      assign  bytes_lt_two_byte    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1];
+      assign  bytes_lt_two_half    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1] & ~half_carry;
+      assign  bytes_lt_four_half   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~half_carry_double;
+      assign  bytes_lt_four_word   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~word_carry[2];
+    end
+  else if(DS_DATA_WIDTH == 64)
+    begin:bytes_lt_64
+      assign  bytes_lt_one_byte    = ~|bytes_to_transfer;
+      assign  bytes_lt_two_byte    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1];
+      assign  bytes_lt_two_half    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1] & ~half_carry;
+      assign  bytes_lt_four_half   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~half_carry_double;
+      assign  bytes_lt_four_word   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~word_carry[2];
+      assign  bytes_lt_eight_word  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~word_carry_double;
+      assign  bytes_lt_eight_dword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~dword_carry[3];
+      assign  bytes_lt_sixt_dword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~dword_carry_double;
+    end
+  else if(DS_DATA_WIDTH == 128)
+    begin:bytes_lt_128
+      assign  bytes_lt_one_byte    = ~|bytes_to_transfer;
+      assign  bytes_lt_two_byte    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1];
+      assign  bytes_lt_two_half    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1] & ~half_carry;
+      assign  bytes_lt_four_half   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~half_carry_double;
+      assign  bytes_lt_four_word   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~word_carry[2];
+      assign  bytes_lt_eight_word  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~word_carry_double;
+      assign  bytes_lt_eight_dword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~dword_carry[3];
+      assign  bytes_lt_sixt_dword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~dword_carry_double;
+      assign  bytes_lt_sixt_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~qword_carry[4];
+      assign  bytes_lt_ttwo_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~qword_carry_double;
+    end
+  else if(DS_DATA_WIDTH == 256)
+    begin:bytes_lt_256
+      assign  bytes_lt_one_byte    = ~|bytes_to_transfer;
+      assign  bytes_lt_two_byte    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1];
+      assign  bytes_lt_two_half    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1] & ~half_carry;
+      assign  bytes_lt_four_half   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~half_carry_double;
+      assign  bytes_lt_four_word   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~word_carry[2];
+      assign  bytes_lt_eight_word  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~word_carry_double;
+      assign  bytes_lt_eight_dword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~dword_carry[3];
+      assign  bytes_lt_sixt_dword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~dword_carry_double;
+      assign  bytes_lt_sixt_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~qword_carry[4];
+      assign  bytes_lt_ttwo_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~qword_carry_double;
+      assign  bytes_lt_ttwo_oword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~oword_carry[5];
+      assign  bytes_lt_sfour_oword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:6] & ~oword_carry_double;
+    end
+  else if(DS_DATA_WIDTH == 512)
+    begin:bytes_lt_512
+      assign  bytes_lt_one_byte    = ~|bytes_to_transfer;
+      assign  bytes_lt_two_byte    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1];
+      assign  bytes_lt_two_half    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1] & ~half_carry;
+      assign  bytes_lt_four_half   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~half_carry_double;
+      assign  bytes_lt_four_word   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~word_carry[2];
+      assign  bytes_lt_eight_word  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~word_carry_double;
+      assign  bytes_lt_eight_dword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~dword_carry[3];
+      assign  bytes_lt_sixt_dword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~dword_carry_double;
+      assign  bytes_lt_sixt_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~qword_carry[4];
+      assign  bytes_lt_ttwo_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~qword_carry_double;
+      assign  bytes_lt_ttwo_oword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~oword_carry[5];
+      assign  bytes_lt_sfour_oword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:6] & ~oword_carry_double;
+    end
+  else
+    begin:bytes_lt_others
+      assign  bytes_lt_one_byte    = ~|bytes_to_transfer;
+      assign  bytes_lt_two_byte    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1];
+      assign  bytes_lt_two_half    = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:1] & ~half_carry;
+      assign  bytes_lt_four_half   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~half_carry_double;
+      assign  bytes_lt_four_word   = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:2] & ~word_carry[2];
+      assign  bytes_lt_eight_word  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~word_carry_double;
+      assign  bytes_lt_eight_dword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:3] & ~dword_carry[3];
+      assign  bytes_lt_sixt_dword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~dword_carry_double;
+      assign  bytes_lt_sixt_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:4] & ~qword_carry[4];
+      assign  bytes_lt_ttwo_qword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~qword_carry_double;
+      assign  bytes_lt_ttwo_oword  = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:5] & ~oword_carry[5];
+      assign  bytes_lt_sfour_oword = ~|bytes_to_transfer[TOTAL_BYTES_WIDTH-1:6] & ~oword_carry_double;
+    end
+endgenerate
+generate
+  if(DS_DATA_WIDTH == 32)
+    begin:incrsize_32
+      always @(*)
+       begin : size_lookup
+             incrsize = DS_ADDR_AL_WIDTH;
+             if ((bytes_lt_one_byte || (bytes_lt_two_byte && (&offset_address[DS_ADDR_AL_WIDTH-1:0])))&&(DS_DATA_WIDTH>=16)) begin
+                 incrsize = `AXI_ASIZE_8;
+             end else if ((bytes_lt_two_half || (bytes_lt_four_half && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=2) ? 1:0)])))&&(DS_DATA_WIDTH>=32)) begin
+                 incrsize = `AXI_ASIZE_16;
+             end else if ((bytes_lt_four_word || (bytes_lt_eight_word && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=3) ? 2:0)])))&&(DS_DATA_WIDTH>=64)) begin
+                 incrsize = `AXI_ASIZE_32;
+                end
+       end
+    end
+  else if(DS_DATA_WIDTH == 64)
+    begin:incrsize_64
+ always @(*)
+  begin : size_lookup
+        incrsize = DS_ADDR_AL_WIDTH;
+        if ((bytes_lt_one_byte || (bytes_lt_two_byte && (&offset_address[DS_ADDR_AL_WIDTH-1:0])))&&(DS_DATA_WIDTH>=16)) begin
+            incrsize = `AXI_ASIZE_8;
+        end else if ((bytes_lt_two_half || (bytes_lt_four_half && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=2) ? 1:0)])))&&(DS_DATA_WIDTH>=32)) begin
+            incrsize = `AXI_ASIZE_16;
+        end else if ((bytes_lt_four_word || (bytes_lt_eight_word && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=3) ? 2:0)])))&&(DS_DATA_WIDTH>=64)) begin
+            incrsize = `AXI_ASIZE_32;
+        end else if ((bytes_lt_eight_dword || (bytes_lt_sixt_dword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=4) ? 3:0)])))&&(DS_DATA_WIDTH>=128)) begin
+            incrsize = `AXI_ASIZE_64;
+        end
+  end
+    end
+  else if(DS_DATA_WIDTH == 128)
+    begin:incrsize_128
+ always @(*)
+  begin : size_lookup
+        incrsize = DS_ADDR_AL_WIDTH;
+        if ((bytes_lt_one_byte || (bytes_lt_two_byte && (&offset_address[DS_ADDR_AL_WIDTH-1:0])))&&(DS_DATA_WIDTH>=16)) begin
+            incrsize = `AXI_ASIZE_8;
+        end else if ((bytes_lt_two_half || (bytes_lt_four_half && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=2) ? 1:0)])))&&(DS_DATA_WIDTH>=32)) begin
+            incrsize = `AXI_ASIZE_16;
+        end else if ((bytes_lt_four_word || (bytes_lt_eight_word && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=3) ? 2:0)])))&&(DS_DATA_WIDTH>=64)) begin
+            incrsize = `AXI_ASIZE_32;
+        end else if ((bytes_lt_eight_dword || (bytes_lt_sixt_dword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=4) ? 3:0)])))&&(DS_DATA_WIDTH>=128)) begin
+            incrsize = `AXI_ASIZE_64;
+        end else if ((bytes_lt_sixt_qword || (bytes_lt_ttwo_qword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=5) ? 4:0)])))&&(DS_DATA_WIDTH>=256)) begin
+            incrsize = `AXI_ASIZE_128;
+        end
+  end
+    end
+  else if(DS_DATA_WIDTH == 256)
+    begin:incrsize_256
+ always @(*)
+  begin : size_lookup
+        incrsize = DS_ADDR_AL_WIDTH;
+        if ((bytes_lt_one_byte || (bytes_lt_two_byte && (&offset_address[DS_ADDR_AL_WIDTH-1:0])))&&(DS_DATA_WIDTH>=16)) begin
+            incrsize = `AXI_ASIZE_8;
+        end else if ((bytes_lt_two_half || (bytes_lt_four_half && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=2) ? 1:0)])))&&(DS_DATA_WIDTH>=32)) begin
+            incrsize = `AXI_ASIZE_16;
+        end else if ((bytes_lt_four_word || (bytes_lt_eight_word && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=3) ? 2:0)])))&&(DS_DATA_WIDTH>=64)) begin
+            incrsize = `AXI_ASIZE_32;
+        end else if ((bytes_lt_eight_dword || (bytes_lt_sixt_dword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=4) ? 3:0)])))&&(DS_DATA_WIDTH>=128)) begin
+            incrsize = `AXI_ASIZE_64;
+        end else if ((bytes_lt_sixt_qword || (bytes_lt_ttwo_qword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=5) ? 4:0)])))&&(DS_DATA_WIDTH>=256)) begin
+            incrsize = `AXI_ASIZE_128;
+        end else if ((bytes_lt_ttwo_oword || (bytes_lt_sfour_oword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=6) ? 4:0)])))&&(DS_DATA_WIDTH>=512)) begin
+            incrsize = `AXI_ASIZE_256;
+        end
+  end
+    end
+  else if(DS_DATA_WIDTH == 512)
+    begin:incrsize_512
+ always @(*)
+  begin : size_lookup
+        incrsize = DS_ADDR_AL_WIDTH;
+        if ((bytes_lt_one_byte || (bytes_lt_two_byte && (&offset_address[DS_ADDR_AL_WIDTH-1:0])))&&(DS_DATA_WIDTH>=16)) begin
+            incrsize = `AXI_ASIZE_8;
+        end else if ((bytes_lt_two_half || (bytes_lt_four_half && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=2) ? 1:0)])))&&(DS_DATA_WIDTH>=32)) begin
+            incrsize = `AXI_ASIZE_16;
+        end else if ((bytes_lt_four_word || (bytes_lt_eight_word && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=3) ? 2:0)])))&&(DS_DATA_WIDTH>=64)) begin
+            incrsize = `AXI_ASIZE_32;
+        end else if ((bytes_lt_eight_dword || (bytes_lt_sixt_dword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=4) ? 3:0)])))&&(DS_DATA_WIDTH>=128)) begin
+            incrsize = `AXI_ASIZE_64;
+        end else if ((bytes_lt_sixt_qword || (bytes_lt_ttwo_qword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=5) ? 4:0)])))&&(DS_DATA_WIDTH>=256)) begin
+            incrsize = `AXI_ASIZE_128;
+        end else if ((bytes_lt_ttwo_oword || (bytes_lt_sfour_oword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=6) ? 5:0)])))&&(DS_DATA_WIDTH>=512)) begin
+            incrsize = `AXI_ASIZE_256;
+        end
+  end
+    end
+  else
+    begin:incrsize_others
+ always @(*)
+  begin : size_lookup
+        incrsize = DS_ADDR_AL_WIDTH;
+        if ((bytes_lt_one_byte || (bytes_lt_two_byte && (&offset_address[DS_ADDR_AL_WIDTH-1:0])))&&(DS_DATA_WIDTH>=16)) begin
+            incrsize = `AXI_ASIZE_8;
+        end else if ((bytes_lt_two_half || (bytes_lt_four_half && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=2) ? 1:0)])))&&(DS_DATA_WIDTH>=32)) begin
+            incrsize = `AXI_ASIZE_16;
+        end else if ((bytes_lt_four_word || (bytes_lt_eight_word && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=3) ? 2:0)])))&&(DS_DATA_WIDTH>=64)) begin
+            incrsize = `AXI_ASIZE_32;
+        end else if ((bytes_lt_eight_dword || (bytes_lt_sixt_dword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=4) ? 3:0)])))&&(DS_DATA_WIDTH>=128)) begin
+            incrsize = `AXI_ASIZE_64;
+        end else if ((bytes_lt_sixt_qword || (bytes_lt_ttwo_qword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=5) ? 4:0)])))&&(DS_DATA_WIDTH>=256)) begin
+            incrsize = `AXI_ASIZE_128;
+        end else if ((bytes_lt_ttwo_oword || (bytes_lt_sfour_oword && (&offset_address[DS_ADDR_AL_WIDTH-1:((DS_ADDR_AL_WIDTH>=6) ? 4:0)])))&&(DS_DATA_WIDTH>=512)) begin
+            incrsize = `AXI_ASIZE_256;
+        end
+  end
+    end
+endgenerate
+  assign final_address = {1'b0, offset_address} + {1'b0, bytes_to_transfer_large[DS_ADDR_AL_WIDTH-1:0]};
+  assign overflow =  final_address[DS_ADDR_AL_WIDTH];
+  assign bytes_to_transfer_large = {8'h0, bytes_to_transfer};
+  assign incrlenmaxsize =  bytes_to_transfer_large[DS_ADDR_AL_WIDTH+:((DS_AXI3==1) ? 4 : 8)] + 4'b1;
+  assign incrlen = (overflow) ? incrlenmaxsize : ((DS_AXI3==1) ? {4'b0000,bytes_to_transfer_large[DS_ADDR_AL_WIDTH+:4]}:bytes_to_transfer_large[DS_ADDR_AL_WIDTH+:8]);
+
+endmodule
+`include "Axi_undefs.v"
diff --git a/axi2sramcrs/rtl/upsizer/upsize_wr_cntrl.v b/axi2sramcrs/rtl/upsizer/upsize_wr_cntrl.v
new file mode 100644
index 0000000..d887a1c
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_wr_cntrl.v
@@ -0,0 +1,280 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_wr_cntrl
+  (
+   awfifo_ready, wready_s, merge, merge_clear, data_select, wvalid_m,
+   wdata_m, wstrb_m, wlast_m, wuser_m, wid_m,
+   aclk, aresetn, awfifo_valid, awfifo_data, wvalid_s, wlast, wuser,
+   wid, strb_skid_valid, wdata_merged, wstrb_merged, wready_m
+   );
+`include "Axi.v"
+parameter       ARID_WIDTH=4;
+parameter       AWID_WIDTH=4;
+parameter       ADDR_WIDTH=32;
+parameter       US_DATA_WIDTH=256;
+parameter       DS_DATA_WIDTH=128;
+parameter       USER_WIDTH=4;
+localparam      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam      US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam      DS_ADDR_AL_WIDTH=$clog2(DS_WSTRB_WIDTH);
+localparam      US_ADDR_AL_WIDTH=$clog2(US_WSTRB_WIDTH);
+localparam      ARFMT_WIDTH=4+DS_ADDR_AL_WIDTH+US_ADDR_AL_WIDTH+3;
+localparam	AWFMT_WIDTH=AWID_WIDTH+1+4+1+DS_ADDR_AL_WIDTH*2+3+1;
+localparam      US_AW_WIDTH=4+USER_WIDTH+AWID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_AR_WIDTH=4+USER_WIDTH+ARID_WIDTH+ADDR_WIDTH+8+3+2+2+4+4+3+1;
+localparam      US_R_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1;
+localparam      US_W_WIDTH=USER_WIDTH+AWID_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam      US_B_WIDTH=USER_WIDTH+AWID_WIDTH+2;
+localparam      AW_IDB_WIDTH=US_AW_WIDTH+US_ADDR_AL_WIDTH-DS_ADDR_AL_WIDTH;
+localparam      AR_IDB_WIDTH=US_AR_WIDTH+ARFMT_WIDTH;
+localparam      W_IDB_WIDTH=USER_WIDTH+US_DATA_WIDTH+US_WSTRB_WIDTH+1;
+localparam      R_IDB_WIDTH=USER_WIDTH+ARID_WIDTH+US_DATA_WIDTH+2+1+DS_ADDR_AL_WIDTH;
+localparam      B_IDB_WIDTH=USER_WIDTH+2+AWID_WIDTH;
+localparam	DATA_RATIO=(DS_DATA_WIDTH/US_DATA_WIDTH);
+  input                     aclk;
+  input                     aresetn;
+  output                    awfifo_ready;
+  input                     awfifo_valid;
+  input [AWFMT_WIDTH-1:0]              awfifo_data;
+  input                     wvalid_s;
+  output                    wready_s;
+  input                     wlast;
+  input [USER_WIDTH-1:0]        wuser;
+  input [AWID_WIDTH-1:0]        wid;
+  output                    merge;
+  output                    merge_clear;
+  output  [DATA_RATIO-1:0]                data_select;
+  input                     strb_skid_valid;
+  input [DS_DATA_WIDTH-1:0]             wdata_merged;
+  input [DS_WSTRB_WIDTH-1:0]              wstrb_merged;
+  output                    wvalid_m;
+  input                     wready_m;
+  output [DS_DATA_WIDTH-1:0]            wdata_m;
+  output [DS_WSTRB_WIDTH-1:0]             wstrb_m;
+  output                    wlast_m;
+  output [USER_WIDTH-1:0]       wuser_m;
+  output [AWID_WIDTH-1:0]       wid_m;
+  wire                      slavew_hndshk;
+  wire                      wfifo_hndshk;
+  wire                      awfifo_hndshk;
+  wire                      bypass_in;
+  wire [2:0]                write_size;
+  wire [DS_ADDR_AL_WIDTH-1:0]                write_addr;
+  wire [DS_ADDR_AL_WIDTH-1:0]                write_addr_mask;
+  wire [3:0]                write_len_tb;
+  wire                      bypass;
+  wire [2:0]                a_size;
+  wire [DS_ADDR_AL_WIDTH-1:0]                addr_mask;
+  wire [DS_ADDR_AL_WIDTH-1:0]                addr_internal;
+  wire [3:0]                beat_count;
+  wire [DS_ADDR_AL_WIDTH:0]                addr_incr;
+  wire [DS_ADDR_AL_WIDTH-1:0]                store_addr;
+  wire [3:0]                beat_reg_next;
+  wire                      beat_reg_wr_en;
+  wire                      wrap_fits_in;
+  wire                      wrap_fits;
+  wire                      split_wrap;
+  wire                      split_wrap_in;
+  wire                      split_wrap_reg_en;
+  wire                      split_wrap_reg_next;
+  wire                      cross_boundary;
+  wire                      cross_boundary_sel;
+  wire                      idle;
+  wire                      insert_extra_wlast;
+  wire                      wlast_sel;
+  wire                      wfifo_valid_next;
+  wire                      wfifo_should_push;
+  wire                      busy_reg_next;
+  wire                      reg_wr_en;
+  wire                      reg_update;
+  wire  [AWID_WIDTH-1:0]        wid_in;
+  reg [DS_ADDR_AL_WIDTH-1:0]                 addr_reg;
+  reg [DS_ADDR_AL_WIDTH-1:0]                 addr_mask_reg;
+  reg                       cross_boundary_reg;
+  reg [2:0]                 size_reg;
+  reg                       bypass_reg;
+  reg [3:0]                 beat_reg;
+  reg                       split_wrap_reg;
+  reg                       wrap_fits_reg;
+  reg [6:0]                 size_incr;
+  reg [DS_ADDR_AL_WIDTH-1:0]                 addr_reg_nxt;
+  wire [DATA_RATIO-1:0]                    data_select;
+  reg                       wfifo_valid_reg;
+  reg                       busy_reg;
+  reg                       merge_clear;
+  reg                       wlast_reg;
+  reg   [USER_WIDTH-1:0]        wuser_reg;
+  reg   [AWID_WIDTH-1:0]        wid_reg;
+ assign slavew_hndshk = wvalid_s && wready_s;
+ assign wfifo_hndshk  = wvalid_m  &&  wready_m;
+ assign awfifo_hndshk = awfifo_valid  &&  awfifo_ready;
+ assign merge = slavew_hndshk;
+ always @(posedge aclk or negedge aresetn)
+   begin : last_clear_p
+     if (!aresetn)
+        merge_clear <= 1'b0;
+     else if (merge || wfifo_hndshk)
+        merge_clear <= wfifo_hndshk;
+   end
+ assign idle = (~awfifo_valid && ~busy_reg);
+genvar i;
+generate
+ for(i=0;i<DATA_RATIO;i=i+1) begin: for_data_select
+	assign	data_select[i]=(idle) ? 1'h1 : (addr_internal[DS_ADDR_AL_WIDTH-1:US_ADDR_AL_WIDTH]==i);
+ end
+endgenerate
+ assign wready_s = ~strb_skid_valid & ~wfifo_valid_reg;
+ assign awfifo_ready = ~busy_reg;
+ assign wfifo_valid_next = ((wvalid_m & ~wready_m) || wfifo_valid_reg) & ~wfifo_hndshk;
+ always @(posedge aclk or negedge aresetn)
+   begin : wfifo_valid_seq
+     if (!aresetn)
+        wfifo_valid_reg <= 1'b0;
+     else
+        wfifo_valid_reg <= wfifo_valid_next;
+   end
+ assign wfifo_should_push = (bypass || wlast_sel || cross_boundary_sel) & (busy_reg || awfifo_hndshk);
+ assign wvalid_m = wfifo_should_push & (wfifo_valid_reg || merge || strb_skid_valid);
+ assign reg_update = slavew_hndshk || (busy_reg_next && strb_skid_valid);
+ always @(posedge aclk or negedge aresetn)
+  begin : wfifo_data_int_seq
+    if (!aresetn) begin
+       wlast_reg <= 1'b0;
+       wuser_reg <= {USER_WIDTH{1'b0}};
+    end else if (slavew_hndshk) begin
+       wlast_reg <= wlast;
+       wuser_reg <= wuser;
+    end
+  end
+  always @(posedge aclk or negedge aresetn)
+  begin : cross_boundary_reg_seq
+    if (!aresetn) begin
+       cross_boundary_reg <= 1'b0;
+    end else if (reg_update) begin
+       cross_boundary_reg <= cross_boundary;
+    end
+  end
+ assign wlast_sel        = (wready_s) ? (wlast & wvalid_s) : wlast_reg;
+ assign cross_boundary_sel = (wfifo_valid_reg) ? cross_boundary_reg : cross_boundary;
+ assign busy_reg_next = ((awfifo_hndshk & ~(strb_skid_valid & wfifo_valid_reg) & ~(wlast_sel & wfifo_hndshk))) ? 1'b1 :
+                        ((wfifo_hndshk & wlast_sel) ? 1'b0 : busy_reg);
+ always @(posedge aclk or negedge aresetn)
+   begin : busy_seq
+     if (!aresetn)
+        busy_reg <= 1'b0;
+     else
+        busy_reg <= busy_reg_next;
+   end
+assign	{
+	wid_in,
+	split_wrap_in,
+	write_len_tb,
+	wrap_fits_in,
+	write_addr_mask,
+	write_addr,
+	write_size,
+	bypass_in
+	} = awfifo_data;
+ assign wlast_m   = wlast_sel || insert_extra_wlast;
+ assign wid_m     = (awfifo_valid ? wid_in : wid_reg);
+ assign wuser_m     = (wfifo_valid_reg || strb_skid_valid) ? wuser_reg : wuser;
+ assign wdata_m   = wdata_merged;
+ assign wstrb_m   = wstrb_merged;
+ assign insert_extra_wlast =  (~|beat_count & ~bypass & split_wrap);
+ assign beat_reg_next = (|beat_count & wfifo_hndshk) ? beat_count - 4'b1 : beat_count;
+ assign beat_reg_wr_en = (wfifo_hndshk || awfifo_hndshk)& split_wrap;
+ always @(posedge aclk or negedge aresetn)
+     begin : beat_cnt_p
+       if (!aresetn)
+          beat_reg <= 4'b0;
+       else if (beat_reg_wr_en)
+          beat_reg <= beat_reg_next;
+     end
+ assign split_wrap_reg_en = awfifo_hndshk || (insert_extra_wlast & wfifo_hndshk);
+ assign split_wrap_reg_next = split_wrap & ~(insert_extra_wlast & wfifo_hndshk);
+ always @(posedge aclk or negedge aresetn)
+    begin : unaligned_p
+      if (!aresetn)
+         split_wrap_reg <= 1'b0;
+      else if (split_wrap_reg_en)
+         split_wrap_reg <= split_wrap_reg_next;
+    end
+ assign addr_internal = (awfifo_hndshk) ? write_addr : addr_reg;
+ assign addr_mask     = (awfifo_hndshk) ? write_addr_mask : addr_mask_reg;
+ assign bypass        = (awfifo_hndshk) ? bypass_in : bypass_reg;
+ assign a_size        = (awfifo_hndshk) ? write_size :  size_reg;
+ assign wrap_fits     = (awfifo_hndshk) ? wrap_fits_in : wrap_fits_reg;
+ assign beat_count    = (awfifo_hndshk) ? write_len_tb : beat_reg;
+ assign split_wrap    = (awfifo_hndshk) ? split_wrap_in : split_wrap_reg;
+ always @(*)
+ begin : size_incr_p
+    case (a_size)
+       `AXI_ASIZE_8    : size_incr = {6'b0, 1'b1};
+       `AXI_ASIZE_16   : size_incr = {5'b0, 2'b10};
+       `AXI_ASIZE_32   : size_incr = {4'b0, 3'b100};
+       `AXI_ASIZE_64   : size_incr = {3'b0, 4'b1000};
+       `AXI_ASIZE_128  : size_incr = {2'b0, 5'b10000};
+       `AXI_ASIZE_256  : size_incr = {1'b0, 6'b100000};
+       `AXI_ASIZE_512  : size_incr = {7'b1000000};
+      default         : size_incr = {7'bx};
+    endcase
+  end
+ assign addr_incr = {1'b0, addr_internal} + size_incr[DS_ADDR_AL_WIDTH:0];
+ always @(*)
+  begin : addr_reg_nxt_p
+    integer index_i;
+    for (index_i = 0; index_i < DS_ADDR_AL_WIDTH ; index_i = index_i + 1)
+    begin
+      if (addr_mask[index_i] == 1'b1)
+        addr_reg_nxt[index_i] = addr_incr[index_i];
+      else
+        addr_reg_nxt[index_i] = addr_internal[index_i];
+    end
+  end
+ assign store_addr = (reg_update) ? addr_reg_nxt : addr_internal;
+ assign reg_wr_en = merge || awfifo_hndshk;
+ always @(posedge aclk or negedge aresetn)
+    begin : addr_seq
+      if (!aresetn)
+          addr_reg <= {DS_ADDR_AL_WIDTH{1'b0}};
+      else if (reg_wr_en)
+          addr_reg <= store_addr;
+    end
+ always @(posedge aclk or negedge aresetn)
+    begin : store_seq
+      if (!aresetn) begin
+          addr_mask_reg <= {DS_ADDR_AL_WIDTH{1'b0}};
+          wid_reg <= {AWID_WIDTH{1'b0}};
+          bypass_reg <= 1'b0;
+          size_reg <= 3'b0;
+          wrap_fits_reg <= 1'b0;
+      end else if (awfifo_hndshk) begin
+          addr_mask_reg <= write_addr_mask;
+          wid_reg <= wid_in;
+          bypass_reg <= bypass_in;
+          size_reg <= write_size;
+          wrap_fits_reg <= wrap_fits_in;
+      end
+    end
+ assign cross_boundary = (|((addr_incr ^ {1'b0, addr_internal}) & ({1'b1, ~addr_mask} ))) & ~(wrap_fits);
+endmodule
+`include "Axi_undefs.v"
diff --git a/axi2sramcrs/rtl/upsizer/upsize_wr_merge_buffer.v b/axi2sramcrs/rtl/upsizer/upsize_wr_merge_buffer.v
new file mode 100644
index 0000000..bdd3b0a
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_wr_merge_buffer.v
@@ -0,0 +1,102 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_wr_merge_buffer
+  (
+  wdata_out,
+  wstrb_out,
+  merge_skid_valid,
+  wdata_in,
+  wstrb_in,
+  data_select,
+  merge,
+  merge_clear,
+  aclk,
+  aresetn
+  );
+parameter       US_DATA_WIDTH=128;
+parameter       DS_DATA_WIDTH=256;
+localparam      US_WSTRB_WIDTH=US_DATA_WIDTH/8;
+localparam      DS_WSTRB_WIDTH=DS_DATA_WIDTH/8;
+localparam	DATA_RATIO=(DS_DATA_WIDTH/US_DATA_WIDTH);
+  input                                 aclk;
+  input                                 aresetn;
+  output [DS_DATA_WIDTH-1:0]                        wdata_out;
+  output [DS_WSTRB_WIDTH-1:0]                         wstrb_out;
+  output                                merge_skid_valid;
+  input  [US_DATA_WIDTH-1:0]                        wdata_in;
+  input  [US_WSTRB_WIDTH-1:0]                         wstrb_in;
+  input  [DATA_RATIO-1:0]                          data_select;
+  input                                 merge;
+  input                                 merge_clear;
+   wire  [DS_DATA_WIDTH-1:0]                        wide_wdata_in;
+   wire  [DS_WSTRB_WIDTH-1:0]                         wide_wstrb_in;
+   wire  [DS_WSTRB_WIDTH-1:0]                         wide_wstrb_masked;
+   wire  [DS_WSTRB_WIDTH-1:0]                         wstrb_out_i;
+   wire                                 update_strb;
+   wire                                 strb_skid_valid_wr;
+   wire                                 strb_skid_valid_nxt;
+   wire                                 all_bytes;
+   wire [DS_WSTRB_WIDTH-1:0]    merge_byte,merge_strb,next_strb;
+   reg                                  strb_skid_valid;
+   reg  [7:0]   merged_byte[DS_WSTRB_WIDTH-1:0];
+   reg          merged_strb[DS_WSTRB_WIDTH-1:0];
+   assign wide_wdata_in     = {DATA_RATIO{wdata_in}};
+   assign wide_wstrb_masked = {DATA_RATIO{wstrb_in}} | {DS_WSTRB_WIDTH{all_bytes}};
+   assign wide_wstrb_in     = {DATA_RATIO{wstrb_in}};
+   assign all_bytes = data_select == {DATA_RATIO{1'b1}};
+   assign update_strb = merge_clear || (merge && all_bytes)
+                        || (~all_bytes && strb_skid_valid);
+   assign strb_skid_valid_wr = (merge && all_bytes) || update_strb;
+   assign strb_skid_valid_nxt = merge && all_bytes;
+   always @(posedge aclk or negedge aresetn)
+     begin : strb_skid_valid_p
+        if (!aresetn)
+           strb_skid_valid <= 1'b0;
+        else if (strb_skid_valid_wr)
+           strb_skid_valid <= strb_skid_valid_nxt;
+     end
+   assign merge_skid_valid = strb_skid_valid;
+genvar i;
+generate
+ for(i=0;i<DS_WSTRB_WIDTH;i=i+1) begin:merge_byte_g
+ assign merge_byte[i]=merge && data_select[i/US_WSTRB_WIDTH] && wide_wstrb_masked[i];
+ assign wdata_out[i*8+:8]=merge_byte[i] ? wide_wdata_in[i*8+:8] : merged_byte[i];
+ assign merge_strb[i]=merge_byte[i] | update_strb;
+ assign wstrb_out_i[i] = merge_byte[i] ? wide_wstrb_in[i] :
+                           (((strb_skid_valid && data_select[i/US_WSTRB_WIDTH]) || (~strb_skid_valid && ~update_strb)) ? merged_strb[i] : 1'b0);
+ assign wstrb_out[i] = wstrb_out_i[i];
+ assign next_strb[i] = wstrb_out_i[i];
+ always @(posedge aclk)
+     begin : byte_seq
+       if (merge_byte[i])
+          merged_byte[i] <= wide_wdata_in[i*8+:8];
+     end
+ always @(posedge aclk or negedge aresetn)
+     begin : byte_strb_seq
+       if (!aresetn)
+          merged_strb[i] <= 1'b0;
+       else if (merge_strb[i])
+          merged_strb[i] <= next_strb[i];
+     end
+ end
+endgenerate
+endmodule
diff --git a/axi2sramcrs/rtl/upsizer/upsize_wr_resp_block.v b/axi2sramcrs/rtl/upsizer/upsize_wr_resp_block.v
new file mode 100644
index 0000000..4e9ebfb
--- /dev/null
+++ b/axi2sramcrs/rtl/upsizer/upsize_wr_resp_block.v
@@ -0,0 +1,170 @@
+//****************************************************************************
+//
+// Copyright 2017-2023 Vivante Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//****************************************************************************
+// Auto-generated file on 11/03/2023.
+//
+//****************************************************************************
+
+module upsize_wr_resp_block
+  (
+   bchannel_ready, bvalid_s, bready_m, bid_s, bresp_s, buser_s,
+   aclk, aresetn, bvalid_m, bready_s, bid_m, bresp_m, buser_m,
+   bchannel_valid, bchannel_data
+   );
+parameter       AWID_WIDTH=4;
+parameter       USER_WIDTH=4;
+parameter       WR_ISS=8;
+localparam      PTR_WIDTH=$clog2(WR_ISS+1);
+localparam	BCHAN_WIDTH=AWID_WIDTH+1;
+  input                   aclk;
+  input                   aresetn;
+  output                  bchannel_ready;
+  output                  bvalid_s;
+  output                  bready_m;
+  output [AWID_WIDTH-1:0]            bid_s;
+  output [1:0]            bresp_s;
+  output  [USER_WIDTH-1:0]      buser_s;
+  input                   bvalid_m;
+  input                   bready_s;
+  input [AWID_WIDTH-1:0]             bid_m;
+  input [1:0]             bresp_m;
+  input   [USER_WIDTH-1:0]      buser_m;
+  input                   bchannel_valid;
+  input [BCHAN_WIDTH-1:0]             bchannel_data;
+   wire   [WR_ISS-1:0]                match_bus;
+   wire   [WR_ISS-1:0]                hazard_bus;
+   wire   [WR_ISS-1:0]                valid_bus;
+   wire   [WR_ISS-1:0]                valid_bus_zero_lsb;
+   wire [PTR_WIDTH-1:0] hazard_bus_one_pos[WR_ISS-1:0];
+   wire [PTR_WIDTH-1:0] match_bus_one_pos[WR_ISS-1:0];
+   wire                   match;
+   wire                   hazard;
+   wire                   bready_m_i;
+   wire                   bhndshk;
+   wire                   push_slice;
+   wire                   pop_slice;
+   wire                   update;
+   wire [AWID_WIDTH-1:0]             awid;
+   wire              n_response;
+   wire                   next_bchannel_ready;
+   wire [1:0]             bresp_out[WR_ISS-1:0];
+   wire [WR_ISS-1:0]	const_onehot[WR_ISS-1:0];
+   reg  [PTR_WIDTH-1:0]                  hazard_pointer;
+   reg  [PTR_WIDTH-1:0]                  match_pointer;
+   reg  [WR_ISS-1:0]                  store;
+   reg                    bchannel_ready_i;
+   reg	[1:0]	bresp_out_or;
+   assign {
+        awid,
+        n_response
+        }=bchannel_data;
+   assign match = |match_bus;
+   assign hazard = |hazard_bus;
+   assign next_bchannel_ready = ~(&(valid_bus | (store & {WR_ISS{push_slice}}))) || (pop_slice);
+   always @(posedge aclk or negedge aresetn)
+    begin : bchannel_seq
+      if (!aresetn)
+         bchannel_ready_i <= 1'b0;
+      else
+         bchannel_ready_i <= next_bchannel_ready;
+    end
+   assign bchannel_ready = bchannel_ready_i;
+genvar i;
+generate
+ for(i=0;i<WR_ISS;i=i+1) begin: for_store
+	if(WR_ISS==1) begin: wr_iss_1
+		assign	const_onehot[i]=(1'h1<<i);
+	end
+	else begin: wr_iss_n
+		assign	const_onehot[i]=({{(WR_ISS-1){1'h0}},1'h1}<<i);
+	end
+        assign  valid_bus_zero_lsb[i]=((~valid_bus[i:0])==const_onehot[i][i:0]);
+        assign  hazard_bus_one_pos[i]={PTR_WIDTH{hazard_bus[i]}}&i;
+        assign  match_bus_one_pos[i]={PTR_WIDTH{match_bus[i]}}&i;
+   always @(*)
+     begin : store_decode
+        if (&valid_bus)
+           store[i] = match_bus[i];
+        else
+            store[i] = valid_bus_zero_lsb[i];
+      end
+ end
+endgenerate
+   always @(*)
+     begin : hazard_num_distibution
+        integer a;
+        hazard_pointer={PTR_WIDTH{1'h0}};
+        for(a=0;a<WR_ISS;a=a+1) begin
+                hazard_pointer=hazard_pointer | hazard_bus_one_pos[a];
+        end
+     end
+   always @(*)
+     begin : match_num_distibution
+        integer a;
+        match_pointer={PTR_WIDTH{1'h0}};
+        for(a=0;a<WR_ISS;a=a+1) begin
+                match_pointer=match_pointer | match_bus_one_pos[a];
+        end
+     end
+    assign push_slice = bchannel_ready_i && bchannel_valid;
+    assign bhndshk = bvalid_m && bready_m_i;
+    assign update = bhndshk;
+    assign pop_slice = update && match;
+    assign bready_m_i = bvalid_m && (bready_s || ~match);
+    assign bready_m   = bready_m_i;
+    assign bid_s = bid_m;
+    assign buser_s=buser_m;
+   always @(*)
+     begin:bresp_a
+        integer a;
+        bresp_out_or={2{1'h0}};
+        for(a=0;a<WR_ISS;a=a+1) begin
+                bresp_out_or=bresp_out_or | bresp_out[a];
+        end
+     end
+    assign bresp_s = (bresp_m
+                      |  bresp_out_or );
+    assign bvalid_s = (bvalid_m && match);
+generate
+for(i=0;i<WR_ISS;i=i+1) begin: resp_cam_slice_inst
+     upsize_resp_cam_slice #(
+	.ID_WIDTH(AWID_WIDTH),
+	.USER_WIDTH(USER_WIDTH),
+	.PTR_WIDTH(PTR_WIDTH)
+	) u_upsize_resp_cam_slice
+     (
+        .aresetn              (aresetn),
+        .aclk                 (aclk),
+        .matchid              (bid_m),
+        .hazardid             (awid),
+        .store                (store[i]),
+        .push_slice           (push_slice),
+        .pop_slice            (pop_slice),
+        .update               (update),
+        .match_pointer        (match_pointer),
+        .hazard_in            (hazard),
+        .hazard_pointer       (hazard_pointer),
+        .n_response           (n_response),
+        .bresp_in             (bresp_m),
+        .hazard               (hazard_bus[i]),
+        .match                (match_bus[i]),
+        .valid                (valid_bus[i]),
+        .bresp_out            (bresp_out[i])
+     );
+end
+endgenerate
+endmodule
