Блог
[исполнитель в браузере пока не исполняет тест-блоки тестбенчей (trinity#1477); три spec урока заменены чистыми соседями; specs/fpga/coverage.t27 попадает в gHashTag/t27 отдельным PR] Четвёртый курс t27 отвечает на вопрос, который три предыдущих оставили открытым: откуда вы знаете, что дизайн работает? 27 уроков в 9 модулях по 3 -- тестбенчи, временные диаграммы, векторы, косимуляция, покрытие, формальные методы, мутации, приёмка -- в каждом открывается один работающий виджет и один spec t27, а каждое число на странице измерено виджетом, рядом с которым оно стоит.

Появился курс 3: «Проверка железа с t27», 27 уроков в 9 модулях по 3, и, как у его трёх предшественников, в каждом уроке открывается один работающий виджет и один spec t27, который читатель может запустить в плеере. Курс 1 учил потоку от spec до чипа, курс 2 -- числам, которые хранят ИИ-чипы; этот отвечает на вопрос, который оба оставили открытым: откуда вы знаете, что дизайн работает? Тестбенчи, временные диаграммы, векторы, косимуляция, покрытие, формальные методы, мутации, приёмка -- в этом порядке, и у каждого шага есть квитанция.
| Модуль | Название | Вопрос, на который он отвечает |
|---|---|---|
| 1 | Зачем проверять | Дизайны, которые компилируются и всё равно ошибаются; золотая модель; план, записанный до кода |
| 2 | Тестбенчи | Стимулы, ожидания, проверки и вердикт в одном spec |
| 3 | Временные диаграммы | VCD как текст, отладка настоящего измеренного бага, сравнение двух прогонов |
| 4 | Векторы соответствия | Входы с ответом, записанным рядом, там, откуда их достанет компилятор |
| 5 | Косимуляция | Spec, симулятор и плата, приведённые к одному ответу на стенде |
| 6 | Покрытие | Чего коснулись тесты, бит за битом, дуга за дугой -- и что прячет число |
| 7 | Формальные методы | Ассерты, проверяемые каждый такт; ограниченный поиск; честная индукция |
| 8 | Мутации | Ломайте дизайн нарочно и считайте, что заметили тесты |
| 9 | Приёмка | Одна команда, все квитанции, вердикт, который можно показать |
Виджеты -- это записи настоящих прогонов инструментов, а тексты уроков используют только числа, которые показывают эти записи или названный в них spec. Линк UART, запросивший 115,200 бод и получивший на проводе 115,385 -- ошибку делителя +0.16 %, невидимую в коде и очевидную в захвате; 3,000,000 делится нацело, и провод согласен. 31 из 1,428 слитых spec, чьи печати не записывают вывода, на 16 spec, и 3 из них не названы журналом, который им это имя должен. 367 pull request'ов, пришедших за 14 дней, из которых 11 удалили тесты или ассерты, а один удалил все 26 тестов своего файла -- и ничего не упало. Курс о проверке не имеет права цитировать числа, которые не может показать.
Уроку 16 понадобилась модель покрытия, её не было -- и она написана там, где живут спеки: gHashTag/t27, specs/fpga/coverage.t27, а сайт отдаёт уроку вендоренную копию. Она моделирует точки строк, переключений, состояний и переходов автоматов со счётчиками срабатываний, целочисленные проценты, возвращающие 0, когда ничего не измерено, и запретные переходы, обязанные остаться на нуле срабатываний; в ней 26 тестов и 4 инварианта, в стиле плоских массивов, как у соседей simulator.t27 и vcd_trace.t27.
Курсу нужно 27 виджетов с отдельными страницами, которых не использует ни один урок ни одного курса. В галерее было 96 карточек, и почти все были заняты, поэтому 17 записей настоящих прогонов инструментов -- прогон соответствия, самопроверки, аудит печатей, пересчёт переписи, подсчёт мутаций и test-touch -- стали карточками на двух полках, которым они принадлежат, и каждая стала главным виджетом ровно одного урока. Теперь spec галереи объявляет 113 виджетов, а его тесты закрепляют якоря полок, чтобы прогоны fpga, compiler и game оставались непрерывными.
Поработаем вместе
Работаю по контракту и part-time с hardware-AI, FPGA/RTL и ML-системами — от спецификации и открытого тулчейна до воспроизводимых измерений.