UVM实战(卷1)

UVM实战(卷1)
作 者: 张强
出版社: 机械工业出版社
丛编项: 电子与嵌入式系统设计丛书
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  张强,资深验证工程师,毕业于浙江大学超大规模集成电路研究所,研究方向为模拟及数模混合集成电路,主要从事模拟电源管理芯片、运算放大器及应用于高性能CPU的SRAM的研究与设计,持有两个与SRAM相关的专利。毕业后一直从事数字集成电路的设计和验证工作,曾经参与过高速智能列车数据采集及通信系统、高性能智能投影仪芯片的研究与开发。目前主要从事手机等消费电子低功耗图形显示芯片的研究。2011年年底,在熟读UVM源代码的情况下,在网上发布了《UVM1.1应用指南及源代码解析》,深受读者肯定。

内容简介

《UVM实战》主要介绍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

为什么是UVM1.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 interface2.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_object3.1.1

uvm_component派生自uvm_object3.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_usage3.5.9

set_config与get_config3.5.10

config_db的调试第4章

UVM中的TLM1.0通信4.1

TLM1.4.1.1

验证平台内部的通信4.1.2

TLM的定义4.1.3

UVM中的PORT与EXPORT4.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 phase5.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中的sequence6.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_do6.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_none6.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_response6.7.2

response的数量问题*6.7.3

response handler与另类的response*6.7.4

rsp与req类型不同6.8

sequence library6.8.1

随机选择sequence6.8.2

控制选择算法6.8.3

控制执行次数6.8.4

使用sequence_library_cfg第7章

UVM中的寄存器模型7.1

寄存器模型简介*7.1.1

带寄存器配置总线的DUT7.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

检查读写功能的sequence7.7

寄存器模型的高级用法*7.7.1

使用reg_predictor*7.7.2

使用UVM_PREDICT_DIRECT功能与mirror操作*7.7.3

寄存器模型的随机化与update7.7.4

扩展位宽7.8

寄存器模型的其他常用函数7.8.1

get_root_blocks7.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

重载component8.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

interface10.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_sequence10.3.3

disable fork语句对原子操作的影响10.4

DUT参数的随机化10.4.1

使用寄存器模型随机化参数*10.4.2

使用单独的参数类10.5

聚合参数10.5.1

聚合参数的定义10.5.2

聚合参数的优势与问题10.6

config_db10.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_phase11.2.4

纯净的UVM环境附录A

SystemVerilog使用简介附录B

DUT代码清单附录C

UVM命令行参数汇总附录D

UVM常用宏汇总