問題タブ [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_Sequencer 実行フェーズ内のグラブ トランザクション
uvm_sequencer の run_phase 内のトランザクションを取得して、トランザクションが 4KB 境界を超えているかどうかを確認したいと考えています。それらが 4KB の境界を越える場合に備えて、そのトランザクションを複数のトランザクションに分割してからドライバーに送信したいと考えています。ドライバーから応答が受信されると、すべての分割トランザクション応答が元のトランザクションにマージされ、元のトランザクションを生成したシーケンスに戻されます。これを行う方法はありますか?uvm_sequencer はこの仕事をするのに適切な場所ですか? どんな助けでも大歓迎です。
編集:
チューダーのソリューションは機能します。以下のように、彼のコード (translation_sequence) にいくつかの編集を加えました。
uvm - get_and_drive はどこから来たのですか?
から拡張されたほとんどすべてのドライバーには、以下のようなuvm_driver
タスクがあることがわかりましget_and_drive
た。uvm のソース コードと uvm_cookbook を確認しましたが、見つかりませんでしget_and_drive
た。uvm ルールではないようです。それは慣習である可能性が高いです。という名前のタスクを最初に使用したのは誰ですか? ほとんどすべての人がドライバーでそのget_and_drive()
名前を使用するのはなぜですか?get_and_drive
verilog - クラスで Systemverilog 静的変数を使用する
私は問題で立ち往生しており、入力/提案をいただければ幸いです:
次のコンポーネントを持つテスト ベンチ用のエージェントがあります。基本クラス A-2 つの静的変数を定義します-X と Y 2 つの新しいクラス B と C、両方とも A から拡張されています。どちらも基本クラスで宣言された静的変数を使用します。 . BとCを利用して何かをする別のクラスD。
クラス D が私のトップ エージェントで、bfm_agent と呼びます。この bfm_agent は、テスト ベンチで複数回インスタンス化できます。問題は、X と Y がすべての bfm_agent で共有されることです。私はそれをしたくありません。X と Y を静的にして、各 bfm_agent 内のクラス B と C がこれら 2 つの変数を使用して何らかの作業を行えるようにしたいだけです。
どうすればこれを達成できますか?これら 2 つの静的変数のスコープが、bfm_agent の各インスタンス内でのみ有効になるようにしたいだけです。
vhdl - VHDL ポートを UVM のシステム Verilog インターフェイス定義に接続する
VHDL の多次元ユーザー定義型を UVM 環境の SystemVerilog に接続しようとすると、Cadence ツール チェーン シミュレーションでこの問題が発生します。これは、VHDL 出力タイプの定義です。
DUT の VHDL 出力ポートの 1 つはタイプloop_array_ty
です。
SystemVerilog に相当するものを次のように定義しようとしています。
を使用するirun
と、次のエラーが表示されます。
VHDL ポート タイプは Verilog と互換性がありません。
可能な回避策を提案してください。
verilog - ファクトリは UVM 内でどのように実装されていますか?
UVM では、工場が最も重要です。それで、それが内部でどのように実装されているか。さまざまなオブジェクトを格納し、ユニバーサル データベースを作成する方法を意味します。
連想配列がいくつかあるようなものを知っています.1つはオブジェクト名としてキーを持ち、もう1つはオブジェクトタイプとしてキーを持ちます。しかし、この 2 つの配列でデータベースを構築する方法がわかりません。自分の情報が正しいかどうかは自分でもわかりません。
ファクトリの実装と変更に関連するいくつかのクラスもリストしてください。(umv_resource のように、おそらく 1 つです。)
verilog - UVM ファクトリーの set_inst_override_by_name を使用してシーケンス項目をオーバーライドする方法
2 つのシーケンス アイテム クラスa_packet
とその拡張クラス がありbad_packet
ます。デフォルトでは、a_packet
タイプが使用されます。a_packet
でインスタンスをオーバーライドしようとしていますbad_packet
が、uvm テストで set_inst_override_by_name を使用して正常に実行できました。
ここで私の質問は次のとおりです。「*」を使用したくない場合、シーケンス項目インスタンスの完全な階層パスを知るにはどうすればよいですか?
正確な階層パスを知るために、ドライバーが受信した直後に、シーケンス項目内から get_full_name() を利用しようとしていました。次のように表示されました。
しかし、*
上記のパスに置き換えた場合、オーバーライドは行われません。
私は何か間違ったことをしましたか?
system-verilog - リセット時にクロッキング ブロック信号を初期化する方法
私はUVMを読んできました:ドライバーと手続き型割り当ての警告と回答に添付された紙の違法な組み合わせ。(言及された質問にリンクされている論文を検討してください)
ただし、クロック ブロック信号ではなくインターフェイス信号でリセット値を駆動するようにドライバーが実装されているため、リセット時にクロックが動作することは保証されません。
インターフェイス信号がワイヤとして宣言されている場合、どうすればこのシナリオを実行できますか。
たとえば、リンクされた質問のコードを検討してください。一般的なシナリオは
これは、オペコードがインターフェイスでネットとして宣言されている場合でも正しいため、クロッキング ブロックが正しい割り当てを処理します。ただし言えない
リセット時のクロックを保証できないため。これに対応するには、クロック生成戦略を変更する必要があります。
どちらとも言えない
ネットタイプ信号で手続き型代入を使用するのは違法です
もう1つの方法は、ネットとして宣言された信号をリセットでゲートすることですが、そのためにはインターフェイスで一時的な信号を宣言する必要があると思います。リセット時にネットを駆動する方法を誰でも詳しく説明できますか?