FPGA闹钟代码Verilog.docx

上传人:b****8 文档编号:27733327 上传时间:2023-07-04 格式:DOCX 页数:7 大小:15.57KB
下载 相关 举报
FPGA闹钟代码Verilog.docx_第1页
第1页 / 共7页
FPGA闹钟代码Verilog.docx_第2页
第2页 / 共7页
FPGA闹钟代码Verilog.docx_第3页
第3页 / 共7页
FPGA闹钟代码Verilog.docx_第4页
第4页 / 共7页
FPGA闹钟代码Verilog.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

FPGA闹钟代码Verilog.docx

《FPGA闹钟代码Verilog.docx》由会员分享,可在线阅读,更多相关《FPGA闹钟代码Verilog.docx(7页珍藏版)》请在冰豆网上搜索。

FPGA闹钟代码Verilog.docx

FPGA闹钟代码Verilog

闹表使用说明

一、闹表基本功能

è可设置时间

è可设置闹铃

二、功能与接口

è可设置闹表功能与接口

è平时时、分、秒依次自加一跳变;

è设置时间时,可独立控制小时或者分钟自加一跳变;

è设置闹铃时,可独立控制小时或者分钟自加一跳变;

è需要有时钟驱动;

è需要有LED显示;

è需要闹表开关、设置小时开关、设置分钟开关;

三、功能及控制键(输入)

èSW17为SET_TIME用于设置时间(上端设置);

èSW16为ALARM用于设置闹表时间(上端设置);

èSW0为TOGGLE_SWITCH闹表开关(上端打开);

èKEY1为HRS设置小时(按一次加一个值);

èKEY0为MIN设置分钟(按一次加一个值);

è时钟(CLK_50)接入50M时钟;

四、功能及控制键(输出)

èDISP1显示小时,连接到HEX3、HEX2;

èDISP2显示分钟,连接到HEX1、HEX0;

èAM_PM_DISPLAY显示上/下午,连接到LEDG8;

èSPEAKER闹铃,连接到LEDR17;

五、解决方案

1.总体模块划分

2.各模块实现

1)计数模块(显示模块)

DE-2提供了50MHZ钟,本实验需要的1s加1的跳变,所以需要将时钟进行分频为1HZ的时钟来达到计数的要求。

代码清单:

always@(posedgeCLK_50)

begin

if(count<25000000)

begin

count<=count+1'b1;

end

else

begin

count<=1'b0;

clk_odd<=~clk_odd;

end

end

完成时钟分频以后,将得到的1HZ的时钟输入到

计数模块,实现上述要求。

代码清单:

always@(posedgeclk_odd)

begin

if(!

RESET)//ifreset,clearallthedata

begin

second<=0;

minute<=0;

hour<=0;

end

elseif(RESET)//ifthereisnoreset

begin

if(!

SET_TIME)//ifyoudonotsettime

begin

if(second>=0&&second<59)

begin

second<=second+1;

end

elseif(second==59&&minute<59)//second

begin

minute<=minute+1;

second<=0;

end

elseif(minute==59&&second==59&&hour<23)//minute

begin

hour<=hour+1;

minute<=0;

end

elseif(hour==23&&minute==59&&second==59)//hour

hour<=0;

end

elseif(SET_TIME)//whenyousettime,thedatacanbesentto'hour'and'minute'

begin

hour<=hour_set_time;

minute<=minute_set_time;

end

end

if(!

ALARM)

begin

HEX5<=Seg(high_hur);

HEX4<=Seg(low_hur);

HEX3<=Seg(high_min);

HEX2<=Seg(low_min);

HEX1<=Seg(high_sec);

HEX0<=Seg(low_sec);

end

elseif(ALARM)

begin

HEX5<=Seg(alarm_high_hur);

HEX4<=Seg(alarm_low_hur);

HEX3<=Seg(alarm_high_min);

HEX2<=Seg(alarm_low_min);

HEX1<=7'b11111_111;

HEX0<=7'b11111_111;

end

end

本模块问题:

起初对模块划分认识不清即下手写程序,导致显示模块被集成到了计数模块。

2)校对模块

原理:

在计数模块中通过将SW17键推到上部来使能校对功能。

通过对KEY1键的操作(检测该键的上升沿)来达到调小时的功能;通过对KEY0键的操作(检测该键的上升沿)来达到调分钟的功能。

通过上述操作将在时钟的激励下将设定的时间数据传入计数模块,达到设置时间的目的。

代码清单:

moduleset_time(SET_TIME,HRS,MIN,minute,hour);

inputSET_TIME;//usedtosettheclock's//time,theclockcanbesetted//whentheSWturnedon

inputHRS;//thekeytochanghour

inputMIN;//thekeytochangminute

output[7:

0]minute,hour;

reg[7:

0]minute,hour;

always@(posedgeHRS)//whenSET_TIME=1,//pressHRStocountthe//hour

begin

if(SET_TIME)

begin

if(hour>=0&&hour<23)

hour=hour+1;

else

hour=0;

end

end

always@(posedgeMIN)//whenSET_TIME=1,//pressHRStocount//theminute

begin

if(SET_TIME)

begin

if(minute>=0&&minute<59)

minute=minute+1;

else

minute=0;

end

end

endmodule

3)闹钟模块

闹钟模块的设计类似校对模块。

不同之处是在于设计闹钟模块的时候通过将SW16推到上部来达到是能的目的。

然后将得到的数据与计数模块的时间进行比较,如果相等,并且闹表使用SW0被推到了上部,即可以实现闹表功能。

代码清单:

moduleset_alarm(HRS,MIN,ALARM,minute,hour);

inputHRS;

inputMIN;

inputALARM;//onceALARMisswithedon,thealarmtimecanbesetted

output[7:

0]hour;

output[7:

0]minute;

reg[7:

0]hour;

reg[7:

0]minute;

always@(posedgeHRS)

begin

if(ALARM)

begin

if(hour>=0&&hour<23)

hour=hour+1;

else

hour=0;

end

end

always@(posedgeMIN)

begin

if(ALARM)

begin

if(minute>=0&&minute<59)

minute=minute+1;

else

minute=0;

end

end

endmodule

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1