Altifigence Academy

6 / 24 · Теория

Планируйте общие ресурсы конечным автоматом

Сложите четыре значения одним сумматором, определив переходы состояний и фиксацию данных.

Состояние управления выражает расписание операций

Общий ресурс требует распределения операций во времени. Рассмотрим суммирование x0–x3 одним сумматором и десятибитным аккумулятором. Фиксируйте все четыре операнда при приёме запроса. Последующие внешние изменения не должны менять незавершённый запрос. Контроллер выбирает операнд, разрешает накопление и определяет момент достоверности результата.

Используйте состояния IDLE, ADD0, ADD1, ADD2, ADD3 и DONE. Фронт приёма в IDLE фиксирует входы и очищает acc. На следующих четырёх фронтах добавляется по одному сохранённому операнду. Сразу после фронта ADD3 итоговая сумма сохранена, а состояние становится DONE. DONE удерживает результат до его приёма потребителем. Эта простая версия возвращается в IDLE на том фронте и одновременно новый запрос не принимает.

ФронтСтарое состояниеДействиеНовое acc
0IDLEЗафиксировать 3,5,7,9 и очистить acc0
1ADD0Добавить 33
2ADD1Добавить 58
3ADD2Добавить 715
4ADD3Добавить 9, перейти в DONE24
5DONEПотребитель принимает результат24

Различайте появление результата после фронта 4 и передачу на фронте 5. Остановки потребителя могут продлевать DONE неограниченно. Повторное использование ресурса уменьшает арифметическую аппаратуру, но ограничивает пропускную способность по сравнению с конвейером, принимающим данные каждый такт. Поддержка одновременного завершения и нового запроса требует явного приоритета между выдачей старого результата и инициализацией нового запроса.

Аккумулятор четырёх значений
  1. IDLE: Принять и зафиксировать все четыре значения
  2. ADD0..ADD3: Использовать один сумматор на четырёх фронтах
  3. DONE: Удерживать результат до потребления

Выводите управление из состояния: разрешение аккумулятора в состояниях ADD, соответствующий состоянию выбор операнда и valid результата в DONE. Задавайте комбинационным управляющим выходам значения по умолчанию. Определите приём так, чтобы постоянно установленный запрос не повторялся случайно. Сброс возвращает в IDLE и отбрасывает незавершённую работу. Реализация со счётчиком может сократить кодирование состояний, но всё равно требует того же расписания по фронтам.

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

Чему равен acc после ADD0–ADD3 для четырёх входов по 255? Что должно произойти при нулевом output ready на фронте 5?

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

Значения равны 255, 510, 765 и 1020; все помещаются в десять бит. При ready=0 выдача не происходит; сохраняйте DONE, acc=1020 и valid=1.

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