- 第3章 FPGAの仕組み
章トップ(目次)
3-1 FPGAとは何か
3-2 論理回路の基本構成(LUT / FF)
3-3 配線資源とスイッチ構造
3-4 クロックと同期設計
3-5 FPGAの設計方法(HDL)
3-6 CPU・GPU・FPGAの違い
3-7 構成データと再構成
3-8 タイミング設計と制約(STA)
3-9 配置配線(Place & Route)
3-10 I/Oとピン制約
3-11 CPU・GPU・FPGAの本質的違い
▶ 第2章 GPUの仕組み
3-4 クロックと同期設計
FPGA設計において、
クロックと同期は最も重要な概念のひとつです。
どれほど正しい論理回路を作っても、
クロック設計を誤ると回路は正しく動作しません。
クロックとは何か
クロックとは、
回路全体の動作タイミングを決める
基準となる周期信号です。
フリップフロップ(FF)は、
クロックの立ち上がり(または立ち下がり)に同期して、
入力信号を取り込みます。
クロック: ┌─┐ ┌─┐ ┌─┐ └─┘ └─┘ └─┘ ↑ この瞬間にFFが値を保持
同期回路と非同期回路
FPGA設計では、
同期回路を基本とします。
同期回路とは、
すべての状態更新がクロックに揃って行われる回路です。
- 設計が理解しやすい
- 動作検証が容易
- タイミング解析が可能
一方、非同期回路は、
設計や検証が難しく、
意図しない誤動作を招きやすいため、
FPGAでは慎重に扱う必要があります。
クロックドメインとその問題
複数のクロックを使う場合、
それぞれのクロックに属する回路群を
クロックドメインと呼びます。
異なるクロックドメイン間で信号をやり取りすると、
メタステーブルと呼ばれる不安定状態が発生する可能性があります。
- 信号が0でも1でもない状態になる
- 動作が不定になる
- 再現性のないバグが発生する
同期設計の基本原則
安定したFPGA設計を行うためには、
以下の原則を守ることが重要です。
- 1つのクロックでできるだけ統一する
- クロックを論理で生成しない
- 非同期入力はFFで同期させる
- クロック間通信には専用回路を使う
CPUとの違い
CPUでは、
クロック設計はチップ内部で完結しており、
ソフトウェア開発者が意識することはほとんどありません。
一方FPGAでは、
クロック設計そのものが設計者の責任
になります。
ここがFPGA設計の難しさであり、
同時に自由度の高さでもあります。