比例道

月に1回更新します

ホールドタイムの謎

めちゃくちゃなことを言っているかもしれないので,以下の記述を鵜呑みにしないように.

同期設計では,セットアップ時間よりも早くデータが到着して,そのデータがホールド時間よりも長く維持できていなくてはならないと思っていた.ところが,これが微妙に違っていることに気付いた.セットアップ時間は良いのだが,ホールド時間ってのは,現データを維持するのではなく,ホールド時間が終わるまでに次のデータが来てはいけないって制約らしい.本当か?じゃあ,次のデータが来なければ,ホールド時間中にデータが暴れても良いってこと?そんなはずはないと思うのだが,どうもそうらしい.

FFの中身に立ち戻って考えると理解できるのだろうか.FFの中身って,インバータが二組くるっと回って繋がっている(うわっ,誤解を生みそうな表現だ.インバータ2個のループ回路が前段と後段にあるという意味だ).クロックがHighになると前段のインバータの入り口が遮断される.遮断される直前に入力データが変わってしまうと,前段のインバータ出力が安定した値に落ち着かないかもしれないので,あんまり直前は困るよってのがセットアップ時間.ここまでは良い.

クロックがHighの間は入り口は遮断されているので,入力データがどんなに暴れていようと知ったことじゃない.ここまでも良い.そうこうしているうちにクロックはLowになる.すると入り口が繋がる.これからは入力データが変わると前段のインバータ入力が変わるので,前段の出力はころころ変わるかもしれない.ころころ変わっているのは良いが,次にクロックがHighになるちょっと前(セットアップ時間)までには変わるのは止めてくれよとなる.

これまで書いたことを振り返ると,クロックがHighになった後は入り口は遮断されている訳だから,入力データがどんなに暴れていてもかまわない.つまり,入力データが維持されていなくても良いってことになる.ホールド時間中にデータが暴れても良いってことだ.これで疑問の半分は解けた.もう半分の疑問は,ホールド時間中に次のデータが来てしまったらどうなるかってことだ.入り口が遮断されているのだから,次のデータが来ても良いじゃないかと思う.あれ?おかしいぞ.ホールド時間の意味が無いってことじゃないか.ええっ?どこで間違えたのだろう.

もっと考えてみよう.クロックで開閉するスイッチについて良く考えてみると,クロックがHighになってすぐにFFの入り口が遮断される訳じゃない.Highになってから徐々に遮断されていくだろう.遮断しきる前に入力データが変わってしまっては前段が不安定になる.これがホールド時間ってことじゃないだろうか.たぶんそうだ.これで残り半分の疑問も解決した.めでたし,めでたしかな.