Tech と Culture

テクノロジーとカルチャー

バス構成

現在のFPGA内部のバス構成は以下のようになっている。
(40MHz動作)
Leon-MJPEG2.png

フレームバッファはメインメモリ上にある。
SDRAM入口の部分の帯域が厳しいだろうと思うので簡単に計算してみた。
VGAサイズ(640x480)で1ピクセル24ビットカラー(実装で32ビット使う)だとすると一画面のメモリ量は640x480x32ビットとなる。VGAコントローラは60回ディスプレイに絵を描くので、図中(2)のVGAコントローラとのやりとりだけで、毎秒640x480x60x32ビット使う。

AMBAバスは32ビット幅で実装されているので、毎秒640x480x60=1843200回バスを占有している。AMBAバスは同期バスで40MHzで動作しているので、実に40MHzのうち18MHz分を(2)が使用していることになる。実際はそんなにきれいにバースト転送されてないだろうからもっと使っている。
VGAコントローラのVHDLを読んでないので断定できませんが、フレームバッファをコントローラ内部にもってないことを考えるとそんなにはずれてないのではないかな。。。)
これはあまりにも大きすぎるので16ビットカラー(R5:G6:B5)モードで良いのではないかと考えてホストコンピュータ上でプログラムを16ビットカラー表示に変更して実行させてみた。私の目にはそれほど差は感じなかったので、帯域を考えて今後は16ビットカラーモードにすることにします。(9MHz分を使うことになる)
そうするとプログラム中のDCTやYCbCr->RGB変換の精度も緩めることができるので、後々FPGAリソースにも有効だと思われます。
あとは(1)や他のIPとのやりとりの負担がどれぐらいかがまだ分かりません。
動画がQVGA(320x240)サイズで27fpsだとすると、320x240x27x16ビット毎秒帯域を使うことになります。2ピクセルまとめて書くようにしてバスをつめて使った場合、1.03MHz分をここで使うことになります。これでもVGAコントローラに比べればはるかに小さいです。
(実際にはきれいにバーストするわけではないのでもっと使う)

トータルすると結構厳しいようなので今後要注意です。
ボードをもう一枚買って接続してフレームバッファメモリを別にするとかなり楽になりそうですが。。。。。。