アクセスランキング

01位
数学のための英語教本―読むことから始めよう― 
02位
入門計量経済学
03位
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― 
04位
サーストン万華鏡―人と数学の未来を見つめて― 
05位
ジオダイナミクス 原著第3版
  • ニュースメール
  • アフターサービス
  • facebook

SystemVerilog入門―設計・仕様・検証のためのハードウェア記述言語― 

書籍情報
ISBN978-4-320-12463-9
判型B5 
ページ数446ページ
発売日2020年10月12日
本体価格6,600円
SystemVerilog入門 書影
SystemVerilog入門

新刊

 SystemVerilogの最新仕様は,2018年2月21日に規格IEEE Std 1800-2017(以降,LRMと略称)として公開され,実質的にSystemVerilogの時代が到来したと言えます。LRMは多くの研究者,技術者による長年の努力の賜物として完成された1300ページにも及ぶ大作です。一方,LRMは標準規格であるが故に,ハードウェアを設計・検証する技術者の誰もが一度は目を通さなければならない言語仕様書です。然し,その必要性にもかかわらず,LRMは容易に理解できる英文で記述されているとは言えません。
 本書は,誰もがLRMを誤解なく解釈する事ができる様に基礎知識を提供します。即ち,本書は,SystemVerilogの根幹を成す基本機能,及び難解と考えられる機能を重点的,且つ徹底的に解説し,SystemVerilogを実践に適用する際に必要とされる準備を完全に確立します。
 本書は,SystemVerilog全般に関する基礎知識とその応用としてのRTLデザインのモデリングと検証の仕方の解説を含んでいるので,初心者,設計者,及び検証技術者に適しています。特に,データタイプ,クラス,インターフェースクラス,インターフェース,クロッキングブロック,並列処理タイミング制御,プロセス間通信機能,ランダムスティミュラス生成等に関する解説が含まれているので,設計分野だけでなく検証分野に関する知識も習得する事ができる他に類のない資料です。

目次

第1章 概要
1.1 SystemVerilogの歴史
1.2 SystemVerilog概要
  1.2.1 言語としてのSystemVerilog
  1.2.2 設計言語としてのSystemVerilog
  1.2.3 検証言語としてのSystemVerilog
1.3 本書でのシンタックス記述法
1.4 SystemVerilog言語ルール
1.5 コンパイルとエラボレーション
1.6 宣言と定義
1.7 本書の対象者と目的
1.8 本書の構成
1.9 例題に関して
1.10 本書の記法

第2章 設計および検証のためのビルディングブロック
2.1 設計要素
2.2 モジュール
2.3 プログラム
2.4 インターフェース
2.5 チェッカー
2.6 パッケージ
2.7 ゲートとスイッチレベルのモデリング
2.8 primitive
2.9 configuration
2.10 コンパイルユニット
2.11 `timescaleコンパイラディレクティブ
2.12 ガーベッジコレクション
  2.12.1 automatic変数
  2.12.2 static変数

第3章 データタイプ
3.1 データタイプとデータオブジェクト
3.2 logic型
3.3 ネット型
3.4 変数
3.5 ネットと変数
3.6 4-state型
3.7 2-state型
3.8 integralデータタイプ
3.9 real,shortrealとrealtime
3.10 void型
3.11 chandle型
3.12 stringデータタイプ
3.13 イベントデータタイプ
3.14 typedef文
3.15 enumデータタイプ
3.16 定数
3.17 const定数
3.18 castオペレータ
3.19 $castダイナミック型変換
3.20 便利な初期値設定
  3.20.1 リテラルの拡張
  3.20.2 インデックス指定
3.21 リファレンスポインタ

第4章 メンバーで構成されるデータタイプ
4.1 ストラクチャ
  4.1.1 packedストラクチャ
  4.1.2 ストラクチャへの値の設定
4.2 ユニオン
  4.2.1 packedユニオン
  4.2.2 タグ付きユニオン
4.3 packedアレイとunpackedアレイ
  4.3.1 packedアレイ
  4.3.2 unpackedアレイ
  4.3.3 アレイの操作
  4.3.4 packedアレイのアクセス
4.4 ダイナミックアレイ
  4.4.1 ダイナミックアレイのメソッド
  4.4.2 アレイのコピー
4.5 associativeアレイ
  4.5.1 associativeアレイの概要
  4.5.2 associativeアレイの要素の登録
  4.5.3 associativeアレイのメソッド
  4.5.4 associativeアレイリテラル
4.6 キュー
  4.6.1 キューの概要
  4.6.2 キューの操作
  4.6.3 キューを操作するメソッド
4.7 アレイ情報取得ファンクション
4.8 アレイ操作メソッド
  4.8.1 アレイ検索メソッド
  4.8.2 アレイ要素の順序を操作するメソッド
  4.8.3 アレイを計算するメソッド
4.9 アレイの走査法

第5章 クラス
5.1 クラスの概要
5.2 シンタックス
5.3 クラスオブジェクト(クラスインスタンス)
5.4 クラスプロパティおよびメソッドへのアクセス
5.5 コンストラクタ
5.6 タイプ指定のコンストラクタ呼び出し
5.7 staticクラスプロパティ
5.8 staticクラスメソッド
5.9 thisハンドル
5.10 ハンドルのアレイ
5.11 クラスのコピー
5.12 クラス継承とサブクラス
5.13 $cast
5.14 constクラスプロパティ
5.15 virtualメソッド
5.16 アブストラクトクラスとpure virtualメソッド
5.17 クラススコープオペレータ
5.18 メンバーへのアクセス制限
5.19 メソッドをクラスの外に記述する方法
5.20 パラメータによる汎用クラスの定義
  5.20.1 概要
  5.20.2 パラメータによる汎用クラスの実装
  5.20.3 パラメータによる汎用クラスの開発手順
5.21 クラスのフォワード宣言
5.22 クラスのテストベンチへの応用
5.23 インターフェースクラス
  5.23.1 概要
  5.23.2 機能

第6章 プロセス
6.1 シミュレーションプロシージャ
  6.1.1 initialプロシージャ
  6.1.2 alwaysプロシージャ
  6.1.3 finalプロシージャ
6.2 ブロック文
  6.2.1 begin-endブロック
  6.2.2 fork-joinブロック
  6.2.3 ブロック名
  6.2.4 forkブロックの効果的利用
6.3 タイミングによる実行制御
  6.3.1 タイミングによる実行制御の概要
  6.3.2 ディレーによる制御
  6.3.3 エッジセンシティブイベント制御
  6.3.4 代入内タイミング制御
  6.3.5 レベルセンシティブイベント制御
  6.3.6 イベント制御と解除
6.4 プロセス制御
  6.4.1 wait文
  6.4.2 wait fork文
  6.4.3 disable fork文
  6.4.4 wait_order文
6.5 プロセスとRNG
6.6 ユーザ固有のプロセス制御

第7章 代入文
7.1 連続代入文
7.2 ビヘイビア代入文
  7.2.1 ブロッキング代入文
  7.2.2 ノンブロッキング代入文
7.3 パターン指定による代入

第8章 オペレータと式
8.1 オペレータ
  8.1.1 代入オペレータ
  8.1.2 インクリメントおよびデクリメントオペレータ
  8.1.3 算術オペレータ
  8.1.4 比較オペレータ
  8.1.5 ワイルドカード比較オペレータ
  8.1.6 論理オペレータ
  8.1.7 bitwiseオペレータ
  8.1.8 計算オペレータ
  8.1.9 シフトオペレータ
  8.1.10 conditionalオペレータ
  8.1.11 結合オペレータ
  8.1.12 insideオペレータ
  8.1.13 ビットストリームオペレータ
8.2 オペランド
  8.2.1 パートセレクト
  8.2.2 unpackedアレイ
8.3 タグ付きメンバーの操作

第9章 実行文
9.1 if文
  9.1.1 全ての条件を列挙
  9.1.2 unique-if文とunique0-if文
  9.1.3 priority-if文
9.2 case文
  9.2.1 unique-case文とunique0-case文
  9.2.2 priority-case文
  9.2.3 casezとcasex
9.3 insideオペレータとif文およびcase文
  9.3.1 if文とinsideオペレータ
  9.3.2 case文とinsideオペレータ
9.4 ループ文
  9.4.1 for文
  9.4.2 repeat文
  9.4.3 foreach文
  9.4.4 while文
  9.4.5 do-while文
  9.4.6 forever文
9.5 return文
9.6 break文
9.7 continue文

第10章 タスクとファンクション
10.1 タスク
  10.1.1 ポートリスト
  10.1.2 タスク内の記述
10.2 ファンクション
  10.2.1 ファンクションの制限
  10.2.2 ポートリスト
  10.2.3 ファンクション内の記述
10.3 引数に標準値を指定する方法
10.4 値を戻すファンクションの使用
10.5 再帰呼び出し
10.6 クラスのメソッドと再帰呼び出し
10.7 メソッド内での変数の初期化
10.8 引数としてのアレイ
10.9 インポートとエクスポート

第11章 クロッキングブロック
11.1 最も簡単なクロッキングブロック
11.2 クロッキングスキュー
11.3 クロッキングイベントとObserved領域
11.4 サイクルディレー

第12章 プロセス間の同期と交信
12.1 セマフォ
12.2 メールボックス
12.3 パラメータ化したメールボックス
12.4 名称付きイベント
  12.4.1 概要
  12.4.2 triggeredメソッド
  12.4.3 引数としてのイベントオブジェクト
  12.4.4 イベント資源の解放
  12.4.5 イベントの比較
  12.4.6 イベントの別名

第13章 チェッカー
13.1 概要
13.2 チェッカーインスタンス
13.3 自由変数
13.4 DUT出力のサンプリング

第14章 プログラム
14.1 シンタックス
14.2 プログラムの特徴
14.3 プログラムの制御
14.4 シミュレーションの終了

第15章 インターフェース
15.1 シンタックス
15.2 インターフェースの機能概要
15.3 ジェネリックインターフェースによる接続
15.4 modport
15.5 パラメータ化したインターフェース
15.6 virtualインターフェース

第16章 パッケージ
16.1 シンタックス
16.2 パッケージの定義法
16.3 パッケージの使用法
16.4 stdパッケージ

第17章 モジュール
17.1 概要
17.2 モジュールの定義
17.3 ポートリスト
  17.3.1 VerilogスタイルとSystemVerilogスタイル
  17.3.2 ポートの方向に関するルール
17.4 パラメータ化したモジュール
17.5 トップレベルモジュール
17.6 モジュールインスタンス
17.7 インターフェースを使用するモジュール記述
17.8 未定義モジュールの宣言
17.9 階層名称

第18章 システムタスクとシステムファンクション
18.1 $displayおよび$writeタスク
18.2 $sformatタスクと$sformatfファンクション
18.3 モニタリング
18.4 シミュレーション時間取得ファンクション
18.5 $printtimescale
18.6 値の変換
18.7 情報取得ファンクション
18.8 ビットvectorシステムファンクション
18.9 サンプル値を参照するためのファンクション
18.10 エラー処理タスク
18.11 確率分布ファンクション
18.12 シミュレーション制御
18.13 その他のシステムタスクおよびシステムファンクション
18.14 コマンドラインの操作
18.15 VCDファイル
  18.15.1 VCDファイルの指定
  18.15.2 VCDファイルへの記録
  18.15.3 VCDファイルへの記録の一時的停止と再開
  18.15.4 VCDファイル作成例

第19章 制約によるランダムスティミュラスの生成
19.1 概要
19.2 ランダム変数
  19.2.1 ランダム変数の概要
  19.2.2 rand修飾子
  19.2.3 randc修飾子
  19.2.4 ランダム変数定義例
19.3 乱数発生メソッド
19.4 制約
  19.4.1 insideオペレータ
  19.4.2 distオペレータ
  19.4.3 uniqueオペレータ
  19.4.4 implicationオペレータ
  19.4.5 foreach制約
  19.4.6 乱数決定順序
19.5 実行時に制約を定義する方法
19.6 ランダム変数の制御
19.7 制約の制御
19.8 randomize()メソッドによるランダム変数の制御
19.9 条件の否定
19.10 ストラクチャ
19.11 キューに乱数を発生
19.12 チェッカーとしての制約
19.13 制約をテストケースごとに指定する方法
19.14 制約をクラス外部に定義する方法
19.15 std::randomize()ファンクション
19.16 システムファンクション

第20章 SystemVerilogの検証機能
20.1 ファンクショナルカバレッジ
  20.1.1 概要
  20.1.2 カバレッジ計算
  20.1.3 カバレッジ計算例
20.2 アサーション
  20.2.1 概要
  20.2.2 アサーションの種類
  20.2.3 アサーションの式
  20.2.4 アサーション記述例

第21章 モデリングと検証
21.1 組み合わせ回路
  21.1.1 組み合わせ回路の記述ルール
  21.1.2 組み合わせ回路を検証するタイミング
  21.1.3 デコーダ
  21.1.4 エンコーダ
  21.1.5 ALU
  21.1.6 コンパレータ
  21.1.7 Grayコードをバイナリーコードに変換する回路
  21.1.8 バレルシフタ
  21.1.9 符号付き整数の加減算
21.2 シーケンシャル回路
  21.2.1 シーケンシャル回路の記述ルール
  21.2.2 シーケンシャル回路の検証
  21.2.3 バイナリーカウンター
  21.2.4 JK-フリップフロップ
  21.2.5 Johnsonカウンター
  21.2.6 ユニバーサルシフトレジスタ
  21.2.7 Grayカウンター
  21.2.8 リングカウンター
  21.2.9 Gated clockの記述例
21.3 FSM
  21.3.1 概要
  21.3.2 Moore FSMモデリング
  21.3.3 Mealy FSMモデリング
21.4 FSMとビットシーケンスの認識
  21.4.1 ビットシーケンス認識問題
  21.4.2 Moore FSMモデリング
  21.4.3 Mealy FSMモデリング

第22章 UVM概説
22.1 UVMとは何か
22.2 検証技術のトレンドとUVM
22.3 UVMの検証要素
  22.3.1 トランザクションとシナリオに関連するUVMクラス
  22.3.2 メソドロジークラス
22.4 TLM
22.5 UVMシミュレーション
  22.5.1 シミュレーションフェーズ
  22.5.2 run_test()メソッド
22.6 UVM検証コンポーネントの開発
22.7 トップモジュール

第23章 コンパイラディレクティブ
23.1 `include文
23.2 `define文
  23.2.1 定数を定義する場合
  23.2.2 接頭辞および接尾辞を持つ名称の創成
23.3 文字列内のパラメータ展開
23.4 `endif文
23.5 `__FILE__と`__LINE__

第24章 シミュレーション実行モデル
24.1 スケジューリング領域
24.2 #0ディレーの効果

参考文献
索  引