aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/lib/vivado_ipi/interfaces
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2020-01-23 16:10:22 -0800
committerMartin Braun <martin.braun@ettus.com>2020-01-28 09:35:36 -0800
commitbafa9d95453387814ef25e6b6256ba8db2df612f (patch)
tree39ba24b5b67072d354775272e687796bb511848d /fpga/usrp3/lib/vivado_ipi/interfaces
parent3075b981503002df3115d5f1d0b97d2619ba30f2 (diff)
downloaduhd-bafa9d95453387814ef25e6b6256ba8db2df612f.tar.gz
uhd-bafa9d95453387814ef25e6b6256ba8db2df612f.tar.bz2
uhd-bafa9d95453387814ef25e6b6256ba8db2df612f.zip
Merge FPGA repository back into UHD repository
The FPGA codebase was removed from the UHD repository in 2014 to reduce the size of the repository. However, over the last half-decade, the split between the repositories has proven more burdensome than it has been helpful. By merging the FPGA code back, it will be possible to create atomic commits that touch both FPGA and UHD codebases. Continuous integration testing is also simplified by merging the repositories, because it was previously difficult to automatically derive the correct UHD branch when testing a feature branch on the FPGA repository. This commit also updates the license files and paths therein. We are therefore merging the repositories again. Future development for FPGA code will happen in the same repository as the UHD host code and MPM code. == Original Codebase and Rebasing == The original FPGA repository will be hosted for the foreseeable future at its original local location: https://github.com/EttusResearch/fpga/ It can be used for bisecting, reference, and a more detailed history. The final commit from said repository to be merged here is 05003794e2da61cabf64dd278c45685a7abad7ec. This commit is tagged as v4.0.0.0-pre-uhd-merge. If you have changes in the FPGA repository that you want to rebase onto the UHD repository, simply run the following commands: - Create a directory to store patches (this should be an empty directory): mkdir ~/patches - Now make sure that your FPGA codebase is based on the same state as the code that was merged: cd src/fpga # Or wherever your FPGA code is stored git rebase v4.0.0.0-pre-uhd-merge Note: The rebase command may look slightly different depending on what exactly you're trying to rebase. - Create a patch set for your changes versus v4.0.0.0-pre-uhd-merge: git format-patch v4.0.0.0-pre-uhd-merge -o ~/patches Note: Make sure that only patches are stored in your output directory. It should otherwise be empty. Make sure that you picked the correct range of commits, and only commits you wanted to rebase were exported as patch files. - Go to the UHD repository and apply the patches: cd src/uhd # Or wherever your UHD repository is stored git am --directory fpga ~/patches/* rm -rf ~/patches # This is for cleanup == Contributors == The following people have contributed mainly to these files (this list is not complete): Co-authored-by: Alex Williams <alex.williams@ni.com> Co-authored-by: Andrej Rode <andrej.rode@ettus.com> Co-authored-by: Ashish Chaudhari <ashish@ettus.com> Co-authored-by: Ben Hilburn <ben.hilburn@ettus.com> Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com> Co-authored-by: Daniel Jepson <daniel.jepson@ni.com> Co-authored-by: Derek Kozel <derek.kozel@ettus.com> Co-authored-by: EJ Kreinar <ej@he360.com> Co-authored-by: Humberto Jimenez <humberto.jimenez@ni.com> Co-authored-by: Ian Buckley <ian.buckley@gmail.com> Co-authored-by: Jörg Hofrichter <joerg.hofrichter@ni.com> Co-authored-by: Jon Kiser <jon.kiser@ni.com> Co-authored-by: Josh Blum <josh@joshknows.com> Co-authored-by: Jonathon Pendlum <jonathan.pendlum@ettus.com> Co-authored-by: Martin Braun <martin.braun@ettus.com> Co-authored-by: Matt Ettus <matt@ettus.com> Co-authored-by: Michael West <michael.west@ettus.com> Co-authored-by: Moritz Fischer <moritz.fischer@ettus.com> Co-authored-by: Nick Foster <nick@ettus.com> Co-authored-by: Nicolas Cuervo <nicolas.cuervo@ettus.com> Co-authored-by: Paul Butler <paul.butler@ni.com> Co-authored-by: Paul David <paul.david@ettus.com> Co-authored-by: Ryan Marlow <ryan.marlow@ettus.com> Co-authored-by: Sugandha Gupta <sugandha.gupta@ettus.com> Co-authored-by: Sylvain Munaut <tnt@246tNt.com> Co-authored-by: Trung Tran <trung.tran@ettus.com> Co-authored-by: Vidush Vishwanath <vidush.vishwanath@ettus.com> Co-authored-by: Wade Fife <wade.fife@ettus.com>
Diffstat (limited to 'fpga/usrp3/lib/vivado_ipi/interfaces')
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd.xml13
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd_rtl.xml69
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr.xml13
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr_rtl.xml88
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll.xml11
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll_rtl.xml46
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll.xml11
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll_rtl.xml46
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx.xml11
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig.xml11
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig_rtl.xml85
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_rtl.xml409
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx.xml11
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx_rtl.xml379
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch.xml11
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch_rtl.xml235
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm.xml11
-rw-r--r--fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm_rtl.xml115
18 files changed, 1575 insertions, 0 deletions
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd.xml
new file mode 100644
index 000000000..66d44bdbd
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>analog.com</spirit:vendor>
+ <spirit:library>interface</spirit:library>
+ <spirit:name>fifo_rd</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:extends spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="fifo_read" spirit:version="1.0"/>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+ <spirit:description>FIFO Read Interface</spirit:description>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd_rtl.xml
new file mode 100644
index 000000000..3c15f7203
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_rd_rtl.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>analog.com</spirit:vendor>
+ <spirit:library>interface</spirit:library>
+ <spirit:name>fifo_rd_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="analog.com" spirit:library="interface" spirit:name="fifo_rd" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>DATA</spirit:logicalName>
+ <spirit:description>FIFO Read Data</spirit:description>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isData>true</spirit:isData>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ <spirit:defaultValue>0</spirit:defaultValue>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>EN</spirit:logicalName>
+ <spirit:description>FIFO Read Enable</spirit:description>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ <spirit:defaultValue>0</spirit:defaultValue>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>UNDERFLOW</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:width>1</spirit:width>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>VALID</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr.xml
new file mode 100644
index 000000000..8e1f4d781
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>analog.com</spirit:vendor>
+ <spirit:library>interface</spirit:library>
+ <spirit:name>fifo_wr</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:extends spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="fifo_write" spirit:version="1.0"/>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+ <spirit:description>FIFO Write Interface</spirit:description>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr_rtl.xml
new file mode 100644
index 000000000..49509dbfa
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/fifo_wr_rtl.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>analog.com</spirit:vendor>
+ <spirit:library>interface</spirit:library>
+ <spirit:name>fifo_wr_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="analog.com" spirit:library="interface" spirit:name="fifo_wr" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>DATA</spirit:logicalName>
+ <spirit:description/>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isData>true</spirit:isData>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ <spirit:defaultValue>0</spirit:defaultValue>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>EN</spirit:logicalName>
+ <spirit:description/>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ <spirit:defaultValue>0</spirit:defaultValue>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>OVERFLOW</spirit:logicalName>
+ <spirit:description/>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>optional</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>optional</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ <spirit:defaultValue>0</spirit:defaultValue>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>SYNC</spirit:logicalName>
+ <spirit:description/>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>optional</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>optional</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ <spirit:defaultValue>0</spirit:defaultValue>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>XFER_REQ</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll.xml
new file mode 100644
index 000000000..583c1f242
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_pll</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll_rtl.xml
new file mode 100644
index 000000000..58d14d2f7
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_pll_rtl.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_pll_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="ADI" spirit:library="user" spirit:name="if_gt_pll" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>cpll_rst_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>cpll_ref_clk_in</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isClock>true</spirit:isClock>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll.xml
new file mode 100644
index 000000000..12e43a4c0
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_qpll</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll_rtl.xml
new file mode 100644
index 000000000..486cb8b61
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_qpll_rtl.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_qpll_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="ADI" spirit:library="user" spirit:name="if_gt_qpll" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>qpll_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>qpll_ref_clk</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isClock>true</spirit:isClock>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx.xml
new file mode 100644
index 000000000..24e435073
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_rx</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig.xml
new file mode 100644
index 000000000..a8cae5ade
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_rx_ksig</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig_rtl.xml
new file mode 100644
index 000000000..4e09e7982
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_ksig_rtl.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_rx_ksig_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="ADI" spirit:library="user" spirit:name="if_gt_rx_ksig" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>rx_gt_ilas_f</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_gt_ilas_q</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_gt_ilas_a</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_gt_ilas_r</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_gt_cgs_k</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_rtl.xml
new file mode 100644
index 000000000..e2e49d1c3
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_rx_rtl.xml
@@ -0,0 +1,409 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_rx_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="ADI" spirit:library="user" spirit:name="if_gt_rx" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>rx_p</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_n</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_rst_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_pll_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_gt_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_gt_rst_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_pll_locked</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_pll_locked_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_user_ready</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_user_ready_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_rst_done</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_rst_done_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_out_clk</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isClock>true</spirit:isClock>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_clk</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isClock>true</spirit:isClock>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_sysref</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_sync</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_sof</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_data</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_ip_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_ip_sof</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>4</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_ip_data</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_ip_sysref</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_ip_sync</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rx_ip_rst_done</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx.xml
new file mode 100644
index 000000000..50eca29d0
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_tx</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx_rtl.xml
new file mode 100644
index 000000000..faaa387f2
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_gt_tx_rtl.xml
@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_gt_tx_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="ADI" spirit:library="user" spirit:name="if_gt_tx" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>tx_p</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_n</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_rst_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_pll_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_gt_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_gt_rst_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_pll_locked</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_pll_locked_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_user_ready</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_user_ready_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_rst_done</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_rst_done_m</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_out_clk</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isClock>true</spirit:isClock>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_clk</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isClock>true</spirit:isClock>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_sysref</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_sync</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_data</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_ip_rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:qualifier>
+ <spirit:isReset>true</spirit:isReset>
+ </spirit:qualifier>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_ip_data</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>32</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_ip_sysref</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_ip_sync</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>tx_ip_rst_done</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch.xml
new file mode 100644
index 000000000..32a225486
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_xcvr_ch</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch_rtl.xml
new file mode 100644
index 000000000..ba01aef9c
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_ch_rtl.xml
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_xcvr_ch_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="ADI" spirit:library="user" spirit:name="if_xcvr_ch" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>pll_locked</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rst</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>user_ready</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rst_done</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>lpm_dfe_n</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rate</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>3</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>3</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>sys_clk_sel</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>2</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>2</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>out_clk_sel</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>3</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>3</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>sel</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>8</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>8</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>enb</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>addr</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>12</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>12</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>wr</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>wdata</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rdata</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>ready</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm.xml
new file mode 100644
index 000000000..218fd3686
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:busDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_xcvr_cm</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:directConnection>false</spirit:directConnection>
+ <spirit:isAddressable>false</spirit:isAddressable>
+ <spirit:maxMasters>1</spirit:maxMasters>
+ <spirit:maxSlaves>1</spirit:maxSlaves>
+</spirit:busDefinition>
diff --git a/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm_rtl.xml b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm_rtl.xml
new file mode 100644
index 000000000..beb223077
--- /dev/null
+++ b/fpga/usrp3/lib/vivado_ipi/interfaces/if_xcvr_cm_rtl.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<spirit:abstractionDefinition 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>ADI</spirit:vendor>
+ <spirit:library>user</spirit:library>
+ <spirit:name>if_xcvr_cm_rtl</spirit:name>
+ <spirit:version>1.0</spirit:version>
+ <spirit:busType spirit:vendor="ADI" spirit:library="user" spirit:name="if_xcvr_cm" spirit:version="1.0"/>
+ <spirit:ports>
+ <spirit:port>
+ <spirit:logicalName>sel</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>8</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>8</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>enb</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>addr</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>12</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>12</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>wr</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>wdata</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>rdata</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>16</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ <spirit:port>
+ <spirit:logicalName>ready</spirit:logicalName>
+ <spirit:wire>
+ <spirit:onMaster>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>in</spirit:direction>
+ </spirit:onMaster>
+ <spirit:onSlave>
+ <spirit:presence>required</spirit:presence>
+ <spirit:width>1</spirit:width>
+ <spirit:direction>out</spirit:direction>
+ </spirit:onSlave>
+ </spirit:wire>
+ </spirit:port>
+ </spirit:ports>
+</spirit:abstractionDefinition>