ベクトルを次のように定義しました。
A: in std_logic_vector(7 downto 0);
次のように、このベクトルにリテラルを割り当てる場合
A <= {'1', '0', '0', '1'};
この expession は 7,6,5 & 4 のベクトル位置または 3,2,1 & 0 の位置を取り込みますか?
アイデアは、符号を付けて 8 ビット整数に拡張できるビットのベクトルですが、現在は後者が true の場合にのみ機能します。
構文が無効です。さまざまなビットをリストとして保持したい場合は、割り当てを行うことができます。
A(3 downto 0) <= (3 => '1', 2=> '0', 1=> '0', 0=> '1') ;
ボーナスサイン拡張:
A <= (2=> '0', 1=> '0', 0=> '1', others => '1') ;
個々のビットを数値定数として使用しているのはなぜですか? 次のようなことをしていない理由はありますか?
A <= std_logic_vector(to_signed(-7,A'length));
A が最初から符号付きの型である場合は std_logic_vector キャストを取り除くことができ、符号の拡張が必要ない場合は符号なしの型と変換関数を使用できます。
これは合法ではないと思います - 少なくともザイリンクス ISE にはありません。
それを行う正しい方法は、割り当てたい A の部分を指定することです。
A(3 downto 0) <= "1001";
符号拡張が必要な場合は、適切なタイプを使用してくださいsigned
。
次に、関数-1
を使用して適切な数値 ( など) を適切な幅のベクトルに変換できます。次に例を示します。to_signed
to_signed (-1, a'length)
明示的なビット設定よりもこれを行う利点は次のとおりです。
a
変えると、すべて(まだ)Just Works