本书的结构和内容
本书分为 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在验证中的作用。
前言
第 1章 功能验证技术与方法学概要 !!!!!!!!!!!!!!!!!!!! 1
11 功能验证与验证平台 !!!!!!!!!!!!!!!!!!!!!!!!! 1
111 专用芯片设计流程 !!!!!!!!!!!!!!!!!!!!!!!! 1
112 什么是验证!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2
113 验证平台可以做些什么 !!!!!!!!!!!!!!!!!!!!!! 3
114 功能验证流程!!!!!!!!!!!!!!!!!!!!!!!!!!! 5
12 验证技术和验证方法学 !!!!!!!!!!!!!!!!!!!!!!!! 8
121 黑盒、白盒与灰盒验证 !!!!!!!!!!!!!!!!!!!!!! 8
122 验证技术!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 9
123 验证存在的挑战 !!!!!!!!!!!!!!!!!!!!!!!!! 13
124 验证方法学 !!!!!!!!!!!!!!!!!!!!!!!!!!! 13
125 断言验证 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 15
126 覆盖率驱动验证 !!!!!!!!!!!!!!!!!!!!!!!!! 16
13 硬件验证语言 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 21
131 OpenVera!!!!!!!!!!!!!!!!!!!!!!!!!!!! 21
132 e语言 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 21
133 PSL !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 22
134 SystemC!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 22
135 SystemVerilog !!!!!!!!!!!!!!!!!!!!!!!!!! 22
第 2章 数据类型与编程结构 !!!!!!!!!!!!!!!!!!!!!!! 24
21 数据类型 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 24
211 两态数据类型 !!!!!!!!!!!!!!!!!!!!!!!!!! 25
212 枚举类型和用户自定义类型 !!!!!!!!!!!!!!!!!!!! 26
213 数组与队列 !!!!!!!!!!!!!!!!!!!!!!!!!!! 28
214 字符串 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 36
215 结构体和联合体 !!!!!!!!!!!!!!!!!!!!!!!!! 37
216 常量 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 39
217 文本表示 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 41
218 操作符和表达式 !!!!!!!!!!!!!!!!!!!!!!!!! 43
22 过程语句 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 45
221 赋值语句 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 45
222 控制结构 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 46
23 函数和任务 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 52
231 函数和任务的区别 !!!!!!!!!!!!!!!!!!!!!!!! 52
232 子程序定义 !!!!!!!!!!!!!!!!!!!!!!!!!!! 53
233 子程序参数 !!!!!!!!!!!!!!!!!!!!!!!!!!! 53
234 子程序返回 !!!!!!!!!!!!!!!!!!!!!!!!!!! 56
235 自动存储 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 56
24 编程结构 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 57
241 模块 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 57
242 接口 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 59
243 过程块和语句块 !!!!!!!!!!!!!!!!!!!!!!!!! 60
244 数据对象 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 62
245 程序块 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 62
246 简单的验证架构 !!!!!!!!!!!!!!!!!!!!!!!!! 63
25 数据的生命周期和作用域 !!!!!!!!!!!!!!!!!!!!!!! 64
26 数据类型转换 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 65
261 静态类型转换 !!!!!!!!!!!!!!!!!!!!!!!!!! 66
262 动态类型转换 !!!!!!!!!!!!!!!!!!!!!!!!!! 66
第 3章 并发进程与进程同步 !!!!!!!!!!!!!!!!!!!!!!! 68
31 fork…join !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 68
311 三种并发方式 !!!!!!!!!!!!!!!!!!!!!!!!!! 69
312 进程与变量 !!!!!!!!!!!!!!!!!!!!!!!!!!! 72
313 进程控制 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 73
32 mailbox!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 74
321 mailbox的基本操作 !!!!!!!!!!!!!!!!!!!!!!!! 75
322 参数化 mailbox!!!!!!!!!!!!!!!!!!!!!!!!!! 77
323 mailbox应用实例 !!!!!!!!!!!!!!!!!!!!!!!!! 77
33 semaphore!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 78
331 semaphore的基本操作 !!!!!!!!!!!!!!!!!!!!!!! 79
332 semaphore应用实例 !!!!!!!!!!!!!!!!!!!!!!!! 80
Ⅵ
34 event!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 81
341 事件触发 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 81
342 等待事件 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 81
343 事件的触发属性 !!!!!!!!!!!!!!!!!!!!!!!!! 81
第 4章 面向对象编程入门 !!!!!!!!!!!!!!!!!!!!!!!! 83
41 过程编程语言与面向对象编程语言 !!!!!!!!!!!!!!!!!!! 83
42 类 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 84
421 类的基本概念 !!!!!!!!!!!!!!!!!!!!!!!!!! 85
422 构造函数 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 87
423 静态属性与方法 !!!!!!!!!!!!!!!!!!!!!!!!! 89
424 this操作符 !!!!!!!!!!!!!!!!!!!!!!!!!!! 91
425 对象的赋值与复制 !!!!!!!!!!!!!!!!!!!!!!!! 91
426 块外声明 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 94
43 石头、剪刀、布仲裁器实例 (基于类的验证平台) !!!!!!!!!!! 95
431 验证环境顶层 !!!!!!!!!!!!!!!!!!!!!!!!!! 96
432 验证组件 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 99
第 5章 虚接口 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 107
51 虚接口的基本概念及应用 !!!!!!!!!!!!!!!!!!!!!! 107
511 虚接口的基本概念 !!!!!!!!!!!!!!!!!!!!!!! 107
512 虚接口的应用 !!!!!!!!!!!!!!!!!!!!!!!!! 109
52 端口模式和时钟控制块 !!!!!!!!!!!!!!!!!!!!!!! 113
521 端口模式!!!!!!!!!!!!!!!!!!!!!!!!!!!! 113
522 时钟控制块!!!!!!!!!!!!!!!!!!!!!!!!!!! 114
第 6章 随机测试 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 118
61 激励产生 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 118
611 什么是随机!!!!!!!!!!!!!!!!!!!!!!!!!!! 119
612 潜在问题!!!!!!!!!!!!!!!!!!!!!!!!!!!! 119
62 随机生成机制!!!!!!!!!!!!!!!!!!!!!!!!!!!! 120
621 随机系统函数 !!!!!!!!!!!!!!!!!!!!!!!!! 120
622 randcase/randsequence !!!!!!!!!!!!!!!!!!!!!! 121
63 基于对象的随机生成 !!!!!!!!!!!!!!!!!!!!!!!! 122
631 随机变量!!!!!!!!!!!!!!!!!!!!!!!!!!!! 123
632 约束定义!!!!!!!!!!!!!!!!!!!!!!!!!!!! 124
Ⅶ
633 随机方法!!!!!!!!!!!!!!!!!!!!!!!!!!!! 130
634 随机使能控制 !!!!!!!!!!!!!!!!!!!!!!!!! 131
635 约束的动态修改 !!!!!!!!!!!!!!!!!!!!!!!! 134
64 标准随机函数!!!!!!!!!!!!!!!!!!!!!!!!!!!! 134
65 随机激励的应用!!!!!!!!!!!!!!!!!!!!!!!!!!! 135
第 7章 继承与多态 !!!!!!!!!!!!!!!!!!!!!!!!!!! 137
71 继承和多态的基本概念 !!!!!!!!!!!!!!!!!!!!!!! 137
72 继承与子类!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 137
721 类的继承与重写 !!!!!!!!!!!!!!!!!!!!!!!! 138
722 子类对象与父类对象的赋值 !!!!!!!!!!!!!!!!!!! 141
723 构造函数调用 !!!!!!!!!!!!!!!!!!!!!!!!! 142
73 虚方法与多态!!!!!!!!!!!!!!!!!!!!!!!!!!!! 144
731 虚方法!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 145
732 多态 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 148
74 虚类和参数化类!!!!!!!!!!!!!!!!!!!!!!!!!!! 148
741 虚类 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 148
742 参数化类!!!!!!!!!!!!!!!!!!!!!!!!!!!! 149
75 约束重写 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 150
76 数据的隐藏与封装 !!!!!!!!!!!!!!!!!!!!!!!!! 151
第 8章 功能覆盖率 !!!!!!!!!!!!!!!!!!!!!!!!!!! 153
81 覆盖率 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 153
811 目标覆盖率!!!!!!!!!!!!!!!!!!!!!!!!!!! 153
812 代码覆盖率!!!!!!!!!!!!!!!!!!!!!!!!!!! 154
813 功能覆盖率!!!!!!!!!!!!!!!!!!!!!!!!!!! 154
82 SystemVerilog的功能覆盖率 !!!!!!!!!!!!!!!!!!!!!! 155
821 覆盖组 (covergroup) !!!!!!!!!!!!!!!!!!!!!! 155
822 覆盖点 (coverpoint) !!!!!!!!!!!!!!!!!!!!!! 157
823 交叉覆盖点 (cross) !!!!!!!!!!!!!!!!!!!!!! 159
83 覆盖率驱动的验证平台 !!!!!!!!!!!!!!!!!!!!!!! 162
第 9章 断言 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 167
91 断言的概念及作用 !!!!!!!!!!!!!!!!!!!!!!!!! 167
Ⅷ
92 SVA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 169
921 SVA的语法层次结构 !!!!!!!!!!!!!!!!!!!!!! 170
922 SVA应用实例 !!!!!!!!!!!!!!!!!!!!!!!!! 173
923 bind!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 175
第 10章 验证重用与验证方法学 !!!!!!!!!!!!!!!!!!!! 178
101 验证重用中存在的问题 !!!!!!!!!!!!!!!!!!!!!!! 178
102 验证方法学 OVM !!!!!!!!!!!!!!!!!!!!!!!!! 179
103 OVM的四大核心技术 !!!!!!!!!!!!!!!!!!!!!!!! 180
1031 基于 Factory的验证平台动态构建 !!!!!!!!!!!!!!!! 181
1032 动态的配置机制 !!!!!!!!!!!!!!!!!!!!!!!! 183
1033 测试用例在验证架构的顶层 !!!!!!!!!!!!!!!!!!! 184
1034 激励产生与验证架构分离 !!!!!!!!!!!!!!!!!!!! 185
第 11章 SystemVerilog与 C语言的接口 !!!!!!!!!!!!!!!! 187
111 什么是 DPI !!!!!!!!!!!!!!!!!!!!!!!!!!!! 187
112 DPI的应用 !!!!!!!!!!!!!!!!!!!!!!!!!!!! 188
1121 方法的导入 !!!!!!!!!!!!!!!!!!!!!!!!!! 188
1122 方法的导出 !!!!!!!!!!!!!!!!!!!!!!!!!! 190
1123 DPI的数据类型映射 !!!!!!!!!!!!!!!!!!!!!! 191
1124 DPI的具体应用 !!!!!!!!!!!!!!!!!!!!!!!! 192
附录 A 覆盖率内置参数和方法列表 !!!!!!!!!!!!!!!!!!! 193
附录 B 断言重复操作符和序列操作符列表 !!!!!!!!!!!!!!! 195
附录 C QuestaSim简要介绍 !!!!!!!!!!!!!!!!!!!!!! 198
附录 D 常用术语中英文对照 !!!!!!!!!!!!!!!!!!!!!! 205
参考文献 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 207
后记 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 208
没有回复内容