图书介绍
SystemVerilog验证 测试平台编写指南PDF|Epub|txt|kindle电子书版本网盘下载
- (美)克里斯·斯皮尔(ChrisSpear)著;张春,麦宋平,赵益新译 著
- 出版社: 北京:科学出版社
- ISBN:9787030253064
- 出版时间:2009
- 标注页数:365页
- 文件大小:16MB
- 文件页数:389页
- 主题词:硬件描述语言-程序设计
PDF下载
下载说明
SystemVerilog验证 测试平台编写指南PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 验证导论1
1.1验证流程2
1.1.1不同层次上的测试2
1.1.2验证计划3
1.2验证方法学3
1.3基本测试平台的功能4
1.4定向测试4
1.5方法学基础5
1.6受约束的随机激励6
1.7你的随机化对象是什么7
1.7.1设备和环境配置7
1.7.2输入数据8
1.7.3协议异常、错误和违例8
1.7.4时延和同步9
1.7.5并行的随机测试9
1.8功能覆盖率9
1.8.1从功能覆盖率到激励的反馈10
1.9测试平台的构件11
1.10分层的测试平台11
1.10.1不分层的测试平台12
1.10.2信号和命令层13
1.10.3功能层14
1.10.4场景层14
1.10.5测试的层次和功能覆盖率15
1.11建立一个分层的测试平台16
1.11.1创建一个简单的驱动器16
1.12仿真环境的阶段16
1.13最大限度的代码重用17
1.14测试平台的性能17
1.15结束语18
第2章数据类型19
2.1内建数据类型19
2.1.1逻辑(logic)类型19
2.1.2双状态数据类型20
2.2定宽数组21
2.2.1定宽数组的声明和初始化21
2.2.2常量数组22
2.2.3基本的数组操作——for和foreach22
2.2.4基本的数组操作——复制和比较24
2.2.5同时使用位下标和数组下标25
2.2.6合并数组25
2.2.7合并数组的例子26
2.2.8合并数组和非合并数组的选择27
2.3动态数组27
2.4队列28
2.5关联数组30
2.6链表32
2.7数组的方法32
2.7.1数组缩减方法33
2.7.2数组定位方法34
2.7.3数组的排序36
2.7.4使用数组定位方法建立记分板36
2.8选择存储类型37
2.8.1灵活性37
2.8.2存储器用量37
2.8.3速度38
2.8.4排序38
2.8.5选择最优的数据结构39
2.9使用typedef创建新的类型39
2.10创建用户自定义结构40
2.10.1使用struct创建新类型41
2.10.2对结构进行初始化41
2.10.3创建可容纳不同类型的联合41
2.10.4合并结构42
2.10.5在合并结构和非合并结构之间进行选择42
2.11类型转换42
2.11.1静态转换43
2.11.2动态转换43
2.11.3流操作符43
2.12枚举类型45
2.12.1定义枚举值46
2.12.2枚举类型的子程序46
2.12.3枚举类型的转换47
2.13 常量48
2.14字符串48
2.15表达式的位宽49
2.16结束语50
第3章 过程语句和子程序51
3.1过程语句51
3.2任务、函数以及void函数52
3.3任务和函数概述53
3.3.1在子程序中去掉begin…end53
3.4子程序参数53
3.4.1 C语言风格的子程序参数53
3.4.2参数的方向54
3.4.3高级的参数类型54
3.4.4参数的缺省值56
3.4.5采用名字进行参数传递57
3.4.6常见的代码错误57
3.5子程序的返回58
3.5.1返回(return)语句58
3.5.2从函数中返回一个数组59
3.6局部数据存储60
3.6.1自动存储60
3.6.2变量的初始化60
3.7时间值61
3.7.1时间单位和精度61
3.7.2时间参数62
3.7.3时间和变量62
3.7.4 $time与$realtime的对比63
3.8结束语63
第4章 连接设计和测试平台65
4.1将测试平台和设计分开65
4.1.1测试平台和DUT之间的通信66
4.1.2与端口的通信66
4.2接口68
4.2.1使用接口来简化连接68
4.2.2连接接口和端口70
4.2.3使用modport将接口中的信号分组70
4.2.4在总线设计中使用modport71
4.2.5创建接口监视模块71
4.2.6接口的优缺点72
4.2.7更多例子和信息73
4.3激励时序73
4.3.1使用时钟块控制同步信号的时序73
4.3.2接口中的logic和wire对比74
4.3.3 Verilog的时序问题75
4.3.4测试平台一设计间的竞争状态76
4.4.4程序块(Program Block)和时序区域(Timing Region)76
4.3.6仿真的结束78
4.3.7指定设计和测试平台之间的延时78
4.4接口的驱动和采样79
4.4.1接口同步79
4.4.2接口信号采样79
4.4.3接口信号驱动80
4.4.4通过时钟块驱动接口信号81
4.4.5接口中的双向信号82
4.4.6为什么在程序(program)中不允许使用always块83
4.4.7时钟发生器83
4.5将这些模块都连接起来84
4.5.1端口列表中的接口必须连接85
4.6顶层作用域85
4.7程序——模块交互87
4.8 SystemVerilog断言88
4.8.1立即断言(Immediate Assertion)88
4.8.2定制断言行为88
4.8.3并发断言89
4.8.4断言的进一步探讨90
4.9四端口的ATM路由器90
4.9.1使用端口的ATM路由器90
4.9.2使用端口的ATM顶层网单91
4.9.3使用接口简化连接94
4.9.4 ATM接口94
4.9.5使用接口的ATM路由器模型95
4.9.6使用接口的ATM顶层网单95
4.9.7使用接口的ATM测试平台96
4.10 ref端口的方向97
4.11仿真的结束97
4.12 LC3取指模块的定向测试(directed test)97
4.13结论102
第5章 面向对象编程基础103
5.1概述103
5.2考虑名词,而非动词103
5.3编写第一个类(Class)104
5.4在哪里定义类105
5.5 OOP术语105
5.6创建新对象106
5.6.1没有消息就是好消息106
5.6.2定制构造函数(Constructor)106
5.6.3将声明和创建分开108
5.6.4 new和new[]的区别108
5.6.5为对象创建一个句柄108
5.7对象的解除分配(deallocation)109
5.8使用对象110
5.9静态变量和全局变量111
5.9.1简单的静态变量111
5.9.2通过类名访问静态变量112
5.9.3静态变量的初始化112
5.9.4静态方法112
5.10类的方法114
5.11在类之外定义方法115
5.12作用域规则116
5.12.1 this是什么118
5.13在一个类内使用另一个类119
5.13.1我的类该做成多大120
5.13.2编译顺序的问题121
5.14理解动态对象121
5.14.1将对象传递给方法121
5.14.2在任务中修改句柄123
5.14.3在程序中修改对象123
5.14.4句柄数组124
5.15对象的复制125
5.15.1使用new操作符复制一个对象125
5.15.2编写自己的简单复制函数126
5.15.3编写自己的深层复制函数127
5.15.4使用流操作符从数组到打包对象,或者从打包对象到数组128
5.16公有和私有130
5.17题外话130
5.18建立一个测试平台131
5.19结论132
第6章 随机化133
6.1介绍133
6.2什么需要随机化133
6.2.1器件配置134
6.2.2环境配置134
6.2.3原始输入数据135
6.2.4封装后的输入数据135
6.2.5协议异常、错误(error)和违规(violation)135
6.2.6延时135
6.3 SystemVerilog中的随机化135
6.3.1带有随机变量的简单类136
6.3.2检查随机化(randomize)的结果137
6.3.3约束求解137
6.3.4什么可以被随机化137
6.4约束137
6.4.1什么是约束138
6.4.2简单表达式139
6.4.3等效表达式139
6.4.4权重分布140
6.4.5集合(set)成员和inside运算符141
6.4.6在集合里使用数组142
6.4.7条件约束145
6.4.8双向约束145
6.4.9使用合适的数学运算来提高效率146
6.5解的概率147
6.5.1没有约束的类147
6.5.2关系操作147
6.5.3关系操作和双向约束148
6.5.4使用solve…before约束引导概率分布148
6.6控制多个约束块149
6.7有效性约束150
6.8内嵌约束151
6.9 pre-randomize和post-randomize函数152
6.9.1构造浴缸型分布152
6.9.2关于void函数153
6.10随机数函数153
6.11约束的技巧和技术154
6.11.1使用变量的约束154
6.11.2使用非随机值155
6.11.3用约束检查值的有效性156
6.11.4随机化个别变量156
6.11.5打开或关闭约束156
6.11.6在测试过程中使用内嵌约束158
6.11.7在测试过程中使用外部约束158
6.11.8扩展类159
6.12随机化的常见错误159
6.12.1小心使用有符号变量159
6.12.2提高求解器性能的技巧160
6.13迭代和数组约束160
6.13.1数组的大小160
6.13.2元素的和161
6.13.3数组约束的问题162
6.13.4约束数组和队列的每一个元素164
6.13.5产生具有唯一元素值的数组165
6.13.6随机化句柄数组168
6.14产生原子激励和场景168
6.14.1和历史相关的原子发生器169
6.14.2随机序列169
6.14.3随机对象数组170
6.14.4组合序列170
6.15随机控制170
6.15.1用randcase建立决策树171
6.16随机数发生器172
6.16.1伪随机数发生器172
6.16.2随机稳定性——多个随机发生器173
6.16.3随机稳定性和层次化种子174
6.17随机器件配置175
6.18结论178
第7章 线程以及线程间的通信179
7.1线程的使用180
7.1.1使用fork…join和begin…end180
7.1.2使用fork…join-none来产生线程181
7.1.3使用fork…join-any实现线程同步182
7.1.4在类中创建线程183
7.1.5动态线程184
7.1.6线程中的自动变量185
7.1.7等待所有衍生线程187
7.1.8在线程间共享变量188
7.2停止线程189
7.2.1停止单个线程189
7.2.2停止多个线程190
7.2.3禁止被多次调用的任务191
7.3线程间的通信192
7.4事件192
7.4.1在事件的边沿阻塞192
7.4.2等待事件的触发193
7.4.3在循环中使用事件194
7.4.4传递事件195
7.4.5等待多个事件195
7.5旗语197
7.5.1旗语的操作198
7.5.2带多个钥匙的旗语199
7.6信箱199
7.6.1测试平台里的信箱201
7.6.2定容信箱203
7.6.3在异步线程间使用信箱通信204
7.6.4使用定容信箱和探视(peek)来实现线程的同步206
7.6.5使用信箱和事件来实现线程的同步207
7.6.6使用两个信箱来实现线程的同步209
7.6.7其他的同步技术211
7.7构筑带线程并可实现线程间通信的测试程序211
7.7.1基本的事务处理器211
7.7.2配置类212
7.7.3环境类212
7.7.4测试程序214
7.8结束语214
第8章 面向对象编程的高级技巧指南215
8.1继承简介215
8.1.1事务基类216
8.1.2 Transaction类的扩展217
8.1.3更多的OOP术语218
8.1.4扩展类的构造函数218
8.1.5驱动类218
8.1.6简单的发生器类219
8.2蓝图(Blueprint)模式220
8.2.1 environment类222
8.2.2一个简单的测试平台222
8.2.3使用扩展的Transaction类223
8.2.4使用扩展类改变随机约束224
8.3类型向下转换(downcasting)和虚方法224
8.3.1使用$cast作类型向下转换224
8.3.2虚方法226
8.3.3签名228
8.4合成、继承和其他替代的方法228
8.4.1在合成和继承之间取舍228
8.4.2合成的问题229
8.4.3继承的问题230
8.4.4现实世界中的其他方法231
8.5对象的复制232
8.5.1 copy-data方法232
8.5.2指定复制的目标234
8.6抽象类和纯虚方法235
8.7回调237
8.7.1创建一个回调任务237
8.7.2使用回调来注入干扰238
8.7.3记分板简介239
8.7.4与使用回调的记分板进行连接240
8.7.5使用回调来调试事务处理器241
8.8参数化的类242
8.8.1一个简单的堆栈(stack)242
8.8.2关于参数化类的建议244
8.9结论245
第9章 功能覆盖率246
9.1覆盖率的类型249
9.1.1代码覆盖率249
9.1.2功能覆盖率250
9.1.3漏洞率250
9.1.4断言覆盖率251
9.2功能覆盖策略251
9.2.1收集信息而非数据251
9.2.2只测量你将会使用到的内容252
9.2.3测量的完备性252
9.3功能覆盖率的简单例子253
9.4覆盖组详解256
9.4.1在类里定义覆盖组256
9.5覆盖组的触发257
9.5.1使用回调函数进行采样257
9.5.2使用事件触发的覆盖组258
9.5.3使用SystemVerilog断言进行触发259
9.6数据采样259
9.6.1个体仓和总体覆盖率260
9.6.2自动创建仓260
9.6.3限制自动创建仓的数目260
9.6.4对表达式进行采样261
9.6.5使用用户自定义的仓发现漏洞262
9.6.6命名覆盖点的仓263
9.6.7条件覆盖率264
9.6.8为枚举类型创建仓265
9.6.9翻转覆盖率266
9.6.10在状态和翻转中使用通配符266
9.6.11忽略数值266
9.6.12不合法的仓267
9.6.13状态机的覆盖率268
9.7交叉覆盖率268
9.7.1基本的交叉覆盖率的例子268
9.7.2对交叉覆盖仓进行标号269
9.7.3排除掉部分交叉覆盖仓271
9.7.4从总体覆盖率的度量中排除掉部分覆盖点271
9.7.5从多个值域中合并数据272
9.7.6交叉覆盖的替代方式272
9.8通用的覆盖组274
9.8.1通过数值传递覆盖组参数274
9.8.2通过引用传递覆盖组参数274
9.9覆盖选项275
9.9.1单个实例的覆盖率275
9.9.2覆盖组的注释276
9.9.3覆盖阈值276
9.9.4打印空仓276
9.9.5覆盖率目标277
9.10覆盖率数据的分析277
9.11在仿真过程中进行覆盖率统计278
9.12结束语279
第10章 高级接口281
10.1 ATM路由器的虚接口281
10.1.1只含有物理接口的测试平台281
10.1.2使用虚接口的测试平台284
10.1.3将测试平台连接到端口列表中的接口287
10.1.4使用XMR(跨模块引用)连接接口和测试程序288
10.2连接到多个不同的设计配置290
10.2.1网格(Mesh)设计案例290
10.2.2对虚接口使用typedef293
10.2.3使用端口传递虚接口数组294
10.3接口中的过程代码295
10.3.1并行协议接口295
10.3.2串行协议接口296
10.3.3接口代码的局限性298
10.4结论298
第11章 完整的SystemVerilog测试平台299
11.1设计单元299
11.2测试平台的模块303
11.3修改测试326
11.3.1第一个测试——只有一个信元的测试326
11.3.2随机丢弃信元327
11.4结论328
第12章SystemVerilog与C语言的接口329
12.1传递简单的数值329
12.1.1传递整数和实数类型329
12.1.2导入(import)声明330
12.1.3参数方向331
12.1.4参数类型331
12.1.5导入数学库函数332
12.2连接简单的C子程序333
12.2.1使用静态变量的计数器333
12.2.2 chandle数据类型334
12.2.3值的压缩(packed)336
12.2.4四状态数值337
12.2.5从双状态数值转换到四状态数值339
12.3调用C+++程序339
12.3.1C+++中的计数器339
12.3.2静态方法340
12.3.3和事务级(Transaction Level)C+++模型通信341
12.4共享简单数组344
12.4.1一维数组——双状态344
12.4.2一维数组——四状态345
12.5开放数组(open array)346
12.5.1基本的开放数组346
12.5.2开放数组的方法347
12.5.3传递大小未定义的开放数组348
12.5.4 DPI中压缩(packed)的开放数组349
12.6共享复合类型349
12.6.1在SystemVerilog和C之间传递结构350
12.6.2在SystemVerilog和C之间传递字符串351
12.7纯导入方法和关联导入方法352
12.8在C中与SystemVerilog通信353
12.8.1一个简单的导出方法353
12.8.2调用SystemVerilog函数的C函数354
12.8.3调用SystemVerilog任务的C任务355
12.8.4调用对象中的方法357
12.8.5上下文(context)的含义360
12.8.6设置导入函数的作用域361
12.9与其他语言交互363
12.10结论364