数字集成电路课程设计16位加法器

数字集成电路课程设计
——16位加法器
设计参数:
*输入两个16位的补码
*输出一个17位的补码
*允许采用流水线、单元复用等技术实现
设计要求:
*使用RTL级Verilog描述加法器架构
*使用门级验证加法器功能(ModelSim等仿真)
*优化方向:加法器等效总门数最少
*等效门数计算示例:INV=1, NOR2=NAND2=2, DFF=4
最终优化结果:
图1.1单个全加器单元的最终优化方案
图1.2 第17位结果的运算电路
最终总共等效门数= 16 X 17 + 7 = 279仿真结果:
1    2    3    4    5
图2. ModelSim仿真结果
如图2所示,箭头1所指区域为两个16位全0的加数,无进位,输出和为0;
箭头2所指区域为0与1000000000000000(-32768)相加,无进位,输出和为11000000000000000(-32768);
箭头3所指区域为0与1111111111111111(-1)相加,无进位,输出和为11111111111111111(-1);
箭头4所指区域为-1与1000000000000000(-32768)相加,无进位,输出和为10111111111111111(-32769);
箭头4所指区域为-1与1000000000000000(-32768)相加,进位为1,输出和为11000000000000000(-32768)。
可见已正确实现了16位补码加法器的功能。
设计思路:
首先,我们需要明确加法器的设计。按照题目的要求,我们的加法器必须满足以下几个
原则:
加法器电路
1、16位加法器,且可以计算出第17位的进位;
2、可以计算补码;
3、设计出的结构门数最少.
由上面的要求,我们可以有对应的设计:
1.我们假定16位数据本身就是以补码形式储存的,那么最高位就是符号位,0代表正数,
1代表负数;由此,我们可以根据二进制加法的规则得知,计算补码不需要对储存的补码进
行任何形式的修改,利用正常的全加器结构就可以计算出正确的结论,包括位数扩展的要求
也能满足;
2.要完成17位的补码计算,需要进行符号位扩展,也就是将加数和被加数的最高位重复
一次变成17位的数据,如1000000000000000变为11000000000000000;在编码的时候,需要17个加法器,但是最后一个加法器的加数和被加数重复使用16位的数据,而进位则采用16位得到的进位;
3.加法器必须是一般意义上的加法器,除非采用流水线结构,否则不应使用时序逻辑,如下图所示的设计就不合理。
图3. 不合理的结构
上图中,一位全加器虽然只使用了一次,而计时器和选择器的器件代价也不大,但是计算一次16位加法却要等待16个时钟周期,这显然与加法器本身的要求不符合。尤其是当这样的加法器集成在乘法器当中时,时间代价就将变得非常巨大。
因而我们在设计的时候不使用这样的加法器。
4.需要的门数最少,那么就在牺牲速度的情况下采用最简单的设计结构。
从上面的一些分析我们可以看出,原始的行波进位加法器相比超前进位加法器、流水线加法器等结构而言,虽然延时问题非常大,但是采用的门数却是最少的。于是我们就在原始的全加器的结构上进行改进,再级联成17位行波进位加法器。
行波进位加法器
原始行波进位加法器统计:
Cell Usage :
# BELS : 136
# AND2 : 51
# INV : 17
# OR2 : 34
# XOR2 : 34
# IO Buffers : 50
# IBUF : 33
# OBUF : 17
将异或门的等效门数当作6,则总共等效门数为:
51 X 3 + 17 + 34 X 3 + 34 X 6 = 476
优化后RTL级Verilog代码:
moduletop_adder(c_in,a,b,s);
input[15:0] a,b;
inputc_in;
采集程序output[16:0] s;
wire c_0,c_1,c_2,c_3,c_4,c_5,c_6,c_7,c_8,c_9,c_10,c_11,c_12,c_13,c_14,c_15;
adder adder0(c_in,a[0],b[0],s[0],c_0);
adder adder1(c_0,a[1],b[1],s[1],c_1);
adder adder2(c_1,a[2],b[2],s[2],c_2);
adder adder3(c_2,a[3],b[3],s[3],c_3);
adder adder4(c_3,a[4],b[4],s[4],c_4);
adder adder5(c_4,a[5],b[5],s[5],c_5);
adder adder6(c_5,a[6],b[6],s[6],c_6);
adder adder7(c_6,a[7],b[7],s[7],c_7);
adder adder8(c_7,a[8],b[8],s[8],c_8);
adder adder9(c_8,a[9],b[9],s[9],c_9);
adder adder10(c_9,a[10],b[10],s[10],c_10);
adder adder11(c_10,a[11],b[11],s[11],c_11);
adder adder12(c_11,a[12],b[12],s[12],c_12);
液压缸位移传感器
adder adder13(c_12,a[13],b[13],s[13],c_13);
adder adder14(c_13,a[14],b[14],s[14],c_14);
adder adder15(c_14,a[15],b[15],s[15],c_15);
adder adder16(c_15,a[15],b[15],s[16],);
endmodule
module adder(c_in,a,b,s,c_out);
inputc_in,a,b;
outputs,c_out;
wire inter;
assign inter=a^b;
assign s=inter^c_in;
assignc_out=a*b + inter*c_in;
endmodule
其中module adder部分进行了一次小优化:在每个单独的一位加法器里这样设计,可以少一个与门。
最后只需要计算c_15^(a[15]^b[15]),而(a[15]^b[15])是上一级计算的结果,只需引入即可,因此只比16级的级联多一个异或门。
但即便一个异或门等效成6个门,与门和非门均视为一个与非门或者一个或非门加上一
个非门,那么每个1位加法器结构需要21个门;即便将一个异或门等效成5个门,这个结构也需要19个门。
考虑最高位只需要一个异或门,则总共使用与门32个、或门16个、异或门33个,等效门数为:
32*(2+1)+16*(2+1)+33*6= 342
优化后统计:
Cell Usage :
# BELS : 81果壳箱
# AND2 : 32
# OR2 : 16
# XOR2 : 33
# IO Buffers : 50
# IBUF : 33
# OBUF : 17
于是,我们重新审视一下异或的计算公式:
a⊕b=ab+a b=ab∙a b=(a+b)(a+b)=a b+ab=a+b+ab 可以看到,上面语句assign c_out=a*b + inter*c_insmdao
中所要求的a*b以及inter*c_in已经自然包含在了异或的求值过程当中。为此,我们的电路就可以完全省去两个与非门和两个非门。
因而,单个加法器单元可进一步进行优化(如图1.1)。
最高一位的运算电路如图1.2
最终优化后统计:
Cell Usage :
# BELS : 164
# NAND2 : 33
# NOR2 : 82
# INV : 49
# IO Buffers : 50
# IBUF : 33
# OBUF : 17
等效门数统计结果再次列出如下:
33 X 2+ 82 X 2 + 49 = 279
其他尝试
超前进位加法器:
图4. 超前进位加法器原理图
C i = G i+ P i C i-1
G i= A i B i
P i = A i + B i
P* = P3P2P1P0
G* = G3 + P3G2 + P3P2G1 + P3P2P1G0
超前进位加法器同样需要在最高位补上一个只算出和、而不要进位的一位加法器。RTL级verilog代码:
module
full_adder(ci,a_03,b_03,s_03,a_47,b_47,s_47,a_811,b_811,s_811,a_1215,b_1215,s_1215,s_16); input[3:0] a_03;
input[3:0] a_47;
input[3:0] a_811;
input[3:0] a_1215;
input[3:0] b_03;
input[3:0] b_47;
input[3:0] b_811;
input[3:0] b_1215;
喉管
input ci;
output[3:0] s_03;
output[3:0] s_47;
output[3:0] s_811;
output[3:0] s_1215;
output s_16;
wire pp0,gg0,pp1,gg1,pp2,gg2,pp3,gg3,c3,c7,c11;
assign c3=gg0+pp0*ci;
assign c7=gg1+pp1*c3;
assign c11=gg2+pp2*c7;
assignc_sum=gg3+pp3*c11;

本文发布于:2024-09-22 07:38:21,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/337886.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进位   需要   结构
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议