米联客-FPGA程序设计Verilog语法入门篇连载-19 Verilog语法_低功耗设计

软件版本:无

操作系统:WIN10 64bit

硬件平台:适用所有系列FPGA

板卡获取平台:https://milianke.tmall.com/

登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

1概述

本小节讲解Verilog语法的低功耗设计,需要掌握几种低功耗设计的方法。

2低功耗简介

低功耗技术在当今得到越来越广泛的发展,在你的身边存在着许多的消费电子产品,无一不含有低功耗技术的成果。比如现在的智能手机,体积、重量都比之前有了很大提升,低功耗技术使得手机电池的续航能力进一步增强;无线蓝牙耳机,做到非常小的体积内,容纳小容量电池,也是得益于低功耗技术的发展。

目前的低功耗设计主要从芯片设计和系统设计两个方面考虑。随着半导体工艺的飞速发展和芯片工作频率的提高,芯片的功耗迅速增加,而功耗增加又将导致芯片发热量的增大和可靠性的下降。因此,功耗已经成为深亚微米集成电路设计中的一个重要考虑因素。为了使产品更具竞争力,工业界对芯片设计的要求已从单纯追求高性能、小面积转为对性能、面积、功耗的综合要求。而微处理器作为数字系统的核心部件,其低功耗设计对降低整个系统的功耗具有重要的意义。

3常用的低功耗设计技术

(1)动态电压调节

动态功耗与工作电压的平方成正比,功耗将随着工作电压的降低以二次方的速度降低,因此降低工作电压是降低功耗的有力措施。但是,仅仅降低工作电压会导致传播延迟加大,执行时间变长。然而,系统负载是随时间变化的,因此并不需要微处理器所有时刻都保持高性能。动态电压调节技术降低功耗的主要思路是根据芯片工作状态改变功耗管理模式,从而在保证性能的基础上降低功耗。在不同模式下,工作电压可以进行调整。为了精确地控制电压,需要采用电压调度模块来实时改变工作电压,电压调度模块通过分析当前和过去状态下系统工作情况的不同来预测电路的工作负荷。

(2)门控时钟

在微处理器中,很大一部分功耗来自时钟。时钟是惟一在所有时间都翻转的信号,而且很多情况下引起不必要的门的翻转,因此降低时钟的开关活动性将对降低整个系统的功耗产牛很大的影响。门控时钟包括门控逻辑模块时钟和门控寄存器时钟。门控逻辑模块时钟对时钟网络进行划分,如果在当前的时钟周期内,系统没有用到某些逻辑模块,则暂时切断这些模块的时钟信号,从而明显地降低开关功耗。采用“与”门实现的时钟控制电路。门控寄存器时钟的原理是当寄存器保持数据时,关闭寄存器时钟,以降低功耗。然而,门控时钟易引起毛刺,必须对信号的时序加以严格限制,并对其进行仔细的时序验证。

(3)可变频率时钟

根据系统性能要求,配置适当的时钟频率以避免不必要的功耗。门控时钟实际上是可变频率时钟的一种极限情况(即只有零和最高频率两种值),因此,可变频率时钟比门控时钟技术更加有效,但需要系统内嵌时钟产生模块PLL,增加了设计复杂度。

(4)并行结构

并行结构的原理是通过牺牲面积来降低功耗。将一个功能模块复制为n(n≥2)个相同的模块,这些模块并行计算后通过数据选择器选择输出,采用二分频的并行结构。

(5)流水线技术

流水线技术本质上也是一种并行。把某一功能模块分成n个阶段进行流水作业,每个阶段由一个子模块来完成,在子模块之间插入寄存器。若工作频率不变,对某个模块的速度要求仅为原来的1/n,则工作电压可以降低为原来的1/n,电容的变化不大,功耗可降低为原来的1/n2,面积基本不变,但增加了控制的复杂度。

(6)低功耗单元

设计低功耗单元是降低功耗的一个重要方法,包括调整单元尺寸、改进电路结构和版图设计。用户可以根据负载电容和电路延时的需要选择不同尺寸的电路来实现,这样会导致不同的功耗,因此可以根据需要设计不同尺寸的单元。同时,为常用的单元选择低功耗的实现结构,如触发器、锁存器和数据选择器等。

(7)低功耗状态机编码

状态机编码对信号的活动性具有重要影响,通过合理选择状态机状态的编码方法,减少状态切换时电路的翻转,可以降低状态机的功耗。其原则是:对于频繁切换的相邻状态,尽量采用相邻编码。例如:Gray码在任何两个连续的编码之间只有一位的数值不同,在设计计数器时,使用Gray码取代二进制码,则计数器的改变次数几乎减少一半,显著降低了功耗;在访问相邻的地址空间时,其跳变次数显著减少,有效地降低了总线功耗。

(8)Cache的低功耗设计

作为现代微处理器中的重要部件,Cache的功耗约占整个芯片功耗的30%~60%,因此设计高性能、低功耗的Cach结构,对降低微处理器的功耗有明显作用。Cache低功耗设计的关键在于降低失效率,减少不必要的操作。通常用来降低Cache功耗的方法有以下两种:一种是从存储器的结构出发,设计低功耗的存储器,例如采用基于CAM的Cache结构;另一种是通过减少对Cache的访问次数来降低功耗。

4Verilog中使用的低功耗设计方法

4.1 并行设计

在Verilog中对同一功能模块进行并行设计,可以一定程度上降低功耗,资源变多了,速度变快了。

并行处理,可以同时处理多条执行语句,使执行效率变高。在满足工作要求的情况下,采用并行处理,可降低系统工作频率,减少功耗。

比如设计乘法器时,在200MHz的工作频率下,需要一个DSP模块进行计算可以满足设计要求,如果使用100MHz的工作频率,那么需要2个DSP模块进行计算可以满足设计的要求,同时功耗降低了。

4.2 流水线设计

在Verilog中对同一功能模块进行流水线设计,可以一定程度上降低功耗,资源变多了,速度变快了。类似于并行设计,多级流水线技术可以将效率提升,同时需要更多地资源消耗。

流水线设计可以将一个较长的路径分成 N 级流水线。路径长度缩短为原来路径长度的 1/N。此时如果时钟频率不变,则在一个周期内,只需要对电容 C/N 进行充放电,而不是对原来的电容 C 进行充放电。因此在相同的频率要求下,可以采用较低的电源电压来驱动系统,使功耗降低。

4.3 资源共用

当设计中存在一些功能相同的运算模块,可以通过资源共享的方法避免同一个模块多次出现,减少资源的消耗。

4.4 状态编码

对于一些变化频繁的信号,翻转率较高,功耗相对较大。可以利用状态编码的方式来降低器件的开关次数,减少整体功耗。

例如进行状态机设计时,使用格雷码代替二进制编码,状态机切换前后的状态编码如果只有 1bit 的差异,就会减少翻转率,降低功耗。

4.5 门控时钟

时钟信号是变化频繁的信号,翻转率较高,功耗相对较大。如果在功能允许的情况下,适时关闭时钟,使得时钟可以控制,用时开启,不用时关闭,可以降低整体的功耗。

直接将时钟使能控制信号与时钟做"与"逻辑,就可以实现门控时钟。该方法缺点很明显。由于时序或抖动的原因,时钟使能信号与时钟进行"与"逻辑后,容易产生毛刺,会对数字电路产生严重影响。解决这个问题的方法就是使用锁存器,在时钟下降沿对时钟使能信号进行锁存,并保持一个时钟周期内不变。锁存后的信号再与时钟进行"与"逻辑操作,可将门控时钟中的毛刺消除掉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/400913.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark MLlib 特征工程(下)

Spark MLlib 特征工程(下) 前面我们提到,典型的特征工程包含如下几个环节,即预处理、特征选择、归一化、离散化、Embedding 和向量计算,如下图所示。 在上一讲,我们着重讲解了其中的前 3 个环节,也就是预处理、特征选…

java---概念

一.配置环境(三个变量) 1.JAVA_HOME(记录Java安装文件的路径) 2.PATH(系统直找的路径) 3.CLASSPATH(Java程序路径) .;%JAVA_HOME%\lib 二.第一个Java程序 源代码: so…

使用kimi快速完成论文仿写的提示词,我帮你总结好了

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在完成论文写作时,很多人都会想到“仿写”,但正确的做法是借鉴而非复制。今天我们将分享如何利用Kimi智能助手来提高论文写作的效率和质量,同时确保原…

Kubernetes快速入门

一、容器集群管理概述 1.1背景概述 容器技术的诞生虽解决了应用打包和发布的难题,但单一的容器技术工具并无 法支持起生产级大规模容器部署的场景。针对这一场景,容器管理与编排成为了容器技术发展的关键。Kubernetes 便是在这样的大背景下诞生的。 1.2…

【博客23】缤果Android_XXX调试助手模板(3款)V1.0(中级篇)

超级好用的Android_XXX调试助手模板 ( Android Studio Java) 备注: 仅模板无通信协议 开发工具: android-studio-2024.1.1.12-windows.exe 目录 一、软件概要: 二、软件界面: 1.App演示 2.其他扩展展示 2.1 自定义指令集 2.2 修改自定义指令集 …

IAM 编程访问和 AWS CLI

添加图片注释,不超过 140 字(可选) IAM 编程访问(欢迎来到雲闪世界。) IAM 编程访问是指使用访问密钥通过 API 和命令行工具访问 AWS 服务和资源。 当您为 IAM 用户启用编程访问时,您将生成可用于验证和…

Java-自定义注解中成员变量是Class<?>

在Java中,自定义注解可以包含各种类型的成员变量,包括 Class<?> 类型。这种类型的成员变量 通常用于表示某个类的类型信息。下面我将详细介绍如何定义一个包含 Class<?> 类型成员变量的 自定义注解,并给出一些示例代码。 1. 定义自定义注解 定义一个自定义…

行业大模型:信用评分大模型、生产优化大模型、库存管理大模型、物流行业大模型、零售行业大模型

金融行业大模型&#xff1a;信用评分大模型 信用评分模型在金融行业中扮演着至关重要的角色&#xff0c;它通过对个人或企业的信用状况进行评估&#xff0c;帮助金融机构有效控制风险&#xff0c;提高业务效率。以下是信用评分模型的特点及案例介绍&#xff1a; 信用评分模型…

高阶数据结构——B树

1. 常见的搜索结构 以上结构适合用于数据量相对不是很大&#xff0c;能够一次性存放在内存中&#xff0c;进行数据查找的场景。如果数据量很大&#xff0c;比如有100G数据&#xff0c;无法一次放进内存中&#xff0c;那就只能放在磁盘上了&#xff0c;如果放在磁盘上&#xff0…

[Unity]在场景中随机生成不同位置且不重叠的物体

1.前言 最近任务需要用到Unity在场景中随机生成物体&#xff0c;且这些物体不能重叠&#xff0c;简单记录一下。 参考资料:How to ensure that spawned targets do not overlap ? 2.结果与代码 结果如下所示&#xff1a; 代码如下所示&#xff1a; using System.Collec…

Java练习模拟考试答题系统小程序源码

&#x1f31f;高效备考秘籍&#xff01;如何玩转练习模拟考试答题系统✨ &#x1f4da; 引言&#xff1a;为什么选择模拟考试&#xff1f; 嘿小伙伴们&#xff0c;是不是每次临近大考都紧张得不行&#xff1f;别怕&#xff0c;今天就来揭秘一个备考神器——练习模拟考试答题系…

React使用useRef ts 报错

最近在写自己的React项目&#xff0c;我在使用useRef钩子函数的时候发现 TS2322: Type MutableRefObject<HTMLDivElement | undefined> is not assignable to type LegacyRef<HTMLDivElement> | undefined Type MutableRefObject<HTMLDivElement | undefined&g…

C++STL初阶(10):list的简易实现(下)

在上一文中我们完成了链表的多数基本接口&#xff0c;本文主要围绕构造函数进行补充 1. 链表的拷贝 在前文中我们没有手动实现拷贝构造&#xff0c;所以使用的就是编译器自动生成的浅拷贝 先使用一下编译器自动生成的浅拷贝&#xff1a; 我们在打印li2之前给li1加入一个数据&…

excel导入

Excel数据导入 使用easyexcel和hutool-poi实现excel导入 1、pom依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency><dependency><groupId…

【笔记】Swin-Transformer 的计算量与Transformer的计算量的对比:前者通过使用新颖的窗口技巧,将后者的高阶项变为低阶,大大降低了计算量

补充1&#xff1a; 局部窗口内的自注意力&#xff08;W-MSA&#xff09;: 在 Swin Transformer 中&#xff0c;输入特征图被划分为多个小的窗口&#xff08;例如 7x7 的窗口&#xff09;。在每个窗口内&#xff0c;计算自注意力机制&#xff08;W-MSA, Window-based Multi-Head…

基于LQR算法的机器人轨迹跟踪控制详解

本文摘要 本文详细介绍了基于线性二次型调节器&#xff08;LQR&#xff09;算法的机器人轨迹跟踪控制方法。首先&#xff0c;文章通过建立基于运动学模型的离散状态方程&#xff0c;来描述机器人的当前状态与目标状态之间的关系&#xff0c;并利用此模型进行状态误差的计算。接…

「Unity3D」TextMeshPro-Text(UI)无法拖放到TextMeshPro的属性面板上

继承MonoBehaviour&#xff0c;然后定义public TextMeshPro textPro&#xff0c;属性面板上就会有TextMeshPro的拖放槽&#xff08;slot&#xff09;&#xff0c;以配置含有TextMeshPro的组件对象&#xff08;GameObject&#xff09;。 但此时会发现&#xff0c;含有TextMeshPr…

Linux10 三剑客 正则表达式

三剑客 grep 擅长过滤&#xff0c;按行过滤 首先要把多个虚拟机的网络改成一种形式 爆破攻击&#xff1a;‌爆破攻击是一种尝试通过穷举法&#xff08;即尝试所有可能的组合&#xff09;来破解密码或身份验证的方法。这种攻击通常用于尝试登录到系统、网络或应用程序&#…

C#方法

在 C&#xff03;中&#xff0c;方法的定义包括任意方法修饰符&#xff08;如方法的可访问性&#xff09;、返回值的类型&#xff0c; 然后依次是方法名、输入参数的列表&#xff08;用圆括号括起来&#xff09;和方法体&#xff08;用花括号括起来&#xff09;。 [修饰符] 返…

【昂贵的婚礼】

题目 代码 #include<bits/stdc.h> using namespace std; typedef pair<int, int> PII; #define x first #define y second const int N 110, M 10110; int h[N], e[M], ne[M], w[M], idx; bool st[N]; int n, m; int dist[N]; int tier[N]; void add(int a, int…