5

DRAM テスト シーケンスを実装する VHDL コンポーネントがあります。これには、DRAM コントローラーである子エンティティが含まれます。

DRAM テスト シーケンスをシミュレート (デバッグ) したいのですが、実際の複雑なものではなく、単純な偽のスタブを DRAM コントローラーに使用します。

おそらく VHDL 構成を使用して、シミュレーション用のコントローラー エンティティの単純なバージョンを使用するなど、これを設定する方法はありますか? 私はシミュレーションの初心者であり、VHDL 全般についてあまり経験がありません。

これは、Spartan-6 をターゲットとするザイリンクス ISE および ISim を使用しています (それが違いを生む場合)。

4

2 に答える 2

5

構成を使用しない 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 つのバージョンの同期を維持する必要があるため、面倒です。

于 2013-02-11T15:37:58.170 に答える
4

別の構成不要の方法は、generateこれを実現するために使用することです。

sim:if in_simulation generate
   Controller_1 : entity work.DRAM_controller(simple)
                  port map ...
else
   Controller_1 : entity work.DRAM_controller(rtl)
                  port map ...
end generate;

この回答を使用して、in_simulation定数を作成できます。

(VHDL2008 準拠のツールを持っていない場合は、実行できず、代わりに/ペアif...else..end generateを実行する必要があります。バグ レポートを提出してください :)if in_simulationif not in_simulation

于 2013-02-12T11:28:21.337 に答える