[dv] Add cov_review in Makefile and coverage exclusion file
1. add coverage review command and common coverage exclusion file
2 add uart coverage exclusion file
diff --git a/hw/dv/tools/Makefile b/hw/dv/tools/Makefile
index 94772e4..312e9c8 100644
--- a/hw/dv/tools/Makefile
+++ b/hw/dv/tools/Makefile
@@ -29,6 +29,7 @@
BUILD_DIR := ${SCRATCH_PATH}/${BUILD_LOC}
RUN_PATH ?= ${SCRATCH_PATH}/${TEST_NAME}
RUN_DIR := ${RUN_PATH}/${RUN_LOC}
+COV_REPORT_DIR ?= ${SCRATCH_PATH}/cov_report
SW_BUILD_DIR ?= ${RUN_DIR}/sw_build
SW_ROOT_DIR := ${PRJ_DIR}/sw
diff --git a/hw/dv/tools/rules.mk b/hw/dv/tools/rules.mk
index ea6a86d..bed89c2 100644
--- a/hw/dv/tools/rules.mk
+++ b/hw/dv/tools/rules.mk
@@ -8,14 +8,11 @@
all: build run
########################
-## standalone targets ##
+## RAL target ##
########################
ral:
${RAL_TOOL} ${RAL_TOOL_OPTS}
-cov_merge:
- # TODO: add script to merge coverage in scratch scope
-
###############################
## sim build and run targets ##
###############################
@@ -70,10 +67,25 @@
run_result: post_run
/bin/bash ${MAKE_ROOT}/pass_fail ${RUN_LOG} ${MAKE_ROOT}/pass_patterns ${MAKE_ROOT}/fail_patterns
+############################
+## coverage rated targets ##
+############################
+cov_merge:
+ # TODO: add script to merge coverage in scratch scope
+
+# open coverage tool to review and create report or exclusion file
+cov_analyze:
+ cd ${SCRATCH_PATH} && ${COV_ANALYZE_TOOL} ${COV_ANALYZE_OPTS}
+
+# generate coverage report directly
+cov_report:
+ cd ${SCRATCH_PATH} && ${COV_REPORT_TOOL} ${COV_REPORT_OPTS}
+
clean:
rm -rf ${SCRATCH_PATH}/*
-.PHONY: build \
+.PHONY: ral \
+ build \
run \
reg \
pre_compile \
@@ -84,4 +96,8 @@
pre_run \
simulate \
post_run \
- run_result
+ run_result \
+ cov_merge \
+ cov_analyze \
+ cov_report \
+ clean
diff --git a/hw/dv/tools/vcs/common_cov_excl.el b/hw/dv/tools/vcs/common_cov_excl.el
new file mode 100644
index 0000000..7a086db
--- /dev/null
+++ b/hw/dv/tools/vcs/common_cov_excl.el
@@ -0,0 +1,15 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+// Exclude below TL toggle coverage as these pins won't be changed in the comportable IPs
+INSTANCE: tb.dut
+Toggle tl_i.a_user.parity "logic tl_i.a_user.parity[7:0]"
+Toggle tl_i.a_user.parity_en "logic tl_i.a_user.parity_en"
+Toggle tl_i.a_user.rsvd1 "logic tl_i.a_user.rsvd1[6:0]"
+Toggle tl_o.d_opcode [1] "logic tl_o.d_opcode[2:0]"
+Toggle tl_o.d_opcode [2] "logic tl_o.d_opcode[2:0]"
+Toggle tl_o.d_param "logic tl_o.d_param[2:0]"
+Toggle tl_o.d_sink "logic tl_o.d_sink[0:0]"
+Toggle tl_o.d_user "logic tl_o.d_user[15:0]"
+Toggle tl_i.a_param "logic tl_i.a_param[2:0]"
diff --git a/hw/dv/tools/vcs/vcs.mk b/hw/dv/tools/vcs/vcs.mk
index 8f6fe51..aec081c 100644
--- a/hw/dv/tools/vcs/vcs.mk
+++ b/hw/dv/tools/vcs/vcs.mk
@@ -90,6 +90,16 @@
RUN_OPTS += -assert nopostproc
endif
+# Coverage analyze/report options
+COV_COMMON_EXCL ?= ${MAKE_ROOT}/vcs/common_cov_excl.el
+COV_EXCL += ${COV_COMMON_EXCL} ${COV_DUT_EXCL}
+COV_ANALYZE_TOOL ?= verdi
+COV_REPORT_TOOL ?= urg
+COV_DIR ?= ${BUILD_DIR}/cov.vdb
+COV_EXCL_OPTS ?= -line nocasedef -elfile ${COV_EXCL}
+COV_ANALYZE_OPTS ?= -cov -covdir ${COV_DIR} ${COV_EXCL_OPTS}
+COV_REPORT_OPTS ?= -dir ${COV_DIR} ${COV_EXCL_OPTS} -report ${COV_REPORT_DIR}
+
# env variables to be exported for VCS
export VCS_ARCH_OVERRIDE := linux
export VCS_LIC_EXPIRE_WARNING := 1
diff --git a/hw/ip/uart/dv/Makefile b/hw/ip/uart/dv/Makefile
index 51f14e0..f630119 100644
--- a/hw/ip/uart/dv/Makefile
+++ b/hw/ip/uart/dv/Makefile
@@ -19,9 +19,7 @@
FUSESOC_CORE := lowrisc:dv:uart_sim:0.1
COMPILE_KEY ?= default
-UVM_TEST ?= uart_base_test
-UVM_TEST_SEQ ?= uart_base_vseq
-
+COV_DUT_EXCL ?= ${DV_DIR}/cov/uart_cov_excl.el
####################################################################################################
## A D D I N D I V I D U A L T E S T S B E L O W ##
####################################################################################################
diff --git a/hw/ip/uart/dv/cov/uart_cov_excl.el b/hw/ip/uart/dv/cov/uart_cov_excl.el
new file mode 100644
index 0000000..cc49164
--- /dev/null
+++ b/hw/ip/uart/dv/cov/uart_cov_excl.el
@@ -0,0 +1,18 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+// Coverage exclusion file for uart
+CHECKSUM: "1115183444 4229339"
+INSTANCE: tb.dut.uart_core
+// this is unreachable condition
+Condition 16 "7100374" "(break_err && (break_st == BRK_CHK)) 1 -1" (2 "10")
+CHECKSUM: "1115183444 3548154843"
+INSTANCE: tb.dut.uart_core
+// these are scanmode ralated branches
+Branch 1 "2534752149" "scanmode_i" (0) "scanmode_i 1"
+Branch 5 "2534752149" "scanmode_i" (0) "scanmode_i 1"
+Branch 1 "2534752149" "scanmode_i" (1) "scanmode_i 0"
+Branch 5 "2534752149" "scanmode_i" (1) "scanmode_i 0"
+// default branch, it's unreachable
+Branch 9 "221332935" "(!rst_ni)" (5) "(!rst_ni) 0,default,-,-"
diff --git a/util/uvmdvgen/Makefile.tpl b/util/uvmdvgen/Makefile.tpl
index bf1f2f8..01c1380 100644
--- a/util/uvmdvgen/Makefile.tpl
+++ b/util/uvmdvgen/Makefile.tpl
@@ -19,8 +19,8 @@
FUSESOC_CORE := lowrisc:dv:${name}_sim:0.1
COMPILE_KEY ?= default
-UVM_TEST ?= ${name}_base_test
-UVM_TEST_SEQ ?= ${name}_base_vseq
+# Add coverage exclusion file below
+COV_IP_EXCL ?=
${'####################################################################################################'}
${'## A D D I N D I V I D U A L T E S T S B E L O W ##'}
diff --git a/util/uvmdvgen/cov_excl.el.tpl b/util/uvmdvgen/cov_excl.el.tpl
new file mode 100644
index 0000000..18be5a7
--- /dev/null
+++ b/util/uvmdvgen/cov_excl.el.tpl
@@ -0,0 +1,6 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+// coverage exclusion file for ${name}
+// TODO add coverage exclusion below
diff --git a/util/uvmdvgen/gen_env.py b/util/uvmdvgen/gen_env.py
index ebd6a07..703fbe0 100644
--- a/util/uvmdvgen/gen_env.py
+++ b/util/uvmdvgen/gen_env.py
@@ -30,6 +30,7 @@
('dv/tests', name + '_', 'base_test', '.sv'),
('dv/tests', name + '_', 'test_pkg', '.sv'),
('dv/tests', name + '_', 'test', '.core'),
+ ('dv/cov', '', '', ''),
('dv', '', 'Makefile', ''),
('doc', name + '_', 'dv_plan', '.md'),
('data', name + '_', 'testplan', '.hjson'),
@@ -45,10 +46,13 @@
ftpl = src + src_suffix + '.tpl'
fname = src_prefix + src + src_suffix
+ if not os.path.exists(path_dir): os.system("mkdir -p " + path_dir)
+ if fname == "": continue
+
# read template
tpl = Template(filename=resource_filename('uvmdvgen', ftpl))
- if not os.path.exists(path_dir): os.system("mkdir -p " + path_dir)
+ # create rendered file
with open(path_dir + "/" + fname, 'w') as fout:
try:
fout.write(