CPU Zilog Z80 — un clone silicium moderne, gratuit et open source
(github.com/rejunity)- Après l’annonce par Zilog de la fin de vie du Z80 le 15 avril 2024, ce projet vise à créer une implémentation Free and Open Source Silicon (FOSSi) destinée à remplacer le Z80
- L’objectif est de développer un remplaçant drop-in compatible broche à broche utilisable dans des ordinateurs 8 bits et des kits DIY comme le ZX Spectrum ou le RC2014
- L’implémentation s’appuie sur le cœur Verilog TV80 de Guy Hutchison, et est synthétisée en silicium réel avec OpenROAD et des PDK ouverts comme SKY130, SG13 et GF180
- En 2025, les deux premières puces issues de tape-out ont été livrées ; le premier silicium SKY130 Tiny Tapeout 7 est FUNCTIONAL, et une version QFN64 exposant 40 broches a également été livrée et est en cours de test
- Lors des tests, le Z80 communique avec des RP2040/RP2350 utilisés comme de la RAM ; un bug de l’instruction DAA a été corrigé, mais deux tests ZEXALL portant sur des flags non documentés échouent encore
Objectifs du projet et état actuel
- rejunity/z80-open-silicon est un projet visant à créer un clone silicium moderne, gratuit et open source du Zilog Z80
- Zilog a annoncé la fin de vie du Z80 le 15 avril 2024
- Le projet a pour objectif que les communautés open source et de préservation du matériel proposent un remplaçant FOSSi du Z80
- En 2025, les deux premières puces issues de tape-out ont été livrées ; les puces sont fonctionnelles et actuellement en test
- Une version DIP40 pour GF180MCU est actuellement en cours de développement
Mode d’implémentation silicium
- Le matériel visé est une puce utilisable comme remplaçant drop-in du Z80 dans les ordinateurs domestiques 8 bits et les kits informatiques DIY récents
- Les exemples cités sont le ZX Spectrum et le RC2014
- L’implémentation utilise le flow OpenROAD et des PDK open source pour synthétiser un silicium fabricable
- L’infrastructure Tiny Tapeout sert à regrouper plusieurs conceptions afin de réduire le coût de fabrication de puces réelles chez Skywater Foundries
- Le cœur CPU de base est le cœur Verilog TV80 de Guy Hutchison
PDK pris en charge et tape-outs
- Trois PDK ouverts sont pris en charge
- État d’avancement des tape-outs
- FUNCTIONAL : premier tape-out silicium en 130 nm SKY130 via Tiny Tapeout 7
- DELIVERED/TESTING : boîtier QFN64 exposant les 40 broches complètes via le CI2406 shuttle d’eFabless, procédé 130 nm SKY130
- La version SG13g2 24 broches multiplexée dispose d’une entrée sur la navette expérimentale IHP 2024, et la version IHP 2025a shuttle a été livrée
- WIP : format classique DIP40 basé sur COB via GF180MCU Run 1 de Wafer.Space
Premier silicium FOSSi Z80
- La première itération a été développée avec l’infrastructure Tiny Tapeout et un procédé 130 nm, et tient dans une surface de die de 0,064 mm²
- Le premier tape-out a été soumis en juin 2024 au eFabless ChipIgnite CI2406 Shuttle
- Le layout de circuit intégré GDSII est issu du flow automatique de placement-routage d’OpenROAD, avec des éléments de logique à portes 130 nm
Tests et travaux restants
- Plans réalisés
- Tape-out de la révision 24 broches sur nœud 130 nm via Tiny Tapeout 07
- Tape-out QFN64 exposant les 40 broches complètes via eFabless ChipIgnite
- Tape-outs SKY130 et SG13 terminés, GF180 en cours
- Réalisation des tests de puce
- Résumé des tests
- Le Z80 communique avec le RP2040/RP2350 utilisés comme de la RAM
- Un bug de l’instruction DAA détecté par la suite de tests ZEXDOC/ZEXALL a été corrigé
- Deux tests ZEXALL liés à des flags non documentés échouent encore
- Travaux en cours ou restants
- Fabriquer un adaptateur PCB convertissant QFN64 vers DIP40
- Fabriquer un PCB COB DIP40
- Effectuer des tests de timing des signaux d’entrée/sortie par comparaison avec un Z80 original
- Renforcer le banc de test avec toutes les instructions Z80, y compris les instructions « illegal »
- Comparer avec d’autres implémentations, comme le cœur Verilog A-Z80 et Z80Explorer, basé sur une netlist
- Créer un layout au niveau portes ressemblant au layout du Z80 original
- Prévoir un boîtier céramique DIP40 ainsi qu’un logo de projet et du chip art
Code et exécution locale
- Des supports de présentation du projet sont fournis, ainsi qu’une vidéo de discussion avec Matthew Venn
- Principaux emplacements du code
- src/tt_um_rejunity_z80.v : module de plus haut niveau, respectant les contraintes Tiny Tapeout et multiplexant les broches de sortie sur les 8 broches de la puce Tiny Tapeout
- src/tv80 : implémentation Verilog Z80 principale
- src/config.tcl : configuration de synthèse, placement et routage OpenROAD
- src/test/test.py : banc de test
- Les artefacts de layout générés se trouvent dans le dossier
gdset peuvent être inspectés avec KLayout- Fichier GDSII du cœur Z80
- Fichier OASIS de la puce Tiny Tapeout 07
- Pour les tests locaux, il faut suivre le guide de test de Tiny Tapeout, installer
iverilog,verilator,cocotbetpytest, puis exécutermakedepuissrc
Appareils Z80 envisagés comme cibles de test
- Des ordinateurs et consoles classiques sont listés comme cas de test pour le remplaçant matériel du Z80
- ZX Spectrum 48K : Z80 à 3,5 MHz
- ZX Spectrum 128K : Z80 à 3,54690 MHz
- Amstrad CPC : Z80 à 4 MHz
- Famille MSX : 3,579 MHz
- SG-1000, Sega Master System, ColecoVision, TRS-80, Sinclair ZX80/ZX81, etc.
- Des kits informatiques DIY récents sont également proposés comme cas de test
- RC2014 modular computer : ROM 8K, RAM 32K, 7,3728 MHz
- Zeal 8-bit Computer : ROM 32K, RAM 128 Ko à 512 Ko, 10 MHz
- LiNC80 microcomputer kit : ROM 16K/64K, RAM 64K, 7,3728 MHz
Ressources de référence
- Documentation liée au Z80
- Z80 Datasheet
- Zilog Users Manual, Mostek Users Manual, Zilog Data Book
- Instructions non documentées, table d’opcodes, documentation de timing
- Histoire et brevets du Z80
- Documents du panel d’histoire orale sur le développement du Z80
- Documents de M. Shima sur la conception de microprocesseurs
- Brevets expirés liés au Z80, notamment sur la protection contre les pics de tension d’entrée et le circuit de reset
- Die shots et ressources de rétro-ingénierie
- Die shots de Zilog Z8400, Z84C00, SGB-CPU 01 du Nintendo Super Game Boy, Mostek MK3880, etc.
- Ressources de rétro-ingénierie sur le registre d’instructions du Z80, les portes de bus, la PLA, l’implémentation des registres, l’ALU 4 bits, etc.
- Implémentations existantes
- Implémentation Verilog TV80
- A-Z80
- Z80Explorer
- Émulateur en ligne de netlist Z80 de Visual6502.org
1 commentaires
Avis sur Hacker News
Ce que fait Tiny Tapeout est formidable. Qui aurait pensé que des makers et des étudiants pourraient faire fabriquer leur propre conception de puce pour si peu d’argent ?
Les outils ont aussi l’air excellents. On ne concevra pas le prochain CPU Intel avec un procédé 130 nm, mais voir qu’un Z80 tient dans 0,064 mm² est impressionnant.
C’est aussi une bonne chose qu’il reste une alternative alors que les puces officielles ne sont plus produites. Maintenant, j’ai envie de ce superbe boîtier céramique violet avec un capot plaqué or sur la puce.
https://twitter.com/l_vanek/status/1783557817133039738/photo...
https://tinytapeout.com/
Les tuiles supplémentaires commencent à 50 dollars pièce, et les broches analogiques supplémentaires à 40 dollars par broche. Sauf grosse erreur de ma part, 160 x 100 µm correspond à 0,16 x 0,1 mm, donc une tuile fait 0,016 mm², et un die de 0,064 mm² utilise donc 4 emplacements
Pour ceux que ça intéresse, le 6502 et plusieurs de ses dérivés sont encore produits par l’un des développeurs d’origine. Il ne devrait donc pas se passer de sitôt quelque chose de similaire du côté du grand rival du 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
Il doit bien en traîner des millions quelque part, mais une fois disparus de distributeurs comme Mouser ou Farnell, il ne restera plus que les sites façon eBay pour ceux qui en ont besoin, avec un côté assez aléatoire
Le Z80 était le CPU du ZX Spectrum. Ça réveille des souvenirs.
https://en.wikipedia.org/wiki/ZX_Spectrum
Comme je n’avais qu’un lecteur de cassettes, quand le code déraillait, il fallait généralement appuyer sur reset et recharger EDTASM et mon code depuis la cassette
0. https://forums.nesdev.org/viewtopic.php?t=18335
https://en.wikipedia.org/wiki/Coleco_Adam
J’ai encore le livre Programming the Z80 que j’avais acheté quand j’étais enfant.
https://en.wikipedia.org/wiki/Programming_the_Z80
Le vrai plaisir de ces vieux CPU 8 bits, à mon avis, c’est leur simplicité, et le fait qu’une personne puisse câbler un ordinateur à la main
À l’université, dans un cours sur les microprocesseurs, j’ai construit une carte 8088 ; c’était le meilleur cours que j’aie suivi, et il a dissipé le côté mystérieux des drivers et du hardware. Plus tard, j’ai essayé de la redessiner avec KiCAD en ajoutant des ports d’extension I/O, un meilleur placement, et un port LCD pour un afficheur texte 2x16
J’ai fait fabriquer un prototype chez Futurlec, mais j’ai fait une grosse erreur dans la définition des empreintes, ce qui a rendu nécessaire un interposeur ; je suis allé jusqu’à souder le 8284 et les sockets d’IC, puis la vie m’a rattrapé et le tout est encore dans une boîte
Les microcontrôleurs sont formidables parce que tout tient dans un seul boîtier, mais concevoir et fabriquer un ordinateur à la main procure une satisfaction immense. Les FPGA ravivent un peu cette sensation, mais l’écosystème d’outils est horriblement byzantin
[1] https://theopenroadproject.org/
En cherchant, j’ai été surpris de voir que le Z80 est désormais un CPU vieux de 50 ans
La disposition du circuit m’a frappé : elle ressemble davantage à une matrice de portes uniforme qu’au placement personnalisé qu’on voit habituellement sur les photos de die
Par exemple, le « payload d’instruction » de LD A,(DE) est ici
https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
Et voici l’implémentation du même cycle machine dans mon émulateur logiciel
https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
Dans les deux cas, le bus d’adresse est réglé sur le contenu du registre DE, et il faut en même temps activer quelque part les broches MREQ|RD pour signaler à l’extérieur une lecture mémoire. Dans mon émulateur, cela se produit dans la macro _mread, puis au cycle d’horloge suivant le bus de données est lu dans le registre A
Ce qui est intéressant, c’est que l’implémentation Verilog ne semble pas mettre à jour le registre interne WZ avec DE+1. Je me demande donc si le comportement non documenté a été implémenté correctement, même si cette mise à jour de WZ est peut-être gérée ailleurs
Au final, si vu de l’extérieur cela ressemble à un Z80 et se comporte comme tel — c’est-à-dire si les bonnes broches sont activées au bon moment — l’implémentation interne n’a pas d’importance
Je me demande quel sera le niveau de compatibilité avec le Z80 original. L’original comportait beaucoup d’instructions non documentées, ainsi qu’un fameux « trap gate » qui a pu affecter certaines séquences d’instructions rares
À lire le document « Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor » lié sur la page, il est possible que cela ait été conçu pour distinguer l’original des clones
Ça a l’air chouette. J’ai fait partie de l’équipe initiale de efabless.com, côté EDA open source
J’ai déjà entendu parler de l’ALU 4 bits du Z80. Si j’ai bien compris, elle était utilisée deux fois pour les opérations 8 bits ; je me demande si cela était considéré comme un gros goulot d’étranglement
Je me demande aussi s’il y a eu par la suite des extensions ajoutant des opérations entières sur des largeurs de bits plus grandes. Et si la version open source de la puce pourrait permettre de nouvelles fonctionnalités et variantes
Vu autrement, une ALU 8 bits n’aurait pas rendu les instructions arithmétiques plus rapides, mais aurait coûté deux fois plus de transistors
L’ALU 4 bits n’est qu’un détail d’implémentation interne, invisible de l’extérieur. À part peut-être l’existence du flag half-carry, qui indique la retenue du demi-octet bas vers le demi-octet haut
Si l’on veut un CPU de remplacement à brancher directement dans un vieux micro-ordinateur familial, il faut conserver les timings des instructions d’origine. Sinon, les logiciels qui reposent sur le cycle counting ne fonctionneront pas. Cela dit, ce problème est peut-être moins marqué sur le ZX Spectrum, qui n’a pas de matériel vidéo programmable comme l’Amstrad CPC
L’eZ80 est une conception plus moderne et plus efficace, avec notamment une ALU plus large : https://en.wikipedia.org/wiki/Zilog_eZ80. Mais pour faire revivre de vieux micro-ordinateurs familiaux, ce n’est pas une option : il faut un clone exact du Z80, avec les timings d’origine et même les comportements non documentés
Je me demande si quelqu’un sait à quelle fréquence d’horloge on peut s’attendre avec ça
https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
Le cache doit connaître toutes les commutations de banques effectuées par le système, et aussi comprendre comment les banques mémoire sont mappées dans l’espace mémoire
La mémoire ordinaire en lecture seule peut être mise en cache. La RAM ordinaire qui n’est pas partagée avec d’autres périphériques peut aussi être mise en cache. Les E/S mappées en mémoire ne doivent pas être mises en cache
La RAM partagée avec d’autres périphériques, comme la mémoire vidéo, mais dans laquelle ces périphériques n’écrivent pas, peut utiliser un cache en écriture directe et un cache de lecture complet. La RAM partagée dans laquelle d’autres périphériques peuvent écrire ne doit pas être mise en cache