VHDL数字钟设计报告

合集下载

VHDL电子钟实验报告

VHDL电子钟实验报告

期末大作业课程设计实验报告设计题目:基于VHDL电子钟的设计目录一、概述 (3)1.1目的 (3)1.2课程设计的要求和功能 (3)二、总结 (3)2.1课程设计进行过程及步骤 (3)2.2所遇到的问题,如何解决问题 (15)2.3体会收获以及建议 (15)3.4参考资料(书,网络资料) (15)三、教师评语 (16)四、成绩 (16)一、概述1.1目的1. 基于CPLD系统模块板,设计一个电子钟。

来熟悉CPLD的工作原理以及对VHDL的使用。

2. 通过设计出一个电子钟具有校时功能,来巩固分频,键盘扫描,计数,动态扫描等知识内容。

1.2课程设计的要求和功能设计一个电子钟,能进行正常的时分秒计时功能,分别有六个数码管显示24小时,60分钟,60秒的计数器显示。

利用实验箱系统上的按键实现“校时”、“校分”功能:(1)按下“SA”键时,计时器快速递增,按24小时循环,进行时校正;(2)按下“SB”键时,计分器快速递增,按60分循环,进行分校正(3)按下“SC”键时,秒清零,进行秒校正;二、总结2.1课程设计进行及步骤1.设计提示系统框图见下2.系统结构设计描述(1)系统顶层文件1.顶层原理图见下2.各个模块的解释(1)五个输入量clk50MHz,SA,SB,SC,reset:其中clk50MHz为总体系统提供时钟,并且经过分频来分别对电子钟模块提供时钟,产生一秒一秒的进位信号,对显示模块的计数器提供时钟实现显示模块的扫描功能,对按键去抖动提供时钟,实现键盘扫描的功能。

SA,SB,SC用来控制按键,实现按键控制,SA是实现“时”加一,SB是实现“分”加一,SC是实现“秒”清零。

Reset是来控制按键功能的使能。

(2)按键功能模块三个输入chos ,date0,date1的功能是:chos接受来自按键的信号,若按键按下,则将date0的内容,也就是通过按键产生的脉冲来控制电子钟进行加一,若按键没有按下,则将“秒”分频信号接入电子钟的clk计数输入端,通过时钟脉冲来控制电子钟。

用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数字钟设计

VHDL数字钟设计报告一、系统功能概述:1.进行一个具有‘时’、‘分’、‘秒’的十进制数计时功能,‘时’、‘分’、‘秒’各用两个数码管分别显示(小时从00~23,分、秒从00~59);2.可以进行手动校时,校分,校时完毕之后从校正点开始从新计时;3.具有定时功能,可以预设闹钟,并在预定的时间发出闹铃声;4.具有整点报时功能,即从59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,最后一次发出高音“嘀”的信号,此信号结束即达到整点。

二、系统组成以及系统各部分的设计:1..⑴系统结构描述:输入输出端口设置port(reset: in std_logic; ----上升沿有效,用于改变工作状态sign: in std_logic;---高电平有效,用来控制校时,定时功能;clk: in std_logic;----计时脉冲;clk2: in std_logic;-----闹铃脉冲;hourmusic1: out std_logic;hourmusic2: out std_logic;music: out std_logic;------闹铃端口;q5: out std_logic_vector(3 downto 0);-------小时高位出口;q4: out std_logic_vector(3 downto 0);-------小时低位出口;q3: out std_logic_vector(3 downto 0);-------分钟高位出口;q2: out std_logic_vector(3 downto 0);-------分钟低位出口;q1: out std_logic_vector(3 downto 0);-------秒钟高位出口;q0: out std_logic_vector(3 downto 0) ---------秒钟低位出口;);end clock;中间变量设置signal qq5,qq4,qq3,qq2,qq1,qq0: std_logic_vector(3 downto 0);——用于计时,校时时‘时’、‘分’、‘秒’的对应中间变量;signal qqhh,qqhl,qqmh,qqml: std_logic_vector(3 downto 0);——用于定时时‘时’、‘分’、‘秒’的对应中间变量;signal qqq5,qqq4,qqq3,qqq2,qqq1,qqq0: std_logic_vector(3 downto 0);——用于显示时‘时’、‘分’、‘秒’的对应中间变量;signal flag: std_logic_vector(2 downto 0);——用来标记计时,定时,校时的状态;signal musica: std_logic;——闹铃的中间变量;signal hourmusic11,hourmusic22: std_logic;——整点报时的中间变量;signal k: std_logic;——用来控制整点报时;①计时电路:process(reset)-------------通过reset上升沿触发调整工作状态;beginif (reset'event and reset='1') thenif flag="100" then-----------若flag等于4,则清零,否则加1;flag<="000";elseflag<=flag+1;end if;end if;end process;process(clk,flag,sign)-------------用于计时,校时,定时;beginif (clk'event and clk='1') thenk<=not k; -----------产生二分频,用来控制后面整点报时;if flag="000" then ------计时环节if qq0="1001" thenqq0<="0000";if qq1="0101" thenqq1<="0000";if qq2="1001" thenqq2<="0000";if qq3="0101" thenqq3<="0000";if qq4="1001" thenqq4<="0000";qq5<=qq5+1;elsif qq5="0010"and qq4="0011" thenqq4<="0000";qq5<="0000";elseqq4<=qq4+1;end if;elseqq3<=qq3+1;end if;elseqq2<=qq2+1;end if;elseqq1<=qq1+1;end if;elseqq0<=qq0+1;end if;②校时电路:elsif (flag="001" and sign='1')then ------校时if qq4="1001" thenqq4<="0000";qq5<=qq5+1;elsif qq5="0010"and qq4="0011" thenqq4<="0000";qq5<="0000";elseqq4<=qq4+1;end if;elsif (flag="010" and sign='1') then -------校分qq1<="0000";qq0<="0000";if qq2="1001" thenqq2<="0000";if qq3="0101" thenqq3<="0000";elseqq3<=qq3+1;end if;elseqq2<=qq2+1;end if;③定时电路:elsif (flag="011" and sign='1') then -----定时if qqhl="1001" thenqqhl<="0000";qqhh<=qqhh+1;elsif qqhh="0010"and qqhl="0011" thenqqhh<="0000";qqhl<="0000";elseqqhl<=qqhl+1;end if;elsif (flag="100" and sign='1')then -----定分if qqml="1001" thenqqml<="0000";if qqmh="0101" thenqqmh<="0000";elseqqmh<=qqmh+1;end if;elseqqml<=qqml+1;end if;end if;end if;end process;④显示:process(flag)beginif flag="000" then ----计时状态,显示计时qqq0<=qq0;qqq1<=qq1;qqq2<=qq2;qqq3<=qq3;qqq4<=qq4;qqq5<=qq5;elsif flag="001" then----校时状态,显示校时qqq5<=qq5;qqq4<=qq4;qqq3<=qq3;qqq2<=qq2;qqq1<="0000";qqq0<="0001";elsif flag="010" then-----校分状态,显示校分qqq5<=qq5;qqq4<=qq4;qqq3<=qq3;qqq2<=qq2;qqq1<="0000";qqq0<="0010";elsif flag="011" then-----定时状态,显示定时qqq5<=qqhh;qqq4<=qqhl;qqq3<=qqmh;qqq2<=qqml;qqq1<="0000";qqq0<="0011";elsif flag="100" then-----定分状态,显示定分qqq5<=qqhh;qqq4<=qqhl;qqq3<=qqmh;qqq2<=qqml;qqq1<="0000";qqq0<="0100";end if;end process;⑤报时:process(flag)beginif flag="000" thenif qq5=qqhh and qq4=qqhl and qq3=qqmh and qq2=qqml then if qq1="0000" thenmusica<=clk2;end if;end if;end if;end process;process(k) ---整点报时环节,当59分50秒时,每过两秒报时响一下,beginif (qq3="0101" and qq2="1001" and qq1="0101") and (qq0="1000" or qq0="1001") thenhourmusic22<=k;elsif (qq3="0101"and qq2="1001" and qq1="0101") thenhourmusic11<=k;end if;(2)各进程功能总结:①process(reset):手动上升沿触发,每来一次脉冲,状态变量flang加1,改变一种状态,当flang等于4时,flang清零,从新改变状态;②process(clk,flag,sign):clk上升沿触发,当flang为“000”,完成正常计时;当flang为“001”且校正开关sign为高电平,完成校时功能;当flang为“010”且校正开关sign为高电平,完成校分功能;当flang为“011”且校正开关sign为高电平,完成定时功能;当flang为“100”且校正开关sign为高电平,完成定分功能;③process(flag)1:完成显示功能:当flang为“000”时,显示正常计时的变量;当flang为“001”或“010”时(校时);显示校时校分变量;当flang为“011”或“100”时(定时),显示定时定分变量;④process(flag)2:完成闹铃功能:当flang为“000”(正常计时状态)时,若计时和定时相等,则将clk2(引入的一个高频信号)给闹铃引脚(music,接speaker),闹铃响;⑤process(k):k为clk进程中的一个二分频变量,完成整点报时功能:当计时为59分50秒时,hourmusic11赋值为k,即每隔两秒出现一次高电平,一共四次;当计时为59分58秒时,hourmusic22赋值为k,即每隔两秒出现一次高电平,一共一次;2. 下载时选择的开发系统模式以及管脚此系统下载时使用模式7进行下载:3.实验电路结构图:结构图NO.7:此电路适合于设计时钟、定时器、秒表等。

EDA-VHDL数字钟报告

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所示的用三态门实现动态显示的框图。

数字钟的设计课程设计VHDL

数字钟的设计课程设计VHDL

数字钟的设计 课程设计 VHDL一、课程目标知识目标:1. 理解数字时钟的基本原理和VHDL语言编程基础;2. 学会使用VHDL语言设计简单的数字时钟电路;3. 掌握数字时钟各模块的功能及其相互关系;4. 了解数字时钟在实际应用中的重要性。

技能目标:1. 能够运用VHDL语言编写简单的数字时钟程序;2. 能够对设计的数字时钟进行功能仿真和时序分析;3. 能够根据实际需求调整和优化数字时钟设计;4. 培养学生的团队协作能力和问题解决能力。

情感态度价值观目标:1. 培养学生对数字电路设计和VHDL编程的兴趣和热情;2. 增强学生对我国集成电路产业的认识,提高国家自豪感;3. 培养学生严谨、认真、负责的学习态度,为未来从事相关工作奠定基础。

课程性质:本课程为电子信息类专业的实践课程,旨在帮助学生掌握数字时钟设计的基本方法和技能。

学生特点:学生已具备一定的数字电路基础和VHDL编程知识,具有一定的自学能力和动手能力。

教学要求:结合学生特点,注重理论与实践相结合,强化实践操作,鼓励学生创新和团队协作。

通过本课程的学习,使学生能够独立完成数字时钟的设计与实现,达到学以致用的目的。

二、教学内容1. 数字时钟原理概述:数字时钟的组成、工作原理和性能指标;2. VHDL语言基础:VHDL程序结构、数据类型、运算符、顺序语句和并行语句;3. 数字时钟设计方法:分频器、计数器、秒表、时钟显示等模块的设计原理和实现方法;4. 数字时钟电路仿真:功能仿真和时序分析,优化设计;5. 数字时钟综合设计:根据实际需求,完成数字时钟的各个模块设计和整体集成;6. 数字时钟实践操作:动手实践,调试和优化数字时钟设计。

教学大纲安排:第一周:数字时钟原理概述,VHDL语言基础;第二周:数字时钟各个模块的设计方法;第三周:数字时钟电路仿真,功能验证;第四周:数字时钟综合设计,实践操作。

教学内容关联教材章节:1. 数字时钟原理概述:第三章 数字电路基础;2. VHDL语言基础:第四章 VHDL硬件描述语言;3. 数字时钟设计方法:第五章 数字系统设计;4. 数字时钟电路仿真:第六章 数字电路仿真;5. 数字时钟综合设计:第五章 数字系统设计;6. 数字时钟实践操作:实验指导书相关内容。

多功能数字电子钟_VHDL

多功能数字电子钟_VHDL

四、各功能模块的源程序代码 :
-- CONTOR 模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity contor is
1 )“小时” 校时状态: 进入“小时”校时状态后,显示 “小时” 的数码管闪烁,每按动“ k” 键一次,“小时” +1,若不按动“ k”键 则小时数不变,一直按下“ k” 键则小时数一 4Hz 的频率递增计数。
2 )“分”校时状态:进入“分”校时状态后,显示“分”的数 码管闪烁,每按动“ k” 键一次,“分” +1,若不按动“ k”键则分数 不变,一直按下“ k” 键则分数一 4Hz的频率递增计数。
chs,cms,css,f4 :in std_logic; bsg,bmg,bhg,bsd,bmd,bhd :buffer std_logic_vector(3 downto 0); comout :out std_logic); end time_com; architecture time_comx of time_com is begin com:process(hh,mh,sh,hl,ml) begin if(bhg=hh and bhd=hl and bmg=mh and bmd=ml and bsg=sh)then comout<='1'; else comout<='0'; end if; end process; set:process(f4) begin if(f4'event and f4='1')then if(chs='1'and k='0')then if(bhg="0010" and bhd="0011")then bhd<="0000";bhg<="0000"; elsif(bhd="1001")then bhd<="0000";bhg<=bhg+1; elsif(bhd="0000"or bhd="0001" or bhd="0010"or bhd="0011"or bhd="0100"or bhd="0101"or bhd="0110"or bhd="0111"or bhd="1000")then bhd<=bhd+1; end if; end if; end if; end process; process(f4) begin if(f4'event and f4='1')then if(cms='1'and k='0')then if(bmg="0101" and bmd="1001")then

基于VHDL的多功能数字钟设计报告

基于VHDL的多功能数字钟设计报告

基于VHDL的多功效数字钟设计陈述021215班卫时章02121451一.设计请求1.具有以二十四小时制计时.显示.整点报时.时光设置和闹钟的功效.2.设计精度请求为1秒.二.设计情况:Quartus II三.体系功效描写1.体系输入:时钟旌旗灯号clk采取50MHz;体系状况及较时.准时转换的控制旌旗灯号为k.set,校时复位旌旗灯号为reset,均由按键旌旗灯号产生.2.体系输出:LED显示输出;蜂鸣器声音旌旗灯号输出.3.多功效数字电子钟体系功效的具体描写如下:(一)计时:正常工作状况下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时.(二)校时:在计时显示状况下,按下“k”键,进入“小时”待校准状况,若此时按下“set”键,小时开端校准;之后按下“k”键则进入“分”待校准状况;中断按下“k”键则进入“秒”待复零状况;再次按下“k”键数码管显示闹钟时光,并进入闹钟“小时”待校准状况;再次按下“k”键则进入闹钟“分”待校准状况;若再按下“k”键恢复到正常计时显示状况.若校时进程中按下“reset”键,则体系恢复到正常计数状况.(1)“小时”校准状况:在“小时”校准状况下,显示“小时”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(2)“分”校准状况:在“分”校准状况下,显示“分”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(3)“秒”校准状况:在“秒复零”状况下,显示“秒”的数码管以2Hz闪耀,并以1Hz的频率递增计数.(4)闹钟“小时”校准状况:在闹钟“小时”校准状况下,显示“小时”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(5)闹钟“分”校准状况:在闹钟“分”校准状况下,显示“分”的数码管以2Hz闪耀,并按下“set”键时以2Hz的频率递增计数.(三)整点报时:蜂鸣器在“59”分钟的第“51”.“53”.“55”.“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,停止时为整点.(四)显示:采取扫描显示方法驱动4个LED数码管显示小时.分,秒由两组led灯以4位BCD 码显示.(五)闹钟:闹钟准不时光到,蜂鸣器发出频率为1000Hz的高音,中断时光为60秒.四.各个模块剖析解释1.分频器模块(freq.vhd)(1)模块解释:输入一个频率为50MHz的CLK,应用计数器分出1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz.(2)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq isport (CLK: in std_logic ; --输入时钟旌旗灯号q1KHz: buffer std_logic;q500Hz: buffer std_logic;q2Hz: buffer std_logic;q1Hz: out std_logic);end freq;architecture bhv of freq isbeginP1KHZ:process(CLK)variable cout:integer:=0;beginif CLK'event and CLK='1' thencout:=cout+1; --每来个时钟上升沿时cout开端计数if cout<=25000 then q1KHz<='0'; --当cout<=25000时,q1KHz输出“0”elsif cout<50000 then q1KHz<='1'; --当25000<cout<=50000时,q1KHzelse cout:=0; --输出“1”,完成1KHz 频率输出end if;end if;end process;P500HZ:process(q1KHz) --q1KHz作为输入旌旗灯号,分出q500Hzvariable cout:integer:=0;beginif q1KHz'event and q1KHz='1' thencout:=cout+1;if cout=1 then q500Hz<='0'; --二分频elsif cout=2 then cout:=0;q500Hz<='1';end if;end if;end process;P2HZ:process(q500Hz)variable cout:integer:=0;beginif q500Hz'event and q500Hz='1' then cout:=cout+1;if cout<=125 then q2Hz<='0';elsif cout<250 then q2Hz<='1';else cout:=0;end if;end if;end process;P1HZ:process(q2Hz)variable cout:integer:=0;beginif q2Hz'event and q2Hz='1' thencout:=cout+1;if cout=1 then q1Hz<='0';elsif cout=2 then cout:=0;q1Hz<='1'; end if;end if;end process;end bhv;(3)模块图:2.控制器模块(contral.vhd)(1)模块解释:输入端口k,set键来控制6个状况,这六个状况分离是:显示计不时光状况,调计时的时.分.秒的3个状况,调闹铃的时.分的3个状况,reset键是复位键,用往返到显示计不时光的状况.(2)波形仿真图:(3)模块图:3、二选一模块(mux21a.vhd)(1)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux21a isport(a,b,s:in bit;y:out bit);end entity mux21a;architecture one of mux21a isbeginprocess(a,b,s)beginif s='0' theny<=a; --若s=0,y输出a,反之输出b. else y<=b;end if;end process;end architecture one;(2)仿真波形图:(3)模块图:4、计时模块a.秒计时(second.vhd)(1)仿真波形图:(2)模块图:b.分计时(minute.vhd)(1)仿真波形图:(2)模块图:c.小时计时(hour.vhd)(1)仿真波形图:(2)模块图:d.闹钟分计时(cntm60b.vhd)(1)仿真波形图:(2)模块图:e.闹钟小时计时(cnth24b.vhd)(1)仿真波形图:(2)模块图:5.闹钟比较模块(compare.vhd)(1)模块解释:比较正常计数时光与闹钟准不时光是否相等,若相等,compout输出“1”,反之输出“0”.(2)仿真波形图:(3)模块图:6.报时模块(bell.vhd)(1)模块解释:该模块既实现了整点报时的功效,又实现了闹铃的功效,蜂鸣器经由过程所选频率的不合,而发出不合的声音.(2)仿真波形图:(3)模块图:7.控制显示模块(show_con.vhd)(1)模块解释:该模块实现了数码管既可以显示正常时光,又可以显示闹钟时光的功效;调时进程的准时闪耀功效也在此模块中真正实现.(2)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show_con isport(th1,tm1,ts1:in std_logic_vector(7 downto 4);th0,tm0,ts0:in std_logic_vector(3 downto 0);bh1,bm1:in std_logic_vector(7 downto 4);bh0,bm0:in std_logic_vector(3 downto 0);sec1,min1,h1: out std_logic_vector(7 downto 4);sec0,min0,h0: out std_logic_vector(3 downto 0);q2Hz,flashs,flashh,flashm,sel_show:in std_logic); end show_con;architecture rtl of show_con isbeginprocess(th1,tm1,ts1,th0,tm0,ts0,bh1,bm1,bh0,bm0,q2Hz,flas hs,flashh,flashm,sel_show)beginif sel_show='0'thenif ( flashh='1'and q2Hz='1')thenh1<="1111";h0<="1111"; --显示小时数码管以2Hz闪耀min1<=tm1;min0<=tm0;sec1<=ts1;sec0<=ts0;elsif (flashm='1'and q2Hz='1')thenh1<=th1;h0<=th0;min1<="1111";min0<="1111";sec1<=ts1;sec0<=ts0;elsif (flashs='1'and q2Hz='1')thenh1<=th1;h0<=th0;min1<=tm1;min0<=tm0;sec1<="1111";sec0<="1111";elseh1<=th1;h0<=th0;min1<=tm1;min0<=tm0;sec1<=ts1;sec0<=ts0;end if;elsif sel_show='1'then--若sel_show为“1”,数码管显示闹钟时光if(flashh='1' and q2Hz='1')thenh1<="1111";h0<="1111";min1<=bm1;min0<=bm0;sec1<="0000";sec0<="0000";elsif ( flashm='1' and q2Hz='1')thenh1<=bh1;h0<=bh0;min1<="1111";min0<="1111";sec1<="0000";sec0<="0000";elseh1<=bh1;h0<=bh0;min1<=bm1;min0<=bm0;sec1<="0000";sec0<="0000";end if ;end if;end process;end rtl;(3)模块图:8.动态扫描显示模块(scan_led.vhd)(1)模块解释:由4组输入旌旗灯号和输出旌旗灯号进而实现了时钟时.分的动态显示.(2)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan_led isport(clk1:in std_logic;h0:in std_logic_vector(3 downto 0);h1:in std_logic_vector(7 downto 4);min0:in std_logic_vector(3 downto 0);min1:in std_logic_vector(7 downto 4);ML:out std_logic_vector(7 downto 0);MH:out std_logic_vector(7 downto 0);HL:out std_logic_vector(7 downto 0);HH:out std_logic_vector(7 downto 0));end scan_led;architecture one of scan_led issignal cnt4:std_logic_vector(1 downto 0);signal a: std_logic_vector(3 downto 0) ;beginp1:process(clk1)beginif clk1'event and clk1 ='1' thencnt4<=cnt4+1;if cnt4=3 thencnt4<="00";end if;end if;end process p1;p2:process(cnt4,h1,h0,min1,min0)begincase cnt4 is --控制数码管位选when "00"=>case min0 iswhen "0000"=>ML<="11000000";when "0001"=>ML<="11111001";when "0010"=>ML<="10100100";when "0011"=>ML<="10110000";when "0100"=>ML<="10011001";when "0101"=>ML<="10010010";when "0110"=>ML<="10000010";when "0111"=>ML<="11111000";when "1000"=>ML<="10000000";when "1001"=>ML<="10010000";when others=>NULL;end case;when "01"=>case min1 iswhen "0000"=>MH<="11000000"; when "0001"=>MH<="11111001";when "0010"=>MH<="10100100";when "0011"=>MH<="10110000";when "0100"=>MH<="10011001";when "0101"=>MH<="10010010";when "0110"=>MH<="10000010";when "0111"=>MH<="11111000";when "1000"=>MH<="10000000";when "1001"=>MH<="10010000";when others=>NULL;end case;when "10"=>case h0 iswhen "0000"=>HL<="11000000"; when "0001"=>HL<="11111001";when "0010"=>HL<="10100100";when "0011"=>HL<="10110000";when "0100"=>HL<="10011001";when "0101"=>HL<="10010010";when "0110"=>HL<="10000010";when "0111"=>HL<="11111000";when "1000"=>HL<="10000000";when "1001"=>HL<="10010000";when others=>NULL;end case;when "11"=>case h1 iswhen "0000"=>HH<="11000000"; when "0001"=>HH<="11111001";when "0010"=>HH<="10100100";when "0011"=>HH<="10110000";when "0100"=>HH<="10011001";when "0101"=>HH<="10010010";when "0110"=>HH<="10000010";when "0111"=>HH<="11111000";when "1000"=>HH<="10000000";when "1001"=>HH<="10010000";when others=>NULL;end case;when others =>null;end case;end process p2;end one;(3)模块图:五、端口设定k:button2 ,set:button1 ,reset:button0 ;Bell:SW1 用于开关蜂鸣器;六.顶层电路图七、心得领会此次的数字钟设计重在于按键的控制和各个模块代码的编写,固然能把键盘接口和各个模块的代码编写出来,并能正常显示,但对于各个模块的优化设计还有必定的缺点和缺少,比方对按键消抖等细节处并未作出优化.经由此次数字钟的设计,我确切从中学到许多的器械.起首,经由过程VHDL硬件说话的进修,我充分熟悉到了功效模块若何用说话实现,让我初步懂得到了一个数字电路用硬件说话设计的方法和设计思惟.其次,也让我深深地领会到实践的主要性,起先我学VHDL说话的时刻,只是学得书本上的常识,经由此次课程设计,经由过程对模块的说话实现,对于VHDL说话我有了更深的熟悉.并且在程序错误的发明和纠正的进程中,我得到了更多的收成,也确切让我提高了许多.再次,当我碰到一些问题的时刻,就教先生,和同窗们一路评论辩论,令我受益颇多!最后,这个多功效数字电子钟是自我创造与汲取借鉴配合感化的产品,是自我尽力的成果.这让我对数字电路的设计充满了信念.固然课程设计已经停止,但这其实不代表着我已经真正控制了VHDL说话,仍需中断进修!。

vhdl课程设计报告电子钟+闹铃

vhdl课程设计报告电子钟+闹铃

数字钟的设计一、系统功能概述(一)、系统实现的功能:1、具有“时”、“分”、“秒”的十进制数字显示(小时从00 ~ 23)。

2、具有手动校时、校分、校秒的功能。

3、有定时和闹钟功能,能够在设定的时间发出闹铃声。

4、能进行整点报时。

从59分50秒起,每隔2秒发一次低音“嘟”的信号,连续5次,最后一次为高音“嘀”的信号。

(二)、各项设计指标:1、显示部分采用的6个LED显示器,从高位至低位分别显示时、分、秒。

2、有一个设置调闹钟定时时间、正常时间的按钮,选择调的对象。

3、有三个按钮分别调时、分、秒的时间。

4、有一个按钮用作开启/关闭闹铃。

5、另外需要两个时钟信号来给系统提供脉冲信号,使时钟和闹钟正常工作,分别为1Hz、1kHz的脉冲。

二、系统组成以及系统各部分的设计1、系统结构描述//要求:系统(或顶层文件)结构描述,各个模块(或子程序)的功能描述;(一)系统的顶层文件:1、顶层文件图:(见下页)2、各模块的解释:(1)、7个输入量clk_1khz、clk_1hz、key_slt、key_alarm、sec_set、min_set、hour_set:其中clk_1khz为闹铃模块提供时钟,处理后能产生“嘟”、“嘀”和变化的闹铃声音;clk_1hz为计时模块提供时钟信号,每秒计数一次;key_slt选择设置对象:定时或正常时间;key_alarm能够开启和关闭闹铃;sec_set、min_set、hour_set用于设置时间或定时,与key_slt相关联。

各按键输出为脉冲信号。

(2)、T60_A_SEC模块:这个模块式将clk_1hz这个时钟信号进行60进制计数,并产生一个分钟的触发信号。

该模块能将当前计数值实时按BCD码的格式输出。

将该输出接到两位LED数码后能时时显示秒的状态。

通过alarm_clk可以选择设置对象为时间还是定时值。

在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VHDL数字钟设计报告一. 数字钟总体设计方案:1.1设计目的①正确显示时、分、秒;②可手动校时,能分别进行时、分的校正;③整点报时功能;1.2设计思路数字钟的设计模块包括:分频器、去抖动电路、校时电路、“时、分、秒”计数器、校时闪烁电路、整点报时和译码显示电路。

每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合,生成顶层实体top。

该数字钟可以实现3个功能:计时功能、设置时间功能和报时功能。

二.数字钟模块细节2.1 分频器(fenpin)本系统共需3种频率时钟信号(1024Hz、512Hz、1Hz)。

为减少输入引脚,本系统采用分频模块,只需由外部提供1024Hz基准时钟信号,其余三种频率时钟信号由分频模块得到。

分频原理:为以1024Hz基准时钟经1024分频得到512Hz,1Hz频率时钟信号。

分频器管脚代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isport(clk1024:in std_logic;clk1,clk512:out std_logic);end fenpin ;architecture cml of fenpin isbeginprocess (clk1024)variable count1: integer range 0 to 512; variable q1: std_logic;beginif clk1024' event and clk1024='1' then if count1=512 thenq1:=not q1;count1:=0;elsecount1:=count1+1;end if;end if;clk1<=q1;end process;process(clk1024)variable count512: integer range 0 to 1; variable q512: std_logic;beginif clk1024' event and clk1024='1' thenif count512=1 thenq512:=not q512;count512:=0;elsecount512:=count512+1;end if;end if;clk512<=q512;end process;end cml;2.2 校时电路(jiaoshi)本模块要实现的功能是:正常计时、校时、校分在每个状态下都会产生不同控制信号实现相应的功能。

校时管脚图代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jiaoshi isport(rst,rvs,select_rvs,mtime,mclkin,hclkin:in std_logic;hclkout,mclkout:out std_logic);end jiaoshi;architecture cml of jiaoshi issignal h_m:std_logic;beginp1:process(rst,rvs,hclkin,mclkin,h_m,mtime)beginif rst='0' thennull;elsif rvs='1' thenhclkout<=hclkin;mclkout<=mCLKin;elsif h_m='0' thenhclkout<=hclkin;mclkout<=mtime;elsehclkout<=mtime;mclkout<=mclkin;end if;end process;p2:process(select_rvs)beginif select_rvs'event and select_rvs='1' thenh_m<=not h_m;end if;end process ;end cml;管脚图仿真图2.3 时计数器(hour)分计数器(mine)秒计数器(second)时计数器管脚图时代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(rst,hclk:in std_logic;hour0,hour1:buffer std_logic_vector(3 downto 0 ));end hour;architecture cml of hour isbeginprocess(rst,hclk,hour0,hour1)beginif rst='0' thenhour0<="0000";hour1<="0000";elsif hclk'event and hclk='1' thenif hour0="0011" and hour1="0010" thenhour0<="0000";hour1<="0000";elsif hour0="1001" thenhour0<="0000";hour1<=hour1+1;elsehour0<=hour0+1;end if;end if;end process ;分计数器管脚图分代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mine isport(rst,mclk:in std_logic;mco:out std_logic;min0,min1:buffer std_logic_vector(3 downto 0 ) );end mine;architecture cml of mine issignal min0_t,min1_t:std_logic_vector(3 downto 0 ); beginprocess(rst,mclk,min0,min1)beginif rst='0' thenmin0<="0000";min1<="0000";elsif mclk'event and mclk='1' thenif min0="0101" and min1="1001" thenmin0<="0000";min1<="0000";mco<='1';elsif min0="0010" and min0="1001" thenmin1<="0011";min0<="0000";mco<='0';elsif min0="1001" thenmin1<=min1+1;min0<="0000";elsemin0<=min0+1;end if;end process ;end cml;秒计数器管脚图秒代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport(rst,sclk:in std_logic;sco:out std_logic;sec0,sec1:buffer std_logic_vector(3 downto 0 ) );end second;architecture cml of second issignal sec0_t,sec1_t:std_logic_vector(3 downto 0 ); beginprocess(rst,sclk,sec0,sec1)beginif rst='0' thensec0<="0000";sec1<="0000";elsif sclk'event and sclk='1' thenif sec0="0101" and sec1="1001" thensec0<="0000";sec1<="0000";sco<='1';elsif sec0="0010" and sec0="1001" thensec1<="0011";sec0<="0000";sco<='0';elsif sec0="1001" thensec1<=sec1+1;sec0<="0000";elsesec0<=sec0+1;end if;end if;end process ;end cml;2.4 校时闪烁电路(flashnjiaoshi)如果正在进行校时,flashjiaoshi将实现使当前正在校时项(小时或分钟)以1Hz的频率闪烁,以便于操知道正在被校正。

校时闪烁电路管脚图代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity flashjiaoshi isport(rst,sclk,rvs,select_rvs:in std_logic;hour0in,hour1in,min0in,min1in:in std_logic_vector(3 downto 0 );hour0out,hour1out,min0out,min1out :out std_logic_vector(3 downto 0 ));end flashjiaoshi;architecture cml of flashjiaoshi issignal h_m:std_logic;beginp1:process(rst,sclk,rvs,hour0in,hour1in,min0in,min1in,h_m)beginif rst='0' thennull;elsif rvs='1' thenhour0out<=hour0in;hour1out<=hour1in;min0out<=min0in;min1out<=min1in;elsif h_m='0' thenhour0out<=hour0in;hour1out<=hour1in;if sclk='1' thenmin0out<=min0in;min1out<=min1in;elsemin0out<="1111";min1out<="1111";end if;elsemin0out<=min0in;min1out<=min1in;IF sCLK='1' thenhour0out<=hour0in;hour1out<=hour1in;elsehour0out<="1111";hour1out<="1111";end if;end if;end process p1;p2:process(select_rvs)beginif select_rvs'event and select_rvs='1' then h_m<=not h_m;end if;end process p2;end cml;2.5 整点报时电路整点报时管脚图代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity baoshi isport( clk1024,clk512 : in std_logic;min0,min1 , sec0,sec1 : in std_logic_vector (3 downto 0);speak : out std_logic);end baoshi;architecture cml of baoshi isbeginspeak<=clk512when (min1="0101" and min0="1001" and sec1="0101") and (sec0="0011" or sec0="0101" or sec0="0111") elseclk1024when( min1="0101" and min0="1001" and sec1="0101" and sec0="1001") else '0';end cml;2.6 译码显示电路该显示用的是动态扫描电路译码显示管脚图波形图代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xianshi isport(clk512:in std_logic;h1,h0,m1,m0,s1,s0:in std_logic_vector(3 downto 0 ); seg7:out std_logic_vector(6 downto 0 );select_sig:out std_logic_vector(5 downto 0 ));end xianshi;architecture cml of xianshi issignal data:std_logic_vector(3 downto 0 );signal order:std_logic_vector(2 downto 0 );beginprocess(clk512)beginif clk512' event and clk512='1' thencase order iswhen "000"=>data<=h1;select_sig<="011111";when "001"=>data<=h0;select_sig<="101111";when "010"=>data<=m1;select_sig<="110111";when "011"=>data<=m0;select_sig<="111011";when "100"=>data<=s1;select_sig<="111101";when "101"=>data<=s0;select_sig<="111110";when others=>data<="1000";select_sig<="111111"; end case;if order="101" then order<="000";else order<=order+1;end if;end if;end process ;process(data)begincase data iswhen "0000" =>seg7 <= "0000001";when "0001" =>seg7 <= "1001111";when "0010" =>seg7 <= "0010010";when "0011" =>seg7 <= "0000110";when "0100" =>seg7 <= "1001100";when "0101" =>seg7 <= "0100100";when "0110" =>seg7 <= "0100000";when "0111" =>seg7 <= "0001111";when "1000" =>seg7 <= "0000000";when "1001" =>seg7 <= "0000100";when others =>seg7 <= "1111111";end case;end process ;end cml ;2.7数字钟整体设计(top)本数字钟的设计包括分频器、去抖动电路、校时电路、“时、分、秒”计数器、校时闪烁电路和译码显示电路。

相关文档
最新文档