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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3408|回复: 8

[求助] sv读文件的问题

[复制链接]
发表于 2019-4-23 16:38:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 桅杆 于 2019-4-23 16:41 编辑

编译完成后读文件( 某txt文件),可以正确读取数据,之后修改了txt的内容,读到的数据却是修改前的。不知道怎么回事。
把文件删了,运行就会报错,所以文件指向没错。不知道是什么问题导致的,请大家看看我的代码有什么问题吗?(代码时写在sequence 中的)
企业微信截图_15560088644399.png

发表于 2019-4-24 14:25:44 来自手机 | 显示全部楼层
涉及到文件操作一定要在使用结束后关闭文件句柄,下次使用时再重新打开。曾经在sv环境中嵌入perl来操作文件就遇到类似问题,不晓得你的问题是否试用于该解决方案。
 楼主| 发表于 2019-4-24 17:27:13 | 显示全部楼层


saipolo 发表于 2019-4-24 14:25
涉及到文件操作一定要在使用结束后关闭文件句柄,下次使用时再重新打开。曾经在sv环境中嵌入perl来操作文件 ...


我的设计只是简单地利用$readmemh 读取文件数据,也没有牵扯其他脚本什么的。$readmemh 这个函数的调用应该也不涉及到句柄。
尝试在readmemh 前后加上fopen,fcolse。反而报错了。
不知道还有什么原因会导致这个问题?
发表于 2019-4-25 10:35:48 | 显示全部楼层
$readmemh直接将文件写入到数组中,这case_name不是个文件啊。其次不需要用for循环写入
 楼主| 发表于 2019-4-25 13:25:09 | 显示全部楼层


诸葛小天 发表于 2019-4-25 10:35
$readmemh直接将文件写入到数组中,这case_name不是个文件啊。其次不需要用for循环写入 ...


case_name 是一个字符串,我是想使用for的方式,实现每次读取不同的txt。这个代码我只是测试第32个txt的读写情况,正常for里面会是从0开始。
确实可以正常读的,只是更换txt的内容后,读到的还是旧的txt的信息。


发表于 2019-4-25 21:08:57 | 显示全部楼层


桅杆 发表于 2019-4-25 13:25
case_name 是一个字符串,我是想使用for的方式,实现每次读取不同的txt。这个代码我只是测试第32个txt的 ...


这种情况一般不会出现,要么就是你修改的txt,不是你编译读取txt。
 楼主| 发表于 2019-4-26 09:29:25 | 显示全部楼层


诸葛小天 发表于 2019-4-25 21:08
这种情况一般不会出现,要么就是你修改的txt,不是你编译读取txt。


我修改的确实是编译读取的txt。在不重新编译的情况下,删除txt,仿真就报错找不到文件。
感觉应该是我的电脑的原因。
发表于 2019-4-26 10:12:26 | 显示全部楼层


桅杆 发表于 2019-4-26 09:29
我修改的确实是编译读取的txt。在不重新编译的情况下,删除txt,仿真就报错找不到文件。
感觉应该是我的 ...


复现了下你的代码,没任何问题。



  1. `ifndef MY_CASE1__SV
  2. `define MY_CASE1__SV
  3. `define DIR "test_case"

  4. class case1_sequence extends uvm_sequence #(my_transaction);
  5.    my_transaction m_trans;
  6.    string  case_name;
  7.     logic [31:0] data[9:0];


  8.    function  new(string name= "case1_sequence");
  9.       super.new(name);
  10.    endfunction

  11.    virtual task body();
  12.       if(starting_phase != null)
  13.          starting_phase.raise_objection(this);

  14.     for(int t=32 ;t<33 ; t++) begin
  15.        $sformat(case_name,"%s%0d.txt",`DIR,t);
  16.        $display(case_name);
  17.        $readmemh(case_name,data);
  18.      end
  19.       // $readmemh("test_case33.txt",data);
  20.        for(int i=0; i<10 ; i++) begin
  21.           $display("data[%d] = %h",i, data[i]);
  22.               end
  23.      `uvm_info(get_type_name(),"2019 test",UVM_NONE);




复制代码


 楼主| 发表于 2019-4-26 11:42:16 | 显示全部楼层


诸葛小天 发表于 2019-4-26 10:12
复现了下你的代码,没任何问题。


那是我电脑的问题了,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-25 01:15 , Processed in 0.030545 second(s), 7 queries , Gzip On, Redis On.

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