VHDL数字时钟实验报告Word文件下载.docx
- 文档编号:18778507
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:29
- 大小:19.14KB
VHDL数字时钟实验报告Word文件下载.docx
《VHDL数字时钟实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《VHDL数字时钟实验报告Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。
d1,d2,d3,d4,d5,d6:
outstd_logic);
---六个晶体管
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+'
0'
endif;
endprocess;
4.时钟正常走时模块
该模块使用6个进程实现,分别为秒个位计时、秒十位计时、分个位计时、分十位计时、时个位计时、时十位计时。
process(sec_co)is------------秒个位
ifswitch="
00"
then--正常状态
ifsec_co='
then
ifsec2="
1001"
sec2<
0000"
co1<
=sec2+'
elsifswitch="
01"
then--调时状态
--------------------------------------------------
process(co1)is-------秒十位
ifco1'
eventandco1='
if(sec1="
0101"
sec1<
co2<
=sec1+'
-------------------------------------------------
process(co1,co2)is--------分钟个位
ifco2'
eventandco2='
ifmin2="
min2<
co3<
=min2+'
=setm2;
------------------------------------------------------
process(co3)is-----------分钟十位
ifco3='
ifmin1="
min1<
co4<
=min1+'
=setm1;
---------------------------------------------------------
process(co4)-------小时
ifco4='
if(hou1="
0010"
)then--小时十位为2时,个位满3进一
if(hou2="
0011"
hou2<
hou1<
=hou2+'
else--小时十位为0或1,个位满9进一
=hou1+'
=seth1;
=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调分
andsetclk
(1)='
if(setclk
(2)'
eventandsetclk
(2)='
if(setm2="
setm2<
if(setm1="
setm1<
=setm1+'
=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"
10100100"
whenothers=>
XXXXXXXX"
endcase;
elsifsel="
001"
d2<
casesph2is
10110000"
0100"
10011001"
10010010"
0110"
10000010"
0111"
11111000"
1000"
10000000"
10010000"
010"
d3<
casespm1is
011"
d4<
casespm2is
100"
d5<
casesps1is
101"
d6<
casesps2is
(2)闹铃声音模块
通过分频产生蜂鸣,即发出闹铃声音。
process(switch)is------闹铃
begin--设置闹铃时秒归零
sps1<
sps2<
process(switch,setclk
(2),setclk
(1))is
if(spm2="
spm2<
if(spm1="
spm1<
=spm1+'
=spm2+'
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
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
casem1is
casem2is
cases1is
cases2is
when
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 数字 时钟 实验 报告