ユニバーサル検証方法論

ユニバーサル検証手法( UVM ) は、集積回路設計を検証するための標準化された手法です。UVM は主に、2001 年に Verisity Design が開発したe 検証言語のeRM (e Reuse Methodology)を大部分ベースとしたOVM ( Open Verification Methodology ) から派生しています。UVM クラス ライブラリは、 SystemVerilog言語にシーケンスやデータ自動化機能 (パッキング、コピー、比較) などのフレームワークと自動化をもたらし、EDA (Electronic Design Automation) ベンダーが独自に開発した以前の手法とは異なり、Aldec、Cadence、Mentor Graphics (Siemens)、Synopsys、Xilinx Simulator (XSIM) など複数のベンダーからサポートされている Accellera 標準です。

歴史

2009年12月、電子設計自動化(EDA)業界の標準化団体であるAccelleraの技術小委員会はUVMの確立に投票し、この新しい標準をオープン検証方法論(OVM-2.1.1) [ 1 ]に基づいて策定することを決定しました。OVM-2.1.1とは、 2007年にCadence Design SystemsMentor Graphicsが共同で開発した検証方法論です。

2011年2月21日、AccelleraはUVMのバージョン1.0を承認しました。[ 2 ] UVM 1.0には、リファレンスガイド、 SystemVerilog基本クラスライブラリ 形式のリファレンス実装、およびユーザーガイドが含まれています。[ 2 ]

言語機能

工場

ファクトリー、オブジェクト指向プログラミングでよく使われる概念です。これは、他のオブジェクトをインスタンス化するために用いられるオブジェクトです。UVMファクトリーにオブジェクトを登録する方法は2つあります。クラスAの宣言では、`uvm_object_utils(A) または `uvm_component_utils(A) 登録マクロを呼び出すことができます。あるいは、`uvm_object_registry(A,B) または `uvm_component_registry(A,B) マクロを使用して、文字列Bをクラス型Aにマッピングすることもできます。[ 3 ] UVMファクトリーは、ユーザーが特定のインスタンス名と登録された型を持つオブジェクトをインスタンス化できるようにする、さまざまなcreateメソッドを提供しています。[ 4 ]

シーケンサー

シーケンサーは主に次の 3 つの機能を担当します。

  • DUT(テスト対象設計)と検証環境を初期化状態にする
  • 検証環境とDUTの構成
  • DUTシナリオ生成全体

初期化

この段階では、DUT(テスト対象設計)とテストベンチ環境を望ましい初期条件に設定する必要があります。通常、これには以下のものが含まれます。

  • 必要な初期条件を任意に設定してメモリをロードする
  • DUTの電源や高インピーダンスなどの初期ピン設定
  • モードビットや環境レジスタの一部など、シミュレーション中に変更できないレジスタ設定
  • シミュレーション中に変更できない検証コンポーネントの設定

スコアボード

説明

スコアボードは様々な方法で実装できます。一般的に、スコアボードはDUTへの入力と出力を受け取り、入出力関係を決定し、DUTが仕様に準拠しているかどうかを判断します。この入出力関係は、多くの場合、予測器と呼ばれるモデルによって規定されます。[ 3 ]予測器は、SystemCなどの高水準プログラミング言語で実装できます。

実装の詳細

UVMスコアボードクラスは、uvm_scoreboardクラスのサブクラスとして実装されています。uvm_scoreboardクラス自体はuvm_componentクラスのサブクラスです。uvm_scoreboardは、スコアボードを実装するための白紙の状態です。クラスメソッドは1つだけ、つまり「new」コンストラクタメソッドのみを含みます。実装の残りの部分はユーザー定義です。[ 5 ]

エージェント

説明

現代のVLSIでは、DUTは複数のインターフェースを持つ場合があります。これらのインターフェースにはそれぞれ異なるUVMオブジェクトが関連付けられている場合があります。例えば、DUTがフルチップの場合、PCI、Ethernet、その他の通信規格ごとに別々のインターフェースが存在する可能性があります。PCIインターフェースのスコアボードとモニターは、Ethernetインターフェースのものとは異なります。様々なUVMオブジェクトは、エージェントと呼ばれるラッパークラスのメンバーとして構成できます。パッシブエージェントはインターフェースのポート値のみを解析し、モニターメンバーを含む必要があります。アクティブエージェントはポートを駆動し、モニターメンバーに加えてドライバーメンバーを含む必要があります。[ 6 ]

実装の詳細

UVMエージェントクラスは、uvm_agentクラスのサブクラスとして実装されています。uvm_agentクラス自体はuvm_componentクラスのサブクラスです。uvm_scoreboardと同様に、uvm_agentクラスはクラスメソッドの点では軽量です。クラスメソッドは「new」コンストラクタと「get_is_active」メソッドのみです。エージェントがポートの駆動に使用されている場合、get_is_activeはUVM_ACTIVEを返します。それ以外の場合、get_is_activeはUVM_PASSIVEを返します。

ドライバ

説明

テストのシーケンス項目は抽象的に記述されます。例えば、DUTがレジスタファイルの場合、読み出しアドレスと書き込みアドレス用のポートを持つことができます。シーケンス項目オブジェクトは、読み出しアドレスと書き込みアドレス用のメンバー変数を持つことができます。しかし、これらの値は最終的にDUTの入力ピンのビットに変換される必要があります。[ 7 ] DUTに刺激を与える際に、エージェントの他の部分から抽象化する必要がある特殊なエンコーディングが使用される場合もあります。ドライバの役割は、これらのシーケンス項目を受け取り、DUTのポートに適切な刺激を与えることです。[ 3 ]

実装の詳細

UVMドライバクラスはuvm_driverクラスのサブクラスとして実装されており、uvm_driverクラス自体はuvm_componentのサブクラスです。[ 5 ]

定義

  • エージェント - DUTデバイスをエミュレートして検証するコンテナ
  • ブロッキング - 完了するまで他のインターフェースからのタスクをブロックするインターフェース
  • DUT - テスト対象デバイス、実際にテストする対象
  • DUV - 検証中のデバイス
  • コンポーネント - インターフェースと機能を持つ検証知的財産の一部。
  • トランザクタ - コンポーネントを参照
  • 検証環境設定 - シミュレーション実行中に変更可能なDUTおよび環境の設定
  • VIP - 知的財産の検証

UVMマクロ

UVMではマクロの使用が可能

名前関数関連するパラメータ目的マクロの種類
`uvm_createオブジェクトコンストラクタ`uvm_sendシーケンスまたはアイテムオブジェクトを作成し、オーバーロードまたはパラメータ渡しによってユーザーが値を設定できるようにするシーケンスアクションマクロ
`uvm_sendプロセッサ`uvm_createシーケンスまたはアイテム`uvm_create によって作成されたものをランダム化せずに処理します既存のシーケンスのシーケンスアクションマクロ
`uvm_doプロセッサ`uvm_createシーケンスまたはアイテムクラスまたはアイテムをランダムに実行するシーケンスアクションマクロ

参考文献

正式

ガイド