論理設計学 問題と解答解説集
テキスト:Morris Mano “Digital Design”
対応ノート:第15回 順序回路の設計手順 | 順序回路 総復習
使い方
まず自分で解いてから、解答コールアウトを開いて答え合わせ。解説コールアウトで理解を深めよう。必要な回路図はMermaidで描いてある。
1章 — 2進数・基数変換
1.11 基数変換
以下の2進数を8進数と16進数に変換せよ。次に、8進数と16進数をそれぞれ10進数に変換し、等しいことを確認せよ。
解答
(a)
8進数:3桁ずつ区切る(小数点を中心に)
→16進数:4桁ずつ区切る
→10進数確認:
- 一致!✓
(b)
8進数:
→16進数:
→10進数確認:
- 一致!✓
解説
2進数→8進数:小数点を中心に3桁ずつ区切り、各グループを8進数1桁に変換。
2進数→16進数:同様に4桁ずつ区切り、各グループを16進数1桁に変換(10〜15はA〜F)。覚え方:, だから、3桁と4桁のグループ分けになる。
1.17 2進数の加算・減算・乗算
以下の2進数について加算、減算、乗算を行え。
解答
(a)
加算:
1111 + 1001 ------ 11000 (= 24)減算:
1111 - 1001 ------ 0110 (= 6)乗算:
1111 × 1001 ------- 1111 0000 0000 1111 -------- 10000111 (= 135)(b)
加算:
1101001 + 0110110 --------- 10011111 (= 159)減算:
1101001 - 0110110 --------- 0110011 (= 51)乗算:
(過程省略)(c)
加算: ()
減算: ()
乗算:
解説
2進数の加算は桁上がりに注意。
- で桁上がり
- で桁上がり
減算は2の補数を使うと楽。乗算は筆算と同じく、掛ける数の各ビットが1のときだけ被乗数をシフトして加算。
1.21 基数の特定
以下は3桁の正の数の加算を示す。この結果が正しいとき、3桁の正の数の基数を答えよ。また、それぞれオーバフローが生じるか否かを答えよ。
解答
(a) 基数 。オーバフローあり。
結果 なので → 負の解は不適。
実際には 、結果が000なのでオーバフロー(3桁で表現できない)。基数を求める: だが結果は 。これは が で割り切れる(オーバフローで下3桁が000)ことを意味する。
を解くと 。: ✓ → 基数は7?でも7進数では digit 7は使えない(654の「6」はOK、でも7はdigitとして使えない)。
ちょっと違う。もう一度。の和は 以上になっており、下3桁が000になっている。
つまり ( は整数、オーバフローにより下3桁のみ表示→000)
とすると →
: ✓ → 基数は7、オーバフローあり。確認: → 下3桁 ✓
(b) 基数 。オーバフローなし。
結果
→ → → →確認:
一方 ✓ オーバフローなし。(c) 基数 。オーバフローあり。
同じ式:
結果
→ → → →確認:
一方 ✓ … あれ、オーバフローは?
いや、 は3桁に収まっている。基数6で 73 は 201_6 だからオーバフローなし。
でも問題には「オーバフローが生じるか否か」とあるから、オーバフローなし。あれ、(c) の計算: で合ってる。(b) の も合ってる。
どちらもオーバフローなし。問題文に「オーバフローが生じるか否かを答えよ」とあるので、どちらも「生じない」。
解説
基数未知の加算問題は、次の手順で解く:
- 左辺・右辺をそれぞれ基数の多項式で表す
- 等式を立ててについて解く
- 桁あふれ(オーバフロー)は、結果の桁数が元の数の桁数を超えているかで判定
オーバフローの有無は、「本来の和の桁数が3桁を超えているか」で判定する。結果が3桁に収まっていればオーバフローなし。
2章 — 論理式の簡単化(定理の適用)
2.12 定理を1つ適用した簡単化
以下の論理式に定理を1つ適用して簡単化せよ。また、使用した定理を述べよ。
解答
(a) — 使用定理:T5 (A + A’ = 1)
とおくと(b) — 使用定理:T12’
とおくと(c) — 使用定理:T8 (分配則) + T5
(d) — 使用定理:T10 (吸収則 )
とおくと(e) — 使用定理:T5 (A + A’ = 1)
(f) — 使用定理:T2 (A + 1 = 1)
とおくと
解説
定理を1つだけ使って簡単化する問題。ポイントはパターン認識:
- → T5(補元則)で
- → T12’ で
- → T5 で
- → T10(吸収則)で
- → T10 で
- → T1 で
各定理の番号と内容を結びつけて覚えておくと、テストで「何を使ったか」聞かれたときに困らない。
3章 — 展開・排他的論理和
3.15 展開
下記の式を展開せよ(ヒント:式(3.3) を活用する)。
解答
(a) 展開結果:
段階的に展開する:
- (式3.3、)
- → 展開を続ける
- さらに と を掛けると最終的に となる。
(b) 展開結果:
解説
式(3.3) は分配則の双対形。通常の分配則 と対になっている。
展開のコツ:
- まず隣接する2項に式(3.3)を適用して簡単化
- 繰り返し適用して項を減らしながら展開
- 相補性 や で消える項に注目
3.16 排他的論理和の変形
式(3.6) を用いて排他的論理和を積和形に変形した後、全体の論理式を和積形に変形せよ。
解答
(a) を積和形に:
よって全体 =
これをK-mapで簡単化すると →和積形: …ではなく、もう一度整理。
積和形簡単化:
K-map上でまとめると:
さらに変形:(T11: )
よって積和形 =和積形: はすでに和積形(ORの形)。
(b)
全体:
簡単化:K-mapを使うと… →積和形:
和積形:
解説
排他的論理和(XOR)は「2入力が異なるとき1」:
積和形(SOP)から和積形(POS)への変換は、ド・モルガンかK-mapを使う:
- SOPの最小項の補集合をとるとPOSになる
- K-map上で0をまとめてPOSを直接得ることもできる
4章 — 加算器・減算器
4.11 全減算器(Full Subtractor)
全減算器について以下の問いに答えよ。
(a) 表4.6から、 と の論理式を求め、論理ゲートを用いた回路図を描きなさい。
(b) と全加算器の出力Sumの論理式(4.20)を比較して、それらの関係を述べよ。また、 と全加算器の出力 の論理式(4.21)を比較して、それらの関係を述べよ。
解答
(a) 全減算器の真理表(表4.6):
(下位からの借り) (差) (上位への借り) 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 K-mapから論理式を導出:
回路図:
(b) 全加算器との関係:
- (減算の差)と (加算の和)は全く同じ論理式:
- (減算の借り)と (加算の桁上げ)は双対関係:
→ は の を に置き換えた形!
解説
全減算器は全加算器と非常に似ている。
- 差 は XOR 3つの連接で、全加算器の Sum と同じ
- 借り は を反転した全加算器の桁上げ
つまり全加算器の入力 だけ反転させれば全減算器になる。これは という性質とも対応している。
4.12 4ビット加算回路
下記の4ビットの2進数の計算を行う回路を、1ビットの全加算器モジュールとインバータを用いて図示せよ。ただし、4ビットの2進数は2の補数とする。
解答
方針: を利用する。
Zの2の補数 = (全ビット反転して+1)
構成:
- Zの各ビットをNOTで反転 →
- X+Y+Z’ を4個の全加算器で計算
- 最下位FA0の桁上げ入力 (これで の+1を実現)
- 結果
解説
2の補数表現では 。
この問題では なので、X+Yの結果と-Zを同時に処理する。回路のポイント:
- Zの各ビットにインバータ(NOT)を接続
- 最下位FAの (桁上げ入力)を1に固定 → を実現
- が の「+1」部分になる
この回路は加算器1個+NOTアレイで減算もできる便利な構成。
5章 — カルノー図
5.14 K-map → 最小積和形(SOP)
下記の関数について、カルノー図を用いて最小の積和形の論理式を求めよ。
解答
(a)
K-map(3変数、AがMSB):
まとめると:
- と は独立した最小項
→ (これ以上簡単化できず)
さらに ?いや ?
確認: → 簡単化できない。
もっと整理:(b)
最小項:
K-mapでまとめる:
- (dが変化)
- (fが変化)
→(c)
K-map展開:
最小項:
→
K-mapでまとめると:、(ただし は既にカバー済み)
→(d)
K-mapでまとめる:
- は単独
- は単独
→
→ さらに なので(e)
K-mapでまとめる:
→(f)
は の補集合。つまり
は の補集合。
これは和積形(POS)。積和形に変換:
展開すると:
さらに:
→
解説
K-mapのコツ:
- 隣接する1を長方形で囲む(サイズは 個)
- 大きな長方形ほど簡単な式になる
- 同じ1を複数の長方形で囲んでOK(冗長項は後で削除)
の のように見た目が複雑でも、K-mapに書くと大半が1だとわかる。
の は「最大項(Maxterm)」の積で与えられている。補集合を取れば最小項なので、
としてからK-mapを書くのが簡単。
5.15 K-map → 最小和積形(POS)
上記(a)〜(f)の関数について、カルノー図を用いて最小の和積形の論理式を求めよ。
解答
(a)
和積形:K-map上の0をまとめる
0のマス()をグループ化
- → 3変数K-mapで0の位置を確認
0のマス:
グループ:、?
検証: は隣接していない(2ビット異なる)→まとめられない
個別に取るしかない。
これを簡単化:
→ これ以上簡単化できない
→ ド・モルガン:(b)
和積形:の補集合を求める
→ K-mapでまとめる
?
実際:
K-map:、
∴(c)
もともとORの形 → そのまま和積形として成立
→ (積和形と和積形が同じ)(d)
?
K-map:、は単独、は単独
→(e)
K-mapでまとめる:、
→
∴(f)
これは積和形でも和積形でもこの形のまま。
解説
和積形(POS)を求めるには3つの方法がある:
- K-mapで0をまとめる(0のグループ = の積和形、そこからド・モルガン)
- の積和形から補集合を求める
- 分配則で積和形→和積形に変形
AND-OR(SOP)はNAND-NANDに、OR-AND(POS)はNOR-NORに変換しやすい。
6章 — クワイン・マクラスキー法
6.9 Q-M法
クワイン・マクラスキー法を用いて、次の関数の最小の積和形を求めよ。
解答
Step 1:最小項を1の数でグループ分け
グループ 最小項 2進数 1(1個の1) 2 0010 4 0100 2(2個の1) 3 0011 9 1001 12 1100 3(3個の1) 7 0111 11 1011 13 1101 14 1110 4(4個の1) 15(dc) 1111 1(1個の1) 1(dc) 0001 2(2個の1) 10(dc) 1010 Step 2:ペアリング(1回目)
隣接グループ間で1ビット異なるペアを結合:
結合 元の項 結果 備考 2,3 0010, 0011 001- (a’b’c) ✓ 2,10 0010, 1010 -010 (b’cd’) ✓ 3,7 0011, 0111 0-11 (a’bd) ✓ 3,11 0011, 1011 -011 (b’cd) ✓ 4,12 0100, 1100 -100 (ac’d’) ✓ 9,11 1001, 1011 10-1 (ab’d) ✓ 9,13 1001, 1101 1-01 (ac’d) ✓ 12,13 1100, 1101 110- (abc’) ✓ 12,14 1100, 1110 11-0 (abd’) ✓ 7,15 0111, 1111 -111 (bcd) ✓ 11,10 1011, 1010 101- (ab’c) ✓ 13,15 1101, 1111 11-1 (abd) ✓ 14,15 1110, 1111 111- (abc) ✓ 1,3 0001, 0011 00-1 (a’b’c) ✓ 1,9 0001, 1001 -001 (b’c’d) ✓ Step 3:ペアリング(2回目)
上記の結果からさらに1ビット異なるペアを結合:
- 001- + 101- → -01- (b’c) ✓
- 0-11 + 1-11 → —11 (cd) ✓
- -010 + -110 → -01- ?いや -0-0 (b’d’)? 検証…
- -100 + -110 → —10 → 異なる
- 110- + 111- → 11— (ab) ✓
- 10-1 + 11-1 → 1—1 (ad) ✓
など。最終的に以下の主項が得られる:
- P1: (-01-:項2,3,10,11をカバー)
- P2: (—11:項3,7,11,15をカバー)
- P3: (11—:項12,13,14,15をカバー)
- P4: (1—1:項9,11,13,15をカバー)
- P5: (-0-0:項2,4,10をカバー)
- P6: (-100:項4,12をカバー)
- P7: (00-1:項1,3をカバー)
Step 4:最小被覆を選ぶ
主項 2 3 4 7 9 11 12 13 14 P1: ✓ ✓ ✓ P2: ✓ ✓ ✓ P3: ✓ ✓ ✓ P4: ✓ ✓ ✓ P5: ✓ ✓ P6: ✓ ✓ P7: ✓ 必須主項:P3(12,13,14を唯一カバー)、P5(2を唯一カバー)
残った3,4,7,9,11をカバーする最小の組合せ:
- P1() は 3,11 をカバー
- P4() は 9,11 をカバー
- P2() は 3,7,11 をカバー
- P6() は 4 をカバー
P2() で 3,7,11 をカバーし、P6() で4をカバー。P5で2をカバー、P3で12,13,14をカバー。
よって または
→ 最小形は
解説
Q-M法の流れ:
- 最小項を1の個数でグループ分け
- 隣接グループ間で1ビットだけ異なるものを統合(ダッシュで表現)
- 統合できなかった項が主項
- 被覆表で必須主項を特定、残りを最小被覆
dc(Don’t Care)項はペアリングのときは使えるが、被覆表ではカバーしなくてよい(点で表現)。
K-mapが3変数・4変数までしか実用的でないのに対し、Q-M法はアルゴリズムとして機械的に実行でき、多変数でも使えるのが強み。
7章 — 多段ゲート回路
7.1 2段・3段ゲート回路
下記の式について(a)と(b)に答えよ。
(a) 最小の2段OR-ANDゲート回路の論理式を求めよ。
(b) 最小の3段OR-AND-ORゲート回路の論理式を求めよ。
解答
最小項を確認:
K-mapで1をプロット:
cd 00 01 11 10 ab 00 0 0 0 0 01 1 0 1 1 ← m4,m6,m7 11 0 0 0 0 10 1 1 0 1 ← m8,m9,m10(a) 2段OR-AND回路(積和形SOP)
K-mapで1をまとめる:
- ? は隣接していない
まとめ方によって複数の解がある。最小のもの:
またはさらに簡単化できないか?
→ SOPとしてはこれ以上簡単化できない。(b) 3段OR-AND-OR回路
OR-AND-OR回路は、SOPを因数分解してAND-ORの前にORの段を追加する。
はもともと6個の最小項だが、次のように因数分解できる:
… ここからさらに…実際には の補集合をOR-ANDで表す:
の0のマス()をK-mapでまとめて、ド・モルガンで全体を反転する。でも問題は「最小の3段OR-AND-OR」が欲しいので、因数分解された形を示す:
3段OR-AND-OR:
段1(OR):c + d' と c' + d' 段2(AND):a'b(c+d') と ab'(c'+d') 段3(OR):上記2つのOR
解説
2段回路(SOP):AND-OR形態 → K-mapで1をまとめるだけ
3段回路(OR-AND-OR または AND-OR-AND):因数分解して中間段を作る3段回路にするメリット:同じゲート型でも配線のファンインを減らせることがある。
2段AND-OR:ANDゲートの入力数が多いと、ゲート遅延が増大する
3段:中間でORを取ることでANDゲートの入力を減らせる(ただし段数が増えるトレードオフ)
8章 — ハザード
8.7 静的0ハザード
下記の関数が静的0ハザードをもつか答えよ。静的0ハザードが発生する場合の入力 の変化をすべて列挙せよ。
ヒント:図8.10(b)のようなカルノー図を描き、隣接する2つの0で同一ループに含まれない組合せをすべて探す。
解答
静的0ハザードは、入力変化時に出力が0→1→0と一瞬1に変動する現象。
手順:
- 関数をK-mapにプロット(和積形POSなので、0に注目)
- 各項で0になる領域を確認
- 隣接する0のペアで、同一の積項でカバーされていないものを探す
項 0になる条件 かつ かつ かつ かつ かつ かつ かつ K-map上で0の領域:
- のエリア(cd=01,11列 × ab=00,01,10,11行のうちa=0の行=00,01)
- ab=00, cd=01()と cd=11()
- ab=01, cd=01()と cd=11()
- → abc=010 または 110、d=0
- ab=01, cd=00()と ab=11, cd=00()
- → ab=10または11、cd=11
- ab=10, cd=11()と ab=11, cd=11()
- → ab=01または11、cd=10
- ab=01, cd=10()と ab=11, cd=10()
静的0ハザードが発生する隣接0ペア:
- と :の変化 → 両方とも第1項でカバー → ハザードなし
- と :の変化 → でカバー()?はだがも → 両方とも第2項でカバー → ハザードなし
- と :の変化 → は第1項()でカバー(a=0,d=1)、も第1項でカバー → ハザードなし
- と :の変化 → は第4項(: b=1,c=1,d=0)でカバー、も第4項でカバー → ハザードなし
- と :の変化 → は第3項(: a=1,c=1,d=1)でカバー、も第3項 → ハザードなし
すべての隣接0ペアが同一の項でカバーされている。よって 静的0ハザードは発生しない。
解説
静的ハザードの判定手順:
- SOP(積和形)の回路 → 静的1ハザードをチェック(隣接する1のペアで同一積項に含まれないもの)
- POS(和積形)の回路 → 静的0ハザードをチェック(隣接する0のペアで同一和項に含まれないもの)
ハザードを防ぐには:
- 冗長項(SOPなら に相当する項)を追加する
- または出力にFFを入れて、ハザードが収まった後の値を読む
9章 — マルチプレクサ(MUX)
9.17 MUXの実装
アクティブハイ出力/アクティブハイ・イネーブルの2:1 MUX 2個とインバータ、ORゲートを用いて、下記の回路を実装したい。
(a) アクティブハイ出力/イネーブルなしの 4:1 MUX を図示せよ。
(b) アクティブロー出力/イネーブルなしの 4:1 MUX を図示せよ。
解答
(a) アクティブハイ出力/イネーブルなし 4:1 MUX
2:1 MUX 2個で4:1 MUXを作る。2:1 MUXは選択線Sで入力を切り替える:
構成:
- MUX0 が D₀, D₁ を S₀ で選択
- MUX1 が D₂, D₃ を S₀ で選択
- S₁ をインバータで反転 → MUX0 のイネーブル(EN)に
- S₁ をそのまま MUX1 のイネーブルに
- OR ゲートで両 MUX の出力を合体 → Y
これで が実現できる。
2:1 MUXにイネーブル機能があれば、第3のMUXは不要。2:1 MUXにイネーブル機能がある場合:
- MUX0のイネーブル = S1’(インバータで反転)
- MUX1のイネーブル = S1
- ORゲートで両MUXの出力を合体
(b) アクティブロー出力/イネーブルなし 4:1 MUX
アクティブロー出力は (出力の否定)を出す。つまり出力段にインバータが付く。構成は(a)と同じだが、最終出力にインバータを追加するか、MUXの出力段がもともとアクティブローであればそのまま使う。
- MUX0, MUX1の出力をアクティブローで取得
- ORゲートはNANDに置き換え(アクティブロー同士のOR=NAND)
- または単純に(a)の出力YをNOTで反転
解説
MUXの拡張の基本:
- MUXは MUX 2個 + 最終選択段 で構成
- 選択線が増えるごとに2倍のMUXが必要
アクティブハイ vs アクティブロー:
- アクティブハイ:制御信号=1で有効、出力は正論理
- アクティブロー:制御信号=0で有効、出力は負論理
2:1 MUXの真理表:
S 出力(アクティブハイ) 出力(アクティブロー) 0 D0 D0’ 1 D1 D1’
10章 — リセット優先フリップフロップ
10章の問題
リセット優先フリップフロップは入力 が許可され、このときにフリップフロップがリセットされることを除いてS-Rフリップフロップと同様に動作する。
(a) リセット優先フリップフロップの真理値表(遷移表)を示せ。
(b) カルノー図を用いてリセット優先フリップフロップの特性方程式を求めよ。
(c) S-Rフリップフロップに何らかの回路を追加することで、リセット優先フリップフロップ回路を図示せよ。(ヒント:教科書p.90の式(10.5)と(b)で求めた式を比較して考えると良い)
解答
(a) 真理値表(遷移表)
S-R FFの特性(通常): は禁止入力
リセット優先FF: のとき (リセット優先)
S R Q Q⁺ 動作 0 0 0 0 保持 0 0 1 1 保持 0 1 0 0 リセット 0 1 1 0 リセット 1 0 0 1 セット 1 0 1 1 セット 1 1 0 0 リセット(S-R FFでは禁止) 1 1 1 0 リセット(S=R=1でもリセット優先) (b) 特性方程式
K-map( を S, R, Q の関数として):
RQ 00 01 11 10 S 0 0 1 0 0 1 1 1 0 0
通常のS-R FFの特性式 ( が条件)と全く同じ式!
違いは のとき、この式は となって矛盾する…?いや、 を代入すると: → セットになる。
でもリセット優先は のはず。おかしい。K-mapを書き直し:
RQ 00 01 11 10 S 0 0 1 0 0 1 1 1 0 ? ← S=1,R=1,Q=1 → Q⁺=0, S=1,R=1,Q=0 → Q⁺=0正しくは:
RQ 00 01 11 10 S 0 0 1 0 0 1 1 1 0 0S=1,R=1の列(RQ=11,10)はどちらも Q⁺=0。
K-mapでまとめる:
- の列 = 1
- の列 = Q
- の列 = 0
- の列 = 0
→
または は間違いで、正しくは確認: → ✓(リセット優先!)
(c) S-R FF + 追加回路
ヒント「式(10.5)と比較」:
S-R FFの式(10.5):(ただし の条件付き)
リセット優先の式:両者の関係:リセット優先FFは、S-R FFのS入力を (SとR’のAND)に置き換えたもの。
構成:
- RをNOTで反転 → R’
- SとR’をAND → 新しいセット入力
- と R を S-R FF に入力
これで のとき 、 → リセット優先が実現する。
解説
S-R FFとリセット優先FFの違い:
入力 (S,R) S-R FF リセット優先FF 00 保持 保持 01 リセット リセット 10 セット セット 11 禁止 リセット リセット優先の特性式 は「R=1なら強制リセット、R=0ならSでセットか保持」の意味。
実装はS-R FFのS入力の前に のANDを追加するだけでOK。
カウンタ設計(J-K FF)
下記の次状態表を持つカウンタをJ-Kフリップフロップ3個で設計する。各J-Kフリップフロップの入力 の論理式を求めよ。また、初期値 のとき、次状態のカウンタ値を答えよ。
| C B A | C⁺ B⁺ A⁺ |
|---|---|
| 0 0 0 | 0 0 1 |
| 0 0 1 | 0 1 0 |
| 0 1 0 | 0 1 1 |
| 0 1 1 | 1 0 0 |
| 1 0 0 | 1 0 1 |
| 1 0 1 | 1 1 0 |
| 1 1 0 | 1 1 1 |
| 1 1 1 | 0 0 0 |
解答
この表は**3ビット2進カウンタ(0→1→2→…→7→0)**の動作そのもの。
遷移表から各FFの を抽出:
C B A C⁺ B⁺ A⁺ 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 J-K FFの入力方程式を求める:
J-K FFの特性:
つまり:
- のとき:(は任意)
- のとき:(は任意)
- のとき:(保持)
- のとき:(トグル)
A () のK-map:
C B A=0→A⁺ A=1→A⁺ 0 0 1 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 1 0 1 1 1 (常にトグル)
B () のK-map:
C A B=0→B⁺ B=1→B⁺ 0 0 0 1 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 (A=1のときトグル)
C () のK-map:
B A C=0→C⁺ C=1→C⁺ 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 (B=A=1のときトグル)
論理式まとめ:
初期値 からのカウント:
解説
J-K FFの設計では「 を と比較してJとKを決める」が基本:
Q → Q⁺ J K 動作 0 → 0 0 d 保持またはリセット 0 → 1 1 d セット 1 → 0 d 1 リセット 1 → 1 d 0 保持またはセット d(don’t care)はK-mapのマージに活用できる。
このカウンタのパターン:
- A(LSB)→ 毎クロック反転(=トグルモード)
- B → A=1のときだけ反転
- C(MSB)→ A=B=1のときだけ反転
これはリップルカウンタではなく同期式カウンタ(全ビットが同時に変化)。
13章 — 順序回路の解析
13.4 順序回路(遷移表・状態図・タイミング図)
教科書の図12.17の回路(CLKの立下りエッジ駆動)で、入力が X のみ、Dフリップフロップが3個の回路を考える。また、組合せ回路の論理式が以下の通りとする。
(a) この回路の遷移表と状態図を示せ。
(b) 入力 に対する X, CLK, Q1, Q2, Q3, Z のタイミング図を図示せよ。ただし、X は CLK の立下りエッジと立上りエッジの中間で変化するものとする。
(c) このタイミング図で誤った出力が出る場合、誤った出力が出ないようにするにはクロックに対して入力がどこで変化すればよいか?ただし、フリップフロップのホールド時間はゼロとする。
解答
(a) 遷移表
D-FFなので
Q1 Q2 Q3 X=0 のとき 次状態 X=1 のとき 次状態 Z(X=0) Z(X=1) 0 0 0 → 001 → 001 1⋅1+0=1 0 0 1 → 011 → 011 0 1 0 1 0 → 100 → 101 0 1 1 → 110 → 111 1 0 0 → 001 → 001 1 0 1 → 011 → 011 1 1 0 → 100 → 101 1 1 1 → 110 → 111 整理すると:
現状態 X=0 X=1 Z(X=0) Z(X=1) 000 001 001 0 1 001 011 011 0 1 010 100 101 0 0 011 110 111 0 0 100 001 001 0 1 101 011 011 0 1 110 100 101 0 0 111 110 111 0 0 状態図:
8状態(000〜111)のMealy型。 ラベルで遷移を記述。flowchart LR 000["000"] -->|"0/0<br>1/1"| 001["001"] 001 -->|"0/0<br>1/1"| 011["011"] 010["010"] -->|"0/0"| 100["100"] 010 -->|"1/0"| 101["101"] 011 -->|"0/0"| 110["110"] 011 -->|"1/0"| 111["111"] 100 -->|"0/0<br>1/1"| 001 101 -->|"0/0<br>1/1"| 011 110 -->|"0/0"| 100 110 -->|"1/0"| 101 111 -->|"0/0"| 110 111 -->|"1/0"| 111(b) タイミング図
初期状態 、(LSB first?問題文の指定による)
ここでは左が最初に入力されるとする( の順)。クロック立下りエッジで状態変化。
CLK立下り X 次状態 Q1Q2Q3 Z 0→1→0(初期) — 000 — 1回目 0 001 0 2回目 1 011 1 3回目 0 110 0 4回目 1 111 0 5回目 1 111 0 タイミング図の波形(時間は左→右):
CLK ┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐ ┘└┘└┘└┘└┘└┘└┘└┘ X 0 1 0 1 1 ┌──┐ ┌┐ ┌──────┐ ┘ └──┘└──┘ └── Q1 ┌──────── ────────────┘ Q2 ┌──────────────┐ ────┘ └── Q3 ┌────────────────────┐ ┘ Z ┌┐ ──────┘└──────────────立下りエッジ直後の出力に注目。Mealy型なので が変化するとZも変化する可能性がある。
(c) 誤った出力の防止
この回路ではMealy型の出力 が、クロック立下りエッジの前後でグリッチを起こす可能性がある。
がクロックエッジの近くで変化すると、 がまだ新しい状態に更新される前に だけ先に変化し、一時的に誤ったZが出力される。
対策: はクロックのアクティブエッジ(立下りエッジ)の直前で確定させ、直後には変化させない。具体的には「クロック立下りエッジの直前でセットアップ時間を満たし、かつ直後ではなく次のエッジとの中間で変化させる」のが望ましい(問題文の設定では中間で変化しているのでOK)。
さらに安全にするには、出力ZをD-FFで1クロック遅延させる(出力レジスタ方式)。
解説
順序回路の解析手順:
- 論理式から を計算 → 遷移表
- 遷移表から状態図を描く
- タイミング図を描く(クロックエッジで が変化するタイミングに注意)
Mealy型の注意点:
- 出力 は入力 の影響を直接受ける
- がクロックエッジの近くで変わると、一瞬誤った出力(グリッチ)が出ることがある
- 「正しい出力」はクロックのアクティブエッジ直前の と で決まる
参考



