2017-06-16 8 views
-1

私のプログラムで宣言されているstd_logic_vectorの入力は、 say number:std_logic_vector(7 downto 0)です。 長さが入力番号の長さまで増加するstd_logic_vector型のシグナルを宣言したいと思います。具体的には、私はこれを行う信号が欲しいです -可変長std_logic_vector信号を宣言する方法

for j in num_length downto 0 loop --num_length=number'length-1 
a <= number(num_length downto j); -- variable length signal 'a' 
end loop; 

どうすればいいですか?

+0

は、 'number'length'を使用します。しかし、コード例は理にかなっていません。 – JHBonarius

+0

私は私の質問を説明します。 EXのために:私は=「101」 を=「1」 =「10」を取るべきである「」信号を宣言する 番号=「10101010」(サイズ8のSTD_LOGIC_VECTOR)を有しますa = "1010"などとなり、forループで下降するので になります。 私はこれを行う簡単な方法を検討しています。ありがとう! – Veena

+0

可変長の 'std_logic_vector'が必要ですか?それはどのように働くと思いますか?動的メモリ割り当てが必要になります。 VHDLはハードウェア記述言語です。 'std_logic_vector'は、いくつかのワイヤを表します。どのようにしてシステム内でワイヤを動的に追加または削除しますか?インスタンス化中に配列の長さを固定します。 – JHBonarius

答えて

-1

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 

ないあなたが正確に何をしたいのか確認してください、しかし、これらのアイデアは役立つはずです。

+0

ええ。現在私は最大長でしようとしていると私の信号のサイズを変更しようとしています。あなたのソリューションでは、どのようにマスクを定義しますか?再び可変長でなければならないのでしょうか?それ以外の場合はエラーが発生します。 – Veena

+0

実際には、マスクでも行うことができるにもかかわらず、ゼロ埋め込みを意味しました...回答が編集されました。 –

関連する問題