用插值查找表實(shí)現(xiàn)FPGA的DSP功能
內(nèi)插步驟見圖3。“Reinterpret”模塊在不改變二進(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 的值。
圖3 System Generator for DSP的線性內(nèi)插圖
從硬件角度來看,這些模塊什么都不占用??偟膩碚f(且根據(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è),可以在任何一個(gè)時(shí)鐘周期提供新的輸出。時(shí)延為10個(gè)時(shí)鐘周期,最大數(shù)據(jù)速率達(dá)194.70MSPS(每秒百萬采樣數(shù))。從數(shù)值精度來說,對1000或2000字ILUT而言,參考浮點(diǎn)結(jié)果與System Generator for DSP定點(diǎn)輸出的量化誤差之間的比值,即信噪比分別為 71.94dB或77.95dB。
除ILUT外,我們還可應(yīng)用賽靈思System Generator for DSP提供的Reference Math Blockset(參考數(shù)學(xué)模塊組)中的CORDIC SQRT模塊。在本例中,總時(shí)延為37個(gè)時(shí)鐘周期,最大數(shù)據(jù)速率達(dá)115.18 MSPS,區(qū)域資源占用為940片觸發(fā)器,總共有885個(gè)四輸入LUT,560個(gè)占用的芯片以及兩個(gè)MULT 18x18嵌入式乘法器。信噪比為40.64dB。這些結(jié)果顯示CORDIC是實(shí)施定點(diǎn)數(shù)學(xué)運(yùn)算的理想方法,但I(xiàn)LUT在許多方面更加出色。
線性化非線性傳感器
目前許多企業(yè)在工業(yè)控制系統(tǒng)中使用“智能傳感器”,以滿足低占用面積、低功耗、高性能、最低成本以及最短開發(fā)時(shí)間等要求。通用智能傳感器可視為一個(gè)由傳感器及其信號控制線路、模數(shù)轉(zhuǎn)換器 (ADC) 、帶或不帶嵌入式處理器的相關(guān)DSP子系統(tǒng)組成的功能組件,所有這些功能塊都集成在的同一器件上,如圖4所示。
圖4. 智能傳感器的方框圖
智能傳感器的目的是將物理量(如電機(jī)中的電流)轉(zhuǎn)化為數(shù)字電路能夠處理的數(shù)字信號。構(gòu)建這類傳感器所采用的技術(shù)及組件的某些特性通常會導(dǎo)致諸如失調(diào)、增益和非線性等誤差,進(jìn)而導(dǎo)致總體傳遞函數(shù)呈非線性。
一般來說,客戶會校正他們產(chǎn)品中運(yùn)行的DSP子系統(tǒng)所出現(xiàn)的上述誤差。如果 y=f(x) 是來自傳感器和ADC級聯(lián)的數(shù)字輸出信號,那么DSP必須執(zhí)行其反函數(shù)g(y)=f-1(y) 來補(bǔ)償非線性函數(shù),這樣總體輸出z即為:
這是直線方程,其斜率為m,縱截距為b。
最簡單的線性化方法是LUT法,采用存儲在ROM中的傳感器校準(zhǔn)點(diǎn)。不過,對16位的ADC來說,ROM顯得過大了,且需要64個(gè)BRAM單元。而內(nèi)插LUT則不然,是一個(gè)良好的解決方案。
舉例來說,我們假定非線性傳遞函數(shù)是一條拋物線。下一 MATLAB分段碼說明了如何生成最終直線的m和b參數(shù),以及如何計(jì)算 g(y)(即 f(x) 的反函數(shù))。圖5用三種顏色顯示了三條不同曲線。請注意在計(jì)算 f(x) 的反函數(shù) g(y) 過程中會丟失一些值。這是因?yàn)橛袔讉€(gè)y值相同的點(diǎn)對應(yīng)著不同的x點(diǎn)。因此,需要對 g(y) 進(jìn)行平滑化,填補(bǔ)所有缺失的點(diǎn)。(為精確起見,我沒有把這部分運(yùn)算包括在MATLAB分段碼中)
圖5.黑色拋物線表示非線性傳感器傳遞函數(shù)f(x) 的曲線;綠色直線表示線性化DSP子系統(tǒng)獲得的最終線性傳感器傳遞函數(shù)曲線;藍(lán)色拋物線則表示反函數(shù)g(y) 的曲線。
我采用非常類似于圖1-3的設(shè)計(jì),在System Generator for DSP中運(yùn)行基于定點(diǎn)周期的仿真,在非線性傳感器的總體輸出范圍內(nèi)得到了92.48dB的信噪比。
評論