このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
MATLAB Test ベンチを使用したフィルタ コンポーネントのテストのためのコシミュレーション
この例では、HDL Verifier™ 関数 matlabtb
を使用して、Mentor Graphics® ModelSim® と Questa® または Cadence® Xcelium™ を MATLAB® とともにバッチ モードで実行し、MATLAB テスト ベンチを使用して HDL コンポーネントをテストする方法を示します。関数 matlabtb
は、MATLAB によって生成された入力データを HDL コンポーネントに送り込み、コンポーネントからの出力を MATLAB に返すことで、このテストを容易にします。HDL で複雑な波形を生成する場合、matlabtb
を使用すると、テスト波形の記述よりもテストの実行に多くの時間を費やすことができます。matlabtb
は結果も読み取るため、テスト プロセスでは MATLAB を活用して、プロットする前に出力にデータ変換を適用できます。協調シミュレーション用のテストベンチの作成の詳細については、MATLAB テストベンチを作成する を参照してください。
設計作業
この例では、テスト対象の HDL 設計 (DUT) 用の MATLAB テスト ベンチを作成します。HDL シミュレータ内からテストベンチを呼び出します。HDL シミュレータと MATLAB のコマンド ラインからテスト ベンチを実行します。
MATLAB は調整可能な周波数の正弦波を生成し、Verilog® で実装されたローパス フィルターに供給します。matlabtb
はフィルター出力を MATLAB に渡してプロットします。このテスト プロセスは、MATLAB とコマンド ライン モードの HDL シミュレーターで実行できます。この図はシミュレーションの概要を示しています。
この例では HDL 開発者の視点を考慮しているため、この例では主に HDL シミュレータとコマンド ライン ターミナルを使用してテストを実行し、MATLAB を入力の供給と出力の解釈の補助として使用することに重点を置いています。
デザインとスクリプトファイルの概要
この例では、デザイン ファイルとスクリプト ファイルの 2 種類のファイルを使用します。
デザインファイル
ファイル
cosim_lowpass_filter.v
には、サンプル時間 10 ns (サンプル レート 100 MHz)、通過帯域 Fpass = 20 MHz、および停止帯域 Fstop = 25 MHz のローパス フィルタが含まれています。ファイル
cosim_lowpass_filtertb.m
には、このローパス フィルターの MATLAB テスト ベンチが含まれています。テスト ベンチは、変数ticks
とfrequency
を使用して、出力を解釈してプロットする前にフィルターに渡す正弦波を作成します。
スクリプト ファイル
ファイル
qcommands_cosim.tcl
には、コシミュレーションを実行するために ModelSim/QuestaSim に送信される TCL コマンドが含まれています。ファイル
tclcmd_cosim_xc.m
には、コシミュレーションを実行するために Xcelium に送信される TCL コマンドが含まれています。
この例では、HDL シミュレータ実行可能ファイルと MATLAB をターミナルから実行するため、この例が機能するにはそれらをシステム パスに含める必要があります。
協調シミュレーションを実行する
協調シミュレーションを開始するには、MATLAB を開き、HDL シミュレータと MATLAB 間の通信用の hdldaemon
コマンドを実行します。これらのアクションを完了するには、オペレーティング システムに基づいて次のコマンドを使用します。
ウィンドウズ:
matlab -nodesktop -r "hdldaemon"
リナックス:
xterm -e "matlab -nodesktop -r "hdldaemon"" &
このコマンドは、HDL リンク MATLAB サーバーが起動している間に、別のターミナルでヘッドレス モードで MATLAB を開きます。MATLAB を実行している端末に次のメッセージが表示されます。
"HDLDaemon shared memory server is running with 0 connections"
このメッセージが表示されたら、MATLAB コマンド プロンプトで次のコマンドを入力します。
global frequency; global ticks; frequency = 1e6; ticks = 0;
これらのコマンドは、テストベンチ ファイル cosim_lowpass_filtertb.m
を制御する 2 つの変数を定義および初期化します。変数 frequency
はテストベンチから送信された入力波の周波数を表し、変数 ticks
はシミュレーション開始から経過したシミュレータ時間を示し、出力をプロットするために使用されます。
次に、コシミュレーションを開始します。MATLAB コマンド ウィンドウに、シミュレータとオペレーティング システムに応じて適切なコマンドを入力します。
モデルシム/クエスタシム
Windows および Linux:
このコマンドを入力して、ModelSim/QuestaSim を起動し、シミュレータで TCL コマンドを実行します。
vsim('tclstart','do qcommands_cosim.tcl');
エクセリウム
リナックス:
1. MATLAB コマンド プロンプトでこのコマンドを入力して、MATLAB スクリプト tclcmd_cosim_xc.m
を実行します。
tclcmd_cosim_xc;
2. MATLAB コマンド プロンプトでこのコマンドを入力して、Xcelium をバッチ モードで起動します。
nclaunch('tclstart', tclcmds);
共シミュレーションが完了すると、MATLAB はこれらの図のように、フィルタリングされた結果とフィルタリングされていない結果をプロットする必要があります。
Verilog で実装されたローパス フィルタの出力は、振幅がわずかに低下するだけで、入力信号とほぼ同じであることがわかります。これは、低周波 (1 MHz) 正弦波が Verilog で実装されたローパス フィルターを通過するときに発生することが予想されます。
パラメータを調整してコシミュレーションを再実行する
MATLAB テストベンチからの異なる入力でシミュレーションを再度実行するには、HDL シミュレータまたは MATLAB 自体を再起動する必要はありません。代わりに、前に定義した 2 つの変数 ticks
と frequency
を調整します。frequency
を希望の値に変更し、ticks
を 0
にリセットした後、HDL ターミナル ウィンドウ内からシミュレーションを実行して新しい結果を生成します。
たとえば、MATLAB コマンド プロンプトで次のコマンドを入力して、frequency
を変更し、ticks
をリセットします。
frequency = 25e6; ticks = 0;
次に、HDL シミュレーターを実行しているターミナルで、このコマンドを入力します。
run 10000ns
Verilog で実装されたローパス フィルタによって、より高い周波数 (25 MHz) の正弦波信号の振幅が低減されることを確認します。
概要
この例では、ModelSim/QuestaSim または Xcelium を MATLAB とともに使用して、入力波形の特性を調整することでシミュレーションを更新および実行する方法を示します。MATLAB は入力の特性を定義および制御し、MATLAB をターミナルで実行する場合でも出力を表示します。MATLAB を HDL シミュレータと組み合わせて使用すると、多くのテストをすばやく実行できます。
この例では、変数 frequency
のみが入力を制御します。ただし、MATLAB を使用すると、コシミュレーション テストでこれらの波形を使用する前に多数の複雑なテスト波形を生成し、結果を表示することができます。MATLAB を使用してこれらのテスト波形を作成すると、さまざまなテスト波形の構築と追加に必要な時間が短縮され、シミュレーション結果を視覚データに処理するために必要な時間が削減されるため、設計プロセスが効率化されます。
参考
matlabtb
hdldaemon
vsim
nclaunch
関連するトピック
著作権 2009-2023 The MathWorks, Inc.