- Published on
- Updated on
A Z80 с нуля
- Authors
Эта публикация - перевод статьи. Ее автор - Goran Devic. Оригинал доступен по ссылке ниже:
A-Z80 - это концептуальная реализация почтенного процессора Zilog Z80, предназначенного для синтеза и запуска на современном устройстве FPGA. Он отличается от существующих (в основном Verilog) реализаций Z80 тем, что он спроектирован с нуля до схем и ворот низкого уровня.
Эта конструкция способна имитировать фактический процессор Z80 и иллюстрирует его внутреннюю работу настолько, насколько это известно в настоящее время (*).
Вступление
Реализовать более старую, NMOS и полностью разработанную по индивидуальному заказу схему на современной ПЛИС очень сложно и дает большой опыт обучения для дизайнера, и, надеюсь, дизайн также очень информативен и интересен любопытным любителям ретро.
Разница в технологиях устанавливает некоторые интересные ограничения и требует определенного уровня абстракций.
На самом низком уровне Z80 использует простые двухтранзисторные защелки, которые непрактичны для реализации в FPGA. Триггеры ASIC могут запускаться с двух сторон, в то время как FPGA поддерживает только триггеры с одним фронтом; внутренние шины Z80 инвертированы (хорошо работают с логикой NMOS), в то время как в естественных конструкциях FPGA используется положительная логика; использование внутренних шин с тремя состояниями не рекомендуется в современных конструкциях FPGA; низкоуровневые временные характеристики двух технологий различны; очень трудно перевести задержки распространения синхронизации в FPGA, где время может сильно различаться в зависимости от алгоритма подбора пути и т. д.
Все существующие реализации FPGA Z80, которые я видел, реализуют поведенческую модель и используют Verilog. Самая популярная и широко используемая модель FPGA - T80. Такие модели не требуют глубоких знаний о внутренних деталях конструкции Z80, так как они реализуют интерфейсы с чиповыми блоками более высокого уровня (например, регистровым файлом или ALU). Известное недокументированное поведение просто жестко запрограммировано в источнике.
Реализация A-Z80 (этот проект) стремится быть внутренне структурноидентичной оригинальному Z80. Используя этот подход, модель достигает точности полного цикла и имеет идентичное поведение для всех документированных и недокументированных функций не путем явного их жесткого кодирования, а путем имитации фактического проекта.
На этой схеме показаны основные функциональные блоки и шины, которые приблизительно соответствуют местам расположения, когда они появляются на кристалле Z80.
Разделы верхнего уровня процессора Z80 (клон T34VM1)
Многие детали внутренней архитектуры Z80 не опубликованы и не известны на момент разработки этого проекта (весна / лето 2014). Несколько человек из Visual6502 команду, перепроектировавшую несколько блоков из различных микро-фотографий матрицы Z80. Внедрение A-Z80 в основном основывалось на работах по реинжинирингу Кена Шириффа, описанных в его блогах Z80; он предоставил оригинальную схему ALU, файл регистра, инкремент адреса и таблицу PLA. В дополнение к этому, можно выбрать много деталей, читая патенты, справочные руководства, беседы из исторического музея, источники симуляторов, предыдущие работы дизайнеров Z80 и т. Д. Некоторые из этих документов перечислены в библиотеке раздела этой статьи.
ВЕРХНИЙ УРОВЕНЬ
Концептуально это основные архитектурные блоки Z80:
Верхний уровень A-Z80
1. Блок управления, который включает в себя:
- IR (регистр команд) содержит текущую инструкцию, которая выполняется.
- PLA (Programmable Logic Array) обеспечивает статическое декодирование команд.
- Секвенсор генерирует однократное кодирование M (машинного) и T-циклов, которые запускаются циклически и предоставляют информацию о синхронизации для статически декодированных команд. Это «сердце» процессора.
- Управление выводами определяет время для внешних выводов ЦП, основываясь на текущей функции и Т-цикле. Функции: выбор кода операции; чтение памяти, запись; IO читать, писать.
- Блок прерываний содержит защелки и логику для обработки прерываний.
- Блок выполнения - матрица синхронизации - объединяет тактирование M / T со статически декодированными инструкциями и запускает управляющие сигналы в точное время.
2. АЛУ (Арифметико-логическое устройство) выполняет анализ чисел. Это включает:
- Сам блок ALU, который очень хорошо описан в блоге Кена Ширриффа, пожалуйста, ознакомьтесь с ним.
- Флаги содержат временный регистр флагов и логику для установки флагов в зависимости от результатов операций.
- Набор различных функций управления ALU для обработки таких операций, как DAA, контроль четности, селектор вращения и т. Д.
3. Регистрационный файл содержит:
- Системные и универсальные регистры Z80 (AX, BC, ..., SP, PC, IR)
- Блок управления, который выбирает регистры. Это довольно сложный модуль, поскольку он обрабатывает несколько регистров обмена триггерами в различных режимах адресации.
4. Шина - это набор внутренних модулей, связанных с шиной:
- Защелка адреса и инкремент делают 16-битное увеличение / уменьшение и обеспечивают адрес для адресации памяти / ввода-вывода. Они хорошо описаны Кеном в его блогах.
- Переключатели шины данных, обозначенные как SW1, SW2, SW4), используются в нескольких местах вдоль шины данных для разделения сегментов. Они позволяют нескольким частям микросхемы работать одновременно на одной внутренней шине данных.
- Контакты данных и контакты адресов реализуют логику оконечных точек, соединяющую внутренние шины с выводами ЦП.
Несколько статей, которые следуют за этим блогом, описывают эти компоненты более подробно, как реализовано в этом проекте. Дизайн A-Z80 выпущен с открытым исходным кодом и может быть загружен на Bitbucket.
Процессор A-Z80 на данном этапе представляет собой законченный, полностью работающий дизайн FPGA. Он применяется в описанной здесь компьютерной реализации Sinclair ZX Spectrum. Его можно использовать в устройствах Altera или даже в Xilinx, поскольку схемы собраны в общий Verilog.
Продолжите читать о Сердце, Разуме, Душе этого проекта...
(*) Без моего ведома команда разработчиков Visual 6502 достигла значительного прогресса в реверс-инжиниринге Z80, в течение которого я уже выполнил большую часть проектирования и импровизировал / заменял недостающие детали, создавая их «так, как это имело бы смысл». Этот дизайн; однако, предоставляет рабочую основу, которая может быть изменена и приведена в соответствие с фактической конструкцией Z80, так как команда 6502 все больше и больше проливает свет на это.