名称:数字秒表设计正计、倒计数跑表(代码在文末付费下载)
软件:Quartus,ModelSim
语言:Verilog HDL
代码功能:
《数字秒表设计》项目要求
(1)计时精度 1ms,计时范围 00:00.000~99:59.999,对应分:秒:毫秒,对应的液晶屏能完整显示。
(2)设置 S3 为复位键,S0 为启动/暂停键,控制秒表复位、启动/暂停;设置 S2 为功能选择键,可在正计数模式、倒计数设置模式、倒计数工作模式、计数值回看模式之间轮流切换。切换任意模式后,原来的计数值不会消失。
(3)正计数模式时,总是从 00:00.000 开始,设置 S3 为复位键,S0 为启动/暂停键,控制秒表复位、启动、暂停。每暂停一次,就计数一次,若计数次数已经满 10 次,则后一次的计数值依次覆盖前一次的计数值。
(4)倒计数设置模式时,S3/S0 键选择调整位置;S4/S1 键进行±调整,在合法值域内变动。每按一次 S0,跳动(待修改)的位就向左移动一位,每按一次 S3,跳动(待修改)的位就向右移动一位,每按一次 S1,对应位的数字减少 1 ,每按一次 S4 ,对应位的数字增加 1;
(5)倒计数工作模式时,设置 S3 为复位键,S0 为启动/暂停键,控制秒表复位、启动、暂停。每暂停一次,就计数一次,若计数次数已经满 10 次,则后一次的计数值依次覆盖前一次的计数值。
(6)计数值回看模式时,S3/S0 键进行前/后翻操作,查看每次的计数值,最多能记录 10 次计数值。
需要的内容
需要仿真:所提及的按键、开关均通过自定激励文件进行模拟;提及的显示均通过输出信号表达,对显示的数字除非特别说明,均为十进制数字;提及的指示灯亮灭均通过输出信号的高低电平对应 。
演示视频:
FPGA代码资源下载网:hdlcode.com
部分代码展示
module?top( input?clk_1KHz,//1ms input?S0,S1,S2,S3,S4, output??[7:0]?HEX0,//数码管-低亮 output??[7:0]?HEX1,//数码管-低亮 output??[7:0]?HEX2,//数码管-低亮 output??[7:0]?HEX3,//数码管-低亮 output??[7:0]?HEX4,//数码管-低亮 output??[7:0]?HEX5,//数码管-低亮 output??[7:0]?HEX6?//数码管-低亮 ); wire?store_en_1;//存储信号 wire?store_en_2;//存储信号 wire?[1:0]?mode; wire?[9:0]?Millisecond;//毫秒 wire?[7:0]?second;//秒 wire?[7:0]?minute;?//分 wire?[9:0]?Millisecond_set;//毫秒 wire?[7:0]?second_set;//秒 wire?[7:0]?minute_set;//分 wire?[9:0]?down_Millisecond;//毫秒 wire?[7:0]?down_second;//秒 wire?[7:0]?down_minute;?//分 wire?[9:0]?call_Millisecond;//回看毫秒 wire?[7:0]?call_second;//回看秒 wire?[7:0]?call_minute;?//回看分 //跑表模块 //正计数模式时,总是从?00:00.000?开始,设置?S3?为复位键,S0?为启动/暂停键,控制秒表复位、启动 //、暂停。每暂停一次,就计数一次,若计数次数已经满?10?次,则后一次的计数值依次覆盖前一次的计数值。 stopwatch?i_stopwatch( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?start_key(S0),//启动/暂停--S0 .?reset_key(S3),//复位--S3 .?store_en(store_en_1),//存储信号 .?Millisecond(Millisecond),//毫秒 .?second(second),//秒 .?minute(minute)?//分 ); //倒计数设置模式时 //S3/S0?键选择调整位置;S4/S1?键进行±调整,在合法值域内变动。 //每按一次?S0,跳动(待修改)的位就向左移动一位,每按一次?S3, //跳动(待修改)的位就向右移动一位,每按一次?S1,对应位的数字减少?1?, //每按一次?S4?,对应位的数字增加?1; set_time?i_set_time( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?S0(S0),//左移动一位 .?S1(S1),//数字减少?1 .?S3(S3),//右移动一位 .?S4(S4),//数字增加?1 //倒计时起始时间 .?Millisecond_set(Millisecond_set),//毫秒 .?second_set(second_set),//秒 .?minute_set(minute_set)?//分 ); //倒计数工作模式时 //倒计数工作模式时,设置?S3?为复位键,S0?为启动/暂停键,控制秒表复位、启动、暂停。 //每暂停一次,就计数一次,若计数次数已经满?10?次,则后一次的计数值依次覆盖前一次的计数值。 downtime?i_downtime( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?start_key(S0),//启动/暂停--S0 .?reset_key(S3),//复位--S3 //倒计时起始时间 .?Millisecond_set(Millisecond_set),//毫秒 .?second_set(second_set),//秒 .?minute_set(minute_set),//分 .?store_en(store_en_2),//存储信号 .?Millisecond(down_Millisecond),//毫秒 .?second(down_second),//秒 .?minute(down_minute)?//分 ); //回看模式 //计数值回看模式时,S3/S0?键进行前/后翻操作,查看每次的计数值,最多能记录?10?次计数值。 call_back?i_call_back( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?call_before(S3),//S3-前翻操作 .?call_later(S0),//S0--后翻操作 .?store_en(store_en_1?||?store_en_2),//存储信号 .?Millisecond(Millisecond),//毫秒 .?second(second),//秒 .?minute(minute),//分 .?down_Millisecond(down_Millisecond),//毫秒 .?down_second(down_second),//秒 .?down_minute(down_minute),//分 .?call_Millisecond(call_Millisecond),//回看毫秒 .?call_second(call_second),//回看秒 .?call_minute(call_minute)?//回看分 ); //显示模式 display?i_display( .?clk(clk_1KHz), .?S2(S2),//模式切换,在正计数模式、倒计数设置模式、倒计数工作模式、计数值回看模式之间轮流切换 .?mode(mode), ????//正计时 .?Millisecond(Millisecond),//毫秒 .?second(second),//秒 .?minute(minute),//分 ????//倒计时 .?down_Millisecond(down_Millisecond),//毫秒 .?down_second(down_second),//秒 .?down_minute(down_minute),//分 ???? ????//倒计时起始时间 .?Millisecond_set(Millisecond_set),//毫秒 .?second_set(second_set),//秒 .?minute_set(minute_set),//分 ???? ????//回看时间 .?call_Millisecond(call_Millisecond),//回看毫秒 .?call_second(call_second),//回看秒 .?call_minute(call_minute),//回看分 .?HEX0(HEX0),//数码管-低亮 .?HEX1(HEX1),//数码管-低亮 .?HEX2(HEX2),//数码管-低亮 .?HEX3(HEX3),//数码管-低亮 .?HEX4(HEX4),//数码管-低亮 .?HEX5(HEX5),//数码管-低亮 .?HEX6(HEX6)?//数码管-低亮 ); endmodule
设计文档:
1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图
整体仿真图

正计时模块


倒计时设置


倒计时计时


回看模块


显示模块


点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=198
867