1

私の現在のプロジェクトには、7 ビットのベクトルを出力するアドレス カウンター エンティティが含まれており、その出力 (m) はサイン ルックアップ テーブル エンティティに入ります。したがって、基本的には、m を x に、正弦エンティティの出力を y にします。しかし、私の問題はルックアップ テーブルのエントリにあります。実際の実際の値を std_logic_vectors に変換するにはどうすればよいですか?

たとえば、エントリの正弦は 34.1326 です。それはどのようにベクトルに変換されますか?

4

2 に答える 2

4

baldyHDL の答えは機能しますが、(現在は標準で合成可能な) 固定小数点型を使用して多くの手作業を節約できるようになりました。

2 進小数点の左右にいくつのビットを配置するかを選択できます。実数を固定小数点に直接変換する関数があります。

ライブラリはhttp://www.vhdl.org/fphdl/にあります。

例えば:

signal a : sfixed (7 downto -6);

これには、ポイントの左に 7 ビット (-64 から +63 の範囲)、ポイントの右に 6 ビットがあり、それぞれ 2^-6 = 0.015625 の価値があります。

次に、次のことができます。

s <= to_sfixed(34.1326);

要求した形式で表現できる最も近い数値が得られます。入力の解像度を考えると、それはおそらく十分に近いものではないため、-6 をより負の値に変更して解像度を高めます。

于 2013-04-12T08:43:22.710 に答える
0

エントリに値 2^n を掛けて、結果を丸めます。結果は std_logic_vector として表すことができますが、これには "n" 個のポスト コンマ ビットがあることに注意してください。丸め後の量子化が適切になるように「n」を選択してください。

例:

  1. あなたの値: 34.1326
  2. ターゲット ポスト コンマ: 8 ビット
  3. 新しい値: 34.1326 * 256 = 8737.946
  4. 8737に丸めます
  5. 14 ビットの std_logic_vector として、これは「10001000100010」です。
  6. これは基本的に "100010"."00100010" = 34.132813 です。

注意: ベクター サイズを慎重に選択し、SIGNS に注意してください

于 2013-04-12T06:26:00.997 に答える