图书介绍

SystemVerilog验证 测试平台编写指南PDF|Epub|txt|kindle电子书版本网盘下载

SystemVerilog验证 测试平台编写指南
  • (美)克里斯·斯皮尔(ChrisSpear)著;张春,麦宋平,赵益新译 著
  • 出版社: 北京:科学出版社
  • ISBN:9787030253064
  • 出版时间:2009
  • 标注页数:365页
  • 文件大小:16MB
  • 文件页数:389页
  • 主题词:硬件描述语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

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

热门推荐