基于vhdl时钟的设计与制作(附完整代码)

合集下载

基于VHDL的数字钟的设计

基于VHDL的数字钟的设计

基于VHDL的数字钟的设计一、设计目的1、掌握计数器,分频器的工作原理和设计方法;2、掌握数码管的动态扫描译码显示的工作原理和设计方法;3、掌握数字钟的设计方法;4、掌握在EDA开发软件QuartusII环境下基于FPGA/CPLD的数字系统设计方法,掌握该环境下系统的功能仿真、时序仿真、管脚锁定和芯片下载的方法。

二、设计要求1、基本要求(1)设计一个24小时制的数字钟;(2)利用板上数码管显示时、分、秒,要求显示格式为:小时—分钟—秒;(3)利用板上的按键作时钟调整,调整要求为:按下时调整键,“时”迅速增加,并按24小时制(0~~23)规律循环;按下分调整键,“分”迅速增加,并按60分钟制(0~59)规律循环;(4)数字钟可清零、可保持。

2、提高要求(1)能利用EDA系统上的蜂鸣器作整点报时。

从59分55秒时开始报时,每隔一秒报时一次;00分00秒时,进行整点报时。

整点报时声的频率应与其他的报时声频率有明显区别;(2)具有按12小时模式显示与24小时模式显示切换的功能;(3)具有闹钟功能。

三、系统框图四、底层模块设计1、时基产生电路由晶振产生的频率非常稳定的脉冲,经整形、分频电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。

(电子线路部分,不用VHDL语言描述。

)2、校时电路(二选一数据选择器)LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY MUX2_1 ISPORT(K,CLK,CI : IN STD_LOGIC;Y : OUT STD_LOGIC);END MUX2_1;ARCHITECTURE b OF MUX2_1 ISBEGINY<=CLK WHEN K='0' ELSE CI;END b;3、计数器(1)24进制计数器1)24进制的VHDL语言程序LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY COUNT24 ISPORT(CLR : IN STD_LOGIC;EN : IN STD_LOGIC;CLK : IN STD_LOGIC;QL : BUFFER STD_LOGIC_VECTOR(3 downto 0);QH : BUFFER STD_LOGIC_VECTOR(3 downto 0);CO : OUT STD_LOGIC);END COUNT24;ARCHITECTURE a OF COUNT24 ISBEGINPROCESS(CLR,EN,CLK)BEGINIF CLR='0' THENQH<="0000";QL<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF(EN='1')THENIF QH=2 AND QL=3 THENQL<="0000";QH<="0000";ELSEIF QL=9 THENQL<="0000";QH<=QH+1;ELSEQL<=QL+1;END IF;END IF;END IF;END IF;END PROCESS;CO<='0'WHEN QH=2 AND QL=3 ELSE'1';END a;2)仿真波形图1、count24的时序仿真波形3)从设计文件创建模块,默任模块的名称为count24。

用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时钟的设计与制作(附完整代码)

三、实验程序及部分仿真波形图library ieee;use ieee。

std_logic_1164。

all;use ieee.std_logic_unsigned.all;entity colock isport(clk1,clk2,key1,key2: in std_logic;abc:out std_logic_vector(2 downto 0);led7s:out std_logic_vector(6 downto 0) );end entity;architecture one of colock issignal ctrl:std_logic_vector(3 downto 0);signal clk02,cs02,cm02,cs1,cs2,cm1,cm2,ch1,cp,k2,ck1,ck2:std_logic;signal s1,s2,m1,m2,h1,h2,s01,s02,m01,m02,h01,h02,s001,s002,m001,m002,h001,h002,p1,p2,disp:std_logic_vector(3 downto 0);signal ctrl0:std_logic_vector(8 downto 0);signal tmp1,tmp2:std_logic_vector(9 downto 0);signal k1:std_logic_vector(1 downto 0);begin--当处于按键调时状态时,根据K1的值来确定所调整的位,被调整的位送按键2产生的脉冲(CK2),其余进位脉冲赋0屏蔽掉process(k1,clk2,clk02,cs2,cm2,ck2)begincase k1 iswhen "00" => clk02〈=clk2;cs02〈=cs2;cm02<=cm2;when "01" =〉clk02〈=ck2;cs02<='0';cm02<='0';when "10” => clk02〈=’0';cs02〈=ck2;cm02<='0’;when "11” => clk02〈='0';cs02<=’0';cm02〈=ck2;when others =〉clk02<=clk2;cs02<=cs2;cm02<=cm2;end case ;end process;--500进制计数器,每500ms对CP进行取反一次,用于闪烁控制process(clk1)beginif rising_edge(clk1) thenif ctrl0<499 then ctrl0<=ctrl0+1;else ctrl0<="000000000";cp〈=not cp;end if;end process;——数码管动态扫描,接138的输入端process(clk1)beginif rising_edge(clk1)thenif ctrl<9 then ctrl<=ctrl+1;else ctrl〈="0000";end if ;end if ;end process;abc<=ctrl(2 downto 0);——秒个位的计数process(clk02)beginif rising_edge(clk02) thenif s01<”1001" then s01〈=s01+1;cs1<=’0';else s01〈="0000”;cs1<=’1';end if;end if;end process;--秒十位的计数process(cs1)beginif rising_edge(cs1)thenif s02〈"0101” then s02<=s02+1;cs2<='0';else s02〈=”0000";cs2〈='1’;end if;end if;end process;-—分个位的计数process(cs02)beginif rising_edge(cs02)thenif m01〈"1001" then m01<=m01+1;cm1<='0’;else m01<=”0000";cm1<='1’;end if;end if;-—分十位的计数process(cm1)beginif rising_edge(cm1) thenif m02〈”0101" then m02<=m02+1;cm2<='0';else m02<=”0000”;cm2<='1’;end if;end if;end process;-—小时个位的计数process(cm02)beginif rising_edge(cm02)thenif h02<”0010” thenif h01〈"1001” then h01<=h01+1;ch1〈='0’;else h01<="0000”;ch1<=’1’;end if ;elsei f h01<”0011"then h01〈=h01+1;ch1〈='0';else h01〈=”0000";ch1〈=’1’;end if;end if;end if;end process;--小时十位的计数process(ch1)beginif rising_edge(ch1)thenif h02<”0010" then h02<=h2+1;else h02〈="0000”;end if;end if;end process;——按键一去抖动process(clk1)beginif rising_edge(clk1)thentmp1(0)<=key1;tmp1(9 downto 1)〈=tmp1(8 downto 0);1.第五章心得体会通过此次课程设计使我更加深刻的认识EDA电子电路设计的各个模块。

VHDL编程--数字钟

VHDL编程--数字钟

一、数字钟要求:1、能进行正常的时、分、秒计时功能,分别由6个数码管显示24h、60min、60s。

2、可以进行当前时间设置。

二、应用系统功能的详细说明该数字钟使用的是二十四时计时制。

计时时间范围从00:00:00到23:59:59。

当时间及时到23:59:59时,钟面跳转到00:00:00重新下一轮计时。

该数字钟总共有三个按钮,分别是md1控制数字钟的开关,md2(1)控制数字钟的正常运行还是时间设置和md2(0)控制对时还是对分的设置。

md1:为0时,数字钟电源关闭;为1时,数字钟电源开启。

md2(1):为0时,数字钟正常运行;为1时,数字钟进入设置状态。

md2(0):为0时,数字钟对时进行设置;为1时,数字钟对分进行设置。

三、主要模块的算法描述1、扫描显示模块scan6由于试验箱上的8只显示数码管只有16个接脚,当显示四个以上时,每次只能显示一位,所以要显示六位要轮流输出,即扫描显示。

人的视觉暂留大约为1/30s,所以每只数码管闪动频率为32Hz即可。

那么8只数码管轮流显示一遍,2、计时模块hourten,huoroen,minten,minone,secten,secone计时模块共分为6个部分,分别是时、分、秒的十位和个位。

由每位之间的逻辑关系以及md1和md2来控制正常计数、进位和对小时分钟的设置。

3、译码模块dec7s把计时模块输出的时、分、秒各位的二进制数翻译成能在七段数码管上显示的七位二进制码,能够显示0~9各个数字。

四、程序的源代码清单library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity digital_clock isport(clk:in std_logic; --扫描频率,>=256Hz clk1:in std_logic; --计时频率,1Hzmd1:in std_logic; --开关,0时有效md2:in std_logic_vector(1 downto 0); --时间设置dout:out std_logic_vector(6 downto 0); --译码显示ms:out std_logic_vector(5 downto 0)); --扫描控制end digital_clock;architecture one of digital_clock issignal sel:std_logic_vector(2 downto 0);signal hou1,hou2,min1,min2,sec1,sec2:std_logic_vector(3 downto 0);signal time:std_logic_vector(3 downto 0);begin---------------------------------------------scan6scan6:process(clk1,hou1,hou2,min1,min2,sec1,sec2)beginif clk1'event and clk1='1' thenif sel="101" thensel<="000";elsesel<=sel+1;end if;end if;case sel iswhen "000"=>ms<="000001";time<=hou1;when "001"=>ms<="000010";time<=hou2;when "010"=>ms<="000100";time<=min1;when "011"=>ms<="001000";time<=min2;when "100"=>ms<="010000";time<=sec1;when "101"=>ms<="100000";time<=sec2;when others=>ms<="100000";time1=sec2;end case;end process scan6;---------------------------------------------hourtenhourten:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (hou1&hou2&min1&min2&sec1&sec2="001000110101100101011001") then hou1<="0000"; --当23:59:59时,时十位归0elsif (hou1&hou2="00100011"and md1&md2="001") thenhou1<="0000"; --当设置小时,时位是23时,时十位归0elsif ((hou2&min1&min2&sec1&sec2="10010101100101011001")or(hou2="1001"and md1&md2="001")) thenhou1<=hou1+1; --当正常计时,时间是x9:59:59时,或设置小时,end if; --时位是x9时,时十位加1end if;end process hourten;---------------------------------------------houronehourone:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clk'event and clk='1' thenif (hou1&hou2&min1&min2&sec1&sec2="001000110101100101011001") then hou2<="0000"; --当23:59:59时,时个位归0elsif (hou2&min1&min2&sec1&sec2="001000110101100101011001") thenhou2<="0000"; --当x9:59:59时,时个位归0elsif ((hou2="1001"or hou1&hou2="00100011")and(md1&md2="001")) thenhou2<="0000"; --当设置小时,时位是x9或23时,时个位归0 elsif (min1&min2&sec1&sec2="0101100101011001)or(md1&md2="001")then hou2<=hou2+1; --当正常计时,时间是xx:59:59时,或设置小时,时个位加1 end if;end if;end process hourone;---------------------------------------------mintenminten:process(clk,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (min1&min2&sec1&sec2="0101100101011001") thenmin1<="0000"; --当xx:59:59时,分十位归0elsif (min1&min2="01011001"and md1&md2="000")thenmin1<="0000"; --当设置分钟,分位是59时,分十位归0elsif (min2&sec1&sec2="100101011001")or --正常计时,时间是xx:x9:59时,或(min2="1001"and md1&md2="000") then --设置分钟,时间是x9,分十位加1min1<=min1+1;end if;end if;end process minten;---------------------------------------------minoneminone:process(clk,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (min2&sec1&sec2="100101011001") thenmin2<="0000"; --当xx:x9:59时,分个位归0elsif (min2="1001"and md1&md2="000") thenmin2<="0000"; --当设置分钟,分位是x9时分个位归0elsif (sec1&sec2="01011001")or(md1&md2="000") thenmin2<=min2+1; --正常计时,时间是xx:xx:59时,或设置分钟,分个位加1 end if;end if;end process minone;---------------------------------------------sectensecten:process(clk)beginif clk'event and clk='1' thenif (sec1&sec2="01011001") then --当时间是xx:xx:59时,秒十位归0sec1<="0000";elsif sec2="1001"then --当秒位是x9时,秒十位加1sec1<=sec1+1;end if;end if;end process secten;--------------------------------------------seconesecone:process(clk)beginif clk'event and clk='1' thenif sec2="1001" then --当秒位是x9时,秒个位归0sec2<="0000";else sec2<=sec2+1; --否则加1end if;end if;end process secone;------------------------------------------dec7sdec7s:process(time)begincase time iswhen "0000"=>dout<="0111111";when "0001"=>dout<="0000110";when "0010"=>dout<="1011011";when "0011"=>dout<="1001111";when "0100"=>dout<="1100110";when "0101"=>dout<="1101101";when "0110"=>dout<="1111101";when "0111"=>dout<="0000111";when "1000"=>dout<="1111111";when "1001"=>dout<="1101111";when others=>dout<="0111111";end case;end process dec7s;end one;。

电子秒表设计VHDL

电子秒表设计VHDL

一、设计题目:基于VHDL语言的电子秒表设计(可调时,有闹钟、定时功能)二、设计目的:⑴掌握较复杂的逻辑设计和调试⑵学习用原理图+VHDL语言设计逻辑电路⑶学习数字电路模块层次设计⑷掌握QuartusII软件及Modelsim软件的使用方法三、设计内容:(一)设计要求1、具有以二十四小时计时、显示、整点报时、时间设置和闹钟的功能。

2、设计精度要求为1S。

(二).系统功能描述1 . 系统输入:系统状态及校时、定时转换的控制信号为k、set、ds;时钟信号clk,采用实验箱的50MHz;系统复位信号为reset。

输入信号均由按键产生。

系统输出:8位LED七段数码管显示输出,蜂鸣器声音信号输出。

多功能数字钟系统功能的具体描述如下:2. 计时:set=1,ds=1工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。

3. 校时:在set=0,ds=0状态下,按下“k键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k键”则进入“秒校准”状态,之后如此循环。

1)“小时”校准状态:在“小时”校准状态下,显示“小时”数码管以1Hz的频率递增计数。

2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以1Hz的频率递增计数。

3)“秒”复零状态:在“秒复零”状态下,显示“分”的数码管以1Hz的频率递增计数。

4. 整点报时:蜂鸣器在“59”分钟的第50—59,以1秒为间隔分别发出1000Hz,500Hz的声音。

5. 显示:采用扫描显示方式驱动8个LED数码管显示小时、分、秒。

闹钟:闹钟定时时间到,蜂鸣器发出交替周期为1s的1000Hz、500Hz的声音,持续时间为一分钟;6. 闹钟定时设置:在set=0,ds=1状态下,按下“k”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k 键”则进入“秒”设置状态, 之后如此循环。

1)闹钟“小时”设置状态:在闹钟“小时”设置状态下,显示“小时”的数码管以1Hz 的频率递增计数。

用VHDL语言编写的数字钟程序

用VHDL语言编写的数字钟程序

永州职业技术学院课程设计课程名称:EDA技术实用教程题目:基于FPGA的数字钟设计系、专业:电子技术系应用电子年级、班级:07级电子大专学生姓名:**指导老师:***时间:2008年12月目录一、系统设计………………………………………………………..1.1设计要求……………………………………………………1.1.1任务………………………………………………..1.1.2要求……………………………………………….1.1.3题目分析…………………………………………二.方案论证与比较…………………………………2.1方案一…………………………………………2.2 方案二…………………………………………2.3 方案三…………………………………………三、设计思路……………………………………………………3.1硬件模块………………………………………………3.2软件模块………………………………………………….四、调试情况………………………………………………….五、系统调试…………………………………………………六、心得体会……………………………………………………... 附:参考文献……………………………………………………..用VHDL语言编写的数字钟程序摘要:本设计要求一个12进制或24进制的具有时、分、秒计时功能的数字钟,并要求能进行时、分、秒调整,每逢时有报时功能。

数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

本设计基于FPGA芯片的数字钟的设计,通过多功能数字钟的设计思路,详细叙述了整个系统的硬件、软件实现过程,实现了时间的显示和修改功能、报时功能等,并尽可能的减少误差,使得系统可以达到实际数字钟的允许误差范围内。

关键词:FBGA、数码管、按键一、系统设计1.1 设计要求1.1.1 任务设计并制作一个数字钟,通过设计,掌握电子设计的一般思路,学习电子设计的一般方法。

VHDL语言编写数字钟源代码

VHDL语言编写数字钟源代码

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clock isport (clk,clr,a,c,e,f,g:in std_logic;led_sel:out std_logic_vector( 2 downto 0);led:out std_logic_vector( 0 to 6);p:in std_logic_vector( 3 downto 0);b:in std_logic_vector(1 downto 0);d:out std_logic );end entity clock;architecture bhv of clock issignal m: integer range 0 to 999;signal hou1,hou0,min1,min0,sec1,sec0,s2:std_logic_vector(3 downto 0);signal rhou1,rhou0,rmin1,rmin0,rsec1,rsec0:std_logic_vector(3 downto 0);signal s1: std_logic_vector(2 downto 0);signal clk1,clk2,d1,d2:std_logic;signal n : integer range 0 to 1;beginp1:process(clk) --二分频beginif (rising_edge(clk)) thenif n=1 then n<=0;clk2<='1';else n<=n+1; clk2<='0';end if;end if ;end process;p2:process(clk)beginif (rising_edge(clk)) thenif m=999 then m<=0;clk1<='1';else m<=m+1; clk1<='0';end if;end if ;end process P2;p3: process(clk1,clr) ---时间设置beginif (clr='1') then sec0<="0000";sec1<="0000";min0<="0000";min1<="0000";hou0<="0000";hou1<="0000";elsif rising_edge(clk1) thenif a='1' then --校时if b="00" then hou1<=p;elsif b="01" then hou0<=p;elsif b="10" then min1<=p;elsif b="11" then min0<=p;end if;end if;if sec0>="1001" thensec0<="0000";if sec1>="0101" thensec1<="0000";if min0>="1001" thenmin0<="0000";if min1>="0101" thenmin1<="0000";if g='0'thenif hou1<"0010" thenif hou0="1001" thenhou0<="0000";hou1<=hou1+1 ;else hou0<=hou0+1;elsif hou1="0010" and hou0="0011" thenhou1<="0000";hou0<="0000";else hou0<=hou0+1;end if ;end if;if g='1'thenif hou1<"0001" thenif hou0="1001" thenhou0<="0000";hou1<=hou1+1 ;else hou0<=hou0+1;end if;elsif hou1="0001" and hou0="0001" thenhou1<="0000";hou0<="0000";else hou0<=hou0+1;end if ;end if;else min1<=min1+1;end if;else min0<=min0+1;else sec1<=sec1+1;end if;else sec0<=sec0+1;end if;end if ;end process P3;p4:process(clk) --数码管选通beginif(rising_edge (clk)) thenif s1="111" thens1<="000";else s1<=s1+1;end if;end if;-- led_sel<=s1;end process;p5:process(s1,f) ---闹铃显示beginif f='0'thencase s1 iswhen "000"=>s2<=sec0;led_sel<="000";when "001"=>s2<=sec1;led_sel<="001";when "010"=>s2<=min0;led_sel<="010";when "011"=>s2<=min1;led_sel<="011";when "100"=>s2<=hou0;led_sel<="100";when "101"=>s2<=hou1;led_sel<="101";when others=>null;end case;elsif f='1' thencase s1 iswhen "010"=>s2<=rmin0;led_sel<="010";when "011"=>s2<=rmin1;led_sel<="011";when "100"=>s2<=rhou0;led_sel<="100";when "101"=>s2<=rhou1;led_sel<="101";when others=>null;end case;end if;end process;p6:process(s2) --七段译码器beginif(s1<6) thencase s2 iswhen "0000"=>led<="0111111"; when "0001"=>led<="0000110"; when "0010"=>led<="1011011"; when "0011"=>led<="1001111"; when "0100"=>led<="1100110"; when "0101"=>led<="1101101"; when "0110"=>led<="1111101"; when "0111"=>led<="0000111"; when "1000"=>led<="1111111"; when "1001"=>led<="1101111"; when others=>null;end case ;else led<="0000000";end if;end process;p7:process(clk1,c) --整点报时beginif (rising_edge(clk))thenif c='1' thenif (min1="0101" and min0="1001" and sec1="0101") then if(sec0="0000"or sec0="0010" or sec0="0100" orsec0="0110" or sec0="1000")thend1<='1'and clk2;else d1<='0';end if;elsif (min1="0000" and min0="0000" and sec0="0000" andsec1="0000") thend1<='1';else d1<='0';end if ;end if ;end if ;end process;p8:process(clk,e) ---闹铃设置beginif (rising_edge(clk))thenif e='1' thenif b="000"then rhou1<=p;elsif b="001"then rhou0<=p;elsif b="010"then rmin1<=p;elsif b="011"then rmin0<=p;end if;end if;end if;end process;p9:process(clk) ---闹铃比较beginif(rising_edge(clk))thenif e='1'thenif(rhou1=hou1 and rhou0=hou0 and rmin1=min1 and rmin0=min0)then if(sec0="0001"or sec0="0010" or sec0="0011" orsec0="0011" or sec0="0100" )thend2<='1'and clk2;else d2<='0';end if;else d2<='0';end if;end if;end if;end process;d<=d1 or d2;end architecture bhv;。

基于VHDL的数字时钟设计

基于VHDL的数字时钟设计

目录1 概述...................................................................... 错误!未定义书签。

1.1数字时钟的工作原理 (1)1.2设计任务 (1)2 系统总体方案设计 (2)3 VHDL模块电路设计 (3)3.1模块实现 (3)3.1.1分频模块pinlv (3)3.1.2按键去抖动模块qudou (5)3.1.3按键控制模块self1 (6)3.1.4秒、分六十进制模块cantsixty (7)3.1.5时计数模块hourtwenty (9)3.1.6秒、分、时组合后的模块 (9)3.1.7数码管显示模块 (10)3.2数字时钟的顶层设计原理图 (13)3.3系统仿真与调试 (14)结束语 (16)参考文献 (17)致谢 (18)附录源程序代码 (19)1 概述1.1数字时钟的工作原理数字钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。

秒计数器的计数时钟CLK为1Hz的标准信号,可以由晶振产生的50MHz信号通过分频得到。

当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号,每一秒钟发出一个中断给CPU,CPU采用NIOS,它响应中断,并读出小时、分、秒等信息。

CPU对读出的数据译码,使之动态显示在数码管上。

1.2 设计任务设计一个基于VHDL的数字时钟,具体功能要求如下:1.在七段数码管上具有时--分--秒的依次显示。

2.时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数。

3.整点报时,当计数到整点时扬声器发出响声。

4.时间设置:可以通过按键手动调节秒和分的数值。

此功能中可通过按键实现整体清零和暂停的功能。

基于VHDL的数字时钟设计.doc

基于VHDL的数字时钟设计.doc

基于VHDL的数字时钟设计邵阳大学课程设计目录1总结11.1数字钟11.2设计任务12系统总体方案设计23 VHDL模块电路设计33.1模块实现33.1.1分频模块吕品33.1.2按键抖动模块qudou 53.1.3按键控制模块self1 63.1.4秒,六进制模块can 60 73 . 1 . 5小时计数模块hour 20 93 . 1 . 6秒,分钟,时间组合模块93.1.7数码管显示模块103.2顶层设计原理图133.3系统模拟和调试14结论16参考17确认18附录源代码191 1.1数字时钟工作原理概述数字时钟电路的基本结构由两个60位计数器和一个24位计数器组成,分别计时秒、分和小时。

当计时达到23: 59分59秒时,另一个计数脉冲将重置计数器并重新开始计时。

第二计数器的计数时钟CLK是1Hz的标准信号,其可以通过将晶体振荡器产生的50MHz信号分频而获得。

当数字时钟处于定时状态时,第二计数器的进位输出信号用作分钟计数器的计数信号,分钟计数器的进位输出信号用作小时计数器的计数信号,并且每秒向中央处理器发送一个中断。

中央处理器采用NIOS,它响应中断并读出小时、分钟、秒钟和其他信息。

中央处理器对读取的数据进行解码,并在数码管上动态显示。

1.2设计任务是设计一个基于VHDL的数字时钟。

具体功能要求如下:1.通过将晶体振荡器产生的50MHz信号除以频率,可以获得七段数码管上带有时间秒计数器的时钟CLK为1Hz的标准信号。

当数字时钟处于定时状态时,第二计数器的进位输出信号用作分钟计数器的计数信号,分钟计数器的进位输出信号用作小时计数器的计数信号,并且每秒向中央处理器发送一个中断。

中央处理器采用NIOS,它响应中断并读出小时、分钟、秒钟和其他信息。

中央处理器对读取的数据进行解码,并在数码管上动态显示。

1.2设计任务是设计一个基于VHDL的数字时钟。

具体功能要求如下:1.在七段数码管上,有时间:你可以通过按键手动调整秒和分钟的值。

基于vhdl时钟、正弦波和方波实验报告设计说明书

基于vhdl时钟、正弦波和方波实验报告设计说明书

数字时钟、正弦波和方波实验报告一:实验要求。

设计一个时钟,能设置两个时间,到这两个时间能够控制自动响铃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的简易数字钟

基于VHDL的简易数字钟

课程设计报告设计题目:基于VHDL语言的简易数字钟设计摘要随着电子设计自动化技术(EDA)的进步,数字电路在实际生活当中已经占据了重要的位置。

在EDA技术中,最为瞩目的是以现代电子技术为特征的逻辑设计仿真测试技术。

该技术的出现,使电子系统设计发生了质的变化。

设计速度快、体积小、重量轻、功耗小的集成电路已成为趋势。

用VHDL 语言开发的数字电路,大大简化了对工控电路的设计并且减低了成本。

本文介绍了利用VHDL硬件描述语言设计一款多功能数字钟的方法。

可以实现显示、预置时分秒,年月日(可以准确显示每月天数,包括对闰年的计算);秒表;整点报时的功能。

利用6个7段数码管显示时分秒或年月日。

在Quartus II 开发环境下编译仿真了设计的程序。

仿真结果表明,该设计方法切实可行,具有一定的借鉴性。

关键词:EDA,VHDL,数字钟,Quartus II目录摘要I一、课程设计目的 1二、课程设计内容及要求 12.1 设计内容12.2设计要求 12.3发挥部分1三、VHDL程序设计 13.1整体介绍 13.2时钟模块 23.3日期模块23.4整点报时模块33.5秒表模块4四、仿真与分析 5五、器件编程下载及设计结果 5六、课程设计总结 5七、参考文献 6八、附录7一、课程设计目的掌握利用可编程逻辑器件和EDA设计工具进行电子系统设计的方法二、课程设计内容及要求2.1设计内容用VHDL语言实现数字钟的设计,要求设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。

2.2设计要求用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。

Up为高电平时,upclk有脉冲到达时,预置位加1.否则减1.2.3发挥部分本设计除满足基本要求外,还实现了秒表及整点报时的功能。

基于-VHDL语言实现数字电子钟设计

基于-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〕显示模块。

显示模块由一个六进制计数器模块和一个七段译码器组成。

进制计数器为六选一选择器的选择判断端提供输入信号, 六选一选择器的选择输出端分别接秒个位、秒十位、分个位、分十位和时个位、时十位的选通位用来完成动态扫描显示,同时依次输出秒个位、秒十位、分个位、分十位和时个位、时十位数向给译码模块。

基于vhdl的电子闹钟设计

基于vhdl的电子闹钟设计

基于vhdl的电子闹钟设计基于VHDL的电子闹钟设计电子闹钟是我们日常生活中常用的物品之一,在我们每天的生活中起着非常重要的作用。

现在,大量人们自己亲手打造自己的电子闹钟,这已经成为一种流行的风潮。

其中一种制作闹钟的方法就是使用VHDL语言进行设计,在这里我们将介绍基于VHDL的电子闹钟的设计。

VHDL的定义VHDL是“可综合的硬件描述语言”的缩写,其对于电子器件的设计和工程制造具有极大的重要性。

VHDL可以直接描述数字电路,然后通过其编译器和模拟器生成对应的硬件电路。

它是在20世纪80年代产生的,在当时风靡一时,并且现在仍然是电路仿真和设计过程中的重要工具。

闹钟设计一块基于FPGA开发板上的闹钟的设计步骤从以下几个方面进行:模块划分根据闹钟的功能划分模块,这些模块可以包括:时钟模块(时钟、分钟、秒钟、时令),轮询模块(轮询时钟模块,测量按键状态),SDRAM芯片(用来存储当前时间和闹钟时间),闹铃模块(识别达到设定时间的闹钟)。

时钟模块时钟模块是一个非常重要的模块。

时钟的频率由外部电源提供,频率通常为50Hz,可以通过PLL进行锁相放大处理来获取1秒的时钟信号。

时钟信号用于计算当前时间和闹钟时间。

模块中还必须包括一个开关,在程序中用来控制时钟的启停,以及计时和控制亮度的显示屏。

轮询模块轮询模块用来轮询时钟模块和按键状态。

通过轮询时钟模块,我们可以获取当前时间,并存储在SDRAM芯片中。

同时,我们也可以通过轮询按键状态来检测用户是否更改了设置,如设定时间、闹钟时间和亮度等。

SDRAMSDRAM芯片的作用是用来存储当前时间和闹钟时间。

需要的RAM空间相当小,只需要一些字节就足够了。

因此,常用的8位RAM芯片足以实现此目的。

闹铃模块闹铃模块用于识别设定时间是否和当前时间相同,并在正确的时间触发闹钟响铃。

当闹钟时间到来时,闹铃模块会向用户发出闹钟信号,通过控制LED灯来让用户知道是闹钟响了。

要注意的是,该模块必须在程序运行时轮询保持警醒状态。

(2024版)vhdl数字时钟设计

(2024版)vhdl数字时钟设计

可编辑修改精选全文完整版一、题目分析1、功能介绍(1)具有时、分、秒计数显示功能,以24小时循环计时。

(2)时钟计数显示时有LED灯的花样显示。

(3)具有调节小时、分钟及清零的功能。

(4)具有整点报时功能。

2、总体方框图3、性能指标及功能设计1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。

2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。

我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。

3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。

可以根据我们自己任意时间的复位。

4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。

产生“滴答.滴答”的报警声音。

5)LED灯在时钟显示时有花样显示信号产生。

即根据进位情况,LED不停的闪烁,从而产生“花样”信号。

二、选择方案1、方案选择方案一:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。

采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。

显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。

方案二:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。

采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。

显示:小时采用24进制,而分钟和秒均60进制。

终上所述,考虑到试验时的简单性,故我选择了方案二。

三、细化框图根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:四、编写程序、仿真和分析1、秒计数器1)VHDL 语言描述程序见附录 2)秒计数器的仿真波形图3)波形分析利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即enmin=1;reset 作为复位信号低电平有效,数字时钟控制单元 时调整 分调整使能端信号 CLK 信号时显示 分显示 秒显示24进制 60进制 60进制LED 显示整点报花样显即高电平时正常循环计数,低电平清零。

VHDL电子时钟程序

VHDL电子时钟程序

VHDL电子时钟程序最近收到网上朋友们来信咨询如何设计电子时钟,也有很多热心朋友把他设计的时钟或时钟程序发给我。

因时间和水平有限不能一一回复和审查到底哪些是合格或是网络转载的。

但是感觉可能对部分网友会有所用处,就把自己手头已有的一些时钟设计的相关资料放到网上,希望大家能多多包涵。

我会不定时的把一些时钟设计资料上传到本博客,希望多多关注。

下面是电子时钟设计的部分VHDL程序代码。

VHDL电子钟程序(小时和分钟)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity hours isPort ( rst4,selector3,ky_3j : in STD_LOGIC;C10 : in std_logic;dat40 : out std_logic_vector(7 downto 0));end hours;architecture Behavioral of hours issignal dat41,dat42 : std_logic_vector(7 downto 0):=(others =>'0');beginprocess(rst4,C10,ky_3j)begincase selector3 iswhen '1' => dat42<=dat41; if ky_3j'event and ky_3j='1' thenif dat41(7 downto 4)="0010" and dat41(3 downto 0)="0011"then dat41<="00000000";elsif dat41(3 downto 0)<"1001" then dat41(3 downto 0)<=dat41(3 downto 0)+1;else dat41(3 downto 0)<="0000";dat41(7 downto 4)<=dat41(7 downto 4)+ 1;end if ;end if ;dat40<=dat41;when '0' => dat41<=dat42; if(rst4 = '0') then dat42<=(others =>'0');elsif C10'event and C10='1' thenif dat42(7 downto 4)="0010" and dat42(3 downto 0)="0011"then dat42<="00000000";elsif dat42(3 downto 0)<"1001" then dat42(3 downto 0)<=dat42(3 downto 0)+1;else dat42(3 downto 0)<="0000";dat42(7 downto 4)<=dat42(7 downto 4)+ 1;end if;end if;dat40<=dat42;when others =>null;end case;end process;end Behavioral;VHDL电子钟程序(分频和秒计数)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity miseconds isPort ( clk_100HZ,rst1 : in STD_LOGIC;A : out std_logic;dat10 : out std_logic_vector(7 downto 0));end miseconds;architecture Behavioral of miseconds issignal dat1 : std_logic_vector(7 downto 0):=(others =>'0');beginprocess(clk_100HZ,rst1)beginif(rst1 = '0') then dat1<=(others =>'0');elsif clk_100HZ'event and clk_100HZ='1' thenif dat1(7 downto 4)="1001" and dat1(3 downto 0)="1001"then A<='1'; dat1(7 downto 0)<="00000000";else A<='0';if dat1(3 downto 0)<"1001" then dat1(3 downto 0)<=dat1(3 downto 0)+1; else dat1(3 downto 0)<="0000";if dat1(7 downto 4)<"1001" then dat1(7 downto 4)<=dat1(7 downto 4)+1; else dat1(7 downto 4)<="0000";end if;end if;end if;end if;end process;dat10<=dat1;end Behavioral;VHDL电子钟程序(数码管显示扫描程序)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity scannor isPort ( clk_1MHZ,T : in std_logic;clks : in std_logic_vector(5 downto 0);D : in std_logic_vector(31 downto 0);positions : out std_logic_vector(7 downto 0);segments : out std_logic_vector(7 downto 0));end scannor;architecture Behavioral of scannor issignal cnt8:STD_LOGIC_vector(2 downto 0);signal sin :STD_LOGIC_vector(7 downto 0);signal d1 : STD_LOGIC_vector(3 downto 0);signal bt1 : std_logic_vector(7 downto 0);beginP1: process(clk_1MHZ)beginif (clk_1MHZ'event and clk_1MHZ='1') thencase cnt8 iswhen "000" => sin <= "00000001" ; d1 <= D(3 downto 0) ; led8s(7) <= '0';when "001" => sin <= "00000010" ; d1 <= D(7 downto 4) ; led8s(7) <= '0';when "010" => sin <= "00000100" ; d1 <= D(11 downto 8) ; led8s(7) <= '1';when "011" => sin <= "00001000" ; d1 <= D(15 downto 12) ; led8s(7) < = '0';when "100" => sin <= "00010000" ; d1 <= D(19 downto 16) ; led8s(7) < = '1';when "101" => sin <= "00100000" ; d1 <= D(23 downto 20) ; led8s(7) < = '0';when "110" => sin <= "01000000" ; d1 <= D(27 downto 24) ; led8s(7) < = '1';when "111" => sin <= "10000000" ; d1 <= D(31 downto 28) ; led8s(7) < = '0';when others => null ;end case ;end if ;end process P1;P2 : process(clk_1MHZ)beginif clk_1MHZ'event and clk_1MHZ ='1' then cnt8 <= cnt8+1; end if ;end process P2;P3 : process(d1)begincase d1 iswhen "0000" => led8s(6 downto 0) <= "0111111" ;when "0001" => led8s(6 downto 0) <= "0000110" ;when "0010" => led8s(6 downto 0) <= "1011011" ;when "0011" => led8s(6 downto 0) <= "1001111" ;when "0100" => led8s(6 downto 0) <= "1100110" ;when "0101" => led8s(6 downto 0) <= "1101101" ;when "0110" => led8s(6 downto 0) <= "1111101" ;when "0111" => led8s(6 downto 0) <= "0000111" ;when "1000" => led8s(6 downto 0) <= "1111111" ;when "1001" => led8s(6 downto 0) <= "1101111" ;when others => null ;end case ;end process P3;bt1(0) <= sin(0) ;bt1(1) <= sin(1) ;bt1(2) <= sin(2) and clks(0) ;bt1(3) <= sin(3) and clks(1) ;bt1(4) <= sin(4) and clks(2) ;bt1(5) <= sin(5) and clks(3) ;bt1(6) <= sin(6) and clks(4) ;bt1(7) <= sin(7) and clks(5) ;bt(0)<=not(bt1(0)and T);bt(1)<=not(bt1(1)and T);bt(2)<=not(bt1(2)and T);bt(3)<=not(bt1(3)and T);bt(4)<=not(bt1(4)and T);bt(5)<=not(bt1(5)and T);bt(6)<=not(bt1(6)and T);bt(7)<=not(bt1(7)and T);end Behavioral;。

EDA课程设计——基于VHDL语言的数字时钟设计(可编辑)

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数字钟代码

VHDL数字钟代码

use ieee.std_logic_1164.all;--顶层实体,用的是20Mhz的时钟use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity clock_shu isport(clk : in std_logic;reset : in std_logic;duan : out std_logic_vector(5 downto 0);data_o : out std_logic_vector(7 downto 0) );end;architecture a of clock_shu iscomponent count60port(carry : std_logic;rst : std_logic;times : out integer range 0 to 59;full : out std_logic);end component;component count24port(carry : in std_logic;rst : in std_logic;times : out integer range 0 to 23--full : out std_logic);end component;component i60bcdport(interg : in integer range 0 to 59;ten : out std_logic_vector(7 downto 0);one : out std_logic_vector(7 downto 0) );end component;component i24bcdport(interg : in integer range 0 to 23;ten : out std_logic_vector(7 downto 0);one : out std_logic_vector(7 downto 0) );end component;signal carry1,carry2 : std_logic;signal abin1,abin2 : integer range 0 to 59; signal abin3 : integer range 0 to 23; signal clk_1h : std_logic;signal sh,sl,mh,ml,hh,hl : std_logic_vector(7 downto 0); signal cnt : integer range 0 to 5 :=0; beginprocess(clk)--分频为1hzconstant counter_len:integer:=19999999;variable cnt:integer range 0 to counter_len;beginif clk'event and clk='1' thenif cnt=counter_len thencnt:=0;elsecnt:=cnt+1;end if;case cnt iswhen 0 to counter_len/2=>clk_1h<='0';when others =>clk_1h<='1';end case;end if;end process;process(clk)variable cnt1 : integer range 0 to 200;variable cnt2 : integer range 0 to 10;beginif clk'event and clk='1' thenif cnt1=200 thencnt1:=0;if cnt2=10 thencnt2:=0;if(cnt=5)thencnt<=0;elsecnt<=cnt+1;end if;elsecnt2:=cnt2+1;end if;elsecnt1:=cnt1+1;end if;end if;end process;process(clk)beginif clk='1' thencase cnt iswhen 0 => duan<="000001";data_o<=sl;when 1 => duan<="000010";data_o<=sh;when 2 => duan<="000100";data_o<=ml;when 3 => duan<="001000";data_o<=mh;when 4 => duan<="010000";data_o<=hl;when 5 => duan<="100000";data_o<=hh;when others=>duan<="000000";end case;end if;end process;u1 : count60 port map(carry=>clk_1h,rst=>reset,times=>abin1,full=>carry1); u2 : count60 port map(carry=>carry1,rst=>reset,times=>abin2,full=>carry2); u3 : count24 port map(carry=>carry2,rst=>reset,times=>abin3);u4 : i60bcd port map(interg=>abin1,ten=>sh,one=>sl);u5 : i60bcd port map(interg=>abin2,ten=>mh,one=>ml);u6 : i24bcd port map(interg=>abin3,ten=>hh,one=>hl);end;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity count60 is--分,秒计数器port(carry : std_logic;rst : std_logic;times : out integer range 0 to 59;full : out std_logic);end;architecture a of count60 issignal time_s : integer range 0 to 59;beginprocess(rst,carry)beginif rst='1' thentime_s<=0;full<='0';elsif rising_edge(carry) thenif time_s=59 thentime_s<=0;full<='1';elsetime_s<=time_s+1;full<='0';end if;end if;end process;times<=time_s;end;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity count24 is--时计数器port(carry : in std_logic;rst : in std_logic;times : out integer range 0 to 23--full : out std_logic);end;architecture a of count24 issignal time_s : integer range 0 to 23; beginprocess(rst,carry)beginif rst='1' thentime_s<=0;--full<='0';elsif rising_edge(carry) thenif time_s=23 thentime_s<=0;--full<='1';elsetime_s<=time_s+1;--full<='1';end if;end if;end process;times<=time_s;end;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity i60bcd is--分,秒显示port(interg : in integer range 0 to 59;ten : out std_logic_vector(7 downto 0);one : out std_logic_vector(7 downto 0));end;architecture a of i60bcd isbeginprocess(interg)begincase interg iswhen 0|10|20|30|40|50 => one<="11000000";when 1|11|21|31|41|51 => one<="11111001";when 2|12|22|32|42|52 => one<="10100100";when 3|13|23|33|43|53 => one<="10110000";when 4|14|24|34|44|54 => one<="10011001";when 5|15|25|35|45|55 => one<="10010010";when 6|16|26|36|46|56 => one<="10000011";when 7|17|27|37|47|57 => one<="11111000";when 8|18|28|38|48|58 => one<="10000000";when 9|19|29|39|49|59 => one<="10011000";when others => one<=null;end case;case interg iswhen 0|1|2|3|4|5|6|7|8|9 =>ten<="11000000";when 10|11|12|13|14|15|16|17|18|19 =>ten<="11111001";ten<="10100100";when 30|31|32|33|34|35|36|37|38|39 => ten<="10110000";when 40|41|42|43|44|45|46|47|48|49 => ten<="10011001";when 50|51|52|53|54|55|56|57|58|59 => ten<="10010010";when others => ten<=null;end case;end process;end;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity i24bcd is--时显示port(interg : in integer range 0 to 23;ten : out std_logic_vector(7 downto 0);one : out std_logic_vector(7 downto 0) );end;architecture a of i24bcd isbeginprocess(interg)begincase interg iswhen 0|10|20 => one<="11000000";when 1|11|21 => one<="11111001";when 2|12|22 => one<="10100100";when 3|13|23 => one<="10110000";when 4|14 => one<="10011001";when 5|15 => one<="10010010";when 6|16 => one<="10000011";when 7|17 => one<="11111000";when 8|18 => one<="10000000";when 9|19 => one<="10011000";when others => one<=null;end case;case interg isten<="11000000";when 10|11|12|13|14|15|16|17|18|19 => ten<="11111001";when 20|21|22|23 => ten<="10100100";when others => ten<=null;end case;end process;end;回答者:ail傻大个|三级| 2010-12-29 17:19library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINSECONDb isport(clk,clrm,stop:in std_logic;----时钟/清零信号secm1,secm0:out std_logic_vector(3 downto 0);----秒高位/低位co:out std_logic);-------输出/进位信号end MINSECONDb;architecture SEC of MINSECONDb issignal clk1,DOUT2:std_logic;beginprocess(clk,clrm)variable cnt1,cnt0:std_logic_vector(3 downto 0);---计数VARIABLE COUNT2 :INTEGER RANGE 0 TO 10 ;beginIF CLK'EVENT AND CLK='1'THENIF COUNT2>=0 AND COUNT2<10 THENCOUNT2:=COUNT2+1;ELSE COUNT2:=0;DOUT2<= NOT DOUT2;END IF;END IF;if clrm='1' then----当clr为1时,高低位均为0cnt1:="0000";cnt0:="0000";elsif clk'event and clk='1' thenif stop='1' thencnt0:=cnt0;cnt1:=cnt1;end if;if cnt1="1001" and cnt0="1000" then----当记数为98(实际是经过59个记时脉冲)co<='1';----进位cnt0:="1001";----低位为9elsif cnt0<"1001" then----小于9时cnt0:=cnt0+1;----计数--elsif cnt0="1001" then--clk1<=not clk1;elsecnt0:="0000";if cnt1<"1001" then----高位小于9时cnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;secm1<=cnt1;secm0<=cnt0;end process;end SEC;秒模块程序清单library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SECOND isport(clk,clr:in std_logic;----时钟/清零信号sec1,sec0:out std_logic_vector(3 downto 0);----秒高位/低位co:out std_logic);-------输出/进位信号end SECOND;architecture SEC of SECOND isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);---计数beginif clr='1' then----当ckr为1时,高低位均为0cnt1:="0000";cnt0:="0000";elsif clk'event and clk='1' thenif cnt1="0101" and cnt0="1000" then----当记数为58(实际是经过59个记时脉冲)co<='1';----进位cnt0:="1001";----低位为9elsif cnt0<"1001" then----小于9时cnt0:=cnt0+1;----计数elsecnt0:="0000";if cnt1<"0101" then----高位小于5时cnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;分模块程序清单library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINUTE isport(clk,en:in std_logic;min1,min0:out std_logic_vector(3 downto 0);co:out std_logic);end MINUTE;architecture MIN of MINUTE isbeginprocess(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thenif en='1' thenif cnt1="0101" and cnt0="1000" thenco<='1';cnt0:="1001";elsif cnt0<"1001" thencnt0:=cnt0+1;elsecnt0:="0000";if cnt1<"0101" thencnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;end if;min1<=cnt1;min0<=cnt0;end process;end MIN;时模块程序清单library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity HOUR isport(clk,en:in std_logic;----输入时钟/高电平有效的使能信号h1,h0:out std_logic_vector(3 downto 0));----时高位/低位end HOUR;architecture hour_arc of HOUR isbeginprocess(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);----记数beginif clk'event and clk='1' then---上升沿触发if en='1' then---同时“使能”为1if cnt1="0010" and cnt0="0011" thencnt1:="0000";----高位/低位同时为0时cnt0:="0000";elsif cnt0<"1001" then----低位小于9时,低位记数累加cnt0:=cnt0+1;elsecnt0:="0000";cnt1:=cnt1+1;-----高位记数累加end if;end if;end if;h1<=cnt1;h0<=cnt0;end process;end hour_arc;动态扫描模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity SELTIME isport(clk:in std_logic;------扫描时钟secm1,secm0,sec1,sec0,min1,min0,h1,h0:in std_logic_vector(3 downto 0);-----分别为秒个位/时位;分个位/daout:out std_logic_vector(3 downto 0);----------------输出sel:out std_logic_vector(2 downto 0));-----位选信号end SELTIME;architecture fun of SELTIME issignal count:std_logic_vector(2 downto 0);----计数信号beginsel<=count;process(clk)beginif(clk'event and clk='1') thenif(count>="111") thencount<="000";elsecount<=count+1;end if;end if;case count iswhen"111"=>daout<= secm0;----秒个位when"110"=>daout<= secm1;----秒十位when"101"=>daout<= sec0;----分个位when"100"=>daout<= sec1;----分十位when"011"=>daout<=min0; ----时个位when"010"=>daout<=min1;----时十位when"001"=>daout<=h0;when others =>daout<=h1;end case;end process;end fun;报时模块library ieee;use ieee.std_logic_1164.all;entity ALERT isport(m1,m0,s1,s0:in std_logic_vector(3 downto 0);------输入秒、分高/低位信号clk:in std_logic;------高频声控制q500,qlk:out std_logic);----低频声控制end ALERT;architecture sss_arc of ALERT isbeginprocess(clk)beginif clk'event and clk='1' thenif m1="0101" and m0="1001" and s1="0101" then----当秒高位为5,低位为9时且分高位为5if s0="0001" or s0="0011" or s0="0101" or s0="0111" then---当分的低位为1或3或5或7时q500<='1';----低频输出为1elseq500<='0';----否则输出为0end if;end if;if m1="0101" and m0="1001" and s1="0101" and s0="1001" then---当秒高位为5,低位为9时且分高位为5,----分低位为9时,也就是“59分59秒”的时候“报时”qlk<='1';-----高频输出为1elseqlk<='0';end if;end if;end process;end sss_arc;显示模块library ieee;use ieee.std_logic_1164.all;entity DISPLAY isport(d:in std_logic_vector(3 downto 0);----连接seltime扫描部分d信号q:out std_logic_vector(6 downto 0));----输出段选信号(电平)end DISPLAY;architecture disp_are of DISPLAY isbeginprocess(d)begincase d iswhen"0000" =>q<="0111111";--显示0when"0001" =>q<="0000110";--显示1when"0010" =>q<="1011011";--显示2when"0011" =>q<="1001111";--显示3when"0100" =>q<="1100110";--显示4when"0101" =>q<="1101101";--显示5when"0110" =>q<="1111101";--显示6when"0111" =>q<="0100111";--显示7when"1000" =>q<="1111111";--显示8when others =>q<="1101111";--显示9end case;end process;end disp_are;顶层文件(原理图输入)******************************************************************** 数字钟设计模块与程序(不含秒表)*********************************************************************1.分频模块(原理图输入)2. 秒模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SECOND isport(clk,clr:in std_logic;sec1,sec0:out std_logic_vector(3 downto 0);co:out std_logic);end SECOND;architecture SEC of SECOND isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0); beginif clr='1' thencnt1:="0000";cnt0:="0000";elsif clk'event and clk='1' thenif cnt1="0101" and cnt0="1000" thenco<='1';cnt0:="1001";elsif cnt0<"1001" thencnt0:=cnt0+1;elsecnt0:="0000";if cnt1<"0101" thencnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;3.分模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINUTE isport(clk,en:in std_logic;min1,min0:out std_logic_vector(3 downto 0);co:out std_logic);end MINUTE;architecture MIN of MINUTE isbeginprocess(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0); beginif clk'event and clk='1' thenif en='1' thenif cnt1="0101" and cnt0="1000" thenco<='1';cnt0:="1001";elsif cnt0<"1001" thencnt0:=cnt0+1;elsecnt0:="0000";if cnt1<"0101" thencnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;end if;min1<=cnt1;min0<=cnt0;end process;end MIN;4.时模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity HOUR isport(clk,en:in std_logic;h1,h0:out std_logic_vector(3 downto 0)); end HOUR;architecture hour_arc of HOUR isbeginprocess(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thenif en='1' thenif cnt1="0010" and cnt0="0011" thencnt1:="0000";cnt0:="0000";elsif cnt0<"1001" thencnt0:=cnt0+1;end if;end if;end if;h1<=cnt1;h0<=cnt0;end process;end hour_arc;5.扫描模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity SELTIME isport(clk:in std_logic;sec1,sec0,min1,min0,h1,h0:in std_logic_vector(3 downto 0);daout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end SELTIME;architecture fun of SELTIME issignal count:std_logic_vector(2 downto 0);beginsel<=count;process(clk)beginif(clk'event and clk='1') thenif(count>="101") thencount<="000";elsecount<=count+1;end if;end if;case count iswhen"000"=>daout<= sec0; when"001"=>daout<= sec1; when"010"=>daout<= min0; when"011"=>daout<= min1; when"100"=>daout<=h0;when others =>daout<=h1;end case;end process;end fun;6.显示模块程序library ieee;use ieee.std_logic_1164.all;entity DISPLAY isport(d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0)); end DISPLAY;architecture disp_are of DISPLAY isbeginprocess(d)begincase d iswhen"0000" =>q<="0111111";when"0001" =>q<="0000110";when"0010" =>q<="1011011";when"0011" =>q<="1001111";when"0100" =>q<="1100110";when"0101" =>q<="1101101";when"0110" =>q<="1111101";when"0111" =>q<="0100111";when"1000" =>q<="1111111";when others =>q<="1101111";end case;end process;end disp_are;7.定时闹钟模块程序library ieee;use ieee.std_logic_1164.all;entity ALERT isport(m1,m0,s1,s0:in std_logic_vector(3 downto 0);clk:in std_logic;q500,qlk:out std_logic);end ALERT;architecture sss_arc of ALERT isbeginprocess(clk)beginif clk'event and clk='1' thenif m1="0101" and m0="1001" and s1="0101" thenif s0="0001" or s0="0011" or s0="0101" or s0="0111" thenq500<='1';elseq500<='0';end if;end if;if m1="0101" and m0="1001" and s1="0101" and s0="1001" then qlk<='1';elseqlk<='0';end if;end if;end process;end sss_arc;。

基于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的高音,结束时为整点。

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

三、实验程序及部分仿真波形图
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity colock is
port(clk1,clk2,key1,key2: in std_logic;
abc:out std_logic_vector(2 downto 0);
led7s:out std_logic_vector(6 downto 0) );
end entity;
architecture one of colock is
signal ctrl:std_logic_vector(3 downto 0);
signal clk02,cs02,cm02,cs1,cs2,cm1,cm2,ch1,cp,k2,ck1,ck2:std_logic;
signal s1,s2,m1,m2,h1,h2,s01,s02,m01,m02,h01,h02,s001,s002,m001,m002,h001, h002,p1,p2,disp:std_logic_vector(3 downto 0);
signal ctrl0:std_logic_vector(8 downto 0);
signal tmp1,tmp2:std_logic_vector(9 downto 0);
signal k1:std_logic_vector(1 downto 0);
begin
--当处于按键调时状态时,根据K1的值来确定所调整的位,被调整的位送按键2产生的脉冲(CK2),其余进位脉冲赋0屏蔽掉
process(k1,clk2,clk02,cs2,cm2,ck2)
begin
case k1 is
when "00" => clk02<=clk2;cs02<=cs2;cm02<=cm2;
when "01" => clk02<=ck2;cs02<='0';cm02<='0';
when "10" => clk02<='0';cs02<=ck2;cm02<='0';
when "11" => clk02<='0';cs02<='0';cm02<=ck2;
when others => clk02<=clk2;cs02<=cs2;cm02<=cm2;
end case ;
end process;
--500进制计数器,每500ms对CP进行取反一次,用于闪烁控制
process(clk1)
begin
if rising_edge(clk1) then
if ctrl0<499 then ctrl0<=ctrl0+1;
else ctrl0<="000000000";cp<=not cp;
end if;
end process;
--数码管动态扫描,接138的输入端
process(clk1)
begin
if rising_edge(clk1) then
if ctrl<9 then ctrl<=ctrl+1;
else ctrl<="0000";
end if ;
end if ;
end process;
abc<=ctrl(2 downto 0);
--秒个位的计数
process(clk02)
begin
if rising_edge(clk02) then
if s01<"1001" then s01<=s01+1;cs1<='0';
else s01<="0000";cs1<='1';
end if;
end if;
end process;
--秒十位的计数
process(cs1)
begin
if rising_edge(cs1) then
if s02<"0101" then s02<=s02+1;cs2<='0';
else s02<="0000";cs2<='1';
end if;
end if;
end process;
--分个位的计数
process(cs02)
begin
if rising_edge(cs02) then
if m01<"1001" then m01<=m01+1;cm1<='0';
else m01<="0000";cm1<='1';
end if;
end if;
--分十位的计数
process(cm1)
begin
if rising_edge(cm1) then
if m02<"0101" then m02<=m02+1;cm2<='0';
else m02<="0000";cm2<='1';
end if;
end if;
end process;
--小时个位的计数
process(cm02)
begin
if rising_edge(cm02) then
if h02<"0010" then
if h01<"1001" then h01<=h01+1;ch1<='0';
else h01<="0000";ch1<='1';
end if ;
else
if h01<"0011"then h01<=h01+1;ch1<='0';
else h01<="0000";ch1<='1';
end if;
end if;
end if;
end process;
--小时十位的计数
process(ch1)
begin
if rising_edge(ch1) then
if h02<"0010" then h02<=h2+1;
else h02<="0000";
end if;
end if;
end process;
--按键一去抖动
process(clk1)
begin
if rising_edge(clk1) then
tmp1(0)<=key1;tmp1(9 downto 1)<=tmp1(8 downto 0);
1.第五章心得体会
通过此次课程设计使我更加深刻的认识EDA电子电路设计的各个模块。

时钟程序的编写按键调整时间同时让处于调整的位闪烁体会到各个进程之间通过控制信号建立起来的紧密联系,以及通过移位来达到按键的去抖动。

进行硬件调试时了解到芯片跟外围设备之间的连接程序功能由简单到复杂,通过课堂提问一步步完善时钟的各个模块,将本学期所学到的内容串到一起,最终完成课程设计。

相关文档
最新文档