FC2カウンター FPGAの部屋 AXI4 Slave Bus Functional Model のバグフィックス
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

AXI4 Slave Bus Functional Model のバグフィックス

AXI4 Slave Bus Functional Model のVHDL版2
AXI4 Slave Bus Functional Model のVHDL版3(RAMの初期化ファイルを追加)
AXI4 Slave Bus Functional Model のVerilog HDL版2
AXI4 Slave Bus Functional Model のVerilog HDL版3(RAMの初期化ファイルを追加)
に貼り付けたAXI4 Slave BFMにバグが見つかった。(見つけてくれたk林さん、ありがとうございました。)
それは、Write もRead も同様のバグで、データ転送の際にランダムなWait を入れた時に、Write はS_AXI_WVALID がアサートされないとS_AXI_WREADY をアサートしない。Read はS_AXI_RREADY がアサートされないと S_AXI_RVALID をアサートしないというバグだ。つまり依存関係ができてしまっていた。(注:Writeの場合はAXIバスの規格に違反してはいません。ちょっと勘違いしていましたが、WRITE_RANDOM_WAIT=0 の動作に合わせるということで、そのままとします。ikwzmさん、ありがとうございました。)
具体的には、READ_RANDOM_WAIT=1 にした時に、そのバグが顕在化する。その時に、マスタ側で、S_AXI_RVALID が来たので、S_AXI_RREADY を返そうとしているとデッドロックする。WRITE_RANDOM_WAIT=1 の時も同様だ。
現在は、それらのバグをフィックしたHDLコードを貼り付けてある。現在、使っている方は差し替えて下さい。

なお、今回は、RAMの初期化ファイルを追加したHDLコードに、LOAD_RAM_INIT_FILE パラメータを追加した。
LOAD_RAM_INIT_FILE=1 の時は、RAMの初期化ファイルをロードし、LOAD_RAM_INIT_FILE=0 の時は、RAMの初期化ファイルをロードしないようにした。なので、こちらのAXI4 Slave BFMを使用したほうが便利かもしれない。
但し、ISimでは、VHDLとVerilog HDLでRAMの初期化ファイルの取り扱いが違うようだ。
シミュレーション関連のAXI4 Slave BFMは、プロジェクト・ファイルの置いてあるフォルダ(プロジェクト・フォルダとする)に Simulation フォルダを作成して、その下に入れてある。
VHDLでは、プロジェクト・フォルダか、Simulation フォルダに、RAMの初期化ファイルを置いておかないとコンパイル時にエラーになる。VHDLでは、RAMの初期化を行わない場合、つまり、LOAD_RAM_INIT_FILE=0 の場合でもRAMの初期化ファイルは必須となる。
Verilog HDLでは、RAMを初期化する場合には、プロジェクト・フォルダにRAMの初期化ファイルが必要だが。RAMの初期化が必要ない場合は、LOAD_RAM_INIT_FILE の値にかかわらずRAMの初期化ファイルは必要ない。コンパイル・エラーがでることもない。
よって、Verilog HDLの場合は、RAMの初期化機能付きのAXI4 Slave BFMを使用したほうが良いと思う。
VHDLに関しては、使わなくてもRAMの初期化ファイルを入れておけば、RAMの初期化機能付きのAXI4 Slave BFMを使用できる。
  1. 2014年09月01日 04:29 |
  2. AXI4バス
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/2917-ffd572bb
この記事にトラックバックする(FC2ブログユーザー)