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년에 첫 두 번의 테이프아웃 칩이 배송됐고, 첫 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년에 첫 두 번의 테이프아웃 칩이 배송됐고, 칩은 동작함 상태이며 현재 테스트 중임
- 현재 GF180MCU용 DIP40 버전이 작업 중임
실리콘 구현 방식
- 목표 하드웨어는 8비트 홈 컴퓨터와 최근 DIY 컴퓨터 키트에서 드롭인 Z80 대체품으로 쓰이는 칩임
- 예시로 ZX Spectrum과 RC2014가 제시됨
- 구현은 OpenROAD 플로우와 오픈 소스 PDK를 사용해 생산 가능한 실리콘을 합성함
- Tiny Tapeout 인프라는 여러 설계를 함께 묶어 Skywater Foundries에서 실제 칩 제작 비용을 낮추는 데 사용됨
- 기반 CPU 코어는 Guy Hutchison의 TV80 Verilog 코어임
지원 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 넷리스트 에뮬레이터
댓글과 토론
Hacker News 의견들
-
Tiny Tapeout이 하는 일은 대단함. 메이커와 학생이 이렇게 적은 돈으로 자기 칩 설계를 실제로 만들 수 있으리라고 누가 생각했을까 싶음
도구도 훌륭해 보임. 130nm 공정으로 다음 Intel CPU를 설계하진 못하겠지만, Z80이 0.064 mm²에 들어간다는 건 놀라움
공식 칩이 더 이상 생산되지 않는 상황에서 대안이 남아 있다는 것도 좋음. 이제 칩 위에 금도금 덮개가 올라간 저 멋진 자주색 세라믹 패키지가 갖고 싶어짐
https://twitter.com/l_vanek/status/1783557817133039738/photo...
https://tinytapeout.com/- 130nm 공정이면 대략 Pentium III 시대쯤이라 볼 수 있음. 나쁘지 않음
- 클릭을 줄이자면, 160 x 100 µm 타일 + ASIC + 데모 보드의 표준 가격은 배송비 별도 300달러이고, Efabless가 1인 1주문 한정으로 배송비 별도 150달러 조기 할인을 후원 중임
추가 타일은 개당 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- 흥미롭게도 고전적인 Z80은 불과 2주 전에 단종 처리됐음
https://hackaday.com/2024/04/19/end-of-life-for-z80-cpu-and-... - 65C02는 6502 코드가 비공식 명령어, 우발적인 메모리 접근, BCD 연산의 사이클 타이밍, BCD 연산 플래그, 혹은 인터럽트 루틴에서 10진 모드가 설정된 상태에 의존한다면 실패할 수 있음
- 65C02도 언제든 같은 일이 생길 수 있음. Z80이 몇 주 전에 단종된 것도 팹에서 더 이상 웨이퍼를 구할 수 없었기 때문임. 오래된 공정의 칩은 모두 이런 위험이 있음
- PDIP 버전은 단종되지만 eZ80은 여전히 생산 중임
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 - 지난 10년 정도의 개별 Z80 판매량이 어땠는지 궁금함. 어떤 용도로 샀는지, DIP/PLCC/플랫팩 비율이 어땠는지도 알고 싶음
어딘가에 수백만 개는 떠돌고 있을 텐데, Mouser나 Farnell 같은 유통사에서 사라지면 필요한 사람에게는 eBay류밖에 남지 않고 꽤 복불복이 됨
- 흥미롭게도 고전적인 Z80은 불과 2주 전에 단종 처리됐음
-
Z80은 ZX Spectrum의 CPU였음. 추억이 떠오름
https://en.wikipedia.org/wiki/ZX_Spectrum- 좋은 기계가 정말 많았음. Amstrad CPC 계열, 여러 Sega 콘솔, 초기 MSX 기기들, 그리고 물론 Tatung Einstein까지. 3인치 디스크 기계들이여 단결하라
- TRS-80과 그 클론들도 있었고, 호주와 뉴질랜드에는 Dick Smith System-80이 있었음. EDTASM으로 프로그래밍하던 좋은 기억이 많음
카세트 드라이브만 있어서 코드가 잘못되면 보통 리셋을 누르고 테이프에서 EDTASM과 내 코드를 다시 불러와야 했음 - Game Boy에도 쓰인 줄 알았는데, 비슷한 점은 많아도 기본적으로 호환되지 않는 것으로 보임[0]
0. https://forums.nesdev.org/viewtopic.php?t=18335 - 내 첫 컴퓨터였던 Coleco ADAM에도 들어간 CPU였음
https://en.wikipedia.org/wiki/Coleco_Adam
어릴 때 산 Programming the Z80 책도 아직 가지고 있음
https://en.wikipedia.org/wiki/Programming_the_Z80 - 2000년대 중후반에 널리 퍼졌던 무명 MP3/"MP4" 플레이어들에도 많이 들어갔음: https://en.wikipedia.org/wiki/S1_MP3_player
-
이런 오래된 8비트 CPU의 진짜 즐거움은 단순함이고, 한 사람이 손으로 컴퓨터를 배선해 만들 수 있다는 데 있다고 봄
대학 마이크로프로세서 수업에서 8088 보드를 만들었는데, 내가 들은 수업 중 최고였고 드라이버와 하드웨어에 대한 신비감을 걷어 줬음. 나중에 KiCAD로 재설계를 시도해 IO 확장 포트와 더 나은 배치, 2x16 문자 LCD용 LCD 포트를 추가했음
Futurlec에서 시제품을 만들었지만 풋프린트 지정에 큰 실수를 해서 인터포저가 필요해졌고, 8284와 IC 소켓을 납땜한 데까지 간 뒤 삶에 치여 아직도 상자 안에 있음
마이크로컨트롤러는 모든 게 한 패키지에 들어 있어 훌륭하지만, 손으로 컴퓨터를 설계하고 만들 수 있다는 데는 엄청난 만족감이 있음. FPGA가 어느 정도 그 느낌을 되살려 주지만 도구 체계는 비잔틴식으로 끔찍함- 오픈소스 도구가 완벽하진 않지만 빠르게 성장 중임. 이 분야에서 일하고 있고, 일부 FPGA에 대해 전체 합성과 배치·배선을 지원하는 OpenROAD[1] 프로젝트를 추천함
[1] https://theopenroadproject.org/
- 오픈소스 도구가 완벽하진 않지만 빠르게 성장 중임. 이 분야에서 일하고 있고, 일부 FPGA에 대해 전체 합성과 배치·배선을 지원하는 OpenROAD[1] 프로젝트를 추천함
-
찾아보니 Z80이 이제 50년 된 CPU라니 놀라움
-
회로 배치가 보통 다이 사진에서 보는 맞춤형 배치라기보다 균일한 게이트 배열처럼 보여서 눈에 띄었음
- 이건 Verilog 구현이라 실제 칩보다는 소프트웨어 CPU 에뮬레이터에 훨씬 가까움. 예를 들어 원래 Z80의 트랜지스터 배치와는 관련이 없음
예를 들어 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처럼 보이고 동작한다면, 즉 올바른 핀이 올바른 시점에 활성화된다면 내부 구현은 중요하지 않음
- 이건 Verilog 구현이라 실제 칩보다는 소프트웨어 CPU 에뮬레이터에 훨씬 가까움. 예를 들어 원래 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비트 연산에는 두 번 쓰는 구조였다고 아는데, 이게 큰 병목으로 여겨졌는지 궁금함
나중에 더 큰 비트폭의 정수 연산을 추가한 확장이 있었는지도 궁금함. 칩의 오픈소스 버전이 새 기능과 변종을 가능하게 할지도 알고 싶음- 큰 병목은 아님. 레지스터를 소스로 쓰는 ALU 명령은 이미 가능한 한 빠르게, 즉 4클록 사이클로 실행되기 때문임. 이 시간은 명령어 가져오기 “기계 사이클”의 길이와 같음
다른 관점에서 보면 8비트 ALU가 있었다고 해서 산술 명령이 더 빨라지진 않았고, 대신 트랜지스터는 두 배로 들었을 것임
4비트 ALU는 외부에서 보이지 않는 내부 구현 세부사항일 뿐임. 낮은 니블에서 높은 니블로 넘어가는 캐리를 나타내는 half-carry 플래그의 존재 정도를 제외하면 그렇다 볼 수 있음
오래된 홈컴퓨터에 바로 꽂아 쓰는 CPU 대체품을 원한다면 원래 명령어 타이밍을 유지해야 함. 그렇지 않으면 사이클 카운팅에 의존하는 소프트웨어가 동작하지 않음. 다만 ZX Spectrum은 Amstrad CPC 같은 기기처럼 프로그래머블 비디오 하드웨어가 없어서 이 문제가 덜할 수 있음
eZ80은 더 현대적이고 효율적인 설계이며, 더 넓은 ALU를 포함: https://en.wikipedia.org/wiki/Zilog_eZ80. 하지만 오래된 홈컴퓨터를 살리는 용도라면 선택지가 아니고, 원래 타이밍과 문서화되지 않은 동작까지 맞춘 정확한 Z80 클론이 필요함 - Netburst P4도 절반 폭인 16비트 ALU를 클록 주파수의 2배로 돌렸음. 실제로는 DDR RAM처럼 양쪽 에지에서 클록을 걸었고, 그래서 두 절반 사이에 캐리/빌림이 있는 ALU 연산은 한 사이클이 더 걸렸음: https://www.realworldtech.com/isscc-2001/7/
- 큰 병목은 아님. 레지스터를 소스로 쓰는 ALU 명령은 이미 가능한 한 빠르게, 즉 4클록 사이클로 실행되기 때문임. 이 시간은 명령어 가져오기 “기계 사이클”의 길이와 같음
-
이걸로 어느 정도 클록 속도를 기대할 수 있는지 아는 사람이 있는지 궁금함
- 이 페이지에는 50 MHz라고 되어 있음
https://github.com/rejunity/z80-open-silicon/blob/main/docs/... - 오래된 시스템용 새 호환 프로세서를 설계한다면 제한 요인은 메모리 버스가 될 것임. 높은 속도를 내려면 캐시가 필요함
캐시는 시스템이 수행하는 모든 뱅크 전환을 알아야 하고, 메모리 뱅크가 메모리 공간에 어떻게 매핑되는지도 이해해야 함
일반 읽기 전용 메모리는 캐시 가능함. 다른 장치와 공유하지 않는 일반 RAM도 캐시 가능함. 메모리 매핑 IO는 캐시하면 안 됨
비디오 메모리처럼 다른 장치와 공유하지만 그 장치가 쓰지는 않는 RAM은 쓰기-통과 캐시와 전체 읽기 캐시가 가능함. 다른 장치가 쓸 수 있는 공유 RAM은 캐시하면 안 됨
- 이 페이지에는 50 MHz라고 되어 있음