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

news2024/11/29 3:03:11

目录

一、概述

二、约束与策略

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.coloradmin.cn/o/1560227.html

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

相关文章

Uibot6.0 (RPA财务机器人师资培训第6天 )发票验真机器人案例实战

类似于小北的这篇博客:Uibot (RPA设计软件)Mage AI智能识别(发票识别)———课前材料五_uibot 添加mageai-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135591297?spm1001.2014.3001.5501训练网站:泓江…

嵌入式科普(14)指针---这些年嵌入式工程师也不容易理解的词语

目录 一、指针(Pointer): 1.1 动态内存管理: 1.2 数组和字符串操作: 1.3 函数参数传递: 1.4 数据结构实现(链表): 1.5 实现回调函数: 1.6 提高性能&am…

Day63-LVS四层负载均衡及结合Nginx7层负载均衡实践

Day63-LVS四层负载均衡及结合Nginx7层负载均衡实践 1. LVS(Linux Virtual Server)介绍2. IPVS(LVS)发展史3. IPVS软件工作层次图4. LVS技术点小结5. LVS的4模式原理讲解5.1 NAT(Network AddressTranslation),中文网络地…

纽扣电池CR1632没有电解决方案

使用环境 在使用小米的自拍杆时,发现纽扣电池没有电量了逛了下超市,结果发现都没有卖这个型号的电池,但是下午又要拍照,于是想起了应急的充电方法。声明一下,这个内置电池型号是CR1632,然而市面上&#xff…

vue基础教程(5)——十分钟吃透vue路由router

同学们可以私信我加入学习群! 正文开始 前言一、路由概念二、路由使用三、创建路由对应的组件四、给整个项目一个入口总结 前言 前面的文章运行成功后,页面显示如下: 在这个页面中,点击Home和About都会切换右面的页面内容&#…

什么是Redis数据一致性?如何解决?

在系统中缓存最常用的策略是:服务端需要同时维护DB和cache,并且是以DB的结果为准–Cache-Aside Pattern(缓存分离模式、旁路缓存) 读数据 单纯的读数据是不会产生数据不一致,只有并发下读和写才会存在数据不一致。 写…

插入排序---算法

1、算法概念 插入排序:它的工作原理是通过构建有序排序,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置插入。 2、算法步骤 将第一待排序序列第一个元素看作一个有序序列,把第二个元素到最后一个元素当成是…

3万字80道Java基础经典面试题总结(2024修订版)

大家好,我是哪吒。 本系列是《10万字208道Java经典面试题总结(附答案)》的2024修订版。 目录 1、说说跨平台性2、Java是如何实现跨平台性的?3、JDK 和 JRE 有什么区别?4、为何要配置Java环境变量?5、Java都有哪些特性&#xff1f…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《偏远地区能源自洽系统源储容量协同配置方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

AcWing 4405. 统计子矩阵:做题笔记

目录 暴力思路 代码 前缀和双指针 代码 解释 推荐博客 这道题的主要思路就是枚举所有的子矩阵,判断符合条件的子矩阵的个数。 暴力思路 我服了,其实我最开始没有想到 :枚举所有的子矩阵 这样一个很有总结性的要点。 我是想着哦我先…

Mysql数据库:MHA高可用架构

目录 前言 一、MHA概述 1、什么是MHA 2、MHA的特点 3、MHA的组成 4、MHA的工作原理 5、故障切换备选主库的算法 二、部署MHA高可用架构 1、环境部署 2、部署主从同步 2.1 修改主配置文件并创建软链接 2.1.1 master 修改主配置文件并创建软连接 2.1.2 slave1 修改主…

WIFI驱动移植实验:将 rtl8188EUS驱动添加到 Linux 内核中

一. 简介 正点原子的 I.MX6U-ALPHA 开发板目前支持两种接口的 WIFI : USB 和 SDIO ,其中 USB接口的WIFI 使用使用的芯片为 RTL8188EUS 或 RTL8188CUS , SDIO 接口的 WIFI 使用芯片为 RTL8189FS ,也叫做 RTL8189FT…

尚医通day1

1 创建项目 doc 窗口 pnpm create vite 填写项目名 vue-syt选择框架 vuetypeScript 2整理项目 删除 /src/assets/vue.svg 文件,删除 /src/components 下的 helloWorld.vue删除app.vue内容,快捷键v3ts 生成模板内容去掉 /src/style.css 样式文件&…

仿微信领红包HTML源码

源码介绍 仿微信领红包HTML源码,将代码放到一个空白的HTML文件里面保存,鼠标双击即可查看效果,一个微信发送消息提示,弹窗就出来了,关闭之后,出现完整的微信红包领取界面,源码HTML,…

GS1-全球分类标准

GS1 GS1是一个中立的全球合作平台,汇集行业领袖、政府、监管机构、学术界和协会,共同开发基于标准的解决方案,以应对数据交换的挑战。我们的规模和影响力——遍布 116 个国家/地区的当地会员组织、超过 200 万家用户公司和每天 100 亿笔交易—…

conda 创建 python3.10.12 环境

conda 创建 python3.10.12 环境 介绍使用前置条件:安装 conda配置环境变量验证 Conda 安装结果创建环境:python激活 Anaconda 环境 验证 Python 版本。 介绍 Conda是一个开源的包管理和环境管理系统,由Continuum Analytics公司开发。它可以安…

LangChain使用实例——Query analysis

Query analysis ​ “Search”为许多用例提供支持——包括检索增强生成的“检索”部分。最简单的方法是将用户问题直接传递给检索器。为了提高性能,还可以使用“query analysis”以某种方式“优化”查询。传统上,这是通过基于规则的技术来完成的&#x…

VMware虚拟机共享主机v2rayN

目录 🌼前言 🌼解释 🚩操作 1)VMware -- 虚拟网络编辑器 2)VMware -- 网络适配器 3)主机 IP 地址 4)v2rayN 代理端口 5)VMware -- 网络代理(Network proxy) 🎂结…

基于 Quartz.NET 可视化任务调度平台 QuartzUI

一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理,Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录&#xf…

深入理解MapReduce:从Map到Reduce的工作原理解析

当谈到分布式计算和大数据处理时,MapReduce是一个经典的范例。它是一种编程模型和处理框架,用于在大规模数据集上并行运行计算任务。MapReduce包含三个主要阶段:Map、Shuffle 和 Reduce。 ** Map 阶段 ** Map 阶段是 MapReduce 的第一步&am…