Vivado使用(1)——综合的约束与策略

目录

一、概述

二、约束与策略

2.1 约束

2.1.1 物理约束

2.1.2 时序约束

2.2 综合策略

2.2.1 flatten_hierarchy

2.2.2 gated_clock_conversion

2.2.3 bufg

2.2.4 fanout_limit

2.2.5 directive

2.2.6 retiming

2.2.7 fsm_extraction

2.2.8 keep_equivalent_registers

2.2.9 resource_sharing

2.2.10 control_set_opt_threshold

2.2.11 no_lc

2.2.12 no_srlextract

2.2.13 sherg_min_size

2.2.14 max_bram

2.2.15 max_uram

2.2.16 max_dsp

2.2.17 max_bram_cascade_height

2.2.18 max_uram_cascade_height

2.2.19 cascade_dsp

三、控制文件编译顺序 

3.1 自动更新与编译顺序

3.2 如何在综合前修改编译顺序


一、概述

        综合是将寄存器传输级(RTL)描述的设计转换成门级表示的过程。Xilinx® Vivado® 综合是以时序为驱动的,针对内存使用和性能进行了优化。Vivado 综合支持以下硬件描述语言的可综合子集:

  • SystemVerilog:符合 IEEE 标准的 SystemVerilog——统一硬件设计、规范和验证语言(IEEE Std 1800-2012)
  • Verilog:符合 IEEE 标准的 Verilog 硬件描述语言(IEEE Std 1364-2005)
  • VHDL:符合 IEEE 标准的 VHDL 语言(IEEE Std 1076-2002)
  • 混合语言:Vivado 也支持 VHDL、Verilog 和 SystemVerilog 的混合使用

        此外,Vivado 工具还支持基于行业标准的 Synopsys Design Constraints (SDC) 的 Xilinx® 设计约束(XDC)。XDC 使设计者能够精确地指定时钟定义、时序约束和其他设计参数,以优化综合结果和满足特定的性能要求。

通过使用 Vivado 综合工具,设计者可以:

  • 分析和优化:自动分析 RTL 代码并优化逻辑以提高性能和降低资源使用
  • 时序驱动的优化:基于时序约束进行优化,确保设计满足时钟频率和时序要求
  • 资源优化:通过智能资源分配和重用减少 FPGA 上所需的逻辑和存储资源
  • 支持多语言设计:支持使用多种硬件描述语言进行设计,提供灵活性以利用每种语言的特定优势
  • 约束驱动的设计流程:使用 XDC 指定的设计约束来引导综合过程,实现特定的设计目标

        Vivado 综合工具的这些特性使其成为针对 Xilinx FPGA 设计和优化的强大工具,帮助设计者实现复杂的数字设计,同时满足严格的性能和资源约束。

二、约束与策略

        打开vivado设置中和综合相关的界面,可以看到如下情况:分成3个部分,分别是约束(Constraints)、报告(Report Options)和综合策略选项(Options)。这里我们主要关注约束和综合策略选项这两个部分。

2.1 约束

        在 Vivado 设计套件中,约束集是一组包含设计约束的文件,这些约束通过 Xilinx 设计约束(XDC)文件来捕获,并且可以应用到您的设计中。选择默认约束集作为活动约束集意味着这组约束将被用来引导和优化设计的综合和布局布线(Place & Route)过程。设计约束分为两类:

2.1.1 物理约束

        物理约束定义了引脚布局以及单元格(如块 RAM、查找表(LUTs)、触发器(Flip-Flops)和设备配置设置)的绝对或相对布局。这类约束对于确保设计满足特定的物理实现要求非常重要,包括但不限于:

  • 引脚位置:指定设计中的信号应该映射到 FPGA 芯片上的哪个引脚上。
  • 单元布局:控制特定逻辑或存储单元在 FPGA 上的物理位置,可以是相对于其他元件的位置,也可以是绝对位置。
  • 设备配置:设定 FPGA 设备的配置参数,如电源设置等。

2.1.2 时序约束

        时序约束定义了设计的频率要求。在没有时序约束的情况下,Vivado 设计套件仅根据连线长度和布局拥挤度来优化设计。时序约束对于确保设计能够在目标频率下正常工作至关重要,包括:

  • 时钟定义:指定设计中的时钟信号及其频率。
  • 时钟域交叉:设置数据从一个时钟域传输到另一个时钟域的约束,以确保数据的稳定性和正确性。
  • 输入/输出延迟:定义信号从外部世界进入 FPGA 或从 FPGA 输出到外部世界所允许的时间窗口。
  • 假设和例外:指定设计中的某些路径可能不需要遵循普通的时序要求,例如多周期路径或禁止的路径。

        通过在 Vivado 中正确设置和应用这些约束,设计者可以确保他们的设计满足既定的性能标准和物理实现要求,从而实现既高效又符合目标规格的 FPGA 设计。

2.2 综合策略

        vivado运行设计者对于综合的策略进行部分定制。具体的可定制内容如下:

2.2.1 flatten_hierarchy

        –flatten_hierarchy 是 Vivado 合成工具中的一个选项,用于控制设计层次结构的展平。层次结构展平是合成过程中的一个步骤,可以将设计中的模块和子模块展开为一个平面结构,而不是保持它们的原始层次结构。这个选项通常有几种设置,每种设置对合成结果和设计的可管理性有不同的影响:

  • none:表示不展开层次结构,综合输出保留设计中的原有层次结构。
  • full:表示全部展开层次结构,只留下顶层;
  • rebuilt:表示综合工具展开层次结构后进行综合,综合后再按原始RTL重建层次结构。这样既保留了跨界优化的好处,又让最终层次结构与RTL类似,便于分析。

2.2.2 gated_clock_conversion

  –gated_clock_conversion 是 Vivado 合成工具中的一个选项,用于控制门控时钟(gated clocks)到时钟使能(clock enable)信号的转换过程。门控时钟通常是通过在时钟路径上使用逻辑门(例如 AND 门或 OR 门)来动态控制时钟信号的传输,以减少功耗或实现特定的时序需求。然而,在 FPGA 设计中,过度使用门控时钟可能会导致时序分析复杂化,增加设计的难度,并可能影响性能。

        使用 –gated_clock_conversion 选项,设计者可以指示合成工具将设计中的门控时钟结构转换为使用时钟使能信号的结构。这种转换的主要目的是简化时序分析和提高设计的可靠性,同时仍然实现减少功耗的目标。

2.2.3 bufg

        在 Vivado 设计工具中,–bufg 选项实际上用于控制工具在设计中推断(或自动实例化)的全局缓冲器(BUFG)的数量。这个选项在综合过程中特别有用,尤其是当设计的网表中的其他 BUFG 对综合工具不可见时。通过使用这个选项,设计者可以指导综合工具在必要时自动添加 BUFG 实例,以确保全局时钟和关键信号在 FPGA 内部得到适当的分配。

        假设 –bufg 选项被设置为 12,而在 RTL 中已经实例化了三个 BUFG,综合工具将推断最多九个额外的 BUFG。这意味着综合工具会根据需要和可用资源,自动在设计中添加最多九个 BUFG 实例,以确保时钟和其他关键信号的有效分配。

        使用 –bufg 选项时,设计者需要了解自己设计中的时钟需求和全局信号的分布情况。虽然综合工具能够自动推断 BUFG 的使用,但是合理的设计和约束指定依然是确保设计成功的关键。例如,在 Vivado 的 TCL 脚本或合成命令中指定 –bufg 选项,可以帮助控制全局缓冲资源的使用,但这需要与设计的实际时钟架构和性能要求相匹配。

2.2.4 fanout_limit

        设置一个信号的最大驱动负载数量,如果超出了该限制,就会复制一个相同的逻辑来驱动超出的负载。

2.2.5 directive

        这个选项替代了之前的 effort_level 选项。通过指定不同的优化级别,它控制 Vivado 合成执行不同的优化策略。

  • Default:默认设置,提供平衡的优化策略。
  • RuntimeOptimized:执行最短时间的优化选项,会忽略一些RTL优化来减少综合运行时间。
  • AreaOptimized_high/medium:执行一些通用的面积优化。
  • AlternateRoutability:使用算法提高布线能力,减少MUXF和CARRY的使用。
  • AreaMapLargeShiftRegToBRAM:将大型的移位寄存器用块RAM来实现。
  • AreaMultThresholdDSP:会更多地使用DSP块资源。
  • FewerCarryChains:位宽较大的操作数使用查找表(LUT)实现,而不用进位链。

2.2.6 retiming

        重定时(Retiming)是一种强大的逻辑优化技术,它在不改变电路原有功能和延迟的前提下,通过在组合逻辑和查找表(LUT)之间移动寄存器来优化电路的性能。这项技术的主要目的是改善内部时钟的时序路径,从而提高电路的工作频率或减少所需的资源。

重定时通过以下方式改善电路性能:

  • 减少关键路径延迟:通过将寄存器从组合逻辑区域的一端移动到另一端,可以减少关键时序路径上的逻辑延迟,从而提高电路的工作频率。
  • 寄存器平衡:通过智能地重新分布寄存器,以平衡电路中的寄存器分布,这有助于均匀地分配时延,提高时钟频率和电路的稳定性。
  • 提高性能:可以显著提升设计的最大工作频率,使电路能够在更高的时钟速率下稳定工作。
  • 节省资源:在某些情况下,通过重定时可以减少总体所需的寄存器数量,从而节省 FPGA 内的资源。
  • 无需修改 RTL 源文件:重定时是在综合阶段进行的优化,不需要手动修改 RTL 代码,这使得它成为提高电路性能的一个低成本且高效的方法。

2.2.7 fsm_extraction

        这个选项控制合成过程中有限状态机(FSM)的提取和映射方式。可以通过不同的编码策略来优化 FSM 的实现。

        Vivado 的 –fsm_extraction 选项通常包括以下几种设置:

  • None:不执行 FSM 提取。这意味着设计中的状态机将不会被作为特殊结构识别和优化。
  • Auto(默认):合成工具自动识别和提取 FSM,然后根据内部算法优化它们。这个选项旨在平衡性能和资源使用,适用于大多数情况。
  • Onehot、Sequential、Gray、Johnson 等:这些值指示合成工具使用特定的状态编码方式。选择合适的编码方式对于减少所需的逻辑资源和优化性能至关重要。

        FSM 编码方式如下:

  • Onehot:每个状态由一个单独的寄存器位表示,适用于状态转换简单的 FSM,可以减少状态解码逻辑,但可能会增加寄存器使用。
  • Sequential(二进制编码):状态以二进制形式编码,这种方式在状态数较多时节省寄存器,但可能需要更复杂的状态转换逻辑。
  • Gray:状态以格雷码(Gray code)编码,每次状态转换只改变一个位,有助于减少状态转换时的瞬态错误。
  • Johnson:采用约翰逊计数器编码方式,状态转换时位的变化是循环的,适用于特定的应用场景。

2.2.8 keep_equivalent_registers

        防止具有相同输入逻辑的寄存器被合并。这对于保持设计中特定的寄存器结构可能很有用,例如,当需要保留特定的时序或功能行为时。

2.2.9 resource_sharing

        设置不同信号之间算术运算符的共享策略。

  • auto:根据设计的时序自动决定是否进行资源共享。
  • on:始终开启资源共享。
  • off:始终关闭资源共享。

2.2.10 control_set_opt_threshold

        control_set_opt_threshold 用于设置触发优化的控制集数量的阈值。控制集通常指的是共享相同的时钟、复位、使能信号集合的一组寄存器。这个选项影响的是时钟使能优化,特别是在处理寄存器的 D 逻辑时的行为。        

        control_set_opt_threshold 的主要目的是优化 FPGA 设计中的时钟使能逻辑。在特定阈值以下,合成和实现工具将尝试将控制信号集成到寄存器的 D 逻辑中,以减少所需的控制集数量。这种优化可以减少所需的资源并可能改善时序性能。

2.2.11 no_lc

        当选中此选项时,关闭查找表(LUT)组合。这可以防止合成工具在尝试减少 LUT 使用时合并 LUT,可能用于特定的设计约束或优化目的。

2.2.12 no_srlextract

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

2.2.13 sherg_min_size

        sherg_min_size选项用于设置在合成过程中考虑进行移位寄存器优化的最小触发器链长度。这个选项允许用户定义一个阈值,只有当触发器链的长度达到或超过这个阈值时,合成工具才会尝试将这些触发器优化为移位寄存器(Shift Register LUT, SRL)。这种优化可以减少资源消耗,并可能提高性能。

2.2.14 max_bram

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

2.2.15 max_uram

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

2.2.16 max_dsp

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

2.2.17 max_bram_cascade_height

        设置可以将BRAM级联在一起的最大数量。BRAM 级联是指在 FPGA 设计中串联多个 BRAM 单元以形成更大的存储结构的技术。这种串联可以提高存储效率和访问速度,但也可能增加信号传播延迟和资源消耗。

2.2.18 max_uram_cascade_height

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

2.2.19 cascade_dsp

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

        对于综合来说,很多时候设计者不会考虑这么多,因此vivado给出了一些默认的设置:

三、控制文件编译顺序 

        在 Vivado IDE 中,处理源文件的编译顺序是很重要的,尤其是当一个文件依赖于另一个文件中的声明时。为了确保依赖关系得到正确处理,编译顺序必须精确控制。幸运的是,Vivado 工具能够自动识别最佳的顶层模块候选,并自动管理编译顺序。这意味着顶层文件和所有在活动层次结构下的源文件都会以正确的顺序传递给综合和仿真。

3.1 自动更新与编译顺序

        Vivado 的默认设置,“自动更新和编译顺序”(Automatic Update and Compile Order),允许工具自动管理编译顺序,并在“层次结构”(Hierarchy)窗口中显示哪些模块被使用以及它们在层次树中的位置。当你更改源文件时,编译顺序会自动更新。

3.2 如何在综合前修改编译顺序

        如果需要在综合前手动指定编译顺序,可以按照以下步骤操作:

  1. 设置“层次结构更新”(Hierarchy Update)> “自动更新,手动编译顺序”(Automatic Update, Manual Compile Order),这样 Vivado IDE 会自动确定设计的最佳顶层模块,并允许手动指定编译顺序。
  2. 在“源文件”(Sources)窗口的弹出菜单中,可以通过拖放文件在“编译顺序”(Compile Order)窗口中排列编译顺序,或使用“上移”(Move Up)或“下移”(Move Down)命令调整文件顺序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/778292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NineData与StarRocks商业化运营公司镜舟科技完成产品兼容认证

近日,镜舟科技与NineData完成产品兼容测试。在经过联合测试后,镜舟科技旗下产品与NineData云原生智能数据管理平台完全兼容,整体运行高效稳定。 镜舟科技致力于帮助中国企业构建卓越的数据分析系统,打造独具竞争力的“数据护城河”…

【python 数据可视化】 WordCloud词云图

目录 词云简介 准备工作 安装方法一: 安装方法二: 生成词云步骤 数据预处理: 分词: 统计词频出现的次数: 去除词语: 生成词云: 显示词云: 保存词云: 完整代码 词…

AugmentedReality之路-通过蓝图启动AR相机(2)

本文实现打开AR相机和关闭AR相机功能,在主界面点击Start AR按钮后打开AR相机,在主界面点击Stop AR按钮后关闭AR相机 1、启动AR相关插件 通过Edit->Plugins启用AugmentedReality下面的所有插件 2、自定义Pawn 在Content->ARBase目录右键&…

iOS开发进阶(十一):ViewController 控制器详解

文章目录 一、前言二、UIViewController三、UINavigationController四、UITabBarController五、UIPageViewController六、拓展阅读 一、前言 iOS 界面开发最重要的首属ViewController和View,ViewController是View的控制器,也就是一般的页面,…

基于ssm网上服装销售系统论文

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于网上服装销售系统系统当然也不能排除在外,随着网络技术的不断成熟,带动了网上服装销售系统系统,它彻底…

shell脚本发布docker springboot项目示例

docker、git、Maven、jdk8安装略过。 使git pull或者git push不需要输入密码操作方法 约定: 路径:/opt/springbootdemo, 项目:springbootdemo, 打包:springbootdemo.jar, docker容器名字&#x…

Android ImageView以及实现截图

实现效果 截图前 截图后 代码 package cn.jj.huaweiad;import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.ViewGro…

硬件项目中的turn-key 是啥意思?案例应用

在硬件项目中,turn-key是指一种工程项目模式,即交钥匙工程。这种模式通常由独立的第三方软件厂商直接与芯片厂商合作,基于芯片厂商的硬件方案和协议,集成成熟的上层软件和应用,并整套提供给电子产品生产厂商。这种模式…

LLM之RAG实战(三十五)| 使用LangChain的3种query扩展来优化RAG

RAG有时无法从矢量数据库中检索到正确的文档。比如我们问如下问题: 从1980年到1990年,国际象棋的规则是什么? RAG在矢量数据库中进行相似性搜索,来查询与国际象棋规则问题相关的相关文档。然而,在某些情况下&#xff0…

平台介绍-搭建赛事运营平台(3)

上文介绍了品牌隔离的基本原理,就是通过不同的前端和微服务来实现。但是确实很多功能是类似的,所以从编程角度还是有些管理手段的。 前端部分:前端部分没有什么特别手段,就是两个独立的项目工程,分别维护。相同的部分复…

I.MX6ULL_Linux_驱动篇(55)linux 网络驱动

网络驱动是 linux 里面驱动三巨头之一, linux 下的网络功能非常强大,嵌入式 linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动,本章我们就来学习一下linux 里面的网络设备驱动。 嵌入式网络简介 网络硬件接口 首先…

如何降低 BlueNRG-LPS 的开机峰值电流

1. 前言 BlueNRG 系列存在开机瞬间会出现很大的峰值电流的现象,预计有 20ma 左右。针对此现象,经常有客户询问该峰值电流会不会导致设备工作异常?会不会导致电池使用寿命缩短(考虑到一般纽扣电池能承受的峰值电流大概在 15ma 左右…

深度剖析MySQL锁:解开数据库并发控制的神秘面纱

MySQL 锁是 MySQL 数据库管理系统中为了实现并发控制和数据一致性的机制。在多用户并发访问数据库时,锁可以确保多个事务在对同一数据进行操作时不会相互干扰,以防止数据不一致的现象发生。 一、锁分类 MySQL支持多种类型的锁,主要包括…

定时器的原理和应用

#include<reg51.h> unsigned char s[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char count0,num0; void inittimer() {TMOD0x01;//0000 0001TH0(65536-50000)/256; //定时50ms50000us 2562^8 初值向右边移动8位TL0(65536-50000)%256;ET01;//开启定…

多源统一视频融合可视指挥调度平台VMS/smarteye系统概述

系统功能 1. 集成了视频监控典型的常用功能&#xff0c;包括录像&#xff08;本地录像、云端录像&#xff08;录像计划、下载计划-无线导出&#xff09;、远程检索回放&#xff09;、实时预览&#xff08;PTZ云台操控、轮播、多屏操控等&#xff09;、地图-轨迹回放、语音对讲…

windows 下用使用api OCI_ConnectionCreate连接oracle报错 TNS:无法解析指定的连接标识符

背景&#xff0c;两台服务器系统一样&#xff0c;oracle版本一样&#xff0c;其中一台服务器在运行程序的时候报错 TNS:无法解析指定的连接标识符 但是PL/SQL可以正常连接&#xff0c;怀疑是oracle配置文件的原因 tnsnames.ora配置文件大概作用&#xff1a;是Oracle客户端的网…

实时数仓之实时数仓架构(Hudi)

目前比较流行的实时数仓架构有两类&#xff0c;其中一类是以FlinkDoris为核心的实时数仓架构方案&#xff1b;另一类是以湖仓一体架构为核心的实时数仓架构方案。本文针对FlinkHudi湖仓一体架构进行介绍&#xff0c;这套架构的特点是可以基于一套数据完全实现Lambda架构。实时数…

基于 StarRocks 的风控实时特征探索和实践

背景 金融风控特征是在金融领域中用于评估和管理风险的关键指标。它们帮助金融机构识别潜在风险&#xff0c;降低损失&#xff0c;并采取措施规避风险。例如&#xff0c;用户最后一次授信提交时间就是一个重要的金融风控特征。 金融风控实时特征场景是一个典型的大数据实时业务…

【人工智能Ⅱ】实验4:Unet眼底血管图像分割

实验4&#xff1a;Unet眼底血管图像分割 一&#xff1a;实验目的与要求 1&#xff1a;掌握图像分割的含义。 2&#xff1a;掌握利用Unet建立训练模型。 3&#xff1a;掌握使用Unet进行眼底血管图像数据集的分割。 二&#xff1a;实验内容 1&#xff1a;用Unet网络完成眼底血…

基于SpringBoot和Vue的在线视频教育平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的在线视频教育平台的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…