FPGA浮點(diǎn)轉(zhuǎn)定點(diǎn)運(yùn)算、除法轉(zhuǎn)乘法運(yùn)算以及運(yùn)算誤差分析
FPGA在常規(guī)運(yùn)算時(shí)不能進(jìn)行浮點(diǎn)運(yùn)算,只能進(jìn)行定點(diǎn)整型運(yùn)算,在處理數(shù)據(jù)的小數(shù)乘加運(yùn)算和除法運(yùn)算時(shí)FPGA一般是無能為力的,其中一種常用的處理方法就是數(shù)據(jù)進(jìn)行浮點(diǎn)到定點(diǎn)的轉(zhuǎn)換。
浮點(diǎn)數(shù)轉(zhuǎn)化為定點(diǎn)數(shù)一般有兩種方法:
浮點(diǎn)數(shù)直接乘以一個(gè)數(shù)值。浮點(diǎn)小數(shù)(X)到定點(diǎn)數(shù)據(jù)(Xq)的轉(zhuǎn)換其實(shí)很簡單,就是把浮點(diǎn)小數(shù)乘以一個(gè)很大的2的n次冪的數(shù)據(jù)Xq=X*2^n,來把小數(shù)轉(zhuǎn)化為整數(shù),然后再進(jìn)行數(shù)據(jù)的乘加運(yùn)算,運(yùn)算結(jié)果通過移位來得到實(shí)際對應(yīng)的理論數(shù)據(jù)結(jié)果。
直接把浮點(diǎn)數(shù)轉(zhuǎn)化為有符號的二進(jìn)制小數(shù)用SxQn來表示,然后進(jìn)行乘加運(yùn)算,運(yùn)算結(jié)果通過移位來得到實(shí)際對應(yīng)的理論數(shù)據(jù)結(jié)果。
通過上述兩種方法運(yùn)算能完成浮點(diǎn)到定點(diǎn)乘加運(yùn)算的結(jié)果,但是上述兩種方法存在一定的問題:
存在浮點(diǎn)小數(shù)(X)進(jìn)行整數(shù)轉(zhuǎn)化定點(diǎn)數(shù)據(jù)(Xq)后依然還是一個(gè)小數(shù)的情況。
浮點(diǎn)數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)存在數(shù)據(jù)位寬激增情況,使得SxQn的數(shù)據(jù)位寬變大。
數(shù)據(jù)運(yùn)算存在一定的截位誤差,這部分誤差只能減小而不能消除。
浮點(diǎn)到定點(diǎn)數(shù)據(jù)轉(zhuǎn)化后數(shù)據(jù)位寬變大,占用邏輯資源增加。
在實(shí)際使用時(shí)由于直接把浮點(diǎn)數(shù)轉(zhuǎn)化為有符號的二進(jìn)制小數(shù)用SxQn來表示這種方法局限性較多,近而大都采用浮點(diǎn)數(shù)直接乘以一個(gè)數(shù)值這種方式,但是這種方式使用時(shí)需要注意截位誤差和量化誤差。
第一種浮點(diǎn)數(shù)直接乘以一個(gè)數(shù)值方法具體過程如下:
浮點(diǎn)數(shù)(x)轉(zhuǎn)換為定點(diǎn)數(shù)(xq):xq=(int)x2^Q 定點(diǎn)數(shù)(xq)轉(zhuǎn)換浮點(diǎn)數(shù)(x):x= (float)xq2^(-Q) 比如,16進(jìn)制數(shù)2000H,用Q0表示就是8192;若用Q15表示,則為0.25。 下面介紹Q格式運(yùn)算中Q值的確定:
(1)定點(diǎn)加減法:需要轉(zhuǎn)換成相同Q格式才能加減 (2)定點(diǎn)乘法:不同Q格式的數(shù)據(jù)相乘,相當(dāng)于Q值相加 (3)定點(diǎn)除法:不同Q格式的數(shù)據(jù)相除,相當(dāng)于Q值相減 (4)定點(diǎn)左移:相當(dāng)于Q值增加 (5)定點(diǎn)右移:相當(dāng)于Q值減少 比如,Q15表示的4000H(浮點(diǎn)數(shù)0.5)乘以Q15表示的4000H,4000H×4000H=1000 0000H,乘完之后Q值變?yōu)?5+15=30,即結(jié)果為0.01B,即為浮點(diǎn)數(shù)0.25。 對應(yīng)浮點(diǎn)數(shù)的除法運(yùn)算時(shí)是把除法轉(zhuǎn)換成乘法運(yùn)算來實(shí)現(xiàn)。即分子/分母(A/B)轉(zhuǎn)化為A*(1/B),這時(shí)會面臨B是固定值和變值兩種情況 1、如果B是固定值利用這種方式即可把(1/B)轉(zhuǎn)化為定點(diǎn)數(shù),然后進(jìn)行乘法運(yùn)算,這樣計(jì)算速率較塊,且通過合理的選擇放大倍數(shù)來減小數(shù)據(jù)的誤差。 2、如果對應(yīng)B不是固定值,那么就將B變?yōu)閷?yīng)位寬的整數(shù),然后再進(jìn)行數(shù)據(jù)的乘法運(yùn)算。 數(shù)據(jù)的誤差來源于浮點(diǎn)轉(zhuǎn)化為定點(diǎn)時(shí)截位和運(yùn)算結(jié)果截位引起的,這里可以通過常用的截位方式來實(shí)現(xiàn)截位。 常見的截位方式有:
1、負(fù)數(shù)直接截位后+1,就是所有數(shù)都按絕對值取floor 2、Truncate:直接截位,就是正數(shù)取floor,負(fù)數(shù)按絕對值取ceil 3、Rounding:舍入截位,就是所有數(shù)按絕對值取四舍五入
-
FPGA
+關(guān)注
關(guān)注
1630文章
21800瀏覽量
606276 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7158瀏覽量
89665
原文標(biāo)題:FPGA浮點(diǎn)轉(zhuǎn)定點(diǎn)運(yùn)算、除法轉(zhuǎn)乘法運(yùn)算以及運(yùn)算誤差分析
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
基于FPGA實(shí)現(xiàn)的自定義浮點(diǎn)數(shù)
浮點(diǎn)數(shù)與定點(diǎn)數(shù)
【安富萊——DSP教程】第7章 DSP定點(diǎn)數(shù)和浮點(diǎn)數(shù)(重要)
第7章 DSP定點(diǎn)數(shù)和浮點(diǎn)數(shù)
verilog程序定點(diǎn)數(shù)的資料
功能函數(shù)中的浮點(diǎn)數(shù)轉(zhuǎn)換為定點(diǎn)數(shù)
定點(diǎn)數(shù)和浮點(diǎn)數(shù)的區(qū)別是什么
擴(kuò)充浮點(diǎn)運(yùn)算集是否需要自己在FPGA板子上設(shè)置一個(gè)定點(diǎn)數(shù)轉(zhuǎn)為浮點(diǎn)數(shù)的部分?
請問ADSP-21469的匯編指令集ISA/VISA中有沒有專門用來進(jìn)行浮點(diǎn)數(shù)和定點(diǎn)數(shù)轉(zhuǎn)換的指令?
功能:雙字節(jié)十六進(jìn)制定點(diǎn)數(shù)轉(zhuǎn)換成格式化浮點(diǎn)數(shù)
在FPGA里浮點(diǎn)數(shù)與定點(diǎn)數(shù)表示法原理展示
![在<b class='flag-5'>FPGA</b>里<b class='flag-5'>浮點(diǎn)數(shù)</b>與<b class='flag-5'>定點(diǎn)數(shù)</b>表示法原理展示](https://file1.elecfans.com//web2/M00/A6/EA/wKgZomUMQT-AT4Y4AAAi6xdVpQ4400.png)
單片機(jī)浮點(diǎn)數(shù)運(yùn)算的源碼設(shè)計(jì)
![單片機(jī)<b class='flag-5'>浮點(diǎn)數(shù)</b>運(yùn)算的源碼設(shè)計(jì)](https://file.elecfans.com/web1/M00/46/84/pIYBAFqflFeAZWWIAABYFZMWNZg688.jpg)
Xilinx怎么定點(diǎn)數(shù)轉(zhuǎn)浮點(diǎn)數(shù)
![Xilinx怎么<b class='flag-5'>定點(diǎn)數(shù)</b>轉(zhuǎn)<b class='flag-5'>浮點(diǎn)數(shù)</b>](https://file.elecfans.com/web1/M00/56/3C/o4YBAFs9eciAcaBmAAAV77di3eg680.png)
定點(diǎn)數(shù)和浮點(diǎn)數(shù)在STM32單片機(jī)中使用傅里葉(FFT)變換的理解
![<b class='flag-5'>定點(diǎn)數(shù)</b>和<b class='flag-5'>浮點(diǎn)數(shù)</b>在STM32單片機(jī)中使用傅里葉(FFT)變換的理解](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
定點(diǎn)數(shù)和浮點(diǎn)數(shù)的概念 浮點(diǎn)數(shù)二進(jìn)制序列與指數(shù)表達(dá)式之間的轉(zhuǎn)化
![<b class='flag-5'>定點(diǎn)數(shù)</b>和<b class='flag-5'>浮點(diǎn)數(shù)</b>的概念 <b class='flag-5'>浮點(diǎn)數(shù)</b>二進(jìn)制序列與指數(shù)表達(dá)式之間的<b class='flag-5'>轉(zhuǎn)化</b>](https://file1.elecfans.com/web2/M00/94/4F/wKgaomTkbBGAb9CXAACKdMtGl44408.jpg)
評論