VMEバス
出典: フリー百科事典『ウィキペディア(Wikipedia)』
VMEバスは、コンピュータのバス規格のひとつであり、本来モトローラの68000シリーズマイクロプロセッサのために開発された。その後、多くのデバイスで使用され、IECにおいてANSI/IEEE 1014-1987 として標準化された。 物理的には Eurocard サイズの接続機構を採用しているが、信号接続は独自のものである。 1981年の最初に開発され、今日でも広く使われている。
[編集] 歴史
1979年、モトローラは 68000 CPU を開発していた。 技術者の一人 Jack Kister は 68000システム向けの標準化されたバスシステムを作り VERSAバスと呼んだ。 その後、John Black が加わり、仕様を改善して VERSAモジュール という製品コンセプトを作り上げた。 モトローラの欧州部門の Sven Rau と Max Loesel は機械的仕様を追加して、Eurocard 規格を活用するようにした。 その結果完成したのが最初の VERSAバス-E であり、後に VMEバス(VERSAmodule Eurocard bus)と改称された(ただし Versa Module Europaとする説もある)。
その後、多くの企業がこの規格を使用するようになり(Signetics、Philips、Thompson、Mostekなど)、すぐにIECにおいてANSI/IEEE 1014-1987 として標準化された。
当初の標準は 16ビットバスであった。既存の Eurocard のコネクタに収めるためである。 しかし、その後何回かの拡張を経て、現在の VME64 では 6Uカード の 64ビットバス規格と、3Uカードの 32ビットバス規格がある。その他にも、ホットスワッピング(プラグアンドプレイ)を規定した VME64x や、小さなカード(IP)をVMEバスカードに接続する機構、各種接続規格とVMEシステムとのリンクを実現する規格などがある。
VMEバスはまた、非常によく似たVXIバスの開発にも使われた。
[編集] 詳細
VMEバスは、68000の持つピンをそのままバックプレーンに出力したようなものである。 多くの場合、これは良い設計とは言えない。バスを使えるチップセットが限られてしまうからである(実際、ISAバスはインテルのチップでしか使えない)。 しかし、68000は 32ビットのフラットなメモリモデルを持つことが特徴であり、メモリセグメントのようなものとは無縁である。 その結果、VMEは 68000風の設計ではあるものの、68000の設計が汎用性が高いために広く使われるようになったのである。
68000と同じく VME はデータとアドレスそれぞれに分離した32ビットバスを持っている。 68000自身のアドレスバスは 24ビットで、データバスは 16ビットであるが(内部は32/32)、設計者は完全な 32ビット実装を見据えていた。 どちらのバス幅にも対応するため、VMEではふたつの Eurocard コネクタ P1 と P2 を使用する。 P1 には 32本のピンが 3列あり、24ビットのアドレスバスと 16ビットのデータバス、その他の制御信号などがこのコネクタを通る。 P2 にはもう一列のピンがあり、残りの アドレス 8ビット分と データ 16ビット分がセットされている。
バスを制御するため、9本のarbitration bus(調停バス)が使用される。 全ての通信はバスにセットされたarbiter module(調停モジュール)カードが制御する。 カードはバス上に要求を出すときは bus request in という調停バス内の線を low 状態にしてスロット番号を送る。 調停モジュールがバスを解放したときそれらの線を調べ low 状態になっているものがないかチェックする。 もし low 状態の線があれば bus busy線を low にしてバスがビジー状態になることを通知し、要求を出したカードのスロット番号を bus grant out線に出力する。
この時点で最初に要求を出したカードがバスの使用権を得る。データを書き込むには、アドレスとデータをバスに出力し、address strobe線 と二本の data strobe線を low にしてデータがレディ状態であることを示し、書き込み線を low にして処理を実行する。data strobe が二本あるのは、その組み合わせによってデータサイズを指定するため(8ビット、16ビット、32ビット、そしてVME64ではさらに 64ビット)である。指定されたアドレスを持つカードはデータを読み込み、data transfer acknowledge線を low にして完了を知らせる(あるいは必要ならbus error線)。 データの読み込みも基本的には同じだが、カードが最初にアドレスだけをバス上に出力し、READ ピンを引く。 他のカードはそのアドレスのデータをバス上に出力し、data strobe を引いてデータがレディであることを示す。 このような信号方式は非同期であり、PCIのようなバス全体のクロック同期が存在しない。
VMEには割り込みバスも存在し、68000の7種類の割り込みに対応している。 割り込みが発生すると、調停モジュールは割り込みレベルをアドレスに出力してどのレベルの割り込みを処理しようとしているかを知らせる。 注意しなければならないのは、このときにカード番号を知らせる方法がないことである。 というのは多くの場合複数のカードが割り込みレベルを共有しているからである(訳注:同じ種類の周辺デバイスカードが複数ある場合など)。 割り込みレベルの多さは68000の設計の行き過ぎであると指摘されることが多い。 しかもバスにそれを適用すると意味をなさない。
VMEでの転送はすべてDMAであり、各カードがマスターにもスレーブにもなる。 このあたりのコンセプトはバス規格によって様々である。 たとえば、ISAバスでは、既存の「チャネル」モデルを使っている。すなわちホストCPUが全ての通信を制御する方式である(チャネル・コントローラ参照)。 その点、VMEはコンセプトとしては非常に単純であるが、そのために各カード上に複雑なコントローラを必要とする。