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によるカウンタ設計手順(復習)
- 遷移表を書く(現在状態CBA → 次状態C+B+A+)
- T-FFの励起表(T = Q+ ⊕ Q)を使ってT入力列を追加
- TQマップ(カルノー図)を描く
- 論理式を導出する
D-FFによるカウンタ設計
- D-FFでは Q+ = D なので、次状態マップがそのままD入力マップになる!
- 例(図11-22と同じ系列):
- DC = C+ = B’
- DB = B+ = C + BA’
- DA = A+ = A’(C + B)
カウンタ比較表(状態数N)
| バイナリ | グレイコード | ジョンソン | ワンホット | |
|---|---|---|---|---|
| FF数 | log₂N | log₂N | N/2 | N |
| ハザード | 不可 | 可能 | 不要 | 単一状態では不要 |
| 状態デコード | フルデコード | フルデコード | 2入力OR/AND | ORゲート |
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 |
|---|---|---|
| 0 | 0011 (3) | 0000 |
| 1 | 0100 (4) | 0001 |
| 2 | 0101 (5) | 0010 |
| … | … | … |
| 9 | 1100 (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 Clear | Parallel Load (Excess-3) | |
|---|---|---|
| リセット方法 | クリア(0に戻す) | ロード(任意の値をセット) |
| 検出タイミング | 9 or 10で検出 | 12で検出 |
| 戻り先 | 0000 | 0011(=3) |
11.5 S-R / J-K FFを使ったカウンタ設計
そもそも励起表(Excitation Table)とは?
何?
→ 「現在の状態Qから次状態Q+に遷移するために、FFに入力すべき値」をまとめた表
なぜ必要?
→ カウンタ設計では「次にどんな状態にしたいか」が先に決まる。そこから逆算してFF入力を決める必要がある
どう使う?
→ 遷移表の各行について、励起表を参照してS,R(またはJ,K)の入力値を記入する
S-R FFの励起表
| Q | Q+ | S | R | 動作 |
|---|---|---|---|---|
| 0 | 0 | 0 | X | 保持 |
| 0 | 1 | 1 | 0 | セット |
| 1 | 0 | 0 | 1 | リセット |
| 1 | 1 | X | 0 | 保持(R=0ならKEEP) |
S-R FF設計手順(詳細)
手順の流れ:
- 遷移表を書く(現在状態CBA → 次状態C+B+A+)
- S-R FFの励起表を参照して、各行の SC, RC, SB, RB, SA, RA の値を記入
- 使用しない状態の値は don’t-care(X) にする
- 各S,Rに対してカルノー図を作成
- カルノー図から論理式を導出
表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の励起表
| Q | Q+ | J | K | 動作 |
|---|---|---|---|---|
| 0 | 0 | 0 | X | 保持 |
| 0 | 1 | 1 | X | セット(J=1でOK) |
| 1 | 0 | X | 1 | リセット(K=1でOK) |
| 1 | 1 | X | 0 | 保持 |
S-Rとの違い:J=K=1のときもトグルできる!
→ 一方の入力が1のとき、他方はdon’t-care(X)でOK
J-K FF設計手順(S-Rと同様):
- 遷移表を書く
- J-K FFの励起表を参照して、各行の JC, KC, JB, KB, JA, KA の値を記入
- 各J,Kに対してカルノー図を作成
- カルノー図から論理式を導出
例(図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)
| FF | Q=0 halfの処理 | Q=1 halfの処理 |
|---|---|---|
| D | Q+をそのままコピー | Q+をそのままコピー |
| T | Q+をそのままコピー(変化なし) | Q+を反転(コンプリメント) |
| S-R | 0→1の箇所にS=1、残りはXで埋める | 1→0の箇所にR=1、残りはXで埋める |
| J-K | Q=0: 変化なしならJ=0、1→ならJ=1、残りX | Q=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) | S0 | S1 | 0 | 1 |
| S1 (01) | S1 | S2 | 1 | 0 |
| S2 (11) | S2 | S0 | 0 | 1 |
| S3 (10) | S3 | S1 | 0 | 1 |
→ 出力が入力Xの列ごとに異なる = Mealy型の特徴
False Output(誤った出力):
- 状態が変わってから入力が変わるまでの間に、一瞬だけ誤った値が出る
- タイミング図で確認(figure 12-8)
- アクティブエッジ直前の出力が安定 — そこで読むのが正解