4级流水线64位加法器

现在开始学习使用FPGA实现数字信号处理算法。这是第一个算法实现:使用四级流水线,提高64位加法器的速度。

使用流水线提高运算速度是以面积换取速度的做发。算法的思想是:如果使用一个64位的加法器实现,延时肯定比16位的加法器延时要大。也就是说16位的加法器的时钟频率可以更高。(具体高多少,呵呵我也不知道。因为我现在也不知道如何去分析程序的最高频率。这是我以后要解决的问题)

接下来说说具体的实现:

总的思想是,先将64位分为4段,[63:48],[47:32],[31:16],[15:0]。一段一段的计算,这样就将64位分为16位。

速度已经说明,16位的时钟肯定比64位的加法器要高。但是在一个16位的加法运算完成后还有其他段的数据需要保存,这就是要增加面积的原因。

看程序:

module addr(
input clk, rst_n,
input [63 : 0] x, y,
output [64 : 0] sum
);

parameter ADD_WIDTH = 5‘d16;

//16bit add and 4 stages
//first stage registers
reg [ADD_WIDTH : 0] r1_r, r2_r;
reg [ADD_WIDTH - 1 : 0] r3_r, r4_r, r5_r, r6_r; //
//second stage registers
reg [ADD_WIDTH : 0] r3_r2, r2_r2;
reg [ADD_WIDTH - 1 : 0] r1_r2, r4_r2, r5_r2; //
//third stage registers
reg [ADD_WIDTH : 0] r3_r3, r4_r3;
reg [ADD_WIDTH - 1 : 0] r1_r3, r2_r3; //
//forth stage registers
reg [ADD_WIDTH : 0] r4_r4;
reg [ADD_WIDTH - 1 : 0] r1_r4, r2_r4, r3_r4; //

always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
r1_r <= 1‘b0;
r2_r <= 1‘b0;  r3_r <= 1‘b0;   r4_r <= 1‘b0;  r5_r <= 1‘b0;  r6_r <= 1‘b0;

end
  else begin
  //use 4 stages pipline
  //first stage:
  r1_r <= x[15 : 0] + y[15 : 0];
  r2_r <= x[31 : 16] + y[31: 16];
  r3_r <= x[47 : 32]; //16b
  r4_r <= y[47 : 32]; //16b
  r5_r <= x[63 : 48]; //16b
  r6_r <= y[63 : 48]; //16b
  //second stage
  r1_r2 <= r1_r[15 : 0];
  r2_r2 <= r2_r + r1_r[16];
  r3_r2 <= r3_r + r4_r;
  r4_r2 <= r5_r;
  r5_r2 <= r6_r;
  //thrid stage
  r1_r3 <= r1_r2;
  r2_r3 <= r2_r2[15 : 0];
  r3_r3 <= r3_r2 + r2_r2[16];
  r4_r3 <= r4_r2 + r5_r2;
  //forth stage
  r1_r4 <= r1_r3;
  r2_r4 <= r2_r3;
  r3_r4 <= r3_r3;
  r4_r4 <= r4_r3 + r3_r3[16];

end //rst_n else

end //always
//

assign sum = {r4_r4, r3_r4[15:0], r2_r4[15:0], r1_r4[15:0]};

endmodule

第一层流水线:计算[15:0]的和,计算[31:16]的和但是没有计算进位(进位的计算放在了二级流水线上)。保存高位[47:32],[63:48]。

第二层流水线:计算[31:16]的进位,[47:32]的和(没有计算进位)。保存[15:0],[63:48].

第三层流水线:计算[47:32]的进位,[63:48]的和(没有计算进位)。保存[15:0],[32:16].

第四层流水线:计算[63:48]的进位,保存[15:0],[32:16],[47:32].

至此流水线的加法器分析完成。从中可知每一层的流水线寄存器都要保存当前数据的全部信息。如果由上一层来看数据流。就可以实现,每个时钟周期都可以输入两个64位的数据(但是要4个时钟周期后才有当前输入数据的结果)。但是这里的每个时钟周期可以是16位的最高时钟周期。

这是RTL图:

最后在来一张仿真图来结束:

时间: 2024-08-10 15:02:08

4级流水线64位加法器的相关文章

32位与64位

1.我们所说的64位CPU架构指的是64位内存扩展技术,它是32CPU架构的一个扩展,且兼容原来的架构.它通过增加CPU的运算位宽扩展增加CPU和内存之间的位宽,从而让系统支持更大容量的内存,64位最大支持64G. 2.处理器模式:传统32位模式:安装32位操作系统,安装32位硬件驱动程序,安装32位应用程序.目前大多数人的处理器是Intel 64,安装了32位操作系统,程序运行良好,包括16bit和32bit程序. 兼容模式:操作系统和硬件驱动程序都是64bit,计算机允许64bit操作系统下

采用流水线技术实现8位加法器

说明      本文基于FPGA和CPLD器件,采用非流水线和流水线技术实现8位加法器,并对比其Quartus II仿真结果和波形时序.      器件选择: Stratix:EP1S40F1020C5(FPGA) MAX7000S:EPM7064SLC44-5(CPLD) 实验一  FPGA实现8位加法器 程序清单: 1 /*******************8位加法器(非流水线)***********************/ 2 module adder_nonpipe(cout, su

Ansys Totem 14.1.b2 Linux 64位版 晶体管级电源噪声和可靠性仿

ANSYS Totem是一款晶体管Ansys Totem 14.1.b2 Linux 64位版 晶体管级电源噪声和可靠性仿级电源噪声和可靠性仿真平台,可用于模拟.混合信号和定制数字设计. 新版Ansys Totem 14.1.b2支持Linux系统: RedHat Enterprise 3 SUSE 9 或更高版本 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 专业行业软件,值得信赖! 为您提供完整版好用软件!竭诚为您

PowerShape 2017 64位无限制终级版+FeatureCAM

AutoDesk(原delcam)PowerShape 2017 64位无限制终级版Autodesk(Delcam) FeatureCAM 2017 64位中文旗舰版 AutoDesk (原delcam) PowerShape 2017 64位为多国语言版本,支持的语言有:英文.法文.德文. 意大利文.日文.葡萄牙文.俄文和西班牙文(简体中文版待更新).是专业的冲压模具准备设计分析工 具,主要为加工制造准备复杂的CAD模型. Ranorex.Studio.v5.0.3.18203 GUI自动测试

solidworks 2013 多国语言32 64位(带注册机)全功能

Autodesk.SoftImage.v2014.Linux64-ISO 1DVD Global.Energy.Mapper v14.1.4.2 Win32 1CD LMS.Imagine.LAB.Amesim.R12-ISO 1DVD LMS.Test.LAB.Rev12A.SL2-ISO 1DVD Remcom XFDTD 7.3.0.3 Win64 1CD Tekla.Structures.v19.0.WIN64-ISO 1DVD  ACD.Systems.Canvas.GIS.v14.0

dll文件32位64位检测工具以及Windows文件夹SysWow64的坑(很详细,还有自动动手编程探测dll)

阅读目录 dll文件不匹配导致数据库无法启动 究竟是System32还是SysWow64 区分dll文件32位64位的程序让我倍感迷惑 再次判断究竟是System32还是SysWow64——意想不到的坑 Program Files (x86)与Program Files 32位程序真的需要访问System32吗 32位程序与64位程序的区别总结 参考资料 自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program

【转】win32,win64编程永恒;语言编程需要注意的64位和32机器的区别

原文网址:http://www.cnblogs.com/kex1n/archive/2010/10/06/1844737.html 一.数据类型特别是int相关的类型在不同位数机器的平台下长度不同.C99标准并不规定具体数据类型的长度大小,只规定级别.作下比较: 16位平台 char         1个字节8位 short        2个字节16位 int            2个字节16位 long         4个字节32位 指针         2个字节 32位平台 char 

一个64位操作系统的实现

也许这只是一本书,也许这只是一堆代码,但更可能会帮助你了解.领悟计算机操作系统原理. 什么是操作系统?计算机相关专业的读者们在大学时候都会有<操作系统>这门课程,但是在课上老师讲的大多数内容都是一些理论性的概念,比如:什么是进程?什么是线程?文件系统结构.内存管理单元.进程调度.为什么要空间换时间?当时对这些问题也只是一知半解,想知道这些问题,但是又无从下手.就算有一些思路,也因为学艺不精,半途而废了.问老师也只是理论性的解答,无法得到一个清晰的答案.我想,正在读此书的你也不一定能把这些问题全

在64位linux下安装32位oracle软件

在某些情况下,有时我们需要在64位的系统下来安装32的oracle软件(如,客户的变态要求).虽然在理论上,这种方式是可行的,但在实际的安装过程中确往往是错误百出,为了避免不必要的错误,也为了方便以后的工作查找,记录安装过程. 本示例以redhat4--64位操作系统,oracle 10g为数据库,安装过程中,仅仅使用了最小的安装包,以便尽可能多的发现问题.由于问题主要出现在软件包的安装和兼容性上,安装过程的其他方面不过多涉及. 首先,配置yum使用本地光盘作为源,并配置同时安装32位和64位的