tranZPUter
åæžã
tranZPUter v1.0 ã®ãã¹ãäžãããã³ CP/M ãæèŒãã RFS v2.0 ã¢ããã°ã¬ãŒãã®ç»å Žã«äŒŽããtranZPUter ãæŽæ°ã㊠Z80 ã«è¿œå ã¡ã¢ãªãäžããããé«ãã¯ããã¯åšæ³¢æ°ã§åäœãããå¿ èŠãããããšãæããã«ãªããŸããããŸããå¶åŸ¡ IO ããã»ããµïŒFPGA ãã¡ããªãã¯äžã® ZPU Evo ãŸã㯠K64FïŒã«äŸåããã«ç¬ç«ããŠåäœã§ããããã«ããå¿ èŠããããŸããã
tranZPUter ã® v1.0 ã«ã¯èšèšäžã®å¶çŽããããççŽã«èšã£ãŠãããžã§ã¯ãã®å®æãå€§å¹ ã«å°é£ã«ããŠããŸãããäŸãã°ãBGAïŒBall Grid ArrayïŒIC ã®ã¯ãã ä»ãçµéšãäžè¶³ããŠãããããæ¬¡åçãšã㊠FPGA ãæ¢ã«ã¯ãã ä»ããããããªãã¡ã FPGA ããŒã CYC1000 ãéžæããŸããããã®ããã€ã¹ããã³åãµã€ãºã»å FPGA ALM èŠä»¶ã®ä»ã®éžæè¢ã¯ãã¹ãŠæ±çš I/O ãã³æ°ãäžè¶³ããŠããŸããããã®ããããã©ã€ã¹ããŒãã»ã¬ãžã¹ã¿ã©ãããçšãããã«ããã¬ã¯ã·ã³ã°ãå¿ èŠãšãªããŸãããKISSïŒKeep It Simple StupidïŒã·ã³ãã«ã«ä¿ãŠïŒïŒãšããååãé ã«æµ®ãã³ãŸããããã§ãã³ã³ã»ãããšèšèšãããã«é²ãããããäžæ©åŒã㊠CP/M èŠä»¶ãå®çŸããããã® Z80 åŽã®ããŒãºãšãå¶åŸ¡ IO ããã»ããµåŽã®ããŒãºãèŠçŽããŸããããã®åŸãå ã® tranZPUter ã«æ»ãåã« tranZPUter SW ãµããããžã§ã¯ãã§ã³ã³ã»ãããšèšèšãçºå±ãããèšèšã® v2.0 ãåéããŸããã
æŠèŠ
ãã匷åã§ä»£æ¿ãšãªã CPU ãšã¡ã¢ãªãæäŸããã ãã§ãªããFPGA ã¯æ¥ç¶ããã SD ã«ãŒãã䜿çšããŠãããããŒãã©ã€ããããŒããã©ã€ããªã©ãšããŠåäœããåŒã³åºãæã«ãããªã¡ã¢ãªããªãŒããŒã¬ã€ããããšã§ã¡ãã¥ãŒã·ã¹ãã ãæäŸããããšãã§ããŸãã
ãã®èšèšã¯ãŸã éçºäžã§ããç§ã¯åœåããã°ããåŸåãã«ããŠãã ZPU Evo SDRAM ã³ã³ãããŒã©ãŒãé²ããããã«éçºã忢ããŸãããSDRAM ã¯éèŠã§ããCYC1000 äžã® Cyclone 10LP ã¯éããã BRAM ããæã£ãŠãããããã£ãã·ã¥ãš IOCP ããŒãããŒããŒçšã«ããååã§ã¯ãããŸãããå€ãã®æ©èœããã¹ããããåè·¯å³/PCB ãäœæãããŸããããSDRAM ã³ã³ãããŒã©ãŒãåäœããããã«ãªã£ãä»ãVHDL ãããã«é²ããŠã¡ãã¥ãŒ/SD ãµãŒãã¹ãæäŸãã C/C++ ã³ãŒããéçºããã ãã§ãïŒZPU ã³ãŒãããŒã¹ã§ã¯æ¢ã«å®äºæžã¿ïŒã
FPGA ãœãªã¥ãŒã·ã§ã³ãšã㊠CYC1000 ãéžæããŸãããBGA ããã€ã¹ã®ã¯ãã ä»ãã«èªä¿¡ããªãããŸã US$30 ãšããäŸ¡æ Œã§è²»çšå¯Ÿå¹æãé«ãããã§ãããœãããŠã§ã¢æåã®æ¹ã«ã¯ãCYC1000 ã®ä»£ããã« Pi Zero W ãé¡äŒŒåïŒtranZPUter-SW ãµããããžã§ã¯ãã§ã¯ Cortex-M4 ARM ããŒã¹ã® K64F ã䜿çšïŒã䜿çšããããšã¯é£ãããããŸãããPCB ãšã€ã³ã¿ãŒãã§ãŒã¹åè·¯ã®åèšèšãå¿ èŠãªã ãã§ãã
ãã®èšèšã¯ Z80 ããã®å Žã§çœ®ãæãããããMZ80A ã«éå®ããããé©åãªãœãããŠã§ã¢ãããã°ä»»æã® Z80 ããŒã¹ã®ã³ã³ãã¥ãŒã¿ã«äœ¿çšã§ããŸãã
tranZPUter ã«ã€ããŠ
ç°ãªã CPU ãæäŸããã«ã¯ãVHDL ã§ãœããã³ã¢ CPU ã·ã°ãã«ããã®èšèšã®ã€ã³ã¿ãŒãã§ãŒã¹ãéã㊠MZ80A ãã¹ã«ãããã³ã°ããã ãã§ããããã°ã©ã ã¡ã¢ãªã¯ MZ80A äžã®ãã®ã§ããããé«é㪠SDRAM ã§ãæ§ããŸãããã€ãŸãããœããã³ã¢ CPU ã䜿çšããå ŽåãMZ80A ã®ã¡ã¢ãªã䜿çšããå®éã®å¿ èŠã¯ãããŸãããç§ã® SharpMZ ãšãã¥ã¬ãŒã¿ã§ã¯ãFPGA BRAM ã䜿çšã㊠112MHz ã§ Z80 ãå®è¡ããŠããŸããããã¹ãã§ã¯å°ãªããšã 128MHz ãç¶æå¯èœã§ããããšã瀺ãããŠããŸãããããã£ãŠã128MHz ã§åäœãã FPGA BRAM ãæã€ãœããã³ã¢ Z80 CPU 㯠MZ80A ããªãã§ã©ã«ã¢ã¯ã»ã¹æã®ã¿äœäžããŸãããCP/M ãããŒã¿ããŒã¹çšéã§ã¯ããã°ã©ã å®è¡ã 64 ååäžãããããéåžžã«æãŸãããšèšããŸãã
ã®ã£ã©ãªãŒã«ã¯çŸåšã®èšèšã®åçããããGitea ã«ã¢ããããŒãããããã¡ã€ã«ã¯æ¯èŒçå®å®ããŠããŸããWIP ãã¡ã€ã«ã¯åžžã«å€åããããã¢ããããŒãããŸããã
v1.0 ããŒããŠã§ã¢
ãã®èšèšã§ã¯ããã¹ãã¹ã¿ãªã³ã°ã¯åæ§ã®ç®çã§äœ¿çšãããŠãããZ80 ãã¹ãå¶åŸ¡ããŠã¡ã€ã³ã¡ã¢ãªãš SD ã«ãŒãéããŸã㯠I/O ããã»ããµãšãããªè¡šç€ºãããã¡éã§ã¡ãã¥ãŒè¡šç€ºã®ããã«ããŒã¿ã転éããŸãããŸãããœããããã»ããµãç©çç㪠Z80 ãå®å šã«ã¢ã€ãã«ç¶æ ã«ããŠã¡ã€ã³ CPU ãšããŠæ©èœããå Žåã«ã䜿çšãããŸããã€ãŸãããœãã T-80 ZPU CPU ã䜿çšããããšã§ãããŒã«ã«ã¡ã¢ãªå ã® 128MHz ã§ã¢ããªã±ãŒã·ã§ã³ãåŠçããªããããã¹ããã·ã³ã® I/O ãšãããªãããã¡ãžã®ã¢ã¯ã»ã¹æã®ã¿é床ãèœãšãããšãã§ããŸãã
èšèšã®äžå¿ã¯ãå ã® Z80 ãåšã«ãŒãã«æã¡äžããå¿ èŠã«å¿ããŠå¶åŸ¡ã§ããããã«ããã€ãã®ä¿¡å·ãåé ç·ããããšã§ããèšèšã®ã³ã¢ã¯ FPGA ã§ãTrenz Electronics 補ã®ããéçºããŒãäžã® Altera Cyclone 10LP ã§ãããã㯠Raspberry Pi ã Teensy 3.6 ã«ç°¡åã«çœ®ãæããããŸããããã®ãããžã§ã¯ãã®ç®ç㯠VHDL ã䜿çšã㊠FPGA ã§é»åããŒããŠã§ã¢ãèšèšããå¥ãããžã§ã¯ãã§éçºããŠãã ZPU ããã»ããµã掻çšããããšã§ãã
Trenz Electronic éçºããŒãã®éžæã«ããèšèšã«ããã€ãã®å¶çŽãçããŸããããã㯠I/O æ©èœãéãããŠãããšããç¹ã§ãåããµã€ãºãšæ©èœãæã€ä»ã®ããªãã«ã FPGA éçºããŒãã®éžæè¢ã¯ããã»ã©å€ããªãããããžã§ã¯ãéå§ãã FPGA ãçŽæ¥èšèšã«çµã¿èŸŒãããšã¯ãBGAïŒBall Grid ArrayïŒããã±ãŒãžã®ã¯ãã ä»ãçµéšãã»ãŒãŒãïŒæ¢åã®ãããããªããŒã«ããããšã¯ãããŸããããããã¯åäœããèšèšã§ããïŒïŒã ã£ãããããªã¹ã¯ãé«ããããšå€æããŸããã
I/O æ©èœãéãããŠããããã1:1 ã¢ãŒãã§ã¯ãªãã¢ãã¬ã¹ã¢ãŒãã§ 2 ã€ã® 16 ããããã©ã€ã¹ããŒããããã¡ã©ããã䜿çšããããåŸãŸããã§ãããã€ãŸããFPGA ããåºåããã Z80 ããŒã¿ãã¢ãã¬ã¹ãããã³å¶åŸ¡ã©ã€ã³ã¯ãäžåºŠã« 1 ã¯ãŒããã€ãã»ãããããå¿ èŠããããŸããããŒã¿ãã©ããã«æžã蟌ã¿ãã¢ãã¬ã¹ãã©ããã«æžã蟌ã¿ãå¶åŸ¡ä¿¡å·ãã©ããã«æžã蟌ããšãã£ãæé ãå¿ èŠã§ããããã«ãã FPGA ã Z80 ãã¹ããå¶åŸ¡ã§ããé床ãäœäžãïŒ100MHz ã® FPGA 㯠50 åã®æäœãå®è¡ããŠã 2MHz ã®å ã®ãã¹é床ã«åãããããšãã§ããŸããïŒãVHDL ã® FSM ãå¿ èŠã«ãªãããããžãã¯ãè€éã«ãªããŸãã
ã©ãããå¶åŸ¡ããä¿¡å·èªäœããFPGA ããŒãã® I/O æ©èœäžè¶³ã®ãããçŽæ¥ã§ã¯ãªãã¢ãã¬ã¹ã¢ãŒãã§æžã蟌ãå¿ èŠããããããã«è€éã«ãªã£ãŠããŸããäžèšã®åè·¯å³ã§ã¯ IC U6 ãš U8 ãå ±éã® 16 ãããããŒã¿ãã¹ïŒã©ãããšå ±æïŒãä»ããŠæžã蟌ãŸããFPGA ããã®åäžåºåä¿¡å·ã§ã¯ããã¯ãããããšãããããŸããé å»¶ã©ã€ã³ã䜿çšãããŠãããCYC_CTL/RST ããã€ã«ãªããšã©ãããžã®æžã蟌ã¿ãè¡ãããŸããããã¯ãã¹ã¿ãŒãªã»ããã«æ¥ç¶ãããåãä¿¡å·ããã€ã«ãªã£ãŠããçŽ 8ns åŸã«ã©ããã«å°éããããŒã¿ãã¯ããã¯ã€ã³ããŸããCYC_CTL/RST ãããŒã«ãªããšã©ããã¯ãªã»ãããããããã§ 16 ãããã©ãã U5 ãš U9 ãå¶åŸ¡ããã®ã«ååã§ãã16 ãããã¯ãŒãã U5 ã«æžã蟌ãæé ã¯æ¬¡ã®ãšããã§ãïŒ
CYC_CTL/RST ãããŒã«èšå®
CYC_D0:7 ã 0x02 ã«èšå®ïŒADDR_LE ã¢ã¯ãã£ããããŒïŒ
CYC_CTL/RST ããã€ã«èšå®ãCYC_D0:7 ã®ããŒã¿ã U6/U8 ã«ã©ãããããADDR_LE ãã¢ã¯ãã£ãã«ãªã
CYC_D0:15 ã®ããŒã¿ã U5 ã¬ãžã¹ã¿ã«è»¢éãããïŒADDR_LE ã®ç«ã¡äžãããšããžã§ã©ããïŒ
Z80 BUS ã«æž¡ããã CYC_D0:15 ã«å¿
èŠãªããŒã¿ãèšå®
CYC_CTL/RST ãããŒã«èšå®ãADDR_LE ãéã¢ã¯ãã£ãïŒãã€ïŒã«ãªããCYC_D0:15 ã®ããŒã¿ã U5 ã«ã©ããããã
v1.0 åè·¯å³

FPGA FSM ã埮調æŽããããšãZ80 ãã¹ãžã®å®éã®æžã蟌ã¿ãšèªã¿åãã¯éæã«ãªããŸãããTrenz éçºããŒãã® I/O äžè¶³ã®ãããåè¿°ã®ãšããé床ã«è€éã«ãªã£ãŠããŸãã
åŸæžã
FPGA ããŒã¹ã® tranZPUter v1.0 ã®äœæ¥ã2ã€ã®çç±ã§äžæããŸããïŒ
1. CP/M ããã®ä»ã®ãœãããŠã§ã¢ããµããŒãããããã« Z80 åè·¯ã®æ©èœåŒ·åãå¿
èŠã ã£ãã
2. Trenz CYC1000 ã®äœ¿çšã¯éããã I/O ãªãœãŒã¹ã®ããã«èšèšãé床ã«è€éã«ããæªãéžæã ã£ãã
tranZPUter ã®äœæ¥ã¯ tranZPUter SWïŒãœãããŠã§ã¢ïŒãšããŠç¶ç¶ãããŠãããèšèšããŠããŠã¯æå³ããã tranZPUter ã® v2.0 ã«ãã£ãŒãããã¯ãããäºå®ã§ãã
v2.0 ããŒããŠã§ã¢
ãã®ç®çã®ããã«ãã³ã¹ãåæžã®ããææ°äžä»£ã§ã¯ãªã髿§èœ FPGAïŒ110K ããžãã¯ãšã¬ã¡ã³ããš 500KB è¶ ã® BRAM ãæäŸïŒã調éããZPU EvoãtranZPUter SWãããã³ FPGA ããŒã¹ãããªã¢ãžã¥ãŒã«ã®äœæã§åŸãç¥èãããšã«èšèšãéå§ããŸããã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãŸã é²è¡äžã®èšèšã®æŠèŠã説æããŸãã
v2.0 Z80 ã¢ããã°ã¬ãŒãåè·¯å³

v2.0 FPGA åè·¯å³

ããŒãžã§ã³ 2.0 㯠v1.0 ãã倧ããé£èºããCYC1000 ããŒãã«ãã Cyclone 10 LP ã®ä»£ããã«ãã¯ããã«å€§åã® BGA FPGA ã䜿çšããŠããŸãããã® Cyclone IV CGX75 ããã€ã¹ã¯ 110K ããžãã¯ãšã¬ã¡ã³ããš 500KB è¶ ã® BRAM ãæäŸããå€ãã®å¯èœæ§ãå®çŸããŸãã
v2.0 FPGA RAM åè·¯å³

ããŒãžã§ã³ 2.0 ã§ã¯ ZPU Evo èšèšãå©çšããzOS ãšãã®ã¢ããªã±ãŒã·ã§ã³ã®å©çšå¯èœãªã¡ã¢ãªã«ã€ã㊠K64F ãšåçã®ã¬ãã«ãç¶æããããã«è¿œå ã¡ã¢ãªãå¿ èŠã§ããéžæãããã¡ã¢ãªã¯ 10ns ã¹ã¿ãã£ã㯠RAM ã§ãL2 ãã£ãã·ã¥ãªãã§ ZPU ãå®è¡ã§ããŸãã
v2.0 黿ºããã³ ãã«ãããªã³ã°åè·¯å³


ãã倧ã㪠FPGA ã䜿çšããããšã§é»æºãžã®èŠæ±ãé«ãŸããŸããç¹ã«ãã«ãããªã³ã°ã¯éèŠã§ããããã®ããå€ãã®ãã«ãããªã³ã°ã³ã³ãã³ãµãå¿ èŠã§ãããã㯠Cyclone IV åãã® Altera PDN Design Tool v1.1 ã«æºæ ããŠããŸãã
v2.0 PCB
PCB ã®ããŒãžã§ã³ 2.0 㯠tranZPUterSW ã®éçºãåºã«ãèšèšãããªãã³ã³ãã¯ãã«ããŠããŸãã
以äžã®ããŒãã¯èšèšäžã® PCB ã® Kicad ç»åã§ãããã®ããŒãã¯ãŸã 宿ããŠããŸãããäœæ¥äžã«æ°ããã¢ã€ãã¢ãæµ®ãã³ãv2.1 ã®èšèšãå è¡ããŠé²ãå§ããããã§ããv2.0 ã宿ãããŠè£œé ãããã©ãã㯠v2.1 ã®èšèšæ¬¡ç¬¬ã§ããããã¯äž»ã« tranZPUter ãããžã§ã¯ãã®éçºæ®µéã®åèãšããŠæ²èŒããŠããŸãã


ã¯ã¬ãžãã
ã©ã€ã»ã³ã¹
GNU Public License v3
ãœãŒã¹ãã¡ã€ã«ã¯æçšã§ããããšãæåŸ ããŠé åžãããŠããŸããããããªãä¿èšŒããããŸãããååæ§ãç¹å®ã®ç®çãžã®é©åæ§ã®é»ç€ºçãªä¿èšŒãããæäŸããŸããã詳现㯠GNU äžè¬å ¬è¡å©çšèš±è«Ÿæžãåç §ããŠãã ããã
ãã®ããã°ã©ã ãšãšãã« GNU äžè¬å ¬è¡å©çšèš±è«Ÿæžã®ã³ããŒãåãåã£ãŠããã¯ãã§ããåãåã£ãŠããªãå Žå㯠http://www.gnu.org/licenses/ ãåç §ããŠãã ããã