SystemVerilog数字集成电路功能验证

深信息名师+微纳集成电路研究院校企合作
分享 推荐 0 收藏 13 阅读 2.0K
王旭 (主编) 陈艳 田晓华 汤顺 (副主编) 978-7-115-61405-6

关于本书的内容有任何问题,请联系 人邮社-赵亮

实例丰富,引导读者掌握SystemVerilog核心内容
快速掌握面向对象编程,为学习UVM打下坚实基础

内容摘要

移动端请搜索“学验证”关注公众号,获取资源
代码在线查看:https://gitee.com/onexu/sv
SystemVerilog是当前国内外被广泛使用的数字集成电路验证语言,它可以高效地对被测设计进行受约束的随机测试,从而在尽可能短的时间内达到令人满意的代码覆盖率和功能覆盖率。熟练掌握 SystemVerilog语言是进一步学习UVM 验证方法学的基础。 本书比较全面地讲解了SystemVerilog语言和面向对象编程。全书共分为10章,分别为验证导论、程序块和数据类型、过程语句和例程、接口和断言、面向对象编程、随机化、进程间通信、功能覆盖率、编写层次化测试平台、直接编程接口。为了更好地衔接UVM的学习,本书使用SystemVerilog实现了UVM 中的配置数据库、测试登记表、代理类和工厂机制(包括重写功能)。通过阅读本书中的简化UVM代码,读者可以更快速、清晰地理解UVM常用机制的底层实现原理,为后续系统学习UVM验证方法学打下坚实的基础。 本书适合作为高等院校集成电路、微电子、计算机相关专业的教材,同时适用于具有一定Verilog HDL编程基础的人员参考使用,也可以作为数字集成电路验证工程师的语法参考手册。

图书详情

目录

第一章验证导论
1.1 芯片设计流程
1.2 功能验证与测试平台
1.3 验证流程
1.4 验证语言和验证方法学
1.5 定向测试和受约束随机测试
1.6 层次化测试平台
1.7 层次化测试平台的执行
1.8 练习题
第二章测试平台和数据类型
2.1 测试平台
2.1.1 被测设计
2.1.2 测试模块
2.1.3 测试平台顶层模块
2.2 基本数据类型
2.2.1 reg 和wire 类型
2.2.1.1 描述组合电路
2.2.1.2 描述时序电路
2.2.1.3 阻塞赋值与非阻塞赋值
2.2.2 四值logic 类型
2.2.3 二值数据类型
2.2.4 常量和字符串
2.3 时间值
2.3.1 时间常量
2.3.2 时间变量
2.4 非压缩数组和压缩数组
2.4.1 非压缩数组
2.4.2 压缩数组
2.4.3 数组直接量
2.4.4 数组的遍历
2.4.5 数组的赋值和比较
2.5 动态数组
2.6 关联数组
2.7 队列
2.8 数组的内置方法
2.8.1 数组缩减方法
2.8.2 数组定位方法
2.8.3 数组排序方法
2.9 自定义数据类型
2.10 结构和联合
2.10.1 结构
2.10.2 联合
2.11 枚举
2.11.1 定义枚举类型
2.11.2 枚举的方法
2.11.3 枚举变量和类型转换
2.12 流操作符
2.13 包
2.14 练习题
第三章结构化过程
3.1 initial 和always 过程
3.2 运算符和过程语句
3.3 任务和函数
3.3.1 任务和函数的特点
3.3.2 例程声明的简化
3.3.3 例程参数的引用传递
3.3.4 例程参数的默认值
3.4 静态例程和自动例程
3.5 练习题
第四章接口
4.1 接口的定义和使用
4.1.1 使用接口简化连接
4.1.2 modport
4.2 同步信号的驱动与采样
4.2.1 时钟抖动和时钟偏移
4.2.2 建立时间和保持时间
4.2.3 时钟块
4.2.4 时钟偏移
4.2.5 采样时钟块信号
4.2.6 驱动时钟块信号
4.2.7 接口信号同步
4.2.8 时钟块中的双向信号
4.3 练习题
第五章面向对象编程
5.1 类的定义
5.2 对象、句柄和构造方法
5.2.1 默认构造方法
5.2.2 自定义构造方法
5.2.3 句柄
5.2.4 在类中使用句柄
5.2.5 句柄数组
5.2.6 对象的传递
5.3 类的继承
5.3.1 派生类
5.3.2 虚方法和多态
5.3.3 抽象类和纯虚方法
5.3.4 句柄类型转换
5.4 接口类与多继承
5.5 类的封装
5.6 对象复制
5.6.1 简单对象复制
5.6.2 复杂对象复制
5.6.3 派生类对象复制
5.7 参数化类
5.7.1 定义参数化类
5.7.2 参数化类的应用
5.7.3 共享参数化类
5.8 静态属性和静态方法
5.8.1 静态属性
5.8.2 静态句柄
5.8.3 静态方法
5.9 单例类
5.9.1 打印信息的动态类
5.9.2 打印信息的单例类
5.10 UVM 配置数据库
5.11 UVM 工厂机制
5.11.1 使用静态方法的测试登记表
5.11.2 工厂机制
5.11.3 组件基类
5.11.4 代理类
5.11.5 工厂类
5.11.6 封装工厂机制
5.11.7 UVM-1.2 中的工厂机制
5.11.8 组件类加入工厂机制
5.11.9 测试类加入工厂机制
5.11.10 修改测试平台
5.11.11 UVM 工厂制造
5.12 虚接口
5.12.1 使用例程参数连接接口
5.12.2 使用跨模块引用连接接口
5.12.3 使用config_db 连接接口
5.13 练习题
第六章随机化
6.1 带有随机属性的类
6.1.1 随机属性
6.1.2 约束块
6.1.3 随机化方法
6.1.4 约束开关
6.1.5 随机开关
6.1.6 伪随机发生器种子
6.2 随机属性的约束
6.2.1 分布约束
6.2.2 取值集合
6.2.3 唯一性约束
6.2.4 条件约束
6.2.5 等价操作符
6.2.6 行内约束
6.2.7 软约束
6.3 随机数组的约束
6.3.1 数组长度的约束
6.3.2 数组元素和的约束
6.3.3 数组元素的约束
6.3.4 没有重复值的随机数组
6.4 约束随机属性求解顺序
6.5 pre_randomize 和post_randomize 方法
6.6 随机数函数
6.7 练习题
第七章进程间通信
7.1 块语句和进程
7.1.1 块语句
7.1.2 动态子进程
7.1.3 并行块中的自动变量
7.2 进程控制
7.2.1 wait fork
7.2.2 disable
7.2.3 disable fork
7.2.4 进程类
7.3 事件的触发和等待
7.3.1 阻塞事件与非阻塞事件
7.3.2 triggered 方法
7.3.3 传递事件
7.3.4 等待多个事件
7.4 信号量
7.5 信箱
7.5.1 使用信箱发送事务
7.5.2 使用信箱接收事务
7.5.3 使用信箱交换事务
7.6 进程同步
7.6.1 使用事件同步进程
7.6.2 使用信箱同步进程
7.7 练习题
第八章功能覆盖
8.1 覆盖类型
8.1.1 代码覆盖
8.1.2 功能覆盖
8.2 覆盖组和覆盖点
8.2.1 模块中的覆盖组
8.2.2 类中的覆盖组
8.2.3 条件覆盖
8.3 覆盖组的触发
8.3.1 使用sample 方法触发覆盖组
8.3.2 使用事件触发覆盖组
8.3.3 使用断言触发覆盖组
8.3.4 使用回调触发覆盖组
8.4 仓
8.4.1 创建仓
8.4.2 通用覆盖组
8.4.3 表达式的采样
8.4.4 限制仓的个数
8.4.5 创建忽略仓和非法仓
8.4.6 枚举变量与仓
8.4.7 转换覆盖
8.4.8 通配符仓
8.5 交叉覆盖
8.5.1 建立交叉覆盖
8.5.2 binsof 和intersect 结构
8.6 覆盖选项
8.6.1 实例选项
8.6.2 类型选项
8.6.3 功能覆盖率与权重
8.6.4 覆盖组的注释
8.6.5 打印未被覆盖的交叉仓
8.6.6 覆盖目标
8.7 覆盖率数据分析
8.8 练习题
第九章编写层次化测试平台
9.1 被测设计
9.2 层次化测试平台结构
9.3 搭建层次化测试平台
9.3.1 添加接口
9.3.2 添加组件基类
9.3.3 添加driver 类
9.3.4 跨模块信号的连接
9.3.5 添加transaction 类
9.3.6 添加environment 类
9.3.7 添加monitor 类
9.3.8 添加agent 类
9.3.9 添加scoreboard 类
9.3.10 添加sequencer 类
9.4 添加工厂机制
9.5 添加回调技术
9.5.1 回调技术
9.5.2 使用回调修改激励
9.5.3 使用回调收集功能覆盖
9.6 练习题
第十章断言
10.1 断言类型
10.1.1 立即断言
10.1.2 并发断言
10.2 断言语句类型
10.2.1 assert 语句
10.2.2 assume 语句
10.2.3 cover 语句
10.3 序列操作符
10.3.1 连续重复操作符
10.3.2 非连续重复操作符
10.3.3 goto 重复操作符
10.3.4 周期延迟操作符
10.3.5 二进制操作符
10.3.6 操作符throughout
10.3.7 操作符within
10.4 采样值系统函数
10.5 声明序列
第十一章直接编程接口
11.1 DPI 术语说明
11.2 导入和导出函数
11.3 基本数据类型的匹配
11.3.1 整数和浮点数的数据类型映射
11.3.2 标量的数据类型映射
11.3.3 向量的数据类型映射
11.4 chandle 与C 指针的数据类型映射
11.4.1 使用静态变量的C 函数
11.4.2 使用指针的C 函数
11.5 传递一维定长数组
11.5.1 传递二值一维数组
11.5.2 传递四值一维数组
11.6 开放数组
11.6.1 传递一维动态数组
11.6.2 传递多维数组
11.6.3 开放数组相关函数
11.6.4 传递压缩数组
11.7 传递SystemVerilog 结构
11.8 传递C 字符串
11.9 共享C++ 对象
11.9.1 计数器类
11.9.2 包装函数
11.9.3 封装导入函数
11.10 共享SystemVerilog 对象
11.10.1 导出函数
11.10.2 导出任务
11.10.3 共享SystemVerilog 对象
11.11 纯导入和语境导入函数/任务
11.11.1 纯导入函数
11.11.2 语境导入函数
11.11.3 更改语境
11.12 SystemVerilog 与Python 混合编程
11.12.1 调用Python 脚本
11.12.2 调用不带参数的Python 函数
11.12.3 调用带有参数的Python 函数
11.13 练习题
A Makefile 文件
参考文献302

读者评论

赶紧抢沙发哦!

我要评论

作者介绍

王旭博士,深圳信息职业技术学院微电子学院讲师,深圳大学半导体制造学院外聘讲师,担任某上市公司IC验证经理,负责芯片系统级验证方面的工作。目前主讲集成电路设计、形式验证和功能验证方面的课程、同时负责为企业重大项目制定系统级验证解决方案。

购买本书用户

相关图书

人邮微信
本地服务
教师服务
教师服务
读者服务
读者服务
返回顶部
返回顶部