From 96725d36c8ce0f0eda0258540fdea940567684a2 Mon Sep 17 00:00:00 2001
From: dwf1m12 <d.w.flynn@soton.ac.uk>
Date: Wed, 17 Aug 2022 22:09:19 +0100
Subject: [PATCH] add local ip_repo with integration components and update
 associated tcl build scripts

---
 .../ip_repo/axi_stream_io_1.0/bd/bd.tcl       |   86 +
 .../ip_repo/axi_stream_io_1.0/component.xml   | 1456 +++++++++++++++++
 .../axi_stream_io_v1_0/data/axi_stream_io.mdd |   10 +
 .../axi_stream_io_v1_0/data/axi_stream_io.tcl |    5 +
 .../drivers/axi_stream_io_v1_0/src/Makefile   |   26 +
 .../axi_stream_io_v1_0/src/axi_stream_io.c    |    6 +
 .../axi_stream_io_v1_0/src/axi_stream_io.h    |   79 +
 .../src/axi_stream_io_selftest.c              |   60 +
 .../soclabs.org_user_axi_stream_io_1.0.zip    |  Bin 0 -> 15835 bytes
 .../src/axi_stream_io_v1_0_axi_s.v            |  424 +++++
 .../xgui/axi_stream_io_v1_0.tcl               |   58 +
 .../ip_repo/ft1248x1_to_stream8_1.0/bd/bd.tcl |   86 +
 .../ft1248x1_to_stream8_1.0/component.xml     |  489 ++++++
 .../ft1248x1_to_stream8_0.xcix                |  Bin 0 -> 253 bytes
 .../hdl/ft1248x1_to_stream8_v1_0.v            |   75 +
 .../hdl/ft1248x1_to_stream8_v1_0_RXD8.v       |  167 ++
 .../hdl/ft1248x1_to_stream8_v1_0_TXD8.v       |  228 +++
 .../ip_project_archive.zip                    |  Bin 0 -> 19366 bytes
 ...clabs.org_user_ft1248x1_to_stream8_1.0.zip |  Bin 0 -> 22475 bytes
 .../src/ft1248x1_to_stream8.v                 |  187 +++
 .../ft1248x1_to_stream8_1.0/src/synclib.v     |  139 ++
 .../xgui/ft1248x1_to_stream8_v1_0.tcl         |   10 +
 .../fpga_imp/scripts/build_mcu_fpga_ip.tcl    |    4 +-
 .../scripts/build_mcu_fpga_pynq_z2.tcl        |   13 +-
 .../scripts/build_mcu_fpga_pynq_zcu104.tcl    |   14 +-
 25 files changed, 3605 insertions(+), 17 deletions(-)
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/bd/bd.tcl
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/component.xml
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.mdd
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.tcl
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/Makefile
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.c
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.h
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io_selftest.c
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/soclabs.org_user_axi_stream_io_1.0.zip
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/src/axi_stream_io_v1_0_axi_s.v
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/xgui/axi_stream_io_v1_0.tcl
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/bd/bd.tcl
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/component.xml
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/ft1248x1_to_stream8_0.xcix
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0.v
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_RXD8.v
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_TXD8.v
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/ip_project_archive.zip
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/soclabs.org_user_ft1248x1_to_stream8_1.0.zip
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/ft1248x1_to_stream8.v
 create mode 100755 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/synclib.v
 create mode 100644 Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/xgui/ft1248x1_to_stream8_v1_0.tcl

diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/bd/bd.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/bd/bd.tcl
new file mode 100755
index 0000000..690e4e1
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/bd/bd.tcl
@@ -0,0 +1,86 @@
+
+proc init { cellpath otherInfo } {                                                                   
+                                                                                                             
+	set cell_handle [get_bd_cells $cellpath]                                                                 
+	set all_busif [get_bd_intf_pins $cellpath/*]		                                                     
+	set axi_standard_param_list [list ID_WIDTH AWUSER_WIDTH ARUSER_WIDTH WUSER_WIDTH RUSER_WIDTH BUSER_WIDTH]
+	set full_sbusif_list [list  ]
+			                                                                                                 
+	foreach busif $all_busif {                                                                               
+		if { [string equal -nocase [get_property MODE $busif] "slave"] == 1 } {                            
+			set busif_param_list [list]                                                                      
+			set busif_name [get_property NAME $busif]					                                     
+			if { [lsearch -exact -nocase $full_sbusif_list $busif_name ] == -1 } {					         
+			    continue                                                                                     
+			}                                                                                                
+			foreach tparam $axi_standard_param_list {                                                        
+				lappend busif_param_list "C_${busif_name}_${tparam}"                                       
+			}                                                                                                
+			bd::mark_propagate_only $cell_handle $busif_param_list			                                 
+		}		                                                                                             
+	}                                                                                                        
+}
+
+
+proc pre_propagate {cellpath otherInfo } {                                                           
+                                                                                                             
+	set cell_handle [get_bd_cells $cellpath]                                                                 
+	set all_busif [get_bd_intf_pins $cellpath/*]		                                                     
+	set axi_standard_param_list [list ID_WIDTH AWUSER_WIDTH ARUSER_WIDTH WUSER_WIDTH RUSER_WIDTH BUSER_WIDTH]
+	                                                                                                         
+	foreach busif $all_busif {	                                                                             
+		if { [string equal -nocase [get_property CONFIG.PROTOCOL $busif] "AXI4"] != 1 } {                  
+			continue                                                                                         
+		}                                                                                                    
+		if { [string equal -nocase [get_property MODE $busif] "master"] != 1 } {                           
+			continue                                                                                         
+		}			                                                                                         
+		                                                                                                     
+		set busif_name [get_property NAME $busif]			                                                 
+		foreach tparam $axi_standard_param_list {		                                                     
+			set busif_param_name "C_${busif_name}_${tparam}"			                                     
+			                                                                                                 
+			set val_on_cell_intf_pin [get_property CONFIG.${tparam} $busif]                                  
+			set val_on_cell [get_property CONFIG.${busif_param_name} $cell_handle]                           
+			                                                                                                 
+			if { [string equal -nocase $val_on_cell_intf_pin $val_on_cell] != 1 } {                          
+				if { $val_on_cell != "" } {                                                                  
+					set_property CONFIG.${tparam} $val_on_cell $busif                                        
+				}                                                                                            
+			}			                                                                                     
+		}		                                                                                             
+	}                                                                                                        
+}
+
+
+proc propagate {cellpath otherInfo } {                                                               
+                                                                                                             
+	set cell_handle [get_bd_cells $cellpath]                                                                 
+	set all_busif [get_bd_intf_pins $cellpath/*]		                                                     
+	set axi_standard_param_list [list ID_WIDTH AWUSER_WIDTH ARUSER_WIDTH WUSER_WIDTH RUSER_WIDTH BUSER_WIDTH]
+	                                                                                                         
+	foreach busif $all_busif {                                                                               
+		if { [string equal -nocase [get_property CONFIG.PROTOCOL $busif] "AXI4"] != 1 } {                  
+			continue                                                                                         
+		}                                                                                                    
+		if { [string equal -nocase [get_property MODE $busif] "slave"] != 1 } {                            
+			continue                                                                                         
+		}			                                                                                         
+	                                                                                                         
+		set busif_name [get_property NAME $busif]		                                                     
+		foreach tparam $axi_standard_param_list {			                                                 
+			set busif_param_name "C_${busif_name}_${tparam}"			                                     
+                                                                                                             
+			set val_on_cell_intf_pin [get_property CONFIG.${tparam} $busif]                                  
+			set val_on_cell [get_property CONFIG.${busif_param_name} $cell_handle]                           
+			                                                                                                 
+			if { [string equal -nocase $val_on_cell_intf_pin $val_on_cell] != 1 } {                          
+				#override property of bd_interface_net to bd_cell -- only for slaves.  May check for supported values..
+				if { $val_on_cell_intf_pin != "" } {                                                         
+					set_property CONFIG.${busif_param_name} $val_on_cell_intf_pin $cell_handle               
+				}                                                                                            
+			}                                                                                                
+		}		                                                                                             
+	}                                                                                                        
+}
+
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/component.xml b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/component.xml
new file mode 100755
index 0000000..afd116f
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/component.xml
@@ -0,0 +1,1456 @@
+<?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>user</spirit:library>
+  <spirit:name>axi_stream_io</spirit:name>
+  <spirit:version>1.0</spirit:version>
+  <spirit:busInterfaces>
+    <spirit:busInterface>
+      <spirit:name>S_AXI</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="aximm" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="aximm_rtl" spirit:version="1.0"/>
+      <spirit:slave>
+        <spirit:memoryMapRef spirit:memoryMapRef="S_AXI"/>
+      </spirit:slave>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>BVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_BVALID</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>RREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_RREADY</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>BREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_BREADY</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>AWVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_AWVALID</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>AWREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_AWREADY</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>AWPROT</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_AWPROT</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>WDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_WDATA</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>RRESP</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_RRESP</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>ARPROT</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_ARPROT</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>RVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_RVALID</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>ARADDR</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_ARADDR</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>AWADDR</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_AWADDR</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>ARREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_ARREADY</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>WVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_WVALID</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>WREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_WREADY</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>ARVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_ARVALID</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>WSTRB</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_WSTRB</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>BRESP</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_BRESP</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>RDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>S_AXI_RDATA</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>WIZ_DATA_WIDTH</spirit:name>
+          <spirit:value spirit:format="long" spirit:id="BUSIFPARAM_VALUE.S_AXI.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value>
+        </spirit:parameter>
+        <spirit:parameter>
+          <spirit:name>WIZ_NUM_REG</spirit:name>
+          <spirit:value spirit:format="long" spirit:id="BUSIFPARAM_VALUE.S_AXI.WIZ_NUM_REG" spirit:minimum="4" spirit:maximum="512" spirit:rangeType="long">4</spirit:value>
+        </spirit:parameter>
+        <spirit:parameter>
+          <spirit:name>SUPPORTS_NARROW_BURST</spirit:name>
+          <spirit:value spirit:format="long" spirit:id="BUSIFPARAM_VALUE.S_AXI.SUPPORTS_NARROW_BURST" spirit:choiceRef="choice_pairs_ce1226b1">0</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>rx</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>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>rx_tdata</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>rx_tvalid</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>rx_tready</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>WIZ_DATA_WIDTH</spirit:name>
+          <spirit:value spirit:format="long" spirit:id="BUSIFPARAM_VALUE.RX.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>tx</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>tx_tvalid</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>tx_tdata</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>tx_tready</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>WIZ_DATA_WIDTH</spirit:name>
+          <spirit:value spirit:format="long" spirit:id="BUSIFPARAM_VALUE.TX.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>interrupt</spirit:name>
+      <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt" spirit:version="1.0"/>
+      <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt_rtl" spirit:version="1.0"/>
+      <spirit:master/>
+      <spirit:portMaps>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>INTERRUPT</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>interrupt</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>SENSITIVITY</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.INTERRUPT.SENSITIVITY" spirit:choiceRef="choice_list_99a1d2b9">LEVEL_HIGH</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>S_AXI_ACLK</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>S_AXI_ACLK</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>ASSOCIATED_RESET</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.ASSOCIATED_RESET">S_AXI_ARESETN</spirit:value>
+        </spirit:parameter>
+        <spirit:parameter>
+          <spirit:name>ASSOCIATED_BUSIF</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.ASSOCIATED_BUSIF">rx:tx:S_AXI</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>S_AXI_ARESETN</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>S_AXI_ARESETN</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+      <spirit:parameters>
+        <spirit:parameter>
+          <spirit:name>POLARITY</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_ARESETN.POLARITY" spirit:choiceRef="choice_list_9d8b0d81">ACTIVE_LOW</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+  </spirit:busInterfaces>
+  <spirit:memoryMaps>
+    <spirit:memoryMap>
+      <spirit:name>S_AXI</spirit:name>
+      <spirit:addressBlock>
+        <spirit:name>Reg</spirit:name>
+        <spirit:baseAddress spirit:format="long">0</spirit:baseAddress>
+        <spirit:range spirit:format="long">4096</spirit:range>
+        <spirit:width spirit:format="long">0</spirit:width>
+        <spirit:register>
+          <spirit:name>RX_FIFO</spirit:name>
+          <spirit:displayName>RX FIFO</spirit:displayName>
+          <spirit:description>Data RX FIFO</spirit:description>
+          <spirit:addressOffset>0x00</spirit:addressOffset>
+          <spirit:size spirit:format="long">1</spirit:size>
+        </spirit:register>
+        <spirit:register>
+          <spirit:name>TX_FIFO</spirit:name>
+          <spirit:displayName>TX_FIFO</spirit:displayName>
+          <spirit:description>Data TX FIFO</spirit:description>
+          <spirit:addressOffset>0x04</spirit:addressOffset>
+          <spirit:size spirit:format="long">1</spirit:size>
+        </spirit:register>
+        <spirit:register>
+          <spirit:name>STAT_REG</spirit:name>
+          <spirit:displayName>STAT_REG</spirit:displayName>
+          <spirit:description>Status register</spirit:description>
+          <spirit:addressOffset>0x08</spirit:addressOffset>
+          <spirit:size spirit:format="long">1</spirit:size>
+        </spirit:register>
+        <spirit:register>
+          <spirit:name>CTRL_REG</spirit:name>
+          <spirit:displayName>CTRL_REG</spirit:displayName>
+          <spirit:description>Control register</spirit:description>
+          <spirit:addressOffset>0x0c</spirit:addressOffset>
+          <spirit:size spirit:format="long">1</spirit:size>
+        </spirit:register>
+      </spirit:addressBlock>
+    </spirit:memoryMap>
+  </spirit:memoryMaps>
+  <spirit:model>
+    <spirit:views>
+      <spirit:view>
+        <spirit:name>xilinx_verilogsynthesis</spirit:name>
+        <spirit:displayName>Verilog Synthesis</spirit:displayName>
+        <spirit:envIdentifier>verilogSource:vivado.xilinx.com:synthesis</spirit:envIdentifier>
+        <spirit:language>verilog</spirit:language>
+        <spirit:modelName>iostream_v1_0_axi</spirit:modelName>
+        <spirit:fileSetRef>
+          <spirit:localName>xilinx_verilogsynthesis_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>fc7589fa</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+      <spirit:view>
+        <spirit:name>xilinx_verilogbehavioralsimulation</spirit:name>
+        <spirit:displayName>Verilog Simulation</spirit:displayName>
+        <spirit:envIdentifier>verilogSource:vivado.xilinx.com:simulation</spirit:envIdentifier>
+        <spirit:language>verilog</spirit:language>
+        <spirit:modelName>iostream_v1_0_axi</spirit:modelName>
+        <spirit:fileSetRef>
+          <spirit:localName>xilinx_verilogbehavioralsimulation_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>fc7589fa</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+      <spirit:view>
+        <spirit:name>xilinx_softwaredriver</spirit:name>
+        <spirit:displayName>Software Driver</spirit:displayName>
+        <spirit:envIdentifier>:vivado.xilinx.com:sw.driver</spirit:envIdentifier>
+        <spirit:fileSetRef>
+          <spirit:localName>xilinx_softwaredriver_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>ec44730d</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>1b3a39eb</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+      <spirit:view>
+        <spirit:name>bd_tcl</spirit:name>
+        <spirit:displayName>Block Diagram</spirit:displayName>
+        <spirit:envIdentifier>:vivado.xilinx.com:block.diagram</spirit:envIdentifier>
+        <spirit:fileSetRef>
+          <spirit:localName>bd_tcl_view_fileset</spirit:localName>
+        </spirit:fileSetRef>
+        <spirit:parameters>
+          <spirit:parameter>
+            <spirit:name>viewChecksum</spirit:name>
+            <spirit:value>16328387</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+    </spirit:views>
+    <spirit:ports>
+      <spirit:port>
+        <spirit:name>interrupt</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>tx_tvalid</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>tx_tdata</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_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>tx_tready</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>rx_tready</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>rx_tdata</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_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>rx_tvalid</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_ACLK</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_ARESETN</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_AWADDR</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id(&apos;MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH&apos;)) - 1)">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_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_AWPROT</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">2</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_AWVALID</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_AWREADY</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_WDATA</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id(&apos;MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH&apos;)) - 1)">31</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_WSTRB</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="((spirit:decode(id(&apos;MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH&apos;)) / 8) - 1)">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_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_WVALID</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_WREADY</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_BRESP</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">1</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_BVALID</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_BREADY</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_ARADDR</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id(&apos;MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH&apos;)) - 1)">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_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_ARPROT</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">2</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_ARVALID</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_ARREADY</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_RDATA</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id(&apos;MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH&apos;)) - 1)">31</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_RRESP</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:vector>
+            <spirit:left spirit:format="long">1</spirit:left>
+            <spirit:right spirit:format="long">0</spirit:right>
+          </spirit:vector>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_RVALID</spirit:name>
+        <spirit:wire>
+          <spirit:direction>out</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>S_AXI_RREADY</spirit:name>
+        <spirit:wire>
+          <spirit:direction>in</spirit:direction>
+          <spirit:wireTypeDefs>
+            <spirit:wireTypeDef>
+              <spirit:typeName>wire</spirit:typeName>
+              <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef>
+              <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef>
+            </spirit:wireTypeDef>
+          </spirit:wireTypeDefs>
+        </spirit:wire>
+      </spirit:port>
+    </spirit:ports>
+    <spirit:modelParameters>
+      <spirit:modelParameter xsi:type="spirit:nameValueTypeType" spirit:dataType="integer">
+        <spirit:name>C_S_AXI_DATA_WIDTH</spirit:name>
+        <spirit:displayName>C S Axi Data Width</spirit:displayName>
+        <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH">32</spirit:value>
+      </spirit:modelParameter>
+      <spirit:modelParameter spirit:dataType="integer">
+        <spirit:name>C_S_AXI_ADDR_WIDTH</spirit:name>
+        <spirit:displayName>C S Axi Addr Width</spirit:displayName>
+        <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH">4</spirit:value>
+      </spirit:modelParameter>
+    </spirit:modelParameters>
+  </spirit:model>
+  <spirit:choices>
+    <spirit:choice>
+      <spirit:name>choice_list_6fc15197</spirit:name>
+      <spirit:enumeration>32</spirit:enumeration>
+    </spirit:choice>
+    <spirit:choice>
+      <spirit:name>choice_list_99a1d2b9</spirit:name>
+      <spirit:enumeration>LEVEL_HIGH</spirit:enumeration>
+      <spirit:enumeration>LEVEL_LOW</spirit:enumeration>
+      <spirit:enumeration>EDGE_RISING</spirit:enumeration>
+      <spirit:enumeration>EDGE_FALLING</spirit:enumeration>
+    </spirit:choice>
+    <spirit:choice>
+      <spirit:name>choice_list_9d8b0d81</spirit:name>
+      <spirit:enumeration>ACTIVE_HIGH</spirit:enumeration>
+      <spirit:enumeration>ACTIVE_LOW</spirit:enumeration>
+    </spirit:choice>
+    <spirit:choice>
+      <spirit:name>choice_pairs_ce1226b1</spirit:name>
+      <spirit:enumeration spirit:text="true">1</spirit:enumeration>
+      <spirit:enumeration spirit:text="false">0</spirit:enumeration>
+    </spirit:choice>
+  </spirit:choices>
+  <spirit:fileSets>
+    <spirit:fileSet>
+      <spirit:name>xilinx_verilogsynthesis_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>src/axi_stream_io_v1_0_axi_s.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>CHECKSUM_fc7589fa</spirit:userFileType>
+      </spirit:file>
+    </spirit:fileSet>
+    <spirit:fileSet>
+      <spirit:name>xilinx_verilogbehavioralsimulation_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>src/axi_stream_io_v1_0_axi_s.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+      </spirit:file>
+    </spirit:fileSet>
+    <spirit:fileSet>
+      <spirit:name>xilinx_softwaredriver_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>drivers/axi_stream_io_v1_0/data/axi_stream_io.mdd</spirit:name>
+        <spirit:userFileType>mdd</spirit:userFileType>
+        <spirit:userFileType>driver_mdd</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>drivers/axi_stream_io_v1_0/data/axi_stream_io.tcl</spirit:name>
+        <spirit:fileType>tclSource</spirit:fileType>
+        <spirit:userFileType>driver_tcl</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>drivers/axi_stream_io_v1_0/src/Makefile</spirit:name>
+        <spirit:userFileType>driver_src</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>drivers/axi_stream_io_v1_0/src/axi_stream_io.h</spirit:name>
+        <spirit:fileType>cSource</spirit:fileType>
+        <spirit:userFileType>driver_src</spirit:userFileType>
+        <spirit:isIncludeFile>true</spirit:isIncludeFile>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>drivers/axi_stream_io_v1_0/src/axi_stream_io.c</spirit:name>
+        <spirit:fileType>cSource</spirit:fileType>
+        <spirit:userFileType>driver_src</spirit:userFileType>
+        <spirit:isIncludeFile>true</spirit:isIncludeFile>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>drivers/axi_stream_io_v1_0/src/axi_stream_io_selftest.c</spirit:name>
+        <spirit:fileType>cSource</spirit:fileType>
+        <spirit:userFileType>driver_src</spirit:userFileType>
+        <spirit:isIncludeFile>true</spirit:isIncludeFile>
+      </spirit:file>
+    </spirit:fileSet>
+    <spirit:fileSet>
+      <spirit:name>xilinx_xpgui_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>xgui/axi_stream_io_v1_0.tcl</spirit:name>
+        <spirit:fileType>tclSource</spirit:fileType>
+        <spirit:userFileType>CHECKSUM_1b3a39eb</spirit:userFileType>
+        <spirit:userFileType>XGUI_VERSION_2</spirit:userFileType>
+      </spirit:file>
+    </spirit:fileSet>
+    <spirit:fileSet>
+      <spirit:name>bd_tcl_view_fileset</spirit:name>
+      <spirit:file>
+        <spirit:name>bd/bd.tcl</spirit:name>
+        <spirit:fileType>tclSource</spirit:fileType>
+      </spirit:file>
+    </spirit:fileSet>
+  </spirit:fileSets>
+  <spirit:description>AXI mapped TX and RX byte stream interface</spirit:description>
+  <spirit:parameters>
+    <spirit:parameter>
+      <spirit:name>C_axi_s_BASEADDR</spirit:name>
+      <spirit:displayName>C axi s BASEADDR</spirit:displayName>
+      <spirit:value spirit:format="bitString" spirit:resolve="user" spirit:id="PARAM_VALUE.C_axi_s_BASEADDR" spirit:order="5" spirit:bitStringLength="32">0xFFFFFFFF</spirit:value>
+      <spirit:vendorExtensions>
+        <xilinx:parameterInfo>
+          <xilinx:enablement>
+            <xilinx:isEnabled xilinx:id="PARAM_ENABLEMENT.C_axi_s_BASEADDR">false</xilinx:isEnabled>
+          </xilinx:enablement>
+        </xilinx:parameterInfo>
+      </spirit:vendorExtensions>
+    </spirit:parameter>
+    <spirit:parameter>
+      <spirit:name>C_axi_s_HIGHADDR</spirit:name>
+      <spirit:displayName>C axi s HIGHADDR</spirit:displayName>
+      <spirit:value spirit:format="bitString" spirit:resolve="user" spirit:id="PARAM_VALUE.C_axi_s_HIGHADDR" spirit:order="6" spirit:bitStringLength="32">0x00000000</spirit:value>
+      <spirit:vendorExtensions>
+        <xilinx:parameterInfo>
+          <xilinx:enablement>
+            <xilinx:isEnabled xilinx:id="PARAM_ENABLEMENT.C_axi_s_HIGHADDR">false</xilinx:isEnabled>
+          </xilinx:enablement>
+        </xilinx:parameterInfo>
+      </spirit:vendorExtensions>
+    </spirit:parameter>
+    <spirit:parameter>
+      <spirit:name>Component_Name</spirit:name>
+      <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.Component_Name" spirit:order="1">axi_stream_io_v1_0</spirit:value>
+    </spirit:parameter>
+    <spirit:parameter>
+      <spirit:name>C_S_AXI_DATA_WIDTH</spirit:name>
+      <spirit:displayName>C S Axi Data Width</spirit:displayName>
+      <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_S_AXI_DATA_WIDTH">32</spirit:value>
+    </spirit:parameter>
+    <spirit:parameter>
+      <spirit:name>C_S_AXI_ADDR_WIDTH</spirit:name>
+      <spirit:displayName>C S Axi Addr Width</spirit:displayName>
+      <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_S_AXI_ADDR_WIDTH">4</spirit:value>
+    </spirit:parameter>
+  </spirit:parameters>
+  <spirit:vendorExtensions>
+    <xilinx:coreExtensions>
+      <xilinx:supportedFamilies>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">zynquplus</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">zynq</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">artix7</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">artix7l</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">kintex7</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">kintex7l</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">kintexu</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">kintexuplus</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">spartan7</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">virtexuplus</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">virtexuplusHBM</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">aartix7</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">aspartan7</xilinx:family>
+        <xilinx:family xilinx:lifeCycle="Pre-Production">azynq</xilinx:family>
+      </xilinx:supportedFamilies>
+      <xilinx:taxonomies>
+        <xilinx:taxonomy>AXI_Peripheral</xilinx:taxonomy>
+      </xilinx:taxonomies>
+      <xilinx:displayName>axi_stream_io_v1.0</xilinx:displayName>
+      <xilinx:vendorDisplayName>SoC Labs</xilinx:vendorDisplayName>
+      <xilinx:vendorURL>http://www.soclabs.org</xilinx:vendorURL>
+      <xilinx:coreRevision>16</xilinx:coreRevision>
+      <xilinx:upgrades>
+        <xilinx:canUpgradeFrom>xilinx.com:user:axi_stream_io:1.0</xilinx:canUpgradeFrom>
+      </xilinx:upgrades>
+      <xilinx:coreCreationDateTime>2021-12-12T20:49:24Z</xilinx:coreCreationDateTime>
+      <xilinx:tags>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@16fed581_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2ec9608d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@793f5b3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7322b269_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6e248e43_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@b4e9ef3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@426bcb85_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2e53d487_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@61dade0b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4eafa00f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@53e3a875_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@162982df_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@75f72ee4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@18aeac53_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@606d36b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@38c0eb40_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@57696f2a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@510901ec_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@60d2f4d6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3a2da1b3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@cd54b6e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@693cb83d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@ef28d1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5a59314d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@29767284_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@29f27e63_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@13dc2895_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5e36f1df_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@709fc708_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@8bba7d9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@21d8e4a5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@37415f14_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@66dc3d40_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4fba07d0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@eb3af51_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4c66ef79_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@45185362_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@53225cb8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1cf08902_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4b15fae5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@17a6be36_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3301516d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3be10ef6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6a177ab9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@20e4e579_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@f741122_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@df275a0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4ac8a5fd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5ae71cdc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2c59353f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2325ca04_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@498ea243_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4b8c707a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@52cdfb1d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2a0d6185_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4bac3167_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@19a83bf5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@562798bd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@123cc7f3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7062c158_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@778708cf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3a452e27_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@ece9f0f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4b895821_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3dc1927b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3e4d1f1c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@22bc955c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4c436144_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@23f15bc2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2414d94e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@63ae6b17_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1f88dbb1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7517e1ec_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@668022b8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3177ce96_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@71f152fd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@30ad2c46_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5aae29a7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@292165c8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@334d7f4a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3479b8c2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@13d09377_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@315680f2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5ba41a48_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@d66c81a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2a99c6a5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4530b54d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@699d5142_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@17559350_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@18f15cc5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@482d154b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@9b0867a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2835d2db_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3070b16_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7616d28e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6f3420ae_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@59ca939e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3c36ad44_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1e50ae02_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@22ebfa5c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@465f09ec_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1bdbdf15_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@9060620_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@65357e50_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4e4f99_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7b82dd23_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7a9b0492_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4851d668_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6ee66680_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@18058a64_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@cfe93ee_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@53c2b650_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@11a6efc0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@18afa642_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@12652ecf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@e72e52b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2861fd1c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@24001396_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4454325e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3d14ded5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6a45a760_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@75c51952_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1d040cfa_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@c27bbbf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7158e610_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@499392b5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@e8df7e6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@11aa003e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4273f844_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5fadd8f7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6c93a7db_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@27ee561_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4a52c607_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@11760a9c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4115d1f1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7d41ca58_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4899dc31_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@13b9216c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2e05852a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@384bceec_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4ed8c48f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@200621c6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6ac073d7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@18632943_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1c0d8bb2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@50809788_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7fdbc98a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3142de19_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2b3fb5f1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4faf4338_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@eb7476f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1d508d99_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@53d85a46_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@30a744ac_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@238f4e8e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2081d690_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7eee799d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2c95d02_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4e1ddea2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@21e860f8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3660b171_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3ef639f7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@16ba015e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3642a664_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@159c8828_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@14e878fa_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7f0733b2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@10cb371d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3553a1c7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3fc60b7d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@551cc009_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@752a2e44_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@63f8237c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3ca7d308_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@556a2759_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5f380808_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@651a74cf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1ecd1477_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@9b65a49_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@35b2d11e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3536a2cc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1cd68297_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1692283f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@ecc2ee6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@747cc728_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3ec1998a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6fb41197_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2c33db6f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@42060eaa_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@62342897_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@36eef4b6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@19ecf3b7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5d580cef_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4f729cff_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@23321c1e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@539a0d0d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@9a208b1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@38bee981_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@13576b9a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6455b470_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@23aa217a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@25e0ca99_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5787a96e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@43773246_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4d61f0c5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@123ec803_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@441ed6b1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@40743552_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@575fe9d1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@760563e4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@d20fcca_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4486a217_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@61023d9d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7ba954b1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@35c3b2bc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@42fe08ca_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2c2cdfab_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@14ff32f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7ec2d566_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1f0c382e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@10ce9ce2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1d3487ea_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@69af9ff5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@a3f99a9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5d79a274_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2940bbec_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3c331f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@346dc4a8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6ee2a2b9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@76248ced_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5a67ad90_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3f211e20_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@31809d90_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@585e4f98_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@42ec0b0a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@85dcc7d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@782407fa_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4693fec4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@206ba19e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@65d9e06_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4115aaf6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7a3e8df0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5a0dab9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@16462cdd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@25040671_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3cc02f38_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6b7d8e4b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1450c3b3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@112dcc8a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@570107d2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2a4c82ba_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@59d6fbcc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1b1ef5d9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7bd35be_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4a26fb6f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7742ea34_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@100b085b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@66ebb4d6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@78ccb7c6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@59569c0f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@16028751_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4b46cdee_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3638e993_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5fc9a2e7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7cd279dc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2476846e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@789eb25_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7ebb6bc1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5b807ab4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@58bb111d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4dd4eede_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2030ea86_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@262d6dbc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@9879ce_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@544f9318_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@783ccf68_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@74b5dbd6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7b1a5399_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4e59d89b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1ebfb7d3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@28806a0b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4f1fac1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@193f5497_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@98f5ccf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5ea19ca3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5c57bfe8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@474ef512_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1c3d233f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@561f98f3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4156e62d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7fcfc34d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4275157_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2004e159_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@f268144_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@c10c0e6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7557e11f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@b8141f0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@63cfb8ab_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3d394ce0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@50390780_ARCHIVE_LOCATION">C:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3dbeacb1_ARCHIVE_LOCATION">C:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4f3f661b_ARCHIVE_LOCATION">C:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@716ccc45_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3278c6a2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@398d4fdc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@384c540d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@145b9325_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5e420b14_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@720a061a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7019edbc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@32cec7a3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5b9ea533_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4ba41145_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7a1c3bc8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3f98c05d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@85ece3f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@64329cf3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6098b91e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@658c8c87_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5e029802_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@46a555e4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@66159ec1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@78addf86_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3d48e636_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@45209cb7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3841593c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7fecffde_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@33c9e638_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@538ac29d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6c1cb496_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6e783269_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@703c8061_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1a7552e4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@71a8b655_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@393dae6f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@26792732_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@56b72513_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@50b98a45_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@75004655_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@27616936_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3a54ec8f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@23e0933_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@21d6563f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7e96eb79_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@fbb747e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5a959611_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3d67b840_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1ececc3c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2c3729d0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@753686b7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4bc158bd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7553bd98_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@686c9917_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@15e3e3fc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@17c20476_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2890ad0d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2502d801_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@615193fc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@10d0b0e1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@1c009a65_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@77fd9a52_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@423f07dc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@589a99d0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@b813605_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@a38b321_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@355431d9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@d146dd7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@3bf71b0b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@27b3813d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5ef70193_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@24d7fb4d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@11d6e696_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@43384aaf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5dcbf251_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@33084c7e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@4c5a8f4b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@38125fe9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@14f39b23_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@71113478_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@36296867_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@511868d0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6f3ba609_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@78a4bc24_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@32825895_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6ea7679a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@600011e1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@766beed_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@5f381aa9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@300820b4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7058d4f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@6ec12ea5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@2b23043_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@51253581_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.dd@7aa26a8e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@b23f618_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@77b30d22_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@4cde9694_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@120ff5dc_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@24113226_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@44aea720_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@2ee819b6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@4818d5b2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@38e9bfee_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@1c951027_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@348407d1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@111f073e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@16159ba0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@21bb058_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@28bf5ef8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@a1c64f7_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@74feff94_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@4f3615f1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/axi_stream_io_1.0</xilinx:tag>
+      </xilinx:tags>
+    </xilinx:coreExtensions>
+    <xilinx:packagingInfo>
+      <xilinx:xilinxVersion>2021.1</xilinx:xilinxVersion>
+      <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="5562313f"/>
+      <xilinx:checksum xilinx:scope="memoryMaps" xilinx:value="d6592117"/>
+      <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="323cdeea"/>
+      <xilinx:checksum xilinx:scope="ports" xilinx:value="7c2aad6e"/>
+      <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="cd9ec9b5"/>
+      <xilinx:checksum xilinx:scope="parameters" xilinx:value="6cced3b9"/>
+    </xilinx:packagingInfo>
+  </spirit:vendorExtensions>
+</spirit:component>
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.mdd b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.mdd
new file mode 100755
index 0000000..d7af75e
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.mdd
@@ -0,0 +1,10 @@
+
+
+OPTION psf_version = 2.1;
+
+BEGIN DRIVER axi_stream_io
+	OPTION supported_peripherals = (axi_stream_io);
+	OPTION copyfiles = all;
+	OPTION VERSION = 1.0;
+	OPTION NAME = axi_stream_io;
+END DRIVER
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.tcl
new file mode 100755
index 0000000..c3a9cd0
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.tcl
@@ -0,0 +1,5 @@
+
+
+proc generate {drv_handle} {
+	xdefine_include_file $drv_handle "xparameters.h" "axi_stream_io" "NUM_INSTANCES" "DEVICE_ID"  "C_axi_s_BASEADDR" "C_axi_s_HIGHADDR"
+}
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/Makefile b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/Makefile
new file mode 100755
index 0000000..21453f4
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/Makefile
@@ -0,0 +1,26 @@
+COMPILER=
+ARCHIVER=
+CP=cp
+COMPILER_FLAGS=
+EXTRA_COMPILER_FLAGS=
+LIB=libxil.a
+
+RELEASEDIR=../../../lib
+INCLUDEDIR=../../../include
+INCLUDES=-I./. -I${INCLUDEDIR}
+
+INCLUDEFILES=*.h
+LIBSOURCES=*.c
+OUTS = *.o
+
+libs:
+	echo "Compiling axi_stream_io..."
+	$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
+	$(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS}
+	make clean
+
+include:
+	${CP} $(INCLUDEFILES) $(INCLUDEDIR)
+
+clean:
+	rm -rf ${OUTS}
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.c b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.c
new file mode 100755
index 0000000..c552cbf
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.c
@@ -0,0 +1,6 @@
+
+
+/***************************** Include Files *******************************/
+#include "axi_stream_io.h"
+
+/************************** Function Definitions ***************************/
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.h b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.h
new file mode 100755
index 0000000..294e851
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.h
@@ -0,0 +1,79 @@
+
+#ifndef AXI_STREAM_IO_H
+#define AXI_STREAM_IO_H
+
+
+/****************** Include Files ********************/
+#include "xil_types.h"
+#include "xstatus.h"
+
+#define AXI_STREAM_IO_axi_s_SLV_REG0_OFFSET 0
+#define AXI_STREAM_IO_axi_s_SLV_REG1_OFFSET 4
+#define AXI_STREAM_IO_axi_s_SLV_REG2_OFFSET 8
+#define AXI_STREAM_IO_axi_s_SLV_REG3_OFFSET 12
+
+
+/**************************** Type Definitions *****************************/
+/**
+ *
+ * Write a value to a AXI_STREAM_IO register. A 32 bit write is performed.
+ * If the component is implemented in a smaller width, only the least
+ * significant data is written.
+ *
+ * @param   BaseAddress is the base address of the AXI_STREAM_IOdevice.
+ * @param   RegOffset is the register offset from the base to write to.
+ * @param   Data is the data written to the register.
+ *
+ * @return  None.
+ *
+ * @note
+ * C-style signature:
+ * 	void AXI_STREAM_IO_mWriteReg(u32 BaseAddress, unsigned RegOffset, u32 Data)
+ *
+ */
+#define AXI_STREAM_IO_mWriteReg(BaseAddress, RegOffset, Data) \
+  	Xil_Out32((BaseAddress) + (RegOffset), (u32)(Data))
+
+/**
+ *
+ * Read a value from a AXI_STREAM_IO register. A 32 bit read is performed.
+ * If the component is implemented in a smaller width, only the least
+ * significant data is read from the register. The most significant data
+ * will be read as 0.
+ *
+ * @param   BaseAddress is the base address of the AXI_STREAM_IO device.
+ * @param   RegOffset is the register offset from the base to write to.
+ *
+ * @return  Data is the data from the register.
+ *
+ * @note
+ * C-style signature:
+ * 	u32 AXI_STREAM_IO_mReadReg(u32 BaseAddress, unsigned RegOffset)
+ *
+ */
+#define AXI_STREAM_IO_mReadReg(BaseAddress, RegOffset) \
+    Xil_In32((BaseAddress) + (RegOffset))
+
+/************************** Function Prototypes ****************************/
+/**
+ *
+ * Run a self-test on the driver/device. Note this may be a destructive test if
+ * resets of the device are performed.
+ *
+ * If the hardware system is not built correctly, this function may never
+ * return to the caller.
+ *
+ * @param   baseaddr_p is the base address of the AXI_STREAM_IO instance to be worked on.
+ *
+ * @return
+ *
+ *    - XST_SUCCESS   if all self-test code passed
+ *    - XST_FAILURE   if any self-test code failed
+ *
+ * @note    Caching must be turned off for this function to work.
+ * @note    Self test may fail if data memory and device are not on the same bus.
+ *
+ */
+XStatus AXI_STREAM_IO_Reg_SelfTest(void * baseaddr_p);
+
+#endif // AXI_STREAM_IO_H
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io_selftest.c b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io_selftest.c
new file mode 100755
index 0000000..26bea4d
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io_selftest.c
@@ -0,0 +1,60 @@
+
+/***************************** Include Files *******************************/
+#include "axi_stream_io.h"
+#include "xparameters.h"
+#include "stdio.h"
+#include "xil_io.h"
+
+/************************** Constant Definitions ***************************/
+#define READ_WRITE_MUL_FACTOR 0x10
+
+/************************** Function Definitions ***************************/
+/**
+ *
+ * Run a self-test on the driver/device. Note this may be a destructive test if
+ * resets of the device are performed.
+ *
+ * If the hardware system is not built correctly, this function may never
+ * return to the caller.
+ *
+ * @param   baseaddr_p is the base address of the AXI_STREAM_IOinstance to be worked on.
+ *
+ * @return
+ *
+ *    - XST_SUCCESS   if all self-test code passed
+ *    - XST_FAILURE   if any self-test code failed
+ *
+ * @note    Caching must be turned off for this function to work.
+ * @note    Self test may fail if data memory and device are not on the same bus.
+ *
+ */
+XStatus AXI_STREAM_IO_Reg_SelfTest(void * baseaddr_p)
+{
+	u32 baseaddr;
+	int write_loop_index;
+	int read_loop_index;
+	int Index;
+
+	baseaddr = (u32) baseaddr_p;
+
+	xil_printf("******************************\n\r");
+	xil_printf("* User Peripheral Self Test\n\r");
+	xil_printf("******************************\n\n\r");
+
+	/*
+	 * Write to user logic slave module register(s) and read back
+	 */
+	xil_printf("User logic slave module test...\n\r");
+
+	for (write_loop_index = 0 ; write_loop_index < 4; write_loop_index++)
+	  AXI_STREAM_IO_mWriteReg (baseaddr, write_loop_index*4, (write_loop_index+1)*READ_WRITE_MUL_FACTOR);
+	for (read_loop_index = 0 ; read_loop_index < 4; read_loop_index++)
+	  if ( AXI_STREAM_IO_mReadReg (baseaddr, read_loop_index*4) != (read_loop_index+1)*READ_WRITE_MUL_FACTOR){
+	    xil_printf ("Error reading register value at address %x\n", (int)baseaddr + read_loop_index*4);
+	    return XST_FAILURE;
+	  }
+
+	xil_printf("   - slave register write/read passed\n\n\r");
+
+	return XST_SUCCESS;
+}
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/soclabs.org_user_axi_stream_io_1.0.zip b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/soclabs.org_user_axi_stream_io_1.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..2a22446f1995db34a975c88b9976e397a70995e4
GIT binary patch
literal 15835
zcmbWe1yChTwk?di9NgXA-45EgTLX=2<L>V6E{(gpJ2dXrxYIZ^?vHQYA8%&9d;fWH
zU!2H@sytb%GAm`Ty;r893^)Wj2nYxa2z_ysO3wmLY85^RNOb}z2;yh1k*&3zt&NF|
z6Qi58)%mxtj(A+nK0oyG<_4<LLnT+Rwlp10wB=Rzs>pe!vavAL+vw2CWR&aKd*1Wg
z*i$7`7=rT^bes~T0}i&g2SOc@{3x$(gf6SwJzETz>7Tn&UmiiuFN1SVU-Dg_96oM_
z)_yF!3&p<Q-(0n0qZeRR`#Nu225*`(shuL~tz&HDyFNI4oSHkm?Ot82wb()@76z(1
z_-dIeyOzz6kKTC>yz8s3>k!;Rr-t_Q__|(nhtN5?y&vD6-R=V5hkQw4j?)V}4C=@a
z@dz|z#jiT=6~t}1Sp~4}W8a%wxaMCuZ@ql&*v~qu>jvsqr$fiT!UuN*6QuRM%}z2S
zlp8h-20I8iV#G{*o5hKN>eF$K@KN)~YFc>5-Yp2a5*bKr3^u$sbz8*?7G`He7?1K=
zA~zF{znQweEa8Au7t>kS3+*b3=~>squRoaTUS~3uQ~z4Do%&L?tZ}m|1Hr3f%?T=q
zi_IlX!MW;X#(dJOYOuo5f`NatUtzaMwBEzDY(_E#!BE__P88TqYzuXn(3{?RI(VpR
z&uf>S<vtAd>p3-;Z9}1K(C~h2yZib4apO4i?03w#I{l<f#qFbq(8R$}>4L?YsqSxn
z&!$T}@Po6n{m01<!AkwWMk@cg=E=?(2ERY$MFEI&IS|rooHrsZAY<35DLOWQ2Xa*{
zu8h=n3{5R0oxoPA{<-?u&V{PpKgVZ#Lj!P}lAffr=c^O&8(`FWoA`S8LX~=fwNwUk
z^`o5=48R1hzNeDVJ4?Vlxuh0ndTJY_WX$yHY^(5UBJ)4$g9+rZJch<C6o5@?wmuBD
z0ZrO#*yFODB2=&aECc*U8BXBSoO~aYg#vhyNv3<=8c31##0K$&MQNioJCiefZDTYe
z-X}ovKLEg!QVN!c&n<Ert=O2H;B)a?oS_hRbAqH#C2o{kK*m#VA{#W2PnU_$q&|zV
zGC9J>b$-Xv<%ID>C1=Q-7+(h?H#^59LF~_gkQ%4FVa+7|Dp%t|Lx(X*+{6wSxc+`X
z&$Qe!YRvoQTB6!<b8tI3R5LlIFmEgOP`nBo^VXM))3tti@0q$7VzZ-n(ev!(^L(!o
zvAXG+!1Cnfz&w1U-&R!~^0LaLgKfJe|K2dq5K<5mhU8dz@Qy-}th;ybn7hdL%#9%E
z<+H`Z_jK?Cn#QS$(L?Jov^cpq?#-z{+cG*%9wU{^&D=Gvcrl=m$!9nXKlXH_@Ix@?
zTb8R}Vcf}H>Qu$F*^wotWu_n1+CFZEPNpIAS*sr`3g#sd1O9BIcwr73Uw696!nCca
zchylPkh^t!w@J}A@Q8LG<qPe!V>z4GS)M$D^J3?sgM*W0?Izux-Ru-27fi*%NXGdP
z>b&q}R3}b)=-N1ZmRXI9r=weA)YWG<g2u5E!GG8Vx`(d;3lEfYg;&u4I1qc6L^jM!
zb+GY^w>`#{cK0vp;K3eKPy)T?N1zV4I_U-pDl)nz)(liX>qBVTSOIGs?gc#oqie+~
z^q~G1=q)E;(m)r+Tyr~6ETK4f?97S2$vbNJrGT`btGfpFzt|ijwWYIhf7dsqq&zA-
z2Hc$o-b0lTG0IO(3HoX^<ZPTd=_v%*+sDnnz3vY@9S<GbmS9=Z@3DJZRGXDJL%#F{
ztcMmiFF|=4-o4LuByP!XI{OH`nb^4M%U&N3Kb^XMj0H3v^IWuhKYST)YdU@suz5jo
z^gOkED;CDaT0blF(O>y_AUt)lcXJb4qY%p^zv(n3Kc%pw*=O-QpyC-b)K`A{cA{VQ
z+JhYXqeJ0rRr9CW>1ykWkJeZZ_C^;rmb=%_6P`>iX}VmYl5e;{29LV-KU=LwTrAEH
zpBh$*ILL&m!RFY#pC2zCt=MLVQ4yfo`jA8LbieLnYzp!EWP>FoPIbiUHM2A{;Ot2^
z5NZh7rG;zB=@EqU;MAL|tIWQzdxq3VPwNuZ!@3W=nsJSTv(lMPGUF>iOoHfYT`*)#
z(xX?6<NR<qpkOW(r!dy3)_v37`J#8Tcmx*(zj%t&Z=%E~=3teXd*yj_e!LcoC^-TD
zV(7NP@jyiBe4lbce|S(Hl81-BT=bRS!$`ukM%_0LSp4opFEpGsv4hesdZWu^W^#fQ
z`N2*cOGjdo4!K`GTPnPayAVm`*RFL`m#h0KrFcYD0~8kM;qEqf&gcr$shT6x7a&TX
zowTzpUP+8sn~C@Kw!goa9a*9k0Q<H4wrM_d`R;DM;p*?wGz-b3V#2^v>v2+#cJ?xp
zz4U`}19L~40geXkbbybrQp)O=)U`qUZq<&r?JWmFq`^Sg;qXn1)MD3-*2Y=ylvvQ_
zc^Pt-5=tb*Oyk?l`($r$;bqnJTd>|vcPU-7P7h^wrp|7(l&(E(Te*hGLV46IKArY$
zNl$Rs5WxbA>yQ_IIcw8N-S3baW@#4H7;%fj$wEW$-E4<A-lDj{fwpF~Cf*JQ#HkGJ
z=tf)zEH;fWrSh9+OFLf#+iKjET1_)l1PQ9PIeVY_I#e=7^B=Q$Ib3EA6n6e&vBfQj
zdXv_(L}?ebt?kDdb2{v|)(rEf$y`!*?YBfhr#z3Yjnn(q5%&W=_}*-R+t5Sj0S#Vh
z$4B!Kp0+8Lf&qs-roMcdv-_ZiM<E`FlPMi9qRe#M!{p*O1&+iM?H%2n>Dm#Yuy;>R
zm)UKXTNBW`(@MvT9KN-=eWu~;7aPcZL{?>ayqe6fb=_<Z8&GeK6F5IdJZ<3|(^Xdh
zo>nwBy)`52fKW<-SC$nrY9-ZC>sm7!3lo)^^>0-S-^T`dmG>A0oO=1`UaPR_A51eY
zRG!_q-pzj*PAaphNh=*}zGVVZhpDv<+j=`ks7+#jDWz1cRw?6sPxecGqHx5;#FE*b
z8WYsgVf69TbWqC&_0xIZ)%|Vg5-k)-ZY~@ZDk#2&Qo!kDJ@|$_sCgr`$#%8NX(GpX
zR(|9xiht0Oby(a=pI9S6&Dg`K`oq>Q7T#pGnl6RpBxY><ZCa57-iEM0TE%_iXVQ6_
z4*i8~Wu8N~3L-^Di1E)z-XOe#A<>=&^XbSXPR6Z@5L7v%dNK)u{%ABKvhJFyu2Ro5
z_syxhs-^G6n=zv|3lXE4u$ODfJX>X-MMdlP#6OGv+3mAcaUC>Q&;PoPEE?5B1bxvu
zTPfDiN)&>3dV#UV&vAk>!e7I}o<V`sU%S<X$n@adiqz#m*D;n+)cTV8;#)JPvlZHd
z^?vzbQvEXU;q!4lIodH~E1~CFj7<(f*~6cS{`yns-e+~-V?`)mt;B`omkp-cT}hct
zgZbn^3ea?R_O&H}kMnXxXYofdW1aiP<q?;{k=IXLX?Dc%7(8c~AHjI1K0I4FcpU=G
zL~;11)nK*?(aoj>7gmSv(YjY{Mx##*P!)Ciua+m-FB_Bj<?rmy_Lx;|KDSJ~k(?~i
zNDm7(-<Ag7HdHf880Cw;5qA^}i=2>hxY(b?;6;|fuWP!l-LWYaTv&eMF}m$6yYo@C
z8ab-@X0(qSPIC7xIZe4%=84VMp0z54Uh%Zn;V`wr$NBJouk;SFxLGKD$#B;#K=V4|
zZIrfbL)gehs9yM9{APnWsgi0sdtuC6qZv}c$I0{{G_XY9>i*fB$;@zywK<-xy3c+X
zsNehSGP9jwQ^U~>-aTmYpY1>EbNq3gZP}(RodTx`WKE~oUA_b&c5cZPxS#B@uUgA;
zQm5>k#7usUklKHYkR$yY(}2<cQq6RIhnAVgNJS$W3oYNJqHA&MA1A4m#tjb_Aw$?V
zsW0=d34A@tSRF~L$sZE~JZ!8c{reP&<IF2Hj#d+$9xx9eY^jV88+==Q-E{ZEEwer}
zHDtQm`x%x#DU4mZL}j`my4Yz-S8D3+QZA8_jZd)Iw9Yu2(7nF2wKvgAR3O@$Oo-qs
z?p(NfR^K8mMGw>djJxk8S@iEq+$2k}N$C(&vy`^AB-PhWe-GZARD%_@;KzEbPwT9F
zH{6R=HNOXwwG3uO9$G-x)^NNYdq}}h*nD-E<KYt!dSmW6cwkZ6BJA;OX}*x~%i6Tw
z!W}urcvKK(b@cS9I{a}q|L3O1nvWy1slYDv@X_234Re`_gFt&EY}7ksNKIN!vbcaw
zD)EV5E@LyYnbo_btm1og#~OfQzs7hRR5c~NsA_}|X+5uvj(1*0CDO;)_Pd#zU1oAS
zeGB``xNEO^a`~CoP^JNPXZAt&``!Ls&y-Nl<w7;VH(Jiq`TW~tP))Gw>ybmS;vW2w
zX@7;xNJ%2tQLzPP@NokiS^5$pou|-hpl1G<;Wd6JZn<2?gW@?t|Mbj3sBLnkgdm2u
zANna@=gL9~ug+B1!(puAl22|XPqfP2W#084n8||a&fP`gRv`{v<U42G4(yzJormGj
z`Vpn$*Yb$*uWMo!)vriJ5=p!RGtmXi_-}D`3={%GAC+xAkMTAoon}02q}p}OYFR2B
zgKlpy^at<n<45yTwp3<EB}76_hcXRWLD4aT?b?1sJWxwST0LI}wOyP!tZ5kayc{U1
z&L65L?wqd<97T$c#!E8J-l)&y+!{0ll6Av%-0Mszo$so*wVrA1jOcY03<stv_HGh~
zYyQv<r8Y|{4|VP6RvDTG8mkL+2pC4rKA9`--%CnYGg!ycUq;be>SCNBdtrC3AE}8f
z_IJ#5;Cp+wDM)FVZgge8m$B<@%B54p{6OVz!wc4ZLfYPi+8;EX02MqRdgu4lCBBV1
z52={Z=5@$8!Wu}lhwb5#DQ)-ov-7yvk@!GG#CY;1fXjsKE2xuPU)WF2RU(?4e%^<l
zLJy{P57$HZrNcpHTdJ`_ZJqPn6s~eko?ncQ{p|*;;M?L>5BvGE#`2r)T(Qa@V}|1t
z$@v6anK_Mc|A*L<9bgQEZ+&D__G8n=#JNWcpZo||lh3rLfCtA=W(<H6d<GmE{1oK7
zEB%!Yh=3b<+|QDncJw56*_LBf=Qm-^$;=}p+v@RwrtPhaiX>J(W=(q3@vN8hqGL>!
z&TiL@g#(4atN9Y)t*s~p#fR8;$E}y1%+rg>T2{2ga$n{B!@~5w($>Vxl;w@AUZJr#
z`$SxMNE@A@%xL&^dfO0-;wV|$K*>$az{!d>;@f47OD?KqtE}Tp=!MGkH8qC<_Y4j$
zR@XP(4_eFCV)usw>8cx=!r<j)X6BnV#e<q=Ei7KNw%>H>q5<Hlup@0r7E6PgJzuHq
zHhsGurdD{WPQ>e31%Gt$J@evz>*3~qy+2>;tG#TO8WZ-lYa=bAZzauhf-~D`ruObf
z!Bh(_x=rTgT22Mua|H6uzwnQG@%`45<1!wOMM~Da9zs=Q!nD^aYvo0%U|{_I!8=M9
zo<y2sr$inFL;6T1JGX@e(WU<kY4D+YqERIgEuEU)U9^CcK8{Vs^Sqn89xg;Jt{bxH
z|L_qgj*vsQ&LimgcDg@tb9X&-{1f@*%f-;nkwM$Qk<ml<GGC{Bp%8sFU!dKF-Y+99
z2+F2sb~Q;mE#d>vQc{lSb!C_gMG<-wTt8Y;KrvXLUxbNpD2y<gM3A$(JxF<6Z<(1i
zn4-A;k0_#g5LJUdu|P$LT(}Z{TnZ99Ncen=Yk*=rzceZscrKheCH7B}6%7BN60m-V
z{INWJ9I#xtRFOzY1PC?eIT&bYAcjAG_yjyixuR%iA2Ar!5l;gt$c&hI1}Ov_Ni||T
zH8RQ4QHW&(4uou2iU=xX-v@vo909EVwr_zipFK!37@C$e1f_zQAX^O1k9JIpOd!aa
zq)(6m9ucBkag;e0yI%*hzoQX95Wrbyj+j6gK-;H`#sh&om<1q_hCvInujIyn@T1K_
z?N@0817e(!D&q<RgMS&T$@=N<)Ux+ehQa_bq)`qvfnhtPh}gj}pcn?VNy8$wbP$l3
z+%RZZiAKW^{W|wFgNIN7Ovb}B17tx@19EXI?l2uVgGI?CC4hWykwhkT7!mf-Mz|0^
zZchXCB8oVOI@m8+v6!N1!h^(2%wdkirqKnOKyK*%RqF3#5UQ=j%5?DlbZLr5<Y9X<
z;Sly|qG1n3s;D&3eOD?2+^`V+2yl$QVRmm>e|b-0_}99WY#PXsht1dZ^2cC{?Tb~;
zXNf8X^GHCN0!XPu$PSl;H9Y_!>B|U%>F6B7nh1UUJEci2m;vA7@y9{-6*Z`nDA^%?
z%GM=~!V9nH#E&jGfEkX;#$OMzz?9k<fz3ko8&hWJ_YuIXDj%8{1D48?q_Wi~0bYP&
zLJL|FyI{kdD4ifbxRwxu0pgh@_#O0+UM<5$7qG!L#y#|}NV|?Gc}+)Y!ukv;o$GYL
zwW-l+4ii)U+YzLMj!*{nr3}hogYq;=NuIkTej@Q=n4)2sg}wb~kcI-7G-M+{#b8S_
z_C<hdUJTrxuoc;M@BEeDBd&j(eu018G?|+i?qC3pwyn2=2#D&eB(X4Yt4SYCDyUdc
zFIXgQe+kT7F-RX8poEE197a}@nO4?5D}@lC4kU$8vhf8~grplxMgic*MGDV@^wBw<
zgkcaz!3|3U{RWoi%gW07GpDkkWI+I^%7hboVS`MdmB79r@8!mj1kr>cIuCOf1bs61
z1*5~jP(Uy2Kx;f$z}NV7`$`^|hFug<Mv;{%J25Rw5^V19HaIZRT)26QU-I-pu;@v#
ztUzWv8WCm~B^am}6sZERy3D?UYh7`e5@5f@ck-}oDN@mGu>Me(3A<g00A@jKsxRj3
zL9O8i6XUT}Af==N15<vFHVHIUT?GKezJ-*d4?wGkh*p~;Kto({s1lx-Q|jy07z-qc
z9VrZK06`G8Fm@>U9dTt9YLYpi=cX6Q-Gm`18Tt#HMH#WCHcpqbmVYf>8VV6}kbtwH
zMI(NYndz*U1Pw$r1YJ5hAd2DM0?r-qlPSw%2r=xEl7=;b1-y?1t(+8|SWui;(twFQ
zh#<O=5S~@M1w@rZ-Vu5C@dxCYH#0z$gqzx*6hd1j7>FqYLl_o9T?$p#77)w<GqAFW
z6@?ADOO4@po<s^Tk4&6Rg&WLikFr1!6CQlQ=8>TY+j3T!D(ge)H!hx~z@s9`?dNep
zB7wOs+#iesG1T}rQwoy|*p)hox<wxpcg}(rB@gYzAS@GsgP;xAYkUN`j)p>-GJ@Kr
z5?+mH<O~90j4@ne2Zm*F%dw3JGt;fO=Y@p;G3ePz;06VR`*=`+SuQe^*@?uY+PL^j
z%$(BVjR;17N{Sd|Tj4WU)&K}Ns6h~vu`n<eplT2xJ(xMY4vA429u(uEO@z@e*E&h8
z14bA_gr*NkEULGRbA$}WQq&qonYj8UcPu1VxYIhACbj=NU^vCzCOxRON1>DjV&KuA
z9(e=@o61;Osz8|kTVH8Xk{@@ak?wXF@U<U55q+H&VuuWI*zO7}sL4c<bxhc+Y>FaQ
zIMD647~CKv<aK*86*Vt(-wJE7n8oAg^36=T5XfzqvSdC5oG=+9Xc`n*aWEu@Dg@4?
zwEpQf0N+t@o-izg=qHtg`ofO|5D8)x%#8rTWZ7vkSYi=#i=NS_umaP7BAKORVW+u>
z(OP(bo$geNQF;<F7%?_uhA^hZvI2C`TH7Sp%QXMmB1RG75I;99F}VIDctAg;O%OZb
z;6nsEY7}@_rXIDr<Nz?3PIvPS%m9i76~7)PfJt?o4|>;#uuM{`Bk&O_8dlE8j@XL?
zbx9wvoC|y53<Qv#{lQ8b_H#3n!PR;n!w>Rj8yRrBhKHw|!^H?tBf)1O*Y}D$$0tP@
zR0s%4J}@d{ZU(q%F$TI-;29-kk%ZZbw~Ap)Asg(-BREEA0!q!9@`JBoGlobU0LVl#
zr!*}9QV3H?Tq3{^45{=0D^ZdlJM1D&J$sm8^)P*gn@=Njkd;jA<2KEKwd(J-0S7OZ
z6m-qnWYX^r&=61-R-3^UiRvww4}pL&3z>5#<%n8VPDhXMe^eKvC7}1OZDC5R!dMbc
z8(*g-j}G2OY^%pK0tl5GZ8iY-A(l|Zl$hZHxX1(Cc7*ZUEh(A;nfbHoN@+rBol+xs
zv4q#-7}5_m`@<+1II{vi=XY?UtQxLJYiwY&x(AFsni3prAaQO#X$(}5_Hc&86!3Lh
ztYU;9Y|H<Teys}>m_^&(+%QPr66>hQK6ZZyvC9G)+%8qD&URYbr#V4zL{a_?0mQ)h
z=7c`T<{Tv%!vg{S1z-po`1s~aF4E_gylSuyi28xx$OsN~U6w2t7$}_e8}1}ujkx=^
zDChej7=$W!KJMt*0DnzOCEOh+cIunD&suq{WC4KtXR>t#X`S5^3yh~-lH>tInD$Aj
zdX6|?tx1*TCr;RpW5eO9V&Z#CcYTPj2z^X40SKtXIeIBDryxdrai~~XL3ON+yx8(2
zrTt@H23TM$>EyKVw4e>TWarywNRavlX$W;d>U1!pQc~4{`c*)!uZX*IaDB-#zQUS?
zfBeGKnJ*qNLL8BHu?A==4|x4n>XOIYh=jA|m8Mkz=mE4*XoUn}bOFldnIj@3L3FH8
zSY%;)CeqpRI{w>fJZi%zfF36-B))MVzaLG2Y7z`gM<S|H2_Wp@XKj2I8bDCeu%L1q
zkZ)C9#sxa4(JUq@M;;8Qu`{69!4|O^k6#??)r_|f!bVs{rKz1E-o^ON4UaVZV#H32
zXh`I*&(sQ1C!Z`FsZRl6i*5bnff|GzgE!gK3wUL{6VV!SpkiKAhlIw;0!O(-`(grT
zMUqR(gCXsw8OL(Utbr-g`6EE;yFeHo$lP!4Dq$Ug5cgbv2^cmQnJ<7ufCxlBJ1etI
zJq12W4FF<*iJ7VAD?}g0e!Ms+7;URp;4ln~aC6eECHU^WjD)!u>YzK9#;Q4X&M#V7
z$N(UQXmSxm|7%_rTZHgy%Bm41e;8F-Sv0CPfM^2E!XlpmLT^NrUPuz8PS;dd0)CfH
zJ1gZv*l%Toaf{z{7`P(7z4=QL_?nWTT$q*!XhuoflMn}J^pF>bjN#RTmIiz+Tt$U(
z5jTvYNd%~usRFXq%K_^oKQ&<?NrTYhwaD~4dCL$QVu0Ml1!D2&W};zM;>^mD*fm+i
zLCjEf(#aw#AbaHtY4kmy_NOf3k|+?nh7jRyPyXB>a$<IA5a0&1iTjBtf!itW5o*-X
z*Aa>AAut8qzU(+3REP@bzdTWpdhTob^FA=IF(^X^x=(TW_@kCn53ibAIl4d2+D99$
z#B=uV`@4G_CZ2MGr*LvEYw#(lC2}^}U*5-1Qg)3*93nS9^Nc7ViGEeI^z=B8Lj*hD
zD~*2Usc5>}7)&kwd1k?DaLx1fJ*b_>Cri*S`n;l6K^Q&5)7;W)Yn+RbRL&jH^0~7?
zR8$G5lDnpr-AIb&7fTz%IfIB~J}Nh68H8b{G>9*TMQJgS#GDUF9HcE<IN7&B_ZZ0E
z$~2L`sg8ab(825)pVvLp=r2xB^nFX&y-~dmBMv~eqj2VNEGmA%T_+mItiX{KUG9<R
z{*}37VT%qm+seHD!(=n#LT+qd2M}SgE@VY>POEbV{ct(yESH3(gBE3Csq`5k)q{G=
zY^Rnscdsb5U^r<P!d@(t{1SCd+L-cZ(N!p2m{dcgf^yQGAgj5vsqs`oslRQzY>`cA
z@oFjT`ex^UtAs6iM=ycmB5Gg%Ke_PtZ`%)K#s8ygf`00n&*9FmB%gxjJ{JfG;is<Y
z=wQTT;AWxc=;UBxV6A6itLMU^$E^2{EJl|NycY$$(I+#qYoUoUWiSEMn=lWhR>@#L
zEp!L55JJ}oQrAwxtBAYmhK}Kx(>vSChqUxJQ`a{?_%c-)82+2dhn&l%@#j^caW|_7
zNh*o+(niH^j~p~h%S+3=dsf`R2i$aH>%Z+kTuOR2mR;+f(X4EG6-w6BKB#4NOIcMs
zxK+`zPwQyxO^h8xHSy!t*^g^$wZEiGHz<QvJ)Y<$lacK}9SX{X*5YE(hR?(8nDEno
zq3uvUdJEK(Ur<cdLM#rNC(^Lj%CLNVt5#5aD+r7Xd_NeS9opivUEI7-=VOc`;}WmK
z-{_lFnlA8!tj%;>OgJc-mn=z?8y{^{ZQ$k#Vw)~WOh~IU6GG)?b^>XC&xI%V;bvHX
z1=BkoDg9&PUA1=Zw7Xyw(9|81kXdz402oc8QHsB{ujyQr;<vK$eirUhTKfSDc4vtK
zO}vHy^Ei?V8FY^t=YO@_D$;_xY3p7A74U=Vd1+yPN_&6mXe^rVW`7FuZaWDL4>V{6
zwO=|KAaa6x;F4!QP^Rq`aThnV8~{Ar4C|rz1*AIpmLSe`!rv|LtW0IIaldiwxm&@z
zAWHE|lxY!i_mBzhoi}U@8^PYgg$G*i^6~X?mn!rRYpl#3)2xIJx(b_WpeG0AmrZ5f
zh>4)okwG_0ushDn<w%01)^9z7*>Sq;a~9uG?^vd#!4b^LXfLUT;Z!sY<_z$U=g>>1
z?>HcdL|8`m*0}vUs@O}LnP<`MHY*0#!6dFE7JSlA8)t&tBYREBz)#zND&V3U7BRBa
ztkh)VJLGnt@@yu6O}DShy*AVrKR17gcX*5@AHtW(7)Ef|g6`gGUCF{M&;ujp#J_4C
z;uv;}{i%~MJ=O8J_Yve4;Q4+OYqO&K4%dEM2bqdHxuPw-kZG)dC5}1dSG1cn+rSu@
zd9iXvK!pE>TQ4>Ibx2%oLu4`u_4zl2P0(QP$**4Yn?@GAp;;JeFynj`O>C3VS_7JW
zY!)D`aIi^P-LTQwcR(uK=SBc1W6EyAWH3l8Whe3M8=6!uJyO|k!_mcY8_Ss-Jkv}b
zp?O*3-pbtB+cCCqx<K`$fR(D-su(l@$qD>ROUG_#?rdVByvVwS;OF!sC2J%|B;L_E
zL#1`lYp3v{;1YaIF^D**9R>drWReRXE2^FV#JGIKi~tN|Bqgwb)F>p~MqZ7W>|RuX
zpQGQ0w<DKr5I2T_^Jqxmj<<ei^OSixvLY2F*|fi4EQoSk>{Ot}s3iFW(p|v3eK0N!
zw?rP?tagtV`Q`PsCQo%XQRwITYBF3s<a#Pg2zCScnOn~%ukhOS6%MgQIz1li-qjMb
z-hPkmBU<#&%qQlBQVWexh$L$;`V+T3u|ftcv0)BvVcyi3x@aQ_hsA5u!oB6Nrmz28
zI3OG?4(XcorX2@mpzq-oXybOV0jp?h(?!?iozZ`|L+G;E66xSTWzs=d&Pq17^vepJ
z0cTAN)g2bw>=z?M&AKdr$SJ_pZX3^BKZxN|-?+{uR6xDSPfMfjjv(V;FBQv^0tv8z
zj?%gNt@*M7A4%BMB7>o%@pgdmHfy|`0n1_M;S)ykUCZx*<I0HvN}o&Ofu`MvZR*d8
zrUZXT%lA}yHVa9?GF;OJbdfPe-D`kTED)y&Vnb9hAzDnu=9W07S<TF|BlE<wDe${B
zkJtTm{>RQEc;?I1{w{tkF}?lWt}v13pi4NU6w8nx=V*1Gvb<Dzn*OrQN<wU|iqf+M
zFCmCX)|}$P1rOiMe(?I~UFP|8_Md8Gy?cz`PrF#{Lwzo~)(`#XM0R|%H-q5YSSv$#
zoBr6|k$Bs)l;Uq86?TXgP5nW<zscSOgBaKA)qg97Z-v$xUz~-<%ryx9a1E1+VA3bT
zJeoh9eu4Yi|JytQ6%9T3#9k+Y442oJw?8r38^H#B)n?8rC5?o=RZ*}|Qy=dN9*pz`
z4NMtv?v@QM6sR~UXKYxR`G!OJOhAW;bC5e`9}h+77g+}dVyrn*vMszsTgZJ!#-<Mr
zEnJp(k?xTye3JX8sFxk#=P)IMg<|+`w{WlQLkr+6&dq$q^hx^a;}q@P*2EYV!W@C%
z#FXKp2({fR#9E3F7gz;CK;^ExOfzl)PaIRu(<a!2A<_^nn6>m<@0+P_jr>a7<i?ky
zs`8=`5L%E7a8c_Z$ZHz1pj@$2pcfqM)6V+QV_Cfzh&V=M@O2qU5Mccg9YsXa#%qk2
zsgF2Np2Ru7TJF2U*eU|WL#-+!v6X>9C<(%v1>JPV`~z+NS1l(Ziu+xJdWS*HEQ~Om
za<t0fbFk)W%$spsDG6qFCVq?l?0EzvZt418GJgoNCvLs--rMsizY4c#T!p|Ig0KLJ
zlxe$_@itM}V^nNOT7`(L(1@Q^AZ3@uYj4R!^D)mUL&!R0M<K8fM<jhS3W2V-+*J*K
zl#KU<P@fviIKDjvpYY8(dU<s2@@>r6Nt1uSwet`ktNbyP5<V3oP(^=U5z^y>oyoiP
zW1MX9Hi%YU`^Q3TCLgsvaYspdfGWrVmujKrnK}a=F$@w%^j?)dXpn!<#)#w}?En)x
z&A~0F*8D;{-}s`X>-hzKA1wkAE3QYxwEkG*sFiX-`15WE=isGws`uU4X@aIwKPc63
z#sU;M5tN`xu2Hs=ly8tQ@8XKaFTHKdaCUCG6bLI*zwtKA6Ohmknr?-9n)%atYvG(C
zY#rTxc92CmpAfO$2OwOXqXEU^QRwACwubdqnU=u66<@G8hoTS;+8dXR(}&-pyL>40
zzrIrI#iqe0F9Gi!simwLkff=&i6*Txi{KLd+(d%cj~6eOf|rRc5aoo6!BsEJVMD+Z
zo9A}`<E>)+t8iYHGGiV4C-#r=vFKJ#X1MC~9%qKiUNgV~mV4l+Y7_~Goxhx(hmuA2
zxjujk0xo)h&OVQ8=CP%;<`?C$5v!Epc2v9_+iBB8xsgP`wiwK>61-|Du#O{gb!Qqu
z(rTfvXk29*^K|1Rp3P?|0@VpsVr$8INuu{X4zdl_1v0Kn%iks&cGh~br|(y$4vWDH
zhGp=ZXJh1{zybkyY97z~P|RCgAvCt@m`ZEjf~ykWW27<!iR-rFkT0iJkd>I8UhoO+
z))lXT;B7*^;P(0jqH^DwUwln7XXJ4Gq7VvuVDDdhC5-VGz}j?9bzx16CYPH99(H7`
zdp5qmT-jxAe&n8qXBgF27jUjEL(~>Tn7t}b%lXOTUY9kV-i8+H4$%6zH2;wN>RCx|
z%f<y&ep<$88`sS3v@_@zayMR|2#p}|im%UdvZJU%iRvY*0;xJI!O{j78au6oNu-8l
zl)ZHoh#Rwjdr4qSj#GRjFjHq0@3-T)UvolW?q|v{`c?>+f!q=Jtk&4@Qp)P6q}&Hd
zE6U)V8F(^-aMt=zIOs~dOFP*t^je%nuWaqCSv#XV0U2TE0SuU)-XwZ`?(AopQWej5
z&Gm11l}P6g^%=?zZ01nYn0Ju2#b(`~%STZgU$w|a2pXbQKJ)_l2{m~UPDfq=x`I8l
zT!4v=moEk_M87MXwJmDv!A&(&-{5f;#gK-vT|$HAgIf%uw(KX_l2?7s^&aWG6~&qr
zoIdGc7w?IDMu+3yVSly^Chi?z&h(sxRIg;`LGOhSNNo6rB>48*ihbz7qW&-(PQ4f;
z>~g9k?#Z}sI{$!r1Qzyd<`8j-PdxDfB}-(cXKbV>KS>>XIdG8I187y&<;Of1>`Mfx
z@yod=986VC*fOtJ+Y?6wq2oleQzDD{#*C2;B8k#0)>ae;t0Mor_*WIQZez-?>^r-O
zii8hl(Y@@lhoGpUU;b^vVD`tR&=K^6Mp?tNK(QM0R+0WKRO#DfJ2eL27K=O>2oKaw
zQxG;RN}b3|Vq%*K7)jinKk;a*VU~ki*Yg@Z89X!y<^HIL2{Z08B3Hji7);&|URKTP
zj3HPVfEBmUH(X@QU~s)u=7XZyouiYvm(lPCYCOjBZ|_?{aKhAvY~(=+Qx$@PD5)Ul
z0ZdPjBuw_P<)KBW%Cg^OgRQ=u>w;9?;1^#*1@=)fZ>>w@d0&tpX%`;eL*;W;lZ-4D
zbIj#LSr*|$Pk_aVp0eTKB125;s0|<&;pIcUsl7P5)m(vF5om^lQjVDigd1Qe?QID@
zKcU4#O|Jlsjhm(vJm9BjwwLh+FZ9xZnUTw2g~xS0Ho-LlnOIjHRaZUdN|qfITj(qG
zv6n4L-g<tfxViifYx3XuPrB3>-o;Tt`Pnr*GLjf(`WyOem5R>#raY$~&$%vL^-)fT
z1<54`1l16V#<h`?=@#UP`zSVHlwP<j@s}f89i%4><rfLRtN@_R0xxui4<@TXg1w^^
zA?EXtjM_WDMv7_`p*j_9XlxJN{(_r$;p-9$Y#b;xus)1~yl&<Q=<7<V(R}i)IbHoA
z-Zc^Z5FRXf+Im=8euw|3a}}J(rD6-_3l{n5R84#)md|ADVBuoo;P~G-SWLzSP6q#;
z&uDFIymzpB@CO;@`u0JEnp!@RNrr)TYGPWY_EV@~YdnOM=51^De5PrIa1UvNq9Io|
z9>z*VFQPmgHaom=uorR0OvOas$4V|N9>gldG{H13#H2Vx2cMh)D%Ds-&%|fxDW<2S
zC&DQwrzHlGgEvxQi>=XOpWqOOzwkV_2cVN>!X&xeIr{U)q{4&zd&|n*7DxYTS;hZT
z%bbj?#K-F30-4c)vu*yb17uDYLWPtI2+roK)v@|H9JxyQ44~Irbc`_%c07AlvZ9DY
z5lQQ^wU4(0OX6FzaPVd&XJxSQ%!BPO9{rR~5J!7p@n2GP6xfQ6=imU0&{>CK)jyf7
zzI9!g)4n9B<()4{_sHeVQiBr1t-E$gR}?8D+bdew9LQ%?Wxav^d&{QA^udrpK|ppt
z6V-q2v%h?0IRi@*Qwu8-YsGIe1I*~&y2KwOQGzSN4Xz}}9H;Dx)>7)%RZicW`+TD0
z4HTcZx<<7Ms39C2rzQoCbaMEMNn^+dsFPlW`PULkD*5|3;-5H?E-|)e$K^wwh`2Fb
zE0<m(t1bLdBv>N~6vgpKaEeY(K?%vO2luRQGH0y6`VyAgD%Sx)gu!+Yt9{uWOO7xH
zF|=n3)YPRY+q_e;DSpYLNT@fmz2&-h51A_^|BRt`U(Rx>TH{jIaq@ZpU6DWP{DtP5
zNUST{&p+W6H7JOG^gefbRLh;OKf3I8D*b>ExQ1#;u|G$g;RiFv7i|?+>C`B!tjOn>
zDk;Lg+3cO4h5dCU6l9QL>$6f*++zzoUzB?X`}c2Z7v5fF1P%i73JU_l_<#SV{}z8>
zH1ATEvt5%!5a0s7gU{-oafZ(qhUR;I<!W+8Y|QL;=-@#IP@-ZW(@tWuk#)R3$S4z~
z92A}o*igafN00pc^2eUNgo??@RCz+*iz~8V$cyzIecEPENI^k&rkd03G2laj2^n)j
zHX)U!U-jsB-bcoAn4+`w-D~L7UhTKM9!<fmwFlwg`c?0U;O9IeqAx@}!#ATusn_RD
zxN?|w?nzIl!>^M{hZ@mOYXuWEcsI)$3hLim^o1e)kfX{2n-8z+n=HxgN~nlGu3F|n
zh5NJ)C`4*+9b<90y=DY+JN#I5^!mDxYEg*J4T2dPs(WumYE5y1C`1e+lR3=6GJhK;
z8wn$)1#kvkz$YL5)-RZ^<p;O?Q{{G0>IJ~AA&Q!E%7-CQ6J|jOMKC9i!G7yjmd60O
z(sjo#DHFZ?6_<Bm0k7I+MyKp4Rn)o!t6r#`%OkjMn*Jqkl2Psuf@CedVF>AmwAv!c
z3gJv>23scFM+Sd~lRe)kH$o8`h_BKH@7gd_k{;KQpp|3NTwE<dcjCF3WyO3>0^Bh*
z1siqQx9pQFVT+X?xU<F5p2mYgp>nD@HD4&&!8gIr^<j~`$k5$fz9hP9hn!XjFMGk%
z=+Af{O#4Y8LGN-`CT|uCeMxQ}OWGyMllv*(qnd$Qw>TU#7mx#YI^ds3Z0(dYAh70`
zK*;z(W-;)QcMeyHa_rxYoVdmFRuS~oPaw~JFBbg@rQUjmP{X=P0|fJI;#H?6TI`1w
zGlN{e8MBuQr{)vu+b#PA!SIc;ahSUcVO)|ZP}#U-`L~3#*>T+V6nz<Z@M?VsI>!dI
zhVpNYE(3*ZSmFb}JPc__kTC;W{=sI#_#%hn5V_YBt*>?kWubO@C;T(7+@Vq<EoK=0
zm7}TY*yJhBno82%n-r{SvA;8$hP7feevWJ7JvU~Gu}hcPR=&u4)NU||Vsv>IJ0rQy
zlE!qeugm6#<v2qPmZ|(6oU1Y@>ip@nWyYK1{mS}dLC|#VVHEwF>R?I4q=VTdUNU`?
zyI(%J%<gDZnpq0yVwVO#A=g+z&Mzp^d`UI7wpRQwo{?S*P0bbxL5r4>^<pg+T?|#(
zb`XvUNpsiu^>B|p;oTUXxd1T4eaAob^Qk+w4!$CZ%D-oSUlBh1OHA-DvsF<oi7)>-
zO?yAn|9H9@{bjS}miwX6`EL>&rB#$M)>$2uBQa)*X8i=2QXME&1C<TMO}*@;l)f9<
zc$s$VhM+R}jH9nh-z3Pe-rS(;D9^LrunNm|VuCS%|IO^!*t;O$el8@xp+P`C1D5~E
zp#IlDrlX0KsgsGL6QfbG>YB|e5a5l3`oUaOZcOZ7IH`?W7Uma}#EyYQfgE2M?TS$G
z7~rxDp?bH)*TBgoTH2mK<ic+@mA<A<cRpMO9!MU>8a|_ef=m6unC;T^=PQO^h9>Qn
zW;E%&+G@t4%Ll`eNF+AHca>+OO8#5*SzfWbB;DV|;dP&KOlY2TlA4oHQTm;<i#YZ@
zuj~7~9rMK#a-wI?)^Q9`s9jrU`zw}(kPMjVGqN(AMwQ=-ei{XFuRgl2COal|TsDbh
z6=vxgDi&=o=Bq42!Z)0-AvoQ5;)G6Ti3RxQ0ZEK@KU_pDaEr8`_MkxXAf6NEMV7Ip
z5U)7C$)J?WGeh-ZLj<wJLQGvYjIS`tRV=l$C!exo^^FMyY{FQ;l4(X`38Nu#KFnRp
z?@&u_kWRQj5$W^k^x$v5z^p_Xls4Q69}8IS_WOwVX_r-{0}NFTFUx#HrJPs8a}sSY
zoEW#=+3&w3+O%-t&VCC9Cb*p77qV+P8X$~$%l5Ff{y^}Ar2Lx9l9#JymzKr1vov!Y
zp<kRpGl=7!Ag?~iI{+v>D_T{e%?gz<z%vw+b!Td8mL0?`tOYZSQt2WUaA+x7FEZ3e
zI7f4yuqqdEyyvg)H#P0adIyvUvPFlFXctN+1X*jJERJ1%KcIiPcQ)$G>&UP2SRTtK
zDmq@*2p>FHmFHuOO@kf^u0EBtgC`WPzPvg>>fCjdE1juG#xnirBxh<@H;WNKkVW|Z
z7_2pERw|yfoS^awV)qAN8cnK`dEzc1?y>vY=8WSgeyj?qPb&O^Rl*t>2gjn;2wY`z
zUZ!D0D8lXJ@#-M&qY*?6hR$95eong$`e*E*#89_?Qdnb~Plre=bCNfbI$GpRIo}_|
zb|d}<+<fo(HLlZL&GvJP^0%Vw%{fhUhjI0iW@DYmqMe7ah|qm4R2>nn>eH*^d%q8(
zA^yuwpS43jjZ+IbDLVw+6K696lKd!_X&c>2rt#E52}n{+Z??lpvW!;731$8yJ_Wh=
zqv<}<Rw^2zXvCgV(KST%cenG{6Zxy%b22{hf90=#9eO(D;l(@q<U!n@b{p?=y1AJ-
zTl_mo{f9ch_{rxclND?~r_|8&qe>KU=zW~f(Yj7l1VutV(4vT1%lenW*U>YrQ|Ec~
z>kU3mNFzS%IN%s)kn3iq_l>rdD{*i7+!#%PJ479aiXBu`vQ9-0OpUap6YNA(aGG{E
zFqE_H+QHz^h*hojQyCVF8LkZ|g3dM6>g+iZsa*%x_!wW#zy)?#V%E);5_lG#a`NzY
z1EgiJ9m1W`bH{z_`P>*e5;f10N4Klr944BhK9uMU^j?*wkpoINbrNF?dlwzL)=q*L
z->xiu^{}Q36k@2OAzep8-V;B1Dc`p}FN?<|CO&ZLCnkJ?`dSrUkziP>tB?@NC?Xa}
zW!=&9Mq<8qfp;2tWEVhHZ}m>}PNF~zmx`w}a!c_JbPiX^VyQ~&^B!d&8L;)*5|+ut
z*8bYdCh1HOPt}66m?u>QU+g7%iH>)HK#ZqVb(Kvm@hC?5t_r^ft2*8y%b-}a4lt8x
zG;AZEZV28o_{y0r>u|HOf@Z311EWIH)})iOkJG;_X(P*#K#_#J6|lM8+f^H6qzXNT
zINQ)NS4e~a%$KMrZb5sFiK4$UoiBQ%c|z!M6QL|HSSL_D)s5t3$zYT?-CVM~qCd5~
z6|q3*@E{pQVXG<ko#@J$1AoI_^#Aj-<ZF<1aa+N-`8)W(le^GBR!q6iH97NBKKdLd
zAcn?FhQ@yliE~XQ%Qa?zk9_Zk@c18g$)EZP!GgxtEs#s5P6Px=`l{MCvIM^pljoFQ
zx9GA_*OW|_Z7QRLyG6pMm%O_bN;(GQg$(LKMQ|N%gZNR!VGkYAZ+HyQa0jW;4$pUP
zog>w_-*lz9gZ8Fa?#KeFZDCz)y);&p*>%3~&ZjmHN5I3EXPV$b@u*0;Z&Q*m)Oo)$
zpWZn^N7tIV!)zo)hB4o4K(KY%6)+$C#(h_iU#}P)J#c03ettW>HT1SuYNy_!Uh6^c
zF{7*2rxB4RDQ1ODc-X=g$Ad{BHihtXEOa8kM0Jf%Fc}H!J$D}aDrt-I)G>&HJG(M)
zOzS$xBL%Y;``gOHAtL08l#N}I%u4}^&B-Z9u*>ChQyEPas@hi1xg$z$onq$<88^|7
z1C(2GCoBm+y&~l#)QQ32s1fjcx9a&T@iA)DJEYuM7_n9I$(zwg8sy`Ieb;t~TI2R6
zOOSD1Tb{F8$@K^o?M!-SkQCjZ#302F6HdgKjUAOdFUsnL3S;mM6-XEArD$Kb*4{Iu
zIkYW9`Smo3*mCpgiU-=*2<%MqDyJVDZZ>!@NT;k-JGX2lOdq)>R8i;&c_mZY58Wmo
zdJNhnEl?%ZEUquOe;~Ln#(&P=)Fj$M3o#X^&hH(^=8MOE$O=Xxy;awXiW1bXdXeYi
zA4}kw7p)$$H}uj_RjOCw^Ql%zHTlw!``a{tNiCSt&oB4DNzJ(3x&`{et~hxI1#5l}
zi7D>$bKF?r`2)DHCzn7pXL3K_T2A6mdM)gPLz78%{5Ec7^jJo=mS@O;VPdXYZ)L5l
z=qEm#lsc9iDEu~8tcdQQjnENiYoD%j-f~d_H`cRAij2Mlw_Cn?awxy^IuQSBvz5M%
zDE)z~0Y!deq*ADpVjrctY;hQ~@khFLndv*2W|f*hLAhy#xa8U6StCy7-9a=lkCyDz
zxs?9adGuua5bYn$D3u>|-DgKft0!{@udjmLR8hf#{ua<q5#WWm90s8GVKTwx{3)CO
zXLgaRJ~ez0h$eag;BN#WQd{{>J`-I^sR{1u0~`7waOjA$p<3O}w|kY2{8H>CL~R?d
z=;)de$`ADpctuT<IL&0wjdhx=4dnA_MHx^qbnyTG^QfN_59D*D26^=V>+0W5r~d1s
z|DELf*8~6i(Us2wuK$%c{i^`{uUP+GgyWxB9JK$Dp8fanj=#hIJ<RY=cx1Z&Dg5V(
z^mq8b`}+TcKmO0~|LXbw9rW+c?ms~V82)3O|I3$WH2*vH-<kP8vCo+QhuB7c$NoFF
z{wH?GXYA@fgs%Qez4iXdwEy)b{~e?F=S%L`|0BQnSD?QJ-rudxKY?&R9fSX4gA`>T
Tq5k>{?(@g>X{2I!|GN8MIfW><

literal 0
HcmV?d00001

diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/src/axi_stream_io_v1_0_axi_s.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/src/axi_stream_io_v1_0_axi_s.v
new file mode 100755
index 0000000..c6560f7
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/src/axi_stream_io_v1_0_axi_s.v
@@ -0,0 +1,424 @@
+
+`timescale 1 ns / 1 ps
+
+	module iostream_v1_0_axi #
+	(
+		// Users to add parameters here
+
+		// User parameters ends
+		// Do not modify the parameters beyond this line
+
+		// Width of S_AXI data bus
+		parameter integer C_S_AXI_DATA_WIDTH	= 32,
+		// Width of S_AXI address bus
+		parameter integer C_S_AXI_ADDR_WIDTH	= 4
+	)
+	(
+		// Users to add ports here
+		output wire interrupt,
+		
+		// Ports of Axi Master Bus Interface tx
+//		input wire  tx_aclk,
+//		input wire  tx_aresetn,
+		output wire  tx_tvalid,
+		output wire [7 : 0] tx_tdata,
+//		output wire [0 : 0] tx_tstrb,
+//		output wire  tx_tlast,
+		input wire  tx_tready,
+
+		// Ports of Axi Slave Bus Interface rx
+//		input wire  rx_aclk,
+//		input wire  rx_aresetn,
+		output wire  rx_tready,
+		input wire [7 : 0] rx_tdata,
+//		input wire [0 : 0] rx_tstrb,
+//		input wire  rx_tlast,
+		input wire  rx_tvalid,
+
+		// User ports ends
+		// Do not modify the ports beyond this line
+
+		// Global Clock Signal
+		input wire  S_AXI_ACLK,
+		// Global Reset Signal. This Signal is Active LOW
+		input wire  S_AXI_ARESETN,
+		// Write address (issued by master, acceped by Slave)
+		input wire [C_S_AXI_ADDR_WIDTH-1 : 0] S_AXI_AWADDR,
+		// Write channel Protection type. This signal indicates the
+    		// privilege and security level of the transaction, and whether
+    		// the transaction is a data access or an instruction access.
+		input wire [2 : 0] S_AXI_AWPROT,
+		// Write address valid. This signal indicates that the master signaling
+    		// valid write address and control information.
+		input wire  S_AXI_AWVALID,
+		// Write address ready. This signal indicates that the slave is ready
+    		// to accept an address and associated control signals.
+		output wire  S_AXI_AWREADY,
+		// Write data (issued by master, acceped by Slave) 
+		input wire [C_S_AXI_DATA_WIDTH-1 : 0] S_AXI_WDATA,
+		// Write strobes. This signal indicates which byte lanes hold
+    		// valid data. There is one write strobe bit for each eight
+    		// bits of the write data bus.    
+		input wire [(C_S_AXI_DATA_WIDTH/8)-1 : 0] S_AXI_WSTRB,
+		// Write valid. This signal indicates that valid write
+    		// data and strobes are available.
+		input wire  S_AXI_WVALID,
+		// Write ready. This signal indicates that the slave
+    		// can accept the write data.
+		output wire  S_AXI_WREADY,
+		// Write response. This signal indicates the status
+    		// of the write transaction.
+		output wire [1 : 0] S_AXI_BRESP,
+		// Write response valid. This signal indicates that the channel
+    		// is signaling a valid write response.
+		output wire  S_AXI_BVALID,
+		// Response ready. This signal indicates that the master
+    		// can accept a write response.
+		input wire  S_AXI_BREADY,
+		// Read address (issued by master, acceped by Slave)
+		input wire [C_S_AXI_ADDR_WIDTH-1 : 0] S_AXI_ARADDR,
+		// Protection type. This signal indicates the privilege
+    		// and security level of the transaction, and whether the
+    		// transaction is a data access or an instruction access.
+		input wire [2 : 0] S_AXI_ARPROT,
+		// Read address valid. This signal indicates that the channel
+    		// is signaling valid read address and control information.
+		input wire  S_AXI_ARVALID,
+		// Read address ready. This signal indicates that the slave is
+    		// ready to accept an address and associated control signals.
+		output wire  S_AXI_ARREADY,
+		// Read data (issued by slave)
+		output wire [C_S_AXI_DATA_WIDTH-1 : 0] S_AXI_RDATA,
+		// Read response. This signal indicates the status of the
+    		// read transfer.
+		output wire [1 : 0] S_AXI_RRESP,
+		// Read valid. This signal indicates that the channel is
+    		// signaling the required read data.
+		output wire  S_AXI_RVALID,
+		// Read ready. This signal indicates that the master can
+    		// accept the read data and response information.
+		input wire  S_AXI_RREADY
+	);
+
+	// AXI4LITE signals
+	reg [C_S_AXI_ADDR_WIDTH-1 : 0] 	axi_awaddr;
+	reg  	axi_awready;
+	reg  	axi_wready;
+	reg [1 : 0] 	axi_bresp;
+	reg  	axi_bvalid;
+	reg [C_S_AXI_ADDR_WIDTH-1 : 0] 	axi_araddr;
+	reg  	axi_arready;
+	reg [C_S_AXI_DATA_WIDTH-1 : 0] 	axi_rdata;
+	reg [1 : 0] 	axi_rresp;
+	reg  	axi_rvalid;
+
+	// Example-specific design signals
+	// local parameter for addressing 32 bit / 64 bit C_S_AXI_DATA_WIDTH
+	// ADDR_LSB is used for addressing 32/64 bit registers/memories
+	// ADDR_LSB = 2 for 32 bits (n downto 2)
+	// ADDR_LSB = 3 for 64 bits (n downto 3)
+	localparam integer ADDR_LSB = (C_S_AXI_DATA_WIDTH/32) + 1;
+	localparam integer OPT_MEM_ADDR_BITS = 1;
+
+	//----------------------------------------------
+	//-- Signals for user logic register space example
+	//------------------------------------------------
+	//-- Number of Slave Registers 4
+	reg [8:0]	tx_reg; // TX data
+	reg [8:0]	rx_reg; // RX data
+	reg [7:0]	ctrl_reg; // ctrl
+	wire	 slv_reg_rden;
+	wire	 slv_reg_wren;
+	reg [7:0]	 reg_data_out;
+	integer	 byte_index;
+	reg	 aw_en;
+	
+	wire	tx_req = tx_reg[8];  // request to transmit
+	wire	tx_ack = tx_tready;    // acknowledge when stream ready
+
+	wire	rx_req = rx_tvalid;    // request to receive
+	wire	rx_ack = !rx_reg[8];
+    wire    rx_val = rx_reg[8];
+    
+	//assign	rx_reg[7:0] <= rx_tdata;
+
+	// I/O Connections assignments
+
+    assign interrupt = ctrl_reg[4] & (!tx_req | rx_req);
+	
+    // TX stream interface
+	assign	tx_tdata = tx_reg[7:0];
+	assign  tx_tvalid = tx_req;
+
+	// RX stream interface
+	assign  rx_tready = rx_ack;
+    
+	//AXI Slave
+	assign S_AXI_AWREADY	= axi_awready;
+	assign S_AXI_WREADY	= axi_wready;
+	assign S_AXI_BRESP	= axi_bresp;
+	assign S_AXI_BVALID	= axi_bvalid;
+	assign S_AXI_ARREADY	= axi_arready;
+	assign S_AXI_RDATA	= axi_rdata;
+	assign S_AXI_RRESP	= axi_rresp;
+	assign S_AXI_RVALID	= axi_rvalid;
+	// Implement axi_awready generation
+	// axi_awready is asserted for one S_AXI_ACLK clock cycle when both
+	// S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_awready is
+	// de-asserted when reset is low.
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+	    begin
+	      axi_awready <= 1'b0;
+	      aw_en <= 1'b1;
+	    end 
+	  else
+	    begin    
+	      if (~axi_awready && S_AXI_AWVALID && S_AXI_WVALID && aw_en)
+	        begin
+	          // slave is ready to accept write address when 
+	          // there is a valid write address and write data
+	          // on the write address and data bus. This design 
+	          // expects no outstanding transactions. 
+	          axi_awready <= 1'b1;
+	          aw_en <= 1'b0;
+	        end
+	        else if (S_AXI_BREADY && axi_bvalid)
+	            begin
+	              aw_en <= 1'b1;
+	              axi_awready <= 1'b0;
+	            end
+	      else           
+	        begin
+	          axi_awready <= 1'b0;
+	        end
+	    end 
+	end       
+
+	// Implement axi_awaddr latching
+	// This process is used to latch the address when both 
+	// S_AXI_AWVALID and S_AXI_WVALID are valid. 
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+	    begin
+	      axi_awaddr <= 0;
+	    end 
+	  else
+	    begin    
+	      if (~axi_awready && S_AXI_AWVALID && S_AXI_WVALID && aw_en)
+	        begin
+	          // Write Address latching 
+	          axi_awaddr <= S_AXI_AWADDR;
+	        end
+	    end 
+	end       
+
+	// Implement axi_wready generation
+	// axi_wready is asserted for one S_AXI_ACLK clock cycle when both
+	// S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_wready is 
+	// de-asserted when reset is low. 
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+	    begin
+	      axi_wready <= 1'b0;
+	    end 
+	  else
+	    begin    
+	      if (~axi_wready && S_AXI_WVALID && S_AXI_AWVALID && aw_en )
+	        begin
+	          // slave is ready to accept write data when 
+	          // there is a valid write address and write data
+	          // on the write address and data bus. This design 
+	          // expects no outstanding transactions. 
+	          axi_wready <= 1'b1;
+	        end
+	      else
+	        begin
+	          axi_wready <= 1'b0;
+	        end
+	    end 
+	end       
+
+	// Implement memory mapped register select and write logic generation
+	// The write data is accepted and written to memory mapped registers when
+	// axi_awready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted. Write strobes are used to
+	// select byte enables of slave registers while writing.
+	// These registers are cleared when reset (active low) is applied.
+	// Slave register write enable is asserted when valid address and data are available
+	// and the slave is ready to accept the write address and write data.
+	assign slv_reg_wren = axi_wready && S_AXI_WVALID && axi_awready && S_AXI_AWVALID;
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+		rx_reg <= 0;
+      else if ((ctrl_reg[1] == 1'b1))
+        rx_reg <= 0;
+	  else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h0))
+		rx_reg[8:0] <= {1'b1, S_AXI_WDATA[7:0]};
+	  else if (slv_reg_rden && (axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h0))
+		rx_reg[8] <= 1'b0;
+      else if (rx_req & rx_ack) // check precedence (rx_req)
+		rx_reg[8:0] <= {1'b1, rx_tdata[7:0]};
+	end    
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+		tx_reg <= 0;
+      else if ((ctrl_reg[0] == 1'b1))
+        tx_reg <= 0;
+	  else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h1))
+		tx_reg[8:0] <= {1'b1, S_AXI_WDATA[7:0]};
+      else if (tx_req & tx_ack)
+		tx_reg[8] <= 1'b0;
+	end    
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+		ctrl_reg <= 8'b00000100;
+	  else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h3))
+		ctrl_reg[7:0] <= S_AXI_WDATA[7:0];
+	end    
+
+	// Implement write response logic generation
+	// The write response and response valid signals are asserted by the slave 
+	// when axi_wready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted.  
+	// This marks the acceptance of address and indicates the status of 
+	// write transaction.
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+	    begin
+	      axi_bvalid  <= 0;
+	      axi_bresp   <= 2'b0;
+	    end 
+	  else
+	    begin    
+	      if (axi_awready && S_AXI_AWVALID && ~axi_bvalid && axi_wready && S_AXI_WVALID)
+	        begin
+	          // indicates a valid write response is available
+	          axi_bvalid <= 1'b1;
+	          axi_bresp  <= 2'b0; // 'OKAY' response 
+	        end                   // work error responses in future
+	      else
+	        begin
+	          if (S_AXI_BREADY && axi_bvalid) 
+	            //check if bready is asserted while bvalid is high) 
+	            //(there is a possibility that bready is always asserted high)   
+	            begin
+	              axi_bvalid <= 1'b0; 
+	            end  
+	        end
+	    end
+	end   
+
+	// Implement axi_arready generation
+	// axi_arready is asserted for one S_AXI_ACLK clock cycle when
+	// S_AXI_ARVALID is asserted. axi_awready is 
+	// de-asserted when reset (active low) is asserted. 
+	// The read address is also latched when S_AXI_ARVALID is 
+	// asserted. axi_araddr is reset to zero on reset assertion.
+
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+	    begin
+	      axi_arready <= 1'b0;
+	      axi_araddr  <= 32'b0;
+	    end 
+	  else
+	    begin    
+	      if (~axi_arready && S_AXI_ARVALID)
+	        begin
+	          // indicates that the slave has acceped the valid read address
+	          axi_arready <= 1'b1;
+	          // Read address latching
+	          axi_araddr  <= S_AXI_ARADDR;
+	        end
+	      else
+	        begin
+	          axi_arready <= 1'b0;
+	        end
+	    end 
+	end       
+
+	// Implement axi_arvalid generation
+	// axi_rvalid is asserted for one S_AXI_ACLK clock cycle when both 
+	// S_AXI_ARVALID and axi_arready are asserted. The slave registers 
+	// data are available on the axi_rdata bus at this instance. The 
+	// assertion of axi_rvalid marks the validity of read data on the 
+	// bus and axi_rresp indicates the status of read transaction.axi_rvalid 
+	// is deasserted on reset (active low). axi_rresp and axi_rdata are 
+	// cleared to zero on reset (active low).  
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+	    begin
+	      axi_rvalid <= 0;
+	      axi_rresp  <= 0;
+	    end
+	  else
+	    begin    
+	      if (axi_arready && S_AXI_ARVALID && ~axi_rvalid)
+	        begin
+	          // Valid read data is available at the read data bus
+	          axi_rvalid <= 1'b1;
+	          axi_rresp  <= 2'b0; // 'OKAY' response
+	        end   
+	      else if (axi_rvalid && S_AXI_RREADY)
+	        begin
+	          // Read data is accepted by the master
+	          axi_rvalid <= 1'b0;
+	        end                
+	    end
+	end    
+
+	// Implement memory mapped register select and read logic generation
+	// Slave register read enable is asserted when valid address is available
+	// and the slave is ready to accept the read address.
+	assign slv_reg_rden = axi_arready & S_AXI_ARVALID & ~axi_rvalid;
+	always @(*)
+	begin
+	      // Address decoding for reading registers
+	      case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )
+	        2'h0   : reg_data_out <= rx_reg[7:0];
+	        2'h1   : reg_data_out <= tx_reg[7:0];
+	        2'h2   : reg_data_out <= {3'b000, ctrl_reg[4], tx_req, !tx_req, rx_val, rx_val};
+	        2'h3   : reg_data_out <= ctrl_reg;
+	        default : reg_data_out <= 0;
+	      endcase
+	end
+
+	// Output register or memory read data
+	always @( posedge S_AXI_ACLK )
+	begin
+	  if ( S_AXI_ARESETN == 1'b0 )
+	    begin
+	      axi_rdata  <= 0;
+	    end 
+	  else
+	    begin    
+	      // When there is a valid read address (S_AXI_ARVALID) with 
+	      // acceptance of read address by the slave (axi_arready), 
+	      // output the read dada 
+	      if (slv_reg_rden)
+	        begin
+	          axi_rdata <= {24'h000000, reg_data_out};     // register read data
+	        end   
+	    end
+	end    
+
+	// Add user logic here
+
+	// User logic ends
+
+	endmodule
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/xgui/axi_stream_io_v1_0.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/xgui/axi_stream_io_v1_0.tcl
new file mode 100755
index 0000000..fcf8a06
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/axi_stream_io_1.0/xgui/axi_stream_io_v1_0.tcl
@@ -0,0 +1,58 @@
+# Definitional proc to organize widgets for parameters.
+proc init_gui { IPINST } {
+  ipgui::add_param $IPINST -name "Component_Name"
+  #Adding Page
+  set Page_0 [ipgui::add_page $IPINST -name "Page 0"]
+  ipgui::add_param $IPINST -name "C_axi_s_BASEADDR" -parent ${Page_0}
+  ipgui::add_param $IPINST -name "C_axi_s_HIGHADDR" -parent ${Page_0}
+
+
+}
+
+proc update_PARAM_VALUE.C_S_AXI_ADDR_WIDTH { PARAM_VALUE.C_S_AXI_ADDR_WIDTH } {
+	# Procedure called to update C_S_AXI_ADDR_WIDTH when any of the dependent parameters in the arguments change
+}
+
+proc validate_PARAM_VALUE.C_S_AXI_ADDR_WIDTH { PARAM_VALUE.C_S_AXI_ADDR_WIDTH } {
+	# Procedure called to validate C_S_AXI_ADDR_WIDTH
+	return true
+}
+
+proc update_PARAM_VALUE.C_S_AXI_DATA_WIDTH { PARAM_VALUE.C_S_AXI_DATA_WIDTH } {
+	# Procedure called to update C_S_AXI_DATA_WIDTH when any of the dependent parameters in the arguments change
+}
+
+proc validate_PARAM_VALUE.C_S_AXI_DATA_WIDTH { PARAM_VALUE.C_S_AXI_DATA_WIDTH } {
+	# Procedure called to validate C_S_AXI_DATA_WIDTH
+	return true
+}
+
+proc update_PARAM_VALUE.C_axi_s_BASEADDR { PARAM_VALUE.C_axi_s_BASEADDR } {
+	# Procedure called to update C_axi_s_BASEADDR when any of the dependent parameters in the arguments change
+}
+
+proc validate_PARAM_VALUE.C_axi_s_BASEADDR { PARAM_VALUE.C_axi_s_BASEADDR } {
+	# Procedure called to validate C_axi_s_BASEADDR
+	return true
+}
+
+proc update_PARAM_VALUE.C_axi_s_HIGHADDR { PARAM_VALUE.C_axi_s_HIGHADDR } {
+	# Procedure called to update C_axi_s_HIGHADDR when any of the dependent parameters in the arguments change
+}
+
+proc validate_PARAM_VALUE.C_axi_s_HIGHADDR { PARAM_VALUE.C_axi_s_HIGHADDR } {
+	# Procedure called to validate C_axi_s_HIGHADDR
+	return true
+}
+
+
+proc update_MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH { MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH PARAM_VALUE.C_S_AXI_DATA_WIDTH } {
+	# Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value
+	set_property value [get_property value ${PARAM_VALUE.C_S_AXI_DATA_WIDTH}] ${MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH}
+}
+
+proc update_MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH { MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH PARAM_VALUE.C_S_AXI_ADDR_WIDTH } {
+	# Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value
+	set_property value [get_property value ${PARAM_VALUE.C_S_AXI_ADDR_WIDTH}] ${MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH}
+}
+
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/bd/bd.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/bd/bd.tcl
new file mode 100644
index 0000000..4804aeb
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/bd/bd.tcl
@@ -0,0 +1,86 @@
+
+proc init { cellpath otherInfo } {                                                                   
+                                                                                                             
+	set cell_handle [get_bd_cells $cellpath]                                                                 
+	set all_busif [get_bd_intf_pins $cellpath/*]		                                                     
+	set axi_standard_param_list [list ID_WIDTH AWUSER_WIDTH ARUSER_WIDTH WUSER_WIDTH RUSER_WIDTH BUSER_WIDTH]
+	set full_sbusif_list [list  ]
+			                                                                                                 
+	foreach busif $all_busif {                                                                               
+		if { [string equal -nocase [get_property MODE $busif] "slave"] == 1 } {                            
+			set busif_param_list [list]                                                                      
+			set busif_name [get_property NAME $busif]					                                     
+			if { [lsearch -exact -nocase $full_sbusif_list $busif_name ] == -1 } {					         
+			    continue                                                                                     
+			}                                                                                                
+			foreach tparam $axi_standard_param_list {                                                        
+				lappend busif_param_list "C_${busif_name}_${tparam}"                                       
+			}                                                                                                
+			bd::mark_propagate_only $cell_handle $busif_param_list			                                 
+		}		                                                                                             
+	}                                                                                                        
+}
+
+
+proc pre_propagate {cellpath otherInfo } {                                                           
+                                                                                                             
+	set cell_handle [get_bd_cells $cellpath]                                                                 
+	set all_busif [get_bd_intf_pins $cellpath/*]		                                                     
+	set axi_standard_param_list [list ID_WIDTH AWUSER_WIDTH ARUSER_WIDTH WUSER_WIDTH RUSER_WIDTH BUSER_WIDTH]
+	                                                                                                         
+	foreach busif $all_busif {	                                                                             
+		if { [string equal -nocase [get_property CONFIG.PROTOCOL $busif] "AXI4"] != 1 } {                  
+			continue                                                                                         
+		}                                                                                                    
+		if { [string equal -nocase [get_property MODE $busif] "master"] != 1 } {                           
+			continue                                                                                         
+		}			                                                                                         
+		                                                                                                     
+		set busif_name [get_property NAME $busif]			                                                 
+		foreach tparam $axi_standard_param_list {		                                                     
+			set busif_param_name "C_${busif_name}_${tparam}"			                                     
+			                                                                                                 
+			set val_on_cell_intf_pin [get_property CONFIG.${tparam} $busif]                                  
+			set val_on_cell [get_property CONFIG.${busif_param_name} $cell_handle]                           
+			                                                                                                 
+			if { [string equal -nocase $val_on_cell_intf_pin $val_on_cell] != 1 } {                          
+				if { $val_on_cell != "" } {                                                                  
+					set_property CONFIG.${tparam} $val_on_cell $busif                                        
+				}                                                                                            
+			}			                                                                                     
+		}		                                                                                             
+	}                                                                                                        
+}
+
+
+proc propagate {cellpath otherInfo } {                                                               
+                                                                                                             
+	set cell_handle [get_bd_cells $cellpath]                                                                 
+	set all_busif [get_bd_intf_pins $cellpath/*]		                                                     
+	set axi_standard_param_list [list ID_WIDTH AWUSER_WIDTH ARUSER_WIDTH WUSER_WIDTH RUSER_WIDTH BUSER_WIDTH]
+	                                                                                                         
+	foreach busif $all_busif {                                                                               
+		if { [string equal -nocase [get_property CONFIG.PROTOCOL $busif] "AXI4"] != 1 } {                  
+			continue                                                                                         
+		}                                                                                                    
+		if { [string equal -nocase [get_property MODE $busif] "slave"] != 1 } {                            
+			continue                                                                                         
+		}			                                                                                         
+	                                                                                                         
+		set busif_name [get_property NAME $busif]		                                                     
+		foreach tparam $axi_standard_param_list {			                                                 
+			set busif_param_name "C_${busif_name}_${tparam}"			                                     
+                                                                                                             
+			set val_on_cell_intf_pin [get_property CONFIG.${tparam} $busif]                                  
+			set val_on_cell [get_property CONFIG.${busif_param_name} $cell_handle]                           
+			                                                                                                 
+			if { [string equal -nocase $val_on_cell_intf_pin $val_on_cell] != 1 } {                          
+				#override property of bd_interface_net to bd_cell -- only for slaves.  May check for supported values..
+				if { $val_on_cell_intf_pin != "" } {                                                         
+					set_property CONFIG.${busif_param_name} $val_on_cell_intf_pin $cell_handle               
+				}                                                                                            
+			}                                                                                                
+		}		                                                                                             
+	}                                                                                                        
+}
+
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/component.xml b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/component.xml
new file mode 100644
index 0000000..3f9304c
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/component.xml
@@ -0,0 +1,489 @@
+<?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>user</spirit:library>
+  <spirit:name>ft1248x1_to_stream8</spirit:name>
+  <spirit:version>1.0</spirit:version>
+  <spirit:busInterfaces>
+    <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_RESET</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.CLK.ASSOCIATED_RESET">resetn</spirit:value>
+        </spirit:parameter>
+        <spirit:parameter>
+          <spirit:name>ASSOCIATED_BUSIF</spirit:name>
+          <spirit:value spirit:id="BUSIFPARAM_VALUE.CLK.ASSOCIATED_BUSIF">txd:rxd</spirit:value>
+        </spirit:parameter>
+      </spirit:parameters>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>txd</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>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>txd_tdata8_o</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>txd_tvalid_o</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>txd_tready_i</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+    </spirit:busInterface>
+    <spirit:busInterface>
+      <spirit:name>rxd</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>TDATA</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>rxd_tdata8_i</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TVALID</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>rxd_tvalid_i</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+        <spirit:portMap>
+          <spirit:logicalPort>
+            <spirit:name>TREADY</spirit:name>
+          </spirit:logicalPort>
+          <spirit:physicalPort>
+            <spirit:name>rxd_tready_o</spirit:name>
+          </spirit:physicalPort>
+        </spirit:portMap>
+      </spirit:portMaps>
+    </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>ft1248x1_to_stream8</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>5c0c346d</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>ft1248x1_to_stream8</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>5c0c346d</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>119b3fd8</spirit:value>
+          </spirit:parameter>
+        </spirit:parameters>
+      </spirit:view>
+    </spirit:views>
+    <spirit:ports>
+      <spirit:port>
+        <spirit:name>ft_clk_i</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>ft_ssn_i</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>ft_miso_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:port>
+        <spirit:name>ft_miosio_i</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>ft_miosio_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:port>
+        <spirit:name>ft_miosio_z</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>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>txd_tvalid_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:port>
+        <spirit:name>txd_tdata8_o</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>txd_tready_i</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>rxd_tready_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:port>
+        <spirit:name>rxd_tdata8_i</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:driver>
+            <spirit:defaultValue spirit:format="long">0</spirit:defaultValue>
+          </spirit:driver>
+        </spirit:wire>
+      </spirit:port>
+      <spirit:port>
+        <spirit:name>rxd_tvalid_i</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: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/synclib.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>src/ft1248x1_to_stream8.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>CHECKSUM_06e9a745</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/synclib.v</spirit:name>
+        <spirit:fileType>verilogSource</spirit:fileType>
+        <spirit:userFileType>IMPORTED_FILE</spirit:userFileType>
+      </spirit:file>
+      <spirit:file>
+        <spirit:name>src/ft1248x1_to_stream8.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/ft1248x1_to_stream8_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>ft1248x1_to_stream8_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">ft1248x1_to_stream8_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>/UserIP</xilinx:taxonomy>
+      </xilinx:taxonomies>
+      <xilinx:displayName>ft1248x1_to_stream8_v1_0</xilinx:displayName>
+      <xilinx:definitionSource>package_project</xilinx:definitionSource>
+      <xilinx:vendorDisplayName>soclabs</xilinx:vendorDisplayName>
+      <xilinx:vendorURL>http://soclabs.org</xilinx:vendorURL>
+      <xilinx:coreRevision>3</xilinx:coreRevision>
+      <xilinx:coreCreationDateTime>2022-08-02T14:30:20Z</xilinx:coreCreationDateTime>
+      <xilinx:tags>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@5518b824_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@dd6b747_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@1dd36a4a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@382bd830_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@6aeff378_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@68b65f1b_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@6385c4eb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@16b128f7_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@744eb339_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@341d42a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@119532b1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@6244a695_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@5677e373_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@42f085dd_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@7de75687_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@7e5d266a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@75402bf4_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@71bb76b3_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@23e5a153_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@861dc68_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@5d40693a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+        <xilinx:tag xilinx:name="ui.data.coregen.df@7771d989_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0</xilinx:tag>
+      </xilinx:tags>
+    </xilinx:coreExtensions>
+    <xilinx:packagingInfo>
+      <xilinx:xilinxVersion>2021.1</xilinx:xilinxVersion>
+      <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="ba903ffc"/>
+      <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="198bf64b"/>
+      <xilinx:checksum xilinx:scope="ports" xilinx:value="ad10c1dd"/>
+      <xilinx:checksum xilinx:scope="parameters" xilinx:value="736a069e"/>
+    </xilinx:packagingInfo>
+  </spirit:vendorExtensions>
+</spirit:component>
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/ft1248x1_to_stream8_0.xcix b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/ft1248x1_to_stream8_0.xcix
new file mode 100644
index 0000000000000000000000000000000000000000..1b2410ad1ecde98574e898028f41ad55c1c8f3b1
GIT binary patch
literal 253
zcmWIWW@gc4U}NB5XqqS(`mg`;-f9L0hK)eX#vsCwoUB)oo5RQ;0OX^B%^TOBI2)+p
zt*dqJ%=yisMpujjf;`T8pYuO?#(R4x7jNO^tpS_1Ki*V$PT#Ba+<9%!GiSVYgFg74
zIi=6loXM2+@$4CA!3~dt0vKKwo<8Hb)mz)p#AxFRgC6~p{rY;EUcP6xc9>r{uC*$B
z;+)LI{F`{!Oy)k+c01=dD?@-cBa;ZT2o6U>oXH5JmNbIc5HAFHv$BDBj6i4tq&I^&
F3;;&gPx}A>

literal 0
HcmV?d00001

diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0.v
new file mode 100644
index 0000000..822ab4c
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0.v
@@ -0,0 +1,75 @@
+
+`timescale 1 ns / 1 ps
+
+	module ft1248x1_to_stream8_v1_0 #
+	(
+		// Users to add parameters here
+
+		// User parameters ends
+		// Do not modify the parameters beyond this line
+
+
+		// Parameters of Axi Slave Bus Interface RXD8
+		parameter integer C_RXD8_TDATA_WIDTH	= 32,
+
+		// Parameters of Axi Master Bus Interface TXD8
+		parameter integer C_TXD8_TDATA_WIDTH	= 32,
+		parameter integer C_TXD8_START_COUNT	= 32
+	)
+	(
+		// Users to add ports here
+
+		// User ports ends
+		// Do not modify the ports beyond this line
+
+
+		// Ports of Axi Slave Bus Interface RXD8
+		input wire  rxd8_aclk,
+		input wire  rxd8_aresetn,
+		output wire  rxd8_tready,
+		input wire [C_RXD8_TDATA_WIDTH-1 : 0] rxd8_tdata,
+		input wire [(C_RXD8_TDATA_WIDTH/8)-1 : 0] rxd8_tstrb,
+		input wire  rxd8_tlast,
+		input wire  rxd8_tvalid,
+
+		// Ports of Axi Master Bus Interface TXD8
+		input wire  txd8_aclk,
+		input wire  txd8_aresetn,
+		output wire  txd8_tvalid,
+		output wire [C_TXD8_TDATA_WIDTH-1 : 0] txd8_tdata,
+		output wire [(C_TXD8_TDATA_WIDTH/8)-1 : 0] txd8_tstrb,
+		output wire  txd8_tlast,
+		input wire  txd8_tready
+	);
+// Instantiation of Axi Bus Interface RXD8
+	ft1248x1_to_stream8_v1_0_RXD8 # ( 
+		.C_S_AXIS_TDATA_WIDTH(C_RXD8_TDATA_WIDTH)
+	) ft1248x1_to_stream8_v1_0_RXD8_inst (
+		.S_AXIS_ACLK(rxd8_aclk),
+		.S_AXIS_ARESETN(rxd8_aresetn),
+		.S_AXIS_TREADY(rxd8_tready),
+		.S_AXIS_TDATA(rxd8_tdata),
+		.S_AXIS_TSTRB(rxd8_tstrb),
+		.S_AXIS_TLAST(rxd8_tlast),
+		.S_AXIS_TVALID(rxd8_tvalid)
+	);
+
+// Instantiation of Axi Bus Interface TXD8
+	ft1248x1_to_stream8_v1_0_TXD8 # ( 
+		.C_M_AXIS_TDATA_WIDTH(C_TXD8_TDATA_WIDTH),
+		.C_M_START_COUNT(C_TXD8_START_COUNT)
+	) ft1248x1_to_stream8_v1_0_TXD8_inst (
+		.M_AXIS_ACLK(txd8_aclk),
+		.M_AXIS_ARESETN(txd8_aresetn),
+		.M_AXIS_TVALID(txd8_tvalid),
+		.M_AXIS_TDATA(txd8_tdata),
+		.M_AXIS_TSTRB(txd8_tstrb),
+		.M_AXIS_TLAST(txd8_tlast),
+		.M_AXIS_TREADY(txd8_tready)
+	);
+
+	// Add user logic here
+
+	// User logic ends
+
+	endmodule
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_RXD8.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_RXD8.v
new file mode 100644
index 0000000..9b39ac6
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_RXD8.v
@@ -0,0 +1,167 @@
+
+`timescale 1 ns / 1 ps
+
+	module ft1248x1_to_stream8_v1_0_RXD8 #
+	(
+		// Users to add parameters here
+
+		// User parameters ends
+		// Do not modify the parameters beyond this line
+
+		// AXI4Stream sink: Data Width
+		parameter integer C_S_AXIS_TDATA_WIDTH	= 32
+	)
+	(
+		// Users to add ports here
+
+		// User ports ends
+		// Do not modify the ports beyond this line
+
+		// AXI4Stream sink: Clock
+		input wire  S_AXIS_ACLK,
+		// AXI4Stream sink: Reset
+		input wire  S_AXIS_ARESETN,
+		// Ready to accept data in
+		output wire  S_AXIS_TREADY,
+		// Data in
+		input wire [C_S_AXIS_TDATA_WIDTH-1 : 0] S_AXIS_TDATA,
+		// Byte qualifier
+		input wire [(C_S_AXIS_TDATA_WIDTH/8)-1 : 0] S_AXIS_TSTRB,
+		// Indicates boundary of last packet
+		input wire  S_AXIS_TLAST,
+		// Data is in valid
+		input wire  S_AXIS_TVALID
+	);
+	// function called clogb2 that returns an integer which has the 
+	// value of the ceiling of the log base 2.
+	function integer clogb2 (input integer bit_depth);
+	  begin
+	    for(clogb2=0; bit_depth>0; clogb2=clogb2+1)
+	      bit_depth = bit_depth >> 1;
+	  end
+	endfunction
+
+	// Total number of input data.
+	localparam NUMBER_OF_INPUT_WORDS  = 8;
+	// bit_num gives the minimum number of bits needed to address 'NUMBER_OF_INPUT_WORDS' size of FIFO.
+	localparam bit_num  = clogb2(NUMBER_OF_INPUT_WORDS-1);
+	// Define the states of state machine
+	// The control state machine oversees the writing of input streaming data to the FIFO,
+	// and outputs the streaming data from the FIFO
+	parameter [1:0] IDLE = 1'b0,        // This is the initial/idle state 
+
+	                WRITE_FIFO  = 1'b1; // In this state FIFO is written with the
+	                                    // input stream data S_AXIS_TDATA 
+	wire  	axis_tready;
+	// State variable
+	reg mst_exec_state;  
+	// FIFO implementation signals
+	genvar byte_index;     
+	// FIFO write enable
+	wire fifo_wren;
+	// FIFO full flag
+	reg fifo_full_flag;
+	// FIFO write pointer
+	reg [bit_num-1:0] write_pointer;
+	// sink has accepted all the streaming data and stored in FIFO
+	  reg writes_done;
+	// I/O Connections assignments
+
+	assign S_AXIS_TREADY	= axis_tready;
+	// Control state machine implementation
+	always @(posedge S_AXIS_ACLK) 
+	begin  
+	  if (!S_AXIS_ARESETN) 
+	  // Synchronous reset (active low)
+	    begin
+	      mst_exec_state <= IDLE;
+	    end  
+	  else
+	    case (mst_exec_state)
+	      IDLE: 
+	        // The sink starts accepting tdata when 
+	        // there tvalid is asserted to mark the
+	        // presence of valid streaming data 
+	          if (S_AXIS_TVALID)
+	            begin
+	              mst_exec_state <= WRITE_FIFO;
+	            end
+	          else
+	            begin
+	              mst_exec_state <= IDLE;
+	            end
+	      WRITE_FIFO: 
+	        // When the sink has accepted all the streaming input data,
+	        // the interface swiches functionality to a streaming master
+	        if (writes_done)
+	          begin
+	            mst_exec_state <= IDLE;
+	          end
+	        else
+	          begin
+	            // The sink accepts and stores tdata 
+	            // into FIFO
+	            mst_exec_state <= WRITE_FIFO;
+	          end
+
+	    endcase
+	end
+	// AXI Streaming Sink 
+	// 
+	// The example design sink is always ready to accept the S_AXIS_TDATA  until
+	// the FIFO is not filled with NUMBER_OF_INPUT_WORDS number of input words.
+	assign axis_tready = ((mst_exec_state == WRITE_FIFO) && (write_pointer <= NUMBER_OF_INPUT_WORDS-1));
+
+	always@(posedge S_AXIS_ACLK)
+	begin
+	  if(!S_AXIS_ARESETN)
+	    begin
+	      write_pointer <= 0;
+	      writes_done <= 1'b0;
+	    end  
+	  else
+	    if (write_pointer <= NUMBER_OF_INPUT_WORDS-1)
+	      begin
+	        if (fifo_wren)
+	          begin
+	            // write pointer is incremented after every write to the FIFO
+	            // when FIFO write signal is enabled.
+	            write_pointer <= write_pointer + 1;
+	            writes_done <= 1'b0;
+	          end
+	          if ((write_pointer == NUMBER_OF_INPUT_WORDS-1)|| S_AXIS_TLAST)
+	            begin
+	              // reads_done is asserted when NUMBER_OF_INPUT_WORDS numbers of streaming data 
+	              // has been written to the FIFO which is also marked by S_AXIS_TLAST(kept for optional usage).
+	              writes_done <= 1'b1;
+	            end
+	      end  
+	end
+
+	// FIFO write enable generation
+	assign fifo_wren = S_AXIS_TVALID && axis_tready;
+
+	// FIFO Implementation
+	generate 
+	  for(byte_index=0; byte_index<= (C_S_AXIS_TDATA_WIDTH/8-1); byte_index=byte_index+1)
+	  begin:FIFO_GEN
+
+	    reg  [(C_S_AXIS_TDATA_WIDTH/4)-1:0] stream_data_fifo [0 : NUMBER_OF_INPUT_WORDS-1];
+
+	    // Streaming input data is stored in FIFO
+
+	    always @( posedge S_AXIS_ACLK )
+	    begin
+	      if (fifo_wren)// && S_AXIS_TSTRB[byte_index])
+	        begin
+	          stream_data_fifo[write_pointer] <= S_AXIS_TDATA[(byte_index*8+7) -: 8];
+	        end  
+	    end  
+	  end		
+	endgenerate
+
+	// Add user logic here
+
+	// User logic ends
+
+	endmodule
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_TXD8.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_TXD8.v
new file mode 100644
index 0000000..3abf9f8
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_TXD8.v
@@ -0,0 +1,228 @@
+
+`timescale 1 ns / 1 ps
+
+	module ft1248x1_to_stream8_v1_0_TXD8 #
+	(
+		// Users to add parameters here
+
+		// User parameters ends
+		// Do not modify the parameters beyond this line
+
+		// Width of S_AXIS address bus. The slave accepts the read and write addresses of width C_M_AXIS_TDATA_WIDTH.
+		parameter integer C_M_AXIS_TDATA_WIDTH	= 32,
+		// Start count is the number of clock cycles the master will wait before initiating/issuing any transaction.
+		parameter integer C_M_START_COUNT	= 32
+	)
+	(
+		// Users to add ports here
+
+		// User ports ends
+		// Do not modify the ports beyond this line
+
+		// Global ports
+		input wire  M_AXIS_ACLK,
+		// 
+		input wire  M_AXIS_ARESETN,
+		// Master Stream Ports. TVALID indicates that the master is driving a valid transfer, A transfer takes place when both TVALID and TREADY are asserted. 
+		output wire  M_AXIS_TVALID,
+		// TDATA is the primary payload that is used to provide the data that is passing across the interface from the master.
+		output wire [C_M_AXIS_TDATA_WIDTH-1 : 0] M_AXIS_TDATA,
+		// TSTRB is the byte qualifier that indicates whether the content of the associated byte of TDATA is processed as a data byte or a position byte.
+		output wire [(C_M_AXIS_TDATA_WIDTH/8)-1 : 0] M_AXIS_TSTRB,
+		// TLAST indicates the boundary of a packet.
+		output wire  M_AXIS_TLAST,
+		// TREADY indicates that the slave can accept a transfer in the current cycle.
+		input wire  M_AXIS_TREADY
+	);
+	// Total number of output data                                                 
+	localparam NUMBER_OF_OUTPUT_WORDS = 8;                                               
+	                                                                                     
+	// function called clogb2 that returns an integer which has the                      
+	// value of the ceiling of the log base 2.                                           
+	function integer clogb2 (input integer bit_depth);                                   
+	  begin                                                                              
+	    for(clogb2=0; bit_depth>0; clogb2=clogb2+1)                                      
+	      bit_depth = bit_depth >> 1;                                                    
+	  end                                                                                
+	endfunction                                                                          
+	                                                                                     
+	// WAIT_COUNT_BITS is the width of the wait counter.                                 
+	localparam integer WAIT_COUNT_BITS = clogb2(C_M_START_COUNT-1);                      
+	                                                                                     
+	// bit_num gives the minimum number of bits needed to address 'depth' size of FIFO.  
+	localparam bit_num  = clogb2(NUMBER_OF_OUTPUT_WORDS);                                
+	                                                                                     
+	// Define the states of state machine                                                
+	// The control state machine oversees the writing of input streaming data to the FIFO,
+	// and outputs the streaming data from the FIFO                                      
+	parameter [1:0] IDLE = 2'b00,        // This is the initial/idle state               
+	                                                                                     
+	                INIT_COUNTER  = 2'b01, // This state initializes the counter, once   
+	                                // the counter reaches C_M_START_COUNT count,        
+	                                // the state machine changes state to SEND_STREAM     
+	                SEND_STREAM   = 2'b10; // In this state the                          
+	                                     // stream data is output through M_AXIS_TDATA   
+	// State variable                                                                    
+	reg [1:0] mst_exec_state;                                                            
+	// Example design FIFO read pointer                                                  
+	reg [bit_num-1:0] read_pointer;                                                      
+
+	// AXI Stream internal signals
+	//wait counter. The master waits for the user defined number of clock cycles before initiating a transfer.
+	reg [WAIT_COUNT_BITS-1 : 0] 	count;
+	//streaming data valid
+	wire  	axis_tvalid;
+	//streaming data valid delayed by one clock cycle
+	reg  	axis_tvalid_delay;
+	//Last of the streaming data 
+	wire  	axis_tlast;
+	//Last of the streaming data delayed by one clock cycle
+	reg  	axis_tlast_delay;
+	//FIFO implementation signals
+	reg [C_M_AXIS_TDATA_WIDTH-1 : 0] 	stream_data_out;
+	wire  	tx_en;
+	//The master has issued all the streaming data stored in FIFO
+	reg  	tx_done;
+
+
+	// I/O Connections assignments
+
+	assign M_AXIS_TVALID	= axis_tvalid_delay;
+	assign M_AXIS_TDATA	= stream_data_out;
+	assign M_AXIS_TLAST	= axis_tlast_delay;
+	assign M_AXIS_TSTRB	= {(C_M_AXIS_TDATA_WIDTH/8){1'b1}};
+
+
+	// Control state machine implementation                             
+	always @(posedge M_AXIS_ACLK)                                             
+	begin                                                                     
+	  if (!M_AXIS_ARESETN)                                                    
+	  // Synchronous reset (active low)                                       
+	    begin                                                                 
+	      mst_exec_state <= IDLE;                                             
+	      count    <= 0;                                                      
+	    end                                                                   
+	  else                                                                    
+	    case (mst_exec_state)                                                 
+	      IDLE:                                                               
+	        // The slave starts accepting tdata when                          
+	        // there tvalid is asserted to mark the                           
+	        // presence of valid streaming data                               
+	        //if ( count == 0 )                                                 
+	        //  begin                                                           
+	            mst_exec_state  <= INIT_COUNTER;                              
+	        //  end                                                             
+	        //else                                                              
+	        //  begin                                                           
+	        //    mst_exec_state  <= IDLE;                                      
+	        //  end                                                             
+	                                                                          
+	      INIT_COUNTER:                                                       
+	        // The slave starts accepting tdata when                          
+	        // there tvalid is asserted to mark the                           
+	        // presence of valid streaming data                               
+	        if ( count == C_M_START_COUNT - 1 )                               
+	          begin                                                           
+	            mst_exec_state  <= SEND_STREAM;                               
+	          end                                                             
+	        else                                                              
+	          begin                                                           
+	            count <= count + 1;                                           
+	            mst_exec_state  <= INIT_COUNTER;                              
+	          end                                                             
+	                                                                          
+	      SEND_STREAM:                                                        
+	        // The example design streaming master functionality starts       
+	        // when the master drives output tdata from the FIFO and the slave
+	        // has finished storing the S_AXIS_TDATA                          
+	        if (tx_done)                                                      
+	          begin                                                           
+	            mst_exec_state <= IDLE;                                       
+	          end                                                             
+	        else                                                              
+	          begin                                                           
+	            mst_exec_state <= SEND_STREAM;                                
+	          end                                                             
+	    endcase                                                               
+	end                                                                       
+
+
+	//tvalid generation
+	//axis_tvalid is asserted when the control state machine's state is SEND_STREAM and
+	//number of output streaming data is less than the NUMBER_OF_OUTPUT_WORDS.
+	assign axis_tvalid = ((mst_exec_state == SEND_STREAM) && (read_pointer < NUMBER_OF_OUTPUT_WORDS));
+	                                                                                               
+	// AXI tlast generation                                                                        
+	// axis_tlast is asserted number of output streaming data is NUMBER_OF_OUTPUT_WORDS-1          
+	// (0 to NUMBER_OF_OUTPUT_WORDS-1)                                                             
+	assign axis_tlast = (read_pointer == NUMBER_OF_OUTPUT_WORDS-1);                                
+	                                                                                               
+	                                                                                               
+	// Delay the axis_tvalid and axis_tlast signal by one clock cycle                              
+	// to match the latency of M_AXIS_TDATA                                                        
+	always @(posedge M_AXIS_ACLK)                                                                  
+	begin                                                                                          
+	  if (!M_AXIS_ARESETN)                                                                         
+	    begin                                                                                      
+	      axis_tvalid_delay <= 1'b0;                                                               
+	      axis_tlast_delay <= 1'b0;                                                                
+	    end                                                                                        
+	  else                                                                                         
+	    begin                                                                                      
+	      axis_tvalid_delay <= axis_tvalid;                                                        
+	      axis_tlast_delay <= axis_tlast;                                                          
+	    end                                                                                        
+	end                                                                                            
+
+
+	//read_pointer pointer
+
+	always@(posedge M_AXIS_ACLK)                                               
+	begin                                                                            
+	  if(!M_AXIS_ARESETN)                                                            
+	    begin                                                                        
+	      read_pointer <= 0;                                                         
+	      tx_done <= 1'b0;                                                           
+	    end                                                                          
+	  else                                                                           
+	    if (read_pointer <= NUMBER_OF_OUTPUT_WORDS-1)                                
+	      begin                                                                      
+	        if (tx_en)                                                               
+	          // read pointer is incremented after every read from the FIFO          
+	          // when FIFO read signal is enabled.                                   
+	          begin                                                                  
+	            read_pointer <= read_pointer + 1;                                    
+	            tx_done <= 1'b0;                                                     
+	          end                                                                    
+	      end                                                                        
+	    else if (read_pointer == NUMBER_OF_OUTPUT_WORDS)                             
+	      begin                                                                      
+	        // tx_done is asserted when NUMBER_OF_OUTPUT_WORDS numbers of streaming data
+	        // has been out.                                                         
+	        tx_done <= 1'b1;                                                         
+	      end                                                                        
+	end                                                                              
+
+
+	//FIFO read enable generation 
+
+	assign tx_en = M_AXIS_TREADY && axis_tvalid;   
+	                                                     
+	    // Streaming output data is read from FIFO       
+	    always @( posedge M_AXIS_ACLK )                  
+	    begin                                            
+	      if(!M_AXIS_ARESETN)                            
+	        begin                                        
+	          stream_data_out <= 1;                      
+	        end                                          
+	      else if (tx_en)// && M_AXIS_TSTRB[byte_index]  
+	        begin                                        
+	          stream_data_out <= read_pointer + 32'b1;   
+	        end                                          
+	    end                                              
+
+	// Add user logic here
+
+	// User logic ends
+
+	endmodule
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/ip_project_archive.zip b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/ip_project_archive.zip
new file mode 100755
index 0000000000000000000000000000000000000000..e67e74bbc9ca5ffffb895c6ce630825d07197fa2
GIT binary patch
literal 19366
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
SE=K(QGy0t?LM8Oa(f<c-A@0}!

literal 0
HcmV?d00001

diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/soclabs.org_user_ft1248x1_to_stream8_1.0.zip b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/soclabs.org_user_ft1248x1_to_stream8_1.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..bd8f20f74f0cc9c44da89578d526ab1afbd7f276
GIT binary patch
literal 22475
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

literal 0
HcmV?d00001

diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/ft1248x1_to_stream8.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/ft1248x1_to_stream8.v
new file mode 100755
index 0000000..6c55abc
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/ft1248x1_to_stream8.v
@@ -0,0 +1,187 @@
+//-----------------------------------------------------------------------------
+// FT1248 1-bit-data to 8-bit AXI-Stream IO
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Flynn (d.w.flynn@soton.ac.uk)
+//
+// Copyright © 2022, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Abstract : FT1248 1-bit data off-chip interface (emulate FT232H device)
+//-----------------------------------------------------------------------------
+
+
+module ft1248x1_to_stream8
+  (
+  input  wire  ft_clk_i,         // SCLK
+  input  wire  ft_ssn_i,         // SS_N
+  output wire  ft_miso_o,        // MISO
+//  inout  wire  ft_miosio_io,   // MIOSIO tristate output control
+  input  wire ft_miosio_i,
+  output wire ft_miosio_o,
+  output wire ft_miosio_z,
+// assign ft_miosio_io = (ft_miosio_z) ? 1'bz : ft_miosio_o;// tri-state pad control for MIOSIO
+// 
+// assign #1 ft_miosio_i  = ft_miosio_io; //add notional delay on inout to ensure last "half-bit" on FT1248TXD is sampled before tri-stated
+
+  input  wire  clk,             // external primary clock
+  input  wire  resetn,          // external reset (active low)
+  
+  // Ports of Axi stream Bus Interface TXD
+  output wire  txd_tvalid_o,
+  output wire [7 : 0] txd_tdata8_o,
+  input  wire  txd_tready_i,
+
+  // Ports of Axi stream Bus Interface RXD
+  output wire  rxd_tready_o,
+  input  wire [7 : 0] rxd_tdata8_i,
+  input  wire  rxd_tvalid_i
+
+  );
+
+//wire ft_clk;
+wire ft_clk_rising;
+wire ft_clk_falling;
+
+wire ft_ssn;
+//wire ft_ssn_rising;
+//wire ft_ssn_falling;
+
+SYNCHRONIZER_EDGES u_xync_ft_clk (
+	.testmode_i(1'b0),
+	.clk_i(clk),
+	.reset_n_i(resetn),
+	.asyn_i(ft_clk_i),
+	.syn_o(),
+	.posedge_o(ft_clk_rising),
+	.negedge_o(ft_clk_falling)
+	);
+
+SYNCHRONIZER_EDGES u_xync_ft_ssn (
+	.testmode_i(1'b0),
+	.clk_i(clk),
+	.reset_n_i(resetn),
+	.asyn_i(ft_ssn_i),
+	.syn_o(ft_ssn),
+	.posedge_o( ),
+	.negedge_o( )
+	);
+
+//----------------------------------------------
+//-- FT1248 1-bit protocol State Machine
+//----------------------------------------------
+
+reg [4:0] ft_state; // 17-state for bit-serial
+wire [4:0] ft_nextstate = ft_state + 5'b00001;
+
+// advance state count on rising edge of ft_clk
+always @(posedge clk or negedge resetn)
+  if (!resetn)
+    ft_state <= 5'b11111;  
+  else if (ft_ssn) // sync reset
+    ft_state <= 5'b11111;
+  else if (ft_clk_rising) // loop if multi-data
+//    ft_state <= (ft_state == 5'b01111) ? 5'b01000 : ft_nextstate;
+    ft_state <= ft_nextstate;
+
+// 16: bus turnaround (or bit[5])
+// 0 for CMD3
+// 3 for CMD2
+// 5 for CMD1
+// 6 for CMD0
+// 7 for cmd turnaround
+// 8 for data bit0
+// 9 for data bit1
+// 10 for data bit2
+// 11 for data bit3
+// 12 for data bit4
+// 13 for data bit5
+// 14 for data bit6
+// 15 for data bit7
+
+// capture 7-bit CMD on falling edge of clock (mid-data)
+reg [7:0] ft_cmd;
+// - valid sample ready after 7th edge (ready RX or TX data phase functionality)
+always @(posedge clk or negedge resetn)
+  if (!resetn)
+    ft_cmd <= 8'b00000001;
+  else if (ft_ssn) // sync reset
+    ft_cmd <= 8'b00000001;
+  else if (ft_clk_falling & !ft_state[3] & !ft_nextstate[3]) // on shift if CMD phase)
+    ft_cmd <= {ft_cmd[6:0],ft_miosio_i};
+
+wire ft_cmd_valid = ft_cmd[7];
+wire ft_cmd_rxd =  ft_cmd[7] & !ft_cmd[6] & !ft_cmd[3] & !ft_cmd[1] &  ft_cmd[0];
+wire ft_cmd_txd =  ft_cmd[7] & !ft_cmd[6] & !ft_cmd[3] & !ft_cmd[1] & !ft_cmd[0];
+
+// tristate enable for miosio (deselected status or serialized data for read command)
+wire ft_miosio_e = ft_ssn_i | (ft_cmd_rxd & !ft_state[4] & ft_state[3]);
+assign ft_miosio_z = !ft_miosio_e;
+
+// capture (ft_cmd_txd) serial data out on falling edge of clock
+// bit [0] indicated byte valid
+reg [7:0] rxd_sr;
+always @(posedge clk or negedge resetn)
+  if (!resetn)
+    rxd_sr <= 8'b00000000;
+  else if (ft_ssn) // sync reset
+    rxd_sr <= 8'b00000000;
+  else if (ft_clk_falling & ft_cmd_txd & (ft_state[4:3] == 2'b01))  //serial shift
+    rxd_sr <= {ft_miosio_i, rxd_sr[7:1]};
+   
+// AXI STREAM handshake interfaces
+// TX stream delivers valid FT1248 read data transfer
+// 8-bit write port with extra top-bit used as valid qualifer
+reg [8:0] txstream;
+always @(posedge clk or negedge resetn)
+  if (!resetn)
+    txstream <= 9'b000000000;
+  else if (txstream[8] & txd_tready_i) // priority clear stream data valid when accepted
+    txstream[8] <= 1'b0;
+  else if (ft_clk_falling & ft_cmd_txd & (ft_state==5'b01111))  //load as last shift arrives
+    txstream[8:0] <= {1'b1, 1'b0, rxd_sr[7:1]};
+
+assign txd_tvalid_o = txstream[8];
+assign txd_tdata8_o = txstream[7:0];
+
+
+// AXI STREAM handshake interfaces
+// RX stream accepts 8-bit data to transfer over FT1248 channel
+// 8-bit write port with extra top-bit used as valid qualifer
+reg [8:0] rxstream;
+always @(posedge clk or negedge resetn)
+  if (!resetn)
+    rxstream <= 9'b000000000;
+  else if (!rxstream[8] & rxd_tvalid_i) // if empty can accept valid RX stream data
+    rxstream[8:0] <= {1'b1,rxd_tdata8_i};
+  else if (rxstream[8] & ft_clk_rising & ft_cmd_rxd &  (ft_state==5'b01111)) // hold until final shift completion
+    rxstream[8] <= 1'b0;
+assign rxd_tready_o = !rxstream[8]; // ready until loaded
+
+// shift TXD on rising edge of clock
+reg [7:0] txd_sr;
+// rewrite for clocked
+always @(posedge clk or negedge resetn)
+  if (!resetn)
+    txd_sr <= 8'b00000000;
+  else if (ft_ssn) // sync reset
+    txd_sr <= 8'b00000000;
+  else if (ft_clk_falling & ft_cmd_rxd & (ft_state == 5'b00111))
+    txd_sr <=  rxstream[8] ? rxstream[7:0] : 8'b00000000;
+  else if (ft_clk_rising & ft_cmd_rxd & (ft_state[4:3] == 2'b01))  //serial shift
+    txd_sr <= {1'b0,txd_sr[7:1]};
+
+
+//FT1248 FIFO status signals
+
+// ft_miso_o reflects TXF when deselected
+assign ft_miosio_o =  (ft_ssn_i) ? !txstream[8] : txd_sr[0];
+
+// ft_miso_o reflects RXE when deselected
+assign ft_miso_o = (ft_ssn_i) ? rxstream[8] : (ft_state == 5'b00111);
+
+
+endmodule
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/synclib.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/synclib.v
new file mode 100755
index 0000000..1daf61f
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/src/synclib.v
@@ -0,0 +1,139 @@
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Flynn (d.w.flynn@soton.ac.uk)
+//
+// Copyright © 2022, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module SYNCHRONIZER (
+	input wire        testmode_i
+	,input wire       clk_i
+        ,input wire       reset_n_i
+	,input wire       asyn_i
+	,output wire      syn_o
+	);
+
+reg sync_stage1;
+reg sync_stage2;
+
+  always @(posedge clk_i or negedge reset_n_i)
+    if(~reset_n_i) begin
+        sync_stage1 <= 1'b0;
+        sync_stage2 <= 1'b0;
+      end
+    else begin
+        sync_stage1 <= asyn_i;
+        sync_stage2 <= sync_stage1;
+      end
+
+assign syn_o = (testmode_i) ? asyn_i : sync_stage2;
+
+endmodule
+
+module SYNCHRONIZER_EDGES (
+	input wire        testmode_i
+	,input wire       clk_i
+        ,input wire       reset_n_i
+	,input wire       asyn_i
+	,output wire      syn_o
+	,output wire      posedge_o
+	,output wire      negedge_o
+	);
+
+reg sync_stage1;
+reg sync_stage2;
+reg sync_stage3;
+
+  always @(posedge clk_i or negedge reset_n_i)
+    if(~reset_n_i) begin
+        sync_stage1 <= 1'b0;
+        sync_stage2 <= 1'b0;
+        sync_stage3 <= 1'b0;
+      end
+    else begin
+        sync_stage1 <= asyn_i;
+        sync_stage2 <= sync_stage1;
+        sync_stage3 <= sync_stage2;
+      end
+
+assign syn_o     = (testmode_i) ? asyn_i : sync_stage2;
+assign posedge_o = (testmode_i) ? asyn_i : ( sync_stage2 & !sync_stage3);
+assign negedge_o = (testmode_i) ? asyn_i : (!sync_stage2 &  sync_stage3);
+
+endmodule
+
+module SYNCHRONIZER_RST_LO (
+  	 input wire       reset_n_i
+	,input wire       testmode_i
+	,input wire       clk_i
+	,input wire       asyn_i
+	,output wire      syn_o
+	);
+
+reg sync_stage1;
+reg sync_stage2;
+
+  always @(posedge clk_i or negedge reset_n_i)
+    if(~reset_n_i) begin
+        sync_stage1 <= 1'b0;
+        sync_stage2 <= 1'b0;
+      end
+    else begin
+        sync_stage1 <= asyn_i;
+        sync_stage2 <= sync_stage1;
+      end
+assign syn_o = (testmode_i) ? asyn_i : sync_stage2;
+
+endmodule
+
+module SYNCHRONIZER_RST_HI (
+  	 input wire       reset_n_i
+	,input wire       testmode_i
+	,input wire       clk_i
+	,input wire       asyn_i
+	,output wire      syn_o
+	);
+
+reg sync_stage1;
+reg sync_stage2;
+
+  always @(posedge clk_i or negedge reset_n_i)
+    if(~reset_n_i) begin
+        sync_stage1 <= 1'b1;
+        sync_stage2 <= 1'b1;
+      end
+    else begin
+        sync_stage1 <= asyn_i;
+        sync_stage2 <= sync_stage1;
+      end
+
+assign syn_o = (testmode_i) ? asyn_i : sync_stage2;
+
+endmodule
+
+
+module NRST_SYNCHRONIZER_LO (
+  	 input wire       reset_n_i
+	,input wire       testmode_i
+	,input wire       clk_i
+	,output wire      synreset_n_o
+	);
+
+reg sync_stage1;
+reg sync_stage2;
+
+  always @(posedge clk_i or negedge reset_n_i)
+    if(~reset_n_i) begin
+        sync_stage1 <= 1'b0;
+        sync_stage2 <= 1'b0;
+      end
+    else begin
+        sync_stage1 <= 1'b1;
+        sync_stage2 <= sync_stage1;
+      end
+
+assign synreset_n_o = (testmode_i) ? reset_n_i : sync_stage2;
+
+endmodule
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/xgui/ft1248x1_to_stream8_v1_0.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/xgui/ft1248x1_to_stream8_v1_0.tcl
new file mode 100644
index 0000000..0db18e9
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_stream8_1.0/xgui/ft1248x1_to_stream8_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"
+
+
+}
+
+
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_ip.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_ip.tcl
index fdcfe3c..bac85ab 100644
--- a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_ip.tcl
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_ip.tcl
@@ -78,7 +78,7 @@ read_verilog  $soc_vlog/cmsdk_mcu_chip.v
 
 update_compile_order -fileset sources_1
 
-set mculib_ip ./MCULIB
+set mculib_ip  $outputDir/MCULIB
 
 ipx::package_project -root_dir $mculib_ip -vendor soclabs.org -library user -taxonomy /UserIP -import_files -set_current false -force
 
@@ -101,6 +101,6 @@ ipx::archive_core  $mculib_ip/soclabs.org_user_cmsdk_mcu_chip_1.0.zip [ipx::curr
 ipx::move_temp_component_back -component [ipx::current_core]
 close_project -delete
 
-set_property  ip_repo_paths { ip_repo ./MCULIB} [current_project]
+set_property  ip_repo_paths { ip_repo $mculib_ip} [current_project]
 update_ip_catalog
 close_project
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_z2.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_z2.tcl
index 1adae9b..88750cb 100644
--- a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_z2.tcl
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_z2.tcl
@@ -19,6 +19,8 @@
 set xilinx_part xc7z020clg400-1
 set project project_pynq_z2
 set importDir target_fpga_pynq_z2
+set ipDir ./ip_repo
+set mcuDir ./vivado/built_mcu_fpga/MCULIB
 set pynqDir pynq_export/pz2/pynq/overlays/soclabs
 set exportDir /research/soclabs/pynq_export/pz2/pynq/overlays/soclabs
 #set_property BOARD_PART tul.com:pynq-z2:part0:1.1 [current_project]
@@ -36,15 +38,14 @@ set_property TARGET_LANGUAGE Verilog [current_project]
 set_property DEFAULT_LIB work [current_project]
 
 set paths [list \
- "../../../../../../../soclabs/fpga/vivado/pynq/ip_repo"\
- "../../../../../MCULIB"\
+ $ipDir\
+ $mcuDir\
  ]
 
 # Set IP repository paths
 set obj [get_filesets sources_1]
 if { $obj != {} } {
-   set_property "ip_repo_paths" "[file normalize "../../../../../../../soclabs/fpga/vivado/pynq/ip_repo"] [file normalize "../../../../../MCULIB"]" $obj
-
+   set_property "ip_repo_paths" "[file normalize $ipDir] [file normalize $mcuDir]" $obj
    # Rebuild user ip_repo's index before adding any source files
    update_ip_catalog -rebuild
 }
@@ -111,7 +112,7 @@ exec unzip -u -o $project/design_1.xsa -d $project/export
 exec mkdir -p $pynqDir
 exec cp -p $project/export/design_1.bit $pynqDir
 exec cp -p $project/export/design_1.hwh $pynqDir
-exec cp -p $project/export/design_1.bit $exportDir
-exec cp -p $project/export/design_1.hwh $exportDir
+#exec cp -p $project/export/design_1.bit $exportDir
+#exec cp -p $project/export/design_1.hwh $exportDir
 
 exit 1
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_zcu104.tcl b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_zcu104.tcl
index 4051e9a..80b4726 100644
--- a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_zcu104.tcl
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/scripts/build_mcu_fpga_pynq_zcu104.tcl
@@ -19,6 +19,8 @@
 set xilinx_part xczu7ev-ffvc1156-2-e
 set project project_pynq_zcu104
 set importDir target_fpga_zcu104
+set ipDir ./ip_repo
+set mcuDir ./vivado/built_mcu_fpga/MCULIB
 set pynqDir pynq_export/pz104/pynq/overlays/soclabs
 #set_property BOARD_PART xilinx.com:zcu104:part0:1.1 [current_project]
 
@@ -34,21 +36,15 @@ set_part $xilinx_part
 set_property TARGET_LANGUAGE Verilog [current_project]
 set_property DEFAULT_LIB work [current_project]
 
-##set paths [list \
-## "../../../../../../../soclabs/fpga/vivado/pynq/ip_repo"\
-## "./MCULIB"\
-## ]
-
 set paths [list \
- "./MCULIB"\
+ $ipDir\
+ $mcuDir\
  ]
 
 # Set IP repository paths
 set obj [get_filesets sources_1]
 if { $obj != {} } {
-##   set_property "ip_repo_paths" "[file normalize "../../../../../../../soclabs/fpga/vivado/pynq/ip_repo"] [file normalize "./MCULIB"]" $obj
-   set_property "ip_repo_paths" "[file normalize "./MCULIB"]" $obj
-
+   set_property "ip_repo_paths" "[file normalize $ipDir] [file normalize $mcuDir]" $obj
    # Rebuild user ip_repo's index before adding any source files
    update_ip_catalog -rebuild
 }
-- 
GitLab