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

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

FPGAの部屋

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

ビットマップ・ディスプレイ・コントローラ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

コメント

コメントの投稿


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

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