为什么我不能阅读整个文件?

时间:2015-05-16 06:59:06

标签: file-io verilog

我尝试用FPGA进行图像处理,我的支持者希望我们用Modelsim显示一些模拟结果。

因此,基本上我们尝试在testbench中读取图像文件并将其写入另一个文件,但它会在文件的一半处停止读取文件。这是我的源代码

module fileio1;
  integer in,out,r;
  reg [31:0]temp;
  reg clk;
  initial
  begin
    r=0;
    temp =0;
    clk = 0;
    in = $fopen("test120.bmp","r");
    out = $fopen("result.bmp","w");
  end

  always #1 clk = ~clk;

  always @(negedge clk)
  begin
    r = $fscanf(in,"%c",temp);
  end

  always @(posedge clk)
  begin
    if(~r) $fwrite(out,"%c",temp);
  end
endmodule

这是源代码和我们的输入文件是120x180大小的位图文件(64kb) 但输出文件是38kb。几乎一半的文件。我尝试使用480x720大小的位图文件(1013kb),它的输出文件也几乎是原始文件的一半。 使用非常小的文件输入,我们可以获得正确的输出文件。

为什么会这样?输入/输出文件有更好的功能吗?

1 个答案:

答案 0 :(得分:3)

在这种情况下,您不应该使用$fscanf$fscanf跳过空格,包括空行(就像C中的fscanf()函数一样)。

您应该使用$fread功能:

always @(negedge clk)
  begin
    r = $fread(temp,in);
  end