К сопровождающему проекту дизайну руководству "Как написать процессор RISC-V с нуля" обновления завершены.
В проекте в настоящее время есть три ветки: master, bram и verilator, которые соответствуют уровням "начинающий", "продвинутый" и "высокий". Вы можете выбрать ветку в зависимости от своих потребностей.
Проект постоянно обновляется, разработка ветки verilator продолжается. Если когда-нибудь обновления прекратятся, я обязательно сообщу об этом.
Если у вас есть вопросы или предложения по проекту, пожалуйста, используйте электронную почту для общения, спасибо.
Цель данного открытого проекта - это моя цель освоить RISC-V, ознакомиться с инструкциями RISC-V и синтаксисом ассемблерного кода.
Я очень интересуюсь RISC-V и считаю его перспективным направлением развития. Я считаю RISC-V "Linuxом" процессоров. Поскольку RISC-V начал активно развиваться только в последние два года, материалов для изучения RISC-V пока мало, особенно материалов для начинающих. Поэтому процесс обучения очень медленный, и я решил начать писать ядро процессора RISC-V с нуля.
Я новичок в области FPGA, и чтобы быстро освоить RISC-V, я начал изучать FPGA и язык Verilog. Моя работа связана с встраиваемыми системами, и я редко сталкиваюсь с FPGA или RISC-V в повседневной работе, поэтому мне приходится учиться в свободное время.На сайте есть много открытых проектов по RISC-V, но большинство из них написаны на высоком уровне, что затрудняет изучение для новичков. В данном проекте код очень прост и легко понимаем, что делает его отличным ресурсом для начинающих, желающих изучить RISC-V. Я надеюсь привлечь больше студентов к изучению RISC-V и способствовать его развитию. Если проект сможет сыграть роль "брошенного кирпича", чтобы привлечь внимание, то это будет замечательно. Возможно, роль "кирпича" несколько преувеличена, но даже если проект сыграет роль песчинки, это будет уже хорошо.
В данном проекте реализован одноядерный 32-битный процессор RISC-V (tinyriscv), написанный на языке Verilog. Цель проекта — соответствовать процессорам ARM Cortex-M3.
Tinyriscv имеет следующие характеристики:
Проект состоит из следующих директорий:rtl: Эта директория содержит все исходные коды на Verilog для tinyriscv;
sim: Эта директория содержит файлы батареек для симуляции и скрипты;
tests: Эта директория содержит исходные коды тестовых программ, где директория example содержит исходные коды примеров на языке C, а директория isa содержит исходные коды тестов для инструкций RV32;
tools: Эта директория содержит GNU инструменты для компиляции ассемблерных и C-программ, а также скрипты для преобразования двоичных файлов в формат mem для симуляции, а также скрипты для загрузки программ через последовательный порт;
pic: Директория для хранения изображений;
tb: Эта директория содержит файлы testbench для симуляции;
fpga: Директория для хранения файлов, связанных с FPGA, таких как файлы ограничений.
Общая структура tinyriscv представлена на следующем рисунке:
В настоящее время tinyriscv имеет 6 внешних устройств, каждый из которых имеет размер памяти 256 МБ. Распределение адресного пространства показано на следующем рисунке:
Текущие результаты тестирования программы CoreMark на платформе Xilinx Artix-7 35T FPGA (частота 50 МГц) представлены на следующем рисунке:
Из рисунка видно, что результаты тестирования tinyriscv составляют 2.4.
Результаты тестирования нескольких других микроконтроллеров представлены на следующем рисунке:
Для получения результатов тестирования других микроконтроллеров можно посетить официальный сайт coremark.
Проект может быть запущен на платформах Windows и Linux (в теории, macOS также поддерживается). Инструменты для компиляции и симуляции используются iverilog и vpp, а для просмотра волны — gtksave.
Перед использованием необходимо установить следующие инструменты:
Для этого можно скачать с сайта http://bleyer.org/icarus/. В процессе установки необходимо согласиться на добавление iverilog в переменные окружения, либо добавить его вручную после завершения установки. После установки будут установлены инструменты iverilog, vvp и gtksave.
Можно скачать через Бaidu Yun (ссылка: 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
3. Установите инструмент make
Вы можете скачать через Baidu Pan (ссылка: https://pan.baidu.com/s/1nFaUIwv171PDXuF7TziDFg код доступа: 9ntc), или через Weiyun (https://share.weiyun.com/59xtmWR). После загрузки распакуйте архив, а затем добавьте путь к make в переменные окружения.
Перейдите на официальный сайт Python (https://www.python.org/) и загрузите версию для Windows. Убедитесь, что вы загружаете Python 3. Если у вас медленный интернет, вы можете скачать через Baidu Pan (ссылка: https://pan.baidu.com/s/1gNC8L5dZTsN6E5TJD2rmnQ код доступа: 3b4t), или через Weiyun (https://share.weiyun.com/XwzSQHND). После установки добавьте Python в переменные окружения.
Используйте команду git clone, не скачивайте архивом, иначе некоторые файлы могут иметь проблемы с форматированием.
git clone https://gitee.com/liangkangnan/tinyriscv.git
В данном примере используется система 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
на версию Python, которую вы установили.
sudo apt-get install gtkwave
```7. Установите GNU инструментарий
Вы можете скачать через Baidu Pan (ссылка: https://pan.baidu.com/s/10uLZYf_cgtH94kZI_N6JhQ код доступа: uk0w) или загрузить другую версию. После загрузки распакуйте архив в папку tools.
В конце убедитесь, что строки в файле tests/example/common.mk соответствуют установленному инструментарию.

## 4.3 Запуск команд для тестирования программы
В данном примере используется Windows, но для Linux процесс аналогичен.
### 4.3.1 Запуск старых команд для тестирования программы
Старые команды для тестирования инструкций относятся к ранним методам проверки совместимости инструкций. Несмотря на то, что 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`
### 4.3.2 Запуск новой программы тестирования команд
Новая программа тестирования совместимости команд ([riscv-compliance](https://github.com/riscv/riscv-compliance)) более строго проверяет команды, что позволяет точно определить результат выполнения каждой команды. Кроме того, официальная команда RISC-V постоянно обновляет эту программу.
В качестве примера использования команды `add` будет показано, как запустить новую программу тестирования команд.
Откройте окно командной строки (CMD), перейдите в каталог `sim/compliance_test` и выполните следующую команду:
`python .\compliance_test.py ..\..\tests\riscv-compliance\build_generated\rv32i\I-ADD-01.elf.bin inst.data`
Если выполнение прошло успешно, вы увидите вывод "PASS". Методы использования других команд аналогичны.

## 4.4 Запуск программ на языке C
Примеры программ на языке C расположены в каталоге `tests/example`.
В качестве примера использования программы `simple` будет показано, как запустить программу на языке C.
Откройте окно командной строки (CMD), перейдите в каталог `tests/example/simple` и выполните следующую команду для компиляции:
`make`
После успешной компиляции перейдите в каталог `sim` и выполните следующую команду для запуска тестирования:
`python .\sim_new_nowave.py ..\tests\example\simple\simple.bin inst.data`
# 5. Перенос на FPGA
Подробные методы переноса на FPGA можно найти в файле `README.md` каталога `fpga` проекта.# 6. Будущие планы
1. Написание технического описания;
2. Оптимизация ресурсов и энергопотребления (в основном декодер и исполнитель);
3. Поддержка вложенных аппаратных прерываний и быстрых реального времени прерываний;
4. ...
# 7. История обновлений
2020-10-25: Поддержка компиляции и симуляции на платформе Linux. Создание ветки bram, использование BRAM вместо LUTRAM (DRAM), что позволяет сэкономить более 50% ресурсов LUT и запускать более крупные программы.
2020-07-04: Поддержка записи прошивки через UART.
2020-05-27: Добавление новых тестовых примеров совместимости команд (riscv-compliance).
2020-05-05: Поддержка SPI master, добавление тестовых примеров SPI.
2020-04-25: Поддержка FreeRTOS (v10.3.1).
2020-04-18: Добавление комментариев к коду, оптимизация модуля управления прерываниями. 11.04.2020: Добавлен пример и результаты тестирования CoreMark.
05.04.2020: Поддержка команд CSR.
29.03.2020: Важное обновление, основные изменения:
1. Поддержка внутренней шины RIB (RISC-V Internal Bus);
2. Оптимизация кода умножения, что позволило сэкономить 2/3 ресурсов DSP;
3. Оптимизация кода деления, что позволило исправить ошибку в модуле деления;
4. Улучшение примеров на C, кода запуска и скриптов линковки;
5. Добавлен скрипт для тестирования всех команд одновременно.
08.03.2020: Поддержка прерываний, для этого добавлен модуль таймера для проверки.01.03.2020: Поддержка JTAG, что позволяет использовать openocd для чтения и записи памяти. Документация по JTAG доступна по ссылке [введение в отладку RISC-V](https://liangkangnan.gitee.io/2020/03/21/введение-в-отладку-RISC-V/).
23.02.2020: Поддержка запуска на платформе Xilinx Artix-7. Подробнее см. [tinyriscv_vivado](https://gitee.com/liangkangnan/tinyriscv_vivado).
13.01.2020: Поддержка команд деления RV32M. Реализация на C см. [div](https://gitee.com/liangkangnan/div).
02.01.2020: Поддержка команд умножения RV32M.
06.12.2019: Первая публикация.
# 8. Другое
Если у вас есть вопросы или предложения, пожалуйста, свяжитесь со мной через личное сообщение или электронную почту (liangkangnan@163.com).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )