马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 ajzcr 于 2016-9-6 22:30 编辑
分享一点验证中的小技巧, 原文
-----
做数字验证的时候, 仿真器的编译和运行需要很多的编译运行参数, 一般Makefile里面就会写了很多东西了. 不过, 大多数时候, 在验证平台的调试阶段, 你会需要添加很多额外的编译选项和运行选项比如编译时添加-debug_all编译为行调试模式, 运行时添加+ntb_opt random_seed=<n>指定随机种子运行. 另外, UVM也引入了很多的运行参数.
执行make的时候不能额外的追加参数, 比如make vcs_compile -debug_all的时候-debug_all是不能生效的. 这样一来, 你的Makefile会变的很复杂, target好多, 似乎用shell才是正解了.
不过, make的时候, Makefile的变量是可以重写的, 这是个转机. 我在Makefile里会设置一个空变量:
然后再各个target里都添加进这个变量:
- vcs_compile:
- vcs ${VCS_CMP_OPT} ${ext} ...
- vcs_run:
- ./simv ${VCS_RUN_OPT} ${ext} ...
- ius_compile:
- irun ${IUS_CMP_OPT} ${ext} ...
- ius_run:
- irun ${IUS_RUN_OPT} ${ext} ...
- verdi_run:
- verdi ${VERDI_OPT} ${ext} ...
复制代码
然后根据需要在make的时候重写ext变量, 比如make vcs_compile ext=-debug_all来编译为行调试模式, make vcs_run ext=-ucli进入ucli运行模式, 要添加多个选项的时候需要用引号(推荐用单引号, 双引号会转义, 这个跟shell的规则是一样的)比如make vcs_run ext='+UVM_VERBOSITY=UVM_LOW +UVM_PHASE_TRACE'添加多个UVM运行选项.
做个类比的话, Makefile里的其他变量相当于sequence item里面的一些通用约束块, 这个空变量相当于sequence中的inline constraint, 用起灵活了许多. |