はい、できます。私はこれをベスト プラクティスと考えています。つまり、最小限の作業、最も理解しやすい方法、最も簡単なメンテナンス、最もクリーンな設計を意味します。
秘訣は、パッケージ内のデザイン全体に共通する型を宣言し (通常は「共通」と呼びます:-) use work.Common.all
、エンティティ宣言の前に追加し、そのエンティティのすべての顧客に追加します。もちろん、より特殊なコンポーネントには適切な名前を付けることができます。
例えば:
package Common is -- untested...
type my_enum_type is (r1, r2, r3);
-- (optional) useful tools
function to_slv (e : my_enum_type) return std_logic_vector;
function to_enum (s : std_logic_vector(my_enum'length downto 0))
return my_enum_type;
end Common;
package body Common is
-- subprogram bodies here
end Common;
列挙型に値を追加するときは、「Common」のみを変更してデザインを再構築しますが、従来のガイドラインに従う人は、「std_logic_vector」の範囲を 1 増やす必要があるすべてのポートと信号を識別しようとします。 .
各方向のレコードがすべての個々のバスとハンドシェイク信号を隠すバス インターフェイスでも非常にうまく機能します。
ザイリンクスの「自動テストベンチ ジェネレーター」のような脳死状態のツールと戦わなければなりません。これは、すべてのポート タイプ (整数またはブール値、カスタム) を std_logic(_vector) に変換し、コンパイルに失敗します。それらをもう一度翻訳してください。
最上位レベルでは、すべての外部 FPGA ピンが引き続き std_logic ベースである必要があるというケースを引き続き作成できます。また、デザインの合成後のバージョンをシミュレートする必要がある場合は、std_logic_vector ポートを使用するか、単純なラッパーを追加してある形式から別の形式に変換する必要があります。