[vivado]メモ
llength [all_registers -rise_clock clk] | clk立上り駆動レジスタ数の表示 | |
check_timing -ver -file rep.ch_timing.txt | check_timing結果をファイル出力 | |
report_timing -delay max -file rep.max.txt | setupタイミングレポートをファイル出力 | |
report_timing -delay min -file rep.min.txt | holdタイミングレポートをファイル出力 |
Tclフロー
Digilent社ZYBO revBで、TCLスクリプトで操作してみた。
Vivado 2017.4起動
> TclコンソールでプロジェクトDIRへ移動。
例えば、cd work/zybo/hoge/
> Tclコンソールで source zybo.tcl を実行。
これで、Vivado起動した状態から、ZYBOへの.bitプログラムまで自動で行える。
サンプル回路は単なるLEDチカチカ。
<zybo.tclの内容>
close_project -quiet
set outputDir .
#---------------------------------------------------------
# read rtl
#---------------------------------------------------------
read_verilog cnt.v
#---------------------------------------------------------
# synthesis
#---------------------------------------------------------
synth_design -top cnt -part xc7z010clg400-1
report_timing_summary -file $outputDir/post_synth_timing_summary.rpt
report_utilization -file $outputDir/post_synth_util.rpt
set_property -dict [list PACKAGE_PIN {L16} IOSTANDARD {LVCMOS33}] [get_ports clk ] ; # oscillator
set_property -dict [list PACKAGE_PIN {Y16} IOSTANDARD {LVCMOS33}] [get_ports reset ] ; # button 1
# set_property -dict [list PACKAGE_PIN {V16} IOSTANDARD {LVCMOS33}] [get_ports ] ; # button 2
# set_property -dict [list PACKAGE_PIN {P16} IOSTANDARD {LVCMOS33}] [get_ports ] ; # button 3
# set_property -dict [list PACKAGE_PIN {R18} IOSTANDARD {LVCMOS33}] [get_ports ] ; # button 4
set_property -dict [list PACKAGE_PIN {D18} IOSTANDARD {LVCMOS33}] [get_ports led[0] ] ; # LED 1
set_property -dict [list PACKAGE_PIN {G14} IOSTANDARD {LVCMOS33}] [get_ports led[1] ] ; # LED 2
set_property -dict [list PACKAGE_PIN {M15} IOSTANDARD {LVCMOS33}] [get_ports led[2] ] ; # LED 3
set_property -dict [list PACKAGE_PIN {M14} IOSTANDARD {LVCMOS33}] [get_ports led[3] ] ; # LED 4
#---------------------------------------------------------
# timing constraint
#---------------------------------------------------------
create_clock -period 20 [get_ports clk ]
#---------------------------------------------------------
# place
#---------------------------------------------------------
opt_design
place_design
report_clock_utilization -file $outputDir/clock_util.rpt
#---------------------------------------------------------
# opt after place
#---------------------------------------------------------
if {[get_property SLACK [get_timing_paths -max_paths 1 -nworst 1 -setup]] < 0} {
puts "Found setup timing violations => running physical optimization"
phys_opt_design
}
report_utilization -file $outputDir/post_place_util.rpt
report_timing_summary -file $outputDir/post_place_timing_summary.rpt
#---------------------------------------------------------
# route
#---------------------------------------------------------
route_design
#write_checkpoint -force $outputDir/post_route.dcp
report_route_status -file $outputDir/post_route_status.rpt
report_timing_summary -file $outputDir/post_route_timing_summary.rpt
report_power -file $outputDir/post_route_power.rpt
report_drc -file $outputDir/post_imp_drc.rpt
write_verilog -force $outputDir/cnt_impl_netlist.v -mode timesim -sdf_anno true
#---------------------------------------------------------
# generate bitstream
#---------------------------------------------------------
write_bitstream -force $outputDir/cnt.bit
#---------------------------------------------------------
# program
#---------------------------------------------------------
open_hw
connect_hw_server
open_hw_target {localhost:3121/xilinx_tcf/Digilent/210279A78FE1A}
#INFO: [Labtoolstcl 44-466] Opening hw_target localhost:3121/xilinx_tcf/Digilent/210279A78FE1A
current_hw_device [get_hw_devices xc7z010_1]
refresh_hw_device -update_hw_probes false [lindex [get_hw_devices xc7z010_1] 0]
#INFO: [Labtools 27-1434] Device xc7z010 (JTAG device index = 1) is programmed with a design that has no supported debug core(s) in it.
# INFO: [Labtools 27-2285] Connecting to hw_server url TCP:localhost:3121
set_property PROBES.FILE {} [get_hw_devices xc7z010_1]
set_property FULL_PROBES.FILE {} [get_hw_devices xc7z010_1]
set_property PROGRAM.FILE {C:/user/work/zybo/ether/ether.runs/impl_1/cnt.bit} [get_hw_devices xc7z010_1]
program_hw_devices [get_hw_devices xc7z010_1]
# INFO: [Labtools 27-3164] End of startup status: HIGH
refresh_hw_device [lindex [get_hw_devices xc7z010_1] 0]
Kintex-7 xc7k160tffg676-2
7 Series FPGAs Packaging and Pinout
https://www.xilinx.com/support/documentation/user_guides/ug475_7Series_Pkg_Pinout.pdf
作業フォルダのデフォルト位置変更
デスクトップのアイコン「Vivado 2017.4」
> 右クリック > プロパティ
> 作業フォルダー
旧: %APPDATA%\Xilinx\Vivado
新: C:\user
に変更した。
これでアイコンから起動した際、Tcl consoleでpwdすると、カレントフォルダがC:\userになってる。
Device ManagerがunconnectedでProgramできない
Auto Connectしてもすぐにdisconnectされる。
ZYBOの電源をOFF -> ONしたら、Auto Connectでconnectされるようになり、Program Deviceのリンクも表示された。
[vivado]ZYBO(1)
ここからダウンロードしたzipを解凍し、その中のnewフォルダ以下のデータを以下にコピーする。
C:\Xilinx\Vivado\2017.4\data\boards\board_files
[vivado]トラブルシューティング
[DRC UCIO-1] Unconstrained Logical Port: 4 out of 6 logical ports have no user assigned specific location constraint (LOC).
https://japan.xilinx.com/support/answers/56354.html
https://github.com/Digilent/digilent-xdc/Zybo-Master.xdc
これを使う事でエラー消えた。おそらく自作したxdcのI/O電圧設定が間違っていたようだ。
RTSTAT #1 The design is completely unrouted. Please run tcl command route_design.
I/O Planning用プロジェクトでピン配置後に出たエラー。
https://www.xilinx.com/support/documentation/sw_manuals_j/xilinx2014_1/ug899-vivado-io-clock-planning.pdf
これ見ると、I/O配置はRTLプロジェクトとは別にやる?ように書いてあるが。。。
こちらもZybo-Master.xdcを使って、RTLプロジェクトでxdc指定してインプリまで行ったら、こんなエラーは出ずに
bitstreamのダウンロードまで行けた。
ERROR: [Vivado 12-1411] Cannot set LOC property of ports, Could not legally place instance clk_lvds at F6 (IPAD_X1Y46)
IBUFDS_LVDS_25 clk_lvds ( .O(clk_in), .I(clk_p), .IB(clk_n) );
と書いて、Tclウィンドウで以下やったらエラー。
set_property PACKAGE_PIN F6 [get_ports clk_p ]
Kintex-7のMGTREFCLKの端子では、IBUFDS_GTE2を使うべき?みたい。
IBUFDS_GTE2 clk_lvds ( .O(clk_in), .I(clk_p), .IB(clk_n) );
ERROR: [Vivado 12-1815] Setting property 'IOSTANDARD' is not allowed for GT terminals.
Tclウィンドウでsourceした.tclの中でこれ書いたらエラー。
# set_property IOSTANDARD LVDS [get_ports clk_p ]
以下のようにしたらエラー無し。
set_property -dict [list PACKAGE_PIN {E13} IOSTANDARD {LVCMOS33}] [get_ports reset_n]
ERROR: [Common 17-69] Command failed: 'F6 ' is not a valid site or package pin name.
これやるとエラー。
set_property -dict [list PACKAGE_PIN {F6 } IOSTANDARD {LVDS }] [get_ports clk_p ]