数字时钟设计.docx
《数字时钟设计.docx》由会员分享,可在线阅读,更多相关《数字时钟设计.docx(24页珍藏版)》请在冰豆网上搜索。
数字时钟设计
东北石油大学
课程设计
课程硬件课程设计
题目数字钟设计
院系
专业班级
学生姓名
学生学号
指导教师
2009年7月10日
东北石油大学课程设计任务书
课程硬件课程设计
题目数字钟设计
专业
主要内容、基本要求等
一、主要内容:
利用EL教学实验箱、微机和QuartusⅡ软件系统,使用VHDL语言输入方法设计数字钟。
可以利用层次设计方法和VHDL语言,完成硬件设计设计和仿真。
最后在EL教学实验箱中实现。
二、基本要求:
1.具有时,分,秒,计数显示功能,以24小时循环计时。
2.具有清零功能。
三、扩展要求
1.调节小时、分钟功能。
2.整点报时功能,整点报时的同时LED灯花样显示。
四、参考文献
[1]李国丽,朱维勇.电子技术实验指导书.合肥:
中国科技大学出版社,2000
[2]康华光,电子技术基础模拟部分.出版社:
高等教育出版社.
[3]李朝清,单片机原理及技术接口出版社,2011
[4]张国勋.缩短ICL7135A/D采样程序时间的一种方法.电子技术应用.1993
[5]孙富明,李笑盈.基于多种EDA工具的FPGA设计,电子技术应用,2002年12月,第1期
完成期限2周
指导教师
专业负责人
东北石油大学课程设计成绩评价表
课程名称
硬件课程设计
题目名称
数字钟设计
学生姓名
序号
评价项目
指标(优秀)
满分
评分
1
选题难度
选题难度较高,或者对原题目进行了相当程度的改进。
10
2
工作量、工作态度和出勤率
工作量饱满,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。
10
3
课程设计质量
按期圆满的完成了规定的任务,方案设计合理,思考问题全面,系统功能完善。
40
4
报告质量
问题论述思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。
30
5
回答问题
在进行课程设计程序系统检查时,能正确回答指导教师所提出的问题。
10
6
创新(加分项)
工作中有创新意识,对前人工作有改进或有应用价值。
在进行系统检查时能对创新性进行说明,并在报告中有相应的论述。
+5
总分
评语:
指导教师:
年月日
摘要
本文介绍了利用EDA-V硬件系统和微机上的Quartus7.2-II等软件系统。
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
EDA技术在电子系统设计领域越来越普及,本设计主要利用VHDL语言在EDA平台上设计一个电子数字钟,它的计时周期为24小时,显示满刻度为23时59分59秒,另外还具有校时功能和闹钟功能。
总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、译码显示程序模块和拼接程序模块。
并且使用MAX+PLUSII软件进行电路波形仿真,下载到EDA实验箱进行验证。
关键词:
EDA(电子设计自动化);VHDL(硬件描述语言),数字钟。
目 录
第1章概述1
1.1EDA的概念1
1.2EDA的工作平台2
第2章数字钟的系统分析3
2.1设计目的3
2.2设计要求3
2.3实验原理3
2.4系统硬件4
第3章数字钟的底层电路设计5
3.1设计规划5
3.2设计说明5
3.3底层电路程序6
第4章顶层文件设计13
4.1系统设计13
4.2顶层文件程序13
第5章数字钟的调试与运行17
5.1数字钟的调试17
5.2数字钟的适配与测试20
总结…………………………………………………………………………………….22
参考文献……………………………………………………………………………….23
第1章概述
1.1EDA的概念
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的[1]。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作[2]。
现在对EDA的概念或范畴用得很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用[3]。
目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用[4]。
例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术[5]。
本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。
EDA设计可分为系统级、电路级和物理实现级。
本次毕业设计课题实现的核心技术即为EDA相关技术[6]。
1.1.1EDA技术发展趋势
人类社会已进入到高度发达的信息化社会。
信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。
电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。
实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,ElectronicsDesignAutomation)技术,EDA技术的发展和推广应用又极大地推动了电子信息产业的发展。
为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。
目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能[7]。
EDA技术在硬件实现方面融合了大规模集成电路制造技术,IC版图设计技术、ASIC测试与封装技术、FPGA/CPLD编程下载技术、自动检测技术等;在计算机辅助工程方面融合了计算机辅助技术(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)、计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子线路设计理论、数字信号处理技术、数字系统建模和优化技术及长线技术理论等等[8]。
1.2EDA的工作平台
1.2.1EDA硬件工作平台
1.计算机。
2.EDA实验开发系统:
EDA-V。
1.2.2EDA的软件工作平台
PLD(ProgrammableLogicDevice)是一种由用户根据需要而自行构造逻辑功能的数字集成电路。
目前主要有两大类型:
CPLD(ComplexPLD)和FPGA(FieldProgrammableGateArray)[9]。
它们的基本设计方法是借助于EDA软件,用原理图、状态机、布尔表达式、硬件描述语言等方法,生成相应的目标文件,最后用编程器或下载电缆,由目标器件实现。
生产PLD的厂家很多,但最有代表性的PLD厂家为Altera、Xilinx和Lattice公司[10]。
第2章数字钟的系统分析
2.1设计目的
1.掌握多位计数器相连的设计方法。
2.掌握十进制,六进制,二十四进制计数器的设计方法。
3.继续巩固多位共阴极扫描显示数码管的驱动,及编码。
4.掌握扬声器的驱动。
5.LED灯的花样显示。
6.掌握CPLD技术的层次化设计方法。
2.2设计要求
1.具有时,分,秒,计数显示功能,以24小时循环计时。
2.具有清零,调节小时、分钟功能。
3.具有整点报时功能,整点报时的同时LED灯花样显示。
2.3实验原理
在同一EPLD芯片EPF10K10上集成了如下电路模块:
1.时钟计数:
秒——60进制BCD码计数;
分——60进制BCDD码计数;
时——24进制BCDD码计数;
同时整个计数器有清零,调分,调时功能。
在接近整数时间能提供报时信号。
2.具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。
3.扬生器在整点时有报时驱动信号产生。
4.LED灯在整点时有花样显示信号产生。
2.4系统硬件
1.主芯片EPF10K10LC84-4。
2.8个LED灯。
3.扬声器。
4.8位八段扫描共阴级数码显示管。
5.三个按键开关(清零,调小时,调分钟)。
第3章数字钟的底层电路设计
3.1设计规划
该数字钟可以实现3个功能:
计时功能、整点报时功能和重置时间功能,因此有3个子模块:
计时、报时(alarm1)、重置时间(setmin1、sethour1)。
其中计时模块有3部分构成:
秒计时器(second1)、分计时器(minute1)、时计时器(hour1)。
1.秒计数模块:
秒计数,在频率为1HZ的时钟下以60次为循环计数,并产生进位信号影响分计数。
2.分计数模块:
分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数。
3.时计数模块:
时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数。
4.时间显示模块:
通过选中不同的数码管,同时进行一定频率的扫描显示时,分,秒。
5.时间设置模块:
设置调试使能端,可以调时,分。
基本功能是在使能端为高电平时,可以使时和分循环计数;
6.整点报时模块:
在秒计数到50秒时,同时分计数到59分开始,丰鸣器产生每个2秒的鸣叫(500HZ),到整点是产生750HZ的鸣叫。
7.闹钟模块:
在设定闹钟闹铃时间后,当闹钟使能端有效时,可在闹铃时间闹铃,并有彩灯显示[10]。
3.2设计说明
首先分析数字时钟,得出进位法则大体相同,故所得时分秒进位方式语法基本相同,因此可以将时分秒定义成六位输出端口,即分别将时分秒定义为3个component,分别给予设计。
3.3底层电路程序
3.3.1秒计时器(VHDL语言编译)
其代码如下:
(VHDL语言):
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYsecondIS
PORT(
clk,reset,setmin:
INSTD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentitysecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
BEGIN
daout<=count;
process(clk,reset,setmin)
begin
--enmin<=k;
if(reset='0')then
count<="0000000";
elsif(setmin='0')then
enmin<=clk;
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="1011001")then
enmin<='1';
count<="0000000";
ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enmin<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
秒计时器实际上是一个60进制的计数器,它从时钟脉冲接受脉冲信号,每当一个脉冲信号来时,秒就自动加1,所以,输入的时钟信号应该是的频率应该是1hz,当秒计满60时,发出一个脉冲信号给分组件,再将本身清零。
这样,每计满60s,分钟就加1,正好按着正常的时间规律计时。
3.3.2分计时器(VHDL语言编译)
其代码(VHDL语言)如下:
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYminuteIS
PORT(
clk,clk1,reset,sethour:
INSTD_LOGIC;
enhour:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentityminute;
ARCHITECTUREfunOFminuteIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
BEGIN
daout<=count;
process(clk,reset,sethour)
begin
if(reset='0')then
count<="0000000";
elsif(sethour='0')then
enhour<=clk1;
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="1011001")then
enhour<='1';
count<="0000000";
ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enhour<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
分计时器也是一个60进制的计数器,它从秒计时器的脉冲输出端接受脉冲信号。
每当一个脉冲信号来时,分就自动加1,当分计满60时,发出一个脉冲信号给时组件,再将本身清零。
这样,每计满60MIN,小时就加1,正好按着正常的时间规律计时。
该模块还能对分进行数字调整,并可以将其全部清零。
3.3.3时计时器(VHDL语言)
代码如下:
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYhourIS
PORT(
clk,reset:
INSTD_LOGIC;
daout:
outstd_logic_vector(5downto0));
ENDentityhour;
ARCHITECTUREfunOFhourIS
SIGNALcount:
STD_LOGIC_VECTOR(5downto0);
BEGIN
daout<=count;
process(clk,reset)
begin
if(reset='0')then
count<="000000";
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#24#)then
count<=count+7;
else
count<="000000";
endif;
elsif(count<16#24#)then
count<=count+1;
else
count<="000000";
endif;
endif;
endprocess;
ENDfun;
时计时器是一个24进制的计数器,它从分组件的脉冲信号输出端接受脉冲信号,每当一个脉冲信号来时,时就自动加1,并且输出个信号给时组件,直到计满24,再将本身清零。
该组件还能对时进行数字调整,并可以将其全部清零。
3.3.4时间显示Deled(VHDL语言)
代码如下:
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYdeledIS
PORT(num:
INstd_logic_vector(3downto0);
led:
OUTstd_logic_vector(6downto0));
ENDdeled;
ARCHITECTUREfunOFdeledIS
BEGIN
led<="1111110"whennum="0000"else
"0110000"whennum="0001"else
"1101101"whennum="0010"else
"1111001"whennum="0011"else
"0110011"whennum="0100"else
"1011011"whennum="0101"else
"1011111"whennum="0110"else
"1110000"whennum="0111"else
"1111111"whennum="1000"else
"1111011"whennum="1001"else
"1110111"whennum="1010"else
"0011111"whennum="1011"else
"1001110"whennum="1100"else
"0111101"whennum="1101"else
"1001111"whennum="1110"else
"1000111"whennum="1111";
ENDfun;
Deled模块是一个简单的电路,它的功能将时、分、秒三个组件中所计的数编码后,能对应在七段数码管山显示成数字形式。
3.3.5报时模块alert(VHDL语言)
代码如下:
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYalertIS
PORT(
clk:
INSTD_LOGIC;
dain:
INSTD_LOGIC_VECTOR(6DOWNTO0);
speak:
OUTSTD_LOGIC;
lamp:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDalert;
ARCHITECTUREfunOFalertIS
signalcount:
std_logic_vector(1downto0);
signalcount1:
std_logic_vector(1downto0);
BEGIN
speaker:
process(clk)
begin
speak<=count1
(1);
if(clk'eventandclk='1')then
if(dain="000000")then
if(count1>="10")then
count1<="00";
else
count1<=count1+1;
endif;
endif;
endif;
endprocessspeaker;
lamper:
process(clk)
begin
if(rising_edge(clk))then
if(count<="10")then
if(count="00")then
lamp<="001";
elsif(count="01")then
lamp<="010";
elsif(count="10")then
lamp<="100";
endif;
count<=count+1;
else
count<="00";
endif;
endif;
endprocesslamper;
ENDfun;
报时模块也是个简单的程序,它的功能是:
当每满一个小时时,有该组件输出一个脉冲信号给试验箱上的喇叭,喇叭会相应其信号,能持续发出一段蜂鸣声,从而达到报时的目的。
3.3.6译码模块seltime(VHDL语言)
代码如下:
LIBRARYieee;
useieee.std_logic_1164.all
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
ENTITYseltimeIS
PORT(
clk1,reset:
INSTD_LOGIC;
sec,min:
INSTD_LOGIC_VECTOR(6downto0);
hour:
instd_logic_vector(5downto0);
daout:
OUTSTD_LOGIC_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
ENDseltime;
ARCHITE