4位全加器实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

4位全加器实验报告数电第一次实验通信1402程杰U202113468【实验目的】采用ISE集成开发环境,利用verilog硬件描述语言中行为描述模式、结构描述模式或数据流描述模式设计四进制全加器。【实验内容】加法器是数字系统中的基本逻辑器件。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。实现多位二进制数相加的电路称为加法器,它能解决二进制中1+1=10的功能(当然还有0+0、0+1、1+0).【实验原理】全加器除本位两个数相加外,还要加上从低位来的进位数,称为全加器。图4为全加器的方框图。图5全加器原理图。被加数Ai、加数Bi从低位向本位进位Ci-1作为电路的输入,全加和Si与向高位的进位Ci作为电路的输出。能实现全加运算功能的电路称为全加电路。全加器的逻辑功能真值表如表2中所列。信号输入端信号输出端AiBiCiSiCi0000000110010100110110010101011100111111表2全加器逻辑功能真值表图4全加器方框图图5全加器原理图多位全加器连接可以是逐位进位,也可以是超前进位。逐位进位也称串行进位,其逻辑电路简单,但速度也较低。四位全加器如图9所示,四位全加器是由半加器和一位全加器组建而成:图9四位全加器原理图【实验步骤】(1)建立新工程项目:打开ISE软件,进入集成开发环境,点击File→Newproject建立一个工程项目adder_4bit。建立文本编辑文件:点击File→New在该项目下新建Verilog源程序文件adder_4bit.v并且输入源程序。(2)编译和仿真工程项目:在verilog主页面下,选择Compile—CompileAll或点击工具栏上的按钮启动编译,直到project出现status栏全勾,即可进行仿真。选择simulate-startsimulate或点击工具栏上的按钮开始仿真,在跳出来的startsimulate框中选择work-test_adder_4bit测试模块,同时撤销EnableOptimisim前的勾,之后选择ok。在sim-default框内右击选择test_adder_4bit,选择AddWave,然后选择simulate-run-runall,观察波形,得出结论,仿真结束。四位全加器1、原理图设计如图9所示,四位全加器是由半加器和一位全加器组建而成:图9四位全加器原理图【程序源代码】半加器程序代码如下:moduleHalfadder(S,C,A,B);inputA,B;outputS,C;xor(S,A,B);and(C,A,B);endmodule一位全加器程序代码如下:moduleonebit_adder(Sum,Co,A,B,Ci);inputA,B,Ci;outputSum,Co;wireS1,D1,D2;HalfadderHA1(.B(B),.S(S1),.C(D1),.A(A));HalfadderHA2(.A(S1),.B(Ci),.S(Sum),.C(D2));org1(Co,D2,D1);endmodule四位全加器程序代码如下:modulefourbit_adder(S,C3,A,B,C_1);input[3:0]A,B;inputC_1;output[3:0]S;outputC3;wireC0,C1,C2;onebit_adderU0_FA(S[0],C0,A[0],B[0],C_1);onebit_adderU1_FA(S[1],C1,A[1],B[1],C0);onebit_adderU2_FA(S[2],C2,A[2],B[2],C1);onebit_adderU3_FA(S[3],C3,A[3],B[3],C2);endmodule四位全加器仿真代码如下:modulefourbir_adder_TF;//Inputsreg[3:0]A_t;reg[3:0]B_t;regC_1_t;//Outputswire[3:0]S_t;wireC3_t;//InstantiatetheUnitUnderTest(UUT)fourbit_adderuut(.S(S_t),.C3(C3_t),.A(A_t),.B(B_t),.C_1(C_1_t));initialbegin//InitializeInputsA_t=0000;B_t=0001;C_1_t=0;#10$display(AB=%b%b,S_t=%b,C3_t=%b,A_t,B_t,S_t,C3_t);A_t=0011;B_t=0011;C_1_t=0;#10$display(AB=%b%b,S_t=%b,C3_t=%b,A_t,B_t,S_t,C3_t);A_t=0111;B_t=1100;C_1_t=0;#10$display(AB=%b%b,S_t=%b,C3_t=%b,A_t,B_t,S_t,C3_t);endendmodule仿真结果截图引脚分配代码NETA[0]LOC=P11;NETA[1]LOC=L3;NETA[2]LOC=K3;NETA[0]LOC=B4;NETB[0]LOC=G3;NETB[0]LOC=F3;NETB[0]LOC=E2;NETB[0]LOC=N3;//拨动开关NETS[0]LOC=M5;NETS[0]LOC=M11;NETS[0]LOC=P7;NETS[0]LOC=P6;NETC3LOC=N5同步可逆二进制计数器【程序源代码】moduleM2_counter(UPDO,CP,Q);inputUPDO,CP;outputreg[3:0]Q;initialbeginQ=0000;endalways@(posedgeCP)if(UPDO)//如果UPDO=1,则加法记数beginif(Q==15)Q=0;elseQ=Q+1;endelse//如果updo=0,则减法计数beginif(QQ=15;elseQ=Q-1;endendmodule【仿真源代码】moduleM2_counter_TF;regUPDO_t;regCP_t;//Outputswire[3:0]Q_t;M2_counteruut(.UPDO(UPDO_t),.CP(CP_t),.Q(Q_t));initialbeginCP_t=0;//InitializeInputsForever#10CP_t=~CP_t;endinitialbeginUPDO_t=1;$display(CPUPDO=%b%b,Q=%b,CP_t,UPDO_t,Q_t);#80UPDO_t=0;$display(CPUPDO=%b%b,Q=%b,CP_t,UPDO_t,Q_t);endendmodule【仿真截图】【引脚分配代码】//输入引脚分配NETUPDOLOC=P11;NETCPLOC=B8;//输出引脚分配NETQ[0]LOC=M5;NETQ[1]LOC=M11;NETQ[2]LOC=P6;NETQ[2]LOC=P7;【实验小结】通过设计4位全加器,及可逆二进制计数器的附加实验,使我对数电这门课程有了更深的兴趣,在实验过程中,我们首先通过Verilog语音对两个电路进行描述,然后通过写仿真文件,让我们能够更直观的看出我们的电路是否正确,也是在几乎没有成本的情况下让我们感受到了奇妙的数字电路的应用,最后我们编写引脚文件把所对应的文件烧录到BASYS2中,更加直观了。总之,通过这次实验,我对门级电路有了更深的认识,对Verilog语言更为熟练,对ISE软件也能较灵活地使用,最重要的是,使我对数字电路这门课有了更浓厚的兴趣。最后,从仿真以及实际烧录的板子来看,两者相吻合且符合预期,由此也可以确定该实验是成功的。

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功