《FPGA数字信号处理设计流程》课件第5章_第1页
《FPGA数字信号处理设计流程》课件第5章_第2页
《FPGA数字信号处理设计流程》课件第5章_第3页
《FPGA数字信号处理设计流程》课件第5章_第4页
《FPGA数字信号处理设计流程》课件第5章_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章图形化工程设计流程及实现5.1常规设计流程5.2使用XILINXSystemGenerator的FPGA开发流程5.3SystemGenerator的重要功能5.4本章小结 5.1常规设计流程

5.1.1使用硬件描述语言的FPGA开发流程

使用硬件描述语言的FPGA开发流程如图5.1.1所示,分成代码描述、综合、执行和下载四个步骤。

首先,使用硬件描述语言对系统功能进行行为级的描述,可选择的硬件描述语言通常为VHDL或Verilog,并使用相应的仿真软件进行行为级仿真,如图5.1.1所示。图5.1.1硬件描述语言设计FPGA流程(一)

其次,对硬件描述语言代码使用综合工具进行综合,并生成相应的FPGA网表文件。可选用的综合工具比较多,比如XILINX公司提供的XST(XILINXSynthesisTechnology)和Synopsys以及Leonardo等。VHDL或Verilog或两者的混合都可用于描述系统。对综合后的结果进行功能仿真后,如果仿真结果与系统要求一致,则进行下一步骤;否则返回上一步,修改代码后再进行综合和功能仿真,直至满足设计要求,如图5.1.2所示。图5.1.2硬件描述语言设计FPGA流程(二)最后,根据综合生成的网表文件以及FPGA的芯片资源分布进行布局布线,在布局布线后进行的时序仿真相对于之前的功能仿真多考虑了具体硬件带来的时延。硬件时延会直接影响到信号的建立时间和保持时间,当系统时钟频率较低时影响较小;当系统时钟频率较高时,可能使得系统功能无法实现,可以通过优化代码或使用较多的硬件资源来获得高处理速度,从而满足设计要求。此处以及前文提到的行为级仿真、功能仿真和时序仿真都可在相应的仿真软件中实现,如ModelSim等。布局布线完成后可生成用于下载到FPGA芯片的位流文件,最后在具体的芯片上验证其是否满足系统要求。如果不能满足要求,同样需要修改并优化代码或选用更高速的器件来实现,如图5.1.3所示。图5.1.3硬件描述语言设计FPGA流程(三)

5.1.2使用XILINXCOREGenerator的FPGA开发流程

在FPGA的整个设计开发过程中,模块化的设计贯穿始终。利用模块的复用性可以简化设计,在不同的系统中,通常都需要用到实现相同功能的模块,比如FIFO、UART等。XILINX等众多公司给FPGA用户或开发商提供了大量参数化且经优化的IP(Intelligentproperty)核,可将其直接用于系统设计中,减少开发工作量,且在功能、速度和占用资源方面都有良好的性能。目前,提供的IP核已相当全面,包括基本逻辑、工业自动化、通信及网络、数字信号处理、FPGA特征设计、数学函数、存储器、标准总线接口等。毫不夸张地说,一个系统完全可以用多个IP核的组合来实现。针对XILINX公司的FPGA可使用XILINXCOREGenerator生成针对根据具体器件进行优化的IP核,其开发设计流程如图5.1.4所示。图5.1.4使用COREGenerator设计FPGA流程(一)图5.1.5使用COREGenerator设计FPGA流程(二)除此以外,还包括诸如CAST,Inc.、CheetahHi-Tech,Inc.、Synopsys、AvnetDesignServices、LynuxWorks,Inc.、PLDApplications、DigitalCoreDesign等众多第三方公司提供的IP核。

使用IP核进行FPGA的开发相对于用硬件描述语言进行FPGA开发最大的优点在于:IP核经用户定制参数并由COREGenerator导出的代码是经过优化而且综合考虑了处理速度和资源利用的。在硬件具体实现时,单个模块在FPGA内具有固定的布局,不会受到其他模块的干扰,保证了本模块的最优性能,如图5.1.6(a)所示。由于其固定的布局,保证了其布线也能够做到相对固定,如图5.1.6(b)所示,确定并减小信号在传输过程中的时延,使得该模块内信号的建立时间和保持时间也相对固定,有效提高了系统的处理速度和可靠性。图5.1.6IP核布局布线特点

(a)固定的布局;(b)固定的布局布线5.2使用XILINXSystemGenerator的FPGA开发流程

传统的FPGA开发流程需要编写大量代码,然后将代码转换成具体的硬件来实现,工作量大。但FPGA芯片上的资源是有限的,要想设计出高速、可靠且占用较少资源的系统,就要求开发人员对具体的FPGA芯片有一定的了解。虽然可以通过使用IP核来提高性能并降低开发难度,但在做系统设计时并不一定能获得满足功能要求的IP核,同时系统工程师难以面面俱到,这部分工作通常需要专业的硬件工程师来完成。SystemGenerator的出现旨在打破这样的局面,让对硬件不甚了解的系统工程师也可以进行FPGA的设计开发;让不懂FPGA的人也可以使用FPGA。SystemGenerator的出现也顺应了当代工业系统设计的发展潮流。集成电路技术的发展,给工业技术带来了以下几项新的发展趋势:

功能强大的平台化芯片成为主流,如FPGA、DSP。

系统具有高灵活性以应对不断提高的工业标准。

多种设计方法——区分控制流和数据流。

在单一平台上进行系统建模和实现。

通过半实物仿真来降低复杂系统的开发难度。在这些发展趋势的推动下SystemGenerator应运而生。SystemGenerator模块的参数化和设计的图形化使得修改设计变得很方便;明确将控制流和数据流分开,使得设计结构清晰,设计方法多样化;可在MATLAB/Simulink软件平台上进行系统建模和仿真,并直接导出硬件描述语言及位流文件下载FPGA;支持半实物仿真,可将整个系统或系统中的部分模块下载到FPGA中,并在MATLAB/Simulink软件平台上进行实时的半实物仿真。

SystemGenerator在生成硬件描述语言代码过程中调用了大量的IP核,代码具有很高的执行效率;图形化的开发方式使得从设计框图上很容易区分控制流和数据流;SystemGenerator工具箱具有强大的功能,使得不具备硬件工程师专业知识的系统工程师同样可以进行FPGA开发。而消除系统工程师和FPGA开发人员之间的隔阂也是SystemGenerator的功能之一。传统Simulink的FPGA开发流程如图5.2.1所示。图5.2.1传统Simulink的FPGA开发流程

SystemGenerator为FPGA的开发提供了以下几点优势:

为FPGA开发提供了系统级设计环境。从Simulink仿真到位流文件的生成具有集成的设计流程,并有MathWorks公司的MATLAB/Simulink软件平台、XILINX公司的FPGA执行工具、硬件综合语言综合器以及庞大的IP核库等众多技术支持。

提供了丰富的算法、逻辑和数字信号处理函数(XILINXBlockset)库。

高度算法提取,可配置任意精度的定点数包括数据的量化和饱和,在仿真时可选用双精度的浮点数替代定点数。

半实物仿真以提高系统验证效率。目前支持SystemGenerator的器件有Virtex、Virtex-E、Virtex-2、Virtex-2Pro、Virtex-4、Virtex-5、Spartan-2、Spartan-2E、Spartan-3、Spartan-3E和Spartan-3A。使用SystemGenerator可以完成如下工作,从而减少FPGA开发工作量。

硬件布局布线。

模块层次化的综合硬件描述语言代码。

自动使用COREGenerator工具来调用IP核。

生成ISE工程以简化设计流程。

生成硬件描述语言的testbench测试文件和测试向量。

生成xcf约束文件和用于ModelSim仿真的do文件。

实现硬件描述语言和SystemGenerator模块的协同仿真。使用SystemGenerator进行FPGA的开发流程如图5.2.2所示。首先使用MATLAB/Simulink进行系统算法的建模仿真,产生后缀为mdl的Simulink文件;其次用SystemGenerator自动生成在ISE中进一步处理的寄存器传输级(RegisterTransferLevel,RTL)和IP核代码,同时生成在ModelSim中仿真用到的testbench测试文件;然后在ModelSim中验证系统是否满足设计要求,在ISE软件中完成XILINX执行流程后生成位流文件,最后下载到FPGA完成整个设计流程。图5.2.2SystemGenerator的FPGA开发流程(一)如前文所述,SystemGenerator的出现其目的之一就是消除系统工程师和FPGA开发人员之间的隔阂,让系统工程师也可以开发FPGA,工程师不再需要自行编写硬件描述语言代码,改由SystemGenerator根据MATLAB/Simulink中的仿真模型自动生成。如图5.2.3所示。图5.2.3SystemGenerator的FPGA开发流程(二)图5.2.4SystemGenerator的FPGA开发流程(三)图5.2.5SystemGenerator的FPGA开发流程(四) 5.3SystemGenerator的重要功能

5.3.1硬件描述语言协同仿真

软件支持将由硬件描述语言编写的功能模块导入到SystemGenerator,并以黑箱的形式出现在MATLAB/Simulink中,调用ModelSim或ISE进行仿真,也可以将SystemGenerator导出的硬件描述语言作为组件例化到其他工程中。例1BlackBox的使用

本例将用VHDL语言编写的转置FIR滤波器导入到SystemGenerator中,并从SystemGenerator中启动ModelSim进行仿真。实验步骤如下:

1)建立模型

将MATLAB的工作路径改为C:\SG\exercise\black_box\。

打开C:\SG\exercise\black_box\blackbox.mdl。

将XILINXBlockset→BasicElements库中的BlackBox模块放到blackbox.mdl窗口中,如图5.3.1所示。自动跳出如图5.3.2所示对话框,打开顶层代码transpose_fir.vhd,同时自动生成transpose_fir_config.m文件。mac.vhd为乘加计算功能模块,可以在transpose_fir.vhd中被调用。

在transpose_fir_config.m中的第26行,将UFix_26_0改为Fix_26_13,将BlackBox模块的输出定为带13位小数的26位定点数。

在第66行加入this_block.addFile('mac.vhd'),调用mac.vhd。

保持并关闭transpose_fir_config.m窗口。图5.3.1BlackBox模块图5.3.2导入硬件描述语言图5.3.3BlackBox模块链接图将XILINXBlockset→Tools库中的ModelSim模块放入blackbox.mdl窗口。

双击BlackBox模块,将Simulationmode选为Externalco-simulator;在HDLco-simulatortouse(specifyhelperblockbyname)内输入ModelSim,指定使用ModelSim进行仿真。BlackBox模块参数设置如图5.3.4所示。图5.3.4BlackBox模块参数设置

2) ModelSim与Simulink协同仿真

单击StartSimulation开始仿真,SG自动启动ModelSim软件对HDL代码进行仿真,并将仿真结果传回MATLAB/Simulink,如图5.3.5所示。图5.3.5启动ModelSim仿真双击Scope模块,并单击Autoscale查看仿真结果。InputSignal信号为BlackBox模块的输入信号,为两个正弦信号的混叠;OutputSignal信号为BlackBox模块的输出信号。从仿真结果可见,BlackBox模块亦即转置FIR滤波器滤除了输入信号中的高频信号。BlackBox仿真结果如图5.3.6所示。图5.3.6BlackBox仿真结果例2将SystemGenerator的设计结果用于其他工程

本例将SystemGenerator中存有的正弦波ROM转换成VHDL代码,并将该代码例化到另一VHDL代码中,最后在ModelSim中进行仿真。实验步骤如下:

1) MATLAB/Simulink中仿真

将MATLAB的工作路径改为C:\SG\exercise\component\。

打开C:\SG\exercise\component\comp.mdl。

单击StartSimulink开始仿真。ROM模块根据地址输入(如图5.3.7中的三角波),输出对应正弦波。图5.3.7正弦波ROM仿真结果

2)导出网表文件,并例化设计模块

双击comp.mdl窗口中的SystemGenerator模块,设定Compilation为NGCNetlist。单击Apply按钮后再单击Generate,SG开始编译、综合并生成相关文件,如图5.3.8所示。

完成后单击OK按钮。

在地址C:\SG\exercise\component下生成ngc_netlist文件夹。

其中comp_cw.vho包括导出模型的组件声明(COMPONENTDeclaration)和例化模板(INSTANTIATIONTemplate)。

将ngc_netlist文件夹中的所有以mif为后缀的文件复制到其父文件夹component下。

打开C:\SG\exercise\component\top.vhd文件。

将top.vhd中的第33~43行和第54~58行的说明符“--”删去,保存并关闭。图5.3.8生成VHDL代码并编译综

3)在ModelSim中仿真

打开ModelSim,在Transcript窗口中输入cdC:\SG\exercise\component,将当前路径改为C:/SG/exercise/component。

在Transcript窗口中输入dosim.do,开始仿真,得到如图5.3.9所示仿真结果。图5.3.9ModelSim中的仿真结果5.3.2硬件验证

要进行硬件协同仿真即半实物仿真,首先需要将FPGA芯片与PC机相连,然后实现软硬件数据交换,XILINX公司提供的JTAG、USB、PCI和以太网多种方式可以实现软硬件

互联。

SystemGenerator中预置的硬件协同仿真的器件有:

XtremeDSP开发板(Virtex-4,Virtex-2Pro)

ML402开发板(Virtex-4)

多媒体开发板(Virtex-2)如果用到其他的FPGA芯片或开发板,需要用户经过一个简单的向导程序,将相应的芯片及开发板信息整合到SystemGenerator中。如果使用以太网接口,需要使用MicroBlaze和SystemACE配置以太网接口,EMACOPB外围设备实现通信握手,并通过十兆或百兆以太网互联。例3硬件协同仿真

本例使用CoreGenerator通过定制乘加FIR滤波器IP核生成VHDL代码,并导入SystemGenerator中,通过USB数据线将Spartan-3E开发板与PC机相连,进行硬件协同仿真。实验步骤如下:

1)生成MACFIRIP核

单击开始→所有程序→XILINXISE8.2i→Accessories→CoreGenerator,打开CoreGenerator。

单击Createnewproject,新建一个新工程。

将路径改为C:\SG\exercise\hw_cosim,单击OK按钮确定,如图5.3.10所示;然后会提示该地址不存在,单击Yes按钮进行创建,如图5.3.11所示。图5.3.10CoreGenerator中新建工程图5.3.11确认创建文件夹选择器件为Spartan-3E,xc3s500e,fg320,-4,单击OK按钮确定,如图5.3.12所示。图5.3.12器件选择选择MACFIRFilterIP核,并双击,打开配置对话框,如图5.3.13所示。图5.3.13IP核选择

MACFIR的配置包括5页,每页的配置如下:

第一页

在ComponentName中输入fir

选择SingleRateFIR

设定Channels为1

第二页

设定Taps为92

ImpulseResponse类型选为Symmetric

设定CoefficientWidth为12

设定NumberofCoefficientSets为1

选定CoefficientType为Signed

选定CoefficientBufferType为BlockMemory第三页

DataWidth设为8

DataType设为Signed

DataBufferType设为BlockRAM

单击LoadCoefficients并选择C:\SG\exercise\hw_cosim\coef.coe作为滤波器设计参数

第四页

PerformanceOptimization设为Auto

SystemClockRate设为276MHz

InputSampleRate设为3MHz

RegisteredOutput设为Checked第五页

显示配置参数,注意其中Width(=27)和Latency(=57),单击Generate开始生成相关文件。

完成后跳出ReadmeFile窗口,显示生成文件列表及其内容,单击OK按钮确定。图5.3.14导出文件列表其中fir.mif,COEF_BUFFER.mif,fir.edn,fir.vhd和fir.vho五个文件在以后步骤中需要使用。

关闭XILINXCOREGenerator。

打开C:\SG\exercise\hw_cosim\fir_blackbox.vhd。

删除u1组件的注释符,即37~43行的注释符。保存后关闭文件。

2)完成MACFIR模型设计

将MATLAB工作路径改为C:\SG\exercise\hw_cosim\。

打开C:\SG\exercise\hw_cosim\hdlcosim.mdl模型。

将XILINXBlockset→BasicElements库中的BlackBox模块放入hdlcosim.mdl,并打开fir_blackbox.vhd,如图5.3.15所示连接模块。

在生成的fir_blackbox_config.m文件中的第26行,将“UFix_27_0”改为“Fix_27_0”;第66行后插入:

this_block.addFile('coregen\fir.edn');

this_block.addFile('coregen\COEF_BUFFER.mif');

this_block.addFile('coregen\fir.mif');

this_block.addFile('coregen\fir.vhd');图5.3.15硬件描述语言协同仿真模块图保存并关闭文件。

双击BlackBox模块,将Simulationmode设为ISESimulator。

单击Startsimulation开始仿真,会提示有如下警告(如图5.3.16所示),并不影响仿真进行。图5.3.16硬件描述语言协同仿真警告图5.3.17硬件描述语言协同仿真结果

3)硬件协同仿真

将hdlcosim.mdl在相同路径下另存为hwcosim.mdl,双击SystemGenerator模块,打开NewCompilationTarget…对话框,如图5.3.18所示。图5.3.18配置新硬件协同仿真器件单击图5.3.19中的Load按钮。图5.3.19导入新器件参数导入C:\SG\compilation\sp3e_starter_kit\spartan_3e_starter_kit.xml文件。

单击SaveZip按钮,保存当前设置,如图5.3.20所示,保存到C:\SG\exercise\hw_cosim\spartan_3e_starter_kit.zip。如果使用其他开发板,相应的zip文件可从网站上下载。图5.3.20导出新器件配置文件确认MATLAB的当前工作路径和spartan_3e_starter_kit.zip文件所在路径一致,在MATLAB的CommandWindow中输入xlInstallPlugin('spartan_3e_starter_kit.zip'),单击OK按钮确定,如图5.3.21所示。图5.3.21更新SystemGenerator预置器件库设定Compilation为HardwareCo-Simulation→Spartan-3EStarterKit,如图5.3.22所示。

将TargetDirectory改为 ./netlist_hw,并单击Generate开始生成相关文件。

生成hwcosim模块,如图5.3.23所示。图5.3.22启用新器件参数配置图5.3.23硬件协同仿真模块将hwcosim模块拷贝至hwcosim.mdl,如图5.3.24所示连接模块。图5.3.24硬件协同仿真模块连接图给FPGA开发板上电,并用USB与PC机相连。

单击Startsimulation开始仿真,SystemGenerator自动将位流文件下载到FPGA中,如图5.3.25所示。

双击Scope模块查看仿真结果。SystemGenerator仿真结果和硬件协同仿真结果几乎完全一致,如图5.3.26所示。图5.3.25位流文件下载图5.3.26硬件协同仿真结果5.3.3系统在线调试

SystemGenerator提供了使用ChipScopePro或共享存储器(SharedMemory)两种方法实现系统在线调试,这两种方法可以利用各自的调试工具来获得可视化的测试信号,可以模拟量(analog)或逻辑量(Logic)两种模式显示信号,并支持十六进制,十进制和二进制数,允许在模型中与参考信号进行比较。

使用ChipScopePro进行在线调试需要在Simulink模型设计中插入ChipScopePro模块,在FPGA中插入ChipScope探头,通过JTAG接口实时地进行芯片内部信号检测。如果使用共享存储器的方式,需要由FPGA硬件、Simulink模块、MATLAB控制台或命令提示符工具提供一个独立的共享地址空间,将FPGA芯片中的数据实时地存储到这一空间中,然后再读到Simulink中,简化系统在线调试。例4ChipScope系统在线调试

本例在Simulink模型中插入一个ChipScope模块,设定好FPGA具体管脚功能,直接生成位流文件。然后使用ChipScopePro软件将位流文件下载到FPGA芯片,并将检测到的信号反馈给开发人员。实验步骤如下:

1)建立模型

将MATLAB工作路径设为C:\SG\exercise\chipscope\。

打开C:\SG\exercise\chipscope\chipscope.mdl。

将XILINXBlockset→BasicElements库中的Slice模块、XILINXBlockset→Math库中的SineCosine模块和XILINXBlockset→Tools库中的ChipScope模块放入chipscope.mdl窗口中。双击SineCosine模块,选定Function为SineandCosine。

双击ChipScope模块,在Triggers栏中选择Numberoftriggerports为1;TriggerSettings栏中设定Matchtype为Extended;Numberofdataports设定为2。

双击GatewayOut模块,选中SpecifyIOBlocationconstraints,在IOBpadlocation(cellarry{'MSB',…,'LSB'})中输入“{'F12'}”,对应Spartan-3E开发板上右下角一排LED中最右边的LD0。

将GatewayOut1、GatewayOut2和GatewayOut3模块的Translateintooutputport项取消。

如图5.3.27所示连接各模块。图5.3.27使用ChipScope模块的模型连接图

2) Simulink中仿真

单击Startsimulation开始仿真,仿真结果如图5.3.28所示。图5.3.28Simulink中的仿真结果

3)生成位流文件

双击SystemGenerator模块,选择Compilation为Bitstream;Part为Spartan3exc3s500e-4fg320。FPGAclockperiod(ns)为20;Clockpinlocation为C9。Spartan-3E的开发板FPGA芯片外部晶振接C9管脚,频率为50MHz。如图5.3.29所示。图5.3.29选择所用芯片单击Generate开始生成相关文件,如图5.3.30所示。图5.3.30导出相关文件

4)下载程序到FPGA并用ChipScope软件查看FPGA内部信号

给Spartan-3E开发板上电,并通过USB连接PC机。

打开ChipScopeProAnalyzer,如图5.3.31所示。图5.3.31打开ChipScopeProAnalyzer单击OpenCable/SearchJTAGChain,开始搜索支持的可编程器件,如图5.3.32所示。图5.3.32搜索器件搜索到如图5.3.33所示的三个器件,单击OK按钮确定。图5.3.33器件列表图5.3.34配置器件单击SelectNewFile,选择C:\SG\exercise\chipscope\netlist\chipscope_cw.bit位流文件并打开,单击OK按钮确定,如图5.3.35所示。图5.3.35选择下载位流文件此时开始将程序下载到FPGA芯片,完成后可以看到LD0被点亮。其信号应为占空比为50%的方波信号,即为图5.3.28中最上方的信号,但由于频率较高,人眼观察到的LD0为保持点亮状态。

展开ChipScopeProAnalyzer左侧Signals:DEV:0UNIT:0栏中的DataPort,如图5.3.36所示。

将CH:0DataPort[0]~CH:7DataPort[7]设为总线,命名为sin。

将CH:8DataPort[8]~CH:15DataPort[15]设为总线,命名为cos。图5.3.36多路信号合成总线单击上步建立的cos总线,选择BusRadix→SignedDecimal,对sin总线作同样处理,如图5.3.37所示。图5.3.37选择显示码制出现如图5.3.38所示对话框后单击OK按钮确定。图5.3.38十进制显示参数选择将ChipScopeProAnalyzer右侧TriggerSetup栏中Value值设为0000_0000,如图5.3.39所示。图5.3.39设定信号捕获触发条件双击ChipScopeProAnalyzer左侧NewProject栏中BusPlot项,如图5.3.40所示。图5.3.40选择捕获信号显示方式在新打开的BusPlot窗口中的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论