火曜日, 1月 15, 2013

レジスタレスアーキテクチャとは

レジスタレスアーキテクチャとは、文字通りレジスタを省略したマイクロプロセッサアーキテクチャです。

とはいえ、レジスタが全く無いプロセッサでは何もできないので、実際には必要最小限のレジスタを持ち、さらにメインメモリを汎用レジスタとしても利用できるプロセッサということになります。

RISC出現以前の古典的なプロセッサでは、こうしたメインメモリをレジスタの代わりとして利用できる形式のものがよく見られました。その中でも特に有名なのは、Apple II初代ファミコンで使われた8ビットCPUの6502です。6502はプロセッサ内部のレジスタが少ない代わりに、メインメモリの0番地から255番地までの256バイトの領域を、ゼロページとして事実上汎用レジスタのように利用可能であるという特徴がありました。この当時はCPUクロックも1~2MHz程度で、プロセッサ内部のレジスタと外部のメインメモリの速度差があまりないことから、こういった設計もアリでした。

現在の高性能プロセッサは内部ではGHz単位で動作しますので、外部メモリとの速度差を埋めるために大量のレジスタやキャッシュメモリが欠かせません。しかし、FPGAをメインメモリとプロセッサが同居するマイクロコントローラとして利用する場合には、少し事情が変わってきます。この構成では外部にメモリを接続しなくてもよい代わりに、貴重な内部メモリ資源をレジスタやメインメモリに振り分けなければならないため、あまり大量のレジスタを持つとそれだけメインメモリを圧迫してしまうことになります。そして、レジスタとメインメモリは結局同じ内部メモリを使うことになるので、レジスタによるメインメモリアクセスの削減は、もともとあまり意味がないわけです。

ということで、FPGA内部の埋め込みメモリを、全てメインメモリとして利用可能であるのが、このアーキテクチャの第一の意義であるといえます。

そして、このアーキテクチャのもう一つの重要な意義は、マルチコア化にあります。マルチコアとはマルチプロセッサの一形態で、大まかにいえば、一つのICパッケージ内に複数のプロセッサを詰め込んだものです。昔はICの実装密度が低く、プロセッサが別々のパッケージに分かれているのが普通でした。しかし、プロセッサの信号は本数が多い上に高速で、その分基板設計は大変でした。ICの実装密度が上がるにつれてマルチコア化が可能となり、コンパクトな上に基板設計が楽なので、今ではほとんどのマルチプロセッサがマルチコアとなりました。

高速な信号を基板上に出した途端、素人にはとても手の出せないものになりますが、FPGA内部であれば、せいぜい設計ツールとの格闘でなんとかなります。マルチコアプロセッサとメインメモリを同一のFPGA内に収めれば、あとはハードウェア記述言語で書ける世界なので、これが素人がマルチコアを設計するための、現状ではほぼ唯一の手段となります。ただし、そのためには一つのFPGAパッケージ内に収まるだけの、(常識的にはありえない)コンパクトな回路でマルチコアプロセッサを実現する必要があります。レジスタレスアーキテクチャは、そのための設計論でもあります。

(つづく)