1 điểm bởi GN⁺ 2024-04-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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
  • 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ợ
    • SKY130: node 130nm của SkyWater Technology Foundry
    • SG13: node BiCMOS 130nm của IHP Foundry
    • GF180: node 180nm của Global Foundry
  • 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 Tapeoutquy 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 gds và 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, pytest và chạy make trong src

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

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

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

    • Nếu là quy trình 130nm thì có thể xem là vào khoảng thời Pentium III. Không tệ
    • Để đỡ phải bấm thêm, giá tiêu chuẩn của ô 160 x 100 µm + ASIC + bo demo là 300 USD chưa gồm phí vận chuyển, và Efabless đang tài trợ ưu đãi sớm 150 USD chưa gồm phí vận chuyển, giới hạn mỗi người một đơn
      Ô 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

    • Điều thú vị là Z80 cổ điển mới bị khai tử chỉ khoảng 2 tuần trước
      https://hackaday.com/2024/04/19/end-of-life-for-z80-cpu-and-...
    • 65C02 có thể gặp lỗi nếu mã 6502 phụ thuộc vào lệnh không chính thức, truy cập bộ nhớ vô tình xảy ra, thời điểm chu kỳ của phép toán BCD, cờ của phép toán BCD, hoặc việc chế độ thập phân được bật trong routine ngắt
    • 65C02 cũng có thể gặp chuyện tương tự bất cứ lúc nào. Việc Z80 bị khai tử vài tuần trước cũng là vì fab không còn lấy được wafer nữa. Tất cả chip dùng quy trình cũ đều có rủi ro này
    • Bản PDIP bị ngừng sản xuất, nhưng eZ80 vẫn đang được sản xuất
      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
    • Tôi khá tò mò không biết doanh số bán Z80 rời trong khoảng 10 năm qua ra sao. Chúng được mua cho mục đích gì, và tỷ lệ giữa DIP/PLCC/flatpack là thế nào
      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

    • Từng có rất nhiều cỗ máy tuyệt vời. Dòng Amstrad CPC, nhiều máy console Sega, các thiết bị MSX đời đầu, và tất nhiên cả Tatung Einstein. Hỡi những cỗ máy dùng đĩa 3 inch, hãy đoàn kết lại
    • Còn có TRS-80 và các bản clone của nó, và ở Úc cùng New Zealand có Dick Smith System-80. Tôi có rất nhiều ký ức đẹp về việc lập trình bằng EDTASM
      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
    • Tôi cứ nghĩ nó cũng được dùng trong Game Boy, nhưng có vẻ dù có nhiều điểm tương đồng thì về cơ bản nó không tương thích[0]
      0. https://forums.nesdev.org/viewtopic.php?t=18335
    • Đó cũng là CPU trong Coleco ADAM, chiếc máy tính đầu tiên của tôi
      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
    • Nó cũng xuất hiện rất nhiều trong các máy nghe nhạc MP3/"MP4" vô danh từng phổ biến vào giữa đến cuối những năm 2000: https://en.wikipedia.org/wiki/S1_MP3_player
  • 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

    • Công cụ mã nguồn mở chưa hoàn hảo, nhưng đang phát triển rất nhanh. Tôi làm trong lĩnh vực này và muốn giới thiệu dự án OpenROAD[1], hỗ trợ tổng hợp, place-and-route hoàn chỉnh cho một số FPGA
      [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

    • Đây là một hiện thực bằng Verilog nên nó gần với một trình giả lập CPU bằng phần mềm hơn nhiều so với con chip thật. Ví dụ, nó không liên quan gì đến cách bố trí transistor của Z80 nguyên bản
      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

    • Không phải nút thắt lớn. Các lệnh ALU dùng thanh ghi làm nguồn vốn đã chạy nhanh nhất có thể, tức 4 chu kỳ clock. Khoảng thời gian này bằng với độ dài của “chu kỳ máy” lấy lệnh
      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
    • Netburst P4 cũng dùng ALU 16-bit nửa bề rộng nhưng chạy ở tần số gấp đôi xung nhịp. Trên thực tế nó được clock ở cả hai cạnh giống DDR RAM, nên các phép toán ALU có carry/borrow giữa hai nửa sẽ tốn thêm một chu kỳ: https://www.realworldtech.com/isscc-2001/7/
  • 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

    • Trang này ghi là 50 MHz
      https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
    • Nếu thiết kế một bộ xử lý tương thích mới cho các hệ thống cũ, yếu tố giới hạn sẽ là bus bộ nhớ. Để đạt tốc độ cao thì cần có bộ nhớ đệm
      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