(57)【要約】      （修正有）【課題】データの入力順を判定できるデータバッファ装置を提供する。【解決手段】入力されるデータを記憶し，記憶されたデータをある順番で出力するデータバッファ装置において，入力データ毎にタグ値を生成するタグ値生成ユニットと，第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，タグ値と共に記憶する第１〜第ｎのバッファユニットと，第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力ユニットとを有する。データ出力ユニットは，通常出力モードの場合に，第１〜第ｎのバッファユニットのそれぞれ先頭の第１〜第ｎ優先度データのタグ値に応じて，第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，通常出力モード以外のモードの場合に，入力順にかかわらず，前記第１〜第ｎのバッファユニットのうちいずれかのバッファユニットのデータを出力する。【選択図】図６
2010262435.tif 000002
【特許請求の範囲】
【請求項１】
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ装置において，
入力データ毎にタグ値を生成するタグ値生成ユニットと，
第１の優先度を有する第１優先度データをその入力された順に前記タグ値と共に記憶する第１のバッファユニットと，
前記第１の優先度より低い第２の優先度を有する第２優先度データをその入力された順に前記タグ値と共に記憶する第２のバッファユニットと，
前記第１及び第２のバッファユニット内のそれぞれ先頭の第１または第２優先度データのいずれかを出力するデータ出力ユニットとを有し，
前記タグ値生成ユニットは，前記第２の優先度を有する先入力データの入力に応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１の優先度を有する先入力データの入力に応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力ユニットは，通常出力モードの場合に，前記第１及び第２のバッファユニットのそれぞれ先頭の前記第１及び第２優先度データのタグ値に応じて，前記第１及び第２優先度データのうち先に入力されたデータを出力し，追い越し出力モードの場合に，入力順にかかわらず，前記第１のバッファユニットの前記第１優先度データを前記第２のバッファユニットの前記第２優先度データより先に出力するデータバッファ装置。
【請求項２】
請求項１において，
前記データ出力ユニットは，通常出力モードの場合に，前記第１及び第２のバッファユニットのそれぞれ先頭の前記第１及び第２優先度データのタグ値が同じなら前記第１優先度データを出力し，異なるなら前記第２優先度データを出力するデータバッファ装置。
【請求項３】
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ装置において，
入力データ毎にタグ値を生成するタグ値生成ユニットと，
第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，前記タグ値と共に記憶する第１〜第ｎのバッファユニットと，
前記第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力ユニットとを有し，
前記タグ値生成ユニットは，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎについてそれぞれ生成し，前記第ｊのタグ値について，前記第ｊのバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１〜第ｊ−１のバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力ユニットは，通常出力モードの場合に，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，前記通常出力モード以外のモードの場合に，入力順にかかわらず，前記第１〜第ｎのバッファユニットのうちいずれかのバッファユニットのデータを出力するデータバッファ装置。
【請求項４】
請求項３において，
前記データ出力ユニットは，通常出力モードの場合に，
前記第ｎのタグ値から前記第２のタグ値まで順番に，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間で先頭のデータの前記第ｊのタグ値を比較し，
前記第ｎのタグ値から前記第２のタグ値のいずれかで，最初に当該第ｊのタグ値が全て異なる場合に前記第ｊのバッファユニットのデータを出力し，前記第ｎのタグ値から前記第２のタグ値の全てで当該第ｊのタグ値が全て異なることにならない場合に前記第１のバッファユニットのデータを出力するデータバッファ装置。
【請求項５】
請求項４において，
前記第１の優先度から前記第ｎの優先度の順に優先度が高く，
前記データ出力ユニットは，前記第１〜第ｎのバッファユニットのいずれかが出力停止状態の場合は，当該出力停止状態のバッファユニットのデータの出力を禁止し，前記出力停止状態のバッファユニットより優先度が高いバッファユニットのデータを前記出力停止状態のバッファユニットのデータを入力順で追い越して出力するデータバッファ装置。
【請求項６】
請求項５において，
前記データ出力ユニットは，前記出力停止状態のバッファユニットより優先度が低いバッファユニットのデータの入力順が前記停止状態のバッファユニットのデータの入力順より先の場合に，当該優先度が低いバッファユニットのデータを出力するデータバッファ装置。
【請求項７】
請求項３において，
前記データ出力ユニットは，前記通常出力モード以外のモードから前記通常出力モードに復帰した場合は，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力するデータバッファ装置。
【請求項８】
請求項３において，
前記第１の優先度から前記第ｎの優先度の順に優先度が高く，
前記データ出力ユニットは，前記通常出力モード以外のモードでは，優先度の高いバッファユニットのデータがそれより優先度が低いバッファユニットのデータを入力順で追い越して出力するデータバッファ装置。
【請求項９】
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ装置において，
入力データ毎にタグ値を生成するタグ値生成ユニットと，
第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，前記タグ値と共に記憶する第１〜第ｎのバッファユニットと，
前記第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力ユニットとを有し，
前記第１の優先度から前記第ｎの優先度の順に優先度が高く，
前記タグ値生成ユニットは，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎについてそれぞれ生成し，前記第ｊのタグ値について，前記第ｊのバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１〜第ｊ−１のバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力ユニットは，通常出力モードの場合に，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，追い越し出力モードの場合に，入力順にかかわらず，優先度の高いデータを優先度の低いデータより先に出力するデータバッファ装置。
【請求項１０】
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ方法において，
入力データ毎にタグ値を生成するタグ値生成工程と，
第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，前記タグ値と共に第１〜第ｎのバッファユニットに記憶する入力工程と，
前記第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力工程とを有し，
前記タグ値生成工程では，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎについてそれぞれ生成し，前記第ｊのタグ値について，前記第ｊのバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１〜第ｊ−１のバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力工程では，通常出力モードの場合に，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，前記通常出力モード以外のモードの場合に，入力順にかかわらず，前記第１〜第ｎのバッファユニットのうちいずれかのバッファユニットのデータを出力するデータバッファ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，追い越しモードを有するデータバッファ装置に関する。
【背景技術】
【０００２】
データバッファ装置は，通信装置やコンピュータシステム装置などに広く設けられ，受信したデータを一次的に記憶し，適宜そのデータを出力する。データバッファ装置の一例としては，入力データを一次的に記憶し，入力した順番でデータを出力するFIFO(First-in First-out)バッファがある。
【０００３】
図１は，一般的なFIFOバッファの構成図である。図１（Ａ）のFIFOバッファは，パケット形式のデータD1〜D5が入力され，その入力した順にバッファメモリ１０内に一次的に記憶し，そして，記憶されたデータD1〜D5を，入力した順に出力する。
【０００４】
また，図１（Ｂ）のFIFOバッファは，入力されたデータD1〜D5を入力した順にバッファメモリ１０内に一次的に記憶し，ただし，優先度の高いデータD3を先に出力し，それより優先度の低いデータD1,D2,D4,D5を出力する。優先度の高いデータD3を先に出力するためには，データD3の高い優先度という情報を何らかの方法で記憶しておき，出力時にデータD3を優先的に出力する回路が必要になる。
【０００５】
優先度の高いデータを先に出力できるようにするために，優先度に対応した複数のFIFOバッファを設けることが提案されている。例えば，特許文献１，２などである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−３６４５８１号公報
【特許文献２】特開２００４−７５３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
単一のFIFOバッファであれば入力データが入力順に記憶されているのでその順に出力すれば良い。しかし，優先度などに対応した複数のFIFOバッファを有する構成の場合，入力順に出力するというFIFOバッファ本来の機能を実現するためには，各FIFOバッファ内のデータ間の入力順を判別することが必要になる。そのような判定を行う回路構成またはソフトウエア構成は単純ではない。
【０００８】
そこで，本発明の目的は，データの入力順を判定できるデータバッファ装置を提供することにある。
【課題を解決するための手段】
【０００９】
データバッファ装置の側面は，
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ装置において，
入力データ毎にタグ値を生成するタグ値生成ユニットと，
第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，前記タグ値と共に記憶する第１〜第ｎのバッファユニットと，
前記第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力ユニットとを有し，
前記タグ値生成ユニットは，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎについてそれぞれ生成し，前記第ｊのタグ値について，前記第ｊのバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１〜第ｊ−１のバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力ユニットは，通常出力モードの場合に，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，前記通常出力モード以外のモードの場合に，入力順にかかわらず，前記第１〜第ｎのバッファユニットのうちいずれかのバッファユニットのデータを出力する。
【発明の効果】
【００１０】
上記の側面によれば，複数のバッファユニット内のデータ間の入力順を簡単に判別することができる。
【図面の簡単な説明】
【００１１】
【図１】一般的なFIFOバッファの構成図である。
【図２】本実施の形態におけるデータバッファ装置の構成図である。
【図３】２つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図４】２つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図５】２つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図６】３つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図７】３つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図８】３つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図９】３つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図１０】３つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。
【図１１】ｎ個のバッファユニットを有するデータバッファ装置のタグ値を示す図である。
【図１２】ｎ個のバッファユニットを有するデータバッファ装置でのタグ値比較による出力データ選択方法を示す図である。
【図１３】２つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。
【図１４】２つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。
【図１５】３つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。
【図１６】３つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。
【図１７】PCI Express規格でのリンク層／トランザクション層のデータバッファ装置の構成図である。
【図１８】PCI Express規格に適用したデータバッファ装置の回路図である。
【図１９】クレジット信号とモード信号との対応表を示す図である。
【図２０】２つのバッファユニットを有するデータバッファ装置の入力部の制御を示すフローチャート図である。
【図２１】２つのバッファユニットを有するデータバッファ装置の出力部の制御を示すフローチャート図である。
【図２２】タグ比較のフローチャート図である。
【図２３】３つのバッファユニットを有するデータバッファ装置の入力部の制御を示すフローチャート図である。
【図２４】３つのバッファユニットを有するデータバッファ装置の出力部の制御を示すフローチャート図である。
【図２５】データバッファ装置以外の例を示す図である。
【発明を実施するための形態】
【００１２】
［データバッファ回路の構成］
図２は，本実施の形態におけるデータバッファ装置の構成図である。データバッファ装置は，入力されるデータＤ１〜Ｄ１２を優先度別にバッファユニットＦＩＦＯに記憶し，記憶されたデータをバッファユニット間で入力順に出力するか，または入力順にかかわらず特定のバッファユニットのデータを出力するか，または高優先度のデータが低優先度のデータを追い抜いて出力する。いずれかの出力モードが選択される。入力回路２０は，入力されるデータＤ１〜Ｄ１２のそれぞれのヘッダなどに含まれる優先度を判別し，それらのデータＤ１〜Ｄ１２を，ｎ種類の優先度に対応する第１〜第ｎのバッファユニットＦＩＦＯ０〜ＦＩＦＯｎ−１に，それぞれ入力順に記憶する。第１から第ｎが優先度の高い順になっている。
【００１３】
以下，第１〜第ｎのバッファユニットの引用符号をＦＩＦＯ０〜ＦＩＦＯｎ−１とする。つまり，引用符号のサフィックス番号（ＦＩＦＯ０〜ＦＩＦＯｎ−１）は，名称番号（第１〜第ｎ）とは，番号が−１されている。タグ値Ｔｎについても同様である。図１の例はｎ＝３の例でありｎ−１＝２であるので，第３のバッファユニットはＦＩＦＯ２になる。
【００１４】
図２では，ｎ＝３の例が示され，優先度の高い順に第１，第２，第３のバッファユニットＦＩＦＯ０〜ＦＩＦＯ２が設けられている。第１のバッファユニットＦＩＦＯ０が最も優先度の高い高優先データを記憶し，第２のバッファユニットＦＩＦＯ１が次に優先度の高い中優先データを記憶し，第３のバッファユニットＦＩＦＯ２が最も優先度が低い低優先データを記憶する。各バッファユニットＦＩＦＯ０〜２は，それぞれ対応する優先度の入力データを入力順に記憶し入力順に出力するFirst-in First-outバッファである。
【００１５】
入力回路２０は，入力データ毎にタグ値を生成するタグ値生成ユニットを内蔵する。このタグ値生成ユニットは，基準バッファであるバッファユニットＦＩＦＯ２と，それより優先度が高い他のバッファユニットＦＩＦＯ０，１とのそれぞれの間の入力順に対応するタグ値Ｔ２を生成し，それらのバッファユニットＦＩＦＯ２，１，０内に入力データと共に記憶する。タグ値生成ユニットは，タグ値Ｔ２について，バッファユニットＦＩＦＯ２に入力データが入力されることに応答して，次の入力データのタグ値Ｔ２を異なる値に変更し，バッファユニットＦＩＦＯ０，１に入力データが入力されることに応答して，次の入力データのタグ値Ｔ２は変更しない。
【００１６】
さらに，タグ値生成ユニットは，基準バッファであるバッファユニットＦＩＦＯ１と，それより優先度が高い他のバッファユニットＦＩＦＯ０との間の入力順に対応するタグ値Ｔ１を生成し，バッファユニットＦＩＦＯ１，０内に入力データと共に記憶する。この場合も，タグ値生成ユニットは，タグ値Ｔ１について，バッファユニットＦＩＦＯ１に入力データが入力されることに応答して，次の入力データのタグ値Ｔ１を異なる値に変更し，バッファユニットＦＩＦＯ０に入力データが入力されることに応答して，次の入力データのタグ値Ｔ１は変更しない。
【００１７】
一般化すると，タグ値生成ユニットは，第ｊのバッファユニット（基準バッファ）と第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎの場合についてそれぞれ生成する。さらに，タグ値生成ユニットは，第ｊのタグ値について，第ｊのバッファユニット（基準バッファ）に先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を先入力データのタグ値から異ならせ，第１〜第ｊ−１のバッファユニット（基準バッファよりも優先度が高いバッファ）に先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を先入力データのタグ値と同じにする。以下に説明するｎ＝２の例とｎ＝３の例により，上記のタグ値が具体的に理解される。
【００１８】
入力回路２０は，入力データＤ１〜Ｄ１２，例えばパケット形式のデータ，のヘッダ情報からその優先度を判別し，さらに，上記のタグ値Ｔ１，Ｔ２を生成し，対応するバッファユニットＦＩＦＯに書き込む。すなわち，ライトイネーブル信号ＷＥ０，１，２をアサートすることにより，入力データＤとタグ値Ｔ１，Ｔ２とをバッファユニットＦＩＦＯ０〜２のうち対応するバッファユニットに書き込む。
【００１９】
各バッファユニットＦＩＦＯ内には，一般的なＦＩＦＯバッファと同じ構成を有し，例えば，ライトポインタとリードポインタを管理する制御部を有し，入力データが最後尾のバッファに書き込まれるたびにライトポインタがインクリメントされ，同様に，先頭のバッファからデータが読み出され出力されるたびにリードポインタがインクリメントされる。
【００２０】
出力回路２１は，通常出力モードでは，バッファユニットＦＩＦＯ０，１，２の先頭のデータのタグ値Ｔ１，Ｔ２に基づいて入力順を判定し，最も先に入力されたデータから出力する。さらに，出力回路２１は，通常出力モード以外のモードでは，入力順にかかわらず指定されたバッファユニットのデータを順に出力する。また，出力回路２１は，追い越し出力モードでは，出力が停止されたバッファユニットのデータより高い優先度のバッファユニットのデータを，出力停止状態のバッファユニットのデータを追い越して出力する。出力が停止されたバッファユニットのデータより高い優先度のバッファユニットが複数ある場合は，それらのバッファユニット間ではタグ値に基づいて入力順にデータを出力する。出力回路２１は，実際に出力したデータがいずれのバッファユニットかを示す出力結果信号２３をＦＩＦＯ制御回路２２に出力する。そして，出力回路２１は，通常出力モードに戻った後は，タグ値Ｔ１，Ｔ２に基づいて入力順を判定し入力順に出力する。タグ値の比較を利用することで，入力順を簡単に判定することができる。
【００２１】
ＦＩＦＯ制御回路２２は，各バッファユニットＦＩＦＯに対してリードイネーブル信号ＲＥ０，１，２をアサートして，それらのバッファユニットからデータを出力させる。そして，出力結果信号２３に基づいて，出力されたバッファユニットのリードポインタの更新を制御する。ＦＩＦＯ制御回路２２は，入力回路２０に代わって，各バッファユニットＦＩＦＯに対してライトイネーブル信号ＷＥ０，１，２をアサートしてもよい。
【００２２】
出力回路２１は，モード信号ＭＯＤＥ１，２，３を供給され，モード信号に対応して前述の通常出力モードか通常出力モード以外のモードか追い越し動作モードかの何れかで出力データを選択し出力する。モード信号については，後に具体例で詳述する。
【００２３】
データ出力ユニットである出力回路は，一般化して言えば，通常出力モードの場合に，第１〜第ｎのバッファユニットのそれぞれ先頭の第１〜第ｎ優先度データのタグ値に応じて，第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，通常出力モード以外のモードでは，指定されたバッファユニットのデータを順に出力し，追い越し出力モードの場合に，優先度の高いデータを入力順が遅くても優先度の低いデータより先に出力することを許可する。
【００２４】
［２つのバッファユニットを有するデータバッファの例］
図３，図４，図５は，２つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。図３は通常出力モードを，図４は追い越し出力モードを，図５は追い越し出力モード後の通常出力モードをそれぞれ示す。これらは，ｎ＝２の例であり，よって，バッファユニットは高い優先度のＦＩＦＯ０と低い優先度のＦＩＦＯ１が設けられる。また，タグ値Ｔｎ−１〜Ｔ１は，ｎ＝２でありＴ１のみの１種類である。以下では簡単のためにタグ値Ｔとした。
【００２５】
図３に示されるとおり，入力データＤｉｎとしてデータＤ１〜Ｄ９が順番に入力し，それぞれの優先度が図示されるとおりとする。一方，高優先のバッファユニットＦＩＦＯ０には，高優先のデータＤ１，Ｄ３，Ｄ４，Ｄ６が入力順に記憶され，低優先のバッファユニットＦＩＦＯ１には，低優先のデータＤ２，Ｄ５，Ｄ７，Ｄ８が入力順に記憶される。
【００２６】
図３には，入力回路内のタグ値生成方法３０に示されている。タグ値Ｔは，基準バッファである低優先バッファユニットＦＩＦＯ１に対して生成される。つまり，基準バッファである低優先バッファユニットＦＩＦＯ１にデータが入力するたびにタグ値Ｔは＋１され，次の入力データのタグ値として与えられる。言い換えれば，タグ値は，基準バッファである低優先バッファユニットＦＩＦＯ１にデータが入力することに応答して，異なる値に変更され，その次に入力するデータのタグ値となる。異なる値になれば良いのでタグ値Ｔが−１されてもよい。また，基準バッファ以外の他のバッファである高優先バッファユニットＦＩＦＯ０にデータが入力した時は，同じ値に維持される。
【００２７】
このタグ値生成方法によれば，図３の入力データＤ１〜Ｄ９の例では，データＤ１，Ｄ２のタグ値はＴ＝０，データＤ２が低優先バッファユニットＦＩＦＯ１に入力したので，タグ値はＴ＝１となり次のデータＤ３のタグ値として与えられる。その結果，データＤ３，Ｄ４，Ｄ５にはタグ値Ｔ＝１が与えられる。さらに，データＤ５が低優先度のデータであるので，次のデータＤ６にはタグ値Ｔ＝２が与えられる。同様に，データＤ７が低優先度のデータであるので，次のデータＤ８にはタグ値Ｔ＝３が与えられ，データＤ８が低優先度のデータであるので，次のデータＤ９にはタグ値Ｔ＝４が与えられる。
【００２８】
次に，図３には，出力回路内のタグ値に基づく出力データ選択方法３２が示されている。バッファユニットＦＩＦＯ０，１の先頭のデータのタグ値Ｔを比較し，不一致であれば，そのタグ値Ｔの基準バッファであるＦＩＦＯ１のデータが選択され，一致であれば基準バッファであるＦＩＦＯ１以外の他のバッファユニットＦＩＦＯ０のデータが選択される。図３の例では，バッファユニットは２つしかないので，基準バッファであるＦＩＦＯ１以外の他のバッファユニットは，ＦＩＦＯ０のみである。
【００２９】
上記の出力データ選択方法３２によれば，出力データＤｏｕｔは，データＤ１〜Ｄ８の入力順になる。つまり，入力されるデータをその優先度に対応して別々のバッファユニットＦＩＦＯ０，１に記憶しても，タグ値を比較することで，どのバッファユニットの先頭データが最先に入力されたデータかを判別することができる。タグ値が一致するか不一致かの判断を行えば良いので，簡単なハードウエア回路で判別回路を構成することができるし，簡単なソフトウエア処理により判別することができる。以上が通常出力モードである。
【００３０】
図４には，低優先バッファユニットＦＩＦＯ１が出力停止になった時の追い越し出力モードの動作が示されている。入力データＤ１〜Ｄ９は，図３と同じであり，タグ値生成方法３０により図３と同じようにタグ値Ｔが生成され，２つのバッファユニットＦＩＦＯ０，１に書き込まれている。そして，何らかの事情で低優先バッファユニットＦＩＦＯ１が出力停止になっている。この場合は，出力停止になっている低優先バッファユニットＦＩＦＯ１のデータを追い越して，それより優先度が高い高優先バッファユニットＦＩＦＯ０のデータＤ１，Ｄ３，Ｄ４が順に出力データＤｏｕｔとして出力される。したがって，出力回路は，出力データ選択方法４０に基づいて，タグ値Ｔにかかわらず，出力停止しているバッファユニットＦＩＦＯ１より優先度が高い他のバッファユニットＦＩＦＯ０を選択し，入力順に出力データを選択する。図４の例では，バッファユニットＦＩＦＯ０からデータＤ１，Ｄ３，Ｄ４が追い越して出力されている。
【００３１】
高優先バッファユニットＦＩＦＯ０が出力停止になった場合は，低優先バッファユニットＦＩＦＯ１のデータは高優先バッファユニットのデータを追い越すことは許されない。ただし，入力順が先であれば出力される。
【００３２】
図４の追い越し出力モード以外に，指定されたバッファユニットのデータの出力を許可するようにしても良い。たとえば，一方のバッファユニットＦＩＦＯの出力を停止し他方のバッファユニットＦＩＦＯの出力を許可するようにしても良い。
【００３３】
図５には，追い越し出力モード後の通常出力モードの動作が示されている。図４の追い越し出力モードでは，高優先バッファユニットＦＩＦＯ０からデータＤ１，Ｄ３，Ｄ４が出力停止中の低優先バッファユニットＦＩＦＯ１のデータＤ２を追い越して出力された。その結果，図５では，高優先バッファユニットＦＩＦＯ０には，データＤ６，Ｄ９が記憶され，それらのタグ値ＴはＴ＝２，４である。
【００３４】
通常出力モードの出力データ選択方法３２により，２つのバッファユニットＦＩＦＯ０，１の先頭のデータ間でタグ値Ｔが比較され，不一致なら基準バッファである低優先バッファユニットＦＩＦＯ１のデータが選択され，一致なら基準バッファＦＩＦＯ１以外のバッファユニットＦＩＦＯ０のデータが選択される。その結果，データＤ２が選択され出力される。その次は，データＤ５とデータＤ６のタグ値Ｔが比較され，この場合も不一致であるので，低優先バッファユニット内のデータＤ２が選択される。その次は，データＤ７とデータＤ６のタグ値Ｔが比較され，この場合はＴ＝２で一致するので高優先バッファユニット内のデータＤ６が選択される。
【００３５】
以上のように，追い越し出力モードから通常出力モードに復帰した後でも，バッファユニットの先頭のデータのタグ値を比較することで，そのデータが最先に入力したかを容易に検出することができる。同様に，通常出力モード以外のモードから通常出力モードに復帰した後も同様に入力順に出力することができる。したがって，任意のタイミングで通常出力モードと追い越し出力モードまたは通常以外のモードとを切り替えることが可能である。
【００３６】
図２〜図５の例に示されるように，各バッファユニットＦＩＦＯの段数が４段の場合は，タグ値はこれら４段の区別とさらに入力されるデータの区別とが可能であればよい。つまり５種類のタグ値を順次変更しながら生成すれば良い。上記の例のように，タグ値Ｔを０から＋１する場合は，タグ値Ｔは，０，１，２，３，４を順次サイクリックに生成すればよい。タグ値Ｔは４から−１しても良いし，０から１０まで＋２してもよい。
【００３７】
上記の２つのバッファユニットのうち高優先バッファユニットを基準バッファとしてタグ値を設定してもよい。その場合は，高優先バッファユニットにデータが入力されるたびにタグ値は変更され，次のデータのタグ値に与えられる。
【００３８】
［３つのバッファユニットを有するデータバッファの例］
図６〜図１０は，３つのバッファユニットを有するデータバッファ装置の構成と動作を示す図である。図６は通常出力モードを，図７〜図９は追い越し出力モードを，図１０は追い越し出力モード後の通常出力モードをそれぞれ示す。これらは，ｎ＝３の例であり，よって，バッファユニットは高優先度のＦＩＦＯ０と中優先度のＦＩＦＯ１と低優先度のＦＩＦＯ２が設けられる。また，タグ値Ｔｎ−１〜Ｔ１は，ｎ＝３であるので，基準バッファがバッファユニットＦＩＦＯ２の場合のタグ値Ｔ２と，バッファユニットＦＩＦＯ１の場合のタグ値Ｔ１の２種類である。
【００３９】
図６は通常出力モードの動作を示している。図６において，入力データＤｉｎとしてデータＤ１〜Ｄ１２が入力され，それらの優先度（高，中，低）が図示されるとおりとする。図示しない入力回路は，タグ値生成方法６０に示されるとおり，それぞれのタグ値Ｔ２，Ｔ１について，基準バッファである低い優先度のバッファユニットＦＩＦＯ２，ＦＩＦＯ１に入力データが入力するたびに，それらに対応するタグ値Ｔ２，Ｔ１を＋１だけ変更する。タグ値Ｔ２は，低優先バッファユニットＦＩＦＯ２を基準バッファとした場合，他のより高い優先度のバッファユニットＦＩＦＯ１，０との入力順を規定するものであり，入力データが基準バッファＦＩＦＯ２に入力されると，タグ値Ｔ２を＋１してその次の入力データのタグ値Ｔ２とする。同様に，タグ値Ｔ１は，中優先バッファユニットＦＩＦＯ１を基準バッファとした場合，他のより高い優先度のバッファユニットＦＩＦＯ０との入力順を規定するものであり，入力データが基準バッファＦＩＦＯ１に入力されると，タグ値Ｔ１を＋１してその次の入力データのタグ値Ｔ１とする。したがって，タグ値Ｔ１は，バッファユニットＦＩＦＯ０，１のデータに与えられ，バッファユニットＦＩＦＯ２のデータには与えられない。
【００４０】
図６の例では，タグ値Ｔ２については，データＤ２，Ｄ７，Ｄ８，Ｄ１０が低優先であるので，それらの次のデータＤ３，Ｄ８，Ｄ９，Ｄ１１のタグ値Ｔ２はそれぞれ＋１されている。同様に，タグ値Ｔ１については，データＤ３，Ｄ４，Ｄ９が中優先であるので，それらの次のデータＤ４，Ｄ５，Ｄ１１のタグ値Ｔ１はそれぞれ＋１されている。なお，データＤ９の次のデータＤ１０は低優先であるので，タグ値Ｔ１には関係しないので，その次のデータＤ１１のタグ値Ｔ１が＋１されている。
【００４１】
通常出力モードでは，図示しない出力回路は，タグ値に基づく出力データ選択方法６２により，各バッファユニットの先頭のそれぞれのタグ値Ｔ２，Ｔ１を比較して，どのデータが最先に入力されたかを判定する。すなわち，出力回路は，タグ値Ｔ２について，その基準バッファである低優先バッファユニットＦＩＦＯ２の先頭のタグ値Ｔ２と，それより高い優先度のバッファユニットＦＩＦＯ１，ＦＩＦＯ０の先頭のタグ値Ｔ２とを比較し，全て不一致であれば基準バッファのデータが最先の入力順であると判断し，１つでも一致していれば高い優先度のバッファユニットＦＩＦＯ１，ＦＩＦＯ０のいずれかのデータが最先の入力順であると判断する。
【００４２】
したがって，タグ値Ｔ２が全て不一致の場合はタグ値の比較は終了するが，１つでも一致する場合は，さらに，タグ値Ｔ１について，その基準バッファである中優先バッファユニットＦＩＦＯ１の先頭のタグ値Ｔ１と，それより高い優先度のバッファユニットＦＩＦＯ０の先頭のタグ値Ｔ１とを比較する。そして，不一致なら基準バッファＦＩＦＯ１の先頭のデータが最先の入力順であり，一致なら高優先バッファユニットＦＩＦＯ０の先頭のデータが最先の入力順であると判断する。
【００４３】
上記の出力データ選択方法６２によれば，図６の入力データＤ１〜Ｄ１２の場合は，まず，データＤ２のタグ値Ｔ２とＤ３，Ｄ１のタグ値Ｔ２とを比較し，全て不一致ではないので（データＤ２とＤ１はＴ２が一致），次に，データＤ３のタグ値Ｔ１とデータＤ１のタグ値Ｔ１とを比較し，一致であるのでデータＤ１が最先であることが判明する。よって，高優先バッファＦＩＦＯ０からデータＤ１が出力される。
【００４４】
次に，データＤ２のタグ値Ｔ２とＤ３，Ｄ５のタグ値Ｔ２とを比較し，全て不一致であるので，データＤ２が最先であると判明し，低優先バッファＦＩＦＯ２からデータＤ２が出力される。さらに，次に，データＤ７のタグ値Ｔ２とＤ３，Ｄ５のタグ値Ｔ２とを比較し，全て不一致ではないので（全て一致），次に，データＤ３のタグ値Ｔ１とデータＤ５のタグ値Ｔ１とを比較し，不一致であるのでデータＤ３が最先であることが判明する。よって，中優先バッファＦＩＦＯ１からデータＤ３が出力される。以下，同様にして，３つのバッファユニット内のデータがタグ値の比較により入力順に出力される。したがって，３つバッファユニット全体で単一のＦＩＦＯと同じ機能を有することになる。
【００４５】
図７は，中優先と低優先バッファユニットＦＩＦＯ１，２の出力が停止した場合の追い越し出力モードを示している。図６と同様の入力データＤｉｎであり，図６と同様にそれらのデータが３つのバッファユニットＦＩＦＯ０，１，２に格納される。そして，何らかの理由により中優先と低優先のバッファユニットＦＩＦＯ１，２の出力が停止している状態では，高優先のバッファユニットＦＩＦＯ０のデータがそれより優先度が低いバッファユニットＦＩＦＯ１，２のデータを追い越して出力される。つまり，出力データ選択方法７２によれば，タグ値にかかわらず，唯一出力可能な高優先バッファユニットＦＩＦＯ０のデータＤ１，Ｄ５，Ｄ６が出力される。
【００４６】
図８は，低優先バッファユニットＦＩＦＯ２の出力停止時の追い越し出力モードを示している。図６と同様の入力データＤｉｎであり，図６と同様にそれらのデータが３つのバッファユニットＦＩＦＯ０，１，２に格納される。そして，低優先のバッファユニットＦＩＦＯ２が出力停止状態では，高優先と中優先バッファユニットＦＩＦＯ０，１のデータがそれより優先度が低いバッファユニットＦＩＦＯ２のデータを追い越して出力される。ただし，高優先と中優先バッファユニットＦＩＦＯ０，１のデータ間は，タグ値Ｔ１の比較により入力順に出力される。
【００４７】
タグ値比較による出力データ選択方法８２によれば，出力回路は，高優先と中優先バッファユニットＦＩＦＯ０，１のタグ値Ｔ１の比較を行い，不一致なら中優先バッファユニットＦＩＦＯ１のデータを出力し，一致なら高優先バッファユニットＦＩＦＯ０のデータを出力する。このタグ値Ｔ１の比較により，図８の例では，データＤ１，Ｄ３，Ｄ４，Ｄ５，Ｄ６，Ｄ９，Ｄ１１，Ｄ１２が順番に出力される。これにより，バッファユニットＦＩＦＯ０，１内のデータが，出力停止中のバッファユニットＦＩＦＯ２内のデータを追い越して出力される。
【００４８】
図９は，中優先バッファユニットＦＩＦＯ１の出力停止時の追い越し出力モードを示している。図６と同様の入力データＤｉｎであり，図６と同様にそれらのデータが３つのバッファユニットＦＩＦＯ０，１，２に格納される。
【００４９】
そして，出力データ選択方法９２によれば，中優先のバッファユニットＦＩＦＯ１が出力停止状態では，高優先と低優先バッファユニットＦＩＦＯ０，２のデータがタグ値Ｔ２の比較により入力順に出力され，高優先バッファユニットＦＩＦＯ０内のデータが出力停止中の中優先バッファユニットＦＩＦＯ１のデータを追い越して出力される。ただし，低優先バッファユニットＦＩＦＯ２内のデータは，出力停止中の中優先バッファユニットＦＩＦＯ１のデータを追い越すことは禁止される。
【００５０】
図９の入力データＤｉｎの例の場合は，データＤ２，Ｄ１のタグ値Ｔ２の比較によりデータＤ１が最先入力順と判断されて出力され，データＤ２，Ｄ５のタグ値Ｔ２の比較によりデータＤ２が選択され出力される。その後も同様に，タグ値Ｔ２の比較により，データＤ５，Ｄ６が選択されて出力される。しかし，低優先バッファユニットＦＩＦＯ２内のデータＤ７については，停止中の中優先バッファユニットＦＩＦＯ１内のデータＤ３を追い越すことは禁止されているので，その後は，高優先バッファユニットＦＩＦＯ０内のデータＤ１１が選択され出力される。
【００５１】
この追い越し禁止の判断は，たとえば，次のようにして行うことができる。すなわち，低優先バッファユニットＦＩＦＯ２内のデータＤ７のタグ値Ｔ２と中優先バッファユニットＦＩＦＯ１内のデータＤ３のタグ値Ｔ２とを比較し，不一致ならデータＤ７の出力を許可し，一致ならデータＤ７はそもそも選択されない。したがって，低優先バッファユニットＦＩＦＯ２を基準バッファとするタグ値Ｔ２の比較判定により，低優先バッファユニットＦＩＦＯ２のデータが最先か否かの判定を行い，その判定結果に基づいて低優先バッファユニットＦＩＦＯ２のデータ出力を許可する。ただし，出力停止中の中優先バッファユニットＦＩＦＯ１のデータの出力は禁止するようにすればよい。
【００５２】
さらに，停止中のバッファユニットＦＩＦＯ１を基準バッファとするタグ値Ｔ１の比較結果によらず，それより高い優先度のバッファユニットＦＩＦＯ０のデータを選択するようにすればよい。
【００５３】
図１０は，図７の追い越し出力モードから復帰した後の通常出力モードの動作を示している。図７の追い越し出力モードで高優先バッファユニットＦＩＦＯ０内のデータＤ１，Ｄ５，Ｄ６が出力され，データＤ１１のみが残っている。この状態から，タグ比較による出力データ選択方法６２によれば，それぞれのタグ値Ｔ１，Ｔ２を比較し，全て不一致なら基準バッファの低い優先度のデータが選択され，１つでも一致なら基準バッファ以外の高い優先度のデータが選択される。図６で説明したとおりである。
【００５４】
その結果，図１０の復帰後の通常出力モードの動作では，まず，データＤ２のタグ値Ｔ２とデータＤ２，Ｄ１１のタグ値Ｔ２とが比較され，全て不一致であるので，基準バッファのデータＤ２が選択され出力される。次に，データＤ７のタグ値Ｔ２とデータＤ２，Ｄ１１のタグ値Ｔ２とが比較され，一部一致するので，データＤ３のタグ値Ｔ１とデータＤ１１のタグ値Ｔ１とが比較され，不一致であるのでデータＤ３が選択され出力される。以下同様にして，出力データＤｏｕｔとして，データＤ４，Ｄ７，Ｄ８，Ｄ９，Ｄ１０，Ｄ１１，Ｄ１２が順次出力される。
【００５５】
図８，図９の追い越し出力モードの後の通常出力モードも同様にして，タグ比較による出力データ選択方法６２により最先の入力順のデータから出力することができる。
【００５６】
高優先バッファユニットが出力停止状態，または高優先と中優先バッファユニットが出力停止状態の場合は，それぞれ出力状態のより低い優先バッファユニットについて，出力停止状態のバッファユニットも含めてタグ比較を行い，最先であれば出力を許可し，最先でなければ出力されず，そして，出力停止状態のバッファユニットの出力を禁止することで，追い越し出力モードが可能になる。
【００５７】
上記の追い越し出力モード以外に，特定のバッファユニットのみからの出力を許可するようにしてもよい。この場合は，タグ比較による入力順に出力するという制御は行われない。その場合も，通常出力モードに復帰した後は，タグ比較により残っているデータを入力順に出力することができる。
【００５８】
［ｎ個のバッファユニットを有するデータバッファ装置］
図１１，ｎ個のバッファユニットを有するデータバッファ装置のタグ値を示す図である。さらに，図１２は，ｎ個のバッファユニットを有するデータバッファ装置でのタグ値比較による出力データ選択方法を示す図である。
【００５９】
図１１に示されるとおり，タグ値の付与は次のように行われる。まず，最高優先の第１のバッファユニットＦＩＦＯ０から最低優先の第ｎのバッファユニットＦＩＦＯｎ−１までｎ個のバッファユニットが設けられている。数字が小さいほど優先度が高く，大きいほど優先度が低い。そして，第ｎのバッファユニットＦＩＦＯｎ−１を基準バッファとする第ｎのタグ値Ｔｎ−１は，第ｎのバッファユニットＦＩＦＯｎ−１内のデータが，それより優先度の高い他のバッファユニットＦＩＦＯ０〜ＦＩＦＯｎ−２内の全てのデータより先か否かを判断するためのタグ値である。したがって，第ｎのタグ値Ｔｎ−１は，ＦＩＦＯｎ−１〜ＦＩＦＯ０のデータに付与される。
【００６０】
次に，第ｎ−１のバッファユニットＦＩＦＯｎ−２を基準バッファとする第ｎ−１のタグ値Ｔｎ−２は，第ｎ−１のバッファユニットＦＩＦＯｎ−２内のデータが，それより優先度の高い他のバッファユニットＦＩＦＯ０〜ＦＩＦＯｎ−３内の全てのデータより先か否かを判断するためのタグ値である。したがって，第ｎ−１のタグ値Ｔｎ−２は，ＦＩＦＯｎ−２〜ＦＩＦＯ０のデータに付与される。
【００６１】
以下，タグ値Ｔｎ−３〜Ｔ１は，上記と同様の入力順を判断するためのタグ値であり，それぞれの基準バッファとそれより優先度が高いバッファのデータに付与される。最高優先バッファユニットＦＩＦＯ０のためのタグ値は必要ない。
【００６２】
前述したとおり，このタグ値の生成方法によれば，基準のバッファユニットにデータが入力されるたびに，その基準バッファユニットに対応するタグ値を＋１，または変更，させ，その次のデータにそのタグ値を与える。したがって，基準バッファユニットのタグ値と，それ以外のより高い優先度のバッファユニットのタグ値とを比較して，基準バッファユニットのタグ値が他のタグ値と全て不一致であれば，基準バッファユニットにデータが入力された後に，他のバッファユニットにデータが入力されたことは明らかであり，基準バッファユニットのデータが最先の入力データであることが確認できる。このような考え方に基づいて，タグ値比較による出力データの選択方法が決められている。
【００６３】
図１２は，ｎ個のバッファユニットを有するデータバッファ装置でのタグ値比較による出力データ選択方法を示す図である。タグ値の比較は，各バッファユニット内の先頭のデータのタグ値間の比較である。タグ値の比較は，最も優先度の低いバッファユニットＦＩＦＯｎ−１を基準バッファとするタグ値Ｔｎ−１から，タグ値Ｔ１まで順番に行われる。
【００６４】
工程Ｓｎ−１において，基準バッファＦＩＦＯｎ−１のタグ値Ｔｎ−１と，それより高い優先度のバッファＦＩＦＯｎ−２〜ＦＩＦＯ０のタグ値Ｔｎ−１とがそれぞれ比較される。そして，全てが不一致の場合は，基準バッファＦＩＦＯｎ−１のデータが最先と判断され，タグ値比較による出力データ選択工程は終了する。一方，いずれかが一致する場合は，基準バッファＦＩＦＯｎ−１のデータが最先ではないことが確定し，それ以外のバッファＦＩＦＯｎ−２〜ＦＩＦＯ０のいずれが最先かの判定が行われる。
【００６５】
工程Ｓｎ−２において，基準バッファＦＩＦＯｎ−２のタグ値Ｔｎ−２と，それより高い優先度のバッファＦＩＦＯｎ−３〜ＦＩＦＯ０のタグ値Ｔｎ−２とがそれぞれ比較される。そして，全てが不一致の場合は，基準バッファＦＩＦＯｎ−２のデータが最先と判断され，タグ値比較による出力データ選択工程は終了する。一方，いずれかが一致する場合は，基準バッファＦＩＦＯｎ−２のデータが最先ではないことが確定し，それ以外のバッファ内でのタグ値判定が行われる。
【００６６】
上記と同様の判定工程を基準バッファＦＩＦＯ１のタグ値Ｔ１まで繰り返される。いずれかの判定工程で，タグ値が全て異なることが検出されると，判定工程は終了する。
【００６７】
上記のタグ値の判定は，タグ値が一致か不一致かの判定を行うことを基本工程としているので，簡単なハードウエア回路で実現することもできれば，簡単なプログラムによっても実現することができる。
【００６８】
上記とは異なり，基準バッファユニットを優先度が高いバッファユニットにし，その基準の優先度が高いバッファユニットにデータが入力されたときに，その後の入力データのタグ値を＋１するようにしてもよい。その場合は，図１１，図１２において，バッファユニットＦＩＦＯ０が最も優先度が低く，バッファユニットＦＩＦＯｎ−１が最も優先度が高くなる。そして，タグ値の比較処理は，図１２と同様に行うことができる。また，追い越し出力モードにおいても，同様に行うことができる。
【００６９】
[２つのバッファユニットを有するデータバッファ装置のハードウエア回路]
図１３は，２つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。図２との関係で説明すると，図示しない入力回路２０で入力データが優先度別に振り分けられ，高優先の入力データＤｉｎ０が高優先バッファユニットＦＩＦＯ０に書き込まれ，低優先の入力データＤｉｎ１が低優先バッファユニットＦＩＦＯ１に書き込まれる。識別子生成回路１３０は，図２の入力回路２０内に含まれるものであるが，低優先バッファユニットＦＩＦＯ１にデータが書き込まれるたびに生成される書き込みトリガ信号Ｗｔｒに応答して，識別子としてタグ値Ｔ１を変更する。つまり，この識別子Ｔ１は，低優先バッファユニットＦＩＦＯ１を基準バッファとした時のタグ値Ｔ１である。そして，変更されたタグ値Ｔ１は，次の入力データと共にバッファユニットＦＩＦＯ１，０に書き込まれる。
【００７０】
図２の出力回路２１は，タグ値Ｔ１を比較する比較器１３１と，オアゲート１３２と，バッファＦＩＦＯ０，１のいずれかのデータを選択するセレクタＳＥＬ１とを有する。通常出力モードでは，モード信号ＭＯＤＥ１はＬレベル（「０」）であり，オアゲート１３２の出力Ｓ１は，比較器１３１の比較結果になる。比較器１３１は，各バッファユニット内の先頭データのタグ値Ｔ１を比較し，不一致であれば０を，一致であれば１を出力する。比較器の出力はそのままセレクタＳＥＬ１の選択信号Ｓ１になる。よって，タグ値Ｔ１が不一致であればＳ１＝０になり，セレクタＳＥＬ１は低優先バッファユニットＦＩＦＯ１のデータを選択し，出力データＤｏｕｔとして出力する。タグ値Ｔ１が一致であればＳ１＝１になり，セレクタＳＥＬ１は高優先バッファユニットＦＩＦＯ０のデータを選択し，出力データＤｏｕｔとして出力する。
【００７１】
この時の選択信号Ｓ１は，ＦＩＦＯ制御回路２２に供給され，選択信号Ｓ１によりＦＩＦＯ制御回路２２は，どちらのバッファユニットＦＩＦＯのデータが選択されたかを知らされ，それに基づいて，有効な出力データとして選択された側のバッファユニットにリードイネーブル信号ＲＥ０，ＲＥ１を介して通知する。これに応答して，そのバッファユニット内のリードポインタがインクリメントされ，適切にデータ出力処理が完了する。
【００７２】
一方，低優先バッファＦＩＦＯ１が出力停止し追い越し出力モードになると，モード信号ＭＯＤＥ１＝１になる。これにより，オアゲート１３２の出力の選択信号Ｓ１は強制的に１になり，高優先バッファＦＩＦＯ０内のデータが，タグ値にかかわらず，つまり比較器１３１の出力にかかわらず，セレクタＳＥＬ１で選択され出力データＤｏｕｔとして出力される。
【００７３】
図１４は，２つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。図１３と同様に，高優先バッファユニットＦＩＦＯ０と，低優先バッファユニットＦＩＦＯ１とが設けられ，図示しない入力回路２０から高優先データＤｉｎ０と低優先データＤｉｎ１とが対応するバッファユニットＦＩＦＯ０，１に記憶される。
【００７４】
図１４の構成では，高優先データＤｉｎ０と低優先データＤｉｎ１とがそれぞれのライトイネーブル信号ＷＥ０，ＷＥ１と共にバッファユニットＦＩＦＯ０，１に供給され，ライトイネーブル信号ＷＥ０，ＷＥ１に応答してバッファユニットがデータの書き込みを行う。さらに，ライトイネーブル信号ＷＥ１がカウンタ１４０にカウントアップイネーブル信号ＣＥとして入力され，それに応答して，カウンタ１４０は，カウント値を＋１インクリメントする。このカウンタ１４０のカウント値が識別子であるタグ値Ｔ１として，次に入力するデータと共にバッファユニットに書き込まれる。つまり，カウンタ１４０は，図１３の識別子生成回路１３０に対応する。
【００７５】
図１４の出力回路２１は，図１３と同様に，比較器１３１，オアゲート１３２，セレクタＳＥＬ１とを有し，モード信号ＭＯＤＥ１が供給される。したがって，通常出力モードと，低優先バッファユニットＦＩＦＯ１が停止状態の時の追い越し出力モードとは，図１３と同じである。
【００７６】
しかし，図１４の出力回路２１は，さらに，選択信号Ｓ１とモード信号ＭＯＤＥ０を入力するアンドゲート１３３と，アンドゲート１３３の出力信号Ｓ１０に応答してセレクタＳＥＬ１の出力データを停止する高優先停止回路１３４とを有する。この構成を有することで，高優先バッファユニットＦＩＦＯ０が出力停止状態では，モード信号ＭＯＤＥ１＝０，ＭＯＤＥ０＝１になる。これにより，タグ値Ｔ１の比較により比較器１３１が一致を検出して出力を１にすると，オアゲート１３２の出力Ｓ１も１になり，セレクタＳＥＬ１は高優先バッファＦＩＦＯ０のデータを選択する。しかし，選択信号Ｓ１の１と，モード信号ＭＯＤＥ０の１とにより，アンドゲート１３３の出力Ｓ１０が１となり，高優先停止回路１３４がセレクタＳＥＬ１の出力の通過を禁止する。これにより，高優先バッファＦＩＦＯ０内のデータが出力データＤｏｕｔとして出力されることは禁止される。
【００７７】
一方，タグ値Ｔ１の比較により比較器１３１が不一致を検出して出力を０にすると，選択信号Ｓ１が０になり，セレクタＳＥＬ１は低優先バッファＦＩＦＯ１のデータを選択する。このとき，アンドゲート１３３の出力Ｓ１０は０になるので，高優先停止回路１３４はセレクタＳＥＬ１が選択したデータの通過を許可する。これにより，低優先バッファＦＩＦＯ１内のデータであって，入力順が出力停止中の高優先バッファＦＩＦＯ０内のデータより先のデータは出力されるが，後のデータはタグ値比較により出力されない。
【００７８】
基準バッファユニットを高優先バッファユニットＦＩＦＯ０とするタグ値を生成する場合は，セレクタＳＥＬ１の選択信号Ｓ１に対する選択入力を，図１３，１４とは逆の関係にすればよい。別の言い方をすれば，バッファユニットＦＩＦＯ０，１の優先度を逆にすればよい。
【００７９】
[３つのバッファユニットを有するデータバッファ装置のハードウエア回路]
図１５は，３つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。図１５中，３つのバッファユニットＦＩＦＯ０，１，２が設けられ，３つのバッファユニットにそれぞれ対応する優先度の入力データＤｉｎ０，１，２が，タグ値Ｔ２，Ｔ１と共に記憶される。タグ値Ｔ２は３つのバッファユニットすべてに記憶され，タグ値Ｔ１は高優先と中優先のバッファユニットＦＩＦＯ０，１だけに記憶される。
【００８０】
識別子生成回路１５０−２は，低優先バッファユニットＦＩＦＯ２にデータが書き込まれるたびに，その書き込みトリガ信号Ｗｔｒ２に応答して，識別子であるタグ値Ｔ２を変更する。同様に，識別子生成回路１５０−１は，中優先バッファユニットＦＩＦＯ１にデータが書き込まれるたびに，その書き込みトリガ信号Ｗｔｒ１に応答して，識別子であるタグ値Ｔ１を変更する。
【００８１】
出力回路２１は，比較器１５１，１５２，アンドゲート１５３，オアゲート１５４，セレクタＳＥＬ１を有し，これらの回路によりタグ値Ｔ２の比較判定を行う。さらに，出力回路２１は，比較器１５５，オアゲート１５６，セレクタＳＥＬ２とを有し，これらの回路によりタグ値Ｔ１の比較判定を行う。
【００８２】
さらに，出力回路２１には，低優先バッファユニットＦＩＦＯ２の出力停止を指示するモード信号ＭＯＤＥ２と，中優先バッファユニットＦＩＦＯ１の出力停止を指示するモード信号ＭＯＤＥ１とが供給される。
【００８３】
まず，通常出力モードでは，モード信号ＭＯＤＥ２＝０，ＭＯＤＥ１＝０である。そして，比較器１５１，１５２がタグ値Ｔ２の比較を行い，いずれも不一致ならそれらの出力が０になり，アンドゲート１５３の両入力は１，その出力は０になり，選択信号Ｓ１は０になる。図中，入力端子，出力端子の○は反転を意味している。その結果，セレクタＳＥＬ１が低優先バッファＦＩＦＯ２の出力を選択し，出力データＤｏｕｔとして出力する。比較器１５１，１５２のいずれかが一致を検出すると，選択信号Ｓ１は１になり，セレクタＳＥＬ１は高優先または中優先バッファＦＩＦＯ０，１を選択する。
【００８４】
さらに，比較器１５５がタグ値Ｔ１の比較を行い，不一致であれば出力が０になり選択信号Ｓ２は０になり，セレクタＳＥＬ２は中優先バッファＦＩＦＯ１のデータを選択し，一致であれば出力が１になり選択信号Ｓ２は１になり，セレクタＳＥＬ２は高優先バッファＦＩＦＯ０のデータを選択する。
【００８５】
次に，低優先バッファＦＩＦＯ２だけが出力停止状態では，モード信号ＭＯＤＥ２＝１，ＭＯＤＥ１＝０である。よって，選択信号Ｓ１は１になり，比較器１５１，１５２の比較結果にかかわらず，セレクタＳＥＬ１は低優先バッファユニットＦＩＦＯ２のデータを選択しない。中優先と高優先のデータ間でタグ値による順番管理が行われる。
【００８６】
さらに，低優先バッファユニットＦＩＦＯ２と中優先バッファユニットＦＩＦＯ１が出力停止状態では，モード信号ＭＯＤＥ２＝１，ＭＯＤＥ１＝１である。よって，選択信号Ｓ１は１になり，選択信号Ｓ２も１になり，セレクタＳＥＬ１，ＳＥＬ２により高優先バッファユニットＦＩＦＯ０のデータを選択する。
【００８７】
また，中優先バッファＦＩＦＯ１だけが出力停止状態では，モード信号ＭＯＤＥ２＝０，ＭＯＤＥ１＝１である。よって，選択信号Ｓ１はタグ値Ｔ２の比較結果に従うことになり，セレクタＳＥＬ１は，低優先バッファＦＩＦＯ２のデータが最先の時のみ低優先バッファＦＩＦＯ２のデータを選択する。また，選択信号Ｓ２は強制的に１にされ，タグ値Ｔ１の比較結果にかかわらず，セレクタＳＥＬ２は高優先バッファＦＩＦＯ０のデータを選択する。したがって，低優先のデータが最先ならそれが出力され，中優先，低優先，高優先または中優先，高優先，低優先の入力順なら中優先のデータはセレクタＳＥＬ２により出力が禁止され，高優先のデータが追い越して出力され，高優先のデータが最先ならそれが出力される。
【００８８】
ＦＩＦＯ制御回路２２には，選択信号Ｓ１，Ｓ２が供給され，それらの信号に基づいてどのバッファユニットが選択されたかを検出し，対応するリードイネーブル信号ＲＥ０，１，２により，対応するバッファユニットに読み出しを通知し，リードポインタの更新を指示する。
【００８９】
図１６は，３つのバッファユニットを有するデータバッファ装置のハードウエア回路図である。図１５とは，３つのバッファユニットを有することと，出力回路２１の構成などは同じである。ただし，図１５の識別子生成回路１５０−２，１５０−１の代わりに，カウンタ１６０，１６１が設けられている。そして，図示しない入力回路から３種類の入力データＤｉｎ０，Ｄｉｎ１，Ｄｉｎ２が，ライトイネーブル信号ＷＥ０，ＷＥ１，ＷＥ２と共に，対応するバッファユニットＦＩＦＯ０，１，２に供給される。そして，カウンタ１６０は，ライトイネーブル信号ＷＥ０に応答してカウント値を＋１インクリメントし，カウンタ１６１は，ライトイネーブル信号ＷＥ１に応答してカウント値を＋１インクリメントする。これにより，前述したとおりタグ値Ｔ２，Ｔ１が生成される。出力回路２１の構成は図１５と同じであり，その動作も同じである。
【００９０】
図１５，１６のデータバッファ装置では，中優先バッファＦＩＦＯ１が停止状態，高優先バッファＦＩＦＯ０が停止状態に制御することはできない。しかし，以下に説明するデータバッファ装置ではそれらに制御することができる。
【００９１】
高優先バッファユニット側を基準バッファユニットにしてタグ値を設定する場合は，図１５，図１６において，バッファユニットＦＩＦＯ０を低優先に，バッファユニットＦＩＦＯ２を高優先に置き換えることで，同じ出力回路でタグ値の比較を行うことができる。
【００９２】
［ＰＣＩ  Ｅｘｐｒｅｓｓ規格への適用例］
ＰＣＩ  Ｅｘｐｒｅｓｓ規格では，パケットによるデータ転送を行い，Posted，Completion，Non Postedの３種類のパケットが存在する。リンク層／トランザクション層ではこれらの３種類のパケットをバッファリングし，転送可能な状態の時にバッファからパケットのデータを出力する。このバッファリングに，上記してきたデータバッファ装置を適用することができる。
【００９３】
バッファに入力されたパケットのデータは通常動作時では入力された順に転送されるが，転送先の状況に応じて転送不可状態が発生する。規格ではこの転送不可状態をブロッキングと称している。転送先がパケットのデータを受信できない場合に転送不可状態であることが転送先から通知され，データバッファはそれに対応する種類のパケットを出力停止しなければならない。つまり，転送不可状態を，上記３種類のパケット毎に管理することが規格上求められている。たとえば，Non Postedが転送不可状態になると，Non Postedのパケットは転送不可であるが，PostedとCompletionのパケットは転送可能である。さらに，PostedとCompletionのパケットは，転送不可状態のNon Postedのパケットを追い越して転送可能である。その後，Non Postedのパケットの転送不可状態が解除された後は，再度入力順に転送される。
【００９４】
上記の規格から理解できるとおり，Posted，Completion，Non Postedの３種類のパケットは，順番に高優先，中優先，低優先に対応つけることで，前述のデータバッファ装置を適用することができる。
【００９５】
図１７は，PCI Express規格でのリンク層／トランザクション層のデータバッファ装置の構成図である。このデータバッファ装置は，図２のデータバッファ装置に類似している。まず，３つのバッファユニットＦＩＦＯ０，ＦＩＦＯ１，ＦＩＦＯ２が，それぞれPosted，Completion，Non Postedのパケットデータのバッファユニットとして設けられている。優先度は，ＦＩＦＯ０，ＦＩＦＯ１，ＦＩＦＯ２の順に高，中，低である。そして，パケット形式の入力データＤｉｎ０，Ｄｉｎ１，Ｄｉｎ２が入力し，入力回路２０はそれらをPosted，Completion，Non Postedに分けて対応するバッファユニットに書き込む。さらに，入力回路２０は，タグ値も生成し，対応するバッファユニットに書き込む。
【００９６】
出力回路２１は，通常動作モードでは，３つのバッファユニット内のデータ間の入力順位をタグ値の比較により検出し，入力順に出力データＤｏｕｔとして出力する。さらに，出力回路２１には，転送先から，転送可能か不可能かを示すクレジット信号Posted-C，Completion-C，Non Posted-Cを供給される。たとえば，クレジット信号がクレジット有りを示す０なら転送可能，クレジットなしを示す１なら転送不能を意味する。そして，それらのクレジット信号が１の転送不能を示す場合に，対応するバッファユニットからのパケットのデータ転送を停止し，他のバッファユニットからのパケットのデータの転送を，入力順に基づいて行う。ただし，転送停止中のバッファユニット内のデータを追い越して転送されるのは，それより優先度が高いバッファユニット内のデータに限られる。
【００９７】
仮に，Non Postedのクレジット信号が転送不可状態になると，それより優先度の高いPosted, Completionのパケットの間でタグ値比較による順番管理が行われる。そして，Non Postedのクレジット信号が転送可能状態に変わり転送不可状態が解除されると，３つのバッファユニット間でタグ値比較による順番管理が行われる。
【００９８】
図１８は，PCI Express規格に適用したデータバッファ装置の回路図である。図１６のデータバッファ装置とは，出力回路２１に破線１００の外側の高優先停止回路１８１，アンドゲート１８０，モード信号生成回路１８２が追加されている。それに伴って，FIFO制御回路２２には，選択信号Ｓ１，Ｓ２に加えて，信号Ｓ１０も供給される。図１８の破線１００内の構成は，図１６の破線１００内の構成と同じである。
【００９９】
図１９は，クレジット信号とモード信号との対応表を示す図である。モード信号生成回路１８２は，各クレジット信号Posted-C，Completion-C，Non Posted-Cに対応して，それぞれモード信号ＭＯＤＥ０，ＭＯＤＥ１，ＭＯＤＥ２を生成する。各クレジット信号Posted-C，Completion-C，Non Posted-Cがクレジット有りであれば，モード信号ＭＯＤＥ０，ＭＯＤＥ１，ＭＯＤＥ２は０になり，クレジット無しであれば１になり，対応するバッファユニットは出力停止状態にされる。
【０１００】
図１５，図１６のデータバッファ装置において，入力順にデータを出力する通常出力モード（ＭＯＤＥ２＝０，ＭＯＤＥ１＝０）と，低優先バッファＦＩＦＯ２のみが出力停止したときの動作（ＭＯＤＥ２＝１，ＭＯＤＥ１＝０）と，中優先バッファＦＩＦＯ１のみが出力停止したときの動作（ＭＯＤＥ２＝０，ＭＯＤＥ１＝１）と，低優先と中優先バッファＦＩＦＯ２，１が出力停止した時の動作（ＭＯＤＥ２＝１，ＭＯＤＥ１＝１）については既に説明した。
【０１０１】
そこで，高優先バッファＦＩＦＯ０のみが出力停止した時の動作（ＭＯＤＥ２＝０，ＭＯＤＥ１＝０，ＭＯＤＥ０＝１）について説明する。この場合，タグ値比較により低優先バッファＦＩＦＯ０または中優先バッファＦＩＦＯ１のデータが最先と判定されれば，選択信号Ｓ１，Ｓ２のいずれかが０になり，セレクタＳＥＬ１，ＳＥＬ２で選択されたデータが高優先停止回路１８１を経由して出力される。このタグ値比較により停止中の高優先バッファ内のデータを追い越して低優先，中優先のデータが出力されることはない。また，タグ比較により高優先バッファＦＩＦＯ０のデータが最先と判定されれば，選択信号Ｓ１，Ｓ２が共に１となり，アンドゲート１８０の出力信号Ｓ１０は１になる。その結果，高優先停止回路１８１は，セレクタＳＥＬ１，ＳＥＬ２が選択した高優先バッファＦＩＦＯ０のデータの出力を禁止する。これにより高優先バッファユニットのデータ出力は停止状態になる。
【０１０２】
さらに，高優先バッファＦＩＦＯ０と中優先バッファＦＩＦＯ１が出力停止した時の動作（ＭＯＤＥ２＝０，ＭＯＤＥ１＝１，ＭＯＤＥ０＝１）について説明する。この場合，選択信号Ｓ１は，タグ値比較結果に依存するが，選択信号Ｓ２は強制的にＳ２＝１になる。そして，低優先のデータが最先なら選択信号Ｓ１はＳ１＝０になり低優先のデータが出力される。しかし，高優先のデータが最先なら，選択信号Ｓ１はＳ１＝１になるので，Ｓ２＝１，ＭＯＤＥ０＝１により，アンドゲート１８０の出力信号Ｓ１０＝１になり，高優先停止回路１８１は高優先のデータの出力を禁止する。中優先のデータは選択信号Ｓ２＝１により出力されない。したがって，低優先データは，入力順が先の時のみ出力され，停止中の高優先データ，中優先データを追い越すことはない。
【０１０３】
最後に，高優先バッファＦＩＦＯ０と低優先バッファＦＩＦＯ２が出力停止した時の動作（ＭＯＤＥ２＝１，ＭＯＤＥ１＝０，ＭＯＤＥ０＝１）について説明する。この場合，選択信号Ｓ１は強制的にＳ１＝１になり，選択信号Ｓ２はタグ値比較結果に依存する。よって，低優先バッファのデータは強制的に出力停止される。そして，中優先のデータが最先なら選択信号Ｓ２はＳ２＝０になり出力される。一方，高優先のデータが最先なら選択信号Ｓ２はＳ２＝１になり，高優先停止回路１８１が高優先のデータの出力を禁止する。よって，中優先のデータが停止中の高優先のデータを追い越すことはない。
【０１０４】
［プログラム制御の例］
図２のデータバッファ装置の入力回路と出力回路は，ハードウエア回路ではなくプログラム制御によっても実現可能である。図示されないＣＰＵが以下に示すフローチャートのプログラムを実行することで，上記と同様の制御を行う。
【０１０５】
図２０は，２つのバッファユニットを有するデータバッファ装置の入力部の制御を示すフローチャート図である。図２におけるデータバッファ装置の入力回路２０を，ＣＰＵなどのプロセッサとプログラムメモリとで構成し，プログラムメモリ内のプログラムをプロセッサに実行させることで同じ機能を実現できる。
【０１０６】
図２０は，そのプログラムの処理を示しており，入力部は，高優先データを入力すると（Ｓ２００），それに対応する高優先バッファＦＩＦＯ０に空きがあれば（Ｓ２０１のＹＥＳ），現在のタグＴ１を付与し（Ｓ２０２），高優先バッファＦＩＦＯ０に入力データとタグ値Ｔ１とを書き込む（Ｓ２０３）。また，入力部は，低優先データを入力すると（Ｓ２０４），それに対応する低優先バッファＦＩＦＯ１に空きがあれば（Ｓ２０５のＹＥＳ），現在のタグＴ１を付与し（Ｓ２０６），低優先バッファＦＩＦＯ１に入力データとタグ値Ｔ１とを書き込む（Ｓ２０７）。そして，現在のタグ値Ｔ１を更新する（Ｓ２０８）。これによりその後の入力データのタグ値Ｔ１は更新された値になる。
【０１０７】
図２１は，２つのバッファユニットを有するデータバッファ装置の出力部の制御を示すフローチャート図である。図２におけるデータバッファ装置の出力回路２１を，ＣＰＵなどのプロセッサとプログラムメモリとで構成し，プログラムメモリ内のプログラムをプロセッサに実行させることで同じ機能を実現できる。
【０１０８】
出力部は，低優先バッファＦＩＦＯ１と高優先バッファＦＩＦＯ０のタグ値Ｔ１を比較して低優先バッファＦＩＦＯ１のデータが先か否かを判定し，先なら低優先バッファＦＩＦＯ１のデータを先でないなら高優先バッファＦＩＦＯ０のデータを出力する。図２１によれば，出力部は，低優先データがバッファ内にある場合は（Ｓ２１０），モードが通常出力モードの場合（Ｓ２１１のＹＥＳ），基準バッファとなるＦＩＦＯ１の番号を引数Ｎとし（Ｎ＝１）（Ｓ２１２），タグ比較処理Ｓ２１３を実行する。
【０１０９】
図２２は，タグ比較のフローチャート図である。これによれば，Ｓ２２０〜Ｓ２２５がループ処理であり，工程Ｓ２２５の終了条件に達するまで繰り返される。まず，工程Ｓ２２０での初期化で引数ｉについてｉ＝０とする。この引数ｉは，タグ値の比較での基準バッファに対する比較対象バッファの番号である。バッファユニットＦＩＦＯは２つしかないので，この場合はｉ＝０になる。そして，バッファＦＩＦＯｉ（ＦＩＦＯ０）にデータがあれば（Ｓ２２１のＹＥＳ），バッファＦＩＦＯｉ（ＦＩＦＯ０）とバッファＦＩＦＯＮ（ＦＩＦＯ１）のタグ値ＴＮが比較され（Ｓ２２２），タグＴＮが不一致であれば（Ｓ２２３のＹＥＳ），引数ｉがインクリメントされ（Ｓ２２４），ループ処理の終了条件ｉ＝Ｎに一致すれば（Ｓ２２５），ループ処理が終了する。バッファユニットは２つしかなくＮ＝１であるので，ループ処理の最初Ｓ２２０に戻ることなく，タグフラグがＯＮにされる（Ｓ２２６）。また，タグＴＮが一致であれば（Ｓ２２３のＮＯ），タグフラグがＯＦＦにされる（Ｓ２２７）。
【０１１０】
図２１の工程Ｓ２１３に戻り，出力部は，タグフラグがＯＮであれば（Ｓ２１４のＹＥＳ），低優先バッファＦＩＦＯ１のデータが先であるので，低優先バッファＦＩＦＯ１のデータを出力する（Ｓ２１５）。また，タグフラグがＯＮでないなら（Ｓ２１４のＹＥＳ），高優先データがあれば（Ｓ２１６のＹＥＳ），そのデータを出力する（Ｓ２１７）。
【０１１１】
また，出力部は，工程Ｓ２１１で低優先バッファが出力停止状態になり追い越しモードになっていれば（ＮＯ），高優先データがあれば（Ｓ２１６のＮＯ），高優先データを出力する。
【０１１２】
図２３は，３つのバッファユニットを有するデータバッファ装置の入力部の制御を示すフローチャート図である。図２３には，高優先データと，中優先データと，低優先データに対する入力処理が示されているが，高優先データの処理Ｓ２００〜Ｓ２０３と低優先データの処理Ｓ２０４〜Ｓ２０８とは，図２０と同じであり，中優先データの処理Ｓ２３０〜Ｓ２３４が追加されている。ただし，低優先データの処理ではバッファユニットがＦＩＦＯ２，タグ値がＴ２になっている。また，高優先データの処理ではタグ値Ｔ１，Ｔ２となっている。
【０１１３】
中優先データについて，入力部は，中優先データが入力されると（Ｓ２３０），中優先バッファＦＩＦＯ１に空きがあれば（Ｓ２３１のＹＥＳ），現在のタグ値Ｔ１，Ｔ２を付与し，中優先バッファユニットＦＩＦＯ１に入力データとタグ値Ｔ１，Ｔ２とを書き込む（Ｓ２３３）。そして，その後，タグ値Ｔ１を更新する。これによりその後の入力データのタグ値Ｔ１は更新された値になる。
【０１１４】
同様に，入力部は，低優先データを低優先バッファユニットＦＩＦＯ２に入力した後，タグ値Ｔ２を更新する（Ｓ２０８）。
【０１１５】
図２４は，３つのバッファユニットを有するデータバッファ装置の出力部の制御を示すフローチャート図である。出力部は，低優先バッファＦＩＦＯ２と高優先，中優先バッファＦＩＦＯ０，ＦＩＦＯ１のタグ値Ｔ２を比較して低優先バッファＦＩＦＯ２のデータが先頭か否かを判定し，先頭なら低優先バッファＦＩＦＯ２のデータを出力し，先頭でないならさらに，中優先バッファＦＩＦＯ１と高優先バッファＦＩＦＯ０のタグ値Ｔ１を比較して中優先バッファＦＩＦＯ１のデータが先頭か否かを判定し，先頭なら中優先バッファＦＩＦＯ１のデータを出力し，先頭でなければ高優先バッファＦＩＦＯ０のデータを出力する。
【０１１６】
図２４によれば，出力部は，低優先データがバッファ内にある場合は（Ｓ２４０），モード信号ＭＯＤＥ２＝０の通常モードの場合（Ｓ２４１のＹＥＳ），基準バッファとなるＦＩＦＯ２の番号を引数Ｎとし（Ｎ＝２）（Ｓ２４２），タグ比較処理Ｓ２１３を実行する。
【０１１７】
タグ比較処理Ｓ２１３は，図２１に示されるとおりであり，ループ処理の初期化工程Ｓ２２０で，引数ｉをｉ＝０に設定する。前述したとおり，この引数ｉは，タグ値の比較での基準バッファに対する比較対象バッファの番号である。そして，バッファＦＩＦＯｉにデータがあれば（Ｓ２１１のＹＥＳ），バッファＦＩＦＯｉと基準バッファＦＩＦＯＮ（Ｎ＝２）のタグ値ＴＮ（Ｎ＝２）とを比較し（Ｓ２２２），タグ値ＴＮが不一致であれば（Ｓ２２３のＹＥＳ），引数ｉをインクリメントする（Ｓ２２４）。そして，ループ処理Ｓ２２２〜Ｓ２２５をｉ＝Ｎになるまで繰り返す。つまり，基準バッファに対する比較対象バッファＦＩＦＯｉがｉ＝０〜ｉ＝Ｎ−１までタグ値ＴＮの比較を繰り返す。そして，全てのタグ比較で不一致であれば，タグフラグをオンにする（Ｓ２２６）。
【０１１８】
１つでもタグ比較で一致があれば（Ｓ２２３のＮＯ），タグフラグをオフにする（Ｓ２２７）。タグフラグがオンであれば基準バッファＦＩＦＯｉのデータが先頭であり，タグフラグがオフであれば先頭でないことを意味する。
【０１１９】
図２４に戻り，出力部は，工程Ｓ２４３でタグフラグがオンの場合は，低優先バッファＦＩＦＯ２のデータを出力する。工程Ｓ２４３でタグフラグがオフの場合は，中優先バッファＦＩＦＯ１にデータがあれば（Ｓ２４５のＹＥＳ），そして，モード信号ＭＯＤＥ１＝０であれば（Ｓ２４６のＹＥＳ），基準バッファとなるＦＩＦＯ１の番号を引数Ｎとし（Ｎ＝１）（Ｓ２４７），タグ比較処理Ｓ２１３を行う。この処理は，図２１と図２２の出力部の制御で説明したのと同じであり，出力部は，バッファＦＩＦＯ１，ＦＩＦＯ０のタグ値Ｔ１を比較する。
【０１２０】
そして，出力部は，タグフラグがオンであれば（Ｓ２４８のＹＥＳ），中優先バッファＦＩＦＯ１のデータを出力する（Ｓ２４９）。また，タグフラグがオフであれば（Ｓ２４８のＮＯ），高優先バッファＦＩＦＯ０にデータがあれば（Ｓ２５０のＹＥＳ），モード信号ＭＯＤＥ０＝０であれば（Ｓ２５１のＹＥＳ）高優先バッファＦＩＦＯ０のデータを出力し，モード信号ＭＯＤＥ０＝１であれば（Ｓ２５１のＮＯ）高優先バッファＦＩＦＯ０のデータは出力されない。この場合は，出力停止中の高優先バッファＦＩＦＯ０内のデータより先の入力順を持つデータが他のバッファＦＩＦＯ１，ＦＩＦＯ２になくいずれのデータも出力されない。
【０１２１】
工程Ｓ２４１，Ｓ２４６でモード信号がＭＯＤＥ２＝１またはＭＯＤＥ１＝１の場合には，対応するバッファＦＩＦＯ２またはＦＩＦＯ１のデータは出力されない。
【０１２２】
上記のフローチャート図において，高優先バッファ側を基準バッファとしてタグ値を生成する場合は，各フローチャート図において，低優先バッファユニットと高優先バッファユニットとを置き換えればよい。
【０１２３】
さらに，追い越し出力モードではなく，単にあるバッファユニットを選択してそれからデータを出力するモードでは，非選択のバッファユニットのデータの出力を禁止し，選択したバッファユニットのデータ間でタグ値の比較を行って出力するバッファユニットを選択すればよい。
【０１２４】
［データバッファ装置以外の例］
図２５は，データバッファ装置以外の例を示す図である。上記では，データバッファ装置が複数の優先度を有する入力データを一旦記憶し，入力順に出力するか，または一部の優先度のバッファの出力を停止し優先度が高いバッファのデータが出力停止中のバッファのデータを追い抜いて出力するかを行うことを説明した。
【０１２５】
しかしながら，必ずしもデータバッファ装置に限らず，他の例においても，何らかの構造体やクラスが発生する場合，それらを優先度に応じて別々に記憶し，それらを発生順に使用または出力したり，一部の優先度の使用や出力を禁止して追い抜いて使用や出力をする場合にも適用可能である。
【０１２６】
図２５に示されるとおり，工程Ｓ３００では，構造体やクラスを生成した際にタグ値を付与し，それらを優先度別に別々に記憶する。図中，３００，３０１，３０２と３つの優先度別に記憶されている。そして，工程Ｓ３０１では，タグ値の比較によりどの構造体またはクラスが先に生成されたか否かを判断する。タグ値の比較処理は，前述したのと同じである。
【０１２７】
以上説明したとおり，本実施の形態によれば，入力データを所定の属性別に且つ入力順にＦＩＦＯバッファユニットに記憶し，タグ値比較によりバッファユニットのデータ間の入力順を検出することができる。よって，属性に基づいて特定のバッファユニットのデータの出力を行った後，タグ値比較により全てのデータを入力順に出力することが簡単に行える。
【０１２８】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１２９】
（付記１）
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ装置において，
入力データ毎にタグ値を生成するタグ値生成ユニットと，
第１の優先度を有する第１優先度データをその入力された順に前記タグ値と共に記憶する第１のバッファユニットと，
前記第１の優先度より低い第２の優先度を有する第２優先度データをその入力された順に前記タグ値と共に記憶する第２のバッファユニットと，
前記第１及び第２のバッファユニット内のそれぞれ先頭の第１または第２優先度データのいずれかを出力するデータ出力ユニットとを有し，
前記タグ値生成ユニットは，前記第２の優先度を有する先入力データの入力に応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１の優先度を有する先入力データの入力に応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力ユニットは，通常出力モードの場合に，前記第１及び第２のバッファユニットのそれぞれ先頭の前記第１及び第２優先度データのタグ値に応じて，前記第１及び第２優先度データのうち先に入力されたデータを出力し，追い越し出力モードの場合に，入力順にかかわらず，前記第１のバッファユニットの前記第１優先度データを前記第２のバッファユニットの前記第２優先度データより先に出力するデータバッファ装置。
【０１３０】
（付記２）
付記１において，
前記データ出力ユニットは，通常出力モードの場合に，前記第１及び第２のバッファユニットのそれぞれ先頭の前記第１及び第２優先度データのタグ値が同じなら前記第１優先度データを出力し，異なるなら前記第２優先度データを出力するデータバッファ装置。
【０１３１】
（付記３）
付記１において，
前記第１及び第２のバッファユニットは，それぞれｋ段数のバッファを有し，
前記タグ値生成ユニットは，それぞれ区別可能なｋ＋１種類のタグ値を順次生成するデータバッファ装置。
【０１３２】
（付記４）
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ装置において，
入力データ毎にタグ値を生成するタグ値生成ユニットと，
第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，前記タグ値と共に記憶する第１〜第ｎのバッファユニットと，
前記第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力ユニットとを有し，
前記タグ値生成ユニットは，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎについてそれぞれ生成し，前記第ｊのタグ値について，前記第ｊのバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１〜第ｊ−１のバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力ユニットは，通常出力モードの場合に，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，前記通常出力モード以外のモードの場合に，入力順にかかわらず，前記第１〜第ｎのバッファユニットのうちいずれかのバッファユニットのデータを出力するデータバッファ装置。
【０１３３】
（付記５）
付記４において，
前記データ出力ユニットは，通常出力モードの場合に，
前記第ｎのタグ値から前記第２のタグ値まで順番に，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間で先頭のデータの前記第ｊのタグ値を比較し，
前記第ｎのタグ値から前記第２のタグ値のいずれかで，最初に当該第ｊのタグ値が全て異なる場合に前記第ｊのバッファユニットのデータを出力し，前記第ｎのタグ値から前記第２のタグ値の全てで当該第ｊのタグ値が全て異なることにならない場合に前記第１のバッファユニットのデータを出力するデータバッファ装置。
【０１３４】
（付記６）
付記５において，
前記第１の優先度から前記第ｎの優先度の順に優先度が高く，
前記データ出力ユニットは，前記第１〜第ｎのバッファユニットのいずれかが出力停止状態の場合は，当該出力停止状態のバッファユニットのデータの出力を禁止し，前記出力停止状態のバッファユニットより優先度が高いバッファユニットのデータを前記出力停止状態のバッファユニットのデータを入力順で追い越して出力するデータバッファ装置。
【０１３５】
（付記７）
付記６において，
前記データ出力ユニットは，前記出力停止状態のバッファユニットより優先度が低いバッファユニットのデータの入力順が前記停止状態のバッファユニットのデータの入力順より先の場合に，当該優先度が低いバッファユニットのデータを出力するデータバッファ装置。
【０１３６】
（付記８）
付記４において，
前記データ出力ユニットは，前記通常出力モード以外のモードから前記通常出力モードに復帰した場合は，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力するデータバッファ装置。
【０１３７】
（付記９）
付記４において，
前記第１の優先度から前記第ｎの優先度の順に優先度が高く，
前記データ出力ユニットは，前記通常出力モード以外のモードでは，優先度の高いバッファユニットのデータがそれより優先度が低いバッファユニットのデータを入力順で追い越して出力するデータバッファ装置。
【０１３８】
（付記１０）
付記４において，
前記第１〜第ｎのバッファユニットは，それぞれｋ段数のバッファを有し，
前記タグ値生成ユニットは，前記第ｎ〜第２のタグ値それぞれについて，それぞれ区別可能なｋ＋１種類のタグ値を順次生成するデータバッファ装置。
【０１３９】
（付記１１）
付記４において，
前記ｎは３であることを特徴とするデータバッファ装置。
【０１４０】
（付記１２）
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ装置において，
入力データ毎にタグ値を生成するタグ値生成ユニットと，
第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，前記タグ値と共に記憶する第１〜第ｎのバッファユニットと，
前記第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力ユニットとを有し，
前記第１の優先度から前記第ｎの優先度の順に優先度が高く，
前記タグ値生成ユニットは，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎについてそれぞれ生成し，前記第ｊのタグ値について，前記第ｊのバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１〜第ｊ−１のバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力ユニットは，通常出力モードの場合に，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，追い越し出力モードの場合に，入力順にかかわらず，優先度の高いデータを優先度の低いデータより先に出力するデータバッファ装置。
【０１４１】
（付記１３）
入力されるデータを記憶し，前記記憶されたデータをある順番で出力するデータバッファ方法において，
入力データ毎にタグ値を生成するタグ値生成工程と，
第１〜第ｎの優先度を有する第１〜第ｎ優先度データをそれぞれ，その入力された順に，前記タグ値と共に第１〜第ｎのバッファユニットに記憶する入力工程と，
前記第１〜第ｎのバッファユニット内のそれぞれ先頭の第１〜第ｎ優先度データのいずれかを出力するデータ出力工程とを有し，
前記タグ値生成工程では，前記第ｊのバッファユニットと前記第１〜第ｊ−１のバッファユニットとのそれぞれの間の入力順に対応する第ｊのタグ値を，ｊ＝２〜ｎについてそれぞれ生成し，前記第ｊのタグ値について，前記第ｊのバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値から異ならせ，前記第１〜第ｊ−１のバッファユニットに先入力データが入力されることに応答して，当該先入力データの次に入力する後入力データのタグ値を前記先入力データのタグ値と同じにし，
前記データ出力工程では，通常出力モードの場合に，前記第１〜第ｎのバッファユニットのそれぞれ先頭の前記第１〜第ｎ優先度データのタグ値に応じて，前記第１〜第ｎ優先度データのうち最先に入力されたデータを出力し，前記通常出力モード以外のモードの場合に，入力順にかかわらず，前記第１〜第ｎのバッファユニットのうちいずれかのバッファユニットのデータを出力するデータバッファ方法。
【符号の説明】
【０１４２】
ＦＩＦＯ：バッファユニット              ２０：入力回路，入力部
２１：出力回路，出力部                  ２２：ＦＩＦＯ制御回路
Ｔ１，Ｔ２：タグ値                      Ｄ１〜：データ
【図１】
2010262435.tif 000003
【図２】
2010262435.tif 000004
【図３】
2010262435.tif 000005
【図４】
2010262435.tif 000006
【図５】
2010262435.tif 000007
【図６】
2010262435.tif 000008
【図７】
2010262435.tif 000009
【図８】
2010262435.tif 000010
【図９】
2010262435.tif 000011
【図１０】
2010262435.tif 000012
【図１１】
2010262435.tif 000013
【図１２】
2010262435.tif 000014
【図１３】
2010262435.tif 000015
【図１４】
2010262435.tif 000016
【図１５】
2010262435.tif 000017
【図１６】
2010262435.tif 000018
【図１７】
2010262435.tif 000019
【図１８】
2010262435.tif 000020
【図１９】
2010262435.tif 000021
【図２０】
2010262435.tif 000022
【図２１】
2010262435.tif 000023
【図２２】
2010262435.tif 000024
【図２３】
2010262435.tif 000025
【図２４】
2010262435.tif 000026
【図２５】
2010262435.tif 000027