新型數據格式轉換的FPGA實(shí)現
在FPGA的硬件描述語(yǔ)言中將整數的十進(jìn)制轉換為二進(jìn)制比較簡(jiǎn)單,可以調用ISE軟件自帶的程序包中的轉換函數來(lái)實(shí)現,但如何將小數部分轉換為二進(jìn)制是能否順利完成從實(shí)數到單精度浮點(diǎn)數轉換的關(guān)鍵??紤]到要對小數部分進(jìn)行舍入運算,所以將小數部分轉換28位的二進(jìn)制。要用28位二進(jìn)制表示小數部分,需利用VHDL語(yǔ)言中變量(variable)被賦值時(shí)立即生效的特性,結合FOR循環(huán)來(lái)實(shí)現。部分關(guān)鍵代碼如下:
代碼中frac_part是小數部分的十進(jìn)制表示(因為integer類(lèi)型只能表示整數,所以將小數部分擴大了10 000倍,但不影響結果的正確性),frac_28是小數部分的二進(jìn)制表示。信號frac_28(27)的權值是2-1,依次以1/2倍率遞減,frac_28(0)的權值是2-28。此進(jìn)程由frac_part發(fā)生變化來(lái)啟動(dòng),完成轉換的時(shí)間是瞬時(shí),也可以認為是一個(gè)時(shí)鐘周期。
3 仿真結果及分析
首先用ModelSim進(jìn)行功能仿真,其結果如圖3所示。輸入的實(shí)數為125.763,輸出結果經(jīng)Matlab逆向求值同輸入值進(jìn)行比較,驗證了轉換結果的正確性。一個(gè)數的正確轉換并不能說(shuō)明問(wèn)題,下面將驗證此轉換方法的可行性。
選取具有代表性的實(shí)數對轉換方法的性能進(jìn)行驗證。主要驗證兩個(gè)方面:
(1)是否在預定域內具有全覆蓋性;
(2)是否能對此域中的最小值進(jìn)行有效表示。
結果如表1所示。
根據轉換原理,最小值所轉換的誤差最大,但最大值的轉換誤差不一定最小(因為存在舍入)。這個(gè)最大的轉換誤差在10-5量級,當待轉換實(shí)數的絕對值大于整數1時(shí),轉換的誤差將小于10-5量級,可達10-9量級。這樣的轉換誤差可以滿(mǎn)足大多數浮點(diǎn)運算環(huán)境下的精度需要。實(shí)驗驗證了此轉換方法的有效性和“全覆蓋性”。
在完成仿真測試后,將程序進(jìn)行綜合,布局布線(xiàn),最后生成位流文件下載到FPGA芯片中進(jìn)行驗證。在實(shí)際的芯片中將轉換結果和已仿真得到的結果進(jìn)行比較,并輸出指示信號。從實(shí)際的電路輸出結果看,和仿真結果完全一致,證明了此方法在實(shí)際芯片中可行性。因為采用的是流水線(xiàn)操作,所以仿真所用的周期數和實(shí)際周期數是一致的。該實(shí)驗在50 MHz的時(shí)鐘下用時(shí)6個(gè)周期(即0.12μs)完成轉換操作。而在最常用的串口傳輸波特率9 600 b/s下,傳送1個(gè)碼元的時(shí)間為10-1ms量級。從而可以得出:完成從ASCII碼所表示的實(shí)數(-9 999.999 9~+9 999.999 9)到單精度浮點(diǎn)的轉換所用的時(shí)間將在10-1μs量級以下,具有較高的實(shí)時(shí)性。
4 結語(yǔ)
本文的實(shí)現向單精度浮點(diǎn)的轉換占用1 161個(gè)slice資源,在FPGA發(fā)展到今天,FPGA的容量和資源都有了很大提高的情況下,這樣的資源占用量在大多數應用中是可以承受的。本文的設計可以很容易地根據實(shí)際實(shí)數的范圍進(jìn)行調整,并且可以推廣到其他浮點(diǎn)格式,可有效地為浮點(diǎn)IP核提供快速且具有高精度的數據源。
評論