1 points par GN⁺ 2024-04-29 | 1 commentaires | Partager sur WhatsApp
  • 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
  • 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
    • SKY130 : nœud 130 nm de SkyWater Technology Foundry
    • SG13 : nœud BiCMOS 130 nm d’IHP Foundry
    • GF180 : nœud 180 nm de Global Foundry
  • É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 gds et 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, cocotb et pytest, puis exécuter make depuis src

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

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

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

    • Un procédé 130 nm, c’est à peu près l’époque du Pentium III. Pas mal
    • Pour vous éviter quelques clics : le prix standard pour une tuile 160 x 100 µm + ASIC + carte de démonstration est de 300 dollars hors frais de port, et Efabless sponsorise une remise de lancement à 150 dollars hors frais de port, limitée à une commande par personne.
      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

    • Fait intéressant, le Z80 classique a été arrêté il y a à peine deux semaines.
      https://hackaday.com/2024/04/19/end-of-life-for-z80-cpu-and-...
    • Le 65C02 peut échouer si le code 6502 dépend d’instructions non officielles, d’accès mémoire accidentels, du timing en cycles des opérations BCD, des flags des opérations BCD, ou du fait que le mode décimal soit activé dans les routines d’interruption
    • La même chose peut arriver au 65C02 à tout moment. Si le Z80 a été arrêté il y a quelques semaines, c’est parce que la fab ne pouvait plus fournir les wafers. Toutes les puces issues d’anciens procédés courent ce risque
    • La version PDIP est arrêtée, mais l’eZ80 est toujours en production.
      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
    • Je me demande à quoi ressemblaient les ventes de Z80 discrets sur les dix dernières années environ. J’aimerais aussi savoir à quoi ils servaient, et quelle était la répartition DIP/PLCC/flatpack.
      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

    • Il y avait vraiment beaucoup de bonnes machines. La famille Amstrad CPC, plusieurs consoles Sega, les premiers MSX et, bien sûr, le Tatung Einstein. Machines à disquettes 3 pouces, unissez-vous
    • Il y avait aussi le TRS-80 et ses clones, ainsi que le Dick Smith System-80 en Australie et en Nouvelle-Zélande. J’ai beaucoup de bons souvenirs de programmation avec EDTASM.
      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
    • Je pensais qu’il était aussi utilisé dans la Game Boy, mais même s’il y a beaucoup de similitudes, il semble fondamentalement incompatible[0].
      0. https://forums.nesdev.org/viewtopic.php?t=18335
    • C’était aussi le CPU de mon premier ordinateur, le Coleco ADAM.
      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
    • On le trouvait aussi souvent dans les lecteurs MP3/« MP4 » sans marque, très répandus entre le milieu et la fin des années 2000 : https://en.wikipedia.org/wiki/S1_MP3_player
  • 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

    • Les outils open source ne sont pas parfaits, mais ils progressent rapidement. Je travaille dans ce domaine et je recommande le projet OpenROAD[1], qui prend en charge toute la synthèse ainsi que le placement-routage pour certains FPGA
      [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

    • C’est une implémentation Verilog, donc c’est beaucoup plus proche d’un émulateur CPU logiciel que d’une vraie puce. Par exemple, elle n’a aucun rapport avec le placement des transistors du Z80 original
      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

    • Ce n’est pas un gros goulot d’étranglement. Les instructions ALU utilisant un registre comme source s’exécutent déjà aussi vite que possible, c’est-à-dire en 4 cycles d’horloge. Cette durée correspond à celle du « cycle machine » de récupération de l’instruction
      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
    • Le Netburst P4 utilisait lui aussi une ALU demi-largeur de 16 bits fonctionnant à 2 fois la fréquence d’horloge. En pratique, elle était cadencée sur les deux fronts comme de la RAM DDR, et les opérations ALU avec une retenue/un emprunt entre les deux moitiés prenaient donc un cycle de plus : https://www.realworldtech.com/isscc-2001/7/
  • Je me demande si quelqu’un sait à quelle fréquence d’horloge on peut s’attendre avec ça

    • Cette page indique 50 MHz
      https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
    • Si l’on conçoit un nouveau processeur compatible pour d’anciens systèmes, le facteur limitant sera le bus mémoire. Pour atteindre des vitesses élevées, il faudra un cache
      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