FPGA中加減乘除運算的注意問題
阿新 • • 發佈:2019-02-05
FPGA中有關加減乘除運算的位寬問題:
1:在進行加減乘除運算時一定要注意位寬,保證足夠大的位寬,防止資料溢位,如果溢位結果就會出現錯誤,尤
其是加和乘運算,一定要計算好位寬(位寬的計算可以都取其最大值,看最大值計算後的位寬就是最大位寬,採
用這個位寬資料就溢位不了)
2:除法運算時:除法和減法都是縮小資料,得到的最後結果如果要比原來的位寬小的時候,那取資料的低位,把
高位拋棄,取低位的位寬數和輸出結果的位寬數一致就行
例如:結果data_out是8位資料位寬
原來的數sum是11位位寬,sum經過除法運算(sum/8,就是右移3位),
那麼結果data_out=sum[7:0](即取低8位才是結果)
3:乘法運算時注意位寬足夠就行,別溢位
4:乘法:就是左移,移動是位數是2的指數,即*8就是左移3位,*16就是左移4位
除法:就是右移,移動位數原則和乘法一樣。
5:除法運算:例子:m=n/9;怎樣計算一個數除以9(這個數不是2的整數倍)m是要求的結果,n是原來的數
首先我們可以先解決9,比如我們利用1024(這個數正好是2^10,便於移位計算),因為1024/9=113.7我們取
整即為113(64+32+16+1),因此可以得到9=1024/113,這樣我們就把1024/113這個數當成9,
即m=n/(1024/113)=(n*113)/1024
=(n*113)>>10,這樣就有可以轉換為移位操作了,就變的簡單了,其中那個113可以用乘法的移位來計算
這其中1024是自己任意取的主要是要和2的指數倍相關,便於移位,其中這個1024取的越大,出來的結果的精
度就越高,比如還能取2048,4096等,越大精度越高。
1:在進行加減乘除運算時一定要注意位寬,保證足夠大的位寬,防止資料溢位,如果溢位結果就會出現錯誤,尤
其是加和乘運算,一定要計算好位寬(位寬的計算可以都取其最大值,看最大值計算後的位寬就是最大位寬,採
用這個位寬資料就溢位不了)
2:除法運算時:除法和減法都是縮小資料,得到的最後結果如果要比原來的位寬小的時候,那取資料的低位,把
高位拋棄,取低位的位寬數和輸出結果的位寬數一致就行
例如:結果data_out是8位資料位寬
原來的數sum是11位位寬,sum經過除法運算(sum/8,就是右移3位),
那麼結果data_out=sum[7:0](即取低8位才是結果)
3:乘法運算時注意位寬足夠就行,別溢位
4:乘法:就是左移,移動是位數是2的指數,即*8就是左移3位,*16就是左移4位
除法:就是右移,移動位數原則和乘法一樣。
5:除法運算:例子:m=n/9;怎樣計算一個數除以9(這個數不是2的整數倍)m是要求的結果,n是原來的數
首先我們可以先解決9,比如我們利用1024(這個數正好是2^10,便於移位計算),因為1024/9=113.7我們取
整即為113(64+32+16+1),因此可以得到9=1024/113,這樣我們就把1024/113這個數當成9,
即m=n/(1024/113)=(n*113)/1024
=(n*113)>>10,這樣就有可以轉換為移位操作了,就變的簡單了,其中那個113可以用乘法的移位來計算
這其中1024是自己任意取的主要是要和2的指數倍相關,便於移位,其中這個1024取的越大,出來的結果的精
度就越高,比如還能取2048,4096等,越大精度越高。