首页>参考读物>电子电工>电子工程

UVM实战
作者 : 张强 编著
出版日期 : 2014-08-11
ISBN : 978-7-111-47019-9
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 380
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书从搭建一个完整的UVM平台开始,在书中使用了大量的例子,深入浅出的介绍UVM。除了介绍UVM的使用方法之外,本书还引导读者思考这种用法背后的UVM设计哲学。

图书特色

封面:
目前唯一一本用研究的眼光解读如何基于UVM搭建验证平台的著作。
作者历时3年钻研UVM源代码和使用UVM经验的系统总结。
实例丰富,步步清晰地引导读者掌握UVM的精髓和实用技巧。
本书脱胎于网络上广为流传的《UVM1.1应用指南及源代码分析》,内容愈加炉火纯青。

封底:
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设计与验证高级工程师)


前:
UVM的学习资料非常匮乏,能够参考的资料,一是《OVM Cookbook》(这本英文资料从来没有在国内出版过),另一个是OVM/UVM官方的英文参考文档。它们所采用的行文方式更是硬生生地不断引入某些概念,并附加一定的代码来阐述这些概念。在这些前后引入的概念之间,几乎没有什么逻辑关系。有时候看完了一整章都不知道该章介绍的东西有什么用处。最关键的是,整本书看完了也不知道如何搭建一个验证平台。这本书的作者围绕如何搭建一个基于UVM的验证平台,用丰富的案例和深入浅出的语言,引导读者深入理解UVM验证方法学的使用方法和设计理念。

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

图书前言

从我参加工作开始,就一直在使用OVM/UVM,最初是OVM,后来当UVM1.0发布后,我所在的公司迅速切换到UVM。在学习的过程中,自己尝遍艰辛。当时资料非常匮乏(其实今天依然比较匮乏),能够参考的只有两份,一是《OVM Cookbook》(这本英文资料一直没有在国内出版过),二是OVM/UVM官方的英文参考文档。这两份资料所采用的行文方式都是硬生生地不断引入某些概念,并附加一定的代码来阐述这些概念。在这些前后引入的概念之间,几乎没有逻辑关系。有时候看完一整章都不知道该章介绍的内容有何用处,看完整本书也不知道如何搭建一个验证平台。虽然OVM/UVM的发行包中附带了一个例子,但是这个例子对于初学者来说实在太复杂,这种复杂使很多用户望而生畏。身边的同事虽然对OVM/UVM有一定了解,但是并不深入,知其然却不知其所以然。在这种情况下,我只能通过查看源代码的形式来学习OVM/UVM。这个过程非常艰苦,但是使得我对整个UVM的运行了如指掌,同时在这个过程中我充分领悟到了OVM/UVM的设计理念,也为其中的实现拍案叫绝。
  我非常渴望将OVM/UVM中的美妙实现分享给所有OVM/UVM用户,这种想法一直在我脑海盘旋。当时,国内没有任何中文的UVM学习文档,同时自己在学习OVM/UVM过程中的痛苦记忆犹新。为了使得后来者能够更加容易地学习OVM/UVM,减轻学习的痛苦,2011年8月初,我忽然有了将我对OVM/UVM的理解记录成一份文档的想法。这个想法在诞生后就迅速壮大,我很快列出了提纲,根据这些提纲,经过4个多月的写作与完善,终于完成了名为《UVM1.1应用指南及源代码解析》的文档,并将其放到网上供广大用户免费下载。
  在这份文档中,我一开始就尝试着为广大读者呈现出一个完整的UVM验证平台。这种行文方式主要是为了避免《OVM Cookbook》及OVM/UVM官方参考文档的那种看完整本书都不知道如何搭建验证平台的情况出现。虽然在写作时曾经犹豫过这种方式会有一些激进,但是通过后来读者的反馈证明这种方式是完全可以接受的。
  在网上发布这份文档后,我收到了众多用户发来的邮件。有很多用户对我的无私表示感谢,这让我非常欣慰:至少我做的事情帮助了一些人;还有众多的用户指出了整份文档中的一些笔误;除此之外,还有一些用户建议文档的某些部分应该阐述得更加清楚些,并增加某些部分的内容。在这里我衷心地向这些用户表示感谢,由于人数众多,这里不再一一列举出他们的名字。
  2013年,当我重新审视自己两年前写的文档时,发现了其中诸多的不足。大量的笔误自不必提,更多的不足来自于内容上。2011年的文档中分为明显的前后两部分,前9章讲述如何使用UVM,后10章讲述UVM的源代码。在给我发来邮件的众多用户中,99%都是只看前9章的。我最初的想法是与广大OVM/UVM用户分享读UVM源代码的心得,所以后10章是我花费大量精力写的,而前9章则是顺手而为。这造成了前9章太简单,同时里面问题较多,而后10章太难、太复杂,没有太多人能看懂。至于介于简单和复杂之间的那部分中等难度的内容,却没有在整本书中覆盖。
  恰在此时,机械工业出版社华章分社的张国强编辑联系到我,询问我是否考虑把整份文档出版。在此之前,已经有众多的读者通过邮件询问关于文档的出版情况。在和张编辑沟通并去除某些疑虑后,我和张编辑达成了出版意向。经过几个月的修改,并增添了大量内容后,形成了本书。与电子版的《UVM1.1应用指南及源代码解析》相比,这本书有如下特点:
  1)增加了一些中等难度的内容,消除了《UVM1.1应用指南及源代码解析》中太简单内容与太复杂内容之间的空白。比如加入了大量factory模式的内容,详细阐述了寄存器模型中的后门(BACKDOOR)访问等。新增加的内容及例子几乎占据整本书的2/3篇幅。
  2)在《UVM1.1应用指南及源代码解析》中,一开始就给出一个验证平台的例子,但是这个例子是以一个整体的形式呈现在读者面前,而没有说明白这个例子为什么会是这样,这好比从0直接跳到了1,中间没有任何过渡。而在本书中,我将此例一步步拆解,从0到0.1,再到0.2,一直慢慢增加到1。在增加每一步时,都尽量讲述明白为什么会这样增加,以方便用户的学习。
  3)书中的每一个例子都经过了验证,这些例子都能在本书附带的源代码中找到。用户可以登录华章网站(http://www.hzbook.com)下载这些源代码并在自己的电脑上运行它们,这会极大提高学习的速度。
  4)本书第11章专门讲述了从OVM到UVM的迁移。UVM是从OVM迁移来的,虽然很多公司现在使用的是UVM,但是由于一些历史遗留问题,在它们的代码库中依然有很多OVM式的已经被UVM丢弃的用法。通过这一章的学习,用户可以迅速适应这些过时的用法。
  这本书能够出版,首先感谢机械工业出版社华章分社给我这样一个机会,特别感谢机械工业出版社华章分社的张国强编辑和李燕编辑,没有他们的辛苦工作,这本书不可能与广大读者见面。
  我要感谢我的父母和姐姐,是他们一直在背后默默地支持我、鼓励我,无论是高潮和低谷,他们都一直在我的身边。
  我要感谢我在上海工作期间的领导和同事:魏斌、向伟、孙唐、宋亚平、王勇、王天、陈晨、赖琳晖、沈晓、胡晓飞、何刚、鲍敏祺、林健、龙进凯、汪永威、常勇。他们给了我很多写作的灵感和素材。
  我还要感谢我在杭州工作期间的领导和同事:袁锦辉、吴洪涛、陈国华、梁力、高世超、王旭霞、王兆明、乐东坡、陆礼红、甘滔、潘永斌、陈钰飞、朱明鉴,他们在我写《UVM1.1应用指南及源代码解析》期间给了我各种各样的帮助。
  由于时间仓促,同时作者水平所限,书中难免存在错误,恳请广大读者批评指正!

张强
2014年4月

上架指导

集成电路设计

封底文字

UVM验证方法学在欧美先进的微电子和半导体公司已经逐渐被广泛采用。而目前国内的公司也开始作同样的升级,《UVM实战》是一本符合现代验证大趋势的书。对于这一本由中国本地作者自己编写的UVM学习书籍(也是第一部中文自主版权的UVM书籍),我深感惊奇,也为年轻的作者感到骄傲。书中所涉及到的全面的UVM验证方法学理论知识、丰富的实战经验和范例以及循序渐进的教学方式无不令人印象深刻,这是一本易懂易学的高水平著作,也是一本适合于芯片验证工程师、微电子专业本科或研究生以及相关学科教学的优秀学习教材和参考书。
                                      ——T. Chan博士 美国Pixel works 半导体公司工程部执行副总裁

——朱迎辉

我读过不少介绍OVM/UVM验证方法学的书,我也亲自实践过UVM,然而,我还是常常感慨没有一本能够真正把UVM说透彻,讲清楚的技术书籍。有幸拜读张强的《UVM实战》一书之后,我的想法改变了。以我多年IC设计和验证的经验,我认为这是一本能够让读者叫好的技术书籍。作为在UVM验证领域具有丰富的经验。作者结合自己工作的实践经验,花费很多心血深入研究UVM的源代码,从体系上把握了UVM的精髓,然后用深入浅出的方式把它介绍给读者。这本书给人以耳目一新的感觉,从理论到实践,从初级到高级,从搭建平台到系统调试,不但讲述非常清楚,而且逻辑联系严密。学习完本书,并且按照书中实例进行练习,就能够系统的掌握UVM的使用和调试技术。比较目前市面上的一般的UVM的书籍,这一点实属难能可贵。这本书对使用UVM验证工程师具有极高的参考价值,对学习UVM的初学者更是一本不可多得的好书。

——贺海文 灿芯半导体设计主管,曾任英特尔移动通信IC设计与验证高级工程师

作者简介

张强 编著:暂无简介

图书目录

前言
第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

教学资源推荐
作者: [美]道格拉斯·布鲁克斯(Douglas Brooks)著
作者: [加]克拉伦斯·W. 德席尔瓦(Clarence W. de Silva) 著
参考读物推荐
作者: 《注册电气工程师(发输变电)执业资格考试历年真题解析》编委会 编
作者: 高显生 编著
作者: 陆佳华 江舟 马岷 编著 孙宏滨 主审