就我进行的Xilinx Virtex – 7 FPGA开发板的实际测试而言,曾经遭遇过动态功耗陡然猛增直至12W的那样一种情况作为教训。高速电路的功耗优化这件事情并非是那种莫测高深难以捉摸的学问概念,其最为关键的根本性要点就在于妥善地管控好时钟、电压以及信号翻转这些方面。
第一步 关掉不用的时钟网络
开启Vivado 2022.1,在综合后的设计当中点击Report Power,先查看Dynamic Power所占比例。直接进入Clock约束界面,将set_clock_gating_style设定为-control_signal_to_gate clock。详细的操作途径是,工具这个项目→ 功率分析这个选项→ 设置时钟门控这个功能,将所有未曾投入使用的时钟领域勾选,随后点击应用。
以下是改写后的内容:【新手避坑】,常见的报错是,时钟门控未应用,原因在于违反了建立时间时序。核心的原因是,你所有的组合逻辑路径上,依旧有未被约束的异步复位信号。快速解决之道为,先运用report_timing_summary去查验所有路径,接着将set_false_path添加至跨时钟域路径上,随后再运行时钟门控。
最为关键的参数所具备的最优推荐数值是,将时钟门控使能信号的占空比设定为百分之三十。其具体的原因在于,当该占空比低于百分之三十的时候,门控开关所产生的切换频率会格外高,如此一来反倒会增加门控晶体管自身的开关损耗;而一旦超过百分之三十,便不能够有效地截断那些无效的时钟脉冲,经过实际测量,当占空比为百分之三十的时候,动态功耗大约降低了百分之二十二。
第二步 动态电压频率调整
进入Board,接着前往Power Management,在此找寻Dynamic Voltage and Frequency Scaling模块。有两种实操方案对比,方案A属于硬件级动态调压,借助外部PMBus控制器实时把核心电压从0.95V调到0.75V,方案B是软件级动态调频,在系统空闲时利用cpufreq-set -f 800MHz来降低主频。方案B相对更简单然而延迟较高,适宜低速外设场景,方案A响应迅速但需额外电源芯片,适合对功耗敏感的实时系统。
新手需避开的坑,常见的报错是,电压下降到最低点阈值以下,原因在于降压速度过快,导致电源滤波电容来不及做补电操作,解决办法是,在电压切换指令发出之前,先插入一次时长为5微秒的空操作延迟,同时增加三级的set_load来逐步改变负载电流,每一级之间的间隔为1微秒。
第三步 信号完整性优化降低翻转功耗
在PCB布局的阶段时,运用Altium Designer去打开Signal Integrity分析工具,先针对所有的高频数据线设置50欧姆特性阻抗,接着要手动添加串联终端电阻。特别的操作步骤:将DDR3数据线组选取出来,朝着右方按键点击Properties,接着点击进入SI Analysis,步入Termination,从中挑选Series Resistor,把数值设定成22欧姆。
先是新手需要避开陷阱的高频完整报错情况,即出现了Simulation failed: Reflection coefficient exceeds 0.3这种情况。接着呈现完整解决流程,先是第一步,要运用Stackup Editor将介质厚度调整至0.2mm;然后是第二步,把线宽从0.15mm加宽为0.2mm;最后到第三步,在末端并联47pF对地电容以此吸收回波。实际测量得出反射系数回落至0.12,信号过冲由1.8V下降到0.3V以内,如此通过直接的方式减少了信号发生翻转时候的无效功耗。
该方法针对于纯数字逻辑而言具有有效性,然而却并不适用于模拟前端或者射频电路,这是由于这些电路对于附加电容以及电阻具备敏感性,极有可能导致噪声系数出现恶化的情况。可供替代的方案为:针对模拟部分转而采用低噪声LDO进行独立供电,数字部分依旧运用上述所提及的优化措施。











