しかし、なひたふさんの”ZYNQのPLからPSへ大規模DMA”の記事のタイミングチャートを見ると、Write Response Channel は別ステートマシンにしているか、無視していることがひと目で分かった。Write Response Channel をステートマシンにしておく必要も無く、BREADY をいつも 1 にしておいて、BVALID が来た時にエラーだったらエラー表示をすれば良いと思った。
この方式は特に、XilinxのAXI Interconnect をデフォルトで使用して、DDRメモリに書き込んでいる時に有効だと思う。と言うのは、かなり Write Response が帰ってくるまでが長いからだ。下に、ラプラシアン・フィルタ AXI4 Master IPでのAXI4 Write Transaction を示す。WLASTがアサートされてから、BVALIDがアサートされるまでに結構時間がかかっているのがわかる。その場合に、Write Response Channel を無視すれば、(つまり、BREADY をいつも 1 にしておくということ)次の、Write Address Channelのアサートが速くなって、全体のスループットの向上が図れる。
但し、AXI4 Master Interfaceモジュールを使用すれば、すべてのWrite のChannel を重ねあわせることができるように設計しているので、最小のレイテンシでAXI4 Master IPが作れるはずである。上のChipScope 波形は、AXI4 Master Interfaceモジュールを使用しているタイミングチャートである。Write Transaction のそれぞれのチャネルが重なり合っているのがわかるだろうか?
AXI4 Master Interfaceモジュールの作製1(仕様の検討)
AXI4 Master Interfaceモジュールの作製2(シミュレーション)
AXI4 Master Interfaceモジュールの作製3(シミュレーション2)
AXI4 Master Interfaceモジュールの作製4(axi4_master_inf.v のHDLソース)
AXI4 Master Interfaceモジュールの作製5(Write用FIFOのXCO)
AXI4 Master Interfaceモジュールの作製6(Read用FIFOのXCO)
なひたふさん、ありがとうございました。タイミングチャートを見せて頂いたので、勉強になりました。