Main Content

ローカル関数用のハードウェア インスタンスの生成

次の例では、MATLAB® でローカル関数を使用し、生成された HDL コードでローカル関数の実行ごとに個別のハードウェア モジュールを対応させる方法を説明します。

MATLAB のローカル関数

この例では、HDL コード生成に適した MATLAB コードでローカル関数を作成する場合のベスト プラクティスを説明します。

  • MATLAB コードがローカル関数を複数回実行しても、生成される HDL コードが複数のハードウェア モジュールをインスタンス化しない場合があります。複数のハードウェア モジュールをインスタンス化する代わりに、通常は関数が複数回呼び出され、状態変数が更新されます。

  • 生成された HDL コードに、ローカル関数の実行ごとに対応する複数のハードウェア モジュールが含まれるようにする場合は、同じコードを使用し、関数名が異なる 2 つのローカル関数を指定します。コードの重複を避けたい場合は、System objects を使用して関数にこの動作を実装し、System object™ を複数回インスタンス化するという方法もあります。

  • MATLAB コード内のローカル関数ごとに個別の HDL ファイルを指定する場合は、ワークフロー アドバイザーの [詳細設定] タブの [HDL コード生成] セクションで、[関数に対してインスタンス化可能なコードを生成] を選択します。

mlhdlc_two_counters.m の MATLAB コード

この関数により、2 つのカウンターが作成され、これらのカウンターの出力値が加算されます。2 つのカウンターを作成するため、同じコードの 2 つのローカル関数 (countercounter2) が用意されています。メインのメソッドではこれらのローカル関数はそれぞれ 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;

参考

|

関連するトピック