UVM实战

UVM实战

作者:张强

出版社:机械工业

出版年:2014年7月

ISBN:9787111470199

所属分类:人生哲学

书刊介绍

《UVM实战》内容简介

张强编著的这本《UVM实战》主要介绍UVM 的使用。全书详尽介绍了UVM的factory机制、 sequence机制、phase机制、objection机制及寄存 器模型等的使用。此外,本书还试图引导读者思考 UVM为什么要引入这些机制,从而使读者知其然,更 知其所以然。
本书以一个完整的示例开篇,使得读者一开始就 对如何使用UVM搭建验证平台有总体的概念。本书提 供大量示例代码,这些代码都经过实际的运行。全书 内容力求简单易懂,尽量将UVM中的概念与读者已有 的概念联系起来。在第11章还专门介绍了OVM与UVM的 区别,为那些从OVM迁移到UVM的用户提供很大帮助。
本书主要面向UVM的初学者及想对UVM追根寻底的 中级用户。针对没有面向对象编程基础的用户,本书 在附录中简要介绍了面向对象的概念及 SystemVerilog中区别于其他编程语言的一些特殊语法。
《UVM实战》系张强编著。

作品目录

前言
第1章:与UVM的第一次接触
1.1、UVM是什么
1.1.1、验证在现代IC流程中的位置
1.1.2、验证的语言
1.1.3、何谓方法学
1.1.4、为什么是UVM
1.1.5、UVM的发展史
1.2、学了UVM之后能做什么
1.2.1、验证工程师
1.2.2、设计工程师
第2章:一个简单的UVM验证平台
2.1、验证平台的组成
2.2、只有driver的验证平台
*2.2.1、最简单的验证平台
*2.2.2、加入factory机制
*2.2.3、加入objection机制
*2.2.4、加入virtual
interface
2.3、为验证平台加入各个组件
*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机制
2.4、UVM的终极大作:sequence
*2.4.1、在验证平台中加入sequencer
*2.4.2、sequence机制
*2.4.3、default_sequence的使用
2.5、建造测试用例
*2.5.1、加入base_test
*2.5.2、UVM中测试用例的启动
第3章:UVM基础
3.1、uvm_component与uvm_object
3.1.1、uvm_component派生自uvm_object
3.1.2、常用的派生自uvm_object的类
3.1.3、常用的派生自uvm_component的类
3.1.4、与uvm_object相关的宏
3.1.5、与uvm_component相关的宏
3.1.6、uvm_component的限制
3.1.7、uvm_component与uvm_object的二元结构
3.2、UVM的树形结构
3.2.1、uvm_component中的parent参数
3.2.2、UVM树的根
3.2.3、层次结构相关函数
3.3、field
automation机制
3.3.1、field
automation机制相关的宏
3.3.2、field
automation机制的常用函数
*3.3.3、field
automation机制中标志位的使用
*3.3.4、field
automation中宏与if的结合
3.4、UVM中打印信息的控制
*3.4.1、设置打印信息的冗余度阈值
*3.4.2、重载打印信息的严重性
*3.4.3、UVM_ERROR到达一定数量结束仿真
*3.4.4、设置计数的目标
*3.4.5、UVM的断点功能
*3.4.6、将输出信息导入文件中
*3.4.7、控制打印信息的行为
3.5、config_db机制
3.5.1、UVM中的路径
3.5.2、set与get函数的参数
*3.5.3、省略get语句
*3.5.4、跨层次的多重设置
*3.5.5、同一层次的多重设置
*3.5.6、非直线的设置与获取
*3.5.7、config_db机制对通配符的支持
*3.5.8、check_config_usage
3.5.9、set_config与get_config
3.5.10、config_db的调试
第4章:UVM中的TLM1.0通信
4.1、TLM1.0、4.1.1、验证平台内部的通信
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、一个component内有多个IMP
*4.3.3、使用FIFO通信
4.3.4、FIFO上的端口及调试
*4.3.5、用FIFO还是用IMP
第5章:UVM验证平台的运行
5.1、phase机制
*5.1.1、task
phase与function
phase
5.1.2、动态运行phase
*5.1.3、phase的执行顺序
*5.1.4、UVM树的遍历
5.1.5、super.phase的内容
*5.1.6、build阶段出现UVM_ERROR停止仿真
*5.1.7、phase的跳转
5.1.8、phase机制的必要性
5.1.9、phase的调试
5.1.10、超时退出
5.2、objection机制
*5.2.1、objection与task
phase
*5.2.2、参数phase的必要性
5.2.3、控制objection的最佳选择
5.2.4、set_drain_time的使用
*5.2.5、objection的调试
5.3、domain的应用
5.3.1、domain简介
*5.3.2、多domain的例子
*5.3.3、多domain中phase的跳转
第6章:UVM中的sequence
6.1、sequence基础
6.1.1、从driver中剥离激励产生功能
*6.1.2、sequence的启动与执行
6.2、sequence的仲裁机制
*6.2.1、在同一sequencer上启动多个sequence
*6.2.2、sequencer的lock操作
*6.2.3、sequencer的grab操作
6.2.4、sequence的有效性
6.3、sequence相关宏及其实现
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进阶应用
*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之间的简单同步
*6.5.3、sequence之间的复杂同步
6.5.4、仅在virtual
sequence中控制objection
*6.5.5、在sequence中慎用fork
join_none
6.6、在sequence中使用config_db
*6.6.1、在sequence中获取参数
*6.6.2、在sequence中设置参数
*6.6.3、wait_modified的使用
6.7、response的使用
*6.7.1、put_response与get_response
6.7.2、response的数量问题
*6.7.3、response
handler与另类的response
*6.7.4、rsp与req类型不同
6.8、sequence
library
6.8.1、随机选择sequence
6.8.2、控制选择算法
6.8.3、控制执行次数
6.8.4、使用sequence_library_cfg
第7章:UVM中的寄存器模型
7.1、寄存器模型简介
*7.1.1、带寄存器配置总线的DUT
7.1.2、需要寄存器模型才能做的事情
7.1.3、寄存器模型中的基本概念
7.2、简单的寄存器模型
*7.2.1、只有一个寄存器的寄存器模型
*7.2.2、将寄存器模型集成到验证平台中
*7.2.3、在验证平台中使用寄存器模型
7.3、后门访问与前门访问
*7.3.1、UVM中前门访问的实现
7.3.2、后门访问操作的定义
*7.3.3、使用interface进行后门访问操作
7.3.4、UVM中后门访问操作的实现:DPI+VPI
*7.3.5、UVM中后门访问操作接口
7.4、复杂的寄存器模型
*7.4.1、层次化的寄存器模型
*7.4.2、reg_file的作用
*7.4.3、多个域的寄存器
*7.4.4、多个地址的寄存器
*7.4.5、加入存储器
7.5、寄存器模型对DUT的模拟
7.5.1、期望值与镜像值
7.5.2、常用操作及其对期望值和镜像值的影响
7.6、寄存器模型中一些内建的sequence
*7.6.1、检查后门访问中hdl路径的sequence
*7.6.2、检查默认值的sequence
*7.6.3、检查读写功能的sequence
7.7、寄存器模型的高级用法
*7.7.1、使用reg_predictor
*7.7.2、使用UVM_PREDICT_DIRECT功能与mirror操作
*7.7.3、寄存器模型的随机化与update
7.7.4、扩展位宽
7.8、寄存器模型的其他常用函数
7.8.1、get_root_blocks
7.8.2、get_reg_by_offset函数
第8章:UVM中的factory机制
8.1、SystemVerilog对重载的支持
*8.1.1、任务与函数的重载
*8.1.2、约束的重载
8.2、使用factory机制进行重载
*8.2.1、factory机制式的重载
*8.2.2、重载的方式及种类
*8.2.3、复杂的重载
*8.2.4、factory机制的调试
8.3、常用的重载
*8.3.1、重载transaction
*8.3.2、重载sequence
*8.3.3、重载component
8.3.4、重载driver以实现所有的测试用例
8.4、factory机制的实现
8.4.1、创建一个类的实例的方法
*8.4.2、根据字符串来创建一个类
8.4.3、用factory机制创建实例的接口
8.4.4、factory机制的本质
第9章:UVM中代码的可重用性
9.1、callback机制
9.1.1、广义的callback函数
9.1.2、callback机制的必要性
9.1.3、UVM中callback机制的原理
*9.1.4、callback机制的使用
*9.1.5、子类继承父类的callback机制
9.1.6、使用callback函数/任务来实现所有的测试用例
9.1.7、callback机制、sequence机制和factory机制
9.2、功能的模块化:小而美
9.2.1、Linux的设计哲学:小而美
9.2.2、小而美与factory机制的重载
9.2.3、放弃建造强大sequence的想法
9.3、参数化的类
9.3.1、参数化类的必要性
*9.3.2、UVM对参数化类的支持
9.4、模块级到芯片级的代码重用
*9.4.1、基于env的重用
*9.4.2、寄存器模型的重用
9.4.3、virtual
sequence与virtual
sequencer
第10章:UVM高级应用
10.1、interface
10.1.1、interface实现driver的部分功能
*10.1.2、可变时钟
10.2、layer
sequence
*10.2.1、复杂sequence的简单化
*10.2.2、layer
sequence的示例
*10.2.3、layer
sequence与try_next_item
*10.2.4、错峰技术的使用
10.3、sequence的其他问题
*10.3.1、心跳功能的实现
10.3.2、只将virtual_sequence设置为default_sequence
10.3.3、disable
fork语句对原子操作的影响
10.4、DUT参数的随机化
10.4.1、使用寄存器模型随机化参数
*10.4.2、使用单独的参数类
10.5、聚合参数
10.5.1、聚合参数的定义
10.5.2、聚合参数的优势与问题
10.6、config_db
10.6.1、换一个phase使用config_db
*10.6.2、config_db的替代者
*10.6.3、set函数的第二个参数的检查
第11章:OVM到UVM的迁移
11.1、对等的迁移
11.2、一些过时的用法
*11.2.1、sequence与sequencer的factory机制实现
11.2.2、sequence的启动与uvm_test_done
*11.2.3、手动调用build_phase
11.2.4、纯净的UVM环境
附录A
SystemVerilog使用简介
A.1、结构体的使用
A.2、从结构体到类
A.3、类的封装
A.4、类的继承
A.5、类的多态
A.6、randomize与constraint
附录B
DUT代码清单
附录C
UVM命令行参数汇总
附录D
UVM常用宏汇总

相关推荐

微信二维码