>
System Verilog验证:测试平台编写指南:原书第三版
本书讲解了System Verilog Testbench强大的验证功能,清楚地解释了面向对象编程、约束随机测试和功能覆盖的概念。本书涵盖System Verilog所有验证结构,如类、程序块、随机化和功能覆盖等,并通过超过500个代码示例和详细解释,说明了学习多态性、回调和工厂模式等概念的内部工作原理。此外,本书提供了数百条指导原则,为全职验证工程师和学习这一技能的读者提供帮助,让读者可以更高效地使用这种语言,并解释了常见的编码错误,以便读者可以避免这些陷阱。
样章试读
- 暂时还没有任何用户评论
全部咨询(共0条问答)
- 暂时还没有任何用户咨询内容
目录
第1章 验证导论 1
1.1 验证流程 2
1.2 验证方法学 3
1.3 基本测试平台的功能 4
1.4 定向测试 4
1.5 方法学基础 5
1.6 受约束的随机激励 7
1.7 随机化的对象是什么? 8
1.8 功能覆盖率 10
1.9 测试平台的构件 11
1.10 分层的测试平台 12
1.11 建立一个分层的测试平台 17
1.12 仿真环境的阶段 17
1.13 最大限度的代码重用 18
1.14 测试平台的性能 19
1.15 小结 19
1.16 练习 19
第2章 数据类型 21
2.1 内建数据类型 21
2.2 定宽数组 23
2.3 动态数组 30
2.4 队列 32
2.5 关联数组 33
2.6 数组的方法 36
2.7 选择存储类型 41
2.8 使用typedef创建新的类型 43
2.9 创建用户自定义结构 44
2.10 包 47
2.11 类型转换 48
2.12 流操作符 49
2.13 枚举类型 51
2.14 常量 54
2.15 字符串 54
2.16 表达式的位宽 55
2.17 小结 56
2.18 练习 56
第3章 过程语句和子程序 61
3.1 过程语句 61
3.2 任务、函数以及void函数 62
3.3 任务和函数概述 63
3.4 子程序参数 63
3.5 子程序的返回 68
3.6 局部数据存储 70
3.7 时间值 72
3.8 小结 74
3.9 练习 74
第4章 连接设计和测试平台 77
4.1 将测试平台和设计分开 77
4.2 接口 80
4.3 激励时序 86
4.4 接口的驱动和采样 92
4.5 程序块需要考虑的因素 97
4.6 将模块连接起来 99
4.7 顶层作用域 100
4.8 程序和模块的交互 102
4.9 SystemVerilog断言 102
4.10 四端口的ATM路由器 105
4.11 Ref端口的方向 112
4.12 小结 113
4.13 练习 113
第5章 面向对象编程(OOP)基础 115
5.1 简介 115
5.2 考虑名词,而非动词 115
5.3 编写第一个类(Class) 116
5.4 在哪里定义类 117
5.5 OOP术语 117
5.6 创建新对象 118
5.7 对象的解除分配(deallocation) 122
5.8 使用对象 123
5.9 类的方法 124
5.10 在类之外定义方法 124
5.11 静态变量和全局变量 126
5.12 作用域规则 129
5.13 在一个类内使用另一个类 131
5.14 理解动态对象 134
5.15 对象的复制 137
5.16 公有和私有 143
5.17 题外话 143
5.18 建立一个测试平台 144
5.19 小结 145
5.20 练习 145
第6章 随机化 149
6.1 介绍 149
6.2 什么需要随机化? 149
6.3 SystemVerilog中的随机化 152
6.4 约束 154
6.5 解的概率 164
6.6 控制多个约束块 168
6.7 有效性约束 169
6.8 内嵌约束 169
6.9 pre_randomize和post_randomize函数 170
6.10 随机数函数 172
6.11 约束的技巧和技术 172
6.12 随机化的常见错误 177
6.13 迭代和数组约束 178
6.14 产生原子激励和场景 187
6.15 随机控制 189
6.16 随机数发生器 191
6.17 随机器件配置 194
6.18 小结 197
6.19 练习 197
第7章 线程以及线程间的通信 201
7.1 线程的使用 201
7.2 停止线程 211
7.3 线程间的通信 214
7.4 事件 215
7.5 旗语 220
7.6 信箱 222
7.7 构筑带线程并可实现线程间通信的测试程序 234
7.8 小结 237
7.9 练习 238
第8章 面向对象编程的高级技巧指南 241
8.1 继承简介 241
8.2 蓝图(Blueprint)模式 247
8.3 类型向下转换(Downcasting)和虚拟方法 251
8.4 合成、继承和其他替代的方法 255
8.5 对象的复制 258
8.6 抽象类和纯虚拟方法 260
8.7 回调 262
8.8 参数化的类 267
8.9 静态和单例类 271
8.10 创建测试注册表 276
8.11 小结 283
8.12 练习 284
第9章 功能覆盖率 287
9.1 收集覆盖率数据 288
9.2 覆盖率的类型 289
9.3 功能覆盖策略 291
9.4 功能覆盖率的简单例子 293
9.5 覆盖组详解 296
9.6 覆盖组的触发 297
9.7 数据采样 301
9.8 交叉覆盖率 309
9.9 通用的覆盖组 315
9.10 覆盖选项 316
9.11 覆盖率数据的分析 318
9.12 在仿真过程中进行覆盖率统计 320
9.13 小结 320
9.14 练习 321
第10章 高级接口 323
10.1 ATM路由器的虚拟接口 323
10.2 连接到多个不同的设计配置 331
10.3 参数化接口和虚拟接口 337
10.4 接口中的过程代码 338
10.5 小结 341
10.6 练习 341
第11章 完整的SystemVerilog测试平台 343
11.1 设计单元 343
11.2 测试平台的模块 347
11.3 修改测试 369
11.4 小结 371
11.5 练习 371
第12章 SystemVerilog与C/C++语言的交互 373
12.1 传递简单的数值 373
12.2 连接简单的C子程序 377
12.3 调用C++程序 383
12.4 共享简单数组 389
12.5 开放数组(open array) 390
12.6 共享复合类型 394
12.7 纯导入方法和关联导入方法 396
12.8 在C程序中与SystemVerilog通信 397
12.9 与其他语言交互 407
12.10 小结 409
12.11 练习 409
参考文献 411