未定義のステート

[] [] []


大抵、ステートの数は2のべき乗にはならないので、ステートに値を割り当てていくと未定義の値が生じてしまう。そこで、

ステートが未定義値になった場合の遷移先も定義しておいた方がよい

RTL記述どおりに動作していれば未定義値になることはなく、可能性としては電源ノイズやα線でFFが反転するぐらいだが、安全のため、不定(default: state_reg<='bx)にせずに、次の3つのいずれかにしておくとよい。

(1) 初期状態に戻る (default: state_reg<=IDLE): とりあえずステートマシンは止めずに無難な状態に遷移する。

(2) その未定義状態にとどまる (default: state_reg<= state_reg): デバッグするには発生時に状態を維持するのがよい。

(3) 異常時の状態を定義しておく (default: state_reg<=ERROR): もし異常になったら外部に知らせるなどの動作をさせるとよい。


[] [] []