T27.AI

Блог

Три виджета о физике под шиной: отражения, закрывающийся глаз, слово ECC

2026-10-11 · 4 мин чтения

[логика каждого виджета — спека t27, собранная в wasm; линия без потерь, канал с одним полюсом, значения введены руками, с платы ничего не читалось] Ступенька 1 В от драйвера 25 Ом в открытую линию 50 Ом приходит на дальний конец как 1,333, 0,889, 1,037, 0,988 В и только потом устанавливается на 1 В; один RC-полюс оставляет четверть глаза при T = TAU и закрывает его при TAU ln 2; 13-битное слово SECDED исправляет любую одиночную ошибку и ловит любые две. Три новых виджета показывают это, каждый исполняет тела функций своей спеки t27; за ними 20 тестов спек и 15 отрицательных контролей.

Титульная карточка статьи, иллюстрации пока нет: Три виджета о физике под шиной: отражения, закрывающийся глаз, слово ECC
Открыть титульную карточку в исходном размере
#t27#FPGA#SignalIntegrity

Курс про шины учит протоколам: UART, SPI, APB, AXI4, Ethernet. Под каждым из них физика, о которой протокол молчит: провод — это линия передачи, быстрый фронт приходит не один раз, короткий бит не успевает дорасти, а ячейка памяти может перевернуться. Три новых виджета показывают эти три вещи, и ни один не считает ничего сам: их логика — тела функций спеки t27, собранные в WebAssembly, поэтому страница рисует ровно то, что утверждают тесты спеки.

Ступенька по линии приходит не один раз

line-bounce исполняет specs/fpga/line_bounce.t27: драйвер с сопротивлением RS посылает ступеньку в линию с импедансом Z0; каждый конец отражает с коэффициентом (R - Z0) / (R + Z0). С учебными значениями Джонсона и Грэма — ступенька 1 В, RS 25 Ом, Z0 50 Ом, открытый конец — дальний конец показывает 1,333 В при первом приходе, затем 0,889, 1,037, 0,988 и устанавливается на 1 В. Коэффициенты отражения разных знаков, поэтому сигнал звенит. Последовательный резистор, при котором RS равно Z0, приводит к 1 В с первого прихода; нагрузка 50 Ом на дальнем конце убирает отражение совсем.

1,3330,8891,0370,988— дальний конец (нагрузка)— ближний конец (драйвер)- - устанавливается на 1,000 Ввремя, в задержках TD
Дальний (белый) и ближний (золотой) концы для ступеньки 1 В от драйвера 25 Ом в открытую линию 50 Ом, посчитанные собранной line_bounce.t27, которую исполняет виджет: 1,333, 0,889, 1,037, 0,988 В, установление на 1 В.

Короткий бит не успевает дорасти

eye-isi исполняет specs/fpga/eye_isi.t27: один RC-полюс с постоянной TAU, взятый в конце каждого бита, даёт y[n] = a y[n-1] + (1 - a) x[n], где a = exp(-T/TAU). Худшая единица доходит до 1 - a, худший ноль остаётся на a, поэтому глаз равен 1 - 2a: четверть размаха при T = TAU и закрыт при T = TAU ln 2. Виджет пропускает через канал два периода PRBS7 и мерит нарисованный глаз: 26,5% при T = TAU против худшего случая формулы 26,4% (у PRBS7 нет бесконечно длинной серии). При T = 0,6 TAU глаз закрыт; отвод de-emphasis 25% открывает его до 21,6%. Сама exp тоже в спеке — рядом, с тестами.

Одну ошибку исправит, две поймает

ecc-secded исполняет specs/fpga/secded.t27: 8 бит данных, проверочные биты Хэмминга на позициях 1, 2, 4 и 8 и общий бит чётности на 0 — та же конструкция, что у памяти с ECC на словах по 72 бита. Нажмите любой бит, чтобы перевернуть его: синдром — это номер бита в двоичном виде, и байт возвращается. Переверните два — чётность остаётся чётной, а синдром не ноль: обнаружено, не исправлено. Тесты спеки проверяют каждый байт, каждую одиночную и каждую пару ошибок трёх слов.

Чего это не показывает

Попробовать

Чего это не решает

Пруфы

Поработаем вместе

Нужно довести FPGA/RTL-задачу до замеров на железе?

Работаю по контракту и part-time с hardware-AI, FPGA/RTL и ML-системами — от спецификации и открытого тулчейна до воспроизводимых измерений.