20260521_4


スリーステートバッファ

  • 一つの論理回路から駆動できる次の入力には限度がある
  • そのためバスドライバなどでバッファを利用
  • 論理値0,1,ハイインピーダンスの三状態を取りうる
    • ハイインピーダンスは回路から切り離されている状態
  • Active-highとActive-Lowがある
    • 横からの入力がhighで動作するかlowで動作するか
    • インバーターがついている場合も
  • スリーステートバッファの出力を衝突させると0と1が一緒になってしまうことがあるので、そのまま束ねるのではなくて基本的にはマルチプレクサを使うべき
  • ハイインピーダンス状態を利用すると複数の出力を一つのバスに流せる(回路から切り離せるため)
  • CPUのピン数には制限があるのでこのような切り替えが有効になる
    • 入出力ピンとしての利用
    • 双方向信号が流せる

デコーダーとエンコーダー

  • デコーダー
    • 特定の入力の組み合わせから一つの線をhighにする
    • 入力3本に対して出力8パターンまで可能
    • 出力を反転もあり
  • 7442チップ
    • 4-10ラインデコーダ
flowchart TD
    subgraph 入力
        A["A (LSB)"]
        B["B"]
        C["C"]
        D["D (MSB)"]
    end

    subgraph "74LS42<br/>BCD to Decimal Decoder"
        DEC[デコーダー]
    end

    subgraph 出力
        Y0["0 (active low)"]
        Y1["1"]
        Y2["2"]
        Y3["3"]
        Y4["4"]
        Y5["5"]
        Y6["6"]
        Y7["7"]
        Y8["8"]
        Y9["9"]
    end

    A & B & C & D --> DEC
    DEC --> Y0 & Y1 & Y2 & Y3 & Y4 & Y5 & Y6 & Y7 & Y8 & Y9

    style DEC fill:#f9f,stroke:#333,stroke-width:2px
  • 論理関数を作るにあたって、デコーダーがあるとみたいなのを直感的に表現できる

エンコーダー

  • 入力を二進数にエンコードする
  • 基本的に表の下半分はドントケアとする
  • 電光掲示板とかの7セグみたいなイメージ
flowchart TD
    subgraph 入力
        D0["D0 (最低優先)"]
        D1["D1"]
        D2["D2"]
        D3["D3"]
        D4["D4"]
        D5["D5"]
        D6["D6"]
        D7["D7 (最高優先)"]
    end

    subgraph "優先度付きエンコーダー<br/>8-to-3 Priority Encoder"
        ENC[エンコーダー]
    end

    subgraph 出力
        A["A0 (LSB)"]
        B["A1"]
        C["A2 (MSB)"]
        V["V (有効)"]
    end

    D0 & D1 & D2 & D3 & D4 & D5 & D6 & D7 --> ENC
    ENC --> A & B & C & V

    style ENC fill:#bbf,stroke:#333,stroke-width:2px

優先度順位付きエンコーダーであればより大きい数字を優先する


ラッチとフリップフロップ

  • 順序回路は過去の入力によって出力が変わる
  • クロック周波数のそれとか
  • 基本的には共通ブロックを持つもののみ扱う

状態を持つ回路

  • インバーターの出力をインバーターの入力につなぐとクロック回路になる
  • インバーター2つを輪っかにすると安定状態を作る

セットリセットラッチ

  • NORを2つ繋いだもの
  • 後側を切り替える
  • 前側を切り替える
    • 安定状態は2つ
flowchart LR
    subgraph "SR Latch (NORゲート版)"
        S[S] -->|S=1でセット| NOR1["NOR"]
        R[R] -->|R=1でリセット| NOR2["NOR"]
        Q[Q] -->|フィードバック| NOR2
        Qbar[Q'] -->|フィードバック| NOR1
        NOR1 --> Q
        NOR2 --> Qbar
    end

    style NOR1 fill:#bbf,stroke:#333
    style NOR2 fill:#bbf,stroke:#333
  • S=1, R=0 → Q=1 (セット)
  • S=0, R=1 → Q=0 (リセット)
  • S=0, R=0 → 保持状態
  • S=1, R=1 → 禁止 (不定)
  • セットとリセットを書き換えることが可能
stateDiagram-v2
    direction TB
    classDef stable fill:#bbf,stroke:#333
    classDef invalid fill:#f99,stroke:#333

    Q01["Q=0, Q'=1<br/>(リセット状態)"]:::stable
    Q10["Q=1, Q'=0<br/>(セット状態)"]:::stable
    Invalid["Q=0, Q'=0 または<br/>Q=1, Q'=1 (禁止)"]:::invalid

    Q01 --> Q01 : S=0, R=0 (保持)
    Q01 --> Q10 : S=1, R=0 (セット)
    Q01 --> Invalid : S=1, R=1

    Q10 --> Q10 : S=0, R=0 (保持)
    Q10 --> Q01 : S=0, R=1 (リセット)
    Q10 --> Invalid : S=1, R=1

    Invalid --> Q01 : S=0, R=1 (リセット)
    Invalid --> Q10 : S=1, R=0 (セット)
  • (S,R)=(0,0):現在の状態を保持
  • (S,R)=(0,1):リセット(Q=0)
  • (S,R)=(1,0):セット(Q=1)
  • (S,R)=(1,1):禁止状態(メタステーブルになる可能性あり)
SR現在の Q次の Q次の Q’動作
00001保持 (no change)
00110保持 (no change)
01001リセット
01101リセット
10010セット
10110セット
11---禁止 (不定・競合状態)

セットリセットラッチは

で表せる

スイッチのデバウンスなどに利用(ノイズの除去)

NORで作れるということはNANDでも作れるということ


ゲート付きのラッチ

  • enableを入力に追加する
  • 入力S,G,R
  • 出力はP,Q


透過型ラッチ

NANDラッチ (NAND SRラッチ)

NANDゲート2つで構成される基本的なSRラッチ。

flowchart TD
    subgraph "NAND SR Latch"
        N1["NAND1"]
        N2["NAND2"]
    end
    S["S (Set)"] --> N1
    R["R (Reset)"] --> N2
    Q1["Q"] --> N2
    Q2["Q'"] --> N1
    N1 --> Q1
    N2 --> Q2
    style N1 fill:#ff9,stroke:#333
    style N2 fill:#ff9,stroke:#333

真理値表 (S,R active low):

SRQQ’動作
0110セット
1001リセット
11--保持
0011禁止 (不定)

ゲート付きラッチ (Gated SR Latch / 透過型ラッチ)

Enable (G or CLK) で入力を制御。

flowchart TD
    subgraph "Gated SR Latch"
        AND1["AND1"]
        AND2["AND2"]
        N1["NAND1"]
        N2["NAND2"]
    end
    S["S"] --> AND1
    R["R"] --> AND2
    G["G (Enable)"] --> AND1 & AND2
    AND1 --> N1
    AND2 --> N2
    Q["Q"] --> N2
    Qb["Q'"] --> N1
    N1 --> Q
    N2 --> Qb
    style AND1 fill:#9f9,stroke:#333
    style AND2 fill:#9f9,stroke:#333
    style N1 fill:#ff9,stroke:#333
    style N2 fill:#ff9,stroke:#333

真理値表 (G=1 のとき有効):

GSR次のQ動作
0--保持ラッチ (変化なし)
100保持保持
1010リセット
1101セット
111不定禁止

Dラッチ版にすると入力がDとD’になる場合が多い。