有限状态机是Verilog中十分基本也是十分重要的知识。本文对有限状态机做了一个简单介绍。

1.状态机三要素

  有限状态机具有三个要素:状态跳转、跳转判断、状态操作;

  1)状态跳转:现态跳转到次态;

  2)跳转判断:状态跳转的判断条件;

  3)状态操作:状态对应的操作;

2.状态机的实现方式

  1)一段式:状态机三要素集成于一个 always 块中。

     always@(posedge clk or negedge rst_n)
    begin
      if(!rst_n)begin
        state <= 'b00;
        Qout <= 'b0;
      end
      else case(state)
        'b00: begin
          if(A)begin
            state <= 'b01;
            Qout <= 'b1;
          end
          else begin
            state <= 'b00;
            Qout <= 'b0;
          end
        end
        'b01: begin
          if(!A)begin
            state <= 'b00;
            Qout <= 'b0;
          end
          else begin
            state <= 'b01;
            Qout <= 'b1;
          end
        end
        default:;
      endcase
    end

FMS_ONE

  2)二段式:状态机三要素分别设计于两个 always 块。

     always@(posedge clk or negedge rst_n)
    begin
      if(!rst_n)
        state <= 'b00;
      else case(state)
        'b00: begin
          if(A)
            state <= 'b01;
          else
            state <= 'b00;
        end
        'b01: begin
          if(!A)
            state <= 'b00;
          else
            state <= 'b01;
        end
        default:;
      endcase
    end always@(posedge clk or negedge rst_n)
    begin
      if(!rst_n)
        Qout <= 'b0;
      else case(state)
        'b00: Qout <= 1'b0;
        'b01: Qout <= 1'b1;
        default:;
      endcase
    end

FMS_TWO

  3)三段式:状态机三要素分别于三个 always 块。

FMS_THREE

     always@(posedge clk or negedge rst_n)//状态跳转
    begin
      if(!rst_n)
current_state <= 'b00; //复位
      else
current_state <= next_state//在时钟上升沿刷新现状态
    end always@(current_state) //跳转判断
    begin
case(current_state)
'b00:begin
if(A)
next_state = 'b01;
else
next_state = 'b00;
end
'b01:begin
if(!A)
next_state = 'b00;
else
next_state = 'b01;
end
default:;
    end always @ (*) //状态操作
begin
case(current_state)
'b00:Qout <= 1'b0;
'b01:Qout <= 1'b1;
default:;
endcase
end

3.状态机设计要求

  1)根据设计需求选择合适的风格;

  2)case语句中都应加入default语句;

  3)巧加DFF中继,提高可靠性;

  4)课采用独热编码、格雷码设计状态;

  5)记得采用全局复位;

【基本知识】FMS有限状态机设计的更多相关文章

  1. kafka知识体系-kafka设计和原理分析

    kafka设计和原理分析 kafka在1.0版本以前,官方主要定义为分布式多分区多副本的消息队列,而1.0后定义为分布式流处理平台,就是说处理传递消息外,kafka还能进行流式计算,类似Strom和S ...

  2. HDMI接口基础知识及硬件设计

    参考资料:http://blog.csdn.net/u013625961/article/details/53434189: http://blog.csdn.net/u014276460/artic ...

  3. kafka知识体系-kafka设计和原理分析-kafka文件存储机制

    kafka文件存储机制 topic中partition存储分布 假设实验环境中Kafka集群只有一个broker,xxx/message-folder为数据文件存储根目录,在Kafka broker中 ...

  4. kafka知识体系-kafka设计和原理分析-kafka leader选举

    kafka leader选举 一条消息只有被ISR中的所有follower都从leader复制过去才会被认为已提交.这样就避免了部分数据被写进了leader,还没来得及被任何follower复制就宕机 ...

  5. kafka知识体系-kafka设计和原理分析-消息传递语义

    消息传递语义 消息传递保障 本节讨论Kafka如何确保消息在producer和consumer之间传输.有以下三种可能的传输保障(delivery guarantee): At most once: ...

  6. JAVA核心技术I---JAVA基础知识(常量设计和常量池)

    一:常量---一种不会修改的变量 –Java没有constant关键字 –不能修改,final –不会修改/只读/只要一份,static –方便访问publicJava中的常量 –public sta ...

  7. UI设计初学者教程:色彩基础知识

    编辑:千锋UI设计 初学设计都会先认识三原色,通常我们说的三原色指的是颜料三原色:红.黄.蓝:其实三原色还有色光三原色:红.绿.蓝.我们通常说的红黄蓝就是减色法三原色,而红绿蓝是加色法三原色.可能这么 ...

  8. 得到知识服务app原型设计比较与实践

    一.几种原型设计工具的比较 墨刀 优点: 拥有PC端.手机端.网页版,让你随时随地可以进行产品原型设计: 其定位是主要用于设计移动APP原型,其控件的拖拉.大小的调整,都会自然去匹配相应的母版大小,非 ...

  9. 至芯FPGA培训中心-1天FPGA设计集训(赠送FPGA开发板)

    至芯FPGA培训中心-1天FPGA设计集训(赠送开发板) 开课时间2014年5月3日 课程介绍 FPGA设计初级培训班是针对于FPGA设计技术初学者的课程.课程不仅是对FPGA结构资源和设计流程的描述 ...

随机推荐

  1. Harbor基础

    harbor: Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功 ...

  2. 【POJ3126】Prime Path

    本题传送门 本题知识点:宽度优先搜索 题意很简单.要找一个质数变到另一个质数的最少步数,两个质数都是4位数,变的时候只能变其中一位,变了的数也仍是质数. 思路也很简单,对每一位数进行修改,如果修改后的 ...

  3. Shell字符串截取(非常详细)

    假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 1 echo ${var#*//} 其中 var 是变量名,# 号是运算符, ...

  4. oracle 如何快速删除两表非关联数据(脏数据)?

      1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where ...

  5. 解决启动redis出现的creating server tcp listening socket *:6379: listen: unknown error

    今天运行redis服务端时候出现这个问题: D:\php\software\redis>redis-server.exe [] Dec ::00.797 # Warning: no config ...

  6. The Snowflake Elastic Data Warehouse

    开篇说的是,Shared-nothing当前已经是主流的架构,需要用自身的local disks来存储数据,Tables被水平划分到各个partitions上 这种架构,比较适合star-schema ...

  7. SpringMvc的 @Valid 拦截到的异常如何抛出

    SpringMvc中,校验参数可以使用 @Valid 注解,同时在相应的对象里使用 @NotBlank( message = "昵称不能为空")@NotNull( message ...

  8. windows如何删除服务

    有时候软件被安装成了服务,但是卸载后如何删除无效的服务,这时候就不是普通用户就能删除了,这属于操作系统管理级别了,需要使用管理命令了. 管理员权限打开cmd,执行如下: C:\Windows\syst ...

  9. Shared variable in python's multiprocessing

    Shared variable in python's multiprocessing https://www.programcreek.com/python/example/58176/multip ...

  10. docker stack删除network失败

    现象描述 删除stack的时候没太多提示,但再启动相同的stack会报错,提示网络创建失败:随后使用network ls命令可以看到之前的network还在: 使用docker network rm还 ...