【问题标题】:How to generate RISC V toolchain for architecture without FPU?如何为没有 FPU 的架构生成 RISC V 工具链?
【发布时间】:2019-06-03 15:39:41
【问题描述】:

我正在研究 Rocket Chip,想模拟没有 FPU 的处理器并在其上运行程序。但是,我找不到任何关于我应该添加哪些开关来以这种方式配置 RISC-V 工具的完整信息。谁能帮帮我?

从不同页面和论坛上的一些部分信息中,我尝试了许多替代方案,包括添加选项--with-isa=RV64IMAC--with-arch=RV64IMAC--with-abi=64lp,但大多数时候该项目会产生“未知选项”,所以我是想知道我是否使用了正确的开关,或者我没有遗漏什么。

在我尝试过的开关中,最成功的是只将--with-arch=RV64IMAC添加到riscv-gnu-toolchain:

这是我的 build.sh(在 riscv-tools 目录中):

build_project riscv-fesvr --prefix=$RISCV

build_project riscv-isa-sim --prefix=$RISCV --with-fesvr=$RISCV --with-isa=RV64IMAC

build_project riscv-gnu-toolchain --prefix=$RISCV --with-arch=RV64IMAC --disable-float

CC= CXX= build_project riscv-pk --prefix=$RISCV --host=riscv64-unknown-elf

build_project riscv-tests --prefix=$RISCV/riscv64-unknown-elf

在我添加开关 --with-arch 之前,它运行得非常好,我可以模拟在尖峰以及模拟器和 VCS 上运行我的程序(使用代理内核)。

现在的问题是:

  1. 在这种情况下,项目 riscv-tests 无法正确构建,并以找不到“fma”功能而终止

  2. 仍然使用代理内核,我像以前一样编译我的程序,添加选项-msoft-float-march=RV64IMAC。可执行文件在峰值时可以毫无问题地运行,但在模拟器和 VCS 上它们永远不会结束......

我认为这是由于使用 RV64IMAC 构建的,因为这是我唯一改变的东西,但也许我错了。如有任何建议,我将不胜感激。

【问题讨论】:

  • 我不确定如何解决 #2,但我认为从 riscv-tests 中删除浮点测试应该可以解决 #1
  • 啊,是的,我没想到这一点,谢谢!但同样,没有任何选择可以为我做这件事吗?否则我真的不知道如何只删除一些测试
  • 如果您进入 riscv-tests 目录并删除 isa/rv32uf 和 isa/rv64uf,应该可以这样做。快速查看 riscv-tests 的 makefile 表明没有禁用某些测试的配置选项。
  • 谢谢,但这对我不起作用...

标签: riscv fpu rocket-chip


【解决方案1】:

您可以尝试使用编译器/链接器键:

CFLAGS += -march=rv64imac -mabi=lp64  
LDFLAGS += -march=rv64imac -mabi=lp64 

这应该可以帮助您在没有硬件 FPU 的情况下生成代码,并将其与 soft-fpu 库正确链接。

可以在这里找到预构建的工具链作为示例:

http://gnutoolchains.com/risc-v/

【讨论】:

    【解决方案2】:

    感谢大家的帮助!

    我认为我有两个问题:

    首先,我不明白我添加到 build.sh 文件中的开关是用于配置的,所以我可以查看每个 RISC-V 目录的配置文件,看看哪些开关可用,哪些是可用的他们会的。

    其次,我可能没有让我的程序运行足够长的时间,因为与一般架构相比,它花费了太多时间,而且我的日志文件变得非常大。

    对于这些新手问题,请见谅...

    如果有人感兴趣,这就是我最后所做的并且对我有用的方法: 我使用了 IMA 指令集。我不知道我的问题是由于 C 扩展还是我犯了其他错误。无论如何,这是我用来生成工具链和其他 RISC-V 工具的:

    build_project riscv-fesvr --prefix=$RISCV
    build_project riscv-isa-sim --prefix=$RISCV --with-fesvr=$RISCV --with-isa=RV64IMA
    build_project riscv-gnu-toolchain --prefix=$RISCV --with-arch=RV64IMA --disable-float
    CC= CXX= build_project riscv-pk --prefix=$RISCV --host=riscv64-unknown-elf
    build_project riscv-tests --prefix=$RISCV/riscv64-unknown-elf
    

    我编译并链接选项:

    -msoft-float -march=rv64ima
    

    可能还应该有 -mabi=lp64 选项,但在我的架构上,这不受支持,我有一个旧版本的 repo...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      相关资源
      最近更新 更多