《多功能数字钟》EDA实验报告 下载本文

内容发布更新时间 : 2024/5/18 11:06:20星期一 下面是文章的全部内容请认真阅读。

5.实验总结及心得

通过这次实验是我学习到了许多知识,首先是对EDA课程设计的基本要求以及对实验过程的具体实现方法,其次是对VHDL编程语言的语法掌握和认识有了更加深刻的理解和认识,再次是对QUARTUSII软件的基本操作和工作有了一定的了解和认识,还有就是对实验的过程收获了许多,受益了许多。

经过两周EDA课程设计,使我受益匪浅。这不仅增强了我对EDA设计的兴趣,更巩固了基本的电路设计流程、方法以及技巧。具备了这些基本知识,为今后的自主学习奠定了良好的基础。在编写时可以相互借鉴,这样可以节省一定的时间,但在一个问题上纠结了很久,现还未明白,为什么一个变量在进程中只能被一个边沿信号触发进行修改,无奈之下选择了另一种方法,通过一个控制端来进行选频,以实现快速调时,在闹钟的处理上使用了数据选择,设置闹铃时数码管显示闹钟时间。

在设计中还是需要注意一些常见的问题,比如实体名、项目名等,还有在编写VHDL文件时,一些文件名也是需要注意的;在编写程序的过程中,信号与变量的使用是一个特需要注意的,进程中一个信号不应有多个复制源,信号的复值是在进程结束之时,而变量的复值是立即的,在书写时容易出错的地方是,信号的赋值与变量的赋值符号,信号作为全局的联络线,信号往往不允许在多个进程中被赋值,因为进程之间是并行的。

通过实验也彻底的认识到了自己的不足,以及许多自己有待加强和努力的地方,比如说相关语法的具体实验过程,不同设计的优点分析等。还有就是对自己以后应该学习掌握的知识还有许多,自己懂得的还知识皮毛而已,如果真的要用于实际工程及设计中要走的路还是很长的。

最后在这里要感谢我的指导老师,感谢您的耐心指导和教诲,是您的耐心指导才使得我收获了这么多,学会了很多不懂得知识,掌握了这么多的专业知识,以及这么多有用的专业技巧和处理问题的方法和能力,正式由于您的努力才能帮助我的课程设计顺利的进行并能够最终完成自己的课程设计。在这里要表达我的感激之情以及感恩之意,是您让我又一次的成长了许多,此致敬礼!

6.源程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

-------------------------------------------------------------------- ENTITY LG IS

PORT( Clk : IN STD_LOGIC; --时钟输入 S12 : IN STD_LOGIC; --复位输入 S1,S2 : IN STD_LOGIC; --时间调节输入 spk : OUT STD_LOGIC;

led : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --整点输报时输出 Display : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --七段码管显示输出 SEG_SEL : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0) --七段码管扫描驱动 ); END LG;

-------------------------------------------------------------------- ARCHITECTURE ART OF LG IS

SIGNAL Disp_Temp : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Disp_Decode : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL SEC1,MIN1, : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SEC10,MIN10 : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL HOUR10 HOUR1 : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Music_Count : STD_LOGIC_VECTOR(2 DOWNTO 0);

SIGNAL Clk_Count1 : STD_LOGIC_VECTOR(13 DOWNTO 0); --产生1Hz时钟的分频计数器 SIGNAL Clk1Hz : STD_LOGIC;

SIGNAL led_count : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL led_display : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL T : INTEGER RANGE 0 TO 15;

BEGIN PROCESS(Clk) BEGIN

IF(Clk'EVENT AND Clk='1') THEN IF(Clk_Count1<10000) THEN Clk_Count1<=Clk_Count1+1; ELSE

Clk_Count1<=\ END IF; END IF; END PROCESS;

---------------------------------------------------------------------------------- Clk1Hz<=Clk_Count1(13); PROCESS(Clk1Hz,S12) BEGIN

IF(S12='0') THEN --系统复位 SEC1<=\ SEC10<=\ MIN1<=\ MIN10<=\ HOUR1<=\ HOUR10<=\

ELSIF(Clk1Hz'EVENT AND Clk1Hz='1') THEN --正常运行 IF(S1='0') THEN --调节小时 IF(HOUR1=\ HOUR1<=\ HOUR10<=HOUR10+1;

ELSIF(HOUR10=\ HOUR1<=\ HOUR10<=\

ELSE

HOUR1<=HOUR1+1; END IF;

ELSIF(S2='0') THEN --调节分钟 IF(MIN1=\ MIN1<=\ IF(MIN10=\ MIN10<=\ ELSE

MIN10<=MIN10+1; END IF; ELSE

MIN1<=MIN1+1; END IF;

ELSIF(SEC1=\ SEC1<=\

IF(SEC10=\ SEC10<=\ IF(MIN1=\ MIN1<=\ IF(MIN10=\ MIN10<=\

IF(HOUR1=\ HOUR1<=\ HOUR10<=HOUR10+1;

ELSIF(HOUR10=\ HOUR1<=\ HOUR10<=\ ELSE

HOUR1<=HOUR1+1;