作為賽靈思的現(xiàn)場工程師,我常常問這樣的問題:我們是否能夠提供一款其功能可滿足客戶所有獨(dú)特設(shè)計(jì)要求的DSP內(nèi)核。有時候內(nèi)核會太大,太小或者不夠快。有時,我們會開發(fā)一款能確切滿足客戶需求的內(nèi)核,并迅速以COREGeneratorTM商標(biāo)推出。不過即便在這種情況下,客戶仍然想要一套特定的DSP功能,而且刻不容緩。在這些情況下,我常常建議他們使用我們器件中的插值查找表來定制他們的DSP功能。
查找表 (LUT) 實(shí)質(zhì)上是一個存儲元件,能夠根據(jù)任何給定的輸入狀態(tài)組合,“查找”輸出,以確保每個輸入都有確切的輸出。采用LUT來實(shí)現(xiàn) DSP功能具有一些重大優(yōu)勢:
?您可用諸如MATLAB?或Simulink?等高抽象層編程語言改變LUT內(nèi)容。
?您可以設(shè)計(jì)一項(xiàng)DSP功能來運(yùn)行那些采用離散邏輯運(yùn)算將極度困難的數(shù)學(xué)函數(shù),比如 y=log(x)、y=exp(x)、y=1/x、y=sin(x) 等。
?LUT還可輕松執(zhí)行在可配置邏輯塊 (CLB) 芯片,以及嵌入式乘法單元或DSP48可編程乘法累加 (MAC) 單元方面可能要求過多FPGA資源的復(fù)雜數(shù)學(xué)函數(shù)。
不過,以這種方式使用LUT當(dāng)然也會存在一些弊端。當(dāng)您使用LUT來實(shí)現(xiàn)DSP功能時,您必須使用塊RAM (BRAM) 元件。若執(zhí)行函數(shù)y=sqrt(x)(其中x 表示16位輸入,y 表示18位輸出),每個變量則需要約64個18KBBRAM單元。如果,比如說,您的目標(biāo)是實(shí)現(xiàn)小型化Spartan?器件,或者您有太多的運(yùn)算需要執(zhí)行,無法為每個變量省出64個BRAM單元,建議您放棄這種需要如此大量BRAM單元的方法,從系統(tǒng)架構(gòu)的角度來看,這種方法代價太大。
插值LUT方法不僅具有LUT方法在實(shí)現(xiàn)DSP功能時所帶來的各種優(yōu)勢,而且無需使用太多BRAM單元。采用這種方法,您可以使用來自容量較小的LUT (比如,1000字 LUT)的連續(xù)輸出,線性地對其內(nèi)插,以模擬更大容量的LUT。這樣,您就可以實(shí)現(xiàn)比1000 字 LUT更高的數(shù)值分辨率。此外,通過這種方法,僅需 1 個 BRAM、1個嵌入式乘法器(或DSP48),以及少數(shù)幾個CLB芯片便可實(shí)施控制邏輯,因此LUT的使用成本變得更加合理化。而且,從信噪比的角度來看,其數(shù)值精度也是非常讓人滿意。
當(dāng)然,應(yīng)用插值LUT (ILUT) 方法需要一定的技巧。舉例來說,采用該方法執(zhí)行y=sqrt(x)函數(shù)時,可以清楚地顯示ILUT在面積占用、時序和數(shù)值精度方面的性能。我們先大致看一下這個示例,然后我再講解部分實(shí)例,說明如何使用這種方法來滿足客戶截然不同的需求,比如讓傳遞函數(shù)呈非線性的傳感器實(shí)現(xiàn)線性化,以及實(shí)施自適應(yīng)有限脈沖響應(yīng)(FIR) 濾波器以消除合成孔徑雷達(dá) (SAR)圖像上的斑點(diǎn)噪聲。

使用System Generator for DSP進(jìn)行設(shè)計(jì)
為在賽靈思FPGA上實(shí)施DPS算法,我借助了采用MathWorks Simulink基于模型設(shè)計(jì)方法的System Generatorfor DSP設(shè)計(jì)與綜合工具。System Generator得益于賽靈思在Simulink 環(huán)境中的DSP模塊組,可自動調(diào)用COREGenerator為DSP構(gòu)建塊生成高度優(yōu)化的網(wǎng)表。Simulink是一種雙精度浮點(diǎn)設(shè)計(jì)工具,而SystemGenerator則是一款定點(diǎn)運(yùn)算工具。不管怎樣,您只要將這兩種工具協(xié)同使用,就可以定義每個信號的總位數(shù)以及每個信號的二進(jìn)制位置,從而在定點(diǎn)運(yùn)算中巧妙處理分?jǐn)?shù)。仿真結(jié)果周期精確、位真,因此您可以方便地將它們與MATLAB腳本或Simulink模塊生成的浮點(diǎn)參考值相比較,以檢查量化誤差。
圖1顯示了System Generator中ILUT方案的頂層結(jié)構(gòu)圖。為讓這個方法盡可能一般化,假設(shè)nx=16位中的輸入變量 x的取值范圍為0≤x<1,因此其格式為“無符號16位加上二進(jìn)制點(diǎn)右邊的16 位”,也稱為Ufix_16_16格式。最高有效位 (MSB)和最低有效位 (LSB) 模塊分別對應(yīng)輸入數(shù)據(jù)nb=10的最高位和nx-nb=6的最低位。這些信號被命名為x0和dx。y=sqrt(x)輸出則以ny=17位二進(jìn)制數(shù)表示,格式為:Ufix_17_17。
圖2顯示了1000字小容量LUT通過雙端口RAM模塊的部署步驟。由于該模塊系只讀存儲器,布爾常數(shù)模塊We_const強(qiáng)制將寫入歸零。信號X0和X0+1則用作ROM表上后續(xù)的兩個地址。Data_const模塊的零常數(shù)定義了任何ROM字的大?。幢纠械膎y)。
下面的公式顯示了以x0為x的最高有效位的情況下,如何在兩個已知點(diǎn)(x0,y0)和(x1,y1)之間插入坐標(biāo)為(x,y)的點(diǎn):

注意X1和X0是這個小容量LUT的相鄰地址,它們之間只隔了一個最低有效位。由于這個小容量LUT的地址空間為nb 位,那么該LSB的值為2-nb。

內(nèi)插步驟見圖3?!癛einterpret”模塊在不改變二進(jìn)制表示法的情況下,可改變dx=x-x0信號。其重置了二進(jìn)制小數(shù)點(diǎn)(從UFix_6_0到UFix_6_6格式),并輸出nx-nb位二進(jìn)制數(shù)的一個分?jǐn)?shù),從而計(jì)算出 (x-x0)/2-nb 的值。
從硬件角度來看,這些模塊什么都不占用。總的來說(且根據(jù)我們通過ILUT方法應(yīng)用的函數(shù)類型),如果y1=0且y0=0,我們可以強(qiáng)制y1-y0=1,這樣我們就可以得到1/2-nb而不是0。我們采用Mux、Rational、Constant和Constant1模塊來執(zhí)行這項(xiàng)工作。剩下的Mult、Add和Sub模塊則執(zhí)行線性內(nèi)插公式。在本例中,我強(qiáng)制Mult模塊的輸出信號為17位分辨率,而非理論上要求的23位,因?yàn)榭傮w數(shù)值精度對本試驗(yàn)來說已經(jīng)足夠。此外,由于y-sqrt(x)函數(shù)呈單調(diào)遞增,因此所有結(jié)果都無符號。換句話說,不同的函數(shù)需要對數(shù)據(jù)類型進(jìn)行不同的精心調(diào)整,但不會與圖3所示的原理相去甚遠(yuǎn)。
假定我們以Spartan-3E 1200(fg320-4)為目標(biāo)器件,現(xiàn)使用ISE設(shè)計(jì)套件和System Generator for DSP 10.1 SP3版工具對其進(jìn)行布局和布線,結(jié)果其所占用的FPGA資源的總體情況如下:

?
該設(shè)計(jì)完全流水線作業(yè),可以在任何一個時鐘周期提供新的輸出。時延為10個時鐘周期,最大數(shù)據(jù)速率達(dá)194.70MSPS(每秒百萬采樣數(shù))。從數(shù)值精度來說,對1000或2000字ILUT而言,參考浮點(diǎn)結(jié)果與System Generator forDSP定點(diǎn)輸出的量化誤差之間的比值,即信噪比分別為 71.94dB或77.95dB。
除ILUT外,我們還可應(yīng)用賽靈思System Generator for DSP提供的Reference MathBlockset(參考數(shù)學(xué)模塊組)中的CORDIC SQRT模塊。在本例中,總時延為37個時鐘周期,最大數(shù)據(jù)速率達(dá)115.18MSPS,區(qū)域資源占用為940片觸發(fā)器,總共有885個四輸入LUT,560個占用的芯片以及兩個MULT18x18嵌入式乘法器。信噪比為40.64dB。這些結(jié)果顯示CORDIC是實(shí)施定點(diǎn)數(shù)學(xué)運(yùn)算的理想方法,但I(xiàn)LUT在許多方面更加出色。
本文導(dǎo)航
- 第 1 頁:LUT內(nèi)容用編程語言修改的應(yīng)用教程
- 第 2 頁:線性化非線性傳感器
- 第 3 頁:斑點(diǎn)噪聲消除
- matlab(238028)
- 編程(96940)
- 編程語言(39219)
C語言-文件編程
2666用C語言或匯編語言進(jìn)行單片機(jī)編程哪一個會更好
FPGA基礎(chǔ)知識0(查找表LUT和編程方式)
使用的LUT觸發(fā)器對的數(shù)量與Slice Register和Slice LUT的關(guān)系是什么?
單片機(jī)編程用什么語言
單片機(jī)解密的程序能修改嗎?
如何學(xué)習(xí)編程c++語言?
嵌入式用什么語言編程?
是否可以使用PBL更新QSPI LUT條目?
匯編語言編程藝術(shù)(PDF)
0Linux操作系統(tǒng)-C語言編程入門-pdf
193linux下c語言編程pdf
0實(shí)驗(yàn)二DSP匯編語言編程基礎(chǔ)
30C語言編程技巧程序集
107C語言與MATLAB接口編程與實(shí)例
0嵌入式c語言編程(由淺入深)
0stm32用什么語言編程
29990cpld用什么語言匯編編程?
14470arduino用什么語言編程
70946plc編程語言有幾種_plc常用編程語言介紹
56509
plc與C語言有什么關(guān)系_plc可以用c語言編程嗎_plc的C語言編程詳解
78647vb編程語言是做什么用的_VB編程語言有哪些
84980C語言作為高級編程語言中的一門“低級”語言為什么要學(xué)習(xí)?
8903如何學(xué)編程語言?好菜鳥學(xué)習(xí)編程語言的步驟
9149VHDL語言編程用什么編譯軟件_需要看哪方面的書籍
33924LUT如何構(gòu)成邏輯函數(shù)
11257如何使用腳本編程語言詳細(xì)使用資料講解免費(fèi)下載
3PDF編輯器中文版怎么修改PDF文本內(nèi)容
1054C語言入門教程之C語言編程實(shí)例源代碼資料免費(fèi)下載
35嵌入式系統(tǒng)C語言編程實(shí)戰(zhàn)教程合集
10088
使用C語言來編寫51單片機(jī)液晶顯示屏幕的修改密碼功能的程序免費(fèi)下載
0使用C語言進(jìn)行IOT物聯(lián)網(wǎng)編程的程序免費(fèi)下載
10C語言編程的經(jīng)典練習(xí)題資料免費(fèi)下載
16步進(jìn)電機(jī)控制的C語言編程資料免費(fèi)下載
11三菱plc編程用什么語言
8958
不同的編程語言分別用來開發(fā)什么?新人應(yīng)該選擇什么編程語言
3782dsp編程用什么語言_dsp編程如何實(shí)現(xiàn)的
29452
機(jī)器人編程語言的類型有哪些?
10729fpga用什么編程語言_fpga的作用
25366手機(jī)APP都是用什么編程語言寫的呢
41343
用哪種編程語言寫的應(yīng)用漏洞最嚴(yán)重 Java還是Python
2860C語言編程及GPIO應(yīng)用的學(xué)習(xí)課件免費(fèi)下載
2世界上最賺錢的編程語言是什么?
3254
Verilog是編程語言嗎
6909go語言枚舉類型怎么用
5780單片機(jī)編程用什么語言?
17049自學(xué)python單片機(jī)編程-用Python語言控制單片機(jī)
40單片機(jī)為什么一直用C語言,不用其他編程語言?只有學(xué)過的知道!
11在FPGA設(shè)計(jì)中可以用LUT組建分布式的RAM
6462PLC可編程邏輯控制器的編程語言
2647以Python編程語言為例介紹編程語言
1899PLC編程語言的類型和具有哪些特點(diǎn)
2134PLC編程語言的國際標(biāo)準(zhǔn) 和C語言的區(qū)別
6366stm32單片機(jī)用什么語言 編程 stm32各種型號
12766plc編程是什么 plc編程語言
8322上位機(jī)編程用什么語言 上位機(jī)編程軟件哪個好
16239基于PASCAL的高級編程語言——SCL編程語言
3821
關(guān)于編程語言開發(fā)技術(shù)和AI的部分
1029
PLC編程語言的特點(diǎn)
1783fpga用什么語言編程 fpga和嵌入式的區(qū)別
6482PLC的編程語言和方法
2495Python編程語言屬于什么語言
3109腳本語言和編程語言的區(qū)別
4124fpga是什么 fpga用什么編程語言
3084fpga芯片用什么編程語言
2695fpga用的是什么編程語言 fpga用什么語言開發(fā)
5029PLC編程語言和C語言的區(qū)別
6609PLC的編程方式及編程語言
2363labview是什么編程語言寫的
3205plc編程語言編程相關(guān)技巧有哪些
1736編程語言的誤區(qū)與常見問題
1192OpenHarmony通過掛載鏡像來修改鏡像內(nèi)容,RK3566鴻蒙開發(fā)板演示
1018
EE-33:用C語言對ADSP-21xx定時器進(jìn)行編程
0
電子發(fā)燒友App




評論