新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用插值查找表實現FPGA的DSP功能

        用插值查找表實現FPGA的DSP功能

        作者: 時間:2011-03-08 來源:網絡 收藏

        我們是否能夠提供一款其功能可滿足客戶所有獨特設計要求的DSP內核。有時候內核會太大,太小或者不夠快。有時,我們會開發一款能確切滿足客戶需求的內核,并迅速以CORE GeneratorTM商標推出。不過即便在這種情況下,客戶仍然想要一套特定的DSP功能,而且刻不容緩。在這些情況下,我常常建議他們使用我們器件中的插值查找表來定制他們的DSP功能。

        本文引用地址:http://www.104case.com/article/150978.htm

          查找表 (LUT) 實質上是一個存儲元件,能夠根據任何給定的輸入狀態組合,“查找”輸出,以確保每個輸入都有確切的輸出。采用LUT來實現 DSP功能具有一些重大優勢:

          您可用諸如MATLAB®或Simulink®等高抽象層編程語言改變LUT內容。

          您可以設計一項DSP功能來運行那些采用離散邏輯運算將極度困難的數學函數,比如l y=log(x)、y=exp(x)、y=1/x、y=sin(x) 等。

          LUT還可輕松執行在可配置邏輯塊 (CLB)l 芯片,以及嵌入式乘法單元或DSP48可編程乘法累加 (MAC) 單元方面可能要求過多FPGA資源的復雜數學函數。

          不過,以這種方式使用LUT當然也會存在一些弊端。當您使用LUT來實現DSP功能時,您必須使用塊RAM (BRAM) 元件。若執行函數 y=sqrt(x)(其中x 表示16位輸入,y 表示18位輸出),每個變量則需要約64個18KB BRAM單元。如果,比如說,您的目標是實現小型化Spartan®器件,或者您有太多的運算需要執行,無法為每個變量省出64個BRAM單元,建議您放棄這種需要如此大量BRAM單元的方法,從系統架構的角度來看,這種方法代價太大。

          插值LUT方法不僅具有LUT方法在實現DSP功能時所帶來的各種優勢,而且無需使用太多BRAM單元。采用這種方法,您可以使用來自容量較小的 LUT (比如,1000字 LUT)的連續輸出,線性地對其內插,以模擬更大容量的LUT。這樣,您就可以實現比1000 字 LUT 更高的數值分辨率。此外,通過這種方法,僅需 1 個 BRAM、1 個嵌入式乘法器(或DSP48),以及少數幾個CLB芯片便可實施控制邏輯,因此LUT的使用成本變得更加合理化。而且,從信噪比的角度來看,其數值精度也是非常讓人滿意。

          當然,應用插值LUT (ILUT) 方法需要一定的技巧。舉例來說,采用該方法執行y=sqrt(x) 函數時,可以清楚地顯示ILUT在面積占用、時序和數值精度方面的性能。我們先大致看一下這個示例,然后我再講解部分實例,說明如何使用這種方法來滿足客戶截然不同的需求,比如讓傳遞函數呈非線性的傳感器實現線性化,以及實施自適應有限脈沖響應(FIR) 濾波器以消除合成孔徑雷達 (SAR) 圖像上的斑點噪聲。

          使用System Generator for DSP進行設計

          為在賽靈思FPGA上實施DPS算法,我借助了采用MathWorks Simulink基于模型設計方法的System Generator for DSP設計與綜合工具。System Generator得益于賽靈思在Simulink 環境中的DSP模塊組,可自動調用CORE Generator為DSP構建塊生成高度優化的網表。Simulink是一種雙精度浮點設計工具,而System Generator則是一款定點運算工具。不管怎樣,您只要將這兩種工具協同使用,就可以定義每個信號的總位數以及每個信號的二進制位置,從而在定點運算中巧妙處理分數。仿真結果周期精確、位真,因此您可以方便地將它們與MATLAB腳本或Simulink模塊生成的浮點參考值相比較,以檢查量化誤差。

          圖1顯示了System Generator中ILUT方案的頂層結構圖。為讓這個方法盡可能一般化,假設nx=16位中的輸入變量 x 的取值范圍為0≤x1,因此其格式為“無符號16位加上二進制點右邊的16 位”,也稱為Ufix_16_16格式。最高有效位 (MSB) 和最低有效位 (LSB) 模塊分別對應輸入數據nb=10的最高位和nx-nb=6的最低位。這些信號被命名為x0和dx。y=sqrt(x) 輸出則以ny=17位二進制數表示,格式為:Ufix_17_17。

          

        stem Generator for DSP中插值查找表頂層方框圖

          圖 1. System Generator for DSP中插值查找表頂層方框圖

          圖2顯示了1000字小容量LUT通過雙端口RAM模塊的部署步驟。由于該模塊系只讀存儲器,布爾常數模塊We_const強制將寫入歸零。信號 X0和X0+1則用作ROM表上后續的兩個地址。Data_const模塊的零常數定義了任何ROM字的大小(即本例中的ny)。

          

        System Generator for DSP中的小容量LUT圖

          圖2 System Generator for DSP中的小容量LUT圖

          下面的公式顯示了以x0為x的最高有效位的情況下,如何在兩個已知點(x0,y0)和(x1,y1)之間插入坐標為(x,y)的點:

          

        公式

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


        上一頁 1 2 3 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 白水县| 明光市| 巴彦淖尔市| 西丰县| 武威市| 尚志市| 渝北区| 扎赉特旗| 哈密市| 抚顺县| 淮滨县| 鹤庆县| 新津县| 弥渡县| 阳西县| 竹溪县| 平阴县| 平和县| 军事| 锡林郭勒盟| 延安市| 韶山市| 虹口区| 塘沽区| 洛扎县| 砀山县| 乳源| 绵阳市| 平定县| 临湘市| 涿州市| 合川市| 明星| 大安市| 固始县| 荔波县| 时尚| 保定市| 繁峙县| 武安市| 台中县|