沼津高専 電子制御工学科
VMEバス調査報告書
MIRS9902-TECH-0008
改訂記録
版数 作成日 作成者 承認 改訂内容 提出先
A01 H12/1/18
河野丈志
河野丈志 初版

VMEbusについて

VMEbusは96PINのDINコネクタを用いる。またVMEbus準拠のサイズにはシングルハイト(100mm×160mm)とダブルハイト(100mm×233.35mm)とあります。VSBC-1はシングルハイトに属します。
次に簡単な特徴を示します。

(1)データバスによって送れるデータのサイズには8,16,32ビットの3つのサイズがあり、バスマスタ(アドレスやコントロールラインを制御する機能を持ったモジュール)側からデータ転送時に指定できる。

(2)アドレスバスのサイズも16,24,32ビットとあり、データ転送時にバスマスタ側からスレーブ側へ現在使用中のサイズを通知することが出来る。

(3)データは非同期インターロック方式で行われる。

(4)バス上に最大20(1つのラックの最大数)までマスタが存在してもよい。

またラックの中でボードのコレクタが刺さる部分をバックプレーンといい、VMEの使用では1つのスロットを占用するプリント基板のことをボード(カード)といい、ボード上の1つの機能を持った回路のことをモジュールといいます。

VMEbusは次の4つの種類のバスとして分けられます。
1.データ転送バス
2.優先割込み
3.DTBアービトレーション
4.ユーティリティ

4.のピンの働きを簡単に示します。 SYSCLK:16MHzのクロック信号でスレーブボード側でDTACKバー、BERRバー信号を作成するためのタイムベースクロックとして使ったりする。

SYSRESETバー:スレーブボード上でリセットする場合に用いる。

SYSFAILEバー:スレーブボード側では入力とも出力としても使える。出力として使うときは自分のボード上に障害が発生した場合に出力します。

ACFAILEバー:バッテリボード付きのメモリボードなどで使用できますがACの入力の異常を検出する機能を持つモジュールが存在しなければ意味がありません。

これらの信号線はスレーブ側の必要に応じて使用します。


次にVWEbusを理解するのに必要な3つのことを説明します。

[1.データ転送]
データバスとデータ転送コントロールライン アドレス・バス幅(32,24,16ビット)の指定にはAMコードを用いる。
AMコードは主にアクセスモードの区別を目的とした利用、アドレス範囲の指定に使われます。
(1)アクセスモードの区別を目的とした利用
AMコードには特権モード用とユーザモード用とあります。これを使い分けることで壊したくないメモリの保護をしたりします。
(2)アドレス範囲の指定
コードによって応答するI/Oボード、またメモリボードを変えることで、すべてのアドレスバスの32ビットをデコードする必要なく、8ビット入力のメモリ、16ビットのメモリを使用できる。

またデータ・バス幅(32,16,8ビット)の指定もでき、スレーブ側でも選択することが必要である。データ・バス幅はLWORDバー、DS0バー、DS1バー、A01によって指定されます。
32ビットデータのときは32本のデータ・バスD31〜D00が使用され、ロングワード(32ビット)転送を示すLWORDバーがアサート(その端子が有効となった状態を言う)されます。
16ビットデータのときはD15〜D00が使用され、上位のD31〜D16が使用されることはない。
8ビットデータの場合はD07〜D00、またはD15〜D08のどちらかの組が使用されます。VMEbusではバイト・セックスは68000と同一なのでD15〜D08が偶数アドレスにD07〜D00が奇数アドレスに対応します。D15〜D08か、D07〜D00のどちらを使用するかという区別はDS0バー(奇数データ・バイト・ストローブ)、DS1バー(偶数データ・バイト・ストローブ)をアサートすることによって行います。

次にマスタとスレーブ間で、データ転送時に使用されるコントロール・ラインの表を示します。
マスタが出力(バーはNOTの意味)
ASバーアドレスストローブ アドレスバス上のアドレス、AMコード、LWORDバー、WRITEバー、IACKバーの各ライン上の信号が有効であることを示す。スレーブ側ではこの信号のアサートにあわせて、アドレスやAMコードのを取り込んでデコードし、ボードのセレクト信号を作成します。
DS1バー偶数データ・バイト・ストローブ 偶数アドレスの指定、データ転送のタイミング
DS0バー奇数データ・バイト・ストローブ 奇数アドレスの指定、データ転送のタイミング
LWORDバーロング・ワード・セレクト ロングワード転送が行われていることを示す。
WRITEバーデータ転送方向指定 "L"レベルの場合にマスタ→スレーブ方向の(ライト)を、"H"レベルの場合にスレーブ→マスタ方向の(リード)を示す。
IACKバー"H"のとき、通常のデータ
転送サイクルを示す。
割り込み応答の確認をインタラプタに通知するための信号線ですが、"L"の場合、つまり割り込み応答サイクル中である場合、A03〜A01はアドレスとはべつのいみ(IRQレベルの送出)に使用されますのでスレーブが我がデータ転送サイクルと間違えないようにしなければなりません。
スレーブが出力
DTACKバーマスタに対する確認応答出力(正常終了時のみ) スレーブ側からのアクノリッジ(確認応答)信号です。ライトサイクルではスレーブ側がデータ・バス上のデータを確実に受信した時点でアサートし、DS0バーまたはDS1バーを待ってDTACKバーをネゲート(アサートに対し、信号が有効ではない状態)します。リード・サイクルではスレーブ側がデータバス上に確実にデータを載せた後アサートし、ライト・サイクルと同じくDS0バー、DS1バーのネゲートを検出した後DTACKバーをネゲートします。
BERRバー正常にデータ転送が終了しなかった場合に出力 スレーブ側からマスタへの信号で、スレーブ側で何らかの原因により、リード・サイクルやライト・サイクルが正常終了しなかったときに使用します。
*BERRバーの使用例
BTO(バスタイムアウト)モジュールを用い、BERRバーをアサートする。BTOモジュールはDS0バー、DS1バーの立ち下がりから時間監視を開始し、規定時間内にDTACKバー、またはBERRバーがアサートを検出できなかった場合にはバスタイムアウト・エラーということでBERRバーを出力します。この機構により、スレーブ側での故障やマスタのアドレスの指定の誤りによってシステムがストップすることを防ぎます。

データ転送のフローとタイミング
データ転送の流れ

@はじめにマスタがアドレスバス上にアドレスを出力しAMコードも出力。続いてLWORDバー、IACKバーの指定。ロングワードならLWORDバーはアサート、通常の転送ではIACKバーはネゲートする。そして次にASバーをアサート。

@'スレーブ側ではASバーのアサートと同期して各信号の取り込み、ボード・セレクト信号を作成

Aライト・サイクルの場合はWRITEバー信号を"H"に、リードサイクルの場合は"L"にする。そしてDTACKバーとBERRバーがともにネゲートされていることを確認後、データバス上にデータを出力しDS0バー(奇数アドレスの場合)かDS1バー(偶数アドレスの場合)をアサートする。そしてスレーブ側からのDTACKバーのアサートを待ちます。

A'DSnバーのアサートに同期してチップに対するCSバー(セレクト信号)を作成データバス上のデータを取り込み(ライト)、またはデータを読み出しデータバス上に乗せる(リード)。取り込んだ後、DTACKバーをアサートする。

BDTACKバーのアサートを検出すると、ライトのときはアドレスバスやAMコードなどを解除し、DSnバー及びASバーをネゲートし、ライト・サイクルを終了する。リードのときはデータバス上のデータを取り込む。その後アドレスバスやAMコードなどを解除し、DSnバー及びASバーをネゲートする。

B'DSnバーのネゲートを検出し、DTACKバーをネゲートする。

[2.バス・アービトレーション]
マスタスレーブ間のデータ転送に先立って、バスのアービトレーションが必要である。 複数のバスマスタから伸ばす使用要求を調停するためにスロットA01にバスアービタと呼ばれるモジュールを置かなければならない。またバスマスタはバスの使用をアービタに要求するバス・リクエスタとしての機能も持っていなければなりません。
VMEではアービトレーション(調停)のオプションが3つあり、今回はバスマスタの数が少ないのでオプションONEを用いる。

オプションONE
BR3バー(バス・リクエスト3)のみを使用する。バス使用権の優先順位は、BG3INバーとBG3OUTバーのデージ・チェーンによって決まる。これよりボードが実装される位置により優先順位が決定されるようになる。次に流れを示す。
@バスマスタがBR3バーをアサートし、バス使用要求を出す。
Aアービタはバス・リクエストを受け取るとBG3INバーをアサートする。
BBG3INバーのアサートを受けたバスマスタは自分がバスリクエストを出しているか確認する。出していたらバスが空いてからバスを使用する。出していなかったらBG3OUTバーをアサートし、次に接続されているバスマスタにバス使用要求確認信号を回す。
Cこれを繰り返し、バスリクエストを出したバスマスタまで信号を伝える。。

*またデージ・チェーンは隣のスロットのボードを一つなぎにつなげるが、バスリクエストを出さないボードはさんで、バスマスタがある場合はこのチェーンの妨げにならないように使わないBG3INバーとBG3OUTバーをショートする必要がある。

[3.インタラプタ]
インタラプトとは割り込みのことである。割り込み要求発生以降の流れを示す。
@スレーブがIRQ1バー〜IRQ7バーを用いて、割込み要求を割り込みハンドラに要求する。

A割り込みハンドラがIRQを受け付けるとIACKバーサイクルが始まる。IACKバー信号とともにA03〜A01のアドレスバス下位3ビットを用いてIRQレベルコードをスレーブにたいして送る。この時ASバーをアサートする。

Bスレーブ側ではASバーのアサートと同期してIRQレベル・コードを受け取り、自分の送り出したIRQか確認する。そしてIACKINバーがアサートされるまで待つ。アサートされてレベル・コードと一致したらIACKOUTバーをアサートせず、データバス上にデータを送り出す。一致しなかったらIACKOUTバーをアサートし次の割込み要求の持ったスレーブボードに割込み要求確認信号を送る。

Cこれを繰り返し一致するスレーブまで回す。(バスの調停と同じ)

*インタラプタもデージ・チェーンで結ばれているのでスロットの途中に割込み要求を出さないボードがある場合は、IACKデージ・チェーンのためのジャンパポストが設けられているのでこのジャンパポストにショートプラグを差込みショートする。


参考資料
1.URL:
2.Interface 増刊 VMEbus