このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
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
の入力クロック信号は、設定時にビット反転プロセスをトリガーします。
次の手順を実行します。
ModelSimを開始
別のチュートリアル用に作成した書き込み可能なフォルダー
MyPlayArea
に変更します。フォルダーを作成していない場合は、今すぐ作成してください。フォルダーは書き込み可能である必要があります。ModelSim>cd C:/MyPlayArea
新しい VHDL ソース編集ウィンドウを開きます。
次の 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;
ファイルを
inverter.vhd
に保存します。
VHDL コードをコンパイルする
このセクションでは、次のように設計ライブラリを設定して inverter.vhd
をコンパイルする方法について説明します。
ModelSim コマンド プロンプトで
ls
コマンドを入力して、ファイルinverter.vhd
が現在のフォルダーにあることを確認します。コンパイル結果を保持するためのデザイン ライブラリを作成します。ライブラリと必要な
_info
ファイルを作成するには、次のようにvlib
コマンドとvmap
コマンドを入力します。ModelSim> vlib work ModelSim> vmap work work
デザイン ライブラリがすでに存在する場合、ModelSim は現在のライブラリを 上書きしません が、次の警告を表示します。
# ** Warning: (vlib-34) Library already exists at "work".
メモ
必要な
_info
ファイルが作成されるように、ModelSim File メニューまたはvlib
コマンドを使用してライブラリ フォルダーを作成する必要があります。オペレーティング システムのコマンドを使用してライブラリを作成しないでください。VHDL ファイルをコンパイルします。ファイルをコンパイルする 1 つの方法は、プロジェクト ワークスペースでファイル名をクリックし、Compile 、 Compile All を選択することです。別の方法としては、次のように
vcom
コマンドを使用して VHDL ファイルの名前を指定します。ModelSim> vcom inverter.vhd
コンパイルが成功すると、コマンド ウィンドウに情報メッセージが表示され、コンパイラはコンパイル結果を作業ライブラリに読み込みます。
Simulink モデルを作成する
次に、Simulink モデルを作成します。このチュートリアルでは、VHDLコードを開発する でコーディングした VHDL インバーターを表すブロックに入力を駆動し、反転された出力を表示する単純な Simulink モデルを作成します。
次のようにモデルを作成することから始めます。
まだ実行されていない場合は、MATLAB® を起動します。新しいモデル ウィンドウを開きます。次に、Simulink Library Browser を開きます。
次のブロックを Simulink Library Browser からモデル ウィンドウにドラッグします。
Simulink Sources ライブラリの Constant ブロック
HDL Verifier ブロック ライブラリの HDL Cosimulation ブロック
Simulink Sinks ライブラリの Display ブロック
3 つのブロックを次の図に示す順序で配置します。
次に、次のアクションを実行して、モデルの入力ソースである Constant ブロックを構成します。
Constant ブロック アイコンをダブルクリックして、Constant ブロック パラメータ ダイアログ ボックスを開きます。Main ペインに次のパラメータ値を入力します。
Constant value:
0
Sample time:
10
後でこれらの初期値を変更して、さまざまなサンプル時間がさまざまなシミュレーション実行に与える影響を確認できます。
ダイアログ ボックスは次のように表示されます。
Signal Attributes タブをクリックします。ダイアログ ボックスに Output data type メニューが表示されます。
Output data type メニューから
uint8
を選択します。このデータ型の仕様は、型変換を必要とせずに HDL Verifier ソフトウェアによってサポートされます。これは、VHDL ポートsin
、STD_LOGIC_VECTOR(7 DOWNTO 0)
の VHDL タイプに直接マップされます。ダイアログ ボックスは次のように表示されます。
[OK] をクリックします。Constant ブロック パラメータ ダイアログ ボックスが閉じ、Constant ブロック アイコンの値が 0 に変わります。
次に、VHDL で記述されたインバーター モデルを表す HDL Cosimulation ブロックを構成します。次のアクションを実行して、Ports ペインから開始します。
HDL Cosimulation ブロックアイコンをダブルクリックします。HDL Cosimulation ブロックの Block Parameters ダイアログ ボックスが表示されます。Ports タブをクリックします。
Ports ペインで、ペインの中央にある信号リストからサンプル信号
/top/sig1
をダブルクリックして選択します。サンプル信号パス名
/top/sig1
を/inverter/sin
に置き換えます。次にApplyをクリックします。HDL Cosimulation ブロック上の信号名が変更されます。同様に、サンプル信号
/top/sig2
を選択します。Full HDL Name を/inverter/sout
に変更します。I/O Mode リストからOutput
を選択します。 Sample Time パラメータを10
に変更します。次に、Apply をクリックしてリストを更新します。サンプル信号
/top/sig3
を選択します。Delete ボタンをクリックします。信号がリストから削除されました。Ports ペインは次のように表示されます。
次に、次の操作を実行して、Connection ペインのパラメータを構成します。
Connection タブをクリックします。
Connection Mode は Full Simulation のままにしておきます。
Connection method リストからソケットを選択します。このオプションは、Simulink と ModelSim が指定された TCP/IP ソケット ポートを介して通信することを指定します。2 つの追加フィールド Port number or service と Host name が表示されていることを確認します。
デフォルトでは The HDL simulator is running on this computer が選択されているため、Host name フィールドは無効になっていることに注意してください。この構成では、Simulink と ModelSim の両方が同じコンピュータ上で実行されるため、リモート ホスト システム名を入力する必要はありません。
Port number or service テキスト ボックスにソケット ポート番号
4449
を入力します。このポートがシステムで使用できない場合は、別の有効なポート番号またはサービス名を入力します。モデルは TCP/IP ソケット通信を使用して ModelSim とリンクします。このパラメータに入力した内容をメモします。Simulink とリンクするために ModelSim を設定するときに、同じソケット ポート情報を指定します。Connection ペインは次のように表示されます。
[適用] をクリックします。
次に、次の操作を実行して Clocks ペインを構成します。
Clocks タブをクリックします。
[新規] ボタンをクリックします。空の信号名を持つ新しいクロック信号が信号リストに追加されます。
新しい信号名をダブルクリックして編集します。信号パス
/inverter/clk
を入力します。次に、Edge リストからRising
を選択します。Period パラメータを10
に設定します。Clocks ペインは次のように表示されます。
[適用] をクリックします。
次に、シミュレーションの前後に実行する簡単な Tcl コマンドを次のように入力します。
Simulation タブをクリックします。
Pre-simulation Tcl commands テキスト ボックスで、デフォルトの Tcl コマンドを編集します。
puts "Running inverter in Simulink!"
Post-simulation Tcl commands テキスト ボックスで、デフォルトの Tcl コマンドを編集します。
puts "Inverter Done"
Simulation ペインは次のように表示されます。
[適用] をクリックします。
次に、Timescales ペインを表示して、次のようにデフォルトのパラメータに設定されていることを確認します。
Timescales タブをクリックします。
Timescales ペインのデフォルト設定を次の図に示します。この例を操作するにはこれらの設定が必要です。詳細は、シミュレーションのタイムスケールを参照してください。
OK をクリックして Block Parameters ダイアログ ボックスを閉じます。
最後のステップは、ブロックを接続し、モデル全体のパラメータを構成し、モデルを保存することです。次のアクションを実行します。
次の図に示すようにブロックを接続します。
この時点で、ブロック注釈の調整も検討してください。
固定ステップの離散シミュレーション用に Simulink ソルバー選択を構成します。これは、コシミュレーション操作に必要です。次のアクションを実行します。
Modeling tab で、Model Settings をクリックします。Model Configuration Parameters ダイアログ ボックスが開き、Solver selection ペインが表示されます。
Type メニューから
Fixed-step
を選択します。Solver メニューから
discrete (no continuous states)
を選択します。[適用] をクリックします。
OK をクリックして Model Configuration Parameters ダイアログ ボックスを閉じます。
HDL Verifier ソフトウェアで使用するのに最適な Simulink 設定の詳細については、Simulink モデル構成パラメータを設定する を参照してください。
モデルを保存します。
ModelSim を Simulink で使用するためにセットアップする
これで、インバーターの 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
エンティティのインスタンスをロードするには、次のアクションを実行します。
入力フォーカスを ModelSim ウィンドウに変更します。
VHD ファイルが現在のフォルダーにない場合は、フォルダーを
inverter.vhd
ファイルの場所に変更します。次に例を示します。ModelSim> cd C:/MyPlayArea
次の
vsimulink
コマンドを入力します。ModelSim> vsimulink work.inverter
ModelSim は
vsim
シミュレータを起動し、Simulink モデルのコンテキストでエンティティinverter
をシミュレートする準備が整います。ModelSim コマンド ウィンドウの表示は次のようになります。
シミュレーションの実行
このセクションでは、コシミュレーション セッションを実行および監視するシナリオについて説明します。
次のアクションを実行します。
次の ModelSim コマンドを入力して、インバータ信号を wave ウィンドウに開いて追加します。
VSIM n> add wave /inverter/*
次の wave ウィンドウが表示されます。
入力フォーカスを Simulink モデル ウィンドウに変更します。
Simulink シミュレーションを開始します。Display ブロックの値は
255
に変わります。また、ModelSim wave ウィンドウで発生する変更にも注意してください。信号データをよりよく表示するには、ズームインする必要がある場合があります。Simulink モデルで、Constant value を
255
に変更し、モデルを保存して、別のシミュレーションを開始します。Display ブロックの値が0
に変わり、ModelSim wave ウィンドウが次のように更新されます。Simulink モデルで、Constant value を
2
に、Sample time を 20 に変更して、別のシミュレーションを開始します。今回は、Display ブロックの値が253
に変わり、次の図に示すように ModelSim wave ウィンドウが表示されます。wave ウィンドウのサンプル時間の変化に注意してください。
シミュレーションをシャットダウン
このセクションでは、次のようにシミュレーションを順番にシャットダウンする方法について説明します。
ModelSim で、Simulate 、 End Simulation を選択してシミュレーションを停止します。
ModelSimを終了します。
Simulink モデル ウィンドウを閉じます。