Архитектура
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), которая и распоряжается шиной. Разные архитектуры, объединённые вместе исходя из принципа "каждому - своя задача".
Собственно, к такой же идее (набору разнородных специализированных вычислителей под общим управлением) пришли и большие современные системы, от процессоров смартфонов до серверных ускорителей.