0

これは正しく見えますか?

Lookup_table(conv_integer(128 - Position));――ポジションはstd_logic_vector(7 downto 0)

関数のリファレンス ページには、conv_integer上記のように括弧の間で動作する 2 つの引数を指定できるかどうかは記載されていません。ただし、引数が整数の場合は整数を返します。何かご意見は?

4

2 に答える 2

2

あなたは方法を探していますto_integer

次のコード行のいずれかを使用して整数に変換することにより、位置に int 計算を実行できます。

to_integer(unsigned(Position))またはto_integer(signed(Position))、符号付きまたは符号なしの 8 ビット ベクトルであるかどうかによって異なります。

その後、行うことができますLookup_table(128 - to_integer(unsigned(Position)))

下位 (ビット数が少ない) 論理ベクトルから整数に変換する前に、常に特定のsigned/キャストを実行する必要があります。unsignedさらに、int数学を行っている場合は、算術を行う前に整数に変換することをお勧めします。

それ以外の場合、VHDL は、メソッドの引数をメソッドに入れる前に評価するという点で、通常のプログラミング言語と同様であるため、引数内で操作を実行してもまったく問題ありません。

于 2012-07-03T12:58:06.887 に答える
0

VHDL の場合、通常、std_logic_vector と整数の間の変換に 1 of 2 の方法を使用します。

  1. std_logic_unsigned/std_logic_signed ライブラリを使用します。この方法では、Simulator/Synthesis ツールが std_logic_vector を符号付きまたは符号なしに自動的に推論します。
  2. numeric_std ライブラリを使用します。これについては、unsigned/signed を使用して std_logic_vector を signed または unsigned に変換します。これにより、1 つのモジュール内で符号付き操作と符号なし操作を混在させることができます。(私が知っているように、署名されたものと使用されたものは、補償ビットを気にする場合、ほとんど動作することに違いはありません)。

私が知っているように、この変換には算術 (std_logic_arith) ライブラリがありますが、誰かがそれは標準ではなく、numeric_std と競合すると言いました。(たとえば、bit_length bit convertin) を使用して、numeric_std に切り替える必要があります。

result<=std_logic_vector(to_unsigned(128-x,bit_length); -- For unsigned          
result<=std_logic_vector(to_signed(128-x,bit_length); -- For signed
于 2012-07-04T03:09:37.447 に答える