Система состоит из ряда модулей, написанных на языке SystemVerilog и реализует простую систему на кристалле (SoC) микроконтроллерного класса. Программма сохраняется на внешнем носителе и после подачи питания переносится в ОЗУ, после чего начинает выполняться. Предполагается запуск как в симуляторе(Modelsim), так и на FPGA (Altera DE2-115)
Разрабатываемые компоненты:
- UART - модуль приемопередатчика UART
- GPIO - модуль для управления портами ввода-вывода
- RAM - контроллер оперативной памяти
- ROM - контроллер ПЗУ, содержащей начальный загрузчик
- Flash - контролллер памяти, которая содержит исполняемую программу
Диапазон | Описание |
---|---|
0x8000_0000 - 0x8fff_ffff | Основная память (RAM) |
0x9000_0000 - 0x90ff_ffff | ROM память |
0x9100_0000 - 0x91ff_ffff | Flash память |
0x9200_0000 - 0x92ff_ffff | Периферия - UART |
0x9300_0000 - 0x93ff_ffff | Периферия - GPIO |
Адрес | Имя | Описание |
---|---|---|
0x9200_0000 | UART_CONTROL | [RW] UART Configuration Register |
0x9200_0004 | UART_STATUS | [R] UART Status Register |
0x9200_0008 | UART_RX | [R] UART Data Register |
0x9200_000C | UART_TX | [W] UART Data Register |
Адрес | Имя | Описание |
---|---|---|
0x9300_0000 | GPIO_DIRECTION | [RW] Configuration Register |
0x9300_0004 | GPIO_INPUT | [R] GPIO Input Status |
0x9300_0008 | GPIO_OUTPUT | [RW] GPIO Output Control |
Однотактное процессорное ядро на архитектуре RISC-V.
Поддерживаемые команды: ADD, SUB, SLL, SRL, SRA, SLT, SLTU, XOR, OR, AND, ADDI, SLLI, SRLI, SRAI, SLTI, SLTIU, XORI, ORI, ANDI, LUI, BEQ, BNE, BLT, BGE, BLTU, BGEU, LB, LBU, LH, LHU, LW, SB, SH, SW
Ядро подключается к памяти через интерфейс AXI4-lite по двум шинам: INSTR и DATA.
INSTR шина использует каналы AXI, предназначенные для чтения, которые в top модуле rtl\core\soc_riscv_core.sv
имеют названия core_instr_...
.
DATA шина использует каналы AXI, предназначенные как для чтения так и для записи, которые в top модуле rtl\core\soc_riscv_core.sv
имеют названия core_data_...
.
Каналы интерфейса тактируются на той же частоте, что и ядро.
Вы можете провести симуляцию ядра с использованием ModelSim
и cocotb
.
Для этого требуется записать программу на hex коде RISC-V в файл sim\core\try_it\program.mem
и запустить sim\core\try_it\run_test.py
.
При желании можно проинциализировать память с данными, записав значения в файл sim\core\try_it\memory.mem
.
В ModelSim рекомендуется запустить скрипт sim\core\try_it\soc_riscv_core_script.tcl
.
Программа запишет состояние системы, характерезующеся значениями архитектурных регистров и основной памятью с данными в файлы sim\core\try_it\core_state
.
Файл sim\core\try_it\core_state\memory_list.mem
содержит значения слов памяти.
Файл sim\core\try_it\core_state\gpr_list.mem
содержит значения архитектурных регистров.