問題タブ [uvm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
system-verilog - 基本的な UVM シーケンス シミュレーション クエリ
シーケンスとその動作を理解しようとしている基本的な UVM ベースの TB にいくつかの問題があります。
- bvalid は、応答項目で更新されるときに、ドライバーで常に 0 として選択されます。
- 最後の 2 つのトランザクションのいくつかのエラー メッセージ (# UVM_ERROR @ 18: uvm_test_top.axi_agent1.axi_base_seqr1@@axi_base_seq1 [uvm_test_top.axi_agent1.axi_base_seqr1.axi_base_seq1] 応答キューのオーバーフロー、応答が削除されました)
EDA Playground http://www.edaplayground.com/x/3x9のコンパイル コードへのリンクは次のとおりです 。
私が欠けているものに関する提案はありますか??
ありがとう
ベンクスタート
system-verilog - レジスタ モデルでの burst_read/write の使用
私は16個のレジスタのレジスタスペースを持っています。これらは、シリアル バス (シングルおよびバースト) を介してアクセスできます。これらのレジスター用に UVM reg モデルを定義しました。ただし、バス上のバースト トランザクションをサポートする reg モデル メソッドはありません。
回避策として
- 同じスペースのメモリ モデルを宣言できます。バースト アクセスが必要なときはいつでもメモリ モデルを使用しますが、同じものに対して 2 つの別々のクラスを宣言するのは冗長なようで、このアプローチではレジスタ値が正しくミラーリングされません。
- バイト数の反復をループし、レジスタに 1 つずつアクセスする関数を作成しますが、このメソッドはバス上でバースト トランザクションを作成しません。
したがって、レジスタ モデルで burst_read および burst_write メソッドを使用する方法があるかどうかを知りたいです。burst_read と burst_write がミラーリングをサポートしていればいいのですが (現在の実装ではサポートされていません)、そうでない場合は .predict と .set を使用できるので、大きな問題ではありません。
または、レジスタ モデルのメソッドを簡単に実装して、バースト操作をサポートできますか。
vhdl - ゴールデン C モデルと RTL 間のアウトオブオーダー トランザクションのスコアボードをコーディングする方法は?
ゴールデン C++ モデルと RTL の両方がインスタンス化される UVM テスト環境があります。場合によっては、C++ モデルが正確なサイクルではないため、C++ モデルと RTL 出力が順不同になります。順序どおりの出力の場合、スコアボードに無限のキューがあります。RTL インターフェイスに出力が表示されるたびに、それを c++ モデル出力キューの先頭と一致させようとします。ここでは、時間 c++ モデルの概念がないため、c++ モデルからの出力は常に RTL 出力の前に来ると仮定しています。
ただし、いくつかのシナリオ (例として、アービター) では、物事が狂ったり、順不同になったりする可能性があります。その場合、UVM でスコアボードとチェック コードを記述する標準的な方法は何ですか?
system-verilog - UVC でのプロトコル拡張の処理
プロトコル UVC の拡張機能をどのように扱っているのか興味があります。AMBA プロトコルを実装する APB UVC があるとします。また、仕様で定義された信号とは別に、一般的な APB 信号に関連する他のいくつかの信号も実装する DUT があるとします (保護されたアクセスなどのサポートを追加します)。クラス側での処理は非常に簡単です。追加のフィールドを持つ新しいシーケンス アイテム サブクラスを作成し、型のオーバーライドを行うだけです。注意が必要なのは、信号レベルで作業する場合です。私たちの UVC は、APB 信号のみを含む SV インターフェイスを既に使用しており、それを拡張することはできません。これらの余分な信号を UVC に取り込んで駆動および監視するにはどうすればよいでしょうか?
これまでに行ったことは、独自の自家製 UVC を使用しているため、すべてをベース UVC にパックし、高度に構成可能にすることです。適切にカプセル化されているとは思わないため、このアプローチは好きではありません。余分な設定パラメータが多すぎてユーザーを混乱させ、開発を非常に困難にします。誰かがこれに対するより良い解決策を持っているかどうか疑問に思っています。
これは、Accellera UVM フォーラムでも尋ねた質問です: http://forums.accellera.org/topic/1832-handling-protocol-extensions/
multithreading - UVM でのマルチスレッド
UVM にマルチスレッドを組み込むにはどうすればよいでしょうか。UVM テストベンチのスレッド、拡張 UVM コンポーネント、シーケンス、および fork と join の間のメソッドですか? 私が調べた限りでは、このようなマルチスレッド テストベンチは、ハードウェアの複数のコアに対して設計が分割されていない限り、シミュレーション時間の高速化やパフォーマンスの向上にほとんど影響を与えません。そうですか?
c - C コードはスタンドアロンで動作します。しかし、UVM テストが C DPI を呼び出すと、c 変数が台無しになります
Synopsis VCS コンパイラを使用しています。私のテストベンチは UVM でコーディングされています。いくつかのスタンドアロン機能を実行する一連の C ルーチンがあります。UVM 環境で DPI インポートを介してこれらの C ルーチンを呼び出しています。
簡単な方法でコード スニペットを次に示します。
# #問題は次のとおりです。これを回帰の一部として実行すると、約 10000 回完全に機能します。
10001回目でこうなる。
function1 は正しい値を再実行し、y を出力するとそれがわかります。ただし、C_function_1 内に x を出力すると、x は 0xffffff_fffff_y のようになります。つまり、y の値は存在しますが、ゴミが付着しています。これにより、x を含む後続の計算が台無しになります。
スタックがめちゃくちゃになることについてよく読んで、さまざまな関数への引数であるすべてのポインターをmallocして解放したことを確認しました。
また、C 部分をスタンドアロンとして実行してみましたが、エラーはなく、リグレッションはクリーンです。
唯一の問題は、C 回帰ルーチンを呼び出す UVM テストを実行するときです。
これをデバッグするのに多くの時間を費やしましたが、役に立ちませんでした。
誰か提案はありますか?
system-verilog - UVM テストベンチ - 2 つの異なるドライバーを同じインターフェイスに接続する "UVM" 方法は何ですか?
テストベンチには、駆動する必要があるインターフェイスがあります。インターフェイスは 2 つの異なるモードで駆動でき、各モードには独自のドライバー プロトコルとトランザクション タイプがあります。
これまでのところ、両方の uvm_agents を個別に設計しました。ここで、実行中のテストケースに応じて、どちらか一方を入れ替える方法が必要です。また、UVM の哲学に最も適した方法でこれを行いたいと考えています。
私が考えつく最善の方法は、次のとおりです。私の uvm_env で、「ModeA」または「ModeB」のいずれかを示すテストから uvm_db_config パラメータを取得し、それに基づいて、エージェントの is_active を「UVM_ACTIVE」および「UVM_PASSIVE」に設定します。 「適当に。
この方法について意見をいただきたいです。
私に提案された方法は、共通の uvm_agent を保持し、構成に基づいて uvm_driver/uvm_sequencer をインスタンス化することでした。見た目が面倒なので、この方法についてはよくわかりません。
system-verilog - uvm_field_* マクロ - カスタム構造体の設定方法
テストベンチで使用できる uvm_field_* マクロが見つかりません。私は構造体を定義しました:
ここで、シーケンス アイテムで次のように宣言します。
これがうまくいくとは思えません。uvm_field_array_int として登録することはできますか? これを行う方法は何ですか?