【问题标题】:How to output a bmp file using verilog?如何使用verilog输出bmp文件?
【发布时间】: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


【解决方案1】:

verilog fwrite output bytes

在这个问题下,dave_59 的解决方案效果很好。

您可以使用 %c 写出单个字节。您可以使用比特流转换将数据转换为字节数组,然后执行 foreach(array_of_bytes[i]) $fwrite(fd,"%c",array_of_bytes[i]);

如果您有大量数据,您可能希望通过用%u 写出4 字节的倍数,用%c 写出剩余字节来优化这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2019-08-10
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多