同期設計ルール
デジタル回路設計における「同期設計ルール」は、構造的には次の3つで言い表せる。
(1) フリップフロップ(FF)のクロック端子にはクロック信号だけを入れる
(2) 逆にクロック信号はFFのクロック端子だけに入れる
(3) 組合せ回路でループを作らない
組合せ回路でループを作ると発振するか又は記憶素子(ラッチ)を形成するので、ルール(3)はFF以外の記憶素子は存在させないことを意味している。さらにルール(1)(2)により唯一の記憶素子であるFFはクロック信号のエッジでのみ変化する。
◇
同期設計にする利点は、満たすべきタイミング条件が2つのFF間の転送タイミングに限られることである。
1つめの条件は、出力側FFの出力信号の変化が入力側FFのセットアップタイムよりも前に伝わること
tCO + tPD(max) < tPERIOD - tSU ・・・(1)
もう1つは、入力側FFのホールドタイムより後に伝わることである。
tHD < tCO + tPD(min) ・・・(2)
ここで条件(1)はクロック周期を長くしさえすれば必ず成り立つし、条件(2)はFPGAでは必ず成り立つようにデバイスと配置配線ツールが設計されている。
このように検証すべきタイミング条件が限定されるとツールで自動的・網羅的にチェックできる。またロジック設計とタイミング設計が独立になる。すなわちRTL記述でロジックを設計検証してから、配置配線してタイミングを設計検証すればよい。逆に同期設計にしないと、RTL記述と配置配線を行ったり来たりして収束しないかもしれない。
◇◇
一方、同期設計する欠点は、
・ 全てのFFに同時にクロック信号を分配しなければならない
・ 非同期設計よりもトランジスタが多く必要になる
・ 必要時のみ信号を変化させる非同期設計よりも消費電力が大きくなる
であるが、FPGAではこれらの欠点は許容できるレベルになっており、特に大規模な回路を現実的な設計コストで実装するには、同期設計が唯一の解となっている。