数字时钟的设计EDA.docx
《数字时钟的设计EDA.docx》由会员分享,可在线阅读,更多相关《数字时钟的设计EDA.docx(14页珍藏版)》请在冰豆网上搜索。
数字时钟的设计EDA
设计报告
课程名称在系统编程技术
任课教师XXX
设计题目数字时钟的设计
班级自动化
姓名XX
学号XXXXXXXX
日期XXXXX
摘要
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪60年代中期从计算机辅助设计、计算机辅助制造、计算机辅助测试和计算机辅助工程的概念发展而来的。
计算机技术电路在电子技术设计领域,可编程逻辑器件的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。
这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。
这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
关键字:
设计数字钟实验仿真
Abstract
EDAisanelectronicdesignautomation(ElectronicDesignAutomation)acronym,inthemid1960sfromcomputer-aideddesign,computeraidedmanufacturing,computer-aidedtestingandcomputer-aidedengineeringconceptsevolved.Computertechnology,electronictechnologycircuitdesign,programmablelogicdeviceapplications,hasbeenwidelyspread,thesedevicesasdigitalsystemsdesignbringsgreatflexibility.Thesedevicescanbeprogrammedbysoftwareandhardwarestructureandworkingmethodsofitsreconstructed,sothatthedesignofthehardwareassoftwaredesigncanbeasquickandeasy.Allthishasgreatlychangedthetraditionaldigitalsystemdesignmethods,designprocessanddesignconcepts,andpromotetherapiddevelopmentofEDAtechnology.
EDAtechnologyisthecomputerasatool,designersintheEDAsoftwareplatform,completewithahardwaredescriptionlanguageVHDLdesignfiles,andthenbedoneautomaticallybythecomputerlogiccompiler,simplification,segmentation,synthesis,optimization,placement,routingandsimulation,untilforaspecifictargetchipadaptercompilation,logicalmappingandprogrammingdownloadwork.EDAtechnology,greatlyimprovestheefficiencyofthecircuitdesignandoperability,reducingthelaborintensityofdesigners.
Keywords:
designdigitalclocksimulationexperiments
3.3.1工程建立及存盘………………………………………....-4-
四、课程设计总结…………………………………………………………………….-8-
六、附录……………………………………………………..-14-
一丶课程设计任
1.1课程设计要求
1)具有时、分、秒计数显示功能,以24小时循环计时。
2)具有调节小时、分钟及清零的功能。
3)具有整点报时功能。
4)时钟计数显示时有LED灯的花样显示。
1.2课程设计分析
数字钟是计数器的综合应用,数字钟由十分之一秒、秒钟、分钟、时钟组成,十分之一秒由十进制计数器组成,秒钟由六十进制计数器构成,分钟由六十进制计数器,时钟由十二进制计数器构成。
该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。
输入端clk是连续脉冲,clrn是高电平系统复位,en是高电平使能端,输出端是十分之一秒位、秒钟个位、秒钟十位、分钟个位、分钟十位、时钟个位、时钟十位,最后由7个数码管显示各位的值。
该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。
二、整体设计思想
2.1性能指标及功能设计
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。
这些模块都放在一个顶层文件中。
1)时钟计数:
首先下载程序进行复位清零操作,电子钟从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七段显示数码管。
2)时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键1和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:
Reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
2.2总体方框图
三、总体设计方案
本数字系统实现数字钟的基本的计时功能,输入8Hz的时钟,通过分频产生1Hz的时钟信号,采用24小时制计时,60进制记分、秒,能显示时、分、秒。
本系统还具有校正功能,可以进行时分的校时,当计时器运行到59分59秒开始报时。
本数字钟实际上是一个对频率(1Hz)进行计数的计数电路。
由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时分频后的1Hz时间信号必须做到准确稳定。
通常使用石英晶体振荡器电路构成数字钟。
3.1数字时钟的基本组成:
本数字钟的实现可分为以下几个模块:
(1)秒计数模块:
秒计数,在频率为1Hz的时钟下以60次为循环计数,并产生进位信号影响分计数;
(2)分计数模块:
分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数;
(3)时计数模块:
时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数;
(4)频率产生模块:
产生8Hz的计数频率,通过分频得到1Hz频率;
(5)时间显示模块:
数码管通过动态显示,同时进行一定频率的扫描显示时,分,秒;
(6)时间设置模块:
设置调试使能端,可以调时,分。
基本功能是在使能端为低电平时,可以使时、分和秒循环计数;
(7)整点报时模块:
在秒计数到59秒时,同时分计数到59分开始,蜂鸣器产生四个时钟周期的鸣叫,到整点是产生两个时钟周期的鸣叫。
一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器和定时器组成。
干电路系统由秒信号发生器、“时”,“分”,“秒”计数器、译码器及显示器、电路组成。
3.2数字时钟功能模块
1)分频器电路:
通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频。
通常实现分频器的电路是计数器电路,当计数满时则产生相应的跳变,从而得到想要的的分频后频率。
2)时间计数单元:
时间计数单元有时计数、分计数和秒计数等几个部分。
时计数单元为24进制计数器,分、秒计数单元为60进制计数器。
3)译码驱动及显示单元:
计数器实现了对时间的累计以8421BCD码形式输出,为了将计数器输出的8421BCD码显示出来。
试验箱上有几种模式可供选择,选择模式7则自带有显示译码器,代码中就可以直接送四位bcd码给相应端口就行。
4)校时电源电路:
当重新接通电源或走时出现误差时都需要对时间进行校正。
通常,校正时间的方法是:
首先截断正常的计数通路,然后再进行人工出触发计数将高电平信号加到需要校正的计数单元的输入端,相应的时分秒数值随着时钟脉冲信号跳变,校正好后,再按下使能键变为高电平,转入正常计时状态。
5)整点报时电路:
一般时钟都应具备整点报时电路功能,即在时间出现整点时,数字钟会自动报时,以示提醒。
其作用方式是发出连续的或有节奏的音频声波,较复杂的也可以是实时语音提示。
3.3设计步骤
3.3.1工程建立及存盘
1.打开QuartusⅡ,单击“File”菜单,选择File→NewProjectWizard,对话框如下:
分别输入项目的工作路径、项目名和实体名,单击Finish。
2.单击“File”菜单,选择New,弹出小对话框,双击“VHDLFile",即选中了文本编辑方式。
在出现的“Vhdl1.vhd”文本编辑窗中键入VHDL程序,输入完毕后,选择File→SaveAs,即出现“SaveAs”对话框。
选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“Save”按钮。
3.建立工程项目,在保存VHDL文件时会弹出是否建立项目的小窗口,点击“Yes”确定。
即出现建立工程项目的导航窗口,点击“Next”,最后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。
注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但VHDL程序文本存盘的文件名必须与文件的实体名一致,输入后,单击“Finish”按钮。
4.本设计原理图:
3.3.2工程项目的编译
单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编译完成直至成功。
3.3.3目标芯片的选择
选择菜单Assignments选项的下拉菜单中选择器件Device。
在弹出的对话框中的Family(器件序列栏)对应的序列名,EP1C3对应的是Cyclone系列。
在AvailableDevices里选择EP1C3T144-C8(有时需要把Showadvanceddevices的勾消去,以便显示出所有速度级别的器件)。
注意:
所选器件必须与目标板的器件型号完全一致。
在图中,单击“DeviceandPinOptions…”,在弹出的“DeviceandPinOptions…”窗口中,单击“UnusedPins”标签。
选择“Asoutputdrivinganunspecifiedsignal”(由于学习机的“FPGA”具有很多功能,为了避免使用引脚对其它器件造成影响,保证本系统可靠工作,将未使用引脚设定为输出不定状态)后,单击确定后,无误后单击“OK”。
3.3.4时序仿真
建立波形文件:
选择File→New,在New窗中选中“OtherFile”标签。
在出现的屏幕中选择“VectorWaveformFile”项出现一新的屏幕。
在出现的新屏幕中,双击“Name”下方的空白处,弹出“InsertNodorBus”对话框,单击该对话框的“NodeFinder……”。
在屏幕中的Filter中选择Pins,单击“List”。
而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。
然后单击屏幕右上脚的“OK”。
在出现的小屏幕上单击“OK”。
设定仿真时间宽度。
选择Edit→Endtime…选项,在Endtime选择窗中选择适当的仿真时间域,以便有足够长的观察时间。
波形文件存盘。
选择File→Saveas选项,直接存盘即可。
运行仿真器。
在菜单中选择项,直到出现,仿真结束。
3.3.5引脚锁定
将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,将设计的所有输入输出引脚分别与目标器件的EPF10K10的部分引脚相接,操作如下:
1.选择Assignments→AssignmentsEditor,即进入AssignmentsEditor编辑器。
在Category栏选择Pin,或直接单击右上侧的Pin按钮。
2.双击TO栏的《new》,在出现的的下拉栏中选择对应的端口信号名(如D[0]);然后双击对应的栏的《new》,在出现的下拉栏中选择对应的端口信号名的期间引脚号。
3.最后存储这些引脚锁定信息后,必须再编译(启动)一次,才能将引脚锁定信息编译进编程下载文件中。
3.3.6硬件测试
实验硬件:
GW48实验系统cycloneEP1C3T144C8
测试模式:
NO.7
测试方式:
clock选用clock0,短路帽选4HZ;键8控制reset,键7控制sethour,键4控制setminute;D8、D7、D6显示花样灯lamp;数码管8、7用作小时显示,高位是小时的十位,低位是小时的个位;数码管5、4用作分钟显示,高位是分钟的十位,低位是分钟的个位;数码管2、1用作秒钟显示,高位是秒钟的十位,低位是秒钟的个位;
测试过程:
灯亮为高电平,灯灭为低电平;reset低电平清零复位,按键8使灯亮则时钟开始从00-00-00计时,秒钟计时到59时向分钟进1,分钟计时到59时向小时进1;键7用做调小时每来一个脉冲调一次调节范围00-——23;键4用做调分钟每来一个脉冲调一次调节范围00—59;lamp灯显的三个灯轮回亮;当时钟为00则蜂鸣器开始整点报时一分钟。
下面是硬件电路:
3.3.7实验结果
实验箱使用模式7,键8为复位按键,键8为1时正常工作。
键4设置小时,键1设置分钟。
下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,1键设置分钟数。
当秒数满60则进一位,分钟数满60进一位,当显示为23:
59:
59时,秒数在加一则显示00:
00:
00,之后从新计时。
时间每到整点时,蜂鸣器报警。
四、课程设计总结
从一开始接触EDA这门实验课开始,通过每一次的实验,我都觉得自己学到很多基础方面的知识。
当然,这些也为本次的设计实验奠定了基础。
让我感受很深的是,实验可以通过软件的方式来控制,并以硬件的方式显示出结果。
其整个过程都让我觉得很不可思议,也让我对这门实验产生了很大的兴趣。
通过这次设计实验,使得我对层次化结构化设计有了更深的了解。
在设计中将设计任务分成了几个子模块,完成各子模块的设计功能,然后再将各模块合起来联试,加深了层次化设计概念。
通过实验加深了对软件的元件管理的含义的理解,学会将不同目录下的设计题目融合在同一个文件夹中进行总体集成。
通过仿真和硬件测试,让我认识到调试和硬件测试手段的多样化,对于同一功能的电路可以采用多种模式进行硬件测试,但要选择一个最佳方案,从而进行信号引脚的锁定并与相应功能块的硬件电路接口相连。
感谢实验老师的细心指导,在做前面的每一次实验的时候,我都会犯一些细节方面的错误,然后问老师,老师都很细心的给我指导。
我相信,只要努力好学,终究会学有所成的!
五、参考文献:
[1]EDA技术使用教程vhdl潘松版 . 2006
[2]电路设计与仿真 .2003
[3] 电子设计自动化王振宇版.2007
[4]硬件描述语言Verilog清华大学出版社,2001
六、附录
源程序代码:
1、顶层实体描述
ENTITYalertIS
PORT(clk:
INSTD_LOGIC;
dain:
INSTD_LOGIC_VECTOR(6DOWNTO0);
speak:
OUTSTD_LOGIC;
lamp:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDalert;
2、秒钟计数器VHDL语言源程序(底层文件)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsecondIS
PORT(clk,reset,setmin:
STD_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为手动调分控制信号,高电平有效
enmin<=(enmin_1orenmin_2);——enmin为向分进位信号
PROCESS(clk,reset,setmin)
BEGIN
IF(reset='0')THENcount<="0000000";——若reset为0,则异步清零
ELSIF(clk'eventandclk='1')then——否则,若clk上升沿到
IF(count(3downto0)="1001")then——若个位计时恰好到“1001”
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’)
ENDPROCESS;
ENDfun;
3、分钟计数器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);
SIGNALenhour_1,enhour_2:
STD_LOGIC;——enmin_1为59分时的进位信号
BEGIN——enmin_2由clk调制后的手动调时脉冲信号串
daout<=count;
enhour_2<=(sethourandclk1);——sethour为手动调时控制信号,高电平有效
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