メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

新しいハードウェア デバイスの登録

[ハードウェア実行] ペインでは、MATLAB® ソフトウェア用のターゲット ハードウェアとコンパイラのプロパティについて記述するパラメーターを指定でき、次のことが可能になります。

  • モデル シミュレーション中にターゲット ハードウェアを確認する。

  • 製品ハードウェアまたはテスト ハードウェア用に最適化されたコードを生成する。

  • 生成されたコードをターゲット ハードウェアで直接テストまたは展開する。

[ハードウェア実行] ペインでは、さまざまなターゲット ハードウェアに対応しています。範囲を拡大するには、target.Processor クラスと target.LanguageImplementation クラスを使用して新しいハードウェア デバイスを登録します。

新しいデバイスのハードウェア実行の指定

この例では、新しいハードウェア デバイスを登録する方法を示します。

新しいハードウェア デバイス用の target.Processor オブジェクトを作成します。

myProc = target.create("Processor",Name="MyProcessor", ...
                        Manufacturer="MyManufacturer");

言語実装の詳細を指定するための target.LanguageImplementation オブジェクトを作成します。

myLanguageImplementation = target.create("LanguageImplementation", ...
                                          Name="MyProcessorImplementation");

言語実装の詳細を指定します。

myLanguageImplementation.Endianess = target.Endianess.Little;

myLanguageImplementation.AtomicIntegerSize = 64;
myLanguageImplementation.AtomicFloatSize = 64;
myLanguageImplementation.WordSize = 64;

myLanguageImplementation.DataTypes.Char.Size = 8;
myLanguageImplementation.DataTypes.Short.Size = 16;
myLanguageImplementation.DataTypes.Int.Size = 32;
myLanguageImplementation.DataTypes.Long.Size = 64;
myLanguageImplementation.DataTypes.LongLong.IsSupported = true;
myLanguageImplementation.DataTypes.LongLong.Size = 64;
myLanguageImplementation.DataTypes.Float.Size = 32;
myLanguageImplementation.DataTypes.Double.Size = 64;

myLanguageImplementation.DataTypes.Pointer.Size = 32;

myLanguageImplementation.DataTypes.SizeT.Size = 64;
myLanguageImplementation.DataTypes.PtrDiffT.Size = 64;

言語実装をハードウェア デバイスと関連付けます。

myProc.LanguageImplementations = myLanguageImplementation;

target.Processor オブジェクトを内部データベースに追加します。

objectsAdded = target.add(myProc);
target.add summary:

    Objects added to internal database for current MATLAB session:
        target.LanguageImplementation    "MyProcessorImplementation"
        target.Processor                 "MyManufacturer-MyProcessor"
  • MATLAB® Coder™ を使用している場合: [ハードウェア] タブに新しいデバイスが表示されます。また、coder.hardware関数を使用して、このデバイスの coder.Hardware オブジェクトを作成できるようにもなりました。

  • Simulink® Coder™ を使用している場合: [ハードウェア実行] ペインで、[デバイス ベンダー][デバイス タイプ] をそれぞれ MyManufacturerMyProcessor に設定できるようになりました。

オブジェクトを内部データベースから削除するには、以下を入力します。

target.remove(objectsAdded)
target.remove summary:

    Objects removed from internal database:
        target.LanguageImplementation    "MyProcessorImplementation"
        target.Processor                 "MyManufacturer-MyProcessor"

MATLAB セッションをまたいで持続するハードウェア実行の指定

既定では、内部データベースにターゲット オブジェクトを追加すると、ターゲット データは現在の MATLAB® セッションでのみ使用できます。この例では、MATLAB セッションをまたぐターゲット データの持続性を指定する方法を示します。

新しいハードウェア デバイスの target.Processor オブジェクトを作成し、プロセスの言語実装を ARM Compatible-ARM Cortex の既存の実装として指定します。

myProc = target.create("Processor",Name="MyProcessor", ...
                        Manufacturer="MyManufacturer");

existingImplementation = target.get("LanguageImplementation", ...
                                "ARM Compatible-ARM Cortex"); 

myProc.LanguageImplementations = existingImplementation;

作成した target.Processor オブジェクトを内部データベースに追加し、UserInstalltrue として指定して、MATLAB セッションをまたいでターゲット データを持続できるようにします。

objectsAdded = target.add(myProc,UserInstall=true);
target.add summary:

    Objects added to internal database, which will persist across MATLAB sessions:
        target.Processor                 "MyManufacturer-MyProcessor"
    1 object not added because they already exist.

その後、MATLAB ワークスペースでオブジェクトを変更してから内部データベースのオブジェクトを更新する場合は、target.update 関数を使用できます。

オブジェクトを内部データベースから削除するには、以下を入力します。

target.remove(objectsAdded)
target.remove summary:

    Objects removed from internal database:
        target.Processor    "MyManufacturer-MyProcessor"

複数の永続オブジェクトを内部データベースから削除するには、target.clear 関数を使用します。

既存の実行を変更してハードウェア実行を作成

新しいハードウェア実行で必要な値のほとんどが既存のハードウェア実行に含まれている場合は、既存の実行のコピーを作成して変更することで、新しい実行を迅速に作成することができます。

新しいハードウェア デバイス用の target.Processor オブジェクトを作成します。

myProc = target.create("Processor",Name="MyProcessor", ...
                        Manufacturer="MyManufacturer");

既存の言語実装をコピーする target.LanguageImplementation オブジェクトを作成します。

myCopiedImplementation = target.create("LanguageImplementation", ...
                                      Name="MyCopiedImplementation", ...
                                      Copy="Atmel-AVR");

必要な言語実装の詳細を指定します。たとえば、バイト順などです。

myCopiedImplementation.Endianess = target.Endianess.Big;

言語実装をハードウェア デバイスと関連付けます。

myProc.LanguageImplementations = myCopiedImplementation;

target.Processor オブジェクトを内部データベースに追加します。

objectsAdded = target.add(myProc);
target.add summary:

    Objects added to internal database for current MATLAB session:
        target.LanguageImplementation    "MyCopiedImplementation"
        target.Processor                 "MyManufacturer-MyProcessor"

オブジェクトを内部データベースから削除するには、以下を入力します。

target.remove(objectsAdded)
target.remove summary:

    Objects removed from internal database:
        target.LanguageImplementation    "MyCopiedImplementation"
        target.Processor                 "MyManufacturer-MyProcessor"

既存の実行を再利用して新しいハードウェア実行を作成

ハードウェア デバイスで既存の実行と同じハードウェア実行が必要な場合、既存の実行を再利用できます。

新しいハードウェア デバイス用の target.Processor オブジェクトを作成します。

myProc = target.create( "Processor",Name="MyProcessor", ...
                        Manufacturer="MyManufacturer");

デバイス ベンダーとタイプについての識別子を使用することで、既存の実行を取得します。

existingImplementation = target.get("LanguageImplementation", ...
                                  "ARM Compatible-ARM Cortex");

言語実装をハードウェア デバイスと関連付けます。

myProc.LanguageImplementations = existingImplementation;

target.Processor オブジェクトを内部データベースに追加します。

objectsAdded = target.add(myProc);
target.add summary:

    Objects added to internal database for current MATLAB session:
        target.Processor                 "MyManufacturer-MyProcessor"
    1 object not added because they already exist.

オブジェクトを内部データベースから削除するには、以下を入力します。

target.remove(objectsAdded);
target.remove summary:

    Objects removed from internal database:
        target.Processor    "MyManufacturer-MyProcessor"

ハードウェア デバイス データの検証

ターゲット オブジェクトのデータの整合性を検証するには、target.Object 基底クラスの IsValid プロパティまたは validate メソッドを使用します。

target.Processor オブジェクトを作成して既存の言語実装をそのオブジェクトに関連付ける例について考えます。

myProcessor = target.create("Processor");
myProcessor.LanguageImplementations = target.get("LanguageImplementation", ...
                                              "ARM Compatible-ARM Cortex");

新しく作成されたオブジェクトが無効であることを確認するには、「myProcessor.IsValid」と入力します。

myProcessor.IsValid
ans = logical
   0

メソッド myProcessor.validate() を使用してオブジェクトを検証しようとすると、エラーが発生します。

myProcessor.validate()
Error using target.internal.Processor/validate
Target data validation failed.
 * Undefined property "Name" in "Processor" object.
 * Undefined identifier in "Processor" object.

次の target.Processor プロパティが指定されていないため、検証は失敗します。

  • Name — プロセッサ名

  • Id — オブジェクト識別子

プロセッサ名を指定できます。これはオブジェクト識別子も指定します。

myProcessor.Name = "MyProcessor";

myProcessor の有効性を再度チェックして、オブジェクトの有効性が確立されていることを確認します。

myProcessor.IsValid
ans = logical
   1

myProcessor.validate()

メモ: target.add 関数を使用してターゲット オブジェクトを登録するとき、ソフトウェアはオブジェクトの有効性もチェックします。

ハードウェア デバイス データのエクスポート

以前に作成したハードウェア デバイス データをコンピューター間およびユーザー間で共有できます。

この例では、ハードウェア デバイスを指定して内部データベースに追加します。

myProc = target.create("Processor",Name="MyProcessor", ...
                        Manufacturer="MyManufacturer");

existingImplementation = target.get("LanguageImplementation", ...
                        "ARM Compatible-ARM Cortex");

myProc.LanguageImplementations = existingImplementation;
objectsAdded = target.add(myProc);
target.add summary:

    Objects added to internal database for current MATLAB session:
        target.Processor                 "MyManufacturer-MyProcessor"
    1 object not added because they already exist.

ハードウェア デバイス データを共有する関数を作成するには、以下を入力します。

target.export(myProc,"FileName", ...
  "exportMyProcFunction",Overwrite=true)

関数 target.exportexportMyProcFunction.m を現在の作業フォルダーに作成します。type コマンドを使用して関数を確認します。

type("exportMyProcFunction.m")
function registeredObjects = exportMyProcFunction(varargin)
% This function was generated using target data export.

    % Create target.Processor "MyManufacturer-MyProcessor"
    processor = target.create("Processor");
    processor.LanguageImplementations(1) = target.get("LanguageImplementation", "ARM Compatible-ARM Cortex");
    processor.Manufacturer = "MyManufacturer";
    processor.Name = "MyProcessor";

    % Add the target objects to MATLAB memory
    registeredObjects = target.add(processor, varargin{:});
end

次に、生成された関数を使用して、データベースのハードウェア デバイス データをコンピューター間およびユーザー間で共有できます。たとえば、別のコンピューターで次のコマンドを入力します。

objectsAdded = exportMyProcFunction;

生成された関数により、target.Processor オブジェクト MyManufacturer-MyProcessor が再作成されて内部データベースに追加されます。

オブジェクトを内部データベースから削除するには、以下を入力します。

target.remove(objectsAdded)
target.remove summary:

    Objects removed from internal database:
        target.Processor    "MyManufacturer-MyProcessor"

ターゲット オブジェクトの代替識別子を作成

ターゲット オブジェクトの代替の識別子を作成するには、target.Alias クラスを使用します。

たとえば、target.Processor オブジェクトのクラス識別子が長い場合、target.Processor オブジェクトの短い識別子を提供する target.Alias オブジェクトを作成できます。

target.Processor オブジェクトを表示します。

proccesorObj = target.get("Processor", ...
  "Analog Devices-ADSP-CM40x (ARM Cortex-M)");

target.Alias オブジェクトの作成には関数 target.create を使用します。

aliasProcessorObj = target.create("Alias");

代替の識別子と元のターゲット オブジェクトの指定には target.Alias オブジェクト プロパティを使用します。

aliasProcessorObj.Name = "myShortName";
aliasProcessorObj.For = proccesorObj;

target.Alias オブジェクトを内部データベースに追加します。

objectsAdded = target.add(aliasProcessorObj);
target.add summary:

    Objects added to internal database for current MATLAB session:
        target.Alias        "myShortName"
    1 object not added because they already exist.

元の target.Processor オブジェクトを取得するには、以下を入力します。

target.get("Processor","myShortName");

オブジェクトを内部データベースから削除するには、以下を入力します。

target.remove(objectsAdded)
target.remove summary:

    Objects removed from internal database:
        target.Alias    "myShortName"

ハードウェア デバイスのデータ定義のアップグレード

rtwTargetInfo.m ファイルまたは sl_customization.m ファイル (Simulink® Coder™ および Embedded Coder® にのみ適用) を介して指定された既存のハードウェア デバイス定義をアップグレードするには、target.upgrade 関数を使用します。

rtwTargetInfo.m ファイル

ハードウェア デバイス定義が rtwTargetInfo.m ファイルにあるものとします。

function rtwTargetInfo(tr)
    % Add registration function handle to the Target Registry
    tr.registerTargetInfo(@loc_register_hardware);
end
  
function hw = loc_register_hardware
    hw = RTW.HWDeviceRegistry;
    hw.Vendor = 'MyManufacturer';
    hw.Type = 'MyDevice';
    hw.Alias = {};
    hw.Platform = {'Prod', 'Target'};
    hw.setWordSizes([8 16 32 64 64 64 64 64 64 64 64]);
    hw.Endianess = 'Little';
    hw.IntDivRoundTo = 'Zero';
    hw.ShiftRightIntArith = true;
    hw.LargestAtomicInteger = 'Long';
    hw.LargestAtomicFloat = 'Double';
end

このファイルに含まれているデータ定義をアップグレードするには、次を入力します。

target.upgrade("rtwTargetInfo","myPathTo/rtwTargetInfo.m");

現在のフォルダーに、関数によってこの registerUpgradedTargets.m ファイルが作成されます。

function processor = registerUpgradedTargets(varargin)
% This function was generated using target data export.
  
    % Create target.LanguageImplementation 'MyManufacturer-MyDevice'
    languageimplementation = target.create('LanguageImplementation');
    languageimplementation.AtomicFloatSize = 64;
    languageimplementation.AtomicIntegerSize = 64;
    languageimplementation.DataTypes.Char.Size = 8;
    languageimplementation.DataTypes.Double.Size = 64;
    languageimplementation.DataTypes.Float.Size = 64;
    languageimplementation.DataTypes.Half.IsSupported = false;
    languageimplementation.DataTypes.Half.Size = 16;
    languageimplementation.DataTypes.Int.Size = 32;
    languageimplementation.DataTypes.Long.Size = 64;
    languageimplementation.DataTypes.LongLong.IsSupported = false;
    languageimplementation.DataTypes.LongLong.Size = 64;
    languageimplementation.DataTypes.Pointer.Size = 64;
    languageimplementation.DataTypes.PtrDiffT.Size = 64;
    languageimplementation.DataTypes.Short.Size = 16;
    languageimplementation.DataTypes.SizeT.Size = 64;
    languageimplementation.Name = 'MyManufacturer-MyDevice';
    languageimplementation.WordSize = 64;
  
    % Create target.Processor 'MyManufacturer-MyDevice'
    processor = target.create('Processor');
    processor.LanguageImplementations(1) = languageimplementation;
    processor.Manufacturer = 'MyManufacturer';
    processor.Name = 'MyDevice';
  
    % Add the target objects to MATLAB memory
    target.add(processor, varargin{:});
end

ハードウェア デバイスを MATLAB® に登録するには、次を入力します。

registerUpgradedTargets()

MATLAB セッションをまたいで登録を保持するようにするには、次を入力します。

registerUpgradedTargets(UserInstall=true)

sl_customization.m ファイル (Simulink Coder および Embedded Coder にのみ適用)

sl_customization.m ファイルに複数のハードウェア デバイス定義があるとします。

function sl_customization(cm)
  % sl_customization function to register a device
  % vendor and type with Simulink.
  % Copy or rename this file to sl_customization.m.
  cm.registerTargetInfo(@loc_register_device);
  cm.registerTargetInfo(@loc_register_device2);
  cm.registerTargetInfo(@loc_createConfig);
     
  cm.registerTargetInfo(@locRegisterTfl);
  cm.CodeCoverageTools.add('DummyCoverageToolForTesting',...
                           'HDummyCovTool',...
                           'A Coverage Tool Vendor');
end
 
function thisDev = loc_register_device
  thisDev = RTW.HWDeviceRegistry;
  thisDev.Vendor = 'MyDevVendor';
  thisDev.Type = 'MyDevType';
  thisDev.Alias = {};
  thisDev.Platform = {'Prod', 'Target'};
  thisDev.setWordSizes([8 16 32 32 32]);
  thisDev.LargestAtomicInteger = 'Char';
  thisDev.LargestAtomicFloat = 'None';
  thisDev.Endianess = 'Unspecified';
  thisDev.IntDivRoundTo = 'Undefined';
  thisDev.ShiftRightIntArith = true;
  thisDev.setEnabled({'IntDivRoundTo'});
end
 
function thisDev = loc_register_device2
  thisDev = RTW.HWDeviceRegistry;
  thisDev.Vendor = 'MyDevVendor';
  thisDev.Type = 'MyDevType2';
  thisDev.Alias = {};
  thisDev.Platform = {'Prod', 'Target'};
  thisDev.setWordSizes([8 16 32 32 32]);
  thisDev.LargestAtomicInteger = 'Char';
  thisDev.LargestAtomicFloat = 'None';
  thisDev.Endianess = 'Unspecified';
  thisDev.IntDivRoundTo = 'Undefined';
  thisDev.ShiftRightIntArith = true;
  thisDev.setEnabled({'IntDivRoundTo'});
end
 
% local function
function config = loc_createConfig
  config = rtw.connectivity.ConfigRegistry;
  config.ConfigName = 'Infineon->C16x, XC16x';
  config.ConfigClass = 'pil_slcust.HostDemoConfig1';
  config.SystemTargetFile = {'custom_target.tlc'};
  config.TemplateMakefile = {'custom_target.tmf'};
  config.TargetHWDeviceType = {'Infineon->C16x, XC16x'};
end
 
function thisTfl = locRegisterTfl
  thisTfl(1) = RTW.TflRegistry;
  thisTfl(1).Name = 'myTFL1';
  thisTfl(1).Description = 'Test';
  thisTfl(1).TableList = {'tfl_table_Sum',...
                          'tfl_table_Product',...
                         }; % Sum includes Add and Subtract
  thisTfl(1).BaseTfl = 'ANSI_C';
  thisTfl(1).TargetHWDeviceType = {'*'};
end

ファイルの RTW.HWDeviceRegistry データ定義をアップグレードするには、次を入力します。

target.upgrade("sl_customization","myPathTo/sl_customization.m")

現在のフォルダーに、関数によってこの registerUpgradedTargets.m ファイルが作成されます。

function targetObjects = registerUpgradedTargets(varargin)
% This function was generated using target data export.
 
    % Create target.LanguageImplementation 'MyDevVendor-MyDevType'
    languageimplementation = target.create('LanguageImplementation');
    languageimplementation.AtomicIntegerSize = 8;
    languageimplementation.DataTypes.Char.Size = 8;
    languageimplementation.DataTypes.Double.Size = 64;
    languageimplementation.DataTypes.Float.Size = 32;
    languageimplementation.DataTypes.Half.IsSupported = false;
    languageimplementation.DataTypes.Half.Size = 16;
    languageimplementation.DataTypes.Int.Size = 32;
    languageimplementation.DataTypes.Long.Size = 32;
    languageimplementation.DataTypes.LongLong.IsSupported = false;
    languageimplementation.DataTypes.LongLong.Size = 64;
    languageimplementation.DataTypes.Pointer.Size = 32;
    languageimplementation.DataTypes.PtrDiffT.Size = 32;
    languageimplementation.DataTypes.Short.Size = 16;
    languageimplementation.DataTypes.SizeT.Size = 32;
    languageimplementation.Endianess = target.Endianess.Unspecified;
    languageimplementation.Name = 'MyDevVendor-MyDevType';
    languageimplementation.WordSize = 32;
 
    % Create target.Processor 'MyDevVendor-MyDevType'
    processor = target.create('Processor');
    processor.LanguageImplementations(1) = languageimplementation;
    processor.Manufacturer = 'MyDevVendor';
    processor.Name = 'MyDevType';
 
    % Create target.LanguageImplementation 'MyDevVendor-MyDevType2'
    languageimplementation2 = target.create('LanguageImplementation');
    languageimplementation2.AtomicIntegerSize = 8;
    languageimplementation2.DataTypes.Char.Size = 8;
    languageimplementation2.DataTypes.Double.Size = 64;
    languageimplementation2.DataTypes.Float.Size = 32;
    languageimplementation2.DataTypes.Half.IsSupported = false;
    languageimplementation2.DataTypes.Half.Size = 16;
    languageimplementation2.DataTypes.Int.Size = 32;
    languageimplementation2.DataTypes.Long.Size = 32;
    languageimplementation2.DataTypes.LongLong.IsSupported = false;
    languageimplementation2.DataTypes.LongLong.Size = 64;
    languageimplementation2.DataTypes.Pointer.Size = 32;
    languageimplementation2.DataTypes.PtrDiffT.Size = 32;
    languageimplementation2.DataTypes.Short.Size = 16;
    languageimplementation2.DataTypes.SizeT.Size = 32;
    languageimplementation2.Endianess = target.Endianess.Unspecified;
    languageimplementation2.Name = 'MyDevVendor-MyDevType2';
    languageimplementation2.WordSize = 32;
 
    % Create target.Processor 'MyDevVendor-MyDevType2'
    processor2 = target.create('Processor');
    processor2.LanguageImplementations(1) = languageimplementation2;
    processor2.Manufacturer = 'MyDevVendor';
    processor2.Name = 'MyDevType2';
 
    targetObjects = [processor, processor2];
 
    % Add the target objects to MATLAB memory
    target.add(targetObjects, varargin{:});
end

MATLAB でハードウェア デバイス定義を登録するには、次を入力します。

registerUpgradedTargets()

MATLAB セッションをまたいで登録を保持するようにするには、次を入力します。

registerUpgradedTargets(UserInstall=true)

参考

| | | |

トピック