手順 1: M コードを使用した制御のモデリング - 2020.2 日本語

Vivado Design Suite チュートリアル: System Generator を使用したモデル ベースの DSP デザイン (UG948)

Document ID
UG948
Release Date
2020-12-11
Version
2020.2 日本語
この手順では、MCode ブロックを使用して 2 進数値 1011 を検出する単純な有限ステート マシン (FSM) を作成します。この FSM では、10111011 など、この値の連続も検出する必要があります。

目標

この演習を終了すると、System Generator の MCode ブロックを使用して有限ステート マシンを作成できるようになります。

手順

この手順では、M コードを使用して有限ステート マシンの制御ロジックを作成します。その後、デザインをシミュレーションして正しく動作することを確認します。

  1. System Generator を起動し、作業ディレクトリを C:\SysGen_Tutorial\Lab2\M_code に変更します。
  2. Lab2_1.slx ファイルを開きます。

    次の未完成の図が表示されます。



  3. ザイリンクス ブロックセットの Index ライブラリから MCode ブロックを追加します。ブロックを接続する前に、 MATLAB® 関数を編集して正しいポートおよび関数名を作成する必要があります。
  4. MCode ブロックをダブルクリックし、プロパティ エディターで Edit M-File ボタンをクリックします。

    MATLAB テキスト エディターにデフォルトの M コードが表示されます。



  5. デフォルトの MATLAB 関数の名前を state_machine に変更し、入力を din、出力を matched にします。
  6. サンプル M コードを削除します。

  7. [Save As] をクリックし、MATLAB ファイルを state_machine.m という名前で Lab2 フォルダーに保存します。
    1. MCode のプロパティ エディターで、[Browse] ボタンをクリックして MCode ブロックがローカルの M コード ファイル (state_machine.m) を参照していることを確認します。
  8. MCode のプロパティ エディターで OK をクリックします。

    MCode ブロックに新しいポートと関数名が適用されます。

  9. MCode ブロックを次の図に示すように接続します。

    これで、ステート マシンのコードを記述する準備ができました。次の図に、このステート マシンの状態遷移図を示します。この FSM には 5 つのステートがあり、連続する 2 つのシーケンスを検出可能です。



  10. M コード ファイル state_machine.m を編集し、状態変数を次のように ザイリンクス xl_state データ型を使用して定義します。変数を persistent 変数として宣言する必要があります。xl_state 関数には、初期状態と固定小数点宣言の 2 つの引数が必要です。

    4 までカウントするので、3 ビット必要です。

    persistent state, state = xl_state(0,{xlUnsigned, 3, 0});

  11. switch-case 文を使用して FSM ステートを定義します。次にサンプルを示します。
    注記: 最後の case として otherwise 文が必要です。
    switch state
       case 0
          if din == 1
              state = 1
          else
              state = 0
          end
          matched = 0;
  12. M コード ファイルを保存し、シミュレーションを実行します。波形は次の図のようになります。

    シーケンスが 2 回検出されているのがわかります。