作為賽靈思的現(xiàn)場工程師,我常常問這樣的問題:我們是否能夠提供一款其功能可滿足客戶所有獨(dú)特設(shè)計(jì)要求的DSP內(nèi)核。有時(shí)候內(nèi)核會(huì)太大,太小或者不夠快。有時(shí),我們會(huì)開發(fā)一款能確切滿足客戶需求的內(nèi)核,并迅速以COREGeneratorTM商標(biāo)推出。不過即便在這種情況下,客戶仍然想要一套特定的DSP功能,而且刻不容緩。在這些情況下,我常常建議他們使用我們器件中的插值查找表來定制他們的DSP功能。
查找表 (LUT) 實(shí)質(zhì)上是一個(gè)存儲(chǔ)元件,能夠根據(jù)任何給定的輸入狀態(tài)組合,“查找”輸出,以確保每個(gè)輸入都有確切的輸出。采用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)然也會(huì)存在一些弊端。當(dāng)您使用LUT來實(shí)現(xiàn)DSP功能時(shí),您必須使用塊RAM (BRAM) 元件。若執(zhí)行函數(shù)y=sqrt(x)(其中x 表示16位輸入,y 表示18位輸出),每個(gè)變量則需要約64個(gè)18KBBRAM單元。如果,比如說,您的目標(biāo)是實(shí)現(xiàn)小型化Spartan?器件,或者您有太多的運(yùn)算需要執(zhí)行,無法為每個(gè)變量省出64個(gè)BRAM單元,建議您放棄這種需要如此大量BRAM單元的方法,從系統(tǒng)架構(gòu)的角度來看,這種方法代價(jià)太大。
插值LUT方法不僅具有LUT方法在實(shí)現(xiàn)DSP功能時(shí)所帶來的各種優(yōu)勢,而且無需使用太多BRAM單元。采用這種方法,您可以使用來自容量較小的LUT (比如,1000字 LUT)的連續(xù)輸出,線性地對其內(nèi)插,以模擬更大容量的LUT。這樣,您就可以實(shí)現(xiàn)比1000 字 LUT更高的數(shù)值分辨率。此外,通過這種方法,僅需 1 個(gè) BRAM、1個(gè)嵌入式乘法器(或DSP48),以及少數(shù)幾個(gè)CLB芯片便可實(shí)施控制邏輯,因此LUT的使用成本變得更加合理化。而且,從信噪比的角度來看,其數(shù)值精度也是非常讓人滿意。
當(dāng)然,應(yīng)用插值LUT (ILUT) 方法需要一定的技巧。舉例來說,采用該方法執(zhí)行y=sqrt(x)函數(shù)時(shí),可以清楚地顯示ILUT在面積占用、時(shí)序和數(shù)值精度方面的性能。我們先大致看一下這個(gè)示例,然后我再講解部分實(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模塊組,可自動(dòng)調(diào)用COREGenerator為DSP構(gòu)建塊生成高度優(yōu)化的網(wǎng)表。Simulink是一種雙精度浮點(diǎn)設(shè)計(jì)工具,而SystemGenerator則是一款定點(diǎn)運(yùn)算工具。不管怎樣,您只要將這兩種工具協(xié)同使用,就可以定義每個(gè)信號的總位數(shù)以及每個(gè)信號的二進(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,因此其格式為“無符號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模塊的部署步驟。由于該模塊系只讀存儲(chǔ)器,布爾常數(shù)模塊We_const強(qiáng)制將寫入歸零。信號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)插步驟見圖3?!癛einterpret”模塊在不改變二進(jìn)制表示法的情況下,可改變dx=x-x0信號。其重置了二進(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 的值。
從硬件角度來看,這些模塊什么都不占用。總的來說(且根據(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)整,但不會(huì)與圖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è),可以在任何一個(gè)時(shí)鐘周期提供新的輸出。時(shí)延為10個(gè)時(shí)鐘周期,最大數(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模塊。在本例中,總時(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 頁:LUT內(nèi)容用編程語言修改的應(yīng)用教程
- 第 2 頁:線性化非線性傳感器
- 第 3 頁:斑點(diǎn)噪聲消除
- matlab(228270)
- 編程(92185)
- 編程語言(32911)
相關(guān)推薦
C語言-文件編程

初識(shí)FPGA CLB之LUT實(shí)現(xiàn)邏輯函數(shù)

什么是C語言?單片機(jī)有什么特點(diǎn)?為什么要用C語言編程?


8位單片機(jī)用C語言編程為什么可以實(shí)現(xiàn)16位數(shù)據(jù)的加減
LUT名字的數(shù)字含義是什么?
用C語言或匯編語言進(jìn)行單片機(jī)編程哪一個(gè)會(huì)更好
編程語言
FPGA基礎(chǔ)知識(shí)0(查找表LUT和編程方式)
Keil下STM32的C與匯編語言混合編程
STM8的C語言編程學(xué)習(xí)資料總匯(一)
為什么我會(huì)使用LUT5_L而不是RLOC?
使用的LUT觸發(fā)器對的數(shù)量與Slice Register和Slice LUT的關(guān)系是什么?
關(guān)于用匯編和C語言編程的問題
單片機(jī)編程用什么語言
單片機(jī)解密的程序能修改嗎?
如何學(xué)習(xí)編程c++語言?
如何用C語言實(shí)現(xiàn)OOP編程?
嵌入式用什么語言編程?
嵌入式Linux的C語言編程有哪些要點(diǎn)
是否可以使用PBL更新QSPI LUT條目?
請教個(gè)VHDL實(shí)現(xiàn)LUT的問題 ?
請問如何將Memory LUT用作邏輯LUT?
請問怎么用TCL語言和C語言聯(lián)合編程,以PC/SC為編程接口實(shí)現(xiàn)智能卡的測試平臺(tái)?
匯編語言編程藝術(shù)(PDF)

linux下c語言編程pdf

實(shí)驗(yàn)二DSP匯編語言編程基礎(chǔ)

C語言編程技巧程序集

DSP匯編語言編程基礎(chǔ)

嵌入式c語言編程(由淺入深)

plc編程語言有幾種_plc常用編程語言介紹


五種編程語言簡介及應(yīng)用

LUT如何構(gòu)成邏輯函數(shù)

如何使用腳本編程語言詳細(xì)使用資料講解免費(fèi)下載

PDF編輯器中文版怎么修改PDF文本內(nèi)容

C語言入門教程之C語言編程實(shí)例源代碼資料免費(fèi)下載

嵌入式系統(tǒng)C語言編程實(shí)戰(zhàn)教程合集


使用C語言來編寫51單片機(jī)液晶顯示屏幕的修改密碼功能的程序免費(fèi)下載

PLC目前最常用的5種編程語言的規(guī)劃和編程方法詳解


使用C語言進(jìn)行IOT物聯(lián)網(wǎng)編程的程序免費(fèi)下載

C語言編程的經(jīng)典練習(xí)題資料免費(fèi)下載

步進(jìn)電機(jī)控制的C語言編程資料免費(fèi)下載

PLC編程語言有哪些特點(diǎn)和形式

Java編程語言基礎(chǔ)教程免費(fèi)下載

單片機(jī)C語言編程的關(guān)鍵字詳細(xì)說明

fpga用什么編程語言_fpga的作用

C語言編程及GPIO應(yīng)用的學(xué)習(xí)課件免費(fèi)下載

物理可級聯(lián)的LUT的優(yōu)勢在哪?


世界上最賺錢的編程語言是什么?


Verilog是編程語言嗎

單片機(jī)編程用什么語言?

單片機(jī)c語言+編程c語言_C和C ++編程語言有什么區(qū)別?

單片機(jī)c語言+編程c語言_C編程語言簡介

MAX6345LUT+T PMIC - 監(jiān)控器

MAX6827LUT+T PMIC - 監(jiān)控器

MAX6828LUT+T PMIC - 監(jiān)控器

以Python編程語言為例介紹編程語言

PLC編程語言的類型和具有哪些特點(diǎn)

PLC編程語言的國際標(biāo)準(zhǔn) 和C語言的區(qū)別

plc編程是什么 plc編程語言

PLC各種編程語言特點(diǎn)

基于PASCAL的高級編程語言——SCL編程語言


LUT是什么構(gòu)成的?FPGA里的LUT有什么作用?


PLC編程語言的特點(diǎn)

51單片機(jī)編程開發(fā)之C語言基礎(chǔ)二


五種支持plc編程的語言有哪些


PLC的編程語言和方法

基于Rust開發(fā)的編程語言

Python編程語言屬于什么語言

腳本語言和編程語言的區(qū)別

plc編程語言與c語言的聯(lián)系 c語言和PLC有什么區(qū)別

評論