提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 设计要求
  • 一、如何分频(即生成想要频率的时钟信号)?
  • 二、利用视觉暂留
  • 三、数码管显示数字原理
  • 四、设计流程
    • 1.所需端口以及变量定义
    • 2.产生频率为1的累计时钟信号
    • 3.秒、分、时 各个位数的累加
    • 4.产生数码管扫描时钟信号
    • 5.扫描时实现片选,以便利用视觉暂留
    • 6.显示数字(注意分隔点DP的点亮与否)
    • 补充:初始化数据,以便测试功能的完善
  • 五、板上实现
  • 总结

设计要求

用FPGA实现一个数字时钟——用veirlog语言


一、如何分频(即生成想要频率的时钟信号)?

  • 源时钟信号 clk 的频率为:f=50MHz
  • 假设想要得到时钟信号 clk_1 频率为:f1
  • 用一个寄存器变量 count 记录 clk 的 x 个时钟上升沿
  • 此时,clk 进行了 x 个周期
  • 令 clk_1 反转(即clk_1<=~clk_1),相当于 clk_1 进行了二分之一个周期
  • 所以可以得出: x=f/(2*f1)

二、利用视觉暂留

来自百科:物体在快速运动时, 当人眼所看到的影像消失后,人眼仍能继续保留其影像0.1-0.4秒左右的图像,这种现象被称为视觉暂留现象。是人眼具有的一种性质。人眼观看物体时,成像于视网膜上,并由视神经输入人脑,感觉到物体的像。但当物体移去时,视神经对物体的印象不会立即消失,而要延续0.1 -0.4秒的时间,人眼的这种性质被称为"眼睛的视觉暂留"。

也就是说,只要使FPGA上的六个数码管轮流亮起(并且同一个数码管亮起的时间间隔小于视觉暂留时间),就可以实现“动态”。


三、数码管显示数字原理

其中,高位到低位依次是:DP_G F E _D C B A, 共阴极数码管——输入为高电平亮!

下图为,共阴极数码管的编码表

共阴极数码管的编码表

四、设计流程

  1. 所需端口以及变量定义

    input clk;   //系统时钟频率50MHz
    output [5:0]wei;    //片选数码管
    output [7:0]duan;   //段选发光二极管
    reg[5:0]wei;
    reg[7:0]duan;integer count;  //计数实现1Hz的时钟clk_1hz
    reg clk_1hz;    //计时时钟
    integer count2; //计数实现扫描时钟clk_scan->利用视觉暂留实现动态
    reg clk_scan;  //扫描时钟
    reg [2:0]select;   //用于扫描时选择显示位码reg[3:0]sec_ge;     //秒的个位BCD码 0~9
    reg[2:0]sec_shi;    //秒的十位BCD码 0~5
    reg[3:0]min_ge;     //分的个位BCD码 0~9
    reg[2:0]min_shi;    //分的十位BCD码 0~5
    //reg[1:0]hour_ge;    //时的个位 0~3
    reg[3:0] hour_ge;   //时的十位 0~9  (也表达0~3)
    reg[1:0]hour_shi;   //时的十位 0~2
  2. 产生频率为1的累计时钟信号
    //生成1Hz的时钟clk_1hz
    always@(posedge clk)
    beginif(count==25000000)begincount<=0;clk_1hz<=~clk_1hz;endelsecount<=count+1'b1;
    end    
  3. 秒、分、时 各个位数的累加

    用Draw.io画的秒时分各位累加流程图
    //秒、分、时 各个位数的累加
    always @(posedge clk_1hz)//秒分时各位累加功能进程
    beginif(sec_ge==4'b1001)   //秒的个位等于9beginsec_ge<=4'b0000;if(sec_shi==3'b101)  //秒的十位等于5beginsec_shi<=3'b000;if(min_ge==4'b1001)    //分的个位等于9beginmin_ge<=4'b0000;if(min_shi==3'b101)     //分的十位等于5beginmin_shi<=3'b000;if(hour_shi==2'b00)     //时的十位等于0beginif(hour_ge==4'b1001)       //时的个位等于9beginhour_ge<=0;hour_shi<=hour_shi+1'b1;endelse hour_ge<=hour_ge+1'b1;                                  endelseif(hour_shi==2'b01)     //判断 时的十位等于1beginif(hour_ge==4'b1001)       //判断 时的十位等于9beginhour_ge<=0;hour_shi<=hour_shi+1'b1;endendelse    //时的十位不等于0,也不等于1, 即等于2if(hour_ge==4'b0011)        //判断 时的个位等于3beginhour_ge<=0;hour_shi<=0;endelsehour_ge<=hour_ge+1'b1;endelsemin_shi<=min_shi+1'b1;endelsemin_ge<=min_ge+1'b1;endelsesec_shi<=sec_shi+1'b1;endelsesec_ge<=sec_ge+1'b1;
    end
  4. 产生数码管扫描时钟信号
    //产生数码管扫描时钟
    always @(posedge clk)
    beginif(count2==10000)//if(count2==25000000) //测试视觉暂留begincount2<=0;clk_scan<=~clk_scan;endelsecount2<=count2+1;
    end
  5. 扫描时实现片选,以便利用视觉暂留
    //扫描时实现片选   视觉暂留
    always @(posedge clk_scan)begin if(select==3'b110)select<=3'b000;elseselect<=select+1'b1;end
  6. 显示数字(注意分隔点DP的点亮与否)
    //显示数字
    always @(sec_ge or sec_shi or min_ge or min_shi or hour_ge or hour_shi or select)//敏感信号列表begin if(select==3'b001)beginwei<=6'b111110;//秒个位数显示      不显示点case(sec_ge)4'b0000:begin duan<=8'b0_011_1111;end     // 显示04'b0001:begin duan<=8'b0_000_0110;end     // 显示14'b0010:begin duan<=8'b0_101_1011;end     // 显示24'b0011:begin duan<=8'b0_100_1111;end     // 显示34'b0100:begin duan<=8'b0_110_0110;end     // 显示44'b0101:begin duan<=8'b0_110_1101;end     // 显示54'b0110:begin duan<=8'b0_111_1101;end     // 显示64'b0111:begin duan<=8'b0_000_0111;end     // 显示74'b1000:begin duan<=8'b0_111_1111;end     // 显示84'b1001:begin duan<=8'b0_110_1111;end     // 显示9default duan<=8'bx;endcaseendelse if(select==3'b010)beginwei<=6'b111101;//秒十位数显示      不显示点case(sec_shi)3'b000:duan<=8'b0_011_1111;     // 显示03'b001:duan<=8'b0_000_0110;     // 显示13'b010:duan<=8'b0_101_1011;     // 显示23'b011:duan<=8'b0_100_1111;     // 显示33'b100:duan<=8'b0_110_0110;     // 显示43'b101:duan<=8'b0_110_1101;     // 显示5//3'b110:duan<=8'b1111_1101;     // 显示6default duan<=8'bx;endcaseendelse if(select==3'b011)beginwei<=6'b111011;//分钟个位数显示数字   显示点case(min_ge)4'b0000:begin duan<=8'b1_011_1111;end     // 显示04'b0001:begin duan<=8'b1_000_0110;end     // 显示14'b0010:begin duan<=8'b1_101_1011;end     // 显示24'b0011:begin duan<=8'b1_100_1111;end     // 显示34'b0100:begin duan<=8'b1_110_0110;end     // 显示44'b0101:begin duan<=8'b1_110_1101;end     // 显示54'b0110:begin duan<=8'b1_111_1101;end     // 显示64'b0111:begin duan<=8'b1_000_0111;end     // 显示74'b1000:begin duan<=8'b1_111_1111;end     // 显示84'b1001:begin duan<=8'b1_110_1111;end     // 显示9default duan<=8'bx;endcaseendelse if(select==3'b100)beginwei<=6'b110111;//分钟十位数显示     不显示点case(min_shi)3'b000:duan<=8'b0_011_1111;     // 显示03'b001:duan<=8'b0_000_0110;     // 显示13'b010:duan<=8'b0_101_1011;     // 显示23'b011:duan<=8'b0_100_1111;     // 显示33'b100:duan<=8'b0_110_0110;     // 显示43'b101:duan<=8'b0_110_1101;     // 显示5//3'b110:duan<=8'b1111_1101;     // 显示6default duan<=8'bx;endcaseendelse if(select==3'b101)beginwei<=6'b101111;//时钟个位数显示     显示点case(hour_ge)4'b0000:begin duan<=8'b1_011_1111;end     // 显示04'b0001:begin duan<=8'b1_000_0110;end     // 显示14'b0010:begin duan<=8'b1_101_1011;end     // 显示24'b0011:begin duan<=8'b1_100_1111;end     // 显示34'b0100:begin duan<=8'b1_110_0110;end     // 显示44'b0101:begin duan<=8'b1_110_1101;end     // 显示54'b0110:begin duan<=8'b1_111_1101;end     // 显示64'b0111:begin duan<=8'b1_000_0111;end     // 显示74'b1000:begin duan<=8'b1_111_1111;end     // 显示84'b1001:begin duan<=8'b1_110_1111;end     // 显示9default duan<=8'bx;endcaseendelse beginwei<=6'b011111;//时钟十位数显示     不显示点case(hour_shi)3'b000:duan<=8'b0_011_1111;     // 显示03'b001:duan<=8'b0_000_0110;     // 显示13'b010:duan<=8'b0_101_1011;     // 显示2default duan<=8'bx;endcaseend
    end

五、板上实现


补充:初始化数据——测试功能是否完善

//初始化:从 23 :59 :54 开始计时,测试功能
initial
beginhour_shi<=2;hour_ge<=3;min_shi<=5;min_ge<=9;sec_shi<=5;sec_ge<=4;
end

总结

数字时钟——FPGA相关推荐

  1. OLED数字时钟---FPGA实现

    一. 硬件 FPGA开发版 4个按键 0.96寸 IIC接口的oled显示模块 二. 功能介绍 oled初始化 oled清屏 oled数字时钟显示 oled字符显示 三. 效果演示 关注 微信公众号 ...

  2. 状态机实现数字时钟 fpga

    目录 原理 实现 原理 数字时钟:我这里实现的是数码管显示,外加设置时间功能和闹钟功能,闹钟就是蜂鸣器,没有其他的功能. 状态机:这里就不具体介绍了,上一篇已经介绍过了. 实现 设计: 1)按键消抖模 ...

  3. 基于FPGA的数字时钟的设计课设(HUAT)

    目录 前言 一.数字时钟课设目标 二.部分代码 1.clock.v代码的编写 2.完整代码 3.仿真代码 总结 前言 学校黄老师的FPGA的设计课设,最后的课设为数字时钟,实现分时的计数功能,带有整点 ...

  4. 基于FPGA的数字时钟设计

    基于FPGA的数字时钟设计 芯片与开发板 技术指标 1.具有正常的日时分秒技术显示功能,用七个数码管分别显示日,时,分,秒. 2.有按键校日,校时,校分,校秒. 3.利用led模拟整点报时功能. 4. ...

  5. 基于FPGA数字时钟的设计(附源码)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注"FPGA技术江湖"微信公众号,在"闯荡江湖"."行侠仗义"栏里获取其 ...

  6. FPGA芯片结构(可编程输入输出单元IOB/可配置逻辑块CLB/数字时钟管理模块DCM/ 嵌入式块RAM(BRAM)/丰富的布线资源/ 底层内嵌功能单元/内嵌专用硬核)

    目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM.时钟管理 和DSP)的硬核(ASIC型)模块.如图1-1所示(注:图1-1只是一个示意图,实际上 ...

  7. FPGA数字时钟(可暂停调数,含代码)

    前言 前段时间刚刚开始初步学习FPGA相关知识,在学习了一段时间后,利用前面所学知识,写了一个数字时钟,顺便在这里写下总结,方便理解. (本人小白一名,有错欢迎指出,欢迎探讨) (我使用的开发板是Cy ...

  8. 基于FPGA的遥控数字时钟设计

    基于FPGA的遥控数字时钟设计报告 ​ ​ Author:张宏宇 摘要 ​ 数字时钟是一种通过数字显示时间的计时装置,本次项目采用Cyclone Ⅳ系列芯片,使用QuartusII开发环境,使用Ver ...

  9. FPGA期末项目 | 数字时钟

    戳这里下载整个项目包(已上传到CSDN资源库) 一.实验设备 FPGA开发平台.计算机.其它外接器件 二.需求分析(选题的意义.功能要求等...这里有点水,小伙伴们可以选择性跳过) 选题的意义:个人认 ...

  10. FPGA初学记录——数字时钟系统搭建(上)

    FPGA初学记录--数字时钟系统搭建(上) 野火征途Pro开发板教程--数码管动态展示拓展训练,数字时钟系统搭建 文章目录 FPGA初学记录--数字时钟系统搭建(上) 前言 一.问题简述 二.功能解析 ...

最新文章

  1. 最新全球自由职业技能单日排行
  2. 【图像处理opencv】_Jupyter 更改文件默认保存目录
  3. 问:一行Python代码到底能干多少事情?(三)
  4. ASP.NET Eval如何进行数据绑定
  5. notepad比对文本_仵航说 notepad++怎么对比文件 仵老大
  6. 安装cloudermanager时出现Acquiring installation lock问题(图文详解)
  7. matlab给0数组赋值,MATLAB中怎么把一个函数的一部分赋值给一个变量或数组,比如怎么把sin(x)大于0的部分赋值给f....
  8. 160 - 24 Chafe.2
  9. 总结阐述Cocos2d-X与Cocos2d-iphone区别
  10. mysql根据行数排序_mysql指定某行或者某列的排序
  11. 十大排序算法——二分插入排序法(C语言)
  12. python --opencv图像处理Canny算子边缘检测(Roberts算子、Prewitt算子、Sobel算子、Laplacian算子、Scharr 算子、 LOG 算子)
  13. MySQL 数据库扩容方案
  14. 三区三线划定-永久基本农田
  15. iOS苹果内购(详细步骤)
  16. Python 玩转数据 19 - 数据操作 正则表达式 Regular Expressions 搜索模式匹配
  17. HZNU 与班尼特·胡迪一起攻破浮空城 【DP】
  18. p106矿渣做深度学习踩过的那些坑
  19. C语言解题——从今天开始入坑C语言
  20. 支撑 100Gbit/s K8s 集群的未来网络数据平面

热门文章

  1. 3D打印:FDM打印湿度对打印件及打印机的影响和调整
  2. php 厘米转为英寸,将cm换算为in (厘米换算为英寸)
  3. Windows7 删除双系统引导中的一个
  4. spring boot整合第三方微信开发工具 weixin-java-miniapp 实现小程序微信登录
  5. 学习笔记(26):玩转Python-Python3基础入门-案例-快递价格计算器(1)
  6. 【keil5】pwm驱动步进电机
  7. 【概念学习】联邦学习的三个类别+【论文阅读】异步联邦学习
  8. 【Python】使用python 画出一张机器猫doraemon
  9. Linux驱动面试总结
  10. wps怎么把边框加粗_怎么设置WPS表格边框线加粗 - 卡饭网