一種新的基于FPGA的數(shù)據(jù)格式轉(zhuǎn)換方法
摘要:針對(duì)目前多數(shù)的FPGA都支持浮點(diǎn)IP核,卻較少關(guān)注數(shù)據(jù)源獲取的問題,提出了一種數(shù)據(jù)格式轉(zhuǎn)換方法。使用VHDL語言,采用流水線處理方式將ASCII碼所表示的一定范圍內(nèi)的實(shí)數(shù)轉(zhuǎn)換為單精度浮點(diǎn)數(shù)。經(jīng)過ModelSim功能仿真和實(shí)際下載驗(yàn)證,該設(shè)計(jì)的轉(zhuǎn)換時(shí)間可達(dá)10-1μs量級(jí)。利用Matlab對(duì)轉(zhuǎn)換結(jié)果進(jìn)行分析驗(yàn)證,該方法的轉(zhuǎn)換精度可達(dá)10-3。在此采用的設(shè)計(jì)結(jié)構(gòu)合理,可為浮點(diǎn)IP核提供數(shù)據(jù)源。
關(guān)鍵詞:?jiǎn)尉雀↑c(diǎn)數(shù);流水線處理;FPGA;IP核
0 引言
隨著FPGA向高集成度、大容量、高速和低功耗方向的快速發(fā)展,相應(yīng)的EDA軟件工具也日趨成熟,提供了更多的數(shù)字信號(hào)處理IP核,使得FPGA在高速數(shù)字信號(hào)處理領(lǐng)域得到了越來越廣泛的應(yīng)用。
浮點(diǎn)運(yùn)算作為數(shù)字信號(hào)處理中最常見的運(yùn)算之一,各大EDA軟件都帶有免費(fèi)的浮點(diǎn)運(yùn)算IP核。通過對(duì)IP核的生成和例化來實(shí)現(xiàn)浮點(diǎn)運(yùn)算,把FPGA設(shè)計(jì)者從繁重的代碼編寫中解脫了出來,同時(shí)可以對(duì)IP核進(jìn)行功能剪裁以避免對(duì)FPGA邏輯資源的浪費(fèi),實(shí)現(xiàn)最優(yōu)設(shè)計(jì)。但對(duì)浮點(diǎn)數(shù)的獲取卻關(guān)注很少。在浮點(diǎn)運(yùn)算中,單精度浮點(diǎn)以其極強(qiáng)的通用性得到了最廣泛的應(yīng)用。本文將目光集中在單精度浮點(diǎn)數(shù)的獲取上,為浮點(diǎn)IP核提供數(shù)據(jù)源。在數(shù)據(jù)的傳輸上,ASCII碼是經(jīng)常采用的一種形式,本文以串口接收到的ASCII碼所表示的實(shí)數(shù)為例,采用流水處理方式高速地將實(shí)數(shù)轉(zhuǎn)換為單精度浮點(diǎn)數(shù)。
1 實(shí)數(shù)轉(zhuǎn)換為單精度浮點(diǎn)數(shù)的原理
1.1 單精度浮點(diǎn)數(shù)格式
浮點(diǎn)數(shù)的表示遵循IEEE 754標(biāo)準(zhǔn),它由3部分組成:符號(hào)位(sign)、階碼(exponent)和尾數(shù)(fraction)。IEEE 754標(biāo)準(zhǔn)規(guī)定的單精度浮點(diǎn)數(shù)格式占用32位,包含:1位符號(hào)位s、8位帶偏移量的指數(shù)e[30:23]和23位尾數(shù)f[22:0],如圖1。單精度的指數(shù)使用正偏值形式表示,指數(shù)值的大小從1~254(0和255是特殊值)。采用該種形式表示是為了有利于比較大小,浮點(diǎn)小數(shù)在計(jì)算時(shí),指數(shù)值減去偏正值即是實(shí)際的指數(shù)大小。其中偏移值(bias)為127,尾數(shù)有1位隱藏位。
單精度浮點(diǎn)數(shù)包含以下幾種情況:
(1)規(guī)格化數(shù):0e255, 值V=(-1)s×2e-bias×1.f;
(2)(+0,-0):如果e=0且f=0,則V=(-1)s×0;
(3)非規(guī)格化數(shù):e=0但f≠0則V為非規(guī)格化數(shù);
(4)(+∞,-∞):e=255,且f=0,則V=(-1)s×∞;
(5)NaN(不是一個(gè)數(shù)):e=255,且f≠0,則V=NaN。
1.2 轉(zhuǎn)換原理
例如有一個(gè)實(shí)數(shù)為6.91,首先將其轉(zhuǎn)換為二進(jìn)制形式表示:110.1110100011110101110000101000。再將其規(guī)范化為如下:
6.91=1.101110100011110101110000101000×22則可以得到基本原型:
s:0;
e:2+127(十進(jìn)制)=129(十進(jìn)制)=10000001(二進(jìn)制);
f:101110100011110101110000101000(注:小數(shù)部分取28位,且小數(shù)點(diǎn)前面的1不要)。
小數(shù)部分取28位的目的在于更為準(zhǔn)確地表示實(shí)數(shù),后五位用于舍入處理。在IEEE 754標(biāo)準(zhǔn)中,舍入處理提供了4種可選方法:就近舍入、朝0舍入、朝+∞舍入和朝-∞舍入,本文采用就近舍入原則。就近舍入的實(shí)質(zhì)就是通常所說的“四舍五入”。例如:尾數(shù)超過規(guī)定的23位的多余數(shù)字是10010,多余位的值超過規(guī)定的最低有效值的一半。故最低有效位應(yīng)增1,若多余的5位是01111則簡(jiǎn)單地截尾即可,對(duì)多余的5位100 00這種特殊情況:若最低有效位現(xiàn)為0,則截尾;若最低有效位現(xiàn)1,則向上進(jìn)一位使其變?yōu)?。所以,此例中要將最后5位作舍棄處理。得到的結(jié)果為:0 100000011011101000111101011100001。組合后等于0100 0000 1101 1101 0001 1110 1011 1000等于40DDIEB8。至此在原理上完成一個(gè)實(shí)數(shù)到單精度浮點(diǎn)數(shù)的轉(zhuǎn)換。
評(píng)論