VHDL数字时钟实验报告文档格式.docx
- 文档编号:22515695
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:34
- 大小:20.09KB
VHDL数字时钟实验报告文档格式.docx
《VHDL数字时钟实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《VHDL数字时钟实验报告文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
2.定义结构体中的信号量
signalsel:
std_logic_vector(2downto0);
signalhou1:
std_logic_vector(3downto0);
--时分秒的个位和十位
signalhou2:
signalmin1:
signalmin2:
signalseth1:
signalseth2:
signalsetm1:
signalsetm2:
signalsec1:
signalsec2:
signalh1:
signalh2:
signalm1:
signalm2:
signals1:
signals2:
signalsph1,sph2,spm1,spm2,sps1,sps2:
signalcount_sec:
std_logic_vector(9downto0);
signalsec_co:
std_logic;
signalco1,co2,co3,co4:
--进位
signalswitch:
std_logic_vector(1downto0);
--表示状态
3.分频模块
用来定义秒count_sec用来计时钟个数,当count_sec=1111111111时,及得到1Hz信号。
代码如下:
process(clk)is--defineasecond
begin
if(clk'
eventandclk='
1'
)then
if(count_sec="
1111111111"
count_sec<
="
0000000000"
;
sec_co<
='
else
=count_sec+'
sec_co<
0'
endif;
endif;
endprocess;
4.时钟正常走时模块
该模块使用6个进程实现,分别为秒个位计时、秒十位计时、分个位计时、分十位计时、时个位计时、时十位计时。
process(sec_co)is------------秒个位
ifswitch="
00"
then--正常状态
ifsec_co='
then
ifsec2="
1001"
sec2<
0000"
co1<
else
=sec2+'
elsifswitch="
01"
then--调时状态
sec2<
--------------------------------------------------
process(co1)is-------秒十位
ifco1'
eventandco1='
if(sec1="
0101"
sec1<
co2<
else
sec1<
=sec1+'
sec1<
-------------------------------------------------
process(co1,co2)is--------分钟个位
ifco2'
eventandco2='
ifmin2="
min2<
co3<
=min2+'
min2<
=setm2;
------------------------------------------------------
process(co3)is-----------分钟十位
ifco3='
ifmin1="
then
min1<
co4<
=min1+'
min1<
=setm1;
---------------------------------------------------------
process(co4)-------小时
ifco4='
if(hou1="
0010"
)then--小时十位为2时,个位满3进一
if(hou2="
0011"
hou2<
hou1<
else
=hou2+'
endif;
else--小时十位为0或1,个位满9进一
=hou1+'
hou2<
hou1<
=seth1;
hou2<
=seth2;
5.调时模块
该进程用来控制时钟状态,switch为“00”时正常显示时间,为“01”时是进行调时,
为“10”时是设置闹钟时间。
process(setclk(0))is
if(setclk(0)'
eventandsetclk(0)='
if(switch="
10"
switch<
=switch+'
process(setclk
(2),switch,setclk
(1))is
begin--setclk
(1)为1调分
if(switch="
andsetclk
(1)='
if(setclk
(2)'
eventandsetclk
(2)='
if(setm2="
setm2<
if(setm1="
setm1<
else
setm1<
=setm1+'
endif;
=setm2+'
begin--setclk
(1)为0调时
if(seth1="
if(seth2="
seth1<
seth2<
=seth2+'
=seth1+'
6.闹钟模块
该模块由3个小模块组成,分别为设置闹钟时间、判断闹钟时间是否到达以及闹铃声音模块。
(1)设置闹钟时间模块
该进程用于设置闹钟时间。
信号量switch为‘10‘时,表示设置闹钟时间;
)then--调闹钟时,显示闹钟设置时间
ifsel="
000"
d1<
casesph1is
when"
=>
dout<
11000000"
0001"
11111001"
when"
10100100"
whenothers=>
XXXXXXXX"
endcase;
elsifsel="
001"
d2<
casesph2is
10110000"
0100"
10011001"
10010010"
0110"
10000010"
0111"
11111000"
1000"
10000000"
10010000"
010"
d3<
casespm1is
whenothers=>
elsifsel="
011"
d4<
casespm2is
100"
d5<
casesps1is
101"
d6<
casesps2is
(2)闹铃声音模块
通过分频产生蜂鸣,即发出闹铃声音。
process(switch)is------闹铃
begin--设置闹铃时秒归零
ifswitch="
sps1<
sps2<
endprocess;
process(switch,setclk
(2),setclk
(1))is
begin
if(switch="
if(setclk
(2)'
if(spm2="
spm2<
if(spm1="
spm1<
else
=spm1+'
endif;
else
=spm2+'
endif;
process(switch,setclk
(2),setclk
(1))is
if(sph1="
if(sph2="
sph1<
sph2<
=sph2+'
=sph1+'
process(clk,sph1,sph2,spm1,spm2,hou1,hou2,min1,min2)is
begin
if(sph1=hou1andsph2=hou2andspm1=min1andspm2=min2)then
speak<
=clk;
7.数码管显示模块
(1)选择时间显示
process(key1,key2,change)
if(key1='
)and(key2='
sec_0<
=sec_00;
sec_1<
=sec_11;
min_0<
=min_00;
min_1<
=min_11;
hour_1<
=hour_11;
hour_0<
=hour_00;
elsif(key1='
=sec_000;
=sec_111;
=min_000;
=min_111;
=hour_000;
=hour_111;
=sec_0000;
=sec_1111;
=min_0000;
=min_1111;
=hour_0000;
=hour_1111;
(2)数码管时间显示
caseh1is
caseh2is
d3<
casem1is
casem2is
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 数字 时钟 实验 报告