2016-11-14 10 views
2

저는 VHDL-2008에서 일반 패키지 (목록)를 만들고 있습니다. 이 패키지에는 요소 유형에 대한 유형이 있습니다. 패키지 내에이 요소 유형의 배열 유형을 선언하면 새로운 유형입니다. 예를 들어 정수, 내 새로운 integer_array가 라이브러리 ieee의 integer_vector와 호환되지 않습니다.배열 형식을 제네릭 형식 매개 변수로 VHDL 패키지에 전달하는 방법은 무엇입니까?

그래서 배열 유형 (예 : integer_vector)을 전달해야합니다.

Prefix of attribute "range" must be appropriate for an array object or must denote an array subtype.

어떻게 제네릭 형식 매개 변수가 배열되는 나타낸다 : 해당 배열 형식의 배열 인스턴스가 'range 속성을 사용하는 경우, 그것은 나 QuestaSim에 경고 준다?

일반 패키지 :

package SortListGenericPkg is 
    generic (
    type ElementType; -- e.g. integer 
    type ArrayofElementType; -- e.g. integer_vector 
    function LessThan(L : ElementType; R : ElementType) return boolean;  -- e.g. "<" 
    function LessEqual(L : ElementType; R : ElementType) return boolean  -- e.g. "<=" 
); 

    function inside (constant E : ElementType; constant A : in ArrayofElementType) return boolean; 
end package; 

package body SortListGenericPkg is 
    function inside (constant E : ElementType; constant A : in ArrayofElementType) return boolean is 
    begin 
    for i in A'range loop -- this line causes the error 
     if E = A(i) then 
     return TRUE ; 
     end if ; 
    end loop ; 
    return FALSE ; 
    end function inside ; 
end package body; 

인스턴스화 : 그것은 어쩌면 VHDL 표준 문제, 그래서

package SortListPkg is 
    package SortListPkg_int is new work.SortListGenericPkg 
    generic map (
     ElementType  => integer, 
     ArrayofElementType => integer_vector, 
     LessThan   => "<", 
     LessEqual   => "<=" 
    ); 
    alias Integer_SortList is SortListPkg_int.SortListPType; 
end package SortListPkg ; 
+1

IEEE Std 1076-2008 16.2.3 배열의 사전 정의 된 특성, A'RANGE, Prefix : * 배열 객체 또는 그 별칭에 적합한 모든 접두어 A 또는 색인 범위가 정의 된 배열 하위 유형을 나타냅니다. * ArrayofElementType 클래스 및 하위 유형은 정교화 될 때까지 알 수 없습니다. 6.5.3 인터페이스 유형 선언 * 인터페이스 유형에 대한 값 및 적용 가능한 연산 세트는 환경의 연관된 부속 유형에 의해 결정될 수 있습니다 *, * ... 정의되지 않은 기본 유형 및 기본 유형의 부속 유형. 기본 유형의 클래스 (5.1 참조)가 정의되지 않았습니다. * – user1155120

답변

1

ModelSim을은 유사한 오류/경고를한다. 유형으로

... inside(int, ArrayofElementType(int_vec)); 

또는 간단한 사용 ArrayofElementType : inside이처럼 호출되는 인수를

package SortListGenericPkg is 
    generic (
    type ElementType -- e.g. integer 
); 
    type ArrayofElementType is array (integer range <>) of ElementType; 
    function inside(constant E : ElementType; constant A : in ArrayofElementType) return boolean; 
end package; 

다음 변환 :

해결 방법은 같은 패키지의 일부로서 ArrayofElementType을 선언하는 것입니다 가능한/가능하다면 논쟁을 선언 할 때.

+0

두 배열을 모두 변환 할 수 있습니까? 다른 호환되지 않는 유형으로 간주되지 않습니까? 어떻게 역 변환을 할 수 있습니까? – Paebbels

+0

QuestaSim에서이 오류를 표시합니다. '** 오류 : (vcom-1583)'work.SortListGenericPkg.ArrayofElementType '에서'work.SortListGenericPkg.ArrayofElementType_Internal '(배열에 숫자가 아닌 숫자)로 불법적 인 유형 변환이 발생했습니다. 첫 번째 매개 변수는 배열로 알려져있다. ** 편집 : ** 오 오하이오 발신자 측에 있습니다 ... – Paebbels

+0

최대한 멀리 작동한다고 말할 수 있습니다. 그러나 우리는 새로운 [VHDL Gitter 채널] (https://gitter.im/vhdl/General)의 문제를 논의하면서 VHDL에 패키지 일반 목록의 유형 매개 변수의 종류를 지정하는 개념이 필요하다는 것을 알았습니다. – Paebbels