順序回路の総復習(Ch12-13)
そもそも「順序回路」とは?
組合せ回路との違い:
- 組合せ回路:今の入力だけから出力を決める(AND、OR、NOT)
- 順序回路:過去の入力の履歴も含めて出力を決める
なぜ「過去」が使えるのか?
→ フリップフロップ(FF) が状態を記憶しているから
イメージ:
- 組合せ回路 = 電卓(押したボタンだけで計算)
- 順序回路 = 自動販売機(お金を入れた履歴を覚えてる)
有限状態機械(FSM)
FSMとは:
→ 「今の状態」と「今の入力」から、「次の状態」と「出力」を決める回路
構成要素:
- 状態:FFが記憶する値(例:お金が入ったかどうか)
- 入力:外部からの信号(例:コイン投入)
- 出力:外部に出す信号(例:商品を出す)
Moore型 vs Mealy型(超重要!!)
Moore型(ムーア)
特徴:
- 出力が状態のみで決まる
- 入力は出力に直接影響しない
タイミング:
- 入力を与えても、出力は次のクロックエッジまで待つ
- → 「出力が1クロック遅れる」
状態図の書き方:
- 状態の中に出力を書く(例:S0: 0, S1: 1)
- 矢印の上に入力のみを書く
例:自動販売機
- 「お金が入っている状態」→ 商品選択ボタンが光る
- 入力(コイン投入)→ 状態が変わる → 出力(ボタンが光る)
Mealy型(ミーリー)
特徴:
- 出力が状態と入力の両方で決まる
- 入力が変わると即座に出力も変わる
タイミング:
- 入力が変わったと同時に出力が変わる
- → 「即座に反応」
- ただし、遷移中に**一瞬誤った出力(False Output)**が出ることがある
状態図の書き方:
- 矢印の上に**「入力/出力」を書く**(例:0/0, 1/1)
例:エレベーター
- ボタンを押した瞬間にドアが開き始める
- 状態が変わるのを待たずに即反応
比較表
| Moore型 | Mealy型 | |
|---|---|---|
| 出力の決め方 | 状態のみ | 状態 + 入力 |
| 出力のタイミング | クロックエッジ後(1クロック遅れ) | 入力変化と同時 |
| 状態グラフ | 状態の中に出力を書き込む | 遷移矢印に出力を書き込む |
| False Output | なし | あり |
| 用途 | 安定した出力が必要な場面 | 即座に反応が必要な場面 |
覚え方
- Moore = まじめ(クロック待ってから出力)
- Mealy = めっちゃ早い(入力即出力)
状態表と状態図
状態表
とは:
→ 現在の状態と入力から、次状態と出力を表にまとめたもの
見方:
- 縦列:現在の状態
- 横列:入力の値(X=0, X=1)
- セル:次状態と出力
例(Mealy型):
| 現在状態 | 次状態 (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 |
状態図
とは:
→ 状態表を図にまとめたもの。全体の流れが一目でわかる
見方:
- 円:状態
- 矢印:状態遷移
- ラベル:入力/出力(Mealy型)、または入力のみ(Moore型)
状態表 vs 状態図
| 状態表 | 状態図 | |
|---|---|---|
| 形式 | 表 | 図 |
| 見やすさ | 数値を正確に見られる | 全体の流れが一目でわかる |
| 用途 | 計算・検証 | 概念理解・説明 |
系列検出器(13章)
とは?
→ 入力Xに来的ビット列の中から、指定されたパターン(例:101)を検出し、検出したらZ=1を出力する回路
設計の考え方(101検出器)
状態の意味:
- S0: 初期状態(何も記憶していない)
- S1: 「1」を検出した
- S2: 「10」を検出した
状態遷移の考え方:
S0 --1--> S1 --0--> S2 --1--> S0 (Z=1)
→ S2で「1」が来たら「101」完成 → Z=1を出力してS0に戻る
オーバラップ:
- 10101 → 最後の1は次の系列の先頭として使える
- つまり、2回カウントされる
Mealy型系列検出器(101検出)
状態表:
| 現在状態 | 次状態 (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 |
状態図:
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
Moore型系列検出器(101検出)
Mealy型との違い:
- 出力が状態のみで決まる
- 「101が検出された状態」を別途用意する必要がある
- 状態数が1つ増える(S3を追加)
状態表:
| 現在状態 | 次状態 (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
最小クロック周期
基本式:
tclk(min) = tp + tc + tsu
- tp: FFの遅延
- tc: 組合せ回路の遅延
- tsu: セットアップ時間
意味:
- クロック周期は「FFの遅延 + 組合せ回路の遅延 + セットアップ時間」より短くできない
- これを満たさないとsetup time violationが起きる
重要ポイントまとめ
- Moore型 = 状態のみで出力決定、1クロック遅れ
- Mealy型 = 状態+入力で出力決定、即座に反応
- False Output = Mealy型特有の問題、アクティブエッジ直前で読む
- 系列検出器 = パターンを検出する回路、Mealy型は状態数が少ない
- 最小クロック周期 = tp + tc + tsu