基于VHDL语言的电子表毕业设计
基于VHDL的数字电路综合设计
基于VHDL的数字电路综合设计一、引言数字电路设计是计算机科学中的一个重要领域,也是电子工程中的核心内容之一。
在数字电路设计中,经常会用到VHDL语言进行功能仿真和硬件实现,本文将介绍基于VHDL的数字电路综合设计。
二、VHDL语言简介VHDL是VHSIC硬件描述语言(Very High Speed Integrated Circuit Hardware Description Language)的缩写,是一种描述数字系统的硬件设计语言。
VHDL支持复杂的设计和测试,并具有高度的可重用性和可扩展性,因此被广泛应用于数字电路设计。
VHDL语言包含结构体、函数、过程、运算符等元素,允许用户在设计过程中进行各种模拟和优化,支持从最基本的逻辑门直到复杂的微处理器设计。
同时,VHDL可以在不同的电脑平台上使用,并且可以与其他软件工具进行无缝集成。
三、数字电路综合设计流程数字电路综合设计是指将高级语言的描述转换为符合硬件描述语言规范的电路图。
数字电路综合设计流程如下:1.设计规范:对电路进行功能分析和描述,包括输入、输出、功能、时序等方面。
2.编写VHDL代码:根据设计规范编写VHDL代码,包括模块实例化、输入输出端口定义、内部信号定义、电路描述等。
3.逻辑综合:将VHDL代码进行逻辑综合,将代码转换为门级电路,通常采用的软件工具是DC综合器。
4.布局布线:将逻辑综合得到的门级电路进行布局布线,得到网表电路。
5.时序分析:对网表电路进行时序分析,保证电路能够在设定的时间内完成给定的操作。
6.物理综合:根据时序分析结果对网表电路进行物理综合,将电路布局在芯片上,并定义技术参数。
7.后仿真:对综合后的电路进行后仿真,验证电路设计是否符合原始设计要求。
四、综合设计工具的选择数字电路综合设计需要使用多种工具,主要涉及到硬件描述语言编写工具、逻辑综合工具、布局布线工具、笔画校验工具和后仿真工具等。
常见的综合设计工具有:1.VHDL编译器和仿真器:VHDL编译器和仿真器是支持VHDL语言的电路设计工具,可以实现VHDL语言的编写和电路仿真功能。
毕业设计vhdl
毕业设计vhdl毕业设计:VHDL的应用与挑战在计算机科学与技术领域中,VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述和设计数字电路。
作为一门重要的课程,毕业设计是学生们在大学期间的重要任务之一。
本文将探讨毕业设计中VHDL的应用与挑战。
VHDL是一种用于描述和设计数字电路的语言,它具有丰富的语法和强大的功能。
通过使用VHDL,设计师可以描述数字电路的结构和行为,从而实现复杂的功能。
VHDL具有模块化的特性,可以将电路划分为不同的模块,每个模块负责特定的功能。
这种模块化的设计方法使得电路的设计更加灵活和可维护。
在毕业设计中,VHDL的应用广泛而深入。
首先,VHDL可以用于设计和实现各种数字电路,如加法器、乘法器、寄存器等。
这些电路是计算机系统的基础组成部分,通过使用VHDL进行设计和实现,可以提高电路的性能和可靠性。
其次,VHDL还可以用于设计和实现数字信号处理(DSP)算法。
DSP算法在音频、视频等领域中具有广泛的应用,通过使用VHDL进行设计和实现,可以实现高效的算法并提高系统的性能。
然而,毕业设计中使用VHDL也面临一些挑战。
首先,VHDL的学习曲线较陡峭。
对于初学者来说,掌握VHDL的语法和规范需要一定的时间和精力。
其次,VHDL的调试和验证也是一个复杂的过程。
由于VHDL是一种硬件描述语言,无法直接运行和调试,需要使用仿真工具进行验证。
这个过程需要设计师具备一定的专业知识和技巧。
最后,VHDL的设计和实现也需要考虑到电路的性能和资源占用。
设计一个高效的电路需要综合考虑电路的结构和算法,以及资源的利用和分配。
为了克服这些挑战,毕业设计中可以采取一些策略。
首先,学生可以通过参加相关的课程和培训来提高对VHDL的理解和掌握。
这些课程和培训可以帮助学生了解VHDL的语法和规范,以及设计和实现电路的方法和技巧。
其次,学生可以利用仿真工具进行调试和验证。
VHDL与数字电路设计实验报告
VHDL与数字电路设计实验报告引言本实验旨在通过使用VHDL编程语言和数字电路设计技术,实现特定功能的电路设计。
本文档将对实验的步骤、设计原理和结果进行详细描述。
实验步骤1. 步骤一:熟悉VHDL编程语言在实验开始之前,团队成员对VHDL编程语言进行了研究和熟悉。
我们了解了VHDL的基本语法、数据类型和结构,并获得了对VHDL设计原理的初步理解。
2. 步骤二:设计功能电路在本实验中,我们选择了一个特定的功能电路进行设计。
我们首先进行了功能需求分析,并根据需求确定了电路的输入输出信号以及主要的逻辑运算。
然后,我们使用VHDL编程语言将电路的逻辑运算实现为代码,并进行了仿真和测试。
3. 步骤三:电路仿真和验证为了验证我们设计的电路功能的正确性,我们使用了VHDL仿真工具进行了电路的仿真和验证。
我们根据输入信号的不同组合,观察输出信号的变化,并与我们预期的结果进行比较。
通过这一步骤,我们确认了我们设计的电路能够按照预期工作。
4. 步骤四:电路实现和测试在确认电路的设计和仿真结果无误之后,我们进一步将电路实现到实际的数字电路平台上,并进行了硬件测试。
我们使用实际的输入信号来测试电路的性能和稳定性,并对输出信号进行观察和分析。
通过这一步骤,我们验证了电路在实际环境中的可行性。
设计原理我们设计的电路基于特定的功能需求,采用了经典的数字电路设计原理。
通过使用VHDL编程语言,我们将电路的逻辑运算实现为逻辑门和触发器的组合。
通过将输入信号连接到适当的逻辑门和触发器,我们实现了所需的功能。
结果与分析经过实验步骤的完成,我们成功地设计和实现了一个具有特定功能的数字电路。
在仿真测试和实际测试中,电路都表现出了良好的性能和稳定性。
根据结果的分析,我们验证了电路的设计原理和逻辑的正确性。
结论本实验通过使用VHDL编程语言和数字电路设计技术,成功地实现了一个具有特定功能的电路设计。
我们的实验结果表明,VHDL和数字电路设计技术在电路设计领域具有重要的应用价值。
电子秒表设计VHDL
一、设计题目:基于VHDL语言的电子秒表设计(可调时,有闹钟、定时功能)二、设计目的:⑴掌握较复杂的逻辑设计和调试⑵学习用原理图+VHDL语言设计逻辑电路⑶学习数字电路模块层次设计⑷掌握QuartusII软件及Modelsim软件的使用方法三、设计内容:(一)设计要求1、具有以二十四小时计时、显示、整点报时、时间设置和闹钟的功能。
2、设计精度要求为1S。
(二).系统功能描述1 . 系统输入:系统状态及校时、定时转换的控制信号为k、set、ds;时钟信号clk,采用实验箱的50MHz;系统复位信号为reset。
输入信号均由按键产生。
系统输出:8位LED七段数码管显示输出,蜂鸣器声音信号输出。
多功能数字钟系统功能的具体描述如下:2. 计时:set=1,ds=1工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。
3. 校时:在set=0,ds=0状态下,按下“k键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k键”则进入“秒校准”状态,之后如此循环。
1)“小时”校准状态:在“小时”校准状态下,显示“小时”数码管以1Hz的频率递增计数。
2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以1Hz的频率递增计数。
3)“秒”复零状态:在“秒复零”状态下,显示“分”的数码管以1Hz的频率递增计数。
4. 整点报时:蜂鸣器在“59”分钟的第50—59,以1秒为间隔分别发出1000Hz,500Hz的声音。
5. 显示:采用扫描显示方式驱动8个LED数码管显示小时、分、秒。
闹钟:闹钟定时时间到,蜂鸣器发出交替周期为1s的1000Hz、500Hz的声音,持续时间为一分钟;6. 闹钟定时设置:在set=0,ds=1状态下,按下“k”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k 键”则进入“秒”设置状态, 之后如此循环。
1)闹钟“小时”设置状态:在闹钟“小时”设置状态下,显示“小时”的数码管以1Hz 的频率递增计数。
数字秒表实验报告
EDA课程设计题目:基于VHDL的数字秒表设计学生姓名学号学院电子信息学院专业 10通信工程指导教师二零一二年十二月基于VHDL的数字秒表设计摘要当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,省电的方向发展。
推动该潮流迅速发展的决定性因素就是使用了现代化的EDA设计工具。
此次课程设计先确定了系统的逻辑功能,选择电路结构,然后确定并设计电路所需的数据处理以及控制模块,在Quartus II上以超高速硬件描述语言VHDL为系统逻辑描述方法完成了数字秒表所需的分频模块,十进制计数控制模块,六进制计数控制模块与顶层设计和引脚分配,对其进行编译仿真,并下载到实验板上实际验证,通过本设计锻炼了计算机应用能力、VHDL语言的编程能力和Quartus II 的使用能力,此次设计圆满完成了用VHDL语言设计1/1000秒数字秒表并仿真和实际下载到ALTERA公司的ACEX1K系列的EP1K30TC144-3中实现。
关键词:EDA、Quartus II、VHDL、模块、仿真、ACEX1KAbstractThe electronic system design is moving speed, large capacity, small volume, light weight, energy saving direction. The trend of rapid development of determinant is the use of modern EDA design tools. This course is designed to determine the logic function of the system, establish the algorithm process, selection of circuit structure and circuit design, and then determine the desired data processing and control module, in the Quartus II to very high speed hardware description language VHDL as the system logical description method for completing the digital stopwatch desired frequency module, decimal counting control module, base six counting control module with top design and pin assignment, the compiled simulation, and downloaded to the experiments on actual test and verify, through the design of exercise ability of computer application and VHDL programming language and Quartus II using capability, the design was completed by VHDL language design 1\/1000 seconds stopwatch and simulation and the actual download to ALTERA company's ACEX1K series EP1K30TC144-3 implementation.Key Words:EDA、Quartus II、VHDL、Module、Simulation、ACEX1K目录摘要----------------------------------------------------------------2 Abstract------------------------------------------------------------2一、设计要求--------------------------------------------------------4二、设计思想与方案论证----------------------------------------------42.1 设计思想----------------------------------------------------42.2 方案论证----------------------------------------------------4三、系统设计--------------------------------------------------------53.1 顶层电路设计------------------------------------------------53.2时钟分频电路模块---------------------------------------------63.3十进制计数控制模块-------------------------------------------73.4六进制计数控制模块-------------------------------------------7四、系统仿真--------------------------------------------------------84.1 模块仿真----------------------------------------------------84.1.1 时钟分频电路模块仿真 ----------------------------------84.1.2 十进制计数控制模块仿真---------------------------------94.1.3 六进制计数控制模块仿真---------------------------------94.2 总体仿真---------------------------------------------------10五、下载实现--------------------------------------------------------105.1 引脚分配---------------------------------------------------115.2 下载验证---------------------------------------------------11六、问题与不足-----------------------------------------------------13七、心得体会-------------------------------------------------------13参考文献-----------------------------------------------------------14附录---------------------------------------------------------------14附录1 :本设计各模块代码-------------------------------------------14一、设计要求设计用于体育比赛用的数字秒表,要求1、计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时的时钟频率为12MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒2、设计有复位和起/停开关(1) 复位开关用来使计时器清零,并做好计时准备。
基于VHDL语言的FPGA秒表设计电子实验报告
4.1 任务要求.................................................................................................................................................... 23 4.2 设计思路.................................................................................................................................................... 23 4.3 原理框图.................................................................................................................................................... 24
3.3.1 建立项目工程................................................................................................................................... 13 3.3.2 行为仿真............................................................................................................................................ 14 3.3.3 建立顶层原理图............................................................................................................................... 16 3.3.4 综合..................................................................................................................................................... 19 3.3.5 布局布线............................................................................................................................................ 21 3.3.6 下载及硬件仿真............................................................................................................................... 21
推荐-基于VHDL语言的电子表设计 精品
目录设计制作电子表一、设计要求利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。
可采用数码管或液晶显示,最好设计出个性化显示界面。
二、设计思路电子表其实质为计数器,计数单位为1秒。
由秒,分,时组成,秒和分是60进制,用十进制和六进制组成,时是24进制,直接设计一个24进制计数器即可。
要让结果显示出来,则用七段式数码管输出显示计数值。
此电子表需要有置数功能,加一个控制开关,当开关为低电平时计数,当开关为高电平时置数。
设计思路如下图所示:三、程序设计1.置数还是计数电子表有计数和指数两种状态,工作时执行计数还是执行置数则由一控制使能端EN决定,当EN为低电平时,电子表计数,当EN为高电平时,电子表置数。
2.在哪一位置数该电子表有秒低位,秒高位,分低位,分高位,时低位,时高位组成,共有六位,置数由位选决定给哪一位置数。
设置一个三位的二进制开关p2,p1,p0,通过编码电路实现选择置数位。
①当p2p1p0为“000”时,不选择任何位,此时电子表只是停止计数,不置数。
②当p2p1p0为“001”时,秒低位置数。
③当p2p1p0为“010”时,秒高位置数。
④当p2p1p0为“011”时,分低位置数。
⑤当p2p1p0为“100”时,分高位置数。
⑥当p2p1p0为“101”时,时低位置数。
⑦当p2p1p0为“110”时,时高位置数。
关键程序:if t'event and t='1' thenif en='0' then计数语句elsif en='1' and p="001" then s0<=num;end if;end if;3.计数单位首先脉冲频率要足够大,提供一个较快的扫描频率,时数码管稳定地显示计数值。
计数单位为1秒,对脉冲clk 进行分频,得到周期为1秒的计数单位t。
程序中对clk进行512分频,所以需要一个相近的脉冲,试验箱上的CLK4的频率范围为625KHz~19.5Hz,通过跳线帽选择可以调出624Hz的频率。
毕业设计(论文)-利用VHDL语言在FPGA上实现I2C总线控制器的功能模板
摘要随着微电子技术的发展,现场可编程逻辑门阵列FPGA(Field Programmable Gate Array)可以实现数字电路系统设计的功能。
尤其现场可编程逻辑门阵列FPGA具有集成度高的优点,受到工程界高度的重视。
I2C 总线以接口简单,成本底,可扩展性好在数字系统中得到了广泛的应用。
硬件描述语言是数字系统高层设计的核心,是实现数字系统设计新方法的关键技术之一。
本课题正是利用VHDL语言在FPGA上实现I2C总线控制器的功能。
首先研究了I2C总线的规范,又简要介绍了QuartusⅡ设计环境以及FPGA 的设计流程。
在此基础上,重点介绍了I2C控制器的总体设计方案,以及在QuartusⅡ平台上的时序仿真。
关键词Quartus II;I2C总线控制器;现场可编程逻辑门阵列;时序仿真AbstractWith the development of micro electric and EDA(electronic design automation)technology, FPGA(field programmable gates array) can realize the function of digital circuit system design .FPGA have the merit of filed programmability and High integration rate ,therefore is highly recognized for engineering.I2C bus is widely applied in the digital system as simple interface ,expedient use ,low cost and good expansibility .VHDL is considered as a core of digital system design and a key technique of implement digital system.The design realizes the function of I2C bus interface on the FPGA .At first the thesis deeply research I2C bus specification ,then briefly introduce the Quartus II design environment and the design method ,as well as FPGA design flow .In this foundation,I2C bus controller design scheme and the timing simulation under Quartus II is particularly introduced.Key words Quartus II;I2C bus controller ;FPGA ;timing simulation目录摘要 (I)Abstract .................................................................................................................. I I 第1章绪论.. (5)1.1 课题背景 (5)1.2 I2C总线的产生及发展 (6)1.3 FPGA的现状与展望 (6)1.4 相关工作 (6)第2章I2C总线技术的研究 (8)2.1 I2C总线的概念 (8)2.2 I2C总线的传输 (9)2.2.1 数据的有效性 (9)2.2.2 I2C总线数据传送的开始和停止条件 (9)2.2.3 I2C总线传输过程中的应答信号 (10)2.2.4 I2C总线数据传送的重复开始条件 (11)2.2.5 I2C总线的传输过程中的字节格式 (11)2.2.6 I2C总线的器件子地址 (11)2.2.7 I2C总线传输信号的时序 (12)2.3 本章小结 (14)第3章VHDL语言的基础知识 (15)3.1 VHDL语言的概述 (15)3.2 VHDL语言的特点 (15)3.3 VHDL语言的程序结构 (16)3.3.1 VHDL程序的库 (16)3.3.2 包集合 (16)3.3.3 实体说明 (17)3.3.4 构造体 (18)3.3.5 配置 (18)3.4 本章小结 (18)第4章设计工具和设计方法 (19)4.1 设计工具 (19)4.2 基于FPGA的数字电路的设计流程 (20)4.3 本章小结 (21)第5章I2C总线的功能设计 (23)5.1 I2C总线完成的功能 (23)5.2 用VHDL语言实现写操作时的串行转并行 (24)5.3 用VHDL语言实现顺序读操作时的并行转串行 (24)5.4 I2C总线控制器的顶层设计 (25)5.5 本章小结 (26)第6章I2C总线的硬件时序仿真 (27)6.1 器件的选择 (27)6.2 硬件仿真 (28)6.2.1 用VHDL语言实现写字节周期 (29)6.2.1 用VHDL语言实现顺序读字节周期 (30)6.2.3 用VHDL语言实现选择性读字节周期 (30)6.3 本章小结 (31)结论 (32)致谢 (33)参考文献 (34)第1章绪论1.1 课题背景近年来,随着社会的发展,电子产品越来越多的进入人们的生活和工作中,成为了我们生活中必不可少的一部分,随着计算机的普及,以及电子设备之间相互沟通的更加频繁,为了更方便的实现器件与器件之间的通信,研发人员从消费者电子、电讯和工业电子中许多看上去不相关的设计中寻找到了他们的相似之处,例如几乎每个系统都包括:(1)一些智能控制,通常是一个单片的微控制器。
数字电路设计实验vhdl语言实验报告
实验一秒表计数器的设计实验目的:本实验通过设计四种频率可选的数字时钟系统, 以达到熟悉VHDL 语言编程语法、设计思路和熟练掌握Quartus II 开发软件的目的。
二、实验内容:该数字时钟的显示格式如下所示: HH: MM: SS, 其中HH表示时计数的两位, MM表示分计数的两位, SS表示秒计数的两位。
本系统输入信号分别为复位信号rst(高有效)、sel(两位信号, 分别可以选择2分频、4分频8分频和16分频)、clk_in(时钟信号)、8位时输出、8位分输出、8位秒输出(其中高4为表示对应的高半字节、低4位表示的低半字节, 譬如当时间为08:59:30时, 时输出为”0000_1000”,分输出为”0101_1001”,秒输出为”0011_0000”)。
该时钟系统可以通过Sel信号时钟运行的快慢。
三、实验流程:通过对实验内容的分析: 可以考虑时钟系统的可由三部分组成: 1.分频器:分频器为时序电路并且通过《数字电路》理论课程的学习可知由计数器来实现, 同学可以回想一下实验1中是如何实现计数器电路的设计), 该模块主要产生2.4.8、16分频的时钟信号;2.多路选择器:在VHDL中多路选择器为组合逻辑, 可以有多种实现方法, 在这里主要选用了case语句来实现。
该模块的作用是从分频器中根据Sel信号选择适当的时钟信号;3.时钟控制器:该模块比较复杂, 主要实现功能是实现一个24小时的计时。
当时间为00:00:59的时候下一个时钟到来时状态的跳变为00:01:00, 计时中多数计数为加1操作, 有几个特殊状态需要重点考虑:当时间产生分进数时, 譬如上例。
当时间产生时进数时, 譬如00:01:59时刻的下一个状态为00:02:00;当时间产生时进数时, 譬如00:59:59是个的下一个状态为01:00:00。
当时间产生天进数时, 譬如23:59:59的下一个状态为00:00:00。
四、仿真要求:1、本次试验的结果全部采用功能仿真分析:在结果图中能够看到让复位信号rst为有效的情况下, 所有的输出为00:00:00;2.当频率选择输出分别为”00”、”01”、”10”、”11”时秒为的进数分别包含2.4.8、16倍clk_in的时钟周期;3.可以看到完整的计时周期00:00:00->23:59:59->00:00:00。
VHDL数字系统设计_多功能手表的设计(时钟,秒表,闹钟)
一、多功能手表的主模块设计:1、设计思想:由两大模块组成,按键控制模块(control)和时钟模块(clock),按键控制模块主要通过B1,B2 ,B3 三个按键的输入来控制时间的调整,闹钟时间的调整,以及打开闹钟,关闭闹钟的功能,时钟模块主要通过:一是输入的时钟信号clk 触发,clk运行一定的周期,秒就加一,秒有进位时,分加一,分有进位时,依次类推,进行时间的运行;当时间运行到与闹钟时间相同,闹铃信号ring变为1,持续30秒,变为零。
二是来自按键控制模块的时间增信号,inc_hrs,inc_min,inc_sec等信号,进行时间的调整,闹钟响的时候关闭闹钟。
以及其他功能。
2、输入、输出及中间信号说明:输入信号clk 时钟信号rst 复位信号B1 按键1B2 按键2B3 按键3输出信号hours 时间模式的小时minutes 时间模式的分钟seconds 时间模式的秒ahours 闹钟模式的小时aminutes 闹钟模式的分ring 闹钟响铃信号am_pm 时间模式的a.m 或者p.m指示(为0时表示a.m,为1时表示p.m)aam_pm 闹钟模式的a.m 或者p.m指示(为0时表示a.m,为1时表示p.m)disp_time1 显示时间模式的时、分、秒标志,为1时显示,为零时不显示disp_alarm 显示闹钟模式的时、分标志,为1时显示,为零时不显示中间信号:inc_hrs 时间模式的小时加1inc_min 时间模式的分钟加1inc_sec 时间模式的秒加1inc_ahrs 闹钟模式的小时加1inc_amin 闹钟模式的分钟加1alarm_off 时间模式下如果闹钟响,关闹钟信号set_alarm 闹钟模式下,开启关闭闹钟信号alarm_set 闹钟模式下设置闹钟信号S_hours 时间模式的小时hours寄存信号S_minutes 时间模式的分钟minutes寄存信号S_seconds 时间模式的秒seconds寄存信号S_ahours 闹钟模式的小时ahours寄存信号S_aminutes 闹钟模式的分钟aminutes寄存信号S_ring 闹钟模式的闹钟响铃ring寄存信号S_am_pm 时间模式的am_pm寄存信号S_aam_pm 闹钟模式的aam_pm寄存信号3、主程序代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use ieee.numeric_bit.bit;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity main isport(B1,B2,B3,clk,rst:in std_logic;hours,minutes,seconds,ahours,aminutes:out std_logic_vector(7 downto 0);ring,am_pm,aam_pm,disp_time1,disp_alarm:out std_logic);end main;architecture Behavioral of main iscomponent clock is ----时钟模块port(clk,rst,inc_hrs,inc_min,inc_sec,inc_ahrs,inc_amin,set_alarm,alarm_off:in std_logic;hours,ahours,minutes,aminutes,seconds: inout std_logic_vector(7 downto 0);am_pm,aam_pm,ring,alarm_set:inout std_logic);end component;component control is -----按键控制模块port(B1,B2,B3,clk,rst:in std_logic;alarm_off,set_alarm:inout std_logic;disp_time1,disp_alarm,inc_hrs,inc_min,inc_sec,inc_ahrs,inc_amin:out std_logic);end component;signal inc_hrs,inc_min,inc_sec,inc_ahrs,inc_amin,alarm_off,set_alarm,alarm_set:std_logic;signal S_hours,S_minutes,S_seconds,S_ahours,S_aminutes: std_logic_vector(7 downto 0); signal S_ring,S_am_pm,S_aam_pm:std_logic;begin-----按键控制,时钟运行模块,以及最后输出模块使用并发语句设计controllor: control port map(B1,B2,B3,clk,rst, alarm_off,set_alarm,disp_time1,disp_alarm,inc_hrs,inc_min,inc_sec,inc_ahrs,inc_amin);clock1: clock port map(clk,rst,inc_hrs,inc_min,inc_sec,inc_ahrs,inc_amin,set_alarm,alarm_off,S_hours,S_ahours,S_minutes,S_aminutes,S_seconds,S_am_pm,S_aam_pm,S_ring,alarm_set);hours<=S_hours;minutes<=S_minutes;seconds<=S_seconds;ahours<=S_ahours;aminutes<=S_aminutes;am_pm<=S_am_pm;aam_pm<=S_aam_pm;ring<=S_ring;end Behavioral;(1)综合电路图:5、按键控制模块说明:(1)状态转移图:(2)ASM图(3)信号说明:与前面重复的这里不再赘述present_state 当前状态next_state 下一个状态七个状态说明:time1 时间显示模式set_sec 调整时间的秒模式set_min, 调整时间的分钟模式set_hrs, 调整时间的小时模式alarm, 闹钟模式set_alarm_hrs, 调整闹钟的小时模式set_alarm_min 调整闹钟的分钟模式(4)程序代码library IEEE;use IEEE.STD_LOGIC_1164.ALL;--use ieee.numeric_bit.bit;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity control isport(B1,B2,B3,clk,rst:in std_logic;alarm_off,set_alarm:inout std_logic;disp_time1,disp_alarm,inc_hrs,inc_min,inc_sec,inc_ahrs,inc_amin:out std_logic); end control;architecture Behavioral of control istype state is(time1,set_sec,set_min,set_hrs,alarm,set_alarm_hrs,set_alarm_min);signal present_state,next_state :state;beginprocess(clk,rst)beginif rst='1' then ------异步复位present_state<=time1;elsif(clk'event and clk='1')then ------采用时钟边沿触发present_state<=next_state;end if;end process;process(B1,B2,B3,present_state,rst) -----由按键控制的状态转换进程beginif rst ='1' then ---------------异步复位alarm_off<='0';set_alarm<='0';elsecase present_state iswhen time1=> ---------------时间显示----------inc_hrs<='0';inc_min<='0';inc_sec<='0';inc_ahrs<='0';inc_amin<='0';disp_time1<='1';disp_alarm<='0'; ----状态输出if B1='1' then next_state<=alarm;elsif B2='1' then next_state<=set_hrs;elsif B3='1' then alarm_off<=not alarm_off;next_state<=time1;else next_state<=time1;end if;when set_hrs=> --------------------------设置时间inc_min<='0';inc_hrs<='0';inc_sec<='0';inc_ahrs<='0';inc_amin<='0';disp_time1<='1';disp_alarm<='0';if B2='1' then next_state<=set_min;elsif B3='1' then inc_hrs<='1';next_state<=set_hrs;else next_state<=set_hrs;end if;when set_min=> -------------------设置分钟inc_hrs<='0';inc_min<='0';inc_sec<='0';inc_ahrs<='0';inc_amin<='0';disp_time1<='1';disp_alarm<='0';if B2='1' then next_state<=set_sec;elsif B3='1' then inc_min<='1';next_state<=set_min;else next_state<=set_min;end if;when set_sec=> -------------------------设置秒inc_hrs<='0';inc_min<='0';inc_sec<='0';inc_ahrs<='0';inc_amin<='0';disp_time1<='1';disp_alarm<='0';if B2='1' then next_state<=time1;elsif B3='1' then inc_sec<='1';next_state<=set_sec;else next_state<=set_sec;end if;when alarm => -----------------闹钟显示inc_hrs<='0';inc_min<='0';inc_sec<='0';inc_ahrs<='0';inc_amin<='0';disp_time1<='0';disp_alarm<='1';if B1='1' then next_state<=time1;elsif B2='1' then next_state<=set_alarm_hrs;elsif B3='1' then set_alarm<=not set_alarm;next_state<=alarm;else next_state<=alarm;end if;when set_alarm_hrs=> ---------------调整闹钟的小时inc_hrs<='0';inc_min<='0';inc_sec<='0';inc_amin<='0';inc_ahrs<='0';disp_time1<='0';disp_alarm<='1';if B2='1' then next_state<=set_alarm_min;elsif B3='1' then inc_ahrs<='1'; next_state<=set_alarm_hrs;else next_state<=set_alarm_hrs;end if;when set_alarm_min=> -------------------------调整闹钟的分钟inc_hrs<='0';inc_min<='0';inc_sec<='0';inc_ahrs<='0';inc_amin<='0';disp_time1<='0';disp_alarm<='1';if B2='1' then next_state<=alarm;elsif B3='1' then inc_amin<='1';next_state<=set_alarm_min;else next_state<=set_alarm_min;end if;end case;end if;end process;end Behavioral;6、时钟模块说明:信号说明:与前面重复的这里不再赘述,s59 秒有进位的标志信号(由59变为0时,s59<=’1’,否则为‘0’)m59 分钟有进位的标志信号(由59变为0时,s59<=’1’,否则为‘0’)inchrs 时间的小时加1的寄存信号incmin 时间的分钟加1的寄存信号incsec 时间的秒加1的寄存信号c99 时钟过了1s,自动发出的秒加1 的信号程序代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use ieee.numeric_bit.bit;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clock isport(clk,rst,inc_hrs,inc_min,inc_sec,inc_ahrs,inc_amin,set_alarm,alarm_off:in std_logic;hours,ahours,minutes,aminutes,seconds: inout std_logic_vector(7 downto 0);am_pm,aam_pm,ring,alarm_set:inout std_logic);end clock;architecture Behavioral of clock iscomponent CTR_59 is -------模60计数器模块port(clk,inc,rst:in std_logic;dout :out std_logic_vector(7 downto 0);t59:out std_logic);end component;component CTR_12 is ----------模12计数器模块port(clk,inc,rst:in std_logic;dout :out std_logic_vector(7 downto 0);am_pm:inout std_logic);end component;signal s59,m59,inchrs,incmin,incsec,c99:std_logic :='0';signal alarm_ring_time:integer range 0 to 50;signal div100:integer range 0 to 100;beginsec1:CTR_59 port map(clk,incsec,rst,seconds,s59);min1:CTR_59 port map(clk,incmin,rst,minutes,m59);hrs1:CTR_12 port map(clk,inchrs,rst,hours,am_pm);incmin<=(s59 and c99)or inc_min;inchrs<=(m59 and s59 and c99)or inc_hrs;incsec<=c99 or inc_sec;alarm_min:CTR_59 port map(clk,inc_amin,rst,aminutes,open);alarm_hrs:CTR_12 port map(clk,in_ahrs,rst,ahours,aam_pm);c99<='1' when div100=199 else '0';-----clk频率为200Hz,一个周期为5ms,所以200个周期为1s process(clk,rst)beginif rst='1' thenring<='0';alarm_ring_time<=0;alarm_set<='0';div100<=0;elsif clk'event and clk ='1' thenif c99='1' then div100<=0;else div100<=div100+1;end if;if set_alarm='1' thenalarm_set<= not alarm_set;end if;if((minutes=aminutes)and (hours=ahours)and (am_pm=aam_pm))and andseconds=”00000000” and alarm_set='1' thenring<='1';end if;if ring='1' and c99='1' thenalarm_ring_time<=alarm_ring_time+1;end if;if alarm_ring_time=30 or alarm_off='1' then---闹钟响了30s或者手动关闭,则闹钟关ring<='0';alarm_ring_time<=0;end if;end if;end process;end Behavioral;(1)模60计数器模块entity CTR_59 isport(clk,inc,rst:in std_logic;dout :out std_logic_vector(7 downto 0);t59:out std_logic);-------t59,计数到60的进位信号end CTR_59;architecture Behavioral of CTR_59 issignal dig0,dig1:std_logic_vector(3 downto 0);-----dig0表示个位数字,dig1表示十位数字beginprocess(clk)beginif clk'event and clk ='1' thenif rst='1' then dig0<="0000";dig1<="0000";elseif inc='1' thenif dig0="1001" then dig0<="0000";if dig1="0101" then dig1<="0000";else dig1<=dig1+1;end if;else dig0<=dig0+1;end if;end if;end if;end if;end process;t59<='1' when (dig1="0101" and dig0="1001")else '0';dout<=dig1 & dig0;end Behavioral;(2)模12计数器模块entity CTR_12 isport(clk,inc,rst:in std_logic;dout :out std_logic_vector(7 downto 0);am_pm:inout std_logic);end CTR_12;architecture Behavioral of CTR_12 issignal dig0:std_logic_vector(3 downto 0);-----个位数字signal dig1:std_logic; ----------十位数字beginprocess(clk)beginif rst ='1' thendig1<='0';dig0<="0000";am_pm<='0';elsif clk'event and clk ='1' thenif inc='1' thenif dig1='1' and dig0="0010" thendig1<='0';dig0<="0001";elseif dig0="1001" thendig0<="0000";dig1<='1';else dig0<=dig0+1;end if;if dig1='1' and dig0="0001" then am_pm<= not am_pm;end if;end if;end if;end if;e nd process;d out<="000" & dig1 & dig0;end Behavioral;二、仿真测试:1、按键控制模块的测试:复位之后,当前状态为time1 ,disp_time1=’1’,disp_alarm=’0’,此时显示时间,不显示闹钟,按一下B1进入alarm状态按两次B3,第一次set_alarm=‘1’,闹钟开启,第二次set_alarm=‘0’闹钟关闭第一次按下B2进入set_alarm_hrs,闹钟小时设置状态,按三次B3inc_ahrs三次变为1,表示加了3次第二次按下B2进入set_alarm_min,闹钟分钟设置状态,按两次B3Inc_amin两次变为1,表示加了2次第三次按下B2进入alarm闹钟显示状态,再按下B3表示闹钟开启和关闭第二次按下B1 进入time1,时间状态,按一下B3,alarm_off为‘1’第一次按下B2进入set_hrs,设置小时,按三次B3,小时加三次第二次按下B2进入set_min,设置分钟,按一次B3,分钟加一次第三次按下B2进入set_sec,设置秒,按一次B3,秒加一次第四次按下B2 进入time1,时间显示,此时按下B3,alarm_off=’0’由上述测试内容可以看出,设计达到了预期要求2、手表完整功能的测试(1)测试代码:LIBRARY ieee;USE ieee.std_logic_1164.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--USE ieee.numeric_std.ALL;ENTITY mian_tb ISEND mian_tb;ARCHITECTURE behavior OF mian_tb IS-- Component Declaration for the Unit Under Test (UUT)COMPONENT mainPORT(B1 : IN std_logic;B2 : IN std_logic;B3 : IN std_logic;clk : IN std_logic;rst : IN std_logic;hours : OUT std_logic_vector(7 downto 0);minutes : OUT std_logic_vector(7 downto 0);seconds : OUT std_logic_vector(7 downto 0);ahours : OUT std_logic_vector(7 downto 0);aminutes : OUT std_logic_vector(7 downto 0);ring : OUT std_logic;am_pm : OUT std_logic;aam_pm : OUT std_logic;disp_time1: OUT std_logic;disp_alarm: OUT std_logic);END COMPONENT;--Inputssignal B1 : std_logic := '0';signal B2 : std_logic := '0';signal B3 : std_logic := '0';signal clk : std_logic := '0';signal rst : std_logic := '0';--Outputssignal hours : std_logic_vector(7 downto 0);signal minutes : std_logic_vector(7 downto 0);signal seconds : std_logic_vector(7 downto 0);signal ahours : std_logic_vector(7 downto 0);signal aminutes : std_logic_vector(7 downto 0);signal ring : std_logic;signal am_pm : std_logic;signal aam_pm : std_logic;signal disp_time1 : std_logic;signal disp_alarm : std_logic;-- Clock period definitionsconstant clk_period : time := 5 ms;-----------设置时钟周期为5ms,即时钟为200 Hz BEGIN-- Instantiate the Unit Under Test (UUT)uut: main PORT MAP (B1 => B1,B2 => B2,B3 => B3,clk => clk,rst => rst,hours => hours,minutes => minutes,seconds => seconds,ahours => ahours,aminutes => aminutes,ring => ring,am_pm => am_pm,aam_pm => aam_pm,disp_time1 =>disp_time1,disp_alarm =>disp_alarm);-- Clock process definitionsclk_process :processbeginclk <= '0';wait for clk_period/2;clk <= '1';wait for clk_period/2;end process;-- Stimulus processstim_proc: processprocedure wait1(N1 :in integer) is -----------------时钟延时过程(延时N1个周期)variable count:integer;begincount:=N1;while count/=0 loopwait until clk'event and clk ='1' ;count:=count-1;wait until clk'event and clk='0';end loop;end procedure wait1;procedure push(signal button:out std_logic; N :in integer)is -----按键过程beginfor i in 1 to N loopbutton<='1';wait1(1); -----控制按键在一个时钟周期内为1button<='0';wait1(100); ------然后延时0.5send loop;end procedure push;begin-----测试数据是通过时钟延时过程和按键过程的调用来实现push(rst,1); ----按一次复位键rst 复位,进入时间显示模式push(B2,1); ------按一次B2 ,调整显示时间的小时push(B3,11); ---------按十一次B3,把小时数调到11;push(B2,1); -----------按一次B2 ,调整显示时间的分钟push(B3,56); ----------按56次B3 ,把分钟调整为56push(B2,1); ----------按一次B2 ,调整显示时间的秒push(B3,55); ---------按55次B3 ,调整显示时间的秒为55 push(B2,1);------按一次B2 ,推出调整时间,重新进入到显示时间的模式,push(B1,1);----------------按一次B1 ,进入到闹钟模式push(B2,1); ------------按一次B2 ,调整闹钟时间的小时push(B3,11); ----------按11次B3,把闹钟的小时调为11 push(B2,1); ------按一次B2,调整闹钟时间的分钟push(B3,59); -----------按59次B3,把闹钟的分钟调为59push(B2,1);------按一次B2,退出闹钟调整,重新进入到闹钟显示模式push(B3,1); -------按一次B3 ,打开闹钟push(B1,1);---------按一次B1 ,退出闹钟模式,重新进入到时间显示模式--------下面的代码如果没有,则闹钟响30s后自动关闭wait until ring'event and ring='1'; -------等待闹钟响wait for 10000 ms; ------闹钟响了之后,在等待十秒push (B3,1); ------------按一次B3 ,关闭闹钟wait;end process;END;(2)仿真波形:复位后,可以看到disp_time=’1’,disp_alarm=’0’;表示屏幕上显示的是时间模式的时间,按一次B1 进入闹钟模式,可以看出disp_time=’0’,disp_alarm=’1’;表示屏幕上显示的是时间模式的时间。
基于vhdl的秒表设计说明书
电子科技大学电子综合实验论文论文主题:基于VHDL的秒表设计所在学院:电子工程学院所属专业:电磁场与无线技术学生姓名:王立学生学号:2010020040027提交日期:2013.10.30指导教师:皇晓辉目录背景简介 (4)时间的起源 (4)人们对时间认识的发展 (5)计时器的发明与发展 (6)数字电路以及其与时钟、时序的不可分割关系 (7)项目设计介绍 (9)1.FPGA简介 (9)2.Verilog简介 (11)3.VHDL介绍 (12)4.使用的软件以及实验器材 (17)相关数字电路简介 (17)秒表的设计与实现 (19)设计总体: (19)1.设计思路: (19)2.电路设计: (19)3.思路总结: (20)模块设计: (20)1.分频器 (20)2.十进制计数器 (21)3.六进制计数器 (22)4.锁存器 (23)5.显示电路 (24)6.按键消抖 (25)7.控制电路 (26)8.模块完成 (28)仿真与硬件实现 (33)1.仿真电路图 (33)2.按键关联 (33)3.硬件实现 (33)4.效果展示 (33)设计结果分析 (33)程序优化 (33)设计心得 (34)特别感谢 (34)参考文献 (35)背景简介时间的起源时间是人类用以描述物质运动过程或事件发生过程的一个参数,确定时间,是靠不受外界影响的物质周期变化的规律。
例如月球绕地球周期,地球绕太阳周期,地球自转周期,原子震荡周期等。
爱因斯坦说时间和空间是人们认知的一种错觉。
大爆炸理论认为,宇宙从一个起点处开始,这也是时间的起点。
时间是指宏观一切具有不停止的持续性和不可逆性的物质状态的各种变化过程,其有共同性质的连续事件的度量衡的总称。
时是客观存在,而间是人们的思想所划分的。
时间是一个较为抽象的概念,爱因斯坦在相对论中提出:不能把时间、空间、物质三者分开解释,"时"是对物质运动过程的描述,"间"是指人为的划分。
EDA课程设计(VHDL语言数字秒表的设计)毕业设计(论文)
摘要EDA技术作为电子工程领域的一门新技术,极大的提高了电子系统设计的效率和可靠性。
本次课程设计就是利用VHDL语言结合硬件电路来实现数字秒表的功能,数字秒表有4个模块构成,分别为分频电路模块,去抖电路模块,时间计数电路模块,显示模块。
用VHDL 语言编程来实现各个模块的功能,再用原件例化的方法实现各模块之间的连接,从而实现整个数字秒表电路的功能。
关键词:EDA,VHDL,数字秒表AbstractThe technology of EDA as a new technology in electronic engineering has greatly improved the efficiency and reliability of electronic system design. The course design is the use of VHDL language combination of hardware circuitry to achieve digital stopwatch function. Digital Stopwatch is made up of four modules, such as: sub-frequency circuit module, debounce circuit module, counting circuit module and display module. I used VHDL language programming to achieve the functions of each module and connected each module with the method of original cases to realize the entire digital stopwatch function.Keywords: EDA,VHDL,digital stopwatch1绪论[]1EDA是20实际90年代初以来迅速发展起来的现代电子工程领域的一门新技术。
基于VHDL的电子秒表课程设计报告
课程设计报告题目:电子秒表课程:《EDA技术》课程设计专业班级:电信07级2 班学生姓名:学号:完成日期:2010-6-15机电工程学院目录摘要 (3)1概述 (3)1.1课程设计目的 (3)1.2课程设计内容 (3)1.3课程设计原理 (3)2设计过程 (4)2.1模块1 (4)2.2模块2 (4)2.3模块3 (5)2.4顶层设计模块 (5)3系统仿真 (5)3.1 时序仿真 (5)3.2 电路功能验证 (6)3.3 问题分析 (7)4心得体会 (7)参考文献 (8)附录1:源程序清单 (8)摘要数字秒表是生活中大家都很熟悉的事物,在EDA设计中也是一个不错的选题。
设计首先需要考虑秒表的整体构成,主要由分频器与计数器组成。
通过计数器进位端相联系。
设计好顶层原理图后,需要用VHDL语言对各个模块进行行为描述,完成对各模块的设计。
这应该属于自定向下,模块化的设计方法。
1概述1.1课程设计目的了解各种PLD器件的基本结构,掌握QUARTUSII的使用方法,用图形输入法和VHDL完成规定的基本练习题,在此基础上完成一个数字系统设计题的设计、仿真、下载(FPGA实现)。
通过课程设计使学生能熟练掌握一种EDA软件(QUARTUSII)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。
使学生能利用EDA软件(QUARTUSII)进行至少一个电子技术综合问题的设计(内容可由老师指定或自由选择),设计输入可采用图形输入法或VHDL硬件描述语言输入法。
使学生初步具有分析、寻找和排除电子电路中常见故障的能力。
1.2课程设计内容使用VHDL语言描述一个秒表电路,利用QuantusII软件进行源程序设计,编译,仿真,最后形成下载文件下载至装有FPGA芯片的实验箱,进行硬件测试,要求实现秒表功能。
1.3课程设计原理秒表的逻辑结构较简单,它主要由、显示译码器、分频器、十进制计数器和计时脉6进制计数器组成。
在整个秒表中最关键的是如何获得一个精确的100HZ冲,除此之外,整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。
基于VHDL的电子秒表的设计
《EDA技术及应用》课程设计报告题目:基于VHDL的电子秒表的设计院(系):电气工程及其自动化专业班级:电气1203学生姓名:季佳璐学号:20121131131指导教师:姚裕安2014年12月05日至2014年12月09日华中科技大学武昌分校制EDA技术及应用课程设计任务书一、设计(调查报告/论文)题目基于VHDL的电子秒表的设计二、设计(调查报告/论文)主要内容设计一个电子秒表,给定时钟信号为512HZ,要求系统达到以下功能:(1)用6个数码管分别显示时、分、秒,计时范围为:00: 00: 00~ 23: 59:59。
(2)计时精度是1s。
(3)具有启/ 停开关, 复位开关, 可以在任何情况下使用。
三、原始资料电子秒表的基本工作原理就是不断输出连续脉冲给加法计数器,加法计数器通过译码器来显示它所记忆的脉冲周期个数。
1、系统总体框图根据系统设计要求, 系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。
系统顶层设计图如图1所示图1 系统顶层设计图图1中左边为三个输入信号en,clk,reset,分别为启动/停止开关,时钟信号和复位开关。
中间从上至下依次为count24,count60,count60,fenpinqi。
右边是clock1和输出信号wei[3..0], led[6.0]。
2、模块功能设计本系统由六十进制计数器模块、二十四进制计数器模块、分频模块执行计时功能, 输入信号是256 Hz,通过分频后为1hz,时钟信号是1 Hz 作为秒表的秒输入, 秒为60 进制计数器, 分也为60 进制计数器, 小时采用二十四进制计数器, 各级进位作为高位的使能控制。
(1)六十进制计数器模块设计一个八位的六十进制计数器模块,输入信号为en、reset、clk,分别为使能、复位和时钟信号,输出信号为qa[3…0]、qb[3…0]、rco,分别为低4位输出、高4位输出和进位位。
基于VHDL语言的8位CPU的设计(quartus仿真)
假设指令地址为0、1、2、3…,为便于显示,设置地址指令和程序计数器输出为数制十进制, 仿真波形如下图:
图2.14 程序计数电路仿真波形
第二部分:RISC-CPU各模块设计与仿真
8. 状态控制器
是CPU的控制核心, 用于产生一系列的控 制信号,启动或停止 某些部件,由状态机 和状态机控制器组成, 如图。
图2.9 数据输出控制器
假设累加器输出值由00000000递增,验证当data_ena为1时,data输出alu_out的值,当 data_ena为0时,data输出"ZZZZZZZZ"。波形如下:
图2.10 数据输出控制器仿真波形
第二部分:RISC-CPU各模块设计与仿真
6. 地址多路器
用于选择输出的地址是PC地址还是数据/ 端口地址,如图2.11所示。每个指令周期的 前4个时钟周期用于从ROM中读取指令,输 出PC地址。后4个时钟周期用于对RAM或 端口的读写,输出数据或端口地址。
图2.7算术逻辑单元
在仿真过程中,假设操作码依次为上述8种操作码。数据值为5,累加器值为由3变0,以此来 验证zero作用。仿真波形下图所示:
图2.8 算术逻辑运算单元仿真波形
第二部分:RISC-CPU各模块设计与仿真
5.数据输出控制器
控制累加器数据输出,如图2.9由于数据总 线是各种操作时传送数据的公共通道,不同 的情况下传送不同的内容。有时要传输指令, 有时要传送RAM区或接口的数据。
图3.2 RISC-CPU各模块连接图
谢谢!!
WPS Office
Make Presentation much more fun
@WPS官方微博 @kingsoftwps
基于VHDL语言的8位 RISC-CPU的设计
一种基于VHDL语言的电子钟的设计
1 引言1.1 数字电子钟的进展与应用20世纪末,电子技术取得了飞速的进展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的进展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节拍也愈来愈快。
时刻对人们来讲老是那么宝贵,工作的忙碌性和繁杂性容易令人忘记当前的时刻。
忘记了要做的情形,当情形不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要情形,一时的延误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时刻。
尤其在医院,每次护士都会给病人作皮试,测试病人是不是对药物过敏。
注射后,一样等待5分钟,一旦超时,所作的皮试实验就会无效。
腕表固然是一个好的选择,可是,随着同意皮试的人数增加,究竟是哪个人的皮试到时刻却难以判定。
因此,要制作一个按时系统。
随时提示这些容易忘记时刻的人。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如按时自动报警、按时自动打铃、时刻程序自动操纵、按时广播、按时启闭电路、按时开关烘箱、通断动力设备,乃至各类按时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着超级现实的意义。
1.2 关于本次设计数字电子钟是用数字集成电路做成的现代计时器,与传统的机械钟相较,它具有走时准确(用高稳固度石英晶体振荡器作时钟源)、显示直观(用液晶或荧光七段数码管显示器)、无机械传动装置等优势,因此普遍用于车站、码头、机场等公开场合。
在操纵系统中,也经常使用作按时器时钟源。
数字钟是数字电路中计数(分频)、译码、显示及时钟脉冲振荡器等组合逻辑电路、时序逻辑电路和脉冲产生电路的综合应用。
本次设计利用VHDL硬件描述语言结合可编程逻辑器件进行的,并通过数码管动态显示计时结果。
用Altera公司的开发平台QUARTUSⅡ来仿真,最后下载到EP1K100QC208-3器件中进行验证。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一、设计要求 (1)二、设计思路 (1)三、程序设计 (2)1.置数还是计数 (2)2.在哪一位置数 (2)3.计数单位 (2)4.秒 (3)5.分 (4)6.时 (4)7.数码管显示 (5)四、仿真结果 (6)五、实验结果 (8)1.连线 (8)2.设计结果 (8)六、实验心得 (9)电子表源程序 (10)设计制作电子表一、设计要求利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。
可采用数码管或液晶显示,最好设计出个性化显示界面。
二、设计思路电子表其实质为计数器,计数单位为1秒。
由秒,分,时组成,秒和分是60进制,用十进制和六进制组成,时是24进制,直接设计一个24进制计数器即可。
要让结果显示出来,则用七段式数码管输出显示计数值。
此电子表需要有置数功能,加一个控制开关,当开关为低电平时计数,当开关为高电平时置数。
设计思路如下图所示:三、程序设计1.置数还是计数电子表有计数和指数两种状态,工作时执行计数还是执行置数则由一控制使能端EN决定,当EN为低电平时,电子表计数,当EN为高电平时,电子表置数。
2.在哪一位置数该电子表有秒低位,秒高位,分低位,分高位,时低位,时高位组成,共有六位,置数由位选决定给哪一位置数。
设置一个三位的二进制开关p2,p1,p0,通过编码电路实现选择置数位。
①当p2p1p0为“000”时,不选择任何位,此时电子表只是停止计数,不置数。
②当p2p1p0为“001”时,秒低位置数。
③当p2p1p0为“010”时,秒高位置数。
④当p2p1p0为“011”时,分低位置数。
⑤当p2p1p0为“100”时,分高位置数。
⑥当p2p1p0为“101”时,时低位置数。
⑦当p2p1p0为“110”时,时高位置数。
关键程序:if t'event and t='1' thenif en='0' then计数语句elsif en='1' and p="001" then s0<=num;end if;end if;3.计数单位首先脉冲频率要足够大,提供一个较快的扫描频率,时数码管稳定地显示计数值。
计数单位为1秒,对脉冲clk 进行分频,得到周期为1秒的计数单位t。
程序中对clk进行512分频,所以需要一个相近的脉冲,试验箱上的CLK4的频率围为625KHz~19.5Hz,通过跳线帽选择可以调出624Hz的频率。
所以脉冲频率选用624Hz。
关键程序:if clk'event and clk='1' thencount:=count+1;end if;t<=count(9);4.秒秒是60进制的,可以用一个十进制计数器和一个六进制计数器实现。
秒的低位为十进制,当第10个计数单位到达时,计数值清零,并产生一个进位信号,用以更高位的计数,而其他时候进位信号为低电平,既没有进位输出。
秒的高位为六进制,每一个来自低位的进位信号高电平到达时计一次数,当第六个进位信号到达时,计数值清零,同样的产生一个进位信号。
关键程序:-----秒低位--------ss0:process(t) isbeginif t'event and t='1' thenif en='0' thenif s0=9 then s0<=0;c0<='1'; ---进位else s0<=s0+1;c0<='0';end if;elsif en='1' and p="001" then s0<=num;end if;end if;end process;-------秒高位----ss1:process(c0) isbeginif c0'event and c0='1' thenif en='0' thenif s1=5 then s1<=0;c1<='1'; ---进位else s1<=s1+1;c1<='0';end if;elsif en='1' and p="010" then s1<=num;end if;end if;end process;5.分分与秒类似,也是一个60进制的计数器,可用十进制和六进制组合实现。
这里不再赘述。
6.时时位不同于秒和分,因为时的低位不是任何进制的计数器,因此不能像上面那样用两个计数器组合,而只能将时的高低位作为一个整体,为一个二十四进制计数器,接受来自分位的进位信号,计数满24时清零。
由于数码管只能显示0~9的数字,所以数码管显示时仍然要分高低位分别显示。
对于如何用两个数码管显示着24个数,用分段的方法解决。
h表示时位的计数值,h1表示时的高位,h0表示时的低位①h在0~9围,则h1=0,h0=h;②h在10~19围,则h1=1,h0=h-10;③h在20~23围,则h1=2,h0=h-20;关键程序:hh:process(c3,h) isbeginif c3'event and c3='1' thenif h=23 then h<=0;else h<=h+1;end if;end if;case h iswhen 0 to 9 =>h1<=0;h0<=h;when 10 to 19 =>h1<=1;h0<=h-10;when 20 to 23 =>h1<=2;h0<=h-20;when others =>null;end case;end process;7.数码管显示秒分时个两位,分与秒,时与分之间用短线隔开,所以需要用8个数码管,从右到左分别为秒低位,秒高位,短线,分低位,分高位,短线,时低位,时高位。
关键程序:process(clk,w) isbeginif clk'event and clk='1' thenif w="111" then w<="000";elsew<=w+1;end if;end if;case w iswhen "000"=>n<=s0;when "001"=>n<=s1;when "010"=>n<=10; ---第10种状态,显示分与秒之间的短线。
when "011"=>n<=m0;when "100"=>n<=m1;when "101"=>n<=10; ---第10种状态,显示时与分之间的短线。
when "110"=>n<=h0;when "111"=>n<=h1;when others=>null;end case;end process;sel<=w;四、仿真结果1.clk分频后用以计数,s0为十进制,仿真结果如下:2.s1为六进制3.m0为十进制4.m1为六进制5.h为二十四进制五、实验结果1.连线设定器件为EPM7128LC84-6,按分配好的引脚在试验箱上连线。
输入管脚有:脉冲clk,使能控制端en,置数选择p2p1p0,置数端x3x2x1x0。
输出管脚有:数码管位选输出sel~sel0,数码管段选输出d6~d0。
连线照片如下:2.设计结果电子表实物照片如下:从左到右为时,分,秒。
六、实验心得本次实验花费了较长时间,刚开始想电子表就是一个计数器,之前实验做过计数器,应该很快能做出来,但当开始写程序时发现有很多不同,也遇到了比较困难的问题,要让计数单位为1秒,脉冲还要比较快,脉冲的选择和分频就是一个重要问题。
还有时的高低位如何在数码管上显示出来的问题,因为时是二十四进制的,自己想了很久也没有办法解决,后来请教同学,经同学点拨,采用分段赋值的方法让时的地高位分别显示。
觉得自己还是思维方式太狭窄,解决问题的方法太单一,以后要扩展思维,一条路行不通就换另一种方法,也许会更简单。
总的来说,本次设计受益匪浅,一方面巩固了EDA所学知识,另一方面对自己的思维方式也有一些反思。
七、附录电子表源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity dzb isport (clk:in std_logic;en:in std_logic; ---置数开关p:in std_logic_vector(2 downto 0);--置数选择x:in std_logic_vector(3 downto 0);--置数值sel:out std_logic_vector(2 downto 0); ---扫描d:out std_logic_vector(6 downto 0));end dzb;architecture behaver of dzb issignal t:std_logic; --计数单位,即1秒signal num:integer range 0 to 9;--置数值signal n:integer range 0 to 10; --数码管显示值signal s0,s1,m0,m1,h0,h1:integer range 0 to 10;--秒,分,时signal h:integer range 0 to 23;signal c0,c1,c2,c3:std_logic; ---进位信号signal w:std_logic_vector(2 downto 0); --位选begin------分频----fenpin:process(clk) isvariable count:std_logic_vector(9 downto 0);beginif clk'event and clk='1' thencount:=count+1;end if;t<=count(9);end process;-----秒低位--------ss0:process(t) isbeginif t'event and t='1' thenif en='0' thenif s0=9 then s0<=0;c0<='1'; ---进位else s0<=s0+1;c0<='0';end if;elsif en='1' and p="001" then s0<=num; end if;end if;end process;-------秒高位----ss1:process(c0) isbeginif c0'event and c0='1' thenif en='0' thenif s1=5 then s1<=0;c1<='1'; ---进位else s1<=s1+1;c1<='0';end if;elsif en='1' and p="010" then s1<=num; end if;end if;end process;-------分低位-------mm0:process(c1) isbeginif c1'event and c1='1' thenif en='0' thenif m0=9 then m0<=0;c2<='1'; ---进位else m0<=m0+1;c2<='0';end if;elsif en='1' and p="011" then m0<=num; end if;end if;end process;--------分高位-----mm1:process(c2) isbeginif c2'event and c2='1' thenif en='0' thenif m1=5 then m1<=0;c3<='1'; ---进位else m1<=m1+1;c3<='0';end if;elsif en='1' and p="100" then m1<=num; end if;end if;end process;---------时----hh:process(c3,h) isbeginif c3'event and c3='1' thenif h=23 then h<=0;else h<=h+1;end if;end if;case h iswhen 0 to 9 =>h1<=0;h0<=h;when 10 to 19 =>h1<=1;h0<=h-10;when 20 to 23 =>h1<=2;h0<=h-20;when others =>null;end case;end process;-------置数----------zhizhu:process(x) isbegincase x iswhen "0000"=>num<=0;when "0001"=>num<=1;when "0010"=>num<=2;when "0011"=>num<=3;when "0100"=>num<=4;when "0101"=>num<=5;when "0110"=>num<=6;when "0111"=>num<=7;when "1000"=>num<=8;when "1001"=>num<=9;when others=>null;end case;end process;----数码管位选-----weixuan:process(clk,w) isbeginif clk'event and clk='1' then if w="111" then w<="000"; elsew<=w+1;end if;end if;case w iswhen "000"=>n<=s0;when "001"=>n<=s1;when "010"=>n<=10;when "011"=>n<=m0;when "100"=>n<=m1;when "101"=>n<=10;when "110"=>n<=h0;when "111"=>n<=h1;when others=>null;end case;end process;sel<=w;-------数码管段选------- duanxuan:process(n) isbegincase n is --gfedcbawhen 0=>d<="0111111"; ----0 when 1=>d<="0000110"; ----1 when 2=>d<="1011011"; ----2 when 3=>d<="1001111"; ----3 when 4=>d<="1100110"; ----4 when 5=>d<="1101101"; ----5 when 6=>d<="1111101"; ----6 when 7=>d<="0000111"; ----7 when 8=>d<="1111111"; ----8 when 9=>d<="1101111"; ----9 when 10=>d<="1000000"; ----_ when others=>null;end case;end process;end architecture behaver;。