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