徒然なる日々を送るソフトウェアデベロッパーの記録(2)

技術上思ったことや感じたことを気ままに記録していくブログです。さくらから移設しました。

AXI4バスの仕様に悪戦苦闘中

Zynq FPGAVGA グラフィックディスプレイを設計しようと
したら AXI4 バスのマスターモードでハマってしまいました。

AXI4 とは AMBA 起源のシステム LSI 内バス仕様で、元々は
ASIC 用ですが、現在は FPGA でも使用されているバスです。

やりたいことは DDR3 メモリからピクセルデータを読みだして
VGA 回路に流すことなのですが...

AXI4 はリードアドレスの設定とデータ読み出しが別のバスに
なっていて、かつデータ読み出しが完了していなくてもスレーブが
ARREADY を出していればマスターは次のアドレスを送出できるという
仕様です。
従って、データが実際に読み出されてきた時にそれがどのリード
アドレス設定に相当するのかということを覚えておかないといけない
のです。(一般には FIFO を使うのでしょうなあ)

お手本にした本ではリードアドレス発行後、データが実際に読み
出されるまで待つ設計になっていますが、本当はスレーブが許す
限り次のアドレスを発行してスループットを上げたいところです。

VGA ディスプレイの場合はインクリメントしながら読みだすので
データが読み出された時にインクリメントされるカウンタを用意して
おけばアドレスを推測可能なはず。

一応 GUI ツールが HDL を吐いてくれるのですが、R/W するマスターを
作成して余計な回路を作りこんでしまうため、設計者が手で刈り込む
必要があり、あまり便利でない。
また設計者が設定しなければならない信号と GUI ツールが作成した信号
が HDL 上入り交じるように構成されているのも分かりづらい一因に
なっています。どこまでが汎用的な構成でどこからがサンプルなのか
一見するとわからない。

今夜も長そうです...