在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4007|回复: 4

[原创] Makefile中空变量的妙用

[复制链接]
发表于 2016-9-4 20:24:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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里会设置一个空变量:




  1. ext =


复制代码

然后再各个target里都添加进这个变量:





  1. vcs_compile:
  2.     vcs ${VCS_CMP_OPT} ${ext} ...
  3. vcs_run:
  4.     ./simv ${VCS_RUN_OPT} ${ext} ...
  5. ius_compile:
  6.     irun ${IUS_CMP_OPT} ${ext} ...
  7. ius_run:
  8.     irun ${IUS_RUN_OPT} ${ext} ...
  9. verdi_run:
  10.     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, 用起灵活了许多.
发表于 2016-9-8 18:01:29 | 显示全部楼层
从你这个经验,可不可以发散一下?
变量使用 +=赋值,那么就不用额外提供一个ext变量了。我以前一般会留 :=去赋一个default值,如果临时想要变的时候直接在make的时候传一下。
 楼主| 发表于 2016-9-10 11:29:03 | 显示全部楼层
回复 2# 索手锋芒


是的, 其实原理是一样的, 就是利用变量重写这一点.

不过使用单独的空变量的好处在于, makefile中target有很多个而且使用的是不同的变量的时候, ext空变量是一个统一的传参数入口, 这样记忆开销更小.
发表于 2016-9-19 14:35:52 | 显示全部楼层
一直是用这个改写makefile的变量,比如控制波形,覆盖率
发表于 2023-1-1 22:00:20 | 显示全部楼层
感謝您
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 09:10 , Processed in 0.017470 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表