[验证百花筒] 聊聊vcs的分块编译(partition compile)
引言
实际验证过程中,我们常常遇到这样的烦恼,就是明明环境中只修改了一个文件,例如testcase中增加了一行打印,但是编译却需要将所有的文件都编译一遍,这严重影响了我们的仿真效率,对此常用的解决方法有两种。
1、充分利用UVM的runtime cmdline传递参数机制
无需重新编译,直接通过命令行的方式动态修改UVM相关参数设置,例如UVM_TESTNAME、UVM_VERBOSITY这类参数都可以动态的在运行时传递到UVM环境中,而无需重新编译代码。
2、增量编译
我们查阅各种网上资料,每当提到如何提高仿真效率时,都会提到一个增量编译的方法,理想情况下即只会重新编译修改过的文件,而没有修改过的文件无需编译,但即使我们在vcs后添加了增量编译的参数
-Mupdate
实际当我们修改部分文件的时候,仿真器还是会编译很多我们并未修改过的文件,这受限于仿真器的优化做的还不够充分,无法完整识别我们修改过的文件项。
今天我们要讲的分块编译就是对增量编译的一种补充,既然仿真器无法准确识别我们修改了哪些文件内容导致其重新编译的时候又重复编译了很多我们并未修改过的内容,那么我们是不是可以通过别的方式来减轻仿真器识别文件更新的工作量呢?这就用到了分块编译(partition compile)。
vcs分块编译(partition compile)参数讲解
分块编译的本质就是将需要编译的代码文件拆分成独立的块,只有当块中的文件更新的时候才会重新编译该块中的文件,理论上我们拆的块越细,需要重新编译的文件就少,但造成的结果就是仿真器遍历这些块的时候要消耗额外的系统时间,所以说在块分的最粗(只分成1块)和最细(所有文件都独立分成1个块)之间需要寻求一个折中。
可以在vcs后添加-partcomp参数来实现自动分块编译,参考如下:
vcs –partcomp
还可以使用如下编译选项来指定自动划分Partition的大小和数量,但一般不用设置,即推荐使用默认就好。
-partcomp=autopart_[low|medium|high]
vcs官方ug中对上面几种自动分块编译选项的描述如图1所示。
图1 自动分块编译选项描述

还可以手动指定Partition,如下图所示:
vcs -partcomp -top -topcfg topcfg.v

博客介绍了提高仿真效率的方法,包括利用UVM的runtime cmdline传递参数机制和增量编译。重点讲解vcs分块编译,将代码文件拆分成独立块,只有块中文件更新才重新编译。通过项目实例对比不同编译选项效率,指出分块编译能提升效率,自动分块用默认参数,手动分块依复杂度判断。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



