16位超前进位加法器.docx

上传人:b****5 文档编号:7510246 上传时间:2023-01-24 格式:DOCX 页数:10 大小:131.76KB
下载 相关 举报
16位超前进位加法器.docx_第1页
第1页 / 共10页
16位超前进位加法器.docx_第2页
第2页 / 共10页
16位超前进位加法器.docx_第3页
第3页 / 共10页
16位超前进位加法器.docx_第4页
第4页 / 共10页
16位超前进位加法器.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

16位超前进位加法器.docx

《16位超前进位加法器.docx》由会员分享,可在线阅读,更多相关《16位超前进位加法器.docx(10页珍藏版)》请在冰豆网上搜索。

16位超前进位加法器.docx

16位超前进位加法器

16位超前进位加法器设计

1需求分析

1.2.1串行进位加法器......................................................................................3

1.2.1超前进位加法器............................................................................................3

 

4.1顶层方案图的设计与实现..........................................................................6

.4.1.1顶层方案的整体设计...............................................................................6

4.1.2元器件选择和引脚锁定...................................................................7

4.2功能模块的设计与实现........................................................................8

4.2.1设计描述...........................................................................8

4.2.2创建RTL代码并得到电路图........................................................9

4.3功能仿真..............................................................................................................11

4.4编程与下载.........................................................................................................12

4.5硬件仿真结果.........................................................................................................12

5小结.......................................................................................................................................13

 

 

摘要:

加法运算是最重要最基本的运算,所有的其他基本算术运算乘除等都最终可以用加法运算来表示在不同的场合对加法器的要求不同,要的要求速度快有的要求面积小超前进位加法器相比于串行进位加法器是一种快速加法运算器,根据用户的要求追求速度与面积的平衡。

关键词:

超前进位加法器串行进位加法器速度面积

1需求分析

1.1加法器的发展

加法运算是最基本的运算,所有其他基本算术运算都是以加法运算为基础。

但因为加法运算存在进位问题,使得某一位计算结果的得出和所有低于他的位相关,因此,为了减少进位传输所耗的时间提高计算速度人们设计了多种类型的加法器。

如跳跃进位加法器,进位选择加法器,超前进位加法器等他们都是利用各位之间的状态来预先产生高位进位信号从而减少进位从低位到高位的传递时间

1.2几种加法器的性能比较

1.2.1串行进位加法器

串行进位加法器的每一位加和值都依赖于上一位进位信号,即进位信号是串行的经过加法器的每一位。

所以进位链的长度与整个加法器的位数有关;加法器的位数越宽,进位链越长,计算延迟越大。

串行进位加法器的计算函数如下

S=a异或b异或c

C=p+qc

P=ab

q=a+b

串行进位加法器的进位链是串行的,进位链的长度直接与加法器的位宽有关。

所以当加法器位宽很大时,进位计算的延迟也将随之变得很大。

1.2.2超前进位加法器

超前进位加法器,不同于串行进位加法器,对于每一位的结果是否有进位,不需要等前一位的进位结果计算出来,而是只要输入AB到来就可以经过一些列的逻辑运算同时计算出各位是否有进位。

理论上讲无论多少位的加法器都可以设计成为超前进位加法器,但是当位数很大的时候,超前进位加法器的逻辑会变得异常复杂,而失去了使用的意义,所以大多数超前进位加法器做到4位,而多于4位的要求,就用多个超前进位加法器级联实现所以在大多数有时间限制的加法器一般选用超前进位加法器。

 

2主要内容

1.1设计原理

将n个全加器相连可得n位加法器,但是加法时间较长。

解决的方法之一是采用“超前进位产生电路”来同时形成各位进位,从而实现快速加法。

超前进位产生电路是根据各位进位的形成条件来实现的。

四位超前进位加法器的设计:

首先做两个传递函数;进位产生函数Pi和进位传送函数Qi

Pi=AiBi

Qi=Ai+Bi

则第0级进位的进位端C0就是电路的进位输入Ci

第1级,C1=P1+Q1C0

第2级C2=P2+Q2C1=P2+Q2(P1+Q1C0)=P2+Q2P1+Q2Q1C0

第3级C3=P3+Q3C2=P3+P2Q3+P1Q3Q2+Q3Q2Q1C0

第4级C4=P4+Q4C3=P4+Q4P3+Q4Q3P2+Q4Q3Q2P1+Q4Q3Q2Q1C0

这样经过函数Pi和函数Qi产生一级时间延迟,经过计算C产生一级时延迟,则A,B输入一旦产生即可算出结果

 

2.2设计思路

进行16位超前进位加法器设计时由于位数太多如果采用全部超前进位则电路的逻辑结构极其复杂并且电路的规模会很大可以考虑用4个4位超前进位加法器来实现16位超前进位加法器的设计。

3设计思想

为了避免过于复杂的逻辑电路采用4个4位的超前进位加法器来实现,若4个4位超级进位加法器串联也可以实现功能但是仍要等4个进位的逐次产生所以本次实验采用了另一种方法

将4个超前进位模块进一步组合,使当A,B及Ci信号到来的时候可以进一步计算出各位间的进位信息。

该模块

Pi=AiBi

Qi=Ai+Bi

设置中间变量值QXi和PXi其中

QXi=Q4Q3Q2Q1

PXi=P4+Q4P3+Q4Q3P2+Q4Q3Q2P1

其中PX,QX为下一级进位计算的输入

QX1=Q4Q3Q2Q1

QX2=Q8Q7Q6Q5

QX3=Q12Q11Q10Q9

QX4=Q16Q15Q14Q13

PX1=P4+Q4P3+Q4Q3P2+Q4Q3Q2P1

PX2=P8+Q8P7+Q8Q7P6+Q8Q7Q6P5

PX3=P12+Q12P11+Q12Q11P10+Q12Q11Q10P9

PX4=P16+Q16P15+Q16Q15P14+Q16Q15Q14P13

C4=PX1+QX1C0

C8=PX2+QX2C4=PX2+QX2(PX1+QX1C0)

=PX2+QX2PX1+QX2QX1C0

同理

C12=PX3+QX3PX2+QX3QX2PX1+QX3QX2QX1C0

C16=PX4+QX4PX3+QX4QX3PX2+QX4QX3QX2PX1+QX4QX3QX2QX1C0

原理图如下

 

4实现方法

4.1顶层方案图的设计与实现

顶层方案图主要实现16位全加器的逻辑功能,采用VERILOG代码输入方式完成,超前进位加法器电路的是实现基于ASK2CB_110705开发板设计。

在完成代码的功能设计后,经过检测调试,把输入/输出信号通过引脚编号安排到FPGA指定的引脚上去,最终实现芯片的引脚锁定。

4.1.1顶层方案的整体设计

顶层图形文件主要由4个四位超前进位加法器构成,总共33位输入,17位输出。

顶层图形文件由quartus2软件编辑得到相应的模块,顶层图形的整体设计如下图所示:

4.1.2元器件选择和引脚锁定

(1)元器件选择

由于在设计的过程中,硬件设计环境是基于ASK2CB_110705实验板,故采用的目标芯片为alteraep2c8Q2C8芯片

(2)引脚定义

在quartus2上面完成软件的设计之后,把顶层图形文件中的输入/输出信号用引脚编号安排到lteraep2c8Q2C8芯片指定的引脚上去,从而实现芯片的设计电路的引脚锁定,各信号及lteraep2c8Q2C8

4.2功能模块的设计与实现

4.2.1设计描述

将4个超前进位模块进一步组合,使当A,B及Ci信号到来的时候可以进一步计算出各位间的进位信息。

该模块

Pi=AiBi

Qi=Ai+Bi

设置中间变量值QXi和PXi其中

QXi=Q4Q3Q2Q1

PXi=P4+Q4P3+Q4Q3P2+Q4Q3Q2P1

其中PX,QX为下一级进位计算的输入

QX1=Q4Q3Q2Q1

QX2=Q8Q7Q6Q5

QX3=Q12Q11Q10Q9

QX4=Q16Q15Q14Q13

PX1=P4+Q4P3+Q4Q3P2+Q4Q3Q2P1

PX2=P8+Q8P7+Q8Q7P6+Q8Q7Q6P5

PX3=P12+Q12P11+Q12Q11P10+Q12Q11Q10P9

PX4=P16+Q16P15+Q16Q15P14+Q16Q15Q14P13

C4=PX1+QX1C0

C8=PX2+QX2C4=PX2+QX2(PX1+QX1C0)

=PX2+QX2PX1+QX2QX1C0

同理

C12=PX3+QX3PX2+QX3QX2PX1+QX3QX2QX1C0

C16=PX4+QX4PX3+QX4QX3PX2+QX4QX3QX2PX1+QX4QX3QX2QX1C0

得到的4个4位超前进位加法器的进位端再一次进行超前这样可以大大减少处理时间

为了能够使用有限的实验板资源我们在计算器的前后级加上寄存器串行输入数据并行输出数据。

使用一个控制模块产生控制信号

4.2.2创建RTL代码并得到电路图

重要代码如下

jishuji(clk,set9,jiout);

controlcont(jiout,conout);

regin32regin(fin4,clk,conout[3],conout[2],out32);

add16sadd16(out32[15:

0],out32[31:

16],cin,s1);

reg16reg166(clk,s1,reggout,conout[0]);

regout16regout16(clk,conout[3],conout[1],reggout,out8);

assignfout8=out8;

4.3功能仿真

对于所创建的VERILOG代码进行仿真以便检查其正确性输入为A0-A15B0-B15进位CIN输出S0-S15输出进位C

仿真结果如下

时间输入输入输出和初始进位输出进位

0a=2,b=3,s=5,cin=0,co=0

100a=2,b=3,s=6,cin=1,co=0

200a=2,b=3,s=6,cin=1,co=0

300a=32768,b=32768,s=1,cin=1,co=1

400a=32768,b=32768,s=0,cin=0,co=1

经过功能仿真可以看出代码的逻辑是正确的

4.4编程与下载

在设计完程序后,经过modelsim软件检查没有语法与逻辑错误之后,就可以利用quartus2仿真软件的测试综合与布局布线和编程下载功能,将得到RTL代码文件下载到实验板上得可编程逻辑芯片中。

若电路不能下载则从新修改所需要的代码文件直到能够下载为止。

4.5硬件仿真结果

时序结果如下

时钟频率为15MHZ

Anlysis&synthesis结果如下

本次设计规模共使用了119个逻辑块寄存器68个逻辑块

5小结

在这次的课程设计中可以发现单纯的进行功能仿真并不能满足现实中的需要,在设计过程中进行硬件测试时会产生很多意外的信号毛刺等。

同时在有些设计中时序不满足的时候可以考虑加上适当的寄存器可以克服时序不满足的情况

参考文献

[1]王爱英.计算机组成与结构(第4版)[M].北京:

清华大学出版社,2006

[2]王冠.VerilogHDL与数字电路设计[M].北京:

机械工业出版社,2005

[3]江国强.EAD技术习题与实验[M].北京:

电子工业出版社,2005

[4]MICHAELJOHNSEBASHIANSMITH专用集成电路北京电子工业出版社20

附录

moduleadd16s(input[15:

0]a,input[15:

0]b,inputcin,output[15:

0]s,outputco);

wire[15:

0]c_tmp;wire[15:

0]q;wire[15:

0]p;wire[3:

0]px,qx;

wirec3,c7,c11,c15;

assignco=c15;

assignp[0]=a[0]&b[0],p[1]=a[1]&b[1],p[2]=a[2]&b[2],p[3]=a[3]&b[3];

assignp[4]=a[4]&b[4],p[5]=a[5]&b[5],p[6]=a[6]&b[6],p[7]=a[7]&b[7];

assignp[8]=a[8]&b[8],p[9]=a[9]&b[9],p[10]=a[10]&b[10],p[11]=a[11]&b[11];

assignp[12]=a[12]&b[12],p[13]=a[13]&b[13],p[14]=a[14]&b[14],p[15]=a[15]&b[15];

assignq[0]=a[0]|b[0],q[1]=a[1]|b[1],q[2]=a[2]|b[2],q[3]=a[3]|b[3];

assignq[4]=a[4]|b[4],q[5]=a[5]|b[5],q[6]=a[6]|b[6],q[7]=a[7]|b[7];

assignq[8]=a[8]|b[8],q[9]=a[9]|b[9],q[10]=a[10]|b[10],q[11]=a[11]|b[11];

assignq[12]=a[12]|b[12],q[13]=a[13]|b[13],q[14]=a[14]|b[14],q[15]=a[15]|b[15];

assignqx[0]=q[0]&q[1]&q[2]&q[3],qx[1]=q[4]&q[5]&q[6]&q[7],

qx[2]=q[8]&q[9]&q[10]&q[11],qx[3]=q[12]&q[13]&q[14]&q[15];

assignpx[0]=p[3]|(q[3]&p[2])|(q[3]&q[2]&p[1])|(q[3]&q[2]&q[1]&p[0]),

px[1]=p[7]|(q[7]&p[6])|(q[7]&q[6]&p[5])|(q[7]&q[6]&q[5]&p[4]),

px[2]=p[11]|(q[11]&p[10])|(q[11]&q[10]&p[9])|(q[11]&q[10]&q[9]&p[8]),

px[3]=p[15]|(q[15]&p[14])|(q[15]&q[14]&p[13])|(q[15]&q[14]&q[13]&p[12]);

assignc3=px[0]|(qx[0]&cin),

c7=px[1]|(qx[1]&px[0])|(qx[1]&q[0]&cin),

c11=px[2]|(qx[2]&px[1])|(qx[2]&qx[1]&px[0])|(qx[2]&qx[1]&qx[0]&cin),

c15=px[3]|(qx[3]&px[2])|(qx[3]&qx[2]&px[1])|(qx[3]&qx[2]&qx[1]&px[0])|(qx[3]&qx[2]&qx[1]&qx[0]&cin);

assignc_tmp[0]=p[0]|(q[0]&cin),

c_tmp[1]=p[1]|(q[1]&p[0])|(q[1]&q[0]&cin),

c_tmp[2]=p[2]|(q[2]&p[1])|(q[2]&q[1]&p[0])|(q[2]&q[1]&q[0]&cin),

c_tmp[3]=p[3]|(q[3]&p[2])|(q[3]&q[2]&p[1])|(q[3]&q[2]&q[1]&p[0])|(q[3]&q[2]&q[1]&q[0]&cin);

assigns[3:

0]=a[3:

0]^b[3:

0]^{c_tmp[2:

0],cin};

assignc_tmp[4]=p[4]|(q[4]&c3),

c_tmp[5]=p[5]|(q[5]&p[4])|(q[5]&q[4]&c3),

c_tmp[6]=p[6]|(q[6]&p[5])|(q[6]&q[5]&p[4])|(q[6]&q[5]&q[4]&c3),

c_tmp[7]=p[7]|(q[7]&p[6])|(q[7]&q[6]&p[5])|(q[7]&q[6]&q[5]&p[4])|(q[7]&q[6]&q[5]&q[4]&c3);

assigns[7:

4]=a[7:

4]^b[7:

4]^{c_tmp[6:

4],c3};

assignc_tmp[8]=p[8]|(q[8]&c7),

c_tmp[9]=p[9]|(q[9]&p[8])|(q[9]&q[8]&c7),

c_tmp[10]=p[10]|(q[10]&p[9])|(q[10]&q[9]&p[8])|(q[10]&q[9]&q[8]&c7),

c_tmp[11]=p[11]|(q[11]&p[10])|(q[11]&q[10]&p[9])|(q[11]&q[10]&q[9]&p[8])|(q[11]&q[10]&q[9]&q[8]&c7);

assigns[11:

8]=a[11:

8]^b[11:

8]^{c_tmp[10:

8],c7};

assignc_tmp[12]=p[12]|(q[12]&c11),

c_tmp[13]=p[13]|(q[13]&p[12])|(q[13]&q[12]&c11),

c_tmp[14]=p[14]|(q[14]&p[13])|(q[14]&q[13]&p[12])|(q[14]&q[13]&q[12]&c11),

c_tmp[15]=p[15]|(q[15]&p[14])|(q[15]&q[14]&p[13])|(q[15]&q[14]&q[13]&p[12])|(q[15]&q[14]&q[13]&q[12]&c11);

assigns[15:

12]=a[15:

12]^b[15:

12]^{c_tmp[14:

12],c11};

 

endmodule

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1