EDA24小时时钟电路剖析.docx
- 文档编号:7179297
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:18
- 大小:250.58KB
EDA24小时时钟电路剖析.docx
《EDA24小时时钟电路剖析.docx》由会员分享,可在线阅读,更多相关《EDA24小时时钟电路剖析.docx(18页珍藏版)》请在冰豆网上搜索。
EDA24小时时钟电路剖析
河南科技大学
课程设计说明书
课程名称EDA技术
题目24小时时钟电路
学院车辆与动力工程学院
班级农业电气化与自动化
学生姓名陈启彬
指导教师王俊
日期2013年7月19日
课程设计题目
摘要
系统使用EDA技术设计了数字钟,采用硬件描述语言VHDL按模块化方式进行设计,然后进行编程,时序仿真等。
利用VHDL语言完成了数字钟的设计。
该数字钟能实现时、分、秒计数的显示功能,且以12小时循环计时。
整个系统结构简单,使用方便,功能齐全,精度高。
关键字:
数字钟;EDA;VHDL;
目录
第一章绪论1
§1.2引言1
§1.2课题的背景、目的1
§1.3设计任务1
第二章总体设计3
§2.1功能设计3
§2.1.1时、分、秒计时器及整点报时功能3
§2.1.2实现的功能:
3
§2.2总体方框图4
§2.3设计方案4
§2.3.1晶体振荡器4
§2.3.2顶层实体描述5
§2.4方案实现7
§2.4.1各模块仿真与描述7
§2.4.2顶层电路图8
第三章硬件测试与说明9
§3.1引脚锁定情况9
§3.2程序下载9
§3.3测试过程与结果分析11
第四章设计结论12
参考文献13
附录各个模块程序14
§4.1秒计时器14
§4.2分计时器16
§4.3时计数器18
§4.4分频器电路19
§4.5七段数码管显示电路20
第一章绪论
§1.2引言
随着社会的发展,科学技术也在不断的进步。
特别是计算机产业,可以说是日新月异,数字钟作为计算机的一个组成也随之逐渐进入人们的生活,从先前的采用半导体技术实现的数字钟到现在广泛应用的采用高集成度芯片实现的数字钟。
数字钟正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对数字钟中显示电路进行编程实现。
近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:
(1)电子器件及其技术的发展将更多地趋向于为EDA服务;
(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言VHDL的运用;(4)数字系统的芯片化实现手段已成主流。
因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。
§1.2课题的背景、目的
本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,加深对计算机体系结构的理解。
通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。
通过对实用数字钟的设计,巩固和综合运用计算机原理的基本理论和方法,理论联系实际,提高IC设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
通过课程设计深入理解计算机的组成原理,达到课程设计的目标。
§1.3设计任务
用硬件描述语言设计一个具有时、分、秒计数显示功能,以24小时循环计时的时钟电路,要求带有清零,以及秒、分钟和小时校准的功能,且被校准的时间闪烁显示(隔几ms让其显示一次),提示正在进行时钟的校准。
下载并测试电路功能,校准信号由按键给出,显示由LED七段数码管显示,并分析芯片资源的占用情况。
第二章总体设计
§2.1功能设计
§2.1.1时、分、秒计时器及整点报时功能
时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。
当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。
即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。
§2.1.2实现的功能:
①时钟计数:
首先下载程序进行复位清零操作,电子钟从00:
00:
00计时开始。
sethour可以调整时钟的小时部分,setmin可以调整分钟,步进为1。
由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。
CLK端连接外部10Hz的时钟输入信号clk。
对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。
用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6DOWNTO0)上的信号来点亮指定的LED七段显示数码管。
②时间设置:
手动调节秒钟、分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7,键6,键5,进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。
③清零功能:
reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位
§2.2总体方框图
图2.1总体方框图
§2.3设计方案
§2.3.1晶体振荡器
晶体振荡电路是构成数字式时钟的核心,它保证了时钟走时准确及稳定。
晶体振荡器它的作用是产生时间标准信号。
数字钟的精度主要取决于时间标准信号的频率及其稳定度。
因此,一般采用石英晶体振荡器经过分频得到这一信号。
晶体振荡器电路给数字钟提供一个频率稳定准确的10HZ的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
如图1.1所示晶体振荡电路框图。
图2.2晶体振荡电路
§2.3.2顶层实体描述
整个系统划分为second模块;min模块;hour模块。
顶层的输入为:
Clk为时钟信号,reset为复位信号,setsecond为秒钟置位信号,setmin为分钟置位信号,sethour为时钟置位信号。
顶层的输出为:
Second为7位秒钟输出信号,随时钟信号从00-59跳变;
Min为7位分钟信号,驱动数码管随秒计数模块来的信号从00-59跳变;
Hour为6位时钟信号,驱动数码管随分计数模块来的信号从00-24跳变。
①、second模块;
秒钟时器为一个60进制计数器。
我们接的时钟脉冲频率为1Hz,当秒计时器接受到一个秒脉冲时,也就是秒计数器加一,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;
秒钟计数器的输入为Clk为时钟信号,reset为复位信号,setsecond为秒置位信号,setmin为分钟置位信号。
输出为enmin和daout。
Enmin为驱动分计数器的脉冲信号和daout为秒钟信号的输出端口。
②、min模块;
分钟时器为一个60进制计数器。
我们接的时钟脉冲频率为1Hz,当秒计时器接受到一个秒脉冲时,也就是秒计数器加一,秒计数器开始从1计数到59,每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;
分钟计数器的输入为Clk为时钟信号,Clk1为秒计数器产生的脉冲信号,reset为复位信号,sethour为时钟置位信号。
输出为enhour和daout。
Enhour为驱动时计数器的脉冲信号和daout为分钟信号的输出端口。
③、hour模块;
时钟时器为一个24进制计数器。
我们接的时钟脉冲频率为1Hz,每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00;
时钟计数器的输入为Clk为时钟信号,reset为复位信号。
输出为daout。
daout为时钟信号的输出端口。
驱动数码管显示相应的小时数。
§2.4方案实现
§2.4.1各模块仿真与描述
①秒计数器(文件名:
second.vhd)
1)秒计数器的仿真波形图
2)波形分析
由仿真波形图知秒计数模块功能是利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即enmin=1;reset作为复位信号低电平有效,即高电平时正常循环计数,低电平清零。
②、分钟计数器(文件名:
minute.vhd)
1)分钟计数器的仿真波形图
2)波形分析
由波形图可知该模块实现了分钟计数的功能,调时信号sethour高电平有效。
计数循环从00到59.
③、小时计数器(文件名:
hour.vhd)
1)小时计数器的仿真波形图
2)波形分析
小时计数模块利用24进制计数器,通过分钟的进位信号的输入可实现从00到23的循环计数。
§2.4.2顶层电路图
图2.3顶层电路图
第三章硬件测试与说明
§3.1引脚锁定情况
图3.1引脚锁定图
§3.2程序下载
打开编辑窗和配置文件。
选择,弹出一个编辑窗。
在Mode栏中选择JTAG,并在选项下的小方框打勾。
注意核对下载文件路径与文件名。
如果文件没有出现或者出错,单击左Addfile侧按钮,手动选择配置文件clock.sof。
3.最后单击下载标符Start,即进入对目标器件FPGA的配置下载操作。
当Progress显示100%,以及在底部的处理栏中出现ConfigurationSucceeded时,表示编程成功,如图所示。
注意,如果必要时,可再次单击Start,直至编程成功。
如图3.2所示
图3.2操作图
3、下载完成后,通过硬件测试进一步确定设计是否达到所有的技术指标,如未达到,可逐步检查,哪部分出现问题。
如果是代码出现问题,须修改代码;若是时序波形图有问题,须重新设置。
4下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过6键设置小时数,7键设置分钟数。
当秒数满60则进一位,分钟数满60进一位,当显示为23:
59:
59时,秒数在加一则显示00:
00:
00,之后从新计时。
图3.3硬件测试图
§3.3测试过程与结果分析
实验硬件cycloneEP1C3T144C8
测试模式NO.5
测试方式clock选用clock0,短路帽选1HZ;
键8控制reset,键7控制setmin,键6控制sethour,键5控制setsecond
数码管6、5用作小时显示,高位是小时的十位,低位是小时的个位;
数码管4、3用作分钟显示,高位是分钟的十位,低位是分钟的个位;
数码管2、1用作秒钟显示,高位是秒钟的十位,低位是秒钟的个位;
测试过程(灯亮为高电平,灯灭为低电平)
reset低电平清零复位,按键8使灯亮则时钟开始从00-00-00计时,秒钟
计时到59时向分钟进1,分钟计时到59时向小时进1;
键7用做调小时每来一个脉冲调一次调节范围00-——23;
键6用做调分钟每来一个脉冲调一次调节范围00—59
键5用做调分钟每来一个脉冲调一次调节范围00-59
第四章设计结论
在实验中,我们可以通过自己的实际操作,找出问题,改正错误,提出改进之法,大胆创新,使自己的能力在实践中成长起来。
经过这几周的实验,我基本了解了实验设计过程。
虽然有些实验很简单,但是他们体现了EDA设计的大概流程。
通过这么多次的试验我将一些在课堂上了解了的知识的运用到了实验中,经过实验课之后,我对于VHDL语言的理解更加深刻了,本来有些不理解的理论知识,都能通过实验得到一定解答。
在实验的过程中,有时遇到难题的时候,我们上网或去图书馆查找资料,或者向老师和同学们讨论,在这个过程中我学习到了一些我们在课堂上学不到的知识。
通过这次课程设计使我更加深刻的懂得了理论与实际相结合的重要性!
只有理论知识无法实现相关的设计和实际操作,当把所学的理论知识与实践相结合起来,从理论中得出结论,这样才能把所学的理论知识更加巩固至掌握住,才能提高自己的实际动手能力和独立思考能力。
参考文献
[1]潘松黄继业EDA技术实用教程科学出版社2006
[2]杨刚VHDL数字控制系统设计北京:
电子工业出版社2004
[3]曾繁泰VHDL程序设计北京:
清华大学出版社2001
[4]潘松黄继业EDA技术与VHDL(第3版)清华大学出版2002
[5]曹欣燕DEA技术实验与课程设计北京:
清华大学出版社2006
附录(各模块程序)
§4.1秒计时器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsecondIS
PORT(clk,reset,setmin,setsecond:
INSTD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYsecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALenmin_1,enmin_2:
STD_LOGIC;--enmin_1为59秒时的进位信号
BEGIN--enmin_2由clk调制后的手动调分脉冲信号串
daout<=count;
enmin_2<=(setminandclk);--setmin为手动调分控制信号,andclk的作用高电平有效
enmin<=(enmin_1orenmin_2);--enmin为向分进位信号
PROCESS(clk,reset,setmin,setsecond)
BEGIN
IF(reset='0')THENcount<="0000000";--若reset为0,则异步清零
ELSIF(clk'eventandclk='1')then--否则,若clk上升沿到
IF(count(3downto0)="1001")then--若个位计时恰好到"1001"即9
IF(count<16#60#)then--又若count小于16#60#,即60H
IF(count="1011001")then--又若已到59D
enmin_1<='1';count<="0000000";--则置进位为1及count复0
ELSE--未到59D
count<=count+7;--则加7,而+7=+1+6,即作"加6校正"因为个位为九此时个位需要向十位进位了即使不进时
ENDIF;
ELSE--若count不小于16#60#(即count等于或大于16#60#)
count<="0000000";--count复0
ENDIF;--ENDIF(count<16#60#)
ELSIF(count<16#60#)then--若个位计数未到"1001"则转此句再判
count<=count+1;--若count<16#60#则count加1
enmin_1<='0'after100ns;--没有发生进位
ELSE--否则,若count不小于16#60#
count<="0000000";--则count复0
ENDIF;--ENDIF(count(3DOWNTO0)="1001")
ENDIF;--ENDIF(reset='0')
IF(setsecond=’1’)THENcount<=count+1;
EndIF;
ENDPROCESS;
ENDfun;
§4.2分计时器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYminuteIS
PORT(clk,reset,sethour:
INSTD_LOGIC;
enhour:
OUTSTD_LOGIC;
daout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYminute;
ARCHITECTUREfunOFminuteIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALenhour_1,enhour_2:
STD_LOGIC;--enhour_1为59分时的进位信号
BEGIN--enhour_2由clk调制后的手动调时脉冲信号串
daout<=count;
enhour_2<=(sethourandclk);--sethour为手动调时控制信号,and的作用高电平有效
enhour<=(enhour_1orenhour_2);
PROCESS(clk,reset,sethour)
BEGIN
IF(reset='0')THEN--若reset为0,则异步清零
count<="0000000";
ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到
IF(count(3DOWNTO0)="1001")THEN--若个位计时恰好到"1001"即9
IF(count<16#60#)THEN--又若count小于16#60#,即60
IF(count="1011001")THEN--又若已到59D
enhour_1<='1';--则置进位为1
count<="0000000";--count复0
ELSE
count<=count+7;--若count未到59D,则加7,即作"加6校正"
ENDIF;--使前面的16#60#的个位转变为8421BCD的容量
ELSE
count<="0000000";--count复0(有此句,则对无效状态电路可自启动)
ENDIF;--ENDIF(count<16#60#)
ELSIF(count<16#60#)THEN
count<=count+1;--若count<16#60#则count加1
enhour_1<='0'after100ns;--没有发生进位
ELSE
count<="0000000";--否则,若count不小于16#60#count复0
ENDIF;--ENDIF(count(3DOWNTO0)="1001")
ENDIF;--ENDIF(reset='0')
ENDprocess;
ENDfun;
§4.3时计数器
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')THENcount<="000000";--若reset=0,则异步清零
ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到
IF(count(3DOWNTO0)="1001")THEN--若个位计时恰好到"1001"即9
IF(count<16#23#)THEN--23进制
count<=count+7;--若到23D则
else
count<="000000";--复0
ENDIF;
ELSIF(count<16#23#)THEN--若未到23D,则count进1
count<=count+1;
ELSE--否则清零
count<="000000";
ENDIF;--ENDIF(count(3DOWNTO0)="1001")
ENDIF;--ENDIF(reset='0')
ENDPROCESS;
ENDfun;
§4.4分频器电路
libraryieee;
useieee.std_logic_1164.all;
entityfenis
port(clk:
instd_logic;
q:
outstd_logic);
endfen;
architecturefen_arcoffenis
begin
process(clk)
variablecnt:
integerrange49downto0;
variablex:
std_logic;
begin
ifclk'eventandclk='1'then
ifcnt<49then
cnt:
=cnt+1;
else
cnt:
=0;
x:
=notx;
endif;
endif;
q<=x;
endprocess;
endfen_arc;
§4.5七段数码管显示电路
(1)LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYxianmaguanIS
PORT(A3,A2,A1,A0:
INBIT;
Y:
OUTBIT_VECTOR(0DOWNTO6));
ENDxianmaguan;
ARCHITECTUREdateflowOFxianmaguanIS
SIGNALA:
BIT_VECTOR(3DOWNTO0);
BEGIN
A<=A3&A2&A1&A0;
PROCESS(A)
BEGIN
CASEAIS
WHEN"0000"=>Y<="1111111";
WHEN"0001"=>Y<="0110000";
WHEN"0010"=>Y<="1101101";
WHEN"0011"=>Y<="1111001";
WHEN"0100"=>Y<="0110011";
WHEN"0101"=>Y<="1011011";
WHEN"0110"=>Y<="0011111";
WHEN"0111"=>Y<="1110000";
WHEN"1000"=>Y<="1111111";
WHEN"10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA24 小时 时钟 电路 剖析
![提示](https://static.bdocx.com/images/bang_tan.gif)