{"id":627,"date":"2020-05-27T14:09:57","date_gmt":"2020-05-27T14:09:57","guid":{"rendered":"http:\/\/fpganow.com\/?p=627"},"modified":"2020-05-27T14:09:57","modified_gmt":"2020-05-27T14:09:57","slug":"labview-fpga-everywhere","status":"publish","type":"post","link":"https:\/\/fpganow.com\/index.php\/2020\/05\/27\/labview-fpga-everywhere\/","title":{"rendered":"LabVIEW FPGA Everywhere"},"content":{"rendered":"\n<p>Now you can run LabVIEW FPGA on the hardware of your choice with the new &#8220;LabVIEW FPGA IP Export Utility&#8221;.\u00a0<\/p>\n<p>That sounds great, but what&#8217;s that got to do with me? (quoting Rambo 3)<\/p>\n<h2><strong>Step 1 &#8211; Pick a non-National Instruments FPGA Board<\/strong><\/h2>\n<p>You will have to pick a non-National Instruments FPGA board that has an FPGA that uses <span style=\"color: #ff0000;\"><strong>Vivado<\/strong><\/span> (7 Series devices and above) and has a corresponding LabVIEW FPGA board that uses a device of the same family.\u00a0 What does same family mean? Well, a Virtex-7 chip such as the VX485T has the same family as the VX690T.<\/p>\n<p>If you want to run LabVIEW on other hardware, you will have to pay for and upgrade to the premium version of this tool which exports to VHDL source code.\u00a0 (This does not appear to be available yet, as per the documentation they request that you email them.\u00a0 As for me? I am happy with the encrypted netlist for now, because it keeps things simpler and will allow for easier licensing.)<\/p>\n<p>For this post, I am going to select the <strong>NetFPGA-1G-CML Kinex-7 FPGA Development Board<\/strong>, which has a <strong>Xilinx Kintex-7 XC7K325T FPGA<\/strong>.\u00a0 See:<\/p>\n<p><a href=\"https:\/\/netfpga.org\/site\/#\/systems\/2netfpga-1g-cml\/details\/\">https:\/\/netfpga.org\/site\/#\/systems\/2netfpga-1g-cml\/details\/<\/a><\/p>\n<p>Retails for <strong>$1,499.00<\/strong><\/p>\n<p><a href=\"https:\/\/store.digilentinc.com\/netfpga-1g-cml-kintex-7-fpga-development-board\/\">https:\/\/store.digilentinc.com\/netfpga-sume-virtex-7-fpga-development-board\/<\/a><\/p>\n<h2><strong>Step 2 &#8211; Pick a Corresponding National Instruments Board<\/strong><\/h2>\n<p>Now that you have selected the Xilinx FPGA Family that you want to use, now you have to select a National Instruments board that uses the same FPGA family, which means Kintex-7.<\/p>\n<p>This page has a list of Xilinx FPGA&#8217;s and corresponding National Instruments Boards:<\/p>\n<p><a href=\"https:\/\/www.ni.com\/en-us\/support\/documentation\/supplemental\/18\/xilinx-fpga-chips-for-national-instruments-rio-devices.html\">https:\/\/www.ni.com\/en-us\/support\/documentation\/supplemental\/18\/xilinx-fpga-chips-for-national-instruments-rio-devices.html<\/a><\/p>\n<p>I will be selecting the <strong>PXIe-7868R<\/strong> board.<\/p>\n<h2><strong>Step 3 &#8211; Create a LabVIEW Project using this board<\/strong><\/h2>\n<p>Create a project with the PXIe-7858R board as one of its targets, and make a very simple top-level vi.\u00a0 Here is a very simple VI Snippet:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"438\" height=\"282\" src=\"http:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/top-level-snippet.png\" alt=\"\" class=\"wp-image-628\" srcset=\"https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/top-level-snippet.png 438w, https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/top-level-snippet-300x193.png 300w\" sizes=\"auto, (max-width: 438px) 100vw, 438px\" \/><\/figure>\n\n\n\n<h2><strong>Step 4 &#8211; Create a Build Specification<\/strong><\/h2>\n<p>Right-click on the top-level vi and select &#8216;Create Build Specification&#8217;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"656\" height=\"824\" src=\"http:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Create-Build-Specification.png\" alt=\"\" class=\"wp-image-637\" srcset=\"https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Create-Build-Specification.png 656w, https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Create-Build-Specification-239x300.png 239w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/figure>\n\n\n\n<p>And after you should see:<\/p>\n<p>\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"620\" src=\"http:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/After-Create-Build-Specification.png\" alt=\"\" class=\"wp-image-638\" srcset=\"https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/After-Create-Build-Specification.png 650w, https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/After-Create-Build-Specification-300x286.png 300w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/figure>\n\n\n\n<h2><strong>Step 5 &#8211; Create a Netlist Export<\/strong><\/h2>\n<p>A new option is available under the right-click menu of the build specification called &#8220;Export to Netlist&#8221;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"851\" src=\"http:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Export-to-Netlist.png\" alt=\"\" class=\"wp-image-639\" srcset=\"https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Export-to-Netlist.png 638w, https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Export-to-Netlist-225x300.png 225w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/figure>\n\n\n\n<p>It runs the first steps that it normally does when you synthesize an FPGA project:<\/p>\n<p>\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"847\" height=\"435\" src=\"http:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Exporting-to-Netlist.png\" alt=\"\" class=\"wp-image-640\" srcset=\"https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Exporting-to-Netlist.png 847w, https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Exporting-to-Netlist-300x154.png 300w, https:\/\/fpganow.com\/wp-content\/uploads\/2020\/05\/Exporting-to-Netlist-768x394.png 768w\" sizes=\"auto, (max-width: 847px) 100vw, 847px\" \/><\/figure>\n\n\n\n<p>Be careful, the window just disappears and expects you to know where the netlist will be saved. (Hey, that&#8217;s much better than them sitting on it internally and not releasing it.\u00a0 And, this is one of those RTFM issues anyway&#8230;)<\/p>\n<p>C:\\NIFPGA\\compilation\\ipexport-simple_FPGATarget_&lt;random text&gt;<\/p>\n<p>In my case, there is a Vivado Checkpoint file and a wrapper VHD file.<\/p>\n<p>The code looks pretty cool.\u00a0 And remember the most important thing &#8211; <span style=\"color: #ff0000;\">ACTIVE HIGH<\/span>!<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>NiFpgaIPWrapper_pxie7868_dash_Top_dash_Level.vhd<\/strong><\/span><\/p>\n<p><code>-- VHDL wrapper for NiFpgaAG_pxie7868_dash_Top_dash_Level<\/code><br \/><code>-- Generated by LabVIEW FPGA IP Export Utility<\/code><br \/><code>--<\/code><br \/><code>-- Ports:<\/code><br \/><code>-- reset : Reset port. Minimum assertion length: 1 base clock cycles.<\/code><br \/><code>-- Minimum de-assertion length: 40 base clock cycles.<\/code><br \/><code>-- enable_in : Enable in port. Minimum re-initialization length: 7 base clock cycles.<\/code><br \/><code>-- enable_out : Enable out port.<\/code><br \/><code>-- enable_clr : Enable clear port.<\/code><br \/><code>-- ctrlind_00_B : Top level control \"B\", sync to Clk40, u32<\/code><br \/><code>-- ctrlind_01_A : Top level control \"A\", sync to Clk40, u32<\/code><br \/><code>-- ctrlind_02_SUM : Top level indicator \"SUM\", sync to Clk40, u32<\/code><br \/><code>-- Clk40 : Clock \"40 MHz Onboard Clock\", nominal frequency 40.00 MHz, base clock<\/code><\/p>\n<p><code>library ieee;<\/code><br \/><code>use ieee.std_logic_1164.all;<\/code><\/p>\n<p><code>entity NiFpgaIPWrapper_pxie7868_dash_Top_dash_Level is<\/code><br \/><code>port (<\/code><br \/><code>reset : in std_logic;<\/code><br \/><code>enable_in : in std_logic;<\/code><br \/><code>enable_out : out std_logic;<\/code><br \/><code>enable_clr : in std_logic;<\/code><br \/><code>ctrlind_00_B : in std_logic_vector(31 downto 0);<\/code><br \/><code>ctrlind_01_A : in std_logic_vector(31 downto 0);<\/code><br \/><code>ctrlind_02_SUM : out std_logic_vector(31 downto 0);<\/code><br \/><code>Clk40 : in std_logic<\/code><br \/><code>);<\/code><br \/><code>end NiFpgaIPWrapper_pxie7868_dash_Top_dash_Level;<\/code><\/p>\n<p><code>architecture vhdl_labview of NiFpgaIPWrapper_pxie7868_dash_Top_dash_Level is<\/code><\/p>\n<p><code>component NiFpgaAG_pxie7868_dash_Top_dash_Level<\/code><br \/><code>port (<\/code><br \/><code>reset : in std_logic;<\/code><br \/><code>enable_in : in std_logic;<\/code><br \/><code>enable_out : out std_logic;<\/code><br \/><code>enable_clr : in std_logic;<\/code><br \/><code>ctrlind_00_B : in std_logic_vector(31 downto 0);<\/code><br \/><code>ctrlind_01_A : in std_logic_vector(31 downto 0);<\/code><br \/><code>ctrlind_02_SUM : out std_logic_vector(31 downto 0);<\/code><br \/><code>Clk40 : in std_logic;<\/code><br \/><code>tDiagramEnableOut : in std_logic<\/code><br \/><code>);<\/code><br \/><code>end component;<\/code><\/p>\n<p><code>begin<\/code><br \/><code>MyLabVIEWIP : NiFpgaAG_pxie7868_dash_Top_dash_Level<\/code><br \/><code>port map(<\/code><br \/><code>reset =&gt; reset,<\/code><br \/><code>enable_in =&gt; enable_in,<\/code><br \/><code>enable_out =&gt; enable_out,<\/code><br \/><code>enable_clr =&gt; enable_clr,<\/code><br \/><code>ctrlind_00_B =&gt; ctrlind_00_B,<\/code><br \/><code>ctrlind_01_A =&gt; ctrlind_01_A,<\/code><br \/><code>ctrlind_02_SUM =&gt; ctrlind_02_SUM,<\/code><br \/><code>Clk40 =&gt; Clk40,<\/code><br \/><code>tDiagramEnableOut =&gt; '1'<\/code><br \/><code>);<\/code><\/p>\n<p><code>end vhdl_labview;<\/code><\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Now you can run LabVIEW FPGA on the hardware of your choice with the new &#8220;LabVIEW FPGA IP Export Utility&#8221;.\u00a0 That sounds great, but what&#8217;s that got to do with me? (quoting Rambo 3) Step 1 &#8211; Pick a non-National Instruments FPGA Board You will have to pick a non-National Instruments FPGA board that has &#8230; <a title=\"LabVIEW FPGA Everywhere\" class=\"read-more\" href=\"https:\/\/fpganow.com\/index.php\/2020\/05\/27\/labview-fpga-everywhere\/\" aria-label=\"Read more about LabVIEW FPGA Everywhere\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-627","post","type-post","status-publish","format-standard","hentry","category-uncategorized","masonry-post","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50"],"_links":{"self":[{"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/posts\/627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/comments?post=627"}],"version-history":[{"count":6,"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/posts\/627\/revisions"}],"predecessor-version":[{"id":687,"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/posts\/627\/revisions\/687"}],"wp:attachment":[{"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/media?parent=627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/categories?post=627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fpganow.com\/index.php\/wp-json\/wp\/v2\/tags?post=627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}