順序回路の設計 (2)

c 関西学院大学 石浦 菜岐佐)
「論理回路」ノート (2016 年度, http://ist.ksc.kwansei.ac.jp/∼ishiura/lc/
順序回路の設計 (2)
9
♣
♣
SR
JK
,
T
,
JK
フリップフロップ
フリップフロップによる順序回路の設計
♣ 色々な順序回路 (状態遷移グラフ) の設計
9.1
9.1.1
種々のフリップフロップ
トリガ信号の種類
フリップフロップのトリガ (
(1) 立上り (クロックの
(2) 立下り (クロックの
(3) 信号値
クロック
0→1
1→0
変化) (
変化) (
信号) は 4 タイプ
positive
negative
edge)
1
立上り で D の値が読み込まれ,
立下り で その値が Q に出される
( master-slave 型と呼ばれる)
(4) 信号値 0 … 信号値 1 の逆
9.1.2
edge)
D
HH LLLLLHHHHHH LL
CLK
LLHH LLHH LLHH LLL
Q
VVVVVVVÆHHHHHH LLLLLLHH
フリップフロップの種類
D フリップフロップを含めて 4 タイプのフリップフロップがある
それぞれにトリガが 4 種類があるので, 理論上は計 4 × 4 = 16 通りのフリップフロップがある
動作表
☆ Q は現在の出力, Q′ はクロック信号が入った後の出力
(a) D フリップフロップ
D
Q′
0
0
1
1
(b) SR フリップフロップ
入力として S, R を持つ
9–1
☆ S は
S
R
0
0
0
1
1
0
1
1
set
,Rは
reset
と覚えれば良い
Q′
Q
0
1
−
· · · 現在の信号値を維持 (信号値変化なし)
· · · 入力
禁止
(出力は
不定
;
発振
したり
破損
する)
(c) T フリップフロップ
入力として T を持つ
toggle
☆ T は
の略と言われる
Q′
T
Q
Q
0
1
· · · 信号値変化なし
· · · 信号値反転
※通常, クロックとは別に Q を 1 や 0 に設定するセット入力やリセット入力を持つ
(d) JK フリップフロップ
入力として J, K を持つ
☆ JK の名前の由来は諸説ある
練習 9.1
J
K
0
0
0
1
1
0
1
1
Q′
Q
0
1
Q
· · · SR と同じ
· · · SR と同じ
· · · SR と同じ
· · · 信号値
反転
下図は JK フリップフロップの入出力の時系列を表したものである. Q 出力の空欄を埋めよ.
J
K
CLK
Q
1
0
0
0
↑
1
1
↑
1
1
↑
0
1
↑
↑
1
☆ ポジティブエッジ型の JK フリップフロップの動作波形
J
HHHHHH LLLLHHHHHHHHHH LLLLLL
K
LLLLLLLLLLLLHHHHHHHHHHHHHHHHHH
CLK
H LH LH LH LH LHH
Q
VVVVVÆHHHHHHHHHH LLLLHHHH L
9–2
9.2
SR, T, JK フリップフロップによる設計
☆ 異なるのは, フリップフロップの入力関数だけ
(1) 状態遷移表の作成
(2) 状態最小化
(3) 状態割当て (入出力, 状態の符号化)
(4) 状態遷移関数, 出力関数を求める
(5) フリップフロップの入力関数を求める
(6) 組合せ回路の設計
9.2.1
準備: フリップフロップの入力要求表の作成
1) D-フリップフロップ
入力要求表
機能表
D
Q′
Q
Q′
D
0
1
0
1
0
0
0
1
1
0
1
1
0
1
0
1
· · · 今 Q = 0 で, 次 Q = 1 にするには D に何を入れれば良いか
2) SR-フリップフロップ
機能表
入力要求表
′
S
0
0
R
0
1
Q
Q
0
1
1
0
1
1
(禁止)
Q
Q′
0
0
0
1
1
0
1
1
S
R
0 X
1 0
0 1
X 0
01
···
(reset)と
00
(維持)
(set) と
00
(維持)
· · · (set)
· · · (reset)
10
···
3) T-フリップフロップ
機能表
入力要求表
T
Q′
Q
Q′
T
0
Q
0
0
0
1
Q
0
1
1
0
1
1
1
1
0
4) JK-フリップフロップ
入力要求表
機能表
′
J
K
Q
0
0
0
1
Q
0
1
1
0
1
1
Q
Q
Q′
J
0
0
0
1
1
0
1
1
0
1
X
X
K
X
X
1
0
···
···
···
···
9–3
0
1
0
1
1
0
1
0
(reset)と
(set) と
(reset)と
(set) と
0
1
1
0
0
1
1
0
(維持)
(反転)
(反転)
(維持)
9.2.2
フリップフロップの入力関数の求め方 (JK フリップフロップの例)
前章の自動販売機の制御回路を JK フリップフロップで設計
2 状態遷移表
現状態
次状態
出力
入力 = −
入力 = 50
入力 = 100
入力 = −
入力 = 50
入力 = 100
S0
S0
S50
S100
(−, −)
(−, −)
(−, −)
S50
S100
S50
S100
S100
S0
S0
S0
(−, −)
(−, −)
(−, −)
(J, −)
(J, −)
(J, 50)
⇓ 符号化
入力
−
50
100
x1
0
0
1
状態
S0
S50
S100
x2
0
1
0
q1
0
0
1
出力
(−, −)
(J, −)
(J, 50)
q2
0
1
0
z1
0
1
1
z2
0
0
1
3 符号化された状態遷移表
q1 q2
q1′ q2′ (次状態)
x1 x2 = 0 0 x1 x2 = 0 1 x1 x2 = 1 0
00
01
00
01
10
10
⇓
01
10
✄
✂0 0 ✁3
x1 x2 = 0 0
z1 z2 (出力)
x1 x2 = 0 1
x1 x2 = 1 0
10
00
00
00
00
00
00
10
00
00
10
11
JK フリップフロップ
Q
0
0
1
1
入力要求表
Q′
J
0
0
1
1
0
X
X
1
K
X
X
1
0
4 フリップフロップの入力関数, 出力関数
j 1 k1 j 2 k2
(JK-FF の入力)
q1 q2
x1 x2 = 00
x1 x2 = 01
00
0 X 0 X
0 X 1
01
0 X X 0
1 X X 1
✄
✂X 1 0 X ✁3
10 X 0 0 X
✞ ☎
3 の部分の解説
✝ ✆
X
z1 z2 (出力)
x1 x2 = 10
x1 x2 = 00
x1 x2 = 01
x1 x2 = 10
1X0X
0XX1
X10X
00
00
00
00
00
10
00
10
11
q1 q2
q1′ q2′
現状態 1 0 を次状態で 0 0 に変えたい
q1
q1′
j 1 k1
1 → 0 とするためには, X 1 とすればよい (入力要求表を見る)
q2
q2′
j 2 k2
0 → 0 とするためには, 0 X とすればよい
9–4
この後は D フリップフロップの場合と同様, カルノー図により j1 , k1 , j2 , k2 および z1 , z2 の関数を最
小化し, 回路を設計する.
4 フリップフロップの入力関数, 出力関数 (再掲)
j 1 k1 j 2 k2
(JK-FF の入力)
q1 q2
00
01
10
z1 z2 (出力)
x1 x2 = 00
x1 x2 = 01
x1 x2 = 10
x1 x2 = 00
x1 x2 = 01
x1 x2 = 10
0 X 0 X
0 X X 0
X 0 0 X
0 X 1 X
1 X X 1
X 1 0 X
1 X 0 X
0 X X 1
X 1 0 X
00
00
00
00
00
10
00
10
11
j 1 = x 1 q2 + x 2 q2
x1 x2
q1 q2 00 01 11 10
k1 = x 1 + x 2
x1 x2
q1 q2 00 01 11 10
1
00 X X X X
00
X
1
01
01 X X X X
X
11 X X X X
11 X X X X
10 X X X X
10
1
X
1
出力関数 z1 , z2 は D フリップフロップの場合と全く同じである.
z1 = q2 x 1 + q1 x 2 + q1 x 1
x1 x2
q1 q2 00 01 11 10
00
X
01
X
1
11 X X X X
10
練習 9.2
1
X
1
q1 q2
00
z2 = q1 x 1
x1 x2
00 01 11 10
X
01
X
11 X X X X
10
X
1
同様にして, j2 と k2 の関数を求め, 最小化せよ.
j2 =
x2q1
x1 x2
q1 q2 00 01 11 10
1 X
00
x1 + x2
x1 x2
q1 q2 00 01 11 10
00 X X X X
k2 =
01 X X X X
01
11 X X X X
11 X X X X
10
10 X X X X
X
9–5
1 X 1
JK-FF を用いて設計した回路
(参考) D-FF を用いて設計した回路
x1
x1
z1
x2
z1
x2
z2
z2
j1
k 1 , k2
K
j2
Q
K
D Q
Q
q1
q1
q1
q2
J Q
clock
d1
q1
J Q
Q
q2
d2
D Q
Q
q2
q2
clock
9.3
9.3.1
順序回路の例 (状態遷移グラフの設計)
ビットパターンを検出する回路
例題 9.1 次のような Moore 型順序回路の状態遷移グラフを示せ.
この回路は 1 ビットの入力 x と 1 ビットの出力 z を持ち, x に過去 3 時刻 (現時刻は含まない) に 1 0 1 が入力
されていれば z に 1 を, そうでなければ z に 0 を出力する. 例えば, x に 1 1 0 1 0 0 1 0 1 0 1 1 · · · を入力した
場合の出力は次のようになる.
時刻
0 1 2 3 4 5 6 7 8 9 10 11 · · ·
入力
x
1 1 0 1 0 0 1 0 1 0 1
1 ···
出力
z
0 0 0 0 1 0 0 0 0 1 0
1 ···
状態遷移グラフは例えば次のようになる.
0
S/0
1
1
S1/0
1
0
0
S10/0
1
0
9–6
S101/1
例題 9.2 次のような Mealy 型順序回路の状態遷移グラフを示せ.
この回路は 1 ビットの入力 x と 1 ビットの出力 z を持ち, x に現時刻と過去 2 時刻に 1 0 1 が入力されていれば
z に 1 を, そうでなければ z に 0 を出力する. 例えば, x に 1 1 0 1 0 0 1 0 1 0 1 1 · · · を入力した場合の出力は
次のようになる.
時刻
0 1 2 3 4 5 6 7 8 9 10 11 · · ·
入力
x
1 1 0 1 0 0 1 0 1 0 1
1 ···
出力
z
0 0 0 1 0 0 0 0 1 0 1
0 ···
状態遷移グラフは例えば次のようになる.
0/0
1/0
1/0
S
0/0
S1
S10
1/1
0/0
可変長符号復号回路
9.3.2
下記の表の可変長符号の復号を行う順序回路を考える.
記号
固定長符号
可変長符号
a
b
001
010
0
100
c
d
e
011
100
101
101
1100
1101
f
g
110
111
1110
1111
(解説) 可変長符号とは
記号の集合 (上の例では {a, b, c, d, e, f, g}) の 2 進符号化を行う
∗ 固定長符号 · · · 符号長が全て等しい
∗ 可変長符号 · · · 符号長が記号ごとに異なってもよい
例えば, 上の例で, 「acaga」という記号列を 2 進符号化
∗ 固定長符号
001 011 001 111 001
∗ 可変長符号
0 101 0 1111 0
可変長符号では, 出現頻度の高い記号に短い符号語を割り当てることにより, 総データ量を削減でき, 通
信やデータの保存のためによく用いられる
(解説) 可変長符号の復号とは
可変長符号「0 101 0 1111 0」→ 固定長符号「001 011 001 111 001」の変換
(どちらも同じ記号列「acaga」を表す)
9–7
可変長符号復号回路
入力: 1 ビット x
出力: 3 ビット (y1 , y2 , y3 )
動作
可変長符号は x に 1 ビットづつシリアルに入力され, 符号が認識される毎に (y1 , y2 , y3 ) に対
応する固定長符号の各ビットが 3 ビットパラレルに出力される. 固定長符号の出力が無い間は
(y1 , y2 , y3 ) = (0, 0, 0) が出力されるものとする.
動作例
時刻
入力
0
1
2
3
4
5
6
7
8
9
···
0
1
0
1
0
1
1
1
1
0
···
a
?
?
c
a
?
?
?
g
a
···
y1
y2
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
1
0
0
···
···
y3
1
0
0
1
1
0
0
0
1
1
···
x
(記号)
出力
状態遷移グラフ
記号
a
b
c
d
e
f
g
固定長符号
001
010
011
100
101
110
111
可変長符号
0
100
101
1100
1101
1110
1111
1/000
0/001
1/000
0/000
0/000
0/010, 1/011
練習問題の解答例
0/100, 1/101
0/110, 1/111
練習 9.1
J
1
0
1
1
0
K
CLK
0
↑
0
↑
1
↑
1
↑
1
↑
Q
1
1
0
1
0
練習 9.2
q1 q2
00
j 2 = x 2 q1
x1 x2
00 01 11 10
1
X
k2 = x 1 + x 2
x1 x2
00
01
11 10
q1 q2
00 X X X X
01 X X X X
01
11 X X X X
11 X X X X
10
10 X X X X
X
1
X
1
9–8
1/000