DSPBuilder笔记

一、位宽设置

DSPBuilder中,数据在内部采用二进制定点数表示方法,数据可以设置成无符号整数、有符号整数和有符号小数等,其中有符号数由符号位、整数位和小数位组成(有符号整数的小数位为0),位宽根据需求可任意调整,但确定位宽在数据离散化的过程中非常重要,不合理的位宽设置会引起错误。对于无符号整数,如果数据大于位宽所表示的最大值,则高位被截断;对于有符号整数,高位被截断之后,剩余部分的最高位会决定数据的正负(1为负数,0为正数);对于小数部分,小数位宽越大,数据越精确,反之误差越大。数据被截断或误差太大会造成计算结果错误,导致偏离正常值,但过多的模块位宽设置过大也会消耗FPGA的硬件资源,造成浪费,甚至超过FPGA的硬件资源数量,造成无法编译。

对于位宽设置,加(减)法模块、乘法模块可以遵循如下准则,其他模块可参考以下方法。

为了后面叙述方便将定点数统一表述成如下形式:

                                    (3-1)

其中为符号位,代表有符号数,代表无符号数;代表整数位宽,代表小数位宽[16]

对于一个两输入的基本数学运算模块,设其源操作数(输入)为保证计算结果不会溢出,目标操作数(输出)位宽应分别与其源操作数位宽满足如下关系[16]

        (3-2)

                (3-3)

                    (3-4)

其中|代表或运算,max代表取最大值运算。减法运算和乘法运算只能有两个源操作数,而加法模块可有多个源操作数。加法模块每增加一个源操作数,其整数位宽需加一才能保证运算结果不会溢出。利用DSPBuilder实现一个复杂运算的过程中,需要首先确定其自变量的取值范围,然后根据其取值范围为其设计合理的定点数整数位宽和小数位宽[17]

以上准则适用于在系统设计初期位宽的估算,针对具体的数据输入,可以用Simulink中的示波器观察每个模块的输入输出数据的大小,根据具体情况设置合理的位宽。

 

二、查找表

查找表的基本思想是将函数值预先存入一个具有连续地址空间的存储区域,运算过程中,将函数的自变量映射成该存储区域的地址,通过读存储区域中该地址的数据实现函数的运算。因FPGA 中存储地址空间是一维的,因此只能实现含有一个变量的函数运算。

由上可知,查找表的真正输入应该是地址,即0~2^n-1,使用时需预先把自变量换算(映射)成地址。

查找表的使用方法举例:将的取值范围-50~40变换为查找表的地址范围0~1023,(+50)×(1023/90),同时将乘法器的输出限定为整数,即可得到查找表的地址值。

 

三、流水线数据通路

利用DSPBuilder求解常微分方程需要用到流水线数据通路的概念,所谓流水线数据通路,顾名思义,就是数据的计算以流水线的方式进行,同一时间的工作值可以有多个,采用流水线的结构可以增加系统的吞吐量

在流水线的结构设计中,一个完整的组合逻辑被分成的独立块的数量称为其流水线深度(depthofpipeline)[18,19]组合逻辑的流水线深度就是其延时时间,以时钟周期为单位。流水线深度的确定需要综合考虑吞吐量和时钟频率,本文中加(减)法模块、乘法模块和查找表模块若无特殊说明,其流水线深度分别为1,2和0,这个设定不是一成不变的,也可以根据具体需求更改,如在某些情况下将某个模块的延时设为0

在FPGA硬件模型中,任何复杂的多项式运算都是由多个基本数学运算模块组成的流水线数据通路(pipelineddatapath)实现的。设计数据通路的过程中既要保持前项运算的输出位宽与后项运算的输入位宽一致,还要保证同一运算模块的所有输入同步(即同一个模块之间的所有输入应具有相同的延时时间)。

基于流水线数据通路的方法求解常微分方程的理论依据是用欧拉法,即离散化常微分方程后采用迭代运算求解,具体离散化方法以及流水线的连接参见第四章。

 

摘自维基百科

欧拉方法,是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解。

问:怎么在DSP Builder中给常微分方程赋初值?(阶跃模块?)

注意:要同时考虑流水线上各处的初值

非形式化的几何诠释

欧拉方法的图示。待求的曲线为蓝色,它的折线近似为红色。

考虑计算下面一个未知曲线的形状:它具有给定的起点并且满足一个给定的微分方程。这里,所谓"微分方程"可以看作能够通过曲线上任意点的位置而计算出这一点的切线斜率的公式。

思路是,一开始只知道曲线的起点(假设为),曲线其他部份是未知的,不过通过微分方程,的斜率可以被计算出来,也就得到了切线。

顺着切线向前走一小步到点。如果我们假设是曲线上的一点(实际上通常不是),那么同样的道理就可以确定下一条切线,依此类推。在经过几步之后,一条折线就被计算出来了。大部分的情况下,这条折线与原先的未知曲线偏离不远,并且任意小的误差都可以通过减少步长来得到(虽然对于刚性方程而言会比较复杂。下文将提到)。

欧拉方法的推导

以以下微分方程为例

希望用y在点(t0,y(t0))附近的线性近似来得到其近似解(也就是y泰勒展开式的前二项)。利用时间tn时的数值,若用单步的欧拉方法,可得到时间tn+1=tn+h时的近似值如下:

欧拉方法是一种显型方法,也就是说的解是,的显函数。

欧拉方法可以求解一阶的微分方程,一个阶的微分方程可以用导入个变量来表示,,...,的方式,分解为个一阶的微分方程。因此可以用欧拉方法求解以下的向量来得到高阶微分方程的解。

应用例题

设微分方程为初始值为,试用欧拉方法求的近似值,步长为.

欧拉法则表达式:

首先求.此微分方程仅有一个变量,因此无须考虑给赋值.

以上解得切线的斜率为1,切点在解曲线上。回顾斜率的定义:在单位时间内,变量和变量的比值,可以计作为.

重复以上步骤求出的值.

由于欧拉法则属于递归算法,为了避免出现计算错误,建议使用Excel或者类似的制表程序

1

0

1

1

1

2

2

1

2

1

2

4

4

2

4

1

4

8

 

流水线中某时刻存在于各个寄存器中的值的关系

假设流水线深度是x

那么如果初值相同(用阶跃模块强制将初值设置成相同的值),则x个寄存器中的初值相同,相同的初值经过演化计算得出的是相同的结果,所以会在波形中出现以x为周期的平台,即x个延迟时间当中,值是不变的,然后才从v(n)变成V(n+1)

 

 

如果初值不同(不使用阶跃模块),原因是在初始时在流水线的不同的深度处的初值进行的运算不同(中间的初值只运算了后一半),所以产生的输出不同,从而造成了有规律的变化的周期,如图所示。

猜测:如果模型是初值敏感的,会造成波形的严重失真,因为不同初值产生的轨迹是截然不同的,造成一个周期x内波形不在相近的地方。

 

流水线设计是高速电路设计中的一个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理是"单流向"的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工作频率。

 

流水线处理的应用

在很多领域的高速电子系统中都运用了流水线处理的方法,如高速通信系统、高速采集系统、高速导航系统、高速搜索系统等等。流水线处理方式之所以能够很大程度上提高数据流的处理速度,是因为复制了处理模块,它是面积换取速度思想的又一种具体体现。

 

这样输出的数据是每一个时钟周期来一个,和输入的数据是同步的。所谓流水作业,在实际硬件电路中就是把一个大的组合逻辑分成各个小的组合逻辑,每一个输入的信号都必须顺次通过各个阶段的操作,而各个阶段的操作又是同步进行的,这就像工厂的生产流水线一样,会有源源不断的数据信号从输出端送出。另外,从这个实验中也可以更深刻的体会到Verilog的并行性。

 

来自 DSP Builder 帮助文件

位宽显性设置:Explicit means that the port bit width information is a block parameter.

位宽隐性设置:Implicit means that the port bit width information is set by the data path bit width propagation mechanism.

BusConversion的用途:If you want to specify the bus format of an implicit input port, use a BusConversion block to set the width.

 

LPM选项:

If you turn on this option, SignalCompiler implements the look-up table using the lpm_rom library of parameterized modules (LPM) function. If you turn off this option, the look-up table is implemented using Case conditions.

打开:将LUT数据放在由嵌入式RAM构成的ROM中,可节省大量的逻辑资源;关闭:只能由芯片中的LCs构成

Altera recommends that you turn on the Use LPM option for large look-up tables, for example, greater than 8 bits.对于大的查找表建议打开,比如8位以上的

Register Address选项,表示将输入地址存放在寄存器中,而不是仅仅是一根线上的信号

When register address is turned on, the input address bus is generated. If you are targeting Stratix II, Stratix II GX, Stratix, Stratix GX, or Cyclone™ devices and using the Use LPM option, you must turn on the register address option.如果使用LPM选项,必须打开这个选项

Register Data 选项,类比上面

Turn on this option if you would like to register the output result.保存结果到寄存器

Clock Phase Selection用来控制采样,1表示每个主频脉冲后数据都能通过;01表示一个不通过一个通过,循环如此;0011表示先不通过两个再通过两个,循环如此;0100表示第二个可以通过,1、3、4不能通过,循环如此。

BusType参数为Inferred表示自动判断

Pipeline参数指定该模块使用几级流水线,即结果在几个时钟周期后出现

Use Dedicated Circuitry使用专用电路,表示FPGA中的专用模块,比如内嵌专用DSP

 

AltBus模块(IO & Bus分类中)——浮点总线到定点总线的映射

Saturate(饱和)选项表示如果结果大于最大位数,自动变为最大正值或负值(饱和特性),若关闭则MSB(高位)被截去。Node Type被设置为输入或常数类型时没有该选项。

Round(四舍五入)选项打开,输出略去所有高位的0,关闭,最低位LSB被截去??

Bypass Bus Format打开表示在Simulink中使用浮点数进行仿真(硬件中不能)

Input & Output Port模式:外界输入或输出到外界;

Internel Node模式:内部节点,内部转换位宽

Black Box Input Output模式:用于与非DSP Builder模块(用HDL语言独立编写的模块,不想让SignalCompiler再转换成HDL)连接。适用于分层次开发(多人协同或分阶段开发)

 

Product模块

The Product block supports two scalar inputs (no multidimensional Simulink signals两个标量输入,没有多维信号). Operand a is multiplied by operand b and the result output on r as the following equation shows:

r = a × b

Product和Multiplier的区别

The differences between the Product block and the Multiplier block are:

The Product block supports clock phase selection while the Multiplier block does not.

The Product block uses implicit input port data widths that are inherited from the signals' sources, whereas the Multiplier block uses explicit input port data widths that you must specify as parameters.

The Product block allows you to use the LPM multiplier megafunction, whereas the Multiplier block always uses the LPM.

 

从Simulink到SignalCompiler,再到QuartusII,实现一次之后,如果想改动Simulink中的.mdl文件,应该注意两点:

一是内部电路结构和设置可以改变,但端口信号名最好不要改,如输入、输出,因为此信号的引脚已被锁定,不便改变

二是改动.mdl后只宜做系统仿真(Simulink中的仿真)和VHDL文件转换,不宜做综合,即最多只执行Advanced选项卡的第一个按钮,否则可能把原来设定好的引脚全部冲掉,为了保存引脚信息,综合和适配到QuartusII中进行。

 

DSP Builder将Matlab模型subint.mdl转变成多个VHDL目标文件,其中包括subint.vhd(顶层的VHDL文件),还有subint_GN.vhd,且对所有xx.mdl编译后都产生xx_gn.vhd,同时还把每个单独的模块生成VHDL文件。

 

Pipelined Adder带进位输入和进位输出,加或减

The Pipelined Adder block is a pipelined adder and subtractor that performs the following calculation:

r = a + b + cin (when addsub = 1加)

r = a - b + cin -1 (when addsub = 0减,cin相当于上一级的借位+1)

Use the optional ovl port an overflow with signed arithmetic or as a carry out with unsigned arithmetic. For unsigned subtraction, the output is 1 when no overflow occurs.

ovl端口,带符号数输出溢出信号,不带符号数输出进位信号。

对于不带符号减法,当没有溢出(借位,下溢)发生时,输出1。有溢出时输出0。

 

The Parallel Adder Subtractor可以使用任何类型的输入数据,如果宽度不统一,自动扩展为最大宽度。生成的VHDL有优化的、平衡的加法树

The Parallel Adder Subtractor block takes any input data type. If the input widths are not the same, Signal Compiler sign extends the buses so that they match the largest input width. The generated VHDL has an optimized, balanced adder tree.

Add (+) Sub (–)参数

Specify addition or subtraction operation for each port with the operators + and –. For example + – + implements a – b + c for 3 ports. However, two consecutive subtractions, (– –) are not legal. Missing operators are assumed to be +.

两个连续的减(– –)是不合法的,如果某个操作数没有指定运算符,则默认是+

Enable Pipeline

When on, DSP Buidler registers the output from each stage in the adder tree, resulting in a pipeline length that is equal to ceil(log2(number of inputs)).

使用流水线,DSP Builder对加法树的每个阶段的输出予以存储,从而流水线长度等于ceil(log2(number of inputs)),ceil函数的作用是求不小于给定实数的最小整数。

带宽

输入带宽可以不同,所有的带宽都是隐含的,输出带宽是max(Li) + ceil(log2(n)) + max(Ri)-1,如果要固定带宽,则采用BusConversion

 

多路选择器可作为n to 1编码器或全二进制总线多路器,带有一个可选的控制端。

The Multiplexer block operates as either a n-to-1 one-hot or full-binary bus multiplexer with one select control. The output width of the multiplexer is equal to the maximum width of the input data lines. The block works on any data type and sign extends the inputs if there is a bit width mismatch.

输出宽度等于输入数据的最大宽度。

 

Constant常数模块

常数模块指定一个常数bus,可选的选项独立于所选的bus类型

参数:

值:一个Double类型数

Bus类型:

Rounding Mode:Truncate(截短), Round Towards Zero, Round Away From Zero, Round To Plus Infinity, Convergent Rounding

Saturation Mode:Wrap, Saturate

Truncate截短: Remove discarded bits without changing the other bits; effectively, specify the lower value. This is the simplest and fastest mode to implement in hardware.

直接移除不要的位,硬件实现起来最快最简单

Round Towards Zero: Specify the value closer to zero.

使值更接近0,即向绝对值小的方向凑整

Round Away From Zero: Specify the value further from zero (round downwards for negative values, upwards for positive values).

This was the rounding behavior in DSP Builder version 7.0 and before.

When using this mode —the maximum positive value overflows the available representation.

For example, when rounding from an 8-bit signed input to a 6-bit signed output, 01111111 (127) becomes 100000 (-32).

If you use this mode, it is best to use saturation logic to prevent this from happening.

使值远离0,如果使用此模式,最好使用饱和逻辑避免错误发生

Round To Plus Infinity: Specify the higher value.指定更大的值

Convergent Rounding: Specify the even value. For a large sample of random input values there is no bias —on average the same number of values round upwards as downwards.

指定,

 

HDL Input

Connect the HDL Input block directly to an input node in a subsystem. Use with the Subsystem Builder and HDL Entity blocks for black-box simulation.将此模块与子系统的输入节点直接相连,用于子系统Subsystem Builder和HDL实体模块的黑盒子仿真

The type and bit width must match the type and bit width on the corresponding input port in the HDL file referenced by the HDL Entity block. HDL Input blocks are automatically generated by the Subsystem Builder block.位宽和类型必须与HDL模块的输入匹配(输出的位宽?)

You can optionally specify the external Simulink type. If set to Simulink Fixed Point Type, the bit width is the same as the input. If set to Double, the width may be truncated if the bit width is greater than 52.你可以有选择的指定外部Simulink数据类型,如果设置的是Simulink定点类型,位宽必须一致。如果是双精度浮点型,如果位宽大于52,有可能被截掉高位。(输入的位宽?)

 

在基于FPGA的DSP开发工具中,无论是Altera的DSP Builder还是Xilinx的System Generator,将Matlab/Simulink的DSP模型转换成的硬件描述语言都只限于VHDL语言。因此建议前期先学习基于VHDL的RTL级描述与仿真。

用到的技术概念:DSP,SOC/SOPC,EDA

现代电子技术的优势:

将远离硬件的系统级描述与高效的硬件实现有机结合的自顶向下的设计流程;

允许用户能随意把"测试仪表"连同DSP系统一起送入目标芯片内部去采集内部信号,嵌入式逻辑分析仪应用技术;

能随时改变硬件结构的重定制功能

 

小技巧

模型文件取名时尽量用英文字母开头,不用空格,不用中文

凡是来自DSP Builder库以外的模块,都不能转化,但在Simulink中仿真却比较好用

 

为了便于在波形观察窗中区分不同的信号,双击连接线出现一个输入文本的小框,输入信号名称即可

 

在 8 位的补码系统中,可以表示的最大正数为 28−1-1 = 127,可以表示绝对值最大的负数为 -28−1 = -128

实际有符号整数的变化是,0~2n-1~-2n~-1

将有符号数变无符号数并加2n的方法:以8位为例,范围是-128~127,变为无符号数应加128,将最高位取反即可,操作方法是:将8位的最高位分离出来,取反后与其余6位再合并。用到BusConversion等模块,如下图

 

Bad link怎么办?——旧版本(7.0)的设计在新版中不能兼容,唯一的办法是在新旧版本交替的那一版对模型进行转化

 

DSP Builder层次化设计

DSP Builder继承了Simulink的子系统(SubSystem)封装和调用。

 

————————————————————————————————————

《现代DSP技术》潘松 黄继业 王国栋

第11章 DSP Builder设计规则

位宽设计规则:每个模块都有自身的设计规则,都包含了位宽的规则。DSP Builder具有双位字类型,该类型最大数据位宽51位。若要超过51位,必须将数据总线分成多套。

频率设计规则:如果单一设计不包含来自Rate Change库的锁相环PLL模块,则在Simulink设计转换时,DSP Builder将使用同步设计规则,即所有时序模块,如Delay,都以单一时钟的上升沿同步工作,此时钟频率也即整个系统的采样频率。然而这些时钟引脚都不会显示在设计图上,只有转化为VHDL后,才自动连到一起引出。

时钟使能端和同步复位端默认是不显示的,转化为VHDL时,自动将所有时钟使能端接Vcc(高电平使能),复位端接系统复位输入口。但如果设计者想自己控制某个模块的这些端口,则可以在模块设置中打开 Use Control Inputs等参数实现。

?为保持Simulink设计域到VHDL域的时钟周期的精确性,必须将Solver选项设定在Fixed-step和discrete状态上,并设定模式为Single Tasking。

命名规则:模块的命名必须遵循VHDL的命名规则

大小写区分?(模块名不区分)

不要使用VHDL的关键字命名模块

不要使用非法字符,字母、数字、下划线

模块名起始必须是字母

不允许连续使用两个下划线

空格将在编译中被忽略

SignalCompliler对每个HDL子系统模块产生一个单独的VHDL文件,其名称具有全局性,名称必须唯一。

 

 

定点数与浮点数

Simulink信号必须转化成与硬件结构相对应的总线形式,所以浮点数必须转换成定点数并能在目标硬件中实现,这种转换是硬件实现的关键步骤。

高位宽能产生较小的误差,但消耗更多的硬件资源

AltBus可将双精度浮点型转换为定点数

 

层次化设计,每一层次的.mdl文件都被转变为一个单独的VHDL文件(一个元件)

 

黑盒子化设计,可将自己的VHDL代码加入到Simulink设计中,并规定SignalComplier把哪个子系统模块转化成VHDL文件。此过程中,通过HDL input/output模块与其他模块连接。

 

第12章以后 DSP Builder各库模块简介

 

——————————————————————————————————————————————————————

官网资料是最好的学习材料

DSP Builder User Guide V2.1.3

DSP Builder 的特性:

将MATLAB和Simulink与Quartus II连接起来

支持Altera DSP核,Altera官网可以下载

支持Altera器件

支持SignalTap II 逻辑分析仪——一种嵌入式信号分析仪,探测Altera器件内部信号,将数据导入到Matlab工作空间

包含SOPC模块

包含PLL模块

包含状态机模块

自动生成VHDL测试和向量文件

自动加载VHDL综合和编译

 

概述:

DSP Builder Handbook V13.0

要为你的DSP Builder设计创建和编译一个Quartus II工程,并且将你的设计下载到Altera FPGA上,通过以下步骤添加Signal Compiler模块。

AltLab库→Signal Compiler→双击此模块,出现对话框,选择器件系列→点击Compile→编译完后,点击OK→在mdl中点击保存

 

RTL仿真(ModelSim中):AltLab→TestBench模块→双击此模块→确保Enable Test Bench generation选中→切换到Advanced选项卡选中Launch GUI选项(在调用ModelSim仿真时启动ModelSim界面)→点Generate HDL(生成基于VHDL的testbench)→点击Run Simulink(生成Simulink仿真结果)→点击Run ModelSim(把你的设计加载到ModelSim)

仿真结果在ModelSim的波形窗口中显示,testbench在aclr输出信号的脉冲到来时初始化你设计的所有寄存器。

所有的波形默认都是用数字格式显示,可以将某个信号的显示格式改为模拟。ModelSim 6.4a中,右键弹出菜单,可以选择Format,选Analog(Automatic),其他版本可能有所不同。

波形窗口可以放大(Zoom Full)。

 

DSP Builder教程的入门就到此为止,下一章将讲解如何把DSP Builder设计加入到一个新的或已存在的Quartus II工程中。

用户指南的随后的章节给出了例程来说明DSP Builder所支持的其他特性。

 

2-21 将设计导入到Quartus II工程

DSP Builder使用的是Signal Compiler模块创建的Quartus II工程(此工程是自动产生的,用于仿真、HIL等?),这一章描述怎样将你的设计加入到一个新的或已建好的工程中

开始之前,确保你的设计已经用Signal Compiler模块编译过了("Compiling the Design" on page 2–17)。

是自动产生的

1、创建Quartus II工程

打开Quartus II→New Project Wizard→工程目录、名称(一般顶层设计实体top-level design entity与工程有相同的名称)→添加文件→选择器件→完成

2、添加DSP Builder设计到工程中

View菜单→Utility Windows工程窗口→Tcl Console(TerminalCommandLanguage终端命令语言 控制台)

运行mdl文件同目录下的xxx_add.tcl脚本,命令如下:

# source <the mdl path>/xxx_add.tcl

(#表示提示符,仅在此处表示是一行命令的开始,不用写;在Linux系统中source与"."意义相同,即将后面的脚本文件作为程序执行)

注意:路径中的"\"应替换为"/",比如F:\workspace\newmdl应写作F:/workspace/newmdl,个人猜测是因为控制台程序是按Linux系统下的习惯开发的。

如果你把DSP Builder设计和Quartus II工程放在同一个文件层级下,路径也可以使用相对路径(.表示当前目录,..表示上一级目录)

3、点击Files标签

4、把xxx.mdl设置为顶层实体(Select Set as Top-Level Entity)

5、Start Compilation编译

Note:你可以从例程文件中拷贝组件声明到你自己的代码。、

总结:此处是利用脚本文件自动导入,将mdl和mdlxml文件也包含进工程中(qip中所包含),从而编译等工作不需matlab参与。

也可以利用signal compiler的Export HDL功能导出VHDL文件,利用qip(与上面的不同,这个是包含了一堆vhd文件)导入到工程中,具体使用还有待探索

 

12 管理工程和文件

DSP Builder设计要求如下文件来存储所有的组件:

顶层simulink模型xxx.mdl

DSPBuilder_xxx_import目录及其内容(包含HDL import模块、状态机编辑器、宏模块的设计需要此目录)

所有imported HDL模块的源文件

所有Intel十六进制存储空间初始化文件.hex

所有自定义库文件

Simulink模型分析文件xxx.mdlxml存储了模型的一些(设置、校验等)信息

Note:当把.mdlxml文件包含到Quartus II工程中,就不需要调用MATLAB来综合此设计了。如果没包含此文件,仍可以综合,只不过在流程中必须调用MATLAB。如果不想Quartus II调用MATLAB,或者手头没有MATLAB,可以任选一种方法:

·在工程中包含mdl文件和相应的mdlxml文件

·导出HDL,将导出的HDL文件作为源文件,而不需要在工程中涉及.mdl和.mdlxml

 

与源码控制系统相结合

Altera建议你存储Quartus II archive存档(.qar)文件,而不是分散的HDL文件,便于源码控制

要创建qar文件,在Quartus II软件中执行如下步骤:

1、创建一个Quartus II工程,包含Quartus II IP file(.qip)文件,该文件是由DSP Builder导出HDL流程所创建的(与Signal Compiler执行Compile时创建的不同)

2、执行Analysis and Elaboration确保设计包含所有的黑箱系统文件

3、通过点击project菜单→Archive Project,对工程进行存档,生成qar文件

关于Archive,以下是Archive对话框的高级设置项及其描述(存档意为将现在的工程相关的所有东西存档,便于恢复和对比,它与保存整个工程目录不同的是,它是可恢复现场的最小集合,不包含编译的中间文件和目标文件,通过qar文件可以在其他地方恢复现在的工程,通过编译可产生相同的目标文件)

Note:任何导入到DSP Builder作为自定义模块的HDL元素,都可能需要他们自己的源码控制。在顶级qip文件的# Imported IP files段中提到的子qip文件,列出了Import HDL所需要的文件。

 

 

Import HDL:略

MegaCore Functions:略

Memory Initialization Files:Intel十六进制格式hex文件用于在仿真和硬件生成中对存储初始化。如果它们是由HDL Import或宏功能模块生成的,确保他们在import目录下。This fact is generally not the case if you generate the files with HDL Import.

 

Export HDL:从mdl导出HDL文件

你可以导出DSP Builder生成的可综合HDL文件到Quartus II工程中,使用Signal Compiler模块下的Export 标签来执行。

在MATLAB命令行中执行alt_dspbuilder_exportHDL命令也可以导出HDL,其语法结构为:

<exportDir_value> alt_dspbuilder_exportHDL(<model>, <exportDir>)

model是mdl文件的名称,它的名称总是导出的Quartus II工程的顶级实体的名称

exportDir是包含导出文件的目录。如果省略了这一项,DSP Builder将使用默认或前一个导出目录

exportedDir_value是返回字符串,表示输出目录

通过执行这一动作,在导出目录生成一系列源文件,并包含一个qip文件(用于导入所有的VHDL文件),与设计的顶层相对应。

 

使用导出的HDL:

导出完成后,你可以使用"New Project Wizard"创建一个新工程,添加相应的qip文件作为工程的单个(唯一)源文件。对于描述黑箱组件的要求也许还有其他的qip文件。此顶级文件(qip)可以自动寻找这些文件。

Note:如果要迁移包含宏功能模块的设计到其他位置,如果包含库组件的绝对路径,则需要对他们的qip文件编辑一下。Windows电脑和Linux电脑之间的迁移需要使用Export HDL。然而,这个动作需要添加一个额外的文件alt_dspbuilder_package.vhd(在QUARTUS_ROOTDIR>\libraries\vhdl\altera)

 

重要!

在一个顶层Quartus II工程中集成多个(当然也可以是一个!)模型

需要mdl和ipx文件

使用qip(Quartus II IP)文件作为每个DSP Builder模型的唯一源文件。

qip文件在单个文件中包含了所有文件和IP设计的路径。

qip文件允许你只需要添加一个文件就可以添加IP设计到工程中,而不需要单独的添加所有需要的文件。

qip文件只是用于Quartus II对DSP Builder存档的,不用于生成。You only need the .qip file for Quartus II archiving for DSP Builder, which does not use it for generation.

如果多个mdl包含相同的IP核,qip中重复提到IP库,Quartus II报告冲突,则需要手动编辑qip,移除多余的库。

如果DSP Builder设计包含HDL import或IP宏模块,……

除了qip文件,顶层的工程还需要一个IP Index(ipx)文件确定附加的路径来寻找组件。特别的,对于DSP Builder设计,Quartus II软件需要ipx文件用于模型中使用到的HDL import和IP宏模块。

本质上来说,DSP Builder系统是一个由DSP Builder模块(是实体,但很容易发现)和非原生模块(例如HDL import和宏功能模块)组成的实体。

Note:DSP Builder在主Quartus II ipx文件中指定了主实体,不需要额外的动作——只需要再增加额外的HDL import和宏功能模块实体即可。

 

 

关于位宽设置:对小数来说,小数位宽越大越精确,如果数特别小,最好将小数位宽设置的足够大,否则算出来的数有可能被舍掉而变为0

Pipelined Adder:假设输入信号整数部分用补码表示(带符号位)需要n位,则其输入(也是输出)整数位宽应设置为n+1(如果结果不超n,也可以设置为n)

Multiplier:假设输入信号整数部分用补码表示(带符号位)需要n位,则其输入整数位宽应设置为n

posted @ 2013-05-07 22:20  电路基础  阅读(2642)  评论(0编辑  收藏  举报