私はVHDL-2008の汎用パッケージ(リスト)に取り組んでいます。このパッケージには、要素型の汎用型があります。パッケージ内でこの要素型の配列型を宣言すると、それは新しい型です。従って、例えば。整数、私の新しいinteger_arrayは、ライブラリieeeからのinteger_vectorと互換性がありません。VHDLパッケージにジェネリック型パラメータとして配列型を渡すには?
したがって、配列型(たとえばinteger_vector)も渡す必要があります。その配列型の配列インスタンスが'range
属性で使用されている場合、それは私QuestaSimに警告を与える:
Prefix of attribute "range" must be appropriate for an array object or must denote an array subtype.
方法は、ジェネリック型パラメータが配列で表すのでしょうか?
一般的なパッケージ:
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;
インスタンス:
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 ;
IEEE Std 1076-2008 16.2.3配列の事前定義された属性、A'RANGE、Prefix:配列オブジェクトまたはそのエイリアスに適切な接頭辞Aまたはインデックス範囲が定義された配列サブタイプを示す* ArrayofElementTypeクラスとサブタイプは、精緻化後まで認識されません。 6.5.3インタフェース型宣言*インタフェース型の値と適用可能な演算のセットは、環境の関連するサブタイプ、*、* ...によって定義されます。未定義の基本型と基本型のサブタイプ。基本型のクラス(5.1を参照)が定義されていません。* – user1155120