vhdl 编写counter ,模拟钟表

简介:

    好久没玩过FPGA了,回想起当时和张胤一起写的SOPC系统还真是怀念啊,自己编写的CPU,自己编写的外设驱动(软件+硬件),自己定义的汇编语言,自己编写的汇编器,基于这些自己的东西写自己的应用程序,那些好玩的游戏~ 怀念,有时间一定写篇文章纪念一下。

     选这个课,是想回忆下基本的VHDL知识,什么东西不用都会忘掉的。这是一个很简单的程序,有时分秒的功能,没有任何管脚指定,仅仅用modelsim仿真了一下。

      counter的代码:

 

 
  1. --------------------------------------------------------------- 
  2. -- 
  3. --      Author: Chaos Lee(ID:sy1106508) 
  4. --      Name: A simple counter. 
  5. --      Date: 2012/05/06 
  6. -- 
  7. --------------------------------------------------------------- 
  8. library ieee; 
  9. use ieee.std_logic_1164.all
  10. use ieee.std_logic_arith.all
  11. use ieee.std_logic_unsigned.all
  12. entity counter is 
  13.  port( 
  14.    clk: in std_logic; 
  15.    clr: in std_logic; 
  16.    sec: out std_logic_vector(5 downto 0); 
  17.    minout std_logic_vector(5 downto 0); 
  18.    hourout std_logic_vector(4 downto 0) 
  19.    ); 
  20. end entity; 
  21. architecture behave of counter is 
  22. begin 
  23.   process(clk,clr) 
  24.  variable sec_cnt: integer range 0 to 59; 
  25.  variable min_cnt: integer range 0 to 59; 
  26.  variable hour_cnt: integer range 0 to 23; 
  27.   begin 
  28.   if(clr = '0'then 
  29.    sec_cnt := 0; 
  30.    min_cnt := 0; 
  31.    hour_cnt := 0; 
  32.   else 
  33.    if(clk'event and clk = '1')then 
  34.     if(sec_cnt = 59) then 
  35.      sec_cnt := 0; 
  36.      if(min_cnt = 59) then 
  37.       min_cnt := 0; 
  38.       if(hour_cnt = 23) then 
  39.        hour_cnt := 0; 
  40.       else 
  41.        hour_cnt := hour_cnt + 1; 
  42.       end if; 
  43.      else  
  44.       min_cnt := min_cnt + 1; 
  45.      end if; 
  46.     else 
  47.      sec_cnt := sec_cnt+1; 
  48.     end if; 
  49.    end if; 
  50.   end if; 
  51.   sec <= conv_std_logic_vector(sec_cnt,6); 
  52.   min <= conv_std_logic_vector(min_cnt,6); 
  53.   hour <= conv_std_logic_vector(hour_cnt,5); 
  54.   end process; 
  55. end architecture; 

      modelsim的测试代码:

    

 
  1. ------------------------------------------------------------ 
  2. -- 
  3. --    Author: Chaos Lee (ID:sy1106508) 
  4. --    Name: counter_tb 
  5. --    Description: A testbench aiming to verify the counter simulating a clock 
  6. --    Date: 2012/05/06 
  7. -- 
  8. ------------------------------------------------------------- 
  9. library ieee; 
  10. use ieee.std_logic_1164.all
  11. use ieee.std_logic_arith.all
  12. use ieee.std_logic_unsigned.all
  13.  
  14. entity counter_tb is 
  15. end entity; 
  16.  
  17. architecture behave of counter_tb is 
  18. component counter is 
  19.  port( 
  20.    clk: in std_logic; 
  21.    clr: in std_logic; 
  22.    sec: out std_logic_vector(5 downto 0); 
  23.    minout std_logic_vector(5 downto 0); 
  24.    hourout std_logic_vector(4 downto 0) 
  25.    ); 
  26. end component; 
  27.  
  28. signal clk_tb:std_logic; 
  29. signal clr_tb:std_logic; 
  30. signal sec_tb:std_logic_vector(5 downto 0); 
  31. signal min_tb:std_logic_vector(5 downto 0); 
  32. signal hour_tb:std_logic_vector(4 downto 0); 
  33.  
  34. begin 
  35.   u1:counter port map ( 
  36.       clk => clk_tb ,  
  37.       clr => clr_tb , 
  38.       sec => sec_tb , 
  39.       min => min_tb , 
  40.       hour => hour_tb 
  41.       ); 
  42.   test_bench:process 
  43.   begin 
  44.     clr_tb <='0' , '1' after 20ns; 
  45.     clk_tb <= '1'
  46.     for i in 10000 downto 0 loop 
  47.       wait for 10 ns; 
  48.       clk_tb <= not clk_tb; 
  49.     end loop; 
  50.   wait; 
  51.   end process; 
  52. end architecture; 

本文转自hipercomer 51CTO博客,原文链接:
http://blog.51cto.com/hipercomer/855155
相关文章
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
8月前
|
索引
鸿蒙开发:了解应用级配置信息
在实际的开发中,如果有共用的资源,建议大家都放到AppScope目录下,对于一些应用级别的信息,比如应用的名字,还有应用的图标,虽然说在Moulde下也可以配置,但是为了更方便的管理,这里比较推荐以AppScope目录下的app.json5为主,当然了,只是推荐,实际当中,两者都可以实现,大家选择其中一种方式即可。
195 12
鸿蒙开发:了解应用级配置信息
|
8月前
|
搜索推荐 UED
销售易CRM:用户体验与市场评价深度分析
销售易CRM是国内领先的客户关系管理系统,以其现代化的界面设计、强大的移动端支持和优质的客户服务赢得广泛好评。系统操作简洁直观,支持个性化定制与多设备访问,移动端功能齐全且具备离线支持,协同工具丰富。销售易注重客户服务,提供快速响应、专业培训和持续优化。市场评价显示,用户对其功能、体验和服务均给予高度认可,是企业提升客户管理效率和推动销售增长的理想选择。
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
智能语音识别技术在多语言环境下的挑战与优化策略###
随着全球化的加速推进,智能语音识别技术作为人机交互的关键一环,其跨语言适应性成为了研究热点。本文深入探讨了智能语音识别技术在多语言环境下面临的挑战,包括口音差异、词汇多样性、语法结构复杂性等,并提出了相应的优化策略。通过对比分析不同算法和技术路线,本文旨在为提升智能语音识别系统的跨语言性能提供理论依据和实践指导。 ###
|
存储 监控 NoSQL
Redis脑裂:预防与解决之道
在分布式系统中,Redis集群的脑裂问题是一个令人头疼的难题。它指的是由于网络分区或其他原因,导致集群中的节点无法正常通信,从而形成多个子集群,每个子集群都认为自己是主集群,进而引发数据不一致和服务可用性下降的问题。那么,如何有效预防Redis脑裂问题?当问题发生时,我们能否迅速解决?本文将围绕这一主题,分享一些实用的技术干货。
450 2
|
12月前
|
供应链 安全 区块链
掌握区块链技术:从基础到进阶的全方位指南
掌握区块链技术:从基础到进阶的全方位指南
|
机器学习/深度学习 数据采集 人工智能
什么是AI?如何使用AI?本文告诉你
人工智能(AI)是借助计算机技术来模拟与实现人类智慧的一项科技。它涵盖了从感知到语言理解等多方面的能力。AI可划分为弱AI、强AI及超AI三类,当前主要集中在弱AI的应用上,如语音助手和图像识别。为了高效运用AI,首先需清晰目标,再选取合适的工具,同时保证数据质量,不断优化模型,并注重伦理考量,最终实现人机协同作业,充分发挥各自优势。
5136 2
|
算法 安全 网络安全
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
|
移动开发 JavaScript
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
249 0
|
C语言
程序技术好文:生成CFree5.0注册码
程序技术好文:生成CFree5.0注册码
4784 0