基于vhdl语言的二进制转十进制并用数码管显示的设计_第1页
基于vhdl语言的二进制转十进制并用数码管显示的设计_第2页
基于vhdl语言的二进制转十进制并用数码管显示的设计_第3页
基于vhdl语言的二进制转十进制并用数码管显示的设计_第4页
基于vhdl语言的二进制转十进制并用数码管显示的设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、河南科技学院机电学院VHDL课程设计报告题目:八位数码管显示 专业班级:电气工程及其自动化102 姓名: 周迎接 学 号: 20100344214 指导教师: 付广春 完成日期:2012年12月 27 日目 录1 引言22 总体设计方案22.1 输入引脚数目的计算32.2 二进制转为十进制部分程序设计32.3 数码管显示部分程序设计43 仿真显示53.1 显示3仿真图53.2显示96的仿真图54 心得体会6参考文献6附录17摘要随着当今社会电子技术的快速发展,单凭借硬件已不再能满足广大人民的需求,这时候软件就显示除了他们突出的优点。与其他编程语言相比,VHDL语言以其超强的硬件描述能力,良好的

2、可读性和可移植性,以及其良好的用户自定义性受到了广大用户的青睐。VHDL语言在最近几年的发展及其迅猛,由此可以看出其用途已经变的越来越广泛。一个VHDL程序由5个部分组成,包括实体(ENTITY)、结构体(architecture)、配置(coxnfiguration)、包(package)和库(library)。实体和结构体两大部分组成程序设计的最基本单元。图2.2表示的是一个VHDL程序的基本组成。配置是用来从库中选择所需要的单元来组成该系统设计的不同规格的不同版本,VHDL和Verilog HDL已成为IEEE的标准语言,使用IEEE提供的版本。包是存放每个设计模块都能共享的设计类型、常

3、数和子程序的集合体。库是用来存放已编译的实体、结构体、包和配置。在设计中可以使用ASIC芯片制造商提供的库,也可以使用由用户生成的IP库。今天我所要设计的是基于VHDL语言的8位数码管显示电路,其要实现的功能是把输入的二进制数转换为对应的十进制数,并通过数码管显示出来。其过程大致可以分为通过程序将输入的二进制数先转换为对应的十进制数,然后再把对应的十进制数与数码管的管脚对应起来,使其显示在数码管上。关键词:二进制转为十进制 数码管显示 共阳数码管1 引言VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware Description Lan

4、guage,诞生于 1982 年。1987 年底,VHDL被美国国防部和IEEE确认为标准硬件描述语言。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

5、 VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。归纳起来,VHDL 语言主要具有以下优点:1 (1) VHDL 语言功能强大,设计方式多样 VHDL 语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时,它还具有多层次的电路设计描述功能。此外,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。VHDL 语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法; 既支持模块化设计方法,也支持层次化设计方法。 (2) VHDL 语言

6、具有强大的硬件描述能力 VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。 (3) VHDL 语言具有很强的移植能力 VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述,它可以从一个模拟器移植到另一个模拟器上

7、、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。 (4) VHDL 语言的设计描述与器件无关 采用 VHDL 语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,VHDL 语言允许采用多种不同的器件结构来实现。 (5) VHDL 语言程序易于共享和复用 VHDL 语言采用基于库的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设

8、计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。 本次我所要设计的基于VHDL语言的八位数码管显示将充分体现它的部分优点。2 总体设计方案2.1 输入引脚数目的计算因为题目要求数码管要能显示最大的八位十进制二进制数,所以对应的二进制表示的十进制数首先要大于99999999,即2的所有n次幂之和应该大于99999999,数码管才能显示出最大的八位十进制数,所以计算可得n的值最小为27,所以输入二进制数的引脚应该设为27个,其二进制数输入引脚图如图1所示图1 二进制数输入引脚图2.2 二进制转为十进制部分程序设计二进制转为十进制的部分程序如下:architect

9、ure one of look issignal ai,bi,ci,ki,ei,fi,gi,hi:integer range 0 to 9;signal di:integer range 0 to 99999999;begindi<=conv_integer(d);2.3 数码管显示部分程序设计2.3.1 程序中数码管的选择及显示的设置在本设计中按照我的程序硬件所选用的应该为共阴极数码管,且当某一位数码管不需要显示数据时,统一设定其显示0,例如需要显示1时,八个数码管的显示为00000001。2.3.2 数码管显示部分部分程序如下:variable a,b,c,k,e,f,g,h:int

10、eger range 0 to 9;begina:=di rem 10;b:=(di-a) rem 100;c:=(di-a-10*b) rem 1000;k:=(di-a-10*b-c*100) rem 10000;e:=(di-a-10*b-c*100) rem 100000;f:=(di-a-10*b-c*100-1000*e) rem 1000000;g:=(di-a-10*b-c*100-1000*e-10000*f) rem 10000000;h:=(di-a-10*b-c*100-1000*e-10000*f-100000*g)/10000000;ai<=a;bi<=

11、b;ci<=c;ki<=k;ei<=e;fi<=f;gi<=g;hi<=h;end process;process(ai)begincase 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)<="011

12、0000" when 4=>led7s1(6 downto 0)<="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

13、 downto 0)<="0010000" when others=>led7s1(6 downto 0)<="XXXXXXX"end case;end process;2.3.3 数码管显示部分引脚图数码管显示部分部分引脚图如图2 所示图 2 数码管显示部分部分引脚图2.2.4 总体设计程序见附表13 仿真显示3.1 显示“000000003”仿真图显示数字“3”的仿真图如图3所示,因为根据程序所需数码管为共阳极数码管,所以数码管对应的“e”,“f”段应该为高电平,在本次设计中,即数码管的第5,6段为高电平,为了便于观察,仿真的各项周

14、期均取10ns。 图3 显示“3”电路3.2 显示“96”部分仿真图,如图4所示 图4 显示“96”仿真图4 心得体会通过这次的课程设计让我对VHDL语言以及电路设计的理论有了更加深入的了解,课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,这次课程设计虽然很累,但我学到了不少东西,对软件的设计过程和方法有了更深入的了解。在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我

15、的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。这次课程设计顺利完成了,在设计中遇到了很多问题,最后都是经过查阅相关的资料和在同学的帮助下,终于游逆而解。同时,在我学得到很多实用的知识,同时,对给过我帮助的所有同学再次表示忠心的感谢!参考文献【1】黄继业.EDA技术使用教程M.北京:科学出版社,2010【2】王云亮.电力电子技术M.北京:电子工业出版社,2009【3】康光华.电子技术基础M.北京:高等教育出版社,2006附录1library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use

16、ieee.std_logic_arith.all;entity look isport(d:in std_logic_vector(26 downto 0);clk3:in std_logic;led7s1,led7s2,led7s3,led7s4,led7s5,led7s6,led7s7,led7s8:out std_logic_vector(6 downto 0);end;architecture one of look issignal ai,bi,ci,ki,ei,fi,gi,hi:integer range 0 to 9;signal di:integer range 0 to 99

17、999999;begindi<=conv_integer(d); process(di)variable a,b,c,k,e,f,g,h:integer range 0 to 9;begina:=di rem 10;b:=(di-a) rem 100;c:=(di-a-10*b) rem 1000;k:=(di-a-10*b-c*100) rem 10000;e:=(di-a-10*b-c*100-k*1000) rem 100000;f:=(di-a-10*b-c*100-k*1000-10000*e) rem 1000000;g:=(di-a-10*b-c*100-k*1000-10

18、000*e-100000*f) rem 10000000;h:=(di-a-10*b-c*100-k*1000-10000*e-100000*f-1000000*g)/10000000;ai<=a;bi<=b;ci<=c;ki<=k;ei<=e;fi<=f;gi<=g;hi<=h;end process;process(ai)begincase ai is when 0=>led7s1(6 downto 0)<="1000000" when 1=>led7s1(6 downto 0)<="11

19、11001" when 2=>led7s1(6 downto 0)<="0100100" when 3=>led7s1(6 downto 0)<="0110000" when 4=>led7s1(6 downto 0)<="0011001" when 5=>led7s1(6 downto 0)<="0010010" when 6=>led7s1(6 downto 0)<="0000010" when 7=>led7s1(

20、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"end case;end process;process(bi)begincase bi is when 0=>led7s2(6 downto 0)<="1000000&qu

21、ot; when 1=>led7s2(6 downto 0)<="1111001" when 2=>led7s2(6 downto 0)<="0100100" when 3=>led7s2(6 downto 0)<="0110000" when 4=>led7s2(6 downto 0)<="0011001" when 5=>led7s2(6 downto 0)<="0010010" when 6=>led7s2(6 downto

22、 0)<="0000010" when 7=>led7s2(6 downto 0)<="1111000" when 8=>led7s2(6 downto 0)<="0000000" when 9=>led7s2(6 downto 0)<="0010000" when others=>led7s2(6 downto 0)<="XXXXXXX"end case;end process;process(ci)begincase ci is when

23、 0=>led7s3(6 downto 0)<="1000000" when 1=>led7s3(6 downto 0)<="1111001" when 2=>led7s3(6 downto 0)<="0100100" when 3=>led7s3(6 downto 0)<="0110000" when 4=>led7s3(6 downto 0)<="0011001" when 5=>led7s3(6 downto 0)<=

24、"0010010" when 6=>led7s3(6 downto 0)<="0000010" when 7=>led7s3(6 downto 0)<="1111000" when 8=>led7s3(6 downto 0)<="0000000" when 9=>led7s3(6 downto 0)<="0010000" when others=>led7s3(6 downto 0)<="XXXXXXX"end ca

25、se;end process;process(ki)begincase ki is when 0=>led7s4(6 downto 0)<="1000000" when 1=>led7s4(6 downto 0)<="1111001" when 2=>led7s4(6 downto 0)<="0100100" when 3=>led7s4(6 downto 0)<="0110000" when 4=>led7s4(6 downto 0)<="00

26、11001" when 5=>led7s4(6 downto 0)<="0010010" when 6=>led7s4(6 downto 0)<="0000010" when 7=>led7s4(6 downto 0)<="1111000" when 8=>led7s4(6 downto 0)<="0000000" when 9=>led7s4(6 downto 0)<="0010000" when others=>le

27、d7s4(6 downto 0)<="XXXXXXX"end case;end process;process(ei)begincase ei is when 0=>led7s5(6 downto 0)<="1000000" when 1=>led7s5(6 downto 0)<="1111001" when 2=>led7s5(6 downto 0)<="0100100" when 3=>led7s5(6 downto 0)<="0110000&qu

28、ot; when 4=>led7s5(6 downto 0)<="0011001" when 5=>led7s5(6 downto 0)<="0010010" when 6=>led7s5(6 downto 0)<="0000010" when 7=>led7s5(6 downto 0)<="1111000" when 8=>led7s5(6 downto 0)<="0000000" when 9=>led7s5(6 downto

29、 0)<="0010000" when others=>led7s5(6 downto 0)<="XXXXXXX"end case;end process;process(fi)begincase fi is when 0=>led7s6(6 downto 0)<="1000000" when 1=>led7s6(6 downto 0)<="1111001" when 2=>led7s6(6 downto 0)<="0100100" when

30、 3=>led7s6(6 downto 0)<="0110000" when 4=>led7s6(6 downto 0)<="0011001" when 5=>led7s6(6 downto 0)<="0010010" when 6=>led7s6(6 downto 0)<="0000010" when 7=>led7s6(6 downto 0)<="1111000" when 8=>led7s6(6 downto 0)<=

31、"0000000" when 9=>led7s6(6 downto 0)<="0010000" when others=>led7s6(6 downto 0)<="XXXXXXX"end case;end process;process(gi)begincase gi is when 0=>led7s7(6 downto 0)<="1000000" when 1=>led7s7(6 downto 0)<="1111001" when 2=>led7s7(6 downto 0)<="0100100" when 3=>led7s7(6 downto 0)<="0110000" when 4=>

温馨提示

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

评论

0/150

提交评论