1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Hot-zhao-tinyriscv

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

К сопровождающему проекту дизайну руководству "Как написать процессор RISC-V с нуля" обновления завершены.

В проекте в настоящее время есть три ветки: master, bram и verilator, которые соответствуют уровням "начинающий", "продвинутый" и "высокий". Вы можете выбрать ветку в зависимости от своих потребностей.

Проект постоянно обновляется, разработка ветки verilator продолжается. Если когда-нибудь обновления прекратятся, я обязательно сообщу об этом.

Если у вас есть вопросы или предложения по проекту, пожалуйста, используйте электронную почту для общения, спасибо.

1. Цель

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

2. Описание

В данном проекте реализован одноядерный 32-битный процессор RISC-V (tinyriscv), написанный на языке Verilog. Цель проекта — соответствовать процессорам ARM Cortex-M3.

Tinyriscv имеет следующие характеристики:

  1. Поддерживает инструкции RV32IM, проходит тесты совместимости RISC-V;
  2. Использует трехступенчатую конвейерную линию: загрузка инструкций, декодирование, выполнение;
  3. Может выполнять программы на языке C;
  4. Поддерживает JTAG, что позволяет читать и записывать память с помощью openocd (обновление программ в реальном времени);
  5. Поддерживает прерывания;
  6. Поддерживает шины;
  7. Поддерживает FreeRTOS;
  8. Легко переносится на любую платформу FPGA (если ресурсы достаточны).

Проект состоит из следующих директорий:rtl: Эта директория содержит все исходные коды на Verilog для tinyriscv;

sim: Эта директория содержит файлы батареек для симуляции и скрипты;

tests: Эта директория содержит исходные коды тестовых программ, где директория example содержит исходные коды примеров на языке C, а директория isa содержит исходные коды тестов для инструкций RV32;

tools: Эта директория содержит GNU инструменты для компиляции ассемблерных и C-программ, а также скрипты для преобразования двоичных файлов в формат mem для симуляции, а также скрипты для загрузки программ через последовательный порт;

pic: Директория для хранения изображений;

tb: Эта директория содержит файлы testbench для симуляции;

fpga: Директория для хранения файлов, связанных с FPGA, таких как файлы ограничений.

Общая структура tinyriscv представлена на следующем рисунке:

Общая структура tinyriscv

В настоящее время tinyriscv имеет 6 внешних устройств, каждый из которых имеет размер памяти 256 МБ. Распределение адресного пространства показано на следующем рисунке:

Распределение адресного пространства

3. Тестирование CoreMark

Текущие результаты тестирования программы CoreMark на платформе Xilinx Artix-7 35T FPGA (частота 50 МГц) представлены на следующем рисунке:

Результаты тестирования tinyriscvИз рисунка видно, что результаты тестирования tinyriscv составляют 2.4.

Результаты тестирования нескольких других микроконтроллеров представлены на следующем рисунке:

Результаты тестирования других микроконтроллеров

Для получения результатов тестирования других микроконтроллеров можно посетить официальный сайт coremark.

4. Как использовать

Проект может быть запущен на платформах Windows и Linux (в теории, macOS также поддерживается). Инструменты для компиляции и симуляции используются iverilog и vpp, а для просмотра волны — gtksave.

4.1 Установка окружения на платформе Windows

Перед использованием необходимо установить следующие инструменты:

  1. Установка инструмента iverilog

Для этого можно скачать с сайта http://bleyer.org/icarus/. В процессе установки необходимо согласиться на добавление iverilog в переменные окружения, либо добавить его вручную после завершения установки. После установки будут установлены инструменты iverilog, vvp и gtksave.

  1. Установка GNU инструментов

Можно скачать через Б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-gcc3. Установите инструмент make

Вы можете скачать через Baidu Pan (ссылка: https://pan.baidu.com/s/1nFaUIwv171PDXuF7TziDFg код доступа: 9ntc), или через Weiyun (https://share.weiyun.com/59xtmWR). После загрузки распакуйте архив, а затем добавьте путь к make в переменные окружения.

  1. Установите Python 3

Перейдите на официальный сайт Python (https://www.python.org/) и загрузите версию для Windows. Убедитесь, что вы загружаете Python 3. Если у вас медленный интернет, вы можете скачать через Baidu Pan (ссылка: https://pan.baidu.com/s/1gNC8L5dZTsN6E5TJD2rmnQ код доступа: 3b4t), или через Weiyun (https://share.weiyun.com/XwzSQHND). После установки добавьте Python в переменные окружения.

  1. Загрузите исходный код tinyriscv

Используйте команду git clone, не скачивайте архивом, иначе некоторые файлы могут иметь проблемы с форматированием.

git clone https://gitee.com/liangkangnan/tinyriscv.git

4.2 Установка среды для Linux

В данном примере используется система Ubuntu.

  1. Загрузите исходный код iverilog
git clone https://github.com/steveicarus/iverilog.git
  1. Перейдите на ветку v11 (необходимо использовать версию v11 или выше)
git checkout v11-branch
  1. Установите зависимости
sudo apt-get install autoconf gperf flex bison build-essential
  1. Скомпилируйте и установите iverilog и vvp
sh autoconf.sh
./configure
make
make install
  1. Создайте символическую ссылку для Python
sudo ln -s /usr/bin/python3.8 /usr/bin/python

Замените /usr/bin/python3.8 на версию Python, которую вы установили.

  1. Установите gtkwave
sudo apt-get install gtkwave
```7. Установите GNU инструментарий

Вы можете скачать через Baidu Pan (ссылка: https://pan.baidu.com/s/10uLZYf_cgtH94kZI_N6JhQ код доступа: uk0w) или загрузить другую версию. После загрузки распакуйте архив в папку tools.

В конце убедитесь, что строки в файле tests/example/common.mk соответствуют установленному инструментарию.

![toolchain](./pic/toolchain.png)

## 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". Методы использования других команд аналогичны.

![](./pic/test_output.png)

Также можно выполнить тестирование всех команд за один раз, используя следующий метод.

Откройте окно командной строки (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". Методы использования других команд аналогичны.

![new_test_output](./pic/new_test_output.png)

## 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Ядро процессора RISC-V, написанное с нуля, с минимальным функционалом и очень простым для понимания. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/Hot-zhao-tinyriscv.git
git@api.gitlife.ru:oschina-mirror/Hot-zhao-tinyriscv.git
oschina-mirror
Hot-zhao-tinyriscv
Hot-zhao-tinyriscv
master