我是靠谱客的博主 大意吐司,最近开发中收集的这篇文章主要介绍基于FPGA的图像处理(二)--System Generator入门,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

         System generator 安装之后会在Simulin模块库中添加一些Xilinx FPGA专用的模块库,包括Basic Element,Communication,Control Logic,DataTypes,DSP,Math,Memory,Shared Momory,Tool等模块库,只有使用这里的模块才能进行FPGA算法的仿真以及进行综合等等。

         使用这些模块就可以简单的选一些模块,连一些线就能自动生成你需要的HDL代码,将开发人员从底层枯燥的代码编写中解脱出来,将更多的精力放在算法上,非常完美的体现了工具为人服务的理念。

      最新的ISE14.2即Vavido已经能够使用C和C++生成HDL代码,那个主要是针对Xilinx公司7系列的FPGA,有兴趣的同学可以尝试。另外Matlab2012将HDL coder作为一个独立的工具添加进来,已经能够支持Xilinx和Altera公司的FPGA。

    

一、System Generator快速入门


从设计流程中可以看出,熟悉Xilinx DSP基本模块库是设计流程中的关键环节,只有掌握了基本模块的特性和功能,才能更好地实现算法。由Xilinx模块库和System Generator一起,可生成Xilinx可编程器件的最优逻辑,这属于最低层的设计模块,地位等效于IP Core,共有90多个。Xilinx模块库简要说明如表7-1所列。

表7-1 System Generator库的简要说明

1.基本单元模块

表7-2 基本单元模块的说明列表

2.通信模块

表7-3 通信模块的说明列表

3.控制逻辑模块

表7-4 控制逻辑模块的说明列表

4.数据类型模块

表7-5 数据类型模块的说明列表

5.DSP模块

表7-6 DSP模块的说明列表

6.数学运算模块

表7-7 数学运算模块的说明列表

7.存储器模块

表7-8 存储器模块的说明列表

8.共享储存器模块

表7-9 共享存储器模块的说明列表

9.工具模块

表7-10 工具模块的说明列表

 

2.FPGA边界定义模块

图7-10 转换模块示意图

3.System Generator标志

4.建立简易的DSP设计

5)设定系统参数。双击“System Generator”模块,会出现系统设定对话框,如图8-13所示。其中“Compilation”栏选择编译生成对象,包括HDL网表、FPGA配置比特流、NGC网表、EDK导出工具、硬件协仿真类型以及时序分析文件等6种类型,本例选择HDL网表类型,会生成ISE工程以及相应的HDL代码;“Part”栏用于选择芯片型号,本例选择Spartan3E xc4vsx55-12ff1148。“Target”栏用于选择目标文件存放路径,本例使用默认值,则会在mydelay.mdl所在文件夹中自动生成一个netlist的文件夹,用于存放相应的输出文件。综合工具选择XST,HDL语言选择Verilog类型,系统时钟设的周期为100ns,即为10MHz。 “Clock Pin Location”栏的文本框中输入系统时钟输入管脚,则会自动生成管脚约束文件(由于本例只是演示版,所以该项空闲)。此外,可选中“Create testbench”选项,自动生成设计的测试代码。各项参数确认无误后,单击“OK”键,保存参数。

6)设置关键模块参数。双击“Gataway In”、“Gataway Out”模块,会弹出图8-14和图 8-15所示的对话框。Gataway In模块属性可查看输入数据位宽和量化规则。

7)运行测试激励。当参数设置完成后,点击工具栏的“ ”按键,即可运行Simulink仿真,可以看到显示器输出为18,表明设计的功能是正确的。

读者可在相应的文件夹的“netlist sysgen”子目录中打开“nonleaf_results.v”文件,查看相应的代码,如下所示(为了节约篇幅,分栏显示),用户可将其作为子模块直接使用。

二、System Generator中的信号类型

System Generator是面向硬件设计的工具,因此数据类型只能是定点的,而Simulink中的基本数据类型是双精度浮点型,因此Xilinx模块和Simulink模块连接时需要通过边界模块来转换。“Gateway In”模块把浮点数转换成定点数,“Gateway Out”把定点数转换成浮点数。此外,对于Simulink中的连续时间信号,还必须经过“Gateway In”模块的采样转换才能使用。

三、 自动代码生成 System Generator能够自动地将设计编译为低级的HDL描述,且编译方式多样,取决于System Generator标志中的设置。为了生成HDL代码,还需要生成一些辅助下载的文件工程文件、约束文件等,和用于验证的测试代码(HDL testbench)。

  • HDL网表类型是最常用的网表结构,其相应的输出结果包括HDL代码文件、EDIF文件和一些用于简化下载过程的辅助文件。设计结果可以直接被综合工具(如XST等)综合,也可以反馈到Xilinx物理设计工具(如ngdbuild、map、par和bitgen等)来产生配置FPGA的比特流文件。编译产生的文件类型如ISE中是一致的。NGC网表类型的编译结果和HDL网表类似,只是用NGC文件代替了HDL代码文件。
  • 比特流文件类型的编译结果是直接能够配置FPGA的二进制比特流文件,并能直接在FPGA硬件平台上直接运行的。如果安装了硬件协仿真平台,可以通过选择“Hardware Co-simulation > XtremeDSP Development Kit > PCI and USB”,生成适合XtremeDSP开发板的二进制比特流文件。
  • EDK导出工具类型的编译结果是可以生成直接导入Xilinx嵌入式开发工具(EDK)的工程文件以及不同类型的硬件协仿真文件。
  • 时序分析类型的编译结果是该设计的时序分析报告。

2.编译约束文件

  • 系统时钟的周期;
  • 系统工作速度,和系统时钟有关、设计的各个模块必须运行的速度;
  • 管脚分配;
  • 各个外部管脚以及内部端口的工作速度。

约束文件的格式取决于System Generator模块的综合工具:对于XST,其文件为XCF格式;对于Synplify/Synplify Pro,则使用NCF文件格式。

  • <design>_tb.vhd/.v文件,包含完整的HDL测试代码;
  • Various.dat文件,包含了测试代码仿真时的测试激励向量和期望向量; 
  • 脚本Scripts vcom.do和vsim.do文件,用于在Modelsim中完成测试代码的编译和仿真,并将其结果和自动编译产生的HDL测试向量进行比较。

Various.dat文件是System Generator将通过“Gataway In/Out”模块的数据保存下来而形成的,其中经过输入模块的数据是测试激励,而通过输出模块的数据就是期望结果。测试代码只是简单的封装器,将测试激励送进生成的HDL代码,然后对输出结果和期望结果完成比较,给出正确指示。 四、 编译MATLAB设计生成FPGA代码

Xilinx公司提供了两种方法将MATLAB设计.m文件转化为HDL设计,一种就是利用AccelDSP综合器;另一种就是直接利用MCode模块。前者多应用于复杂或高速设计中,常用来完成高层次的IP核开发;而后者使用方便,支持MATLAB语言的有限子集,对实现算术运算、有限状态机和逻辑控制是非常有用的。本节内容以介绍MCode模块为主。

function [lsh3, rsh2] = xlsimpleshift(din)

2.将.m函数添加到下列三个位置之一:

  • 模型文件存放的位置;
  • 模型目录下名字为private的子文件夹;
  • MATLAB路径下。

然后,新建一个System Generator设计,添加MCode模块,双击模块,在弹出页面中,通过Browse按键将.m函数和模型设计关联起来,如图7-18所示。

3.添加边界模块、Sytem Generator模块、正弦波测试激励以及示波器模块构成完整的设计,如图8-19所示。

4.运行仿真,得到的结果如图7-20所示,从中可以看出,设计是正确的,正确实现了.m文件的功能。左图将信号放大了8倍,右图将信号缩小了4倍。

5.自动生成代码,得到的Verilog文件如下所列。

din,

endmodule

五、子系统的建立和使用

System Generator设计经常作为大型HDL设计的一部分,本节就介绍如何使用System Generator来建立子系统模块,以及如何在整个系统中对其进行仿真。

1)NGC网表文件

2)设计规则

在复杂系统中使用子模块时,必须遵循下面两条规则。

4)仿真

(2)在库里添加基本实例模块,如图7-25所示。基本实例模块可以是System Generator中的任意组件。

(3)在库里面添加可配置子系统模版,如图7-26所示。模版可以在Simulink库浏览器中找到,其具体位置为“Simulink/Ports & Subsystems/Configurable Subsystem”。如果有需要,用户可以修改该模版的名字。

(4)保存库文件,然后双击模版模块,会弹出如图7-27所示的属性配置界面。根据实现的需要选中相关模块的检验框。最后单击“OK”再次保存库文件。

2)使用可配置子系统

要在设计中使用可配置子系统,先按照上面的步骤定义子系统,然后打开库,将需要的模版模块拖到设计中合适的位置,这样设计中就有了可配置子系统的实例,如图8-28所示的FIR滤波器模块。

在实例模块上点击右键,然后选择Block Choice选项中的Xilinx DA FIR,将实例作为基础实现模块使用。如图8-29所示。

3)在可配置子模块中添加和删除实例模块

添加和删除子系统是编辑、修改可配置子系统的基本操作,按照下面的步骤可以从可配置子系统中删除实例模块:

(2)生成可配置子模块的硬件电路

在System Generator中,模块可用于仿真和产生硬件。有时对于一个可配置子系统,最佳的方式是其既可以成为仿真基础模块,也可以用来生成硬件电路。例如将可配置子系统在仿真时作为普通的模块来产生仿真结果,在实现时作为黑盒子产生功能电路的HDL代码,就是一种常用方式。System Generator提供了可配置子系统管理模块来达到上述目的,其使用方法如下:

最后,双击管理模块打开其属性配置GUI,选择可配置子系统中生成硬件电路的模块,如图8-33所示。单击“OK”保存子系统和库文件退出即可。

 

转载于:https://www.cnblogs.com/libing64/archive/2012/11/03/2878726.html

最后

以上就是大意吐司为你收集整理的基于FPGA的图像处理(二)--System Generator入门的全部内容,希望文章能够帮你解决基于FPGA的图像处理(二)--System Generator入门所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部