数字时钟的设计。
一实验目的。
1)掌握vhdl语言的基本运用。
2)掌握max+plusii的简单操作并会使用eda实验箱。
3)掌握一个基本eda实验的操作。
二功能设计。
1)有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制。
2)设置复位、清零等功能。
3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间。
4)设置调试模式和计时两个模式,分别实现计时和调时功能,通过设置任意时间实现闹铃功能。
三系统设计方案概述及工作原理。
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。
1)首先**程序进行复位清零操作,电子钟从00:00:00计时开始。md2[1]可以调整时钟的小时部分, md2[2]可以调整分钟,步进为1。
2)由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1hz,这里取100hz。clk端连接外部10hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。
3)用6位数码管分别显示“时”、“分”、“秒”,通过dout( 6 downto 0 )上的信号来点亮指定的led七段显示数码管。
4)通过对md1按键高低电平的控制可以进入时钟的另一个调时模式,调试模式和计时模式是分开互不影响的。然后再通过对md2[1]和md2[2]对时钟进行时间设定。等到计时到达设置时间时,实现打铃功能。
顶层设计分析:
对于电子钟的设计,这里将采用自顶向下的设计方法进行设计,因此首先需要进行电子钟的顶层设计。本节将首先介绍电子钟的系统结构和模块划分,然后设计出顶层vhdl设计程序。
根据电子钟的设计要求、工作原理和设计方案, 整个模块的接口如下:
1 时钟分频部分。
1) 复位开关信号reset:输入信号。
2) 外部时钟信号clk:输入信号。
3) 内部计时时钟信号clk1:输入信号。
2 计时部分。
1) 复位关信号reset:输入信号。
3) 小时十位信号hou2:输出信号。
4) 小时个位信号hou1:输出信号。
5) 分十位信号min2:输出信号。
6) 分个位信号min1:输出信号。
7) 秒十位信号sec2:输出信号。
8) 秒个位信号sec1:输出信号。
3 按键部分。
1) 复位开关信号reset:输入信号。
2) 时调整按键md2[1]:输入信号。
3) 分调整按键md2[2]:输入信号。
4) 小时十位信号hou2:输出信号。
5) 小时个位信号hou1:输出信号。
6) 分十位信号min2:输出信号。
7) 分个位信号min1:输出信号。
4 显示部分。
1) 外部时钟信号clk:输入信号。
2) 小时十位信号hou2:输入信号。
3) 小时个位信号hou1:输入信号。
4) 分十位信号min2:输入信号。
5) 分个位信号min1:输入信号。
6) 秒十位信号sec2:输入信号。
7) 秒个位信号sec1:输入信号。
8) led七段显示数码管的选通信号dout:输出信号。
5 调时部分。
1) 调时开关md1
2) 时调整按键md2[1]:输入信号。
3) 分调整按键md2[2]:输入信号。
四各部分功能分析。
1)计数部分由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计数。其vhdl源程序相差不大由于篇幅有限,这里我们以分计数的实现为例。程序如下:
分钟十位。m110:process(clk,min2,sec1,sec2,md1,md2)
beginif clk'event and clk='1' then
if (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then
min1<="0000";
elsif min1="0101"and min2="1001"and (md1='0' and md2="00")then
min1<="0000";
elsif (min2="1001"and (sec1="0101" and sec2="1001"))or (min2="1001"and md1='0' and md2="00")then
min1<=min1+1;
end if;
end if;--end if;
end process m110;
分钟个位。m220:process(clk,sec1,sec2,md1,md2)
beginif clk'event and clk='1' then
if min2="1001"and (sec1="0101" and sec2="1001")then
min2<="0000";
elsif min2="1001"and (md1='0' and md2="00")then
min2<="0000";
else if (sec1="0101" and sec2="1001") or(md1='0' and md2="00")then
min2<=min2+1;
end if;
end if;end if;
end process m220;
2)多路选择控制。
多路选择控制模块中扫描控制电路产生扫描信号一方面控制6个七段显示器每次只点亮一个七段显示器;另一方面同时控制6×1多路选择器输出相应的显示数字。**见附录。
3)显示译码模块的设计。
该模块描述了一个共阴极数码管显示驱动电路,其输入为选择控制模块的输出,输出信号分别接在数码管的的7个段。例如当输入为‘0’时,输出就为“”,数码管显示0。**见附录。
4)各模块的编译、**。
各模块设计完成后,就要对其进行功能**。选择实验箱上对应的芯片。打开max+plusii,选择菜单file/new命令,进入出现对话框选择中选择“text editor file”选项,即进入文本编辑方式新建一个工程。
在编译之前要此工程设置为当前工程。若没有错误则编译通过。新建**文件,输入保存。
这里以秒模块,在编译完之后生成一个模块,把各符号文件按照逻辑功能连接起来。
5)程序**至芯片。
1)点击主菜单assign/pin/location/chip进行芯片脚位设置。将实体定义的端口名字和**芯片的管脚进行具体对应。最后再进行一次编译,这时系统将产生可以向epfiokio**的文件。
将带芯片的实验板通过**电缆与计算机并口相连,然后给实验板通电。打开**窗口选择**方式、**器件型号最后点击configure按钮将程序写入芯片中。连接外围器件即可工作。
五时钟创新点。
这次eda通过md1控制计时和调时两个模式之间的转换。所加**如下:
sethour2:process(clk,md1,md2,seth1小时部分**。
beginif clk'event and clk='1' then
if (seth1="0010"and seth2="0011")or seth2="1001"then
seth2<="0000";
elsif md1='1' and md2="00" then
seth2<=seth2+1;
end if;
end if;
end process sethour2;
setmin2:process(clk,md1,md2分钟部分**。
beginif clk'event and clk='1'then
if setm2="1001"then
setm2<="0000";
elsif md1='1' and md2="01"then
setm2<=setm2+1;
end if;
end if;
end process setmin2;
if md1='0' then计时时间显示和设置模式。
h1<=hou1;h2<=hou2;
m1<=min1;m2<=min2;
s1<=sec1;s2<=sec2;
else闹铃时间现实和设置模式。
h1<=seth1;h2<=seth2;
m1<=setm1;m2<=setm2;
s1<="1111";s2<="1111";
end if;
end process disp;
通过md1的高低电平控制实现计时模式和调时模式的转换。高电平为调试模式,低电平为正常计时模式。
附录:数字时钟的vhdl**。
library ieee;
use use
entity szz is
port(clk:in std_logic;
clk1:in std_logic;
md1:in std_logic;
md2:in std_logic_vector(1 downto 0);
speak:out std_logic;
dout:out std_logic_vector(6 downto 0);
selout:out std_logic_vector(2 downto 0));
end szz;
architecture one of szz is
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);
EDA数字时钟课程设计
一 课程设计的背景与目的。全面熟悉 掌握vhdl语言基本知识,掌握利用vhdl语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。1 ed...
EDA课程设计 数字时钟
hefei university eda课程综述。题目 eda课程综述 专业 09通信 2 班 姓名唐吉祥。学号 0905072035 指导老师查长军。前言。随着基于pld的eda技术的发展和应用领域的扩大和深入,eda技术在电子信息 通信 自动控制及计算机应用领域的重要性日益提高。作为现在的大学生...
EDA课程设计数字秒表
课程设计。题目数字秒表设计 院系信息工程学院 班级 姓名 指导教师。系统设计要求。课程设计。第1章 系统设计要求3 第2章 实验目的3 第3章 实验原理3 第4章 系统设计方案3 第5章 主要vhdl源程序4 1 十进制计数器的vhdl源程序4 2 六进制计数器的vhdl源程序5 3 蜂鸣器的vhd...