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

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

3天内不再提示

摩尔型状态机与米利型状态机的区别是什么

FPGA之家 来源:FPGA探索者 作者:FPGA探索者 2022-03-14 17:42 次阅读

FSM有限状态机,序列产生,序列检测,是FPGA和数字IC相关岗位必须要掌握的知识点,在笔试和面试中都非常常见。

(1)了解状态机:什么是摩尔型状态机,什么是米利型状态机,两者的区别是什么?一段式、二段式、三段式状态机的区别?

(2)使用状态机产生序列“11010110”,串行循环输出该序列;

(3)使用状态机检测“1101”,串行输入的测试序列为“11101101011010”,输出信号为valid有效信号,检测到时输出高,否则为低,考虑序列叠加情况,比如“1101101”,则有两个“1101”,

即:

时钟

1

2

3

4

5

6

7

8

9

10

11

12

13

14

输入

1

1

1

0

1

1

0

1

0

1

1

0

1

0

输出

0

0

0

0

0

1

0

0

1

0

0

0

0

1

11101101011010,在第5个时钟检测到序列,下一个时钟输出高电平;

11101101011010,在第8个时钟检测到序列,下一个时钟输出高电平;

11101101011010,在第13个时钟检测到序列,下一个时钟输出高电平;

给出WORDPDF版本的报告,包括但不限于文字说明、代码、仿真测试图等。

【解答】:

状态机类型

状态机由状态寄存器和组合逻辑威廉希尔官方网站 构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSMFinite State Machine,主要分为2大类:

第一类,输出只和状态有关而与输入无关,则称为Moore状态机;

第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。

Mealy:输出信号不仅取决于当前状态,还取决于输入;

Moore:输出信号只取决于当前状态;

实现相同的功能时,Mealy型比Moore型能节省一个状态(大部分情况下能够节省一个触发器资源,其余情况下使用的资源相同,视状态数和状态编码方式决定),Mealy型比Moore型输出超前一个时钟周期

三段式状态机

一段式一个always,既描述状态转移,又描述状态的输入输出,当前状态用寄存器输出。一段式写法简单,但是不利于维护,状态扩展麻烦,状态复杂时易出错,不推荐

二段式两个always,时序逻辑与组合逻辑分开,一个always块采用同步时序描述状态转移;另一个always块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出,当前状态用组合逻辑输出,可能出现竞争冒险,产生毛刺,而且不利于约束,不利于综合器和布局布线器实现高性能的设计;

三段式三个always,一个always模块采用同步时序描述状态转移;一个always采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always块使用同步时序描述状态输出,寄存器输出。

三段式与二段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。

状态机序列检测

使用三段式FSM有限状态机进行序列检测,使用摩尔型状态机,最终输出与输入无关。

使用状态机检测“1101”,串行输入的测试序列为“11101101011010”,输出信号为valid有效信号,检测到时输出高,否则为低,考虑序列叠加情况,比如“1101101”,则有两个“1101”,

即:

时钟

1

2

3

4

5

6

7

8

9

10

11

12

13

14

输入

1

1

1

0

1

1

0

1

0

1

1

0

1

0

输出

0

0

0

0

0

1

0

0

1

0

0

0

0

1

11101101011010,在第5个时钟检测到序列,下一个时钟输出高电平;

11101101011010,在第8个时钟检测到序列,下一个时钟输出高电平;

11101101011010,在第13个时钟检测到序列,下一个时钟输出高电平;

根据待检测的序列“1101”确定状态,其中:

S1为检测到第1个有效位“1”;

S2为检测到2个有效位“11”;

S3为检测到3个有效位“110”;

S4位检测到4个有效位“1101”;

IDLE为其他状态;

IDLE:初始状态,除S1~S4外的其他所有状态

S11 1则到S2(11),否则回到IDLE

S211 0则到S3(110),否则保持S2(11)

S3110 1则到S4(1101),否则回到IDLE

S41101 1则到S2(11),否则回到IDLE

摩尔型,输出和输入无关,S4时无论输入什么,都输出1

1c485b6c-9645-11ec-952b-dac502259ad0.png

1c6177d2-9645-11ec-952b-dac502259ad0.png

三段式FSM的代码:

/**************************************************************   Author    :FPGA探索者公众号**   Times      :2020-7-7************************************************************/module FSM_SequDetection_1(       clk,       rst_n,       data_in,       data_valid); input clk;input rst_n;input data_in;output reg data_valid; //定义状态,这里采用的独热码(One-Hot),FPGA中推荐用独热码和格雷码(Gray)//状态较少时(4-24个状态)用独热码效果好,状态多时格雷码(状态数大于24)效果好parameter IDLE = 5'b00001;parameter S1       = 5'b00010;parameter S2       = 5'b00100;parameter S3       = 5'b01000;parameter S4       = 5'b10000; reg [4:0] current_state;             //现态reg [4:0] next_state;                 //次态 //三段式FSM,第一段,同步时序逻辑,描述状态切换,这里的写法固定always @ ( posedge clk )begin       if(!rst_n ) begin              current_state<= IDLE;       end       elsebegin              current_state<= next_state;       endend //三段式FSM,第二段,组合逻辑,判断状态转移条件,描述状态转移规律//这里面用"="赋值和用"<="没区别always @ (*)begin       if(!rst_n ) begin              next_state<= IDLE;       end       elsebegin              case(current_state )                     IDLE:    begin                            if(data_in == 1 )                                   next_state<= S1;                            else                                   next_state<= IDLE;                     end                     S1   :      begin                            if(data_in == 1 )                                   next_state<= S2;                            else                                   next_state<= IDLE;                     end                     S2   :      begin                            if(data_in == 0 )                                   next_state<= S3;                            else                                   next_state<= S2;                     end                     S3   :      begin                            if(data_in == 1 )                                   next_state<= S4;                            else                                   next_state<= IDLE;                     end                     S4   :      begin                            if(data_in == 1 )                                   next_state<= S2;                            else                                   next_state<= IDLE;                     end                     default   : begin                            next_state<= IDLE;                     end              endcase       endend //三段式FSM,第三段,同步时序逻辑,描述状态输出,摩尔型输出always @ ( posedge clk )begin       if(!rst_n ) begin              data_valid<= 1'b0;       end       elsebegin              case(next_state )                     S4   : data_valid <= 1'b1;                     default   : data_valid <= 1'b0;              endcase       endend endmodule

综合后的RTL图:

1c8105ac-9645-11ec-952b-dac502259ad0.png

其中,状态机部分为:

1c961460-9645-11ec-952b-dac502259ad0.png

这里的状态机考虑到复位的情况,不论处在哪个状态,当复位信号有效时,均回到IDLE初始状态。

仿真测试文件(TestBench):

/**************************************************************   Author    :FPGA探索者公众号**   Times      :2020-7-7************************************************************/`timescale 1 ns/1 ns
moduleFSM_2_tb();
reg clk;reg rst_n;reg data_in;wire data_valid;
FSM_SequDetection  U1(  .clk(clk),  .rst_n(rst_n),  .data_in(data_in),  .data_valid(data_valid));
initial begin   clk = 0;  rst_n = 0;  #15;  rst_n = 1;  data_in = 1;#10;  data_in = 1;#10;  data_in = 1;#10;  data_in = 0;#10;  data_in = 1;#10;  data_in = 1;#10;  data_in = 0;#10;  data_in = 1;#10;  data_in = 0;#10;  data_in = 1;#10;  data_in = 1;#10;  data_in = 0;#10;  data_in = 1;#10;  data_in = 0;#10;  #50;  $stop;  //停止仿真end 
always#5clk=~clk;
endmodule

ModelSim仿真如下,输入“1_1101101_0_1101”,检测到3次有效的“1101”。

1cc41b08-9645-11ec-952b-dac502259ad0.png


原文标题:FPGA/数字IC笔试题——序列检测(FSM状态机)【状态机序列检测】

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

审核编辑:彭菁

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

    关注

    2

    文章

    492

    浏览量

    27538
  • 摩尔
    +关注

    关注

    0

    文章

    11

    浏览量

    8601
  • 状态寄存器
    +关注

    关注

    0

    文章

    39

    浏览量

    7086

原文标题:FPGA/数字IC笔试题——序列检测(FSM状态机)【状态机序列检测】

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    采用米利状态机威廉希尔官方网站 设计

    首先可以确定采用米利状态机设计该威廉希尔官方网站 。因为该威廉希尔官方网站 在连续收到信号0101时,输出为1,其他情况下输出为0,所以采用米利
    的头像 发表于 09-08 14:06 8219次阅读
    采用<b class='flag-5'>米利</b><b class='flag-5'>型</b>的<b class='flag-5'>状态机</b>威廉希尔官方网站
设计

    Spring状态机的实现原理和使用方法

    说起 Spring 状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring 状态机就是
    的头像 发表于 12-26 09:39 2000次阅读
    Spring<b class='flag-5'>状态机</b>的实现原理和使用方法

    Verilog状态机+设计实例

    的是有限状态机(Finite-State Machine,FSM),简称为状态机,表示在有限个状态以及这些状态之间的转移和动作等行为的数学模型。 二、分类 在verilog中常使用的
    的头像 发表于 02-12 19:07 4105次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    玩转Spring状态机

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是
    的头像 发表于 06-25 14:21 949次阅读
    玩转Spring<b class='flag-5'>状态机</b>

    状态机举例

    状态机举例 你可以指定状态寄存器和状态机状态。以下是一个有四种状态的普通状态机。 // Th
    发表于 03-28 15:18 986次阅读

    状态机原理及用法

    状态机原理及用法状态机原理及用法状态机原理及用法
    发表于 03-15 15:25 0次下载

    状态机和组合逻辑的冒险竞争浅析

    有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore状态机和Mealy
    发表于 06-25 08:42 3975次阅读

    状态机概述 如何理解状态机

    本篇文章包括状态机的基本概述以及通过简单的实例理解状态机
    的头像 发表于 01-02 18:03 1w次阅读
    <b class='flag-5'>状态机</b>概述  如何理解<b class='flag-5'>状态机</b>

    正点原子开拓者FPGA视频:状态机

    状态机状态寄存器和组合逻辑威廉希尔官方网站 构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。状态机分为
    的头像 发表于 09-19 07:00 2460次阅读
    正点原子开拓者FPGA视频:<b class='flag-5'>状态机</b>

    FPGA之状态机的功能简述与学习建议

    状态机状态寄存器和组合逻辑威廉希尔官方网站 构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。状态机分为
    的头像 发表于 10-09 07:07 3568次阅读

    FPGA之状态机练习:设计思路(4)

    状态机状态寄存器和组合逻辑威廉希尔官方网站 构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。状态机分为
    的头像 发表于 05-28 07:03 2930次阅读

    什么是状态机 状态机的描述三种方法

    信号是否与威廉希尔官方网站 的输入有关分为Mealy状态机和Moore状态机。威廉希尔官方网站 的输出信号不仅与威廉希尔官方网站 当前状态有关,还与威廉希尔官方网站 的输入有关,称为 Meal
    的头像 发表于 11-16 17:39 2.7w次阅读

    FPGA:状态机简述

    本文目录 前言 状态机简介 状态机分类 Mealy 状态机 Moore 状态机
    的头像 发表于 11-05 17:58 7397次阅读
    FPGA:<b class='flag-5'>状态机</b>简述

    Verilog设计过程中状态机的设计方法

    的基本要素有三个:状态、输出和输入。 根据状态机的输出是否与输入条件有关,可将状态机分为: 摩尔(Moore)和米里(Mealy)
    的头像 发表于 06-25 11:04 2612次阅读

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化
    的头像 发表于 10-19 10:27 9534次阅读