0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA浮點(diǎn)數(shù)轉(zhuǎn)化為定點(diǎn)數(shù)方法

FPGA設(shè)計(jì)論壇 ? 來源:FPGA設(shè)計(jì)論壇 ? 作者:FPGA設(shè)計(jì)論壇 ? 2022-10-13 16:23 ? 次閱讀

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í)際對(duì)應(yīng)的理論數(shù)據(jù)結(jié)果。

直接把浮點(diǎn)數(shù)轉(zhuǎn)化為有符號(hào)的二進(jìn)制小數(shù)用SxQn來表示,然后進(jìn)行乘加運(yùn)算,運(yùn)算結(jié)果通過移位來得到實(shí)際對(duì)應(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)化為有符號(hào)的二進(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。 對(duì)應(yīng)浮點(diǎn)數(shù)的除法運(yùn)算時(shí)是把除法轉(zhuǎn)換成乘法運(yùn)算來實(shí)現(xiàn)。即分子/分母(A/B)轉(zhuǎn)化為A*(1/B),這時(shí)會(huì)面臨B是固定值和變值兩種情況 1、如果B是固定值利用這種方式即可把(1/B)轉(zhuǎn)化為定點(diǎn)數(shù),然后進(jìn)行乘法運(yùn)算,這樣計(jì)算速率較塊,且通過合理的選擇放大倍數(shù)來減小數(shù)據(jù)的誤差。 2、如果對(duì)應(yīng)B不是固定值,那么就將B變?yōu)閷?duì)應(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ù)都按絕對(duì)值取floor 2、Truncate:直接截位,就是正數(shù)取floor,負(fù)數(shù)按絕對(duì)值取ceil 3、Rounding:舍入截位,就是所有數(shù)按絕對(duì)值取四舍五入

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603385
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7030

    瀏覽量

    89034

原文標(biāo)題:FPGA浮點(diǎn)轉(zhuǎn)定點(diǎn)運(yùn)算、除法轉(zhuǎn)乘法運(yùn)算以及運(yùn)算誤差分析

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA實(shí)現(xiàn)的自定義浮點(diǎn)數(shù)

    基于FPGA實(shí)現(xiàn)各種設(shè)計(jì)的首要前提是理解并掌握數(shù)字的表示方法,計(jì)算機(jī)中的數(shù)字表示方法有兩種:定點(diǎn)數(shù)表示法和浮點(diǎn)數(shù)表示
    發(fā)表于 10-10 10:30 ?1457次閱讀

    浮點(diǎn)數(shù)定點(diǎn)數(shù)

    本帖最后由 gk320830 于 2015-3-5 23:17 編輯 數(shù)制,浮點(diǎn)數(shù)定點(diǎn)數(shù)的文檔,上數(shù)電時(shí)老師給的。有興趣的同學(xué)可以來看看
    發(fā)表于 03-27 21:31

    【安富萊——DSP教程】第7章 DSP定點(diǎn)數(shù)浮點(diǎn)數(shù)(重要)

    第7章DSP定點(diǎn)數(shù)浮點(diǎn)數(shù)(重要) 本期教程主要跟大家講解一下定點(diǎn)數(shù)浮點(diǎn)數(shù)的基礎(chǔ)知識(shí),了解這些基礎(chǔ)知識(shí)對(duì)于后面學(xué)習(xí)ARM官方的DSP庫大有裨益。特別是初學(xué)的一定要理解這些基礎(chǔ)知識(shí)。
    發(fā)表于 06-03 11:47

    第7章 DSP定點(diǎn)數(shù)浮點(diǎn)數(shù)

    。7.1.2 浮點(diǎn)數(shù) 在計(jì)算機(jī)系統(tǒng)的發(fā)展過程中,曾經(jīng)提出過多種方法表達(dá)實(shí)數(shù)。典型的比如相對(duì)于浮點(diǎn)數(shù)定點(diǎn)數(shù)(Fixed Point Number)。在這種表達(dá)方式中,小數(shù)點(diǎn)固定的位于實(shí)
    發(fā)表于 09-22 13:02

    verilog程序定點(diǎn)數(shù)的資料

    verilog程序中需要用到定點(diǎn)數(shù),用浮點(diǎn)數(shù)太復(fù)雜。。。有誰有關(guān)于定點(diǎn)數(shù)比較系統(tǒng)的資料嗎。。。我找到黑金的教程,是關(guān)于浮點(diǎn)數(shù)運(yùn)算的verilog實(shí)現(xiàn),很詳細(xì),先傳上來 Verilog
    發(fā)表于 03-27 06:35

    功能函數(shù)中的浮點(diǎn)數(shù)轉(zhuǎn)換為定點(diǎn)數(shù)

    第16章 DSP功能函數(shù)-數(shù)據(jù)拷貝,數(shù)據(jù)填充和浮點(diǎn)轉(zhuǎn)定點(diǎn)本期教程主要講解功能函數(shù)中的數(shù)據(jù)拷貝,數(shù)據(jù)填充和浮點(diǎn)數(shù)轉(zhuǎn)換為定點(diǎn)數(shù)。目錄第16章 DSP功能函數(shù)-數(shù)據(jù)拷貝,數(shù)據(jù)填充和
    發(fā)表于 08-17 07:37

    定點(diǎn)數(shù)浮點(diǎn)數(shù)的區(qū)別是什么

    定點(diǎn)數(shù)浮點(diǎn)數(shù)的區(qū)別目的:理解定點(diǎn)數(shù)浮點(diǎn)數(shù)在傅里葉變換(FFT)的實(shí)際應(yīng)用中的選擇單片機(jī)中如果需要進(jìn)行一定的運(yùn)算(常見的傅里葉變換)時(shí),需要在不同情況下對(duì)AD采集的數(shù)據(jù)進(jìn)行一定的處理
    發(fā)表于 02-21 07:22

    擴(kuò)充浮點(diǎn)運(yùn)算集是否需要自己在FPGA板子上設(shè)置一個(gè)定點(diǎn)數(shù)轉(zhuǎn)為浮點(diǎn)數(shù)的部分?

    擴(kuò)充浮點(diǎn)運(yùn)算集的時(shí)候,是否需要自己在FPGA板子上設(shè)置一個(gè)定點(diǎn)數(shù)轉(zhuǎn)為浮點(diǎn)數(shù)的部分?
    發(fā)表于 08-11 09:13

    請(qǐng)問ADSP-21469的匯編指令集ISA/VISA中有沒有專門用來進(jìn)行浮點(diǎn)數(shù)定點(diǎn)數(shù)轉(zhuǎn)換的指令?

    得到的ADC數(shù)據(jù)需要進(jìn)行定點(diǎn)數(shù)浮點(diǎn)數(shù)的轉(zhuǎn)換,為了節(jié)省開銷,想使用匯編程序進(jìn)行定點(diǎn)浮點(diǎn)之間的轉(zhuǎn)換。請(qǐng)問ADSP-21469的匯編指令集ISA/VISA中有沒有專門用來進(jìn)行
    發(fā)表于 11-29 08:03

    功能:雙字節(jié)十六進(jìn)制定點(diǎn)數(shù)轉(zhuǎn)換成格式化浮點(diǎn)數(shù)

    功能:雙字節(jié)十六進(jìn)制定點(diǎn)數(shù)轉(zhuǎn)換成格式化浮點(diǎn)數(shù) 入口條件:雙字節(jié)定點(diǎn)數(shù)的絕對(duì)值在[R0]中,數(shù)符在位1FH中,整數(shù)部分的位數(shù)在A中。
    發(fā)表于 01-19 22:45 ?3173次閱讀

    FPGA浮點(diǎn)數(shù)定點(diǎn)數(shù)表示法原理展示

    浮點(diǎn)數(shù)定點(diǎn)數(shù)表示法是我們?cè)谟?jì)算機(jī)中常用的表示方法 所以必須要弄懂原理,特別是在FPGA里面,由于FPGA不能像在MCU一樣直接用乘除法。
    發(fā)表于 11-18 02:15 ?8775次閱讀
    在<b class='flag-5'>FPGA</b>里<b class='flag-5'>浮點(diǎn)數(shù)</b>與<b class='flag-5'>定點(diǎn)數(shù)</b>表示法原理展示

    單片機(jī)浮點(diǎn)數(shù)運(yùn)算的源碼設(shè)計(jì)

    單片機(jī)執(zhí)行程序的過程,實(shí)際上就是執(zhí)行我們所編制程序的過程。即逐條指令的過程。本文詳細(xì)介紹了浮點(diǎn)數(shù)在單片機(jī)中的表示方式和匯編子程序,浮點(diǎn)數(shù)定點(diǎn)數(shù)加減法要困難,但是克服了定點(diǎn)數(shù)表示范圍小
    的頭像 發(fā)表于 03-07 15:19 ?1w次閱讀
    單片機(jī)<b class='flag-5'>浮點(diǎn)數(shù)</b>運(yùn)算的源碼設(shè)計(jì)

    Xilinx怎么定點(diǎn)數(shù)轉(zhuǎn)浮點(diǎn)數(shù)

    轉(zhuǎn)化為浮點(diǎn)數(shù)可以是單精度也可以是雙精度。
    發(fā)表于 07-05 08:09 ?3877次閱讀
    Xilinx怎么<b class='flag-5'>定點(diǎn)數(shù)</b>轉(zhuǎn)<b class='flag-5'>浮點(diǎn)數(shù)</b>

    定點(diǎn)數(shù)浮點(diǎn)數(shù)在STM32單片機(jī)中使用傅里葉(FFT)變換的理解

    定點(diǎn)數(shù)浮點(diǎn)數(shù)的區(qū)別目的:理解定點(diǎn)數(shù)浮點(diǎn)數(shù)在傅里葉變換(FFT)的實(shí)際應(yīng)用中的選擇單片機(jī)中如果需要進(jìn)行一定的運(yùn)算(常見的傅里葉變換)時(shí),需要在不同情況下對(duì)AD采集的數(shù)據(jù)進(jìn)行一定的處理
    發(fā)表于 12-24 19:22 ?16次下載
    <b class='flag-5'>定點(diǎn)數(shù)</b>和<b class='flag-5'>浮點(diǎn)數(shù)</b>在STM32單片機(jī)中使用傅里葉(FFT)變換的理解

    定點(diǎn)數(shù)浮點(diǎn)數(shù)的概念 浮點(diǎn)數(shù)二進(jìn)制序列與指數(shù)表達(dá)式之間的轉(zhuǎn)化

    的缺點(diǎn):由于小數(shù)點(diǎn)位置固定不變,定點(diǎn)數(shù)所表示的數(shù)的范圍非常有限,不能同時(shí)表達(dá)特別大或特別小的數(shù),所以才出現(xiàn)了浮點(diǎn)數(shù),以此來擴(kuò)充數(shù)的范圍,同時(shí)浮點(diǎn)數(shù)也廣泛應(yīng)用于精度要求高的場(chǎng)合。簡單的理解浮點(diǎn)數(shù)
    的頭像 發(fā)表于 08-22 16:06 ?8121次閱讀
    <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>