この手順では、MCode ブロックを使用して 2 進数値 1011 を検出する単純な有限ステート マシン (FSM) を作成します。この FSM では、10111011 など、この値の連続も検出する必要があります。
目標
この演習を終了すると、System Generator の MCode ブロックを使用して有限ステート マシンを作成できるようになります。
手順
この手順では、M コードを使用して有限ステート マシンの制御ロジックを作成します。その後、デザインをシミュレーションして正しく動作することを確認します。
- System Generator を起動し、作業ディレクトリを C:\SysGen_Tutorial\Lab2\M_code に変更します。
-
Lab2_1.slx ファイルを開きます。
次の未完成の図が表示されます。
- ザイリンクス ブロックセットの Index ライブラリから MCode ブロックを追加します。ブロックを接続する前に、 MATLAB® 関数を編集して正しいポートおよび関数名を作成する必要があります。
-
MCode ブロックをダブルクリックし、プロパティ エディターで Edit M-File ボタンをクリックします。
MATLAB テキスト エディターにデフォルトの M コードが表示されます。
- デフォルトの MATLAB 関数の名前を
state_machine
に変更し、入力をdin
、出力をmatched
にします。 - サンプル M コードを削除します。
- [Save As] をクリックし、MATLAB ファイルを state_machine.m という名前で Lab2 フォルダーに保存します。
- MCode のプロパティ エディターで、[Browse] ボタンをクリックして MCode ブロックがローカルの M コード ファイル (state_machine.m) を参照していることを確認します。
- MCode のプロパティ エディターで OK をクリックします。
MCode ブロックに新しいポートと関数名が適用されます。
- MCode ブロックを次の図に示すように接続します。
これで、ステート マシンのコードを記述する準備ができました。次の図に、このステート マシンの状態遷移図を示します。この FSM には 5 つのステートがあり、連続する 2 つのシーケンスを検出可能です。
- M コード ファイル state_machine.m を編集し、状態変数を次のように ザイリンクス
xl_state
データ型を使用して定義します。変数を persistent 変数として宣言する必要があります。xl_state
関数には、初期状態と固定小数点宣言の 2 つの引数が必要です。4 までカウントするので、3 ビット必要です。
persistent state, state = xl_state(0,{xlUnsigned, 3, 0});
- switch-case 文を使用して FSM ステートを定義します。次にサンプルを示します。 注記: 最後の case として otherwise 文が必要です。
switch state case 0 if din == 1 state = 1 else state = 0 end matched = 0;
- M コード ファイルを保存し、シミュレーションを実行します。波形は次の図のようになります。
シーケンスが 2 回検出されているのがわかります。