1 puntos por GN⁺ 2024-04-29 | 1 comentarios | Compartir por WhatsApp
  • 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
  • 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
    • SKY130: nodo de 130 nm de SkyWater Technology Foundry
    • SG13: nodo BiCMOS de 130 nm de IHP Foundry
    • GF180: nodo de 180 nm de Global Foundry
  • 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 gds y 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, cocotb y pytest, y se ejecuta make en src

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

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

 
GN⁺ 2024-04-29
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/

    • Si es un proceso de 130 nm, más o menos corresponde a la época del Pentium III. No está nada mal
    • Para ahorrar clics, el precio estándar de tile de 160 x 100 µm + ASIC + placa demo es de 300 dólares más envío, y Efabless está patrocinando un descuento anticipado de 150 dólares más envío, limitado a un pedido por persona
      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

    • Curiosamente, el Z80 clásico fue descontinuado hace apenas 2 semanas
      https://hackaday.com/2024/04/19/end-of-life-for-z80-cpu-and-...
    • El 65C02 puede fallar si el código del 6502 depende de instrucciones no oficiales, accesos accidentales a memoria, timing de ciclos en operaciones BCD, flags de operaciones BCD, o de que el modo decimal esté activado dentro de una rutina de interrupción
    • Al 65C02 también le puede pasar lo mismo en cualquier momento. El Z80 fue descontinuado hace unas semanas precisamente porque la fab ya no podía conseguir wafers. Todos los chips de procesos antiguos tienen ese riesgo
    • La versión PDIP será descontinuada, pero el eZ80 sigue en producción
      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
    • Me pregunto cómo habrán sido las ventas de Z80 discretos en los últimos 10 años. También me gustaría saber para qué usos se compraban y cuál era la proporción entre DIP/PLCC/flatpack
      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

    • Había muchísimas máquinas buenas. La familia Amstrad CPC, varias consolas de Sega, los primeros equipos MSX y, por supuesto, la Tatung Einstein. Uníos, máquinas de disquete de 3 pulgadas
    • También estaban la TRS-80 y sus clones, y en Australia y Nueva Zelanda estaba la Dick Smith System-80. Tengo muy buenos recuerdos de programar con EDTASM
      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
    • Pensé que también se había usado en la Game Boy, pero aunque hay muchas similitudes, al parecer no es compatible en esencia[0]
      0. https://forums.nesdev.org/viewtopic.php?t=18335
    • También era el CPU de mi primera computadora, la Coleco ADAM
      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
    • También se usó muchísimo en los reproductores MP3/"MP4" genéricos que se volvieron comunes a mediados y finales de los 2000: https://en.wikipedia.org/wiki/S1_MP3_player
  • 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

    • Las herramientas open source no son perfectas, pero están creciendo rápido. Trabajo en este campo y recomiendo el proyecto OpenROAD[1], que soporta síntesis completa y placement-and-routing para algunos FPGA
      [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

    • Como esto es una implementación en Verilog, en realidad está mucho más cerca de un emulador de CPU por software que de un chip real. Por ejemplo, no tiene relación con la disposición de transistores del Z80 original
      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

    • No es un cuello de botella grande. Las instrucciones ALU que usan registros como fuente ya se ejecutan tan rápido como es posible, o sea en 4 ciclos de reloj. Ese tiempo es igual a la duración del “ciclo de máquina” de fetch de instrucción
      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
    • El Netburst P4 también usaba un ALU de 16 bits de medio ancho corriendo al doble de la frecuencia de reloj. En la práctica aplicaba el reloj en ambos flancos, como la RAM DDR, y por eso las operaciones ALU con acarreo/préstamo entre ambas mitades tardaban un ciclo extra: https://www.realworldtech.com/isscc-2001/7/
  • Me pregunto si alguien sabe qué velocidad de reloj se puede esperar aproximadamente con esto

    • En esta página dice 50 MHz
      https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
    • Si se diseñara un procesador nuevo compatible para sistemas antiguos, el factor limitante sería el bus de memoria. Para alcanzar velocidades altas haría falta caché
      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é