Zilog Z80 CPU - Modern, ücretsiz ve açık kaynaklı bir silikon klonu
(github.com/rejunity)- Zilog’un 15 Nisan 2024’te Z80 için End-of-Life duyurusu yapmasının ardından bu proje, Z80’in yerini alacak bir Free and Open Source Silicon (FOSSi) uygulaması geliştirmeyi hedefliyor
- Amaç, ZX Spectrum ve RC2014 gibi 8 bit bilgisayarlarda ve DIY kitlerde kullanılabilecek pin uyumlu, tak-çalıştır bir yedek geliştirmek
- Uygulama, Guy Hutchison’ın TV80 Verilog çekirdeğini temel alıyor; OpenROAD ile SKY130, SG13 ve GF180 gibi açık PDK’ler kullanılarak gerçek silikona sentezleniyor
- 2025’te ilk iki tapeout çipi teslim edildi; ilk SKY130 Tiny Tapeout 7 silikonu FUNCTIONAL durumda, QFN64 40 pin tamamen dışa açılmış sürümü de teslimat sonrası test ediliyor
- Testlerde Z80, RP2040/RP2350’yi RAM gibi kullanarak iletişim kuruyor; DAA komutu hatası düzeltildi ancak ZEXALL’ın belgelenmemiş 2 bayrak testi hâlâ başarısız oluyor
Proje hedefi ve mevcut durum
- rejunity/z80-open-silicon, Zilog Z80’in modern, ücretsiz ve açık kaynaklı bir silikon klonunu oluşturma projesidir
- Zilog, 15 Nisan 2024’te Z80 için End-of-Life duyurusu yaptı
- Proje, açık kaynak ve donanım koruma topluluklarının Z80 için bir FOSSi alternatifi sunması gerektiği hedefini taşıyor
- 2025’te ilk iki tapeout çipi teslim edildi; çipler çalışır durumda ve şu anda test ediliyor
- Şu anda GF180MCU için DIP40 sürümü üzerinde çalışılıyor
Silikon uygulama yöntemi
- Hedef donanım, 8 bit ev bilgisayarlarında ve yeni DIY bilgisayar kitlerinde tak-çalıştır Z80 yedeği olarak kullanılan bir çip
- Örnek olarak ZX Spectrum ve RC2014 gösteriliyor
- Uygulama, üretilebilir silikon sentezlemek için OpenROAD akışını ve açık kaynak PDK’leri kullanıyor
- Tiny Tapeout altyapısı, birden fazla tasarımı birlikte paketleyerek Skywater Foundries’de gerçek çip üretim maliyetini düşürmek için kullanılıyor
- Temel CPU çekirdeği, Guy Hutchison’ın TV80 Verilog çekirdeği
Desteklenen PDK’ler ve tapeout’lar
- Desteklenen 3 açık PDK var
- Tapeout ilerleme durumu
- FUNCTIONAL: Tiny Tapeout 7 üzerinden 130 nm SKY130 ilk silikon tapeout’u
- DELIVERED/TESTING: eFabless CI2406 shuttle üzerinden 40 pin tamamen dışa açılmış QFN64 paket, 130 nm SKY130 süreci
- SG13g2 24 pin çoklamalı sürüm için IHP 2024 deneysel shuttle girdisi var; IHP 2025a shuttle sürümü teslim edildi
- WIP: Wafer.Space GF180MCU Run 1 üzerinden COB tabanlı klasik DIP40 form faktörü
İlk FOSSi Z80 silikonu
- İlk iterasyon, Tiny Tapeout altyapısı ve 130 nm süreç ile geliştirildi; 0,064 mm² kalıp alanına sığıyor
- İlk tapeout, Haziran 2024’te eFabless ChipIgnite CI2406 Shuttle’a gönderildi
- GDSII entegre devre yerleşimi, OpenROAD’un otomatik yerleştirme-yönlendirme akışının sonucu; 130 nm kapı mantık öğelerini kullanıyor
Testler ve kalan işler
- Tamamlanan planlar
- Tiny Tapeout 07 üzerinden 130 nm düğüm 24 pin revizyon tapeout’u
- eFabless ChipIgnite üzerinden 40 pin tamamen dışa açılmış QFN64 tapeout’u
- SKY130 ve SG13 tapeout’ları tamamlandı, GF180 üzerinde çalışılıyor
- Çip testi yapıldı
- Test özeti
- Z80, RP2040/RP2350’yi RAM gibi kullanarak iletişim kuruyor
- ZEXDOC/ZEXALL test paketinin yakaladığı DAA komutu hatası düzeltildi
- Belgelenmemiş bayraklarla ilgili 2 ZEXALL testi hâlâ başarısız oluyor
- Devam eden veya kalan işler
- QFN64’ü DIP40’a dönüştüren PCB adaptörü üretimi
- COB DIP40 PCB üretimi
- Orijinal Z80 ile karşılaştırmalı giriş/çıkış sinyali zamanlama testi
- Tüm Z80 komutlarını ve “illegal” komutları içeren testbench’in güçlendirilmesi
- Verilog çekirdeği A-Z80, netlist tabanlı Z80Explorer gibi diğer uygulamalarla karşılaştırma
- Orijinal Z80 yerleşimine benzeyen kapı seviyesi yerleşim oluşturma
- Seramik DIP40 paket ve proje logosu/çip sanatı
Kod ve yerel çalıştırma
- Proje genel bakışı materyali olarak bir slayt destesi ve Matthew Venn ile yapılan görüşmenin videosu sunuluyor
- Başlıca kod konumları
- src/tt_um_rejunity_z80.v: En üst modül; Tiny Tapeout kısıtlarını izler ve çıkış pinlerini Tiny Tapeout çipinin 8 pinine çoklar
- src/tv80: Temel Verilog Z80 uygulaması
- src/config.tcl: OpenROAD sentez ve yerleştirme-yönlendirme ayarları
- src/test/test.py: Testbench
- Oluşturulan yerleşim çıktıları
gdsklasöründe yer alıyor ve KLayout ile incelenebilir- Z80 çekirdeğinin GDSII dosyası
- Tiny Tapeout 07 çipinin OASIS dosyası
- Yerel testler, Tiny Tapeout’un test kılavuzu izlendikten sonra
iverilog,verilator,cocotb,pytestkurulupsrciçindemakeçalıştırılarak yapılır
Test hedefi olarak görülen Z80 cihazları
- Klasik bilgisayarlar ve konsollar, donanımsal Z80 yedeği için test senaryoları olarak listeleniyor
- ZX Spectrum 48K: 3.5 MHz Z80
- ZX Spectrum 128K: 3.54690 MHz Z80
- Amstrad CPC: 4 MHz Z80
- MSX serisi: 3.579 MHz
- SG-1000, Sega Master System, ColecoVision, TRS-80, Sinclair ZX80/ZX81 vb.
- Yeni DIY bilgisayar kitleri de test senaryosu olarak gösteriliyor
- RC2014 modular computer: 8K ROM, 32K RAM, 7.3728 MHz
- Zeal 8-bit Computer: 32K ROM, 128 KB~512 KB RAM, 10 MHz
- LiNC80 microcomputer kit: 16K/64K ROM, 64K RAM, 7.3728 MHz
Kaynak derlemesi
- Z80 ile ilgili belgeler
- Z80 Datasheet
- Zilog Users Manual, Mostek Users Manual, Zilog Data Book
- Belgelenmemiş komutlar, opcode tablosu, zamanlama belgeleri
- Z80 tarihi ve patentleri
- Z80 geliştirme sözlü tarih paneli materyalleri
- M. Shima’nın mikroişlemci tasarım materyalleri
- Giriş voltajı sıçraması koruması, reset devresi gibi süresi dolmuş Z80 ile ilgili patentler
- Kalıp görüntüleri ve tersine mühendislik materyalleri
- Zilog Z8400, Z84C00, Nintendo Super Game Boy’un SGB-CPU 01’i, Mostek MK3880 vb. kalıp görüntüleri
- Z80 komut yazmacı, veri yolu kapıları, PLA, yazmaç uygulaması, 4 bit ALU vb. tersine mühendislik materyalleri
- Mevcut uygulamalar
- TV80 Verilog uygulaması
- A-Z80
- Z80Explorer
- Visual6502.org’un çevrimiçi Z80 netlist emülatörü
1 yorum
Hacker News yorumları
Tiny Tapeout'un yaptığı iş harika. Maker'ların ve öğrencilerin bu kadar az parayla kendi çip tasarımlarını gerçekten üretebileceğini kim düşünürdü?
Araçlar da çok iyi görünüyor. 130nm süreç ile bir sonraki Intel CPU'sunu tasarlayamazsınız, ama Z80'in 0,064 mm²'ye sığması şaşırtıcı
Resmî çip artık üretilmiyorken bir alternatifin kalması da güzel. Şimdi üstünde altın kaplama kapak olan o havalı mor seramik paketten istiyorum
https://twitter.com/l_vanek/status/1783557817133039738/photo...
https://tinytapeout.com/
Ek tile'lar adet başına 50 dolardan, ek analog pinler pin başına 40 dolardan başlıyor. Çok yanılmıyorsam 160 x 100 µm, 0,16 x 0,1 mm demek; yani bir tile 0,016 mm² ve 0,064 mm²'lik die 4 slot kullanıyor
Merak edenler için, 6502 ve çeşitli türevleri hâlâ ilk geliştiricilerinden biri tarafından üretiliyor. Bu yüzden Z80'in ezelî rakibi tarafında benzer bir şeyin yakında yaşanacağını sanmıyorum
[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
Bir yerlerde milyonlarcası dolaşıyor olmalı, ama Mouser ya da Farnell gibi distribütörlerden kaybolunca ihtiyacı olanlara eBay türevlerinden başka bir şey kalmıyor ve iş epey şansa kalıyor
Z80, ZX Spectrum'un CPU'suydu. Anılar canlandı
https://en.wikipedia.org/wiki/ZX_Spectrum
Sadece kaset sürücüm olduğu için kod yanlışsa genelde reset'e basıp EDTASM'i ve kendi kodumu teypten yeniden yüklemem gerekirdi
0. https://forums.nesdev.org/viewtopic.php?t=18335
https://en.wikipedia.org/wiki/Coleco_Adam
Çocukken aldığım Programming the Z80 kitabı hâlâ duruyor
https://en.wikipedia.org/wiki/Programming_the_Z80
Bu eski 8 bit CPU’ların asıl keyfinin basitlikte ve tek bir kişinin bir bilgisayarı elle kablolayarak yapabilmesinde olduğunu düşünüyorum
Üniversitedeki mikroişlemci dersinde bir 8088 kartı yapmıştım; aldığım en iyi derslerden biriydi ve sürücüler ile donanımın etrafındaki gizem perdesini kaldırmıştı. Daha sonra KiCAD ile yeniden tasarlamayı denedim; IO genişletme portları, daha iyi bir yerleşim ve 2x16 karakter LCD için bir LCD portu ekledim
Futurlec’te prototip ürettirdim ama footprint atamasında büyük bir hata yaptığım için interposer gerekti; 8284’ü ve IC soketlerini lehimleme aşamasına kadar geldikten sonra hayat araya girdi ve hâlâ bir kutunun içinde duruyor
Mikrodenetleyiciler her şeyin tek bir pakette olması nedeniyle harika, ama bir bilgisayarı elle tasarlayıp yapabilmenin verdiği muazzam bir tatmin var. FPGA’lar bu hissi bir ölçüde geri getiriyor, fakat araç ekosistemi Bizans usulü korkunç derecede karmaşık
[1] https://theopenroadproject.org/
Bakınca Z80’in artık 50 yıllık bir CPU olduğunu görmek şaşırtıcı
Devre yerleşimi, genelde die fotoğraflarında görülen özel yerleşimden çok tekdüze bir gate array gibi göründüğü için dikkatimi çekti
Örneğin LD A,(DE) “komut payload”u burada
https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
Aynı makine çevrimini kendi yazılım emülatörümde uyguladığım kısım da burada
https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
İkisi de adres veriyolunu DE yazmacının içeriğine ayarlıyor ve aynı anda dışarıya bellek okumasını bildirmek için MREQ|RD pinlerini bir yerlerde ayarlamak zorunda. Benim emülatörümde bu _mread makrosunda oluyor; sonraki clock çevriminde de veri veriyolu A yazmacına okunuyor
İlginç olan, Verilog uygulamasının iç WZ yazmacını DE+1 olarak güncellemiyor gibi görünmesi. Bu yüzden belgelenmemiş davranışın doğru uygulanıp uygulanmadığını merak ediyorum; gerçi WZ güncellemesi başka bir yerde ele alınıyor olabilir
Sonuçta dışarıdan Z80 gibi görünüyor ve davranıyorsa, yani doğru pinler doğru zamanda etkinleşiyorsa, iç uygulama önemli değil
Özgün Z80 ile uyumluluğunun ne düzeyde olacağını merak ediyorum. Orijinalinde belgelenmemiş çok sayıda komut vardı ve belirli nadir komut dizilerini etkilemiş olabilecek kötü şöhretli bir “trap gate” de bulunuyordu
Sayfada bağlantısı verilen “Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor”a bakınca, bunun orijinal ile klonları ayırt etmeye yönelik bir tasarım olmuş olabileceği anlaşılıyor
Harika görünüyor. İlk efabless.com ekibindeydim ve açık kaynak EDA tarafındaydım
Z80’in 4 bit ALU’su hakkında bir şeyler duymuştum. 8 bit işlemler için iki kez kullanılan bir yapı olduğunu biliyorum; bunun büyük bir darboğaz sayılıp sayılmadığını merak ediyorum
Daha sonra daha büyük bit genişliğinde tamsayı işlemleri ekleyen uzantılar olup olmadığını da merak ediyorum. Çipin açık kaynak sürümünün yeni özellikleri ve varyantları mümkün kılıp kılmayacağını da bilmek isterim
Başka bir açıdan bakarsak, 8 bit ALU olsaydı aritmetik komutları daha hızlı yapmazdı; bunun yerine iki kat transistör gerektirirdi
4 bit ALU, dışarıdan görünmeyen bir iç uygulama ayrıntısından ibaret. Düşük nibble’dan yüksek nibble’a geçen carry’yi gösteren half-carry bayrağının varlığı dışında böyle denebilir
Eski ev bilgisayarlarına doğrudan takılacak bir CPU yedeği istiyorsanız özgün komut zamanlamasını korumanız gerekir. Aksi halde cycle countinge dayanan yazılımlar çalışmaz. Ancak ZX Spectrum’da Amstrad CPC gibi cihazlardaki türden programlanabilir video donanımı olmadığından bu sorun daha az olabilir
eZ80 daha modern ve verimli bir tasarım; daha geniş bir ALU da içeriyor: https://en.wikipedia.org/wiki/Zilog_eZ80. Ama eski ev bilgisayarlarını yaşatmak için bir seçenek değil; özgün zamanlamaya ve belgelenmemiş davranışlara kadar uyan, doğru bir Z80 klonu gerekir
Bununla ne kadar saat hızı beklenebileceğini bilen var mı merak ediyorum
https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
Önbelleğin, sistemin yaptığı tüm banka geçişlerinden haberdar olması ve bellek bankalarının bellek alanına nasıl eşlendiğini de anlaması gerekir
Normal salt okunur bellek önbelleğe alınabilir. Başka cihazlarla paylaşılmayan normal RAM de önbelleğe alınabilir. Bellek eşlemeli G/Ç önbelleğe alınmamalıdır
Video belleği gibi başka bir cihazla paylaşılan ama o cihazın yazmadığı RAM için write-through önbellek ve tam okuma önbelleği kullanılabilir. Başka bir cihazın yazabildiği paylaşılan RAM önbelleğe alınmamalıdır