您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > EDA与VHDL实现8位加法器
EDA技术与VHDL实训姓名:李*班级:电信**-*学号:12********电子与信息工程学院18位加法器设计一实训目的1.学习使用VHDL语言设计电路,加深对VHDL语言的理解与应用。2.学习8位加法器的VHDL程序设计方法。3.学习例化语句的应用,并能够利用例化语句完成从半加器到全加器的设计。二加法器加法器是为了实现加法的。即是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用。对于1位的二进制加法,相关的有五个的量:1,被加数A,2,被加数B,3,前一位的进位CIN,4,此位二数相加的和S,5,此位二数相加产生的进位COUT。前三个量为输入量,后两个量为输出量,五个量均为1位。对于32位的二进制加法,相关的也有五个量:1,被加数A(32位),2,被加数B(32位),3,前一位的进位CIN(1位),4,此位二数相加的和S(32位),5,此位二数相加产生的进位COUT(1位)。要实现32位的二进制加法,一种自然的想法就是将1位的二进制加法重复32次(即逐位进位加法器)。这样做无疑是可行且易行的,但由于每一位的CIN都是由前一位的COUT提供的,所以第2位必须在第1位计算出结果后,才能开始计算;第3位必须在第2位计算出结果后,才能开始计算,等等。而最后的第32位必须在前31位全部计算出结果后,才能开始计算。这样的方法,使得实现32位的二进制加法所需的时间是实现1位的二进制加法的时间的32倍。三实训内容首先设计半加器,然后用例化语句将它们连接起来。利用半加器和或门构成1位全加器,以1位全加器为基本硬件,构成串行进位的8位加法器。3.1设计1位半减器利用真值表设计1位半减器。图3-1中的h_add是半加器,sum是输出和,a_out是进位输出,add_in是进位输入。表3-1加法真值表加数x加数y和sum进位a_out00000110101011012图3-1半加器原理图实现1位半减器VHDL程序。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_addISPORT(x,y:INSTD_LOGIC;a_out,sum:OUTSTD_LOGIC);ENDENTITYh_add;ARCHITECTUREadd0OFh_addISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINs=x&y;PROCESS(s)BEGINCASEsISWHEN“00”=a_out=‘0’;add=‘0’;WHEN“01”=a_out=‘1’;add=‘0’;WHEN“10”=a_out=‘1’;add=‘0’;WHEN“11”=a_out=‘0’;add=‘1’;WHENOTHERS=NULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREadd0;3.2设计或逻辑门实现或逻辑门的VHDL程序。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYorISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYor;ARCHITECTUREorrOForISBEGINc=aORb;ENDARCHITECTUREorr;add_inedsumadd_outfyxxyh_addsaxyh_addsa33.3设计1位全加器实现1位全加器的VHDL程序。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_addISPORT(x,y,add_in:INSTD_LOGIC;add_out,sum:OUTSTD_LOGIC);ENDENTITYf_add;ARCHITECTUREadd1OFf_addISCOMPONENTh_addISPORT(x,y:INSTD_LOGIC;a_out,summ:OUTSTD_LOGIC);ENDCOMPONENTh_add;COMPONENTorISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENTOR;SIGNALd,e,f:STD_LOGIC;BEGINu1:h_addPORTMAP(x=x,y=y,sum=d,a_out=e);u2:h_addPORTMAP(x=d,y=add_in,sum=summ,a_out=f);u3:orPORTMAP(a=f,b=e,c=add_out);ENDARCHITECTUREadd1;3.4设计8位加法器8位加法器原理图图3-28位加法器原理图add_outx0y0summ0u0xyadd_inadd_outf_addx1y1summ1u1xyadd_inadd_outf_addx2y2summ2u2xyadd_inadd_outf_addx3y3summ3u3xyadd_inadd_outf_addx4y4summ4u4xyadd_inadd_outf_addx5y5summ5u5xyadd_inadd_outf_addx6y6summ6u6xyadd_inadd_outf_addx7y7summ7u7xyadd_inadd_outf_add4实现8位加法器VHDL程序。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITY8f_addISPORT(x0,x1,x2,x3,x4,x5,x6,x7:INSTD_LOGIC;y0,y1,y2,y3,y4,y5,y6,y7:INSTD_LOGIC;add_in:INSTD_LOGIC;add_out:OUTSTD_LOGIC;summ0,summ1,summ2,summ3:OUTSTD_LOGIC;summ4,summ5,summ6,summ7:OUTSTD_LOGIC);ENDENTITY8f_add;ARCHITECTURE8faddOF8f_addISCOMPONENTf_addISPORT(x,y,add_in:INSTD_LOGIC;a_out,summ:OUTSTD_LOGIC);ENDCOMPONENTf_add;SIGNALa,b,c,d,e,f,g:STD_LOGIC;BEGINu0:f_addPORTMAP(x=x0,y=y0,add_in=,a_out=a,summ=summ0);u1:f_addPORTMAP(x=x1,y=y1,add_in=a,a_out=b,summ=summ1);u2:f_addPORTMAP(x=x2,y=y2,add_in=b,a_out=c,summ=summ2);u3:f_addPORTMAP(x=x3,y=y3,add_in=c,a_out=d,summ=summ3);u4:f_addPORTMAP(x=x4,y=y4,add_in=d,a_out=e,summ=summ4);u5:f_addPORTMAP(x=x5,y=y5,add_in=e,a_out=f,summ=summ5);u6:f_addPORTMAP(x=x6,y=y6,add_in=f,a_out=g,summ=summ6);u7:f_addPORTMAP(x=x7,y=y7,add_in=g,a_out=,summ=summ7);ENDARCHITECTURE8fadd;四实训总结与体会加法器是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。全加器可以由两个半加器和一个或门连接而成。设计全加器之前,必须首先设计好半加器和或门电路,把它们作为全加器内的元件,再按照全加器的电路结构连接起来,从而得到全加器电路,再利用级联方法构成8位加法器。短暂的两周实训已经过去,对于我来说这两周的实训赋予了我太多实用的东西了,不仅让我更深层次的对课本的理论知识深入了理解,而且还让我对分析事物的逻辑思维能力得到了锻炼。通过此次实训,我对例化语句有了更深刻的认识,了解了例化语句的格式、功能以及应用,能够利用例化语句进行简单的层次化设计。同时对于加法器的设计有了一定的了解,能够使用半加器完成到全加器的设计。不仅巩固了以前学过的知识,而且还学到了怎样运用EDA设计8位加法器的整个过程和思路,同时也提高了我们的思考能力的锻炼,这次实训为我今后的学习和工作打下了基础。
本文标题:EDA与VHDL实现8位加法器
链接地址:https://www.777doc.com/doc-2910957 .html