(57)【特許請求の範囲】
【請求項１】
各々が異なる速度で動作するソースバスとデスティネーションバスの間のデータ転送を管理するための先入れ先出し（FIFO）ブリッジ装置であって、
可変数N個の個別のメモリバンクへの動的な分割が可能であり、前記メモリバンクの各々が、データ転送動作中に、前記ソースバスからデスティネーションバスへ転送されるデータを格納するメモリ装置と、
前記メモリ装置を分割するために動作可能であり、また、前記メモリバンクに予め格納されたすべてのデータが読出されるまで、前記メモリバンクへの書込みも禁止する方法で、ステータスフラグをセットするために協同する書込みコントローラおよび読出しコントローラを有するコントローラと、を有する、
ブリッジ装置。
【請求項２】
前記ブリッジ装置が単一の集積回路である、請求項1に記載のブリッジ装置。
【請求項３】
コントローラとメモリ装置を有するFIFOブリッジ装置において、異なる速度で動作するソースバスとデスティネーションバスの間のデータ転送を管理する方法であって、
前記メモリ装置をデータ転送動作中に転送されるデータを記憶する可変数Nの個別のメモリバンクに動的に分割するステップと、
前記N個の個別のメモリバンクの第1メモリバンク内にデータを書込むステップと、
前記第1メモリバンクが一杯である場合に、開始フラグをセットするステップと、
前記第1メモリバンクが一杯である場合に、前記N個の個別のメモリバンクの第2メモリバンク内へデータを書込むステップと、
前記第1メモリバンクが一杯であるかどうかを判断するために、前記第1メモリバンクの前記開始フラグをチェックするステップと、
前記開始フラグが一杯にセットされている場合、前記第1メモリバンク内に格納された前記データの読出しを開始するステップと、
において実行されるコントローラを有する、方法。
【請求項４】
前記読出し開始のステップが、前記第2メモリバンクが一杯になる前に実行される、請求項３に記載の方法。
【請求項５】
前記読出し開始のステップが、前記第2メモリバンクへのデータの書込みと同時に実行される、請求項４に記載の方法。
【請求項６】
前記第1メモリバンクからデータを読出し、前記データの読出しが完了した際に終了ステータスフラグをセットするステップをさらに有する、請求項５に記載の方法。
【請求項７】
前記コントローラが読出しコントローラと書込みコントローラを有し、前記方法が、
前記第2メモリバンクに最終ワードを書込んだ後に、前記書込みコントローラにより最終ステータスフラグをセットするステップと、
前記第1メモリバンクを読出した後に、前記読出しコントローラにより前記最終ステータスフラグを検出し、前記第2メモリバンク内のデータを読出すステップと、
をさらに有する、請求項５に記載の方法。
【発明の詳細な説明】
【発明の属する技術分野】
【０００１】
本発明は、データバッファリングに関するものであり、特に、異なる周波数で動作するバス間でやりとりされるバッファリングデータに関するものである。
【０００２】
【従来の技術】
一般的なコンピュータシステムには、そのシステムの様々な構成要素間のデータの流れを利用する多重データバスが含まれる。一般に、データバスは、異なる別の規格に従って動作する違うタイプのものであり、これには例えば、Ｉｎｄｕｓｔｒｙ−Ｓｔａｎｄａｒｄ Ａｒｃｈｉｔｅｃｔｕｒｅ （ＩＳＡ）、Ｅｘｔｅｎｄｅｄ Ｉｎｄｕｓｔｒｙ−Ｓｔａｎｄａｒｄ Ａｒｃｈｉｔｅｃｔｕｒｅ （ＥＩＳＡ）、Ｐｅｒｉｐｈｅｒａｌ Ｃｏｍｐｏｎｅｎｔ Ｉｎｔｅｒｆａｃｅ （ＰＣＩ）、Ｓｍａｌｌ Ｃｏｍｐｕｔｅｒ Ｓｙｓｔｅｍ Ｉｎｔｅｒｆａｃｅ （ＳＣＳＩ）規格がある。異なるタイプのデータバスを区別する特徴となるのは動作周波数、または、バスに接続される構成要素間でのバスのデータ転送速度である。典型的なコンピュータシステムにおいて、データは、異なる周波数で動作する別のバスに接続された装置間でごく普通に転送される。例えば、５０ ＭＨｚで動作するホストバスに接続されたマイクロプロセッサは、しばしば、データを８ ＭＨｚで動作するＰＣＩバスに接続された装置へと転送しなければならない。このような動作周波数の相違を吸収するために、コンピュータシステムは、データバス間にバッファリングシステムを備えている必要がある。
【０００３】
従来のバッファリングシステムは、先入れ先出し（ＦＩＦＯ）バッファに標準のメモリ装置を使用する。典型的なＦＩＦＯバッファは、通常２つのポートを備えている。１つは、第１データ速度で第１バスからデータを受け取り、もう１つは、第２データ速度でデータを第２バスへと転送する。ＦＩＦＯバッファリング方式は、ＦＩＦＯバッファからのデータのオーバフローまたはアンダーフローを防止するために、読出しおよび書込みコントローラを注意深く同期をとることが必要である。ＦＩＦＯバッファリング方式によっては、従来の「ダブル・バッファリング」技術で複数のＦＩＦＯバッファを生成するために、複数のメモリ装置を利用するものである。「ダブル・バッファリング」技術は、個別に指定されたバッファ対の一方が、他方のバッファが読出されている間に、これに書込まれたデータを保持する。個別のバッファは定期的に切り換えられる。
【０００４】
【発明が解決しようとする課題】
バッファの同期問題に対処するために様々な技術が使用されている。この内の１つは、相互に排他的な方法で動作する１つのバッファに書込み側と読出し側を設けるものである。書込み制御回路が、バッファが一杯になるまでデータをバッファに書込み、次に、データの読出しを開始するために読出し制御回路に信号を送る。読出しが完了すると、読出し制御回路から書込み制御回路に信号を送って、バッファへの書込みを再開する。この処理は、全てのデータが転送されるまで繰り返される。これは、データの完全性を保証する絶対確実な方法であるが、欠点は、バッファの少なくとも片方が任意の所定時間においてアイドル状態にあるため待ち時間が長くなることである。
【０００５】
ＦＩＦＯが空／一杯状態にあるか判断するための別の方法として、ＦＩＦＯの読出しポインタと書込みポインタを比較するものがある。２つのポインタを比較し、最終動作が書込みコマンドである場合、ＦＩＦＯは一杯である。２つのポインタを比較し、最終動作が読出しコマンドである場合、ＦＩＦＯは空である。この方法は、読出しおよび書込み制御回路が両方とも同じクロック速度で実行されている場合に有効である。両側が異なるクロック速度で実行されている場合は、間違った、あるいは不確定な空／一杯状態になる可能性があり、そのためデータが壊れることがある。
【０００６】
従って、本発明の発明者は、異なる周波数で動作するバス間でやりとりされるデータをバッファリングする、より優れた方法が必要であると結論付けている。本発明は、この目的を達成するためのシステムおよび方法を提供する。
【０００７】
【課題を解決するための手段】
本発明は、異なる速度でデータを転送するバス間のデータのバッファリングで使用する「仮想ＦＩＦＯ」システムである。このシステムは、各々が個別のデータバッファとして動作するべく構成された複数のバンクに分割されたメモリ装置を備えている。このようなメモリの分割は、動的に「実行中」に行うことができる。本発明は、ＦＩＦＯ状態のあいまいさを除去し、その一方で、読出し動作と書込み動作の両方を同時に行うことにより、ＦＩＦＯの効率を維持するものである。
【０００８】
好適な実施例において、メモリ装置は２つのポート（一方は読出し、他方は書込み）を備えた、ＦＩＦＯとして構成されたランダムアクセス（ＲＡＭ）装置である。２ポートＲＡＭにより、ＦＩＦＯの読出し側および書込み側の両方からの、ＲＡＭのあらゆる位置への独立した、ランダムアクセスが可能になる。書込みコントローラはＲＡＭへの書込みストローブを生成し、書込みアドレス生成を制御する。読出しコントローラは、読出しアドレス生成を制御する。
【０００９】
ＲＡＭ ＦＩＦＯによって読出しおよび書込みアクセスが同時に行える一方で、どの特定のバンクについても、２つの動作の内の１つだけが許容されるため、読出しコントローラと書込みコントローラが同じ論理バンクに同時にアクセスすることは絶対にない。これにより、あらゆるオーバフローおよびアンダーフロー状態が防止できる。
【００１０】
一実施例では、システムは、各データバッファに対応したステータスフラグを備えており、あるフラグは、データバッファにデータを書込めるかどうかを示し、また、別のフラグは、データバッファからデータを読出せるかどうかを示している。ステータスフラグは、メモリ装置自体内、または別のメモリ構造内に設けることができる。別の実施例では、データバッファの読出し／書込み状態を示すために１つの２進ステータスフラグを使用している。
【００１１】
別の実施例では、メモリ装置を複数のデータバッファバンクに分割するコントローラは、さらに、データバッファへのデータの書込みおよびデータバッファからのデータの読出しを管理する。コントローラは、いつデータバッファへデータを書込むか、また読出すかを決定するために、上述のステータスフラグを使用する個別の書込みコントローラと読出しコントローラを備えていてもよい。
【００１２】
本発明は、以下の複数の利点を備えている。
・従来のシステムよりも安価な、効率的で効果的なデータバッファリングシステムを構成する複数のデータバッファを生成するために、単一のメモリ装置を使用することができる。
・１つ以上のデータトランザクションを、インターリーブで、あるいは同時に、バッファリングシステムに書込みおよび読出しを行うことができる。
・アンダーフローまたはオーバフローを起こすことなく、また、バスの動作周波数が実質的に一致していなくても、異なる周波数で動作する２つのバス間でデータをバッファするために、単一のメモリ装置を使用することができる。
【００１３】
【発明の実施の形態】
図１を参照すると、コンピュータシステム１０は、そのコンピュータシステムの構成要素間のデータ転送を容易にするデータバスを少なくとも２つ備えている。これらのデータバスの内の１つであるプライマリバスは、コンピュータの中央処理装置（ＣＰＵ）１４とメインメモリ１６に関連するデータ処理を実行するための「ホスト」バスである。ホストバス１２は第１周波数（例えば、５０ ＭＨｚ）で動作する。セカンダリバス１８は、コンピュータシステム１０内のその他の装置２０、２２に関連する処理を実行する。この処理には、装置２０、２２間の処理と、複数の装置２０、２２とＣＰＵ １４との間の処理が含まれる。セカンダリバスは任意のタイプのデータバスであってよく（例えば、ＩＳＡ、ＥＩＳＡ、ＰＣＩ、ＳＣＳＩ）、第２周波数（例えば、８ ＭＨｚ）で動作する。セカンダリバス１８に接続される装置２０、２２は任意のタイプの装置であってよい。これには、ビデオカードまたはネットワークインターフェースカード（ＮＩＣ）といった周辺装置と、キーボードまたはプリンタといった入力／出力（Ｉ／Ｏ）装置とが含まれる。
【００１４】
プライマリバス１２とセカンダリバス１８は、この２つのバス間のトランザクションを管理するブリッジ装置２４によって接続されている。ブリッジ装置２４は、他方のバスへ転送するために一方のバスから送出されるコマンドを翻訳するトランスレータとして、また、そのコマンドに関連するデータ転送をするバッファリングシステムとして機能する。ブリッジ装置２４が採用しているバッファリング方式については後述する。プライマリバスコントローラ２６は、ＣＰＵ１４からの競合する要求と、プライマリバス１２へアクセスするためのブリッジ装置２４とを従来の方法で管理する。
【００１５】
同様に、セカンダリバスコントローラ２８は、装置２０、２２からの競合する要求と、セカンダリバス１８へアクセスするためのブリッジ装置２４とを管理する。
【００１６】
次に、図２を参照すると、ブリッジ装置２４は「仮想ＦＩＦＯ」バッファリング方式を採用している。「仮想ＦＩＦＯ」バッファリング方式は、１つのＦＩＦＯメモリ装置３１が、コントローラ３２によってＮ個の個別のメモリ領域（「バンク」）３２−１、３２−２、…３２−Ｎに分割されている。各バンクがメモリアドレスの連続するブロックを備えていることが好ましい。コントローラ３５はバンク３２−１、３２−２、…３２−Ｎを個別のＦＩＦＯバッファとして扱い、これらの各々は、独立した、または他のバンクと共通のデータを格納してもよい。例えば、バンク３２−１、３２−２、…３２−Ｎを、複数の個別のトランザクションに関連するデータをバッファリングするために別々に使用してもよいし、または、数は少ないがより大規模な処理に関するデータをバッファリングするためにまとめて使用してもよい。バンクのサイズは、１ワードのデータ（例えば２バイト）からメモリ装置３１の全記憶容量までの範囲内であってよい。従って、メモリ装置３１は、１個のバンクしか含まないこともあり、またはメモリ装置が格納できるのと同じだけの多くのデータワードを含むことができる。いずれのサイズを採るかは、読出しおよび書込みコントローラが監視する必要のあるステータスフラグの数、コントローラの複雑性、ＦＩＦＯの効率によって決まる。これはつまり、Ｎが大きくなるに従ってＦＩＦＯ効率は増すが、ステータスフラグの数とコントローラの複雑性も増すことを意味している。例示した実施例では、コントローラによって生成され保持されるメモリマップ４０が、生成されたバンクの数に関係なく、バンク３２−１、３２−２、…３０−Ｎの境界を定義するメモリアドレスを識別する。
【００１７】
書込みコントローラ４２は、データのバンク３２−１、３２−２、３２−Ｎへの書込みを管理し、読出しコントローラ４４は、バンクからのデータの読出しを管理する。書込みおよび読出しコントローラ４２、４４は、例えばステートマシンとして実現することができる。書込みおよび読出しコントローラ４２、４４は、メモリ装置３１内のあるバンクへのデータの書込みと、別のバンクからの読出しとを同時に行うことができる。コントローラ４２、４４は、装置に、バンクが空の際にそのバンクへの書込みを開始させ、バンクが一杯である場合にのみ、そのバンクからの読出しを開始させることで、バッファ内のデータの完全性を保証している。
【００１８】
バンク３２−１、３２−２、…３２−Ｎの各々は、次に示す少なくとも２つの関連するステータスフラグを備えている。１つは、対応するバンク３２−１、３２−２、…３２−Ｎが空であり、書込み装置からのデータを受け取ることができることを書込みコントローラ４２に示す「終了」フラグ３４−１、３４−２、…３４−Ｎであり、もう１つは、対応するバンクが一杯であり、読出し装置にデータを供給することができることを読出しコントローラ４４が示す「開始」フラグ３６−１、３６−２、…３６−Ｎである。書込み装置がバンクにデータを書込み始めると、書込みコントローラ４２がそのバンクの「終了」フラグをクリアする。バンクが一杯である際に、あるいは、バンクが一杯になる前に、書込み装置がそのデータの転送を終了する際に、書込みコントローラ４２がバンクの「開始」フラグをセットする。同様に、読出し装置がバンクからデータの読出しを開始した際に、読出しコントローラ４４がバンクの「開始」フラグをクリアし、バンクが空である際に「終了」フラグをセットする。好適な実施例では、データ転送の開始時と「電源投入」時とに、「開始」フラグおよび「終了」フラグの両方がクリアされる。データの完全性を最大にするためには、さらにバンクの「開始」フラグを使用して、その同じバンクの「終了」フラグをクリアする。このようなインタロックハンドシェーク機構により、ＦＩＦＯの両側からのクロック速度を互いに完全に独立させることが可能になり、また、動作範囲に制限はなくなる。
【００１９】
「開始」フラグと「終了」フラグは、次に示すいくつかの位置の内どこに設けても構わない。バンク３２−１、３２−２、…３２−Ｎ内、バンク３２−１、３２−２、…３２−Ｎ内を除いたメモリ装置内、または例えばレジスタ（レジスタ３８は、メモリ装置３１に「開始」フラグと「終了」フラグを設けなければ存在しない）のような別のメモリ構造３８。あるいは、書込み読出しコントローラ４２、４４は内部の「開始」フラグと「終了」フラグを保持し、また、各コントローラ４２、４４は、バッファを一杯または空にしたら、その他のコントローラ４４、４２に対してメッセージを直接送信することができる。
【００２０】
別の実施例では、「開始」と「終了」を示すために１つの２進ステータスフラグが使用される。この場合、書込みコントローラ４２は、そのバンクのためのフラグが「終了」に設定されるまでそのバンクに書込むことができない。次に、書込みコントローラ４２はそのバンクに書込みをし、書込みが終わると、対応するフラグを「開始」にリセットする。同様に、読出しコントローラ４４は、対応するフラグが「開始」にリセットされるまでバンクからの読出しができない。１つのバンクの読出しが完了したら、読出しコントローラ４４が対応するフラグを「終了」にリセットする。しかし、この実施例では、あるコントローラがフラグの状態を読出してこの状態に基づいて動作し、別のコントローラがフラグを変更する、「競争」状態を防止するために注意を払う必要がある。
【００２１】
データバス１２、１４のデータ転送速度に関係なく「仮想ＦＩＦＯ」バッファリング方式が適切に機能するようにするために、書込みコントローラ４２が、その「開始」フラグの設定を読出しコントローラの内部クロック（図示せず）と同期化させ、また、読出しコントローラ４４が、「終了」フラグのその設定を書込みコントローラの内部クロック（図示せず）と同期させる。「開始」フラグと「終了」フラグは、読出しおよび書込みコントローラ４２、４４が絶対に同時に論理バンクにアクセスしないようにする機構を提供する。これにより、あらゆるオーバフローとアンダーフロー状態が回避される。「仮想ＦＩＦＯ」バッファリング方式は、データバスの動作周波数が大きく相違するにも関わらず、十分なバッファリングを提供する。
【００２２】
ブリッジ装置２４には、複数のデータバッファバンクを備えた少なくとも１つのメモリ装置３１に加え、１つ以上のメモリ装置４６を追加してもよい。また、メモリ装置４６の各々を上述したように分割してもよい。この場合、ブリッジ装置２４内にある全てのメモリ装置を管理するためにメモリコントローラ３５を使用することもできるし、または、ブリッジ内の各メモリ装置に個別のメモリコントローラを設けることもできる。メモリ装置３１、４６の各々を、単一のランダムアクセスメモリ集積回路として実現することができる。あるいは、このようなメモリ装置３１、４６を、こうした集積回路を備え、単一のアドレス指定可能装置として機能するメモリモジュール（例えば、ＳＩＭＭまたはＤＩＭＭ）として実現することもできる。いずれの場合も、メモリ装置３１、４６は、揮発性または不揮発性メモリを備えることができ、また、任意のＲＡＭタイプ（例えば、ＤＲＡＭ、ＳＲＡＭ、ＥＤＯ−ＲＡＭ等）であってよいが、スタティックＲＡＭであることが好ましい。メモリ装置３１、４６は同じサイズのバンクに分割することができ、バンクは例えば非対称データ転送を使用したアプリケーションにおいて有用である、バンクは異なるサイズにすることもできる。各メモリ装置を１回だけ固定的に分割してもよく、また、バンクを必要に応じて動的に分割してもよい。上述した「開始」および「終了」フラグは、一般にはサイズが１ビットであるが、その他のサイズのフラグ（例えば、ニブル、バイト、ワード等）を使用することもできる。あるいは、上述したように、「開始」と「終了」フラグの対に１ビットを使用してもよい（すなわち、「開始」と「終了」状態を示すために、ハイとローの論理レベルの間で切り換える）。
【００２３】
各バンクに、これと関連する、バンクがカレントデータ転送動作の最終バンクであることを示す「最終」フラグを任意で設けることもできる。このような構成において、ＦＩＦＯにデータが連続的に書込まれる（すなわち、バンク３２−１が一杯になるまで書込まれ、次に、バンク３２−２、…、３２−Ｎと続き、３２−１へと戻る）。同様にデータの読出しも連続的に行われる。
【００２４】
バンクが一杯になると、書込みコントローラ４２が対応する「開始」フラグをそのバンクにセットする。バンクの最終位置が書込まれると、書込みコントローラ４２が次のバンクの「開始」フラグをチェックする。その「開始」フラグがクリアされると（そのバンクは空である）、書込みコントローラ４２は書込み動作を継続する。次のバンクの「開始」フラグがクリアされない場合（バンクは空ではない）、書込み動作が一旦停止する。
【００２５】
しかし、書込みコントローラ４２は次のバンクの「開始」フラグの監視を引き続き行う。「開始」フラグがクリアされると、書込み動作が再開する。データ転送の最終ワードがバンクに書込まれると、書込みコントローラ４２がそのバンクの「開始」フラグをセットし（バンクが一杯であってもなくても）、さらにそのバンクの「最終」フラグをセットする。
【００２６】
読出しコントローラ４４は、「開始」フラグをセットしたバンクから読出しを行う。バンクの読出しが終わると、読出しコントローラ４４がそのバンクの「終了」フラグをセットする。この「終了」フラグは、そのバンクが書込み可能であることを示す。バンクの最終位置が読出されると、読出しコントローラ４４が次のバンクの「開始」フラグをチェックする。「開始」フラグがセットされている場合（バンクがレディ状態である）、読出しコントローラ４４が読出し動作を継続する。「開始」フラグがセットされていない場合（バンクがレディ状態でない）、読出し動作が一旦停止する。しかし、読出しコントローラ４４は次のバンクの「開始」フラグの監視を引き続き行う。「開始」フラグがセットされると読出し動作が再開する。カレントバンクが「開始」ステータスフラグと「終了」ステータスフラグの両方を備えている場合、読出しコントローラ４４は、これがカレントデータ転送動作の最終バンクであることを認識する。従って、読出しコントローラ４４は、読出しポインタと書込みポインタとが一致し、バンクに「終了」フラグをセットするまで、バンクからのデータの読出しを続ける。
【００２７】
別の実施例では、各書込み動作のバイト数またはワード数が読出しコントローラ４４に通知される。この構成では、「最終」ステータスフラグは必要ない。
【００２８】
図３は、本発明の一実施例を示すタイミング図である。このタイミング図は、ＦＩＦＯメモリ装置３１は４８行×３２ワードの構成を使用した、９６ワードのデータ転送を示し、また、この装置は３つのバンクに分割されている。さらに、「開始」ビットと「終了」ビットの間のハンドシェークも示している。この例において、書込みクロックは読出しクロックの倍の速度である。
（Ｗ１）  バンク１の最終位置への書込みの後、開始１フラグがセットされる。
（Ｗ２）  バンク２の最終位置への書込みの後、開始２フラグがセットされる。
（Ｗ３）  バンク３の最終位置への書込みの後、開始３フラグがセットされる。
（Ｗ４）  開始１フラグのセットにより、読出しコントローラが読出しを開始する。
（Ｗ５）  ２回目のバンク１への書込みの後、終了１フラグがリセットされる。
（Ｗ６）  ２回目のバンク２への書込みの後、終了２フラグがリセットされる。
（Ｗ７）  ２回目のバンク３への書込みの後、終了３フラグがリセットされる。
（Ｗ８）  各バンクの読出しの後、読出しコントローラが次のバンクの開始ビットをチェックする。この場合、読出しを継続するようにセットされる。
（Ｗ９）  バンク３への書込み終了後、書込みコントローラは開始１フラグがまだセットされている（バンク１が空でない）ことを通知するため、ＷＲＥＮがディセーブルされる（ＦＩＦＯへの書込みを中止する）。開始１フラグがクリアされた後に、書込み動作が継続する。
（Ｒ１）  バンク１内の最終位置のデータを読出した後に、開始１フラグをリセットする終了１フラグがセットされる。
（Ｒ２）  バンク２内の最終位置のデータを読出した後に、開始２フラグをリセットする終了２フラグがセットされる。
（Ｒ３）  バンク３内の最終位置のデータを読出した後に、開始３フラグをリセットする終了３フラグがセットされる。
（Ｒ４）  バンク３内の最終位置のデータを読み出した後に、読出しコントローラが、次のバンク（バンク１）の開始ビットがセットされていないことを検出し、読出し動作を停止する。
【００２９】
本発明の多くの実施例を説明してきたが、本発明の精神と範囲を逸脱せずに、様々な変更が可能である。例えば、ホストバスに関係したデータトランザクション以外に、本発明を、ＰＣＩ−ｔｏ−ＰＣＩバストランザクション、またはＰＣＩ−ｔｏ−Ｉ／Ｏバストランザクションのような、その他のタイプのバス間のデータトランザクションに使用することもできる。従って、その他の実施例は後述の特許請求の範囲内にある。
【００３０】
【図面の簡単な説明】
【図１】コンピュータシステムにおける各種構成要素を示すブロック図である。
【図２】異なる周波数で動作するデータバス間でやりとりされるデータをバッファするシステムのブロック図である。
【図３】本発明の一実施例のタイミング図である。
【図１】
0003598321.tif 000002
【図２】
0003598321.tif 000003
【図３】
0003598321.tif 000004