在编电子表时发现FPGA求余,取模只能针对2的次方。毕竟是数字的嘛!

时钟用到了动态刷新数码管。以一个大于50Hz的速度刷新每一个数码管。

因为数码管只有四个,只写了分针和秒针。

代码如下:

  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.STD_LOGIC_ARITH.ALL;
  4. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5.  
  6. entity clock is
  7. Port ( clk : in STD_LOGIC;
  8. seg : out STD_LOGIC_VECTOR ( downto );
  9. an : out STD_LOGIC_VECTOR ( downto ));
  10. end clock;
  11.  
  12. architecture Behavioral of clock is
  13. signal num:STD_LOGIC_VECTOR ( downto );
  14. signal min_h:STD_LOGIC_VECTOR ( downto );
  15. signal min_l:STD_LOGIC_VECTOR ( downto );
  16. signal second_h:STD_LOGIC_VECTOR ( downto );
  17. signal second_l:STD_LOGIC_VECTOR ( downto );
  18. signal an_sel:STD_LOGIC_VECTOR ( downto );
  19. signal cnt: INTEGER;
  20. signal cnt2: INTEGER;
  21. signal sclk: STD_LOGIC;
  22. constant a:integer :=;
  23. begin
  24. process(clk)
  25. begin
  26. if(clk'event and clk='') then
  27. if(cnt=) then
  28. cnt<=;
  29. sclk<=not sclk;
  30. else
  31. cnt<=cnt+;
  32. end if;
  33. end if;
  34. end process;
  35.  
  36. process(clk)
  37. begin
  38. if(clk'event and clk='') then
  39. if(cnt2=) then
  40. cnt2<=;
  41. if(an_sel="") then
  42. an_sel<="";
  43. else
  44. an_sel<=an_sel+'';
  45. end if;
  46. else
  47. cnt2<=cnt2+;
  48. end if;
  49. end if;
  50. end process;
  51.  
  52. process(sclk)
  53. begin
  54. if(sclk'event and sclk='') then
  55. if(second_h="" and second_l="") then
  56. second_h<="";
  57. second_l<="";
  58. min_l<=min_l+'';
  59. if(min_h="" and min_l="") then
  60. min_h<="";
  61. min_l<="";
  62. elsif(min_l="") then
  63. min_h<=min_h+'';
  64. min_l<="";
  65. end if;
  66. elsif(second_l="") then
  67. second_h<=second_h+'';
  68. second_l<="";
  69. else
  70. second_l<=second_l+'';
  71. end if;
  72. end if;
  73. end process;
  74.  
  75. process(an_sel,second_l,second_h,min_l,min_h)
  76. begin
  77. case an_sel is
  78. when ""=>an<="";num<=second_l;
  79. when ""=>an<="";num<=second_h;
  80. when ""=>an<="";num<=min_l;
  81. when ""=>an<="";num<=min_h;
  82. when others=>null;
  83. end case;
  84.  
  85. case num is
  86. when x""=>seg<=b"";
  87. when x""=>seg<=b"";
  88. when x""=>seg<=b"";
  89. when x""=>seg<=b"";
  90. when x""=>seg<=b"";
  91. when x""=>seg<=b"";
  92. when x""=>seg<=b"";
  93. when x""=>seg<=b"";
  94. when x""=>seg<=b"";
  95. when x""=>seg<=b"";
  96. when others=>null;
  97. end case;
  98. end process;
  99. end Behavioral;

约束文件如下:

  1. NET "clk" LOC = "B8";
  2. NET "an<0>" LOC="K14";
  3. NET "an<1>" LOC="M13";
  4. NET "an<2>" LOC="J12";
  5. NET "an<3>" LOC="F12";
  6. NET "seg<6>" LOC="L14";
  7. NET "seg<5>" LOC="H12";
  8. NET "seg<4>" LOC="N14";
  9. NET "seg<3>" LOC="N11";
  10. NET "seg<2>" LOC="P12";
  11. NET "seg<1>" LOC="L13";
  12. NET "seg<0>" LOC="M12";

基于BASYS2的VHDL程序——数字钟的更多相关文章

  1. 基于BASYS2的VHDL程序——数字钟(最终版)

    转载请注明原地址:http://www.cnblogs.com/connorzx/p/3674178.html 调时电路正常工作.一切正常.发现做FPGA还是得从数电的思路思考,设置一个预置使能端,预 ...

  2. 基于BASYS2的VHDL程序——数字钟(改进版)

    扩展到时分秒.加了入调时电路,但不知道为什么有两个按键不好使.而且不知道以何种方式假如按键消抖电路,因为加入后会多个时钟控制一个信号,物理不可实现.调试电路待解决.还有,四个数目管中间的那两个圆点怎么 ...

  3. 基于BASYS2的VHDL程序——交通灯

    请尊重作者版权,转载请注明原地址: http://www.cnblogs.com/connorzx/p/3676746.html 数电实验交通灯VHDL版,程序写的扩展性很差,待以后有时间进行优化. ...

  4. 基于BASYS2的VHDL程序——分频和数码管静态显示程序

    转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...

  5. 基于BASYS2的VHDL程序与烧写——按键消抖程序

    请尊重作者版权,转载请注明源地址http://www.cnblogs.com/connorzx/p/3548364.html 按键在按下的过程中通常会产生一段时间的抖动,为了消除这种抖动,一般采取两种 ...

  6. 基于BASYS2的VHDL程序与仿真——50%占空比8分频器

    转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...

  7. 基于BASYS2的VHDL程序——交通灯(状态机版)

    请尊重作者版权,转载注明源地址:http://www.cnblogs.com/connorzx/p/3694618.html 使用了状态机,增加了可读性和用户体验. library IEEE; use ...

  8. 基于串口校时的数字钟设计(verilog实现)

    任务: 电路图设计: 设计: 模块1:1.先设计一个计数时钟,为了仿真方便,这里把1000ns当作1s. 创建一个计数器second_lim,当计数到1000/20时清零,即1s. 秒显示器secon ...

  9. 基于basys2用verilog设计多功能数字钟(重写)

    话不多说先上图         前言 自从学习FPGA以来,唯一做过的完整系统就是基于basys2得多功能数字表.记得当时做的时候也没少头疼,最后用时间磨出来了一个不是很完整的小系统,当时还是产生了满 ...

随机推荐

  1. 【linux】CentOS编译程序报错 修复 ./Modules/_ssl.c:64:25: 致命错误:openssl/rsa.h:没有那个文件或目录

    如果你在编译时遇到这个错误,这可能是下面的原因:你尝试编译的程序使用OpenSSL,但是需要和OpenSSL链接的文件(库和头文件)在你Linux平台上缺少. 所以在CentOS下, 退到根路径,[需 ...

  2. VirtualApp技术黑产利用研究报告

    一. 前言 VirtualApp(以下称VA)是一个App虚拟化引擎(简称VA).VirtualApp创建了一个虚拟空间,你可以在虚拟空间内任意的安装.启动和卸载APK,这一切都与外部隔离,如同一个沙 ...

  3. fast-cgi & php-fpm 等的理解

    原文地址:https://segmentfault.com/q/1010000000256516 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php-fpm是fast ...

  4. Ubuntu切换至root错误:su:Authentication failure解决

    当前用户切换到root出现这个错误的原因是没有创建root用户,解决如下: 1.打开终端,输入命令sudo passwd root 会提示输入新的用户密码,输入后会再确认一次,成功后会显示:passw ...

  5. Linux 软件大全

    应用 音频 Airtime - Airtime 是一款用于调度和远程站点管理的开放广播软件   Ardour - 在 Linux 上录音,编辑,和混音  Audacious - 开源音频播放器,按你想 ...

  6. Linux mm相关的问题

    [S]为什么High MEM是从896M開始的? As the running kernel needs these functions, a region of at least VMALLOC_R ...

  7. HTML5、CSS3等新特性:

    HTML5:1/绘画 canvas 元素;2/用于媒介回放的 video 和 audio 元素;3/本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;4/sessionSt ...

  8. C语言判断回文数

    #include<stdio.h> #include<stdlib.h> int main() { //1.得到这个数字 2.翻转 3.进行比较 4.如果相同 就输出 是 否则 ...

  9. 安卓UI适配限定符

    引言 对于程序在不同尺寸的Android机器上执行,对UI的适用性造成了额外的开销,只是限定符的出现,非常方便的攻克了这个问题.通过创建限定符相关的文件夹来解决资源的载入. 限定符用处 限定符(mdp ...

  10. kubernetes对象之deployment

    系列目录 简述 Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用.典型的应 ...