作為賽靈思的現(xiàn)場(chǎng)工程師,我常常問(wèn)這樣的問(wèn)題:我們是否能夠提供一款其功能可滿足客戶所有獨(dú)特設(shè)計(jì)要求的DSP內(nèi)核。有時(shí)候內(nèi)核會(huì)太大,太小或者不夠快。有時(shí),我們會(huì)開(kāi)發(fā)一款能確切滿足客戶需求的內(nèi)核,并迅速以COREGeneratorTM商標(biāo)推出。不過(guò)即便在這種情況下,客戶仍然想要一套特定的DSP功能,而且刻不容緩。在這些情況下,我常常建議他們使用我們器件中的插值查找表來(lái)定制他們的DSP功能。
查找表 (LUT) 實(shí)質(zhì)上是一個(gè)存儲(chǔ)元件,能夠根據(jù)任何給定的輸入狀態(tài)組合,“查找”輸出,以確保每個(gè)輸入都有確切的輸出。采用LUT來(lái)實(shí)現(xiàn) DSP功能具有一些重大優(yōu)勢(shì):
?您可用諸如MATLAB?或Simulink?等高抽象層編程語(yǔ)言改變LUT內(nèi)容。
?您可以設(shè)計(jì)一項(xiàng)DSP功能來(lái)運(yùn)行那些采用離散邏輯運(yùn)算將極度困難的數(shù)學(xué)函數(shù),比如 y=log(x)、y=exp(x)、y=1/x、y=sin(x) 等。
?LUT還可輕松執(zhí)行在可配置邏輯塊 (CLB) 芯片,以及嵌入式乘法單元或DSP48可編程乘法累加 (MAC) 單元方面可能要求過(guò)多FPGA資源的復(fù)雜數(shù)學(xué)函數(shù)。
不過(guò),以這種方式使用LUT當(dāng)然也會(huì)存在一些弊端。當(dāng)您使用LUT來(lái)實(shí)現(xiàn)DSP功能時(shí),您必須使用塊RAM (BRAM) 元件。若執(zhí)行函數(shù)y=sqrt(x)(其中x 表示16位輸入,y 表示18位輸出),每個(gè)變量則需要約64個(gè)18KBBRAM單元。如果,比如說(shuō),您的目標(biāo)是實(shí)現(xiàn)小型化Spartan?器件,或者您有太多的運(yùn)算需要執(zhí)行,無(wú)法為每個(gè)變量省出64個(gè)BRAM單元,建議您放棄這種需要如此大量BRAM單元的方法,從系統(tǒng)架構(gòu)的角度來(lái)看,這種方法代價(jià)太大。
插值LUT方法不僅具有LUT方法在實(shí)現(xiàn)DSP功能時(shí)所帶來(lái)的各種優(yōu)勢(shì),而且無(wú)需使用太多BRAM單元。采用這種方法,您可以使用來(lái)自容量較小的LUT (比如,1000字 LUT)的連續(xù)輸出,線性地對(duì)其內(nèi)插,以模擬更大容量的LUT。這樣,您就可以實(shí)現(xiàn)比1000 字 LUT更高的數(shù)值分辨率。此外,通過(guò)這種方法,僅需 1 個(gè) BRAM、1個(gè)嵌入式乘法器(或DSP48),以及少數(shù)幾個(gè)CLB芯片便可實(shí)施控制邏輯,因此LUT的使用成本變得更加合理化。而且,從信噪比的角度來(lái)看,其數(shù)值精度也是非常讓人滿意。
當(dāng)然,應(yīng)用插值LUT (ILUT) 方法需要一定的技巧。舉例來(lái)說(shuō),采用該方法執(zhí)行y=sqrt(x)函數(shù)時(shí),可以清楚地顯示ILUT在面積占用、時(shí)序和數(shù)值精度方面的性能。我們先大致看一下這個(gè)示例,然后我再講解部分實(shí)例,說(shuō)明如何使用這種方法來(lái)滿足客戶截然不同的需求,比如讓傳遞函數(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模塊組,可自動(dòng)調(diào)用COREGenerator為DSP構(gòu)建塊生成高度優(yōu)化的網(wǎng)表。Simulink是一種雙精度浮點(diǎn)設(shè)計(jì)工具,而SystemGenerator則是一款定點(diǎn)運(yùn)算工具。不管怎樣,您只要將這兩種工具協(xié)同使用,就可以定義每個(gè)信號(hào)的總位數(shù)以及每個(gè)信號(hào)的二進(jìn)制位置,從而在定點(diǎn)運(yùn)算中巧妙處理分?jǐn)?shù)。仿真結(jié)果周期精確、位真,因此您可以方便地將它們與MATLAB腳本或Simulink模塊生成的浮點(diǎn)參考值相比較,以檢查量化誤差。
圖1顯示了System Generator中ILUT方案的頂層結(jié)構(gòu)圖。為讓這個(gè)方法盡可能一般化,假設(shè)nx=16位中的輸入變量 x的取值范圍為0≤x<1,因此其格式為“無(wú)符號(hào)16位加上二進(jìn)制點(diǎn)右邊的16 位”,也稱為Ufix_16_16格式。最高有效位 (MSB)和最低有效位 (LSB) 模塊分別對(duì)應(yīng)輸入數(shù)據(jù)nb=10的最高位和nx-nb=6的最低位。這些信號(hào)被命名為x0和dx。y=sqrt(x)輸出則以ny=17位二進(jìn)制數(shù)表示,格式為:Ufix_17_17。
圖2顯示了1000字小容量LUT通過(guò)雙端口RAM模塊的部署步驟。由于該模塊系只讀存儲(chǔ)器,布爾常數(shù)模塊We_const強(qiáng)制將寫(xiě)入歸零。信號(hào)X0和X0+1則用作ROM表上后續(xù)的兩個(gè)地址。Data_const模塊的零常數(shù)定義了任何ROM字的大?。幢纠械膎y)。
下面的公式顯示了以x0為x的最高有效位的情況下,如何在兩個(gè)已知點(diǎn)(x0,y0)和(x1,y1)之間插入坐標(biāo)為(x,y)的點(diǎn):

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

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

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



評(píng)論