设计示例432位先行进位加法器的设计
- 格式:doc
- 大小:615.50 KB
- 文档页数:4
三位同步二进制加法器和串序列发生电路设计1课程设计任务书目录1 数字电子设计部分(1)1.1 课程设计的目的与作用(1)1.2 课程设计的任务(1)1.3 三位同步二进制加法器和串行序列发生电路设计(1)1.3.1 三位同步二进制加法器设计电路的理论分析(1)1.3.2 串行序列发生电路设计(4)1.4设计总结和体会(6)1.5参考文献(7)2 模拟电子设计部分(8)2.1 课程设计的目的与作用(8)2.2 设计任务、及所用multisim软件环境介绍(8)2.3 电路模型的建立(11)2.4 理论分析及计算(13)2.4.1 正弦波发生电路的设计分析(13)2.4.2 矩形波发生电路的设计分析(15)2.4.3 三角波发生电路设计分析(17)2.5 仿真结果分析(18)2.5.1 RC串并联振荡网络的Multisim结果仿真分析(18)2.5.2 矩形波发生电路的Multisim仿真结果分析(20)2.5.3 三角波发生电路Multisim仿真结果分析(21)2.6 设计总结和体会(22)2.7 参考文献(22)1 数字电子设计部分1.1 课程设计的目的与作用随着科技的进步和社会的发展,数字电路在各种电器中的应用越来越广泛。
0、1代码的简易变换能够实现复杂的逻辑功能使得数字电路的实现效率很高。
课程设计的目的是通过实际设计并搭建一些简易但典型的数字电路来加深对各逻辑器件逻辑功能的理解。
课程设计能够使我们更进一步理解课堂上所学的理论知识,同时又能锻炼我们的动手能力和分析问题解决问题的能力。
1.2 课程设计的任务利用所学的数字电路的理论知识,用JK触发器、74LS00、74LS08等逻辑门在数字电路系统上设计并搭建001、010为无效状态的三位同步二进制加法器以及串行序列111111的检测电路,注意检查其中的无效状态能否自行启动,若不能自启进行相应的逻辑修改,直至符合设计要求。
观察并分析实验结果,进行课程设计答辩。
数字集成电路课程设计题目:4 bits超前加法进位器地全定制设计姓名:席高照学号: 111000833学院:物理与信息工程学院专业:微电子(卓越班)年级: 2010级指导教师:陈群超(签名)2013 年 6 月 3 日目录第1章概述 01.1课程设计目地.......................................... 错误!未定义书签。
1.2课程设计地主要内容.................................... 错误!未定义书签。
1.2.1设计题目.......................................... 错误!未定义书签。
1.2.2设计内容.......................................... 错误!未定义书签。
第2章功能分析及逻辑分析 (2)2.1功能分析 (2)2.2推荐工作条件 (3)2.3电性能 (7)2.4真值表 ................................................ 错误!未定义书签。
2.5表达式 (6)2.6电路图...................................................................... 错误!未定义书签。
第3章电路设计与器件参数设计83.1性能指标: ............................................ 错误!未定义书签。
3.2模块划分 (7)3.2.1输出级电路设计 (7)3.2.2内部反相器 (9)3.2.3内部电路等效 (8)3.2.4输入级电路 (10)3.2.5输出缓冲级电路 (10)3.2.6输入、输出保护电路 (10)3.3本章小结 (10)第4章电路模拟与仿真................................................................................................... 错误!未定义书签。
实验四32位先行进位加法器一、功能概述串行进位加法器延时很大,每级的输出结果都要等上一级的进位到来才可以求和算出结果,这次实验对普通全加器进行改良,改良为先行进位加法器。
先行进位加法器,各级的进位彼此是独立产生,只与输入数据A,B和C_in有关,将各级间的进位级联传播给去掉了,这样就可以减小进位产生的延时。
每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和。
通过这种进位方式实现的加法器称为超前进位加法器。
因为各个进位是并行产生的,所以是一种并行进位加法器。
二、实验原理1、设二进制加法器第i位为A i,B i,输出为S i,进位输入为C i,进位输出为C i+1,则有:S i=A i⊕B i⊕C i(1-1)C i+1 =A i * B i+ A i *C i+ B i*C i =A i * B i+(A i+B i)* C i(1-2)令G i = A i * B i , P i = A i+B i,则C i+1= G i+ P i *C i当A i和B i都为1时,G i = 1,产生进位C i+1 = 1当A i和B i有一个为1时,P i = 1,传递进位C i+1= C i因此G i定义为进位产生信号,P i定义为进位传递信号。
G i的优先级比P i高,也就是说:当G i = 1时(当然此时也有P i = 1),无条件产生进位,而不管C i是多少;当G i=0而P i=1时,进位输出为C i,跟C i之前的逻辑有关。
下面推导4位超前进位加法器。
设4位加数和被加数为A 和B,进位输入为C in,进位输出为C out,对于第i位的进位产生G i = A i·B i ,进位传递P i=A i+B i , i=0,1,2,3。
于是这各级进位输出,递归的展开Ci,有:C0 = C inC1=G0 + P0·C0C2=G1 + P1·C1 = G1 + P1·G0 + P1·P0▪C0C3=G2+ P2·C2= G2+ P2·G1+ P2·P1·G0+P2·P1·P0·C0C4=G3+ P3·C3= G3+ P3·G2+ P3·P2·G1+P3·P2·P1·G0 + P3·P2·P1·P0·C0 (1-3)C out=C4由此可以看出,各级的进位彼此独立产生,只与输入数据Ai、Bi和Cin有关。
1、12进位选择加法器原理图32位进位选择加法器原理图仅仅是将12位进位选择加法器原理图中虚线框内的模块再向后重复5次,这就构成了32位进位选择加法器原理图。
2、Verilog模块根据上图可以将进位选择加法器在结构上分为四个模块:①四位先行进位加法器adder_4bits②四位数据选择器mux_2to1③高四位选择加法器(虚线框内部分)adder_high_4bits④顶层设计32位进位选择加法器adder_32_bits3、Verilog代码# 四位先行进位加法器module adder_4bits(a,b,s,ci,co);parameter N=4;input[N-1:0] a;input[N-1:0] b;input ci;output[N-1:0] s;output co;wire [N-1:0] c;wire [N-1:0] g;wire [N-1:0] p;assign g=a&b;assign p=a|b;assign c[0]=g[0]||(p[0]&&ci);assign c[1]=g[1]||(p[1]&&g[0])||(p[1]&&p[0]&&ci);assign c[2]=g[2]||(p[2]&&g[1])||(p[2]&&p[1]&&g[0])||(p[2]&&p[1]&&p[0]&&ci);assignc[3]=g[3]||(p[3]&&g[2])||(p[3]&&p[2]&&g[1])||(p[3]&&p[2]&&p[1]&&g[0])||(p[3]&&p[2]&&p[1]&&p[0]&&ci);assign s[0]=p[0]&~g[0]^ci;assign s[1]=p[1]&~g[1]^c[0];assign s[2]=p[2]&~g[2]^c[1];assign s[3]=p[3]&~g[3]^c[2];assign co=c[3];endmodule# 四位数据选择器module mux_2to1 (out,in0,in1,sel);parameter N=4;output[N:1] out;input[N:1] in0,in1;input sel;assign out=sel?in1:in0;endmodule# 高四位选择加法器module adder_high_4bits(a,b,ci,co,s);parameter N=4;input[N-1:0] a;input[N-1:0] b;input ci;output[N-1:0] s;output co;wire [N-1:0] sum1,sum0;wire co1,co0,cand;adder_4bits #(4) adder_1(.a(a),.b(b),.s(sum1),.ci(1'b1),.co(co1)); adder_4bits #(4) adder_2(.a(a),.b(b),.s(sum0),.ci(1'b0),.co(co0)); mux_2to1 #(4) mux1(.in0(sum0),.in1(sum1),.sel(ci),.out(s)); and G1(cand,ci,co1);or G2(co,cand,co0);endmodule# 顶层设计32位进位选择加法器module adder_32bits(a,b,s,ci,co);parameter N=32;input [N-1:0] a;input [N-1:0] b;input ci;output [N-1:0] s;output co;wire co1,co2,co3,co4,co5,co6,co7;adder_4bits #(4) adder1(.a(a[3:0]),.b(b[3:0]),.ci(ci),.s(s[3:0]),.co(co1));adder_high_4bits #(4) adder2(.a(a[7:4]),.b(b[7:4]),.ci(co1),.s(s[7:4]),.co(co2));adder_high_4bits #(4) adder3(.a(a[11:8]),.b(b[11:8]),.ci(co2),.s(s[11:8]),.co(co3));adder_high_4bits #(4) adder4(.a(a[15:12]),.b(b[15:12]),.ci(co3),.s(s[15:12]),.co(co4));adder_high_4bits #(4) adder5(.a(a[19:16]),.b(b[19:16]),.ci(co4),.s(s[19:16]),.co(co5));adder_high_4bits #(4) adder6(.a(a[23:20]),.b(b[23:20]),.ci(co5),.s(s[23:20]),.co(co6));adder_high_4bits #(4) adder7(.a(a[27:24]),.b(b[27:24]),.ci(co6),.s(s[27:24]),.co(co7));adder_high_4bits #(4) adder8(.a(a[31:28]),.b(b[31:28]),.ci(co7),.s(s[31:28]),.co(co)); endmodule4、仿真结果①四位先行进位加法器进行仿真,结果如下如图所示,a=0101,b=1010,ci=1;sum=0000,cout=1;仿真正确。
实验四32位先行进位加法器一、功能概述串行进位加法器延时很大,每级的输出结果都要等上一级的进位到来才可以求和算出结果,这次实验对普通全加器进行改良,改良为先行进位加法器。
先行进位加法器,各级的进位彼此是独立产生,只与输入数据A,B 和C_in有关,将各级间的进位级联传播给去掉了,这样就可以减小进位产生的延时。
每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和。
通过这种进位方式实现的加法器称为超前进位加法器。
因为各个进位是并行产生的,所以是一种并行进位加法器。
二、实验原理1、设二进制加法器第i位为A i,B i,输出为S i,进位输入为C i,进位输出为C i+1,则有:S i=A i⊕B i⊕C i(1-1)C i+1 =A i * B i+ A i *C i+ B i*C i =A i * B i+(A i+B i)* C i(1-2)令G i = A i * B i , P i = A i+B i,则C i+1= G i+ P i *C i当A i和B i都为1时,G i = 1,产生进位C i+1 = 1当A i和B i有一个为1时,P i = 1,传递进位C i+1= C i因此G i定义为进位产生信号,P i定义为进位传递信号。
G i的优先级比P i高,也就是说:当G i = 1时(当然此时也有P i = 1),无条件产生进位,而不管C i是多少;当G i=0而P i=1时,进位输出为C i,跟C i之前的逻辑有关。
下面推导4位超前进位加法器。
设4位加数和被加数为A和B,进位输入为C in,进位输出为C out,对于第i位的进位产生G i = A i·B i,进位传递P i=A i+B i , i=0,1,2,3。
于是这各级进位输出,递归的展开Ci,有:C0 = C inC1=G0 + P0·C0C2=G1 + P1·C1 = G1 + P1·G0 + P1·P0▪C0C3=G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0C4=G3 + P3·C3 = G3 + P3·G2 + P3·P2·G1 + P3·P2·P1·G0 + P3·P2·P1·P0·C0 (1-3)C out=C4由此可以看出,各级的进位彼此独立产生,只与输入数据Ai、Bi和Cin有关。
先⾏进位加法器实验四32位先⾏进位加法器⼀、功能概述串⾏进位加法器延时很⼤,每级的输出结果都要等上⼀级的进位到来才可以求和算出结果,这次实验对普通全加器进⾏改良,改良为先⾏进位加法器。
先⾏进位加法器,各级的进位彼此是独⽴产⽣,只与输⼊数据A,B和C_in有关,将各级间的进位级联传播给去掉了,这样就可以减⼩进位产⽣的延时。
每个等式与只有三级延迟的电路对应,第⼀级延迟对应进位产⽣信号和进位传递信号,后两级延迟对应上⾯的积之和。
通过这种进位⽅式实现的加法器称为超前进位加法器。
因为各个进位是并⾏产⽣的,所以是⼀种并⾏进位加法器。
⼆、实验原理1、设⼆进制加法器第i位为A i,B i,输出为S i,进位输⼊为C i,进位输出为C i+1,则有:S i=A i⊕B i⊕C i(1-1)C i+1 =A i * B i+ A i *C i+ B i*C i =A i * B i+(A i+B i)* C i(1-2)令G i = A i * B i , P i = A i+B i,则C i+1= G i+ P i *C i当A i和B i都为1时,G i = 1,产⽣进位C i+1 = 1当A i和B i有⼀个为1时,P i = 1,传递进位C i+1= C i因此G i定义为进位产⽣信号,P i定义为进位传递信号。
G i的优先级⽐P i⾼,也就是说:当G i = 1时(当然此时也有P i = 1),⽆条件产⽣进位,⽽不管C i是多少;当G i=0⽽P i=1时,进位输出为C i,跟C i之前的逻辑有关。
下⾯推导4位超前进位加法器。
设4位加数和被加数为A 和B,进位输⼊为C in,进位输出为C out,对于第i位的进位产⽣G i = A i·B i ,进位传递P i=A i+B i , i=0,1,2,3。
于是这各级进位输出,递归的展开Ci,有:C0 = C inC1=G0 + P0·C0C2=G1 + P1·C1 = G1 + P1·G0 + P1·P0?C0C3=G2+ P2·C2= G2+ P2·G1+ P2·P1·G0+P2·P1·P0·C0C4=G3+ P3·C3= G3+ P3·G2+ P3·P2·G1+P3·P2·P1·G0 + P3·P2·P1·P0·C0 (1-3)C out=C4由此可以看出,各级的进位彼此独⽴产⽣,只与输⼊数据Ai、Bi和Cin有关。
沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:超前进位加法器的设计院(系):计算机学院专业:班级:学号:姓名:指导教师:完成日期:沈阳航空航天大学课程设计报告目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (2)1.3设计环境 (3)第2章详细设计方案 (4)2.1顶层方案图的设计与实现 (4)2.1.1创建顶层图形设计文件 (4)2.1.2器件的选择与引脚锁定 (5)2.1.3编译、综合、适配 (7)2.2功能模块的设计与实现 (7)2.2四位超前进位加法器模块的设计与实现 (7)2.3仿真调试 (9)第3章编程下载与硬件测试 (11)3.1编程下载 (11)3.2硬件测试及结果分析 (11)参考文献 (13)附录(程序清单或电路原理图) (14)第1章总体设计方案1.1设计原理八位超前进位加法器,可以由2个四位超前进位加法器构成。
由第一个四位超前进位加法器的进位输出作为第二个超前进位加法器的进位输入即可实现八位超前进位加法器的设计。
超前进位产生电路是根据各位进位的形成条件来实现的。
只要满足下述条件,就可形成进位C1、C2、C3、C4。
所以:第一位的进位C1=X1*Y1+(X1+Y1)*C0第二位的进位C2=X2*Y2+(X2+Y2)*X1*Y1+(X2+Y2)(X1+Y1)C0第三位的进位C3=X3*Y3+(X3+Y3)X2*Y2+(X3+Y3)*(X2+Y2)*X1*Y1+(X3+Y3)(X2+Y2)(X1+Y1)*C0第四位的进位C4=X4*Y4+(X4+Y4)*X3*Y3+(X4+Y4)*(X3+Y3) * X2*Y2+(X4+Y4)(X3+Y3)(X2+Y2)*X1*Y1+(X4+Y4)(X3+Y3)(X2+Y2)(X1+Y1)*C0 下面引入进位传递函数Pi和进位产生函数Gi的概念。
它们定义为:Pi=Xi+YiGi=Xi*YiP1的意义是:当X1和Y1中有一个为1时,若有进位输入,则本位向高位传递此进位。
数字电路与逻辑设计实验二一、实验目的1.熟悉多路复用器、加法器的工作原理。
2.学会使用VHDL语言设计多路复用器、加法器。
3.掌握generic的使用,设计n-1多路复用器。
4.兼顾速度与成本,设计行波加法器和先行进位加法器。
二、实验内容1.用VHDL语言设计8重3-1多路复用器;2.用VHDL语言设计n-1多路复用器,调用该n-1多路复用器定制为8-1多路复用器。
53.用VHDL语言设计4位行波进位加法器。
4.用VHDL语言设计4位先行进位加法器。
第一部分:8重3-1多路复用器①实验方法1、实验方法采用基于FPGA进行数字逻辑电路设计的方法。
采用的软件工具是Quartus II。
2、实验步骤1、新建,编写源代码。
(1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name为multiplexer_3_to_1_st)-【next】(设置文件名multiplexer_3_to_1_st.vhd—在【add】)-【properties】(type=AHDL)-【next】(family=FLEX10K;name=EPF10K10TI144-4)-【next】-【finish】(2).新建:【file】-【new】(第二个AHDL File)-【OK】2、根据题意,写好源代码并保存文件。
3、编译与调试。
确定源代码文件为当前工程文件,点击【processing】-【start compilation】进行文件编译,编译成功。
4、波形仿真及验证。
新建一个vector waveform file。
按照程序所述插入S、I0-I2、Y五个八维向量节点(S、I0-I2为输入节点,Y为输出节点)。
(操作为:右击-【insert】-【insert node or bus】-【node finder】(pins=all;【list】)-【>>】-【ok】-【ok】)。
成绩评定表学生姓名班级学号专业课程设计题目数字电子课程设计评语组长签字:成绩日期20 年月日课程设计任务书学院信息科学与技术专业学生姓名班级学号课程设计题目三位二进制加法器,序列发生器,40进制异步加法器实践教学要求与任务:1)采用实验箱设计、连接、调试三位二进制计数器。
2)采用实验箱设计、连接、调试串行序列检测器。
3)采用multisim 仿真软件建立复杂的计数器电路模型;4)对电路进行理论分析;5)在multisim环境下分析仿真结果,给出仿真时序图;6)撰写课程设计报告。
工作计划与进度安排:第1天:1. 布置课程设计题目及任务。
2. 查找文献、资料,确立设计方案。
第2-3天:在实验室中设计、连接、调试三位二进制计数器及串行序列检测器电路。
第4天:1. 安装multisim软件,熟悉multisim软件仿真环境。
在multisim环境下建立电路模型,学会建立元件库。
2. 对设计电路进行理论分析、计算。
3. 在multisim环境下仿真电路功能,修改相应参数,分析结果的变化情况。
第5天:1. 课程设计结果验收。
2. 针对课程设计题目进行答辩。
3. 完成课程设计报告。
指导教师:朱立忠戴敬 2013年6月日专业负责人:2013 年月日学院教学副院长:2013 年月日目录1 课程设计目的及要求 (4)2 设计六进制同步加法计数器(无效状态为010 100) (4)2.1 基本原理 (4)2.2 设计过程 (4)2.2.1 状态图 (4)2.2.3 驱动方程状态方程 (6)2.3检查电路能否自启动: (6)2.4设计电路图 (7)2.5仿真结果 (8)3 序列信号发生器的设计(检测序列010100) (9)3.1课程设计的目的 (9)3.2设计的总体框图 (9)3.2.1 设计过程 (9)3.2.2输出方程 (10)3.2.3状态方程 (10)3.3电路图设计 (13)3.4仿真结果 (13)4.7290构成40进制异步加法计数器并显示 (14)4.1基本原理 (14)4.1.1异步十进制计数器74LS290原理 (14)4.1.2 74LS290的功能表。
4位二进制全加器的设计摘要加法器是产生数的和的装置。
加数和被加数为输入,和数与进位为输出的装置为半加器。
若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。
常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用。
在电子学中,加法器是一种数位电路,其可进行数字的加法计算。
在现代的电脑中,加法器存在于算术逻辑单元(ALU)之中。
加法器可以用来表示各种数值,如:BCD、加三码,主要的加法器是以二进制作运算。
多位加法器的构成有两种方式:并行进位和串行进位方式。
并行进位加法器设有并行进位产生逻辑,运行速度快;串行进位方式是将全加器级联构成多位加法器。
通常,并行加法器比串行加法器的资源占用差距也会越来越大。
我们采用4位二进制并行加法器作为折中选择,所选加法器为4位二进制先行进位的74LS283,它从C0到C4输出的传输延迟很短,只用了几级逻辑来形成和及进位输出,由其构成4位二进制全加器,并用proteus进行仿真。
关键字全加器,四位二进制,迭代电路,并行进位,74LS283,proteus仿真总电路设计一、硬件电路的设计该4位二进制全加器以74LS283(图1)为核心,采用先行进位方式,极大地提高了电路运行速度,下面是对4位全加器电路设计的具体分析。
图11)全加器(full-adder )全加器是一种由被加数、加数和来自低位的进位数三者相加的运算器。
基本功能是实现二进制加法。
全加器的功能表输入输出输入输出逻辑表达式:CIB A S ⊕⊕==AB'CI'+A'BCI'+A'B'CI+ABCI()AB CI B A CO ++=其中,如果输入有奇数个1,则S 为1;如果输入有2个或2个以上的1,则CO=1。
实现全加器等式的门级电路图如图2所示,逻辑符号如图3所示.图2图32)四位二级制加法器 a) 串行进位加法器四位二进制加法器为4个全加器的级联,每个处理一位。
课程设计任务书学生姓名杨建喜学生专业班级计算机指导教师杨青学院名称计算机科学与技术学院题目:三位二进制加1计数器初始条件:使用D触发器( 74 LS 74 )、“与”门( 74 LS 08 )、“或”门( 74 LS 32 )、非门( 74 LS 04 ),设计三位二进制加1计数器。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.能够运用数字逻辑的理论和方法,把时序逻辑电路设计和组合逻辑电路设计相结合,设计一个有实际应用的数字逻辑电路。
2.使用同步时序逻辑电路的设计方法,设计三位二进制加1计数器。
写出设计中的三个过程,画出电路图。
3.根据74 LS 74、74 LS 08、74 LS 32、74 LS 04集成电路引脚号,在设计好的三位二进制加1计数器电路图中标上引脚号。
4.在试验设备上,使用74 LS 74、74 LS 08、74 LS 32、74 LS 04集成电路连接、调试和测试三位二进制加1计数器电路。
设计报告书包括,设计逻辑电路,步骤完整和正确。
正确和整洁画出逻辑电路图,标出使用的集成电路引脚。
实验阶段,连线正确和整洁。
记录调试逻辑电路,分析和解决碰见的问题。
对实验结果分析,使设计结果满足题目要求。
指导教师签名:2010 年月日系主任(或责任教师)签名:2010 年月日目录1.实验分析 (3)2.状态转移真值表 (4)3.激励函数的化简 (4)4.时序逻辑电路图 (6)5.芯片及其引脚图 (7)6.实际电路连接 (7)7.电路调试 (8)8.心得体会 (9)9.参考文献 (9)1. 实验分析本实验要求的是运用所学知识设计一个三位二进制加1计数器即实现000到111再到000的循环加1计数。
其原始状态图如下:由此原始状态图可以很容易的联想到了课本上有关的扭环计数器实例,于是可以从这方面着手开始设计三位二进制加1计数器。
接下来就需要画出其状态转移真值表,根据所画出来的状态转移真值表画出卡诺图,并根据卡诺图进行化简,最终得到激励函数的表达式。
块内并行4位先行进位逻辑
在数字电路中,块内并行是一种常见的设计思路,尤其在加法器电路中,先行进位逻辑是指在进行加法运算时,进位的计算提前于求和部分。
下面简要介绍一种可能的实现方式,即4位先行进位加法器(4-bit Carry Look-Ahead Adder,CLA)的基本结构:
1.输入:
•两个4位二进制数(A和B)
•输入进位(Cin)
2.输出:
•4位和(Sum)
•输出进位(Cout)
3.块内并行4位先行进位逻辑的主要思路:
•将输入进位(Cin)和每一位的输入(A和B)结合,提前生成每一位的进位,再将这些提前生成的进位和输入进位
相加,得到最终的输出进位。
•这样,通过提前生成进位,可以减少等待进位传播的时间,提高加法器的速度。
4.具体实现:
•使用逻辑门和电路元件,通过逻辑电路设计来实现块内并行4位先行进位逻辑。
实现的方式可能包括AND、OR、
XOR 门等。
请注意,具体的电路设计可能会根据使用的技术(如传统的TTL 逻辑、CMOS 技术等)以及设计的要求而有所不同。
在数字电路设计中,CLA 加法器是常见的一种用于优化进位传播的方式。
如果您需要更详细的信息或具体的电路图,请参考相应的教材、文献或数字电路设计工具的资料。
//超前进位加法器`define word_size 32`define word [`word_size-1:0]`define n 4`define slice [`n-1:0]`define s0 (1*`n)-1:0*`n`define s1 (2*`n)-1:1*`n`define s2 (3*`n)-1:2*`n`define s3 (4*`n)-1:3*`n`define s4 (5*`n)-1:4*`n`define s5 (6*`n)-1:5*`n`define s6 (7*`n)-1:6*`n`define s7 (8*`n)-1:7*`nmodule c_adder (a,b,cin,s,cout); //顶层模块input`word a,b;input cin;output`word s;output cout;wire[7:0] gg,gp,gc; //wire[3:0] ggg,ggp,ggc; //wire gggg,gggp; ////first levelbitslice i0(a[`s0],b[`s0],gc[0],s[`s0],gp[0],gg[0]); bitslice i1(a[`s1],b[`s1],gc[1],s[`s1],gp[1],gg[1]); bitslice i2(a[`s2],b[`s2],gc[2],s[`s2],gp[2],gg[2]); bitslice i3(a[`s3],b[`s3],gc[3],s[`s3],gp[3],gg[3]); bitslice i4(a[`s4],b[`s4],gc[4],s[`s4],gp[4],gg[4]); bitslice i5(a[`s5],b[`s5],gc[5],s[`s5],gp[5],gg[5]); bitslice i6(a[`s6],b[`s6],gc[6],s[`s6],gp[6],gg[6]); bitslice i7(a[`s7],b[`s7],gc[7],s[`s7],gp[7],gg[7]); //second levelcla c0(gp[3:0],gg[3:0],ggc[0],gc[3:0],ggp[0],ggg[0]); cla c1(gp[7:4],gg[7:4],ggc[1],gc[7:4],ggp[1],ggg[1]); assign ggp[3:2]=2'b11;assign ggg[3:2]=2'b00;//third levelcla c2(ggp,ggg,cin,ggc,gggp,gggg);assign cout=gggg|(gggp&cin);endmodule//求和并按输出a,b,cin分组module bitslice(a,b,cin,s,gp,gg);input`slice a,b;input cin;output`slice s;output gp,gg;wire`slice p,g,c;pg i1(a,b,p,g);cla i2(p,g,cin,c,gp,gg);sum i3(a,b,c,s);endmodule//计算传播值和产生值的PG模块module pg(a,b,p,g);input`slice a,b;output `slice p,g;assign p=a|b;assign g=a&b;endmodule//计算sum值的sum模块module sum(a,b,c,s);input`slice a,b,c;output`slice s;wire`slice t=a^b;assign s=t^c;endmodule//n-bit 超前进位模块module cla (p,g,cin,c,gp,gg);input`slice p,g; //输出的propagate bit (传送值)和generate bit(生成值)input cin; //进位输入output`slice c; //为每一位产生进位output gp,gg; //传播值和进位制function [99:0] do_cla; //该函数内将为每个位计算其进位值input `slice p,g;input cin;begin: labelinteger i;reg gp,gg;reg`slice c;gp=p[0];gg=g[0];c[0]=cin;for (i=1;i<`n;i=i+1)begin//C0=G0+P0C_1//C1=G1+P1C0=(G1+P1G0)+P1P0C_1 gp=gp&p[i];gg=(gg&p[i])|g[i];c[i]=(c[i-1]&p[i-1])|g[i-1]; enddo_cla={c,gp,gg};endendfunctionassign {c,gp,gg}=do_cla(p,g,cin); endmodule。
设计示例4:32位先行进位加法器的设计
1、功能概述:
先行进位加法器是对普通的全加器进行改良而设计成的并行加法器,主要是针对普通全加器串联时互相进位产生的延迟进行了改良。
超前进位加法器是通过增加了一个不是十分复杂的逻辑电路来做到这点的。
设二进制加法器第i位为A i,B i,输出为S i,进位输入为C i,进位输出为C i+1,则有:S i=A i⊕B i⊕C i (1-1)
C i+1 =A i * B i+ A i *C i+ B i*C i =A i * B i+(A i+B i)* C i(1-2)
令G i = A i * B i , P i = A i+B i,则C i+1= G i+ P i *C i
当A i和B i都为1时,G i = 1,产生进位C i+1 = 1
当A i和B i有一个为1时,P i = 1,传递进位C i+1= C i
因此G i定义为进位产生信号,P i定义为进位传递信号。
G i的优先级比P i高,也就是说:当G i = 1时(当然此时也有P i = 1),无条件产生进位,而不管C i是多少;当G i=0而P i=1时,进位输出为C i,跟C i之前的逻辑有关。
下面推导4位超前进位加法器。
设4位加数和被加数为A和B,进位输入为C in,进位输出为C out,对于第i位的进位产生G i = A i·B i ,进位传递P i=A i+B i , i=0,1,2,3。
于是这各级进位输出,递归的展开Ci,有:
C0 = C in
C1=G0 + P0·C0
C2=G1 + P1·C1 = G1 + P1·G0 + P1·P0▪C0
C3=G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0
C4=G3 + P3·C3 = G3 + P3·G2 + P3·P2·G1 + P3·P2·P1·G0 + P3·P2·P1·P0·C0 (1-3)
C out=C4
由此可以看出,各级的进位彼此独立产生,只与输入数据Ai、Bi和Cin有关,将各级间的进位级联传播给去掉了,因此减小了进位产生的延迟。
每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和。
实现上述逻辑表达式(1-3)的电路称为超前进位部件(Carry Lookahead Unit),也称为CLA 部件。
通过这种进位方式实现的加法器称为超前进位加法器。
因为各个进位是并行产生的,所以是一种并行进位加法器。
从公式(1-3)可知,更多位数的CLA部件只会增加逻辑门的输入端个数,而不会增加门的级数,因此,如果采用超前进位方式实现更多位的加法器,从理论上讲,门延迟不变。
但是由于CLA部件中连线数量和输入端个数的增多,使得电路中需要具有大驱动信号和大扇入门,这会大大增加门的延迟,起不到提高电路性能的作用。
因此更多位数的加
法器可通过4位CLA 部件和4位超前进位加法器来实现,如图2所示。
将式(1-3)中进位C 4的逻辑方程改写为:
C 4=G m0 + P m0·C 0 (1-4)
C4表示4位加法器的进位输出,Pm0、Gm0分别表示4位加法器的进位传递输出和进位产生输出,分别为:
P m0 = P 3·P 2·P 1·P 0
G m0 = G 3 + P 3·G 2 + P 3·P 2·G 1 + P 3·P 2·P 1·G 0
将式(1-4)应用于4个4位先行进位加法器,则有:
C 4=G m0 + P m0·C 0
C 8= G m1 + P m1·C 4 = G m1 + P m1·G m0 + P m1·P m0 ▪C 0
C 12= G m2 + P m2·C 8 = G m2 + P m2·G m1 + P m2·P m1·G m0 + P m2·P m1·P m0·C 0
C 16=G m3+P m3·C 12=G m3+P m3·G m2+P m3·P m2·G m1+P m3·P m2·P m1·G m0+P m3·P m2·P m1·P m0·C 0
(1-5)
比较式(1-3)和式(1-5),可以看出这两组进位逻辑表达式是类似的。
不过式(1-3)表示的是组内进位,式(1-5)表示的是组间的进位。
实现逻辑方程组(1-5)的电路称为成组先行进位部件。
图1a 为所设计的32位超前进位加法器的结构框图,该加法器采用三级超前进位加法器设计,组内和组间均采用超前进位。
由8个4位超前进位加法器与3个BCLA 部件构成。
图1b 为采用超前进位和进位选择实现的32位先行进位加法器结构图。
2、结构框图:
(a ) 32位超前进位加法器结构图
S 15~0
S 31~16
(b ) 超前进位+进位选择实现结构 图1 32位先行进位加法器结构图
3、接口说明:
表1: 32位超前进位加法器接口信号说明表
4、4位超前进位加法器的设计(4bits CLA )
4.1 功能概述
产生进位信号(如图2a )、4位加法器的进位传递信号Px 以及4位加法器的进位产生信号Gx 。
P x = P 3·P 2·P 1·P 0
G x = G 3 + P 3·G 2 + P 3·P 2·G 1 + P 3·P 2·P 1·G 0
4.2 结构框图
P 0
G 0P 1G 1P 2G 2P 3G 3
(a ) 4位超前进位链
A 0
B 1
A 1
A 2
B 3
A 3
B 0
(b ) 4位超前进位加法器
图2 4位CLA 部件和4位超前进位加法器
5、设计电路源代码(部分)
//4bit carry lookahead unit
module cla_4(p,g,c_in,c,gx,px);
input[3:0] p,g;
input c_in;
output[4:1] c;
output gx,px;
assign c[1] = p[0]&c_in | g[0];
assign c[2] = p[1]&p[0]&c_in | p[1]&g[0] | g[1];
assign c[3] = p[2]&p[1]&p[0]&c_in | p[2]&p[1]&g[0] | p[2]&g[1] | g[2]; assign c[4] = px&c_in | gx;
assign px = p[3]&p[2]&p[1]&p[0];
assign gx = g[3] | p[3]&g[2] | p[3]&p[2]&g[1] | p[3]&p[2]&p[1]&g[0]; endmodule。