3.10 動作


● 動作と単位動作

1マシン・サイクル分の動作を表す形式を動作と呼び,par,alt,any,if,else などの構文要素によって,並列性や条件の階層的な関係を表現します.一方,個々の動作は単位動作と呼びます.

1個の単位動作はそのまま動作となります.2個以上の動作は,

par {
動作1
動作2
}

などと表現することで動作となります.

● 条件による制御

動作を条件で制御するもっとも簡単な形式は,

if (条件) 動作

です.ここで,条件を表す式のビット幅は1 でなければなりません.条件の式の値が "1" のとき動作が実行されます.条件によって制御される動作では,条件は unknown であってはなりません.条件が unknown となる SFL記述は誤りです.このような SFL記述に対して処理系は正しく動作しません.動作シミュレータは,シミュレーション実行中に,条件が unknown となるとエラーを通知します.

複数の条件をもつ動作

any では条件付きの動作をまとめて動作とします.たとえば,

any {
条件1 :動作1;
条件2 :動作2;
条件3 :動作3;
else :動作4;
}

では,条件1 が成立したとき動作1 が実行され,条件2 が成立したとき動作2 が実行され,条件3 が成立したとき動作3 が実行されます.条件1,2,3 がすべて成立すれば動作1,2,3 が全部実行されます.動作4 は,条件1 も条件2 も 条件3 も成立しなかったときのみ実行されます.

if (条件) 動作 は,any{条件: 動作} と同じです.

優先付きの複数の条件をもつ動作

altでは,優先付きの条件をもつ動作をまとめて動作とします.たとえば,

alt {
条件1 :動作1;
条件2 :動作2;
条件3 :動作3;
else :動作4;
}

では,「条件1 が成立したとき」動作1 が実行され,「条件1 が成立せず条件2 が成立したとき」動作2 が実行され,「条件1条件2 も成立せず条件3 が成立したとき」動作3 が実行されます.「動作4条件123 も成立しなかったとき」のみ実行されます.

条件のネスティングについて

par,any,altは,ネスティングして使うことができます.たとえば,

state st1  any {
flg : par {
counter := in ;
goto st2 ;
any {
counter<0> : out = in ;
else : out = counter ;
}
}
}

では,状態 st1 の動作として any{...}が定義されており,その意味は「ステージが st1 という状態にあるマシン・サイクルでは,flg が "1" のとき counter:=in; と goto st2; を実行し,さらに counter のビット 0 (最下位ビット) が "1" ならば,out=in; を実行し,そうでないときは out=counter; を実行する」です.


ハードウェア動作の記述言語〜 SFL のページへ戻る

ホームページに戻る