🤖

HW高位合成ツールを使ってnand2tetrisのCPUを動かしてみる 5

に公開

の続き

目標は Pong を動かすこと

nand2tetris の hack CPU を動かすにあたってはやはり Pong を動かすことを目標にしたい。

しかし実現にあたって課題が2つ。

  • 画面表示をどうするか?
  • コントローラ入力をどうするか?

これらは ACRiルームをリモートで使用する (直接FPGAボードに触ることができない) ために生じる。 なお、ACRiルームで備えられているFPGAボード自体にはボタン入力やHDMI出力がある。

入出力はUART通信を介してホスト側のアプリで実装

そもそもHDMI出力などの回路をFPGA初心者の自分がいきなり操れるようになるとは思えない。色々検討するとFPGAボードにUSB-UART変換チップが載っていることがわかった。USBを介してホストとUARTでのシリアル通信ができるので、ここに独自のプロトコルを作ってホスト側のアプリでキー入力と画面出力を担うことにした。ホスト側アプリのざっくりとした仕様は以下とした。

  • CPUのリセット
  • プログラムROMコードのロード
  • プログラムの実行
  • 簡易デバッグ機能
  • キー入力
  • 画面出力

このアプリの開発はPythonを使うことにした。Claude3.5にBasicな仕様を伝えてアプリのコード作成を頼むと、Qtベースのほぼ思った通りのアプリができた。FPGAの設計側の進捗に合わせてホスト側のアプリも適宜Claudeに相談しながら修正していった。
なお、ローカルでは当初Windows on Mac を使っており、最終的にはUbuntuに移行。ACRiルームはLinuxなので、Python+Qtのコード修正なしでマルチ環境で動く凄さを実感できた。

次回へ続く。

Discussion