6.05M
AI

_D0_A2_D1_80_D0_B8_D1_82_9_D0_B6_D0_B5_D0_BB_D0_B5_D0_B7_D0_BE_FPGA

1.

ВВЕДЕНИЕ
FPGA изнутри
Аппаратная экскурсия по Tang Nano 9K и нашему троичному процессору «Трит-9»
ОТ ЭЛЕКТРИЧЕСКОГО СИГНАЛА
К ЛОГИКЕ, ПАМЯТИ
И СОБСТВЕННОМУ CPU
45 технических слайдов
ТРИТ-9 / FPGA ИЗНУТРИ
Введение
01

2.

МАРШРУТ
Что мы разберём
От физической платы — к цифровой схеме и к исполняемой инструкции.
01
Плата и кристалл
FPGA, контакты, LUT, регистры, маршруты
02
Память и время
BSRAM, PLL, такты, синхронное чтение
03
Наш процессор
Триты, ALU, команды, стек, прерывания
04
Практика
Размещение, сборка, реальные испытания
ТРИТ-9 / FPGA ИЗНУТРИ
Маршрут
02

3.

ПЛАТА
Что мы держим в руках?
Tang Nano 9K — это печатная плата; GW1NR-9 — программируемый кристалл на ней.
USB-C / питание
Связь с ноутбуком и подача питания
GW1NR-9
Программируемая цифровая схема
BL702 USB-мост
USB-JTAG / USB-UART для настройки и обмена
Пины / LED / кнопки
Физические входы и выходы нашего проекта
ТРИТ-9 / FPGA ИЗНУТРИ
Плата
03

4.

МАСШТАБ
Три уровня одного устройства
Сначала различим корпус и плату, затем заглянем внутрь программируемой логики.
ПЕЧАТНАЯ ПЛАТА
МИКРОСХЕМА GW1NR-9
КОНФИГУРАЦИЯ «ТРИТ9»
Разъёмы, питание, кварц,
USB, кнопки
Корпус с FPGA и
встроенными ресурсами
Логика, память, регистры,
маршрутизация
Ключевая мысль: FPGA сама по себе не является «готовым CPU». Мы создаём схему CPU внутри
неё.
ТРИТ-9 / FPGA ИЗНУТРИ
Масштаб
04

5.

ПРИНЦИП
FPGA ≠ микроконтроллер
Одинаково выглядит как микросхема, но принцип работы другой.
МИКРОКОНТРОЛЛЕР
FPGA
Уже есть фиксированный CPU.
Загружаем программу → CPU выполняет команды.
Внутреннее устройство CPU не меняется.
Есть LUT, FF, память и коммутация.
Загружаем конфигурацию → образуется цифровая
схема.
Эта схема может стать нашим CPU.
Verilog описывает оборудование, а не последовательность команд для процессора
компьютера.
ТРИТ-9 / FPGA ИЗНУТРИ
Принцип
05

6.

РЕСУРСЫ
Что доступно в GW1NR-9?
Числа из документации производителя и Sipeed Wiki.
8 640
6 480
26
LUT4
Flip-Flops
BSRAM × 18 Кбит
20
2
4
DSP 18×18
PLL
I/O-банка
LUT/FF — ресурсы цифровой логики; BSRAM/DSP/PLL — специализированные аппаратные блоки.
ТРИТ-9 / FPGA ИЗНУТРИ
Ресурсы
06

7.

КРИСТАЛЛ
Условная карта ресурсов FPGA
Это схема архитектуры, а НЕ точная карта координат элементов нашего проекта.
ВХОДЫ / ВЫХОДЫ (IOB)
PLL
DSP
I/O
DSP
RAM
RAM
DSP
FLASH
RAM
DSP
ВХОДЫ / ВЫХОДЫ (IOB)
Клетки = группы LUT/FF; RAM, DSP, PLL изображены условно
ТРИТ-9 / FPGA ИЗНУТРИ
Кристалл
07

8.

ТКАНЬ FPGA
Что такое «логическая ткань»?
Множество повторяющихся узлов и программируемых соединений между ними.
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
LUT + FF
Выбранный участок — например, логика нашей ALU
ТРИТ-9 / FPGA ИЗНУТРИ
Ткань FPGA
08

9.

LU T
LUT4 — маленькая таблица истинности
Четыре двоичных входа дают 16 комбинаций; память таблицы задаёт один выходной бит.
ПРИМЕР: y = A И B
A
B
Y
0
0
0
0
1
0
1
0
0
1
1
1
A
LUT4
Y
B
Одна LUT может реализовать и сложную комбинационную функцию, не только AND.
ТРИТ-9 / FPGA ИЗНУТРИ
LUT
09

10.

LU T В Н У Т Р И
Почему LUT похожа на крошечную память?
Адрес = четыре входа; выход = заранее записанный бит таблицы.
0
0
0
0
0
1
0
1
0
0
0
0
0
1
0
0
Мультиплексор
1 бит
Выбрать бит 0…15
16 конфигурационных битов
A
ТРИТ-9 / FPGA ИЗНУТРИ
B
C
D
LUT внутри
10

11.

ПАМЯТЬ СОСТОЯНИЯ
DFF — триггер, который помнит один бит
LUT вычисляет «сейчас», а DFF удерживает результат до следующего фронта такта.
Комбинационная
логика (LUT)
DFF
Q
Запомнить D по CLK
CLK ↑
Пример: счётчик PC хранится в регистрах, а логика вычисляет PC+1.
ТРИТ-9 / FPGA ИЗНУТРИ
Память состояния
11

12.

C F U / C LU
Из каких частей состоит логическая ячейка Gowin?
По DS117: блок CFU/CLU имеет 4 секции CLS и сетку локальной маршрутизации CRU.
Упрощённый CFU/CLU
CLS 0
LUT4
8 LUT4
Четыре секции × 2
CLS 1
LUT4
FF ×2
LUT4
LUT4
FF ×2
6 FF
CLS 2
LUT4
Три секции × 2
CLS 3
LUT4
FF ×2
LUT4
LUT4
без FF
CRU
Локальные связи
ТРИТ-9 / FPGA ИЗНУТРИ
CFU / CLU
12

13.

ПРОВОДА
Программируемая коммутация: маршрутизация
LUT сама по себе бесполезна без соединений.
LUT/FF 1
LUT/FF 2
LUT/FF 3
LUT/FF 4
LUT/FF 5
LUT/FF 6
LUT/FF 7
LUT/FF 8
Один путь сигнала может пересечь множество узлов
ТРИТ-9 / FPGA ИЗНУТРИ
Провода
13

14.

СИНТЕЗ / РАЗМЕЩЕНИЕ
Где физически оказывается наша ALU?
Логическая схема задаётся RTL; физические координаты выбирают инструменты сборки.
Зелёные клетки
Условное размещение ALU
Синие клетки
Условное размещение управления
Реальные координаты
Нужен отчёт размещения
Учебная схема — НЕ реальный floorplan v0.14
ТРИТ-9 / FPGA ИЗНУТРИ
Синтез / размещение
14

15.

ПАМЯТЬ
BSRAM — готовые блоки памяти в кристалле
Каждый блок до 18 432 бит; у GW1NR-9 таких блоков 26.
Адрес
Какую ячейку читаем?
Данные
Что читаем / записываем?
Такт + WE
матрица битов
Когда происходит операция?
Режимы: одиночный порт, двойной порт, ROM; параметры определяются примитивом.
ТРИТ-9 / FPGA ИЗНУТРИ
Память
15

16.

ПАМЯТЬ V0.14
Почему мы сделали два банка BSRAM?
Так можно записать два соседних 9-тритных слова параллельно.
BSRAM A — чётные
0
2
4
6
BSRAM B — нечётные
8
10
1
3
5
7
… 80
41 слово × 18 бит
9
11
… 79
40 слов × 18 бит
Широкая операция обращается к двум банкам одновременно.
ТРИТ-9 / FPGA ИЗНУТРИ
Память v0.14
16

17.

ШИРОКАЯ RAM
Порядок банков зависит от младшего бита адреса
Оба варианта мы испытали на физической Tang Nano 9K.
WSTOREM 0
WSTOREM 1
RAM[0] = −8732
RAM[1] = −8732
RAM[1] = +4
RAM[2] = +4
−8732 + 4 × 19 683 = 70 000
ТРИТ-9 / FPGA ИЗНУТРИ
Широкая RAM
17

18.

СИНХРОННОСТЬ
Почему BSRAM нельзя читать «мгновенно»?
Адрес выставляется до фронта такта; результат появляется после фронта.
T0
T1
T2
T3
T4
T5
АДРЕС
0
0
1
1
1
ДАННЫЕ
старое
старое
старое
новое
новое
После изменения адреса CPU ждёт data_valid / memory_ready.
ТРИТ-9 / FPGA ИЗНУТРИ
Синхронность
18

19.

ГОТОВНОСТЬ ПАМЯТИ
Как v0.14 избегает чтения старых данных
Сигнал memory_ready разрешает исполнение только после правильной выборки.
step_requested
Пользователь /
делитель
instruction_ready
Инструкция для PC
memory_ready
Данные RAM готовы
!reset
Сброс не активен
AND
EXECUTE
Результат: команда не исполняется на непроверенных данных.
ТРИТ-9 / FPGA ИЗНУТРИ
Готовность памяти
19

20.

ТАКТИРОВАНИЕ
PLL: от 27 МГц до 6,75 МГц
Частота FPGA и скорость исполнения команд — не одно и то же.
27 МГц
PLL ÷4
6,75 МГц
STEP: 5 команд/с
Режим отладки специально замедляет CPU, но схема продолжает тактироваться быстро.
ТРИТ-9 / FPGA ИЗНУТРИ
Тактирование
20

21.

CLK
Что делает один фронт такта?
Результат вычисления попадает в регистр, затем начинается следующий переход.
PC
Логика PC+1 / JMP
D вход PC-регистра
⏱ Следующий CLK: D фиксируется в PC → изменение состояния завершено
ТРИТ-9 / FPGA ИЗНУТРИ
CLK
21

22.

ВНЕШНИЙ МИР
От USB на ноутбуке до сигналов UART в FPGA
USB-команды не «попадают прямо в ALU» — сначала их принимает интерфейс.
НОУТБУК
BL702
FPGA I/O
Трит-9
C-консоль
USB ↔ UART/JTAG
RX / TX 115200
Команды + статус
Команды: load · run · pause · step · mem · wide · timer · irq
ТРИТ-9 / FPGA ИЗНУТРИ
Внешний мир
22

23.

ПИТАНИЕ / КОНФИГУРАЦИЯ
SRAM, Flash, BSRAM и PSRAM — это разные вещи
Одно слово «память» означает несколько физических механизмов.
Конфигурация FPGA
Биты настройки схемы · Сброс питания: нужно учитывать режим загрузки
BSRAM
Рабочая память нашего CPU · 3 блока использует v0.14
Flash
Энергонезависимое хранение · Программы / битстрим — зависит от загрузки
PSRAM
Дополнительная память · Пока не задействована в Трит-9
ТРИТ-9 / FPGA ИЗНУТРИ
Питание / конфигурация
23

24.

АППАРАТНЫЕ УСКОРИТЕЛИ
DSP-блоки: выделенное умножение и обработка
сигналов
У GW1NR-9 есть 20 аппаратных умножителей 18×18.
A × B + C
Троичная ALU
LUT + carry + FF
Аппаратный DSP
Наличие DSP в кристалле не означает, что наш CPU автоматически их использует.
ТРИТ-9 / FPGA ИЗНУТРИ
Аппаратные ускорители
24

25.

ТРОИЧНЫЕ ЦИФРЫ
Что такое трит и сбалансированная троичная
система?
Один трит принимает −1, 0 или +1. Это математический выбор, а не физика проводов FPGA.
−1
0
+1
00
01
10
11 = недопустимый код; обработка зависит от нашей RTL-логики
ТРИТ-9 / FPGA ИЗНУТРИ
Троичные цифры
25

26.

СИСТЕМА СЧИСЛЕНИЯ
Как троичные разряды дают целое число?
Каждая следующая позиция весит в три раза больше предыдущей.
+
0
−
+
вес 27
вес 9
вес 3
вес 1
Пример: +1 × 27 + 0 × 9 − 1 × 3 + 1 × 1 = 25
Диапазон 9 тритов: от −9 841 до +9 841.
ТРИТ-9 / FPGA ИЗНУТРИ
Система счисления
26

27.

A LU
АЛУ — арифметико-логическое устройство
Это аппаратная часть CPU, которая вычисляет операции над числами.
Операнд A
ALU
РЕЗУЛЬТАТ
Операнд B
ADD / SUB
Декодер команды выбирает операцию
ТРИТ-9 / FPGA ИЗНУТРИ
ALU
27

28.

ТРОИЧНЫЙ СУММАТОР
Один разряд ALU: цифра результата + перенос
Сумма трёх цифр: A + B + перенос из предыдущего разряда.
+1
+
+1
+
0
=
2
Сбалансированная нормализация
Текущий трит
−1 записывается в результат
Перенос
+1 поступает к следующему разряду
2 = −1 + 3 × (+1)
ТРИТ-9 / FPGA ИЗНУТРИ
Троичный сумматор
28

29.

ЦЕПОЧКА ПЕРЕНОСОВ
Как построить сложение 9 или 18 тритов?
Одноразрядные сумматоры соединяются цепью carry.
ADD 0
ADD 1
ADD 2
ADD 3
ADD 4
ADD 5
ADD 6
r0
r1
r2
r3
r4
r5
r6
9 тритов = 9 звеньев; 18 тритов = 18 звеньев
На схеме показаны только 7 звеньев, чтобы сохранить читаемость.
ТРИТ-9 / FPGA ИЗНУТРИ
Цепочка переносов
29

30.

Э В О Л Ю Ц И Я A LU
Почему v0.12 была быстрее, а v0.13 — компактнее?
Ресурсы и критический путь зависят от того, как описана арифметика.
v0.12 · таблица
v0.13 · компактная логика
7 632 LUT
Fmax 21,68 МГц
Быстрее по анализу, больше площадь
7 221 LUT
Fmax 13,62 МГц
Меньше площадь, длиннее критический путь
Частота Fmax — результат анализа трассировки, а не измерение производительности программы.
ТРИТ-9 / FPGA ИЗНУТРИ
Эволюция ALU
30

31.

СИСТЕМА НА КРИСТАЛЛЕ
Что именно находится в нашем «Трит-9» v0.14?
Все эти блоки реализованы внутри одной FPGA, но физически распределены по её ресурсам.
UART / монитор
Регистры
ACC · WACC · WB
Память программ
64 × 26
PC / декодер
RAM данных
2 × BSRAM
ALU 9 / 18
Таймер / IRQ / стек
Логическая схема: не физическая карта размещения
ТРИТ-9 / FPGA ИЗНУТРИ
Система на кристалле
31

32.

РЕГИСТРЫ
Что CPU должен помнить между командами
Каждый из регистров реализован как набор двоичных FF.
PC
6 бит
Адрес следующей команды
ACC / B
18 бит каждый
9-тритные операнды
WACC / WB
36 бит каждый
18-тритные операнды
WOUT
36 бит
Выходной результат для мониторинга
SP + стек
4 бита + 9 × 6
Возврат из CALL / RET
таймер / IRQ
разные регистры
Отсчёт времени и обработчики
ТРИТ-9 / FPGA ИЗНУТРИ
Регистры
32

33.

ИНСТРУКЦИЯ
Как выглядит одна команда CPU в памяти?
Каждая инструкция занимает 26 двоичных бит: 8 opcode и 18 бит операнда.
8 бит
18 бит = 9 тритов
КОД ОПЕРАЦИИ
НЕПОСРЕДСТВЕННЫЙ ОПЕРАНД / АДРЕС
64 команды × 26 бит = 1 664 бита исходной программной памяти
Физически программа хранится в одном BSRAM, а не в 64 отдельных регистрах.
ТРИТ-9 / FPGA ИЗНУТРИ
Инструкция
33

34.

ВЫБОРКА
Путь одной инструкции через «Трит-9»
Чтение программы и RAM синхронно, поэтому готовность данных контролируется.
1
PC = адрес
2
program_mem → слово
3
Декодер opcode
4
ALU / RAM / переход
5
Записать регистр и PC
ТРИТ-9 / FPGA ИЗНУТРИ
Выборка
34

35.

ПРИМЕР ПРОГРАММЫ
Реальные команды нашего wide_demo.tasm
Мы выполняем 150 000 − 80 000 и записываем результат в RAM.
WALO -7464
WAHI 8
WBLO -1268
WBHI -4
WADD
WOUT
WSTOREM 0
WALO 0
WAHI 0
WLOADM 0
WOUT
ТРИТ-9 / FPGA ИЗНУТРИ
; младшие 9 тритов A
; старшие 9 тритов A
; младшие 9 тритов B
; старшие 9 тритов B
; 150000 + (-80000)
; 70000
; RAM[0], RAM[1]
; восстановить из BSRAM
; снова 70000
Пример программы
35

36.

РАЗБОР ВЫЧИСЛЕНИЯ
Проследим число 70 000 до физической RAM
Математический результат раскладывается на две 9-тритные части.
150 000 + (−80 000) = 70 000
МЛАДШЕЕ СЛОВО −8732
СТАРШЕЕ СЛОВО +4
−8732 + 4 × 3⁹ = 70 000
ТРИТ-9 / FPGA ИЗНУТРИ
Разбор вычисления
36

37.

ПОДПРОГРАММЫ
Зачем процессору стек CALL / RET?
CALL запоминает адрес возврата, RET восстанавливает его.
PC → CALL 20
PC = 20
... работа функции ...
СТЕК: адрес 11
RET → PC = 11
ТРИТ-9 / FPGA ИЗНУТРИ
Подпрограммы
37

38.

ПРЕРЫВАНИЯ
Что делает таймер и IRQ?
Внешние события могут изменить ход выполнения программы.
TSET N
timer_tick
IRQ pending
IVEC + EI
IRET
Запустить таймер
Каждая 1 мс
Запомнить событие
Перейти к
обработчику
Вернуть PC и регистры
Счёт времени ≠ число исполняемых инструкций: это разные аппаратные цепи.
ТРИТ-9 / FPGA ИЗНУТРИ
Прерывания
38

39.

ИСПЫТАНИЯ
Как менялась площадь процессора?
Сводка результатов синтеза полных версий для одной платы.
v0.11
7 445 LUT
v0.12
7 632 LUT
v0.13
7 221 LUT
v0.14
1 979 LUT
После v0.14 свободно 6 661 LUT из 8 640
ТРИТ-9 / FPGA ИЗНУТРИ
Испытания
39

40.

ВРЕМЕННОЙ АНАЛИЗ
Fmax — не та частота, на которой мы сейчас
работаем
Синтез и трассировка оценивают задержки соединений; PLL задаёт реальный CLK.
v0.11
9.34 МГц
v0.12
21.68 МГц
v0.13
13.62 МГц
v0.14
14.65 МГц
Физический CLK v0.14 = 6,75 МГц
ТРИТ-9 / FPGA ИЗНУТРИ
·
отладочное исполнение ≈ 5 команд/с
Временной анализ
40

41.

ПОЧЕМУ ЭКОНОМИЯ?
Как BSRAM дала −5 242 LUT в полном CPU
Перестали строить большую память данных из регистров и мультиплексоров.
v0.13 · регистры и логика
v0.14 · специализированная память
7 221 LUT · 2 425 FF
1 BSRAM (программы)
Большой декодер чтения / записи
1 979 LUT · 1 065 FF
3 BSRAM (1 программа + 2 данные)
Пауза до готовности синхронного чтения
Вся площадь вычислена после полной сборки, не по изолированному тесту памяти.
ТРИТ-9 / FPGA ИЗНУТРИ
Почему экономия?
41

42.

ПРОВЕРКИ
Как мы доказываем, что схема работает?
Ни симуляция, ни успешный файл .fs не заменяют испытаний на настоящей плате.
Модель
Icarus
Yosys
nextpnr
gowin_pack
Плата
математика
RTL-симуляция
синтез
расположение +
timing
прошивка .fs
UART / RAM / ALU
На железе проверяли: UART, запись RAM, оба порядка банков и 150000 − 80000.
ТРИТ-9 / FPGA ИЗНУТРИ
Проверки
42

43.

ГРАНИЦЫ ЗНАНИЯ
Что уже доказано, а что ещё нет?
Важно честно отделять аппаратные тесты от дальнейших инженерных гипотез.
ПРОВЕРЕНО
НУЖНО ПРОВЕРИТЬ
Выполнение контрольного кода
UART и мониторинг
Два банка BSRAM
Число 70 000 после WLOADM 0/1
Быстрые режимы исполнения
Регрессия IRQ / CALL / RET
Конфликты с одновременной инспекцией
Точные координаты размещения
ТРИТ-9 / FPGA ИЗНУТРИ
Границы знания
43

44.

КУДА ДАЛЬШЕ
Что это даёт для полноценного троичного
компьютера?
Теперь свободные ресурсы можно направлять на новые аппаратные устройства.
Клавиатура
Видео
Сканирование и буфер ввода
Буфер кадра и развертка
Память
Загрузка
Адресация и внешняя RAM
Постоянное хранение программ
Следующая цель: строить уже не только CPU, но и полный компьютер вокруг него.
ТРИТ-9 / FPGA ИЗНУТРИ
Куда дальше
44

45.

ИСТОЧНИКИ
На чём основаны схемы и цифры
Официальная документация + исходники нашего процессора + результаты испытаний.
Gowin DS117-3.2.5E
cdn.gowinsemi.com.cn/DS117E.pdf
Sipeed Wiki — Tang Nano 9K
wiki.sipeed.com/hardware/en/tang/Tang-Nano-9K/Nano-9K.html
RTL нашего «Трит-9»
trit9_board.v · trit9_top.v · trit9_cpu.v
Memory Lab v0.14
memory_lab/trit9_data_bram.v
Практические результаты
отчёты Yosys/nextpnr + UART с Tang Nano 9K
ТРИТ-9 / FPGA ИЗНУТРИ
Источники
45
English     Русский Rules