FC2カウンター FPGAの部屋 XPSのカスタムIPにおけるMPDファイルの書き方4
FC2ブログ

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

FPGAの部屋

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

XPSのカスタムIPにおけるMPDファイルの書き方4

このブログ記事のトップは、”XPSのカスタムIPにおけるMPDファイルの書き方1
前の記事は、”XPSのカスタムIPにおけるMPDファイルの書き方3

キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする13(Writeはうまく行った)”で使用した cdc_axi_slave IPで使用しているMPDファイルの書き方について、ここに書いておく。

PARAMETER C_S_AXI_NUM_ADDR_RANGES = 1, BUS = S_AXI, DT = INTEGER, ASSIGNMENT = OPTIONAL_UPDATE, TYPE = NON_HDL, RANGE = (1:4)


C_S_AXI_NUM_ADDR_RANGESのデフォルト値を1に定義して、レンジは1~4までのinteger だ。”ASSIGNMENT = OPTIONAL_UPDATE”は、、Platform Specification Format Reference ManualEmbedded Development Kit (EDK) 14.1 UG642 (v14.1) April 24, 2012 の42ページによると、TCLプロシージャに関連付けられているMHSの値を指定できるとのことだ。このパラメータはAXI Slave IPにアドレス・スペースがいくつあるかを指定する。

この後で、アドレス・スペースを並べて書いて、C_S_AXI_NUM_ADDR_RANGES で指定された数だけ有効になる。

PARAMETER C_S_AXI_RNG00_BASEADDR = 0xFFFFFFFF, BUS = S_AXI, DT = std_logic_vector, ADDRESS = BASE, PAIR = C_S_AXI_RNG00_HIGHADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 1), TYPE = NON_HDL, MIN_SIZE = 0x1000
PARAMETER C_S_AXI_RNG00_HIGHADDR = 0x00000000, BUS = S_AXI, DT = std_logic_vector, ADDRESS = HIGH, PAIR = C_S_AXI_RNG00_BASEADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 1), TYPE = NON_HDL
PARAMETER C_S_AXI_RNG01_BASEADDR = 0xFFFFFFFF, BUS = S_AXI, DT = std_logic_vector, ADDRESS = BASE, PAIR = C_S_AXI_RNG01_HIGHADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 2), TYPE = NON_HDL, MIN_SIZE = 0x1000
PARAMETER C_S_AXI_RNG01_HIGHADDR = 0x00000000, BUS = S_AXI, DT = std_logic_vector, ADDRESS = HIGH, PAIR = C_S_AXI_RNG01_BASEADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 2), TYPE = NON_HDL
PARAMETER C_S_AXI_RNG02_BASEADDR = 0xFFFFFFFF, BUS = S_AXI, DT = std_logic_vector, ADDRESS = BASE, PAIR = C_S_AXI_RNG02_HIGHADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 3), TYPE = NON_HDL, MIN_SIZE = 0x1000
PARAMETER C_S_AXI_RNG02_HIGHADDR = 0x00000000, BUS = S_AXI, DT = std_logic_vector, ADDRESS = HIGH, PAIR = C_S_AXI_RNG02_BASEADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 3), TYPE = NON_HDL
PARAMETER C_S_AXI_RNG03_BASEADDR = 0xFFFFFFFF, BUS = S_AXI, DT = std_logic_vector, ADDRESS = BASE, PAIR = C_S_AXI_RNG03_HIGHADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 4), TYPE = NON_HDL, MIN_SIZE = 0x1000
PARAMETER C_S_AXI_RNG03_HIGHADDR = 0x00000000, BUS = S_AXI, DT = std_logic_vector, ADDRESS = HIGH, PAIR = C_S_AXI_RNG03_BASEADDR, ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 4), TYPE = NON_HDL


ここで、C_S_AXI_RNG00_BASEADDR と C_S_AXI_RNG00_HIGHADDR はペアになっている。それぞれ PAIR で相手を指定している。ベース・アドレスと最大のアドレスのペアだ。

各、BASEADDR と HIGHADDR の表示は、C_S_AXI_NUM_ADDR_RANGES の値で決められる。例えば2番めのペアは、”ISVALID = (C_S_AXI_NUM_ADDR_RANGES >= 2)”と指定されていて、C_S_AXI_NUM_ADDR_RANGES の値が2以上の時に表示される。

下の図に、C_S_AXI_NUM_ADDR_RANGES = 1 の時のXPS Core Configダイアログを示す。
Writing_MPD_1_130622.png

次に、C_S_AXI_NUM_ADDR_RANGES = 3 の時のXPS Core Configダイアログを示す。
Writing_MPD_2_130622.png
  1. 2013年06月22日 05:13 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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