第1章
验证的困境:为什么需要随机激励?
从定向测试到随机测试的演进,覆盖率的定义与重要性。
基础概念
第2章
SystemVerilog随机化基础
rand与randc关键字,随机变量的声明与约束块(constraint)的引入。
SV随机化
第3章
约束块详解(上)
关系约束(>、<、==)、范围约束(inside)、权重分布(dist)。
约束关系
第4章
约束块详解(下)
条件约束(if-else、->)、foreach约束、solve...before顺序约束。
约束顺序
第5章
随机化函数
randomize()与randomize() with {},pre_randomize()与post_randomize()回调函数。
函数回调
第6章
数组与队列的随机化
动态数组、队列的随机化,利用foreach生成复杂数据结构。
数组队列
第7章
随机化类设计
将随机变量封装在类中,使用new()构造函数初始化,随机化类的实例。
OOP类
第8章
覆盖率基础
代码覆盖率(line/toggle/fsm)与功能覆盖率(covergroup)的区别。
覆盖率基础
第9章
covergroup与coverpoint
定义covergroup,使用coverpoint采样变量,bin的自动创建与手动定义。
covergroupbin
第10章
交叉覆盖率(cross coverage)
使用cross定义多个coverpoint的组合,忽略bin与非法bin(ignore_bins/illegal_bins)。
交叉bin
第11章
覆盖率选项
option.per_instance、option.at_least、option.weight、option.comment等常用选项。
选项配置
第12章
覆盖率收集策略
在仿真中实时收集覆盖率,使用$coverage_merge()合并多个仿真结果。
合并策略
第13章
约束与覆盖率的协同
为什么约束会影响覆盖率?如何通过调整约束来填补覆盖空洞。
协同空洞
第14章
覆盖驱动验证(CDV)方法论
从覆盖率反馈到约束修改的闭环流程。
CDV方法论
第15章
动态约束调整
在仿真过程中根据覆盖率反馈动态修改约束,使用randcase与randsequence。
动态randcase
第16章
利用SV断言(SVA)辅助覆盖
使用cover property收集时序行为的覆盖率。
SVA断言
第17章
实战案例(一):ALU验证环境
一个简单的ALU验证环境,定义随机激励与覆盖组。
ALU实战
第18章
实战案例(二):总线事务(AXI-like)
总线事务的随机化与覆盖分析。
AXI总线
第19章
实战案例(三):Ethernet数据包
复杂数据包(Ethernet packet)的随机生成与覆盖。
Ethernet数据包
第20章
覆盖率驱动的测试计划
如何根据设计规格书制定覆盖点,将覆盖点映射到约束。
计划映射
第21章
回归测试中的覆盖率管理
如何组织回归测试,确保覆盖率收敛。
回归管理
第22章
覆盖率分析工具
使用仿真器(VCS/Questa)的覆盖率报告,分析未覆盖的代码与功能点。
工具报告
第23章
随机种子管理
种子对覆盖率的影响,如何通过多种子仿真加速收敛。
种子收敛
第24章
高级随机化技术
随机化序列(sequence)、随机化延迟、随机化错误注入。
高级序列
第25章
SystemVerilog随机化与UVM结合
UVM中的uvm_do宏与随机化,uvm_reg的随机化。
UVMuvm_do
第26章
UVM寄存器模型覆盖
对寄存器读写操作的覆盖,使用uvm_reg覆盖模型。
寄存器UVM
第27章
覆盖率驱动的验证环境架构
如何设计一个以覆盖率为核心的验证环境。
架构CDV
第28章
收敛性分析
如何判断覆盖率是否收敛?收敛曲线的绘制与解读。
收敛曲线
第29章
项目实战:完整IP验证项目
从制定计划到覆盖率收敛的全流程。
实战全流程
第30章
总结与展望
随机激励与覆盖收敛的最佳实践,未来趋势(ML辅助覆盖收敛)。
总结ML