ローカル関数用のハードウェア インスタンスの生成
次の例では、MATLAB® でローカル関数を使用し、生成された HDL コードでローカル関数の実行ごとに個別のハードウェア モジュールを対応させる方法を説明します。
MATLAB のローカル関数
この例では、HDL コード生成に適した MATLAB コードでローカル関数を作成する場合のベスト プラクティスを説明します。
MATLAB コードがローカル関数を複数回実行しても、生成される HDL コードが複数のハードウェア モジュールをインスタンス化しない場合があります。複数のハードウェア モジュールをインスタンス化する代わりに、通常は関数が複数回呼び出され、状態変数が更新されます。
生成された HDL コードに、ローカル関数の実行ごとに対応する複数のハードウェア モジュールが含まれるようにする場合は、同じコードを使用し、関数名が異なる 2 つのローカル関数を指定します。コードの重複を避けたい場合は、System objects を使用して関数にこの動作を実装し、System object™ を複数回インスタンス化するという方法もあります。
MATLAB コード内のローカル関数ごとに個別の HDL ファイルを指定する場合は、ワークフロー アドバイザーの [詳細設定] タブの [HDL コード生成] セクションで、[関数に対してインスタンス化可能なコードを生成] を選択します。
mlhdlc_two_counters.m
の MATLAB コード
この関数により、2 つのカウンターが作成され、これらのカウンターの出力値が加算されます。2 つのカウンターを作成するため、同じコードの 2 つのローカル関数 (counter
と counter2
) が用意されています。メインのメソッドではこれらのローカル関数はそれぞれ 1 回ずつ呼び出されます。この関数で関数 counter
を 2 回呼び出しても、HDL コードで各カウンターごとに個別のハードウェア モジュールが生成されることはありません。
%#codegen function total_count = mlhdlc_two_counters(a,b) %This function contains two different local functions with identical %counters and calls each counter once. total_count1=counter(a); total_count2=counter2(b); total_count=total_count1+total_count2; function count = counter(enable_ctr) %four bit synchronous up counter %persistent variable for the state persistent count_val; if isempty(count_val) count_val = 0; end %counting up if enable_ctr count_val=count_val+1; end %limit from four bits if count_val>15 count_val=0; end count=count_val; function count = counter2(enable_ctr) %four bit synchronous up counter %persistent variable for the state persistent count_val; if isempty(count_val) count_val = 0; end %counting up if enable_ctr count_val=count_val+1; end %limit from four bits if count_val>15 count_val=0; end count=count_val;