基于Eclipse CDT的FPGA工程过程管理优化设计
2019-07-01胡启罡曲明成吴翔虎
胡启罡 曲明成 吴翔虎
摘 要:如果使用Xilinx公司的Vavido软件直接用于FPGA开发,则需要进行过程繁琐的图形化配置,容易出错且不方便新手使用。为了解决这一问题,本文详细研究了Vavido软件中有关FPGA工程编译部分的实现原理,并在Eclipse CDT提供的基础扩展点上针对FPGA工程编写插件,通过检索工程目录,自动生成编译FPGA bit文件的tcl脚本,并以命令行的方式调用Vavido的相关功能,完成bit文件的生成。实现了FPGA工程的建立、编译和烧写功能。
关键词: FPGA;Vavido;Eclipse CDT;tcl脚本生成;bit文件生成
文章编号: 2095-2163(2019)03-0324-04 中图分类号: TP311 文献标志码: A
0 引 言
本文是实验室项目《通用可配置嵌入式软件集成开发环境》中的FPGA部分。该项目涉及到对Xilinx公司ZC706开发板的调试工作,其中包含FPGA部分。FPGA,即现场可编程门阵列,过程中,主要使用硬件描述语言(Verilog或VHDL)来完成电路设计。
项目的初期,通过使用Xilinx公司的Vavido软件实现相关的操作。但是在设计过程中发现,使用Vavido图形化界面进行FPGA开发,需要提供繁琐的配置,过程复杂,容易出错且对新手不友好。同时,如果已有外部硬件描述文件,无法方便快捷地生成bit文件。
目前,尚未有一款良好的开源项目能够支持FPGA的编译工作,故本文仍在Vavido的基础上研究其实现机制。
其实,Vivado软件的核心是一个脚本解释器,所有操作都附有对应的tcl脚本可以调取执行,GUI界面也是将各种脚本命令封装为图形化界面。对此,本文研究了Vivado中关于FPGA部分的tcl脚本,并对其进行了抽取集成。
而Eclipse作为一类优秀的开源框架,设计融入了大量的扩展节点供开发者集成自定义的功能。本文FPGA部分的功能就是在Eclipse CDT增配的扩展点基础上对Xilinx公司的Vivado设计工具进行了集成。
在本文中,后台采用tcl交互式命令行的模式启动Vivado,调用Vivado的相关功能,即调用Java提供的exe()函数,在cmd命令行中执行“vivado –mode tcl tcl_path”指令。tcl_path为该指令需要的参数,即为编译bit文件所需的tcl脚本的绝对路径。
1 FPGA工程的建立
在Eclipse CDT的基础上集成FPGA开发功能,首先需要能够建立FPGA工程。FPGA工程是不同于C/Java工程的自定义新工程类型。研究可知,FPGA工程建立的函数流程则如图1所示。
由图1可知,FPGA工程建立的步骤流程可详述如下。
(1)根据用户选择的产品名,从已集成的硬件配置数据中获取该硬件开发板的FPGA芯片配置信息。调用ResourcesPlugin.getWorkspace().getRoot().getProject(projectName)函数新建工程对象project。
(2)通过ResourcesPlugin.getWorkspace()函数获取待建工程所在的工作区间workspace。
(3)通过workspace.newProjectDescription (project Name)函数新建待创立工程的描述信息description,参数为工程名。
(4)通过对description的设置,主要通过description.setLocation(projectLocation)设置工程路径,参数为创建后工程所在的绝对路径。
(5)通过调用函数project.create(description,null)创建工程。判断该工程对象是否打开,如果没有打开,则通过函数project.open(monitor)打开该工程。
(6)创建FPGA所需的文件夹,包括verilog、xdc、bit、buildTcl、edif、xci等文件夹,并在指定的文件夹下添入相应的源代码文件。
(7) 保存工程配置信息。
研究中,經由上述的操作,即可新建出FPGA工程。
2 tcl脚本及bit文件的自动生成
2.1 tcl脚本及bit文件的自动生成分析
tcl脚本的自动生成首先需要添加一个功能按钮来提供相关操作。
在org.eclipse.ui.actionSets扩展节点上,设计实现了一个生成FPGA bit文件的操作功能按钮。该按钮能够对FPGA工程进行编译,包括生成tcl脚本以及根据该脚本自动生成bit文件。需要在plugin.xml中进行配置。
研究可得,在扩展节点上创建新按钮的配置测试代码可表述如下。
- -
point="org.eclipse.ui.actionSets"> id="Embedded.actionSet1" label="build" visible="true"> class="test.function.FpgaBuildAction" disabledIcon="icons/fpgaBuild.png"> 分析可知,在该xml中,action class属性指向了该按钮的功能Java文件,在该文件中,编写了该按钮的点击事件。重写run函数,定制形成了自己的业务操作。 在该按钮的点击事件中,设计了如下处理内容: (1)检索工程目录,如果已有bit文件,提示用户是否重新生成,重新生成,则执行第(2)步操作。 (2)检索工程目录,如果已有生成bit文件的tcl脚本,则执行“vivado -mode batch -source build.tcl”,根据此脚本生成bit文件。如果没有tcl脚本,则递归遍历整个工程,根据工程所包含的文件,采用模板填充技术自动生成tcl脚本并执行。 首先需要规定出tcl脚本的标准模板,在此基础上根据工程包含的文件以及用户选择的产品类型做出相应修改,自动生成tcl脚本文件,tcl脚本文件模板如图2所示。 (3)执行tcl脚本出现错误,则将报错信息展示给用户,用户可以根据报错信息,修改自己的工程文件,也可直接修改tcl脚本,该部分的函数流程可如图3所示。在此过程中,工程目录检索采用深度优先搜索算法。 2.2 tcl脚本的自动生成设计 本次研究中,相对重要的是tcl脚本的自动生成。图2已经给出了tcl脚本的模板。在此基础上,关于tcl脚本的自动生成算法流程可推演论述如下。 (1)采用深度優先搜索算法遍历工程的工程目录。 (2)遍历到文件时,根据文件的后缀名,判断文件的类型,填充至模板的相应位置。read_vhdl –library是添加vhdl库文件;read_vhdl是添加vhdl文件;read_verilog是添加verilog文件;read_xdc是添加xdc文件;read_edif是添加网表文件;read_ip是添加xci IP文件。这些指令后面续接的参数都是文件所在的绝对路径。而还有一种glob指令是添加指定目录下的所有指定后缀名的文件。 (3)文件遍历完成后,根据该FPGA工程创建时所选择的芯片种类,设置综合设计中的有关指标参数。之后就是填充优化设计、布局、布线等指令。在tcl脚本的末尾再加上bit文件的指令。 至此,研究进一步给出tcl脚本自动生成的函数运行流程可如图4所示。 该部分设计的按钮只对FPGA工程有用,点击该按钮时,需要判断当前选中工程的类型。但是综观本次集成开发环境中,除了FPGA的工程类型是自定义的新的工程类型,其它工程类型都是基于C/C++工程或者Java工程的,因此只是根据工程类型即可判断是否为FPGA工程。 2.3 tcl脚本的执行设计 在执行tcl脚本时,通过Java的Process类实现。具体执行步骤如下。 (1)通过ProcessBuilder()函数新建一个builder对象,参数为要执行的第三方可执行程序的绝对路径。 (2)通过builder.start()执行该第三方程序,获得一个Process进程对象process,process即为打开该第三方程序后的进程。 (3)通过process.getOutputStream()获得该进程的输入流,通过该输入流执行相应的指令。指令代码可参见如下。 new BufferedWriter(new OutputStreamWriter (process.getOutputStream())); //初始化一个BufferedWriter对象br 之后通过执行函数br.write(cmd),参数为要执行的程序指令,即可通过该输入流向第三方可执行程序发送指令。 (4)使用WorkspaceJob创建一个新的线程,用来监听process进程的输出流。 (5)当监听线程开始执行之后,会监听第三方可执行程序的输出流。这里使用了一个while循环,循环的终止条件就是标准输出流和错误输出流均为空。 (6)当标准输出流和错误输出流都为空时,关闭这2个输出流,同时刷新工程所在的工作区间。 刷新工程所在的工作区间的原因在于,在调用第三方可执行程序时,有时会产生一个文件结果,例如FPGA工程编译结束后会形成一个bit文件。如果不执行刷新操作,则bit文件不会直接显示在Eclipse工程目录下,需要用户手动刷新。因此为了用户友好性的研究需要,这里就在每次调用了第三方可执行程序后都会针对工程工作区间采取自动刷新的解决办法。 Process类调用第三方程序执行,获得执行结果的通用函数设计流程则如图5所示。 3 结果测试 综合前述的研究设计可得,最终的测试效果将如图6所示。 从控制台的输出可以看出bit文件已被成功生成。 4 结束语 本文在Eclipse的扩展节点上,研究建立了FPGA工程,同时提供了一个功能按钮,通过深度优先搜索算法对工程目录进行遍历,按照模板填充生成tcl脚本文件,最终通过命令行方式调用Vivado软件中的相关功能,实现了FPGA bit文件的生成工作。 参考文献 [1]田丹, 林卓, 卫进. 基于Eclipse的嵌入式集成开发环境工程管理[J]. 微处理机, 2015(2):29-31,34. [2] 朱娜. 基于Eclipse的嵌入式软件开发管理平台的研究与实现[D]. 成都:电子科技大学, 2011. [3] 南方. 基于Eclipse的嵌入式集成开发环境分析与设计[D]. 西安:西安电子科技大学, 2009. [4] YANG Penghao, WANG Rongliang, FAN Ziguo. Study on debugging method based on embedded system development platform[J]. Advanced Materials Research,2013,2385(694):2646-2650. [5] HE Huiqin. Application research of JTAG standard based on ARM debugging system[J]. Applied Mechanics and Materials,2015,3749(719):522-526. [6] STOLLON N. Multicore Debug[M]// MOYER B. Real world multicore embedded systems. USA: Elsevier Inc,2013:561-602. [7] DAN U C. Software development tools for embedded systems[M]//OSHANA R, KRAELING M. Software engineering for embedded systems-Methods, practical techniques, and applications. USA:Elsevier Inc,2013:511-562.