devlog #0002. Z-Frame: Верхнеуровневая архитектура
Архитектура Z-Frame - это компьютер с центральным процессором 1976 года - Zilog Z80. Управлять им и всеми шинами будет современная FPGA. Загружать программы и управлять запуском уже всей системы будет супервизор в виде микроконтроллера (MCU). Видеовыводом будет заниматься отдельный вычислитель (VDP), подключённый параллельно FPGA.
Компоненты и роли Z80 - центральный процессор (CPU), исполняет программы. FPGA - главный арбитр и коммутатор (bus arbiter + interconnect), распоряжается шиной: коммутирует, арбитрирует доступы и тактирует процессор. STM32 - супервизор: питание, сброс, загрузка, связь с внешним миром. VDP - видеопроцессор со своей памятью, пассивный слушатель шины. RAM - оперативная память компьютера.
Загрузчик При старте процессора ему нужна какая-либо программа. И эту программу нужно загрузить до момента, когда процессор начнёт свою работу и для реализации этого есть два основных пути: хранить программу в ROM (ПЗУ, постоянное запоминающее устройство) - то есть, в памяти только для чтения или загрузить программу сразу в RAM (ОЗУ, оперативное запоминающее устройство). Я выбрал второй вариант - отдельный специализированный загрузчик (MCU), который сначала загрузит в оперативную память процессора (RAM) нужную программу и “стартует” сам процессор.
DEVLOG 0003: Как процессор стартует и почему я отказался от ROM
Арбитр шины Во время работы процессора, то есть исполнения программы, он - мастер шин адреса и данных, то есть, активно выставляет необходимые уровни, читает из памяти и пишет в память. Загрузчику же шины тоже могут понадобиться для своих нужд. Например, загрузить другую программу. В этот момент он тоже становится мастером. Как только на шине становится больше одного мастера, возникает состояние конфликта на шине - bus contention. Этим можно управлять программно на каждом подключённом к шинам устройстве, но при добавлении нового устройства, необходимо добавлять такую поддержку каждому добавляемому устройству. Я выбрал централизованный арбитраж и завёл все шины от всех устройств в FPGA. Теперь FPGA - и есть шина.
DEVLOG 0004: Что такое contention, децентрализованный и централизованный арбитраж
Видеовывод и “модель MSX” Долгое время разные компьютеры по-разному решали проблему организации доступа видео к памяти. Например, в ZX Spectrum - память общая, с bus contention. В Commodore 64 - видеочип VIC-II - мастер шины со всё такой же общей памятью для программ (процессора) и видео. И в компьютерах MSX - видеочип (VDP) со своей отдельной памятью. Что исключает любые конфликты с одновременным доступом к одной и той же памяти. Поэтому я выбрал вариант реализации как у MSX.
DEVLOG 0005: Отдельный разбор организации видеовывода на примерах ZX Spectrum, Commodore 64 и MSX
Супервизор Для управления стартом системы, арбитром и операциями ввода/вывода (I/O) используется супервизор - тот же самый микроконтроллер-загрузчик (MCU). Например, он отдаёт высокоуровневые команды арбитру вида “останови/запусти тактирование Z80”, “положи данные в RAM по таким-то адресам” и подобные.
DEVLOG 0006: Супервизор системы
Таким образом Z-Frame оказывается гетерогенной системой. Под каждую роль в ней стоит свой, наиболее подходящий вычислитель. Восьмибитный процессор исполняет программы. Современный микроконтроллер-супервизор управляет запуском, загрузкой и связью с внешним миром. Отдельный чип со своей памятью занимается видео. И связывает их всех программируемая логика (FPGA), которая и распоряжается шиной. Разные архитектуры, объединённые вместе исходя из принципа “каждому - своя задача”. Собственно, к такой же идее (набору разнородных специализированных вычислителей под общим управлением) пришли и большие современные системы, от процессоров смартфонов до серверных ускорителей.