12.2 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)
- アクティブエッジ直前の出力が安定 — そこで読むのが正解
12.3 State Tables and Graphs(状態表と状態図)
この章の目的:
→ 回路図から「状態表」や「状態図」を作成し、回路の動作を理解する
Ch11との違い:
- Ch11:設計(DESIGN)→ 「こういう回路を作りたい」
- Ch12:解析(ANALYSIS)→ 「こういう回路がある → 動きを理解する」
遷移表の作成手順
- 次状態方程式を求める(FF入力方程式から)
- 次状態マップ(カルノー図)を描く
- 遷移表を作成
- 状態にシンボルを割り当て → 状態表にする
- 状態図を描く
状態表 vs 状態図
| 状態表 | 状態図 | |
|---|---|---|
| 形式 | 表(テーブル) | 図(グラフ) |
| 見やすさ | 数値を正確に見られる | 全体の流れが一目でわかる |
| 用途 | 計算・検証 | 概念理解・説明 |
Moore Machineの例(figure 12-5, 12-9)
回路:
- DA = X ⊕ B’, DB = X + A, Z = A ⊕ B
状態表(Table 12-2(b)):
| 現在状態 | 次状態 (X=0) | 次状態 (X=1) | 出力Z |
|---|---|---|---|
| S0 (00) | S3 | S1 | 0 |
| S1 (01) | S0 | S2 | 1 |
| S2 (11) | S1 | S2 | 0 |
| S3 (10) | S2 | S1 | 1 |
→ 出力Zは状態のみで決まる(入力Xの列は1つだけ)
状態図(figure 12-9):
- 状態の中に出力を書く(例:S0: 0, S1: 1)
- 矢印の上に入力のみを書く
stateDiagram-v2 direction LR S0: S0 / Z=0 S1: S1 / Z=1 S2: S2 / Z=0 S3: S3 / Z=1 S0 --> S3: X=0 S0 --> S1: X=1 S1 --> S0: X=0 S1 --> S2: X=1 S2 --> S1: X=0 S2 --> S2: X=1 S3 --> S2: X=0 S3 --> S1: X=1
Mealy Machineの例(figure 12-7, 12-11)
回路:
- JA = XB, KA = X, JB = X, KB = XA, Z = XB’ + XA + X’A’B
状態表(Table 12-3(b)):
| 現在状態 | 次状態 (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 |
→ 出力Zは入力Xの列ごとに異なる
状態図(figure 12-11):
- 矢印の上に**「入力/出力」を書く**(例:0/0, 1/1)
stateDiagram-v2 direction LR S0: S0 S1: S1 S2: S2 S3: S3 S0 --> S0: 0/0 S0 --> S1: 1/1 S1 --> S1: 0/1 S1 --> S2: 1/0 S2 --> S2: 0/0 S2 --> S0: 1/1 S3 --> S3: 0/0 S3 --> S1: 1/1
Serial Adder(逐次加算器)の例(figure 12-12, 12-14)
概要:
- 2つのnビット2進数 X, Y を最下位ビットから逐次加算
- 出力 Si = Xi ⊕ Yi ⊕ Cin
- 次のキャリー Cin+ = XiYi + XiCin + YiCin
状態:
- S0: キャリーなし(Cin=0)
- S1: キャリーあり(Cin=1)
状態図(figure 12-14):
- Mealy型(出力が入力と状態の両方に依存)
stateDiagram-v2 direction LR S0: S0 (Cin=0) S1: S1 (Cin=1) S0 --> S0: 00/0 S0 --> S0: 11/1 S0 --> S1: 01/1 S0 --> S1: 10/1 S1 --> S0: 01/0 S1 --> S0: 10/0 S1 --> S1: 00/1 S1 --> S1: 11/0
タイミング図の作り方と解釈(p.127)
ポイント:
- 状態はアクティブエッジの後に変化
- 入力はアクティブエッジ前後で安定していること
- Moore型:出力は状態変化のみで変化
- Mealy型:入力変化でも出力が変化 → False Outputに注意
Mealy型のタイミング図作成手順:
- 最初の入力に対する出力を状態表から読む
- 次状態を求める(クロックエッジ後)
- 次状態で旧入力に対する出力を読む → これはFalse Outputの可能性
- 新しい入力に切り替えて繰り返し
→ アクティブエッジ直前の出力が正しい値
Moore型 vs Mealy型 まとめ(超重要!!)
| Moore型 | Mealy型 | |
|---|---|---|
| 出力の決め方 | 状態のみ | 状態 + 入力 |
| 出力のタイミング | クロックエッジ後(1クロック遅れ) | 入力変化と同時 |
| 状態グラフ | 状態の中に出力を書き込む | 遷移矢印に出力を書き込む |
| 遅れ | 1クロック遅れる | 即座に反応 |
| False Output | なし | あり(遷移中に一瞬誤った値) |
| 用途 | 安定した出力が必要な場面 | 入力に即座に反応が必要な場面 |
覚え方:
- Moore = まじめ(クロック待ってから出力)
- Mealy = めっちゃ早い(入力即出力)
順序回路の本質:
→ 「今までの入力の履歴をFFで記憶して、出力を決める」
→ 組合せ回路(今の入力だけ)ではなく、過去の入力の影響を受ける
12.4 General Models for Sequential Circuits(順序回路の一般モデル)
一般形式(p.128)
順序回路の構造:
- フリップフロップ(記憶素子)+ 組合せ回路(入出力関数を実現)
- 組合せ回路はゲートやその他の回路で実現できる
Mealy Machineの一般モデル(figure 12-17)
構成:
- m個の入力(X1, X2, …, Xm)
- n個の出力(Z1, Z2, …, Zn)
- k個のD-FF(Q1, Q2, …, Qk)
方程式:
- 出力:Zn = fn(X1, X2, …, Xm, Q1, Q2, …, Qk) → 入力と状態の関数
- 次状態:Q+ = D = gn(X1, X2, …, Xm, Q1, Q2, …, Qk) → 入力と状態の関数
タイミング:
- tp: FFの遅延
- tc: 組合せ回路の遅延
Moore Machineの一般モデル(figure 12-19)
特徴:
- 出力Zがフリップフロップの現状態Q1, Q2, …, Qkのみの関数
- 入力Xは出力に直接影響しない
最小クロック周期(p.129)
基本式:
tclk(min) = tp + tc + tsu
- tp: FFの遅延
- tc: 組合せ回路の遅延
- tsu: セットアップ時間
Clock Skewがある場合:
tclk(min) = tp + tc + tsu + tsk
- tsk: FF間のクロックスキュー
意味:
- クロック周期は「FFの遅延 + 組合せ回路の遅延 + セットアップ時間」より短くできない
- これを満たさないとsetup time violationが起きる
練習問題 12.1(p.130)
回路:
- DA = B(A + X)
- JB = A’ ⊕ X, KB = X
- Z = XA + X’B
遷移表の作成:
- 次状態方程式を求める
- カルノー図を描く
- 遷移表を作成
| 現在状態 | 次状態 (X=0) | 次状態 (X=1) | Z (X=0) | Z (X=1) |
|---|---|---|---|---|
| S0 (00) | 01 | 00 | 0 | 0 |
| S1 (01) | 00 | 11 | 1 | 0 |
| S2 (11) | 10 | 11 | 1 | 1 |
| S3 (10) | 00 | 01 | 0 | 1 |
12章 まとめ
学んだこと:
- パリティ検査:T-FFを使った順序パリティチェッカー
- Moore型 vs Mealy型:出力の決め方の違い
- 状態表と状態図:回路の動作を記述する方法
- Serial Adder:Mealy型の具体例
- 一般モデル:順序回路の構造と最小クロック周期
超重要ポイント:
- Moore型 = まじめ(クロック待ってから出力)
- Mealy型 = めっちゃ早い(入力即出力)
- False Outputはアクティブエッジ直前で読む
- 最小クロック周期 = tp + tc + tsu
Ch13 Derivation of State Graphs and Tables(状態図と状態表の導出)
この章の目的:
→ 問題文から状態図や状態表を自力で作り出す方法を学ぶ
Ch12との違い:
- Ch12:回路図から状態図を作る(解析)
- Ch13:問題文から状態図を作る(設計)
13.1 Design of a Sequence Detector(系列検出器の設計)
系列検出器とは?
→ 入力Xに来的ビット列の中から、指定されたパターン(例:101)を検出し、検出したらZ=1を出力する回路
ルール:
- 入力Xはクロックパルスの間だけ変化する
- オーバラップあり(例:10101 → 最後の1は次の系列の先頭として使える)
Mealy型系列検出器(101検出)
状態の意味:
- S0: 初期状態(何も記憶していない)
- S1: 「1」を検出した
- S2: 「10」を検出した
状態遷移の考え方:
S0 --1--> S1 --0--> S2 --1--> S0 (Z=1)
→ S2で「1」が来たら「101」完成 → Z=1を出力してS0に戻る
状態表(Table 13-1):
| 現在状態 | 次状態 (X=0) | 次状態 (X=1) | Z (X=0) | Z (X=1) |
|---|---|---|---|---|
| S0 | S0 | S1 | 0 | 0 |
| S1 | S2 | S1 | 0 | 0 |
| S2 | S0 | S1 | 0 | 1 |
状態図(figure 13-4):
stateDiagram-v2 direction LR S0: S0 S1: S1 S2: S2 S0 --> S0: 0/0 S0 --> S1: 1/0 S1 --> S2: 0/0 S1 --> S1: 1/0 S2 --> S0: 0/0 S2 --> S1: 1/1
遷移表(Table 13-2):
- S0=00, S1=01, S2=10(2ビットで状態を表現)
- AB=11はdon’t care(使用しない状態)
回路設計(figure 13-5):
- A+ = X’B
- B+ = X
- Z = XA
Moore型系列検出器(101検出)
Mealy型との違い:
- 出力が状態のみで決まる
- 「101が検出された状態」を別途用意する必要がある
- 状態数が1つ増える(S3を追加)
状態の意味:
- S0: 初期状態
- S1: 「1」を検出
- S2: 「10」を検出
- S3: 「101」を検出(出力Z=1)
状態表:
| 現在状態 | 次状態 (X=0) | 次状態 (X=1) | 出力Z |
|---|---|---|---|
| S0 | S0 | S1 | 0 |
| S1 | S2 | S1 | 0 |
| S2 | S0 | S3 | 0 |
| S3 | S2 | S1 | 1 |
状態図:
stateDiagram-v2 direction LR S0: S0 / Z=0 S1: S1 / Z=0 S2: S2 / Z=0 S3: S3 / Z=1 S0 --> S0: X=0 S0 --> S1: X=1 S1 --> S2: X=0 S1 --> S1: X=1 S2 --> S0: X=0 S2 --> S3: X=1 S3 --> S2: X=0 S3 --> S1: X=1
Mealy型 vs Moore型(系列検出器)
| Mealy型 | Moore型 | |
|---|---|---|
| 状態数 | 少ない(3つ) | 多い(4つ) |
| 出力タイミング | 入力と同時 | 1クロック遅れる |
| 実現のしやすさ | 状態数が少なくシンプル | 出力が安定している |