1、数字逻辑 课程设计 题目: 设计一个 4 位超前进位加法器 评语: 学 院 计算机工程 班 级 计算 姓 名 学 号 成 绩 指导老师 黄斌 刘丽莉 2016年 7 月 12日数字逻辑实验报告题目:课程设计4 位超前进位加法器学号:成绩班级:计算1414班日期:2016-7-12姓名:指导老师:黄斌 刘丽莉一、实验目的:1、使用Verilog语言设计常用的组合逻辑电路。2、学会应用数字系统设计方法进行电路设计。3、加强和培养学生对电子系统的设计能力,培养学生理论联系实际的设计思想,训练学生综合运用数字逻辑课程的理论知识的能力。二、实验使用环境: Vivado 2015.2三、实验内容与完成情况
2、: 设计一个 4 位超前进位加法器 背景:串行进位加法器的运算速度比较缓慢,其原因在于必须依次等待每一个加法器完成进位。一种改进的设计叫做超前进位加法器。超前进位加法器的设计思路是:把加法器分解成若干块,同时额外增加电路,在每个块一得到输入进位时就快速算出此块的输出进位。因此,超前进位加法器不需要等待进位通过 一块内所有加法器单元,而是直接先行通过每个单元。 设计要求:在这个设计中,你需要使用 Verilog 代码设计一个 4 位的超前进位加法器。这个 4 位超前进位加法器可以完成对两个 4 位二进制数的相加。完成设计后,你还需要设计测试程序(test bench)来验证你的设计。你的测试程序
3、需要考虑到所有可能的输入情况。 设计思路:因为各进位的产生依赖于低位的进位,所以运算速度较慢。为了提高速度,必须设法使较低位的进位信号越过中间各级直接决定较高位的进位输出,设计Ai和Bi分别表示第i位的被加数和加 数,Ci-1为来自第i-1位全加器的进位,令Pi=AiBi,Gi=Ai&Bi函数表达式为: Co=PoCo+Go C1=P1Co+G1 C2=p2C1+G2 C3=p3c2+G3 逻辑电路图如下:真值表如下:AiBiCi-1Si00000011010101101001101011001111其卡诺图如下:AB00011110C0010111010化简之后的表达式:S=AiBiCi-1
4、进位c的表达式: 3231230123012332120120122101011000ggpgppgpppcppppcggpgppcpppcggpcppcgcpcinininin+=+=+=+=代码如下: add.vtimescale 1ns/1psmodule add(input 3:0a,input 3:0b,input ci,output 3:0s,output co); /定义所需变量wire 3:0 p, g; /进位传递函数p,进位产生函数gwire 3:0 c; /进位函数assign g0=a0&b0,g1=a1&b1,g2=a2&b2,g3=a3&b3, p0=a0b0,p1
5、=a1b1,p2=a2b2,p3=a3b3;assign c0=(p0&ci)|g0, c1=(p1&p0&ci)|(p1&g0)|g1, c2=(p2&p1&p0&ci)|(p2&p1&g0)|(p2&g1)|g2, c3=(p3&p2&p1&p0&ci)|(p3&p2&p1&g0)|(p3&p2&g1)|(p3&g2)|g3;assign s3:0 = a3:0 b3:0 c2:0,ci, co=c3;endmodule测试代码:add_tbtimescale 1ns/1psmodule add_tb; reg 3:0a; reg 3:0b; reg ci; wire 3:0s; wire
6、 co; add U0(/连接设计 .a(a), .b(b), .ci(ci), .s(s), .co(co) ); initial begin a=0;b=0;ci=0;/设置默认值 #512 $finish;/运行512个时间单位后停止 end always/通过下列三条always语句取到所有的情况 #32 a=a+1;/每32个时间单位a+1 always #2 b=b+1;/每2个时间单位b+1 always #1 ci=!ci; /每1个时间单位ci取反endmodule仿真图截图及其解释:下图仿真波形图全图:下图为局部波形图: 举例:A=0000,B=1011,c_in=0,c=1011,c_out=0 四、实验小结。 通过这次课程设计,我感觉我对Verilog语言还是不够熟悉,在写的过程中需要经常询问同学,或是通过网上查询来解决一些语法上的问题,对于这个加法器,只会按照书本上的来写,不知道怎么修改,测试代码的循环用FOR循环写不出来,只好问同学用always循环。 (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)