原创 《数字钟的设计》

2007-1-16 01:02 4058 6 21 分类: FPGA/CPLD

EDA 电子钟课设报告(一)


作者:shou1723 提交日期:2007-1-14 15:23:00


A:本次课程设计选的题目:《数字钟的设计》
 其基本要求如下:
1. 实现基本的计时功能,输入1kHz的时钟,采用24小时制计时,能显示时、分、秒。
2. 校正功能; 时分均有校时功能。
3. 当计时器运行到59分49秒开始报时,每鸣叫1s就停叫1s,共鸣叫6,前5响为低音,频率为750Hz;最后1响为高音,频率为1KHz。
4. 可设定夜间某个时段不报时。
5. 设定闹钟,当按下闹铃开关时,可在规定时间闹铃,当开关复位时,闹铃停止。
 方案一
 根据方案的要求,可以用VHDL语言 ,采用自顶向下的设计方法。可用分频的方法得到1HZ的时钟用与计数;用7段数码管来显示时间,需要6个数码管;同时可以根据不同的频率的输入来调节蜂鸣器的鸣叫声音,从而实现整点报时功能和闹铃功能。对于闹铃功能,可以用一个触发器和一个寄存器来实现。根据要求基本确定由以下模块组成:
1. 秒计数模块:秒计数,在频率为1HZ的时钟下以60次为循环计数,并产生进位信号影响分计数;
2. 分计数模块:分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数;
3. 时计数模块:时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数;
4. 频率产生模块:主要有2个部分,一个是产生1HZ的计数频率,一个是产生725HZ和500HZ的蜂鸣器鸣叫频率;
5. 时间显示模块:通过选中不同的数码管,同时进行一定频率的扫描显示时,分,秒。
6. 时间设置模块:设置调试使能端,可以调时,分。基本功能是在使能端为高电平时,可以使时和分循环计数;
7. 整点报时模块:在秒计数到50秒时,同时分计数到59分开始,丰鸣器产生每个2秒的鸣叫(500HZ),到整点是产生750HZ的鸣叫。
8. 闹钟模块:在设定闹钟闹铃时间后,当闹钟使能端有效时,可在闹铃时间闹铃,通过人工拨0后停闹。
 秒计数模块
 VHDL源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY MIAN IS ---------------秒计数模块-------------
 PORT(RD,CLK:IN STD_LOGIC; ------------秒复位信号-----
 SEC1,SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
 CO:OUT STD_LOGIC);
END MIAN;
ARCHITECTURE MIANA OF MIAN IS
BEGIN
 PROCESS(CLK,RD) --秒计数进程
 VARIABLE CNT1,CNT0:STD_LOGIC_VECTOR(3 DOWNTO 0); 输出信号
 BEGIN
 IF RD='1' THEN ----复位信号为1时,秒计数清零---
 CNT1:="0000";
 CNT0:="0000";
 ELSIF CLK 'EVENT AND CLK='1' THEN -输入时钟信号和清零信号
IF CNT1="0101"AND CNT0="1000"THEN –当秒计数为58时进位信号为1

 CO<='1';
 CNT0:="1001"; -秒低位小于9时,加1
 ELSIF CNT0<"1001"THEN

 CNT0:=CNT0+1;
 ELSE
 CNT0:="0000";
 IF CNT1<"0101"THEN -秒高位小于5时,加1
 CNT1:=CNT1+1;
 ELSE
 CNT1:="0000";
 CO<='0';
 END IF;
 END IF;
 END IF;

 SEC1<=CNT1;
 SEC0<=CNT0;
 END PROCESS;
END MIANA;




EDA 电子钟课设报告(二)


作者:shou1723 提交日期:2007-1-14 15:24:00


B:分计数模块
VHDL源程序:
LIBRARY IEEE; --分计数模块
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY MINA IS
 PORT(EN,CLK:IN STD_LOGIC; -输入时钟信号和进位信号
 MIN1,MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --输出分计数和进位
 CO:OUT STD_LOGIC);
END MINA;
ARCHITECTURE MIN OF MINA IS
BEGIN
 PROCESS(CLK) --分计数进程
 VARIABLE CNT1,CNT0:STD_LOGIC_VECTOR(3 DOWNTO 0);
 BEGIN
 IF CLK'EVENT AND CLK='1' THEN 时钟上升沿,en为1时分开始计数
 IF EN='1'THEN
 IF CNT1="0101"AND CNT0="1000"THEN -当分计数到58时产生进位信号
 CO<='1';
 CNT0:="1001";
 ELSIF CNT0<"1001"THEN --分低位小于9时,cnt0加1


 CNT0:=CNT0+1;
 ELSE
 CNT0:="0000";
 IF CNT1<"0101"THEN
 CNT1:=CNT1+1;
 ELSE
 CNT1:="0000";
 CO<='0';
 END IF;
 END IF;
 END IF;
 END IF;
 MIN1<=CNT1;
 MIN0<=CNT0;
 END PROCESS;
END MIN;

:时计数模块
VHDL源程序:
LIBRARY IEEE; --时计数模块
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY HOUR IS
 PORT(EN,CLK:IN STD_LOGIC; -输入时钟信号和分模块进位信号
 H1,H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); -输出h0,h1
END HOUR;
ARCHITECTURE HOURA OF HOUR IS
BEGIN
 PROCESS(CLK) --小时计数进程
 VARIABLE CNT1,CNT0:STD_LOGIC_VECTOR(3 DOWNTO 0);
 BEGIN
 IF CLK 'EVENT AND CLK='1' THEN --时钟上升沿,en为1时小时开始计数
 IF EN='1' THEN
 IF CNT0="0011"AND CNT1="0010"THEN
 CNT0:="0000";
 CNT1:="0000";
 ELSIF CNT0<"1001"THEN
 CNT0:=CNT0+1;
 ELSE
 CNT0:="0000";
 CNT1:=CNT1+1;
 END IF;
 END IF;
 END IF;
 H1<=CNT1;
 H0<=CNT0;
 END PROCESS;
END HOURA;




EDA 电子钟课设报告(三)


作者:shou1723 提交日期:2007-1-14 15:25:00


D:频率产生模块:
1.500HZ和1KHZ的频率产生:
LIBRARY IEEE; --小时计数模块
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CCC IS
 PORT(CLK:IN STD_LOGIC;
 q1k,Q500:OUT STD_LOGIC);
END CCC;
ARCHITECTURE CCCA OF CCC IS
SIGNAL X:STD_LOGIC;
BEGIN
 PROCESS(CLK)

 BEGIN
 IF CLK 'EVENT AND CLK='1' THEN
 X<=NOT X;
 END IF;
q1k<=X;
 END PROCESS;
PROESS(X)
VARIABLE Y:STD_LOGIC;
BEGIN
 IF X 'EVENT AND X='1' THEN
 Y:=NOT Y;
 END IF;
 Q500<=Y;
END PROCESS;
 END CCC;

2.1HZ的频率产生:
 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FEN10 IS
 PORT(CLK:IN STD_LOGIC;
 Q:OUT STD_LOGIC);
END FEN10;
ARCHITECTURE FENA OF FEN10 IS
BEGIN
 PROCESS(CLK)
 VARIABLE CNT:INTEGER RANGE 0 TO 999;
 BEGIN
 IF CLK 'EVENT AND CLK='1' THEN
 IF CNT<999 THEN
 CNT:=CNT+1;
 Q<='0';
 ELSE
 CNT:=0;
 Q<='1';
 END IF;
 END IF;
 END PROCESS;
END FENA;




EDA 电子钟课设报告(四)


作者:shou1723 提交日期:2007-1-14 15:26:00


E:时间显示模块:
1.数码管选中:
LIBRARY IEEE;
 USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BBB IS ----用于选中对应的数码管----
 PORT(SEC1,SEC0,MIN1,MIN0,H1,H0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
 SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
 Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END BBB;
ARCHITECTURE BBBA OF BBB IS
BEGIN
 PROCESS(SEL)
 BEGIN
 CASE SEL IS ----由低位到高位依次显示秒,分,时-------
 WHEN"000"=>Q<=SEC0; -当000时输出秒低位
 WHEN"001"=>Q<=SEC1; -001时输出秒高位
 WHEN"011"=>Q<=MIN0; -当011时输出分低位
 WHEN"100"=>Q<=MIN1; -当100时输出分高位
 WHEN"110"=>Q<=H0; --当110时输出时低位
 WHEN"111"=>Q<=H1; 当111时输出时高位
 WHEN OTHERS=>Q<="1111";
 END CASE;
 END PROCESS;
END BBB;


2.译码显示:
library ieee;
use ieee.std_logic_1164.all; -字模输出模块
entity dispa is
port(d:in std_logic_vector(3 downto 0); --输入选通信号
q: out std_logic_vector(6 downto 0));
end dispa;
architecture dispa_arc of dispa is
begin
process(d)
begin
case d is
when "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 "1001" =>q<="1101111";
when others =>q<="0000000";
end case;
end process;
end dispa_arc;



EDA 电子钟课设报告(五)


作者:shou1723 提交日期:2007-1-14 15:27:00


3.数码管的扫描显示:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; -字模输出模块
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SEL IS
 PORT(CLK:IN STD_LOGIC;
 Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); --输入选通信号
END SEL;
ARCHITECTURE SELA OF SEL IS
BEGIN
 PROCESS(CLK)
 VARIABLE CNT:STD_LOGIC_VECTOR(2 DOWNTO 0);
 BEGIN
 IF CLK'EVENT AND CLK='1' THEN
 CNT:=CNT+1;
 END IF;
 Q<=CNT;
 END PROCESS;
END SELA;


G:整点报时功能:
 library ieee; --整点报时模块

use ieee.std_logic_1164.all;
entity sst is
port(h1,h0,m1,m0,s1,s0:in std_logic_vector(3 downto 0);
 q1,q0:in std_logic; -输入分,秒信号和时钟信号
 q: out std_logic); --输出两个不同频率的音频信号
end sst;
architecture sss_arc of sst is
signal q3,q4:std_logic;
begin
process(m1,m0,s1,s0)
begin
if h1="0000" and h0<"0111" then
q3<='0';
q4<='0';
elsif m1="0101"and m0="1001"and s1="0101" then
if s0="0000"or s0="0010"or s0="0100" or s0="0110" or s0="1000" then
q3<='1' ;
else --当计时到达59'50" 52" 54" 56" 58"鸣叫,鸣叫频率为500HZ,

q3<='0';
end if;
end if;
if h1="0000" and h0<"0111" then
q3<='0';
q4<='0';
elsif m1="0000" and m0="0000"and s1="0000" and s0="0000" then
q4<='1'; 当整点时为最后一声整点报时,频率为1k HZ,
else
q4<='0';
end if;

end process;
q<=(q3 and q0)or(q4 and q1);
end sss_arc;


G:闹钟功能模块:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY NAL IS
 PORT(M1,M0,H1,H0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
 en: in STD_LOGIC;
 Q:OUT STD_LOGIC);
END NAL;
ARCHITECTURE NAO OF NAL IS
BEGIN
 PROCESS(M1,M0,H1,H0,EN)
 BEGIN
IF EN='0' THEN
IF H0="1000"AND H1="0000" AND M1="0000" AND M0="0000" THEN
 Q<='1';
 ELSE
 Q<='0';
END IF;
ELSE Q<='0';
end if;
END PROCESS;
END NAO;




EDA 电子钟课设报告(六)


作者:shou1723 提交日期:2007-1-14 15:28:00


 七. 课设的心得与体会

 为期两周的课设已经接近尾声了,在这2周中,我学到了很多,对EDA的认识也进一步加深了。从一个刚入门的学习者,渐渐的爱上了这门技术,虽然说对于EDA的知识还有很多要学习和提高,但是在这2周中我还是感受到这门课程的魅力所在。

 在拿到数字钟这个课题时,我和我的合作伙伴对这个课题感到比较轻松,脑海中一下子出现了许多设计念头,于是我们就分头去寻找这方面的资料,通过图书馆的书籍资料,网络上的虚拟资料。在2天的找资料的过程中,我开始觉得所谓的数字钟并非我想象的那么简单。一开始我想到的数字钟只是一般的计数功能并未涉及到调时,调分,和闹铃功能。在如何显示方面也没有细细的考虑过。在看过一些资料后,越来越感觉到数字钟课题并非手到擒来。

 在与伙伴商量后,我们以一本参考书的资料为基础开始展开细致设计。我们一开始的输入是有三个模块 ,输入模块,计数模块,和显示模块。对于计数模块我们通过分频方法很快就得到了1HZ的频率用于计数,再通过计数进位标志实现秒,分,时的互相关联,再显示模块,我们通过7段数码管扫描显示也的到了实现。但是在输入模块,我们却遇到了障碍,如何通过硬件上的有限的开关和按钮来实现呢。我们首先想到了 ,做一个可以输入数字的键盘和开关(16*16),可是在想到键盘设计本身就是一个非常复杂的过程,想到2周能做好的话有一定的难度,于是我们果断的放弃了这一计划。那么如何实现输入,这个问题摆在我们面前,我感到了课设以来前所未有的压抑感。通过四个开关控制0—9的输入,但是如何控制是输入的是哪一位,如何进行调时,闹铃控制?都是难题。

 在冥想了2天后,我才发现自己陷如了思维的局限性中,为什么一定通过输入来完成调时呢,我们不可以通过他本身的计数功能来调时,这样虽然没有像我们所想的输入调时那样方便,但是它的简单在于充分利用了1HZ频率,通过干扰进位标志进行调时。这一个方法想到后,其他的闹铃功能和报时功能也都迎刃而解了。经过3天的编程和功能完善,我们基本实现了所有的功能,各个模块的编译和仿真也都实现了,第二个星期,实验室开放,我和伙伴就开始进行硬件上的实现了,在完成顶层设计后,我们成功的下载在硬件上了。通过调时后,基本实现了全部功能,并通过了老师的检查。到此本次课设基本上实现了所有的功能,但在有些功能的实现中,还有待提高。比如说对于调时功能,只能等待调时,这样对于调时的机动性不好,如果控制不好,过了应调时间的话,就必须在等一次循环后才能调时,这样就很浪费时间了 。还有就是闹钟功能并未完全实现它,我们只是编写了一个特定的程序来闹铃,闹铃时间已经事先安排好了,无法再通过手动调节了,这样就缺少了人性化。这在课设结束以后,要进一步的改进,争取获得一款高性能的人性化的数字钟。
 通过本次课设,我不仅学到了关于EDA的许多专业知识,同时也让我感觉到团队合作的重要性。其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。如果我们一味的屋子里苦思冥想那么再给2周的时间或许也不会有数字钟诞生,所以我觉得与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系也可以扩展自己的思维。通过思考、发问、自己解惑并动手、改进的过程,才能真正的完成课题。经过这次课程设计的过程,我相信在以后的课程设计中我们会吸取经验教训,做出更好的设计来。

文章评论15条评论)

登录后参与讨论

用户208060 2009-1-13 02:48

确切的是明天检查,现在都过晚上12点了.我还得苦苦奋斗啊!!!!!!!!!!谢谢啊,以后会经常叫同学一起来这学习的

用户208060 2009-1-13 02:46

麻烦楼主把整份报告发给我油箱.后天就要检查了,真的一点头绪也没了.先谢谢了,以后会经常到这来学习的 chengqing200608@123.com

用户208060 2009-1-11 18:01

楼主麻烦把顶层文件也发给我行么.我做课程设计正需要这个,麻烦了,救世主楼主

用户164473 2008-9-30 00:20

楼主能给我发这个论文吗?我毕设就是做这个的。《基于CPLD的数字钟的设计》。就要求时,分,秒。别的不要求。我现在很急,10月20号就要交稿了,一点头绪都没有。谢谢你!!!我的邮箱 bobo20052008@yahoo.cn

用户382146 2008-6-24 20:29

 这份报告很完美? 

用户1181288 2008-3-16 17:49

能发给我一下吗,我急用啊,真是要谢谢你啊 我的邮箱是:lijinkai168@sohu.com

用户390608 2008-1-16 21:35

悲哀!

另:在楼主的blog里面看到一篇从电子工程专辑转过来的关于验证方法的文章,看来楼主对这方面也有兴趣,可否加为好友,我很想向楼主讨教一些。我的MSN:guangleigama@hotamail.com

用户386061 2007-6-12 15:43

楼主你好!!!

请帮我传一份带图的设计谢谢拉!!!

        谢谢拉我的油箱是xiaozhao_82459171@163.com尽快谢谢!!!!!

用户118292 2007-6-8 21:18

好心的LZ,,,

 

能不能把防真图和原理内容发给我啊?

 

 

谢谢!

 

mail to:  linyiwu_1225@yahoo.com.cn

用户85459 2007-6-5 16:46

楼主

我得毕业设计。。。。

5555

可以随便发一份EDA有关得课程设计给我吗

万分感激。。。。

我邮箱:jimsion007@163.com

跪求~~~~~~~~~~~~~```

相关推荐阅读
jerryzhang8023_976580426 2009-09-20 12:26
云计算推动,节能以太网技术将诞生
“移动终端正从目前50Kbps的GPRS链路连接到互联网,升级到数Mbps的3G/3.5G速度连接到互联网;任何媒体都将可以实时访问任何内容。这些新兴应用将带来海量的传输和海量的数据处理,也使得无线业...
jerryzhang8023_976580426 2009-09-20 12:25
“物联网”可能进入3G应用:技术瓶颈待破
“物联网”概念16日继续受到市场热捧,申万电子元器件指数上涨3.09%,位居行业涨幅榜第一。分析人士称,物联网在我国其实早有应用,在未来可能会成为下一个万亿级的通信业务,但是物联网的全面普及将是一个十...
jerryzhang8023_976580426 2009-09-20 12:21
NEC电子全球首推支持USB3.0的主控系统芯片
NEC电子日前完成了支持USB3.0的系统芯片的开发,全球率先推出USB3.0系统芯片”uPD720200”,并于今年6月起开始提供样品。USB3.0是在电脑、数字家电、键盘、鼠标等电子产品领域广泛使...
jerryzhang8023_976580426 2009-06-18 18:32
基于扫描的DFT对芯片测试的影响
基于扫描的DFT对芯片测试的影响来源:电子设计应用/北京航空航天大学 刘玲玲 周文 夏宇闻\巨数微电子公司 徐微 邵寅亮2006-04-24         引言       随着ASIC电路结构和功...
jerryzhang8023_976580426 2009-03-29 20:52
叫板ARM、MIPS,可配置处理器走向何方?
与市场上大名鼎鼎的ARM、MIPS相比,Tensilica(泰思立达)公司还是个小角色。其位于北京南湖东园博泰国际40平米左右的办公室里,只有寥寥数人。初次见到其中国区代表李冉,显得形单影只。让人不禁...
jerryzhang8023_976580426 2009-03-29 20:50
可配置处理器将逐渐取代硬连线处理器
今天的便携式电子正经历着在性能增强和设备融合方面日益加剧的螺旋式变化。从前只能拍照的数码相机,现在不仅分辨率提高了四倍,而且还能摄像以及播放MP3文件。如今的手机拥有蓝牙技术及彩屏,也可以拍照并播放M...
我要评论
15
6
关闭 站长推荐上一条 /2 下一条