順序回路の設計 (2)

c 関西学院大学 石浦 菜岐佐)
「論理回路」ノート (2014 年度, http://ist.ksc.kwansei.ac.jp/∼ishiura/lc/
9
順序回路の設計 (2)
♣ SR, T,
JK
フリップフロップを用いた同期式順序回路の設計
♣ 色々な順序回路 (状態遷移グラフ) の設計
9.1
9.1.1
種々のフリップフロップ
トリガ信号の種類
フリップフロップのトリガ (
(1) 立上り (クロックの
(2) 立下り (クロックの
クロック
0→1
1→0
変化) (
変化) (
信号) には 4 タイプある
positive
negative
edge)
edge)
1
立上り で D の値が読み込まれ, 立下り
( master-slave 型と呼ばれる)
(3) 信号値
Æ D
CLK
Q
(4) 信号値
9.1.2
で その値が Q に出される.
0
… 信号値 1 の逆
フリップフロップの種類
D フリップフロップを含めて 4 タイプのフリップフロップがある
それぞれにトリガが 4 種類があるので, 理論上は計 4 × 4 = 16 通りのフリップフロップがある
動作表
☆ Q は現在の出力, Q はクロック信号が入った後の出力
(a) D フリップフロップ
D
0
1
Q
0
1
(b) SR フリップフロップ
入力として S, R を持つ
☆ S は
set
,Rは
reset
と覚える
9–1
S
R
0
0
0
1
1
0
1
1
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
K
CLK
Q
Æ 9–2
9.2
SR, T, JK フリップフロップによる設計
☆ 異なるのは, フリップフロップの入力関数だけ
(1) 状態遷移表の作成
(2) 状態最小化
(3) 状態割当て (入出力, 状態の符号化)
(4) 状態遷移関数, 出力関数を求める
(5) フリップフロップの入力関数を求める
(6) 組合せ回路の設計
9.2.1
準備: フリップフロップの入力要求表の作成
入力要求表
フリップフロップ現在の出力値 Q を, 次時刻で Q にしたい時に, どのような
入力の組合せ
を入れれば良いかを表にしたもの
1) D-フリップフロップ
機能表
D
Q
0
0
1
1
入力要求表
Q
Q
0
0
0
1
1
1
0
1
D
0 · · · (※ 1)
1
0
1
(※ 1) の解説
∗ フリップフロップの現在の出力 (Q) が 0 のとき, 次の時刻の出力 (Q ) を 0 にしたければ, D に 0
を入力すればよい.
2) SR-フリップフロップ
機能表
S
R
Q
Q
0
0
0
1
Q
0
0
0
入力要求表
Q
S R
0
0 X 1 0
1
1
1
0
1
1
−
1
0
0 1
1
1
X 0
· · · (禁止)
· · · (※ 2)
(※ 2) の解説
∗ SR フリップフロップの現在の出力 (Q) が 0 のとき, 次の時刻の出力 (Q ) を 0 にするには,
(S, R) = (0, 1) としてもよいが, (S, R) =
(0, 0)
としてもよい. この 2 パタンをまとめると
(S, R) = (0, X) と書ける. (X はドントケアで, 0 でも 1 でもよいから.)
3) T-フリップフロップ
機能表
入力要求表
T
Q
Q
Q
T
0
Q
0
0
0
1
Q
0
1
1
0
1
1
1
1
0
9–3
4) JK-フリップフロップ
機能表
9.2.2
入力要求表
Q
Q
Q
0
0
1
0
0
1
0
1
1
Q
1
0
1
1
J
K
Q
0
0
0
1
1
J
K
0
1
X
X
X
X
1
0
···
···
···
···
0
1
0
1
1
0
1
0
0
1
1
0
(オフ) と
(オン) と
(オフ) と
(オン) と
0
1
1
0
(維持)
(反転)
(反転)
(維持)
フリップフロップの入力関数の求め方 (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
z1 z2 (出力)
x1 x2 = 0 0
x1 x2 = 0 1
x1 x2 = 1 0
00
01
x1 x2 = 0 1
0 1 3
10
x1 x2 = 1 0
00
01
10
00
00
00
00
00
00
10
10
10
00
00
00
10
11
⇓
JK フリップフロップ
J
0
0
1
1
機能表
K Q
0
Q
0
1
1
0
1
Q
Q
0
0
1
1
入力要求表
Q
J
0
0
1
1
X
0
X
1
K
X
X
1
0
4 フリップフロップの入力関数, 出力関数
j1 k1 j2 k2
(JK-FF の入力)
q1 q2
x1 x2 = 00
00
0 X 0 X
x1 x2 = 01
0 X 1 X 3
01
0 X X 0
1 X X
1
10 X 0 0 X
3 の部分の解説
X 1 0
X
z1 z2 (出力)
x1 x2 = 10
1X0X
0XX1
X10X
q1 q2
q1 q2
現状態 0 0 を次状態で 0 1 に変えたい.
9–4
x1 x2 = 00
x1 x2 = 01
x1 x2 = 10
00
00
00
00
00
10
00
10
11
q1
q1
0 → 0 とするためには, フリップフロップの「入力要求表」より,
j1 k1
0 X とすればよい.
j2 k2
q2
q2
同様に 0 → 1 とするためには, 1 X とすればよい.
この後は D フリップフロップの場合と同様, カルノー図により j1 , k1 , j2 , k2 および z1 , z2 の関数を最
小化し, 回路を設計する.
x1 + x2
x1 x2
q1 q2 00 01 11 10
00 X X X X
k1 =
j1 = x1 q2 + x2 q2
x1 x2
00
01
11 10
q1 q2
00
X 1
1
01
01 X X X X
X
11 X X X X
11 X X X X
10 X X X X
1 X 1
10
練習 9.2
同様にして, j2 と k2 の関数を求め, 最小化せよ.
j2 =
x2q1
x1 + x2
x1 x2
q1 q2 00 01 11 10
00 X X X X
k2 =
x1 x2
q1 q2 00 01 11 10
1 X
00
01
11 X X X X
11 X X X X
10
10 X X X X
X
出力関数 z1 , z2 は D フリップフロップの場合と全く同じである.
z1 = q2 x1 + q1 x2 + q1 x1
x1 x2
00
01
11 10
q1 q2
00
X
01
X
1
11 X X X X
10
1 X 1
01 X X X X
1
X
1
z2 = q1 x1
x1 x2
00
01
11 10
q1 q2
00
X
01
X
11 X X X X
10
X
9–5
1
JK-FF を用いて設計した回路
(参考) D-FF を用いて設計した回路
x1
x1
z1
x2
z1
x2
z2
z2
j2
d2
k1
j1
d1
q1
Q
J
Q K
q2
Q
q1
J
Q D
Q
Q K
q2
clock
Q D
Q
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
001
0
b
c
010
011
100
101
d
e
100
101
1100
1101
f
g
110
111
1110
1111
【解説】
可変長符号とは
記号の集合 (上の例では {a, b, c, d, e, f, g}) の 2 進符号化を行う際, 符号長が全て等しい符号を
「
固定長
符号」, 記号毎に符号長が異る符号を「可変長符号」と呼ぶ. 例えば上の例で,
「acaga」という記号列を表の固定長符号で符号化すると, 「001 011 001 111 001」となるのに対
し, 可変長符号で符号化すると, 「0 101 0 1111 0」が得られる. 可変長符号は, 出現
高い記号に
短い
頻度
の
符号語を割り当てることによって総データ量を削減するもので, データの通
信や保存の際に良く用いられる.
可変長符号の復号とは
可変長符号「0 101 0 1111 0」が与えられたときに, ここから同じ記号列「acaga」を表す固定長符
号「001 011 001 111 001」を求める処理.
可変長符号復号回路
入力: 1 ビット x
出力: 3 ビット (y1 , y2 , y3 )
動作
9–7
可変長符号は 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
1/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
j2 = x2 q1
x1 x2
00 01 11 10
1
X
k2 = x1 + x2
x1 x2
q1 q2 00 01 11 10
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
Nagisa ISHIURA
9–8