Zilog Z80 CPU - 現代的で無料かつオープンソースなシリコンクローン
(github.com/rejunity)- Zilogが2024年4月15日にZ80のEnd-of-Lifeを発表した後、このプロジェクトはZ80を置き換える**Free and Open Source Silicon(FOSSi)**実装を目標としている
- 目標は、ZX SpectrumやRC2014のような8ビットコンピュータやDIYキットで使えるピン互換のドロップイン代替品を開発すること
- 実装はGuy HutchisonのTV80 Verilogコアをベースにしており、OpenROADとSKY130・SG13・GF180のようなオープンPDKを使って実際のシリコンへ合成している
- 2025年に最初の2回のテープアウトチップが納品され、最初のSKY130 Tiny Tapeout 7シリコンはFUNCTIONAL状態で、QFN64 40ピン全露出版も納品後にテスト中
- テストでは、Z80がRP2040/RP2350をRAMのように使って通信し、DAA命令のバグを修正したが、ZEXALLの未文書フラグ2件のテストはまだ失敗している
プロジェクトの目標と現状
- rejunity/z80-open-siliconは、Zilog Z80の現代的で無料のオープンソースなシリコンクローンを作るプロジェクト
- Zilogは2024年4月15日にZ80のEnd-of-Lifeを発表した
- プロジェクトは、オープンソースとハードウェア保存コミュニティがZ80のFOSSi代替品を提供すべきだという目標を持つ
- 2025年に最初の2回のテープアウトチップが納品され、チップは動作する状態で、現在テスト中
- 現在、GF180MCU向けのDIP40版を作業中
シリコン実装の方式
- 目標ハードウェアは、8ビットのホームコンピュータや最近のDIYコンピュータキットでドロップインZ80代替品として使われるチップ
- 例としてZX SpectrumとRC2014が挙げられている
- 実装はOpenROADフローとオープンソースPDKを使い、生産可能なシリコンを合成している
- Tiny Tapeoutインフラは、複数の設計をまとめてSkywater Foundriesで実際のチップ製造コストを下げるために使われている
- ベースとなるCPUコアは、Guy HutchisonのTV80Verilogコア
対応PDKとテープアウト
- 対応するオープンPDKは3種類
- テープアウトの進捗状況
- FUNCTIONAL: Tiny Tapeout 7による130nm SKY130の最初のシリコンテープアウト
- DELIVERED/TESTING: eFabless CI2406 shuttleによる40ピン全露出QFN64パッケージ、130nm SKY130プロセス
- SG13g2の24ピン多重化版にはIHP 2024実験シャトルの項目があり、IHP 2025a shuttle版は納品済み
- WIP: Wafer.Space GF180MCU Run 1によるCOBベースのクラシックDIP40フォームファクタ
最初のFOSSi Z80シリコン
- 最初の反復版はTiny Tapeoutインフラと130nmプロセスで開発され、0.064mm²のダイ面積に収まっている
- 最初のテープアウトは2024年6月のeFabless ChipIgnite CI2406 Shuttleに提出された
- GDSII集積回路レイアウトはOpenROADの自動配置配線フローの結果であり、130nmゲート論理要素を使っている
テストと残作業
- 完了した計画
- Tiny Tapeout 07による130nmノードの24ピン改訂版テープアウト
- eFabless ChipIgniteによる40ピン全露出QFN64テープアウト
- SKY130とSG13のテープアウト完了、GF180は作業中
- チップテストを実施
- テスト概要
- Z80はRP2040/RP2350をRAMのように使って通信する
- ZEXDOC/ZEXALLテストスイートが検出したDAA命令バグを修正した
- 未文書フラグに関連するZEXALLのテスト2件はまだ失敗している
- 進行中または残っている作業
- QFN64からDIP40へ変換するPCBアダプタの作成
- COB DIP40 PCBの作成
- 元のZ80との比較による入出力信号のタイミングテスト
- すべてのZ80命令と
illegal命令を含むテストベンチの強化 - VerilogコアA-Z80、ネットリストベースのZ80Explorerなど他の実装との比較
- 元のZ80レイアウトのように見えるゲートレベルレイアウトの作成
- セラミックDIP40パッケージとプロジェクトロゴ/チップアート
コードとローカル実行
- プロジェクト概要資料としてスライドデッキとMatthew Vennとの議論動画が提供されている
- 主なコードの場所
- src/tt_um_rejunity_z80.v: 最上位モジュールであり、Tiny Tapeoutの制約に従い、出力ピンをTiny Tapeoutチップの8本のピンへ多重化している
- src/tv80: 中核となるVerilog Z80実装
- src/config.tcl: OpenROADの合成および配置配線設定
- src/test/test.py: テストベンチ
- 生成されたレイアウト成果物は
gdsフォルダにあり、KLayoutで確認できる- Z80コアのGDSIIファイル
- Tiny Tapeout 07チップのOASISファイル
- ローカルテストはTiny Tapeoutのテストガイドに従った後、
iverilog、verilator、cocotb、pytestをインストールし、srcでmakeを実行する
テスト対象として見ているZ80機器
- クラシックコンピュータとコンソールがハードウェアZ80代替品のテストケースとして列挙されている
- ZX Spectrum 48K: 3.5MHz Z80
- ZX Spectrum 128K: 3.54690MHz Z80
- Amstrad CPC: 4MHz Z80
- MSX系: 3.579MHz
- SG-1000、Sega Master System、ColecoVision、TRS-80、Sinclair ZX80/ZX81など
- 最近のDIYコンピュータキットもテストケースとして示されている
- RC2014 modular computer: 8K ROM、32K RAM、7.3728MHz
- Zeal 8-bit Computer: 32K ROM、128KB~512KB RAM、10MHz
- LiNC80 microcomputer kit: 16K/64K ROM、64K RAM、7.3728MHz
参考資料集
- Z80関連文書
- Z80 Datasheet
- Zilog Users Manual、Mostek Users Manual、Zilog Data Book
- 未文書命令、opcode table、タイミング文書
- Z80の歴史と特許
- Z80開発オーラルヒストリーパネル資料
- M. Shimaのマイクロプロセッサ設計資料
- 入力電圧スパイク保護、リセット回路など期限切れとなったZ80関連特許
- ダイショットとリバースエンジニアリング資料
- Zilog Z8400、Z84C00、Nintendo Super Game BoyのSGB-CPU 01、Mostek MK3880などのダイショット
- Z80命令レジスタ、バスゲート、PLA、レジスタ実装、4ビットALUなどのリバースエンジニアリング資料
- 既存実装
- TV80 Verilog実装
- A-Z80
- Z80Explorer
- Visual6502.orgのオンラインZ80ネットリストエミュレータ
1件のコメント
Hacker News の意見
Tiny Tapeout がやっていることはすごい。メイカーや学生が、こんなに少ない費用で自分のチップ設計を実際に作れるようになるなんて、誰が想像しただろうか
ツールも素晴らしそうだ。130nm プロセスで次の Intel CPU を設計することはできないだろうが、Z80 が 0.064 mm² に収まるというのは驚きだ
公式チップがもう生産されない状況で、代替が残っているのも良い。今となっては、チップの上に金メッキのふたが載った、あの格好いい紫色のセラミックパッケージが欲しくなってきた
https://twitter.com/l_vanek/status/1783557817133039738/photo...
https://tinytapeout.com/
追加タイルは 1 個 50 ドル、追加アナログピンは 1 ピン 40 ドルから。私が大きく間違っていなければ、160 x 100 µm は 0.16 x 0.1 mm なので、タイル 1 枚が 0.016 mm²、0.064 mm² のダイはスロット 4 つを使う計算になる
気になる人のために言うと、6502 とその複数の派生型は、元の開発者の一社によってまだ生産されている。なので、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
どこかに何百万個も出回っているはずだが、Mouser や Farnell のような流通業者から姿を消すと、必要な人に残るのは eBay 系くらいになり、かなり運任せになる
Z80 は ZX Spectrum の CPU だった。懐かしい
https://en.wikipedia.org/wiki/ZX_Spectrum
カセットドライブしかなかったので、コードが間違っていると、たいていリセットを押して、テープから EDTASM と自分のコードを読み込み直さなければならなかった
0. https://forums.nesdev.org/viewtopic.php?t=18335
https://en.wikipedia.org/wiki/Coleco_Adam
子どもの頃に買った Programming the Z80 の本もまだ持っている
https://en.wikipedia.org/wiki/Programming_the_Z80
こうした古い 8ビットCPU の本当の楽しさはシンプルさにあり、1人で手配線してコンピュータを作れるところにあると思う
大学のマイクロプロセッサの授業で8088ボードを作ったが、受けた授業の中で最高で、ドライバやハードウェアに対する神秘性を取り払ってくれた。後にKiCADで再設計を試み、IO拡張ポート、よりよいレイアウト、2x16文字LCD用のLCDポートを追加した
Futurlecで試作したが、フットプリント指定で大きなミスをしてインターポーザが必要になり、8284とICソケットをはんだ付けしたところまで進んだ後、生活に追われて今も箱の中に入ったままだ
マイクロコントローラはすべてが1つのパッケージに入っていて素晴らしいが、自分の手でコンピュータを設計し、作れることには大きな満足感がある。FPGAはその感覚をある程度取り戻してくれるが、ツール体系はビザンチン式にひどい
[1] https://theopenroadproject.org/
調べてみると、Z80 がもう50年ものCPUだというのは驚き
回路配置が、通常ダイ写真で見るようなカスタム配置というより、均一なゲートアレイ のように見えるのが目についた
たとえば LD A,(DE) の「命令ペイロード」はここにある
https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
そして同じマシンサイクルを私のソフトウェアエミュレータで実装した部分はここにある
https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
どちらもアドレスバスをDEレジスタの内容に設定し、同時に外部へメモリ読み出しを知らせるため、MREQ|RDピンをどこかで設定する必要がある。私のエミュレータではこれは _mread マクロで行われ、次のクロックサイクルでデータバスをAレジスタへ読み込む
興味深いのは、Verilog実装が内部WZレジスタをDE+1に更新していないように見える点だ。そのため、文書化されていない動作が正確に実装されているのか気になるが、WZ更新は別の場所で処理されているのかもしれない
結局、外からZ80のように見えて動作するなら、つまり正しいピンが正しいタイミングでアクティブになるなら、内部実装は重要ではない
元の Z80との互換性 がどの程度なのか気になる。オリジナルには文書化されていない命令も多かったし、特定の珍しい命令シーケンスに影響した可能性のある、悪名高い「トラップゲート」もあった
ページにリンクされている “Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor” を見ると、オリジナルとクローンを区別しようとする設計だった可能性がある
かっこよく見える。初期の efabless.com チームにいて、オープンソースEDA側だった
Z80の 4ビットALU の話を聞いたことがある。8ビット演算では2回使う構造だったと理解しているが、これが大きなボトルネックと見なされていたのか気になる
後により大きなビット幅の整数演算を追加した拡張があったのかも気になる。チップのオープンソース版が新機能や派生版を可能にするのかも知りたい
別の見方をすれば、8ビットALUがあったとしても算術命令は速くならず、代わりにトランジスタが2倍必要になったはずだ
4ビットALUは、外部からは見えない内部実装の詳細にすぎない。下位ニブルから上位ニブルへ移るキャリーを表すhalf-carryフラグの存在くらいを除けば、そう言える
古いホームコンピュータにそのまま差して使うCPU代替品が欲しいなら、元の命令タイミングを維持しなければならない。そうでないと サイクルカウンティング に依存するソフトウェアが動作しない。ただしZX SpectrumはAmstrad CPCのような機器と違ってプログラマブルなビデオハードウェアがないため、この問題は少ないかもしれない
eZ80はより現代的で効率的な設計で、より幅広いALUを含む: https://en.wikipedia.org/wiki/Zilog_eZ80。しかし古いホームコンピュータを蘇らせる用途なら選択肢にはならず、元のタイミングと文書化されていない動作まで合わせた正確なZ80クローンが必要になる
これでどの程度のクロック速度が期待できるのか、分かる人がいるのか気になる
https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
キャッシュは、システムが行うすべてのバンク切り替えを把握し、メモリバンクがメモリ空間にどうマッピングされるかも理解している必要がある
通常の読み取り専用メモリはキャッシュ可能。他のデバイスと共有しない通常の RAM もキャッシュ可能。メモリマップド IO はキャッシュしてはいけない
ビデオメモリのように他のデバイスと共有するが、そのデバイスが書き込まない RAM は、ライトスルーキャッシュと完全な読み取りキャッシュが可能。他のデバイスが書き込める共有 RAM はキャッシュしてはいけない