CPU Zilog Z80: un clon de silicio moderno, gratuito y de código abierto
(github.com/rejunity)- Después de que Zilog anunciara el End-of-Life del Z80 el 15 de abril de 2024, este proyecto busca crear una implementación Free and Open Source Silicon (FOSSi) para reemplazarlo
- El objetivo es desarrollar un reemplazo drop-in compatible pin a pin para computadoras de 8 bits como la ZX Spectrum y la RC2014, además de kits DIY
- La implementación se basa en el núcleo Verilog TV80 de Guy Hutchison, y se sintetiza en silicio real usando OpenROAD y PDK abiertos como SKY130, SG13 y GF180
- En 2025 se entregaron los dos primeros chips de tapeout; el primer silicio SKY130 Tiny Tapeout 7 está en estado FUNCTIONAL, y una versión QFN64 de 40 pines totalmente expuestos también fue entregada y está en pruebas
- En las pruebas, el Z80 se comunica usando un RP2040/RP2350 como si fuera RAM, y aunque se corrigió un bug de la instrucción DAA, todavía fallan 2 pruebas de flags no documentados de ZEXALL
Objetivos del proyecto y estado actual
- rejunity/z80-open-silicon es un proyecto para crear un clon de silicio moderno, gratuito y de código abierto del Zilog Z80
- Zilog anunció el End-of-Life del Z80 el 15 de abril de 2024
- El proyecto tiene como objetivo que la comunidad de código abierto y preservación de hardware ofrezca un reemplazo FOSSi para el Z80
- En 2025 se entregaron los dos primeros chips de tapeout; los chips funcionan y actualmente están en pruebas
- Actualmente se está trabajando en una versión DIP40 para GF180MCU
Método de implementación en silicio
- El hardware objetivo es un chip para usarse como reemplazo drop-in del Z80 en computadoras domésticas de 8 bits y kits recientes de computadoras DIY
- Se mencionan como ejemplos la ZX Spectrum y la RC2014
- La implementación sintetiza silicio producible usando el flujo de OpenROAD y PDK de código abierto
- La infraestructura de Tiny Tapeout se usa para agrupar varios diseños y reducir el costo de fabricar chips reales en Skywater Foundries
- El núcleo de CPU base es el núcleo Verilog TV80 de Guy Hutchison
PDK compatibles y tapeouts
- Se soportan 3 PDK abiertos
- Estado de los tapeouts
- FUNCTIONAL: primer tapeout de silicio SKY130 de 130 nm mediante Tiny Tapeout 7
- DELIVERED/TESTING: paquete QFN64 de 40 pines totalmente expuestos mediante el CI2406 shuttle de eFabless, en proceso SKY130 de 130 nm
- La versión multiplexada de 24 pines SG13g2 tiene una entrada en el shuttle experimental IHP 2024, y la versión del 2025a shuttle de IHP ya fue entregada
- WIP: factor de forma clásico DIP40 basado en COB mediante GF180MCU Run 1 de Wafer.Space
Primer silicio FOSSi Z80
- La primera iteración se desarrolló con la infraestructura de Tiny Tapeout y un proceso de 130 nm, y cabe en un área de die de 0.064 mm²
- El primer tapeout se envió en junio de 2024 al eFabless ChipIgnite CI2406 Shuttle
- El layout de circuito integrado GDSII es resultado del flujo automático de colocación y ruteo de OpenROAD, y usa elementos lógicos de compuerta de 130 nm
Pruebas y trabajo pendiente
- Planes completados
- Tapeout de una revisión de 24 pines en nodo de 130 nm mediante Tiny Tapeout 07
- Tapeout de QFN64 de 40 pines totalmente expuestos mediante eFabless ChipIgnite
- Tapeouts SKY130 y SG13 completados; GF180 está en progreso
- Ejecución de pruebas del chip
- Resumen de pruebas
- El Z80 se comunica usando un RP2040/RP2350 como si fuera RAM
- Se corrigió un bug de la instrucción DAA detectado por la suite de pruebas ZEXDOC/ZEXALL
- Todavía fallan 2 pruebas de ZEXALL relacionadas con flags no documentados
- Trabajo en curso o pendiente
- Fabricar un adaptador PCB para convertir QFN64 a DIP40
- Fabricar una PCB COB DIP40
- Pruebas de timing de señales de entrada/salida comparadas con el Z80 original
- Reforzar el testbench incluyendo todas las instrucciones Z80 y las instrucciones “illegal”
- Comparar con otras implementaciones, como el núcleo Verilog A-Z80 y Z80Explorer, basado en netlist
- Crear un layout a nivel de compuertas que se parezca al layout del Z80 original
- Paquete cerámico DIP40 y logo del proyecto/chip art
Código y ejecución local
- Como material de introducción al proyecto se ofrecen un slide deck y un video de una conversación con Matthew Venn
- Ubicaciones principales del código
- src/tt_um_rejunity_z80.v: módulo de nivel superior; sigue las restricciones de Tiny Tapeout y multiplexa los pines de salida en los 8 pines del chip Tiny Tapeout
- src/tv80: implementación Verilog Z80 principal
- src/config.tcl: configuración de síntesis, colocación y ruteo de OpenROAD
- src/test/test.py: testbench
- Los artefactos de layout generados están en la carpeta
gdsy pueden inspeccionarse con KLayout- Archivo GDSII del núcleo Z80
- Archivo OASIS del chip Tiny Tapeout 07
- Para las pruebas locales, se sigue la guía de pruebas de Tiny Tapeout, luego se instalan
iverilog,verilator,cocotbypytest, y se ejecutamakeensrc
Dispositivos Z80 considerados para pruebas
- Se enumeran computadoras y consolas clásicas como casos de prueba para un reemplazo hardware del Z80
- ZX Spectrum 48K: Z80 a 3.5 MHz
- ZX Spectrum 128K: Z80 a 3.54690 MHz
- Amstrad CPC: Z80 a 4 MHz
- Familia MSX: 3.579 MHz
- SG-1000, Sega Master System, ColecoVision, TRS-80, Sinclair ZX80/ZX81, entre otros
- También se proponen como casos de prueba kits recientes de computadoras DIY
- RC2014 modular computer: ROM de 8 K, RAM de 32 K, 7.3728 MHz
- Zeal 8-bit Computer: ROM de 32 K, RAM de 128 KB a 512 KB, 10 MHz
- LiNC80 microcomputer kit: ROM de 16 K/64 K, RAM de 64 K, 7.3728 MHz
Colección de referencias
- Documentación relacionada con el Z80
- Z80 Datasheet
- Zilog Users Manual, Mostek Users Manual, Zilog Data Book
- Instrucciones no documentadas, tabla de opcodes, documentación de timing
- Historia y patentes del Z80
- Materiales del panel de historia oral sobre el desarrollo del Z80
- Materiales de M. Shima sobre diseño de microprocesadores
- Patentes vencidas relacionadas con el Z80, como protección contra picos de voltaje de entrada y circuitos de reset
- Die shots y materiales de ingeniería inversa
- Die shots de Zilog Z8400, Z84C00, SGB-CPU 01 del Nintendo Super Game Boy, Mostek MK3880, entre otros
- Materiales de ingeniería inversa sobre el registro de instrucciones del Z80, compuertas de bus, PLA, implementación de registros, ALU de 4 bits, etc.
- Implementaciones existentes
- Implementación Verilog TV80
- A-Z80
- Z80Explorer
- Emulador online de netlist Z80 de Visual6502.org
1 comentarios
Comentarios de Hacker News
Lo que hace Tiny Tapeout es impresionante. Cuesta creer que makers y estudiantes puedan convertir sus propios diseños de chips en algo real por tan poco dinero
Las herramientas también se ven muy buenas. No vas a diseñar el próximo CPU de Intel con un proceso de 130 nm, pero que un Z80 quepa en 0.064 mm² es sorprendente
También está bueno que quede una alternativa en una situación en la que el chip oficial ya no se produce. Ahora me dieron ganas de tener ese increíble paquete cerámico púrpura con tapa dorada encima del chip
https://twitter.com/l_vanek/status/1783557817133039738/photo...
https://tinytapeout.com/
Los tiles adicionales cuestan 50 dólares cada uno, y los pines analógicos extra empiezan en 40 dólares por pin. Si no me equivoco demasiado, 160 x 100 µm equivale a 0.16 x 0.1 mm, así que un tile tiene 0.016 mm² y un die de 0.064 mm² ocuparía 4 slots
Para quien tenga curiosidad, el 6502 y varios de sus derivados todavía siguen en producción por parte de una de las organizaciones desarrolladoras originales. Así que no parece que algo parecido vaya a pasar pronto del lado del rival del Z80
[0] https://www.westerndesigncenter.com/wdc/chips.php
https://hackaday.com/2024/04/19/end-of-life-for-z80-cpu-and-...
https://arstechnica.com/gadgets/2024/04/after-48-years-zilog...
https://en.wikipedia.org/wiki/Zilog_eZ80
http://www.zilog.com/docs/um0077.pdf
https://www.zilog.com/docs/ez80acclaim/ps0153.pdf
Debe de haber cientos de miles circulando por ahí, pero cuando desaparecen de distribuidores como Mouser o Farnell, para quien los necesita ya solo quedan sitios tipo eBay y se vuelve bastante una lotería
El Z80 era el CPU del ZX Spectrum. Me trae recuerdos
https://en.wikipedia.org/wiki/ZX_Spectrum
Como solo tenía casetera, si el código salía mal normalmente había que apretar reset y volver a cargar desde la cinta tanto EDTASM como mi código
0. https://forums.nesdev.org/viewtopic.php?t=18335
https://en.wikipedia.org/wiki/Coleco_Adam
Todavía conservo el libro Programming the Z80 que compré de niño
https://en.wikipedia.org/wiki/Programming_the_Z80
Creo que la verdadera diversión de estos CPU de 8 bits tan antiguos está en su simplicidad y en que una sola persona puede cablear una computadora a mano y construirla
En una clase universitaria de microprocesadores hice una placa 8088, y fue de lejos la mejor clase que tomé porque le quitó el aura de misterio a los drivers y al hardware. Después intenté rediseñarla en KiCAD y le agregué puertos de expansión de E/S, una mejor distribución y un puerto LCD para una pantalla de caracteres LCD 2x16
Hice un prototipo en Futurlec, pero cometí un error grande al especificar las huellas y terminé necesitando un interposer; llegué hasta soldar el 8284 y los sockets IC, y luego la vida se interpuso, así que todavía sigue en una caja
Los microcontroladores son geniales porque traen todo en un solo paquete, pero hay una satisfacción enorme en poder diseñar y construir una computadora a mano. Los FPGA recuperan un poco esa sensación, pero el ecosistema de herramientas es bizantino y terrible
[1] https://theopenroadproject.org/
Me sorprende descubrir que el Z80 ya es un CPU de 50 años
Llama la atención que la disposición del circuito se parezca más a un arreglo uniforme de compuertas que a la distribución personalizada que normalmente se ve en fotos del die
Por ejemplo, el “payload de instrucción” de LD A,(DE) está aquí
https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
Y la parte equivalente de mi emulador por software que implementa el mismo ciclo de máquina está aquí
https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
En ambos casos hay que poner el bus de direcciones con el contenido del registro DE y, al mismo tiempo, activar en algún lugar los pines MREQ|RD para indicarle al exterior una lectura de memoria. En mi emulador eso ocurre en el macro _mread, y en el siguiente ciclo de reloj se lee el bus de datos hacia el registro A
Lo interesante es que la implementación en Verilog no parece actualizar el registro interno WZ a DE+1. Entonces me pregunto si el comportamiento no documentado está implementado con exactitud, aunque también podría ser que la actualización de WZ se haga en otra parte
Al final, si desde afuera se ve y se comporta como un Z80, es decir, si los pines correctos se activan en los momentos correctos, la implementación interna no importa
Me pregunto qué tan compatible será con el Z80 original. El original también tenía muchas instrucciones no documentadas y la infame “trap gate”, que podría haber afectado ciertas secuencias raras de instrucciones
Viendo el “Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor” enlazado en la página, es posible que se haya diseñado justamente para distinguir el original de los clones
Se ve genial. Estuve en el equipo inicial de efabless.com, del lado de EDA open source
Había escuchado lo del ALU de 4 bits del Z80. Entiendo que se usaba dos veces para operaciones de 8 bits, y me da curiosidad si eso se consideraba un cuello de botella importante
También me pregunto si después hubo extensiones que agregaran operaciones enteras de mayor ancho de bits. Y quiero saber si una versión open source del chip podría habilitar nuevas funciones y variantes
Visto de otra manera, aunque hubiera tenido un ALU de 8 bits, las instrucciones aritméticas no habrían sido más rápidas; en cambio habría requerido el doble de transistores
El ALU de 4 bits es solo un detalle interno de implementación que no se ve desde afuera. Se podría decir que la única excepción es la existencia del flag half-carry, que indica el acarreo del nibble bajo al nibble alto
Si quieres un reemplazo de CPU que se pueda enchufar directamente en computadoras caseras antiguas, tienes que mantener el timing original de las instrucciones. Si no, el software que depende del cycle counting no va a funcionar. Aun así, puede que esto sea menos problema en el ZX Spectrum, ya que no tiene hardware de video programable como máquinas tipo Amstrad CPC
El eZ80 es un diseño más moderno y eficiente, e incluye un ALU más ancho: https://en.wikipedia.org/wiki/Zilog_eZ80. Pero no sirve como opción para revivir computadoras caseras antiguas; para eso necesitas un clon de Z80 preciso que iguale el timing original e incluso los comportamientos no documentados
Me pregunto si alguien sabe qué velocidad de reloj se puede esperar aproximadamente con esto
https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
La caché tendría que conocer todos los cambios de banco que realiza el sistema, y también entender cómo se mapean los bancos de memoria en el espacio de memoria
La ROM común puede almacenarse en caché. La RAM común que no se comparte con otros dispositivos también puede almacenarse en caché. La E/S mapeada en memoria no debe almacenarse en caché
La RAM compartida con otros dispositivos, como la memoria de video, pero en la que ese dispositivo no escribe, permite caché de escritura directa y caché de lectura completa. La RAM compartida en la que otros dispositivos pueden escribir no debe almacenarse en caché