EDA课程设计数字电子钟逻辑电路设计.docx
- 文档编号:18554668
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:22
- 大小:373.46KB
EDA课程设计数字电子钟逻辑电路设计.docx
《EDA课程设计数字电子钟逻辑电路设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字电子钟逻辑电路设计.docx(22页珍藏版)》请在冰点文库上搜索。
EDA课程设计数字电子钟逻辑电路设计
序号
综合成绩
优秀()良好()
中等()及格()
不及格()
教师(签名)
批改日期
《EDA技术》课程设计报告
课题:
数字电子钟逻辑电路设计
院系电子与电气工程学院
专业电气工程及其自动化
一、课程设计任务及要求
1.1实验目的
1)掌握VHDL语言的基本运用
2)掌握QuartusII的简单操作并会使用EDA实验箱
3)掌握一个基本EDA课程设计的操作
1.2功能设计
要求显示格式为小时-分钟-秒钟,整点报时,报时时间为5秒,即从整点前5秒钟开始进行报时提示,LED开始闪烁,过整点后,停止闪烁。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00-00-00。
二、整体设计思想
2.1性能指标及功能设计
1)时、分、秒计时器
时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。
当秒计时器接受到一个秒脉冲时,秒计数器开始从00计数到59,此时秒显示器将显示00、01、02、...、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。
2)校时电路
当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。
2.2总体方框
2.3FPGA芯片介绍
SOPC-NIOSIIEDA/SOPC实验开发系统是根据现代电子发展的方向,集EDA和SOPC系统开发为一体的综合性实验开发系统,除了满足高校专、本科生和研究生的SOPC教学实验开发之外,也是电子设计和电子项目开发的理想工具。
整个开发系统由核心板SOPC-NiosII-EP2C35、系统板和扩展板构成,根据用户不同的需求配置成不同的开发系统。
SOPC-NiosII-EP2C35开发板是在经过长期用户需求考察后,结合目前市面上以及实际应用需要,同时兼顾入门学生以及资深开发工程师的应用需求而研发的。
就资源而言,它已经可以组成一个高性能的嵌入式系统,可以运行目前流行的RTOS,如uC/OS、uClinux等。
系统主芯片采用672引脚、BGA封装的EP2C35FPGA,它拥有33216个LE,105个M4K片上RAM(共计483840bits),35个18×18硬件乘法器、4个高性能PLL以及多达475个用户自定义IO。
板上提供了大容量的SRAM、SDRAM和FlashROM等以及常用的RS-232、USB2.0、RJ45接口和标准音频接口等,除去板上已经固定连接的IO,还有多达260个IO通过不同的接插件引出,供用户使用。
所以,不管从性能上而言,还是从系统灵活性上而言,无论您是初学者,还是资深硬件工程师,它都会成为您的好帮手。
如图2.3所示:
图2.3FPGA系统功能框图
三、编译与调试
3.1数字钟的基本工作原理:
3.1.1调时、调分信号的产生
由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。
现在我们把电路稍做变动:
把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。
调节小时的时间也一样的实现。
3.1.2计数显示电路
由计数部分、数据选择器、译码器组成,是时钟的关键部分。
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计时开始。
setshi可以调整时钟的小时部分,setfen可以调整分钟,步进为1。
用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6DOWNTO0)上的信号来点亮指定的LED七段显示数码管。
2)时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的S2和S1进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:
S8为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
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”按钮。
3.3.2工程项目的编译
单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编译完成后的屏幕如图所示:
3.3.3时序仿真
建立波形文件:
选择File→New,在New窗中选中“OtherFile”标签。
在出现的屏幕中选择“VectorWaveformFile”项出现一新的屏幕。
在出现的新屏幕中,双击“Name”下方的空白处,弹出“InsertNodorBus”对话框,单击该对话框的“NodeFinder……”。
在屏幕中的Filter中选择Pins,单击“List”。
而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。
然后单击屏幕右上脚的“OK”。
在出现的小屏幕上单击“OK”。
设定仿真时间宽度。
选择Edit→Endtime…选项,在Endtime选择窗中选择适当的仿真时间域,以便有足够长的观察时间。
波形文件存盘。
选择File→Saveas选项,直接存盘即可。
运行仿真器。
在菜单中选择项,直到出现,仿真结束。
3.3.4引脚锁定
将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,将设计的所有输入输出引脚分别与目标器件的EPF10K10的部分引脚相接,操作如下:
1.选择Assignments→AssignmentsEditor,即进入AssignmentsEditor编辑器。
在Category栏选择Pin,或直接单击右上侧的Pin按钮。
2.双击TO栏的《new》,在出现的的下拉栏中选择对应的端口信号名(如D[0]);然后双击对应的栏的《new》,在出现的下拉栏中选择对应的端口信号名的期间引脚号。
3.最后存储这些引脚锁定信息后,必须再编译(启动)一次,才能将引脚锁定信息编译进编程下载文件中。
此后就可以准备将编译好的SOF文件下载到试验系统的FPGA中去了。
3.3.5硬件测试
1.首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源。
2.打开编辑窗和配置文件。
选择,弹出一个编辑窗。
在Mode栏中选择JTAG,并在选项下的小方框打勾。
注意核对下载文件路径与文件名。
如果文件没有出现或者出错,单击左Addfile侧按钮,手动选择配置文件clock.sof。
3.最后单击下载标符Start,即进入对目标器件FPGA的配置下载操作。
当Progress显示100%,以及在底部的处理栏中出现ConfigurationSucceeded时,表示编程成功,如图所示。
注意,如果必要时,可再次单击Start,直至编程成功。
4.下载完成后,通过硬件测试进一步确定设计是否达到所有的技术指标,如未达到,可逐步检查,哪部分出现问题。
如果是代码出现问题,须修改代码;若是时序波形图有问题,须重新设置。
3.3.6实验结果
键s8为复位按键,键s1设置小时,键s2设置分钟。
下载成功后,按下键s8,即使六个LED复位清零,显示数秒的自动计时。
当秒数满59则进一位,分钟数满59进一位,当显示为xx:
59:
55时,外接的LED小灯开始闪烁,过整点以后停止闪烁。
调试实物图如图3.3.6所示:
图3.3.6调试实物图
四、程序设计
1.
(1)秒计数器(miao)VHDL程序描述
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitymiaois
port(
clk,reset,setfen:
instd_logic;
enfen:
outstd_logic;
countmiao:
outstd_logic_vector(7downto0)
);
endmiao;
architecturefunofmiaois
signalcount:
std_logic_vector(7downto0);
signalenfen_1,enfen_2:
std_logic;
begin
countmiao<=count;
enfen_2<=(setfenandclk);
enfen<=(enfen_1orenfen_2);
process(clk,reset,setfen)
begin
if(reset='0')
thencount<="00000000";
enfen_1<='0';
elsif(clk'eventandclk='1')
thenif(count(3downto0)="1001")
thenif(count<16#60#)
thenif(count="01011001")
thencount<="00000000";
enfen_1<='1';
elsecount<=count+7;
endif;
elsecount<="00000000";
enfen_1<='0';
endif;
elsif(count<16#60#)
thencount<=count+1;
enfen_1<='0';
elsecount<="00000000";
enfen_1<='1';
endif;
endif;
endprocess;
endfun;
(2)秒计数器(miao)仿真波形图
(3)秒计数器(miao)仿真分析
1、随着clk脉冲信号的不断到来,countmiao记录出clk的脉冲个数,计数到59时,在下一个clk脉冲信号到来时,输出端enfen输出高定平,即向分进位,同时countmiao清零。
2、reset为清零端,reset低电平时,当countmiao计数从零重新开始计数。
3、setfen为分的手动进位端,当setfen高定平时且clk脉冲到来时,输出enfen高电平,向分进位。
2.
(1)分计数器(fen)VHDL程序描述
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenisport(
imiao,clk,reset,setshi:
instd_logic;
enshi:
outstd_logic;
countfen:
outstd_logic_vector(7downto0)
);
endfen;
architecturefunoffenissignalenshi_1,enshi_2:
std_logic;signalcount:
std_logic_vector(7downto0);
begin
countfen<=count;enshi_2<=(setshiandclk);
enshi<=(enshi_1orenshi_2);
process(imiao,reset,setshi)
begin
if(reset='0')then
count<="00000000";
elsif(imiao'eventandimiao='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="01011001")then
count<="00000000";
enshi_1<='1';
elsecount<=count+7;
endif;elsecount<="00000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enshi_1<='0';
elsecount<="00000000";
endif;
endif;
endprocess;
endfun;
(2)分计数器(fen)仿真波形图
(3)分计数器(fen)仿真分析
1、imiao为秒计数器的enfen进位输出端,当enfen(imiao)高电平到来时,clk高电平时,且countfen开始计数。
countfen计数到59时,下一个enfen(imiao)、clk到来时,enshi高电平,即向时进位,同时countfen清零。
2、reset为清零端,当reset低电平时,countfen计数从零重新开始计数。
3、setshi为时的手动进位端,当setshi高定平时且clk脉冲到来时,输出en时高电平,向时进位。
3.
(1)时计数器(shi)VHDL程序描述
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityshiis
port(
ifen,reset:
instd_logic;
countshi:
outstd_logic_vector(7downto0));
endshi;
architecturefunofshiis
signalcount:
std_logic_vector(7downto0);
begincountshi<=count;
process(ifen,reset)
begin
if(reset='0')then
count<="00000000";
elsif(ifen'eventandifen='1')then
if(count(3downto0)="1001")then
if(count<16#23#)thencount<=count+7;
elsecount<="00000000";
endif;
elsif(count<16#23#)then
count<=count+1;
elsecount<="00000000";
endif;
endif;
endprocess;
endfun;
(2)时计数器(shi)仿真扫描显示译码器(saomiao)仿真
(3)时计数器(shi)仿真分析
1、ifen为分计数器的enshi进位输出端,当enshi(ifen)为高电平时,countshi计数。
countshi计数到23时,当下一个enshi(ifen)、clk到来时,countshi会自动清零。
2、reset为清零端,当reset低电平时,countfen计数从零重新开始计数。
4.整点报时
(1)整点报时器(baoshi)VHDL程序描述
libraryieee;useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
Entitybaoshiis
port(clk:
instd_logic;inputmiao,inputfen:
instd_logic_vector(6downto0);
output:
outstd_logic_vector(1downto0));
endbaoshi;
architecturefunofbaoshiissignaltemp:
std_logic_vector(1downto0);
signalnummiao,numfen:
std_logic_vector(7downto0);
beginnummiao<=inputmiao;numfen<=inputfen;
output<=temp;
process(clk,temp)begin
if(clk'eventandclk='1')then
if(numfen="01011001")then
casenummiaois
when"01011000"=>temp<="01";
when"01011001"=>temp<="10";
whenothers=>temp<="00";
endcase;
endif;
if(numfen="00000000")then
casenummiaoiswhen"00000000"=>temp<="11";
whenothers=>temp<="00";
endcase;endif;
endif;endprocess;
endfun;11
(2)整点报时器(baoshi)仿真波形图
(3)整点报时器(baoshi)仿真分析
input为分计数器的输出端,当输出58、59和00(十六进制)时,整点报时器(baoshi)的输出端output为高电平,点亮LED灯。
当intput为58、59时,点亮一个LED灯,当input为00时,点亮两个LED灯。
其他情况时,LED灯均不发光。
4.
(1)分频器(fenpin)设计
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;entityfenpinis
port(clk_5M:
instd_logic;
clk:
outstd_logic);
endfenpin;
architecturefunoffenpinissignalcount:
std_logic_vector(22downto0);begin
process(clk_5M)
begin
if(clk_5M'eventandclk_5M='1')then
if(count="10011000100101100111111")then
count<="00000000000000000000000";
clk<='1';
elsecount<=count+1;
clk<='0';
endif;
endif;
endprocess;
endfun;
5.
(1)扫描显示译码器(saomiao))VHDL程序描述
扫描显示译码器是用来显示时钟数值的装置,将数字时钟的高低电平信号用数码管的数值显示出来。
八个数码管中,用六个数码管显示时、分和秒,另外两个可做为时和分、分和秒之间的间隔,始终不显示。
首先对八个数码管进行扫描,每一时刻都只有一个数码管处于扫描状态,并将此时的数字时钟的高低电平通过十六进制的BCD码转换为数码管显示数值。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysaomiaois
port(
clk_smxs:
instd_logic;
shi:
instd_logic_vector(7downto0);
fen:
instd_logic_vector(7downto0);
miao:
instd_logic_vector(7downto0);
selout:
outstd_logic_vector(7downto0);
segout:
outstd_logic_vector(6downto0));
endsaomiao;
architecturefunofsaomiaois
signaltemp:
std_logic_vector(2downto0);
signalseg:
std_logic_vector(6downto0);
signalsel:
std_logic_vector(7downto0);
begin
selout<=sel;
segout<=seg;
process(c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 数字 电子钟 逻辑电路 设计