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 のお勉強”