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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

FSM狀態(tài)機(jī)序列檢測(cè)的方法

冬至子 ? 來(lái)源:FPGA探索者 ? 作者:FPGA探索者 ? 2023-06-26 16:45 ? 次閱讀

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

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

(3)使用 狀態(tài)機(jī)檢測(cè)“1101” ,串行輸入的測(cè)試序列為“11101101011010”,輸出信號(hào)為valid有效信號(hào),檢測(cè)到時(shí)輸出高,否則為低, 考慮序列疊加情況 ,比如“1101101”,則有兩個(gè)“1101”,

即:

1.jpg

11101101011010,在第5個(gè)時(shí)鐘檢測(cè)到序列,下一個(gè)時(shí)鐘輸出高電平;

11101101011010,在第8個(gè)時(shí)鐘檢測(cè)到序列,下一個(gè)時(shí)鐘輸出高電平;

11101101011010,在第13個(gè)時(shí)鐘檢測(cè)到序列,下一個(gè)時(shí)鐘輸出高電平;

給出WORD或PDF版本的報(bào)告,包括但不限于文字說(shuō)明、代碼、仿真測(cè)試圖等。

【解答】:

狀態(tài)機(jī)類型

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

第一類,輸出只和狀態(tài)有關(guān)而與輸入無(wú)關(guān),則稱為Moore狀態(tài)機(jī);

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

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

** Moore** :輸出信號(hào)只取決于當(dāng)前狀態(tài);

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

三段式狀態(tài)機(jī)

一段式一個(gè)****always ,既描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的輸入輸出,當(dāng)前狀態(tài)用寄存器輸出。一段式寫(xiě)法簡(jiǎn)單,但是不利于維護(hù),狀態(tài)擴(kuò)展麻煩,狀態(tài)復(fù)雜時(shí)易出錯(cuò),不推薦

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

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

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

狀態(tài)機(jī)序列檢測(cè)

使用三段式FSM有限狀態(tài)機(jī)進(jìn)行序列檢測(cè) ,使用 摩爾型狀態(tài)機(jī) ,最終輸出與輸入無(wú)關(guān)。

使用狀態(tài)機(jī)檢測(cè)“1101”,串行輸入的測(cè)試序列為“11101101011010”,輸出信號(hào)為valid有效信號(hào),檢測(cè)到時(shí)輸出高,否則為低, 考慮序列疊加情況 ,比如“1101101”,則有兩個(gè)“1101”,

即:

1.jpg

11101101011010,在第5個(gè)時(shí)鐘檢測(cè)到序列,下一個(gè)時(shí)鐘輸出高電平;

11101101011010,在第8個(gè)時(shí)鐘檢測(cè)到序列,下一個(gè)時(shí)鐘輸出高電平;

11101101011010,在第13個(gè)時(shí)鐘檢測(cè)到序列,下一個(gè)時(shí)鐘輸出高電平;

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

S1為檢測(cè)到第1個(gè)有效位“1”;

S2為檢測(cè)到2個(gè)有效位“11”;

S3為檢測(cè)到3個(gè)有效位“110”;

S4位檢測(cè)到4個(gè)有效位“1101”;

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

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

S1:1, 來(lái)1則到S2(11),否則回到IDLE;

S2:11, 來(lái)0則到S3(110),否則保持S2(11);

S3:110, 來(lái)1則到S4(1101),否則回到IDLE;

S4:1101, 來(lái)1則到S2(11),否則回到IDLE;

摩爾型,輸出和輸入無(wú)關(guān),S4時(shí)無(wú)論輸入什么,都輸出1

圖片

圖片

三段式FSM的代碼:

/************************************************************
**   Author    :FPGA探索者公眾號(hào)
**   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),這里采用的獨(dú)熱碼(One-Hot),F(xiàn)PGA中推薦用獨(dú)熱碼和格雷碼(Gray)
//狀態(tài)較少時(shí)(4-24個(gè)狀態(tài))用獨(dú)熱碼效果好,狀態(tài)多時(shí)格雷碼(狀態(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,第一段,同步時(shí)序邏輯,描述狀態(tài)切換,這里的寫(xiě)法固定
always @ ( posedge clk )
begin
       if(!rst_n ) begin
              current_state<= IDLE;
       end
       elsebegin
              current_state<= next_state;
       end
end

//三段式FSM,第二段,組合邏輯,判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律
//這里面用"="賦值和用"<="沒(méi)區(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
       end
end

//三段式FSM,第三段,同步時(shí)序邏輯,描述狀態(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
       end
end

endmodule

綜合后的RTL圖:

圖片

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

圖片

這里的狀態(tài)機(jī)考慮到復(fù)位的情況,不論處在哪個(gè)狀態(tài),當(dāng)復(fù)位信號(hào)有效時(shí),均回到IDLE初始狀態(tài)。

仿真測(cè)試文件(TestBench):

/************************************************************
**   Author    :FPGA探索者公眾號(hào)
**   Times      :2020-7-7
************************************************************/
`timescale 1 ns/1 ns


module FSM_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 #5 clk = ~clk;


endmodule

ModelSim仿真如下,輸入“1_1101101_0_1101”,檢測(cè)到3次有效的“1101”。

圖片

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

    關(guān)注

    1

    文章

    384

    瀏覽量

    59518
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    489

    瀏覽量

    27394
  • fsm
    fsm
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    12789
  • 狀態(tài)寄存器
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    7049
  • MODELSIM仿真
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    7264
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog狀態(tài)機(jī)+設(shè)計(jì)實(shí)例

    在verilog中狀態(tài)機(jī)的一種很常用的邏輯結(jié)構(gòu),學(xué)習(xí)和理解狀態(tài)機(jī)的運(yùn)行規(guī)律能夠幫助我們更好地書(shū)寫(xiě)代碼,同時(shí)作為一種思想方法,在別的代碼設(shè)計(jì)中也會(huì)有所幫助。 一、簡(jiǎn)介 在使用過(guò)程中我們常說(shuō)
    的頭像 發(fā)表于 02-12 19:07 ?3171次閱讀
    Verilog<b class='flag-5'>狀態(tài)機(jī)</b>+設(shè)計(jì)實(shí)例

    狀態(tài)機(jī)編程

    ,有限狀態(tài)機(jī)FSM)是實(shí)時(shí)系統(tǒng)設(shè)計(jì)中的一種數(shù)學(xué)模型,是一種重要的、易于建立的、應(yīng)用比較廣泛的、以描述控制特性為主的建模方法,它可以應(yīng)用于從系統(tǒng)分析到設(shè)計(jì)(包括硬件、軟件)的所有階段。很多實(shí)時(shí)系統(tǒng),特別是
    發(fā)表于 07-10 18:00

    淺談?dòng)邢?b class='flag-5'>狀態(tài)機(jī)FSM——以序列檢測(cè)為例

    :1101序列檢測(cè)器Mealy狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖1101序列檢測(cè)器Moore
    發(fā)表于 09-25 09:35

    如何去實(shí)現(xiàn)有限狀態(tài)機(jī)FSM的程序設(shè)計(jì)呢

    什么是有限狀態(tài)機(jī)FSM呢?如何去實(shí)現(xiàn)有限狀態(tài)機(jī)FSM的程序設(shè)計(jì)呢?
    發(fā)表于 01-21 07:04

    使用ModelSim自動(dòng)生成狀態(tài)機(jī)FSM狀態(tài)轉(zhuǎn)換圖

    HDL代碼設(shè)計(jì)中重要的內(nèi)容之一就是設(shè)計(jì)程序的狀態(tài)機(jī)FSM,狀態(tài)轉(zhuǎn)換控制著整個(gè)程序的流程,為了理解程序,我們經(jīng)常需要把狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換圖畫(huà)出來(lái)
    發(fā)表于 02-10 15:39 ?1.5w次閱讀
    使用ModelSim自動(dòng)生成<b class='flag-5'>狀態(tài)機(jī)</b><b class='flag-5'>FSM</b>的<b class='flag-5'>狀態(tài)</b>轉(zhuǎn)換圖

    初學(xué)者對(duì)有限狀態(tài)機(jī)FSM)的設(shè)計(jì)的認(rèn)識(shí)

    有限狀態(tài)機(jī)FSM)是一種常見(jiàn)的電路,由時(shí)序電路和組合電路組成。設(shè)計(jì)有限狀態(tài)機(jī)的第一步是確定采用Moore狀態(tài)機(jī)還是采用Mealy狀態(tài)機(jī)
    發(fā)表于 02-11 13:51 ?4152次閱讀
    初學(xué)者對(duì)有限<b class='flag-5'>狀態(tài)機(jī)</b>(<b class='flag-5'>FSM</b>)的設(shè)計(jì)的認(rèn)識(shí)

    Linux編程之有限狀態(tài)機(jī)FSM的理解與實(shí)現(xiàn)

    有限狀態(tài)機(jī)(finite state machine)簡(jiǎn)稱FSM,表示有限個(gè)狀態(tài)及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型,在計(jì)算機(jī)領(lǐng)域有著廣泛的應(yīng)用。
    發(fā)表于 05-15 16:53 ?1942次閱讀
    Linux編程之有限<b class='flag-5'>狀態(tài)機(jī)</b><b class='flag-5'>FSM</b>的理解與實(shí)現(xiàn)

    使用函數(shù)指針的方法實(shí)現(xiàn)狀態(tài)機(jī)

    之前寫(xiě)過(guò)一篇狀態(tài)機(jī)的實(shí)用文章,很多朋友說(shuō)有幾個(gè)地方有點(diǎn)難度不易理解,今天給大家換種簡(jiǎn)單寫(xiě)法,使用函數(shù)指針的方法實(shí)現(xiàn)狀態(tài)機(jī)。 狀態(tài)機(jī)簡(jiǎn)介 有限狀態(tài)機(jī)
    的頭像 發(fā)表于 10-19 09:36 ?2305次閱讀
    使用函數(shù)指針的<b class='flag-5'>方法</b>實(shí)現(xiàn)<b class='flag-5'>狀態(tài)機(jī)</b>

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

    FSM有限狀態(tài)機(jī),序列產(chǎn)生,序列檢測(cè),是FPGA和數(shù)字IC相關(guān)崗位必須要掌握的知識(shí)點(diǎn),在筆試和面試中都非常常見(jiàn)。
    的頭像 發(fā)表于 03-14 17:42 ?1.6w次閱讀

    Verilog狀態(tài)機(jī)的類型

    有限狀態(tài)機(jī)(Finite-State Machine,FSM),簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。
    的頭像 發(fā)表于 06-01 15:23 ?1656次閱讀
    Verilog<b class='flag-5'>狀態(tài)機(jī)</b>的類型

    序列檢測(cè)一定要用狀態(tài)機(jī)嗎?

    那些年,你總是不停的說(shuō)序列檢測(cè),每當(dāng)有人談到序列檢測(cè)你便說(shuō)自己會(huì)一、二、三段式moore、mealy型狀態(tài)機(jī),茴字有幾種寫(xiě)法...
    的頭像 發(fā)表于 06-26 16:52 ?680次閱讀
    <b class='flag-5'>序列</b><b class='flag-5'>檢測(cè)</b>一定要用<b class='flag-5'>狀態(tài)機(jī)</b>嗎?

    基于LSM6DSOX的FSM狀態(tài)機(jī)的腕部動(dòng)作識(shí)別

    電子發(fā)燒友網(wǎng)站提供《基于LSM6DSOX的FSM狀態(tài)機(jī)的腕部動(dòng)作識(shí)別.pdf》資料免費(fèi)下載
    發(fā)表于 07-31 10:23 ?0次下載
    基于LSM6DSOX的<b class='flag-5'>FSM</b><b class='flag-5'>狀態(tài)機(jī)</b>的腕部動(dòng)作識(shí)別

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

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

    什么是有限狀態(tài)機(jī)?如何解決傳統(tǒng)有限狀態(tài)機(jī)狀態(tài)爆炸」問(wèn)題?

    有限狀態(tài)機(jī)(Finite State Machine,簡(jiǎn)稱FSM)是一種用來(lái)進(jìn)行對(duì)象行為建模的工具,其作用主要是描述對(duì)象在它的生命周期內(nèi)所經(jīng)歷的狀態(tài)序列以及如何響應(yīng)來(lái)自外界的各種事件。
    的頭像 發(fā)表于 02-17 16:09 ?5349次閱讀
    什么是有限<b class='flag-5'>狀態(tài)機(jī)</b>?如何解決傳統(tǒng)有限<b class='flag-5'>狀態(tài)機(jī)</b>「<b class='flag-5'>狀態(tài)</b>爆炸」問(wèn)題?

    在Verilog中實(shí)現(xiàn)Moore型和Mealy型狀態(tài)機(jī)方法簡(jiǎn)析

    編寫(xiě)能夠被綜合工具識(shí)別的狀態(tài)機(jī),首先需要理解狀態(tài)機(jī)的基本概念和分類。狀態(tài)機(jī)(FSM)是表示有限個(gè)狀態(tài)以及在這些
    的頭像 發(fā)表于 05-01 11:38 ?1045次閱讀