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 zcmcG#W3VVemo0c~+qUnqZQHhO-(%ahZQHhO^B!w%PtVuyb@z*JI(nunA}h1<$J#r0 z?5bQVGfQ3y7z70X0008uSG<760Kjo<(cdQ=KmY)azqPZCy`G7&g|nW$qn)LRku&{& z?4UDu`_FyW_KwA|-B1Gz7$Psc!)9cl$eBdNl70vR_K5|<%{GFtMd2jBmReH_#KGBS zz1g=i(S+#xos5E2F$+k9`&25^<#j^nPJw0R<H65ijMy=!@u~waZ0z!pdQ7prQACsE z(?+efAX@$P^gqi#hg%y~UrG_TrvbM~e&M0_sfg!?km9IF>64Qt73$|7rC`rurmF@h zuS73uZj5_@bjxoTQwUdby93Jq+t3;R4n1>xgSrU{0KlCM0D$zrG<0`+$7{_?r;RqW zpPk-;)a%gg^vG#q5{nS$P#}qQ2`n`6%&((gEdVxOni6Dlz2A5m575>K7Oh^l+tbEm z_1?Z>r`5#c+qrBxmDPy(?02<RGTjP`adzNv	};qw6wX4bP98YTJIxmm6syvc^o; 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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