如何从 C 代码生成 hexfile 以测试 32 位 RISC-V 硬件设计?

How can I generate a hexfile from C code for testing a 32-bit RISC-V hardware design?

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

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

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

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

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

但是为了回答你的问题,这将生成 intel 格式的 hex 文件。

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

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