about Dreamcast G2 bus

by jj1odm


■ introduction
■ G2 bus pinout
■ G2 bus signal timing
■ G2 bus extender
■ design example: G2 bus <=> USBN9603 interface
■ design example: RTL8019AS LAN Adapter (non compatible HIT-0300)
■ design example: LAN Adapter HIT-0300 clone (use MB86964)
■ design example: LAN Adapter HIT-0300 clone (use MB86967)
■ design example: BBA clone experiment
□ home


■ introduction

The G2 bus was examined from the following doubts.
以下の疑問点から G2 バスを調べました。
 
 1) Is byte alignment possible ?
    バイトアライメントは可能か?

 2) Is the long word access possible ?
    ロングワードアクセスは可能か?

 3) Can the access time be controlled ?
    アクセスタイムはコントロールできるのか?

 4) Possibility of BBA clone
    BBA クローンの可能性
G2 バス上で新たに判明した信号や既に判明している信号名称を変更した部分について少し説明します。
更にこれらの解析内容をを反映させた G2 バス上のインタフェース設計例を別項で掲載します。

 /MODEMCS: 5pin (modem enable: active low)
 この信号は以前にも観測していましたが、他の動作とかなり違っていたので SPU 側をアクセスした時の動作だと
 考えていました。結局 modem や lan adaptor [HIT-0300] の為の簡易バスモード用信号である事がわかりました。
 0xa0600000 - 0xa06007ff の範囲をアクセスするとこの信号がアクティブになりシンプルバスモードになります。
 (名前はモデムアダプター用チップセレクト端子という事で /MODEMCS と名付けました)
 
 /IRQA, /IRQB: 6pin, 13pin (interrupt input: active low)
 modem adapter や lan adapter [HIT-0300] に使われている割り込み信号はすでに DanPotter 氏が /IRQA (6pin)
 であると解析されていたので、他の割り込み入力信号がないか以下の方法で探しました。
 G2 バス上の割り込み入力信号の状態は 0xa05f6904 番地の interrupt bit map register に反映されています。
 このレジスタの状態をループで表示する簡単なプログラムを走らせた状態で G2 バス上の未解明の端子に
 1KΩの抵抗を介して GND に接続する方法でレジスタの値が変化する場所を探しました。
 数ヶ所調べたところで BBA [HIT-0400] が使用する /IRQB (13pin) を発見する事ができました。
 他にも無いか調べましたが今の所この /IRQA /IRQB の 2本だけのようです。
 (ちなみに /IRQA /IRQB という名称は私が区別する為勝手に付けた名前です)

 /LBE /WR: 14pin (lower byte enable output: active low / direction output)
 この信号は bITmASTER 氏が dir と名づけた信号ですが、direction 情報以外に下位バイトのイネーブル信号も
 兼ねている事が分かりました。(偶数か奇数番地に対するバイトアクセスをした時のこの信号の変化から分かります)
 但し、0xa0600000 ベースのアドレス空間だけはバイトアクセスが禁止されているので信号の意味が変化します。
 /MODEMCS がアクティブの時は簡易バスモードになり /WR ライトイネーブル信号の働きをします。

 /UBE /RD: 16pin (upper byte enable output: active low)
 この信号は bITmASTER 氏が /dataen と名づけた信号ですが、上位バイトのイネーブル信号である事が分かりました。
 (偶数か奇数番地に対するバイトアクセスをした時のこの信号の変化から分かります)
 但し、0xa0600000 ベースのアドレス空間だけはバイトアクセスが禁止されているので信号の意味が変化します。
 /MODEMCS がアクティブの時は簡易バスモードになり /RD リードイネーブル信号の働きをします。

 /BTA, /BTB: 22pin, 20pin (access time control / burst transfer input: active low)
 この信号の説明は少し長くなります。
 まず bITmASTER 氏ベースの回路を弄っている時の最初の疑問がバスのアクセス時間の長さです(1uSEC 以上もあります)。
 G2 バスのスピードはもっと速いはずです。当初は 0xb4000000 ベースのアドレス空間だけが特別低速用に設定されている
 と解釈しましたが BBA で使われるアドレスに変更してもバスのアクセス時間は変化しませんでした。
 何処かにアクセススピードを制御する信号があると判断して BBA の動作中の信号を観察するとこの /BTA /BTB
 (22pin 20pin) 信号が怪しいことが分かりました。
 実験した結果この /BTA /BTB にアクノリッジパルスを返す事でバスサイクルが終了する事が分かりました。
 バイトかワードアクセス時はこの /BTA /BTB 端子へ同時に同じ長さのパルスを返しますが、ロングワード時は
 ワード転送2回分のバスサイクルの為少し複雑なシーケンスが必要になります。
 さらに DMA 転送時はロングワードのシーケンスを繰り返すバースト転送になります。
 結果的にロングワードアクセスや DMA 転送に対応するには適切に /BTA /BTB 信号をコントロールする必要があります。
 ちなみに bITmASTER 氏ベースの回路で観測した 1.2uSEC のバスアクセス時間は /BTA /BTB 信号を返さない時の
 G2 バス側のバスアクセスタイムアウト時間と言う事になります。
 (この信号名称は bus termination と burst transfer から /BTA /BTB と命名しました)

 /RESET: 46pin (reset output: active low)
 電源(3.3v) の立ち上がりとこの信号の立ち上がりの時間を比較すると負論理のリセット信号である事が分かります。
 (このリセット信号はシリアルポートの 9番ピンにも接続されています)

 これらの解析結果から 1) - 3) の疑問は解決できました。
 まだ 4) に関しては現在実験中です。

 BBA 内の用途不明なレジスタが多くある事も原因の一つですが RTL8139C の為に PCI バスインターフェースが
 必要である事がさらに問題を複雑にしています。(PCI バスに関してはフリー IP を利用する事も考えましたが
 仕事にも役立つので勉強も兼ねて一から作っています)
 仮に BBA クローンが完成しても LAN コントローラのインターフェースだけの為に FPGA が必要になるというのは
 かなりオーバースペックでコスト的にも見合わないと考えています。
 (セガの BBA クローンを作らせない為の G2 <=> PCI ブリッジ IC はかなり成功していると言えるでしょう。)

 追記:モデムで使われるアドレス空間のバスの挙動についてはまだ謎が残っています。
 少なくともアドレス空間によってバスの動作は異なります。
 これまで調べてきたバスの動作は下の 1) のアドレス空間です。
 
 1) 0xa1001400 - use BBA (HIT-0400)
    0xb4000000 - G2 ex. device area
    
 2) 0xa0600400 - modem / lan adaptor (HIT-0300)
  この空間にアクセスした時 /AEN 信号は出ません。/LBE /UBE 信号の動作も異なります。
  また /BTA /BTB 信号も使われていないようです。
  (発売当初からモデムは付属していたことからモデムのアドレスデコードがらみの回路を簡略化
  出来るような専用のバスモードになっているのではないかと考えられます。)

 追記:実験した結果やはりこの modem / lan adaptor [HIT-0300] に使われる空間は簡易バスモードになっていました。
 この空間にアクセスすると /AEN は使われず /MODEMCS (5pin) が使用されます。データバスは多重化されず AD[15:8]
 は 8 bit のアドレス専用バス、AD[7:0] は 8 bit のデータ専用バスになります。
 この時 /UBE 信号は /RD リードイネーブル /LBE 信号は /WR ライトイネーブル の働きをします。
 この空間は byte/word/long アクセスが可能ですが、ロングワード境界でアクセスする必要がありアクセスサイズに
 かかわらず常に最下位バイトのみが有効になります。(8bit データバス)
 この空間の範囲は狭く 0xa0600000 - 0xa06007ff の 2K バイトでした。
 (ロングワード境界に配置する為 512 バイトになりますがアドレスラインが 8本なので実質 256 バイトの空間)
 アクセスタイム (/MODEMCS の幅) は約 200nSEC あります。
 (分かってしまえば単純なバスモードですが、この結論に達するまで随分長い時間が掛かってしまいました)
 
 この簡易バスモードの検証に lan adaptor HIT-0300 クローンを作ってみました。
 実は他の通常の G2 バスモードのアドレス空間では動作していましたが本来の 0xa0600400 ベースのアドレス空間
 ではバスモードの違いから動かせずしばらく放置していました。
 オリジナルの HIT-0300 では MB86967 が使われていますが、同系列の MB86964 を使用しました。
 LAN コントローラ周りを一から配線するのが面倒なので MB86964 を使った PCカード (FMV-J182A) を流用しています。
 (ID コードの違いと serial EEPROM インターフェースが無い部分は CPLD 側で補っています。
 ちなみに MB86964 は既にディスコン、MB86967 は現状入手困難{事実上のディスコン}なのでその石が
 使われている LAN カード等の製品から流用するしかないようです。)
 動作検証は今のところ ip-upload 1.0.4 と KOS network sample soft のみです。
 
 追記:MB86967 が使われている REX-R280 という LAN カードを入手したので
 MB86967 版の HIT-0300 クローンも検証してみました。
 (MB86967 を使用した場合リセットポートレジスタを追加するだけなので CPLD 内の回路は
 非常に簡単になります。ついでに汎用ロジック IC のみを使用した回路も検証しました。)
 
 MB86967/MB86964 10Base-T のトランスについて質問があったのでここに書いておきます。
 MB86967 の場合は一般的なフィルター内臓の 20F001N 等が使えますが、MB86964 の場合フィルターは送受信ともに
 LANコン側に内蔵されており、さらに送信側のトランスの巻線比が 1 対 1.4 と特殊になっています。
 実際に使われているトランスを覗いて見ると受信側 10T:10T 送信側 10T:14T でトロイダルコアにまかれていました。
 MB86964 の場合トランスが特殊ですがフィルター無しセンタータップ無しの簡単なトランスなので自作する事も可能です。
 (ライン側のセンタータップはサージノイズ対策で高耐圧のコンデンサ(2KV/0.01u)をフレームグランドに
 接続する為にありますが、工場のようなよほどの電磁気ノイズのある環境でなければ省略しても問題ありません。
 ノートPC(PCカード)等有効なフレームグランドが確保できない場合も省略されている事が多いです)

 追記:簡易バスモードについて、まだ疑問が残っています。
 システムクロックに同期した通常の G2 バスモード(同期バスモード)では /BTA /BTB 信号によってバスの
 アクセスタイムをコントロールできますが、簡易バスモード(非同期バスモード)では今のところアクセスタイムを
 ハード的にコントロールする方法が見つかっていません。恐らく簡易バスモード用のウエイトコントロール端子が
 G2 バスの未解明の端子の中に存在していると思われます。
 (G2 バスに関係する何処かのレジスタを設定しないとウエイトコントロールが有効にならないのかもしれません)

 私は本物の lan adapter HIT-0300 を所有していませんが、恐らく LAN コントローラからのバスウエイト信号は
 G2 バスの何処かの端子へ接続されていると考えています。現状の HIT-0300 クローンでは LAN コントローラから
 のバスウエイト信号を使用していませんが、今のところ特に問題はありません。(個人的には納得していませんが)

 BBA clone その後:
 これなら入るだろうと以前仕事で使って余った EPF6016AQC-208 を搭載し、パケットバッファー用に高速キャッシュメモリーを
 積んで始まった BBA クローンですが、HIT−0300 クローンで中断して以来仕事が忙しくて PCI バス周りの配線が手付かずでした。
 
 現在再開して PCI バス周りの配線 が終わり、デバッグ用に設けたコンフィグ用ポートを通してコンフィグレーションレジスタへの
 読み書きが出来ています。
 
 ここで現時点で推測する BBA 内の構造と私が考えているクローンの違いについて少し書いておきます。
 私の推測ですが、BBA の場合パケットバッファー(32KBytes)へのアクセスは全て PCI バス経由でアクセスしていると考えています。
 それは例のマジックコードによる RTL8139C のコンフィグレーションが終了しないとパケットバッファーのメモリ空間が現れない
 という事から来ています。
 (コンフィグが終了するまで PCI バスのアクセスを禁止している?もちろん RTL8139C のベースアドレスを設定しなければ
  RTL8139C は見えませんが、バッファーメモリは見えても良いはずです。)
 
 私が作ろうとしているクローンの場合、RTL8139C がバスマスターになって DMA 転送する為の PCI バスから見えるバッファー空間
 と G2 バス側から見えるメモリー空間のために 2ポートメモリ構成を採っています。

 この場合のメリットは、RTL8139C がパケットバッファーへバースト転送をしている間 RTL8139C へのレジスタアクセスにより
 一時バースト転送は中断しますが、パケットバッファーへのアクセスは PCI バスのバスサイクルを中断することなくアクセス
 することが出来ます。
 デメリットは 2ポートメモリ構成の為回路が複雑になることです。
 (PCI バス上でのバースト転送も 2ポートメモリに同期させる必要がある)
 
 本当は 32bit幅のバッファーメモリーがあれば回路的にはすっきりしますが、現状は 8bit x 32768 の SRAM を 2つで 16bit 幅
 で使っています。RAM ビット 32KBytes 分のメモリが確保できる FPGA という選択肢もありますが、実験としてはそちらの方が楽
 ですがなるべく現実的な構成にしています。
 
 それとは別に、相変わらず用途不明のレジスタについては謎のままです。
 KOS や NetBSD のソースから読み解こうとしていますが、どうもブラックボックスへ定数を設定しているだけのように見えます。
 最終的には KOS や NetBSDでは動くけど、BBA 対応の正規のソフトでは動かないかもしれません。
 (希望的観測として 2ポートメモリ構成が、それら不明なレジスタを必要としない事になるのではないかと?あまい?)

 現在 FPGA の 70%前後の LE 使用量でフィッティングに時間が掛かかる為、一時 2ポートメモリ構成を止めて PCIバス経由でのみ
 パケットバッファーへのアクセスが出来る 構成実験 しています。
 PCI マスターも PCI スレーブ側もいちよう期待通り動いているようですが、RTL8139C がバスマスターになってパケットバッファー
 をアクセスする辺りに問題があるのか、現状で dc-load を起動すると BBA と認識、MACアドレスも正しく 認識 され idle 状態に
 なっていますが ping や dctool -r 等に反応出来ない状態。RTL8139C がバスマスターになってパケットバッファーへ盛んに
 アクセスしている事はオシロで確認できますが、まだ PCI バス周りに問題があるかもしれません。

 現在実装している BBA のレジスタマップ (0x010016xx 番地のレジスタは現在未実装)
 // device map: (physical address)
 //  0x01001400-0x0100140f: "GAPSPCI_BRIDGE_2" strings {read only} (16bytes)
 //  0x01001410-0x01001413: 0x0c003000 ??? {read only} (4bytes}
 //  0x01001418-0x0100141b: magic code register {long access only} (4bytes) {RTL8139C config sequence}
 //    write: 0x5a14a501 {config start} / read: bit[31:1] '0', bit[0] - config done bit
 //  0x01001420-0x01001423: register ??? (4bytes) {register only}
 //  0x01001424-0x01001427: register ??? (4bytes) {register only}
 //  0x01001428-0x0100142b: register ??? (4bytes) {register only}
 //  0x0100142c-0x0100142f: register ??? (4bytes) {register only}
 //  0x01001700-0x010017ff: {PCI} RTL8139C registers (256bytes) {after config}
 // *0x01001800-0x01001803: pci_ad[31:0] {read only} (4bytes) {for debug}
 // *0x01001804-0x01001805: pci_cbe[3:0] {read only} (2bytes) {for debug}
 // *0x01001806-0x01001807: configuration address register (2bytes) {for debug}
 // *0x01001808-0x0100180b: {PCI} configuration data register (4bytes) {for debug}
 //  0x01840000-0x01847fff: {PCI} packet buffer (32Kbytes)

 現状の問題点:
 dc-load を走らせた状態でしばらく放置すると RTL8139C がバスマスターの状態で frame:hi irdy:low で
 パケットバッファーからの応答待ち状態のまま PCI バスが固まる。これは PCI スレーブ(packet buffer 側)
 が fast back to back に正式に対応していなかった為、バスアービターの切り替えのタイミングによって
 はバスアイドル状態のない連続バスアクセスでスレーブ側が応答できなかった。(これは修正)
 
 現在それなりに動き出してはいますが、何回か大きなファイル送受信している内に動作がおかしくなります。
 こける直接の原因は G2 バス側のバスタイムアウト 1.2uSEC にあります。
 そのタイムアウトになるまえに要求された PCI バスアクセスを終わらせなければいけませんが、その為
 PCI バスアービターで 2つのマスターを切り替えるタイミング(RTL8139Cではマスタレイテンシの値)
 や packe buffer のスレーブ側から disconnect 要求でバスを一時開放させるタイミング等を調整して
 ますが、なかなか思うようにいかないというのが現状です。

 (何かまだ根本的な問題が隠れているのかもしれません。 FPGA のフィッティングに時間が掛かるのも
 デバッグが進まない要因、もっと大きな FPGA 使えば良かったかな。)

 BBA clone circuit について:
 回路図といっても G2 bus / PCI bus / SRAM が FPGA に繋がっているだけですが、いつも
 の癖でまだ全体の回路図は書いていません。(いちよう大雑把な 回路 は書きました)
 (PCI バスの配線をした時は何所かで見つけた PCI コネクタ図を参考にしてました)

 クロックはスキューの問題があるので G2 バスのクロック 25MHz をバッファーは使わず
 ダンピング抵抗のみで FPGA と PCI バスへ分配しています。
 リセットは G2 バスのリセットと FPGA の CONF_DONE 信号を CR の時定数で少し遅らせた
 信号とで OR して PCI バスのリセット信号と FPGA で使うリセット信号にしています。
 
 高速 SRAM は 3.3V 用が手持ちに無かったため 5V 用(KM688257AJ-10) を使っています。
 PCI バスは 5V/3.3V 兼用のピン配置を使っているため電源には 5V を供給しています。
 (I/O 電源として 3.3V もいちよう配線してあります。RTL8139C を搭載した多くの LAN
 カードでは 5V 電源からレギュレータで 3.3V に落としているようです)
 
 PCI バスでは実質パリティー回路は無くても問題無いと思いますが、自身が出すべきパリティ
 の為にいちよう出力はしてますが、相手の出すパリティは未チェック、それに伴って PCI
 バスの perr# serr# ピンは未使用(プルアップ抵抗のみ、RTL8139C コンフィグ時にコマンド
 レジスタの parity error response / serr ビットはオフにしています)。

 magic code register (0x01001418) について:
 このレジスタは RTL8139C に対してコンフィグレーションを行なう為にあります。
 このレジスタへ 0x5a14a501 のマジックコードを書き込むと内部でコンフィグレーションの
 シーケンスが始まります。コンフィグが終了したかどうかは同じレジスタを読んで bit0
 が '0' ならコンフィグ中 '1' ならコンフィグ終了です。

 (きっぱり書いてますが、BBA を調べた時 KOS や NetBSD のソースコードを見て RTL8139C
 に対するコンフィグレーションが何所で行なわれているかみつけられなかった為、もうこの
 マジックコードレジスタへのアクセスしかないと思いました。カスタム IC 内部の動作ですが
 BBA を開けて RTL8139C の frame(PCI) 端子でも観測すれば確かめられると思います。
 ちなみにこのコンフィグ終了のフラグは BBA 内部で PCI バスへのアクセスを有効にするか無効に
 するかを制御しているようです。恐らくコンフィグシーケンス中、他の PCI バスへのアクセスと
 衝突しないようにする配慮だと考えられます。)

 (追記:ハブのリンクランプの挙動から気がつきましたが、単なる PCI バスアクセスの有効無効だけではなく
 マジックコードを受け付けるまで PCI バス上のリセット信号はアクティブになったままのようです。
 但し BBAクローンでは汎用 PCI バスとしても使いたいので現状のパワーオンと FPGA の CONFIG_DONE だけで
 PCI バスのリセット信号とします。)

 私の場合はコンフィグレーション空間にある マスタレイテンシ値 / メモリベースアドレス /
 コマンド のレジスタを設定しています。(ちなみにデバッグ用に使われていないと思われる
 0x01001806-0x0100180b 番地にコンフィグ空間への窓口を設けてあります。)

 A part of Fitter report under experiment. (under experiment: bba_clone.gif bba_clone.v / 0 1 2 3 4 5 6 7 8)
 +----------------------------------------------------------------------+
 ; Fitter Summary                                                       ;
 +-----------------------+----------------------------------------------+
 ; Fitter Status         ; Successful - Tue Apr 22 18:19:45 2008        ;
 ; Quartus II Version    ; 4.1 Build 208 09/10/2004 SP 2 SJ Web Edition ;
 ; Revision Name         ; bba_clone                                    ;
 ; Top-level Entity Name ; bba_clone                                    ;
 ; Family                ; FLEX6000                                     ;
 ; Device                ; EPF6016AQC208-3                              ;
 ; Timing Models         ; Production                                   ;
 ; Total logic elements  ; 928 / 1,320 ( 70 % )                         ;
 ; Total pins            ; 121 / 171 ( 70 % )                           ;
 +-----------------------+----------------------------------------------+
 +--------------------------------------------------------------------------------------------------------------------------+
 ; Fitter Resource Utilization by Entity                                                                                    ;
 +-----------------------------+-------------+---------+------+--------------+--------------+-------------+-----------------+
 ; Compilation Hierarchy Node  ; Logic Cells ; LC Regs ; Pins ; LUT-Only LCs ; Reg-Only LCs ; LUT/Reg LCs ; Carry Chain LCs ;
 +-----------------------------+-------------+---------+------+--------------+--------------+-------------+-----------------+
 ; |bba_clone                  ; 928 (557)   ; 337     ; 121  ; 591 (356)    ; 22 (2)       ; 315 (199)   ; 30 (0)          ;
 ;    |g2_bus:g2bus|           ; 112 (112)   ; 40      ; 0    ; 72 (72)      ; 1 (1)        ; 39 (39)     ; 15 (15)         ;
 ;    |pci_arbitration:pciarb| ; 5 (5)       ; 3       ; 0    ; 2 (2)        ; 0 (0)        ; 3 (3)       ; 0 (0)           ;
 ;    |pci_master:pcimas|      ; 83 (83)     ; 47      ; 0    ; 36 (36)      ; 2 (2)        ; 45 (45)     ; 0 (0)           ;
 ;    |pci_prity:pcipar|       ; 12 (12)     ; 1       ; 0    ; 11 (11)      ; 0 (0)        ; 1 (1)       ; 0 (0)           ;
 ;    |pci_slave:pcisla|       ; 159 (159)   ; 45      ; 0    ; 114 (114)    ; 17 (17)      ; 28 (28)     ; 15 (15)         ;
 +-----------------------------+-------------+---------+------+--------------+--------------+-------------+-----------------+

 FPGA configuration:
 最近コンフィグレーションROM は安くなっていますが、FLEX6000 の場合対応する ROM がワンタイムで
 書き換えが出来ない為、安価な ANALOG DEVICES 社の ADuC7021 (ARM CPU) を使ったコンフィグレータ
 を考えました。
 (実験では ADuC7019 を使ってますが、回路図では ADuC7021 にしてあります。ADuC7021 にした理由は
 シリーズで一番安価な為。7019 と7021 ではアナログピン周りのピン配置が若干違っています。)
 とりあえずこんな感じ。I2C ポート以外に念の為 JTAG 端子と予備に4本の GPIO ポートを引き出してあります。
 拡張子 .rbf のコンフィグレーションバイナリ−ファイルを I2CW で書き込みます。
 (ADuC7021 のプログラムコードや FPGA コンフィグデータを書込む専用のプログラムにしました。fcnfw
 I2C ケーブルにブートモードをコントロールする信号を追加。 i2c_cable(simple version))

FPGA configurator:
 resource: circuit i2c_cable(simple version) fcnfw pic
 1st step: fcnfw -x  ... write configuration program (ADuc7021)
 write configuration data:
  altera: fcnfw filename.rbf  ... .rbf LSB first format (altera)
 (xilinx: fcnfw filename.bin  ... .bin MSB first format (xilinx))
 monitor LED: (FPGA configuration)
  normal: turning off at normal termination.
  error: internal error or connected error with FPGA when blinking.

■ G2 bus pinout

[G2 bus 50pin]
 
 1 : +5V
 2 : +5V
 3 : +5V
 4 : +5V
 5 : /MODEMCS * modem enable       {output} (modem / lan adaptor [HIT-0300] area enable)
 6 : /IRQA    * interrupt request A {input} (used modem unit / lan adapter [HIT-0300])
 7 : ???
 8 : ???
 9 : ???
10 : GND
11 : GND
12 : GND
13 : /IRQB    * interrupt request B {input} (used BBA [HIT-0400])
14 : /LBE /WR * lower byte enable  {output} (direction / lower byte enable / write enable (when active /MODEMCS))
15 : ???
16 : /UBE /RD * upper byte enable  {output} (upper byte enable / read enable (when active /MODEMCS))
17 : +3.3V
18 : +3.3V
19 : +3.3V
20 : /BTB     * bus termination B   {input} (access time control / burst transfer)
21 : /AEN     * address enable     {output} (address enable / bus cycle start)
22 : /BTA     * bus termination A   {input} (access time control / burst transfer)
23 : GND
24 : GND
25 : AD15     *
 .    .       * AD[15:0]     {output/input} (address / data multiplexed 16bit bus)
 .    .       *  25pin to 40pin             (AD[15:8] 8 bit address bus / AD[7:0] 8 bit data bus (when active /MODEMCS))
40 : AD0      *
41 : GND      *                             (guard GND of system clock)
42 : GND      *                             (guard GND of system clock)
43 : CLK      * system clock       {output} (25MHz)
44 : GND
45 : GND
46 : /RESET   * system reset       {output}
47 : GND
48 : GND
49 : ???
50 : ???

thank's bITmASTER and Dan Potter

■ G2 bus signal timing

1) G2 bus mode

 byte or word access:
  /AEN  -__--------------
  /BTA  -------_---------
  /BTB  -------_---------
  ADxx   aADDDDD             D: byte data (AD[15:8] or AD[7:0]) or word data (AD[15:0])
  /xBE  -_______---------    /LBE and /UBE (lower byte enable / upper byte enable)

 long word access:
  /AEN  -_______---------
  /BTA  -------_----_----
  /BTB  -------______----
  ADxx   aAdddddDDDDD        d: low word data  D: high word data
  /xBE  -____________----    /LBE and /UBE (lower byte enable / upper byte enable)
  
  -: one step equal one system clock cycle (40nSEC)
  a: low word address (A[15:1] lsb 1bit alway '0' {A[0]})
  A: high word address (A[28:16] msb 3bit always '0' {A[31:29]})
  (There is a possibility that the address overlaps when the SPU side is accessed
  when the decipherment is done only with low word address.)

 G2 bus 22pin / 20pin ('/BTA' and '/BTB') controls the access time. (see concept circuit)
 If this control is not used, it ends automatically by the time-out (1.2uSEC). 
 When a long word is accessed, it is always necessary.
 (It becomes only the bus cycle of lower word if it doesn't control.)

 direction information of '/LBE': (read / write operation)
 read operation:
  CLK   __--__--__--__--_
  /AEN  --________-------
  /LBE  ------___________    direction (read) / lower byte enable
  /UBE  ------___________

 write operation:
  CLK   __--__--__--__--_
  /AEN  --________-------
  /LBE  --_______________    direction (write) / lower byte enable
  /UBE  ------___________

  * this timing is word access


2) simple bus mode (modem / lan adaptor [HIT-0300] area {0xa0600000 - 0xa06007ff})

 byte/word/long read access:
  AD[15:8]   aaaaaaaaaaaaa       a: 8 bit address bus (AD[15:8])
  /MODEMCS  ---__________----
  /UBE(/RD) -----_______-----
  /LBE(/WR) -----------------
  AD[7:0]       DDDDDDDDD        D: 8 bit data bus (AD[7:0])

 byte/word/long write access:
  AD[15:8]   aaaaaaaaaaaaa       a: 8 bit address bus (AD[15:8])
  /MODEMCS  ---__________----
  /UBE(/RD) -----------------
  /LBE(/WR) -----_______-----
  AD[7:0]       DDDDDDDDD        D: 8 bit data bus (AD[7:0])

 access is long word alignment.
 only the lowest byte is valid though byte/word/long can be accessed. (In fact 8bit bus)

■ G2 bus extender


The connector is removed from the modem unit.
The connector is carefully removed
because it is bonded in two places besides solder.
(When you recycle the modem unit)

モデムユニットからコネクタを外します。
半田以外に2ヶ所接着剤で固定されているので
注意深く外します。

It wires for the connector.
I used a universal board.
The pin number is understood from the silk number
of the removed modem unit.

ユニバーサル基板を使いましたが半田面のラウンド
が邪魔なので部品面を使い、ヒロセの 50pin のコネクタ
は半田面側にホットボンドで固定しました。
ピン番号は外したモデムユニットのシルク番号で分かります。

To examine the modem under operation,
I processed the modem unit.
The mystery of the G2 bus was able to be
solved thanks to this modem unit.

動作中の G2 バスを調べる為モデムユニットにも
コネクタを付けて使えるようにしました。
このモデムユニットのおかげで大分 G2 バスの
謎が解明できました。


■ design example: G2 bus <=> USBN9603 interface

spec of 'g2usb': (G2 bus <=> USBN9603 interface version 3)
 device address mapping: (byte align)
  0xB4000000: USBN9603 data register
  0xB4000002: USBN9603 adrs register
  0xB4000001: GPIO port register (6bit GPIO port (read/write))
  0xB4000003: CONTROL register
   bit[7] 'irqen' enable flag (read/write)
   bit[6] 'intp' status (read) 
   bit[5:0] GPIO direction IN:1 / OUT:0 (read/write) 
 interrupt: use /IRQA
 device access time: 160nSEC (use /BTA /BTB control)
 device enable/disable logic: (for internal reset)
  enable: write word MAGIC code
  disable: write long word MAGIC code
  magic code: 0x4b46 (my initial name 'KF')
g2usb circuit: g2usbn9603_3.gif
cpld internal ciucuit: g2usb3.v g2usb3.ucf
cpld fuse data: g2usb3.jed
usb device sample soft (usb wheel mouse): dcmouse3.srec
GPIO sample soft (LCD module control): lcd.c
GPIO sample soft (N64 joypad control): n64joypad.c
reference picture: pic1 pic2 pic3 pic4 pic5
about USBN9603:
 USBN9603 is a slave controller of USB. 
 (It is not possible to use it as a host controller.)
 
example of USB device:
 USBN9603   slave controller        SPI/parallel interface
 SL811HST   host/slave controller   parallel interface
 MAX3421    host/slave controller   SPI interface
 (The bus interface of SL811HST is also almost the same as the case of USBN9603.)

■ design example: RTL8019AS LAN Adapter (non compatible HIT-0300)

spec of RTL8019AS LAN Adapter:
 used device:
  XC9572XL-VQ44: G2 bus interface logic
  RTL8019AS: lan controller chip
  74LVX245: 3.3v <=> 5v buffer
  93C46: MAC address and config data eeprom
 device mapping: (byte access only)
  0xb4000040 - 0xb400007e: RTL8019AS registers {even address} (lower byte mapping)
  0xb4000041: ID code 1 register '0x80' {read only} (upper byte mapping)
  0xb4000043: ID code 2 register '0x19' {read only} (upper byte mapping)
  0xb400007f: control register {read/write} (upper byte mapping)
   bit[7] interrupt enable {active high} (read/write)
   bit[6] interrupt status {active high} (read only)
   bit[5:1] not use {read always '00000'}
   bit[0] reset {active high} (read/write)
 interrupt: use /IRQA
 device access time: 200nSEC (use /BTA /BTB control)
 (When RTL8019AS is accessed, it is extended by the state of 'IOCHRDY' terminal.)
lan adapter circuit: lanadp8019.gif 10baset_trans
cpld internal ciucuit: g2lanadp8019.v g2lanadp8019.ucf
cpld fuse data: g2lanadp8019.jed
content of 93C46 memory: 93c46.txt
dcload-ip 1.0.4 target binary: dcload-ip-1.0.4-target.lzh readme.txt pic
reference picture: pic1 pic2 pic3 pic4 pic5 pic6 pic7
Why 8bit bus (RTL8019AS) ?
 Wiring can be a little. 
 Lan adapter (HIT-0300) is 8bit bus base.
 Low cost.
Why RTL8019AS ?
 Because there was a stock.

■ design example: LAN Adapter HIT-0300 clone (use MB86964)

HIT-0300 original block diagram


spec of LAN Adapter HIT-0300 clone:
 used device:
  XC9572XL-VQ44: G2 bus (simple bus mode) interface logic
  MB86964: lan controller (an original lan adaptor uses MB86967)
  TC55257: buffer SRAM 32kbytes
  93C46: serial EEPROM (for MAC address)
 device mapping: (long word alignment mapping (simple bus mode))
  0xa0600400 - 0xa060043c: MB86964 lan controller device
   (change DLCR7 register ID code. MB86964{'01'} => MB86967{'10'})
  0xa0600440: EEPROM control port (BMPR16){EECS/EESK} (for MB86967 compatibility)
   bit[7] not use (read/write)
   bit[6] EESK (read/write)
   bit[5] EECS (read/write)
   bit[4:0] not use (read/write)
  0xa0600444: EEPROM data in/out port (BMPR17){EEDO/EEDI} (for MB86967 compatibility)
   bit[7] read:EEDO write:EEDI
   bit[6:0] not use {read always '0000000'}
  0xa0600480: reset port register
   bit[7:1] not use {read always '0000000'}
   bit[0] reset {active high} (read/write)
 interrupt: use /IRQA
lan adapter circuit: hit0300_clone.gif transformer note
handmade transformer: 1 2 3 4
cpld internal ciucuit: hit0300_clone.v hit0300_clone.ucf
cpld fuse data: hit0300_clone.jed
content of 93C46 memory: 93c46.txt
reference picture: pic1 pic2 pic3 pic4 pic5 pic6 pic7 pic8 pic9
Verification software:
 IP-upload 1.0.4 -- pic
 KOS 1.1.9 network samples
 NetBSD 3.1 -- pic1 pic2
 httpd-ack (v20070720) -- pic (It is necessary to set ISP by using BBA.)

Serial EEPROM omission version:
 93C46 is simulated in CPLD. 
 (The MAC address is MAC_WORD_0/MAC_WORD_1/MAC_WORD_2 in the verilog source code. )

 circuit: hit0300_clone2.gif
 cpld source: hit0300_clonex.v
 cpld pin: hit0300_clonex.ucf

■ design example: LAN Adapter HIT-0300 clone (use MB86967)

spec of LAN Adapter HIT-0300 clone:
 used device:
  XC9572XL-VQ44: G2 bus (simple bus mode) interface logic
  MB86967: lan controller
  TC55257: buffer SRAM 32kbytes
  93C46: serial EEPROM (for MAC address)
 device mapping: (long word alignment mapping (simple bus mode))
  0xa0600400 - 0xa060047c: MB86967 lan controller device
  0xa0600480: reset port register
   bit[7:1] not use {read always '0000000'}
   bit[0] reset {active high} (read/write)
 interrupt: use /IRQA
lan adapter circuit: hit0300_clone_2.gif (non CPLD version: hit0300_clone_21.gif pic)
transformer: 10baset_trans PE-68032 transformer replacement test
cpld internal ciucuit: hit0300_clone_2.v hit0300_clone_2.ucf
cpld fuse data: hit0300_clone_2.jed
content of 93C46 memory: 93c46.txt
reference picture: pic1 pic2 pic3 pic4 pic5 pic6 pic7
Verification software:
 It is the same as the HIT-0300 clone that uses MB86964.

■ design example: BBA clone experiment

BBA clone block diagram



under construction .. (the circuit scale is large and complex.) pic1 pic2 pic3 pic4 pic5 pic6 pic7 pic8 pic9 pic10 pic11 pic12 pic13
BBA clone test circuit: bba_clone.gif

当初 RTL8139C 又は RTL8139D 単体のチップを変換基板で実装するつもりでしたがチップによりピン数が異なったり 2系統の電源が必要など面倒なので既にある PCI カードの NIC 製品をそのまま利用して PCI コネクターで実装する事にしました。(バージョンの違う RTL8139 系のチップを検証できるのと LAN 以外の PCI カードの実験も出来る)

搭載した PCI スロットは 5V 系、+12V / -12V は未接続、3.3V は配線すれば供給できますが現在のところ未接続。
今まで調べた RTL8139 系の NIC カードは全て 5V から必要な 3.3V や 2.5V を作っているようです。
(RTL8139C は 3.3V のみ、RTL8139D は 3.3V と 2.5V が必要)

home