EDA与VHDL实现8位加法器 联系客服

发布时间 : 星期日 文章EDA与VHDL实现8位加法器更新完毕开始阅读3ffe618d79563c1ec5da71c8

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 0 0 1 1 加数y 0 1 0 1 和sum 0 1 1 0 进位a_out

0 0 0 1

1

x sumxdsh_addsxh_addy y aeyafadd_outadd_in 图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 IS

SIGNAL s:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN

s<=x&y; PROCESS(s) BEGIN

CASE s IS

WHEN “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 BEGIN

c<=a OR b;

END ARCHITECTURE orr;

2

3.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 IS

PORT (x,y:IN STD_LOGIC;

a_out,summ:OUT STD_LOGIC); END COMPONENT h_add; COMPONENT or IS

PORT (a,b:IN STD_LOGIC; c: OUT STD_LOGIC); END COMPONENT OR; SIGNAL d,e,f: STD_LOGIC; BEGIN

u1: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位加法器原理图

x0 y0 add_in f_add add_out u0 summ0 summ1 x y add_in x1 y1 x y add_in x2 y2 x y add_in x3 y3 x y f_add add_out u1 f_add add_out summ2 u2 f_add add_out summ3 u3 x4 y4 add_in x y add_in x5 y5 x y add_in x6 y6 x y add_in x7 y7 x y f_add add_out summ4 u4 f_add add_out summ5 u5 f_add add_out summ6 u6 f_add add_out summ7 u7 add_out 图3-2 8位加法器原理图

3

实现8位加法器VHDL程序。

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

ENTITY 8f_add IS PORT (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 IS COMPONENT f_add IS

PORT (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; BEGIN

u0: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位加法器的整个过程和思路,同时也提高了我们的思考能力的锻炼,这次实训为我今后的学习和工作打下了基础。

4