编写代码前,在系统与架构层次上制定完善低功耗方案,可以节省 50% 以上的功耗。此类低功耗设计和代码描述基本没有关系,往往由系统和架构人员进行设计。此类人员需要较丰富的硬件经验,能对系统有一个良好的整体把握。方案制定后,再交予功能设计人员(例如 IC 前端设计、FPGA 工程师等)实现。
一般来说,电压越低,功耗越低,但是性能往往会越差。综合功耗与性能的考虑,可以对不同的模块采用不同的电压设计。
多电压技术主要有 3 种:



一般来说,供电电压越大,电路延迟越小,性能越高。例如,芯片的处理器核、存储器一般需要较高的性能,所以可以采用较高的电压方案。其他外部设计,可以采用较小的电压方案,来降低功耗。
一般来说,频率越高,性能越好,但功耗越大。通过合理的时钟分配,也能有效的降低功耗,一般有以下几种方法:
1、通过时钟分频,各模块采用合理的工作时钟
一般 CPU 总线需要较高的时钟来满足较高的设计需求,而 uart,spi 等外设工作频率不会很高。如果设计中一视同仁都采用较高的工作频率,显然会增加无端的功耗。
将高速时钟进行一定的分频,分别赋予不同的模块。在满足工作性能的条件下看,采用较低的工作时钟频率,可以有效减少功耗。
2、加入多种低功耗工作模式
设计中加入多种低功耗时钟分配方案,人为的来选择一种工作模式,可以降低功耗。各种低功耗模式设计可以参考如下:
| 模式 | 说明 |
|---|---|
| Normal | 主时钟使用较高频率的锁相环时钟,送入到设计电路中 |
| Slow | 主时钟使用较低的本地时钟 |
| Low-Power | 总线时钟关闭,只保留一些外设的工作时钟 |
| Sleep | 时钟全部关闭,全设计进入睡眠状态 |
3、自适应选择工作频率
和多电压技术的电压自适应调整类似,根据当前的工作状态来选择合适的工作频率,也可以降低功耗。
例如电脑在处理一些简单的文档时,可以选择相对较低的工作频率;而电脑在处理一些视频渲染工作时,则需要相对较高的工作频率。
工作频率和电压的动态调整,往往是低功耗设计中同时需要的策略。
系统中的功耗都是硬件单元消耗的。在设计过程中,系统的功能可以用硬件实现,也可以使用软件实现。
系统设计者根据设计规范和自身经验对系统性能进行推测(仿真建模),决定哪一部分使用硬件来实现,哪一部分使用软件来实现,从而达到性能和功耗的最佳平衡。例如一些参数的计算,软件计算完成后直接输入给硬件,是比较合理的设计。
总之,软硬件划分可以很大程度上降低功耗,这是系统设计者需要慎重考虑的。
现在很多设计也依赖于 IP 的集成。选择 IP 时,在满足工作性能的条件下,也需要合理的选择功耗相对较低的 IP 。
设计中使用到的标准单元库,虽然实现的逻辑功能相同,但也会因为工艺库的不同具有不同的电压阈值。
LVT(Low Voltage Threshold),阈值电压低,饱和电流小,所以此类单元库具有更高的速度和更大的泄漏电流。
HVT(High Voltage Threshold)单元漏电流小,但速度较慢。
SVT/RVT(Standard/Regular Voltage Threshold) 的性能介于 LVT 与 HVT 之间。
所以选用标准单元库的时候,需要综合速度和功耗两个方面来考虑。
例如,可以在关键路径使用 LVT 单元,在非关键路径使用 HVT 单元。
还有一些其他可以减少功耗的系统方法,如下一些举例:
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题: