2011-03-11 4 views
-2

VHDL 코드에 매우 간단한 문제가 있습니다. 나는 다음과 같은 코드를 정의했습니다 :VHDL의 배열 유형이 일치하지 않습니다.

type irf_array is array(0 to 1) of integer; 
signal index : std_logic; 
.... 
index := input(5); 
out := irf_array(index); 

나는 다음과 같은 오류 얻을이 간단한 코드의 fragment 컴파일하려고 : 사람이 내가 STD_LOGIC을 사용하는 방법에 대한 아이디어가있는 경우

Error: array index type mismatch [6.4] 

그래서 내가 궁금를 값을 배열의 입력으로 사용합니다.

감사합니다.

+0

, 나는 그것을 설명하지 않도록하는 것이 좋습니다 싶습니다 미리 "아주 간단하게". –

답변

3

배열 색인은 정수 여야합니다.

type irf_array is array(0 to 1) of integer; 
signal index : unsigned(0 downto 0); 
.... 
index(0) := input(5); 
out := irf_array(to_integer(index)); 

당신은 사용할 수 있습니다 : 당신이 STD_LOGIC 기반 유형을 사용하려는 경우, 당신은 아마 (일반 STD_LOGIC 신호는 달리 수치의 개념을 포함)에 서명 또는 부호없는 유형과 적절한 유형 변환을 사용해야합니다 별도의 변환을 대신 부호없는 형식의 std_logic_vector : 당신이 자신을 해결할 수없는 문제를 해결하기 위해 시간을 할애 할 수 있습니다 사람들에게 존경

signal index : std_logic_vector(0 downto 0); 
... 
out := irf_array(to_integer(unsigned(index))); 
+4

인덱스를 정수로 선언하는 것이 어떨까요? 그렇게하면 나중에 데이터 유형을 변환 할 필요가 없습니다. 신호 인덱스 : 정수 범위 0 ~ 1; – Philippe

+0

올바른 '서명되지 않은'유형을 사용하는 경우 +1. 하지만 나는 처음부터 정수를 사용할 것입니다. –

관련 문제