Main Content

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

MATLAB関数の HDL コードをインポート

協調シミュレーション タイプ - MATLAB関数

まだ実行していない場合は、コシミュレーション ウィザードを呼び出します。

cosimWizard

  1. Cosimulation Type」ペインの「MATLAB」フィールドで「 HDL cosimulation with」を選択し、 MATLAB®関数テンプレート (テストベンチまたはコンポーネント)。

  2. ModelSimとしてXceliumHDL Simulatorを選択します。このワークフローは、Vivado®シミュレータではサポートされていません。

  3. ファイルがある場所にある場合は、 Use HDL simulator executables on the system pathを選択します。コシミュレーション ウィザードは、デフォルトで、それらがシステム パス上にあると想定します。

    HDL シミュレーターの実行可能ファイルがシステム パス上に「ない」場合は、 Use the following HDL simulator executables at the following locationを選択し、下のテキスト ボックスにフォルダーの場所を指定します。

    Nextをクリックしてもコシミュレーション ウィザードで実行可能ファイルが見つからない場合は、次のことが発生します。

    • このダイアログに戻り、コシミュレーション ウィザードのステータス ペインにエラーが表示されます。

    • コシミュレーション ウィザードは、オプションをUse the following HDL simulator executables at the following locationに切り替えます。

    • コシミュレーション ウィザードは、HDL シミュレーション パス フィールドを編集可能にします。

    続行するには、HDL シミュレータ実行可能ファイルへの有効なパスを入力する必要があります。

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

HDL ファイル- MATLAB関数

HDL Filesペインで、関数またはブロックの作成に使用するファイルを指定します。

  • コシミュレーション ウィザードは、各ファイルのファイル タイプを判断し、そのタイプをファイル名の横のFile Listに表示しようとします。コシミュレーション ウィザードでタイプを判断できない場合、または間違ったタイプが表示される場合は、 File Type列でタイプを直接変更できます。

  • 可能であれば、コシミュレーション ウィザードは、HDL シミュレーターが提供する機能を使用してコンパイル順序を自動的に決定します。これは、ファイルを任意の順序で追加できることを意味します。

  • ModelSim®を使用している場合は、コンパイル スクリプトが .do ファイル (ModelSimマクロ ファイル) としてリストされます。Xcelium™を使用している場合は、コンパイル スクリプトがシステム スクリプトとしてリストされます。

  1. Addをクリックして、1 つ以上のファイル名を選択します。

  2. ファイルを削除するには、まずFile Listでファイル名を強調表示し、次にRemove Selected Fileをクリックします。

  3. [Next]をクリックします。

HDL コンパイル- MATLAB関数

HDL Compilationペインでは、生成された HDL コンパイル コマンドを確認できます。必要に応じて、これらのコマンドをオーバーライドしたりカスタマイズしたりできます。HDL ファイルの代わりにコンパイル スクリプトを含めた場合、このペインにはそれらのスクリプトを実行するコマンドが表示されます。

  1. コマンドへの変更を「Compilation Commands」ボックスに入力します。

    メモ

    システム シェル コマンドは含めないでください。例えば:

    set file = a.vhd vcom $file

    コマンドの実行から制御がコシミュレーション ウィザードに戻ると、変数には設定された値が保持されなくなります。このタイプのコマンドを含めようとすると、 Statusパネルにエラーが表示されます。

  2. Restore default commandsをクリックして、生成された HDL コンパイル コマンドに戻ります。変更を破棄するかどうかを確認するメッセージが表示されます。

  3. [Next]をクリックして続行します。

HDL モジュール- MATLAB関数

HDL Moduleペインで、コシミュレーションで使用する HDL モジュールの名前を指定します。

  1. Name of HDL module to cosimulate withにモジュールの名前を入力します。

  2. Simulation optionsで追加のシミュレーション オプションを指定します。たとえば、前の画像では、次のオプションが表示されています。

    • HDLシミュレーターの解像度

    • シミュレーション ビューから信号を削除する最適化をオフにします。

    [Restore Defaults]をクリックして、オプションをデフォルトに戻します。

  3. ファイアウォール ポリシーで TCP/IP ソケット通信が許可されていない場合は、 Connection methodShared Memoryを選択します。

  4. Next」をクリックして次のステップに進みます。プロセスのこの時点で、アプリケーションはコマンド ウィンドウで次のアクションを実行します。

    • HDLシミュレータを起動します。

    • HDL モジュールを HDL シミュレータにロードします。

    • HDL サーバーを起動し、サーバーが起動したという通知の受信を待ちます。

    • HDL サーバーに接続してポート情報を取得します。

    • HDL サーバーを切断してシャットダウンします。

コールバック スケジュール- MATLAB関数

  1. [Callback Schedule]ペインで、HDL シミュレータからの複数のコンポーネントまたはテストベンチ関数のコールバックを入力します。各コールバック関数に次の情報を入力します。

    • Callback type: コンポーネント関数を作成するにはmatlabcpを選択し、テストベンチ関数を作成するにはmatlabtbを選択します。

    • Callback function name (オプション):HDL コンポーネントと同じでない場合は、コンポーネントまたはテストベンチ関数の名前を指定します。デフォルトでは、関数名が HDL コンポーネント名と同じであると想定されます。

    • HDL component:コンポーネント名を手動で入力するか、 Browseをクリックして参照します。

    • Trigger mode:コールバック関数をトリガーするには、次のいずれかを指定します。

      • Repeat

      • Rising Edge

      • Falling Edge

      • Sensitivity

    • Sample time (ns) or Trigger Signal:

      • トリガーRepeatを選択した場合は、サンプル時間をナノ秒単位で入力します。

      • Rising EdgeFalling Edge、またはSensitivityを選択した場合、 Sample time (ns)Trigger Signalに変わります。 $$。コールバックをトリガーするために使用する信号名を入力します。

      Browseをクリックすると、指定した HDL コンポーネント内の既存の信号を参照できます。

  2. Add」をクリックして、コマンドを「MATLABコールバック関数」リストに追加します。

    さらにスケジュールしたいコールバック関数がある場合は、上記の手順を繰り返します。コールバック関数を削除する場合は、削除する行を強調表示し、 Removeをクリックします。

    メモ

    MATLABコールバック関数リスト内の既存のコールバック関数と同じ HDL モジュールのコールバック関数を追加しようとすると、新しいコールバック関数が既存のコールバック関数を上書きします (これは、変更した場合にも当てはまります)コールバックのタイプ)。Statusウィンドウに警告が表示されます。

    Warning: This HDL component already has a scheduled callback function, which is
    replaced by this new one.
  3. [Next]をクリックします。

スクリプト生成- MATLAB関数

  1. 設定を確認または変更するには、 「Back」をクリックします。

  2. Finish」をクリックしてスクリプトを生成します。

生成されたファイル— MATLAB関数

コシミュレーション ウィザードは次のファイルを作成し、それぞれを個別のMATLABエディタ ウィンドウで開きます。

  • launchHDLsimulator — MATLABとの協調シミュレーション用の HDL シミュレーターを起動するためのスクリプト。

  • compileHDLDesign — この特定のコンポーネントの後続のコンパイルに再利用できるコンパイル スクリプト。

  • 関数ファイル(*.m) — コンポーネントおよびテストベンチのカスタマイズされた関数テンプレート (コシミュレーション ウィザードで指定されたコンポーネントごとに 1 つ)。

コンポーネントまたはテストベンチ機能を完了する

以下の例に示すように、ウィザードが生成するテンプレートには、いくつかの単純なポート I/O 命令と、独自のコードを追加する空のルーチンが含まれています。MATLAB関数の作成と使用の完全な例については、 Verify Raised Cosine Filter Design Using MATLABを参照してください。

function osc_top_u_osc_filter1x(obj)
% Automatically generated MATLAB(R) callback function.

% Copyright 2010 The MathWorks, Inc.
% $Revision $

% Initialize state of callback function.
if (strcmp(obj.simstatus,'Init'))
    disp('Initializing states ...');

    % Store port information in userdata
    % The name strings of ports that sends data from HDL simulator to
    % MATLAB callback function
    obj.userdata.FromHdlPortNames = fields(obj.portinfo.out);
    obj.userdata.FromHdlPortNum   = length(fields(obj.portinfo.out));

    % The name strings of ports that sends data from MATLAB callback
    % function to HDL simulator
    obj.userdata.ToHdlPortNames   = fields(obj.portinfo.in);
    obj.userdata.ToHdlPortNum     = length(fields(obj.portinfo.in));

    % Initialize state
    obj.userdata.State = 0;
end

% Obj.tnow is the current HDL simulation time specified in seconds
disp(['Callback function is executed at time ' num2str(obj.tnow)]);

if(obj.userdata.FromHdlPortNum > 0)
    % The name of the first input port
    portName  = obj.userdata.FromHdlPortNames{1};
    disp(['Reading input port ' portName]);
    % Convert the multi-valued logic value of the first port to decimal
    portValueDec  = mvl2dec( ...
        obj.portvalues.(portName), ...      % Multi-valued logic of the first port
        obj.portinfo.out.(portName).size);  %#ok<NASGU> % Bit width
    % Then perform any necessary operations on this value passed by HDL simulator.
    % ...
    % Optionally, you can translate the port value into fixed point object,
    % e.g.
    % myfiobj = fi(portValueDec,1, 16, 4);
end

% Update your state(s). In the following example, we use this internal
% state to implement a one-bit counter
obj.userdata.State = ~obj.userdata.State;

if(obj.userdata.ToHdlPortNum > 0)
    % The name of the first output port in HDL
    portName = obj.userdata.ToHdlPortNames{1};
    disp(['Writing output port ' portName]);

    % Assign the first port value to internal state obj.userdata.State.
    % Before assignment, convert decimal value to multi-valued logic.
    % You can change obj.userdata.State to another other valid decimal values.
    obj.portvalues.(portName) = dec2mvl(...
        obj.userdata.State, ...
        obj.portinfo.in.(portName).size);

    % Operate on other out ports, if there are any.
    % ...
end

参考

関連するトピック