使用Vivado Design Suite进行功率优化

功率优化是一个可选步骤,它通过使用时钟门控来优化动态功率。它既可以在Project模式下使用,也可以在Non-Project模式下使用,并且可以在逻辑优化之后或布局之后运行,以减少设计中的功率需求。功率优化包括Xilinx的智能时钟门控解决方案,这些解决方案可以在不改变功能的前提下,减少设计中的动态功率。

一、Vivado功率优化工具

Vivado功率优化工具会分析设计的所有部分,包括legacy和第三方IP块。它还会识别出可以将活动变化信号进行时钟门控的机会,因为这些信号并非在每个时钟周期都被读取。这减少了切换活动,进而降低了动态功耗。
1、使用时钟使能(CEs)
Vivado功率优化器充分利用了丰富的时钟使能(CEs)资源。功率优化会创建门控逻辑来驱动寄存器时钟使能,以便寄存器只在相关的时钟周期捕获数据。
在实际的硅芯片中,CEs实际上是用于门控时钟,而不是在D输入和触发器反馈Q输出之间进行选择。这提高了CE输入的性能,同时也降低了时钟功耗。
Vivado工具通过智能地应用时钟门控技术和其他功耗降低策略,帮助设计者创建出功耗更低、效率更高的FPGA设计。这种优化不仅减少了功耗,而且通常不会对设计的性能产生负面影响。
2、智能时钟门控
图1 智能时钟门控
智能时钟门控还可以减少简单双端口或真双端口模式下专用块RAM的功耗,如下图2所示。
这些块包括多个使能信号:
• 数组使能(Array enable)
• 写使能(Write enable)
• 输出寄存器时钟使能(Output register clock enable)
大部分的功耗节省来自于使用数组使能。Vivado功率优化器实现了在没有数据写入且输出未被使用时减少功耗的功能。
通过智能地管理这些使能信号,Vivado工具能够在不需要访问或更新块RAM时关闭相关的时钟和电源,从而显著减少功耗。这种优化特别适用于那些块RAM使用模式不连续或仅在特定时间段内需要访问的设计。
图2 利用块RAM使能
除了数组使能之外,Vivado还会考虑写使能和输出寄存器时钟使能等其他因素,以进一步优化功耗。这些优化策略共同工作,确保在不影响设计功能的前提下最大限度地降低功耗。

二、power_opt_design

power_opt_design 命令用于分析和优化设计。默认情况下,它会分析和优化整个设计。该命令还执行智能时钟门控以优化功耗。
power_opt_design 语法:

power_opt_design [-quiet] [-verbose]

如果不想分析和优化整个设计,可以使用 set_power_opt 命令来配置优化器。还可以使用 set_power_opt 来指定 opt_design 中用于优化的特定块RAM单元。
set_power_opt 的语法如下:

set_power_opt [-include_cells <args>] [-exclude_cells <args>] [-clocks <args>] [-cell_types <args>] [-quiet] [-verbose]

如果使用 opt_design 运行,块RAM功耗优化将被跳过。
建议:如果希望在 opt_design 期间防止对特定块RAM进行块RAM功耗优化,请使用 set_power_opt -exclude_cells [get_cells <bram_insts>]。这允许通过指定要排除的块RAM实例来精确控制哪些块RAM会被包含在功耗优化中。通过这样做,可以确保只有关心的部分进行优化,同时保持其他部分的功耗优化被禁用。
要在 Vivado集成设计环境中通过power_opt_design启用功耗优化,您可以通过选择“Tools”→ “Project Settings”→ “Implementation”→ “Power Opt Design”来检查可用的is_enabled选项,如以下图3所示。启用后,功耗优化将作为Vivado集成设计环境中实现步骤的一部分运行。
图3
功耗优化设计可以在设计流程中的放置前(pre-place)或放置后(post-place)启用,但不能同时在两个地方启用。
在Vivado中启用功耗优化时,务必注意其在设计流程中的位置。放置在前的优化(pre-place)可能在逻辑和布局优化之前进行,而放置在后的优化(post-place)则在布局和布线完成后进行。

三、显示功耗优化报告

在Vivado中,功耗优化是在Vivado设计流程的opt_design和power_opt_design阶段执行的。这两个阶段都发生在实现过程中,这是在设计被合成之后进行的。
1、 synthesis后生成功耗优化报告
该报告将只包含有关功耗优化特性的信息,这些特性是编码到原始设计中的(例如,使用时钟使能(CE)对块RAM进行门控)。报告不会详细列出工具在实现过程中后来执行的功耗优化。
2、 implementation后生成功耗优化报告
①打开Vivado项目,点击Open Synthesized Design 或 Open Implemented Design。
②点击Reports → Report Power Optimization。
图4
在“Report Power Optimization”对话框中(上图4),可以指定以下选项:
• 结果名称(Results name):指定功耗优化报告在Vivado IDE中的显示名称。这个名称将用于在IDE的报告中标识和引用该报告。
• 导出到文件(Export to file):勾选此选项以在Vivado IDE的功耗优化报告之外,额外生成一个文本报告。需要指定文本报告的文件名和保存位置,并选择文件格式是TXT还是XML。
• 在新标签页中打开(Open in a new tab):勾选此选项以将新的功耗优化报告添加到Vivado IDE中当前显示的其他功耗优化报告中。如果希望保留当前在Vivado中显示的功耗优化报告,请不要勾选此选项,因为新报告将会替换当前显示的报告。
设置完这些选项后,可以点击“OK”或相应的按钮来生成并显示功耗优化报告。
③或者执行相关的Tcl命令:
report_power_opt -name <report_name>
④新的功耗优化报告将显示在IDE的结果窗口区域中。在Vivado IDE中,结果窗口通常用于展示各种设计分析、合成和实现步骤的输出结果。
图5
通用信息(General Information)
包含有关设计、在其中实现设计的AMD设备以及生成此功耗优化报告的Tcl命令的信息。这些信息对于理解报告的背景和上下文非常重要。
摘要(Summary)
列出了在设计中由用户优化以及由功耗优化工具优化的块RAM(Block RAMs)、SRLs(Shift Register Lookups)和Slice寄存器的数量。这提供了一个关于功耗优化所影响的资源类型的概览。
• 推荐(Recommendations)
提供了一些建议,帮助您进一步针对功耗优化您的设计。这些建议可能包括更改设计策略、使用不同的单元类型或配置,或者应用特定的优化技术。
• 层次结构信息(Hierarchical Information)
详细列出了Vivado针对其执行了功耗优化的块RAMs、SRLs和Slice寄存器的信息。这可能包括它们在设计中的位置(层次结构路径)、优化前后的功耗值,以及具体的优化策略或更改。
通过查看这些信息,可以更深入地了解功耗优化工具是如何影响您的设计的,并据此作出进一步的优化决策。这些信息对于设计工程师来说是非常有价值的,因为它们不仅提供了功耗优化的当前状态,还指出了可能进一步降低功耗的潜在领域。
提示:如果在任何层次结构的模块或实例上标记了DONT_TOUCH属性,功耗优化将不会优化这部分逻辑。

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

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

相关文章

【零基础学数据结构】双向链表

1.双向链表的概念 1.1头节点 1.2带头双向循环链表 注意&#xff1a; 哨兵位创建后&#xff0c;首尾连接自己 1.3双链表的初始化 // 双向链表的初始化 void ListInit(ListNode** pphead) {// 给双链表创建一个哨兵位*pphead ListBuyNode(-1); } 2.双向链表的打印 // 双向…

HarmonyOS开发实例:【app帐号管理】

应用帐号管理 介绍 本示例选择应用进行注册/登录&#xff0c;并设置帐号相关信息&#xff0c;简要说明应用帐号管理相关功能。效果图如下&#xff1a; 效果预览 使用说明参考鸿蒙文档&#xff1a;qr23.cn/AKFP8k点击或者转到。 1.首页面选择想要进入的应用&#xff0c;首次进…

Redis 之集群模式

一 集群原理 集群&#xff0c;即Redis Cluster&#xff0c;是Redis 3.0开始引入的分布式存储方案。 集群由多个节点(Node)组成&#xff0c;Redis的数据分布在这些节点中。 集群中的节点分为主节点和从节点&#xff1a;只有主节点负责读写请求和集群信息的维护&#xff1b;从…

接口测试用例编写和接口测试模板

一、简介 接口测试区别于传统意义上的系统测试&#xff0c;下面介绍接口测试用例和接口测试报告。 二、接口测试用例模板 功能测试用例最重要的两个因素是测试步骤和预期结果&#xff0c;接口测试属于功能测试&#xff0c;所以同理。接口测试的步骤中&#xff0c;最重要的是将…

项目管理软件评测:选择合适软件是关键

在过去&#xff0c;中小企业项目管理沿用的是office全家桶&#xff0c;用到后面项目由简单变复杂&#xff0c;项目资源越来越庞大&#xff0c;项目成员越来越多&#xff0c;项目管理问题日益凸显。好用的项目管理软件是化解问题的好方法&#xff0c;好用的项目管理软件是什么样…

(Oracle)SQL优化案例:隐式转换优化

项目场景 项目现场的某个kettle模型执行非常缓慢&#xff0c;原因在于某个SQL执行效率非常的低。甲方得知此事要求公司赶紧优化&#xff0c;负责该模块的同事对SQL优化并不熟悉。所以作为一个立志成为优秀DBA的ETL工程师&#xff0c;我自告奋勇&#xff1a;不是DBA&#xff0c;…

4.2 面向对象程序设计-类的继承实验

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系将于24小时内删除 目录 1.实验内容 2.实验原理 2.1类的继承 2.2 继承的优点和缺点 2.3 继承的方式 3.实验代码 1.实验内容 创建一个父类CalcTime&#xff0c;在父类中依次定义用于保存…

10 Php学习:循环

在 PHP 中&#xff0c;提供了下列循环语句&#xff1a; while - 只要指定的条件成立&#xff0c;则循环执行代码块do…while - 首先执行一次代码块&#xff0c;然后在指定的条件成立时重复这个循环for - 循环执行代码块指定的次数foreach - 根据数组中每个元素来循环代码块 当…

Python八股文:基础知识Part2

1. Python中变量的保存和访问 Python中的变量实际上是一个指向对象的引用&#xff0c;每个对象都有一个唯一的标识符&#xff08;即内存地址&#xff09;。对于一些不可变对象&#xff0c;如字符串和整数&#xff0c;因为它们的值不可更改&#xff0c;所以当多个变量引用相同的…

React Hooks 全解: 常用 Hooks 及使用场景详解

React Hooks 是 React 16.8 版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。 React 中常用的 10 个 Hooks,包括 useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useLayoutEffect、useImperativeHandle 和 useDebugValue。这些…

分享一下项目中遇到的排序失效问题

今天把原来的一个查询接口的业务代码进行了优化&#xff0c;减少了十几行冗余的代码。 原来的代码 ChongwuServiceImpl.java /*** author heyunlin* version 1.0*/ Slf4j Service public class ChongwuServiceImpl implements ChongwuService {Overridepublic JsonResult<…

中介者模式:简化对象间通信的协调者

在面向对象的软件开发中&#xff0c;中介者模式是一种重要的行为型设计模式&#xff0c;用于降低多个对象间通信的复杂性。通过提供一个中心化的对象来处理不同组件之间的交互&#xff0c;中介者模式使得组件间不必显式引用彼此&#xff0c;从而使其松散耦合、更易于维护。本文…