ImageVerifierCode 换一换
格式:DOC , 页数:36 ,大小:2.06MB ,
资源ID:3006215      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3006215.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(本科毕业论文---基于vhdl语言的两位数简易记分板设计.doc)为本站上传会员【胜****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

本科毕业论文---基于vhdl语言的两位数简易记分板设计.doc

1、 本科毕业设计 ( 2015 届 ) 题 目: 基于VHDL语言的两位数简易记分板设计 学 院: 机电工程学院 专 业: 自动化 学生姓名: 学号: 指导教师: 职称(学位): 合作导师: 职称(学位): 完成时间: 201

2、5 年 05 月 25 日 成 绩: 黄山学院教务处制 学位论文原创性声明 兹呈交的学位论文,是本人在指导老师指导下独立完成的研究成果。本人在论文写作中参考的其他个人或集体的研究成果,均在文中以明确方式标明。本人依法享有和承担由此论文而产生的权利和责任。 声明人(签名): 年 月 日 黄山学院本科毕业设计说明书正文 目 录 摘要 1 英文摘要 2 1

3、 引言 3 1.1 研究背景 3 1.2 选题的目的和意义 3 2 系统方案的拟定 3 2.1 EDA软件的选择 3 2.2 硬件描述语言的选择 4 2.3 记分板系统的设计 4 3 软件设计 5 3.1 偶数分频器模块的设计 5 3.2 按键去抖模块的设计 12 3.3 译码显示模块 14 4 系统组态及调试 16 4.1 系统组态 16 4.2 顶层程序设计及调试 17 结论 22 参考文献 23 致谢 24 附录 25 基于VHDL语言的两位数简易记分板设计 机电工程学院 自动

4、化专业 指导老师: 摘要:目前市场上销售的记分器大都是依据单片机技术的制造的,它的主要器件是单片机,并且它的编码器及解码器是由单片机内部的软件生成的。在实际应用中,由于种种未知的因素可能导致程序出现运行不稳定的现象,从而导致系统的可靠性随时受到严重的威胁。而基于EDA技术设计的记分器,它的系统完全由FPGA构成,系统要求实现的功能全部由FPGA内部的硬件来提供,从而大大提高了系统工作的稳定性和可靠性。FPGA的最重要的特色就是它具有现场可编程功能,所以如果需要对设计进行修改,不必重新设计系统,只需更改芯片内部的控制和接口电路,再利用EDA软件将更新后的设计程序下载到FPGA中即可,无需

5、更改外部电路的设计。 本论文详细阐述了运用EDA技术结合FPGA芯片在MAX+Plus II开发环境下设计两位数简易记分板的方法。记分板的功能有:加分、减分、清零以及鸣叫提示。将设计好的程序下载到FPGA芯片中进行验证,完全符合本论文的设计要求。可以看出,FPGA芯片与VHDL硬件描述语言相结合不仅简化了电路的设计、降低了编程的难度,而且大大缩短了产品开发的周期,提高了产品的竞争力。 关键词:EDA技术;FPGA;VHDL;MAX+Plus II;记分板 Design Simple Two D

6、igit Scoreboard Based on EDA Technology Chen Guiting Director: Zhao Nianshun (School of Mechanical and Electrical Engineering, Huangshan Univercity,China,245041) Abstract:The scoreboard on the market are mostly based on the manufacturing of microcomputer technology, its main device is a

7、single chip, and the encoder and decoder which is generated by the internal microcontroller software. In practical applications, due to various factors may lead to unknown program appears unstable phenomenon, which leads to the reliability of the system at any time under serious threat. The scoring

8、device based on EDA, the system is completely composed of FPGA, system requirements to achieve all functions provided by the FPGA internal hardware, which greatly improves the stability and reliability of the system. The most important feature of FPGA is that it has a field programmable function, so

9、 if you need to modify the design, do not have to redesign the system, only need to change the control and interface circuit inside the chip, then download the updated design program to FPGA you can use EDA software, without changing the external circuit design. This paper describes the method of c

10、ombining FPGA chip design a simple two digit scoreboard in the MAX+Plus II development environment using EDA technology. The scoreboard features: plus, minus, and zero promptsthe. The program is downloaded to the FPGA chip verification, fully meet the requirements of this design. As you can see, the

11、 FPGA chip and the VHDL hardware description language combination not only simplifies the circuit design, reduce the difficulty of programming, but also greatly shorten the product development cycle, improve the competitiveness of products. Key Words:EDA Technology;The scoreboard;FPGA;VHDL;MAX+Plus

12、 II 1 引言 1.1 研究背景 20世纪60年代中期,电子设计自动化(Electronic Design Automation,缩写:EDA)技术从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来[1]。它以计算机为工具,设计者只需使用EDA软件开发环境,使用硬件描述语言完成设计文件,剩下的任务就交给计算机,由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。在这

13、种情况下,FPGA(Field-Programmable Gate Array,即现场可编程门阵列)器件应运而生[2]。由于FPGA具有现场可编程功能,所以,当系统的功能需要更改时,我们可以不用修改外围电路结构,只需更改FPGA中的控制电路和接口电路,然后利用EDA工具将更新后的程序下载到FPGA中即可,这不仅大大提高了设计的效率以及使用的成本。还大大提高了电路设计的效率和可操作性、减轻了设计者的劳动强度、同时也大大缩短了产品的开发周期、提升了产品的竞争能力[3]。 1.2 选题的目的和意义 大到奥运比赛小到班级的比赛,记分板始终扮演着举足轻重的角色。为了体现出比赛的公正、公平,其质量的

14、重要性显得尤为突出。目前使用的记分器大部分是基于单片机技术制造的,其编码器与解码器的生成方式是单片机内部的软件编译后生成的。在实际应用中,由于程序可能不稳定,从而影响系统的可靠性。而基于现场可编程逻辑门阵列FPGA器件制造的记分器则不会发生这种情况,它采用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高[4]。 2 系统方案的拟定 2.1 EDA软件的选择 本设计所选用的EDA软件是MAX+Plus II。它是Altera公司提供的上一代FPGA开发集成环境。由于它的操作界面友好,操作方式简单,一度被誉为业内最简单、最好用的EDA软件之一。它主

15、要有以下几个优点: (1)开放的界面 Max+plusⅡ支持与Cadence、Mentor Graphics等公司所提供的EDA工具接口。 (2)与结构无关 Max+plusⅡ系统的核心编译器支持阿尔特拉公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。 (3)丰富的设计库 该软件为开发者提供了丰富的库单元,其中包括多种特殊的逻辑功能块和74系列的全部器件以及新型的参数化的兆功能。 (4)硬件多种描述语言(HDL) 支持各种HDL设计输入选项

16、包括VHDL、Verilog HDL以及Altera公司自己的硬件描述语言AHDL。 2.2 硬件描述语言的选择 硬件描述语言(英文:Hardware Description Language,简称:HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。利用硬件描述语言,数字电路系统的设计可以从顶层到底层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统[5]。 HDL发展至今已有20多年的历史,截止到上世纪80年代,许多大公司都先后推出了具有自己特色的硬件描述语言,这对电子设计自动化行业起到了极大的促进作用。但是,各大公司自己的硬件描

17、述语言一般都只适用于自己的设计领域和层次,而且种类繁多的开发语言使得开发者左右为难。因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言。在这种环境驱使下,VHDL和Verilog HDL语言从中脱颖而出,先后成为IEEE标准[6]。 行为级抽象建模的覆盖面范围的能力是VHDL和Verilog HDL的一大区别,具体体现在:Verilog HDL在系统级抽象方面要略差一些,而在门级开关电路描述方面要强的多。至于别的方面二者的功能都不分伯仲,谈不上孰优孰劣。 由于本人首先接触的是VHDL,对其有一定的了解,所以,本次设计采用的是VHDL语言。 2.3 记分板系统

18、的设计 (1)系统的功能 两位分数00-99显示、加分、减分。 分数清零同时蜂鸣器鸣叫提示。 (2)系统的设计 EDA技术采用的是“自顶向下”(Top-Down)的设计方法,所以,首要任务就是分析整个系统的结构,然后根据结构的特点将其分成若干个子模块,然后对这些子模块进行分析、设计和验证,当子模块都设计成功后,再将一个个小的子模块联合在一起形成一个完整的系统。再对系统进行修改和验证,直到设计完成[7]。结构原理图如图2-1所示: 图2-1 系统结构框图 如图2-1,外部时钟源由于其频率太高,不能直接用于FPGA内部的各功能模块

19、所以需要对其进行分频;按键信号由于具有抖动性,所以要对其进行去抖才能将信号送入FPGA中的模块进行使用;译码模块是驱动数码管显示的模块。 3 软件设计 本章共分三个小节来介绍记分板软件部分的设计。第一节阐述了分频器的原理应用以及软件的实现;第二节描述了去抖模块的原理以及用VHDL语言如何去实现;第三节介绍了数码管的显示原理应用范围以及使用软件的方法来驱动数码管显示我们需要显示的内容。 3.1 偶数分频器模块的设计 (1)原理 对于偶数2N分频,通常是由模N计数器实现一个占空比为1:1的2N分频器,分频输出信号在计数器的值达到模N时自动使其取反。 (2)程序设计

20、 首先,打开程序,进入MAX+Plus II的开发环境,然后点击File菜单出现下拉菜单,如图3-1。然后点击新建选项“NEW”出现图3-2所示文件类型选择界面。 图3-1 文件选项下拉菜单 选择第三项,点击OK,就可新建一个文本文件,如图3-3所示。然后保存文件,首先选择需要保存的目录,之后为文件重命名,后缀为.vhd,并在下方下拉菜单中选择.vhd,最后单击OK即可保存文件。注意:文件名与实体名应一致! 图3-2 文件类型选择菜单 图3-3 文本编辑界面 文件保存成功后,就开始在此界面编辑VHDL程序,如图3-4所示。下面就程序的主要部分进行分析:

21、 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; 以上四个语句是VHDL语言的库和程序包的声明。库的声明格式为: LIBRARY 库名; 程序包的声明格式为:USE LIBRARY 库名.程序包名.项目名; 库是存储和放置可编译设计单元的地方,程序包包含的资源主要有:常数说明、数据类型说明、元件语句定义、子程序定义和其他说明。这些资源对引用它的设计单元都是可见的。 entity fenpi

22、n is generic(n:integer:=1 ); port(clkin1:in std_logic; clkout:out std_logic; res:in std_logic ); end entity fenpin; 这部分是分频模块的实体声明部分,用来描述该实体与外部电路的接口。clkin是外部时钟源的输入端口,clkout是分频后的信号输出端口,res是复位按键信号输入。generic语句是类属参数传递语句,它的作用是在不同层次设计模块之间传递信息和参数。在本段程序中,修改n的值即可改变分频器的分

23、频数[8]。 architecture a of fenpin is signal clkq:std_logic:='0'; signal leijia:std_logic_vector(30 downto 0):=(others=>'0'); begin process(clkin1,res) begin if res='0' then leijia<=(others=>'0'); clkq<='0'; else if(clkin1'event and clkin1='1')then if(leijia=n-1) then

24、 leijia<=(others=>'0'); clkq<=not clkq; else leijia<=leijia+1; end if; end if; end if; end process; clkout<=clkq; end architecture a; 这部分是分频模块的结构体说明部分,放在实体说明后面,它的功能是描述设计实体的结构或行为,从功能上对实体进行描述。在该部分中,结构体的描述方式为“行为描述”,并且定义了两个信号,一个是“leijia”信号,用来对外部时钟的脉冲进行计数,一个是“clkq”,因为

25、输出信号“clkout”不能进行运算操作,所以它起到了运算并存储中间数据的作用。当计数达到N-1时,通过语句“clkq<=not clkq;”使其状态反转,再将其值赋给clkout。这样就实现了分频的功能。程序编写完成后就可以编译程序[9]。在此之前需要进行一项设置:将工程设置为当前工程,如图3-5所示。 图3-4 分频器程序编辑界面 图3-5 工程设置 然后就可以对写好的程序进行编译,点击MAX plus II中的Compiler选项,出现编译窗口,再点击OK就可对程序进行编译。若程序无误,则出现图3-6所示编译成功的窗口,否则,显示图3-7所示窗口,根据提示信息改

26、正错误,保存后再重新编译,直至编译成功,显示图3-6所示界面。 图3-6 编译成功界面 图3-7 编译失败界面 (3)波形图文件 波形图文件的作用是观察设计的程序产生的时序图,让设计者直观地看出设计的程序是否满足设计的要求。首先,如图3-1点击File菜单,再点击New出现图3-2的界面,选择最后一项波形编辑文件单击OK出现图3-8所示界面。 图3-8 波形文件观察界面 单击鼠标右键,选择倒数第二项,出现图3-9的窗口,然后点击“List”按钮,左边窗口出现程序中的全部端口,需要观察哪个就选中该端口,在点击“=>”将其移动到右边窗口。

27、 图3-9 端口选择画面 单击ok出现图3-10的画面。选中输入信号clkin设置其时序图,点击图3-10中被圈出的那个图标,出现时序设置窗口,设置完成后单击OK[10]。保存设置后开始仿真。 图3-10 波形设置窗口 如图3-11所示,选择File菜单中的Simulator选项,弹出右边的编译窗口,单击Start开始仿真,完成后点击Open SCF选项。出现图3-12所示界面。观察生成的时序图是否与预期一致。若一致则说明程序完全符合要求,否则再重新修改、编译、仿真,直至时序图符合要求。 图3-11 仿真启动界面 图3-12 仿真时序图

28、从图3-12中可以直观地看出这是一个二分频的分频器,每当clkin的上升沿到来时,clkout的电平都会发生反转,另外,当复位信号res有效时,clkout的电平立即复位[11]。所以,可以得出本次设计符合预期要求这一结论。 3.2 按键去抖模块的设计 (1)原理 我们经常用到的按键大都是利用“弹性形变”的原理制作的开关,当按下或释放按钮时,由于机械触点发生的是弹性形变,它总是阻止触点的形态产生变化,从而产生一定的抖动,这个短暂的抖动使得按钮在吸合时不会瞬时稳定地连接,在断开时同样不会瞬间地分离,如图3-13所示。而按钮产生抖动时间的长短取决于它的机械性质,一般

29、为5ms~10ms[12]。按钮的抖动会让CPU无法判断按钮是否确实按下,从而产生一系列的误动作。为了确保CPU能时刻准确地判断按钮的状态,必须对按钮实施去抖措施。即CPU必须在键值稳定时才读取其状态,在抖动时不做任何处理。这种措施就是按键去抖。 有两种方式来消除按钮的抖动,即硬件去抖和软件去抖。当按键的数目较少时,适合使用硬件去抖,当按键数目较多时,软件去抖则更加方便。本课题使用的是软件消抖,即使用VHDL语言编写去抖程序,基本原理如下:事先规定,按键未按下时为高电平1,按键按下时为低电平0。键值扫描脉冲反复扫描按钮当前的状态,若检测到按钮当前的输入值为0时,延时5ms~10ms,再次检测

30、如果键值还是0,那么就认为有按键按下。反之则认为是抖动,程序不做任何处理,继续扫描按键状态。而延时的5ms~10ms这段时间间隙刚好好避开了按钮的抖动时间,达到了去抖的目的[13]。 图3-13 按键抖动示意图 (2)程序设计 如图3-1到3-5所示步骤新建一个文本编辑文件,保存后在其中编写去抖程序,完成后如图3-14所示。 图3-14 去抖程序编辑窗口 下面对去抖程序中去除抖动的进程进行分析: process(clk_200hz) variable count:integer range 0 to 3; variable count1:integer

31、 range 0 to 1; begin if clk_200hz'event and clk_200hz='1' then if anjian_in='0' then if count=2 then count:=0; anjian_out<='0'; else count:=count+1; end if; else count:=0; anjian_out<='1'; end if; end if; end process; 信号clk_200

32、hz是一个周期为5ms的脉冲信号,用这一信号来检测是否有键按下。变量count对脉冲进行计数。在clk_200hz信号的每个上升沿对按键的状态进行检测,当检测到按钮的键值为0时,即有键按下时,count加1[14]。当count的值达到2时,在clk_200hz的第三个脉冲上升沿到来时,若键值仍为0,则说明当前按钮按下的时间已过了10ms,确实有键按下,并非抖动,则令去抖模块的输出为低电平,否则将count清零并使输出为高电平。 (3)波形图文件 按照图3-8到图3-11所示步骤新建一个波形图文件,然后设置各项参数并保存。最后开始仿真,仿真时序图如图3-15所示。 图3-15

33、 为了方便理解,我引入了guancha_200hz这一输出信号,实际上它就是按键的扫描脉冲信号。再者,之所以该信号使用的是2分频,目的是为了方便观察。从图中可以直观地看出以下结论:当按键第一次按下时,保持的时间是两个周期,当第三个脉冲上升沿到来时,按键已恢复到高电平,所以算是抖动;当按键第二次按下时,由于持续的时间大于两个周期,所以在第三个周期的上升沿令输出值为零,直到检测到按键松开时,置位输出值[15]。而第三次按下表示按键时长时间按下,在这里,程序设置的是只做一次按键处理,即在anjian_in长时间处于低电平时,anjian_out始终是低电平,不会发生电平跳变。这样做的目的是使每次按

34、键时如果按键按下的时间比较长,分数只会增加一次,而不会连续自动地增加。这样做的目的是防止程序产生错误的判断从而导致发出指令出现错误。从而得出,该仿真图符合预期的设计要求。 3.3 译码显示模块 (1)数码管的选取 将多个发光二极管按照8字型拼接在一起,再在右下角加一个LED构成小数点,这样就构成了我们常用的八段数码管(LED Segment Displays)。它的引线在内部已经连接完成,而外部引脚连接的是它们的各个段以及公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8段,分别由字母a,b,c,d,e,f,g,dp来表示。数码管有共阴和共阳两种,在功能上二者没什么

35、区别,只是为了增加它的使用范围才设计这两种。本设计中选用的是共阴8段数码管,BCD显示字符真值表见表3-1,根据真值表就可让数码管显示0-9十个数字。 表3-1 共阴数码管真值表 十进制数 hgfedcba 显示字符 十六进制数 0 01111110 0 7E 1 00110000 1 30 2 01101101 2 6D 3 01111001 3 79 4 00110011 4 33 5 01011011 5 5B 6 01011111 6 5F 7 01110000 7 70 8 01111111 8

36、7F 9 01111011 9 7B (2)程序设计 以下两个进程是两位数记分板的编码译码显示进程: xianshiled1:process(leda1) begin case leda1 is when 0 => led1<=B"1111110"; when 1 => led1<=B"0110000"; when 2 => led1<=B"1101101"; when 3 => led1<=B"1111001"; when 4 => led1<=B"0110011";

37、 when 5 => led1<=B"1011011"; when 6 => led1<=B"1011111"; when 7 => led1<=B"1110000"; when 8 => led1<=B"1111111"; when 9 => led1<=B"1111011"; when others => led1<=B"0000000"; end case; end process; xianshiled0:process(leda0) begin case leda0 is wh

38、en 0 => led0<=B"1111110"; when 1 => led0<=B"0110000"; when 2 => led0<=B"1101101"; when 3 => led0<=B"1111001"; when 4 => led0<=B"0110011"; when 5 => led0<=B"1011011"; when 6 => led0<=B"1011111"; when 7 => led0<=B"1110000"; when 8 => led0<=B"1111111"; when 9 => led0<=B"11110

39、11"; when others => led0<=B"0000000"; end case; end process; 这两个进程是译码并显示两位分数的进程。信号leda1与leda0是分数显示的编码信号,当加分、减分、清零按键按下时,这两个信号的值在0-9之间循环的增加、减少、归零。这两个信号的变化触发相应的进程执行相应的译码程序,令数码管显示当前leda1或leda0的值,如图3.16所示。 图3-16 数码管显示时序图 4 系统组态及调试 4.1 系统组态 系统综合模块图如图4.1所示,左边是信号输入引脚,从上到下依次是加分按键、减分按键、复位按

40、键和清零按键;右边是信号输出引脚,从上至下依次是加分和减分按键信号观察引脚、十位数数码管驱动总线端口、个位数数码管驱动总线端口、蜂鸣器驱动端口、按键扫描脉冲观察端口。由于是软件仿真,所以加入一些辅助输出端口,这有助于后期波形分析及程序修改。 图4-1 系统综合模块图 4.2 顶层程序设计及调试 首先,新建一个文本编辑文件,步骤参照图3.1到图3.5,然后在其中编写顶层程序,如图4.2所示。 图4-2 程序编写界面 使用VHDL语言进行多层次设计时,一个很大的难点就是元件例化语句的使用。所谓元件例化语句就是首先把一个现成的设计实体包装成一个元件,然后在其他设计实体

41、中调用该元件连接电路[16]。下面借具体程序进行详细介绍: component qudou is ----去抖元件定义 port(anjian_in:in std_logic; anjian_out:out std_logic; clkin:in std_logic; res:in std_logic ); end component; component fenpin is ----分频元件定义 generic(n:integer:=1); por

42、t(clkin1:in std_logic; clkout:out std_logic; res:in std_logic ); end component; 以上是去抖和分频两个元件的定义,其格式为: COMPONENT 元件名 IS GENERIC(类属表); PORT(端口名表); END COMPONENT 元件名; 元件定义完成以后,接着就是在程序中调用元件。详细见下面程序: fenpin0: fenpin generic map(1) port map( clkin1=>clkin,

43、 clkout=>guancha_200hzq, res=>res ); 该元件例化语句是扫描按键状态的脉冲调用分频模块,产生的脉冲供去抖模块使用以得出正确的键值。 jiafen0: qudou port map (anjian_in=>jiafen, anjian_out=>jiafen_out, clkin=>clkin, res=>res ); jianfen0: qudou port map (anjian_in=>jianfen, anjian_out=>jianfen_

44、out, clkin=>clkin, res=>res ); qingling0:qudou port map (anjian_in=>qingling, anjian_out=>qingling_out, clkin=>clkin, res=>res ); 这三个元件例化语句是加分、减分、分数清零三个按键调用去抖模块,为分数显示提供正确的键值。元件例化语句的格式为: 例化名:元件名 PORT MAP([端口名=>]连接端口名,…); PORT MAP语句是端口进行映射的关键字,端口映射有两种该方法,第一种是位置映射

45、只需把名所对应的各个端口的连接信号或端口名写在括号中,同时要注意端口的连接顺序。第二种是名字关联方式:确定连接情况后,把元件中的端口名写在前面,通过连接符号“=>”和外接的端口或信号名连在一起[17]。 顶层程序编写完成后开始编译查错,结果如图4.3所示,提示编译成功。 图4-3 顶层程序编译界面 然后依照图3.11到图3.14的步骤新建一个波形图文件,添加需要观察的端口,设置好相关参数后保存,之后开始仿真。结果如图4.4所示。 图4-4 系统波形图 从图中可以看出,个端口的时序图基本都符合最初的设计要求:当按一次加分键led0就从0到9依次变化,led0每到9一次,l

46、ed1的值就从0到9依次变化,同时led0又从0开始变化。当清零按键按下时,分数清零,同时蜂鸣器在这段时间由一串脉冲控制发出声音。当减分按键按下时,数码管的变化与加分按键按下时变化相反,直至分数为0。唯一出现异常的地方就是36us到40us这段时间,在此段时间内,由于加分按键按下的时间比较长,led0的显示值一直在增加[18]。细节图如图4.5所示。 图4-5 波形细节图 经分析可知,程序设置的是:在检测脉冲的每个上升沿对按键状态进行检测,若按键按下,则分数就相应的加1或减1。这样就出现一个问题,如果按键持续的时间大于检测脉冲,那么在这段时间内肯定包含多个上升沿,这就导致在这些上升沿

47、到来时分时就会发生多次变化。如果将检测脉冲的周期加长或许可以解决问题,但是很显然不能这么做。因为这样的话就不能及时的检测出按键的状态。如果不延长检测脉冲的周期,由于人的反应时间的限制,每次按键持续的时间大约在0.5s到1s,二按键扫描脉冲的周期为5ms,这样就导致每次按键分数都会发生连续的变化。很显然这样的设计就是去了实用的价值。 通过反复观察时序图以及相关部分的程序,终于想出了一个方案可以很好地解决这一问题,即引入一个变量add在按键按下的时间内对分数的变化次数进行计数。如图4.6是原程序(右)与修改后程序(左)相互对比图。下面就加分按键的情况对修改后的程序进行分析:若分数没变,则add的

48、值加1,然后分数变化一次,之后add的值再加1。当上升沿到来时只需判断add的值即可,若add大于1则说明在该按键按下时,分数已经变化了,就保持其值,直到下一次按键按下。经过编译仿真,表明此方法确实可行,如图4.7所示。从图中可以看出,不管按键按下多久,在此时间内分数只变化一次。 图4-6 原、现程序对比图 图4-7 修改后的波形图 结论 EDA技术是目前最热门的技术之一,它的优越性使得其在市场上所占的份额越来越大。现今,三足鼎立之势已在半导体市场悄然形成,他们分别是FPGA,ASIC和ASSP。通过分析市场上的数据我们发现,FPGA正在逐步蚕食ASIC和ASSP的市场份额

49、并且蚕食的速度呈增长的趋势。在全球市场中,对FPGA的技术与市场仍然拥有绝对垄断地位的公司有两家,他们分别是Xilinx和Altera。全球大约90%的市场份额被他们共同占有。这两家公司拥有的专利加起来共有超过6000项,并且这种垄断的趋势继续在上升。伴随半导体工艺技术不断进步,设计FPGA器件的技术已经取得了飞速的发展及突破。通过FPGA器件的发展历程,我们可以定论,FPGA今后将会向以下几个方向靠拢: • 高密度、高速度、宽频带、高保密; • 低电压、低功耗、低成本、低价格; • IP软/硬核复用、系统集成; • 动态可重构以及单片集群; • 紧密结合应用需求,多元化发展。

50、通过本次设计,不仅让我深深体会到利用EDA设计产品的方便性和快速性,还让我学到了以下知识: (1) 了解到EDA技术的背景、发展前景、以及研究该课题的价值和意义。 (2) 学会了利用EDA开发工具MAX+Plus II结合硬件描述语言VHDL进行电子线路的设计。 (3) 学会了如何观察时序图并根据时序图发现问题、解决问题。 参考文献 [1] David R.Coehl.The VHDL handbook[J].Kluwer Academic Pubishers,2006(15):11-50. [2] 齐洪喜.陆颖.VHDL电路设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服