VIVADO中單精度浮點數IP核計算結果與MATLAB單精度浮點數計算結果的對比
MATLAB定點運算仿真,對比VIVADO計算的結果
目錄
前言
一、VIVADO與MATLAB單精度浮點數運算結果對比
二、MATLAB定點運算仿真
總結
前言
? ? ? ? 本文介紹了怎么在MATLAB中使用單精度浮點數進行運算,另外還將MATLAB單精度浮點數運算的結果和VIVADO浮點數IP核運算的結果作了對比,會發現二者結果是吻合的。最后還介紹了怎么在MATLAB中進行定點運算的仿真,也將其和VIVADO仿真的結果進行了對比,二者也是吻合的。
提示:創作不易,有幫助請一鍵三連!
一、VIVADO與MATLAB單精度浮點數運算結果對比
? ? ? ? 首先用MATLAB產生一組測試數據,
a=randn(1);mat2str(a)
b=randn(1);mat2str(b)
aa=single(a);mat2str(aa)
num2hex(aa)
bb=single(b);mat2str(bb)
num2hex(bb)
cc=aa*bb;mat2str(cc)
num2hex(cc)
ans =
? ? '0.5376671395461'
ans =
? ? '1.83388501459509'
ans =
? ? '0.537667155265808'
ans =
? ? '3f09a48e'
ans =
? ? '1.8338850736618'
ans =
? ? '3feabcbf'
ans =
? ? '0.986019790172577'
ans =
? ? '3f7c6bcb'
MATLAB產生了兩個單精度的數,并計算了這兩個數的乘法,還給出了相應的4字節數據表示值。這里需要注意的是,按理來說,單精度浮點數應該只有7位小數,但是MATLAB在展示結果時依然采用的雙精度浮點數,所以小數位數多于7位。包括VIVADO仿真界面也是如此。
數值表示 | 字節表示 | |
aa | 0.537667155265808 | 3f09a48e |
bb | 1.8338850736618 | 3feabcbf |
cc=aa*bb | 0.986019790172577 | 3f7c6bcb |
以上是MATLAB的運算結果,下面是VIVADO以單精度浮點數計算的結果
????????對比可以發現,MATLAB和VIVADO計算的結果是相等的。這樣我們在編寫算法時就可以先用MATLAB模擬FPGA運算仿真驗證算法性能了。
????????一組數據有可能是偶合,再隨機測試一組數據,確保真的對得上。MATLAB再運行一次,得:
ans =
? ? '-2.25884686100365'
ans =
? ? '0.862173320368121'
ans =
? ? '-2.25884675979614'
ans =
? ? 'c01090f2'
ans =
? ? '0.862173318862915'
ans =
? ? '3f5cb764'
ans =
? ? '-1.94751739501953'
ans =
? ? 'bff94840'
MATLAB結果如表格所示:
數值表示 | 字節表示 | |
aa | -2.25884675979614 | c01090f2 |
bb | 0.862173318862915 | 3f5cb764 |
cc=aa*bb | -1.94751739501953 | bff94840 |
VIVDO計算結果如下:
對比依然可以發現,MATLAB和VIVADO計算的結果是相等的。
綜上,VIVADO中的單精度浮點數的運算能用MATLAB的計算來模擬,此處只驗證了乘法,推測其他運算也是沒問題的,不放心的讀者可自行驗證加減除。
二、MATLAB定點運算仿真
? ? ? ? 方法比較簡單,就是把數乘上2^(位寬)后四舍五入再進行運算,相當于把數給擴大,只有整數部分。注意這個位寬是不包含符號位的。運算完后需要截位就自行截位,不需要截位就不用截位。
MATLAB代碼及運算結果如下:
leng=15; % 不含符號位
a=randn(1)+1j*randn(1);
aa=round(a*2^(leng));mat2str(aa)
real_a=dec2hex(real(aa),4)
imag_a=dec2hex(imag(aa),4)
b=randn(1)+1j*randn(1);
bb=round(b*2^(leng));mat2str(bb)
real_b=dec2hex(real(bb),4)
imag_b=dec2hex(imag(bb),4)
c=aa*bb
mat2str(c)
real_c=dec2hex(real(c),8)
imag_c=dec2hex(imag(c),8)
ans =
? ? '-28340-985i'
real_a =
? ? '914C'
imag_a =
? ? 'FC27'
ans =
? ? '-5403+20569i'
real_b =
? ? 'EAE5'
imag_b =
? ? '5059'
c =
? ?1.7338e+08 - 5.7760e+08i
ans =
? ? '173381485-577603505i'
real_c =
? ? '0A55976D'
imag_c =
? ? 'DD92784F'
同樣的,給出VIVADO中調用定點復數乘法器運算得到的結果。
對比十六進制表示的輸入和輸出,可發現MATLAB的結果和VIVADO的結果完全吻合。
總結
? ? ? ? 從結果來看,在MATLAB中也能模擬VIVADO中的單精度浮點運算和定點運算。