CONOR BLOG
首页
搜索
友情链接
往期整理
文章分类
文章标签
历史归档
博客基础
写作是最值得投资的技能
Notion快捷键
Notion汉化
Notion Faster
关于我
文章
67
分类
3
标签
24
首页
搜索
友情链接
往期整理
文章分类
文章标签
历史归档
博客基础
写作是最值得投资的技能
Notion快捷键
Notion汉化
Notion Faster
关于我
技术分享
📖
SV(1)
发布于: 2023-4-20
最后更新: 2023-11-30
次查看
笔记
IC验证
目录
0%
一、专栏概述
二、SystemVerilog TestBench 功能
三、基于 EDA 的数字系统搞设计(SoC Design based on EDA)
四、数字芯片设计工艺
五、数字芯片设计流程中常使用的语言
六、数字芯片设计设计方法
七、制定验证计划和分层的验证平台
7.1、内容
7.2、验证策略
7.3、验证进度
7.4、验证计划的内容
7.4.1、验证的层次
7.4.2、需要的 EDA 工具
7.4.3、风险和前提条件
7.4.4、功能点划分
7.4.5、特定的验证方法
7.4.6、覆盖率需求
7.4.7、测试用例应用场景
7.4.8、资源要求
7.4.9、时间安排(Schedule)
7.5、验证环境
7.5.1、分层的验证平台
7.5.2、分层的验证平台好处
八、小结
一、内容概述
二、验证平台与待测设计的连接
2.1、Verilog 连接方式
2.2、Verilog 连接方式
2.3、SystemVerilog Interface
2.3.1、SystemVerilog Interface 简要介绍
2.3.2、 利用 interface 简化模块连接
2.3.3、如何使用 interface 中信号?
2.3.4、接口与端口的连接
2.3.5、interface modport
2.3.6、SystemVerilog interface 小结
2.4、Clocking
2.4.1、Clocking:激励的时序(1/8)(了解,不重要)
2.4.2、Clocking:激励的时序(2/8)
2.4.3、Clocking:激励的时序(3/8)(了解,不重要)
2.4.4、Clocking Skew(4/8)(skew 了解,不重要)(学习下语法,在 interface 中定义)
2.4.5、Clocking Blocks(5/8)(重要,学习下用法)
2.4.6、Clocking Block:信号同步(6/8)
2.4.7、Clocking Block:信号同步操作 (7/8)
2.4.7、Clocking 总结(8/8)
2.5、Program Block(干货)
2.5.1、Program Block(1/3)
2.5.2、Program Block(2/3)
2.5.3、Program Block(3/3)
2.6、验证平台 - 顶层文件 top
2.6.1、RTL Design with Interface
2.6.2、Test Program with Interface
2.6.3、Connection between DUT & test with interface
三、实践练习
3.1、编写 DUT 文件
3.2、编写 Interface 文件
3.3、编写 test 文件
3.4、编写 TestBench 文件
3.5、编译运行
2.1、SystemVerilog 语法规则
2.2、SystemVerilog 新的数据类型
2.3、SystemVerilog 数据类型
3.1、一维数组
3.2、多维数组
3.3、固定数组的基本操作
3.3.1、固定数组初始化:'{} '{n{}}
3.3.2、for:利用 for 循环语句进行初始化
3.3.3、foreach:利用 foreach 循环语句进行初始化
3.3.4、固定数组的赋值和比较
3.3.5、数组元素、数组元素部分选取
3.4、非填充数组(unpacked array)
3.5、填充数组(压缩数组,Packed Array)
3.6、混合数组(Mixed Arrays)
3.6.1、混合数组介绍
3.6.2、混合数组维度
3.7、填充数组和非填充数组比较
3.8、填充数组和常量数组初始化与内存存储比较
3.9、小测试
12.1、bit/logic 练习
12.1.1、二值和四值变量初始值练习
12.1.2、$isunknown练习
12.1.3、无符号和有符号数练习
12.1.4、全0/1/x/z赋值练习
12.2、固定数组练习
12.2.1、unpacked array ininial demo(非填充数组初始化 demo)
12.2.2、unpacked array assignment demo(非填充数组赋值 demo)
12.2.3、unpacked array partial assign demo(非填充数组部分赋值 demo)
12.2.4、array over read demo(数组越界读 demo)
12.2.5、packed array assign demo(填充数组赋值 demo)
12.3、动态数组练习
12.3.1、dynamic array initial demo(动态数组初始化 demo)
12.3.2、dynamic array assignment demo(动态数组赋值 demo)
12.3.3、dynamic array delete demo(动态数组删除 demo)
12.4、队列练习
12.4.1、队列内建函数 demo(有 bug)
12.4.2、队列插入删除 demo
12.4.3、入队出队 demo
12.5、数组方法练习
12.5.1、求和、求积方法 demo
12.5.2、队列找某元素或索引方法,带条件的求和 demo
12.6、结构体、枚举练习
12.6.1、结构体(unpacked struct)赋值 demo
12.6.2、结构体(packed struct)赋值 demo
12.6.3、枚举的赋值 demo
12.7、字符串练习
12.7.1、字符串赋值 demo
12.7.2、获取、写入字符串中的单个字符 demo
12.7.3、截取字符串的某一部分
3.1、自增和自减操作符
3.2、逻辑比较操作符
3.3、inside 关键字
4.1、变量类型转换符type' (expression)
4.2、$cast强制类型转换
4.3、变量位宽转换(Size Casting)
4.4、变量符号位转换
5.1、for 循环语句
5.2、do...while 循环语句
5.3、SystemVerilog 增强 case 语句 - case/casex/casez
6.1、Verilog task 和 function 概述
6.2、SystemVerilog task 和 function
7.1 逻辑操作符和运算操作符练习
7.1.1、比较运算符 demo
7.1.2、逻辑运算符!和算术运算符~的差异 demo
7.1.3、移位操作 demo
7.1.4、++i和i++区别 demo
7.1.5、inside关键字 demo
7.2、循环练习
7.2.1、不同的initial块共用同一个全局变量 demo
7.2.2、不同的initial块使用本地变量 demo
7.2.3、不同的initial块使用automatic定义变量 demo
7.2.4、while 和 do...while 执行过程 demo
7.3、case/casez/casex 分支区别练习
7.4、task/function 练习
7.4.1、function 封装结构体 demo
7.4.2、ref参数 demo
参考
2.1、为什么要使用面向对象编程的方法?
2.2、面向对象的基本概念
2.3、面向对象编程的基本术语
2.4、面向对象编程的优势
2.5、第一个类
2.5、句柄(Handle)
2.6、对象内存空间释放
2.7、使用对象
2.8、类的子程序(subprocedure)(方法)
2.9、在一个类中使用另外一个类
2.10、句柄的用法
2.11、静态变量
2.12、OOP:继承 Inheritance
2.13、数据保护
2.13.1、数据保护:本地变量 local
2.13.2、数据保护:保护变量 protected
2.14、抽象类和虚方法 virtual methods
2.15、OOP:多态 Polymorphism
2.16、参数化类
2.17、初始化类的属性
3.1、OOP Basic Class Demo
3.1.1、句柄地址分配以及 CRC 校验计算
3.1.2、句柄赋值和内存释放 demo
3.1.3、浅复制 demo
3.2、OOP Extend Class Demo
3.2.1、类继承基本使用 demo
3.2.2、多态 demo
2.1、为什么使用随机化验证策略(重要)
2.2、随机内容有哪些(抽象,了解)
2.3、SystemVerilog 的随机化
2.3.1、rand 随机变量
2.3.2、randc 随机变量
2.3.3、带随机变量的类
2.3.4、randomize() 函数(启动随机变量)
2.3.5、约束解释器
2.3.6、constraint 约束语句块
2.3.7、随机化的约束:简单的表达式
2.3.8、随机化的约束:设置范围操作符
2.3.9、随机化的约束:权重分布
2.3.10、随机化的约束:双向约束
2.3.11、随机化的约束:条件约束
2.3.12、随机化的约束的结果可能性:无约束情况
2.3.13、随机化的约束的结果可能性:有约束情况
2.3.14、随机化的约束:functions
2.3.15、随机化的约束:约束保护
2.3.16、激活或关闭随机变量(randomize 的大开关)
2.3.17、激活或关闭约束(constraint 的大开关)
2.3.18、测试题
2.1、并发性含义
2.2、并发线程执行
2.3、并发线程执行模式
3.1、语句集合
3.2、fork-join创建并发线程
3.3、join 选项
3.4、并发线程控制
3.5、测试题
X.1、fork...join/join_any/join_none Demo
2.1、Verilog event
2.2、SystemVerilog event
2.3、事件 event :语句阻塞在事件的边沿
2.4、事件 event:等待一个事件触发
2.5、事件中的循环
2.6、event 可以用作参数
2.7、内部线程通信机制:event
3.1、旗语(信号量) semaphore
3.2、使用new函数,创建semaphore buckets
3.3、信号量获取与释放以及try_get与get释义
4.1、邮箱 mailbox
4.2、使用 new 新建邮箱
4.3、验证平台中的邮箱
4.4、验证平台中非同步线程之间的通信
4.5、验证平台中同步线程之间的通信
4.6、验证平台中的线程和内部通信
X.1、event 练习
x.1.1、线程等待@和触发>demo
x.1.2、线程等待wait(event_name.triggered)和触发>demo
x.1.3、event作为参数传递 demo
X.2、semaphore 练习
X.3、mailbox 练习
X.3.1、基本整型传递(邮箱异步)Demo
X.3.2、基本整型传递(邮箱同步)Demo
X.3.3、传递 class 数据
一、内容概述
二、基于覆盖率驱动的验证技术
三、功能覆盖率模型
四、功能覆盖率收敛
五、功能覆盖率数据
六、功能覆盖率数据的归一化和分析
七、覆盖率的类型:RTL 代码覆盖率
八、覆盖率的类型:断言覆盖率
九、覆盖率的类型:功能覆盖率
九、覆盖率的类型:功能覆盖率 VS 代码覆盖率
十、基于覆盖率驱动的验证策略
十一、覆盖率与缺陷率(Bug rate)的关系
十二、定义功能覆盖率模型
十三、功能覆盖率的建模
十四、功能覆盖率报告
十五、功能覆盖率的采样事件
十六、功能覆盖率:触发 SystemVerilog Assertion
十七、定义覆盖点:信号和表达式
十八、定义覆盖点:bins
十九、定义覆盖点:条件覆盖
二十、定义覆盖点:状态跳转覆盖
二十一、定义覆盖点:交叉覆盖
二十二、参数化的覆盖率:提供代码的重用性
二十三、covergroup 实战补充(2021-10-15)
二十四、小结
X、实践练习
X.1、编写源代码
X.2、运行源代码
Conor
光机设计与可靠性工程实践者
文章
67
分类
3
标签
24
统计
文章数:
67
访问量:
访客数:
最新发布
光学设备随机振动与冲击标准:从两个案例到可执行规范
2026-9-24
可靠性工程师工作全流程:从需求定义到失效闭环
2026-9-21
从光机设计到可靠性:一次从“做出来”到“跑得住”的职业转向
2026-9-21
MATLAB如何进行公式推导
2025-8-21
有限元分析——模态分析
2025-2-6
简历制作
2025-2-1
公告
🎉持续更新中🎉
目录
0%
一、专栏概述
二、SystemVerilog TestBench 功能
三、基于 EDA 的数字系统搞设计(SoC Design based on EDA)
四、数字芯片设计工艺
五、数字芯片设计流程中常使用的语言
六、数字芯片设计设计方法
七、制定验证计划和分层的验证平台
7.1、内容
7.2、验证策略
7.3、验证进度
7.4、验证计划的内容
7.4.1、验证的层次
7.4.2、需要的 EDA 工具
7.4.3、风险和前提条件
7.4.4、功能点划分
7.4.5、特定的验证方法
7.4.6、覆盖率需求
7.4.7、测试用例应用场景
7.4.8、资源要求
7.4.9、时间安排(Schedule)
7.5、验证环境
7.5.1、分层的验证平台
7.5.2、分层的验证平台好处
八、小结
一、内容概述
二、验证平台与待测设计的连接
2.1、Verilog 连接方式
2.2、Verilog 连接方式
2.3、SystemVerilog Interface
2.3.1、SystemVerilog Interface 简要介绍
2.3.2、 利用 interface 简化模块连接
2.3.3、如何使用 interface 中信号?
2.3.4、接口与端口的连接
2.3.5、interface modport
2.3.6、SystemVerilog interface 小结
2.4、Clocking
2.4.1、Clocking:激励的时序(1/8)(了解,不重要)
2.4.2、Clocking:激励的时序(2/8)
2.4.3、Clocking:激励的时序(3/8)(了解,不重要)
2.4.4、Clocking Skew(4/8)(skew 了解,不重要)(学习下语法,在 interface 中定义)
2.4.5、Clocking Blocks(5/8)(重要,学习下用法)
2.4.6、Clocking Block:信号同步(6/8)
2.4.7、Clocking Block:信号同步操作 (7/8)
2.4.7、Clocking 总结(8/8)
2.5、Program Block(干货)
2.5.1、Program Block(1/3)
2.5.2、Program Block(2/3)
2.5.3、Program Block(3/3)
2.6、验证平台 - 顶层文件 top
2.6.1、RTL Design with Interface
2.6.2、Test Program with Interface
2.6.3、Connection between DUT & test with interface
三、实践练习
3.1、编写 DUT 文件
3.2、编写 Interface 文件
3.3、编写 test 文件
3.4、编写 TestBench 文件
3.5、编译运行
2.1、SystemVerilog 语法规则
2.2、SystemVerilog 新的数据类型
2.3、SystemVerilog 数据类型
3.1、一维数组
3.2、多维数组
3.3、固定数组的基本操作
3.3.1、固定数组初始化:'{} '{n{}}
3.3.2、for:利用 for 循环语句进行初始化
3.3.3、foreach:利用 foreach 循环语句进行初始化
3.3.4、固定数组的赋值和比较
3.3.5、数组元素、数组元素部分选取
3.4、非填充数组(unpacked array)
3.5、填充数组(压缩数组,Packed Array)
3.6、混合数组(Mixed Arrays)
3.6.1、混合数组介绍
3.6.2、混合数组维度
3.7、填充数组和非填充数组比较
3.8、填充数组和常量数组初始化与内存存储比较
3.9、小测试
12.1、bit/logic 练习
12.1.1、二值和四值变量初始值练习
12.1.2、$isunknown练习
12.1.3、无符号和有符号数练习
12.1.4、全0/1/x/z赋值练习
12.2、固定数组练习
12.2.1、unpacked array ininial demo(非填充数组初始化 demo)
12.2.2、unpacked array assignment demo(非填充数组赋值 demo)
12.2.3、unpacked array partial assign demo(非填充数组部分赋值 demo)
12.2.4、array over read demo(数组越界读 demo)
12.2.5、packed array assign demo(填充数组赋值 demo)
12.3、动态数组练习
12.3.1、dynamic array initial demo(动态数组初始化 demo)
12.3.2、dynamic array assignment demo(动态数组赋值 demo)
12.3.3、dynamic array delete demo(动态数组删除 demo)
12.4、队列练习
12.4.1、队列内建函数 demo(有 bug)
12.4.2、队列插入删除 demo
12.4.3、入队出队 demo
12.5、数组方法练习
12.5.1、求和、求积方法 demo
12.5.2、队列找某元素或索引方法,带条件的求和 demo
12.6、结构体、枚举练习
12.6.1、结构体(unpacked struct)赋值 demo
12.6.2、结构体(packed struct)赋值 demo
12.6.3、枚举的赋值 demo
12.7、字符串练习
12.7.1、字符串赋值 demo
12.7.2、获取、写入字符串中的单个字符 demo
12.7.3、截取字符串的某一部分
3.1、自增和自减操作符
3.2、逻辑比较操作符
3.3、inside 关键字
4.1、变量类型转换符type' (expression)
4.2、$cast强制类型转换
4.3、变量位宽转换(Size Casting)
4.4、变量符号位转换
5.1、for 循环语句
5.2、do...while 循环语句
5.3、SystemVerilog 增强 case 语句 - case/casex/casez
6.1、Verilog task 和 function 概述
6.2、SystemVerilog task 和 function
7.1 逻辑操作符和运算操作符练习
7.1.1、比较运算符 demo
7.1.2、逻辑运算符!和算术运算符~的差异 demo
7.1.3、移位操作 demo
7.1.4、++i和i++区别 demo
7.1.5、inside关键字 demo
7.2、循环练习
7.2.1、不同的initial块共用同一个全局变量 demo
7.2.2、不同的initial块使用本地变量 demo
7.2.3、不同的initial块使用automatic定义变量 demo
7.2.4、while 和 do...while 执行过程 demo
7.3、case/casez/casex 分支区别练习
7.4、task/function 练习
7.4.1、function 封装结构体 demo
7.4.2、ref参数 demo
参考
2.1、为什么要使用面向对象编程的方法?
2.2、面向对象的基本概念
2.3、面向对象编程的基本术语
2.4、面向对象编程的优势
2.5、第一个类
2.5、句柄(Handle)
2.6、对象内存空间释放
2.7、使用对象
2.8、类的子程序(subprocedure)(方法)
2.9、在一个类中使用另外一个类
2.10、句柄的用法
2.11、静态变量
2.12、OOP:继承 Inheritance
2.13、数据保护
2.13.1、数据保护:本地变量 local
2.13.2、数据保护:保护变量 protected
2.14、抽象类和虚方法 virtual methods
2.15、OOP:多态 Polymorphism
2.16、参数化类
2.17、初始化类的属性
3.1、OOP Basic Class Demo
3.1.1、句柄地址分配以及 CRC 校验计算
3.1.2、句柄赋值和内存释放 demo
3.1.3、浅复制 demo
3.2、OOP Extend Class Demo
3.2.1、类继承基本使用 demo
3.2.2、多态 demo
2.1、为什么使用随机化验证策略(重要)
2.2、随机内容有哪些(抽象,了解)
2.3、SystemVerilog 的随机化
2.3.1、rand 随机变量
2.3.2、randc 随机变量
2.3.3、带随机变量的类
2.3.4、randomize() 函数(启动随机变量)
2.3.5、约束解释器
2.3.6、constraint 约束语句块
2.3.7、随机化的约束:简单的表达式
2.3.8、随机化的约束:设置范围操作符
2.3.9、随机化的约束:权重分布
2.3.10、随机化的约束:双向约束
2.3.11、随机化的约束:条件约束
2.3.12、随机化的约束的结果可能性:无约束情况
2.3.13、随机化的约束的结果可能性:有约束情况
2.3.14、随机化的约束:functions
2.3.15、随机化的约束:约束保护
2.3.16、激活或关闭随机变量(randomize 的大开关)
2.3.17、激活或关闭约束(constraint 的大开关)
2.3.18、测试题
2.1、并发性含义
2.2、并发线程执行
2.3、并发线程执行模式
3.1、语句集合
3.2、fork-join创建并发线程
3.3、join 选项
3.4、并发线程控制
3.5、测试题
X.1、fork...join/join_any/join_none Demo
2.1、Verilog event
2.2、SystemVerilog event
2.3、事件 event :语句阻塞在事件的边沿
2.4、事件 event:等待一个事件触发
2.5、事件中的循环
2.6、event 可以用作参数
2.7、内部线程通信机制:event
3.1、旗语(信号量) semaphore
3.2、使用new函数,创建semaphore buckets
3.3、信号量获取与释放以及try_get与get释义
4.1、邮箱 mailbox
4.2、使用 new 新建邮箱
4.3、验证平台中的邮箱
4.4、验证平台中非同步线程之间的通信
4.5、验证平台中同步线程之间的通信
4.6、验证平台中的线程和内部通信
X.1、event 练习
x.1.1、线程等待@和触发>demo
x.1.2、线程等待wait(event_name.triggered)和触发>demo
x.1.3、event作为参数传递 demo
X.2、semaphore 练习
X.3、mailbox 练习
X.3.1、基本整型传递(邮箱异步)Demo
X.3.2、基本整型传递(邮箱同步)Demo
X.3.3、传递 class 数据
一、内容概述
二、基于覆盖率驱动的验证技术
三、功能覆盖率模型
四、功能覆盖率收敛
五、功能覆盖率数据
六、功能覆盖率数据的归一化和分析
七、覆盖率的类型:RTL 代码覆盖率
八、覆盖率的类型:断言覆盖率
九、覆盖率的类型:功能覆盖率
九、覆盖率的类型:功能覆盖率 VS 代码覆盖率
十、基于覆盖率驱动的验证策略
十一、覆盖率与缺陷率(Bug rate)的关系
十二、定义功能覆盖率模型
十三、功能覆盖率的建模
十四、功能覆盖率报告
十五、功能覆盖率的采样事件
十六、功能覆盖率:触发 SystemVerilog Assertion
十七、定义覆盖点:信号和表达式
十八、定义覆盖点:bins
十九、定义覆盖点:条件覆盖
二十、定义覆盖点:状态跳转覆盖
二十一、定义覆盖点:交叉覆盖
二十二、参数化的覆盖率:提供代码的重用性
二十三、covergroup 实战补充(2021-10-15)
二十四、小结
X、实践练习
X.1、编写源代码
X.2、运行源代码