を制約されていない私は、関数を経て作成されるインターフェースレコードを持っていますが、私がコンパイルしようとすると、私は、インターフェイスが制約されていないことについてエラーを取得します。VHDLレコードは完全に
記録:
type t_my_if is record
wdata : std_logic_vector;
wen : std_logic;
end record;
関数宣言:
function init_my_if_signals(data_width : natural) return t_my_if;
機能本体:
function init_my_if_signals(data_width : natural) return t_my_if is
variable init_if : t_my_if(wdata(data_width - 1 downto 0));
begin
init_if.wdata := (others => '0');
init_if.wen := '0';
return init_if;
end function;
ノートトンレコードパラメータの1つがstd_logic_vector
であるにもかかわらず、サイズは初期化関数によって作成されるときに定義されます。だから私は、私は次のエラーを取得する理由はわからない:
(vcom-1361) Subtype of "my_if" is not fully constrained.
インタフェースは、エンティティのinout
ポートであり、それは次のようになります:
my_if : inout t_my_if := init_my_if_signals(8)
EDIT:
次のコードは動作しますが、データ幅を動的に定義できるようにしたいので、この解決策は私には最適ではありません。
新しいレコード:
type t_my_if is record
wdata : std_logic_vector(7 downto 0;
wen : std_logic;
end record;
新機能:
function init_my_if_signals(data_width : natural) return t_my_if is
variable init_if : t_my_if;
begin
--same as above
レコードがinstantiatiedされたとき、私はこれを定義することができませんか?
(しない限り、あなたは何をやっている知っています)。あなたの編集でやったように制約を加えることは私の問題を解決しました。ありがとうございました! – Aaron