[仕上げ] FSM有限状態マシン

概要 - 有限状態機械FSMは何ですか

FSMと略す有限状態マシン-Finiteステートマシンは、状態及びこれらと他の州間の転送とアクションの有限個の行動の数理モデルで、広くコンピュータの分野で使用されてきました。アクションをトリガーする状態によってトリガトリガ状態管理、状態監視、状態、:FSMは、典型的には、いくつかの要素が含まれています。

以下は、FSMの説明のためのリンクアドレスについてのwikiです有限状態マシン-WIKI

有限状態機械(FSM)または有限状態オートマトン(複数:オートマトン)、または単に状態マシンは、コンピュータプログラムと順序論理回路の両方を設計するために使用される計算の数学的モデルです。これは、状態の有限数の1にすることができ、抽象マシンとして考えられています。マシンは、一度に1つだけの状態になっています。それは、任意の時点の状態は、現在の状態と呼ばれています。トリガ・イベントや条件によって開始されたときにそれがある状態から別の状態に変更することができます。これは、遷移と呼ばれています。特定のFSMは、その状態のリスト、および各遷移のためのトリガ条件によって定義されます。

FSMの二つの形式

FPGAハードウェア回路にかかわらず、状態機械のどのような種類の、我々は、Fは、現在の状態と入力信号の関数であると仮定する。ステートマシンが出力され、Gは、現在の状態の関数と組合せ論理G.の出力によって提供される入力信号であります 次のように状態機械のロジックのため、それが表すことができます。

下一个状态 = F(当前状态,输入信号);
输出信号   = G(当前状态,输入信号);

ステートマシンでは、我々は、ステートマシンの機械出力と入力は、ステートマシンミーリとムーアステートマシンある二つのモデルに分割されている状態の関係に基づきます。これら二つの部分、以下の詳細。

ムーアステートマシン

ムーアステートマシンがある順序論理出力のみの現在の状態に依存ステートマシンタイプ。この時、出力式があり输出信号 = G(当前状态,输入信号);、この。

ムーア状態マシンクロック同期構造を以下に示すように、その出力電流のみの状態によって決定され、図の論理Gから見ることができます。

ムーアステートマシンクロック同期構造

ミーリステートマシン

ミーリステートマシンがある順序論理出力がオン状態だけでなく、入力にのみ依存するものではなく、状態マシンタイプ。このとき、式があり、ステートマシンの出力输出信号 = G(当前状态,输入信号);これ。

ミーリー状態マシンクロック同期構造を以下に示すように、その出力が入力することによって、現在の状態と判断された図の論理Gから見ることができます。

ミーリステートマシンクロック同期構造

ミーリ・ステート・マシン対ムーア

  1. 速い「応答で」ムーア・マシンよりもミーリ・マシン。

    唯一のムーア・マシン出力は現在の状態に関連し、一方、現在の状態と入力の出力とミーリ・マシン、。現在のサイクルでミーリー機械の即時応答入力、ムーア・マシンの入力は次の状態、出力に影響を与えることにより、次の状態に影響を与えます。前方のムーア・マシン・サイクルの出力シーケンスの終わりよりもミーリー機械、すなわち、「応答速度」速いです。良いタイミングでムーア・マシン出力遅延時間を有する、クロック同期は容易に入手可能な、ムーア・マシン、現在のサイクルでミーリ・マシン出力、より長いパス(組合せ論理)。

  2. 以下ミーリステートマシンは、ムーア・マシンの構造は単純です。

    出力に関するムーア・マシンの現在の状態のみの出力状態に対応するので、ムーア・マシンは、より多くの状態を有します。ミーリーとムーア・マシンとの間の各ミーリー機械の、ムーア・マシンは、同等の、ムーアステートマシンの数とミーリステートマシンに対応する数の出力物の上限が、お互いに変換することができます。

  3. 数によって反応を引き起こすために、ステートマシン、この目的のために以下のトリガと、小さいとミーリステートマシン。

のムーアとミーリステートマシンインターチェンジ

与えられた順序論理関数はミーリー機で実現することができるため、ムーア・マシンを実現することができます。後方出力ミーリー機よりムーア・マシンサイクルの特性は、2台のステートマシン間の変換を実現することができます。ムーア・マシンアプローチを変換するミーリー機、出力状態を変更するために、対応する二次電流の出力状態、特性の同等数の状態の併用です。ムーア・マシンアプローチを変換するミーリ・マシンは、いくつかの状況を添加しながら、対応する出力サブ状態の現在の状態の出力を修正することです。以下に示すように、ミーリー状態マップは、図のムーア状態機械に変換されます。

ミーリ型マシンは、ムーア・マシンに変換され、

上記のように、変換ミーリー型機は、現在の出力は、次の出力タイミングに変更される限り、ムーア・マシン・タイプです。状態Aの場合、4つの矢印ポインティングがあり、4つの状態がAの現在の状態で次の状態に表現することができ、電流出力は同時に0、0である状態Aの内部に移動することができ、ムーア・マシン状態を示しています0が出力されます。同様に、それぞれ0 B / Cの状態を移行させることができます。しかし、状態Dのために、そこに指す2つの矢印があり、異なる出力値が(各状態は、異なる状態の出力は、異なる使用する必要が示す出力に対応して二つの状態D1とD2に分解Dを述べる必要がある持っている、すなわち、それは理由ムーア・マシンは、フル・ムーアマシン状態モデルを取得するために、)以上の状態があります。

同様に、D1 / D2は、2つの間の2つの状態のA / C状態であるので、図変換ミーリー機械のムーア・マシンは、ムーア・マシンは、限り、次の状態の出力は、ミーリー機出力の現在の状態に変更される場合、等価とA / Cノードとの間のノードの等価D1 / D2は、二つの状態のステータスにマージすることができます。

ステートマシン設計の原則

ムーア・マシンと回路のミーリマシンの実装は同期式順序論理回路の2つの異なる形態、それらの間に機能的な違いであり、相互に変換することができます。ムーア型回路、安定した出力順序、出力シーケンスクロック・サイクルを生成し、早期ムーアミーリ型の回路方式の回路。タイミング設計では、実際のニーズに応じて、2つの回路の結合特性は、選択されました。

順序回路のカウンタ状態によって共通カウンタは、種類に関係なくミーリー又はムーア型回路の、同じ複雑さを固定されています。

タイミング選択回路設計タイプにミーリとムーア型の回路原理である:ときに必要な出力とできるだけ簡単な入力回路に所望の高速応答、選択ミーリー型回路。出力が安定したタイミング要件である場合、出力シーケンスは1サイクル後を受け入れ、ムーアタイプ選択回路回路、適切に選択されたムーア型回路の複雑さを増大させることなくすることができます。

ムーアステートマシン

3段目の状態マシン(推奨)

- ノーマル

スリーステートマシン -

// 第一个always块,描述当前状态的状态寄存器,non-blocking
always @ (posedge clk or negedge rst_n)    begin
    if (!rst_n)
        curr_state    <= idle;
    else
        curr_state    <= next_state;
end

// 第二个always块,描述状态转移,即下一状态的状态寄存器,blocking
always @ (*)    begin
    next_state    = idle;    // 初始化
    case (curr_state)
        idle:    begin
            if (...)
                next_state    = sx;
            else
                next_state    = sy;
        end
        ...
        default:
            next_state    = sz;
    endcase
end

// 第三个always块,组合逻辑描述输出,blocking
always @ (*)    begin
    if (!rst_n)    begin
        o1    = 1'b0;
    end
    else    begin
        case (curr_state)
            s1:    begin
                o1 = 1'b1;
            end
            ...
            default:    begin
                o1    = 1'b0;
            end
        endcase
    end
end

B - 改善

スリーステートマシン -  B

// 第三个always块,时序逻辑描述输出,non-blocking
// 此时为时序逻辑
always @ (posedge clk or negedge rst_n)    begin
    if (!rst_n)    begin
        o1    <= 1'b0;
    end
    else    begin
        case (curr_state)   // 注意此处为当前状态
            s1:    begin
                o1  <= 1'b1;
            end
            ...
            default:    begin
                o1  <= 1'b0;
            end
        endcase
    end
end

C - 改善

スリーステートマシン -  C

// 第三个always块,时序逻辑描述输出,non-blocking
// 此时为时序逻辑
always @ (posedge clk or negedge rst_n)    begin
    if (!rst_n)    begin
        o1    <= 1'b0;
    end
    else    begin
        case (next_state)   // 注意此处为前一状态
            s1:    begin
                o1  <= 1'b1;
            end
            ...
            default:    begin
                o1  <= 1'b0;
            end
        endcase
    end
end

参考感謝

[1] ステートマシンの二種類

おすすめ

転載: www.cnblogs.com/airbird/p/11455221.html
おすすめ