2

信号として保存されているIEEE754浮動小数点数を操作する必要がありstd_logic_vectorます。

例えば:

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.

そのための正しい構文は何だろうか...「add」関数は、ユーザーガイドの例のように引数を受け入れません。

4

2 に答える 2

4

VHDL 2008の場合、std_logic_vectorとの間で変換可能なfloatタイプを提供する組み込みのfloat_pkgを使用します。以前のバージョンのVHDLの場合、http: //www.vhdl.org/fphdl/index.htmlからこれらの同じパッケージの元の先行標準バージョンを使用できます。

浮動小数点型を使用する場合、符号なし型と同様に非常に簡単に機能します。算術演算やサイズ変更などを行うことができます。

于 2012-09-03T17:43:42.737 に答える
1

結局、ISEのIPコアジェネレーターで生成された浮動小数点IPコアを使用しました。上でリンクされた浮動小数点パッケージは、合成に1時間ほどかかり、Spartan3での最大周波数がわずか6 MHZであったため、実際には価値がありませんでした。IPコアの場合:40 MHzおよび3〜5分の合成時間。

于 2013-01-25T15:47:18.580 に答える