FC2カウンター FPGAの部屋 AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする2
FC2ブログ

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

FPGAの部屋

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

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする2

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする1”の続き。

前回で一応、AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにすることは出来たが、XPSと同じというわけではない。それは、MPDファイルのみのパラメータや、パラメータのレンジ、パラメータ同士の依存関係が書けていないことだ。つまりMPDファイルに書いてあるパラメータの属性を設定できていない。それを設定することにしよう。

bitmap_disp_cntrler_axi_master のMPDファイルのパラメータ記述部分を下に示す。

## 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)


MPDファイルのパラメータの内で、C_S_AXI_LITE_PROTOCOL、C_S_AXI_LITE_PROTOCOL、C_M_AXI_SUPPORTS_THREADS、C_M_AXI_THREAD_ID_WIDTH、C_M_AXI_PROTOCOL、C_INTERCONNECT_M_AXI_READ_ISSUING、C_M_AXI_SUPPORTS_USER_SIGNALS は無いので、IP Packager のパラメータに追加する。それらを追加しても意味があるのどうかは分からないが。。。
更に、属性があるもの、例えば、C_S_AXI_LITE_SUPPORTS_READ は RENGE が1また0なので、それを設定する。

下の図では、C_MAXI_BUSER_WIDTH の例を引いている。
IP_Packager_AXI_32_130810.png

左下の IP Parameter Properties を見るとValue validation type が none になっている。これだと、値の設定方法は、下図の様に値をキーボードで入力することになる。
IP_Packager_AXI_30_130809.png

ラジオボタンにする方法がわかったので、下に書いておく。

下の図では、C_M_AXI_SUPPORTS_READ パラメータをクリックして設定している。Value validation pairs に "1" "1" "0" "0" を入力すると、Value validation list に "1" "0" が入り、Value validation type も list に変更された。
IP_Packager_AXI_33_130810.png

同様に、C_M_AXI_DATA_WIDTH は、RANGE = (32, 64, 128, 256) なので、Value validation pairs に "32" "32" "64" "64" "128" "128" "256" "256" と入力した。
IP_Packager_AXI_34_130810.png

C_M_AXI_SUPPORTS_THREADS を追加して、C_M_AXI_SUPPORTS_WRITE もリストにしたので、今のGUIは下の図のようになった。
IP_Packager_AXI_35_130810.png

今のところ、ラジオボタン以外のリストボックスを設定するやり方はわからない?ご存知のかたがいらっしゃったら教えて下さい。

・パラメータの追加方法

・パラメータの画面で右クリックして、右クリックメニューから Add User Parameter を選択する。
IP_Packager_AXI_36_130811.png

・新しいパラメータの名前を入れる。(C_M_AXI_THREAD_ID_WIDTH)
IP_Packager_AXI_37_130811.png

・Edit Parameter ダイアログが表示される。Is the value editable by the User? を Yes に変更し、Should the value be restricted to a list or range で Yes のラジオボタンにチェックを入れる。

・How is the value bound? が選べるので、range of integers をリストから選択した。
IP_Packager_AXI_38_130811.png

・What is default value? を 1 にセットした。

・Valid Range を 1 to 16 にセットした。

・OKボタンをクリックした。
IP_Packager_AXI_39_130811.png

・C_M_AXI_THREAD_ID_WIDTH パラメータが生成された。Value validation type が range_long に、Minimum が 1、Maximum が 16 になった。
IP_Packager_AXI_40_130811.png


・Add User Parameter で入れたパラメータには、問題があることがある。ワーニングが出てしまうことがある。
これは、プロパティの Order が 0.0 なのが問題だ。
IP_Packager_AXI_41_130811.png

・1つ前のパラメータの Order は 2700.0 だ。
IP_Packager_AXI_42_130811.png

・その1つ前のパラメータ Order は 2600.0 だ。
IP_Packager_AXI_43_130811.png

・つまり、C_M_AXI_SUPPORTS_THREADS パラメータの Order は、2800.0 を入れれば良いことになる。次のパラメータの Order は、2900.0 だ。これで、このワーニングは無くなった。
IP_Packager_AXI_44_130811.png


・依存関係がある信号設定例(2013/08/11:今のところ、Enableにできていません)

C_M_AXI_RUSER_WIDTH の XPSプロジェクトのMPDファイルの記述を下に示す。

PARAMETER C_M_AXI_RUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI


C_M_AXI_RUSER_WIDTH は、C_M_AXI_SUPPORTS_USER_SIGNALS == 1の時だけ値を持てる。このようにVivado の IP Packager で書くためには、左の IP Parameter Properties の Enablement dependency に C_M_AXI_SUPPORTS_USER_SIGNALS==1 を設定した。
IP_Packager_AXI_45_130811.png

そうすると、現在は、C_M_AXI_SUPPORTS_USER_SIGNALS==0 なので、C_M_AXI_RUSER_WIDTH は設定ダイアログでハイドされる。
IP_Packager_AXI_46_130811.png


bitmap_disp_cntrler_axi_master のMPDファイルのパラメータすべてを追加することが出来た。
IP_Packager_AXI_47_130811.png

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする3”に続く。
  1. 2013年08月10日 17:40 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:2

コメント

リストボックスにする方法

>今のところ、ラジオボタン以外のリストボックスを設定するやり方はわからない?ご存知のかたがいらっしゃったら教えて下さい。

なんか、key value のペアを5つ以上設定すると、プルダウンリストになりました。4つ以下でもできるかどうかはわかりませんが。。。
  1. 2013/08/12(月) 19:35:59 |
  2. URL |
  3. ikwzm #-
  4. [ 編集 ]

ikwzm さん、いつもありがとうございます。

リストを5つにしてしても私の所ではラジオボタンでした。何か設定があるんですかね?マニュアルが見つからないので、よくわかりません?
  1. 2013/08/13(火) 05:43:23 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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