基于VHDL的数字时钟设计和时序仿真.doc

上传人:一*** 文档编号:2768349 上传时间:2020-05-04 格式:DOC 页数:45 大小:9.45MB
返回 下载 相关 举报
基于VHDL的数字时钟设计和时序仿真.doc_第1页
第1页 / 共45页
基于VHDL的数字时钟设计和时序仿真.doc_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《基于VHDL的数字时钟设计和时序仿真.doc》由会员分享,可在线阅读,更多相关《基于VHDL的数字时钟设计和时序仿真.doc(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、毕业设计基于VHDL的数字时钟设计和时序仿真学生姓名: 学 院: 专 业: 指导教师: 年 月目 录1 引言12 设计概述23 开发工具简介43.1 VHDL语言简介43.1.1 VHDL发展史43.1.2 VHDL设计特点43.1.3 VHDL设计结构53.1.4 VHDL设计步骤63.2 Quartus II软件简介63.2.1 Quartus II软件介绍 63.2.2 Quartus II软件设计流程64 数字时钟的设计要求和原理84.1 设计要求84.2 设计原理85 数字时钟模块化设计105.1 分频模块115.2 计时模块135.2.1 秒计时模块135.2.2 分计时模块155

2、.2.3 时计时模块175.3 报警模块185.4 数据选择模块205.5 译码显示模块226 数字时钟模块化仿真246.1 计时模块仿真图246.1.1 秒模块仿真图246.1.2 分模块仿真图246.1.3 时模块仿真图 256.2 报警模块仿真图256.3 数据选择模块仿真图266.4 译码模块仿真图266.5 数字时钟整体仿真图277 FPGA开发板实验287.1 芯片和器件选择 287.2 外部电路接线 287.2 硬件实物图 288 结论30附录31参考文献42致谢431 引言 随着科学技术的迅猛发展,在计算机技术的推动下电子技术获得了飞速的发展。电子产品几乎渗透到了工业、生活的各

3、个领域,其中集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展。基于这种情况,可编程逻辑器件的出现和发展大大改变了传统的系统设计方法。可编程逻辑器件和相应的设计技术主要体现在三个方面:一是可编程逻辑器件的芯片技术;二是适用于可逻辑编程器件的硬件编程技术,三是可编程逻辑器件设计的EDA开发工具,它主要用来进行可编程逻辑器件应用的具体实现1。在本设计中采用了集成度较高的FPGA 可编程逻辑器件,选用了VHDL硬件描述语言和Quartus II开发软件进行设计。VHDL硬件描述语言在电子设计自动化( EDA)中扮演着重要的角色,由于采用了具有多层次描述系统硬件功能的“自顶向下”(T

4、op -Down)的全新设计方法,使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短了产品的研制周期2。Quartus II软件是集成了编辑器、仿真工具、检查/分析工具和优化/综合工具的这些所有开发工具的一种集成的开发环境,通过该开发环境能够很方便的检验设计的仿真结果以及建立起与可编程逻辑器件的管脚之间对应的关系3。 EDA技术是以计算机为工具,根据硬件描述语言HDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线。仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必

5、须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。综合过程就是将电路的高级语言描述转换低级的。可与目标器件FPGA/CPLD相映射的网表文件。适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列

6、。2 设计概述 数字时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,数字时钟可植入自动控制、测试等系统内部,作为系统的时钟源,可为系统提供定时信号或中断控制的时间基准,具有广泛的用途。由于数字集成电路的发展使得数字时钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的单一报时功能4。加入了一些诸如自动报时、定时闹钟等功能。这些都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。数字时钟的设计方法有很多种,包括基于单片机的硬件设计、基于各种描述语言的

7、软件设计,本设计采用VHDL语言来设计数字时钟有着多方面的优越性,通过把整个设计分为多个模块依次来实现,减少了众多重复性步骤,合理化了设计过程,使得设计更加省时、快捷,提高了设计效率。目前,电子系统的EDA技术正从着眼与数字逻辑向模拟电路和数模混合电路的方向发展,21世纪是EDA技术飞速发展的时期,可以预见EDA技术将会对今后电子设计的发展产生重大的影响。随着电子技术的发展,集成电路经历了从小规模、中规模到大规模和超大规模集成的过程,应用系统向小型化、快速化、大容量、重量轻的方向发展5;数字系统的设计也已从芯片组合化设计走向单片系的设计。随着微电子和计算机领域的原理创新、技术创新、应用创新层出

8、不穷,许多特定功能的专用集成电路应用日益广泛,用户迫切希望根据自身设计要求自行构造逻辑功能的数字电路,复杂可编程逻辑器件FPGA顺应了这一新的需要。它能将大量逻辑功能集成于一个芯片中,其规模可达几十万或上百门以上,从而电子设计自动化EDA技术应运而生,它是电子产品及系统开发领域中一场革命性变革,EDA技术极大地推动了科学技术的发展6。EDA技术的发展使硬件电路设计软件化,降低了硬件电路设计的难度,使设计周期和产品的开发时间缩短,设计更新变成了程序的修改,适应了千变万化的市场潮流。它的设计输入可以使用硬件描述语言(HDL),采用“自顶向下”的设计方法7,为设计者提供了一个高效、便捷的设计环境,同

9、时也为充分发挥设计人员的创造性提供了条件。EDA技术主要应用于数字电路的设计,目前它在中国的应用多数是用在FPGA的设计中。 EDA技术是现代电子信息工程领域的一门新技术,它是在先进的计算机工作平台上开发出来的一套电子系统设计的软硬件工具,并提供了先进的电子系统设计方法8。20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设

10、计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展9。目前,电子系统的EDA技术正从着眼与数字逻辑向模拟电路和数模混合电路的方向发展,21世纪是EDA技术飞速发展的时期,EDA技术将会对今后电子设计的发展产生重大的影响10。3 开发工具简介 3.1 VHDL语言简介3.1.1 VHDL发展史 VHDL语言诞生于1982年,翻译成中文就是超高速集成电路硬件描述语言。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

11、自IEEE公布了VHDL的标准版本,IEEE-1076之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言11。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,主要是应用在数字电路的设计中。现在,VHDL和Verilog HDL作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为在新的世纪中,VHDL与Verilog语言将承担起大部分的

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

13、设计特点 应用VHDL语言进行系统设计,有以下几方面的特点: 1)功能强大:VHDL具有功能强大的语言结构。它可以用明确的代码描述复杂的控制逻辑设计。并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。VHDL是一种设计、仿真和综合的标准硬件描述语言。 2)可移植性:VHDL语言是一个标准语言,其设计描述可以为不同的EDA工具支持。它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台14。此外,通过更换库再重新综合很容易移植为ASIC设计。 3)独立性:VHDL的硬件描述与具体的工艺技术和硬件结构无关。设计者可以不懂硬件的

14、结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。程序设计的硬件目标器件有广阔的选择范围,可以是各系列的CPLD、FPGA及各种门阵列器件。 4)可操作性:由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。 5)灵活性:VHDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。使其在任何大系统的设计中,随时可对设计进行仿真模拟。所以,即使在远离门级的高层次,设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。3.1.3 VHDL设计结构 VHDL描述数字电

15、路系统设计的行为、功能、输入和输出。它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构。VHDL将一个设计称为一个实体Entity(元件电路或者系统),并且将它分成外部的可见部分(实体名连接)和内部的隐藏部分(实体算法实现)。当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库。所以,内部和外部的概念对系统设计的VHDL是十分重要的。外部的实体名或连接由实体声明来描述。而内部的实体算法或实现则由结构体来描述15。结构体可以包含相连的多个进程或者组建等其他并行结构,需要说明的是它们在硬件中都是并行运行的。3.1.4 VHDL设计步骤 采用VHDL的系统设计,一般

16、有以下6个步骤:1)按照要求的功能模块划分;2)VHDL的设计描述(设计输入);3)代码仿真模拟(前仿真);4)计综合、优化和布局布线;5)布局布线后的仿真模拟(后仿真);6)设计的实现(下载到目标器件)。3.2 Quartus II软件简介3.2.1 Quartus II软件介绍 Quartus II 是Alera公司推出的一款功能强大,兼容性最好的EDA工具软件。该软件界面友好、使用便捷、功能强大,是一个完全集成化的可编程逻辑设计环境,具有开放性、与结构无关、多平台完全集成化丰富的设计库、模块化工具、支持多种硬件描述语言及有多种高级编程语言接口等特点16。Quartus II 支持原理图输

17、入与 Verilog HDL 和VHDL输入混合设计,它除了承接原来的Max+Plus II 软件的全部设计功能和器件对象外,还增加了许多新功能和新的FPGA器件系列。它可对设计进行功能仿真,对数字电路的设计实现同步模拟分析和时序仿真。这种同步模拟分析、时序仿真在数字电路的教学中可以起到很好的辅助作用。 Quartus II是Altera公司推出的CPLD/FPGA开发工具,Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局

18、连线编辑;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。3.2.2 Quartus II软件设计流程 1)设计输入:设计文件的输入方法有原理图输入、文本输入、内存编辑以及由第三方EDA工具产生的网表输入

19、、格式输入,生成方法不同,生成的文件格式也有所不同。在图形设计文件中,Quartus II软件为了实现不同的逻辑功能提供了大量的基本单元符号和宏功能模块,在图形编辑器中可以直接调用;为了适应自顶向下的设计,设计者可以使用和Verilog HDL以及Tcl脚本输入文本型设计17。 2)项目编译:项目编译主要完成设计项目的检查和逻辑综合,将项目最终设计结果生成器件的下载文件,并为模拟和编程产生输出文件。 3)仿真验证和时序分析:在把经过编译的输入设计编程或配置到器件之前,可以通过Quartus II软件的仿真器对文件进行全面测试,保证设计在各种可能的条件下都有正确的响应。根据所需的信息类型,可以进

20、行功能仿真和时序仿真。Quartus II时序分析器允许分析设计中所有逻辑的性能,得出时序分析结果,如建立时间、保持时间、引脚到引脚延迟、最大时钟频率、延迟时间及其它时序特征,并协助引导适配器满足设计中的时序要求。 4)器件编程:成功编译了设计工程之后,编译器的Assembler模块自动将适配过程的器件、逻辑单元和引脚分配信息转换为器件的编程图像,并以.sof形式保存,Quartus II软件的编程器(programmer)使用该文件就可对器件进行编程配置。4 数字时钟设计要求和原理4.1 设计要求 在Quartus II软件开发环境下,使用VHDL描述语言、结合FPGA开发板编译和仿真数字时

21、钟;要求时钟能进行基本的计时功能,按照:“时:分:秒”来显示时间;并且能进行时间设置,具有整点报时功能,可对所有显示的内容进行调节设定。4.2 设计原理 根据设计要求,采用自顶向下的方法,层次化设计概念,将此任务分成若干模块,设计时首先用VHDL语言编写各个功能模块,在 Quartus II开发环境下分别进行编译、仿真,然后再用顶层文件将各功能模块连接起来。规定某一模块的功能和各模块之间的接口然后将各模块组合起来构成系统框图。根据设计要求可以把整体设计分为:分频模块、计时模块、数据扫描模块、报警模块和数据选择模块,然后再根据总体方案对各模块进行分别设计和仿真下载18。根据总体方案对各模块分别进

22、行设计、仿真和下载,数字时钟的总体框图如图5.1所示, 报警模块 声音输出24进制计数器控 制 信 号6位数码显示管 时间 数据 动态 扫描 模块译 码 电 路 setmin 60进制计数器 reset 60进制计数器 sethour 分频模块 50MHz 图4.1 数字时钟基本框图 系统的基本功能模块可划分为:分频模块、计数模块(包括秒、分、时) 、译码模块、数据扫描模块和报警模块。计数模块由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计数。整个计数模块从00点00分00秒开始计时,当计数到23点59分59秒的时候,一天结束,计数器清零,新的一天重新开始计数。秒计数器的

23、计数时钟信号为1Hz 的标准信号,可以由系统板上提供的50MHz 信号通过分频得到。秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号。要设计一个同时显示时、分、秒6个数字的数字时钟,则需要6个七段数码显示管。若同时点亮这6个七段数码显示显示管,则电路中会产生一个比较大的电流,很容易造成电路烧坏,我们通过扫描电路来解决这一问题,通过产生一个扫描信号来控制6个七段显示器,依次点亮6个七段数码显示管,也就是每次只点亮一个七段显示器。只要扫描信号的频率超过人的眼睛视觉暂留频率24Hz以上,就可以达到尽管每次点亮单个七段数码显示管,却能具有6个同时显示的

24、视觉效果,而且显示也不致闪烁抖动。其中6位扫描信号一方面控制七段显示器依次点亮,一方面控制6选1选择器输出相应显示数字。时间数据选择模块的作用是将时钟产生的秒、分钟、小时信号集合起来,然后驱动六位七段数码管的片选驱动信号输出。5 数字时钟模块化设计 需要设计的数字时钟由上述7个模块组成,设计时,首先用VHDL语言编写各个底层功能模块,然后在Quartus II开发环境下分别进行编译、仿真, 然后再用顶层文件将各功能模块连接起来,再进行进一步编译、仿真、下载。以下介绍系统中各模块的具体功能和设计方法。5.1 分频模块 本设计使用的FPGA开发板中使用的芯片是Cyclone EP1C6Q240C8

25、,使用的是50MHz的时钟脉冲输入,根据电路的具体设计需要,对其进行分频设计。 如图5.2所示,其为系统的分频模块,其中模块clk1管脚输出为1hz的时钟脉冲,得出用于计数模块和报警模块正常工作的时钟信号,在clk1k管脚输出为一个1khz的时钟脉冲,作用与动态扫描模块的正常工作。输入管脚:clk为50Mhz脉冲输入;输出管脚:clk1为1hz脉冲输出; clk1k为1khz脉冲输出. 图5.2源代码如下:library ieee;use ieee.std_logic_1164.all;entity fp is port( clk:in std_logic; q1:out std_logic

26、q1k:out std_logic);end fp;architecture fp_arc of fp issignal x:std_logic;signal y:std_logic;begin process(clk) variable cnt:integer range 0 to 24999999; begin if clkevent and clk=1then if cnt24999999 then cnt:=cnt+1; else cnt:=0; x=not x; end if; end if; q1=x; end process;process(clk) variable cnt:i

27、nteger range 0 to 24999; begin if clkevent and clk=1then if cnt24999 then cnt:=cnt+1; else cnt:=0; y=not y; end if; end if; q1k=y; end process;end fp_arc;5.2 计时模块5.2.1 秒计时模块 如图5.3所示,计数电路的第一个模块为秒计数模块,其实质是一个六十进制计数器,其中输入管脚: clk为1hz的时钟脉冲; reset为秒模块清零复位键; setmin为调分钟按键输出管脚:enmin为分模块的进位信号; dout6.0为秒模块输出的计数

28、信号. 图5.3源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port( clk: in std_logic; reset: in std_logic; setmin: in std_logic; enmin: out std_logic; daout: out std_logic_vector(6 downto 0);end entity second;architecture fun of second is signal count:std_l

29、ogic_vector(6 downto 0); signal enmin_1,enmin_2:std_logic; begin daout=count; enmin_2=(setmin and clk); enmin=(enmin_1 or enmin_2); process( clk,reset,setmin) begin if(reset=0)then count=0000000; elsif(clkevent and clk=1)then if(count(3 downto 0)=1001)then if(count16#60#)then if(count=1011001)then e

30、nmin_1=1;count=0000000; else count=count+7; end if; else count=0000000; end if; elsif(count16#60#)then count=count+1; enmin_1=0after 100ns; else count=0000000; end if; end if; end process;end fun;5.2.2 分计时模块 如图5.4所示,计数模块的第二个模块为分计时模块,其实质是一个六十进制计数器,其中:输入管脚:clk为秒模块输出的进位信号;clk1为1hz的时钟控制脉冲; reset管脚的作用为分模

31、块的清零、复位; sethour为调小时按键。输出管脚:enhour输出为时模块的进位信号; dout6.0为分钟模块输出的计数信号. 图5.4源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is port( clk: in std_logic; clk1: in std_logic; reset: in std_logic; sethour: in std_logic; enhour: out std_logic; daout: out std_logic

32、_vector(6 downto 0);end entity minute;architecture fun of minute is signal count:std_logic_vector(6 downto 0); signal enhour_1,enhour_2:std_logic; begin daout=count; enhour_2=(sethour and clk1); enhour=(enhour_1 or enhour_2); process(clk,reset,sethour) begin if(reset=0)then count=0000000; elsif(clke

33、vent and clk=1)then if(count(3 downto 0)=1001)then if(count16#60#)then if(count=1011001)then enhour_1=1; count=0000000; else count=count+7; end if; else count=0000000; end if; elsif(count16#60#)then count=count+1; enhour_1=0after 100 ns; else count=0000000; end if; end if; end process;end fun;5.2.3

34、时计时模块 如图5.5所示,此模块的第三个模块为小时计数模块,其实质是一个二十四进制计数器,其中:输入管脚:clk为分模块输出的进位信号; Reset为小时模块的清零、复位管脚.输出模块:dout5.0为小时模块输出的计数信号. 图5.5源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port( clk,reset: in std_logic; daout: out std_logic_vector(5 downto 0);end entity hour;

35、architecture fun of hour is signal count:std_logic_vector(5 downto 0); begin daout=count; process(clk,reset) begin if(reset=0)then count=000000; elsif(clkevent and clk=1)then if(count(3 downto 0)=1001)then if(count16#23#)then count=count+7; else count=000000; end if; elsif(count16#23#)then count=cou

36、nt+1; else count=000000; end if; end if; end process;end fun;5.3 报警模块 如图5.6所示,报警模块的作用是在时钟整点的时候输出一个报时信号,信号作用用开发板上,产生外部响声,起到报时的作用,同时可以选择在开发板的LED上显示出整点报时的LED花样显示,其中:输出管脚:clk为1hz的脉冲信号; dain6.0是分钟的输入信号;输出管脚:speak为整点报时的声音输出; lamp2.0为整点报时的LED输出; 图5.6源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alert is po

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁