1简介
冗长的编译和仿真,对于稍大的工程,编译加上仿真可能需要1个小时以上并且占用大量内存,而跑回归更是消耗大量的时间以及内存资源,本文主要给大家带来VCS使用技巧,DPO,DPO全称是Dynamic Performance Optimizer
,主要用于优化编译和仿真(时间/内存
),减少资源的使用,属于VCS的高级功能。仅需要很少的命令即可引入当前工程,体验来看,优化基本都在30%以上(数据来自亦安自己的测试,具体以实际为准)。
2DPO的特性
接入工程简单,只需要简单的命令
深度优化编译和仿真,包含时间和内存的优化
3该怎么使用DPO
目前该功能可能需要较高版本VCS DPO才比较完善。
使用逻辑非常简单:第一步,学习(learn
)以及合并(merge
)。第二步,应用(apply
)。例如有500个case,我们先在learn
模式跑完case,然后merge
,之后便可以在应用(apply
)模式下跑项目。最终会有比较好的编译和仿真优化,一般情况下,工程没有巨大改变,不需要重新learn
。
我们打开VCS_HOME
目录下,doc/examples/dpo/dpo_use_model
,官方给了一个demo
,Makefile如下(部分),主要涉及参考,学习,合并,获得建议,应用,报告。涉及的命令非常的简单,如果想更深入了解请参阅手册。该目录下执行make
即可跑demo
。
dpo_reference:
vcs -sverilog -full64 -ntb_opts uvm-1.2 ubus_tb_top -debug_access+all -lca -l comp_ref.log -dpo -dpo_opts apps=vcsgd+user_tag=reference
./simv +UVM_NO_RELNOTES +UVM_TESTNAME=test_2m_4s -l simv_ref.log
dpo_learn:
rm -rf simv simv.daidir csrc vc_hdrs.h *.key vcs.cfg
vcs -sverilog -full64 -ntb_opts uvm-1.2 ubus_tb_top -debug_access+all -lca -l comp_learn.log -dpo -dpo_opts mode=learn+apps=default,lint,upfopt,pgates+user_tag=learn+dbdir=dpo_learndb -dpo_opts cfg=cfg
./simv +UVM_NO_RELNOTES +UVM_TESTNAME=test_2m_4s -l simv_learn.log
merge_db:
dporg merge -d dpo_learndb
dump_reco:
dporg dump -d dpo_learndb
echo "##### Enabling all recommendations dumped by DPO from dpo_reco.csv #####"
sed -i "s/^N,/Y,/g" dpo_reco.csv
dpo_apply:
rm -rf simv simv.daidir csrc vc_hdrs.h *.key vcs.cfg
vcs -sverilog -full64 -ntb_opts uvm-1.2 ubus_tb_top -debug_access+all -lca -l comp_apply.log -dpo -dpo_opts reco_file=dpo_reco.csv+apps=default,fgp,lint,upfopt,pgates+user_tag=apply+learn_dbdir=dpo_learndb+cfg=cfg
./simv +UVM_NO_RELNOTES +UVM_TESTNAME=test_2m_4s -l simv_apply.log
dpo_report:
dporg report -d dpo_dbdir
4查看DPO报告
dporgReport
目录下用浏览器打开即可,可以打开相关的报告。可以看到相关的优化比率,CT(Compile Time
),RT(Run Time
),RM(Memory
)。
5DPO设置的权衡
任何事情的选择很难是各个方面都会带来优势,所以需要结合自己的项目去权衡应该优化那些方面,哪里是关键的设计,那么选择优化该方向。相关建议可以在文件dpo_reco.csv
打开查看。
没有回复内容