cadence Incisive Comprehensive coverage(ICC)说明文档(一)

Incisive Comprehensive coverage(ICC)

Incisive Comprehensive coverage(ICC),定义良好的覆盖率指标,可以对验证的完整性进行彻底的分析,覆盖率分为代码覆盖率和功能覆盖率。

代码覆盖率

块覆盖率:在仿真期间执行的代码行, 它帮助您确定不同的testbench是否在一个块中执行语句
分支覆盖率:比block覆盖率更精确的覆盖率,条件语句的每个分支执行过一次,就代表这段代码覆盖率100%
语句(statement)覆盖率:提供块内语句数量信息
表达式覆盖率:提供HDL代码中所有表达式统计的信息
翻转覆盖率:提供仿真期间信号和端口变化的信息,检测的设计中的活动事件,如未使用的信号,保持不变的信号或很少变化的信号

FSM覆盖率

状态机覆盖率,能看到了状态机执行了哪些状态

功能覆盖率

功能覆盖率在用户自定义的coverpoint执行,使用PSL,SV断言或者covergroup语句指定,这些覆盖点指定要覆盖的场景、错误案例、极端案例和协议,还要指定对变量的不同值进行分析。

功能覆盖率包含以下类型:

控制导向功能覆盖率(control-oriented)-- 基于断言验证和直接识别感兴趣的功能的拓展,在ICC中,控制导向功能覆盖点通过使用PSL,SVA断言,假设和覆盖指令来指定,测量的覆盖率直接指定,使用PSL/SVA语句或由这些语句自己解释。

数据导向功能覆盖率 --专注于追踪数据值,它包括多样变量值、抽样(blinning)、采样规范和叉乘(ceoss product向量积)的覆盖率,帮助设计工程师识别未测试的数据值或subranges(子范围)。ICC,数据导向功能覆盖率使用SV构造

ICC DESIGN FLOW:允许单次运行分析代码和功能覆盖率

cadence Incisive Comprehensive coverage(ICC)说明文档(一)

块(block)覆盖率

块覆盖率是一种基本的代码覆盖率机制,用来识别代码中哪些块已经执行,哪些还没有执行。块覆盖率确定测试场景是否执行块中的语句。一般来说,块覆盖率是整个验证过程中必不可少的第一步。
Verilog/VHDL中的块
块是Verilog/VHDL中的一个语句或语句序列,执行时没有分支或延迟。一个块中的所有语句执行或不执行。ICC认为以下程序语句是一个块:
所有begin和end之间的语句和不包含流程中断(flowbreak)的语句,或一个单独的语句被begin…end包围。流程中断语句含义(flowbreak):在给定的时间下改变正常程序的执行顺序的语句
Verilog中的flowbreak语句:if,case,forever,repeat,while,for,wait,#,@,disable,task and function call
VHDL中:if,case,loop,next,exit,return,wait

Begin开始到下一个flowbreak语句之间的语句
Flowbreak语句到下一个flowbreak语句或flowbreak到end的语句
Fork…join in语句内的所有语句(仅在verilog中).
行为级Verilog代码中的块位于initial且始终是过程性块、任务和函数中。行为级VHDL代码中的块位于过程块和子程序中。下图是给定Verilog代码中的块。
cadence Incisive Comprehensive coverage(ICC)说明文档(一)Verilog中的块不会收集连续赋值语句(除非使用set_assign_scoring命令显示收集)
并发声明语句块不进行收集
块不是原语定义的/当从VHDL生成块中调用函数时,VHDL中的块不会对包中定义的函数进行收集

分支(BRANCH)覆盖率

分支的执行在条件语句中的使用基于条件的取值。考虑以下的Verilog连续赋值语句
Assign out2 = (cond1)?1‘b1:1’b0;
cond1:取值为真,out2赋值为1
cond1:取值为假,out2赋值为0
理想上,覆盖率结果应当分别显示两种条件的覆盖率数值。块覆盖率中,这种语句被认为是一个单独的块,覆盖时需要考虑cond1是真或假,分支覆盖率中,当每一种分支条件语句执行,认为该语句100%覆盖
Verilog的分支覆盖率产生是因为:
If,else if和隐式else(也作为块来收集)
Case块有或没有显式/隐式default(也作为块来收集)
与多个case项对应的单个块(只有分支收集开启时才收集)
三元声明条件(只有分支收集开启时才收集)
cadence Incisive Comprehensive coverage(ICC)说明文档(一)
在块详细报告中(如果启用了分支收集),可以通过其旁边的描述将分支标识为三元、true part of、false part of、a case item of或implicit else。