筑波大学技術報告
25: 42-49, 2005

Maestro2 ネットワークインターフェースの開発
小野雅晃1
筑波大学システム情報工学等支援室（装置開発班）〒305-8573 茨城県つくば市天王台 1-1-1

概要
クラスタ型コンピュータ Maestro2 用のネットワーク
インターフェース（NI）を開発したので報告する。NIはパーソナルコンピュータ(PC)の 64 ビット幅の PCI ス
ロットに挿して使用するイーサーカードのような通信用のカードである。NI の PCI インターフェースの最大スループットは 64 ビットデータバス幅、66MHz 動作である
ため 533Mbyte/sec で、PCI としては最大のスループット
である。インターフェースはLVDS を使用し、物理的な最大スループットは片方向 3.2Gbps(Giga Bit Per
Second)である。

１．はじめにシステム情報工学研究科、コンピュータサイエンス専
攻の和田研究室では、クラスタ型のコンピュータに使用するために、高速、高機能のアドイン・カード及びスイッチから構成される通信システムを開発している。
5 年ほど前には、200Mbps の IEEE1394(i-LINK)を使用した第一世代の通信システム Maestro1 を開発した。
今回は、Maestro2 として第 2 世代の通信システムを開発した。使用した通信インターフェースは3.2Gbps のLVDS である。通信システムは前述したように通信カー
ドとスイッチで構成されるが、今回はそのうちのネット
ワーク･インターフェース(NI)について発表する。

Memory)、SDRAM(Synchronous Dynamic Random
Access Memory)、LVDS(Low Voltage Differential
Signalling)インターフェース用 IC が搭載されている。
CPLD は主に FPGA のコンフィギュレーションの制御を行う。コンフィギュレーションの方式はスレーブセレク
トマップで、コンフィギュレーション･データを FLASHROM から８ビットずつ FPGA に転送できるため、迅速に FPGA をコンフィギュレーションすることが出来る。
また、コンフィギュレーション・データが間違っていて、FPGA が立ち上がらない場合には、ウオッチドック機能により、正常なコンフィギュレーション・データを
FPGA にロードして、エラーの回復を図ることも出来るように設計されている。（現在この機能はまだ実装されていない）CPLD は Xilinx 社の XC95144XL を使用し２．NI の構成
図 1 に NI の写真、図 2 に NI のブロック図を示す。
NI は、300MHz 動作の PowerPC プロセッサを搭載したインテリジェントな PCI カードである。NI にはCPLD(Complex Programmable Logic Device)
FPGA(Field Programmable Gate Array)、PowerPC プロセッサ、FLASH ROM(Flash Read Only

図 1 NI の写真ている。

Data Bus(64bit)
送受信データ 32bit,100MHz(LVTTLレベル)

Power PC

MPC603e300MHz動作

SDRAM

SDRAM
AddressFPGA(Xilinx社
XC2V１000)

Data Bus (8bit)

Configuration

FLASH
ROM

Control

２Mbyte64Mbyte, 66MHz動作
Control
Configuration終了
時に切り離しPowerPC Address
Control
64bit, 66MHzPCI Bus
図 2
1

LVDSインターフェース用IC

NI のブロック図E-mail: ono@sie.tsukuba.ac.jp; Tel: 029-853-5195

42

CPLD
(Xilinx社
XC95144XL)LVDS

FLASH ROM は主に、FPGA のコンフィギュレーショ
2. ホスト PC から書き込んだコンフィギュレーション･ン・データを格納する目的で使用される汎用のFLASH
データが不正でも、回復させることが可能である。
ROM である。電源 ON 時には、CPLD の制御下に入り、電源 ON の FPGA コンフィギュレーション時には、
FPGA にコンフィギュレーション･データを送る。それが FPGA はモード選択ピンの設定によって、スレーブセレ
終了すると、CPLD の制御から切り離され、FPGA の制 クトマップモードが選択される。スレーブセレクトマッ
御下に入る。
プモードは FPGA の外からクロックと8 ビット幅のコン
FPGA は、各デバイスの制御回路、DMA コントローラ フィギュレーション用のデータをFPGA に入れる方式でー、制御用レジスタが実装されているNI の心臓部であ ある。データが 8 ビット幅と広いので、高速にコンフィギる。NI 上の PowerPC プロセッサやホストPC からのリソ ュレーションすることが出来る。
ースの要求に応えて、データ転送の仲立ちをする。
FPGACPLD は FLASH ROM にアドレスを供給して、FPGAには Xilinx 社の Virtex2 シリーズのうちから 100 万ゲー のコンフィギュレーション用のデータを出力させる。
ト相当の XC2V1000 を使用した。
FPGA とのハンドシェークを行って、FPGA にデータがSDRAM は PowerPC プロセッサと FPGA にバスが直 入力できたら、FLASH ROM のアドレスを＋１して、結されている。データバス幅は 64 ビット、動作周波数 FLASH ROM に次のデータを出力させる。このように、66MHz で動作している。
CPLD は FPGA のコンフィギュレーションを行う。
LVDS インターフェース用 IC は、ナショナル・セミコ
FPGA コンフィギュレーションが終了すると、CPLD
ンダクタ社の DS90CR481 と DS90CR484 を使用してい は FLASH ROM の制御信号線を全てハイ･インピーダる。これらの IC は、LVTTL48 ビットの入出力を LVDS ンス状態にして、FLASH ROM を切り離す。FLASH
データ 8 ビット＋クロック 1 ビットに変換する。FPGA ROM の制御信号線は FPGA にも接続されているので、からの LVTTL 信号は 32 ビットしかないので、48 ビット それから後は FPGA が FLASH ROM を使用することがの内 32 ビットを使用して、後の 16 ビットは使用してい できる。FPGA は PCI コンフィギュレーション・アクセ
ない。これは主にFPGA のピン数が足りないためである。 スに対して、FLASH ROM の領域をメモリ領域にアドレ
FPGA から LVDS 用 IC に出力する周波数は 100MHz、 ス･マップするので、ホストPC から読み書きすることがバンド幅は 32 ビットの 100MHz なので、3.2Gpbs となる。 出来るようになる。さらに、NI のローカル・プロセッサ
LVDS インターフェースで他の PC に挿入された NI や の PowerPC からも書き込むことが出来るようになる。
独自仕様のスイッチと接続される。LVDS インターフェ FPGA コンフィギュレーション専用の ROM でコンフィースで接続されるのは、NI や独自仕様のスイッチに限 ギュレーションする場合には、NI ボード上の JTAG 端子
られ、汎用のボードやスイッチなどとは接続できない。 にコンフィギュレーション用ツールを接続しなければな
NI は PCI バスでホスト PC と接続される。この PCI バ らない。しかし、本 NI で採用した方式を使用すれば、ホスは 64 ビット幅、動作周波数は 64MHz である。NI への ストPC から直接コンフィギュレーション･データを書き
スレーブ・アクセスは連続的にデータ転送(バースト転 換えることが出来る。また、その他のデータも FLASH送)をすることが出来ないので、全て単一転送となる。マ ROM に入れておくことが出来る。現在、イーサネットの
スタ・アクセスはバースト転送をすることが出来る。そ MAC アドレスなどを入れて、利用している。
の際の最大転送レートは、533Mbyte/sec(約 4.26Gbps)とFPGA に書き込むコンフィギュレーション･データがなる。
間違っていると、NI が立ち上がらなくなる。こうなると、
尚、NI の製作で私が担当した箇所は、CPLD 設計と 遠隔操作でリカバリすることが出来なくなるため、ホス
FPGA 設計の 2/3 ほどである。NI の回路設計は山際氏2 ト PC が遠い所にある場合はその場所まで行かなければと共同で担当した。NI のファームウェア、ホスト PC の ならない。そのような場合のために、FLASH ROM に 2
つのコンフィギュレーション･データを格納しておく。新ソフトウェアは、山際氏と青木氏3が担当した。
しく書き込んだデータが間違っていて、NI が立ち上がらない場合に、古く確実に立ち上がったデータを書き直す
３．CPLD の設計
CPLD は電源 ON 時に、FPGA のコンフィギュレーシ ことで、NI を確実に立ち上げるようにすることも出来る。
ョンの制御を行う。CPLD はコンフィギュレーション・ 現在は、この機能は CPLD に実装していない。
データを EEPROM に格納しているため、電源 ON です
ぐに動作できる。しかし、FPGA は内部の回路情報をRAM に格納しているため、電源をOFF すると内部の回路情報はクリアされてしまう。そのため、電源 ON 時には、毎回 ROM から内部回路の情報（コンフィギュレー
ション･データ）を読み込まなければならない。このROM には、FPGA コンフィギュレーション専用のROMを選択するのが普通であるが、本 NI では、あえて汎用
FLASH ROM を使用することとした。
それは次のようなメリットがあるからである。
1. PCI バス経由でホスト PC から、コンフィギュレー
ション･データを書き込むことが出来る。

４．FPGA の設計
FPGA 内部モジュールの構成を図 3 に示す。矢印の線は、モジュール間のデータや制御信号のつながりを示す。
FPGA は、MLX32、PCI、PCI Target
Controller、PowerPC Interface、Internal
Registers、Network Buffer Link Interface(NBL
Interface)、SDRAM Controller、DMA Controller、System
Arbiter、FLASH ROM Controller の各モジュールから構成される。
MLX32 は、Maestro2 独自の通信プロトコルを実装する。OSI 階層のトランスポート層でデータの完全性を保障し、バースト･データ転送を続けて行う機能を持っている。このモジュールは山際氏が設計した。
PCI モジュールは 66MHz、64 ビット幅の PCI バスのインターフェース回路である。
PCI スレーブ･アクセス(ホ2Instituto de Engenharia de Sistemas e Computadores (INESCID), Portugal
3
筑波大学 システム情報工学研究科

43

PCI BusDMA
Controller

FPGA

System Arbiter
PowerPC
Interface

PowerPC

PCI

NBL
Interface

FIFO
FIFO

PCI
TargetController

FLASH ROM
Controller

SDRAM
Controller

MLX32

LVDS
InterfaceIC

コマンドバス・マスタ・モ
ジュール
コマンドバス・スレーブ・モジュール
従属モジュール

Internal
registers

SDRAM

FLASH ROM

図 3: FPGA の内部モジュール
ストPC から NI へのデータ・アクセス)は、FPGA 回路内
Controller である。マスタ・モジュールの要求で、データでマスタとなる必要があるので、PCI Target Controller に 転送を行うのが、コマンドバス・スレーブ・モジュール
渡され、スレーブ･アクセスを行う。その他、PCI モジュー (以下スレーブ･モジュール)である。DMA Controller は、
ルは NI からホスト PC へのデータ・アクセスを実行する。 マスタ･モジュールではあるが、スレーブ・モジュールをPowerPC Interface は、PowerPC603e とのバス･インター 2 つ使用し、それらの間でデータ転送を行わせる特殊な
フェース回路である。バス幅は64 ビット、バスの動作周 マスタ・モジュールである。スレーブ・モジュールの一
波数は 66MHz となっている。Internal Registers は、方をソース(データを読み出し、出力するモジュール)、もFPGA の内部の状態などを保持しておく回路である。 う一方をディスティネーション(データを受け取り、書き
NBL Interface は、MLX32 とのインターフェース用の回 込むモジュール)として、データ転送を行う。DMA路である。SDRAM Controller は、66MHz 動作のController 自体はデータ・ストリームを送ったり、受けSDRAM を制御する回路である。DMA Controller は、 たりはしないで、制御だけを受け持つ。
DMA コントローラーが2 チャネル実装されていて、各モ
マスタ・モジュールがどのようにスレーブ・モジュージュール間の DMA 転送を制御する。詳細はセクション ルとデータ転送をするかを説明する。図 4 に FPGA 内部
５で記述する。
コマンドバスを示す。
FPGA 回路内には、自分からその他のリソースを要求
1. マスタ・モジュールが、System Arbiter にリソースできるマスタとなれるモジュール(コマンドバス･マスタ･を要求する。(図 4 の req)
モジュール、以下マスタ･モジュールとする)が 3 つある。
それは、PCI Target Controller、PowerPC Controller、DMA

コマンドバスPowerPC
Interface

PCI
TargetController

DMA
Controller

req gnt

req gnt

req gnt

PCI

NBL
Interface

SDRAM
Controller

コマンドバス・マスタ・モ
ジュール
コマンドバス・スレーブ・モジュール

System Arbiter
図 4: FPGA 内部のコマンドバス

44

2. リソースが未使用で確保することが出来たら、
System Arbiter はマスタ・モジュールに使用を許可する。(図 4 の gnt)
3. System Arbiter は、マスタ･モジュールとスレーブ･モジュール間のデータバスと制御バスを接続する。
(セクション 4.2 で詳述する）
4. マスタ･モジュールは、そのリソースのコントロー
ラーにコマンドを送りコネクションを確立し、使用を開始する。(図 4 のコマンドバス)
従属モジュールは、 Internal Registers と FLASHROM Controller の２つで、PowerPC Controller と PCI
Target Controller からだけアクセスされる。

4.1 コマンドバス
コマンドバス(図 4)はグローバル・コマンドバス、ロー
カル･コマンドバスとコマンド・イネーブルに分けることが出来る。コマンドバスでコマンドを送るのは、前述したとおり、マスタ･モジュールである。また、コマンドを受けるのはスレーブ･モジュールである。
グローバル・コマンドバスには、各モジュールに共通の項目が設定される。例えば、モジュールのID、ソースまたはディスティネーション、バースト長などである。
ローカル・コマンドバスは、そのスレーブ･モジュールに特有の機能が設定される。例えば、SDRAM Controller
ならば、アドレスと、バースト転送の最中にリフレッシュをするかどうかが設定される。
コマンド・イネーブルは、コマンドバスのコマンドが有効かどうかを表す。1 の時に有効となる。
Maestro1 では、中央制御回路で全ての制御を行っていたが、この方法は制御線が多くなると、制御手順を頭で考えるのが困難になる。それで、Maestro2 では、各モジ
ュールがコマンドによって、制御される方式にした。こうすることで、各モジュールごとにシミュレーションで動作を確認するのにも都合が良い。

4.2 FPGA 内部モジュール間のデータバスと制御バス
FPGA 内部モジュール間のデータバスは 64 ビット幅のバスを 2 チャネル実装してある。現在は、チャネルごとFPGA 内部モジュールを順に詳しく説明する。

5.1

PowerPC←LVII

PowerPC→LVII

PCI Bus→PowerPC
SDRAM→LVII
バースト転送可能
データパス

CH1

FIFO
FPGA 内のデータパス

45

PCI Bus←SDRAM

SDRAM

SDRAM→LVII

PCI Bus

MLX32

MLX32 は、セクション4.2 で記述したデータバスからデータをケーブルが接続されている先の NI や SB に送り出すためにカプセル化する。データは32 バイト単位の1 つ又は複数のパケットにまとめられ、ヘッダを付けられて、送り出される。ハードウェアによるエラー訂正機
能も実装されていて、受信側でエラーが検出されると、送信側は同じパケットを再送信し、正常に受信できるまで再送する。MLX32 は OSI 参照モデルで言うとデーPowerPC

CH0
FIFO

図 5:

５．FPGA 内部モジュール

PCI Bus→SDRAM

PowerPC→PCI Busにデータを流す方向が決まっている。これは、主にデータ・セレクタを節約して、ゲート規模を節約するためである。
データバスは System Arbiter に実装してあり、データバスの内部には、FIFO やバイト・レーン変換をするための回路が実装してある。バイト・レーン変換機能は、8 バ
イトの境界の途中から DMA 転送する場合に、バイト・レーンの入替を行う回路である。(セクション 5.8 で詳しく述べる)図 5 に FPGA 内のデータの流れを示す。図 5で DMA 転送はバースト転送可能な CH0、CH1 の FIFO
を通るデータパスを使用する。
制御バスは、データバスに対応して 2 チャネル実装されている。制御バスは次に示す 3 種類の信号がある。
1. レディ
2. データ転送終了
3. バイト･イネーブル
レディは、”データ出力や入力する準備が出来た”ということを表す信号である。各チャネルごとにソース･
レディとディスティネーション･レディがある。
データ転送終了はコマンドで指定されたバースト長のデータ転送が終了したことを表す。これもレディと同様に各チャネルごとにソースとディスティネーションの信号がある。
バイト･イネーブルは、どのバイト･レーンが有効化を示す信号である。データバスは 64 ビット、8 バイト幅なので、バイト･イネーブルは 8 ビット幅である。ソースから出力され、ディスティネーションでデバイスに書き込
む時にどのバイト･レーンが有効であるかを示す。

LVDS
InterfaceIC(LVII)

スする場合には、前述したようにマスタ･デバイスとしてFPGA の内部バスを要求する。Internal Registers とFLASH ROM Controller へアクセスする場合には、PowerPC Interface と共用の専用バスがあるので、PowerPC Interface とバスの調停を行うだけで、それらを使用することが出来る。
なお、NBL Controller、SDRAM Controller にアクセスする場合には、PowerPC の PCI マスタ･アクセスとの競合を避けるために、リソースをロックしなければならない。その機能は、Internal Registers に実装してある。

タリンク層に相当する。MLX32 の入力は 64 ビット
66MHz で、出力は 32 ビット 100MHz であるので、出力側の最大ビットレートは 3.2Gbps である。MLX32 は山際氏が作製した。

5.2

PCI

PCI は 64 ビット、66MHz の PCI バスとのインターフ
ェースを行う。PCI は、マスタ、スレーブ、コンフィギュレーションの各モジュールに分けられる。
マスタは自分から主体的にデータ転送をするモジュールで、PCI の機能で一番使われる主要なモジュールで5.4 PowerPC Interfaceある。ホストPC メモリからの読み出し、書き込み双方向
とも独立にデータ転送することが出来て、66MHz、64 ビ
PowerPC Interface は、PowerPC プロセッサ
ットでバースト転送することが出来る。
(MPC603e,300MHz,バス動作周波数 66MHz)とのイン
PCI 仕様 2.2 では、64 ビット幅の PCI デバイスは、32 ターフェースを実装する。インターフェースの基本構造
ビットのターゲットにアクセスする場合に、64 ビットア は Maestro1 と同一なので、大部分を流用した。ただし、クセスとしてデータ転送を始めていても、32 ビットアク 使用言語を AHDL から VHDL に変更したので、変換をセスに変更しなければならないという規定がある。しか 行った。
し、32 ビットアクセスへの変更は、回路の複雑化、動作PowerPC のメモリ･アクセス手順はアドレス転送とデスピードの低下、およびスループットの低下を招くため、 ータ転送に分けられる。PowerPC Interface はアドレス転本マスタでは全て 64 ビット幅でアクセスする。このよう 送を処理して、デバイスへのアクセス要求を受け取る。
に、性能向上の観点から、あえて PCI 規格を逸脱した実 ここから、PowerPC のデータ転送が始まる。もし、要求が装になっている部分が数ヶ所ある。
LVDS インターフェス用 IC か PCI バスへのアクセスのスレーブは、ホストPC からの PCI データ･アクセスを 場合には、PowerPC Interface は、内部バスを使用するの受け取って、NI のリソースへ書き込んだり、リソースか で、System Arbiter にデバイスを要求する。その後、デバらホスト PC へ読み出したりする。スレーブは64 ビット イスが使用可能になった時に、許可を受け取る。次に、と 32 ビットの両方のアクセスに対応する。ペンティアム・ PowerPC Interface は、そのデバイスの管理を受け持つコプロセッサはデータバスが64 ビット幅であるが、基本的 ントローラーとデータをやり取りする。データのやり取には、32 ビット･プロセッサであり、キャッシュが禁止さ りが終了したら、PowerPC のデータ転送が終了し、完了れているメモリ領域には、32 ビット・アクセスが行われ を送出して終了する。
る。よって、32 ビット・アクセスに対応しないと、データ
PowerPC の要求が Internal Registers か FLASH ROM
転送が出来ない。その代わりといっては何だが、スレー へのアクセスの場合は、専用のアービタでPCI スレーブ
ブはバースト転送には対応していない。連続的にデータ との調停をおこなった後に、データ転送を行う。この場が来ても 1 つのデータ転送で PCI スレーブ・アクセスを 合のデータ転送は、全て単一転送となる。
切断する。ペンティアム･プロセッサでは、キャッシュ禁
止メモリ領域への読み書き(NI への読み書きに相当す 5.5 Internal Registersる)は、単一の PCI スレーブ・アクセスとなる。しかし、サInternal Registers は、FPGA 内部の制御レジスタや状ーバーワークスのチップセットでは、連続したアドレス 態レジスタ、PCI バス用のコンフィギュレーション・レ
への読み書きではバースト転送となる場合もあるようだ。 ジスタなどが実装されている。Internal Registers は、
コンフィギュレーションは、主にコンフィギュレーシ PowePC と PCI スレーブ・アクセスから専用バスで書きョン・アクセスの処理とコンフィギュレーション･レジ 込み、読み出しができるが、バースト転送は出来ずに、単スタの実装を行っている。
一転送のみとなる。
ホスト PC の電源 ON 時には、アドレスマップがホスアドレス・オフセットが 00h(16 進数)から 3Fh までは、
ト PC の BIOS によって、各 PCI デバイスに設定される。 PCI バスのコンフィギュレーション領域となっている。デ
このように、PCI のコンフィギュレーション･アクセスは、 バイス ID、ベンダID、ベースアドレス・レジスタなどの、初期設定をホスト PC から各 PCI デバイスに設定する 各種レジスタが実装されている。
作業である。コンフィギュレーションの中には、コンフィ
アドレス・オフセットが 40h から FFh までは、FPGA
ギュレーション･アクセスでアクセスするレジスタ(コン 内部の 22 個の制御、状態レジスタが実装されている。
フィギュレーション･レジスタ)を実装してある。コンフィ DMA 設定用レジスタもここにある。面白い機能としてギュレーション･レジスタには、ホスト PC から PCI スレ は、FPGA を初期化する設定ビットもあり、ここを設定
ーブ･アクセスでアクセスする時に必要なベース･アドレ すると、もう一度 FLASH ROM からコンフィギュレーシスを設定するレジスタなどがある。
ョン・データをFPGA に読み込んで、FPGA が完全に初期化される。
5.3 PCI Target Controller
アドレス・オフセットが100h から FFFh までは、内部
PCI Target Controller(PCITC)は、PCI のスレーブに直 Block RAM 領域である。FPGA 内部の Block RAM を
SRAM(Static Random Access Memory) としてマップし結されていて、PCI スレーブ･アクセスの FPGA 内部処てある。Internal Registers としてのアクセスなので、単一理を行う。PCI スレーブ･アクセスがあると、PCITC は起動し、FPGA 内部バス経由で使用するデバイス用のコン 転送のみであるが、ホスト PC からアクセスする時に、トローラ(NBL Controller、SDRAM Controller)にアクセ SDRAM のようにリソースの競合を防ぐためのリソース・46

を取りきれなかった。バグが出る条件の特定に時間がかかってしまった。

ロックが必要ないため、結果としてSDRAM よりも高速にアクセスが出来る。

5.8
5.6

DMA Controller

NBL Controller

データバス

DMA Controller は DMA の制御を受け持っている。
NBL Controller は、MLX32 とのインターフェースを行 DMA Controller は制御だけを受け持ち、実際のデータ
う。NBL Controller は、入出力共に 3 エントリの FIFO を は System Arbiter 内にある FIFO を経由する。図 5 に示持っていて、MLX32 と内部データバスのデータのプロト した”バースト転送可能データパス”がそれである。そコル変換を行う。特に MLX32 からのデータ読み出しの の FIFO はバイト・レーン変換機能を持っている。
DMA Controller は、2 つのスレーブ・デバイスにコマ場合は、イネーブルを入れてから、1 クロック後にデータが出てくるので、内部バスのプロトコルと合わない。よっ ンドを送って、相互間でデータ転送を行わせる。最初に、て、NBL Controller でイネーブルと同時にデータが出力 ソース・デバイス、ディスティネーション・デバイス、バースト長などをInternal Registers 内の DMA 設定レジス
されるように変換を行う。
NBL Controller は、MLX32 のバッファに読み出すデ タに書き込むことによって、DMA 転送は、起動する。
DMA 転送のチャネルは前述してきたように2 チャネータがあるかどうか、また、MLX32 のバッファにデータが書き込めるかどうかを常時監視している。その結果、 ルあるので、設定用のレジスタも2 チャネル分用意されデータ転送が行えない場合には、イネーブルを落として、 ている。各チャネルは、転送方向が決まっている。チャネ
ル０は PCI から読み出して LVDS へ出力、PCI から読み
FPGA 内の伝送相手のデバイスを停止する。
出して SDRAM へ書き込み、SDRAM から読み出して5.7 SDRAM Controller
LVDS へ出力の 3 種類の DMA 転送をサポートする。(図SDRAM Controller は、66MHz 動作、64 ビット幅、 5 参照)
チャネル１は LVDS 入力から PCI へ出力、LVDS 入
64Mbyte の SDRAM を制御する。SDRAM と PowerPCのデータバスは共通となっていて、PowerPC とのやり取 力から SDRAM へ書き込み、SDRAM から読み出してりでは、PowerPC と SDRAM 間で直接データをやり取り PCI ヘ出力の 3 種類である。(図 5 参照)
このように、転送可能デバイスを分けることによって、し、FPGA 内とのデータのやり取りはない。(図 2 参照)
SDRAM の初期化時には、モードレジスタにバースト データ入力用マルチプレクサの回路規模が小さくなる
長やアクセス方法などを設定する。それにより、バースト ため、FPGA のリソースを節約することが出来る。
DMA 転送のバースト長の最大値は、64Mbyte-1 であ長が決定されるが、本 SDRAM Controller ではバースト
長を１に設定してある。それは、PowerPC の非キャッシ る。これは、主に SDRAM の容量が 64Mbyte であるため
ュメモリ領域のアクセスの時に、単一転送とすることが である。設定用のレジスタに書かれた DMA 転送は、出来るからである。バースト転送時の動作は以下で説 DMA Controller で、内部的に最大 256 バーストの転送単位に分けられて実行される。特に、SDRAM は列アド
明する。
SDRAM は、行アドレスと列アドレスの 2 つのアドレ レスが 9 ビットで 512 のアドレスであるため、512 の境スを入力する。始めに行アドレスを入れておいて、その 界では、DMA 転送を終了して、再起動しなくてはなら
後、READ 又は WRITE コマンドと共に列アドレスを入 ないためでもある。
その他に、DMA 転送は便利な機能を持っている。そ力する。ここで転送を終了させれば、バースト転送長は１にセットされているため単一転送となる。バースト転 れはバイト・レーンの変換機能である。
ペンティアム・プロセッサ、PowerPC プロセッサや NI
送時には READ 又は WRITE コマンドと列アドレスを連続的に入れることで、バースト転送を実現している。 の内部バスなどは 64 ビット幅のデータバスを持っていバースト転送は列アドレスが 9 ビットなので、512 個ま る。通常の CPU(Central Processing Unit)は、8 ビットでしか行えない。それ以上は、一度バースト転送を中断 CPU からの慣習で 8 ビット単位のデータの塊(バイト)を64 ビットのデー
して、もう一度、行アドレスを入れなおさなければならな 1 単位として、アドレスを付加している。
タバス幅を持つ CPU で、バイト単位にアクセスするとい。
SDRAM は、ダイナミック･メモリなので、そのままで
バイト・レーン7(bit63~56)
7番地のデータ
はデータが消えてしまう。データを消さないためには、
バイト・レーン6(bit55~48)
15.6usec ごとにリフレッシュを行って、データの再書き
6番地のデータ
込みを行う必要がある。SDRAM と PCI バス間のバース
バイト・レーン5(bit47~40)
ト･データ転送の際にこの点が問題となった。定期的に
5番地のデータ
リフレッシュを行う必要が SDRAM にはあるが、PCI バ
バイト・レーン4(bit39~32)
スは、どの位の時間でデータ転送が終了するかは、ホス4番地のデータト PC の都合による。つまり、バースト転送中にリフレッ
バイト・レーン3(bit31~24)
シュを必要とするタイミングになってしまうかもしれな
3番地のデータ
い。そこで、その時には、PCI バスの方を待たせておき、
バイト・レーン2(bit23~16)
SDRAM の方はいったんデータ転送を打ち切って、リフ2番地のデータ
レッシュを行うこととした。リフレッシュ後に、
SDRAM
バイト・レーン1(bit15~8)
Controller は残りのアドレスを出力し、続きを行う。この1番地のデータ
辺が一番苦労した箇所である。リフレッシュによる中断
バイト・レーン0(bit7~0)0番地のデータ
そして再開が 15.6usec ごとにあるために、なかなかバグ

ビット幅
64

図 6:

47

x86 プロセッサのバイト・レーン

PC2のバイト・レーン配置

PC1のバイト・レーン配置
7番地

バイト・レーン6(bit55~48)
バイト・レーン5(bit47~40)

PC1とPC2間のバイト・レーン配置

5番地
4番地
3番地

バイト・レーン4(bit39~32)
バイト・レーン3(bit31~24)
バイト・レーン2(bit23~16)

バイト・レーン7(bit63~56)

バイト・レーン1(bit15~8)

バイト・レーン6(bit55~48)

2番地
1番地

バイト・レーン5(bit47~40)

バイト・レーン0(bit7~0)0番地

データ転送２回目

14番地
13番地
12番地
11番地

バイト・レーン7(bit63~56)

バイト・レーン3(bit31~24)

バイト・レーン6(bit55~48)

バイト・レーン2(bit23~16)

バイト・レーン5(bit47~40)

バイト・レーン1(bit15~8)

バイト・レーン4(bit39~32)

バイト・レーン0(bit7~0)

PC1の11番地のデータ

PC1の8番地のデータ

PC1の5番地のデータ

バイト・レーン3(bit31~24)
バイト・レーン2(bit23~16)

9番地

バイト・レーン変換機能付きFIFOでバイト・レー
ンを変換

バイト・レーン0(bit7~0)

8番地

図 7:

PC1の9番地のデータ
PC1の8番地のデータ

バイト・レーン5(bit47~40)

PC1の7番地のデータ

4番地 バイト・レーン4(bit39~32) PC1の6番地のデータ
3番地
2番地

バイト・レーン3(bit31~24)

PC1の5番地のデータ
バイト・レーン2(bit23~16)
バイト・レーン1(bit15~8)0番地

データ書き込をしない
データ書き込をしない
データ書き込をしない

PC1の9番地のデータ

PC1の6番地のデータ

バイト・レーン1(bit15~8)

5番地

バイト・レーン6(bit55~48)

バイト・レーン0(bit7~0)

PC1の10番地のデータ

PC1の7番地のデータ

10番地

6番地

1番地

15番地 バイト・レーン7(bit63~56) データ書き込をしない

データ転送２回目

15番地

バイト・レーン4(bit39~32)

PC1の12番地のデータ

データ転送１回目

データ転送１回目

6番地

7番地 バイト・レーン7(bit63~56)

バイト・レーン7(bit63~56)

14番地
13番地

バイト・レーン6(bit55~48)
バイト・レーン5(bit47~40)

データ書き込をしない
データ書き込をしない

12番地 バイト・レーン4(bit39~32) データ書き込をしない
11番地
10番地

バイト・レーン3(bit31~24)

データ書き込をしない

バイト・レーン2(bit23~16)

PC1の12番地のデータ
バイト・レーン1(bit15~8)

9番地
バイト・レーン0(bit7~0)

8番地

PC1の11番地のデータ
PC1の10番地のデータ

バイト・レーン変換機能を使用したデータ転送

前述した System Arbiter 内にある FIFO に実装されてい64 ビット幅のうちの 8 ビットを使用することになる。例る。これをBLTFIFO と呼ぶことにする。
えば 0 番地から 7 番地までのバイト・アクセスでは、64
バイト・レーン変換機能を説明するために、自分のビット幅のうち、違った場所のデータバスを使用するこPC(PC1
とする)の
5
番地から
12
番地のデータを他のとになる。これをバイト・レーンと呼ぶ。バイト・レーン
PC(PC2 とする)の 3 番地から 10 番地に送るとしよう。
を図 6 に示す。
以上のことを踏まえて、バイト単位でデータを読んで、 まずは、PC1 で 0 番地から 15 番地までのデータを DMA
それを違った番地に書き込むことを考えてみよう。まず、 で読み出す。次に BLTFIFO は 0～4 番地、13～15 番地
8 バイトの境界から、8 バイト単位でアクセスしていれば、 までのデータは捨てて、5～12 番地までのデータをバイ問題はない。しかし、そうでないと、単純なデータ転送で ト・レーン 0 から詰めなおし(この転送を Packed 転送とは問題の生ずる場合がある。例えば5 番地のデータをそ 呼ぶことにする)、詰めなおしたデータを PC2 に送る。
PC2 の BLTFIFO は、3 番地のバイト・レーン(バイト・の他の PC に送ろうとした時に、送り先の PC では 3 番
レーン3)にもう一度、詰めなおして、PC2 のメモリに
地にデータを入れたいとしよう。その場合には、5 番地のDMAで書き込む。
その際に、データは 8 バイト分だけな
バイト・レーンと3 番地のバイト・レーンが異なるため、ので、余計な分(0～２番地、
11～15 番地)は、書き込まな
単純に 64 ビット幅のデータを転送していたので、正しい(この転送を
Unpacked
転送と呼ぶことにする)。
そのくデータを転送することが出来ない。
様子を図
7
に示す。
図 6 で説明すると、5 番地はバイト・レーン 5 だが、3
BLTFIFO はバイト・レーン変換機能と FIFO から構
番地はバイト・レーン 3 になり、データを 64 ビット幅で成されている。バイト・レーン変換機能は図8のそのまま転送すると、自分の PC の 5 番地からのデータ
DFF0~7、
MUX1、
TR0~6、
MUX2-0~7から構成される。
を相手方の PC の 3 番地からに転送することは無理で
前述の Packed 転送の場合は、まずは必要な 5～7 番ある。その問題を解決するために、
DMA 転送時にバイト・地のデータを
MUX1 でバイト・レーンを変換してレーン変換機能を使用する。バイト・レーン変換機能はData Bus
64bit

8bit
DFF7

8bit
TR６

DFF６

TR５

DFF５

TR４

DFF４
DFF３

MUX1

TR３
TR２

DFF２

TR１

DFF１

TR０

DFF０

MUX2-7
MUX2-6
MUX2-5
MUX2-4
MUX2-3
MUX2-2
MUX2-1MUX2-0

図 8:

BLTFIFO の構成

48

FIFO
64bit
512D

TR0~2 にラッチする。次のクロックでDFF から出力され 面の FPGA の直下に実装し、FPGA の電源からの距離ている 8～15 番地のデータから 8～12 番地のデータを をより小さくしなければならない。
MUX2-3~7 で選択して FIFO に入力する。MUX2-0~2 は
TR0~2 のラッチされたデータ(5~7 番地のデータ)を選択 ７．謝辞
して FIFO に入力する。こうして、FIFO には 5～12 番地
Maestro2 システムの開発補助をさせていただいたシの 64 ビット幅 1 個に詰め替えられたデータが入力され、 ステム情報工学研究科コンピュータ・サイエンス専攻
他の PC に転送される。
の和田耕一教授に深く感謝いたします。また、共同制作
Unpacked 転送の場合は、PC1 の 5～12 番地のデータ 者である INESC-ID の山際伸一氏とシステム情報工学のうち 5～9 番地のデータだけが(図 8 の DFF0~4)は研究科の青木圭一氏に深く感謝いたします。
MUX2-0~4 を通って FIFO に入力される。PC1 の 10～
12 番地のデータ(図 8 の DFF5~7)は TR0~2 にラッチさ 参考文献
れる。次のクロック(つまり FIFO の次のエントリ)で、
TR0~2 にラッチされたデータは、MUX2-0~2 を通って [1] 小野雅晃,Xilinx 社製 FPGA を搭載した PCI ボードのシ
FIFO に入力される。入力されなかったデータは不定とミュレーション,平成 15 年度高エネルギー加速器研究
機構技術研究会報告集ポスターセッション(2004)
なる。
[2] Shinichi Yamagiwa, Keiichi Aoki, Masaaki Ono, Tetsuya
Sakurai, Koichi Wada, and Luis Miguel Campos.
Maestro2: A new challenge for high performance cluster
network. In The 6th World Multiconference on Systemics,
Cybernetics and Informatics, volume XI, Computer
Science II, pp.382-387, 2002.
[3] Keiichi Aoki, Shinichi Yamagiwa, Masaaki Ono, Koichi
Wada, Luis Miguel Campos. An architecture of highperformance cluster network : Maestro2. In 2003 IEEE
Pacific Rim Conference on Communications, Computers
and Signal Processing(PacRim03), 2003.
[4] Shinichi Yamagiwa, Kevin Ferreira, Luis Miguel Campos,
Keiichi Aoki, Masaaki Ono, Koichi Wada, Munehiro
Fukuda, Loenel Sousa. On the Performance of Maestro2
High Performance Network Equipment, Using New
Improvement Techniques. In 23rd IEEE International
Performance Computing and Communications
Conference(IPCCC 2004), 2004.
[5] Keiichi Aoki, Shinichi Yamagiwa, Kevin Ferreira, Luis
Miguel Campos, Masaaki Ono, Koichi Wada, Leonel
Sousa. Maestro2: High Speed Network Technology forHigh Performance Computing. In 2004 IEEE International
Conference on Communications (ICC 2004), 2004.

６．まとめ
本報告では、クラスタ向けのネットワークインターフ
ェース(NI)の開発について述べた。本 NI は、PC メモリ
上のデータを 0 コピーで転送する機能により、高速にデータを他の PC へ伝送できる。NI のピンポン転送時の実効最大スループットは 2.4Gpbs(Giga Bit Per Second)である。

NI 制作上の反省点としては、FPGA の電源用バイパ
ス・コンデンサ(パスコン)の位置が適切でなかったことが挙げられる。パスコンは当初あまり重要だとは考えてなかったため、パターン設計会社に実装位置を決定してもらった。図 9 に部品実装面のプリント配線パターン図
面の一部を示す。図 9 の緑色の四角形が FPGA、赤色の長方形がパスコンである。パスコンはFPGA の周りに実装されているのがわかる。このパスコンの位置では、
FPGA の電源からの距離が長くなり、電源のインピーダ
ンスが低くならないという欠点があることがわかった。
その結果として、100MHz 動作の LVDS インターフェー
ス用 IC へのデータパスにグラント・バウンズによるデータの誤りが生じてしまった。現在は、IO の出力電流値を12mA から 4mA に変更したところ、データの誤りはなくなった。本来ならば、パスコンの大きさを小さくして、裏49