diff --git a/fpga/makefile b/fpga/makefile new file mode 100644 index 0000000000000000000000000000000000000000..987f8bff4207dbe2e9aa01cd15b8d2ecd8a20be2 --- /dev/null +++ b/fpga/makefile @@ -0,0 +1,43 @@ +#----------------------------------------------------------------------------- +# SoCDebug FPGA Flow Makefile +# - Used for Packaging Up Socket IP +# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +# +# Contributors +# +# David Mapstone (d.a.mapstone@soton.ac.uk) +# +# Copyright (C) 2021-3, SoC Labs (www.soclabs.org) +#----------------------------------------------------------------------------- + +IMPLEMENTATION_DIR ?= $(SOCLABS_PROJECT_DIR)/imp/fpga +TEMP_RTL_SOCKET_DIR := $(IMPLEMENTATION_DIR)/socket + +RTL_SOCKET_DIR := $(SOCLABS_SOCDEBUG_TECH_DIR)/socket/vivado_lib + +package_adp_control: + @echo Packaging Uart To AXI Master + @mkdir -p $(TEMP_RTL_SOCKET_DIR) + @cp -r $(RTL_SOCKET_DIR)/ADPcontrol_1.0 $(TEMP_RTL_SOCKET_DIR)/ADPcontrol_1.0 + +package_axi_stream_io: + @echo Packaging Uart To AXI Master + @mkdir -p $(TEMP_RTL_SOCKET_DIR) + @cp -r $(RTL_SOCKET_DIR)/axi_stream_io_1.0 $(TEMP_RTL_SOCKET_DIR)/axi_stream_io_1.0 + +package_ft1248_to_stream: + @echo Packaging FT1248 to AXI Stream + @mkdir -p $(TEMP_RTL_SOCKET_DIR) + @cp -r $(RTL_SOCKET_DIR)/ft1248x1_to_stream8_1.0 $(TEMP_RTL_SOCKET_DIR)/ft1248x1_to_stream8_1.0 + @cp -r $(RTL_SOCKET_DIR)/ft1248x1_to_axi_streamio_1.0 $(TEMP_RTL_SOCKET_DIR)/ft1248x1_to_axi_streamio_1.0 + +package_uart_to_axi: + @echo Packaging Uart To AXI Master + @mkdir -p $(TEMP_RTL_SOCKET_DIR) + @cp -r $(RTL_SOCKET_DIR)/uart_to_AXI_master_1.0 $(TEMP_RTL_SOCKET_DIR)/uart_to_AXI_master_1.0 + +package_socket: clean_socket package_uart_to_axi package_ft1248_to_stream package_axi_stream_io package_adp_control + +clean_socket: + @echo Cleaning FPGA Implementation Socket Directory + @rm -rf $(TEMP_RTL_SOCKET_DIR) \ No newline at end of file diff --git a/socket/vivado_lib/ADPcontrol_1.0/bd/bd.tcl b/socket/vivado_lib/ADPcontrol_1.0/bd/bd.tcl new file mode 100755 index 0000000000000000000000000000000000000000..690e4e124478e7a541fa5bd5469dc6447e9f893f --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_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/socket/vivado_lib/ADPcontrol_1.0/component.xml b/socket/vivado_lib/ADPcontrol_1.0/component.xml new file mode 100755 index 0000000000000000000000000000000000000000..8b1054692e746f6c07edeebdb9718ef729fa8d6f --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/component.xml @@ -0,0 +1,1425 @@ +<?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>ADPcontrol</spirit:name> + <spirit:version>1.0</spirit:version> + <spirit:busInterfaces> + <spirit:busInterface> + <spirit:name>com_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>com_rx_tdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>com_rx_tvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>com_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.COM_RX.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>com_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>TDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>com_tx_tdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>com_tx_tvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>com_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.COM_TX.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>stdio_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>stdio_rx_tdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>stdio_rx_tvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>stdio_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.STDIO_RX.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>stdio_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>TDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>stdio_tx_tdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>stdio_tx_tvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>TREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>stdio_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.STDIO_TX.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>ahb</spirit:name> + <spirit:displayName>AHB_M</spirit:displayName> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="ahblite" spirit:version="2.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="ahblite_rtl" spirit:version="2.0"/> + <spirit:master> + <spirit:addressSpaceRef spirit:addressSpaceRef="ahb"/> + </spirit:master> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HTRANS</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_htrans</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HPROT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hprot</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HSIZE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hsize</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hrdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hresp</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWRITE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hwrite</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hready</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_haddr</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HMASTLOCK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hmastlock</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HBURST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hburst</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>ahb_hwdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>ahb_hclk</spirit:name> + <spirit:displayName>hclk</spirit:displayName> + <spirit:description>rising-edge clock</spirit:description> + <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>ahb_hclk</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:description>100000000</spirit:description> + <spirit:value spirit:id="BUSIFPARAM_VALUE.AHB_HCLK.FREQ_HZ"/> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.AHB_HCLK.ASSOCIATED_BUSIF">com_rx:com_tx:stdio_rx:stdio_tx:ahb</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.AHB_HCLK.ASSOCIATED_RESET">ahb_hresetn</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.AHB_HCLK.FREQ_TOLERANCE_HZ">-1</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>ahb_hresetn</spirit:name> + <spirit:displayName>hresetn</spirit:displayName> + <spirit:description>active low reset</spirit:description> + <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>ahb_hresetn</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>POLARITY</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.AHB_HRESETN.POLARITY" spirit:choiceRef="choice_list_9d8b0d81">ACTIVE_LOW</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + </spirit:busInterfaces> + <spirit:addressSpaces> + <spirit:addressSpace> + <spirit:name>ahb</spirit:name> + <spirit:range spirit:format="bitString" spirit:resolve="user">0x100000000</spirit:range> + <spirit:width spirit:format="long" spirit:resolve="user">32</spirit:width> + <spirit:vendorExtensions> + <xilinx:addressSpaceInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="user" xilinx:id="ADDRSPACE_ENABLEMENT.ahb">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:addressSpaceInfo> + </spirit:vendorExtensions> + </spirit:addressSpace> + </spirit:addressSpaces> + <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>ADPcontrol_v1_0</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>e4d9de63</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>ADPcontrol_v1_0</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>e4d9de63</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>936ced64</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>ahb_hclk</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>ahb_hresetn</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>com_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>com_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>com_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>com_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>com_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>com_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>stdio_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>stdio_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>stdio_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>stdio_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>stdio_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>stdio_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>gpo8</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>gpi8</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>ahb_haddr</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">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>ahb_hburst</spirit:name> + <spirit:wire> + <spirit:direction>out</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>ahb_hmastlock</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>ahb_hprot</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>wire</spirit:typeName> + <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>ahb_hsize</spirit:name> + <spirit:wire> + <spirit:direction>out</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>ahb_htrans</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>ahb_hwdata</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">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>ahb_hwrite</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>ahb_hrdata</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">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>ahb_hready</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>ahb_hresp</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="string"> + <spirit:name>PROMPT_CHAR</spirit:name> + <spirit:displayName>Prompt Char</spirit:displayName> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.PROMPT_CHAR">]</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_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_verilogsynthesis_view_fileset</spirit:name> + <spirit:file> + <spirit:name>src/ADPmanager.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>src/ADPcontrol_v1_0.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>CHECKSUM_4c40ce83</spirit:userFileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_verilogbehavioralsimulation_view_fileset</spirit:name> + <spirit:file> + <spirit:name>src/ADPmanager.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>src/ADPcontrol_v1_0.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_xpgui_view_fileset</spirit:name> + <spirit:file> + <spirit:name>xgui/ADPcontrol_v1_0.tcl</spirit:name> + <spirit:fileType>tclSource</spirit:fileType> + <spirit:userFileType>CHECKSUM_936ced64</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>ADP AHB controller</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">ADPcontrol_v1_0</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PROMPT_CHAR</spirit:name> + <spirit:displayName>Prompt Char</spirit:displayName> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.PROMPT_CHAR">]</spirit:value> + </spirit:parameter> + </spirit:parameters> + <spirit:vendorExtensions> + <xilinx:coreExtensions> + <xilinx:supportedFamilies> + <xilinx:family xilinx:lifeCycle="Pre-Production">zynq</xilinx:family> + </xilinx:supportedFamilies> + <xilinx:taxonomies> + <xilinx:taxonomy>AXI_Peripheral</xilinx:taxonomy> + </xilinx:taxonomies> + <xilinx:displayName>ADPcontrol_v1.0</xilinx:displayName> + <xilinx:autoFamilySupportLevel>level_1</xilinx:autoFamilySupportLevel> + <xilinx:coreRevision>28</xilinx:coreRevision> + <xilinx:coreCreationDateTime>2023-03-17T11:11:19Z</xilinx:coreCreationDateTime> + <xilinx:tags> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1d457846_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@37c19d7d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4d9c63f5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3486ae33_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@16991627_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@21280f5b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2a6297f7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@d359ebf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@585c5d69_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@13554121_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5cc15ddd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@47f5cea9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2797f52a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2d4db012_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4d5ff66d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@160f397b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@9eedd13_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@383df36f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5b29af4a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6a844f8f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@dd3613f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@465ab221_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2c2a723e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7769a864_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2b6e7c2b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@348806c9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@543e517b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@23a5fd27_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5acc4197_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1b0672e6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1fcd885_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3b8348bf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7a2cf9c9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@266167bd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@75fc528d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@571f957b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@205b72be_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@18af816d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@76808038_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@12b6bb23_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@571354b0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@49208c72_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@96cf3b7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@160b7175_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@733792a3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6741cc7c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@21688aa5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@15d88077_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3dedcd2d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@109e8ade_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@66efa591_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@33406c6a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1295e34_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@23a10fd2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@46b3edc3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@79223f91_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@25bf4cbd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3bf95837_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2d5a6e80_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@23cef462_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7701c845_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@d900de2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1b614769_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2a1ab09c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5a71cfc7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7737ed39_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3417e460_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5dcd78cc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@87e31dd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5878b3d1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@414f7e53_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@448f5b33_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5f4942b4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@68082003_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@67b73b35_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@63825d52_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@59bce76e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@511d4c77_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1c74144d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4e4c1934_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@378bcf30_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4e795a88_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5ad7045c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6ae82c3f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4ac8e1b1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@72e7dc1b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@36456a91_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3994cf09_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6c751ad6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@44a8e456_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@58f80386_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@60462d25_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@19c41859_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3a040f48_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7d1e622a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5592457_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7aa4d1b7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5b291a28_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1cad021e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7376878e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4870a6f7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2fc3ca30_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@77cf444c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1a9a0814_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1424fd5e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3453af13_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@27e0072f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@f46a21a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@18d268d4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5c1b0b80_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2973e675_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@604ab08f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3ba14fe4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@223f211e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@15bffbbe_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@dc2fd1e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@54866dfc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@49d29cb3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6317da2d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2dea1246_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@22205824_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@71fb215a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3f69f943_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@10598249_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@69cc5be9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@30744b50_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@77c27106_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@17c7c0e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6b1dc1ba_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@13c92119_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@433c97e8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@dfaa30_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@498e3871_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@68ef63bf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@cabff58_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6329d1ac_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3d41686b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@17b94c6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@73c60546_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1efb46d6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1c3fd36_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@94a143_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@27fa8005_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@62074f67_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3c35c7f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@23404941_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1ca68904_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3bf56a5a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1af8595a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7883ae7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3a942794_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@148bd7e5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@73d73a56_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3a2205ee_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1349a24a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5d4275c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@657d1d9b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@77dc74cf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7b2335ea_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@60cfbf2f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3b5bc7f8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3952de2e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4ea52573_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@58fdb158_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6a3ec25b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@38e01d1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@41312d17_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4960f858_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4fc1a608_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@50a7b242_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3ba5a927_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4577effb_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@24950516_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3f566912_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@ce5ccb_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1868af0c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1e5676a1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@482c6c08_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@439d1ccd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4d18b880_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1cb34d37_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@35956167_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@edc52ba_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5ca21f6a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@30cea3b8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@72dd0545_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3385e4b5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1a7f120d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@64e52226_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3642d1a2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2f597e54_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@51e8ab9d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@72b9d5e6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7a4741c0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4bb7f6f8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@634fe21a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4aa4e91b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@30ad75d5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4911c113_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4080a163_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@77494d4e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1bdef9f8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4385cd7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@64412115_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6f2eee8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3c61cfc8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@21768440_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4b355e7a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@65d604b5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1d52befe_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7cf526e5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@551c331c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@646f2bcc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6d01a5a8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5d95b5ff_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@27b779c7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1434a4fe_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5e7326d8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2fd42eaf_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2a035f8e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@761ebb79_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2edf9f01_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@c5189a6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@11b06564_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@f5f8ce8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@751af23d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@57380db3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@f3d75f1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@626de2e1_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@65166b70_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1b007a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3f3b6415_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@444d9f3b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@58fe3b2b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@22c722fb_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@143ea435_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5a42ad29_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@c5b8ec0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1a4e16b4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@42ffb207_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@714e55e4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@46a7eaba_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@17b1cd6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@43ddb8ba_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@46813502_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@20ebdb6c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3b2bcf03_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@573cb596_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@67a1e45e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@e85625c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6b0d7ccd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2f5cda36_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@51ba8691_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@782de323_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@570b95ae_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5b826b52_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@37cc7d57_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1fead495_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@395f4c4c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@77419e7a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5b4eb32d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@50a26523_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2129e8aa_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4c1b9123_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2bd2e4a6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@441d0859_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7f39f4dd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@179c6e39_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1de9114f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@50d3b1e8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@129ac90_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1a081ede_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@46ad3f41_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6a67c8c3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@77c6b087_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6941d063_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@31d57680_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5ad3812d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5053bd97_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4950b18d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@71973c4b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@f73ae96_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@aa60d05_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4b98b40c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@767f6dd3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3d62773e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4932ca24_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@499b78e6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@570037c0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6c5b2a33_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@72a04750_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5c95f5d6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@13e93f4b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@26f6a801_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@69443224_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3df62b6f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@67368a6e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7cc83605_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1507eb2e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@135a41e4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@64e63246_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4f49185c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5593e965_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@225ff805_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4beed390_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@106a0c22_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@384214bd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@593ef9fb_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@37cdc023_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@13a1d788_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@524f74f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4bf9a62b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@55a122c7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7c2fdaa9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@518b1cda_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@51e91952_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1278d0d9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@33a9e1f0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5761a78_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@57c6694d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6f6e2a4c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@651527ba_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@20634131_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4a5fc5ae_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1ea744d8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@41ac8c35_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@544fed3e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@352cd72_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@25a30a08_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3a049463_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@50f12b6f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@598f48b2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6449a017_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4fc6d831_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6b83cae5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3ceb3464_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1a761ed2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@25804f95_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@47f1862a_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@551336b0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2943bdfb_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4a3f2f83_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@52f9db4e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@66396587_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4382e037_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@41949965_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1a8a1eeb_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5189684d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@76bfc522_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4c88cfbd_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2cbbaeda_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@77ee719d_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5d7b2699_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@73ba8e8b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1f047a95_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@22689605_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6b1c0e75_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3c70f3ac_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3d414ec0_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@30a4d75_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@52a783ab_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6706deea_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6124d7d8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@59e9e696_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@202e94c8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@b6ee7ad_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@11bbdbd2_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@53acccb5_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1bcb5b05_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6c1a5b1c_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4fa63c3e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@64e4590_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@43599237_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@784e427e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@251afaad_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@326b33d4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2b2571dc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2fed8cc_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@509a0566_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@193895f6_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@725ff575_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6f25ab56_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1e921ec3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@ac8c699_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@53f24856_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1724f6e4_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@610a3da7_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3b846fd8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@645d5f2e_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@14d3680_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@75fea7b9_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@49e97fec_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6cbcafe8_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@e9f64d3_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6b46d36f_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7ed1f96b_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@27f5c251_ARCHIVE_LOCATION">c:/Users/dflynn/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@472752f8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@17bc87a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@31dc304_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@352d492d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6e8cf4c8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3f9ad2c5_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@32f89c42_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3778bb78_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@510d9d71_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5634a7b8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@8cbb07a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2bd39894_ARCHIVE_LOCATION">/home/dwf1m12/soclabs/fpga/vivado/pynq/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@49f0884e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@47766a99_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@72bfa014_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6ceae5a1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@f97815f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2ab1af41_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@736d5c8f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@28ad60d2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@280a47e1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3f6f7e0d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@73674571_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2bc75aea_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4648f64d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@44e851d7_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3596d0fb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@25a1a065_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3a73112f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6ff5037d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3b679be2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@343f5854_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1f0e5159_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@672205c4_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5eaf4a2f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4294b19b_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4a77deab_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@48460505_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@186d05f2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@77227d65_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@bf3434b_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@70fe8b50_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6ea74e9c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@94baf8f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2c237466_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7477dd9e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@59c3564f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@230c6865_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@73dd3fa0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@38c0e7a6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@361aa0bf_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@693cd002_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@90cf9bd_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@56759d72_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@76489f89_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@23cddfea_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@61951253_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2ef492f8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@11384e6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@43229f8c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@560889a6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7b9e8239_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@77274317_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7fede95d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7adf648c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6f2d3a75_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6b8943f6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@46de7d7d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1064cd98_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@55fee084_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4f4a40b1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@246290e0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4c03aa24_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6a5175be_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@243298c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4d32cec8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@26e6b9dc_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@71f2c9c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@766d3322_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@53d9d8f3_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1bc31527_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@a7d1a87_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@554e8355_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@f387ef1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2d26d3c1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4a493133_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2ed57f64_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@33917459_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@256b8cbb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@ef978f7_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@854b85c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@15a5cb4c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5e7bf60a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@75ba979_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2550dd2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5bb22db_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6a777a31_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@13fd8c0e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5ab5d13a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@a6d43c7_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2de47456_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1fd6a6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@41e4b0cb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@70b02a59_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@366f8d4f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@76029335_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@70b9dabf_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@49a7f7e5_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5d4805a4_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@11351177_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5bfb7bd1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@18e46c62_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2cc869b1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@33f4180_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3afeb273_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@9c5e63_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4a35a7c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@cd72db6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@28cdf041_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@eb4cd13_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5f536198_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@59f8726d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3a228f4c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ADPcontrol_1.0</xilinx:tag> + </xilinx:tags> + </xilinx:coreExtensions> + <xilinx:packagingInfo> + <xilinx:xilinxVersion>2021.1</xilinx:xilinxVersion> + <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="cf8749a1"/> + <xilinx:checksum xilinx:scope="addressSpaces" xilinx:value="2ed9224a"/> + <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="6203a1ee"/> + <xilinx:checksum xilinx:scope="ports" xilinx:value="2212c402"/> + <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="cd165264"/> + <xilinx:checksum xilinx:scope="parameters" xilinx:value="35656c35"/> + <xilinx:targetDRCs> + <xilinx:targetDRC xilinx:tool="ipi"> + <xilinx:targetDRCOption xilinx:name="ignore_freq_hz" xilinx:value="true"/> + </xilinx:targetDRC> + </xilinx:targetDRCs> + </xilinx:packagingInfo> + </spirit:vendorExtensions> +</spirit:component> diff --git a/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0.v b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0.v new file mode 100755 index 0000000000000000000000000000000000000000..7b8967c18e34a77bb98084ede844e99853f3e47c --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0.v @@ -0,0 +1,103 @@ +//----------------------------------------------------------------------------- +// top-level soclabs ASCII Debug Protocol controller +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright © 2021-2, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + + + module ADPcontrol_v1_0 # + ( + // Users to add parameters here + parameter PROMPT_CHAR = "]" + + // User parameters ends + // Do not modify the parameters beyond this line + + ) + ( + // Users to add ports here + + // User ports ends + // Do not modify the ports beyond this line + + // Ports of Axi Slave Bus Interface com_rx + input wire ahb_hclk, + input wire ahb_hresetn, + + output wire com_rx_tready, + input wire [7 : 0] com_rx_tdata, + input wire com_rx_tvalid, + + // Ports of Axi Master Bus Interface com_tx + output wire com_tx_tvalid, + output wire [7 : 0] com_tx_tdata, + input wire com_tx_tready, + + // Ports of Axi Slave Bus Interface stdio_rx + output wire stdio_rx_tready, + input wire [7 : 0] stdio_rx_tdata, + input wire stdio_rx_tvalid, + + // Ports of Axi Master Bus Interface stdio_tx + output wire stdio_tx_tvalid, + output wire [7 : 0] stdio_tx_tdata, + input wire stdio_tx_tready, + + output wire [7 : 0] gpo8, + input wire [7 : 0] gpi8, + + output wire [31:0] ahb_haddr , + output wire [ 2:0] ahb_hburst , + output wire ahb_hmastlock, + output wire [ 3:0] ahb_hprot , + output wire [ 2:0] ahb_hsize , + output wire [ 1:0] ahb_htrans , + output wire [31:0] ahb_hwdata , + output wire ahb_hwrite , + input wire [31:0] ahb_hrdata , + input wire ahb_hready , + input wire ahb_hresp + ); + + // Add user logic here + +ADPmanager + #(.PROMPT_CHAR (PROMPT_CHAR)) + ADPmanager( + .HCLK (ahb_hclk ), + .HRESETn (ahb_hresetn ), + .HADDR32_o (ahb_haddr ), + .HBURST3_o (ahb_hburst ), + .HMASTLOCK_o (ahb_hmastlock ), + .HPROT4_o (ahb_hprot ), + .HSIZE3_o (ahb_hsize ), + .HTRANS2_o (ahb_htrans ), + .HWDATA32_o (ahb_hwdata ), + .HWRITE_o (ahb_hwrite ), + .HRDATA32_i (ahb_hrdata ), + .HREADY_i (ahb_hready ), + .HRESP_i (ahb_hresp ), + .GPO8_o (gpo8 ), + .GPI8_i (gpi8 ), + .COMRX_TREADY_o(com_rx_tready), + .COMRX_TDATA_i(com_rx_tdata), + .COMRX_TVALID_i(com_rx_tvalid), + .STDRX_TREADY_o(stdio_rx_tready), + .STDRX_TDATA_i(stdio_rx_tdata), + .STDRX_TVALID_i(stdio_rx_tvalid), + .COMTX_TVALID_o(com_tx_tvalid), + .COMTX_TDATA_o(com_tx_tdata), + .COMTX_TREADY_i(com_tx_tready), + .STDTX_TVALID_o(stdio_tx_tvalid), + .STDTX_TDATA_o(stdio_tx_tdata), + .STDTX_TREADY_i(stdio_tx_tready) + + ); + + +endmodule diff --git a/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_com_rx.v b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_com_rx.v new file mode 100755 index 0000000000000000000000000000000000000000..0e980d36757f551bd13414b0bf8f135a4e6bcafc --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_com_rx.v @@ -0,0 +1,167 @@ + +`timescale 1 ns / 1 ps + + module ADPcontrol_v1_0_com_rx # + ( + // 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/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_com_tx.v b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_com_tx.v new file mode 100755 index 0000000000000000000000000000000000000000..ba5f03594fc0075bdc58c0535948374580237a28 --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_com_tx.v @@ -0,0 +1,228 @@ + +`timescale 1 ns / 1 ps + + module ADPcontrol_v1_0_com_tx # + ( + // 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/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_stdio_rx.v b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_stdio_rx.v new file mode 100755 index 0000000000000000000000000000000000000000..30f30e3895ada561f258535ea88f9b012142f738 --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_stdio_rx.v @@ -0,0 +1,167 @@ + +`timescale 1 ns / 1 ps + + module ADPcontrol_v1_0_stdio_rx # + ( + // 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/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_stdio_tx.v b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_stdio_tx.v new file mode 100755 index 0000000000000000000000000000000000000000..8f4af08975c515e65431d6d12dfe5484ac0cac69 --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/hdl/ADPcontrol_v1_0_stdio_tx.v @@ -0,0 +1,228 @@ + +`timescale 1 ns / 1 ps + + module ADPcontrol_v1_0_stdio_tx # + ( + // 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/socket/vivado_lib/ADPcontrol_1.0/soclabs.org_user_ADPcontrol_1.0.zip b/socket/vivado_lib/ADPcontrol_1.0/soclabs.org_user_ADPcontrol_1.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..3abb2fcb7d874d62c253813441c291e06284c7ab Binary files /dev/null and b/socket/vivado_lib/ADPcontrol_1.0/soclabs.org_user_ADPcontrol_1.0.zip differ diff --git a/socket/vivado_lib/ADPcontrol_1.0/src/ADPcontrol_v1_0.v b/socket/vivado_lib/ADPcontrol_1.0/src/ADPcontrol_v1_0.v new file mode 100755 index 0000000000000000000000000000000000000000..07c4c8aeabd268a31f2de71e26a8d0f0c2038df9 --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/src/ADPcontrol_v1_0.v @@ -0,0 +1,102 @@ +//----------------------------------------------------------------------------- +// top-level soclabs ASCII Debug Protocol controller +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright � 2021-2, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + + module ADPcontrol_v1_0 # + ( + // Users to add parameters here + parameter PROMPT_CHAR = "]" + + // User parameters ends + // Do not modify the parameters beyond this line + + ) + ( + // Users to add ports here + + // User ports ends + // Do not modify the ports beyond this line + + // Ports of Axi Slave Bus Interface com_rx + input wire ahb_hclk, + input wire ahb_hresetn, + + output wire com_rx_tready, + input wire [7 : 0] com_rx_tdata, + input wire com_rx_tvalid, + + // Ports of Axi Master Bus Interface com_tx + output wire com_tx_tvalid, + output wire [7 : 0] com_tx_tdata, + input wire com_tx_tready, + + // Ports of Axi Slave Bus Interface stdio_rx + output wire stdio_rx_tready, + input wire [7 : 0] stdio_rx_tdata, + input wire stdio_rx_tvalid, + + // Ports of Axi Master Bus Interface stdio_tx + output wire stdio_tx_tvalid, + output wire [7 : 0] stdio_tx_tdata, + input wire stdio_tx_tready, + + output wire [7 : 0] gpo8, + input wire [7 : 0] gpi8, + + output wire [31:0] ahb_haddr , + output wire [ 2:0] ahb_hburst , + output wire ahb_hmastlock, + output wire [ 3:0] ahb_hprot , + output wire [ 2:0] ahb_hsize , + output wire [ 1:0] ahb_htrans , + output wire [31:0] ahb_hwdata , + output wire ahb_hwrite , + input wire [31:0] ahb_hrdata , + input wire ahb_hready , + input wire ahb_hresp + ); + + // Add user logic here + +ADPmanager + #(.PROMPT_CHAR (PROMPT_CHAR)) + ADPmanager( + .HCLK (ahb_hclk ), + .HRESETn (ahb_hresetn ), + .HADDR32_o (ahb_haddr ), + .HBURST3_o (ahb_hburst ), + .HMASTLOCK_o (ahb_hmastlock ), + .HPROT4_o (ahb_hprot ), + .HSIZE3_o (ahb_hsize ), + .HTRANS2_o (ahb_htrans ), + .HWDATA32_o (ahb_hwdata ), + .HWRITE_o (ahb_hwrite ), + .HRDATA32_i (ahb_hrdata ), + .HREADY_i (ahb_hready ), + .HRESP_i (ahb_hresp ), + .GPO8_o (gpo8 ), + .GPI8_i (gpi8 ), + .COMRX_TREADY_o(com_rx_tready), + .COMRX_TDATA_i(com_rx_tdata), + .COMRX_TVALID_i(com_rx_tvalid), + .STDRX_TREADY_o(stdio_rx_tready), + .STDRX_TDATA_i(stdio_rx_tdata), + .STDRX_TVALID_i(stdio_rx_tvalid), + .COMTX_TVALID_o(com_tx_tvalid), + .COMTX_TDATA_o(com_tx_tdata), + .COMTX_TREADY_i(com_tx_tready), + .STDTX_TVALID_o(stdio_tx_tvalid), + .STDTX_TDATA_o(stdio_tx_tdata), + .STDTX_TREADY_i(stdio_tx_tready) + + ); + + +endmodule diff --git a/socket/vivado_lib/ADPcontrol_1.0/src/ADPmanager.v b/socket/vivado_lib/ADPcontrol_1.0/src/ADPmanager.v new file mode 100755 index 0000000000000000000000000000000000000000..5c6ec0be32e8ca76a5537aa727ae65a67208560c --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/src/ADPmanager.v @@ -0,0 +1,800 @@ +//----------------------------------------------------------------------------- +// soclabs ASCII Debug Protocol controller +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright © 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +//`define ADPBASIC 1 + +module ADPmanager // AHB initiator interface + #(parameter PROMPT_CHAR = "]" + ) + ( input wire HCLK, + input wire HRESETn, + output wire [31:0] HADDR32_o, + output wire [ 2:0] HBURST3_o, + output wire HMASTLOCK_o, + output wire [ 3:0] HPROT4_o, + output wire [ 2:0] HSIZE3_o, + output wire [ 1:0] HTRANS2_o, + output wire [31:0] HWDATA32_o, + output wire HWRITE_o, + input wire [31:0] HRDATA32_i, + input wire HREADY_i, + input wire HRESP_i, +// COMIO interface + output wire [ 7:0] GPO8_o, + input wire [ 7:0] GPI8_i, +// input wire COM_RXE_i, + input wire [ 7:0] COMRX_TDATA_i, + input wire COMRX_TVALID_i, + output wire COMRX_TREADY_o, +// input wire COM_TXF_i, + output wire [ 7:0] COMTX_TDATA_o, + output wire COMTX_TVALID_o, + input wire COMTX_TREADY_i, +// STDIO interface +// input wire STDOUT_RXE_i, + input wire [ 7:0] STDRX_TDATA_i, + input wire STDRX_TVALID_i, + output wire STDRX_TREADY_o, +// input wire STDIN_TXF_i + output wire [ 7:0] STDTX_TDATA_o, + output wire STDTX_TVALID_o, + input wire STDTX_TREADY_i +); + +wire COM_RXE_i = !COMRX_TVALID_i; +wire COM_TXF_i = !COMTX_TREADY_i; + +//wire adp_rx_req = COMRX_TVALID_i & COMRX_TREADY_o; +//wire std_rx_req = STDRX_TVALID_i & STDRX_TREADY_o; + + +wire STD_TXF_i = !STDTX_TREADY_i; +wire STD_RXE_i = !STDRX_TVALID_i; + +`ifdef ADPBASIC + localparam BANNERHEX = 32'h50c1ab01; +`else + localparam BANNERHEX = 32'h50c1ab03; +`endif + +localparam CMD_bad = 4'b0000; +localparam CMD_A = 4'b0001; // set Address +localparam CMD_C = 4'b0010; // Control +localparam CMD_R = 4'b0011; // Read word, addr++ +localparam CMD_S = 4'b0100; // Status/STDIN +localparam CMD_W = 4'b0100; // Write word, addr++ +localparam CMD_X = 4'b0101; // eXit +`ifndef ADPBASIC +localparam CMD_F = 4'b1000; // Fill (wordocunt) from addr++ +localparam CMD_M = 4'b1001; // set read Mask +localparam CMD_P = 4'b1010; // Poll hardware (count) +localparam CMD_U = 4'b1011; // (Binary) Upload (wordocunt) from addr++ +localparam CMD_V = 4'b1100; // match Value +`endif + + +function FNvalid_adp_entry; // Escape char +input [7:0] char8; + FNvalid_adp_entry = (char8[7:0] == 8'h1b); +endfunction + +function [3:0] FNvalid_cmd; +input [7:0] char8; +case (char8[7:0]) +"A": FNvalid_cmd = CMD_A; +"a": FNvalid_cmd = CMD_A; +"C": FNvalid_cmd = CMD_C; +"c": FNvalid_cmd = CMD_C; +"R": FNvalid_cmd = CMD_R; +"r": FNvalid_cmd = CMD_R; +"S": FNvalid_cmd = CMD_S; +"s": FNvalid_cmd = CMD_S; +"W": FNvalid_cmd = CMD_W; +"w": FNvalid_cmd = CMD_W; +"X": FNvalid_cmd = CMD_X; +"x": FNvalid_cmd = CMD_X; +`ifndef ADPBASIC +"F": FNvalid_cmd = CMD_F; +"f": FNvalid_cmd = CMD_F; +"M": FNvalid_cmd = CMD_M; +"m": FNvalid_cmd = CMD_M; +"P": FNvalid_cmd = CMD_P; +"p": FNvalid_cmd = CMD_P; +"U": FNvalid_cmd = CMD_U; +"u": FNvalid_cmd = CMD_U; +"V": FNvalid_cmd = CMD_V; +"v": FNvalid_cmd = CMD_V; +`endif +default: + FNvalid_cmd = 0; +endcase +endfunction + +function FNvalid_space; // space or tab char +input [7:0] char8; + FNvalid_space = ((char8[7:0] == 8'h20) || (char8[7:0] == 8'h09)); +endfunction + +function FNnull; // space or tab char +input [7:0] char8; + FNnull = (char8[7:0] == 8'h00); +endfunction + +function FNexit; // EOF +input [7:0] char8; + FNexit = ((char8[7:0] == 8'h04) || (char8[7:0] == 8'h00)); +endfunction + +function FNvalid_EOL; // CR or LF +input [7:0] char8; + FNvalid_EOL = ((char8[7:0] == 8'h0a) || (char8[7:0] == 8'h0d)); +endfunction + +function FNuppercase; +input [7:0] char8; + FNuppercase = (char8[6]) ? (char8 & 8'h5f) : (char8); +endfunction + +function [63:0] FNBuild_param64_hexdigit; +input [63:0] param64; +input [7:0] char8; +case (char8[7:0]) +"\t":FNBuild_param64_hexdigit = 64'b0; // tab starts new (zeroed) param64 +" ": FNBuild_param64_hexdigit = 64'b0; // space starts new (zeroed) param64 +"x": FNBuild_param64_hexdigit = 64'b0; // hex prefix starts new (zeroed) param64 +"X": FNBuild_param64_hexdigit = 64'b0; // hex prefix starts new (zeroed) param64 +"0": FNBuild_param64_hexdigit = {param64[59:0],4'b0000}; +"1": FNBuild_param64_hexdigit = {param64[59:0],4'b0001}; +"2": FNBuild_param64_hexdigit = {param64[59:0],4'b0010}; +"3": FNBuild_param64_hexdigit = {param64[59:0],4'b0011}; +"4": FNBuild_param64_hexdigit = {param64[59:0],4'b0100}; +"5": FNBuild_param64_hexdigit = {param64[59:0],4'b0101}; +"6": FNBuild_param64_hexdigit = {param64[59:0],4'b0110}; +"7": FNBuild_param64_hexdigit = {param64[59:0],4'b0111}; +"8": FNBuild_param64_hexdigit = {param64[59:0],4'b1000}; +"9": FNBuild_param64_hexdigit = {param64[59:0],4'b1001}; +"A": FNBuild_param64_hexdigit = {param64[59:0],4'b1010}; +"B": FNBuild_param64_hexdigit = {param64[59:0],4'b1011}; +"C": FNBuild_param64_hexdigit = {param64[59:0],4'b1100}; +"D": FNBuild_param64_hexdigit = {param64[59:0],4'b1101}; +"E": FNBuild_param64_hexdigit = {param64[59:0],4'b1110}; +"F": FNBuild_param64_hexdigit = {param64[59:0],4'b1111}; +"a": FNBuild_param64_hexdigit = {param64[59:0],4'b1010}; +"b": FNBuild_param64_hexdigit = {param64[59:0],4'b1011}; +"c": FNBuild_param64_hexdigit = {param64[59:0],4'b1100}; +"d": FNBuild_param64_hexdigit = {param64[59:0],4'b1101}; +"e": FNBuild_param64_hexdigit = {param64[59:0],4'b1110}; +"f": FNBuild_param64_hexdigit = {param64[59:0],4'b1111}; +default: FNBuild_param64_hexdigit = param64; // EOL etc returns param64 unchanged +endcase +endfunction + +function [63:0] FNBuild_param64_byte; +input [63:0] param64; +input [7:0] byte; + FNBuild_param64_byte = {byte[7:0], param64[63:08]}; +endfunction + +function [31:0] FNBuild_param32_hexdigit; +input [31:0] param32; +input [7:0] char8; +case (char8[7:0]) +"\t":FNBuild_param32_hexdigit = 32'b0; // tab starts new (zeroed) param32 +" ": FNBuild_param32_hexdigit = 32'b0; // space starts new (zeroed) param32 +"x": FNBuild_param32_hexdigit = 32'b0; // hex prefix starts new (zeroed) param32 +"X": FNBuild_param32_hexdigit = 32'b0; // hex prefix starts new (zeroed) param32 +"0": FNBuild_param32_hexdigit = {param32[27:0],4'b0000}; +"1": FNBuild_param32_hexdigit = {param32[27:0],4'b0001}; +"2": FNBuild_param32_hexdigit = {param32[27:0],4'b0010}; +"3": FNBuild_param32_hexdigit = {param32[27:0],4'b0011}; +"4": FNBuild_param32_hexdigit = {param32[27:0],4'b0100}; +"5": FNBuild_param32_hexdigit = {param32[27:0],4'b0101}; +"6": FNBuild_param32_hexdigit = {param32[27:0],4'b0110}; +"7": FNBuild_param32_hexdigit = {param32[27:0],4'b0111}; +"8": FNBuild_param32_hexdigit = {param32[27:0],4'b1000}; +"9": FNBuild_param32_hexdigit = {param32[27:0],4'b1001}; +"A": FNBuild_param32_hexdigit = {param32[27:0],4'b1010}; +"B": FNBuild_param32_hexdigit = {param32[27:0],4'b1011}; +"C": FNBuild_param32_hexdigit = {param32[27:0],4'b1100}; +"D": FNBuild_param32_hexdigit = {param32[27:0],4'b1101}; +"E": FNBuild_param32_hexdigit = {param32[27:0],4'b1110}; +"F": FNBuild_param32_hexdigit = {param32[27:0],4'b1111}; +"a": FNBuild_param32_hexdigit = {param32[27:0],4'b1010}; +"b": FNBuild_param32_hexdigit = {param32[27:0],4'b1011}; +"c": FNBuild_param32_hexdigit = {param32[27:0],4'b1100}; +"d": FNBuild_param32_hexdigit = {param32[27:0],4'b1101}; +"e": FNBuild_param32_hexdigit = {param32[27:0],4'b1110}; +"f": FNBuild_param32_hexdigit = {param32[27:0],4'b1111}; +default: FNBuild_param32_hexdigit = param32; // EOL etc returns param32 unchanged +endcase +endfunction + +function [31:0] FNBuild_param32_byte; +input [31:0] param32; +input [7:0] byte; + FNBuild_param32_byte = {byte[7:0], param32[31:08]}; +endfunction + + + +function [7:0] FNmap_hex_digit; +input [3:0] nibble; +case (nibble[3:0]) +4'b0000: FNmap_hex_digit = "0"; +4'b0001: FNmap_hex_digit = "1"; +4'b0010: FNmap_hex_digit = "2"; +4'b0011: FNmap_hex_digit = "3"; +4'b0100: FNmap_hex_digit = "4"; +4'b0101: FNmap_hex_digit = "5"; +4'b0110: FNmap_hex_digit = "6"; +4'b0111: FNmap_hex_digit = "7"; +4'b1000: FNmap_hex_digit = "8"; +4'b1001: FNmap_hex_digit = "9"; +4'b1010: FNmap_hex_digit = "a"; +4'b1011: FNmap_hex_digit = "b"; +4'b1100: FNmap_hex_digit = "c"; +4'b1101: FNmap_hex_digit = "d"; +4'b1110: FNmap_hex_digit = "e"; +4'b1111: FNmap_hex_digit = "f"; +default: FNmap_hex_digit = "0"; +endcase +endfunction + + +// as per Vivado synthesis mapping +`ifdef ADPFSMDESIGN +localparam ADP_WRITEHEX = 6'b000000 ; +localparam ADP_WRITEHEXS = 6'b000001 ; +localparam ADP_WRITEHEX9 = 6'b000010 ; +localparam ADP_WRITEHEX8 = 6'b000011 ; +localparam ADP_WRITEHEX7 = 6'b000100 ; +localparam ADP_WRITEHEX6 = 6'b000101 ; +localparam ADP_WRITEHEX5 = 6'b000110 ; +localparam ADP_WRITEHEX4 = 6'b000111 ; +localparam ADP_WRITEHEX3 = 6'b001000 ; +localparam ADP_WRITEHEX2 = 6'b001001 ; +localparam ADP_WRITEHEX1 = 6'b001010 ; +localparam ADP_WRITEHEX0 = 6'b001011 ; +localparam ADP_LINEACK = 6'b001100 ; +localparam ADP_LINEACK2 = 6'b001101 ; +localparam ADP_PROMPT = 6'b001110 ; +localparam ADP_IOCHK = 6'b001111 ; +localparam ADP_STDOUT = 6'b010000 ; +localparam ADP_STDOUT1 = 6'b010001 ; +localparam ADP_STDOUT2 = 6'b010010 ; +localparam ADP_STDOUT3 = 6'b010011 ; +localparam ADP_RXCMD = 6'b010100 ; +localparam ADP_RXPARAM = 6'b010101 ; +localparam ADP_ACTION = 6'b010110 ; +localparam ADP_SYSCTL = 6'b010111 ; +localparam ADP_READ = 6'b011000 ; +localparam ADP_SYSCHK = 6'b011001 ; +localparam ADP_STDIN = 6'b011010 ; +localparam ADP_WRITE = 6'b011011 ; +localparam ADP_EXIT = 6'b011100 ; +localparam STD_IOCHK = 6'b011101 ; +localparam STD_RXD1 = 6'b011110 ; +localparam STD_RXD2 = 6'b011111 ; +localparam STD_TXD1 = 6'b100000 ; +localparam STD_TXD2 = 6'b100001 ; +localparam ADP_UCTRL = 6'b100010 ; +localparam ADP_UREADB0 = 6'b100011 ; +localparam ADP_UREADB1 = 6'b100100 ; +localparam ADP_UREADB2 = 6'b100101 ; +localparam ADP_UREADB3 = 6'b100110 ; +localparam ADP_UWRITE = 6'b100111 ; +localparam ADP_POLL = 6'b101000 ; +localparam ADP_POLL1 = 6'b101001 ; +localparam ADP_POLL2 = 6'b101010 ; +localparam ADP_FCTRL = 6'b101011 ; +localparam ADP_FWRITE = 6'b101100 ; +localparam ADP_ECHOCMD = 6'b101101 ; +localparam ADP_ECHOBUS = 6'b101110 ; +localparam ADP_UNKNOWN = 6'b101111 ; +reg [5:0] adp_state ; +`else +// one-hot encoded explicitly +localparam ADP_WRITEHEX = 48'b000000000000000000000000000000000000000000000001 ; // = 6'b000000 +localparam ADP_WRITEHEXS = 48'b000000000000000000000000000000000000000000000010 ; // = 6'b000001 +localparam ADP_WRITEHEX9 = 48'b000000000000000000000000000000000000000000000100 ; // = 6'b000010 +localparam ADP_WRITEHEX8 = 48'b000000000000000000000000000000000000000000001000 ; // = 6'b000011 +localparam ADP_WRITEHEX7 = 48'b000000000000000000000000000000000000000000010000 ; // = 6'b000100 +localparam ADP_WRITEHEX6 = 48'b000000000000000000000000000000000000000000100000 ; // = 6'b000101 +localparam ADP_WRITEHEX5 = 48'b000000000000000000000000000000000000000001000000 ; // = 6'b000110 +localparam ADP_WRITEHEX4 = 48'b000000000000000000000000000000000000000010000000 ; // = 6'b000111 +localparam ADP_WRITEHEX3 = 48'b000000000000000000000000000000000000000100000000 ; // = 6'b001000 +localparam ADP_WRITEHEX2 = 48'b000000000000000000000000000000000000001000000000 ; // = 6'b001001 +localparam ADP_WRITEHEX1 = 48'b000000000000000000000000000000000000010000000000 ; // = 6'b001010 +localparam ADP_WRITEHEX0 = 48'b000000000000000000000000000000000000100000000000 ; // = 6'b001011 +localparam ADP_LINEACK = 48'b000000000000000000000000000000000001000000000000 ; // = 6'b001100 +localparam ADP_LINEACK2 = 48'b000000000000000000000000000000000010000000000000 ; // = 6'b001101 +localparam ADP_PROMPT = 48'b000000000000000000000000000000000100000000000000 ; // = 6'b001110 +localparam ADP_IOCHK = 48'b000000000000000000000000000000001000000000000000 ; // = 6'b001111 +localparam ADP_STDOUT = 48'b000000000000000000000000000000010000000000000000 ; // = 6'b010000 +localparam ADP_STDOUT1 = 48'b000000000000000000000000000000100000000000000000 ; // = 6'b010001 +localparam ADP_STDOUT2 = 48'b000000000000000000000000000001000000000000000000 ; // = 6'b010010 +localparam ADP_STDOUT3 = 48'b000000000000000000000000000010000000000000000000 ; // = 6'b010011 +localparam ADP_RXCMD = 48'b000000000000000000000000000100000000000000000000 ; // = 6'b010100 +localparam ADP_RXPARAM = 48'b000000000000000000000000001000000000000000000000 ; // = 6'b010101 +localparam ADP_ACTION = 48'b000000000000000000000000010000000000000000000000 ; // = 6'b010110 +localparam ADP_SYSCTL = 48'b000000000000000000000000100000000000000000000000 ; // = 6'b010111 +localparam ADP_READ = 48'b000000000000000000000001000000000000000000000000 ; // = 6'b011000 +localparam ADP_SYSCHK = 48'b000000000000000000000010000000000000000000000000 ; // = 6'b011001 +localparam ADP_STDIN = 48'b000000000000000000000100000000000000000000000000 ; // = 6'b011010 +localparam ADP_WRITE = 48'b000000000000000000001000000000000000000000000000 ; // = 6'b011011 +localparam ADP_EXIT = 48'b000000000000000000010000000000000000000000000000 ; // = 6'b011100 +localparam STD_IOCHK = 48'b000000000000000000100000000000000000000000000000 ; // = 6'b011101 +localparam STD_RXD1 = 48'b000000000000000001000000000000000000000000000000 ; // = 6'b011110 +localparam STD_RXD2 = 48'b000000000000000010000000000000000000000000000000 ; // = 6'b011111 +localparam STD_TXD1 = 48'b000000000000000100000000000000000000000000000000 ; // = 6'b100000 +localparam STD_TXD2 = 48'b000000000000001000000000000000000000000000000000 ; // = 6'b100001 +localparam ADP_UCTRL = 48'b000000000000010000000000000000000000000000000000 ; // = 6'b100010 +localparam ADP_UREADB0 = 48'b000000000000100000000000000000000000000000000000 ; // = 6'b100011 +localparam ADP_UREADB1 = 48'b000000000001000000000000000000000000000000000000 ; // = 6'b100100 +localparam ADP_UREADB2 = 48'b000000000010000000000000000000000000000000000000 ; // = 6'b100101 +localparam ADP_UREADB3 = 48'b000000000100000000000000000000000000000000000000 ; // = 6'b100110 +localparam ADP_UWRITE = 48'b000000001000000000000000000000000000000000000000 ; // = 6'b100111 +localparam ADP_POLL = 48'b000000010000000000000000000000000000000000000000 ; // = 6'b101000 +localparam ADP_POLL1 = 48'b000000100000000000000000000000000000000000000000 ; // = 6'b101001 +localparam ADP_POLL2 = 48'b000001000000000000000000000000000000000000000000 ; // = 6'b101010 +localparam ADP_FCTRL = 48'b000010000000000000000000000000000000000000000000 ; // = 6'b101011 +localparam ADP_FWRITE = 48'b000100000000000000000000000000000000000000000000 ; // = 6'b101100 +localparam ADP_ECHOCMD = 48'b001000000000000000000000000000000000000000000000 ; // = 6'b101101 +localparam ADP_ECHOBUS = 48'b010000000000000000000000000000000000000000000000 ; // = 6'b101110 +localparam ADP_UNKNOWN = 48'b100000000000000000000000000000000000000000000000 ; // = 6'b101111 +reg [47:0] adp_state ; +`endif + +reg [31:0] adp_bus_data; +reg banner ; +reg com_tx_req ; +reg [7:0] com_tx_byte ; +reg com_rx_ack ; +reg std_tx_req ; +reg [ 7:0] std_tx_byte; +reg std_rx_ack ; +reg adp_bus_req ; +reg adp_bus_write ; +reg adp_bus_err ; +reg [7:0] adp_cmd ; +reg [32:0] adp_param ; +reg [31:0] adp_addr ; +reg adp_addr_inc; +reg [31:0] adp_sys ; + +assign GPO8_o = adp_sys[7:0]; + +// ADP RX stream +wire com_rx_req = COMRX_TVALID_i; +wire [ 7:0] com_rx_byte = COMRX_TDATA_i; +assign COMRX_TREADY_o = com_rx_ack; +// ADP TX stream +wire com_tx_ack = COMTX_TREADY_i; +assign COMTX_TDATA_o = com_tx_byte; +assign COMTX_TVALID_o = com_tx_req; +// STD RX stream (from STDOUT) +wire std_rx_req = STDRX_TVALID_i; +wire [ 7:0] std_rx_byte = STDRX_TDATA_i; +assign STDRX_TREADY_o = std_rx_ack; +// STD TX stream (to STDIN) +wire std_tx_ack = STDTX_TREADY_i; +assign STDTX_TDATA_o = std_tx_byte; +assign STDTX_TVALID_o = std_tx_req; + +//AMBA AHB master as "stream" interface +reg ahb_dphase; +wire ahb_aphase = adp_bus_req & !ahb_dphase; +wire adp_bus_ack = ahb_dphase & HREADY_i; +// control pipe +always @(posedge HCLK or negedge HRESETn) + if(!HRESETn) + ahb_dphase <= 0; + else if (HREADY_i) + ahb_dphase <= (ahb_aphase); + +assign HADDR32_o = adp_addr; +assign HBURST3_o = 3'b001; // "INCR" burst signalled whenever transfer; +assign HMASTLOCK_o = 1'b0; +assign HPROT4_o[3:0] = {1'b0, 1'b0, 1'b1, 1'b1}; +assign HSIZE3_o[2:0] = {1'b0, 2'b10}; +assign HTRANS2_o = {ahb_aphase,1'b0}; // non-seq +assign HWDATA32_o = adp_bus_data; +assign HWRITE_o = adp_bus_write; + + +`ifndef ADPBASIC +reg [31:0] adp_val; +reg [31:0] adp_mask; +reg [31:0] adp_poll; +reg [31:0] adp_count; +reg adp_count_dec ; +wire adp_delay_done; +wire poll2_loop_next; +`endif + +// ADP_control flags in the 'C' control field +wire adp_disable; +wire adp_stdin_wait; + +// commnon interface handshake terms +wire com_rx_done = COMRX_TVALID_i & COMRX_TREADY_o; +wire com_tx_done = COMTX_TVALID_o & COMTX_TREADY_i; +wire std_rx_done = STDRX_TVALID_i & STDRX_TREADY_o; +wire std_tx_done = STDTX_TVALID_o & STDTX_TREADY_i; +wire adp_bus_done = (adp_bus_req & adp_bus_ack); + +// common task to set up for next state +task ADP_LINEACK_next; // prepare newline TX (and cancel any startup banner) +// begin com_tx_req <= 1; com_tx_byte <= 8'h0A; banner <= 0; adp_state <= ADP_LINEACK; end + begin com_tx_req <= 1; com_tx_byte <= 8'h0A; adp_state <= ADP_LINEACK; end +endtask +task ADP_PROMPT_next; // prepare prompt TX + begin com_tx_req <= 1; com_tx_byte <= PROMPT_CHAR; adp_state <= ADP_PROMPT; end +endtask +task ADP_BUSWRITEINC_next; // prepare bus write and addr++ on completion + begin adp_bus_req <=1; adp_bus_write <=1; adp_addr_inc <=1; end +endtask +task ADP_BUSREADINC_next; // prepare bus read and addr++ on completion + begin adp_bus_req <=1; adp_bus_write <=0; adp_addr_inc <=1; end +endtask + +task ADP_hexdigit_next; // output nibble +input [3:0] nibble; + begin com_tx_req <= 1; com_tx_byte <= FNmap_hex_digit(nibble[3:0]); end +endtask +task ADP_txchar_next; // output char +input [7:0] byte; + begin com_tx_req<= 1; com_tx_byte <= byte; end +endtask + +task com_rx_nxt; com_rx_ack <=1; endtask + +function FNcount_down_zero_next; // param about to be zero +input [31:0] counter; + FNcount_down_zero_next = !(|counter[31:1]); +endfunction + +always @(posedge HCLK or negedge HRESETn) + if(!HRESETn) begin + adp_state <= ADP_WRITEHEX ; + adp_bus_data <= BANNERHEX; + banner <= 1; // start-up HEX message + com_tx_req <= 0; // default no TX req + com_rx_ack <= 0; // default no RX ack + std_tx_req <= 0; // default no TX req + std_rx_ack <= 0; // default no RX ack + adp_bus_req <= 0; // default no bus transaction + adp_bus_err <= 0; // default no bus error + adp_cmd <= 0; + adp_param <= 0; + adp_addr <= 0; + adp_addr_inc <= 0; + adp_bus_write<= 0; +`ifndef ADPBASIC + adp_count <= 0; + adp_count_dec<= 0; + adp_val <= 0; + adp_mask <= 0; + adp_sys <= 0; +`endif + end else begin // default states + adp_state <= adp_state; // default to hold current state + com_tx_req <= 0; // default no TX req + com_rx_ack <= 0; // default no RX ack + std_tx_req <= 0; // default no TX req + std_rx_ack <= 0; // default no RX ack + adp_bus_req <= 0; // default no bus transaction + adp_addr <= (adp_addr_inc & adp_bus_done) ? adp_addr + 4 : adp_addr; // address++ + adp_addr_inc <= 0; +`ifndef ADPBASIC + adp_count <= (adp_count_dec & adp_bus_done & |adp_count) ? adp_count - 1 : adp_count; // param-- + adp_count_dec<= 0; +`endif + case (adp_state) +// >>>>>>>>>>>>>>>> STDIO BYPASS >>>>>>>>>>>>>>>>>>>>>> + STD_IOCHK: // check for commsrx or STDOUT and not busy service, else loop back + if (com_rx_req) begin com_rx_ack <= 1; adp_state <= STD_RXD1; end // input char pending for STDIN +// else if (com_tx_ack & std_rx_req) begin std_rx_ack <= 1; adp_state <= STD_TXD1; end // STDOUT char pending and not busy + else if (std_rx_req) begin std_rx_ack <= 1; adp_state <= STD_TXD1; end // STDOUT char pending + STD_TXD1: // get STD out char + if (std_rx_done) + begin com_tx_byte <= std_rx_byte; com_tx_req <= 1; adp_state <= STD_TXD2; end + else std_rx_ack <= 1; // extend + STD_TXD2: // output char to ADP channel + if (com_tx_done) begin adp_state <= STD_IOCHK; end + else com_tx_req <= 1; // extend + STD_RXD1: // read rx char and check for ADP entry else STDIN ** + if (com_rx_done) begin + if (FNvalid_adp_entry(com_rx_byte)) + begin ADP_txchar_next(8'h0A); adp_state <= ADP_LINEACK; end // ADP prompt + else if (std_tx_ack) + begin std_tx_byte <= com_rx_byte; std_tx_req <= 1; adp_state <= STD_RXD2; end + else adp_state <= STD_IOCHK; // otherwise discard STDIN char and process OP data if blocked + end else com_rx_ack <= 1; // extend + STD_RXD2: // get STD in char + if (std_tx_done) begin adp_state <= STD_IOCHK; end + else std_tx_req <= 1; // extend + +// >>>>>>>>>>>>>>>> ADP Monitor >>>>>>>>>>>>>>>>>>>>>> + ADP_PROMPT: // transition after reset deassertion + if (com_tx_done) begin adp_state <= ADP_IOCHK; end + else com_tx_req <= 1; // extend + + ADP_IOCHK: // check for commsrx or STDOUT and not busy service, else loop back + if (std_rx_req) begin com_tx_byte <= "<"; com_tx_req <= 1; adp_state <= ADP_STDOUT; end + else if (com_rx_req) begin com_rx_ack <= 1; adp_state <= ADP_RXCMD; end + +// if (com_rx_req) begin com_rx_ack <= 1; adp_state <= ADP_RXCMD; end +// else if (com_tx_ack & std_rx_req) begin com_tx_byte <= "<"; com_tx_req <= 1; adp_state <= ADP_STDOUT; end +//// else if (std_rx_req) begin com_tx_byte <= "<"; com_tx_req <= 1; adp_state <= ADP_STDOUT; end + +// >>>>>>>>>>>>>>>> ADP <STDOUT> >>>>>>>>>>>>>>>>>>>>>> + ADP_STDOUT: // output "<" + if (com_tx_done) begin std_rx_ack <= 1; adp_state <= ADP_STDOUT1; end + else com_tx_req <= 1; // extend stream request if not ready + ADP_STDOUT1: // get STD out char + if (std_rx_done) begin com_tx_byte <= std_rx_byte; com_tx_req <= 1; adp_state <= ADP_STDOUT2; end + else std_rx_ack <= 1; // else extend + ADP_STDOUT2: // output char + if (com_tx_done) begin com_tx_byte <= ">"; com_tx_req <= 1; adp_state <= ADP_STDOUT3; end + else com_tx_req <= 1; // else extend + ADP_STDOUT3: // output ">" + if (com_tx_done) begin if (com_rx_req) begin com_rx_ack <= 1; adp_state <= ADP_RXCMD; end else adp_state <= ADP_IOCHK; end + else com_tx_req <= 1; // else extend + +// >>>>>>>>>>>>>>>> ADP COMMAND PARSING >>>>>>>>>>>>>>>>>>>>>> + ADP_RXCMD: // read and save ADP command + if (com_rx_done) begin + if (FNexit(com_rx_byte)) adp_state <= STD_IOCHK; // immediate exit + else if (FNvalid_space(com_rx_byte)) com_rx_ack <= 1; // retry for a command + else if (FNvalid_EOL(com_rx_byte)) begin adp_cmd <= "?"; adp_state <= ADP_ACTION; end // no command, skip param + else begin adp_cmd <= com_rx_byte; adp_param <= 33'h1_00000000; com_rx_ack <= 1; adp_state <= ADP_RXPARAM; end // get optional parameter + end + else com_rx_ack <= 1; // extend stream request if not ready + ADP_RXPARAM: // read and build hex parameter + if (com_rx_done) begin // RX byte + if (FNexit(com_rx_byte)) adp_state <= STD_IOCHK; // exit + else if (FNvalid_EOL(com_rx_byte)) +`ifndef ADPBASIC + begin adp_count <= adp_param[31:0]; adp_state <= ADP_ACTION; end // parameter complete on EOL +`else + begin adp_state <= ADP_ACTION; end // parameter complete on EOL +`endif + else + begin adp_param <= {1'b0,FNBuild_param32_hexdigit(adp_param[31:0], com_rx_byte)}; com_rx_ack <= 1; end // build parameter + end + else com_rx_ack <= 1; + + ADP_ACTION: // parse command and action with parameter + if (FNexit(com_rx_byte)) + adp_state <= STD_IOCHK; + else if (FNvalid_cmd(adp_cmd) == CMD_A) + begin if (adp_param[32] == 1'b1) adp_param <= {1'b0, adp_addr}; else adp_addr <= adp_param[31:0]; + adp_state <= ADP_ECHOCMD; end + else if (FNvalid_cmd(adp_cmd) == CMD_C) begin + if (adp_param[32]) // report GPO + begin adp_state <= ADP_SYSCTL; end + else if (adp_param[31:8] == 1) // clear selected bits in GPO + begin adp_sys[7:0] <= adp_sys[7:0] & ~adp_param[7:0]; adp_state <= ADP_SYSCTL; end + else if (adp_param[31:8] == 2) // set selected bits in GPO + begin adp_sys[7:0] <= adp_sys[7:0] | adp_param[7:0]; adp_state <= ADP_SYSCTL; end + else if (adp_param[31:8] == 3) // overwrite bits in GPO + begin adp_sys[7:0] <= adp_param[7:0]; adp_state <= ADP_SYSCTL; end + else // 4 etc, report GPO + begin adp_state <= ADP_SYSCTL; end + end + else if (FNvalid_cmd(adp_cmd) == CMD_R) + begin ADP_BUSREADINC_next(); adp_state <= ADP_READ; +`ifndef ADPBASIC + adp_count_dec <= 1'b1; // optional loop param +`endif + end // no param required + else if (FNvalid_cmd(adp_cmd) == CMD_S) + begin adp_state <= ADP_SYSCHK; end + else if (FNvalid_cmd(adp_cmd) == CMD_W) + begin adp_bus_data <= adp_param[31:0]; ADP_BUSWRITEINC_next(); adp_state <= ADP_WRITE; end + else if (FNvalid_cmd(adp_cmd) == CMD_X) + begin com_tx_byte <= 8'h0a; com_tx_req <= 1; adp_state <= ADP_EXIT; end +`ifndef ADPBASIC + else if (FNvalid_cmd(adp_cmd) == CMD_U) + if (FNcount_down_zero_next(adp_param[31:0])) adp_state <= ADP_ECHOCMD; else adp_state <= ADP_UCTRL; // non-zero count + else if (FNvalid_cmd(adp_cmd) == CMD_M) + begin if (adp_param[32] == 1'b1) adp_param <= {1'b0,adp_mask}; else adp_mask <= adp_param[31:0]; + adp_state <= ADP_ECHOCMD; end + else if (FNvalid_cmd(adp_cmd) == CMD_P) + if (FNcount_down_zero_next(adp_param[31:0])) adp_state <= ADP_ECHOCMD; else adp_state <= ADP_POLL; // non-zero count + else if (FNvalid_cmd(adp_cmd) == CMD_V) + begin if (adp_param[32] == 1'b1) adp_param <= {1'b0,adp_val}; else adp_val <= adp_param[31:0]; + adp_state <= ADP_ECHOCMD; end + else if (FNvalid_cmd(adp_cmd) == CMD_F) + if (FNcount_down_zero_next(adp_param[31:0])) adp_state <= ADP_ECHOCMD; else adp_state <= ADP_FCTRL; // non-zero count +`endif + else + begin ADP_txchar_next("?"); adp_state <= ADP_UNKNOWN; end // unrecognised/invald + +// >>>>>>>>>>>>>>>> ADP BUS WRITE and READ >>>>>>>>>>>>>>>>>>>>>> + + ADP_WRITE: // perform bus write at current address pointer (and auto increment) + if (adp_bus_done) begin adp_state <= ADP_ECHOCMD; adp_bus_err <= HRESP_i; end + else begin ADP_BUSWRITEINC_next(); end // extend request + + ADP_READ: // perform bus read at current adp address (and auto increment) - and report in hex + if (adp_bus_done) begin adp_bus_data <= HRDATA32_i; adp_bus_err <= HRESP_i; ADP_txchar_next("R"); adp_state <= ADP_ECHOBUS; end + else begin + ADP_BUSREADINC_next(); +`ifndef ADPBASIC + adp_count_dec<= 1'b1; +`endif + end // extend request + +`ifndef ADPBASIC + +// >>>>>>>>>>>>>>>> ADP BINARY UPLOAD >>>>>>>>>>>>>>>>>>>>>> + ADP_UCTRL: // set control value + begin com_rx_ack <= 1; adp_state <= ADP_UREADB0; end // read next 4 bytes + ADP_UREADB0: // read raw binary byte + if (com_rx_done) begin com_rx_ack <= 1; adp_bus_data[31:24] <= com_rx_byte; adp_state <= ADP_UREADB1; end + else com_rx_ack <= 1; // extend stream request if not ready + ADP_UREADB1: // read raw binary byte + if (com_rx_done) begin com_rx_ack <= 1; adp_bus_data[23:16] <= com_rx_byte; adp_state <= ADP_UREADB2; end + else com_rx_ack <= 1; // extend stream request if not ready + ADP_UREADB2: // read raw binary byte 0 + if (com_rx_done) begin com_rx_ack <= 1; adp_bus_data[15: 8] <= com_rx_byte; adp_state <= ADP_UREADB3; end + else com_rx_ack <= 1; // extend stream request if not ready + ADP_UREADB3: // read raw binary byte 0 + if (com_rx_done) + begin adp_bus_data[ 7: 0] <= com_rx_byte; ADP_BUSWRITEINC_next(); adp_count_dec <= 1; adp_state <= ADP_UWRITE; end + else com_rx_ack <= 1; // extend stream request if not ready + ADP_UWRITE: // Write word to Addr++ + if (adp_bus_done) begin // auto address++, count-- + if (FNcount_down_zero_next(adp_count)) adp_state <= ADP_ECHOCMD; else begin adp_state <= ADP_UREADB0; adp_bus_err <= adp_bus_err | HRESP_i; end + end else begin ADP_BUSWRITEINC_next(); adp_count_dec <= 1; end // extend request + +// >>>>>>>>>>>>>>>> ADP BUS READ LOOP >>>>>>>>>>>>>>>>>>>>>> + ADP_POLL: // set poll value + begin adp_bus_req <= 1; adp_bus_write <= 0; adp_state <= ADP_POLL1; end + ADP_POLL1: // wait for read data, no addr++ + if (adp_bus_done) begin adp_bus_data <= HRDATA32_i; adp_count_dec <=1; adp_state <= ADP_POLL2; adp_bus_err <= adp_bus_err | HRESP_i; end + else begin adp_bus_req <= 1; adp_count_dec <=1; end + ADP_POLL2: + if (FNcount_down_zero_next(adp_count)) begin adp_state <= ADP_ECHOCMD; adp_bus_err <= 1'b1; end // timeout + else if (((adp_bus_data & adp_mask) ^ adp_val) == 0) begin adp_state <= ADP_ECHOCMD; adp_param <= {1'b0, (adp_param[31:0] - adp_count)}; end // exact match + else adp_state <= ADP_POLL; + +// >>>>>>>>>>>>>>>> ADP (ZERO) FILL MEMORY >>>>>>>>>>>>>>>>>>>>>> + ADP_FCTRL: // set control value + begin adp_bus_data <= adp_val; ADP_BUSWRITEINC_next(); adp_count_dec <= 1; adp_state <= ADP_FWRITE; end + ADP_FWRITE: // Write word to Addr++ + if (adp_bus_done) begin // auto address++, count-- + if (FNcount_down_zero_next(adp_count)) adp_state <= ADP_ECHOCMD; else begin adp_state <= ADP_FCTRL; adp_bus_err <= adp_bus_err | HRESP_i; end + end else begin ADP_BUSWRITEINC_next(); adp_count_dec <= 1; end // extend request +`endif + + // >>>>>>>>>>>>>>>> ADP MISC >>>>>>>>>>>>>>>>>>>>>> + + ADP_UNKNOWN: // output "?" + if (com_tx_done) begin ADP_LINEACK_next(); end + else com_tx_req <= 1; // extend stream request if not ready + + ADP_EXIT: // exit ADP mode + if (com_tx_done) adp_state <= STD_IOCHK; + else com_tx_req <= 1; // extend stream request if not ready + + ADP_SYSCHK: // check STDIN fifo + begin // no upper flags so STDIN char + if (std_tx_ack) begin std_tx_req <=1; std_tx_byte <= adp_param[7:0]; adp_state <= ADP_STDIN; end + else begin adp_bus_err <= 1'b1; adp_state <= ADP_ECHOCMD; end // signal error then echo comand + end + ADP_STDIN: // push char into STDIN + if (std_tx_done) begin adp_bus_data <= {24'b0,adp_param[7:0]}; ADP_txchar_next("S"); adp_state <= ADP_ECHOBUS; end + else std_tx_req <= 1; // extend + + ADP_SYSCTL: // read current status - and report in hex + begin adp_bus_data <= {GPI8_i[7:0],adp_sys[7:0],adp_param[15:0]}; ADP_txchar_next("C"); adp_state <= ADP_ECHOBUS; end + + ADP_ECHOCMD: // output command and (param) data + begin ADP_txchar_next(adp_cmd & 8'h5f); adp_bus_data <= adp_param[31:0]; adp_state <= ADP_ECHOBUS; end // output command char + ADP_ECHOBUS: // output command space and (bus) data + if (com_tx_done) begin adp_state <= ADP_WRITEHEXS; ADP_txchar_next(adp_bus_err ? "!" : " "); end // output space char, or "!" on bus error + else com_tx_req <= 1; // extend + + ADP_WRITEHEX: // output hex word with prefix + begin adp_state <= ADP_WRITEHEXS; ADP_txchar_next(adp_bus_err ? "!" : " "); end // output space char, or "!" on bus error + + ADP_WRITEHEXS: + if (com_tx_done) begin adp_state <= ADP_WRITEHEX9; ADP_txchar_next("0"); end // output "0" hex prefix + else com_tx_req <= 1; // extend + ADP_WRITEHEX9: + if (com_tx_done) begin adp_state <= ADP_WRITEHEX8; ADP_txchar_next("x"); end // output "x" hex prefix + else com_tx_req <= 1; // extend + ADP_WRITEHEX8: + if (com_tx_done) begin adp_state <= ADP_WRITEHEX7; ADP_hexdigit_next(adp_bus_data[31:28]); end // hex nibble 7 + else com_tx_req <= 1; // extend + ADP_WRITEHEX7: // output hex nibble 7 + if (com_tx_done) begin adp_state <= ADP_WRITEHEX6; ADP_hexdigit_next(adp_bus_data[27:24]); end // hex nibble 6 + else com_tx_req <= 1; // extend + ADP_WRITEHEX6: // output hex nibble 6 + if (com_tx_done) begin adp_state <= ADP_WRITEHEX5; ADP_hexdigit_next(adp_bus_data[23:20]); end // hex nibble 5 + else com_tx_req <= 1; // extend + ADP_WRITEHEX5: // output hex nibble 5 + if (com_tx_done) begin adp_state <= ADP_WRITEHEX4; ADP_hexdigit_next(adp_bus_data[19:16]); end // hex nibble 4 + else com_tx_req <= 1; // extend + ADP_WRITEHEX4: // output hex nibble 4 + if (com_tx_done) begin adp_state <= ADP_WRITEHEX3; ADP_hexdigit_next(adp_bus_data[15:12]); end // hex nibble 3 + else com_tx_req <= 1; // extend + ADP_WRITEHEX3: // output hex nibble 3 + if (com_tx_done) begin adp_state <= ADP_WRITEHEX2; ADP_hexdigit_next(adp_bus_data[11: 8]); end // hex nibble 2 + else com_tx_req <= 1; // extend + ADP_WRITEHEX2: // output hex nibble 2 + if (com_tx_done) begin adp_state <= ADP_WRITEHEX1; ADP_hexdigit_next(adp_bus_data[ 7: 4]); end // hex nibble 1 + else com_tx_req <= 1; // extend + ADP_WRITEHEX1: // output hex nibble 1 + if (com_tx_done) begin adp_state <= ADP_WRITEHEX0; ADP_hexdigit_next(adp_bus_data[ 3: 0]); end // hex nibble 0 + else com_tx_req <= 1; // extend + ADP_WRITEHEX0: // output hex nibble 0 (if not startup banner then scan to end of line before lineack + if (com_tx_done) begin + adp_bus_err <= 1'b0; // clear sticky bus error flag + if (banner) begin ADP_LINEACK_next(); end + else begin ADP_txchar_next(8'h0A); com_tx_req <= 1; adp_state <= ADP_LINEACK; end // newline and prompt + end else com_tx_req <= 1; // extend + + ADP_LINEACK: // write EOLN + if (com_tx_done) begin + begin ADP_txchar_next(8'h0D); adp_state <= ADP_LINEACK2; end + end else com_tx_req <= 1; // extend + ADP_LINEACK2: // CR + if (com_tx_done) begin + if (banner) begin banner <= 0; adp_state <= STD_IOCHK; end +`ifndef ADPBASIC + else if ((FNvalid_cmd(adp_cmd) == CMD_R) & |adp_count) //// non-zero count + begin ADP_BUSREADINC_next(); adp_count_dec <= 1'b1; adp_state <= ADP_READ; end // +`endif + else begin ADP_txchar_next(PROMPT_CHAR); adp_state <= ADP_PROMPT; end + end else com_tx_req <= 1; // extend + default: + begin ADP_txchar_next("#"); adp_state <= ADP_UNKNOWN; end // default error + endcase + end + +endmodule + +////AHBLITE_ADPMASTER instancing +//ADPmaster +// #(.PROMPT_CHAR ("]")) +// ADPmaster( +// .HCLK (ahb_hclk ), +// .HRESETn (ahb_hrestn ), +// .HADDR32_o (ahb_haddr ), +// .HBURST3_o (ahb_hburst ), +// .HMASTLOCK_o (ahb_hmastlock ), +// .HPROT4_o (ahb_hprot ), +// .HSIZE3_o (ahb_hsize ), +// .HTRANS2_o (ahb_htrans ), +// .HWDATA32_o (ahb_hwdata ), +// .HWRITE_o (ahb_hwrite ), +// .HRDATA32_i (ahb_hrdata ), +// .HREADY_i (ahb_hready ), +// .HRESP_i (ahb_hresp ), + +// .COMRX_TREADY_o(com_rx_tready), +// .COMRX_TDATA_i(com_rx_tdata), +// .COMRX_TVALID_i(com_rx_tvalid), +// .STDRX_TREADY_o(std_rx_tready), +// .STDRX_TDATA_i(std_rx_tdata), +// .STDRX_TVALID_i(std_rx_tvalid), +// .COMTX_TVALID_o(com_tx_tvalid), +// .COMTX_TDATA_o(com_tx_tdata), +// .COMTX_TREADY_i(com_tx_tready), +// .STDTX_TVALID_o(std_tx_tvalid), +// .STDTX_TDATA_o(std_tx_tdata), +// .STDTX_TREADY_i(std_tx_tready) + +// ); diff --git a/socket/vivado_lib/ADPcontrol_1.0/xgui/ADPcontrol_v1_0.tcl b/socket/vivado_lib/ADPcontrol_1.0/xgui/ADPcontrol_v1_0.tcl new file mode 100644 index 0000000000000000000000000000000000000000..7b1f3777d50c30180f5ec02a105f6d4280b0d604 --- /dev/null +++ b/socket/vivado_lib/ADPcontrol_1.0/xgui/ADPcontrol_v1_0.tcl @@ -0,0 +1,24 @@ +# 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" + + +} + +proc update_PARAM_VALUE.PROMPT_CHAR { PARAM_VALUE.PROMPT_CHAR } { + # Procedure called to update PROMPT_CHAR when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.PROMPT_CHAR { PARAM_VALUE.PROMPT_CHAR } { + # Procedure called to validate PROMPT_CHAR + return true +} + + +proc update_MODELPARAM_VALUE.PROMPT_CHAR { MODELPARAM_VALUE.PROMPT_CHAR PARAM_VALUE.PROMPT_CHAR } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.PROMPT_CHAR}] ${MODELPARAM_VALUE.PROMPT_CHAR} +} + diff --git a/socket/vivado_lib/axi_stream_io_1.0/bd/bd.tcl b/socket/vivado_lib/axi_stream_io_1.0/bd/bd.tcl new file mode 100755 index 0000000000000000000000000000000000000000..690e4e124478e7a541fa5bd5469dc6447e9f893f --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/axi_stream_io_1.0/component.xml b/socket/vivado_lib/axi_stream_io_1.0/component.xml new file mode 100755 index 0000000000000000000000000000000000000000..5696e415cb8e30efb4743373a5ca6747614422b3 --- /dev/null +++ b/socket/vivado_lib/axi_stream_io_1.0/component.xml @@ -0,0 +1,1482 @@ +<?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>4d515fed</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>4d515fed</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('MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH')) - 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('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) - 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('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) / 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('MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH')) - 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('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) - 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_4d515fed</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>18</xilinx:coreRevision> + <xilinx:upgrades> + <xilinx:canUpgradeFrom>xilinx.com:user:axi_stream_io:1.0</xilinx:canUpgradeFrom> + </xilinx:upgrades> + <xilinx:coreCreationDateTime>2023-02-19T21:07:14Z</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:tag xilinx:name="ui.data.coregen.df@519e5f78_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7528fe9_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@140ccca_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@19984aed_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@29788adb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@fd26a57_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@297fa2f6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@47ec066a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@377a7bfc_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6b725b5d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3eeb33d6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@30630a09_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4bfe4edb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@29cc3150_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4a07c44b_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4b170789_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@398d3842_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@19987ff9_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@54481846_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@77667cfb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@47d2390f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7337b6ef_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1d4cfc6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6d178b5c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@33a003ad_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/axi_stream_io_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6e2ec915_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/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="f0ec23b4"/> + <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/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.mdd b/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.mdd new file mode 100755 index 0000000000000000000000000000000000000000..d7af75e2819376e5c2c39a5f2e0ae96d14f52b63 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.tcl b/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/data/axi_stream_io.tcl new file mode 100755 index 0000000000000000000000000000000000000000..c3a9cd03e1863921dd4ab5cbc6e020d40ae2757b --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/Makefile b/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..21453f41a1f9f82d13b20509b772556244d9f08d --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.c b/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.c new file mode 100755 index 0000000000000000000000000000000000000000..c552cbf0e917a961b599672e2ffd4327293d004c --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.h b/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io.h new file mode 100755 index 0000000000000000000000000000000000000000..294e8516087a45c4aa2229806fe30eb93e47c9b9 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io_selftest.c b/socket/vivado_lib/axi_stream_io_1.0/drivers/axi_stream_io_v1_0/src/axi_stream_io_selftest.c new file mode 100755 index 0000000000000000000000000000000000000000..26bea4d0c70f3d34776b08b13b6c877f2034dea1 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/axi_stream_io_1.0/soclabs.org_user_axi_stream_io_1.0.zip b/socket/vivado_lib/axi_stream_io_1.0/soclabs.org_user_axi_stream_io_1.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..6427293a7e3a842cbc0c6c8b2efec11dd4817b08 Binary files /dev/null and b/socket/vivado_lib/axi_stream_io_1.0/soclabs.org_user_axi_stream_io_1.0.zip differ diff --git a/socket/vivado_lib/axi_stream_io_1.0/src/axi_stream_io_v1_0_axi_s.v b/socket/vivado_lib/axi_stream_io_1.0/src/axi_stream_io_v1_0_axi_s.v new file mode 100755 index 0000000000000000000000000000000000000000..1d30f66be79c030e3aedc8b1e2e5c5095e974158 --- /dev/null +++ b/socket/vivado_lib/axi_stream_io_1.0/src/axi_stream_io_v1_0_axi_s.v @@ -0,0 +1,418 @@ + +`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_empty = !tx_reg[8]; // request to transmit + wire rx_full = rx_reg[8]; + + // I/O Connections assignments + + assign interrupt = ctrl_reg[4] & (tx_empty | rx_full); + + // TX stream interface + assign tx_tdata = tx_reg[7:0]; + assign tx_tvalid = tx_reg[8]; + + // RX stream interface + assign rx_tready = !rx_reg[8]; + + //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 flush + rx_reg <= 0; + else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h0)) // SW test write + 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)) // Read and clear RX valid pending + rx_reg[8] <= 1'b0; + else if (rx_tvalid & rx_tready) //(!rx_reg[8]) // new RX data + rx_reg[8:0] <= {1'b1, rx_tdata[7:0]}; // valid rx data (= clear rx_tready inverted bit[8]) + end + + always @( posedge S_AXI_ACLK ) + begin + if ( S_AXI_ARESETN == 1'b0 ) + tx_reg <= 0; + else if ((ctrl_reg[0] == 1'b1)) // TX flush + tx_reg <= 0; + else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h1)) // Write and set valid pending + tx_reg[8:0] <= {1'b1, S_AXI_WDATA[7:0]}; + else if (tx_tready & tx_tvalid) //& tx_reg[8]) // clear TX valid pending when req and ack + tx_reg[8] <= 1'b0; // clear valid when TX data acknowledged + 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_empty, tx_empty, rx_full, rx_full}; + 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/socket/vivado_lib/axi_stream_io_1.0/xgui/axi_stream_io_v1_0.tcl b/socket/vivado_lib/axi_stream_io_1.0/xgui/axi_stream_io_v1_0.tcl new file mode 100755 index 0000000000000000000000000000000000000000..fcf8a063ad02ac8d5e1c0cefd2eaf6c6e8339a41 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/bd/bd.tcl b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/bd/bd.tcl new file mode 100644 index 0000000000000000000000000000000000000000..4804aeba807dc4c53516378f9a0796c29f028d13 --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_axi_streamio_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/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/component.xml b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/component.xml new file mode 100644 index 0000000000000000000000000000000000000000..796d46a13ba0928a9546ea901b61a01f961810b6 --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/component.xml @@ -0,0 +1,643 @@ +<?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_axi_streamio</spirit:name> + <spirit:version>1.0</spirit:version> + <spirit:busInterfaces> + <spirit:busInterface> + <spirit:name>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>aresetn</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>POLARITY</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.ARESETN.POLARITY" spirit:choiceRef="choice_list_9d8b0d81">ACTIVE_LOW</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>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>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.ACLK.ASSOCIATED_RESET">aresetn</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.ACLK.ASSOCIATED_BUSIF">txd8:rxd8</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.ACLK.FREQ_TOLERANCE_HZ">-1</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>txd8</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>rxd8</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_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>ft1248x1_to_axi_streamio_v1_0</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>07d8b26e</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>ft1248x1_to_axi_streamio_v1_0</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>07d8b26e</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>6f142aff</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>45a2f450</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>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>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>txd_tvalid_o</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>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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</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_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_rxd8_TDATA_WIDTH</spirit:name> + <spirit:displayName>C rxd8 TDATA WIDTH</spirit:displayName> + <spirit:description>AXI4Stream sink: Data Width</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_rxd8_TDATA_WIDTH" spirit:order="3" spirit:rangeType="long">8</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_txd8_TDATA_WIDTH</spirit:name> + <spirit:displayName>C txd8 TDATA WIDTH</spirit:displayName> + <spirit:description>Width of S_AXIS address bus. The slave accepts the read and write addresses of width C_M_AXIS_TDATA_WIDTH.</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_txd8_TDATA_WIDTH" spirit:order="4" spirit:rangeType="long">8</spirit:value> + </spirit:modelParameter> + </spirit:modelParameters> + </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:choice> + <spirit:name>choice_list_d8920bdd</spirit:name> + <spirit:enumeration>8</spirit:enumeration> + </spirit:choice> + </spirit:choices> + <spirit:fileSets> + <spirit:fileSet> + <spirit:name>xilinx_verilogsynthesis_view_fileset</spirit:name> + <spirit:file> + <spirit:name>hdl/SYNCHRONIZER_EDGES.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>hdl/ft1248x1_to_axi_streamio_v1_0.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>CHECKSUM_1d919ea1</spirit:userFileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_verilogbehavioralsimulation_view_fileset</spirit:name> + <spirit:file> + <spirit:name>hdl/SYNCHRONIZER_EDGES.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>hdl/ft1248x1_to_axi_streamio_v1_0.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_xpgui_view_fileset</spirit:name> + <spirit:file> + <spirit:name>xgui/ft1248x1_to_axi_streamio_v1_0.tcl</spirit:name> + <spirit:fileType>tclSource</spirit:fileType> + <spirit:userFileType>CHECKSUM_6f142aff</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>FTDI FT1248 single bit serial to AXI 8-bit stream IO</spirit:description> + <spirit:parameters> + <spirit:parameter> + <spirit:name>C_rxd8_TDATA_WIDTH</spirit:name> + <spirit:displayName>C rxd8 TDATA WIDTH</spirit:displayName> + <spirit:description>AXI4Stream sink: Data Width</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_rxd8_TDATA_WIDTH" spirit:choiceRef="choice_list_d8920bdd" spirit:order="3">8</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:id="PARAM_ENABLEMENT.C_rxd8_TDATA_WIDTH">false</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_txd8_TDATA_WIDTH</spirit:name> + <spirit:displayName>C txd8 TDATA WIDTH</spirit:displayName> + <spirit:description>Width of S_AXIS address bus. The slave accepts the read and write addresses of width C_M_AXIS_TDATA_WIDTH.</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_txd8_TDATA_WIDTH" spirit:choiceRef="choice_list_d8920bdd" spirit:order="4">8</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:id="PARAM_ENABLEMENT.C_txd8_TDATA_WIDTH">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">ft1248x1_to_axi_streamio_v1_0</spirit:value> + </spirit:parameter> + </spirit:parameters> + <spirit:vendorExtensions> + <xilinx:coreExtensions> + <xilinx:supportedFamilies> + <xilinx:family xilinx:lifeCycle="Pre-Production">zynq</xilinx:family> + <xilinx:family xilinx:lifeCycle="Beta">zynquplus</xilinx:family> + <xilinx:family xilinx:lifeCycle="Beta">kintexu</xilinx:family> + <xilinx:family xilinx:lifeCycle="Beta">kintex7</xilinx:family> + </xilinx:supportedFamilies> + <xilinx:taxonomies> + <xilinx:taxonomy>AXI_Peripheral</xilinx:taxonomy> + </xilinx:taxonomies> + <xilinx:displayName>ft1248x1_to_axi_streamio_v1.0</xilinx:displayName> + <xilinx:coreRevision>9</xilinx:coreRevision> + <xilinx:coreCreationDateTime>2023-06-01T10:11:18Z</xilinx:coreCreationDateTime> + <xilinx:tags> + <xilinx:tag xilinx:name="ui.data.coregen.df@428bf478_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@77d2a63f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@401fae27_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@799f76c6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@543230e4_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@860c575_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@13b2b016_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1b16e880_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@b115448_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@35f4f12f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@96c629_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@289d8498_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5e6ca2b9_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@34c6c438_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2f1c92e2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6bc27418_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6470d1df_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@666070f1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4795032_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@214e5d0f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@72c6aa50_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@310b0085_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7057424_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6cf947f0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2241eee6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@64c33679_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@f32e78b_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@524b62d8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@25a5c540_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5b694545_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1756c2fa_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5e55a1f4_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6e825144_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@29f61c2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5d96e1e9_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@608fee64_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@12bb2394_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@319424cf_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3aac7e77_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@511ec980_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@330b1dd3_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@529e8eab_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@dd60893_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@c8742b2_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7621d7af_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@24f3db95_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@22c484f4_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1866e24c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5571345d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@46ac3e68_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@56b1d9f1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@529ff48f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@757ac0cc_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1fcd0999_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@90370b5_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@28c4e1ce_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git/soclabs-cortexm0-mcu/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@a3c2c51_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@33cb581b_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@36560694_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5a029744_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@649708f3_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@40b4275d_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2c2b1fd9_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2c951206_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@60f53ba_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@62ce2736_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4869df7e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@366d857f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3143c41e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@a3a24e5_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@f50a86e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@16f76b78_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@784ca772_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@266cf8b0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5985e9a7_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5b0f2afb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@261184f5_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1ff5947b_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@439de9f5_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3103f8a1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@43ce0b7f_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@63f6aeb9_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@654e1a72_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@428ff7a8_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2747214_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@165165da_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@14b2bd29_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@11bb99fa_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@45d547c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@992911c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6f68f972_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@33ec70d0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@77c4c6ca_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3eaae7a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7e143239_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1ddc7b40_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@302a1c3e_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4fa27fd6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1117ca64_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@35cb4ee9_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4a5d8467_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4c4463a4_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@56eee029_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@333fc4de_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6e8d2e2a_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@70ab23aa_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@203963e1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@509005d0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4916ee78_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@9b5c2aa_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@58902ddb_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5744b6c1_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@51d00cf6_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4910d90c_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@52ca7ed0_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7a2f2ef_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@13049cbf_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2c4fe533_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@19907224_ARCHIVE_LOCATION">/home/dwf1m12/soclabs_git_new/nanosoc/Cortex-M0/nanosoc/systems/mcu/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@23d3f1b7_ARCHIVE_LOCATION">/home/dwn1c21/SoC-Labs/nanosoc_tech/system/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@22807dd0_ARCHIVE_LOCATION">/home/dwn1c21/SoC-Labs/nanosoc_tech/system/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2fc76256_ARCHIVE_LOCATION">/home/dwn1c21/SoC-Labs/nanosoc_tech/system/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7a60836b_ARCHIVE_LOCATION">/home/dwn1c21/SoC-Labs/nanosoc_tech/system/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@74c04a33_ARCHIVE_LOCATION">/home/dwn1c21/SoC-Labs/nanosoc_tech/system/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@e41b2f9_ARCHIVE_LOCATION">/home/dwn1c21/SoC-Labs/nanosoc_tech/system/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6be6a0c9_ARCHIVE_LOCATION">/home/dwn1c21/SoC-Labs/nanosoc_tech/system/fpga_imp/ip_repo/ft1248x1_to_axi_streamio_1.0</xilinx:tag> + </xilinx:tags> + </xilinx:coreExtensions> + <xilinx:packagingInfo> + <xilinx:xilinxVersion>2021.1</xilinx:xilinxVersion> + <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="90504787"/> + <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="5194cd85"/> + <xilinx:checksum xilinx:scope="ports" xilinx:value="95a87e81"/> + <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="1be3ccaa"/> + <xilinx:checksum xilinx:scope="parameters" xilinx:value="6bebc0ed"/> + <xilinx:targetDRCs> + <xilinx:targetDRC xilinx:tool="ipi"> + <xilinx:targetDRCOption xilinx:name="ignore_freq_hz" xilinx:value="true"/> + </xilinx:targetDRC> + </xilinx:targetDRCs> + </xilinx:packagingInfo> + </spirit:vendorExtensions> +</spirit:component> diff --git a/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/ft1248x1_to_axi_streamio_0_2.xcix b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/ft1248x1_to_axi_streamio_0_2.xcix new file mode 100644 index 0000000000000000000000000000000000000000..e82fe55bd07f5b2021117a733d5ad768f20a16cc Binary files /dev/null and b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/ft1248x1_to_axi_streamio_0_2.xcix differ diff --git a/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/SYNCHRONIZER_EDGES.v b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/SYNCHRONIZER_EDGES.v new file mode 100644 index 0000000000000000000000000000000000000000..c669ec19a796217b231dd0575337608f84445beb --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/SYNCHRONIZER_EDGES.v @@ -0,0 +1,42 @@ +// 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_EDGES ( + input wire testmode_i + ,input wire clk_i + ,input wire reset_n_i + ,input wire asyn_i + ,output wire syn_o + ,output wire syn_del_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 syn_del_o = (testmode_i) ? asyn_i : sync_stage3; +assign posedge_o = (testmode_i) ? asyn_i : ( sync_stage2 & !sync_stage3); +assign negedge_o = (testmode_i) ? asyn_i : (!sync_stage2 & sync_stage3); + +endmodule diff --git a/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0.v b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0.v new file mode 100644 index 0000000000000000000000000000000000000000..a089edf83efd967f56efb3ce3e55ed1d93a63d19 --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0.v @@ -0,0 +1,212 @@ +//----------------------------------------------------------------------------- +// 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 (C) 2022-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// Abstract : FT1248 1-bit data off-chip interface (emulate FT232H device) +//----------------------------------------------------------------------------- + + module ft1248x1_to_axi_streamio_v1_0 # + ( + // Users to add parameters here + + // User parameters ends + // Do not modify the parameters beyond this line + + + // Parameters of Axi Stream Bus Interface rxd8 + parameter integer C_rxd8_TDATA_WIDTH = 8, + + // Parameters of Axi Stream Bus Interface txd8 + parameter integer C_txd8_TDATA_WIDTH = 8 + ) + ( + 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, + + input wire aclk, // external primary clock + input wire aresetn, // 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_miosio_i_del; + +SYNCHRONIZER_EDGES u_sync_ft_clk ( + .testmode_i(1'b0), + .clk_i(aclk), + .reset_n_i(aresetn), + .asyn_i(ft_clk_i), + .syn_o(), + .syn_del_o(), + .posedge_o(ft_clk_rising), + .negedge_o(ft_clk_falling) + ); + +SYNCHRONIZER_EDGES u_sync_ft_ssn ( + .testmode_i(1'b0), + .clk_i(aclk), + .reset_n_i(aresetn), + .asyn_i(ft_ssn_i), + .syn_o(ft_ssn), + .syn_del_o(), + .posedge_o( ), + .negedge_o( ) + ); + +SYNCHRONIZER_EDGES u_sync_ft_din ( + .testmode_i(1'b0), + .clk_i(aclk), + .reset_n_i(aresetn), + .asyn_i(ft_miosio_i), + .syn_o( ), + .syn_del_o(ft_miosio_i_del), + .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 aclk or negedge aresetn) + if (!aresetn) + 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 aclk or negedge aresetn) + if (!aresetn) + 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 aclk or negedge aresetn) + if (!aresetn) + 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_del, 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 aclk or negedge aresetn) + if (!aresetn) + 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, ft_miosio_i_del, 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 aclk or negedge aresetn) + if (!aresetn) + 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 [8:0] txd_sr; +// rewrite for clocked +always @(posedge aclk or negedge aresetn) + if (!aresetn) + txd_sr <= 8'b00000000; + else if (ft_ssn) // sync reset + txd_sr <= 8'b00000000; + else if (ft_clk_falling & ft_cmd_rxd & rxd_tvalid_i & (ft_state == 5'b00111)) + txd_sr <= rxd_tdata8_i; + else if (ft_clk_rising & ft_cmd_rxd & (ft_state[4:3] == 2'b01)) //serial shift + txd_sr <= {1'b0,txd_sr[7:1]}; + +assign rxd_tready_o = (ft_clk_rising & ft_cmd_rxd & (ft_state==5'b01110)); // hold until final shift + +//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); +assign ft_miso_o = (ft_ssn_i) ? !rxd_tvalid_i : ((ft_state == 5'b00111) & ((ft_cmd_txd) ? txstream[8]: !rxd_tvalid_i)); + +endmodule diff --git a/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0_rxd8.v b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0_rxd8.v new file mode 100644 index 0000000000000000000000000000000000000000..03004bea96fe4c5e9ea0984b905d5f7a4b91d771 --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0_rxd8.v @@ -0,0 +1,167 @@ + +`timescale 1 ns / 1 ps + + module ft1248x1_to_axi_streamio_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/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0_txd8.v b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0_txd8.v new file mode 100644 index 0000000000000000000000000000000000000000..28cc34eafd0d52416bcfd2c8472fcda1245cd9a6 --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/hdl/ft1248x1_to_axi_streamio_v1_0_txd8.v @@ -0,0 +1,228 @@ + +`timescale 1 ns / 1 ps + + module ft1248x1_to_axi_streamio_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/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/soclabs.org_user_ft1248x1_to_axi_streamio_1.0.zip b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/soclabs.org_user_ft1248x1_to_axi_streamio_1.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..7cc581a635a8bd18d2224fc4f7b002adf2093b95 Binary files /dev/null and b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/soclabs.org_user_ft1248x1_to_axi_streamio_1.0.zip differ diff --git a/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/xgui/ft1248x1_to_axi_streamio_v1_0.tcl b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/xgui/ft1248x1_to_axi_streamio_v1_0.tcl new file mode 100644 index 0000000000000000000000000000000000000000..f4b8c38737c46cbcd6d7a1adc43b9844e6b2e07f --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_axi_streamio_1.0/xgui/ft1248x1_to_axi_streamio_v1_0.tcl @@ -0,0 +1,35 @@ +# Definitional proc to organize widgets for parameters. +proc init_gui { IPINST } { + ipgui::add_param $IPINST -name "Component_Name" + +} + +proc update_PARAM_VALUE.C_rxd8_TDATA_WIDTH { PARAM_VALUE.C_rxd8_TDATA_WIDTH } { + # Procedure called to update C_rxd8_TDATA_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_rxd8_TDATA_WIDTH { PARAM_VALUE.C_rxd8_TDATA_WIDTH } { + # Procedure called to validate C_rxd8_TDATA_WIDTH + return true +} + +proc update_PARAM_VALUE.C_txd8_TDATA_WIDTH { PARAM_VALUE.C_txd8_TDATA_WIDTH } { + # Procedure called to update C_txd8_TDATA_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_txd8_TDATA_WIDTH { PARAM_VALUE.C_txd8_TDATA_WIDTH } { + # Procedure called to validate C_txd8_TDATA_WIDTH + return true +} + + +proc update_MODELPARAM_VALUE.C_rxd8_TDATA_WIDTH { MODELPARAM_VALUE.C_rxd8_TDATA_WIDTH PARAM_VALUE.C_rxd8_TDATA_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_rxd8_TDATA_WIDTH}] ${MODELPARAM_VALUE.C_rxd8_TDATA_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_txd8_TDATA_WIDTH { MODELPARAM_VALUE.C_txd8_TDATA_WIDTH PARAM_VALUE.C_txd8_TDATA_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_txd8_TDATA_WIDTH}] ${MODELPARAM_VALUE.C_txd8_TDATA_WIDTH} +} + diff --git a/socket/vivado_lib/ft1248x1_to_stream8_1.0/bd/bd.tcl b/socket/vivado_lib/ft1248x1_to_stream8_1.0/bd/bd.tcl new file mode 100644 index 0000000000000000000000000000000000000000..4804aeba807dc4c53516378f9a0796c29f028d13 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/ft1248x1_to_stream8_1.0/component.xml b/socket/vivado_lib/ft1248x1_to_stream8_1.0/component.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9d8d6e573fef4d3a7f1d643e634a02f82032d93 --- /dev/null +++ b/socket/vivado_lib/ft1248x1_to_stream8_1.0/component.xml @@ -0,0 +1,127 @@ +<?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>ip</spirit:library> + <spirit:name>ft1248x1_to_stream8_1.0</spirit:name> + <spirit:version>1.0</spirit:version> + <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: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: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:views> + </spirit:model> + <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:logicalName>ft1248x1_to_stream8_1.0</spirit:logicalName> + </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:logicalName>ft1248x1_to_stream8_1.0</spirit:logicalName> + </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:logicalName>ft1248x1_to_stream8_1.0</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>src/ft1248x1_to_stream8.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:logicalName>ft1248x1_to_stream8_1.0</spirit:logicalName> + </spirit:file> + </spirit:fileSet> + </spirit:fileSets> + <spirit:description>ft1248x1_to_stream8_1.0:1.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_1_0_v1_0</spirit:value> + </spirit:parameter> + </spirit:parameters> + <spirit:vendorExtensions> + <xilinx:coreExtensions> + <xilinx:taxonomies> + <xilinx:taxonomy>/AXI_Infrastructure</xilinx:taxonomy> + <xilinx:taxonomy>/Debug_&_Verification/Debug</xilinx:taxonomy> + <xilinx:taxonomy>/Embedded_Processing/Debug_&_Verification/Debug</xilinx:taxonomy> + </xilinx:taxonomies> + <xilinx:displayName>ft1248x1_to_stream8_1.0_v1_0</xilinx:displayName> + <xilinx:hideInCatalogGUI>true</xilinx:hideInCatalogGUI> + <xilinx:definitionSource>package_project</xilinx:definitionSource> + <xilinx:vendorDisplayName>soclabs.org</xilinx:vendorDisplayName> + <xilinx:vendorURL>http://soclabs.org</xilinx:vendorURL> + <xilinx:coreRevision>1</xilinx:coreRevision> + <xilinx:upgrades> + <xilinx:canUpgradeFrom>xilinx.com:ip:ft1248x1_to_stream8_1.0:1.0</xilinx:canUpgradeFrom> + </xilinx:upgrades> + <xilinx:coreCreationDateTime>2022-08-18T13:41:50Z</xilinx:coreCreationDateTime> + <xilinx:tags> + <xilinx:tag xilinx:name="ui.data.coregen.df@554a8be0_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@2c2e0f51_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@4bf8650c_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@50a2d20f_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@679c5188_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@61453e2b_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@20d8eb40_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@9d02819_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@1f726801_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@7d50b16d_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@558791b8_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@dade147_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@50c7becf_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@134862eb_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@4c308b0f_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@174caa76_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@33e02927_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@1bc1eca_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@247a24c1_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@7f189307_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@4fc3a402_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@62f43e05_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@7f223669_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@77281e8f_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="fileGroups" xilinx:value="8af10ea9"/> + <xilinx:checksum xilinx:scope="parameters" xilinx:value="f93808b1"/> + </xilinx:packagingInfo> + </spirit:vendorExtensions> +</spirit:component> diff --git a/socket/vivado_lib/ft1248x1_to_stream8_1.0/ft1248x1_to_stream8_0.xcix b/socket/vivado_lib/ft1248x1_to_stream8_1.0/ft1248x1_to_stream8_0.xcix new file mode 100644 index 0000000000000000000000000000000000000000..1b2410ad1ecde98574e898028f41ad55c1c8f3b1 Binary files /dev/null and b/socket/vivado_lib/ft1248x1_to_stream8_1.0/ft1248x1_to_stream8_0.xcix differ diff --git a/socket/vivado_lib/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0.v b/socket/vivado_lib/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0.v new file mode 100644 index 0000000000000000000000000000000000000000..822ab4cd47a344ec599d082d80384686bdb6360d --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_RXD8.v b/socket/vivado_lib/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_RXD8.v new file mode 100644 index 0000000000000000000000000000000000000000..9b39ac62c1aa1246d5b566160b5bd7b5dd1d07ad --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_TXD8.v b/socket/vivado_lib/ft1248x1_to_stream8_1.0/hdl/ft1248x1_to_stream8_v1_0_TXD8.v new file mode 100644 index 0000000000000000000000000000000000000000..3abf9f8a3c52a9a6716e09c985c2a15faa383be5 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/ft1248x1_to_stream8_1.0/ip_project_archive.zip b/socket/vivado_lib/ft1248x1_to_stream8_1.0/ip_project_archive.zip new file mode 100755 index 0000000000000000000000000000000000000000..e67e74bbc9ca5ffffb895c6ce630825d07197fa2 Binary files /dev/null and b/socket/vivado_lib/ft1248x1_to_stream8_1.0/ip_project_archive.zip differ diff --git a/socket/vivado_lib/ft1248x1_to_stream8_1.0/soclabs.org_user_ft1248x1_to_stream8_1.0.zip b/socket/vivado_lib/ft1248x1_to_stream8_1.0/soclabs.org_user_ft1248x1_to_stream8_1.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..bd8f20f74f0cc9c44da89578d526ab1afbd7f276 Binary files /dev/null and b/socket/vivado_lib/ft1248x1_to_stream8_1.0/soclabs.org_user_ft1248x1_to_stream8_1.0.zip differ diff --git a/socket/vivado_lib/ft1248x1_to_stream8_1.0/src/ft1248x1_to_stream8.v b/socket/vivado_lib/ft1248x1_to_stream8_1.0/src/ft1248x1_to_stream8.v new file mode 100755 index 0000000000000000000000000000000000000000..6c55abc8d956769a1ca142d910603d780445a4ca --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/ft1248x1_to_stream8_1.0/src/synclib.v b/socket/vivado_lib/ft1248x1_to_stream8_1.0/src/synclib.v new file mode 100755 index 0000000000000000000000000000000000000000..1daf61f27dffed42591278f8e46a4239a46554a2 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/ft1248x1_to_stream8_1.0/xgui/ft1248x1_to_stream8_v1_0.tcl b/socket/vivado_lib/ft1248x1_to_stream8_1.0/xgui/ft1248x1_to_stream8_v1_0.tcl new file mode 100644 index 0000000000000000000000000000000000000000..0db18e9a9d18f3e4b14481f7664b048781110ca3 --- /dev/null +++ b/socket/vivado_lib/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/socket/vivado_lib/uart_to_AXI_master_1.0/bd/bd.tcl b/socket/vivado_lib/uart_to_AXI_master_1.0/bd/bd.tcl new file mode 100644 index 0000000000000000000000000000000000000000..4804aeba807dc4c53516378f9a0796c29f028d13 --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_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/socket/vivado_lib/uart_to_AXI_master_1.0/component.xml b/socket/vivado_lib/uart_to_AXI_master_1.0/component.xml new file mode 100644 index 0000000000000000000000000000000000000000..173a620b0216a055aa49e21a9a1853f6062e3d2b --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_1.0/component.xml @@ -0,0 +1,1707 @@ +<?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>user.org</spirit:vendor> + <spirit:library>user</spirit:library> + <spirit:name>uart_to_AXI_master</spirit:name> + <spirit:version>1.0</spirit:version> + <spirit:busInterfaces> + <spirit:busInterface> + <spirit:name>M00_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:master> + <spirit:addressSpaceRef spirit:addressSpaceRef="M00_AXI"/> + </spirit:master> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awaddr</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWLEN</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awlen</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWSIZE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awsize</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWBURST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awburst</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWLOCK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awlock</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWCACHE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awcache</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWPROT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awprot</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWQOS</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awqos</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWUSER</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awuser</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_awready</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_wdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WSTRB</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_wstrb</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WLAST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_wlast</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WUSER</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_wuser</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_wvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_wready</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_bid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_bresp</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BUSER</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_buser</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_bvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_bready</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_araddr</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARLEN</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arlen</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARSIZE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arsize</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARBURST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arburst</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARLOCK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arlock</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARCACHE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arcache</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARPROT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arprot</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARQOS</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arqos</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARUSER</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_aruser</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_arready</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_rid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_rdata</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_rresp</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RLAST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_rlast</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RUSER</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_ruser</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_rvalid</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>m00_axi_rready</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.M00_AXI.WIZ_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197">32</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>SUPPORTS_NARROW_BURST</spirit:name> + <spirit:value spirit:format="long" spirit:id="BUSIFPARAM_VALUE.M00_AXI.SUPPORTS_NARROW_BURST" spirit:choiceRef="choice_pairs_ce1226b1">0</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>M00_AXI_RST</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>m00_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.M00_AXI_RST.POLARITY" spirit:choiceRef="choice_list_9d8b0d81">ACTIVE_LOW</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>M00_AXI_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>m00_axi_aclk</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.M00_AXI_CLK.ASSOCIATED_BUSIF">M00_AXI</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.M00_AXI_CLK.ASSOCIATED_RESET">m00_axi_aresetn</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + </spirit:busInterfaces> + <spirit:addressSpaces> + <spirit:addressSpace> + <spirit:name>M00_AXI</spirit:name> + <spirit:range spirit:format="long" spirit:resolve="dependent" spirit:dependency="pow(2,(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ADDR_WIDTH')) - 1) + 1)" spirit:minimum="0" spirit:maximum="4294967296" spirit:rangeType="long">4294967296</spirit:range> + <spirit:width spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH')) - 1) + 1">32</spirit:width> + </spirit:addressSpace> + </spirit:addressSpaces> + <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>uart_to_AXI_master_v1_0</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>38b2cf1f</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>uart_to_AXI_master_v1_0</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>38b2cf1f</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>35a319c8</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>45a2f450</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + </spirit:views> + <spirit:ports> + <spirit:port> + <spirit:name>UART_RX</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>UART_TX</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>m00_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>m00_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>m00_axi_awid</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_awid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_awaddr</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ADDR_WIDTH')) - 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>m00_axi_awlen</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>m00_axi_awsize</spirit:name> + <spirit:wire> + <spirit:direction>out</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>m00_axi_awburst</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>m00_axi_awlock</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>m00_axi_awcache</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>wire</spirit:typeName> + <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_awprot</spirit:name> + <spirit:wire> + <spirit:direction>out</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>m00_axi_awqos</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>wire</spirit:typeName> + <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_awuser</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_AWUSER_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_awuser" xilinx:dependency="spirit:decode(id('PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_awvalid</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>m00_axi_awready</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>m00_axi_wdata</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH')) - 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>m00_axi_wstrb</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH')) / 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>m00_axi_wlast</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>m00_axi_wuser</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_WUSER_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_wuser" xilinx:dependency="spirit:decode(id('PARAM_VALUE.C_M00_AXI_WUSER_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_wvalid</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>m00_axi_wready</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>m00_axi_bid</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_bid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_bresp</spirit:name> + <spirit:wire> + <spirit:direction>in</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>m00_axi_buser</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_BUSER_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_buser" xilinx:dependency="spirit:decode(id('PARAM_VALUE.C_M00_AXI_BUSER_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_bvalid</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>m00_axi_bready</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>m00_axi_arid</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_arid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_araddr</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ADDR_WIDTH')) - 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>m00_axi_arlen</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>m00_axi_arsize</spirit:name> + <spirit:wire> + <spirit:direction>out</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>m00_axi_arburst</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>m00_axi_arlock</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>m00_axi_arcache</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>wire</spirit:typeName> + <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_arprot</spirit:name> + <spirit:wire> + <spirit:direction>out</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>m00_axi_arqos</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>wire</spirit:typeName> + <spirit:viewNameRef>xilinx_verilogsynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_verilogbehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_aruser</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ARUSER_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_aruser" xilinx:dependency="spirit:decode(id('PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_arvalid</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>m00_axi_arready</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>m00_axi_rid</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_rid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_rdata</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH')) - 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>m00_axi_rresp</spirit:name> + <spirit:wire> + <spirit:direction>in</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>m00_axi_rlast</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>m00_axi_ruser</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_M00_AXI_RUSER_WIDTH')) - 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:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.m00_axi_ruser" xilinx:dependency="spirit:decode(id('PARAM_VALUE.C_M00_AXI_RUSER_WIDTH')) >0">true</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> + </spirit:port> + <spirit:port> + <spirit:name>m00_axi_rvalid</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>m00_axi_rready</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:ports> + <spirit:modelParameters> + <spirit:modelParameter xsi:type="spirit:nameValueTypeType" spirit:dataType="integer"> + <spirit:name>C_M00_AXI_TARGET_SLAVE_BASE_ADDR</spirit:name> + <spirit:displayName>C M00 AXI TARGET SLAVE BASE ADDR</spirit:displayName> + <spirit:description>Base address of targeted slave</spirit:description> + <spirit:value spirit:format="bitString" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR" spirit:order="3" spirit:bitStringLength="32">0x40000000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_BURST_LEN</spirit:name> + <spirit:displayName>C M00 AXI BURST LEN</spirit:displayName> + <spirit:description>Burst Length. Supports 1, 2, 4, 8, 16, 32, 64, 128, 256 burst lengths</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_BURST_LEN" spirit:choiceRef="choice_list_85010fde" spirit:order="4">16</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_ID_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI ID WIDTH</spirit:displayName> + <spirit:description>Thread ID Width</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH" spirit:dependency="((spirit:decode(id('PARAM_VALUE.C_M00_AXI_ID_WIDTH')) <= 0 ) + (spirit:decode(id('PARAM_VALUE.C_M00_AXI_ID_WIDTH'))))" spirit:order="5" spirit:minimum="0" spirit:maximum="32" spirit:rangeType="long">4</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_ADDR_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI ADDR WIDTH</spirit:displayName> + <spirit:description>Width of Address Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_ADDR_WIDTH" spirit:order="6" spirit:rangeType="long">32</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_DATA_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI DATA WIDTH</spirit:displayName> + <spirit:description>Width of Data Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH" spirit:order="7" spirit:rangeType="long">32</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_AWUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI AWUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Write Address Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_AWUSER_WIDTH" spirit:dependency="((spirit:decode(id('PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH')) <= 0 ) + (spirit:decode(id('PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH'))))" spirit:order="8" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_ARUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI ARUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Read Address Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_ARUSER_WIDTH" spirit:dependency="((spirit:decode(id('PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH')) <= 0 ) + (spirit:decode(id('PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH'))))" spirit:order="9" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_WUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI WUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Write Data Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_WUSER_WIDTH" spirit:dependency="((spirit:decode(id('PARAM_VALUE.C_M00_AXI_WUSER_WIDTH')) <= 0 ) + (spirit:decode(id('PARAM_VALUE.C_M00_AXI_WUSER_WIDTH'))))" spirit:order="10" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_RUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI RUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Read Data Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_RUSER_WIDTH" spirit:dependency="((spirit:decode(id('PARAM_VALUE.C_M00_AXI_RUSER_WIDTH')) <= 0 ) + (spirit:decode(id('PARAM_VALUE.C_M00_AXI_RUSER_WIDTH'))))" spirit:order="11" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_M00_AXI_BUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI BUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Response Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M00_AXI_BUSER_WIDTH" spirit:dependency="((spirit:decode(id('PARAM_VALUE.C_M00_AXI_BUSER_WIDTH')) <= 0 ) + (spirit:decode(id('PARAM_VALUE.C_M00_AXI_BUSER_WIDTH'))))" spirit:order="12" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>CLK_SPEED</spirit:name> + <spirit:displayName>Clk Speed</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.CLK_SPEED">10000000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>UART_BAUD_RATE</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.UART_BAUD_RATE">115200</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_85010fde</spirit:name> + <spirit:enumeration>1</spirit:enumeration> + <spirit:enumeration>2</spirit:enumeration> + <spirit:enumeration>4</spirit:enumeration> + <spirit:enumeration>8</spirit:enumeration> + <spirit:enumeration>16</spirit:enumeration> + <spirit:enumeration>32</spirit:enumeration> + <spirit:enumeration>64</spirit:enumeration> + <spirit:enumeration>128</spirit:enumeration> + <spirit:enumeration>256</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/dbg_bridge.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>src/dbg_bridge_fifo.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>src/dbg_bridge_uart.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>hdl/uart_to_AXI_master_v1_0.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>CHECKSUM_c45cfbca</spirit:userFileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_verilogbehavioralsimulation_view_fileset</spirit:name> + <spirit:file> + <spirit:name>src/dbg_bridge.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>src/dbg_bridge_fifo.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>src/dbg_bridge_uart.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>hdl/uart_to_AXI_master_v1_0.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_xpgui_view_fileset</spirit:name> + <spirit:file> + <spirit:name>xgui/uart_to_AXI_master_v1_0.tcl</spirit:name> + <spirit:fileType>tclSource</spirit:fileType> + <spirit:userFileType>CHECKSUM_35a319c8</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>Uart to AXI master packaged from https://github.com/ultraembedded/core_dbg_bridge</spirit:description> + <spirit:parameters> + <spirit:parameter> + <spirit:name>C_M00_AXI_TARGET_SLAVE_BASE_ADDR</spirit:name> + <spirit:displayName>C M00 AXI TARGET SLAVE BASE ADDR</spirit:displayName> + <spirit:description>Base address of targeted slave</spirit:description> + <spirit:value spirit:format="bitString" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR" spirit:order="3" spirit:bitStringLength="32">0x40000000</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_BURST_LEN</spirit:name> + <spirit:displayName>C M00 AXI BURST LEN</spirit:displayName> + <spirit:description>Burst Length. Supports 1, 2, 4, 8, 16, 32, 64, 128, 256 burst lengths</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_BURST_LEN" spirit:choiceRef="choice_list_85010fde" spirit:order="4">16</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_ID_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI ID WIDTH</spirit:displayName> + <spirit:description>Thread ID Width</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_ID_WIDTH" spirit:order="5" spirit:minimum="0" spirit:maximum="32" spirit:rangeType="long">4</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_ADDR_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI ADDR WIDTH</spirit:displayName> + <spirit:description>Width of Address Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_ADDR_WIDTH" spirit:order="6" spirit:rangeType="long">32</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:id="PARAM_ENABLEMENT.C_M00_AXI_ADDR_WIDTH">false</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_DATA_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI DATA WIDTH</spirit:displayName> + <spirit:description>Width of Data Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_DATA_WIDTH" spirit:choiceRef="choice_list_6fc15197" spirit:order="7">32</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:id="PARAM_ENABLEMENT.C_M00_AXI_DATA_WIDTH">false</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_AWUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI AWUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Write Address Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH" spirit:order="8" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_ARUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI ARUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Read Address Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH" spirit:order="9" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_WUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI WUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Write Data Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_WUSER_WIDTH" spirit:order="10" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_RUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI RUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Read Data Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_RUSER_WIDTH" spirit:order="11" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_M00_AXI_BUSER_WIDTH</spirit:name> + <spirit:displayName>C M00 AXI BUSER WIDTH</spirit:displayName> + <spirit:description>Width of User Response Bus</spirit:description> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_M00_AXI_BUSER_WIDTH" spirit:order="12" spirit:minimum="0" spirit:maximum="1024" spirit:rangeType="long">4</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>Component_Name</spirit:name> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.Component_Name" spirit:order="1">uart_to_AXI_master_v1_0</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_SPEED</spirit:name> + <spirit:displayName>Clk Speed</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.CLK_SPEED">10000000</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>UART_BAUD_RATE</spirit:name> + <spirit:displayName>Uart Baud Rate</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.UART_BAUD_RATE">115200</spirit:value> + </spirit:parameter> + </spirit:parameters> + <spirit:vendorExtensions> + <xilinx:coreExtensions> + <xilinx:supportedFamilies> + <xilinx:family xilinx:lifeCycle="Pre-Production">kintexu</xilinx:family> + </xilinx:supportedFamilies> + <xilinx:taxonomies> + <xilinx:taxonomy>AXI_Peripheral</xilinx:taxonomy> + </xilinx:taxonomies> + <xilinx:displayName>uart_to_AXI_master_v1.0</xilinx:displayName> + <xilinx:autoFamilySupportLevel>level_0</xilinx:autoFamilySupportLevel> + <xilinx:vendorDisplayName>soclabs</xilinx:vendorDisplayName> + <xilinx:vendorURL>https://soclabs.org/</xilinx:vendorURL> + <xilinx:coreRevision>6</xilinx:coreRevision> + <xilinx:coreCreationDateTime>2023-06-01T13:08:48Z</xilinx:coreCreationDateTime> + <xilinx:tags> + <xilinx:tag xilinx:name="ui.data.coregen.df@1fd4a15b_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2933d767_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@708447c7_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@96405c9_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@45935e52_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@68726c79_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6b7bb17_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@70f34d8e_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@22805726_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@74a55f05_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@322750d9_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7c023775_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6191d7c0_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1b7962d0_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7d5df19c_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7af46ef2_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@bc318ea_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@101a077e_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5e875efa_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@34877e43_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@d09855a_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2d8c2b3e_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2dbb1385_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@23d12911_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3e13bedf_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@29e8b819_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@120ece2_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@361df3d1_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@793abf59_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7bf186b9_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@70a3fad6_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3d8a6cf8_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6e5027b4_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@20189eab_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1e330021_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@74303bc7_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2010cc70_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@12d105ca_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@222e7a55_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7e29ed12_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4fc809fa_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2df918f0_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3f0e26b6_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2455c3c5_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6561cc2d_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@513f6b78_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6fc93626_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@62463ab2_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@55ef71ba_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5d80f90b_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7372175_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6c8e3281_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1e04f49d_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@25f10fa7_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@54b2dd9f_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1c6a6648_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2f9ac64c_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@72e63a54_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@61c428c4_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@43122251_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5059af69_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1d802de7_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@75bdadf4_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4d6ed53d_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7925048b_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@108f391c_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7f1498fe_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5548acd0_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4849c76_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@50d11aca_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@22495cde_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6ef61cc0_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@59a31fa7_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4f0e3f7e_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7907ca3e_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@581ee416_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2e543baa_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@8c663bc_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4b5fbf0b_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5f381124_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@32f2923c_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@497ac8ba_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5f5d01eb_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@191b31f_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5e993fb8_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7ca38acf_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@75021e56_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@31fe6dec_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7277d53f_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@31922b28_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@b06ddc0_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1c179cfd_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@8102036_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@73ad705c_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5353b2b4_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5cb47d00_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@46176272_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1d2301f9_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2f1635d1_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3593e2a3_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1b4bfa91_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@58b9b9f3_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@11fd3d9c_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5a819b46_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@62c4ed2e_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@70ee5e4d_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1f5cdcbd_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@512cbf0c_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7516b8af_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@14a95092_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4681eabf_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3a452962_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@17036acc_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4a606aa7_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5ec82ae6_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@5d0dc9f4_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@72380301_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@7fa8fd72_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1d33fa81_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@1f63632a_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@17713935_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@61baa3f8_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@65a91cfd_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2af121a1_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2f744008_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@61b6cd8b_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@f069eb4_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@b935b94_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@32546388_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@114c5035_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3c75d34b_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6874321_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@46583018_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@41d536b1_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@40f657bf_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@10231e83_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@224ca18e_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@3bc30fbf_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@202f5f90_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@27d49fb_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@2c4ea8b4_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@327d1143_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@38931e7f_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@230e1d31_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@6cb420c1_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@25175e93_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.df@4245e791_ARCHIVE_LOCATION">/home/dwn1c21/ARM_MPS3/ip_repo/uart_to_AXI_master_1.0</xilinx:tag> + </xilinx:tags> + </xilinx:coreExtensions> + <xilinx:packagingInfo> + <xilinx:xilinxVersion>2021.1</xilinx:xilinxVersion> + <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="372f74e8"/> + <xilinx:checksum xilinx:scope="addressSpaces" xilinx:value="55bfeea0"/> + <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="c3fd8916"/> + <xilinx:checksum xilinx:scope="ports" xilinx:value="63fd1f40"/> + <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="75e91d4e"/> + <xilinx:checksum xilinx:scope="parameters" xilinx:value="880293a4"/> + </xilinx:packagingInfo> + </spirit:vendorExtensions> +</spirit:component> diff --git a/socket/vivado_lib/uart_to_AXI_master_1.0/hdl/uart_to_AXI_master_v1_0.v b/socket/vivado_lib/uart_to_AXI_master_1.0/hdl/uart_to_AXI_master_v1_0.v new file mode 100644 index 0000000000000000000000000000000000000000..8baf1d3ac7e01acfa93a521ded72c233c3ff5404 --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_1.0/hdl/uart_to_AXI_master_v1_0.v @@ -0,0 +1,125 @@ + +`timescale 1 ns / 1 ps + + module uart_to_AXI_master_v1_0 # + ( + // Users to add parameters here + parameter integer CLK_SPEED = 10000000, + parameter integer UART_BAUD_RATE = 115200, + + // User parameters ends + // Do not modify the parameters beyond this line + + + // Parameters of Axi Master Bus Interface M00_AXI + parameter C_M00_AXI_TARGET_SLAVE_BASE_ADDR = 32'h40000000, + parameter integer C_M00_AXI_BURST_LEN = 16, + parameter integer C_M00_AXI_ID_WIDTH = 4, + parameter integer C_M00_AXI_ADDR_WIDTH = 32, + parameter integer C_M00_AXI_DATA_WIDTH = 32, + parameter integer C_M00_AXI_AWUSER_WIDTH = 4, + parameter integer C_M00_AXI_ARUSER_WIDTH = 4, + parameter integer C_M00_AXI_WUSER_WIDTH = 4, + parameter integer C_M00_AXI_RUSER_WIDTH = 4, + parameter integer C_M00_AXI_BUSER_WIDTH = 4 + ) + ( + // Users to add ports her + // User ports ends + // Do not modify the ports beyond this line + + + // Ports of Axi Master Bus Interface M00_AXI + input wire UART_RX, + output wire UART_TX, + input wire m00_axi_aclk, + input wire m00_axi_aresetn, + output wire [C_M00_AXI_ID_WIDTH-1 : 0] m00_axi_awid, + output wire [C_M00_AXI_ADDR_WIDTH-1 : 0] m00_axi_awaddr, + output wire [7 : 0] m00_axi_awlen, + output wire [2 : 0] m00_axi_awsize, + output wire [1 : 0] m00_axi_awburst, + output wire m00_axi_awlock, + output wire [3 : 0] m00_axi_awcache, + output wire [2 : 0] m00_axi_awprot, + output wire [3 : 0] m00_axi_awqos, + output wire [C_M00_AXI_AWUSER_WIDTH-1 : 0] m00_axi_awuser, + output wire m00_axi_awvalid, + input wire m00_axi_awready, + output wire [C_M00_AXI_DATA_WIDTH-1 : 0] m00_axi_wdata, + output wire [C_M00_AXI_DATA_WIDTH/8-1 : 0] m00_axi_wstrb, + output wire m00_axi_wlast, + output wire [C_M00_AXI_WUSER_WIDTH-1 : 0] m00_axi_wuser, + output wire m00_axi_wvalid, + input wire m00_axi_wready, + input wire [C_M00_AXI_ID_WIDTH-1 : 0] m00_axi_bid, + input wire [1 : 0] m00_axi_bresp, + input wire [C_M00_AXI_BUSER_WIDTH-1 : 0] m00_axi_buser, + input wire m00_axi_bvalid, + output wire m00_axi_bready, + output wire [C_M00_AXI_ID_WIDTH-1 : 0] m00_axi_arid, + output wire [C_M00_AXI_ADDR_WIDTH-1 : 0] m00_axi_araddr, + output wire [7 : 0] m00_axi_arlen, + output wire [2 : 0] m00_axi_arsize, + output wire [1 : 0] m00_axi_arburst, + output wire m00_axi_arlock, + output wire [3 : 0] m00_axi_arcache, + output wire [2 : 0] m00_axi_arprot, + output wire [3 : 0] m00_axi_arqos, + output wire [C_M00_AXI_ARUSER_WIDTH-1 : 0] m00_axi_aruser, + output wire m00_axi_arvalid, + input wire m00_axi_arready, + input wire [C_M00_AXI_ID_WIDTH-1 : 0] m00_axi_rid, + input wire [C_M00_AXI_DATA_WIDTH-1 : 0] m00_axi_rdata, + input wire [1 : 0] m00_axi_rresp, + input wire m00_axi_rlast, + input wire [C_M00_AXI_RUSER_WIDTH-1 : 0] m00_axi_ruser, + input wire m00_axi_rvalid, + output wire m00_axi_rready + ); +// Instantiation of Axi Bus Interface M00_AXI + + // Add user logic here + dbg_bridge #(.CLK_FREQ(CLK_SPEED), + .UART_SPEED(UART_BAUD_RATE), + .AXI_ID(4'd0), + .GPIO_ADDRESS(32'hf0000000), + .STS_ADDRESS(32'hf0000004)) + dbg_bridge_inst ( + .clk_i (m00_axi_aclk), + .rst_i (~m00_axi_aresetn), + .uart_rxd_i (UART_RX), + .uart_txd_o (UART_TX), + .gpio_inputs_i (), + .gpio_outputs_o (), + .mem_awready_i (m00_axi_awready), + .mem_wready_i (m00_axi_wready), + .mem_bvalid_i (m00_axi_bvalid), + .mem_bresp_i (m00_axi_bresp), + .mem_bid_i (m00_axi_bid), + .mem_arready_i (m00_axi_arready), + .mem_rvalid_i (m00_axi_rvalid), + .mem_rdata_i (m00_axi_rdata), + .mem_rresp_i (m00_axi_rresp), + .mem_rid_i (m00_axi_rid), + .mem_rlast_i (m00_axi_rlast), + .mem_awvalid_o (m00_axi_awvalid), + .mem_awaddr_o (m00_axi_awaddr), + .mem_awid_o (m00_axi_awid), + .mem_awlen_o (m00_axi_awlen), + .mem_awburst_o (m00_axi_awburst), + .mem_wvalid_o (m00_axi_wvalid), + .mem_wdata_o (m00_axi_wdata), + .mem_wstrb_o (m00_axi_wstrb), + .mem_wlast_o (m00_axi_wlast), + .mem_bready_o (m00_axi_bready), + .mem_arvalid_o (m00_axi_arvalid), + .mem_araddr_o (m00_axi_araddr), + .mem_arid_o (m00_axi_arid), + .mem_arlen_o (m00_axi_arlen), + .mem_arburst_o (m00_axi_arburst), + .mem_rready_o (m00_axi_rready) + ); + // User logic ends + + endmodule diff --git a/socket/vivado_lib/uart_to_AXI_master_1.0/hdl/uart_to_AXI_master_v1_0_M00_AXI.v b/socket/vivado_lib/uart_to_AXI_master_1.0/hdl/uart_to_AXI_master_v1_0_M00_AXI.v new file mode 100644 index 0000000000000000000000000000000000000000..ac7d45594a28cc78c48e2852cb8f6e1070be8813 --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_1.0/hdl/uart_to_AXI_master_v1_0_M00_AXI.v @@ -0,0 +1,907 @@ + +`timescale 1 ns / 1 ps + + module uart_to_AXI_master_v1_0_M00_AXI # + ( + // Users to add parameters here + + // User parameters ends + // Do not modify the parameters beyond this line + + // Base address of targeted slave + parameter C_M_TARGET_SLAVE_BASE_ADDR = 32'h40000000, + // Burst Length. Supports 1, 2, 4, 8, 16, 32, 64, 128, 256 burst lengths + parameter integer C_M_AXI_BURST_LEN = 16, + // Thread ID Width + parameter integer C_M_AXI_ID_WIDTH = 1, + // Width of Address Bus + parameter integer C_M_AXI_ADDR_WIDTH = 32, + // Width of Data Bus + parameter integer C_M_AXI_DATA_WIDTH = 32, + // Width of User Write Address Bus + parameter integer C_M_AXI_AWUSER_WIDTH = 0, + // Width of User Read Address Bus + parameter integer C_M_AXI_ARUSER_WIDTH = 0, + // Width of User Write Data Bus + parameter integer C_M_AXI_WUSER_WIDTH = 0, + // Width of User Read Data Bus + parameter integer C_M_AXI_RUSER_WIDTH = 0, + // Width of User Response Bus + parameter integer C_M_AXI_BUSER_WIDTH = 0 + ) + ( + // Users to add ports here + + // User ports ends + // Do not modify the ports beyond this line + + // Initiate AXI transactions + input wire INIT_AXI_TXN, + // Asserts when transaction is complete + output wire TXN_DONE, + // Asserts when ERROR is detected + output reg ERROR, + // Global Clock Signal. + input wire M_AXI_ACLK, + // Global Reset Singal. This Signal is Active Low + input wire M_AXI_ARESETN, + // Master Interface Write Address ID + output wire [C_M_AXI_ID_WIDTH-1 : 0] M_AXI_AWID, + // Master Interface Write Address + output wire [C_M_AXI_ADDR_WIDTH-1 : 0] M_AXI_AWADDR, + // Burst length. The burst length gives the exact number of transfers in a burst + output wire [7 : 0] M_AXI_AWLEN, + // Burst size. This signal indicates the size of each transfer in the burst + output wire [2 : 0] M_AXI_AWSIZE, + // Burst type. The burst type and the size information, + // determine how the address for each transfer within the burst is calculated. + output wire [1 : 0] M_AXI_AWBURST, + // Lock type. Provides additional information about the + // atomic characteristics of the transfer. + output wire M_AXI_AWLOCK, + // Memory type. This signal indicates how transactions + // are required to progress through a system. + output wire [3 : 0] M_AXI_AWCACHE, + // 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. + output wire [2 : 0] M_AXI_AWPROT, + // Quality of Service, QoS identifier sent for each write transaction. + output wire [3 : 0] M_AXI_AWQOS, + // Optional User-defined signal in the write address channel. + output wire [C_M_AXI_AWUSER_WIDTH-1 : 0] M_AXI_AWUSER, + // Write address valid. This signal indicates that + // the channel is signaling valid write address and control information. + output wire M_AXI_AWVALID, + // Write address ready. This signal indicates that + // the slave is ready to accept an address and associated control signals + input wire M_AXI_AWREADY, + // Master Interface Write Data. + output wire [C_M_AXI_DATA_WIDTH-1 : 0] M_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. + output wire [C_M_AXI_DATA_WIDTH/8-1 : 0] M_AXI_WSTRB, + // Write last. This signal indicates the last transfer in a write burst. + output wire M_AXI_WLAST, + // Optional User-defined signal in the write data channel. + output wire [C_M_AXI_WUSER_WIDTH-1 : 0] M_AXI_WUSER, + // Write valid. This signal indicates that valid write + // data and strobes are available + output wire M_AXI_WVALID, + // Write ready. This signal indicates that the slave + // can accept the write data. + input wire M_AXI_WREADY, + // Master Interface Write Response. + input wire [C_M_AXI_ID_WIDTH-1 : 0] M_AXI_BID, + // Write response. This signal indicates the status of the write transaction. + input wire [1 : 0] M_AXI_BRESP, + // Optional User-defined signal in the write response channel + input wire [C_M_AXI_BUSER_WIDTH-1 : 0] M_AXI_BUSER, + // Write response valid. This signal indicates that the + // channel is signaling a valid write response. + input wire M_AXI_BVALID, + // Response ready. This signal indicates that the master + // can accept a write response. + output wire M_AXI_BREADY, + // Master Interface Read Address. + output wire [C_M_AXI_ID_WIDTH-1 : 0] M_AXI_ARID, + // Read address. This signal indicates the initial + // address of a read burst transaction. + output wire [C_M_AXI_ADDR_WIDTH-1 : 0] M_AXI_ARADDR, + // Burst length. The burst length gives the exact number of transfers in a burst + output wire [7 : 0] M_AXI_ARLEN, + // Burst size. This signal indicates the size of each transfer in the burst + output wire [2 : 0] M_AXI_ARSIZE, + // Burst type. The burst type and the size information, + // determine how the address for each transfer within the burst is calculated. + output wire [1 : 0] M_AXI_ARBURST, + // Lock type. Provides additional information about the + // atomic characteristics of the transfer. + output wire M_AXI_ARLOCK, + // Memory type. This signal indicates how transactions + // are required to progress through a system. + output wire [3 : 0] M_AXI_ARCACHE, + // 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. + output wire [2 : 0] M_AXI_ARPROT, + // Quality of Service, QoS identifier sent for each read transaction + output wire [3 : 0] M_AXI_ARQOS, + // Optional User-defined signal in the read address channel. + output wire [C_M_AXI_ARUSER_WIDTH-1 : 0] M_AXI_ARUSER, + // Write address valid. This signal indicates that + // the channel is signaling valid read address and control information + output wire M_AXI_ARVALID, + // Read address ready. This signal indicates that + // the slave is ready to accept an address and associated control signals + input wire M_AXI_ARREADY, + // Read ID tag. This signal is the identification tag + // for the read data group of signals generated by the slave. + input wire [C_M_AXI_ID_WIDTH-1 : 0] M_AXI_RID, + // Master Read Data + input wire [C_M_AXI_DATA_WIDTH-1 : 0] M_AXI_RDATA, + // Read response. This signal indicates the status of the read transfer + input wire [1 : 0] M_AXI_RRESP, + // Read last. This signal indicates the last transfer in a read burst + input wire M_AXI_RLAST, + // Optional User-defined signal in the read address channel. + input wire [C_M_AXI_RUSER_WIDTH-1 : 0] M_AXI_RUSER, + // Read valid. This signal indicates that the channel + // is signaling the required read data. + input wire M_AXI_RVALID, + // Read ready. This signal indicates that the master can + // accept the read data and response information. + output wire M_AXI_RREADY + ); + + + // function called clogb2 that returns an integer which has the + //value of the ceiling of the log base 2 + + // 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 + + // C_TRANSACTIONS_NUM is the width of the index counter for + // number of write or read transaction. + localparam integer C_TRANSACTIONS_NUM = clogb2(C_M_AXI_BURST_LEN-1); + + // Burst length for transactions, in C_M_AXI_DATA_WIDTHs. + // Non-2^n lengths will eventually cause bursts across 4K address boundaries. + localparam integer C_MASTER_LENGTH = 12; + // total number of burst transfers is master length divided by burst length and burst size + localparam integer C_NO_BURSTS_REQ = C_MASTER_LENGTH-clogb2((C_M_AXI_BURST_LEN*C_M_AXI_DATA_WIDTH/8)-1); + // Example State machine to initialize counter, initialize write transactions, + // initialize read transactions and comparison of read data with the + // written data words. + parameter [1:0] IDLE = 2'b00, // This state initiates AXI4Lite transaction + // after the state machine changes state to INIT_WRITE + // when there is 0 to 1 transition on INIT_AXI_TXN + INIT_WRITE = 2'b01, // This state initializes write transaction, + // once writes are done, the state machine + // changes state to INIT_READ + INIT_READ = 2'b10, // This state initializes read transaction + // once reads are done, the state machine + // changes state to INIT_COMPARE + INIT_COMPARE = 2'b11; // This state issues the status of comparison + // of the written data with the read data + + reg [1:0] mst_exec_state; + + // AXI4LITE signals + //AXI4 internal temp signals + reg [C_M_AXI_ADDR_WIDTH-1 : 0] axi_awaddr; + reg axi_awvalid; + reg [C_M_AXI_DATA_WIDTH-1 : 0] axi_wdata; + reg axi_wlast; + reg axi_wvalid; + reg axi_bready; + reg [C_M_AXI_ADDR_WIDTH-1 : 0] axi_araddr; + reg axi_arvalid; + reg axi_rready; + //write beat count in a burst + reg [C_TRANSACTIONS_NUM : 0] write_index; + //read beat count in a burst + reg [C_TRANSACTIONS_NUM : 0] read_index; + //size of C_M_AXI_BURST_LEN length burst in bytes + wire [C_TRANSACTIONS_NUM+2 : 0] burst_size_bytes; + //The burst counters are used to track the number of burst transfers of C_M_AXI_BURST_LEN burst length needed to transfer 2^C_MASTER_LENGTH bytes of data. + reg [C_NO_BURSTS_REQ : 0] write_burst_counter; + reg [C_NO_BURSTS_REQ : 0] read_burst_counter; + reg start_single_burst_write; + reg start_single_burst_read; + reg writes_done; + reg reads_done; + reg error_reg; + reg compare_done; + reg read_mismatch; + reg burst_write_active; + reg burst_read_active; + reg [C_M_AXI_DATA_WIDTH-1 : 0] expected_rdata; + //Interface response error flags + wire write_resp_error; + wire read_resp_error; + wire wnext; + wire rnext; + reg init_txn_ff; + reg init_txn_ff2; + reg init_txn_edge; + wire init_txn_pulse; + + + // I/O Connections assignments + + //I/O Connections. Write Address (AW) + assign M_AXI_AWID = 'b0; + //The AXI address is a concatenation of the target base address + active offset range + assign M_AXI_AWADDR = C_M_TARGET_SLAVE_BASE_ADDR + axi_awaddr; + //Burst LENgth is number of transaction beats, minus 1 + assign M_AXI_AWLEN = C_M_AXI_BURST_LEN - 1; + //Size should be C_M_AXI_DATA_WIDTH, in 2^SIZE bytes, otherwise narrow bursts are used + assign M_AXI_AWSIZE = clogb2((C_M_AXI_DATA_WIDTH/8)-1); + //INCR burst type is usually used, except for keyhole bursts + assign M_AXI_AWBURST = 2'b01; + assign M_AXI_AWLOCK = 1'b0; + //Update value to 4'b0011 if coherent accesses to be used via the Zynq ACP port. Not Allocated, Modifiable, not Bufferable. Not Bufferable since this example is meant to test memory, not intermediate cache. + assign M_AXI_AWCACHE = 4'b0010; + assign M_AXI_AWPROT = 3'h0; + assign M_AXI_AWQOS = 4'h0; + assign M_AXI_AWUSER = 'b1; + assign M_AXI_AWVALID = axi_awvalid; + //Write Data(W) + assign M_AXI_WDATA = axi_wdata; + //All bursts are complete and aligned in this example + assign M_AXI_WSTRB = {(C_M_AXI_DATA_WIDTH/8){1'b1}}; + assign M_AXI_WLAST = axi_wlast; + assign M_AXI_WUSER = 'b0; + assign M_AXI_WVALID = axi_wvalid; + //Write Response (B) + assign M_AXI_BREADY = axi_bready; + //Read Address (AR) + assign M_AXI_ARID = 'b0; + assign M_AXI_ARADDR = C_M_TARGET_SLAVE_BASE_ADDR + axi_araddr; + //Burst LENgth is number of transaction beats, minus 1 + assign M_AXI_ARLEN = C_M_AXI_BURST_LEN - 1; + //Size should be C_M_AXI_DATA_WIDTH, in 2^n bytes, otherwise narrow bursts are used + assign M_AXI_ARSIZE = clogb2((C_M_AXI_DATA_WIDTH/8)-1); + //INCR burst type is usually used, except for keyhole bursts + assign M_AXI_ARBURST = 2'b01; + assign M_AXI_ARLOCK = 1'b0; + //Update value to 4'b0011 if coherent accesses to be used via the Zynq ACP port. Not Allocated, Modifiable, not Bufferable. Not Bufferable since this example is meant to test memory, not intermediate cache. + assign M_AXI_ARCACHE = 4'b0010; + assign M_AXI_ARPROT = 3'h0; + assign M_AXI_ARQOS = 4'h0; + assign M_AXI_ARUSER = 'b1; + assign M_AXI_ARVALID = axi_arvalid; + //Read and Read Response (R) + assign M_AXI_RREADY = axi_rready; + //Example design I/O + assign TXN_DONE = compare_done; + //Burst size in bytes + assign burst_size_bytes = C_M_AXI_BURST_LEN * C_M_AXI_DATA_WIDTH/8; + assign init_txn_pulse = (!init_txn_ff2) && init_txn_ff; + + + //Generate a pulse to initiate AXI transaction. + always @(posedge M_AXI_ACLK) + begin + // Initiates AXI transaction delay + if (M_AXI_ARESETN == 0 ) + begin + init_txn_ff <= 1'b0; + init_txn_ff2 <= 1'b0; + end + else + begin + init_txn_ff <= INIT_AXI_TXN; + init_txn_ff2 <= init_txn_ff; + end + end + + + //-------------------- + //Write Address Channel + //-------------------- + + // The purpose of the write address channel is to request the address and + // command information for the entire transaction. It is a single beat + // of information. + + // The AXI4 Write address channel in this example will continue to initiate + // write commands as fast as it is allowed by the slave/interconnect. + // The address will be incremented on each accepted address transaction, + // by burst_size_byte to point to the next address. + + always @(posedge M_AXI_ACLK) + begin + + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) + begin + axi_awvalid <= 1'b0; + end + // If previously not valid , start next transaction + else if (~axi_awvalid && start_single_burst_write) + begin + axi_awvalid <= 1'b1; + end + /* Once asserted, VALIDs cannot be deasserted, so axi_awvalid + must wait until transaction is accepted */ + else if (M_AXI_AWREADY && axi_awvalid) + begin + axi_awvalid <= 1'b0; + end + else + axi_awvalid <= axi_awvalid; + end + + + // Next address after AWREADY indicates previous address acceptance + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + begin + axi_awaddr <= 'b0; + end + else if (M_AXI_AWREADY && axi_awvalid) + begin + axi_awaddr <= axi_awaddr + burst_size_bytes; + end + else + axi_awaddr <= axi_awaddr; + end + + + //-------------------- + //Write Data Channel + //-------------------- + + //The write data will continually try to push write data across the interface. + + //The amount of data accepted will depend on the AXI slave and the AXI + //Interconnect settings, such as if there are FIFOs enabled in interconnect. + + //Note that there is no explicit timing relationship to the write address channel. + //The write channel has its own throttling flag, separate from the AW channel. + + //Synchronization between the channels must be determined by the user. + + //The simpliest but lowest performance would be to only issue one address write + //and write data burst at a time. + + //In this example they are kept in sync by using the same address increment + //and burst sizes. Then the AW and W channels have their transactions measured + //with threshold counters as part of the user logic, to make sure neither + //channel gets too far ahead of each other. + + //Forward movement occurs when the write channel is valid and ready + + assign wnext = M_AXI_WREADY & axi_wvalid; + + // WVALID logic, similar to the axi_awvalid always block above + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) + begin + axi_wvalid <= 1'b0; + end + // If previously not valid, start next transaction + else if (~axi_wvalid && start_single_burst_write) + begin + axi_wvalid <= 1'b1; + end + /* If WREADY and too many writes, throttle WVALID + Once asserted, VALIDs cannot be deasserted, so WVALID + must wait until burst is complete with WLAST */ + else if (wnext && axi_wlast) + axi_wvalid <= 1'b0; + else + axi_wvalid <= axi_wvalid; + end + + + //WLAST generation on the MSB of a counter underflow + // WVALID logic, similar to the axi_awvalid always block above + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) + begin + axi_wlast <= 1'b0; + end + // axi_wlast is asserted when the write index + // count reaches the penultimate count to synchronize + // with the last write data when write_index is b1111 + // else if (&(write_index[C_TRANSACTIONS_NUM-1:1])&& ~write_index[0] && wnext) + else if (((write_index == C_M_AXI_BURST_LEN-2 && C_M_AXI_BURST_LEN >= 2) && wnext) || (C_M_AXI_BURST_LEN == 1 )) + begin + axi_wlast <= 1'b1; + end + // Deassrt axi_wlast when the last write data has been + // accepted by the slave with a valid response + else if (wnext) + axi_wlast <= 1'b0; + else if (axi_wlast && C_M_AXI_BURST_LEN == 1) + axi_wlast <= 1'b0; + else + axi_wlast <= axi_wlast; + end + + + /* Burst length counter. Uses extra counter register bit to indicate terminal + count to reduce decode logic */ + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 || start_single_burst_write == 1'b1) + begin + write_index <= 0; + end + else if (wnext && (write_index != C_M_AXI_BURST_LEN-1)) + begin + write_index <= write_index + 1; + end + else + write_index <= write_index; + end + + + /* Write Data Generator + Data pattern is only a simple incrementing count from 0 for each burst */ + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + axi_wdata <= 'b1; + //else if (wnext && axi_wlast) + // axi_wdata <= 'b0; + else if (wnext) + axi_wdata <= axi_wdata + 1; + else + axi_wdata <= axi_wdata; + end + + + //---------------------------- + //Write Response (B) Channel + //---------------------------- + + //The write response channel provides feedback that the write has committed + //to memory. BREADY will occur when all of the data and the write address + //has arrived and been accepted by the slave. + + //The write issuance (number of outstanding write addresses) is started by + //the Address Write transfer, and is completed by a BREADY/BRESP. + + //While negating BREADY will eventually throttle the AWREADY signal, + //it is best not to throttle the whole data channel this way. + + //The BRESP bit [1] is used indicate any errors from the interconnect or + //slave for the entire write burst. This example will capture the error + //into the ERROR output. + + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) + begin + axi_bready <= 1'b0; + end + // accept/acknowledge bresp with axi_bready by the master + // when M_AXI_BVALID is asserted by slave + else if (M_AXI_BVALID && ~axi_bready) + begin + axi_bready <= 1'b1; + end + // deassert after one clock cycle + else if (axi_bready) + begin + axi_bready <= 1'b0; + end + // retain the previous value + else + axi_bready <= axi_bready; + end + + + //Flag any write response errors + assign write_resp_error = axi_bready & M_AXI_BVALID & M_AXI_BRESP[1]; + + + //---------------------------- + //Read Address Channel + //---------------------------- + + //The Read Address Channel (AW) provides a similar function to the + //Write Address channel- to provide the tranfer qualifiers for the burst. + + //In this example, the read address increments in the same + //manner as the write address channel. + + always @(posedge M_AXI_ACLK) + begin + + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) + begin + axi_arvalid <= 1'b0; + end + // If previously not valid , start next transaction + else if (~axi_arvalid && start_single_burst_read) + begin + axi_arvalid <= 1'b1; + end + else if (M_AXI_ARREADY && axi_arvalid) + begin + axi_arvalid <= 1'b0; + end + else + axi_arvalid <= axi_arvalid; + end + + + // Next address after ARREADY indicates previous address acceptance + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + begin + axi_araddr <= 'b0; + end + else if (M_AXI_ARREADY && axi_arvalid) + begin + axi_araddr <= axi_araddr + burst_size_bytes; + end + else + axi_araddr <= axi_araddr; + end + + + //-------------------------------- + //Read Data (and Response) Channel + //-------------------------------- + + // Forward movement occurs when the channel is valid and ready + assign rnext = M_AXI_RVALID && axi_rready; + + + // Burst length counter. Uses extra counter register bit to indicate + // terminal count to reduce decode logic + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 || start_single_burst_read) + begin + read_index <= 0; + end + else if (rnext && (read_index != C_M_AXI_BURST_LEN-1)) + begin + read_index <= read_index + 1; + end + else + read_index <= read_index; + end + + + /* + The Read Data channel returns the results of the read request + + In this example the data checker is always able to accept + more data, so no need to throttle the RREADY signal + */ + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) + begin + axi_rready <= 1'b0; + end + // accept/acknowledge rdata/rresp with axi_rready by the master + // when M_AXI_RVALID is asserted by slave + else if (M_AXI_RVALID) + begin + if (M_AXI_RLAST && axi_rready) + begin + axi_rready <= 1'b0; + end + else + begin + axi_rready <= 1'b1; + end + end + // retain the previous value + end + + //Check received read data against data generator + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + begin + read_mismatch <= 1'b0; + end + //Only check data when RVALID is active + else if (rnext && (M_AXI_RDATA != expected_rdata)) + begin + read_mismatch <= 1'b1; + end + else + read_mismatch <= 1'b0; + end + + //Flag any read response errors + assign read_resp_error = axi_rready & M_AXI_RVALID & M_AXI_RRESP[1]; + + + //---------------------------------------- + //Example design read check data generator + //----------------------------------------- + + //Generate expected read data to check against actual read data + + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1)// || M_AXI_RLAST) + expected_rdata <= 'b1; + else if (M_AXI_RVALID && axi_rready) + expected_rdata <= expected_rdata + 1; + else + expected_rdata <= expected_rdata; + end + + + //---------------------------------- + //Example design error register + //---------------------------------- + + //Register and hold any data mismatches, or read/write interface errors + + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + begin + error_reg <= 1'b0; + end + else if (read_mismatch || write_resp_error || read_resp_error) + begin + error_reg <= 1'b1; + end + else + error_reg <= error_reg; + end + + + //-------------------------------- + //Example design throttling + //-------------------------------- + + // For maximum port throughput, this user example code will try to allow + // each channel to run as independently and as quickly as possible. + + // However, there are times when the flow of data needs to be throtted by + // the user application. This example application requires that data is + // not read before it is written and that the write channels do not + // advance beyond an arbitrary threshold (say to prevent an + // overrun of the current read address by the write address). + + // From AXI4 Specification, 13.13.1: "If a master requires ordering between + // read and write transactions, it must ensure that a response is received + // for the previous transaction before issuing the next transaction." + + // This example accomplishes this user application throttling through: + // -Reads wait for writes to fully complete + // -Address writes wait when not read + issued transaction counts pass + // a parameterized threshold + // -Writes wait when a not read + active data burst count pass + // a parameterized threshold + + // write_burst_counter counter keeps track with the number of burst transaction initiated + // against the number of burst transactions the master needs to initiate + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) + begin + write_burst_counter <= 'b0; + end + else if (M_AXI_AWREADY && axi_awvalid) + begin + if (write_burst_counter[C_NO_BURSTS_REQ] == 1'b0) + begin + write_burst_counter <= write_burst_counter + 1'b1; + //write_burst_counter[C_NO_BURSTS_REQ] <= 1'b1; + end + end + else + write_burst_counter <= write_burst_counter; + end + + // read_burst_counter counter keeps track with the number of burst transaction initiated + // against the number of burst transactions the master needs to initiate + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + begin + read_burst_counter <= 'b0; + end + else if (M_AXI_ARREADY && axi_arvalid) + begin + if (read_burst_counter[C_NO_BURSTS_REQ] == 1'b0) + begin + read_burst_counter <= read_burst_counter + 1'b1; + //read_burst_counter[C_NO_BURSTS_REQ] <= 1'b1; + end + end + else + read_burst_counter <= read_burst_counter; + end + + + //implement master command interface state machine + + always @ ( posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 1'b0 ) + begin + // reset condition + // All the signals are assigned default values under reset condition + mst_exec_state <= IDLE; + start_single_burst_write <= 1'b0; + start_single_burst_read <= 1'b0; + compare_done <= 1'b0; + ERROR <= 1'b0; + end + else + begin + + // state transition + case (mst_exec_state) + + IDLE: + // This state is responsible to wait for user defined C_M_START_COUNT + // number of clock cycles. + if ( init_txn_pulse == 1'b1) + begin + mst_exec_state <= INIT_WRITE; + ERROR <= 1'b0; + compare_done <= 1'b0; + end + else + begin + mst_exec_state <= IDLE; + end + + INIT_WRITE: + // This state is responsible to issue start_single_write pulse to + // initiate a write transaction. Write transactions will be + // issued until burst_write_active signal is asserted. + // write controller + if (writes_done) + begin + mst_exec_state <= INIT_READ;// + end + else + begin + mst_exec_state <= INIT_WRITE; + + if (~axi_awvalid && ~start_single_burst_write && ~burst_write_active) + begin + start_single_burst_write <= 1'b1; + end + else + begin + start_single_burst_write <= 1'b0; //Negate to generate a pulse + end + end + + INIT_READ: + // This state is responsible to issue start_single_read pulse to + // initiate a read transaction. Read transactions will be + // issued until burst_read_active signal is asserted. + // read controller + if (reads_done) + begin + mst_exec_state <= INIT_COMPARE; + end + else + begin + mst_exec_state <= INIT_READ; + + if (~axi_arvalid && ~burst_read_active && ~start_single_burst_read) + begin + start_single_burst_read <= 1'b1; + end + else + begin + start_single_burst_read <= 1'b0; //Negate to generate a pulse + end + end + + INIT_COMPARE: + // This state is responsible to issue the state of comparison + // of written data with the read data. If no error flags are set, + // compare_done signal will be asseted to indicate success. + //if (~error_reg) + begin + ERROR <= error_reg; + mst_exec_state <= IDLE; + compare_done <= 1'b1; + end + default : + begin + mst_exec_state <= IDLE; + end + endcase + end + end //MASTER_EXECUTION_PROC + + + // burst_write_active signal is asserted when there is a burst write transaction + // is initiated by the assertion of start_single_burst_write. burst_write_active + // signal remains asserted until the burst write is accepted by the slave + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + burst_write_active <= 1'b0; + + //The burst_write_active is asserted when a write burst transaction is initiated + else if (start_single_burst_write) + burst_write_active <= 1'b1; + else if (M_AXI_BVALID && axi_bready) + burst_write_active <= 0; + end + + // Check for last write completion. + + // This logic is to qualify the last write count with the final write + // response. This demonstrates how to confirm that a write has been + // committed. + + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + writes_done <= 1'b0; + + //The writes_done should be associated with a bready response + //else if (M_AXI_BVALID && axi_bready && (write_burst_counter == {(C_NO_BURSTS_REQ-1){1}}) && axi_wlast) + else if (M_AXI_BVALID && (write_burst_counter[C_NO_BURSTS_REQ]) && axi_bready) + writes_done <= 1'b1; + else + writes_done <= writes_done; + end + + // burst_read_active signal is asserted when there is a burst write transaction + // is initiated by the assertion of start_single_burst_write. start_single_burst_read + // signal remains asserted until the burst read is accepted by the master + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + burst_read_active <= 1'b0; + + //The burst_write_active is asserted when a write burst transaction is initiated + else if (start_single_burst_read) + burst_read_active <= 1'b1; + else if (M_AXI_RVALID && axi_rready && M_AXI_RLAST) + burst_read_active <= 0; + end + + + // Check for last read completion. + + // This logic is to qualify the last read count with the final read + // response. This demonstrates how to confirm that a read has been + // committed. + + always @(posedge M_AXI_ACLK) + begin + if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) + reads_done <= 1'b0; + + //The reads_done should be associated with a rready response + //else if (M_AXI_BVALID && axi_bready && (write_burst_counter == {(C_NO_BURSTS_REQ-1){1}}) && axi_wlast) + else if (M_AXI_RVALID && axi_rready && (read_index == C_M_AXI_BURST_LEN-1) && (read_burst_counter[C_NO_BURSTS_REQ])) + reads_done <= 1'b1; + else + reads_done <= reads_done; + end + + // Add user logic here + + // User logic ends + + endmodule diff --git a/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge.v b/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge.v new file mode 100644 index 0000000000000000000000000000000000000000..c410c75ded4129cdb5eb8d3c5674aa0012438ad1 --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge.v @@ -0,0 +1,623 @@ +//----------------------------------------------------------------- +// UART -> AXI Debug Bridge +// V1.0 +// Ultra-Embedded.com +// Copyright 2017-2019 +// +// Email: admin@ultra-embedded.com +// +// License: LGPL +//----------------------------------------------------------------- +// +// This source file may be used and distributed without +// restriction provided that this copyright statement is not +// removed from the file and that any derivative work contains +// the original copyright notice and the associated disclaimer. +// +// This source file is free software; you can redistribute it +// and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; +// either version 2.1 of the License, or (at your option) any +// later version. +// +// This source is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the GNU Lesser General Public License for more +// details. +// +// You should have received a copy of the GNU Lesser General +// Public License along with this source; if not, write to the +// Free Software Foundation, Inc., 59 Temple Place, Suite 330, +// Boston, MA 02111-1307 USA +//----------------------------------------------------------------- + +//----------------------------------------------------------------- +// Generated File +//----------------------------------------------------------------- + +module dbg_bridge +//----------------------------------------------------------------- +// Params +//----------------------------------------------------------------- +#( + parameter CLK_FREQ = 24000000 + ,parameter UART_SPEED = 115200 + ,parameter AXI_ID = 4'd0 + ,parameter GPIO_ADDRESS = 32'hf0000000 + ,parameter STS_ADDRESS = 32'hf0000004 +) +//----------------------------------------------------------------- +// Ports +//----------------------------------------------------------------- +( + // Inputs + input clk_i + ,input rst_i + ,input uart_rxd_i + ,input mem_awready_i + ,input mem_wready_i + ,input mem_bvalid_i + ,input [ 1:0] mem_bresp_i + ,input [ 3:0] mem_bid_i + ,input mem_arready_i + ,input mem_rvalid_i + ,input [ 31:0] mem_rdata_i + ,input [ 1:0] mem_rresp_i + ,input [ 3:0] mem_rid_i + ,input mem_rlast_i + ,input [ 31:0] gpio_inputs_i + + // Outputs + ,output uart_txd_o + ,output mem_awvalid_o + ,output [ 31:0] mem_awaddr_o + ,output [ 3:0] mem_awid_o + ,output [ 7:0] mem_awlen_o + ,output [ 1:0] mem_awburst_o + ,output mem_wvalid_o + ,output [ 31:0] mem_wdata_o + ,output [ 3:0] mem_wstrb_o + ,output mem_wlast_o + ,output mem_bready_o + ,output mem_arvalid_o + ,output [ 31:0] mem_araddr_o + ,output [ 3:0] mem_arid_o + ,output [ 7:0] mem_arlen_o + ,output [ 1:0] mem_arburst_o + ,output mem_rready_o + ,output [ 31:0] gpio_outputs_o +); + + + +//----------------------------------------------------------------- +// Defines +//----------------------------------------------------------------- +localparam REQ_WRITE = 8'h10; +localparam REQ_READ = 8'h11; + +`define STATE_W 4 +`define STATE_R 3:0 +localparam STATE_IDLE = 4'd0; +localparam STATE_LEN = 4'd2; +localparam STATE_ADDR0 = 4'd3; +localparam STATE_ADDR1 = 4'd4; +localparam STATE_ADDR2 = 4'd5; +localparam STATE_ADDR3 = 4'd6; +localparam STATE_WRITE = 4'd7; +localparam STATE_READ = 4'd8; +localparam STATE_DATA0 = 4'd9; +localparam STATE_DATA1 = 4'd10; +localparam STATE_DATA2 = 4'd11; +localparam STATE_DATA3 = 4'd12; + +//----------------------------------------------------------------- +// Wires / Regs +//----------------------------------------------------------------- +wire uart_wr_w; +wire [7:0] uart_wr_data_w; +wire uart_wr_busy_w; + +wire uart_rd_w; +wire [7:0] uart_rd_data_w; +wire uart_rd_valid_w; + +wire uart_rx_error_w; + +wire tx_valid_w; +wire [7:0] tx_data_w; +wire tx_accept_w; +wire read_skip_w; + +wire rx_valid_w; +wire [7:0] rx_data_w; +wire rx_accept_w; + +reg [31:0] mem_addr_q; +reg mem_busy_q; +reg mem_wr_q; + +reg [7:0] len_q; + +// Byte Index +reg [1:0] data_idx_q; + +// Word storage +reg [31:0] data_q; + +wire magic_addr_w = (mem_addr_q == GPIO_ADDRESS || mem_addr_q == STS_ADDRESS); + +//----------------------------------------------------------------- +// UART core +//----------------------------------------------------------------- +dbg_bridge_uart +#( .UART_DIVISOR_W(32) ) +u_uart +( + .clk_i(clk_i), + .rst_i(rst_i), + + // Control + .bit_div_i((CLK_FREQ / UART_SPEED) - 1), + .stop_bits_i(1'b0), // 0 = 1, 1 = 2 + + // Transmit + .wr_i(uart_wr_w), + .data_i(uart_wr_data_w), + .tx_busy_o(uart_wr_busy_w), + + // Receive + .rd_i(uart_rd_w), + .data_o(uart_rd_data_w), + .rx_ready_o(uart_rd_valid_w), + + .rx_err_o(uart_rx_error_w), + + // UART pins + .rxd_i(uart_rxd_i), + .txd_o(uart_txd_o) +); + +//----------------------------------------------------------------- +// Output FIFO +//----------------------------------------------------------------- +wire uart_tx_pop_w = ~uart_wr_busy_w; + +dbg_bridge_fifo +#( + .WIDTH(8), + .DEPTH(8), + .ADDR_W(3) +) +u_fifo_tx +( + .clk_i(clk_i), + .rst_i(rst_i), + + // In + .push_i(tx_valid_w), + .data_in_i(tx_data_w), + .accept_o(tx_accept_w), + + // Out + .pop_i(uart_tx_pop_w), + .data_out_o(uart_wr_data_w), + .valid_o(uart_wr_w) +); + +//----------------------------------------------------------------- +// Input FIFO +//----------------------------------------------------------------- +dbg_bridge_fifo +#( + .WIDTH(8), + .DEPTH(8), + .ADDR_W(3) +) +u_fifo_rx +( + .clk_i(clk_i), + .rst_i(rst_i), + + // In + .push_i(uart_rd_valid_w), + .data_in_i(uart_rd_data_w), + .accept_o(uart_rd_w), + + // Out + .pop_i(rx_accept_w), + .data_out_o(rx_data_w), + .valid_o(rx_valid_w) +); + +//----------------------------------------------------------------- +// States +//----------------------------------------------------------------- +reg [`STATE_R] state_q; +reg [`STATE_R] next_state_r; + +always @ * +begin + next_state_r = state_q; + + case (next_state_r) + //------------------------------------------------------------- + // IDLE: + //------------------------------------------------------------- + STATE_IDLE: + begin + if (rx_valid_w) + begin + case (rx_data_w) + REQ_WRITE, + REQ_READ: + next_state_r = STATE_LEN; + default: + ; + endcase + end + end + //----------------------------------------- + // STATE_LEN + //----------------------------------------- + STATE_LEN : + begin + if (rx_valid_w) + next_state_r = STATE_ADDR0; + end + //----------------------------------------- + // STATE_ADDR + //----------------------------------------- + STATE_ADDR0 : if (rx_valid_w) next_state_r = STATE_ADDR1; + STATE_ADDR1 : if (rx_valid_w) next_state_r = STATE_ADDR2; + STATE_ADDR2 : if (rx_valid_w) next_state_r = STATE_ADDR3; + STATE_ADDR3 : + begin + if (rx_valid_w && mem_wr_q) + next_state_r = STATE_WRITE; + else if (rx_valid_w) + next_state_r = STATE_READ; + end + //----------------------------------------- + // STATE_WRITE + //----------------------------------------- + STATE_WRITE : + begin + if (len_q == 8'b0 && (mem_bvalid_i || magic_addr_w)) + next_state_r = STATE_IDLE; + else + next_state_r = STATE_WRITE; + end + //----------------------------------------- + // STATE_READ + //----------------------------------------- + STATE_READ : + begin + // Data ready + if (mem_rvalid_i || magic_addr_w) + next_state_r = STATE_DATA0; + end + //----------------------------------------- + // STATE_DATA + //----------------------------------------- + STATE_DATA0 : + begin + if (read_skip_w) + next_state_r = STATE_DATA1; + else if (tx_accept_w && (len_q == 8'b0)) + next_state_r = STATE_IDLE; + else if (tx_accept_w) + next_state_r = STATE_DATA1; + end + STATE_DATA1 : + begin + if (read_skip_w) + next_state_r = STATE_DATA2; + else if (tx_accept_w && (len_q == 8'b0)) + next_state_r = STATE_IDLE; + else if (tx_accept_w) + next_state_r = STATE_DATA2; + end + STATE_DATA2 : + begin + if (read_skip_w) + next_state_r = STATE_DATA3; + else if (tx_accept_w && (len_q == 8'b0)) + next_state_r = STATE_IDLE; + else if (tx_accept_w) + next_state_r = STATE_DATA3; + end + STATE_DATA3 : + begin + if (tx_accept_w && (len_q != 8'b0)) + next_state_r = STATE_READ; + else if (tx_accept_w) + next_state_r = STATE_IDLE; + end + default: + ; + endcase +end + +// State storage +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + state_q <= STATE_IDLE; +else + state_q <= next_state_r; + +//----------------------------------------------------------------- +// RD/WR to and from UART +//----------------------------------------------------------------- + +// Write to UART Tx buffer in the following states +assign tx_valid_w = ((state_q == STATE_DATA0) | + (state_q == STATE_DATA1) | + (state_q == STATE_DATA2) | + (state_q == STATE_DATA3)) && !read_skip_w; + +// Accept data in the following states +assign rx_accept_w = (state_q == STATE_IDLE) | + (state_q == STATE_LEN) | + (state_q == STATE_ADDR0) | + (state_q == STATE_ADDR1) | + (state_q == STATE_ADDR2) | + (state_q == STATE_ADDR3) | + (state_q == STATE_WRITE && !mem_busy_q); + +//----------------------------------------------------------------- +// Capture length +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + len_q <= 8'd0; +else if (state_q == STATE_LEN && rx_valid_w) + len_q[7:0] <= rx_data_w; +else if (state_q == STATE_WRITE && rx_valid_w && !mem_busy_q) + len_q <= len_q - 8'd1; +else if (state_q == STATE_READ && ((mem_busy_q && mem_rvalid_i) || magic_addr_w)) + len_q <= len_q - 8'd1; +else if (((state_q == STATE_DATA0) || (state_q == STATE_DATA1) || (state_q == STATE_DATA2)) && (tx_accept_w && !read_skip_w)) + len_q <= len_q - 8'd1; + +//----------------------------------------------------------------- +// Capture addr +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + mem_addr_q <= 'd0; +else if (state_q == STATE_ADDR0 && rx_valid_w) + mem_addr_q[31:24] <= rx_data_w; +else if (state_q == STATE_ADDR1 && rx_valid_w) + mem_addr_q[23:16] <= rx_data_w; +else if (state_q == STATE_ADDR2 && rx_valid_w) + mem_addr_q[15:8] <= rx_data_w; +else if (state_q == STATE_ADDR3 && rx_valid_w) + mem_addr_q[7:0] <= rx_data_w; +// Address increment on every access issued +else if (state_q == STATE_WRITE && (mem_busy_q && mem_bvalid_i)) + mem_addr_q <= {mem_addr_q[31:2], 2'b0} + 'd4; +else if (state_q == STATE_READ && (mem_busy_q && mem_rvalid_i)) + mem_addr_q <= {mem_addr_q[31:2], 2'b0} + 'd4; + +//----------------------------------------------------------------- +// Data Index +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + data_idx_q <= 2'b0; +else if (state_q == STATE_ADDR3) + data_idx_q <= rx_data_w[1:0]; +else if (state_q == STATE_WRITE && rx_valid_w && !mem_busy_q) + data_idx_q <= data_idx_q + 2'd1; +else if (((state_q == STATE_DATA0) || (state_q == STATE_DATA1) || (state_q == STATE_DATA2)) && tx_accept_w && (data_idx_q != 2'b0)) + data_idx_q <= data_idx_q - 2'd1; + +assign read_skip_w = (data_idx_q != 2'b0); + +//----------------------------------------------------------------- +// Data Sample +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + data_q <= 32'b0; +// Write to memory +else if (state_q == STATE_WRITE && rx_valid_w && !mem_busy_q) +begin + case (data_idx_q) + 2'd0: data_q[7:0] <= rx_data_w; + 2'd1: data_q[15:8] <= rx_data_w; + 2'd2: data_q[23:16] <= rx_data_w; + 2'd3: data_q[31:24] <= rx_data_w; + endcase +end +// Read from GPIO Input? +else if (state_q == STATE_READ && mem_addr_q == GPIO_ADDRESS) +begin + data_q <= {{(32-32){1'b0}}, gpio_inputs_i}; +end +// Read from status register? +else if (state_q == STATE_READ && mem_addr_q == STS_ADDRESS) + data_q <= {16'hcafe, 15'd0, mem_busy_q}; +// Read from memory +else if (state_q == STATE_READ && mem_rvalid_i) + data_q <= mem_rdata_i; +// Shift data out (read response -> UART) +else if (((state_q == STATE_DATA0) || (state_q == STATE_DATA1) || (state_q == STATE_DATA2)) && (tx_accept_w || read_skip_w)) + data_q <= {8'b0, data_q[31:8]}; + +assign tx_data_w = data_q[7:0]; + +assign mem_wdata_o = data_q; + +//----------------------------------------------------------------- +// AXI: Write Request +//----------------------------------------------------------------- +reg mem_awvalid_q; +reg mem_awvalid_r; + +reg mem_wvalid_q; +reg mem_wvalid_r; + +always @ * +begin + mem_awvalid_r = 1'b0; + mem_wvalid_r = 1'b0; + + // Hold + if (mem_awvalid_o && !mem_awready_i) + mem_awvalid_r = mem_awvalid_q; + else if (mem_awvalid_o) + mem_awvalid_r = 1'b0; + // Every 4th byte, issue bus access + else if (state_q == STATE_WRITE && rx_valid_w && (data_idx_q == 2'd3 || len_q == 1)) + mem_awvalid_r = !magic_addr_w; + + // Hold + if (mem_wvalid_o && !mem_wready_i) + mem_wvalid_r = mem_wvalid_q; + else if (mem_wvalid_o) + mem_wvalid_r = 1'b0; + // Every 4th byte, issue bus access + else if (state_q == STATE_WRITE && rx_valid_w && (data_idx_q == 2'd3 || len_q == 1)) + mem_wvalid_r = !magic_addr_w; +end + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) +begin + mem_awvalid_q <= 1'b0; + mem_wvalid_q <= 1'b0; +end +else +begin + mem_awvalid_q <= mem_awvalid_r; + mem_wvalid_q <= mem_wvalid_r; +end + +assign mem_awvalid_o = mem_awvalid_q; +assign mem_wvalid_o = mem_wvalid_q; +assign mem_awaddr_o = {mem_addr_q[31:2], 2'b0}; +assign mem_awid_o = AXI_ID; +assign mem_awlen_o = 8'b0; +assign mem_awburst_o = 2'b01; +assign mem_wlast_o = 1'b1; + +assign mem_bready_o = 1'b1; + +//----------------------------------------------------------------- +// AXI: Read Request +//----------------------------------------------------------------- +reg mem_arvalid_q; +reg mem_arvalid_r; + +always @ * +begin + mem_arvalid_r = 1'b0; + + // Hold + if (mem_arvalid_o && !mem_arready_i) + mem_arvalid_r = mem_arvalid_q; + else if (mem_arvalid_o) + mem_arvalid_r = 1'b0; + else if (state_q == STATE_READ && !mem_busy_q) + mem_arvalid_r = !magic_addr_w; +end + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + mem_arvalid_q <= 1'b0; +else + mem_arvalid_q <= mem_arvalid_r; + +assign mem_arvalid_o = mem_arvalid_q; +assign mem_araddr_o = {mem_addr_q[31:2], 2'b0}; +assign mem_arid_o = AXI_ID; +assign mem_arlen_o = 8'b0; +assign mem_arburst_o = 2'b01; + +assign mem_rready_o = 1'b1; + +//----------------------------------------------------------------- +// Write mask +//----------------------------------------------------------------- +reg [3:0] mem_sel_q; +reg [3:0] mem_sel_r; + +always @ * +begin + mem_sel_r = 4'b1111; + + case (data_idx_q) + 2'd0: mem_sel_r = 4'b0001; + 2'd1: mem_sel_r = 4'b0011; + 2'd2: mem_sel_r = 4'b0111; + 2'd3: mem_sel_r = 4'b1111; + endcase + + case (mem_addr_q[1:0]) + 2'd0: mem_sel_r = mem_sel_r & 4'b1111; + 2'd1: mem_sel_r = mem_sel_r & 4'b1110; + 2'd2: mem_sel_r = mem_sel_r & 4'b1100; + 2'd3: mem_sel_r = mem_sel_r & 4'b1000; + endcase +end + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + mem_sel_q <= 4'b0; +// Idle - reset for read requests +else if (state_q == STATE_IDLE) + mem_sel_q <= 4'b1111; +// Every 4th byte, issue bus access +else if (state_q == STATE_WRITE && rx_valid_w && (data_idx_q == 2'd3 || len_q == 8'd1)) + mem_sel_q <= mem_sel_r; + +assign mem_wstrb_o = mem_sel_q; + +//----------------------------------------------------------------- +// Write enable +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + mem_wr_q <= 1'b0; +else if (state_q == STATE_IDLE && rx_valid_w) + mem_wr_q <= (rx_data_w == REQ_WRITE); + +//----------------------------------------------------------------- +// Access in progress +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i == 1'b1) + mem_busy_q <= 1'b0; +else if (mem_arvalid_o || mem_awvalid_o) + mem_busy_q <= 1'b1; +else if (mem_bvalid_i || mem_rvalid_i) + mem_busy_q <= 1'b0; + +//----------------------------------------------------------------- +// GPIO Outputs +//----------------------------------------------------------------- +reg gpio_wr_q; +reg [31:0] gpio_output_q; + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + gpio_wr_q <= 1'b0; +else if (mem_addr_q == GPIO_ADDRESS && state_q == STATE_WRITE && rx_valid_w && (data_idx_q == 2'd3 || len_q == 1)) + gpio_wr_q <= 1'b1; +else + gpio_wr_q <= 1'b0; + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + gpio_output_q <= 32'h0; +else if (gpio_wr_q) + gpio_output_q <= data_q[31:0]; + +assign gpio_outputs_o = gpio_output_q; + + + +endmodule diff --git a/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge_fifo.v b/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge_fifo.v new file mode 100644 index 0000000000000000000000000000000000000000..8f436397a3a194eb53fd294b079fc875d7356def --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge_fifo.v @@ -0,0 +1,118 @@ +//----------------------------------------------------------------- +// UART -> AXI Debug Bridge +// V1.0 +// Ultra-Embedded.com +// Copyright 2017-2019 +// +// Email: admin@ultra-embedded.com +// +// License: LGPL +//----------------------------------------------------------------- +// +// This source file may be used and distributed without +// restriction provided that this copyright statement is not +// removed from the file and that any derivative work contains +// the original copyright notice and the associated disclaimer. +// +// This source file is free software; you can redistribute it +// and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; +// either version 2.1 of the License, or (at your option) any +// later version. +// +// This source is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the GNU Lesser General Public License for more +// details. +// +// You should have received a copy of the GNU Lesser General +// Public License along with this source; if not, write to the +// Free Software Foundation, Inc., 59 Temple Place, Suite 330, +// Boston, MA 02111-1307 USA +//----------------------------------------------------------------- + +//----------------------------------------------------------------- +// Generated File +//----------------------------------------------------------------- +module dbg_bridge_fifo +//----------------------------------------------------------------- +// Params +//----------------------------------------------------------------- +#( + parameter WIDTH = 8, + parameter DEPTH = 4, + parameter ADDR_W = 2 +) +//----------------------------------------------------------------- +// Ports +//----------------------------------------------------------------- +( + // Inputs + input clk_i + ,input rst_i + ,input [WIDTH-1:0] data_in_i + ,input push_i + ,input pop_i + + // Outputs + ,output [WIDTH-1:0] data_out_o + ,output accept_o + ,output valid_o +); + +//----------------------------------------------------------------- +// Local Params +//----------------------------------------------------------------- +localparam COUNT_W = ADDR_W + 1; + +//----------------------------------------------------------------- +// Registers +//----------------------------------------------------------------- +reg [WIDTH-1:0] ram_q[DEPTH-1:0]; +reg [ADDR_W-1:0] rd_ptr_q; +reg [ADDR_W-1:0] wr_ptr_q; +reg [COUNT_W-1:0] count_q; + +//----------------------------------------------------------------- +// Sequential +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) +begin + count_q <= {(COUNT_W) {1'b0}}; + rd_ptr_q <= {(ADDR_W) {1'b0}}; + wr_ptr_q <= {(ADDR_W) {1'b0}}; +end +else +begin + // Push + if (push_i & accept_o) + begin + ram_q[wr_ptr_q] <= data_in_i; + wr_ptr_q <= wr_ptr_q + 1; + end + + // Pop + if (pop_i & valid_o) + rd_ptr_q <= rd_ptr_q + 1; + + // Count up + if ((push_i & accept_o) & ~(pop_i & valid_o)) + count_q <= count_q + 1; + // Count down + else if (~(push_i & accept_o) & (pop_i & valid_o)) + count_q <= count_q - 1; +end + +//------------------------------------------------------------------- +// Combinatorial +//------------------------------------------------------------------- +/* verilator lint_off WIDTH */ +assign valid_o = (count_q != 0); +assign accept_o = (count_q != DEPTH); +/* verilator lint_on WIDTH */ + +assign data_out_o = ram_q[rd_ptr_q]; + +endmodule diff --git a/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge_uart.v b/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge_uart.v new file mode 100644 index 0000000000000000000000000000000000000000..fc3c5709b45d95e0ddef7daddb2fec0bf5ad4286 --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_1.0/src/dbg_bridge_uart.v @@ -0,0 +1,341 @@ +//----------------------------------------------------------------- +// UART -> AXI Debug Bridge +// V1.0 +// Ultra-Embedded.com +// Copyright 2017-2019 +// +// Email: admin@ultra-embedded.com +// +// License: LGPL +//----------------------------------------------------------------- +// +// This source file may be used and distributed without +// restriction provided that this copyright statement is not +// removed from the file and that any derivative work contains +// the original copyright notice and the associated disclaimer. +// +// This source file is free software; you can redistribute it +// and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; +// either version 2.1 of the License, or (at your option) any +// later version. +// +// This source is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the GNU Lesser General Public License for more +// details. +// +// You should have received a copy of the GNU Lesser General +// Public License along with this source; if not, write to the +// Free Software Foundation, Inc., 59 Temple Place, Suite 330, +// Boston, MA 02111-1307 USA +//----------------------------------------------------------------- + +//----------------------------------------------------------------- +// Generated File +//----------------------------------------------------------------- +module dbg_bridge_uart + +//----------------------------------------------------------------- +// Params +//----------------------------------------------------------------- +#( + parameter UART_DIVISOR_W = 9 +) + +//----------------------------------------------------------------- +// Ports +//----------------------------------------------------------------- +( + // Clock & Reset + input clk_i, + input rst_i, + + // Control + input [UART_DIVISOR_W-1:0] bit_div_i, + input stop_bits_i, // 0 = 1, 1 = 2 + + // Transmit + input wr_i, + input [7:0] data_i, + output tx_busy_o, + + // Receive + input rd_i, + output [7:0] data_o, + output rx_ready_o, + + output rx_err_o, + + // UART pins + input rxd_i, + output txd_o +); + +//----------------------------------------------------------------- +// Registers +//----------------------------------------------------------------- +localparam START_BIT = 4'd0; +localparam STOP_BIT0 = 4'd9; +localparam STOP_BIT1 = 4'd10; + +// Xilinx placement pragmas: +//synthesis attribute IOB of txd_q is "TRUE" + +// TX Signals +reg tx_busy_q; +reg [3:0] tx_bits_q; +reg [UART_DIVISOR_W-1:0] tx_count_q; +reg [7:0] tx_shift_reg_q; +reg txd_q; + +// RX Signals +reg rxd_q; +reg [7:0] rx_data_q; +reg [3:0] rx_bits_q; +reg [UART_DIVISOR_W-1:0] rx_count_q; +reg [7:0] rx_shift_reg_q; +reg rx_ready_q; +reg rx_busy_q; + +reg rx_err_q; + +//----------------------------------------------------------------- +// Re-sync RXD +//----------------------------------------------------------------- +reg rxd_ms_q; + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) +begin + rxd_ms_q <= 1'b1; + rxd_q <= 1'b1; +end +else +begin + rxd_ms_q <= rxd_i; + rxd_q <= rxd_ms_q; +end + +//----------------------------------------------------------------- +// RX Clock Divider +//----------------------------------------------------------------- +wire rx_sample_w = (rx_count_q == {(UART_DIVISOR_W){1'b0}}); + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + rx_count_q <= {(UART_DIVISOR_W){1'b0}}; +else +begin + // Inactive + if (!rx_busy_q) + rx_count_q <= {1'b0, bit_div_i[UART_DIVISOR_W-1:1]}; + // Rx bit timer + else if (rx_count_q != 0) + rx_count_q <= (rx_count_q - 1); + // Active + else if (rx_sample_w) + begin + // Last bit? + if ((rx_bits_q == STOP_BIT0 && !stop_bits_i) || (rx_bits_q == STOP_BIT1 && stop_bits_i)) + rx_count_q <= {(UART_DIVISOR_W){1'b0}}; + else + rx_count_q <= bit_div_i; + end +end + +//----------------------------------------------------------------- +// RX Shift Register +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) +begin + rx_shift_reg_q <= 8'h00; + rx_busy_q <= 1'b0; +end +// Rx busy +else if (rx_busy_q && rx_sample_w) +begin + // Last bit? + if (rx_bits_q == STOP_BIT0 && !stop_bits_i) + rx_busy_q <= 1'b0; + else if (rx_bits_q == STOP_BIT1 && stop_bits_i) + rx_busy_q <= 1'b0; + else if (rx_bits_q == START_BIT) + begin + // Start bit should still be low as sampling mid + // way through start bit, so if high, error! + if (rxd_q) + rx_busy_q <= 1'b0; + end + // Rx shift register + else + rx_shift_reg_q <= {rxd_q, rx_shift_reg_q[7:1]}; +end +// Start bit? +else if (!rx_busy_q && rxd_q == 1'b0) +begin + rx_shift_reg_q <= 8'h00; + rx_busy_q <= 1'b1; +end + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + rx_bits_q <= START_BIT; +else if (rx_sample_w && rx_busy_q) +begin + if ((rx_bits_q == STOP_BIT1 && stop_bits_i) || (rx_bits_q == STOP_BIT0 && !stop_bits_i)) + rx_bits_q <= START_BIT; + else + rx_bits_q <= rx_bits_q + 4'd1; +end +else if (!rx_busy_q && (bit_div_i == {(UART_DIVISOR_W){1'b0}})) + rx_bits_q <= START_BIT + 4'd1; +else if (!rx_busy_q) + rx_bits_q <= START_BIT; + +//----------------------------------------------------------------- +// RX Data +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) +begin + rx_ready_q <= 1'b0; + rx_data_q <= 8'h00; + rx_err_q <= 1'b0; +end +else +begin + // If reading data, reset data state + if (rd_i == 1'b1) + begin + rx_ready_q <= 1'b0; + rx_err_q <= 1'b0; + end + + if (rx_busy_q && rx_sample_w) + begin + // Stop bit + if ((rx_bits_q == STOP_BIT1 && stop_bits_i) || (rx_bits_q == STOP_BIT0 && !stop_bits_i)) + begin + // RXD should be still high + if (rxd_q) + begin + rx_data_q <= rx_shift_reg_q; + rx_ready_q <= 1'b1; + end + // Bad Stop bit - wait for a full bit period + // before allowing start bit detection again + else + begin + rx_ready_q <= 1'b0; + rx_data_q <= 8'h00; + rx_err_q <= 1'b1; + end + end + // Mid start bit sample - if high then error + else if (rx_bits_q == START_BIT && rxd_q) + rx_err_q <= 1'b1; + end +end + +//----------------------------------------------------------------- +// TX Clock Divider +//----------------------------------------------------------------- +wire tx_sample_w = (tx_count_q == {(UART_DIVISOR_W){1'b0}}); + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + tx_count_q <= {(UART_DIVISOR_W){1'b0}}; +else +begin + // Idle + if (!tx_busy_q) + tx_count_q <= bit_div_i; + // Tx bit timer + else if (tx_count_q != 0) + tx_count_q <= (tx_count_q - 1); + else if (tx_sample_w) + tx_count_q <= bit_div_i; +end + +//----------------------------------------------------------------- +// TX Shift Register +//----------------------------------------------------------------- +always @ (posedge clk_i or posedge rst_i) +if (rst_i) +begin + tx_shift_reg_q <= 8'h00; + tx_busy_q <= 1'b0; +end +// Tx busy +else if (tx_busy_q) +begin + // Shift tx data + if (tx_bits_q != START_BIT && tx_sample_w) + tx_shift_reg_q <= {1'b0, tx_shift_reg_q[7:1]}; + + // Last bit? + if (tx_bits_q == STOP_BIT0 && tx_sample_w && !stop_bits_i) + tx_busy_q <= 1'b0; + else if (tx_bits_q == STOP_BIT1 && tx_sample_w && stop_bits_i) + tx_busy_q <= 1'b0; +end +// Buffer data to transmit +else if (wr_i) +begin + tx_shift_reg_q <= data_i; + tx_busy_q <= 1'b1; +end + +always @ (posedge clk_i or posedge rst_i ) +if (rst_i) + tx_bits_q <= 4'd0; +else if (tx_sample_w && tx_busy_q) +begin + if ((tx_bits_q == STOP_BIT1 && stop_bits_i) || (tx_bits_q == STOP_BIT0 && !stop_bits_i)) + tx_bits_q <= START_BIT; + else + tx_bits_q <= tx_bits_q + 4'd1; +end + +//----------------------------------------------------------------- +// UART Tx Pin +//----------------------------------------------------------------- +reg txd_r; + +always @ * +begin + txd_r = 1'b1; + + if (tx_busy_q) + begin + // Start bit (TXD = L) + if (tx_bits_q == START_BIT) + txd_r = 1'b0; + // Stop bits (TXD = H) + else if (tx_bits_q == STOP_BIT0 || tx_bits_q == STOP_BIT1) + txd_r = 1'b1; + // Data bits + else + txd_r = tx_shift_reg_q[0]; + end +end + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) + txd_q <= 1'b1; +else + txd_q <= txd_r; + +//----------------------------------------------------------------- +// Outputs +//----------------------------------------------------------------- +assign tx_busy_o = tx_busy_q; +assign rx_ready_o = rx_ready_q; +assign txd_o = txd_q; +assign data_o = rx_data_q; +assign rx_err_o = rx_err_q; + +endmodule diff --git a/socket/vivado_lib/uart_to_AXI_master_1.0/xgui/uart_to_AXI_master_v1_0.tcl b/socket/vivado_lib/uart_to_AXI_master_1.0/xgui/uart_to_AXI_master_v1_0.tcl new file mode 100644 index 0000000000000000000000000000000000000000..5460b99c29d7373d613a95000fe19b5dbf744753 --- /dev/null +++ b/socket/vivado_lib/uart_to_AXI_master_1.0/xgui/uart_to_AXI_master_v1_0.tcl @@ -0,0 +1,190 @@ +# 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_M00_AXI_TARGET_SLAVE_BASE_ADDR" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_M00_AXI_BURST_LEN" -parent ${Page_0} -widget comboBox + ipgui::add_param $IPINST -name "C_M00_AXI_ID_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_M00_AXI_ADDR_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_M00_AXI_DATA_WIDTH" -parent ${Page_0} -widget comboBox + ipgui::add_param $IPINST -name "C_M00_AXI_AWUSER_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_M00_AXI_ARUSER_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_M00_AXI_WUSER_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_M00_AXI_RUSER_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_M00_AXI_BUSER_WIDTH" -parent ${Page_0} + + ipgui::add_param $IPINST -name "CLK_SPEED" + ipgui::add_param $IPINST -name "UART_BAUD_RATE" + +} + +proc update_PARAM_VALUE.CLK_SPEED { PARAM_VALUE.CLK_SPEED } { + # Procedure called to update CLK_SPEED when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.CLK_SPEED { PARAM_VALUE.CLK_SPEED } { + # Procedure called to validate CLK_SPEED + return true +} + +proc update_PARAM_VALUE.UART_BAUD_RATE { PARAM_VALUE.UART_BAUD_RATE } { + # Procedure called to update UART_BAUD_RATE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.UART_BAUD_RATE { PARAM_VALUE.UART_BAUD_RATE } { + # Procedure called to validate UART_BAUD_RATE + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR { PARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR } { + # Procedure called to update C_M00_AXI_TARGET_SLAVE_BASE_ADDR when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR { PARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR } { + # Procedure called to validate C_M00_AXI_TARGET_SLAVE_BASE_ADDR + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_BURST_LEN { PARAM_VALUE.C_M00_AXI_BURST_LEN } { + # Procedure called to update C_M00_AXI_BURST_LEN when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_BURST_LEN { PARAM_VALUE.C_M00_AXI_BURST_LEN } { + # Procedure called to validate C_M00_AXI_BURST_LEN + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_ID_WIDTH { PARAM_VALUE.C_M00_AXI_ID_WIDTH } { + # Procedure called to update C_M00_AXI_ID_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_ID_WIDTH { PARAM_VALUE.C_M00_AXI_ID_WIDTH } { + # Procedure called to validate C_M00_AXI_ID_WIDTH + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_ADDR_WIDTH { PARAM_VALUE.C_M00_AXI_ADDR_WIDTH } { + # Procedure called to update C_M00_AXI_ADDR_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_ADDR_WIDTH { PARAM_VALUE.C_M00_AXI_ADDR_WIDTH } { + # Procedure called to validate C_M00_AXI_ADDR_WIDTH + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_DATA_WIDTH { PARAM_VALUE.C_M00_AXI_DATA_WIDTH } { + # Procedure called to update C_M00_AXI_DATA_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_DATA_WIDTH { PARAM_VALUE.C_M00_AXI_DATA_WIDTH } { + # Procedure called to validate C_M00_AXI_DATA_WIDTH + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH { PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH } { + # Procedure called to update C_M00_AXI_AWUSER_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH { PARAM_VALUE.C_M00_AXI_AWUSER_WIDTH } { + # Procedure called to validate C_M00_AXI_AWUSER_WIDTH + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH { PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH } { + # Procedure called to update C_M00_AXI_ARUSER_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH { PARAM_VALUE.C_M00_AXI_ARUSER_WIDTH } { + # Procedure called to validate C_M00_AXI_ARUSER_WIDTH + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_WUSER_WIDTH { PARAM_VALUE.C_M00_AXI_WUSER_WIDTH } { + # Procedure called to update C_M00_AXI_WUSER_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_WUSER_WIDTH { PARAM_VALUE.C_M00_AXI_WUSER_WIDTH } { + # Procedure called to validate C_M00_AXI_WUSER_WIDTH + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_RUSER_WIDTH { PARAM_VALUE.C_M00_AXI_RUSER_WIDTH } { + # Procedure called to update C_M00_AXI_RUSER_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_RUSER_WIDTH { PARAM_VALUE.C_M00_AXI_RUSER_WIDTH } { + # Procedure called to validate C_M00_AXI_RUSER_WIDTH + return true +} + +proc update_PARAM_VALUE.C_M00_AXI_BUSER_WIDTH { PARAM_VALUE.C_M00_AXI_BUSER_WIDTH } { + # Procedure called to update C_M00_AXI_BUSER_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_M00_AXI_BUSER_WIDTH { PARAM_VALUE.C_M00_AXI_BUSER_WIDTH } { + # Procedure called to validate C_M00_AXI_BUSER_WIDTH + return true +} + + +proc update_MODELPARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR { MODELPARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR PARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR}] ${MODELPARAM_VALUE.C_M00_AXI_TARGET_SLAVE_BASE_ADDR} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_BURST_LEN { MODELPARAM_VALUE.C_M00_AXI_BURST_LEN PARAM_VALUE.C_M00_AXI_BURST_LEN } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_M00_AXI_BURST_LEN}] ${MODELPARAM_VALUE.C_M00_AXI_BURST_LEN} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH { MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH PARAM_VALUE.C_M00_AXI_ID_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_M00_AXI_ID_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_ID_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_ADDR_WIDTH { MODELPARAM_VALUE.C_M00_AXI_ADDR_WIDTH PARAM_VALUE.C_M00_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_M00_AXI_ADDR_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_ADDR_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH { MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH PARAM_VALUE.C_M00_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_M00_AXI_DATA_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_DATA_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_AWUSER_WIDTH { MODELPARAM_VALUE.C_M00_AXI_AWUSER_WIDTH PARAM_VALUE.C_M00_AXI_AWUSER_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_M00_AXI_AWUSER_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_AWUSER_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_ARUSER_WIDTH { MODELPARAM_VALUE.C_M00_AXI_ARUSER_WIDTH PARAM_VALUE.C_M00_AXI_ARUSER_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_M00_AXI_ARUSER_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_ARUSER_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_WUSER_WIDTH { MODELPARAM_VALUE.C_M00_AXI_WUSER_WIDTH PARAM_VALUE.C_M00_AXI_WUSER_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_M00_AXI_WUSER_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_WUSER_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_RUSER_WIDTH { MODELPARAM_VALUE.C_M00_AXI_RUSER_WIDTH PARAM_VALUE.C_M00_AXI_RUSER_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_M00_AXI_RUSER_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_RUSER_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_M00_AXI_BUSER_WIDTH { MODELPARAM_VALUE.C_M00_AXI_BUSER_WIDTH PARAM_VALUE.C_M00_AXI_BUSER_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_M00_AXI_BUSER_WIDTH}] ${MODELPARAM_VALUE.C_M00_AXI_BUSER_WIDTH} +} + +proc update_MODELPARAM_VALUE.CLK_SPEED { MODELPARAM_VALUE.CLK_SPEED PARAM_VALUE.CLK_SPEED } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.CLK_SPEED}] ${MODELPARAM_VALUE.CLK_SPEED} +} + +proc update_MODELPARAM_VALUE.UART_BAUD_RATE { MODELPARAM_VALUE.UART_BAUD_RATE PARAM_VALUE.UART_BAUD_RATE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.UART_BAUD_RATE}] ${MODELPARAM_VALUE.UART_BAUD_RATE} +} +