我正在使用David bishop的定點庫在vhdl中做了一些數學計算。我需要將最終值解碼爲整數。我遵循的方法如下,我確實得到了小數部分的精確值,但小數值不正確。我還沒找到問題。在小數部分前兩位數字是錯誤的。 xx 8374.839923 xx數字總是錯的。VDHL固定解碼代碼無法正常工作
當我執行,我得到 74334.738295爲 74334.738295
內部架構, 內部過程中,我做的聲明這些變量,
variable cp : sfixed(20 downto -19);
variable mod10 : sfixed(4 downto 0);
variable div10 : sfixed(4 downto 0);
variable L0 : sfixed(4 downto 0);
variable L1 : sfixed(4 downto -4);
variable L2 : sfixed(4 downto -8);
variable L3 : sfixed(4 downto -12);
variable L4 : sfixed(4 downto -16);
variable L5 : sfixed(4 downto -20);
variable L6 : sfixed(4 downto -24);
variable temp_L : sfixed(19 downto 0);
variable temp_L1 : sfixed(20 downto -4);
variable temp_L2 : sfixed(21 downto -8);
variable temp_L3 : sfixed(22 downto -12);
variable temp_L4 : sfixed(23 downto -16);
variable temp_L5 : sfixed(24 downto -20);
variable temp_L6 : sfixed(25 downto -24);
開始後,我需要解碼174334.738295在sfixed,因爲有時我得到負數。這個數字被另一個計算,在此未提供,如果該號碼是174334.738295(sfixed)代替然後我需要解碼此號碼,
cp := to_sfixed(174334.738295,20,-19);
temp_L := cp(19 downto 0); -- remove sign bit
mod10 :=to_sfixed(10,4,0) ;
div10 :=to_sfixed(10,4,0) ;
L0 := temp_L mod mod10;
temp_L1 := temp_L/div10;
L1 := temp_L1 mod mod10;
temp_L2 := temp_L1/div10;
L2 := temp_L2 mod mod10;
temp_L3 := temp_L2/div10;
L3 := temp_L3 mod mod10;
temp_L4 := temp_L3/div10;
L4 := temp_L4 mod mod10;
temp_L5 := temp_L4/div10;
L5 := temp_L5 mod mod10;
temp_L6 := temp_L5/div10;
L6 := temp_L6 mod mod10;
L6是第1位和L5是第二位。
我不知道負指標是可能的。不過,我不會使用它們。 –
@Oron Port請參考David Bishop的定點lib手冊! – iopertyki
固定和浮點庫是開源的,並存儲在GitHub:https://github.com/fphdl/fphdl。你可以在那裏打開一個問題,並要求更詳細的幫助。您還應該將您當前的副本與最新版本進行比較。這就是將在VHDL-2017中發佈的版本。 – Paebbels