ico是vcs提供的用于优化覆盖率的feature;一般用户通过distsolver bofore等约束了变量的随机概率,而ico会在用户约束的基础上,做一些自动“修正”,以此来优化随机激励,提高随机多样性,加速覆盖率收敛,缩短 turn-around timeTAT。主要功能包含如下几部分:
1.Prognosis: 用于查看当前平台是否适用ico,对于都是直接用例测试,没有随机策略的平台,ico并不适用;
2.Auto Bias:利用设定策略,ico会改变原有constraint solver的行为,施加一定bias修正随机值;
3.RCA: root cause trace, 用于诊断变量未随机到的bins,是否存在过约束等;
4.Delta-debug: 提供replay复现功能,对比两次结果间的差异;
5.AutoPurge: 当前回归得到的ico database可以用于下一次回归,多次迭代;
ico最主要的功能就是Auto Bias,宣称使用了AI,机器学习ML,增强学习EL等手段,在回归过程中,利用共享case之间的ico database,提高随机多样性;通过一个简单例子演示下:
covergroupcg_datawithfunctionsample(inputlogicvalid,logic[7:0]data); cpt_value:coverpointdataiff(valid){ binszero={0}; binsothers[]={[1:31]}; illegal_binsinvalid={[32:255]}; } endgroup classtrextendsuvm_transaction; randlogic[7:0]data; constraintc_tr{datainside{[0:31]}; datadist{0:=1,[1:31]:=100}; } endclass
如上,对data的约束中,data=0这一条件的概率很低;
PRJ:=$(shellecho$(CURDIR)|sed-r's|/ico_test/.*|/ico_test|') exportPRJ all:comprun all_ico:comprun_ico SEED:=${SEED} regress_ico:clean mkdir-p${PRJ}/comp_src; cd${PRJ}/comp_src; cp${PRJ}/Makefile${PRJ}/comp_src; makecomp; foriin12;do mkdir-p${PRJ}/test_$${i}; cp${PRJ}/Makefile${PRJ}/test_$${i}; cd${PRJ}/test_$${i}; ln-s${PRJ}/comp_src/simv.daidirsimv.daidir; ln-s${PRJ}/comp_src/csrccsrc; ln-s${PRJ}/comp_src/simvsimv; makerun_icoSEED=$${i}; done makecov_merge; makecrg_report; regress:clean mkdir-p${PRJ}/comp_src; cd${PRJ}/comp_src; cp${PRJ}/Makefile${PRJ}/comp_src; makecomp; foriin12;do mkdir-p${PRJ}/test_$${i}; cp${PRJ}/Makefile${PRJ}/test_$${i}; cd${PRJ}/test_$${i}; ln-s${PRJ}/comp_src/simv.daidirsimv.daidir; ln-s${PRJ}/comp_src/csrccsrc; ln-s${PRJ}/comp_src/simvsimv; makerunSEED=$${i}; done makecov_merge; comp: vcs-full64 -kdb-lca -debug_access+all -ntb_optsuvm -sverilog -timescale=1ns/1ns ${PRJ}/dut.sv ${PRJ}/top_tb.sv +incdir+${PRJ} -lcomp.log run_ico: ./simv-lsim.log+ntb_random_seed=${SEED} +ntb_solver_bias_mode_auto_config=2 +ntb_solver_bias_shared_record=${PRJ}/shared_record +ntb_solver_bias_wdir=ico_work +ntb_solver_bias_test_type=uvm +ntb_solver_bias_diag=3 crg_report: crg-dir${PRJ}/shared_record-reportrpt-auto-formatboth-mergemerged_db-zip1-illegal_group-illegal_attr run: ./simv-lsim.log+ntb_random_seed=${SEED} verdi: verdi-ssftop_tb.fsdb& cov_open: verdi-cov-covdirsimv_merge.vdb& cov_merge: urg-dir${PRJ}/test_1/simv.vdb-dir${PRJ}/test_2/simv.vdb-dbname${PRJ}/simv_merge.vdb clean: -rm-rfshared_record/simv*test_*WORK/*logurgReport/vdCovLog/rpt-auto/merged_db/comp_src/novas.*
make regress跑了两个case,第一个caseseed=1,第二个caseseed=2; 通过verdi查看覆盖率报告:跑了两次的回归merge结果:87.5%
make regress_ico是使能icofeature,结果:100%
+ntb_solver_bias_diag使能debug信息,默认debug log放在+ntb_solver_bias_wdir指定的ico database下:随机32次,ico影响constrain solver,bias了29次的随机结果;所以对于data=0这样的小概率事件,也随机到了;
因为ico会影响constrain solver的随机结果,所以复现时,不仅要保证seed一样,还需要额外指定ico database,这样才能正确复现随机结果。生成当前回归所有用例的merge report: html report会罗列所有随机变量:DIVERSITY通过shannon entropy香农熵衡量变量的“多样性”;
在这里插入图片描述
每个变量,ico会自动的划分bins,显示随机详细结果;
ico支持同一个case内多次randomize之间相互影响,也支持一次回归不同case之间相互影响,也可以将本次回归的database作用于下一次回归;
对于ico加速覆盖率收敛的实际效果,博主使用一个block tb亲测效果不太显著;从他人的presentation上看,大概有10%-15%的提升;但是ico对于随机多样性确实是有一定效果的,+ntb_solver_bias_mode_auto可以指定ico对随机的bias力度。
如果ico可以通过AI,EL等对功能覆盖率进行反推,缩减重复随机值,那将会大大提高覆盖率收敛,期待后续EDA进一步的"进化”吧。
审核编辑:刘清
-
VCS
+关注
关注
0文章
78浏览量
9590 -
RCA
+关注
关注
0文章
28浏览量
8776 -
机器学习
+关注
关注
66文章
8377浏览量
132406
原文标题:VCS ICO - Intelligent Coverage Optimization
文章出处:【微信号:数字芯片设计工程师,微信公众号:数字芯片设计工程师】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论