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

個数:1
紙書籍版価格
¥7,260
  • 電子書籍
  • ポイントキャンペーン

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

  • 著者名:篠塚一也
  • 価格 ¥7,260(本体¥6,600)
  • 共立出版(2022/03発売)
  • 5/5はこどもの日!Kinoppy 電子書籍・電子洋書 全点ポイント30倍キャンペーン(~5/6)
  • ポイント 1,980pt (実際に付与されるポイントはご注文内容確認画面でご確認下さい)
  • ISBN:9784320124639

ファイル: /

内容説明

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ディレーの効果
参考文献
索  引

感想・レビュー

※以下の感想・レビューは、株式会社ブックウォーカーの提供する「読書メーター」によるものです。

Q

0
FPGAなどを設計するSystem Verilogという新しい言語のリファレンス本。GitHubにあるpicorv32というソフトコアCPUでこの言語の機能を一部使っているので気になって手に取った。本書はこの言語のチュートリアルではなくあくまで文法毎のリファレンスなので自分のような初学者は他者が書いたコードで理解できない点があったら参照するような使い方が良いだろう。assumeのような検証の文法の実例が不足しているように感じられた。またforkなどが実際どうFPGAにマップされるのかイメージしずらかった。2021/02/11

外部のウェブサイトに移動します

よろしければ下記URLをクリックしてください。

https://bookmeter.com/books/16584815
  • ご注意事項