2017-04-08 12 views
0

VHDLにstd_logic_vectorsの配列を作成しようとしています。この配列は、バレルシフタを作成するためにgenerateステートメントで使用されます。配列の各要素(配列、ベクトル)は個別にアドレス可能なビットでなければなりません。ここに私のコードのいくつかがあります。2次元配列は1次元を想定しています

信号宣言:アーキテクチャで

type stage_t is array(4 downto 0) of std_logic_vector (15 downto 0); 
signal stages: stage_t; 

:1マルチプレクサ:2の

test_stage: for st in 0 to 4 generate 
     test_bit_assign: for st_bit in 0 to 15 generate 
      test_stagemux: entity work.mux2_1 port map (
       S => amt(st), 
       M0 => stages(st,st_bit), M1 => stages(st,st_bit+log_w), 
       O => stages(st+1,st_bit) 
     ); 
end generate; 

エンティティ

entity mux2_1 is 
    generic (n : INTEGER := 8); 
    port (
     S : in std_logic; -- select 
     M0, M1 : in std_logic; 
     O  : out std_logic 
    ); 
end mux2_1; 

私は取得していますエラー:

Indexed name prefix type stage_t expects 1 dimensions 

これは私がステージアレイに読み書きしている場所で発生します。どのようにベクトルの1つのビットをアドレス指定するのですか?

+1

また、型stage_tがSTD_LOGICの配列(4 0とdownto、0とdownto 15)である 'ようなタイプのstage_tを宣言することができ;'とそのポートマップであなたの関連を保持2次元配列します。 [最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)がなければ、次に遭遇する問題を正確に予測することは難しいです。 – user1155120

+2

ステージは1次元タイプ(stage_t)です。 'M0 => stages(st)(st_bit)の行に沿って試してみてください。'次元インデックスstのstはステージのstage_tのどの要素を指定するインデックス名で、st_bit std_logic_vectorの要素へのインデックスとして使用します。ステージを多次元配列として扱おうとしていますが、そうではありません。要素は配列型になります。 – user1155120

+1

@ J.H.Bonariusうん、いくつかのユーザーはコメントの質問に答えてほしい: –

答えて

2

私は@ user1155120の2番目の解決策に従うことで私の問題を解決しました。 stage_tはベクトルの配列であり、各次元はそれ自身で扱われるのが好きです。 stages(st)は、ベクトル全体をstにインデックスします。 stages(st)(st_bit)(stages(st))(st_bit)と同じです。

関連する問題