找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2098|回复: 0
打印 上一主题 下一主题
收起左侧

基于fsm 0-9计数器源程序

[复制链接]
跳转到指定楼层
楼主
备注:
       输出信号使用灯泡来显示“0000”表示1,“1001”表示9。


原理:
      该电路的输入为一个时钟脉冲CLK和异步复位信号reset每段clk上升沿到达时计数器加一,直到九,下一个上升沿到达后计数结果为0,然后再周而复始的计数下去。reset高电平时正常技术,当reset为低电平时,计数从0开始,计数结果要接入LED灯泡显示。



实现思路:
       根据计数原理设置10个状态,分别表示为S0-S9,S0的状态对应0,驱动灯泡显示为“0000”,下一个时钟脉冲到达后,无条件从S0转到S1,S1状态对应1,驱动灯泡显示为“0001”,以此类推,直到S9状态。在此状态下,当时钟到达后,直接转到S0。



状态转化图:




部分程序代码:
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. entity fsm_jishu is
  4.         port(clk,reset :in std_logic;
  5.         q:out std_logic_vector(3 downto 0));
  6. end fsm_jishu;
  7. architecture wang of fsm_jishu is
  8. type state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);
  9. signal currentstate,nextstate:state;
  10. begin
  11. --jincheng
  12. with currentstate select
  13. nextstate<=s1 when s0,
  14.                 s2 when s1,
  15.                 s3 when s2,
  16.                 s4 when s3,
  17.                 s5 when        s4,
  18.                 s6 when s5,
  19.                 s7 when s6,
  20.                 s8 when s7,
  21.                 s9 when s8,
  22.                 s0 when others;
  23. --suochunjincheng
  24. state_latch : process(clk,reset)
  25. begin
  26.         if         reset='0'then
  27.                 currentstate<=s0;
  28.         elsif        clk'event and clk='1'then
  29.                 currentstate<=nextstate;
  30.         end if;
  31. end process
复制代码
详细程序在附件
0-9计数器.docx (12.66 KB, 下载次数: 5)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表