Altifigence Academy

37 / 63 · Теория

Последовательный вход и границы кадра

Определите порядок входов и действительные фронты, рассчитайте размещение битов при последовательно-параллельном преобразовании.

Превращение временного порядка в позиции вектора

Последовательный вход передаёт один бит на каждом действительном фронте. Для 3-битного регистраРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее с q<={q[1:0],din}, начальным q=000 и входами 1,0,1,1:

Число принятых битовdinНовое q
11001
20010
31101
41011

Новый бит входит справа, прежние идут к большим индексам. Регистр — скользящее окно последних трёх битов; при приёме четвёртого первый теряется.

Каждый столбец — запись наблюдения одного положительного фронтаПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее. Входы показаны непосредственно перед фронтом, состояния со словом «после» в имени — сразу после обновления. Выравнивание столбцов обозначает порядок выборок, а не физическую задержку распространенияЗадержка распространения — время от изменения входа до установления правильного выхода. Логическая эквивалентность выражений и их временные характеристики — разные вопросы. Подробнее.
Первый столбец — reset. Из последующих принятых 1,0,1,1 в q остаются только последние три. В последнем столбце первый бит вытесняется.

Как последовательный вход становится параллельным состоянием
Показать данные диаграммы
Данные диаграммы: каждый символ — один интервал; точка сохраняет предыдущее состояние; p — один тактовый цикл.
СигналДиаграммаЗначения шины
фронт23452E0 → E1 → E2 → E3 → E4
reset10...
din0101.
q после23452000 → 001 → 010 → 101 → 011

MSB-first и LSB-first — правила протокола

Если отправить 8-битное значение начиная с MSBMSB — бит с наибольшим позиционным весом. Его индекс зависит от направления объявления вектора, поэтому нельзя всегда считать его битом с наибольшим номером. Подробнее и принять восемь раз указанным способом, восстановится исходный вектор. При отправке от LSBLSB — бит с наименьшим позиционным весом. Проверяйте одновременно направление записи и правила индексации. Подробнее порядок обратный, поэтому нужно менять направление соединений или итоговую перестановку. Это не настройка отображения, а протокол, согласуемый передатчиком и приёмником.

Значение данных не определяет кадр

Нужно состояние, указывающее первый бит, число принятых битов и момент, когда результат можно потреблять. Обычно используют счётчик принятых битов вместе с valid или done. При паузах входа следует считать принятые данные, а не такты.

acceptk=validk∧readykaccept_k=valid_k\land ready_k

В интерфейсе ready/validРукопожатие (handshake) — соглашение, по которому передача подтверждается, когда valid передатчика и ready приёмника равны 1 на одном фронте. Оно также задаёт правила удержания данных во время ожидания. Подробнее сдвиг и счётчик обновляются вместе только на фронте, где это условие истинно. Enable лишь для одного из них рассогласует данные и длину. Практикум с непрерывным входом показывает простой случай: данные принимаются на каждом фронте.

Попробуйте сами

После четвёртого бита 8-битного кадра valid остаётся 0 два цикла. Как должны работать счётчик приёма и сдвиговый регистр при ready=1?

Прочитать объяснение

В обоих циклах accept=0, поэтому счётчик и регистр данных хранят состояние вместе. Следующий valid-бит станет пятым. Счёт одних тактов мог бы ошибочно объявить завершение при недостатке данных.

Выбор действует в этом браузере. Его можно изменить внизу страницы.