关于verilog读取文件的一些代码问题。
时间:10-02
整理:3721RD
点击:
- module tb();
- integer fp_r, fp_w, cnt;
- reg [7:0] reg1;
- 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", reg1);
- $display("%d", reg1);
- $fwrite(fp_w, "%d\n", reg1);
- end
- $fclose(fp_r);
- $fclose(fp_w);
- end
- endmodule
即,如果data_in.txt内容是
10
20
30
那么,data_out.txt结果就是
10
20
30
30
求助各位高手,是什么问题?
feof函数不是IEEE Verilog标准自带的,没查到其出典,不好作出准确判断。
网上查了些资料,我的理解是:
fscanf如果没读到东西的话,不返回任何东西,reg1就保持不变。
但它会把读取的成功与否反映给feof。
也就是feof一定要紧跟着fscanf使用。如果feof为1,则这次fscanf结果无效,否则有效。要这么写。
feof函数不是IEEE Verilog标准自带的,没查到其出典,不好作出准确判断。
网上查了些资料,我的理解是:
fscanf如果没读到东西的话,不返回任何东西,reg1就保持不变。
但它会把读取的成功与否反映给feof。
也就是feof一定要紧跟着fscanf使用。如果feof为1,则这次fscanf结果无效,否则有效。要这么写。
- reg eof;
- initial begin
- eof=1'b0;
- while (!eof)
- begin
- cnt=$fscanf(fp_r,"%d",reg1);
- if (!$feof(fp_r))
- begin .... end
- else
- eof=1'b1;
- end
