目前一本用研究的眼光解读如何搭建基于UVM搭建验证平台的书。
作者历时3年钻研UVM源代码和使用UVM经验的系统总结。
实例丰富,步步清晰引导读者掌握UVM的精髓和实用技巧。
本书脱胎于网络上广为流传的《UVM1.1应用指南及源码分析》,内容愈加炉火纯青。
《UVM实战(卷1)》主要介绍UVM的使用。全书详尽介绍了UVM的factory机制、sequence机制、phase机制、objection机制及寄存器模型等的使用。此外,本书还试图引导读者思考UVM为什么要引入这些机制,从而使读者知其然,更知其所以然。本书以一个完整的示例开篇,使得读者一开始就对如何使用UVM搭建验证平台有总体的概念。本书提供大量示例代码,这些代码都经过实际的运行。全书内容力求简单易懂,尽量将UVM中的概念与读者已有的概念联系起来。在第11章还专门介绍了OVM与UVM的区别,为那些从OVM迁移到UVM的用户提供很大帮助。本书主要面向UVM的初学者及想对UVM追根寻底的中级用户。针对没有面向对象编程基础的用户,本书在附录中简要介绍了面向对象的概念及SystemVerilog中区别于其他编程语言的一些特殊语法。
第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.
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使用简介
附录B DUT代码清单
附录C UVM命令行参数汇总
附录D UVM常用宏汇总
UVM验证方法学在欧美先进的微电子和半导体公司中已经被广泛采用。而目前国内的公司也开始作同样的升级,《UVM实战》是一本符合现代验证大趋势的书。对于这一本由中国本土作者自己编写的UVM学习书籍(也是第一部中文自主版权的UVM书籍),我深感惊奇,也为年轻的作者感到骄傲。书中涉及的全面的UVM验证方法学理论知识、丰富的实战经验和范例以及循序渐进的教学方式无不令人印象深刻,这是一本易懂易学的高水平著作,也是一本适合于芯片验证工程师、微电子专业本科或研究生以及相关学科教学的优秀学习教材和参考书。
—— T. Chan博士 美国Pixelworks公司工程部执行副总裁
我很荣幸能够第一时间品读这本关于UVM的中文书籍。UVM验证方法学出现不到5年,但是发展速度惊人,目前专业的IP、VIP供应商都开始为客户提供UVM验证环境,因此学习UVM对专业的验证工程师,以及设计工程师,都有很大的裨益。
遗憾的是,目前关于UVM的资料大多是英文的,并且内容对于入门者来说比较晦涩难懂,让人望而生畏,尚没有正式出版的中文UVM教程。这本书的出现,有如及时雨,填补了这个空白,让国内读者能够很快地在混沌中摸清方向。此书循序渐进,从实践到背景原理进行了深入浅出的讲解,非常适合自学。并且其内容是基于UVM的稳定版本1.1d,相对其他英文书籍内容更新、更实用,对读者帮助也更大。作者有非常丰富的UVM经验,曾经在网络上发布过一个关于UVM代码分析的文档,我也曾经通过E-mail请教过他相关问题,受益匪浅。相信这本书能够对国内整体验证水平的提高带来很大的帮助。不论是验证工程师还是设计工程师,我都强烈推荐大家仔细阅读。
—— 朱迎辉 瑞晟微电子(苏州)有限公司电脑周边事业处副处长
我读过不少介绍OVM/UVM验证方法学的书,我也亲自实践过UVM,然而,我还是常常感慨没有一本能够真正把UVM说透彻、讲清楚的技术书籍。有幸拜读张强的《UVM实战》一书之后,我的想法改变了。以我多年IC设计和验证的经验,我认为这是一本能够让读者叫好的技术书籍。作者结合自己在UVM验证领域丰富的实践经验,花费很多心血深入研究UVM的源代码,从体系上把握了UVM的精髓,然后用深入浅出的方式将其介绍给读者。这本书给人以耳目一新的感觉,从理论到实践、从初级到高级、从搭建平台到系统调试,不但讲述非常清楚,而且逻辑联系严密。学习完本书,并且按照书中的实例进行练习,就能够系统地掌握UVM的使用和调试技术。与目前市面上的其他UVM书籍相比,这一点实属难能可贵。这本书对于使用UVM验证的工程师具有极高的参考价值,对学习UVM的初学者更是一本不可多得的好书。
—— 贺海文 灿芯半导体DFT主管(曾任英特尔移动通信IC设计与验证高级工程师)