国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA 的浮點與整型數(shù)據(jù)混合運算實現(xiàn)*

2013-12-23 05:46唐小琦
關(guān)鍵詞:浮點尾數(shù)整數(shù)

陳 坤,唐小琦,宋 寶

(華中科技大學 機械科學與工程學院,武漢 430074)

0 引言

隨著FPGA 向高速,大容量,高集成度和低功耗方向的快速發(fā)展,相應(yīng)的EDA 軟件工具也日趨完善,提供了更多的數(shù)字信號處理IP 核,使得FPGA 在高速數(shù)字信號處理領(lǐng)域得到越來越廣泛的應(yīng)用[2]。

在FPGA 中對不同格式的數(shù)據(jù)進行運算時消耗的資源是不一樣的,合理轉(zhuǎn)換數(shù)據(jù)的格式可以有效地降低資源的消耗,提高運算速度[3]。對于浮點數(shù)和整型數(shù)據(jù),如果能在不同的地方運用不同的格式,可以用最少的資源和最快的速度實現(xiàn)相同的功能[4]。目前有很多基于FPGA 的浮點數(shù)轉(zhuǎn)換成整型數(shù)據(jù)的研究和設(shè)計,但浮點和整型數(shù)據(jù)的混合運算卻未見報道。本文在研究浮點數(shù)和整型數(shù)據(jù)存儲結(jié)構(gòu)的基礎(chǔ)上提出了一種浮點數(shù)和整型數(shù)據(jù)相互轉(zhuǎn)換的方法,改進了一般浮點數(shù)運算中消耗資源較多和運算速度較慢的問題。

1 IEEE 754 浮點數(shù)標準

目前大多數(shù)高級語言(包括C)都是按照IEEE 754 的標準來規(guī)定浮點數(shù)的存儲格式[5]。IEEE 754用科學計數(shù)法以底數(shù)為2 的小數(shù)來表示浮點數(shù),存儲格式分為三個部分:符號位(S)、指數(shù)位(E)和尾數(shù)位(M)。雙精度浮點數(shù)為8 字節(jié),包含1 位符號位,11 位指數(shù)位和52 位尾數(shù)位;單精度浮點數(shù)為4字節(jié),包含1 位符號位,8 位指數(shù)位和23 位尾數(shù)位,如圖1 所示。本文將重點分析單精度浮點數(shù)和32 位整型數(shù)據(jù)的混合運算[6]。

圖1 IEEE 754 單精度浮點數(shù)格式

單精度的指數(shù)使用正偏正值形式表示,偏移值為127,指數(shù)值減去偏正值即為實際的指數(shù)大小。指數(shù)值范圍為0 ~255,實際指數(shù)值范圍為-127 ~128。當指數(shù)為0 時且尾數(shù)不為0 時,則浮點數(shù)A = (-1)S×21-127×0. M,稱為非規(guī)格化數(shù);若指數(shù)和尾數(shù)都為0時,則表示的浮點數(shù)為0。若指數(shù)為255,尾數(shù)部分不為0 時,則表示的為非數(shù)值;若尾數(shù)部分也為0,則表示無窮大。尾數(shù)部分為23 位,為了尾數(shù)部分能表示更多一位的有效值,IEEE754 采用隱含尾數(shù)最高數(shù)位1(即這一位1 不表示出來)的方法,因此尾數(shù)實際上是24 位,但應(yīng)注意隱含的1 是一位整數(shù)(即位權(quán)位20),在浮點格式中表示出來的23 位尾數(shù)是純小數(shù)并用原碼表示,尾數(shù)真值為:1 +尾數(shù)。即浮點數(shù)A =(-1)S×2E-127×1.M。

如01001110111100000111001111111110,符號位為0,即 為 正 數(shù),指 數(shù) 為“10011101”,底 數(shù) 為“11100000111001111111110”。表示成二進制數(shù)即為1.11100000111001111111110 ×2157-127。

2 算法原理及推導過程

32 位有符號整數(shù)表示范圍為- 2147483647 ~2147483647,32 位單精度浮點數(shù)表示范圍為3.4 ×10-38~3.4 ×1038,所以整數(shù)轉(zhuǎn)浮點數(shù)時不用擔心會溢出,但當單精度浮點數(shù)表示范圍超過整形數(shù)據(jù)表示范圍時,則會溢出,本算法設(shè)置了溢出標志位,用以表示是否溢出。

2.1 整型轉(zhuǎn)換成浮點數(shù)

整型數(shù)據(jù)轉(zhuǎn)換成浮點數(shù)只需求出浮點數(shù)的符號位S、指數(shù)位E、尾數(shù)位M。所求浮點數(shù)符號位與整形數(shù)據(jù)符號位相同。根據(jù)單精度浮點數(shù)的表示方法,隱含尾數(shù)最高位為1,且為整數(shù),所以從第31 位開始檢測,檢測到1 時停止,并計其位于第幾位,其后的位數(shù)即為指數(shù)實際值,偏置后即可得指數(shù)位;其后的數(shù)值即為所求的尾數(shù)位。

例如,整型數(shù)據(jù)為00011000101010111101000010111001,為1 的最高位位于第29 位,將整型數(shù)據(jù)規(guī)整為1.1000101010111101000010111001 ×228,可計算出浮點數(shù)的指數(shù)部分E =28 +127 =155(10011011);由于尾數(shù)部分只有23 位,這里尾數(shù)位剩下28 位,故需對剩下5 位做舍入處理。在IEEE 754 標準中,舍入處理提供了4 中可選方法:就進舍入、朝0 舍入、朝+∞舍入和朝-∞舍入。這里采用就近舍入的方法,就近舍入的實質(zhì)就是通常所說的“四舍五入”。例如:尾數(shù)超過規(guī)定的23 位的多余數(shù)字是10100,多余位的值超過規(guī)定的最低有效值的一半,故最低有效位應(yīng)增1,若多余的5 位是01111,則簡單的截尾即可,對多余的5 位10000這種特殊情況:若最低有效位為0,則截尾;若最低有效位現(xiàn)為1,則向上進一位使其變?yōu)?。所以此例中要將最低有效位加1,使其變?yōu)?,得到尾數(shù)位M =10001010101111010000110。若剩下位數(shù)小于23 位,則低位補0[7]。

2.2 浮點數(shù)轉(zhuǎn)換成整型

浮點數(shù)的符號位直接賦值給整數(shù)的符號位。取出浮點數(shù)中的指數(shù)值,根據(jù)浮點數(shù)的表示方法,減去偏置值后得到實際指數(shù)值n。然后從浮點數(shù)的尾數(shù)最高位開始,依次取出n 位,注意浮點表示法中隱含的尾數(shù)的最高位1,即實際整數(shù)為(n +1)位。若n≤23,則浮點數(shù)尾數(shù)部分中還有小數(shù)部分,這里采取四舍五入的方法舍去小數(shù)部分,若尾數(shù)部分取出高n 位后的最高位為1,則整數(shù)需加1;若為0,則保持不變。若n >23,則低位補0[8]。

例如浮點數(shù)為11001101110001010101111010000101,符號位S =1,指數(shù)位E =10011011(155),尾數(shù)位M =10001010101111010000101。所求整型數(shù)據(jù)的符號位也為1,數(shù) 據(jù) 位 為N = 1. 10001010101111010000101 ×2155-127=11000101010111101000010100000。

3 FPGA 中算法的實現(xiàn)及仿真分析

考慮到實際應(yīng)用中,數(shù)值在很多情況下都是從串口獲得,并表現(xiàn)為ASCⅡ,故首先應(yīng)將ASCⅡ形式的數(shù)據(jù)轉(zhuǎn)換成相應(yīng)進制的形式。轉(zhuǎn)換過程中采用標志位來判斷是整型轉(zhuǎn)浮點還是浮點轉(zhuǎn)整型。實現(xiàn)流程圖如圖2 所示。

圖2 轉(zhuǎn)換流程圖

首先判斷運算標志位,裁定進行何種運算。為0則進行整型轉(zhuǎn)浮點運算,為1 則進行浮點轉(zhuǎn)整型運算。整型轉(zhuǎn)浮點運算中,主要運用for 循環(huán)和左移操作來計算出浮點數(shù)的指數(shù)位和尾數(shù)位[1]。由于不用考慮溢出問題,故32 位整數(shù)都可轉(zhuǎn)換成相應(yīng)的浮點數(shù)。反之,在浮點轉(zhuǎn)整型運算過程中,就需要考慮到溢出問題,故設(shè)置溢出標志位,若溢出則置1,無溢出置0[9]。整數(shù)數(shù)據(jù)部分的計算同樣主要是運用VHDL 語言中的for循環(huán)和移位操作,最后也需進行四舍五入處理[10]。

4 仿真分析及實驗驗證

4.1 仿真分析

采用altera 公司的EP2C8Q208C8 作為測試平臺,開發(fā)工具為quartus ⅡVersion9.0。工程編譯完成后,耗費資源如圖3 所示。工作頻率為50MHz。

圖3 算法消耗的資源

圖4 整型轉(zhuǎn)換浮點數(shù)時序圖

圖5 浮點數(shù)轉(zhuǎn)換整型時序圖

圖6 三次樣條插補算法計算流程

圖7 理論曲線與實際插補軌跡對比

首先利用quartus 內(nèi)置的在線調(diào)試工具signaltap捕獲和顯示實時信號。整型數(shù)據(jù)轉(zhuǎn)換成浮點數(shù)的時序圖如圖4 所示。

如圖4 所示,當標志位dir 為0 時,進行整型轉(zhuǎn)浮點的運算。如輸入數(shù)據(jù)為X”7839FF6B”時,實際轉(zhuǎn)換結(jié)果應(yīng)為X”4EF073FF”,從仿真軟件可驗證結(jié)果的正確性。另外從仿真軟件可以看出,轉(zhuǎn)換過程可在一個時鐘周期(即20ns)內(nèi)完成,具有很高的實時性。

浮點數(shù)轉(zhuǎn)換成整型的時序圖如圖5 所示。當標志位為1 時,進行浮點轉(zhuǎn)整型的運算。如輸入數(shù)據(jù)為X”4C2A2AD5”時,實際轉(zhuǎn)換理論結(jié)果應(yīng)為 X”02A8AB54”,從仿真軟件可以看出實際結(jié)果與理論結(jié)果一致,并且 OV 為0,表示未溢出;當輸入”E38FD6AA”時,超出轉(zhuǎn)換范圍,故輸出X”80000000”,溢出標志位OV 置1。另外轉(zhuǎn)換過程也是在一個始終周期內(nèi)完成。

4.2 實驗驗證

通過將該算法運用到一種三次B 樣條曲線插補中來驗證。插補過程如圖6 所示。

通常,三次B 樣條曲線的方程為f(t)=R0t3+R1t2+R2t+R3,式中t∈[0,1]為無綱量參數(shù)。為了計算曲線參數(shù)R0、R1、R2該算法將插補過程分為精插補和粗插補兩部分。在FPGA 中整型的乘加運算可以在一個周期內(nèi)完成,將計算分成整型和浮點兩個部分可以有效的提高計算速度,消除在浮點計算過程中的精度丟失。

將該算法下載到FPGA 中,插補完成的數(shù)據(jù)和擬合曲線如圖7 所示。

下面給出三次B 樣條插補在ARM 和FPGA 中實現(xiàn)的速度比較。測試環(huán)境為:ARM 為920T ARM 處理器,頻率為300MHz;FPGA 為EP2C8Q208C8,頻率為50MHz。實驗結(jié)果表明FPGA 中數(shù)據(jù)處理的效率遠高于在ARM 中,結(jié)果如表1 所示。

表1 三次樣條插補算法在ARM 和FPGA 中實現(xiàn)的速度比較

5 結(jié)束語

本文采用Quartus 軟件平臺,選用Altera 公司的EP2C8Q208C8 芯片,采用VHDL 硬件描述語言,對算法進行了功能仿真驗證和實驗驗證。從實驗結(jié)果看,能實現(xiàn)32 位整數(shù)與單精度浮點數(shù)之間的相互轉(zhuǎn)換;在系統(tǒng)時鐘為50MHz 的情況下,轉(zhuǎn)換所用時間約為0.02μs,完全可以滿足非特殊情況下的高速數(shù)字信號處理。本文算法可以很容易的根據(jù)實際整數(shù)的范圍和精度進行調(diào)整,并且可以推廣到其他浮點格式,可通過合理的轉(zhuǎn)換數(shù)據(jù)格式有效地提高數(shù)據(jù)處理速度和減少所占資源。

[1]姜雪松,劉東升. 硬件描述語言VHDL 教程[M]. 西安:西安交通大學出版社,2004.

[2]王紅,彭亮,于宗光. FPGA 現(xiàn)狀與發(fā)展趨勢[J]. 電子與封裝,2007(7):32-37.

[3]李宏鈞,胡小龍. 流水線的FPGA 低功耗設(shè)計[J]. 計算機系統(tǒng)應(yīng)用,2010,19(8):234-237.

[4]張小新,魏厚龍. FPGA 技術(shù)及開發(fā)方式概述[J]. 山西電子技術(shù),2008(5):86-87.

[5]周磊,成開友,孫宏國. 單精度浮點數(shù)到十進制數(shù)轉(zhuǎn)換的IP 核設(shè)計[J]. 鹽城工學院學報,2011(1):56-60.

[6]WAHAN W. IEEE Standard 754 for binary floating-point arithmetic. Lecture Notes on the status of IEEE 754[P].1997-10-01.

[7]唐小明,張濤,王貞杰. 一種新的基于FPGA 的數(shù)據(jù)格式轉(zhuǎn)換方法[J]. 現(xiàn)代電子技術(shù),2011(8):110-112.

[8]王元良,李允俊. 基于ARM 的浮點數(shù)轉(zhuǎn)換成整數(shù)的改進算法[J]. 信息技術(shù),2007(12):18-19.

[9]韓進,程勇,齊現(xiàn)英. VHDL 在數(shù)字集成電路中的應(yīng)用[J]. 山東科技大學學報,2003,22(4):74-77.

[10]張小妍,邵杰. 高速浮點單元的FPGA 實現(xiàn)[J]. 信息化研究,2009,35(11):24-27.

猜你喜歡
浮點尾數(shù)整數(shù)
“改寫”與“省略”三不同
LEO星座增強GNSS PPP模糊度浮點解與固定解性能評估
基于Simulink浮點模型和定點模型的問題研究
基于浮點DSP的鐵路FSK信號檢測
2019年度上半年《啟迪與智慧》上下半月刊、《幽默與笑話》上下半月刊、《拳擊與格斗》上半月刊抽大獎中獎結(jié)果
2019年度下半年《啟迪與智慧》上下半月刊、《幽默與笑話》上下半月刊、《拳擊與格斗》上半月刊抽大獎中獎結(jié)果
一類整數(shù)遞推數(shù)列的周期性
有趣的九九乘法表
單精度浮點加法器的FPGA實現(xiàn)
答案