第1章 與UVM的第一次接觸
1.1 UVM是什么
1.1.1 驗(yàn)證在現(xiàn)代IC流程中的位置
1.1.2 驗(yàn)證的語(yǔ)言
1.1.3 何謂方法學(xué)
1.1.4 為什么是UVM
1.1.5 UVM的發(fā)展史
1.2 學(xué)了UVM之后能做什么
1.2.1 驗(yàn)證工程師
1.2.2 設(shè)計(jì)工程師
第2章 一個(gè)簡(jiǎn)單的UVM驗(yàn)證平臺(tái)
2.1 驗(yàn)證平臺(tái)的組成
2.2 只有driver的驗(yàn)證平臺(tái)
*2.2.1 最簡(jiǎn)單的驗(yàn)證平臺(tái)
*2.2.2 加入factory機(jī)制
*2.2.3 加入objection機(jī)制
*2.2.4 加入virtual interface
2.3 為驗(yàn)證平臺(tái)加入各個(gè)組件
*2.3.1 加入transaction
*2.3.2 加入env
*2.3.3 加入monitor
*2.3.4 封裝成agent
*2.3.5 加入reference model
*2.3.6 加入scoreboard
*2.3.7 加入field_automation機(jī)制
2.4 UVM的終極大作:sequence
*2.4.1 在驗(yàn)證平臺(tái)中加入sequencer
*2.4.2 sequence機(jī)制
*2.4.3 default_sequence 的使用
2.5 建造測(cè)試用例
*2.5.1 加入base_test
*2.5.2 UVM中測(cè)試用例的啟動(dòng)
第3章 UVM基礎(chǔ)
3.1 uvm_component與uvm_object
3.1.1 uvm_component派生自u(píng)vm_object
3.1.2 常用的派生自u(píng)vm_object的類
3.1.3 常用的派生自u(píng)vm_component的類
3.1.4 與uvm_object相關(guān)的宏
3.1.5 與uvm_component相關(guān)的宏
3.1.6 uvm_component的限制
3.1.7 uvm_component與uvm_object的二元結(jié)構(gòu)
3.2 UVM的樹(shù)形結(jié)構(gòu)
3.2.1 uvm_component中的parent參數(shù)
3.2.2 UVM樹(shù)的根
3.2.3 層次結(jié)構(gòu)相關(guān)函數(shù)
3.3 field automation機(jī)制
3.3.1 field automation機(jī)制相關(guān)的宏
3.3.2 field automation機(jī)制的常用函數(shù)
*3.3.3 field automation機(jī)制中標(biāo)志位的使用
*3.3.4 field automation中宏與if的結(jié)合
3.4 UVM中打印信息的控制
*3.4.1 設(shè)置打印信息的冗余度閾值
*3.4.2 重載打印信息的嚴(yán)重性
*3.4.3 UVM_ERROR到達(dá)一定數(shù)量結(jié)束仿真
*3.4.4 設(shè)置計(jì)數(shù)的目標(biāo)
*3.4.5 UVM的斷點(diǎn)功能
*3.4.6 將輸出信息導(dǎo)入文件中
*3.4.7 控制打印信息的行為
3.5 config_db機(jī)制
3.5.1 UVM中的路徑
3.5.2 set與get函數(shù)的參數(shù)
*3.5.3 省略get語(yǔ)句
*3.5.4 跨層次的多重設(shè)置
*3.5.5 同一層次的多重設(shè)置
*3.5.6 非直線的設(shè)置與獲取
*3.5.7 config_db機(jī)制對(duì)通配符的支持
*3.5.8 check_config_usage
3.5.9 set_config與get_config
3.5.10 config_db的調(diào)試
第4章 UVM中的TLM1.0通信
4.1 TLM1.
4.1.1 驗(yàn)證平臺(tái)內(nèi)部的通信
4.1.2 TLM的定義
4.1.3 UVM中的PORT與EXPORT
4.2 UVM中各種端口的互連
*4.2.1 PORT與EXPORT的連接
*4.2.2 UVM中的IMP
*4.2.3 PORT與IMP的連接
*4.2.4 EXPORT與IMP的連接
*4.2.5 PORT與PORT的連接
*4.2.6 EXPORT與EXPORT的連接
*4.2.7 blocking_get端口的使用
*4.2.8 blocking_transport端口的使用
4.2.9 nonblocking端口的使用
4.3 UVM中的通信方式
*4.3.1 UVM中的analysis端口
*4.3.2 一個(gè)component內(nèi)有多個(gè)IMP
*4.3.3 使用FIFO通信
4.3.4 FIFO上的端口及調(diào)試
*4.3.5 用FIFO還是用IMP
第5章 UVM驗(yàn)證平臺(tái)的運(yùn)行
5.1 phase機(jī)制
*5.1.1 task phase與function phase
5.1.2 動(dòng)態(tài)運(yùn)行phase
*5.1.3 phase的執(zhí)行順序
*5.1.4 UVM樹(shù)的遍歷
5.1.5 super.phase的內(nèi)容
*5.1.6 build階段出現(xiàn)UVM_ERROR停止仿真
*5.1.7 phase的跳轉(zhuǎn)
5.1.8 phase機(jī)制的必要性
5.1.9 phase的調(diào)試
5.1.10 超時(shí)退出
5.2 objection機(jī)制
*5.2.1 objection與task phase
*5.2.2 參數(shù)phase的必要性
5.2.3 控制objection的最佳選擇
5.2.4 set_drain_time的使用
*5.2.5 objection的調(diào)試
5.3 domain的應(yīng)用
5.3.1 domain簡(jiǎn)介
*5.3.2 多domain的例子
*5.3.3 多domain中phase的跳轉(zhuǎn)
第6章 UVM中的sequence
6.1 sequence基礎(chǔ)
6.1.1 從driver中剝離激勵(lì)產(chǎn)生功能
*6.1.2 sequence的啟動(dòng)與執(zhí)行
6.2 sequence的仲裁機(jī)制
*6.2.1 在同一sequencer上啟動(dòng)多個(gè)sequence
*6.2.2 sequencer的lock操作
*6.2.3 sequencer的grab操作
6.2.4 sequence的有效性
6.3 sequence相關(guān)宏及其實(shí)現(xiàn)
6.3.1 uvm_do系列宏
*6.3.2 uvm_create與uvm_send
*6.3.3 uvm_rand_send系列宏
*6.3.4 start_item與finish_item
*6.3.5 pre_do、mid_do與post_do
6.4 sequence進(jìn)階應(yīng)用
*6.4.1 嵌套的sequence
*6.4.2 在sequence中使用rand類型變量
*6.4.3 transaction類型的匹配
*6.4.4 p_sequencer的使用
*6.4.5 sequence的派生與繼承
6.5 virtual sequence的使用
*6.5.1 帶雙路輸入輸出端口的DUT
*6.5.2 sequence之間的簡(jiǎn)單同步
*6.5.3 sequence之間的復(fù)雜同步
6.5.4 僅在virtual sequence中控制objection
*6.5.5 在sequence中慎用fork join_none
6.6 在sequence中使用config_db
*6.6.1 在sequence中獲取參數(shù)
*6.6.2 在sequence中設(shè)置參數(shù)
*6.6.3 wait_modified的使用
6.7 response的使用
*6.7.1 put_response與get_response
6.7.2 response的數(shù)量問(wèn)題
*6.7.3 response handler與另類的response
*6.7.4 rsp與req類型不同
6.8 sequence library
6.8.1 隨機(jī)選擇sequence
6.8.2 控制選擇算法
6.8.3 控制執(zhí)行次數(shù)
6.8.4 使用sequence_library_cfg
第7章 UVM中的寄存器模型
7.1 寄存器模型簡(jiǎn)介
*7.1.1 帶寄存器配置總線的DUT
7.1.2 需要寄存器模型才能做的事情
7.1.3 寄存器模型中的基本概念
7.2 簡(jiǎn)單的寄存器模型
*7.2.1 只有一個(gè)寄存器的寄存器模型
*7.2.2 將寄存器模型集成到驗(yàn)證平臺(tái)中
*7.2.3 在驗(yàn)證平臺(tái)中使用寄存器模型
7.3 后門(mén)訪問(wèn)與前門(mén)訪問(wèn)
*7.3.1 UVM中前門(mén)訪問(wèn)的實(shí)現(xiàn)
7.3.2 后門(mén)訪問(wèn)操作的定義
*7.3.3 使用interface進(jìn)行后門(mén)訪問(wèn)操作
7.3.4 UVM中后門(mén)訪問(wèn)操作的實(shí)現(xiàn):DPI+VPI
*7.3.5 UVM中后門(mén)訪問(wèn)操作接口
7.4 復(fù)雜的寄存器模型
*7.4.1 層次化的寄存器模型
*7.4.2 reg_file的作用
*7.4.3 多個(gè)域的寄存器
*7.4.4 多個(gè)地址的寄存器
*7.4.5 加入存儲(chǔ)器
7.5 寄存器模型對(duì)DUT的模擬
7.5.1 期望值與鏡像值
7.5.2 常用操作及其對(duì)期望值和鏡像值的影響
7.6 寄存器模型中一些內(nèi)建的sequence
*7.6.1 檢查后門(mén)訪問(wèn)中hdl路徑的sequence
*7.6.2 檢查默認(rèn)值的sequence
*7.6.3 檢查讀寫(xiě)功能的sequence
7.7 寄存器模型的高級(jí)用法
*7.7.1 使用reg_predictor
*7.7.2 使用UVM_PREDICT_DIRECT功能與mirror操作
*7.7.3 寄存器模型的隨機(jī)化與update
7.7.4 擴(kuò)展位寬
7.8 寄存器模型的其他常用函數(shù)
7.8.1 get_root_blocks
7.8.2 get_reg_by_offset函數(shù)
第8章 UVM中的factory機(jī)制
8.1 SystemVerilog對(duì)重載的支持
*8.1.1 任務(wù)與函數(shù)的重載
*8.1.2 約束的重載
8.2 使用factory機(jī)制進(jìn)行重載
*8.2.1 factory機(jī)制式的重載
*8.2.2 重載的方式及種類
*8.2.3 復(fù)雜的重載
*8.2.4 factory機(jī)制的調(diào)試
8.3 常用的重載
*8.3.1 重載transaction
*8.3.2 重載sequence
*8.3.3 重載component
8.3.4 重載driver以實(shí)現(xiàn)所有的測(cè)試用例
8.4 factory機(jī)制的實(shí)現(xiàn)
8.4.1 創(chuàng)建一個(gè)類的實(shí)例的方法
*8.4.2 根據(jù)字符串來(lái)創(chuàng)建一個(gè)類
8.4.3 用factory機(jī)制創(chuàng)建實(shí)例的接口
8.4.4 factory機(jī)制的本質(zhì)
第9章 UVM中代碼的可重用性
9.1 callback機(jī)制
9.1.1 廣義的callback函數(shù)
9.1.2 callback機(jī)制的必要性
9.1.3 UVM中callback機(jī)制的原理
*9.1.4 callback機(jī)制的使用
*9.1.5 子類繼承父類的callback機(jī)制
9.1.6 使用callback函數(shù)/任務(wù)來(lái)實(shí)現(xiàn)所有的測(cè)試用例
9.1.7 callback機(jī)制、sequence機(jī)制和factory機(jī)制
9.2 功能的模塊化:小而美
9.2.1 Linux的設(shè)計(jì)哲學(xué):小而美
9.2.2 小而美與factory機(jī)制的重載
9.2.3 放棄建造強(qiáng)大sequence的想法
9.3 參數(shù)化的類
9.3.1 參數(shù)化類的必要性
*9.3.2 UVM對(duì)參數(shù)化類的支持
9.4 模塊級(jí)到芯片級(jí)的代碼重用
*9.4.1 基于env的重用
*9.4.2 寄存器模型的重用
9.4.3 virtual sequence與virtual sequencer
第10章 UVM高級(jí)應(yīng)用
10.1 interface
10.1.1 interface實(shí)現(xiàn)driver的部分功能
*10.1.2 可變時(shí)鐘
10.2 layer sequence
*10.2.1 復(fù)雜sequence的簡(jiǎn)單化
*10.2.2 layer sequence的示例
*10.2.3 layer sequence與try_next_item
*10.2.4 錯(cuò)峰技術(shù)的使用
10.3 sequence的其他問(wèn)題
*10.3.1 心跳功能的實(shí)現(xiàn)
10.3.2 只將virtual_sequence設(shè)置為default_sequence
10.3.3 disable fork語(yǔ)句對(duì)原子操作的影響
10.4 DUT參數(shù)的隨機(jī)化
10.4.1 使用寄存器模型隨機(jī)化參數(shù)
*10.4.2 使用單獨(dú)的參數(shù)類
10.5 聚合參數(shù)
10.5.1 聚合參數(shù)的定義
10.5.2 聚合參數(shù)的優(yōu)勢(shì)與問(wèn)題
10.6 config_db
10.6.1 換一個(gè)phase使用config_db
*10.6.2 config_db的替代者
*10.6.3 set函數(shù)的第二個(gè)參數(shù)的檢查
第11章 OVM到UVM的遷移
11.1 對(duì)等的遷移
11.2 一些過(guò)時(shí)的用法
*11.2.1 sequence與sequencer的factory機(jī)制實(shí)現(xiàn)
11.2.2 sequence的啟動(dòng)與uvm_test_done
*11.2.3 手動(dòng)調(diào)用build_phase
11.2.4 純凈的UVM環(huán)境
附錄A SystemVerilog使用簡(jiǎn)介
附錄B DUT代碼清單
附錄C UVM命令行參數(shù)匯總
附錄D UVM常用宏匯總