<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://kb.ettus.com/index.php?action=history&amp;feed=atom&amp;title=RFNoC_4_Migration_Guide</id>
		<title>RFNoC 4 Migration Guide - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://kb.ettus.com/index.php?action=history&amp;feed=atom&amp;title=RFNoC_4_Migration_Guide"/>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;action=history"/>
		<updated>2026-06-04T19:29:34Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=6095&amp;oldid=prev</id>
		<title>JonathonPendlum: Update Prerequisites section to UHD 4.6</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=6095&amp;oldid=prev"/>
				<updated>2024-10-28T15:02:40Z</updated>
		
		<summary type="html">&lt;p&gt;Update Prerequisites section to UHD 4.6&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 15:02, 28 October 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot; &gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Prerequisites=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Prerequisites=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Dependencies (Ubuntu 20.04)===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Dependencies (Ubuntu 20&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.04 &amp;amp; 22&lt;/ins&gt;.04)===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo apt-get install autoconf automake build-essential &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ccache &lt;/del&gt;cmake cpufrequtils doxygen ethtool \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo apt-get install autoconf automake build-essential cmake cpufrequtils doxygen ethtool \&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; g++ git inetutils-tools libboost-all&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-dev libncurses5 libncurses5&lt;/del&gt;-dev libusb-1.0-0 libusb-1.0-0-dev \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; g++ git inetutils-tools libboost-all-dev libusb-1.0-0 libusb-1.0-0&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-dev libudev&lt;/ins&gt;-dev \&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libusb&lt;/del&gt;-dev python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;dev &lt;/del&gt;python3-mako python3-numpy python3-requests python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;scipy &lt;/del&gt;python3-setuptools \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libspdlog&lt;/ins&gt;-dev &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;doxygen swig &lt;/ins&gt;python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;docutils &lt;/ins&gt;python3-mako python3-numpy python3-requests &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ruamel&lt;/del&gt;.yaml libtinfo5 libncurses5&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &lt;/ins&gt;python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ruamel.yaml &lt;/ins&gt;python3-setuptools &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cmake build-essential git g++ libgmp-dev swig &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;sphinx python3-lxml doxygen libfftw3-dev libsdl1&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2-dev libgsl-dev libqwt-qt5-dev \&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; libqt5opengl5-dev python3-pyqt5 liblog4cpp5-dev libzmq3-dev python3-&lt;/ins&gt;yaml &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;python3-click \&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; python3-click-plugins python3-zmq python3-scipy python3-gi python3-gi-cairo \&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; gir1.2-gtk-3.0 libcodec2-dev libgsm1-dev pybind11-dev python3-matplotlib libsndfile1-dev \&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; python3-jsonschema python3-pygccxml &lt;/ins&gt;libtinfo5 libncurses5&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2019&lt;/del&gt;.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2021&lt;/ins&gt;.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Please &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;reference &lt;/del&gt;to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Xilinx (xilinx&lt;/del&gt;.com&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;) for installation instructions&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Please &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;refer &lt;/ins&gt;to &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the dependencies section on the [https://files.ettus&lt;/ins&gt;.com&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;/manual_archive/v4.6.0.0/html/md_usrp3_build_instructions.html FPGA build page] in UHD's manual&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''Note: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The dependencies step above included installing libtinfo5 libncurses5, which is a workaround &lt;/del&gt;for &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;getting &lt;/del&gt;Vivado &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2019&lt;/del&gt;.1 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;to run on Ubuntu 20.04&lt;/del&gt;''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''Note &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1&lt;/ins&gt;: &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Make sure to install [https://support.xilinx.com/s/article/76780?language=en_US AR76780 Patch &lt;/ins&gt;for Vivado &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2021&lt;/ins&gt;.1&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]&lt;/ins&gt;''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===UHD 4.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1&lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''Note 2: The dependencies step above includes installing libtinfo5 libncurses5, which is a workaround for getting Vivado 2021.1 to run on Ubuntu 20.04 &amp;amp; 22.04''&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; git clone --branch UHD-4.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1 &lt;/del&gt;https://github.com/ettusresearch/uhd.git uhd&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===UHD 4.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;6&lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; git clone --branch UHD-4.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;6 &lt;/ins&gt;https://github.com/ettusresearch/uhd.git uhd&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; mkdir uhd/host/build; cd uhd/host/build&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; mkdir uhd/host/build; cd uhd/host/build&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; cmake ..&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; cmake ..&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l33&quot; &gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 40:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo make install&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo make install&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Please refer to &lt;/del&gt;the [https://wiki.gnuradio.org/index.php/UbuntuInstall GNU Radio Build Instructions] for &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;dependencies and a &lt;/del&gt;more detailed &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;description&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;You can also reference &lt;/ins&gt;the [https://wiki.gnuradio.org/index.php/UbuntuInstall GNU Radio Build Instructions] for more detailed &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;information&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===gr-ettus===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===gr-ettus===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5284:newid:6095 --&gt;
&lt;/table&gt;</summary>
		<author><name>JonathonPendlum</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5284&amp;oldid=prev</id>
		<title>JonathonPendlum: Updates for UHD 4.1 and fixing typos</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5284&amp;oldid=prev"/>
				<updated>2022-02-16T19:32:39Z</updated>
		
		<summary type="html">&lt;p&gt;Updates for UHD 4.1 and fixing typos&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 19:32, 16 February 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot; &gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''Note: The dependencies step above included installing libtinfo5 libncurses5, which is a workaround for getting Vivado 2019.1 to run on Ubuntu 20.04''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''Note: The dependencies step above included installing libtinfo5 libncurses5, which is a workaround for getting Vivado 2019.1 to run on Ubuntu 20.04''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===UHD 4.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0&lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===UHD 4.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1&lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; git clone --branch UHD-4.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0 &lt;/del&gt;https://github.com/ettusresearch/uhd.git uhd&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; git clone --branch UHD-4.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1 &lt;/ins&gt;https://github.com/ettusresearch/uhd.git uhd&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; mkdir uhd/host/build; cd uhd/host/build&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; mkdir uhd/host/build; cd uhd/host/build&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; cmake ..&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; cmake ..&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l162&quot; &gt;Line 162:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 162:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=UHD Software Migration=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=UHD Software Migration=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Migration reference files for this section from Gain RFNoC Block example:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Migration reference files for this section from &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the &lt;/ins&gt;Gain RFNoC Block example:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l298&quot; &gt;Line 298:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 298:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; graph-&amp;gt;enumerate_static_connections()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; graph-&amp;gt;enumerate_static_connections()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;||&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Used to check static connections, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;usually &lt;/del&gt;for &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;detecting hwen a &lt;/del&gt;DDC &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;or &lt;/del&gt;DUC &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;is &lt;/del&gt;statically connected to the radio &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;and requires setting the sample&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Used to check static connections, for &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;example the &lt;/ins&gt;DDC &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;and &lt;/ins&gt;DUC &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;blocks are usually &lt;/ins&gt;statically connected to the radio &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;block&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l361&quot; &gt;Line 361:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 361:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In RFNoC 3, RFNoC blocks can have arguments (also known as args) that are used to write user registers. This is implemented in the Noc Script XML in the &amp;lt;args&amp;gt; section.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In RFNoC 3, RFNoC blocks can have arguments (also known as args) that are used to write user registers. This is implemented in the Noc Script XML in the &amp;lt;args&amp;gt; section.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;RFNoC 4 expands and generalizes this concept with block properties: a high-level representation of the state of the block. Zero or more properties can be defined by the user in their RFNoC Block’s Block Controller C++ class. When read or written to, they can trigger a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;call back &lt;/del&gt;to a user defined resolver function. The [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification] provides more details on properties in the “Block Properties” section.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;RFNoC 4 expands and generalizes this concept with block properties: a high-level representation of the state of the block. Zero or more properties can be defined by the user in their RFNoC Block’s Block Controller C++ class. When read or written to, they can trigger a &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;callback &lt;/ins&gt;to a user defined resolver function. The [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification] provides more details on properties in the “Block Properties” section.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The following shows an example of how to migrate a RFNoC 3 Noc Script XML “arg” based register write to a RFNoC 4 property based implementation in the Block Controller:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The following shows an example of how to migrate a RFNoC 3 Noc Script XML “arg” based register write to a RFNoC 4 property based implementation in the Block Controller:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l393&quot; &gt;Line 393:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 393:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; // &amp;lt;/registers&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; // &amp;lt;/registers&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; // Note: In RFNoC 4, register addresses can start at address 0 instead of address 128 as in RFNoC 3.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; // Note: In RFNoC 4, register addresses can start at address 0 instead of address 128 as in RFNoC 3.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; const uint32_t gain_block_ctrl::REG_GAIN_ADDR = &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;128&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; const uint32_t gain_block_ctrl::REG_GAIN_ADDR &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160;  &lt;/ins&gt;= &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;0&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; const uint32_t gain_block_ctrl::REG_GAIN_DEFAULT = 1;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; const uint32_t gain_block_ctrl::REG_GAIN_DEFAULT = 1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l424&quot; &gt;Line 424:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 424:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As the above shows, writing to a register can be replicated with a property and a resolver function. Of course, the resolver function can also be made much more sophisticated. For additional examples, see the in-tree block controllers in uhd/host/lib/rfnoc.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As the above shows, writing to a register can be replicated with a property and a resolver function. Of course, the resolver function can also be made much more sophisticated. For additional examples, see the in-tree block controllers in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[https://github.com/EttusResearch/uhd/tree/master/host/lib/rfnoc &lt;/ins&gt;uhd/host/lib/rfnoc&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=FPGA Migration=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=FPGA Migration=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Migration reference files for this section from Gain RFNoC Block example:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Migration reference files for this section from &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the &lt;/ins&gt;Gain RFNoC Block example:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l473&quot; &gt;Line 473:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 473:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Settings Bus replaced by CtrlPort===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Settings Bus replaced by CtrlPort===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CtrlPort replaces the Settings Bus in RFNoC 4. The CtrlPort bus is similar to the Settings Bus with a few key differences. The table below compares the signaling between the two bus formats and provides notes on any differences. Timing diagrams and additional information on the CtrlPort bus &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;is &lt;/del&gt;also available in the [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CtrlPort replaces the Settings Bus in RFNoC 4. The CtrlPort bus is similar to the Settings Bus with a few key differences. The table below compares the signaling between the two bus formats and provides notes on any differences. Timing diagrams and additional information on the CtrlPort bus &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;are &lt;/ins&gt;also available in the [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l594&quot; &gt;Line 594:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 594:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;RFNoC 4 supports GNU Radio 3.8 only. Most of your RFNoC Block’s GNU Radio related changes will be due to API differences between GNU Radio 3.7 to 3.8. These changes are outside of the scope of this article. Instead, refer to [https://wiki.gnuradio.org/index.php/GNU_Radio_3.8_OOT_Module_Porting_Guide GNU Radio 3.8 Migration Guide] and [https://wiki.gnuradio.org/index.php/YAML_GRC GNU Radio Companion YAML] sites for more information.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;RFNoC 4 supports GNU Radio 3.8 only. Most of your RFNoC Block’s GNU Radio related changes will be due to API differences between GNU Radio 3.7 to 3.8. These changes are outside of the scope of this article. Instead, refer to [https://wiki.gnuradio.org/index.php/GNU_Radio_3.8_OOT_Module_Porting_Guide GNU Radio 3.8 Migration Guide] and [https://wiki.gnuradio.org/index.php/YAML_GRC GNU Radio Companion YAML] sites for more information.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Migration reference files for this section from Gain RFNoC Block example:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Migration reference files for this section from &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the &lt;/ins&gt;Gain RFNoC Block example:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5240:newid:5284 --&gt;
&lt;/table&gt;</summary>
		<author><name>JonathonPendlum</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5240&amp;oldid=prev</id>
		<title>MartinAnderseck: /* GNU Radio 3.8 */ Added link to official GNU Radio build instructions</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5240&amp;oldid=prev"/>
				<updated>2021-11-19T10:06:38Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;GNU Radio 3.8: &lt;/span&gt; Added link to official GNU Radio build instructions&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:06, 19 November 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l32&quot; &gt;Line 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 32:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; make&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; make&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo make install&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo make install&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Please refer to the [https://wiki.gnuradio.org/index.php/UbuntuInstall GNU Radio Build Instructions] for dependencies and a more detailed description.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===gr-ettus===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===gr-ettus===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5239:newid:5240 --&gt;
&lt;/table&gt;</summary>
		<author><name>MartinAnderseck</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5239&amp;oldid=prev</id>
		<title>MartinAnderseck: /* Dependencies (Ubuntu 20.04) */ Bringing back libtinfo5 libncurses5, removal was way too quick.</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5239&amp;oldid=prev"/>
				<updated>2021-11-19T10:00:16Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Dependencies (Ubuntu 20.04): &lt;/span&gt; Bringing back libtinfo5 libncurses5, removal was way too quick.&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:00, 19 November 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot; &gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-dev libusb-1.0-0 libusb-1.0-0-dev \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-dev libusb-1.0-0 libusb-1.0-0-dev \&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; libusb-dev python3-dev python3-mako python3-numpy python3-requests python3-scipy python3-setuptools \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; libusb-dev python3-dev python3-mako python3-numpy python3-requests python3-scipy python3-setuptools \&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-ruamel.yaml&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-ruamel.yaml &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libtinfo5 libncurses5&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado 2019.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado 2019.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5233:newid:5239 --&gt;
&lt;/table&gt;</summary>
		<author><name>MartinAnderseck</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5233&amp;oldid=prev</id>
		<title>MartinAnderseck: /* Dependencies (Ubuntu 20.04) */ Remove GNU Radio dependencies (not required for UHD only)</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5233&amp;oldid=prev"/>
				<updated>2021-11-01T10:54:41Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Dependencies (Ubuntu 20.04): &lt;/span&gt; Remove GNU Radio dependencies (not required for UHD only)&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:54, 1 November 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot; &gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Dependencies (Ubuntu 20.04)===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Dependencies (Ubuntu 20.04)===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo apt-get &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-y &lt;/del&gt;install autoconf automake build-essential ccache cmake cpufrequtils \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; sudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;doxygen ethtool &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;doxygen ethtool fort77 &lt;/del&gt;g++ &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;gir1.2-gtk-3.0 &lt;/del&gt;git &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;gobject-introspection gpsd gpsd-clients \&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-dev libusb-1.0-0 libusb-1.0-0-dev \&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &lt;/del&gt;inetutils-tools &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libasound2-dev &lt;/del&gt;libboost-all-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libcomedi-dev libcppunit-dev libfftw3-bin \&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libusb&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dev &lt;/ins&gt;python3-dev python3-mako python3-numpy python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;requests &lt;/ins&gt;python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;scipy &lt;/ins&gt;python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;setuptools &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; libfftw3-dev libfftw3-doc libfontconfig1-dev libgmp-dev libgps-dev libgsl-dev liblog4cpp5-dev \&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-ruamel.yaml&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &lt;/del&gt;libncurses5 libncurses5&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-dev libpulse-dev libqt5opengl5-dev libqwt-qt5-dev libsdl1.2-dev libtool \&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; libudev&lt;/del&gt;-dev libusb-1.0-0 libusb-1.0-0&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-dev libusb-dev libxi-dev libxrender-dev libzmq3&lt;/del&gt;-dev \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libzmq5 ncurses&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;bin python3-cheetah python3-click python3-click-plugins python3-click-threading \&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &lt;/del&gt;python3-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;python3-docutils python3-gi python3-gi-cairo python3-gps python3-lxml &lt;/del&gt;python3-mako &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;\&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &lt;/del&gt;python3-numpy python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;numpy-dbg &lt;/del&gt;python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;opengl &lt;/del&gt;python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pyqt5 python3-requests python3-scipy &lt;/del&gt;\&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;python3-setuptools python3-six python3-sphinx python3-yaml python3-zmq &lt;/del&gt;python3-ruamel.yaml &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;swig wget&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado 2019.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado 2019.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5232:newid:5233 --&gt;
&lt;/table&gt;</summary>
		<author><name>MartinAnderseck</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5232&amp;oldid=prev</id>
		<title>MartinAnderseck: /* Vivado 2019.1 Design Edition */ Fix typo in Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5232&amp;oldid=prev"/>
				<updated>2021-11-01T10:53:44Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Vivado 2019.1 Design Edition: &lt;/span&gt; Fix typo in Ubuntu&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:53, 1 November 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l21&quot; &gt;Line 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Please reference to Xilinx (xilinx.com) for installation instructions.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Please reference to Xilinx (xilinx.com) for installation instructions.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''Note: The dependencies step above included installing libtinfo5 libncurses5, which is a workaround for getting Vivado 2019.1 to run on &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Ubunbtu &lt;/del&gt;20.04''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;''Note: The dependencies step above included installing libtinfo5 libncurses5, which is a workaround for getting Vivado 2019.1 to run on &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Ubuntu &lt;/ins&gt;20.04''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===UHD 4.0===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===UHD 4.0===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5231:newid:5232 --&gt;
&lt;/table&gt;</summary>
		<author><name>MartinAnderseck</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5231&amp;oldid=prev</id>
		<title>MartinAnderseck: /* Dependencies (Ubuntu 20.04) */ Adding full dependencies list to align with other sources</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5231&amp;oldid=prev"/>
				<updated>2021-10-29T10:04:54Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Dependencies (Ubuntu 20.04): &lt;/span&gt; Adding full dependencies list to align with other sources&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:04, 29 October 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot; &gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Dependencies (Ubuntu 20.04)===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Dependencies (Ubuntu 20.04)===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;git &lt;/del&gt;cmake g++ libboost-all-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libgmp&lt;/del&gt;-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;swig &lt;/del&gt;\&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;sudo apt-get -y install autoconf automake build-essential ccache &lt;/ins&gt;cmake &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpufrequtils \&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;python3&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;numpy python3&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;mako python3&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sphinx python3&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;lxml &lt;/del&gt;\&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; doxygen ethtool fort77 &lt;/ins&gt;g++ &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;gir1.2-gtk-3.0 git gobject-introspection gpsd gpsd-clients \&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;doxygen libfftw3&lt;/del&gt;-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libsdl1.2&lt;/del&gt;-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libgsl&lt;/del&gt;-dev libqwt-qt5-dev \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; inetutils-tools libasound2-dev &lt;/ins&gt;libboost-all-dev &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libcomedi&lt;/ins&gt;-dev &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libcppunit-dev libfftw3-bin &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;libqt5opengl5&lt;/del&gt;-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;python3&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pyqt5 liblog4cpp5&lt;/del&gt;-dev libzmq3-dev \&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libfftw3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dev libfftw3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;doc libfontconfig1&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dev libgmp&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dev libgps-dev libgsl-dev liblog4cpp5-dev &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;yaml &lt;/del&gt;python3-click python3-click-plugins python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;zmq &lt;/del&gt;\&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libncurses5 libncurses5&lt;/ins&gt;-dev &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libpulse&lt;/ins&gt;-dev &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libqt5opengl5&lt;/ins&gt;-dev libqwt-qt5-dev &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libsdl1.2-dev libtool &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;scipy &lt;/del&gt;python3-gi python3-gi-cairo &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;gobject&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;introspection &lt;/del&gt;\&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libudev&lt;/ins&gt;-dev &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libusb&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1.0-0 libusb-1.0-0-dev libusb-dev libxi-dev libxrender&lt;/ins&gt;-dev libzmq3-dev \&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;gir1.2&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;gtk&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;3.0 build&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;essential libusb&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1.0&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;dev &lt;/del&gt;python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;docutils &lt;/del&gt;\&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;libzmq5 ncurses-bin &lt;/ins&gt;python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cheetah &lt;/ins&gt;python3-click python3-click-plugins python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;click-threading &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-setuptools python3-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ruamel.yaml python&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;is&lt;/del&gt;-python3 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;\&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dev python3-docutils &lt;/ins&gt;python3-gi python3-gi-cairo &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;gps python3-lxml python3-mako &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; libtinfo5 libncurses5&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;numpy python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;numpy&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dbg python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;opengl python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;pyqt5 python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;requests &lt;/ins&gt;python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;scipy &lt;/ins&gt;\&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; python3-setuptools python3-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;six python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;sphinx python3&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;yaml &lt;/ins&gt;python3&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-zmq python3-ruamel.yaml swig wget&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado 2019.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Vivado 2019.1 Design Edition===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5066:newid:5231 --&gt;
&lt;/table&gt;</summary>
		<author><name>MartinAnderseck</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5066&amp;oldid=prev</id>
		<title>JonathonPendlum at 08:39, 29 December 2020</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5066&amp;oldid=prev"/>
				<updated>2020-12-29T08:39:02Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 08:39, 29 December 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l161&quot; &gt;Line 161:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 161:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Example RFNoC 3 to RFNoC 4 Block Migration=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Example RFNoC 3 to RFNoC 4 Block Migration=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Attached to this article is a &lt;/del&gt;ZIP &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;file called '''''&lt;/del&gt;migration_example.zip&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;'''''. This archive &lt;/del&gt;contains equivalent RFNoC 3 and RFNoC 4 versions of a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;RFNoC Block implementing &lt;/del&gt;digital gain. The following sections &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;begin with outlining what &lt;/del&gt;files &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;were updating during &lt;/del&gt;this &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;example migration&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;This &lt;/ins&gt;ZIP &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;archive, [[File:&lt;/ins&gt;migration_example.zip&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]], &lt;/ins&gt;contains equivalent RFNoC 3 and RFNoC 4 versions of a digital gain &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;RFNoC Block&lt;/ins&gt;. The following sections &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;will refer to &lt;/ins&gt;files &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;in &lt;/ins&gt;this &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;archive to show how the file structure changes when migrating from RFNoC 3 to RFNoC 4&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=UHD Software Migration=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=UHD Software Migration=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_ettus_com:diff:version:1.11a:oldid:5064:newid:5066 --&gt;
&lt;/table&gt;</summary>
		<author><name>JonathonPendlum</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5064&amp;oldid=prev</id>
		<title>JonathonPendlum: Created page with &quot;=Abstract=  The UHD 4.0 release includes a major upgrade to the RFNoC framework called RFNoC 4. This article is a guide to aid users in migrating their existing RFNoC blocks f...&quot;</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=RFNoC_4_Migration_Guide&amp;diff=5064&amp;oldid=prev"/>
				<updated>2020-12-29T08:06:04Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;=Abstract=  The UHD 4.0 release includes a major upgrade to the RFNoC framework called RFNoC 4. This article is a guide to aid users in migrating their existing RFNoC blocks f...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Abstract=&lt;br /&gt;
&lt;br /&gt;
The UHD 4.0 release includes a major upgrade to the RFNoC framework called RFNoC 4. This article is a guide to aid users in migrating their existing RFNoC blocks from RFNoC 3 to RFNoC 4. The RFNoC Block Development Environment section provides guidance on how to setup an environment for developing out-of-tree RFNoC blocks in RFNoC 4. The UHD, FPGA, GNU Radio Migration sections provide general information on topics that most users will encounter when migrating their blocks. Finally, an equivalent RFNoC 3 and RFNoC 4 implementation of a digital gain RFNoC Block has been provided as a reference.&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
&lt;br /&gt;
===Dependencies (Ubuntu 20.04)===&lt;br /&gt;
  git cmake g++ libboost-all-dev libgmp-dev swig \&lt;br /&gt;
  python3-numpy python3-mako python3-sphinx python3-lxml \&lt;br /&gt;
  doxygen libfftw3-dev libsdl1.2-dev libgsl-dev libqwt-qt5-dev \&lt;br /&gt;
  libqt5opengl5-dev python3-pyqt5 liblog4cpp5-dev libzmq3-dev \&lt;br /&gt;
  python3-yaml python3-click python3-click-plugins python3-zmq \&lt;br /&gt;
  python3-scipy python3-gi python3-gi-cairo gobject-introspection \&lt;br /&gt;
  gir1.2-gtk-3.0 build-essential libusb-1.0-0-dev python3-docutils \&lt;br /&gt;
  python3-setuptools python3-ruamel.yaml python-is-python3 \&lt;br /&gt;
  libtinfo5 libncurses5&lt;br /&gt;
&lt;br /&gt;
===Vivado 2019.1 Design Edition===&lt;br /&gt;
&lt;br /&gt;
Please reference to Xilinx (xilinx.com) for installation instructions.&lt;br /&gt;
&lt;br /&gt;
''Note: The dependencies step above included installing libtinfo5 libncurses5, which is a workaround for getting Vivado 2019.1 to run on Ubunbtu 20.04''&lt;br /&gt;
&lt;br /&gt;
===UHD 4.0===&lt;br /&gt;
  git clone --branch UHD-4.0 https://github.com/ettusresearch/uhd.git uhd&lt;br /&gt;
  mkdir uhd/host/build; cd uhd/host/build&lt;br /&gt;
  cmake ..&lt;br /&gt;
  make&lt;br /&gt;
  sudo make install&lt;br /&gt;
&lt;br /&gt;
===GNU Radio 3.8===&lt;br /&gt;
'' Note: If your design does not use GNU Radio, then installing GNU Radio and gr-ettus is not required ''&lt;br /&gt;
&lt;br /&gt;
  git clone --branch maint-3.8 --recursive https://github.com/gnuradio/gnuradio.git gnuradio&lt;br /&gt;
  mkdir gnuradio/build; cd gnuradio/build;&lt;br /&gt;
  cmake ..&lt;br /&gt;
  make&lt;br /&gt;
  sudo make install&lt;br /&gt;
&lt;br /&gt;
===gr-ettus===&lt;br /&gt;
  git clone --branch maint-3.8-uhd4.0 https://github.com/ettusresearch/gr-ettus.git gr-ettus&lt;br /&gt;
  mkdir gr-ettus/build; cd gr-ettus/build;&lt;br /&gt;
  cmake -DENABLE_QT=True ..&lt;br /&gt;
  make&lt;br /&gt;
  sudo make install&lt;br /&gt;
&lt;br /&gt;
=RFNoC Block Development Environment=&lt;br /&gt;
&lt;br /&gt;
Two options exist for developing RFNoC blocks depending on whether the your RFNoC block integrates with GNU Radio in an out-of-tree module or if it only uses UHD’s C++ API in a standalone application. The sections below outline how to setup the development environment for each scenario.&lt;br /&gt;
&lt;br /&gt;
===Migrating a GNU Radio Out-of-Tree Module===&lt;br /&gt;
&lt;br /&gt;
The tool rfnocmodtool automates the process of creating GNU Radio out-of-tree (OOT) modules that also have support for RFNoC blocks. This tool is part of gr-ettus and it has been ported to RFNoC 4.&lt;br /&gt;
&lt;br /&gt;
Due to changes in almost every source file, it is recommended to use rfnocmodtool to generate a new RFNoC block from scratch and then update the generated “skeleton” files.&lt;br /&gt;
&lt;br /&gt;
====Creating a RFNoC Block with rfnocmodtool====&lt;br /&gt;
&lt;br /&gt;
The following steps show how to create an OOT module called ''example'' and RFNoC block called ''gain'' using rfnocmodtool. The naming is only for example purposes.&lt;br /&gt;
&lt;br /&gt;
  rfnocmodtool newmod&lt;br /&gt;
  Name of the new module: '''example'''&lt;br /&gt;
  &lt;br /&gt;
  cd rfnoc-tutorial&lt;br /&gt;
  rfnocmodtool add&lt;br /&gt;
  Enter name of block/code (without module name prefix): '''gain'''&lt;br /&gt;
  Enter valid argument list, including default arguments: ''(leave blank)''&lt;br /&gt;
  Add Python QA code? [y/N] '''N'''&lt;br /&gt;
  Add C++ QA code? [y/N] '''N'''&lt;br /&gt;
  Block NoC ID (Hexadecimal): ''(Enter Noc ID of your block)''&lt;br /&gt;
  Skip Block Controllers Generation? [UHD block ctrl files] [y/N] '''N'''&lt;br /&gt;
  Skip Block interface files Generation? [GRC block ctrl files] [y/N] '''N'''&lt;br /&gt;
&lt;br /&gt;
''Note: Noc IDs have been reduced from 64-bits in RFNoC 3 to 32-bits in RFNoC 4''&lt;br /&gt;
&lt;br /&gt;
The following are the relevant files that need to be updated when migrating your RFNoC Block.&lt;br /&gt;
&lt;br /&gt;
  rfnoc-example/&lt;br /&gt;
      grc/&lt;br /&gt;
          example_gain.block.yml           – RFNoC Block GNU Radio Companion YAML file&lt;br /&gt;
      examples/&lt;br /&gt;
          gain.grc                         – Example flowgraph using gain RFNoC Block&lt;br /&gt;
      include/tutorial/&lt;br /&gt;
          gain.h                           – GNU Radio block C++ header&lt;br /&gt;
          gain_block_ctrl.hpp              – RFNoC Block Controller C++ header&lt;br /&gt;
      lib/&lt;br /&gt;
          gain_impl.cc                     – GNU Radio block C++ source&lt;br /&gt;
          gain_impl.h                      – GNU Radio block C++ header&lt;br /&gt;
          gain_block_ctrl_impl.cpp         – RFNoC Block Controller C++ source&lt;br /&gt;
      rfnoc/blocks/&lt;br /&gt;
          gain.yml                         – RFNoC Block Description YAML file&lt;br /&gt;
      rfnoc/fpga/rfnoc_block_gain&lt;br /&gt;
          noc_shell_gain.v                 – RFNoC Block Noc Shell Verilog Source&lt;br /&gt;
          rfnoc_block_gain.v               – RFNoC Block Verilog Source&lt;br /&gt;
          rfnoc_block_gain_tb.v            – RFNoC Block Testbench&lt;br /&gt;
      rfnoc/icores&lt;br /&gt;
          gain_x310_rfnoc_image_core.yml   – Image Core YAML file with gain block&lt;br /&gt;
&lt;br /&gt;
====Building OOT module====&lt;br /&gt;
&lt;br /&gt;
  cd rfnoc-tutorial&lt;br /&gt;
  mkdir build; cd build&lt;br /&gt;
  cmake -DUHD_FPGA_DIR=''(path to uhd/fpga directory)'' ..&lt;br /&gt;
  make&lt;br /&gt;
  sudo make install&lt;br /&gt;
&lt;br /&gt;
====Running a testbench====&lt;br /&gt;
CMake automatically creates makefile targets to run the generated testbench code for each added RFNoC block. For example, here is how to run the gain block testbench:&lt;br /&gt;
&lt;br /&gt;
  cd rfnoc-tutorial/build&lt;br /&gt;
  make rfnoc_block_gain_tb&lt;br /&gt;
&lt;br /&gt;
====Building a FPGA image====&lt;br /&gt;
CMake automatically creates makefile targets to build FPGA images using the generated image core yaml files found in rfnoc/icore. Every RFNoC block created by rfnocmodtool automatically has an image core yaml file generated in that directory. For example, here is how to build an FPGA image using the image core yaml file generated for the gain block:&lt;br /&gt;
&lt;br /&gt;
  cd rfnoc-tutorial/build&lt;br /&gt;
  make gain_x310_rfnoc_image_core&lt;br /&gt;
&lt;br /&gt;
===Migrating a Standalone UHD C++ Application===&lt;br /&gt;
&lt;br /&gt;
For applications that only use the UHD API, an example out-of-tree (UHD source tree) RFNoC block exists called rfnoc-example. It is located in the UHD source at uhd/host/examples/rfnoc-example. This directory can be copied outside of the UHD source tree and used a starting point to migrate your RFNoC block.&lt;br /&gt;
&lt;br /&gt;
The following are the relevant files that need to be updated when migrating your RFNoC Block.&lt;br /&gt;
&lt;br /&gt;
  rfnoc-example/&lt;br /&gt;
      apps/&lt;br /&gt;
          init_gain_block.cpp         – Example C++ application testing gain block&lt;br /&gt;
      blocks/&lt;br /&gt;
          gain.yml                    – RFNoC Block Description YAML file&lt;br /&gt;
      fpga/rfnoc_block_gain&lt;br /&gt;
          noc_shell_gain.v            – RFNoC Block Noc Shell Verilog Source&lt;br /&gt;
          rfnoc_block_gain.v          – RFNoC Block Verilog Source&lt;br /&gt;
          rfnoc_block_gain_tb.v       – RFNoC Block Testbench&lt;br /&gt;
      icores/&lt;br /&gt;
          x310_rfnoc_image_core.yml   – Example Image Core YAML file&lt;br /&gt;
      include/rfnoc/example&lt;br /&gt;
          gain_block_control.hpp      – RFNoC Block Controller C++ header&lt;br /&gt;
      lib/&lt;br /&gt;
          gain_block_control.cpp      – RFNoC Block Controller C++ source&lt;br /&gt;
&lt;br /&gt;
====Building rfnoc-example====&lt;br /&gt;
&lt;br /&gt;
  cd rfnoc-example&lt;br /&gt;
  mkdir build; cd build&lt;br /&gt;
  cmake ..&lt;br /&gt;
  make&lt;br /&gt;
  sudo make install&lt;br /&gt;
&lt;br /&gt;
====Running a testbench====&lt;br /&gt;
CMake automatically creates makefile targets to run RFNoC Block testbench simulations. For every RFNoC block subdirectory listed in the CMakeLists.txt file in the rfnoc-example/fpga directory, a target with the RFNoC block name appended with “_tb” is added as a makefile target. For example, here is how to run the gain RFNoC block testbench:&lt;br /&gt;
&lt;br /&gt;
  cd rfnoc-example/build&lt;br /&gt;
  make rfnoc_block_gain_tb&lt;br /&gt;
&lt;br /&gt;
====Building a FPGA image====&lt;br /&gt;
CMake automatically creates makefile targets to build a FPGA image for each image core yaml file listed in the CMakeLists.txt file in the rfnoc-example/icore directory. Each image core yaml file must be listed in the CMakeLists.txt. For example, here is how to build an FPGA image using the image core yaml file generated for the gain block:&lt;br /&gt;
&lt;br /&gt;
  cd rfnoc-tutorial/build&lt;br /&gt;
  make gain_x310_rfnoc_image_core&lt;br /&gt;
&lt;br /&gt;
=Example RFNoC 3 to RFNoC 4 Block Migration=&lt;br /&gt;
&lt;br /&gt;
Attached to this article is a ZIP file called '''''migration_example.zip'''''. This archive contains equivalent RFNoC 3 and RFNoC 4 versions of a RFNoC Block implementing digital gain. The following sections begin with outlining what files were updating during this example migration.&lt;br /&gt;
&lt;br /&gt;
=UHD Software Migration=&lt;br /&gt;
&lt;br /&gt;
Migration reference files for this section from Gain RFNoC Block example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description       || RFNoC 3 Files         || RFNoC 4 Files&lt;br /&gt;
|-&lt;br /&gt;
| Block Description || rfnoc/blocks/gain.xml || lib/gain_block_ctrl_impl.cpp &amp;lt;br&amp;gt;include/example/gain_block_ctrl.hpp&lt;br /&gt;
|-&lt;br /&gt;
| Block Controller  || rfnoc/blocks/gain.yml || lib/gain_block_ctrl_impl.cpp &amp;lt;br&amp;gt;include/example/gain_block_ctrl.hpp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: Files are relative to the rfnoc-example directory in the respective rfnoc3 and rfnoc4 directories''&lt;br /&gt;
&lt;br /&gt;
===Noc Script XML Replaced by Block Description YAML===&lt;br /&gt;
&lt;br /&gt;
RFNoC 3 used Noc Script XML, a domain specific language, to describe the configuration of a RFNoC block: the Noc ID, register names and addresses, args for writing to the registers, and the input/output ports.&lt;br /&gt;
&lt;br /&gt;
RFNoC 4 replaces the Noc Script XML file with an easier to read and edit Block Description YAML file format. From a high level, the Block Description YAML file serves a similar function as the Noc Script XML file, with some similarities and key differences outlined in table below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item       || Noc Script XML              || Block Descript YAML || RFNoC 4 Notes&lt;br /&gt;
|-&lt;br /&gt;
| Block Name&lt;br /&gt;
||&lt;br /&gt;
  &amp;lt;name&amp;gt;gain&amp;lt;/name&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
  module_name: gain&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| Noc ID&lt;br /&gt;
||&lt;br /&gt;
  &amp;lt;id&amp;gt;B160000000000000&amp;lt;/id&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
  noc_id: 0xB16&lt;br /&gt;
||&lt;br /&gt;
Noc ID are limited to 32-bits&lt;br /&gt;
|-&lt;br /&gt;
| Registers&lt;br /&gt;
||&lt;br /&gt;
  &amp;lt;registers&amp;gt;&lt;br /&gt;
    &amp;lt;setreg&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;GAIN&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;address&amp;gt;128&amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;/setreg&amp;gt;&lt;br /&gt;
  &amp;lt;/registers&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
N/A&lt;br /&gt;
||&lt;br /&gt;
Registers must be defined in the Block Controller&lt;br /&gt;
|-&lt;br /&gt;
| Arguments&lt;br /&gt;
||&lt;br /&gt;
  &amp;lt;args&amp;gt;&lt;br /&gt;
    &amp;lt;arg&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;gain&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;int&amp;lt;/type&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/arg&amp;gt;&lt;br /&gt;
  &amp;lt;/args&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
N/A&lt;br /&gt;
||&lt;br /&gt;
Args are implemented with properties in the Block Controller&lt;br /&gt;
|-&lt;br /&gt;
| Data Ports&lt;br /&gt;
||&lt;br /&gt;
  &amp;lt;ports&amp;gt;&lt;br /&gt;
    &amp;lt;sink&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;in&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;/sink&amp;gt;&lt;br /&gt;
    &amp;lt;source&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;out&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;/source&amp;gt;&lt;br /&gt;
  &amp;lt;/ports&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
  data:&lt;br /&gt;
      fpga_iface: axis_pyld_ctxt&lt;br /&gt;
      clk_domain: rfnoc_chdr&lt;br /&gt;
      inputs:&lt;br /&gt;
          in:&lt;br /&gt;
             ...&lt;br /&gt;
      outputs:&lt;br /&gt;
          out:&lt;br /&gt;
             ...&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| Control Ports&lt;br /&gt;
||&lt;br /&gt;
N/A&lt;br /&gt;
||&lt;br /&gt;
  control:&lt;br /&gt;
      sw_iface: nocscript&lt;br /&gt;
      fpga_iface: ctrlport&lt;br /&gt;
      interface_direction: slave&lt;br /&gt;
      ...&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| Clocking&lt;br /&gt;
||&lt;br /&gt;
N/A&lt;br /&gt;
||&lt;br /&gt;
  clocks:&lt;br /&gt;
      - name: rfnoc_chdr&lt;br /&gt;
        freq: &amp;quot;[]&amp;quot;&lt;br /&gt;
      - name: rfnoc_ctrl&lt;br /&gt;
        freq: &amp;quot;[]&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: For a more detailed description of the RFNoC 4 Block Description YAML syntax and the various options, see the [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification].''&lt;br /&gt;
&lt;br /&gt;
===RFNoC API Changes===&lt;br /&gt;
&lt;br /&gt;
Much of the user facing RFNoC software API has not changed or remains very similar between RFNoC 3 and RFNoC 4. The table below outlines some of the notable differences:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RFNoC 3       || RFNoC 4              || RFNoC 4 Notes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  usrp = uhd::device3::make(...)&lt;br /&gt;
||&lt;br /&gt;
  graph = uhd::rfnoc::rfnoc_graph::make()&lt;br /&gt;
||&lt;br /&gt;
No longer need to create a device3 object&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  usrp-&amp;gt;get_block_ctrl(...)&lt;br /&gt;
||&lt;br /&gt;
  graph-&amp;gt;get_block(...)&lt;br /&gt;
||&lt;br /&gt;
Rename&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
N/A&lt;br /&gt;
||&lt;br /&gt;
  graph-&amp;gt;enumerate_static_connections()&lt;br /&gt;
||&lt;br /&gt;
Used to check static connections, usually for detecting hwen a DDC or DUC is statically connected to the radio and requires setting the sample&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  usrp-&amp;gt;get_tx_streamer(...)&lt;br /&gt;
||&lt;br /&gt;
  graph-&amp;gt;create_tx_streamer(...)&lt;br /&gt;
||&lt;br /&gt;
Rename&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  usrp-&amp;gt;get_rx_streamer(...)&lt;br /&gt;
||&lt;br /&gt;
  graph-&amp;gt;create_rx_streamer(...)&lt;br /&gt;
||&lt;br /&gt;
Rename&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
N/A&lt;br /&gt;
||&lt;br /&gt;
  graph-&amp;gt;commit()&lt;br /&gt;
||&lt;br /&gt;
Commit graph and run initial checks&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  sr_write(...)&lt;br /&gt;
||&lt;br /&gt;
  regs().poke32(...)&lt;br /&gt;
||&lt;br /&gt;
Address increments by 4&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  sr_read32(...)&lt;br /&gt;
||&lt;br /&gt;
  regs().peek32(...)&lt;br /&gt;
||&lt;br /&gt;
Address increments by 4&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  sr_read64(...)&lt;br /&gt;
||&lt;br /&gt;
  regs().poke64(...)&lt;br /&gt;
||&lt;br /&gt;
Address increments by 8&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  set_arg(...)&lt;br /&gt;
||&lt;br /&gt;
  set_property(...)&lt;br /&gt;
||&lt;br /&gt;
Block args replaced with block properties concept&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
  get_arg(...)&lt;br /&gt;
||&lt;br /&gt;
  get_property(...)&lt;br /&gt;
||&lt;br /&gt;
Block args replaced with block properties concept&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Block Properties===&lt;br /&gt;
&lt;br /&gt;
In RFNoC 3, RFNoC blocks can have arguments (also known as args) that are used to write user registers. This is implemented in the Noc Script XML in the &amp;lt;args&amp;gt; section.&lt;br /&gt;
&lt;br /&gt;
RFNoC 4 expands and generalizes this concept with block properties: a high-level representation of the state of the block. Zero or more properties can be defined by the user in their RFNoC Block’s Block Controller C++ class. When read or written to, they can trigger a call back to a user defined resolver function. The [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification] provides more details on properties in the “Block Properties” section.&lt;br /&gt;
&lt;br /&gt;
The following shows an example of how to migrate a RFNoC 3 Noc Script XML “arg” based register write to a RFNoC 4 property based implementation in the Block Controller:&lt;br /&gt;
&lt;br /&gt;
====RFNoC 3 Noc Script XML snippet====&lt;br /&gt;
  &amp;lt;registers&amp;gt;&lt;br /&gt;
    &amp;lt;setreg&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;GAIN&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;address&amp;gt;128&amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;/setreg&amp;gt;&lt;br /&gt;
  &amp;lt;/registers&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;args&amp;gt;&lt;br /&gt;
    &amp;lt;arg&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;gain&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;int&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;&lt;br /&gt;
      &amp;lt;check&amp;gt;GE($gain, 0) AND LE($gain, 32767)&amp;lt;/check&amp;gt;&lt;br /&gt;
      &amp;lt;check_message&amp;gt;Gain must be in the range [0, 32767]&amp;lt;/check_message&amp;gt;&lt;br /&gt;
      &amp;lt;action&amp;gt;SR_WRITE(&amp;quot;GAIN&amp;quot;, $gain)&amp;lt;/action&amp;gt;&lt;br /&gt;
    &amp;lt;/arg&amp;gt;&lt;br /&gt;
  &amp;lt;/args&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====RFNoC 4 Block Controller Class====&lt;br /&gt;
&lt;br /&gt;
  // &amp;lt;registers&amp;gt;&lt;br /&gt;
  //    &amp;lt;setreg&amp;gt;&lt;br /&gt;
  //      &amp;lt;name&amp;gt;GAIN&amp;lt;/name&amp;gt;&lt;br /&gt;
  //      &amp;lt;address&amp;gt;128&amp;lt;/address&amp;gt;&lt;br /&gt;
  //    &amp;lt;/setreg&amp;gt;&lt;br /&gt;
  // &amp;lt;/registers&amp;gt;&lt;br /&gt;
  // Note: In RFNoC 4, register addresses can start at address 0 instead of address 128 as in RFNoC 3.&lt;br /&gt;
  const uint32_t gain_block_ctrl::REG_GAIN_ADDR = 128;&lt;br /&gt;
  const uint32_t gain_block_ctrl::REG_GAIN_DEFAULT = 1;&lt;br /&gt;
  &lt;br /&gt;
  class gain_block_ctrl_impl : public gain_block_ctrl&lt;br /&gt;
  {&lt;br /&gt;
  public:&lt;br /&gt;
      RFNOC_BLOCK_CONSTRUCTOR(gain_block_ctrl)&lt;br /&gt;
      {&lt;br /&gt;
          _register_props();&lt;br /&gt;
      }&lt;br /&gt;
  private:&lt;br /&gt;
      void _register_props()&lt;br /&gt;
      {&lt;br /&gt;
          register_property(&amp;amp;_user_reg, [this]() {&lt;br /&gt;
              int user_reg = this-&amp;gt;_user_reg.get();&lt;br /&gt;
              // &amp;lt;check&amp;gt;GE($gain, 0) AND LE($gain, 32767)&amp;lt;/check&amp;gt;&lt;br /&gt;
              // &amp;lt;check_message&amp;gt;Gain must be in the range [0, 32767]&amp;lt;/check_message&amp;gt;&lt;br /&gt;
              if (user_reg &amp;lt; 0 || user_reg &amp;gt; 32767) {&lt;br /&gt;
                  throw uhd::value_error(&amp;quot;Size value must be in [0,32767]&amp;quot;);&lt;br /&gt;
              }&lt;br /&gt;
              // &amp;lt;action&amp;gt;SR_WRITE(&amp;quot;GAIN&amp;quot;, $gain)&amp;lt;/action&amp;gt;&lt;br /&gt;
              this-&amp;gt;regs().poke32(REG_USER_ADDR, user_reg);&lt;br /&gt;
          });&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
  // &amp;lt;name&amp;gt;gain&amp;lt;/name&amp;gt;&lt;br /&gt;
  // &amp;lt;type&amp;gt;int&amp;lt;/type&amp;gt;&lt;br /&gt;
  // &amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;&lt;br /&gt;
  property_t&amp;lt;int&amp;gt; _user_reg{&amp;quot;gain&amp;quot;, REG_USER_DEFAULT, {res_source_info::USER}};&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
As the above shows, writing to a register can be replicated with a property and a resolver function. Of course, the resolver function can also be made much more sophisticated. For additional examples, see the in-tree block controllers in uhd/host/lib/rfnoc.&lt;br /&gt;
&lt;br /&gt;
=FPGA Migration=&lt;br /&gt;
&lt;br /&gt;
Migration reference files for this section from Gain RFNoC Block example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description        || RFNoC 3 Files                                       || RFNoC 4 Files&lt;br /&gt;
|-&lt;br /&gt;
| Block Verilog Code || rfnoc/fpga-src/noc_block_gain.v                     || rfnoc/fpga/rfnoc_block_gain/rfnoc_block_gain.v&lt;br /&gt;
|-&lt;br /&gt;
| Block Noc Shell    || N/A                                                 || rfnoc/fpga/rfnoc_block_gain/noc_shell_gain.v&lt;br /&gt;
|-&lt;br /&gt;
| Block Testbnech    || rfnoc/testbench/noc_block_gain/noc_block_gain_tb.sv || rfnoc/fpga/rfnoc_block_gain/rfnoc_block_gain_tb.sv&lt;br /&gt;
|-&lt;br /&gt;
| Image Core         || N/A                                                 || rfnoc/icores/gain_x310_rfnoc_image_core.yml&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: Files are relative to the rfnoc-example directory in the respective rfnoc3 and rfnoc4 directories''&lt;br /&gt;
&lt;br /&gt;
===Noc Shell Changes===&lt;br /&gt;
&lt;br /&gt;
RFNoC 4 replaces the highly parameterized RFNoC 3 Noc Shell with a per-block customized Noc Shell generated from the block’s Block Description YAML file. The Noc Shell generated via rfnocmodtool or the existing one in rfnoc-example is acceptable for most blocks that require one input and output data port.&lt;br /&gt;
&lt;br /&gt;
====Generating a Custom Noc Shell====&lt;br /&gt;
&lt;br /&gt;
Some blocks may need multiple data ports or other modifications. This requires editing the Block Description YAML file and then using the Python script rfnoc_create_verilog.py (found in uhd/host/utils/rfnoc_blocktool) to generate a new Noc Shell instance.&lt;br /&gt;
&lt;br /&gt;
The argument “-c” is used to provide the YAML file location. “-d” provides the output destination directory.&lt;br /&gt;
&lt;br /&gt;
''Note: It is suggested to not set the destination directory to your existing RFNoC block code, as the script will automatically overwrite the existing code!''&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
  rfnoc_create_verilog.py -c ./rfnoc-example/rfnoc/blocks/gain.yml -d ./output/&lt;br /&gt;
&lt;br /&gt;
====Changing Noc ID without using rfnoc_create_verilog====&lt;br /&gt;
&lt;br /&gt;
In the generated Noc Shell Verilog code, a block’s Noc ID can be changed by updating the NOC_ID parameter on the ''backend_iface'' module. Make sure this matches the Noc ID in both the Block Description YAML file and Block Controller C++ code.&lt;br /&gt;
&lt;br /&gt;
====Goodbye AXI Wrapper====&lt;br /&gt;
&lt;br /&gt;
The RFNoC 3 version of Noc Shell outputs / accepts CHDR data packets consisting of a header, optional timestamp, and payload on a 64-bit AXI stream bus. Most designs then used a module called AXI Wrapper to handle the conversion between CHDR data packets and sample streams on a 32-bit AXI stream bus. AXI Wrapper also supported SIMPLE_MODE which for some use cases could transparently handle the header portion of the CHDR data packet. Otherwise, the user would need to set the header via m_axis_data_tuser.&lt;br /&gt;
&lt;br /&gt;
In RFNoC 4, Noc Shell has absorbed AXI Wrapper’s functionality. Noc Shell outputs two AXI stream buses per input / output port: a payload and context bus. The payload bus is in most cases identical to AXI Wrapper’s output: a 32-bit stream of samples on an AXI Stream bus with packets delimited by tlast. The context AXI stream bus carries the header, optional timestamp, and optional metadata. If your block used AXI Wrapper’s SIMPLE_MODE, then you can loop the context bus back into Noc Shell. If not, you will need to modify the context bus data. Refer to the [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification] for the format and timing diagram of the context bus.&lt;br /&gt;
&lt;br /&gt;
''Important Note: If your block used the AXI Rate Change module, Noc Shell has another data port mode to support this use case called '''axis_data''' that can be set in the Block Descriptor YAML file (see the fpga_iface entry). This mode causes the Noc Shell data ports to look more like AXI Wrapper’s and therefore makes them compatible with AXI Rate Change. See the DDC, DUC, or Keep One in N RFNoC Blocks for an example.''&lt;br /&gt;
&lt;br /&gt;
===Settings Bus replaced by CtrlPort===&lt;br /&gt;
&lt;br /&gt;
CtrlPort replaces the Settings Bus in RFNoC 4. The CtrlPort bus is similar to the Settings Bus with a few key differences. The table below compares the signaling between the two bus formats and provides notes on any differences. Timing diagrams and additional information on the CtrlPort bus is also available in the [https://files.ettus.com/app_notes/RFNoC_Specification.pdf RFNoC Specification].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Settings Bus (RFNoC 3) || CtrlPort (RFNoC 4)                              || RFNoC 4 Notes&lt;br /&gt;
|-&lt;br /&gt;
| set_stb                || ctrlport_reg_wr                                 || Write strobe&lt;br /&gt;
|-&lt;br /&gt;
| set_addr               || ctrlport_req_addr                               || 20-bits instead of 8-bits, increments by 4 instead of by 1, no reserved addresses (versus addresses 0-127 for Settings Bus)&lt;br /&gt;
|-&lt;br /&gt;
| set_data               || ctrlport_req_data                               || Write data&lt;br /&gt;
|-&lt;br /&gt;
| N/A                    || ctrlport_req_rd                                 || Read strobe equivalent of ctrlport_req_wr&lt;br /&gt;
|-&lt;br /&gt;
| rb_addr                || N/A                                             || CtrlPort uses ctrlport_req_addr for both '''read and write''' addresses&lt;br /&gt;
|-&lt;br /&gt;
| rb_data                || ctrlport_resp_data                              || Read data, 32-bits instead of 64-bits&lt;br /&gt;
|-&lt;br /&gt;
| rb_stb                 || N/A                                             || CtrlPort requires ack strobe for '''reads and writes'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One additional difference when using CtrlPort is that there is not an equivalent Settings Register module. The bus is simple enough to setup a clocked process to handle reading from and writing to registers. See the Verilog example below:&lt;br /&gt;
&lt;br /&gt;
  // Note: Register addresses increment by 4&lt;br /&gt;
  localparam REG_USER_ADDR    = 0; // Address for example user register&lt;br /&gt;
  localparam REG_USER_DEFAULT = 0; // Default value for user register&lt;br /&gt;
  &lt;br /&gt;
  reg [31:0] reg_user = REG_USER_DEFAULT;&lt;br /&gt;
  &lt;br /&gt;
  always @(posedge ctrlport_clk) begin&lt;br /&gt;
    if (ctrlport_rst) begin&lt;br /&gt;
      reg_user = REG_USER_DEFAULT;&lt;br /&gt;
    end else begin&lt;br /&gt;
      // Default assignment&lt;br /&gt;
      m_ctrlport_resp_ack &amp;lt;= 0;&lt;br /&gt;
  &lt;br /&gt;
      // Read user register&lt;br /&gt;
      if (m_ctrlport_req_rd) begin // Read request&lt;br /&gt;
        case (m_ctrlport_req_addr)&lt;br /&gt;
          REG_USER_ADDR: begin&lt;br /&gt;
            m_ctrlport_resp_ack  &amp;lt;= 1;&lt;br /&gt;
            m_ctrlport_resp_data &amp;lt;= reg_user;&lt;br /&gt;
          end&lt;br /&gt;
        endcase&lt;br /&gt;
      end&lt;br /&gt;
  &lt;br /&gt;
      // Write user register&lt;br /&gt;
      if (m_ctrlport_req_wr) begin // Write requst&lt;br /&gt;
        case (m_ctrlport_req_addr)&lt;br /&gt;
          REG_USER_ADDR: begin&lt;br /&gt;
            m_ctrlport_resp_ack &amp;lt;= 1;&lt;br /&gt;
            reg_user            &amp;lt;= m_ctrlport_req_data[31:0];&lt;br /&gt;
          end&lt;br /&gt;
        endcase&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
''Important Note: For blocks that make heavy use of the Settings Bus and/or Settings Registers, there is a CtrlPort to Settings Bus bridge available called '''ctrlport_to_settings_bus'''. See the Keep One In N RFNoC Block for example code on how to interface with it.''&lt;br /&gt;
&lt;br /&gt;
===Testbench Infrastructure===&lt;br /&gt;
&lt;br /&gt;
While RFNoC 4 does overhaul the RFNoC 3 testbench infrastructure API, most of the high level concepts remain the same. The table below outlines some of the commonly used RFNoC 3 functions / code and the RFNoC 4 equivalent.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Operation                || RFNoC 3                                                       || RFNoC 4&lt;br /&gt;
|-&lt;br /&gt;
| Setup RFNoC&lt;br /&gt;
||&lt;br /&gt;
  `RFNOC_SIM_INIT(...)&lt;br /&gt;
  `RFNOC_ADD_BLOCK(...)&lt;br /&gt;
  `RFNOC_CONNECT(...)&lt;br /&gt;
||&lt;br /&gt;
  RfnocBlockCtrlBfm #(...) blk_ctrl = new(...);&lt;br /&gt;
  blk_ctrl.connect_master_data_port(...)&lt;br /&gt;
  blk_ctrl.connect_slave_data_port(...)&lt;br /&gt;
''Note: Instantiate one Block Controller BFM per RFNoC Block''&lt;br /&gt;
|-&lt;br /&gt;
| Setup Test Cases&lt;br /&gt;
||&lt;br /&gt;
  `TEST_CASE_START(...)&lt;br /&gt;
  `TEST_CASE_DONE(...)&lt;br /&gt;
||&lt;br /&gt;
  test.start_test(...)&lt;br /&gt;
  test.end_test()&lt;br /&gt;
|-&lt;br /&gt;
| Register Read&lt;br /&gt;
||&lt;br /&gt;
  tb_streamer.read_reg(...)&lt;br /&gt;
||&lt;br /&gt;
  blk_ctrl.reg_read(...)&lt;br /&gt;
|-&lt;br /&gt;
| Register Write&lt;br /&gt;
||&lt;br /&gt;
  tb_streamer.write_reg(...)&lt;br /&gt;
||&lt;br /&gt;
  blk_ctrl.reg_write(...)&lt;br /&gt;
|-&lt;br /&gt;
| Send Data / Samples&lt;br /&gt;
||&lt;br /&gt;
  tb_streamer.send(...)&lt;br /&gt;
||&lt;br /&gt;
  blk_ctrl.send_items(...)&lt;br /&gt;
|-&lt;br /&gt;
| Receive Data / Samples&lt;br /&gt;
||&lt;br /&gt;
  tb_streamer.recv(...)&lt;br /&gt;
||&lt;br /&gt;
  blk_ctrl.recv_items(...)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Building FPGA images using Image Core YAML Files===&lt;br /&gt;
&lt;br /&gt;
RFNoC 4 replaces uhd_image_builder, the RFNoC 3 FPGA image building tool, with a new tool called rfnoc_image_builder. This tool produces a FPGA bitstream based on an Image Core YAML file that describes the device configuration (e.g. X310 with dual 10GigE) and included RFNoC blocks along with their connections (both static and dynamic), clocking, and I/O.&lt;br /&gt;
&lt;br /&gt;
Both rfnocmodtool and the UHD in-tree example called rfnoc-example automatically setup make targets to handle running rfnoc_image_builder. If you want to use rfnoc_image_builder directly, more details can be found in the [https://kb.ettus.com/Getting_Started_with_RFNoC_in_UHD_4.0 Getting Started with RFNoC in UHD 4.0].&lt;br /&gt;
&lt;br /&gt;
=GNU Radio Software Migration=&lt;br /&gt;
&lt;br /&gt;
RFNoC 4 supports GNU Radio 3.8 only. Most of your RFNoC Block’s GNU Radio related changes will be due to API differences between GNU Radio 3.7 to 3.8. These changes are outside of the scope of this article. Instead, refer to [https://wiki.gnuradio.org/index.php/GNU_Radio_3.8_OOT_Module_Porting_Guide GNU Radio 3.8 Migration Guide] and [https://wiki.gnuradio.org/index.php/YAML_GRC GNU Radio Companion YAML] sites for more information.&lt;br /&gt;
&lt;br /&gt;
Migration reference files for this section from Gain RFNoC Block example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description              || RFNoC 3 Files                                                 || RFNoC 4 Files&lt;br /&gt;
|-&lt;br /&gt;
| GNU Radio Block          || lib/gain_impl.cc&amp;lt;br&amp;gt;lib/gain_impl.h&amp;lt;br&amp;gt;include/example/gain.h || lib/gain_impl.cc&amp;lt;br&amp;gt;lib/gain_impl.h&amp;lt;br&amp;gt;include/example/gain.h&lt;br /&gt;
|-&lt;br /&gt;
| GRC Block Description    || grc/gain.xml                                                  || grc/gain.yml&lt;br /&gt;
|-&lt;br /&gt;
| Example GRC Flowgraph    || examples/gain.grc                                             || examples/gain.grc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: Files are relative to the rfnoc-example directory in the respective rfnoc3 and rfnoc4 directories''&lt;br /&gt;
&lt;br /&gt;
===RX &amp;amp; TX Streamer Blocks===&lt;br /&gt;
&lt;br /&gt;
When transition between a RFNoC block and a GNU Radio block or vice versa, you must insert either a RX stream or TX streamer block respectively. This differs from RFNoC 3, where a RFNoC block could be directly connected to a GNU Radio block.&lt;br /&gt;
&lt;br /&gt;
[[File:rx_tx_streamer.png|border]]&lt;br /&gt;
&lt;br /&gt;
===Setting RFNoC Block Properties Directly in GNU Radio===&lt;br /&gt;
&lt;br /&gt;
The base class for RFNoC Block’s in GNU Radio have a set of functions that provide a shortcut to getting and setting properties without writing custom class methods. The table below lists the functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property Type     || Set Property             || Get Property&lt;br /&gt;
|-&lt;br /&gt;
| Integer           || set_int_property(...)    || get_int_property(...)&lt;br /&gt;
|-&lt;br /&gt;
| Double            || set_double_property(...) || get_double_property(...)&lt;br /&gt;
|-&lt;br /&gt;
| Bool              || set_bool_property(...)   || get_bool_property(...)&lt;br /&gt;
|-&lt;br /&gt;
| String            || set_string_property(...) || get_string_property(...)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Example code for GNU Radio Companion YAML Block Description file'''&lt;br /&gt;
  templates:&lt;br /&gt;
    imports: |-&lt;br /&gt;
      import example&lt;br /&gt;
    make: |-&lt;br /&gt;
      example.gain(&lt;br /&gt;
        self.rfnoc_graph,&lt;br /&gt;
        uhd.device_addr(${block_args}),&lt;br /&gt;
        ${device_select},&lt;br /&gt;
        ${instance_select})&lt;br /&gt;
      self.${id}.set_int_property('gain', ${gain})&lt;br /&gt;
    callbacks:&lt;br /&gt;
    - set_int_property('gain', ${gain})&lt;/div&gt;</summary>
		<author><name>JonathonPendlum</name></author>	</entry>

	</feed>