FC2カウンター FPGAの部屋 複数のAXI4 バスを持つIPの作製
FC2ブログ

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

FPGAの部屋

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

AXI4 Master IP にAXI4 Lite Slave を追加3(DTSをコンパイル)

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

今回は、前回作った xilinx.dts をDTCでコンパイルする。
参照するブログ記事を下に示す。

DTCでDevice Tree をコンパイルする1
DTCでDevice Tree をコンパイルする2


まずは、xilinx.dts の関係する部分を下に示す。
AXI4M_and_Lite_Slave_33_130411.png

        bitmap_disp_cntrler_axi_master_0: bitmap-disp-cntrler-axi-master@47000000 {
            compatible = "xlnx,bitmap-disp-cntrler-axi-master-1.00.a";
            reg = < 0x47000000 0x10000 >;
            xlnx,display-start-address = <0x1a000000>;
            xlnx,offset-width = <0x9>;
        } ;
        mt9d111_inf_axi_master_0: mt9d111-inf-axi-master@46000000 {
            compatible = "xlnx,mt9d111-inf-axi-master-1.00.a";
            reg = < 0x46000000 0x10000 >;
            xlnx,display-start-address = <0x1a000000>;
            xlnx,offset-width = <0x9>;
            xlnx,upside-down = <0x0>;
        } ;


この部分を、ZedBoard_OOB_Design/linux/devicetree_ramdisk.dts に追加する。devicetree_ramdisk.dts には、”DTCでDevice Tree をコンパイルする2”ですでに、”axi_iic_mt9d111: i2c@45000000 ”のエントリが追加されて、devicetree_ramdisk_mt9d111.dts とリネームされている。devicetree_ramdisk_mt9d111.dts に下の図のように追加した。
AXI4M_and_Lite_Slave_34_130411.png

次に、devicetree_ramdisk_mt9d111.dts のあるディレクトリの ~/HDL/ZedBoard/ZedBoard_OOB_Design/linux/Work に cd した。
そこで、devicetree_ramdisk_mt9d111.dts のコンパイルを行った。

~/HDL/ZedBoard/linux-digilent-master/scripts/dtc/dtc -O dtb -I dts -o devicetree_ramdisk.dtb devicetree_ramdisk_mt9d111.dts


そうすると、devicetree_ramdisk.dtb が生成された。
AXI4M_and_Lite_Slave_35_130411.png

devicetree_ramdisk.dtb ファイルを ZedBoard ブート用のSDカードに保存した。
AXI4M_and_Lite_Slave_36_130411.png

次の記事は、”AXI4 Master IP にAXI4 Lite Slave を追加4(FSBLとBOOT.binの生成)
  1. 2013年04月11日 05:07 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:0

AXI4 Master IP にAXI4 Lite Slave を追加2(SDK)

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

インプリメントが終了したので、今度はSDKを立ちあげてソフトウェアをリコンパイルする。

・下に図はすでに実行後だが、EDKプロジェクトの system_i をHierarchy ウインドウで選択して、Processes ウインドウで Export Hardware Design To SDK with Bitstream をダブルクリックした。
AXI4M_and_Lite_Slave_25_130409.png

・SDKの Workspace Lancher が立ち上がる。Workspace がすでに設定されているので、OKボタンをクリックした。
AXI4M_and_Lite_Slave_26_130409.png

・SDKが立ち上がった。Updating hardware などが実行されている。
AXI4M_and_Lite_Slave_27_130409.png

・Project メニューから Clean... を選択した。すべてのプロジェクトをクリーンしてリコンパイルするためだ。
AXI4M_and_Lite_Slave_28_130409.png

・Clean ダイアログが開いた。Clean all projects のラジオボタンがクリックされていることを確認して、OKボタンをクリックした。
AXI4M_and_Lite_Slave_29_130409.png

・すべてのプロジェクトがリコンパイルされた。下に system.xml のカメラ・インターフェイスIP (mt9d111_inf_axi_master_0) とビットマップ・ディスプレイ・コントローラIP (bitmap_disp_cntrler_axi_master_0) のアドレスマップが見える。なお、system.xml はISEからエクスポートされたファイルだと思う。
AXI4M_and_Lite_Slave_30_130409.png

・device-tree_bsp_0 -> ps7_cortexa9_0 -> libsrc -> device-tree_v0_00_x -> xilinx.dts にDTSファルがある。そこには、mt9d111_inf_axi_master_0 と bitmap_disp_cntrler_axi_master_0 の記述もあった。
AXI4M_and_Lite_Slave_31_130409.png

mt9d111_inf_axi_master_0 と bitmap_disp_cntrler_axi_master_0 の記述を下に示す。

        bitmap_disp_cntrler_axi_master_0: bitmap-disp-cntrler-axi-master@47000000 {
            compatible = "xlnx,bitmap-disp-cntrler-axi-master-1.00.a";
            reg = < 0x47000000 0x10000 >;
            xlnx,display-start-address = <0x1a000000>;
            xlnx,offset-width = <0x9>;
        } ;
        mt9d111_inf_axi_master_0: mt9d111-inf-axi-master@46000000 {
            compatible = "xlnx,mt9d111-inf-axi-master-1.00.a";
            reg = < 0x46000000 0x10000 >;
            xlnx,display-start-address = <0x1a000000>;
            xlnx,offset-width = <0x9>;
            xlnx,upside-down = <0x0>;
        } ;


DTSファイルについては、下の 2 つのブログ記事を参照されたい。

SDKでDevice Treeを生成する1(Device Tree の概要)
SDKでDevice Treeを生成する2(SDKでxilinx.dtsを生成)


なお、”SDKでDevice Treeを生成する2(SDKでxilinx.dtsを生成)”を参考に、Windows7 でも xilinx.dts ファイルを生成できた。
AXI4M_and_Lite_Slave_32_130410.png

次のブログ記事は、”AXI4 Master IP にAXI4 Lite Slave を追加3(DTSをコンパイル)
  1. 2013年04月10日 04:46 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:0

AXI4 Master IP にAXI4 Lite Slave を追加1(インプリメント)

カメラ・インターフェイスIP (CamInf IP) とビットマップ・ディスプレイ・コントローラIP (BDC IP) にAXI4 Lite Slave を追加した。
AXI4 Lite Slave をなぜ追加したかというと、ZedBoard で Digilent Linux を起動した時に、ペンギンが2個表示されるフレームバッファがメモリ上にとられる。フレームバッファはLinux の起動するときに動的に取られるようなので、起動するタイミングで開始番地が変動する。更にカーネルを書き換えたりすると開始番地がずれる。そのフレームバッファの開始番地を CamInf IP と BDC IP に知らせたいために、AXI4 Lite Slave を付けたレジスタを用意した。フレームバッファの開始アドレスを Linux 上のソフトウェアを使用して、CamInf IP と BDC IP のレジスタに書き込む。それから、CamInf IP と BDC IP を起動すれば、フレームバッファ上の安全なアドレスを使用して、カメラのビットマップデータを Linux に取得させることができる。

さて、ZedBoard_OOB_Desgin に、AXI4 Lite Slave によるレジスタを追加した CamInf IP と BDC IP を追加できたので、とりあえずWindows7 上でインプリメントを行った。
論理合成でエラーが発生したので、XPS上でNetlist を生成したところ、エラー箇所がわかった。
AXI4M_and_Lite_Slave_22_130406.png

エラー内容を下に示す。

ERROR:HDLCompiler:267 - "D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\ZedBoard_OOB_Design2\hw\xps_proj\hdl\system_mt9d111_inf_axi_master_0_wrapper.v" Line 185: Cannot find port s_axi_lite_awprot on this module
ERROR:HDLCompiler:267 - "D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\ZedBoard_OOB_Design2\hw\xps_proj\hdl\system_mt9d111_inf_axi_master_0_wrapper.v" Line 195: Cannot find port s_axi_lite_arprot on this module
ERROR:EDK:546 - Aborting XST flow execution!


つまり、s_axi_lite_awprot、s_axi_lite_arprot とMPDファイルのスペルが間違っていたのだが、ポートが無いと勘違いして、HDLファイルの AWPORT と ARPORT も消去してしまった。元々、参考にしたVDMA の AXI4 Lite Slave インターフェースには無いので大丈夫だろうと思った。(AWPORT と ARPORTを後から慌てて追加したが、MHSファイルと CamInf IP のMPDファイルの整合性が取れないと言われて、XPSプロジェクトが立ち上がらなくなったので諦めた。これを再度追加するには、IPを元に戻して削除してから、再度Add IPが必要だろうと思う)
再度、インプリメントを行った。(Windows7 とUbuntu 12.10 両方共インプリメントが出来ました)
AXI4M_and_Lite_Slave_23_130407.png

AXI4M_and_Lite_Slave_24_130407.png

次のブログ記事は、”AXI4 Master IP にAXI4 Lite Slave を追加2(SDK)
  1. 2013年04月07日 18:55 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:0

ビットマップ・ディスプレイ・コントローラIPにAXI4 Lite Slave バスを追加2(XPSプロジェクト)

前回、ビットマップ・ディスプレイ・コントローラの単体シミュレーションがうまくいったので、今回は、MPDファイルとMUIファイルを修正して、XPSプロジェクトにAdd IPする。

最初に、ビットマップ・ディスプレイ・コントローラ IP トップの bitmap_disp_cntrler_axi_master.v のポート宣言部分を下に示す。AXI4 MasterポートとAXI4 Lite Slaveポートを持っていることがわかると思う。(2013/04/07: s_axi_lite_awport と s_axi_lite_arport を削除しました。詳しい経緯は”AXI4 Master IP にAXI4 Lite Slave を追加1(インプリメント)”を参照のこと)

// bitmap_disp_cntrler_axi_master.v 
//
// Read Only IP, 64 bit bus
//
// 2012/06/28
// 2012/11/22 : HDMI portを追加

`default_nettype none

module bitmap_disp_cntrler_axi_master #
  (
        // AXI4 Lite Slave Interface
        parameter integer C_S_AXI_LITE_ADDR_WIDTH        = 9,
        parameter integer C_S_AXI_LITE_DATA_WIDTH        = 32,
        
        // AXI Master Interface
        parameter integer C_INTERCONNECT_M_AXI_WRITE_ISSUING = 8,
        parameter integer C_M_AXI_THREAD_ID_WIDTH       = 1,
        parameter integer C_M_AXI_ADDR_WIDTH            = 32,
        parameter integer C_M_AXI_DATA_WIDTH            = 64,
        parameter integer C_M_AXI_AWUSER_WIDTH          = 1,
        parameter integer C_M_AXI_ARUSER_WIDTH          = 1,
        parameter integer C_M_AXI_WUSER_WIDTH           = 1,
        parameter integer C_M_AXI_RUSER_WIDTH           = 1,
        parameter integer C_M_AXI_BUSER_WIDTH           = 1,
        parameter [31:0]  C_M_AXI_TARGET                 = 32'h00000000,
        parameter integer C_M_AXI_BURST_LEN                = 256,
        parameter integer C_OFFSET_WIDTH                = 32,
        
        /* Disabling these parameters will remove any throttling.
        The resulting ERROR flag will not be useful */ 
        parameter integer C_M_AXI_SUPPORTS_WRITE         = 0,
        parameter integer C_M_AXI_SUPPORTS_READ         = 1,
        
        parameter [31:0]    C_DISPLAY_START_ADDRESS        = 32'h1A000000    // フレームバッファのスタートアドレス
    )
    (
        // Clocks and Reset
        input wire          s_axi_lite_aclk,
        input wire           M_AXI_ACLK,
        input wire           ARESETN,

        ///////////////////////////////
        // AXI4 Lite Slave Interface //
        ///////////////////////////////
        // AXI Lite Write Address Channel
        input    wire    s_axi_lite_awvalid,
        output    wire    s_axi_lite_awready,
        input    wire    [C_S_AXI_LITE_ADDR_WIDTH-1:0]    s_axi_lite_awaddr,
        
        // AXI Lite Write Data Channel
        input    wire    s_axi_lite_wvalid,
        output    wire    s_axi_lite_wready,
        input    wire    [C_S_AXI_LITE_DATA_WIDTH-1:0] s_axi_lite_wdata,
        
        // AXI Lite Write Response Channel
        output    wire    [1:0]    s_axi_lite_bresp,
        output    wire    s_axi_lite_bvalid,
        input    wire    s_axi_lite_bready,
        
        // AXI Lite Read Address Channel
        input    wire    s_axi_lite_arvalid,
        output    wire    s_axi_lite_arready,
        input    wire    [C_S_AXI_LITE_ADDR_WIDTH-1:0]    s_axi_lite_araddr,
        
        // AXI Lite Read Data Channel
        output    wire    s_axi_lite_rvalid,
        input    wire    s_axi_lite_rready,
        output    wire    [C_S_AXI_LITE_DATA_WIDTH-1:0] s_axi_lite_rdata,
        output    wire    [1:0]    s_axi_lite_rresp,
        
        ///////////////////////////////
        // AXI4 Master Interface //
        ///////////////////////////////
        // Master Interface Write Address
        output wire [C_M_AXI_THREAD_ID_WIDTH-1:0] M_AXI_AWID,
        output wire [C_M_AXI_ADDR_WIDTH-1:0]      M_AXI_AWADDR,
        output wire [8-1:0]              M_AXI_AWLEN,
        output wire [3-1:0]              M_AXI_AWSIZE,
        output wire [2-1:0]              M_AXI_AWBURST,
        output wire                  M_AXI_AWLOCK,
        output wire [4-1:0]              M_AXI_AWCACHE,
        output wire [3-1:0]              M_AXI_AWPROT,
        // AXI3 output wire [4-1:0]                  M_AXI_AWREGION,
        output wire [4-1:0]              M_AXI_AWQOS,
        output wire [C_M_AXI_AWUSER_WIDTH-1:0]      M_AXI_AWUSER,
        output wire                  M_AXI_AWVALID,
        input  wire                  M_AXI_AWREADY,

        // Master Interface Write Data
        // AXI3 output wire [C_M_AXI_THREAD_ID_WIDTH-1:0]     M_AXI_WID,
        output wire [C_M_AXI_DATA_WIDTH-1:0]      M_AXI_WDATA,
        output wire [C_M_AXI_DATA_WIDTH/8-1:0]      M_AXI_WSTRB,
        output wire                  M_AXI_WLAST,
        output wire [C_M_AXI_WUSER_WIDTH-1:0]      M_AXI_WUSER,
        output wire                  M_AXI_WVALID,
        input  wire                  M_AXI_WREADY,

        // Master Interface Write Response
        input  wire [C_M_AXI_THREAD_ID_WIDTH-1:0]      M_AXI_BID,
        input  wire [2-1:0]              M_AXI_BRESP,
        input  wire [C_M_AXI_BUSER_WIDTH-1:0]      M_AXI_BUSER,
        input  wire                  M_AXI_BVALID,
        output wire                  M_AXI_BREADY,

        // Master Interface Read Address
        output wire [C_M_AXI_THREAD_ID_WIDTH-1:0]      M_AXI_ARID,
        output wire [C_M_AXI_ADDR_WIDTH-1:0]      M_AXI_ARADDR,
        output wire [8-1:0]              M_AXI_ARLEN,
        output wire [3-1:0]              M_AXI_ARSIZE,
        output wire [2-1:0]              M_AXI_ARBURST,
        output wire [2-1:0]              M_AXI_ARLOCK,
        output wire [4-1:0]              M_AXI_ARCACHE,
        output wire [3-1:0]              M_AXI_ARPROT,
        // AXI3 output wire [4-1:0]          M_AXI_ARREGION,
        output wire [4-1:0]              M_AXI_ARQOS,
        output wire [C_M_AXI_ARUSER_WIDTH-1:0]      M_AXI_ARUSER,
        output wire                  M_AXI_ARVALID,
        input  wire                  M_AXI_ARREADY,

        // Master Interface Read Data 
        input  wire [C_M_AXI_THREAD_ID_WIDTH-1:0]      M_AXI_RID,
        input  wire [C_M_AXI_DATA_WIDTH-1:0]      M_AXI_RDATA,
        input  wire [2-1:0]              M_AXI_RRESP,
        input  wire                  M_AXI_RLAST,
        input  wire [C_M_AXI_RUSER_WIDTH-1:0]      M_AXI_RUSER,
        input  wire                  M_AXI_RVALID,
        output wire                  M_AXI_RREADY,
        
        // User Ports
        input    wire    pixclk,
        
        (* IOB = "FORCE" *) output    reg     [3:0]    vga_red,
        (* IOB = "FORCE" *) output    reg     [3:0]    vga_green,
        (* IOB = "FORCE" *) output    reg     [3:0]    vga_blue,
        (* IOB = "FORCE" *) output    reg        vga_hsync,
        (* IOB = "FORCE" *) output    reg        vga_vsync,
        
        (* IOB = "TRUE" *) output    wire    hdmi_clk,
        (* IOB = "TRUE" *) output    wire    hdmi_vsync,
        (* IOB = "TRUE" *) output    wire    hdmi_hsync,
        (* IOB = "TRUE" *) output    wire    hdmi_data_e,
        (* IOB = "TRUE" *) output    wire    [15:0]    hdmi_data,
        
        input    wire    init_done
    );


MPDファルとMUIファイルはカメラ・インターフェイスIPと同様に追加した
XPSプロジェクトで、以前のビットマップ・ディスプレイ・コントローラ IP を削除して、今回、AXI4 Lite Slave バスを追加したビットマップ・ディスプレイ・コントローラ IP をAdd IPした。
AXI4M_and_Lite_Slave_18_130406.png

カメラ・インターフェイス IP と同様に、AXI4 Interconnect と接続して、ポートを接続し、アドレスを決定した。アドレスは、カメラ・インターフェイス IP の次の 0x47000000 に指定した。
AXI4M_and_Lite_Slave_19_130406.png

AXI4M_and_Lite_Slave_20_130406.png

AXI4M_and_Lite_Slave_21_130406.png

上の画面は、Linuxだが、Windows7 でも同様に行った。
  1. 2013年04月06日 07:49 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:0

ビットマップ・ディスプレイ・コントローラIPにAXI4 Lite Slave バスを追加1(シミュレーション)

前回、カメラ・インターフェースIPにAXI4 Lite Slave インターフェースを追加することが出来た。まだ、ZedBoardで動作したわけではないので、動作するかどうかはわからない。今回は、ビットマップ・ディスプレイ・コントローラIP (bitmap_disp_cntrler_axi_master.v) にAXI4 Lite Slave バスを追加する。

カメラ・インターフェースIPでやっているので、AXI4 Lite Slave用のサブモジュールは名前を bm_disp_cntrler_axi_lite_slave.v に変更した。名前を変更した以外のVerilog HDLコードは一緒だ。

・bitmap_disp_cntrler_axi_master.v に bm_disp_cntrler_axi_lite_slave.v をサブモジュールとして追加した。

・テストベンチの bitmap_disp_cntrler_axi_master_tb.v に、mt9d111_inf_axi_master_tb.v 同様の task を追加した。

・ビットマップ・ディスプレイ・コントローラIPのシミュレーション用ISEプロジェクトからISim を立ちあげてシミュレーションを行った。

下にビットマップ・ディスプレイ・コントローラIPのシミュレーション用ISEプロジェクトを示す。
AXI4M_and_Lite_Slave_16_130405.png

Hierarchy ウインドウを見ると、階層構造がわかる。下に構成要素の簡単な説明をする。
・bitmap_disp_cntrler_axi_master_tb.v がテストベンチ
・bitmap_disp_cntrler_axi_master.v がトップ Verilog ファイル
・bitmap_disp_cntrler_axi_master.v が AXI4 Lite Slave バス・インターフェース・モジュール
・axi_master_interface.v が AXI4 Master バス・インターフェース・モジュール
・bitmap_disp_engine.v が、ビットマップ・ディスプレイ・コントローラ本体
・bitmap_affio.v が AXI4バスクロックとピクセル・クロック間のデータ転送用の非同期FIFO
・conv_hdmi_out.v がHDMI出力用のADV7511 用のフォーマットに変換するモジュール
・conv_rgb2ycbcr.v が、ADV7511 は YCbCr 出力であるため RGB を YCbCr 出力に変換する
・clk_gen はクロックを生成するモジュールで、ACLK用とpixclk用の2つをインスタンスしてある。
・reset_gen は、リセット信号を生成するモジュール
・axi_master_bfm は、AXI4 Slave の信号を生成するBus Function Model

これで、ISimでシミュレーションを行った。下に結果を示す。
AXI4M_and_Lite_Slave_17_130405.png

カメラ・インターフェースIP同様に動作した
  1. 2013年04月05日 04:54 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:0

カメラ・インターフェースIPにAXI4 Lite Slave インターフェースを追加4(XPSプロジェクト)

前回、MPDファイルとMUIファイルを作成した。今回は、XPSプロジェクトでカメラ・インターフェースIPをAdd IPして、バスやポートを接続する。

XPSプロジェクトにカメラ・インターフェースIPをAdd IPした。

最初に、MPDファイルとMUIファイルを書き換えた後で、mt9d111_inf_axi_master_v1_00_a を直接入れ替えて新しいIPが入った状態で、XPSプロジェクトを立ちあげてみたが、MHSファイルのエラーでGUIが起動しなくなってしまった。古い mt9d111_inf_axi_master_v1_00_a を最初にDelete してから、AXI4 Lite Slave インターフェースを追加したカメラ・インターフェースIP (mt9d111_inf_axi_master_v1_00_a) に入れ替えて、Add IPする必要があった。今回は、mt9d111_inf_axi_master_v1_00_a をコピーして修正した上で入れ替えたが、Add IP したままで、大幅に仕様を変更するのは危険のようである。

古い mt9d111_inf_axi_master_v1_00_a をDelete して、AXI4 Lite Slave インターフェースを追加した mt9d111_inf_axi_master_v1_00_a をAdd IPした。ちなみにシミュレーションはWindows7 で行ったが、XPSプロジェクトにAdd IPするのはUbuntu 12.10 で行なっている。
AXI4M_and_Lite_Slave_8_130330.png

AXI4M_and_Lite_Slave_9_130330.png

AXI4M_and_Lite_Slave_10_130331.png

AXI4M_and_Lite_Slave_11_130402.png

上の図のとおりに実行した。一旦、カメラ・インターフェースIPをDelete してから、Add IPしているので、バスやポートを再度つなぎ直す必要があるのが面倒だった。
バスやポートを接続後のXPSの様子を下図3枚で示す。processing_system7_0 に、mt9d111_inf_axi_master の S_AXI_LITE バスが接続されているのがわかる。
まずは、Bus Interfaces タブ画面を下に示す。
AXI4M_and_Lite_Slave_12_130403.png

次に、Ports タブの内容を示す。
AXI4M_and_Lite_Slave_13_130403.png

最後に、Address タブの内容を示す。自動的にアドレスマップされなかったので、0x46000000 からの番地に AXI4 Lite Slave バスのレジスタをマップした。
AXI4M_and_Lite_Slave_14_130403.png

Project メニューから Design Rule Check を実行したが、エラーはなかった。
次は、ビットマップ・ディスプレイ・コントローラに、AXI4 Lite Slave バスのレジスタを追加する。

(2013/04/04:追記)
Windowsでもフォルダの階層を浅くして、mt9d111_inf_axi_master_v1_00_a を一旦 Delete してから、Ubuntu のmt9d111_inf_axi_master_v1_00_a をコピーした。そうして、Ubuntu 同様にポートの接続、アドレスマップを行った。なお、フォルダの階層が浅い状態では、ISimによるシミュレーションも問題なく行うことが出来た。
AXI4M_and_Lite_Slave_15_130404.png
  1. 2013年04月03日 04:26 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:2

カメラ・インターフェースIPにAXI4 Lite Slave インターフェースを追加3(MPD, MUIファイルの作製)

前回、シミュレーションを行なって、AXI4 Lite Slave インターフェースを追加したカメラ・インターフェースIPがうまく動作したようだった。そこで、MPDファイルとMUIファイルを作製した。

カメラ・インターフェースIPにAXI4 Lite Slave インターフェースを追加したので、MPDファイルとMUIファイルを書き換えた。下にMPDファイル (mt9d111_inf_axi_master_v2_1_0.mpd) を示す。(2013/04/07: s_axi_lite_awport と s_axi_lite_arport を削除しました。削除しなくても問題ないです。ChipScoepe AXI Monitor の信号には、s_axi_lite_awport と s_axi_lite_arport が存在します。詳しい経緯は”AXI4 Master IP にAXI4 Lite Slave を追加1(インプリメント)”を参照のこと)
(2013/04/20: s_axi_lite_rdata のVEC の値が間違っていたので、修正しました。詳しくは、”AXI4 Master IP にAXI4 Lite Slave を追加9(バグフィックス)”を参照のこと)


#-- DISCLAIMER OF LIABILITY
#--
#-- This file contains proprietary and confidential information of
#-- Xilinx, Inc. ("Xilinx"), that is distributed under a license
#-- from Xilinx, and may be used, copied and/or disclosed only
#-- pursuant to the terms of a valid license agreement with Xilinx.
#--
#-- XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION
#-- ("MATERIALS") "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
#-- EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING WITHOUT
#-- LIMITATION, ANY WARRANTY WITH RESPECT TO NONINFRINGEMENT,
#-- MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. Xilinx
#-- does not warrant that functions included in the Materials will
#-- meet the requirements of Licensee, or that the operation of the
#-- Materials will be uninterrupted or error-free, or that defects
#-- in the Materials will be corrected. Furthermore, Xilinx does
#-- not warrant or make any representations regarding use, or the
#-- results of the use, of the Materials in terms of correctness,
#-- accuracy, reliability or otherwise.
#--
#-- Xilinx products are not designed or intended to be fail-safe,
#-- or for use in any application requiring fail-safe performance,
#-- such as life-support or safety devices or systems, Class III
#-- medical devices, nuclear facilities, applications related to
#-- the deployment of airbags, or any other applications that could
#-- lead to death, personal injury or severe property or
#-- environmental damage (individually and collectively, "critical
#-- applications"). Customer assumes the sole risk and liability
#-- of any use of Xilinx products in critical applications,
#-- subject only to applicable laws and regulations governing
#-- limitations on product liability.
#--
#-- Copyright (c) 1995-2010 Xilinx, Inc. All rights reserved.
#--
#-- This disclaimer and copyright notice must be retained as part
#-- of this file at all times.
#--###################################################################
##
## Name : mt9d111_inf_axi_master
## Desc : Microprocessor Peripheral Description
## : Automatically generated by PsfUtility
##
###################################################################

BEGIN mt9d111_inf_axi_master

## Peripheral Options
OPTION IPTYPE = PERIPHERAL
OPTION IMP_NETLIST = TRUE
OPTION STYLE = MIX
OPTION DESC = mt9d111_inf_axi_master
OPTION LONG_DESC = An AXI Master Camera Interface
OPTION HDL = MIXED
OPTION RUN_NGCBUILD = FALSE

IO_INTERFACE IO_IF = mt9d111_inf

## Bus Interfaces
BUS_INTERFACE BUS = S_AXI_LITE, BUS_STD = AXI, BUS_TYPE = SLAVE
BUS_INTERFACE BUS = M_AXI, BUS_STD = AXI, BUS_TYPE = MASTER

## Generics for VHDL or Parameters for Verilog
PARAMETER C_S_AXI_LITE_ADDR_WIDTH = 9, DT = INTEGER, BUS = S_AXI_LITE
PARAMETER C_S_AXI_LITE_DATA_WIDTH = 32, DT = INTEGER, BUS = S_AXI_LITE
PARAMETER C_BASEADDR = 0xffffffff, DT = STD_LOGIC_VECTOR(31 downto 0), PAIR = C_HIGHADDR, ADDRESS = BASE, BUS = S_AXI_LITE, MIN_SIZE = 0x1000, ASSIGNMENT = REQUIRE, TYPE = NON_HDL
PARAMETER C_HIGHADDR = 0x00000000, DT = STD_LOGIC_VECTOR(31 downto 0), PAIR = C_BASEADDR, ADDRESS = HIGH, BUS = S_AXI_LITE, ASSIGNMENT = REQUIRE, TYPE = NON_HDL
PARAMETER C_S_AXI_LITE_PROTOCOL = AXI4LITE, DT = STRING, BUS = S_AXI_LITE, ASSIGNMENT = CONSTANT, TYPE = NON_HDL
PARAMETER C_S_AXI_LITE_SUPPORTS_READ = 1, DT = INTEGER, RANGE = (0,1), BUS = S_AXI_LITE, TYPE = NON_HDL
PARAMETER C_S_AXI_LITE_SUPPORTS_WRITE = 1, DT = INTEGER, RANGE = (0,1), BUS = S_AXI_LITE, TYPE = NON_HDL

PARAMETER C_M_AXI_SUPPORTS_THREADS = 0, DT = integer, RANGE = (0,1), TYPE = NON_HDL, BUS = M_AXI
PARAMETER C_M_AXI_THREAD_ID_WIDTH = 1, DT = integer, RANGE = (1:16), BUS = M_AXI
PARAMETER C_M_AXI_ADDR_WIDTH = 32, DT = integer, ASSIGNMENT = CONSTANT, BUS = M_AXI
PARAMETER C_M_AXI_DATA_WIDTH = 64, DT = integer, RANGE = (32, 64, 128, 256), BUS = M_AXI
PARAMETER C_M_AXI_PROTOCOL = AXI4, DT = string, TYPE = NON_HDL, VALUES = (AXI4 = AXI4, AXI4Lite = AXI4Lite), BUS = M_AXI
# Max number of write commands able to be issued without responses
# In this example, issued writes + unread writes will throttle write address channel
PARAMETER C_INTERCONNECT_M_AXI_WRITE_ISSUING = 8, DT = INTEGER, BUS = M_AXI
#Read Issuing in this example HDL will go as high as write issuing parameter
PARAMETER C_INTERCONNECT_M_AXI_READ_ISSUING = 8, DT = INTEGER, BUS = M_AXI, TYPE = NON_HDL
PARAMETER C_M_AXI_SUPPORTS_READ = 1, DT = integer, RANGE = (0,1), BUS = M_AXI #,TYPE = NON_HDL
PARAMETER C_M_AXI_SUPPORTS_WRITE = 1, DT = integer, RANGE = (0,1), BUS = M_AXI #,TYPE = NON_HDL
PARAMETER C_M_AXI_SUPPORTS_USER_SIGNALS = 0, DT = integer, RANGE = (0,1), TYPE = NON_HDL, BUS = M_AXI
PARAMETER C_M_AXI_AWUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_ARUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_WUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_RUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_BUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_SUPPORTS_NARROW_BURST = 0, DT = integer, RANGE = (0,1), TYPE = NON_HDL, BUS = M_AXI

# Example Parameters
# Base address of targeted slave
PARAMETER C_M_AXI_TARGET = 0x00000000, DT = std_logic_vector(31 downto 0)
# Burst length for transactions, in C_M_AXI_DATA_WIDTHs
PARAMETER C_M_AXI_BURST_LEN = 16, DT = integer
# Number of address bits to test before wrapping
PARAMETER C_OFFSET_WIDTH = 9, DT = integer
PARAMETER C_DISPLAY_START_ADDRESS = 0x1A000000, DT = std_logic_vector(31 downto 0)
PARAMETER C_UPSIDE_DOWN = 0, DT = INTEGER, VALUES = (1= TRUE, 0= FALSE)

## Ports
PORT s_axi_lite_aclk = "", DIR = I, SIGIS = CLK, BUS = S_AXI_LITE
PORT M_AXI_ACLK = "", BUS = M_AXI, DIR = I, SIGIS = CLK
PORT ARESETN = ARESETN, BUS = M_AXI:S_AXI_LITE, DIR = I, SIGIS = RST

PORT s_axi_lite_awvalid = AWVALID, DIR = I, BUS = S_AXI_LITE
PORT s_axi_lite_awready = AWREADY, DIR = O, BUS = S_AXI_LITE
PORT s_axi_lite_awaddr = AWADDR, DIR = I, VEC = [C_S_AXI_LITE_ADDR_WIDTH-1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE
PORT s_axi_lite_wvalid = WVALID, DIR = I, BUS = S_AXI_LITE
PORT s_axi_lite_wready = WREADY, DIR = O, BUS = S_AXI_LITE
PORT s_axi_lite_wdata = WDATA, DIR = I, VEC = [C_S_AXI_LITE_DATA_WIDTH-1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE
PORT s_axi_lite_bresp = BRESP, DIR = O, VEC = [1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE
PORT s_axi_lite_bvalid = BVALID, DIR = O, BUS = S_AXI_LITE
PORT s_axi_lite_bready = BREADY, DIR = I, BUS = S_AXI_LITE
PORT s_axi_lite_arvalid = ARVALID, DIR = I, BUS = S_AXI_LITE
PORT s_axi_lite_arready = ARREADY, DIR = O, BUS = S_AXI_LITE
PORT s_axi_lite_araddr = ARADDR, DIR = I, VEC = [C_S_AXI_LITE_ADDR_WIDTH-1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE
PORT s_axi_lite_rvalid = RVALID, DIR = O, BUS = S_AXI_LITE
PORT s_axi_lite_rready = RREADY, DIR = I, BUS = S_AXI_LITE
PORT s_axi_lite_rdata = RDATA, DIR = O, VEC = [C_S_AXI_LITE_DATA_WIDTH-1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE
PORT s_axi_lite_rresp = RRESP, DIR = O, VEC = [1:0], BUS = S_AXI_LITE, ENDIAN = LITTLE

PORT M_AXI_AWID = AWID, BUS = M_AXI, DIR = O, VEC = [(C_M_AXI_THREAD_ID_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_AWADDR = AWADDR, BUS = M_AXI, DIR = O, VEC = [(C_M_AXI_ADDR_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_AWLEN = AWLEN, BUS = M_AXI, DIR = O, VEC = [7:0], ENDIAN = LITTLE
PORT M_AXI_AWSIZE = AWSIZE, BUS = M_AXI, DIR = O, VEC = [2:0], ENDIAN = LITTLE
PORT M_AXI_AWBURST = AWBURST, BUS = M_AXI, DIR = O, VEC = [1:0], ENDIAN = LITTLE
PORT M_AXI_AWLOCK = AWLOCK, BUS = M_AXI, DIR = O #, VEC = [1:0], ENDIAN = LITTLE
PORT M_AXI_AWCACHE = AWCACHE, BUS = M_AXI, DIR = O, VEC = [3:0], ENDIAN = LITTLE
PORT M_AXI_AWPROT = AWPROT, BUS = M_AXI, DIR = O, VEC = [2:0], ENDIAN = LITTLE
PORT M_AXI_AWQOS = AWQOS, BUS = M_AXI, DIR = O, VEC = [3:0], ENDIAN = LITTLE
PORT M_AXI_AWUSER = AWUSER, BUS = M_AXI, DIR = O, VEC = [C_M_AXI_AWUSER_WIDTH-1:0], ENDIAN = LITTLE
PORT M_AXI_AWVALID = AWVALID, BUS = M_AXI, DIR = O
PORT M_AXI_AWREADY = AWREADY, BUS = M_AXI, DIR = I
PORT M_AXI_WDATA = WDATA, BUS = M_AXI, DIR = O, VEC = [(C_M_AXI_DATA_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_WSTRB = WSTRB, BUS = M_AXI, DIR = O, VEC = [((C_M_AXI_DATA_WIDTH/8) -1):0], ENDIAN = LITTLE
PORT M_AXI_WLAST = WLAST, BUS = M_AXI, DIR = O
PORT M_AXI_WUSER = WUSER, BUS = M_AXI, DIR = O, VEC = [(C_M_AXI_WUSER_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_WVALID = WVALID, BUS = M_AXI, DIR = O
PORT M_AXI_WREADY = WREADY, BUS = M_AXI, DIR = I
PORT M_AXI_BID = BID, BUS = M_AXI, DIR = I, VEC = [(C_M_AXI_THREAD_ID_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_BRESP = BRESP, BUS = M_AXI, DIR = I, VEC = [1:0], ENDIAN = LITTLE
PORT M_AXI_BUSER = BUSER, BUS = M_AXI, DIR = I, VEC = [(C_M_AXI_BUSER_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_BVALID = BVALID, BUS = M_AXI, DIR = I
PORT M_AXI_BREADY = BREADY, BUS = M_AXI, DIR = O
PORT M_AXI_ARID = ARID, BUS = M_AXI, DIR = O, VEC = [(C_M_AXI_THREAD_ID_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_ARADDR = ARADDR, BUS = M_AXI, DIR = O, VEC = [(C_M_AXI_ADDR_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_ARLEN = ARLEN, BUS = M_AXI, DIR = O, VEC = [7:0], ENDIAN = LITTLE
PORT M_AXI_ARSIZE = ARSIZE, BUS = M_AXI, DIR = O, VEC = [2:0], ENDIAN = LITTLE
PORT M_AXI_ARBURST = ARBURST, BUS = M_AXI, DIR = O, VEC = [1:0], ENDIAN = LITTLE
PORT M_AXI_ARLOCK = ARLOCK, BUS = M_AXI, DIR = O, VEC = [1:0], ENDIAN = LITTLE
PORT M_AXI_ARCACHE = ARCACHE, BUS = M_AXI, DIR = O, VEC = [3:0], ENDIAN = LITTLE
PORT M_AXI_ARPROT = ARPROT, BUS = M_AXI, DIR = O, VEC = [2:0], ENDIAN = LITTLE
PORT M_AXI_ARQOS = ARQOS, BUS = M_AXI, DIR = O, VEC = [3:0], ENDIAN = LITTLE
PORT M_AXI_ARUSER = ARUSER, BUS = M_AXI, DIR = O, VEC = [(C_M_AXI_ARUSER_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_ARVALID = ARVALID, BUS = M_AXI, DIR = O
PORT M_AXI_ARREADY = ARREADY, BUS = M_AXI, DIR = I
PORT M_AXI_RID = RID, BUS = M_AXI, DIR = I, VEC = [(C_M_AXI_THREAD_ID_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_RDATA = RDATA, BUS = M_AXI, DIR = I, VEC = [(C_M_AXI_DATA_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_RRESP = RRESP, BUS = M_AXI, DIR = I, VEC = [1:0], ENDIAN = LITTLE
PORT M_AXI_RLAST = RLAST, BUS = M_AXI, DIR = I
PORT M_AXI_RUSER = RUSER, BUS = M_AXI, DIR = I, VEC = [(C_M_AXI_RUSER_WIDTH-1):0], ENDIAN = LITTLE
PORT M_AXI_RVALID = RVALID, BUS = M_AXI, DIR = I
PORT M_AXI_RREADY = RREADY, BUS = M_AXI, DIR = O

#Example IO port
PORT init_done = "", DIR = I, IO_IF = mt9d111_inf, IO_IS = init_done
PORT wr_error = "", DIR = O, IO_IF = mt9d111_inf, IO_IS = wr_error
PORT pclk_from_pll = "", DIR = I, SIGIS = CLK, IO_IF = mt9d111_inf, IO_IS = pclk_from_pll
PORT pclk = "", DIR = I, SIGIS = CLK, IO_IF = mt9d111_inf, IO_IS = pclk
PORT xck = "", DIR =O, SIGIS = CLK, IO_IF = mt9d111_inf, IO_IS = xck
PORT href = "", DIR = I, IO_IF = mt9d111_inf, IO_IS = href
PORT vsync = "", DIR = I, IO_IF = mt9d111_inf, IO_IS = vsync
PORT cam_data = "", DIR = I, VEC = [7:0], IO_IF = mt9d111_inf, IO_IS = cam_data
PORT standby = "", DIR = O, IO_IF = mt9d111_inf, IO_IS = standby
PORT pfifo_overflow = "", DIR = O, IO_IF = mt9d111_inf, IO_IS = pfifo_overflow
PORT pfifo_underflow = "", DIR = O, IO_IF = mt9d111_inf, IO_IS = pfifo_underflow

END


次に、MUIファイル (mt9d111_inf_axi_master_v2_1_0.mui) を示す。

<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
###############################################################################
## DISCLAIMER OF LIABILITY
##
## This file contains proprietary and confidential information of
## Xilinx, Inc. ("Xilinx"), that is distributed under a license
## from Xilinx, and may be used, copied and/or disclosed only
## pursuant to the terms of a valid license agreement with Xilinx.
##
## XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION
## ("MATERIALS") "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
## EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING WITHOUT
## LIMITATION, ANY WARRANTY WITH RESPECT TO NONINFRINGEMENT,
## MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. Xilinx
## does not warrant that functions included in the Materials will
## meet the requirements of Licensee, or that the operation of the
## Materials will be uninterrupted or error-free, or that defects
## in the Materials will be corrected. Furthermore, Xilinx does
## not warrant or make any representations regarding use, or the
## results of the use, of the Materials in terms of correctness,
## accuracy, reliability or otherwise.
##
## Xilinx products are not designed or intended to be fail-safe,
## or for use in any application requiring fail-safe performance,
## such as life-support or safety devices or systems, Class III
## medical devices, nuclear facilities, applications related to
## the deployment of airbags, or any other applications that could
## lead to death, personal injury or severe property or
## environmental damage (individually and collectively, "critical
## applications"). Customer assumes the sole risk and liability
## of any use of Xilinx products in critical applications,
## subject only to applicable laws and regulations governing
## limitations on product liability.
##
## Copyright 2009 Xilinx, Inc.
## All rights reserved.
##
## This disclaimer and copyright notice must be retained as part
## of this file at all times.
##
###############################################################################
-->

<!DOCTYPE doc SYSTEM "../../ipdialog.dtd" [
    <!-- -->
    <!ENTITY C_M_AXI_SUPPORTS_THREADS '
    <widget id="C_M_AXI_SUPPORTS_THREADS">
        <key>C_M_AXI_SUPPORTS_THREADS</key>
        <label>C_M_AXI_SUPPORTS_THREADS</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_THREAD_ID_WIDTH '
    <widget id="C_M_AXI_THREAD_ID_WIDTH">
        <key>C_M_AXI_THREAD_ID_WIDTH</key>
        <label>C_M_AXI_THREAD_ID_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_HIGHADDR '
    <widget id="C_HIGHADDR">
            <key>C_HIGHADDR</key>
            <label>High Address</label>
            <tip></tip>
    </widget>
    '>
    <!ENTITY C_BASEADDR '
    <widget id="C_BASEADDR">
            <key>C_BASEADDR</key>
            <label>Base Address</label>
            <tip></tip>
    </widget>
    '>
    <!ENTITY C_S_AXI_LITE_ADDR_WIDTH '
    <widget id="C_S_AXI_LITE_ADDR_WIDTH">
                    <key>C_S_AXI_LITE_ADDR_WIDTH</key>
            <label>AXI Lite Address Width</label>
            <tip></tip>
    </widget>
    '>
    <!ENTITY C_S_AXI_LITE_DATA_WIDTH '
    <widget id="C_S_AXI_LITE_DATA_WIDTH">
                    <key>C_S_AXI_LITE_DATA_WIDTH</key>
            <label>AXI Lite Data Width</label>
            <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_ADDR_WIDTH '
    <widget id="C_M_AXI_ADDR_WIDTH">
        <key>C_M_AXI_ADDR_WIDTH</key>
        <label>C_M_AXI_ADDR_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_DATA_WIDTH '
    <widget id="C_M_AXI_DATA_WIDTH">
        <key>C_M_AXI_DATA_WIDTH</key>
        <label>C_M_AXI_DATA_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_PROTOCOL '
    <widget id="C_M_AXI_PROTOCOL">
                    <key>C_M_AXI_PROTOCOL</key>
            <label>AXI Master Protocol</label>
            <tip></tip>
    </widget>
    '>
    <!ENTITY C_S_AXI_LITE_PROTOCOL '
    <widget id="C_S_AXI_LITE_PROTOCOL">
                    <key>C_S_AXI_LITE_PROTOCOL</key>
            <label>AXI Lite Protocol</label>
            <tip></tip>
    </widget>
    '>
    <!ENTITY C_USE_ADVANCED_PORTS '
    <widget id="C_USE_ADVANCED_PORTS">
        <key>C_USE_ADVANCED_PORTS</key>
        <label>C_USE_ADVANCED_PORTS</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_S_AXI_LITE_SUPPORTS_READ '
    <widget id="C_S_AXI_LITE_SUPPORTS_READ">
                    <key>C_S_AXI_LITE_SUPPORTS_READ</key>
            <label>AXI Lite Supports Read Access</label>
            <tip></tip>
    </widget>
    '>
    <!ENTITY C_S_AXI_LITE_SUPPORTS_WRITE '
    <widget id="C_S_AXI_LITE_SUPPORTS_WRITE">
                    <key>C_S_AXI_LITE_SUPPORTS_WRITE</key>
            <label>AXI Lite Supports Write Access</label>
            <tip></tip>
    </widget>
    '>    
    <!ENTITY C_M_AXI_SUPPORTS_READ '
    <widget id="C_M_AXI_SUPPORTS_READ">
        <key>C_M_AXI_SUPPORTS_READ</key>
        <label>C_M_AXI_SUPPORTS_READ</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_SUPPORTS_WRITE '
    <widget id="C_M_AXI_SUPPORTS_WRITE">
        <key>C_M_AXI_SUPPORTS_WRITE</key>
        <label>C_M_AXI_SUPPORTS_WRITE</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_SUPPORTS_USER_SIGNALS '
    <widget id="C_M_AXI_SUPPORTS_USER_SIGNALS">
        <key>C_M_AXI_SUPPORTS_USER_SIGNALS</key>
        <label>C_M_AXI_SUPPORTS_USER_SIGNALS</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_AWUSER_WIDTH '
    <widget id="C_M_AXI_AWUSER_WIDTH">
        <key>C_M_AXI_AWUSER_WIDTH</key>
        <label>C_M_AXI_AWUSER_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_ARUSER_WIDTH '
    <widget id=" C_M_AXI_ARUSER_WIDTH ">
        <key>C_M_AXI_ARUSER_WIDTH</key>
        <label>C_M_AXI_ARUSER_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_WUSER_WIDTH '
    <widget id="C_M_AXI_WUSER_WIDTH">
        <key>C_M_AXI_WUSER_WIDTH</key>
        <label>C_M_AXI_WUSER_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_RUSER_WIDTH '
    <widget id="C_M_AXI_RUSER_WIDTH">
        <key>C_M_AXI_RUSER_WIDTH</key>
        <label>C_M_AXI_RUSER_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_BUSER_WIDTH '
    <widget id="C_M_AXI_BUSER_WIDTH">
        <key>C_M_AXI_BUSER_WIDTH</key>
        <label>C_M_AXI_BUSER_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_SUPPORTS_NARROW_BURST '
    <widget id="C_M_AXI_SUPPORTS_NARROW_BURST">
        <key>C_M_AXI_SUPPORTS_NARROW_BURST</key>
        <label>C_M_AXI_SUPPORTS_NARROW_BURST</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_TARGET '
    <widget id="C_M_AXI_TARGET">
        <key>C_M_AXI_TARGET</key>
        <label>C_M_AXI_TARGET</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_M_AXI_BURST_LEN '
    <widget id="C_M_AXI_BURST_LEN">
        <key>C_M_AXI_BURST_LEN</key>
        <label>C_M_AXI_BURST_LEN</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_MAX_UNREAD_WRITES '
    <widget id="C_MAX_UNREAD_WRITES">
        <key>C_MAX_UNREAD_WRITES</key>
        <label>C_MAX_UNREAD_WRITES</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_OFFSET_WIDTH '
    <widget id="C_OFFSET_WIDTH">
        <key>C_OFFSET_WIDTH</key>
        <label>C_OFFSET_WIDTH</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_DISPLAY_START_ADDRESS '
    <widget id="C_DISPLAY_START_ADDRESS">
        <key>C_DISPLAY_START_ADDRESS</key>
        <label>C_DISPLAY_START_ADDRESS</label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_UPSIDE_DOWN '
    <widget id="C_UPSIDE_DOWN">
        <key>C_UPSIDE_DOWN</key>
        <label>C_UPSIDE_DOWN</label>
        <tip></tip>
    </widget>
    '>
    
]>

<doc>
    <view id="User">
        <display>User</display>
        <group id="Common">
            <display>Common</display>
            <item>&C_M_AXI_TARGET;</item>
            <item>&C_M_AXI_BURST_LEN;</item>
            <item>&C_MAX_UNREAD_WRITES;</item>
            <item>&C_OFFSET_WIDTH;</item>
            <item>&C_DISPLAY_START_ADDRESS;</item>
            <item>&C_UPSIDE_DOWN;</item>
        </group>
    </view>
    <view id="System">
        <display>System</display>
        <group id="Addresses">
                <display>Addresses</display>
                <item>&C_BASEADDR;</item>
                <item>&C_HIGHADDR;</item>
        </group>
        <group id="AXI">
            <display>AXI</display>
            <item>&C_S_AXI_LITE_PROTOCOL;</item>
            <item>&C_S_AXI_LITE_ADDR_WIDTH;</item>
            <item>&C_S_AXI_LITE_DATA_WIDTH;</item>
            <item>&C_S_AXI_LITE_SUPPORTS_READ;</item>
            <item>&C_S_AXI_LITE_SUPPORTS_WRITE;</item>
            <item>&C_M_AXI_PROTOCOL;</item>
            <item>&C_M_AXI_ADDR_WIDTH;</item>
            <item>&C_M_AXI_DATA_WIDTH;</item>
            <item>&C_M_AXI_SUPPORTS_READ;</item>
            <item>&C_M_AXI_SUPPORTS_WRITE;</item>
            <item>&C_M_AXI_SUPPORTS_THREADS;</item>
            <item>&C_M_AXI_THREAD_ID_WIDTH;</item>
            <item>&C_M_AXI_SUPPORTS_NARROW_BURST;</item>
            <item>&C_M_AXI_SUPPORTS_USER_SIGNALS;</item>
            <item>&C_M_AXI_AWUSER_WIDTH;</item>
            <item>&C_M_AXI_ARUSER_WIDTH;</item>
            <item>&C_M_AXI_WUSER_WIDTH;</item>
            <item>&C_M_AXI_RUSER_WIDTH;</item>
            <item>&C_M_AXI_BUSER_WIDTH;</item>
        </group>
    </view>
    
</doc>

  1. 2013年04月02日 04:47 |
  2. 複数のAXI4 バスを持つIPの作製
  3. | トラックバック:0
  4. | コメント:0