如何在没有FPU的情况下为架构生成RISC V工具链?

时间:2019-06-03 15:39:41

标签: riscv fpu rocket-chip

我正在研究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 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

感谢大家的帮助!

我认为我有两个问题:

首先,我不了解我添加到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选项,但是在我的体系结构中不支持此选项,我的存储库版本较旧...