Перевод текста на русский язык:
Данный проект в настоящее время имеет три ветви: master, bram и verilator, которые соответствуют уровням входа, перехода и высокого уровня. Каждый может выбрать в соответствии со своими обстоятельствами.
Этот проект постоянно обновляется, ветвь verilator всё ещё находится в разработке. Если однажды она перестанет обновляться, я обязательно сообщу об этом.
Если у вас есть вопросы или предложения по этому проекту, пожалуйста, свяжитесь со мной по электронной почте.
Сопутствующая документация по дизайну находится в каталоге doc (в настоящее время не завершена).
1. Мотивы
Мотивом для создания этого открытого исходного проекта было моё желание изучить RISC-V, ознакомиться с содержанием инструкций и синтаксисом ассемблера RISC-V.
Я очень заинтересован в RISC-V и считаю, что у него большое будущее. Я думаю, что RISC-V — это как Linux для процессоров. Поскольку RISC-V начал быстро развиваться только в последние два года, существует относительно мало учебных материалов, особенно подходящих для начинающих. Поэтому изучение идёт медленно, и у меня возникла идея самостоятельно написать ядро процессора RISC-V с нуля.
Я новичок в FPGA, и чтобы быстро войти в курс дела и глубоко понять RISC-V, я начал изучать FPGA и Verilog. Моя работа связана с встраиваемым программным обеспечением, и я обычно не имею дело с FPGA или RISC-V, поэтому могу учиться только в свободное время.
В интернете есть много открытых проектов, посвящённых RISC-V, но большинство из них написано очень сложно, и для таких новичков, как я, изучение становится очень трудным. Текущий объём кода в этом проекте невелик, он очень прост и понятен, и является хорошим справочным материалом для тех, кто хочет изучить RISC-V. Надеюсь, он сможет привлечь больше людей к изучению RISC-V и способствовать его развитию. Если он сможет сыграть роль «брошенного камня», который вызовет цепную реакцию, это будет ещё лучше. Возможно, сравнение с камнем немного преувеличено, но даже если он сыграет роль песчинки, этого будет достаточно.
2. Введение
Проект реализует одноядерное 32-битное миниатюрное ядро процессора RISC-V (tinyriscv), написанное на языке Verilog. Цель проектирования — соответствовать процессору ARM Cortex-M3. Tinyriscv имеет следующие особенности:
Каталог rtl содержит все исходные файлы Verilog для tinyriscv;
Каталог sim содержит файлы пакетной обработки bat и сценарии для моделирования;
Каталог tests содержит исходный код тестовых программ, включая каталог example для исходных кодов программ на языке C и каталог isa для исходного кода тестирования инструкций RV32;
Каталог tools содержит компиляторы, ассемблеры и инструменты GNU для программ на C, а также скрипты для преобразования двоичных файлов в формат файлов для моделирования и скрипты для загрузки программ через последовательный порт.
Каталог pic содержит изображения;
Каталог tb содержит файлы testbench;
Каталог fpga содержит файлы, связанные с FPGA, такие как файлы ограничений.
Общая структура tinyriscv выглядит следующим образом:
Tinyriscv в настоящее время поддерживает шесть внешних устройств, каждое из которых имеет размер 256 МБ, а распределение адресного пространства выглядит следующим образом:
3. Тест CoreMark
На платформе Xilinx Artix-7 35T FPGA (тактовая частота 50 МГц) tinyriscv выполняет тест CoreMark, результаты которого выглядят следующим образом:
Можно видеть, что результат теста tinyriscv составляет 2,4.
Были выбраны несколько других микроконтроллеров, и результаты их тестов CoreMark выглядят следующим образом:
Больше результатов тестов микроконтроллеров можно найти на официальном сайте CoreMark.
4. Как использовать
Этот проект может работать на платформах Windows и Linux (теоретически также возможно на macOS), а инструментами для компиляции и моделирования являются iverilog и vpp. Инструмент для просмотра формы волны — gtkwave.
4.1 Настройка среды на платформе Windows
Перед использованием необходимо установить следующие инструменты:
Его можно загрузить с сайта http://bleyer.org/icarus/, во время установки убедитесь, что iverilog добавлен в переменную окружения. Конечно, вы также можете добавить его вручную после установки. После установки iverilog, vvp и gtkwave также будут установлены.
Вы можете скачать его с Baidu Cloud (ссылка: https://pan.baidu.com/s/1bYgslKxHMjtiZtIPsB2caQ, пароль: 9n3c) или с Weiyun (https://share.weiyun.com/5bMOsu9), после завершения загрузки распакуйте сжатый пакет в каталог tools этого проекта. Обратите внимание на структуру каталогов, после распаковки путь инструмента должен быть следующим:
tinyriscv\tools\gnu-mcu-eclipse-riscv-none-gcc-8.2.0-2.2-20190521-0004-win64\bin\riscv-none-embed-gcc
Вы можете загрузить его с Baidu Cloud (ссылка: https://pan.baidu.com/s/1nFaUIwv171PDXuF7TziDFg, пароль: 9ntc) или с Weiyun (https://share.weiyun.com/59xtmWR), после завершения загрузки просто распакуйте его, затем добавьте путь make в переменную среды.
Перейдите на официальный сайт Python (https://www.python.org/) и загрузите версию Python для Windows. Обратите внимание, что вам нужно загрузить версию Python 3. Пользователи с медленным интернет-соединением могут загрузить её с Baidu Cloud (ссылка: https://pan.baidu.com/s/1gNC8L5dZTsN6E5TJD2rmnQ, пароль: 3b4t) или Weiyun (https://share.weiyun.com/XwzSQHND). После завершения установки добавьте Python в переменную среды.
Используйте команду git clone для загрузки, не используйте метод zip для загрузки, иначе некоторые файлы будут иметь проблемы с форматом.
git clone https://gitee.com/liangkangnan/tinyriscv.git
4.2 Настройка среды на платформе Linux
Здесь в качестве примера используется система Ubuntu.
git clone https://github.com/steveicarus/iverilog.git
git checkout v11-branch
sudo apt-get install autoconf gperf flex bison build-essential
sh autoconf.sh
./configure
make
make install
sudo ln -s /usr/bin/python3.8 /usr/bin/python
Где /usr/bin/python3.8 соответствует фактически установленному вами питону.
sudo apt-get install gtkwave
Вы можете загрузить его из Baidu Cloud (ссылка: https://pan.baidu.com/s/10uLZYf_cgtH94kZI_N6JhQ, пароль: uk0w) или загрузить другую версию самостоятельно. После загрузки распакуйте её в каталог tools.
Наконец, убедитесь, что содержимое файла tests/example/common.mk соответствует установленному набору инструментов.
4.3 Запуск командных тестовых программ
Здесь в качестве примера рассматривается платформа Windows, платформа Linux аналогична.
Старые командные тестовые программы представляют собой более ранний метод тестирования совместимости команд, хотя RISC-V официально больше не обновляется, они по-прежнему являются хорошим эталоном для тестирования.
Далее в качестве примера рассмотрим инструкцию add, объясним, как запустить старую командную тестовую программу.
Откройте окно CMD, перейдите в каталог sim и выполните следующую команду:
python .\sim_new_nowave.py ..\tests\isa\generated\rv32ui-p-add.bin inst.data
Если запуск пройдёт успешно, вы увидите вывод «PASS». Для других инструкций используйте аналогичный метод.
Также можно одновременно протестировать все инструкции, выполнив следующие действия.
Откройте окно CMD и перейдите в каталог sim, выполните следующую команду:
python .\test_all_isa.py
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )