覆盖率介绍3代码覆盖率及在UVF中的应用23覆盖率简介13功能覆盖率及在UVF中的应用3覆盖率介绍3覆盖率简介1覆盖率简介覆盖率的意义在传统的验证过程中,验证充分性是靠测试人员的经验保证的。随着芯片规模越来越大,芯片功能越来越复杂,和一次性流片费用的增加,怎样解决判断验证充分性的问题逐步成为业内验证工作的热门话题。随着验证方法学的发展,覆盖率作为一种判断验证充分性的手段已成为验证工作的主导。覆盖率简介覆盖率的分类从目标上分,可将覆盖率大体分为两类:代码覆盖率:作用:检查代码是否冗余,设计要点是否遍历。被检测对象:RTL代码检测方法:工具自动生成功能覆盖率:作用:检查功能是否遍历。被检测对象:自定义容器检测方法:自定义收集条件覆盖率简介覆盖率的分类代码覆盖率可分为:行覆盖率:表明仿真过程代码中行和语句的覆盖情况。分支覆盖率:表明代码中的分支覆盖情况(“if-else语句”,“case语句”,三元操作符“?:”)路径覆盖率:表明代码中数据通路的覆盖情况。条件覆盖率:表明代码中条件语句的覆盖情况。翻转覆盖率:表明代码中信号的0到1和1到0的翻转情况。状态机覆盖率:表明状态机中各个状态的覆盖情况。功能覆盖率可分为:基于控制的功能覆盖率:属于assertion的范畴基于数据的功能覆盖率:定义的容器被击中的情况覆盖率简介覆盖率与验证阶段验证阶段可以分为单元验证(UT)阶段、集成验证(IT)阶段和系统验证(ST)阶段。单元验证阶段,关心的是模块功能和模块质量,此时出口条件为代码覆盖率。一般业内常用的出口条件是:行覆盖率达到100%,分支覆盖率达到100%,条件覆盖率达到95%,状态机覆盖率达到90%,对没有覆盖率的需给出合理的说明。集成验证阶段,关心的系统的功能,以及模块与模块之间的接口,此时出口条件为功能覆盖率。一般业内常用的出口条件是:功能覆盖率达到90%,对没有覆盖率的需给出合理的说明。覆盖率简介验证充分性探讨功能覆盖率高、代码覆盖率低:验证计划不充分,需要增加功能覆盖点。代码覆盖率高、功能覆盖率低:设计没有实现指定的功能。NeedmoreFCPoints,includingCornercasesGoodcoverage:checkbugrateStartofprojectIsdesigncomplete?PerhapstryformaltoolsLowLowHighHighCodeCoverageFunctionalCoverage覆盖率介绍3代码覆盖率及在UVF中的应用2代码覆盖率及在UVF中的应用vcs仿真器支持的代码覆盖率:line:行覆盖率cond:条件覆盖率fsm:状态机覆盖率tgl:翻转覆盖率path:路径覆盖率branch:分支覆盖率ncsim仿真器支持的代码覆盖率:Block:行覆盖率和分支覆盖率Expr:条件覆盖率Fsm:状态机覆盖率Toggle:翻转覆盖率工具对代码覆盖率的支持情况综合vcs和ncsim仿真器对代码覆盖率的支持情况和仿真开销,UVF采用行覆盖率、条件覆盖率、状态机覆盖率和分支覆盖率作为代码覆盖率的判断标准。代码覆盖率及在UVF中的应用代码覆盖率报告的生成方法生成代码覆盖率需要完成以下步骤:编译期指定覆盖率类型和路径。运行期指定覆盖率类型和路径。调用urg(vcs)或者iccr(ncsim)工具进行覆盖率合并。调用urg(vcs)或者iccr(ncsim)工具进行解析并输出覆盖率报告。以上步骤已经全部集成到UVF中,使用者只需带上覆盖率参数进行回归即可。代码覆盖率及在UVF中的应用代码覆盖率概要信息查询带代码覆盖率回归测试后,在Regression子页面中点中关注的用例或者ALL,然后就可以在Coverage子页面中查询代码覆盖率的概要信息。代码覆盖率及在UVF中的应用vcs仿真器下代码覆盖率详细信息查询步骤一:右键点击Coverage子页面Code栏,弹出ViewDetail对话框。然后左键点击ViewDetail对话框启动FireFox浏览器自动获取当前窗口的代码覆盖率详细信息。代码覆盖率及在UVF中的应用步骤二:点击覆盖率未达标的模块,查看详细信息。代码覆盖率及在UVF中的应用步骤三:选择关心的代码覆盖率类型,查找没有覆盖的情形(工具会自动用颜色标出),增加测试用例或者修改代码。行覆盖率详细报告代码覆盖率及在UVF中的应用条件覆盖率详细报告代码覆盖率及在UVF中的应用ncsim仿真器下代码覆盖率详细信息查询步骤一:右键点击Coverage子页面Code栏,弹出ViewDetail对话框。然后左键点击ViewDetail对话框启动iccr图形工具自动获取当前窗口的代码覆盖率详细信息。代码覆盖率及在UVF中的应用步骤二:点击覆盖率未达标的模块,查看详细信息。行覆盖率分支覆盖率条件覆盖率状态机覆盖率过滤选项:b:行覆盖率&分支覆盖率e:条件覆盖率s:状态机覆盖率t:翻转覆盖率代码覆盖率及在UVF中的应用步骤三:选择关心的代码覆盖率类型,在Report栏中点击没有覆盖的情形,工具自动关联到该处,增加测试用例或者修改代码。选择覆盖率类型选中没有覆盖的代码工具自动关联到该行行覆盖率详细报告代码覆盖率及在UVF中的应用选择覆盖率类型选中没有覆盖的条件工具自动关联到该行条件覆盖率详细报告覆盖率介绍3功能覆盖率及在UVF中的应用3功能覆盖率及在UVF中的应用针对功能覆盖率的验证建立能够自动统计功能覆盖率的模型,通过该模型,可以方便地得到当前的功能覆盖率,并根据它调整验证策略,使仿真收敛。利用功能覆盖率模型的优势功能覆盖率提供了一个标志验证工作完成程度的指标。根据功能覆盖率结果便于重新分配资源,或者调整验证策略。功能覆盖率及在UVF中的应用基于功能覆盖率模型的验证流程编写验证需求文档基于验证需求文档实现包含功能覆盖率模型的测试平台在能够自动统计功能覆盖率的模型的驱动下,通过随机激励、定向激励、形式化验证等手段使功能覆盖率达到100%验证完成功能覆盖率及在UVF中的应用功能覆盖率模型的工作流程用大量随机种子运行受约束的测试用例设置功能点检查用例是否通过存储当前用例覆盖率信息合并覆盖率信息,得到覆盖率修改用例描述或者约束覆盖率不达标功能覆盖率及在UVF中的应用UVF中的功能覆盖率模型UVF的功能覆盖率模型是SV模型,为了结合vcs和ncsim仿真器对SV语法的支持情况,功能覆盖率模型可以用下图表示:覆盖率组触发条件交叉覆盖率点覆盖率点选项自动自定义标签变量导言选项忽略容器非法容器标签变量导言选项忽略容器非法容器自定义容器标签交叉对象导言选项忽略容器非法容器功能覆盖率及在UVF中的应用功能覆盖率模型中各元素之间的关系功能覆盖率模型是一个或者多个覆盖组的集合。一个覆盖率组可以包含一个或者多个覆盖率点。一个覆盖率点可以包含一个或者多个自动创建的或者用户定义的容器。交叉覆盖率点的对象只能是已定义的覆盖率点的标签。交叉覆盖率点的容器由交叉对象中的容器自动创建。容器是最小的记录单元。功能覆盖率及在UVF中的应用功能覆盖率计算覆盖点的覆盖率=容器被击中的个数/容器总数×100%覆盖率组的覆盖率=∑覆盖点的覆盖率×覆盖率点的权重功能覆盖率=∑覆盖组的覆盖率×覆盖率组的权重功能覆盖率及在UVF中的应用覆盖率组覆盖率组是一系列描述相近功能的覆盖率点或交叉覆盖率点的集合。每个覆盖率组可以根据需要自行使能或者禁止,规定了组内覆盖率点或交叉覆盖率点的触发条件、收集时间,允许覆盖率模型从多个源头收集覆盖率信息。覆盖率组一经定义,可以例化多份。功能覆盖率及在UVF中的应用覆盖率组的语法功能覆盖率及在UVF中的应用覆盖率组的触发条件覆盖率组的触发条件采用阻塞表达式,当sample_event到来时,覆盖率组就会自动采集覆盖率信息。可以对覆盖率组例化体调用start或者stop函数来控制覆盖率组的使能和禁止。覆盖率组被例化后,默认是使能的。功能覆盖率及在UVF中的应用覆盖率组中的选项`OPTION.goal:覆盖率组的覆盖率目标。`OPTION.weight:覆盖率组的权重。`OPTION.comment:覆盖率组的注释。option.auto_bin_max:覆盖率组中覆盖率点自创建的最大容器数。option.at_least:覆盖率组中覆盖率点的击中门限。option.per_instance:是否将由一个通用覆盖率组例化的不同覆盖率组信息分开打印。注:定义`OPTION宏type_option(forvcs)option(forncsim)功能覆盖率及在UVF中的应用覆盖率组定义代码详例覆盖率组的触发条件覆盖率组的例化覆盖率组的使能、禁止控制功能覆盖率及在UVF中的应用覆盖率组的分类在编写覆盖率模型的时候,从功能上来分,可以将覆盖率组分为四类:端口覆盖率组:监视端口数据线的跳转,监视端口控制线上的时序组合。总线覆盖率组:监视总线数据及功能是否遍历。寄存器覆盖率组:监视微机口对DUT的有效配置是否遍历,监视统计信息、告警信息是否查看。验证环境变量覆盖率组:查看验证环境中的有效配置是否被遍历。功能覆盖率及在UVF中的应用覆盖率点和交叉覆盖率点覆盖率点是对一个信号线或者变量可能出现的值的定义。交叉覆盖率点是对多个相互关联的信号线或者变量可能出现的值的定义。其变量一般用已定义的覆盖率点的标签。交叉覆盖率点可以是两个或者多个覆盖率点的交叉。一般来说,最好不超过三个。功能覆盖率及在UVF中的应用覆盖率点的语法功能覆盖率及在UVF中的应用交叉覆盖率点的语法功能覆盖率及在UVF中的应用覆盖率点及交叉覆盖率点的元素标签:用来标识覆盖率点。变量:被采集的信号线、变量或者标签的交叉。导言:覆盖率点采集的条件。选项:覆盖率点的控制信息。容器:分为自创建容器和用户定义容器,交叉覆盖率点只能包含自创建容器。忽略容器:不关心的容器。非法容器:不允许被击中的容器,否则报错。功能覆盖率及在UVF中的应用覆盖率点和交叉覆盖率点中的变量覆盖率点的变量是信号线或者变量,由于ncsim仿真器的限制,覆盖率点的变量位宽不能超过32bits,对于位宽比较宽的变量需要分段处理。交叉覆盖率点的变量是覆盖率点标签的交叉。功能覆盖率及在UVF中的应用覆盖率点和交叉覆盖率点中的选项`OPTION.goal:覆盖率点或交叉覆盖率点的覆盖率目标。`OPTION.weight:覆盖率点或交叉覆盖率点的权重。`OPTION.comment:覆盖率点或交叉覆盖率点的注释。option.auto_bin_max:覆盖率点或交叉覆盖率点自创建的最大容器数。option.at_least:覆盖率点和交叉覆盖率点的击中门限。当覆盖率点或交叉覆盖率点中的auto_bin_max或者at_least选项的设置和所在的覆盖率组的选项设置不一样时,以覆盖率点或交叉覆盖率点中的选项设置为准。功能覆盖率及在UVF中的应用自创建容器覆盖率点或交叉覆盖点在没有用户定义的情况下将自动创建容器。如果覆盖率点的变量有Nbits位宽,那么就会自动创建2N个容器;如果交叉覆盖率点的变量是Nbits位宽、Mbits位宽的覆盖率点的交叉,那么就会自动创建2N×2M个容器。自创建容器的约束如果一个覆盖率点有16bits位宽,那么需要自动创建的容器将有65,536个,为了减少容器数量,可以用选项中的auto_bin_max选项来限制自创建的容器的个数。auto_bin_max选项的配置后将可能出现的值按容器个数均分到各个容器中去,如果其中一个值被击中,该容器就算被击中。功能覆盖率及在UVF中的应用用户定义容器自创建容器的方法适用于并不关心数据内容的覆盖率点,如计数器、地址线等值为2的幂的覆盖率点。其他的覆盖率点中的容器可以用用户定义的方法创建。用户定义容器包括:容器类型:bins和wildcardbins。容器名:给容器命名,方便报告中查找。容器取值:容器包含的值。导言