バスに接続する必要があるいくつかのコンポーネントで構成されるシステムがあります。ただし、システム バスを独立した状態に保つために、システムと特定のバスの間で変換するバス固有のモジュールを介して実行する汎用バス ポートをシステムに与えました。したがって、変換モジュールを切り替えることで、システム全体を異なるバスに簡単に接続できます。
しかし、システムと翻訳モジュールを毎回接続するという面倒なことはしたくありません。したがって、ジェネリック パラメータからモジュールをインスタンス化し、その型をアーキテクチャの出力に使用できるかどうか疑問に思います。
少し図解すると全体が分かりやすくなりますが、私の翻訳モジュールには以下の「署名」があります。
entity translate<BusName>
port(toSystem: out toSystem_t,
fromSystem: in fromSystem_t,
toBus: out to<BusName>_t,
fromBus: in from<BusName>_t
end entity;
私は今、ジェネリックに基づいて、システムと翻訳者を含むエンティティを構築したいと考えています。
entity entireSystem is
generic(busType := translate<BusName>)
port(toBus: out to<BusName>_t,
fromBus: in from<BusName>_t)
end entity
architecture genArc of entireSystem is
signal toTrans: fromSystem;
signal fromTrans: toSystem;
begin
system: system(toTrans,fromTrans)
translator: translate<BusName>(
fromTrans,
toTrans,
toBus,
fromBus
)
end architecture;
私の問題は次のとおりです。汎用パラメーターを使用してコンポーネントを直接インスタンス化できますか?それとも、if generic=xxx generate
パスに移動する必要がありますか? 汎用パラメータからポートのタイプを導出できますか? ポートとエンティティを決定するために 1 つのジェネリック パラメータを使用できれば、誤ってエンティティの間違った型を選択することができなくなります。関数を使用してジェネリック パラメーターから型を派生させても問題ありません。