您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第5章 基于FPGA的DSP开发技术 SOPC技术与应用
DSPBuilder可以帮助用户完成基于FPGA的DSP系统设计,除了可以进行图形化的系统建模外,DSPBuilder还可以自动完成大部分的设计过程和仿真,直至把设计文件下载到FPGA芯片中。第1节基于MATLAB/DSPBuilder的DSP模块设计流程DSPBuilder是一个系统级(算法级)设计工具,但同时它把系统级(算法仿真建模)和RTL级(硬件实现)的设计工具连接起来,使算法开发到硬件的实现可以无缝地过渡。使用Matlab/DSPBuilder进行DSP系统的开发必须要安装Matlab和DSPBuilder软件。DSPBuilder设计包括两套流程:自动流程和手动流程:设计流程的第一步在Matlab/Simulink中进行设计输入,在Matlab/Simulink中建立一个模型文件(mdl文件),用图形方式调用DSPBuilder和其它Simulink库中的模块,构成系统级或算法级设计框图。利用Simulink的图形化仿真、分析功能,分析此设计模型的正确性,完成模型仿真。第一步设计同一般的Matlab/Simulink建模过程几乎没什么区别,所不同的是,设计采用了DSPBuilder库。设计流程第二步通过SignalCompiler把Simulink的模型文件转化为硬件描述语言文件,以供其它的EDA(QuartusII、ModelSim等)软件处理,这些软件不能直接处理Matlab/Simulink产生的模型文件,那么DSPBuilder中的SignalCompiler模块用于完成模型文件到硬件描述语言文件的转换,转换之后的HDL文件是RTL级(寄存器传输级,即可综合的格式)。设计流程的第三步执行RTL级的仿真,DSPBuilder支持自动流程的ModelSim仿真。用户也可以利用第二步产生的VHDL文件使用其它的仿真工具软件手动地进行仿真。设计流程的第四步使用第二步SignalCompiler产生的VHDL文件进行RTL级的综合,网表产生和适配等处理,DSPBuilder支持自动流程和手动流程两种方式:自动流程中可以选择让DSPBuilder自动调用QuartusII等EDA软件来完成相应的工作;手动模式允许用户选择相应的软件来完成相应的工作,手动模式需要更多的干预,同时提供了更大的灵活性,用户可以指定综合、适配等过程的条件。第三步和第四步可以不分先后。设计流程的第五步在QuartusII中编译用户的设计,最后将设计下载,进行测试验证。经过测试、验证的设计可以单独执行相应的DSP功能。如果DSPBuilder产生的DSP模型只是整个设计中的一个子模块,那么可以在设计中调用DSPBuilder产生的VHDL文件,以构成完成的设计。第2节正弦发生器模块的设计通过本例的学习可以掌握DSPBuilder的使用方法。这个简单的正弦波发生器,主要由4部分构成:IncCount是阶梯信号发生模块,产生一个按时钟线性递增的地址信号,送往SinLUT。SinLUT是一个正弦函数值的查找表模块,由递增的地址获得正弦波的离散值输出。由SinLUT输出的8位正弦波数据经过一个延时模块Delay后,送往Product乘法模块,与SinCtrl相乘,SinCtrl是一位输入,SinCtrl通过Product完成对正弦波输出有无的控制。SinOut是整个正弦波发生器模块的输出,送往D/A即可获得正弦波模拟输出信号。5.2.1建立设计模型(1)运行Matlab,Matlab的主窗口被分成3部分:CommandWindow、Workspace/CurrentDirectory、CommandHistory。(2)建立工作目录。在建立一个新的设计模型前,先要建立一个文件夹,作为工作目录,来保存相应的设计文件,在进行设计之前要先切换到该文件夹下。新建和切换到工作目录可以在命令窗口中使用Matlab命令,也可以在CurrentDirectory窗口中实现。(3)启动Simulink,建立模型。在命令窗口中,键入Simulink,按回车键,启动Matlab图形化仿真工具Simulink,出现了SimulinkLibraryBrowser窗口,在窗口的左侧为SimulinkLibrary列表,右侧窗口显示的则是,被选中的库中的组件、子模块列表。安装完DSPBuilder之后,在Simulink库列表中可以看到AlteraDSPBuilder的库出现在列表中。在下面设计中,主要使用该库中的组件、模块来完成各项设计,再使用Simulink库来完成模型的仿真和验证。选择File菜单,然后单击new,在弹出的子菜单中选择Model,出现了一个未命名的模型窗口。(4)放置SignalCompiler。单击Simulink库列表中的AlteraDSP,单击Altlab项,使之展开。选中右侧窗口中的SignalCompiler组件,按住鼠标左键拖放到新模型窗口中。也可以单击右键,选择Addto‘untitled’,这里’untitled’是指我们新建的未命名的模型文件。在选中SignalCompiler模块后,在Simulink窗口中的提示栏里会显示对应模块的说明,简单的功能介绍。可以看到SignalCompiler的介绍为“ConvertsModelFilestoVHDLfiles.”即为进行模型文件mdl到VHDL文件的转换,所以SignalCompiler是进行任何DSP系统设计必须要添加的模块。选中SignalCompiler选中Helpforthe‘SignalCompiler’block。可以了解怎样使用SignalCompiler的具体信息。也可以按照此方法获得其它的模块相应的帮助信息。(5)添加IncrementDecrement模块。IncrementDecrement模块是DSPBuilder库中Arithmetic子库中的模块。选中AlteraDSPBuilder中的Arithmetic子库,然后在其中选择IncrementDecrement模块。然后按照添加SignalCompiler的方法将IncrementDecrement添加到模型文件中。(7)添加正弦查找表。在AlteraDSPBuilder库的Gate&Control子库中找到查找表模块LUT,把LUT拖放到新建模型窗口,将LUT模块的名字修改为“SinLUT”。双击SInLUT模块,打开模块参数设置对话框“BlockParameters:SinLUT”。把输出位宽设为8;查找表地址设为6;总线数据类型BusType选择为有符号整数SignedInteger;在MatlabArray编辑框中输入计算查找表内容的计算式。在这里使用sin函数,sin函数的调用格式为:sin([起始值:步进值:结束值]),步进值为,计算式可写成:SinLUT是一个输入地址为6位,输出值位宽为8位的正弦查找表模块,且输入地址总线为有符号数,所以设置起始值为0,结束值为2127*sin([0:2*pi/2^6:2*pi]),这是Matlab中的语法。上式的数值变化范围是-127~+127,恰好是8位二进制数可以表示的最大值,所以8位的输出值位宽可以表示上式所描述的正弦波形。其中pi就是常数如果将SinLUT模块的总线数据类型设置为无符号整数UnsignedInteger,且输出位宽改为10,若想得到完成满度的波形输出,应将表达式改为:511*sin([0:2*pi/2^6:2*pi])+512选中”UseLPM”(LPM:LibraryofParameterizedModules参数化模块),如果选中”UseLPM”的话,QuartusII将利用目标器件中的嵌入式RAM来构成SinLUT,即将生成的正弦波数据放在嵌入式RAM构成的ROM中,这样可以节省大量的逻辑资源,否则SinLUT只能用芯片中的LCs来构成。选中”RegisterAddress”,选中此选项会生成输入地址总线,如果目标器件是Straitix或者Cyclone,并且选中了LPM选项,用户必须选中”RegisterAddress”选项。(8)添加Delay模块。在AlteraDSPBuilder库中,选中Storage子库下的Delay模块,拖放到新建模型窗口。Delay模块可以实现延时的功能,在这里可以使用其默认参数设置。在Delay模块的参数设置的对话框中,参数Depth是描述信号延时深度的参数。当Depth为1,模块传输函数为1/Z,通过Delay模块的信号被延时一个时钟周期;当Depth为整数n时,其传输函数为1/Zn,通过Delay模块的信号将被延时n个时钟周期。Delay模块在硬件上采用寄存器来实现,所以Delay模块被放在Storage子库中。ClockPhaseSelection参数主要是控制采样的。当设置为1表示Delay模块总处于使能状态,所用的数据都通过Delay模块。如果设置为10则每隔一个脉冲处于使能状态,那么每隔一个的数据才能通过Delay模块。如设置为0100,表示Delay模块在每4个时钟中第二个时钟是处于使能,那么每4个数据只有第二个数据可以通过。(9)添加断口SinCtrl。在AlteraDSPBuilder库中选择IO&BUS子库,找到AltBus模块,拖放到新建模型窗口中。修改AltBus模块的名字为SinCtrl。SinCtrl是一个1位输入端口。双击SinCtrl模块,打开模块参数设置对话窗口。设置SInCtrl的BusType为”SingleBit”,NodeType参数为”InputPort”。(10)添加Product(乘法)模块。在AlteraDSPBuilder库中选择Arithmetic子库,找到Product模块。将之拖放到新建模型窗口中去,这里Product有两个输入一个是经过Delay的SinLUT输出,另一个是一位端口SinCtrl,Product实现了SinCtrl对SinLUT查找表输出的控制。双击Product模块,打开Product模块参数设置对话框。其中Pipeline(流水线)参数指定该乘法器模块使用几级流水线,即乘积延时几个时钟周期后输出,选中”UseLPM”,表示使用参数化的模块库来实现,选择”UseDedicatedCircuitry”表示可以使用FPGA中的专用模块来实现.(11)添加输出端口Out。在AlteraDSPBuilder库中,选择IO&BUS子库,找到AltBus模块,拖放到信件模型窗口中,修改AltBus模块的名字为Out。Out是一个8位输出端口,接到FPGA的输出引脚,与片外的8位D/A转换器相接,D/A转换模块将数字信号转化成模拟信号。双击Out模块,打开参数设置对话框,设置Out的BusType为”SignedInteger”,NodeType参数为”OutputPort”,然后单击Apply,然后修改”Numberofbits”为8。。Saturate选项如果被选中,则当输出大于要表达的值的最大正值或负值,则输出被强制为最大的正值或负值。若此选项未被选中,则最高位MSB被截断。此选项对输入端口和常数节点类型是无效的。(12)保存设计文件。放置完Out模块,把新建模型中的DSPBuilder模块连接起来,这样就完成了一个正弦波发生器的DSPBuilder模型设计。在进行仿真验证和SignalCompiler编译之前,先把设计保存起来。单击File菜单,选择Save操作,取名并保存。本例中,新建模型取名Sinout,生成模型文件Sinout.mdl。模型保存之后,先要对模型进行仿真验证,如通过验证,则使用SignalCompiler进行编译将mdl文件转换为VHDL文件。5.2.2Simulink模型仿真Matlab的Simulink环境具有强大的图形化仿真验证的功能。用DSPBuilder模块设计好的模型,可以在simulink中进行算法级、系统级仿真验证。对一个模型进行仿真需要施加合适的激励,在特定的观察点添加必须的观
本文标题:第5章 基于FPGA的DSP开发技术 SOPC技术与应用
链接地址:https://www.777doc.com/doc-5117946 .html