【问题标题】:How can I generate a hexfile from C code for testing a 32-bit RISC-V hardware design?如何从 C 代码生成 hexfile 以测试 32 位 RISC-V 硬件设计?
【发布时间】:2016-04-15 13:13:14
【问题描述】:

我有一个基于 Berkeley 的 Vscale 处理器开发的 Verilog 硬件设计。为了测试设计,我想编译一些 C 程序并生成 hexfiles。我最终想从 hexfiles 生成 ROM 并执行 Verilog 模拟。哪个编译器最适合这个目的,riscv64-unknown-elf-gcc 还是 riscv32-unknown-elf-gcc? Vscale处理器架构为RV32IM。

【问题讨论】:

标签: hardware riscv


【解决方案1】:

您可以使用 elf2hex 命令从 elf 文件(使用 gcc -o 创建)创建 .hex 文件, 即:elf2hex 16 4096 my_elf_file > output.hex 如果你打算使用 32 位架构,我会使用 riscv32-unknown-elf-gcc 进行编译。

【讨论】:

  • 可以直接在我的处理器上运行riscv32-unknown-elf-gcc生成的代码吗?我认为,riscv-tests repo 生成的代码可以直接在我的处理器上运行,但这些是汇编程序。如何从 C 程序生成这样的代码?
  • 按照上面的建议使用 elf2hex。您还可以查看 riscv_tests 的 Makefiles 以了解它们是如何生成的。
  • 是的,你可以。如上所述,请查看 Makefile,在本例中位于 test repo 的 benchmarks 文件夹中。它从 C 文件创建可执行文件和 .hex。然后您可以使用spike,将其加载到fpga等中。即riscv32-unknown-elf-gcc -o myexecutable.riscv mycode.c并使用spike (-d option if you want to debug) pk myexecutable.riscv运行它
【解决方案2】:

我目前使用 objcopy 来测试我的核心设计。当前版本的 gcc 包含一个patch,它使 objcopy 能够输出 verilog 内存文件。

riscv32-unknown-elf-objcopy -O verilog input.elf output.vh

我可以轻松地将这些文件加载​​到我在 modelsim 中的模拟中。

但要回答您的问题,这将生成 intel 格式的十六进制文件。

riscv32-unknown-elf-objcopy -O ihex input.elf output.hex

Objcopy 还支持指定要导出哪些代码段以及在哪些内存位置。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多