有限状态机是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. 【CF1142B】Lynyrd Skynyrd

    [CF1142B]Lynyrd Skynyrd 题面 洛谷 题解 假设区间\([l,r]\)内有一个循环位移,那么这个循环位移一定有一个最后的点,而这个点在循环位移中再往前移\(n-1\)个位置也一定 ...

  2. 数据结构HashMap哈希表原理分析

    先看看定义:“散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度. 哈希 ...

  3. player: 初始化分析

    //1. //cocos 程序开始运行时执行的函数 bool AppDelegate::applicationDidFinishLaunching() { // initialize director ...

  4. Mercurial 的hook使用

    1. Handling repository events with hooks可以通过Mercurial版本管理工具提供的hooks机制来处理repo的各种事件,从而实现对Mercurial的扩展, ...

  5. Mac版最详细的Flutter开发环境搭建

    上周任务不多,闲来无事想学习一下flutter耍一耍,发现flutter的环境搭建步骤还是很繁琐的,官网的搭建教程只是按步骤让你进行操作,中间出现的问题完全没有提及,对我这种没搞过原生开发的小白来说超 ...

  6. 【Beta】Scrum Meeting 10 & 发布链接

    目录 前言 任务分配 燃尽图 会议照片 签入记录 发布链接(5.17更新) 前言 第10次会议于5月15日22:00在一公寓三楼召开. 交流确认了各自的任务进度,确定了Beta阶段发布的相关事宜.时长 ...

  7. 【转】Spring Boot @Condition 注解,组合条件你知道吗

    原文:https://www.cnblogs.com/FraserYu/p/11280420.html 上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一 ...

  8. Cross-channel Communication Networks

    Cross-channel Communication Networks 2019-12-13 14:17:18 Paper: https://papers.nips.cc/paper/8411-cr ...

  9. 段地址机制以及段地址转换触发segmentation falt

    推动存储管理方式从固定分区到动态分区分配,进而又发展到分页存储管理方式的主要动力是提高内存利用率.可以实现一个内存用于多个程序同时执行而不会发生地址冲突.引入分段存储管理方式的目的,则主要是为了满足用 ...

  10. linux剪贴板

    ubuntu下的用户可以只用apt-get来安装: `sudo apt-get install xclip ` 其他发行版的用户可以选择自己的安装方式,也可以用源码编译安装,xclip项目的主页是:h ...