20260618_4


11.4 他の系列のカウンタ(続き)

Don’t-Care状態とSelf-Starting

ジョンソンカウンタのような特殊系列カウンタでは、電源投入時に**使用しない状態(don’t-care)**からスタートする可能性がある。

問題:don’t-care状態から主系列(正しいカウント系列)に戻ってこられないとカウンタが暴走する!

対策:don’t-care状態の次状態を明示的に指定し、必ず主系列に復帰できるようにする → Self-starting(自己開始)

図11-26の例(TC = C’B’ + CB, TB = C’A + CB’, TA = C+B):

CBA          C+B+A+
000  -->  100
001  -->  010
010  -->  011
011  -->  000
100  -->  111
101  -->  110  ← don't-careからも主系列に合流
110  -->  111
111  -->  010

→ don’t-care状態(101)も次状態が(110)に指定され、そのまま主系列に戻る

T-FFによるカウンタ設計手順(復習)

  1. 遷移表を書く(現在状態CBA → 次状態C+B+A+)
  2. T-FFの励起表(T = Q+ ⊕ Q)を使ってT入力列を追加
  3. TQマップ(カルノー図)を描く
  4. 論理式を導出する

D-FFによるカウンタ設計

  • D-FFでは Q+ = D なので、次状態マップがそのままD入力マップになる!
  • 例(図11-22と同じ系列):
    • DC = C+ = B’
    • DB = B+ = C + BA’
    • DA = A+ = A’(C + B)

カウンタ比較表(状態数N)

バイナリグレイコードジョンソンワンホット
FF数log₂Nlog₂NN/2N
ハザード不可可能不要単一状態では不要
状態デコードフルデコードフルデコード2入力OR/ANDORゲート

Binary Counter with Clear(クリア付きカウンタ)

4bitのカウンタを10になるところでクリアすることで1ケタの10進数を表す

  • Synchronous Clear: N(例:9=1001)を検出 → 次のクロックで0にクリア
  • Asynchronous Clear: N(例:10=1010)を検出 → 即座に0にクリア(非同期)

Decimal Counter with Parallel Load(Excess-3符号)

なぜExcess-3を使うのか?
→ 10進数(0〜9)を2進数で表すとき、普通はBCD(0000〜1001)を使うが、Excess-3は 「値 + 3」 で表す

10進数Excess-3(2進数)普通のBCD
00011 (3)0000
10100 (4)0001
20101 (5)0010
91100 (12)1001

Excess-3のメリット:9の補数(9 - x)が単に全ビット反転で計算できる。加算器のキャリー処理が簡単になる。

このカウンタの動き:

0011(3) → 0100(4) → 0101(5) → ... → 1011(11) → 1100(12)
                                                           ↓
                    0011(3) ←─────────────────── Ld=1で3をロード
  • 3から始まり、12(1100)になるまでカウントアップ
  • 12(1100)になった瞬間にLd=1を生成 → 0011(3)を並列ロード
  • Don’t-care: 0,1,2,13,14,15

Binary with Clearとの比較:

Binary with ClearParallel Load (Excess-3)
リセット方法クリア(0に戻す)ロード(任意の値をセット)
検出タイミング9 or 10で検出12で検出
戻り先00000011(=3)

11.5 S-R / J-K FFを使ったカウンタ設計

そもそも励起表(Excitation Table)とは?

何?
→ 「現在の状態Qから次状態Q+に遷移するために、FFに入力すべき値」をまとめた表

なぜ必要?
→ カウンタ設計では「次にどんな状態にしたいか」が先に決まる。そこから逆算してFF入力を決める必要がある

どう使う?
→ 遷移表の各行について、励起表を参照してS,R(またはJ,K)の入力値を記入する

S-R FFの励起表

QQ+SR動作
000X保持
0110セット
1001リセット
11X0保持(R=0ならKEEP)

S-R FF設計手順(詳細)

手順の流れ:

  1. 遷移表を書く(現在状態CBA → 次状態C+B+A+)
  2. S-R FFの励起表を参照して、各行の SC, RC, SB, RB, SA, RA の値を記入
  3. 使用しない状態の値は don’t-care(X) にする
  4. 各S,Rに対してカルノー図を作成
  5. カルノー図から論理式を導出

表11-6(図11-22の系列をS-R FFで設計):

現在状態  次状態    S-R FF入力
C  B  A   C+ B+ A+  SC RC  SB RB  SA RA
0  0  0   1  0  0   1  0   0  X   0  X
0  0  1   –  –  –   X  X   X  X   X  X  ← don't-care
0  1  0   0  1  1   0  X   X  0   1  0
0  1  1   0  0  0   0  X   0  1   0  1
1  0  0   1  1  1   X  0   1  0   1  0
1  0  1   –  –  –   X  X   X  X   X  X  ← don't-care
1  1  0   –  –  –   X  X   X  X   X  X  ← don't-care
1  1  1   0  1  0   0  1   X  0   0  1

励起表の使い方:

  • 0→0 → S=0, R=X(保持)
  • 0→1 → S=1, R=0(セット)
  • 1→0 → S=0, R=1(リセット)
  • 1→1 → S=X, R=0(保持)

カルノー図から論理式を導出:

  • SC = B’(B=0のときCをセット)
  • RC = A(A=1のときCをリセット)
  • SB = C(C=1のときBをセット)
  • RB = C’A(C=0かつA=1のときBをリセット)
  • SA = A(C+B)(A=1かつCかBが1のときAをセット)
  • RA = A(A=1のときAをリセット)

回路の特徴:

  • SとRが同時に1にはならない(SR=0を満たす)
  • don’t-careが多いので回路がシンプルになる

J-K FFの励起表

QQ+JK動作
000X保持
011Xセット(J=1でOK)
10X1リセット(K=1でOK)
11X0保持

S-Rとの違い:J=K=1のときもトグルできる!
→ 一方の入力が1のとき、他方はdon’t-care(X)でOK

J-K FF設計手順(S-Rと同様):

  1. 遷移表を書く
  2. J-K FFの励起表を参照して、各行の JC, KC, JB, KB, JA, KA の値を記入
  3. 各J,Kに対してカルノー図を作成
  4. カルノー図から論理式を導出

例(図11-22の系列、図11-31):

  • JC = B’(B=0のときCをセット)
  • KC = A(A=1のときCをリセット)
  • JB = C(C=1のときBをセット)
  • KB = C’A(C=0かつA=1のときBをリセット)
  • JA = C+B(CかBが1のときAをセット)
  • KA = 1(常にK=1、J=1のときトグル)

S-Rとの比較:

  • S-R:SA = A(C+B), RA = A → SとRが同時に1にならない
  • J-K:JA = C+B, KA = 1 → J=K=1のときトグル(S-Rより柔軟)

J-K FFのメリット:

  • don’t-careが多く、回路が小さくなる傾向
  • J=K=1でトグルできるため、S-R FFで禁止だった状態が使える

11.6 FF入力方程式の導出まとめ

次状態マップからFF入力マップを作る方法

基本概念:
→ 次状態マップ(Q+のマップ)から、FF種別に応じた入力マップを派生する

Qの値による処理の違い:

  • Q=0 half(マップの下半分):現在Q=0の状態
  • Q=1 half(マップの上半分):現在Q=1の状態

FF種別による入力マップの作り方(表11-9)

FFQ=0 halfの処理Q=1 halfの処理
DQ+をそのままコピーQ+をそのままコピー
TQ+をそのままコピー(変化なし)Q+を反転(コンプリメント)
S-R0→1の箇所にS=1、残りはXで埋める1→0の箇所にR=1、残りはXで埋める
J-KQ=0: 変化なしならJ=0、1→ならJ=1、残りXQ=1: 1→0ならK=1、残りX

具体的な作業手順(4変数マップの例)

手順1:次状態マップからQ+を確認

  • 4変数(A,B,C,Q)のカルノー図でQ+の値を確認

手順2:FF種別に応じて入力マップを作成

T-FFの場合:

Q=0 half: Q+をそのままコピー
Q=1 half: Q+を反転(1→0, 0→1)

→ Qが変化する箇所(Q≠Q+)にT=1を配置

S-R-FFの場合:

Q=0 half: 0→1の箇所にS=1、残りはX
Q=1 half: 1→0の箇所にR=1、残りはX

→ Sは「セットしたい箇所」、Rは「リセットしたい箇所」

J-K-FFの場合:

Q=0 half: J=1の箇所を決定、残りはX
Q=1 half: K=1の箇所を決定、残りはX

→ J-KはS-Rと似てるけど、don’t-careの扱いが異なる

手順3:カルノー図から論理式を導出

  • グループ化してシンプルな論理式を求める

例:4変数マップからの導出

T1入力マップ(Q1のトグル条件):

  • Q1=0 half: 次状態をそのままコピー
  • Q1=1 half: 次状態を反転
  • → T1 = Q1+ ⊕ Q1 の条件を満たす箇所に1を配置

SR入力マップ(S2, R2):

  • Q2=0 half: 0→1の箇所にS=1、残りX
  • Q2=1 half: 1→0の箇所にR=1、残りX
  • → SとRが同時に1にならないよう設計

JK入力マップ(J3, K3):

  • Q3=0 half: J=1の箇所を決定
  • Q3=1 half: K=1の箇所を決定
  • → J=K=1のときトグル(S-Rより柔軟)

覚えておくこと

  • D-FF:最もシンプル(Q+ = Dなので、次状態マップがそのまま入力マップ)
  • T-FF:Qが変化する箇所にT=1(トグル条件)
  • S-R-FF:SとRを分けて設計(SR=0を遵守)
  • J-K-FF:S-Rと似てるけど、don’t-careが多く回路が小さくなる

今週のポイント

  • Self-starting:don’t-care状態からも主系列に戻れるようにすること。電源投入時必須
  • 励起表は「Q→Q+にするためのFF入力」を逆引きする表。設計の鍵
  • J-K FFはS-Rより柔軟(J=K=1でトグル可)。don’t-careが多く回路が小さくなる傾向

Ch12 Analysis of Clocked Sequential Circuits

Ch11との違い:

  • Ch11:設計(DESIGN)→ 「こういう回路を作りたい」
  • Ch12:解析(ANALYSIS)→ 「こういう回路がある → 動きを理解する」

12.1 Sequential Parity Checker

パリティ検査とは?
→ データの传输中にエラーがないかをチェックする仕組み

  • データビットに 1ビット(パリティビット) を追加
  • 奇パリティ:1の総数が奇数になるようにパリティビットを決める
  • 偶パリティ:1の総数が偶数になるようにパリティビットを決める

例:

データ:1011(1が3個 = 奇数)
→ 奇パリティ:パリティビット=0 → 10110(1が3個)
→ 偶パリティ:パリティビット=1 → 10111(1が4個)

順序パリティチェッカー(T-FFで実現):

  • 入力Xが順番に来るたびに、今までの1の個数の奇偶を記憶
  • 状態A:1の個数が偶数、状態B:1の個数が奇数
  • X=0 → 状態変わらず、X=1 → 状態反転(トグル)
  • T-FFの入力T = X(X=1のときトグル)
  • 出力Z:状態B(奇数)のとき1

12.2 Analysis by Signal Tracing and Timing Charts

Moore型 vs Mealy型(超重要!!)

Moore型Mealy型
出力の決め方状態のみ状態 + 入力
出力のタイミングクロックエッジ(1クロック遅れ)入力変化と同時
状態グラフ状態の中に出力を書き込む遷移矢印に出力を書き込む

Moore型の特徴(今日の範囲):

  • 出力はクロックエッジの後に確定する
  • 同じ入力が与えられても、出力が現れるのは次のクロックまで待つ
  • → 「出力系列は入力系列に対して時間的にずれる(displaced in time)」
  • 出力が安定しやすい(クロック同期)

Mealy型の特徴:

  • 入力が変化すると即座に出力が変わる
  • 入力と出力の間に1クロックの遅れがない
  • ただし、遷移中に**一瞬誤った出力(false output)**が出ることがある

覚え方:

  • Moore = まじめ(クロック待ってから出力)
  • Mealy = めっちゃ早い(入力即出力)

順序回路の本質:
→ 「今までの入力の履歴をFFで記憶して、出力を決める」
→ 組合せ回路(今の入力だけ)ではなく、過去の入力の影響を受ける


Mealy Machine 具体例(figure 12-7, 12-8)

回路構成:

  • J-K FF 2個(A, B)で状態を記憶
  • 入力X, 出力Z

方程式:

  • 出力:Z = XB’ + XA + X’A’B(入力Xを含む!
  • 次状態:A+ = XBA’ + X’A, B+ = XB’ + X’B + A’B
  • FF入力:JA = XB, KA = X, JB = X, KB = XA

状態表(Table 12-3):

現在状態次状態 (X=0)次状態 (X=1)Z (X=0)Z (X=1)
S0 (00)S0S101
S1 (01)S1S210
S2 (11)S2S001
S3 (10)S3S101

→ 出力が入力Xの列ごとに異なる = Mealy型の特徴

False Output(誤った出力):

  • 状態が変わってから入力が変わるまでの間に、一瞬だけ誤った値が出る
  • タイミング図で確認(figure 12-8)
  • アクティブエッジ直前の出力が安定 — そこで読むのが正解