FC2カウンター FPGAの部屋 AXI4 Master IP にAXI4 Lite Slave を追加9(バグフィックス)
FC2ブログ

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

FPGAの部屋

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

AXI4 Master IP にAXI4 Lite Slave を追加9(バグフィックス)

このブログ記事のトップは、”AXI4 Master IP にAXI4 Lite Slave を追加1(インプリメント)”
前の記事は、”AXI4 Master IP にAXI4 Lite Slave を追加8(ChipScopeデバッグ)

下に示すのは、前回のブログ記事の最後の図にあるべき姿を書き加えたものだ。
AXI4M_and_Lite_Slave_85_130419.png

つまり、AXI_BVALID が 1 にならないために、AXI_BREADY が 0 になることが出来ない。つまり、AXIバスのトランザクションが終了できないため、デッドロックしてしまった。こうなった原因は、AXI4 Lite Slave バス用のVerilog HDL ファイルのWrite 用ステートマシンにあった。下にそのステートマシンを示す。


    // AXI4 Lite Slave Write Transaction State Machine
    always @(posedge aclk) begin
        if (reset) begin
            wrt_cs <= IDLE_WR;
            awready <= 1'b1;
            bvalid <= 1'b0;
        end else begin
            case (wrt_cs)
                IDLE_WR :
                    if (s_axi_lite_awvalid & ~s_axi_lite_wvalid) begin    // Write Transaction Start
                        wrt_cs <= DATA_WRITE_HOLD;
                        awready <= 1'b0;
                    end else if (s_axi_lite_awvalid & s_axi_lite_wvalid) begin    // Write Transaction Start with data
                        wrt_cs <= BREADY_ASSERT;
                        awready <= 1'b0;
                    end
                DATA_WRITE_HOLD :
                    if (s_axi_lite_wvalid) begin    // Write data just valid
                        wrt_cs <= BREADY_ASSERT;
                        bvalid <= 1'b1;
                    end
                BREADY_ASSERT :
                    if (s_axi_lite_bready) begin    // The write transaction was terminated.
                        wrt_cs <= IDLE_WR;
                        bvalid <= 1'b0;
                        awready <= 1'b1;
                    end
            endcase
        end
    end


IDLE_WRステートの // Write Transaction Start with data のところで、”bvalid <= 1'b1;”を書くのを忘れてしまった。下に修正したステートマシンを示す。


    // AXI4 Lite Slave Write Transaction State Machine
    always @(posedge aclk) begin
        if (reset) begin
            wrt_cs <= IDLE_WR;
            awready <= 1'b1;
            bvalid <= 1'b0;
        end else begin
            case (wrt_cs)
                IDLE_WR :
                    if (s_axi_lite_awvalid & ~s_axi_lite_wvalid) begin    // Write Transaction Start
                        wrt_cs <= DATA_WRITE_HOLD;
                        awready <= 1'b0;
                    end else if (s_axi_lite_awvalid & s_axi_lite_wvalid) begin    // Write Transaction Start with data
                        wrt_cs <= BREADY_ASSERT;
                        awready <= 1'b0;
                        bvalid <= 1'b1;
                    end
                DATA_WRITE_HOLD :
                    if (s_axi_lite_wvalid) begin    // Write data just valid
                        wrt_cs <= BREADY_ASSERT;
                        bvalid <= 1'b1;
                    end
                BREADY_ASSERT :
                    if (s_axi_lite_bready) begin    // The write transaction was terminated.
                        wrt_cs <= IDLE_WR;
                        bvalid <= 1'b0;
                        awready <= 1'b1;
                    end
            endcase
        end
    end


これで、AXI_BVALID が 1 にアサートされて正常に動作するはずだ。(まだ試していないです)
シミュレーションを行った”ビットマップ・ディスプレイ・コントローラIPにAXI4 Lite Slave バスを追加1(シミュレーション)”のシミュレーション波形を見ても、AWVALID とWVALID が同時にアサートされた場合のシミュレーション波形が存在しない。シミュレーションのシナリオが足りなかった。下にシミュレーション波形を示す。
AXI4M_and_Lite_Slave_17_130405.png


次に、Readしたデータ (RDATA) が 0 になっている問題だが、MPDファイルの RDATA の定義が下のように定義してしまっていた。

PORT s_axi_lite_rdata = RDATA, DIR = O, VEC = [3-1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE


バスの幅が間違ってた。そのために、XPSプロジェクトのPortタブで見ると、3ビット幅になってしまっている。
AXI4M_and_Lite_Slave_86_130419.png

これを、下のように修正した。

PORT s_axi_lite_rdata = RDATA, DIR = O, VEC = [C_S_AXI_LITE_DATA_WIDTH-1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE


修正後、Project メニューからRescan User Repositories を実行した。
これで、RDATAのビット幅が正常な値の32ビット幅に戻った。
AXI4M_and_Lite_Slave_87_130419.png

シミュレーションがまだだが、先にインプリメントしてやってみることにする。

次のブログ記事は”AXI4 Master IP にAXI4 Lite Slave を追加10(ハードウェア完成)
  1. 2013年04月19日 05:12 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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