VHDL-2008 互換であるはずの次のファイルを解析しようとしています。
entity closely_related is
end;
architecture example of closely_related is
type integer_vector is array (natural range <>) of integer;
type real_vector is array (natural range <>) of real;
begin
process
variable int_vect: integer_vector(1 to 3);
variable real_vect: real_vector(1 to 3);
begin
real_vect := ( 1.0, 2.0, 3.0 );
int_vect := integer_vector( real_vect );
wait;
end process;
end;
これは、密接に関連するタイプに関する実験であると想定されています。LRM によると、密接に関連するタイプには次の 2 つのケースがあります。
— 抽象数値型 — 抽象数値型は、他の抽象数値型と密接に関連しています。— 配列型 - 型が同じ次元を持ち、要素型が密接に関連している場合にのみ、2 つの配列型が密接に関連しています。
実数と整数が密接に関連していることは理解しています。それらの間の型変換(別名型キャスト)は正常に機能します。では、なぜ上記の配列型では機能しないのでしょうか?
GHDL は次のエラーを出します:
conversion not allowed between not closely related types
また、Modelsim Altera 10.1e (-2008 スイッチを使用) も優れていません。
Illegal type conversion from std.STANDARD.REAL_VECTOR to std.STANDARD.INTEGER_VECTOR
(array element type difference).
徹底的にするために、一度に 1 つの要素で同じ操作を実行しようとしました。
int_vect(1) := integer( real_vect(1) );
int_vect(2) := integer( real_vect(2) );
int_vect(3) := integer( real_vect(3) );
そして、それは完璧に機能します。何か案は?