UVM 實戰

張強 編著

  • 出版商: 機械工業
  • 出版日期: 2014-08-01
  • 售價: $474
  • 貴賓價: 9.5$450
  • 語言: 簡體中文
  • 頁數: 368
  • 裝訂: 平裝
  • ISBN: 7111470192
  • ISBN-13: 9787111470199
  • 銷售排行: 👍 2022 年度 簡體中文書 銷售排行 第 9 名
    🥈 2022/11 簡體中文書 銷售排行 第 2 名
    🥈 2022/10 簡體中文書 銷售排行 第 2 名
    🥈 2022/9 簡體中文書 銷售排行 第 2 名

    立即出貨

買這商品的人也買了...

商品描述

本書主要介紹UVM的使用。全書詳盡介紹了UVM的factory機制、sequence機制、phase機制、objection機制及寄存器模型等的使用。此外,本書還試圖引導讀者思考UVM為什麽要引入這些機制,從而使讀者知其然,更知其所以然。
本書以一個完整的示例開篇,使得讀者一開始就對如何使用UVM搭建驗證平臺有總體的概念。本書提供大量示例代碼,這些代碼都經過實際的運行。全書內容力求簡單易懂,盡量將UVM中的概念與讀者已有的概念聯系起來。在第11章還專門介紹了OVM與UVM的區別,為那些從OVM遷移到UVM的用戶提供很大幫助。
本書主要面向UVM的初學者及想對UVM追根尋底的中級用戶。針對沒有面向對象編程基礎的用戶,本書在附錄中簡要介紹了面向對象的概念及SystemVerilog中區別於其他編程語言的一些特殊語法。

作者簡介

張強,資深驗證工程師,畢業於浙江大學超大規模集成電路研究所,研究方向為模擬及數模混合集成電路,主要從事模擬電源管理芯片、運算放大器及應用於高性能CPU的SRAM的研究與設計,持有兩個與SRAM相關的專利。
畢業後一直從事數字集成電路的設計和驗證工作,曾經參與過高速智能列車數據採集及通信系統、高性能智能投影儀芯片的研究與開發。
目前主要從事手機等消費電子低功耗圖形顯示芯片的研究。
2011年年底,在熟讀UVM源代碼的情況下,在網上發布了《UVM1.1應用指南及源代碼解析》,深受讀者肯定。

目錄大綱

前言
第1章 與UVM的第一次接觸1
1.1 UVM是什麽1
1.1.1 驗證在現代IC流程中的位置1
1.1.2 驗證的語言2
1.1.3 何謂方法學3
1.1.4 為什麽是UVM4
1.1.5 UVM的發展史5
1.2 學了UVM之後能做什麽6
1.2.1 驗證工程師6
1.2.2 設計工程師6
第2章 一個簡單的UVM驗證平臺7
2.1 驗證平臺的組成7
2.2 只有driver的驗證平臺8
*2.2.1 最簡單的驗證平臺8
*2.2.2 加入factory機制13
*2.2.3 加入objection機制14
*2.2.4 加入virtual interface16
2.3 為驗證平臺加入各個組件20
*2.3.1 加入transaction20
*2.3.2 加入env23
*2.3.3 加入monitor25
*2.3.4 封裝成agent28
*2.3.5 加入reference model32
*2.3.6 加入scoreboard36
*2.3.7 加入field_automation機制38
2.4 UVM的終極大作:sequence41
*2.4.1 在驗證平臺中加入sequencer41
*2.4.2 sequence機制44
*2.4.3 default_sequence 的使用48
2.5 建造測試用例50
*2.5.1 加入base_test50
*2.5.2 UVM中測試用例的啟動52
第3章 UVM基礎56
3.1 uvm_component與uvm_object56
3.1.1 uvm_component派生自uvm_object56
3.1.2 常用的派生自uvm_object的類57
3.1.3 常用的派生自uvm_component的類58
3.1.4 與uvm_object相關的宏61
3.1.5 與uvm_component相關的宏62
3.1.6 uvm_component的限制62
3.1.7 uvm_component與uvm_object的二元結構63
3.2 UVM的樹形結構64
3.2.1 uvm_component中的parent參數64
3.2.2 UVM樹的根66
3.2.3 層次結構相關函數67
3.3 field automation機制69
3.3.1 field automation機制相關的宏69
3.3.2 field automation機制的常用函數71
*3.3.3 field automation機制中標志位的使用72
*3.3.4 field automation中宏與if的結合74
3.4 UVM中打印信息的控制76
*3.4.1 設置打印信息的冗餘度閾值76
*3.4.2 重載打印信息的嚴重性78
*3.4.3 UVM_ERROR到達一定數量結束模擬79
*3.4.4 設置計數的目標80
*3.4.5 UVM的斷點功能81
*3.4.6 將輸出信息導入文件中82
*3.4.7 控制打印信息的行為84
3.5 config_db機制85
3.5.1 UVM中的路徑85
3.5.2 set與get函數的參數87
*3.5.3 省略get語句88
*3.5.4 跨層次的多重設置89
*3.5.5 同一層次的多重設置91
*3.5.6 非直線的設置與獲取93
*3.5.7 config_db機制對通配符的支持94
*3.5.8 check_config_usage95
3.5.9 set_config與get_config97
3.5.10 config_db的調試98
第4章 UVM中的TLM1.0通信100
4.1 TLM1.0100
4.1.1 驗證平臺內部的通信100
4.1.2 TLM的定義102
4.1.3 UVM中的PORT與EXPORT102
4.2 UVM中各種埠的互連104
*4.2.1 PORT與EXPORT的連接104
*4.2.2 UVM中的IMP106
*4.2.3 PORT與IMP的連接109
*4.2.4 EXPORT與IMP的連接111
*4.2.5 PORT與PORT的連接111
*4.2.6 EXPORT與EXPORT的連接113
*4.2.7 blocking_get埠的使用114
*4.2.8 blocking_transport埠的使用116
4.2.9 nonblocking埠的使用117
4.3 UVM中的通信方式119
*4.3.1 UVM中的analysis埠119
*4.3.2 一個component內有多個IMP121
*4.3.3 使用FIFO通信124
4.3.4 FIFO上的埠及調試126
*4.3.5 用FIFO還是用IMP128
第5章 UVM驗證平臺的運行132
5.1 phase機制132
*5.1.1 task phase與function phase132
5.1.2 動態運行phase134
*5.1.3 phase的執行順序134
*5.1.4 UVM樹的遍歷139
5.1.5 super.phase的內容140
*5.1.6 build階段出現UVM_ERROR停止模擬141
*5.1.7 phase的跳轉142
5.1.8 phase機制的必要性146
5.1.9 phase的調試147
5.1.10 超時退出147
5.2 objection機制148
*5.2.1 objection與task phase148
*5.2.2 參數phase的必要性152
5.2.3 控制objection的最佳選擇152
5.2.4 set_drain_time的使用154
*5.2.5 objection的調試156
5.3 domain的應用158
5.3.1 domain簡介158
*5.3.2 多domain的例子158
*5.3.3 多domain中phase的跳轉161
第6章 UVM中的sequence163
6.1 sequence基礎163
6.1.1 從driver中剝離激勵產生功能163
*6.1.2 sequence的啟動與執行165
6.2 sequence的仲裁機制166
*6.2.1 在同一sequencer上啟動多個sequence166
*6.2.2 sequencer的lock操作170
*6.2.3 sequencer的grab操作172
6.2.4 sequence的有效性172
6.3 sequence相關宏及其實現175
6.3.1 uvm_do系列宏175
*6.3.2 uvm_create與uvm_send176
*6.3.3 uvm_rand_send系列宏178
*6.3.4 start_item與finish_item178
*6.3.5 pre_do、mid_do與post_do180
6.4 sequence進階應用181
*6.4.1 嵌套的sequence181
*6.4.2 在sequence中使用rand類型變量183
*6.4.3 transaction類型的匹配185
*6.4.4 p_sequencer的使用186
*6.4.5 sequence的派生與繼承189
6.5 virtual sequence的使用190
*6.5.1 帶雙路輸入輸出埠的DUT190
*6.5.2 sequence之間的簡單同步191
*6.5.3 sequence之間的復雜同步192
6.5.4 僅在virtual sequence中控制objection197
*6.5.5 在sequence中慎用fork join_none198
6.6 在sequence中使用config_db200
*6.6.1 在sequence中獲取參數200
*6.6.2 在sequence中設置參數201
*6.6.3 wait_modified的使用203
6.7 response的使用204
*6.7.1 put_response與get_response204
6.7.2 response的數量問題205
*6.7.3 response handler與另類的response206
*6.7.4 rsp與req類型不同208
6.8 sequence library209
6.8.1 隨機選擇sequence209
6.8.2 控制選擇算法211
6.8.3 控制執行次數213
6.8.4 使用sequence_library_cfg214
第7章 UVM中的寄存器模型216
7.1 寄存器模型簡介216
*7.1.1 帶寄存器配置總線的DUT216
7.1.2 需要寄存器模型才能做的事情218
7.1.3 寄存器模型中的基本概念220
7.2 簡單的寄存器模型221
*7.2.1 只有一個寄存器的寄存器模型221
*7.2.2 將寄存器模型集成到驗證平臺中224
*7.2.3 在驗證平臺中使用寄存器模型227
7.3 後門訪問與前門訪問229
*7.3.1 UVM中前門訪問的實現229
7.3.2 後門訪問操作的定義231
*7.3.3 使用interface進行後門訪問操作233
7.3.4 UVM中後門訪問操作的實現:DPI+VPI233
*7.3.5 UVM中後門訪問操作接口235
7.4 復雜的寄存器模型237
*7.4.1 層次化的寄存器模型237
*7.4.2 reg_file的作用239
*7.4.3 多個域的寄存器241
*7.4.4 多個地址的寄存器242
*7.4.5 加入存儲器244
7.5 寄存器模型對DUT的模擬246
7.5.1 期望值與鏡像值246
7.5.2 常用操作及其對期望值和鏡像值的影響247
7.6 寄存器模型中一些內建的sequence248
*7.6.1 檢查後門訪問中hdl路徑的sequence248
*7.6.2 檢查默認值的sequence249
*7.6.3 檢查讀寫功能的sequence250
7.7 寄存器模型的高級用法251
*7.7.1 使用reg_predictor251
*7.7.2 使用UVM_PREDICT_DIRECT功能與mirror操作253
*7.7.3 寄存器模型的隨機化與update255
7.7.4 擴展位寬257
7.8 寄存器模型的其他常用函數257
7.8.1 get_root_blocks257
7.8.2 get_reg_by_offset函數258
第8章 UVM中的factory機制260
8.1 SystemVerilog對重載的支持260
*8.1.1 任務與函數的重載260
*8.1.2 約束的重載261
8.2 使用factory機制進行重載264
*8.2.1 factory機制式的重載264
*8.2.2 重載的方式及種類268
*8.2.3 復雜的重載271
*8.2.4 factory機制的調試273
8.3 常用的重載275
*8.3.1 重載transaction275
*8.3.2 重載sequence277
*8.3.3 重載component278
8.3.4 重載driver以實現所有的測試用例279
8.4 factory機制的實現280
8.4.1 創建一個類的實例的方法280
*8.4.2 根據字符串來創建一個類281
8.4.3 用factory機制創建實例的接口282
8.4.4 factory機制的本質284
第9章 UVM中代碼的可重用性285
9.1 callback機制285
9.1.1 廣義的callback函數285
9.1.2 callback機制的必要性286
9.1.3 UVM中callback機制的原理287
*9.1.4 callback機制的使用288
*9.1.5 子類繼承父類的callback機制291
9.1.6 使用callback函數/任務來實現所有的測試用例292
9.1.7 callback機制、sequence機制和factory機制293
9.2 功能的模塊化:小而美294
9.2.1 Linux的設計哲學:小而美294
9.2.2 小而美與factory機制的重載294
9.2.3 放棄建造強大sequence的想法295
9.3 參數化的類297
9.3.1 參數化類的必要性297
*9.3.2 UVM對參數化類的支持298
9.4 模塊級到芯片級的代碼重用299
*9.4.1 基於env的重用299
*9.4.2 寄存器模型的重用302
9.4.3 virtual sequence與virtual sequencer305
第10章 UVM高級應用308
10.1 interface308
10.1.1 interface實現driver的部分功能308
*10.1.2 可變時鐘311
10.2 layer sequence315
*10.2.1 復雜sequence的簡單化315
*10.2.2 layer sequence的示例318
*10.2.3 layer sequence與try_next_item321
*10.2.4 錯峰技術的使用324
10.3 sequence的其他問題326
*10.3.1 心跳功能的實現326
10.3.2 只將virtual_sequence設置為default_sequence329
10.3.3 disable fork語句對原子操作的影響330
10.4 DUT參數的隨機化332
10.4.1 使用寄存器模型隨機化參數332
*10.4.2 使用單獨的參數類333
10.5 聚合參數335
10.5.1 聚合參數的定義335
10.5.2 聚合參數的優勢與問題336
10.6 config_db340
10.6.1 換一個phase使用config_db340
*10.6.2 config_db的替代者341
*10.6.3 set函數的第二個參數的檢查345
第11章 OVM到UVM的遷移349
11.1 對等的遷移349
11.2 一些過時的用法349
*11.2.1 sequence與sequencer的factory機制實現349
11.2.2 sequence的啟動與uvm_test_done350
*11.2.3 手動調用build_phase351
11.2.4 純凈的UVM環境352
附錄A SystemVerilog使用簡介353
附錄B DUT代碼清單361
附錄C UVM命令行參數匯總366
附錄D UVM常用宏匯總369