Transcript
Page 1: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

Artgraphics

実践 SystemVerilog入門

Document Identification Number: ARTG-TD-001-2019

Document Revision: 1.0, 2020.02.14

アートグラフィックス

篠塚一也

✓ SystemVerilog

Page 2: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

© 2020 アートグラフィックス

〒124-0012 東京都葛飾区立石 8-14-1

www.artgraphics.co.jp

A Practical Guide to Learning SystemVerilog

© 2020 Artgraphics. All rights reserved.

8-14-1, Tateishi, Katsushika-ku, Tokyo, 124-0012 Japan

www.artgraphics.co.jp

注意事項

弊社の技術資料の内容の一部、あるいは全部を無断で複写、複製、転載する事は、

禁じます。

弊社の技術資料の譲渡、転売、模倣、又は、改造等の行為を禁止致します。

Page 3: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

はじめに

SystemVerilog の最新仕様は、2018 年 2 月 21 日に規格 IEEE Std 1800-2017(以降、LRM と略

称)として公開され、実質的に Verilog HDL(以降 Verilog と略称)時代に終末を告げ、

SystemVerilog の時代が到来したと言えます。SystemVerilog は Verilog の持つ曖昧性を除去す

ると共に Verilogが備えていない多くの機能を追加し、設計、及び検証分野での生産性向上と

品質向上を齎します。特に、SystemVerilog が備えるクラスは、検証技術の再利用性を高める

ためのデータタイプとして重要な役割を果たします。

SystemVerilogは、Verilogをサブセットとして位置付け、Verilogとの上位互換性を維持する事

を基本としています。例えば、Verilog シンタックスで記述したデザインを、変更せずに

SystemVerilogの環境でコンパイルする事ができます。然し、実行結果がVerilogシミュレータ

の結果と完全に一致する保証はありません。理由は、Verilog の曖昧性に起因します。Verilog

ではスケジューリングのセマンティックスが厳密ではないために、記述の仕方により実行結

果が大きく異なります。また、同じ記述でも、使用する Verilogシミュレータにより実行結果

が異なる事もあり得ます。Verilog と比較した時、SystemVerilog の大きな進歩はスケジューリ

ングのセマンティックスを厳密に定義した事と言えます。SystemVerilog を学習する際には、

先ず最初に、そのセマンティックスを理解しなければなりません。逆に言えば、スケジュー

リングセマンティックスを忠実に実践すれば、シミュレーション結果は期待した通りの動作

になる事を意味します。本書は、全体を通してこの事実を強調します。

既に述べた様に、SystemVerilog には多くの機能が追加されました。とりわけ、SystemVerilog

の豊富なデータタイプは検証作業の実践面での改革を余儀なくさせます。例えば、従来のモ

ジュールベースのテストベンチではなく、汎用化に適した SystemVerilog クラスを使用した検

証環境構築法は生産性向上と再利用可能性を促進し、検証技術をライブラリーとして蓄積す

る事を可能にします。従い、SystemVerilogでは従来とは異なる発想が求められます。

LRM は 1300 ページに及ぶ大作であり、読破するには相当の覚悟と時間が必要です。本来、

誰もが言語仕様書を読まなければならないのですが、LRM が容易に理解できる英文では書か

れていない事実を考えると、少数の技術者のみが読破し得ると思えます。一方、日本国内に

は LRM を解説した良書が皆無である事実は、国内における SystemVerilog の普及を妨げてい

る大きな障害の一つと言えると考えられます。

Verilog から SystemVerilog への移行、或いは設計及び検証分野の主言語として SystemVerilog

を採用する事は時代の趨勢であると受け止めなければなりません。従って、ハードウェア設

計検証技術者にとっては、SystemVerilog に関する実践的な知識を習得する事は、必然的な義

務となっています。本書は、こうした状況を鑑みて誕生しました。

本書は、単なる SystemVerilog の解説書では無く、言語の持つ機能を基礎から解説して、実践

で使用するための知識を提供する事を主眼にしています。本書は、LRM に書かれてある重要

な章を殆ど含んでいるため、決して入門書とは言えないかも知れません。然し、記述スタイ

ルは初心者を対象にしているので、本書の内容を理解する事は困難ではないと思います。

本書の構成は、LRM の構成を尊重する様に構成されているので、本書を読みながら LRM を

参照する事は比較的容易です。本書の内容は、LRM のエッセンスを簡潔明瞭に解説した資料

ではありますが、更に詳細な知識を得るためには LRMを参照するのが最も望ましい事です。

本書は、概要を含めて 27章から構成され、SystemVerilog言語全般の解説と検証機能全般の解

説をカバーしています。SystemVerilog言語全般では、Verilogとの差異、SystemVerilogに追加

された機能等を中心にして解説を進め、検証機能全般ではランダムスティミュラスの生成、

ファンクショナルカバレッジ、アサーション、UVMを解説しています。要約すると、本書を

読了後は SystemVerilog の基礎的な知識から検証技術の基礎知識までを習得する事ができます。

特に、最近知られ始めている検証手法 UVM の解説は検証技術を見直す好機になると確信し

ています。UVMは、SystemVerilogが備える殆ど全ての機能を利用して構築された優れた検証

Page 4: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

2

Copyright 2020 © Artgraphics. All rights reserved.

パッケージです。従って、UVM を理解する事は SystemVerilog に関する理解を深める事に繋

がります。UVMは決して簡単に理解できる概念ではありませんが、たとえ検証作業に関わり

がない読者でも UVM に関する基礎知識を習得する事を勧めます。知識習得の努力が報われ

る日が必ずやって来ます。

本書は多くの章から構成されてはいますが、第 5 章までの内容を順に読んだ後は、他の章を

選択して学習する事ができます。目的と必要性に応じて主題を選択して効果的に学習を進め

て下さい。

本書の特徴の一つは、多くの例題でシミュレーション結果を示している事です。シミュレー

ション結果を示す理由は、記述した機能がどの様な効果を齎すかを正確に伝えるためです。

同時に、予想外の結果を齎す事が有り得る事を示すためでもあります。即ち、単なる機能の

説明に終わらず、予想される帰結を如実に示す事により、実践で遭遇し得る問題を未然に防

ぐための基礎技術を研磨する機会としています。

また、紙面の都合上、一部の記述は小さな書体で記述されています。

アートグラフィックス

篠塚一也

Page 5: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

1

Copyright 2020 © Artgraphics. All rights reserved.

変更履歴

日付 Revision 変更点

2020.02.14 1.0 初版。

Page 6: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

1

Copyright 2020 © Artgraphics. All rights reserved.

目次

1 概要 ............................................................................................................................... 1

1.1 SYSTEMVERILOGの歴史 .............................................................................................. 1

1.2 SYSTEMVERILOG概要 ................................................................................................. 1

1.2.1 言語としての SystemVerilog .............................................................................. 1

1.2.2 設計言語としての SystemVerilog ....................................................................... 2

1.2.3 検証言語としての SystemVerilog ....................................................................... 3

1.3 本書の対象者と目的 .................................................................................................... 3

1.4 本書の構成 .................................................................................................................. 4

1.5 例題に関して ............................................................................................................... 5

1.6 本書の記法 .................................................................................................................. 5

2 設計及び検証のためのビルディングブロック ................................................................. 9

2.1 設計要素 ...................................................................................................................... 9

2.2 モジュール .................................................................................................................. 9

2.3 プログラム ................................................................................................................ 10

2.4 インターフェース ..................................................................................................... 11

2.5 チェッカー ................................................................................................................ 12

2.6 パッケージ ................................................................................................................ 13

2.7 ゲートとスィッチレベルのモデリング ..................................................................... 14

2.8 PRIMITIVE .................................................................................................................. 16 2.9 CONFIGURATION ........................................................................................................ 16

2.10 コンパイルユニット .............................................................................................. 16

2.11 `TIMESCALEコンパイラーダイレクティブ................................................................ 17

2.12 VERILOGから SYSTEMVERILOGへの移行 ................................................................. 19

2.12.1 背景と動機 ..................................................................................................... 19

2.12.2 Verilogから SystemVerilogへの変換 .............................................................. 19 2.12.2.1 組み合わせ回路 ....................................................................................................... 19 2.12.2.2 シーケンシャル回路 ................................................................................................ 21

3 データタイプ ............................................................................................................... 22

3.1 データタイプとデータオブジェクト......................................................................... 22

3.2 LOGIC型 .................................................................................................................... 23

3.3 ネット型 .................................................................................................................... 23

3.4 変数 ........................................................................................................................... 25

3.5 単数系と集合系 ......................................................................................................... 26

3.6 ネットと変数 ............................................................................................................. 27

3.7 4-STATE型 ................................................................................................................. 28

3.8 2-STATE 型 ................................................................................................................. 28

3.9 INTEGRALデータタイプ ............................................................................................ 30

3.10 REAL、SHORTREALと REALTIME............................................................................... 30

3.11 VOID型 ...................................................................................................................... 30

3.12 CHANDLE型 .............................................................................................................. 31

3.13 クラス .................................................................................................................... 31

3.14 STRINGデータタイプ ................................................................................................ 31

3.15 イベントデータタイプ ........................................................................................... 33

3.16 TYPEDEF .................................................................................................................... 35 3.17 ENUMデータタイプ .................................................................................................. 36

3.18 定数 ........................................................................................................................ 40

3.19 CAST オペレータ ....................................................................................................... 43

3.20 $CAST ダイナミック型変換 ....................................................................................... 43

Page 7: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

2

Copyright 2020 © Artgraphics. All rights reserved.

3.21 便利な初期値設定 .................................................................................................. 44

3.21.1 リテラルの拡張 .............................................................................................. 44

3.21.2 インデックス指定 ........................................................................................... 45

3.22 リファレンスポインター ....................................................................................... 46

4 メンバーで構成されるデータタイプ ............................................................................. 48

4.1 ストラクチャ ............................................................................................................. 48

4.1.1 Packed ストラクチャ ........................................................................................ 50

4.1.2 ストラクチャへの値の設定 ................................................................................ 51

4.2 ユニオン .................................................................................................................... 51

4.2.1 Packedユニオン ................................................................................................ 53

4.2.2 タグ付きユニオン .............................................................................................. 53

4.3 PACKED アレイと UNPACKEDアレイ ........................................................................ 54

4.3.1 Packed アレイ ................................................................................................... 54

4.3.2 Unpacked アレイ .............................................................................................. 55

4.3.3 アレイの操作 ..................................................................................................... 56

4.3.4 packedアレイのアクセス .................................................................................. 58

4.4 ダイナミックアレイ .................................................................................................. 58

4.4.1 ダイナミックアレイのメソッド ........................................................................ 59

4.4.2 アレイのコピー .................................................................................................. 61

4.5 ASSOCIATIVE アレイ .................................................................................................. 62

4.5.1 Associativeアレイの概要 .................................................................................. 62

4.5.2 Associativeアレイの要素の登録 ....................................................................... 63

4.5.3 Associative アレイの関数 .................................................................................. 64

4.5.4 Associativeアレイリテラル .............................................................................. 65

4.6 キュー ........................................................................................................................ 66

4.6.1 キューの概要 ..................................................................................................... 66

4.6.2 キューの操作 ..................................................................................................... 67

4.6.3 キューを操作する関数 ....................................................................................... 69

4.7 アレイ情報取得関数 .................................................................................................. 71

4.8 アレイ操作関数 ......................................................................................................... 72

4.8.1 アレイ検索関数 .................................................................................................. 72

4.8.2 アレイ要素の順序を操作する関数 ..................................................................... 74

4.8.3 アレイを計算する関数 ....................................................................................... 75

4.9 アレイの走査法 ......................................................................................................... 76

5 クラス .......................................................................................................................... 78

5.1 クラスの概要 ............................................................................................................. 78

5.2 シンタックス ............................................................................................................. 79

5.3 クラスオブジェクト(クラスインスタンス) .......................................................... 81

5.4 クラスプロパーティ及びメソッドへのアクセス ...................................................... 81

5.5 コンストラクタ ......................................................................................................... 82

5.6 タイプ指定のコンストラクタ呼び出し ..................................................................... 82

5.7 STATICクラスプロパーティ ...................................................................................... 83

5.8 STATICクラスメソッド ............................................................................................. 84

5.9 THISハンドル ........................................................................................................... 85

5.10 ハンドルのアレイ .................................................................................................. 85

5.11 クラスのコピー ..................................................................................................... 87

5.12 クラスインヘリタンスとサブクラス ..................................................................... 88

5.13 $CAST......................................................................................................................... 91

5.14 VIRTUALメソッド ..................................................................................................... 92

5.15 アブストラクトクラスとピュアバーチャルメソッド ........................................... 94

5.16 クラススコープオペレータ ................................................................................... 95

Page 8: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

3

Copyright 2020 © Artgraphics. All rights reserved.

5.17 メンバーへのアクセス制限 ................................................................................... 97

5.18 メソッドをクラスの外に記述する方法 ................................................................. 98

5.19 パラメータによる汎用クラスの定義 ..................................................................... 99

5.19.1 概要 ................................................................................................................ 99

5.19.2 パラメータによる汎用クラスの実装例 .......................................................... 99

5.19.3 パラメータによる汎用クラスの開発手順 .................................................... 101

5.19.4 Quicksort ......................................................................................................... 102

5.20 クラスのフォワード宣言 ..................................................................................... 104

5.21 インターフェースクラス ..................................................................................... 105

5.21.1 概要 .............................................................................................................. 105

5.21.2 機能 .............................................................................................................. 106

5.22 ガーベッジコレクション ..................................................................................... 108

5.22.1 概要 .............................................................................................................. 108

5.22.2 automatic変数 ................................................................................................ 108

5.22.3 static変数 ........................................................................................................ 109

6 プロセス .................................................................................................................... 110

6.1 シミュレーションプロシージャ .............................................................................. 110

6.1.1 initialプロシージャ ........................................................................................ 110

6.1.2 alwaysプロシージャ ....................................................................................... 111 6.1.2.1 組み合わせ回路とセンシティビティリスト .............................................................. 111 6.1.2.2 シーケンシャル回路と alwaysプロシージャ ............................................................ 112 6.1.2.3 always_combプロシージャ ...................................................................................... 113 6.1.2.4 always_latchプロシージャ ...................................................................................... 114 6.1.2.5 always_ffプロシージャ ............................................................................................ 115

6.1.3 finalプロシージャ ........................................................................................... 117

6.2 ブロック文 .............................................................................................................. 117

6.2.1 begin-endブロック ......................................................................................... 118

6.2.2 fork-joinブロック ............................................................................................ 119

6.2.3 ブロック名 ....................................................................................................... 123

6.2.4 forkブロックの効果的利用 ............................................................................. 123

6.3 タイミングによる実行制御 ..................................................................................... 124

6.3.1 タイミングによる実行制御の概要 ................................................................... 124

6.3.2 ディレーによる制御 ......................................................................................... 125

6.3.3 エッジセンシティブイベント制御 ................................................................... 125 6.3.3.1 機能 ........................................................................................................................... 125 6.3.3.2 エッジセンシティブイベント制御の注意点 .............................................................. 127

6.3.4 代入内タイミング制御 ..................................................................................... 129

6.3.5 レベルセンシティブイベント制御 ................................................................... 132

6.3.6 シーケンスによるイベント制御 ...................................................................... 132

6.4 プロセス制御 ........................................................................................................... 134

6.4.1 wait fork文 ...................................................................................................... 134

6.4.2 disable fork文 ................................................................................................. 135

6.4.3 wait_order文 ................................................................................................... 135

6.5 プロセスと RNG ..................................................................................................... 137

6.6 ユーザ固有のプロセス制御 ..................................................................................... 138

7 代入文 ........................................................................................................................ 141

7.1 連続代入文 .............................................................................................................. 141

7.2 ビヘイビア代入文 ................................................................................................... 143

7.2.1 ブロッキング代入文 ......................................................................................... 143

7.2.2 ノンブロッキング代入文 ................................................................................. 144 7.2.2.1 機能 ........................................................................................................................... 144 7.2.2.2 代入文の効果の確認 .................................................................................................. 145

Page 9: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

4

Copyright 2020 © Artgraphics. All rights reserved.

7.2.2.3 左辺に関する制限...................................................................................................... 146

7.3 パターン指定による代入 ......................................................................................... 147

7.4 アレイパターン指定代入文 ..................................................................................... 148

7.5 ストラクチャパターン指定代入文 .......................................................................... 148

7.6 UNPACKED アレイの初期化 ..................................................................................... 150

8 オペレータと式 .......................................................................................................... 152

8.1 オペレータ .............................................................................................................. 152

8.1.1 代入オペレータ ................................................................................................ 153

8.1.2 インクリメント及びデクリメントオペレータ ................................................. 153

8.1.3 冪乗 .................................................................................................................. 154

8.1.4 比較オペレータ ................................................................................................ 154

8.1.5 ワイルドカード比較オペレータ ...................................................................... 155

8.1.6 logicalオペレータ ........................................................................................... 157

8.1.7 bitwiseオペレータ .......................................................................................... 157

8.1.8 計算オペレータ ................................................................................................ 159

8.1.9 shiftオペレータ ............................................................................................... 160

8.1.10 conditionalオペレータ .................................................................................... 161

8.1.11 結合オペレータ ............................................................................................ 162

8.1.12 insideオペレータ ............................................................................................ 163

8.1.13 ビットストリームオペレータ....................................................................... 164

8.2 オペランド .............................................................................................................. 166

8.2.1 パートセレクト ................................................................................................ 166

8.2.2 unpackedアレイ ............................................................................................. 167

8.3 タグ付きメンバーの操作 ......................................................................................... 168

9 実行文 ........................................................................................................................ 169

9.1 IF文 ......................................................................................................................... 169

9.1.1 全ての条件を列挙 ............................................................................................ 169

9.1.2 unique-if、unique0-if文 ................................................................................. 169

9.1.3 priority-if文 .................................................................................................... 170

9.2 CASE文 .................................................................................................................... 171

9.2.1 unique-case、unique0-case文 ....................................................................... 172

9.2.2 priority-case文 ................................................................................................ 173

9.2.3 insideオペレータと if文及び case文 ............................................................. 173 9.2.3.1 if文と insideオペレータ .......................................................................................... 173 9.2.3.2 case文と insideオペレータ ...................................................................................... 173

9.2.1 casezと casex .................................................................................................. 174

9.3 ループ文 .................................................................................................................. 175

9.3.1 for文 ................................................................................................................ 175

9.3.2 repeat文 .......................................................................................................... 176

9.3.3 foreach文 ........................................................................................................ 177

9.3.4 while文 ............................................................................................................ 179

9.3.5 do-while文....................................................................................................... 180

9.3.6 forever文 ......................................................................................................... 180

9.4 RETURN文 ............................................................................................................... 181

9.5 BREAK文 .................................................................................................................. 182

9.6 CONTINUE文............................................................................................................ 183

10 タスクとファンクション ......................................................................................... 185

10.1 タスク .................................................................................................................. 185

10.1.1 ポートリスト ................................................................................................ 185

10.1.2 タスク内の記述 ............................................................................................ 185

Page 10: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

5

Copyright 2020 © Artgraphics. All rights reserved.

10.2 ファンクション ................................................................................................... 186

10.2.1 ファンクションの制限 ................................................................................. 186

10.2.2 ポートリスト ................................................................................................ 186

10.2.3 ファンクション内の記述 .............................................................................. 187

10.2.4 ファンクション内でタイミング制御を行う方法.......................................... 188

10.3 引数に標準値を指定する方法 .............................................................................. 189

10.4 値を戻すファンクションの使用 .......................................................................... 190

10.5 値を戻さないファンクションの使用 ................................................................... 190

10.6 再帰呼び出し ....................................................................................................... 191

10.7 クラスのメソッドと再帰呼び出し ...................................................................... 192

10.8 メソッド内での変数の初期化 .............................................................................. 192

10.9 引数としてのアレイ ............................................................................................ 194

10.10 インポートとエクスポート ................................................................................. 195

11 クロッキングブロック ............................................................................................ 197

11.1 最も簡単なクロッキングブロック ...................................................................... 197

11.2 クロッキングスキュー ......................................................................................... 198

11.3 クロッキングイベントと OBSERVED領域 ........................................................... 200

11.4 サイクルディレー ................................................................................................ 201

12 プロセス間の同期と交信 ......................................................................................... 203

12.1 セマフォ .............................................................................................................. 203

12.2 メールボックス ................................................................................................... 206

12.3 パラメータ化したメールボックス ...................................................................... 210

12.4 名称付きイベント ................................................................................................ 211

12.4.1 概要 .............................................................................................................. 211

12.4.2 triggered .......................................................................................................... 213 12.4.3 引数としてのイベントオブジェクト ............................................................ 215

12.4.4 イベント資源の解放 ..................................................................................... 216

12.4.5 イベントの比較 ............................................................................................ 216

12.4.6 イベントの別名 ............................................................................................ 217

13 チェッカー ............................................................................................................. 218

13.1 概要 ...................................................................................................................... 218

13.2 チェッカーインスタンス ..................................................................................... 218

13.3 自由変数 .............................................................................................................. 220

14 プログラム ............................................................................................................. 222

14.1 シンタックス ....................................................................................................... 222

14.2 プログラムの特徴 ................................................................................................ 223

14.3 プログラムの制御 ................................................................................................ 225

14.4 シミュレーションの終了 ..................................................................................... 225

14.5 テストベンチ ....................................................................................................... 226

15 インターフェース ................................................................................................... 228

15.1 シンタックス ....................................................................................................... 228

15.2 インターフェースの機能概要 .............................................................................. 229

15.3 ジェネリックインターフェースに依る接続 ........................................................ 230

15.4 MODPORT ................................................................................................................. 230 15.5 パラメータ化したインターフェース ................................................................... 232

15.6 VIRTUAL インターフェース ..................................................................................... 233

15.7 インターフェース使用例 ..................................................................................... 234

15.7.1 概要 .............................................................................................................. 234

Page 11: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

6

Copyright 2020 © Artgraphics. All rights reserved.

15.7.2 simple_if .......................................................................................................... 235 15.7.3 driver ............................................................................................................... 235 15.7.4 collector ........................................................................................................... 236 15.7.5 dut.................................................................................................................... 236 15.7.6 top .................................................................................................................... 236 15.7.7 実行結果 ....................................................................................................... 237

16 パッケージ ............................................................................................................. 238

16.1 シンタックス ....................................................................................................... 238

16.2 パッケージの定義法 ............................................................................................ 239

16.3 パッケージの使用法 ............................................................................................ 239

16.4 STDパッケージ ........................................................................................................ 242

17 モジュール ............................................................................................................. 246

17.1 概要 ...................................................................................................................... 246

17.2 モジュールの定義 ................................................................................................ 247

17.3 ポートリスト ....................................................................................................... 249

17.3.1 Verilogスタイルと SystemVerilogスタイル.................................................. 249

17.3.2 ポートの方向に関するルール....................................................................... 249

17.4 モジュール記述例 ................................................................................................ 250

17.4.1 一般的な記述 ................................................................................................ 251

17.4.2 組み合わせ回路の検証 ................................................................................. 252 17.4.2.1 組み合わせ回路のセンシティビティリスト .......................................................... 252 17.4.2.2 組み合わせ回路を検証するタイミング ................................................................. 253

17.4.3 組み合わせ回路 ............................................................................................ 254 17.4.3.1 コンパレータ ......................................................................................................... 254 17.4.3.2 デコーダー ............................................................................................................ 255 17.4.3.3 エンコーダー ......................................................................................................... 256 17.4.3.4 Grayコード .......................................................................................................... 257

17.4.4 シーケンシャル回路の検証 .......................................................................... 258 17.4.4.1 シーケンシャル回路を検証するタイミング .......................................................... 258 17.4.4.2 シーケンシャル回路のレスポンス......................................................................... 259

17.4.5 シーケンシャル回路の検証手順 ................................................................... 259

17.4.6 シーケンシャル回路 ..................................................................................... 260 17.4.6.1 バイナリーカウンター .......................................................................................... 260 17.4.6.2 ラッチ ................................................................................................................... 262 17.4.6.3 インターフェースを使用する記述例 ..................................................................... 264 17.4.6.4 JK―フリップフロップ .......................................................................................... 265 17.4.6.5 バレルシフタ ......................................................................................................... 267 17.4.6.6 データシフタ ......................................................................................................... 268 17.4.6.7 Gated clockの記述例 ............................................................................................ 269

17.4.7 FSM ................................................................................................................. 270 17.4.7.1 概要 ....................................................................................................................... 270 17.4.7.2 Mealy FSM ........................................................................................................... 271 17.4.7.3 Moore FSM ........................................................................................................... 273

17.4.8 refポートの使用 .............................................................................................. 275

17.4.9 inoutポートを持つシーケンシャル回路 ......................................................... 275

17.5 パラメータ化したモジュール .............................................................................. 277

17.6 トップレベルモジュール ..................................................................................... 278

17.7 モジュールインスタンス ..................................................................................... 279

17.8 未定義モジュールの宣言 ..................................................................................... 279

17.9 階層名称 .............................................................................................................. 280

18 ジェネレート .......................................................................................................... 283

18.1 概要 ...................................................................................................................... 283

Page 12: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

7

Copyright 2020 © Artgraphics. All rights reserved.

18.2 使用法 .................................................................................................................. 284

19 システムタスクとシステム関数 .............................................................................. 287

19.1 DISPLAY及び WRITEタスク ..................................................................................... 287

19.2 $SFORMATと$SFORMATF ........................................................................................ 289

19.3 モニタリング ....................................................................................................... 289

19.4 シミュレーション時間取得関数 .......................................................................... 290

19.5 $PRINTTIMESCALE ................................................................................................... 291

19.6 値変換 .................................................................................................................. 292

19.7 情報取得関数 ....................................................................................................... 292

19.8 ビット VECTORシステム関数 .............................................................................. 295

19.9 サンプル値を参照するための関数 ...................................................................... 296

19.10 エラー処理タスク ................................................................................................ 298

19.11 確率分布関数 ....................................................................................................... 299

19.12 シミュレーション制御 ......................................................................................... 300

19.13 その他のシステムタスク及びシステム関数 ........................................................ 300

19.14 コマンドラインの操作 ......................................................................................... 301

19.15 VCDファイル ..................................................................................................... 302

19.15.1 VCDファイルの指定 ................................................................................... 303

19.15.2 VCDファイルへの記録 ................................................................................ 303

19.15.3 VCDファイルへの記録の一時的停止と再開 ............................................... 303

19.15.4 VCDファイル作成例 ................................................................................... 304

20 制約によるランダムスティミュラスの生成 ............................................................. 305

20.1 概要 ...................................................................................................................... 305

20.2 ランダム変数 ....................................................................................................... 306

20.2.1 ランダム変数の概要 ..................................................................................... 306

20.2.2 rand修飾子 ...................................................................................................... 307

20.2.3 randc修飾子 .................................................................................................... 307

20.2.4 randと randcの使用例 ................................................................................... 307

20.3 制約 ...................................................................................................................... 308

20.3.1 insideオペレータ ............................................................................................ 309

20.3.2 distオペレータ ................................................................................................ 311

20.3.3 uniqueオペレータ ........................................................................................... 314

20.3.4 implicationオペレータ ................................................................................... 316

20.3.5 if-else制約 ....................................................................................................... 317

20.3.6 foreach制約 ..................................................................................................... 319

20.3.7 乱数決定順序 ................................................................................................ 320

20.4 乱数発生関数 ....................................................................................................... 322

20.5 実行時に制約を定義する方法 .............................................................................. 324

20.6 ランダム変数の制御 ............................................................................................ 325

20.7 制約の制御 ........................................................................................................... 326

20.8 RANDOMIZE()関数によるランダム変数の制御 ........................................................ 327

20.9 条件の否定 ........................................................................................................... 328

20.10 ストラクチャ ....................................................................................................... 329

20.11 キューに乱数を発生 ............................................................................................ 330

20.12 チェッカーとしての制約 ..................................................................................... 331

20.13 制約をテストケース毎に指定する方法 ............................................................... 333

20.14 制約をクラス外部に定義する方法 ...................................................................... 334

20.15 STD::RANDOMIZE() ................................................................................................ 335 20.16 システム関数 ....................................................................................................... 336

20.17 RANDCASE ............................................................................................................ 337

Page 13: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

8

Copyright 2020 © Artgraphics. All rights reserved.

21 ファンクショナルカバレッジ .................................................................................. 339

21.1 概要 ...................................................................................................................... 339

21.2 カバレッジモデルの定義 ..................................................................................... 340

21.2.1 シンタックス ................................................................................................ 340

21.2.2 カバーグループへの引数 .............................................................................. 341

21.2.3 サンプリングのタイミング指定 ................................................................... 341

21.2.4 サンプリング関数 ......................................................................................... 341

21.2.5 クラス外でのカバレッジ定義....................................................................... 342

21.2.6 カバレッジレポート ..................................................................................... 343

21.2.7 簡単な使用例 ................................................................................................ 343

21.3 カバーポイントの定義 ......................................................................................... 344

21.3.1 カバレッジビンの定義 ................................................................................. 345 21.3.1.1 固定数のビン ......................................................................................................... 345 21.3.1.2 それぞれの値にビンを確保する方法 ..................................................................... 345 21.3.1.3 唯一つのビン ......................................................................................................... 346 21.3.1.4 autoビン ............................................................................................................... 346 21.3.1.5 defaultビン .......................................................................................................... 347 21.3.1.6 illegal_bins ........................................................................................................... 347 21.3.1.7 ignore_bins ........................................................................................................... 348

21.3.2 カバーポイントの使用例 .............................................................................. 348

21.3.3 信号値の遷移 ................................................................................................ 355

21.3.4 式のカバレッジ ............................................................................................ 357

21.3.5 制約とカバレッジ ......................................................................................... 359

21.4 クロスカバレッジ ................................................................................................ 360

21.5 自動カバレッジ収集 ............................................................................................ 362

21.5.1 カバレッジ計算と検証コンポーネント ........................................................ 362

21.5.2 カバーグループの定義 ................................................................................. 363

21.5.3 カバレッジのサンプリング .......................................................................... 363

21.5.4 自動カバレッジ収集例 ................................................................................. 363 21.5.4.1 simple_if ............................................................................................................... 364 21.5.4.2 simple_item .......................................................................................................... 364 21.5.4.3 simple_component ............................................................................................... 365 21.5.4.4 simple_driver ....................................................................................................... 365 21.5.4.5 simple_generator ................................................................................................. 366 21.5.4.6 simple_collector .................................................................................................... 366 21.5.4.7 simple_monitor .................................................................................................... 367 21.5.4.8 dut ........................................................................................................................ 367 21.5.4.9 top ......................................................................................................................... 367 21.5.4.10 自動カバレッジ取集のまとめ ................................................................................ 368

22 アサーション .......................................................................................................... 369

22.1 概要 ...................................................................................................................... 369

22.1.1 アサーションとは何か? .............................................................................. 369

22.1.2 アサーションの種類 ..................................................................................... 370

22.1.3 サンプリング ................................................................................................ 370

22.1.4 アサーションクロック ................................................................................. 370

22.1.5 アサーションの式 ......................................................................................... 371

22.2 即時実行型アサーション ..................................................................................... 371

22.3 並列型アサーション ............................................................................................ 372

22.3.1 概要 .............................................................................................................. 372

22.3.2 assert文 ........................................................................................................... 373

22.3.3 assume文 ........................................................................................................ 373

22.3.4 cover文 ............................................................................................................ 373

22.3.5 restrict文 ........................................................................................................ 374

22.4 IMPLICATION オペレータ ......................................................................................... 374

Page 14: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

9

Copyright 2020 © Artgraphics. All rights reserved.

22.4.1 機能 .............................................................................................................. 374

22.4.2 vacuous passの抑止 ........................................................................................ 375

22.5 アサーションスレッドダイアグラム ................................................................... 376

22.6 シーケンス ........................................................................................................... 376

22.6.1 シーケンスの定義 ......................................................................................... 376

22.6.2 シーケンス式の結合 ..................................................................................... 377

22.6.3 クロッキングイベント ................................................................................. 378

22.6.4 レベルセンシティブ とエッジセンシティブ ................................................ 378

22.6.5 triggered()メソッド ......................................................................................... 379

22.6.6 シーケンスの操作 ......................................................................................... 380 22.6.6.1 ##m ....................................................................................................................... 381 22.6.6.2 ##[m:n] ................................................................................................................. 382 22.6.6.3 [*m] ....................................................................................................................... 383 22.6.6.4 [*m:n] .................................................................................................................... 385 22.6.6.5 [=m] ...................................................................................................................... 386 22.6.6.6 [->m] .................................................................................................................... 387 22.6.6.7 sig throughout seq ............................................................................................... 389 22.6.6.8 seq1 within seq2................................................................................................... 390 22.6.6.9 seq1 and seq2 ....................................................................................................... 391 22.6.6.10 seq1 or seq2 .......................................................................................................... 393 22.6.6.11 seq1 intersect seq2 ............................................................................................... 394

22.7 プロパーティ(PROPERTIES) ............................................................................ 396

22.7.1 概要 .............................................................................................................. 396

22.7.2 シーケンスとプロパーティ .......................................................................... 397

22.8 プロパーティオペレータ ..................................................................................... 397 22.8.1.1 #=# ........................................................................................................................ 399 22.8.1.2 s_always [constant_range] .................................................................................. 400 22.8.1.3 until ...................................................................................................................... 401

22.9 マルチクロック ................................................................................................... 403

23 UVM ...................................................................................................................... 405

23.1 概要 ...................................................................................................................... 405

23.1.1 UVMとは何か? ............................................................................................. 405

23.1.2 検証技術のトレンド ..................................................................................... 405

23.1.3 UVMテストベンチの構成 ............................................................................... 407

23.1.4 UVMの構成..................................................................................................... 408 23.1.4.1 uvm_pkg ............................................................................................................... 408 23.1.4.2 uvm_object ........................................................................................................... 408 23.1.4.3 UVMマクロ .......................................................................................................... 408

23.1.5 ソースコードの準備 ..................................................................................... 409 23.1.5.1 インクルード ......................................................................................................... 409 23.1.5.2 uvm_pkgのインポート ......................................................................................... 409

23.2 TLM ........................................................................................................................ 410

23.2.1 概要 .............................................................................................................. 410

23.2.2 トランザクション ......................................................................................... 410

23.2.3 UVMコンポーネント間の通信........................................................................ 411 23.2.3.1 概要 ....................................................................................................................... 411 23.2.3.2 put操作 ................................................................................................................ 412 23.2.3.3 get操作 ................................................................................................................. 416 23.2.3.4 uvm_tlm_fifo ........................................................................................................ 420 23.2.3.5 analysis-portsと analysis-exports....................................................................... 423

23.3 代表的な UVMクラス ......................................................................................... 427

23.3.1 トランザクション関連の UVMクラス ........................................................ 427

23.3.2 メソドロジークラス ..................................................................................... 428

23.4 VIRTUAL インターフェース .................................................................................... 428

23.5 UVMシミュレーション制御 .................................................................................. 429

Page 15: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

10

Copyright 2020 © Artgraphics. All rights reserved.

23.5.1 シミュレーションフェーズ .......................................................................... 429

23.5.2 シミュレーションフェーズと super.method () ........................................... 431

23.5.3 サブコンポーネント作成とシミュレーションフェーズ ............................... 432

23.5.4 コンポーネント階層の情報取得関数 ............................................................ 433

23.5.5 シミュレーションの進行 .............................................................................. 433 23.5.5.1 raise_objection()と drop_objection() .................................................................... 433 23.5.5.2 raise_objection()と drop_objection()の使用例 ...................................................... 434

23.5.6 run_test ........................................................................................................... 436 23.5.6.1 概要 ....................................................................................................................... 436 23.5.6.2 使用法 ................................................................................................................... 436 23.5.6.3 run_test()と$finish ............................................................................................... 438

23.6 UVMクラスライブラリーの基礎 ........................................................................... 440

23.6.1 uvm_objectと uvm_component ...................................................................... 440

23.6.2 コンストラクタ ............................................................................................ 440

23.6.3 フィールドマクロ ......................................................................................... 441 23.6.3.1 トランザクション.................................................................................................. 441 23.6.3.2 メソドロジークラス .............................................................................................. 442

23.6.4 ファクトリ ................................................................................................... 442

23.6.5 コンフィギュレーションの設定変更 ............................................................ 444

23.6.6 メッセージ機能 ............................................................................................ 446

23.6.7 UVMプリンター ............................................................................................. 447

23.7 検証要素の定義 ................................................................................................... 448

23.7.1 トランザクション ......................................................................................... 448

23.7.2 ドライバー ................................................................................................... 450 23.7.2.1 概要 ....................................................................................................................... 450 23.7.2.2 ドライバー記述法.................................................................................................. 451

23.7.3 シーケンス ................................................................................................... 452 23.7.3.1 概要 ....................................................................................................................... 452 23.7.3.2 シーケンスの定義手順 .......................................................................................... 452 23.7.3.3 body()タスク ......................................................................................................... 453 23.7.3.4 `uvm_doマクロと`uvm_do_withマクロ .............................................................. 453 23.7.3.5 raise_objection()と drop_objection() .................................................................... 453 23.7.3.6 pre_body()と post_body()...................................................................................... 454 23.7.3.7 シーケンス定義例.................................................................................................. 455

23.7.4 シーケンサー ................................................................................................ 458 23.7.4.1 シーケンサーの定義 .............................................................................................. 458 23.7.4.2 シーケンサーとドライバーの基本的なハンドシェーク ........................................ 459 23.7.4.3 シーケンスの開始.................................................................................................. 460

23.7.5 モニターとコレクター ................................................................................. 460 23.7.5.1 コレクターの定義.................................................................................................. 460 23.7.5.2 モニターの定義 ..................................................................................................... 461

23.7.6 エージェント ................................................................................................ 462

23.7.7 エンバイロンメント ..................................................................................... 463

23.7.8 テストベンチの作成 ..................................................................................... 465 23.7.8.1 トップレベルの Environmentの作成 ................................................................... 465 23.7.8.2 ベーステスト ......................................................................................................... 466 23.7.8.3 テスト ................................................................................................................... 466 23.7.8.4 テストの選択 ......................................................................................................... 467

23.8 UVMによる検証環境構築例 .................................................................................. 467

23.8.1 検証環境の概要 ............................................................................................ 467

23.8.2 pkg_definitions.svファイル ........................................................................... 469

23.8.3 alu_if ................................................................................................................ 469 23.8.4 alu_item .......................................................................................................... 469 23.8.5 alu_driver ........................................................................................................ 469 23.8.6 alu_sequencer ................................................................................................. 470

Page 16: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

11

Copyright 2020 © Artgraphics. All rights reserved.

23.8.7 alu_sequence_base.......................................................................................... 471 23.8.8 alu_test_seq1 .................................................................................................. 472 23.8.9 alu_test_seq2 .................................................................................................. 472 23.8.10 alu_collector ................................................................................................ 473 23.8.11 alu_monitor ................................................................................................. 474 23.8.12 alu_agent ..................................................................................................... 474 23.8.13 alu_env ........................................................................................................ 475 23.8.14 alu_test_base ............................................................................................... 476 23.8.15 alu_test1 ...................................................................................................... 476 23.8.16 alu_test2 ...................................................................................................... 477 23.8.17 dut ................................................................................................................ 477 23.8.18 top ................................................................................................................ 478 23.8.19 テストの実行 ................................................................................................ 478

23.8.19.1 +UVM_TESTNAME=alu_test1 ........................................................................... 478 23.8.19.2 +UVM_TESTNAME=alu_test2 ........................................................................... 479

24 コンパイラーダイレクティブ .................................................................................. 480

24.1 `INCLUDE文 ............................................................................................................. 480

24.2 `DEFINE文 ............................................................................................................... 480

24.2.1 定数を定義する場合 ..................................................................................... 480

24.2.2 接頭辞及び接尾辞を持つ名称の創成 ............................................................ 481

24.3 文字列内のパラメータ展開 ................................................................................. 482

24.4 ‘ENDIF文 .................................................................................................................. 482

24.5 `__FILE__、`__LINE__ .......................................................................................... 482

25 シミュレーション実行モデル .................................................................................. 485

25.1 スケジューリング領域 ......................................................................................... 485

25.2 #0ディレーの効果 .................................................................................................. 486

25.2.1 スケジューリングの調節 .............................................................................. 486

25.2.2 タイミングの調節 ......................................................................................... 487

26 DPI ........................................................................................................................ 489

26.1 概要 ...................................................................................................................... 489

26.2 IMPORTと EXPORT ................................................................................................... 490

26.2.1 import .............................................................................................................. 490 26.2.2 export ............................................................................................................... 492

26.3 C LAYER .................................................................................................................. 492 26.3.1 概要 .............................................................................................................. 492

26.3.2 4-state型 ......................................................................................................... 493

26.3.3 openアレイ ...................................................................................................... 495

27 補足 ........................................................................................................................ 496

27.1 SYSTEMVERILOG全般 ............................................................................................. 496

27.2 UVM全般 ............................................................................................................... 499

28 参考文献 ................................................................................................................. 502

Page 17: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

1

Copyright 2020 © Artgraphics. All rights reserved.

1 概要

この章では、SystemVerilog の持つ機能を概説し、本書の目的と構成を明らかにします。最初

に、SystemVerilog誕生の歴史を簡単に紹介する事から始めます。

1.1 SystemVerilogの歴史

SystemVerilogは、Verilog HDLを拡張した言語ですが、実際には、その他の多く言語から影響

を受けています。デザイン分野に於いては、SUPERLOG、及び C、検証分野に於いては、

SUPERLOG、VERA C、C++、VHDL、OVA、PSL等の影響を受けています。

SystemVerilog言語仕様の主要部分は SUPERLOGを基にして Accellera standard groupsにより開

発され、2002 年に SystemVerilog 3.0 としてリリースされました。SystemVerilog 3.0 は第三世

代の Verilog 言語として位置付けられています。第一世代は、良く知られている Verilog-1995

で、第二世代は Verilog-2001です(表 1-1)。

表 1-1 世代別言語仕様

言語の世代 言語

第一世代 Verilog-1995

第二世代 Verilog-2001

第三世代 SystemVerilog 3.0

SystemVerilog 3.0は、その後、Accellera による SystemVerilog 3.1、及び SystemVerilog 3.1a等

の改訂版を経て、2005年 11月に IEEE Std 1800-2005として正式に公開されました。これが初

版の SystemVerilog言語仕様です。

SystemVerilog言語仕様は数年に一度の改訂が行われており、IEEE Std 1800-2012が次に公開さ

れ、現在の SystemVerilog言語仕様は、2018年 2月 21に規格 IEEE Std 1800-2017として公開さ

れています。本書の解説は、最新仕様に準拠しています。年代的な言語の変遷を表 1-2 にま

とめました。

表 1-2 SystemVerilog言語仕様の変遷

年 言語

1995 Verilog-1995(IEEE Std 1364-1995)

2001 Verilog-2001(IEEE Std 1364-2001)

2002 SystemVerilog 3.0

2003 SystemVerilog 3.1

2004 SystemVerilog 3.1a

2005 IEEE Std 1800-2005

2012 IEEE Std 1800-2012

2018 IEEE Std 1800-2017

SystemVerilogに関する詳しい歴史に関しては、文献[7]を参照して下さい。

1.2 SystemVerilog概要

1.2.1 言語としての SystemVerilog

SystemVerilog はハードウェア設計、仕様、及び検証を統一的に記述する事ができる言語です

(図 1-1)。単なる検証言語ではありません。仕様記述機能はデザインと検証の橋渡しをする

役割を果たします。ここで、デザインとは仕様を基にして実装した内容を指します。

Page 18: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

2

Copyright 2020 © Artgraphics. All rights reserved.

図 1-1 SystemVerilogの機能範囲

アサーション、及びファンクショナルカバレッジは橋渡しの良い例です。アサーションは、

デザインの動作と仕様が一致する事を確認します。また、ファンクショナルカバレッジはテ

ストの中に仕様の情報を記録して、その情報がどれだけ検証で使用されたかを計測します。

全ての情報が正しく使用されていれば、検証が正しく進行した事になります。SystemVerilog

は上位互換性の意味に於いて Verilog HDL を包含しています(図 1-2)。従って、従来の

Verilogユーザは、そのまま SystemVerilogのツール環境で作業を進める事ができます。

図 1-2 SystemVerilogと Verilog HDLの関係

デザインを正確に、且つ効率良く検証をするために SystemVerilog には仕様を記述する機能が

備えられています。そして、検証時に必要となる様々なデータ構造を支援するために

SystemVerilog は豊富なデータタイプを備えています。更に、検証に必要なアサーション、フ

ァンクショナルカバレッジ、ランダムスティミュラス生成等の機能を SystemVerilog は標準的

に備えています。要約すると、SystemVerilog は設計、及び検証に必要な全ての基本的機能を

包含しています。

1.2.2 設計言語としての SystemVerilog

Verilog HDLと比較して多くの機能が SystemVerilogに追加されました。特に RTL記述をより

効率良く正確に行なうための機能が備えられています。具体的には、以下の様な機能が追加

デザイン 検証

SystemVerilog

ハードウェア仕様

Verilog

bit, byte,

shortint, int,

longint

logic

enum, struct,

union, class,

package,

program

interface,

modport,

clocking block

mailbox,

semaphore

assertions

functional

coverage

constrained

random value

generation

dynamic arrays,

associative arrays,

queues, multi-

dimensional

arrays

continue, break,

return, do-while,

foreach

fork-join_any,

fork-join_none

SystemVerilog

Page 19: 実践 SystemVerilog 入門...はじめに SystemVerilog の最新仕様は、2018 年2 月21 日に規格IEEE Std 1800-2017(以降、LRM と略称) として公開され、実質的にVerilog

実践 SystemVerilog入門

3

Copyright 2020 © Artgraphics. All rights reserved.

されています。

モジュール間、及びテストベンチと DUT間の通信を簡素化するための interface機能

メモリー使用量と実行効率に於いて優れた 2-state 型のデータタイプ(bit、byte、shortint、

int、longint等)

文字列型データタイプ(string)

値を戻さない void型 function

ユーザデータタイプを定義するための typedef

C/C++の様な structures及び unionsデータタイプ

enum型データタイプ

packageスコープ

便利な複合オペレータ(++、--、+=、&=、等)

論理合成可能性を促進する機能(always_comb、always_latch、always_ff、unique_if、

priority-if、unique-case、priority-case等)

プログラミング機能の強化(continue、break、return文等)

これらの拡張機能は短期間で高品質な RTL 設計を可能にします。但し、これらの拡張機能の

中には、RTL 論理合成可能ではない機能も含まれています。例えば、文字列型データタイプ

は、一般的には、論理合成可能ではありません。

1.2.3 検証言語としての SystemVerilog

Verilog HDLには検証機能は皆無であり、SystemVerilogには多くの検証機能、及び検証に必要

な機能が付け加わりました。具体的には、以下の様な機能が追加されています。

多次元アレイ

アレイタイプ(ダイナミックアレイ、associativeアレイ、キュー)

クラス(class)

インターフェース

パッケージ

テストベンチ機能(program)

プロセス間通信機能(mailbox、semaphore等)

プロセス制御機能(fork/join_any、fork/join_none)

クロック信号に同期する信号の管理(clocking block)

ランダムスティミュラス生成機能

ファンクショナルカバレッジ

アサーション

これらの拡張機能は検証作業の生産性を向上し、検証技術の蓄積に大きな役割を果たします。

特に、クラスは再利用可能な検証環境を構築するために必要不可欠な機能です。

1.3 本書の対象者と目的

本書は SystemVerilog の知識を持たない人を対象に書かれています。Verilog HDL に関する知

識は必要がありませんが、一般のプログラミング言語に関する知識を持っている事が必要で

す。特に、OOP に関する知識を持つ事は望ましいです。OOP に関する記述は多くの文献に見

当たるため、本書では OOPの解説を含んでいません。

本書は入門書ではありますが、SystemVerilog LRMの構成に沿い、できるだけ多くの重要な内

容を含む様に題材を選択してあります。従って、本書を読了後は設計、及び検証作業に必要

な一通りの知識を習得する事ができています。具体的には、以下の内容を包含しています。

設計に必要な SystemVerilogの基礎知識(Verilog HDLに対する拡張機能、enum、インタ

ーフェース、パッケージ等)

検証に必要な SystemVerilogの基礎知識(検証時に使用するクラス等の高度なデータタイ

プ、並列処理機能、プロセス間通信機能等)


Recommended