DSPBuilder笔记
一、位寬設(shè)置
在DSPBuilder中,數(shù)據(jù)在內(nèi)部采用二進(jìn)制定點(diǎn)數(shù)表示方法,數(shù)據(jù)可以設(shè)置成無符號整數(shù)、有符號整數(shù)和有符號小數(shù)等,其中有符號數(shù)由符號位、整數(shù)位和小數(shù)位組成(有符號整數(shù)的小數(shù)位為0),位寬根據(jù)需求可任意調(diào)整,但確定位寬在數(shù)據(jù)離散化的過程中非常重要,不合理的位寬設(shè)置會引起錯(cuò)誤。對于無符號整數(shù),如果數(shù)據(jù)大于位寬所表示的最大值,則高位被截?cái)?#xff1b;對于有符號整數(shù),高位被截?cái)嘀?#xff0c;剩余部分的最高位會決定數(shù)據(jù)的正負(fù)(1為負(fù)數(shù),0為正數(shù));對于小數(shù)部分,小數(shù)位寬越大,數(shù)據(jù)越精確,反之誤差越大。數(shù)據(jù)被截?cái)嗷蛘`差太大會造成計(jì)算結(jié)果錯(cuò)誤,導(dǎo)致偏離正常值,但過多的模塊位寬設(shè)置過大也會消耗FPGA的硬件資源,造成浪費(fèi),甚至超過FPGA的硬件資源數(shù)量,造成無法編譯。
對于位寬設(shè)置,加(減)法模塊、乘法模塊可以遵循如下準(zhǔn)則,其他模塊可參考以下方法。
為了后面敘述方便將定點(diǎn)數(shù)統(tǒng)一表述成如下形式:
????????????????????????????????????(3-1)
其中為符號位,代表有符號數(shù),代表無符號數(shù);代表整數(shù)位寬,代表小數(shù)位寬[16]。
對于一個(gè)兩輸入的基本數(shù)學(xué)運(yùn)算模塊,設(shè)其源操作數(shù)(輸入)為,。為保證計(jì)算結(jié)果不會溢出,目標(biāo)操作數(shù)(輸出)位寬應(yīng)分別與其源操作數(shù)位寬滿足如下關(guān)系[16]:
????????(3-2)
????????????????(3-3)
????????????????????(3-4)
其中|代表或運(yùn)算,max代表取最大值運(yùn)算。減法運(yùn)算和乘法運(yùn)算只能有兩個(gè)源操作數(shù),而加法模塊可有多個(gè)源操作數(shù)。加法模塊每增加一個(gè)源操作數(shù),其整數(shù)位寬需加一才能保證運(yùn)算結(jié)果不會溢出。利用DSPBuilder實(shí)現(xiàn)一個(gè)復(fù)雜運(yùn)算的過程中,需要首先確定其自變量的取值范圍,然后根據(jù)其取值范圍為其設(shè)計(jì)合理的定點(diǎn)數(shù)整數(shù)位寬和小數(shù)位寬[17]。
以上準(zhǔn)則適用于在系統(tǒng)設(shè)計(jì)初期位寬的估算,針對具體的數(shù)據(jù)輸入,可以用Simulink中的示波器觀察每個(gè)模塊的輸入輸出數(shù)據(jù)的大小,根據(jù)具體情況設(shè)置合理的位寬。
?
二、查找表
查找表的基本思想是將函數(shù)值預(yù)先存入一個(gè)具有連續(xù)地址空間的存儲區(qū)域,運(yùn)算過程中,將函數(shù)的自變量映射成該存儲區(qū)域的地址,通過讀存儲區(qū)域中該地址的數(shù)據(jù)實(shí)現(xiàn)函數(shù)的運(yùn)算。因FPGA 中存儲地址空間是一維的,因此只能實(shí)現(xiàn)含有一個(gè)變量的函數(shù)運(yùn)算。
由上可知,查找表的真正輸入應(yīng)該是地址,即0~2^n-1,使用時(shí)需預(yù)先把自變量換算(映射)成地址。
查找表的使用方法舉例:將的取值范圍-50~40變換為查找表的地址范圍0~1023,(+50)×(1023/90),同時(shí)將乘法器的輸出限定為整數(shù),即可得到查找表的地址值。
?
三、流水線數(shù)據(jù)通路
利用DSPBuilder求解常微分方程需要用到流水線數(shù)據(jù)通路的概念,所謂流水線數(shù)據(jù)通路,顧名思義,就是數(shù)據(jù)的計(jì)算以流水線的方式進(jìn)行,同一時(shí)間的工作值可以有多個(gè),采用流水線的結(jié)構(gòu)可以增加系統(tǒng)的吞吐量。
在流水線的結(jié)構(gòu)設(shè)計(jì)中,一個(gè)完整的組合邏輯被分成的獨(dú)立塊的數(shù)量稱為其流水線深度(depthofpipeline)[18,19],組合邏輯的流水線深度就是其延時(shí)時(shí)間,以時(shí)鐘周期為單位。流水線深度的確定需要綜合考慮吞吐量和時(shí)鐘頻率,本文中加(減)法模塊、乘法模塊和查找表模塊若無特殊說明,其流水線深度分別為1,2和0,這個(gè)設(shè)定不是一成不變的,也可以根據(jù)具體需求更改,如在某些情況下將某個(gè)模塊的延時(shí)設(shè)為0。
在FPGA硬件模型中,任何復(fù)雜的多項(xiàng)式運(yùn)算都是由多個(gè)基本數(shù)學(xué)運(yùn)算模塊組成的流水線數(shù)據(jù)通路(pipelineddatapath)實(shí)現(xiàn)的。設(shè)計(jì)數(shù)據(jù)通路的過程中既要保持前項(xiàng)運(yùn)算的輸出位寬與后項(xiàng)運(yùn)算的輸入位寬一致,還要保證同一運(yùn)算模塊的所有輸入同步(即同一個(gè)模塊之間的所有輸入應(yīng)具有相同的延時(shí)時(shí)間)。
基于流水線數(shù)據(jù)通路的方法求解常微分方程的理論依據(jù)是用歐拉法,即離散化常微分方程后采用迭代運(yùn)算求解,具體離散化方法以及流水線的連接參見第四章。
?
摘自維基百科
歐拉方法,是一種一階數(shù)值方法,用以對給定初值的常微分方程(即初值問題)求解。
問:怎么在DSP Builder中給常微分方程賦初值?(階躍模塊?)
注意:要同時(shí)考慮流水線上各處的初值
非形式化的幾何詮釋
歐拉方法的圖示。待求的曲線為藍(lán)色,它的折線近似為紅色。
考慮計(jì)算下面一個(gè)未知曲線的形狀:它具有給定的起點(diǎn)并且滿足一個(gè)給定的微分方程。這里,所謂"微分方程"可以看作能夠通過曲線上任意點(diǎn)的位置而計(jì)算出這一點(diǎn)的切線斜率的公式。
思路是,一開始只知道曲線的起點(diǎn)(假設(shè)為),曲線其他部份是未知的,不過通過微分方程,的斜率可以被計(jì)算出來,也就得到了切線。
順著切線向前走一小步到點(diǎn)。如果我們假設(shè)是曲線上的一點(diǎn)(實(shí)際上通常不是),那么同樣的道理就可以確定下一條切線,依此類推。在經(jīng)過幾步之后,一條折線就被計(jì)算出來了。大部分的情況下,這條折線與原先的未知曲線偏離不遠(yuǎn),并且任意小的誤差都可以通過減少步長來得到(雖然對于剛性方程而言會比較復(fù)雜。下文將提到)。
歐拉方法的推導(dǎo)
以以下微分方程為例
希望用y在點(diǎn)(t0,y(t0))附近的線性近似來得到其近似解(也就是y的泰勒展開式的前二項(xiàng))。利用時(shí)間tn時(shí)的數(shù)值,若用單步的歐拉方法,可得到時(shí)間tn+1=tn+h時(shí)的近似值如下:
歐拉方法是一種顯型方法,也就是說的解是,的顯函數(shù)。
歐拉方法可以求解一階的微分方程,一個(gè)階的微分方程可以用導(dǎo)入個(gè)變量來表示,,...,的方式,分解為個(gè)一階的微分方程。因此可以用歐拉方法求解以下的向量來得到高階微分方程的解。
應(yīng)用例題
設(shè)微分方程為,初始值為,試用歐拉方法求的近似值,步長為.
歐拉法則表達(dá)式:
首先求當(dāng).此微分方程僅有一個(gè)變量,因此無須考慮給賦值.
以上解得切線的斜率為1,切點(diǎn)在解曲線上。回顧斜率的定義:在單位時(shí)間內(nèi),變量和變量的比值,可以計(jì)作為.
重復(fù)以上步驟求出和的值.
由于歐拉法則屬于遞歸算法,為了避免出現(xiàn)計(jì)算錯(cuò)誤,建議使用Excel或者類似的制表程序
| 1 | 0 | 1 | 1 | 1 | 2 |
| 2 | 1 | 2 | 1 | 2 | 4 |
| 4 | 2 | 4 | 1 | 4 | 8 |
?
流水線中某時(shí)刻存在于各個(gè)寄存器中的值的關(guān)系
假設(shè)流水線深度是x
那么如果初值相同(用階躍模塊強(qiáng)制將初值設(shè)置成相同的值),則x個(gè)寄存器中的初值相同,相同的初值經(jīng)過演化計(jì)算得出的是相同的結(jié)果,所以會在波形中出現(xiàn)以x為周期的平臺,即x個(gè)延遲時(shí)間當(dāng)中,值是不變的,然后才從v(n)變成V(n+1)
?
?
如果初值不同(不使用階躍模塊),原因是在初始時(shí)在流水線的不同的深度處的初值進(jìn)行的運(yùn)算不同(中間的初值只運(yùn)算了后一半),所以產(chǎn)生的輸出不同,從而造成了有規(guī)律的變化的周期,如圖所示。
猜測:如果模型是初值敏感的,會造成波形的嚴(yán)重失真,因?yàn)椴煌踔诞a(chǎn)生的軌跡是截然不同的,造成一個(gè)周期x內(nèi)波形不在相近的地方。
?
流水線設(shè)計(jì)是高速電路設(shè)計(jì)中的一個(gè)常用設(shè)計(jì)手段。如果某個(gè)設(shè)計(jì)的處理流程分為若干步驟,而且整個(gè)數(shù)據(jù)處理是"單流向"的,即沒有反饋或者迭代運(yùn)算,前一個(gè)步驟的輸出是下一個(gè)步驟的輸入,則可以考慮采用流水線設(shè)計(jì)方法來提高系統(tǒng)的工作頻率。
?
流水線處理的應(yīng)用
在很多領(lǐng)域的高速電子系統(tǒng)中都運(yùn)用了流水線處理的方法,如高速通信系統(tǒng)、高速采集系統(tǒng)、高速導(dǎo)航系統(tǒng)、高速搜索系統(tǒng)等等。流水線處理方式之所以能夠很大程度上提高數(shù)據(jù)流的處理速度,是因?yàn)閺?fù)制了處理模塊,它是面積換取速度思想的又一種具體體現(xiàn)。
?
這樣輸出的數(shù)據(jù)是每一個(gè)時(shí)鐘周期來一個(gè),和輸入的數(shù)據(jù)是同步的。所謂流水作業(yè),在實(shí)際硬件電路中就是把一個(gè)大的組合邏輯分成各個(gè)小的組合邏輯,每一個(gè)輸入的信號都必須順次通過各個(gè)階段的操作,而各個(gè)階段的操作又是同步進(jìn)行的,這就像工廠的生產(chǎn)流水線一樣,會有源源不斷的數(shù)據(jù)信號從輸出端送出。另外,從這個(gè)實(shí)驗(yàn)中也可以更深刻的體會到Verilog的并行性。
?
來自 DSP Builder 幫助文件
位寬顯性設(shè)置:Explicit means that the port bit width information is a block parameter.
位寬隱性設(shè)置: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選項(xiàng):
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數(shù)據(jù)放在由嵌入式RAM構(gòu)成的ROM中,可節(jié)省大量的邏輯資源;關(guān)閉:只能由芯片中的LCs構(gòu)成
Altera recommends that you turn on the Use LPM option for large look-up tables, for example, greater than 8 bits.對于大的查找表建議打開,比如8位以上的
Register Address選項(xiàng),表示將輸入地址存放在寄存器中,而不是僅僅是一根線上的信號
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選項(xiàng),必須打開這個(gè)選項(xiàng)
Register Data 選項(xiàng),類比上面
Turn on this option if you would like to register the output result.保存結(jié)果到寄存器
Clock Phase Selection用來控制采樣,1表示每個(gè)主頻脈沖后數(shù)據(jù)都能通過;01表示一個(gè)不通過一個(gè)通過,循環(huán)如此;0011表示先不通過兩個(gè)再通過兩個(gè),循環(huán)如此;0100表示第二個(gè)可以通過,1、3、4不能通過,循環(huán)如此。
BusType參數(shù)為Inferred表示自動判斷
Pipeline參數(shù)指定該模塊使用幾級流水線,即結(jié)果在幾個(gè)時(shí)鐘周期后出現(xiàn)
Use Dedicated Circuitry使用專用電路,表示FPGA中的專用模塊,比如內(nèi)嵌專用DSP
?
AltBus模塊(IO & Bus分類中)——浮點(diǎn)總線到定點(diǎn)總線的映射
Saturate(飽和)選項(xiàng)表示如果結(jié)果大于最大位數(shù),自動變?yōu)樽畲笳祷蜇?fù)值(飽和特性),若關(guān)閉則MSB(高位)被截去。Node Type被設(shè)置為輸入或常數(shù)類型時(shí)沒有該選項(xiàng)。
Round(四舍五入)選項(xiàng)打開,輸出略去所有高位的0,關(guān)閉,最低位LSB被截去??
Bypass Bus Format打開表示在Simulink中使用浮點(diǎn)數(shù)進(jìn)行仿真(硬件中不能)
Input & Output Port模式:外界輸入或輸出到外界;
Internel Node模式:內(nèi)部節(jié)點(diǎn),內(nèi)部轉(zhuǎn)換位寬
Black Box Input Output模式:用于與非DSP Builder模塊(用HDL語言獨(dú)立編寫的模塊,不想讓SignalCompiler再轉(zhuǎn)換成HDL)連接。適用于分層次開發(fā)(多人協(xié)同或分階段開發(fā))
?
Product模塊
The Product block supports two scalar inputs (no multidimensional Simulink signals兩個(gè)標(biāo)量輸入,沒有多維信號). Operand a is multiplied by operand b and the result output on r as the following equation shows:
r = a × b
Product和Multiplier的區(qū)別
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,實(shí)現(xiàn)一次之后,如果想改動Simulink中的.mdl文件,應(yīng)該注意兩點(diǎn):
一是內(nèi)部電路結(jié)構(gòu)和設(shè)置可以改變,但端口信號名最好不要改,如輸入、輸出,因?yàn)榇诵盘柕囊_已被鎖定,不便改變
二是改動.mdl后只宜做系統(tǒng)仿真(Simulink中的仿真)和VHDL文件轉(zhuǎn)換,不宜做綜合,即最多只執(zhí)行Advanced選項(xiàng)卡的第一個(gè)按鈕,否則可能把原來設(shè)定好的引腳全部沖掉,為了保存引腳信息,綜合和適配到QuartusII中進(jìn)行。
?
DSP Builder將Matlab模型subint.mdl轉(zhuǎn)變成多個(gè)VHDL目標(biāo)文件,其中包括subint.vhd(頂層的VHDL文件),還有subint_GN.vhd,且對所有xx.mdl編譯后都產(chǎn)生xx_gn.vhd,同時(shí)還把每個(gè)單獨(dú)的模塊生成VHDL文件。
?
Pipelined Adder帶進(jìn)位輸入和進(jìn)位輸出,加或減
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相當(dāng)于上一級的借位+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端口,帶符號數(shù)輸出溢出信號,不帶符號數(shù)輸出進(jìn)位信號。
對于不帶符號減法,當(dāng)沒有溢出(借位,下溢)發(fā)生時(shí),輸出1。有溢出時(shí)輸出0。
?
The Parallel Adder Subtractor可以使用任何類型的輸入數(shù)據(jù),如果寬度不統(tǒng)一,自動擴(kuò)展為最大寬度。生成的VHDL有優(yōu)化的、平衡的加法樹
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 (–)參數(shù)
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 +.
兩個(gè)連續(xù)的減(– –)是不合法的,如果某個(gè)操作數(shù)沒有指定運(yùn)算符,則默認(rèn)是+
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對加法樹的每個(gè)階段的輸出予以存儲,從而流水線長度等于ceil(log2(number of inputs)),ceil函數(shù)的作用是求不小于給定實(shí)數(shù)的最小整數(shù)。
帶寬
輸入帶寬可以不同,所有的帶寬都是隱含的,輸出帶寬是max(Li) + ceil(log2(n)) + max(Ri)-1,如果要固定帶寬,則采用BusConversion
?
多路選擇器可作為n to 1編碼器或全二進(jìn)制總線多路器,帶有一個(gè)可選的控制端。
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.
輸出寬度等于輸入數(shù)據(jù)的最大寬度。
?
Constant常數(shù)模塊
常數(shù)模塊指定一個(gè)常數(shù)bus,可選的選項(xiàng)獨(dú)立于所選的bus類型
參數(shù):
值:一個(gè)Double類型數(shù)
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.
直接移除不要的位,硬件實(shí)現(xiàn)起來最快最簡單
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.
使值遠(yuǎn)離0,如果使用此模式,最好使用飽和邏輯避免錯(cuò)誤發(fā)生
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.將此模塊與子系統(tǒng)的輸入節(jié)點(diǎn)直接相連,用于子系統(tǒng)Subsystem Builder和HDL實(shí)體模塊的黑盒子仿真
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數(shù)據(jù)類型,如果設(shè)置的是Simulink定點(diǎn)類型,位寬必須一致。如果是雙精度浮點(diǎn)型,如果位寬大于52,有可能被截掉高位。(輸入的位寬?)
?
在基于FPGA的DSP開發(fā)工具中,無論是Altera的DSP Builder還是Xilinx的System Generator,將Matlab/Simulink的DSP模型轉(zhuǎn)換成的硬件描述語言都只限于VHDL語言。因此建議前期先學(xué)習(xí)基于VHDL的RTL級描述與仿真。
用到的技術(shù)概念:DSP,SOC/SOPC,EDA
現(xiàn)代電子技術(shù)的優(yōu)勢:
將遠(yuǎn)離硬件的系統(tǒng)級描述與高效的硬件實(shí)現(xiàn)有機(jī)結(jié)合的自頂向下的設(shè)計(jì)流程;
允許用戶能隨意把"測試儀表"連同DSP系統(tǒng)一起送入目標(biāo)芯片內(nèi)部去采集內(nèi)部信號,嵌入式邏輯分析儀應(yīng)用技術(shù);
能隨時(shí)改變硬件結(jié)構(gòu)的重定制功能
?
小技巧
模型文件取名時(shí)盡量用英文字母開頭,不用空格,不用中文
凡是來自DSP Builder庫以外的模塊,都不能轉(zhuǎn)化,但在Simulink中仿真卻比較好用
?
為了便于在波形觀察窗中區(qū)分不同的信號,雙擊連接線出現(xiàn)一個(gè)輸入文本的小框,輸入信號名稱即可
?
在 8 位的補(bǔ)碼系統(tǒng)中,可以表示的最大正數(shù)為 28?1-1 = 127,可以表示絕對值最大的負(fù)數(shù)為 -28?1 = -128
實(shí)際有符號整數(shù)的變化是,0~2n-1~-2n~-1
將有符號數(shù)變無符號數(shù)并加2n的方法:以8位為例,范圍是-128~127,變?yōu)闊o符號數(shù)應(yīng)加128,將最高位取反即可,操作方法是:將8位的最高位分離出來,取反后與其余6位再合并。用到BusConversion等模塊,如下圖
?
Bad link怎么辦?——舊版本(7.0)的設(shè)計(jì)在新版中不能兼容,唯一的辦法是在新舊版本交替的那一版對模型進(jìn)行轉(zhuǎn)化
?
DSP Builder層次化設(shè)計(jì)
DSP Builder繼承了Simulink的子系統(tǒng)(SubSystem)封裝和調(diào)用。
?
————————————————————————————————————
《現(xiàn)代DSP技術(shù)》潘松 黃繼業(yè) 王國棟
第11章 DSP Builder設(shè)計(jì)規(guī)則
位寬設(shè)計(jì)規(guī)則:每個(gè)模塊都有自身的設(shè)計(jì)規(guī)則,都包含了位寬的規(guī)則。DSP Builder具有雙位字類型,該類型最大數(shù)據(jù)位寬51位。若要超過51位,必須將數(shù)據(jù)總線分成多套。
頻率設(shè)計(jì)規(guī)則:如果單一設(shè)計(jì)不包含來自Rate Change庫的鎖相環(huán)PLL模塊,則在Simulink設(shè)計(jì)轉(zhuǎn)換時(shí),DSP Builder將使用同步設(shè)計(jì)規(guī)則,即所有時(shí)序模塊,如Delay,都以單一時(shí)鐘的上升沿同步工作,此時(shí)鐘頻率也即整個(gè)系統(tǒng)的采樣頻率。然而這些時(shí)鐘引腳都不會顯示在設(shè)計(jì)圖上,只有轉(zhuǎn)化為VHDL后,才自動連到一起引出。
時(shí)鐘使能端和同步復(fù)位端默認(rèn)是不顯示的,轉(zhuǎn)化為VHDL時(shí),自動將所有時(shí)鐘使能端接Vcc(高電平使能),復(fù)位端接系統(tǒng)復(fù)位輸入口。但如果設(shè)計(jì)者想自己控制某個(gè)模塊的這些端口,則可以在模塊設(shè)置中打開 Use Control Inputs等參數(shù)實(shí)現(xiàn)。
?為保持Simulink設(shè)計(jì)域到VHDL域的時(shí)鐘周期的精確性,必須將Solver選項(xiàng)設(shè)定在Fixed-step和discrete狀態(tài)上,并設(shè)定模式為Single Tasking。
命名規(guī)則:模塊的命名必須遵循VHDL的命名規(guī)則
大小寫區(qū)分?(模塊名不區(qū)分)
不要使用VHDL的關(guān)鍵字命名模塊
不要使用非法字符,字母、數(shù)字、下劃線
模塊名起始必須是字母
不允許連續(xù)使用兩個(gè)下劃線
空格將在編譯中被忽略
SignalCompliler對每個(gè)HDL子系統(tǒng)模塊產(chǎn)生一個(gè)單獨(dú)的VHDL文件,其名稱具有全局性,名稱必須唯一。
?
?
定點(diǎn)數(shù)與浮點(diǎn)數(shù)
Simulink信號必須轉(zhuǎn)化成與硬件結(jié)構(gòu)相對應(yīng)的總線形式,所以浮點(diǎn)數(shù)必須轉(zhuǎn)換成定點(diǎn)數(shù)并能在目標(biāo)硬件中實(shí)現(xiàn),這種轉(zhuǎn)換是硬件實(shí)現(xiàn)的關(guān)鍵步驟。
高位寬能產(chǎn)生較小的誤差,但消耗更多的硬件資源
AltBus可將雙精度浮點(diǎn)型轉(zhuǎn)換為定點(diǎn)數(shù)
?
層次化設(shè)計(jì),每一層次的.mdl文件都被轉(zhuǎn)變?yōu)橐粋€(gè)單獨(dú)的VHDL文件(一個(gè)元件)
?
黑盒子化設(shè)計(jì),可將自己的VHDL代碼加入到Simulink設(shè)計(jì)中,并規(guī)定SignalComplier把哪個(gè)子系統(tǒng)模塊轉(zhuǎn)化成VHDL文件。此過程中,通過HDL input/output模塊與其他模塊連接。
?
第12章以后 DSP Builder各庫模塊簡介
?
——————————————————————————————————————————————————————
官網(wǎng)資料是最好的學(xué)習(xí)材料
DSP Builder User Guide V2.1.3
DSP Builder 的特性:
將MATLAB和Simulink與Quartus II連接起來
支持Altera DSP核,Altera官網(wǎng)可以下載
支持Altera器件
支持SignalTap II 邏輯分析儀——一種嵌入式信號分析儀,探測Altera器件內(nèi)部信號,將數(shù)據(jù)導(dǎo)入到Matlab工作空間
包含SOPC模塊
包含PLL模塊
包含狀態(tài)機(jī)模塊
自動生成VHDL測試和向量文件
自動加載VHDL綜合和編譯
?
概述:
DSP Builder Handbook V13.0
要為你的DSP Builder設(shè)計(jì)創(chuàng)建和編譯一個(gè)Quartus II工程,并且將你的設(shè)計(jì)下載到Altera FPGA上,通過以下步驟添加Signal Compiler模塊。
AltLab庫→Signal Compiler→雙擊此模塊,出現(xiàn)對話框,選擇器件系列→點(diǎn)擊Compile→編譯完后,點(diǎn)擊OK→在mdl中點(diǎn)擊保存
?
RTL仿真(ModelSim中):AltLab→TestBench模塊→雙擊此模塊→確保Enable Test Bench generation選中→切換到Advanced選項(xiàng)卡選中Launch GUI選項(xiàng)(在調(diào)用ModelSim仿真時(shí)啟動ModelSim界面)→點(diǎn)Generate HDL(生成基于VHDL的testbench)→點(diǎn)擊Run Simulink(生成Simulink仿真結(jié)果)→點(diǎn)擊Run ModelSim(把你的設(shè)計(jì)加載到ModelSim)
仿真結(jié)果在ModelSim的波形窗口中顯示,testbench在aclr輸出信號的脈沖到來時(shí)初始化你設(shè)計(jì)的所有寄存器。
所有的波形默認(rèn)都是用數(shù)字格式顯示,可以將某個(gè)信號的顯示格式改為模擬。ModelSim 6.4a中,右鍵彈出菜單,可以選擇Format,選Analog(Automatic),其他版本可能有所不同。
波形窗口可以放大(Zoom Full)。
?
DSP Builder教程的入門就到此為止,下一章將講解如何把DSP Builder設(shè)計(jì)加入到一個(gè)新的或已存在的Quartus II工程中。
用戶指南的隨后的章節(jié)給出了例程來說明DSP Builder所支持的其他特性。
?
2-21 將設(shè)計(jì)導(dǎo)入到Quartus II工程
DSP Builder使用的是Signal Compiler模塊創(chuàng)建的Quartus II工程(此工程是自動產(chǎn)生的,用于仿真、HIL等?),這一章描述怎樣將你的設(shè)計(jì)加入到一個(gè)新的或已建好的工程中。
開始之前,確保你的設(shè)計(jì)已經(jīng)用Signal Compiler模塊編譯過了("Compiling the Design" on page 2–17)。
是自動產(chǎn)生的
1、創(chuàng)建Quartus II工程
打開Quartus II→New Project Wizard→工程目錄、名稱(一般頂層設(shè)計(jì)實(shí)體top-level design entity與工程有相同的名稱)→添加文件→選擇器件→完成
2、添加DSP Builder設(shè)計(jì)到工程中
View菜單→Utility Windows工程窗口→Tcl Console(TerminalCommandLanguage終端命令語言 控制臺)
運(yùn)行mdl文件同目錄下的xxx_add.tcl腳本,命令如下:
# source <the mdl path>/xxx_add.tcl
(#表示提示符,僅在此處表示是一行命令的開始,不用寫;在Linux系統(tǒng)中source與"."意義相同,即將后面的腳本文件作為程序執(zhí)行)
注意:路徑中的"\"應(yīng)替換為"/",比如F:\workspace\newmdl應(yīng)寫作F:/workspace/newmdl,個(gè)人猜測是因?yàn)榭刂婆_程序是按Linux系統(tǒng)下的習(xí)慣開發(fā)的。
如果你把DSP Builder設(shè)計(jì)和Quartus II工程放在同一個(gè)文件層級下,路徑也可以使用相對路徑(.表示當(dāng)前目錄,..表示上一級目錄)
3、點(diǎn)擊Files標(biāo)簽
4、把xxx.mdl設(shè)置為頂層實(shí)體(Select Set as Top-Level Entity)
5、Start Compilation編譯
Note:你可以從例程文件中拷貝組件聲明到你自己的代碼。、
總結(jié):此處是利用腳本文件自動導(dǎo)入,將mdl和mdlxml文件也包含進(jìn)工程中(qip中所包含),從而編譯等工作不需matlab參與。
也可以利用signal compiler的Export HDL功能導(dǎo)出VHDL文件,利用qip(與上面的不同,這個(gè)是包含了一堆vhd文件)導(dǎo)入到工程中,具體使用還有待探索
?
12 管理工程和文件
DSP Builder設(shè)計(jì)要求如下文件來存儲所有的組件:
頂層simulink模型xxx.mdl
DSPBuilder_xxx_import目錄及其內(nèi)容(包含HDL import模塊、狀態(tài)機(jī)編輯器、宏模塊的設(shè)計(jì)需要此目錄)
所有imported HDL模塊的源文件
所有Intel十六進(jìn)制存儲空間初始化文件.hex
所有自定義庫文件
Simulink模型分析文件xxx.mdlxml存儲了模型的一些(設(shè)置、校驗(yàn)等)信息
Note:當(dāng)把.mdlxml文件包含到Quartus II工程中,就不需要調(diào)用MATLAB來綜合此設(shè)計(jì)了。如果沒包含此文件,仍可以綜合,只不過在流程中必須調(diào)用MATLAB。如果不想Quartus II調(diào)用MATLAB,或者手頭沒有MATLAB,可以任選一種方法:
·在工程中包含mdl文件和相應(yīng)的mdlxml文件
·導(dǎo)出HDL,將導(dǎo)出的HDL文件作為源文件,而不需要在工程中涉及.mdl和.mdlxml
?
與源碼控制系統(tǒng)相結(jié)合
Altera建議你存儲Quartus II archive存檔(.qar)文件,而不是分散的HDL文件,便于源碼控制
要?jiǎng)?chuàng)建qar文件,在Quartus II軟件中執(zhí)行如下步驟:
1、創(chuàng)建一個(gè)Quartus II工程,包含Quartus II IP file(.qip)文件,該文件是由DSP Builder導(dǎo)出HDL流程所創(chuàng)建的(與Signal Compiler執(zhí)行Compile時(shí)創(chuàng)建的不同)
2、執(zhí)行Analysis and Elaboration確保設(shè)計(jì)包含所有的黑箱系統(tǒng)文件
3、通過點(diǎn)擊project菜單→Archive Project,對工程進(jìn)行存檔,生成qar文件
關(guān)于Archive,以下是Archive對話框的高級設(shè)置項(xiàng)及其描述(存檔意為將現(xiàn)在的工程相關(guān)的所有東西存檔,便于恢復(fù)和對比,它與保存整個(gè)工程目錄不同的是,它是可恢復(fù)現(xiàn)場的最小集合,不包含編譯的中間文件和目標(biāo)文件,通過qar文件可以在其他地方恢復(fù)現(xiàn)在的工程,通過編譯可產(chǎn)生相同的目標(biāo)文件)
Note:任何導(dǎo)入到DSP Builder作為自定義模塊的HDL元素,都可能需要他們自己的源碼控制。在頂級qip文件的# Imported IP files段中提到的子qip文件,列出了Import HDL所需要的文件。
?
?
Import HDL:略
MegaCore Functions:略
Memory Initialization Files:Intel十六進(jìn)制格式hex文件用于在仿真和硬件生成中對存儲初始化。如果它們是由HDL Import或宏功能模塊生成的,確保他們在import目錄下。This fact is generally not the case if you generate the files with HDL Import.
?
Export HDL:從mdl導(dǎo)出HDL文件
你可以導(dǎo)出DSP Builder生成的可綜合HDL文件到Quartus II工程中,使用Signal Compiler模塊下的Export 標(biāo)簽來執(zhí)行。
在MATLAB命令行中執(zhí)行alt_dspbuilder_exportHDL命令也可以導(dǎo)出HDL,其語法結(jié)構(gòu)為:
<exportDir_value> alt_dspbuilder_exportHDL(<model>, <exportDir>)
model是mdl文件的名稱,它的名稱總是導(dǎo)出的Quartus II工程的頂級實(shí)體的名稱
exportDir是包含導(dǎo)出文件的目錄。如果省略了這一項(xiàng),DSP Builder將使用默認(rèn)或前一個(gè)導(dǎo)出目錄
exportedDir_value是返回字符串,表示輸出目錄
通過執(zhí)行這一動作,在導(dǎo)出目錄生成一系列源文件,并包含一個(gè)qip文件(用于導(dǎo)入所有的VHDL文件),與設(shè)計(jì)的頂層相對應(yīng)。
?
使用導(dǎo)出的HDL:
導(dǎo)出完成后,你可以使用"New Project Wizard"創(chuàng)建一個(gè)新工程,添加相應(yīng)的qip文件作為工程的單個(gè)(唯一)源文件。對于描述黑箱組件的要求也許還有其他的qip文件。此頂級文件(qip)可以自動尋找這些文件。
Note:如果要遷移包含宏功能模塊的設(shè)計(jì)到其他位置,如果包含庫組件的絕對路徑,則需要對他們的qip文件編輯一下。Windows電腦和Linux電腦之間的遷移需要使用Export HDL。然而,這個(gè)動作需要添加一個(gè)額外的文件alt_dspbuilder_package.vhd(在QUARTUS_ROOTDIR>\libraries\vhdl\altera)
?
重要!
在一個(gè)頂層Quartus II工程中集成多個(gè)(當(dāng)然也可以是一個(gè)!)模型
需要mdl和ipx文件
使用qip(Quartus II IP)文件作為每個(gè)DSP Builder模型的唯一源文件。
qip文件在單個(gè)文件中包含了所有文件和IP設(shè)計(jì)的路徑。
qip文件允許你只需要添加一個(gè)文件就可以添加IP設(shè)計(jì)到工程中,而不需要單獨(dú)的添加所有需要的文件。
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.
如果多個(gè)mdl包含相同的IP核,qip中重復(fù)提到IP庫,Quartus II報(bào)告沖突,則需要手動編輯qip,移除多余的庫。
如果DSP Builder設(shè)計(jì)包含HDL import或IP宏模塊,……
除了qip文件,頂層的工程還需要一個(gè)IP Index(ipx)文件確定附加的路徑來尋找組件。特別的,對于DSP Builder設(shè)計(jì),Quartus II軟件需要ipx文件用于模型中使用到的HDL import和IP宏模塊。
本質(zhì)上來說,DSP Builder系統(tǒng)是一個(gè)由DSP Builder模塊(是實(shí)體,但很容易發(fā)現(xiàn))和非原生模塊(例如HDL import和宏功能模塊)組成的實(shí)體。
Note:DSP Builder在主Quartus II ipx文件中指定了主實(shí)體,不需要額外的動作——只需要再增加額外的HDL import和宏功能模塊實(shí)體即可。
?
?
關(guān)于位寬設(shè)置:對小數(shù)來說,小數(shù)位寬越大越精確,如果數(shù)特別小,最好將小數(shù)位寬設(shè)置的足夠大,否則算出來的數(shù)有可能被舍掉而變?yōu)?
Pipelined Adder:假設(shè)輸入信號整數(shù)部分用補(bǔ)碼表示(帶符號位)需要n位,則其輸入(也是輸出)整數(shù)位寬應(yīng)設(shè)置為n+1(如果結(jié)果不超n,也可以設(shè)置為n)
Multiplier:假設(shè)輸入信號整數(shù)部分用補(bǔ)碼表示(帶符號位)需要n位,則其輸入整數(shù)位寬應(yīng)設(shè)置為n
轉(zhuǎn)載于:https://www.cnblogs.com/PhiloSky/archive/2013/05/07/3065847.html
總結(jié)
以上是生活随笔為你收集整理的DSPBuilder笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [批处理]截取for命令里面的变量%%i
- 下一篇: MediaRecorder录像怎么旋转呀