この例では、MCode ブロックを使用して、柔軟なインプリメンテーションを可能にするため持続性ステート変数とパラメーターを定義したアキュムレータを作成する方法を示します。次の M コードは、xl_accum.m に含まれる M 関数 xl_accum
を定義します。
function q = xl_accum(b, rst, load, en, nbits, ov, op, feed_back_down_scale)
% q = xl_accum(b, rst, nbits, ov, op, feed_back_down_scale) is
% equivalent to our Accumulator block.
binpt = xl_binpt(b);
init = 0;
precision = {xlSigned, nbits, binpt, xlTruncate, ov};
persistent s, s = xl_state(init, precision);
q = s;
if rst
if load
% reset from the input port
s = b;
else
% reset from zero
s = init;
end
else
if ~en
else
% if enabled, update the state
if op==0
s = s/feed_back_down_scale + b;
else
s = s/feed_back_down_scale - b;
end
end
end
次の図に、M 関数 xl_accum
を使用するアキュムレータ MCode ブロックを含むサブシステムを示します。MCode ブロックには、MCode Accumulator という名前が付いています。サブシステムには、比較のため、Accumulator というAMD アキュムレータ ブロックも含まれています。MCode ブロックは、AMD アキュムレータ ブロックと同じ機能を持ちますが、MCode ブロックのパラメーターをマスク インターフェイス (パラメーター ダイアログ ボックスの [Interface] タブ) で指定している点が異なります。
図 1. MCode アキュムレータ
Accum_MCode1
ブロックのオプションの入力 rst
および load
は、[Interface] タブでディスエーブルに設定されています。次に、MCode Accumulator ブロックのパラメーター ダイアログ ボックスを示します。
図 2. MCode アキュムレータのマスク
この例には、同じ M 関数を使用した MCode ブロックのアキュムレータ サブシステムがさらに 2 つ含まれていますが、異なるパラメーター設定を使用して、異なるアキュムレータを作成しています。