[vivado]メモ

Tclコマンド

llength [all_registers -rise_clock clk]clk立上り駆動レジスタ数の表示
check_timing -ver -file rep.ch_timing.txtcheck_timing結果をファイル出力
report_timing -delay max -file rep.max.txtsetupタイミングレポートをファイル出力
report_timing -delay min -file rep.min.txtholdタイミングレポートをファイル出力





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)

https://github.com/Digilent/vivado-boards/archive/master.zip

ここからダウンロードしたzipを解凍し、その中のnewフォルダ以下のデータを以下にコピーする。
C:\Xilinx\Vivado\2017.4\data\boards\board_files

[vivado]トラブルシューティング

[DRC NSTD-1] Unspecified I/O Standard: 4 out of 6 logical ports use I/O standard (IOSTANDARD) value 'DEFAULT', instead of a user assigned specific value.

[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 ]

カレンダー
06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード