見出し画像

近刊『実践UVM入門:検証のためのSystemVerilogクラスライブラリー』はじめに公開

2021年4月下旬発行予定の新刊書籍、『実践UVM入門:検証のためのSystemVerilogクラスライブラリー』のご紹介です。
同書の「はじめに」を、発行に先駆けて公開します。

画像1

***

はじめに

UVMはIEEEStd1800.2-2017規格となり、検証技術者だけでなくハードウェア設計者を含むSystemVerilogユーザ全体が習得しなければならない知識となりつつあります。実際、UVMは再利用可能な検証コンポーネントを開発する手段として次第に普及しつつあります。しかし、現在市販されているUVMに関する書物、および入手可能な技術書(ユーザガイド、リファレンスマニュアル等)のほとんどは英文で上級技術者向けに書かれているため、SystemVerilogの多くのユーザが、UVMに関する基礎的な知識を得ることが難しいと感じているのが実情です。本書は、初心者を対象に、SystemVerilog以外の知識を仮定せずに、UVMとは何か、UVMはなぜ必要なのか、UVMはどのように構成されているか、また、UVMをどのように使用するかを詳しく解説し、誰もがUVMを理解できるように簡潔明瞭な解説を提供します。

UVMはIEEE規格なので、文献[5]*(文末参照)がUVMのマニュアルとして準備されていますが、UVMに関する歴史的背景の解説やUVM全体構造の梗概などの解説が欠乏しているため、初心者が参考にするには難しすぎます。本書では、その欠乏を補う目的で、UVMの歴史的背景とUVMの梗概を簡潔に紹介します。

予備知識なしでのUVMの理解の難しさは、近年の検証技術の動向、およびUVMが開発された背景等に関する解説が十分ではないことにも起因していると考えられます。歴史的な背景を理解することにより、UVM誕生のゆえん、およびUVMがもたらす効果を知ることができます。そのような知識は、UVMが備える機能一つひとつを理解するのと同程度に重要な概念で、UVMの全容を知る手助けとなります。UVMの存在意義、およびUVMを構成する機能を合理的に理解することができるように、背景を重視した解説手順を採用しているのが本書の特徴です。

本書の第1章では、近年の検証技術手法の概要を解説し、その検証手法とUVMの構成には多くの共通点が存在することを指摘します。その共通点を知ることにより、UVMの全容を理解しやすくなります。さらに、UVMを使用した検証環境と、検証環境構築に必要となる主な検証コンポーネントを概説します。その知識を基にすれば、UVMの全体像を確実に理解でき、第2章以降のUVM機能の詳細解説へとスムーズに移行できます。

第2章以降は、UVMを構成する個々の概念を具体的に解説しています。UVMでは、トランザクションを用いてRTLよりも高位なレベルでシステム全体の流れを記述します。それが、第2章のTLMです。この章では、検証コンポーネント間でデータ授受をするための基本的な手順法を紹介します。シーケンサーとドライバー間に見られる1対1データ通信に加えて、モニターと他の検証コンポーネント間に見られる1対Nのデータ通信の詳細を解説します。TLMに関する知識は、UVMコンポーネントを開発する際には必要不可欠です。この章では、シーケンサーやドライバー等のメソドロジークラスを使用せずに、素朴なコンポーネントを使用してTLM通信を詳しく解説します。これにより、TLMを適用するための厳密な技術を習得できるとともに、メソドロジークラスがもつ利便性を理解できます。

さて、UVMは手法であり、ユーザはUVMが規定している原則、およびルールに従うことが必要です。たとえば、SystemVerilogによる記述としては正しくても、UVMの検証コードとして考えると不備な記述が多々存在します。しかも、それらの不備な記述の発見が遅れれば遅れるほど、解決に時間がかかります。しかし、UVMのマニュアルやユーザガイドには、そうした規定を簡潔に明記していないため、UVMの初心者は、貴重な時間を浪費する状況に陥りやすいです。第3章ではUVMが推奨しているルール、記述法、および手順を簡潔明瞭に解説し、第4章以降の検証環境構築の準備をします。

第4章では、検証環境を構築するための主要な要素であるトランザクション、ドライバー、シーケンサー、シーケンス、モニター、コレクター、エージェント、エンバイロンメント、テスト等を詳しく解説します。この章は、検証環境を構築するための重要な内容を含みます。とくに、シーケンスは、UVMの中で最も重要で、かつ難解な概念の一つであるため、機能と使用法を詳しく解説します。さらに、シミュレーションを進行させるために必要なraise_objection()とdrop_objection()の呼び出しをシーケンスに自動的に行わせる方法も解説します。シーケンサーとドライバーについては、シーケンスとの関連において、機能、役割、および使用法を詳しく解説します。総じて、第4章の内容を理解すれば、UVMを実践に適用する知識を完全に身に付けることができます。

第5章では、第4章までに習得した知識を応用した検証環境構築例を紹介します。各検証コンポーネントを省略せずに記述しているので、実践に適用する際のコードスニペットの役割を果たします。この章に記述されている例を通して、シーケンサー、ドライバー、コレクター、モニター等のUVMコンポーネント開発法を再確認できます。また、シーケンスを利用して実行時に制約を与えてトランザクションを生成する技術を習得できます。

本書は、他の書物および技術情報と異なり、検証環境構築の具体例を簡潔に示してあります。簡単なDUTを使用して再利用可能なUVM検証コンポーネントの開発例を示しているため、検証環境全体を把握しやすいだけでなく、検証コンポーネントの開発自身に集中できる利点をもたらしています。

なお、本書の記述はUVM1.2をベースにしています。また、紙面の都合上、一部の記述は小さな書体で記述されています。

さて、本書の内容は紙数的に読みやすい分量にまとめられていますが、小さな書体表現があるため、実質的にはそれ以上の記述内容です。したがって、本書は予想以上の濃い内容から構成されているので、丁寧に学習することを勧めます。また、UVMの特性から、本書には類似の記述を都度繰り返している例が多く見当たることにも注意してください。そうした冗長性を排除すれば本文内容をもう少しすっきりした形で提示できることは明らかですが、記述例を読者自身で試す場合や本書を実践における参考書として使用する際には、不完全な資料となってしまいます。したがって、多少の冗長性はありますが、あえて本書では完全な記述例をできるだけ多く提示するように心がけました。また、複雑な使用例のソースコードとその解説をダウンロードして利用することができるので、活用してください。たとえば、ソースコードを小冊子にプリントしておくと便利です。

最後に、本書はUVMが備える機能を厳密に解説した類のない入門書です。それゆえ、用語の解説、解説図、シミュレーション結果の表現等に関して本書出版社には細かな注文に対応して頂きました。とくに、本書出版に多大な協力を頂いた森北出版の宮地亮介氏に感謝いたします。

* IEEE Std 1800.2-2017: IEEE Standard for Universal Verification Methodology
Language Reference Manual.

***

実践UVM入門:検証のためのSystemVerilogクラスライブラリー

https://www.morikita.co.jp/books/book/3629

著:篠塚一也

SystemVerilogとともに、近年のハードウェア検証に必要不可欠となっているUVM(Universal Verification Methodology)。複雑な言語仕様をわかりやすく解説した、待望の入門書!

UVMの理解に不可欠なSystemVerilogの知識を押さえつつ、コンポーネント間通信(TLM)、クラスライブラリー、検証コンポーネント開発といった実務に欠かせないことがらを、開発例とともに丁寧にひもときます。

サンプルコードや検証環境の構築例も多数掲載。手を動かしながら実践で役立つ知識が身につけられるよう工夫されています。

【目次】
第1章 概要
 1.1 UVMとは何か
 1.2 検証技術のトレンド
 1.3 UVMテストベンチの構成
 1.4 トランザクション
 1.5 代表的なUVMクラス
 1.6 ファクトリ
 1.7 virtualインターフェース
 1.8 UVMマクロ
 1.9 UVMの使用手順
 1.10 本書の構成と目的
 1.11 例題に関して
 1.12 本書の記法

第2章 TLM
 2.1 概要
 2.2 UVMコンポーネント間の通信
 2.3 TLMを使用した検証環境例

第3章 UVMクラスライブラリーの基礎
 3.1 uvm_objectとuvm_component
 3.2 コンストラクタ
 3.3 フィールドマクロ
 3.4 プリント機能
 3.5 ファクトリ
 3.6 UVMシミュレーション
 3.7 コンフィギュレーションの設定変更
 3.8 コマンドラインの操作
 3.9 run_test()メソッド
 3.10 タイムアウトの設定
 3.11 検証コンポーネントライブラリー
 3.12 programブロックとテストベンチ
 3.13 クラスの記述法
 3.14 UVMクラス定義のチェックリスト

第4章 UVM検証コンポーネントの開発
 4.1 トランザクション
 4.2 simple_ifインターフェース
 4.3 ドライバー
 4.4 シーケンス
 4.5 シーケンサー
 4.6 モニターとコレクター
 4.7 エージェント
 4.8 エンバイロンメント
 4.9 テストとテストベンチ
 4.10 UVMクラスと標準プロパーティ
 4.11 UVMの設定変更
 4.12 検証環境の実行例

第5章 UVM検証環境構築例
 5.1 記述例の概要
 5.2 dut
 5.3 shift_if
 5.4 shift_item
 5.5 shift_driver
 5.6 shift_sequencer
 5.7 shift_sequence_base
 5.8 shift_test_seq1
 5.9 shift_test_seq2
 5.10 shift_collector
 5.11 shift_monitor
 5.12 shift_agent
 5.13 shift_env
 5.14 shift_test_base
 5.15 shift_test1
 5.16 shift_test2
 5.17 pkg
 5.18 top
 5.19 実行結果

第6章 補足
 6.1 スケジューリング領域
 6.2 UVMマクロの必要性
 6.3 SystemVerilogマクロの予備知識
 6.4 インターフェースクラス
 6.5 イベントによるプロセス制御
 6.6 enum
 6.7 UVMとファンクショナルカバレッジ
 6.8 $sformat()と$sformatf()

参考文献
索引

この記事が気に入ったらサポートをしてみませんか?