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