Zilog Z80 CPU - โคลนซิลิคอนสมัยใหม่ ฟรี และโอเพนซอร์ส
(github.com/rejunity)- หลังจากที่ Zilog ประกาศ End-of-Life ของ Z80 เมื่อวันที่ 15 เมษายน 2024 โปรเจ็กต์นี้จึงตั้งเป้าสร้างอิมพลีเมนเทชัน Free and Open Source Silicon(FOSSi) เพื่อใช้แทน Z80
- เป้าหมายคือพัฒนา ชิ้นส่วนทดแทนแบบเสียบแทนได้ทันทีที่เข้ากันได้ระดับขา สำหรับคอมพิวเตอร์ 8 บิตและชุด DIY อย่าง ZX Spectrum และ RC2014
- การอิมพลีเมนต์อ้างอิงจาก TV80 Verilog core ของ Guy Hutchison และสังเคราะห์เป็นซิลิคอนจริงด้วย OpenROAD และ open PDK อย่าง SKY130, SG13 และ GF180
- ชิป tapeout สองครั้งแรกถูกส่งมอบในปี 2025 แล้ว โดยซิลิคอน SKY130 Tiny Tapeout 7 ตัวแรกอยู่ในสถานะ FUNCTIONAL และเวอร์ชัน QFN64 แบบเปิดครบ 40 ขาก็กำลังทดสอบหลังการจัดส่ง
- ในการทดสอบ Z80 สื่อสารโดยใช้ RP2040/RP2350 เสมือนเป็น RAM, มีการแก้บั๊กคำสั่ง DAA แล้ว แต่การทดสอบ แฟล็กที่ไม่มีเอกสาร 2 รายการของ ZEXALL ยังไม่ผ่าน
เป้าหมายของโปรเจ็กต์และสถานะปัจจุบัน
- rejunity/z80-open-silicon คือโปรเจ็กต์สำหรับสร้าง โคลนซิลิคอนฟรีและโอเพนซอร์สสมัยใหม่ ของ Zilog Z80
- Zilog ประกาศ End-of-Life ของ Z80 เมื่อวันที่ 15 เมษายน 2024
- โปรเจ็กต์นี้มีเป้าหมายให้ชุมชนโอเพนซอร์สและชุมชนอนุรักษ์ฮาร์ดแวร์ช่วยจัดหา ทางเลือก FOSSi สำหรับ Z80
- ชิป tapeout สองครั้งแรกถูกส่งมอบในปี 2025 แล้ว และชิป ทำงานได้ และกำลังอยู่ระหว่าง การทดสอบ
- ขณะนี้กำลังพัฒนา เวอร์ชัน DIP40 สำหรับ GF180MCU
วิธีอิมพลีเมนต์บนซิลิคอน
- ฮาร์ดแวร์เป้าหมายคือชิปที่ใช้เป็น ตัวแทน Z80 แบบเสียบแทนได้ทันที ในคอมพิวเตอร์บ้าน 8 บิตและชุดคอมพิวเตอร์ DIY รุ่นใหม่
- ตัวอย่างที่ยกมาคือ ZX Spectrum และ RC2014
- การอิมพลีเมนต์นี้สังเคราะห์เป็นซิลิคอนที่ผลิตได้จริงด้วยโฟลว์ OpenROAD และ open source PDK
- โครงสร้างพื้นฐาน Tiny Tapeout ถูกใช้เพื่อนำหลายดีไซน์มารวมกันเพื่อลดต้นทุนการผลิตชิปจริงกับ Skywater Foundries
- CPU core พื้นฐานคือ TV80 Verilog core ของ Guy Hutchison
PDK ที่รองรับและ tapeout
- open PDK ที่รองรับมี 3 แบบ
- สถานะความคืบหน้าของ tapeout
- FUNCTIONAL: ซิลิคอน tapeout ตัวแรกบน 130nm SKY130 ผ่าน Tiny Tapeout 7
- DELIVERED/TESTING: แพ็กเกจ QFN64 แบบเปิดครบ 40 ขา บนกระบวนการ 130nm SKY130 ผ่าน eFabless CI2406 shuttle
- เวอร์ชัน SG13g2 แบบมัลติเพล็กซ์ 24 ขา มีรายการใน IHP 2024 experimental shuttle และเวอร์ชัน IHP 2025a shuttle ก็ถูกส่งมอบแล้ว
- WIP: ฟอร์มแฟกเตอร์ DIP40 แบบคลาสสิกที่ใช้ COB ผ่าน Wafer.Space GF180MCU Run 1
ซิลิคอน FOSSi Z80 ตัวแรก
- เวอร์ชันวนรอบแรกถูกพัฒนาด้วยโครงสร้างพื้นฐาน Tiny Tapeout และ กระบวนการ 130nm โดยมีขนาดได 0.064mm²
- tapeout ครั้งแรกถูกส่งเข้า eFabless ChipIgnite CI2406 Shuttle ในเดือนมิถุนายน 2024
- เลย์เอาต์วงจรรวมแบบ GDSII เป็นผลจากโฟลว์วางและเดินสายอัตโนมัติของ OpenROAD และใช้ลอจิกเกต 130nm
การทดสอบและงานที่ยังเหลือ
- แผนที่ทำเสร็จแล้ว
- tapeout revision 24 ขา บนโหนด 130nm ผ่าน Tiny Tapeout 07
- tapeout QFN64 แบบเปิดครบ 40 ขา ผ่าน eFabless ChipIgnite
- tapeout บน SKY130 และ SG13 เสร็จแล้ว ส่วน GF180 ยังอยู่ระหว่างดำเนินการ
- ทำ การทดสอบชิป แล้ว
- สรุปการทดสอบ
- Z80 สื่อสารโดยใช้ RP2040/RP2350 เสมือนเป็น RAM
- แก้บั๊กคำสั่ง DAA ที่ชุดทดสอบ ZEXDOC/ZEXALL ตรวจพบแล้ว
- การทดสอบ ZEXALL 2 รายการที่เกี่ยวกับแฟล็กที่ไม่มีเอกสารยังไม่ผ่าน
- งานที่กำลังทำหรือยังเหลือ
- สร้าง PCB adapter สำหรับแปลงจาก QFN64 ไปเป็น DIP40
- สร้าง COB DIP40 PCB
- ทดสอบ timing ของสัญญาณ I/O เทียบกับ Z80 ต้นฉบับ
- เสริม testbench ให้ครอบคลุมคำสั่ง Z80 ทั้งหมด รวมถึงคำสั่ง 'illegal'
- เปรียบเทียบกับอิมพลีเมนเทชันอื่น เช่น Verilog core A-Z80 และ Z80Explorer ที่อิง netlist
- สร้างเลย์เอาต์ระดับเกตที่มีหน้าตาเหมือนเลย์เอาต์ Z80 ต้นฉบับ
- แพ็กเกจเซรามิก DIP40 และโลโก้โปรเจ็กต์/ชิปอาร์ต
โค้ดและการรันบนเครื่อง
- มีสไลด์เด็คสรุปโปรเจ็กต์และวิดีโอพูดคุยกับ Matthew Venn ให้ดูประกอบ
- ตำแหน่งโค้ดหลัก
- src/tt_um_rejunity_z80.v: โมดูลระดับบนสุด ซึ่งเป็นไปตามข้อจำกัดของ Tiny Tapeout และมัลติเพล็กซ์ขาเอาต์พุตไปยัง 8 ขาของชิป Tiny Tapeout
- src/tv80: อิมพลีเมนเทชัน Verilog Z80 หลัก
- src/config.tcl: การตั้งค่าสำหรับการสังเคราะห์และการวาง/เดินสายของ OpenROAD
- src/test/test.py: testbench
- เอาต์พุตเลย์เอาต์ที่สร้างแล้วอยู่ในโฟลเดอร์
gdsและสามารถตรวจดูด้วย KLayout- ไฟล์ GDSII ของ Z80 core
- ไฟล์ OASIS ของชิป Tiny Tapeout 07
- การทดสอบบนเครื่องทำตามคู่มือทดสอบของ Tiny Tapeout จากนั้นติดตั้ง
iverilog,verilator,cocotb,pytestแล้วรันmakeในsrc
อุปกรณ์ Z80 ที่ใช้เป็นเป้าทดสอบ
- มีการระบุคอมพิวเตอร์และคอนโซลคลาสสิกเป็นกรณีทดสอบสำหรับ ฮาร์ดแวร์ทดแทน Z80
- ZX Spectrum 48K: Z80 3.5MHz
- ZX Spectrum 128K: Z80 3.54690MHz
- Amstrad CPC: Z80 4MHz
- ตระกูล MSX: 3.579MHz
- SG-1000, Sega Master System, ColecoVision, TRS-80, Sinclair ZX80/ZX81 เป็นต้น
- ชุดคอมพิวเตอร์ DIY รุ่นใหม่ก็ถูกเสนอเป็นกรณีทดสอบเช่นกัน
- 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
ชุดเอกสารอ้างอิง
- เอกสารเกี่ยวกับ Z80
- Z80 Datasheet
- คู่มือผู้ใช้ของ Zilog, คู่มือผู้ใช้ของ Mostek, Zilog Data Book
- เอกสารคำสั่งที่ไม่มีในคู่มือ, opcode table, เอกสาร timing
- ประวัติและสิทธิบัตรของ Z80
- เอกสารเสวนาประวัติการพัฒนา Z80
- เอกสารการออกแบบไมโครโปรเซสเซอร์ของ M. Shima
- สิทธิบัตร Z80 ที่หมดอายุแล้ว เช่น การป้องกันแรงดันสไปก์อินพุต, วงจรรีเซ็ต เป็นต้น
- ดายช็อตและเอกสาร reverse engineering
- ดายช็อตของ Zilog Z8400, Z84C00, SGB-CPU 01 ใน Nintendo Super Game Boy, Mostek MK3880 เป็นต้น
- เอกสาร reverse engineering ของรีจิสเตอร์คำสั่ง Z80, bus gate, PLA, การอิมพลีเมนต์รีจิสเตอร์, ALU 4 บิต เป็นต้น
- อิมพลีเมนเทชันที่มีอยู่แล้ว
- TV80 Verilog implementation
- A-Z80
- Z80Explorer
- โปรแกรมจำลอง Z80 netlist ออนไลน์ของ Visual6502.org
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สิ่งที่ Tiny Tapeout ทำอยู่นั้นยอดเยี่ยมมาก ใครจะคิดว่าเมกเกอร์และนักศึกษาจะสามารถทำให้ดีไซน์ชิปของตัวเองกลายเป็นของจริงได้ด้วยเงินน้อยขนาดนี้
เครื่องมือก็ดูยอดเยี่ยมเช่นกัน แม้คงออกแบบ Intel CPU รุ่นถัดไปด้วย กระบวนการ 130nm ไม่ได้ แต่การที่ Z80 ใส่ลงไปได้ในพื้นที่ 0.064 mm² นั้นน่าทึ่งมาก
และก็ดีที่ยังมีทางเลือกเหลืออยู่ ในเมื่อชิปทางการไม่ได้ผลิตอีกต่อไปแล้ว ตอนนี้ชักอยากได้แพ็กเกจเซรามิกสีม่วงเท่ ๆ ที่มีฝาครอบชุบทองบนชิปขึ้นมาเลย
https://twitter.com/l_vanek/status/1783557817133039738/photo...
https://tinytapeout.com/
ไทล์เพิ่มเติมเริ่มที่ชิ้นละ 50 ดอลลาร์ และขาอนาล็อกเพิ่มเติมเริ่มที่ขาละ 40 ดอลลาร์ ถ้าผมไม่ได้คำนวณผิดไปมาก 160 x 100 µm คือ 0.16 x 0.1 mm ดังนั้นไทล์หนึ่งชิ้นมีพื้นที่ 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 คือ CPU ของ ZX Spectrum ชวนให้คิดถึงความหลัง
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
ผมคิดว่าความสนุกที่แท้จริงของ CPU 8 บิต เก่า ๆ แบบนี้อยู่ที่ความเรียบง่าย และการที่คนคนเดียวสามารถเดินสายทำคอมพิวเตอร์ขึ้นมาเองด้วยมือได้
ในวิชาไมโครโปรเซสเซอร์ที่มหาวิทยาลัย ผมเคยทำบอร์ด 8088 ซึ่งเป็นวิชาที่ดีที่สุดเท่าที่เคยเรียน และช่วยขจัดความรู้สึกลึกลับเกี่ยวกับไดรเวอร์กับฮาร์ดแวร์ออกไป ภายหลังผมลองออกแบบใหม่ด้วย KiCAD โดยเพิ่มพอร์ตขยาย IO การจัดวางที่ดีขึ้น และพอร์ต LCD สำหรับจอ LCD ตัวอักษร 2x16
ผมทำต้นแบบกับ Futurlec แต่พลาดอย่างหนักในการกำหนด footprint จนต้องใช้อินเทอร์โพเซอร์ และหลังจากบัดกรี 8284 กับซ็อกเก็ต IC ไปได้แค่นั้น ชีวิตก็ยุ่งจนมันยังอยู่ในกล่องจนถึงตอนนี้
ไมโครคอนโทรลเลอร์นั้นยอดเยี่ยมเพราะทุกอย่างอยู่ในแพ็กเกจเดียว แต่การที่เราสามารถออกแบบและสร้างคอมพิวเตอร์ด้วยมือได้นั้นให้ความพึงพอใจมหาศาล FPGA ช่วยชุบชีวิตความรู้สึกนั้นกลับมาได้บ้าง แต่ระบบเครื่องมือกลับซับซ้อนน่าปวดหัวแบบไบแซนไทน์
[1] https://theopenroadproject.org/
ลองค้นดูแล้วน่าทึ่งที่ Z80 เป็น CPU อายุ 50 ปีแล้ว
สิ่งที่สะดุดตาคือการวางวงจรดูเหมือน gate array แบบสม่ำเสมอ มากกว่าการจัดวางแบบกำหนดเองที่มักเห็นในภาพถ่ายได
ตัวอย่างเช่น “payload ของคำสั่ง” LD A,(DE) อยู่ที่นี่
https://github.com/rejunity/z80-open-silicon/blob/974c7711b2...
และส่วนที่ implement machine cycle เดียวกันในซอฟต์แวร์ emulator ของผมอยู่ที่นี่
https://github.com/floooh/chips/blob/bd1ecff58337574bb46eba5...
ทั้งสองต้องตั้ง address bus เป็นค่าของรีจิสเตอร์ DE และในเวลาเดียวกันก็ต้องตั้งพิน MREQ|RD ที่ไหนสักแห่งเพื่อแจ้งภายนอกว่าจะอ่านหน่วยความจำ ใน emulator ของผม สิ่งนี้เกิดขึ้นในมาโคร _mread และใน clock cycle ถัดไปก็อ่าน data bus เข้าไปยังรีจิสเตอร์ A
จุดที่น่าสนใจคือ implementation ของ Verilog ดูเหมือนจะไม่ได้อัปเดตรีจิสเตอร์ภายใน WZ เป็น DE+1 ดังนั้นผมจึงสงสัยว่าพฤติกรรมที่ไม่ได้จัดทำเอกสารไว้ถูก implement อย่างถูกต้องหรือไม่ แต่การอัปเดต WZ อาจถูกจัดการที่อื่นก็ได้
สุดท้ายแล้ว หากมองและทำงานจากภายนอกเหมือน Z80 กล่าวคือพินที่ถูกต้องถูกเปิดใช้งานในเวลาที่ถูกต้อง การ implement ภายในก็ไม่สำคัญ
สงสัยว่าความเข้ากันได้กับ Z80 ดั้งเดิม จะอยู่ในระดับไหน ของเดิมมีคำสั่งที่ไม่ได้จัดทำเอกสารไว้จำนวนมาก และยังมี “trap gate” อันฉาวโฉ่ที่อาจส่งผลต่อ sequence ของคำสั่งที่พบได้ยากบางแบบด้วย
ถ้าดู “Oral History Panel on the Founding of the Company and the Development of the Z80 Microprocessor” ที่ลิงก์ไว้บนหน้าเว็บ ก็เป็นไปได้ว่าเป็นการออกแบบเพื่อแยกของดั้งเดิมกับโคลนออกจากกัน
ดูเจ๋งดี ผมเคยอยู่ในทีม efabless.com ยุคแรก ๆ และทำด้าน EDA โอเพนซอร์ส
เคยได้ยินเรื่อง ALU 4 บิต ของ Z80 เข้าใจว่าในการคำนวณ 8 บิตจะใช้สองครั้ง เลยสงสัยว่าสิ่งนี้ถูกมองว่าเป็นคอขวดใหญ่หรือเปล่า
และก็สงสัยว่าภายหลังมีส่วนขยายที่เพิ่มการคำนวณจำนวนเต็ม bit width ใหญ่ขึ้นหรือไม่ อยากรู้ด้วยว่าเวอร์ชันโอเพนซอร์สของชิปจะทำให้มีฟีเจอร์และ variant ใหม่ ๆ ได้หรือเปล่า
มองอีกมุม ต่อให้มี ALU 8 บิต คำสั่งคณิตศาสตร์ก็ไม่ได้เร็วขึ้น แต่จะใช้ทรานซิสเตอร์เพิ่มเป็นสองเท่าแทน
ALU 4 บิตเป็นเพียงรายละเอียดการ implement ภายในที่มองไม่เห็นจากภายนอกเท่านั้น ยกเว้นแค่การมีอยู่ของแฟล็ก half-carry ที่แสดง carry จาก nibble ต่ำไป nibble สูง
ถ้าต้องการ CPU ทดแทนที่เสียบใช้กับ home computer รุ่นเก่าได้ทันที ก็ต้องรักษา timing ของคำสั่งเดิมไว้ มิฉะนั้นซอฟต์แวร์ที่พึ่งพา cycle counting จะไม่ทำงาน อย่างไรก็ตาม ZX Spectrum อาจมีปัญหานี้น้อยกว่า เพราะไม่มีฮาร์ดแวร์วิดีโอแบบ programmable เหมือนอุปกรณ์อย่าง Amstrad CPC
eZ80 เป็นการออกแบบที่ทันสมัยและมีประสิทธิภาพกว่า รวมถึงมี ALU ที่กว้างกว่า: https://en.wikipedia.org/wiki/Zilog_eZ80 แต่ถ้าใช้เพื่อชุบชีวิต home computer เก่า ๆ ก็ไม่ใช่ตัวเลือก และต้องการโคลน Z80 ที่แม่นยำซึ่งตรงกับ timing ดั้งเดิมและพฤติกรรมที่ไม่ได้จัดทำเอกสารไว้ด้วย
สงสัยว่ามีใครรู้ไหมว่าใช้สิ่งนี้แล้วคาดหวัง ความเร็วสัญญาณนาฬิกา ได้ประมาณแค่ไหน
https://github.com/rejunity/z80-open-silicon/blob/main/docs/...
แคชต้องรู้การสลับแบงก์ทั้งหมดที่ระบบทำ และต้องเข้าใจด้วยว่าแบงก์หน่วยความจำถูกแมปเข้ากับพื้นที่หน่วยความจำอย่างไร
หน่วยความจำแบบอ่านอย่างเดียวทั่วไปสามารถแคชได้ ส่วน RAM ทั่วไปที่ไม่ได้แชร์กับอุปกรณ์อื่นก็แคชได้เช่นกัน ไม่ควรแคช IO แบบ memory-mapped
RAM ที่แชร์กับอุปกรณ์อื่น เช่น หน่วยความจำวิดีโอ แต่ตัวอุปกรณ์นั้นไม่ได้เขียนลงไป สามารถใช้แคชแบบ write-through และแคชการอ่านทั้งหมดได้ ส่วน RAM ที่แชร์ซึ่งอุปกรณ์อื่นสามารถเขียนได้ ไม่ควรแคช