芯片原厂必学课程 - 第九篇章 - IC 验证篇
09-03 覆盖率收集
新芯设计:专注,积累,探索,挑战
引言
NOTES:本文来自《芯片原厂必学课程 - 第九篇章 - IC 验证篇》技术专栏
🌏 一、覆盖率收集
✅ 1. 覆盖率定义
✉ 覆盖率:指的是验证工作中至关重要的一个环节,通过覆盖率驱动的方式,不仅可以量化验证的进度,还能够保证验证的完备性
✉ CDV:指的是覆盖率驱动验证
✅ 2. 覆盖率类型
✉ 代码覆盖率:UT 验证比较重视,要求 100%
✉ 功能覆盖率:IT 验证比较重视,要求 100%
✅ 3. 代码覆盖率
✉ 行覆盖率 LINE COVERAGE:记录程序的各行代码被执行的情况
✉ 条件覆盖率 COND COVERAGE:记录各个条件中的逻辑操作数量被执行的情况
✉ 跳转覆盖率 TOOGLE COVERAGE:记录单比特信号的 0/1 跳转情况
✉ 状态机覆盖率 FSM COVERAGE:记录状态机的各个状态被进入的次数,以及各个状态之间的跳转情况
✉ 分支覆盖率 BRANCH COVERAGE:记录 if-else 等语句中各个分支被执行的情况
✉ 路径覆盖率 PATH COVERAGE:记录程序的各个分支是否都被执行的情况,亦称之为断言覆盖
✅ 4. 功能覆盖率
✉ 定义:用户定义的,环境执行的,用于衡量被分解出来的验证点是否能够被测试到
✉ 分类:覆盖率组 COVERGROUP 和断言覆盖率 COVERPROPERTY
✅ 5. 覆盖率总结
✉ 不要过于相信和依赖代码覆盖率
✉ 重点做好代码覆盖率反标和分析
✉ 代码覆盖率的单一结果难以说明
🌏 二、如何输出覆盖率报告
这里给出了一个能够运行 VCS 仿真,打开 VERDI 波形,输出 COV 报告,清除工程缓存的 MAKEFILE 脚本,通过如下的一些命令,即可完成
✉ make run
✉ make verdi
✉ make cover
✉ make clean
export WORKAREA=$(shell pwd | sed 's&/verification&&')
run:
bsub -I \
vcs -sverilog -debug_acc+all -R -o simv -full64 -debug_access -l sim.log sim.v \
-top testbench \
+incdir+${WORKAREA}/hdl/riscv/rtl \
-f ${WORKAREA}/hdl/riscv/rtl/riscv_top.lst \
-cm cond+line+branch+fsm+assert+tgl \
-cm_dir cov/cov_test/cm -cm_log cov/cm.log \
+lint=TFIPC-L \
+lint=PCWM \
+fsdb+force \
+notimingcheck \
+nospecify \
+incdir+${WORKAREA} \
+define+TSMC_16_ULP
verdi:
bsub -I -J \
verdi -n 2 -XF verdi sim.v -sv -ssf wave_000.fsdb \
-top testbench \
-f ${WORKAREA}/hdl/riscv/rtl/riscv_top.lst \
-f ref.lst
+tarmac_on \
+incdir+../ \
+define+TSMC_16_ULP &
cover:
bsub -I urg -dir cov/cov_test/{cm, cm.vdb} -report urgReport
firefox urgReport/dashboard.html &
clean:
@rm -rf csrc/ *.txt novas* *.log simv* ucli.key verdiLog/ *.fsdb *vf cov/