PCアーキテクチャとバスシステム
琉球大学情報工学科 和田 知久
THE INDISPENSABLE PC H/W BOOK, 3rd edition, Hans-Peter Messmerの20 - 20.2.3, 24 - 24.1
- PCにおいて2つの重要な要素はマイクロプロセッサとメモリであるが、これだけでは完全なコンピュータにはならない。体にたとえれば、この2つは心と頭脳であるが、他の臓器も必要である。
- この他の臓器の数や機能はコンピュータアーキテクチャの実装に対応する。
- たとえば、ドライブやグラフィックスアダプタはアクセスされなければならず、それらより発行されるインタラプト(割り込み)はプロセッサーメモリシステムにより適切に処理されなければならない。
- IBMコンパチブルPCの成功は、拡張バススロットによるシステムのフレキシビリティが大きい。
- したがって、変化に富んだLAN、グラフィックス等のインストールが可能であった。
- 以下に、PCの種々のレベルのアーキテクチャとバスシステムについて述べる。
20 8ビット PC/XTアーキテクチャ
- PC/XTはIBMの最初のパーソナルコンピュータであり、性能的には単純なコンピュータゲームもできないほどのものであった。
- 8ビットアーキテクチャで、今からみれば相当に古いアーキテクチャであるが、PC/XT世代から
i486/Pentiumの世代まで、多数の構成部品が生き残っている。
- たとえば、8237A DMA(Direct Memory Access)チップとか8259A
PIC (Programable Interrupt Controller)である。
- そしてのそれらの論理構成は依然、最新のチップセットの動作を決定している。
- ここではPC/XTは全体を示す良き例として示す。
20.1 構成部品とそれらの働き
- 図20.1はPC/XTのブロックダイアグラムである。
- 読者の所有のPCマザーボード上に、図中に示されているチップは見つからないかも知れないが、同じPCである。
- 図中に示されているそれらのチップは第3者(サードパーティ)により生産されたり(型名が異なる)、複数のチップの機能が単一チップに集積されていたりする。
- しかしながら、機能的な組み合せすなわちアーキテクチャは変わっていない。
- したがって、ここでは基本的な構成を説明する。
- もちろん、中心の部品はプロセッサである。PCでは8088、XTでは8086というCPUが使われていた。短期間ではあったが、XT/286もマーケットに登場し、それは新しいより高性能な80286というCPUを使用していた。XT/286はすぐにさらにパワフルなATに置き換わった。
- 8086/88の他に、算術コプロセッサである8087が搭載可能であったし、少なくともマザーボード上にそれ対応のソケットが用意された。
- 8284というクロックジェネレータがシステムクロックを発生する。最初のPCでは、14318180Hzのクリスタル信号が使われた。8284は周波数を3で割り、4.77MHzのシステムクロックを発生する。
- より新しい、turbo-PC/XTでは高周波化され、システムクロックは8MHZと10MHzが可能であった。
- さらに、NEC CPUのV30、V20は8086/88を置き換えることができ、V30、V20は8086/88より高速で追加命令をサポートしていた。しかし、基本的にはIntel製CPUのダウンワード互換であった。
- 結局、互換性により追加命令は使用されなかった。
- また、他の重要なコンポーネントはメインメモリである。プロセッサとメインメモリはデータ/アドレス/コントロールバスで接続されている。
- CPUはアドレスバスを介してメモリにアドレスを与え、コントロールバスでデータ転送をコントロールし、データバスを介してデータを転送した。
- 8086/88からの命令に従って、8288バスコントローラはコントロール信号を発生した。
- データ交換をエラーなしに整った形でやるために、信号は種々のアドレス/データバッファ回路にてバッファされ、増幅される。
- PC/XTでは4つの異なるアドレスバスが存在する。
- ローカルアドレスバス:8086/88からの20本のアドレス信号を含むバス。外部のアドレスバッファとアドレスラッチにより、ローカルバスとシステムバスは分離される。
- システムアドレスバス:PC/XTのメインのアドレスバスであり、ローカルアドレスバスをラッチしたものである。ローカルアドレスバス上のアドレス信号がALE信号でラッチされる。PC/XTではこのシステムアドレスバスはバススロットへ入力される。
- メモリアドレスバス:このバスはマザーボード上だけのバスであり、システムアドレスバスをマルチプレクスしたものである。(行アドレスとカラムアドレスが同時ではなく、時間的に連続にDRAMチップへ与えられる。)
- X-アドレスバス:バッファとドライバーによりシステムバスから分離されたバスであり、マザーボード上のI/OユニットとROM-BIOSにアドレスを与える。たとえば、インタラプト(割り込み)コントローラ、タイマー、オンボードフロッピィコントローラーのレジスタである。拡張アダプタのI/Oポートと拡張BIOSはシステムアドレスバスによってアクセスされる。
- データバスにも4つの異なるバスが存在する。
- ローカルデータバス:8086・88からの16もしくは8ビット幅のデータ信号であり、バイトアクセスかワードアクセスかを区別するバスロジックが必要であった。外部のデータバッファとラッチにより、このローカルデータバスとシステムデータバスは分離される。PCではローカルデータバスは8ビットで、XTでは16ビットである。
- システムデータバス:PC/XTではローカルデータバスをラッチしたもので、PCでは8ビット、XTでは16ビット幅であった。システムデータバスの1バイト分がバススロットへ入ってゆく。
- メモリデータバス:このバスもマザーボード上のみのバスで、メインメモリとシステムデータバスを繋ぐものである。PCでは8ビット、XTでは16ビット幅である。
- X−データバス:バッファとドライバによってシステムバスから分離されたバスであり、I/O
unitやマザーボード上のROM-BIOSをアクセスする。拡張アダプタのI/Oポートや拡張BIOSはシステムデータバスでアクセスされる。
- 8086と8088の違いはデータバス幅であり、8086は16ビットデータバス、8088は8ビットのみである。したがって、PCではメインメモリへのアクセスのためのマザーボード上のデータバスは8ビット幅のみで、XTでは16ビット幅であった。
- マザーボード上のメインメモリ以外に、CPUはバススロット上のアダプタカード上のチップにアクセスする。
- バススロットの構成と機能のもっと詳しい説明を以下に述べる。ここで重要なのはシステムバスのすべての重要信号はバススロットに入ってゆくことである。たとえば、アドレス、データ、コントロール信号などで、PCシステムにアダプタカードを組み込むのに必要な信号すべてである。
- XTでは8ビットデータのみがバススロットに入っていったことも重要である。8086の16ビットバスを介する16ビットデータのアクセス時に、8ビット/16ビットコンバータは1つの16ビットを8ビット2つに分解し、そしてまた8ビット値2つを16ビット値へ結合する。
- XTマザーボードではこの作業は不要であった。メモリアクセスは常に最大ビット幅の16ビット幅で実行された。XTでは、もちろん、この方式はオンボードメモリとバススロット上のアダプタカード上のメモリアクセスに対して、種々多様な結果をもたらした。
- アダプタカード上のメモリへのアクセスは8ビット幅に限定されていたので、毎回少ないデータが転送された。したがって、データ転送レイトは小さい。
- 16ビットデータを転送しようとする場合、この16ビット値は8ビット値に分解されそしてまた結合されなければならない。この変換には時間が必要であり、メモリ拡張カードへのアクセスはオンボードメモリに比べて非常に大きくなる。
- この遅延の増加は特に、turbo-XTマシンで顕著である。初期のPCは4.77MHzのクロックで動作し、このクロック速度ではバススロットや挿入されたアダプタカードには問題はなかった。
- 大抵の場合、遅いバススロットはturbo-XTのクロックスピードの半分の5MHzで動作していた。したがって、アダプタカード上のメモリアクセスは2つの理由で低速であった。1つは、8/16ビットの変換に1クロックサイクルを必要とした。もうひとつは、バスの周波数が2分の1で転送速度が低下した。
- この速度低下はもっと高速な i386 や i486
ではさらに顕著であり、これらの高速PCでもバススロットのクロック速度は8MHzであった。50MHzマシンをいばる持ち主にとってはショックなことである。
- PCの中には、通常のバススロットの以外に、もっと高速に動作するメモリ用スロットにメモリアダプタを挿入するものもあった。
- メモリアクセス時のプロセッサアドレスをデコードするために、PC/XTはアドレスマルチプレクサを持つ。
- メモリバッファと共に、マザーボード上のメモリチップをドライブする。
- データの読み出し時のパリティチェックがFAILすると、メモリパリティチェックロジックはNMI(Non
Maskable Interrupts)を発行する。
- パリティチェックはバイト単位で行われる。すなわち、独立してアクセス可能なメインメモリのバイトごとにパリティビットが付加される。ということで、メモリを増設する時には実際に必要なメモリチップ以外に、8チップごとに1チップの追加が必要となる。
- この9番目のチップは対応するパリティビット用である。一般にメモリは複数のバンクに分割され、すべてのバンクにデバイスが必要である。1つのバンクに対応するチップの数はデータ入出力するチップのデータピンの数に依存する。
- 古い64Kbitとか256KbitのDRAMは通常1つのデータピンだけを持っており、PCのように8ビット構成のメモリを構成するには、1バンクには8個のメモリチップと2つのパリティチップが必要である。
- PC/XTにはROMがあり、ブートアッププロセス時に必要なコード(プログラム)とデータ、そしてPCのBIOSルーチンが記憶されている。8086/88ではROM中のBIOSはメインメモリと同じようにアクセスされる。
- メインメモリ、ROMまたはI/Oアドレスデバイスへのアクセス中に
wait state logic により wait cycle が発生する。
- CPUと周辺デバイスのサポートのために、8259A
Programable Interrupt Controller (PIC)がPC/XTでは使用され、ハードディスクコントローラやタイマーのような周辺デバイスからの外部インタラプトを取り扱う。
- 8259Aは任意のチップに接続される8コの入力チャネルを持ち、各々のチャネルにそれらのチップはインタラプトリクエストを発生できる。
- PCではこれらのチャネルをIRQ0-IRQ7と呼ぶ。テーブル20.1はインタラプトチャネルのIRQXを示す。8259Aの詳しい働きとプログラム方法は26章にて説明する。
- 他のサポートチップとして 8253 Programable
Interval Timer (PIC, Timer Chip)があり、テーブル20.2に示す3つの独立のプログラマブルカウンタを内蔵している。
- Counter0はPC/XT内部の内部システム時計の更新に使用され、PICのIRQ0に接続される。これで、ハードウエアインタラプトが発行されて、内部時計が更新される。
- この時計はDOSコマンドのTIME、DATEで読み書きすることができる。
- Counter1はDMAチップと共に、メモリのリフレッシュを実行する。
- Counter2はスピーカ用の音の周波数を発生する。
- 27章にてPIT8253とスピーカの動作モードやプログラムを説明する。
- キーボードは 8255 Programable Peripheral Interface
(PPI)によって、PC/XTシステムに接続される。また、同一チップ
8255 を介して、DIPスイッチにセットされたシステムコンフィギュレーションをBIOSがチェックする。
- しかし、より新しい Turbo-XT では AT
と同様に、すべての必要なコンフィグデータを持つ
real-time clock と CMOS があり、DIPスイッチは不必要となった。
- PC/XTでは8255を介してキーボードがアクセスされる。スピーカおよびカセットドライブをドライブするカセットロジックも8255を介して接続される。8255を用いてスピーカのenable/disableが行われる。
- PC全体には-12V, -5V, 0V, +5V, +12Vの電圧が供給されている。バススロットのアダプタカードは通常対応するバススロットのコンタクトによりパワーが与えられる。
- いままで述べたコンポーネントはI/Oアドレススペースのポートによりアクセスされる。PC/XTはしたがって、I/O
mapped input/output (I/O)
を用いている。テーブル20.3に重要なポートアドレスを示す。
- バススロットに挿入されたアダプタカード上のハードウエアコンポーネント(物理的な部品)のレジスタもポートアドレスにてアクセスされる。(例としてはシリアルインターフェィスアダプタのUARTやグラフィックアダプタの6845)
- PC/XTはアダプタ上のメモリアクセスと同様に、I/Oアドレススペースへのすべてのアクセスをバススロットへのアクセスに渡す。
- メモリスペースやI/Oスペースに限らず、任意のアドレスは1つのコンポーネント(部品)にのみアサインされる。
- たとえばCOM1やCOM2のUARTレジスタに同一のI/Oアドレスを割り当てるならば、CPUの命令に対して2つのUARTがほぼ同時にレスポンスするので、お互いに干渉を起こす。したがって、インターフェースはうまく動作しない。
20.2 DMA(Direct Memory Access)アーキテクチャ
- 残りの部分を説明するために、PC/XTのDMAアーキテクチャを説明する。詳しくは28章に説明する。
- プロセッサの他にも、メモリやI/Oへアクセスできるチップがある。それが
8237A DMA チップである。
- このチップはフロッピィコントローラのようなI/Oユニットとメインメモリ間の高速なデータ転送を可能とする。
- 8086/88とは異なり、8237Aは4つの独立なプログラマブルな転送チャネルを持つ。(図20.4)
- チャネル0はメモリリフレッシュに割り当てられ、メモリへのダミーアクセスをするために
8253A PIT により周期的に活性化されれ、メモリチップはリフレッシュされる。
- 他の3つのチャネルはデータ転送用に利用できる。たとえば、ハードディスクコントローラがディスクの1セクタをREADし、8237Aのチャネル3を活性化する。そして、CPUの動作を妨げることなしに8237Aにデータ転送はまかされる。
- 8086/88 CPUと同様に、8237Aは別の独立したバスサイクルを実行する。これは、低機能のバスマスタである。28章にDMAチップの機能、プログラミング、転送プロトコルを説明する。
- CPUとDMAチップはマザーボード上に置かれる。PC/XTはバススロット上のアダプタカード上に置かれるような外部バスマスタをサポートしない。
- もし、ネットワークアダプタ上のプロセッサがメインメモリを独立にアクセスでき、マザーボード上のCPUとのかかわりなしに、メインメモリ上のデータをネットワークに出したり、ネットワークからメインメモリへデータ転送ができれば有効であろう。
- しかし、PC/XT(ATでも)アダプタはハードウエアインタラプトを発行して、CPUへ必要なデータ転送を指示する必要がある。そして、CPUがこの転送を実行する。
20.2.1 8ビットチャネル
- テーブル20.4からも明らかなように、8237Aは主としてバススロット上のI/Oデバイスとメインメモリ間のデータ転送を行う。
- PC/XTスロットは8ビット構成であるので、8ビットデータ転送が行われる。PC/XTは8ビットのみのDMAチャネルを持つ。
- 8088プロセッサでは、PCは8ビットのデータバスと20ビットのアドレスバスを持つ。したがって、4ビットのDMAページレジスタがそのようなPCでは必要とされる。(テーブル20.5にI/Oアドレスを示す。)
- 8237Aの8ビットアドレスとDMAアドレスラッチの8ビットと4ビットのページレジスタでPC/XTの20ビットのアドレススペースが作られる。
- 8ビットのチップとして8237Aは8088用に設計された。8ビットデータバスでは8ビットのDMAチャネルのみが可能である。メモリからの読み出し転送期間に、8237Aはメモリアドレスを出力し
/MEMR 信号を発生し、メモリより8ビットデータバスへデータバイトを読み出す。その後、8237Aは
/IOW
信号を活性化し、周辺機器はそのデータバイトを受け取る。
- メモリへの書き込み転送はそのまったくの逆で、8237Aはメモリアドレスを出力し
/IOR 信号を活性化する。周辺機器のI/Oレジスタよりデータバイト8ビットデータバスへを読み出す。その後、8237Aは
/MEMW 信号を活性化し、メモリにデータバイトを読み込ませる。
- PC/XTではチャネル0と1は同じ物理ページレジスタにアサインされており、2つの異なるI/Oアドレス
87h, 83h を通して同一の物理ページレジスタにアクセスする。ATマシンではチャネル4に対するページ(カスケーディングにのみ使用される)はメモリリフレッシュに対する。ページアドレスを保持する。
- XTでは、状況はもっと複雑である。8086が使用されているので、XTは内部データバスは16ビット幅である。
- PCではDMAチップは8ビットの周辺機器に対して8ビットチャネルとして作られているので、XTバススロットに対しても8ビットデバイスのみがインストールできる。どっちにしても、データバスの8ビット分しかスロットにつながっていないが。
- 8086は16ビットバス構成であり、メモリは16ビット構成となっている。すなわち、下位のデータバスバイトD0-D7は偶数番地であり、D8-D15の上位は奇数番地となる。
- もし、8237Aが読み出し転送時に、連続してソースアドレスをカウントUP/DOWNするならば、偶数アドレスに対してはデータはD0−D7バス上に、奇数番地の時D8-D15バス上へデータバイトが出てくる。
- したがって、周辺機器が奇数アドレス番地のデータを取ることができるように、データをD0-D7へ転送する付加的なロジック回路が必要である。
- 同時に、奇数アドレスに対してメモリはD0−D7を駆動せず、データを出力する。
(略)
20.2.2 メモリリフレッシュ
- チャネル0はメモリリフレッシュ専用に割り当てられている。リフレッシュ用に8253/8254
PIT のカウンタ1はカウント値18(12h)のモード3(square
wave generator)で動作する。下位のカウンタバイトのみがロード(RW1=0,
RW0=1)され、PIT(Programable Interval Timer)は1.19318MHz/18=66288Hzのsquare
waveを発生する。
- これに対応して、カウンタ1はDREQをダミーメモリ転送のために、15μsごとに発行する。これにより、DRAM(メインメモリ)をリフレッシュする。
- このリフレッシュのために、8237A(DMAチップ)のチャネル0は読み出し転送のシングルトランスファーモードにプログラムされる。
- ダミーサイクルの期間に、DMAチップはメモリよりデータを読み出し、データをデータバスに載せる。ここで、メモリチップ内のアドレスバッファ、アドレスデコーダ、センスアンプが動作し、メモリアレイ内のある行のメモリセルが自動的にリフレッシュされる。
- しかし、その読み出しデータは周辺デバイスにより、読み込まれない。したがって、バス上のデータは次サイクルに上書きされ、消える。
- PITは周期的なsquare-wave signalにより、リフレッシュを行う。
- DMAチップはメモリ読み出し動作のためのリフレッシュアドレス、コントロール信号の発生に使用される。
- BIOSのスタートアップルーチンはカウンタのレジスタに適切な値を設定し、チャネル0をシングルトランスファーモード、オートイニシャライズにセットする。したがって、PITのチャネル1を介しての、すべてのリクエストはシングルトランスファーモードであり、リフレッシュアドレスを+1し、カウントレジスタを-1する。
- カウントレジスタが ffffh
に到達したならば、TC(?)が発生し、DMAコントローラのチャネル0が初期化され、リフレッシュプロセスが最初から繰り返される。
20.2.3 メモリ間転送
- 各チャネルのそれぞれにはページレジスタが設けられている。IBMはPC/XTに対して、チャネル0とチャネル1に対して、共通のページレジスタを設けた。したがって、メモリからメモリへの転送は64Kバイトの大きさの1つのDMAページ内部に限定される。
- これは、チャネル0とチャネル1とが、このメモリ間転送を実行し、PC/XTでは1つのレジスタをシェアしているからである。
- またチャネル0はメモリリフレッシュにも使用されている。したがって、64Kバイトページ中のメモリ-メモリ間データ転送をする時に、リフレッシュを禁止する必要がある。
- そして、転送終了後にリフレッシュを再び行うために、チャネル0を再プログラムする必要がある。
- また、リフレッシュの中断は短時間(1ms以下)しかできない、さもないとDRAMはデータを消失してしまう。
24 32ビットとそれ以上 −PCIローカルバス−
- PCオーナーにとって、EISAやマイクロチャネルのようなPC用のハイエンドソルーションでも、50MHZのi486とともに低速の8MHZとか10MHZのバススピードとは落胆する。
- このスピードはWindowsのような画像を主体とするOSに対するスクリーンの再描画には遅すぎるスピードである。512*384というハイレゾモニターの1/4の大きさのウインドウでさえ、192Kもの画素から構成されており、256色カラー(8ビット/ピクセル)ならば、まず最初にスクリーンをセーブし、そして再描画する必要があり、384Kbyteのデータ転送に対応する。
- スクリーンメモリはグラフィックアダプタ上のグラフィックコントロールチップが読み出し動作を行っていない時のみ、書き込むことができる。通常これは水平回帰、垂直回帰時のみで、384Kbyteは比較的短い時間に転送されなくてはならない。
- VGAカードでは、水平回帰時間を含む1行のスキャン時間は約25usで、水平回帰自体は4usであり、回帰時間は約1/7である。16ビットISAシステムでは、384Kバイトの転送は現実的には1/3秒必要であり、ユーザにとって十分気になる遅さである。ここで、メモリのリフレッシュ時間は含まれていない。
- この問題への解は、TIGAや8514/A等のグラフィックプロセッサを含むグラフィックアダプタにより提供される。
- 別の解は(特にバスのクロックスピードに比べて、非常に高速なCPUの場合)、グラフィックシステムバスをCPUバスと同じスピードで動かすことである。ローカルバスである。最初のマザーボード上のローカルバスはディスプレイメモリへの高速インターフェースであり、拡張バスに比べて非常に高速であった。
- ただし、ローカルバスは標準化なしであり、マザーボードごとに異なるものであった。この非コンパチを修正するために、インテルはPCI(Peripheral
Component Interconnect)を、VESAコミッティはVL busを開発した。
(略)
- 現在ではPCIは高性能PCやワークステーションの上級ソルーションであり。32ビットバスで最大133Mbyte/sの転送を行う。
24.1 PCIバスの構成
- PCIに重要な特徴はプロセッサの主記憶と通常拡張バスとの分離である。図24.1に構成図を示す。
- PCIブリッジはプロセッサの主記憶サブシステムとPCIバスのコネクションをする。ユーザにとっては、ブリッジは見えない。PCI
agentsとも呼ばれるすべてのPCI unitはPCIバスに接続される。例をあがれば、SCSIホストアダプタ、LANアダプタ、I/Oユニット、グラフィックアダプタである。
- VLバスとは対照的に、これらのユニットはマザーボード上に集積されるべきであるが、ほとんどはアダプタとして構成される。マザーボード上に最大3つのスロットがあり、たとえば、そのうちの2つをオーディオ、モーションVideoに使うことができる。
- 動画再生は複雑な計算が必要であり、PCI
unitの構成が大きく、マザーボード上に集積することは難しい。PCIの用途としてはAudioやVido等のマルチメディアが主である。
- 拡張バスに対するインターフェースは3番目めのPCI
unitである。ということで、ISA, EISA,
microchannel等の他のバスシステムもPCI unitとして考えることができる。原理的にはすべてのバスシステムは使用可能であり、PCIバスからの接続ができる。また、PCIに10個までのPCI
unitを接続できる。図24.1はPCIブリッジのレイアウトを示す。