構成を使用しない 1 つの方法:
エンティティごとに複数のアーキテクチャを作成できることに注意してください。
したがって、テストベンチでユニットを次のようにインスタンス化できます。
Controller_1 : entity work.DRAM_controller(simple)
port map ( ...
また
Controller_2 : entity work.DRAM_controller(rtl)
port map ( ...
ここで、「シンプル」と「rtl」は 2 つのアーキテクチャです。この目的のために、エンティティと両方のアーキテクチャを異なるファイルに含める必要がある場合があります。ザイリンクス ツールは、まれなケースの処理にはあまり適していません (コンフィギュレーションはデザイン ユニットではないと言われたこともありました!)。
次に、テストベンチでいずれかのアーキテクチャを使用して DRAM コントローラーをインスタンス化できます。
vermaete が言うように、簡素化されたアーキテクチャもテストする必要があります。1 つの方法は、別のテストベンチで両方のコントローラーをインスタンス化し、各アーキテクチャーで 1 つのテストベンチで単体テストを実行し、各操作の出力を比較することです。
おかしなことに、エンティティの直接インスタンス化に関する Ashenden の例 (Designer's Guide to VHDL ch 5.4、私の 1996 年版の p.136) は DRAM コントローラです!
編集:(これはコメントでしたが、長すぎます)
単体テストでは、両方のコントローラーをテストベンチでインスタンス化でき、すべて問題ありません。
システム テストでは、DRAM コントローラーが UUT (最上位設計) 内にあることを理解していませんでした。シンセと単純な DRAM テストには 1 つのインスタンス (実際のインスタンス) が必要であり、完全な DRAM テストには別の (単純な) インスタンスが必要です。はい、構成はそれを行うための正しくて最もクリーンな方法です。最上位設計 (UUT) でコントローラー ENTITY をインスタンス化し、構成でアーキテクチャを選択します。
ただし、構成が機能しない場合のフォールバック計画として、あまりクリーンでない代替手段があります。最上位エンティティ用に 2 つのアーキテクチャを作成します。コントローラー用に選択したアーチのみが異なります。テストベンチで最上位エンティティをインスタンス化するときに、どちらのアーキテクチャも選択できます。ただし、2 つのバージョンの同期を維持する必要があるため、面倒です。