(57)【要約】【課題】記憶容量が固定のＦＩＦＯ回路が利用され、且つ出力先でデータの入力の滞留が起こった場合に、ＦＩＦＯ回路におけるデータの入力の停滞を低減させることができるデータバッファ装置を提供する。【解決手段】少なくとも３つのＦＩＦＯ回路と、スイッチと、マルチプレクサと、ＦＩＦＯ管理回路とを備える。スイッチと、マルチプレクサと、ＦＩＦＯ管理回路とは、３つ以上のＦＩＦＯ回路を、複数のＦＩＦＯグループとして動作させる。１つのＦＩＦＯグループは、少なくとも１つのＦＩＦＯ回路を含み、各ＦＩＦＯ回路が多くとも１つのグループに含まれるグループであり、１つのＦＩＦＯグループに含まれるすべてのＦＩＦＯ回路が連結された１つのＦＩＦＯとして動作する。【選択図】      図１
2017102560.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも３つのＦＩＦＯ回路と、
少なくとも１つの前記ＦＩＦＯ回路を含み、各前記ＦＩＦＯ回路が多くとも１つのグループに含まれる前記グループであり、１つの前記グループに含まれるすべての前記ＦＩＦＯ回路が連結された１つのＦＩＦＯとして動作するＦＩＦＯグループの、構成要素を示すＦＩＦＯグループ構成情報を保持し、
いずれの前記ＦＩＦＯグループにも含まれない前記ＦＩＦＯ回路が存在し、且つ１つの前記ＦＩＦＯグループの空き容量が所定の閾値以下である場合に、前記空き容量が前記閾値以下である前記ＦＩＦＯグループに、いずれの前記ＦＩＦＯグループにも含まれない前記ＦＩＦＯ回路を追加し、
１つの前記ＦＩＦＯグループに含まれる２つ以上の前記ＦＩＦＯ回路のうちの１つが空である場合に、前記空である前記ＦＩＦＯ回路を、それが属する前記ＦＩＦＯグループから削除し、
前記ＦＩＦＯグループへデータを入力するための第１の入力指示を送信し、
前記ＦＩＦＯグループからデータを出力するための第１の出力指示を送信する
ＦＩＦＯ管理回路と、
前記第１の入力指示に基づいて、第１の入力インターフェースから第１の系統のデータを入力し前記第１の系統のデータを第１の前記ＦＩＦＯグループに出力するか、又は第２の入力インターフェースから第２の前記系統のデータを入力し前記第２の系統のデータを第２の前記ＦＩＦＯグループに出力する
スイッチと、
前記第１の出力指示に基づいて、前記ＦＩＦＯグループから入力したデータを出力インターフェースへ出力するマルチプレクサと、
を備えたことを特徴とするデータバッファ装置。
【請求項２】
前記スイッチは、前記ＦＩＦＯ回路毎に１つの入力側セレクタを含み、
各前記入力側セレクタは、前記第１の入力指示に基づいて、前記第１の系統のデータ若しくは前記第２の系統のデータいずれも出力しないか、前記第１の系統のデータを前記第１のＦＩＦＯグループに含まれる前記ＦＩＦＯ回路に出力するか、又は前記第２の系統のデータを前記第２のＦＩＦＯグループに含まれる前記ＦＩＦＯ回路に出力する
ことを特徴とする請求項１に記載のデータバッファ装置。
【請求項３】
前記マルチプレクサは、
すべての前記ＦＩＦＯ回路の出力に接続された、前記第１のＦＩＦＯグループ又は前記第２のＦＩＦＯグループ毎の出力側セレクタと、
すべての前記出力側セレクタの出力に接続された１つの系統セレクタと
を含み、
前記第１の出力指示は、前記出力側セレクタへの入力元の前記ＦＩＦＯ回路を指定する第２の出力指示と、前記系統セレクタへの入力元の前記出力側セレクタを指定する第３の出力指示とを含む
ことを特徴とする請求項１又は２に記載のデータバッファ装置。
【請求項４】
前記ＦＩＦＯ管理回路は、
いずれの前記ＦＩＦＯグループにも含まれない前記ＦＩＦＯ回路のリストを保持する空ＦＩＦＯ管理回路と、
前記ＦＩＦＯグループ毎の系統毎ＦＩＦＯ管理回路と、
すべての前記系統毎ＦＩＦＯ管理回路からの前記第３の出力指示を調停した結果である第４の出力指示を前記系統セレクタに出力する調停回路と、
を備えたことを特徴とする請求項１乃至３のいずれか１項に記載のデータバッファ装置。
【請求項５】
前記空ＦＩＦＯ管理回路は、前記リストに含まれる前記ＦＩＦＯ回路の割り当てを要求するＦＩＦＯ獲得要求通知を前記系統毎ＦＩＦＯ管理回路から受信した場合に、前記リストに含まれる前記ＦＩＦＯ回路があれば、前記リストから削除した前記ＦＩＦＯ回路を割り当てるＦＩＦＯ獲得リプライを前記系統毎ＦＩＦＯ管理回路へ送信し、前記リストに含まれる前記ＦＩＦＯ回路がなければ、割り当て可能な前記ＦＩＦＯ回路が無いことを示すＦＩＦＯ未獲得リプライを前記系統毎ＦＩＦＯ管理回路へ送信し、
前記空ＦＩＦＯ管理回路は、前記ＦＩＦＯグループから削除された前記ＦＩＦＯ回路を通知するＦＩＦＯ解放通知を前記系統毎ＦＩＦＯ管理回路から受信した場合に、
前記削除された前記ＦＩＦＯ回路を前記リストに追加する
ことを特徴とする請求項４に記載のデータバッファ装置。
【請求項６】
前記系統毎ＦＩＦＯ管理回路は、前記ＦＩＦＯグループの空き容量が前記所定の閾値以下である場合に、前記ＦＩＦＯ獲得要求通知を前記空ＦＩＦＯ管理回路に送信し、前記空ＦＩＦＯ管理回路から前記ＦＩＦＯ獲得リプライを受信したならば、前記ＦＩＦＯ獲得リプライが示す前記ＦＩＦＯ回路を空き容量が前記所定の閾値以下である前記ＦＩＦＯグループに追加し、前記空ＦＩＦＯ管理回路から前記ＦＩＦＯ未獲得リプライを受信したならば、前記ＦＩＦＯ獲得リプライの受信を待機する
ことを特徴とする請求項５に記載のデータバッファ装置。
【請求項７】
少なくとも３つのＦＩＦＯ回路を備えたデータバッファ装置において、
少なくとも１つの前記ＦＩＦＯ回路を含み、各前記ＦＩＦＯ回路が多くとも１つのグループに含まれる前記グループであり、１つの前記グループに含まれるすべての前記ＦＩＦＯ回路が連結された１つのＦＩＦＯとして動作するＦＩＦＯグループの、構成要素を示すＦＩＦＯグループ構成情報を保持し、
いずれの前記ＦＩＦＯグループにも含まれない前記ＦＩＦＯ回路が存在し、且つ１つの前記ＦＩＦＯグループの空き容量が所定の閾値以下である場合に、前記空き容量が前記閾値以下である前記ＦＩＦＯグループに、いずれの前記ＦＩＦＯグループにも含まれない前記ＦＩＦＯ回路を追加し、
１つの前記ＦＩＦＯグループに含まれる２つ以上の前記ＦＩＦＯ回路のうちの１つが空である場合に、前記空である前記ＦＩＦＯ回路を、それが属する前記ＦＩＦＯグループから削除し、
第１の入力インターフェースから第１の系統のデータを入力し前記第１の系統のデータを第１の前記ＦＩＦＯグループに出力するか、又は第２の入力インターフェースから第２の前記系統のデータを入力し前記第２の系統のデータを第２の前記ＦＩＦＯグループに出力し、
前記ＦＩＦＯグループから入力したデータを出力インターフェースへ出力する
ことを特徴とするＦＩＦＯ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＦＩＦＯ（First In, First Out）型データバッファ回路を利用したデータバッファ装置、及びＦＩＦＯ制御方法に関する。
【背景技術】
【０００２】
プロセス間でデータを転送するバッファ技術の一例が、特許文献１に開示されている。特許文献１のバッファ管理サブシステムは、バッファ・メモリと、宛先プロセス毎のバッファ・ポインタＦＩＦＯとを含む。バッファ・ポインタＦＩＦＯは、各宛先プロセスへ転送される発信元プロセスからのデータを記憶するために使用される空バッファを示すポインタをバッファ・メモリに記憶する。バッファ管理サブシステムは、宛先プロセスへ転送すべきデータを受けると、各宛先プロセスに対応するバッファ・ポインタＦＩＦＯからバッファ・ポインタを取り出す。バッファ管理サブシステムは、発信元プロセスから宛先プロセスへデータを転送するために、このバッファ・ポインタを使用する。上記の動作の結果、特許文献１のバッファ管理サブシステムは、空バッファのプールから、プロセス間でデータを転送するためのバッファを効率的に割り当てる。
【０００３】
複数のＣＰＵの間における排他処理の頻度を低減するバッファ技術の一例が、特許文献２に開示されている。特許文献２のパケット処理装置は、振分ＣＰＵと、複数の並列処理ＣＰＵと、並列処理ＣＰＵ毎のＦＩＦＯ部とを含む。振分ＣＰＵは、各並列処理ＣＰＵに対してパケットの処理を振り分けると同時に、処理に使用するバッファ領域の獲得処理又は割当処理を実行する。また、各並列処理ＣＰＵの処理が完了した際には、各並列処理ＣＰＵは解放対象となったバッファ領域を対応するＦＩＦＯ部に登録し、振分ＣＰＵはバッファ領域の解放処理を実行する。上記の動作の結果、特許文献２のパケット処理装置では、バッファ領域の割り当てや解放の際にも、バッファを管理する情報に対して振分ＣＰＵのみがアクセスするので、複数のＣＰＵからのアクセスが競合することがない。すなわち、バッファの割り当てや解放に際しても排他処理が不要である。従って、特許文献２のパケット処理装置では、パケットに対する処理を複数のＣＰＵが並列して実行する場合に、複数のＣＰＵの間における排他処理の頻度が低減される。
【０００４】
２つのＦＩＦＯ間において記憶容量の動的制御を行うバッファ技術の一例が、特許文献３に開示されている。特許文献３のデータ転送システムは、２つの転送ＦＩＦＯを含む。転送ＦＩＦＯは、複数の領域を含む。特許文献３のデータ転送システムでは、一方の転送ＦＩＦＯバッファの空き領域が所定の大きさ以下になると、他方の転送ＦＩＦＯバッファの空き領域の一時的な割り当てを要求する。上記の動作の結果、特許文献３のデータ転送システムでは、一方の転送ＦＩＦＯバッファに他方の転送ＦＩＦＯバッファの空き領域が動的に付け替えられて、見掛け上、前者の転送ＦＩＦＯバッファの記憶容量が大きくなったように制御される。
【０００５】
コンピュータシステムでは、制御部・演算部−主記憶間、ＩＯ（Input/Output）−主記憶間、又はインターコネクト−主記憶間において効率的なデータ転送を行うために、複数のＦＩＦＯとクロスバースイッチとが多段に設けられることがある。この際、ＦＩＦＯには、記憶容量が固定のＦＩＦＯ回路が利用されることが多い。
【０００６】
図１２は、記憶容量が固定のＦＩＦＯ回路が用いられたデータバッファ装置の構成の一例を示すブロック図である。なお、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号の向きを限定するものではない。
【０００７】
本例のデータバッファ装置１０９は、入力インターフェース１８３、１８４と、出力インターフェース１０３と、ＦＩＦＯ回路１１８、１１９と、ＦＩＦＯ管理手段１３９と、マルチプレクサ１７９とを含む。
【０００８】
入力インターフェース１８３、１８４は、それぞれ別々のデータの転送元とのインターフェースである。入力インターフェース１８３、１８４は、それぞれのデータの転送元から送信されるデータを受信する。なお、図１２では、理解を容易にするために、データの転送元ＦＩＦＯ２００、２０１に保持されているデータが模式的に示されている。また、図１２では、理解を容易にするために、入力インターフェース１８３、１８４はそれぞれ、分配装置１８０、１８１に接続されている。分配装置１８０、１８１はそれぞれ、転送元２００、２０１からのデータを入力インターフェース１０１、１０２から受信し、「系統」毎に分配する。分配装置の他の出力は、別のデータバッファ装置の入力インターフェース１８２、１８５に接続される。「系統」は、例えば、データの転送元装置とデータの転送先装置との組み合わせにより決定される。
【０００９】
出力インターフェース１０３は、データの転送先とのインターフェースである。出力インターフェース１０３は、データの転送先に対してデータを送信する。なお、図１２では、理解を容易にするために、転送済データ２９０が模式的に示されている。
【００１０】
ＦＩＦＯ回路１１８、１１９はそれぞれ、同時に最大で１エントリのデータの書込み、及び同時に最大で１エントリのデータの読出しができるＦＩＦＯ回路である。ＦＩＦＯ回路１１８、１１９の保持可能な最大のエントリ数（記憶容量）は、同一の固定値（図１２では“５”）である。なお、図１２では、理解を容易にするために、ＦＩＦＯ回路１１８、１１９に保持されているデータが模式的に示されている。
【００１１】
また、ＦＩＦＯ回路１１８、１１９にはそれぞれ、入力インターフェース１８３、１８４からデータが入力されたときに、入力したデータが書込まれる。また、ＦＩＦＯ回路１１８、１１９は、ＦＩＦＯ回路内に出力可能なデータがある場合には、ＦＩＦＯ管理手段１３９からの出力指示に従ってマルチプレクサ１７９が制御され、格納したデータを読出す。
【００１２】
ＦＩＦＯ管理手段１３９はそれぞれ、入力インターフェース１８３、１８４から入力されたデータのＦＩＦＯ回路１１８、１１９への書込みの制御、及びＦＩＦＯ回路１１８、１１９からのデータの読出しの制御を行う。また、ＦＩＦＯ管理手段１３９は、データがＦＩＦＯ回路１１８、１１９に存在し、読出し可能な状態であるときに、出力インターフェース１０３からのデータの出力を要求するための出力指示をマルチプレクサ１７９に送信する。
【００１３】
マルチプレクサ１７９は、ＦＩＦＯ回路１１８、１１９から出力されたデータを、ＦＩＦＯ管理手段１３９からの出力指示に従って、出力インターフェース１０３から出力する。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２０００−０９００４２号公報
【特許文献２】国際公開第２００９／０９６０２９号
【特許文献３】特開２００３−３１８９４０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
データバッファ装置１０９では、例えば、ＦＩＦＯ回路１１８の使用領域が記憶容量に達すると、転送元ＦＩＦＯ２００から、それ以上のデータを入力することができない。図１２において、データを示す符号の先頭の英字はデータの系統を、続く数字は系統内での出力順を示す。また、“Ａ”系統と“Ｄ”系統のデータの発生量は同じで、“Ｂ”系統と“Ｃ”系統のデータの発生量は“Ａ”系統のデータの発生量の半分であるものとする。また、ＦＩＦＯ回路１１８は“Ａ”系統のデータを処理し、ＦＩＦＯ回路１１９は“Ｂ”系統のデータを処理するものとする。図１２では、ＦＩＦＯ回路１１８がデータ“Ａ５”から“Ａ９”により一杯になり、転送元ＦＩＦＯ２００のデータ“Ａ１０”を入力できないという状況を示す。
【００１６】
また、データバッファ装置１０９では、例えば、ＦＩＦＯ回路１１８の使用領域が記憶容量に達すると、データ転送元ＦＩＦＯ２００は、先頭の系統と別系統のデータも出力することができない。図１２では、ＦＩＦＯ回路１１８がデータ“Ａ５”から“Ａ９”により一杯になり、データ転送元ＦＩＦＯ２００は、先頭の“Ａ”系統と別の“Ｃ”系統のデータ“Ｃ５”を出力することができないという状況を示す。
【００１７】
通常、バッファ技術では、データの系統毎にＦＩＦＯ回路が分けられる。ところが、記憶容量が固定のＦＩＦＯ回路が利用されるバッファ技術では、出力先でデータの入力の滞留が起こった場合に、ＦＩＦＯ回路でデータの入力が停滞しやすいという問題がある。
（発明の目的）
本発明の主たる目的は、記憶容量が固定のＦＩＦＯ回路が利用され、且つ出力先でデータの入力の滞留が起こった場合に、ＦＩＦＯ回路におけるデータの入力の停滞を低減させることができる、データバッファ装置、及びＦＩＦＯ制御方法を提供することにある。
【課題を解決するための手段】
【００１８】
本発明のデータバッファ装置は、少なくとも３つのＦＩＦＯ回路と、少なくとも１つのＦＩＦＯ回路を含み、各ＦＩＦＯ回路が多くとも１つのグループに含まれるグループであり、１つのグループに含まれるすべてのＦＩＦＯ回路が連結された１つのＦＩＦＯとして動作するＦＩＦＯグループの、構成要素を示すＦＩＦＯグループ構成情報を保持し、いずれのＦＩＦＯグループにも含まれないＦＩＦＯ回路が存在し、且つ１つのＦＩＦＯグループの空き容量が所定の閾値以下である場合に、空き容量が閾値以下であるＦＩＦＯグループに、いずれのＦＩＦＯグループにも含まれないＦＩＦＯ回路を追加し、１つのＦＩＦＯグループに含まれる２つ以上のＦＩＦＯ回路のうちの１つが空である場合に、空であるＦＩＦＯ回路を、それが属するＦＩＦＯグループから削除し、ＦＩＦＯグループへデータを入力するための第１の入力指示を送信し、ＦＩＦＯグループからデータを出力するための第１の出力指示を送信するＦＩＦＯ管理回路と、第１の入力指示に基づいて、第１の入力インターフェースから第１の系統のデータを入力し第１の系統のデータを第１のＦＩＦＯグループに出力するか、又は第２の入力インターフェースから第２の系統のデータを入力し第２の系統のデータを第２のＦＩＦＯグループに出力するスイッチと、第１の出力指示に基づいて、ＦＩＦＯグループから入力したデータを出力インターフェースへ出力するマルチプレクサと、を備えることを特徴とする。
【００１９】
本発明のＦＩＦＯ制御方法は、少なくとも３つのＦＩＦＯ回路を備えたデータバッファ装置において、少なくとも１つのＦＩＦＯ回路を含み、各ＦＩＦＯ回路が多くとも１つのグループに含まれるグループであり、１つのグループに含まれるすべてのＦＩＦＯ回路が連結された１つのＦＩＦＯとして動作するＦＩＦＯグループの、構成要素を示すＦＩＦＯグループ構成情報を保持し、いずれのＦＩＦＯグループにも含まれないＦＩＦＯ回路が存在し、且つ１つのＦＩＦＯグループの空き容量が所定の閾値以下である場合に、空き容量が閾値以下であるＦＩＦＯグループに、いずれのＦＩＦＯグループにも含まれないＦＩＦＯ回路を追加し、１つのＦＩＦＯグループに含まれる２つ以上のＦＩＦＯ回路のうちの１つが空である場合に、空であるＦＩＦＯ回路を、それが属するＦＩＦＯグループから削除し、第１の入力インターフェースから第１の系統のデータを入力し第１の系統のデータを第１のＦＩＦＯグループに出力するか、又は第２の入力インターフェースから第２の系統のデータを入力し第２の系統のデータを第２のＦＩＦＯグループに出力し、ＦＩＦＯグループから入力したデータを出力インターフェースへ出力することを特徴とする。
【発明の効果】
【００２０】
本発明によれば、記憶容量が固定のＦＩＦＯ回路が利用され、且つ出力先でデータの入力の滞留が起こった場合に、ＦＩＦＯ回路におけるデータの入力の停滞を低減させることができるという効果がある。
【図面の簡単な説明】
【００２１】
【図１】本発明の第１の実施形態のデータバッファ装置の構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態のデータバッファ装置のＦＩＦＯ管理回路の動作を示すフローチャートである。
【図３】本発明の第１の実施形態のデータバッファ装置のＦＩＦＯ管理回路の動作を示すフローチャートである。
【図４】本発明の第２の実施形態のデータバッファ装置の構成の一例を示すブロック図である。
【図５】本発明の第２の実施形態のデータバッファ装置の空ＦＩＦＯ管理回路の構成の一例を示すブロック図である。
【図６】本発明の第２の実施形態のデータバッファ装置の系統毎ＦＩＦＯ管理回路の構成の一例を示すブロック図である。
【図７】本発明の第２の実施形態のデータバッファ装置の空ＦＩＦＯ管理回路の動作を示すフローチャートである。
【図８】本発明の第２の実施形態のデータバッファ装置の系統毎ＦＩＦＯ管理回路のＦＩＦＯ獲得動作を示すフローチャートである。
【図９】本発明の第２の実施形態のデータバッファ装置の系統毎ＦＩＦＯ管理回路のＦＩＦＯ解放動作を示すフローチャートである。
【図１０】本発明の第２の実施形態のデータバッファ装置の系統毎ＦＩＦＯ管理回路のＦＩＦＯ書込み動作を示すフローチャートである。
【図１１】本発明の第２の実施形態のデータバッファ装置の系統毎ＦＩＦＯ管理回路のＦＩＦＯ読出し動作を示すフローチャートである。
【図１２】記憶容量が固定のＦＩＦＯ回路が用いられたデータバッファ装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００２２】
以下、本発明の実施形態について、図面を参照して詳細に説明する。なお、すべての図面において、同等の構成要素には同じ符号を付し、適宜説明を省略する。
（第１の実施形態）
本実施形態における構成について説明する。
【００２３】
図１は、本発明の第１の実施形態のデータバッファ装置の構成の一例を示すブロック図である。なお、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号の向きを限定するものではない。
【００２４】
本実施形態のデータバッファ装置１００は、入力インターフェース１８３、１８４と、出力インターフェース１０３と、ＦＩＦＯ回路１１０、１１１、１１２と、ＦＩＦＯ管理回路１３２と、スイッチ１５４と、マルチプレクサ１７１とを含む。
【００２５】
入力インターフェース１８３、１８４は、それぞれ別々のデータの転送元とのインターフェースである。入力インターフェース１８３、１８４は、それぞれのデータの転送元から送信されるデータを受信する。なお、図１では、理解を容易にするために、データの転送元ＦＩＦＯ２００、２０１に保持されているデータが模式的に示されている。また、図１では、理解を容易にするために、転送元からのデータを「系統」毎に分配する分配装置１８０、１８１の出力がそれぞれ、入力インターフェース１８３、１８４に接続されている。分配装置１８０、１８１は、出力先の系統のＦＩＦＯ回路がフルになる場合には、送信を停止するように制御される。分配装置の他の出力は、別のデータバッファ装置に接続される。ここで、「系統」は、バッファ処理の一連の対象データを特定するための任意の基準により決定される。「系統」は、例えば、データの種別、データに含まれる識別子、データの転送元装置、データの転送元装置とデータの転送先装置との組み合わせ、データの転送元アドレス、又はデータの転送元アドレスとデータの転送先アドレスとの組み合わせにより決定される。
【００２６】
出力インターフェース１０３は、データの転送先とのインターフェースである。出力インターフェース１０３は、データの転送先に対してデータを送信する。なお、図１では、理解を容易にするために、転送済データ２９０が模式的に示されている。
【００２７】
ＦＩＦＯ回路１１０、１１１、１１２はそれぞれ、同時に最大で１エントリのデータの書込み、及び同時に最大で１エントリのデータの読出しができる独立したＦＩＦＯ回路である。ＦＩＦＯ回路１１０、１１１、１１２の保持可能な最大のエントリ数（記憶容量）は、固定値（図１では“５”）である。ＦＩＦＯ回路１１０、１１１、１１２は、例えば、ＳＲＡＭ（Static Random Access Memory）である。なお、図１では、理解を容易にするために、ＦＩＦＯ回路１１０、１１１、１１２に保持されているデータが模式的に示されている。各ＦＩＦＯ回路は、初期状態ではデータを保持しない。以降、データを保持していないＦＩＦＯ回路を「空きＦＩＦＯ回路」という。
【００２８】
各ＦＩＦＯ回路は、１つの「ＦＩＦＯグループ」に含まれるか、又はいずれの「ＦＩＦＯグループ」にも含まれない。各「ＦＩＦＯグループ」は、特定の系統のデータを入出力するＦＩＦＯ回路のグループで、少なくとも１つのＦＩＦＯ回路を含む。１つのＦＩＦＯグループは、ＦＩＦＯグループに含まれるすべてのＦＩＦＯ回路が連結された１つのＦＩＦＯとして動作する。すなわち、１つのＦＩＦＯグループの記憶容量は、ＦＩＦＯグループに含まれるすべてのＦＩＦＯ回路の記憶容量の合計である。
【００２９】
また、ＦＩＦＯ回路１１０、１１１、１１２には、入力インターフェース１８３、１８４からデータが入力されたときに、ＦＩＦＯ管理回路１３２からの「入力指示」に従って、スイッチ１５４により、入力したデータが書込まれる。「入力指示」は、入力インターフェース１８３、１８４のいずれか１つからデータを入力し、入力したデータをＦＩＦＯ回路１１０、１１１、１１２のいずれか１つへ出力することを指示する信号である。また、ＦＩＦＯ回路１１０、１１１、１１２は、ＦＩＦＯ回路内に出力可能なデータがある場合には、ＦＩＦＯ管理回路１３２からの「出力指示」に従ってマルチプレクサ１７１が制御され、格納したデータを読出す。「出力指示」は、ＦＩＦＯ回路１１０、１１１、１１２のいずれか１つからデータを入力し、入力したデータを出力インターフェース１０３へ出力することを指示する信号である。なお、本実施形態では、ＦＩＦＯ回路の数が３つである場合について説明するが、本実施形態のＦＩＦＯ回路の数は３つに限定されない。本実施形態のＦＩＦＯ回路の数は、入力インターフェース１８３、１８４の数より多い任意の数であってよい。
【００３０】
ＦＩＦＯ管理回路１３２は、入力インターフェース１８３、１８４から入力されたデータのＦＩＦＯ回路１１０、１１１、１１２への書込みの制御、及びＦＩＦＯ回路１１０、１１１、１１２からのデータの読出しの制御を行う。具体的には、ＦＩＦＯ管理回路１３２は、「ＦＩＦＯグループ構成情報」を保持する。「ＦＩＦＯグループ構成情報」は、特定のＦＩＦＯグループに含まれるすべてのＦＩＦＯ回路を特定するための情報である。また、ＦＩＦＯ管理回路１３２は、入力インターフェース１８３又は入力インターフェース１８４からデータが入力されたときに、入力指示をスイッチ１５４に送信する。また、ＦＩＦＯ管理回路１３２は、データがＦＩＦＯ回路１１０、１１１、１１２に存在し、読出し可能な状態であるときに、出力指示をマルチプレクサ１７１に送信する。
【００３１】
スイッチ１５４は、入力指示に従って、入力インターフェース１８３、１８４から入力されたデータを、ＦＩＦＯ回路１１０、１１１、１１２に書込む。
【００３２】
マルチプレクサ１７１は、出力指示に従って、ＦＩＦＯ回路１１０、１１１、１１２から読出されたデータを、出力インターフェース１０３から出力する。
【００３３】
次に、本実施形態における動作について説明する。
【００３４】
図２は、本発明の第１の実施形態のデータバッファ装置１００のＦＩＦＯ管理回路１３２の動作を示すフローチャートである。具体的には、図２（ａ）は、ＦＩＦＯグループにＦＩＦＯ回路を追加する処理を、図２（ｂ）は、ＦＩＦＯグループからＦＩＦＯ回路を削除する処理を示す。なお、図２に示すフローチャート及び以下の説明は一例であり、適宜求める処理に応じて、処理順等を入れ替えたり、処理を戻したり、又は処理を繰り返したりしてもよい。
【００３５】
ＦＩＦＯ管理回路１３２は、ＦＩＦＯグループに含まれないＦＩＦＯ回路が存在し、且つ１つのＦＩＦＯグループの空き容量が閾値以下であるか否かを判定する（ステップＳ１１０）。ＦＩＦＯグループに含まれないＦＩＦＯ回路が存在し、且つそのＦＩＦＯグループの空き容量が閾値以下でなければ（ステップＳ１１０：Ｎｏ）、ＦＩＦＯ管理回路１３２は、ステップＳ１１０の条件判定へ戻る。そのＦＩＦＯグループの空き容量が閾値以下であれば（ステップＳ１１０：Ｙｅｓ）、ＦＩＦＯ管理回路１３２は、いずれのＦＩＦＯグループにも含まれない１つのＦＩＦＯ回路をそのＦＩＦＯグループに追加し（ステップＳ１２０）、ステップＳ１１０の条件判定へ戻る。いずれのＦＩＦＯグループにも含まれないＦＩＦＯ回路は、空きＦＩＦＯ回路である。なお、空きＦＩＦＯ回路が無い場合には、ＦＩＦＯ管理回路１３２は、空きＦＩＦＯ回路の発生を待って、ステップＳ１２０の処理を実行する。また、ＦＩＦＯ管理回路１３２は、ＦＩＦＯグループにＦＩＦＯ回路を追加すると（ステップＳ１２０）、ＦＩＦＯグループ構成情報を更新する。
【００３６】
ＦＩＦＯ管理回路１３２は、１つのＦＩＦＯグループに含まれる２つ以上のＦＩＦＯ回路のうちの、１つのＦＩＦＯ回路の記憶領域の使用量が“０”であるか否かを判定する（ステップＳ１５０）。そのＦＩＦＯ回路の使用量が“０”でなければ（ステップＳ１５０：Ｎｏ）、ＦＩＦＯ管理回路１３２は、ステップＳ１５０の条件判定へ戻る。そのＦＩＦＯ回路の使用量が“０”であれば（ステップＳ１５０：Ｙｅｓ）、ＦＩＦＯ管理回路１３２は、そのＦＩＦＯ回路を、元のＦＩＦＯグループから削除し（ステップＳ１６０）、ステップＳ１５０の条件判定へ戻る。つまり、ＦＩＦＯグループから削除された結果、いずれのＦＩＦＯグループにも含まれないＦＩＦＯ回路は、空きＦＩＦＯ回路である。なお、ＦＩＦＯ管理回路１３２は、ＦＩＦＯグループからＦＩＦＯ回路を削除すると（ステップＳ１６０）、ＦＩＦＯグループ構成情報を更新する。
【００３７】
図３は、本発明の第１の実施形態のデータバッファ装置１００のＦＩＦＯ管理回路１３２の動作を示すフローチャートである。具体的には、図３（ａ）は、入力指示を送信する処理を、図３（ｂ）は、出力指示を送信する処理を示す。なお、図３に示すフローチャート及び以下の説明は一例であり、適宜求める処理に応じて、処理順等を入れ替えたり、処理を戻したり、又は処理を繰り返したりしてもよい。
【００３８】
ＦＩＦＯ管理回路１３２は、入力インターフェース１８３又は入力インターフェース１８４にデータが入力されたか否かを判定する（ステップＳ２１０）。データがなければ（ステップＳ２１０：Ｎｏ）、ＦＩＦＯ管理回路１３２は、ステップＳ２１０の条件判定へ戻る。データがあれば（ステップＳ２１０：Ｙｅｓ）、ＦＩＦＯ管理回路１３２は、入力指示をスイッチ１５４に送信し（ステップＳ２２０）、ステップＳ２１０の条件判定へ戻る。入力指示は、データが入力された入力インターフェースに対応するＦＩＦＯグループの末尾のデータを保持するＦＩＦＯ回路へデータを書込ませる指示である。
【００３９】
ＦＩＦＯ管理回路１３２は、ＦＩＦＯグループの先頭データを保持するＦＩＦＯ回路からデータを出力する準備が完了しているか否かを判定する（ステップＳ２５０）。準備が完了していなければ（ステップＳ２５０：Ｎｏ）、ＦＩＦＯ管理回路１３２は、ステップＳ２５０の条件判定へ戻る。準備が完了していれば（ステップＳ２５０：Ｙｅｓ）、ＦＩＦＯ管理回路１３２は、出力指示をマルチプレクサ１７１に送信し（ステップＳ２６０）、ステップＳ２５０の条件判定へ戻る。出力指示は、送信先のＦＩＦＯバッファがフルでない場合に、データを出力する準備が完了したＦＩＦＯグループの先頭のデータを保持するＦＩＦＯ回路からデータを読出させる指示である。
【００４０】
次に、本実施形態における処理の具体例について図１を参照して説明する。なお、図１におけるデータの表記法及び前提は、図１２におけるデータの表記法及び前提と同じである。
【００４１】
図１において、“Ａ”系統のデータを処理する“ＦＩＦＯグループＡ”はＦＩＦＯ回路１１０及びＦＩＦＯ回路１１１を含み、“Ｂ”系統のデータを処理する“ＦＩＦＯグループＢ”はＦＩＦＯ回路１１２を含むものとする。データバッファ装置１００は、例えば、ＦＩＦＯ回路１１０及びＦＩＦＯ回路１１１の使用領域が記憶容量に達すると、転送元ＦＩＦＯ２００から、それ以上のデータを入力することができない。図１は、ＦＩＦＯ回路１１０がデータ“Ａ５”から“Ａ９”の５つのデータにより一杯になり、ＦＩＦＯ回路１１１がデータ“Ａ１０”から“Ａ１４”の５つのデータにより一杯になった状況を示す。その結果、データバッファ装置１００は、転送元ＦＩＦＯ２００のデータ“Ａ１５”を入力できない。図１に示された状況では、データ“Ａ５”から“Ａ１４”の１０個のデータを入力した時点で停滞が発生している。つまり、データバッファ装置１００では、図１２に示されたデータ“Ａ５”から“Ａ９”の５つのデータを入力した時点で停滞が発生している状況に比べて、ＦＩＦＯ回路１１０とＦＩＦＯ回路１１１がグループになっているため、データの入力の停滞の発生が遅延している、つまり起こりにくくなることが分かる。
【００４２】
また、データバッファ装置１００では、例えば、ＦＩＦＯ回路１１０及びＦＩＦＯ回路１１１の使用領域が記憶容量に達すると、転送元ＦＩＦＯ２００は、先頭の系統と別系統のデータも出力することができない。図１は、転送元ＦＩＦＯ２００は、先頭の“Ａ”系統と別の“Ｃ”系統のデータ“Ｃ８”を出力することができないという状況を示す。
【００４３】
なお、上述したデータの入力の停滞は、ＦＩＦＯ回路１１０が空になった後に“ＦＩＦＯグループＡ”から削除され、再び空きＦＩＦＯ回路１１０が“ＦＩＦＯグループＡ”に追加されることにより解消される。また、“ＦＩＦＯグループＢ”にはＦＩＦＯ回路１１２一つだけが属するので、ＦＩＦＯ回路１１２が空きになっても“ＦＩＦＯグループＢ”から削除されることはない。
【００４４】
以上説明したように、本実施形態のデータバッファ装置１００は、記憶容量が固定のＦＩＦＯ回路１１０、１１１、１１２を含む。また、本実施形態のデータバッファ装置１００は、ＦＩＦＯグループに含まれるＦＩＦＯ回路の数を、１つ以上且つ最大で全ＦＩＦＯ回路数より１つ少ない範囲で、データ量に応じて増減させる。つまり、本実施形態のデータバッファ装置１００は、データの発生量がより多い系統のデータの処理にはより多くのＦＩＦＯ回路を割り当てる。一方、本実施形態のデータバッファ装置１００は、データの発生量がより少ない系統のデータの処理にはより少ないＦＩＦＯ回路を割り当てる。従って、本実施形態のデータバッファ装置１００には、記憶容量が固定のＦＩＦＯ回路が利用され、且つ出力先でデータの入力の滞留が起こった場合に、ＦＩＦＯ回路におけるデータの入力の停滞を低減させることができるという効果がある。
【００４５】
なお、本実施形態では、入力インターフェースの数が２つである場合について説明したが、本実施形態の入力インターフェースの数は２つに限定されない。本実施形態の入力インターフェースの数は、ＦＩＦＯ回路の数より少ない任意の数であってよい。
【００４６】
なお、本実施形態のスイッチ１５４の機能は、複数の回路に分割されて実装されてもよい。
【００４７】
また、本実施形態のＦＩＦＯ管理回路１３２の機能は、複数の回路に分割されて実装されてもよい。
【００４８】
また、本実施形態のマルチプレクサ１７１の機能は、複数の回路に分割されて実装されてもよい。
（第２の実施形態）
次に、上述した第１の実施形態のデータバッファ装置を基本とする、本発明の第２の実施形態のデータバッファ装置について説明する。本実施形態のデータバッファ装置では、第１の実施形態のスイッチが、ＦＩＦＯ回路毎の入力側セレクタを含む。また、本実施形態のデータバッファ装置では、第１の実施形態のＦＩＦＯ管理回路が、系統毎の系統毎ＦＩＦＯ管理回路と、系統間で共通の空ＦＩＦＯ管理回路と、系統間の調停を行う調停回路とを含む。また、本実施形態のデータバッファ装置では、第１の実施形態のマルチプレクサが、系統毎の出力側セレクタと、１つの系統セレクタとを含む。以下の説明において、第１の実施形態と同等の構成要素には同じ符号を付し、適宜説明を省略する。
【００４９】
本実施形態における構成について説明する。
【００５０】
図４は、本発明の第２の実施形態のデータバッファ装置の構成の一例を示すブロック図である。なお、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号の向きを限定するものではない。
【００５１】
本実施形態のデータバッファ装置１０５は、入力インターフェース１８３、１８４と、出力インターフェース１０３と、ＦＩＦＯ回路１１０、１１１、１１２、１１３と、空ＦＩＦＯ管理回路１２０と、系統毎ＦＩＦＯ管理回路１３０、１３１と、調停回路１４０と、入力側セレクタ１５０、１５１、１５２、１５３と、出力側セレクタ１６０、１６１と、調停用セレクタ１７０とを含む。
【００５２】
入力インターフェース１８３、１８４は、それぞれ別々のデータの転送元とのインターフェースである。入力インターフェース１８３、１８４は、それぞれのデータの転送元から送信されるデータを入力する。
【００５３】
出力インターフェース１０３は、データの転送先とのインターフェースである。出力インターフェース１０３は、データの転送先に対してデータを出力する。
【００５４】
ＦＩＦＯ回路１１０、１１１、１１２、１１３はそれぞれ、同時に最大で１エントリのデータの書込み、及び同時に最大で１エントリのデータの読出しができる独立したＦＩＦＯ回路である。ＦＩＦＯ回路１１０、１１１、１１２、１１３の保持可能な最大のエントリ数（記憶容量）は、固定値である。ＦＩＦＯ回路１１０、１１１、１１２、１１３は、例えば、ＳＲＡＭである。また、ＦＩＦＯ回路１１０、１１１、１１２、１１３には、入力インターフェース１８３、１８４からデータが入力されたときに、系統毎ＦＩＦＯ管理回路１３０、１３１からの入力指示に従って、入力側セレクタ１５０、１５１、１５２、１５３により、入力したデータが書込まれる。入力指示は、入力インターフェース１８３、１８４のいずれか１つからデータを入力し、入力したデータをＦＩＦＯ回路１１０、１１１、１１２、１１３のいずれか１つへ出力することを指示する信号である。また、ＦＩＦＯ回路１１０、１１１、１１２、１１３は、ＦＩＦＯ回路内に出力可能なデータがある場合には、系統毎ＦＩＦＯ管理回路１３０、１３１及び調停回路１４０からの出力指示に従って、格納したデータを読出す。出力指示は、ＦＩＦＯ回路１１０、１１１、１１２、１１３のいずれか１つからデータを入力し、入力したデータを出力インターフェース１０３へ出力することを指示する信号である。なお、本実施形態では、ＦＩＦＯ回路の数が４つである場合について説明するが、本実施形態のＦＩＦＯ回路の数は４つに限定されない。本実施形態のＦＩＦＯ回路の数は、入力インターフェース１８３、１８４の数より多い任意の数であってよい。
【００５５】
空ＦＩＦＯ管理回路１２０は、空きＦＩＦＯ回路のリストを保持する。
【００５６】
系統毎ＦＩＦＯ管理回路１３０、１３１はそれぞれ、入力インターフェース１８３、１８４から入力されたデータのＦＩＦＯ回路１１０、１１１、１１２、１１３への書込みの制御、及びＦＩＦＯ回路１１０、１１１、１１２、１１３からのデータの読出しの制御を行う。
【００５７】
具体的には、系統毎ＦＩＦＯ管理回路１３０は、入力インターフェース１８３から入力された系統（Ａ系統）のデータを保持するＦＩＦＯ回路のグループであるＦＩＦＯグループ（ＦＩＦＯグループＡ）のＦＩＦＯグループ構成情報を保持する。また、系統毎ＦＩＦＯ管理回路１３１は、入力インターフェース１８４から入力された系統（Ｂ系統）のデータを保持するＦＩＦＯ回路のグループであるＦＩＦＯグループ（ＦＩＦＯグループＢ）のＦＩＦＯグループ構成情報を保持する。
【００５８】
また、系統毎ＦＩＦＯ管理回路１３０は、入力インターフェース１８３にデータが入力されたときに、ＦＩＦＯグループＡに含まれるＦＩＦＯ回路へデータを書込む入力指示を入力側セレクタ１５０、１５１、１５２、１５３に送信する。また、系統毎ＦＩＦＯ管理回路１３１は、入力インターフェース１８４にデータが入力されたときに、ＦＩＦＯグループＢに含まれるＦＩＦＯ回路へデータを書込む入力指示を入力側セレクタ１５０、１５１、１５２、１５３に送信する。
【００５９】
また、系統毎ＦＩＦＯ管理回路１３０は、データがＦＩＦＯグループＡに含まれるＦＩＦＯ回路に存在し、読出し可能な状態であるときに、出力インターフェース１０３からのデータの出力を要求するための「調停要求」を調停回路１４０に送信する。データの出力が許可されると、系統毎ＦＩＦＯ管理回路１３０は、ＦＩＦＯグループＡに含まれるＦＩＦＯ回路からデータを読出す出力指示を出力側セレクタ１６０に送信する。データの読出しが許可されないと、系統毎ＦＩＦＯ管理回路１３０は、調停要求を調停回路１４０に再び送信し、データの読出し許可を待つ。また、系統毎ＦＩＦＯ管理回路１３１は、データがＦＩＦＯグループＢに含まれるＦＩＦＯ回路に存在し、読出し可能な状態であるときに、調停要求を調停回路１４０に送信する。データの読出しが許可されると、系統毎ＦＩＦＯ管理回路１３１は、ＦＩＦＯグループＢに含まれるＦＩＦＯ回路からデータを読出す出力指示を出力側セレクタ１６１に送信する。データの読出しが許可されないと、系統毎ＦＩＦＯ管理回路１３１は、調停要求を調停回路１４０に再び送信し、データの読出し許可を待つ。
【００６０】
調停回路１４０は、系統毎ＦＩＦＯ管理回路１３０、１３１から出力される調停要求に基づいて、各系統毎ＦＩＦＯ選択回路１３０、１３１の選択頻度が平等になるようにＦＩＦＯ回路からの読出し許可を出力する。ただし、送信先がフルの場合には、調停回路１４０は、送信を許可しない。同時に、調停回路１４０は、系統毎ＦＩＦＯ管理回路１３０、１３１に対して、読出しの許可又は不許可の結果を返す。なお、平等な選択を行う方法は、例えば、ラウンドロビン方式である。
【００６１】
入力側セレクタ１５０、１５１、１５２、１５３は、入力指示に従って、入力インターフェース１８３、１８４から入力されたデータを、それぞれに対応するＦＩＦＯ回路に書込む。なお、入力側セレクタ１５０、１５１、１５２、１５３はそれぞれ、ＦＩＦＯ回路１１０、１１１、１１２、１１３に対応する。
【００６２】
出力側セレクタ１６０、１６１は、出力指示に従って、ＦＩＦＯ回路１１０、１１１、１１２、１１３から読出されたデータを、調停用セレクタ１７０に出力する。
【００６３】
調停用セレクタ１７０は、出力側セレクタ１６０、１６１から出力されたデータを、調停回路１４０からの読出し許可に従って、出力インターフェース１０３へ出力する。
【００６４】
図５は、本発明の第２の実施形態のデータバッファ装置１０５の空ＦＩＦＯ管理回路１２０の構成の一例を示すブロック図である。
【００６５】
空ＦＩＦＯ管理回路１２０は、空ＦＩＦＯ識別子バッファ１２５を含む。空ＦＩＦＯ管理回路１２０は、空きＦＩＦＯ回路のリストを保持する。空ＦＩＦＯ識別子バッファ１２５は、いずれの系統毎ＦＩＦＯ管理回路１３０、１３１によっても占有されていないＦＩＦＯ回路の識別子を保持する。空ＦＩＦＯ識別子バッファ１２５は、最大２エントリのＦＩＦＯ回路の識別子を保持するＦＩＦＯである。空ＦＩＦＯ管理回路１２０は、系統毎ＦＩＦＯ管理回路１３０又は系統毎ＦＩＦＯ管理回路１３１から、空きＦＩＦＯ回路の割り当てを要求する「ＦＩＦＯ獲得要求通知」を受信する。空ＦＩＦＯ管理回路１２０は、ＦＩＦＯ獲得要求通知を受信し、かつ、空きＦＩＦＯ回路がある（空ＦＩＦＯ識別子バッファ１２５にエントリが保持される）場合に、空ＦＩＦＯ識別子バッファ１２５からエントリの読出しを行う。次に、空ＦＩＦＯ管理回路１２０は、読出したエントリの値を含む、ＦＩＦＯ獲得要求通知に対する応答である「ＦＩＦＯ獲得リプライ」を、ＦＩＦＯ獲得要求通知を送信した系統毎ＦＩＦＯ管理回路に送信する。なお、空ＦＩＦＯ管理回路１２０は、ＦＩＦＯ獲得要求通知を受信し、かつ、空きＦＩＦＯ回路がない（空ＦＩＦＯ識別子バッファ１２５にエントリが保持されていない）場合に、ＦＩＦＯ獲得要求通知に対する応答である「ＦＩＦＯ未獲得リプライ」を、ＦＩＦＯ獲得要求通知を送信した系統毎ＦＩＦＯ管理回路に送信する。また、空ＦＩＦＯ管理回路１２０は、ＦＩＦＯ回路の解放を通知する「ＦＩＦＯ解放通知」を受信した場合に、ＦＩＦＯ解放通知に含まれる空きＦＩＦＯ回路の識別子を空ＦＩＦＯ識別子バッファ１２５に書込む。
【００６６】
図６は、本発明の第２の実施形態のデータバッファ装置１０５の系統毎ＦＩＦＯ管理回路１３０、１３１の構成の一例を示すブロック図である。
【００６７】
系統毎ＦＩＦＯ管理回路１３０、１３１は、書込みＦＩＦＯ識別子バッファ３００と、読出しＦＩＦＯ識別子バッファ３０１と、現書込みＦＩＦＯライトアドレスレジスタ３０２と、現書読出しＦＩＦＯリードアドレスレジスタ３０３と、ビジーレジスタ３０４とを含む。
【００６８】
書込みＦＩＦＯ識別子バッファ３００は、書込みに使用しているＦＩＦＯ回路を示す識別子を保持する。書込みＦＩＦＯ識別子バッファ３００は、最大２エントリのＦＩＦＯ回路の識別子を保持するＦＩＦＯである。書込みＦＩＦＯ識別子バッファ３００は、先頭のエントリには、現在書込みに使用しているＦＩＦＯ回路（以下、「現書込みＦＩＦＯ」という）を示す識別子（以下、「現書込みＦＩＦＯ識別子」という）を保持する。書込みＦＩＦＯ識別子バッファ３００は、２番目のエントリには、現書込みＦＩＦＯの次に書込みが行われるＦＩＦＯ回路の識別子を保持する。系統毎ＦＩＦＯ管理回路１３０、１３１は、現書込みＦＩＦＯがいっぱいになったときに、書込みＦＩＦＯ識別子バッファ３００から１エントリを読出し、現書込みＦＩＦＯ識別子を元の２番目のエントリに更新する。
【００６９】
読出しＦＩＦＯ識別子バッファ３０１は、読出しに使用しているＦＩＦＯ回路を示す識別子を保持する。読出しＦＩＦＯ識別子バッファ３０１は、最大３エントリのＦＩＦＯ回路の識別子を保持するＦＩＦＯである。読出しＦＩＦＯ識別子バッファ３０１は、先頭のエントリには、現在読出しに使用しているＦＩＦＯ回路（以下、「現読出しＦＩＦＯ」という）を示す識別子（以下、「現読出しＦＩＦＯ識別子」という）を保持する。読出しＦＩＦＯ識別子バッファ３０１は、後続のエントリには、現読出しＦＩＦＯの後に読出しを行うＦＩＦＯ回路の識別子を順番に保持する。
【００７０】
現書込みＦＩＦＯライトアドレスレジスタ３０２は、現書込みＦＩＦＯへの書込み位置（以下、「ライトアドレス」という）を保持する。現書込みＦＩＦＯライトアドレスレジスタ３０２は、現書込みＦＩＦＯに１エントリのデータを書込むたびに１エントリ分だけライトアドレスを増加させる。現書込みＦＩＦＯライトアドレスレジスタ３０２は、ライトアドレスが所定のしきい値を超えた場合、つまり現書込みＦＩＦＯの空き容量が、予め設定した許容値より小さくなった場合には、空ＦＩＦＯ管理回路１２０に対してＦＩＦＯ獲得要求通知を送信する。現書込みＦＩＦＯライトアドレスレジスタ３０２は、空きＦＩＦＯ回路の獲得に失敗した場合には、ビジーレジスタ３０４を有効にする。また、系統毎ＦＩＦＯ管理回路１３０、１３１は、ライトアドレスが現書込みＦＩＦＯの最後のアドレスを超えたときに、書込みＦＩＦＯ識別子バッファ３００から１エントリの識別子を読出す。そして、系統毎ＦＩＦＯ管理回路１３０、１３１は、現書込みＦＩＦＯ識別子を元の２番目のエントリに更新する。
【００７１】
現読出しＦＩＦＯリードアドレスレジスタ３０３は、現読出しＦＩＦＯからの読出し位置（以下、「リードアドレス」という）を保持する。現書読出しＦＩＦＯリードアドレスレジスタ３０３は、現読出しＦＩＦＯから１エントリのデータを読出すたびに１エントリ分だけリードアドレスを増加させる。現書読出しＦＩＦＯリードアドレスレジスタ３０３は、リードアドレスが現読出しＦＩＦＯの最後のアドレスを超えたときに、現読出しＦＩＦＯが空になったものとみなす。系統毎ＦＩＦＯ管理回路１３０、１３１は、読出しＦＩＦＯが空になったときに、読出しＦＩＦＯ識別子バッファ３０１から１エントリの識別子を読出す。そして、系統毎ＦＩＦＯ管理回路１３０、１３１は、読出した識別子を含む、ＦＩＦＯ解放通知を空ＦＩＦＯ管理回路１２０へ送信する。
【００７２】
ビジーレジスタ３０４は、ライトアドレスがしきい値を超え、かつ、次に書込みを行うＦＩＦＯ回路が確保されていない（書込みＦＩＦＯ識別子バッファにエントリが１つしかない）か（有効）否か（無効）の状態を保持する。系統毎ＦＩＦＯ管理回路１３０、１３１は、ビジーレジスタ３０４が「有効」である間に、データの転送元に対してデータの送信中止を要求し続ける。ＦＩＦＯ管理回路１３０、１３１は、空ＦＩＦＯ管理回路１２０から、ＦＩＦＯ獲得リプライを受信したときにビジーレジスタ３０４を「無効」にする。
【００７３】
次に、本実施形態における動作について説明する。
【００７４】
図７は、本発明の第２の実施形態のデータバッファ装置１０５の空ＦＩＦＯ管理回路１２０の動作を示すフローチャートである。なお、図７に示すフローチャート及び以下の説明は一例であり、適宜求める処理に応じて、処理順等を入れ替えたり、処理を戻したり、又は処理を繰り返したりしてもよい。
【００７５】
まず、空ＦＩＦＯ管理回路１２０は、初期化時に、空ＦＩＦＯ識別子バッファ１２５の先頭エントリにＦＩＦＯ回路１１２の識別子を、後続エントリにＦＩＦＯ回路１１３の識別子を格納する（ステップＳ４１０）。
【００７６】
次に、空ＦＩＦＯ管理回路１２０は、系統毎ＦＩＦＯ管理回路１３０、１３１から通知（ＦＩＦＯ獲得要求通知、又はＦＩＦＯ解放通知）を受信するまで待機する（ステップＳ４２０、ステップＳ４３０：Ｎｏ）。
【００７７】
系統毎ＦＩＦＯ管理回路から通知を受信すると（ステップＳ４３０：Ｙｅｓ）、空ＦＩＦＯ管理回路１２０は、通知内容がＦＩＦＯ獲得要求通知であるか否かを判定する（ステップＳ４４０）。
【００７８】
通知内容がＦＩＦＯ獲得要求通知であり（ステップＳ４４０：Ｙｅｓ）、かつ、空ＦＩＦＯ識別子バッファ１２５にエントリがある（空きＦＩＦＯ回路がある）ならば（ステップＳ４５０：Ｙｅｓ）、空ＦＩＦＯ管理回路１２０は、空ＦＩＦＯ識別子バッファ１２５から先頭エントリを読出す（ステップＳ４６０）。続いて、空ＦＩＦＯ管理回路１２０は、通知元の系統毎ＦＩＦＯ管理回路に対して、読出したＦＩＦＯ識別子を含む、ＦＩＦＯ獲得リプライを返却し（ステップＳ４７０）、ステップＳ４２０の処理へ戻る。
【００７９】
通知内容がＦＩＦＯ獲得要求通知であり（ステップＳ４４０：Ｙｅｓ）、かつ、空ＦＩＦＯ識別子バッファ１２５にエントリがない（空きＦＩＦＯ回路がない）ならば（ステップＳ４５０：Ｎｏ）、空ＦＩＦＯ管理回路１２０は、通知元の系統毎ＦＩＦＯ管理回路に対して、ＦＩＦＯ未獲得リプライを返却し（ステップＳ４８０）、ステップＳ４２０の処理へ戻る。
【００８０】
通知内容がＦＩＦＯ解放通知であるならば（ステップＳ４４０：Ｎｏ）、空ＦＩＦＯ管理回路１２０は、空ＦＩＦＯ識別子バッファ１２５に解放されたＦＩＦＯ識別子の値を書込み（ステップＳ４９０）、ステップＳ４２０の処理へ戻る。
【００８１】
なお、複数の系統毎ＦＩＦＯ管理回路からＦＩＦＯ獲得要求通知を同時に受信した場合には、空ＦＩＦＯ管理回路１２０は、所定の優先順序に基づいて、各ＦＩＦＯグループに対して、空きＦＩＦＯ回路を割り当てる。例えば、空ＦＩＦＯ管理回路１２０は、要求頻度の低い系統毎ＦＩＦＯ管理回路から優先的に空きＦＩＦＯ回路を割り当てる。あるいは、空ＦＩＦＯ管理回路１２０は、各ＦＩＦＯグループに対して、所定の順序（例えば、交互に）で空きＦＩＦＯ回路を割り当ててもよい。
【００８２】
図８は、本発明の第２の実施形態のデータバッファ装置１０５の系統毎ＦＩＦＯ管理回路１３０、１３１のＦＩＦＯ獲得動作を示すフローチャートである。なお、図８に示すフローチャート及び以下の説明は一例であり、適宜求める処理に応じて、処理順等を入れ替えたり、処理を戻したり、又は処理を繰り返したりしてもよい。
【００８３】
まず、系統毎ＦＩＦＯ管理回路１３０は、初期化時に、書込みＦＩＦＯ識別子バッファ３００及び読出しＦＩＦＯ識別子バッファ３０１の先頭エントリに、ＦＩＦＯ回路１１０の識別子を格納する（ステップＳ５１０、ステップＳ５１５）。
【００８４】
また、系統毎ＦＩＦＯ管理回路１３１は、初期化時に、書込みＦＩＦＯ識別子バッファ３００及び読出しＦＩＦＯ識別子バッファ３０１の先頭エントリに、ＦＩＦＯ回路１１１の識別子を格納する（ステップＳ５１０、ステップＳ５１５）。
【００８５】
以降、系統毎ＦＩＦＯ管理回路１３０、１３１の共通の動作について、系統毎ＦＩＦＯ管理回路１３０の動作を例に説明する。
【００８６】
次に、系統毎ＦＩＦＯ管理回路１３０は、ＦＩＦＯ獲得要求通知の発行条件の判定を行う（ステップＳ５２０）。発行条件が成立した場合には（ステップＳ５２０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、空ＦＩＦＯ管理回路１２０に対してＦＩＦＯ獲得要求通知を送信する（ステップＳ５４０）。発行条件が不成立の場合には（ステップＳ５２０：Ｎｏ）、系統毎ＦＩＦＯ管理回路１３０は、所定の時間待機し（ステップＳ５３０）、ステップＳ５２０の条件判定へ戻る。なお、ＦＩＦＯ獲得要求通知の発行条件とは、現書込みＦＩＦＯライトアドレスレジスタ３０２が所定のしきい値を超え、かつ、書込みＦＩＦＯ識別子バッファ３００のエントリ数が１である（次に書込みを行うべきＦＩＦＯ回路が確保されていない）ことである。
【００８７】
次に、系統毎ＦＩＦＯ管理回路１３０は、空ＦＩＦＯ管理回路１２０からリプライを受信し、リプライがＦＩＦＯ獲得リプライであるか否かを判定する（ステップＳ５５０）。リプライがＦＩＦＯ獲得リプライならば（ステップＳ５５０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、ＦＩＦＯ獲得リプライに含まれるＦＩＦＯ識別子の値を、書込みＦＩＦＯ識別子バッファ３００と読出しＦＩＦＯ識別子バッファ３０１とに書込み（ステップＳ５７０、ステップＳ５７５）、ステップＳ５８０の処理へ進む。リプライがＦＩＦＯ未獲得リプライならば（ステップＳ５５０：Ｎｏ）、系統毎ＦＩＦＯ管理回路１３０は、ビジーレジスタ３０４に「有効」を示す値を設定し（ステップＳ５６０）、ステップＳ５２０の条件判定へ戻る。つまり、系統毎ＦＩＦＯ管理回路１３０は、ステップＳ５２０からステップＳ５４０までの処理を、空きＦＩＦＯ回路を獲得できるまで繰り返す。
【００８８】
次に、系統毎ＦＩＦＯ管理回路１３０は、ビジーレジスタ３０４が「有効」であるか否かを判定する（ステップＳ５８０）。ビジーレジスタ３０４が「有効」ならば（ステップＳ５８０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、ビジーレジスタ３０４をリセット（「無効」を示す値を設定）する（ステップＳ５９０）。続いて、系統毎ＦＩＦＯ管理回路１３０は、ステップＳ５２０の条件判定へ戻る。
【００８９】
図９は、本発明の第２の実施形態のデータバッファ装置１０５の系統毎ＦＩＦＯ管理回路１３０、１３１のＦＩＦＯ解放動作を示すフローチャートである。なお、図９に示すフローチャート及び以下の説明は一例であり、適宜求める処理に応じて、処理順等を入れ替えたり、処理を戻したり、又は処理を繰り返したりしてもよい。なお、系統毎ＦＩＦＯ管理回路１３０、１３１の共通の動作について、系統毎ＦＩＦＯ管理回路１３０の動作を例に説明する。
【００９０】
まず、系統毎ＦＩＦＯ管理回路１３０は、ＦＩＦＯ解放通知の発行条件の判定を行う（ステップＳ６１０）。発行条件が成立した場合には（ステップＳ６１０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、ステップＳ６３０の処理へ進む。ＦＩＦＯ解放通知の発行条件が不成立の場合には（ステップＳ６１０：Ｎｏ）、系統毎ＦＩＦＯ管理回路１３０は、所定の時間待機し（ステップＳ６２０）、ステップＳ６１０の条件判定へ戻る。なお、ＦＩＦＯ解放通知の発行条件とは、現読出しＦＩＦＯリードアドレスレジスタ３０３が現読出しＦＩＦＯの最後のアドレスを超えたことである。
【００９１】
次に、系統毎ＦＩＦＯ管理回路１３０は、読出しＦＩＦＯ識別子バッファ３０１から読出しを行い（ステップＳ６３０）、ステップＳ６４０の処理へ進む。
【００９２】
次に、系統毎ＦＩＦＯ管理回路１３０は、空ＦＩＦＯ管理回路１２０に対して、読出したＦＩＦＯ識別子を含む、ＦＩＦＯ解放通知を送信し（ステップＳ６４０）、ステップＳ６１０の条件判定へ戻る。
【００９３】
図１０は、本発明の第２の実施形態のデータバッファ装置１０５の系統毎ＦＩＦＯ管理回路１３０、１３１のＦＩＦＯ書込み動作を示すフローチャートである。なお、図１０に示すフローチャート及び以下の説明は一例であり、適宜求める処理に応じて、処理順等を入れ替えたり、処理を戻したり、又は処理を繰り返したりしてもよい。また、系統毎ＦＩＦＯ管理回路１３０、１３１の共通の動作について、系統毎ＦＩＦＯ管理回路１３０の動作を例に説明する。
【００９４】
以下では、系統毎ＦＩＦＯ管理回路１３０の読出しＦＩＦＯ識別子バッファ３０１に登録されたＦＩＦＯ回路を「ＦＩＦＯグループＡ」という。ＦＩＦＯグループＡは、系統毎ＦＩＦＯ管理回路１３０、ＦＩＦＯ回路１１０、１１１、１１２、１１３、入力側セレクタ１５０、１５１、１５２、１５３、出力側セレクタ１６０、系統セレクタ１７０により、ＦＩＦＯグループＡに含まれるすべてのＦＩＦＯ回路が連結された１つのＦＩＦＯとして動作する。
【００９５】
まず、系統毎ＦＩＦＯ管理回路１３０は、入力インターフェース１８３からの入力データの有無を判定する（ステップＳ７１０）。入力データがあれば（ステップＳ７１０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、現書込みＦＩＦＯ識別子と現書込みＦＩＦＯライトアドレスレジスタ３０２を参照して、入力側セレクタ１５０、１５１、１５２、１５３に入力指示を送信して、該当するＦＩＦＯ回路に書込みを行い（ステップＳ７３０）、ステップＳ７４０の処理へ進む。入力データがなければ（ステップＳ７１０：Ｎｏ）、系統毎ＦＩＦＯ管理回路１３０は、所定の時間待機し（ステップＳ７２０）、ステップＳ７１０の条件判定へ戻る。
【００９６】
次に、系統毎ＦＩＦＯ管理回路１３０は、現書込みＦＩＦＯライトアドレスレジスタ３０２を次のエントリを指すようにインクリメントさせ（ステップＳ７４０）、ステップＳ７５０の処理へ進む。なお、インクリメントしたときに、現書込みＦＩＦＯライトアドレスレジスタ３０２がオーバーフローした場合には（ステップＳ７５０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、現書込みＦＩＦＯがいっぱいになったと判断する。そして、系統毎ＦＩＦＯ管理回路１３０は、書込みＦＩＦＯ識別子バッファ３００から読出しを行い、現書込みＦＩＦＯ及び現書込みＦＩＦＯライトアドレスレジスタ３０２を更新する（ステップＳ７６０）。
【００９７】
図１１は、本発明の第２の実施形態のデータバッファ装置１０５の系統毎ＦＩＦＯ管理回路１３０、１３１のＦＩＦＯ読出し動作を示すフローチャートである。なお、図１１に示すフローチャート及び以下の説明は一例であり、適宜求める処理に応じて、処理順等を入れ替えたり、処理を戻したり、又は処理を繰り返したりしてもよい。また、系統毎ＦＩＦＯ管理回路１３０、１３１の共通の動作について、系統毎ＦＩＦＯ管理回路１３０の動作を例に説明する。
【００９８】
まず、系統毎ＦＩＦＯ管理回路１３０は、ＦＩＦＯグループＡに含まれるＦＩＦＯ回路からのデータの読出し可能条件の判定を行う（ステップＳ８１０）。なお、読出し可能条件とは、データがＦＩＦＯ回路に格納されていることである。読出し可能条件が成立した場合には（ステップＳ８１０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、現読出しＦＩＦＯと現読出しＦＩＦＯリードアドレスレジスタ３０３を参照して該当するＦＩＦＯ回路からデータの読出しを行い（ステップＳ８３０）、ステップＳ８４０の処理へ進む。なお、この際、系統毎ＦＩＦＯ管理回路１３０は、ＦＩＦＯグループＡからの出力を要求する信号（調停要求）を調停回路１４０に出力する。ＦＩＦＯグループＡからの出力が可能ならば、系統毎ＦＩＦＯ管理回路１３０は、該当するＦＩＦＯ回路を選択する信号（出力指示）を出力側セレクタ１６０に出力する。読出し可能条件が成立しない場合には（ステップＳ８１０：Ｎｏ）、系統毎ＦＩＦＯ管理回路１３０は、所定の時間待機し（ステップＳ８２０）、ステップＳ８１０の条件判定へ戻る。
【００９９】
次に、系統毎ＦＩＦＯ管理回路１３０は、現読出しＦＩＦＯリードアドレスレジスタ３０３を次のエントリを指すようにインクリメントさせ（ステップＳ８４０）、ステップＳ８５０の処理へ進む。なお、インクリメントしたときに、現読出しＦＩＦＯリードアドレスレジスタ３０３がオーバーフローした場合には（ステップＳ８５０：Ｙｅｓ）、系統毎ＦＩＦＯ管理回路１３０は、現読出しＦＩＦＯが空になったと判断する。そして、系統毎ＦＩＦＯ管理回路１３０は、読出しＦＩＦＯ識別子バッファ３０１から読出しを行い、現読出しＦＩＦＯ及び現読出しＦＩＦＯリードアドレスレジスタ３０３を更新する（ステップＳ８６０）。
【０１００】
以上説明したように、本実施形態のデータバッファ装置１０５は、第１の実施形態のデータバッファ装置１００と同等の各回路を含む。従って、本実施形態のデータバッファ装置１０５には、第１の実施形態のデータバッファ装置１００と同じ効果がある。
【０１０１】
なお、本実施形態では、ＦＩＦＯ回路の数が４つである場合について説明したが、本実施形態のＦＩＦＯ回路の数は４つに限定されない。本実施形態のＦＩＦＯ回路の数がＮ（Ｎは３以上の自然数）である場合には、空ＦＩＦＯ識別子バッファ１２５のサイズ（最大エントリ数）はＮ−２で、書込みＦＩＦＯ識別子バッファ３００のサイズはＮ−２で、読出しＦＩＦＯ識別子バッファ３０１のサイズはＮ−１であればよい。
【０１０２】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【０１０３】
本発明は、コンピュータシステムにおける、制御部・演算部−主記憶間、ＩＯ−主記憶間、又はインターコネクト−主記憶間におけるＦＩＦＯにおいて利用できる。
【符号の説明】
【０１０４】
１００  データバッファ装置
１１０、１１１、１１２  ＦＩＦＯ回路
１３２  ＦＩＦＯ管理回路
１７１  マルチプレクサ
１８３、１８４  入力インターフェース
１０３  出力インターフェース
１８０、１８１  分配装置
２００、２０１  転送元ＦＩＦＯ
２９０  転送済データ
１０１、１０２、１８２、１８５  入力インターフェース
１０５  データバッファ装置
１１３  ＦＩＦＯ回路
１２０  空ＦＩＦＯ管理回路
１３０、１３１  系統毎ＦＩＦＯ管理回路
１４０  調停回路
１５０、１５１、１５２、１５３  入力側セレクタ
１６０、１６１  出力側セレクタ
１７０  系統セレクタ
１２５  空ＦＩＦＯ識別子バッファ
３００  書込みＦＩＦＯ識別子バッファ
３０１  読出しＦＩＦＯ識別子バッファ
３０２  現書込みＦＩＦＯライトアドレス
３０３  現読出しＦＩＦＯリードアドレス
３０４  ビジーレジスタ
１０９  データバッファ装置
１３９  ＦＩＦＯ管理手段
１１８、１１９  ＦＩＦＯ回路
１７９  マルチプレクサ
【図１】
2017102560.tif 000003
【図２】
2017102560.tif 000004
【図３】
2017102560.tif 000005
【図４】
2017102560.tif 000006
【図５】
2017102560.tif 000007
【図６】
2017102560.tif 000008
【図７】
2017102560.tif 000009
【図８】
2017102560.tif 000010
【図９】
2017102560.tif 000011
【図１０】
2017102560.tif 000012
【図１１】
2017102560.tif 000013
【図１２】
2017102560.tif 000014