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