Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

Simulink テストベンチで HDL モジュールを検証する

チュートリアルの概要

このチュートリアルでは、Simulink®HDL Cosimulation ブロックを使用して HDL モデルを検証する HDL Verifier™ セッションを設定するための基本的な手順について説明します。HDL Cosimulation ブロックは、ModelSim® または Questa® でシミュレーション中の HDL モデルに入力信号を適用し、そこから出力信号を読み取ることで、ハードウェア コンポーネントをコシミュレーションします。HDL Cosimulation ブロックは、VHDL® または Verilog® モデルのいずれかのシミュレーションをサポートします。

メモ

このチュートリアルは Mentor Graphics® シミュレータ ユーザー向けですが、プロセスの大部分は Xcelium™ ユーザーの場合も同じです。Vivado® シミュレータと共同シミュレーションするには、Cosimulation Wizard を使用して HDL Cosimulation ブロックを生成する必要があります。このワークフローの例については、HDL コシミュレーション ブロックの HDL コードをインポートする を参照してください。

VHDLコードを開発する

典型的な Simulink および ModelSim のシナリオは、後でより大きな Simulink モデルに統合する必要がある特定のハードウェア コンポーネントのモデルを ModelSim で作成することです。最初のステップは、ModelSim で VHDL モデルを設計および開発することです。このチュートリアルでは、ModelSim と VHDL を使用して、次のインバーターを表すモデルを開発します。

このモデルの VHDL エンティティは、STD_LOGIC_VECTOR タイプの IN ポートと OUT ポートを持つ入力信号値と出力信号値の 8 ビット ストリームを表します。タイプ STD_LOGIC の入力クロック信号は、設定時にビット反転プロセスをトリガーします。

次の手順を実行します。

  1. ModelSimを開始

  2. 別のチュートリアル用に作成した書き込み可能なフォルダー MyPlayArea に変更します。フォルダーを作成していない場合は、今すぐ作成してください。フォルダーは書き込み可能である必要があります。

    ModelSim>cd C:/MyPlayArea
    

  3. 新しい VHDL ソース編集ウィンドウを開きます。

  4. 次の VHDL コードを追加します。

    ---------------------------------------------------
    --  Simulink and ModelSim Inverter Tutorial
    --
    --  Copyright 2003-2004 The MathWorks, Inc.
    --
    ---------------------------------------------------
    LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;
    ENTITY inverter IS PORT (
      sin : IN  std_logic_vector(7 DOWNTO 0);
      sout: OUT std_logic_vector(7 DOWNTO 0);
      clk : IN  std_logic
    );
    END inverter;
    
    LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;
    ARCHITECTURE behavioral OF inverter IS
    BEGIN
      PROCESS(clk)
      BEGIN
        IF (clk'EVENT AND clk = '1') THEN
          sout <= NOT sin;
        END IF;
      END PROCESS;
    END behavioral;
    
    
  5. ファイルをinverter.vhdに保存します。

VHDL コードをコンパイルする

このセクションでは、次のように設計ライブラリを設定して inverter.vhd をコンパイルする方法について説明します。

  1. ModelSim コマンド プロンプトで ls コマンドを入力して、ファイル inverter.vhd が現在のフォルダーにあることを確認します。

  2. コンパイル結果を保持するためのデザイン ライブラリを作成します。ライブラリと必要な _info ファイルを作成するには、次のように vlib コマンドと vmap コマンドを入力します。

    ModelSim> vlib work
    
    ModelSim> vmap work work
    

    デザイン ライブラリがすでに存在する場合、ModelSim は現在のライブラリを 上書きしません が、次の警告を表示します。

    # ** Warning: (vlib-34) Library already exists at "work".
    

    メモ

    必要な _info ファイルが作成されるように、ModelSim File メニューまたは vlib コマンドを使用してライブラリ フォルダーを作成する必要があります。オペレーティング システムのコマンドを使用してライブラリを作成しないでください。

  3. VHDL ファイルをコンパイルします。ファイルをコンパイルする 1 つの方法は、プロジェクト ワークスペースでファイル名をクリックし、CompileCompile All を選択することです。別の方法としては、次のように vcom コマンドを使用して VHDL ファイルの名前を指定します。

    ModelSim> vcom inverter.vhd
    

    コンパイルが成功すると、コマンド ウィンドウに情報メッセージが表示され、コンパイラはコンパイル結果を作業ライブラリに読み込みます。

Simulink モデルを作成する

次に、Simulink モデルを作成します。このチュートリアルでは、VHDLコードを開発する でコーディングした VHDL インバーターを表すブロックに入力を駆動し、反転された出力を表示する単純な Simulink モデルを作成します。

次のようにモデルを作成することから始めます。

  1. まだ実行されていない場合は、MATLAB® を起動します。新しいモデル ウィンドウを開きます。次に、Simulink Library Browser を開きます。

  2. 次のブロックを Simulink Library Browser からモデル ウィンドウにドラッグします。

    • Simulink Sources ライブラリの Constant ブロック

    • HDL Verifier ブロック ライブラリの HDL Cosimulation ブロック

    • Simulink Sinks ライブラリの Display ブロック

    3 つのブロックを次の図に示す順序で配置します。

次に、次のアクションを実行して、モデルの入力ソースである Constant ブロックを構成します。

  1. Constant ブロック アイコンをダブルクリックして、Constant ブロック パラメータ ダイアログ ボックスを開きます。Main ペインに次のパラメータ値を入力します。

    • Constant value: 0

    • Sample time: 10

    後でこれらの初期値を変更して、さまざまなサンプル時間がさまざまなシミュレーション実行に与える影響を確認できます。

    ダイアログ ボックスは次のように表示されます。

  2. Signal Attributes タブをクリックします。ダイアログ ボックスに Output data type メニューが表示されます。

    Output data type メニューから uint8 を選択します。このデータ型の仕様は、型変換を必要とせずに HDL Verifier ソフトウェアによってサポートされます。これは、VHDL ポート sinSTD_LOGIC_VECTOR(7 DOWNTO 0) の VHDL タイプに直接マップされます。

    ダイアログ ボックスは次のように表示されます。

  3. [OK] をクリックします。Constant ブロック パラメータ ダイアログ ボックスが閉じ、Constant ブロック アイコンの値が 0 に変わります。

次に、VHDL で記述されたインバーター モデルを表す HDL Cosimulation ブロックを構成します。次のアクションを実行して、Ports ペインから開始します。

  1. HDL Cosimulation ブロックアイコンをダブルクリックします。HDL Cosimulation ブロックの Block Parameters ダイアログ ボックスが表示されます。Ports タブをクリックします。

  2. Ports ペインで、ペインの中央にある信号リストからサンプル信号 /top/sig1 をダブルクリックして選択します。

  3. サンプル信号パス名 /top/sig1/inverter/sin に置き換えます。次にApplyをクリックします。HDL Cosimulation ブロック上の信号名が変更されます。

  4. 同様に、サンプル信号 /top/sig2 を選択します。Full HDL Name/inverter/sout に変更します。I/O Mode リストから Output を選択します。 Sample Time パラメータを 10 に変更します。次に、Apply をクリックしてリストを更新します。

  5. サンプル信号/top/sig3を選択します。Delete ボタンをクリックします。信号がリストから削除されました。

    Ports ペインは次のように表示されます。

次に、次の操作を実行して、Connection ペインのパラメータを構成します。

  1. Connection タブをクリックします。

  2. Connection ModeFull Simulation のままにしておきます。

  3. Connection method リストからソケットを選択します。このオプションは、Simulink と ModelSim が指定された TCP/IP ソケット ポートを介して通信することを指定します。2 つの追加フィールド Port number or serviceHost name が表示されていることを確認します。

    デフォルトでは The HDL simulator is running on this computer が選択されているため、Host name フィールドは無効になっていることに注意してください。この構成では、Simulink と ModelSim の両方が同じコンピュータ上で実行されるため、リモート ホスト システム名を入力する必要はありません。

  4. Port number or service テキスト ボックスにソケット ポート番号 4449 を入力します。このポートがシステムで使用できない場合は、別の有効なポート番号またはサービス名を入力します。モデルは TCP/IP ソケット通信を使用して ModelSim とリンクします。このパラメータに入力した内容をメモします。Simulink とリンクするために ModelSim を設定するときに、同じソケット ポート情報を指定します。

    Connection ペインは次のように表示されます。

  5. [適用] をクリックします。

次に、次の操作を実行して Clocks ペインを構成します。

  1. Clocks タブをクリックします。

  2. [新規] ボタンをクリックします。空の信号名を持つ新しいクロック信号が信号リストに追加されます。

  3. 新しい信号名をダブルクリックして編集します。信号パス/inverter/clkを入力します。次に、Edge リストから Rising を選択します。Period パラメータを 10 に設定します。

  4. Clocks ペインは次のように表示されます。

  5. [適用] をクリックします。

次に、シミュレーションの前後に実行する簡単な Tcl コマンドを次のように入力します。

  1. Simulation タブをクリックします。

  2. Pre-simulation Tcl commands テキスト ボックスで、デフォルトの Tcl コマンドを編集します。

    puts "Running inverter in Simulink!"
    
  3. Post-simulation Tcl commands テキスト ボックスで、デフォルトの Tcl コマンドを編集します。

    puts "Inverter Done"
    

    Simulation ペインは次のように表示されます。

  4. [適用] をクリックします。

次に、Timescales ペインを表示して、次のようにデフォルトのパラメータに設定されていることを確認します。

  1. Timescales タブをクリックします。

  2. Timescales ペインのデフォルト設定を次の図に示します。この例を操作するにはこれらの設定が必要です。詳細は、シミュレーションのタイムスケールを参照してください。

  3. OK をクリックして Block Parameters ダイアログ ボックスを閉じます。

最後のステップは、ブロックを接続し、モデル全体のパラメータを構成し、モデルを保存することです。次のアクションを実行します。

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

    この時点で、ブロック注釈の調整も検討してください。

  2. 固定ステップの離散シミュレーション用に Simulink ソルバー選択を構成します。これは、コシミュレーション操作に必要です。次のアクションを実行します。

    1. Modeling tab で、Model Settings をクリックします。Model Configuration Parameters ダイアログ ボックスが開き、Solver selection ペインが表示されます。

    2. Type メニューから Fixed-step を選択します。

    3. Solver メニューから discrete (no continuous states) を選択します。

    4. [適用] をクリックします。

    5. OK をクリックして Model Configuration Parameters ダイアログ ボックスを閉じます。

      HDL Verifier ソフトウェアで使用するのに最適な Simulink 設定の詳細については、Simulink モデル構成パラメータを設定する を参照してください。

  3. モデルを保存します。

ModelSimSimulink で使用するためにセットアップする

これで、インバーターの VHDL 表現と、インバーターを適用する Simulink モデルができました。ModelSim を起動して Simulink で使用できるようにするには、MATLAB コマンド ウィンドウに次のコマンド ラインを入力します。

vsim('socketsimulink', 4449)

メモ

Simulink で HDL Cosimulation ブロックを構成するときに別のソケット ポート仕様を入力した場合は、前述のコマンド ラインのポート番号 4449 を、モデルに該当するソケット ポート情報に置き換えます。vsim 関数は、Simulink モデルとの通信リンクを確立するために使用する TCP/IP ソケットを ModelSim に通知します。

Simulink とのコシミュレーション用に VHDL エンティティのインスタンスをロードする

このセクションでは、vsimulink コマンドを使用して、Simulink とのコシミュレーション用に VHDL エンティティのインスタンスをロードする方法について説明します。vsimulink コマンドは、ModelSim vsim コマンドの HDL Verifier バリエーションです。これは、ModelSim 構成の一部として利用可能になります。

inverter エンティティのインスタンスをロードするには、次のアクションを実行します。

  1. 入力フォーカスを ModelSim ウィンドウに変更します。

  2. VHD ファイルが現在のフォルダーにない場合は、フォルダーを inverter.vhd ファイルの場所に変更します。次に例を示します。

    ModelSim> cd C:/MyPlayArea
    
  3. 次の vsimulink コマンドを入力します。

    ModelSim> vsimulink work.inverter
    

    ModelSim は vsim シミュレータを起動し、Simulink モデルのコンテキストでエンティティ inverter をシミュレートする準備が整います。ModelSim コマンド ウィンドウの表示は次のようになります。

シミュレーションの実行

このセクションでは、コシミュレーション セッションを実行および監視するシナリオについて説明します。

次のアクションを実行します。

  1. 次の ModelSim コマンドを入力して、インバータ信号を wave ウィンドウに開いて追加します。

    VSIM n> add wave /inverter/*
    

    次の wave ウィンドウが表示されます。

  2. 入力フォーカスを Simulink モデル ウィンドウに変更します。

  3. Simulink シミュレーションを開始します。Display ブロックの値は 255 に変わります。また、ModelSim wave ウィンドウで発生する変更にも注意してください。信号データをよりよく表示するには、ズームインする必要がある場合があります。

  4. Simulink モデルで、Constant value255 に変更し、モデルを保存して、別のシミュレーションを開始します。Display ブロックの値が 0 に変わり、ModelSim wave ウィンドウが次のように更新されます。

  5. Simulink モデルで、Constant value2 に、Sample time を 20 に変更して、別のシミュレーションを開始します。今回は、Display ブロックの値が 253 に変わり、次の図に示すように ModelSim wave ウィンドウが表示されます。

    wave ウィンドウのサンプル時間の変化に注意してください。

シミュレーションをシャットダウン

このセクションでは、次のようにシミュレーションを順番にシャットダウンする方法について説明します。

  1. ModelSim で、SimulateEnd Simulation を選択してシミュレーションを停止します。

  2. ModelSimを終了します。

  3. Simulink モデル ウィンドウを閉じます。