Как создать RISC V toolchain для архитектуры без FPU? - PullRequest
0 голосов
/ 03 июня 2019

Я работаю над 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, это работалоочень хорошо, и я мог бы имитировать запуск моих программ (с прокси-ядром) на spike, а также на эмуляторе и VCS.

Теперь проблема в том, что:

  1. в этомесли Riscv-тесты проекта не собираются правильно, он завершается сообщением, что не может найти функцию 'fma'

  2. Все еще с прокси-ядром, я компилирую свои программы, как и раньше,с добавлением опций -msoft-float и -march=RV64IMAC.Исполняемые файлы без проблем запускались бы на spike, но на эмуляторе и VCS они просто никогда не заканчивались ...

Я думаю, что это связано со сборкой с RV64IMAC, поскольку это единственное, чтоЯ изменился, но, возможно, я ошибаюсь.Буду благодарен за любые предложения.

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Спасибо за помощь всем!

Я думаю, что у меня было две проблемы:

Во-первых, я не понял, что переключатели, которые я добавляю в файл 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, но в моей архитектуре это не поддерживается, у меня есть немного более старая версия репо ...

0 голосов
/ 10 июня 2019

Вы можете попробовать использовать ключи компилятора / компоновщика:

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

Это должно помочь вам генерировать код без аппаратного FPU и правильно связать его с библиотекой soft-fpu.

Готовый набор инструментов можно найти здесь для примера:

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

...