四位二进制加法器和乘法器_第1页
四位二进制加法器和乘法器_第2页
四位二进制加法器和乘法器_第3页
四位二进制加法器和乘法器_第4页
四位二进制加法器和乘法器_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 引言EDA (ElectronicDesign Automatic)技术的应用引起电子产品及系统开发的革命性 变革。VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强, 在实际应用中越来越广泛。1.1 设计的目的本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术, 了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电 路的设计知识理论联系实际,掌握所学的课程知识,学习V HDL基本单元电路的综合设 计应用。通过对四位二进制加法器和四位二进制乘法器的设计,巩固和综合运用所学课 程,加深对数字电路和V HDL基本单元的理

2、解,理论联系实际,提高设计能力,提高分 析、解决计算机技术实际问题的独立工作能力。通过课程设计深入理解V HDL语言的精 髓,达到课程设计的目标,加法器的设计可以加深对门电路的理解,乘法器的设计可以 使对计算机怎样工作有了更深了解。1.2 设计的基本内容本文是设计的一个四位二进制加法器和四位二进制乘法器。四位二进制加法器使用 门电路构成,用VHDL语言对其实现。乘法器使用VHDL语言里的乘法运算符实现,使用 数码管动态显示一个三位数结果。然后用VHDL语言编写相应的程序,在计算机上实现, 最后进行了加法器和乘法器的仿真分析。2 EDA、VHDL 简介2.1 EDA简介EDA是电子设计自动化(E

3、lectronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM (计算机辅助制造)、CAT (计算机辅助测试)和CAE (计 算机辅助工程)的概念发展而来的。 EDA 技术是以计算机为工具,根据硬件描述语言 HDL( Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、 分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工 作。典型的 EDA 工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功 能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态

4、图形描 述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功 能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将 软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬 件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件 FPGA/CPLD 相映射的网表文件。适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的 下载文件,如JED文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合 器中已指定的目标器件系列。硬件描述语言HDL是相对于一般的计算机软件语言,如:C、P

5、ASCAL而言的。 HDL 语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电 路结构和连接方式。设计者可利用 HDL 程序来描述所希望的电路系统,规定器件结构 特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD 内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前, 就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。2.2 硬件描述语言VHDL 简介VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发

6、周期的一种使用范围较小的设计语言 。但是,由于它在一定程度上满足了当时的设计需求,于是他在1987 年成为A I/IEEE的标准(IEEE STD 1076-1987)。1993年更进一步修订,变得更加完备, 成为A I/IEEE的A I/IEEE STD 1076-1993标准。目前,大多数的CAD厂商出品的EDA 软件都兼容了这种标准。VHDL的英文全写是:VHSIC(Very High eed Integrated Circuit) Hardware Descriptiong Language .翻译成中文就是超高速集成电路硬件描述语言。因此它 的 应用主要是 应用在数字电路的 设计中。

7、 目 前 , 它在中国的 应用多 数 是 用在 FPGA/CPLD/EPLD 的设计中。当然在一些实力较为雄厚的单位,它也被用来设计 ASIC。 VHDL 主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具 有硬件特征的语句外, VHDL 的语言形式和描述风格与句法是十分类似于一般的计算机 高级语言。 VHDL 的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件, 一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分), 既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其 内部开发完成后,其他的设计就可以直接调用这个实体。

8、这种将设计实体分成内外部分 的概念是 VHDL 系统设计的基本点。 VHDL 比其它硬件描述语言相比有以下优点:与其他的硬件描述语言相比, VHDL 具有更强的行为描述能力,从而决定了 他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结 构,从逻辑行为上描述和设计大规模电子系统的重要保证。VHDL 丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设 计系统的功能可行性,随时可对设计进行仿真模拟。VHDL 语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解 和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行

9、工作才能实现。(4)对于用VHDL 完成的一个确定的设计,可以利用 EDA 工具进行逻辑综合和优化,并自动的把 VHDL 描述设计转变成门级网表。(5) VHDL 对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理 最终设计实现的目标器件是什么,而进行独立的设计。2.2.2 VHDL 语言特点应用 VHDL 进行系统设计,有以下几方面的特点。功能强大VHDL 具有功能强大的语言结构。它可以用明确的代码描述复杂的控制逻辑设计。并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。VHDL是一种 设计、仿真和综合的标准硬件描述语言。(二)可移植性VHDL 语言是一个标准语言

10、,其设计描述可以为不同的 EDA 工具支持。它可以从 一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个 工作平台移植到另一个工作平台。此外,通过更换库再重新综合很容易移植为 ASIC 设 计。(三)独立性VHDL 的硬件描述与具体的工艺技术和硬件结构无关。设计者可以不懂硬件的结 构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。程序设计的硬件目 标器件有广阔的选择范围,可以是各系列的 CPLD、FPGA 及各种门阵列器件。(四)可操作性由于 VHDL 具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,

11、就能轻易地改变设计的规模和结构。(五)灵活性VHDL 最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。使其 在任何大系统的设计中,随时可对设计进行仿真模拟。所以,即使在远离门级的高层次 (即使设计尚未完成时),设计者就能够对整个工程设计的结构和功能的可行性进行查 验,并做出决策。S0s2couts3图 3.1 加法器系统框图albla2b2S0s2couts3图 3.1 加法器系统框图albla2b2a3b33 设计规划过程加法器与乘法器的原理四位二进制加法器的组成原理 加法器是运算电路的核心。计算机中实现减法、乘法和除法都要最终转化成加法 来运算。本实验才没有用VHDL语言中的

12、加法运算符。而是用基本门电路来实现的。一方面可以提高运算速度,另一方面可以使我们加深对数字电路的认识。图 3.1 所示是四位 二进制加法器的原理框图。INPUTa0b0四位二进制乘法器的组成原理本实验学习 VHDL 中乘法的使用。在 VHDL 语言中,一般有 c(7 downto 0)=a(3 downto 0)*b(3 downto 0)。所以 4 位二进制数的乘积是 8 位二进制数,为了更符合习惯, 我们把结果转化成了十进制。所以结果范围是 0225,即 015*15。本实验采用的三位数在数码管上显示的方法是:分别确定百位、十位和个位。送数 码管动态显示。采用与各个数逐一比较的方法确定。如

13、百位的确定可以将结果与200和 100 比较,若比 200 大则百位为 2,在 100 到 200 之间则百位为 1,小于 100则百位为 0, 不显示。十位的确定可以将结果去掉百位,然后与10, 20,.90比较而得。本文设计的四位二进制乘法器系统框图如图3.2所示。multiplyelkled_data7.0a3.0seg_sel2.0b3.0图 3.2 乘法器系统框图加法器与乘法器的设计四位二进制加法器和乘法器由VHDL实现后,利用EDA工具对各模块进行了时序仿真(Timing Simulation),其目的是通过时序可以更清楚的了解程序的工作过程。3.2.1 加法器的设计1位全加器的V

14、HDL程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity add1 is- 1 位全加器port( a,b:in std_logic;cin:in std_logic;cout:out std_logic;s:out std_logic);end add1;architecture rtl of add1 isbeginprocess(a,b,cin)-列举所有情况对应的输出variable temp,temp1:std_l

15、ogic;begintemp:=a xor b;temp1:= temp xor cin;cout=(temp and cin)or (a and b);s=temp1;end process;end rtl;-以上是对 add1 的定义以上是对一位全加器的定义,运用一位全加器构成四位全加器。其中引脚分配如下Node NameDirectio nLd匚atio仃I/O BankVreh ijroupI/O StandardaOInputPIN 993Ei3 N0LVTTL (default)alInputPIN 1003Ei3 N0LVTTL (default)a2InputPIN 1033E

16、i3 N0LVTTL (default)a3InputPIN 1043Ei3 N0LVTTL (default)boInputPIN 1053B3 N0LVTTL (default)blInputPIN 1063E:3 N0LVTTL (default)b2InputPIN 1073E:3 N0LVTTL (default)b3Input3E:3 N0LVTTL (default)cinInputLVTTL (default)妙 COIjtOutputPIN 351E:1 N2LVTTL (default)/50OutputPIN 973E:3 N0LVTTL (default)/51Outp

17、utPIN 983E:3 N0LVTTL (default)/52OutputPIN 943E:3 N1LVTTL (default)/53OutputPIN 963E:3 N1LVTTL (default)备注:cin接地。四位二进制加法器仿真图如下所示:Ret| * | Time: |162-山诣| Interval: 1112ris5n3Name:Value: r100 Ons 200 0ns 300 0ns 400 0nsIlli500 0ns 600 0ns1 1700.0ns 800.0nsII900cinDI?1NNHNNNNa.1NN-_Z sDr-_z cout1L仿真分析:

18、cin为输入信号,表示上一次的进位,b, a为输入信号,表示两个相加的数,s 为输出信号,表示本次运算的结果, cout 为进位输出信号,表示本次运算的进位,如图 所示:当 cin 为 0, a,b 为 1 时,输出为:s=0, cout=l,当 cin=l, a=l, b=0 时,输 出为:s=0, cout=1,当 cin=1, a=1, b=1 时候,输出为:s=1, cout=1。3.2.2 乘法器的设计乘法器的设计用VHDL乘法运算符实现。在 VHDL 语言中,一般有 c(7 downto 0)=a(3 downto 0)*b(3 downto 0) 。所以 4 位二 进制数的乘积是

19、 8 位二进制数,为了更符合习惯,我们把结果转化成了十进制。所以结 果范围是 0225,即 015*15。本实验采用的三位数在数码管上显示的方法是:分别确定百位、十位和个位。送数码管动态显示。采用与各个数逐一比较的方法确定。如百位的确定可以将结果与200和100 比较,若比 200 大则百位为 2,在 100 到 200 之间则百位为 1,小于 100则百位为 0,不显示。十位的确定可以将结果去掉百位,然后与10, 20,.90比较而得。VHDL 语言设计如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigne

20、d.all;entity multiply is-构造体描述 4 位乘法器port( clk:in std_logic;a,b:in std_logic_vector(3 downto 0); led_data:out std_logic_vector(7 downto 0);seg_sel:out std_logic_vector(2 downto 0);end multiply;architecture rtl of multiply issignal led_data2,led_data1,led_data0: std_logic_vector(7 downto 0);-LED 显示代码

21、,寄存十位个位 的数signal displayclk: std_logic;beginprocess(a,b)variable s: std_logic_vector(7 downto 0);-乘积variable bai,shiwei,gewei: std_logic_vector(3 downto 0);-乘积的十位个位begins(7 downto 0):=a(3 downto 0)*b(3 downto 0);ifs=11001000 then bai:=0010;s:=s-11001000; -200以上elsif s=01100100 then bai:=0001;s:=s-01

22、100100; -100以上else bai:=0000;end if;if s=01011010 then shiwei:=1001;s:=s-01011010;gewei:=s(3 downto 0);-90以上elsif s=01010000 then shiwei:=1000;s:=s-01010000;gewei:=s(3 downto 0);-80以上elsif s=01000110 then shiwei:=0111;s:=s-01000110;gewei:=s(3 downto 0); -70以上elsif s=00111100 then shiwei:=0110;s:=s-0

23、0111100;gewei:=s(3 downto 0);-60以上elsif s=00110010 then shiwei:=0101;s:=s-00110010;gewei:=s(3 downto 0);-50以上elsif s=00101000 then shiwei:=0100;s:=s-00101000;gewei:=s(3 downto 0);-40以上elsif s=00011110 then shiwei:=0011;s:=s-00011110;gewei:=s(3 downto 0);-30以上elsif s=00010100 then shiwei:=0010;s:=s-0

24、0010100;gewei:=s(3 downto 0);-20以上elsif s=00001010 then shiwei:=0001;s:=s-00001010;gewei:=s(3 downto 0);-10以上 else gewei:=s(3 downto 0);shiwei:=0000;end if;case bai iswhen 0001 = led_data2 led_data2 led_data2 led_data1 led_data1 led_data1 led_data1 led_data1 led_data1 led_data1 led_data1 led_data1 l

25、ed_data1 led_data1 led_data0 led_data0 led_data0 led_data0 led_data0 led_data0 led_data0 led_data0 led_data0 led_data0 led_data0=11111111;end case;end process;process(clk)variable cnt:integer range 0 to 20000;-1KHZ 扫描显示时钟beginif clkevent and clk=1 then cnt:=cnt+1;if cnt10000 then displayclk=1;elsif

26、cnt20000 then displayclk=0;else cnt:=0;displayclk=0;end if;end if;end process;process (displayclk)-显示两位variable cnt2: std_logic_vector(1 downto 0); beginif displayclkevent and displayclk=1 then cnt2:=cnt2+1; if cnt2=01 then seg_sel=001; led_data=led_data0;elsif cnt2=010 then seg_sel=010; led_data=le

27、d_data1;elsif cnt2=11 then cnt2:=00; seg_sel=100; led_data=led_data2;end if;end if;end process;end rtl;实验引脚分配如下:仿真分析:elk为时钟脉冲输入信号,a, b是输出信号表示要参与运算的两个数, Led_data, seg_set 为输出信号,表示计算的结果。结束语通过两周的紧张工作,最后完成了我的设计任务四位二进制加法器和乘法器的 设计。通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。本次 设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识完成工作的能

28、力。加法器和乘法器虽然是比较简单的设计课程,但它给了我一个锻炼的机会和检验的 机会,也给我复习计算机组成原理这门课提供了方便。希望学校以后多安排一些类似的 实践环节,让同学们学以致用。加法器和乘法器的设计让我对门电路更有清楚了解,对 VHDL 语言也有了一定的了解。加法器是计算机运算中的重要组成部分,而且是其他运 算实现的基础。在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致 结果的不正确,感谢肖晓丽老师耐心的给我指出了错误,让我面对错误的检查有足够的 耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事设计工作 会有一定的帮助。在应用VHDL的过程中让

29、我真正领会到了其并行运行与其他软件顺序 执行的差别及其在电路设计上的优越性。VHDL语言具有多层次描述系统硬件功能的能 力,可以从系统的数学模型直到门级电路,用来进行数字系统的设计方便灵活。致谢在此次课程设计中,非常感谢肖晓丽老师对我的指导与大力的帮助。如果没有她严 谨细致、一丝不苟地批阅和指正,本文很难在这个短时间(两周)内完成。在论文即将 完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、 同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!参考文献David A.Patterson.计算机组成和设计M.清华大学出版社,2003年12月William Stal

30、lings计算机组织与结构M.高等教育出版社,2001年8月曾繁泰,陈美金.VHDL程序设计M.清华大学出版社,20014潘松.VHDL实用教程M.电子科技大学出版社,2000王爱英计算机组成与结构M清华大学出版社.2001年2月附件:加法器的 VHDL 语言设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity add1 is- 1 位全加器port( a,b:in std_logic;cin:in std_logic;cou

31、t:out std_logic;s:out std_logic);end add1;architecture rtl of add1 isbeginprocess(a,b,cin)-列举所有情况对应的输出variable temp,temp1:std_logic;begintemp:=a xor b;temp1:= temp xor cin;cout=(temp and cin)or (a and b);s=temp1;end process;end rtl;-以上是对 add1 的定义library ieee;-整体组装use ieee.std_logic_1164.all;use ieee

32、.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity adder4 is- 4 位全加器port( a0,a1,a2,a3:in std_logic; -四位二进制输出b0,b1,b2,b3:in std_logic;-四位二进制输出cin:in std_logic;-进位输入,本实验设为 0cout:out std_logic;-进位输出 s0,s1,s2,s3:out std_logic -和);end adder4;architecture rtl of adder4 issignal cingnd:std_logic;-

33、由于拨玛开关只有 8 个,故进位输入不接signal cout1,cout2,cout3:std_logic;-第一位第二为第三位向高位进位输出 component add1 is-元件例化语句,1 位全加器port( a,b:in std_logic;cin:in std_logic;s:out std_logic);end component;begincingnda0,-模块的名称映射b=b0, cin=cingnd, cout=cout1,s=s0);u2: add1 port map( a=a1, b=b1,cin=cout1, cout=cout2, s=s1);u3: add1

34、port map( a=a2, b=b2,cin=cout2, cout=cout3, s=s2);u4: add1 port map( a=a3, b=b3,cin=cout3,cout=cout,s=s3);end rtl;乘法器的 VHDL 语言设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity multiply is-构造体描述 4 位乘法器port( clk:in std_logic;a,b:in std_logic_vector(3 downto 0); led_dat

35、a:out std_logic_vector(7 downto 0); seg_sel:out std_logic_vector(2 downto 0) );end multiply;architecture rtl of multiply issignal led_data2,led_data1,led_data0: std_logic_vector(7 downto 0);-LED 显示代码,寄存十位个位 的数signal displayclk: std_logic;beginprocess(a,b)variable s: std_logic_vector(7 downto 0);-乘积v

36、ariable bai,shiwei,gewei: std_logic_vector(3 downto 0);-乘积的十位个位begins(7 downto 0):=a(3 downto 0)*b(3 downto 0);ifs=11001000 then bai:=0010;s:=s-11001000; -200以上elsif s=01100100 then bai:=0001;s:=s-01100100; -100以上else bai:=0000;end if;if s=01011010 then shiwei:=1001;s:=s-01011010;gewei:=s(3 downto 0);-90以上elsif s=01010000 then shiwei:=1000;s:=s-01010000;gewei:=s(3 downto 0);-80以上elsif s=01000110 then shiwei:=0111;s:=s-01000110;gewei:=s(3 downto 0); -70以上elsif s=00111100 then shiwei:=0110;s:=s-00111100;gewei:=s(3 downto 0);-60以上elsif s=00110010 then shiwei:=0101;s:=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论