クロック同期回路とは、複数の論理回路間をDフリップフロップ(FF)などで繋げた論理回路のことです。
上記の各論理回路は、クロックの周期に合わせて、入出力の状態が変化します。
例えば、以下のように、論理回路1と2の間にDフリップフロップを挟んで、C端子にクロックを入力したとします。なお、論理回路1も別のDフリップフロップの出力が入力されているとします。
このとき、論理回路1の出力がHighに確定した場合を赤色、Lowに確定した場合を青色とすると、タイミング図は、以下のようになります。
上記を見ると、クロックの立ち上がりエッジ時のDの状態が次のクロックの周期中、Qで保持できていることが分ります。
これにより、論理回路2の入力は、クロックに合わせて、HighかLowに固定されます。よって、クロックに合わせて、論理回路2の状態が変化します。
さらに、1クロック前の論理回路1の出力が論理回路2に入力されていると言えます。
これがクロック同期回路の基本要素です。
上記で示した通り、クロック同期用のDフリップフロップ(FF)を除く、各論理回路は、1クロック前の前段の論理回路の出力を入力として、動きます。
これにより、以下のように、論理回路がFFで多段に接続されているとき、各論理回路は、1クロック遅延して動くと考えることができます。
よって、論理回路1が1クロック目で動くとした場合、ある瞬間の論理回路1の出力の影響は、論理回路2では2クロック目にその影響が伝わり、論理回路3では3クロック目にその影響が伝わります。
n段で一つの処理が完了するクロック同期回路があれば、そのクロック同期回路の遅延は、クロックの周期のn倍となります。
論理回路は、入力してから出力されるまで遅延があります。
よって、クロック同期回路のそれぞれの論理回路の遅延よりもクロックの周期を長くする必要があります。
これを守らない場合、クロック同期回路は、正しく動きません。
ある論理回路の後段に、順序回路が接続されていると、その論理回路がハザードを出した際に、順序回路が誤動作する可能性があります。
ある論理回路と順序回路の間にDフリップフロップ(FF)を挟んで、クロック同期回路にすれば、ハザードが終わって出力が安定した後に、クロックの立ち上がりエッジでFFが出力を取り込むため、ハザードによる誤動作を回避できます。
よって、クロック同期回路は、ハザードによる誤動作の解決策と言えます。