LabVIEW FPGA精华:利用LabVIEW+Adept驱动实现FPGA芯片的bit文件动态加载运行

1、问题由来
众所周知,NI的各类FPGA板卡和控制器都支持LabVIEW上位机动态加载各种不同的FPGA bit可执行文件,相比较传统的FPGA程序下载方式要方便太多,这是因为传统的FPGA bit文件下载通常都是手动通过IMPACT.exe或者Vivado软件来操作的,虽然一定程度上可以通过CMD来实现,但总归还是没有一套统一的子函数或者子VI让用户将这个FPGA bit文件动态选择下载功能集成到自己的项目应用中。
比如产线上,我们经常需要远程通过上位机动态地给FPGA芯片加载不同的bit文件来执行想要的逻辑程序以实现不同的功能;再比如,很多军工项目,一个FPGA即使容量再大,也不可能将所有的算法代码都编译到一个bit文件里面,此时,用户一般会选择分块实现不同的功能,模块化编程,逐一编译生成不同的bit文件进行动态加载测试。
所以,综上所述,我们非常需要一个通用的FPGA下载器接口函数来完成对FPGA芯片bit程序的动态选择、下载、加载、启动和运行。因为传统的FPGA bit文件手动下载方式已经跟不上实际的FPGA项目和产品需要时刻更新升级的时代发展了。
2、如何解决
那么上面的这个问题该怎么解决呢?NI之所以能够实现FPGA芯片里面的bit文件动态下载,是因为NI的每个FPGA板卡上面都做了复杂的下载和通信电路,但是我们广大的传统嵌入式FPGA开发板往往都是一个裸板,上面只有最核心的FPGA和外围电路,好一点的像Digilent公司开发的FPGA板子一般还把JTAG下载器集成到上面了。
我们找到了一种最简单最廉价又不需要改动FPGA板子的方式来实现动态选择下载加载FPGA bit文件。那就是,选择Digilent公司开发的HS1/HS2/HS3这类非常便宜的FPGA JTAG下载器,目前国内的FPGA下载器基本上仿的都是他们家的,因为这种下载器要比Xilinx原厂方案的便宜很多,因为只需要一个FT232H和EEPROM芯片即可实现Xilinx下载器所有的功能。
目前,淘宝上有很多这种山寨版的Digilent HS系列下载器,大家可以自己购买,后面实验环节我们选择的是黑金提供的高仿Digilent HS红色下载器,如图1所示;并且黑金的AX7020 ZYNQ开发板上集成了这个HS下载器电路,其他的FPGA开发板没有集成,需要单独购买一个。

对于一般的用户来说,买一个单独的几十元下载器就可以了,但是对于想要开发出类似NI的FPGA RIO产品的客户来说,肯定是希望像NI一样,将这个下载器一步到位,直接集成到自己的FPGA板卡上面,比如做成标准的USB或者PCIe或者PXIe板卡,同时具备动态下载加载FPGA bit文件的功能。
好消息是什么呢?现在大家随便百度一下(Digilent FPGA HS下载器破解),就能看到Digilent的HS系列下载器已经被破解的很彻底了,而且GitHub上面就有这3款下载器的SCH原理图和PCB电路板,并且EEPROM里面的固件代码也提供了,如图2所示(https://github.com/LE-TOM/JTAG-HS3)。

所以大家可以近乎0成本的将FPGA HS1/HS2/HS3下载器电路直接集成到自己的FPGA板子上,而且几乎不占用多少电路,因为FT232H这款芯片封装很小,不像Xilinx原厂的下载器,里面有一颗Xilinx公司好大的CPLD和Cypress公司的USB芯片。
对于要求不高的散户来说,直接买一个单独的几十元的高仿的Digilent HS下载器更简单省事,对于想要提高FPGA板卡的实际用户体验和开发效率,可以选择将下载器集成到自己的FPGA板子上面。
下载器我们找到了,下一步就是这款Digilent的HS系列下载器的驱动DLL能不能被上位机软件调用了。如果直接去研究JTAG底层协议,那无疑是海量的工程,所以,Digilent公司专门开发了一个中间层驱动和配套的可视化软件Adept,大家可以到Digilent公司官网上直接搜索Adept,然后下载最新版本的软件即可,如图3所示(https://reference.digilentinc.com/software/adept/start?redirect=1)。感兴趣的用户可以自行了解一下Adept软件,后面我们会提供LabVIEW直接调用Adept DLL来实现对FPGA bit文件的动态加载运行。

现在,万事俱备,就差怎么实现,在接下来的第3部分,我们会详细给用户讲解具体的实现过程。
3、实现过程
1)首先,需要从Digilent公司官网上将最新的Adept软件下载下来,比如上面图3中显示的V2.21.2版本,这个版本看名称应该是21年2月份最新版的了,而我们平时安装的ISE 14.7和Vivado 2014.4里面自带的Adept软件版本会比较低,一般是2.15.3,就是15年3月份出的。建议大家安装新版本,因为新版本的功能要比老版本强大一些。
直接双击Adept.exe进行安装即可,如图4所示。唯一需要注意的是,安装过程中,千万不能将下载器接到电脑上,电脑上必须没有任何Digilent下载器的情况下才能顺利完成安装。

安装完成后,在开始菜单里面找到Adept软件并打开,如图5所示。然后将Digilent HS或者高仿的HS下载器和FPGA开发板接到电脑上,此时,Adept软件会自动发现该下载器的固件名称和实际的FPGA芯片型号,如图6所示。


此时,用户还可以点击旁边的“Browse”浏览找一个bit文件,点击“Program”下载测试一下看看这个软件的功能是否正常。下面我们找一个黑金的AX7020 FPGA开发板接上去,看看Adept什么反应,如图7所示。很明显,ZYNQ被Adept识别出来两个可编程RAM,分别对应了ZYNQ里面的ARM(PS)和FPGA(PL)。需要注意的是,ZYNQ里面的FPGA索引是1不是0,因为多出来的ARM占据了0.

接下来,我们看看Digilent公司开发的Basys3 FPGA开发板识别出来的效果,如图8所示。可以看出,Digilent公司官方的Basys3 FPGA开发板上的FPGA芯片是A7,并且HS JTAG下载器的固件名称也改成了Basys3,而不是原始的HS1或者HS2或者HS3,说明Digilent在FPGA开发板出厂的时候,往HS EEPROM里面烧写的固件名称改了,而目前GitHub和原生的下载器名称都是原始的JTAGHS*。

注意:Adept软件本身可以同时识别多个不同的下载器和FPGA芯片,这点非常重要,如果用户自己做的FPGA板子需要多个同时接到电脑上,那么Adept驱动可以毫无压力的识别。
至此,我们安装的Digilent Adept软件功能是完全OK的!其识别速度和下载速度要比Xilinx官方的IMPACT和Vivado快很多,大家可以尝试对比一下就知道了!
2)接下来,我们需要安装一下Digilent公司专门为这个Adept软件封装的一套LabVIEW下的驱动VI,实际上底层就是调用Adept的DLL库函数来实现的。
封装出来的这个工具包名称是“Interface for Adept”,大家可以在NI官网上搜索这个关键字,然后点击右下角的“DOWNLOAD”就能单独下载离线版安装,如图9所示。

从NI官网上下载软件时需要注册账号,免费的,如果不想麻烦的话,也可以通过下面我们推荐的这种不需要账号的方式来直接在线安装这个工具包,那就是通过VIPM软件来搜索在线安装,类似应用商店一样。
首先,打开电脑上的VIPM软件,然后搜索找到Adept,如图10所示。最后右击选择安装就可以了,安装过程中会弹出一个应用程序检测当前电脑环境下是否安装了Adept软件,如果没有的话,它会自动下载安装,但是这个软件有个bug,就是一直提示安装,并且它默认安装的是低版本的V2.15.3版本,这就是为什么我们要在前面先完成第一步操作,将高版本的Adept软件提前安装好,然后到了这里,就会自动跳过去,如图11所示。


安装完成后,如果用户直接点击“Show Example”找到对应的LabVIEW上位机例程,是无法正常下载FPGA bit文件的,这里面有bug,所以,我们专门开发了一个没有bug能够动态下载FPGA bit文件的例程出来。
3)将我们(神电测控)提供的DLL驱动文件拷贝到这个路径下覆盖,如图12所示(C:\Program Files (x86)\National Instruments\LabVIEW 2015\vi.lib\MakerHub\Adept\Private\Resources);然后再把我们提供的vilib文件夹和example文件里面的文件拷贝过去覆盖,如图13所示(C:\Program Files (x86)\National Instruments\LabVIEW 2015\examples\MakerHub\Adept);最后打开我们写好的LabVIEW FPGA bit文件动态加载程序,看看是否正常,如图14所示。如果运行箭头没有断开,说明所有加载的Adept子VI和DLL都是OK的!



我们开发的这个LabVIEW FPGA bit动态下载VI(LV-Adept-Flash FPGA Bitfile-DLW30.vi),用户还可以直接将其当成一个子VI集成到自己大的LabVIEW工程里面,便于即插即用,真正做到了图形化一目了然!
4、应用测试
下面,我们选择3款不同的FPGA开发板和下载器来测试一下我们(神电测控)开发的这个LabVIEW FPGA bit动态下载VI(LV-Adept-Flash FPGA Bitfile-DLW30.vi)功能是否正常。
3款开发板分别是黑金的AX7035 Artix7开发板,上面没有集成下载器,所以单独买了一个高仿的Digilent HS下载器;第二款是黑金的AX7020 ZYNQ开发板,上面集成好了Digilent HS JTAG下载器电路;第三款是Digilent公司官方的Basys3 Artix7开发板,上面也集成好了他们家的FPGA HS下载器电路。
1)黑金开发的AX7035 Artix7 FPGA开发板和下载器连接实物图,如图15所示。然后在上位机软件前面板左侧的“Configuration”里面选择识别出来的下载器HS1,FPGA类型为“纯FPGA”,bit文件路径可以指定也可以留空在弹出来的对话框里面选择;然后点击一下运行箭头,过几秒之后,右侧的“Download Status”里面出现了“Programming Successful.”,如图16所示,说明bit文件成功地下载到FPGA芯片里面去了。此时,FPGA开发板上的4个LED灯按照流水方式跑起来了,因为我们下载的是提前使用LabVIEW My FPGA编译出来的FPGA流水灯bit文件,关于具体的LabVIEW FPGA开发和编译过程,不熟悉的用户可以参考我们编写的《LabVIEW FPGA开发宝典》。


2)黑金开发的AX7020 ZYNQ FPGA开发板,板子上面集成好了Digilent HS JTAG下载器电路,如图17所示。然后在上位机软件前面板左侧的“Configuration”里面选择识别出来的下载器“HS1”,FPGA类型为“ZYNQ”,bit文件路径可以指定也可以留空在弹出来的对话框里面选择;然后点击一下运行箭头,过几秒之后,右侧的“Download Status”里面出现了“Programming Successful.”,如图18所示,说明bit文件成功地下载到ZYNQ FPGA芯片里面去了。此时,FPGA开发板上的4个LED灯按照流水方式跑起来了,因为我们下载的是提前使用LabVIEW My FPGA编译出来的ZYNQ FPGA流水灯bit文件。


3)Digilent官方提供的Basys3 Artix7 FPGA开发板,同样也板载了Digilent他们自家的HS JTAG下载器,如图19所示。然后在上位机软件前面板左侧的“Configuration”里面选择识别出来的下载器Basys3,FPGA类型为“纯FPGA”,bit文件路径可以指定也可以留空在弹出来的对话框里面选择;然后点击一下运行箭头,过几秒之后,右侧的“Download Status”里面出现了“Programming Successful.”,如图20所示,说明bit文件成功地下载到A7 FPGA芯片里面去了。此时,FPGA开发板上的16个LED灯按照十六进制计数器的方式跑起来了,因为我们下载的是提前使用LabVIEW My FPGA编译出来的FPGA while循环计数器bit文件,关于具体的LabVIEW FPGA开发和编译过程,不熟悉的用户可以参考我们编写的《LabVIEW FPGA开发宝典》。


5、结论
现在大家可以使用我们(神电测控)提供的这个LabVIEW FPGA bit动态加载VI(LV-Adept-Flash FPGA Bitfile-DLW30.vi)来代替传统的IMPACT和Vivado下载了,不仅提高了开发和下载效率,更关键的是我们克服了传统下载方式所没有的多个FPGA bit文件远程和动态随心所欲的选择、切换、下载、加载和运行,实现了跟NI FPGA动态加载一样的灵活性!