CPU Zilog Z80 - Bản sao silicon hiện đại, miễn phí và mã nguồn mở
(github.com/rejunity)- Sau khi Zilog công bố End-of-Life cho Z80 vào ngày 15/4/2024, dự án này đặt mục tiêu tạo ra một triển khai Free and Open Source Silicon (FOSSi) để thay thế Z80
- Mục tiêu là phát triển một linh kiện thay thế drop-in tương thích chân dùng được trong các máy tính 8-bit và bộ kit DIY như ZX Spectrum, RC2014
- Triển khai dựa trên lõi Verilog TV80 của Guy Hutchison, tổng hợp thành silicon thực bằng OpenROAD và các PDK mở như SKY130, SG13, GF180
- Hai chip tapeout đầu tiên đã được giao trong năm 2025; silicon SKY130 Tiny Tapeout 7 đầu tiên ở trạng thái FUNCTIONAL, còn phiên bản QFN64 lộ đủ 40 chân cũng đã được giao và đang được kiểm thử
- Trong kiểm thử, Z80 giao tiếp bằng cách dùng RP2040/RP2350 như RAM; lỗi lệnh DAA đã được sửa, nhưng 2 bài kiểm tra cờ không được tài liệu hóa của ZEXALL vẫn chưa vượt qua
Mục tiêu dự án và tình trạng hiện tại
- rejunity/z80-open-silicon là dự án tạo ra bản sao silicon hiện đại, miễn phí và mã nguồn mở của Zilog Z80
- Zilog đã công bố End-of-Life cho Z80 vào ngày 15/4/2024
- Dự án đặt mục tiêu để cộng đồng mã nguồn mở và bảo tồn phần cứng cung cấp một sản phẩm thay thế FOSSi cho Z80
- Hai chip tapeout đầu tiên đã được giao trong năm 2025; chip đang ở trạng thái hoạt động được và hiện đang được kiểm thử
- Hiện đang phát triển phiên bản DIP40 cho GF180MCU
Cách triển khai silicon
- Phần cứng mục tiêu là chip được dùng làm sản phẩm thay thế Z80 drop-in cho máy tính gia đình 8-bit và các bộ kit máy tính DIY gần đây
- Ví dụ được nêu gồm ZX Spectrum và RC2014
- Triển khai sử dụng luồng OpenROAD và các PDK mã nguồn mở để tổng hợp silicon có thể sản xuất
- Hạ tầng Tiny Tapeout được dùng để gom nhiều thiết kế lại với nhau, giúp giảm chi phí chế tạo chip thực tế tại Skywater Foundries
- Lõi CPU nền tảng là lõi Verilog TV80 của Guy Hutchison
PDK được hỗ trợ và tapeout
- Có 3 PDK mở được hỗ trợ
- Trạng thái tapeout
- FUNCTIONAL: tapeout silicon đầu tiên trên SKY130 130nm thông qua Tiny Tapeout 7
- DELIVERED/TESTING: gói QFN64 lộ đủ 40 chân thông qua eFabless CI2406 shuttle, quy trình SKY130 130nm
- Phiên bản multiplex 24 chân SG13g2 có mục trong shuttle thử nghiệm IHP 2024, còn phiên bản IHP 2025a shuttle đã được giao
- WIP: form factor DIP40 cổ điển dựa trên COB thông qua Wafer.Space GF180MCU Run 1
Silicon Z80 FOSSi đầu tiên
- Phiên bản lặp đầu tiên được phát triển bằng hạ tầng Tiny Tapeout và quy trình 130nm, nằm trong diện tích die 0,064mm²
- Tapeout đầu tiên được gửi lên eFabless ChipIgnite CI2406 Shuttle vào tháng 6/2024
- Layout mạch tích hợp GDSII là kết quả của luồng tự động đặt và đi dây của OpenROAD, sử dụng các phần tử logic cổng 130nm
Kiểm thử và việc còn lại
- Kế hoạch đã hoàn thành
- Tapeout bản sửa đổi 24 chân trên node 130nm thông qua Tiny Tapeout 07
- Tapeout QFN64 lộ đủ 40 chân thông qua eFabless ChipIgnite
- Hoàn tất tapeout SKY130 và SG13; GF180 đang trong quá trình thực hiện
- Thực hiện kiểm thử chip
- Tóm tắt kiểm thử
- Z80 giao tiếp bằng cách dùng RP2040/RP2350 như RAM
- Đã sửa lỗi lệnh DAA do bộ kiểm thử ZEXDOC/ZEXALL phát hiện
- 2 bài kiểm tra ZEXALL liên quan đến các cờ không được tài liệu hóa vẫn chưa vượt qua
- Đang thực hiện hoặc còn lại
- Làm adapter PCB chuyển từ QFN64 sang DIP40
- Làm PCB COB DIP40
- Kiểm thử timing tín hiệu vào/ra so với Z80 gốc
- Tăng cường testbench bao gồm tất cả lệnh Z80 và các lệnh “illegal”
- So sánh với các triển khai khác như lõi Verilog A-Z80, Z80Explorer dựa trên netlist
- Tạo layout cấp cổng trông giống layout Z80 gốc
- Gói ceramic DIP40 và logo dự án/chip art
Mã nguồn và chạy cục bộ
- Tài liệu tổng quan dự án có slide deck và video thảo luận với Matthew Venn
- Vị trí mã nguồn chính
- src/tt_um_rejunity_z80.v: module cấp cao nhất, tuân theo ràng buộc của Tiny Tapeout và multiplex các chân đầu ra vào 8 chân của chip Tiny Tapeout
- src/tv80: triển khai Z80 Verilog cốt lõi
- src/config.tcl: cấu hình tổng hợp, đặt và đi dây của OpenROAD
- src/test/test.py: testbench
- Các artifact layout được tạo nằm trong thư mục
gdsvà có thể kiểm tra bằng KLayout- Tệp GDSII của lõi Z80
- Tệp OASIS của chip Tiny Tapeout 07
- Kiểm thử cục bộ làm theo hướng dẫn kiểm thử của Tiny Tapeout, sau đó cài
iverilog,verilator,cocotb,pytestvà chạymaketrongsrc
Các thiết bị Z80 được xem là mục tiêu kiểm thử
- Máy tính và console cổ điển được liệt kê làm test case cho sản phẩm thay thế Z80 phần cứng
- ZX Spectrum 48K: Z80 3.5MHz
- ZX Spectrum 128K: Z80 3.54690MHz
- Amstrad CPC: Z80 4MHz
- Dòng MSX: 3.579MHz
- SG-1000, Sega Master System, ColecoVision, TRS-80, Sinclair ZX80/ZX81, v.v.
- Các bộ kit máy tính DIY gần đây cũng được nêu làm test case
- RC2014 modular computer: ROM 8K, RAM 32K, 7.3728MHz
- Zeal 8-bit Computer: ROM 32K, RAM 128KB~512KB, 10MHz
- LiNC80 microcomputer kit: ROM 16K/64K, RAM 64K, 7.3728MHz
Tập hợp tài liệu tham khảo
- Tài liệu liên quan đến Z80
- Z80 Datasheet
- Zilog Users Manual, Mostek Users Manual, Zilog Data Book
- Lệnh không được tài liệu hóa, bảng opcode, tài liệu timing
- Lịch sử và bằng sáng chế Z80
- Tài liệu panel lịch sử truyền khẩu về quá trình phát triển Z80
- Tài liệu thiết kế vi xử lý của M. Shima
- Các bằng sáng chế liên quan đến Z80 đã hết hạn, như bảo vệ chống spike điện áp đầu vào, mạch reset
- Die shot và tài liệu reverse engineering
- Die shot của Zilog Z8400, Z84C00, SGB-CPU 01 của Nintendo Super Game Boy, Mostek MK3880, v.v.
- Tài liệu reverse engineering về thanh ghi lệnh Z80, bus gate, PLA, triển khai thanh ghi, ALU 4-bit, v.v.
- Các triển khai hiện có
- Triển khai Verilog TV80
- A-Z80
- Z80Explorer
- Trình giả lập netlist Z80 trực tuyến của Visual6502.org
1 bình luận
Ý kiến trên Hacker News
Những gì Tiny Tapeout đang làm thật đáng nể. Thật khó tin là maker và sinh viên lại có thể biến thiết kế chip của riêng mình thành hiện thực với số tiền ít đến vậy
Bộ công cụ cũng có vẻ rất tốt. Có thể bạn sẽ không thiết kế được CPU Intel tiếp theo bằng quy trình 130nm, nhưng việc một Z80 nằm gọn trong 0.064 mm² vẫn rất ấn tượng
Cũng thật tốt khi vẫn còn phương án thay thế trong bối cảnh chip chính hãng không còn được sản xuất nữa. Giờ thì tôi lại muốn có cái gói gốm màu tím cực ngầu với nắp mạ vàng trên con chip đó
https://twitter.com/l_vanek/status/1783557817133039738/photo...
https://tinytapeout.com/
Ô bổ sung có giá 50 USD mỗi ô, còn chân analog bổ sung bắt đầu từ 40 USD mỗi chân. Nếu tôi không tính nhầm thì 160 x 100 µm là 0.16 x 0.1 mm, nên một ô là 0.016 mm², và die 0.064 mm² sẽ dùng 4 slot
Nói thêm cho ai quan tâm, 6502 và nhiều biến thể của nó vẫn đang được một trong các đơn vị phát triển ban đầu sản xuất. Vì vậy có lẽ phía đối thủ truyền kiếp của Z80 sẽ chưa sớm rơi vào tình cảnh tương tự
[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
Chắc hẳn vẫn có hàng triệu con đang trôi nổi đâu đó, nhưng khi chúng biến mất khỏi các nhà phân phối như Mouser hay Farnell thì với người cần chúng, lựa chọn chỉ còn loại như eBay và khá may rủi
Z80 là CPU của ZX Spectrum. Ký ức ùa về
https://en.wikipedia.org/wiki/ZX_Spectrum
Vì chỉ có ổ cassette nên nếu code bị lỗi, thường tôi phải nhấn reset rồi nạp lại EDTASM và mã của mình từ băng
0. https://forums.nesdev.org/viewtopic.php?t=18335
https://en.wikipedia.org/wiki/Coleco_Adam
Tôi vẫn còn giữ cuốn sách Programming the Z80 mà hồi nhỏ tôi mua
https://en.wikipedia.org/wiki/Programming_the_Z80
Niềm vui thực sự của những CPU 8-bit cũ như thế này nằm ở sự đơn giản, và ở chỗ một người có thể tự tay đi dây để làm ra cả một chiếc máy tính
Tôi từng làm một bo mạch 8088 trong lớp vi xử lý ở đại học, đó là môn học hay nhất tôi từng học và nó đã xóa đi cảm giác huyền bí quanh driver và phần cứng. Sau đó tôi thử thiết kế lại bằng KiCAD, thêm cổng mở rộng IO, bố cục tốt hơn và cổng LCD cho màn hình LCD ký tự 2x16
Tôi đã làm một nguyên mẫu ở Futurlec, nhưng mắc một lỗi lớn khi chỉ định footprint nên cuối cùng phải dùng interposer, rồi sau khi hàn xong 8284 và socket IC thì cuộc sống bận rộn ập đến, và nó đến giờ vẫn nằm trong hộp
Vi điều khiển rất tuyệt vì mọi thứ đều nằm trong một gói, nhưng cảm giác tự tay thiết kế và chế tạo một máy tính mang lại sự thỏa mãn khổng lồ. FPGA phần nào khơi lại được cảm giác đó, nhưng hệ sinh thái công cụ thì rối rắm kiểu Byzantine và rất kinh khủng
[1] https://theopenroadproject.org/
Thật ngạc nhiên khi nhận ra Z80 giờ đã là CPU 50 năm tuổi
Bố cục mạch nổi bật ở chỗ nó trông giống một mảng cổng đồng đều hơn là kiểu bố trí tùy biến thường thấy trong ảnh chụp die
Ví dụ, “payload lệnh” LD A,(DE) nằm ở đây
https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
Và phần hiện thực cùng chu kỳ máy đó trong trình giả lập phần mềm của tôi nằm ở đây
https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
Cả hai đều đặt bus địa chỉ theo nội dung thanh ghi DE, đồng thời phải thiết lập các chân MREQ|RD ở đâu đó để báo cho bên ngoài biết đang đọc bộ nhớ. Trong trình giả lập của tôi, việc này diễn ra trong macro _mread, và ở chu kỳ clock kế tiếp thì dữ liệu trên bus dữ liệu được đọc vào thanh ghi A
Điểm thú vị là hiện thực Verilog có vẻ không cập nhật thanh ghi WZ nội bộ thành DE+1. Vì vậy tôi tò mò không biết hành vi không được tài liệu hóa có được hiện thực chính xác hay không, dù cũng có thể việc cập nhật WZ được xử lý ở nơi khác
Suy cho cùng, miễn là từ bên ngoài nó trông và hoạt động như một Z80, tức các chân đúng được kích hoạt vào đúng thời điểm, thì hiện thực bên trong không quan trọng
Tôi tự hỏi mức độ tương thích với Z80 gốc sẽ ra sao. Bản gốc có nhiều lệnh không được tài liệu hóa, và còn có “trap gate” khét tiếng có thể đã ảnh hưởng đến một số chuỗi lệnh hiếm gặp nhất định
Xem “Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor” được liên kết trên trang thì có vẻ đây có thể là một thiết kế nhằm phân biệt bản gốc với bản clone
Trông rất tuyệt. Tôi từng ở trong đội ngũ efabless.com thời kỳ đầu, làm về EDA mã nguồn mở
Tôi từng nghe nói về ALU 4-bit của Z80. Theo tôi hiểu thì nó được dùng hai lần cho các phép toán 8-bit, và tôi tự hỏi liệu điều đó có bị xem là nút thắt lớn hay không
Tôi cũng tò mò liệu sau này có các phần mở rộng bổ sung phép toán số nguyên với độ rộng bit lớn hơn không. Và tôi muốn biết liệu phiên bản mã nguồn mở của con chip có thể mở đường cho các tính năng và biến thể mới hay không
Nói cách khác, kể cả có ALU 8-bit thì các lệnh số học cũng không nhanh hơn, mà chỉ tốn gấp đôi số transistor
ALU 4-bit chỉ là một chi tiết hiện thực nội bộ, không thể nhìn thấy từ bên ngoài. Có lẽ ngoại lệ duy nhất là sự tồn tại của cờ half-carry, biểu thị carry chuyển từ nibble thấp sang nibble cao
Nếu bạn muốn một CPU thay thế có thể cắm dùng ngay cho các máy tính gia đình cũ, bạn phải giữ nguyên timing lệnh gốc. Nếu không, phần mềm phụ thuộc vào đếm chu kỳ sẽ không chạy. Tuy vậy, ZX Spectrum có thể ít gặp vấn đề này hơn những máy như Amstrad CPC vì nó không có phần cứng video lập trình được
eZ80 là một thiết kế hiện đại và hiệu quả hơn, có ALU rộng hơn: https://en.wikipedia.org/wiki/Zilog_eZ80. Nhưng nếu mục tiêu là hồi sinh các máy tính gia đình cũ thì đây không phải lựa chọn phù hợp; bạn cần một bản clone Z80 chính xác, khớp cả timing gốc lẫn hành vi không được tài liệu hóa
Không rõ có ai biết có thể kỳ vọng tốc độ xung nhịp ở mức nào với thứ này không
https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
Bộ nhớ đệm phải biết mọi thao tác chuyển bank mà hệ thống thực hiện, đồng thời cũng phải hiểu cách các bank bộ nhớ được ánh xạ vào không gian bộ nhớ
ROM thông thường có thể được cache. RAM thông thường không dùng chung với thiết bị khác cũng có thể được cache. I/O ánh xạ bộ nhớ thì không nên cache
RAM dùng chung với thiết bị khác như bộ nhớ video nhưng thiết bị đó không ghi vào thì có thể dùng cache ghi xuyên và cache đọc đầy đủ. RAM dùng chung mà thiết bị khác có thể ghi vào thì không nên cache