バス (Bus) とは、複数の信号線をまとめたものである。 バスには複数の素子が接続されている。 しかも、複数の出力端子が一本の線に接続されている。 データの流れる方向も一方向ではなく、 時刻によって方向が逆になることが多い。 ここでは、どのようにしてバスを構成して、 どのように動作させているのかを説明する。
バスを構成するのに欠かせない素子として、 3状態バッファ (Tri-State Buffer) がある。 3状態バッファの出力端子は、 高レベル (H) と低レベル (L) の他に、 「ハイインピーダンス」という第三の状態を持つ。 これは、バッファ (X=Y, 入力と出力が同じ) の後ろにスイッチを接続し、 制御入力CによってスイッチをOn/Offすると考えることができる。 スイッチを切り離してしまえば、何もつながっていないことと同じになり、 この状態をハイインピーダンスと呼ぶ。
C | X | Y |
---|---|---|
H | − | ハイインピーダンス |
L | L | L |
L | H | H |
一般には複数の出力端子を接続してはならないが、 3状態バッファの出力同士ならば複数個を同じ線に接続しても良い。 どれか一個だけが値を出力しており、 それ以外は全てハイインピーダンスになっていれば、 信号の衝突は起こらない。 当然であるが、複数の制御入力を同時にアクティブにしてはならない。
3状態バッファが表に見える形で使われることは実際には少なく、 出力端子に内蔵されている場合が多い。 例えば、実験1-4で使用した データセレクタ (74LS153) やレジスタ (74LS173) はこれに該当する。 多くのメモリ素子もこれに該当する。 なお、制御入力端子Cの名前としては、 Output Enable, Output Control, Read Strobe, Strobe等いろいろある。
なお、上記の制御入力Cのように、 低レベル (L) の時にアクティブ (真, 1) になる信号は多い。 このような論理定義を負論理 (Negative Logic) と呼ぶ。
下図に単純なバスの例を示す。 CPUに1bitのメモリ (D-FF) が接続されている。 1bitのメモリしかないのでアドレスバスはなく、 データバスData、 読み出し制御線Read Strobe、 書き込み制御線Write Strobeのみとなっている。 データバスは入出力の両方向にデータが流れる。 制御線はCPUからの出力のみである。
下図にCPUがメモリからデータを読み出す際の動作と、 その際の波形を示す。 Read Strobeをアクティブ (低レベル) にすると、 メモリは格納しているデータをデータバスに出力する。 CPUはそのデータを読み取る。
下図に書き込み時の動作と波形を示す。 Output Enable (CPU内部のみ) アクティブ (低レベル) にして、 CPUから書き込むデータをバスに載せる。 Write Enableを低レベルから高レベルにした時点で、 メモリ (D-FF) にデータが書き込まれる。
下図に、LEDや7セグメントLEDを点灯させるための回路を示す。 メモリにおけるD-FFの出力にLEDを接続したような構成になっている。 メモリとの大きな違いに、D-FFの出力を読み取る回路が無いことがあげられる。 したがって、LEDの値を読み出そうとする操作を行っても、 LEDの値が得られる保証はない。
下図に、押しボタンスイッチSWの状態を読み取る回路を示す。
(作成: 2002年10月29日, 最終更新: 2010年10月20日)