論理回路 1 レジスタとカウンタ

2015 年 7 月 10 日
小野寺秀俊
論理回路
1
1.1
レジスタとカウンタ
レジスタ
フリップフロップをならべ、同じ同期信号でデータの記憶/読み出しができるようにした
もの。フリップフロップに非同期セット/リセット入力端子がある場合、その使用には十分
注意すること。通常の同期式システムにおいては、電源投入時に (クロックが加わらない状
態で) フリップフロップをリセットする時にのみ使うのがよい。クロックが動き出した状
態では、非同期セット/リセットは使わない。
1.2
シフトレジスタ
シフトレジスタ (shift register): 保存データのシフト操作 (桁移動) が行えるレジスタ。
(論理) 左シフト ((logical) shift left): 左側 (MSB 側) へのシフト操作。LSB 側よりシフト
イン (shift in) データが入力され、MSB 側よりシフトアウト (shift out) データが出力
される。
(論理) 右シフト ((logical) shift right): 右側 (LSB 側) へのシフト操作。MSB 側よりシフト
イン データが入力され、LSB 側よりシフトアウト データが出力される。
1.3
カウンタ
入力されたパルスにより、予め規定された状態を遷移していくレジスタをカウンタと言
う。規定された状態が 2 進数列であるものを 2 進カウンタ (binay counter) もしくは 2 進計
数回路と言う。カウンタには、全てのフリップフロップが同じ同期信号 (クロック) で動作
する同期式カウンタと、それ以外の非同期式カウンタに分類できる。非同期式カウンタの
例として、2 進リップルカウンタ (binary ripple counter) がある。リップルカウンタはハー
ドウェアが簡単であるが、非同期回路であるため、信頼性に欠ける。そのため、現代の論
理回路では、同期式カウンタが主に使われる。以下の説明は、全て同期式カウンタについ
て行う。
1
1.3.1
同期式 2 進カウンタ
JK フリップフロップを用いた、4 ビット同期式 2 進カウンタの設計例
JQ0 = KQ0 = 1
JQ1 = KQ1 = Q0
JQ2 = KQ2 = Q0 Q1
JQ3 = KQ3 = Q0 Q1 Q2
Q3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
現在の状態
Q2 Q1 Q0
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
Q3
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
次の状態
Q2 Q1 Q0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
0
0
0
JQ3
0
0
0
0
0
0
0
1
*
*
*
*
*
*
*
*
2
各フリップフロップの入力
KQ3 JQ2 KQ2 JQ1 KQ1 JQ0
*
0
*
0
*
1
*
0
*
1
*
*
*
0
*
*
0
1
*
1
*
*
1
*
*
*
0
0
*
1
*
*
0
1
*
*
*
*
0
*
0
1
*
*
1
*
1
*
0
0
*
0
*
1
0
0
*
1
*
*
0
0
*
*
0
1
0
1
*
*
1
*
0
*
0
0
*
1
0
*
0
1
*
*
0
*
0
*
0
1
1
*
1
*
1
*
KQ0
*
1
*
1
*
1
*
1
*
1
*
1
*
1
*
1
1.3.2
n 進カウンタ (modulo-n counter)
0 から n-1 までカウントし、次は 0 に戻るカウンタ。
例 7 進カウンタを JK フリップフロップで設計
現在の状態
次の状態
各フリップフロップの入力
Q2 Q1 Q0 Q2 Q1 Q0 JQ2 KQ2 JQ1 KQ1 JQ0 KQ0
0
0
0
0
0
1
0
*
0
*
1
*
0
0
1
0
1
0
0
*
1
*
*
1
0
1
0
0
1
1
0
*
*
0
1
*
0
1
1
1
0
0
1
*
*
1
*
1
1
0
0
1
0
1
*
0
0
*
1
*
1
0
1
1
1
0
*
0
1
*
*
1
1
1
0
0
0
0
*
1
*
1
0
*
(Q2 , Q1 , Q0 ) = (1, 1, 1) という状態は生じないので、フリップフロップの励起関数を求め
る際にはドントケアとして利用する。
JQ2 = Q1 Q0
JQ1 = Q0
JQ0 = Q2 + Q1
KQ2 = Q1
KQ1 = Q2 + Q0
KQ0 = 1
3
D0
D
Q
Q0
Load
Clock
>CK
Clock
CK inputs
(clock inputs of FFs)
R
Clear
D1
D
Q1
Q
Clock
>CK
R
D2
D
Load
Q2
Q
>CK
CK inputs
R
D3
D
Q3
Q
>CK
R
Load
4-Bit Register
D
D0
Q
Q0
Q
Q1
Q
Q2
Q
Q3
>CK
D
D1
>CK
4-Bit Register with Parallel Load
D
D2
>CK
D
D3
>CK
Clock
4-Bit Shift Register
Serial
input SI
D
>CK
Clock
Q
D
>CK
Q
D
>CK
Q
D
>CK
Q
Serial
output SO
Shift
Load
Serial
input
D0
D
Q
Q0
Q
Q1
>CK
D
D1
J
>CK
1
D
D2
Q
D
J
Q2
Q
>CK
Q
Q3
>CK
K
Q
J
Q
>CK
K
Clock
Q0
K
>CK
D3
Q
>CK
Q1
Q2
Q
Clock
Shift Register with Parallel Load
1
J
Q
Q0
>CK
Clock
1
J
Q
Q1
1
>CK
K R
Synchronous Modulo-7 Counter
J
Q
Q2
>CK
K R
1
J
Q
Q3
>CK
K R
K R
Clear
4-Bit Ripple Counter
1
J
>CK
K
Q
Q0
J
>CK
K
Q
Q1
J
>CK
K
Clock
4-Bit Synchronous Binary Counter
Q
Q2
J
>CK
K
Q
Q3
2
ハザード (hazard)
実際の論理ゲートでは、入力が変化してから出力が変化するまでに有限の時間が必要で
ある。この時間遅れのことを遅延 (delay) という。また、ゲートを接続する配線を信号が伝
搬するのにも時間がかかる。このような遅延は、ゲートの種類やファンアウトの数、配線
の長さや形状などにより変化する。また、電源電圧や温度、製造時のばらつきによっても
変化する。ゲートや配線に遅延が存在することにより、組合わせ回路の入力に信号を加え
てから、出力の値が定常状態に落ち着くまでには時間がかかる。入力から出力に至る経路
の中で、最大の遅延時間を持つものをクリティカルパス (critical path) と呼ぶ。
また、組合わせ回路の入力を同時に変化させた場合、遅延を考慮しない場合には、各論
理ゲートの出力値は、0 のまま、1 のまま、0 から 1 に変化、1 から 0 に変化、のいずれか
である。しかしながら、実際には遅延が存在するため、出力が定常値となるまでに、不要
な遷移を行なう場合がある。このような不要な遷移をハザード (hazard) もしくはグリッチ
(glitch) と呼ぶ。ハザードは、入力が変化する前後の定常値の組合わせにより、静的ハザー
ド (static hazard) と動的ハザード (dynamic hazard) に分類される。更に、静的ハザードは
1 ハザード (定常値が 1) と 0 ハザード (定常値が 0) に分けられる。
ハザード
静的ハザード
動的ハザード
動的ハザード
定常値
前 後
0 0
1 1
0 1
1 0
不要遷移の種類
0
1
0
1
→
→
→
→
1
0
1
0
→
→
→
→
0
1
0
1
(0 ハザード)
(1 ハザード)
→1
→0
単一入力変化の場合には、AND-OR 二段組合わせ回路では 1 ハザードのみが存在し、0
ハザードや動的ハザードは生じない。OR-AND 二段組合わせ回路では、0 ハザードのみが
存在し、1 ハザードや動的ハザードは生じない。
AND-OR あるいは OR-AND 二段回路の場合、単一入力変化で生じるハザードはすべて
除去できる。AND-OR 二段回路において、隣接する二つの最小項の間の遷移で 1 ハザード
が生じる場合には、それらの最小項を同時に被覆する積項を追加すれば、そのハザードを
除去できる。OR-AND 二段回路においても同様の操作で 0 ハザードを除去できる。
4
S
X
0
00
XY 01 1
11 1
10
S
Y
1
S
X
1
0
00
XY 01 1
11 1
10
S
Y
1
1
1
S
X
0
1
S
00
XY 01
11 1
10 1
1
1
Y
0
5
1
1
1