VHDL电子钟实验报告
- 格式:doc
- 大小:1017.00 KB
- 文档页数:18
期末大作业课程设计实验报告设计题目:基于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语言实现数字钟的设计班级:电子 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进行设计开发的过程,锻炼和提高我们对器件的编程调试能力。
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课程设计项目——数字钟学院:机电工程学院专业年级:07级电子科学与技术学号:学生姓名:指导老师:成绩评定:数字钟设计1、课程设计目的1、熟悉和掌握VHDL模块间的组合设计思路了解数字钟的工作原理2、掌握各芯片的逻辑功能及使用方法。
3、了解数字钟的组成及工作原理。
4、熟悉数字钟的设计与制作。
5、掌握常用仪器、仪表的正确方法,学会电路整机指标的测试6、巩固和加深学生对模拟电子技术,数字逻辑电路等课程基本知识的理解。
2、课程设计内容基本要求:1. 设计一个按HH:MM:SS(六位七段LED)显示的24小时制数字钟。
2.通过三个按键能够实现复位和校对时间的功能。
3、设计条件硬件:利用PC设计软件:MAX+PLUS2实验总原理图4、设计思路:过一个数据选择器和一个3-8译码器分别控制数码管的段选和位选实现数码管的动态扫描。
5、设计步骤:设计步骤:1、24进制计数器的vhdl语言编译、仿真程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY jjsqh ISPORT(rest,clk:IN std_logic;co:OUT std_logic;qh,ql:BUFFER std_logic_vector(3 DOWNTO 0));END jjsqh;ARCHITECTURE one OF jjsqh ISBEGINco<='1'WHEN(ql="1001"AND qh="0101")ELSE'0';PROCESS(clk,rest)BEGINIF(rest='0')THENql<="0000";qh<="0000";ELSIF(clk'EVENT AND clk='1')THEN IF(ql =3)THEN ql<="0000";IF(qh =2)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;END PROCESS;END one;2、60进制计数器的vhdl语言编译、仿真程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY jsqm ISPORT(rest,clk:IN std_logic;co:OUT std_logic;qh,ql:BUFFER std_logic_vector(3 DOWNTO 0));END jsqm;ARCHITECTURE one OF jsqm ISBEGINco<='1'WHEN(ql="1001"AND qh="0101")ELSE'0';PROCESS(clk,rest)BEGINIF(rest='0')THENql<="0000";qh<="0000";ELSIF(clk'EVENT AND clk='1')THENIF(ql =9)THEN ql<="0000";IF(qh =5)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;END PROCESS;END one;3、6选1数据选择器(控制LED的段选和位选)的vhdl语言编译、仿真程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ledchoose isport(a,b,c,d,e,f: in std_logic_vector(3 downto 0);s: out std_logic_vector(2 downto 0);z: out std_logic_vector(3 downto 0);cp:in std_logic);end ledchoose;architecture behave of ledchoose isbeginprocess(cp)variable sn :std_logic_vector(2 downto 0);beginif cp'event and cp='1' then if sn="101"thensn:="000";elsesn:=sn+1;end if;case sn iswhen "000"=>z<=a;when "001"=>z<=b;when "010"=>z<=c;when "011"=>z<=d;when "100"=>z<=e;when "101"=>z<=f;when others=>null;end case;end if;s<=sn;end process;end behave;4、3-8译码器的vhdl语言编译、仿真程序如下:library ieee;use ieee.std_logic_1164.all;entity decode isport(iny:in std_logic_vector(2 downto 0);outy:out std_logic_vector(7 downto 0));end decode;architecture behave of decode isbeginprocess(iny)begincase iny iswhen "000"=>outy<="11111110";when "001"=>outy<="11111101";when "010"=>outy<="11111011";when "011"=>outy<="11110111";when "100"=>outy<="11101111";when "101"=>outy<="11011111";when "110"=>outy<="10111111";when "111"=>outy<="01111111";when others=>null;end case;end process;end behave;5、整点报时模块的编译、仿真Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity alarm isPort( a,b,c,d:in std_logic_vector(3 downto 0);q:out std_logic);End alarm;Architecture a of alarm isBeginprocess(a,b,c,d)beginif (a=0 and b=0 and c=0 and d=0) then q<='1' ;else q<='0';end if ;end process;end a;6、LED数码管显示模块的编译、仿真程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY led ISPORT( inp:IN STD_LOGIC_VECTOR(3 DOWNTO 0);outp:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END led;ARCHITECTURE be OF led ISBEGINprocess(inp)BEGINCASE inp isWHEN"0000"=>outp<="1111110";WHEN"0001"=>outp<="0110000";WHEN"0010"=>outp<="1101101";WHEN"0011"=>outp<="1111001";WHEN"0100"=>outp<="0110011";WHEN"0101"=>outp<="1011011";WHEN"0110"=>outp<="1011111";WHEN"0111"=>outp<="1110000";WHEN"1000"=>outp<="1111111";WHEN"1001"=>outp<="1111011";WHEN others=>outp<="0000000";end CASE;END process;END be;7、校时电路:校时、校分由两个或门组成,闲置是,按键开关一端与Vcc连接,当按下时,另一端与或门输入和下拉电阻连接,实现校时功能8、将所有模块合起来就是一个完整的动态扫描时钟之所以这样做是因为从流程图我们可以清晰的看到时钟的各部分组成,能够轻易的对其进行功能模块的拆分,好进行各个模块的vhdl语言的编译、仿真,从而使编译简化,不至于那么复杂,更易于编写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所示的用三态门实现动态显示的框图。
数字时钟、正弦波和方波实验报告一:实验要求。
设计一个时钟,能设置两个时间,到这两个时间能够控制自动响铃30秒。
时间调整和定时的设置使用两个按钮实现。
二:试验程序及说明。
说明:clk:时钟基准信号,做正常走时的秒时钟信号。
clk2:用于在调整(校准)时间和设置闹铃时间时,相应的时钟位能闪烁。
clk5:用于使蜂鸣器响所需的1KHz的时钟。
pb1:用于调整时间的按钮。
每按一下,相应的时钟位时钟加一。
pb2:用于调整时钟的状态。
正常走时状态0,设置时钟小时1,设置时钟分钟2,设置定时a小时时3,设置定时a分钟4,设置定时b小时5,设置定时b小时6,然后回到0。
状态的变化根据pb1的信号变化。
pb2用来改变设置值。
pt1:输出的秒时钟信号。
pt2:输出的10秒位信号。
ptml:输出的分钟信号的低位。
ptmh:输出的分钟信号的高位。
pthl:输出的小时信号的低位。
pthh:输出的小时信号的高位。
ring:输出的打铃信号,它和时钟信号clk5相与的结果作为蜂鸣器的输入信号。
k:打铃开关信号,当为高电平时,打铃时间设置有效,到打铃时间,蜂鸣器会响;当为低电平时,到打铃时间,蜂鸣器不响。
下面的signal信号均为中间量,并不作为最终的输出信号。
q1,q2,q3,q4,q5,q6:秒的高低位输出信号,分钟的高低位输出信号,小时的高低位输出信号。
dq1,dq2,dq3,dq4,dq5,dq6:正常走时的时钟信号输出,相应的译码输出,分别对应:秒的高低位,分钟的高低位,小时的高低位。
dpa1,dpa2,dpa3,dpa4,dpb1,dpb2,dpb3,dpb4:设置的打铃时间的小时和分钟的译码输出信号,分为a和b。
dpa1,dpa2:a打铃时间的分钟的低高位,dpa3,dpa4:小时的低高位;dpb1,dpb2:b打铃时间的低高位,dpb3,dpb4:小时的低高位。
c1,c2,c3,c4:c1:秒低位的进位信号,c2:秒高位的进位信号,c3:分钟的低位进位信号,c4:分钟的高位进位信号。
基于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说话,仍需中断进修!。
数字钟的设计一、系统功能概述(一)、系统实现的功能: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的输入信号加一。
VHDL实验报告5090309160 庄炜旭实验三. 4位可逆计数器,4位可逆二进制代码-格雷码转换器设计一.实验目的学习时序电路的设计,仿真和硬件测试,进一步熟悉VHDL设计技术1. 学习4位可逆计数器的设计2. 学习4位可逆二进制代码-格雷码转换器设计二.实验内容设计4位可逆计数器,及4位可逆二进制代码-格雷码转换器,并仿真,下载。
[具体要求]1.4位可逆计数器a)使用CLOCK_50作为输入时钟,其频率为50MHz(对于频率大于50Hz的闪烁,人眼会看到连续的光),因而,对其进行225的分频后,再用于时钟控制。
(可利用实验一)b)使用拨码开关SW17作为模式控制,置‘1’时为加法计数器,置‘0’时为减法计数器,同时使用LEDR17显示SW17的值。
c)使用KEY3作为异步复位开关(按下时为0,不按为1),当为加法计数器时,置“0000”,当为减法计数器时,置“1111”。
d)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高位,LEDR0为低位。
2.4位可逆二进制代码――格雷码转换器a)使用拨码开关SW17作为模式控制,置‘1’时为二进制代码―>格雷码转换,置‘0’时为格雷码―>二进制代码,同时使用LEDR17显示SW17的值。
b)使用拨码开关SW3, SW2, SW1, SW0作为输入的被转换数,SW3为高位,SW0为低位。
c)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高位,LEDR0为低位。
三.管脚设定SW[0]PIN_N25SW[1]PIN_N26SW[2]PIN_P25SW[3] PIN_AE14SW[17] PIN_V2LEDR[0] PIN_AE23LEDR[1] PIN_AF23LEDR[2] PIN_AB21LEDR[3] PIN_AC22LEDR[17] PIN_AD12KEY[3] PIN_W26CLOCK_50 PIN_N2四.相关知识二进制代码与格雷码相互转换格雷码(Gray Code,简称G码)是典型的循环码,它是由二进制码(Binary,简称 B 码)导出的。
实验一秒表计数器的设计实验目的:本实验通过设计四种频率可选的数字时钟系统, 以达到熟悉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、设计一个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);四、实验结果及分析本设计,满足了本次试验设计的任务要求,能显示时分秒,并且可以手动调节分和时。
数字电子钟设计实验报告实验项目名称:数字电子钟的设计实验项目性质:普通试验所属课程名称:VHDL程序设计实验计划学时:4学时一、实验目的掌握VHDL程序设计方法二、实验内容和要求能够实现小时(24进制)、分钟和秒钟(60进制)的计数功能具有复位功能功能扩展:具有复位、整点报时提示、定时闹钟等功能在软件工具平台上,进行VHDL语言的各模块编程输入、编译实现和仿真验证。
三、实验主要仪器设备和材料计算机四.设计思想1、计数模块:Q0为六十进制计数,代表秒计数,当Q0<59时,每逢一个时钟上升沿Q0增加1,直到当Q0=59时,再逢一个时钟上升沿,立即输出高电平至进位CLK1。
使得CLK1为一个60秒为周期的时钟,作为六十进制分计数Q1时钟。
同理,当Q1<59时,每逢一个时钟上升沿Q1加1,直到当Q1=59,再逢一个时钟上升沿,立即输出高电平到进位CLK2。
CLK2是一个60分钟为周期的时钟,作为二十四进制时计数Q2的时钟。
2、复位模块:分别在秒,分,时计数模块语句之前加入一个判断语句IF RST=‘0',如果复位输入RST为0则跳过计数模块,不为0则运行计数模块。
3、整点报时模块:判断秒,分计数是否都为0,【Q1=("000000")AND(Q0="000000")】,如果是,则令报时ALM0输出为1,不是则输出为0。
4、定时闹钟模块:用户设定闹钟DS(秒),DF(分),DM(秒)的输入,当它们都等于输出的Q1(分),Q2(时)数值时,则令闹钟ALM1输出为1,否则输出为0。
五、源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clock ISPORT (CLK,RST:IN STD_LOGIC;CLK1,CLK2:INOUT STD_LOGIC;CLK3:OUT STD_LOGIC;S:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);F,M:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);DS:IN STD_LOGIC_VECTOR(4 DOWNTO 0);DF,DM:IN STD_LOGIC_VECTOR(5 DOWNTO 0);ALM0,ALM1:OUT STD_LOGIC);END clock;ARCHITECTURE one OF clock ISBEGINPROCESS(CLK,RST)VARIABLE Q0: STD_LOGIC_VECTOR(5 DOWNTO 0);VARIABLE Q1: STD_LOGIC_VECTOR(5 DOWNTO 0);VARIABLE Q2: STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINIF RST='0' THEN Q0:=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF Q0="111011" THEN CLK1 <= '1' ;ELSE CLK1<='0';END IF ;IF Q0<59 THEN Q0:=Q0+1;ELSE Q0:=(OTHERS=>'0') ;END IF;END IF;IF RST='0' THEN Q1:=(OTHERS=>'0');ELSIF CLK1'EVENT AND CLK1='1' THENIF Q1="111011" THEN CLK2 <= '1' ;ELSE CLK2<='0';END IF ;IF Q1<59 THEN Q1:=Q1+1;ELSE Q1:=(OTHERS=>'0') ;END IF;END IF;IF RST='0' THEN Q2:=(OTHERS=>'0');ELSIF CLK2'EVENT AND CLK2='1' THENIF Q2="011101" THEN CLK3 <= '1' ;ELSE CLK3<='0';END IF ;IF Q2<23 THEN Q2:=Q2+1;ELSE Q2:=(OTHERS=>'0') ;END IF;END IF;M<=Q0;F<=Q1;S<=Q2;IF Q1=("000000")AND(Q0="000000") THEN ALM0<='1'; ELSE ALM0<='0';END IF ;IF (Q0=DM)AND (Q1=DF)AND(Q2=DS) THEN ALM1<='1'; ELSE ALM1<='0';END IF;END PROCESS;END one;六、仿真图秒到分进位:分到时进位:23时59分59秒进位:复位:整点报时:闹钟报时(闹钟时间设定为7时16分4秒):七、总结经过这次实验,让我更加熟悉了VHDL的编程实现。
XXXXXXXXXXXXXXXXXX CPLD实验报告实验名称:VHDL数字钟姓名: XXXXXX班级:电子与电气081学号: 830702043指导老师: XXXXXX实验摘要一、实验摘要数字钟用到了很多我们数字电路里所学的数电知识,例如译码器、编码器、数据选择器、计数器等~。
因此,做数字钟有着非常现实的意义。
本实验使用VHDL 语句进行各模块的编写。
由于本实验采用的是动态扫描的方式循环点亮四个共阳数码管,所以需要编写共阳显示译码器,三态门芯片、四进制计数器以及二~四译码器。
关键字:数字钟、CPLD、VHDL、动态扫描、三态门实验目的二、实验目的学会使用Quartus Ⅱ这款EDA常用设计软件。
掌握在Quartus Ⅱ中VHDL语句的使用方法。
加强巩固层次设计思路、电路图的作法、仿真方法和作图技巧。
掌握CPLD实验箱的使用和电路的加载运行方法。
实验内容三、实验内容(1)认识VHDL数字系统设计分为硬件设计和软件设计,但是随着计算机技术、超大规模集成电路(CPLD、FPGA)的发展和硬件描述语言的出现,软、硬件设计之间的界限被打破数字系统的硬件设计可以完全用软件来实现,只要掌握了HDL语言就可以设计出各种各样的数字逻辑电路。
(2)60进制计数器的设计60进制计数器输入信号:时钟脉冲,对于本次数字钟设计为节省资源占用可不设置清零输入,输出信号:两位BCD码输出,一个进位输出。
entity counter60v isport(clk :in bit;ql :buffer integer range 9 downto 0;qh :buffer integer range 5 downto 0;jinwei:out bit);end counter60v;architecture c60 of counter60v is 生成的模块功能示意图:beginprocess( clk )beginif(clk'event and clk='1')thenif ql=9 then Array ql<=0;if qh=5 thenqh<=0;elseqh<=qh+1;end if;elseql<=ql+1;end if;end if;if(qh=5 and ql=9)thenjinwei<='1';elsejinwei<='0';end if;end process;end c60;(3)24进制计数器的设计24进制计数器输入信号:时钟脉冲,对于本次数字钟设计为节省资源占用可不设置清零输入,输出信号:两位BCD 码输出,这里不需要进位输出。
基于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〕显示模块。
显示模块由一个六进制计数器模块和一个七段译码器组成。
进制计数器为六选一选择器的选择判断端提供输入信号, 六选一选择器的选择输出端分别接秒个位、秒十位、分个位、分十位和时个位、时十位的选通位用来完成动态扫描显示,同时依次输出秒个位、秒十位、分个位、分十位和时个位、时十位数向给译码模块。
本科实验报告题目:数字钟课程名称:学院(系):专业:班级:学生姓名:学号:完成日期:成绩: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数字时钟实验报告VHDL数字时钟设计一、实验目的:进一步练习VHDL语言设计工程的建立与仿真的步骤和方法、熟悉VHDL语言基本设计实体的编写方法。
同时,在已有知识的基础上,简单综合编写程序,仿制简单器械。
二、实验环境:PC个人计算机、Windows XP操作系统、Quartus II集成开发环境软件。
三、设计要求:运用VHDL语言编写一个数字钟,具体要求:1. 具有时、分、秒计数的十进制数字显示功能,以24小时循环计时。
2. 具有手动调节小时,分钟的功能。
3. 具有闹钟的功能,能够在设定的闹钟时间发出闹铃声。
四、实验步骤:1. 定义输入输出信号量port(clk:in std_logic; ---时钟speak:out std_logic; ---铃dout:out std_logic_vector(7 downto 0); ---晶体管显示 setclk:in std_logic_vector(2 downto 0); ---操作按钮d1,d2,d3,d4,d5,d6: out std_logic); ---六个晶体管 2. 定义结构体中的信号量signal sel:std_logic_vector(2 downto 0);signal hou1:std_logic_vector(3 downto 0); --时分秒的个位和十位signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);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 downto 0);signal sec2:std_logic_vector(3 downto 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电子钟的设计目录一、概述 (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计数输入端,通过时钟脉冲来控制电子钟。
(3)电子钟计数模块有5个输入ci,nreset,load,clk,d[7..0],作用分别是ci是使能端,直接接高电位,nreset是复位,load和d[7..0]是用来置数的,clk提供计数时钟,也就是一秒一个脉冲。
输出端有三个,co是进位功能,只有“秒”和“分”模块有效,qh[3..0],ql[3..0]是分位的数字输出端,一个是十位,一个是个位。
(4)显示模块输入端有qcnt接受来自计数器的计数实现显示扫描,d0h,d1h,d0m,d1m,d0s,d1s分别是接收的来自“秒”“分”“时”个位十位的数据,seg输出LCD的段扫描结果,SCAN输出LCD位扫描结果。
(2)系统各个模块的VHDL程序1.显示模块Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;entity display isport(qcnt: IN integer range 0 to 7; --计数值输入d0h,d1h,d0m,d1m,d0s,d1s : IN integer range 0 to 9;--分位得到的十位数和个位数seg: OUT std_logic_vector(6 downto 0); --7位段码输出scan: OUT std_logic_vector(7 downto 0) --8为位码输出);end display;architecture a of display issignal data: integer range 0 to 10;beginprocess(qcnt,d0h,d1h,d0m,d1m,d0s,d1s)begincase qcnt iswhen 0 => scan <= "11111110"; data <= d0h;when 1 => scan <= "11111101"; data <= d1h;when 2 => scan <= "11111011"; data<= 10;when 3 => scan <= "11110111"; data <= d0m;when 4 => scan <= "11101111"; data <= d1m;when 5 => scan <= "11011111"; data<= 10;when 6 => scan <= "10111111"; data <= d0s;when others => scan <= "01111111"; data <= d1s;end case;end process;process(data)begincase data iswhen 0 => seg <= "0111111"; --0when 1 => seg <= "0000110"; --1when 2 => seg <= "1011011"; --2when 3 => seg <= "1001111"; --3when 4 => seg <= "1100110"; --4when 5 => seg <= "1101101"; --5when 6 => seg <= "1111101"; --6when 7 => seg <= "0000111"; --7when 8 => seg <= "1111111"; --8when 9 => seg <= "1100111"; --9when 10 => seg <="1000000"; --when others => seg <= "0000000";end case;end process;end a;动态显示计数器部分:LIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY qcnt_display IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(clk : IN STD_LOGIC;qcnt : buffer STD_LOGIC_VECTOR(2 downto 0) );-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!END qcnt_display ;-- Architecture BodyARCHITECTURE cnt_architecture OF qcnt_display IS BEGINPROCESS (clk)BEGINIF (clk'EVENT AND clk = '1') THENqcnt <= qcnt+1;END IF;END PROCESS;END cnt_architecture;2. 分位计数模块“秒”,“分”部分:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY counter60 IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(ci: in std_logic;nreset : IN STD_LOGIC:='1';load: IN STD_LOGIC;clk : IN STD_LOGIC;d :in std_logic_vector(7 downto 0);co: out std_logic;qh: buffer std_logic_vector(3 downto 0);ql : buffer std_logic_vector(3 downto 0));-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END counter60;-- Architecture BodyARCHITECTURE counter_architecture OF counter60 ISBEGINco<='1' when ( qh ="0101" and ql ="1001" and ci ='1') else '0'; process (clk,nreset)beginif (nreset='0') thenqh <="0000";ql <="0000";elsif rising_edge(clk) thenif (load ='1') thenqh<= d(7 downto 4);ql<= d(3 downto 0);elsif(ci='1') thenif(ql=9) thenql<="0000";if(qh=5) thenqh<="0000";elseqh<=qh+1;end if;elseql<=ql+1;end if;end if;end if;end process;END counter_architecture;“时”部分:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY counter24 IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(ci: in std_logic;nreset : IN STD_LOGIC:='1';load: IN STD_LOGIC;clk : IN STD_LOGIC;d :in std_logic_vector(7 downto 0);co: out std_logic:='0';qh: buffer std_logic_vector(3 downto 0);ql : buffer std_logic_vector(3 downto 0));-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END counter24;-- Architecture BodyARCHITECTURE counter_architecture OF counter24 IS BEGIN--co<='1' when ( qh ="0010" and ql ="0011" and ci ='1') else '0'; process (clk,nreset)begin--if (nreset='0') then--qh <="0000";-- ql <="0000";if rising_edge(clk) thenif (load ='1') thenqh<= d(7 downto 4);ql<= d(3 downto 0);elsif(ci='1') thenif(qh=0 or qh=1) thenif(ql=9) thenql<="0000";if(qh=2) thenqh<="0000";elseqh<=qh+1;end if;elseql<=ql+1;end if;elseif(ql=3) thenql<="0000";if(qh=2) thenqh<="0000";elseqh<=qh+1;end if;elseql<=ql+1;end if;end if;end if;end if;end process;END counter_archit ecture;3. 分频模块Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv_duo isport(clkin: IN std_logic;clkout_200HZ: buffer std_logic;--键盘去抖动clkout_1KHZ : buffer std_logic;--显示模块计数器 clkout_10HZ : buffer std_logic;--按键选择clkout_1HZ : buffer std_logic --计数器模块);End fdiv_duo;Architecture a of fdiv_duo issignal cnt_1HZ : natural range 0 to 24999999 ;signal cnt_10HZ : natural range 0 to 249999999;signal cnt_1KHZ : natural range 0 to 24999;signal cnt_200HZ : natural range 0 to 124999;Beginprocess(clkin)beginif(clkin'event and clkin='1') thenif cnt_1HZ=24999999 thencnt_1HZ<= 0;clkout_1HZ<= not clkout_1HZ;elsecnt_1HZ<= cnt_1HZ + 1;end if;if cnt_10HZ=249999999 thencnt_10HZ <= 0;clkout_10HZ <= not clkout_10HZ;elsecnt_10HZ <= cnt_10HZ + 1;end if;if cnt_1KHZ=24999 thencnt_1KHZ<= 0;clkout_1KHZ <=not clkout_1KHZ;elsecnt_1KHZ <=cnt_1KHZ + 1;end if;if cnt_200HZ=124999 thencnt_200HZ <= 0;clkout_200HZ<= not clkout_200HZ; elsecnt_200HZ <= cnt_200HZ + 1;end if;end if;end process;End a;4. 键盘控制模块时钟和分钟的键盘去抖动和“增益”,“清零”控制部分:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity debounce isport(clk200hz ,reset : IN std_logic; --200HZ时钟din : IN std_logic;dout : OUT std_logic);End debounce;architecture a of debounce istype state is (S0, S1, S2);--定义状态机类型signal current : state;beginprocess (clk200hz,reset,din)beginif(reset='1') then --状态机复位dout输出信号复位current<=S0;dout<='1';elsif(clk200hz'event and clk200hz='1') thencase current iswhen S0=>dout<='1';if(din='0') thencurrent<=S1;elsecurrent<=S0;end if;when S1=>dout<='1';if(din='0')thencurrent<=S2;elsecurrent<=S0;end if;when S2=>dout<='0';if(din='0') thencurrent<=S2;elsecurrent<=S0;end if;when others=>dout<='1';current<=S0;end case;end if;end process;end a;作用解释:当检测到按键被按下时,将按键的输出直接给计数模块的时钟控制通过按键控制计数时钟从而实现“增益”功能,如果没有检测到有效按键,“时”和“分”计数模块就受进位信号的控制。