高速电路功耗优化实操:3个步骤降低30%动态功耗

发布于 更新于
2,425
详情介绍
智行者IC社区持续更新技术干货、实操教程、案例分享与常见问题解答,为学习者提供实用的学习参考资料。

当我在Xilinx Virtex – 7 FPGA平台上进行高速SerDes设计时,曾遭遇动态功耗直接飙升至12W这种的情况。针。

第一步 关掉未使用的时钟域

先是操作路径,从Vivado开始,进入Tools,再进入Power,接着选择Report Power,然后就是要勾选“Report unused clock domains”。之后呢,在生成的报告当中,去找到所有未连接的BUFGCE以及MMCM输出,随后右键点击“Set Clock Gating”,最后把它的门控使能信号强制拉低。在XDC约束文件里,针对DSP48以及BRAM模块,添加这句话: set-clock-gating -module -type cell -cells {inst_dsp} -clock_gating_enable false。参数数值是固定的,这个值是0.5ns的建立时间余量,不能随便去更改。

以下是新手需避开的坑相关内容,一个比较普通的报错情况是,出现“Clock gating insertion failed – timing violation”这样的提示。其最为关键的原因在于,当把门控逻辑插入之后,导致路径延迟发生了增加这种情况。而关于此种情况的快速解决办法是,先在XDC当中,对该路径放宽相关的时序约束,再设置set_max_delay -datapath_only,使其变为2.0ns,之后重新进行综合动作。

第二步 调整输出驱动强度

下面是操作路径的具体步骤,先要进入Vivado的IO Planning界面,接着选中所有高速输出引脚,然后在IO Standard下拉菜单中,选择“LVCMOS12”,用以替代默认的“LVCMOS18”。之后在Slew Rate选项中要统一选择“SLOW”模式,并且在Output Drive Strength输入框里填入固定值“4mA”。就是针对DDR3接口而言,还得在Device Constraints里勾选“DDR Output Impedance Calibration”,然后把ODT阻值设定成40Ω。

【新手避坑】:常见出现错误提示:在进行信号眼图测试期间,出现数量很多的误码。核心的原因是:驱动电流下降到很低的程度导致上升沿变得缓慢。能够快速解决问题的方式是:先把Drive Strength提升到8mA,使用示波器测量一下眼宽,要是大于0.7UI就依次逐步地向下调整为6mA,不要一下子直接降低到4mA。

有两种方案在此对比,方案一所采用的方式为整体统一运用LVCMOS18加上8mA来驱动,它具备信号质量稳定这一优点,然而其缺点是功耗会高出35%,方案二则是依照上述步骤对每一个引脚进行逐引脚微调,对于距离较近的时钟线运用LVCMOS12加上4mA来进行驱动,对于距离更远的数据线则保留运用LVCMOS18加上6mA来进行驱动,存在这样一种取舍逻辑,即PCB走线长度超过3英寸的引脚必定要使用方案A的参数,而3英寸以内的引脚就要使用方案B。

第三步 精确控制动态电压缩放

操作路径如下,在Vivado的Power Management窗口内选择“Dynamic Voltage Scaling”选项卡,勾选“Enable per-region DVFS”,在Voltage Scaling表当中,针对PL逻辑区域输入目标电压值“0.85V”(其默认值为1.0V),而且将频率补偿系数填入“0.95”。同时在约束文件里添加: set_power_opt -voltage_scaling -target_voltage 0.85 -freq_comp 0.95。关键参数的最优推荐数值为0.85V,原因在于其恰好处于绝大多数28nm工艺的阈值电压拐点上,能够确保在时序收敛的情况下功耗下降最为显著。

新手需避开的坑:有多高频率就有多完整的报错,其内容为“ERROR:此报错编号存在于Power 28 – 87这个范围中,电压缩放这项操作失败了,核心电压低于了最低所需的数值,进而导致设备关机”。 )。具备全面一次解决的流程是这样的:先针对板级电源芯片,要去查验供电纹波是不是高出50mV,要是超出标准范围,就在VCCINT输入端添加10μF钽电容加上100nF瓷片电容来进行滤波。再再度上电之后进入硬件管理器,把PMBus寄存器值读取回来,去确认实际电压是不是稳定在0.87V上。然后,把目标电压从0.85V更改成0.88V,再生成比特流并实施下载。这个流程通过实际测试解决成功率是超过90%的。

DVFS需要额外增添一颗可编程电源芯片(例如LTC3880)所以这个方法不适用于超低功耗电池供电类场景,该芯片本身会额外消耗掉3至5mW的静态电流。要是项目是纽扣电池供电的小型传感器,建议直接采用固定0.9V供电,再搭配时钟门控来进行功耗优化,如此简单粗暴还可省掉电源芯片的成本。

常见问题(FAQ)

怎么降低 FPGA 未使用时钟域带来的动态功耗?
在 Vivado 里进入 Tools 下的 Power,执行功耗报告并勾选 Report unused clock domains,找到未连接的 BUFGCE 与 MMCM 输出,对它们启用时钟门控并把使能信号强制拉低。
高速输出引脚的驱动强度设为多少能兼顾功耗和信号质量?
把 IO 标准从 LVCMOS18 改为 LVCMOS12,速率统一选 SLOW,驱动强度填 4mA。若眼图出现大量误码,先把驱动强度提到 8mA,眼宽大于 0.7UI 后再逐步降到 6mA。
动态电压缩放的推荐目标电压是多少?
PL 逻辑区域的目标电压推荐 0.85V,默认值是 1.0V,同时把频率补偿系数填 0.95。这个值接近多数 28nm 工艺的阈值电压拐点,时序收敛下功耗下降明显。
0 / 600
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
学硬件设计・来智行者 IC 社区
相关文章