EDA技术与VHDL实训姓名:李*班级:电信**-*学号:12********电子与信息工程学院8位加法器设计一实训目的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_out0000011010101101图3-1 半加器原理图实现1位半减器VHDL 程序。
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;ENTITY h_add IS PORT (x ,y : IN STD_LOGIC ; a_out ,sum : OUT STD_LOGIC); END ENTITY h_add ;ARCHITECTURE add0 OF h_add ISSIGNAL s:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGINs<=x&y ; PROCESS(s) BEGINCASE s ISWHEN “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’; WHEN OTHERS=>NULL ; END CASE ;END PROCESS ;END ARCHITECTURE add0;3.2 设计或逻辑门实现或逻辑门的VHDL 程序。
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;ENTITY or IS PORT (a ,b : IN STD_LOGIC ; c :OUT STD_LOGIC); END ENTITY or ;ARCHITECTURE orr OF or IS BEGINc<=a OR b ;END ARCHITECTURE orr ;add_inedsumadd_outfyx x yh_adds a x yh_addsa3.3 设计1位全加器实现1位全加器的VHDL 程序。
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;ENTITY f_add IS PORT (x ,y ,add_in : IN STD_LOGIC ; add_out ,sum : OUT STD_LOGIC); END ENTITY f_add ;ARCHITECTURE add1 OF f_add IS COMPONENT h_add ISPORT (x ,y :IN STD_LOGIC ;a_out ,summ :OUT STD_LOGIC); END COMPONENT h_add ; COMPONENT or ISPORT (a ,b :IN STD_LOGIC ; c: OUT STD_LOGIC); END COMPONENT OR ; SIGNAL d ,e ,f: STD_LOGIC ; BEGINu1:h_add PORT MAP (x=>x ,y=>y ,sum=>d ,a_out=>e);u2:h_add PORT MAP (x=>d ,y=>add_in ,sum=>summ ,a_out=>f); u3:or PORT MAP (a=>f ,b=>e ,c=>add_out); END ARCHITECTURE add1;3.4 设计8位加法器8位加法器原理图图3-2 8位加法器原理图add_outx0 y0summ0u0x yadd_inadd_out f_add x1 y1 summ1u1x yadd_inadd_out f_add x2 y2 summ2u2x yadd_inadd_out f_add x3 y3 summ3u3x yadd_inadd_out f_add x4 y4 summ4u4x yadd_inadd_out f_add x5 y5 summ5u5x yadd_inadd_out f_add x6 y6 summ6u6x yadd_inadd_out f_add x7 y7 summ7u7x yadd_inadd_out f_add实现8位加法器VHDL程序。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY 8f_add ISPORT (x0,x1,x2,x3,x4,x5,x6,x7:IN STD_LOGIC;y0,y1,y2,y3,y4,y5,y6,y7:IN STD_LOGIC;add_in:IN STD_LOGIC;add_out:OUT STD_LOGIC;summ0,summ1,summ2,summ3:OUT STD_LOGIC;summ4,summ5,summ6,summ7:OUT STD_LOGIC);END ENTITY 8f_add;ARCHITECTURE 8fadd OF 8f_add ISCOMPONENT f_add ISPORT (x,y,add_in:IN STD_LOGIC;a_out,summ:OUT STD_LOGIC);END COMPONENT f_add;SIGNAL a,b,c,d,e,f,g: STD_LOGIC;BEGINu0:f_add PORT MAP (x=>x0,y=>y0,add_in=>,a_out=>a,summ=> summ 0);u1:f_add PORT MAP (x=>x1,y=>y1,add_in =>a,a_out=>b,summ => summ 1);u2:f_add PORT MAP (x=>x2,y=>y2,add_in =>b,a_out=>c,summ => summ 2);u3:f_add PORT MAP (x=>x3,y=>y3,add_in =>c,a_out=>d,summ => summ 3);u4:f_add PORT MAP (x=>x4,y=>y4,add_in =>d,a_out=>e,summ => summ 4);u5:f_add PORT MAP (x=>x5,y=>y5,add_in =>e,a_out=>f,summ => summ 5);u6:f_add PORT MAP (x=>x6,y=>y6,add_in =>f,a_out=>g,summ => summ 6);u7:f_add PORT MAP (x=>x7,y=>y7,add_in =>g,a_out=>,summ => summ 7);END ARCHITECTURE 8fadd;四实训总结与体会加法器是产生数的和的装置。
加数和被加数为输入,和数与进位为输出的装置为半加器。
若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。
全加器可以由两个半加器和一个或门连接而成。
设计全加器之前,必须首先设计好半加器和或门电路,把它们作为全加器内的元件,再按照全加器的电路结构连接起来,从而得到全加器电路,再利用级联方法构成8位加法器。
短暂的两周实训已经过去,对于我来说这两周的实训赋予了我太多实用的东西了,不仅让我更深层次的对课本的理论知识深入了理解,而且还让我对分析事物的逻辑思维能力得到了锻炼。
通过此次实训,我对例化语句有了更深刻的认识,了解了例化语句的格式、功能以及应用,能够利用例化语句进行简单的层次化设计。
同时对于加法器的设计有了一定的了解,能够使用半加器完成到全加器的设计。
不仅巩固了以前学过的知识,而且还学到了怎样运用EDA设计8位加法器的整个过程和思路,同时也提高了我们的思考能力的锻炼,这次实训为我今后的学习和工作打下了基础。