これは正しく見えますか?
Lookup_table(conv_integer(128 - Position));
――ポジションはstd_logic_vector(7 downto 0)
関数のリファレンス ページには、conv_integer
上記のように括弧の間で動作する 2 つの引数を指定できるかどうかは記載されていません。ただし、引数が整数の場合は整数を返します。何かご意見は?
これは正しく見えますか?
Lookup_table(conv_integer(128 - Position));
――ポジションはstd_logic_vector(7 downto 0)
関数のリファレンス ページには、conv_integer
上記のように括弧の間で動作する 2 つの引数を指定できるかどうかは記載されていません。ただし、引数が整数の場合は整数を返します。何かご意見は?
あなたは方法を探していますto_integer
。
次のコード行のいずれかを使用して整数に変換することにより、位置に int 計算を実行できます。
to_integer(unsigned(Position))
またはto_integer(signed(Position))
、符号付きまたは符号なしの 8 ビット ベクトルであるかどうかによって異なります。
その後、行うことができますLookup_table(128 - to_integer(unsigned(Position)))
。
下位 (ビット数が少ない) 論理ベクトルから整数に変換する前に、常に特定のsigned
/キャストを実行する必要があります。unsigned
さらに、int
数学を行っている場合は、算術を行う前に整数に変換することをお勧めします。
それ以外の場合、VHDL は、メソッドの引数をメソッドに入れる前に評価するという点で、通常のプログラミング言語と同様であるため、引数内で操作を実行してもまったく問題ありません。
VHDL の場合、通常、std_logic_vector と整数の間の変換に 1 of 2 の方法を使用します。
私が知っているように、この変換には算術 (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