スイッチング用LSI
LSI概要
近年スイッチング技術が脚光を浴びるにつれて、汎用のスイッチング用LSIを手掛ける半導体メーカが増えてきています。その主なメーカを以下に示しておきます。
- ガリレオテクノロジー社 http://www.marvell.com
- テキサスインスツルメンツ社 http://www.ti.com
- MMCネットワーク社 http://www.mmcnet.com
- PMCシェラ社 http://www.pmc-sierra.com
これから紹介するガリレオテクノロジー社はその代表的なメーカの一つであり、数多くのネットワーク機器メーカがそのスイッチング用LSIを製品に採用しています。また、そのスイッチングLSIは、PCIバスがスイッチングバックプレーンとして利用できるという他のメーカにはない特徴があります。
開発拠点をイスラエルにおいているガリレオ社は、設計のみを行なういわゆるファブレスカンパニーです。
製品投入及び不具合点の改善サイクルは非常に早いメーカですが、その分バグも多いといったところが正直な感想です。
GT-48001A/GT-48002A
ガリレオ社の代表的なスイッチングLSIにGalNetファミリーと呼ばれているシリーズがあります。以下の2品種がその代表的なものです。
◆8ポートの10BASE-TをサポートするGT-48001A
◆2ポートの10/100BASE-TをサポートするGT-48002A
過去にはGT-48003として100VG-AnyLANも開発予定がありましたが、現在は消滅しています。ガリレオ社は次世代のスイッチングLSIファミリーとしてGalNet-IIファミリーを最近発表しました。興味のある方はガリレオ社のWWWサイトを覗いてみて下さい。GalNetファミリーの特徴を以下に示します。
●PCI Rev 2.1対応バスマスター動作
●メモリデバイス動作(4MByte空間占有)
●LANインタフェース
- GT-48001A : AUI/10BASE-T モード切替
- )GT-48002A : MII(Auto-Negotiation)
●EDO-DRAM直接接続可能(1MByte/2MByte)
- 受信バッファ容量(最大1,008パケット)
- アドレステーブル(最大8,000アドレス)
●ストア&フォワード方式スイッチング
- フルワイヤースピード
- 個々のデバイスがそれぞれアドレステー ブルを保持する分散型スイッチング
- GalNetプロトコルによるデバイス間通信
- 最大31デバイスまで接続可能
- CPU介入による転送先制御可能
●ネットワーク管理機能
- リピータMIB
- HP-EASE対応パケットサンプリング機能
- VLANサポート
●208ピンQFPパッケージ
●+5V動作
バスマスター動作調停用のアービタ機能を備えたPCIバス上にGT-4801A及びGT-48002Aを配置することにより、様々な構成の10BASE-T + 100BASE-Tのスイッチングハブを構成することができます。
GalNetファミリーとしては最大31デバイスまでの構成が可能ですが、PCIバスは一つのバス上のデバイス数は10に制限されていますので、大規模構成では所定の個所にPCI-to-PCIブリッジを配置する必要があります。
図2にGT-4801AとGT-48002Aによるスイッチングハブの構成例を示しておきます。
GalNetファミリのメモリ・マップ
GalNetファミリーデバイスはPCIバス上ではメモリデバイスとして認識されますが、システムとして協調動作するためには各GalNetファミリーデバイスが所定のメモリ空間にマッピングされていなければなりません。
図3にGalNetファミリのメモリ・マップを示します。GalNetファミリーはそのアーキテクチュア上、システムが占有するPCI上のメモリ空間として128MByteの連続領域を必要とします。
GT-48001A及びGT-48002Aのような個々のGalNetファミリーデバイスは、この128MByteのメモリ空間の中に4MByteのメモリとして配置されます。
つまり、PCIにおける32Bitアドレスの最上位5Bit(Bit31:27)がGalNetファミリーのベースアドレスとして機能し、それに続く5Bit(Bit26:22)が個々のGalNetファミリーデバイスを区別するためのデバイスIDとして機能するわけです。 さらに個々のGalNetファミリーデバイスが占有する4MByteのメモリ空間はアドレスBit21によって2分割され、前半の2MByteが制御レジスタ領域、後半の2MByteがDRAM領域としてマッピングされます(図4)。
128MByte÷4MByte=32ですので、デバイスIDの総数は32となりますが、制御用のCPUを配置した場合にはそのCPUもデバイスIDを必要としますので、GalNetファミリーデバイスの最大構成としては一つ減らした31個となります。
電源投入及びリセット時の初期値としては、ベースアドレスは[00001]で固定ですが、デバイスIDは抵抗によるプルアップ/プルダウンの選択によって任意の値が設定可能です。
これらの値はPCIコンフィギュレーションレジスタを介しての変更が可能ですので、パソコンに装着した場合にはPCI BIOSによってベースアドレス及びデバイスIDが設定されます。
GalNetプロトコル
同一デバイス内のポート間におけるスイッチングは単純にハードウェアで処理できますが、GalNetファミリーデバイス間のスイッチング処理はPCIバスを経由しますので、何らかのデバイス間通信プロトコルが必要になります。そのデバイス間通信プロトコルとして定義されているのがGalNetプロトコルです(図5)。
このGalNetプロトコルはGalNetファミリーデバイス間の通信のみならず、CPUとGalNetファミリーデバイス間の通信にも一部利用されます。GalNetプロトコルはGalNetファミリーデバイスが配置されているメモリ空間へのデータの書き込み操作を通信メッセージとして定義したものです。メッセージの種類によって必要なデータワード数が異なります。また、複数データワードが必要な場合はバーストアクセスをする必要がありますので注意して下さい。 GalNetプロトコルでは以下の5つのメッセージが用意されています。
- NEW_ADDRESSメッセージ
他のデバイスにアドレステーブルの更新要求をするためのメッセージです。
GalNetアーキテクチュアでは、個々のデバイスがそれぞれのDRAM内にアドレステーブルを自己管理していますが、新規アドレスの検出やアドレステーブル内容の更新(ネットワークノードの移動等)を検出したデバイスがこのメッセージで他のGalNetファミリーデバイスにアドレステーブルの更新要求をすることによって、システム全体のアドレステーブルの整合性が維持されています。 - BUFFER_REQUESTメッセージ
転送ターゲットとなるGalNetファミリーデバイスに対して、パケット転送のためのバッファ領域の確保を要求をするためのメッセージです。 - )START_OF_PACKETメッセージ BUFFER_REQUESTメッセージに対する応答メッセージで、確保したパケット転送のためのバッファ領域のアドレスを返します。
- PACKET_TRANSFERメッセージ
START_OF_PACKETメッセージに対応して発行されるパケット転送のためのメッセージで、その実態はSTART_OF_PACKETで返されたバッファ領域へのパケットのコピー操作です。
パケットのコピーは32Byte単位のバースト書き込みで実行され、特定のデバイスがPCIバスを長時間占有するのを防止しています。
パケット全体がコピーされるまで、バッファ領域のアドレスポインタを更新しながらPACKET_TRANSFERメッセージが繰り返し発行されます。 - END_OF_PACKETメッセージ
PACKET_TRANSFERメッセージの完了を通知するためのメッセージで、転送先のポート指定も同時に行われます。このメッセージを受け取ったGalNetファミリーデバイスは所定のバッファ領域にコピーされているパケットを指定されたポートへ転送します。
転送先のポート指定は複数指定が可能ですので、ブロードキャストパケットもユニキャストパケットも同じ手順での処理が可能です。
図6に、パケット受信時のデータ・フローを示しておきます。