低功耗技术——流水线设计(加法器和乘法器)

news2024/11/20 23:27:12

文章目录

  • 前言
  • 一、流水线
    • 1、16bit加法器
    • 2、无符号4bit乘法器
    • 3、编写一个4bit乘法器模块,并例化该乘法器求解c=12*a+5*b
  • 二、降低FPGA功耗
    • 1、静态功耗
    • 2、动态功耗


前言

2023.3.31 今天学习降低功耗的一些方法


在这里插入图片描述

一、流水线

电路最高工作频率:取决于最长的组合逻辑电路的延时值

数据传播时,在某一个时刻,该路径下许多电路逻辑单元都没有工作,电路效率很低。

流水线:将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。

在这里插入图片描述

举例:两级组合逻辑,非流水线操作,一个周期就能输出结果;
流水线设计的话,插入两级寄存器,输出第一个数据需要两个周期,接下来每个周期输出一个数据。

优点:每一小部分并行处理,提高了数据吞吐率;同时小部分的延时较小,提高电路时钟频率。

缺点:插入寄存器,实际上是用面积换速度的方法,会导致芯片面积增加,布线困难,时钟偏差增加,功耗也会增加。

应用场景

  • 组合逻辑较长
  • 功能模块之间的流水线,用乒乓来交换数据

1、16bit加法器

非流水线设计:
在这里插入图片描述

module adder(
	input [15:0] a,
	input [15:0] b,
	input clk,
	input cin,
	output cout,
	output [15:0] sum
);
	assign {cout,sum} = a + b + cin;
endmodule

流水线设计:
在这里插入图片描述
有个疑问,第二级寄存器是不是也可以不需要,但是加法计算需要时间?

module adder(
	input [15:0] a,
	input [15:0] b,
	input clk,
	input cin,
	output cout,
	output reg [15:0] sum
);
	reg [7:0] a_r;
	reg [7:0] b_r;
	reg cout_r;
	reg [7:0] sum_r;
	
	//第一级寄存器,除了寄存低8bit的计算结果,还要寄存没有用到的高8bit,所有数据经过寄存器要相同,这样数据才会同时达到第二级寄存器
	always@(posedge clk)begin
		a_r <= a[158];
		b_r <= b[158];
		{cout_r, sum_r} <= a[7:0] + b[7:0] + cin;
	end
	
	//第二级寄存器
	always@(posedge clk)begin
		{cout, sum[158]} <= a_r + b_r + cout_r;
		sum[7:0] <= sum_r;
	end
endmodule

2、无符号4bit乘法器

乘法器:并行(*)、移位相加、查找表、加法树、并行乘法器

下面是流水线乘法器的电路图
在这里插入图片描述

module multi_pipe#(
	parameter size = 4
)(
	input 						clk 		,   
	input 						rst_n		,
	input	[size-1:0]			mul_a		,
	input	[size-1:0]			mul_b		,
 
 	output	reg	[size*2-1:0]	mul_out		
);

	parameter N = size * 2;
    //defination
    wire [N - 1 : 0] temp [3:0];
     
    reg [N - 1 : 0] adder_0;
    reg [N - 1 : 0] adder_1;
     
    //output
    genvar i;
    generate
        for(i = 0; i < 4; i = i + 1)begin : loop
            assign temp[i] = mul_b[i] ? mul_a << i : 'd0;
        end
    endgenerate
     
     //这一部分为了更清楚,也可以分开写成两个,因为这里用到了两级寄存器
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) begin
        	adder_0 <= 'd0;
        	adder_1 <= 'd0;
        	mul_out <= 'd0;
        end
        else begin
	        adder_0 <= temp[0] + temp[1];
	        adder_1 <= temp[2] + temp[3];
	        mul_out <= adder_0 + adder_1;
        end
    end
endmodule

3、编写一个4bit乘法器模块,并例化该乘法器求解c=12a+5b

//4bit乘法器模块
module mul(
    input [3:0] a,
    input [3:0] b,
    output [7:0] c
);
    wire [7:0] tmp [3:0];
    genvar i;
    generate for (i=0; i<4; i=i+1) begin
        assign tmp[i] = a[i] ? b << i : 'd0;
    end
    endgenerate
    
    assign c = tmp[0] + tmp[1] + tmp[2] + tmp[3];
    
endmodule

module calculation(
	input clk,
	input rst_n,
	input [3:0] a,
	input [3:0] b,
	output [8:0] c
	);
    
    wire [7:0] tmp0;
    wire [7:0] tmp1;
    reg  [8:0] c_r;
    
    mul mul_0 (a, 12, tmp0);
    mul mul_1 (b, 5 , tmp1);
    
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            c_r <= 'd0;
        end
        else begin
            c_r <= tmp0 + tmp1;
        end
    end
    assign c = c_r;
endmodule

二、降低FPGA功耗

1、静态功耗

使用低功耗的工艺来设计芯片,减小漏电流;也可以降低温度来降低静态功耗。

2、动态功耗

  • 选择适当的IO标准,IO端电压高,功耗大
  • 信号使能,用片选或者时钟使能来控制寄存器
  • 禁止非活动状态的时钟树翻转,之前时钟使能是使得时钟不总是翻转,但是时钟树总是在翻转的,这样还是会有功耗,因此要把非活跃区域的时钟树禁止翻转来减少功耗
  • 减少状态机的转换量,使用1位有效编码或格雷码
  • 选择合适的低功耗器件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高扇出的危害及优化

高扇出有哪些危害&#xff1f; 危害1&#xff1a;驱动能力下降&#xff0c;时序紧张 扇出过高也就是也就意味了负载电容过大&#xff0c;电路原理基础告诉咱们&#xff0c;负载电容越大&#xff0c;充放电速度越慢&#xff0c;电平跳变所需要的时间增加&#xff0c;即驱动能力…

「SAP ABAP」OPEN SQL(八)【WHERE语句大全】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

MySQL主从复制、读写分离(MayCat2)实现数据同步

文章目录1.MySQL主从复制原理。2.实现MySQL主从复制&#xff08;一主两从&#xff09;。3.基于MySQL一主两从配置&#xff0c;完成MySQL读写分离配置。&#xff08;MyCat2&#xff09;1.MySQL主从复制原理。 MySQL主从复制是一个异步的复制过程&#xff0c;底层是基于Mysql数据…

AI编程助手 Kodezi : 记录、分享一个 VS code 插件

目录0. 概述1. 安装 / 功能介绍1.1 安装1.2 功能介绍1.2.1 Debug1.2.2 代码优化1.2.3 代码转换1.2.4 逐行注释1.2.5 多行注释1.2.6 生成文档1.2.7 生成代码2. KodeziChat 聊天机器人2.1 聊天机器人功能介绍2.2 如何使用 KodeziChat &#xff1f;3. Kodezi 版本介绍3.1 免费版3.…

【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题三

相关链接 【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题二 【2023年第十一届泰迪杯数据挖…

【软件应用】TamperMonkey同步操作

不废话&#xff0c;记录一些关键点 要设置同步&#xff0c;先得打开高级设置模式 众所周知&#xff0c;这里可以设置同步&#xff0c;建议设置为WebDAV同步&#xff0c;这样通用性更强 至于选择啥网盘就看自己的需求了&#xff0c;支持WebDAV的网盘还是很多的&#xff0c;甚…

数据库设计案例

一个专辑可以包含多个曲目&#xff0c;一个曲目只能属于一个专辑 一对多 一个专辑可以包含多条短评&#xff0c;一条短语只能属于一个专辑 一对多 一个用户可以包含多条短评&#xff0c;一个短评只能属于一个用户 一对多 一个专辑可以属于多个用户&#xff0c;一个用户…

04-vue3侦听器

文章目录1.watch1.侦听数据源类型2.demo2.watchEffect函数3.watch vs. watchEffect1.watch 计算属性允许我们声明性地计算衍生值。然而在有些情况下&#xff0c;我们需要在状态变化时执行一些“副作用”&#xff1a;例如更改 DOM&#xff0c;或是根据异步操作的结果去修改另一…

熬大夜~ 阿里P8架构师总结微服务设计企业架构转型之道笔记

前言 本文涉及两个方面的知识体系&#xff0c;即企业架构知识体系和软件架构知识体系。 企业架构和软件架构虽然都与IT相关&#xff0c;但其知识体系是完全不同的两个领域。一般而言&#xff0c;搞企业架构的人士不明白软件架构的细节和实现&#xff0c;而从事软件架构的架构…

如何评价一款RTK差分基站的性能?

RTK是Real-Time Kinematic(实时动态)的缩写&#xff0c;是一种利用载波相位观测进行实时动态相对定位的技术&#xff0c;它能够实时提供测站点在指定坐标系中的三维定位结果&#xff0c;并达到厘米级精度。国内有时也将利用RTK技术为卫星定位设备提供厘米级修正服务的RTK基站简…

114. 二叉树展开为链表 Python

文章目录一、题目描述示例 1示例 2示例 3二、代码三、解题思路一、题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终…

基于jsp的公交查询系统源码数据库论文

目录 摘 要 1 Abstract 1 1 绪论 1 1.1 选题背景 1 1.2 国内外发展状况 1 1.3 选题的目的 1 1.4 研究手段及意义 1 2相关技术简介 3 2.1Jsp技术介绍 3 2.2 MyEclipse简介 4 2.3 数据库技术 4 2.3.1 数据库的体系结构 4 2.3.2 数据库管理系统&#xff08;D…

(十七)排序算法-基数排序

1 基本介绍 1.1 概述 &#xff08;1&#xff09;基数排序&#xff08;radix sort&#xff09;属于“分配式排序”&#xff0c;顾名思义&#xff0c;它是通过键值的各个位的值&#xff0c;将要排序的元素分配至某些“桶”中&#xff0c;达到排序的作用。 &#xff08;2&#x…

Denoising Diffusion Probabilistic Model,DDPM阅读笔记——(一)

Denoising Diffusion Probabilistic Model一、写在前面二、相关数学知识简介二、生成模型简介&#xff1a;三、变分自编码器概述&#xff08;VAE&#xff09;一、写在前面 人工智能生成内容&#xff08;AI Generated Content&#xff0c;AIGC&#xff09;近年来成为了非常前沿…

2023最新面试题-Java-2

基础语法 1. Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类型&#xff0c;在内存中分配了不同 大小的内存空间。 细化的数据类型就是占用空间的基本元素。分类&#xff1a;基本数据类型 数值型 整数类型…

MySQL-事务处理

MySQL事务 什么是事务 数据中的事务是指数据库执行的一些操作&#xff0c;这些操作最终要么全部执行成功&#xff0c;要么全部失败&#xff0c;不会存在部分成功&#xff0c;部分失败的情况 如果在事务的支持下&#xff0c;最终有两种结果&#xff1a; 操作成功&#xff1a;…

推荐一款 AI 脑图软件,助你神速提高知识体系搭建

觅得一款神器&#xff0c;接近我理想中&#xff0c;搭建知识体系的方法&#xff0c;先来看视频作为数据库开发或管理者&#xff0c;知识体系搭建尤为重要。来看看近些年缺乏足够数据库知识面造成的危害&#xff1a;a/ 数据安全风险&#xff1a;例如&#xff0c;2017年Equifax数…

Dubbo之认识RPC架构

文章目录一、互联网架构演变1.1 RPC架构1.2 SOA架构1.3 微服务架构1.4 SOA vs 微服务二、RPC 基本概念2.1 RPC 协议2.2 RPC 框架2.3 RPC 运行流程2.4 RPC vs HTTP提示&#xff1a;以下是本篇文章正文内容&#xff0c;Dubbo 系列学习将会持续更新 官方文档&#xff1a;https://c…

电池连接接触电阻的优化研究

金属与金属接触处的接触电阻主要受以下因素影响&#xff1a; 表面结构机械负载 表面结构可以通过表面平整度、表面氧化和吸水性进一步描述。 电池组中的这些接头将采用焊接或螺栓连接方式。最初最容易想到的是螺栓母线接头。 螺栓扭矩可用于估算力&#xff0c;从而估算接触压…

mvc的编辑和删除

之前实现了mvs的翻页登录显示等等一系列操作&#xff0c;现在我们再照葫芦画瓢实现一下编辑和删除。 1、编辑 我的思路是首先在list页面要给出编辑的超链接按钮&#xff0c;点击后跳转到一个jsp页面用来输入编辑的相关内容&#xff0c;再提交到负责编辑功能的servlet中。 首…