1 Vivado开发技巧:综合策略与合适的编译顺序-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vivado开发技巧:综合策略与合适的编译顺序

454398 来源:FPGADesigner的博客 作者:FPGADesigner的博客 2020-12-29 14:07 次阅读

综合(Synthesis)是指将RTL设计转换为门级描述。Vivado开发套件中的综合工具是一款时序驱动型、专为内存使用率和性能优化的综合工具,支持System Verilog 2012、Verilog 2005、VHDL 2008、混合语言中的可综合子集,以及XDC设计约束文件(基于工业标准的SDC文件),此外还支持RTL属性来控制综合细节。

综合设置选项
在Flow Navigator中点击Settings,切换到Synthesis标签中:

1.Constraints部分
选择用于综合的约束集,一个约束集是一组XDC约束文件,默认选择状态为active的约束集。设计约束分两种:

物理约束:定义管脚布局、单元(如块RAM、查找表、触发器等)布局的的绝对或相对位置;

时序约束:定义设计的频率需求。如果没有时序约束,Vivado会根据布线长度和布局拥挤度优化设计。

2.Options部分
选择综合运行时使用的策略(strategy)。Vivado提供了几种预定义的策略,后文将讲述如何创建自定义策略。这里给出综合策略中每个设置选项的含义:

flatten_hierarchy:定义综合工具如何控制层次结构(比如模块之间的调用),选择将所有层次展开融为一体进行综合,还是分别独立综合再连接到一起。

none表示从不展开层次结构,综合输出与原始RTL有相同的层次;

full表示全部展开层次结构,只留下顶层;

rebuilt让综合工具展开层次结构后进行综合,综合后再按原始RTL重建层次结构。这样既保留了跨界优化的好处,又让最终层次结构与RTL类似,便于分析。

gated_clock_conversion:选择是否将门控时钟转换为使能信号。设计中应该避免使用门控时钟,需要的时钟信号应尽可能由MMCM/PLL产生。转换过程需要与RTL属性配合工作,具体在第24篇介绍。

bufg:设置综合工具可以从设计中推断出多少个BUFG。比如使用默认的12时,如果RTL中实例化了3个BUFG,那么综合工具最多还可以推测出9个没有明确实例化的BUFG。

fanout_limit:设置一个信号的最大驱动负载数量,如果超出了该限制,就会复制一个相同的逻辑来驱动超出的负载。这里只是一个总体设置,在RTL设计中还可以使用RTL属性进行更具体的设置,具体在第24篇介绍。

directive:设置Vivado综合运行时擦爱去的优化方式,具体包括

Default,默认设置。

RuntimeOptimized,执行最短时间的优化选项,会忽略一些RTL优化来减少综合运行时间。

AreaOptimized_high/medium,执行一些通用的面积优化。

AlternateRoutability,使用算法提高布线能力,减少MUXF和CARRY的使用。

AreaMapLargeShiftRegToBRAM,将大型的移位寄存器用块RAM来实现。

AreaMultThresholdDSP,会更多地使用DSP块资源。

FewerCarryChains,位宽较大的操作数使用查找表(LUT)实现,而不用进位链。

retiming:启用该功能,可以通过在组合门和LUT之间移动寄存器(达到寄存器平衡状态)提高内部时钟时序路径的电路性能。该功能会保留原来的功能和电路延迟,也不需要改变RTL源文件。

fsm_extraction:设置综合如何从设计中提取和映射有限状态机,具体在第24篇介绍。

keep_equivalent_registers:阻止合并有相同输入逻辑的寄存器。

resource_sharing:设置不同信号间共享算数操作符,选择为auto时设计会根据设计时序判断是否进行资源共享。

no_lc:选中会关闭LUT组合。

no_srlextract:选中该选项时,移位寄存器会用普通的寄存器实现,而不用FPGA内部专用的SRL资源。

max_bram:设置设计中运行使用的最大块RAM数量。通常当设计中有黑盒子或第三方网表时,使用该选项来节省空间。默认值为-1,表示允许使用该FPGA中所有的块RAM。

max_uram:设置设计中运行使用的最大UltraRAM数量(对于UltraScale架构FPGA而言)。-1,表示允许使用该FPGA中所有的UltraRAM。

max_dsp:设置设计中运行使用的最大DSP块数量。通常当设计中有黑盒子或第三方网表时,使用该选项来节省空间。默认值为-1,表示允许使用该FPGA中所有的DSP资源。

max_bram_cascade_height:设置可以将BRAM级联在一起的最大数量。

max_uram_cascade_height:设置可以将URAM级联在一起的最大数量。

cascade_dsp:设置在求DSP块输出总数时使用多少个加法器,默认计算时会使用块内部的加法器链。设置为tree会强制将该计算在fabric结构中实现。

no_timing_driven:禁用默认的时序驱动综合算法,这样可以减少综合运行时间,但会忽略综合中时序的影响。

sfcu:在单文件编译单元模式下运行综合。

assert:将VHDL中的assert状态纳入评估。失败或错误级别会停止综合进程并产生一个错误信息;警报级别会产生一个警告信息。

tcl.pre/tcl.post:选择tcl文件,在综合前和综合后会自动运行其中的命令。这两个文件应该放在相应的运行目录下,如project/project.runs/run_name。

创建综合策略
除了Vivado提供的配置好的综合策略外,还可以自行配置。在Settings中根据需要修改了设置选项后,点击右侧的Save strategy as按钮(如下图红框),会弹出窗口,填写策略名称和相关描述,即可保存为用户自定义的综合策略。综合策略列表的User defined strategies中即会出现自定义的综合策略。

在Settings->Tool Settings->Strategies中也可以设置综合策略,点击“+”即可新建策略。如果想在已有策略的基础上修改,则选中一个策略,点击上方的Copy Strategy按钮,User Defined Strategies中就会出现备份以供修改(Vivado提供的策略是不能修改的)。点击Apply应用配置后,综合策略列表中就会出现自定义的策略。

控制文件编译顺序
综合时必须选取合适的编译顺序,比如一个文件需要用到另一个文件中的相关申明。Vivado按照RTL文件的层次化结构编译文件,相关顺序显示在Sources窗口的Compile Order子窗口中(在底部选择切换)。

Vivado可以自动识别和设置最佳的顶层模块,同时自动管理编译顺序。顶层模块文件和该层次结构下所有的文件,都会以正确的顺序用于综合和仿真。Sources窗口的右键菜单->Hierarchy Update命令用于设置Vivado如何处理设计中文件的改动。

Automatic Update and Compile Order设定当源文件发生改动时,工具自动管理编译顺序,Compile Order窗口中将显示编译顺序,Hierarchy窗口中显示文件是否在层次结构中使用以及所处的位置。

Automatic Update, Manual Compile Order设定Vivado可以自动决定最佳顶层模块,但是允许人工设定编译顺序。在Compile Order窗口中拖动文件所处位置即可完成修改。

Vivado支持将Verilog(.v)或Verilog Header(.vh)文件作为全局`include文件。Vivado会在其它源文件前优先处理此类文件。选中需要添加的文件,右键->Set Global Include即可,或者在属性窗口中选中相应复选框。

o4YBAF9uJbqACBuPAAAsHRGDTjI188.png

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • vhdl
    +关注

    关注

    30

    文章

    817

    浏览量

    128118
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59759
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66470
收藏 人收藏

    评论

    相关推荐

    什么是MASH顺序?如何在射频合成器中确定合适的MASH顺序

    您能告诉我什么是 MASH 顺序以及如何确定合适的 MASH 顺序吗?
    发表于 11-12 06:16

    每次Vivado编译的结果都一样吗

    很多FPGA工程师都有这种困惑,Vivado每次编译的结果都一样吗? 在AMD官网上,有这样一个帖子: Are Vivado results repeatable for identical
    的头像 发表于 11-11 11:23 305次阅读
    每次<b class='flag-5'>Vivado</b><b class='flag-5'>编译</b>的结果都一样吗

    浅谈Vivado编译时间

    随着FPGA规模的增大,设计复杂度的增加,Vivado编译时间成为一个不可回避的话题。尤其是一些基于SSI芯片的设计,如VU9P/VU13P/VU19P等,布局布线时间更是显著增加。当然,对于一些设计而言,十几个小时是合理的。但我们依然试图分析设计存在的问题以期缩短
    的头像 发表于 09-18 10:43 883次阅读
    浅谈<b class='flag-5'>Vivado</b><b class='flag-5'>编译</b>时间

    Vivado 2024.1版本的新特性(2)

    综合角度看,Vivado 2024.1对SystemVerilog和VHDL-2019的一些特性开始支持。先看SystemVerilog。
    的头像 发表于 09-18 10:34 853次阅读
    <b class='flag-5'>Vivado</b> 2024.1版本的新特性(2)

    linux开发板如何编译curl

    在Linux开发板上编译 curl 库通常涉及到几个步骤,包括准备开发环境、下载源代码、配置编译选项以及执行编译和安装过程。以下是一个基本的
    的头像 发表于 08-30 15:33 596次阅读

    优化 FPGA HLS 设计

    上设计的。运行多个编译需要更多的计算能力。这是与时间的权衡。如果可以同时运行更多(使用云)综合策略,周转时间将会更短。 如何优化高级设计-Sobel 滤波器 Sobel 滤波器是视频处理中常
    发表于 08-16 19:56

    鸿蒙OpenHarmony【标准系统编译】 (基于RK3568开发板)

    DevEco Device Tool支持Rockchip RK3568开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂
    的头像 发表于 04-24 20:55 1265次阅读
    鸿蒙OpenHarmony【标准系统<b class='flag-5'>编译</b>】 (基于RK3568<b class='flag-5'>开发</b>板)

    鸿蒙OpenHarmony【小型系统编译】 (基于Hi3516开发板)

    DevEco Device Tool支持Hi3516DV300开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译
    的头像 发表于 04-23 15:53 511次阅读
    鸿蒙OpenHarmony【小型系统<b class='flag-5'>编译</b>】 (基于Hi3516<b class='flag-5'>开发</b>板)

    鸿蒙OpenHarmony【轻量系统编译】 (基于Hi3861开发板)

    DevEco Device Tool支持Hi3861V100开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译
    的头像 发表于 04-22 15:19 560次阅读
    鸿蒙OpenHarmony【轻量系统<b class='flag-5'>编译</b>】 (基于Hi3861<b class='flag-5'>开发</b>板)

    Vivado编译常见错误与关键警告梳理与解析

    Xilinx Vivado开发环境编译HDL时,对时钟信号设置了编译规则,如果时钟由于硬件设计原因分配到了普通IO上,而非_SRCC或者_MRCC专用时钟管脚上时,
    的头像 发表于 04-15 11:38 5311次阅读

    HighTec Tricore编译速度优化策略探讨

    HighTec在编译时默认是根据工程源文件文件架构首先生成makefile文件,然后执行“make makefile”指令来编译工程。
    的头像 发表于 04-10 12:44 2068次阅读
    HighTec Tricore<b class='flag-5'>编译</b>速度优化<b class='flag-5'>策略</b>探讨

    PLC顺序启动逆顺序停止电路如何运行

    了解了顺序启动电路,今天再来看看顺序启动逆顺序停止电路如何运行。
    发表于 04-09 14:13 759次阅读
    PLC<b class='flag-5'>顺序</b>启动逆<b class='flag-5'>顺序</b>停止电路如何运行

    详解OpenHarmony各部分文件在XR806上的编译顺序

    大家好,今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道,一提到编译可能大家会感到有点儿头疼,但请放心,我不会让大家头疼的。我们要明白,在开始写代码之前,了解整个程序的编译
    发表于 01-29 10:00

    如何禁止vivado自动生成 bufg

    定和可靠。Vivado编译设计过程中会自动检测到时钟信号,并自动生成BUFG来缓冲时钟。然而,在某些情况下,我们可能希望手动管理时钟信号。 要禁止Vivado自动生成BUFG,可以按照以下步骤进行
    的头像 发表于 01-05 14:31 2155次阅读

    如何构建linux开发环境和编译软件工程、应用程序

    前文介绍了如何使用官方提供的镜像文件启动开发板,本文将说明如何构建linux开发环境和编译软件工程、应用程序。
    的头像 发表于 01-03 12:31 2036次阅读
    如何构建linux<b class='flag-5'>开发</b>环境和<b class='flag-5'>编译</b>软件工程、应用程序