FPGADSP嵌入式系统研发设计.docx
- 文档编号:29379943
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:77
- 大小:1.39MB
FPGADSP嵌入式系统研发设计.docx
《FPGADSP嵌入式系统研发设计.docx》由会员分享,可在线阅读,更多相关《FPGADSP嵌入式系统研发设计.docx(77页珍藏版)》请在冰豆网上搜索。
FPGADSP嵌入式系统研发设计
第7章FPGADSP嵌入式系统设计
§7.1设计流程概述
DSP(DigitalSignalProcessing)技术在通信、图像处理增强、数据获取、雷达及视频处理等等领域有着广泛的应用,因此,DSP的使用也不只存在唯一的方法,而是要根据不同的目的提出不同的解决方案。
可编程芯片的FPGA逐渐成为这些解决方案中的一个重要的组成部分。
预计用于DSP的可编程芯片的产量将以平均每年41.6%的比率增长,到2005年,产量已达到17.8亿美元。
通常,DSP算法的实现有两种途径:
低速的用于普通目的的可编程DSP芯片;高速的用于特定目的的固定功能DSP芯片组和ASIC(ApplicationSpecificIntegratedCircuit)芯片。
而FPGA是DSP设计人员的另一种选择。
大多数FPGA是由逻辑单元阵列、各个逻辑单元之间的可编程互连线、I/O管腿和其他一些如片上的存储器之类的资源组成的。
其中逻辑单元是由1个四输入的查找表和1个触发器构成的。
与普通的DSP芯片相比,FPGA芯片能够更好地实现并行处理,从而提高了性能并节省了能源。
如算法中使用了14个MAC(Multiply&Accumulate),与只有1到4个MAC的通用DSP芯片不同,在FPGA中可以配置14个乘法器,以实现并发处理。
而这种流水线结构的数据流可以使信号负载最小化,从而节省指令和数据存取的系统开销。
此外,因为芯片所消耗的能量与它的时钟频率成正比,FPGA可以将输入的数据流分离开,并将它们作为几个并行的数据流进行处理,从而工作在一个较低的时钟频率下,这样做也就节省了能源。
相对来讲,FPGA设计的灵活性和适应性更强。
而与ASIC芯片相比,FPGA可以反复使用,并且在产品制成后还能重新更改设计。
这样做有三点好处:
修补bug;加入新的功能;使系统适应新的标准。
使用FPGA的现场可编程能力,不但避免了高额的开发费用,而且满足产品的上市需求。
虽然有如此多的优点,但是目前FPGA在DSP应用上所占用的份额并不大,而且主要是用做协处理器,以辅助DSP芯片完成一些计算密集型的算法。
这种现象的造成主要有两方面的原因。
一方面,在软件上,DSP与FPGA之间有着巨大的隔阂。
生活在软件世界的DSP程序员要学习如寄存器、门、VHDL代码等等新的知识才能进入电子工程的世界。
这两类设计人员不但完成设计时所使用的工具不一样,而且,在设计中所考虑的问题也不同。
表1表示了他们之间的差异。
另一方面,在硬件上,原先的FPGA芯片没有集成专门的乘法器,只能依靠用户自己编辑乘法器。
乘法器的实现比较耗费以查找表为主的系统资源,所以在编辑完并行的MAC后,FPGA所剩的资源无几,从而限制了FPGA的使用。
正是由于这两个主要的因素,使FPGA无法在DSP领域中有更大的作为。
表7-1
DSP设计者
FPGA设计者
设计方法
C,C++,汇编
MATLAB,SimuLink
VHDL/Verilog编程
综合,映射,布局布线
设计问题
信噪比,误码率,采样率
腿到腿延时,流水线和逻辑层次,布局规划
横亘在软件间的隔阂和硬件结构上的差异限制了FPGA的DSP应用,但是现在这项工作变得简单了,Xilinx公司提出了一整套的解决方案。
不但出现了IP(IntellectualProperty)核(Core)形式的DSP算法和将这些IP核集成到FPGA设计的工具软件,而且出现了新的FPGA芯片。
软件上一个重要的代表是XtremeDSP系列软件包,主要包括:
MathWorks公司的Matlab和Xilinx公司的SystemGenerator负责系统级设计;
MentorGraphics公司的FPGAAdvantage或Synplicity公司的SynplifyPro做HDL综合;
ModelTechnology公司的ModelSim负责仿真;
Xilinx公司的FoundationSeriesISE负责硬件实现。
图7-1表示使用Xtreme设计DSP算法的流程。
在硬件方面,Xilinx公司推出最新的VirtexII系列FPGA芯片。
它内置了192个18×18bit的高性能组合乘法器,支持高达250MHz的数据率,内部固化了并行的DSP数据模型。
它的密度达到一千万系统门,可以运行600GMAC/s。
大大超出了当今通用DSP芯片的性能(TI的高端DSP芯片TMS320C6000的定点系列C64x只能达到1.6—2.4GMAC/s)。
设计方法和硬件结构上的改进使FPGA在DSP上的应用前景变得光明起来。
图7-1Xtreme系统中实现DSP的设计流程图
Xilinx公司同它的合作者联合提出了XtremeDSP解决方案,它在系统结构设计和基于FPGA的DSP系统硬件实现之间建立起一座桥梁。
SystemGenerator同Simulink模型工具结合,可以参数化、最优化算法。
它可以自动从行为级的系统模型转换到FPGA实现,其间不再需要手工重设,大大节省了开发时间并降低了出错概率。
通过软件,用户可以在DSP函数的算法、性能、节能、硅片面积中进行选取,可以快速地分析出它的运算速度和花费。
图7-2基于模型的设计过程
XilinxFPGA支持用户在同一个设计的不同部分创建自定义的字长。
Xtreme支持不同的比特数、流水线程度和实现的选择方法。
对于某些需要更多比特数来表示精度的通道,只要更改IP的参数,软件就会自动适应新的数据配置。
Xtreme的配置灵活,用户可以根据需要进行设置:
若全部使用并行结构就可以达到最大的数据吞吐量,也可以由于降低了系统时钟而节省能源;相反的,若全部使用串行结构则会使硅面积最小,节省花费,但同时仍能够得到相当的性能。
MATLAB作为线性系统的一种分析和仿真工具,在工程和计算科学上有着广泛的应用。
它建立在向量、数组和矩阵的基础上,结合了可视化的数学计算和强大的技术语言。
内建的接口可以从指令、文件、外部数据库和程序中迅速得到数据。
Simulink作为Matlab的一个工具箱(toolbox),在整个的DSP设计中起着举足轻重的作用。
它是一个交互式的工具,用于对复杂的系统进行建模、仿真和分析。
成为控制系统设计、DSP设计、通信系统设计和其它仿真应用的首选工具。
它的特性为:
建立图形式的模块列表,模拟复杂系统,评估系统的性能,提高设计水平;建立模拟、数字或数模混合的信号系统,控制逻辑器件;与Matlab的结合;与Stateflow紧密结合,建立数据驱动行为的模型;广泛利用DSP库。
SystemGenerator是Xilinx公司的的一个模块集(blockset),它是simulink的一个插件,其中设置了Xilinx特有的DSP功能的IP核,包括了基本DSP函数和逻辑算符,如FIR(FiniteImpulseResponse)、FFT(FastFourierTransform)、存储器、数学函数、转换器、延时线等等。
这些预先定义好的模块保证了FPGA实现时的位-bit和周期-cycle的正确。
使用它可以自动生成VHDL/Verilog语言、测试向量以及可以使ModelSim仿真的“.do”文件。
为了得到最佳的性能、密度和可预测性,SystemGenerator还会自动将特定的设计模块映射成高度优化了的IP核模型。
XilinxBlockset中的模块,有的可以直接映射到硬件,有的对应着IP核。
它们中每个都可以根据设计要求更改参数,支持双精度和定点的算法。
这个模块集是一个可以外部扩展的库,使用的是C++的定点算法,所以用户可以创建自己的基于C++类的Simulink库元件,在设计中它会被当作黑箱(Blackbox)处理。
有两种可以实现HDL综合的工具:
MentorGraphics的FPGAAdvantage和Synplicity的Synplify。
这两个工具都可以将上一步(使用Simulink和XilinxSystemGenerator完成的设计)的顶层(和附加的子VHDL文件)HDL行为级或RTL设计文件转化成门级表示(EDIF文件)。
可以使用其中的任意一个软件来完成这个任务。
这些工具可以:
将HDL综合成门级的设计实现;通过消除对每个门的定义,减少了设计时间;减少了手工将硬件说明翻译为原理图设计中可能出现的错误数量;在最优化原始的HDL代码过程中应用了综合工具的自动技术(如机械编码类型、自动I/O插入),从而使设计更有效率。
使用ModelSim就可以在设计过程中对HDL进行仿真,以保证结果的正确性。
它的特性如下:
通过使用DirectCompile结构,达到最快的编辑速度和有竞争力的模拟性能;使用SingleKernelSimulation,将VHDL和Verilog结合在一起;将machine和Simulator版本独立开来,以简化可携带性和库的维护。
Xilinx的ISE软件包含了最新的实现工具,可以用来创建有效简洁的设计。
当综合完VHDL文件后,就会得到顶层的EDIF文件(也有子层的EDIF文件),将这些EDIF文件作为XilinxDesignManager的输入源进行实现,它将翻译(Translate)、映射(Map)、布局布线(Place&Route)以及配置(Configure)该设计。
最终得到下载用的位流文件。
它的时序驱动的布局布线特性允许用户为特定的路径指定自己的时序;静态时序分析能够减少设计步骤;能够在实现前后对设计进行验证;可以重新迭代先前的设计以缩短整个设计周期。
利用FPGA实现DSP嵌入式系统,已有互相补充的软件设计工具,表7-2列出了在系统建模和设计、算法开发和优化、HDL仿真和产生及设计校验和诊断等不同设计阶段使用的软件。
表7-2FPGA实现DSP的软件工具
设计阶段
软件和功能
软件公司
系统建模和设计
Simulink:
动态系统的多域仿真和基于模型设计的平台,提供交互的图形环境和定制的模块库集合
MathWorks
PlatformStudio:
包含广泛种类嵌入设计工具、IP、库、引导卡和设计产生器的集成开发环境,
Xilinx
算法开发和优化
MATLAB:
算法开发、数据可视化、数据分析及数值计算的高级技术计算语言和交互环境,
MathWorks
DSP综合工具提供MATLAB与systemGenerator或ISE之间的直接链接,自动产生可综合的RTL模型和测试床
Accelchip:
直接由C语言的程序转换到FPGA的硬件
Xilinx
HDL仿真和产生
ISE:
设计者可用VHDL或Verilog设计,对FPGA编程,利用SystemGenerator时,可按批作业模式调用
Xilinx
Synthesis:
综合工具XST/SynplifyPro可低成本、高效率映射设计到FPGA硬件,按批作业模式选择他们来和SystemGenerator一起使用
Xilinx/Synplicity
ModelSim:
SystemGenerator提供必要的接口与ModelSim仿真器连接,可以利用它做HDL协同仿真或实时地输入仿真结果到Simulink/SystemGenerator仿真
MentorGraphics
设计校验和诊断
ChipScopePro:
监视FPGA的内部测点,预测和诊断设计,探测结果可插入到Simulink/SystemGenerator内
Xilinx
§7.2FPGA设计DSP技术
ISE实现软件、SystemGenerator以及MATLAB/Simulink工具之间都有相互配合的版本问题,对于ISE8.1以上的版本,要求相同序号的SystemGenerator版本,并配合使用MATLAB/Simulink7.2以上的版本,如R2006a等。
SystemGenerator8.1以上的版本,只要执行SysGenInstall.exe的执行文件,安装时会自动找到MATLAB/Simulink(R2006a)的安装目录,将Xilinx的Blockset模块集安装到Simulink中。
7.2.1浮点数与定点数的表示与转换
在设计仿真中Simulink是利用双精度数(double)表示数值,它是64位2的补码浮点数,而双精度数对FPGA是无效或不实际的。
当利用有限位数来表示二进制数时,二进制点的位置确定了所表示数的范围和精度,二者的关系是二进制点前面的位数多表示的数值的有效范围大,精度就低,相反,二进制点后面的位数多,数值精度提高,数值有效范围减小。
例:
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
=(1*163)+(6*162)+(6*161)+(B*160)
=(1*4096)+(6*256)+(6*16)+(11)=5739
对于DSP技术更好的方式理解2的补码数是将其符号表示位看作为原始的二进制数的相应的部分,这个要点是实现时只是这位有负的加权值,所以,2的补码数值如下计算。
11111111=-27+26+25+24+23+22+21+20
=-128+64+32+16+8+4+2+1
=-128+127
=-1(10)
对于双精度的64位2的补码浮点数,由于二进制点可以移动,所以在±9.233*1018之间的任何数都可以表示,精度为1.08*10-19,也就是浮点数可以做到数值范围大,精度高,这也是双精度的含义。
由于硬件无法按照双精度的要求进行实现,所以要转换成N位的定点数。
在Simulink中Xilinx的模块集有三种数据类型:
1.不带符号的N位定点数,表示为UFix_N_m,其中N为二进制位数,m为二进制点距离最低位的位置,最大精度为2m;
2.带符号的N位定点数,表示为Fix_N_m,其中N为二进制位数,m为二进制点距离最低位的位置,最大精度为2m;
3.布尔类型数,总是定义为0或1,作为控制口的使能(CE)或复位(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.0001220703125
=-2.2611083984375
图7-3数据类型
在基于模型的系统设计流程中,当Xilinx模块集中的带符号的定点数模块需要与Simulink的双精度数模块通信时,必须要进行数据类型的变换,这是基于模型的系统设计流程中重要概念之一。
为了完成这个数据类型变换,要选择Xilinx模块集中的GatewayIn实现双精度数到定点数的转换,或者选择Xilinx模块集中的GatewayOut实现定点数到双精度数的转换。
GatewayIn/Out两个模块可以通过选择参数来控制如何实现双精度数与定点数之间的相互转换。
一般来说,主要由GatewayIn模块的参数选择来进行控制,除了选择带符号或不带符号定点数的位数和二进制点位置之外,还需要选择以下两个参数:
1.量化方式:
截断(Trancate)或舍入(Round);
2.溢出方式:
饱和(Saturate)或交迭(Wrap)。
当小数部分的位数不足以表示一个数值的小数部分时,将出现量化的情况,截断是放弃最低有效位右边的所有位,当有两个等距离最接近表示的数值,舍入将取最接近表示的数值,或取偏离0最远的数值。
图7-4双精度浮点数到定点数的转换
例:
完全精确数值为:
001.10111101010000=-2.2607421875
截断的结果为:
Fix_12_9101.101111010=-2.26171875
舍入的结果为:
Fix_12_9101.101111011=-2.259765625
取决于采用截断还是舍入的方法,对于正的完全精确数值和无符号完全精确数值都会有不同的输出结果。
例:
正的完全精确数值为:
101.10111101010000=1.7392578125
截断的结果为:
Fix_12_9101.101111010=1.73828125
舍入的结果为:
Fix_12_9101.101111011=1.740234375
例:
无符号完全精确数值为:
101.10111101010000=5.7392578125
截断的结果为:
Fix_12_9101.101111010=5.73828125
舍入的结果为:
Fix_12_9101.101111011=5.740234375
当一个数值超出了表示的范围将出现溢出,选择饱和时,取最大的正值或最大的负值,
在定点数中选择交迭时,就放弃超出最大有效位的任何有效位。
在仿真的过程中出现溢出将有溢出标志作为Simulink的错误产生。
例:
完全精确的数值为:
01101.1011=13.6875
饱和的结果为:
Fix_7_4011.1111=3.9375
交迭的结果为:
Fix_7_4101.1011=-2.3125
不论选择哪种方式处理量化和溢出,产生的HDL模型和Simulink的模型将有相同的行为特性。
究竟选择量化和溢出方式中的哪一种,实际上取决于设计的要求和硬件的实现,量化方式中截断不增加硬件,而舍入要增加进行进位的硬件资源,所以在满足设计要求的情况下,应尽量选择截断的量化方式。
溢出方式中选择饱和的方式可以防止输出的振荡,输出数据不再改变,实现上也要增加硬件的资源。
数据类型中的布尔(Boolean)类型是为模块的控制口设计的,如模块的时钟使能(CE)或复位(reset)口要选择布尔类型,布尔类型是一位的非符号数的变量,与一位的非符号数的区别是,一位的非符号数可以变为无效,但是布尔类型的数只定义为高或低电平的1或0两种情况,而不可以变为无效,否则控制口也将失效,系统无法工作。
例:
定义以下的2的补码二进制分数的格式和计算其数值:
1100011.01011
格式为:
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,最小值为-138,量化为11位数据:
Fix_11_1 。
例:
求进行加法和乘法运算时,完全精度的输出数据类型。
1.
2.
利用Xilinx的模块集中的模块创建一个SystemGenerator的设计,这些模块是硬件可实现的SysGen模型,此模型必须包含SystemGenerator模块,SysGen模型要通过I/O模块作为Xilinx模块集与其他的Simulink的模块之间的接口,模型的输入端通过GatewayIn与Simulink的源连接,模型的输出端通过GatewayOut与Simulink的沉及库函数连接,如图7-5所示,模型的仿真和优化就很方便。
图7-5Simulink模块的设计模型
7.2.2采样周期的设置
在SysGen模型中的每个SysGen信号必须被采样,出现在等距离离散时间点上的瞬间称为采样时间。
在基于模型的Simulink建模设计中,每个模块都有“采样周期”,它常对应模块的功能如何计算和结果如何输出,所以采样周期是基于模型的系统设计流程中另一个重要概念。
对于GatewayIn和模块的w/o输入的采样周期必须明确设定,采样周期也可以由其他模块的输入采样时间来驱动。
采样周期的单位可以认为是任意的,但是许多Simulink的源模块有一个时间要素,例如,1/44100的采样周期意味着模块的功能每间隔1/44100秒执行一次。
当设置采样周期时,要遵循奈奎斯特(Niquist)定理。
一个模块的采样周期直接与其在实际硬件中如何定时有关。
在SystemGenerator模块的参数中必须设置Simulink的系统周期,对于单数据率的系统,Simulink的系统周期将与设计中设置的采样周期相同。
如图7-6所示。
图7-6采样周期的设置
§7.3SystemGenerator模块
在Xilinx模块集中,对可以转化为HDL代码的模块,其标示都以一个“X”型的水印来区别于其它的Simulink模块。
对SysGen设计,Xilinx模块集有一些十分重要和特殊的模块,要给以特别的注意。
1SystemGenerator模块:
SystemGenerator模块是一个极其重要的基本模块,它不仅使得在Simulink下建立的SysGen模型提供了层次化的表述能力,同时还必须由它来激活代码生成器,以实现模型的HDL代码转化。
对于一个SysGen模型,至少要保证顶层有一个SystemGenerator模块。
在一个SysGen模型中,SystemGenerator的参数选择对话窗如图7-7所示。
在此窗口中,要进行定制的参数有:
(1)XilinxSystemGenerator:
①目标器件的系列、型号、速度等级、封装。
SysGen支持的器件系列有:
Virtex-4,Virtex-IIPro,Virtex-II,Virtex-E,Virtex,Spartan3E,Spartan3,Spartan-IIE和Spartan-II系列。
②采用的综合工具。
对于选用不同的综合工具,要求生成的代码也有一定的差别。
目前支持的综合工具有:
LeonardoSpectrum,SynplicitySynplifyPro,Synplify和XilinxXST。
③目标路径。
设计的目标代码保存的路径。
④产生测试向量复选框。
如果选择了该项,则在生成HDL代码时可以将Simulink仿真输入转换成VHDL测试激励向量,将Simulink仿真输出转换成对应的VHDL测试输出向量。
这些向量可用于所产生的VHDL代码的行为仿真。
图7-7SystemGenerator的参数选择对话窗
(2)SystemPeriod(系统周期):
分别设置Simulink的系统周期和实现硬件的系统时钟周期,前者默认的时间单位是秒,后者为纳秒。
(3)HierarchicalControl(层次控制):
①OverridewithDoubles:
以双精度浮点的方式仿真Xilinx模块或Simulink模型,替代Xilinx模块的定点方式。
设置为“OverridewithDoubles”的Xilinx模块显示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGADSP 嵌入式 系统 研发 设计