このページの目次

时序論理回路

时序論理とは

时序論理 — 出力は現在の入力だけでなく、⁠過去の状態にも依存します。

时序逻辑核心结构:组合逻辑 + 反馈存储 = 有记忆的电路

入力 組合せ論理 出力

↓ 状態更新 フィードバック(状態読み取り) ↑ 記憶素子 クロック CLK によりサンプリング制御 特徴: クロック信号(Clock) + 状態保持 —— フィードバックとクロックがあり、出力は現在の入力だけでなく、過去の状態にも依存します。

特徴: クロック信号 (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 型

Moore 型状態機械: 出力は現在の状態のみに依存 S0 out = A 条件を満たす (クロックエッジで遷移) S1 out = B 出力は現在の状態のみに依存し、状態遷移はクロックエッジでのみ発生する —— 出力の変化はクロックに追従するため、スパイク (glitch) は発生しない。

Mealy 型

Mealy 型状態機械: 出力は現在の状態 + 入力に依存 S0 現在の状態 入力が 1 のとき出力 = 1 (即時応答、クロックエッジを待たない) 出力 = 現在の状態 + 現在の入力。入力が変化すると出力も直ちに変化する —— いつでも発生する可能性があり、スパイク (glitch) のリスクがある。ただし、状態数は Moore 型より少なくなる傾向がある。

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, 同期器