日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > ZYNQ


本文目錄

  1. 前言

  2. 狀態(tài)機簡介

  3. 狀態(tài)機分類
    Mealy 型狀態(tài)機
    Moore 型狀態(tài)機

  4. 狀態(tài)機描述
    一段式狀態(tài)機
    二段式狀態(tài)機
    三段式狀態(tài)機

  5. 狀態(tài)機優(yōu)缺點

  6. 總結(jié)

  7. 擴展-四段式狀態(tài)機

01. 前言

狀態(tài)機是FPGA設(shè)計中一種非常重要、非常根基的設(shè)計思想,堪稱FPGA的靈魂,貫穿FPGA設(shè)計的始終。

02. 狀態(tài)機簡介

什么是狀態(tài)機:狀態(tài)機通過不同的狀態(tài)遷移來完成特定的邏輯操作(時序操作)狀態(tài)機是許多數(shù)字系統(tǒng)的核心部件, 是一類重要的時序邏輯電路。通常包括三個部分:
下一個狀態(tài)的邏輯電路
存儲狀態(tài)機當前狀態(tài)的時序邏輯電路
輸出組合邏輯電路

03. 狀態(tài)機分類

通常, 狀態(tài)機的狀態(tài)數(shù)量有限, 稱為有限狀態(tài)機(FSM) 。由于狀態(tài)機所有觸發(fā)器的時鐘由同一脈沖邊沿觸發(fā), 故也稱之為同步狀態(tài)機。

根據(jù)狀態(tài)機的輸出信號是否與電路的輸入有關(guān)分為 Mealy 型狀態(tài)機和 Moore 型狀態(tài)機

3.1,Mealy 型狀態(tài)機

電路的輸出信號不僅與電路當前狀態(tài)有關(guān), 還與電路的輸入有關(guān)

3.2,Moore 型狀態(tài)機

電路的輸出僅僅與各觸發(fā)器的狀態(tài), 不受電路輸入信號影響或無輸入

狀態(tài)機的狀態(tài)轉(zhuǎn)移圖, 通常也可根據(jù)輸入和內(nèi)部條件畫出。一般來說, 狀態(tài)機的設(shè)計包含下列設(shè)計步驟:

  • 根據(jù)需求和設(shè)計原則, 確定是 Moore 型還是 Mealy 型狀態(tài)機;

  • 分析狀態(tài)機的所有狀態(tài), 對每一狀態(tài)選擇合適的編碼方式, 進行編碼;

  • 根據(jù)狀態(tài)轉(zhuǎn)移關(guān)系和輸出繪出狀態(tài)轉(zhuǎn)移圖;

  • 構(gòu)建合適的狀態(tài)機結(jié)構(gòu), 對狀態(tài)機進行硬件描述。

04. 狀態(tài)機描述

狀態(tài)機的描述通常有三種方法, 稱為一段式狀態(tài)機, 二段式狀態(tài)機和三段式狀態(tài)機。
狀態(tài)機的描述通常包含以下四部分:

  • 利用參數(shù)定義語句 parameter 描述狀態(tài)機各個狀態(tài)名稱, 即狀態(tài)編碼。狀態(tài)編碼通常有很多方法包含自然二進制編碼, One-hot 編碼,格雷編碼碼等;

  • 用時序的 always 塊描述狀態(tài)觸發(fā)器實現(xiàn)狀態(tài)存儲;

  • 使用敏感表和 case 語句(也采用 if-else 等價語句) 描述狀態(tài)轉(zhuǎn)換邏輯;

  • 描述狀態(tài)機的輸出邏輯。

下面根據(jù)狀態(tài)機的三種方法來具體說明

4.1,一段式狀態(tài)機

 1module detect_1(  2input clk_i,  3input rst_n_i,  4output out_o  5);  6reg out_r;  7//狀態(tài)聲明和狀態(tài)編碼  8reg [1:0] state;  9parameter [1:0] S0=2'b00; 10parameter [1:0] S1=2'b01; 11parameter [1:0] S2=2'b10; 12parameter [1:0] S3=2'b11; 13always@(posedge clk_i) 14begin 15 if(!rst_n_i)begin 16 state<=0; 17 out_r<=1'b0; 18 end 19 else 20 case(state) 21 S0 : 22 begin 23 out_r<=1'b0; 24 state<= S1; 25 end 26 S1 : 27 begin 28 out_r<=1'b1; 29 state<= S2; 30 end 31 S2 : 32 begin 33 out_r<=1'b0; 34 state<= S3; 35 end 36 S3 : 37 begin 38 out_r<=1'b1; 39 end 40 endcase 41end 42assign out_o=out_r; 43endmodul 44 

一段式狀態(tài)機是應該避免使用的, 該寫法僅僅適用于非常簡單的狀態(tài)機設(shè)計。

4.2,兩段式狀態(tài)機

 1module detect_2(  2 input clk_i,  3 input rst_n_i,  4 output out_o  5 );  6 reg out_r;  7 //狀態(tài)聲明和狀態(tài)編碼  8 reg [1:0] Current_state;  9 reg [1:0] Next_state; 10 parameter [1:0] S0=2'b00; 11 parameter [1:0] S1=2'b01; 12 parameter [1:0] S2=2'b10; 13 parameter [1:0] S3=2'b11; 14 //時序邏輯: 描述狀態(tài)轉(zhuǎn)換 15 always@(posedge clk_i) 16 begin 17 if(!rst_n_i) 18 Current_state<=0; 19 else 20 Current_state<=Next_state; 21 end 22 //組合邏輯:描述下一狀態(tài)和輸出 23 always@(*) 24 begin 25 out_r=1'b0; 26 case(Current_state) 27 S0 : 28 begin 29 out_r=1'b0; 30 Next_state= S1; 31 end 32 S1 : 33 begin 34 out_r=1'b1; 35 Next_state= S2; 36 end 37 S2 : 38 begin 39 out_r=1'b0; 40 Next_state= S3; 41 end 42 S3 : 43 begin 44 out_r=1'b1; 45 Next_state=Next_state; 46 end 47 endcase 48 end 49 assign out_o = out_r; 50endmodule 51 

兩段式狀態(tài)機采用兩個 always 模塊實現(xiàn)狀態(tài)機的功能, 其中一個 always 采用同步時序邏輯描述狀態(tài)轉(zhuǎn)移, 另一個 always 采用組合邏輯來判斷狀態(tài)條件轉(zhuǎn)移。

4.3,三段式狀態(tài)機

 1module detect_3(  2 input clk_i,  3 input rst_n_i,  4 output out_o  5 );  6 reg out_r;  7 //狀態(tài)聲明和狀態(tài)編碼  8 reg [1:0] Current_state;  9 reg [1:0] Next_state; 10 parameter [1:0] S0=2'b00; 11 parameter [1:0] S1=2'b01; 12 parameter [1:0] S2=2'b10; 13 parameter [1:0] S3=2'b11; 14 //時序邏輯: 描述狀態(tài)轉(zhuǎn)換 15 always@(posedge clk_i) 16 begin 17 if(!rst_n_i) 18 Current_state<=0; 19 else 20 Current_state<=Next_state; 21 end 22 //組合邏輯: 描述下一狀態(tài) 23 always@(*) 24 begin 25 case(Current_state) 26 S0: 27 Next_state = S1; 28 S1: 29 Next_state = S2; 30 S2: 31 Next_state = S3; 32 S3: 33 begin 34 Next_state = Next_state; 35 end 36 default : 37 Next_state = S0; 38 endcase 39 end 40 //輸出邏輯: 讓輸出 out, 經(jīng)過寄存器 out_r 鎖存后輸出, 消除毛刺 41 always@(posedge clk_i) 42 begin 43 if(!rst_n_i) 44 out_r<=1'b0; 45 else 46 begin 47 case(Current_state) 48 S0,S2: 49 out_r<=1'b0; 50 S1,S3: 51 out_r<=1'b1; 52 default : 53 out_r<=out_r; 54 endcase 55 end 56 end 57 58 assign out_o=out_r; 59endmodule 60 

三段式狀態(tài)機在第一個 always 模塊采用同步時序邏輯方式描述狀態(tài)轉(zhuǎn)移, 第二個always 模塊采用組合邏輯方式描述狀態(tài)轉(zhuǎn)移規(guī)律, 第三個 always 描述電路的輸出。通常讓輸出信號經(jīng)過寄存器緩存之后再輸出, 消除電路毛刺。

05. 狀態(tài)機優(yōu)缺點

1、一段式狀態(tài)機

只涉及時序電路,沒有競爭與冒險,同時消耗邏輯比較少。

但是如果狀態(tài)非常多,一段式狀態(tài)機顯得比較臃腫,不利于維護。

2、兩段式狀態(tài)機

當一個模塊采用時序(狀態(tài)轉(zhuǎn)移),一個模塊采用組合時候(狀態(tài)機輸出),組合邏輯電路容易造成競爭與冒險;當兩個模塊都采用時序,可以避免競爭與冒險的存在,但是整個狀態(tài)機的時序上會延時一個周期。

兩段式狀態(tài)機是推薦的狀態(tài)機設(shè)計方法。

3、三段式狀態(tài)機

三段式狀態(tài)機在狀態(tài)轉(zhuǎn)移時采用組合邏輯電路+格雷碼,避免了組合邏輯的競爭與冒險;狀態(tài)機輸出采用了同步寄存器輸出,也可以避免組合邏輯電路的競爭與冒險;采用這兩種方法極大的降低了競爭冒險。并且在狀態(tài)機的采用這種組合邏輯電路+次態(tài)寄存器輸出,避免了兩段式狀態(tài)機的延時一個周期(三段式狀態(tài)機在上一狀態(tài)中根據(jù)輸入條件判斷當前狀態(tài)的輸出,從而在不插入額外時鐘節(jié)拍的前提下,實現(xiàn)寄存器的輸出)。

三段式狀態(tài)機也是比較推崇的,主要是由于維護方便, 組合邏輯與時序邏輯完全獨立。

06. 總結(jié)

靈活選擇狀態(tài)機,不一定要拘泥理論,怎樣方便怎樣來

07.擴展

四段式不是指三個always代碼,而是四段程序。使用四段式的寫法,可參照明德?lián)PGVIM特色指令Ztj產(chǎn)生的狀態(tài)機模板。

明·德·揚四段式狀態(tài)機符合一次只考慮一個因素的設(shè)計理念。

  • 第一段代碼,照抄格式,完全不用想其他的。

  • 第二段代碼,只考慮狀態(tài)之間的跳轉(zhuǎn),也就是說各個狀態(tài)機之間跳轉(zhuǎn)關(guān)系。

  • 第三段代碼,只考慮跳轉(zhuǎn)條件。

  • 第四段,每個信號逐個設(shè)計。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉