我需要對存儲爲std_logic_vector
信號的IEEE 754浮點數進行操作。(VHDL)存儲爲std_logic_vectors的IEEE 754編碼浮點值的算術運算
例如爲:
signal a, b, ans : std_logic_vector(63 downto 0);
..
ans <= std_logic_vector(to_float(a) + to_float(b));
我可怎麼辦呢? (我想我需要在轉換期間定義位數) 編輯:代碼是可綜合的,但我得到警告。代碼:
variable tempfloat1, tempfloat2, tempfloat3 : float32;
..
tempfloat1 := to_float(s_do_ssc2wb, exponent_width => 8, fraction_width => 23);
tempfloat2 := to_float(s_do_wb2ssc, exponent_width => 8, fraction_width => 23);
tempfloat3 := tempfloat1 + tempfloat2;
警告:
"float_pkg_c.vhdl" line 1515: VHDL Assertion Statement with non constant condition is ignored.
"float_pkg_c.vhdl" line 1600: Index value(s) does not match array range, simulation mismatch.
我不知道什麼它正確的語法......「添加」功能不接受像用戶指南中的示例中的參數。
但仍然值得研究定點邏輯是否不行,因爲浮點運算會導致更大更慢的設計。在你提到的網站上的常見問題解答中,它表示預計會有3倍的開銷......我會猜測這是一個下限。 – BennyBarns
謝謝!我從該頁面下載了所需的文件,並將它們添加到庫中,如下所示:library IEEE_proposed; use ieee_proposed.float_pkg.all;現在我在問題中使用to_float函數。它是可綜合的,但我會嘗試模擬它,以確保它的工作正確。 –
在第5頁的[本文檔](http://www.vhdl.org/fphdl/Float_ug.pdf)中也有一個很好的例子。 –