综合(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即可,或者在属性窗口中选中相应复选框。

Vivado使用技巧(22):综合策略与设置的选择相关推荐

  1. Vivado使用技巧(1):综合策略与设置的选择

    综合(Synthesis)是指将RTL设计转换为门级描述.Vivado开发套件中的综合工具是一款时序驱动型.专为内存使用率和性能优化的综合工具,支持System Verilog 2012.Verilo ...

  2. Vivado使用技巧(12):设置DCI与内部参考电压

    DCI与内部参考电压 Xilinx FPGA提供了DCI(Digitally Controlled Impedance)技术,包括两个功能:(1).控制驱动器的输出阻抗:(2).为驱动器或发送器添加一 ...

  3. VIVADO使用技巧(1):DDR3设置DCI与内部参考电压

    版权声明:本文为FPGADesigner原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:Vivado使用技巧(12):设置DCI与内部参考电压_FPGA ...

  4. 【vivado UG学习】Implementation策略学习

    目录 1 综合前的准备 1.1 Vivado Implementation 子过程 1.2 管理Implementation 1.2.1 工程模式和非工程模式 1.4 用约束引导Implementat ...

  5. Vivado使用技巧(26):HDL编写技巧

    在Vivado中进行HDL代码设计,不仅需要描述数字逻辑电路中的常用功能,还要考虑如何发挥Xilinx器件的架构优势.目前常用的HDL语言有三种.VHDL语言的优势有: 语法规则更加严格: 在HDL源 ...

  6. 【vivado UG学习】Synthesis策略学习

    目录 1.1 综合方法 1.2 使用Sythesis 1.2.1 Sythesis设置 1.2.2 创建运行策略 1.2.3 控制文件编译顺序 1.2 运行Synthesis 1.2.1 使用Tcl运 ...

  7. win7系统更改密码策略的设置方法

    win7的密码策略关系着我们的密码格式.密码需要的字符等,如果我们设置的密码策略太过复杂,可能会让我们在使用密码时非常麻烦,但是也会让我们的密码更难被入侵,那么win7系统如何更改密码策略呢?就此问题 ...

  8. 抖音 触摸精灵_抖音上超火的iPhone图标滑动技巧!还不知道怎么设置就out啦

    原标题:抖音上超火的iPhone图标滑动技巧!还不知道怎么设置就out啦 我们都知道现在手机里有很多好玩的功能,一些手机厂商会明着告诉你,作为手机的一大卖点.可有一些却偏偏像彩蛋一样,藏得很深,你不仔 ...

  9. 关于linux系统密码策略的设置

    由于工作需要最近需要将公司的多台linux服务器进行密码策略的设置,主要内容是增加密码复杂度. 操作步骤如下,不会的同学可以参考: 操作前需要掌握如下几个简单的知识点:(其实不掌握也行,不过学学没坏处 ...

最新文章

  1. linux ffmpeg加速和合并视频命令
  2. C语言将不固定的表达式转换为后缀表达式(附完整源码)
  3. 获取上传文件的后缀名
  4. python中的深拷贝与浅拷贝
  5. [转载]httpClient.execute抛Connection to refused异常问题
  6. mysql 多个密码登录_mysql 多实例登录密码测试
  7. C/C++混淆点-strcat和strcpy区别
  8. 求你了,别再说数据库锁的只是索引了!!!
  9. 【linux】WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
  10. 如何利用FineBI做财务分析
  11. HDU1572 下沙小面的(2)【全排列】
  12. Revit2018下载和安装教程
  13. VR与平板电脑高速PCB设计实战攻略
  14. 教大家怎么把百度网盘的分享链接共享出来
  15. 《云计算》shell高级编程-正则表达式
  16. 诚之和:“何同学同款”缺货!曾现身罗永浩薇娅直播间,乐歌的网红带货路
  17. c:forEach--------------JSTL
  18. ubuntu下安装三维渲染引擎OSG详解
  19. 【战国策】之《齐策·张仪为秦连横说齐王曰》
  20. ios禁用更新_如何为iOS应用启用或禁用自动更新

热门文章

  1. 有视频APP上线,一对一交友源码和抖音短视频源码稳步前行
  2. python人工智能开发语言_哪些编程语言最适合开发人工智能?
  3. 《中国人史纲》读书笔记:第四章 半信史时代 第五章 信史时代
  4. java button中文乱码_java解决中文乱码的几种写法
  5. VUE基本使用---安装、开始使用介绍、Vue实例、模板语法、计算属性和侦听器、class与style绑定
  6. 少说话多写代码之Python学习062——标准模块(random模块)
  7. OpenStack创建,分发并初始化rings
  8. error怎么开机 fan_电脑开机提示cpu fan error怎么解决
  9. 实施工程师mysql面试题_软件实施工程师面试题目
  10. I@de6ced(downloaded)