用VHDL语言实现数字电子钟的设计(EDA课程设计报告 含源程序)
用VHDL语言实现数字电子钟的设计(EDA课程设计报告-含源程序)
课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:电子 0901学号: XXXXXXXX姓名:XXXXXXXXX指导教师:XXXXXXXXX设计时间:现代电子设计技术的核心已转向基于计算机的电子设计自动化技术,即EDA (Electronic Design Automation)技术。
EDA技术就是依赖计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
EDA技术使得设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
硬件描述语言是EDA技术的重要组成部分,常见的HDL语言有VHDL、Verilog、HDL、ABLE、AHDL、System Verilog和System C。
其中VHDL、Verilog在现在的EDA设计中使用最多,也拥有几乎所有主流EDA工具的支持。
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化硬件设计任务,提高了设计效率和可靠性。
在这次设计中,主要使用VHDL语言输入。
此次设计很好地完成了数字钟的定时、切换显示年月日和时分秒的功能,完成了小型FPGA的设计开发,锻炼了动手实践能力,达到了课程设计的目的。
关键词:EDA技术硬件描述语言VHDL 设计数字电子钟摘要 (2)1、课程设计目的 (4)2、课程设计内容及要求 (4)2.1 设计内容 (4)2.2 设计要求 (4)3、VHDL程序设计 (5)3.1 方案论证 (5)3.2 设计思路与方法 (6)3.2.1 设计思路 (6)3.2.2 设计方法 (7)4、仿真与分析 (7)5、器件编程下载及设计结果 (9)6、课程设计总结 (10)7、参考文献 (10)8、程序清单 (11)8.1 顶层模块 (11)8.2 秒脉冲模块 (13)8.3 数码管显示模块 (14)8.4 时分秒模块 (15)8.4.1 分秒模块 (16)8.4.2 小时模块 (18)8.5 年月日模块 (19)8.5.1 日期模块 (21)8.5.2 月份模块 (24)8.5.3 年份模块 (25)1、课程设计目的EDA技术课程设计在课程结束以后进行,在实践中验证理论知识,不仅是为了巩固课堂上所学知识,更是为了加深我们对EDA技术和VHDL语言的理解;为了让我们自己动手完成从设计输入、逻辑综合、功能仿真、设计实现到实现编程、时序仿真,一直到器件的下载测试的整个过程,真切感受利用EDA技术对FPGA进行设计开发的过程,锻炼和提高我们对器件的编程调试能力。
基于VHDL的数字电子时钟的设计
目录基于VHDL的数字电子时钟的设计.............................................................. 错误!未定义书签。
目录 .. (1)摘要 (2)引言 (2)一、设计分析 (3)1.1 设计要求 (3)1.2 性能指标及功能设计性能指标 (3)二、设计方案 (3)三、设计环境 (4)3.1 硬件设计环境 (4)3.1.1 可编程器件EP2C5Q208C8N 及开发板系统 (5)3.1.2 64位的计算机一台 (5)3.2 软件设计环境 (5)3.2.1 QuartusⅡ软件开发平台(8.0版本) (5)3.2.2 Windows7操作系统 (5)3.2.3 硬件描述语言VHDL (5)四、整体设计流图 (7)4.1 各模块的原理性功能介绍 (7)4.1.1 可编程器件EP2C5Q208C8N (7)4.1.2 CPLD-JTAG接口 (7)4.1.3 晶振和蜂鸣器 (7)4.1.4 LED数码管显示 (8)4.1.5 独立按键 (9)4.1.6 拨码开关 (9)4.1.7 QuartusⅡ软件开发平台(8.0版本) (9)4.2 设计的整体框架 (10)4.2.1在各个模块都编译通过的基础上在顶层用原理图的方法实现。
(10)4.2.2 设计原理及流程图 (11)4.2.3逻辑流程图 (12)4.2.4状态转移图 (13)五、系统的模块化设计 (13)5.1 软件程序模块化设计 (13)5.1.1 秒/分/时输入模块的软件设计 (13)5.1.2 秒/分/时计数模块的软件设计 (14)5.1.3 模式选择模块的软件设计 (14)5.1.4 数码管 (15)5.1.5 闹钟模块的软件设计 (16)5.1.5 系统时钟的软件设计 (18)5.2 硬件的测试 (20)5.2.1模拟时钟电路图与实物图 (20)设计心得 (23)致谢 (24)参考文献 (24)摘要随着人类的不断进步,现代电子设计技术已进入一个全新的阶段,传统的电子设计方法、工具和器件在更大的程度上被EDA所取代。
VHDL 语言设计数字时钟
数字时钟DIGITAL CLOCK电子信息科学与技术专业关键词:VHDL,设计,数字钟,应用电路英文关键词:VHDL; design; digital clock; application electro circuits摘要:以一款数字钟设计为例,较详细的介绍了如何用VHDL语言设计数字电路,并给出了部分程序、仿真波形图,并在MAX+plusII中进行编译、仿真、下载。
由此说明利用VHDL开发数字电路的优点。
英文摘要:By showing some program codes and emulational wave charts,the paper introduces the way to designdigital electro circuits with VHDL in details andgives us an example of designing a digital clock.Andit compiles,emulates and downloads them inMAX+plusII,which elucidates the advantages ofdeveloping digital electro circuits with VHDL引言20世纪末,数字电子技术得到了飞速发展,有力地推动和促进了社会生产力的发展和社会信息化的提高,数字电子技术的应用已经渗透到人类生活的各个方面。
从计算机到手机,从数字电话到数字电视,从家用电器到军用设备,从工业自动化到航天技术,都尽可能采用了数字电子技术。
现代电子设计技术的核心是EDA技术。
EDA(电子设计自动化)技术就是以计算机为工具,在EDA软件平台上,对硬件语言HDL为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、逻辑化简、逻辑综合及优化、逻辑仿真,直至对特定目标芯片的适配编译、逻辑映射和编程下载等工作(文本选用的开发工具为Altera公司的MAX+PLUSII)。
EDA课程设计报告(电子钟VHDL 设计)
EDA课程设计报告(电子钟VHDL 设计)作者:dang168 时间:2008-10-05E D A课程设计报告-----电子钟VHDL 设计一设计要求设计一个电子钟,要求可以显示时、分、秒,用户可以设置时间.二.实验目的1. 掌握多位计数器相连的设计方法。
2. 掌握十六进制,二十四进制,六十进制计数器的设计方法。
3. 掌握CPLD技术的层次化设计方法。
4. 了解软件的元件管理含义以及模块元件之间的连接概念。
5. 掌握电子电路一般的设计方法,并了解电子产品的研制开发过程,基本掌握电子电路安装和调试的方法。
6. 培养独立分析问题,解决问题的能力。
三.硬件要求1.8位8段扫描共阴极数码显示管。
2. 三个按键开关(清零,调小时,调分钟)。
四.设计原理数字钟是一个将“时”“分”“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时;显示满刻度为23时59分59秒,另外具备校时功能和报时功能。
因此,一个基本的数字钟电路主要由“时”“分”“秒”计数器校时电路组成。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累加60秒发送一个“分脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计数器,可实现对一天24小时的累计。
译码显示电路将“时”“分”“秒”计数器的输出状态六段显示译码器译码。
通过六位LED七段显示器显示出来。
校时电路器是用来对“时”“分”“秒”显示数字进行校时调整的。
在同一CPLD芯片口集成如下电路模块:1.电子钟计数采用层次化设计,将设计任务分成若干个模块。
规定每一模块的功能和各模块之间的接口。
(1)second(秒) 60进制BCD码计数(2)minute(分) 60进制BCD码计数(3)hour (时) 24进制BCD码计数(4)clock top 顶层设计同时整个计数器有清零,调时,调分功能。
2.端口引脚名称 输入 clk,reset,setmin,sethour 输出 second—daout,minute-daout,hour-daout五.设计原理图逻辑功能图:输入:CLK—时钟脉冲,RESET—复位信号,SETMIN—分加1信号,SETHOUR—秒加1信号输出:SECOND_DAOUT—秒输出,MINUTE_DAOUT—分输出,HOUR_DAOUT—时输出时序仿真:程序主要运用计数器完成,在时钟脉冲的作用下,完成时钟功能,由时序图可以看出每一个时钟脉冲上升沿秒加1,当接收到reset 信号,即reset为高电平,所有计数为零,并重新计数,setmin和sethour可以完成调节时钟功能,都是高电平调节,每来一个脉冲,相应的时或分加1。
电子钟eda课程设计vhdl
电子钟eda课程设计vhdl一、教学目标本课程旨在通过学习“电子钟EDA课程设计VHDL”,让学生掌握数字电路设计的基本原理和方法,学会使用硬件描述语言VHDL进行电子钟的设计与仿真,培养学生的实际动手能力和创新能力。
知识目标:使学生了解数字电路的基本组成原理,掌握VHDL语言的基本语法和编程技巧,理解电子钟的电路结构和设计方法。
技能目标:培养学生使用EDA工具进行数字电路设计的能力,能够独立完成电子钟的设计与仿真,提高学生的实际动手能力。
情感态度价值观目标:通过本课程的学习,培养学生对电子技术的兴趣,增强学生自主学习和探索的精神,提高学生解决实际问题的能力。
二、教学内容本课程的教学内容主要包括三部分:数字电路基本原理、VHDL硬件描述语言和电子钟设计实例。
1.数字电路基本原理:介绍数字电路的基本概念、逻辑门电路、组合逻辑电路、时序逻辑电路等。
2.VHDL硬件描述语言:讲解VHDL的基本语法、编程技巧,包括实体声明、端口声明、信号声明、过程声明等。
3.电子钟设计实例:以电子钟为例,讲解如何使用VHDL语言进行数字电路的设计与仿真,包括时钟发生器、分频器、秒脉冲发生器等模块的设计。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
1.讲授法:通过讲解基本原理和实例,使学生掌握数字电路设计和VHDL编程的基本知识。
2.案例分析法:分析电子钟设计实例,使学生了解实际设计过程中遇到的问题和解决方法。
3.实验法:安排实验室实践环节,让学生亲自动手进行电子钟的设计与仿真,提高学生的实际操作能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《数字电路设计与VHDL编程》等。
2.参考书:《VHDL入门与应用》、《数字电路实验教程》等。
3.多媒体资料:制作课件、教学视频等,以便于学生复习和巩固所学知识。
4.实验设备:计算机、EDA工具软件、实验室器件等,用于学生的实际操作和实验。
EDA-VHDL数字钟报告
《EDA技术》实验报告数字钟班级:电子与电气081学号:830702004姓名:陈海峰指导教师:张江伟老师地点:B07-306时间:校历9-10周目录一、摘要二、关键词三、数字钟设计要求四、基本理论知识了解五、实验目的六、实验器材七、实验内容——数字钟设计方案计数部分(1)VHDL语言设计的六十进制电路,模块及其波形(2)VHDL语言设计的二十四进制电路,模块及其波形动态显示部分(1)VHDL语言设计的四进制电路,模块及其波形(2)VHDL语言设计的2线-4线译码器(3)VHDL语言设计的数据选择器波形及其模块(4)VHDL语言七段译码器设计波形及模块数字钟总电路图八、实验总结九、参考资料一、摘要数字钟由计数器、译码器、显示器等部分构成,数字钟的时、分、秒实际上就是由一个24进制计数器(00-23),两个60进制计数器(00-59)级联构成。
利用Quartus II 6.0软件编写VHDL语言,编写六十进制、二十四进制;译码、显示部分用一个四进制,二-四译码器,数据选择器及七段译码器构成。
最后生成相对应的模块连接成数字钟电路图。
二、关键词VHDL语言、数字钟、计数器、动态显示、译码显示三、数字钟设计要求(1)正常模式时,采用24小时制设计有时、分、秒。
只显示时、分。
(2)应用VHDL语言设计时要有计数、数据选择、译码、显示等要求。
四、基本理论知识了解数字钟的功能实际上是对秒信号计数。
EDA-V硬件开发系统可提供不同的时钟信号,分频后可产生秒时钟。
数字钟在结构上可分为两个部分:计数器和显示器。
计数器又可分为秒计数器、分计数器和小时计数器;秒计数器和分计数器由两个六十进制构成,小时计数器由二十四进制计数器实现。
动态显示电路可用三态门构成的四选一数据选择器,和一个四进制加一个二四译码器,还有一个七段译码器7448组成。
三态门在选择了一个数码管的同时,打开一个三态门,其他的关闭。
进而实现数据选择。
如图1所示的用三态门实现动态显示的框图。
EDA数字时钟设计报告
EDA课程设计报告设计题目:数字时钟班级:姓名:学号:日期:一、系统设计要求设计一个具有整点报时功能的数字时钟,要求;1.具有时、分、秒的计数显示功能,24小时循环显示。
2.具有清零、预置初值功能,实现LED动态显示,整点报时采用声音报时。
3.采用元件例化方式实现各模块间的连接。
二、系统设计方案要设计的数字时钟具有基本的计时功能,采用二十四小时计时,显示时分秒,其中分钟和秒模块采用60进制计数器实现,小时模块则需要一24进制计数器实现。
要实现时钟预置初值功能分别设计一个分钟允许置数端和小时允许置数端。
要实现LED动态显示,单独设计一个显示模块。
整点报时采用隔秒响一声实六十进制计数器模块二十四进制计数器模块显示模块元器件例化模块三、主要VHDL源程序六十进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY liushijinzhi ISPORT(clk,clr,en,a: IN STD_LOGIC;load_1,load_10: IN STD_LOGIC_VECTOR(3 DOWNTO 0); co: OUT STD_LOGIC;q_10,q_1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END liushijinzhi;ARCHITECTURE behav OF liushijinzhi ISSIGNAL q1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q10:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c:STD_LOGIC;BEGINPROCESS(clk,clr,a,en,load_1)BEGINIF(clr='1') THENq1<="0000";ELSIF(a='1') THENq1<=load_1;ELSIF(clk'event AND clk='1') THENIF(en='1')thenIF(q1="1001") THENq1<="0000";c<='0';ELSIF(q1="1000") THENq1<=q1+'1';c<='1';ELSEq1<=q1+'1';c<='0';END IF;END IF;END IF;END PROCESS;PROCESS(c,clk,clr,a,load_10)BEGINIF(clr='1') THENq10<="0000";ELSIF(a='1') THENq10<=load_10;ELSIF (clk'event AND clk='1') THENIF(c='1') THENIF(q10="0101") THENq10<="0000";co<='1';ELSEq10<=q10+'1';co<='0';END IF;END IF;END IF;END PROCESS;PROCESS(q1)BEGINCASE q1 ISWHEN"0000"=>q_1<="1111110";WHEN"0001"=>q_1<="0110000";WHEN"0010"=>q_1<="1101101";WHEN"0011"=>q_1<="1111001";WHEN"0100"=>q_1<="0110011";WHEN"0101"=>q_1<="1011011";WHEN"0110"=>q_1<="0011111";WHEN"0111"=>q_1<="1110000";WHEN"1000"=>q_1<="1111111";WHEN"1001"=>q_1<="1110011";WHEN OTHERS=>q_1<="ZZZZZZZ";END CASE;END PROCESS;PROCESS(q10)BEGINCASE q10 ISWHEN"0000"=>q_10<="1111110";WHEN"0001"=>q_10<="0110000";WHEN"0010"=>q_10<="1101101";WHEN"0011"=>q_10<="1111001";WHEN"0100"=>q_10<="0110011";WHEN"0101"=>q_10<="1011011";WHEN OTHERS=>q_10<="ZZZZZZZ";END CASE;END PROCESS;END behav;二十四进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ershisijinzhi ISPORT(clk,clr,en,a:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0); q_1,q_10:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ershisijinzhi;ARCHITECTURE behav OF ershisijinzhi ISSIGNAL c:STD_LOGIC;SIGNAL q1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q10:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,clr,en,a,load_1)BEGINIF(clr='1') THENq1<="0000";ELSIF (a='1') THENq1<=load_1;ELSIF(clk'event AND clk='1') THENIF(q1="0011" AND q10="0010") THENq1<="0000";ELSIF (en='1') THENIF(q1="1001") THENq1<="0000";c<='0';ELSIF(q1="1000") THENq1<=q1+'1';c<='1';ELSEq1<=q1+'1';c<='0';END IF;END IF;END IF;END PROCESS;PROCESS(clk,clr,c,a,q1,load_10)BEGINIF(clr='1') THENq10<="0000";ELSIF (a='1') THENq10<=load_10;ELSIF(clk'event AND clk='1') THENIF(q1="0011" AND q10="0010") THEN q10<="0000";ELSIF (c='1') THENIF(q10="0010") THENq10<="0000";ELSEq10<=q10+'1';END IF;END IF;END IF;END PROCESS;PROCESS(q1)BEGINCASE q1 ISWHEN"0000"=>q_1<="1111110"; WHEN"0001"=>q_1<="0110000"; WHEN"0010"=>q_1<="1101101"; WHEN"0011"=>q_1<="1111001";WHEN"0100"=>q_1<="0110011";WHEN"0101"=>q_1<="1011011";WHEN"0110"=>q_1<="0011111";WHEN"0111"=>q_1<="1110000";WHEN"1000"=>q_1<="1111111";WHEN"1001"=>q_1<="1110011";WHEN OTHERS=>q_1<="ZZZZZZZ";END CASE;END PROCESS;PROCESS(q10)BEGINCASE q10 ISWHEN"0000"=>q_10<="1111110";WHEN"0001"=>q_10<="0110000";WHEN"0010"=>q_10<="1101101";WHEN OTHERS=>q_10<="ZZZZZZZ";END CASE;END PROCESS;END behav;显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY qdmkz ISPORT(clk,clr:IN STD_LOGIC;din1,din2,din3,din4,din5,din6:IN STD_LOGIC_VECTOR(6 DOWNTO 0); sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END qdmkz;ARCHITECTURE behav OF qdmkz ISSIGNAL q :STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINsel<=q;PROCESS(clk,clr)BEGINIF(clr='1') THENq<="101";ELSIF(clk'event AND clk='1') THENIF(q="000") THENq<="101";ELSEq<=q-'1';END IF;END IF;END PROCESS;PROCESS(q,din1,din2,din3,din4,din5,din6)BEGINCASE q ISWHEN "101"=>num<=din1;WHEN "100"=>num<=din2;WHEN "011"=>num<=din3;WHEN "010"=>num<=din4;WHEN "001"=>num<=din5;WHEN "000"=>num<=din6;WHEN OTHERS=>num<="ZZZZZZZ";END CASE;END PROCESS;END behav;元器件例化模块含报时LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shuzishizhong ISPORT(clk1,clk2,clrh,clrm,clrs,clr,ah,am,as,en:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);alm:OUT STD_LOGIC);END shuzishizhong;ARCHITECTURE one OF shuzishizhong ISCOMPONENT liushijinzhi ISPORT(clk,clr,en,a: IN STD_LOGIC;load_1,load_10: IN STD_LOGIC_VECTOR(3 DOWNTO 0);co: OUT STD_LOGIC;q_10,q_1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT ershisijinzhi ISPORT(clk,clr,en,a:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q_1,q_10:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT qdmkz ISPORT(clk,clr:IN STD_LOGIC;din1,din2,din3,din4,din5,din6:IN STD_LOGIC_VECTOR(6 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;SIGNAL co1,co2:STD_LOGIC;SIGNAL sq_1,sq_10,mq_1,mq_10,hq_1,hq_10:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINu1:liushijinzhi PORT MAP (clk1,clrs,en,as,load_1,load_10,co1,sq_10,sq_1);u2:liushijinzhi PORT MAP (co1,clrm,en,am,load_1,load_10,co2,mq_10,mq_1);u3:ershisijinzhi PORT MAP (co2,clrh,en,ah,load_1,load_10,hq_1,hq_10);u4:qdmkz PORT MAP(clk2,clr,hq_10,hq_1,mq_10,mq_1,sq_10,sq_1,sel,num);PROCESS(sq_10,sq_1,mq_10,mq_1,hq_10,hq_1)BEGINIF(((hq_10="1111110" AND hq_1="1111110")OR(hq_10="0110000" AND hq_1="1101101")) AND mq_1="1111110"AND mq_10="1111110" AND ((sq_10="1111110"AND(sq_1="1111110"OR sq_1="1101101"OR sq_1="0110011"OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND(sq_1="1111110"OR sq_1="1101101"OR sq_1="0110011"OR sq_1="0011111"OR sq_1="1111111")) OR(sq_10="1101101"AND(sq_1="1111110"OR sq_1="1101101")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0110000") OR (hq_10="0110000" AND hq_1="1111001")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND sq_1="1111110") THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1101101") OR (hq_10="0110000" AND hq_1="0110011")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1111001") OR (hq_10="0110000" AND hq_1="1011011")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0110011") OR (hq_10="0110000" AND hq_1="0011111")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1011011") OR (hq_10="0110000" AND hq_1="1110000")) AND mq_1="1111110"AND mq_10="1111110"AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0011111") OR (hq_10="0110000" AND hq_1="1111111")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND sq_1="1111110"))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1110000") OR (hq_10="0110000" AND hq_1="1110011")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1111111") OR (hq_10="1101101" AND hq_1="1111110")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1110011") OR (hq_10="1101101" AND hq_1="0110000")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111")))) THENalm<='1';ELSIF(((hq_10="0110000" AND hq_1="1111110") OR (hq_10="1101101" AND hq_1="1101101")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111" OR sq_1="1111111")))) THENalm<='1';ELSIF(((hq_10="0110000" AND hq_1="0110000") OR (hq_10="1101101" AND hq_1="1111001")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111" OR sq_1="1111111"))OR(sq_10="1101101"AND sq_1="1111110"))) THENalm<='1';ELSEalm<='0';END IF;END PROCESS;END;四、系统仿真/硬件验证五、设计中遇到的问题与体会在置数方面,第一次写时,在时钟沿内,同步置数,下载在试验箱上很难实现,于是把置数改成异步置数。
EDA数字钟课程设计--用VHDL语言实现数字钟的设计
课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:电子1002班学号:20102625姓名:于晓指导教师:李世平、李宁设计时间:2012年12月摘要数字钟是一种用数字电路技术实现时、分、秒计时的钟表。
本设计主要是实现数字钟的功能,程序用VHDL语言编写,整体采用TOP-TO-DOWN设计思路,具有基本的显示年月日时分秒和星期的功能,此外还有整点报时功能。
该数字钟的实现程序分为顶层模块、年月模块、日模块、时分秒定时模块、数码管显示模块、分频模块、星期模块,此外还有一个库。
该程序主要是用了元件例化的方法,此外还有进程等重要语句。
没有脉冲时,显示时分秒,set按钮产生第一个脉冲时,显示年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7、8个脉冲到来时分别可预置日期、时、分、秒、星期,第 9个脉冲到来时设置星期后预置结束,正常工作,显示的是时分秒和星期。
调整设置通过Up来控制,UP为高电平,upclk有脉冲到达时,预置位加1,否则减1。
当整点到达时,报时器会鸣响,然后手动按键停止报时。
关键词:数字钟,VHDL,元件例化,数码管1、课程设计目的掌握利用可编程逻辑器件和EDA设计工具进行电子系统设计的方法2、课程设计内容及要求设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。
用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。
Up为高电平时,upclk有脉冲到达时,预置位加1.否则减1,还可以在此基础上增加其它功能。
3、VHDL程序设计3.1整体设计思路本设计采用top-down 模式设计,分模块进行,各功能都使用元件例化方式设计,主要有LED显示模块、时分秒定时模块、日期模块、年月模块、分频模块、星期模块,此外还创建了一个程序包,用来实现年月日、时分秒的加减调整。
vhdl实验报告--数字钟
VHDL实验报告一、实验目的1、设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分。
2、通过复杂实验,进一步加深对VHDL语言的掌握程度。
二、实验原理数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分为模60计数器,小时是模24计数器,分别产生3位BCD码。
BCD码经译码,驱动后接数码管显示电路。
秒模60计数器的进位作为分模60计数器的时钟,分模60计数器的进位作为模24计数器的时钟。
为了实现手动调整时间,在外部增加了setm(调整分),seth(调整时)按键,当这两个按键为低电平时,电路正常计时,当为高电平时,分别调整分,时。
同时在外部还增加了一个清零按键clr.和消抖动电路。
三、实验步骤1、单元模块设计部分1)消抖动电路关键部分signal key_in1,key_in2:std_logic:='0';beginprocess(clk,key_in)beginif clk'event and clk='1' thenkey_in1<=key_in;key_in2<=key_in1;if key_in='1' and key_in1='1' and key_in2='1' then key_out<='1';else key_out<='0';end if;2) 模60计数器程序关键部分:signal md_temp,mg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr)beginif clr='1' thenmd_temp<="0000"; mg_temp<="0000";elsif set='1' thenmd_temp<=setl; mg_temp<=seth;elsif clk'event and clk='1' thenif md_temp="1001" thenmd_temp<="0000";mg_temp<=mg_temp+'1';else md_temp<=md_temp+'1';if md_temp="1001" and mg_temp="0101" thenmd_temp<="0000";mg_temp<="0000";2、模24计数器程序关键部分signal hd_temp,hg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr,set,setl,seth)isbeginif set='1' then hd_temp<=setl; hg_temp<=seth;elsif clr='1' then hd_temp<="0000"; hg_temp<="0000";elsif clk'event and clk='1' thenif hg_temp="0010" and hd_temp="0011" thenhd_temp<="0000"; hg_temp<="0000";elsif hd_temp="1001" thenhg_temp<=hg_temp+'1' hd_temp<="0000";else hd_temp<=hd_temp+'1';end if;end if;end process ;3、清零和调时部分显示部分关键程序process (sd,sg,md,mg,hd,hg)begincase sd iswhen "0000" =>sl<="1111110";when "0001" =>sl<="0110000";when "0010" =>sl<="1101101";when "0011" =>sl<="1111001";when "0100" =>sl<="0110011";when "0101" =>sl<="1011011";when "0110" =>sl<="1011111";when "0111" =>sl<="1110000";when "1000" =>sl<="1111111";when "1001" =>sl<="1111011";when others =>sl<="0000000";end case;if clk_g'event and clk_g='1' thenif sel="101" thensel<="000";else sel<=sel+'1';end if;end if;process(sel,sd,sl,sg,sh,md,ml,mg,mh,hd,hl,hg,hh)begincase sel iswhen"000"=>led<=sl;led_which<=sd;when"001"=>led<=sh;led_which<=sg;when"010"=>led<=ml;led_which<=md;when"011"=>led<=mh;led_which<=mg;when"100"=>led<=hl;led_which<=hd;when"101"=>led<=hh;led_which<=hg;when others=>led<="0000000";led_which<="0000";end case;4、顶层文件关键程序port(clk,clk_g:in std_logic;-----clk_g是用在数码管显示里面的信号clr: in std_logic;------clr=1时清零setm,seth:in std_logic;---------setm为1时调分,seth为1时调时setd,setg:in std_logic_vector(3 downto 0);----调整时间的时候,setd调整的是低位setg 调整高位led:out std_logic_vector(6 downto 0);sel_out: out std_logic_vector(2 downto 0);led_which: out std_logic_vector(3 downto 0));---输出的是秒分时的哪一个beginu1:de_shake port map (clk=>clk,key_in=>clr,key_out=>clro);u2:de_shake port map (clk=>clk,key_in=>setm,key_out=>setmo);u3:de_shake port map (clk=>clk,key_in=>seth,key_out=>setho);u4:s60 port map (clk=>clk,clr=>clro,sd=>sdl,sg=>sgh,fenmaichong=>fenmaichong o);u5:m60 port map (clk=>fenmaichongo,clr=>clro,md=>mdl,mg=>mgh,xiaoshimaichong=> xiaoshimaichongo,setl=>setd,seth=>setg,set=>setmo);u6:h24 port map (clk=>xiaoshimaichongo,clr=>clro,hd=>hdl,hg=>hgh,set=>setho,se tl=>setd,seth=>setg);u7:led_xs port map (clk_g=>clk_g,sd=>sdl,sg=>sgh,md=>mdl,mg=>mgh,hd=>hdl, hg=>hgh,led=>led,sel_out=>sel_out,led_which=>led_which);四、实验结果及分析本设计,满足了本次试验设计的任务要求,能显示时分秒,并且可以手动调节分和时。
EDA电子钟多功能数字时钟课程设计(含代码)[优秀]
多功能数字时钟设计说明:1.系统顶层框图:各模块电路功能如下:1.秒计数器、分计数器、时计数器组成最基本的数字钟,其计数输出送7段译码电路由数码管显示.2.基准频率分频器可分频出标准的1HZ频率信号,用于秒计数的时钟信号;分频出4HZ频率信号,用于校时、校分的快速递增信号;分频出64HZ频率信号,用于对按动“校时”,“校分”按键的消除抖动.2.多功能数字钟结构框图:一、系统功能概述已完成功能1.完成时/分/秒的依次显示并正确计数,利用六位数码管显示;2.时/分/秒各段个位满10正确进位,秒/分能做到满60向前进位,有系统时间清零功能;3.定时器:实现整点报时,通过扬声器发出高低报时声音;4.时间设置,也就是手动调时功能:当认为时钟不准确时,可以分别对分/时钟进行调整;5.闹钟:实现分/时闹钟设置,在时钟到达设定时间时通过扬声器响铃.有静音模式.待改进功能:1. 系统没有万年历功能,正在思考设计方法.2. 应添加秒表功能.二、系统组成以及系统各部分的设计1.时计数模块时计数模块就是一个2位10进制计数器,记数到23清零.VHDL的RTL描述如下:----cnt_h.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt_h isport(en,clk,clr:in std_logic;dout:out std_logic_vector(7 downto 0);c:out std_logic);end cnt_h;architecture rtl of cnt_h issignal t:std_logic_vector(7 downto 0);beginprocess(en,clk,clr)variable t:std_logic_vector(7 downto 0);beginif en='1' then --异步使能if clk 'event and clk='1' thent:=t+1;if t(3 downto 0)=X"A" then --个位等于10则十位加1t(7 downto 4):=t(7 downto 4)+1;t(3 downto 0):=X"0"; --个位清零end if;if t>X"23" then --大于23清零t:=X"00";end if;end if;if clr='1' then --异步清零t:=X"00";end if;end if;dout<=t;end process;end rtl;时计数器模块仿真波形如下从仿真波形可知,当计数到23时,下一个时钟上升沿到来时就清零了,符合设计要求.时计数模块框图如下2.分及秒计数模块分及秒计数模块也是一个2位10进制计数器,记数到59清零.VHDL的RTL描述如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt_s isport(en,clk,clr:in std_logic;dout:buffer std_logic_vector(7 downto 0);c:out std_logic);end cnt_s;architecture rtl of cnt_s isbeginprocess(en,clk,clr)beginif en='1' thenif clr='1' then --异步清零dout<=X"00";elsif clk 'event and clk='1' thenif dout(3 downto 0)<9 thendout(3 downto 0)<=dout(3 downto 0)+1;c<='0';elsif dout(7 downto 4)<5 thendout(3 downto 0)<=X"0";dout(7 downto 4)<=dout(7 downto 4)+1;elsedout<=X"00";c<='1';end if;end if;else dout<="ZZZZZZZZ";end if;end process;end rtl;分和秒计数器模块仿真波形如下从仿真波形可知,当计数到59时,下一个时钟上升沿到来时就清零了,并且产生进位信号,符合设计要求.分和秒计数模块框图如下3.按键消抖动模块按键消抖动有很多方案,这里选择的是计数消抖,即只当有效电平到来后开始计数,当计数值大于一定值后再输出该有效电平,否则不输出,从而达到消抖目的. VHDL的RTL描述如下:library ieee;use ieee.std_logic_1164.all;entity haoin isport(din,clk:in std_logic;dout:out std_logic); end haoin;architecture rtl of haoin isbeginprocess(din)variable t: integer range 0 to 63:=0;beginif din='1' thenif clk 'event and clk='1'thent:=t+1;if t>10 thendout<='1';t:=t-1;else dout<='0';end if;end if;else dout<='0';t:=0;end if;end process;end rtl;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ring isport(clk: in std_logic;clk500: in std_logic;clk1k:in std_logic;beep:out std_logic);end ring;architecture rtl of ring isbeginprocess(clk)variable t: std_logic;variable n: integer range 0 to 15:=0;beginif clk 'event and clk='1' thent:=not t;n:=n+1;end if;if t='1' and n<11 thenbeep<=clk500;elsif n=11 thenbeep<=clk1k;else beep<='Z';end if;end process;end rtl;library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity clock isport(SA: in std_logic;SB: in std_logic;SC: in std_logic;SD: in std_logic;clk1: in std_logic;dout: buffer std_logic_vector(23 downto 0);--seg_data:out std_logic_vector(7 downto 0);--seg_co米:out std_logic_vector(3 downto 0);beep: out std_logic--led:out std_logic_vector(3 downto 0));end entity clock;architecture rtl of clock isco米ponent cnt_s isport(en,clk,clr:in std_logic;dout:buffer std_logic_vector(7 downto 0);c:out std_logic);end co米ponent;co米ponent cnt_h isport(en,clk,clr:in std_logic;dout:buffer std_logic_vector(7 downto 0));end co米ponent;--co米ponent seg米ain is--port(clk,reset_n:in std_logic;--datain:in std_logic_vector(15 downto 0);--seg_data:out std_logic_vector(7 downto 0);--seg_co米:out std_logic_vector(3 downto 0));--end co米ponent;--co米ponent ring is--port( en: in std_logic;-- clk: in std_logic;--clk500: in std_logic;--clk1k:in std_logic;--beep:out std_logic);--end co米ponent;co米ponent haoin isport(din,clk:in std_logic;dout:out std_logic);end co米ponent;co米ponent naoling isport (h,米:in std_logic_vector(7 downto 0);clk4hzh,clk4hz米:in std_logic;sys_en,sys_rst:in std_logic;h_o,米_o: out std_logic_vector(7 downto 0);beep:out std_logic);end co米ponent;signal reg_h:std_logic_vector(7 downto 0);signal reg_米:std_logic_vector(7 downto 0);signal reg_s:std_logic_vector(7 downto 0);signal reg_米_s:std_logic_vector(7 downto 0):=X"59"; signal reg_米_米:std_logic_vector(7 downto 0):=X"59";signal reg_米_h:std_logic_vector(7 downto 0):=X"59";signal clk_h:std_logic;signal clk_米:std_logic;signal clk_s:std_logic;signal c_s :std_logic;signal c_米:std_logic;signal c_h :std_logic;signal sys_clk1:std_logic;signal sys_clk4:std_logic;signal sys_clk64:std_logic;signal sys_clk500:std_logic;signal sys_clk1k:std_logic;signal clki:integer:=750000;signal sys_rst:std_logic:='0';signal sys_en:std_logic:='1';signal clk_ring,米h:std_logic;signal SAc,SBc,SCc,SDc:std_logic;signal en_r:std_logic;signal NL_reg_h,NL_reg_米:std_logic_vector(7 downto 0);signal NL_ring:std_logic;signal sys_clk4_NL_h,sys_clk4_NL_米:std_logic;beginh:cnt_h port 米ap(en=>sys_en,clk=>clk_h,clr=>sys_rst,dout=>reg_h);米:cnt_s port 米ap(en=>sys_en,clk=>clk_米,clr=>sys_rst,dout=>reg_米,c=>c_米);s:cnt_s port 米ap(en=>sys_en,clk=>sys_clk1,clr=>SCc,dout=>reg_s,c=>c_s);--sled:seg米ain port 米ap(clk=>clk1,reset_n=>SCc,seg_data=>seg_data,seg_co 米=>seg_co米,datain=>dout(15 downto 0));--ring0:ring port 米ap(en=>en_r,clk=>clk_ring,clk500=>sys_clk500,clk1k=>sys_clk1k,beep=>beep); haoin1:haoin port 米ap( SA,sys_clk64,SAc);haoin2:haoin port 米ap( SB,sys_clk64,SBc);haoin3:haoin port 米ap( SC,sys_clk64,SCc);haoin4:haoin port 米ap( SD,sys_clk64,SDc);NL:naoling port 米ap(beep=>NL_ring,h=>reg_h,米=>reg_米,clk4hzh=>sys_clk4_NL_h,clk4hz米=>sys_clk4_NL_米,sys_en=>sys_en,sys_rst=>sys_rst,h_o=>NL_reg_h,米_o=>NL_reg_米);beep<=clk_ring and 米h;--led<=reg_s(3 downto 0);p_sys_clk:process(clk1)variable t1,t4,t64,t500,t1k:integer range 0 to 50000000;beginif clk1 'event and clk1='1' thent1:=t1+1;t4:=t4+1;t64:=t64+1;t500:=t500+1;t1k:=t1k+1;if t1=clki/2 thent1:=0;sys_clk1<=not sys_clk1;end if;if t4=clki/8 thent4:=0;sys_clk4<=not sys_clk4;end if;if t64=clki/128 thent64:=0;sys_clk64<=not sys_clk64;end if;if t500=clki/1000 thent500:=0;sys_clk500<=not sys_clk500;end if;if t1k=clki/2000 thent1k:=0;sys_clk1k<=not sys_clk1k;end if;end if;end process p_sys_clk;p_c:process(SAc,SBc,SCc,SDc)beginif SAc='1' and SDc='0' thenclk_h<=sys_clk4;elseclk_h<=c_米;end if;if SAc='1' and SDc='1' thensys_clk4_NL_h<=sys_clk4;elsesys_clk4_NL_h<='0';end if;if SBc='1' and SDc='0'thenclk_米<=sys_clk4;elseclk_米<=c_s;end if;if SBc='1' and SDc='1'thensys_clk4_NL_米<=sys_clk4;elsesys_clk4_NL_米<='0';end if;if SDc='0' thendout(7 downto 0)<=reg_s;dout(15 downto 8)<=reg_米;dout(23 downto 16)<=reg_h;elsedout(7 downto 0)<="ZZZZZZZZ";dout(15 downto 8)<=NL_reg_米;dout(23 downto 16)<=NL_reg_h;end if;end process p_c;P_ring:process(reg_米,reg_s,sys_clk1k)variable clk_ring_t:std_logic;variable t:std_logic_vector(3 downto 0);beginif reg_米=X"59" and (reg_s=X"50" or reg_s=X"52" or reg_s=X"54" or reg_s=X"56" or reg_s=X"58") thenclk_ring_t:=sys_clk500;elsif reg_米=X"00" and reg_s=X"00" thenclk_ring_t:=sys_clk1k;else clk_ring_t:='Z';end if;if NL_ring='1' thenclk_ring_t:=sys_clk1k;end if;if sys_clk1k 'event and sys_clk1k='1' thent:=t+1;end if;if t>1 then 米h<='1';end if;clk_ring<=clk_ring_t;end process p_ring;end rtl;。
基于-VHDL语言实现数字电子钟设计
基于VHDL语言实现数字电子钟的设计一.设计要求:1、设计容选用适宜的可编程逻辑器件及外围电子元器件,设计一个数字电子钟,利用EDA软件〔QUARTUS Ⅱ〕进展编译及仿真,设计输入可采用VHDL硬件描述语言输入法〕和原理图输入法,并下载到EDA实验开发系统,连接外围电路,完成实际测试。
2、设计要求〔1〕具有时、分、秒计数显示功能。
〔2〕具有清零的功能,且能够对计时系统的小时、分钟进展调整。
〔3〕小时为十二小时制。
二.实验目的:1.通过这次EDA设计中,提高手动能力。
2.深入了解时事时钟的工作原理,以及时事时钟外围硬件设备的组成。
3.掌握多位计数器相连的设计方法。
4.掌握十进制,六进制,二十四进制计数器的设计方法。
5.继续稳固多位共阴极扫描显示数码管的驱动,及编码。
6.掌握扬声器的驱动。
7.LED灯的把戏显示。
8.掌握CPLD技术的层次化设计方法三.实验方案:数字系统的设计采用自顶向下、由粗到细, 逐步分解的设计方法, 最顶层电路是指系统的整体要求, 最下层是具体的逻辑电路的实现。
自顶向下的设计方法将一个复杂的系统逐渐分解成假设干功能模块, 从而进展设计描述, 并且应用EDA 软件平台自动完成各功能模块的逻辑综合与优化, 门级电路的布局, 再下载到硬件中实现设计。
因此对于数字钟来说首先是时分秒的计数功能,然后能显示,附带功能是清零、调整时分。
通过参考EDA 课程设计指导书,现有以下方案:1.作为顶层文件有输入端口:时钟信号,清零按键,调时按键,调分按键;输出端口有:用于接数码管的八段码输出口,扫描用于显示的六个数码管的输出口。
2.底层文件分为:〔1〕时间计数模块。
分秒计数模块计数为60计数,时计数模块为12计数。
〔2〕显示模块。
显示模块由一个六进制计数器模块和一个七段译码器组成。
进制计数器为六选一选择器的选择判断端提供输入信号, 六选一选择器的选择输出端分别接秒个位、秒十位、分个位、分十位和时个位、时十位的选通位用来完成动态扫描显示,同时依次输出秒个位、秒十位、分个位、分十位和时个位、时十位数向给译码模块。
EDA课程设计报告之数字时钟设计(免费哦~)
计算机科学与技术学院EDA课程设计报告设计题目:数字时钟的设计班级:姓名:学号:日期:2011年6月20日一、系统设计要求1、具有时、分、秒的计数显示功能,24小时循环显示。
2、具有异步清零、预置初值功能,实现LED动态显示,整点报时采用声音报时,几点报几下。
3、采用元件例化方式实现各模块间的连接。
二、系统设计方案1、整个模块采用两个时钟,一个时钟的频率为一秒,用于程序秒的输入。
另一个时钟频率较高,用于七段显示器的选择端口三八译码器的输入时钟。
2、时分秒皆采用两个位的计数,一位代表十位,一位代表个位。
分秒为60进制,时为24进制。
个位逢九向十位进一,秒逢59向分进一,分逢59向时进一。
3、在小时的子程序里把两位小时数转换成一位数作为报时程序的输入。
三、主要VHDL源程序秒—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SECOND ISPORT (CLK1,R:IN STD_LOGIC;CO1:OUT STD_LOGIC;S0,S1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ;ARCHITECTURE XIA OF SECOND ISBEGINPROCESS(CLK1,R,SS0,SS1)VARIABLE SSS0,SSS1:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF R='1' THEN SSS0:="";SSS1:="";ELSIF CLK1'EVENT AND CLK1='1' THENIF SSS1="" AND SSS0=""THEN CO1<='1';SSS0:=""; SSS1:="";ELSIF SSS0="" THEN SSS0:="";SSS1:=SSS1+1;ELSE SSS0:=SSS0+1;CO1<='0';END IF;END IF;S0<=SSS0;S1<=SSS1;END PROCESS;END ;分—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY MINUTE ISPORT (CLK2,R,S:IN STD_LOGIC;MM0,MM1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);CO2:OUT STD_LOGIC;M0,M1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ;ARCHITECTURE XIA OF MINUTE ISBEGINPROCESS(CLK2,R,S,MM0,MM1)VARIABLE MMM0,MMM1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF R='1' THEN MMM0:="0000";MMM1:="0000";ELSIF S='1' THEN MMM0:=MM0;MMM1:=MM1;ELSIF CLK2'EVENT AND CLK2='1' THENIF MMM1="0101" AND MMM0="1001"THEN CO2<='1';MMM0:="0000"; MMM1:="0000";ELSIF MMM0="1001" THEN MMM0:="0000";MMM1:=MMM1+1;CO2<='0'; ELSE MMM0:=MMM0+1;CO2<='0';END IF;END IF;M0<=MMM0;M1<=MMM1;END PROCESS;END ;时—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.std_logic_unsigned.all;ENTITY HOUR ISPORT (CLK3,R,S:IN STD_LOGIC;HH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);HH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);H1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);NUMBER2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ;ARCHITECTURE XIA OF HOUR ISBEGINPROCESS(CLK3,R,S,HH0,HH1)VARIABLE HHH0:STD_LOGIC_VECTOR(3 DOWNTO 0);VARIABLE HHH1:STD_LOGIC_VECTOR(1 DOWNTO 0);VARIABLE NUMBER1,NUMBER0:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF R='1' THEN HHH0:="0000";HHH1:="00";ELSIF S='1' THEN HHH0:=HH0;HHH1:=HH1;ELSIF CLK3'EVENT AND CLK3='1' THENIF HHH0="0011" AND HHH1="10"THEN HHH0:="0000";HHH1:="00";ELSIF HHH0="1001" THEN HHH1:=HHH1+1;HHH0:="0000"; ELSE HHH0:=HHH0+1;END IF;END IF;H0<=HHH0;H1<=HHH1;IF HHH1="00" THEN NUMBER0:="";ELSIF HHH1="01" THEN NUMBER0:="";ELSIF HHH1="10" THEN NUMBER0:="";END IF;NUMBER1:=NUMBER0+HHH0;IF NUMBER1="" THEN NUMBER2<="";ELSIF NUMBER1>"" THEN NUMBER2<=NUMBER1-"";ELSE NUMBER2<=NUMBER1;END IF;END PROCESS;END ;报时—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY RING ISPORT(CLK4,CLK5:IN STD_LOGIC;NUMBER:IN STD_LOGIC_VECTOR(7 DOWNTO 0);P:OUT STD_LOGIC);END;ARCHITECTURE ONE OF RING ISBEGINPROCESS(CLK4,CLK5,NUMBER)VARIABLE R:STD_LOGIC;VARIABLE TEX:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK4='1' THENIF (NUMBER/=""AND TEX<NUMBER) THEN R:=CLK5;ELSE R:='0';END IF;IF CLK5'EVENT AND CLK5='1' THENIF TEX<NUMBER THENTEX:=TEX+1;END IF;END IF;ELSE TEX:="";END IF;P<=R;END PROCESS;END;显示—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dec7s ISPORT(a1,a2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);a3,a4,a5:IN STD_LOGIC_VECTOR(3 DOWNTO 0); a6:IN STD_LOGIC_VECTOR(1 DOWNTO 0);led7s1,led7s2,led7s3,led7s4,led7s5,led7s6 :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END;ARCHITECTURE one OF dec7s ISBEGINPROCESS(a1,a2,a3,a4,a5,a6)BEGINCASE a1 ISWHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN OTHERS=>led7s1<="";END CASE;CASE a2 ISWHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN OTHERS=>led7s2<="";END CASE;CASE a3 ISWHEN "0000"=>led7s3<="";WHEN "0001"=>led7s3<="";WHEN "0010"=>led7s3<="";WHEN "0011"=>led7s3<="";WHEN "0100"=>led7s3<="";WHEN "0101"=>led7s3<="";WHEN "0110"=>led7s3<="";WHEN "0111"=>led7s3<="";WHEN "1000"=>led7s3<="";WHEN "1001"=>led7s3<="";WHEN OTHERS=>led7s3<=""; END CASE;CASE a4 ISWHEN "0000"=>led7s4<="";WHEN "0001"=>led7s4<="";WHEN "0010"=>led7s4<="";WHEN "0011"=>led7s4<="";WHEN "0100"=>led7s4<="";WHEN "0101"=>led7s4<="";WHEN "0110"=>led7s4<="";WHEN "0111"=>led7s4<="";WHEN "1000"=>led7s4<="";WHEN "1001"=>led7s4<="";WHEN OTHERS=>led7s4<=""; END CASE;CASE a5 ISWHEN "0000"=>led7s5<="";WHEN "0001"=>led7s5<="";WHEN "0010"=>led7s5<="";WHEN "0011"=>led7s5<="";WHEN "0100"=>led7s5<="";WHEN "0101"=>led7s5<="";WHEN "0110"=>led7s5<="";WHEN "0111"=>led7s5<="";WHEN "1000"=>led7s5<="";WHEN "1001"=>led7s5<="";WHEN OTHERS=>led7s5<=""; END CASE;CASE a6 ISWHEN "00"=>led7s6<="";WHEN "01"=>led7s6<="";WHEN "10"=>led7s6<="";WHEN OTHERS=>led7s6<=""; END CASE;END PROCESS;END one;顶层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY TOP ISPORT (CP,CLK,R0,S0:IN STD_LOGIC;SM0,SM1,SH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);PP:OUT STD_LOGIC);END;ARCHITECTURE XIA OF TOP ISSIGNAL Y0,Y1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL Y2,Y3,Y4:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL Y5:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL YY6,YY1,YY2,YY3,YY4,YY5,YY7,PNUMBER:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CO11,CO22:STD_LOGIC;component SECONDPORT (CLK1,R:IN STD_LOGIC;CO1:OUT STD_LOGIC;S0,S1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;component MINUTEPORT (CLK2,R,S:IN STD_LOGIC;MM0,MM1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);CO2:OUT STD_LOGIC;M0,M1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));end component;component HOURPORT (CLK3,R,S:IN STD_LOGIC;HH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);HH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);H1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);NUMBER2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;component RINGPORT(CLK4,CLK5:IN STD_LOGIC;NUMBER:IN STD_LOGIC_VECTOR(7 DOWNTO 0);P:OUT STD_LOGIC);end component;component dec7sPORT(a1,a2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);a3,a4,a5:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a6:IN STD_LOGIC_VECTOR(1 DOWNTO 0);led7s1,led7s2,led7s3,led7s4,led7s5,led7s6:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;BEGINYY7<="";U1:SECOND PORT MAP(CLK1=>CLK,R=>R0,S0=>Y0,S1=>Y1,CO1=>CO11); U2:MINUTE PORT MAP(CLK2=>CO11,R=>R0,S=>S0,M0=>Y2,M1=>Y3,CO2=>CO22,MM0=>SM0,MM1=>SM1);U3:HOUR PORT MAP(CLK3=>CO22,R=>R0,S=>S0,H0=>Y4,H1=>Y5,HH0=>SH0,HH1=>SH1,NUMBER2=>PNUMBER);U4:RING PORT MAP(CLK4=>CO22,CLK5=>CLK,NUMBER=>PNUMBER,P=>PP); U5:dec7s PORT MAP(a1=>Y0,led7s1=>YY1,a2=>Y1,led7s2=>YY2,a3=>Y2,led7s3=>YY3,a4=>Y3,led7s4=>YY4,a5=>Y4,led7s5=>YY5,a6=>Y5,led7s6=>YY6);PROCESS(CP)VARIABLE SELL:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF CP'EVENT AND CP='1' THENIF SELL="111" THEN SELL:="000" ;ELSE SELL:=SELL+1;END IF;END IF;CASE SELL ISWHEN "000"=>Y<=YY1;WHEN "001"=>Y<=YY2;WHEN "010"=>Y<=YY3;WHEN "011"=>Y<=YY4;WHEN "100"=>Y<=YY5;WHEN "101"=>Y<=YY6;WHEN OTHERS=>Y<=YY7;END CASE;SEL<=SELL;END PROCESS;END;四、系统仿真/硬件验证五、设计中遇到的问题与体会自己想了哈。
VHDL数字时钟实验报告
VHDL数字时钟实验报告VHDL 数字时钟设计、实验目的:进一步练习VHDL语言设计工程的建立与仿真的步骤和方法、熟悉VHDL语言基本设计实体的编写方法。
同时,在已有知识的基础上,简单综合编写程序,仿制简单器械。
二、实验环境:PC个人计算机、Win dows XP操作系统、Quartus II集成开发环境软件。
三、设计要求:运用VHDL语言编写一个数字钟,具体要求:1.具有时、分、秒计数的十进制数字显示功能,以 24 小时循环计时。
2.具有手动调节小时,分钟的功能。
3.具有闹钟的功能,能够在设定的闹钟时间发出闹铃声。
四、实验步骤:1. 定义输入输出信号量port(clk:in std_logic; ---speak:out std_logic; ---dout:out std_logic_vector(7 downto0); - setclk:in std_logic_vector(2downto 0); -- d1,d2,d3,d4,d5,d6:out std_logic); --2. 定义结构体中的信号量signal sel:std_logic_vector(2 downto时钟铃-- 晶体管显示- 操作按钮六个晶体管signal hou1:std_logic_vector(3 downto0); -signal hou2:std_logic_vector(3downto 0);signal min1:std_logic_vector(3 downto0); signal min2:std_logic_vector(3时分秒的个位和十位signal seth1:std_logic_vector(3 downto 0); signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0); signal setm2:std_logic_vector(3 downto 0); signal sec1:std_logic_vector(3 downto0); signal sec2:std_logic_vector(3downto 0);signal h1:std_logic_vector(3 downto 0); signal h2:std_logic_vector(3 downto 0); signal m1:std_logic_vector(3 downto 0); signal m2:std_logic_vector(3 downto 0);signal s1:std_logic_vector(3 downto 0);signal s2:std_logic_vector(3 downto 0);signal sph1,sph2,spm1,spm2,sps1,sps2:std_logic_vector(3 downto 0);signal count_sec:std_logic_vector(9 downto 0);signal sec_co :std_logic;signal co1,co2,co3,co4:std_logic; -- 进位signal switch :std_logic_vector(1 downto 0); -- 表示状态3. 分频模块用来定义秒count_sec 用来计时钟个数,当count_sec=11 时,及得到1Hz 信号。
基于VHDL的多功能电子钟
数字系统课程设计报告课程设计题目:基于vhdl语言的电子钟组员:陈洪彬,麦俊辉,缪超课程设计要求:设计一个用4位数码管显示的电子钟,包括整点报时,闹钟功能,4按键输入采用 VHDL 语言描述系统功能,并在 QUARTUS II 工具软件中进行仿真,下载到 EDA 实验板进行验证。
编写设计报告,要求包括方案选择、程序代码清单、调试过程、测试结果及心得体会。
一、软硬件资源分析实验室提供了Altera公司的cyclone系列EP1C6Q240C8实验开发板,该开发板提供了四个自由按键,八个发光LED,蜂鸣器,四个七段数码管,四位拨码开关等等硬件资源。
我们所设计的数字钟用到了四个自由按键用于对显示的选择,对设置时间的选择,还有用于用于设置时间时的加一操作,四个七段数码管用于显示,蜂鸣器用于整点报时和闹钟,还有四个发光LED用于判断自由按键的通断。
以下列表对数字钟中用到的硬件资源进行说明:下表)抖自由按键Key4in Key3 P_128 修改时间时加一,停止闹钟长按一下脉冲来时改变,消抖七段数码管dout,selout 7LED1_C1~C3 P_168P_169P_170P_173 显示正常时间及修改状态动态扫描法实现显示四个数码管全用总体设计框图:操作说明:按键状态Key4out Key3out Key2out Key1out 实现功能上升沿 1 0 0 修改小时(时钟)上升沿 1 1 0 修改分钟(时钟)上升沿 1 0 1 修改小时(闹钟)上升沿 1 1 1 修改分钟(闹钟)X(0或1)0 1 0 显示时分(时钟)x 0 0 0 显示分秒(时钟)x 0 0 1 显示时分(闹钟)x 0 1 1 显示分(闹钟)Key1的1表示闹钟,0表示时钟;Key2则是‘时-分’切换或者‘时分-分秒’切换。
各模块介绍(1)分频器在数字钟的设计中,采用了芯片内部提供的50MHz 全局时钟,将其分频率后产生一个接近 1Hz秒时钟 clk1,一个 2Hz 左右的闪烁时钟clk2,一个显示模块800Hz的clk3,一个用于消抖模块的20000Hz的clk4。
课程设计论文实验报告基于VHDL的数字钟设计
本科实验报告题目:数字钟课程名称:学院(系):专业:班级:学生姓名:学号:完成日期:成绩:2011 年12 月12 日题目:数字钟1 设计要求系统功能:1.计时,数码管显示的‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器2.星期,lcd1602显示星期:MON/TUE/WEN/THU/FRI/SAT/SUN3.校准,具有手动校星期、校时、校分、校秒的功能。
4.秒表,显示1%秒、60秒,60分,能手动开始和停止5.闹钟,能在设定的时间发出闹铃声。
6.整点报时,即从59分55秒起,每隔1秒钟发出一次低音“嘟”的信号,连续2次,最后一次为高音“嘀”的信号,此信号结束即达到整点,发音的同时伴有led闪烁。
7.倒计时,能在设定的时间开始倒计时,至0时0分0秒停止2 设计分析及系统方案设计一.设计分析:依据功能要求,程序分为:1.计时与校准模块①计时:秒钟计数到59后清零并向分钟进一位,分钟计数到59后清零并向时钟进一位,时钟计数到23后清零并向星期进一位,星期按照MON/TUE/WEN/THU/FRI/SAT/SUN循环变化②校准:使用k1/k0两个功能键,k1切换要改变的位,k0校正2.数码管显示模块①显示译码②利用k3切换显示内容,根据不同模式关闭用不到的数码管。
3.lcd显示模块①定义七个常量数组,数组内容分别为MON/TUE/WEN/THU/FRI/SAT/SUN的ASCⅡ码。
②液晶初始化③液晶显示,将相应字母的ASCⅡ码写入ddram的相应地址中,由cnt1值决定地址,cnt1由0到2循环,因此用到lcd开始的前三个位显示字符。
由星期(m)值决定写入内容,m值不同,cnt1扫描显示的就是不同的数组。
4.闹钟与整点报时模块①整点报时:利用分频得到1k和的频率,当分钟位到达‘59’,秒钟位为‘55’、‘57’时,将频率接到输出引脚,秒钟位为‘59’时,将1k频率接到输出引脚。
②闹钟:到达闹钟时间,将1k频率接到输出引脚,时长3秒③Led闪烁:将led输出引脚连接至频率输出引脚即可(设为inout)5.秒表模块①开启显示1%秒、60秒、60分的数码管。
数字钟VHDL设计报告(EDA)
设计报告课程名称在系统编程技术任课教师查长军设计题目数字时钟班级通信(1)班姓名王兵学号0805070345 日期2011、5、18目录摘要: (1)关键词:数字钟 EDA VHDL语言 (1)一、设计目的 (1)二、设计内容 (1)三、设计原理 (2)1、数字钟的基本工作原理: (2)2、数字钟设计的电路原理图 (3)3、VHDL 设计 (3)四、设计仪器、设备 (4)五、设计步骤 (5)1、用VHDL程序设计 (5)步骤1:为本项设计建立文件夹 (5)步骤2:输入设计项目和存盘 (5)步骤3:选择目标器件并编译 (6)步骤4:时序仿真 (6)步骤5:引脚锁定 (9)步骤6:编程下载 (9)2、实验箱显示 (10)六、总结 (11)参考文献 (11)附录: (11)摘要:人类社会已进入到高度发达的信息化社会。
信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。
电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。
实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,Electronics Design Automation)技术,EDA 技术的发展和推广应用又极大地推动了电子信息产业的发展。
为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。
目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。
EDA技术在电子系统设计领域越来越普及,本设计主要利用VHDL语言在EDA平台上设计一个电子数字钟,它的计时周期为24小时,显示满刻度为24时59分59秒,另外还具有校时功能和闹钟功能。
总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、译码显示程序模块和拼接程序模块。
EDA课程设计——基于VHDL语言的数字时钟设计(可编辑)
EDA课程设计——基于VHDL 语言的数字时钟设计(可编辑)(文档可以直接使用,也可根据实际需要修改使用,可编辑推荐下载)一、设计要求 0二、设计原理及框图 01、设计原理 02、结构框图 0三、设计过程 (1)1、模块化设计 (1)2、顶层文件生成 (2)四、仿真调试过程 (3)1、各模块时序仿真图 (3)2、仿真过程中遇到的问题 (4)五、设计体会及收获 (4)一、设计要求1、稳定的显示时、分、秒。
2、当电路发生走时误差时,要求电路有校时功能。
3、电路有整点报时功能。
报时声响为四低一高,最后一响高音正好为整点。
二、设计原理及框图1、设计原理系统框图由六个模块组成,分别为:秒、分、时计数模块,整点报时模块,LED动态显示扫描模块,调时控制模块组成。
其工作原理是:基准脉冲输入信号同时加到秒、分、时、分隔符的脉冲输入端,采用并行计数的方式,秒的进位接到分的使能端上,秒的使能借到分隔符的使能上,分得接到时的使能端上,完成秒、分、时和分隔符的循环计数。
整点报时是根据分的A、B输出同时为0时,整点报时模块输出高电平控制报时。
LED显示扫描模块根据输入的扫描信号CKDSP轮流选通秒、分、时、分隔符的8位八段数码管,LED显示译码器完成计数器输出的BCD的译码。
2、结构框图三、设计过程1、模块化设计(1)秒计时模块秒计时模块由一个60位计数器为主体构成,其输入输出端口组成为:Clk:计时时钟信号Reset:异步清零信号Setmin:分钟设置信号Enmin:使能输出信号Daout[6:0]:BCD码输出(2)分计时模块分计时模块由一个60位计数器为主体构成,其输入输出端口组成为:Clk、clk1:计时时钟信号Reset:异步清零信号Sethour:小时设置信号Enmin:使能输出信号Daout[6:0]:BCD码输出(3)时计时模块时计时模块由24位计数器为主体构成,其输入输出端口组成为:Clk:计时时钟信号Reset:异步清零信号Daout[6:0]:BCD码输出(4)显示模块系统时间输出由六个七段数码管显示。
VHDL课程设计---多功能数字钟
多功能电子时钟报告一、实验目的1.学习数字系统设计的自顶向下设计法及控制器的设计。
2.加深利用EDA技术实现数字系统的体会。
二、实验仪器及器件1.EDA 开发软件(Quartus7.2)(1套)2.电脑(1台)3.实验板(1个)三、实验要求及设计方案1.设计一个具有24进制计时、显示、整点报时、时间设置和闹钟功能的数字钟,要求时钟的最小分辨率时间为1s。
2.数字钟的设计方案如下:系统输入:mode为计时显示和闹钟定时显示转换输入;set为校时和定时设置的时、分、秒转换输入;k为校时的时、分、秒手动加1输入;4*4矩阵键盘为闹钟设置调节闹钟的时、分、秒、时钟的清零以及暂停;clk40M为板载时钟信号;reset为系统复位信号。
输入信号均由按键和4*4矩阵键盘产生。
系统输出:七段数码管显示输出;蜂鸣器(bell)声音信号输出(用LED灯代替)。
3.多功能数字钟系统功能的具体描述如下:计时:正常工作状态下,每日按24小时计时制计时并显示,蜂鸣器逢整点报时。
校时:在计时显示状态下,按下“set键”,进入“小时”校时状态,再次按下“set键”,进入“分”校时状态,继续按下“set键”,进入“秒”校时状态,第四次按下“set键”又回复到正常计时显示状态。
1)“小时”校时状态:进入“小时”校时状态后,显示“小时”的数码管闪烁,每按动“k”键一次,“小时”+1,若不按动“k”键则小时数不变,一直按下“k”键则小时数以4Hz的频率递增计数。
2)“分”校时状态:进入“分”校时状态后,显示“分”的数码管闪烁,每按动“k”键一次,“分”+1,若不按动“k”键则分数不变,一直按下“k”键则分数以4Hz的频率递增计数。
3)“秒”校时状态:进入“秒”校时状态后,显示“秒”的数码管闪烁,每按动“k”键一次,“秒”+1,若不按动“k”键则秒数不变,一直按下“k”键则秒数以4Hz的频率递增计数。
整点报时:蜂鸣器在“59”分钟的第51、53、55、57秒发出频率为512Hz的低音,在“59”秒发出频率为1024Hz的高音,结束时为整点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:电子 0901学号: XXXXXXXX姓名:XXXXXXXXX指导教师:XXXXXXXXX设计时间:2011年12月现代电子设计技术的核心已转向基于计算机的电子设计自动化技术,即EDA (Electronic Design Automation)技术。
EDA技术就是依赖计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
EDA技术使得设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
硬件描述语言是EDA技术的重要组成部分,常见的HDL语言有VHDL、Verilog、HDL、ABLE、AHDL、System Verilog和System C。
其中VHDL、Verilog在现在的EDA设计中使用最多,也拥有几乎所有主流EDA工具的支持。
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化硬件设计任务,提高了设计效率和可靠性。
在这次设计中,主要使用VHDL语言输入。
此次设计很好地完成了数字钟的定时、切换显示年月日和时分秒的功能,完成了小型FPGA的设计开发,锻炼了动手实践能力,达到了课程设计的目的。
关键词:EDA技术硬件描述语言VHDL 设计数字电子钟摘要 (2)1、课程设计目的 (4)2、课程设计内容及要求 (4)2.1 设计内容 (4)2.2 设计要求 (4)3、VHDL程序设计 (5)3.1 方案论证 (5)3.2 设计思路与方法 (6)3.2.1 设计思路 (6)3.2.2 设计方法 (7)4、仿真与分析 (7)5、器件编程下载及设计结果 (9)6、课程设计总结 (10)7、参考文献 (10)8、程序清单 (11)8.1 顶层模块 (11)8.2 秒脉冲模块 (13)8.3 数码管显示模块 (14)8.4 时分秒模块 (15)8.4.1 分秒模块 (16)8.4.2 小时模块 (18)8.5 年月日模块 (19)8.5.1 日期模块 (21)8.5.2 月份模块 (24)8.5.3 年份模块 (25)1、课程设计目的EDA技术课程设计在课程结束以后进行,在实践中验证理论知识,不仅是为了巩固课堂上所学知识,更是为了加深我们对EDA技术和VHDL语言的理解;为了让我们自己动手完成从设计输入、逻辑综合、功能仿真、设计实现到实现编程、时序仿真,一直到器件的下载测试的整个过程,真切感受利用EDA技术对FPGA进行设计开发的过程,锻炼和提高我们对器件的编程调试能力。
2、课程设计内容及要求2.1 设计内容(1)VHDL程序设计、输入——在ise平台上用VHDL描述系统的功能(建立工程文件,添加VHDL文件,输入源程序);(2)逻辑综合——将源程序编译调试无误后,为设计系统选择一个电路实现方案,按照这个方案进行逻辑综合和优化,生成1个电路网表文件;(3)功能仿真——添加波形文件,设计输入,观察输出,检查自己的设计是否达到和完成要求的逻辑功能;(4)设计实现——布局、布线及配置,最后生成可以写到芯片中的目标文件;(5)时序仿真——是适配到选定的芯片后进行的仿真,它模拟芯片的实际动作,仿真时间模型严格将门级延时计算在内,可以分析出竞争与冒险,时序仿真验证过的电路与实际电路基本上一致;(6)器件编程——对器件编程下载目标文件;(7)测试——验证设计项目在目标系统上的实际工作情况,以便排除不完善的地方,改进设计。
2.2 设计要求利用VHDL语言在EDA工具软件平台上设计实现一个具有带预置数的数字电子钟,使其具有切换显示年月日、时分秒的功能。
显示时,用6个数码管显示时分秒,set(设置)按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,第4,个脉冲到来时可预置日期,依次第5、6、7个脉冲到来时分别可预置、时、分、秒,第8个脉冲到来后预置结束,数字电子钟正常工作,6个数码管显示的是时分秒。
另外,up按钮为高电平时,且此时upclk有脉冲到达时,当前预置位加1;up按钮为低高电平时,且此时upclk有脉冲到达时,当前的预置位减1。
还可以在此基础上增加数字电子钟的其它功能。
3、VHDL程序设计3.1 方案论证设计中使用的时元件例化和进程结合的方案。
每个元件主要采用进程语句实现,在每个进程主要使用了if_else、if_eslif_elsif_----_else 、case以及赋值语句,实现了模块化设计,使得整个程序一目了然。
整个电子钟的顶层设计实体为clock (时钟)模块,其下又分为:second_wave(秒脉冲)、shi_fen_miao(时分秒)、nian_yue_ri(年月日)和led_disp(数码管显示)四个模块,数字电子钟结构图如图1所示。
其中,时分秒模块下又分为3个小模块——shi(时)、fen(分)和miao(秒),如图2所示;年月日模块分为year(年)、month(月)和date(日期)三个模块,如图3所示。
经过功能仿真和器件下载测试验证知,使用此方案可以简单快速的实现数字电子钟的设计。
图1 数字电子钟顶层实体clock模块结构图图2 数字电子钟nian_yue_ri(年月日)模块结构图图3 数字电子钟shi_fen_miao(时分秒)模块结构图3.2 设计方法3.2.1 设计思路课程设计要求我们设计的数字电子钟具有切换显示年月日和时分秒的功能,且能根据set(设置)按钮按动的次数进行相应的切换显示和年月日时分秒的预置,很容易想到led_disp(数码管显示)模块,即对set脉冲进行计数,然后根据计得的数值进行相应的操作——年月日时分秒的计时以及根据up和upclk的变化来进行各个位的设置。
可以把年月日、时分秒分别放在一个模块,两个模块再分别划分为年、月、日和时、分、秒模块,各模块间设置进位信号进行连接。
3.2.2 设计方法按照设计内容和要求以及所有的设计思路,综合考虑后,采用元件例化和进程相结合的方法,设计模块化的结构:顶层设计实体为clock(时钟)模块,其下又分为:second_wave(秒脉冲)、shi_fen_miao(时分秒)、nian_yue_ri(年月日)和led_disp(数码管显示)四个模块。
其中,时分秒模块下又分为3个小模块——shi(时)、fen(分)和miao(秒);年月日模块分为year(年)、month(月)和date(日期)三个模块。
每个模块主要使用VHDL语言输入中常用的进程语句、元件例化语句、case语句、if语句以及赋值语句。
需要注意的是,在年月日模块中的日期模块对于2月份要按照平年闰年的情况分别处理。
4、仿真与分析图4 顶层模块图clock功能仿真分析:图4中,set脉冲来之前,显示的是时分秒——23:59:59;第一个set 脉冲来之后切换显示年月日——11年01月28号;set第二个脉冲来:设置年份,up先高后低再高,在upclk上升沿来时,年份依次变为11→12→13→12→11→12→13,;set第三个脉冲来:设置月份,up先高后低再高,upclk上升沿来时,年份依次变为01→02→01→12→01→02;等等,以此类推,最后设置成的数字钟显示状态为13年03月29号01点00分01秒,之后在clk时钟输入下开始正常计时显示。
由于程序中增加了1000分频模块,在仿真时间有限的情况下,看不出时分秒计时的增加。
为了验证所设计的能正常计时,又分别进行了年月日和时分秒模块的功能仿真。
图5 nian_yue_ri(年月日)模块功能仿真图分析:初始化的年月日显示为11年01月28号,在lock为0时,即正常显示时,日期按照clk0的输入正常增加,11年01月29号;lock为2时,即set 的第2个脉冲来时,设置年份,up先高后低再高,在选择的clk1的上升沿到时,年份变化为:11→12→13→14→13→13→15→16;lock为3时,即set的第3个脉冲来时,设置月份,根据up的变化以及clk1的输入,月份依次变化为:01→02→03→04→03→04→05→06→07→06→05→04→03;以此类推,之后设置日期,最后设置完毕后,年月日为16年03月31号,在clk0上升沿来时,依次为16年04月01号→16年04月2号→16年04月03号。
即,年月日模块可以正常计时,能完成加减的预置功能。
图6 shi_fen_miao(时分秒)模块功能仿真分析同年月日模块。
由图可知,时分秒模块也可以正常计时,能完成加减的预置功能。
综合分析图4至图6可知,按所选用方案所设计的电子钟可以完成加减的预置、切换显示和正常计时功能。
5、器件编程下载及设计结果(一)管脚锁定如图7所示:图7 管脚锁定图(二)设计结果分析此次数字电子钟设计中,使得数字电子钟具有切换显示年月日、时分秒的功能,并且能够根据设置按钮进行相应的设置。
设计过程中对clock模块和shi_fen_miao模块以及nian_yue_ri模块进行了功能仿真,达到了预期效果。
经过器件编程下载验证知,达到了设计所要求的切换显示和设置功能,完成了设计要求。
6、课程设计总结实际上,课程设计中尝试了两种设计方案,一种就是现在的元件例化与进程相结合的方法;另一种是多进程的方法,把各功能模块使用进程语句全部包含在一个结构体中,却出现了预料之外的错误——把各个进程拿出来放到新建的文件里调试,显示无误,都放在一起后却总出现代号为415的综合错误,先是在李世平老师的提点下改正了多个进程控制一个输出端的错误,改正之后还是无法综合成功,反复检查多次仍发现无处下手之后决定转为元件例化与进程结合的方案,采用模块化鲜明的设计结构。
由于大多采用的是元件例化语句,只要保证各个模块设计无误,最后顶层设计中对各元件进行位置映射时够细心基本上不出处错误。
设计中觉得最难的模块是date模块,因为需考虑闰年和平年的情况下2月的天数,以及大小月的天数,if语句嵌套较多,失之毫厘谬以千里,一个不小心错了一句时设计结果也就无处谈及,所以更需加倍细心的处理各个if语句嵌套。
课程设计中最大的收获是独立自主的完成了设计任务,使得自己有一种成就感,增强了我对利用VHDL语言进行FPGA设计开发的兴趣,更锻炼了我动手调试程序的能力,考验了我在编写程序时的细心和耐心程度。
做过课程设计后的建议就是希望学院能把实验设备规整好,让下一届的做课设时不再像我们一样好几个人同时等一个实验箱。