EDA数字时钟实验报告.docx
- 文档编号:10719146
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:16
- 大小:310.03KB
EDA数字时钟实验报告.docx
《EDA数字时钟实验报告.docx》由会员分享,可在线阅读,更多相关《EDA数字时钟实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
EDA数字时钟实验报告
EDA实验报告
实验名称:
EDA多功能数字时钟设计
学院:
姓名:
班级:
指导教师:
EDA多功能数字时钟设计
摘要:
本实验中咱们运用EDA课程中所学的知识,设计了一个拥有时刻校正和闹钟功能的24小时制多功能数字时钟。
通过本实验,咱们初步了解EDA的设计进程;初步把握用VHDL语言的设计方式和设计思想;初步熟悉Max+PlusII软件平台的编程和仿真,并通过AEDK-EDA实验板下载模拟实现初步了解了硬件实现的方式。
关键词:
数字时钟、VHDL、FPGA、Max+PlusII
一、设计方案
本次设计的多功能数字钟具有大体的计时功能和时刻校正功能,同时能够进行按时闹铃。
计时功能采纳24小时计时,显示时、分、秒。
其中分钟和秒模块采纳60进制实现;小时设计了24进制的计数器.时刻校正部份,分为时校时和分校时,别离通过操纵时校正按钮和分校正按钮来实现.闹铃部份,先通过模式切换按钮进入闹钟按时,然后通过与时刻校正相同的方式来进行闹铃时刻的预置,当预置抵达时刻时,时钟将通过蜂鸣器进行闹铃。
2.硬件利用模块:
EPF10K20TC144-4,模块10(蜂鸣器),模块17(脉冲源),模块21(开关设置),模块22(设置跳接模块),模块23(键盘显示模块)
显示/校正时间输出
程序设计框图
闹铃
按钮(模式切换/校正定时部分选择)
数码管选通和显示
模六计数,输出数码管选通信号
闹钟定时时间输出
二、VHDL源程序
libraryieee;
useclockis
port(clk:
instd_logic;----------------------时钟脉冲
clk1:
instd_logic;---------------------数码管选通时钟脉冲
md1:
instd_logic;----------------------模式选择:
0为计时,1为闹钟
md2:
instd_logic_vector(1downto0);---10为时校正(按时),01为分校正(按时)
speak:
outstd_logic;-------------------闹钟0
dout:
outstd_logic_vector(6downto0);--数码管七段码输出
selout:
outstd_logic_vector(2downto0));---数码管选通输出
endclock;
architectureoneofclockis
signalsel:
std_logic_vector(2downto0);--------模6计数信号(数码管选通输入)
signalhou1:
std_logic_vector(3downto0);-------小时十位
signalhou2:
std_logic_vector(3downto0);-------小时个位
signalmin1:
std_logic_vector(3downto0);-------分钟十位
signalmin2:
std_logic_vector(3downto0);-------分钟个位
signalseth1:
std_logic_vector(3downto0);------按时小时十位
signalseth2:
std_logic_vector(3downto0);------按时小时个位
signalsetm1:
std_logic_vector(3downto0);------按时分钟十位
signalsetm2:
std_logic_vector(3downto0);------按时分钟个位
signalsec1:
std_logic_vector(3downto0);-------秒十位
signalsec2:
std_logic_vector(3downto0);-------秒个位
signalh1:
std_logic_vector(3downto0);------输出小时十位
signalh2:
std_logic_vector(3downto0);------输出小时个位
signalm1:
std_logic_vector(3downto0);------输出分钟十位
signalm2:
std_logic_vector(3downto0);------输出分钟个位
signals1:
std_logic_vector(3downto0);------输出秒十位
signals2:
std_logic_vector(3downto0);------输出秒个位
-------------------------------------------------
begin
----------------------------------------------模6计数(数码管选通)
choice:
process(clk1)
begin
ifclk1'eventandclk1='1'then
ifsel="101"then
sel<="000";
else
sel<=sel+1;
endif;
endif;
endprocesschoice;
selout<=sel;
-----------------------------------------------小时十位
h110:
process(clk,hou2,min1,min2,sec1,sec2,md1,md2)
begin
ifclk'eventandclk='1'then
if(hou1="0010"andhou2="0011")and(min1="0101"andmin2="1001")and
(sec1="0101"andsec2="1001")then
hou1<="0000";
elsifhou1="0010"andhou2="0011"andmd1='0'andmd2="10"thenhou1<="0000";
elsif(hou2="1001"and(min1="0101"andmin2="1001")and(sec1="0101"and
sec2="1001"))or(hou2="1001"andmd1='0'andmd2="10")then
hou1<=hou1+1;
endif;
endif;
endprocessh110;
-----------------------------------------------小时个位
h220:
process(clk,min1,min2,sec1,sec2,md1,md2,hou1)
begin
ifclk'eventandclk='1'then
if(hou1="0010"andhou2="0011")and(min1="0101"andmin2="1001")and
(sec1="0101"andsec2="1001")then
hou2<="0000";
elsifhou2="1001"and(min1="0101"andmin2="1001")and(sec1="0101"and
sec2="1001")then
hou2<="0000";
elsif(hou2="1001"andmd1='0'andmd2="10")or(hou1="0010"andhou2="0011"andmd1='0'andmd2="10")then
hou2<="0000";
elsif((min1="0101"andmin2="1001")and(sec1="0101"andsec2="1001"))or
(md1='0'andmd2="10")then
hou2<=hou2+1;
endif;
endif;
endprocessh220;
-----------------------------------------------分钟十位
m110:
process(clk,min2,sec1,sec2,md1,md2)
begin
ifclk'eventandclk='1'then
if(min1="0101"andmin2="1001")and(sec1="0101"andsec2="1001")then
min1<="0000";
elsifmin1="0101"andmin2="1001"and(md1='0'andmd2="01")then
min1<="0000";
elsif(min2="1001"and(sec1="0101"andsec2="1001"))or(min2="1001"and
md1='0'andmd2="01")then
min1<=min1+1;
endif;
endif;
endprocessm110;
----------------------------------------------分钟个位
m220:
process(clk,sec1,sec2,md1,md2)
begin
ifclk'eventandclk='1'then
ifmin2="1001"and(sec1="0101"andsec2="1001")then
min2<="0000";
elsifmin2="1001"and(md1='0'andmd2="01")then
min2<="0000";
elsif(sec1="0101"andsec2="1001")or(md1='0'andmd2="01")then
min2<=min2+1;
endif;
endif;
endprocessm220;
---------------------------------------------秒十位
s110:
process(clk,sec1,sec2)
begin
ifclk'eventandclk='1'then
if(sec1="0101"andsec2="1001")then
sec1<="0000";
elsifsec2="1001"then
sec1<=sec1+1;
endif;
endif;
endprocesss110;
--------------------------------------------秒个位
s220:
process(clk,sec2)
begin
ifclk'eventandclk='1'then
ifsec2="1001"then
sec2<="0000";
elsesec2<=sec2+1;
endif;
endif;
endprocesss220;
-------------------------------------------时刻设置小时部份
sethour1:
process(clk,seth2)
begin
ifclk'eventandclk='1'then
ifseth1="0010"andseth2="0011"then
seth1<="0000";
elsifseth2="1001"then
seth1<=seth1+1;
endif;
endif;
endprocesssethour1;
-------------------------------------------
sethour2:
process(clk,md1,md2,seth1)
begin
ifclk'eventandclk='1'then
if(seth1="0010"andseth2="0011")orseth2="1001"then
seth2<="0000";
elsifmd1='1'andmd2="10"then
eth2<=seth2+1;
endif;
endif;
endprocesssethour2;
-------------------------------------------时刻设置分钟部份
setmin1:
process(clk,setm1,setm2)
begin
ifclk'eventandclk='1'then
ifsetm1="0101"andsetm2="1001"then
setm1<="0000";
elsifsetm2="1001"then
setm1<=setm1+1;
endif;
endif;
endprocesssetmin1;
----------------------------------------------
setmin2:
process(clk,md1,md2,setm2)
begin
ifclk'eventandclk='1'then
ifsetm2="1001"then
setm2<="0000";
elsifmd1='1'andmd2="01"then
setm2<=setm2+1;
endif;
endif;
endprocesssetmin2;
--------------------------------------------闹铃
speaker:
process(clk1,hou1,hou2,min1,min2)
begin
ifclk1'eventandclk1='1'then
ifseth1=hou1andseth2=hou2andsetm1=min1andsetm2=min2then
if(sec2="0000"orsec2="0010"orsec2="0100"orsec2="0110"orsec2="1000")then
speak<='1';
elsespeak<='0';
endif;
endif;
endif;
endprocessspeaker;
-------------------------------------------数码管显示
disp:
process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)
begin
ifsel="101"then
caseh1is
when"0000"=>dout<="0111111";
when"0001"=>dout<="0000110";
when"0010"=>dout<="1011011";
whenothers=>dout<="1000000";
endcase;
elsifsel="100"then
caseh2is
when"0000"=>dout<="0111111";
when"0001"=>dout<="0000110";
when"0010"=>dout<="1011011";
when"0011"=>dout<="1001111";
when"0100"=>dout<="1100110";
when"0101"=>dout<="1101101";
when"0110"=>dout<="1111101";
when"0111"=>dout<="0000111";
when"1000"=>dout<="1111111";
when"1001"=>dout<="1101111";
whenothers=>dout<="1000000";
endcase;
elsifsel="011"then
casem1is
when"0000"=>dout<="0111111";
when"0001"=>dout<="0000110";
when"0010"=>dout<="1011011";
when"0011"=>dout<="1001111";
when"0100"=>dout<="1100110";
when"0101"=>dout<="1101101";
whenothers=>dout<="1000000";
endcase;
elsifsel="010"then
casem2is
when"0000"=>dout<="0111111";
when"0001"=>dout<="0000110";
when"0010"=>dout<="1011011";
when"0011"=>dout<="1001111";
when"0100"=>dout<="1100110";
when"0101"=>dout<="1101101";
when"0110"=>dout<="1111101";
when"0111"=>dout<="0000111";
when"1000"=>dout<="1111111";
when"1001"=>dout<="1101111";
whenothers=>dout<="1000000";
endcase;
elsifsel="001"then
cases1is
when"0000"=>dout<="0111111";
when"0001"=>dout<="0000110";
when"0010"=>dout<="1011011";
when"0011"=>dout<="1001111";
when"0100"=>dout<="1100110";
when"0101"=>dout<="1101101";
whenothers=>dout<="1000000";
endcase;
elsifsel="000"then
cases2is
when"0000"=>dout<="0111111";
when"0001"=>dout<="0000110";
when"0010"=>dout<="1011011";
when"0011"=>dout<="1001111";
when"0100"=>dout<="1100110";
when"0101"=>dout<="1101101";
when"0110"=>dout<="1111101";
when"0111"=>dout<="0000111";
when"1000"=>dout<="1111111";
when"1001"=>dout<="1101111";
whenothers=>dout<="1000000";
endcase;
endif;
ifmd1='0'then---------------计不时刻显示和设置模式
h1<=hou1;h2<=hou2;
m1<=min1;m2<=min2;
s1<=sec1;s2<=sec2;
else-------------闹铃时刻显示和设置模式
h1<=seth1;h2<=seth2;
m1<=setm1;m2<=setm2;
s1<="1111";s2<="1111";
endif;
endprocessdisp;
------------------------------------------
end;
三、仿真结果
咱们将上述VHDL程序通过Max+PlusII进行编译仿真,仿真结果符合咱们设计所预想的功能。
仿真结果见以下图。
图1:
正常计时(md1=0,时钟模式)
(所指处,sel值为0,选通数码管秒个位,dout七段码输出sec2,即2)
图2:
分钟校正(md1=0,时钟模式)
(所指处,sel值为3,选通数码管分钟十位,dout七段码输出min1,即3)
图3:
小时校正(md1=0,时钟模式)
(所指处,sel值为4,选通数码管小时个位,dout七段码输出hou2,即8)
图4:
分钟按时(md1=1,闹钟模式)
(所指处,sel值为3,选通数码管分钟十位,dout七段码输出setm1,即2)
图5:
小时按时(md1=1,闹钟模式)
(所指处,sel值为4,选通数码管小时个位,dout七段码输出seth2,即6)
四、结论与收成
在整个设计进程中,通过查阅相关资料,咱们一步步成立了对EDA设计的明白得。
通过解决在编程、调试和仿真进程中的各类问题,也加深了咱们对软件设计环境的熟悉程度。
通过仿真,咱们也感性地熟悉到了曾经轻忽的问题,比如器件间信号传递的时延和产生毛刺会对电路功能实现的阻碍。
而最让咱们印象深刻的是一点是,在编程当中,尽管某些程序的结构取得的成效和软件仿真的结果是一致的,但在实际硬件实现是却会有专门大的不同。
而这一切,都让咱们获益良多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 数字 时钟 实验 报告