XilinxのIP生成およびそのインテグレーションの方法って、ネット上にもほとんど情報が出ていなくて、みんなどうやってやってるんだと不思議に思いながら調査しているのだけれども。
Block Designを使わない場合はみんなソースファイルを突っ込んで合成しているだけなのかもしれないが、そうでない場合はBlock Designに結合して、AXIバスか何かで接続できるIPを作らないと接続できない。 このためのフローがネット上に情報公開されて無さ過ぎる。
とりあえず下記の資料を読みながら進めていたのだけれども、
- システムレベルデザイン入力
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を生成していた。
さらに、生成した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と勘違いされているかもしれない。
ええええ。