(57)【要約】【課題】簡易な制御でバッファメモリの使用効率を維持し、複数のデータストリームでバッファメモリを共有させる。【解決手段】複数のデータストリーム用にバッファメモリを共有させるためのバッファメモリ共有装置であって、領域の占有状況を示すフラグを管理するフラグ管理回路５０１を備え、アドレスを生成するアドレス生成回路５０２をデータストリーム毎に備え、アドレス生成回路５０２は、複数のフラグに基づいてデータストリームへの領域の排他的な割り当てを管理する占有管理回路６０４と、割り当てられた領域を示すビット列を記憶するＦＩＦＯ６０１と、ライトカウンタ６０２と、リードカウンタ６０３とを有し、アドレス生成回路５０２は、ＦＩＦＯ６０１の末尾のビット列とライトカウンタ６０２の値とを合成することでライトアドレスを生成し、ＦＩＦＯ６０１の先頭のビット列とリードカウンタ６０３の値とを合成することでリードアドレスを生成する。【選択図】図６
2008293484.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータストリーム用にバッファメモリを共有させるための制御を行うバッファメモリ共有装置であって、
前記バッファメモリを分割した複数の領域のそれぞれに対応し、各領域の占有状況を示す複数のフラグを管理するフラグ管理手段と、
前記複数のフラグに基づいて、前記複数のデータストリームへの前記複数の領域の排他的な割り当てを管理する占有管理手段と、
データを書き込む前記バッファメモリ内の位置を指定するライトアドレスと、データを読み出す前記バッファメモリ内の位置を指定するリードアドレスとを生成するアドレス生成手段とを備え、
前記アドレス生成手段は、前記データストリーム毎に対応させて、
前記複数の領域のそれぞれの位置を示す複数の第１ビット列のうち、前記占有管理手段により割り当てられた領域を示す第１ビット列に関する情報を記憶する第１ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリと、
データを書き込む前記領域内の位置を示す第２ビット列を出力するライトカウンタと、
データを読み出す前記領域内の位置を示す第３ビット列を出力するリードカウンタとを有し、
前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された前記情報から得られる第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリの先頭に記憶された前記情報から得られる第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する
ことを特徴とするバッファメモリ共有装置。
【請求項２】
前記第１ＦＩＦＯメモリは、前記複数の第１ビット列のうち前記占有管理手段により割り当てられた領域を示す第１ビット列を少なくとも１つ記憶し、
前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された前記第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリの先頭に記憶された前記第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する
ことを特徴とする請求項１記載のバッファメモリ共有装置。
【請求項３】
前記占有管理手段は、前記領域への書き込みが終了した場合に、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させ、
前記フラグ管理手段は、前記第１ＦＩＦＯメモリに記憶させた第１ビット列に対応するフラグを占有状態に変更する
ことを特徴とする請求項２記載のバッファメモリ共有装置。
【請求項４】
前記占有管理手段は、さらに、書き込むべきデータがある場合に、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させる
ことを特徴とする請求項３記載のバッファメモリ共有装置。
【請求項５】
前記ライトカウンタは、前記領域にデータが書き込まれる度にカウント値をインクリメントし、前記カウント値が最大値に達した場合に、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第２ビット列として出力し、
前記占有管理手段は、前記ライトカウンタのカウント値が零値であり、かつ、書き込むべきデータがある場合、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させる
ことを特徴とする請求項４記載のバッファメモリ共有装置。
【請求項６】
前記アドレス生成手段は、前記ライトカウンタのカウント値が零値である場合は、前記占有管理手段が前記第１ＦＩＦＯメモリに記憶させる前記第１ビット列と、前記ライトカウンタのカウント値とを合成し、前記ライトカウンタのカウント値が零値でない場合は、前記第１ＦＩＦＯメモリの末尾に記憶された前記第１ビット列と、前記ライトカウンタのカウント値とを合成する
ことを特徴とする請求項５記載のバッファメモリ共有装置。
【請求項７】
前記占有管理手段は、前記領域からの読み出しが終了した場合に、前記領域に対応するフラグを未占有状態にするフラグ更新情報を出力し、
前記フラグ管理手段は、前記フラグ更新情報を取得した場合に、前記フラグを未占有状態に変更する
ことを特徴とする請求項２記載のバッファメモリ共有装置。
【請求項８】
前記リードカウンタは、前記領域からデータが読み出される度にカウント値をインクリメントし、前記カウント値が最大値に達した場合、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第３ビット列として出力し、
前記占有管理手段は、前記リードカウンタのカウント値が零値になった場合に、前記フラグ更新情報を出力する
ことを特徴とする請求項７記載のバッファメモリ共有装置。
【請求項９】
前記ライトカウンタは、前記複数の領域の１つである第１領域にデータが書き込まれる度にカウント値をインクリメントし、前記カウント値が最大値に達した場合に、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第２ビット列として出力し、
前記リードカウンタは、前記複数の領域の１つである第２領域からデータが読み出される度にカウント値をインクリメントし、前記カウント値が最大値に達した場合に、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第３ビット列として出力し、
前記占有管理手段は、前記ライトカウンタのカウント値が零値であり、かつ、書き込むべきデータがある場合、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させ、前記リードカウンタのカウント値が零値になった場合に、前記第２領域に対応するフラグを未占有状態にするフラグ更新情報を出力し、
前記フラグ管理手段は、前記第１ＦＩＦＯメモリに記憶させた前記第１ビット列に対応するフラグを占有状態に変更し、前記フラグ更新情報を取得した場合に、前記第２領域に対応するフラグを未占有状態に変更する
ことを特徴とする請求項２記載のバッファメモリ共有装置。
【請求項１０】
前記バッファメモリ共有装置は、さらに、
前記データストリームへ割り当てる領域の個数を制限する占有制限手段を備え、
前記占有管理手段は、前記個数に基づいて割り当てを管理する
ことを特徴とする請求項２記載のバッファメモリ共有装置。
【請求項１１】
前記占有制限手段は、前記データストリーム毎に、占有することができる領域の最小数を動的に決定し、
前記占有管理手段は、前記データストリーム毎に決定された前記最小数を確保できるように、前記領域の排他的な割り当てを管理する
ことを特徴とする請求項１０記載のバッファメモリ共有装置。
【請求項１２】
前記占有バッファメモリ共有装置は、さらに、
前記リードアドレスが指定する位置が含まれる領域にデータの書き込みを制御するためのラップ許可通知を出力するラップ制御手段を備え、
前記占有管理手段は、前記ラップ許可通知を受け取った場合に、前記リードアドレスが指定する位置が含まれる領域を示す第１ビット列を、前記第１ＦＩＦＯメモリに記憶させる
ことを特徴とする請求項２記載のバッファメモリ共有装置。
【請求項１３】
前記アドレス生成手段は、前記ライトカウンタが出力する前記第２ビット列が、前記リードカウンタの出力する第３ビット列に等しくなった場合に、前記ライトカウンタの出力を停止する
ことを特徴とする請求項１２記載のバッファメモリ共有装置。
【請求項１４】
前記第１ＦＩＦＯメモリは、データの読み出し位置を示すリードポインタとデータの書き込み位置を示すライトポインタとを有するリングバッファとして制御され、
前記アドレス生成手段は、前記第１ＦＩＦＯメモリのライトポインタが示す位置の１つ手前の位置に記憶された第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリのリードポインタが示す位置に記憶された第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する
ことを特徴とする請求項２記載のバッファメモリ共有装置。
【請求項１５】
前記バッファメモリ共有装置は、さらに、
前記複数の第１ビット列を少なくとも１つ記憶する複数の第２ＦＩＦＯメモリを備え、
前記フラグ管理手段は、さらに、前記複数の第２ＦＩＦＯメモリのそれぞれに対応し、各第２ＦＩＦＯメモリの占有状況を示す複数のＦＩＦＯフラグを管理し、
前記占有管理手段は、さらに、前記複数のＦＩＦＯフラグに基づいて、前記複数のデータストリームへの前記第２ＦＩＦＯメモリの排他的な割り当てを管理し、
前記第１ＦＩＦＯメモリは、前記複数の第２ＦＩＦＯメモリの識別情報のうち、前記占有管理手段により割り当てられた前記識別情報を記憶し、
前記アドレス生成手段は、前記第１ＦＩＦＯメモリに記憶された前記識別情報を基にして、前記ライトアドレス及び前記リードアドレスを生成する
ことを特徴とする請求項１記載のバッファメモリ共有装置。
【請求項１６】
前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された識別情報が示す第２ＦＩＦＯメモリの末尾に記憶された第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、前記第１ＦＩＦＯメモリの先頭に記憶された識別情報が示す第２ＦＩＦＯメモリの先頭に記憶された第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する
ことを特徴とする請求項１５記載のバッファメモリ共有装置。
【請求項１７】
前記第１ビット列は、前記ライトアドレス及び前記リードアドレスの最上位ビットを含み、前記最上位ビットから連続するビットで構成される
ことを特徴とする請求項１記載のバッファメモリ共有装置。
【請求項１８】
複数のデータストリーム用にバッファメモリを共有させるための制御を行う集積回路であって、
前記バッファメモリを分割した複数の領域のそれぞれに対応し、各領域の占有状況を示す複数のフラグを管理するフラグ管理手段と、
前記複数のフラグに基づいて、前記複数のデータストリームへの前記複数の領域の排他的な割り当てを管理する占有管理手段と、
データを書き込む前記バッファメモリ内の位置を指定するライトアドレスと、データを読み出す前記バッファメモリ内の位置を指定するリードアドレスとを生成するアドレス生成手段とを備え、
前記アドレス生成手段は、前記データストリーム毎に対応させて、
前記複数の領域のそれぞれの位置を示す複数の第１ビット列のうち、前記占有管理手段により割り当てられた領域を示す第１ビット列に関する情報を記憶する第１ＦＩＦＯメモリと、
データを書き込む前記領域内の位置を示す第２ビット列を出力するライトカウンタと、
データを読み出す前記領域内の位置を示す第３ビット列を出力するリードカウンタとを有し、
前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された前記情報から得られる第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリの先頭に記憶された前記情報から得られる第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する
ことを特徴とする集積回路。
【請求項１９】
複数のデータストリームの送受信を行う通信機器であって、
前記複数のデータストリームの送受信を行う制御回路と、
前記制御回路によって受信された前記複数のデータストリームを一時的に記憶するバッファメモリとを備え、
前記制御回路は、
前記バッファメモリを分割した複数の領域のそれぞれに対応し、各領域の占有状況を示す複数のフラグを管理するフラグ管理手段と、
前記複数のフラグに基づいて、前記複数のデータストリームへの前記複数の領域の排他的な割り当てを管理する占有管理手段と、
データを書き込む前記バッファメモリ内の位置を指定するライトアドレスと、データを読み出す前記バッファメモリ内の位置を指定するリードアドレスとを生成するアドレス生成手段とを備え、
前記アドレス生成手段は、前記データストリーム毎に対応させて、
前記複数の領域のそれぞれの位置を示す複数の第１ビット列のうち、前記占有管理手段により割り当てられた領域を示す第１ビット列に関する情報を記憶する第１ＦＩＦＯメモリと、
データを書き込む前記領域内の位置を示す第２ビット列を出力するライトカウンタと、
データを読み出す前記領域内の位置を示す第３ビット列を出力するリードカウンタとを有し、
前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された前記情報から得られる第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリの先頭に記憶された前記情報から得られる第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する
ことを特徴とする通信機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムの物理メモリ上に構成するリングバッファを複数のデータストリームで共有させるバッファメモリ共有装置に関する。
【背景技術】
【０００２】
データの送受信を行うシステムなどでは、データ転送経路上にバッファメモリを用意し、データを一旦バッファリングすることが一般的に行なわれている。これは、データを送る側とデータを受ける側の処理速度の違いを吸収したり、転送単位の違いを吸収したりするためであり、一般的な半導体回路内部やネットワーク機器内部において実施される。
【０００３】
このときのバッファメモリはＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリであり、領域を継続的に繰り返し使用するためにリングバッファとして制御されることが一般的である。
【０００４】
図１は、一般的なバッファメモリ回路の簡単な構成図である。
【０００５】
同図のバッファメモリ回路は、バッファメモリ１０１と、バッファメモリ１０１の制御回路１０２とを備える。
【０００６】
制御回路１０２は、バッファメモリ１０１に対してライト要求と、ライトデータと、ライトデータを書き込む位置を指定するライトアドレスとを出力する。そして、ライトアドレスが指定するバッファメモリ１０１の位置にライトデータを書き込む。また、制御回路１０２は、バッファメモリ１０１に対してリード要求を出力し、同時にリードデータを読み出す位置を指定するリードアドレスを出力する。バッファメモリ１０１は、その応答としてリードデータとリードデータが有効であることを示す信号とを出力する。
【０００７】
これらにより、バッファメモリ１０１への書き込みとバッファメモリ１０１からの読み出しとが行なわれる。ここで、データの書き込みと読み出しとは同時に行なわれても良いし、順次行なわれても良い。順次行なわれる場合は、ライトとリードとで、要求信号線、アドレス線、及びデータ線が共用されても良い。
【０００８】
このようなバッファメモリの領域に、可変量のリングバッファを複数個、動的に形成することができれば、バッファメモリを複数のデータストリームで共用させること、及び、用途別にバッファメモリの領域を使い分けるといったことが可能になる。これにより、バッファメモリの回路規模の縮小及びデータ転送効率の向上が実現され得る。
【０００９】
バッファメモリ上に可変量のリングバッファを複数個、動的に形成する従来の技術として、特許文献１、特許文献２及び特許文献３などに記載されている技術がある。これらは、次に書き込む位置及び読み出す位置をライトポインタ及びリードポインタとしてデータストリーム毎に保持しておき、バッファメモリにアクセスする際に、選択的にその値をアドレス線に出力するものである。このとき、境界変数を設け、各データストリームのライトポインタ及びリードポインタが移動する範囲を特定領域に限定することで、バッファメモリ上にデータストリーム毎のリングバッファ領域を形成する。
【００１０】
図２は、バッファメモリ上にデータストリーム毎のリングバッファ領域を形成する従来の技術を説明するための図である。図２に、特許文献１、特許文献２及び特許文献３などに記載されている従来技術において、バッファメモリ上に複数個のリングバッファを形成する際にライトポインタ、リードポインタ及び境界変数がどのような位置関係を保って制御されるかを示す。ここでは、バッファメモリ上に３つのリングバッファを形成する例を示す。
【００１１】
図２に示すように、バッファメモリ２０１は、リングバッファ形式で制御されることからここではドーナツ状に示してある。バッファメモリ２０１は、従来技術を特徴付ける境界変数２０２、２０３及び２０４により３つのリングバッファ領域に分割される。分割した３つの領域を、例えば、３つのデータストリームにそれぞれ割り当てることができる。
【００１２】
ライトポインタ２０５、２０６及び２０７は、それぞれの領域において次にデータが書き込まれる位置のアドレスを更新し、保持する。これらの値は、データをバッファメモリに書き込む際にアドレス線に出力される。リードポインタ２０８、２０９及び２１０は、それぞれの領域において次に読み出す位置のアドレスを更新し、保持する。これらの値は、データをバッファメモリから読み出す際にアドレス線に出力される。
【００１３】
ここで、データの書き込み及び読み出しは時計回りに行なわれるとする。ライトポインタ２０５、２０６及び２０７はそれぞれの領域にデータが書き込まれる度にインクリメントされる。同様に、リードポインタ２０８、２０９及び２１０はそれぞれの領域からデータが読み出される度にインクリメントされる。これらライトポインタとリードポインタとが示す位置は、境界変数２０２、２０３及び２０４で仕切られたそれぞれのリングバッファ領域内を時計回りに進む。例えば、ライトポインタ２０５がインクリメントされていき、ライトポインタ２０５の示す位置が境界変数２０３の示す位置に辿り着いた場合、ライトポインタ２０５は境界変数２０２の値に更新され、ライトポインタ２０５の示す位置は境界変数２０２の示す位置にラップされる。ライトポインタ２０６及び２０７、並びに、リードポインタ２０８、２０９及び２１０についても同様である。また、ライトポインタとリードポインタとはオーバーフロー及びアンダーフローを起さないように制御される。
【００１４】
境界変数２０２、２０３及び２０４はリングバッファ領域の大きさを変更するために値を更新され、それらの示す位置は時計回り及び反時計回りに動く。特許文献１及び特許文献２に記載されている従来技術では、リングバッファ領域に保持されているデータ量が増え、次に書き込む領域がなくなると、リングバッファ領域を仕切っている境界変数の示す位置が隣の領域の方向へ移動するように境界変数の値を更新し、リングバッファ領域を拡張する。このとき、隣の領域のライトポインタやリードポインタが邪魔で領域を拡張できない場合は、隣の領域のライトポインタやリードポインタの示す位置が進み、領域を拡張できるようになるのを待つ。特許文献３に記載されている従来技術では、それぞれのリングバッファ領域が保持しているデータ量や、それぞれのリングバッファ領域へ入力されるデータ量などに従って、境界変数の値を頻繁に更新する。
【００１５】
以上のように特許文献１、特許文献２及び特許文献３に記載されている従来技術では、バッファメモリ上にリングバッファ領域を連続領域で形成している。これに対して飛び地にある複数の未使用領域に対してもリングバッファの領域を拡張していくことを可能にした従来の技術として、特許文献４に記載されている技術がある。これも、次に書き込む位置や読み出す位置をライトポインタ、リードポインタとして保持しておき、バッファメモリにアクセスする際に、その値をアドレス線に出力する。この技術では、飛び地に存在する複数の領域毎に先頭アドレスと終端アドレスとを保持しておく。
【００１６】
図３は、特許文献４に記載されている従来技術において、バッファメモリ上の複数の飛び地の領域を１つのリングバッファ領域として使用する技術を説明するための図である。図３には、ライトポインタ、リードポインタ、先頭アドレス及び終端アドレスがどのような位置関係を保って制御されるかを示す。ここでは、バッファメモリ上にある３つの飛び地の領域を１つのリングバッファ領域として使用する例を示す。
【００１７】
図３に示すように、バッファメモリ３０１は、リングバッファ形式で制御されることからここではドーナツ状に示してある。バッファメモリ３０１は、先頭アドレス３０２、３０３及び３０４、並びに、終端アドレス３０５、３０６及び３０７によって従来技術を特徴付ける３つの飛び地の領域に分割される。ここでは、３つの飛び地の領域を１つのデータストリームに割り当てる。ライトポインタ３０８は、次にデータが書き込まれる位置のアドレスを更新し、保持する。ライトポインタ３０８の値は、データをバッファメモリに書き込む際にアドレス線に出力される。リードポインタ３０９は、それぞれの領域において次に読み出す位置のアドレスを更新し、保持する。リードポインタ３０９の値は、データをバッファメモリから読み出す際にアドレス線に出力される。
【００１８】
ここで、図３のように、ライトポインタ３０８の示す位置は先頭アドレス３０３と終端アドレス３０６により仕切られている領域にあり、リードポインタ３０９の示す位置は先頭アドレス３０２と終端アドレス３０５とにより仕切られている領域にあるものとする。また、ライトポインタ及びリードポインタは時計回りに進むものとする。このとき、データの書き込みが進み、ライトポインタ３０８の示す位置が終端アドレス３０６の示す位置に達すると、ライトポインタ３０８の値は次の領域の先頭アドレス３０４の値に更新される。同様に、データの読み出しが進み、リードポインタ３０９の示す位置が終端アドレス３０５の示す位置に達すると、リードポインタ３０９の値は次の領域の先頭アドレス３０３の値に更新される。
【００１９】
上記のような制御を行い、特許文献４に記載されている技術は、飛び地にある複数の領域を１つのリングバッファ領域として使用することを可能にしている。
【特許文献１】特表２００２−５０８１２５号公報
【特許文献２】特開２０００−３３０７６１号公報
【特許文献３】特開２００２−２５９１１５号公報
【特許文献４】特開平５−３４１９５７号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
しかしながら、上記従来技術には、以下のような課題がある。
【００２１】
まず、特許文献１、特許文献２及び特許文献３に記載されている従来の技術には、境界変数の動きが、ライトポインタやリードポインタの示す位置によって制限されるという大きな課題がある。
【００２２】
例えば、図２に示す境界変数２０２及び２０３で囲まれる領域を拡張したい場合、境界変数２０３を時計回りに移動させることで領域を拡張することができる。しかし、境界変数２０３はリードポインタ２０９を追い越して移動することはできない。これは、リードポインタ２０９とライトポインタ２０６とで囲まれる領域に保持されるデータが読み出される前に消去されることを防ぐためである。
【００２３】
つまり、隣のリングバッファ領域にある空き領域を使用するために境界変数の位置を動かそうとしても、境界変数の近傍にライトポインタやリードポインタが位置している場合は、リングバッファ領域の拡張や縮小を行えない。この場合、データの入出力が進行し、ライトポインタやリードポインタの位置が境界変数の位置から離れていくことが必要になり、その条件が満たされるまで、領域の拡張や縮小を待たされ続ける。
【００２４】
また、特許文献１、特許文献２及び特許文献３に記載されている従来の技術では、リングバッファ領域を連続領域として確保する。このため、ライトポインタの位置が一旦ラップされてしまうと、それ以降でリードポインタの位置がラップされるまでの間、リードポインタによってライトポインタの動作が制限され、隣のリングバッファ領域に空き領域が新たに発生したとしてもそこに領域を拡張してデータを書くことができない。
【００２５】
これらの理由から、使用できない大きな空き領域を長時間抱える可能性が高く、条件が偶然に整った場合にしかバッファメモリの使用効率を高めることができない。また、その時々の条件次第でバッファメモリの使用効率が高かったり低かったりするため、各データストリームの転送性能の見積りが非常に困難になる。
【００２６】
また、特許文献４に記載されている従来の技術は、飛び地にある複数の領域を１つのリングバッファとして制御することが目的であるが、バッファメモリを複数のデータストリームで共用させる場合にも適応することができる。この場合、特許文献１、特許文献２及び特許文献３に記載されている技術とは異なり、バッファメモリの空き領域へのリングバッファ領域の拡張が、リードポインタやライトポインタの位置に制限されることなく行えるという大きな利点が生じる。
【００２７】
しかしながら、複数のデータストリームがバッファメモリの空き領域を小刻みに、入り組んで占有することになり、バッファメモリの空き領域や占有領域の管理が複雑でその制御もまた困難になる。また、データストリーム毎のリングバッファ領域の大きさや空き領域の大きさを演算するには、そのための演算資源が必要になったり、あるいはＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）による制御や演算が必要になったりする。また、各データストリームの転送性能の見積りも簡単ではなくなる。
【００２８】
なお、特許文献４に記載されている従来の技術の利点として、空いている領域がどのようなサイズであってもリングバッファ領域を拡張できることも挙げられる。しかし、リングバッファ領域を拡張する際に、拡張領域を大きくとるとバッファメモリの使用効率が低下してしまう。逆に、小さくとると先頭アドレスや終端アドレスといった領域を管理するための資源が増加するし、前述のようにバッファメモリの領域管理が複雑になってしまう。
【００２９】
以上の理由から、特許文献４に記載されている従来の技術では、バッファメモリの領域を管理するために、複雑な制御や演算が必要になるという課題がある。したがって、複数のデータストリームでバッファメモリを共有させる場合に、特許文献４に記載されているような技術を適用することは賢明ではない。
【００３０】
そこで、本発明は、上記従来の課題を解決するもので、バッファメモリを複数のデータストリームで共有する際に、複数のデータストリームへの動的かつ柔軟な領域の割り当てを、バッファメモリの使用効率を維持しつつ、簡易な制御により実現できるバッファメモリ共有装置を提供することを目的とする。
【課題を解決するための手段】
【００３１】
上記従来の課題を解決するために本発明のバッファメモリ共有装置は、複数のデータストリーム用にバッファメモリを共有させるための制御を行うバッファメモリ共有装置であって、前記バッファメモリを分割した複数の領域のそれぞれに対応し、各領域の占有状況を示す複数のフラグを管理するフラグ管理手段と、前記複数のフラグに基づいて、前記複数のデータストリームへの前記複数の領域の排他的な割り当てを管理する占有管理手段と、データを書き込む前記バッファメモリ内の位置を指定するライトアドレスと、データを読み出す前記バッファメモリ内の位置を指定するリードアドレスとを生成するアドレス生成手段とを備え、前記アドレス生成手段は、前記データストリーム毎に対応させて、前記複数の領域のそれぞれの位置を示す複数の第１ビット列のうち、前記占有管理手段により割り当てられた領域を示す第１ビット列に関する情報を記憶する第１ＦＩＦＯメモリと、データを書き込む前記領域内の位置を示す第２ビット列を出力するライトカウンタと、データを読み出す前記領域内の位置を示す第３ビット列を出力するリードカウンタとを有し、前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された前記情報から得られる第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリの先頭に記憶された前記情報から得られる第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する。
【００３２】
これにより、複数のデータストリームへの動的かつ柔軟な領域の割り当てを、バッファメモリの使用効率を維持しつつ、簡易な制御により実現することができる。
【００３３】
また、前記第１ＦＩＦＯメモリは、前記複数の第１ビット列のうち前記占有管理手段により割り当てられた領域を示す第１ビット列を少なくとも１つ記憶し、前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された前記第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリの先頭に記憶された前記第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成してもよい。
【００３４】
これにより、複数のデータストリームへの動的かつ柔軟な領域の割り当てを、バッファメモリの使用効率を維持しつつ、簡易な制御により実現することができる。
【００３５】
また、前記占有管理手段は、前記領域への書き込みが終了した場合に、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させ、前記フラグ管理手段は、前記第１ＦＩＦＯメモリに記憶させた第１ビット列に対応するフラグを占有状態に変更してもよい。
【００３６】
これにより、バッファメモリへのデータの書き込みが終了された後に、新たな領域を占有するので、必要以上の領域を占有することがなく、バッファメモリの使用効率を向上させることができる。
【００３７】
また、前記占有管理手段は、さらに、書き込むべきデータがある場合に、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させてもよい。
【００３８】
これにより、データの書き込みの終了後に新たなデータの書き込みを実行しなければならないときに初めて、新たな領域を占有するので、必要以上の領域を占有することがなく、バッファメモリの使用効率をより向上させることができる。
【００３９】
また、前記ライトカウンタは、前記領域にデータが書き込まれる度にカウント値をインクリメントし、前記カウント値が最大値に達した場合に、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第２ビット列として出力し、前記占有管理手段は、前記ライトカウンタのカウント値が零値であり、かつ、書き込むべきデータがある場合、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させてもよい。
【００４０】
これにより、データの書き込みの終了をカウンタの値で判断することができ、簡易な制御により領域の割り当てを実行することができる。
【００４１】
また、前記アドレス生成手段は、前記ライトカウンタのカウント値が零値である場合は、前記占有管理手段が前記第１ＦＩＦＯメモリに記憶させる前記第１ビット列と、前記ライトカウンタのカウント値とを合成し、前記ライトカウンタのカウント値が零値でない場合は、前記第１ＦＩＦＯメモリの末尾に記憶された前記第１ビット列と、前記ライトカウンタのカウント値とを合成してもよい。
【００４２】
これにより、ＦＩＦＯメモリへの領域を示すビット列の書き込みと、バッファメモリへのデータストリームのデータの書き込みとを同時に実行することができ、処理速度を向上させることができる。
【００４３】
また、前記占有管理手段は、前記領域からの読み出しが終了した場合に、前記領域に対応するフラグを未占有状態にするフラグ更新情報を出力し、前記フラグ管理手段は、前記フラグ更新情報を取得した場合に、前記フラグを未占有状態に変更してもよい。
【００４４】
これにより、バッファメモリからのデータの読み出しが終了された後に、占有していた領域を直ちに解放することができ、バッファメモリの使用効率を向上させることができる。
【００４５】
また、前記リードカウンタは、前記領域からデータが読み出される度にカウント値をインクリメントし、前記カウント値が最大値に達した場合、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第３ビット列として出力し、前記占有管理手段は、前記リードカウンタのカウント値が零値になった場合に、前記フラグ更新情報を出力してもよい。
【００４６】
これにより、データの読み出しの終了をカウンタの値で判断することができ、簡易な制御により領域の割り当てを実行することができる。
【００４７】
また、前記ライトカウンタは、前記複数の領域の１つである第１領域にデータが書き込まれる度にカウント値をインクリメントし、前記カウント値が最大値に達した場合に、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第２ビット列として出力し、前記リードカウンタは、前記複数の領域の１つである第２領域からデータが読み出される度にカウント値をインクリメントし、前記カウント値が最大値に達した場合に、零値からインクリメントを繰り返すカウンタであり、前記カウント値を前記第３ビット列として出力し、前記占有管理手段は、前記ライトカウンタのカウント値が零値であり、かつ、書き込むべきデータがある場合、未占有状態のフラグに対応する前記第１ビット列の１つを前記第１ＦＩＦＯメモリに記憶させ、前記リードカウンタのカウント値が零値になった場合に、前記第２領域に対応するフラグを未占有状態にするフラグ更新情報を出力し、前記フラグ管理手段は、前記第１ＦＩＦＯメモリに記憶させた前記第１ビット列に対応するフラグを占有状態に変更し、前記フラグ更新情報を取得した場合に、前記第２領域に対応するフラグを未占有状態に変更してもよい。
【００４８】
これにより、バッファメモリの使用効率を維持しつつ、データの書き込み及び読み出しを、簡易な制御により実現することができる。
【００４９】
また、前記バッファメモリ共有装置は、さらに、前記データストリームへ割り当てる領域の個数を制限する占有制限手段を備え、前記占有管理手段は、前記個数に基づいて割り当てを管理してもよい。
【００５０】
これにより、バッファメモリの転送性能の見積もりなどを容易に行うことができる。
【００５１】
また、前記占有制限手段は、前記データストリーム毎に、占有することができる領域の最小数を動的に決定し、前記占有管理手段は、前記データストリーム毎に決定された前記最小数を確保できるように、前記領域の排他的な割り当てを管理してもよい。
【００５２】
これにより、データストリームに最低限の領域をいつでも確保することができるので、バッファメモリの転送性能の見積もりなどを容易に行うことができる。
【００５３】
また、前記占有バッファメモリ共有装置は、さらに、前記リードアドレスが指定する位置が含まれる領域にデータの書き込みを制御するためのラップ許可通知を出力するラップ制御手段を備え、前記占有管理手段は、前記ラップ許可通知を受け取った場合に、前記リードアドレスが指定する位置が含まれる領域を示す第１ビット列を、前記第１ＦＩＦＯメモリに記憶させてもよい。
【００５４】
これにより、バッファメモリの使用効率をさらに向上させることができる。
【００５５】
また、前記アドレス生成手段は、前記ライトカウンタが出力する前記第２ビット列が、前記リードカウンタの出力する第３ビット列に等しくなった場合に、前記ライトカウンタの出力を停止してもよい。
【００５６】
これにより、バッファメモリの使用効率を維持しつつ、未だ読み出されていないデータをラップしてしまうことを防ぐことができる。
【００５７】
また、前記第１ＦＩＦＯメモリは、データの読み出し位置を示すリードポインタとデータの書き込み位置を示すライトポインタとを有するリングバッファとして制御され、前記アドレス生成手段は、前記第１ＦＩＦＯメモリのライトポインタが示す位置の１つ手前の位置に記憶された第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリのリードポインタが示す位置に記憶された第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成してもよい。
【００５８】
また、前記バッファメモリ共有装置は、さらに、前記複数の第１ビット列を少なくとも１つ記憶する複数の第２ＦＩＦＯメモリを備え、前記フラグ管理手段は、さらに、前記複数の第２ＦＩＦＯメモリのそれぞれに対応し、各第２ＦＩＦＯメモリの占有状況を示す複数のＦＩＦＯフラグを管理し、前記占有管理手段は、さらに、前記複数のＦＩＦＯフラグに基づいて、前記複数のデータストリームへの前記第２ＦＩＦＯメモリの排他的な割り当てを管理し、前記第１ＦＩＦＯメモリは、前記複数の第２ＦＩＦＯメモリの識別情報のうち、前記占有管理手段により割り当てられた前記識別情報を記憶し、前記アドレス生成手段は、前記第１ＦＩＦＯメモリに記憶された前記識別情報を基にして、前記ライトアドレス及び前記リードアドレスを生成してもよい。
【００５９】
これにより、特にバッファメモリを共有する複数のデータストリームの個数が多い場合などに、領域の割り当てに必要なメモリ資源を削減することができる。
【００６０】
また、前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された識別情報が示す第２ＦＩＦＯメモリの末尾に記憶された第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、前記第１ＦＩＦＯメモリの先頭に記憶された識別情報が示す第２ＦＩＦＯメモリの先頭に記憶された第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成してもよい。
【００６１】
また、前記第１ビット列は、前記ライトアドレス及び前記リードアドレスの最上位ビットを含み、前記最上位ビットから連続するビットで構成されてもよい。
【００６２】
また、上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）から構成されているとしてもよい。
【００６３】
また、本発明は、通信機器として実現することもできる。すなわち、複数のデータストリームの送受信を行う通信機器であって、前記複数のデータストリームの送受信を行う制御回路と、前記制御回路によって受信された前記複数のデータストリームを一時的に記憶するバッファメモリとを備え、前記制御回路は、前記バッファメモリを分割した複数の領域のそれぞれに対応し、各領域の占有状況を示す複数のフラグを管理するフラグ管理手段と、前記複数のフラグに基づいて、前記複数のデータストリームへの前記複数の領域の排他的な割り当てを管理する占有管理手段と、データを書き込む前記バッファメモリ内の位置を指定するライトアドレスと、データを読み出す前記バッファメモリ内の位置を指定するリードアドレスとを生成するアドレス生成手段とを備え、前記アドレス生成手段は、前記データストリーム毎に対応させて、前記複数の領域のそれぞれの位置を示す複数の第１ビット列のうち、前記占有管理手段により割り当てられた領域を示す第１ビット列に関する情報を記憶する第１ＦＩＦＯメモリと、データを書き込む前記領域内の位置を示す第２ビット列を出力するライトカウンタと、データを読み出す前記領域内の位置を示す第３ビット列を出力するリードカウンタとを有し、前記アドレス生成手段は、前記第１ＦＩＦＯメモリの末尾に記憶された前記情報から得られる第１ビット列と前記第２ビット列とを合成することで前記ライトアドレスを生成し、かつ、前記第１ＦＩＦＯメモリの先頭に記憶された前記情報から得られる第１ビット列と前記第３ビット列とを合成することで前記リードアドレスを生成する。
【発明の効果】
【００６４】
本発明によれば、バッファメモリの使用効率を高く維持しながら、複数のデータストリームが同一のバッファメモリ上にそれぞれの可変量のリングバッファを動的に形成することができる。また、複数のデータストリームへのバッファメモリ領域の割り当てが簡易な制御により常時行える。これにより、バッファメモリ領域の削減やシステムの転送性能の向上、バッファメモリ制御の簡略化が可能になる。
【発明を実施するための最良の形態】
【００６５】
以下、本発明の実施の形態について図面を参照しながら説明する。なお、一連の図面においては、記載されている論理回路が同期をとるためのクロック信号の表示を省略してある。
【００６６】
（実施の形態１）
本実施の形態のバッファメモリ共有装置は、バッファメモリを複数のデータストリームで共有させるために、バッファメモリを分割した領域をデータストリーム毎に排他的に割り当て、割り当てた領域を管理するためのＦＩＦＯメモリをデータストリーム毎に備える装置である。
【００６７】
図４は、本実施の形態におけるバッファメモリ共有装置の構成を示すブロック図である。
【００６８】
バッファメモリ共有装置は、バッファメモリ４０１上にリングバッファ領域を形成し、複数のデータストリームでバッファメモリ４０１を共有する。バッファメモリ共有装置は、制御回路４０２と、ライト要求調停回路４０３と、リード要求調停回路４０４とを備える。
【００６９】
バッファメモリ４０１は、書き込みと読み出しとが同時に行えるデュアルポートＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。また、本実施の形態においてＲＡＭは１０２４（＝２10）段であるとし、１０ビットのアドレスによって書き込む位置、読み出す位置を指定するものとし、データバス幅は３２ビットであるとする。なお、本実施の形態のバッファメモリとしてはデュアルポートＲＡＭに限定されず、バッファメモリの容量やデータバス幅も限定されない。
【００７０】
本実施の形態においては、このバッファメモリ４０１上に２つのデータストリーム、データストリームＡとデータストリームＢとが個別のリングバッファ領域を形成し、バッファメモリ４０１を共有する場合を示す。
【００７１】
制御回路４０２は、バッファメモリ４０１へのデータの書き込み及びバッファメモリ４０１からのデータの読み出しを制御する。
【００７２】
制御回路４０２は、バッファメモリ４０１に対してライト要求と３２ビット幅のライトデータと、ライトデータを書き込む位置を指定する１０ビットのライトアドレスとを出力する。そして、ライトアドレスが指定する位置にライトデータを書き込む。
【００７３】
制御回路４０２は、バッファメモリ４０１に対してリード要求を出力し、同時に３２ビット幅のリードデータを読み出す位置を指定する１０ビットのリードアドレスを出力する。
【００７４】
制御回路４０２は、リード要求の応答として、リードデータとリードデータが有効であることを示す信号とをバッファメモリ４０１から受ける。これらにより、バッファメモリ４０１への書き込みとバッファメモリ４０１からの読み出しとが行なわれる。
【００７５】
ライト要求調停回路４０３は、データストリームＡのライト要求とライトデータと、データストリームＢのライト要求とライトデータとを受ける。また、制御回路４０２からデータストリームＡ及びデータストリームＢのデータを書き込むことが可能な空き容量の通知を受ける。ライト要求調停回路４０３は空き容量の通知から、データストリームＡ及びデータストリームＢのそれぞれがデータを書き込むことができるか否かを判断し、調停ポリシーに基づいて調停を行う。このとき、データストリームＡのライト要求を調停した場合はデータストリームＡのライト応答を出力する。データストリームＢのライト要求を調停した場合はデータストリームＢのライト応答を出力する。同時に、制御回路４０２に対して調停結果と調停されたライト要求とライトデータとを出力する。なお、本実施の形態では調停１回により１回の書き込みが行なわれる例を挙げているが、調停１回により数回のデータ書き込みが連続的に行なわれるような使い方をしても良い。
【００７６】
リード要求調停回路４０４は、データストリームＡのリード要求及びデータストリームＢのリード要求を受ける。また、制御回路４０２からデータストリームＡ及びデータストリームＢの読み出すことが可能なデータ残量の通知を受ける。リード要求調停回路４０４はデータ残量の通知から、データストリームＡ及びデータストリームＢのそれぞれがバッファメモリ４０１からデータを読み出すことができるかを判断し、調停ポリシーに基づいて調停を行う。このとき、データストリームＡのリード要求を調停した場合はデータストリームＡのリード応答を出力する。データストリームＢのリード要求を調停した場合はデータストリームＢのリード応答を出力する。同時に、制御回路４０２に対して調停結果と調停されたリード要求とを出力する。リード要求調停回路４０４は、制御回路４０２からリードデータとリードデータが有効であるという通知とを受ける。このリードデータがデータストリームＡのリード要求に対するものである場合は、データストリームＡに対してリードデータ有効通知とリードデータとを出力する。データストリームＢのリード要求に対するものである場合はデータストリームＢに対してリードデータ有効通知とリードデータとを出力する。なお、本実施の形態では、調停１回により１回の読み出しが行なわれる例を挙げているが、調停１回により数回のデータ読み出しが連続的に行なわれるような使い方をしても良い。
【００７７】
続いて、制御回路４０２の構成の詳細について説明する。図４に示すように、制御回路４０２は、上述した処理を実行するために、リングバッファ生成回路４０５と、セレクタ４０６及び４０７とを備える。
【００７８】
リングバッファ生成回路４０５は、本発明を特徴付ける機能を有する回路である。リングバッファ生成回路４０５は、データストリームＡ及びデータストリームＢがバッファメモリ４０１上にそれぞれのリングバッファ領域を動的に形成する際のライトアドレスとリードアドレスとを生成する。
【００７９】
すなわち、データストリームＡ及びデータストリームＢが、バッファメモリ４０１上の互いに異なる領域を使用して各々が１つのリングバッファを形成できるようにライトアドレスとリードアドレスとを生成する回路である。
【００８０】
セレクタ４０６は、バッファメモリ４０１へライト要求を出力する際、リングバッファ生成回路４０５から出力されるデータストリームＡのライトアドレスとデータストリームＢのライトアドレスとを、ライト要求調停回路４０３から出力される調停結果に従って選択し、ライトアドレスとしてバッファメモリ４０１に出力する。
【００８１】
セレクタ４０７は、バッファメモリ４０１へリード要求を出力する際、リングバッファ生成回路４０５から出力されるデータストリームＡのリードアドレスとデータストリームＢのリードアドレスとを、リード要求調停回路４０４から出力される調停結果に従って選択し、リードアドレスとしてバッファメモリ４０１に出力する。
【００８２】
以上の構成により、データストリームＡとデータストリームＢはバッファメモリ４０１上にそれぞれのリングバッファ領域を可変量で動的に形成することになる。
【００８３】
続いて、リングバッファ生成回路４０５の詳細について説明する。
【００８４】
図５は、本発明を特徴付けるリングバッファ生成回路４０５の構成を示すブロック図である。
【００８５】
なお、本実施の形態では、バッファメモリ４０１へ出力するアドレスは１０ビットである。一例として、このうちの上位の連続４ビットを一部ビット列とし、この一部ビット列の取り得る値をデータストリームＡ及びデータストリームＢで排他的に占有することとする。このとき、一部ビット列が上位の連続４ビットであるので、一部ビット列の値を排他的に占有することは、バッファメモリ４０１を連続領域として１６等分し、その１６等分された領域を排他的に占有することに等しい。
【００８６】
なお、占有する４ビットは上位から連続である必要はなく、どこを選んでも良い。例えば、上位から１ビット、中位から１ビット、下位から２ビットというように離散的に選んでも良い。この場合は連続領域とはならないが、バッファメモリ４０１を１６等分して排他的に占有すること自体は同じである。また、一部ビット列のビット幅は４ビットに限らず、例えば３ビットであったり５ビットであったりしても良い。３ビットの場合は、バッファメモリを８等分することになり、５ビットの場合は３２等分することになる。また、これら分割数はＣＰＵなど外部制御回路からの設定により動的に変更されるようにリングバッファ生成回路４０５は構成されても良い。
【００８７】
図５に示すように、リングバッファ生成回路４０５は、フラグ管理回路５０１と、アドレス生成回路Ａ５０２と、アドレス生成回路Ｂ５０３とを備える。
【００８８】
フラグ管理回路５０１は、この上位４ビットの一部ビット列が取り得る値の占有状況を表示するための１６個のフラグを有する。すなわち、アドレス線の上位４ビットの値が００００、０００１、００１０、００１１、０１００、０１０１、０１１０、０１１１、１０００、１００１、１０１０、１０１１、１１００、１１０１、１１１０、１１１１でアクセスされる等サイズの領域毎にその占有状況を反映しているフラグを保持し、管理している。フラグ管理回路５０１は、アドレス生成回路Ａ５０２及びアドレス生成回路Ｂ５０３に対して、この各領域の占有状況を出力している。また、アドレス生成回路Ａ５０２及びアドレス生成回路Ｂ５０３からのフラグ更新要求を受けて、フラグの値を占有状態に変更したり、未占有状態に変更したりする。なお、図５においては、占有状態を１、未占有状態を０の数値で表している。
【００８９】
アドレス生成回路Ａ５０２は、ライト要求調停回路４０３からのライト要求及びライト要求調停結果と、リード要求調停回路４０４からのリード要求及びリード要求調停結果とを受けとる。そして、データストリームＡのライト及びリードが行なわれる場合に、データストリームＡのデータを書き込む位置を指定するライトアドレスと、データストリームＡのデータを読み出す位置を指定するリードアドレスとをそれぞれ更新する。
【００９０】
アドレス生成回路Ａ５０２は、フラグ管理回路５０１から出力されている占有状況を参照し、新たに未占有状態の領域の占有を開始する場合は、占有する領域のフラグ（占有対象フラグ）を占有状態に変更する旨のフラグ更新要求をフラグ管理回路５０１に対して出力する。占有していた領域のデータを読み出し終え領域を開放する場合は、開放する領域のフラグ（開放対象フラグ）を未占有状態に変更する旨のフラグ更新要求を出力する。なお、図５ではフラグ更新要求は１つの信号線として表しているが、実際は、占有を要求する信号線と、開放を要求する信号線と、占有対象フラグを特定する信号線と、開放対象フラグを特定する信号線とからなる。
【００９１】
また、アドレス生成回路Ａ５０２は、フラグ管理回路５０１より受ける占有状況とアドレス生成回路Ａ５０２の内部の制御情報とから、データストリームＡが書き込み可能な空き容量を算出し、ライト要求調停回路４０３に対して出力する。また、内部の制御情報から、バッファメモリ４０１上にあるデータストリームＡのデータ量を算出し、リード要求調停回路４０４に対して出力する。
【００９２】
なお、フラグ管理回路５０１は各領域の占有状況を常に出力しているため、アドレス生成回路Ａ５０２及びアドレス生成回路Ｂ５０３は、それぞれ、必要に応じて直ちに未占有状態である領域を取得することができる。したがって、フラグ管理回路５０１は、アドレス生成回路Ａ５０２及びアドレス生成回路Ｂ５０３のいずれかに領域を取得された場合、取得された領域に対応するフラグを占有状態に変更してもよい。これにより、領域の取得とフラグの変更とを同時に実行することが可能となり、処理速度を向上させることができる。
【００９３】
同様に、アドレス生成回路Ｂ５０３は、ライト要求調停回路４０３からのライト要求及びライト要求調停結果と、リード要求調停回路４０４からのリード要求及びリード要求調停結果とを受けとる。そして、データストリームＢのライト及びリードが行なわれる場合に、データストリームＢのデータを書き込む位置を指定するライトアドレスと、データストリームＢのデータを読み出す位置を指定するリードアドレスとをそれぞれ更新する。
【００９４】
アドレス生成回路Ｂ５０３は、フラグ管理回路５０１から出力されている占有状況を参照し、新たに未占有の領域の占有を開始する場合は、占有する領域のフラグを占有状態に変更する旨のフラグ更新要求を出力する。占有していた領域のデータを読み出し終え、領域を開放する場合は、開放する領域のフラグを未占有状態に変更する旨のフラグ更新要求を出力する。なお、図５ではフラグ更新要求は１つの信号線として表しているが、実際は、占有を要求する信号線と、開放を要求する信号線と、占有対象フラグを特定する信号線と、開放対象フラグを特定する信号線とからなる。
【００９５】
また、アドレス生成回路Ｂ５０３は、フラグ管理回路５０１より受ける占有状況とアドレス生成回路Ｂ５０３の内部の制御情報とから、データストリームＢが書き込み可能な空き容量を算出し、ライト要求調停回路４０３に対して出力する。また、内部の制御情報から、バッファメモリ４０１上にあるデータストリームＢのデータ量を算出し、リード要求調停回路４０４に対して出力する。
【００９６】
続いて、アドレス生成回路Ａ５０２及びアドレス生成回路Ｂ５０３の詳細について説明する。なお、アドレス生成回路Ａ５０２とアドレス生成回路Ｂ５０３とは、同様の構成であるため、ここでは、アドレス生成回路Ａ５０２について説明する。
【００９７】
図６は、アドレス生成回路Ａ５０２の構成を示すブロック図である。
【００９８】
図６に示すように、アドレス生成回路Ａ５０２は、ＦＩＦＯＡ６０１と、ライトカウンタＡ６０２と、リードカウンタＡ６０３と、占有管理回路Ａ６０４と、セレクタ６０５とを備える。
【００９９】
ＦＩＦＯＡ６０１は、データストリームＡが占有する一部ビット列の値、すなわち、占有する等サイズの領域を記憶するためのＦＩＦＯメモリである。本実施の形態では、ＦＩＦＯＡ６０１はリングバッファ形式で制御されるＦＩＦＯメモリであるとし、ライトポインタとリードポインタとにより書く位置と読み出す位置とを特定するものとする。すなわち、ＦＩＦＯメモリの先頭は、リードポインタが示す位置であり、ＦＩＦＯメモリの末尾は、ライトポインタが示す位置の１つ手前の位置である。
【０１００】
また、ＦＩＦＯＡ６０１はフリップフロップで構成されるものとし、データの書き込みに１サイクルを要するがデータの読み出しには時間的コストはないものとする。また、占有する可能性のある一部ビット列の値の個数の上限が予め分かっている場合は、図６に示すように１６個全ての値を保持できるだけの段数を持っている必要はない。また、ＦＩＦＯＡ６０１は、ＦＩＦＯメモリとして動作する限りにおいて、単独のメモリである必要はない。例えば、データストリームＢの占有領域を記憶するためのＦＩＦＯメモリと同一のメモリ上に構成されていても良い。
【０１０１】
ＦＩＦＯＡ６０１は、占有管理回路Ａ６０４より占有信号及び占有値と、開放信号とを受ける。占有信号により占有値を記憶し、ライトポインタをインクリメントする。この時、占有値は一部ビット列の取り得る値の１つであり、４ビットの値である。また、開放信号によりリードポインタをインクリメントする。
【０１０２】
ＦＩＦＯＡ６０１はリードポインタの指している場所に保持されている値を占有管理回路Ａ６０４に出力する。また、ＦＩＦＯＡ６０１はライトポインタの指している場所の１つ手前の場所に保持されている値をセレクタ６０５に出力する。なお、リードポインタの指している場所に保持されている値は、データストリームＡがバッファメモリ４０１からデータを読み出すときのリードアドレスの上位４ビットの値として用いられる。ライトポインタの指している場所の１つ手前の場所に保持されている値は、データストリームＡのデータをバッファメモリ４０１に書き込むときのライトアドレスの上位４ビットとして用いられる。
【０１０３】
ＦＩＦＯＡ６０１は、ライトポインタやリードポインタ、ライトポインタのラップ状態を示すフラグやリードポインタのラップ状態を示すフラグといったＦＩＦＯ制御信号を占有管理回路Ａ６０４に対して出力する。ちなみに、ここでいうライトポインタやリードポインタのラップ状態を示すフラグとは、ライトポインタやリードポインタがリングバッファを一周する度に反転する１ビットの信号である。ライトポインタとリードポインタとが同じ周回にある場合は同じ値を示し、ライトポインタが先に次の周回に入った場合は互いに反転した値を示す。ライトポインタ及びリードポインタが同じ周回にある場合は、リードポインタはライトポインタを追い越すことができない。また、ライトポインタが先に次の周回に入った場合は、ライトポインタはリードポインタを追い越すことができない。ラップ状態を示すフラグは、以上のようなライトポインタ及びリードポインタの動きの制約を判断するために用いられる。
【０１０４】
ライトカウンタＡ６０２は、ライト要求によりバッファメモリ４０１にデータストリームＡのデータが書き込まれる度にインクリメントされる。このとき、ライト要求がデータストリームＡのライト要求であることは、ライト要求調停回路４０３からのライト要求及びライト要求調停結果から判別される。例えば、ライト要求調停結果の値が１の時にデータストリームＡのライト要求が調停されたことを表すとすると、図６のように、ライト要求とライト要求調停結果との論理積をとれば良い。なお、この判別はここより上層でなされても良い。
【０１０５】
リードカウンタＡ６０３は、リード要求によりバッファメモリ４０１からデータストリームＡのデータが読み出される度にインクリメントされる。このとき、リード要求がデータストリームＡのリード要求であることは、リード要求調停回路４０４からのリード要求及びリード要求調停結果から判別される。例えば、リード要求調停結果の値が１の時にデータストリームＡのリード要求が調停されたことを表すとすると、図６のように、リード要求とリード要求調停結果との論理積をとればよい。なお、この判別はここより上層でなされても良い。
【０１０６】
ライトカウンタＡ６０２及びリードカウンタＡ６０３は、共に６ビットのカウンタである。ライトカウンタＡ６０２及びリードカウンタＡ６０３は００００００から１１１１１１までをインクリメントされ、１１１１１１の状態で次の書き込み、又は、読み出しが行われたときには共に００００００に戻る。これらのカウンタは、カウンタ値を占有管理回路Ａ６０４に出力する。また、リードカウンタＡ６０３及びライトカウンタＡ６０２のカウンタ値は、それぞれ、データストリームＡがバッファメモリ４０１からデータを読み出すときのリードアドレスと、バッファメモリ４０１にデータを書き込むときのライトアドレスとの下位６ビットとして用いられる。
【０１０７】
占有管理回路Ａ６０４は、ライトカウンタＡ６０２からのカウンタの値を参照する。カウンタの値が００００００の場合は、新たに領域を占有する必要があるため、フラグ管理回路５０１が出力する占有状況を参照し、未占有状態の領域のうち１つをデータストリームＡが次に占有する領域として決定する。このとき、未占有状態の領域であればどの領域を選択しても良く、選択した領域を示す４ビットの一部ビット列の値を占有値としてＦＩＦＯＡ６０１に出力する。占有管理回路Ａ６０４は、データストリームＡのライト要求により占有信号をＦＩＦＯＡ６０１に出力し、ＦＩＦＯＡ６０１は占有領域を示す４ビットの値を記憶する。このとき占有管理回路Ａ６０４は、新たに領域を占有したことと占有領域を示す４ビットの値とを、フラグ更新要求を用いてフラグ管理回路５０１に通知する。
【０１０８】
また、占有管理回路Ａ６０４は、リードカウンタＡ６０３からのカウンタの値を受け、ＦＩＦＯＡ６０１からリードポインタの指している場所に保持されている値を受ける。このとき、データストリームＡのリード要求により、リードカウンタＡ６０３の値が１１１１１１から００００００に戻った場合は、リードポインタの指している場所に保持されている値とこの値の示す領域からデータの読み出しを終えたこととを、フラグ更新要求を用いてフラグ管理回路５０１に通知し、同時にＦＩＦＯＡ６０１に開放信号を出力する。また、バッファメモリ４０１から全てのデータを読み出し終えた場合も同様である。
【０１０９】
さらに、占有管理回路Ａ６０４は、ＦＩＦＯＡ６０１からＦＩＦＯ制御信号を受ける。受け取ったＦＩＦＯ制御信号と、ライトカウンタＡ６０２及びリードカウンタＡ６０３から受けるカウンタの値とから、データストリームＡがバッファメモリ４０１に書き込むことができる空き容量を算出し、算出した空き容量をライト要求調停回路４０３に出力する。同時に、バッファメモリ４０１にあるデータ残量を算出し、算出したデータ残量をリード要求調停回路４０４に出力する。
【０１１０】
セレクタ６０５は、占有管理回路Ａ６０４から出力される占有値と、ＦＩＦＯＡ６０１から出力されるライトポインタの指している場所の１つ手前の場所に保持されている値とから一方を選択する。このとき、占有管理回路Ａ６０４から占有信号が出力されている場合は、占有値の方を選択し、それ以外の場合はライトポインタの指している場所の１つ手前の場所に保持されている値を選択する。これは、新たに領域を占有する際、占有管理回路Ａ６０４が出力した占有値をＦＩＦＯＡ６０１が保持するのに１サイクルが必要になるためである。このとき、セレクタ６０５の出力信号は、データストリームＡのライトアドレスの上位４ビットとなる。
【０１１１】
なお、データストリームＢのアドレス生成を行うアドレス生成回路Ｂ５０３の動作もアドレス生成回路Ａ５０２の動作と同様である。
【０１１２】
次に、本実施の形態のバッファメモリ共有装置の動作について具体例を挙げながら説明する。特に、新たな領域を占有する動作、及び、データが全て読み出された領域を開放する動作について説明する。
【０１１３】
図７は、本実施の形態のバッファメモリ共有装置の動作を説明するための図である。同図のアドレス生成回路Ａ５０２は、データストリームＡのデータを読み書きするためのライトアドレスＡ及びリードアドレスＡを生成する。アドレス生成回路Ｂ５０３は、データストリームＢのデータを読み書きするためのライトアドレスＢ及びリードアドレスＢを生成する。なお、上述したように、アドレス生成回路Ｂ５０３は、アドレス生成回路Ａ５０２と同じ構成である。図７に示すように、アドレス生成回路Ｂ５０３は、ＦＩＦＯＢ６１１と、ライトカウンタＢ６１２と、リードカウンタＢ６１３と、占有管理回路Ｂ６１４とを備える。ＦＩＦＯＢ６１１と、ライトカウンタＢ６１２と、リードカウンタＢ６１３と、占有管理回路Ｂ６１４とは、それぞれ、上述したＦＩＦＯＡ６０１と、ライトカウンタＡ６０２と、リードカウンタＡ６０３と、占有管理回路Ａ６０４とと同様の動作を行う。
【０１１４】
ＦＩＦＯＡ６０１及びＦＩＦＯＢ６１１には、それぞれ、バッファメモリ４０１を１６等分した領域のうち、いくつかの領域が排他的に割り当てられている。図７に示す例では、ＦＩＦＯＡ６０１には、一部ビット列が００１０、００１１、０００１及び０１０１である４つの領域が割り当てられている。ＦＩＦＯＢ６１１には、一部ビット列が００００及び１１００である２つの領域が割り当てられている。ＦＩＦＯＡ６０１及びＦＩＦＯＢ６１１に割り当てられた領域はデータストリームＡ及びデータストリームＢに占有されているとみなすため、００００、０００１、００１０、００１１、０１０１及び１１００の６つの領域のフラグは占有状態であることを示している。
【０１１５】
ここで、まず、データストリームＡのデータの読み出しを行う場合について説明する。
【０１１６】
データストリームＡのデータの読み出しを行う場合、アドレス生成回路Ａ５０２は、ＦＩＦＯＡ６０１のリードポインタＡが示す４ビットの値と、リードカウンタＡ６０３が出力する６ビットの値とを合成することで、１０ビットのリードアドレスＡを生成する。同図の例では、０１０１と０００１０１とが合成され、１０ビットのリードアドレスＡとして０１０１０００１０１が生成される。
【０１１７】
図８は、リードアドレスの生成と領域の開放とに関わる動作を説明するための図である。
【０１１８】
同図に示すように、リードカウンタＡ６０３のカウント値が１１１１１１である時、リードポインタＡが示す４ビットの値００１０と、１１１１１１とが合成され、リードアドレスＡとして００１０１１１１１１が出力される。リードカウンタＡ６０３は最大値に達したので、初期値である００００００に戻る。同時に、リードポインタＡは定められた方向に（ここでは時計回りに）移動する。さらに、同時に、フラグ管理回路５０１に対して、占有管理回路Ａ６０４（図８には示されていない）が、領域の開放を示すフラグ更新要求を出力する。フラグ管理回路５０１は、フラグ更新要求を受け取り、００１０を未占有状態に変更する。
【０１１９】
以上のように、リードアドレスＡとして００１０１１１１１１が生成され、データが読み出されると、次に、リードアドレスＡとして０１０１００００００が生成され、データが読み出される。以降、同様にして、リードカウンタＡ６０３がインクリメントされることで、順次、バッファメモリ４０１からデータが読み出される。
【０１２０】
続いて、データストリームＡのデータの書き込みを行う場合について説明する。
【０１２１】
データストリームＡのデータの書き込みを行う場合、アドレス生成回路Ａ５０２は、ＦＩＦＯＡ６０１のライトポインタＡの１つ手前に保持される４ビットの値と、ライトカウンタＡ６０２が出力する６ビットの値とを合成することで、１０ビットのライトアドレスＡを生成する。図７の例では、００１０と０１００１１とが合成され、１０ビットのライトアドレスＡとして００１００１００１１が生成される。
【０１２２】
図９は、ライトアドレスの生成と領域の占有とに関わる動作を説明するための図である。
【０１２３】
同図に示すように、ライトカウンタＡ６０２のカウント値が１１１１１１であるとき、ライトポインタＡの１つ手前に保持される４ビットの値０００１と、１１１１１１とが合成され、ライトアドレスＡとして０００１１１１１１１が出力される。ライトカウンタＡ６０２は最大値に達したので、初期値である００００００に戻る。
【０１２４】
ここで、データストリームＡのデータの書き込みが続く場合は、占有管理回路Ａ６０４（図９には示されていない）は、フラグ管理回路５０１の示すフラグを参照することで、未占有状態の領域を選択し、選択した領域を示す４ビットの値をＦＩＦＯＡ６０１のライトポインタＡが示す位置に記憶させる。
【０１２５】
例えば、新たに選択した未占有状態の領域を示す４ビットの値が１０１１である場合、ＦＩＦＯＡ６０１のライトポインタＡが示す位置に１０１１が書き込まれる。同時に、アドレス生成回路Ａ５０２は、１０１１と００００００とを合成し、１０ビットのライトアドレスＡとして１０１１００００００を生成する。また、フラグ管理回路５０１は、１０１１を占有状態に変更する。
【０１２６】
ＦＩＦＯＡ６０１は、ライトポインタＡが示す位置に１０１１を書き込むと、ライトポインタＡを定められた方向に（ここでは時計回りに）移動させる。以降、同様にして、ライトカウンタＡ６０２がインクリメントされることで、順次、バッファメモリ４０１にデータが書き込まれる。
【０１２７】
なお、データストリームＢのデータを読み出す又は書き込む場合についても同様である。
【０１２８】
以上のように、本実施の形態のバッファメモリ共有装置によれば、バッファメモリの位置を指定するアドレスをＦＩＦＯメモリとカウンタとを用いて管理することで、データの書き込み位置及び読み出し位置を示すことができる。つまり、バッファメモリの空き容量や占有領域の管理及び制御が容易である。
【０１２９】
したがって、複数のデータストリームが同一のバッファメモリ上に各々のリングバッファを可変量に形成する際、それぞれのライトポインタやリードポインタによって領域の拡張や縮小を妨げ合うことがなくなり、バッファメモリの使用効率を常に高く維持することが可能になる。
【０１３０】
（実施の形態２）
本実施の形態のバッファメモリ共有装置は、データストリームの転送性能の見積もりなどを容易にするために、データストリーム毎に割り当てる領域の個数を制限する装置である。
【０１３１】
図１０は、本実施の形態におけるバッファメモリ共有装置の構成を示すブロック図である。
【０１３２】
本実施の形態のバッファメモリ共有装置は、実施の形態１のバッファメモリ共有装置と比較して、制御回路４０２の代わりに制御回路７０１が備えられた点が異なる。以下では、同じ点は説明を省略し、異なる点を中心に説明する。
【０１３３】
制御回路７０１は、制御回路４０２の動作に加えて、さらに、外部からの占有設定を受ける。占有設定は、データストリームＡ及びデータストリームＢがバッファメモリ４０１のバッファ領域をそれぞれどの程度占有するのかを指定する指示である。
【０１３４】
制御回路７０１は、以上の処理を実行するために、リングバッファ生成回路７０２と、セレクタ４０６及び４０７とを備える。
【０１３５】
リングバッファ生成回路７０２は、リングバッファ生成回路４０５の動作に加えて、外部からの占有設定を受ける。
【０１３６】
図１１は、リングバッファ生成回路７０２の構成を示すブロック図である。
【０１３７】
同図に示すように、リングバッファ生成回路７０２は、フラグ管理回路５０１と、占有制限回路８０１と、アドレス生成回路Ａ８０２と、アドレス生成回路Ｂ８０３とを備える。
【０１３８】
占有制限回路８０１は占有設定を受けて、データストリームＡ及びデータストリームＢに割り当てられる領域の上限を算出し、アドレス生成回路Ａ８０２及びアドレス生成回路Ｂ８０３に対して出力する。
【０１３９】
占有制限回路８０１は、例えば、外部のＣＰＵ等の制御回路からデータストリームＡ及びデータストリームＢに割り当てる占有領域の下限を与えられる。例えば、一部ビット列の取りうる１６個の値のうち、データストリームＡには少なくとも３つを占有させ、データストリームＢには少なくとも５つを占有させるように設定される場合、本実施の形態では計１６個の一部ビット列の取りうる値があり、それを２つのデータストリームで無駄なく使用させるため、データストリームＡに割り当てられる上限値は１１（＝１６−５）となり、データストリームＢに割り当てられる上限値は１３（＝１６−３）となる。
【０１４０】
占有制限回路８０１は、このように各上限値を算出し出力する。なお、占有制限の設定はこの例に限らず、例えば、最初から各データストリームに割り当てる上限値が与えられても良い。バッファメモリ４０１へ出力されるアドレス線の一部ビット列の値を排他占有することによりバッファメモリ４０１は等サイズの占有領域として分割されるが、その占有領域の単位でバッファメモリ４０１の領域の割り当てを簡易に制御することに本発明の特徴がある。
【０１４１】
アドレス生成回路Ａ８０２は、アドレス生成回路Ａ５０２の動作に加えて、さらに、上述したように占有制限回路８０１から入力されるデータストリームＡの占有制限（上限値）に従って、領域の割り当てを行う。占有制限に従った領域の割り当て処理の詳細は、後述する。
【０１４２】
アドレス生成回路Ｂ８０３は、アドレス生成回路Ａ８０２と同じ構成である。
【０１４３】
続いて、アドレス生成回路Ａ８０２及びアドレス生成回路Ｂ８０３が、それぞれのデータストリームの占有制限を受けた場合の処理について説明する。なお、ここでは、アドレス生成回路Ａ８０２とアドレス生成回路Ｂ８０３とは同じ動作を行うので、アドレス生成回路Ａ８０２を一例として説明する。
【０１４４】
図１２は、アドレス生成回路Ａ８０２の構成を示すブロック図である。
【０１４５】
図１２に示すように、アドレス生成回路Ａ８０２は、占有管理回路Ａ９０１と、ＦＩＦＯＡ６０１と、ライトカウンタＡ６０２と、リードカウンタＡ６０３と、セレクタ６０５とを備える。
【０１４６】
占有管理回路Ａ９０１は、データストリームＡの占有制限を受け、その占有制限が示す値以上に占有が行なわれないように制限する。占有管理回路Ａ９０１は、占有管理回路Ａ６０４と同様にデータストリームＡの空き容量を出力するが、このとき出力する値は占有制限が示す値から算出される容量以下に制限される。例えば、今、占有制限が１１であるとする。バッファメモリ４０１は１０２４段であるので、一部ビット列の取り得る１６個の値のうちの１個を占有することにより６４段の領域を占有することになる。ゆえに、データストリームＡが占有できる領域の最大値は７０４段（＝６４×１１）となる。このとき、フラグ管理回路５０１から出力される占有状況とＦＩＦＯＡ６０１から出力されるＦＩＦＯ制御信号とライトカウンタＡ６０２及びリードカウンタＡ６０３から出力されるカウンタ値とから算出されたデータストリームＡの空き容量が、７０４段より大きかったとしても、空き容量として出力される値は７０４となる。
【０１４７】
占有管理回路Ａ９０１のその他の動作は、占有管理回路Ａ６０４と同じである。また、データストリームＢのアドレス生成を行うアドレス生成回路Ｂ８０３の動作もアドレス生成回路Ａ８０２の動作と同様である。
【０１４８】
これらにより、データストリームＡ及びデータストリームＢが最低限のバッファメモリ領域の占有を保証されながら、残りの領域を動的に占有し合い転送性能の向上を図るといった制御を容易に行うことができる。
【０１４９】
なお、占有設定が更新された時点で、占有設定が示す値よりも多く領域を占有していたとしても、占有している領域の数はデータ転送が進むに従って占有設定が示す値以下に収束するため、設定は常時可能である。具体的には、以下の通りである。
【０１５０】
図１３は、データストリーム毎に制限される占有可能な領域の数の一例を示す図である。同図に示すように、データストリームＡの占有すべき領域の下限値は３から２に変更され、データストリームＢの占有すべき領域の下限値は２から１３に変更されたとする。このとき、データストリームＡの占有制限は、１４（＝１６−２）から３（＝１６−１３）に変更され、データストリームＢの占有制限は、１３（＝１６−３）から１４（＝１６−２）に変更される。
【０１５１】
図１４は、データストリーム毎に制限される占有可能な領域の数が動的に変更した場合の動作を説明するための図である。同図に示すように、ＦＩＦＯＡ６０１は、００１０、００１１、０００１及び０１０１の４つの領域を占有している。ＦＩＦＯＢ６１１は、００００及び１１００の２つの領域を占有している。
【０１５２】
ここで、図１３に示すように占有制限が動的に変更された場合、データストリームＡは、占有制限が３であるにもかかわらず、４つの領域を占有している。そこで、データストリームＡが占有する領域を３つにするために、占有管理回路Ａ９０１は、たとえデータストリームＡのライト処理が進行し、００１０の領域の全てに書き込みが終了した場合（すなわち、００１０１１１１１１にデータを書き込んだ場合）であっても、新たな領域の占有を禁止する。これにより、データストリームＡのリード処理が進行し、０１０１の領域の全てのデータを読み出し、０１０１の領域を開放することで、データストリームＡが占有する領域を３つにすることができる。以降は、常に占有する領域が３つ以下となるように、占有管理回路Ａ９０１は、領域の占有を管理する。
【０１５３】
以上のように、本実施の形態のバッファメモリ共有装置によれば、複数のデータストリームが同一のバッファメモリ上に各々のリングバッファを可変量に形成する際、それぞれのデータストリームに割り当てるバッファメモリの領域を簡易な制御で動的に変更することが可能になる。したがって、各データストリームの転送性能の見積りも容易になる。
【０１５４】
（実施の形態３）
本実施の形態のバッファメモリ共有装置は、バッファメモリの使用効率をより向上させるために、データの読み出し処理が完了していない領域内の書き込み可能な箇所にデータを書き込むことができる装置である。
【０１５５】
図１５は、本実施の形態におけるバッファメモリ共有装置の構成を示すブロック図である。
【０１５６】
本実施の形態のバッファメモリ共有装置は、実施の形態２のバッファメモリ共有装置と比較して、制御回路７０１の代わりに制御回路１００１が備えられた点が異なる。以下では、同じ点は説明を省略し、異なる点を中心に説明する。
【０１５７】
制御回路１００１は、制御回路７０１の動作に加えて、外部からデータストリームＡ及びデータストリームＢのラップ制御設定を受ける。ラップ制御設定とは、ラップ処理を実行するか否かを決定するための設定情報である。なお、ここでいうラップ処理とは、バッファメモリ４０１を分割した領域のうちリード処理が実行されている領域に対して、ライト処理を実行することである。
【０１５８】
制御回路１００１は、以上の処理を実行するために、リングバッファ生成回路１００２と、セレクタ４０６及び４０７とを備える。
【０１５９】
リングバッファ生成回路１００２は、リングバッファ生成回路７０２の動作に加えて、ラップ制御の設定に関わる処理を実行する。
【０１６０】
図１６は、リングバッファ生成回路１００２の構成を示すブロック図である。同図のリングバッファ生成回路１００２は、フラグ管理回路５０１と、占有制限回路１１０１と、アドレス生成回路Ａ１１０２と、アドレス生成回路Ｂ１１０３と、ラップ制御回路１１０４とを備える。
【０１６１】
占有制限回路１１０１は、占有制限回路８０１の動作に加えて、さらに、データストリームＡ及びデータストリームＢの占有制限をラップ制御回路１１０４に対して出力する。
【０１６２】
アドレス生成回路Ａ１１０２及びアドレス生成回路Ｂ１１０３は、アドレス生成回路Ａ８０２及びアドレス生成回路Ｂ８０３の動作に加えて、ラップ制御回路１１０４からデータストリームＡ及びデータストリームＢのラップ許可通知を受ける。ラップ許可通知を受けた場合の処理については後述する。
【０１６３】
ラップ制御回路１１０４は、外部のＣＰＵ等の制御回路からのラップ制御設定を受ける。また、占有制限回路１１０１が出力するデータストリームＡ及びデータストリームＢの占有制限と、アドレス生成回路Ａ１１０２が出力するデータストリームＡの空き容量通知、アドレス生成回路Ｂ１１０３が出力するデータストリームＢの空き容量通知を参照する。これらを基に、データストリームＡのラップ処理及びデータストリームＢのラップ処理が適当であるかを判断し、適当である場合にはアドレス生成回路Ａ１１０２及びアドレス生成回路Ｂ１１０３に対してラップ許可通知を出力する。
【０１６４】
ここで、例えば、ラップ制御回路１１０４は、データストリームＡの空き容量が無くなり新たに領域を占有しようとするが、占有制限に既に達しており新しい領域を占有できない状態であるような場合、ラップすることが適当であると判断してデータストリームＡのラップ許可通知を出力する。
【０１６５】
なお、ラップ処理の判断の方法は、上記の方法に限らない。例えば、予め入力されるデータ量や出力されるデータ量が判っている場合などは、それらを判断材料に加えることも可能である。また、各データストリームのデータの入力速度や出力速度を監視して、それらを勘案してラップすることが得策であるかどうかを判断するようなことをしても良い。
【０１６６】
続いて、アドレス生成回路Ａ１１０２及びアドレス生成回路Ｂ１１０３が、ラップ許可通知を受けた場合の処理について説明する。なお、ここでは、アドレス生成回路Ａ１１０２とアドレス生成回路Ｂ１１０３とは同じ動作を行うので、アドレス生成回路Ａ１１０２を一例として説明する。
【０１６７】
図１７は、アドレス生成回路Ａ１１０２の構成を示すブロック図である。
【０１６８】
図１７に示すように、アドレス生成回路Ａ１１０２は、占有管理回路Ａ１２０１と、ＦＩＦＯＡ６０１と、ライトカウンタＡ６０２と、リードカウンタＡ６０３と、セレクタ６０５とを備える。
【０１６９】
占有管理回路Ａ１２０１は、データストリームＡのラップ許可通知を受け、データストリームＡの空き容量が無くなった場合、ラップ許可通知を参照する。ラップ許可通知がラップ処理を許可している場合は、ＦＩＦＯＡ６０１のリードポインタの位置が示す場所に保持されている値に対して、新たな占有が行えるように、その値を占有値として出力する。例えば、図１７ではリードポインタの位置が示す場所に保持されている値は０１０１である。このとき、フラグ管理回路５０１の一部ビット列の値０１０１の占有状況を表示するフラグは占有状態を表示しているが、占有管理回路Ａ１２０１は０１０１を占有値として出力する。また、一部ビット列の値０１０１を再度占有した場合に、データストリームＡがデータを書き込むことができる空き容量の値（リードカウンタＡ６０３のカウンタ値に等しい）を空き容量通知として出力しておく。この状態で、データストリームＡのライト要求が入った場合は、占有値０１０１をライトアドレスの上位４ビットとして出力し、占有値０１０１をＦＩＦＯＡ６０１に記録する。ちなみに、このとき、ライトアドレスの下位６ビットはライトカウンタＡ６０２のカウンタ値００００００である。
【０１７０】
図１８は、上記の動作をより具体的に説明するための模式図である。データストリームＡに対して新たな領域を占有することができない場合に、占有管理回路Ａ１２０１がラップ許可通知を受けた場合、占有管理回路Ａ１２０１は、ＦＩＦＯＡのライトポインタＡが示す位置に、リードポインタＡが示す４ビットの値を記憶させる。図１８に示す例では、ライトポインタＡの示す位置に１００１を記憶させ、ライトポインタＡは時計回りに移動する。
【０１７１】
これにより、バッファメモリ４０１では、１００１が示す領域内に、リードポインタとライトポインタとが存在することとなる。したがって、読み出しの終えていないデータの上に新たなデータの書き込みが実行されないように制御しなければならない。
【０１７２】
上記のようにラップした後、ＦＩＦＯＡ６０１のリードポインタＡの指す場所に保持されている値と、ライトポインタＡの指している場所の１つ手前の場所に保持されている値が同じである期間は、ライトカウンタＡ６０２のカウンタ値はリードカウンタＡ６０３のカウンタ値以上になることはない。これは、リングバッファ生成回路１００２が出力する空き容量を勘案した上で、ライト要求調停回路４０３でライト要求の調停が行われるためであり、それによりリングバッファがオーバーフローを起さないように制御されるからである。また、これは一度ラップしてしまうと書き込みが、読み出しの進捗に制限されることを意味している。しかしながら、本実施の形態においては、バッファメモリ４０１上の離散的な飛び地を１つのリングバッファ領域として制御している。ゆえに、特許文献１、特許文献２及び特許文献３に記載されている従来の技術に比べて、ラップした後で書き込みが読み出しの進捗に制限される可能性は低く、例え制限されることになったとしてもその期間は短く限定的である。
【０１７３】
また、ラップした後でリードポインタの指す場所に保持されている値と、ライトポインタの指している場所の１つ手前の場所に保持されている値が同じである期間において、リードカウンタＡ６０３のカウンタ値が１１１１１１から００００００に更新されたとしても、占有管理回路Ａ１２０１はフラグ管理回路５０１に対して、一部ビット列の値が０１０１により示される占有領域の開放を通知するフラグ更新要求は出力しない。これは、ラップすることで、一部ビット列の値が０１０１により示される占有領域を再度占有しているからである。
【０１７４】
また、データストリームＢのアドレス生成を行うアドレス生成回路Ｂ１１０３の動作もアドレス生成回路Ａ１１０２の動作と同様である。
【０１７５】
以上のように、本実施の形態のバッファメモリ共有装置によれば、複数のデータストリームが同一のバッファメモリ上に各々のリングバッファを可変量に形成する際、各々の領域を拡張し続けるのか若しくは拡張を中止するのかを、設定されたポリシーやその時々の状況に従って適当に判断することが可能になる。したがって、バッファメモリの使用効率の向上が図られる。
【０１７６】
（実施の形態４）
本実施の形態のバッファメモリ共有装置は、領域の管理に用いられるバッファメモリのメモリ資源を有効に利用するために、バッファメモリの領域を示す一部ビット列を、複数のデータストリームで共有させる装置である。本実施の形態のバッファメモリ共有装置は、実施の形態１〜３に示すバッファメモリ共有装置と基本的な構成は同じであり、バッファメモリを分割した領域の割り当ての管理に対する処理が異なっている。以下では、領域の割り当ての管理に係わるＦＩＦＯメモリについて詳細に説明し、他の点については説明を省略する。
【０１７７】
本実施の形態では、一例として、データストリームＡ、Ｂ及びＣの３つのデータストリームに、６４（＝２6）個の領域に分割したバッファメモリを共有させる。すなわち、１０ビットのアドレスのうち、上位の連続６ビットを一部ビット列とする。
【０１７８】
図１９は、本実施の形態のバッファメモリ共有装置のＦＩＦＯメモリの構成を示す図である。
【０１７９】
バッファメモリ用フラグ１３０１は、上位６ビットの一部ビット列が取り得る値の占有状況を表示するための６４個のフラグである。すなわち、００００００、０００００１、００００１０、００００１１、・・・、１１１１００、１１１１０１、１１１１１０、１１１１１１でアクセスされる等サイズの領域毎にその占有状況を反映しているフラグである。バッファメモリ用フラグ１３０１は、フラグ管理回路５０１により管理されている。
【０１８０】
バッファメモリ用ＦＩＦＯ１３０２は、一部ビット列の値、すなわち、等サイズの領域を記憶するための複数のＦＩＦＯメモリである。ここでは、一例として、バッファメモリ共有装置は、８個のデータを書き込むことが可能なＦＩＦＯメモリを１０個備える。本実施の形態では、これら１０個のＦＩＦＯメモリが、データストリーム毎に占有される。なお、８個のデータを書き込むことのできるＦＩＦＯメモリを１０個備えることにより、全部で８０（＝８×１０）個のデータを保持することができる（本実施の形態では、６４個のフラグに対して余裕を持たせている）。
【０１８１】
１０個のＦＩＦＯメモリには、それぞれ、ＦＩＦＯ＿００００、ＦＩＦＯ＿０００１、ＦＩＦＯ＿００１０、ＦＩＦＯ＿００１１、ＦＩＦＯ＿０１００、ＦＩＦＯ＿０１０１、ＦＩＦＯ＿０１１０、ＦＩＦＯ＿０１１１、ＦＩＦＯ＿１０００及びＦＩＦＯ＿１００１のようにＩＤ番号が付されている。
【０１８２】
ＦＩＦＯメモリ用フラグ１３０３は、バッファメモリ用ＦＩＦＯ１３０２に含まれる１０個のＦＩＦＯメモリの占有状況を示すフラグである。ＦＩＦＯメモリ用フラグ１３０３は、例えば、フラグ管理回路５０１により管理されている。
【０１８３】
データストリーム用ＦＩＦＯ１３０４は、ＦＩＦＯメモリのＩＤを保持するデータストリーム毎のＦＩＦＯメモリである。ここでは、データストリームＡ、Ｂ及びＣのそれぞれにＦＩＦＯＡ、ＦＩＦＯＢ及びＦＩＦＯＣが備えられる。データストリーム用ＦＩＦＯ１３０４は、各データストリームのアドレス生成手段が備える（すなわち、実施の形態１のＦＩＦＯＡ６０１などに相当する）。
【０１８４】
ライトカウンタ１３０５は、例えば、ライトカウンタＡ６０２と同じ動作を行うカウンタである。ただし、出力するカウント値が４ビットである点だけが異なる。
【０１８５】
リードカウンタ１３０６は、例えば、リードカウンタＡ６０３と同じ動作を行うカウンタである。ただし、出力するカウント値が４ビットである点だけが異なる。
【０１８６】
以上のように、本実施の形態では、バッファメモリを分割した領域を示す一部ビット列をデータストリーム毎にＦＩＦＯメモリで排他的に保持するのではなく、一部ビット列を保持するＦＩＦＯメモリをデータストリーム毎にＦＩＦＯメモリで排他的に保持する。すなわち、アドレスを生成するためには、ＦＩＦＯメモリを２回参照する必要がある。
【０１８７】
以下では、一例として、データストリームＡのライトアドレス及びリードアドレスの生成に関する動作について説明する。さらに、新たな領域の占有及び開放の動作について説明する。
【０１８８】
まず、データストリームＡのデータをバッファメモリ４０１に書き込む場合であり、かつ、新たな領域の占有が必要でない（すなわち、ライトカウンタ１３０５の値が００００ではない）場合について説明する。このとき、ＦＩＦＯＡのライトポインタＡの１つ手前の値０００１が示しているＦＩＦＯメモリ（ＦＩＦＯ＿０００１）のライトポインタの１つ手前の値０１００１１と、ライトカウンタ１３０５が出力する値１０１１とを合成することで、１０ビットのライトアドレスとして０１００１１１０１１が生成される。
【０１８９】
新たな領域の占有が必要である場合、すなわち、ライトカウンタ１３０５の値が００００である場合は、バッファメモリ用フラグ１３０１を参照することで、未占有状態である領域を示す一部ビット列の任意の１つ（例えば、１１１１１０）が、ＦＩＦＯＡのライトポインタＡの１つ手前の値０００１が示しているＦＩＦＯメモリ（ＦＩＦＯ＿０００１）のライトポインタの位置に書き込まれる。
【０１９０】
ただし、新たな領域の占有が必要であるが、ＦＩＦＯＡのライトポインタＡの１つ手前の値０００１が示しているＦＩＦＯメモリ（ＦＩＦＯ＿０００１）に書き込む箇所がない場合は、新たなＦＩＦＯメモリを占有する必要がある。具体的には、ＦＩＦＯメモリ（ＦＩＦＯ＿０００１）のライトポインタとリードポインタとが同じ位置を示している場合のことである。この場合、ＦＩＦＯメモリ用フラグ１３０３を参照することで、未占有状態であるＦＩＦＯメモリの任意の１つ（例えば、０１１１）が、ＦＩＦＯＡのライトポインタＡの示す位置に書き込まれる。
【０１９１】
続いて、データストリームＡのデータをバッファメモリから読み出す場合について説明する。この場合、ＦＩＦＯＡのリードポインタＡの値００００が示すＦＩＦＯメモリ（ＦＩＦＯ＿００００）のリードポインタが示す値０００００１と、リードカウンタ１３０６が出力する値０１１０とを合成することで、１０ビットのリードアドレスとして０００００１０１１０が生成される。
【０１９２】
また、領域内のデータを全て読み出し、領域の開放を行う動作については実施の形態１〜３と同様である。すなわち、リードカウンタ１３０６が１１１１から００００に変わると同時に、領域を開放する旨のフラグ更新情報を出力し、バッファメモリ用フラグ１３０１のフラグを未占有状態に変更する。
【０１９３】
さらに、データストリーム毎に占有されるＦＩＦＯメモリの開放は、例えば、ＦＩＦＯメモリに保持されている領域のデータを全て読み出した場合に実行される。具体的には、ＦＩＦＯメモリのリードポインタがライトポインタの１つ手前にあり、かつ、ライトカウンタ１３０５とリードカウンタ１３０６とが同じ値を出力している場合である。
【０１９４】
以上のように、本実施の形態のバッファメモリ共有装置は、バッファメモリの領域を管理するためのメモリ資源を有効に利用することができる。特に、バッファメモリを共有させるデータストリームが多く存在する場合などに有用である。
【０１９５】
メモリ資源を有効に利用することができる理由は以下の通りである。
【０１９６】
実施の形態１〜３に示すバッファメモリ共有装置では、バッファメモリを分割した領域の一部ビット列の値を、データストリーム毎に用意されたＦＩＦＯメモリに保持していた。これは、バッファメモリの分割数が少なく、また、データストリームの数が少ない場合には問題はないが、バッファメモリの分割数が多く、また、データストリームの数が多い場合には、ＦＩＦＯメモリのメモリ資源が非常に多く必要になる。
【０１９７】
例えば、バッファメモリを２５６（＝２8）個の領域に分割し、１０個のデータストリームでバッファメモリを共有する場合を考える。このとき、実施の形態１〜３に示すバッファメモリ共有装置では、８ビット幅で２５６段のＦＩＦＯメモリが１０個必要となる。この場合、単純計算では、８×２５６×１０＝２０４８０ビットのフリップフロップが必要である。
【０１９８】
本実施の形態のバッファメモリ共有装置では、一例として、一部ビット列を保持するために、８ビット幅で１６段のＦＩＦＯメモリを２０個用意し、これらのＦＩＦＯメモリを１０個のデータストリームで排他的に割り当てるとする。この場合、一部ビット列を保持するためのＦＩＦＯメモリについて、８×１６×２０＝２５６０ビットが必要である。２０個のＦＩＦＯメモリの占有状況を示す２０個のフラグについて、２０ビットが必要である。２０個のＦＩＦＯメモリを１０個のデータストリーム毎に管理するためのＦＩＦＯメモリが、５ビット（ＦＩＦＯメモリが２０個あるため）で１６段のＦＩＦＯメモリが１０個必要であるので、５×１６×１０＝８００ビットが必要である。したがって、全部で、２５６０＋２０＋８００＝３３８０ビットが必要である。
【０１９９】
以上のように、明らかに、本実施の形態のバッファメモリ共有装置の方が、実施の形態１〜３のバッファメモリ共有装置に比較して、資源の削減には有用である。したがって、メモリ資源を有効に利用することができる。
【０２００】
以上、本発明のバッファメモリ共有装置について、実施の形態に基づいて説明したが、本発明は、この実施の形態に限定されるものではない。本発明の趣旨を逸脱しない限り、当業者が思いつく各種変形を各実施の形態に施したものや、異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の範囲内に含まれる。
【０２０１】
例えば、ライトアドレスとリードアドレスとが同じになった場合に、領域を開放するとしてもよい。すなわち、読み出すデータがなくなった場合である。具体的には、ＦＩＦＯＡのリードポインタがライトポインタの１つ手前にあり、かつ、ライトカウンタＡとリードカウンタＡとが同じ値を示している場合である。
【０２０２】
また、実施の形態１では、アドレス生成回路Ａ５０２は必ずしもセレクタ６０５を備えなくてもよい。この場合、占有する領域を示す４ビットの値をＦＩＦＯＡ６０１へ書き込むと、ＦＩＦＯＡ６０１のライトポインタがインクリメントされる。そして、ライトポインタの１つ手前に書き込まれた４ビットの値と、ライトカウンタＡ６０２のカウント値とを合成することでライトアドレスＡが生成される。
【０２０３】
以上のように、ＦＩＦＯＡ６０１への書き込むための時間（１サイクル）が必要となるが、セレクタ６０５を備える必要がなくなるため、より構成を簡単化することができる。なお、他の実施の形態でも同様である。
【０２０４】
これにより、常に占有が必要とされている場合にのみ、領域を各データストリームで占有することになるので、バッファメモリの使用効率を向上させることができる。
【０２０５】
また、本発明のバッファメモリ共有装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩから構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭなどを含んで構成されるコンピュータシステムである。ＲＡＭには、コンピュータプログラムが記憶されている。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。
【０２０６】
なお、各実施の形態ではバッファメモリ共有装置は、外部のバッファメモリに対してデータの読み書きを行ったのに対して、１個のチップ上に構成されるバッファメモリ共有装置に、バッファメモリが含まれるとしてもよい。
【０２０７】
また、本発明は、複数のデータストリームを送受信する通信機器としても実現することができる。
【０２０８】
図２０は、本発明のバッファメモリ共有装置を備える通信機器の構成を示す図である。同図に示すように、通信機器１４０１は、制御回路１４０２と、バッファメモリ１４０３とを備える。
【０２０９】
制御回路１４０２は、バス１４０４との間で複数のデータストリームの送受信を行う。制御回路１４０２は、受信した複数のデータストリームをバッファメモリ１４０３で一時的に保持する。これは、例えば、データの送信側と受信側との転送速度の違いなどを吸収するためである。そして、制御回路１４０２は、バッファメモリ１４０３からデータを読み出し、読み出したデータを送信する。このとき、複数のデータストリームに対してバッファメモリ１４０３を共有させるために、制御回路１４０２は、本発明のバッファメモリ共有装置を備える。
【０２１０】
バッファメモリ１４０３は、例えば、書き込みと読み出しとが同時に行えるデュアルポートＲＡＭであり、バッファメモリ４０１と同様の構成である。
【０２１１】
以上のように、本発明のバッファメモリ共有装置を備える通信機器は、バッファメモリの使用効率を有効に利用することができるため、スムーズなデータの送受信を行うことができる。
【産業上の利用可能性】
【０２１２】
本発明のバッファメモリ共有装置は、一般的な半導体回路内部に存在するバッファメモリや、ネットワーク機器等において複数のデータストリームをバッファリングするために使用されるキュー及びＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）製品等を制御する装置として有用である。
【図面の簡単な説明】
【０２１３】
【図１】一般的なバッファメモリ回路の構成を示すブロック図である。
【図２】従来のリングバッファの制御におけるポインタと境界変数との位置関係を示す図である。
【図３】従来のリングバッファの制御におけるポインタ、先頭アドレス及び終端アドレスの位置関係を示す図である。
【図４】実施の形態１のバッファメモリ共有装置の構成を示すブロック図である。
【図５】実施の形態１のリングバッファ生成回路の構成を示すブロック図である。
【図６】実施の形態１のアドレス生成回路Ａの構成を示すブロック図である。
【図７】実施の形態１のバッファメモリ共有装置の動作を説明するための図である。
【図８】リードアドレスの生成と領域の開放とに関わる動作を説明するための図である。
【図９】ライトアドレスの生成と領域の占有とに関わる動作を説明するための図である。
【図１０】実施の形態２のバッファメモリ共有装置の構成を示すブロック図である。
【図１１】実施の形態２のリングバッファ生成回路の構成を示すブロック図である。
【図１２】実施の形態２のアドレス生成回路Ａの構成を示すブロック図である。
【図１３】データストリーム毎に制限される占有可能な領域の数の一例を示す図である。
【図１４】データストリーム毎に制限される占有可能な領域の数が動的に変更した場合の動作を説明するための図である。
【図１５】実施の形態３のバッファメモリ共有装置の構成を示すブロック図である。
【図１６】実施の形態３のリングバッファ生成回路の構成を示すブロック図である。
【図１７】実施の形態３のアドレス生成回路Ａの構成を示すブロック図である。
【図１８】実施の形態３のバッファメモリ共有装置の動作を説明するための図である。
【図１９】実施の形態４のバッファメモリ共有装置のＦＩＦＯメモリの構成を示す図である。
【図２０】本発明のバッファメモリ共有装置を備える通信機器の構成を示すブロック図である。
【符号の説明】
【０２１４】
１０１、２０１、３０１、４０１、１４０３    バッファメモリ
１０２、４０２、７０１、１００１、１４０２    制御回路
２０２、２０３、２０４    境界変数
２０５、２０６、２０７、３０８    ライトポインタ
２０８、２０９、２１０、３０９    リードポインタ
３０２、３０３、３０４    先頭アドレス
３０５、３０６、３０７    終端アドレス
４０３    ライト要求調停回路
４０４    リード要求調停回路
４０５、７０２、１００２    リングバッファ生成回路
４０６、４０７    セレクタ
５０１    フラグ管理回路
５０２、８０２、１１０２    アドレス生成回路Ａ
５０３、８０３、１１０３    アドレス生成回路Ｂ
６０１    ＦＩＦＯＡ
６０２    ライトカウンタＡ
６０３    リードカウンタＡ
６０４、９０１、１２０１    占有管理回路Ａ
６０５    セレクタ
６１１    ＦＩＦＯＢ
６１２    ライトカウンタＢ
６１３    リードカウンタＢ
６１４、９１１    占有管理回路Ｂ
８０１、１１０１    占有制限回路
１１０４    ラップ制御回路
１３０１    バッファメモリ用フラグ
１３０２    バッファメモリ用ＦＩＦＯ
１３０３    ＦＩＦＯメモリ用フラグ
１３０４    データストリーム用ＦＩＦＯ
１３０５    ライトカウンタ
１３０６    リードカウンタ
１４０１    通信機器
１４０４    バス
【図１】
2008293484.tif 000003
【図２】
2008293484.tif 000004
【図３】
2008293484.tif 000005
【図４】
2008293484.tif 000006
【図５】
2008293484.tif 000007
【図６】
2008293484.tif 000008
【図７】
2008293484.tif 000009
【図８】
2008293484.tif 000010
【図９】
2008293484.tif 000011
【図１０】
2008293484.tif 000012
【図１１】
2008293484.tif 000013
【図１２】
2008293484.tif 000014
【図１３】
2008293484.tif 000015
【図１４】
2008293484.tif 000016
【図１５】
2008293484.tif 000017
【図１６】
2008293484.tif 000018
【図１７】
2008293484.tif 000019
【図１８】
2008293484.tif 000020
【図１９】
2008293484.tif 000021
【図２０】
2008293484.tif 000022