FPGA降低功耗研究
FPGA降低功耗研究
首先要明白一点:我们的核心目标是在维持性能的前提下,通过工艺、架构、设计方法学和系统级策略的协同优化,降低动态功耗、静态功耗和短路功耗。
本篇文章则是聚焦于 FPGA 设计阶段 的功耗优化,主要从 RTL 代码设计、时钟管理、资源分配、工具优化策略 等层面入手。
一、RTL 级设计优化
1. 减少信号翻转率(动态功耗核心)
- 原理:动态功耗 P与信号翻转率成正比,因此降低翻转率是关键。
- 方法:
- 操作数隔离(Operand Isolation) 当模块不工作时,通过使能信号冻结输入数据,避免无效计算。
always @(clk) beginif (en) beginreg_data <= data_in; // 仅在en有效时更新寄存器end
end
条件逻辑优化:避免冗余的组合逻辑计算,例如将高频信号置于条件判断前:
// 优化前:高频信号b作为结果,可能频繁翻转
assign out = a & b;
// 优化后:低频信号a作为条件,减少b的无效翻转
assign out = a ? b : 0;
- 数据宽度匹配:避免宽位数据的无效位翻转(如使用
unsigned [7:0] data
替代[31:0]
存储 8 位数据)。
2. 时钟网络优化
- 原理:时钟树占 FPGA 总功耗的 30%-50%,减少时钟活动是核心。
- 方法:
- 门控时钟(Clock Gating)
利用寄存器使能端关闭闲置模块的时钟,避免寄存器翻转。
- 门控时钟(Clock Gating)
always @(posedge clk) beginif (clk_en) begin // 同步门控,避免毛刺reg_data <= data_in; end
end
- 工具支持:Xilinx Vivado 的 Clocking Wizard 生成门控时钟 IP,Altera Quartus 的 Clock Enable 优化选项。
- 局部时钟替代全局时钟
避免全局时钟驱动所有模块(时钟树要是一下子全开,功耗老大了),使用区域时钟(如 Xilinx 的 BUHCE/BUHE 时钟缓冲器)驱动局部逻辑。 - 异步时钟谨慎使用
异步逻辑易导致亚稳态和额外时序约束,增加功耗,尽量用同步设计替代。
3. 状态机优化
- 编码方式选择
- 低速状态机用 One-hot 编码(减少组合逻辑翻转),高速状态机用 格雷码(减少寄存器翻转)。
- 示例:10 状态的状态机,One-hot 编码需 10 个寄存器,但组合逻辑简单;二进制编码需 4 个寄存器,但组合逻辑复杂,需根据实际场景权衡。
4. 资源复用与逻辑优化
- 共享功能单元
复用乘法器、加法器等资源,避免重复实例化。例如,时分复用一个乘法器处理多组数据。 - 避免隐式锁存器
组合逻辑中漏写条件分支会生成锁存器,导致持续电流,需确保所有输入在条件语句中被覆盖。
// 错误:缺少else分支,生成锁存器
always @* beginif (en) out = data;
end
// 正确:补全else分支
always @* beginif (en) out = data; else out = 0;
end
二、综合与布局布线阶段优化
1. 综合策略配置
- 功耗导向的综合(Power-Oriented Synthesis)
- 工具设置:在 Vivado 中启用
-power
选项,Quartus 中选择 Power Optimization 模式。 - 原理:工具会优先减少翻转率高的逻辑,例如将高频路径的寄存器打拍拆分,降低节点电容。
- 工具设置:在 Vivado 中启用
- 逻辑优化选项
- 启用 Retiming(寄存器重定时)(就是移动寄存器位置)平衡路径延迟,减少关键路径的翻转率;
- 启用 Resource Sharing(资源共享)合并冗余功能单元。
2. 布局布线优化
- 物理约束引导
- 使用
set_max_fanout
约束限制信号扇出,减少驱动大电容负载的缓冲器(如 BUFG)使用; - 通过
place_coarse
或route_below_layer
约束将高频信号布设在低层金属(电容更小)。
- 使用
- 时序与功耗平衡
- 允许轻微时序裕量(如
set_timing_derate
),降低工作电压(需结合 DVFS)。 - 工具支持:Vivado 的 Power Estimator 实时显示各模块功耗,辅助定位高功耗区域。
- 允许轻微时序裕量(如
三、多时钟域与电源域设计
1. 跨时钟域(CDC)优化
- 减少跨域信号
避免高频信号跨时钟域传输,改用握手信号或异步 FIFO 缓冲低频控制信号。 - 异步信号同步化
对异步输入使用 双寄存器同步器(如打两拍),避免亚稳态导致的毛刺功耗。
reg [1:0] sync_reg;
always @(posedge clk) beginsync_reg <= {sync_reg[0], async_in}; // 打两拍同步
end
//第一个寄存器 sync_reg[0] 捕获异步信号 async_in,可能产生亚稳态;
//第二个寄存器 sync_reg[1] 对 sync_reg[0] 再次采样,利用亚稳态恢复时间(通常 < 10ns)确保输出稳定。
2. 电源域划分(Power Domain)
- 多电压域设计
在 RTL 中为不同模块添加电源域标识(如使用(power_domain = "VDDA")
编译器指令),工具可自动隔离不同电压域的逻辑,减少漏电流。 - 电源门控(Power Gating)
在 RTL 中为闲置模块插入电源开关逻辑(需配合 IP 核,如 Xilinx 的 PGC 单元),切断电源时保持状态(如使用保留寄存器(* keep = "true" *)
)。
四、系统级设计技巧
1. 接口协议优化
- 低功耗接口标准
使用 LVDS、BLVDS 等低摆幅电平替代 LVTTL,降低 I/O 翻转功耗(如 Xilinx 的 GTx 收发器支持 800mV 摆幅)。 - 数据压缩与突发传输
在片内压缩数据(如 CRC 校验替代全量传输),减少片外存储器访问频率(DDR 读写功耗占系统功耗 20%-30%)。
2. 动态功耗管理(DPM)
- 自适应频率调整
通过片内 PLL 实时调整时钟频率(如 Vivado 的 Dynamic Reconfiguration),配合传感器数据(如温度、负载)动态降频。 - 部分重构(Partial Reconfiguration)
仅重构当前活跃模块的配置,关闭闲置区域(如 Xilinx 的 Partial Reconfiguration Flow),降低静态功耗。
五、工具辅助与验证
1. 功耗分析工具
- Xilinx XPower Analyzer/Vivado Power Estimator(XPE)
输入 RTL 或网表,量化各模块动态 / 静态功耗,定位高翻转率节点(如翻转率 > 70% 的信号)。 - Altera PowerPlay Power Analyzer
提供寄存器、LUT、布线等组件的功耗分解,支持早期 RTL 功耗预估。
2. 仿真验证翻转率
- 在 ModelSim/Questa 中使用
$toggle
系统函数统计信号翻转率,例如
initial begin$toggle(file, sig); // 统计sig的翻转次数
end
- 通过分析翻转率 > 50% 的信号,优化其逻辑路径。
总结
设计阶段功耗优化核心流程
- RTL 编码:优先使用门控时钟、操作数隔离、资源复用,避免隐式锁存器和冗余翻转;
- 综合配置:启用功耗导向策略,利用工具自动优化逻辑层级和资源共享;
- 布局布线:通过物理约束减少长距离布线和高扇出信号,平衡时序与功耗;
- 系统级管理:划分电源域、优化跨时钟域通信、采用低功耗接口协议;
- 验证与迭代:利用功耗分析工具定位热点,通过仿真数据驱动设计优化。
相关文章:
FPGA降低功耗研究
FPGA降低功耗研究 首先要明白一点:我们的核心目标是在维持性能的前提下,通过工艺、架构、设计方法学和系统级策略的协同优化,降低动态功耗、静态功耗和短路功耗。 本篇文章则是聚焦于 FPGA 设计阶段 的功耗优化,主要从 RTL 代码设…...
软考 系统架构设计师系列知识点之杂项集萃(67)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(66) 第108题 RISC(精简指令系统计算机)的特点不包括()。 A. 指令长度固定,指令种类尽量少 B. 寻址方式尽量丰富ÿ…...
第十节第三部分:常见API:传统时间:Date日期类、SimpleDateFormat
Date日期类常用方法 时间格式常用符号 Date日期类总结 为什么用SimpleDateFormat SimpleDateFormat常见方法 SimpleDateFormat解析字符串时间成为日期对象 SimpleDateFormat总结 代码: 代码一:Date日期类 package com.itheima.Time;import java.util.D…...
Python学习Day1:安装
Python的安装 1.安装python 打开python的官网,我们下载3.6.8版本Python Release Python 3.6.8 | Python.org 根据自己的电脑来下载对应的python版本 如图所示: 我已经下载完成,就是这样, 安装页面的第一排是自动安装…...
Java安全-Servlet内存马
内存马简介 内存马是指将恶意代码注入到内存中,达到无文件落地的效果,使得被攻击方难以察觉。由于是无文件的形式,可以绕过部分基于文件检测的杀软。而 Servlet 内存马是基于 Java Servlet 技术,动态将恶意代码注入到 Tomcat 内存…...
Mariadb cpu 93% 问题
最近项目遇到cpu平均使用率93% 一、登录数据库服务查看具体情况 可以看到服务器负载很高,,mariadb CPU使用已达到接近380.4% (因为是8核,所以会有超过100%的情况)。如下图: 二、排查是否有耗时较长sql 在…...
LeetCode222_完全二叉树的结点个数
LeetCode222_完全二叉树的结点个数 标签:#位运算 #树 #二分查找 #二叉树Ⅰ. 题目Ⅱ. 示例 0. 个人方法 标签:#位运算 #树 #二分查找 #二叉树 Ⅰ. 题目 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下&…...
linux 查看java的安装路径
一、验证Java安装状态 java -version正常安装会显示版本信息: openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)二、检查环境变量配置 若已配置JAVA_HOME&#…...
day32 python解释性库PDPbox
目录 一、初识PDPbox官方文档 二、准备鸢尾花数据集和训练模型 三、使用PDPbox进行解释性分析 1. 导入类并实例化对象 2. 调用plot方法绘制图形 3. 探索返回值的意义 四、总结与感悟 作为一名正在学习机器学习的学生,今天要学习一个非常有趣的库——PDPbox&am…...
LVLM-AFAH论文精读
Basic Information 标题:Your Large Vision-Language Model Only Needs A Few Attention Heads For Visual Grounding作者:Seil Kang, Jinyeong Kim, Junhyeok Kim, Seong Jae Hwang机构:Yonsei Universit…...
蓝桥杯3503 更小的数
问题描述 小蓝有一个长度均为 n 且仅由数字字符 0∼9 组成的字符串,下标从 0 到 n−1,你可以将其视作是一个具有 n 位的十进制数字 num,小蓝可以从 num 中选出一段连续的子串并将子串进行反转,最多反转一次。 小蓝想要将选出的子…...
5.21本日总结
一、英语 复习list4list26 二、数学 学完14讲,1000题13讲写完 三、408 学习计网5.3剩余内容 四、总结 高数本月结束知识点学习,15讲知识点与14讲的题目同步进行。408剩余两本书要加快学习进度。 五、明日计划 英语:复习lsit5list25 …...
【25软考网工】第七章(3) UOS Linux防火墙配置和Web应用服务配置
博客主页:christine-rr-CSDN博客 专栏主页:软考中级网络工程师笔记 大家好,我是christine-rr !目前《软考中级网络工程师》专栏已经更新三十多篇文章了,每篇笔记都包含详细的知识点,希望能帮助到你&am…...
Python数据分析基础
Python数据分析入门 介绍 在这个教程中,我们将学习如何使用Python来进行基本的数据分析。 安装必要的库 为了开始,你需要安装以下Python库: NumPyPandasMatplotlib 示例代码 import numpy as np import pandas as pd import matplotli…...
spring cloud config更新配置
在开发微服务时,往往需要有开发环境、测试环境和生产环境,手动修改配置环境是一件很麻烦的事情,因此,这里使用spring cloud config管理配置环境。要使用spring cloud config,需要先在GitHub搭建一个仓库。 一、仓库搭…...
小米汽车二期工厂下月将竣工,产能提升助力市场拓展
在新能源汽车市场竞争日益激烈的当下,小米汽车传来重要进展消息。据多方信息显示,小米汽车二期工厂下月即将竣工,这一关键节点的到来,有望为小米汽车的产能提升与市场布局带来重大突破。 小米汽车二期工厂位于北京亦庄ÿ…...
【单片机】如何产生负电压?
以下是对知乎文章《单片机中常用的负电压是这样产生的!》的解析与总结,结合电路原理、应用场景及讨论要点展开: 一、负电压产生的核心原理 负电压本质是相对于参考地(GND)的电势差为负值,需通过电源或储能…...
Mcu_Bsdiff_Upgrade
系统架构 概述 MCU BSDiff 升级系统通过使用二进制差分技术,提供了一种在资源受限的微控制器上进行高效固件更新的机制。系统不传输和存储完整的固件映像,而是只处理固件版本之间的差异,从而显著缩小更新包并降低带宽要求。 该架构遵循一个…...
阿里云ecs 8核 16G 内存 装有redis6 分配了3G内存,和2个tomcat 每个tomcat 4G 服务器反应迟钝,如何确认不是redis的问题
我们经常用redis 但遇到tomcat timeout的时候,如何确认不是redis的问题。 不能因为这个再去搞个redis 压力测试。有没有更省劲的方法来确认不是redis的问题 以下是针对 阿里云 ECS(8核16G,Redis 6分配3G内存,2个Tomcat各分配4G&a…...
机器学习-KNN算法
1.机器学习概述(全部流程) 获取数据:from sklearn.datasets import load_wine 数据处理(数据集划分、标准化):from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler 特征工程:from s…...
【数据结构 · 初阶】- 快速排序
目录 一. Hoare 版本 1. 单趟 2. 整体 3. 时间复杂度 4. 优化(抢救一下) 4.1 随机选 key 4.2 三数取中 二. 挖坑法 格式优化 三. 前后指针(最好) 四. 小区间优化 五. 改非递归 快速排序是 Hoare 提出的一种基于二叉树…...
HTTPS和HTTP区别
客户端向服务器发送HTTPS请求。服务器响应并发送其数字证书。客户端通过证书的公钥验证数字签名的有效性,如果有效,客户端生成一个随机的对称密钥。客户端使用公钥对这个对称密钥进行加密,然后将加密后的密钥发送给服务器。服务器使用自己的私…...
自动驾驶中的预测控制算法:用 Python 让无人车更智能
自动驾驶中的预测控制算法:用 Python 让无人车更智能 自动驾驶技术近年来取得了令人惊叹的进步,AI 与边缘计算的结合让车辆能够实时感知环境、规划路径并执行驾驶决策。其中,预测控制(Model Predictive Control,MPC) 作为一种先进的控制算法,凭借其对未来驾驶行为的优化…...
分享一些实用的网址
第一个:视频转化为动图 网址:https://www.freeconvert.com/zh/convert/mp4-to-gif 当然还有很多其他的功能,可以按需选择使用。 第二个:ASCII字符串到16进制在线转换工具 网址 :https://coding.tools/cn/ascii-to-…...
打开小程序提示请求失败(小程序页面空白)
1、小程序代码是商城后台下载的还是自己编译的 (1)要是商城后台下载的,检查设置里面的域名是不是https的 (2)要是自己编译的,检查app.js里面的接口域名是不是https的,填了以后有没有保存 注&a…...
Taro 安全区域
目录 一、问题描述 二、问题解决 1、顶部刘海区 2、底部小黑条 一、问题描述 安全区域主要是为了避免刘海屏或底部栏遮挡,而造成的不良显示效果。 本次将针对以下两点进行考量: 1、顶部刘海屏区 2、苹果X底部小黑条 二、问题解决 通过Taro.getS…...
DL00988-稀疏增强数据transformer船舶AIS轨迹预测含完整数据集
提升科研效率,精准预测船舶AIS轨迹!文末有完整获取方式 作为研究生和科研人员,是否在进行船舶轨迹预测时遇到数据稀疏、轨迹复杂等问题?现在,我们为你提供一款基于稀疏增强数据Transformer的船舶AIS轨迹预测工具&#…...
重写B站(网页、后端、小程序)
1. 网页端 1.1 框架 Vue ElementUI axios 1.2 框架搭建步骤 搭建Vue 1.3 配置文件 main.js import {createApp} from vue import ElementUi from element-plus import element-plus/dist/index.css; import axios from "axios"; import router from…...
SOPHGO算能科技BM1688内存使用与编解码开发指南
1. BM1688内存分配接口详解 1.1 设备内存分配接口区别 BM1688提供了三个主要的设备内存分配接口,它们的主要区别如下: // 基本设备内存分配接口 void* bm_malloc_device_byte(bm_handle_t handle, unsigned int size);// 指定heap区域的设备内存分配 void*</...
如何使用Antv X6使用拖拽布局?
拖拽效果图 拖拽后 布局预览 官方: X6 图编辑引擎 | AntV 安装依赖 # npm npm install antv/x6 --save npm install antv/x6-plugin-dnd --save npm install antv/x6-plugin-export --save需要引入的代码 import { Graph, Shape } from antv/x6; import { Dnd } …...
STM32项目分享:智能家居(机智云)升级版
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能家居(机智云)升级版 (资料…...
Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射
前置阅读,关于Flask-SQLAlchemy支持哪些数据库及基本配置,链接:Flask-SQLAlchemy_数据库配置 摘要 本文以一段典型的 SQLAlchemy 代码示例为引入,阐述以下核心概念: 模型类(Model Class) ↔ 数…...
算法优选系列(9.BFS 解决拓扑排序)
目录 拓扑排序简介: 编辑 课程表(medium): 课程表II(medium): 火星词典(hard): 拓扑排序简介: 有向无环图(DAG图) 如上图每条边…...
DevExpress Blazor中文教程 - 如何用AI聊天组件构建大型语言模型聊天APP?
DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 AI服务提供各种量身定制的模型来满…...
PHP:经典编程语言在当代Web开发中的新活力
在当今的Web开发领域,新技术和新语言层出不穷,但PHP(超文本预处理器)作为一门经典且功能强大的编程语言,依然在Web开发中占据着重要地位,并不断展现出新的活力。 PHP的历史与现状 PHP诞生于1994年&#x…...
ToDesk云电脑、并行智算云与顺网云AI支持能力深度实测报告
随着AI技术的迅猛发展,云计算平台已成为突破本地硬件限制、实现高效AI计算的关键基础设施。本报告对ToDesk云电脑、并行智算云和顺网云三大主流云平台进行了全面测评,从硬件配置、AI软件兼容性、性能表现、用户体验及成本效益等维度深入分析其AI支持能力…...
javaweb的拦截功能,自动跳转登录页面
我们开发系统时候,肯定希望用户登录后才能进入主页面去访问其他服务,但要是没有拦截功能的话,他就可以直接通过url访问或者post注入攻击了。 因此我们可以通过在后端添加拦截过滤功能把没登录的用户给拦截下来,让他去先登录&#…...
精益数据分析(75/126):用户反馈的科学解读与试验驱动迭代——Rally的双向验证方法论
精益数据分析(75/126):用户反馈的科学解读与试验驱动迭代——Rally的双向验证方法论 在创业的黏性阶段,用户反馈是优化产品的重要依据,但如何避免被表面反馈误导?如何将反馈转化为可落地的迭代策略&#x…...
轻量级高性能Rust HTTP服务器库Hyperlane,助力现代网络服务开发
轻量级高性能Rust HTTP服务器库Hyperlane,助力现代网络服务开发 Hyperlane是一款专为简化网络服务开发而设计的轻量级、高性能Rust HTTP服务器库。它凭借纯Rust和标准库构建,实现了Windows、Linux和macOS全平台兼容,依托Tokio异步运行时&…...
PCB设计实践(二十四)PCB设计时如何避免EMI
PCB设计中避免电磁干扰(EMI)是一项涉及电路架构、布局布线、材料选择及制造工艺的系统工程。本文从设计原理到工程实践,系统阐述EMI产生机制及综合抑制策略,覆盖高频信号控制、接地优化、屏蔽技术等核心维度,为高密度、…...
VRRP 协议
一、前言 最近被问到一个VRRP的网络协议,一开始我是蒙蔽的状态,至于什么是VRRP,我后面查了一下,因为对于网络这方面我也不是很精通,见谅! VRRP,全称叫虚拟路由冗余协议,是我孤陋寡闻…...
年度工作计划总结述职报告PPT模版一组分享
工作计划总结述职报告PPT模版:工作计划述职报告PPT模版https://pan.quark.cn/s/fba40a5e87da 第一套PPT模版是医院年度工作计划的封面页,有蓝橙配色、医院标题、年度工作计划的大字、英文副标题、汇报人信息和右上角的医院logo区域,右侧还有医…...
【容易坑】mybatis中使用if标签比较两个字符串是否相等
资料都来自于网络,这里只是记录一下,仅供参考 现象 上传参数确实为3,但是到了sql中还是2,很纳闷,确定不是上送参数的问题 问题解决 问题的关键点就在于为啥偏偏是2身上,仔细看一下sql语句,这个…...
AI与产品架构设计(7):实时数据驱动下的AI架构设计:从流数据到智能决策
实时数据驱动下的AI架构设计:从流数据到智能决策 一、引言:从静态智能到流式智能的革命性跨越 在AI演进的历程中,我们正经历着从"数据仓库时代"向"数据流时代"的范式迁移。传统AI系统依赖的离线批处理模式,…...
测试W5500的第4步_使用ioLibrary库创建UDP客户端和服务器端
从下载网络测试工具,经常会区分UDP客户端和UDP服务器端。其实这么区分,是不正确的。它区分,是因为担心使用的人不会配置,这是它这么设计的原因。 UDP(User Datagram Protocol,用户数据报协议)是一种简单的,无连接的传…...
六台升降台完整的限位保护逻辑
一、限位保护的核心逻辑 以下是实现限位保护功能的关键代码,集成在主控制程序中: // // 限位保护处理 - 集成在主程序中 // FOR i : 1 TO 6 DO// 读取限位状态(从变频器状态字获取)Lifts[i].UpperLimit : (Lifts[i].StatusWord …...
腾讯位置服务地点搜索开发指南
概述 提供多种搜索功能: 指定城市/区域搜索:如在北京搜索景点。新增高级参数:支持获取车站、机场、园区等较大范围地点的子点和出入口热度,辅助用户选择准确目的地。周边搜索:如,搜索颐和园附近半径500米内…...
101个α因子#12
(sign(delta(volume, 1)) * (-1 * delta(close, 1)))worldquant brain平台上调整后的语法: (sign(ts_delta(volume, 1)) * (-1 * ts_delta(close, 1)))这个alpha因子的逻辑可以分为以下几个步骤: 1. 计算成交量的变化方向:sign(ts_delta(vol…...
opencv_version_win32
很多人发了opencv的编译方法,很少见到启动和关闭了那些模块,现在发个WIN64 opencv编译后的信息。 执行opencv_version_win32.exe 因为显卡较老 2060 super, NVIDIA GPU arch: 75 80 86 87 89 90。至于更高的反本没有显卡因此不知道。 BLAS库使用效率较高…...
Flask 路由装饰器:从 URL 到视图函数的优雅映射
前置知识,关于Python装饰器的语法,链接:Python 装饰器:从“语法糖”到“代码神器”的深度解析 1、路由装饰器的功能:给 URL 贴 “功能标签” 在 Flask 开发中,你一定见过这样的代码: from fla…...