首页>参考读物>计算机科学与技术>综合

SystemVerilog与功能验证
作者 : 钟文枫 编著
出版日期 : 2010-09-16
ISBN : 978-7-111-31373-1
定价 : 36.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 221
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书共11章,系统论述了基于SystemVerilog的功能验证理论与方法,全书详细阐述了以下三个方面的内容:功能验证在整个FPGA/ASIC设计流程中的作用及主要的验证技术和方法学。SystemVerilog在功能验证上的语法结构和基本原理。如何采用SystemVerilog搭建验证平台。

图书特色

SystemVerilog技术优势与本书特色
IEEE P1800-2005是下一代硬件设计和验证语言,已被业界广泛采用,成为业界最流行的硬件验证语言。本书内容全面,通俗易懂,深入浅出,实例丰富,结合了业界的实践经验,是一本实用的技术参考手册。
与读者分享以下内容
本书重点介绍了IEEE标准P1800-2005硬件设计描述和验证语言SystemVerilog的基本语法及其在功能验证上的应用。书中以功能验证为主线,讲述基本的验证流程、高级验证技术和验证方法学,结合石头、剪刀、布的应用实例,重点阐述了如何采用SystemVerilog实现随机激励生成、功能覆盖率驱动验证、断言验证等多种高级验证技术;最后,通过业界流行的开放式验证方法学OVM介绍了如何在验证平台中实现可重用性。

同业者隆重推荐
作为IEEE的标准,SystemVerilog 为设计和验证提供了一个统一的平台。本书从SystemVerilog的语法介绍开始,结合验证方法学的理论,提供了丰富的实例和可借鉴的方法,为读者特别是IC验证工程师开阔了视野,提供了宝贵的实践经验,是一本非常实用的参考手册。
—— 赵 立 思科系统研发有限公司 资深硬件工程师
                                         
面向对象的设计思想作为软件开发的一部分已经有很多年了,而将其引入到硬件设计验证领域才刚刚流行起来。一方面,硬件验证设计过程和软件设计过程在某种程度上越来越相似,成熟的设计模式对于验证工作效率的提高大有裨益。另一方面,对于习惯于“硬件思维”的验证工程师,快速吸收掌握面向对象的设计思想却成为一大难题。本书从SystemVerilog的语法出发,详细介绍了SystemVerilog在硬件验证领域的强大应用,还有业界领先的验证方法学OVM。书中实例详尽,通俗易懂,是IEEE标准和验证工程实际应用的完美结合。无论对于新手还是高级用户,本书都是一本非常有价值的参考手册。
—— 萧 路 爱立信(中国)通信有限公司 资深硬件工程师
                                                   
                                                  
SystemVerilog作为下一代硬件设计和验证语言,已被业界广泛采用。在功能验证领域,SystemVerilog已逐步取代Vera和E,成为业界最流行的验证语言。书中以SystemVerilog的语法特点为基础,介绍如何在验证平台中采用随机激励生成、覆盖率驱动验证、断言验证等高级验证技术;作者结合了多年的项目经验,以石头、剪刀、布仲裁器的验证平台为例,生动展示了SystemVerilog的各种应用。这是一本全面的SystemVerilog技术宝典。
—— EDA联盟专业网站 www.edaunion.com

广东海丰人,曾就职于华为通信技术公司,目前在某EDA公司任亚太区客户支持部门验证产品技术主管。入行以来,参与过TD-SCDMA基带芯片、千兆无源光网芯片、高性能CPU、网络芯片的硬件辅助验证等多个研发项目,在IC设计及验证领域积累了丰富的实践经验;帮助多家公司优化设计流程,采用高级验证技术,缩短项目研发周期;发表有《OVM实现了可重用的验证平台》、《AMBA片上总线在SOC芯片设计中的应用》等多篇学术论文,也是《The Verification Cookbook》一书的中文版译者之一;多年来致力于行业技术和产品的应用和推广,对IC设计与验证有着深刻的体会和思考。

学习一门新型验证语言的第一步是学会读懂代码,本书为每个编程实例提供了详尽的注释,并且可以在仿真平台上运行;第二步是能够将学到的语法应用到自己的项目中,编写自己的程序;第三步是学会调试代码,这是最艰苦和最具挑战性的工作。
本书依托IC设计的专业技术社区——EDA联盟网站(www.edaunion.com),为广大读者提供了一个技术交流的平台;读者可以在论坛中讨论自己学习过程中遇到的问题,分享学习体会;也可与本书作者直接交流。所有例程可以从论坛中下载。
希望本书能够成为对SystemVerilog与功能验证技术感兴趣的读者有益的入门指南!

图书前言

在读者深入阅读本书之前,我先对本书的主要结构和内容做个简要的介绍,以便不同背景的读者能够有选择地阅读,快速获取自己需要的知识。
本书的结构和内容
  本书分为11章,系统论述了基于SystemVerilog的功能验证方法,重点关注以下三个方面的内容。
   功能验证在整个FPGA/ASIC设计流程中的作用及主要的验证技术和方法学。
   SystemVerilog的语法结构和在功能验证上的应用及基本原理。
   如何采用SystemVerilog搭建验证平台。
  第1章从FPGA/ASIC整个设计流程的角度介绍功能验证的地位和作用、验证的基本流程、验证的主要技术和方法学,最后引入硬件验证语言SystemVerilog。
  第2章介绍SystemVerilog相对于Verilog增加的数据类型、SystemVerilog的编程结构、流程控制和方法(任务/函数)等基本语法。
  第3章介绍fork…join结构、并行进程之间的通信方法:mailbox/semaphore/event同步和互斥机制。
  第4章介绍面向对象编程语言、类的基本概念、对象的创建、赋值与复制;如何采用类来封装事务处理器等验证组件和搭建验证平台。
  第5章介绍虚接口,以及如何通过虚接口实现类的对象和设计模块的连接,实现事务处理器的可重用。
  第6章介绍随机激励生成,其中重点讨论基于对象的约束随机激励产生机制、约束定义以及动态控制激励随机生成。
  第7章介绍面向对象编程语言中的继承和多态。
  第8章介绍覆盖率在验证流程中的作用、SystemVerilog功能覆盖率的语法,包括覆盖组、覆盖点和交叉覆盖点,以及如何实现一个覆盖率驱动验证平台。
  第9章介绍断言在验证流程中的作用、断言的采用策略、SystemVerilog断言子集的语法结构以及如何通过bind结构实现断言与设计分离。
  第10章介绍验证重用以及OVM验证方法学的核心技术:基于Factory的对象生成机制、动态参数配置、激励生成与验证架构分离以及测试用例在验证架构的顶层。
  第11章介绍SystemVerilog和C语言的接口:DPI,重点介绍如何在SystemVerilog层面定义输入方法接口(SystemVerilog调用外部C程序)和输出方法接口(SystemVerilog程序输出供外部C调用),最后介绍DPI在验证中的作用。
  从第4~9章,我们以石头、剪刀、布的仲裁器作为实例,并将各章中涉及的SystemVerilog重要语法和验证技术应用到验证平台搭建中,附有大量源代码供读者参考和练习。
如何阅读本书
  本书的目标读者是FPGA/ASIC设计工程师和验证工程师、相关专业的在校本科生、研究生和老师。若具有一定的硬件描述语言(Verilog或者VHDL)和面向对象编程语言(如C++)的基础,将有助于对本书的阅读。
  想了解验证技术概况和验证方法学的读者,可以直接阅读第1章和第10章;对于普通读者,建议从第1章阅读到第6章;再根据自己的学习和工作需要,学习第7章以后的内容,这部分内容适合验证工程师和有一定验证经验的读者。有Verilog基础的读者,可以粗略浏览一下第2章的新增数据类型,SystemVerilog其他语法结构与Verilog基本类似;没有Verilog基础的读者,这一章需要认真阅读;想了解覆盖率驱动验证、断言或者DPI的读者可以直接阅读对应内容的第8章、第9章和第11章。
  学习一门新语言的第一步是学会读懂代码,本书为每个例子提供了详尽的解释,并且每个例子都可以在仿真平台上运行。第二步是能够将学到的语法应用到自己的项目中,编写自己的程序。第三步是学会调试代码,调试代码是最艰苦和最具挑战性的工作。和大多数编程语言一样,SystemVerilog中基于面向对象编程结构的执行一般是不消耗物理时间的,是动态生成和析构的,为此在关键部位嵌入调试代码(如$display)将是最有效的方法。
  EDA联盟网站wwwedaunioncom是专业的技术论坛,为广大的工程师和读者提供了一个技术讨论的平台;各位读者可以在验证板块发帖讨论和交流自己学习过程中遇到的问题,分享自己的学习体会。本书的所有例子也可以从论坛中下载,若发现任何错误请告知我们。
  希望本书能够为对SystemVerilog和功能验证技术感兴趣的读者提供一个入门的指南。
致谢
  本书在编写过程中,充分利用和吸收了业界最前沿的技术和信息,在此对书中参考引用文献和书籍的作者表示衷心的感谢。由于编写时间仓促,本人学识有限,若书中存在纰漏请各位读者给予谅解并指正,我将虚心听取并及时更正,并欢迎进行技术切磋和探讨(联系方式:edaunionbook@gmailcom)。
  本书的完成有赖于朋友们的支持,其中赵立、萧路和王国平三位资深工程师审阅了全稿,并给出了很多有建设性的意见。对他们辛勤的工作,致以最高的敬意和最真挚的感谢。
  在此,我还要特别感谢重庆邮电大学的邓亚平教授、吴慧莲教授、鲜继清教授和张宗琪教授对我在学业上的帮助和支持;感谢郑建宏教授提供了TD-SCDMA终端芯片项目的研发平台和锻炼机会;感谢入行以来帮助过我的朋友俞洋、钟信潮、王诚、薛小刚、庄永军和傅骏诚;感谢华为海思的宾兵,让我有幸加入了一个伟大的集体,参与了GPON项目;感谢明导电子乐于分享经验和技术的同事。
  最后,感谢我敬爱的父母!
钟文枫
2010年7月15日于上海

上架指导

电子与电气工程

作者简介

钟文枫 编著:暂无简介

图书目录

前言
第1章功能验证技术与方法学概要
11功能验证与验证平台
111专用芯片设计流程
112什么是验证
113验证平台可以做些什么
114功能验证流程
12验证技术和验证方法学
121黑盒、白盒与灰盒验证
122验证技术
123验证存在的挑战
124验证方法学
125断言验证
126覆盖率驱动验证

13硬件验证语言
131Open Vera
132e语言
133PSL
134SystemC
135SystemVerilog
第2章数据类型与编程结构
21数据类型
211两态数据类型
212枚举类型和用户自定义类型
213数组与队列
214字符串
215结构体和联合体
216常量
217文本表示
218操作符和表达式
22过程语句
221赋值语句
222控制结构
23函数和任务
231函数和任务的区别
232子程序定义
233子程序参数
234子程序返回
235自动存储
24编程结构
241模块
242接口
243过程块和语句块
244数据对象
245程序块
246简单的验证架构
25数据的生命周期和作用域
26数据类型转换
261静态类型转换
262动态类型转换
第3章并发进程与进程同步
31fork…join
311三种并发方式
312进程与变量
313进程控制
32mailbox
321mailbox的基本操作
322参数化mailbox
323mailbox应用实例
33semaphore
331semaphore的基本操作
332semaphore应用实例
34event
341事件触发
342等待事件
343事件的触发属性
第4章面向对象编程入门
41过程编程语言与面向对象编程语言
42类
421类的基本概念
422构造函数
423静态属性与方法
424this操作符
425对象的赋值与复制
426块外声明
43石头、剪刀、布仲裁器实例(基于类的验证平台)
431验证环境顶层
432验证组件
第5章虚接口
51虚接口的基本概念及应用
511虚接口的基本概念
512虚接口的应用
52端口模式和时钟控制块
521端口模式
522时钟控制块
第6章随机测试
61激励产生
611什么是随机
612潜在问题
62随机生成机制
621随机系统函数
622randcase/randsequence
63基于对象的随机生成
631随机变量
632约束定义
633随机方法
634随机使能控制
635约束的动态修改
64标准随机函数
65随机激励的应用
第7章继承与多态
71继承和多态的基本概念
72继承与子类
721类的继承与重写
722子类对象与父类对象的赋值
723构造函数调用
73虚方法与多态
731虚方法
732多态
74虚类和参数化类
741虚类
742参数化类
75约束重写
76数据的隐藏与封装
第8章功能覆盖率
81覆盖率
811目标覆盖率
812代码覆盖率
813功能覆盖率
82SystemVerilog的功能覆盖率
821覆盖组(covergroup)
822覆盖点(coverpoint)
823交叉覆盖点(cross)
83覆盖率驱动的验证平台
第9章断言
91断言的概念及作用
92SVA
921SVA的语法层次结构
922SVA应用实例
923bind
第10章验证重用与验证方法学 
101验证重用中存在的问题
102验证方法学OVM
103OVM的四大核心技术
1031基于Factory的验证平台动态构建
1032动态的配置机制
1033测试用例在验证架构的顶层
1034激励产生与验证架构分离
第11章SystemVerilog与C语言的接口
111什么是DPI
112DPI的应用
1121方法的导入
1122方法的导出
1123DPI的数据类型映射
1124DPI的具体应用
附录A覆盖率内置参数和方法列表
附录B断言重复操作符和序列操作符列表
附录CQuestaSim简要介绍
附录D常用术语中英文对照
参考文献
后记

源代码索引SystemVerilog
源代码21枚举类型实例:enum_examplesv26
源代码22用户自定义类型实例:typedef_examplesv28
源代码23多维数组和压缩数组实例:array_examplesv30
源代码24动态数组实例:dy_array_examplesv31
源代码25关联数组实例:as_array_examplesv33
源代码26队列实例:queue_examplesv35
源代码27结构体实例:struct_examplesv38
源代码28类型参数化实例:para_type_examplesv40
源代码29赋值语句实例:assign_examplesv46
源代码210if条件选择语句实例:if_examplesv47
源代码211case条件选择语句实例:case_examplesv47
源代码212for循环语句实例:for_examplesv48
源代码213while循环语句实例:while_examplesv49
源代码214do…while循环语句实例:dowhile_examplesv49
源代码215repeat循环语句实例:repeat_examplesv50
源代码216forever循环语句实例:forever_examplesv51
源代码217foreach循环语句实例:foreach_examplesv51
源代码218ref引用端口类型实例:ref_examplesv54
源代码219模块实例:module_examplesv58
源代码220接口实例:interface_examplesv59
源代码221静态变量实例:static_auto_examplesv65
源代码31fork…join语句实例:fork_examplesv70
源代码32fork…join_any语句实例:fork_any_examplesv71
源代码33fork…join_none语句实例:fork_none_examplesv71
源代码34disable语句实例:disable_examplesv73
源代码35mailbox应用实例:mailbox_examplesv77
源代码36semaphore应用实例:semaphore_examplesv80
源代码37event应用实例:event_examplesv82
源代码41简单以太包的类实例:ether_packetsv84
源代码42类的构造函数实例:new_construct_examplesv88
源代码43类的静态变量实例:static_var_classsv89
源代码44类的静态方法实例:static_method_classsv90
源代码45this操作符实例:this_class_examplesv91
源代码46类的浅复制实例:shallow_copysv92
源代码47类的自定义深复制实例:deep_copysv93
源代码48仲裁器设计(石头、剪刀、布):rps_dutsv95
源代码49验证环境顶层(石头、剪刀、布):top_class_basedsv96
源代码410时钟复位模块(石头、剪刀、布):rps_clock_resetsv97
源代码411验证环境库文件(石头、剪刀、布)——激励单元片段:rps_env_pkgsv98
源代码412验证环境库文件(石头、剪刀、布)——激励生成器片段:rps_env_pkgsv99
源代码413事务驱动器(石头、剪刀、布):rps_driversv100
源代码414监控器(石头、剪刀、布):rps_monitorsv101
源代码415基于类的验证环境(石头、剪刀、布):rps_envsv102
源代码416验证环境库文件(石头、剪刀、布)——记分板片段:rps_env_pkgsv103
源代码51虚接口例子:virtual_interface_examplesv108
源代码52定义虚接口(石头、剪刀、布):interfacesv109
源代码53基于虚接口的事务驱动器(石头、剪刀、布):rps_driversv110
源代码54基于虚接口的监控器(石头、剪刀、布):rps_monitorsv111
源代码55基于虚接口的验证环境(石头、剪刀、布):rps_envsv111
源代码56基于虚接口的验证顶层(石头、剪刀、布):rps_tb_topsv112
源代码57端口模式实例:interface_modesv113
源代码61randcase实例:randcase_examplesv121
源代码62randsequence实例:randsequence_examplesv122
源代码63基于类的随机变量实例:class_random_examplesv123
源代码64随机约束块实例:constraint_examplesv125
源代码65inside操作实例:inside_examplesv125
源代码66dist操作实例:dist_examplesv126
源代码67foreach操作实例:foreach_random_examplesv128
源代码68solve…before操作实例:solve_before_examplesv129
源代码69随机变量使能模式实例:rand_mode_examplesv132
源代码610随机约束使能模式实例:constraint_mode_examplesv133
源代码611标准随机函数实例:std_randomize_examplesv135
源代码612基于类的随机激励实例(石头、剪刀、布):rps_env_pkgsv135
源代码71类的继承实例:class_extend_examplesv139
源代码72类的重写实例1:class_override_examplesv139
源代码73基类与派生类实例:base_derived_examplesv141
源代码74super操作实例:super_examplesv142
源代码75构造函数链实例:new_chain_examplesv143
源代码76类的重写实例2:base_override_examplesv144
源代码77虚方法与多态实例:virtual_poly_examplesv145
源代码78参数化类实例:parameterized_classsv149
源代码79约束块重写实例:constraint_override_examplesv150
源代码81功能覆盖组实例:covergroup_examplesv156
源代码82功能覆盖点实例:coverpoint_examplesv156
源代码83功能分组柜实例:bin_examplesv158
源代码84功能交叉覆盖点实例:cross_examplesv159
源代码85功能覆盖模块(石头、剪刀、布):rps_coveragesv162
源代码86基于功能覆盖率验证环境(石头、剪刀、布):rps_envsv165
源代码91断言序列实例:sequence_examplesv171
源代码92断言属性实例:property_examplesv172
源代码93断言模块(石头、剪刀、布):rps_svasv173
源代码94基于断言的验证顶层(石头、剪刀、布):rps_tb_topsv174
源代码95bind操作实例:bind_examplesv175
源代码111外部Hello程序1(基于C):example 1/hello_cc190
源代码112DPI导入方法实例:example 1/hellov190
源代码113外部Hello程序2(基于C):example 2/hello_cc191
源代码114DPI导出方法实例:example 2/hellov191

教学资源推荐
参考读物推荐
作者: 邱郁惠 编著
作者: (美)普赖斯·普里切特、唐纳德·鲁滨逊、拉塞尔·克拉克森