• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      陳 坤,唐小琦,宋 寶

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

      0 引言

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

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

      1 IEEE 754 浮點(diǎn)數(shù)標(biāo)準(zhǔn)

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

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

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

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

      2 算法原理及推導(dǎo)過程

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

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

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

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

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

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

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

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

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

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

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

      4 仿真分析及實(shí)驗(yàn)驗(yàn)證

      4.1 仿真分析

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

      圖3 算法消耗的資源

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

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

      圖6 三次樣條插補(bǔ)算法計(jì)算流程

      圖7 理論曲線與實(shí)際插補(bǔ)軌跡對比

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

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

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

      4.2 實(shí)驗(yàn)驗(yàn)證

      通過將該算法運(yùn)用到一種三次B 樣條曲線插補(bǔ)中來驗(yàn)證。插補(bǔ)過程如圖6 所示。

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

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

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

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

      5 結(jié)束語

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

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

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

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

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

      [5]周磊,成開友,孫宏國. 單精度浮點(diǎn)數(shù)到十進(jìn)制數(shù)轉(zhuǎn)換的IP 核設(shè)計(jì)[J]. 鹽城工學(xué)院學(xué)報(bào),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 的浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù)的改進(jìn)算法[J]. 信息技術(shù),2007(12):18-19.

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

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

      猜你喜歡
      浮點(diǎn)數(shù)浮點(diǎn)尾數(shù)
      “改寫”與“省略”三不同
      LEO星座增強(qiáng)GNSS PPP模糊度浮點(diǎn)解與固定解性能評估
      四種Python均勻浮點(diǎn)數(shù)生成方法
      連續(xù)自然數(shù)及乘積的尾數(shù)和奇偶性的分析
      基于浮點(diǎn)DSP的鐵路FSK信號檢測
      2019年度下半年《啟迪與智慧》上下半月刊、《幽默與笑話》上下半月刊、《拳擊與格斗》上半月刊抽大獎中獎結(jié)果
      在C語言中雙精度浮點(diǎn)數(shù)線性化相等比較的研究
      非精確浮點(diǎn)數(shù)乘法器設(shè)計(jì)
      基于FPGA的浮點(diǎn)FIR濾波器設(shè)計(jì)
      改進(jìn)的Goldschmidt雙精度浮點(diǎn)除法器
      军事| 普陀区| 武夷山市| 任丘市| 贡山| 平谷区| 嘉兴市| 丰顺县| 嵊泗县| 尚志市| 大名县| 仪征市| 开阳县| 武安市| 浦城县| 北京市| 汉中市| 北宁市| 中山市| 辰溪县| 凉城县| 灵武市| 亳州市| 安仁县| 衢州市| 兴文县| 宁蒗| 宁阳县| 巩义市| 清水河县| 孟连| 宽城| 西贡区| 昭苏县| 灯塔市| 淄博市| 甘洛县| 婺源县| 象山县| 海门市| 威海市|