0

ベクトルを次のように定義しました。

A: in std_logic_vector(7 downto 0);

次のように、このベクトルにリテラルを割り当てる場合

A <= {'1', '0', '0', '1'};

この expession は 7,6,5 & 4 のベクトル位置または 3,2,1 & 0 の位置を取り込みますか?

アイデアは、符号を付けて 8 ビット整数に拡張できるビットのベクトルですが、現在は後者が true の場合にのみ機能します。

4

4 に答える 4

3

構文が無効です。さまざまなビットをリストとして保持したい場合は、割り当てを行うことができます。

A(3 downto 0) <= (3 => '1', 2=> '0', 1=> '0', 0=> '1') ;

ボーナスサイン拡張:

A <= (2=> '0', 1=> '0', 0=> '1', others => '1') ;
于 2013-03-01T16:14:21.713 に答える
1

個々のビットを数値定数として使用しているのはなぜですか? 次のようなことをしていない理由はありますか?

A <= std_logic_vector(to_signed(-7,A'length));

A が最初から符号付きの型である場合は std_logic_vector キャストを取り除くことができ、符号の拡張が必要な​​い場合は符号なしの型と変換関数を使用できます。

于 2013-03-01T19:48:11.360 に答える
1

これは合法ではないと思います - 少なくともザイリンクス ISE にはありません。

それを行う正しい方法は、割り当てたい A の部分を指定することです。

A(3 downto 0) <= "1001";
于 2013-03-01T12:00:09.787 に答える
0

符号拡張が必要な​​場合は、適切なタイプを使用してくださいsigned

次に、関数-1を使用して適切な数値 ( など) を適切な幅のベクトルに変換できます。次に例を示します。to_signed

to_signed (-1, a'length)

明示的なビット設定よりもこれを行う利点は次のとおりです。

  • よりシンプルなコード
  • 誰もがそれを読んで、あなたがしていることを理解できます (コメントは不要です!)
  • 長さをa変えると、すべて(まだ)Just Works
于 2013-03-05T10:16:17.467 に答える