MULTLABDSPbuilder硬件模块设计.docx
《MULTLABDSPbuilder硬件模块设计.docx》由会员分享,可在线阅读,更多相关《MULTLABDSPbuilder硬件模块设计.docx(41页珍藏版)》请在冰点文库上搜索。
MULTLABDSPbuilder硬件模块设计
第六章Matlab/Dspbuilder硬件模块设计
Matlab是国内强大的数学分析工具,广泛用于科学计算和工程计算,还可以进行复杂的数字信号处理系统的建模、参数估计及性能分析。
Simulink是Matlab的一个组成部分,用于图形化建模仿真。
DSPBuilder是Altera公司推出的一个面向DSP开发的系统级工具,它构架在多个软件工具之上,并把系统级(算法级建模)和RTL级(硬件实现)两个设计领域的设计工具连接起来放在Matlab/Simulink平台上,而将QuartrsⅡ作为底层设计工具置于后台,从而最大程度地发挥了这三种工具的优势。
DSPBuilder作为Simulink中的一个工具箱,使得用FPGA设计DSP系统完全可以通过Simulink的图形化界面进行,只要简单地进行DSPBuilder工具箱中的模块调用即可。
Matlab/DSPBuilder尤其适用于一些在QuartusⅡ上不方便完成或不能完成的设计项目(如涉及算法类及模拟信号处理与生产方面的系统处理)。
DSPBuilder还可以自动完成大部分的设计过程和仿真,直到把设计文件下载到FPGA中。
DSPBuilder提供了Quartus®II软件和MATLAB/Simulink工具之间的接口。
其具有如下特性:
1.用于连接Mathwork的MATLAB(信号处理工具箱和滤波器设计工具箱),Simulink环境和Altera®的QuartusII设计软件环境。
2.支持Altera的DSP核,这些核均可以从Altera的网站上下载(例如:
FIRCompiler、Reed-SolomonCompiler等等)。
3.可以利用Altera的DSP开发板来快速的实现设计的原型。
4.支持SignalTap®II逻辑分析仪(一种嵌入式的信号分析仪,它可以探测到DSP开发板上Altera器件内部的信号,并把数据引入到MATLAB的工作区以便于进行可视化的分析)。
5.包括了用户可以创建的定制的逻辑,用于配合SOPCBuilder和Nios®II嵌入式处理器设计。
6.包括了PLL块,用于多时钟设计。
7.包括了状态机块。
8.针对DSP系统的算法和实现,支持统一的表示方法。
9.根据MATLAB和Simulink的测试矢量,可以自动生成VHDL测试激励或QuartusII矢量文件(.vec)。
10.自动调用VHDL综合器和QuartusII编译器。
11.仿真可以设定为比特或周期精度。
12.提供多种的定点运算和逻辑操作,用于配合使用Simulink软件。
13.支持多种Altera的器件:
Stratix、StratixII和StratixGX器件;Cyclone和CycloneII器件;APEXII、APEX20KC和APEX20KE器件;Mercury器件;ACEX®1K器件;FLEX®10K和FLEX6000器件。
利用Matlab和DSPBuilder进行模块设计也是SOPC技术的一个组成部分。
这是由于利用Matlab/DSPBuilder/QuartrsⅡ可完成纯硬件的DSP算法模型及实现,从而构成嵌入式系统外围接口的协处理模块,再进一步构成软件程序中的精简指令,DSP模块或其他功能模块可以成为单片FPGA电路系统中的一个组成部分,而且通过Matlab/DSPBuilder,可以直接为Nios嵌入式处理器设计各类加速器,并以指令的形式加入到Nios的指令系统,从而成为Nios系统的一个接口设备,与整个片内嵌入式系统融为一体。
即利用DSPBuilder和基本的NiosCPU,用户可以根据项目的要求,自己构建自己需要的DSP处理系统。
本章主要介绍利用Matlab/DSPBuilder/QuartrsⅡ三个工具软件联合开发的设计流程。
图6—1为Matlab/DSPBuilder/QuartrsⅡ联合应用框图。
由图6—1可见,设计流程从利用建立DSP电路模型开始,电路模型的建立可以是图形化的,利用Simulink和DSPBuilder中提供的丰富的功能模块和IP核进行设计。
DSPBuilder中包含了算术和存储功能等设计模块以及IP库中的许多复杂功能模块。
电路中的功能模块和IP的技术参数、数据格式、数据类型和总线宽度等都可以直接设置。
电路模型设计完成后,可以进行系统级的模型仿真,这与目标器件和硬件系统没有关系,是基于算法的仿真。
下个步骤是利用置于Simulink电路模型界面的DSPBuilder的SignalCompiler,将电路模型文件,即Simulink电路模块文件(.mdl)转换成RTL级的VHDL代码表述和工具命令语言(Tcl)脚本。
一旦获得转换好的VHDL描述,在Simulink中即可调用VHDL综合器了,目前可选用的综合器有QuartrsⅡ、LeonardoSpectru、和Synplify。
由它们生成底层网表文件。
在QuartrsⅡ进行编译优化的过程中,会产生两种详细记录电路硬件特点和优化方式的底层电路描述的中间网表文件,即ATOMNetlist。
然后调用QuartrsⅡ中的编译器,根据网表文件及设置的优化约束条件进行布线布局和优化设计的适配操作,最后生成编程文件和仿真文件(.pdf和.sof),它们可用于对目标器件的编程配置和硬件实现;与此同时可生成分别用于QuartrsⅡ的门级仿真文件和ModelSim的VHDL时序仿真文件,以及相应的VHDL仿真激励文件,以用于实时测试DSP系统的工作性能。
图6-1基于Matlab/Dspbuilder/QuartrsⅡ等工具
6.1DSPBuilder元件库简介
打开Matlab环境。
可以看到Matlab的主窗口界面被分割成三个窗口:
命令窗口(CommandWindow)、工作区(Workspace)、命令历史(CommandHistory)。
使Matlab的CurrentDirectory指向所安装的DSPBuilder的Altlib文件夹,点击旁边的simulink图标打开simulink库,如下图6-2所示。
图6-2Matlab的CurrentDirectory
在SimulinkLibraryBrowser的左面展开AlteraDSPBuilder可以看见DSPBuilder的元件库如图6-3所示,元件库可以分为若干部分。
其中有主控元件库(AltLab)、算术元件库(Arithmetic)、开发板库(Boards)、复元件库(ComplexType)、组合元件库(Gate&Control)、总线元件库(IO&Bus)、时钟元件库(RateChange)、SOPC元件库(SOPCBuilderLinks)、状态机功能元件库(StateMachineFunctions)、时序元件和存储器元件库(Storage)、IP核元件库(MegaCoreFunction)、视频和图象处理元件库(VideoandImageProcessing)
图6-3DSPBuilder元件库
1、主控元件库(AltLab),包含一些用于控制的模块。
主要有:
数据观察窗(BP)、FPGA编程器(Deviceprogrammer)、HDL引入模块(HDLImport)、HDL子系统元件模块(HDLSubSystem)、HIL硬件环境模块(HIL)、逻辑分析仪探头(Node)、硬件工程参数设置模块(QuartusⅡGlobalProjectAssignment)、FPGA引脚锁定模块(QuartusⅡPoinoutAssignment)、MatLab模型至VHDL转换器(SignalCompiler)、逻辑分析仪(SignalTapⅡAnalysis)。
2、算术元件库(Arithmetic),包含一些与运算相关联的器件。
主要有比较器(Comparator)、计数器(Counter)、差分器(Differentiator)、除法器(Divider)、增益乘法器(Gain)、地址发生器(IncerementDecrement)、积分器(Integrator)、乘法器(Multiplier)、乘法累加器(MultiplyAccumulate)。
如图6-4所示。
图6-4算术元件库
3、SOPC元件库(SOPCBuilderLinks),在左侧展开加号分别是SOPCAVALON总线模块、SOPCAVALON总线端口模块和SOPC用户自定制指令端口。
如图6-5。
图6-5SOPC元件库
4、IP核元件库(MegaCoreFunction),包含Altera公司设计好的IP核。
可以使一般的设计者在不用全面了解所用IP核相关技术过多细节的情况下,在短期内设计符合要求的系统。
MegaCore是Altera的IPCore计划中的一个组成部分,IP核元件库所包含的IP核不附带在DSPBuilder和QuartusⅡ中,需要单独购买。
如图6-6所示,IP核元件库主要有CICIP核(cic)、FFTIP核(fft)、FIRIP核(fir)、NCOIP核(noc)、RSIP核、VITERBIIP核(viterbi)。
图6-6MegaCoreFunction元件库
6.2FSK调制器设计
二进制频率调制(2FSK),是利用二进制数字基带信号控制载波进行频谱变换的过程。
在发送端产生不同频率的载波震荡来传输数字信号“0”、“1”,在接收端,把不同频率的载波振荡还原成相应的数字基带信号。
FSK调制的方法有两种:
1、直接调频法
用数字基带矩形脉冲控制一个振荡器的某些参数,直接改变振荡频率,输出不同的频率信号。
2、频率键控法
用数字矩形脉冲控制电子开关在两个振荡器之间进行转换,从而输出不同频率的信号。
6.2.1建立设计模型
1、们需要建立一个工作库,所以先新建一个文件夹FSK。
2、使Matlab的CurrentDirectory指向所安装的DSPBuilder的Altlib文件夹点击上方的simulink图标打开simulink库,如下图6-7所示。
图6-7Matlab的CurrentDirectory
3、在SimulinkLibraryBrowser窗口中选择File菜单,在出现的菜单中选择New,在弹出的子菜单中选择新建模型model。
如图6-8
图6-8新建Model
4、放置SignalCompilder。
点击simulink库管理器左侧的数形列表中的AlteraDSPBuilder条,使之展开DSPBuilder库,这时会出现一串树形列表,对DSPBuider的子模块(Block)进行分组,展开其中的Altlab,选择库管理器右侧的SignalCompilder,拖动到新的模型窗口。
如图6-9
图6-9Simulink库中的DspBuilder
5、图6-5,为所需最终连接的Modle图形。
参照图6-10先放置Input2,Input2在DSPBuilder库中的IO&Bus模块中,选择Input拖动到新Model中,点击图形下面的文字Input可以更改名称。
双击打开参数设置窗口,Bustype可设为UnsignedInteger(无符号整数),numberofbits设为2。
如图6-11
图6-10FSK调制模型
图6-11input2参数设置
Constant也同样在IO&Bus模块中,constant1设置为无符号整数,numberofbits设为8,常数值(ConstantValue)设置为9,抽样时间(Sampletime)为1,如图6-12。
Constant2除了Constantvalue设置为3外,其余设置同Constant1,这样可以使数字基带矩形脉冲的峰峰值在3到9之间。
图6-12constant1参数设置
6、n-to-1Multiplexer和LUT同在Gate&Control模块下,将它们拖到新建Model中将LUT改名为ROM10X10S,如图6-13
图6-13LUE和n-to-1Multiplexer模块
其中n-to-1Multiplexer的数据输入线(NumberofinputDataLine)设为2,pipeline设为1。
ROM10X10S的busType设为signedInteger(有符号整数),输出位numberofbits为8位,LUTAddressWidth(查找表地址线位宽)设为8。
在MATLABArray编辑框中输入计算查找表内容的计算式。
在此可以直接使用正弦(sin)函数,在这里sin函数的调用格式为sin([起始值:
步进值:
结束值])。
ROM10X10S为一个输入地址为8位,输出地址为8位的正弦查找表模块,输入地址总线位有符号整数(SignedInterger)。
可以设定起始值为0、结束值为2π,步进值为2π/2^8。
计算式可以写成127*sin([0:
2*pi/(2^8):
2*pi]),其中pi即位常数π。
在UseLPM处打勾,表示允许QuartusⅡ利用目标器件中的嵌入式RAM(在EAB、ESB或M4K模块中)来构成ROM10X10S,即将生成的正弦波数据放在嵌入式RAM构成的ROM中,这样可以节省大量的逻辑资源。
如图6-14。
图6-14ROM10X10S参数设置
7、在Arithmetic模块下找到ParallelAdderSubtractor,改名为ADDER4,将输入设为2,Add(+)Sub(-)设为++,其余不变,如图6-15。
图6-15设置ADDER4
8、放置Delay模块。
在Storage库下的Delay,放置到新建模型窗口并改名为Dly2。
Delay是一个延时环节。
在这里不修改其默认参数设置。
9、Bus7和Out8在IO&Bus库下。
找到AltBus,和output分别改名为Bus7和Out8。
Bus7的BusType为SignedInteger,NodeType为InternalNode,numberofbit为8位。
如图6-16。
图6-16设置Bus7
Out8的BusType也为Signedinteger类型8位。
如图6-17。
图6-17设置Out8
10、放置完所需的模块后,按照图6-5连接好。
这样就完成了FSK调制模型的设计。
在进行仿真验证和SignalCompiler编译前,先对文件进行存盘操作:
点击新建模型窗口的File菜单,选择Save项。
取名并保存在自己所建的文件夹FSK中。
在本例中,新建模型取名为fsk,模型文件为fsk.mdl。
保存完毕后,新建模型窗口的标题栏会显示模型的名称,对模型取名后就可以使用SignalCompiler进行编译了。
在编译前还需要进行仿真验证。
6.2.2Simulink模型仿真
用DSPBuilder模块设计好一个新的模型后,可以直接在simulink中进行算法级、系统级仿真验证。
对一个模型进行仿真,需要施加合适的激励、一定的仿真步进和仿真周期,添加合适的观察点和观察方式。
需要强调的是:
凡是来自AlteraDSPBuilder库以外的模块,SignalCompiler都不能将其变成硬件电路,即不会影响生成的VHDL程序,但在启动Simulink仿真后能影响后面产生的仿真激励文件,PulseGenerator模块的情况正是如此。
1、加入一个PulseGenerator模块,在Simulink库管理器中,展开simulink库,选中Sources库,把Sources库中的PulseGenerator模块拖放到FSK模型窗口中。
2、添加波形观察模块。
在simulink的库管理器中,展开simulink库,选中其中的Sinks库,把Scope模块拖放到FSK模型窗口中。
双击该模块,打开的是一个Scope窗口。
用鼠标点击Scope模块窗口上侧工具栏的第二个工具按钮:
Parameters参数设置。
打开Scope参数设置对话框,在Scope对话框中有两个选项页:
Gerneral和DataHistory。
在Gerneral选项页中,改变Numberofaxes参数为2。
点击“OK”后可以看到Scope窗口增加了两个波形观察窗。
每个观察窗都可以分别观察信号波形,而且相对独立。
如图6-18。
图6-18Scope设置
3、按图6-10连接FSK模型的全图。
先设置模型的仿真激励。
需要设置与此相连的模块:
PulseGenerator。
双击放置在FSK模型窗口中的PulseGenerator模块,设置对输入端口施加的激励。
在打开的PulseGenerator模块参数设置对话框中,可以看到下列参数如图6-19。
图6-19PulseGenerator参数设置
其中脉冲类型(PulseType)是基于时间的(Timebased),振幅(Amplitude)为1,周期(period)是1500秒,占空比(PulseWidth)为50%,相位延迟(Phasedelay)为0。
4、点击Simulation菜单,在下拉菜单中选择configurationparameters如图(6-20),将Stoptime设置成10000。
FSK模型编辑窗中,在Simulation菜单下,选Start项,开始仿真。
等待仿真结束,双击Scope模块,打开scope观察窗。
在Scope观察窗中,可以使用工具栏中的按钮来放大缩小波形,也可以使用工具栏上的“Autoscale”,使波形自动适配波形观察窗,用鼠标左键,可以放大波形。
图6-21为FSK的仿真图形。
图6-20FSK仿真停止时间
图6-21FSK仿真图
图中可以清晰的看到在脉冲值为1和0时,载波信号频率随脉冲信号值变化而变化,从而实现了2FSK。
6.2.3SignalCompiler使用方法
下面进行设计流程中最为关键的一步,就是把DSPBuilder的设计转到硬件上加以实现。
在这一步,可以获得针对特定FPGA芯片的VHDL代码。
1、双击FSK模型中的SignalCompiler模块,将出现如图6-22所示的对话框,点击Analyze(分析)按钮后,SignalCompiler就会对FSK模型进行分析,检查模型有无错误,并在Matlab主窗口弹出对话框,并给出相关信息。
图6-22双击SignalCompiler
2、图6-21中显示了SignalCompiler窗口,左侧是项目设置选项ProjectSettingOptions,可以设置器件类型(Device)、综合工具(SynthesisTool)以及优化项目(Opimization);右侧是硬件编译流程HardwareCompilation;下方是信息框Messages。
SignalCompiler的设置都集中在项目设置选项部分。
在Device下拉选择框中选择需要的器件系列,在此选为Cyclone系列。
其具体的器件型号,需由QuartusII自动决定使用该器件系列中的某一个具体型号的器件,或在手动流程中由用户指定。
图6-21SignalCompiler设置对话框
3、当设置好Device和Synthesis后,右侧的硬件编译HardwareCompilation部分就会列出一个操作流程,见图6-21。
分别为:
①转换MDL文件为VHDL文件(ConvertMDLtoVHDL)
②综合(Synthesis)
③编译适配(QuartusIIQuartus)
先点击步骤1的图标,完成simulink文件(*.mdl)到VHDL文件的转换。
转换完成后,在“Messages”信息提示框中,会显示“Generatedtoplevel“fsk.vhd”files”,即顶层文件fsk.vhd完成转换(图4-34)。
fsk模型生成的VHDL文件
4、点击步骤2的图标,完成综合过程。
因为左侧的设置,本例用QuartusII来完成综合过程的,在综合后生成原子网表供适配器使用,并自动生成QuartusII可直接调用的工程。
5、点击步骤3的图标,调用QuartusII完成编译适配过程,生成编程文件:
pof文件和sof文件(图4-36)。
编程文件可以直接用于FPGA的编程配置。
如果想知道详细的报告,点击下面的ReportFile按钮进行查看。
Fsk模型对应的报告文件为fsk_DspBuilder_Report.html。
6.2.4使用QuartusII实现时序仿真
虽然已经进行了算法级、系统级仿真验证,然而进行门级的时序仿真仍然是十分重要的,SignalCompiler已将MATLAB上的仿真信息转变成了可用于QuartusII进行时序仿真的激励信息及相关仿真文件fsk_quartus.tcl,因此能容易地完成此项任务。
1、打开QuartusII环境,选择菜单Project…,定位到fsk模型所在路径目录,打开DSPBuilder建立的QuartusII工程文件:
fsk.quartus。
2、上文中提到,在SignalCompiler中的QuartusII编译,具体的器件由QuartusII自动决定,可实际使用中,器件往往不是QuartusII自动选定的那个型号,管脚也不是QuartusII自动分配的管脚。
这些都需要在QuartusII中进行修改。
所以这里须按照前面章节中叙述的方法选择具体器件型号,本例中使用的是EP1C6Q240C8,然后启动全程编译,即执行StartCompilation。
3、执行菜单Processing→StartSimulation。
图6-22即为时序仿真波形,在图中可以清楚的看到输出数据随着时钟的变换交替的进行频率变换。
如果这时看不到输出的波形数据,应该回到MATLAB设计文件检查,仿真、变换(注意这时只按SignalCompiler中的第一按钮!
)。
图6-22时序仿真波形图
6.2.5使用QuartusII硬件测试与硬件实现
在此按照前面章节中介绍的方法锁定管脚。
打开fsk工程文件fsk.vhd,了解端口情况,选择合适的电路模式。
然后进行编译,完成适配过程。
最后是进行硬件的下载,连接好FPGA开发板。
然后将实测结果与在计算机上进行的时序仿真结果进行比较。
若再想改动Simulink中的fsk.mdl图,应该注意两点:
第一,内部电路结构和设置可以改,但端口信号名不要改,如输入input2、out8,因为此信号的引脚已被锁定,不便改变
第二,改动out.mdl图后只宜作系统仿真和VHDL文件转换,不宜作综合,即最多只能对图6-17所示的界面执行第1个按纽,否则将可能把原来设定好的引脚全部冲掉。
为了保存引脚信息,综合与适配两项操作必须在进入QuartusII后进行。
图6-23为硬件实现后的输出波形。
图6-23FSK调制波形
6.3直接数字合成DDS设计
6.3.1直接数字合成DDS基本原理
对于正弦信号发生器,它的输出可以用下式来描述。
(6-1)
其中
是指该信号发生器的输出信号波形,
指输出信号对应的频率。
上式的表述对于t式连续的,为了用数字逻辑实现该表达式,必须进行离散化处理,用基准时钟clk进行抽样,令正弦信号的相位:
(6-2)
在一个clk周期
,相位
的变化量为:
(6-3)