Vivadoのインプリメンテーションをコマンドラインで実行する

FPGA

Vivado GUIのImplementationをコマンドラインから実行する場合の手順です。

Implementationをコマンドラインで実行する手順

まず、Vivado GUIで一通り動作するプロジェクトを作成してインプリメンテーションを実行します。この時、プロジェクトのディレクトリにインプリメンテーション用のTclファイルが生成されます。場所は、<プロジェクト名>.runs/impl_1/<トップモジュール名>.tclです。このファイルを参考に、コマンドライン実行用のTclファイルを作成します。

tclファイルの作成

インプリメンテーションの主な流れは

  • 合成結果の読み込み(add_files *.dcp)
  • .xdcの読み込み(read_xdc)
  • link_design
  • opt_design
  • place_design
  • route_design

です。実際のTclファイルは次の様になります。GUIで生成されたTclファイルを見ると、.xdcを読み込んでから processing_order属性を EARLYに設定しているようなので、同様の処理を追加しています。read_xdcは非常に重要です。例えばZedBoardの場合、IP Integratorで生成した.xdcの読み込みを忘れると、外部ピンが意図通りに設定されない場合がありました。

set PROJ_NAME polyphony
set PROJ_DIR .
set TOP_NAME zed_base_wrapper
set BD_IP_DIR ./${PROJ_NAME}.srcs/sources_1/bd/zed_base/ip

create_project -in_memory -part xc7z020clg484-1
set_property board_part em.avnet.com:zed:part0:1.3 [current_project]
set_property design_mode GateLvl [current_fileset]
set_property parent.project_path ${PROJ_DIR}/${PROJ_NAME}.xpr [current_project]
set_property ip_repo_paths ${PROJ_DIR}/${PROJ_NAME}.cache/ip [current_project]
set_property ip_output_repo ${PROJ_DIR}/${PROJ_NAME}.cache/ip [current_project]
# Synthesis result
add_files -quiet ${TOP_NAME}.dcp
# very important
read_xdc -prop_thru_buffers -ref zed_base_axi_gpio_0_0 -cells U0 ${BD_IP_DIR}/zed_base_axi_gpio_0_0/zed_base_axi_gpio_0_0_board.xdc
:(中略)
read_xdc user_const.xdc
# Link
link_design -top ${TOP_NAME} -part xc7z020clg484-1
# Opt
opt_design 
write_checkpoint -force ${TOP_NAME}_opt.dcp
report_drc -file ${TOP_NAME}_drc_opted.rpt
write_hwdef -force -file ${TOP_NAME}.hwdef
# Place
place_design 
write_checkpoint -force ${TOP_NAME}_placed.dcp
report_io -file ${TOP_NAME}_io_placed.rpt
report_utilization -file ${TOP_NAME}_utilization_placed.rpt -pb ${TOP_NAME}_utilization_placed.pb
report_control_sets -verbose -file ${TOP_NAME}_control_sets_placed.rpt
# Route
route_design 
write_checkpoint -force ${TOP_NAME}_routed.dcp
report_drc -file ${TOP_NAME}_drc_routed.rpt -pb ${TOP_NAME}_drc_routed.pb
report_timing_summary -warn_on_violation -max_paths 10 -file ${TOP_NAME}_timing_summary_routed.rpt -rpx ${TOP_NAME}_timing_summary_routed.rpx
report_power -file ${TOP_NAME}_power_routed.rpt -pb ${TOP_NAME}_power_summary_routed.pb
report_route_status -file ${TOP_NAME}_route_status.rpt -pb ${TOP_NAME}_route_status.pb
report_clock_utilization -file ${TOP_NAME}_clock_utilization_routed.rpt

実行

Vivadoコマンドプロンプトから次のコマンドを実行すると、インプリメンテーションが行われます。

vivado -m64 -mode batch -source implement.tcl

GUIでの結果確認

write_checkpointで保存した.dcpを読み込むと、結果を確認できます。

vivado -m64 zed_base_wrapper_routed.dcp
タイトルとURLをコピーしました