eda 课程设计电子时钟Word文档下载推荐.docx
《eda 课程设计电子时钟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《eda 课程设计电子时钟Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
3.1.1时基T产生电路5
3.1.2调时、调分信号的产生6
3.1.3计数显示电路6
3.2设计思路6
3.3设计步骤7
3.3.1工程建立及存盘7
3.3.2工程项目的编译8
3.3.3目标芯片的选择8
3.3.4时序仿真9
3.3.5引脚锁定10
3.3.6硬件测试11
3.3.7实验结果12
四、设计总结12
五、附录13
5.1VHDL源程序13
5.2配置符号图18
一、课程设计任务及要求
1.1实验目的
1)掌握VHDL语言的基本运用
2)掌握QuartusII的简单操作并会使用EDA实验箱
3)掌握一个基本EDA课程设计的操作
1.2功能设计
1)有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制以24小时循环计时
2)设置复位、清零等功能
3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间
4)时钟计数显示时有LED灯显示;
二、整体设计思想
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次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。
2.2总体方框图
三、详细设计
3.1.1时基T产生电路
数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。
由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。
3.1.2调时、调分信号的产生
由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。
现在我们把电路稍做变动:
把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;
当按键开关按下去时(即为1),则数据选择器将另外一个2Hz的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。
调节小时的时间也一样的实现。
3.1.3计数显示电路
由计数部分、数据选择器、译码器组成,是时钟的关键部分。
1、计数部分:
由两个60进制计数器和一个24进制计数器组成,其中60进制计数器可用6进制计数器和10进制计数器构成;
24进制的小时计数同样可用6进制计数器和10进制计数器得到:
当计数器计数到24时,“2”和“4”同时进行清零,则可实现24进制计数。
2、数据选择器:
84输入14输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号‘—’)。
3、译码器:
七段译码器。
译码器必须能译出‘—’,由实验二中译码器真值表可得:
字母F的8421BCD码为“1111”,译码后为“1000111”,现在如果只译出‘—’,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为‘—’。
3.2设计思路
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。
这些模块都放在一个顶层文件中。
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)时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:
reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
3.3设计步骤
3.3.1工程建立及存盘
1.打开QuartusⅡ,单击“File”菜单,选择File→NewProjectWizard,对话框如下:
分别输入项目的工作路径、项目名和实体名,单击Finish。
图3.1
2.单击“File”菜单,选择New,弹出小对话框,双击“VHDLFile"
,即选中了文本编辑方式。
在出现的“Vhdl1.vhd”文本编辑窗中键入VHDL程序,输入完毕后,选择File→SaveAs,即出现“SaveAs”对话框。
选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“Save”按钮。
3.建立工程项目,在保存VHDL文件时会弹出是否建立项目的小窗口,点击“Yes”确定。
即出现建立工程项目的导航窗口,点击“Next”,最后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。
注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但VHDL程序文本存盘的文件名必须与文件的实体名一致,输入后,单击“Finish”按钮。
3.3.2工程项目的编译
单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编译成功,完成后的屏幕如图3.2所示:
图3.2
3.3.3目标芯片的选择
选择菜单Assignments选项的下拉菜单中选择器件Device…,如图3.3所示:
图3.3
在弹出的对话框中的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.4编辑过程的仿真波形
3.3.5引脚锁定
将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,将设计的所有输入输出引脚分别与目标器件的EPF10K10的部分引脚相接,操作如下:
1.选择Assignments→AssignmentsEditor,即进入AssignmentsEditor编辑器。
在Category栏选择Pin,或直接单击右上侧的Pin按钮。
2.双击TO栏的《new》,在出现的的下拉栏中选择对应的端口信号名(如D[0]);
然后双击对应的栏的《new》,在出现的下拉栏中选择对应的端口信号名的期间引脚号。
3.最后存储这些引脚锁定信息后,必须再编译(启动)一次,才能将引脚锁定信息编译进编程下载文件中。
此后就可以准备将编译好的SOF文件下载到试验系统的FPGA中去了。
图3.5引脚锁定图
3.3.6硬件测试
1.首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源,选择模式7。
2.打开编辑窗和配置文件。
选择,弹出一个编辑窗。
在Mode栏中选择JTAG,并在选项下的小方框打勾。
注意核对下载文件路径与文件名。
如果文件没有出现或者出错,单击左Addfile侧按钮,手动选择配置文件clock.sof。
3.最后单击下载标符Start,即进入对目标器件FPGA的配置下载操作。
当Progress显示100%,以及在底部的处理栏中出现ConfigurationSucceeded时,表示编程成功,如图所示。
注意,如果必要时,可再次单击Start,直至编程成功。
图3.6
4.下载完成后,通过硬件测试进一步确定设计是否达到所有的技术指标,如未达到,可逐步检查,哪部分出现问题。
如果是代码出现问题,须修改代码;
若是时序波形图有问题,须重新设置。
3.3.7实验结果
实验箱使用模式7,键8为复位按键,键8为1时正常工作。
键4设置小时,键7设置分钟。
下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,7键设置分钟数。
当秒数满60则进一位,分钟数满60进一位,当显示为23:
59:
59时,秒数在加一则显示00:
00:
00,之后从新计时。
四、设计总结
五、附录
5.1VHDL源程序
Alert模块
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:
BEGIN
speaker:
PROCESS(clk)
--speak<
=count1
(1);
IF(clk'
eventandclk='
1'
)THEN
IF(dain="
0000000"
speak<
IF(count1>
="
10"
count1<
00"
;
--count1为三进制加法计数器
ELSE
=count1+1;
--speak<
=count1(0);
ENDIF;
ENDPROCESSspeaker;
lamper:
IF(rising_edge(clk))THEN
IF(count<
IF(count="
lamp<
001"
--循环点亮三只灯
ELSIF(count="
01"
010"
100"
ENDIF;
count<
=count+1;
ENDPROCESSlamper;
ENDfun;
Hour模块
useIEEE.STD_LOGIC_1164.ALL;
ENTITYhourIS
PORT(clk,reset:
daout:
outSTD_LOGIC_VECTOR(5DOWNTO0));
ENDENTITYhour;
ARCHITECTUREfunOFhourIS
SIGNALcount:
STD_LOGIC_VECTOR(5DOWNTO0);
daout<
=count;
PROCESS(clk,reset)
IF(reset='
0'
)THENcount<
000000"
--若reset=0,则异步清零
ELSIF(clk'
)THEN--否则,若clk上升沿到
IF(count(3DOWNTO0)="
1001"
)THEN--若个位计时恰好到"
即9
16#23#)THEN--23进制
=count+7;
--若到23D则
else
--复0
ELSIF(count<
16#23#)THEN--若未到23D,则count进1
ELSE--否则清零
--ENDIF(count(3DOWNTO0)="
)
--ENDIF(reset='
ENDPROCESS;
5.2配置符号图