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

2023-11-16


前言

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位有效编码或格雷码
  • 选择合适的低功耗器件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

低功耗技术——流水线设计(加法器和乘法器) 的相关文章

  • 【Augmentation Zoo】RetinaNet + VOC + KITTI的数据预处理-pytorch版

    整合前段时间看的数据增强方法 并测试其在VOC和KITTI数据上的效果 我的工作是完成了对VOC和KITTI数据的预处理 RetinaNet的模型代码来自pytorch retinanet 该项目github仓库在 https github
  • 中标麒麟+达梦数据库 无效的列名[AAAAAAAAAAAAAFS]

    目录 前言 解决办法 中标麒麟 解决办法 windows 前言 今天我将项目部署到中标麒麟服务器 发现原本好使的功能 只要一做添加操作就报如下错误 虽然报错 但数据还是添加了进去 这让我十分费解 解决办法 中标麒麟 问题出现在返回新增结果时
  • Next.js中使用antd修改其组件的默认样式

    在项目中使用了next js搭配了antd 其中需要自定义antd样式 在next js中如果想定义css 我用到的有两种方式 一种是直接使用行内式 div test div 另一种就是写一个css文件后引入 定义一个test module
  • SpringBoot(5)-SpringBoot整合其他项目

    SpringBoot 5 SpringBoot整合其他项目 1 整合Druid数据库连接池 1 1学习地址 1 2application yml 1 3访问一下 1 4随便执行一下新增 2 整合Redis 2 1添加redis pom依赖

随机推荐

  • mimikatz

    https blog gentilkiwi com mimikatz https github com ParrotSec mimikatz
  • C++day1(笔记整理)

    一 Xmind整理 二 上课笔记整理 1 第一个c 程序 hello world include
  • docker 四种网络模型

    一 docker网络基础知识 Docker在创建容器时有四种网络模式 bridge为默认不需要用 net去指定 其他三种模式需要在创建容器时使用 net去指定 bridge模式 使用 net bridge指定 默认设置 none模式 使用
  • java各类型String,int,char,long,StringBuilder,StringBuffer,Integer之间的转换总结

    String和char类型之间的转换 1 String char 因为String是字符串 而char是单个字符 只能把String 转化为char数组 方法为 char ch str toCharArray 2 char String 方
  • cmake命令之target_include_directories

    一 介绍 命令格式 target include directories
  • 完整的芯片反向设计流程原来是这样的!(实例讲解)

    完整的芯片反向设计流程原来是这样的 实例讲解 作者 时间 2018 02 23来源 网络收藏 现代IC产业的市场竞争十分激烈 所有产品都是日新月异 使得各IC设计公司必须不断研发新产品 维持自身企业的竞争力 IC设计公司常常要根据市场需求进
  • 在JavaScript的ES5版本中Array数组的reduce方法详解

    函数声明 reduce callback initialValue 参数说明 callback 回调函数 格式为function prev next initialValue 初始值 可选参数 返回值 最后一次执行callback 回调函数
  • SOME/IP

    SOME IP 名词解释 SOME IP 全称是 Scalable service Oriented MiddlewarE over IP 也就是基于 IP 协议的面向服务的可扩展性通信中间件协议 面向服务 SOA 基于 IP 协议之上的通
  • springcloud动态加载日志路径和log.path_IS_UNDEFINED目录问题

    多模块工程中通常需要将不同模块服务的日志输出到指定的目录 日志目录结构如下 logs app1 app2 基于上述需要 需要在logback spring xml中动态读取application yml 或者application prop
  • 简单的tcpdump抓包使用总结:抓取指定ip、指定网卡、指定端口的包

    1 今天由于需要抓包研究网络问题 所以研究了一下抓取指定ip 指定网卡 指定端口的包并且输入到文件中 2 tcpdump与Wireshark介绍 在网络问题的调试中 tcpdump应该说是一个必不可少的工具 和大部分linux下优秀工具一样
  • ES使用小结

    ES使用总结 1 查询es全部索 2 根据es索引查询文档 3 查看指定索引mapping文件 4 默认查询总数10000条 5 删除指定索引文档 6 删除所有数据包括索引 7 設置窗口值 8 logstash简单配置 Logstash配置
  • 高德地图Amap常用功能总结

    设置缩放比例 1 设置缩放比例的api是 aMap moveCamera CameraUpdateFactory zoomTo 18 如果你直接设置是没用的 因为此时地图还没加载成功 所以要监听地图加载成功的事件 aMap setOnMap
  • MATLAB中均值、方差、均方差的计算方法

    1 均值 数学定义 Matlab函数 mean gt gt X 1 2 3 gt gt mean X 2 如果X是一个矩阵 则其均值是一个向量组 mean X 1 为列向量的均值 mean X 2 为行向量的均值 gt gt X 1 2 3
  • sql查询按两个字段查询重复记录

    1 sql查询按两个字段查询重复记录 代码如下 示例 select from 表名 a where a 字段1 in select 字段1 from 表名 group by 字段1 字段2 having count gt 1 and a 字
  • STM32通过ESP8266利用机智云平台实现手机远程操作

    STM32通过ESP8266利用机智云平台实现手机远程操作 将STM32作为主控芯片 ESP8266作为外设 利用串口传递信息 通过机智云平台实现STM32与手机之间的数据传输 之所以选择机智云平台 是因为机智云平台相关配套的软件工具非常齐
  • 【每日一题】Leetcode 刷题 二叉树-树的遍历 介绍

    二叉树 树的遍历 前序遍历 根 左 右 中序遍历 左 根 右 后序遍历 左 右 根 代码实现 前序遍历 中序遍历 后序遍历 完整代码 前序遍历 根 左 右 遍历顺序分别为 F B A D C E G I H 中序遍历 左 根 右 中序遍历顺
  • 常见的 HTML<meta> 标签的 name 属性及其作用

    HTML中的 标签可以通过 name 属性提供元数据 这些元数据可以用于指定有关文档的信息 以及控制浏览器和搜索引擎的行为 name 属性通常与其他属性一起使用 如 content charset http equiv 等 以提供更具体的元
  • 2022国赛34:路由器之间ISIS协议配置

    大赛试题内容 5 RT1以太链路 RT2以太链路之间运行ISIS协议 进程10 分别实现loopback3 之间ipv4互通和ipv6互通 RT1 RT2的NET分别为10 0000 0000 0001 00 10 0000 0000 00
  • web基础学习(十)CSS3之 @keyframes 、animation

    css3新增属性 keyframes 关键帧 可以帮助开发者不必依赖JavaScript 只使用css代码完成动画制作 那么如何使用 keyframes呢 这里有两个重要知识点 1 keyframes 定义关键帧 语法 keyframes
  • 低功耗技术——流水线设计(加法器和乘法器)

    文章目录 前言 一 流水线 1 16bit加法器 2 无符号4bit乘法器 3 编写一个4bit乘法器模块 并例化该乘法器求解c 12 a 5 b 二 降低FPGA功耗 1 静态功耗 2 动态功耗 前言 2023 3 31 今天学习降低功耗