Main Content

ユーザー定義 System Objects のコードの生成

ユーザー定義 System object の作成方法

ユーザー定義 System object™ を作成してコードを生成するには、次の手順に従います。

  1. matlab.System からサブクラス化されるクラスを作成します。

  2. 次のメソッド セットのいずれかを定義します。

    • setupImplstepImpl

    • setupImploutputImpl および updateImpl

  3. オプションで、System object にプライベートの状態プロパティがある場合、resetImpl メソッドを定義してそれらのプロパティをゼロに初期化します。

  4. System object のインスタンスを作成してそのオブジェクトを呼び出すか、あるいは output メソッドと update メソッドを呼び出す最上位の設計関数を記述します。

    メモ

    System object の初期化中に、resetImpl メソッドは自動的に実行します。HDL コード生成では、パブリックの reset メソッドを呼び出すことはできません。

  5. この最上位の設計関数の動作を確認するテスト ベンチ関数を記述します。

  6. HDL コードを生成します。

ユーザー定義 System object の例

この例では、setupImpl メソッドと stepImpl メソッドを実装するユーザー定義 System object の HDL コードを生成する方法を説明します。

  1. 書き込み可能なフォルダーに System object CounterSysObj を作成します。これは matlab.System からサブクラス化されるものです。CounterSysObj.m としてコードを保存します。

    classdef CounterSysObj < matlab.System
    
        properties (Nontunable)
            Threshold = int32(1)
        end
        properties (Access=private)
            State
            Count
        end
        methods
            function obj = CounterSysObj(varargin)
                setProperties(obj,nargin,varargin{:});
            end
        end
        
        methods (Access=protected)
            function setupImpl(obj, ~)
                % Initialize states
                obj.Count = int32(0);
                obj.State = int32(0);
            end
            function y = stepImpl(obj, u)
                if obj.Threshold > u(1)
                    obj.Count(:) = obj.Count + int32(1); % Increment count
                end
                y = obj.State;          % Delay output
                obj.State = obj.Count;  % Put new value in state
            end
        end
    end
    
    stepImpl メソッドは、System object 機能を実装します。setupImpl メソッドは、System object 内の永続変数の初期値を定義します。

  2. この System object を使用する関数を作成し、myDesign.m として保存します。この関数は DUT となります。

    function y = myDesign(u)
    
    persistent obj
    if isempty(obj)
        obj = CounterSysObj('Threshold',5);
    end
    
    y = obj(u);
    
    end

  3. DUT 関数を呼び出すテスト ベンチを作成し、myDesign_tb.m という名前で保存します。

    clear myDesign
    for ii=1:10
        y = myDesign(int32(ii));
    end
    

  4. DUT 関数の HDL コードを他の MATLAB® コードと同様に生成します。ただし、固定小数点変換をスキップします。

関連するトピック