代碼實(shí)現(xiàn)中,如何處理FPGA中的定點(diǎn)數(shù)?
在這篇文章中,小編將對(duì)FPGA中的定點(diǎn)數(shù)處理方法的相關(guān)內(nèi)容和情況加以介紹以幫助大家增進(jìn)對(duì)它的了解程度,和小編一起來(lái)閱讀以下內(nèi)容吧。
一、代碼實(shí)現(xiàn)時(shí),如何處理FPGA中的定點(diǎn)數(shù)
FPGA中最常用的還是定點(diǎn)化數(shù)據(jù)處理方法,本文對(duì)定點(diǎn)化數(shù)據(jù)處理方法進(jìn)行簡(jiǎn)要探討,并給出必要的代碼例子。
1、一般擴(kuò)位原則:
1) 加減法運(yùn)算:擴(kuò)位位寬=ceil(log2(加法個(gè)數(shù)))
如:兩個(gè)加法擴(kuò)1位,三個(gè)四個(gè)加法擴(kuò)2位…
2)乘法運(yùn)算:結(jié)果擴(kuò)位位寬=兩個(gè)乘數(shù)位寬的和
如:15bit數(shù)與14bit相乘結(jié)果位寬應(yīng)為29bit。
3)除法運(yùn)算:結(jié)果擴(kuò)位位寬=被除數(shù)位寬與除數(shù)位寬的差
符號(hào)位擴(kuò)展:
2、高位截位,分為飽和截位和直接截位:
1)高位直接截位,直接拋掉高位保留低位,在確認(rèn)信號(hào)不會(huì)溢出的模塊使用直接截位的方法,節(jié)省資源;
2)高位飽和截位:對(duì)計(jì)算后的數(shù)據(jù)進(jìn)行判斷,如果超出位寬,正數(shù)輸出為最大值,負(fù)數(shù)輸出為最小值;判斷方法就是看高位是否完全相同。
3、低位截位:
1)直接截位:功率計(jì)算等統(tǒng)計(jì)模塊會(huì)使用,數(shù)字信號(hào)處理中不會(huì)使用,因?yàn)檫@種方式,頻域會(huì)出現(xiàn)直流。
2)四舍五入:如下所示,上一篇文章中說(shuō)了數(shù)據(jù)的表示(FPGA數(shù)字信號(hào)處理之?dāng)?shù)據(jù)的表示),看一看到對(duì)于補(bǔ)碼,verilog中只針對(duì)負(fù)數(shù)的0.5進(jìn)行特殊處理即可。
代碼如下,代碼中會(huì)判斷信號(hào)是否是-n.5,進(jìn)行處理。
3)近似四舍五入,對(duì)于真四舍五入來(lái)說(shuō),對(duì)-0.5的判斷邏輯較為復(fù)雜,而且有的數(shù)據(jù)處理對(duì)-0.5的要求也不高,此時(shí)可以采用近似四舍五入的方法,之前的代碼中最常出現(xiàn)的就是這種處理方式:
可以看到這種處理方式下-0.5的值是偏大的。
另外,要注意上一篇文章中多次提到的IEEE 754浮點(diǎn)數(shù)標(biāo)準(zhǔn)里面,對(duì)于浮點(diǎn)數(shù)取整的規(guī)定如下
1.就近舍入Round to nearest (even)
2. 向零舍入(Truncate)
3.朝正無(wú)窮舍入Round up (toward +∞)
4.朝負(fù)無(wú)窮舍入Round down (toward ?∞)
python等默認(rèn)使用的就是 就近舍入Round to nearest (even) 處理方法,python中的計(jì)算結(jié)果為:
round(0.5)= 0
round(1.5)=2
這一點(diǎn)大家做算法時(shí)要注意一下。
二、FPGA工作原理拓展
FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸入輸出模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。 現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)是可編程器件,與傳統(tǒng)邏輯電路和門(mén)陣列(如PAL,GAL及CPLD器件)相比,F(xiàn)PGA具有不同的結(jié)構(gòu)。FPGA利用小型查找表(16×1RAM)來(lái)實(shí)現(xiàn)組合邏輯,每個(gè)查找表連接到一個(gè)D觸發(fā)器的輸入端,觸發(fā)器再來(lái)驅(qū)動(dòng)其他邏輯電路或驅(qū)動(dòng)I/O,由此構(gòu)成了既可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過(guò)向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù)來(lái)實(shí)現(xiàn)的,存儲(chǔ)在存儲(chǔ)器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實(shí)現(xiàn)的功能,FPGA允許無(wú)限次的編程。
上述所有信息便是小編這次為大家推薦的內(nèi)容,希望大家能夠喜歡,想了解更多有關(guān)它的信息或者其它內(nèi)容,請(qǐng)關(guān)注我們網(wǎng)站哦。