参数设置对话框,设置SinCtrl的Bus Type参数为“Single Bit”,Node Type参数为“Input Port”,如图4-13所示。
9、放置Product(乘法)模块。在Altera DSP Builder库中,选中Arithmentic库,找到Product模块(图4-14),用鼠标拖放到模型窗中。在这里Product有两个输入,一个是经过一个Delay的SinLUT查表输出,另一个是外部一位端口SinCtrl。按算法逻辑来看,实现了SinCtrl对SinLUT查找表输出的控制。双击Product模块,打开参数设置对话框,设置Product的参数如图4-14。“Use Dedicated Circuitry”选项用于对FPGA中的专用模块的选择。
10、放置输出端口SinOut。在Altera DSP Builder库中,选中Bus Manipulation库,找到AltBus模块(图4-15),放置在新建模型窗口中。修改AltBus模块的名字为SinOut。SinOut是一个8位输出端口,接向FPGA的输出端口,与外面的8位D/A转换器相接。双击SinOut模块,打开模块参数设置对话框,设置SinOut的Bus Type参数为“Signed Integer”,Node Type参数为“Output Port”,然后点击“Apply”按钮,修改“number of bits”参数为8(图4-15)。
图4-6 建立新模型 图4-9 设置递增递减模块
11. 文件存盘。放置完SinOut模块后,按照图4-2,把新建模型窗口中的DSP Builder模块连接起来。这样就完成了一个正弦波发生器的DSP Builder模型设计。在进行仿真验证和SignalCompiler编译之前,先对设计进行存盘操作:点击新建模型窗口的“File”菜单,在下拉菜单中选择“Save”项,取名并保存(注意,必须保存在自己建立的文件夹中)。在这个例子中,对新建模型取名为Sinout,模型文件为sinout.mdl。保存完毕后,新建模型窗口的标题栏就会显示模型名称。注意:对模型文件取名,尽量用英文字母打头,不使用空格,不用中文,文件名不要过长。在对模型取名后,就可以使用SignalCompiler进行编译,不过现在模型的正确性还是未知的,需要进行仿真验证。
图4-8 递增递减模块改名为IncCount 图4-10 LUT模块
图4-11 设置SinLUT 图4-12 Delay模块及其参数设置窗
图3-13 设置SinCtrl图3-18 Product模块 图3-14 设置乘法单元
4.1.2 Simulink模型仿真
用DSP Builder模块设计好一个新的模型后,可以直接在simulink中进行算法级、系统级仿真验证。对一个模型进行
21
仿真,需要施加合适的激励、一定的仿真步进和仿真周期,添加合适的观察点和观察方式。
1、加入仿真步进模块。首先加入一个Step模块,以模拟SinCtrl的按键使能操作。在Simulink库管理器中,展开simulink库,选中Sources库,把Sources库中的Step模块拖放到sinout模型窗口中(如图4-16)。参照图4-2,把step模块与SinCtrl输入端口相接。注意,凡是来自Altera DSP Builder库以外的模块,SignalCompiler都不能将其变成硬件电路,即不会影响生成的VHDL程序,但在启动Simulink仿真后能影响后面产生的仿真激励文件。Step模块的情况正是如此。 2、添加波形观察模块。在simulink的库管理器中,展开simulink库,选中其中的Sinks库,把Scope(示波器,图3-17)模块拖放到sinout模型窗口中。双击该模块,打开的是一个Scope窗口(图4-18)。
3、Scope参数设置。用鼠标点击Scope模块窗口上侧工具栏的第二个工具按钮:“Parameters”参数设置。打开Scope参数设置对话框(图3-19),在Scope对话框中有两个选项页:“Gerneral”和“Data History”。在“Gerneral”选项页中,改变“Number of axes”参数为2。点击“OK”后可以看到Scope窗口增加了两个波形观察窗。每个观察窗都可以分别观察信号波形,而且相对独立。然后将SinCtrl的信号接向Scope的另一端(图4-21),以作信号比较。需要注意的是,此路信号在生成的VHDL文件中不会有相应语句,因为没有接上输出端口模块:AltBus模块。
图4-15 设置SinOut 图4-16 Step模块 图4-17 Scope模型 图4-18 Scope初始显示 图4-19 设置Scope参数
图4-20 设置Step 图4-21 sinout全图
图4-22 simulink仿真设置 图4-23 simulink仿真Start
4、设置仿真激励。按图4-2连接sinout模型的全图,准备开始仿真。在仿真前还需要设置一下与仿真相关的参数。先设置模型的仿真激励。在sinout模型图中只有一个输入端口SinCtrl,需要设置与此相连的Step模块:双击放置在sinout模型窗口中的Step模块,设置对输入端口SinCtrl施加的激励。在打开的Step模块参数设置对话框中,可以看到下列参数(详见图4-29),图4-20中各参数值的含义是:步进间隔(step time);初始值(Initial value);终值(Final value);采样时间(Sample time)。在此设置“step time”为50;“Initial value”为0,即初始时,不输出正弦波;“Final Value”为1;“Sample time”为1。把最后两项选择:“Interpret vector parameters as 1-D”和“Enable zerocrossing dectection”都设为打
22
勾。在sinout模型编辑窗中(图4-21),点击“Simulation”菜单,在下拉菜单中选择“Simulation parameters”菜单项,如图4-22所示。随后,将弹出sinout模型的仿真参数设置对话框: “Simulation Parameters : sinout”。
仿真参数设置对话框中共有5个选项页:Solver、Workspace I/O、Diagnostics、Advanced、Real-Time Workshop。其中“Solver”选项页中完成仿真时,基本的时间设置、步进间隔和方式、输出选项。在sinout模型中,可设置“Start time”为0.0,“Stop time”为500。其他设置按照默认。选项页的设置也按照默认设置。然后,点击“OK”按钮确认。
注意:为了能更好的在波形观察窗中区分不同信号,可以在sinout模型中对连接线进行命名:双击对应的连接线,就会出现一个可以输入文本的小框,在框中输入信号的名称。
5、启动仿真。sinout模型编辑窗中,选择“Simulation”菜单,选“Start”项,开始仿真(图4-31)。等待仿真结束,双击Scope模块,打开scope观察窗。图4-24显示了仿真结果,SinOut信号是sinout模型的输出(scope观察窗中模拟了D/A的输出波形),SinCtrl信号是sinout模型的输入,可以看出SinOut受到了SinCtrl的控制。当SinCtrl为1时,SinOut波形是正弦波;当SinCtrl为0时,输出为0。在Scope观察窗中,可以使用工具栏中的按钮来放大缩小波形,也可以在波形上单击右键使用“Autoscale”,使波形自动适配波形观察窗,用鼠标左键,可以放大波形。
6、设计成无符号数据输出。一般的D/A器件的输入数据都是无符号的正数。因此,为了能在硬件系统上D/A的输出也能观察到此波形,必须对此输出作一些改进,以便输出无符号数。简单的方法是将图4-24中的波形向上平移127,即对输出的数据加上127即可。另一种方法是改变所有模块的数据类型为无符号,再改变LUT中的公式为:(127*sin[0:2*pi/2^6]:2*pi))+ 128 即可。图4-26是改进后的电路,其功能即在原输出的有符号数据上加上了127。原理是将乘法器输出的8位有符号数的最高位取反并以无符号数输出。图4-25是图4-26的电路产生的仿真波形,可以看出整个波形在0以上。以下将对图中出现的新模块的用法作一说明。
4.1.3 SignalCompiler使用方法
在Simulink中完成仿真验证后,就需要把设计转到硬件上加以实现。这是整个DSP Builder设计流程中最为关键的一步,在这一步,可以获得针对特定FPGA芯片的VHDL代码。
1、双击sinout模型中的signalCompiler模块,将出现如图4-33所示的对话框,点击“Analyze”(分析)按钮后,SignalCompiler就会对sinout模型进行分析,检查模型有无错误,并在Matlab主窗口弹出对话框,并给出相关信息。
2、设置Signal Compiler。在图4-34中显示了Signal Compiler窗口,大致上可以分为三个功能部分: 左侧的项目设置选项“Project Setting Options”;右侧的硬件编译流程“Hardware Compilation”;下方的信息框 “Messages”。SignalCompiler的设置都集中在项目设置选项部分。在“Device”下拉选择框中选择需要的器件系列,默认为Stratix系列器件,对此可以修改。在此选为Cyclone系列。注意,在“Device”中只能选择器件系列,不能制定具体的器件型号,这需由QuartusII自动决定使用该器件系列中的某一个具体型号的器件,或在手动流程中由用户指定。
图4-33 双击SignalCompiler 图4-34 打开SignalCompiler窗口 图4-36 出现MDL to VHDL信息
3、把模型文件MDL转换成VHDL。当设置好“Device”和“Synthesis”后,右侧的硬件编译“Hardware Compilation”部分就会列出一个操作流程,见图4-34。分别为:
“Convert MDL to VHDL”:转换MDL文件为VHDL文件;“Synthesis”:综合;“QuartusII”Quartus编译适配, 生成编程文件。先点击步骤1的图标,完成simulink文件(*.mdl)到VHDL文件的转换。转换完成后,在“Messages”信息提示框中,会显示“Generated top level ―sinout.vhd‖ files”,即顶层文件sinout.vhd完成转换(图4-34)。sinout模型生成的VHDL文件―sinout.vhd‖可以在文件夹e:/myprj/sinwave中找到。
4、综合(Synthesis)。点击步骤2的图标,完成综合过程(图4-35)。在这个例子中是调用QuartusII来完成综合过程的,在综合后生成原子网表供适配器使用,并自动生成QuartusII可直接调用的工程。
5、QuartusII适配。点击步骤3的图标,调用QuartusII完成编译适配过程,生成编程文件:pof文件和sof文件(图
23
4-36)。编程文件可以直接用于FPGA的编程配置。点击图4-36的“Report File”按纽,将获得详细的报告文件。sinout模型对应的报告文件为sinout_DspBuilder_Report.html。
4.1.4 使用QuartusII实现时序仿真
进行门级的时序仿真仍然是十分重要的,SignalCompiler已将MATLAB上的仿真信息转变成了可用于QuartusII进行时序仿真的激励信息及相关仿真文件:sinout_quartus.tcl,因此能容易地完成此项任务。步骤如下:
1、打开QuartusII环境,选择菜单“File”→“Open Project …”,定位到sinout模型所在路径目录,打开DSP Builder建立的QuartusII工程文件:sinout.quartus(图4-47)。
2、上文中提到,在SignalCompiler中的QuartusII编译,具体的器件由QuartusII自动决定,可实际使用中,器件往往不是QuartusII自动选定的那个型号,管脚也不是QuartusII自动分配的管脚。这些都需要在QuartusII中进行修改。所以这里须按照第3章中叙述的方法选择具体器件型号,如EP1C6Q240C8,然后启动全程编译,即执行Start Compilation 。
3、启动仿真编译。即执行菜单“Processing”→“Start Simulation”。结束后能看到图4-45所示的界面。然后打开仿真波形报告窗(如图4-45所示,此窗已自动打开):执行菜单“Processing”→“Simulation Report”。图4-46即为时序仿真波形,所不同的是,正弦信号是用数据的方式显示的。注意,如果这时看不到输出的波形数据,应该回到MATLAB设计文件检查,仿真、变换(注意这时只按SignalCompiler中的第一按钮!),或检查机器是否P4或以上。
4.1.5 使用QuartusII硬件测试与硬件实现
在此按照第3章中介绍的方法锁定管脚(Pin)。首先打开sinout工程文件sinout.vhd,了解端口情况,由于目标器件已确定为EP1C6Q240C8,对D/A输出的8位oSinOuts(7 downto 0)可分别接PIO31-PIO24,对应引脚号是:136、135、134、133、132、128、41、21;系统时钟clock接实验板的“clock0”,对应第179脚;清0信号sclrp接键7,对应第239脚;输出控制iSinCtrls接键8,对应第240脚。接着进行编译,完成适配过程。最后是进行硬件的下载,连接好FPGA开发板。选择模式5,clock0可接65536Hz;打开+/-12V电压,用示波器检测D/A的输出,把键控SinCtrl设置为有效(将键8设成高电平,键7设为低电平),就可以在示波器上看到产生的正弦波了。然后将实测结果与在计算机上进行的时序仿真结果进行比较。最后可以按照第3章的方法利用SignalTapII测定芯片内的实时波形,从而完成更深入的系统测试。
注意,若再想改动Simulink中的sinout.mdl图,应该注意两点:1、内部电路结构和设置可以改,但端口信号名不要改,如输入的SinCtrl,SinOut,因为此信号的引脚已被锁定,不便改变;2、改动sinout.mdl图后只宜作系统仿真和VHDL文件转换,不宜作综合,即最多只能对图4-34所示的界面执行第1个按纽,否则将可能把原来设定好的引脚全部冲掉。
为了保存引脚信息,综合与适配两项操作必须在进入QuartusII后进行。
图4-46 sinout工程的QuartusII仿真波形(门级时序仿真)
4.2 MATLAB窗口使用嵌入式逻辑分析仪SignalTapII(自动设计流程)
在Matlab设计层次也能实时观察到硬件内部产生用于模拟输出的波形数据,可以使用Node模块来选择待监测信号。 4.2.1安装SignalTapII Node模块
由于嵌入式逻辑分析仪在使用中必须随同编程配置文件一起下载到实验开发板上的FPGA中,所以SignalTapII的应用流程必须涉及硬件目标系统的使用。在本项示例(图4-47)中,有一个可控的信号发生器,输出有8位,分别由两个经16进制译码后显示的数码管显示:“DA74”显示高4位;“DA30”显示低4位。同时再将此8位数据输向一个8位D/A器件,使其产生波形,可以在GW48-SOPC系统的D/A输出口接示波器观察这些波形。另外,由电路可知,当键“key1”为高电平时,通过多路选择器“n-to-Multiplexer”,控制输出正弦波形;为低电平时,输出锯齿波形。此控制键的高低电平通过发光管“LED1”指示。在多路选择器“n-to-Multiplexer”的输出端接了一个信号测试仪“Node1”。另外还设置了一个键“key2”,打算用它的信号来作SignalTapII的触发信号,此键的输出由发光管“LED2”来指示。在GW48系统上都能找到图中的键、发光管、数码管和D/A的对应位置。
设计者可以根据图4-47在Simulink编辑窗完成电路设计,然后在对应位置接上测试仪Node1和Node2。首先打开Matlab,点击右侧“…”按纽,设定路径(如图4-77所示),比如设定在 . \\ SOPC_FILE。下面首先简要介绍电路中一些元件情况,然后介绍接入测试仪的流程。图4-47中的“BusConversion”和“BusConversion1”是总线变换器,来自Matlab Altera DSP Builder栏的Bus Manipulation库,前者将8位输出的高4位输给数码管DA74和D/A的高4位;后者将8位输出的低4位输给数码管DA30和D/A的低4位。乘法器“Product1”的作用是放大5位计数器“IncCount”的值,以便与正弦波的幅度同等大,便于在示波器中观察。硬件元件key1/2、LED1/2、DA74/30都来自simulink库管理器的的
24
“GW48-SOPC Development Board”条的项目库内(图4-48,4-49)。“GW48-SOPC_1C6 Board”也在该项目库中,设计时也必须将其调入Simulink模型设计窗中。此模块将决定电路图上的端口元件能自动锁定引脚。
图4-47 SignalTapII使用示例( 本示例路径:.\\ SOPC_FILE \\ sinout0832_demo.mdl)
需要特别注意的是,当将元件,如数码管“HEX LED3 D/A(3-0)”调入编辑窗后必须将其名字改为简单表述才能应用!如改为如图4-47所示的“DA30”。嵌入式逻辑分析仪的任务就是捕捉电路内的两个通道上的输出信号,当逻辑分析仪采样到信号后,就将信号通过下载通信线上传到计算机,并在MATLAB环境中显示出来。调入和设置步骤如下:
1、在“Simulink Library Browser”找到Altlab条目,将Node模块拖入模型设计窗中,改名为Node1。再调入一个Node,改名为Node2,根据图4-47,分别放在适当位置。再于AltLab库中调入“SignalTapII Analysis”模块。
2、如图4-47那样连接好电路后,开始设置Node的参数。双击模块Node2,由于此模块只测试1路二进制信号,所以在弹出的窗口的选项MSB和LSB分别输入0,最高位和最低位都是第0位。同样方法选择Node1的MSB为7,LSB分0,表示此路测试8位总线信号。
3、首先进行系统仿真。仿真参数设置如图4-50/51,Stop time为500;模块Step2的参数设置如图4-51所示,注意其中的Step time设为250,而其初始值为0,终值为1,表示在500单元的时间横轴上前一半是低电平,后一半是高电平。 系统仿真通过后是硬件实现和硬件测试,在这里,硬件测试可以通过普通示波器和嵌入式逻辑分析仪两个途径来实现。
图4-48 将路径设定于C:\\SOPC_FILE 图4-49 进入Matlab的GW48-SOPC Development Board”项目库内,
4.2.2系统仿真和硬件测试 首先进行系统仿真。
启动系统仿真后,Scope2的波形如图4-52所示。 步骤如下:
1、双击SignalCompiler模块,进入图4-53所示的窗口。选择器件“Device”为DSP Board;综合器“Synthesis”为QuartusII;选择优化“Optimization”为Speed。然后点击下方的“SignalTapII”页,在指示句“Insert SignalTapII Logic Analyzer”右侧点击打勾,表示在编译过程中将电路图中已安插好的SignalTapII模块也一同编译进下载文件中。最后在采样缓冲器深度“Depth”处选择1024,表示每一路二进制信号的采样深度都为1024个位。
2、现在启动编译。按图4-54所示的窗口,分别顺序点击右侧按纽,逐项执行VHDL文件转换、综合、适配和下载。注意第4项的下载要求将SOPC板和下载电缆全部连接好。系统板选择模式5,在板上的键1控制波形输出,计划用键2控制SignalTapII的触发。 3、下载结束后关闭图4-54窗。连接好示波器观察输出波形。如果一切正常,双击电路中的逻辑分析仪模块“SignalTapII Analysis”,将出现图4-55的SignalTapII分析窗。
25