《SystemVerilog与功能验证》PDF下载

  • 购买积分:10 如何计算积分?
  • 作  者:钟文枫编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2010
  • ISBN:9787111313731
  • 页数:209 页
图书介绍:本书共11章,系统论述了基于SystemVerilog的功能验证理论与方法,全书详细阐述了以下三个方面的内容:功能验证在整个FPGA/ASIC设计流程中的作用及主要的验证技术和方法学。SystemVerilog在功能验证上的语法结构和基本原理。如何采用SystemVerilog搭建验证平台。

第1章 功能验证技术与方法学概要 1

1.1 功能验证与验证平台 1

1.1.1 专用芯片设计流程 1

1.1.2 什么是验证 2

1.1.3 验证平台可以做些什么 3

1.1.4 功能验证流程 5

1.2 验证技术和验证方法学 8

1.2.1 黑盒、白盒与灰盒验证 8

1.2.2 验证技术 9

1.2.3 验证存在的挑战 13

1.2.4 验证方法学 13

1.2.5 断言验证 15

1.2.6 覆盖率驱动验证 16

1.3 硬件验证语言 21

1.3.1 Open Vera 21

1.3.2 e语言 21

1.3.3 PSL 22

1.3.4 SystemC 22

1.3.5 SystemVerilog 22

第2章 数据类型与编程结构 24

2.1 数据类型 24

2.1.1 两态数据类型 25

2.1.2 枚举类型和用户自定义类型 26

2.1.3 数组与队列 28

2.1.4 字符串 36

2.1.5 结构体和联合体 37

2.1.6 常量 39

2.1.7 文本表示 41

2.1.8 操作符和表达式 43

2.2 过程语句 45

2.2.1 赋值语句 45

2.2.2 控制结构 46

2.3 函数和任务 52

2.3.1 函数和任务的区别 52

2.3.2 子程序定义 53

2.3.3 子程序参数 53

2.3.4 子程序返回 56

2.3.5 自动存储 56

2.4 编程结构 57

2.4.1 模块 57

2.4.2 接口 59

2.4.3 过程块和语句块 60

2.4.4 数据对象 62

2.4.5 程序块 62

2.4.6 简单的验证架构 63

2.5 数据的生命周期和作用域 64

2.6 数据类型转换 65

2.6.1 静态类型转换 66

2.6.2 动态类型转换 66

第3章 并发进程与进程同步 68

3.1 fork...join 68

3.1.1 三种并发方式 69

3.1.2 进程与变量 72

3.1.3 进程控制 73

3.2 mailbox 74

3.2.1 mailbox的基本操作 75

3.2.2 参数化mailbox 77

3.2.3 mailbox应用实例 77

3.3 semaphore 78

3.3.1 semaphore的基本操作 79

3.3.2 semaphore应用实例 80

3.4 event 81

3.4.1 事件触发 81

3.4.2 等待事件 81

3.4.3 事件的触发属性 81

第4章 面向对象编程入门 83

4.1 过程编程语言与面向对象编程语言 83

4.2 类 84

4.2.1 类的基本概念 85

4.2.2 构造函数 87

4.2.3 静态属性与方法 89

4.2.4 this操作符 91

4.2.5 对象的赋值与复制 91

4.2.6 块外声明 94

4.3 石头、剪刀、布仲裁器实例(基于类的验证平台) 95

4.3.1 验证环境顶层 96

4.3.2 验证组件 99

第5章 虚接口 107

5.1 虚接口的基本概念及应用 107

5.1.1 虚接口的基本概念 107

5.1.2 虚接口的应用 109

5.2 端口模式和时钟控制块 113

5.2.1 端口模式 113

5.2.2 时钟控制块 114

第6章 随机测试 118

6.1 激励产生 118

6.1.1 什么是随机 119

6.1.2 潜在问题 119

6.2 随机生成机制 120

6.2.1 随机系统函数 120

6.2.2 randcase/randsequence 121

6.3 基于对象的随机生成 122

6.3.1 随机变量 123

6.3.2 约束定义 124

6.3.3 随机方法 130

6.3.4 随机使能控制 131

6.3.5 约束的动态修改 134

6.4 标准随机函数 134

6.5 随机激励的应用 135

第7章 继承与多态 137

7.1 继承和多态的基本概念 137

7.2 继承与子类 137

7.2.1 类的继承与重写 138

7.2.2 子类对象与父类对象的赋值 141

7.2.3 构造函数调用 142

7.3 虚方法与多态 144

7.3.1 虚方法 145

7.3.2 多态 148

7.4 虚类和参数化类 148

7.4.1 虚类 148

7.4.2 参数化类 149

7.5 约束重写 150

7.6 数据的隐藏与封装 151

第8章 功能覆盖率 153

8.1 覆盖率 153

8.1.1 目标覆盖率 153

8.1.2 代码覆盖率 154

8.1.3 功能覆盖率 154

8.2 SystemVerilog的功能覆盖率 155

8.2.1 覆盖组(covergroup) 155

8.2.2 覆盖点(coverpoint) 157

8.2.3 交叉覆盖点(cross) 159

8.3 覆盖率驱动的验证平台 162

第9章 断言 167

9.1 断言的概念及作用 167

9.2 SVA 169

9.2.1 SVA的语法层次结构 170

9.2.2 SVA应用实例 173

9.2.3 bind 175

第10章 验证重用与验证方法学 178

10.1 验证重用中存在的问题 178

10.2 验证方法学OVM 179

10.3 OVM的四大核心技术 180

10.3.1 基于Factory的验证平台动态构建 181

10.3.2 动态的配置机制 183

10.3.3 测试用例在验证架构的顶层 184

10.3.4 激励产生与验证架构分离 185

第11章 SystemVerilog与C语言的接口 187

11.1 什么是DPI 187

11.2 DPI的应用 188

11.2.1 方法的导入 188

11.2.2 方法的导出 190

11.2.3 DPI的数据类型映射 191

11.2.4 DPI的具体应用 192

附录A 覆盖率内置参数和方法列表 193

附录B 断言重复操作符和序列操作符列表 195

附录C QuestaSim简要介绍 198

附录D 常用术语中英文对照 205

参考文献 207

后记 208

源代码2-1 枚举类型实例:enum_example.sv 26

源代码2-2 用户自定义类型实例:typedef_example.sv 28

源代码2-3 多维数组和压缩数组实例:array_example.sv 30

源代码2-4 动态数组实例:dy_array_example.sv 31

源代码2-5 关联数组实例:as_array_example.sv 33

源代码2-6 队列实例:queue_example.sv 35

源代码2-7 结构体实例:struct_example.sv 38

源代码2-8 类型参数化实例:para_type_example.sv 40

源代码2-9 赋值语句实例:assign_example.sv 46

源代码2-10 if条件选择语句实例:if_example.sv 47

源代码2-11 case条件选择语句实例:case_example.sv 47

源代码2-12 for循环语句实例:for_example.sv 48

源代码2-13 while循环语句实例:while_example.sv 49

源代码2-14 do...while循环语句实例:dowhile_example.sv 49

源代码2-15 repeat循环语句实例:repeat_example.sv 50

源代码2-16 forever循环语句实例:forever_example.sv 51

源代码2-17 foreach循环语句实例:foreach_example.sv 51

源代码2-18 ref引用端口类型实例:ref_example.sv 54

源代码2-19 模块实例:module_example.sv 58

源代码2-20 接口实例:interface_example.sv 59

源代码2-21 静态变量实例:static_auto_example.sv 65

源代码3-1 fork...join语句实例:fork_example.sv 70

源代码3-2 fork...join_any语句实例:fork_any_example.sv 71

源代码3-3 fork...join_none语句实例:fork_none_example.sv 71

源代码3-4 disable语句实例:disable_example.sv 73

源代码3-5 mailbox应用实例:mailbox_example.sv 77

源代码3-6 semaphore应用实例:semaphore_example.sv 80

源代码3-7 event应用实例:event_example.sv 82

源代码4-1 简单以太包的类实例:ether_packet.sv 84

源代码4-2 类的构造函数实例:new_construct_example.sv 88

源代码4-3 类的静态变量实例:static_var_class.sv 89

源代码4-4 类的静态方法实例:static_method_class.sv 90

源代码4-5 this操作符实例:this_class_example.sv 91

源代码4-6 类的浅复制实例:shallow_copy.sv 92

源代码4-7 类的自定义深复制实例:deep_copy.sv 93

源代码4-8 仲裁器设计(石头、剪刀、布):rps_dut.sv 95

源代码4-9 验证环境顶层(石头、剪刀、布):top_class_based.sv 96

源代码4-10 时钟复位模块(石头、剪刀、布):rps_clock_reset.sv 97

源代码4-11 验证环境库文件(石头、剪刀、布)——激励单元片段:rps_env_pkg.sv 98

源代码4-12 验证环境库文件(石头、剪刀、布)——激励生成器片段:rps_env_pkg.sv 99

源代码4-13 事务驱动器(石头、剪刀、布):rps_driver.sv 100

源代码4-14 监控器(石头、剪刀、布):rps_monitor.sv 101

源代码4-15 基于类的验证环境(石头、剪刀、布):rps_env.sv 102

源代码4-16 验证环境库文件(石头、剪刀、布)——记分板片段:rps_env_pkg.sv 103

源代码5-1 虚接口例子:virtual_interface_example.sv 108

源代码5-2 定义虚接口(石头、剪刀、布):interface.sv 109

源代码5-3 基于虚接口的事务驱动器(石头、剪刀、布):rps_driver.sv 110

源代码5-4 基于虚接口的监控器(石头、剪刀、布):rps_monitor.sv 111

源代码5-5 基于虚接口的验证环境(石头、剪刀、布):rps_env.sv 111

源代码5-6 基于虚接口的验证顶层(石头、剪刀、布):rps_tb_top.sv 112

源代码5-7 端口模式实例:interface_mode.sv 113

源代码6-1 randcase实例:randcase_example.sv 121

源代码6-2 randsequence实例:randsequence_example.sv 122

源代码6-3 基于类的随机变量实例:class_random_example.sv 123

源代码6-4 随机约束块实例:constraint_example.sv 125

源代码6-5 inside操作实例:inside_example.sv 125

源代码6-6 dist操作实例:dist_example.sv 126

源代码6-7 foreach操作实例:foreach_random_example.sv 128

源代码6-8 solve...before操作实例:solve_before_example.sv 129

源代码6-9 随机变量使能模式实例:rand_mode_example.sv 132

源代码6-10 随机约束使能模式实例:constraint_mode_example.sv 133

源代码6-11 标准随机函数实例:std_randomize_example.sv 135

源代码6-12 基于类的随机激励实例(石头、剪刀、布):rps_env_pkg.sv 135

源代码7-1 类的继承实例:class_extend_example.sv 139

源代码7-2 类的重写实例1:class_override_example.sv 139

源代码7-3 基类与派生类实例:base_derived_example.sv 141

源代码7-4 super操作实例:super_example.sv 142

源代码7-5 构造函数链实例:new_chain_example.sv 143

源代码7-6 类的重写实例2:base_override_example.sv 144

源代码7-7 虚方法与多态实例:virtual_poly_example.sv 145

源代码7-8 参数化类实例:parameterized_class.sv 149

源代码7-9 约束块重写实例:constraint_override_example.sv 150

源代码8-1 功能覆盖组实例:covergroup_example.sv 156

源代码8-2 功能覆盖点实例:coverpoint_example.sv 156

源代码8-3 功能分组柜实例:bin_example.sv 158

源代码8-4 功能交叉覆盖点实例:cross_example.sv 159

源代码8-5 功能覆盖模块(石头、剪刀、布):rps_coverage.sv 162

源代码8-6 基于功能覆盖率验证环境(石头、剪刀、布):rps_env.sv 165

源代码9-1 断言序列实例:sequence_example.sv 171

源代码9-2 断言属性实例:property_example.sv 172

源代码9-3 断言模块(石头、剪刀、布):rps_sva.sv 173

源代码9-4 基于断言的验证顶层(石头、剪刀、布):rps_tb_top.sv 174

源代码9-5 bind操作实例:bind_example.sv 175

源代码11-1 外部Hello程序1(基于C):example 1/hello_c.c 190

源代码11-2 DPI导入方法实例:example 1/hello.v 190

源代码11-3 外部Hello程序2(基于C):example 2/hello_c.c 191

源代码11-4 DPI导出方法实例:example 2/hello.v 191