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

上传人:doc321 文档编号:12771555 上传时间:2021-12-06 格式:DOC 页数:11 大小:1.43MB
返回 下载 相关 举报
基于 VHDL 语言的位加法器的设计.doc_第1页
第1页 / 共11页
基于 VHDL 语言的位加法器的设计.doc_第2页
第2页 / 共11页
基于 VHDL 语言的位加法器的设计.doc_第3页
第3页 / 共11页
基于 VHDL 语言的位加法器的设计.doc_第4页
第4页 / 共11页
基于 VHDL 语言的位加法器的设计.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

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

1、基于 VHDL 语言的位加法器的设计 作者: 日期:2 个人收集整理 勿做商业用途基于 VHDL 语言的8位加法器的设计作者:吴中友(陕理工物理 电子信息科学与技术专业07级1班,陕西 汉中 723000)指导教师:蒋嫒摘要 利用VHDL言语,实现两个4位并行进位加法器,然后将其级联成为一个8位加法器,再实现一个二进制转换成十进制动态显模块,以显示相加结果,并在仿真软MAX+plus II中进行仿真。关键词 VHDL、加法器、MAX+plus IIDesign of 8-bit Adder based on VHDL Wu Zhongyou(Department of Physics,Shaa

2、nxi University of Technology,Hanzhong,Shaanxi 723000)Tutor:Jiang YuanAbstract: using VHDL, and the road to achieve two 4bit adder, and then cascade into an 8bit adder, and then converted to decimal binary to achieve a dynamic explicit module to display the sum of the results, and the simulation soft

3、ware MAX + plus II for simulation.Key words VHDL, adder, MAX + plus II0. 引言加法器是用来实现加法的器件,即它是产生数的和的装置.加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。加法器常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用,是计算机进行算术逻辑运算的基本部件。研究加法器的实现对于电子硬件设计及其的理论发展的认识和理解具有重要意义。1. 设计原理加法器是数字系统中的基本逻辑器件.为了节省系统资源,减法器和硬件乘法器一般都由加法器来构成。但宽

4、位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度两方面的问题。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器.通常,并行加法器比串行级联加法器的资源占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。实验及事实证明,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择。因此,8位加法器采用两个4位二进制并行加法器级联而成。1.1. 实现框图1.1

5、.1. 四位加法器的实现框图如图1.1.1所示,四位加法器采用四个一位全加器级连成串行进位加法器.图1.1四位串行进位加法器其中CSA为一位全加器,A和B为加法器的输入位串,对于四位加法器则位宽为4位,D为加法器输出位串,位宽和输入位串相同,C为进位输入(Ci)或输出(Co)。1.1.2. 减小运算的延迟显然,对于图1.1.1 这种方式,因高位运算必须要等低位进位来到后才能进行,因此它的延迟相当大,运算效率低。由于运算的延迟主要是由进位延迟引起的,所以减少进位的延迟对提高运算速度非常有效。采用图1。1.2所示方法,将进位中的迭代关系去掉,则各位彼此独立,进位传播不复存在。因此,总的延迟是两级门

6、的延迟。这样便可大大减小运算的延迟,从而提高运算效率,实现高速运算.图1.2四位加法器的超前进位的实现图1.2 为四位加法器的超前进位的实现原理图,其中,G表示进位生成位串,与输入位宽相同,P表示进位传输位串,与输入位宽相同。其意义为:如G为1,则必定产生进位,若P为1,则向高位传输进位。当进行加法运算时,G = A and B,P = A or B;当进行减法运算时,G = A and (not B),P = A or (not B).根据图1。2可得到四位加法器的各级进位输出为:C0 = G0 or P0 and CiC1 = G1 or P1 and Co = G1 or P1 and

7、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 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

8、为非操作,Xor 异或操作。1.1.3. 八加法器的实现框图8位加法器采用两个4位二进制并行加法器级联而成。四位加法器采用四个一位全加器级连成串行进位加法器,实现框图如图1。3所示。图1。3 用两个并行四位加法器实现一个八位加法器2. 计设过程要实现8位加法器,需要三个子程序:1。四位加法器;2。二进制转十进制显示模块;3.动态显示模块。2.1. 设计思路利用VHDL言语,实现两个4并行进位加法器,然后将其级联成为一个8位加法器,再实现一个十进制动态显模块,以显示加数、被加数以及相加结果,并在MAX + plus II 中进行仿真。十进制动态显示模块可以通过设计一个9位二进制转换成十进制的显示

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_LOGIC; CO:OUT STD_LOGIC; SO:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY ADD4;ARCHITECTURE H1 OF ADD4 IS

10、BEGIN 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):=A(0); END IF; QQ(1):= NOT(A(1) XOR (NOT(B(1))));SQ(1):=NOT(QQ(1) XOR (NOT(CQ(0))); -第二位于前一进位相加,并产生进位

11、。 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):= NOT(A(3) XOR (NOT B(3)));SQ(3):= NOT(QQ(3) XOR (NOT(CQ(2)));-前一位进位与高位相加并产生进位。 IF (

12、(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. 二进制转换成十进制并显示加法器得到的和为二进制,设计以下二进制到十进制转换显示程序使它显示为十进制.程序如下:LIBRARY IEEE;USE IEEE。STD_LOGIC_1164。ALL;U

13、SE 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;ARCHITECTURE ONE OF LOOK ISSIGNAL AI,BI,CI: INTEGER RANGE 0 TO 9;SIGNAL X

14、I: 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:=(DIA) REM 100)/10; -把整型数的十位赋值给B C:=(DI-A10*B)/100; -把整型数的百位赋值给C AI=A;BI<

15、;=B;CI=C; END PROCESS; PROCESS(AI) IS -把个位赋值给 LED7S1 BEGIN CASE AI IS WHEN 0=LED7S1(6 DOWNTO 0)<=”1000000"; WHEN 1=LED7S1(6 DOWNTO 0)<="1111001" WHEN 2=>LED7S1(6 DOWNTO 0)<=”0100100" WHEN 3=LED7S1(6 DOWNTO 0)<="1100000”; WHEN 4=>LED7S1(6 DOWNTO 0)<="

16、;0011001"; WHEN 5=LED7S1(6 DOWNTO 0)<=”0010010”; WHEN 6=>LED7S1(6 DOWNTO 0)=”0000010”; WHEN 7=>LED7S1(6 DOWNTO 0)<="1111000" WHEN 8=>LED7S1(6 DOWNTO 0)<="0000000”; WHEN 9=LED7S1(6 DOWNTO 0)<="0010000" WHEN OTHERS=>LED7S1(6 DOWNTO 0)=”XXXXXXX"

17、; END CASE; END PROCESS; PROCESS(BI) BEGIN CASE BI IS WHEN 0=>LED7S1(13 DOWNTO 7)="1000000”; WHEN 1=LED7S1(13 DOWNTO 7)=”1111001”; WHEN 2=LED7S1(13 DOWNTO 7)<=”0100100”; WHEN 3=LED7S1(13 DOWNTO 7)<="1100000" WHEN 4=>LED7S1(13 DOWNTO 7)<=”0011001”; WHEN 5=>LED7S1(13 D

18、OWNTO 7)<=”0010010"; WHEN 6=LED7S1(13 DOWNTO 7)="0000010" WHEN 7=LED7S1(13 DOWNTO 7)="1111000”; WHEN 8=>LED7S1(13 DOWNTO 7)<="0000000”; WHEN 9=>LED7S1(13 DOWNTO 7)<="0010000”; WHEN OTHERS=>LED7S1(13 DOWNTO 7)<=”XXXXXXX"; END CASE; END PROCESS;

19、PROCESS(CI) BEGIN CASE CI IS WHEN 0=LED7S1(20 DOWNTO 14)<="1000000"; WHEN 1=LED7S1(20 DOWNTO 14)<=”1111001"; WHEN 2=LED7S1(20 DOWNTO 14)<=”0100100"; WHEN 3=>LED7S1(20 DOWNTO 14)="1100000"; WHEN 4=>LED7S1(20 DOWNTO 14)=”0011001”; WHEN 5=>LED7S1(20 DOWNT

20、O 14)=”0010010"; WHEN 6=>LED7S1(20 DOWNTO 14)=”0000010"; WHEN 7=>LED7S1(20 DOWNTO 14)="1111000”; WHEN 8=LED7S1(20 DOWNTO 14)<=”0000000"; WHEN 9=LED7S1(20 DOWNTO 14)<=”0010000”; WHEN OTHERS=>LED7S1(20 DOWNTO 14)="XXXXXXX”; END CASE; END PROCESS; PROCESS(CLK3) V

21、ARIABLE X: STD_LOGIC_VECTOR(2 DOWNTO 0); -定义一个常量,用来控制位选. BEGIN IF CLK3'EVENT AND CLK3='1 THEN IF X5 THEN X:=x+1; ELSE X:=(OTHERS=>0'); END IF; END IF; XI<=X; END PROCESS; PROCESS(XI,LED7S1) BEGIN CASE XI IS WHEN ”001”=>LED7S1<=LED7S1(6 DOWNTO 0);SMG<=”100"; WHEN "

22、;010”=>LED7S1<=LED7S1(13 DOWNTO 7);SMG<="010”; WHEN "100”=>LED7S1=LED7S1(20 DOWNTO 14);SMG<="001”; WHEN OTHERS=LED7S1<=”XXXXXXX”;SMG=”XXX"; END CASE; END PROCESS;END ARCHITECTURE ONE;3.2. 二进制转十进制显示模块波形输入8位二进制及进位位时,输出个位、十位、百位波形如图3.1所示,由图可知仿真结果与理论实际相符。3。1 二进制转十进制显

23、示模块波形图4. 动态显示模块的设计4.1. 动态显示的模块的实现其程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164。ALL;USE IEEE。STD_LOGIC_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

24、; BEGIN IF CLK3EVENT AND CLK3=1 THEN COUT:=COUT+1; END IF; IF E1='1' THEN Q1<=”001" COUT:=0;-输入加数,数码管显示加数. END IF; IF E2='1 THEN Q1=”010”; COUT:=1024; -输入被加数,数码管显示被加数。 END IF; IF COUT>1050 THEN Q1<="100"数码管显示和。 END IF; END PROCESS;END ARCHITECTURE BHV;4.2. 动态显示模块波

25、形当E1=1 输入加数,数码管显示加数,当E2=1时,输入被加数,数码管显示被加数,其他时候数码管显示和。波形如图4。1所示,由图可知仿真结果与理论实际相符。图4。1动态显示模块波形图4.3. 八位加法器的设计4.3.1. 四位加法器级联成8位加法器运用前面设计的四位加法器级联成八位加法器,并运用动态显示和转换显示,使加数、被加数、和在数码管上用十进制显示出来.设计程序如下:LIBRARY IEEE;USE IEEE。STD_LOGIC_1164.ALL;USE IEEE。STD_LOGIC_UNSIGNED.ALL;ENTITY ADD8 ISPORT(A: IN STD_LOGIC_VEC

26、TOR(7 DOWNTO 0); -输入加数和被加数. EN1,EN2,CLK:IN STD_LOGIC; -控制输入为加数或被加数。 WX: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); 位选。 LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); -数码管显示。END ENTITY ADD8;ARCHITECTURE H2 OF ADD8 IS COMPONENT ADD4 调用四位加法器。 PORT(A,B: IN STD_LOGIC_VECTOR(3 DOWNTO 0); CI: IN STD_LOGIC; CO: OUT STD_LOG

27、IC; SO: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT ADD4; COMPONENT LOOK -调用十进制显示模块. PORT(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 COMPONENT; COMPONENT COUNTER -调用动态显示模块。 PORT(E1,E2,CLK3: IN STD_L

28、OGIC; Q1: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END COMPONENT;SIGNAL AI,BI: STD_LOGIC_VECTOR(7 DOWNTO 0); -定义两个信号,分别表示加数和被加数.SIGNAL E,COUT: STD_LOGIC;SIGNAL SUM: STD_LOGIC_VECTOR(7 DOWNTO 0); 定义信号,表示和。SIGNAL PP: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL CLK2: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN U1:ADD4 PORT MA

29、P(A=AI(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,E

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

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

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


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