




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于VHDL的数字跑表技术摘 要跑表用于测量较短且较精确的时间,在体育竞赛中有着广泛的应用。本文分析了体育用跑表的设计原理及设计的具体过程。将跑表分为五个模块:键输入模块、分频模块、控制模块、计时模块和显示模块。跑表由各个模块通过合理的连接关系来实现,各模块及跑表功能最终都由VHDL语言来描述。借助Altera公司开发的EDA工具MAX+plus 作为编译、仿真平台,并利用EPF10K10LC84-4器件完成跑表的CPLD实现。关键词:跑表;VHDL语言;MAX+plus ;CPLDABSTRACTStopwatch, which is used to measure shorter and more accurate time, has a wide application in sport game. This paper introduces the design principles and design process of the stopwatch. The stopwatch consists of five modules, that is, key input module, sub-frequency module, control module, timing module and display module. The stopwatch is achieved by connecting each module. The function of each module and the stopwatch is described through VHDL language. With the help of Alteras MAX + plus software simulation platform, an EDA developing tool used to compile and simulate, EPF10K10LC84-4 device is used to complete the CPLD implementation of the stopwatch.Keywords: Stopwatch; VHDL language; MAX + plus ; CPLD目 录1. 绪 论41.1 引 言41.2 CPLD概述42. 实验的软件环境52.1 MAX+plus软件52.1.2 MAX+plus简介52.1.2 MAX+plus的设计环境62.1.3 MAX+plus设计流程82.2 VHDL语言82.2.1 VHDL语言概要82.2.2 VHDL程序的结构103. 跑表的设计113.1跑表的功能描述113.2顶层设计的VHDL源代码133.2.1顶层实体设计及VHDL源代码133.2.2顶层结构体的设计及VHDL源代码143.3跑表各个模块的分析及其VHDL源代码203.3.1键输入模块203.3.2时钟分频模块223.3.3控制模块263.3.4跑表计时模块283.3.5跑表显示模块343.4 仿真结果424. 结 语46致 谢47参考文献48第一章 绪 论1.1 引 言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。所以,要制作一个定时系统。随时提醒这些容易忘记时间的人。 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字跑表及扩大其应用,有着非常现实的意义。 通过数字跑表的设计,巩固计算机组成原理课程,理论联系实际,提高分析、解决计算机技术的实际问题的独立工作能力;掌握用VHDL语言编制简单的小型模块,学会跑表的设计方法,熟悉集成电路的使用方法,初步掌握数字跑表的设计方法并实现时间的显示和校对,并能对数字跑表进行扩展。数字跑表是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 数字跑表从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。因此,此次设计与制作数字跑表就是为了了解跑表的原理,从而学会制作数字跑表.而且通过跑表的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字跑表包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。1.2 CPLD概述CPLD ( Complex Programmable Logic Device ) 复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。CPLD主要是由可编程逻辑宏单元 ( MC,Macro Cell ) 围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产 ( 一般在10,000件以下 ) 之中。几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。CPLD器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。1.3 课题设计内容应用VHDL语言设计数字系统,很多设计工作可以在计算机上完成,从而缩短了系统的开发时间,提高了工作效率。本文介绍一种以FPGA为核心,以VHDL为开发工具的数字秒表,并给出源程序和仿真结果。系统功能要求:(1) 具有时钟秒表系统功能要求显示功能,用4 个数码管分别显示秒和百分秒;(2) 具有3 种功能状态:系统时间运行状态,系统时间至零状态,时钟正常显示状态,通过输入控制信号可以使系统在这3 个状态之间切换,使数码管显示相应状态的时间;(3) 开启时间设定、关闭时间设定可通过控制信号中的时间调节来设置,在秒设置方面每按一下,秒就会自动加1 ,采用60 进制计数,当计数到59 时又会恢复为00 ;百分秒设置方面每按一下,百分秒会自动加1 ,采用100 进制计数,当计数到99 时,向上进位并恢复00 。系统时间可以同单独的至零信号,将数码管显示时间直接恢复到00. 00状态。本系统采用的FPGA 芯片为Altera 公司的EPF10K10LC84-4,用VHDL 和MAX+plus 软件工具开发,设计输入完成后,进行整体的编译和逻辑仿真,然后进行转换、延时仿真生成配置文件,最后下载至FPGA 器件,完成结果功能配置,实现其硬件功能。第二章 实验的软件环境Altera的器件能达到最高的性能和集成度,不仅仅是因为它采用了先进的工艺和新的逻辑结构,还在于它提供了现代化的设计工具。MAX+plus可编程逻辑开发软件提供了一种与结构无关的设计环境,它使Altera通用PLD系列设计者能方便地进行设计输入、快速处理和器件编程。2.1 EDA的介绍 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术,它与电子技术、微电子技术的发展密切相关,吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,是20世纪90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术就是以计算机为工具,在EDA软件平台上,根据硬件描述语言VHDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局、仿真。直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。随着大规模集成电路技术和计算机技术的不断发展,在涉及工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升,电子类的高新技术项目的开发也日益依赖于EDA技术的应用。即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅度提高。所以EDA技术将成为电子设计领域中的极其重要的组成部分。EDA技术的发展始于70年代,至今经历了三个阶段。电子线路的CAD(计算机辅助设计)是EDA发展的初级阶段,是高级EDA系统的重要组成部分。它利用计算机的图形编辑、分析和存储等能力,协助工程师设计电子系统的电路图、印刷电路板图:采用二维图形编辑与分析,主要解决电子线路设计后期的大量重复性工作,可以减少设计人员的烦琐重复劳动但自动化程度低,需要人工干预整个设计过程。这类专用软件大多数以机为工作平台,易于学用,设计中小规模电子系统可靠有效,现仍有很多这类专用软件被广泛应用于工程设计。80年代初期,EDA技术开始设计过程的分析,推出了以仿真(逻辑模拟、定时分析和故障仿真)和自动布局与布线为核心的EDA产品,这一阶段的EDA己把一系列计算机学科的最新成果引入电子设计,形成了CAE计算机辅工程。其主要特征是具备了自动布局布线和电路的计算机仿真、分析和验证功能。其作用已不仅仅是辅助设计,而且可以代替人进行某种思维。CAE这种以原理图为基础的EDA系统,虽然直观,且易于理解,但对复杂的电子设计很难达到要求,也不宜于设计的优化。所以,90年代出现了以自动综合器和硬件描述语言为基础,全面支持电子设计自动化的ESDA(电子系统设计自动化),既高级EDA阶段,也就是目前所说的EDA。过去传统的电子系统电子产品的设计方法是采用自底而上(Bottom Up)的方式,设计者先对系统结构分块,直接进行电路级的设计。这种设计方法使设计者不能预测下一阶段的问题,而且每一阶段是否存在问题,往往在系统整机调试时才确定,也很难通过局部电路的调整使整个系统达到既定的功能和指标,不能保证一举成功。EDA技术高级阶段采用二种新的设计概念,自顶而下(Top Down)的设计方式和并行工程的设计方法,设计者的精力主要集中在所要电子产品的准确定义上,EDA系统去完成电子产品的系统级至物理级的设计。此阶段EDA技术的主要特征是支持高级语言对系统进行描述,高层次综合理论得到了巨大的发展,进行系统级的仿真和综合。2.1.1 基于EDA工具的FPGA/CPLD开发流程 FPGA/CPLD的开发流程:设计开始首先须利用EDA工具的文本或图形编辑器将设计者的设计意图用文本方式(如VHDL)或图形方式(原理图、状态图等)表达出来。完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。设计的第二步是综合,将软件设计与硬件的可实现性挂钩,这是将软件转化为硬件电路的关键步骤。综合器对源文件的综合是针对某一FPGA/CPLD供应商的产品系列的,因此,综合后的结果具有硬件可实现性。综合后,可利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。功能仿真仅对设计描述的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求,仿真过程不涉及具体器件的硬件特性,如延迟特性。综合通过后必须利用FPGA/CPLD布局/布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。适配完成后,EDA软件将产生针对此项设计的多项结果;1适配报告:内容包括芯片内资源分配与利用、引脚锁定、设计的布尔方程描述情况等;2时序仿真用网表文件;3下载文件,如JED或POF文件;4适配错误报告等。时序仿真是接近真实器件运行的仿真,仿真过程中已将器件硬件特性考虑进去了,因此仿真精度要高得多。时序仿真的网表文件中包含了较为精确的延迟信息。如果以上的所有过程,包括编译、综合、布线/适配和行为仿真、功能仿真、时序仿真都没有发现问题,即满足原设计的要求,就可以将适配器产生的配置/下载文件通过FPGA/CPLD编程器或下载电缆载入目标芯片FPGA或CPLD中,然后进入最后一个步骤:硬件仿真或测试,以便在更真实的环境中检验设计的运行情况。这里所谓的硬件仿真,是针对ASIC设计而言的。在ASIC设计中,比较常用的方法是利用FPGA对系统的设计进行功能测试,通过后在将其VHDL设计以ASIC形式实现;而硬件测试则是针对FPGA/CPLD直接用于电路系统的检测而言的。基于EDA工具的FPGA/CPLD开发流程图2-1如下:图2.1 基于EDA工具的FPGA/CPLD开发流程图2.1.2 EDA的应用EDA在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。在教学方面,几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本概念和基本原理、掌握用HDL语言编写规范、掌握逻辑综合的理论和算法、使用EDA工具进行电子电路课程的实验并从事简单系统的设计。一般学习电路仿真工具(如EWB、PSPICE)和PLD开发工具(如Altera/Xilinx的器件结构及开发系统),为今后工作打下基础。科研方面主要利用电路仿真工具(EWB或PSPICE)进行电路设计与仿真;利用虚拟仪器进行产品测试;将CPLD/FPGA器件实际应用到仪器设备中;从事PCB设计和ASIC设计等。2.1.3 EDA技术的发展趋势从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员研发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放 。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具有各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。EDA市场日趋成熟,但我国的研发水平沿很有限,需迎头赶上。2.2 MAX+plus软件2.2.2 MAX+plus简介MAX+plus全称为Multiple Array Matrix AND Programmable Logic User System,是美国Altera公司开发的EDA软件平台,用于该公司可编程逻辑器件的设计开发,与用户特定的设计要求极易适配,目前已有10.0版本。MAX+plus软件主要由层次显示器、信息处理器、设计输入编辑器、设计编译器、设计校验器和器件编程器构成了一个完整独立的EDA设计平台(见图2.2所示 )。MAX+plus软件支持Altera公司除APEX20K系列之外所有系列的FPGA/CPLD的开发,设计文件输入灵活方便,处理迅速,可直接校验和器件编程,是一个真正与结构无关的全集成化的设计环境。设计输入编辑器设计编辑器设计校验器器件编程器MAX+plus信息处理和层次显示图2.2 MAX+plus组成MAX+plus软件平台提供了强大的库功能,有丰富的基本符号库和已建好的宏库供用户调用。MAX+plus软件支持硬件描述语言VHDL、Verilog HDL和Altera公司自己的硬件描述语言AHDL。MAX+plus有3种版本:商业版、基础版和学生版。推荐使用PC机配置:奔腾以上微机,256MB以上内存,500M以上硬盘空间。2.2.2 MAX+plus的设计环境图2.3所示为MAX+plus的激活的管理器界面,项目设计的各项操作都是在MAX+plus管理器中进行的,所有的设计都是从此界面开始的。图2.3 MAX+plus管理器窗口MAX+plus层次显示器用来显示当前项目使用和产生的所有文件,并以层次结构的方式展现出来,如图2.4所示,用鼠标点击层次显示器窗口中的任何一项,则可看到相应的详细信息。MAX+plus的信息处理器用来提示当前项目编译或仿真后的错误和信息。如图2.54所示。MAX+plus的图形编辑器、符号编辑器、文本编辑器、波形编辑器是用来输入或编辑用户的设计文件。MAX+plus的编译器是MAX+plus软件的核心,功能非常强大,从网表提取到产生编程文件直至芯片下载一气呵成,并能产生MAX+plus或第3方EDA工具需要的一系列文件和报告,如图2.6所示。图2.4 MAX+plus层次显示器窗口MAX+plus的仿真器可以对编译完成后的项目进行功能仿真和时序仿真。 图2.5 MAX+plus信息处理窗口MAX+plus定时分析器,提供了3种分析模式:(1) 延迟矩阵分析模式。分析多个源节点和目标节点之间的传播延迟路径。(2) 建立/保持时间分析模式。计算从输入引脚到触发器、寄存器和异步RAM的信号输入所需的最小建立时间和保持时间。(3) 时序逻辑电路性能分析模式。分析时序电路的性能,包括限制性能上有限制的延迟,最小的时钟周期和最高的电路工作频率。MAX+plus编译器第三方EDA设计文件(.edf,.sch,.xnf)映射文件(.imf)MAX+plus设计文件(.gdf,.tdf,.vhd)指定和配置信息 (.acf)第三方EDA仿真和定时文件(.edo,vo,vho,sdo)功能仿真网表文件(.snf)定时仿真网表文件(.snf)编程文件(.pof,.sof,.jed)图2.6 MAX+plus编译器MAX+plus的编程器可以将编译器生成的目标文件(*.pof,*.sof),编程下载到可编程逻辑器件中去,还可以对器件进行校验、检查、空白片检查和功能测试。2.2.3 MAX+plus设计流程MAX+plus的设计流程如图2.7所示,主要由设计输入、设计编译、设计验证(包括功能仿真和时序仿真)、器件编程等步骤完成。2.3 VHDL语言2.3.1 VHDL语言概要VHDL是Very High-Speed Integrated Circuit Hardware Description Language的缩写,即超高速集成电路(VHSIC)硬件描述语言。它是美国国防部在80年代初研究VHSIC计划时组织开发的。由于当时工业界的迫切需要,IEEE标准化委员会于1987年将其确定为标准硬件描述语言,即IEEE 10761987标准。1993年,又对此标准作了进一步修定,推出新标准,即IEEE 10761993标准。设计要求设计编译功能仿真验证 时序仿真验证设计输入器件编程 在线测试投产设计修改图2.7 MAX+plus软件工作流程VHDL的主要优点是:(1) 覆盖面广,描述能力强,是一个多层次的硬件描述语言。(2) VHDL有良好的可读性,它可以被计算机接受,也容易被读者理解。(3) VHDL本身的生命周期长,因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。(4) 支持大规模设计的分解和已有设计的再利用。(5) VHDL已成为IEEE承认的一个工业标准,事实上已成为通用硬件描述语言。(6) 以硬件描述语言VHDL从事设计工作,不必考虑线路布局问题,降低设计的复杂度。(7) VHDL更接近于算法的推演,而不必关系如何用逻辑电路实现这种算法的过程(8) 硬件描述语言VHDL没有固定的目标器件,从而能在多种厂商的器件之间相互通用,具备很好的弹性和可移植性。2.3.2 VHDL程序的结构 一、VHDL程序的基本单元VHDL程序的结构由结构体、实体、配置(CONFIGURATION)、程序包(PACKAGES)和库(LIBRARIES)组成。在一个具体的应用程序中,最基本的部分为实体和结构体。在应用程序中,实体是唯一的,结构体可以具有多个。在具有多个结构体的情况下,具体使用哪一个结构体需要指定。配置可以用于描述实体与结构体的连接关系,设计者可以利用配置为实体选择不同的结构体。二、VHDL程序的结构体VHDL语言结构体的完整格式如下:ARCHITECTURE 结构体 OF 实体名 IS定义语句BEGIN并行语句1;并行语句2;END ARCHITECTURE 结构体名 ;三、VHDL程序的实体VHDL中实体的完整格式如下:ENTITY 实体名 IS GENERIC (类属表); PORT (端口表); BEGIN 实体语句部分;END ENTITY 实体名; 实体可以用来给所设计的系统或者电路命名,该所设计的系统或者电路定义一个与其他模块进行通信的接口。它描述了一个系统或者电路的外观图。实体中的类属(GENERIC)和端口说明(PORT)用来说明所设计的系统或者电路与其它模块通信的对象。类属说明提供静态信息通道,适用于规定端口的大小、实体中包括元件的多少以及时间特性等。端口说明是对外引脚的描述,它包括引脚的名称、信号的传输方向和传输的数据类型。实体语句部分定义实体接口中的公共信息。第三章 跑表的设计3.1跑表的功能描述这里将要讨论的跑表经常应用在体育竞赛中和一些要求准确计时的领域。它的主要功能描述如下:(1) 要求设置复位开关。当按下复位开关时,跑表清零并做好计时准备。在任何情况下只要按下复位开关,跑表都要无条件地进行复位操作,即使是在计时过程中也要无条件地进行清零操作。(2) 要求设置启/停开关。实际上启/停开关的使用方法与传统的机械式计时器完全相同:当按下启/停开关后,将启动跑表并开始计时;当再按一下启/停开关时,将终止跑表的计时操作。(3) 要求计时精度大于0.01秒。在体育竞赛中运动员的成绩计时是以0.01秒为最小单位的,因此要求设计的计时器能够显示0.01秒的时间。(4) 要求跑表的最长计时时间为24小时。在现今的各项体育竞赛中,最长时间为12小时的跑表已经足够了。(5) 要求有系统电源复位电路的电源复位信号。根据上面跑表的功能描述,不难给出该跑表的输入和输出电路。首先来描述一下跑表的输入电路:(1) 首先要按下复位开关reset进行跑表的服务清零操作,使跑表做好计时准备。(2) 当做好计时准备后按下跑表的启/停开关on_off,跑表开始计时,跑表的最小计时单位是0.01秒;计时完毕后再按一下跑表的启/停开关on_off,将终止跑表的计时操作。(3) 由于跑表的计时精度为0.01秒,所以提供给跑表内部定时的时钟信号频率应该大于100Hz。这里取1000Hz的时钟输入信号clk。(4) 当对跑表进行更换电源操作时,由系统电源复位电路提供给该系统一个电源复位信号sysreset。对于该跑表的设计中,系统电源的复位电路是外加的,并不包含在设计当中。接下来来描述跑表的输出电路:(1) 由于跑表的最长计时时间为24小时,因此需要一个8位的显示器。这样,在设计中就需要一个八条输出线,用来选通指定的一位LED七段显示数码管。(2) 显示器的每一位都采用LED七段显示数码管进行显示,因此输出电路要有一个七条输出线连接在LED七段显示数码管。综上所述,可以确定跑表的基本方案如下:(1) 当对跑表进行更换电源操作时,由系统电源复位电路提供给跑表的电源复位信号sysreset来控制对跑表的复位操作,即使跑表清零。(2) 计时操作过程如下:l 首先按下复位开关reset进行跑表的复位清零操作,使跑表做好计时准备。l 按下跑表的启/停开关on_off,跑表计时开始。这时,通过输出线choose(7 downto 0)来选择指定的一位LED七段显示数码管。其中,choose(7 downto 0)以100Hz的频率使8个LED七段显示数码管按次序依次点亮,由于频率很高,所以可以得到一个无闪烁的稳定的跑表计时输出。l 计时完毕后,按下跑表的启/停开关on_off,将终止跑表的计时操作。l 然后再次按下复位开关reset进行跑表的复位清零操作,为跑表的下次计时做准备。(3) 跑表进行计时操作的计时时钟是由外部时钟信号clk提供的。根据上述考虑,可以画出跑表系统的结构框图,如图3-1所示,它说明了整个系统的外部输入和输出情况。图3.1 跑表系统的结构框图3.2顶层设计的VHDL源代码3.2.1顶层实体设计及VHDL源代码在任何自顶向下的VHDL设计描述中,首先要做的第一步就是描述顶层信号的接口,正如图3-1所示。系统的接口包括输入信号、输出信号、一些输入输出双向信号以及需要传输的某些参数。需要描述的不仅是信号的方向,还包括信号的类型。在上面的描述中,实际上已经规定了跑表的输入输出信号:(1) 输入信号l 复位开关信号reset;l 启停开关信号on_off;l 系统电源复位信号sysreset;l 外部时钟信号clk。(2) 输出信号l LED七段显示数码管的选通信号choose(7 downto 0);l LED七段显示数码管的输出信号segment(6 downto 0)。我们知道,VHDL的系统接口是由实体说明来描述的。下面是用图3-1所示的结构框图生成的跑表顶层实体说明的VHDL源代码。源代码1library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity stopwatch is port ( reset1 : in std_logic; on_off : in std_logic; sysreset : in std_logic; clk : in std_logic; choose : out std_logic_vector(7 downto 0); segment : out std_logic_vector(6 downto 0);end stopwatch;3.2.2顶层结构体的设计及VHDL源代码在任何自顶向下的VHDL设计描述中,设计人员常常将整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。现在我们就来根据前面描述的结构功能,确定使用哪些模块以及这些模块之间的关系。由于跑表的复位开关和启/停开关采用按键的输入方式,其产生时刻和持续时间的长短是随机不定的,且存在因开关簧片反弹引起的电平抖动现象,因此必须在每个开关后面安排一个消抖和同步化电路模块,以保证系统能捕捉到输入脉冲,并保证每按一键,只形成一个宽度为系统时钟周期的脉冲。同步电路的方案很多,图3-2是一种既有消抖功能又有同步功能的电路,应用的非常广泛。图3.2 一种常用的消抖同步电路由于外部时钟信号clk的频率为1000Hz,而实际需要的内部计时时钟频率为100Hz和提供给消抖同步电路的频率为25Hz,因此需要一个时钟分频电路。通过分频电路,由外部时钟信号clk产生频率分别为100Hz和25Hz的时钟信号。跑表的计时操作是在复位开关信号无效并且两次启/停开关信号有效之间才能够进行,因此需要一个电路来产生一个使能信号。只有当使能信号有效时,才能够进行跑表的定时计数操作。当跑表开始正常计时的时候,需要进行定时计数操作,由于时间显示器是由8个LED七段显示数码管组成的,因此需要产生8位的计时信息:小时十位信号、小时个位信号、分十位信号、分个位信号、秒十位信号、秒个位信号、0.1秒位信号和0.01秒位信号。这个定时计数操作可以有一个定时计数器来完成,定时计数器的功能就是用来产生8位计时信息。跑表还要将定时计数的结果显示出来,为了节省资源,我们采用循环点亮LED七段显示数码管的方法来显示跑表的计时输出。我们通过信号choose(7 downtown 0)来进行8个LED七段显示数码管的选择,从而将输出信号segment(6 downtown 0)送到相应的LED七段显示数码管上以完成跑表计时的显示。跑表显示的功能可以通过一个单独的电路来实现。通过上面的说明,不难看出我们可以将跑表系统划分为5个模块:键输入模块、时钟分频模块、控制模块、跑表计时模块、和显示模块。这5个模块的连接关系如图3-3所示。图3.3 跑表各个模块之间的连接关系下面我们就根据图3-3所示的各个模块的连接关系来确定各个模块的输入信号和输出信号。(1) 键输入模块输入信号l 复位开关信号reset;l 启/停开关信号on_off;l 外部时钟信号clk;l 来消除抖动的时钟信号clk1,由时钟分频模块提供。输出信号l 去除抖动后的复位信号reset0;l 去除抖动后的启/停信号on_off0。(2) 时钟分频模块输入信号l 系统电源复位信号sysreset;l 外部时钟信号clk。输出信号l 用来消除抖动的时钟信号clk1;l 跑表的内部计时时钟信号clk0。(3) 控制模块输入信号 l 去除抖动后的复位信号reset0;l 去除抖动后的启/停信号on_off0;l 系统电源复位信号sysreset;l 跑表的内部计时时钟信号clk0。输出信号l 跑表定时计数的使能信号enable。(4) 跑表计时模块输入信号l 去除抖动后的复位信号reset0;l 系统电源复位信号sysreset;l 跑表的内部计时时钟信号clk0;l 跑表定时计数的使能信号enable。输出信号l 小时十位信号hr10;l 小时个位信号hr;l 分十位信号min10;l 分个位信号min;l 秒十位信号sec10;l 秒个位信号sec;l 0.1秒位信号sec01;l 0.01秒位信号sec001。(5) 跑表显示模块输入信号l 系统电源复位信号sysreset;l 外部时钟信号clk;l 小时十位信号hr10;l 小时个位信号hr;l 分十位信号min10;l 分个位信号min;l 秒十位信号sec10;l 秒个位信号sec;l 0.1秒位信号sec01;l 0.01秒位信号sec001。输出信号l LED七段显示数码管的选通信号choose;l LED七段显示数码管的输出信号segment。下面根据图3-3所示的各个模块的连接关系,给出顶层结构体的VHDL源代码。其中5个模块以元件的形式给出,首先在结构体的说明部分进行元件说明,然后在结构体中进行例化调用。同时在结构体的说明部分还定义了许多中间信号,主要用来在模块之间传递信息。源代码2 architecture structure of stopwatch is component keyin port ( reset : in std_logic; on_off : in std_logic; clk : in std_logic; clk1 : in std_logic; reset0 : out std_logic;on_off0 : out std_logic);end component;component clk_div port ( sysreset : in std_logic; clk : in std_logic; clk0 :out std_logic; clk1 : out std_logic); end component; component control port ( sysreset : in std_logic; reset0 : in std_logic; on_off0 : in std_logic; clk0 : in std_logic; enable : out std_logic); end component; component time_counter port ( sysreset : in std_logic; reset0 : in std_logic; enable : in std_logic; clk0 : in std_logic; hr10 : out std_logic_vector(1 downto 0); hr : out std_logic_vector(3 downto 0); min10 : out std_logic_vector(2 downto 0); min : out std_logic_vector(3 downto 0); sec10 : out std_logic_vector(2 downto 0); sec : out std_logic_vector(3 downto 0); sec01 : out std_logic_vector(3 downto 0); sec001 : out std_logic_vector(3 downto 0); end component; component display port ( sysreset : in std_logic;clk : in std_logic;hr10 : out std_logic_vector(1 downto 0); hr : out std_logic_vector(3 downto 0); min10 : out std_logic_vector(2 downto 0); min : out std_logic_vector(3 downto 0); sec10 : out std_logic_vector(2 downto 0); sec : out std_logic_vector(3 downto 0); sec01 : out std_logic_vector(3 downto 0); sec001 : out std_logic_vector(3 downto 0);choose : out std_logic_vector(7 downto 0); segment : out std_logic_vector(6 downto 0); end component;signal reset0 : std_logic;signal on_off0 : std_logic;signal clk0 : std_logic;signal clk1 : std_logic;signal enable : std_logic;signal reset0 : std_logic;signal hr10 : std_logic_vector(1 downto 0);signal hr : std_logic_vector(3 downto 0);signal min10 : std_logic_vector(2 downto 0);signal min : std_logic_vector(3 downto 0);signal sec10 : std_logic_vector(2 downto 0);signal sec : std_logic_vector(3 downto 0);signal sec01 : std_logic_vector(3 downto 0);signal sec001 : std_logic_vector(3 downto 0);begin U0: keyin port map(reset1,on_off,clk,clk1,reset0,on_off0); U1: clk_div port map(sysreset,clk,clk0,clk1); U2: control port map(sysreset,reset0,on_off0,clk0,enable); U3: time_counter port map(sysreset,reset0,enable,clk0,hr10,hr,min10,min,sec10,sec,sec01,sec001); U4: display port map(sysreset,clk,hr10,hr,min10,min,sec10,sec,sec01,sec001,choose,segment);end structure;3.3跑表各个模块的分析及其VHDL源代码前面已经详细地讨论了跑表系统顶层的设计及其VHDL源代码,这里将重点介绍各个模块的实现及其VHDL源代码。跑表系统被划分为5个模块,而在顶层设计中是将各个模块作为元件来引用的,因此需要将各个模块设计成为独立实体的形式,这样它们就能作为元件被引用了。3.3.1键输入模块前面已经提到过,由于跑表的复位开关和启/停开关采用按键的输入方式,其产生时刻和持续时间的长短是随机不定的,且存在因开关簧片反弹引起的电平抖动现象,因此必须在每个开关后面加一个键输入模块。键输入模块的作用是保证系统能捕捉到输入脉冲,并保证每按一键,只形成一个宽度为模块时钟周期的脉冲。在数字系统中同步消抖电路的形式很多,应用的也十分广泛。前面已经介绍了一种既有消抖功能又有同步功能的电路,但是这个电路只适用于得到一个宽度较大的键输入脉冲。在跑表系统中,要求得到宽度为一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 流动摊位车出租合同范本
- 网络项目分包合同协议书
- 网络科技项目合作协议书
- 防水维修质保协议书范本
- 聘用检验工作人员协议书
- 珠宝行业合作合同协议书
- 矿山整体承包合同协议书
- 防水彩钢瓦采购合同范本
- 牙椅转让合同协议书模板
- 研发项目委托开发协议书
- 武进区横山桥高级中学申报四星级高中自评报告
- RB/T 228-2023食品微生物定量检测的测量不确定度评估指南
- 常见输血不良反应的诊断及处理精讲课件
- JG-T 225-2020 预应力混凝土用金属波纹管
- 2024年俄罗斯湿纸巾和湿巾行业应用与市场潜力评估
- 正规挖机安全协议责任书
- 重庆发展投资公司及所属子企业招聘笔试真题2022
- 全屋定制直播间话术
- HG-T20678-2023《化工设备衬里钢壳设计标准》
- 工程项目部安全生产治本攻坚三年行动实施方案
- 胎儿宫内窘迫的护理
评论
0/150
提交评论