相關主題
商品描述
《SystemVerilog入門指南》是一本全面介紹SystemVerilog基礎知識,並使每位讀者都可以毫無誤解地理解SystemVerilog的入門讀物。本書通過大量淺顯易懂的示例,透徹講解了SystemVerilog的基本功能,並對難以理解、容易混淆的功能進行了詳細介紹,為讀者進行SystemVerilog實踐提供全面的知識準備。
《SystemVerilog入門指南》由24章構成,全面、詳細介紹了SystemVerilog語言。在概述SystemVerilog的概況和發展歷史的基礎上,分別介紹了用於設計和驗證的構建塊,數據類型,類,進程,賦值語句,運算符和表達式,執行語句,任務和函數,時鐘塊,進程同步和通信,檢查器,程序,接口,包,模塊,系統任務和系統函數,基於約束的隨機激勵生成,SystemVerilog的驗證功能,硬件建模和驗證,UVM,編譯器預處理指令,仿真執行模型。
《SystemVerilog入門指南》可作為廣大從事硬件設計、驗證的技術人員,特別是正在入門的初學人員的學習教材和技術參考書,也可作為高校集成電路、電子技術、計算機等專業的課程教材。
目錄大綱
譯者序
原書前言
本書使用的縮略語一覽表
第1章 概述1
1.1 SystemVerilog的歷史1
1.2 SystemVerilog概述2
1.2.1 作為語言的SystemVerilog 2
1.2.2 作為設計語言的SystemVerilog 3
1.2.3 作為驗證語言的SystemVerilog 3
1.3 本書的語法描述4
1.4 SystemVerilog的語法規則5
1.5 編譯和細化6
1.6 聲明和定義6
1.7 本書的對象和目的7
1.8 本書的結構8
1.9 關於示例9
1.10 本書的標記法9
第2章 用於設計和驗證的構建塊12
2.1 設計要素12
2.2 模塊12
2.3 程序14
2.4 接口15
2.5 檢查器16
2.6 包17
2.7 門級和開關級建模18
2.8 基本元件19
2.9 配置20
2.10 編譯單元20
2.11 `timescale編譯器指令21
2.12 垃圾回收22
2.12.1 automatic變量23
2.12.2 static變量23
第3章 數據類型24
3.1 數據類型和數據對象24
3.2 logic類型25
3.3 線網(net)類型26
3.4 變量28
3.5 線網和變量30
3.6 4-state 類型31
3.7 2-state類型32
3.8 integral類型33
3.9 real、shortreal和realtime類型34
3.10 void 類型34
3.11 chandle 類型35
3.12 string類型35
3.13 event類型37
3.14 typedef語句39
3.15 enum類型40
3.16 常量43
3.17 const常量47
3.18 cast操作符47
3.19 $cast動態類型轉換48
3.20 便利的初始值設置49
3.20.1 位值擴展49
3.20.2 通過位號的設定51
3.21 引用指針51
第4章 由多個元素組成的數據類型53
4.1 結構體53
4.1.1 緊湊結構體55
4.1.2 結構體的賦值56
4.2 共用體57
4.2.1 緊湊共用體58
4.2.2 標記共用體59
4.3 緊湊數組和非緊湊數組60
4.3.1 緊湊數組61
4.3.2 非緊湊數組61
4.3.3 數組的引用62
4.3.4 緊湊數組的引用64
4.4 動態數組64
4.4.1 適用於動態數組的方法65
4.4.2 數組的覆制67
4.5 關聯數組69
4.5.1 關聯數組概述69
4.5.2 關聯數組數據元素的添加及更新70
4.5.3 適用於關聯數組的方法71
4.5.4 關聯數組實量71
4.6 隊列73
4.6.1 隊列概述73
4.6.2 隊列的操作74
4.6.3 適用於隊列的方法75
4.7 數組信息獲取函數76
4.8 數組操作方法77
4.8.1 數組搜索方法77
4.8.2 數組數據元素的排序方法79
4.8.3 數組計算方法81
4.9 數組掃描方法82
第5章 類84
5.1 類的概述84
5.2 類的語法85
5.3 類對象(類實例)88
5.4 類屬性和方法的訪問88
5.5 構造函數89
5.6 指定類型的構造函數調用90
5.7 static類屬性90
5.8 static類方法92
5.9 this句柄93
5.10 句柄數組93
5.11 類的覆制95
5.12 類繼承和子類97
5.13 $cast101
5.14 const類屬性102
5.15 virtual方法103
5.16 抽象類和pure virtual方法105
5.17 類作用域運算符107
5.18 類成員的訪問控制109
5.19 如何在類外編寫方法110
5.20 通過參數進行的通用類定義111
5.20.1 概述111
5.20.2 通過參數進行的通用類實現111
5.20.3 使用參數實現通用類的步驟113
5.21 類的前向聲明115
5.22 將類應用於測試平臺115
5.23 接口類117
5.23.1 概述117
5.23.2 功能118
第6章 進程121
6.1 仿真過程121
6.1.1 initial過程122
6.1.2 always過程123
6.1.3 final過程128
6.2 語句塊129
6.2.1 begin-end語句塊129
6.2.2 fork-join語句塊129
6.2.3 語句塊命名134
6.2.4 fork語句塊的有效利用135
6.3 基於定時的執行控制136
6.3.1 基於定時的執行控制概述136
6.3.2 延時控制137
6.3.3 邊緣敏感事件控制137
6.3.4 賦值定時控制139
6.3.5 事件等待控制141
6.3.6 事件控制和解除141
6.4 進程控制143
6.4.1 wait語句143
6.4.2 wait fork語句143
6.4.3 disable fork語句144
6.4.4 wait_order語句145
6.5 進程和RNG147
6.6 特定的用戶進程控制148
第7章 賦值語句152
7.1 連續賦值語句153
7.2 行為賦值語句154
7.2.1 阻塞賦值語句155
7.2.2 非阻塞賦值語句156
7.3 模式賦值158
第8章 運算符和表達式160
8.1 運算符160
8.1.1 賦值運算符162
8.1.2 自增和自減運算符162
8.1.3 算術運算符163
8.1.4 比較運算符164
8.1.5 通配符比較運算符166
8.1.6 邏輯運算符167
8.1.7 位運算符168
8.1.8 單變量邏輯運算符168
8.1.9 移位運算符169
8.1.10 條件運算符170
8.1.11 拼接運算符171
8.1.12 inside運算符172
8.1.13 比特流運算符173
8.2 操作數177
8.2.1 部分選擇177
8.2.2 非緊湊數組178
8.3 帶標記成員的操作178
第9章 執行語句180
9.1 if語句180
9.1.1 所有條件的列舉180
9.1.2 unique-if語句和unique0-if語句181
9.1.3 priority-if語句182
9.2 case語句182
9.2.1 unique-case語句和unique0-case語句184
9.2.2 priority-case語句185
9.2.3 casez和casex185
9.3 inside運算符與if語句及case語句186
9.3.1 if語句和inside運算符186
9.3.2 case語句和inside運算符187
9.4 循環語句188
9.4.1 for語句189
9.4.2 repeat語句190
9.4.3 foreach語句191
9.4.4 while語句194
9.4.5 do-while語句194
9.4.6 forever語句195
9.5 return語句195
9.6 break語句196
9.7 continue語句197
第10章 任務和函數199
10.1 任務199
10.1.1 端口信號列表199
10.1.2 任務內的描述200
10.2 函數200
10.2.1 函數的限制201
10.2.2 端口信號列表201
10.2.3 函數內的描述202
10.3 參數默認值的設置方法202
10.4 具有返回值函數的調用204
10.5 遞歸調用204
10.6 類方法和遞歸調用205
10.7 方法內的變量初始化206
10.8 作為參數的數組208
10.9 導入和導出209
第11章 時鐘塊212
11.1 最簡單的時鐘塊212
11.2 時鐘塊的偏移213
11.3 時鐘事件和Observed區域215
11.4 周期延時217
第12章 進程同步和通信220
12.1 旗語220
12.2 信箱223
12.3 參數化信箱227
12.4 命名事件227
12.4.1 概述227
12.4.2 triggered方法230
12.4.3 作為參數的事件對象232
12.4.4 事件資源的釋放233
12.4.5 比較事件233
12.4.6 事件的別名233
第13章 檢查器235
13.1 概述235
13.2 檢查器的實例化236
13.3 檢查器中的隨機變量238
13.4 DUT輸出采樣239
第14章 程序242
14.1 語法242
14.2 程序的特點243
14.3 程序控制245
14.4 仿真結束246
第15章 接口248
15.1 語法248
15.2 接口功能概述249
15.3 基於通用接口的連接251
15.4 modport251
15.5 參數化接口252
15.6 虛接口253
第16章 包258
16.1 語法258
16.2 包的定義259
16.3 包的使用260
16.4 std包263
第17章 模塊267
17.1 概述267
17.2 模塊的定義268
17.3 端口信號列表271
17.3.1 Verilog風格和SystemVerilog風格271
17.3.2 關於端口信號方向的規則272
17.4 參數化模塊273
17.5 top模塊275
17.6 模塊實例275
17.7 使用接口的模塊描述275
17.8 未定義模塊的聲明277
17.9 層次結構名稱279
第18章 系統任務和系統函數281
18.1 $display和$write任務281
18.2 $sformat任務和$sformatf函數283
18.3 $monitor284
18.4 仿真時間獲取函數285
18.5 $printtimescale286
18.6 數值轉換287
18.7 信息獲取函數287
18.8 vector系統函數290
18.9 用於序列采樣值獲取的系統函數291
18.10 錯誤處理系統任務293
18.11 隨機化系統函數294
18.12 仿真控制295
18.13 其他系統任務和函數295
18.14 命令行參數296
18.15 VCD文件298
18.15.1 VCD文件的指定298
18.15.2 VCD文件的記錄298
18.15.3 VCD文件記錄的暫停和恢覆299
18.15.4 VCD文件創建示例299
第19章 基於約束的隨機激勵生成302
19.1 概述302
19.2 隨機變量304
19.2.1 隨機變量概述304
19.2.2 關鍵字rand305
19.2.3 關鍵字randc305
19.2.4 隨機變量定義示例305
19.3 隨機數生成函數306
19.4 約束條件308
19.4.1 關鍵字inside308
19.4.2 關鍵字dist311
19.4.3 關鍵字unique313
19.4.4 關鍵字implication314
19.4.5 運用foreach語句進行的約束315
19.4.6 隨機變量生成順序的約束317
19.5 測試過程中的約束定義318
19.6 隨機變量的啟用和禁用319
19.7 約束的啟用和禁用321
19.8 使用randomize()方法進行的隨機變量控制322
19.9 否定形式的約束條件描述324
19.10 結構體的隨機化325
19.11 隊列的隨機化327
19.12 以約束對數據進行的檢查328
19.13 測試用例約束的單獨指定330
19.14 在類外部進行的約束定義332
19.15 std::randomize()函數333
19.16 系統函數334
第20章 SystemVerilog的驗證功能336
20.1 功能覆蓋率336
20.1.1 概述336
20.1.2 功能覆蓋率計算337
20.1.3 功能覆蓋率計算示例338
20.2 斷言343
20.2.1 概述343
20.2.2 斷言的類型344
20.2.3 斷言表達式345
20.2.4 斷言描述示例346
第21章 硬件建模和驗證350
21.1 組合邏輯電路351
21.1.1 組合邏輯電路的描述規則351
21.1.2 驗證組合邏輯電路的時機352
21.1.3 譯碼器353
21.1.4 編碼器355
21.1.5 ALU357
21.1.6 比較器359
21.1.7 將格雷碼轉換為二進制碼的電路360
21.1.8 筒式移位器(循環移位器)362
21.1.9 帶符號整數的加減運算器364
21.2 時序邏輯電路366
21.2.1 時序邏輯電路描述規則367
21.2.2 時序邏輯電路的驗證367
21.2.3 二進制計數器369
21.2.4 JK觸發器370
21.2.5 Johnson計數器372
21.2.6 通用移位寄存器374
21.2.7 格雷計數器377
21.2.8 環形計數器379
21.2.9 門控時鐘的描述示例380
21.3 FSM383
21.3.1 概述383
21.3.2 Moore型FSM電路的建模384
21.3.3 Mealy型FSM電路的建模387
21.4 采用FSM電路的比特序列模式識別390
21.4.1 比特序列模式識別問題390
21.4.2 Moore型FSM電路的建模391
21.4.3 Mealy型FSM電路的建模393
第22章 UVM概述395
22.1 什麼是UVM395
22.2 驗證技術的發展趨勢與UVM395
22.3 UVM的驗證要素397
22.3.1 與事務和方案描述相關的UVM類397
22.3.2 方法類397
22.4 TLM398
22.5 UVM仿真399
22.5.1 仿真階段399
22.5.2 run_test()方法400
22.6 UVM驗證組件的開發400
22.7 top模塊401
第23章 編譯器預處理指令403
23.1 `include語句403
23.2 `define語句404
23.2.1 常量的定義404
23.2.2 具有前綴和後綴的名稱創建405
23.3 字符串中的參數展開406
23.4 `endif語句407
23.5 `_ _FILE_ _與`_ _LINE_ _的使用示例407
第24章 仿真執行模型409
24.1 調度區域409
24.2 #0延時效應411
參考文獻413