为什么我不能读取整个文件?
Why can't I read whole file?
我正在尝试用 FPGA 进行一些图像处理,我的支持者希望我们用 Modelsim 展示一些模拟结果。
所以,基本上我们尝试在测试台中读取图像文件并将其写入另一个文件,但它在文件的一半处停止读取文件。这是我的源代码
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),它的输出文件也几乎是原始文件的一半。
使用非常小的文件输入,我们可以获得正确的输出文件。
为什么会这样? input/output 文件有更好的功能吗?
你不应该在那种情况下使用 $fscanf
。 $fscanf
跳过 white-space,包括空白行(就像 C 中的 fscanf()
函数)。
您应该使用 $fread
函数:
always @(negedge clk)
begin
r = $fread(temp,in);
end
我正在尝试用 FPGA 进行一些图像处理,我的支持者希望我们用 Modelsim 展示一些模拟结果。
所以,基本上我们尝试在测试台中读取图像文件并将其写入另一个文件,但它在文件的一半处停止读取文件。这是我的源代码
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),它的输出文件也几乎是原始文件的一半。 使用非常小的文件输入,我们可以获得正确的输出文件。
为什么会这样? input/output 文件有更好的功能吗?
你不应该在那种情况下使用 $fscanf
。 $fscanf
跳过 white-space,包括空白行(就像 C 中的 fscanf()
函数)。
您应该使用 $fread
函数:
always @(negedge clk)
begin
r = $fread(temp,in);
end