新しい構成システムにより UVM を高速化 - Semiwiki

新しい構成システムを通じて UVM を高速化 – Semiwiki

ソースノード: 3036575

Universal Verification Methodology (UVM) は、SystemVerilog 設計の検証を支援する一般的な方法であり、これには 構成システム 残念ながら、速度と使用方法にいくつかの問題があります。 Siemens EDA の Rich Edelman は、これらの問題を回避する方法をテーマにした詳細な 20 ページの論文を執筆しました。私はそれを読んで要点を要約しました。検証エンジニアは UVM 構成データベースを使用して値を設定し、後の UVM テストで値を取得します。値「T」を設定および取得する一例は次のとおりです。

uvm_config#(T)::set(スコープ、インスタンスパス名、フィールド名、値); uvm_config#(T)::get(スコープ、インスタンスパス名、フィールド名、値);

UVM テストベンチをテスト対象のデバイスに接続するには、構成データベースを使用して仮想インターフェイスを渡します。 UVM 構成の使用には 3 つの問題があります。

  • 巨大なコード、約 2,600 行のコード
  • 正確な型の一致が必要なため、「int」と「bit」は同じではありません
  • スローコード

遅いコードの場合を考えてみましょう。ワイルドカードを含む名前を使用して set() を何千回も呼び出すと、「set」フェーズと「get」フェーズが完了するまでに最大 30 分かかることがあります。

経過時間(分)

Rich は、比較するとわずか数秒しかかからない、はるかに高速な UVM 構成の新しいソリューションを提案しています。

新しいソリューションの分

UVM コードでワイルドカードの使用を回避し、「set」コマンドがほとんどない場合、コードはより高速に実行されます。

UVM 構成の問題に対する考えられる解決策は次のとおりです。

  • 代わりにグローバル変数を使用してください
  • 1 つの set() で UVM 構成を使用する
  • いくつかの set() で UVM 構成を使用する
  • 構成ツリーを使用する
  • 別のものを試してください

何か別のものを試す最後のアプローチが新しいソリューションであり、引き続き set() および get() API を使用し、構成のパラメータ化を削除することで簡素化し、優先順位を削除し、検索アルゴリズムの変更を削除します。この新しいアプローチの結果、高速化が実現します。

新しい構成アイテムは「config_item」の派生クラスで定義されており、以下の例では、設定されるプロパティとして「int value」を示しています。デバッグの目的で、pretty-print 関数を追加します。

クラス my_special_config_item は config_item を拡張します。 function new(string name = "my_special_config_item"); super.new(名前); endfunction int 値;仮想関数文字列convert2string(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string());エンド関数エンドクラス

「config_item」には name 属性があり、この名前とインスタンス名が検索されます。構成オブジェクトには、名前を返す get_name() 関数もあります。 「instance_name.field_name」を検索するために、構成データベースは高速な検索と作成速度のために連想配列を使用します。
ファイル名と行番号は set() および get() 関数呼び出しのフィールドであるため、追跡可能性のために、誰が set または誰が get を呼び出したかを知ることができます。

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", Speedconfig, `__FILE__, `__LINE__)

デバッグ中にアクセサー キューを出力して、誰が set() および get() を呼び出したかを確認できます。

ワイルドカードをサポートするには、コンテナを使用した検索メカニズムを追加する必要がありました。インスタンス名「top.abcd*_0」について考えてみましょう。

コンテナツリーの最小値
コンテナツリー

インスタンス名のワイルドカード部分は、連想配列ではなくコンテナ ツリーを使用して処理されます。

まとめ

UVM テストベンチのモジュール/インスタンスとクラスベースの世界の間でのデータの共有は、UVM 構成データベースを使用して行うことができますが、速度の低下に注意してください。方法論で多くの構成を使用する場合は、UVM 構成データベース ファイル内の 300 行のコードの代わりに約 2,600 行のコードを使用するパッケージを備えた、導入された新しいアプローチの使用を検討してください。

20ページの論文を全部読んで、 構成の狂気を回避する簡単な方法 シーメンスEDAにて。

関連ブログ

この投稿を共有する:

タイムスタンプ:

より多くの セミウィキ