运行 C 语言程序
本文将通过实例使用 Bergamot 运行使用 C 语言编写的实例.
准备
下载 Bergamot
首先, 我们需要下载并准备 Bergamot 环境, 您可以参考 教程导入 的安装过程.
当您能够成功编译 Verilator 测试程序 VVerilatorTestCore
说明 Bergamot 已经准备完毕.
安装 RISC-V GCC 交叉编译器
要想编译您的 C 的程序到 RISC-V 二进制可执行程序,您需要安装 RISC-V 官方为您提供的 RISC-V GCC 交叉编译器. 该项目的地址为 riscv-gnu-toolchain .
关于架构模型, 由于 Bergamot 目前使用 RV32 并且浮点 FPU 并不完善, 我们推荐您使用:
./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32 --enable-multilib
参数 --prefix=/opt/riscv
指明安装地址, --with-arch=rv32gc
指明我们使用 rv32gc
扩展, --with-abi=ilp32
适用于 32 位软浮点, --enable-multilib
包含软浮点库.
选择已编译的二进制版本
编译 riscv-gnu-toolchain
需要下载很多相关依赖, 这些依赖通常体积非常大且编译耗时长, 您可以直接使用 bootlin 提供的已编译的二进制版本 bootlin .
编译 Bootloader 启动程序
对于测试核心 VerilatorTestCore
的启动地址为 hffff0000
, 该地址正好处于 ROM , 测试核心将在这里首先启动 Bootloader 程序, 这在以下代码中配置:
src/main/scala/bergamot/export/VerilatorTestCore.scala
private class VerilatorTestCore extends Module {
private val config = CoreConfig.default.copy(pcInit = "hffff0000")
// ...
}