2017-04-08 19 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 MUX : 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

또한 stage_t 유형을 'std_logic 유형의 array (4 downto 0, 15 downto 0)'유형으로 선언하고 포트 맵에서 연결을 유지하는 2 차원 배열로 지정할 수 있습니다. [Minimal, Complete and Verifiable example] (https://stackoverflow.com/help/mcve)이 없으면 다음 번 발생할 문제를 정확하게 예측하기 어렵습니다. – user1155120

+2

스테이지는 1 차원 유형 (stage_t)입니다. 'M0 => stages (st) (st_bit)의 행을 따라 해보십시오.'dimension 인덱스에서 st는 스테이지의 stage_t 요소를 지정하는 인덱스 된 이름이고 st_bit를 사용하여 인덱스 된 이름의 접두어입니다. std_logic_vector의 요소에 대한 인덱스로 사용합니다. 스테이지를 다차원 배열로 처리하려고 시도하고 있지만 그렇지 않습니다. 배열 타입 일뿐입니다. – user1155120

+1

@ J.H.Bonarius 그래, 일부 사용자는 의견에 질문에 답할 것을 주장합니다. / –

답변

2

@ user1155120의 두 번째 해결 방법에 따라 문제를 해결했습니다. stage_t은 벡터 배열이며 각 차원은 자체적으로 처리되는 것을 좋아합니다. stages(st)은 전체 벡터를 st에 인덱싱합니다. stages(st)(st_bit)(stages(st))(st_bit)과 같습니다.