宇宙誕生の少し前から宇宙終焉の少し先までを数で表す論文

この宇宙を数で表すことは出来るのか。

第3-4節 クロックと同期設計

3-4 クロックと同期設計

FPGA設計において、
クロックと同期は最も重要な概念のひとつです。
どれほど正しい論理回路を作っても、
クロック設計を誤ると回路は正しく動作しません。

クロックとは何か

クロックとは、
回路全体の動作タイミングを決める
基準となる周期信号です。
フリップフロップ(FF)は、
クロックの立ち上がり(または立ち下がり)に同期して、
入力信号を取り込みます。


クロック:  ┌─┐ ┌─┐ ┌─┐
           └─┘ └─┘ └─┘
                ↑
         この瞬間にFFが値を保持


同期回路と非同期回路

FPGA設計では、
同期回路を基本とします。
同期回路とは、
すべての状態更新がクロックに揃って行われる回路です。

  • 設計が理解しやすい
  • 動作検証が容易
  • タイミング解析が可能

一方、非同期回路は、
設計や検証が難しく、
意図しない誤動作を招きやすいため、
FPGAでは慎重に扱う必要があります。

クロックドメインとその問題

複数のクロックを使う場合、
それぞれのクロックに属する回路群を
クロックドメインと呼びます。

異なるクロックドメイン間で信号をやり取りすると、
メタステーブルと呼ばれる不安定状態が発生する可能性があります。

  • 信号が0でも1でもない状態になる
  • 動作が不定になる
  • 再現性のないバグが発生する

同期設計の基本原則

安定したFPGA設計を行うためには、
以下の原則を守ることが重要です。

  • 1つのクロックでできるだけ統一する
  • クロックを論理で生成しない
  • 非同期入力はFFで同期させる
  • クロック間通信には専用回路を使う

CPUとの違い

CPUでは、
クロック設計はチップ内部で完結しており、
ソフトウェア開発者が意識することはほとんどありません。

一方FPGAでは、
クロック設計そのものが設計者の責任
になります。
ここがFPGA設計の難しさであり、
同時に自由度の高さでもあります。