
《FPGADSP嵌入式系统结构设计说明书》由会员分享,可在线阅读,更多相关《FPGADSP嵌入式系统结构设计说明书(52页珍藏版)》请在文档大全上搜索。
1、FPGADS嵌入式系统结构设计说明书第7章FPGADS献入式系统设计7.1设计流程概述DSPDigitalSignalProcessing技术在通信、图像处理增强、数据获取、雷达及视频处理等等领域有着广泛的应用,因此,DSP的使用也不只存在唯一的方法,而是要根据不同的目的提出不同的解决方案。可编程芯片的FPG腌渐成为这些解决方案中的一个重要的组成部分。预计用于DSP的可编程芯片的产量将以平均每年41.6%的比率增长,到20XX,产量已达到17.8亿美元。通常,DSP算法的实现有两种途径:低速的用于普通目的的可编程DSP芯片;高速的用于特定目的的固定功能DSP芯片组和ASICApplicatio
2、nSpecificIntegratedCircuit芯片。而FPGADSP设计人员的另一种选择。大多数FPGA是由逻辑单元阵列、各个逻辑单元之间的可编程互连线、I/O管腿和其他一些如片上的存储器之类的资源组成的。其中逻辑单元是由1个四输入的查找表和1个触发器构成的。与普通的DSP芯片相比,FPGA芯片能够更好地实现并行处理,从而提高了性能并节省了能源。如算法中使用了14个MACMultiply&Accumulate,与只有1到4个MAC勺通用DSP芯片不同,在FPGA中可以配置14个乘法器,以实现并发处理。而这种流水线结构的数据流可以使信号负载最小化,从而节省指令和数据存取的系统开销。此外,因
3、为芯片所消耗的能量与它的时钟频率成正比,FPGA可以将输入的数据流分离开,并将它们作为几个并行的数据流进行处理,从而工作在一个较低的时钟频率下,这样做也就节省了能源。相对来讲,FPGA设计的灵活性和适应性更强。而与ASIC芯片相比,FPGA可以反复使用,并且在产品制成后还能重新更改设计。这样做有三点好处:修补bug;加入新的功能;使系统适应新的标准。使用FPGA勺现场可编程能力,不但避免了高额的开发费用,而且满足产品的上市需求。虽然有如此多的优点,但是目前FPGA在DSP应用上所占用的份额并不大,而且主要是用做协处理器,以辅助DSP芯片完成一些计算密集型的算法。这种现象的造成主要有两方面的原因
4、。一方面,在软彳上,DSP与FPGA间有着巨大的隔阂。生活在软件世界的DSP程序员要学习如寄存器、门、VHDL代码等等新的知识才能进入电子工程的世界。这两类设计人员不但完成设计时所使用的工具不一样,而且,在设计中所考虑的问题也不同。表1表示了他们之间的差异。另一方面,在硬彳上,原先的FPGA芯片没有集成专门的乘法器,只能依靠用户自己编辑乘法器。乘法器的实现比较耗费以查找表为主的系统资源,所以在编辑完并行的MA航,FPGA所剩的资源无几,从而限制了FPGA的使用。正是由于这两个主要的因素,使FPGM法在DSP领域中有更大的作为。表7-1DS腺计者FPG破计者设计方法C,C+,汇编MATLAB,S
5、imuLinkVHDL/Verilog编程综合,映射,布局布线设计问题信噪比,误码率,采样率腿到腿延时,流水线和逻辑层次,布局规划横亘在软件间的隔阂和硬件结构上的差异限制了FPGA勺DSP应用,但是现在这项工作变得简单了,Xilinx公司提出了一整套的解决方案。不但出现了IPIntellectualProperty核Core形式的DSP算法和将这些IP核集成到FPG破计的工具软件,而且出现了新的FPGAK片。软件上一个重要的代表是XtremeDSP系列软件包,主要包括:MathWorks公司的Matlab和Xilinx公司的SystemGenerator负责系统级设计;MentorGraphi
6、cs公司的FPGAAdvantage或Synplicity公司的SynplifyPro做HDLModelTechnology公司的ModelSim负责仿真;Xilinx公司的FoundationSeriesISE负责硬件实现。图7-1表示使用Xtreme设计DSP算法的流程。在硬件方面,Xilinx公司推出最新的VirtexII系列FPGA芯片。它内置了192个18X18bit的高性能组合乘法器,支持高达250MHz的数据率,内部固化了并行的DSP数据模型。它的密度达到一千万系统门,可以运行600GMAC/s大大超出了当今通用DSP芯片的T能TI的高端DSP芯片TMS320C6000勺定点系列
7、C64x只能达到1.62.4GMAC/s。设计方法和硬件结构上的改进使FPGA在DSP上的应用前景变得光明起来。Xilinx公司同它的合作者联合提出了XtremeDSP解决方案,它在系统结构设计和基于FPGA的DSP系统硬件实现之间建立起一座桥梁。SystemGenerator同Simulink模型工具结合,可以参数化、最优化算法。它可以自动从行为级的系统模型转换到FPGA现,其间不再需要手工重设,大大节省了开发时间并降低了出错概率。通过软件,用户可以在DSP函数的算法、性能、节能、硅片面积中进行选取,可以快速地分析出它的运算速度和花费。ftriM-rinsiTOfl-口 SPJT.发流程L重
8、法学耳组模型开衷simulink mdl2.自动化布生成HDL Test BfinchBitfitfedm加载到ffga图7-2基于模型的设计过程SimulationISIMXilinxFPG故持用户在同一个设计的不同部分创建自定义的字长。Xtreme支持不同的比特数、流水线程度和实现的选择方法。对于某些需要更多比特数来表示精度的通道,只要更改IP的参数,软件就会自动适应新的数据配置。Xtreme的配置灵活,用户可以根据需要进行设置:若全部使用并行结构就可以达到最大的数据吞吐量,也可以由于降低了系统时钟而节省能源;相反的,若全部使用串行结构则会使硅面积最小,节省花费,但同时仍能够得到相当的性能
9、。MATLAB乍为线性系统的一种分析和仿真工具,在工程和计算科学上有着广泛的应用。它建立在向量、数组和矩阵的基础上,结合了可视化的数学计算和强大的技术语言。内建的接口可以从指令、文件、外部数据库和程序中迅速得到数据。Simulink作为Matlab的一个工具箱toolbox,在整个的DS喉计中起着举足轻重的作用。它是一个交互式的工具,用于对复杂的系统进行建模、仿真和分析。成为控制系统设计、DSP设计、通信系统设计和其它仿真应用的首选工具。它的特性为:建立图形式的模块列表,模拟复杂系统,评估系统的性能,提高设计水平;建立模拟、数字或数模混合的信号系统,控制逻辑器件;与Matlab的结合;与Sta
10、teflow紧密结合,建立数据驱动行为的模型;广泛利用DSP库。SystemGenerator是Xilinx公司的的一个模块集blockset,它是simulink的一个插件,其中设置了Xilinx特有的DS电能的IP核,包括了基本DSP数和逻辑算符,如FIRFiniteImpulseResponse、FFTFastFourierTransform、存储器、数学函数、转换器、延时线等等。这些预先定义好的模块保证了FPGA实现时的位-bit和周期-cycle的正确。使用它可以自动生成VHDL/Verilog语言、测试向量以及可以使ModelSim仿真的.do文件。为了得到最佳的性能、密度和可预测
11、性,SystemGenerator还会自动将特定的设计模块映射成高度优化了的IP核模型。XilinxBlockset中的模块,有的可以直接映射到硬件,有的对应着IP核。它们中每个都可以根据设计要求更改参数,支持双精度和定点的算法。这个模块集是一个可以外部扩展的库,使用的是C+的定点算法,所以用户可以创建自己的基于C+类的Simulink库元件,在设计中它会被当作黑箱Blackbox处理。有两种可以实现HDL综合的工具:MentorGraphics的FPGAAdvantage和Synplicity的Synplify。这两个工具都可以将上一步使用Simulink和XilinxSystemGener
12、ator完成的设计的顶层和附加的子VHD戊彳HDL行为级或RTL设计文件转化成门级表示EDIF文件。可以使用其中的任意一个软件来完成这个任务。这些工具可以:将HDL综合成门级的设计实现;通过消除对每个门的定义,减少了设计时间;减少了手工将硬件说明翻译为原理图设计中可能出现的错误数量;在最优化原始的HDL代码过程中应用了综合工具的自动技术如机械编码类型、自动I/O插入,从而使设计更有效率。使用ModelSim就可以在设计过程中对HDL进行仿真,以保证结果的正确性。它的特性如下:通过使用DirectCompile结构,达到最快的编辑速度和有竞争力的模拟性能;使用SingleKernelSimula
13、tion,将VHDL和Verilog结合在一起;将machine和Simulator版本独立开来,以简化可携带性和库的维护。Xilinx的ISE软件包含了最新的实现工具,可以用来创建有效简洁的设计。当综合完VHDL文件后,就会得到顶层的EDIF文件也有子层的EDIF文件,将这些EDIF文件作为XilinxDesignManager的输入源进行实现,它将翻译Translate、映射Ma、布局布线Place&Route以及配置Configure该设计。最终得到下载用的位流文件。它的时序驱动的布局布线特性允许用户为特定的路径指定自己的时序;静态时序分析能够减少设计步骤;能够在实现前后对设计进行验证;
14、可以重新迭代先前的设计以缩短整个设计周期。利用FPGA实现DS琳入式系统,已有互相补充的软件设计工具,表7-2列出了在系统建模和设计、算法开发和优化、HDL仿真和产生及设计校验和诊断等不同设计阶段使用的软件。表7-2FPGA实现DSP的软件工具设计阶段软件和功能软件公司系统建模和设计Simulink:动态系统的多域仿真和基于模型设计的平台,提供交互的图形环境和定制的模块库集合MathWorksPlatformStudio:包含广泛种类嵌入设计工具、IP、库、引导卡和设计产生器的集成开发环境,Xilinx算法开发和优化MATLAB算法开发、数据可视化、数据分析及数值计算的高级技术计算语言和交互环
15、境,MathWorksDSPg合工具提供MATLABfsystemGenerator或ISE之间的直接链接,自动产生可综合的RTL模型和测试床Accelchip:直接由C语言的程序转换到FPGA勺硬件XilinxHDL仿真和产生ISE:设计者可用VHD域Verilog设计,XFPGA程,利用SystemGenerator时,可按批作业模式调用XilinxSynthesis:综合工具XST/SynplifyPro可低成本、高效率映射设计到FPG颇件,按批作业模式选择他们来和SystemGenerator一起使用Xilinx/SynplicityModelSim:SystemGenerator提供
16、必要的接口与ModelSim仿真器连接,可以利用它做HDL协同仿真或实时地输入仿真结果到Simulink/SystemGenerator仿真MentorGraphics设计校验和诊断ChipScopePro:监视FPGA勺内部测点,预测和诊断设计,探测结果可插入到Simulink/SystemGenerator内Xilinx 7.2 PGA设计DS电术ISE实现软件、SystemGenerator以及MATLAB/Simulink工具之间都有相互配合的版本问题,对于ISE8.1以上的版本,要求相同序号的SystemGenerator版本,并配合使用MATLAB/Simulink7.2以上的版本
17、,如R2006a等。SystemGenerator8.1以上的版本,只要执行SysGenInstall.exe的执行文件,安装时会自动找到MATLAB/SimulinkR2006a的安装目录,将Xilinx的Blockset模块集安装到Simulink中。7.2.1 浮点数与定点数的表示与转换在设计仿真中Simulink是利用双精度数double表示数值,它是64位2的补码浮点数,而双精度数对FPG端无效或不实际的。当利用有限位数来表示二进制数时,二进制点的位置确定了所表示数的范围和精度,二者的关系是二进制点前面的位数多表示的数值的有效范围大,精度就低,相反,二进制点后面的位数多,数值精度提高
18、,数值有效范围减小。例:16位数值0001011001101011=213+210+29+26+25+23+21+20=4096+1024+512+64+32+8+2+1=5739表示此数需要的二进制位数为N=log10X/log102=log105739/log102=3.7588/0.3010=12.4866取最靠近的整数为13位。已知16进制的数值可以按照如下方式进行二进制变换和计算数值166B=0001011001101011=+=+=5739对于DSP技术更好的方式理解2的补码数是将其符号表示位看作为原始的二进制数的相应的部分,这个要点是实现时只是这位有负的加权值,所以,2的补码数值
19、如下计算。11111111=-27+26+25+24+23+22+21+20=-128+64+32+16+8+4+2+1=-128+127=-1对于双精度的64位2的补码浮点数,由于二进制点可以移动,所以在9.233*1018之间的任何数都可以表示,精度为1.08*10-19,也就是浮点数可以做到数值范围大,精度高,这也是双精度的含义。由于硬件无法按照双精度的要求进行实现,所以要转换成N位的定点数。在Simulink中Xilinx的模块集有三种数据类型:1 .不带符号的N位定点数,表示为UFix_N_m,其中N为二进制位数,m为二进制点距离最低位的位置,最大精度为2m;2 .带符号的N位定点数
20、,表示为Fix_N_m,其中N为二进制位数,m为二进制点距离最低位的位置,最大精度为2m;3 .布尔类型数,总是定义为0或1,作为控制口的使能C日或复位reset,所以不可以设为无效。例:数值为-2.261108,表示为Fix_16_13的格式,101.1011110100101=-22+20+2-1+2-3+2-4+2-5+2-6+2-8+2-11+2-13=-4+1+0.5+0.125+0.0625+0.03125+0.015625+0.00390625+0.00048828125+0.0001220703125Value =-2.261108.Format = Fix_16_13h悒廿F
21、rachn=-2.2611083984375Format = Sign_Width_Dflcimal point (tom the LSB(5加:=SignedValueUFh-Unsignedvahe)图7-3数据类型在基于模型的系统设计流程中,当Xilinx模块集中的带符号的定点数模块需要与Simulink的双精度数模块通信时,必须要进行数据类型的变换,这是基于模型的系统设计流程中重要概念之一。为了完成这个数据类型变换,要选择Xilinx模块集中的GatewayIn实现双精度数到定点数的转换,或者选择Xilinx模块集中的GatewayOut实现定点数到双精度数的转换。GatewayIn/
22、Out两个模块可以通过选择参数来控制如何实现双精度数与定点数之间的相互转换。一般来说,主要由GatewayIn模块的参数选择来进行控制,除了选择带符号或不带符号定点数的位数和二进制点位置之外,还需要选择以下两个参数:1. 量化方式:截断Trancate或舍入Round;2. 溢出方式:饱和Saturate或交迭Wrap。当小数部分的位数不足以表示一个数值的小数部分时,将出现量化的情况,截断是放弃最低有效位右边的所有位,当有两个等距离最接近表示的数值,舍入将取最接近表示的数值或取偏离0最远的数值。DOUBLEr1-a 尸于二 pT ? 5丁7 -甘-4 9-ia -:L -12OVERFLOWS
23、aturate VJrap-Flagfpr ErrorQUANTIZATION Truncate-Round图7-4双精度浮点数到定点数的转换例:完全精确数值为:001.10111101010000=-2.2607421875截断的结果为:Fix129101.101111010=-2.26171875舍入的结果为:Fix_12_9101101111011=-2.259765625取决于采用截断还是舍入的方法,对于正的完全精确数值和无符号完全精确数值都会有不同的输出结果。例:正的完全精确数值为:10110111101010000=1.7392578125截断的结果为:Fix_12_9101101
24、111010=1.73828125舍入的结果为:Fix_12_9101101111011=1.740234375例:无符号完全精确数值为:10110111101010000=5.7392578125截断的结果为:Fix_12_9101101111010=5.73828125舍入的结果为:Fix_12_9101101111011=5.740234375当一个数值超出了表示的范围将出现溢出,选择饱和时,取最大的正值或最大的负值,在定点数中选择交迭时,就放弃超出最大有效位的任何有效位。在仿真的过程中出现溢出将有溢出标志作为Simulink的错误产生。例:完全精确的数值为:011011011=13.6
25、875饱和的结果为:Fix_7_40111111=3.9375交迭的结果为:Fix_7_41011011=-2.3125不论选择哪种方式处理量化和溢出,产生的HDL模型和Simulink的模型将有相同的行为特性。究竟选择量化和溢出方式中的哪一种,实际上取决于设计的要求和硬件的实现,量化方式中截断不增加硬件,而舍入要增加进行进位的硬件资源,所以在满足设计要求的情况下,应尽量选择截断的量化方式。溢出方式中选择饱和的方式可以防止输出的振荡,输出数据不再改变,实现上也要增加硬件的资源。数据类型中的布尔Boolean类型是为模块的控制口设计的,如模块的时钟使能CE或复位reset口要选择布尔类型,布尔类
26、型是一位的非符号数的变量,与一位的非符号数的区别是,一位的非符号数可以变为无效,但是布尔类型的数只定义为高或低电平的1或0两种情况,而不可以变为无效,否则控制口也将失效,系统无法工作。例:定义以下的2的补码二进制分数的格式和计算其数值:110001101011格式为:Fix_12_5,数值为:-64+32+2+1+0.25+0.0625+0.03125=-917/32=-28.65625例:什么格式应该利用来表示以下的信号:1 最大值为+1,最小值为-1,量化为12位数据:Fix_12_10;2 最大值为0.8,最小值为0.2,量化为10位数据:UFix_10_10;3 最大值为278,最小值
27、为-138,量化为11位数据:Fix_11_1。例:求进行加法和乘法运算时,完全精度的输出数据类型。1+=4 *=利用Xilinx的模块集中的模块创建一个SystemGenerator的设计,这些模块是硬件可实现的SysGen模型,此模型必须包含SystemGenerator模块,SysGen模型要通过I/O模块作为Xilinx模块集与其他的Simulink的模块之间的接口,模型的输入端通过GatewayIn与Simulink的源连接,模型的输出端通过GatewayOut与Simulink的沉及库函数连接,如图7-5所示,模型的仿真和优化就很方便。餐温嬴7-sysGsnDalaPalhand;
28、.一:包温标:SoureAS!M|Mrblod(5:Snk孕IJUa-aGatewaybtacksusedtoinl-erfacebetweenSimulinkandSysGenblocks图7-5Simulink模块的设计模型7.2.2采样周期的设置在SysGen模型中白每个SysGen信号必须被采样,出现在等距离离散时间点上的瞬间称为采样时间。在基于模型的Simulink建模设计中,每个模块都有采样周期,它常对应模块的功能如何计算和结果如何输出,所以采样周期是基于模型的系统设计流程中另一个重要概念。对于GatewayIn和模块的w/o输入的采样周期必须明确设定,采样周期也可以由其他模块的输
29、入采样时间来驱动。采样周期的单位可以认为是任意的,但是许多Simulink的源模块有一个时间要素,例如,1/44100的采样周期意味着模块的功能每间隔1/44100秒执行一次。当设置采样周期时,要遵循奈奎斯特Niquist定理。一个模块的采样周期直接与其在实际硬件中如何定时有关。在SystemGenerator模块的参数中必须设置Simulink的系统周期,对于单数据率的系统,Simulink的系统周期将与设计中设置的采样周期相同。如图7-6所示。图7-6采样周期的设置7.3SystemGenerator模块在Xilinx模块集中,对可以车专化为HDL代码的模块,其标示都以一个X型的水印来区别
30、于其它的Simulink模块。对SysGen设计,Xilinx模块集有一些十分重要和特殊的模块,要给以特别的注意。1 SystemGenerator模块:SystemGenerator模块是一个极其重要的基本模块,它不仅使得在Simulink下建立的SysGen模型提供了层次化的表述能力,同时还必须由它来激活代码生成器,以实现模型的HDL代码转化。又于一个SysGen模型,至少要保证顶层有一个SystemGenerator模块。在一个SysGen模型中,SystemGenerator的参数选择对话窗如图7-7所示。在此窗口中,要进行定制的参数有:1XilinxSystemGenerator:目
31、标器件的系列、型号、速度等级、封装。SysGen持的器件系列有:Virtex-4,Virtex-IIPro,Virtex-II,Virtex-E,Virtex,Spartan3E,Spartan3,Spartan-IIE和Spartan-II系歹U。采用的综合工具。对于选用不同的综合工具,要求生成的代码也有一定的差别。目前支持的综合工具有:LeonardoSpectrum,SynplicitySynplifyPro,Synplify和XilinxXST。目标路径。设计的目标代码保存的路径。产生测试向量复选框。如果选择了该项,则在生成HDL弋码时可以将Simulink仿真输入转换成VHD测试激励
32、向量,将Simulink仿真输出转换成对应的VHDLB式输出向量。这些向量可用于所产生的VHDL弋码的行为仿真。图7-7SystemGenerator的参数选择对话窗 2SystemPeriod系统周期:分别设置Simulink的系统周期和实现硬件的系统时钟周期,前者默认的时间单位是秒,后者为纳秒。 3HierarchicalControl层次控制:OverridewithDoubles:以双精度浮点的方式仿真Xilinx模块或Simulink模型,替代Xilinx模块的定点方式。设置为OverridewithDoubles的Xilinx模块显示为灰色。关于Xilinx模块的定点和浮点方式在G
33、atewayIn模块和GatewayOut模块的介绍中详细阐述。在下拉选择框中,可以指定在进行Simulink仿真时,FPGA设计是根据AccordingtoBlockMasks模块的屏蔽情况,使用双精度浮点信号取代定点信号;EverywhereinSubsystem在子系统中使用双精度浮点信号取代定点信号;NowhereinSubsystem在子系统中不使用双精度浮点信号取代定点信号。GenerateCores:选择在生成VHD代码的过程中,是否生成XilinxLogiCOREs。可选项有:AccordingtoBlockMasks根据模块的屏蔽情况生成XilinxLogiCOREs;Eve
34、rywhereAvailable在任何可能的地方,都生成XilinxLogiCOREs,Nowhere不生成XilinxLogiCOREs。设置好SystemGenerator的参数后,单击Generate按钮开始生成VHDL代码。如果目标目录不存在,会提示创建该目录。在代码生成过程中,会显示一个进度条来表示生成进度。代码生成后,会弹出一个确认信息窗,点击确认即可。2BlackBox模块:BlackBox模块是一个十分重要的基本模块,在Simulink环境里,并不是所有的硬件结构都可以通过Xilinx模块集中的模块进行组合来实现;但为了能进行设计系统的模型仿真,设计的Simulink模型又应该
35、是一个完整的模型。黑匣子BlackBox模块就是专门设计用来解决这种矛盾,提供Simulink模型与卞造的HDL源码之间的接口。此外,在设at中,某些组件可能已经用VHD或Verilog设计好了可直接调用,或者某些组彳直接用VHD蹄写比起在Simulink里建模要更为简单些。这些情况下,都要选用BlackBox模块。BlackBox模块的使用方法是:1将BlackBox模块添加到模型中;对BlackBox模块的要求:与BlackBox模块有关的VHDL元件必须遵从以下SystemGenerator的要求和规定:1 实体名称必须与设计中任何其他实体的名称不同;2 在顶层的实体中不允许双向端口;3
36、 不是时钟或时钟使能的任何端口必须具有std_logic_vector的数据类型;4 是时钟或时钟使能的任何端口必须具有std_logic的数据类型;顶层的VHDL程序必须为每个Simulink中有关的采样率设置分别的时钟和时钟使能端口。在blackBox的VHDL程序中时钟和时钟使能端口应该如下表示:1 时钟和时钟使能信号必须成对地出现;2 虽然BlackBox可以有多个时钟端口,但利用单个时钟源驱动每个时钟端口;3 只有时钟使能的速率是不同的;4 每个时钟的名称和每个时钟使能的名称必须包含clk和ce的字符;5 .时钟使能的名称必须与相应的时钟名称相同,只是clk用ce代替。时钟和时钟使能
37、端口在BlackBox模块的图框中不可见。BlackBox模块必须通过一个MATLAB的M函数的文件描述它的接口,例如,端口和generics,设计的实现,通过HDL协同仿真的仿真模型等。这个M函数文件的名称应该在模块参数对话框中进行规定。M函数的配置文件要完成以下的工作:1. 规定HDL元件的顶层实体名称,它应该与blackbox名称一致;例:this_block.setEntityName;2. 选择语言即VHDL或Verilog;例:this_block.setTopLevelLanguage;3. 描述端口,包括类型、方向、位宽度、二进制点位置、名称和采样率;例:this_block.
38、addSimulinkInport;this_block.addSimulinkInport;this_block.addSimulinkOutport;dout_port.setType;4. 定义由此blackbox的HDL要求的任何generics;5. 规定此blackbox的HDL和与此模块有关的其它文件例如EDIF;例:this_block.addFile;-addedentriesthis_block.addFile;this_block.addFile;6. 定义为此模块的时钟和时钟使能;7. 定义是否此HDL有任何组合的通过反馈的路径。2如果在模型的项目路径下含有VHDL文件
39、,自动执行一个配置向导,选择相应的HDL文件,如图7-8所示;图7-8BlackBox参数定制对话窗3设置BlackBox的参数,如图7-9所示。BlackBox(XilinxBlackBox)匚叵I区IncorporatesblackbcmHDLandsmnulalionmodelintoaSystemGerwratoidtsign.YoumustsupplyaBlackBom麻thceftaininfoimationabouttheHDL:orrp.jicrii5:.ijI.jI.zlit:-10brncirfE.仁wGet?Pt?rThi中指定该ModelSim模块。3FPGAArea:
40、提供用于资源使用估算的信息。在生成彳t码时,该子系统功能的硬件实现直接使用指定的VHDLC件。也可以使用Verilog文件,但这时必须人工编写模块的M函数。进彳T仿真时,BlackBox模块通过结合SimulationMultiplexer模块和ModelSim模块有多种灵活的仿真方法。3ModelSim模块ModelSimHDL协同仿真模块配置和控制对一个或几个BlackBox模块的协同仿真。这个模块完成以下工作:1 .构造为允许blackboxHDL在ModelSim中被仿真所需要的附加VHDL2 .当Simulink仿真开始时引起ModelSim一个对话时间;3 .传递在Simulink
41、和ModelSim之间的通信;4 .当blackboxHDL被编译时报告是否有错误内检测;5 .当仿真完成时,如果合适终止ModelSim。在仿真期间,每个ModelSim模块引起一个ModelSim的拷贝,所以利用ModelSim一个license,如果license是不足的,几个blackboxe模块可以共享此相同的模块,除了灵活性差,采用这个方式没有东西损失,在ModelSim中的时间刻度匹配在Simulink中的时间刻度,即,i.e.,onesecondofSimulink的一秒仿真时间对应ModelSim的一秒仿真时间。参tolfx数选择如图7-10所示。OModelSim(Mode
42、lSimHDLCo-SimuEionAllowothe(blockstoscheduleHDLco-?imulaion3百k,NotethatselectingSkipccunpilanwheninappropriatecan俞ndionerror?andfailuresPfeasereferto(lieblockhelpfordetailAdvancedRunGo-mniiaticnindirectoiy:.Anodefeim0Openwaveformviewer0LeaveModelSimopenal:endofsinrNjIatioriCancelApply图7-10ModelSim模块
43、参数选择6 GatewayIn模块和GatewayOut模块:对于Simulink仿真,通常的Simulink模型都是浮点仿真。而对于用Xilinx模块实现的设计,由于最终是要用FPGA成一个硬件电路的实现,因而在默认方式下,Simulink中的Xilinx模块是进行定点仿真,而其余的Simulink一般模块是做浮点仿真。MatlabIO接口模块组中的GatewayIn模块和GatewayOut模块提供了FPG殷计定点和通常Simulink模块浮点之间的接口功能。GatewayIn模块将其它Simulink模块的双精度浮点数据转换成XilinxFPGA需要的定点数据,而GatewayOut模块
44、则正好相反。可以在一个实例中,选中Format菜单里的Portdatatypes来验证。但是有的时候,在用户选择定点宽度,或者用定点方式仿真FPG破计没有得到期望的结果或结果不正确时,用户就希望,可以选择以双精度浮点的方式仿真整个系统或特定的某些模块,以帮助发现FPG破计的哪一部分存在量化错误。这时就可以通过设置Xilinx模块参数中的OverridewithDouble项,并配合以SystemGenerator模块里的相应设置来实现。7 .Concat模块、Convert模块、Reinterpret模块和Slice模块在以下的一些情况下,可以利用这些模块来完成所需做的工作:1 .将两个数据总
45、线组合起来形成一个新的总线;2 .强迫进行包括位数和二进制点的数据类型变换;3 .重置无符号数为符号数或符号数为无符号数;4 .在数据位增长时提取数据的指定位。Concat模块:此模块执行两个位矢量的连接,模块的两个输入必须是无符号的整数,例如两个二进制点位于0的无符号数,或者利用Reinterpret模块所提供的符号数变换为无符号数的能力达到扩展Concat模块的功能,Convert模块:Convert模块可以把每个输入采样变换为所需算术类型的数。1 .一个数可以变换到2的补码的符号数或无符号的数值;2 .总位数和二进制点由设计者规定;3 .舍入和量化选择加到输出数值;4 .取决于溢出和量化
46、的选择可以利用附加的硬件,而不利用LogiCore。在规定总位数和二进制点位置,符号或无符号的算术类型后,模块首先排齐输入和输出端口类型之间的二进制点,然后利用规定的总位数和二进制点,与利用的溢出和量化选择有关,输出可能按抛下的位相反地变化。饱和溢出改变小数的数值为得到饱和的数值。舍入量化也可能影响到二进制点左边的数值。例:以下数值通过Convert模块导致利用不同位数和二进制点有相同的结果。原始数值:Fix_10_801.10000000变换为:Fix_7_4001.1000变换为:Fix_6_0000010.舍入000001.结尾Reinterpret模块:为保持输入端表示的数值,无任何考
47、虑地强迫其输出为新的类型。输入端总的位数等于输出端总位数,允许无符号位数据重置为符号位数据,或符号位数据重置为无符号位数据。也允许通过重新放置二进制点缩放数据。例:重置以下的数值,迫使二进制点到位置5。输入数据为:Fix_10_801.10000000=+1.5输出数据为:Fix_10_501100.00000=+12Slice模块Slice模块允许从输入数据移位出一系列的位,产生一个新的数据值,输出数据是无符号数二进制点在位置0处。例:取Fix_10_8符号数的4位移动,偏置最低位5位。输入数据为:Fix_10_801.10000000=+1.5输出数据为1100=12较高位位置+宽度:从M
48、SB的顶位=0偏置,宽度=4输出数据为01100.00000=6两个位置定位:从MSB勺顶位=-1偏置,从LSB的位=5偏置输出数据为01100.00000=12模块通用属性双击Xilinx的模块,在弹出的参数设置对话窗中,有一些参数的设置是具有普遍性的。1ArithmeticType运算数据类型:指定输出信号是无符号或带符号二进制补码。2ImplementwithXilinxSmart-IPCoreifpossible采用XilinxSmart-IP核实现:复选项,选中则用实现核例示的VHDL代码来实现该模块,否则只生成可综合的VHDL代码。如果不能完成核的例示,则自己生成可综合的VHDL代
49、码。3GenerateCore生成核:见前面介绍的几个重要模块4UsePlacementInformationforCore对核使用布局要求:选中该项通常会加快核的实现,但由于添加了约束,可能导致布局布线失败。5Latency延迟:输出延迟周期。6Precision精度:缺省情况下为Full,保证有足够的精度不致出错;用户也可以选择User-Defined来自己设定。7NumberofBits位数:设置定点数的位长,其中包括BinaryPoint,设定二进制小数点的位置。设置不合理,会导致溢出和量化错误。8OverflowandQuantization溢出和量化错误处理:用户对定点数设置不当,
50、会导致溢出和量化错误。发生溢出时,出错处理可以是Saturate输出可表示的最大正值或最小负值、Warp”截顶或Error”直接报错。发生量化错误时,出错处理可以是Round舍入或Truncate”截尾。9OverridewithDoubles:见前面介绍的几个重要模块。10ProvideResetPort提供复位端:是否为模块提供复位端口。11ProvideEnablePort提供使能端:是否为模块提供使能端口。12UseExplicitSamplePeriod使用外部采样周期:选中该项可较好的解决模型中的环路时序。13FPGAAreaSlices,FFs,LUTs,IOBs,Embedde
51、dMults,TBUFsFPGA资源使用:提供模块资源使用的估算信息,以便ResourceEstimator模块进行系统资源耗用估算。一维数组中的数字分别对应相同位置上所指的硬件资源的耗用情况。图7-11计数器的各种参数选项7.4设计FIR滤波器设计描述一个单通道、单速率滤波器的技术指标为:?采样频率SamplingFrequency=1.5MHz?截止频率1Fstop1=270kHz?通带频率1Fpass1=300kHz?通带频率2Fpass2=450khz?截止频率2Fstop2=480kHz?通带两边衰减Attenuationonbothsidesofthepassband=54dB?通
52、带起伏Passbandripple=1两个不同的信源利用来仿真此滤波器:?线性调频chirp模块,它在6KHz和10KHz规定的频率之间扫描,不考虑瞬时输出频率。?随机信源发生器,它在-1.9到1.9的范围内输出均匀分布的随机信号,均匀分布是驱动定点滤波器更好的选择,因为滤波器是受限的。一产生FIR滤波器的系数利用MATLABconsole窗口,从d:/DSP/lab4目录打开bandpass_filter.mdl模块,从XilinxBlocksetDSP模块集添加FDATool模块到设计中。在d:/DSP/lab4目录中利用FDATool模块为以下的技术指标产生FIR滤波器的系数。?采样频率
53、SamplingFrequency=1.5MHz?截止频率1Fstop1=270KHz?通带频率1Fpass1=300KHz?通带频率2Fpass2=450Khz?截止频率2Fstop2=480KHz?通带两边衰减Attenuationonbothsidesofthepassband=54dB?通带波纹Passbandripple=11 .双击桌面上MATLABi标或StartMenuAllProgramsMATLABR2006a打开MATLAB指令窗口。2 .在指令窗口键入cdd:/DSP/lab4/,将目录转到所设目录下。3 .从MATLAB勺控制台窗口打开bandpass_filter.
54、mdl模块。4 .从XilinxBlocksetDSP添加滤波器设at分析工具FDATool至U设计中。5 .在FDAToolDesignFilter窗口图7-12输入以下的滤波器参数。?FilterType:Bandpass?Units:KHz?SamplingFrequency=1.5MHz?Fstop1=270KHz?Fpass1=300KHz?Fpass2=450Khz?Fstop2=480KHzAttenuationonbothsidesofthepassband=54dBAstop1andAstop2parametersPassbandripple=1Dcniaty Fedor 1
55、6(* Niriimjiri nrc田_ 卜 it凶 dreferO 5uecifv orderFraqueHCif单0忙喇加匚Urits hHzJeitignFilter图7-12在FDATool中设计一个滤波器6 .点击DesignFilter按钮确定滤波器的阶数。频谱窗口将被更新,如图7-13所示。_i_riernhirerlnro3iDri_MHOTiUJiirprsfi_rct*:(CDJsnjrfuwCilrsct-FomrF新rdEd*曲mSxrceiDesignednooO2346bOPJ省艮4S唧硼雁脚一尸_j*一num%_i_加etine1IF后htapsg日r1IDDm式
56、0SCC注意:在MATLABworkspace中将添加Num量。对于FIR滤波器,Num示在设计中利用的系数。这也是一个可选的步骤,因为系数通过FDATool模块仍然是有效的。J Export-I口冈|EkpM1q|WrkspseLExportAsCoeRhcients-f1Vriabls Nun5己忙)|Ovciwfite Va(iable5图7-14 输出系数到Workspace9 .在MATLAB控制台窗口键入Num观察系数清单。10 .在MATLAB控制台窗口键入max确定最大的系数值,它相应地规定系数的宽度和二进制点数。问题:填写与系数有关的以下信息:Maximumvalue:Minimumvalue:把系数与FIR滤波器联系起来从XilinxBlocksetDSP库添加DAFIRv9.0滤波器模块,并与产生的系数联系起来。1. 从XilinxBlocksetDSP库添加DAFIRv9.0滤波器模块到设计中。2. 双击XilinxDAFIRv9.0滤波器模块,在模块