Jelly FPGA向け MIPS-Iサブセット |
2017/05/02 更新
重要なお知らせ |
現在このページの更新は止まっており、最新情報はRyuzのブログの方にあります。 最新の開発バージョンは github(https://github.com/ryuz/jelly.git) の方にあります。 当初ソフトコアCPUコアの作成がメインでしたが、ZynqのようなハードコアCPU搭載環境も増えてきたので、周辺エンジン含めて少し異なった方向へ進化中です。 |
開発情報 |
HOSの開発中次バージョンHOS-V4 Advanceにあわせて、FPGA向けに MIPS-I 命令のサブセットを実行できるプロセッサをVerilog 2001で開発中です。 HOS-V4a にて、MMCカード(SDカード)のFATファイルシステムのマウントもできるようになり、シンプルなキャッシュも動き始め、そこそこ使えるレベルが見え始めてきました。 どうもMIPS1から20年経過しているっぽいので、Ver1.08 でLWL,LWR,SWL,SWR命令も記述してみました。 将来的な展望として、Jelly単品での進化はもちろん、HOSのSMP実験やハードウェアアクセラレート(シリコンOS化)などのハードウェア方面への進化に応用できればと考えている次第です。 newlibをお使いの場合 |
jellyの特徴 |
|
構造説明 |
大雑把なCPUコアの説明図です。 ![]() 典型的な教科書どおり5段パイプラインのアーキテクチャで、コア部はハーバードアーキテクチャ(命令バスとデータバスが別)にしています。 また、内蔵でデバッグユニットも用意しており、外部からCPUコアを直接操作可能です。 フォワーディングも入っており、殆どの実行ユニットをEXステージに固めていますし、MIPS-Iではロード命令の次命令ではロードしたレジスタは利用禁止ですので、特にストルール要因はありません(なのでバスビジーなどでインターロックが必要なケースではプロセッサ全体をとめてしまい、機構をシンプル化しています)。 その他、FPGA的な工夫点としては、フォワーディングのマルチプレクサがFPGA的に苦手なので、特に32bit乗算でクリティカルパスとして現れます。そこで乗算命令の時でなく、結果の読み出し命令(mfhi, mflo)で乗算するようにして、見かけ上、乗算は1サイクルで実現できました(除算はさすがに32サイクルのインターロックがかかりますが)。 デバッグユニットのようなボトルネックを挟んで Spartan-3のスピードグレード-4で50MHzで動いていますのでまあまあといったところではないでしょうか? 次にCPUトップの説明図です。 ![]() CPUコアの外に、密結合メモリ(TCM)とキャッシュを搭載しています。TCMとキャッシュはオプションで切り離しも可能です。 FPGAの内蔵デュアルポートRAMを行かして、2つのポートを命令/データに割り当てているのでロス無くユニファイドキャッシュが実装できており、命令/データでのキャッシュコヒーレンシの問題も出ません。 密結合メモリ(TCM)もFPGAの内蔵デュアルポートRAMのおかげで、命令/データバスの両方からアクセスできます 各種バスにはOPENCORES.ORGさんのwishboneバスと互換性があるように作ったつもりです(単純なシングルアクセスしか使ってませんが)。 次に大雑把なシステムの説明図です。 ![]()
今回のボードにはRS-232Cが2ポートあるのをいいことに、デバッグポートはUART経由で制御するようにしています。パソコン側はUSBシリアルなどを買ってきて、増設すればどうにでもなります。ひとまず、プログラムダウンロードやレジスタ制御、ハードウェアブレークなど、将来デバッガ機能を一通り作れる機能を準備しています。 ペリフェラルバスには各種周辺回路をつないでいます。IRC(割り込みコントローラ)はITRON屋らしく、多重割り込みや優先度設定が豊富にできるように工夫しています。本当はITRONのAPIをそのまま被せたかったのですが、回路的に無謀なのでそれなりにソフトウェア任せなところもあります。おいおい充実させていきます。 |
開発環境について |
ハードウェア環境開発ボードにはメインとしてXilinxさんのSpartan-3e Starter Kitを使っています。今だとストロベリーリナックスさんのココとかで個人でも通販で入手可能なようです。ソフトウェア環境ザイリンクスさんの ISE WebPack を使っています(現在のバージョンは 11.3)。C言語コンパイラは gcc のクロスコンパイラを cygwin 上で構築して使っています。swl,swr,lwl,lwrとかが使えないのでそこだけ気をつければ何とかなりそうです。 |
参考にさせていただいたページ | ||
トップに戻る |