基于VHDL语言的8位加法器的设计.doc

上传人:土8路 文档编号:10525493 上传时间:2021-05-21 格式:DOC 页数:9 大小:749.50KB
返回 下载 相关 举报
基于VHDL语言的8位加法器的设计.doc_第1页
第1页 / 共9页
基于VHDL语言的8位加法器的设计.doc_第2页
第2页 / 共9页
基于VHDL语言的8位加法器的设计.doc_第3页
第3页 / 共9页
基于VHDL语言的8位加法器的设计.doc_第4页
第4页 / 共9页
基于VHDL语言的8位加法器的设计.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《基于VHDL语言的8位加法器的设计.doc》由会员分享,可在线阅读,更多相关《基于VHDL语言的8位加法器的设计.doc(9页珍藏版)》请在三一文库上搜索。

1、基于 VHDL 语言的8位加法器的设计 摘要 利用VHDL言语,实现两个4位并行进位加法器,然后将其级联成为一个8位加法器,再实现一个二进制转换成十进制动态显模块,以显示相加结果,并在仿真软MAX+plus II中进行仿真。关键词 VHDL、加法器、MAX+plus IIDesign of 8-bit Adder based on VHDL Abstract: using VHDL, and the road to achieve two 4-bit adder, and then cascade into an 8-bit adder, and then converted to decim

2、al binary to achieve a dynamic explicit module to display the sum of the results, and the simulation software MAX + plus II for simulation.Key words VHDL, adder, MAX + plus II0. 引言加法器是用来实现加法的器件,即它是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。加法器常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用,是计算机

3、进行算术逻辑运算的基本部件。研究加法器的实现对于电子硬件设计及其的理论发展的认识和理解具有重要意义。1. 设计原理加法器是数字系统中的基本逻辑器件。为了节省系统资源,减法器和硬件乘法器一般都由加法器来构成。但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度两方面的问题。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。通常,并行加法器比串行级联加法器的资源占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。实验及

4、事实证明,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择。因此,8位加法器采用两个4位二进制并行加法器级联而成。1.1. 实现框图1.1.1. 四位加法器的实现框图如图1.1.1所示,四位加法器采用四个一位全加器级连成串行进位加法器。图1.1四位串行进位加法器其中CSA为一位全加器,A和B为加法器的输入位串,对于四位加法器则位宽为4位,D为加法器输出位串,位宽和输入位串相同,C为进位输入(Ci)或输出(Co)。1.1.2. 减小运算的延迟显然,对于图1.1.1 这种方式,因高位运算必须要等低位进位来到后才能进行,因此它的

5、延迟相当大,运算效率低。由于运算的延迟主要是由进位延迟引起的,所以减少进位的延迟对提高运算速度非常有效。采用图1.1.2所示方法,将进位中的迭代关系去掉,则各位彼此独立,进位传播不复存在。因此,总的延迟是两级门的延迟。这样便可大大减小运算的延迟,从而提高运算效率,实现高速运算。图1.2四位加法器的超前进位的实现图1.2 为四位加法器的超前进位的实现原理图,其中,G表示进位生成位串,与输入位宽相同,P表示进位传输位串,与输入位宽相同。其意义为:如G为1,则必定产生进位,若P为1,则向高位传输进位。当进行加法运算时,G = A and B,P = A or B;当进行减法运算时,G = A and

6、 (not B),P = A or (not B)。根据图1.2可得到四位加法器的各级进位输出为:C0 = G0 or P0 and CiC1 = G1 or P1 and Co = G1 or P1 and G0 or P1 and P0 and CiC2 = G2 or P2 and C1 = G2 or P2 and G1 or P2 and P1 and G0 or P2 and P1 and P0 and CiC3 = G3 or P3 and C2 = G3 or P3 and G2 or P2 and G1 or P2 and P1 and G0 or P2 and P1 and

7、 P0 and CiCo = C3D = A and B and C = (A and ) Xor (A or B) Xor C = G Xor P Xor C上式中 and 为与操作,or 为或操作,not 为非操作,Xor 异或操作。1.1.3. 八加法器的实现框图8位加法器采用两个4位二进制并行加法器级联而成。四位加法器采用四个一位全加器级连成串行进位加法器,实现框图如图1.3所示。图1.3 用两个并行四位加法器实现一个八位加法器2. 计设过程要实现8位加法器,需要三个子程序:1.四位加法器;2.二进制转十进制显示模块;3.动态显示模块。2.1. 设计思路利用VHDL言语,实现两个4并行

8、进位加法器,然后将其级联成为一个8位加法器,再实现一个十进制动态显模块,以显示加数、被加数以及相加结果,并在MAX + plus II 中进行仿真。十进制动态显示模块可以通过设计一个9位二进制转换成十进制的显示子程序,并采用分频来实现。2.1.1. 四位二进制并行加法器的设计运用四个全加器级连成串行进位加法器。程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADD4 IS PORT(A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CI:IN STD

9、_LOGIC; CO:OUT STD_LOGIC; SO:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY ADD4;ARCHITECTURE H1 OF ADD4 ISBEGIN PROCESS(A,B) IS VARIABLE CQ,QQ,SQ:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN QQ(0):=NOT(A(0)XOR(NOT(B(0);SQ(0):=NOT(QQ(0) XOR (NOT(CI); IF (A(0) XOR B(0)=1) THEN CQ(0):=CI; -低位相加并产生进位。 ELSE CQ(0):=

10、A(0); END IF; QQ(1):= NOT(A(1) XOR (NOT(B(1);SQ(1):=NOT(QQ(1) XOR (NOT(CQ(0); -第二位于前一进位相加,并产生进位。 IF(A(1) XOR B(1)=1) THEN CQ(1):=CQ(0); ELSE CQ(1):=A(1); END IF; QQ(2):= NOT(A(2) XOR (NOT(B(2);SQ(2):= NOT(QQ(2) XOR (NOT(CQ(1); IF (A(2) XOR B(2)=1) THEN CQ(2):= CQ(1); ELSE CQ(2):=A(2); END IF; QQ(3):

11、= NOT(A(3) XOR (NOT B(3);SQ(3):= NOT(QQ(3) XOR (NOT(CQ(2);-前一位进位与高位相加并产生进位。 IF (A(3) XOR B(3)=1) THEN CQ(3):= CQ(2); ELSE CQ(3):=A(3); END IF; CO=CQ(3);SO=SQ; END PROCESS;END ARCHITECTURE H1;2.2.2 四位并行加法器波形四位加法器的波形如形如图2.1所示,由图可知仿真结果与理论实际相符。2.1 四位并行加法器波形图3. 转换显示模块的设计3.1. 二进制转换成十进制并显示加法器得到的和为二进制,设计以下二

12、进制到十进制转换显示程序使它显示为十进制。程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY LOOK ISPORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 0); CLK3:IN STD_LOGIC; SMG:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); LED7S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY LOOK;ARCHI

13、TECTURE ONE OF LOOK ISSIGNAL AI,BI,CI: INTEGER RANGE 0 TO 9;SIGNAL XI: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL LED7S1: STD_LOGIC_VECTOR(20 DOWNTO 0);SIGNAL DI: INTEGER RANGE 0 TO 512;BEGIN DI=CONV_INTEGER(D); PROCESS(DI) IS VARIABLE A,B,C: INTEGER RANGE 0 TO 9; BEGIN A:=DI REM 10; -把整型数的个位赋值给A B:=(DI-A)

14、 REM 100)/10; -把整型数的十位赋值给B C:=(DI-A-10*B)/100; -把整型数的百位赋值给C AI=A;BI=B;CILED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(6 DOWNTO 0)LED7S1(13 DOWNTO 7)LED7S1(13 D

15、OWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(13 DOWNTO 7)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)L

16、ED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)LED7S1(20 DOWNTO 14)=XXXXXXX; END CASE; END PROCESS; PROCESS(CLK3) VARIABLE X: STD_LOGIC_VECTOR(2 DOWNTO 0); -定义一个常量,用来控制位选。 BEGIN IF CLK3EVENT AND CLK3=1 THEN IF X0); END IF; END IF; XILED7S1=LED7S1(6 DOWNTO 0);SMGLED7S1

17、=LED7S1(13 DOWNTO 7);SMGLED7S1=LED7S1(20 DOWNTO 14);SMGLED7S1=XXXXXXX;SMG=XXX; END CASE; END PROCESS;END ARCHITECTURE ONE;3.2. 二进制转十进制显示模块波形输入8位二进制及进位位时,输出个位、十位、百位波形如图3.1所示,由图可知仿真结果与理论实际相符。3.1 二进制转十进制显示模块波形图4. 动态显示模块的设计4.1. 动态显示的模块的实现其程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_

18、UNSIGNED.ALL;ENTITY COUNTER IS PORT(E1,E2,CLK3:IN STD_LOGIC; Q1: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END ENTITY COUNTER;ARCHITECTURE BHV OF COUNTER ISBEGIN PROCESS(CLK3,E1,E2) IS VARIABLE COUT: INTEGER:=0; BEGIN IF CLK3EVENT AND CLK3=1 THEN COUT:=COUT+1; END IF; IF E1=1 THEN Q1=001; COUT:=0;-输入加数,数码管显示

19、加数。 END IF; IF E2=1 THEN Q11050 THEN Q1AI(3 DOWNTO 0),B=BI(3 DOWNTO 0),CI=E, CO=E,SO=SUM(3 DOWNTO 0); U2:ADD4 PORT MAP(A=AI(7 DOWNTO 4),B=BI(7 DOWNTO 4),CI=E, SO=SUM(7 DOWNTO 4); U3:LOOK PORT MAP(D=PP,CLK3=CLK,LED7S=LED,SMG=WX); U4:COUNTER PORT MAP(CLK3=CLK,Q1=CLK2,E1=EN1,E2=EN2); PROCESS(EN1,EN2) B

20、EGIN IF EN1EVENT AND EN1=1 THEN AI=A;END IF;-输入加数,赋值给AI; IF EN2EVENT AND EN2=1 THEN BI=A; END IF;-输入被加数,赋值给BI。 END PROCESS; PROCESS(CLK2) BEGIN IF CLK2=001 THEN PP=0&AI; END IF; -动态显示加数; IF CLK2=010 THEN PP=0&BI; END IF; -动态显示被加数; IF CLK2=100 THEN PP=COUT∑ END IF; -动态显示九位的和; END PROCESS;END ARCHITECTURE H2;4.3.2. 八位加法器波形八位加法器波形(部分)如图5.1所示,由图可知仿真结果与理论实际相符。5.1八位加法器波形图参考文献1余孟尝.数字电路基础简明教程M.北京:高等教育出版社社,2009.2谭会生,张昌凡. EDA 技术及应用M.西安:西安电子科技大学出版社,2009.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1