問題タブ [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.

0 投票する
1 に答える
2850 参照

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 ステートメントを使用できますが、レジスタが多数ある場合は非常に不便です。

0 投票する
1 に答える
563 参照

verification - UVM で入力信号を組み合わせて (同じサイクルで) 駆動する

UVM ドライバーのデザインからの特定の出力に基づいて、デザインの入力信号を組み合わせて駆動したい場合、最良の方法は何ですか? 実行フェーズで実装し、デザインの出力信号を見ると、クロックの次の正のエッジで表示されますよね? これはサイクルを無駄にします。

たとえば、入力信号はランダムにアサートされて設計されます。empty が High の場合を除き、同じサイクルでディアサートする必要があります。

0 投票する
3 に答える
1630 参照

inner-classes - UVM はネストされた/内部クラスをサポートしていますか?

検証環境のコード ガイドラインは、ファイルごとに 1 つのクラスです。

uvm_objectaは 1 つの other でのみ必要な場合があるuvm_componentため、オブジェクト指向の理論に従って、ネストされた/内部クラスを使用する必要があります。

ネストされたクラスは、SystemVerilog で完全にサポートされています。しかし、それらは UVM でサポートされていますか?

次のようなものをコンパイルすることは可能ですか:

現在、上記のコードではコンパイル エラーが発生します。

完全なコード例: http://www.edaplayground.com/x/3r8

0 投票する
1 に答える
10967 参照

printing - UVM ユーティリティ関数を使用してキュー/配列全体を印刷する方法は?

ユーティリティ マクロを使用する UVM オブジェクトの場合`uvm_field_queue_int、UVM は呼び出し時にキュー全体を出力しません。my_object.print()

UVM にキュー全体を印刷させる最良の方法は何ですか?

EDA Playground のサンプル コード: http://www.edaplayground.com/x/rS

0 投票する
1 に答える
3422 参照

system-verilog - NCSIM を使用したシミュレーションの実行中に機能カバレッジを追加するにはどうすればよいですか

Cadence の NC ツールを使用してカバレッジ回帰を実行しようとしています。RTL カバレッジは確認できますが、スコアボードに機能カバレッジがありません。covdutこのスコアボードをNCSIM 引数のオプションに追加するにはどうすればよいですか? スコアボードにはカバーグループが含まれています。

0 投票する
2 に答える
1721 参照

class - SystemVerilog: 工場での UVM テストの登録

UVM テストをファクトリに登録するために使用される次の SystemVerilog コンストラクトと混同しています。

ここにクラス random_test の定義があり、定義内でメソッドを呼び出しますが、その引数は定義されているクラスです。だからここに私の質問があります:

  1. `uvm_component_utilsオブジェクトが random_test クラスから構築される前でも、時間 0 で呼び出されていますか?
  2. `uvm_component_utilsそのクラス定義でクラスを渡すにはどうすればよいでしょうか?

ありがとう。

0 投票する
1 に答える
3215 参照

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 出力の駆動) が何らかの方法でキャッチされる可能性があるかどうかを知っている人はいますか?

0 投票する
1 に答える
1069 参照

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

フェーズメソッドに渡されるフェーズ引数が何であり、それがシングルトンではない理由を正確に知っている人はいますか?

0 投票する
2 に答える
1894 参照

verilog - SVA:SV アサート中のクロック ゲーティング

以下のようにプロパティをチェックするSVアサーションがあります

以下のような主張があります。

ここでのシナリオは、前件が真であり、後件が 1 ~ 100 クロック サイクルの間でチェックされるというものです。前例の後、クロック ゲーティングによりクロックがしばらく停止し、その後、クロックは再びカチカチと動き始めます。信号my_prio[rx_prio]は、クロック ゲーティングの後、100 クロック サイクル以内に再びアサートされます。しかし、私はまだアサーションの失敗を取得します。

失敗の問題を理解することができません。アサーション チェック間のクロック ゲーティングに問題はありますか? または他の理由の失敗?ありがとう。