From 05781fa353a8918c8206e9cc10b7e8aaef5203aa Mon Sep 17 00:00:00 2001
From: dwf1m12 <d.w.flynn@soton.ac.uk>
Date: Wed, 2 Oct 2024 14:36:13 +0100
Subject: [PATCH] refactor socdebug for extio8x4 integration

---
 controller/verilog/socdebug_ahb.v             | 158 +---
 controller/verilog/socdebug_usrt_control.v    | 234 +-----
 .../extio8x4_axis_target_1.0/component.xml    | 690 ++++++++++++++++++
 .../ip_project_archive.zip                    | Bin 0 -> 32864 bytes
 ...labs.org_slip_extio8x4_axis_target_1.0.zip | Bin 0 -> 36618 bytes
 .../src/extio8x4_axis_target.v                | 126 ++++
 .../src/extio8x4_sync.v                       |  46 ++
 .../src/extio8x4_target.xdc                   |   0
 .../src/extio8x4_tfsm.v                       | 313 ++++++++
 .../xgui/extio8x4_axis_target_v1_0.tcl        |  10 +
 10 files changed, 1238 insertions(+), 339 deletions(-)
 create mode 100644 socket/vivado_packages/extio8x4_axis_target_1.0/component.xml
 create mode 100755 socket/vivado_packages/extio8x4_axis_target_1.0/ip_project_archive.zip
 create mode 100644 socket/vivado_packages/extio8x4_axis_target_1.0/soclabs.org_slip_extio8x4_axis_target_1.0.zip
 create mode 100755 socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_axis_target.v
 create mode 100755 socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_sync.v
 create mode 100755 socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_target.xdc
 create mode 100755 socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_tfsm.v
 create mode 100644 socket/vivado_packages/extio8x4_axis_target_1.0/xgui/extio8x4_axis_target_v1_0.tcl

diff --git a/controller/verilog/socdebug_ahb.v b/controller/verilog/socdebug_ahb.v
index cb071de..9676a36 100644
--- a/controller/verilog/socdebug_ahb.v
+++ b/controller/verilog/socdebug_ahb.v
@@ -10,10 +10,7 @@
 //-----------------------------------------------------------------------------
 
 module socdebug_ahb #(
-    parameter         PROMPT_CHAR   = "]",
-    parameter integer FT1248_WIDTH	= 1, // FTDI Interface 1,2,4 width supported
-    parameter integer FT1248_CLKON	= 1,  // FTDI clock always on - else quiet when no access
-    parameter [7:0]   FT1248_CLKDIV = 8'd03 // Clock Division Ratio
+    parameter         PROMPT_CHAR   = "]"
 )(  
     // AHB-lite Master Interface - ADP
     input  wire                     HCLK,
@@ -30,124 +27,29 @@ module socdebug_ahb #(
     input  wire                     HREADY_i,
     input  wire                     HRESP_i,
     
-    // APB Slave Interface - USRT
-    input  wire                     PCLK,        // Clock
-    input  wire                     PCLKG,       // Gated Clock
-    input  wire                     PRESETn,     // Reset
-
-    input  wire                     PSEL_i,      // Device select
-    input  wire              [11:2] PADDR_i,     // Address
-    input  wire                     PENABLE_i,   // Transfer control
-    input  wire                     PWRITE_i,    // Write control
-    input  wire              [31:0] PWDATA_i,    // Write data
- 
-    output wire              [31:0] PRDATA_o,    // Read data
-    output wire                     PREADY_o,    // Device ready
-    output wire                     PSLVERR_o,   // Device error response
+    // USRT0 TXD axi byte stream
+    output wire                     ADP_RXD_TVALID_o,
+    output wire            [ 7:0]   ADP_RXD_TDATA_o ,
+    input  wire                     ADP_RXD_TREADY_i,
+      // USRT0 RXD axi byte stream
+    input  wire                     ADP_TXD_TVALID_i,
+    input  wire             [ 7:0]  ADP_TXD_TDATA_i ,
+    output wire                     ADP_TXD_TREADY_o,
     
-    // FT1248 Interace - FT1248
-    output wire                     FT_CLK_O,    // SCLK
-    output wire                     FT_SSN_O,    // SS_N
-    input  wire                     FT_MISO_I,   // MISO
-    output wire  [FT1248_WIDTH-1:0] FT_MIOSIO_O, // MIOSIO tristate output when enabled
-    output wire  [FT1248_WIDTH-1:0] FT_MIOSIO_E, // MIOSIO tristate output enable (active hi)
-    output wire  [FT1248_WIDTH-1:0] FT_MIOSIO_Z, // MIOSIO tristate output enable (active lo)
-    input  wire  [FT1248_WIDTH-1:0] FT_MIOSIO_I, // MIOSIO tristate input
+    // USRT0 TXD axi byte stream
+    output wire                     STD_RXD_TVALID_o,
+    output wire            [ 7:0]   STD_RXD_TDATA_o ,
+    input  wire                     STD_RXD_TREADY_i,
+      // USRT0 RXD axi byte stream
+    input  wire                     STD_TXD_TVALID_i,
+    input  wire             [ 7:0]  STD_TXD_TDATA_i ,
+    output wire                     STD_TXD_TREADY_o,
     
     // GPIO interface
     output wire               [7:0] GPO8_o,
     input  wire               [7:0] GPI8_i
 );
 
-    // FT1248 to ADP Bus
-    wire        FT1248_ADP_TVALID;
-    wire [ 7:0] FT1248_ADP_TDATA;
-    wire        FT1248_ADP_TREADY;
-    
-    // ADP to FT1248 Bus
-    wire        ADP_FT1248_TVALID;
-    wire [ 7:0] ADP_FT1248_TDATA;
-    wire        ADP_FT1248_TREADY;
-
-    // USRT to ADP Bus
-    wire        USRT_ADP_TVALID;
-    wire [ 7:0] USRT_ADP_TDATA;
-    wire        USRT_ADP_TREADY;
-    
-    // ADP to USRT Bus
-    wire        ADP_USRT_TVALID;
-    wire [ 7:0] ADP_USRT_TDATA;
-    wire        ADP_USRT_TREADY;
-    
-    // Clock Divsion Ratio
-    wire [7:0] FT_CLKDIV;
-    assign FT_CLKDIV = FT1248_CLKDIV;
-    
-    // Instantiation of USRT Controller
-    socdebug_usrt_control u_usrt_control (
-        // APB Clock and Reset Signals
-        .PCLK              (PCLK),     
-        .PCLKG             (PCLKG),    // Gated PCLK for bus
-        .PRESETn           (PRESETn),  
-        
-        // APB Interface Signals
-        .PSEL              (PSEL_i),     
-        .PADDR             (PADDR_i),
-        .PENABLE           (PENABLE_i),
-        .PWRITE            (PWRITE_i),
-        .PWDATA            (PWDATA_i),
-        .PRDATA            (PRDATA_o), 
-        .PREADY            (PREADY_o),
-        .PSLVERR           (PSLVERR_o),
-
-        .ECOREVNUM         (4'h0),
-        
-        // ADP Interface - From USRT to ADP
-        .TX_VALID_o        (USRT_ADP_TVALID),
-        .TX_DATA8_o        (USRT_ADP_TDATA),
-        .TX_READY_i        (USRT_ADP_TREADY),
-
-        // ADP Interface - From ADP to USRT
-        .RX_VALID_i        (ADP_USRT_TVALID),
-        .RX_DATA8_i        (ADP_USRT_TDATA),
-        .RX_READY_o        (ADP_USRT_TREADY),
-        
-        // Interrupt Interfaces
-        .TXINT             ( ),       // Transmit Interrupt
-        .RXINT             ( ),       // Receive  Interrupt
-        .TXOVRINT          ( ),       // Transmit Overrun Interrupt
-        .RXOVRINT          ( ),       // Receive  Overrun Interrupt
-        .UARTINT           ( )        // Combined Interrupt
-    );
-
-    // Instantiation of FT1248 Controller
-    socdebug_ft1248_control #(
-        .FT1248_WIDTH (FT1248_WIDTH),
-        .FT1248_CLKON (FT1248_CLKON) 
-    ) u_ft1248_control (
-        .clk              (HCLK),
-        .resetn           (HRESETn),
-        .ft_clkdiv        (FT_CLKDIV),
-        .ft_clk_o         (FT_CLK_O),
-        .ft_ssn_o         (FT_SSN_O),
-        .ft_miso_i        (FT_MISO_I),
-        .ft_miosio_o      (FT_MIOSIO_O),
-        .ft_miosio_e      (FT_MIOSIO_E),
-        .ft_miosio_z      (FT_MIOSIO_Z),
-        .ft_miosio_i      (FT_MIOSIO_I),
-        
-        // ADP Interface - FT1248 to ADP
-        .txd_tvalid       (FT1248_ADP_TVALID),
-        .txd_tdata        (FT1248_ADP_TDATA),
-        .txd_tready       (FT1248_ADP_TREADY),
-        .txd_tlast        ( ),
-        
-        // ADP Interface - ADP to FT1248
-        .rxd_tvalid       (ADP_FT1248_TVALID),
-        .rxd_tdata        (ADP_FT1248_TDATA),
-        .rxd_tready       (ADP_FT1248_TREADY),
-        .rxd_tlast        (1'b0)
-    );
 
     // Instantiation of ADP AHB Controller
     socdebug_adp_control #(
@@ -173,25 +75,25 @@ module socdebug_ahb #(
         .GPI8_i         (GPI8_i),
         
         // USRT Interface - From ADP to USRT
-        .STDTX_TVALID_o (ADP_USRT_TVALID),
-        .STDTX_TDATA_o  (ADP_USRT_TDATA),
-        .STDTX_TREADY_i (ADP_USRT_TREADY),
+        .STDTX_TVALID_o (STD_RXD_TVALID_o),
+        .STDTX_TDATA_o  (STD_RXD_TDATA_o ),
+        .STDTX_TREADY_i (STD_RXD_TREADY_i),
         
         // USRT Interface - From USRT to ADP
-        .STDRX_TVALID_i (USRT_ADP_TVALID),
-        .STDRX_TDATA_i  (USRT_ADP_TDATA),
-        .STDRX_TREADY_o (USRT_ADP_TREADY),
+        .STDRX_TVALID_i (STD_TXD_TVALID_i),
+        .STDRX_TDATA_i  (STD_TXD_TDATA_i ),
+        .STDRX_TREADY_o (STD_TXD_TREADY_o),
         
         // FT1248 Interface - From FT1248 to ADP
-        .COMRX_TVALID_i (FT1248_ADP_TVALID),
-        .COMRX_TDATA_i  (FT1248_ADP_TDATA),
-        .COMRX_TREADY_o (FT1248_ADP_TREADY),
+        .COMRX_TVALID_i (ADP_TXD_TVALID_i),
+        .COMRX_TDATA_i  (ADP_TXD_TDATA_i ),
+        .COMRX_TREADY_o (ADP_TXD_TREADY_o),
         
         // FT1248 Interface - From ADP to FT1248
-        .COMTX_TVALID_o (ADP_FT1248_TVALID),
-        .COMTX_TDATA_o  (ADP_FT1248_TDATA),
-        .COMTX_TREADY_i (ADP_FT1248_TREADY)
+        .COMTX_TVALID_o (ADP_RXD_TVALID_o),
+        .COMTX_TDATA_o  (ADP_RXD_TDATA_o ),
+        .COMTX_TREADY_i (ADP_RXD_TREADY_i)
     );
 
     
-endmodule
\ No newline at end of file
+endmodule
diff --git a/controller/verilog/socdebug_usrt_control.v b/controller/verilog/socdebug_usrt_control.v
index 7222fbd..768525c 100644
--- a/controller/verilog/socdebug_usrt_control.v
+++ b/controller/verilog/socdebug_usrt_control.v
@@ -39,24 +39,24 @@
 // 0x00 R     RXD[7:0]    Received Data
 //      W     TXD[7:0]    Transmit data
 // 0x04 RW    STAT[3:0]
-//              [3] RX buffer overrun (write 1 to clear)
-//              [2] TX buffer overrun (write 1 to clear)
+//              [3] RX buffer overrun (write 1 to clear)  // 0 for USRT
+//              [2] TX buffer overrun (write 1 to clear)  // 0 for USRT
 //              [1] RX buffer full (Read only)
 //              [0] TX buffer full (Read only)
 // 0x08 RW    CTRL[3:0]   TxIntEn, RxIntEn, TxEn, RxEn
 //              [6] High speed test mode Enable
-//              [5] RX overrun interrupt enable
-//              [4] TX overrun interrupt enable
+//              [5] RX overrun interrupt enable // N/A for USRT
+//              [4] TX overrun interrupt enable // N/A for USRT
 //              [3] RX Interrupt Enable
 //              [2] TX Interrupt Enable
 //              [1] RX Enable
 //              [0] TX Enable
 // 0x0C R/Wc  intr_status/INTCLEAR
-//              [3] RX overrun interrupt
-//              [2] TX overrun interrupt
+//              [3] RX overrun interrupt   // 0 for USRT
+//              [2] TX overrun interrupt   // 0 for USRT
 //              [1] RX interrupt
 //              [0] TX interrupt
-// 0x10 RW    BAUDDIV[19:0] Baud divider
+// 0x10 RW    BAUDDIV[19:0] Baud divider  // Not Used for USRT
 //            (minimum value is 16)
 // 0x3E0 - 0x3FC  ID registers
 //-------------------------------------
@@ -101,13 +101,13 @@ localparam  ARM_CMSDK_APB_UART_PID5 = 8'h00;
 localparam  ARM_CMSDK_APB_UART_PID6 = 8'h00;
 localparam  ARM_CMSDK_APB_UART_PID7 = 8'h00;
 localparam  ARM_CMSDK_APB_UART_PID0 = 8'h21;
-localparam  ARM_CMSDK_APB_UART_PID1 = 8'hB8;
-localparam  ARM_CMSDK_APB_UART_PID2 = 8'h1B;
+localparam  ARM_CMSDK_APB_UART_PID1 = 8'hb8;
+localparam  ARM_CMSDK_APB_UART_PID2 = 8'h1b;
 localparam  ARM_CMSDK_APB_UART_PID3 = 4'h0;
-localparam  ARM_CMSDK_APB_UART_CID0 = 8'h0D;
-localparam  ARM_CMSDK_APB_UART_CID1 = 8'hF0;
+localparam  ARM_CMSDK_APB_UART_CID0 = 8'h0d;
+localparam  ARM_CMSDK_APB_UART_CID1 = 8'hf0;
 localparam  ARM_CMSDK_APB_UART_CID2 = 8'h05;
-localparam  ARM_CMSDK_APB_UART_CID3 = 8'hB1;
+localparam  ARM_CMSDK_APB_UART_CID3 = 8'hb1;
 
 // original external IOs
 wire        RXD = 1'b1; // Serial input
@@ -315,8 +315,6 @@ assign  write_enable10 = write_enable & (PADDR[11:2] == 10'h004);
     end
   end
 
-
-
   // Register read data
   always @(posedge PCLKG or negedge PRESETn)
   begin
@@ -411,7 +409,7 @@ assign  write_enable10 = write_enable & (PADDR[11:2] == 10'h004);
   begin
     if (~PRESETn)
       tx_buf_full     <= 1'b0;
-    else if (write_enable00) // | tx_buf_clear)
+    else if (write_enable00 & reg_ctrl[0]) // | tx_buf_clear)
       tx_buf_full     <= write_enable00;
     else if (tx_buf_full & TX_READY_i) // AXI stream ack
       tx_buf_full <= 0;
@@ -419,159 +417,21 @@ assign  write_enable10 = write_enable & (PADDR[11:2] == 10'h004);
 
   assign TX_VALID_o = tx_buf_full;
 
-  // Increment TickCounter
-  assign nxt_tx_tick_cnt = ((tx_state==4'h1) & reg_baud_tick) ? {5{1'b0}} :
-                        tx_tick_cnt + {{3{1'b0}},reg_baud_tick};
-
-  // Registering TickCounter
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_tick_cnt     <= {4{1'b0}};
-    else if (reg_baud_tick)
-      tx_tick_cnt     <= nxt_tx_tick_cnt[3:0];
-  end
-
-  // Increment state (except Idle(0) and Wait for Tick(1))
-  assign tx_state_inc   = (((&tx_tick_cnt)|(tx_state==4'h1)) & reg_baud_tick)|reg_ctrl[6];
-          // state increment every cycle of high speed test mode is enabled
-  // Clear buffer full status when data is load into shift register
-  assign tx_buf_clear   = ((tx_state==4'h0) & tx_buf_full) |
-                        ((tx_state==4'hB) & tx_buf_full & tx_state_inc);
-
-  // tx_state machine
-  // 0 = Idle, 1 =  Wait for Tick,
-  // 2 = Start bit, 3 = D0 .... 10 = D7
-  // 11 = Stop bit
-  always @(tx_state or tx_buf_full or tx_state_inc or reg_ctrl)
-  begin
-  case (tx_state)
-    0: begin
-       nxt_tx_state = (tx_buf_full & reg_ctrl[0]) ? 5'h01 : 5'h00;  // New data is written to buffer
-       end
-    1,                         // State 1   : Wait for next Tick
-    2,3,4,5,6,7,8,9,10: begin  // State 2-10: Start bit, D0 - D7
-       nxt_tx_state = tx_state + {3'b000,tx_state_inc};
-       end
-    11: begin // Stop bit , goto next start bit or Idle
-       nxt_tx_state = (tx_state_inc) ? ( tx_buf_full ? 5'h02:5'h00) : {1'b0, tx_state};
-       end
-    default:
-       nxt_tx_state = {5{1'bx}};
-  endcase
-  end
-
-  assign tx_state_update = tx_state_inc | ((tx_state==4'h0) & tx_buf_full & reg_ctrl[0]) | (tx_state>4'd11);
-
-  // Registering outputs
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_state        <= {4{1'b0}};
-    else if (tx_state_update)
-      tx_state        <= nxt_tx_state[3:0];
-  end
-
-  // Load/shift TX register
-  assign tx_buf_ctrl_load  = (((tx_state==4'h0) & tx_buf_full) |
-                              ((tx_state==4'hB) & tx_buf_full & tx_state_inc));
-  assign tx_buf_ctrl_shift =  ((tx_state>4'h2) & tx_state_inc);
-
-  assign nxt_tx_shift_buf = tx_buf_ctrl_load ? reg_tx_buf[7:0] : {1'b1,tx_shift_buf[7:1]};
-
-  // Registering TX shift register
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_shift_buf    <= {8{1'b0}};
-    else if (tx_buf_ctrl_shift | tx_buf_ctrl_load)
-      tx_shift_buf    <= nxt_tx_shift_buf;
-  end
-
-  // Data output
-  assign nxt_txd = (tx_state==4'h2) ? 1'b0 :
-                   (tx_state>4'h2) ? tx_shift_buf[0] : 1'b1;
-
-  assign update_reg_txd = (nxt_txd != reg_txd);
-
-  // Registering outputs
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_txd         <= 1'b1;
-    else if (update_reg_txd)
-      reg_txd         <= nxt_txd;
-  end
-
   // Generate TX overrun error status
-  assign tx_overrun = tx_buf_full & (~tx_buf_clear) & write_enable00;
+///  assign tx_overrun = tx_buf_full & (~tx_buf_clear) & write_enable00;
+  assign tx_overrun = tx_buf_full & write_enable00;
 
   // Connect to external
   assign TXD  = reg_txd;
   assign TXEN = reg_ctrl[0];
 
-// --------------------------------------------
-// Receive synchronizer and low pass filter
-
-  // Doubling Flip-flop synxt_rx_tick_cntnchroniser
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      begin
-      rxd_sync_1 <= 1'b1;
-      rxd_sync_2 <= 1'b1;
-      end
-    else if (reg_ctrl[1]) // Turn off synchronizer if receive is not enabled
-      begin
-      rxd_sync_1 <= RXD;
-      rxd_sync_2 <= rxd_sync_1;
-      end
-  end
-
-  // Averaging low pass filter
-  assign nxt_rxd_lpf = {rxd_lpf[1:0], rxd_sync_2};
-  // Registering stage for low pass filter
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rxd_lpf <= 3'b111;
-    else if (reg_baud_tick)
-      rxd_lpf <= nxt_rxd_lpf;
-  end
-
-  // Averaging values
-  assign rx_shift_in = (rxd_lpf[1] & rxd_lpf[0]) |
-                       (rxd_lpf[1] & rxd_lpf[2]) |
-                       (rxd_lpf[0] & rxd_lpf[2]);
 
 // --------------------------------------------
 // Receive
 
-assign RX_READY_o = !rx_buf_full;
-
 
-  // Increment TickCounter
-  assign nxt_rx_tick_cnt = ((rx_state==4'h0) & (~rx_shift_in)) ? 5'h08 :
-                        rx_tick_cnt + {{3{1'b0}},reg_baud_tick};
-
-  assign update_rx_tick_cnt = ((rx_state==4'h0) & (~rx_shift_in)) | reg_baud_tick;
-
-  // Registering other register
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_tick_cnt    <= {4{1'b0}};
-    else if (update_rx_tick_cnt)
-      rx_tick_cnt    <= nxt_rx_tick_cnt[3:0];
-  end
-
-  // Increment state
-  assign rx_state_inc   = ((&rx_tick_cnt) & reg_baud_tick);
-  // Buffer full status
   assign nxt_rx_buf_full = rxbuf_sample | (rx_buf_full & (~rx_data_read));
 
-  // Sample shift register when D7 is sampled
-///  assign rxbuf_sample  = ((rx_state==4'h9) & rx_state_inc);
   assign rxbuf_sample  = RX_VALID_i & !rx_buf_full;
 
   // Reading receive buffer (Set at 1st cycle of APB transfer
@@ -580,81 +440,33 @@ assign RX_READY_o = !rx_buf_full;
   // Generate RX overrun error status
   assign rx_overrun = rx_buf_full & rxbuf_sample & (~rx_data_read);
 
-  // rx_state machine
-  // 0 = Idle, 1 =  Start of Start bit detected
-  // 2 = Sample Start bit, 3 = D0 .... 10 = D7
-  // 11 = Stop bit
-  // 11, 12, 13, 14, 15: illegal/unused states
-  always @(rx_state or rx_shift_in or rx_state_inc or reg_ctrl)
-  begin
-  case (rx_state)
-    0: begin
-       nxt_rx_state = ((~rx_shift_in) & reg_ctrl[1]) ? 5'h01 : 5'h00;  // Wait for Start bit
-       end
-    1,                      // State 1  : Wait for middle of start bit
-    2,3,4,5,6,7,8,9: begin  // State 2-9: D0 - D7
-       nxt_rx_state = rx_state + {3'b000,rx_state_inc};
-       end
-    10: begin // Stop bit , goto back to Idle
-       nxt_rx_state = (rx_state_inc) ? 5'h00 : 5'h0A;
-       end
-    default:
-       nxt_rx_state = {5{1'bx}};
-  endcase
-  end
-
-  assign rx_state_update = rx_state_inc |  ((~rx_shift_in) & reg_ctrl[1]);
-
-  // Registering rx_state
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_state       <= {4{1'b0}};
-    else if (rx_state_update)
-      rx_state       <= nxt_rx_state[3:0];
-  end
-
   // Buffer full status
   always @(posedge PCLK or negedge PRESETn)
   begin
     if (~PRESETn)
       rx_buf_full     <= 1'b0;
-    else if (rxbuf_sample | rx_data_read)
+    else if ( reg_ctrl[1] & (rxbuf_sample | rx_data_read))
       rx_buf_full     <= nxt_rx_buf_full;
   end
 
-  // Sample receive buffer
-///  assign nxt_rx_buf     = {rx_shift_in, rx_shift_buf};
-  assign nxt_rx_buf     = RX_DATA8_i[7:0];
-  
+  assign RX_READY_o = !rx_buf_full;
+
   // Registering receive data buffer
   always @(posedge PCLK or negedge PRESETn)
   begin
     if (~PRESETn)
       reg_rx_buf      <= {8{1'b0}};
     else if  (rxbuf_sample)
-      reg_rx_buf      <= nxt_rx_buf;
+      reg_rx_buf      <=  RX_DATA8_i[7:0];
   end
 
-  // Shift register
-  assign nxt_rx_shift_buf= {rx_shift_in, rx_shift_buf[6:1]};
-  // Registering shift buffer
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_shift_buf    <= {7{1'b0}};
-    else if (rx_state_inc)
-      rx_shift_buf    <= nxt_rx_shift_buf;
-  end
-
-
-
 // --------------------------------------------
 // Interrupts
   // Set by event
-  assign intr_stat_set[1] = reg_ctrl[3] & rxbuf_sample; // A new receive data is sampled
-  assign intr_stat_set[0] = reg_ctrl[2] & reg_ctrl[0] & tx_buf_full & tx_buf_clear;
-                            // Falling edge of buffer full
+///  assign intr_stat_set[1] = reg_ctrl[3] & rxbuf_sample; // A new receive data is sampled
+  assign intr_stat_set[1] = reg_ctrl[3] & reg_ctrl[1] & rxbuf_sample; // A new receive data is sampled
+///  assign intr_stat_set[0] = reg_ctrl[2] & reg_ctrl[0] & tx_buf_full; // & tx_buf_clear;
+  assign intr_stat_set[0] = reg_ctrl[2] & reg_ctrl[0] & tx_buf_full & TX_READY_i; // Falling edge of buffer full
   // Clear by write to IntClear register
   assign intr_stat_clear[1:0] = {2{write_enable0c}} & PWDATA[1:0];
 
diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/component.xml b/socket/vivado_packages/extio8x4_axis_target_1.0/component.xml
new file mode 100644
index 0000000..600b83d
--- /dev/null
+++ b/socket/vivado_packages/extio8x4_axis_target_1.0/component.xml
@@ -0,0 +1,690 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:component xmlns:xilinx="http://www.xilinx.com" xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <spirit:vendor>soclabs.org</spirit:vendor>
+  <spirit:library>slip</spirit:library>
+  <spirit:name>extio8x4_axis_target</spirit:name>
+  <spirit:version>1.0</spirit:version>
+  <spirit:busInterfaces>
+    <spirit:busInterface>
+      <spirit:name>axis_rx0</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis_rtl" spirit:version="1.0"/>
+      <spirit:slave/>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_rx0_tvalid</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_rx0_tready</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_rx0_tdata8</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>axis_rx1</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis_rtl" spirit:version="1.0"/>
+      <spirit:slave/>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_rx1_tvalid</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_rx1_tready</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_rx1_tdata8</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>axis_tx0</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis_rtl" spirit:version="1.0"/>
+      <spirit:master/>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_tx0_tvalid</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_tx0_tready</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_tx0_tdata8</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>axis_tx1</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="axis_rtl" spirit:version="1.0"/>
+      <spirit:master/>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_tx1_tvalid</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_tx1_tready</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>axis_tx1_tdata8</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>resetn</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/>
+      <spirit:slave/>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>RST</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>resetn</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>POLARITY</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.RESETN.POLARITY" spirit:choiceRef="choice_list_9d8b0d81">ACTIVE_LOW</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>clk</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/>
+      <spirit:slave/>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>CLK</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>clk</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>ASSOCIATED_BUSIF</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.CLK.ASSOCIATED_BUSIF">axis_rx0:axis_rx1:axis_tx0:axis_tx1</spirit:value>
+        </spirit:parameter>
+        <spirit:parameter>
+          <spirit:name>ASSOCIATED_RESET</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.CLK.ASSOCIATED_RESET">resetn</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+  </spirit:busInterfaces>
+  <spirit:model>
+    <spirit:views>
+      <spirit:view>
+        <spirit:name>xilinx_anylanguagesynthesis</spirit:name>
+        <spirit:displayName>Synthesis</spirit:displayName>
+        <spirit:envIdentifier>:vivado.xilinx.com:synthesis</spirit:envIdentifier>
+        <spirit:language>Verilog</spirit:language>
+        <spirit:modelName>extio8x4_axis_target</spirit:modelName>
+        <spirit:fileSetRef>
+          <spirit:localName>xilinx_anylanguagesynthesis_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>42b891ef</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+      <spirit:view>
+        <spirit:name>xilinx_anylanguagebehavioralsimulation</spirit:name>
+        <spirit:displayName>Simulation</spirit:displayName>
+        <spirit:envIdentifier>:vivado.xilinx.com:simulation</spirit:envIdentifier>
+        <spirit:language>Verilog</spirit:language>
+        <spirit:modelName>extio8x4_axis_target</spirit:modelName>
+        <spirit:fileSetRef>
+          <spirit:localName>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>42b891ef</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+      <spirit:view>
+        <spirit:name>xilinx_xpgui</spirit:name>
+        <spirit:displayName>UI Layout</spirit:displayName>
+        <spirit:envIdentifier>:vivado.xilinx.com:xgui.ui</spirit:envIdentifier>
+        <spirit:fileSetRef>
+          <spirit:localName>xilinx_xpgui_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>f92e9879</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+      <spirit:view>
+        <spirit:name>archive_project</spirit:name>
+        <spirit:displayName>Miscellaneous</spirit:displayName>
+        <spirit:envIdentifier>:vivado.xilinx.com:misc.files</spirit:envIdentifier>
+        <spirit:fileSetRef>
+          <spirit:localName>archive_project_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>9350a4b0</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+    </spirit:views>
+    <spirit:ports>
+      <spirit:port>
+        <spirit:name>clk</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>resetn</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>testmode</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_rx0_tready</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_rx0_tvalid</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_rx0_tdata8</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">7</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_rx1_tready</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_rx1_tvalid</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_rx1_tdata8</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">7</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_tx0_tready</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+          <spirit:driver>
+            <spirit:defaultValue spirit:format="long">1</spirit:defaultValue>
+          </spirit:driver>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_tx0_tvalid</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_tx0_tdata8</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">7</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_tx1_tready</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+          <spirit:driver>
+            <spirit:defaultValue spirit:format="long">1</spirit:defaultValue>
+          </spirit:driver>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_tx1_tvalid</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>axis_tx1_tdata8</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">7</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>iodata4_i</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">3</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>iodata4_o</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">3</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>iodata4_e</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">3</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>iodata4_t</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">3</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>ioreq1_a</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>ioreq2_a</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>ioack_o</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+    </spirit:ports>
+  </spirit:model>
+  <spirit:choices>
+    <spirit:choice>
+      <spirit:name>choice_list_9d8b0d81</spirit:name>
+      <spirit:enumeration>ACTIVE_HIGH</spirit:enumeration>
+      <spirit:enumeration>ACTIVE_LOW</spirit:enumeration>
+    </spirit:choice>
+  </spirit:choices>
+  <spirit:fileSets>
+    <spirit:fileSet>
+      <spirit:name>xilinx_anylanguagesynthesis_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>src/extio8x4_target.xdc</spirit:name>
+        <spirit:userFileType>xdc</spirit:userFileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>src/extio8x4_sync.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>src/extio8x4_tfsm.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>src/extio8x4_axis_target.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>CHECKSUM_15edbcd4</spirit:userFileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+    </spirit:fileSet>
+    <spirit:fileSet>
+      <spirit:name>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>src/extio8x4_sync.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>src/extio8x4_tfsm.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>src/extio8x4_axis_target.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+    </spirit:fileSet>
+    <spirit:fileSet>
+      <spirit:name>xilinx_xpgui_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>xgui/extio8x4_axis_target_v1_0.tcl</spirit:name>
+        <spirit:fileType>tclSource</spirit:fileType>
+        <spirit:userFileType>CHECKSUM_f92e9879</spirit:userFileType>
+        <spirit:userFileType>XGUI_VERSION_2</spirit:userFileType>
+      </spirit:file>
+    </spirit:fileSet>
+    <spirit:fileSet>
+      <spirit:name>archive_project_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>ip_project_archive.zip</spirit:name>
+        <spirit:userFileType>zip</spirit:userFileType>
+      </spirit:file>
+    </spirit:fileSet>
+  </spirit:fileSets>
+  <spirit:description>extio8x4_axis_target_v1_0</spirit:description>
+  <spirit:parameters>
+    <spirit:parameter>
+      <spirit:name>Component_Name</spirit:name>
+      <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.Component_Name" spirit:order="1">extio8x4_axis_target_v1_0</spirit:value>
+    </spirit:parameter>
+  </spirit:parameters>
+  <spirit:vendorExtensions>
+    <xilinx:coreExtensions>
+      <xilinx:supportedFamilies>
+        <xilinx:family xilinx:lifeCycle="Production">zynquplus</xilinx:family>
+      </xilinx:supportedFamilies>
+      <xilinx:taxonomies>
+        <xilinx:taxonomy>/soclabsIP</xilinx:taxonomy>
+      </xilinx:taxonomies>
+      <xilinx:displayName>extio8x4_axis_target_v1_0</xilinx:displayName>
+      <xilinx:definitionSource>package_project</xilinx:definitionSource>
+      <xilinx:coreRevision>2</xilinx:coreRevision>
+      <xilinx:coreCreationDateTime>2024-10-01T17:09:36Z</xilinx:coreCreationDateTime>
+      <xilinx:tags>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@247831ce_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@3e3d1f50_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@3c1d5142_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@7af2b751_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@6d2b230e_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@6fcfda9d_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@384b91c2_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@779d5616_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@2788228d_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@44a80b53_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@6bb013c9_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@4ec3d82_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@48dc1b5f_ARCHIVE_LOCATION">/home/dwf1m12/work/extio_merge/main/accelerator-project/nanosoc_tech/nanosoc/socdebug_tech/socket/vivado_packages</xilinx:tag>
+      </xilinx:tags>
+    </xilinx:coreExtensions>
+    <xilinx:packagingInfo>
+      <xilinx:xilinxVersion>2021.1</xilinx:xilinxVersion>
+      <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="574beea2"/>
+      <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="bd4732b1"/>
+      <xilinx:checksum xilinx:scope="ports" xilinx:value="d4879326"/>
+      <xilinx:checksum xilinx:scope="parameters" xilinx:value="06f7268c"/>
+      <xilinx:targetDRCs>
+        <xilinx:targetDRC xilinx:tool="ipi">
+          <xilinx:targetDRCOption xilinx:name="ignore_freq_hz" xilinx:value="false"/>
+        </xilinx:targetDRC>
+      </xilinx:targetDRCs>
+    </xilinx:packagingInfo>
+  </spirit:vendorExtensions>
+</spirit:component>
diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/ip_project_archive.zip b/socket/vivado_packages/extio8x4_axis_target_1.0/ip_project_archive.zip
new file mode 100755
index 0000000000000000000000000000000000000000..c6b0b9f00de00928e57497919a859f0b8ec880ae
GIT binary patch
literal 32864
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
N7m#+*spHSz{tv+~87%++

literal 0
HcmV?d00001

diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/soclabs.org_slip_extio8x4_axis_target_1.0.zip b/socket/vivado_packages/extio8x4_axis_target_1.0/soclabs.org_slip_extio8x4_axis_target_1.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..7be620a69d2225e8ba9e6981dfbb7c060bbb4839
GIT binary patch
literal 36618
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

literal 0
HcmV?d00001

diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_axis_target.v b/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_axis_target.v
new file mode 100755
index 0000000..f1fa65b
--- /dev/null
+++ b/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_axis_target.v
@@ -0,0 +1,126 @@
+//-----------------------------------------------------------------------------
+// 8-bit extio transfer over 4-bit data plane - target
+//
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Flynn (d.w.flynn@soton.ac.uk)
+//
+// Copyright (c) 2024, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Abstract : target FSM wrapped with synchronizers
+//-----------------------------------------------------------------------------
+
+
+module extio8x4_axis_target
+  (
+  input  wire       clk,
+  input  wire       resetn,
+  input  wire       testmode,
+// RX 4-channel AXIS interface
+  output wire       axis_rx0_tready, 
+  input  wire       axis_rx0_tvalid,
+  input  wire [7:0] axis_rx0_tdata8,
+  output wire       axis_rx1_tready, 
+  input  wire       axis_rx1_tvalid,
+  input  wire [7:0] axis_rx1_tdata8,
+  input  wire       axis_tx0_tready, 
+  output wire       axis_tx0_tvalid,
+  output wire [7:0] axis_tx0_tdata8,
+  input  wire       axis_tx1_tready, 
+  output wire       axis_tx1_tvalid,
+  output wire [7:0] axis_tx1_tdata8,
+// external io interface
+  input  wire [3:0] iodata4_i,
+  output wire [3:0] iodata4_o,
+  output wire [3:0] iodata4_e,
+  output wire [3:0] iodata4_t,
+  input  wire       ioreq1_a,
+  input  wire       ioreq2_a,
+  output wire       ioack_o
+  );
+
+wire       ioreq1_s;
+wire       ioreq2_s;
+
+extio8x4_sync u_extio8x4_sync_ioreq1
+  (
+  .clk(clk),
+  .resetn(resetn),
+  .testmode(testmode),
+  .sig_a(ioreq1_a),
+  .sig_s(ioreq1_s)
+  );
+
+extio8x4_sync u_extio8x4_sync_ioreq2
+  (
+  .clk(clk),
+  .resetn(resetn),
+  .testmode(testmode),
+  .sig_a(ioreq2_a),
+  .sig_s(ioreq2_s)
+  );
+
+
+extio8x4_tfsm u_extio8x4_tfsm
+  (
+  .clk             ( clk             ),
+  .resetn          ( resetn          ),
+// RX 4-channel AXIS interface
+  .axis_rx0_tready ( axis_rx0_tready ), 
+  .axis_rx0_tvalid ( axis_rx0_tvalid ),
+  .axis_rx0_tdata8 ( axis_rx0_tdata8 ),
+  .axis_rx1_tready ( axis_rx1_tready ), 
+  .axis_rx1_tvalid ( axis_rx1_tvalid ),
+  .axis_rx1_tdata8 ( axis_rx1_tdata8 ),
+  .axis_tx0_tready ( axis_tx0_tready ), 
+  .axis_tx0_tvalid ( axis_tx0_tvalid ),
+  .axis_tx0_tdata8 ( axis_tx0_tdata8 ),
+  .axis_tx1_tready ( axis_tx1_tready ), 
+  .axis_tx1_tvalid ( axis_tx1_tvalid ),
+  .axis_tx1_tdata8 ( axis_tx1_tdata8 ),
+// external io interface
+  .iodata4_i       ( iodata4_i       ),
+  .iodata4_o       ( iodata4_o       ),
+  .iodata4_e       ( iodata4_e       ),
+  .iodata4_t       ( iodata4_t       ),
+  .ioreq1_s        ( ioreq1_s        ),
+  .ioreq2_s        ( ioreq2_s        ),
+  .ioack_o         ( ioack_o         )
+  );
+           
+endmodule
+
+/*
+extio8x4_axis_target u_extio8x4_axis_target
+  (
+  .clk             ( clk             ),
+  .resetn          ( resetn          ),
+  .testmode        ( testmode        ),
+// RX 4-channel AXIS interface
+  .axis_rx0_tready ( axis_rx0_tready ), 
+  .axis_rx0_tvalid ( axis_rx0_tvalid ),
+  .axis_rx0_tdata8 ( axis_rx0_tdata8 ),
+  .axis_rx1_tready ( axis_rx1_tready ), 
+  .axis_rx1_tvalid ( axis_rx1_tvalid ),
+  .axis_rx1_tdata8 ( axis_rx1_tdata8 ),
+  .axis_tx0_tready ( axis_tx0_tready ), 
+  .axis_tx0_tvalid ( axis_tx0_tvalid ),
+  .axis_tx0_tdata8 ( axis_tx0_tdata8 ),
+  .axis_tx1_tready ( axis_tx1_tready ), 
+  .axis_tx1_tvalid ( axis_tx1_tvalid ),
+  .axis_tx1_tdata8 ( axis_tx1_tdata8 ),
+// external io interface
+  .iodata4_i       ( iodata4_i       ),
+  .iodata4_o       ( iodata4_o       ),
+  .iodata4_e       ( iodata4_e       ),
+  .iodata4_t       ( iodata4_t       ),
+  .ioreq1_a        ( ioreq1_i        ),
+  .ioreq2_a        ( ioreq2_i        ),
+  .ioack_o         ( ioack_o         )
+  );
+
+*/
diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_sync.v b/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_sync.v
new file mode 100755
index 0000000..ed8d53f
--- /dev/null
+++ b/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_sync.v
@@ -0,0 +1,46 @@
+//-----------------------------------------------------------------------------
+// 8-bit extio transfer over 4-bit data plane - initiator
+//
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Flynn (d.w.flynn@soton.ac.uk)
+//
+// Copyright (c) 2024, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module extio8x4_sync
+  (
+  input  wire clk,
+  input  wire resetn,
+  input  wire testmode,
+  input  wire sig_a,
+  output wire sig_s
+  );
+
+reg [2:1] sig_r;
+
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    sig_r <= 2'b00; // default
+  else
+    sig_r <= {sig_r[1], sig_a}; // shift left
+end
+
+assign sig_s = (testmode) ? sig_a : sig_r[2];
+
+endmodule
+
+/*
+extio8x4_sync, u_extio8x4_sync_1
+  (
+  .clk(clk),
+  .resetn(resetn),
+  .testmode(testmode),
+  .sig_a(sig_i),
+  .sig_s(sig_s)
+  );
+
+*/
diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_target.xdc b/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_target.xdc
new file mode 100755
index 0000000..e69de29
diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_tfsm.v b/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_tfsm.v
new file mode 100755
index 0000000..b1d7372
--- /dev/null
+++ b/socket/vivado_packages/extio8x4_axis_target_1.0/src/extio8x4_tfsm.v
@@ -0,0 +1,313 @@
+//-----------------------------------------------------------------------------
+// 8-bit extio transfer over 4-bit data plane - target
+//
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Flynn (d.w.flynn@soton.ac.uk)
+//
+// Copyright (c) 2024, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Abstract : Initiator state machine and sequencer
+//-----------------------------------------------------------------------------
+
+
+module extio8x4_tfsm
+  (
+  input  wire       clk,
+  input  wire       resetn,
+// RX 4-channel AXIS interface
+  output wire       axis_rx0_tready, 
+  input  wire       axis_rx0_tvalid,
+  input  wire [7:0] axis_rx0_tdata8,
+  output wire       axis_rx1_tready, 
+  input  wire       axis_rx1_tvalid,
+  input  wire [7:0] axis_rx1_tdata8,
+  input  wire       axis_tx0_tready, 
+  output wire       axis_tx0_tvalid,
+  output wire [7:0] axis_tx0_tdata8,
+  input  wire       axis_tx1_tready, 
+  output wire       axis_tx1_tvalid,
+  output wire [7:0] axis_tx1_tdata8,
+// external io interface
+  input  wire [3:0] iodata4_i,
+  output wire [3:0] iodata4_o,
+  output wire [3:0] iodata4_e,
+  output wire [3:0] iodata4_t,
+  input  wire       ioreq1_s,
+  input  wire       ioreq2_s,
+  output wire       ioack_o
+  );
+
+
+// axis request per channel to FSM, hold until ack
+wire rx0_axis_req;
+wire rx1_axis_req;
+wire tx0_axis_req;
+wire tx1_axis_req;
+// axis request acknowledge per channel, from FSM, 1-cycle pulse
+wire rx0_axis_ack;
+wire rx1_axis_ack;
+wire tx0_axis_ack;
+wire tx1_axis_ack;
+
+reg req_rx0;
+reg req_rx1;
+reg req_tx0;
+reg req_tx1;
+
+// data ports
+wire [7:0] tx_axis_rdata8;
+wire [7:0] rx0_axis_wdata8;
+wire [7:0] rx1_axis_wdata8;
+
+
+wire ack_nxt = ioreq1_s ^ ioreq2_s;
+
+reg ack;
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    ack <= 1'b0;
+  else
+    ack <= ack_nxt;
+end
+
+wire ack_change = ack ^ ack_nxt;
+
+
+// state[0] = ACK
+// state[1] = CTL4_EN
+// state[2] = RD4H_EN
+// state[3] = RD4L_EN
+// state[4] = STAT_EN
+// state[5] = WD4H_EN
+// state[6] = WD4L_EN
+              
+
+localparam STAT = 8'b0_001_000_0;
+localparam RXC1 = 8'b0_000_001_1;
+localparam RXDH = 8'b0_000_010_0;                     
+localparam RXDL = 8'b0_000_100_1;                     
+localparam RXDZ = 8'b0_000_000_0;                     
+localparam STAZ = 8'b0_001_000_1;
+
+localparam TXCZ = 8'b1_000_000_0;                     
+localparam TXDH = 8'b1_010_000_1;                     
+localparam TXDL = 8'b1_100_000_0;                     
+
+reg  [7:0] fsm_state;
+reg  [7:0] nxt_fsm_state;
+
+// ifsm next-state seqeuncer                                             
+always @(*)
+  case (fsm_state)
+  STAT: nxt_fsm_state = ( ioreq1_s) ? RXC1 : STAT;
+  RXC1: nxt_fsm_state = (!ioreq2_s) ? RXC1 : (iodata4_i[0]) ? TXCZ : RXDH;
+  RXDH: nxt_fsm_state = ( ioreq2_s) ? RXDH : RXDL;
+  RXDL: nxt_fsm_state = (!ioreq2_s) ? RXDL : RXDZ;
+  RXDZ: nxt_fsm_state = ( ioreq2_s) ? RXDZ : STAZ;
+  STAZ: nxt_fsm_state = ( ioreq1_s) ? STAZ : STAT;
+  TXCZ: nxt_fsm_state = ( ioreq2_s) ? TXCZ : TXDH;
+  TXDH: nxt_fsm_state = (!ioreq2_s) ? TXDH : TXDL;
+  TXDL: nxt_fsm_state = ( ioreq2_s) ? TXDL : STAZ;
+  default:  nxt_fsm_state = STAT;
+  endcase
+
+// state update
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn) begin
+    fsm_state <= STAT;
+  end else
+    fsm_state <= nxt_fsm_state;
+  end
+
+assign ioack_o = fsm_state[0];
+// 3 input sample enable
+wire cmd_state = fsm_state[1];
+wire rdh_state = fsm_state[2];
+wire rdl_state = fsm_state[3];
+// 3 output enable
+wire fif_state = fsm_state[4];
+wire wdh_state = fsm_state[5];
+wire wdl_state = fsm_state[6];
+
+// command resister
+reg [3:0] cmd4;
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    cmd4 <= 4'b1111; // invalid xfer pattern
+  else if (cmd_state & ack_change)
+    cmd4 <= iodata4_i[3:0];
+end
+
+wire [3:0] fifo_stat = ~{req_tx1, req_rx1, req_tx0, req_rx0 };
+// IO Write Data
+assign iodata4_o = ({4{fif_state}} & fifo_stat)
+                 | ({4{wdh_state}} & ((cmd4[1]) ? rx1_axis_wdata8[7:4] : rx0_axis_wdata8[7:4]))
+                 | ({4{wdl_state}} & ((cmd4[1]) ? rx1_axis_wdata8[3:0] : rx0_axis_wdata8[3:0]))
+                 ;
+
+assign iodata4_e = {4{|(fsm_state[6:4])}};
+assign iodata4_t = {4{!iodata4_e}};
+
+// and ack
+assign rx0_axis_ack = !cmd4[1] &  cmd4[0] & wdl_state & ack_change;
+assign rx1_axis_ack =  cmd4[1] &  cmd4[0] & wdl_state & ack_change;
+
+// IO Read data
+// first register high nibble read data
+reg [3:0] rd4_hi;
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    rd4_hi <= 4'b0000; // initialize
+  else if (rdh_state & ack_change)
+    rd4_hi <= iodata4_i[3:0];
+end
+
+assign tx_axis_rdata8 = {rd4_hi[3:0],iodata4_i[3:0]};
+
+// then ack with 8-bit data to selected axis buffer
+assign tx0_axis_ack = !cmd4[1] & !cmd4[0] & rdl_state & ack_change;
+assign tx1_axis_ack =  cmd4[1] & !cmd4[0] & rdl_state & ack_change;
+
+// stream buffers with valid qualifiers
+reg [8:0] rx0_reg9;
+reg [8:0] rx1_reg9;
+reg [8:0] tx0_reg9;
+reg [8:0] tx1_reg9;
+
+// axis RX1 port interface
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    rx0_reg9 <= 9'b0_00000000;
+  else begin
+    if (!rx0_reg9[8] & axis_rx0_tvalid) rx0_reg9 <= {1'b1,axis_rx0_tdata8[7:0]};
+    else if (rx0_reg9[8] & rx0_axis_ack) rx0_reg9[8] <= 1'b0;
+    end
+end
+assign axis_rx0_tready = !rx0_reg9[8];
+assign rx0_axis_wdata8 =  rx0_reg9[7:0];
+assign rx0_axis_req    =  rx0_reg9[8] & !fsm_state[2] & !fsm_state[3];
+
+// axis RX2 port interface
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    rx1_reg9 <= 9'b0_00000000;
+  else begin
+    if (!rx1_reg9[8] & axis_rx1_tvalid) rx1_reg9 <= {1'b1,axis_rx1_tdata8[7:0]};
+    else if (rx1_reg9[8] & rx1_axis_ack)  rx1_reg9[8] <= 1'b0;
+    end
+end
+assign axis_rx1_tready = !rx1_reg9[8];
+assign rx1_axis_wdata8 =  rx1_reg9[7:0];
+assign rx1_axis_req    =  rx1_reg9[8] & !fsm_state[2] & !fsm_state[3];
+
+// axis TX1 port interface
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    tx0_reg9 <= 9'b0_00000000;
+  else begin
+    if (!tx0_reg9[8] & tx0_axis_ack) tx0_reg9 <= {1'b1,tx_axis_rdata8[7:0]};
+    else if (tx0_reg9[8] & axis_tx0_tready)  tx0_reg9[8] <= 1'b0;
+    end
+end
+assign axis_tx0_tvalid = tx0_reg9[8];
+assign axis_tx0_tdata8[7:0] = tx0_reg9[7:0];
+assign tx0_axis_req = !tx0_reg9[8];
+
+// axis tx2 port interextio8x4_ifsmface
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    tx1_reg9 <= 9'b0_00000000;
+  else begin
+    if (!tx1_reg9[8] & tx1_axis_ack) tx1_reg9 <= {1'b1,tx_axis_rdata8[7:0]};
+    else if (tx1_reg9[8] & axis_tx1_tready)  tx1_reg9[8] <= 1'b0;
+    end
+end
+assign axis_tx1_tvalid = tx1_reg9[8];
+assign axis_tx1_tdata8[7:0] = tx1_reg9[7:0];
+assign tx1_axis_req = !tx1_reg9[8];
+
+
+// request handshake
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    req_rx0 <= 1'b0; // avoid X propagation
+  else if (rx0_axis_req & !req_rx0) // capture rx_req front edge
+    req_rx0 <= 1'b1;
+  else if (rx0_axis_ack & req_rx0)
+    req_rx0 <= 1'b0;
+end
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    req_rx1 <= 1'b0; // avoid X propagation
+  else if (rx1_axis_req & !req_rx1) // capture rx_req front edge
+    req_rx1 <= 1'b1;
+  else if (rx1_axis_ack & req_rx1)
+    req_rx1 <= 1'b0;
+end
+
+// request handshake
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    req_tx0 <= 1'b0; // avoid X propagation
+  else if (tx0_axis_req & !req_tx0) // capture tx_req front edge
+    req_tx0 <= 1'b1;
+  else if (tx0_axis_ack & req_tx0)
+    req_tx0 <= 1'b0;
+end
+always @(posedge clk or negedge resetn)
+begin
+  if (!resetn)
+    req_tx1 <= 1'b0; // avoid X propagation
+  else if (tx1_axis_req & !req_tx1) // capture tx_req front edge
+    req_tx1 <= 1'b1;
+  else if (tx1_axis_ack & req_tx1)
+    req_tx1 <= 1'b0;
+end
+
+endmodule
+
+/*
+extio8x4_ifsm u_extio8x4_tfsm
+  (
+  .clk             ( clk             ),
+  .resetn          ( resetn          ),
+// RX 4-channel AXIS interface
+  .axis_rx0_tready ( axis_rx0_tready ), 
+  .axis_rx0_tvalid ( axis_rx0_tvalid ),
+  .axis_rx0_tdata8 ( axis_rx0_tdata8 ),
+  .axis_rx1_tready ( axis_rx1_tready ), 
+  .axis_rx1_tvalid ( axis_rx1_tvalid ),
+  .axis_rx1_tdata8 ( axis_rx1_tdata8 ),
+  .axis_tx0_tready ( axis_tx0_tready ), 
+  .axis_tx0_tvalid ( axis_tx0_tvalid ),
+  .axis_tx0_tdata8 ( axis_tx0_tdata8 ),
+  .axis_tx1_tready ( axis_tx1_tready ), 
+  .axis_tx1_tvalid ( axis_tx1_tvalid ),
+  .axis_tx1_tdata8 ( axis_tx1_tdata8 ),
+// external io interface
+  .iodata4_i       ( iodata4_i       ),
+  .iodata4_o       ( iodata4_o       ),
+  .iodata4_e       ( iodata4_e       ),
+  .iodata4_t       ( iodata4_t       ),
+  .ioreq1_s        ( ioreq1_s        ),
+  .ioreq2_s        ( ioreq2_s        ),
+  .ioack_o         ( ioack_o         )
+  );
+
+*/
diff --git a/socket/vivado_packages/extio8x4_axis_target_1.0/xgui/extio8x4_axis_target_v1_0.tcl b/socket/vivado_packages/extio8x4_axis_target_1.0/xgui/extio8x4_axis_target_v1_0.tcl
new file mode 100644
index 0000000..0db18e9
--- /dev/null
+++ b/socket/vivado_packages/extio8x4_axis_target_1.0/xgui/extio8x4_axis_target_v1_0.tcl
@@ -0,0 +1,10 @@
+# Definitional proc to organize widgets for parameters.
+proc init_gui { IPINST } {
+  ipgui::add_param $IPINST -name "Component_Name"
+  #Adding Page
+  ipgui::add_page $IPINST -name "Page 0"
+
+
+}
+
+
-- 
GitLab