有人要求我将bmp文件中的数据用作verilog模块的模拟输入,并将模拟输出写入新的bmp文件,以便他们可以比较两个不同的bmp文件以检查verilog模块的更正。
我阅读成功,但是在写作时遇到了一些问题。
class="animated"
输出应该是8'h42。但是真正的输出是
enter image description here
不需要零。我猜是因为verilog一次至少将行二进制写入16n位,n> = 1。所以我将第六行更改为
module testsub1;
integer fout;
initial
begin
fout=$fopen("C:/Users/gyz/Pictures/testout1.bmp","wb");
$fwrite(fout,"%u",8'h42);
$fclose(fout);
end
endmodule
,结果变为
enter image description here
仍然有一个多余的零。如何使程序每次仅输出8位。
答案 0 :(得分:0)
在这个问题下,dave_59的解决方案效果很好。
您可以使用%c写出一个字节。您可以使用位流转换将数据转换为字节数组,然后执行foreach(array_of_bytes [i])
$fwrite(fd,"%c",array_of_bytes[i])
;如果您有大量数据,则可能需要通过
%u
写出4字节的倍数,再用%c
写出其余字节来优化此数据。