このページの目次
时序論理回路
时序論理とは
时序論理 — 出力は現在の入力だけでなく、過去の状態にも依存します。
特徴: クロック信号 (Clock) + 状態保持
ラッチとフリップフロップ
SR ラッチ (基本記憶素子)
NOR による実装:
┌───┐
S ──┤ ├── Q
│NOR│
│ ├──┐
└───┘ │
┌───┐ │
R ──┤ ├──┘── Q̄
│NOR│
└───┘
S=1,R=0 → セット (Q=1)
R=1,S=0 → リセット (Q=0)
S=0,R=0 → ホールド (保持)
S=1,R=1 → 禁止! (Q=Q̄=0, 解除後の状態は不確定)
D ラッチ (レベルトリガ)
レベルトリガ: CLK=1 の間 D に追随し、CLK=0 でラッチ
D ────┬── Q
│
CLK ──┘
問題点: CLK=1 の間に D が変化すると、Q も追随して変化する (トランスペアレント)
フィードバックループ内で発振を引き起こす可能性がある
D フリップフロップ (エッジトリガ) — デジタル回路の主力
シンボル:
┌───┐
D ──┤D Q├── Q
CLK─┤> │
└───┘
クロック立下りエッジ (↑) のみ D をサンプリングし、それ以外の時間は Q を不変に保つ
重要なタイミングパラメータ:
tsu (セットアップ): CLK エッジの前に D が安定している必要がある最短時間
th (ホールド): CLK エッジの後に D が保持されている必要がある最短時間
tcq (clk→q): CLK エッジから Q の更新までの遅延
tsu/th を違反すると → 亜安定状態 (metastability) → Q が発振したり不確定になったりする!
その他のフリップフロップ
JK フリップフロップ:
J=1,K=0 → Q=1 (セット)
J=0,K=1 → Q=0 (リセット)
J=1,K=1 → Q を反転 (トグル)
J=0,K=0 → ホールド
T フリップフロップ (トグル):
T=1 → 各クロックエッジで1回反転
T=0 → 保持
T フリップフロップをカスケード接続 = カウンタ
レジスタ (Register)
n 個の D フリップフロップが同じクロックを共有 = n ビットレジスタ
┌───┐
D0 ─┤D Q├── Q0
│> │
└───┘
┌───┐
D1 ─┤D Q├── Q1
│> │
└───┘
... ← 合計 n 個
↑
CLK
各クロック立下りエッジで、すべての D がサンプリングされ → Q が更新される
これは CPU 内のレジスタやパイプラインレジスタの基本原理である
カウンタ (Counter)
非同期 (リップル) カウンタ
Q0 → CLK1 → Q1 → CLK2 → Q2 ...
前の段の Q 出力が次の段の CLK を直接駆動
単純だが遅い (段差遅延が累積) + 中間状態にスパイクが発生する
同期カウンタ
すべてのフリップフロップが同じクロックを共有
任意の計数シーケンス (アップ/ダウン/双方向)
典型例: 74HC161 (4ビット同期), 74HC193 (双方向)
一般的な計数方式
2進数: 0→1→2→...→2ⁿ-1→0
10進数: 0→1→...→9→0 (BCDコード)
グレイコード: 1回の変換で1ビットのみ変化 (競合を回避)
BCD: 000→001→010→011→100...
グレイ: 000→001→011→010→110...
1回の変換で1ビットのみ反転 → クロックドメイン間伝送に適している
状態機械 (FSM)
Moore 型
Mealy 型
FSM の実装
1. 状態エンコーディング (2進数/ワンホットコード/グレイコード)
2. 現在の状態 → レジスタ
3. 次の状態 → 組合せ論理 (状態 + 入力 → 次の状態)
4. 出力論理 → Moore/Mealy
ワンホットコード: N個の状態 = Nビット、1ビットのみが1
利点: 出力/次の状態の論理が単純
欠点: フリップフロップの数が多い
タイミング解析
セットアップ/ホールド時間
tsu th
├──┤├┤
D ───┘ └────────────
↑
CLK ─────┘ ─────────
tsu: クロックエッジの前に D が安定している必要がある時間
th: クロックエッジの後に D が保持されている必要がある時間
違反 → 亜安定状態!
最大周波数
fmax = 1 / (tcq + tcomb(max) + tsu)
tcq: フリップフロップの CLK→Q 遅延
tcomb: 組合せ論理の最大遅延 (クリティカルパス)
tsu: 次の段のフリップフロップのセットアップ時間
fmax を向上させるには:
- 組合せ論理の段数を減らす
- パイプラインレジスタを挿入する (長いパスを複数の短いパスに分割する)
亜安定状態 (Metastability)
D が tsu/th のウィンドウ内で変化する場合:
Q は中間電位に入る可能性があり → 発振 → 最終的に 0 または 1 に安定する
平均故障間隔 (MTBF):
MTBF ∝ e^(t_wait/τ) / (f_clk × f_data)
解決策: 2段同期器 (2回サンプリング)
async_in → [DFF] → [DFF] → sync_out
↑CLK ↑CLK
1段目で亜安定状態になる可能性があるが、2段目ではほぼ確実に安定している
クロックドメイン間伝送 (CDC)
クロックドメインを跨ぐ信号伝送の黄金律:
1. 1ビット信号: 2段同期器 (デュアルフリップフロップ)
2. 複数ビットバス: 非同期 FIFO またはハンドシェイクプロトコルを使用
複数ビットを直接同期してはならない! (各ビットが異なるサイクルでキャプチャされる可能性がある)
3. 低速→高速: 信号は少なくとも高速クロックの2周期間保持する
4. 高速→低速: 信号は低速クロックがサンプリングできる十分な時間保持する
キーワード: フリップフロップ, DFF, セットアップ時間, ホールド時間, 亜安定状態, 状態機械, Moore, Mealy, CDC, 同期器