Riviera-PROを使用したUVVM入門

はじめに

UVVMとはUniversal VHDL Verification Methodologyの略になります。UVMとSystemVerilogは、ASICとFPGAの検証を可能にする最新の手法ですが、すべてのFPGAプロジェクトに対応できるものではありません。FPGAの開発にVHDLを使用しているほとんどの企業にとって、検証のためにUVMに変更することは意味がありません。そこで、VHDL専用にUVM/SystemVerilogが提供するすべての機能と利点を備えるUVVMが導入されました。さらに、VHDL Verification Components (VVC) と呼ばれる主要な改良が加えられています。

なぜUVVM?

VHDL2008では、言語自体が大幅に改善されました。オープンソースライブラリであるOSVVM (Open Source VHDL Verification Methodology) は、高度なランダム生成とファンクショナルカバレッジのサポートに優れています。これらの重要な機能を備えていますが、大規模デザインではデバッグが依然として最も重要であり、VHDL2008とOSVVMにはデバッグ機能が著しく不足しています。UVVMはこのギャップを埋めるものです。オープンソースでもあるBitvis Utilityライブラリは、ロギング/レポート、冗長性制御、アラート処理、および事前定義された値やイベントチェッカーなどを強力にサポートします。現在、Bitvis UVVM (Universal VHDL Verification Methodology) は、検証手法の中で最も重要な「検証コンポーネント」を提供します。UVVMユーティリティライブラリを使用した基本的なVHDLテストベンチには、次のものが含まれています:

UVVMが提供する利点の1つは、デザインやテストベンチを再コンパイルすることなく、シミュレーションメッセージ数を増減してシミュレーションを実行することができることです。UVVMメッセージでは、ユーザはプライオリティではなく詳細度を指定します。詳細度コントロールは、ユーザがコードをほとんど追加することなく、デザインやテストベンチを詳細に確認することに役立ちます。

たとえば、log(msg_id,msg[…]); は、そのmessage_idのverbosityが有効になっている場合のみ、特定のmessage_idのメッセージを表示します。

TこれもUVVMの機能の一つで、実行時に定義された階層ツリーに対する階層アラートレポートを提供します。アラートサマリーは、定義されたスコープのツリーとして表示されます。アラートカウンターは、ツリーをトップレベルに伝搬し、ユーザーに情報を提供するためユーザーは常に最新の情報を得ることができます。

たとえば、error(msg,[scope]); はシミュレーションがスコープに違反した場合、エラーメッセージを出力します。

ランダム化は非常に重要です。データの特性を変えことで、DUTにランダムに刺激を与えることに他なりません。ランダム化によって、テストが困難なコーナーケースに到達することができます。UVVMでは、非常に簡単なコマンドを使用してランダム化を行うことができます。

たとえば、command v_int = random(min_value,max_value); これは、コマンドで指定された範囲の間の整数値を生成します。

BFMの例とサポートを理解し確認するために、まずBFMの定義を理解しましょう。BFMとは、Bus Functional Modelの略です。1つまたは複数の外部バスを持つ集積回路コンポーネントの合成不可能なソフトウェアモデルです。BFMは通常、ハードウェア記述言語のタスクとして定義され、複雑な波形やプロトコルを介してDUTに刺激を与えます。BFM は、シミュレーション用のテストベンチを作成するための再利用可能なビルディングブロックとしてよく使用されます。ここで、テスト対象のデザインの信号ポートは、シミュレーションの目的でテストベンチ内の適切なBFMに接続されます。トランザクションレベルモデルとも呼ばれます。このように、BFMに関連するサポートとサンプルもUVVMパッケージの一部として含まれています。

UVVMを使用してコーディングがどのように変化するかの基本的な考え方を、例を挙げて以下に説明します:

より高いレベルのトランザクション(例えば、リード、ライト、パケット送信、設定など)を処理することが容易になります。例えば、アドレス0x22のレジスタに0xF0を書き込む場合、通常のvhdlでは7ステップかかりますが、UVVMでは1ステップでそれを実現できます。以下の表1で、それを確認できます。

表 1

このように、UVMはシンプルなバスインタフェースを提供します。これとは別に、より大規模で複雑なデザインでは、より多くのインタフェース、インタフェース上のより多くの同時アクティビティ、値関連のコーナーケースとサイクル関連のコーナーケースが必要になります。これらのすべてのケースは、VVCをサポートしていないため、OSVVMだけでは達成できません。コーナーケースについて語る時は、検証を使用してそれらを見つけるためにより多くのロジックが必要になります。簡単にするために、次のような自由があればいいのですが::

これらをすべて実現するために、UVVMはVHDL検証コンポーネント(VHDL Verification Component)と呼ばれる構造を提供します。これは何なのか、どのように役立つのか、気になりますよね!?では、それを見ていみましょう。

VHDL検証コンポーネントとは何ですか?

VVCは、UVVMと互換性がある特定のプロトコルインターフェースやロジック機能に対する自己完結型の検証ソリューションになります。これは手続き型であると同時に、トランザクションレベルのモデリングを提供します。VHDL検証コンポーネントは基本的にシーケンサからコマンドを受け取り、コマンドに応じてレシーバ側で実行するインターフェースとして機能します。VVCはVHDLエンティティ/コンポーネントで、複数スレッドや自律動作を可能としています。コマンドを介して制御可能であると同時に、カプセル化されています。したがって、テストベンチで公開されたくない重要な情報を隠すことに役立ちます。

図 1 - ブロックダイヤグラムにおけるVVC

VVCを用いたシーケンサコマンド:sbi_write(SBI_VVCT,C_ADDR_TX,x”2A”); により、BFMがVVCからDUTに向かって実行されます。また、VVCでは、異なるインターフェイスのBFMを同時に実行することが可能です。具体的には、BFMプロシージャがブロッキングトランザクションであるのに対して、VVCはノンブロッキングトランザクションになります。また、VHDL検証コンポーネントとバスファンクションモデルの微妙な違いも理解することも重要です。VVCは基本的にCDM(Command Distribution Method)に従います。つまり、BFMは物理DUTに向かってすぐに実行されますが、CDMは常に実行可能なコマンドだけをVVCに分配して、そこで(多くの場合VVC内部のBFMを介して)すぐに、あるいは後で実行するために使用されます。したがって、CDMは物理DUTで信号を小刻みに動かすことはありません。

VHDL検証コンポーネントを使用した作業

VVCは3つのステージで構成されています。インタープリタ、コマンドキュー、エクゼキュータです。インタープリタは、シーケンサからコマンドを受け取るものになります。インタープリタは、シーケンサからコマンドを受け取ると、そのコマンドがキューに入れられるかどうかをチェックします。コマンドをキューに入れる場合は、第2ステージにコマンドキューが渡されます。コマンドキューステージからは、コマンドに関連するBFMを呼び出してトランザクションを実行するエグゼキュータステージに渡されます。このようなVVCの仕組みの最大の利点は、BFMの呼び出しを除くインタープリタとエクゼキュータの両方でコードの90%以上とその構造が同じままであるということです。

図 2 - VVCアーキテクチャ

Riviera-PROを使用してUVVMの使用を開始:

Riviera-PROでUVVMを使い始めるための最初のステップは、UVVMをダウンロードする必要があります。UVVMはBitvisのホームページからダウンロードすることができます。UVVMの最新バージョンをダウンロードするためのリンクは次のとおりです:http://bitvis.no/products/uvvm-vvc-framework/。最新バージョンのUVVMには、VVCフレームワークとユーティリティライブラリ、各種VHDL検証コンポーネント、UVVM-OSVVMサポート、テストベンチの概要と調整、その他多数が含まれています。下記はUVVMをダウンロードして正常に実行するために必要な正確な手順になります。



Printed version of site: support.aldec.com/jp/support/resources/documentation/articles/1884