Jz47xx は、PMP用に使われた JZ4755 の世代から 同じ能力の CPU を 2個積んでいる。1 つは 動画専用プロセッサとして使われていて、SMP ではない。
この CPU は、SIMD 命令を持っていて DCT/IDCT などの動画の処理が高速に出来るようになっている。ARM だと Cortex-A8 以降で NEON という命令群をサポートしているが、それと同じような機能だと考えて良い。
細かいことを言うと SIMD命令 には、SIMD と SIMD2(JZ475X以降で追加) がある。これらをまとめて XMU(Xburst Multimedia Extension)命令 ということもある。これらの命令の詳細は公開されていないが、それを使った mplayer のソースコードは以下で公開されている。
ftp://ftp.ingenic.cn/3sw/JZ4770/05mplayer/
あと、Xburst の SIMD命令は、32bit を対象にする。NEON が 128bit を一気に処理できるのと比べると しょぼいのではあるが、命令が最適化されているのか 実用的なレベルになっている。
要するにほとんど CPU とそれが持つ SIMD命令 が 動画の処理をしているのだ。
ほとんどと書いたのは、他にも 動画用の機能があるため。ひとつは、IPU (Image Process Unit) と呼ばれるもの。これは、リサイズと 色空間の変換 をして フレームバッファに 画像を送り込む機能。回転はできない。
GPU は、回転するときに使われるかも知れないのだが、メインの機能では関与しない(はず)
JZ4760 からは、CPU の中に bitstream をハンドリングする 機能が加わっている。詳細はよく分からないが、CABAC と呼ばれているようだ。
さて、VPU だが、上に書いた DCT/IDCT を含めていつかの機能しか持たない。
- Motion compensation
- Motion estimation
- De-block
- DCT/IDCT
- Parser (JZ4760以降)
これで全部。Parser というのがよく分からないが、CABAC を使った 機能に思える。
JZ4770 は、CPU を 1GHz で動かすが、VPU は 500 MHz にクロックダウンしている。1080p のデコードではもはや フルスピードで動かす必要はないのだろう。
ファイル → Parser MC IDCT De-block 色空間変換 → LCD
(bitstream処理) (YUV → RGB)
CPU/VPU CPU/VPU CPU/VPU CPU/VPU IPU LCD-IF
図で書くとこんな感じ。VPU で出来ることは CPU でも出来る。どう分担するかは コード次第。
さて、JZ4770 の次の CPU として、Xburst1 の 40nm のプロセッサがある。(Roadmap) これには SMP の機能が追加されていることだけが 分かっている。VPU を汎用に使えるようにしたものだと思う。たぶん SMP として使う場合は、VPU は使えない。
2012年1月発売予定の Aurora/Wizard は、Xburst1 の 40nm のプロセッサを使っているのではないかと思われるのだが、最初から SMP かどうかは分からない。
対応するのは、結構大変だと思うのだ。最初は、VPU として使うようにして、あとで SMP 対応ファームウェアを出して来るような気がしている。
あと、40 nm が 1.3 - 1.5 GHz となっているが、ちょっと 低いような。65nm の JZ4770 が 1.2 GHz までいけるなら 1.8 GHz 以上でも不思議はない。これも後で クロックアップするのかも。
追記: GPU の 解説 URL
- Mali-400
http://www.arm.com/ja/products/multimedia/mali-graphics-hardware/mali-400-mp.php - GC800
http://www.vivantecorp.com/p_mvr.html
GPU の説明には、動画関係の用語が全く出て来ない。ARM でも GPU は 動画と無関係のはず。 - OpenMAX の説明
http://www.arm.com/ja/community/multimedia/standards-apis.php
(ARM の ) OpenMAX の API では、動画のデコードが入っているが、NEON とか CPU の機能で実装されている。