LFSR (Генератор случайных чисел)

Входы (Inputs)

ПинТипОписание
ClockbitСдвиг регистра по фронту (0→1 генерирует новое число)
DevAddrbus8Адрес устройства: 0x1A = порт 0xFA
IO_SELbitВыбор I/O (1 = устройство активно)

Выходы (Outputs)

ПинТипОписание
Databus8Текущее псевдослучайное число (0–255)

Логика работы

LFSR (Linear Feedback Shift Register) — 8-битный регистр сдвига с линейной обратной связью. Реализует полином:

x⁸ + x⁶ + x⁵ + x⁴ + 1

На каждом фронте Clock (переход 0→1) происходит сдвиг регистра влево. Новый младший бит вычисляется как XOR четырёх битов текущего состояния:

новый_бит = state[7] ⊕ state[5] ⊕ state[4] ⊕ state[3]

Начальное значение (seed) — 0x9C (156 в десятичной системе). Последовательность чисел полностью детерминирована: при одном и том же seed LFSR всегда выдаёт одну и ту же последовательность. При чтении через порт 0xFA (IO_SEL = 1, DevAddr = 0x1A) на выход Data выдаётся текущее состояние регистра.

Длина периода последовательности — 255 (все значения кроме 0x00). Состояние 0x00 является «тупиковым» — LFSR застревает в нём навсегда, поэтому seed никогда не должен быть нулевым.

Применение

Используется на уровнях 26, 29. Применяется для генерации псевдослучайных событий:

Поскольку последовательность детерминирована, для большей «случайности» LFSR обычно тактируется непрерывно (каждый такт Clock), а чтение происходит только в нужный момент.