AXI4バスについて

AXI4 プロトコルの勉強1
XilinxのEDKはAXI4バスを使用することが出来る。今回はカスタム AXI Master IP コアの作成を目指そうと思う。AXI4 Masterコアを作成できるようにAXIプロトコルについて学んで行くつもりだ。
 AXI4 プロトコルの勉強2(読み出しバースト例)
、読み出しバースト例ついて勉強する。最初は、オーバーラップしない読み出しバースト例だ。次 に読み出しバーストがオーバーラップする例を示す。
 AXI4 プロトコルの勉強3(書きこみバースト例)
今度は、AXI4の書きこみバースト例だ。オーバーラップしていない書き込みバースト例とオー バーラップ書き込み例を示した。

  キャラクタROMをAXI4 Lite Slave として実装する1(AXI4 Lite バスの勉強)
キャラクタ・ディスプレイ・コントローラのキャラクタROMをAXI4 Lite Slave として実装することにした。今回はそのためのAXI4 Liteバスの仕様を勉強することにする。
 キャラクタ ROMをAXI4 Lite Slave として実装する2(AXI4 Lite バスの勉強2)
今回はAXI4 Lite バスのWriteとReadトランザクションのタイミングチャートを書いてみた。

 AXI4バスの パラメータの意味
AXI4 バスのパラメータの意味についてブログに書いておく。いちいちIHI0022D_amba_axi_protocol_spec.pdfを見るのが面倒だ からだ。(AMBA ® AXI ™ and ACE ™ Protocol Specification IHI0022D_amba_axi_protocol_spec.pdfを参考にさせて頂いた。)

AXI4-Stream のお勉強
AXI4-Streamの概要、信号表と機能

AXI4バスでのAWCACHE、ARCACHEの値
Xilinxのマニュアルによると、AWCACHE、ARCACHEどちらも3、 AWCACHE, ARCACHE = 3'b011 が推奨という話だったので、実際にやってみた。
結果は、AWCACHE、ARCACHEどちらも3でも問題なく動作した。

AXI4 Slave Bus Functional Model のVerilog HDL版
私の VHDL 版 AXI4 Slave Bus Functional Model を K林さんが、Verilog HDL に変換してくれました。公開の許可を得たのでVerilog HDLコードを公開します。K林さん、ありがとうございました。
最初のAXI4 Slave BFMの版は制限があって、S_AXI_BREADY がアサートされてから、S_AXI_BVALID がアサートされる時には問題ないが、S_AXI_BREADY のアサートが S_AXI_BVALID より遅れると破綻するが、通常は問題無いと思う。
AXI4 Slave Bus Functional Model のVHDL版
”AXI4 Slave Bus Functional Model のVerilog HDL版”を公開しましたが、今度はVHDL版を公開します。
同様に、制限があって、S_AXI_BREADY がアサートされてから、S_AXI_BVALID がアサートされる時には問題ないが、S_AXI_BREADY のアサートが S_AXI_BVALID より遅れると破綻するが、通常は問題無いと思う。
AXI4 Slave Bus Functional Model のVHDL版のテスト
ikwzm さんが、AXI4 Slave Bus Functional Model のVHDL版をテストするためのVivado プロジェクトを作ってくれましたので、ご紹介いたします。それは、axi_slave_bfm_test です。
axi_slave_bfm_test をやってみると、S_AXI_BREADY がアサートされている所で、S_AXI_BVALID がアサートされています。この時には、問題は無いですが、S_AXI_BREADY のアサートが S_AXI_BVALID より遅れると破綻ということがわかりました。

AXI4 Slave Bus Functional Model のVHDL版2
”AXI4 Slave Bus Functional Model のVHDL版”でブログに貼ったAXI4 Slave BFMにバグというか、S_AXI_BREADY のアサートが S_AXI_BVALID より遅れると破綻するので、修正を行った。
AXI4 Slave Bus Functional Model のVHDL版のテスト2
これで、問題は解決したと思う。但し、Write Data Channel の終了時に、Write Response 用の sync fifo にデータを入力するためWrite Data Transaction の終了から、Write Response Channelの開始までに1クロックの間が空いてしまう。
AXI4 Slave Bus Functional Model のVerilog HDL版2
”AXI4 Slave Bus Functional Model のVerilog HDL版”にVHDL版と同じ様に、S_AXI_BREADY のアサートが S_AXI_BVALID より遅れると破綻するので、修正を行った。

AXI4 Slave Bus Functional Model のVHDL版3(RAMの初期化ファイルを追加)
”AXI4 Slave Bus Functional Model のVHDL版2”で、Write Response Channel の動作を修正したが、今度はRAMの初期化ファイルを追加したAXI4 Slave BFMを貼っておく。
AXI4 Slave Bus Functional Model のVerilog HDL版3(RAMの初期化ファイルを追加)
”AXI4 Slave Bus Functional Model のVerilog HDL版2”で、Write Response Channel の動作を修正したが、今度はRAMの初期化ファイルを追加したAXI4 Slave BFMを貼っておく。

AXI4 Slave Bus Functional Model のバグフィックス
AXI4 Slave BFMにバグが見つかったので、バグをフィックスした。
RAMの初期化ファイルを追加したHDLコードに、LOAD_RAM_INIT_FILE パラメータを追加した。

ZYBO Linux (Ubuntu 14.04 LTS) 上でMakefile を作ってラプラシアンフィルタIPの制御ソフトをコンパイル3
Vivado HLS 2014.1 でラプラシアンフィルタIPを作って、Vivado 2014.4 のプロジェクトを新規作成し、ブロック・デザインを構築していく過程で、ラプラシアンフィルタ IP のAXI4 Master バスは、カメラ・コントローラー IPとビットマップ・ディスプレイ・コントローラー IP のAXI4 Master が入っている AXI Interconnect に入っている。これをラプラシアンフィルタ IP 独自の AXI Interconnect にして、Zynq PS の AXI HP2 ポートに入れたらどうだろう?と考えた。
AXI4のバス帯域を考察してみた。

AXI4 Slave Bus Functional Model のVerilog HDL版4
AXI4 Slave のBFM (axi_slave_BFM.v) を公開する。
今回の修正は、Xilinx社のIP はAxREADY がいつもは 1 になっていることから、AxREADYがいつも 1 になるように変更した。これがデフォルトのモードで、AWREADY_IS_USUALLY_HIGH、ARREADY_IS_USUALLY_HIGH を 0 にすることで、従来のAxREADY がいつもは 0 のモードにすることができる。
AXI4 Slave Bus Functional Model のVHDL版4
”AXI4 Slave Bus Functional Model のVerilog HDL版4”と同様に、Xilinx社のIP はAxREADY がいつもは 1 になっていることから、AxREADYがいつも 1 になるように変更した。これがデフォルトのモードで、AWREADY_IS_USUALLY_HIGH、ARREADY_IS_USUALLY_HIGH を 0 にすることで、従来のAxREADY がいつもは 0 のモードにすることができる。
動作はVerilog HDL版と同様だ。

ikzmw さんの axi_slave_bfm test をやってみた1
ツィッターで ikwzm さんが私の(Verilog 版はcobac さんがVHDL版を直してくれたのだが)AXI4 Slave BFM をシミュレーションして動いたと報告してくれた。それで、 ikwzm さんのikwzm/axi_slave_bfm_test をやってみた。
ikzmw さんの axi_slave_bfm test をやってみた2
Vivado 2016.3 のaxi_slave_bfm_test_1 プロジェクトが表示されたところで前回のブログが終了したので、今回はそこから始めよう。このプロジェクトはVHDL のAXI4 Slave BFM 用だ。

RAMの初期化ファイルのあるAXI4 Slave BFM(VHDL版)
”AXI4 Slave Bus Functional Model のVHDL版3(RAMの初期化ファイルを追加)”に”AXI4 Slave Bus Functional Model のVHDL版4”の変更を加えた。具体的には、Xilinx社のIP はAxREADY がいつもは 1 になっていることから、AxREADYがいつも 1 になるように変更した。これがデフォルトのモードで、AWREADY_IS_USUALLY_HIGH、ARREADY_IS_USUALLY_HIGH を 0 にすることで、従来のAxREADY がいつもは 0 のモードにすることができる。
RAMの初期化ファイルのあ るAXI4 Slave BFM(Verilog HDL版)
”AXI4 Slave Bus Functional Model のVerilog HDL版3(RAMの初期化ファイルを追加)”に”AXI4 Slave Bus Functional Model のVerilog HDL版4”の変更を加えた。具体的には、Xilinx社のIP はAxREADY がいつもは 1 になっていることから、AxREADYがいつも 1 になるように変更した。これがデフォルトのモードで、AWREADY_IS_USUALLY_HIGH、ARREADY_IS_USUALLY_HIGH を 0 にすることで、従来のAxREADY がいつもは 0 のモードにすることができる。

RAMの初期化ファイルのあ るAXI4 Slave BFM(Verilog HDL版)を使用した論理合成後の機能シミュレーション
”RAMの初期化ファイルのあるAXI4 Slave BFM(Verilog HDL版)”で論理合成後の機能シミュレーションをやってみた。

Xilinx 社 AXI インターコネクト IP のAXI4 、AX4I-Lite インターフェースのトランザクション波形
Zynq の PS から Xilinx の AXI インターコネクト IP を通って Vivado HLS で作成した IP における AXI4 や AXI4-Lite インターフェースのトランザクション波形を Vivado Analyzer で取得したので書いておく。

AXI4 Master Bus Functional Model を修正した
”OpenCores.org の I2C controller core をシミュレーションする”で使用した OpenCores.org の I2C controller core を AXI4-Lite インターフェースに変更したのだが、その際に、AXI4-Lite Master BFM を使用した。
AXI4-Lite Master BFM は AXI4 Master BFM をオーバーロードしているということで、 AXI4 Master BFM も修正したので、ブログに書いておく。
AXI4-Lite Master Bus Functional Model を修正した
”OpenCores.org の I2C controller core をシミュレーションする”で使用した OpenCores.org の I2C controller core を AXI4-Lite インターフェースに変更したのだが、その際に、AXI4-Lite Master BFM を使用した。ということで、”AXI4 Master Bus Functional Model を修正した”を書いたが、その AXI4 Master BFM にかぶせる AXI4-Lite Master BFM で Read したデータを出力できるように変更した。

AXI4-Stream におけるサイド・チャネル信号 TKEEP と TSTRB の扱いについて
今まで、TKEEP と TSTRB は”Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 148 ページの”AXI4‐Stream 信号のま とめ”の”表 A-7”によるとオプションで Vitis HLS で IP コアを作成する時も C コードに処理を書かなかったのですが、特に DMA に入力する AXI4-Stream の TKEEP の処理については、入力をそのまま出力に返すか、オール 1 にしないと問題が起こる様だ。

AXI4-Stream の信号についてのまとめ
”AXI4-Stream におけるサイド・チャネル信号 TKEEP と TSTRB の扱いについて”を踏まえて、もう一度 AXI4-Stream 信号についてまとめておきたい。前回 AXI4-Stream について、まとめた資料は”AXI4-Stream のお勉強”





inserted by FC2 system