0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习系列:9.简单状态机设计

FPGA学习交流 来源:互联网 作者:佚名 2018-06-01 16:59 次阅读

设计背景:

状态机是描述各种复杂时序的时序行为,是使用HDL进行数学逻辑设计中非常重要的方法之一,状态机分为摩尔机和米粒机,当输出只和状态有关系的话称为摩尔机,当输出不仅和状态有关系也和输入信号有关系的时候称为米粒机,米粒机和摩尔机的电路原型我就不在这里给大家介绍了。

状态机是由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设计的状态进行状态的转移,是协调相关信号的动作,完成特定操作的控制中心。比如我们生活中遇到的问题,健康---感冒---健康,这个就是一个状态的转移图,从健康状态到感冒状态在到健康状态。

设计原理:

我认为对于我们初学者来说我们只要只要状态机就是当这个状态也就是当这个时钟来的时候发生这件事情,当下各时钟来的时候发生另一件事,也就是说发生这件事后,跳转下一个时钟发生另一件事情,两个事情发生没有关系。我们理解初学者理解这个就行了,不用理解高深的二段式,三段式。

我们会在下面的设计中用到简单的状态机让大家明白简单的状态机。

我们的设计也是一个流水灯,我们的设计是在复位的时候让4个等全熄灭,第一个上升沿点亮一个,第二个点亮下一个,依次类推。

我们的写法可以这样想,当第一个状态也就是一个上升沿点亮第一个灯,然后跳转下一个状态点亮第二个灯,第三个点亮下一个。。。。

设计架构图:

image.png 

设计代码:

设计模块

0moduleled_run (clk,rst_n,led);

1

2 inputclk,rst_n; //定义输入输出

3

4 outputreg[3:0]led;

5

6 reg[10:0]count; //定义一个时间寄存器

7 regclk_1hz; //定义一个时钟

8 reg[1:0]state;//定义状态

9

10 always@(posedgeclk)

11 if(!rst_n)

12 begin

13 clk_1hz <=1;

14 count <=0;

15 end

16 elseif(count <(5/1/2-1))//计数来产生一个时钟

17 count <=count +1'd1;

18 else

19 begin

20 count <=26'd0;

21 clk_1hz <=~clk_1hz;

22 end

23

24 always@(posedgeclk_1hz)

25 if(!rst_n)

26 led <=4'b1111; //复位熄灭4个灯

27 else

28 case(state)

29 0 : begin //第一个状态点亮第一个灯,然后跳转下 一个状态

30 state <=1;

31 led <=4'b1110;

32 end

33

34 1 : begin //2个状态点亮第2个灯,然后跳转下 一个状态

35 state <=2;

36 led <=4'b1101;

37 end

38

39 2 : begin //3个状态点亮第3个灯,然后跳转下 一个状态

40 state <=3;

41 led <=4'b1011;

42 end

43 3 : begin //4个状态点亮第4个灯,然后跳转0状态

44 state <=0;

45 led <=4'b0111;

46 end

47

48 default:state <=0;//否则跳转0状态

49 endcase

50

51endmodule

测试模块

0`timescale1ns/1ps//例化时标

1

2moduletb();

3

4 regclk,rst_n;

5 wire[3:0]led;

6

7 initialbegin

8

9 clk =1;

10 rst_n =0;

11

12 #200.1rst_n =1;

13

14

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21664

    浏览量

    601723
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27471
收藏 人收藏

    评论

    相关推荐

    FPGA工程师:如何在FPGA中实现状态机

    安全高效的状态机设计对于任何使用FPGA的工程师而言都是一项重要技能。选择Moore状态机、Mealy状态机还是混合机取决于整个系统的需求。无论选择哪种类型的
    发表于 03-29 15:02 1.3w次阅读
    <b class='flag-5'>FPGA</b>工程师:如何在<b class='flag-5'>FPGA</b>中实现<b class='flag-5'>状态机</b>?

    高效安全的状态机设

    本帖最后由 eehome 于 2013-1-5 09:56 编辑 高效安全的状态机设
    发表于 08-13 17:53

    状态机设计的例子

    本帖最后由 eehome 于 2013-1-5 09:56 编辑 状态机设计的例子
    发表于 08-19 23:01

    状态机设计指导

    状态机设计指导
    发表于 08-20 23:45

    明德扬视频分享--点拨FPGA课程---第十四章 状态机设

    1.状态机设计原则2.状态机练习13.状态机练习1答案4.波形对比方法5.状态机练习26.状态机练习2答案7.
    发表于 10-31 13:52

    FPGA---如何写好状态机,详细下载pdf

    的基本方法。但是,笔者希望大家能扩展思维,认识到状态机不仅仅是一种时序电路设计工具,它更是一种思想方法。我们先看下面一个简单的例子。在大学生活中,某学生的在校的学习生活可以简单地概括为
    发表于 09-28 10:29

    一个简单状态机设

    笔试时也很常见。[例1] 一个简单状态机设计--序列检测器序列检测器是时序数字电路设计中经典的教学范例,下面我们将用Verilog HDL语言来描述、仿真、并实现它。序列检测器的逻辑功能...
    发表于 02-16 07:29

    状态机设

    状态机设计:8.1.1 数据类型定义语句TYPE语句的用法如下:TYPE 数据类型名IS 数据类型定义OF 基本数据类型;或TYPE 数据类型名IS 数据类型定义;TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_L
    发表于 08-09 23:07 36次下载

    高速环境下FPGA或CPLD中的状态机设

        本文给出了采用这些技术的高速环境状态机设计的规范及分析方法和优化方法,并给出了相应的示例。       为了使FPGA或CPLD中的状态机设
    发表于 04-15 11:27 665次阅读
    高速环境下<b class='flag-5'>FPGA</b>或CPLD中的<b class='flag-5'>状态机设</b>计

    VHDL有限状态机设计-ST

    EDA的有限状态机,广义而言是指只要涉及触发器的电路,无论电路大小都可以归结为状态机。有限状态机设计在学习EDA时是很重要的一章。
    发表于 06-08 16:46 3次下载

    华清远见FPGA代码-状态机

    FPGA学习资料教程——华清远见FPGA代码-状态机
    发表于 10-27 18:07 9次下载

    FPGA状态机设计原则

    状态机状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。
    的头像 发表于 10-09 07:02 2352次阅读

    FPGA状态机简述

    FPGA设计中一种非常重要、非常根基的设计思想,堪称FPGA的灵魂,贯穿FPGA设计的始终。 02. 状态机简介 什么是状态机
    的头像 发表于 11-05 17:58 7296次阅读
    <b class='flag-5'>FPGA</b>:<b class='flag-5'>状态机</b>简述

    如何在FPGA中实现状态机

    状态机往往是FPGA 开发的主力。选择合适的架构和实现方法将确保您获得一款最佳解决方案。 FPGA 常常用于执行基于序列和控制的行动, 比如实现一个简单的通信协议。对于设计人员来说,满
    的头像 发表于 07-18 16:05 1050次阅读
    如何在<b class='flag-5'>FPGA</b>中实现<b class='flag-5'>状态机</b>

    基于FPGA状态机设

    状态机的基础知识依然强烈推荐mooc上华科的数字电路与逻辑设计,yyds!但是数电基础一定要和实际应用结合起来,理论才能发挥真正的价值。我们知道FPGA是并行执行的,如果我们想要处理具有前后顺序的事件就需要引入状态机
    的头像 发表于 07-28 10:02 934次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>状态机设</b>计