VHDLはハードウェア記述言語(HDL)です。 std_logic_vectorはワイヤーとレジスタ(物理コンポーネント)で表されます。したがって、サイズは動的に変更することはできませんが、合成前に決定する必要があります。
だから、唯一のあなたが必要とするビット読み、その後、あなたが必要とする「MAX」の長さでSTD_LOGIC_VECTORを使用します。これは、あなたがが完全なベクトルを読み取る必要がある場合をカバーしていない
constant zeros : std_logic_vector(MAX-1 downto 0) := (others => '0');
signal a,b : std_logic_vector(MAX-1 downto 0);
...
a <= something;
...
b <= zeros(MAX-1 downto i) & a(i-1 downto 0); -- i is your dynamic index
を。
あなたは...少し厄介マスクを使用することができます。
use ieee.numeric_std.all;
...
constant mask : std_logic_vector(MAX-1 downto 0) := (others => '1');
signal a,b : std_logic_vector(MAX-1 downto 0);
...
a <= something;
...
b <= std_logic_vector(shift_right(unsigned(mask), MAX-i)) and a; -- i is your dynamic index
ないあなたが正確に何をしたいのか確認してください、しかし、これらのアイデアは役立つはずです。
は、 'number'length'を使用します。しかし、コード例は理にかなっていません。 – JHBonarius
私は私の質問を説明します。 EXのために:私は=「101」 を=「1」 =「10」を取るべきである「」信号を宣言する 番号=「10101010」(サイズ8のSTD_LOGIC_VECTOR)を有しますa = "1010"などとなり、forループで下降するので になります。 私はこれを行う簡単な方法を検討しています。ありがとう! – Veena
可変長の 'std_logic_vector'が必要ですか?それはどのように働くと思いますか?動的メモリ割り当てが必要になります。 VHDLはハードウェア記述言語です。 'std_logic_vector'は、いくつかのワイヤを表します。どのようにしてシステム内でワイヤを動的に追加または削除しますか?インスタンス化中に配列の長さを固定します。 – JHBonarius