問題タブ [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 - 文字列からレジスタ名 (regmodel で使用可能) を導出できますか?
私は簡単なシーケンスを持っています
regmodel vizの下に8つのレジスタがあると考えてみましょう。REG0, REG1, REG2,....,REG7 テストと引数として数値を渡したいのですが、たとえば +NUM=4 とします。
$sformat または $psprintf を使用して、適切なレジスタ名を持つ文字列変数を作成できます。
今、私は regName を持っていますが、以下を使用することはできません:
regName は文字列型で、regmodel にはレジスタ名 regName がありません。これを達成する他の方法はありますか? get_name、get_full_name を見ていましたが、この場合は役に立ちませんでした。
今のところ、if - else 8 回または case ステートメントを使用できますが、レジスタが多数ある場合は非常に不便です。
verification - UVM で入力信号を組み合わせて (同じサイクルで) 駆動する
UVM ドライバーのデザインからの特定の出力に基づいて、デザインの入力信号を組み合わせて駆動したい場合、最良の方法は何ですか? 実行フェーズで実装し、デザインの出力信号を見ると、クロックの次の正のエッジで表示されますよね? これはサイクルを無駄にします。
たとえば、入力信号はランダムにアサートされて設計されます。empty が High の場合を除き、同じサイクルでディアサートする必要があります。
inner-classes - UVM はネストされた/内部クラスをサポートしていますか?
検証環境のコード ガイドラインは、ファイルごとに 1 つのクラスです。
uvm_object
aは 1 つの other でのみ必要な場合があるuvm_component
ため、オブジェクト指向の理論に従って、ネストされた/内部クラスを使用する必要があります。
ネストされたクラスは、SystemVerilog で完全にサポートされています。しかし、それらは UVM でサポートされていますか?
次のようなものをコンパイルすることは可能ですか:
現在、上記のコードではコンパイル エラーが発生します。
完全なコード例: http://www.edaplayground.com/x/3r8
printing - UVM ユーティリティ関数を使用してキュー/配列全体を印刷する方法は?
ユーティリティ マクロを使用する UVM オブジェクトの場合`uvm_field_queue_int
、UVM は呼び出し時にキュー全体を出力しません。my_object.print()
UVM にキュー全体を印刷させる最良の方法は何ですか?
EDA Playground のサンプル コード: http://www.edaplayground.com/x/rS
system-verilog - NCSIM を使用したシミュレーションの実行中に機能カバレッジを追加するにはどうすればよいですか
Cadence の NC ツールを使用してカバレッジ回帰を実行しようとしています。RTL カバレッジは確認できますが、スコアボードに機能カバレッジがありません。covdut
このスコアボードをNCSIM 引数のオプションに追加するにはどうすればよいですか? スコアボードにはカバーグループが含まれています。
class - SystemVerilog: 工場での UVM テストの登録
UVM テストをファクトリに登録するために使用される次の SystemVerilog コンストラクトと混同しています。
ここにクラス random_test の定義があり、定義内でメソッドを呼び出しますが、その引数は定義されているクラスです。だからここに私の質問があります:
`uvm_component_utils
オブジェクトが random_test クラスから構築される前でも、時間 0 で呼び出されていますか?`uvm_component_utils
そのクラス定義でクラスを渡すにはどうすればよいでしょうか?
ありがとう。
system-verilog - クラス内の仮想インターフェイス シグナルへのアクセスを制限する
UVM ドライバー内で、開発者が入力信号ではなく DUT 出力信号に誤って書き込んだかどうかを何らかの形で把握できるかどうかを知りたいです。これを試してみましたが、コンパイル/ランタイム エラー メッセージはありません。例はここにあります (私のマシンの Incisive で試してみて、後でコードをアップロードしました):
http://www.edaplayground.com/x/386
「some_signal」の割り当ては、DUT 出力 (連続ドライバー) をモデル化します。クラスから 'some_signal' を駆動しようとすると、シグナルが乗算駆動されていることを示す実行時エラーが発生することが予想されますが、クラス ドライバーは "勝利" し、シグナルを更新します。
少し前、SV を始めたばかりの頃、modport をいじりました。modport でいくつかの信号を入力として宣言しましたが、それらを駆動することはまだ合法であることに気付きました。その後、それらを使用するのをやめました。この投稿にあるように、これはよく知られているようです: https://verificationacademy.com/forums/systemverilog/modports-sv
私は最近、クラスで modports を利用する同僚からいくつかのコードを継承しました。そのコードが何をしているかを説明するために、次の例を作成しました。
http://www.edaplayground.com/x/2W_
私は 2 つのクラスで modports を使用しようとしましたが、ModelSim は階層パスで modports を使用すべきではないと文句を言います。Incisive はコードに問題はなく、警告も発行しませんでした。ModelSim エラーは、2012 標準からのこの引用とともに、「モジュール内でインターフェイス アクセスを制限するには、インターフェイス内で宣言された方向を含む modport リストがあります。」modports は実際にはクラスで使用することを意図していないことを示唆しています。
modportsがここに行く方法ではないことを誰かが確認できますか? また、そのようなエラー (クラスからの DUT 出力の駆動) が何らかの方法でキャッチされる可能性があるかどうかを知っている人はいますか?
system-verilog - UVM フェーズ シングルトン
UVM ソース コードを少し調べたところ、各フェーズにシングルトンが存在することに気付きました。実行フェーズでは、これは を呼び出すことでアクセスできますuvm_run_phase::get()
。
uvm_run_phase::get()
run_phase と end_of_elaboration フェーズの両方から呼び出しを試みましたが、予想どおり、両方の呼び出しで同じオブジェクトへのハンドルが返されました。run_phase(...)
このメソッドによって返されるオブジェクトは、フェーズ引数としてタスクに渡されるオブジェクトと同じではないため、少し困惑しています。
EDA Playground で例を作成しました: http://www.edaplayground.com/x/2PL
フェーズメソッドに渡されるフェーズ引数が何であり、それがシングルトンではない理由を正確に知っている人はいますか?
verilog - SVA:SV アサート中のクロック ゲーティング
以下のようにプロパティをチェックするSVアサーションがあります
以下のような主張があります。
ここでのシナリオは、前件が真であり、後件が 1 ~ 100 クロック サイクルの間でチェックされるというものです。前例の後、クロック ゲーティングによりクロックがしばらく停止し、その後、クロックは再びカチカチと動き始めます。信号my_prio[rx_prio]は、クロック ゲーティングの後、100 クロック サイクル以内に再びアサートされます。しかし、私はまだアサーションの失敗を取得します。
失敗の問題を理解することができません。アサーション チェック間のクロック ゲーティングに問題はありますか? または他の理由の失敗?ありがとう。