● 動作と単位動作
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 は条件の 1 も 2 も 3 も成立しなかったとき」のみ実行されます.
条件のネスティングについて
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 のページへ戻る
 ハードウェア動作の記述言語〜 SFL のページへ戻る