Presentation is loading. Please wait.

Presentation is loading. Please wait.

第3章 DSP Builder设计入门 3.1 DSP Builder及其设计流程 3.2 DSP Builder设计向导

Similar presentations


Presentation on theme: "第3章 DSP Builder设计入门 3.1 DSP Builder及其设计流程 3.2 DSP Builder设计向导"— Presentation transcript:

1 第3章 DSP Builder设计入门 3.1 DSP Builder及其设计流程 3.2 DSP Builder设计向导
3.3 调幅电路模型设计示例 3.4 使用SignalTap II嵌入式逻辑分析仪

2 3.1 DSP Builder及其设计流程 DSP Builder是一个系统级(或算法级)设计工具,它架构在多个软件工具之上,并把系统级和RTL级两个设计领域的设计工具连接起来,最大程度地发挥了两种工具的优势。DSP Builder依赖于MathWorks公司的数学分析工具Matlab/Simulink,以Simulink的Blockset出现,可以在Simulink中进行图形化设计和仿真,

3 同时又通过SignalCompiler可以把Matlab/Simulink的设计文件(. mdl)转成相应的硬件描述语言VHDL设计文件(
同时又通过SignalCompiler可以把Matlab/Simulink的设计文件(.mdl)转成相应的硬件描述语言VHDL设计文件(.vhd),以及用于控制综合与编译的TCL脚本。而对后者的处理可以由FPGA/CPLD开发工具Quartus II来完成。 由于在FPGA上设计一个DSP模块的复杂性,设计的性能(包括面积、速度、可靠性、设计周期)对于不同的应用目标将有不同的要求,涉及的软件工具也不仅仅是Simulink和Quartus II,DSP Builder针对不同情况提供了两套设计流程,即自动流程和手动流程。图3-1是利用DSP Builder进行DSP设计的流程框图。

4 如图3-1所示,DSP Builder设计流程的第一步是在Matlab/Simulink中进行设计输入,即在Matlab的Simulink环境中建立一个mdl模型文件,用图形方式调用Altera DSP Builder和其它Simulink库中的图形模块(Block),构成系统级或算法级设计框图(或称Simulink设计模型)。 第二步是利用Simulink强大的图形化仿真、分析功能,分析此设计模型的正确性,完成模型仿真。 在这两步中,与一般的Matlab Simulink建模过程几乎没有什么区别,所不同的是设计模型库采用Altera DSP Builder的Simulink库,也不涉及到其它EDA软件,没有自动流程和手动流程的区别。

5 第三步是DSP Builder设计实现的关键一步,通过SignalCompiler把Simulink的模型文件(后缀为
第三步是DSP Builder设计实现的关键一步,通过SignalCompiler把Simulink的模型文件(后缀为.mdl)转化成通用的硬件描述语言VHDL文件(后缀为.vhd)。由于EDA工具软件(诸如Quartus II、ModelSim)不能直接处理Matlab的.mdl文件,这就需要一个转换过程。转换获得的HDL文件是基于RTL级(寄存器传输级)的VHDL描述。

6 图3-1 DSP Builder设计流程

7 再接下来的几个步骤是对以上设计产生的VHDL的RTL代码和仿真文件进行综合、编译适配以及仿真。为了针对不同用户的设计目的和设计要求,DSP Builder提供了两种不同的设计流程,主要可以分为自动流程和手动流程。 如果采用DSP Builder的自动流程,几乎可以忽略硬件的具体实现过程,可以选择让DSP Builder自动调用Quartus II等EDA设计软件,完成综合(Synthesis)、网表(ATOM Netlist)生成和Quartus II适配,甚至在Matlab中完成FPGA的配置下载过程。

8 如果希望使用其它第三方的VHDL综合器和仿真器(除Synplify、LeonardoSpectrum和 Quartus II综合器及ModelSim外),或是希望完成特定的适配设置,如逻辑锁定、时序驱动编译、ESB特定功能应用等,可以选用手动流程设计。 在手动流程中,设计者可以灵活地指定综合、适配条件。不过,需要手动地调用VHDL综合器进行综合,调用Quartus II进行适配,调用ModelSim或者Quartus II进行仿真,最后用Quartus II产生相应的编程文件用于FPGA的配置。

9 采用手动流程时,除了行为级仿真验证和设计输入外,其它过程与标准的基于VHDL的EDA设计流程是完全一致的。由上一步DSP Builder设计流程得到VHDL文件(由Simulink模型文件*.mdl通过SignalCompilder转换而成),送入综合器进行综合。综合器可以是Synplify Pro,也可以是LeonardoSpectrum,或者采用Altera自己的Quartus II。在综合时,可能需要对综合器进行配置或者提供综合的约束条件。由于这个过程操作可能比较繁琐,所以DSP Builder的SignalCompiler相应提供了一个接口,针对设计,自动产生一个TCL脚本与综合器Synplify或者LeonardoSpectrum相接。

10 综合器在综合操作后会产生一个网表文件,以供下一个流程使用。这里产生的网表文件称为ATOM网表文件(如图3-1所示),主要是EDIF网表文件(
综合器在综合操作后会产生一个网表文件,以供下一个流程使用。这里产生的网表文件称为ATOM网表文件(如图3-1所示),主要是EDIF网表文件(.edf 电子设计交换格式文件)或VQM(.vqm Verilog Quartus Mapping File),它们是一种参数可设置的,并含有具体器件系列硬件特征(如逻辑宏单元LCs、I/O单元、乘积项、嵌入式系统块ESB等)的网表文件。Quartus II可以利用这些ATOM网表文件针对选定的具体器件进行适配,包括布线、布局、结构优化等操作,最后产生时序仿真文件和FPGA目标器件的编程与配置文件。在这一步,设计者可以在Quartus II中完成对Pin(引脚)的锁定,更改一些约束条件。

11 如果用DSP Builder产生的DSP模型只是庞大设计中的一个子模块,则可以在设计中调用DSP Builder产生的VHDL文件,以构成完整的设计。同时,一样可以使用Quartus II强大的LogicLock功能和SignalTap测试技术。 在DSP Builder设计流程的最后一步,可以在DSP Builder中直接下载到FPGA用户开发板上,或者通过Quartus II完成硬件的下载、测试。

12 在图3-1的流程中,其中有个流程在DSP设计中是不可或缺的,那就是HDL仿真。与DSP Builder可以配合使用的HDL仿真器是ModelSim。DSP Builder在生成VHDL代码时,可以同时生成用于测试DSP模块的TestBench(测试平台)文件,DSP Builder生成的TestBench文件采用VHDL语言,测试向量与该DSP模块在Simulink中的仿真激励相一致。通过ModelSim仿真生成的TestBench可以验证生成的VHDL代码与Simulink中DSP模型的一致性。另外,DSP Builder在产生TestBench的同时,还产生了针对ModelSim仿真的Tcl脚本来简化用户的操作,掩盖ModelSim仿真时的复杂性。

13 在大部分情况下,Quartus II对DSP模块适配后,需要再次验证适配后网表与Simulink中建立的DSP模型的一致性。这就需要再次使用ModelSim进行仿真,这时仿真采用Quartus II适配后带延时信息的网表文件(EDIF格式或者VHDL、Verilog格式)。

14 3.2 DSP Builder设计向导 本节将以一个简单的可控正弦波发生模块的设计为例,详细介绍DSP Builder的使用方法。图3-2所示是一个简单的正弦波发生器,主要由四个部分构成。InCount是阶梯信号发生模块,产生一个按时钟线性递增的地址信号,送往SinLUT。SinLUT,顾名思义是一个sin(正弦函数)值的查找表(LUT:Look Up Table)模块,由递增的地址获得正弦波的量化值输出。

15 SinLUT出来后送Product乘法模块,与SinCtrl相乘。由于SinCtrl是1 bit输入,SinCtrl通过Product就完成了对有无正弦波输出的控制。SinOut是整个正弦波发生器模块的输出,送往D/A即可获得正弦波的输出(模拟信号)。 设计者在利用DSP Builder进行DSP系统相关设计时,关键的设计过程大都在Matlab的图形仿真环境Simulink中进行。

16 图3-2 正弦波发生模块原理图

17 建立一个新的模型 (Model) 设计时首先需要建立一个新的设计模型,步骤如下: 1. 打开Matlab环境 Matlab环境界面如图3-3所示。可以看到,Matlab的主窗口界面被分割成三个窗口:命令窗口(Command Window)、工作区(Workspace)、命令历史记录(Command History)。在命令窗口中可以键入Matlab命令,同时获得Matlab对命令的响应信息、出错警告提示等。

18 图3-3 Matlab界面

19 2. 建立工作库 在建立一个新的设计模型前,最好先建立一个新的文件夹,作为work (工作)目录,并把Matlab当前的work目录切换到新建的文件夹下。可以使用Matlab命令来完成这些操作。在Matlab主窗口中的命令窗口中键入: cd e:/ mkdir /myprj/sinwave cd /myprj/sinwave

20 其中e:/myprj/sinwave是新建的文件夹,是用来为Matlab建立工作目录的。Mkdir是一个建立新目录的Matlab命令,cd是切换工作目录的Matlab命令。具体过程可以参见图3-4(打开Simulink)。 通过改变Matlab主界面中的“Current Directory”的制定,同样可以改变Matlab的当前工作目录。

21 图3-4 打开Simulink

22 3. 了解Simulink库浏览器 当成功地把Matlab当前目录切换到新建的设计目录后,可以在Matlab命令窗口键入“Simulink”命令,以开启Matlab的图形化建模仿真环境Simulink。详见图3-4。 图3-5是Simulink的库浏览器(Library Browser)。在库浏览器的左侧是Simulink library列表,其中“Simulink”库是Simulink的基本模型库。在库浏览器的右侧是选中的library中的组件、子模块列表。

23 当安装完DSP Builder后,在Simulink的库浏览器中可以看到“Altera DSP Builder”字样出现在library列表中。在以下的DSP Builder应用中,主要是使用该库中的组件、子模型来完成各项设计,再使用Simulink库来完成模型的仿真验证。 4. Simulink的模型文件 在打开Simulink库浏览器后,需要新建一个Simulink的模型文件(后缀为mdl),在Simulink的库浏览器中选择“File”菜单(见图3-6),在出现的菜单项中选择“New”,在弹出的子菜单项中选择新建模型“Model”。图3-6右下角显示的就是新模型窗口。

24 图3-5 Simulink库浏览器

25 图3-6 建立新模型

26 5. 放置SignalCompiler 点击Simulink库浏览器左侧的库内树形列表中的Altera DSP Builder条,使之展开DSP Builder库,这时会出现一长串树形列表,对DSP builder库的子模块(Block)进行了分组。再次点击其中的AltLab项,展开AltLab,选中库浏览器右侧的SignalCompiler组件,按住鼠标右键拖动SignalCompiler到新模型窗口中(如图3-7所示)。

27 图3-7 放置SignalCompiler

28 6. 放置Increment Decrement
参照图3-2,将Increment Decrement模块放置到新模型中。Increment Decrement模块(见图3-8)是DSP Builder库中的Arithmetic(算术)模块。选中Altera DSP Builder库中的Arithmetic条,则在库浏览器的右侧,可以看到Increment Decrement模块。按照放置SignalCompiler的方法,把Increment Decrement模块拖到新建模型窗口中。

29 7. 设置IncCount 用鼠标点击在新建模型窗口中的Increment Decrement模块下面的文字“Increment Decrement”,就可以修改文字内容,也就是可以修改模块名字。在这里不妨将其修改为“IncCount”,如图3-9所示。

30 图3-8 Increment Decrement模块

31 图3-9 修改IncCount

32 按照图3-2中描述的含义,要把IncCount模块做成一个线性递增(顺序加1)的地址发生器,就需要对IncCount模块的参数进行相应的设置。
双击新建模型中的IncCount模块,打开IncCount的模块参数设置对话框“Block Parameters:IncCount”,如图3-10所示。在参数设置对话框的上半部分是该模块的功能描述和使用说明;对话框的下半部分是参数设置部分。对于Increment Decrement模块,共有下面几种参数可以设置:

33 ● 总线类型(Bus Type) ● 输出位宽(number of bits) ● 增减方向(Direction) ● 开始值(Starting Value) ● 时钟相位选择(Clock Phase Selection) 对于总线类型(Bus Type),在其下拉列表框中共有三种选择: ● 有符号整数(Signed Integer) ● 有符号小数(Signed Fractional) ● 无符号整数(Unsigned Integer)

34 图3-10 设置IncDec

35 在这里选择“Unsigned Integer”,即无符号整数。对于输出位宽,由于在后面接着的正弦查找表(Sin LUT)的地址为6位,所以输出位宽设为6。
IncCount是一个按时钟增1的计数器,Direction设为Increment(增量方式)。对于其它设置,仍采用Increment Decrement模块的默认设置。设置完的对话框如图3-10。然后点击“OK”按钮确认。 注意:若对DSP Builder库中的模块设置参数值不了解,可以在相应模块的参数设置对话框中点击“Help”按钮(或按F1键),调出DSP Builder的相应帮助,以便了解详细的模块参数说明。

36 8. 放置正弦查找表(SinLUT) 在Altera DSP Builder库的Gate库中找到查找表模块LUT(见图3-11)。把LUT拖到新建模型窗口,按照IncCount的做法把新调入的LUT模块的名字修改成“SinLUT”。 双击SinLUT模块,打开模块参数设置对话框“Block Parameters SinLUT”,如图3-12所示。把输出位宽(Output [number of bits])改为10,查找表地址线位宽(LUT Address Width)设为6。

37 图3-11 LUT模块

38 图3-12 设置SinLUT

39 在“MATLAB Array”编辑框中输入计算查找表内容的计算式。在此可以直接使用sin(正弦)函数。此处sin函数的调用格式为:
SinLUT是一个输入地址为6位、输出值位宽为10的正弦查找表模块,且输入地址总线为无符号数,可以设置起始值为0、结束值为2π、步进值为2π/26。计算式可写成: 511*sin([0:2*pi/(2^6):2*pi])+512 其中pi即为常数π。设置好的SinLUT参数如图3-12所示。

40 9、放置Delay模块 在Simulink库浏览器的Altera DSP Builder库中,选中Storage库下的Delay模块,放置到新建模型窗口。 Delay模块(见图3-13)是一个延时环节,在这里可以不修改其默认参数设置。其具体的默认参数设置见图3-14。

41 图3-13 Delay模块

42 图3-14 Delay模块默认参数设置

43 在Delay模块的参数设置对话框中,参数Depth是描述信号延时深度的参数。当Depth为1时,信号传输函数为1/z,表现为通过Delay模块的信号延时1个时钟周期(Clock Phase Selection参数为1的情况下);当Depth为整数n时,其传输函数为1/zn,表现为通过Delay模块的信号将延时n个时钟周期。Delay模块在硬件上可以采用寄存器来实现,这也就是为什么把Delay模块放在Storage(存储单元)库中的原因。

44 到现在为止,我们已经在新建模型中放置了4个模块(Block),按照图3-2,先把他们连接起来。把鼠标的指针移动到上述几个模块的输入/输出端口上,鼠标指针就会变成十字形“”,这时按住鼠标左键,拖动鼠标就可以连线了,如图3-15所示。

45 图3-15 连线

46 10. 放置端口SinCtrl 在Simulink库浏览器的Altera DSP Builder库中,选中Bus Manipulation库,找到AltBus模块(见图3-16),放置在新建模型窗口中。修改AltBus模块的名字为SinCtrl。 SinCtrl是一个1位输入端口,双击SinCtrl模块,打开模块参数设置对话框,设置SinCtrl的Bus Type参数为“Single Bit”,Node Type参数为“Input Port”,如图3-17所示。

47 图3-16 AltBus模块

48 图3-17 设置SinCtrl

49 11. 放置Product(乘法)模块 在Simulink库浏览器的Altera DSP Builder库中,选中Arithmentic库,找到Product模块(如图3-18所示),用鼠标拖放到新建模型窗口中。 在这里,Product的两个输入中,一个是经过一个Delay的SinLUT查表的输出,另一个是外部的一位端口SinCtrl。按算法逻辑来看,实现了SinCtrl对SinLUT查找表输出的控制。

50 双击Product模块,打开模块参数设置对话框,设置Product的参数,如图3-19。其中Pipeline(流水线)参数指定该乘法器模块使用几级流水线,即乘积延时几个时钟周期后出现。“Use LPM”参数是选择是否需要采用LPM元件(LPM:Library of Parameterized Modules,参数化模块库)。

51 图3-18 Product模块

52 图3-19 设置乘法单元

53 12. 放置输出端口SinOut 在Simulink库浏览器的Altera DSP Builder库中,选中Bus Manipulation库,找到AltBus模块(见图3-17),将其放置在新建模型窗口中。修改AltBus模块的名字为SinOut。 SinOut是一个10位输出端口,接向FPGA的输出端口,与外面的10位高速D/A转换器相接,通过D/A把10位数据转换成1路模拟信号。双击SinOut模块,打开模块参数设置对话框,设置SinOut的Bus Type参数为“Unsigned Integer”,Node Type参数为“Output Port”,然后点击“Apply”按钮,修改“number of bits”参数为10,如图3-20所示。

54 图3-20 设置SinOut

55 13. 设计文件存盘 放置完SinOut模块后,按照图3-21,把新建模型窗口中的DSP Builder模块连接起来(连接方法见前面所述),这样就完成了一个正弦波发生器的DSP Builder模型设计。在进行仿真验证和SignalCompiler编译之前,先对设计进行存盘操作:

56 图3-21 原理图(无Sim)

57 点击新建模型窗口的“File”菜单,在下拉菜单中选择“Save”项,取名并保存。在这个例子中,对新建模型取名为Sinout,模型文件为sinout.mdl。在保存完毕后,新建模型窗口的标题栏就会显示模型名称 注意:对模型文件取名时,尽量用英文字母打头,不使用空格,不用中文,文件名不要过长。 在对模型取名后,就可以使用SignalCompiler进行编译,把mdl文件转换为VHDL文件。不过现在模型的正确性还是未知的,需要进行仿真验证。

58 Simulink模型仿真 Matlab的Simulink环境具有强大的图形化仿真验证功能。用DSP Builder模块设计好一个新的模型后,可以直接在Simulink中进行算法级、系统级仿真验证。对一个模型进行仿真,需要施加合适的激励、一定的仿真步进和仿真周期,并添加合适的观察点和观察方式。 1. 加入仿真步进模块 首先加入一个Step模块,以模拟SinCtrl的按键使能操作。在Simulink库浏览器中,展开Simulink库,选中Sources库,把Sources库中的Step模块拖放到sinout模型窗口中(如图3-22)。

59 图3-22 Step模块

60 图3-23 Scope模型

61 2. 添加波形观察模块 在Simulink的库浏览器中,展开Simulink库,选中其中的Sinks库,把Scope(示波器)模块拖放到sinout模型窗口中(如图3-23)。双击该Scope模块,打开的是一个Scope(示波器)窗口,如图3-24。图中所示只有一个信号的波形观察窗口,而若希望可以多观察几路信号,自然可以通过调用多个Scope模块的方法来实现,这里仅介绍一种方法,通过修改Scope模块参数来在同一个Scope模块中增加观察窗。

62 图3-24 Scope初始显示

63 3. Scope参数设置 用鼠标点击Scope模块窗口上侧工具栏的第二个工具按钮“Parameters”,参数设置按钮,打开Scope参数设置对话框,见图3-24。 在Scope参数设置对话框中共有两个选项页:“Gerneral”(通用)和“Data history”(数据历史)。在“Gerneral”选项页中将“Number of axes”参数改为3,如图3-25所示。在点击“OK”按钮确认后,可以看到Scope窗口增加了两个波形观察窗。每个观察窗都可以分别观察信号波形,而且相对独立。

64 图3-25 设置Scope参数

65 4. 设置Mux模块 如果需要对某些信号进行对比观察,希望放置在同一个波形观察窗中,以便更好地观察信号之间的异同点,可以使用Mux模块(如图3-26所示)来辅助完成。 在Simulink库浏览器中,选中Simulink库,找到Simulink的Signal Routing库下的Mux模块,拖放到sinout模型窗口,按照图3-27来设置Mux模块,把“Number of inputs”(输入数目)参数设定为2。

66 图3-26 Mux模块

67 图3-27 设置Mux

68 5. 设置仿真激励 按图3-28连接sinout模型的全图,准备开始仿真。在仿真前还需要设置一下与仿真相关的参数。   先设置模型的仿真激励。在sinout模型图中只有一个输入端口SinCtrl,需要设置与此相连的Step模块。

69 图3-28 sinout全图

70 双击放置在sinout模型窗口中的Step模块,设置对输入端口SinCtrl施加的激励。在打开的Step模块参数设置对话框中,可以看到一些参数(详见图3-29),这些参数值的含义如下:
● Step time:步进间隔 ● Initial value:初始值 ● Final value:终值 ● Sample time:采样时间

71 图3-29 设置Step

72 在此设置“Step time”为500;“Initial value”为0,即初始时不输出正弦波;“Final value”为1;“Sample time”为1。把最后两项选择:“Interpret vector parameters as 1-D”和“Enable zero crossing dectection”都设为打勾。 在sinout模型窗口中,点击“Simulation”菜单,在下拉菜单中选择“Simulation parameters”菜单项,如图3-30所示。随后,将弹出sinout模型的仿真参数设置对话框“Simulation Parameters : sinout”。该对话框中共有5个选项页:

73 ● Solver ● Workspace I/O ● Diagnostics ● Advanced ● Real-Time Workshop 其中,“Solver”选项页中完成仿真时基本的时间设置、步进间隔和方式设置及输出选项设置。在sinout模型中,可设置“Start time”为0.0,“Stop time”为1000。其它设置取默认值。选项页的设置也取默认设置。然后,点击“OK”按钮确认。

74 图3-30 Simulink仿真设置

75 6. 启动仿真 在sinout模型窗口中选择“Simulation”菜单,再选“Start”项开始仿真,如图3-31所示。待仿真结束,双击Scope模块,打开Scope观察窗。图3-32显示了仿真结果,SinOut信号是sinout模型的输出(Scope观察窗中模拟了D/A的输出波形),SinCtrl信号是sinout模型的输入。可以看出SinOut受到了SinCtrl的控制。当SinCtrl为1时,SinOut波形是正弦波;当SinCtrl为0时,输出为0。SinTemp是sinout模型内部的连接信号,用来观察sinout模型内部的情况。

76 图3-31 Simulink仿真Start

77 图3-32 Scope波形

78 在Scope观察窗中,可以使用工具栏中的按钮来放大/缩小波形,也可以在波形上单击右键使用“Autoscale”,使波形自动适配波形观察窗。用鼠标左键可以放大波形。
把SinTemp信号波形放大一些可以看到两个波形,一个波形比另一个波形延时了一个周期。如图3-33所示。

79 图3-33 波形延时

80 SignalCompiler的使用 在Simulink中完成仿真验证后,就需要把设计转到硬件上加以实现。这是整个DSP Builder设计流程中最为关键的一步,在这一步,可以获得针对特定FPGA芯片的VHDL代码。详细步骤如下:

81 1. 分析当前的模型 双击sinout模型中的SignalCompiler模块,会出现如图3-34所示的对话框,点击“Analyze”(分析)按钮后,SignalCompiler就会对sinout模型进行分析,检查模型有无错误,并在Matlab主窗口弹出对话框给出相关信息。若有错误(Error)存在,SignalCompiler就会停止分析过程,并把错误信息显示在Matlab主窗口的“Command Window”命令窗口中;反之,在分析过程结束后,打开Signal Compiler窗口(见图3-35),如果有警告(Warning)存在,同错误一样把警告信息显示在命令窗口。

82 图3-34 双击SignalCompiler后的对话框

83 图3-35 Signal Compiler窗口

84 Simulink具有较为强大的错误定位能力,对许多错误可以在Simulink模型中直接定位,用不同的颜色提示有错误的Simulink模块(Block)。当Signal Compiler分析当前DSP模型有错误时,必须去除错误才能继续DSP Builder流程,即不会出现Signal Compiler窗口。

85 2. 设置Signal Compiler 图3-35所示的Signal Compiler窗口大致上可以分为三个功能部分: ● 左侧的项目设置选项“Project Setting Options”; ● 右侧的硬件编译流程“Hardware Compilation”; ● 下方的信息框“Messages”。 Signal Compiler的设置都集中在项目设置选项部分。在“Device”(器件)下拉选择框中选择需要的器件系列,默认为Stratix系列器件,对此可以修改。

86 比如,可选为ACEX1K系列器件。需要注意的是,在“Device”中只能选择器件系列,不能制定具体的器件型号,这需由Quartus II自动决定使用该器件系列中的某一个具体型号的器件。
在“Device”下拉选择框中,有一个“DSP Board”的选择,这是一个特殊的选项,是针对Altera具体的DSP开发板的,有关情况将在第4章中介绍。 “Synthesis”(综合)下拉选择框可以选择综合器,共有三个选择:

87 ● “LeonardoSpectrum”:Mentor的LeonardoSpectrum综合器;
● “Synpilfy”:Synpilicity的Synpilfy Pro或Synpilfy综合器; ● “Quartus II”:Altera的FPGA/CPLD开发集成环境,内含综合功能。 在这个例子中,可选择Quartus II。 “Optimization”(优化)下拉选择框指明在综合、适配过程中的优化条件,是对面积(Area)优化还是对速度(Speed)优化的选择,即资源占用优先还是性能优先。

88 项目设置选项(“Project Setting Options”)部分的下侧是一些选项页,其中;
● “Main Clock”中指定系统主时钟的周期; ● “Reset”是系统复位信号的设置; ● “SignalTap II”是嵌入式逻辑分析仪SignalTap的设置; ● “TestBench”是仿真测试文件生成的选择; ● “SOPC info”是SOPC相关设置。

89 在这里,不妨指定Main Clock的周期为20 ns,点击的右边箭头找到“TechBench”选项页(见图3-36),选择“Generate Stimuli for VHDL Testbench”生成含激励的仿真测试文件,用于VHDL仿真。

90 图3-36 Testbench选项页

91 3. 把模型文件MDL转换成VHDL 当设置好“Device”和“Synthesis”后,右侧的硬件编译“Hardware Compilation”部分就会列出一个操作流程,见图3-37。该流程为: (1) “Convert MDL to VHDL”:将.mdl文件转换为VHDL文件; (2) “Synthesis”:综合; (3) “Quartus II”:Quartus编译适配,生成编程文件。

92 图3-37中的第4步是隐去的,这一步实现在Simulink中,完成FPGA的硬件配置下载。这需要DSP开发板的支持,当“Device”选为“DSP Board”时,这一步才显示出来。
按上述流程,先点击步骤1的图标,完成Simulink文件(*.mdl)到VHDL文件的转换。转换完成后,在“Messages”信息提示框中会显示(见图3-37): “Generated top level'sinout.vhd'files”,即顶层文件sinout.vhd完成转换。若有错误,在“Messages”信息提示框中会显示简短的出错提示。

93 图3-37 出现MDL to VHDL信息

94 例3-1显示的就是由sinout模型生成的VHDL代码。
【例3-1】由sinout模型生成的sinout.vhd文件。 -- DSP Builder (Version 2.1.2) -- Quartus II development tool and MATLAB/Simulink Interface -- Copyright ? Altera Corporation. All rights reserved. -- The DSP Builder software, including, without limitation, -- the clock-cycle limited

95 -- versions of the MegaCore? Logic Functions included therein,
-- may only be used to -- develop designs for programmable logic devices manufactured -- by Altera Corporation -- and sold by Altera Corporation and its authorized distributors. -- IN NO EVENT MAY -- SUCH SOFTWARE AND FUNCTIONS BE USED TO PROGRAM ANY -- PROGRAMMABLE LOGIC DEVICES, FIELD

96 -- PROGRAMMABLE GATE ARRAYS, ASICS, STANDARD PRODUCTS, OR ANY
-- OTHER SEMICONDUCTOR -- DEVICE MANUFACTURED BY ANY COMPANY OR ENTITY OTHER THAN ALTERA. -- For the complete -- terms and conditions applicable to your use of the software -- and functions, please -- refer to the Altera Program License directory

97 -----------------------------------------------------------
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; library dspbuilder; use dspbuilder.dspbuilderblock.all; library lpm; use lpm.lpm_components.all; Entity sinout is

98 Port( clock : in std_logic; sclrp : in std_logic:='0'; iSinCtrls : in std_logic; oSinOuts : out std_logic_vector(9 downto 0)); end sinout; architecture aDspBuilder of sinout is

99 signal SASinOutO : std_logic_vector(9 downto 0);
signal sclr : std_logic:='0'; signal A0W : std_logic; signal A1W : std_logic_vector(10 downto 0); signal A2W : std_logic_vector(6 downto 0); signal A3W : std_logic_vector(11 downto 0); signal A4W : std_logic_vector(10 downto 0); signal A2W_5reg : std_logic_vector(6 downto 0);

100 Begin assert (1<0) report altversion severity Note; oSinOuts <= SASinOutO; sclr <= sclrp; -- Input - I/O assignment from Simulink Block "iSinCtrls" A0W <= iSinCtrls; A2W(6) <= '0'; -- Output - I/O assignment from Simulink Block "SinOut"

101 SinOuti : SBF generic map(
width_inl=>12, width_inr=>0, width_outl=>10, width_outr=>0, lpm_signed=>BusIsUnsigned, round=>0, satur=>0) port map (

102 xin=>A3W, yout=>SASinOutO); -- Delay Element - Simulink Block "Delay" Delayi : SDelay generic map ( LPM_WIDTH => 11, LPM_DELAY =>1, SequenceLength =>1, SequenceValue =>1) port map (dataa => A4W,

103 clock => clock, ena => '1', sclr => sclr, result => A1W); -- Incrementer-Decrementer - Simulink Block "IncCount" IncCounti : IncDec generic map ( LPM_WIDTH=> 6, cst_val=>"000000", lpm=>0,

104 unsigned=>1, SequenceLength=>1, SequenceValue=>1, direction=>0) port map ( clock =>clock, ena => '1', sclr => sclr, result => A2W(5 downto 0));

105 -- Product Operator - Simulink Block "Product"
Producti : AltiMult generic map ( LPM_WIDTHA => 11, LPM_WIDTHB => 1, PIPELINE => 0, one_input => 0, lpm => 0, lpm_hint => "UNUSED", cst_val => "0",

106 SequenceLength => 1, SequenceValue => 1, lpm_widthr => 12) port map ( DATAA => A1W, DATAB(0) => A0W, clock => '0', ena => '1',

107 sclr => '0', result => A3W); -- Look-up table - Simulink Block "SinLUT" A2W_5reg <= A2W; SinLUT : process(A2W_5reg) variable Addr : std_logic_vector(5 downto 0); Begin Addr(5 downto 0) : = A2W_5reg(5 downto 0);

108 case Addr is when "000000" => A4W <= " "; when "000001" => A4W <= " "; when "000010" => A4W <= " "; when "000011" => A4W <= " "; when "000100" => A4W <= " "; (这里已略去部分语句)

109 when "111100" => A4W <= " "; when "111101" => A4W <= " "; when "111110" => A4W <= " "; when "111111" => A4W <= " "; when others => A4W <= (others=>'0'); end case; end process; end architecture aDspBuilder;

110 另外,详细的报告文件也生成在Matlab当前工作目录下。sinout模型对应的报告文件为sinout_DspBuilder_Report
另外,详细的报告文件也生成在Matlab当前工作目录下。sinout模型对应的报告文件为sinout_DspBuilder_Report.html。在DSP Builder报告文件中,详尽地描述了模型相关的设置情况、编译结果、生成文件列表说明、注意点等等,而且对使用sinout模型中的模块(Block)分别进行了说明(见图3-38和图3-39)。

111 图3-38 DSP Builder报告文件

112 图3-39 报告文件中对已经使用的模块的说明

113 4. 综合(Synthesis) 点击步骤2的图标,完成综合过程。在这个例子中是调用Quartus II来完成综合过程的,在综合后生成ATOM Netlist(原子网表),供适配器使用。综合后的信息提示如图3-40所示。 综合器也可以使用Synplify,详细过程请参见第4章。

114 图3-40 综合后的信息提示

115 5. Quartus II编译 点击步骤3的图标,调用Quartus II完成编译适配过程,生成编程文件:pof文件和sof文件(见图3-41)。 编程文件可以直接用于FPGA的编程配置。不过,按现在这个流程,采用的是自动(Auto)器件,管脚pin是自动指定的。 在这个例子中是按照DSP Builder的自动流程操作的。手动流程较为繁复,这将在第4章中详细叙述。

116 图3-41 pof和sof文件的生成

117 3.2.4 使用ModelSim验证生成的VHDL代码
我们在Simulink中进行的仿真是属于系统验证性质的,是对mdl文件进行的仿真,并没有对生成的VHDL代码进行过仿真。事实上,生成VHDL描述的是RTL级的,是针对具体的硬件结构的,而在Matlab的Simulink中的模型仿真是算法级(系统级)的,是针对算法实现的。这两者之间有可能存在软件理解上的差异,转换后的VHDL代码实现可能与mdl模型描述的情况不完全相符,这就需要针对生成的RTL级VHDL代码进行功能仿真。

118 当在SignalCompiler窗口选项页中设定后,DSP Builder在“MDL to VHDL”过程中会自动生成针对HDL仿真器ModelSim的测试文件。因此,在这里,需要使用ModelSim对生成的VHDL代码进行功能仿真。 ModelSim是一个基于单内核的Verilog/VHDL混合仿真器,是Mentor Graphics的子公司Model Technology的产品。 首先打开ModelSim环境。图3-42是ModelSim的主窗口。

119 图3-42 ModelSim主窗口

120 选择主窗口上的菜单“Tools”→“Execute Macro. ”,在打开的文件选择对话框中,切换到sinout模型sinout
选择主窗口上的菜单“Tools”→“Execute Macro...”,在打开的文件选择对话框中,切换到sinout模型sinout.mdl所在的目录,接着选择tb_sinout.tcl来执行。 其中,tb_sinout.tcl是DSP Builder的SignalCompiler产生,若不存在,可再重复一次3.2.3小节的流程。如果一切配置正常,ModelSim就开始执行tcl脚本:tb_sinout.tcl,开启仿真,随后就打开“wave”窗口,显示仿真结果(如图3-43所示)。

121 图3-43 ModelSim仿真结果

122 不过图中显示的仿真波形与Simulink中的仿真结果没有可比性。点击“wave”窗口工具栏上的图标,使之显示全部波形。
在此可以把“wave”窗口中的“/tb_sinout/osinout”信号改成类似模拟信号的显示格式。先用鼠标选中“/tb_sinout/osinout”信号,在“wave”窗口的“View”菜单中选择“Signal Properties”,打开“Wave Signal Properties”对话框(见图3-44)。 在“View”选项页中,修改“Radix”为“Unsigned”(无符号数)。

123 图3-44 ModelSim的信号设置

124 在“Format”选项页中(见图3-45)修改下列几项:
● “Format”改为Analog; ● “Height”改为60; ● “Analog Display”中的“Scale”改为0.05。

125 图3-45 设为Analog

126 点击“OK”确定后出现如图3-46所示仿真波形。可以看到这与Simulink里的仿真结果基本一致。
注意:用于ModelSim仿真的TestBench文件中的输入信号激励由SignalCompiler根据Simulink的仿真结果产生。因此,若需要产生正确的仿真激励,必须先要在Simulink中进行设置和仿真运行。

127 图3-46 仿真波形

128 3.2.5 在Quartus II中指定器件管脚、进行编译、下载
上文中,在SignalCompiler中的Quartus II编译,其具体器件由Quartus自动决定,然而实际使用中所用的器件往往不是Quartus II自动选定的那个型号,管脚也不是Quartus II自动分配的管脚。这些都需要在Quartus II中进行修改。 打开Quartus II环境,选择菜单“File”→“Open Project ...”,定位到sinout模型所在的目录,打开DSP Builder建立的Quartus II项目文件:sinout.quartus(见图3-47)。

129 图3-47 在Quartus II中打开sinout quartus

130 然后按照第2章中叙述的方法选择器件型号。选择菜单“Assignments”→“Device
然后按照第2章中叙述的方法选择器件型号。选择菜单“Assignments”→“Device ...”,在相应的对话框中选择合适的器件,如EP1K100QC208-3(或者EP20KE系列的器件)。再按照第2章中叙述的方法锁定管脚(Pin),选择菜单“Assignments”→“Assign Pins ...”,对应FPGA开发板上的硬件连接,锁定Pin。 接着进行编译,完成适配过程。选择菜单“Processing”→“Start Compilation ...”,等待Quartus II编译完成。

131 硬件测试 下载完毕后,就可以对硬件进行测试。加上clcok信号,用示波器检测D/A的输出。把键控SinCtrl设置为有效,就可以在示波器上看到产生的正弦波了。然后将实测结果与在计算机上进行的时序仿真结果进行比较。

132 3.3 调幅电路模型设计示例 3.3.1 建立调幅电路模型 首先根据图3-48建立调幅电路模型。步骤如下:
3.3 调幅电路模型设计示例 建立调幅电路模型 首先根据图3-48建立调幅电路模型。步骤如下:   在编辑器中加SignalCompiler模块 (1) 在Simulink库中选择AltLab; (2) 用鼠标将SignalCompiler模块拖入设计窗; (3) 双击SignalCompiler模块,出现如图3-49所示的窗口,点击“Analyze”;

133 图3-48 调幅电路模型

134 图3-49 选择“Analyze”

135 (4) 对于出现的窗口(见图3-50),确认所有设置按默认的选择,并点击“OK”,然后在File菜单中选择“Save”,将Matlab的设计模型文件存在自己的工程目录中。

136 图3-50 选择原默认选项

137 2. 加入正弦波模块 (1) 在Simulink Library Browser中点击“Sources”库,并将Sine Wave模块用鼠标拖入设计模型窗。 (2) 双击窗中的Sine Wave模块,在弹出的对话框中按图3-51所列的内容设置正弦波模块的参数。然后点击“OK”关闭此框(参数的设置规则可参阅第11章)。

138 图 kHz,16位Sine Wave参数设置

139 3. 加入Sinln模块 (1) 点击“Simulink Library Browser”中“Altera DSP Builder”目录旁的“+”号,展开其子项目(如图3-5所示),选择“Bus Manipulation”库选项,先将AltBus模块拖入设计窗,点击AltBus模块名称,并修改其名称为“SinIn”。 (2) 双击Sinln模块,于是此模块的参数设置对话框就显示出来了。可按如图3-52所示设置参数,即设计Sinln为16位有符号整数输入,然后点击“OK”,关闭此窗口。 (3) 用连线将Sine Wave模块和Sinln模块如图3-48那样连接起来。

140 图3-52 Sinln模块参数设置

141 4. 加入Delay模块 这一步的方法如前所述,只是参数需按图3-53所示的方式设置。设置完成后,也按图3-48的方式将Delay模块与Sinln模块连好。 5. 加入SinDelay模块 (1) 仍选“Bus Manipulation”库; (2) 将AltBus模块放在设计模型窗中,并把它放在Delay模块的右边; (3) 将AltBus的名字改为SinDelay;

142 图3-53 Delay模块参数设置

143 (4) 双击SinDelay模块,从“Node Type”列中选择“Output Port”并点击“Apply”;
(5) 如图3-54所示,从[number of bits].[ ]栏选“16”,即设置为16位有符号输出总线,点击“OK”,关闭此框,最后根据图3-48连好有关的连线。

144 图3-54 SinDelay模块参数设置

145 6. 加入Mux模块 可根据上节的方法进行设置。Mux模块的参数框如图3-27所示。 7. 加入Random Number模块 (1) 在“Simulink Library Browser”中选“Sources”库,将其中的“Random Number”模块拖入设计模型窗,并把它放在Sine Wave模块下; (2) 双击“Random Number”模块,并按图3-55设置参数。

146 图3-55 随机数发生器参数设置

147 8. 加入Noise模块 (1) 选择Bus Manipulation库,将AltBus模块放进设计模型窗,并将其更改为“Noise”。 (2) 双击Noise模块,从弹出的对话框中的“Bus Type”栏中选择“Single Bit”。 (3) 关闭“Bypass Bus Format”选项,点击“Apply”,确认如图3-56所示的设置,点击“OK”后关闭对话框。最后按图3-48作好此模块的连接。

148 图3-56 Noise模块中设定1位输入口

149 9. 加入Bus Build模块 Bus Build模块的功能是把1位数据转换成有符号格式。加入此模块的步骤如下: (1) 选择“Altera DSP Builder”栏下的“Bus Manipulation”,将其中的BusBuild模块拖到设计模型中,放在Noise 模块下; (2) 双击BusBuild模块,并按如图3-57所示对话框设置参数。

150 图3-57 设置2位有符号总线

151 10. 加GND模块 GND模块也可以在“Bus Manipulation”库中找到。 11. 加入Product模块 加入方法如上节所述,其参数设置按如图3-19所示对话框进行。 12. 加入StreamMod模块 加入Stream Mod模块的步骤如下: (1) 如前所述,先加入AltBus模块,再将其名字改为“StreamMod”。 (2) 双击“StreamMod”模块。 (3) 按图3-58所示的对话框设置参数。

152 图3-58 StreamMod模块参数设置

153 (4) 点击“OK”,关闭对话框后进行连线。最后加入示波器“Scope”模块。Scope的参数设置如图3-59所示。然后按照图3-48将所有模块用连线连接好。

154 图3-59 Scope模块参数设置

155 模型仿真和实现 在Simulation菜单中选“Simulation Parameters”,在“Step Time”栏键入: ,即开始仿真。观察Scope模块仿真结果,波形如图3-60所示。这是顶层设计的系统级仿真。   将调幅电路的Simulink设计模型转化为VHDL文件,然后还能利用Modelsim完成RTL级仿真(详细方法可参考第4章),仿真结果如图3-61所示。 图3-62的RTL电路图是综合器LeonrdoSpectrem对VHDL文件的综合结果。

156 图3-60 调幅电路仿真结果

157 图3-61 Modelsim对幅度调制器的RTL仿真波形

158 图3-62 Leonrdo Spectrem综合的RTL图

159 图3-63是Quartus II将设计适配在APEX20KE器件中的Floorplan图,其中共使用了32个LCs。这样就完成了幅度调制器从算法(系统)级一直到硬件实现的全部设计。
  完成设计后,还可以利用Quartus II对DSP Builder设计的电路系统建立一个元件模块,以便用于更大的系统设计的调用。在Quartus II编译后将产生一个名为atom_netlists的子目录,其中含有此项设计的VQM文件。

160 图3-63 Quartus II的Floorplan图

161 可以利用Quartus II产生此文件对应的元件,具体步骤如下:
(1) 打开在Quartus II的DSP Builder中设计的工程文件,如singen.quartus。 (2) 在File菜单中选择“Open”,在工作目录中进入atom_netlists子目录,打开文件: <设计文件名>.vqm (3) 在File菜单中选择Create / Update ? Create Symbol Files for Current File,于是这个文件就变成了一个元件,并加入到当前工程中。

162 3.3.3 在MATLAB/Simulink中使用MegaCore核
对于复杂的DSP系统设计, 通常将MegaCore模块加入到当前设计模型中, 此MegaCore的安装可以单独进行。这里介绍在设计模型中如何使用MegaCore功能块,并对其进行仿真测试。如图1-11所示的设计流程中使用了IP核。 在设计模型中调入IP核的步骤如下:

163 (1) 首先从Altera网站www.altera.com/IPmegastore中下载MegaCore,并安装好。
注意:安装MegaCore时要确保MATLAB/Simulink软件没有在运行。 (2) 启动MATLAB / Simulink。 (3) 建立或打开一个设计模型。 (4) 打开MATLAB Launch Pad窗中的Simulink项。 (5) 双击“Library Browser”。这时,“Simulink Library Browser”中将显示出已安装好的DSP Builder和MegaCore核(或该核的编译器)。

164 (6) 将SignalCompiler模块放到当前设计模型的 .mdl设计文件编译窗内。
(7) 点击“OK”,关闭库窗口并存盘设计模型文件。 (8) 点击MegaCore模块旁的名字,以便DSP Builder可以认识此模块(见图3-64)。 (9) 将此模块拖入当前设计模型中。 (10) 双击此模块,将弹出MegaCoreWizard对话框,按要求设定所有参数。 (11) 点击“Finish”,回到设计模型并存盘。

165 图3-64 安装MegaCore

166 图3-65是一个使用了NCO Compiler MegaCore和FIR核模块的设计模型。有四种方法可以对使用了MegaCore模块的设计模型进行仿真:
1. 使用Quartus II软件 首先使用SignalCompiler将模块转换成VHDL文件。使用Quartus II对其设计结果进行仿真,当仿真通过并满足设计要求时再购买使用OpenCore特性的License。这种方法适合于任何Altera的MegaCore模块。

167 图3-65 使用了NCO Compiler MegaCore
和FIR核模块的设计示例

168 有四种方法可以对使用了MegaCore模块的设计模型进行仿真:
1. 使用Quartus II软件 首先使用SignalCompiler将模块转换成VHDL文件。使用Quartus II对其设计结果进行仿真,当仿真通过并满足设计要求时再购买使用OpenCore特性的License。这种方法适合于任何Altera的MegaCore模块。

169 2. 使用ModelSim软件 由于有的MegaCore模块中含有预编译的VHDL模块,对此可以选择使用ModelSim来仿真。即将预编译的IP核模型与SignalCompiler产生的VHDL文件及Tcl脚本结合起来,在ModelSim中进行仿真。仿真通过后再购买License。

170 3. 购买License后用ModelSim仿真
首先购买License, 再利用ModelSim仿真。在这种选择中, 先购买MegaCore的License,这样可产生用于ModelSim时序仿真的VHDL输出文件(.vho)。在这种仿真选择中,必须修改SignalCompiler产生的Tcl文件,以便能使用.vho仿真文件。这可以参阅第4章及Quartus II的Help中有关使用.vho文件仿真的各项命令。 4. 使用其它VHDL仿真器 有些MegaCore核包含有可视IP模型(即图型化模型),也可以用其进行仿真。

171 3.4 使用SignalTap II嵌入式逻辑分析仪
随着逻辑设计复杂性的不断增加,在计算机上以软件方式的仿真测试变得更加耗费时间,而不断需要重复进行的硬件系统的测试同样变得更为困难。为了解决这些问题,设计者可以将一种高效的硬件测试手段和传统的系统测试方法相结合来完成。这就是嵌入式逻辑分析仪的使用。它可以随设计文件一并下载于目标芯片中,用以捕捉设计者感兴趣的目标芯片内部信号节点处的信号,而又不影响原硬件系统的正常工作。

172 DSP Builder 2.0及以上版本的设计工具都支持这种分析仪的应用。DSP Builder中包含有SignalTap II逻辑分析模块,设计者可以使用此模块设置用于信号探察的事件触发器,配置存储器,并能显示波形。这可以使用Node模块来选择有待监测的信号。使用SignalTap II后,当触发器运行时,通常要占用部分内部RAM,因为在实际监测中将测得的样本信号暂存于目标器件中的嵌入式RAM(如ESB)中。然后通过器件的JTAG端口和ByteBlasterMV下载线将采得的信息传出,送于PC机进行分析。PC机中送达的数据是以文本文件的方式存储的,并可在MATLAB图上显示波形。

173 DSP Builder和SignalTap II分析模块将在设计系统中产生一个SignalTap II嵌入式逻辑分析仪,这个分析仪的特点如下:
(1) 具有简单易用的接口; (2) 在顶层设计文件中分析信号; (3) 使用单一时钟源; (4) 捕捉触发点前、后的信息,其中前触发捕捉数据占88%,后触发捕捉数据占12%。

174 设计者也可直接使用Quartu II向设计系统中插入这种嵌入式逻辑分析仪。这时的分析仪允许有更多的实用功能,如可以对设计中的所有层次的模块的信号节点进行测试,可以使用多时钟驱动,而且还能通过设置以确定前、后触发捕捉信息的比例。 本节将详细叙述SignalTap II嵌入式逻辑分析仪的安装和使用方法。在示例流程中,将对一开关控制器设计模型中的6个内部信号节点进行分析。设此模型的文件名为:Switch_ control.mdl。此例的设计分析流程适用于任何其它的基于DSP Builder的 DSP系统开发测试,以及DSP开发板。

175 安装SignalTap II 由于嵌入式逻辑分析仪在实用中必须随同编程配置文件一起下载到DSP评估板或开发板上的FPGA中,所以SignalTap II的应用流程必须涉及硬件目标系统的使用。 在本项流程的设计中,设DSP开发板上的发光管的开与关取决于板上用户控制的开关键和本项设计“开关控制器”中的递增器输出值。此开关控制器是由一个递增器(其输出值作为一个比较器的输入值),以及4个开关(此4个开关与两个与门相连)组成;比较器与与门的输出进入一个或门,这个或门的输出则与DSP开发板上的发光管相连(见图3-66)。详细情况也可参考附录中关于现代DSP实验系统有关接口的内容。

176 嵌入式逻辑分析仪的任务就是捕捉电路内的两个与门与递增器(incrementer)的输出信号(注意,实测时与门与递增器已随整个设计文件和逻辑分析仪一同被下载到了DSP开发板上)。当逻辑分析仪采样到信号后,就将信号通过原来的下载通信线上传到计算机,并在MATLAB环境中显示出来。SignalTap II的使用步骤如下: (1) 按照图3-66完成Simulink模型设计。

177 图3-66 开关控制器设计模型

178 (2) 在“Simulink Library Browser”找到Altlab,将Node模块拖入模型文件中,如图3-67所示,将Node模块放在一与门与或门之间,以便能测到与门的输出信号。模块放置好后,Simulink将自动连接好模块。 注意: 将SignalTap II分析模块加入到Simulink设计系统中,必须在按下“Convert MDL to VHDL”后才能插进SignalTap II分析模块。 (3) 将此模块的“SignalTap II”名改为“firstandout”。

179 (4) 用同样的方法放置好另两个Node模块,如图3-67所示那样分别取名为:“secondandout”和“cntout”。
(5) 双击“cntout”模块,在弹出的对话框(如图3-68)中设定需要进行分析的信号。在此设置递增器输出的3个位:MSB7~LSB5,即待分析位是D7、D6、D5,共3个位。 (6) 点击“OK”,保存设置。 (7) 在File菜单中选“Save”,保存全部设置。

180 图3-67 加入逻辑分析仪模块

181 图3-68 设定需要进行分析的信号

182 图3-67是加入了逻辑分析仪的完整的设计模型。以下是启动SignalCompiler中的SignalTap II的步骤。
当把Node模块加入设计模型中后,此模块就与逻辑分析仪的输入端相接了,而逻辑分析仪的加入也将改变模型的电路结构。因此必须将它们一起进行综合与编译适配。具体步骤如下: (1) 双击设计模型中的SignalCompiler模块,然后单击弹出的对话框中的“SignalTap II”页(如图3-69所示)。

183 (2) 选择“Insert SignalTap Logic Analyzer”,SignalCompiler就将SignalTap II模块插入到当前设计模型中。
(3) 选择此逻辑分析仪的采样缓冲器的深度(即能存放输入信号数据的数目)为128字,然后点击“OK”,关闭对话框。 (4) 编译和下载。点击“Hardware Compilation”,DSP Builder将对设计模型进行一系列编译处理,包括VHDL转化和VHDL综合、适配,并将编译结果下载到DSP板的目标芯片中。

184 图3-69 将逻辑分析仪与模型一起进行综合与编译

185 设置触发条件 在Switch_control.mdl设计模型中,设置“firstandout”测试模块的触发条件为下降沿“Falling Edge”触发;“secondandout”为高电平“High”触发。具体触发条件设置如下: (1) 双击“SignalTap II Analyzer”模块,SignalTap II分析仪将显示出所有与相关的Node模块连接的有待分析的信号节点(如图3-70所示)。 (2) 为“firstandout”节点设置触发条件:

186 ● 点击“Signal Name”下的“firstandout”;
● 在“Trigger Condition”栏选择“Falling edge”; ● 点击“Change”,触发条件即被更新。 (3) 以同样方法设定高电平“High”触发。 当嵌入式逻辑分析仪同时监测到输入信号所有满足触发条件的高电平后,将捕捉对应通道的数据。例如,由于已在顶层设计中设定了“firstandout”是下降沿触发,而“secondandout”是高电平触发,因而在DSP硬件系统中的嵌入式逻辑分析仪只有在测到“firstandout”有下降沿的同时又测到“secondandout”为高电平时,才被触发启动。

187 图3-70 SignalTap Analyzer模块显示出的
有待分析的信号节点

188 设置总线的数据格式 接下去是在顶层设计模型中设置总线“cntout”的数据格式,即有符号十进制数“Signed Decimal”。具体步骤如下: (1) 用鼠标右键点击“Signal Name”下的“cntout”,弹出一菜单(如图3-71所示); (2) 选择“Signal Decimal”,这时在DSP板上的逻辑分析仪立即对总线格式进行更新。

189 图3-71 设置“cntout”的数据格式为“Signed Decimal”

190 启动SignalTap II分析操作 现在已作好了启动逻辑分析仪及在MATLAB图上显示测得的结果的一切准备工作。点击“Start Analysis”键,这个嵌入式的逻辑分析仪就开始等待触发条件的发生了。 具体操作步骤如下: (1) 点击“Start Analysis”键。 (2) 用手按动DSP开发板上的键“0”,发出触发条件,使之启动逻辑分析仪。

191 (3) 按动DSP板上的键“0”后,点击SignalTap II Analysis模块,于是在两张MATLAB图上就会显示出以二进制方式捕捉到的数据图形:图3-72和图3-73。其中,图3-72是以二进制数方式显示的分析图;图3-73是以用户设定的数据格式显示的分析图。

192 图3-72 以二进制数方式显示的分析图

193 图3-73 以用户设定的数据格式显示的分析图

194 信号节点的资源利用情况 由定义可知,一个节点(信号节点)表示一条在不同逻辑文件间携带信号的传输线。SignalTap II嵌入式逻辑分析仪能够捕捉来自顶层设计文件中任何内部器件节点的信号,包括I/O端口线上的信号。 此逻辑分析仪可以分析多达128路节点或I/O单元上的信号,但应注意需要捕捉的信号通道越多,则逻辑分析仪在器件内用的逻辑宏单元和ESB单元就越多。 表3-1列出了对于一给定采样深度和信号通道数的逻辑分析仪占用的ESB数。

195 表3-1 采样深度、信号通道数与对应的ESB数
128 256 512 1024 2048 1 2 4 8 16 32 64 125

196 一般触发条件 触发方式主要是以逻辑电平方式或过程方式进行触发的。触发的实现是通过逻辑分析仪中的比较触发器在输入待测信号与触发方式设置电平相等时作出识别。 因此,触发方式是由针对每一待测输入信号的逻辑条件构成的。所有触发条件都被默认为“Don't Care”,即触发无反应。在实用中要求对每一输入信号选择一种触发逻辑条件,其中包括:

197 ● Don't Care 无反应 ● Low 低电平触发 ● High 高电平触发 ● Rising Edge 上升沿触发 ● Falling Edge 下降沿触发 ● Either Edge 双边沿触发

198 Node模块 设计者可以利用Node模块和SignalTap II逻辑分析仪捕捉在实时运行中的目标芯片内的信号。 当把一个Node模块加入进设计中时,可以通过触发信号的最高位和最低位规定待测节点的范围。如上例所示,若希望对一8位总线中的最高3位进行分析测试,就必须指定第7位为MSB,第5位为LSB。


Download ppt "第3章 DSP Builder设计入门 3.1 DSP Builder及其设计流程 3.2 DSP Builder设计向导"

Similar presentations


Ads by Google