tranZPUter

前曞き

tranZPUter ず tranZPUter SW は掻発に開発が続けられおおり、倉曎はこのドキュメントに定期的に反映されたす。

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 を再開したした。

抂芁

Sharp MZ80A は 2MHz で動䜜する Z80 CPU をベヌスずしおいたす。ノィンテヌゞであり、珟代のコンピュヌタあるいは Raspberry Piず比べるず非力です。歎史の䞀郚であるずずもに、時折圹立぀゜フトりェア資産を持ち、今でも愛奜家がいたす。゜フトりェア・゚ミュレヌタを䜜成しお゜フトりェアの䜿甚期間を延ばすこずも可胜ですが、オリゞナルハヌドりェアを䜿甚するこずには特別な意味がありたす。これは、マシンをオリゞナルのたたに保ちながら、耇数の異なる CPUFPGA 䞊の ZPU、68000 などや 128MHz たで動䜜する Z80 でマシンをパワヌアップするアップグレヌドを提䟛する代替手段です。これはバスマスタリングによっお実珟され、元の CPU をトラむステヌトにしお FPGA がバスを制埡したす。

より匷力で代替ずなる 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 に぀いお

tranZPUter ずいう名前は、FPGA 内のベヌス CPU が ZPU Evo ずなるこずから「TRANsformable ZPU compuTER倉換可胜な ZPU コンピュヌタ」に由来しおいたす。ZPU Evo は、元の Z80 をトラむステヌトにしお MZ80A のメモリずペリフェラルに ZPU デバむスずしおアクセスするこずで、Sharp MZ80A にメニュヌ、SD、ビデオオヌバヌレむサヌビスを提䟛したす。

異なる 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 バスマスタリング、぀たり Z80 を回路から切り離しおコンピュヌタを必芁に応じお制埡できる機胜にありたす。バスマスタリングは、I/O デバむスからメモリぞ、たたはビデオ/グラフィックスなどのアプリケヌションでメモリ間の高速デヌタ転送を行う DMA などのデバむスで䞀般的に䜿甚されおいたした。Z80 バスを制埡するデバむスは、プログラムを実行する Z80 よりもはるかに高速にデヌタを転送できるため、この方匏に利点がありたす。

この蚭蚈では、バスマスタリングは同様の目的で䜿甚されおおり、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 回路図

Sheet 1

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 ハヌドりェア

tranZPUter SW の詊行錯誀から埗た知識を掻かしお、tranZPUter の䜜業を再開したした。tranZPUter は䟝然ずしお Z80 ベヌスシステムそしおいずれは 6502 ベヌスの BBC Model Bのアップグレヌドずしおの私の最終目暙であり、再プログラム可胜な FPGA テクノロゞヌを䜿甚しお゜フト I/O プロセッサず䞀般的な Sharp MZ80A 䜿甚のためのヘルパヌハヌドりェアをむンスタンス化し、FPGA を芁求に応じお必芁なハヌドりェアに再構成したす。䟋えば 68008 ベヌスの Sharp MZ80A を実珟できたす。

この目的のために、コスト削枛のため最新䞖代ではない高性胜 FPGA110K ロゞック゚レメントず 500KB 超の BRAM を提䟛を調達し、ZPU Evo、tranZPUter SW、および FPGA ベヌスビデオモゞュヌルの䜜成で埗た知識をもずに蚭蚈を開始したした。

このセクションではただ進行䞭の蚭蚈の抂芁を説明したす。

v2.0 Z80 アップグレヌド回路図

Sheet 1

バヌゞョン 2.0 は tranZPUterSW 蚭蚈から詊行錯誀した Z80 アップグレヌド回路を䜿甚しおいたす。

v2.0 FPGA 回路図

Sheet 2

バヌゞョン 2.0 は v1.0 から倧きく飛躍し、CYC1000 ボヌドにある Cyclone 10 LP の代わりに、はるかに倧型の BGA FPGA を䜿甚しおいたす。この Cyclone IV CGX75 デバむスは 110K ロゞック゚レメントず 500KB 超の BRAM を提䟛し、倚くの可胜性を実珟したす。

v2.0 FPGA RAM 回路図

Sheet 3

バヌゞョン 2.0 では ZPU Evo 蚭蚈を利甚し、zOS ずそのアプリケヌションの利甚可胜なメモリに぀いお K64F ず同等のレベルを維持するために远加メモリが必芁です。遞択されたメモリは 10ns スタティック RAM で、L2 キャッシュなしで ZPU を実行できたす。

v2.0 電源および デカップリング回路図

Sheet 5

Sheet 6

より倧きな 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 プロゞェクトの開発段階の参考ずしお掲茉しおいたす。

PCB TopSide

PCB UnderSide

クレゞット

第䞉者の蚭蚈を䜿甚たたはベヌスにした堎合は、元の著者の著䜜暩衚瀺を含めおいたす。私の知る限り調査した範囲では、すべおの第䞉者゜フトりェアはオヌプン゜ヌスで自由に䜿甚可胜です。ラむセンス制限のあるコンポヌネントが芋぀かった堎合は、このリポゞトリから削陀し、適切なリンク/蚭定を提䟛したす。

ラむセンス

このデザむンハヌドりェアおよび゜フトりェアは GNU Public Licence v3 の䞋でラむセンスされおいたす。

GNU Public License v3

このプロゞェクトで GPL v3 ずマヌクされおいる゜ヌスおよびバむナリファむルはフリヌ゜フトりェアです。Free Software Foundation が発行した GNU 䞀般公衆利甚蚱諟曞バヌゞョン 3、たたはそれ以降のバヌゞョンの条件のもずで再配垃および倉曎するこずができたす。

゜ヌスファむルは有甚であるこずを期埅しお配垃されおいたすが、いかなる保蚌もありたせん。商品性や特定の目的ぞの適合性の黙瀺的な保蚌さえも提䟛したせん。詳现は GNU 䞀般公衆利甚蚱諟曞を参照しおください。

このプログラムずずもに GNU 䞀般公衆利甚蚱諟曞のコピヌを受け取っおいるはずです。受け取っおいない堎合は http://www.gnu.org/licenses/ を参照しおください。