0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

摩爾型狀態(tài)機與米利型狀態(tài)機的區(qū)別是什么

FPGA之家 ? 來源:FPGA探索者 ? 作者:FPGA探索者 ? 2022-03-14 17:42 ? 次閱讀

FSM有限狀態(tài)機,序列產(chǎn)生,序列檢測,是FPGA和數(shù)字IC相關崗位必須要掌握的知識點,在筆試和面試中都非常常見。

(1)了解狀態(tài)機:什么是摩爾型狀態(tài)機,什么是米利型狀態(tài)機,兩者的區(qū)別是什么?一段式、二段式、三段式狀態(tài)機的區(qū)別?

(2)使用狀態(tài)機產(chǎn)生序列“11010110”,串行循環(huán)輸出該序列;

(3)使用狀態(tài)機檢測“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版本的報告,包括但不限于文字說明、代碼、仿真測試圖等。

【解答】:

狀態(tài)機類型

狀態(tài)機由狀態(tài)寄存器和組合邏輯電路構成,能夠根據(jù)控制信號按照預先設定的狀態(tài)進行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關信號動作、完成特定操作的控制中心。有限狀態(tài)機簡寫為FSMFinite State Machine,主要分為2大類:

第一類,輸出只和狀態(tài)有關而與輸入無關,則稱為Moore狀態(tài)機;

第二類,輸出不僅和狀態(tài)有關而且和輸入有關系,則稱為Mealy狀態(tài)機。

Mealy:輸出信號不僅取決于當前狀態(tài),還取決于輸入;

Moore:輸出信號只取決于當前狀態(tài);

實現(xiàn)相同的功能時,Mealy型比Moore型能節(jié)省一個狀態(tài)(大部分情況下能夠節(jié)省一個觸發(fā)器資源,其余情況下使用的資源相同,視狀態(tài)數(shù)和狀態(tài)編碼方式?jīng)Q定),Mealy型比Moore型輸出超前一個時鐘周期。

三段式狀態(tài)機

一段式一個always,既描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的輸入輸出,當前狀態(tài)用寄存器輸出。一段式寫法簡單,但是不利于維護,狀態(tài)擴展麻煩,狀態(tài)復雜時易出錯,不推薦

二段式兩個always,時序邏輯與組合邏輯分開,一個always塊采用同步時序描述狀態(tài)轉(zhuǎn)移;另一個always塊采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律以及輸出,當前狀態(tài)用組合邏輯輸出,可能出現(xiàn)競爭冒險,產(chǎn)生毛刺,而且不利于約束,不利于綜合器和布局布線器實現(xiàn)高性能的設計;

三段式三個always,一個always模塊采用同步時序描述狀態(tài)轉(zhuǎn)移;一個always采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律;第三個always塊使用同步時序描述狀態(tài)輸出,寄存器輸出。

三段式與二段式相比,關鍵在于根據(jù)狀態(tài)轉(zhuǎn)移規(guī)律,在上一狀態(tài)根據(jù)輸入條件判斷出當前狀態(tài)的輸出,從而在不插入額外時鐘節(jié)拍的前提下,實現(xiàn)了寄存器輸出。

狀態(tài)機序列檢測

使用三段式FSM有限狀態(tài)機進行序列檢測,使用摩爾型狀態(tài)機,最終輸出與輸入無關。

使用狀態(tài)機檢測“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個時鐘檢測到序列,下一個時鐘輸出高電平;

根據(jù)待檢測的序列“1101”確定狀態(tài),其中:

S1為檢測到第1個有效位“1”;

S2為檢測到2個有效位“11”;

S3為檢測到3個有效位“110”;

S4位檢測到4個有效位“1101”;

IDLE為其他狀態(tài);

IDLE:初始狀態(tài),除S1~S4外的其他所有狀態(tài)

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; //定義狀態(tài),這里采用的獨熱碼(One-Hot),F(xiàn)PGA中推薦用獨熱碼和格雷碼(Gray)//狀態(tài)較少時(4-24個狀態(tài))用獨熱碼效果好,狀態(tài)多時格雷碼(狀態(tài)數(shù)大于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;             //現(xiàn)態(tài)reg [4:0] next_state;                 //次態(tài) //三段式FSM,第一段,同步時序邏輯,描述狀態(tài)切換,這里的寫法固定always @ ( posedge clk )begin       if(!rst_n ) begin              current_state<= IDLE;       end       elsebegin              current_state<= next_state;       endend //三段式FSM,第二段,組合邏輯,判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律//這里面用"="賦值和用"<="沒區(qū)別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,第三段,同步時序邏輯,描述狀態(tài)輸出,摩爾型輸出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

其中,狀態(tài)機部分為:

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

這里的狀態(tài)機考慮到復位的情況,不論處在哪個狀態(tài),當復位信號有效時,均回到IDLE初始狀態(tài)。

仿真測試文件(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/數(shù)字IC筆試題——序列檢測(FSM狀態(tài)機)【狀態(tài)機序列檢測】

文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 狀態(tài)機
    +關注

    關注

    2

    文章

    489

    瀏覽量

    27434
  • 摩爾
    +關注

    關注

    0

    文章

    11

    瀏覽量

    8588
  • 狀態(tài)寄存器

    關注

    0

    文章

    38

    瀏覽量

    7058

原文標題:FPGA/數(shù)字IC筆試題——序列檢測(FSM狀態(tài)機)【狀態(tài)機序列檢測】

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    采用米利狀態(tài)機電路設計

    首先可以確定采用米利狀態(tài)機設計該電路。因為該電路在連續(xù)收到信號0101時,輸出為1,其他情況下輸出為0,所以采用米利
    的頭像 發(fā)表于 09-08 14:06 ?7998次閱讀
    采用<b class='flag-5'>米利</b><b class='flag-5'>型</b>的<b class='flag-5'>狀態(tài)機</b>電路設計

    Spring狀態(tài)機的實現(xiàn)原理和使用方法

    說起 Spring 狀態(tài)機,大家很容易聯(lián)想到這個狀態(tài)機和設計模式中狀態(tài)模式的區(qū)別是啥呢?沒錯,Spring 狀態(tài)機就是
    的頭像 發(fā)表于 12-26 09:39 ?1778次閱讀
    Spring<b class='flag-5'>狀態(tài)機</b>的實現(xiàn)原理和使用方法

    Verilog狀態(tài)機+設計實例

    的是有限狀態(tài)機(Finite-State Machine,F(xiàn)SM),簡稱為狀態(tài)機,表示在有限個狀態(tài)以及這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學模型。 二、分類 在verilog中常使用的
    的頭像 發(fā)表于 02-12 19:07 ?3419次閱讀
    Verilog<b class='flag-5'>狀態(tài)機</b>+設計實例

    玩轉(zhuǎn)Spring狀態(tài)機

    說起Spring狀態(tài)機,大家很容易聯(lián)想到這個狀態(tài)機和設計模式中狀態(tài)模式的區(qū)別是啥呢?沒錯,Spring狀態(tài)機就是
    的頭像 發(fā)表于 06-25 14:21 ?813次閱讀
    玩轉(zhuǎn)Spring<b class='flag-5'>狀態(tài)機</b>

    狀態(tài)機舉例

    狀態(tài)機舉例 你可以指定狀態(tài)寄存器和狀態(tài)機狀態(tài)。以下是一個有四種狀態(tài)的普通狀態(tài)機。 // Th
    發(fā)表于 03-28 15:18 ?951次閱讀

    狀態(tài)機原理及用法

    狀態(tài)機原理及用法狀態(tài)機原理及用法狀態(tài)機原理及用法
    發(fā)表于 03-15 15:25 ?0次下載

    狀態(tài)機和組合邏輯的冒險競爭淺析

    有限狀態(tài)機(Finite State Machine, FSM),根據(jù)狀態(tài)機的輸出是否與輸入有關,可分為Moore狀態(tài)機和Mealy
    發(fā)表于 06-25 08:42 ?3923次閱讀

    狀態(tài)機概述 如何理解狀態(tài)機

    本篇文章包括狀態(tài)機的基本概述以及通過簡單的實例理解狀態(tài)機
    的頭像 發(fā)表于 01-02 18:03 ?1w次閱讀
    <b class='flag-5'>狀態(tài)機</b>概述  如何理解<b class='flag-5'>狀態(tài)機</b>

    正點原子開拓者FPGA視頻:狀態(tài)機

    狀態(tài)機狀態(tài)寄存器和組合邏輯電路構成,能夠根據(jù)控制信號按照預先設定的狀態(tài)進行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關信號動作,完成特定操作的控制中心。狀態(tài)機分為
    的頭像 發(fā)表于 09-19 07:00 ?2400次閱讀
    正點原子開拓者FPGA視頻:<b class='flag-5'>狀態(tài)機</b>

    FPGA之狀態(tài)機的功能簡述與學習建議

    狀態(tài)機狀態(tài)寄存器和組合邏輯電路構成,能夠根據(jù)控制信號按照預先設定的狀態(tài)進行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關信號動作,完成特定操作的控制中心。狀態(tài)機分為
    的頭像 發(fā)表于 10-09 07:07 ?3473次閱讀

    FPGA之狀態(tài)機練習:設計思路(4)

    狀態(tài)機狀態(tài)寄存器和組合邏輯電路構成,能夠根據(jù)控制信號按照預先設定的狀態(tài)進行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關信號動作,完成特定操作的控制中心。狀態(tài)機分為
    的頭像 發(fā)表于 05-28 07:03 ?2871次閱讀

    什么是狀態(tài)機 狀態(tài)機的描述三種方法

    信號是否與電路的輸入有關分為Mealy狀態(tài)機和Moore狀態(tài)機。電路的輸出信號不僅與電路當前狀態(tài)有關,還與電路的輸入有關,稱為 Meal
    的頭像 發(fā)表于 11-16 17:39 ?2.6w次閱讀

    FPGA:狀態(tài)機簡述

    本文目錄 前言 狀態(tài)機簡介 狀態(tài)機分類 Mealy 狀態(tài)機 Moore 狀態(tài)機
    的頭像 發(fā)表于 11-05 17:58 ?7193次閱讀
    FPGA:<b class='flag-5'>狀態(tài)機</b>簡述

    Verilog設計過程中狀態(tài)機的設計方法

    的基本要素有三個:狀態(tài)、輸出和輸入。 根據(jù)狀態(tài)機的輸出是否與輸入條件有關,可將狀態(tài)機分為: 摩爾(Moore)和米里(Mealy)
    的頭像 發(fā)表于 06-25 11:04 ?2498次閱讀

    什么是狀態(tài)機?狀態(tài)機的種類與實現(xiàn)

    狀態(tài)機,又稱有限狀態(tài)機(Finite State Machine,F(xiàn)SM)或米利狀態(tài)機(Mealy Machine),是一種描述系統(tǒng)狀態(tài)變化
    的頭像 發(fā)表于 10-19 10:27 ?8558次閱讀