本文记录使用Questasim的一些coverage分析和验证管理方法。 UCDB(统一覆盖数据库) 是包含多种验证数据的格式。
覆盖率浏览编辑模式
模式 | 分析类型 | 使用方法 |
---|---|---|
Simulation | 仿真交互 | coverage,toggle和vcover命令 |
Coverage View | 后处理 | coverage open .ucdb or vsim -viewcov .ucdb |
Batch | 批处理 | vcover +commands(merge, report, stats, testnames…) |
- 指定测试名称保存覆盖率
coverage save -testname <name> <name>.ucdb
验证计划表格
- 采用标准编辑工具编写,验证计划各部分以树形结构存储
- 验证计划表格管理Excel插件位置:
<install_dir>/vm_src/QuestaExcelAddIn.msi
采用TCL脚本编译仿真和收集覆盖率
vsim -c -do mcdf_sim.do
# mcdf_sim.do (TCL script for a mini regression)
onbreak resume # break或error后不中断
onerror resume
# set environment variables
setenv DUT_SRC ../mcdf/v0
setenv TB_SRC .
# clean the environment and remove trash files
set delfiles [glob work *.log *.ucdb sim.list]
file delete -force {*}$delfiles
# compile the design and dut with a filelist
vlib work
vlog -sv -cover bst -timescale=1ps/1ps -l comp.log +incdir+$env(DUT_SRC) -f complist.f
# prepare simrun folder
set timetag [clock format [clock seconds] -format "%Y%b%d-%H_%M"]
file mkdir regr_ucdb_${timetag}
# simulate with specific testname sequentially
set TestSets { {mcdf_data_consistence_basic_test 1} \
{mcdf_full_random_test 3} \
{mcdf_reg_read_write_test 1} \
{mcdf_reg_stability_test 1} \
{mcdf_down_stream_low_bandwidth_test 3} \
}
foreach testset $TestSets {
set testname [lindex $testset 0]
set LoopNum [lindex $testset 1]
for {set loop 0} {$loop < $LoopNum} {incr loop} {
set seed [expr int(rand() * 100)]
echo simulating $testname
echo $seed +TESTNAME=$testname -l regr_ucdb_${timetag}/run_${testname}_${seed}.log
vsim -onfinish stop -cover -cvgperinstance -cvgmergeinstances -sv_seed $seed \
+TESTNAME=$testname -l regr_ucdb_${timetag}/run_${testname}_${seed}.log work.tb
run -all
coverage save regr_ucdb_${timetag}/${testname}_${seed}.ucdb
quit -sim
}
}
# merge the ucdb per test
vcover merge -testassociated regr_ucdb_${timetag}/regr_${timetag}.ucdb testplan.ucdb {*}[glob regr_ucdb_${timetag}/*.ucdb]
quit -f
验证计划数据追踪
View -> Verification Management -> Browser -> 双击merge好的ucdb (ucdb + testplan)
vsim -viewcov <merged.ucdb>
覆盖率结果分析
结果分析需TDB(Triage Database) 格式文件,其由UCDB、Xform(transform rule)、(LOG/WLF)文件生成。TDB文件可用于问题分析、布局排列、信息过滤、层次显示配置、排序配置等。
- 一个预定义好的mcdf_tdbrule.xform
transform {.*(\w+) fmt_trans object at time (\d+)} -name comparing_rule {
field time {$2}
field severity {Info}
}
transform {.*(\d+) fmt_agt\.(\w+) monitored a packet:} -name fmt_monitor_rule {
field time {$1}
field severity {Info}
}
transform {# COVERAGE SUMMARY \n# total coverage: ((?:[+-])?\d+\.\d+) } -name coverage_rule {
field severity {Info}
}
transform {.*(\d+) \[INFO] \[REPORT] : \n(.*)\n# REPORT SUMMARY\n# info count: (\d+) \n# warning count: (\d+) \n# error count: (\d+) \n# fatal count: (\d+) } -name report_rule {
field severity {Info}
field time {$1}
}
- 默认UVM、断言等信息整理的xform文件位置:
<install_dir>/vm_src
- 生成数据分析文件
triage report -name <tdb_filename>
-severity FEW #只显示Fatal/Error/Warning信息
覆盖率贡献排名(rank)
Verification Browser -> Rank
vcover ranktest
验证计划报告(文本/html)
Tools -> Coverage Report -> Text/Html
vcover report -output <output_file>
vcover report -html
验证趋势分析(-trend)
Verification Management Browser -> 右键点击 .ucdb -> Trend Analysis -> View Trender
vcover merge -trend [-output] <trend_ucdb> <ucdb_inputs>