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
© Copyright 2024 ExpyDoc