Dynamic Partial Reconfiguration 2 DPR Modular Generation

来源:互联网 发布:vb.net get set 编辑:程序博客网 时间:2024/06/09 13:42

【本文原创,转载请说明】

【在此感谢LLJ学长的白皮书帮助】

在DPR的第一节中,我根据实际情况总结了一些进行基于FPGA动态可重构所必须具备的知识和技能,尤其是关于Xilinx公司与动态可重构相关的工具,并且这些工具都很杂,如果不对它们有个全局的了解,后续的实验中就不知道哪一步该用什么工具。所以,在这一节中我们将着重介绍下相关的工具,以及我在使用每个工具中所遇到的问题。

整个的实验过程中,我使用过两种型号的板子,第一块是virtex5的,第二块是zedboard的;在使用virtex5时,由于之前师兄使用过xilinx12.4,且有相应的用于可重构的license,所以在最开始我使用的是版本12.4。但由于后续研究中算法模块需要知道其相应的硬件运行时间,而Vivado HLS中能提供相应的功能,所以,在后续的实验中我使用的是xilinx14.4xilinx14.4相应的各license及注意如下(之前有师弟在windows8中装了xilinx的一套工具,结果总是有问题,经过验证,应该是xilinx工具在windows8上还存在一些bug,建议最好使用win7系统):

Xilinx14.4planahead与可重构相关的license

Xilinx14.4HLSlicense   (license在文档所在目录下license文件中,需全部拷到C/.xilinx下)

以上就是开发工具中相应的license,如果缺少相应的license,将导致无法使用对应的功能。其中与可重构相关的license官方是不提供的,需要买;而HLSlicense可以在相关网页上申请到一个月试用期的license。以上给出的license都是我已经测试过的、永久性的。

注意:以上给出的license如果有问题,请将license文件放在桌面或者C盘,可能原因是相应的环境变量默认指定地址是C盘。

软件版本和license相关问题介绍清楚后,下面我就开始详细地介绍动态可重构流程了,virtex5可重构的流程图如下图示:


这是一个可重构的大致流程图,灰色框内的是每一步需做的任务,框上面的是相应使用的工具;从图中可以看出,第一步我们是使用XPS工具完成了硬件部分,这一步是完成了硬件的整体架构,第二步使用SDK工具完成模块的控制部分,第三步使用planahead工具完成可重构部分,将各模块的配置文件导入到blackbox中,最后一步就是使用Bashshell工具将硬件、软件和可重构文件打包以及将生成的.bit转换成CF卡对应的文件格式,然后将板子的启动模式改为从CF卡启动,将相应的文件放入CF卡中,启动电源后即能正常运行。其中我们应该注意到module netlist这一块,这一步是生成模块的netlist;对于生成netlist大致有三种方法,ISE工具生成简单的netlistCreate and Import Peripheral Wizard工具生成IP核的模板,进行修改可以生成设计功能的IPCOREHLS工具可以通过C\C++等高级语言自动生成IPCORE下面将详细介绍生成模块的三种方法。


1、ISE工具 

功能描述:在动态可重构中,我使用Xilinx ISE Design工具用于可重构每个功能模块的生成。在这一步中,使用功能模块的硬件描述语言如VHDLverilog等,生成相应功能模块的网标文件ngc

• 工具具体操作:

① 工具的打开

如果安装Xilinx ISE套件的时候,设置了ISE的桌面快捷方式的话,就可以直接点击桌面快捷方式;如果没有桌面快捷方式,可以开始—>所有程序—>Xilinx ISE Design Suite 12.4—>ISE Design Tools—>Project Navigator打开ISE工具。

② 新建工程。这一步就是基本的新建工程,与大部分新建工程差不多,


③ 工程设置。

这一步中是对本工程进行设置,如图3,其中需要对相应的型号进行选择,我这里使用的是:Family=Virtex5, Device=XC5VLX110TPackage=FF1136Speed=-1;除了型号外,还需要对综合工具、仿真工具(这里没有涉及到仿真部分,这部分网上资料是很多的,大家有兴趣可以自己专研)、硬件描述语言等方面进行选择,直接按照图3.3进行设置就可以了。然后,点击Next,出现图4的界面,这个界面中描述了此工程相应的配置说明,可以一一核实,以确保工程与自己的设计一致。

④ 点击Next,就进入工程设计界面了,如图5所示。图5中我们可以看到,在此界面中design视图中只有工程名和相应的芯片型号,下一步我们应该创建硬件描述语言相关的文件。在designHierarchy视图下,选择xc5vlx110t-1ff1136,然后右键,选择New Source,弹出图6所示界面,选择其中的VHDL ModuleFile name中填入自己的文件名demo,记住右下角的Add to project必须勾选(默认是勾选的);然后Next,弹出图6界面,这里面可以设置模块的管脚名、管脚方向等,然后生成设置后的硬件描述模板,同时也可以不在这里设置(直接在程序中描述),这里我没有设置,直接忽略了这一步。Next—>Finish,就生成了新建文件的硬件描述的一个模板,

图3

4

5

6

⑤ 硬件模块的修改。

这一步我们将图6中生成的模块的硬件模板进行修改成我需要的功能,这一块需要硬件描述语言如VHDL方面的语法知识,具体语法这里就不作介绍了,相关方面的教程有很多,可以参考经典例程。由于是生成可重构的模块,即相同区域的模块必须保证entity是一样,且管脚部分一样,或者是相同区域管脚最多模块的子集。否则会存在部分模块挂不到top上面(这个要特别注意)。

⑥ 硬件模块综合

在修改完硬件模块,使其满足了设计要求后,接下来就需要对其进行综合了,也就是在如图7视图中选择模块文件,然后Processes视图中会出现Synthesize,通过双击Synthesize进行综合。不过在双击之前特别要注意,先必须选择了Synthesize,右键选择Process Properties,弹出如图7界面,选择Category中的Xilinx Specific Options,注意到后侧中第一项是-iobuf,这里我们要将Value中的勾去掉,也就是这里我们不需要将管脚设置成buffer类型。为什么呢?一般我们这里生成的硬件模块是在FPGA芯片内部,只有在与外部管脚相连的时候,才需要buffer进行缓冲。所以,在这里特别要注意,在综合前必须将-iobuf去掉,不然在planahead中进行可重构时会出错。

7

⑦ 硬件模块网表文件的生成

完成了综合后,显示正确的话,那么就会生成模块的ngc文件。生成的ngc文件将会在planahead中会用到,用于构成可重构区域的模块。


2 Create and Import Peripheral Wizard(生成IP核模板)

Create and Import Peripheral Wizard工具能够生成IP模板,即可搭载到总线上,进行互联。但是使用这个工具需要具备一定的硬件知识,因为这个工具只能生成相应的IP模板,内部源码需要自己去根据欲设计的功能模块进行修改,需对其中的所有寄存器了如指掌,对于IP核的控制都是通过寄存器的读写来实现的。同时这个工具能生成IPAPI模板,方便对其在软件端进行操作。工具使用的具体流程和说明如下:

① 打开CIP工具,创建一个IPCORE的模板,并进行ipcore模板的位置指定。


② 设置ipcore的名称及版本号以及总线接口类型,在Virtex5中我们选择PLB总线,在zedboard中选择AXI总线,总线类型的选择是根据硬件资源决定的。


③ 对IP核的相关设置,主要表现在对IP核的存储、数据类型、控制方面。


④ 设置IP核的寄存器个数,根据设计需要设置,其它接口引脚默认即可。


⑤ 默认,如果需要对此ipcore进行测试的话,需要勾选选项框。由于实验中涉及的ipcore

太小,所以没必要测试;不过有时间也可以深入了解。下图中第二张图是对模板中语言进行选择的,然后最后一项是勾选后会生成一个驱动模板,方便控制。


⑥ ipcore模板生成。


⑦ 模板生成后,还需要对其进行修改来满足自己的设计。可以点击http://www.cnblogs.com/surpassal/archive/2012/10/09/Zynq_Lab4.html进行参考。

3 HLS(高层次综合生成IP核)

使用Vivado HLS工具,能进行高层次综合。即使用像C/C++语言能自动生成硬件描述语言,这一步的难点即顶层函数的输入输出的流类型这方面需要硬件方面知识。但这个工具能生成模块API(可能是由于工具还不够成熟吧,掌握此工具需要一定的基础)。

可以访问:http://blog.csdn.net/kkk584520/article/details/18812321

由于我在这部分研究时间比较短,待我有深入研究后再写。


本节着重介绍了模块的三种生成方法,分别是ISE工具生成、Create and Import Peripheral Wizard工具和HLS工具生成。

ISE工具生成的模块一般为简单的模块,适应于小型开发或者验证方面;Create and Import Peripheral Wizard工具和HLS工具主要用于IP核,也就是构建系统级别的模块,能够挂载到总线上,但这两种工具使用有很大的不同。

ISE工具的思路还是利用硬件描述语言进行模块的创建,只是可以很短给出一个相应的模板,然后修改模板即可,同时还会生成相应的驱动。

HLS工具的思路是利用高级语言生成RTL级模块,不需要有硬件描述语言方面基础都能得出相应的功能模块,整个过程基本趋于自动化,只需要完成相应功能的C\C++语言编写即可。







0 0