FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

VivadoでIPを生成する方法の調査(VivadoのIPインテグレーションの仕組み調査)

XilinxのIP生成およびそのインテグレーションの方法って、ネット上にもほとんど情報が出ていなくて、みんなどうやってやってるんだと不思議に思いながら調査しているのだけれども。

Block Designを使わない場合はみんなソースファイルを突っ込んで合成しているだけなのかもしれないが、そうでない場合はBlock Designに結合して、AXIバスか何かで接続できるIPを作らないと接続できない。 このためのフローがネット上に情報公開されて無さ過ぎる。

とりあえず下記の資料を読みながら進めていたのだけれども、

https://www.xilinx.com/support/documentation/sw_manuals_j/xilinx2012_2/ug895-vivado-system-level-design-entry.pdf

  • Vivado Design Suite Xilinx Core Instance files (XCI)

    • VivadoでIPを生成するとこのファイルが生成され、プロジェクトにIntegrateすることでIPを追加できるようになる。
  • CORE Generator コア (XCO)

    • Vivadoが提供している標準コアのファイル。CORE Generator で使用するとこのファイルが生成される。
  • サードパーティ IP

    • NGCファイルおよびEDIFファイルを経由して、VivadoプロジェクトにIPを挿入することが可能。

資料を読んでいると、xciかIP専用のファイルでないとVivadoにインテグレートできないのかな?と思っていたのだけれども、xprもインテグレート出来るような気がしている。 ADIのライブラリ生成用のスクリプトを読んでいると、いろいろラッパーで包んであるけれども、結局生成しているのはxprファイルだよね?

だいたいXilinx IP Integratorの資料も無さ過ぎる。ipx::save_coreの資料とか何処に置いてあるんだ? 仕方がないので、以下の資料などを参考にしながらIPを生成していた。

qiita.com

さらに、生成したIPをVivadoのデザインに組み込むためには、以下のようなスクリプトを組み込んで合成を実行した。

# Add IPs
update_compile_order -fileset sources_1
open_bd_design {./adv7511_zed.srcs/sources_1/bd/system/system.bd}
update_ip_catalog -rebuild
startgroup
create_bd_cell -type ip -vlnv analog.com:user:blockram_test_v1_0:1.0 blockram_test_0
endgroup
apply_bd_automation -rule xilinx.com:bd_rule:axi4 \
    -config {Master "/sys_ps7/M_AXI_GP0" intc_ip "Auto" Clk_xbar "Auto" Clk_master "Auto" Clk_slave "Auto" }  \
    [get_bd_intf_pins blockram_test_0/S_AXI]
regenerate_bd_layout
reset_run synth_1
reset_run system_xbar_0_synth_1
launch_runs impl_1 -to_step write_bitstream -jobs 2
wait_on_run impl_1
save_bd_design

合成結果を確認してみると、一応blockram_test_v1_0デザインはインスタンスされているが、ポートが繋がっていない。こりゃ、AXI-Liteと勘違いされているかもしれない。

f:id:msyksphinz:20170723164014p:plain

f:id:msyksphinz:20170723164233p:plain

ええええ。