代码覆盖率是衡量RTL代码在测试台上执行得有多好的一个指标。启用时,模拟器会自动提取代码覆盖率。AMD Vivado™ 模拟器目前支持四种类型的代码覆盖:line, branch, condition和 toggle。
当您为任何代码覆盖率类型启用代码覆盖率时,该工具会自动生成一个代码覆盖率数据库。要查看设计的覆盖范围,AMD Vivado™ 模拟器提供了一个名为xcrg(Xilinx覆盖率报告生成器)的独立可执行文件,可用于通过读取覆盖率数据库来生成覆盖率报告。模拟器支持的代码覆盖功能是:
模拟器支持的代码覆盖功能是:
•行/语句覆盖率以及语句的精确执行计数
•if-else、if-elsef、switch case、tenary操作符的分支机构覆盖范围
•在代码覆盖率报告中检测并突出显示其他缺失和默认缺失
•条件覆盖率,准确计数条件检查和评估为TRUE/FALSE的次数
•已打包/未打包的reg、位、逻辑、wire数据类型
•int、shorting、integer、字节数据类型和非动态结构成员
•使用xcrg生成代码覆盖率HTML报告
•设计代码覆盖率的面板视图
•整个设计的文件、模块和层次实例列表
•特定于文件的代码覆盖率视图、模块和特定于实例的视图
•使用合并不同运行的行/语句、分支、条件和切换覆盖范围xcrg
注意:目前,Vivado模拟器只支持SystemVerilog和Verilog代码的这些功能。VHDL还不受支持。
Table 17: xcrg Command Options and Description
xcrg Option | Description |
-db_name arg | xsim.covdb中数据库的名称。 如果未指定,则使用目录中存在的所有数据库。 |
-dir arg | xsim.covdb数据库目录所在的路径。 默认值为/xsim.covdb。 |
-file arg | 指定包含要还原的覆盖率数据库位置的文件。 |
-h | 打印帮助信息并退出。 |
-help | 打印帮助信息并退出。 |
-merge_db_name arg | 合并数据库的名称。默认值为xcrg_mdb。 |
-merge_dir arg | 保存合并数据库的目录。默认值为/xsim.covdb。 |
-nolog | 取消生成日志文件。 |
-report_dir arg | 保存覆盖率数据库和报告的目录。 此选项是强制性的 |
-report_format arg | 指定所需的覆盖率报告格式HTML或文本或全部。默认为HTML |
-log arg | 指定保存日志的文件名。默认值为xcrg.log。 |
-version | 打印XCRG的版本并退出。 |
-cc_db <arg> | 指定用于保存代码覆盖率数据库的数据库名称(快照名称)。 代码覆盖率数据库可以从<cc_dir_argvalue>/xsim.codeCov/<cc_db_argvalue>恢复。 |
-cc_dir<arg> | 指定保存代码覆盖率信息数据库的目录。 代码覆盖率数据库可以从<cc_dir_argvalue>/xsim.codeCov/<cc_db_argvalue>恢复。 默认值为/xsim.CodeCov/. |
-cc_fullfile | 在代码覆盖率报告中显示整个文件。 默认情况下,对于超过50000行的文件,此选项为OFF,并且只显示文件的模块内容。 |
-cc_report<arg> | 保存代码覆盖率HTML报告的目录。 默认值为xcrg_code_cov_report。 |
-merge_cc | 合并指定的代码覆盖率数据库,并创建一个输出合并的代码覆盖度数据库。 |
-cc_instancescount<arg> | 指定代码覆盖率报告中显示的最大实例数。 默认值为100。 |
xcrg Examples
# Functional Coverage with one DUT and one TB generating html and text
reports
xelab -svlog DUT1.v -svlog TB1.v -cov_db_dir ./fRun1 -cov_db_name DB1 -R
xcrg -dir ./fRun1/ -db_name DB1 -report_dir ./fReport1 -report_format html
firefox ./fReport1/dashboard.html &
xcrg -dir ./fRun1/ -db_name DB1 -report_dir ./fReport1 -report_format text
gvim ./fReport1/xcrg_report.txt
# Merging Functional Coverage runs of one DUT and 2 TBs generating merged
html report (using TB from previous example)
xelab -svlog DUT1.v -svlog TB2.v -cov_db_dir ./fRun2 -cov_db_name DB2 -R
xcrg -dir ./fRun1 -db_name DB1 -dir ./fRun2 -db_name DB2 -merge_dir ./
fMerge1 -merge_db_name mDB1 -report_dir ./mfReport1
firefox ./mfReport1/dashboard.html &
# Code Coverage run and html report generation
xelab -svlog ccDUT.v -svlog ccTB.v -cc_type sbct -cc_db DB1 -cc_dir ./cRun1
-R
xcrg -cc_db DB1 -cc_dir ./cRun1 -cc_report ./cReport1
firefox ./cReport1/dashboard.html &
# Other examples
xcrg -h
xcrg -file /path/to/file
xcrg -file /path/to/file -db_name work.top
xcrg -dir /path/to/abc
xcrg -dir ./abc -report_dir def -report_format html
xcrg -dir ./abc -db_name work.top -report_dir def -report_format html
xcrg -dir /path/to/abc -db_name work.top -report_dir def -report_format text
xcrg -merge_dir m
xcrg -merge_db_name xyz -report_dir def
xcrg -report_format html -nolog
xcrg -report_format html -log xcrgOutput.log
xcrg -cc_db a1 -cc_dir ./
xcrg -cc_report abc -cc_db work.testbench -cc_dir ./xsim.codeCov/