<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 電源與新能源 > 設計應用 > 一種基于FPGA硬件求解函數的簡(jiǎn)化方法

一種基于FPGA硬件求解函數的簡(jiǎn)化方法

作者: 時(shí)間:2018-07-24 來(lái)源:網(wǎng)絡(luò ) 收藏

摘 要:本文研究了一種運用進(jìn)行數據處理的方法,包括:提取輸入數據的高log2M個(gè)比特位的數據,作為高有效位,根據預先設置的目標函數的計算表格,查找所述高有效位對應的目標函數值y(n)以及高有效位+1對應的目標函數值y(n+1);提取輸入數據的剩余比特位數據,作為低有效位,并將所述低有效位與y(n)和y(n+1)的差值相乘,得到偏移值off(n),將該偏移值與所述高有效位對應的目標函數值y(n)相加,將計算結果作為所述輸入數據對應的目標函數值。本方法具有控制簡(jiǎn)單、結構規則、單運算周期、計算精度較高的特點(diǎn),適合于的數據處理實(shí)現。

本文引用地址:http://dyxdggzs.com/article/201807/383564.htm

引言

現場(chǎng)可編程門(mén)陣列()芯片在許多領(lǐng)域均有廣泛的應用,尤其是在無(wú)線(xiàn)通信領(lǐng)域。FPGA具有極強的實(shí)時(shí)性和并行處理能力,這使其對信號進(jìn)行實(shí)時(shí)處理成為可能。FPGA內部一般都包含邏輯單元(查找表/觸發(fā)器)、存儲單元(BRAM)、乘加單元(MAC)和一些其他的時(shí)鐘、引腳單元等[1-3]。

現代處理的主要發(fā)展趨勢是:算法結構日趨復雜,計算量大,實(shí)時(shí)性要求高,并且包含大量的三角函數、開(kāi)方、對數等復雜函數的計算。但FPGA內部的乘加單元并不適合直接進(jìn)行此類(lèi)函數的計算,需要把各種復雜函數分解為簡(jiǎn)單的移位、加法和乘法結構,進(jìn)而在FPGA中實(shí)現[4]。

當前,在FPGA上實(shí)現三角函數、開(kāi)方、對數等復雜函數的計算,技術(shù)領(lǐng)域最常見(jiàn)的是除法,其次為開(kāi)方和三角函數,很少涉及對數和其他復雜一些的函數。而在FPGA具體的實(shí)現上,此類(lèi)函數一般采用直接查表法或冪級數展開(kāi)法,對于三角函數和開(kāi)方的計算,也會(huì )采用CORDIC的計算方法,但這三種方法的應用都有一定的局限性[4]。

1 現有的FPGA實(shí)現方法

(1)在FPGA上采用直接查表方法,來(lái)實(shí)現函數的計算,具有:

優(yōu)點(diǎn)——通用性強、結構簡(jiǎn)單;

缺點(diǎn)——隨著(zhù)輸入位寬的增加,內部存儲量的消耗呈指數性增長(cháng)。

表1給出了不同輸入輸出位寬所需要的存儲單元(BRAM)。

表1 不同輸入輸出位寬所需要的存儲單元

可以看出,輸入輸出位寬較小時(shí),直接查表法可以滿(mǎn)足實(shí)現要求,但在處理領(lǐng)域,輸入輸出一般都在16bits以上,這時(shí)采用直接查表法就很難滿(mǎn)足實(shí)現需求。

這里以開(kāi)方算法為例進(jìn)行說(shuō)明。采用直接查表法進(jìn)行開(kāi)方計算有2種方式。

方式一:在完全保證精度的條件下,采用直接查表法。若開(kāi)方為16bits輸入16bits輸出,在完全保證精度的條件下,FPGA就需要存儲216深度的數據,需要64塊18k BRAM的存儲空間。而一片中等FPGA一般包含幾十塊到幾百塊的18k BRAM存儲單元,此時(shí)計算就要用掉大部分的存儲單元,顯然不滿(mǎn)足實(shí)現的資源需求。

方式二:降低精度,減少輸入位寬,采用直接查表法。

表2 直接查表法開(kāi)方誤差表

可以看出,隨著(zhù)實(shí)際有效輸入的增加,計算精度變大,很難滿(mǎn)足計算的誤差要求。

(2)在FPGA上采用冪級數展開(kāi)法計算函數。

優(yōu)點(diǎn)——計算精度可控,多級展開(kāi)可以達到較高的計算精度;

缺點(diǎn)——冪級數展開(kāi)法為了達到較高的精度,需要多級展開(kāi),這樣就需要采用較多的資源來(lái)實(shí)現。

以exp為例(0~π/4范圍內),采用三角函數冪級數展開(kāi)法:

若輸入為16bits,采用冪級數展開(kāi)法的計算框圖如圖1。

從資源方面考慮,三角函數冪級數展開(kāi)法在FPGA中的實(shí)現需要5級乘法和3級加法,考慮每級乘法位寬需要擴展,實(shí)際需要FPGA的12個(gè)乘法器

(18bitsmes;18bits)資源。此外從誤差方面考慮,0~π/4范圍內,cosΦ的最大誤差為0.046%, sinΦ的最大誤差為0.35%。

圖 1 冪級數展開(kāi)法實(shí)現exp計算

此外冪級數展開(kāi)法的應用范圍也比較有限,開(kāi)方、倒數、對數、三角函數的計算可以采用冪級數展開(kāi)法,但對于等較復雜的函數計算就不再適合用此方法進(jìn)行計算。

(3)在FPGA上采用CORDIC法來(lái)實(shí)現函數的計算。

優(yōu)點(diǎn):將復雜的運算分解為簡(jiǎn)單移位、加迭代

運算,結構規則,運算周期可以預測,比較適合于FPGA實(shí)現;

缺點(diǎn):一般使用多周期方式,單周期方式資源消耗較高,并且計算僅限于向量旋轉、開(kāi)方等有限的范圍。

采用CORCIC計算三角函數,16bits輸入,在多周期條件下需要500個(gè)左右的LUT/FFs,在單周期條件下,需要1000個(gè)左右的LUT/FFs。

2 本文提出的方法

本文在FPGA上采用兩級方法進(jìn)行函數計算:第一級,直接利用輸入數據的高有效位確定計算結果的有效范圍;第二級,直接利用輸入數據的低有效位進(jìn)行計算結果的誤差調整。本研究方法充分利用FPGA內部的各種邏輯資源、乘加器(或乘法器)資源和BRAM資源:可以根據FPGA內部BRAM資源的大小采用相應深度的數據表存儲第一級數據的有效范圍;采用FPGA內部的乘加器(或乘法器)資源進(jìn)行乘加操作。此方法具有控制簡(jiǎn)單,結構規則,單運算周期,計算精度較高的特點(diǎn),適合于FPGA的算法實(shí)現。

此外,采用本研究方法的兩級計算的方法,不同函數的計算實(shí)現方法一致,只要修改第一級計算高有效位數據表格中的數據,就可以復用設計,有利于資源共享和模塊化實(shí)現。

圖2 FPGA兩級法進(jìn)行函數的計算

同現有方案的比較分析:

(1)同直接查表法比較

以開(kāi)方為例進(jìn)行,資源和誤差的列表如表3??梢钥闯?,在資源和誤差方面,本研究方法在FPGA上實(shí)現函數計算優(yōu)勢明顯。此外,FPGA可以通過(guò)增加存儲單元和擴展輸出位寬來(lái)進(jìn)一步提高計算精度。

表3 兩級計算法開(kāi)方同直接查表法誤差比較表

(2)同冪級數展開(kāi)法的比較

首先,本問(wèn)題出的新方法比冪級數展開(kāi)法的應用范圍更廣泛。其次,在同樣的函數下,以exp的計算為例,本文提出的新方法資源更好,誤差更小。在資源方面,FPGA上采用的兩級計算方法, 同時(shí)計算只需要2個(gè)乘法器即可,遠遠少于冪級數展開(kāi)法的資源消耗;在誤差方面,0~π/4范圍內,16bits輸入,cosΦ和sinΦ的最大誤差都小于10-5,因此此方法誤差比冪級數展開(kāi)法誤差要小。

(3)同CORDIC方法比較

首先,本文提出的新方法比冪級數展開(kāi)法的應用范圍更廣泛。其次,在同樣的函數下,以exp的計算為例,新方法資源消耗相對較少,cosΦ和sinΦ同時(shí)計算只需要300個(gè)左右的LUT/FFs即可。而且,新方法采用的是單運算周期模式,運算速度更高。

3 實(shí)現流程

如圖3所示,本論文采取的實(shí)現方法如下:

步驟一:根據一維函數的計算,預先生成一定深度的計算表格;

步驟二:移位(可選),把數據的高有效位移位成1,增加較小數據的計算精度;

步驟三:提取數據的高bits,作為第一級數據表的地址,得到數據值y(n);

步驟四:提取數據的高bits,加1后作為第一級數據表的地址,得到下一個(gè)數據值y(n+1);

步驟五:計算差值diff(n)=y(n+1)-y(n);

步驟六:提取數據的低bits,作為有效的偏移數據,同計算的差值相乘,得到偏移off(n)=data_lsb(n)*diff(n);

步驟七:高位查表數據值y(n)同偏移相加得到計算值out=y(n)+off(n);

步驟八:根據步驟一的移位逆操作(可選),得到實(shí)際輸出值。

圖3 FPGA兩級法求解函數的流程框圖

如圖4所示,對本研究方法進(jìn)行進(jìn)一步的詳細說(shuō)明。

對于任意一個(gè)一維函數,若采樣點(diǎn)足夠密集,那么任何2個(gè)采樣點(diǎn)之間可以看作是線(xiàn)性關(guān)系,可以通過(guò)插值的方法來(lái)計算。

圖4 FPGA兩級法求解函數的詳細說(shuō)明

由圖6可得出,兩極法的誤差范圍更小。

4 結論

在現代處理方面,FPGA具有極強的實(shí)時(shí)性和并行處理能力[5]。在FPGA的實(shí)現上,本文介紹了現有的直接查表法、冪級數展開(kāi)法、CORDIC計算方法的優(yōu)缺點(diǎn)。在此基礎上,本文研究了基于FPGA的兩極計算法,并把它和以上三種方法進(jìn)行比較,得出兩極算法具有控制簡(jiǎn)單、結構規則、單運算周期、計算精度較高的特點(diǎn)。此外,本文詳細介紹了兩極算法的實(shí)現流程,并舉例來(lái)進(jìn)行說(shuō)明,使讀者能夠更好地掌握兩極算法。

參考文獻

Xilinx-Virtex7 Data Sheets. 2014.11.

Xilinx-Virtex7 User Guides. 2014.11.

Altera-StraTIx V Device Datasheet. 2015.7.

貝耶爾.數字信號處理的FPGA實(shí)現(第3版)[M].2011.

John G.Proakis,Dimitris G.Manolakis.數字信號處理DD原理、算法與應用(第四版)[M].



關(guān)鍵詞: 數字信號 FPGA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>