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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2462|回复: 1

[求助] 关于verilog读取文件的一些代码问题。

[复制链接]
发表于 2014-5-28 17:21:09 | 显示全部楼层 |阅读模式

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

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

x




  1. module tb();

  2. integer fp_r, fp_w, cnt;
  3. reg [7:0] reg1;

  4. initial begin
  5. fp_r = $fopen("data_in.txt", "r");
  6. fp_w = $fopen("data_out.txt", "w");
  7.     while(!$feof(fp_r)) begin
  8.         cnt = $fscanf(fp_r, "%d", reg1);
  9.         $display("%d", reg1);
  10.         $fwrite(fp_w, "%d\n", reg1);
  11.     end
  12. $fclose(fp_r);
  13. $fclose(fp_w);
  14. end

  15. endmodule



复制代码
现在是,上面代码运行下来,data_out.txt会多输出一行。
即,如果data_in.txt内容是
10
20
30
那么,data_out.txt结果就是
10
20
30
30

求助各位高手,是什么问题?
发表于 2014-5-29 13:34:30 | 显示全部楼层
本帖最后由 orlye 于 2014-5-29 13:43 编辑

feof函数不是IEEE Verilog标准自带的,没查到其出典,不好作出准确判断。
网上查了些资料,我的理解是:
fscanf如果没读到东西的话,不返回任何东西,reg1就保持不变。
但它会把读取的成功与否反映给feof。
也就是feof一定要紧跟着fscanf使用。如果feof为1,则这次fscanf结果无效,否则有效。要这么写。

feof函数不是IEEE Verilog标准自带的,没查到其出典,不好作出准确判断。
网上查了些资料,我的理解是:
fscanf如果没读到东西的话,不返回任何东西,reg1就保持不变。
但它会把读取的成功与否反映给feof。
也就是feof一定要紧跟着fscanf使用。如果feof为1,则这次fscanf结果无效,否则有效。要这么写。




  1. reg eof;

  2. initial begin
  3. eof=1'b0;
  4. while (!eof)
  5. begin
  6.     cnt=$fscanf(fp_r,"%d",reg1);
  7.     if (!$feof(fp_r))
  8.     begin .... end
  9.     else
  10.         eof=1'b1;
  11. end



复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-27 01:23 , Processed in 0.018288 second(s), 8 queries , Gzip On, Redis On.

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