比例道

月に1回更新します

予期せぬラッチのなぞ

同期設計では「予期せぬラッチ」は禁じ手となっている.だけど,私はそれがなぜなのか知らない.次はこの問題を考えてみようと思う.例によってめちゃくちゃなこと言っているかもしれないので,鵜呑みにしないように.

同期設計では同一クロックで動くFFが組み合わせ回路を介して延々つながっている.予期せぬラッチってのは,その中のひとつがD-FFではなくD-ラッチになってしまうこと.クロックとは関係なしに入力データが出力される.これがなぜ悪いのか?

ラッチの出力先のFFにとっては迷惑な話だろう.組み合わせ回路2段分の遅延とラッチの遅延が加わったデータがやってくるのだ.それの変化が自分のセットアップ時間とホールド時間の間にたまたま入るかもしれない.そうなったらメタステーブルになってまずい.ラッチ生成が悪いのはこれで分かった.

じゃあ,予期せぬラッチではなくて,予期したラッチなら良いのかってことを考えよう.ラッチ出力を受けるFFのセットアップ時間より早くデータが到着してホールド時間より遅く次のデータが到着してって,待て待て.ラッチ出力を受けるFFはラッチのせいでクロックを1つ飛ばすなんて知らない.1つめのクロックでデータを受けようとするだろう.組み合わせ回路2段分がよほど軽い回路でない限り,セットアップ時間に間に合うとは思えない.じゃあ,間に合えば良いのか?たぶん良い.しかし配置配線ツールのセットアップ時間解析が混乱するだろう.組み合わせ回路2段分+ラッチをひとつの組み合わせ回路として解析しなくてはならない.こんなことを柔軟にやってくれるとは思えない.

結論:ラッチができるとツールが混乱するので,禁じ手なのだ.