一種新的基于FPGA的數(shù)據(jù)格式轉(zhuǎn)換方法
2 在FPGA中實(shí)現(xiàn)實(shí)數(shù)到單精度浮點(diǎn)數(shù)轉(zhuǎn)換的流程
2.1 轉(zhuǎn)換流程
在實(shí)際工程應(yīng)用中,所處理的數(shù)據(jù)都有一個(gè)或大或小的范圍,在這個(gè)范圍內(nèi)將實(shí)數(shù)轉(zhuǎn)換為單精度浮點(diǎn)數(shù)會(huì)節(jié)約芯片資源和降低功耗。故選擇在-9 999.999 9~9 999.999 9的范圍內(nèi)完成實(shí)數(shù)到單精度浮點(diǎn)數(shù)的轉(zhuǎn)換,如圖2所示??紤]到實(shí)際,數(shù)值在很多情況下是通過(guò)串口獲取的,并表現(xiàn)為ASCII形式。故本文中所提到的實(shí)數(shù)皆為ASCII表示。本文引用地址:http://m.butianyuan.cn/article/190975.htm
轉(zhuǎn)換過(guò)程采用流水線操作,用計(jì)數(shù)器控制轉(zhuǎn)換進(jìn)程。ASCII碼轉(zhuǎn)換為單精度浮點(diǎn)的方法如下:
(1)將8位ASCII碼所代表的數(shù)字字符轉(zhuǎn)為十進(jìn)制數(shù)字(由于硬件電路對(duì)數(shù)字的表示只有0和1的組合,所以將實(shí)數(shù)的整數(shù)和小數(shù)分開(kāi)表示);
(2)利用程序包里的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),但小數(shù)部分的轉(zhuǎn)換需要單獨(dú)實(shí)現(xiàn);
(3)對(duì)二進(jìn)制表示的實(shí)數(shù)進(jìn)行規(guī)格化;
(4)根據(jù)符號(hào)位ASCII碼值確定符號(hào)位s,根據(jù)規(guī)格化移動(dòng)的位數(shù)確定階碼e,將規(guī)格化中的小數(shù)部分f保留28位;
(5)根據(jù)就近舍入原則對(duì)保留的28位小數(shù)部分的后5位進(jìn)行判斷和舍入。
2.2 關(guān)鍵代碼解析
在FPGA的硬件描述語(yǔ)言中將整數(shù)的十進(jìn)制轉(zhuǎn)換為二進(jìn)制比較簡(jiǎn)單,可以調(diào)用ISE軟件自帶的程序包中的轉(zhuǎn)換函數(shù)來(lái)實(shí)現(xiàn),但如何將小數(shù)部分轉(zhuǎn)換為二進(jìn)制是能否順利完成從實(shí)數(shù)到單精度浮點(diǎn)數(shù)轉(zhuǎn)換的關(guān)鍵。考慮到要對(duì)小數(shù)部分進(jìn)行舍入運(yùn)算,所以將小數(shù)部分轉(zhuǎn)換28位的二進(jìn)制。要用28位二進(jìn)制表示小數(shù)部分,需利用VHDL語(yǔ)言中變量(variable)被賦值時(shí)立即生效的特性,結(jié)合FOR循環(huán)來(lái)實(shí)現(xiàn)。部分關(guān)鍵代碼如下:
代碼中frac_part是小數(shù)部分的十進(jìn)制表示(因?yàn)閕nteger類型只能表示整數(shù),所以將小數(shù)部分?jǐn)U大了10 000倍,但不影響結(jié)果的正確性),frac_28是小數(shù)部分的二進(jìn)制表示。信號(hào)frac_28(27)的權(quán)值是2-1,依次以1/2倍率遞減,frac_28(0)的權(quán)值是2-28。此進(jìn)程由frac_part發(fā)生變化來(lái)啟動(dòng),完成轉(zhuǎn)換的時(shí)間是瞬時(shí),也可以認(rèn)為是一個(gè)時(shí)鐘周期。
評(píng)論