1.在project下的工程創(chuàng)建
#generate.tcl腳本中的目錄可以自行更改
set device xc7z045
set package fbg676
set speed -1
set part $device$package$speed
set prjName xxxxx
set prjDir ./$prjName
set srcDir ./Source
create_project $prjName $prjDir -part $part
add_files [glob $srcDir/hdl/*.v]
add_files [glob $srcDir/hdl/*.vh]
add_files [glob $srcDir/ip/*.xcix]
updata_complie_order -fileset sources_1
addfiles -fileset constrs_1 [glob $srcDir/xdc/*.xdc]
addfiles -fileset sim_1 [glob $srcDir/tb/*.v]
updata_complie_order -fileset sim_1
set_property strategy Flow_AreaOptimized_high [get_runs srnth_1]
set_property strategy Performance_Explore [get_runs impl_1]
launch_runs synth_1
wait_on_run synth_1
launch_runs impl_1 -to_step write_bitstream
wait_on_run impl_1
start_gui
#生成固化文件的方法
write_cfgmem -format mcs -interface SPIx4 -size 128 -loadbit {up 0x0 路徑.bit} -file 路徑.mcs
#如果你只是想創(chuàng)建工程文件,然后自己添加還沒寫的.v文件
set device xc7z045
set package fbg676
set speed -1
set part $device$package$speed
set prjName xxxxx
set prjDir ./$prjName
set srcDir ./Source
create_project $prjName $prjDir -part $part
file mkdir $prjDir/$prjName.srcs/sources_1/new
set fid [open $prjDir/$prjName..srcs/sources_1/new/xxx.v w]
close $fid
add_files $prjDir/$prjName.srcs.srcs/sources_1/new/xxx.v
#刪除文件
file delete -force ddr_nn1.v
export_ip_user_files -of_objects [get_files F:/FPGA/DDRTEST/DDRTEST.srcs/sources_1/new/ddr_nn1.v] -no_script -reset -force -quiet
remove_files F:/FPGA/DDRTEST/DDRTEST.srcs/sources_1/new/ddr_nn1.v
2.鉤子腳本
對于vivado的實現(xiàn)階段有以下步驟
1.設(shè)計初始化階段 init_design
2.設(shè)計優(yōu)化 opt_design 默認(rèn)執(zhí)行
3.功耗優(yōu)化 power_opt_design
4.布局 place_design 默認(rèn)執(zhí)行
5.布局后功耗優(yōu)化 power_opt_design(post_place_power_opt_design)
6.布局后物理優(yōu)化 phys_opt_design 默認(rèn)執(zhí)行
7.布線 route_design 默認(rèn)執(zhí)行
8.布線后物理優(yōu)化 post_route_phys_opt_design
那么綜合階段的鉤子腳本屬性為
SET.SYNTH_DESIGN.TCL.PRE
SET.SYNTH_DESIGN.TCL.POST
實現(xiàn)階段的鉤子腳本屬性有
SET.INIT_DESIGN.TCL.PRE
SET.INIT_DESIGN.TCL.POST
SET.OPY_DESIGN.TCL.PRE
SET.OPT_DESIGN.TCL.POST
可以發(fā)現(xiàn),是實現(xiàn)階段各個步驟的大寫,所以就不一一展開書寫
完整操作如下:
set_property SET.SYNTH_DESIGN.TCL.POST [get_files C:/report0.tcl -of [get_fileset utils_1]] [get_runs synth_1]
其中,get_files C:/report0.tcl -of [get_fileset utils_1]表示獲取utils_1下的C:/report0.tcl文件
3.Non-Project模式
設(shè)計流程如下:
1.設(shè)置基本參數(shù)
2.讀入設(shè)計源文件
3.對IP執(zhí)行OOC綜合操作
4.對整個設(shè)計進行綜合操作
5.執(zhí)行實現(xiàn)階段的各個子步驟
6.生成位流文件
1設(shè)置基本參數(shù)
#與Prioject模式很相似 run_v1.tcl
set device xc7z045
set package fbg676
set speed -1
set part $device$package$speed
set top wave_gen
set srcDir ./Source
set SynOutputDir ./SynOutputDir
set ImplOutputDir ./ImplOutputDir
set synDirective Default
set optDirective Default
set placeDirective Default
set phys0ptDirectiveAp Default
set routeDirective Default
set phys0ptDirectiveAr Default
set_param general.maxThreads 6
source run_read_src_v1.tcl
source run_synth_ip_v1.tcl
source run_synth_v1.tcl
source run_impl_v1.tcl
source run_bitstream_v1.tcl
2.讀入設(shè)計源文件
#run_read_src_v1.tcl
read_verilog [glob $srcDir/hdl/*.v]
read_verilog [glob $srcDir/hdl/*.vh]
read_edlf [glob $srcDir/netlist/*.edn]
read_ip [glob $srcDir/ip/*.xcix]
read_xdc [glob $srcDir/xdc/*.xdc]
link_design -top $top -part $part
3.對IP執(zhí)行OOC綜合操作
#run_synth_ip_v1.tcl
synth_ip [get_ips]
#synth_ip [get_ips chara-fifo]
#synth_ip [get_ips clk_core]
#表示只對指定IP進行ooc綜合(out_of_context)
4.對整個設(shè)計進行綜合操作
#run_synth_v1.tcl
synth_design -top $top -part $part -directive default
#top 指定頂層文件名 part指定FPGA型號 directive指定指令,這里是默認(rèn)
write_checkpoint -force $SynOutputDir/post_synth
#這里創(chuàng)建了post_synth.dcp文件,并且覆蓋了原有的post_synth.dcp文件
report_timing_summary -file $SynOutputDir/post_synth_timing_summary.rpt
report_utilization -file $SynOutputDir/post_synth_util.rpt
#生成了時序報告和資源利用率報告
5.執(zhí)行實現(xiàn)階段的各個子步驟
#run_impl_v1.tcl
#根據(jù)默認(rèn)執(zhí)行步驟,首先執(zhí)行的是設(shè)計優(yōu)化
opt_design -directive $optDirective
write_checkpoint -force $ImplOutputDir/post_opt
report_timing_summary -file $ImplOutputDir/post_opt_timing_summary.rpt
report_utilization -file $ImplOutputDir/post_opt_util.rpt
#然后是布局、布局后物理優(yōu)化、布線,只需將上面的opt改為place phys_opt route即可,不一一寫出
6.生成位流文件
#run_bitstream_v1.tcl
set_porperty CONFIG_MODE SPIx4 [current_design]
set_porperty BITSTREAM.CONFIG.CONFIGRATE 66 [current_design]
write_ bitstream -verbose -force -bin_file $ImplOutputDir/top.bit
#設(shè)置QSPI為四線模式,66MHz,同時生成.bin和.bit文件
7.將日志log文件保存到指定文件中
opt_design -directive Default > ./chech_opt.log
place_design -directive Default > ./chech_place.log
phys_design -directive Default > ./chech_phys.log
route_design -directive Default > ./chech_route.log
8.計算elapsed值
set start_time [clock format [clock seconds] -format "%s"]
place_design
set end_time [clock format [clock seconds] -format "%s"]
set place_elapse [clock format [expr $end_time - $start_time] -format "%H:%M:%S" -gmt true]
4.掃描策略
??掃描策略是一種時序收斂方法。掃描策略分為掃描綜合策略和掃描實現(xiàn)策略。在大多數(shù)情況下,掃描實現(xiàn)策略更為有效。
??掃描實現(xiàn)策略實際上就是掃描不同的-directive值。
??在Non-Project模式下,通常有5中掃描方式:文章來源:http://www.zghlxwxcb.cn/news/detail-667874.html
模式0:只掃描place_design的-directive值(此時需要提供opt_design生成的.dcp)
模式1:只掃描route_design的-directive值(此時需要提供place_design生成的.dcp)
模式2:順序掃描方式,即先提供place_design、phys_opt_design、route_design的-directive組合,然后進行掃描
模式3:先掃描place_design下的-directive值,從中獲取WNS最好的情形,然后執(zhí)行phys_opt_design,并在此基礎(chǔ)上,掃描route_design的-directive值
模式4:交織掃描方式,即每一個place_design的-directive值和route_design的-directive值構(gòu)成一個掃描對
??獲取WNS和WHS的命令:文章來源地址http://www.zghlxwxcb.cn/news/detail-667874.html
set tps [get_timing_paths -max_paths 100 -setup]
set wns [get_property SLACK [lindex $tps 0]]
set tph [get_timing_paths -max_paths 100 -hold]
set whs [get_property SLACK [lindex $tph 0]]
到了這里,關(guān)于tcl學(xué)習(xí)之路(二)(vivado設(shè)計流程管理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!