禾雨

导航

$fscanf,对文件一行进行读写

转:

http://zengbo.blogbus.com/logs/19569780.htmlVerilog

提供了丰富的系统函数,这为Testbench的编写提供了方便。尤其是IEEE1364-2005,其系统级建模的能力更强。

   以前我一般常用到的系统函数只有几个:$readmemb,$readmemh,$display,$fmonitor,$fwrite,$fopen,$fclose等。通常需要对文件作预处理,才能用于Testbench读取。今天又尝试了几个其他的文件输入输出函数,不需要对文件进行预处理,直接使用需要的文件,只对需要的部分进行读取。

   $fseek,文件定位,可以从任意点对文件进行操作;

   $fscanf,对文件一行进行读写。

   下面是一些常见的应用:

   1、读写文件

`timescale 1 ns/1 ns

module FileIO_tb;

integer fp_r, fp_w, cnt;

reg [7:0] reg1, reg2, reg3;

initial begin

  fp_r = $fopen("data_in.txt", "r");

  fp_w = $fopen("data_out.txt", "w");

 

  while(!$feof(fp_r)) begin

   cnt = $fscanf(fp_r, "%d %d %d", reg1, reg2, reg3);

   $display("%d %d %d", reg1, reg2, reg3);

   $fwrite(fp_w, "%d %d %d\n", reg3, reg2, reg1);

  end

  $fclose(fp_r);

  $fclose(fp_w);

end

endmodule

posted on 2020-04-17 12:26  禾雨  阅读(1632)  评论(0编辑  收藏  举报