02.08.2013 Views

System Generator for DSP リファレンス ガイド - Xilinx

System Generator for DSP リファレンス ガイド - Xilinx

System Generator for DSP リファレンス ガイド - Xilinx

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

R<br />

ステート マシンの構築<br />

MCode ブロックを使用してステート マシン を構築する方法は、 2 つあ り ます。 1 つは、 MATLAB<br />

関数を使用し て処理状態を把握し ない遷移関数を指定し、 MCode ブロック と 1 つまたは複数のス<br />

テー ト レジスタ ブ ロ ッ ク を組み合わせる方法です。 通常、 MCode ブロックは次のステート を表す<br />

値でレジス タ を駆動し、 レジス タは現在のステー ト を MCode ブロッ クに送信します。 これには、<br />

MCode ブロックからのステート出力の精度をスタティ ックにする (ブロッ クへのどの入力からも<br />

独立させる) 必要があ り ます。 場合に よ っ ては、 xfix() 変換関数を使用し て、 ス タ テ ィ ッ ク な精度に<br />

する必要のあ る こ と も あ り ます。 次のコードは、 これを実行する例です。<br />

function nextstate = fsm1(currentstate, din)<br />

% some other code<br />

nextstate = currentstate;<br />

switch currentstate<br />

case 0, if din==1, nextstate = 1; end<br />

end<br />

% a xfix call should be used at the end<br />

nextstate = xfix({xlUnsigned, 2, 0}, nextstate);<br />

もう 1 つの方法では、 ス テー ト 変数を使用し ます。 上記の関数は、 次の よ う に書き直す こ と がで き<br />

ます。<br />

function currentstate = fsm1(din)<br />

persistent state, state=xl_state(0,{xlUnsigned,2,0});<br />

currentstate = state;<br />

switch double(state)<br />

case 0, if din==1; state = 1; end<br />

end<br />

ステー ト 変数の リ セ ッ ト 信号と イネーブル信号<br />

MCode ブ ロ ッ ク では、 ス テー ト 変数への条件代入文に含まれる分岐が 2 つ以下の場合、 自動的に<br />

レ ジ ス タ の リ セ ッ ト 信号およびイ ネーブル信号を推論させる こ と がで き ます。<br />

たとえば、 次の M コードでは persistent ステート変数 r1 の条件代入文で イ ネーブル信号が推論さ<br />

れます。<br />

function myFn = aFn(en, a)<br />

persistent r1, r1 = xl_state(0, {xlUnsigned, 2, 0});<br />

myFn = r1;<br />

if en<br />

r1 = r1 + a<br />

else<br />

r1 = r1<br />

end<br />

こ の場合、 persistent ス テー ト 変数の r1 への条件代入文に 2 つの分岐があ り ます。 こ の条件代入を<br />

実行する ために、 レ ジ ス タ が 1 つ使用さ れています。 レジスタの入力は r1 + a に、出力は r1 に接続<br />

されます。 このレジスタのイネーブル信号は推論され、 en がアサート されたと きに en ポー ト に接<br />

続されます。 persistent ス テー ト 変数の r1 は en が false になる と r1 + a に代入され、 レジス タのイ<br />

ネーブル信号がデ ィ アサー ト さ れる と r1 が r1 に代入されます。<br />

次の M コード でも、 イネーブル信号が推論されます。<br />

function myFn = aFn(en, a)<br />

persistent r1, r1 = xl_state(0, {xlUnsigned, 2, 0});<br />

myFn = r1;<br />

if en<br />

r1 = r1 + a<br />

232 japan.xilinx.com <strong>System</strong> <strong>Generator</strong> <strong>for</strong> <strong>DSP</strong> <strong>リファレンス</strong> ガイ ド<br />

リリース 9.2.00 2007 年 8 月

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!