tcl学习之路(二)(vivado设计流程管理)

这篇具有很好参考价值的文章主要介绍了tcl学习之路(二)(vivado设计流程管理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.在project下的工程创建

#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
#如果你只是想创建工程文件,然后自己添加还没写的.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的实现阶段有以下步骤
1.设计初始化阶段 init_design
2.设计优化 opt_design 默认执行
3.功耗优化 power_opt_design
4.布局 place_design 默认执行
5.布局后功耗优化 power_opt_design(post_place_power_opt_design)
6.布局后物理优化 phys_opt_design 默认执行
7.布线 route_design 默认执行
8.布线后物理优化 post_route_phys_opt_design

那么综合阶段的钩子脚本属性为
SET.SYNTH_DESIGN.TCL.PRE
SET.SYNTH_DESIGN.TCL.POST
实现阶段的钩子脚本属性有
SET.INIT_DESIGN.TCL.PRE
SET.INIT_DESIGN.TCL.POST
SET.OPY_DESIGN.TCL.PRE
SET.OPT_DESIGN.TCL.POST
可以发现,是实现阶段各个步骤的大写,所以就不一一展开书写
完整操作如下:
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模式

设计流程如下:
1.设置基本参数
2.读入设计源文件
3.对IP执行OOC综合操作
4.对整个设计进行综合操作
5.执行实现阶段的各个子步骤
6.生成位流文件

1设置基本参数
#与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.读入设计源文件
#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执行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.对整个设计进行综合操作
#run_synth_v1.tcl
synth_design -top $top -part $part -directive default
#top 指定顶层文件名 part指定FPGA型号 directive指定指令,这里是默认
write_checkpoint -force $SynOutputDir/post_synth
#这里创建了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.执行实现阶段的各个子步骤
#run_impl_v1.tcl
#根据默认执行步骤,首先执行的是设计优化
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
#然后是布局、布局后物理优化、布线,只需将上面的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
#设置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.扫描策略

  扫描策略是一种时序收敛方法。扫描策略分为扫描综合策略和扫描实现策略。在大多数情况下,扫描实现策略更为有效。
  扫描实现策略实际上就是扫描不同的-directive值。
  在Non-Project模式下,通常有5中扫描方式:

模式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最好的情形,然后执行phys_opt_design,并在此基础上,扫描route_design的-directive值
模式4:交织扫描方式,即每一个place_design的-directive值和route_design的-directive值构成一个扫描对

  获取WNS和WHS的命令:文章来源地址https://www.toymoban.com/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]]

到了这里,关于tcl学习之路(二)(vivado设计流程管理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vivado运行官方提供的tcl脚本

            Xilinx官方提供了很多Demo工程,其中多数以tcl脚本的形式提供给我们,这就需要我们手动运行该tcl脚本,自动生成并编译官方Demo工程。         但是怎么在Vivado中将官方提供的tcl脚本跑起来,这里博主经过一段时间的摸索,将经验进行简单总结,如果过Linux使用经验

    2024年02月11日
    浏览(48)
  • 在vivado中使用tcl脚本(UG894)

    本文源自UG894,主要介绍如何在vivado中使用tcl脚本 vivado中任何自带的命令都可以通过“-help”获取帮助信息。 也可以直接输入“help”取得vivado命令合集,并通过“help -category (tools)”来获取某类操作的所有命令简介。 该过程可以通过运行GUI vivado自动产生的记录文件vivado.jou查

    2023年04月08日
    浏览(79)
  • Vivado时序约束TCL命令——获取引脚(get_pins)在FPGA设计中起着重要作用。本文将为大家详细介绍get_pins命令的语法和使用方法。

    Vivado时序约束TCL命令——获取引脚(get_pins)在FPGA设计中起着重要作用。本文将为大家详细介绍get_pins命令的语法和使用方法。 get_pins命令用于获取指定对象(Object)的引脚(Pin)列表。我们可以使用get_pins来获取具有特定命名约定的引脚(如CLOCK、RESET等),并通过对这些引

    2024年02月05日
    浏览(47)
  • Vivado block design 导出与导入(tcl文件的生成与载入)

    摘要:Vivado block design 导出与导入 主要步骤:open block design —— File —— Export —— Export block design open block design File —— Export —— Export block design 将block design 保存到自己想要的位置,然后在Tcl console中使用tcl命令,直接source   我在source的时候会遇到版本不一致的问题,这个

    2024年02月11日
    浏览(40)
  • FPGA:Vivado流水灯设计详细流程(1)

    基于Vivado的FPGA设计开发的流程主要包括以下步骤: 1)创建工程; 2)创建源设计文件,包括Verilog文本、IP核、模块文件、网表输入等方式; 3)行为仿真(Behavioral Simulation),Vivado自带仿真器,也可以选择第三方仿真软件ModelSim等工具进行仿真; 4)综合(Synthesis):根据设

    2024年02月03日
    浏览(44)
  • vivado I/O和时钟规划设计流程步骤

    I/O和时钟规划设计流程步骤 下图显示了左侧的项目设计流程步骤。水平箭头表示项目设计流程中可以执行I/O和时钟规划的点。中的步骤I/O和时钟规划设计流程如右图所示。 项目设计流程从一个空的I/O规划项目、RTL设计项目或合成后网表项目。使用这些项目类型中的任何一种

    2024年01月24日
    浏览(28)
  • FPGA 学习笔记:Vivado 工程管理技巧

    当前使用 Xilinx 的 FPGA,所以需要熟悉 Xilinx FPGA 的 开发利器 Vivado 的工程管理方法 这里初步列举一些实际 Xilinx FPGA 开发基于 Vivado 的项目使用到的工程的管理技巧 做过嵌入式软件或者其他软件开发的工程技术人员,都会想到使用代码管理工具,如 SVN 、Git 等对代码进行管理

    2024年02月09日
    浏览(37)
  • vivado中的FPGA时钟管理单元PLL学习记录

    FPGA中时钟管理模块(CMT)包括PLL和MMCM,用于将时钟倍频(比如输入时钟25M,我们要产生50M时钟)、分频(在不影响系统功能的前提下,较低的工作时钟,能够降低系统功耗)、改变相位偏移或占空比等。 当需要上板时,由于板上晶振时钟固定,所以其他频率的时钟产生就要用到

    2024年01月16日
    浏览(48)
  • Python学习之路-内存管理

    Python的内存管理机制可以总结为:引用计数、垃圾回收、内存池。 引用计数是一种非常高效的内存管理手段, 当一个 Python 对象被引用时其引用计数增加 1, 当其不再被一个变量引用时则计数减 1. 当引用计数等于 0 时对象被删除。 引用计数 引用计数也是一种垃圾收集机制,

    2024年01月21日
    浏览(93)
  • FPGA入门学习笔记(十)Vivado设计状态机实现UART多字节数据发送

    使用串口发送5个字节数据到电脑 1、ADC采样的结果为12位,如何使用串口发送 2、16位数据,如何通过串口发送 3、多个字节的数据,如何通过串口发送 UART规定,发送的数据位只能有6、7、8位,若直接修改发送位数,接收模块将不适配。 两种情况: 1、没有开始发送(上一次的

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包