FPGAでCPUを実装して、テトリスを動かした

先に断っておくが、以前のブログは残してあるというか放置してある。単純に新しいサーバを借りたので、以前のブログから移ったので放置状態になっているだけだ。おそらく更新することはないので、向こうは気にしなくて構わない。

また、今回の記事では自作CPUを作成したことについて話すつもりだが、私は決してハードウェア設計について詳しいわけでも何でもない。むしろ今回作成したものが初めてといっていいだろう。したがってハードウェア設計に通じた人であれば、眉唾物な内容である可能性がある。よって、ここで書いている内容を絶対のものと信じず、むしろ疑ってかかってほしい。ここの内容に騙されたといわれても、私は責任をとれない。

さて、私の大学では研修Aと呼ばれる、各研究室で課題を設定される必修単位がある。私の研究室では、この研修の半分の時間を使ってCPUを作成し、もう半分は好きなものをFPGAで作るということになっている。後半の自由課題は前半で作ったCPUと関連させる必要はない。したがって比較的自由に好きなものを作れるのだが、私は前半の課題で設計したCPUを強化させることとした。

そもそも、前半で作成するCPUはとてもCPUと呼べるような代物ではない。具体的にはパタヘネに掲載されているシングルサイクルプロセッサからパイプラインまでの内容をFPGAで実装するという内容なので、ほとんどの命令はサポートしないし、ピン入出力さえ行うことができないお粗末なものである。例外もないので割り込み処理もできず、仮想メモリもサポートしないのでOSすら乗らない。しかし、最小限の骨組みだけでも作成することで、CPUの動作の基本原理を学ぼうというところにその趣旨があるのだろう。実際、パタヘネを参考にすれば、必要なデータパスはすべて掲載されているので、私がわざわざここで説明しなくても誰でも作ることができる。おそらく最大の問題はむしろFPGAのボードを手に入れるほうではないだろうか。

しかし、私はとてもじゃないがそんなのでは満足できなかった。せっかくCPUを作るなら最低限OSの動作保証をするべきだろうということで、そこからOSが動作するのに必要な機能をどんどん実装していくことにした。最終的な目標はOS動作だが、研修Aの時間で作ることができなかったため、続きは今後個人的にやっていくこととした。したがって現段階ではCPUの動作のみしか確認していない。とりあえずデモとしてテトリスを作成し、これをgccでクロスコンパイルしたものを動作させた結果の動画を掲載する。

画面のすぐ前にあるキーボードの隣にあるのがFPGA(DE0-CV)であり、これに液晶と手前のキーボードが接続されている。今回参考したアーキテクチャはパタヘネに合わせてMIPSだが、その中でも簡単なものとしてR3000プロセッサという、プレイステーションにも搭載されたものをまねて作成した。せっかく作ったのでソースコードを上げようかと思ったが、とりあえず中身があまりきれいではないので、一度全体を作り直そうかと思っているところである。でき次第アップロードしようかと思っている。

参考にした文献を一応挙げておくと、

これが和書としては詳しい。ただし古い本であるので、もしかしたら手に入れるのが難しいかもしれない。と思ったらAmazonには中古が大量にあるようだ。ちなみに私は大学の図書館で手に入れたので購入していない。

また

MIPS32™ Architecture For Programmers Volume I: Introduction to the MIPS32™Architecture

でグーグルで検索してみると、いろいろpdfが出てくるだろう。これらを参考にすればMIPSについてはずいぶんな情報を得られるはずである。もちろんパタヘネも役立つはずである。特にパタヘネの命令表は非常に見やすく便利である。

まだまだFPGAが高価なためか、ネット上にはFPGAにまつわる情報がほかの組み込み系(例えばマイコンで自作するといったような)の話題と比べると少ないように感じる。今後技術的な内容については、ソースコードを直していく際に触れていく予定なので、それがそれらに対する一助になれば幸いである(といっても私のやる気がなくなればそれで終わってしまうわけだがw)。

続き書きました.

FPGAでCPUを実装する(1)

内容についてどう思いますか?
  • いいね (7)
  • だめ (2)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA