1 Punkte von GN⁺ 2024-04-29 | 1 Kommentare | Auf WhatsApp teilen
  • Nachdem Zilog am 15. April 2024 das End-of-Life des Z80 angekündigt hatte, zielt dieses Projekt auf eine Free and Open Source Silicon (FOSSi)-Implementierung als Ersatz für den Z80 ab
  • Ziel ist die Entwicklung eines pin-kompatiblen Drop-in-Ersatzes, der in 8-Bit-Computern und DIY-Kits wie dem ZX Spectrum oder RC2014 eingesetzt werden kann
  • Die Implementierung basiert auf dem TV80-Verilog-Core von Guy Hutchison und wird mit OpenROAD sowie offenen PDKs wie SKY130, SG13 und GF180 zu realem Silizium synthetisiert
  • 2025 wurden die ersten beiden Tapeout-Chips ausgeliefert; das erste SKY130-Tiny-Tapeout-7-Silizium ist FUNCTIONAL, und eine freiliegende QFN64-40-Pin-Version wird nach der Auslieferung getestet
  • In den Tests kommuniziert der Z80, indem er RP2040/RP2350 wie RAM verwendet; ein Fehler im DAA-Befehl wurde behoben, aber zwei Tests zu undokumentierten Flags in ZEXALL schlagen noch fehl

Projektziel und aktueller Stand

  • rejunity/z80-open-silicon ist ein Projekt zur Entwicklung eines modernen, kostenlosen Open-Source-Siliziumklons des Zilog Z80
  • Zilog kündigte am 15. April 2024 das End-of-Life des Z80 an
  • Das Projekt verfolgt das Ziel, der Open-Source- und Hardware-Preservation-Community einen FOSSi-Ersatz für den Z80 bereitzustellen
  • 2025 wurden die ersten beiden Tapeout-Chips ausgeliefert; die Chips sind funktionsfähig und werden derzeit getestet
  • Derzeit ist eine DIP40-Version für GF180MCU in Arbeit

Umsetzung in Silizium

  • Die Zielhardware ist ein Chip, der als Drop-in-Z80-Ersatz in 8-Bit-Heimcomputern und aktuellen DIY-Computer-Kits eingesetzt werden kann
  • Die Implementierung synthetisiert mit dem OpenROAD-Flow und offenen PDKs produzierbares Silizium
  • Die Infrastruktur von Tiny Tapeout wird genutzt, um mehrere Designs zu bündeln und so die Kosten für die reale Chipfertigung bei SkyWater Foundries zu senken
  • Der zugrunde liegende CPU-Core ist der Verilog-Core TV80 von Guy Hutchison

Unterstützte PDKs und Tapeouts

  • Es werden drei offene PDKs unterstützt
    • SKY130: 130-nm-Knoten von SkyWater Technology Foundry
    • SG13: 130-nm-BiCMOS-Knoten von IHP Foundry
    • GF180: 180-nm-Knoten von Global Foundry
  • Status der Tapeouts
    • FUNCTIONAL: erstes 130-nm-SKY130-Silizium-Tapeout über Tiny Tapeout 7
    • DELIVERED/TESTING: QFN64-Gehäuse mit vollständig freiliegenden 40 Pins über den eFabless-CI2406 shuttle, gefertigt im 130-nm-SKY130-Prozess
    • Für die SG13g2-24-Pin-Multiplex-Version gibt es einen Eintrag im IHP-2024-Experiment-Shuttle; die Version für den IHP-2025a shuttle wurde ausgeliefert
    • WIP: klassischer DIP40-Formfaktor auf COB-Basis über GF180MCU Run 1 von Wafer.Space

Das erste FOSSi-Z80-Silizium

  • Die erste Iteration wurde mit der Infrastruktur von Tiny Tapeout und in einem 130-nm-Prozess entwickelt und passt auf eine Die-Fläche von 0,064 mm²
  • Das erste Tapeout wurde im Juni 2024 beim eFabless ChipIgnite CI2406 Shuttle eingereicht
  • Das integrierte Schaltungslayout in GDSII ist das Ergebnis des automatischen Place-and-Route-Flows von OpenROAD und verwendet logische Gatterelemente in 130 nm

Tests und verbleibende Aufgaben

  • Abgeschlossene Planung
    • Tapeout der 24-Pin-Revision im 130-nm-Knoten über Tiny Tapeout 07
    • Tapeout des QFN64 mit vollständig freiliegenden 40 Pins über eFabless ChipIgnite
    • Tapeouts für SKY130 und SG13 abgeschlossen, GF180 in Arbeit
    • Durchführung von Chip-Tests
  • Testzusammenfassung
    • Der Z80 kommuniziert, indem er RP2040/RP2350 wie RAM verwendet
    • Ein durch die ZEXDOC/ZEXALL-Testsuite entdeckter Fehler im DAA-Befehl wurde behoben
    • Zwei ZEXALL-Tests zu undokumentierten Flags schlagen noch fehl
  • Laufende oder verbleibende Arbeiten
    • Entwicklung eines PCB-Adapters von QFN64 auf DIP40
    • Entwicklung einer COB-DIP40-Platine
    • Timing-Tests der Ein-/Ausgangssignale im Vergleich zum originalen Z80
    • Ausbau des Testbenches für alle Z80-Befehle einschließlich „illegaler“ Befehle
    • Vergleich mit anderen Implementierungen wie dem Verilog-Core A-Z80 und dem netlistbasierten Z80Explorer
    • Erstellung eines Gate-Level-Layouts, das wie das originale Z80-Layout aussieht
    • Keramik-DIP40-Gehäuse sowie Projektlogo/Chip-Art

Code und lokale Ausführung

  • Als Überblick über das Projekt werden ein Slide-Deck und ein Video mit einer Diskussion mit Matthew Venn bereitgestellt
  • Wichtige Code-Orte
  • Die erzeugten Layout-Artefakte befinden sich im Ordner gds und können mit KLayout geprüft werden
    • GDSII-Datei des Z80-Cores
    • OASIS-Datei des Tiny-Tapeout-07-Chips
  • Für lokale Tests folgt man der Testanleitung von Tiny Tapeout, installiert iverilog, verilator, cocotb, pytest und führt in src make aus

Als Testziele betrachtete Z80-Geräte

  • Klassische Computer und Konsolen werden als Testfälle für einen Hardware-Z80-Ersatz aufgeführt
    • ZX Spectrum 48K: 3,5 MHz Z80
    • ZX Spectrum 128K: 3,54690 MHz Z80
    • Amstrad CPC: 4 MHz Z80
    • MSX-Familie: 3,579 MHz
    • SG-1000, Sega Master System, ColecoVision, TRS-80, Sinclair ZX80/ZX81 usw.
  • Auch aktuelle DIY-Computer-Kits werden als Testfälle genannt

Referenzmaterial

  • Z80-Dokumente
    • Z80 Datasheet
    • Zilog Users Manual, Mostek Users Manual, Zilog Data Book
    • Dokumente zu undokumentierten Befehlen, Opcode-Tabellen und Timing
  • Z80-Geschichte und Patente
    • Material eines Oral-History-Panels zur Z80-Entwicklung
    • Material zum Mikroprozessor-Design von M. Shima
    • Abgelaufene Z80-bezogene Patente zu Schutz vor Eingangsspannungsspitzen, Reset-Schaltungen usw.
  • Die-Shots und Reverse-Engineering-Material
    • Die-Shots von Zilog Z8400, Z84C00, Nintendos Super Game Boy SGB-CPU 01, Mostek MK3880 usw.
    • Reverse-Engineering-Material zu Z80-Befehlsregistern, Bus-Gates, PLA, Registerimplementierung, 4-Bit-ALU usw.
  • Bestehende Implementierungen
    • TV80-Verilog-Implementierung
    • A-Z80
    • Z80Explorer
    • Online-Z80-Netzlistenemulator von Visual6502.org

1 Kommentare

 
GN⁺ 2024-04-29
Hacker-News-Kommentare
  • Was Tiny Tapeout macht, ist großartig. Wer hätte gedacht, dass Maker und Studierende für so wenig Geld ihr eigenes Chipdesign tatsächlich fertigen lassen können
    Auch die Tools sehen hervorragend aus. Mit einem 130-nm-Prozess wird man zwar nicht die nächste Intel-CPU entwerfen, aber dass ein Z80 auf 0,064 mm² passt, ist erstaunlich
    Schön ist auch, dass es eine Alternative gibt, nachdem der offizielle Chip nicht mehr produziert wird. Jetzt hätte ich gern dieses fantastische violette Keramikgehäuse mit vergoldetem Deckel auf dem Chip
    https://twitter.com/l_vanek/status/1783557817133039738/photo...
    https://tinytapeout.com/

    • Ein 130-nm-Prozess entspricht ungefähr der Pentium-III-Ära. Nicht schlecht
    • Um euch Klicks zu sparen: Der Standardpreis für eine 160 x 100 µm große Kachel + ASIC + Demo-Board beträgt 300 US-Dollar zuzüglich Versand; Efabless sponsert einen Frühbucherrabatt von 150 US-Dollar zuzüglich Versand, begrenzt auf eine Bestellung pro Person
      Zusätzliche Kacheln beginnen bei 50 US-Dollar pro Stück, zusätzliche analoge Pins bei 40 US-Dollar pro Pin. Wenn ich mich nicht grob irre, sind 160 x 100 µm gleich 0,16 x 0,1 mm, also hat eine Kachel 0,016 mm², und ein 0,064-mm²-Die belegt damit vier Slots
  • Für alle, die sich fragen: Der 6502 und mehrere Derivate werden von einem der ursprünglichen Entwickler noch immer produziert. Daher wird es auf der Seite des Erzfeinds des Z80 wohl so bald nicht zu etwas Ähnlichem kommen
    [0] https://www.westerndesigncenter.com/wdc/chips.php

    • Interessanterweise wurde der klassische Z80 erst vor zwei Wochen abgekündigt
      https://hackaday.com/2024/04/19/end-of-life-for-z80-cpu-and-...
    • Der 65C02 kann scheitern, wenn 6502-Code auf undokumentierte Befehle, unbeabsichtigte Speicherzugriffe, das Zyklus-Timing von BCD-Operationen, die Flags von BCD-Operationen oder darauf angewiesen ist, dass in Interrupt-Routinen der Dezimalmodus gesetzt ist
    • Dem 65C02 kann jederzeit dasselbe passieren. Dass der Z80 vor ein paar Wochen abgekündigt wurde, lag daran, dass die Fab keine Wafer mehr beschaffen konnte. Alle Chips aus alten Prozessen sind diesem Risiko ausgesetzt
    • Die PDIP-Version wird eingestellt, aber der eZ80 wird weiterhin produziert
      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
    • Ich frage mich, wie hoch die Verkäufe einzelner Z80 in den letzten etwa zehn Jahren waren. Mich würde auch interessieren, wofür sie gekauft wurden und wie das Verhältnis von DIP/PLCC/Flatpack aussah
      Irgendwo müssen noch Millionen davon im Umlauf sein, aber wenn sie bei Distributoren wie Mouser oder Farnell verschwinden, bleibt Leuten, die sie brauchen, nur noch eBay und Ähnliches, und das wird ziemlich zum Glücksspiel
  • Der Z80 war die CPU des ZX Spectrum. Das weckt Erinnerungen
    https://en.wikipedia.org/wiki/ZX_Spectrum

    • Es gab wirklich viele gute Maschinen. Die Amstrad-CPC-Reihe, mehrere Sega-Konsolen, frühe MSX-Geräte und natürlich auch den Tatung Einstein. 3-Zoll-Diskettenmaschinen, vereinigt euch
    • Es gab auch den TRS-80 und seine Klone, und in Australien und Neuseeland den Dick Smith System-80. Ich habe viele gute Erinnerungen daran, mit EDTASM zu programmieren
      Da ich nur ein Kassettenlaufwerk hatte, musste ich bei fehlerhaftem Code meist Reset drücken und EDTASM sowie meinen Code erneut vom Band laden
    • Ich dachte, er sei auch im Game Boy verwendet worden, aber trotz vieler Ähnlichkeiten scheint er im Grunde nicht kompatibel zu sein[0]
      0. https://forums.nesdev.org/viewtopic.php?t=18335
    • Es war auch die CPU in meinem ersten Computer, dem Coleco ADAM
      https://en.wikipedia.org/wiki/Coleco_Adam
      Das Buch Programming the Z80, das ich als Kind gekauft habe, besitze ich immer noch
      https://en.wikipedia.org/wiki/Programming_the_Z80
    • Er steckte auch in vielen der namenlosen MP3-/"MP4"-Player, die Mitte bis Ende der 2000er weit verbreitet waren: https://en.wikipedia.org/wiki/S1_MP3_player
  • Der eigentliche Reiz solcher alten 8-Bit-CPUs liegt meiner Ansicht nach in ihrer Einfachheit – und darin, dass eine einzelne Person einen Computer von Hand verdrahten und bauen kann.
    In einem Mikroprozessor-Kurs an der Uni habe ich ein 8088-Board gebaut; das war einer der besten Kurse, die ich je hatte, und er hat Treibern und Hardware viel von ihrer Mystik genommen. Später habe ich versucht, es in KiCAD neu zu entwerfen, mit I/O-Erweiterungsport, besserem Layout und einem LCD-Port für ein 2x16-Zeichen-LCD.
    Ich habe bei Futurlec einen Prototyp fertigen lassen, aber einen großen Fehler bei der Footprint-Zuordnung gemacht, sodass ein Interposer nötig wurde. Ich kam noch so weit, den 8284 und die IC-Sockel anzulöten, dann kam das Leben dazwischen, und seitdem liegt es immer noch in einer Kiste.
    Mikrocontroller sind großartig, weil alles in einem Package steckt, aber es ist enorm befriedigend, einen Computer von Hand entwerfen und bauen zu können. FPGAs bringen dieses Gefühl bis zu einem gewissen Grad zurück, aber die Toolchain ist auf byzantinische Weise furchtbar.

    • Open-Source-Tools sind nicht perfekt, wachsen aber schnell. Ich arbeite in diesem Bereich und empfehle das Projekt OpenROAD[1], das für einige FPGAs vollständige Synthese sowie Place-and-Route unterstützt.
      [1] https://theopenroadproject.org/
  • Ich habe nachgeschaut und bin erstaunt, dass die Z80 inzwischen eine 50 Jahre alte CPU ist.

  • Mir fiel auf, dass das Schaltungslayout eher wie ein gleichmäßiges Gate-Array aussieht als wie das kundenspezifische Layout, das man normalerweise auf Die-Fotos sieht.

    • Das ist eine Verilog-Implementierung und damit viel näher an einem Software-CPU-Emulator als an einem echten Chip. Sie hat zum Beispiel keinen Bezug zur Transistoranordnung der ursprünglichen Z80.
      Die „Instruction Payload“ für LD A,(DE) ist zum Beispiel hier:
      https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
      Und hier ist die Implementierung desselben Machine Cycle in meinem Software-Emulator:
      https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
      Beide müssen den Adressbus auf den Inhalt des DE-Registers setzen und zugleich irgendwo die Pins MREQ|RD setzen, um nach außen einen Speicherlesevorgang zu signalisieren. In meinem Emulator passiert das im Makro _mread; im nächsten Taktzyklus wird dann der Datenbus in das A-Register eingelesen.
      Interessant ist, dass die Verilog-Implementierung das interne WZ-Register offenbar nicht auf DE+1 aktualisiert. Deshalb frage ich mich, ob das undokumentierte Verhalten exakt umgesetzt ist; es kann aber auch sein, dass das WZ-Update an anderer Stelle behandelt wird.
      Am Ende ist die interne Implementierung egal, solange sie von außen wie eine Z80 aussieht und sich so verhält – also die richtigen Pins zum richtigen Zeitpunkt aktiv sind.
  • Ich frage mich, wie weit die Kompatibilität zur ursprünglichen Z80 reicht. Das Original hatte viele undokumentierte Befehle, und es gab auch das berüchtigte „Trap Gate“, das bestimmte seltene Befehlssequenzen beeinflusst haben könnte.
    Wenn man sich das auf der Seite verlinkte „Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor“ ansieht, könnte es ein Design gewesen sein, mit dem man Original und Klone unterscheiden wollte.

  • Sieht cool aus. Ich war im frühen Team von efabless.com und auf der Open-Source-EDA-Seite tätig.

  • Ich habe von der 4-Bit-ALU der Z80 gehört. Soweit ich weiß, wurde sie für 8-Bit-Operationen zweimal verwendet; ich frage mich, ob das als großer Flaschenhals galt.
    Außerdem frage ich mich, ob es später Erweiterungen gab, die Ganzzahloperationen mit größerer Bitbreite hinzufügten. Und ob eine Open-Source-Version des Chips neue Funktionen und Varianten ermöglichen könnte.

    • Ein großer Flaschenhals ist das nicht. ALU-Befehle mit Registern als Quelle laufen bereits so schnell wie möglich, nämlich in 4 Taktzyklen. Das entspricht der Länge des „Machine Cycle“ zum Holen eines Befehls.
      Anders betrachtet wären arithmetische Befehle durch eine 8-Bit-ALU nicht schneller geworden; sie hätte stattdessen doppelt so viele Transistoren gebraucht.
      Die 4-Bit-ALU ist nur ein nach außen unsichtbares internes Implementierungsdetail – abgesehen vielleicht von der Existenz des Half-Carry-Flags, das den Übertrag vom unteren zum oberen Nibble anzeigt.
      Wenn man einen direkt einsteckbaren CPU-Ersatz für alte Heimcomputer will, muss man die ursprünglichen Befehlstimings beibehalten. Sonst läuft Software nicht, die auf Cycle Counting angewiesen ist. Beim ZX Spectrum könnte das allerdings weniger problematisch sein, weil es im Gegensatz zu Geräten wie dem Amstrad CPC keine programmierbare Video-Hardware hat.
      Der eZ80 ist ein moderneres und effizienteres Design und enthält unter anderem eine breitere ALU: https://en.wikipedia.org/wiki/Zilog_eZ80. Für die Wiederbelebung alter Heimcomputer ist er aber keine Option; dafür braucht man einen exakten Z80-Klon, der auch die ursprünglichen Timings und das undokumentierte Verhalten nachbildet.
    • Auch der Netburst P4 ließ eine halbbreite 16-Bit-ALU mit der doppelten Taktfrequenz laufen. In der Praxis wurde sie wie DDR-RAM auf beiden Flanken getaktet, weshalb ALU-Operationen mit Carry/Borrow zwischen den beiden Hälften einen zusätzlichen Zyklus dauerten: https://www.realworldtech.com/isscc-2001/7/
  • Ich frage mich, ob jemand weiß, welche Taktfrequenz man damit ungefähr erwarten kann

    • Auf dieser Seite steht 50 MHz
      https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
    • Wenn man einen neuen kompatiblen Prozessor für alte Systeme entwickelt, dürfte der limitierende Faktor der Speicherbus sein. Für hohe Geschwindigkeiten braucht man einen Cache
      Der Cache muss alle Bankumschaltungen kennen, die das System vornimmt, und auch verstehen, wie Speicherbänke in den Speicherraum gemappt werden
      Normaler Nur-Lese-Speicher ist cachebar. Normales RAM, das nicht mit anderen Geräten geteilt wird, ist ebenfalls cachebar. Memory-mapped I/O darf nicht gecacht werden
      RAM, das wie Videospeicher mit anderen Geräten geteilt wird, von diesen Geräten aber nicht beschrieben wird, kann mit einem Write-through-Cache und einem vollständigen Read-Cache gecacht werden. Geteiltes RAM, das von anderen Geräten beschrieben werden kann, darf nicht gecacht werden