6 / 24 · Теория
Планируйте общие ресурсы конечным автоматом
Сложите четыре значения одним сумматором, определив переходы состояний и фиксацию данных.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Состояние управления выражает расписание операций
Общий ресурс требует распределения операций во времени. Рассмотрим суммирование x0–x3 одним сумматором и десятибитным аккумулятором. Фиксируйте все четыре операнда при приёме запроса. Последующие внешние изменения не должны менять незавершённый запрос. Контроллер выбирает операнд, разрешает накопление и определяет момент достоверности результата.
Используйте состояния IDLE, ADD0, ADD1, ADD2, ADD3 и DONE. Фронт приёма в IDLE фиксирует входы и очищает acc. На следующих четырёх фронтах добавляется по одному сохранённому операнду. Сразу после фронта ADD3 итоговая сумма сохранена, а состояние становится DONE. DONE удерживает результат до его приёма потребителем. Эта простая версия возвращается в IDLE на том фронте и одновременно новый запрос не принимает.
| Фронт | Старое состояние | Действие | Новое acc |
|---|---|---|---|
| 0 | IDLE | Зафиксировать 3,5,7,9 и очистить acc | 0 |
| 1 | ADD0 | Добавить 3 | 3 |
| 2 | ADD1 | Добавить 5 | 8 |
| 3 | ADD2 | Добавить 7 | 15 |
| 4 | ADD3 | Добавить 9, перейти в DONE | 24 |
| 5 | DONE | Потребитель принимает результат | 24 |
Различайте появление результата после фронта 4 и передачу на фронте 5. Остановки потребителя могут продлевать DONE неограниченно. Повторное использование ресурса уменьшает арифметическую аппаратуру, но ограничивает пропускную способность по сравнению с конвейером, принимающим данные каждый такт. Поддержка одновременного завершения и нового запроса требует явного приоритета между выдачей старого результата и инициализацией нового запроса.
- IDLE: Принять и зафиксировать все четыре значения
- ADD0..ADD3: Использовать один сумматор на четырёх фронтах
- DONE: Удерживать результат до потребления
Выводите управление из состояния: разрешение аккумулятора в состояниях ADD, соответствующий состоянию выбор операнда и valid результата в DONE. Задавайте комбинационным управляющим выходам значения по умолчанию. Определите приём так, чтобы постоянно установленный запрос не повторялся случайно. Сброс возвращает в IDLE и отбрасывает незавершённую работу. Реализация со счётчиком может сократить кодирование состояний, но всё равно требует того же расписания по фронтам.
Попробуйте сами
Чему равен acc после ADD0–ADD3 для четырёх входов по 255? Что должно произойти при нулевом output ready на фронте 5?
Прочитать объяснение
Значения равны 255, 510, 765 и 1020; все помещаются в десять бит. При ready=0 выдача не происходит; сохраняйте DONE, acc=1020 и valid=1.