Skip to main content

A Z80 с нуля

  • Эта публикация - перевод статьи. Ее автор - 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
Разделы верхнего уровня процессора Z80 (клон T34VM1)

Многие  детали внутренней архитектуры Z80 не опубликованы и не известны на момент разработки этого проекта (весна / лето 2014). Несколько человек из Visual6502 команду, перепроектировавшую несколько блоков из различных микро-фотографий матрицы Z80. Внедрение A-Z80 в основном основывалось на работах по реинжинирингу Кена Шириффа, описанных в его блогах Z80; он предоставил оригинальную схему ALU, файл регистра, инкремент адреса и таблицу PLA. В дополнение к этому, можно выбрать много деталей, читая патенты, справочные руководства, беседы из исторического музея, источники симуляторов, предыдущие работы дизайнеров Z80 и т. Д. Некоторые из этих документов перечислены в библиотеке раздела этой статьи.

ВЕРХНИЙ УРОВЕНЬ

Концептуально это основные архитектурные блоки Z80:

Верхний уровень A-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:  https://bitbucket.org/gdevic/a-z80.

Процессор A-Z80  на данном этапе представляет собой законченный, полностью работающий дизайн FPGA. Он применяется в  описанной здесь компьютерной реализации Sinclair ZX Spectrum. Его можно использовать в устройствах Altera или даже в Xilinx, поскольку схемы собраны в общий Verilog.

Продолжите читать о СердцеРазумеДуше этого проекта...


(*) Без моего ведома команда разработчиков Visual 6502 достигла значительного прогресса в реверс-инжиниринге Z80, в течение которого я уже выполнил большую часть проектирования и импровизировал / заменял недостающие детали, создавая их «так, как это имело бы смысл». Этот дизайн; однако, предоставляет рабочую основу, которая может быть изменена и приведена в соответствие с фактической конструкцией Z80, так как команда 6502 все больше и больше проливает свет на это.