データバス衝突を容易に回避する為の

CPUローカルバスデータバッファ構成例

 V53や386等のように、データリードサイクルからデータライトサイクルに入ってのデータ出力開始が速い場合、通常は周辺デバイスのリードサイクル終了時のデータネゲート時間(ハイインピーダンスになる 迄の時間)が遅いので、データバス衝突が発生します。
 これを回避する為にCPUデータ入出力端子とローカルデータバスの間に双方向のデータバッファを置く必要があります。

 このデータバッファにAC245等のXX245相当のトランシーバを用いると、そのゲート端子コントロール信号を作るのに3nSec以下の動作スピードのPLDが必要となり、大きななコストアップになります。

 本稿では筆者がベストと考える対策例を、V53A(NEC)の場合で記します。
 他のCPUでも相当機能の信号があるので、本稿の考え方をそのまま適用できます。

【方法】
 データバッファには、データイネーブル/ディセーブルコントロール端子がXX245のように1本でなく、2本(CE、OEとします)がANDで動作するXX543相当品を使用します。

 但し、XX543は表面実装品しかありません。DIP形が必要な場合は、XX541のような2ゲート端子バッファ2個を、それぞれデータ方向が逆になるように逆並列接続します。

 このデータバッファのCEをCPUのデータデータストロ−ブ(*DSTB)で直結してほとんど遅延無しでバッファ開閉制御します。
 他方のOEはリードまたはライト条件をからめ、15nSec程度の通常スピードのPLDで(ゆっくりと)データ方向制御します。

 メモリライト信号、IOライト信号は、*DSTBと同じタイミングのため、最悪値動作の場合、書き込み時にゲートが閉じて、データがハイインピーダンスになってしまう可能性があるので、別途、PLDによりバスステートカウンタを作り、これから*DSTBより数十nSec速くインアクティブになる様に作り出します。

 バスステートカウンタは、CPUのCLKOUT信号、バスサイクルスタート信号*BCYSTを基本にして、容易に作ることができます。

【その他】
(1)上記のデータバッファ以外に100nSec前後のROMを使用する場合には、そのデータネゲート時間が大きいので、ROM専用にデータバッファが必要になります。

(2)実際には(1)のROM専用のデータバッファどころか、本稿のデータバッファを置かなくても、CPUその他周辺回路の実力値としては、一応動作してしまうことが多いようで、実際にそのような回路が出回っているのを見た こともあります。
 しかし、素人の日曜工作ならいざ知らず、プロとしては失格です。そのような動作不安定要因を含むターゲットボードで、デバッグさせられるファームウェア屋さんが災難を被ることになります。
 ハードウェアもファームウェアも同じ人ならば、自業自得と諦めもつくのでしょうが・・・。結局、一番被害を被るのはエンドユーザーということになります。

(3)XX543相当品は、双方向のトランシーバ機能以外にデータラッチ機能もあり、便利なICです。
 これをデータバス、アドレスバスに用い、バスステートカウンタにバッファ制御機能とレディ信号制御機能を持たせて、適切にウェイトコントロールすれば、CPU機種に関わらず、VME、IEEE796、PCカード等ほとんどのバスを制御できるようになります。

−−−−− 本ページはここまで −−−−−