• 思路
  • CODE
  • 顶层CODE

思路

将时间拆分为6个参数:

        second_1  -> 秒个位second_10 -> 秒十位minute_1  -> 分个位minute_10 -> 分十位hour_1;   -> 时个位hour_10;  -> 时十位

在异步复位的时候为上述六个参数赋初始值。
然后对50Mhz系统时钟进行计数,计数50M次(即为1s)。然后对六个参数的当前值做出判断,并在下一个clk做出改变。

当计满一秒,且秒的个位大于0时,——》秒的个位减1
当计满一秒,且秒的个位等于0,秒的十位大于0时,——》秒的十位减1,秒的个位变9
当计满一秒,且秒为00,并且分的个位大于0时,——》分的个位减1,秒由00变为59
当计满一秒,且秒为00,并且分的个位等于0,分的十位大于0时,——》分的十位减1,个位变为9,秒由00变为59
当计满一秒,且秒为00,分也为00,时的个位大于0时,——》时的个位减1,分由00变为59,秒也由00变为59
当计满一秒,且秒为00,分也为00,时的个位等于0,时的十位大于0时,——》时的十位减1,个位变9,分由00变为59,秒也由00变为59
当计满一秒,且时分秒为:00 00 00时,——》还原为预设值

仅当【suspend】状态值为1的时候才会对50Mhz系统时钟进行计数,为0时暂停计数,这样就实现了计数器的暂停。

CODE

module down_cnt(clk,rst,suspend,second_1,second_10,minute_1,minute_10,hour_1,hour_10
);input clk;input rst;input suspend; //当suspend为状态量,为0时计时暂停,为1时计时继续。output reg [3:0] second_1; //秒个位output reg [2:0] second_10;//秒十位output reg [3:0] minute_1; //分个位output reg [2:0] minute_10;//分十位output reg [3:0] hour_1;   //时个位output reg [1:0] hour_10;  //时十位reg [31:0] cnt;//50M -> 1s (50M时钟进行50M次计数得到一秒,)always@(posedge clk or negedge rst)beginif(!rst)//复位时设置倒计时初始值begincnt <= 32'd0;second_1 <= 4'd0;second_10 <= 3'd0;minute_1 <= 4'd1;minute_10 <= 3'd0;hour_1 <= 4'd0;hour_10 <= 2'd0;end  //当计满一秒,且秒的个位大于0时,——》秒的个位减1else if(cnt == 32'd5000_0000 && second_1>4'd0)beginsecond_1 <= second_1 - 4'd1;cnt <= 32'd0;end//当计满一秒,且秒的个位等于0,秒的十位大于0时,——》秒的十位减1,秒的个位变9else if(cnt == 32'd5000_0000 && second_1==4'd0 && second_10>3'd0 )beginsecond_10 <= second_10 - 3'd1;second_1 <= 4'd9;cnt <= 32'd0;end//当计满一秒,且秒为00,并且分的个位大于0时,——》分的个位减1,秒由00变为59else if(cnt == 32'd5000_0000 && second_1==4'd0 && second_10==3'd0 && minute_1>4'd0 )beginminute_1 <= minute_1 - 4'd1;    second_10 <= 3'd5;second_1 <= 4'd9;cnt <= 32'd0;end//当计满一秒,且秒为00,并且分的个位等于0,分的十位大于0时,——》分的十位减1,个位变为9,秒由00变为59else if(cnt == 32'd5000_0000 && second_1==4'd0 && second_10==3'd0 && minute_1==4'd0 && minute_10 > 3'd0)beginminute_10 <= minute_10 - 3'd1;minute_1 <= 4'd9;second_10 <= 3'd5;second_1 <= 4'd9;cnt <= 32'd0;end//当计满一秒,且秒为00,分也为00,时的个位大于0时,——》时的个位减1,分由00变为59,秒也由00变为59else if(cnt == 32'd5000_0000 && second_1==4'd0 && second_10==3'd0 && minute_1==4'd0 && minute_10 ==3'd0 && hour_1 >4'd0)beginhour_1 <= hour_1 - 4'd1;minute_10 <= 3'd5;minute_1 <= 4'd9;second_10 <= 3'd5;second_1 <= 4'd9;cnt <= 32'd0;end//当计满一秒,且秒为00,分也为00,时的个位等于0,时的十位大于0时,——》时的十位减1,个位变9,分由00变为59,秒也由00变为59else if(cnt == 32'd5000_0000 && second_1==4'd0 && second_10==3'd0&& minute_1==4'd0 && minute_10 ==3'd0 && hour_1 == 4'd0 && hour_10 > 2'd0 && hour_10< 2'd2 )beginhour_10 <= hour_10 - 2'd1;hour_1 <= 4'd9;minute_10 <= 3'd5;minute_1 <= 4'd9;second_10 <= 3'd5;second_1 <= 4'd9;cnt <= 32'd0;end//当计满一秒,且时分秒为:00 00 00时,——》还原为预设值else if(cnt == 32'd5000_0000 && second_1==4'd0 && second_10==3'd0 && minute_1==4'd0 && minute_10 ==3'd0 && hour_1 == 4'd0 && hour_10 == 2'd0 )beginhour_10 <= 2'd0;hour_1 <= 4'd0;minute_10 <= 3'd0;minute_1 <= 4'd0;second_10 <= 3'd0;second_1 <= 4'd0;cnt <= 32'd0;end                       else if(suspend == 1'b1)begincnt <= cnt + 32'd1;endelsebegincnt <= cnt;endend
endmodule

顶层CODE

使用六个数码管来显示六个时间参数,下为顶层文件。(数码管的驱动见:链接)

module top(clk,rst,dig,suspend,dict);input clk;input rst;input suspend;output  [5:0] dig;  //六个数码管片选output  [7:0] dict; //动态数码管段选wire [23:0] set_data;//数码管显示的内容:4bit*6 down_cnt f1(.clk(clk),.rst(rst),.suspend(suspend),.second_1(set_data[3:0]),.second_10(set_data[7:4]),.minute_1(set_data[11:8]),.minute_10(set_data[15:12]),.hour_1(set_data[19:16]),.hour_10(set_data[23:20])
);dig8_6 f2(.clk(clk),.rst(rst),.set_data(set_data),.dig(dig), .dict(dict));endmodule

【verilog】 FPGA倒计时器设计相关推荐

  1. 基于at89c51单片机的led数字倒计时器设计c语言,课程设计(论文)-基于AT89C51单片机的LED数字倒计时器设计.docx...

    单片机原理及其应用课程设计 课 题: 基于AT89C51单片机的LED数字倒计时器设计专 业: 电工程及其自动化班 级: 2013 级 4班学 号: 姓 名: 设计日期: 2015年6月6日--201 ...

  2. 基于at89c51单片机的led数字倒计时器设计c语言,课程设计(论文)-基于AT89C51单片机的LED数字倒计时器设计精选.docx...

    课程设计(论文)-基于AT89C51单片机的LED数字倒计时器设计精选 单片机原理及其应用课程设计课题:基于AT89C51单片机的LED数字倒计时器设计专业:电工程及其自动化班级: 2013 级4班学 ...

  3. 基于at89c51单片机的led数字倒计时器设计c语言,at89c51单片机led数字倒计时器课程设计论文-本科毕业设计.doc...

    课 题: AT89C51单片机LED数字倒计时器 专 业: 班 级: 学 号: 姓 名: 指导教师: 设计日期: 成 绩: 重庆大学城市科技学院电气学院 目录 一.设计目的作用1 二.设计要求1 三. ...

  4. 基于at89c51单片机的led数字倒计时器设计c语言,基于AT89C51单片机的LED数字倒计时器设计1.docx...

    基于AT89C51单片机的LED数字倒计时器设计1 单片机原理及其应用课程设计课 题: 基于AT89C51单片机的LED数字倒计时器设计专 业: 电工程及其自动化班 级: 2013 级 4班学 号: ...

  5. Android课程设计倒计时app,单片机课程设计-可调倒计时器.doc

    PAGE PAGE 2 课 程 设 计 设计名称 单片机可调倒计时器 全套设计加扣?3012250582 学年学期 2013 -2014学年第 二 学期 课程名称 单片机原理及应用 专业年级 电气11 ...

  6. c语言 不用锁存器 数码管倒计时,倒计时器课程设计.doc

    倒计时器课程设计精选 河南机电高等专科学校 课程设计报告书 课程名称: 单片机原理及系统设计 课题名称: 倒计时器课程设计 专 业: 计算机控制技术 班 级: 学 号: 姓 名: 成 绩: 2013 ...

  7. VHDL:24秒倒计时器的设计(代码完整,结构清晰,很容易看懂)

    要求: 1.分频器的设计与实现. 输入为4Hz的时钟,输出为1Hz的时钟. 2.设计24秒倒计时器. (1)输入为固定频率脉冲.使能端.复位端,输出为计时状态(用8421码表示). (2)用VHDL编 ...

  8. c语言编写拆字程序,倒计时器 单机课程设计.doc

    倒计时器 单机课程设计 <单片机原理及应用>课程设计任务书 二级学院电子信息与电气工程学院 专业:班级: 学生姓名指导老师职 称讲师 课题名称 课题工作内容1. 设计内容:硬件电路的设计. ...

  9. FPGA实现计时器功能(黑金开发平台)

    基于黑金开发平台FPGA实现计时器 这学期我们开设了DSP实验这门课,主要目的是使用开发平台(本校使用黑金动力社区基于飓风IV的初级产品)进行数字信号处理,当然在课程的开始,熟悉开发板的使用方式以及v ...

最新文章

  1. 【组队学习】【24期】零基础入门语音识别(食物声音识别)
  2. 创业者:创业要疯狂融资要理性
  3. Oracle Index
  4. STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送
  5. [yii2] 实现所有action方法之前执行一段代码或者方法
  6. laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档
  7. React开发(201):react代码分割之打包导出
  8. Oracle 数据库监听配置
  9. 1024 程序员节:给 DBA 们的福音
  10. python字典合并_Python中如何实现两个字典合并
  11. c语言输入数字字母个数字是什么意思,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  12. 分表扩展全局序列实际操作_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0026
  13. 抗住百万人直播、被联合国推荐,起底飞书技术演进之路!
  14. uva 11892 - ENimEN(推理)
  15. ansible自动运维
  16. 信息与通信工程专业知识点预览(复试必看)
  17. [论文学习]Learn to Dance with AIST++: Music Conditioned 3D Dance Generation
  18. 北航、商汤、UCSD 提出首个点云二值网络 BiPointNet(ICLR2021)
  19. Volatility FAQ
  20. 如何修改桌面的存放路径?(将桌面放到D盘或E盘)

热门文章

  1. 第一个项目:D触发器,DFRB1C。
  2. 线程的两种实现,为什么使用runnable接口的居多
  3. #智能制造#第一章 智能制造,缘何而起?
  4. 20秋PHP作业1,南开17秋学期(清考)《电子商务理论与实践》在线作业1
  5. UI设计师为什么要学习字体设计?
  6. 已知每个部门有一个经理,统计输出部门名称、部门总人数、 总工资和部门经理。
  7. CMYK色彩印刷原理
  8. 每周分享第 36 期
  9. 笔记本电脑很久没用键盘不灵解决方案
  10. 牛客网练习,某公司2017秋招。叫车 2017年