精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

FSM狀態機序列檢測的方法

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

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

(2)使用 狀態機產生序列 “11010110”,串行循環輸出該序列;

(3)使用 狀態機檢測“1101” ,串行輸入的測試序列為“11101101011010”,輸出信號為valid有效信號,檢測到時輸出高,否則為低, 考慮序列疊加情況 ,比如“1101101”,則有兩個“1101”,

即:

1.jpg

11101101011010,在第5個時鐘檢測到序列,下一個時鐘輸出高電平;

11101101011010,在第8個時鐘檢測到序列,下一個時鐘輸出高電平;

11101101011010,在第13個時鐘檢測到序列,下一個時鐘輸出高電平;

給出WORD或PDF版本的報告,包括但不限于文字說明、代碼、仿真測試圖等。

【解答】:

狀態機類型

狀態機由狀態寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心。有限狀態機簡寫為 FSM(Finite 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.jpg

11101101011010,在第5個時鐘檢測到序列,下一個時鐘輸出高電平;

11101101011010,在第8個時鐘檢測到序列,下一個時鐘輸出高電平;

11101101011010,在第13個時鐘檢測到序列,下一個時鐘輸出高電平;

根據待檢測的序列“1101”確定狀態,其中:

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

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

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

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

IDLE為其他狀態;

IDLE:初始狀態,除S1~S4外的其他所有狀態

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

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

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

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

摩爾型,輸出和輸入無關,S4時無論輸入什么,都輸出1

圖片

圖片

三段式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;
       end
end

//三段式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
       end
end

//三段式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
       end
end

endmodule

綜合后的RTL圖:

圖片

其中,狀態機部分為:

圖片

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

仿真測試文件(TestBench):

/************************************************************
**   Author    :FPGA探索者公眾號
**   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”,檢測到3次有效的“1101”。

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RTL
    RTL
    +關注

    關注

    1

    文章

    385

    瀏覽量

    59701
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27478
  • fsm
    fsm
    +關注

    關注

    0

    文章

    35

    瀏覽量

    12815
  • 狀態寄存器
    +關注

    關注

    0

    文章

    38

    瀏覽量

    7073
  • MODELSIM仿真
    +關注

    關注

    0

    文章

    15

    瀏覽量

    7278
收藏 人收藏

    評論

    相關推薦

    Verilog狀態機+設計實例

    在verilog中狀態機的一種很常用的邏輯結構,學習和理解狀態機的運行規律能夠幫助我們更好地書寫代碼,同時作為一種思想方法,在別的代碼設計中也會有所幫助。 一、簡介 在使用過程中我們常說
    的頭像 發表于 02-12 19:07 ?3833次閱讀
    Verilog<b class='flag-5'>狀態機</b>+設計實例

    狀態機編程

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

    淺談有限狀態機FSM——以序列檢測為例

    :1101序列檢測器Mealy狀態機狀態轉移圖1101序列檢測器Moore
    發表于 09-25 09:35

    如何去實現有限狀態機FSM的程序設計呢

    什么是有限狀態機FSM呢?如何去實現有限狀態機FSM的程序設計呢?
    發表于 01-21 07:04

    使用ModelSim自動生成狀態機FSM狀態轉換圖

    HDL代碼設計中重要的內容之一就是設計程序的狀態機FSM狀態轉換控制著整個程序的流程,為了理解程序,我們經常需要把狀態機狀態轉換圖畫出來
    發表于 02-10 15:39 ?1.5w次閱讀
    使用ModelSim自動生成<b class='flag-5'>狀態機</b><b class='flag-5'>FSM</b>的<b class='flag-5'>狀態</b>轉換圖

    初學者對有限狀態機FSM)的設計的認識

    有限狀態機FSM)是一種常見的電路,由時序電路和組合電路組成。設計有限狀態機的第一步是確定采用Moore狀態機還是采用Mealy狀態機
    發表于 02-11 13:51 ?4274次閱讀
    初學者對有限<b class='flag-5'>狀態機</b>(<b class='flag-5'>FSM</b>)的設計的認識

    Linux編程之有限狀態機FSM的理解與實現

    有限狀態機(finite state machine)簡稱FSM,表示有限個狀態及在這些狀態之間的轉移和動作等行為的數學模型,在計算機領域有著廣泛的應用。
    發表于 05-15 16:53 ?2000次閱讀
    Linux編程之有限<b class='flag-5'>狀態機</b><b class='flag-5'>FSM</b>的理解與實現

    使用函數指針的方法實現狀態機

    之前寫過一篇狀態機的實用文章,很多朋友說有幾個地方有點難度不易理解,今天給大家換種簡單寫法,使用函數指針的方法實現狀態機狀態機簡介 有限狀態機
    的頭像 發表于 10-19 09:36 ?2376次閱讀
    使用函數指針的<b class='flag-5'>方法</b>實現<b class='flag-5'>狀態機</b>

    摩爾型狀態機與米利型狀態機的區別是什么

    FSM有限狀態機序列產生,序列檢測,是FPGA和數字IC相關崗位必須要掌握的知識點,在筆試和面試中都非常常見。
    的頭像 發表于 03-14 17:42 ?1.7w次閱讀

    Verilog狀態機的類型

    有限狀態機(Finite-State Machine,FSM),簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。
    的頭像 發表于 06-01 15:23 ?1788次閱讀
    Verilog<b class='flag-5'>狀態機</b>的類型

    序列檢測一定要用狀態機嗎?

    那些年,你總是不停的說序列檢測,每當有人談到序列檢測你便說自己會一、二、三段式moore、mealy型狀態機,茴字有幾種寫法...
    的頭像 發表于 06-26 16:52 ?764次閱讀
    <b class='flag-5'>序列</b><b class='flag-5'>檢測</b>一定要用<b class='flag-5'>狀態機</b>嗎?

    基于LSM6DSOX的FSM狀態機的腕部動作識別

    電子發燒友網站提供《基于LSM6DSOX的FSM狀態機的腕部動作識別.pdf》資料免費下載
    發表于 07-31 10:23 ?0次下載
    基于LSM6DSOX的<b class='flag-5'>FSM</b><b class='flag-5'>狀態機</b>的腕部動作識別

    什么是狀態機狀態機的種類與實現

    狀態機,又稱有限狀態機(Finite State Machine,FSM)或米利狀態機(Mealy Machine),是一種描述系統狀態變化
    的頭像 發表于 10-19 10:27 ?9013次閱讀

    什么是有限狀態機?如何解決傳統有限狀態機狀態爆炸」問題?

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

    在Verilog中實現Moore型和Mealy型狀態機方法簡析

    編寫能夠被綜合工具識別的狀態機,首先需要理解狀態機的基本概念和分類。狀態機(FSM)是表示有限個狀態以及在這些
    的頭像 發表于 05-01 11:38 ?1444次閱讀