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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5494|回复: 13

[求助] 请教一个readmemb的问题

[复制链接]
发表于 2014-6-11 18:02:55 | 显示全部楼层 |阅读模式

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

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

x
我在一个.v文件中用到一个$readmemb函数,系统定义了一个环境变量TB_HOME, dat_file 的路径是$TB_HOME/dat/dat_file.dat;
这个$TB_HOME是变化的,也就是说每个linux的user的TB_HOME变量是独立的。
现在我用$readmemb(“xxx/dat_file.dat”,mem)

这个路径应该怎么加才好呢?

求好心人解答!

谢谢!
发表于 2014-6-11 21:36:28 | 显示全部楼层
TB_HOME="/x/x/x"
发表于 2014-6-12 09:04:17 | 显示全部楼层
重新定义环境变量?
或是把dat_file.dat 拷到自己的路径下
 楼主| 发表于 2014-6-12 10:01:50 | 显示全部楼层
回复 2# A1985


    我把TB-HOME放到一个脚本里面了,run TB之前先source一下这个脚本,可是不知道怎么在verilog中把这个环境变量加入到$readmemb这个函数参数中?

试了好几种写法都报语法错误。

求解!
发表于 2014-6-12 10:40:42 | 显示全部楼层
回复 4# 飞扬紫百合


   是不是因为:脚本中定义的环境变量属于shell,verilog源码中无法调用?   你试试在verilog源码中用define定义绝对路径呢?
   或者在脚本文件中先把data file拷贝到run目录下,然后用$readmemb("./dat_file.dat", mem);
 楼主| 发表于 2014-6-13 08:29:48 | 显示全部楼层
回复 5# rvnistelrooy


    绝对路径是可以的,但是如果其他人从服务器check out下来还要再改动相关的code,所以一直想找一个好的方法。
发表于 2014-6-14 21:47:36 | 显示全部楼层
I've tried that the following codes works with VCS.It may help.

first, add the following codes to your testbench:




  1. string tb_home;
  2. initial begin
  3.      $value$plusargs ("tb_home=%s",tb_home);
  4.       $readmemb({tb_home,"dat_file.dat"},mem);
  5. end


复制代码


then, add the following parameter to run your vcs:




  1. vcs ........... +tb_home=${TB_HOME}


复制代码


now, the ${TB_HOME} is passed to tb_home via $value$plusargs function.
 楼主| 发表于 2014-6-16 17:47:06 | 显示全部楼层
回复 7# orlye


    这种方法确实可行!但是又有一个问题,readmemb是在initial里面操作的,top例化的instance中$test$plusarg也是在initial中运行的,两者同时并行,这样readmemb无法拿到相应的dat文件,只有readmemb先拿到环境变量才行。可是怎么来保证$test$plusarg那个initial块执行完了之后,其他initial再执行呢?或者有什么其他方法来进行这样一个操作呢?

继续求解~

谢谢大家!
发表于 2014-6-16 21:07:11 | 显示全部楼层
回复 8# 飞扬紫百合

呃,没怎么明白你说的情况。
不能像我给的代码那样放在1个initial里顺序执行吗?

如果真不能的话,我感觉2个initial之间可以用个信号做个标志,一边取得tb_home参数后置位标志,另一边wait到标志后执行readmemb。
 楼主| 发表于 2014-6-17 09:06:58 | 显示全部楼层
回复 9# orlye


   目前的场景是这样的:
top.v里面例化了A,B,C,D四个module,这些module都是一些存储器的仿真模型,各个module里面有若干个initial和always块组成;

top里面把各个module的file_name利用层级关系引到在top里面,目前通过defparam将各个file-name变量附上了dat文件的绝对路径。但是如果别人checkout下来之后,还要再改一下这个路径。所以,我想找一个方法看看能否让code自动识别每个人的work home的环境变量,这样就不用再去改动defparam那些路径了。

相对路径有的人可以有的人不行,test-plusarg那个方法确实能够把环境变量吃进来,但是它必须在一个initial块中使用(这个不太确定,是不是还能用在其他地方?),但是包括子模块在内的各个initial都是并行的;如果在testplusarg所在的initial加一个信号的话,那么其他一些相关的initial都得基于这个信号进行改动。

不知道目前解决这个问题有没有好的方法??

求解中~

谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-24 19:23 , Processed in 0.036394 second(s), 8 queries , Gzip On, Redis On.

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