ユーザー定義 System Objects のコードの生成
ユーザー定義 System object の作成方法
ユーザー定義 System object™ を作成してコードを生成するには、次の手順に従います。
matlab.System
からサブクラス化されるクラスを作成します。次のメソッド セットのいずれかを定義します。
setupImpl
とstepImpl
setupImpl
、outputImpl
およびupdateImpl
オプションで、System object にプライベートの状態プロパティがある場合、
resetImpl
メソッドを定義してそれらのプロパティをゼロに初期化します。System object のインスタンスを作成してそのオブジェクトを呼び出すか、あるいは
output
メソッドとupdate
メソッドを呼び出す最上位の設計関数を記述します。メモ
System object の初期化中に、
resetImpl
メソッドは自動的に実行します。HDL コード生成では、パブリックのreset
メソッドを呼び出すことはできません。この最上位の設計関数の動作を確認するテスト ベンチ関数を記述します。
HDL コードを生成します。
ユーザー定義 System object の例
この例では、setupImpl
メソッドと stepImpl
メソッドを実装するユーザー定義 System object の HDL コードを生成する方法を説明します。
書き込み可能なフォルダーに 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 内の永続変数の初期値を定義します。この System object を使用する関数を作成し、
myDesign.m
として保存します。この関数は DUT となります。function y = myDesign(u) persistent obj if isempty(obj) obj = CounterSysObj('Threshold',5); end y = obj(u); end
DUT 関数を呼び出すテスト ベンチを作成し、
myDesign_tb.m
という名前で保存します。clear myDesign for ii=1:10 y = myDesign(int32(ii)); end
DUT 関数の HDL コードを他の MATLAB® コードと同様に生成します。ただし、固定小数点変換をスキップします。