Mealy マシンと Moore マシンの概要
有限ステート マシンでは、"ステート" は、ローカル データとチャート アクティビティの組み合わせです。"ステートを計算する" ということは、ローカル データの更新と、現在のアクティブ ステートから新しいステートへの遷移を行うことを意味します。ステート マシン モデルでは、以下に示すように、次のステートは現在のステートとその入力の関数です。
この方程式は、以下を意味します。
- X(n) は、タイム ステップ n のステートを表現 
- X(n+1) は、次のタイム ステップ n+1 のステートを表現 
- u は入力を表現 
ステートはあるタイム ステップから次のタイム ステップまで存続します。
Mealy マシンと Moore マシンのセマンティクス
Mealy マシンと Moore マシンは、有限ステート マシンのモデリングにおける業界標準の基本パラダイムとして幅広く認知されています。Stateflow® チャート セマンティクスのサブセットとして、純粋な Mealy または Moore のセマンティクスを実装したチャートを作成できます。Mealy チャートと Moore チャートは、Embedded Coder®、Simulink® Coder™、および HDL Coder™ ソフトウェアでのシミュレーションとコード生成に使用できます。Mealy と Moore のセマンティクスは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。
Mealy チャートのセマンティクス
Mealy マシンは、クロック エッジで遷移が発生する有限ステート マシンです。Mealy チャートの出力は、次のような入力とステートの関数です。
タイム ステップごとに、Mealy チャートが起動し、入力を評価して、アクティブ ステートの新しい構成 ("次のステート") に遷移します。チャートは、次のステートへ遷移するときに出力を計算します。
出力が確実に入力とステートの関数となるように、Mealy ステート マシンは、以下のセマンティクスを適用します。
- 出力は次のステートに依存しない。 
- チャートは、ステートではなく、遷移でのみ出力を計算する。 
- チャートはシステム クロックに基づいて定期的に起動する。 
Mealy マシンは遷移上で出力を計算します。したがって、Mealy チャートは、チャートの既定のパスの実行時に最初の出力を計算できます。Mealy チャートに対して [初期化時に指定されたチャートを実行 (入力)] チャート プロパティを有効にした場合は、この計算は t = 0 (最初のタイム ステップ) で発生します。そうでない場合は、t = 1 (次のタイム ステップ) で発生します。詳細については、初期化時に指定されたチャートを実行 (入力)を参照してください。
Moore チャートのセマンティクス
Moore マシンは、クロック エッジで出力が変更される有限ステート マシンです。Moore チャートの出力は、次のようなステートのみの関数です。
タイム ステップごとに、Moore チャートは起動して、出力を計算します。さらに、次のタイム ステップに対応するために、その入力を評価して、チャート自体を再設定します。たとえば、入力を評価した後、チャートはアクティブ ステートの新しい構成に遷移する可能性があります。チャートは、出力を計算してから、入力を評価してステートを更新します。
出力が確実に現在のステートのみの関数となるように、Moore ステート マシンは以下のセマンティクスを適用します。
- 出力は入力に依存しない。 
- 出力は前の出力に依存しない。 
- 出力は時相論理に依存しない。 
Moore マシンは、ステートで出力を計算します。したがって、Moore マシンが出力を計算できるのは、既定パスの実行 "後" のみです。それまでは、出力には既定値が使用されます。
Mealy チャートと Moore チャートの作成
Stateflow チャートを作成するとき、既定のタイプは Classic チャートと呼ばれるハイブリッド ステート マシン モデルです。Classic チャートでは、Mealy チャートと Moore チャートを、拡張された Stateflow チャート セマンティクスと組み合わせます。
Mealy チャートを作成するには、MATLAB コマンド プロンプトで、次のように入力します。
sfnew -Mealy
Moore チャートを作成するには、MATLAB コマンド プロンプトで、次のように入力します。
sfnew -Moore
あるいは、Stateflow チャート ブロックを Simulink モデルに追加した後に、[ステート マシン タイプ] チャート プロパティを設定してチャートのセマンティクスのタイプを選択できます。
Mealy チャートと Moore チャートの利点
Mealy チャートと Moore チャートは、Classic Stateflow チャートと比較して以下の利点があります。
- 作成した Mealy チャートと Moore チャートが正式な定義とセマンティクスのルールに準拠していることを確認できます。エラー メッセージが (設計時点ではなく) コンパイル時点で表示されます。 
- Moore チャートは、C/C++ と HDL ターゲットに対して、Classic チャートよりも効率的な実装を可能にします。 
- Moore チャートを使用してフィードバック ループをモデル化できます。Moore チャートの入力は直達をもちません。代数ループを使わずに、出力端子から入力端子へのフィードバックのあるループを設計できます。Mealy チャートと Classic チャートは直達をもつため、代数ループが存在する場合はエラーが発生します。 