e500mc

さてそのe500mcはどうe500コアから変化したか、というあたりをもう少し説明したい。基本的に言えば、e500mcコアはe500コアをベースに、マルチコアの対応を施したものという事になる。ただe500そのものもDual Coreには対応しているわけで、「では何が拡張されているのか?」という話になる。見た目にはInterconnectとのI/F、それとL2キャッシュの持ち方が変わった(というか、L2キャッシュをオンコアで搭載した)事が大きな違いだが、細かく見るともう少し異なった話となる。

ベースとなったのは、e500v2ということらしい。e500v2は昨年のレポートでも触れたが、基本的にはe500のマイナーアップデートといったところである。

それにしても、こうなってくるとAltivecは何だったのか? ということになる。AppleでもRosetta(Intel Macの上で動作する、PowerPC Emulation)はAltiVecをサポートしておらず、現時点でまともにサポートされている環境はIBMのCell関連のみ。もっともこちらはVMX(AltiVec互換のIBMのVector命令セット)を128bitに拡張しており、AltiVecそのものではなくなっている(し、CellでSPEを使わずにAltiVecを使うのもちょっと変ではある)。結果、FreescaleにおけるAltivecの扱いは完全に「要らない子」でちょっとかわいそうな気も

基本的にはPowerISA 2.0準拠を目指したもので、User ApplicationはPowerPC Classicと互換性があるが、OSなどのSystem Programについては、MMUの構造を始めとして随所に変更点があるので、かなりの変更が必要となっている。これをベースに、PowerISA 2.06 Embedded準拠とし、CoreNet Fabricをサポートしたのがe500mcということになる。

内部構造は以下のような形で、従来のe500コアとの違いはL2キャッシュとInterconnectということになる。

L2は最大1MBまでと書いてあるが、技術的には4MBまで可能だそうだ。それだけのTag/Status Arrayを拡張できる余地が残してあるということだろう。InterconnectはCoreNetに繋がるCoreLinkと呼ばれるI/Fに取って代わられた。データ幅は128bitと従来から倍増している

もう少し細かな違いはというと、こちらだ。

BTBがソフトウェアで制御できるというあたりが個人的にはむしろ驚きであった。どんな用途を想定してこうしたインプリメントにしたのかは不明だが、削除されるところを見ると殆ど使われなかったのであろう

汎用レジスタは32bitのみとなり、またFloating Pointは全てFPUで扱うことになり、Embedded Floating Point関係が削除されたほか、System Registerの一部が省略されている。変更点は、L2のサイズやInterconnectに関連する部分が主である。

L2キャッシュのサイズや帯域、持ち方が変わったから、Line Sizeが変更になるのは不思議ではない