27 состояний, 27 уроков: как спека на t27 превращается в битстрим на настоящей Artix-7 — без Vivado
TL;DR. Большинство курсов по FPGA начинаются со слов «установите Vivado». Мы пошли с другого конца: в каждом из 27 уроков есть рабочий виджет, собранный из реальных запусков на нашем стенде. Сначала разбираем, что такое FPGA и как числа становятся битами. Потом пишем спеку на t27, компилируем её t27c и превращаем в битстрим на плате. В конце — лаборатория из трёх уроков о наших собственных исследованиях, включая результаты, которые нам не понравились. Каждая картинка ниже — снимок живого виджета; нажмите, чтобы открыть его.
Почему 27
У трёх сбалансированных тритов 3 × 3 × 3 = 27 состояний. Для сравнения: у 4-битного float вроде E2M1 (элемент форматов NVFP4 и MXFP4) 16 кодов, и два из них означают ноль. T27 — наш формат, который использует все 27 состояний. Отсюда название языка, компилятора и, в общем-то, число уроков.
Даже сам курс — это спека
Структура курса не лежит в CMS. Это файл course.t27, и у него есть тесты. Даже то, какой виджет открывается в каком уроке, записано в спеке:
pub const MODULE_COUNT : u8 = 10;
pub const MODULE_IDS : [10]str = ["chip", "numbers", "program", "compiler",
"hardware", "synthesis", "timing", "bitstream", "board", "lab"];
pub const LESSON_WIDGETS : [30]str = [
"fasm-skyline", "idcode", "pin-map", ...
test it_starts_at_the_chip_and_ends_on_the_board {
assert MODULE_IDS[0] == "chip";
assert MODULE_IDS[8] == "board";
}
Русский перевод проверяется скриптом: числа и {плейсхолдеры} должны совпадать с английской версией, иначе сборка падает. Принцип spec-first работает и здесь: если утверждение нельзя проверить, его нет на сайте.
Маршрут: 10 модулей от кристалла до платы
|
№ |
Модуль |
Что вы трогаете руками |
|---|---|---|
|
1 |
Чип |
Сетка тайлов XC7A200T в 3D, 32 бита, которыми чип называет себя, пины и корпус |
|
2 |
Числа |
Биты и триты, сколько стоит арифметика, сколько влезает в кристалл |
|
3 |
Программа |
«Привет, t27»; тесты — это и есть спека; «компилируется» ≠ «работает» |
|
4 |
Компилятор |
Стадии t27c и путь от спеки до Verilog |
|
5 |
Железо |
Один LUT под микроскопом, конечные автоматы |
|
6 |
Синтез |
Считаем ячейки, смотрим, куда уходят LUT, читаем предупреждения синтеза, глубина логики |
|
7 |
Размещение, трассировка, тайминг |
Где оказываются ячейки и успевает ли тактовая частота |
|
8 |
Битстрим |
Как оттрассированный дизайн становится битами без Vivado: FASM → фреймы, чтение битстрима |
|
9 |
На плате |
Спросить чип по JTAG, кто он, загрузить биты и проверить, что на плате те же биты |
|
10 |
Лаборатория |
Свой формат чисел, честная таблица результатов, таблицы модели, перемноженные на плате |
Урок 1: FPGA — это сетка, а не процессор
Процессор выполняет инструкции одну за другой. У FPGA программы нет вовсе: это сетка маленьких блоков — LUT, триггеров, цепочек переноса, блочной памяти и DSP-умножителей, — соединённых переключаемыми проводами. Настроили сетку — построили схему.
Виджет Skyline рисует один реальный оттрассированный дизайн на кристалле AMD Artix-7 XC7A200T: каждый настроенный тайл встаёт столбиком, а большая часть чипа остаётся тёмной. Поверните кристалл и нажмите на самый высокий столбик: какой тип тайла задаёт больше всего фич?
Следующий шаг — спросить у чипа, кто он. Чип называет себя 32 битами, и во втором уроке вы учитесь их читать.
От спеки к Verilog
В уроке «Привет, t27» вы видите, как выглядит спека t27 и что с ней делает компилятор, прямо в браузере, без установки тулчейна. А через что именно проходит спека внутри t27c, показывает виджет стадий компилятора.
Дальше маршрут спускается по стеку: синтез, подсчёт ячеек, потом размещение и трассировка — что они делают и куда поставили настоящий дизайн.
Итоговый, 27-й урок называется «Переугадайте yosys». Вам показывают настоящий модуль t27, и нужно угадать, сколько LUT он займёт. Кажется, что это легко, — пока не попробуешь.
Лаборатория
Первый урок лаборатории объясняет сам формат. 27 уровней T27 стоят там, где на самом деле лежат веса обученной сети, и на каждый блок весов приходится один общий масштаб. На троичной памяти это больше уровней в том же объёме. Проведите вес по диапазону и найдите, где E2M1 округляет хуже, чем T27.
Самый спорный (и, по-моему, самый ценный) урок — «Честная таблица результатов». Мы сохранили веса небольшой языковой модели в каждом формате и измерили перплексию на тексте, которого модель не видела.
Правило победы записали до запуска: T27 выигрывает у соперника, если его перплексия ниже 990/1000 от перплексии соперника. Итог:
-
T27 выиграл у NVFP4, MX+ и MXFP4;
-
T27 проиграл E2M2 — более широкому формату;
-
если упаковать T27 в обычные двоичные биты, он получается больше, а не меньше; виджет показывает оба счёта.
Под графиком перечислено, чего этот тест утверждать не может. Утверждение, которое выдерживает проверку, одно: T27 выигрывает у NVFP4 на троичной подложке. Не больше.
Что можно попробовать прямо сейчас
-
Откройте весь курс: t27.ai/ru/learn — регистрация и железо не нужны.
-
Пройдите «Переугадайте yosys» и напишите в комментариях, на сколько LUT вы ошиблись.
-
Исходники компилятора и спеки: github.com/gHashTag/t27.
Вопрос к сообществу
Какой шаг на пути «спека → битстрим» до сих пор кажется вам чёрным ящиком? Самые частые ответы из комментариев превращу в следующие уроки.
Автор: raoffonom


