【发布时间】:2018-08-20 15:40:41
【问题描述】:
我被要求使用bmp文件中的数据作为verilog模块的模拟输入并将模拟输出写入一个新的bmp文件,以便他们可以比较两个不同的bmp文件来检查verilog模块的正确性.
我阅读成功,但在写作中遇到了一些问题。
module testsub1;
integer fout;
initial
begin
fout=$fopen("C:/Users/gyz/Pictures/testout1.bmp","wb");
$fwrite(fout,"%u",8'h42);
$fclose(fout);
end
endmodule
输出应该是 8'h42。但真正的输出是
enter image description here
出现不必要的零。我猜这是因为verilog一次写入行二进制至少16n位,n>=1。所以我把第六行改成$fwrite(fout,"%u",24'h424d5f);,结果变成了
enter image description here
还有一个多余的零。如何让程序每次只输出 8 位。
【问题讨论】:
-
重复 stackoverflow.com/questions/40033790/… 顺便说一句:我刚刚在 Vivado 2017.2 中尝试了“%u”,这会导致系统致命错误。
-
谢谢。该问题下的答案确实解决了我的问题。尽管我仍然对 %c 或 %C 表示在 IEEE 标准中以 ASCII 字符格式显示 Verilog 感到困惑。它如何输出二进制文件?但它确实有效,再次感谢您的帮助。
-
"%c" 输出一个 8 位值。大多数情况下,它用于输出可打印字符,并且它可以是任何 8 位值,这在解释各种输出 % 格式的许多文本中经常被遗忘。另外,如果您查看 C 中的 printf 解释。
标签: verilog binaryfiles