FPGA-DSP嵌入式系统设计_第1页
FPGA-DSP嵌入式系统设计_第2页
FPGA-DSP嵌入式系统设计_第3页
FPGA-DSP嵌入式系统设计_第4页
FPGA-DSP嵌入式系统设计_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第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设计者

设计方法CC++,汇编VHDL/Verilog编程

MATLAB.SimuLink综合,映射,布局布线

设计问题信噪比,误码率,采样率腿到腿延时,流水线和逻辑层次,布局规划

横亘在软件间的隔阂和硬件结构上的差异限制了FPGA的DSP应用,但是现在这项工

作变得简单了,Xilinx公司提出了一整套的解决方案。不但出现了IP(InlelleclualProperly)

核(Core)形式的DSP算法和将这些IP核集成到FPGA设计的工具软件,而且出现了新的

FPGA芯片。软件上一个重要的代表是XlremeDSP系列软件包,主要包括:

MathWorks公司的Matlab和Xilinx公司的SystemGenerator负责系统级设计:

MentorGraphics公司的FPGAAdvantage或Synplicity公司的SynplifyPro做HDL综合;

ModelTechnology公司的ModelSim负责仿真;

Xilinx公司的FoundationSeriesISE负责硬件实现,

图7-1表示使用Xtreme设计DSP算法的流程。在硬件方面,Xilinx公司推出最新的

VirtcxII系列FPGA芯片。它内置了192个18X18bit的高性能组合乘法器,支持高达

250MHz的数据率,内部固化了并行的DSP数据模型。它的密度达到一千万系统门,可以

运行600GMAC/so大大超出了当今通用DSP芯片的性能(TI的高端DSP芯片

TMS320C6000的定点系列C64x只能达到1.6—2.4GMAC/s)。设计方法和硬件结构上的改

进使FPGA在DSP上的应用前景变得光明起来。

Xilinx公司同它的合作者琰合提出了XtremeDSP解决方案,它在系统结构设计和基于FPGA

的DSP系统硬件实现之间建立起一座桥梁。SystemGenerator同Siniulink模型工具结合,可

以参数化、最优化算法。它可以自动从行为级的系统模型转换到FPGA实现,其间不再需要

手工重设,大大节省了开发时间并降低了出错概率。通过软件,用户可以在DSP函数的算

法、性能、节能、硅片面积中进行选取,可以快速地分析出它的运算速度和花费。

2

图7-2基于模型的设计过程

XilinxFPGA支持用户在同一个设计的不同部分创建自定义的字长。Xtreme支持不同

的比特数、流水线程度和实现的选择方法。对于某些需要更多比特数来表示精度的通道,只

要更改IP的参数,软件就会自动适应新的数据配置。

Xtreme的配置灵活,用户可以根据需要进行设置:若全部使用并行结构就可以达到最

大的数据吞吐量,也可以由于降低了系统时钟而节省能源:相反的,若全部使用串行结构则

会使硅面积最小,节省花费,但同时仍能够得到相当的性能。

MATLAB作为线性系统的一种分析和仿真工具,在工程和计算科学上有着广泛的应

用。它建立在向量、数组和矩阵的基础上,结合了可视化的数学计算和强大的技术语言。内

建的接口可以从指令、文件、外部数据库和程序中迅速得到数据。Simulink作为MaHab的

一个工具箱(toolbox),在整个的DSP设计中起着举足轻重的作用“它是一个交互式的工

具,用于对复杂的系统进行建模、仿真和分析。成为控制系统设计、DSP设计、通信系统设

计和其它仿真应用的首选工具。它的特性为:建立图形式的模块列表,模拟复杂系统,评估

系统的性能,提高设计水平;建立模拟、数字或数模混合的信号系统,控制逻辑器件;与

Matlab的结合;与Stateflow紧密结合,建立数据驱动行为的模型;广泛利用DSP库。

SystemGenerator是Xilinx公司的的一个模块集(blocksct),它是simulink的一个插

件,其中设置了Xilinx特有的DSP功能的IP核,包括了基本DSP函数和逻辑算符,如FIR

(FiniteImpulseResponse)sFFT(FastFourierTransform)x存储器、数学函数、转换器、延

时线等等。这些预先定义好的模块保证了FPGA实现时的位-bil和周期-cycle的正确。使用

它可以自动生成VHDL/VcriQg语言、测试向量以及可以使MudclSiw仿真的“.du”文件。

为了得到最佳的性能、密度和可预测性,SystemGeneral还会自动将特定的设计模块映射

成高度优化了的IP核模型。XilinxBlockset中的模块,有的可以直接映射到硬件,有的对应

着IP核。它们中每个都可以根据设计要求更改参数,支持双精度和定点的算法。这个模块

集是一个可以外部扩展的库,使用的是C++的定点算法,所以用户可以创建自己的基于C

++类的Simulink库元件,在设计中它会被当作黑箱(Blackbox)处理。

有两种可以实现HDL综合的工具:MentorGraphics的FPGAAdvantage和Synplicity的

Synplifyo这两个工具都可以将上一步(使用Simulink和XilinxSystemGenerator完成的设

3

ModelSim:SystemGenerator提供必要的接口与ModelSim仿真MentorGraphics

器连接,可以利用它做HDL协同仿真或实时地输入仿真结果到

Simulink/SystemGenerator仿真

设计校验ChipScopePro:监视FPGA的内部测点,预测和诊断设计,探测Xilinx

和诊断结果可插入到Simulink/SystemGenerator内

§7.2FPGA设计DSP技术

ISE实现软件、SystemGenerator以及MATLAB/SimJ1ink工具之间都有相互配合的版本

问题,对广ISE8.1以上的版本,要求相同序号的SystemGenerator版本,并配合使用

MATLAB/Sinwlink7.2以上的版本,如R2006a等。

SystemGenerators.1以上的版本,只要执行SysGenInstall.exe的执行文件,安装时会自

动找到MATLAB/Sinnilink(R2006a)的安装目录,将Xilinx的Blocksct模块集安装到

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=logioX/log|02=logio5739/logi02=3.7588/0.3010=12.4866

取最靠近的整数为13位。

已知16进制的数值可以按照如下方式进行二进制变换和计算数值

166B=900l011001101011

=(1*163)+(6*162)+(6*16*)+(B*l6°)

=(1*4096)+(6*256)+(6*16)+(11)=5739

对于DSP技术更好的方式理解2的补码数是将具符号表示位看作为原始的二进制数的

相应的部分,这个要点是实现时只是这位有负的加权值,所以,2的补码数值如下计算。

11111111=-27+26+25+24+23+22+2I+20

=-128+64+32+16+8+4+2+1

=-128+127

=T(io)

对于双精度的64位2的补码浮点数,由于二进制点可以移动,所以在±9.233*1018之

间的任何数都可以表示,精度为1.08*10-19,也就是浮点数可以做到数值范围大,精度高,

5

这也是双精度的含义。由于硬件无法按照双精度的要求志行实现,所以要转换成N位的定

点数。

1.在Simulink中Xilinx的模块集有三种数据类型:

2.不带符号的N位定点数,表示为UFix_N_m,其中N为二进制位数,m为二进制点

距离最低位的位置,最大精度为2m;

带符号的N位定点数,表示为Fix_N_m,其中N为二进制位数,m为二进制点距离最低

位的位置,最大精度为2m;

布尔类型数,总是定义为。或1,作为控制口的使能(CE)或复位(reset),所以不可

以设为无效。

例:数值为-2.261108,表示为Fix」6」3的格式,

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.(X)()48828125+0.0001220703125

=-2.2611083984375

.22212°2'12'22-32"42'52'62'72'82'92-102-112'122'13

Value=-2.261108...

Format=Ax_16_13

hlegerFraction(Sign:Fix=SignedValue

Format=SignWidthDecimalpointfromtheLSB(jFix=Unsignedvalue)

图7-3数据类型

在基于模型的系统设计流程中,当Xilinx模块集中的带符号的定点数模块需要与Simulink

的双精度数模块通信时,必须要进行数据类型的变换,这是基于模型的系统设计流程中重

要概念之一。

为了完成这个数据类型变换,要选择Xilinx模块集中的GatewayIn实现双精度数到定点

数的转换,或者选择Xilinx模块集中的GatewayOut实现定点数到双精度数的转换。

1.GatewayIn/Out两个模块可以通过选择参数来控制如何实现双精度数与定点

数之间的相互转换。一般来说,主要由GatewayIn模块的参数选择来进行控制,除

了选择带符号或不带符号定点数的位数和二进制点位置之外,还需要选择以下两

个参数:

量化方式:截断(Trancatc)或舍入(Round);

溢出方式:饱和(Saturate)或交迭(Wnip)。

当小数部分的位数不足以表示•个数值的小数部分时,将出现量化的情况,截断是放弃最

低有效位右边的所有位,当有两个等距离最接近表示的数值,舍入将取最接近表示的数值,

或取偏离0最远的数值。

6

DOUBLE

2。2$242^22212。242一?2~32送2.52/2-72~'2-"2*^2'^2"^2"^

OVERFLOW

QUANTIZATION

-Saturate

-Truncate

-Wrap

-Round

-FlagforError

图7-4双精度浮点数到定点数的转换

例:完全精确数值为:001.10111101010000=-2.2607421875

截断的结果为:Fix_12_9101.101111010=-2.26171875

舍入的结果为:Fix_12_9101.101111011=-2.259765625

取决于采用截断还是舍入的方法,对于正的完全精确数值和无符号完全精确数值都会

有不同的输出结果。

例:正的完全精确数值为:101.10111101010000=1.7392578125

截断的结果为:Fix」2_9101.101111010=1.73828125

舍入的结果为:Fix」2_9101.101111011=1.740234375

例:无符号完全精确数值为:101.10111101010000=5.7392578125

截断的结果为:Fix_12_9101.101111010=5.73828125

舍入的结果为:Fix」2_9101.101111011-5.7/10231375

当一个数值超出了表示的范围将出现溢出,选择饱和时,取最大的正值或最大的负值,

在定点数中选择交迭时,就放弃超出最大有效位的任何有效位。在仿真的过程中出现溢

出将有溢出标志作为Simulink的错误产生。

例:完全精确的数值为:01101.1011=13.6875

饱和的结果为:Fix_7_4Oil.1111=3.9375

交迭的结果为:Fix_7_4101.1011=-2.3125

不论选择哪种方式处理量化和溢出,产生的HDL模型和Simulink的模型将有相同的行

为特性。究竟选择量化和溢出方式中的哪种,实际上取决丁设”的耍求和硬件的实现,量

化方式中截断不增加硬件,而舍入要增加进行进位的硬件资源,所以在满足设计要求的情

况下,应尽量选择截断的量化方式。溢出方式中选择饱和的方式可以防止输出的振荡,输出

数据不再改变,实现上也要增加硬件的资源。

数据类型中的布尔(Boolean)类型是为模块的控制口设计的,如模块的时钟使能(CE)

或复位(reset)口要选择布尔类型,布尔类型是一位的非符号数的变量,与一位的非符号数

的区别是,一位的非符号数可以变为无效,但是布尔类型的数只定义为高或低电平的1或0

两种情况,而不可以变为无效,否则控制口也将失效,系统无法工作。

7

例:定义以下的2的外码二进制分数的格式和计算其数值:

1100011.01011

格式为:Fix_12_5,

数值为:-64+32+2+1+0.25+0.0625+0.03125=-917/32=-28.65625

I.例:什么格式应该利用来表示以下的信号:

2,最大值为+1,最小值为-1,量化为12位数据:Fix」2_10;

1.最大值为0.8,最小值为0.2,量化为10位数据:UFix_10_10;

2.最大值为278,最小值为-138,量化为11位数据:Fix_ll_lo

3.例:求进行加法和乘法运算时,完全精度的输出数据类型。

4.<Fix_12_9>+<Fix_8_3>=<Fix_15_9>

5.<Fix_8_7>*<UFix_8_6>=<Fix_16_13>

利用Xilinx的模块集中的模块创建一个SystemGenerator的设计,这些模块是硬件可实现的

SysGen模型,此模型必须包含SystemGenerator模块,SysGen模型要通过I/O模块作为

Xilinx模块集与其他的Simulink的模块之间的接口,模型的输入端通过Gatewayhi与

Simulink的源连接,模型的输出端通过GalewayOutSimulink的沉及库函数连接,如图7-5

所示.模型的仿真和优化就很方便。

'Simulink-:SysGenDataPathand;.…:「飞赢/一卜:

:Sources:;:helperblocks:;:sinks::

•••'''।

Gatewayblocksusedtointerface•,

>betweenSimulinkandSysGenblocks:一1

I_________________________________I

图7-5Simulink模块的设计模型

7.2.2采样周期的设置

在SysGen模型中的每个SysGen信号必须被采样,出现在等距离离散时间点上的瞬间称为

采样时间。在基于模型的Simulink建模设计中,每个模块都有“采样周期”,它常对应模块

的功能如何计算和结果如何输出,所以采样周期是基于模型的系统设计流程中另一个重要

概念。

对于GatewayIn和模块的w/o输入的采样周期必须明确设定,采样周期也可以由其他

模块的输入采样时间来驱动。采样周期的单位可以认为是任意的,但是许多Simulink的源模

块有一个时间要素,例如,1/44100的采样周期意味着模块的功能每间隔1/44100秒执行一

次。当设置采样周期时,要遵循奈奎斯特(Niquist)定理。一个模块的采样周期直接与其在

实际硬件中如何定时有关。

在SystemGenerator模块的参数中必须设置Simulink的系统周期,对于单数据率的系统,

8

Simulink的系统周期将与设计中设置的采样周期相同。如图7-6所示。

System

tn»ut1

—日制忡

2W

O«t

―5.惘I

SamplePeriod=1

图7-6采样周期的设宣

§7.3SystemGenerator模块

在Xilinx模块集中,对可以转化为HDL代码的模块,其标示都以一个“X”型的水印

来区别于其它的Simulink模块。对SysGen设计,XiIinx模块集有一些十分重要和特殊的

模块,要给以特别的注意。

1SystemGenerator模块:

SystemGenerator模块是一个极其重要的基本模块,它不仅使得在Simulink下建立的

SysGen模型提供了层次化的表述能力,同时还必须由它来激活代码生成器,以实现模型的

HDL代码转化。对于一个SysGen模型,至少要保证顶层有一个SystemGenerator模块。

在一个SysGen模型中,SystemGenerator的参数选扭对话窗如图7-7所示。在此窗口中,

要进行定制的参数有:

(1)XilinxSystemGenerator:

①目标器件的系列、型号、速度等级、封装。

SysGen支持的器件系列有:Virtex-4,Virtex-IIPro,Virtex-II,Viilex-E,Virtex.

Spartan3E,Spartan3,Spartan-I【E和Spartan-I【系歹

②采用的综合工具。

对于选用不同的综合工具,要求生成的代码也有一定的差别。目前支持的综合工具

有:LeonardoSpectrum,SynplicitySynplifyPro,Synplify和XilinxXST。

③目标路径。

设计的目标代码保存的路径。

④产生测试向量复选框。

如果选择了该项,则在生成HDL代码时可以将Simulink仿真输入转换成VHDL测试激励向量,

将Simulink仿真输出转换成对应的VHDL测试输出向量。这些向量可用于所产生的VHDL代

码的行为仿真。

9

图7-7SystemGenerator的参数选择对话窗

(2)SystemPeriod(系统周期):分别设置Simulink的系统周期和实现硬件的系统

时钟周期,前者默认的时间单位是秒,后者为纳秒。

(3)HierarchicalControl(层次控制):

©OverridewithDoubles:

以双精度浮点的方式仿真Xilinx模块或Simulink模型,替代Xilinx模块的定点方式。设置

为“OverridewilhDoubles”的Xilinx模块显示为灰色。关于Xilinx模块的定点和浮点方

式在GatewayIn模块和GatewayOut模块的介绍中详细阐述。在下拉选择框中,可以指定

在进行Simulink仿真时,FPGA设计是根据

“AccordingtoBlockMasks”模块的屏蔽情况,使用双精度浮点信号取代定点信号:

“EverywhereinSubsystemM在子系统中使用双精度浮点信号取代定点信号;

“NowhereinSubsystem”在子系统中不使用双精度浮点信号取代定点信号。

②GenerateCores:选择在生成VHDL代码的过程中,是否生成XilinxLogiCOREs。可选

项有:

“AccordingtoBlockMasks”根据模块的屏蔽情况生成XilinxLogiCOREs:

4"EverywhereAvailableM在任何可能的地方,都生成XilinxLogiCOREs,

“Nuwhcic”不生成XilinxLugiCOREso

设置好SystemGenerator的参数后,单击Generate按钮开始生成VHDL代码。如果目标

目录不存在,会提示创建该目录。在代码生成过程中,会显示一个进度条来表示生成进度。

代码生成后,会弹出一个确认信息窗,点击确认即可。

2BlackBox模块:

BlackBox模块是一个十分重要的基本模块,在Simulink环境里,并不是所有的硬件结

构都可以通过Xilinx模块集中的模块进行组合来实现;但为了能进行设计系统的模型仿真,

设计的Simulink模型又应该是一个完整的模型。黑匣子(BlackBox)模块就是专门设计用

10

来解决这种矛盾.,提供Simulink模型与构造的HDL源码之间的接口。此外,在设计中,某

些组件可能已经用VHDL或Verilog设计好了可直接调用,或者某些组件直接用VHDL编写

比起在Simulink里建模要更为简单些。这些情况下,都要选用BlackBox模块。

BlackBox模块的使用方法是:

(1)将BlackBox模块添加到模型中;

对BlackBox模块的要求:

1.与BlackBox模块有关的VHDL7匕件必须遵从以卜SystemGenerator的要求和

规定:

2.实体名称必须与设计中任何其他实体的名称不同;

3.在顶层的实体中不允许双向端口;

4.不是时钟或时钟使能的任何端口必须具有std」ogic_vector的数据类型;

5.是时钟或时钟使能的任何端口必须具有stdjogic的数据类型;

顶层的VHDL程序必须为每个Simulink中有关的采样率设置分别的时钟和时钟使能端

口。

1.在blackBox的VHDL程序中时钟和时钟使能端口应该如下表示:

2.时钟和时钟便能信号必须成对地出现:

3.虽然BlackBox可以有多个时钟端口,但利用单个时钟源驱动每个时钟端口;

4.只有时钟使能的速率是不同的;

5.每个时钟的名称(和每个时钟使能的名称)必须包含elk(和ce)的字符;

时钟使能的名称必须与相应的时钟名称相同,只是elk用ce代替。

时钟和时钟使能端口在BlackBox模块的图框中不可见。

BlackBox模块必须通过一个MATLAB的M函数的文件描述它的接口,例如,端口和

generics,设计的实现,通过HDL协同仿真的仿真模型等。

这个M函数文件的名称应该在模块参数对话框中进行规定。

1.M函数的配置文件要完成以下的工作:

规定HDL元件的顶层实体名称,它应该与blackbox名称一致;

2.例:this_block.setEntityName('fir_blackbox'):

3.选择语言(即VHDL或Verilog);

4.例:this.block.setTopLevelLanguageCVHDL);

描述端口,包括类型、方向、位宽度、二进制点位置、名称和采样率;

例:this_block.ad(lSimulinkInport(,reset,);

thiS-block-addSimulinklnportCdin');

(his_block.addSimulinkOu(port('dout');

duul_psl.sclTypc('Fix_30_0');

5.定义由此blackbox的HDL要求的任何generics;

6.规定此blackbox的HDL和与此模块有关的其它文件(例如EDIF);

例:this_block.addFile('fir.cdn');-addedentries

this_block.addFile('fir.mif);

this_block.addFile(Tir.vhd');

7.定义为此模块的时钟和时钟使能;

8.定义是否此HDL有任何组合的通过反馈的路径。

11

(2)如果在模型的项目路径下含有VHDL文件,自动执行一个配置向导,选择相应的HDL

文件,如图7-8所示;

Selectthefilethatcontainstheentitydescriptionforth...

图7-8BlackBox参数定制对话窗

(3)设置BlackBox的参数,如图7-9所示。

®BlackBox(XilinxBlackBox)[Z~|[n][X-|

IncorporatesblackboxHDLandsimulationmodelintoaSystem

Generatordesign.

YoumustsupplyaBlackBoxwithcertaininformationabouttheHDL

componentyouwouldliketobringintoSystemGenerator.This

informationisprovidedthroughaMatlabfunction.

When"Simulationmode"issetto"Inactive泣youwilltypicalwantto

piovideaseparatesitnuhlionmodelbyusingaSimulationMuHiplexer.

When"Simulationmode"issetto"Externalco-simulato("zyoumust

includeaModdSimblockinthedesign.

BasicImplementation

Blockconfigurationm-function

fir_blackbox_config

SimulationmodeExternalco-$imulato(v

HDLco-$imuiatortouse(specifyhelperblockbyrame)

ModelSim

CancelHelpApply

图7-9BlackBox参数设置对话框

BlackBox的参数包括以下几项:

(1)BlockCongigurationM-Function:规定BlackBox模块配置M函数的名称。M函数

可以是手工编写的,也可以是由配置向导自动生成的。

BlackBox必须通过MATLABM函数描述它的接口:例如端口、通用属性(generics)、

12

它的实现、选项和HDL协同仿真的仿真模型等。

配置M函数完成以下任务:

1.规定与BlackBox模块有关的HDL元件的顶层实体名称;

2.规定使用的语言(VHAL或Verilog);

3.描述端口,包括类型、方向、位宽度、二进制点位置和采样率;

4.定义由BlackBox模块的HDL元件要求任何通用属性(generics);

5.规定BlackBax模块的HDL元件和与此模块有关的其他文件(如EDIF);

6.定义模块的E寸钟和时钟使能

7.说明是否HDL元件有任何通过反馈的组合路径;

(2)SimulationMode:有"Inactive”和“UseHDLCo—Simulation”两个选项。如果

是前者的话,那么在仿真是,将忽略输入始终输出零。如果是后者的话,则使用HDL协同仿

真。这时,需要在模型中新增一个ModelSim模块,并在BlackBox模块的“HDLCo-Simulator

ToUse(specifyhelperblockbyname)M中指定该ModelSim模块。

(3)FPGAArea:提供用于资源使用估算的信息。

在生成代码时,该子系统功能的硬件实现直接使用指定的VHDL文件。也可以使用

Verilog文件,但这时必须人工编写模块的M函数。讲行仿真时.BlackBox模块通过结合

SimulationMulliplexer模块和ModelSim模块有多种灵活的仿真方法。

3ModelSim模块

1.ModelSimHDL协同仿真模块配置和控制对一个或几个BlackBox模块的协同仿真。

这个模块完成以下工作:

2.构造为允许blackboxHDL在ModelSim中被仿真所需要的附加VHDL;

3.当Simulink仿真开始时引起ModelSim一个对话时间;

4.传递在Simulink和ModelSim之间的通信;

5.当blackboxHDL被编译时报告是否有错误内检测;

当仿真完成时,如果合适终止ModelSim。

在仿真期间,每个ModelSim模块引起一个ModelSim的拷贝,所以利用ModelSim一个

license,如果license是不足的,几个blackboxe模块可以共享此相同的模块,除了灵活性差,

采用这个方式没有东西损失,在ModelSim中的时间刻度匹配在Simulink中的时间刻度,即,

i.c.,onesecondofSimulink的一秒仿真时间对应ModelSim的一秒仿真时间。参数选择如图

7-10所示。

13

©ModelSim(ModelSimHDLCo-Simulation...匚]叵]区|

AllowotherblockstoscheduleHDLcosimulationtasks.

Notethatselecting"Skipcompilation"wheninappropriatecancause

simulationerrorsandfailures.Pleaserefertotheblockhelpfordetails.

BasicAdvanced

Runco-simulationindirectory:./modelsim

0Openwaveformviewer

回LeaveModelSimopenatendofsimulation

□Skipcompilation(usepreviousresults)

6kj[Cancel][Help][Apply

图7-10ModelSim模块参数选择

4GatewayIn模块和GatewayOut模块:

对于Simulink仿真,通常的Simulink模型都是浮点仿真。而对于用Xilinx模块实现的

设计,由于最终是要用FPGA完成一个硬件电路的实现,因而在默认方式下,Simulink中的

Xilinx模块是进行定点仿真,而其余的Simulink一般模块是做浮点仿真。

Matlab10(接口模块)组中的GatewayIn模块和GatewayOut模块提供了FPGA设计

(定点)和通常Simulink模块(浮点)之间的接口功能。GatewayIn模块将其它Simulink

模块的双精度浮点数据转换成XilinxFPGA需要的定点数据,而GatewayOut模块则正好相

反。可以在一个实例中,选中“Format"菜单里的"Poridatatypes”来验证。

但是有的时候,在用户选择定点宽度,或者用定点方式仿真FPGA设计没有得到期望的

结果或结果不正确时,用户就希望.可以选择以双精度浮点的方式仿真整个系统或特定的

某些模块,以帮助发现FPGA设计的哪一部分存在量化错误。这时就可以通过设置Xilinx

模块参数中的"OverridewithDouble”项,并配合以SystemGenerator模块里的相应设置来

实现。

5.Concat模块、Convert模块、Reinterpret模块和SIic.模块

1.在以下的一些情况下,可以利用这些模块来完成所需做的工作:

2.将两个数据总线组合起来形成一个新的总线;

3.强迫进行包括位数和二进制点的数据类型变换;

4.重置无符号数为符号数或符号数为无符号数;

5.在数据位增K时提取数据的指定位。

Concat模块:

此模块执行两个位矢量的连接,模块的两个输入必须是无符号的整数,例如两个二进

制点位于0的无符号数,或者利用Reinterpret模块所提供的符号数变换为无符号数的能

力,达到扩展Concat模块的功能,

Convert模块:

Convert模块可以把每个输入采样变换为所需算术类型的数。

1.一个数可以变换到2的补码的符号数或无符号的数值;

14

2.总位数和二进制点由设计者规定;

3.舍入和量化选择加到输出数值;

取决于溢出和量化的选择可以利用附加的硬件,而不利用LogiCoreo

在规定总位数和二进制点位置,符号或无符号的算术类型后,模块首先排齐输入和输

出端口类型之间的二进制点,然后利用规定的总位数和二进制点,与利用的溢出和量

化选择有关,输出可能按抛下的位相反地变化。饱和溢出改变小数的数值为得到饱和的

数值。舍入量化也可能影响到二进制点左边的数值。

例:以下数值通过Convert模块导致利用不同位数和二进制点有相同的结果。

原始数值:Fix_I0_801.10000000

变换为:Fix_7_4(XJI.100()

变换为:Fix_6_0000010.(舍入)000001.(结尾)

Reinterpret模块:

为保持输入端表示的数值,无任何考虑地强迫其输出为新的类型。输入端总的位数等于

输出端总位数,允许无符号位数据重置为符号位数据,或符号位数据重置为无符号位数据。

也允许通过重新放置二进制点缩放数据。

例:重一以下的数值.迫使二讲制点到位置5。

输入数据为:Fix_10_801.10000000=4-1.5

输出数据为:Fix_10_501100.0000(]=+12

Slice模块

Slice模块允许从输入数据移位出一系列的位,产生一个新的数据值,输出数据是无符

号数,二进制点在位置。处。

例:取Fix_10_8符号数的4位移动,偏置最低位5位。

输入数据为:Fix」0_801.1000000()=+1.5输出数据为I1D()=

12

较高位位置+宽度:从MSB的顶位-0偏置,宽度-4

输出数据为01100.00000=6

两个位置定位:从MSB的顶位=-1偏置,从LSB的位=5偏置

输出数据为01100.00000=12

模块通用属性

双击Xilinx的模块,在弹出的参数设置对"话窗中,有一些参数的设置是具有普遍性的。

(1)ArithmeticType运算数据类型:指定输出信号是无符号或带符号(二进制补码)。

(2)InipleiiieiilwithXilinxSiiiart-IPCore(ifpcib加)采用XilinxSiiiarl-IP核实现:

复选项,选中则用实现核例示的VHDL代码来实现该模块,否则只生成可综合的VHDL代

码。如果不能完成核的例示,则自己生成可综合的VHDL代码。

(3)GenerateCore生成核:见前面介绍的几个重要模块

(4)UsePlacementInformationforCore对核使用布局要求:选中该项通常会加快核

的实现,但由于添加了约束,可能导致布局布线失败。

(5)Latency延迟:输出延迟周期。

(6)Precision精度:缺省情况下为“Full",保证有足够的精度不致出错;用户也可

15

以选择"User・Defined”来自己设定。

(7)NumberofBits位数:设置定点数的位长,其中包括"BinaryPoint”,设定二进

制小数点的位置。设置不合理,会导致溢出和量化错误。

(8)OverflowandQuantization溢出和量化错误处理:用户对定点数设置不当,会导

致溢出和量化错误。发生溢出时,出错处理可以是“Saturate”(输出可表示的最大正值或

最小负值)、“Warp”(截顶)或“Error”(直接报错)。发生量化错误时,出错处理可以是

“Round”(舍入)或“Truncate”(截尾)。

(9)OverridewithDoubles:见前面介绍的几个重要模块。

(10)ProvideResetPort提供复位端:是否为模块提供复位端口。

(11)ProvideEnablePort提供使能端:是否为模块提供使能端口。

(12)UseExplicitSamplePeriod使用外部采样周期:选中该项可较好的解决模型中的环路

时序。

(13)FPGAArea(Slices,FFs,LUTs,lOBs,EmbeddedMults,TBUFs)FPGA资源使用:

提供模块资源使用的估算信息,以便“ResourceEstimator”模块进行系统资源耗用估算。

一维数组中的数字分别对应相同位置上所指的硬件资源的耗用情况。

图7/1计数器的各种参数选项

§7.4设计FIR滤波器

设计描述

•一个单通道、单速率滤波器的技术指标为:

•采样频率SamplingFrequency(Fs)=i.5MHz

•截止频率1Fstop1=270kHz

•通带频率IFpass1=30()kHz

•通带频率2Fpass2=450khz

•截止频率2Fstop2=480kHz

•通带两边衰减Attenuationonbothsidesofthepassband=54dB

16

•通带起伏Passbandripple=1

•两个不同的信源利用来仿真此滤波器:

线性调频chirp模块,它在6KHz和10KHz规定的频率之间扫描,不考虑瞬

时输出频率。

随机信源发生器,它在-1.9至IJ1.9的范围内输出均匀分布的随机信号,均匀分布是

驱动定点滤波器更好的选择,因为滤波器是受限的。

一产生FIR滤波器的系数

•利用MATLABconsole窗口,从d:/DSP/lab4目录打开bandpass_filter.mdl

模块,从XilinxBlocksct(DSP模块集添加FDATool模块到设计中。在

d:/DSP/lab4目录中利用FDATool模块为以下的技术指标产生FIR滤波器

的系数。

•采样频率SamplingFrequency(Fs)=1.5MHz

温馨提示

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

最新文档

评论

0/150

提交评论