Verilog学习ing
功耗超标确实是后期的大麻烦,尤其是散热压力上来后。我一般会分三步走:评估、优化、验证。
评估阶段,Vivado的Power Report是基础,但它的精度依赖于你的输入条件(比如翻转率、环境温度)是否准确。建议你花时间仔细设置这些条件,特别是信号翻转率,可以用后仿真的.vcd文件导入,比默认值准得多。更精确的手段必须上板实测,用高精度电流探头或电源监控芯片(比如TI的INA系列)抓取各电源轨的电流波形,对比静态、典型场景、最坏场景下的功耗。实测数据反过来可以校准Vivado模型。
RTL阶段的技巧,除了时钟门控,数据路径的优化也很关键。比如用格雷码代替二进制码做状态机或计数器,减少同时翻转的位数;大位宽数据总线,如果不需要全带宽,可以做成时分复用;存储器用片上的Block RAM并启用时钟门控,避免用分布式RAM;对速度不敏感的路径,故意加流水线降频率,电压不变时功耗和频率成正比。
布局布线后,工具设置能挽回一些。在Vivado的Implementation设置里,可以选Power Opt Design,工具会尝试优化功耗。另外,如果性能有余量,可以尝试降低工作电压(Kintex-7支持少量降压,但需查手册确认安全范围),或者降低空闲Bank的IO电压。但注意这些操作可能影响时序,必须重新做时序验证。
最后提个坑:功耗和散热是系统问题,单靠FPGA优化可能不够。检查一下板子电源转换效率、散热片贴合是否良好,有时这里省下的功耗比在代码里抠半天还多。
