Tang Nano 9KというFPGAボードが流行っているようなので買ってみました。秋月で税込2480円。Aliだともう少し安いようですが、ケチるほどの値段ではありません。機能を考えたら何でこんなに安いんだろうと不思議に思うぐらいの安さです。開発環境もタダだし。これ20年前なら何百万円とかのレベルなのではないだろうか。
実はFPGAを使うのは20年以上(ほぼ30年?)ぶりで、完全に浦島太郎状態です。ハードウェア記述言語は、修論でVerilogを、会社に入ってからVHDLを少しだけかじった程度なので完全に忘れています。というわけなので、リハビリから始めることにしました。
まずはインターフェース2022年12月号の付録を見ながら開発環境をインストール。書き込み用ツールは別途用意するとありましたが、私の環境ではそのツールはボードをうまく認識してくれず、メーカー(Gowin)が配布してるEDAのプログラマーで問題無く書き込めたのでそちらを使うことにしました。
Lチカも問題無く動いたので、次は何を試してみようかと調べてみたところ、4KBASICを実装している人がいたので真似してみることにしました。Twitterではスペースインベーダーや風船割りを実装している人やVectrexを実装している人もいるので、将来的にはそのぐらいの物を作ってみたいと思っていますが、とりあえず簡単そうなところから始めてみます。
参考にしたブログがこちら。
light8080というCPUコア
を使って、tangnanoで動かしたということのようです。
github(tang-nano-9K/l80soc_4KBAS at master · hi631/tang-nano-9K)にコードを置いてくれていたのでダウンロードしてビルドしてみたところ、ちゃんとBASICが起動しました。
しかし、マンデルブロ集合のベンチマークを走らせてみたところうまく動きません。原因を調べたところ、どうやらIF文がfalseになったときに止まってしまうみたい。ここをスタート地点にしてデバッグするのはあまり気が進まなかったので、オリジナルのlight8080コアをスタート地点にしてインストールし直すことにしました。
上記light8080のgithubのREADME.mdによると、
- このプロジェクトは以前はOpenCores(https://opencores.org/projects/light8080)にあった。
- Verilog版はまだGitHubに移していない
- Altair 4K BasicのデモもGitHubに移していない
ということだったので、OpenCoresのアカウントを作成して古いプロジェクト一式をダウンロードしてみましたが、どうやら別の人がGitHubに置いているこれ
GitHub - ofenerci/light8080: Lightweight 8080 compatible coreと同じもののようでした。
Verilog版とVHDL版を見比べてみたところVHDL版の方がわかりやすかったのと、オリジナルがVHDLの方だということもあるので、VHDL版で始めることにしました。
ここから紆余曲折があってデバッグに3日ぐらいかかったのですが、出来上がったのがこれ。
コア部分はオリジナルのコードをそのまま使用、mcuフォルダにあった周辺部分のコードを改変して、メモリ空間をSBC8080っぽくしています。主な修正内容はREADME.mdに書いた通り。
電脳伝説さんのsbc8080_datapack(下記サイトから入手)に入っているBASICやモニターのプログラムが動くことを確認しました。
マンデルブロ集合のベンチマークは70秒。2MHzの8080実機だと10分ぐらいのようなので、8.5倍速いようです。ちなみにTang Nano 9Kのクロックは27MHzです。
実はFPGAを使うのは20年以上(ほぼ30年?)ぶりで、完全に浦島太郎状態です。ハードウェア記述言語は、修論でVerilogを、会社に入ってからVHDLを少しだけかじった程度なので完全に忘れています。というわけなので、リハビリから始めることにしました。
まずはインターフェース2022年12月号の付録を見ながら開発環境をインストール。書き込み用ツールは別途用意するとありましたが、私の環境ではそのツールはボードをうまく認識してくれず、メーカー(Gowin)が配布してるEDAのプログラマーで問題無く書き込めたのでそちらを使うことにしました。
Lチカも問題無く動いたので、次は何を試してみようかと調べてみたところ、4KBASICを実装している人がいたので真似してみることにしました。Twitterではスペースインベーダーや風船割りを実装している人やVectrexを実装している人もいるので、将来的にはそのぐらいの物を作ってみたいと思っていますが、とりあえず簡単そうなところから始めてみます。
参考にしたブログがこちら。
light8080というCPUコア
を使って、tangnanoで動かしたということのようです。
github(tang-nano-9K/l80soc_4KBAS at master · hi631/tang-nano-9K)にコードを置いてくれていたのでダウンロードしてビルドしてみたところ、ちゃんとBASICが起動しました。
しかし、マンデルブロ集合のベンチマークを走らせてみたところうまく動きません。原因を調べたところ、どうやらIF文がfalseになったときに止まってしまうみたい。ここをスタート地点にしてデバッグするのはあまり気が進まなかったので、オリジナルのlight8080コアをスタート地点にしてインストールし直すことにしました。
上記light8080のgithubのREADME.mdによると、
- このプロジェクトは以前はOpenCores(https://opencores.org/projects/light8080)にあった。
- Verilog版はまだGitHubに移していない
- Altair 4K BasicのデモもGitHubに移していない
ということだったので、OpenCoresのアカウントを作成して古いプロジェクト一式をダウンロードしてみましたが、どうやら別の人がGitHubに置いているこれ
GitHub - ofenerci/light8080: Lightweight 8080 compatible coreと同じもののようでした。
Verilog版とVHDL版を見比べてみたところVHDL版の方がわかりやすかったのと、オリジナルがVHDLの方だということもあるので、VHDL版で始めることにしました。
ここから紆余曲折があってデバッグに3日ぐらいかかったのですが、出来上がったのがこれ。
コア部分はオリジナルのコードをそのまま使用、mcuフォルダにあった周辺部分のコードを改変して、メモリ空間をSBC8080っぽくしています。主な修正内容はREADME.mdに書いた通り。
電脳伝説さんのsbc8080_datapack(下記サイトから入手)に入っているBASICやモニターのプログラムが動くことを確認しました。
マンデルブロ集合のベンチマークは70秒。2MHzの8080実機だと10分ぐらいのようなので、8.5倍速いようです。ちなみにTang Nano 9Kのクロックは27MHzです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます