ico是vcs提供的用于優(yōu)化覆蓋率的feature;一般用戶通過distsolver bofore等約束了變量的隨機(jī)概率,而ico會(huì)在用戶約束的基礎(chǔ)上,做一些自動(dòng)“修正”,以此來優(yōu)化隨機(jī)激勵(lì),提高隨機(jī)多樣性,加速覆蓋率收斂,縮短 turn-around timeTAT。主要功能包含如下幾部分:
1.Prognosis: 用于查看當(dāng)前平臺(tái)是否適用ico,對(duì)于都是直接用例測(cè)試,沒有隨機(jī)策略的平臺(tái),ico并不適用;
2.Auto Bias:利用設(shè)定策略,ico會(huì)改變?cè)衏onstraint solver的行為,施加一定bias修正隨機(jī)值;
3.RCA: root cause trace, 用于診斷變量未隨機(jī)到的bins,是否存在過約束等;
4.Delta-debug: 提供replay復(fù)現(xiàn)功能,對(duì)比兩次結(jié)果間的差異;
5.AutoPurge: 當(dāng)前回歸得到的ico database可以用于下一次回歸,多次迭代;
ico最主要的功能就是Auto Bias,宣稱使用了AI,機(jī)器學(xué)習(xí)ML,增強(qiáng)學(xué)習(xí)EL等手段,在回歸過程中,利用共享case之間的ico database,提高隨機(jī)多樣性;通過一個(gè)簡(jiǎn)單例子演示下:
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
如上,對(duì)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跑了兩個(gè)case,第一個(gè)caseseed=1,第二個(gè)caseseed=2; 通過verdi查看覆蓋率報(bào)告:跑了兩次的回歸merge結(jié)果:87.5%
make regress_ico是使能icofeature,結(jié)果:100%
+ntb_solver_bias_diag使能debug信息,默認(rèn)debug log放在+ntb_solver_bias_wdir指定的ico database下:隨機(jī)32次,ico影響constrain solver,bias了29次的隨機(jī)結(jié)果;所以對(duì)于data=0這樣的小概率事件,也隨機(jī)到了;
因?yàn)閕co會(huì)影響constrain solver的隨機(jī)結(jié)果,所以復(fù)現(xiàn)時(shí),不僅要保證seed一樣,還需要額外指定ico database,這樣才能正確復(fù)現(xiàn)隨機(jī)結(jié)果。生成當(dāng)前回歸所有用例的merge report: html report會(huì)羅列所有隨機(jī)變量:DIVERSITY通過shannon entropy香農(nóng)熵衡量變量的“多樣性”;
在這里插入圖片描述
每個(gè)變量,ico會(huì)自動(dòng)的劃分bins,顯示隨機(jī)詳細(xì)結(jié)果;
ico支持同一個(gè)case內(nèi)多次randomize之間相互影響,也支持一次回歸不同case之間相互影響,也可以將本次回歸的database作用于下一次回歸;
對(duì)于ico加速覆蓋率收斂的實(shí)際效果,博主使用一個(gè)block tb親測(cè)效果不太顯著;從他人的presentation上看,大概有10%-15%的提升;但是ico對(duì)于隨機(jī)多樣性確實(shí)是有一定效果的,+ntb_solver_bias_mode_auto可以指定ico對(duì)隨機(jī)的bias力度。
如果ico可以通過AI,EL等對(duì)功能覆蓋率進(jìn)行反推,縮減重復(fù)隨機(jī)值,那將會(huì)大大提高覆蓋率收斂,期待后續(xù)EDA進(jìn)一步的"進(jìn)化”吧。
審核編輯:劉清
-
VCS
+關(guān)注
關(guān)注
0文章
78瀏覽量
9537 -
RCA
+關(guān)注
關(guān)注
0文章
20瀏覽量
8748 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8306瀏覽量
131848
原文標(biāo)題:VCS ICO - Intelligent Coverage Optimization
文章出處:【微信號(hào):數(shù)字芯片設(shè)計(jì)工程師,微信公眾號(hào):數(shù)字芯片設(shè)計(jì)工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論