2012-09-03 61 views
2

我需要對存儲爲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. 

我不知道什麼它正確的語法......「添加」功能不接受像用戶指南中的示例中的參數。

回答

4

對於VHDL 2008,使用內置的float_pkg,它提供可以轉換爲std_logic_vector和從std_logic_vector轉換的浮點類型。對於早期版本的VHDL,您可以使用http://www.vhdl.org/fphdl/index.html中這些相同軟件包的原始預標準版本。

當使用浮點類型,他們的工作非常直截了當,類似於無符號類型:你可以對他們做算術,調整它們的大小等

+1

但仍然值得研究定點邏輯是否不行,因爲浮點運算會導致更大更慢的設計。在你提到的網站上的常見問題解答中,它表示預計會有3倍的開銷......我會猜測這是一個下限。 – BennyBarns

+0

謝謝!我從該頁面下載了所需的文件,並將它們添加到庫中,如下所示:library IEEE_proposed; use ieee_proposed.float_pkg.all;現在我在問題中使用to_float函數。它是可綜合的,但我會嘗試模擬它,以確保它的工作正確。 –

+1

在第5頁的[本文檔](http://www.vhdl.org/fphdl/Float_ug.pdf)中也有一個很好的例子。 –

1

在我使用了浮點IP內核年底,隨着IP生成核心發電機在ISE。上面鏈接的浮點軟件包實際上是毫無價值的,因爲合成花費了一個小時,而Spartan3上的最大頻率僅爲〜6MHz。 IP核:40 MHz和3-5分鐘的綜合時間。