数字跑表_verilog

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字跑表

1信号定义

输入:clk:时钟信号,50M;

clear:异步复位信号;

pause:暂停信号;

mode_select:模式选择。

输出:mode_out:模式输出

disp_ms_l_seg,disp_ms_h_seg:百分秒的高位和低位;

disp_sec_l_seg,disp_sec_h_seg:秒信号的高位和低位;

disp_min_l_seg,disp_min_h_seg:分钟信号的高位和低位;

disp_hour_l_seg,disp_hour_h_seg:时钟信号的高位和低位。

2 功能实现

1、显示0.01秒~1小时的秒表。

2、具有启动/停止按键pause和清零按键clear。

3、利用DE2开发板中提供的50MHz信号做为时钟信号。

4、计数结果在DE2中提供的数码管中显示。

5.计时时间在0.01秒~24小时范围内。

6.增加了一个功能按键mode_select,可以在单道和双道模式之间切换。

7.可以双道计时。

8.在双道模式显示时,可以切换两道的计时结果。

3 程序思路

输入为三个按键,分别为功能按键(mode_select)、启动停止按键(pause)和清零按键(clear);输出为八位数码管的时间显示,分别显示小时、分钟、秒和百分秒。

两个模式:单道模式(mode0)和双道模式(mode1)。

单道模式(mode0):按pause按键时,启动秒表计时,以后每按一次秒表就在启动和停止之间切换,同时数码管会显示计时器中的数值;当按下clear键时,计数器和显示都清零,并且停止计数。

双道模式(mode1):在单道模式(mode0)下按一次mode_select键就切换到双道模式(mode1)。在双道模式(mode1)下,第一次按pause按键时,启动秒表计时;第二次按pause按键时,其中一道结束计时,并把此时的时间按存储起来,同时秒表还在继续计时;第三次按pause按键时,秒表停止计时,并把此时的时间存储起来,表示另一道结束;以后每按一次pause按键数码管输出显示就在两道计时结果之间切换;按下clear键时计数器清零,数码管显示清零;此时按下mode_select键可以切换到单道模式(mode0)。

本程序将各个功能单元用不同的模块写出来,一共有7个模块,分别是顶层模块、分频模块、模式转换模块、按键处理模块、时间计数主模块(包括小时计

时模块、分钟计时模块、秒计时模块和百分秒计时模块)、单双道时间数据选择模块、时间显示数据选择模块和模式输出显示模块。

moduleDigital_stopwatch(clk_1000,SW1,SW2,SW3,

disp_ms_l,disp_ms_h,

disp_sec_l,disp_sec_h,

disp_min_l,disp_min_h,

disp_hour_l,disp_hour_h,

mode_out);

input clk_1000;

input SW1,SW2,SW3;

output mode_out;

output [3:0] disp_ms_l,disp_ms_h;

output [3:0] disp_sec_l,disp_sec_h;

output [3:0] disp_min_l,disp_min_h;

output [3:0] disp_hour_l,disp_hour_h;

wire SW1,SW2,SW3;

wire clk_1000;

wiretime_EN;

wire mode;

wire [3:0] ms_l,ms_h,sec_l,sec_h, min_l,min_h,hour_l,hour_h;

wire [3:0]ms_l_0,ms_h_0,sec_l_0,sec_h_0, min_l_0,min_h_0,hour_l_0,hour_h_0;

wire [3:0]ms_l_1,ms_h_1,sec_l_1,sec_h_1, min_l_1,min_h_1,hour_l_1,hour_h_1;

wire [3:0] disp_ms_l,disp_ms_h, disp_sec_l,disp_sec_h,

disp_min_l,disp_min_h, disp_hour_l,disp_hour_h;

wireflag_ds;

wire flag_st0;

wire flag_st1;

maincontrol m2(.SW1(SW1),.mode(mode));

SW_ctrlm3(.mode(mode),

.clr(SW3),.SW_2(SW2),.flag_st(time_EN),

.flag_ds(flag_ds),.flag_st0(flag_st0),.flag_st1(flag_st1));

time_counter_mainm4(.clk_1000(clk_1000),.clr(SW3),.time_EN(time_EN),

.ms_l(ms_l),.ms_h(ms_h),.sec_l(sec_l),.sec_h(sec_h),

.min_l(min_l),.min_h(min_h),.hour_l(hour_l),.hour_h(hour_h));

double m5(.mode(mode),.flag_st0(flag_st0),.flag_st1(flag_st1),

.ms_l(ms_l),.ms_h(ms_h),.sec_l(sec_l),.sec_h(sec_h),

.min_l(min_l),.min_h(min_h),.hour_l(hour_l),.hour_h(hour_h),

.ms_l_0(ms_l_0),.ms_h_0(ms_h_0),.sec_l_0(sec_l_0),.sec_h_0(sec_h_0),

相关文档
最新文档