我尝试用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),它的输出文件也几乎是原始文件的一半。 使用非常小的文件输入,我们可以获得正确的输出文件。
为什么会这样?输入/输出文件有更好的功能吗?
答案 0 :(得分:3)
在这种情况下,您不应该使用$fscanf
。 $fscanf
跳过空格,包括空行(就像C中的fscanf()
函数一样)。
您应该使用$fread
功能:
always @(negedge clk)
begin
r = $fread(temp,in);
end