補足:状態・入力・出力の関係(復習)
状態 = FF の値の組み合わせ(回路が「今何を覚えているか」)
入力 X → [組合せ回路] → FF(A,B) → [組合せ回路] → 出力 Z
↑ ↑
次状態を決める 出力を決める
| 何が | 意味 | 状態表での場所 | 状態図での場所 |
|---|---|---|---|
| 状態 | FF の出力値の組(A, B, …) | 行のラベル(S0, S1, …) | 丸(ノード) |
| 入力 X | 回路の外から来る信号 | 列の見出し(X=0, X=1) | 矢印のラベル(0/0 の左側) |
| 出力 Z | 回路から外に出す信号 | 出力列(Z(X=0), Z(X=1)) | 矢印のラベル(0/0 の右側) or 丸の中(Moore) |
時系列のイメージ:
時刻 状態(A,B) 入力X → 次状態 出力Z
1 (0,0) 1 → (0,1) 0
2 (0,1) 0 → (1,0) 1
3 (1,0) 1 → (0,1) 0
- 状態は FF に保存されている値。時刻ごとにクロックエッジで更新される
- 含意表で「状態 A と状態 B が等価」とは、「FF の値が A のときと B のときで、入力に対する出力の振る舞いがまったく相同」という意味
今日の内容(Ch14 の位置づけ)
Ch14 構成:
| 節 | 内容 | 状態 |
|---|---|---|
| 14.1 | 行マッチング(冗長状態の除去) | ✓ 終了 |
| 14.2 | 等価状態の定義(定理14.1) | ✓ 終了 |
| 14.3 | 含意表(Implication Table) | ✓ 終了 |
| 14.4 | 等価な順序回路 | ✓ 終了 |
| 14.5 | 不完全指定状態表の簡約 | ✓ 終了 |
| 14.6 | FF入力式の導出 | ✓ 終了 |
| 14.7 | 等価な状態割当 | ✓ 終了 |
| 14.8 | 状態割当の手引き | ✓ 終了 |
| 14.9 | ワンホット状態割当 | ✓ 終了 |
前回のまとめ(7/9)
Ch13: 状態図・状態表の導出(設計)
位置づけ: 問題文から状態機械の仕様を作る。ゲート配線より先の、状態遷移の設計。
Mealy vs Moore の違い
| Mealy | Moore | |
|---|---|---|
| 出力の決め方 | 状態 + 入力 | 状態のみ |
| 状態グラフ | 矢印に 入力/出力 | 状態の中に Z= |
| 状態数 | 少ない | 多い(+1) |
| 出力タイミング | 入力と同時 | 1クロック遅れる |
系列検出器(101)の復習
- Mealy(3状態): S0(初期), S1(末尾1), S2(末尾10)。S2でX=1 → Z=1
- Moore(4状態): S3(101検出済み, Z=1) を追加。状態数+1
13.2 複雑な設計問題
- 問題A(Mealy): 末尾が
010または1001→ Z=1。6状態。末尾の種類で状態を分ける - 問題B(Moore): 「1の総数が奇数」かつ「連続0が2つ以上」→ Z=1。偶奇 × 00達成の組合わせ
設計手順の共通パターン
- サンプル入出力を書いて問題文を固定
- 成功パスの部分グラフから描く
- 未定義の入力を必ず埋める
- 既存状態で足りるか? 新状態か? を判断
- サンプルで Z が立つか検証
その他のトピック
- 13.3 状態図作成の手順(6ステップ)。Sliding(オーバーラップあり)vs Disjoint(窗口ごとリセット)
- 13.4 シリアルデータ変換(NRZ→マンチェスタ)。3状態、出力式:
- 13.5 複数入力の表記法。完全指定: OR=1(穴なし)、AND=0(重複なし)
- 13.6 不完全指定状態表。don’t care は状態簡約の素材料
Ch14: 状態表の簡約と状態割当(前半)
14.1 行マッチング(冗長状態の除去)
1行 = 1状態 の状態表で、次状態と出力がすべて同じ行を 探して統合する。
| 状態 | 次状態(X=0) | 次状態(X=1) | Z(X=0) | Z(X=1) |
|---|---|---|---|---|
| F | H | I | 0 | 0 |
| G | H | I | 0 | 0 |
| H | A | A | 0 | 0 |
| I | A | A | 0 | 0 |
→ F≡G, H≡I。G→F, I→H に置き換え → 冗長状態を削除
14.2 等価状態の定義
2つの状態 p と q が 等価(p ≡ q) とは、入力系列に対する出力系列がすべて同じ とき。
定理 14.1(判定条件): すべての単一入力 X に対して:
- 出力が同じ かつ 次状態が等価なら、その状態対は等価
- 次状態は 同一である必要はない(等価であればOK)
14.3 含意表(Implication Table)
なぜ行マッチングだけでは足りないか
行マッチングは「次状態と出力がすべて同じ行」を探す。
| 状態 | 次状態(X=0) | 次状態(X=1) | Z(X=0) | Z(X=1) |
|---|---|---|---|---|
| A | C | D | 0 | 0 |
| B | C | E | 0 | 0 |
| C | A | B | 1 | 1 |
| D | A | B | 1 | 1 |
| E | A | B | 1 | 1 |
- C, D, E → 同じ行 → 行マッチングで C≡D≡E とわかる
- でも A と B は? → 次状態が「C, D」と「C, E」で違う → 行マッチングでは 等価だと判定できない
しかし D≡E がわかれば、「A の次状態 D」と「B の次状態 E」は等価 → A≡B といえる。この「次状態の等価関係をたどる」ことを、行マッチングはできない。
含意表は何をしているか
含意表は「A≡B かどうか」を「別の状態対の等価性」に置き換える道具。
上の例で A と B を見ると:
- A の次状態: C(X=0), D(X=1)
- B の次状態: C(X=0), E(X=1)
- 出力は同じ(0, 0)
→ A≡B は 「C≡C かつ D≡E」に依存 する。これをマスに書く。
含意表ではすべての状態対に対してこの「依存関係」を記録し、× の連鎖 を追跡する。
含意表の操作(3段階)
第1段階: 初期チェック(出力比較)
すべての状態対 (p, q) に対して:
- 出力が違う → × をつける(不等価確定。定理14.1より、出力が違えば等価にはなりえない)
- 出力が同じ → その状態対のマスに 次状態のペア を書く(含意条件)
第2段階: × の連鎖(含意条件の伝播)
マス A-B に含意ペア「D≡E」と書かれているとき:
- D≡E のマスに × がついたら → A-B も × に変える(「D≡E でなければ A≡B も成立しない」)
- この操作を × が追加されなくなるまで繰り返す
第3段階: 判定
- × がついた状態対 → 不等価
- × がつかなかった状態対 → 等価(状態を統合できる)
操作の意味を図で理解する
行マッチング: 「この2行、完全に同じだ」 → 即座に統合
含意表: 「A≡B かどうかは、D≡E しだいだ」
↓
D≡E は確認済み(× なし)
↓
よって A≡B も成立
含意表は 等価判定を「依存の連鎖(dependency chain)」に変えて、×を伝播させることで体系的に解決する 方法。
含意表が見つけるもの vs 行マッチングが見つけるもの
| 行マッチング | 含意表 | |
|---|---|---|
| 条件 | 次状態 同一 かつ出力同一 | 次状態 等価 かつ出力同一 |
| 見つけられる範囲 | 完全に相同な行だけ | 1段階以上深い等価関係 |
| 必要性 | 誰でもできる | 行マッチングだけでは見逃す状態対を拾う |
要するに: 行マッチングは「目で見えてすぐわかる等価」、含意表は「次状態をたどらないとわからない等価」を担当する。
今日の新規内容
14.4 等価な順序回路(Equivalent Sequential Circuits)
14.2 まで vs 14.4 の違い
graph LR subgraph "14.2: 1つの回路の中" A["状態 A"] --- B["状態 B"] style A fill:#bbf style B fill:#bbf end subgraph "14.4: 2つの別々の回路" N1["N1: 状態 A, B, C"] N2["N2: 状態 D, E"] N1 <-.->|"A≡E, B≡D, ..."| N2 end
定義 14.2
順序回路 と が 等価 とは:
→ 互いに「この状態はこの状態と同じ」と言い合える状態が 全部揃っていれば 等価。
判定方法
flowchart TD A["2つの回路 N1, N2 の状態を全部並べる"] --> B["含意表を作成\n(N1の状態 × N2の状態)"] B --> C{"出力は同じか?"} C -->|"明確に違う"| D["× をつける"] C -->|"同じ / don't care で矛盾なし"| E["次状態のペアを\n含意条件に書く"] E --> F["× の連鎖を追跡"] D --> F F --> G{"すべての × が\n落ち着いた"} G --> H["× がない状態対 = 等価"] H --> I{"N1 の全状態に\n等価な N2 の状態があるか?"} I -->|"はい"| J["N1 ≡ N2 ✓"] I -->|"いいえ"| K["N1 ≢ N2 ✗"]
具体例(Figure 14-6, 14-7)
stateDiagram-v2 direction LR state "N1" as N1 { direction LR A: A / Z=0 B: B C: C A --> A: 0 A --> B: 1 B --> C: 0 B --> A: 1 C --> A: 0 C --> B: 1 } state "N2" as N2 { direction LR D: D E: E / Z=0 D --> C2: 0 D --> E: 1 E --> D: 0 E --> E: 1 }
含意表で判定 → A≡E, B≡D, C≡C(N2 に C はないが、等価な状態があればOK) → 回路として等価。
14.5 不完全指定状態表の簡約(Reducing Incompletely Specified State Tables)
完全指定 vs 不完全指定
graph LR subgraph "完全指定" CS["出力: 常に 0 か 1\n次状態: 常に決まっている"] end subgraph "不完全指定" IS["出力: don't care `-` がある\n次状態: don't care がある"] end CS -->|"含意表で簡約"| R1["等価(≡)で統合"] IS -->|"含意表が使えない"| R2["両立(compatible)で簡約"] style IS fill:#fff3cd
不完全指定で通常の含意表が使えない理由
完全指定: 「出力が 0 と 1 に違えば → ×」 ✓
不完全指定: don’t care があると 矛盾しない場合がある:
| 状態 | Z(X=0) | Z(X=1) | 判定 |
|---|---|---|---|
| A | 0 | - | don’t care は 0 にも 1 にもできる |
| B | - | 1 | don’t care は 0 にも 1 にもできる |
| A vs B | 0 vs - | - vs 1 | 矛盾しない(don’t care を調整すれば両立する) |
→ 「出力が違えば ×」が 使えない。
代わりの概念: 両立(Compatible)
graph TD subgraph "等価(≡)— 完全指定用" EQ["すべての入力で\n出力が完全に同じ\nかつ 次状態が等価"] end subgraph "両立(compatible)— 不完全指定用" CO["出力が定義されている\n入力だけで出力が同じ\n(don't care は任意の値にできる)"] end EQ -->|"条件が緩い"| CO style CO fill:#d4edda
手順(3ステップ)
flowchart TD S1["第1段階\n含意表で両立ペアを特定"] --> S2["第2段階\n極大両立集合を作る"] S2 --> S3["第3段階\n最小の集合を選んで\n状態表を書き換える"] S1a["出力が明確に矛盾 → ×\ndon't care で矛盾なし → 含意条件"] -.-> S1 S2a["両立ペアを組み合わせ\nこれ以上拡張できないサイズに"] -.-> S2 S3a["① 全状態がカバーされる\n② 次状態も集合内に収まる"] -.-> S3 style S1 fill:#cce5ff style S2 fill:#cce5ff style S3 fill:#cce5ff
具体例: Even Parity Detector(Table 14-7)
3ビット入力の偶パリティ検出器(000〜101 の disjoint window)。最初の2ビットの出力は don’t care。
| 現在状態 | 次状態(X=0) | 次状態(X=1) | Z(X=0) | Z(X=1) |
|---|---|---|---|---|
| S0 | S1 | S2 | - | - |
| S1 | S3 | S4 | - | - |
| S2 | S4 | - | - | 0 |
| S3 | S0 | S0 | 1 | 0 |
| S4 | S0 | S0 | 0 | 1 |
第1段階: 含意表で両立ペアを特定
graph TD subgraph "両立ペア(× なし)" P1["S0-S1"] P2["S0-S2"] P3["S0-S3"] P4["S0-S4"] P5["S1-S3"] P6["S1-S4"] P7["S2-S4"] end subgraph "不両立(× がついた)" X1["S1-S2 ← 出力が明確に矛盾"] X2["S3-S4 ← 出力が明確に矛盾"] end style X1 fill:#f8d7da style X2 fill:#f8d7da
第2段階: 極大両立集合
graph TD subgraph "極大両立集合" C1["C1 = {S0, S1, S3}"] C2["C2 = {S0, S2, S3}"] C3["C3 = {S0, S1, S4}"] C4["C4 = {S0, S2, S4}"] end C1 -->|"X=0 → {S0,S1,S3} = C1"| C1a C1 -->|"X=1 → {S0,S2,S4} = C4"| C4 C4 -->|"X=0 → {S0,S1,S4} = C3"| C3 C3 -->|"X=1 → {S0,S2,S4} = C4"| C4 style C1 fill:#d4edda style C4 fill:#d4edda style C3 fill:#d4edda
第3段階: 簡約結果(5状態 → 3状態)
| 現在状態 | 次状態(X=0) | 次状態(X=1) | Z(X=0) | Z(X=1) |
|---|---|---|---|---|
| A = {S0,S1,S3} | A | B | 1 | 0 |
| B = {S0,S2,S4} | C | B | 0 | 1 |
| C = {S0,S1,S4} | A | B | 0 | 1 |
stateDiagram-v2 direction LR A: A\n{S0,S1,S3} B: B\n{S0,S2,S4} C: C\n{S0,S1,S4} A --> A: X=0 A --> B: X=1 B --> C: X=0 B --> B: X=1 C --> A: X=0 C --> B: X=1
完全指定 vs 不完全指定の簡約 まとめ
graph LR subgraph "完全指定(14.3)" A1["等価(≡)"] --> A2["含意表で × を伝播"] A2 --> A3["× がない状態対を統合"] end subgraph "不完全指定(14.5)" B1["両立(compatible)"] --> B2["含意表で不両立ペアを特定"] B2 --> B3["極大両立集合を選ぶ"] B3 --> B4["最小集合で簡約"] end style A3 fill:#cce5ff style B4 fill:#d4edda
14.6 FF入力式の導出(Derivation of Flip-Flop Input Equations)
位置づけ
graph LR A["Ch13: 状態図・状態表を作成\n(仕様を決める)"] --> B["Ch14前半: 状態を簡約\n(冗長な状態を削除)"] B --> C["14.6: FF入力式を導出\n(回路を設計する)"] C --> D["14.7〜: 状態割当\n(2進数をどう割り当てるか)"] style C fill:#bbf
手順(4ステップ)
flowchart TD S1["ステップ1\n状態割当\n各状態に2進数を割り当てる"] --> S2["ステップ2\n遷移表を作成\n現在状態 × 入力 → 次状態"] S2 --> S3["ステップ3\n次状態カルノー図を描く\nA+, B+, C+ を求める"] S3 --> S4["ステップ4\nFF入力のカルノー図\nD-FF: D=A+, B+...\nJ-K FF: J, K を求める"] S1a["例: S0=000, S1=001, S2=010, ..."] -.-> S1 S2a["表に 0/1 の値を埋める"] -.-> S2 S3a["変数 A, B, C と入力 X の\n4変数カルノー図"] -.-> S3 S4a["D-FF なら D=A+\nJ-K FF なら Q→Q+ の変換表"] -.-> S4 style S1 fill:#cce5ff style S2 fill:#cce5ff style S3 fill:#cce5ff style S4 fill:#cce5ff
具体例: Table 14-9(7状態 → 簡約済み)
ステップ1: 状態割当
7状態に3ビット(A, B, C)を割り当て:
| 状態 | A | B | C |
|---|---|---|---|
| S0 | 0 | 0 | 0 |
| S1 | 0 | 0 | 1 |
| S2 | 0 | 1 | 0 |
| S3 | 0 | 1 | 1 |
| S4 | 1 | 0 | 0 |
| S5 | 1 | 0 | 1 |
| S6 | 1 | 1 | 0 |
ステップ2: 遷移表を作成
状態表の各行を2進数に書き換える:
| 現在 (ABC) | X=0 → 次状態 (A+B+C+) | X=1 → 次状態 (A+B+C+) | Z(X=0) | Z(X=1) |
|---|---|---|---|---|
| 000 (S0) | 110 (S6) | 001 (S1) | 0 | 0 |
| 001 (S1) | 110 (S6) | 011 (S3) | 0 | 0 |
| 010 (S2) | 111 (S7?) | 001 (S1) | 0 | 0 |
| 011 (S3) | 101 (S5) | 010 (S2) | 0 | 0 |
| 100 (S4) | 111 (S7?) | 001 (S1) | 0 | 0 |
| 101 (S5) | 011 (S3) | 110 (S6) | 1 | 0 |
| 110 (S6) | 101 (S5) | 001 (S1) | 0 | 1 |
ステップ3: 次状態カルノー図(D-FF の場合)
D-FF では なので、次状態の値がそのまま FF 入力になる。
A+ (DA) のカルノー図:
BC
XA 00 01 11 10
00 | 1 | 1 | 1 | 1 |
01 | 1 | 0 | 0 | 1 |
11 | 1 | 0 | 0 | 0 |
10 | 1 | 1 | 0 | 0 |
→ DA = X'
B+ (DB) のカルノー図:
BC
XA 00 01 11 10
00 | 1 | 1 | 0 | 1 |
01 | 1 | 1 | 1 | 1 |
11 | 0 | 0 | 1 | 1 |
10 | 0 | 1 | 1 | 0 |
→ DB = X'C' + A'C + A'B
C+ (DC) のカルノー図:
BC
XA 00 01 11 10
00 | 0 | 1 | 1 | 0 |
01 | 0 | 1 | 1 | 1 |
11 | 0 | 1 | 1 | 0 |
10 | 1 | 0 | 1 | 1 |
→ DC = A + XB'
ステップ4: 出力式
Z のカルノー図:
BC
XA 00 01 11 10
00 | 0 | 0 | 0 | 0 |
01 | 0 | 0 | 0 | 0 |
11 | 0 | 0 | 0 | 0 |
10 | 0 | 1 | 0 | 1 |
→ Z = AB'C' + AB'C = AB'
D-FF vs J-K FF の違い
graph TD subgraph "D-FF" D1["D = Q+\n(次状態式がそのまま FF 入力)"] end subgraph "J-K FF" JK1["Q → Q+ の変換表を使う\nJ: Q=0 のとき Q+=1 なら 1\nK: Q=1 のとき Q+=0 なら 1"] end D1 -->|"シンプル"| R1["1段階で完成"] JK1 -->|"変換が必要"| R2["変換表 → カルノー図"] style D1 fill:#d4edda style JK1 fill:#fff3cd
J-K FF の変換表:
| Q | Q+ | J | K |
|---|---|---|---|
| 0 | 0 | 0 | X |
| 0 | 1 | 1 | X |
| 1 | 0 | X | 1 |
| 1 | 1 | X | 0 |
→ J は「Q=0 のとき Q+ が1なら J=1」、K は「Q=1 のとき Q+ が0なら K=1」。X は don’t care。
まとめ
graph LR A["状態表(簡約済み)"] -->|"ステップ1\n状態割当"| B["2進数を割り当て"] B -->|"ステップ2\n遷移表"| C["現在状態×入力→次状態"] C -->|"ステップ3\nカルノー図"| D["次状態式 A+, B+, C+"] D -->|"ステップ4\nFF入力式"| E["D-FF: D=A+ など\nJ-K: J, K を求める"] E --> F["回路図を描く"] style A fill:#f8d7da style F fill:#d4edda
14.7 等価な状態割当(Equivalent State Assignment)
問題の本質
graph TD A["同じ状態表"] --> B["割り当て方 A\nS0=00, S1=01, S2=10"] A --> C["割り当て方 B\nS0=00, S1=10, S2=01"] B --> D["回路式 A\nDA = X'C + ...\n(シンプル)"] C --> E["回路式 B\nDA = X'B + ...\n(複雑)"] style D fill:#d4edda style E fill:#f8d7da
結論: 割り当て方次第で回路のコストが大きく変わる。全部試すのは非効率(3状態で24通り、4状態でもっと多い)。
対称 FF なら実質3通り:
- ビットの入替・反転で同じコストになる割り当ては「等価」とみなす
- S0 を常に 00 に固定 → 残りの並べ方だけ試す → 3状態なら3通り
14.8 状態割当の手引(Guidelines for State Assignment)
3つの手引
graph TD G1["手引1: 同じ次状態を持つ2状態を隣接\n(1ビットだけ異なる値を割り当てる)"] G2["手引2: 同じ状態から遷移する2つの次状態を隣接"] G3["手引3: 同じ出力値を持つ2状態を隣接"] G1 -->|"最優先"| P["カルノー図で\n隣接マスに配置"] G2 --> P G3 -->|"出力関数の簡約用"| P P --> R["回路式がシンプルになる"] style G1 fill:#bbf style G2 fill:#bbf style G3 fill:#cce5ff
なぜ隣接が重要か
隣接 = ビットが1つだけ違う(例: 010 と 011 は C だけ違う)
カルノー図で 隣接マスに同じ値がある と、まとめられて式がシンプルになる:
隣接しない場合: DA = A'B'C + A'BC' + AB'C' + ABC (4項)
隣接している場合: DA = A'C + AC' (2項)
手引の使い方(7状態の例)
状態表:
| 現在状態 | 次状態(X=0) | 次状態(X=1) | Z(X=0) | Z(X=1) |
|---|---|---|---|---|
| S0 | S1 | S2 | 0 | 0 |
| S1 | S3 | S2 | 0 | 0 |
| S2 | S1 | S4 | 0 | 0 |
| S3 | S5 | S2 | 0 | 0 |
| S4 | S1 | S6 | 0 | 0 |
| S5 | S5 | S2 | 1 | 0 |
| S6 | S1 | S6 | 0 | 1 |
手引1で隣接すべき状態対:
X=0 のとき同じ次状態 S1 を持つ: S0, S2, S4, S6 → 全部隣接させたい
X=1 のとき同じ次状態 S2 を持つ: S0, S1, S3, S5 → 全部隣接させたい
手引2で隣接すべき状態対:
S0 から遷移する次状態: S1, S2 → S1 と S2 を隣接
S1 から遷移する次状態: S3, S2 → S3 と S2 を隣接
...
カルノー図に配置:
graph TD subgraph "割り当て例" M["3ビット A, B, C の\n8マスに S0〜S6 を配置"] end M --> C1["手引1: S0,S2,S4,S6 が隣接\n(同じ次状態 S1 を持つ)"] M --> C2["手引1: S0,S1,S3,S5 が隣接\n(同じ次状態 S2 を持つ)"] M --> C3["手引2: S1,S2 が隣接\n(S0 からの次状態)"] style C1 fill:#d4edda style C2 fill:#d4edda style C3 fill:#d4edda
手引の優先順位
graph TD P1["手引1(同じ次状態を持つ状態を隣接)\n→ 最優先"] --> P2["手引2(同じ状態からの次状態を隣接)\n→ 次点"] P2 --> P3["手引3(同じ出力を持つ状態を隣接)\n→ 出力関数の簡約用"] style P1 fill:#bbf style P2 fill:#cce5ff style P3 fill:#e2e2e2
14.9 ワンホット状態割当(One-Hot State Assignment)
通常の割り当て vs ワンホット
graph LR subgraph "通常(3状態 → 2ビット)" N["S0=00, S1=01, S2=10\nFF 2個で3状態を表す"] end subgraph "ワンホット(3状態 → 3ビット)" W["S0=100, S1=010, S2=001\nFF 3個で3状態を表す"] end N -->|"ゲート数は少ない\nが設計が複雑"| R1 W -->|"FF は多い\nが設計が簡単"| R2 style N fill:#fff3cd style W fill:#d4edda
ワンホットの仕組み
N 状態 → N 個の FF(Q0, Q1, …, QN-1)
| 状態 | Q0 | Q1 | Q2 | Q3 |
|---|---|---|---|---|
| S0 | 1 | 0 | 0 | 0 |
| S1 | 0 | 1 | 0 | 0 |
| S2 | 0 | 0 | 1 | 0 |
| S3 | 0 | 0 | 0 | 1 |
- 常に 1つの FF だけが 1(ワンホット = 1つだけ熱い)
- 使わない組み合わせ(1100 など)は don’t care
ワンホットの最大のメリット: 状態図から直接式を書ける
flowchart TD A["状態図を見る"] --> B["各状態 S0〜S3 の\n次状態を読み取る"] B --> C["Qi+ = S0 から Qi への\n矢印の入力条件を OR でつなぐ"] C --> D["出力 Zj = Zj=1 の矢印の\n入力条件を OR でつなぐ"] style A fill:#cce5ff style D fill:#d4edda
例:
stateDiagram-v2 direction LR S0: S0\nQ0=1000 S1: S1\nQ1=0100 S2: S2\nQ2=0010 S3: S3\nQ3=0001 S0 --> S1: X1 / Z1 S0 --> S2: X2 / Z2 S1 --> S3: X3 / Z1 S2 --> S3: X4 / Z2
次状態式(状態図から直接):
各項が 1つの状態変数だけ を含む → カルノー図不要、状態図を読むだけで式が書ける。
出力式:
通常 vs ワンホット まとめ
graph TD subgraph "通常の割り当て" A1["FF 数: ⌈log2 N⌉ 個\n(7状態なら3個)"] A2["次状態式: カルノー図が必要\n設計は手間だが FF は少ない"] end subgraph "ワンホット割り当て" B1["FF 数: N 個\n(7状態なら7個)"] B2["次状態式: 状態図から直接書ける\nFF は多いが設計が爆速"] end A1 -->|"FF 安い・設計大変"| R1 B1 -->|"FF 高い・設計簡単"| R2 style A1 fill:#fff3cd style B1 fill:#d4edda
| 通常の割り当て | ワンホット | |
|---|---|---|
| FF 数 | ⌈log₂ N⌉ 個 | N 個 |
| 次状態式の導出 | カルノー図が必要 | 状態図から直接 |
| 設計の手間 | 大変 | 簡単(爆速) |
| 使用例 | FF が貴重な時代 | FPGA(FF が豊富) |
Ch14 まとめ
graph TD A["14.1: 行マッチング\n相同的な行を統合"] --> B["14.2: 等価状態の定義\n定理14.1"] B --> C["14.3: 含意表\n体系的な等価判定"] C --> D["14.4: 等価な順序回路\n2つの回路の比較"] D --> E["14.5: 不完全指定の簡約\n両立(compatible)"] E --> F["14.6: FF入力式の導出\n状態表 → 回路式"] F --> G["14.7: 等価な状態割当\n割り当てでコストが変わる"] G --> H["14.8: 状態割当の手引\n隣接配置で式を簡約"] H --> I["14.9: ワンホット\n状態図から直接式を書く"] style A fill:#cce5ff style C fill:#cce5ff style E fill:#fff3cd style F fill:#d4edda style I fill:#d4edda
課題と似たような形式のテストらしい