0

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

从不同页面和论坛上的一些部分信息中,我尝试了许多替代方案,包括添加 options ,--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

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

现在的问题是:

  1. 在这种情况下,项目 riscv-tests 没有正确构建,通过说它找不到“fma”函数来终止

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

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

4

2 回答 2

0

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

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

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

例如,可以在此处找到预构建的工具链:

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

于 2019-06-10T10:56:10.727 回答
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选项,但在我的架构上,这不受支持,我有一个旧版本的 repo ......

于 2019-06-13T09:24:34.897 回答