(57)【特許請求の範囲】
【請求項１】
複数コネクションからの固定長セルを受信して、共通メモリに設けた共通のバッファを順次占有して分割して記憶し、可変長フレームを組み立てる装置において、
上記共通メモリにおいて、未使用である上記共通のバッファを固定サイズのバッファとして区切って一連ポインタを付けて管理する空きバッファ管理部と、
コネクションから上記固定長セルを受信すると、該コネクション別に上記空きバッファ管理部から通知されたポインタに基いて未使用である上記固定サイズのバッファを順次占有して出来る組立中バッファ列を管理する組立中バッファ管理部と、
上記組立中バッファ列の最後尾が上記可変長フレームの最終を示す場合には、上記組立中バッファ管理部から上記通知されたポインタに基いて上記組立中バッファ列を受けて転送バッファ列として出力管理し、該出力を完了すると未使用である固定サイズのバッファとして上記空きバッファ管理部に通知する転送バッファ管理部、とを備えたことを特徴とするフレーム組立装置。
【請求項２】
転送バッファ管理部は、出力対象である転送バッファ列中の固定サイズのバッファ毎に順次記されたポインタに基いて上記出力を行い、最後尾セルの後続フラグ有無で可変長フレームの最終を知るようにしたことを特徴とする請求項１記載のフレーム組立装置。
【請求項３】
転送バッファ管理部は、共通メモリにおける各転送バッファ列をコネクション対応、または出力ポート対応で管理する構成としたことを特徴とする請求項１記載のフレーム組立装置。
【請求項４】
転送バッファ管理部は、共通メモリにおける各転送バッファ列を優先度対応で管理する構成とし、優先度の高い転送バッファ列が発生すると該優先度の高い転送バッファ列を出力し、優先度の低い転送バッファ列の転送を抑えることを特徴とする請求項１記載のフレーム組立装置。
【請求項５】
優先度は、高いものと低いものの２種類としたことを特徴とする請求項４記載のフレーム組立装置。
【請求項６】
空きバッファ管理部は、共通メモリの未使用である共通の固定サイズのバッファを集めた空きバッファ列において、空きバッファの有無を示すバッファ有無フラグを設けて、
上記空きバッフア列の先頭ポインタで上記有無フラグをセットし、上記空きバッフア列の最後尾ポインタと読込みポインタとの比較一致により上記有無フラグをリセットするようにしたことを特徴とする請求項１記載のフレーム組立装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＡＴＭセル等の固定長のセルを受信し、共通バッファを有効利用して可変長フレームを組み立て、転送データ列を作って管理するフレーム組立装置に関するものである。
【０００２】
【従来の技術】
ＡＴＭセル等の固定長のセルを受信して可変長フレームを組み立てるフレーム組立装置において、前記固定長セルを一旦蓄積するメモリのバッファリング方式の１つに、共通バッファ方式がある。共通バッファ方式では、コネクションの異なるフレームを組み立てる場合に、バッファをコネクション毎に設けるのではなく、複数のコネクションでバッファを共有するため、メモリ使用効率の優れた方式である。
ところで共通バッファ方式では、受信した固定長セルを格納するＲＡＭ等のメモリを固定サイズのバッファに論理的に分割し、前記分割されたバッファの先頭アドレスを該バッファを示すアドレスとする。バッファ内にはポインタを格納するフィールドがあり、該ポインタが自バッファに続くバッファを示すことにより、必要なバッファ列を形成する（本明細書ではバッファが１つの場合にもバッファ列と称する場合がある）。
【０００３】
本明細書に示す発明に最も近い従来例として、図３４に特開平４−２３７２３８に記載された受信バッファ管理方式を示す。前記従来例では、空きバッファディスクリプタ１２１のポインタＳＰで指定されるサイズａの空きバッファ１１１−１〜１１１−３の列と、空きバッファディスクリプタ１２２のポインタＳＰで指定されるサイズｂ＜ａの空きバッファ１１２−１〜１１２−４の列が用意される。サイズＬのデータパケットの受信時には、ａ≧Ｌ＞ｂであればサイズａの空きバッファの列の先頭バッファ１１１−１が、ｂ≧Ｌであればサイズｂの空きバッファの列の先頭バッファ１１２−１が、対応するバッファ列からはずされる。そして、前記バッファ列からはずされたバッファに受信データが全て格納されると、前記バッファが受信済みバッファディスクリプタ１２３のポインタＳＰで指定される受信済みバッファ列の最後につながれる。各バッファ１１１−１〜１１１−３，１１２−１〜１１２−３，１１３−１のヘッダ部Ｈは、バッファサイズと、バッファに受信パケットが格納された場合の前記パケットのサイズとを設定する。各バッファ１１１−１〜１１１−３，１１２−１〜１１２−３，１１３−１の次ポインタ部ＮＰは、自バッファの次に続くバッファを指定する。前記次ポインタ部ＮＰには、内容（ポインタ）が無効であり、次のバッファが存在しないことを示すエンドフラグＥＦがあり、ポインタが無効の場合オンである。図３４では、空きバッファ１１１−３，１１２−３および受信済みバッファ１１３−１は前記エンドフラグＥＦがオンとなっており、フラグオンを斜線で示している。なお、上記のサイズａ、ｂは、ヘッダ部Ｈおよび次ポインタ部ＮＰを除くバッファ領域（実際に受信データが格納可能な領域）のサイズを示す。
【０００４】
【発明が解決しようとする課題】
上記従来例では、受信済みバッファディスクリプタ１２３のフラグＶを見ることにより受信済みバッファ列の存在を確認することができる。前記フラグＶのオン・オフ制御について特開平４−２３７２３８には明記されていないが、前記フラグＶのオン・オフ制御の一例として、受信済みバッファが発生した時は無条件に前記フラグＶをオンとし、受信済みバッファ列からバッファをはずす際の受信済みバッファのポインタＳＰの更新時にエンドフラグＥＦがオンであった場合は前記フラグＶをオフとする方法が容易に考えつく。また、空きバッファディスクリプタ１２１，１２２についてもフラグＶが設けられており、前記フラグＶのオン・オフ制御の一例として、空きバッファが発生した時は無条件に前記フラグＶをオンとし、空きバッファ列からバッファをはずす際の空きバッファのポインタＳＰの更新時にエンドフラグＥＦがオンであった場合は前記フラグＶをオフとする方法が容易に考えつく。ただし、前記の方法では各バッファ１１１−１〜１１１−３，１１２−１〜１１２−３，１１３−１にバッファ列の最終を示すエンドフラグＥＦが必要となり、さらに、エンドフラグＥＦをオンにする手段、更に受信済みバッファ列を全て転送完了したかどうかを見るためには、全ての受信済みバッファディスクリプタ１２３のポインタＳＰが示すバッファのエンドフラグＥＦを監視する手段、および空きバッファがあるか否かを調べるには、空きバッファディスクリプタ１２１，１２２のポインタＳＰが示すバッファのエンドフラグＥＦを監視する手段が必要であった。
【０００５】
また、上記従来例では、受信済みバッファ列を１つに接続する場合はその最後尾に新たに受信済みバッファをつなぐ際、受信済みバッファ列が長い場合には前記バッファ列を最後尾までたどる制御が複雑でしかも時間がかかる。即ち、転送を開始してよいかどうかを判別するのに時間がかかるという課題があった。
【０００６】
本発明は、上記に示す課題を解決し、バッファを効率的に利用するという共通バッファの特徴を生かし、小規模で無駄のないハードウェア制御により転送の開始、終了を容易にしたフレーム組立装置を得ることを目的とする。
【０００７】
【課題を解決するための手段】
この発明に係るフレーム組立装置は、複数コネクションからの固定長セルを受信して、共通メモリに設けた共通のバッファを順次占有して分割して記憶し、可変長フレームを組み立てる装置において、
上記共通メモリにおいて、未使用である上記共通のバッファを固定サイズのバッファとして区切って一連ポインタを付けて管理する空きバッファ管理部と、
コネクションから上記固定長セルを受信すると、コネクション別に上記空きバッファ管理部から通知されたポインタに基いて未使用である上記固定サイズのバッファを順次占有して出来る組立中バッファ列を管理する組立中バッファ管理部と、
上記組立中バッファ列の最後尾が上記可変長フレームの最終を示す場合には、上記組立中バッファ管理部から上記通知されたポインタに基いて上記組立中バッファ列を受けて転送バッファ列として出力管理し、この出力を完了すると未使用である固定サイズのバッファとして上記空きバッファ管理部に通知する転送バッファ管理部、とを備えた。
【０００８】
また更に、転送バッファ管理部は、出力対象である転送バッファ列中の固定サイズのバッファ毎に順次記されたポインタに基いて上記出力を行い、最後尾セルの後続フラグ有無で可変長フレームの最終を知るようにした。
【０００９】
また更に、転送バッファ管理部は、共通メモリにおける各転送バッファ列をコネクション対応、または出力ポート対応で管理する構成とした。
【００１０】
また更に、転送バッファ管理部は、共通メモリにおける各転送バッファ列を優先度対応で管理する構成とし、優先度の高い転送バッファ列が発生すると優先度の高い転送バッファ列を出力し、優先度の低い転送バッファ列の転送を抑えるようにした。
【００１１】
また更に、優先度は高いものと低いものの２種とした。
【００１２】
また更に、空きバッファ管理部は、共通メモリの未使用である共通の固定サイズのバッファを集めた空きバッファ列において、空きバッファの有無を示すバッファ有無フラグを設けて、上記空きバッフア列の先頭ポインタで上記有無フラグをセットし、上記空きバッフア列の最後尾ポインタと読込みポインタとの比較一致により上記有無フラグをリセットするようにした。
【００１３】
【発明の実施の形態】
実施の形態１．
図１は発明の実施の形態１におけるフレーム組立装置の全体の構成を示す図である。共通メモリ１は受信した固定長セル３を格納しフレーム４を組み立てるＲＡＭ等のメモリである。前記共通メモリ１は論理的に固定長のバッファ２に分割されており、バッファ２を示す指標としてバッファ２の先頭アドレスを使用する（本明細書では、前記バッファ２を示す指標をポインタと称する。ポインタの内容は共通メモリ１内のいずれかのバッファ２の先頭アドレスである）。各バッファ間は、バッファ２内部に設けられたポインタエリアに、自バッファに続くバッファのポインタアドレスを格納することによりバッファ列を形成する。
【００１４】
共通メモリ１を直接制御する部分は、ライト制御部５とリード制御部６である。ライト制御部５は、後述する空きバッファ管理部７からポインタが通知されると、前記ポインタの指定するバッファに対応するライトアドレス５ａとライトパルス５ｂを出力することにより、共通メモリ１のバッファ２に受信セルのデータ、コネクション情報、フレームエンド情報をライトする。リード制御部６は、後述する転送バッファ管理部からポインタが通知されると、前記ポインタの指定するバッファに対応するリードアドレス６ａとリードパルス６ｂを出力することにより、共通メモリ１からバッファ２のコネクション情報とデータをリードする。
共通メモリ１のバッファ列を管理する部分は、空きバッファ管理部７、転送バッファ管理部８、組立中バッファ管理部９である。前記バッファ管理部７，８，９の間では、空きバッファ先頭ポインタ出力７ｈ、転送バッファ先頭ポインタ出力８ｈ、組立中バッファ先頭ポインタ出力９ｈ、組立中バッファ後尾ポインタ出力９ｔによって適宜ポインタを通知することによってバッファ管理を実施する。前記バッファ管理部７，８，９の詳細については後述する。
コネクション情報５ｃは、固定長セル３を受信した際にコネクション毎にフレームを組み立てるため、受信したセルのコネクションを組立中バッファ管理部９へ通知する。フレームエンド情報５ｄは固定長セル３を受信した際、受信したセルがフレームの最終であるかどうかを組立中バッファ管理部９に通知する。セル受信通知５ｅは、固定長セル３を受信した際にデータをライトするバッファを確保するため、空きバッファ管理部７にセル受信を通知する。
【００１５】
図２はバッファ２の構成を示す図である。ポインタエリア２ａは自バッファに続くバッファを指定する領域である。フレームエンドフラグ２ｂはフレームの最終を表示する領域である。前記フレームエンドフラグ２ｂは図３４に示す従来例におけるバッファ列の最終を示すエンドフラグＥＦとは異なるものである。コネクション情報２ｃは受信データの属するコネクションを表示する領域である。データエリア２ｄは受信した固定長セル３のデータを格納する領域であり、データエリア２ｄのサイズは固定長セル３のデータサイズと同じかそれよりも大きい。例えば、ＡＴＭ通信においてはデータエリア２ｄは４８バイト以上である。
【００１６】
図３は共通メモリ１内に存在しうるバッファ列を示している。共通メモリ１の内部で形成されるバッファ列には、未使用状態のバッファを連結した空きバッファ列７０、組立中のフレームが占めるバッファをコネクション別に連結した組立中バッファ列９０−１〜３、フレーム組立が完了し共通メモリ１からデータがリードされるのを待機している状態のバッファを連結した転送バッファ列８０の３種類が存在する。図３の例では収容コネクション数が３であるため組立中バッファ列は最大３つ存在するが、フレーム組立装置で収容するコネクション数によっては組立中バッファ列が３つ以上または２つ以下となる場合もある。これらのバッファ列７０，８０，９０−１〜３はそれぞれ先頭ポインタ７ａ，８ａ，９ａ−１〜３と後尾ポインタ７ｂ，８ｂ，９ｂ−１〜３によって管理される。
なお、転送バッファ列８０につながれているバッファのうち、フレームの最終バッファはフレームエンドフラグ２ｂがオンとなるため、エンドフラグ２ｂがオンの状態を斜線で示している。
また、フレーム組立装置リセット後の初期状態では共通メモリ１の全てのバッファ２は空きバッファ列につながれる。
【００１７】
本発明において重要なことは、転送バッファ列の存在の有無、つまり転送データ列があるか否かを早く容易に知ることである。
転送バッファ管理部８は上記転送バッファ列８０を管理する。前記転送バッファ管理部８では、組立中バッファ管理部９でフレームの組立が完了した際に、前記フレームの占めるバッファ列を転送バッファ列８０の最後尾につなぐ。また、転送バッファのデータを読み出し終わると、前記バッファを転送バッファ列８０からはずし、空きバッファとして空きバッファ管理部７へ通知する。
【００１８】
組立中バッファ管理部９は上記組立中バッファ列９０を管理する。前記組立中バッファ管理部９では、フレーム組立装置で固定長セル３を受信した際に、受信した固定長セル３をライトしたバッファをコネクションの組立中バッファ列９０の最後尾につなぐ。また、フレームの組立が完了した場合には、フレームの組立が完了したコネクションの組立中バッファ列９０全体を転送バッファとして転送バッファ管理部８へ通知する。
空きバッファ管理部７は上記空きバッファ列７０を管理する。前記空きバッファ管理部７では、フレーム組立装置から転送バッファのデータが読み出された際に、データを読み出されたバッファを空きバッファとして空きバッファ列７０の最後尾につなぐ。また、組立中のフレームでエラーフレームが発生した際には、エラーフレームの占めるバッファを空きバッファとして空きバッファ列８０の最後尾につなぐ。さらに、固定長セル３を受信した際には、受信した固定長セル３をライトするバッファを空きバッファ列８０からはずし、組立中バッファ管理部９へ通知する。
【００１９】
図４は転送バッファ管理部８の内部構成を示す図である。先頭ポインタ８ａは転送バッファ列の先頭を指定する。後尾ポインタ８ｂは転送バッファ列の最後尾を指定する。コンパレータ（比較器）８ｄは前記先頭ポインタ８ａと後尾ポインタ８ｂの内容を比較し、一致／不一致を出力する。即ち、後に詳述するように、不一致は転送データ列があって有無フラグ８ｆをオンにすることであり、転送列有無フラグ８ｆは転送バッファ列が存在している時にオンである。制御部８ｃは転送バッファ管理部全体の動作を制御する部分であり、先頭ポインタ８ａ、後尾ポインタ８ｂ、転送列有無フラグ８ｆの更新を制御する。以下、前記制御部８ｃの処理を図５および図６のフローチャートで説明する。
【００２０】
図５は制御部８ｃが転送バッファをつなぐ際の処理を示すフローチャートである。状態ｓ１１では、組立中バッファ管理部９でフレーム組立が完了し、組立完了したフレームの先頭ポインタと後尾ポインタが通知される。状態ｓ１２では、転送バッファ列の存在を有無フラグ８ｆによって判定する。状態ｓ１２で有無フラグ８ｆがオン（すなわち転送バッファ列有り）の場合は、既存の転送バッファ列に新たなバッファまたはバッファ列をつなぐ処理を行う。状態ｓ１６および状態ｓ１７はバッファまたはバッファ列をつなぐ具体的な処理内容を示している。状態ｓ１６では、後尾ポインタ８ｂの指定するバッファのポインタエリアに、通知された先頭ポインタの値をライトする。状態ｓ１７では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ１２で有無フラグ８ｆがオフ（すなわち転送バッファ列無し）の場合は、バッファまたはバッファ列を転送バッファ管理部８に登録する処理を行う。状態ｓ１３〜ｓ１５はバッファまたはバッファ列を転送バッファ列として登録する具体的な処理内容を示している。状態ｓ１３では、通知された先頭ポインタを新しい先頭ポインタ８ａとする。状態ｓ１４では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ１５では、転送バッファが存在しない状態から転送バッファ列を登録したので、転送バッファ列の存在を示す有無フラグ８ｆをオンにする。
【００２１】
図６は制御部８ｃが転送バッファをはずす際の処理を示すフローチャートである。状態ｓ２１では、転送バッファ列の存在を有無フラグ８ｆによって判定する。状態ｓ２１で転送列有無フラグ８ｆがオン（すなわち転送バッファ列有り）の場合は、フレーム組立装置からフレームを出力するため、転送バッファ列の先頭のバッファのデータが共通メモリ１より読み出され、前記転送バッファ列の先頭のバッファは読み出し終了後、空きバッファとなる。状態ｓ２２は前記動作のポインタの流れを示しており、先頭ポインタ８ａの内容をリード制御部６と空きバッファ管理部７へ通知する。その後、状態ｓ２３ではコンパレータ８ｄの出力を見る。
状態ｓ２３でコンパレータ８ｄが不一致を示す場合は、先頭ポインタ８ａの指定するバッファの後に続く転送バッファ列が存在することを示しているので、先頭ポインタ８ａを更新する。状態ｓ２５は先頭ポインタ８ａを更新する具体的な処理内容を示しており、先頭ポインタ８ａの指定するバッファのポインタエリアの値を新しい先頭ポインタ８ａとする。状態ｓ２３でコンパレータ８ｄが一致を示す場合は、転送バッファ列が存在しないことを示しているので、状態ｓ２４にて有無フラグ８ｆをオフにし、先頭ポインタ８ａは更新しない。状態ｓ２４およびｓ２５いずれの処理の場合でも、状態ｓ２６にて共通バッファ１から転送バッファのデータがリードされている間ウェイトする。
【００２２】
上記に示す転送バッファ管理部８によれば、転送バッファをつなぐ際には転送バッファ列をたどることなくバッファをつなぐため、バッファをつなぐ制御回路が簡単になる。また、転送バッファをはずす際には、コンパレータの出力により後に続く転送バッファが存在するかつまり転送が完了したかどうかを直ちに判定することができる。
【００２３】
図７は組立中バッファ管理部９の内部構成を示す図である。組立中バッファ管理テーブル９ｕ−１〜３は、先頭ポインタ９ａ−１〜３、後尾ポインタ９ｂ−１〜３、組立中フラグ９ｆ−１〜３から構成されるレジスタ群であり、収容するコネクション数分備えられる。本図では３コネクションを収容する場合を示している。先頭ポインタ９ａ−１〜３は各コネクションの組立中バッファ列の先頭を指定する。後尾ポインタ９ｂ−１〜３は各コネクションの組立中バッファ列の最後尾を指定する。組立中フラグ９ｆ−１〜３は組立中バッファ列が存在するかどうかを示すフラグであり、組立中バッファ列が存在する時にオンである。制御部９ｃは組立中バッファ管理部９全体の動作を制御する部分であり、先頭ポインタ９ａ−１〜３、後尾ポインタ９ｂ−１〜３、組立中フラグ９ｆ−１〜３の更新を制御する。
【００２４】
図８は組立中バッファ管理部９における制御部９ｃの処理を示すフローチャートである。状態ｓ３１では、フレーム組立装置が固定長セル３を受信した場合に空きバッファ管理部７からポインタが通知されるとともに、コネクション通知信号５ｃおよびフレームエンド通知信号５ｄより固定長セルのコネクション＃ｎとフレームエンド情報を得る。状態ｓ３２で組立中フラグ９ｆ−ｎがオン（すなわち組立中バッファ有り）の場合は、既存の組立中バッファ列に通知されたバッファをつなぐ処理を行う。状態ｓ３６および状態ｓ３７はバッファをつなぐ具体的な処理を示している。状態ｓ３２で組立中フラグ９ｆ−ｎがオフ（すなわち組立中バッファ無し）の場合は、通知されたバッファを組立中バッファとして登録する処理を行う。状態ｓ３３〜ｓ３５はバッファを組立中バッファとして登録する具体的な処理内容を示している。その後、状態ｓ３８でフレームエンド情報を見ることによって通知されたポインタの指定するバッファがフレームの最終であるかどうか、すなわち通知されたポインタの指定するバッファをもってフレーム組立が完了するかどうかを判定する。状態ｓ３８でフレームエンドでない場合は、状態ｓ３９で後尾ポインタ９ｂ−ｎの指定するバッファのフレームエンドフラグ２ｂをオフとして本処理は終了となる。フレームエンドである場合は以下の処理が継続する。まず、状態ｓ４０で組立中フラグ９ｆ−ｎをオフとし、状態ｓ４１では、例えばＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ：巡回冗長性検査）によってフレームが正常であるかどうかを判定する。状態ｓ４１で正常フレームでない場合は状態ｓ４４へ進み、エラーフレームを廃棄し、エラーフレームの占めるバッファ列を空きバッファとするため、前記エラーフレームの占めるバッファ列を空きバッファ管理部７へ通知する。状態ｓ４１で正常フレームである場合は、状態ｓ４２で後尾ポインタ９ｂ−ｎの指定するバッファのフレームエンドフラグ２ｂをオンとし、状態ｓ４３で組立完了フレームの占めるバッファ列を転送バッファ管理部８へ通知し、転送バッファとして転送バッファ列につなげる。
【００２５】
上記に示す組立中バッファ管理部９によれば、小規模なハードウェア制御により、複数コネクションからの固定長セル３をコネクション毎に組み立てることができる。
【００２６】
図９は空きバッファ管理部７の内部構成を示す図である。先頭ポインタ７ａは空きバッファ列の先頭を指定する。後尾ポインタ７ｂは空きバッファ列の最後尾を指定する。コンパレータ８ｄは前記先頭ポインタ８ａと後尾ポインタ８ｂの内容を比較し、一致／不一致を出力する。有無フラグ７ｆは空きバッファ列が存在している時にオンである。制御部７ｃは空きバッファ管理部全体の動作を制御する部分であり、先頭ポインタ７ａ、後尾ポインタ７ｂ、有無フラグ７ｆの更新を制御する。以下、前記制御部７ｃの処理を図１０および図１１のフローチャートで説明する。
【００２７】
図１０は転送が終了したバッファを空きバッファとして空きバッファ列につなぐ際の制御部７ｃの処理を示すフローチャートである。状態ｓ５１では、転送バッファ管理部８からポインタが通知される。ここで通知されたポインタの指定するバッファは、新たに空きバッファとなるものである。状態ｓ５２では、空きバッファ列の存在を有無フラグ７ｆによって判定する。状態ｓ５２で有無フラグ７ｆがオン（すなわち空きバッファ列有り）の場合は、既存の空きバッファ列に前記の新たなバッファをつなぐ処理を行う。状態ｓ５６および状態ｓ５７はバッファをつなぐ具体的な処理内容を示している。状態ｓ５６では、後尾ポインタ７ｂの指定するバッファのポインタエリアに、通知されたポインタの値をライトする。状態ｓ５７では、通知されたポインタを新しい後尾ポインタ７ｂとする。状態ｓ５２で有無フラグ８ｆがオフ（すなわち空きバッファ列無し）の場合は、バッファを空きバッファ管理部７に登録する処理を行う。状態ｓ５３〜ｓ５５はバッファを空きバッファとして登録する具体的な処理内容を示している。状態ｓ５３では、通知されたポインタを新しい先頭ポインタ７ａとする。状態ｓ５４では、通知されたポインタを新しい後尾ポインタ７ｂとする。状態ｓ５５では、空きバッファが存在しない状態から空きバッファを登録したので、空きバッファ列の存在を示す有無フラグ７ｆをオンにする。
【００２８】
図１１は組立中バッファ管理部９にてエラーとなったフレームの占めるバッファを空きバッファとして空きバッファ列につなぐ際の制御部７ｃの処理を示すフローチャートである。状態ｓ６１では、組立中バッファ管理部９でエラーと判定されたフレームの先頭ポインタと後尾ポインタが通知される。状態ｓ６２では、空きバッファ列の存在を有無フラグ７ｆによって判定する。状態ｓ６２で有無フラグ７ｆがオン（すなわち空きバッファ列有り）の場合は、既存の空きバッファ列に新たなバッファまたはバッファ列をつなぐ処理を行う。状態ｓ６６および状態ｓ６７はバッファまたはバッファ列をつなぐ具体的な処理内容を示している。状態ｓ６６では、後尾ポインタ７ｂの指定するバッファのポインタエリアに、通知された先頭ポインタの値をライトする。状態ｓ６７では、通知された後尾ポインタを新しい後尾ポインタ７ｂとする。状態ｓ６２で有無フラグ７ｆがオフ（すなわち転送バッファ列無し）の場合は、バッファまたはバッファ列を空きバッファ管理部７に登録する処理を行う。状態ｓ６３〜ｓ６５はバッファまたはバッファ列を転送バッファ列として登録する具体的な処理内容を示している。状態ｓ６３では、通知された先頭ポインタを新しい先頭ポインタ７ａとする。状態ｓ６４では、通知された後尾ポインタを新しい後尾ポインタ７ｂとする。状態ｓ６５では、空きバッファが存在しない状態から空きバッファ列を登録したので、空きバッファ列の存在を示す有無フラグ７ｆをオンにする。
【００２９】
図１２は制御部７ｃが空きバッファをはずす際の処理を示すフローチャートである。状態ｓ７１でセル受信通知信号５ｅの通知を受けて、制御部７ｃは以下に続く処理を行う。状態ｓ７２では、空きバッファ列の存在を有無フラグ７ｆによって判定する。状態ｓ７２で有無フラグ７ｆがオフ（すなわち空きバッファ列無し）の場合、受信セルのデータを格納する領域がないので、制御部７ｃは何もしない。つまり、上記受信セルは廃棄される。状態ｓ７２で有無フラグ７ｆがオン（すなわち空きバッファ列有り）の場合は、空きバッファ列の先頭のバッファに受信した固定長セル３のデータが書き込まれ、前記空きバッファ列の先頭のバッファは書き込み終了後、組立中バッファとなる。状態ｓ７３は前記動作時のポインタの流れを示しており、先頭ポインタ７ａの内容をライト制御部５と組立中バッファ管理部９へ通知する。その後、状態ｓ７４ではコンパレータ７ｄの出力を見る。状態ｓ７４でコンパレータ７ｄが不一致を示す場合は、先頭ポインタ７ａの指定するバッファの後に続く空きバッファ列が存在することを示しているので、先頭ポインタ７ａを更新する。状態ｓ７６は先頭ポインタ７ａを更新する具体的な処理内容を示している。状態ｓ７４でコンパレータ７ｄが一致を示す場合は、空きバッファ列が存在しないことを示しているので、状態ｓ７５にて有無フラグ７ｆをオフにし、先頭ポインタ７ａは更新しない。
【００３０】
上記に示す空きバッファ管理部９によれば、空きバッファをつなぐ際には空きバッファ列をたどることなくバッファをつなぐため、バッファをつなぐ制御回路が簡単になる。また、空きバッファをはずす際には、コンパレータの出力により後に続く空きバッファが存在するか、または極端な場合、空きバッファ自体があるかどうかを直ちに判定することができる。
【００３１】
上記に示す発明の実施の形態１によれば、小規模で無駄のないハードウェア制御でバッファ管理を実現できる。特に転送バッファにある組立を完了した転送が必要なデータ列があるかどうかを直ちに容易に管理できる。
【００３２】
なお、複数のコネクションを収容するフレーム組立装置の場合、フレームを出力する際にコネクション情報を上位へ通知する手段が必要である。以下にコネクション情報を上位へ通知する手段の例を示す。
リード制御部６においてリードするバッファのフレームエンドフラグ２ｂを監視し、前記フレームエンドフラグ２ｂがオンであった場合は、この次にリードするバッファのコネクション情報２ｃを出力する。また、フレーム組立装置リセット後最初にバッファをリードする際にも該バッファのコネクション情報２ｃを出力する。前記の手段によって、出力フレームの先頭に必ずコネクション情報が付加される。
【００３３】
実施の形態２．
以下、発明の実施の形態２について説明する。発明の実施の形態２によるフレーム組立装置は、発明の実施の形態１によるフレーム組立装置の発展型であり、転送バッファ管理部８の構成をコネクション数分設けることによりコネクション毎に異なるサービスを実現するものである。
【００３４】
図１３は発明の実施の形態２によるフレーム組立装置の転送バッファ管理部８の構成を示す図である。転送バッファ管理テーブル８１−１〜３はフレーム組立装置で収容するコネクション毎に設けられている。本図の例では収容コネクション数は３であるが、収容コネクション数は３より大きい場合も小さい場合もあり得る。リクエスト受付回路８２は、転送バッファ管理テーブル８１−１〜３からの転送リクエスト８ｊ−１〜３に対してアクノリッジ信号８ｐ−１〜３を返すことにより、先頭ポインタ出力８ｈを制御する部分である。
【００３５】
図１４はリクエスト受付回路８２の処理例を示すフローチャートである。本図の例では、コネクション数３、遅延に関する優先順位は＃１＞＃２＞＃３の順位としている（本明細書では＃はコネクションを示す）。
状態ｓ２０１では＃１において転送待ちのバッファ列があるかどうかを＃１転送リクエスト８ｊ−１によって判別する。＃１転送リクエスト８ｊ−１がオフの場合は状態ｓ２０４へ進む。＃１転送リクエスト８ｊ−１がオンの場合は状態ｓ２０２へ進み、＃１アクノリッジ８ｐ−１をオンとする。前記＃１アクノリッジを受けて、＃１転送バッファ管理テーブル８１−１はポインタを先頭ポインタ出力８ｈに出力する。その後、状態ｓ２０３では＃１のフレームの転送期間ウェイトし、ウェイト期間が終了すると状態ｓ２０１へ戻る。
状態ｓ２０４では＃２において転送待ちのバッファ列があるかどうかを＃２転送リクエスト８ｊ−２によって判別する。＃２転送リクエスト８ｊ−２がオフの場合は状態ｓ２０７へ進む。＃２転送リクエスト８ｊ−２がオンの場合は状態ｓ２０５へ進み、＃２アクノリッジ８ｐ−２をオンとする。前記＃２アクノリッジを受けて、＃２転送バッファ管理テーブル８１−２はポインタを先頭ポインタ出力８ｈに出力する。その後、状態ｓ２０６では＃２のフレームの転送期間ウェイトし、ウェイト期間が終了すると状態ｓ２０１へ戻る。
状態ｓ２０７では＃３において転送待ちのバッファ列があるかどうかを＃３転送リクエスト８ｊ−３によって判別する。＃３転送リクエスト８ｊ−３がオフの場合は状態ｓ２０１へ戻る。＃３転送リクエスト８ｊ−３がオンの場合は状態ｓ２０８へ進み、＃３アクノリッジ８ｐ−３をオンとする。前記＃３アクノリッジを受けて、＃３転送バッファ管理テーブル８１−３はポインタを先頭ポインタ出力８ｈに出力する。その後、状態ｓ２０９では＃３のフレームの転送期間ウェイトし、ウェイト期間が終了すると状態ｓ２０１へ戻る。
リクエスト受付回路８２における上記の処理によって、遅延に関してコネクション毎に異なる優先順位付けを実現することができる。
【００３６】
図１５は転送バッファ管理テーブル８１−１〜３の構成を示す図である。先頭ポインタ８ａは転送バッファ列の先頭を指定する。後尾ポインタ８ｂは転送バッファ列の最後尾を指定する。コンパレータ８ｄは前記先頭ポインタ８ａと後尾ポインタ８ｂの内容を比較し、一致／不一致を出力する。有無フラグ８ｆは転送バッファ列が存在している時にオンであり、有無フラグの出力は転送リクエスト８ｊとしてリクエスト受付回路へ通知される。制御部８ｃは転送バッファ管理部全体の動作を制御する部分であり、先頭ポインタ８ａ、後尾ポインタ８ｂ、有無フラグ８ｆの更新を制御する。本転送バッファ管理テーブル８１−１〜３をコネクション数分設けることにより、フレーム組立装置ではコネクション毎に異なるサービスを実現することができる。以下、前記制御部８ｃの処理を図１６および図１７のフローチャートで説明する。
【００３７】
図１６は制御部８ｃが転送バッファをつなぐ際の処理を示すフローチャートである。状態ｓ２１１では、組立中バッファ管理部９でフレーム組立が完了し、組立完了したフレームの先頭ポインタと後尾ポインタが通知される。状態ｓ２１２では、転送バッファ列の存在を有無フラグ８ｆによって判定する。状態ｓ２１２で有無フラグ８ｆがオン（すなわち転送バッファ列有り）の場合は、既存の転送バッファ列に新たなバッファまたはバッファ列をつなぐ処理を行う。状態ｓ２１６および状態ｓ２１７はバッファまたはバッファ列をつなぐ具体的な処理内容を示している。状態ｓ２１６では、後尾ポインタ８ｂの指定するバッファのポインタエリアに、通知された先頭ポインタの値をライトする。状態ｓ２１７では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ２１２で有無フラグ８ｆがオフ（すなわち転送バッファ列無し）の場合は、バッファまたはバッファ列を転送バッファ管理部８に登録する処理を行う。状態ｓ２１３〜ｓ２１５はバッファまたはバッファ列を転送バッファ列として登録する具体的な処理内容を示している。状態ｓ２１３では、通知された先頭ポインタを新しい先頭ポインタ８ａとする。状態ｓ２１４では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ２１５では、転送バッファが存在しない状態から転送バッファ列を登録したので、転送バッファ列の存在を示す有無フラグ８ｆをオンにする。
【００３８】
図１７は制御部８ｃが転送バッファをはずす際の処理を示すフローチャートである。状態ｓ２２１では、リクエスト受付回路８２からのアクノリッジ８ｐ−１〜３を監視し、オンの場合は状態ｓ２２２へ進む。状態ｓ２２２では、先頭ポインタ８ａの内容をリード制御部６と空きバッファ管理部７へ通知する。これにより、共通メモリ１からは転送バッファ列の先頭のバッファのデータを読み出すとともに、読み出した転送バッファを空きバッファとして空きバッファ列につなぐ。その後、状態ｓ２２３では先頭ポインタ８ａと後尾ポインタ８ｂの内容を比較するコンパレータ８ｄの出力を見る。状態ｓ２２３でコンパレータ８ｄが不一致を示す場合は、先頭ポインタ８ａの指定するバッファの後に続く転送バッファ列が存在することを示しているので、先頭ポインタ８ａを更新する。状態ｓ２２５は先頭ポインタ８ａを更新する具体的な処理内容を示しており、先頭ポインタ８ａの指定するバッファのポインタエリアの値を新しい先頭ポインタ８ａとする。状態ｓ２２３でコンパレータ８ｄが一致を示す場合は、転送バッファ列が存在しないことを示しているので、状態ｓ２２４にて有無フラグ８ｆをオフにし、先頭ポインタ８ａは更新しない。状態ｓ２２４およびｓ２２５いずれの処理の場合でも、状態ｓ２２６にて共通バッファ１から転送バッファのデータがリードされている間ウェイトする。そして、状態ｓ２２７にて、状態ｓ２２２で通知したポインタの指定するバッファのフレームエンドフラグ２ｂがオンであれば、再び状態ｓ２２２の処理へ戻る。
【００３９】
上記に示す発明の実施の形態２によるフレーム組立装置では、リクエスト受付回路８２によって＃１＞＃２＞＃３の順にフレーム転送が優先されるため、コネクション毎に異なる優先順位を実施することができる。ここで示すリクエスト受付回路８２は遅延に関してコネクション毎に異なる優先順位を実現するものであるが、コネクション毎に異なるトラヒック特性やフレームレートを実施することも可能である。
なお、各転送バッファ管理テーブル８１−１〜３の構成、処理は同一であるため、図１５〜図１７においてコネクションを表す添字は示していない。また、図１５に示す転送バッファ管理テーブル８１の構成は、発明の実施の形態３以降においても同一である。
【００４０】
実施の形態３．
以下、発明の実施の形態３について説明する。発明の実施の形態３によるフレーム組立装置は、発明の実施の形態１によるフレーム組立装置の発展型であり、転送バッファ管理部８の構成をポート数分設けることによりコネクション毎に異なるサービスを実現するものである。以下、ここで示す発明の実施の形態３によるフレーム組立装置では出力ポート数は２として説明するが、実際には２より大きくてもかまわない。
【００４１】
図１８は発明の実施の形態３によるフレーム組立装置の転送バッファ管理部８の構成を示す図である。転送バッファ管理テーブル８１−１〜２は図１５で示した構成であり、フレーム組立装置で収容するコネクション毎に設けられている。実際には出力ポート数が２より大きい場合もあるが、本実施例では出力ポートの数を２とし説明しているため、転送バッファ管理テーブルの数は２である。リクエスト受付回路８２は、転送バッファ管理テーブル８１−１〜２からの転送リクエスト８ｊ−１〜２に対してアクノリッジ信号８ｐ−１〜２を返すことにより、先頭ポインタ出力８ｈを制御する部分である。先頭ポインタ８ｈをリード制御部６へ通知すると、直ちに転送バッファのデータの読み出しが開始されるが、転送バッファのデータがリードされている間、前記読み出しデータの該当するポートを示すため、ポートイネーブル８ｑ−１〜２がオンとなる。ポート割当回路８３は、組立中バッファ管理部９から通知された先頭ポインタと後尾ポインタを、転送バッファ管理テーブル８１−１〜２へ通知する。図１９は３コネクションを収容するフレーム組立装置のポート割当回路８３の一例であり、コネクション＃１〜＃２は出力ポート１へ、コネクション＃３は出力ポート２へポインタが通知される。
【００４２】
図２０はリクエスト受付回路８２の動作実施例を示すフローチャートである。本図の例では、コネクション数３、出力ポート数２、遅延に関する優先順位はポート１＞ポート２の順位としている。
状態ｓ３０１ではポート１において転送待ちのバッファ列があるかどうかをポート１転送リクエスト８ｊ−１によって判別する。ポート１転送リクエスト８ｊ−１がオフの場合は状態ｓ３０４へ進む。ポート１転送リクエスト８ｊ−１がオンの場合は状態ｓ３０２へ進み、ポート１アクノリッジ８ｐ−１をオンとする。前記ポート１アクノリッジを受けて、ポート１転送バッファ管理テーブル８１−１はポインタを先頭ポインタ出力８ｈに出力する。その後、状態ｓ３０３では＃１のフレームの転送期間ウェイトし、ウェイト期間が終了すると状態ｓ３０１へ戻る。
状態ｓ３０４ではポート２において転送待ちのバッファ列があるかどうかをポート２転送リクエスト８ｊ−２によって判別する。ポート２転送リクエスト８ｊ−２がオフの場合は状態ｓ３０１へ戻る。ポート２転送リクエスト８ｊ−２がオンの場合は状態ｓ３０５へ進み、ポート２アクノリッジ８ｐ−２をオンとする。前記ポート２アクノリッジを受けて、ポート２転送バッファ管理テーブル８１−２はポインタを先頭ポインタ出力８ｈに出力する。その後、状態ｓ３０６ではポート２のフレームの転送期間ウェイトし、ウェイト期間が終了すると状態ｓ３０１へ戻る。
リクエスト受付回路８２における上記の処理によって、遅延に関して出力ポート毎に異なる優先順位付けを実現することができる。
【００４３】
図２１は転送バッファ管理部８１−１〜２の制御部８ｃが転送バッファをつなぐ際の処理を示すフローチャートである。状態ｓ３１１では、組立中バッファ管理部９でフレーム組立が完了し、組立完了したフレームの先頭ポインタと後尾ポインタが通知される。状態ｓ３１２では、転送バッファ列の存在を有無フラグ８ｆによって判定する。状態ｓ３１２で有無フラグ８ｆがオン（すなわち転送バッファ列有り）の場合は、既存の転送バッファ列に新たなバッファまたはバッファ列をつなぐ処理を行う。状態ｓ３１６および状態ｓ３１７はバッファまたはバッファ列をつなぐ具体的な処理内容を示している。状態ｓ３１６では、後尾ポインタ８ｂの指定するバッファのポインタエリアに、通知された先頭ポインタの値をライトする。状態ｓ３１７では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ３１２で有無フラグ８ｆがオフ（すなわち転送バッファ列無し）の場合は、バッファまたはバッファ列を転送バッファ管理部８に登録する処理を行う。状態ｓ３１３〜ｓ３１５はバッファまたはバッファ列を転送バッファ列として登録する具体的な処理内容を示している。状態ｓ３１３では、通知された先頭ポインタを新しい先頭ポインタ８ａとする。状態ｓ３１４では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ３１５では、転送バッファが存在しない状態から転送バッファ列を登録したので、転送バッファ列の存在を示す有無フラグ８ｆをオンにする。
【００４４】
図２２は転送バッファ管理部８１−１〜２の制御部８ｃが転送バッファをはずす際の処理を示すフローチャートである。状態ｓ３２１では、リクエスト受付回路８２からのアクノリッジ８ｐ−１〜２を監視し、オンの場合は状態ｓ３２２へ進む。状態ｓ３２２では、先頭ポインタ８ａの内容をリード制御部６と空きバッファ管理部７へ通知する。これにより、共通メモリ１からは転送バッファ列の先頭のバッファのデータを読み出すとともに、読み出した転送バッファを空きバッファとして空きバッファ列につなぐ。その後、状態ｓ３２３では先頭ポインタ８ａと後尾ポインタ８ｂの内容を比較するコンパレータ８ｄの出力を見る。状態ｓ３２３でコンパレータ８ｄが不一致を示す場合は、先頭ポインタ８ａの指定するバッファの後に続く転送バッファ列が存在することを示しているので、先頭ポインタ８ａを更新する。状態ｓ３２５は先頭ポインタ８ａを更新する具体的な処理内容を示しており、先頭ポインタ８ａの指定するバッファのポインタエリアの値を新しい先頭ポインタ８ａとする。状態ｓ３２３でコンパレータ８ｄが一致を示す場合は、転送バッファ列が存在しないことを示しているので、状態ｓ３２４にて有無フラグ８ｆをオフにし、先頭ポインタ８ａは更新しない。状態ｓ３２４およびｓ３２５いずれの処理の場合でも、状態ｓ３２６にて共通バッファ１から転送バッファのデータがリードされている間、ポートイネーブル８ｑをオンにしながらウェイトする。そして、状態ｓ３２７にて、状態ｓ３２２で通知したポインタの指定するバッファのフレームエンドフラグ２ｂがオンであれば、再び状態ｓ３２２の処理へ戻る。
なお、各転送バッファ管理テーブル８１−１〜２の構成、処理は同一であるため、図２０〜図２２において出力ポートを表す添字は示していない。
【００４５】
上記に示す発明の実施の形態３によるフレーム組立装置では、リクエスト受付回路８２によってポート１＞ポート２の順にフレーム転送が優先されるため、ポート毎に異なる優先順位を実施することができる。なお、ここで示すリクエスト受付回路８２は遅延に関してポート毎に異なる優先順位を実現するものであるが、ポート毎に異なるトラヒック特性やフレームレートを実施することも可能である。
【００４６】
実施の形態４．
以下、発明の実施の形態４について説明する。発明の実施の形態４によるフレーム組立装置は、発明の実施の形態１によるフレーム組立装置の発展型であり、転送バッファ管理部８の構成を高優先と低優先の２つ設け、高優先側はフレーム単位で、低優先側は固定長で転送することにより遅延に関する優先順位を実現するものである。
【００４７】
図２３は発明の実施の形態４によるフレーム組立装置の転送バッファ管理部８の構成を示す図である。転送バッファ管理テーブル８１−１は遅延に関して優先度の高いコネクションの転送バッファを管理し、転送バッファ管理テーブル８１−２は遅延に関して優先度の低いコネクションの転送バッファを管理する。なお、転送バッファ管理テーブル８１−１〜２の構成は図１５のとおりであるが、転送バッファ管理テーブルの制御部８ｃは高優先側と低優先側で処理が異なる。前記の異なる点については後述するフローチャートに記載する。リクエスト受付回路８２は、転送バッファ管理テーブル８１−１〜２からの転送リクエスト８ｊ−１〜２に対してアクノリッジ信号８ｐ−１〜２を返すことにより、先頭ポインタ出力８ｈを制御する部分である。優先順位割当回路８４は、組立中バッファ管理部９から通知された先頭ポインタと後尾ポインタを、転送バッファ管理テーブル８１−１〜２へ通知する。図２４は３コネクションを収容するフレーム組立装置の優先順位割当回路８４の一例であり、コネクション＃１を高優先とし、コネクション＃２〜＃３を低優先としている。
【００４８】
図２５はリクエスト受付回路８２の動作実施例を示すフローチャートである。状態ｓ４０１では高優先側の転送バッファ管理テーブル８１−１にて転送待ちのバッファ列があるかどうかを転送リクエスト８ｊ−１によって判別する。転送リクエスト８ｊ−１がオフの場合は状態ｓ４０４へ進む。転送リクエスト８ｊ−１がオンの場合は状態ｓ４０２へ進み、アクノリッジ８ｐ−１をオンとする。前記アクノリッジ８ｐ−１を受けて、高優先側の転送バッファ管理テーブル８１−１は先頭ポインタの内容を先頭ポインタ出力８ｈに出力する。その後、状態ｓ４０３では高優先側のフレームの転送期間ウェイトし、ウェイト期間が終了すると、状態ｓ４０１へ戻る。
状態ｓ４０４では低優先側の転送バッファ管理テーブル８１−２にて転送待ちのバッファ列があるかどうかを転送リクエスト８ｊ−２によって判別する。転送リクエスト８ｊ−２がオフの場合は状態ｓ４０１へ戻る。転送リクエスト８ｊ−２がオンの場合は状態ｓ４０５へ進み、アクノリッジ８ｐ−２をオンとする。前記アクノリッジ８ｐ−２を受けて、転送バッファ管理テーブル８１−２は先頭ポインタの内容を先頭ポインタ出力８ｈに出力する。その後、状態ｓ４０６では転送バッファのリード期間中ウェイトする。ウェイト期間が終了すると状態ｓ４０１へ戻る。
上記の処理により、低優先側の転送リクエスト８ｊ−２に対して高優先側の転送リクエスト８ｊ−１を優先的に処理することができる。
【００４９】
図２６は制御部８ｃが転送バッファをつなぐ際の処理を示すフローチャートである。状態ｓ４１１では、組立中バッファ管理部９でフレーム組立が完了し、組立完了したフレームの先頭ポインタと後尾ポインタが通知される。状態ｓ４１２では、転送バッファ列の存在を有無フラグ８ｆによって判定する。状態ｓ４１２で有無フラグ８ｆがオン（すなわち転送バッファ列有り）の場合は、既存の転送バッファ列に新たなバッファまたはバッファ列をつなぐ処理を行う。状態ｓ４１６および状態ｓ４１７はバッファまたはバッファ列をつなぐ具体的な処理内容を示している。状態ｓ４１６では、後尾ポインタ８ｂの指定するバッファのポインタエリアに、通知された先頭ポインタの値をライトする。状態ｓ４１７では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ４１２で有無フラグ８ｆがオフ（すなわち転送バッファ列無し）の場合は、バッファまたはバッファ列を転送バッファ管理部８に登録する処理を行う。状態ｓ４１３〜ｓ４１５はバッファまたはバッファ列を転送バッファ列として登録する具体的な処理内容を示している。状態ｓ４１３では、通知された先頭ポインタを新しい先頭ポインタ８ａとする。状態ｓ４１４では、通知された後尾ポインタを新しい後尾ポインタ８ｂとする。状態ｓ４１５では、転送バッファが存在しない状態から転送バッファ列を登録したので、転送バッファ列の存在を示す有無フラグ８ｆをオンにする。
【００５０】
図２７は高優先側の転送バッファ管理テーブル８１−１の制御部８ｃ−１が転送バッファをはずす際の処理を示すフローチャートである。状態ｓ４２１では、リクエスト受付回路８２からのアクノリッジ８ｐを監視し、オンの場合は状態ｓ４２２へ進む。状態ｓ４２２では、先頭ポインタ８ａの内容をリード制御部６と空きバッファ管理部７へ通知する。これにより、共通メモリ１からは転送バッファ列の先頭のバッファのデータを読み出すとともに、読み出した転送バッファを空きバッファとして空きバッファ列につなぐ。その後、状態ｓ４２３では先頭ポインタ８ａと後尾ポインタ８ｂの内容を比較するコンパレータ８ｄの出力を見る。状態ｓ４２３でコンパレータ８ｄが不一致を示す場合は、先頭ポインタ８ａの指定するバッファの後に続く転送バッファ列が存在することを示しているので、先頭ポインタ８ａを更新する。状態ｓ４２５は先頭ポインタ８ａを更新する具体的な処理内容をしており、先頭ポインタ８ａの指定するバッファのポインタエリアの値を新しい先頭ポインタ８ａとする。状態ｓ４２３でコンパレータ８ｄが一致を示す場合は、転送バッファ列が存在しないことを示しているので、状態ｓ４２４にて有無フラグ８ｆをオフにし、先頭ポインタ８ａは更新しない。状態ｓ４２４およびｓ４２５いずれの処理の場合でも、状態ｓ４２６にて共通バッファ１から転送バッファのデータがリードされている間、ポートイネーブル８ｑをオンにしながらウェイトする。そして、状態ｓ４２７にて、状態ｓ４２２で通知したポインタの指定するバッファのフレームエンドフラグ２ｂがオンであれば、再び状態ｓ４２２の処理へ戻る。
【００５１】
図２８は低優先側の転送バッファ管理テーブル８１−２の制御部８ｃ−２が転送バッファをはずす際の処理を示すフローチャートである。図２７に示す処理と異なる点は、状態ｓ４２６で処理が終了することである。つまり、高優先側の転送バッファ管理テーブル８１−１の制御部８ｃ−１ではフレーム単位で転送バッファを通知するのに対し、低優先側の転送バッファ管理テーブル８１−２の制御部８ｃ−２ではバッファ単位で通知する。
【００５２】
図２９は低優先フレームの出力中に高優先フレームの転送リクエストがある場合のフレーム出力を示す図である。ここでは例として、コネクション情報４−５と固定バッファ長２サイズ分のデータ４−６，４−７から構成される＃１フレームと、コネクション情報４−１と固定バッファ長３サイズ分のデータ４−２，４−３ａ，４−３ｂ，４−４から構成される＃２フレームをあげている。そして、遅延に関する優先度は＃１＞＃２とし、＃２フレームの転送期間中に＃１フレームの転送リクエスト８ｊ−１がある場合のフレーム出力を示している。
以下、図２９の流れに沿って説明する。まず、＃２の転送リクエスト８ｊ−２があり、＃２フレーム４−１が転送される。ここで、＃２データ４−３ａを転送中に＃１転送リクエスト８ｊ−１があると、フレーム組立装置は前記＃２データ４−３を転送後のバッファサイズの区切りで＃２のフレームのリードを中断し、＃１フレーム４−５〜７の転送を行う。前記＃１フレーム４−５〜７転送後は、＃２コネクション情報４−１を出力し、＃２フレームの残りのデータ４−４をリードする。この場合、リード制御部６では、リードデータのコネクションが変化する度にバッファのコネクション情報２ｃをリードすることで、上位に対してコネクション情報を通知することができる。
【００５３】
上記に示す発明の実施の形態４によるフレーム組立装置では、転送バッファ管理テーブルを２つ設け、高優先側はフレーム単位で、低優先側はバッファ単位で転送バッファを読み出すことにより、遅延に関する優先制御を実現することができる。なお、本実施の形態では、低優先のフレームをバッファ単位で読み出すが、高優先フレームよりも短い固定長単位であればバッファ単位でなくてよい。
【００５４】
実施の形態５．
以下、発明の実施の形態５について説明する。発明の実施の形態５によるフレーム組立装置は、発明の実施の形態１によるフレーム組立装置の発展型であり、転送バッファ管理部８の構成を優先順位毎に複数設け、遅延に関する優先順位を実現するものである。
【００５５】
図３０は発明の実施の形態５によるフレーム組立装置の転送バッファ管理部８の構成を示す図である。この例では遅延に関する優先順位を２種類設け、転送バッファ管理テーブル８１−１は遅延に関して優先度の高いコネクションの転送バッファを管理し、転送バッファ管理テーブル８１−２は遅延に関して優先度の低いコネクションの転送バッファを管理する。リクエスト受付回路８２は、転送バッファ管理テーブル８１−１〜２からの転送リクエスト８ｊ−１〜２に対してアクノリッジ信号８ｐ−１〜２を返すことにより、先頭ポインタ出力８ｈを制御する部分である。優先順位割当回路８４は、組立中バッファ管理部９から通知された先頭ポインタと後尾ポインタを転送バッファ管理テーブル８１−１〜２へ通知するものであり、例えば図２４に示す優先順位割当回路８４と同一であってもよい。
【００５６】
図３１はリクエスト受付回路８２の動作実施例を示すフローチャートである。状態ｓ５０１では高優先側の転送バッファ管理テーブル８１−１にて転送待ちのバッファ列があるかどうかを転送リクエスト８ｊ−１によって判別する。転送リクエスト８ｊ−１がオフの場合は状態ｓ５０４へ進む。転送リクエスト８ｊ−１がオンの場合は状態ｓ５０２へ進み、アクノリッジ８ｐ−１をオンとする。前記アクノリッジ８ｐ−１を受けて、高優先側の転送バッファ管理テーブル８１−１は先頭ポインタの内容を先頭ポインタ出力８ｈに出力する。その後、状態ｓ５０３では転送中信号８ｋがオンの間、すなわちデータリード期間中ウェイトし、ウェイト期間が終了すると状態ｓ５０１へ戻る。
状態ｓ５０４では、転送中信号８ｋがオンの場合は低優先側のデータ転送中であるため、状態ｓ５０１へ戻る。状態ｓ５０４では、転送中信号８ｋがオフの場合は、状態ｓ５０５へ進み、低優先側の転送バッファ管理テーブル８１−２にて転送待ちのバッファ列があるかどうかを転送リクエスト８ｊ−２によって判別する。転送リクエスト８ｊ−２がオフの場合は状態ｓ５０１へ戻る。転送リクエスト８ｊ−２がオンの場合は状態ｓ５０６へ進み、アクノリッジ８ｐ−２をオンとする。前記アクノリッジ８ｐ−２を受けて、転送バッファ管理テーブル８１−２は先頭ポインタの内容を先頭ポインタ出力８ｈに出力する。その後、ウェイトすることなく、状態ｓ５０１へ戻る。
上記の処理により、低優先側の転送リクエスト８ｊ−２に対して高優先側の転送リクエスト８ｊ−１を即座に優先的に処理することができる。
【００５７】
図３２はリード制御部６の構成を示す図である。リードアドレス生成回路６１は先頭ポインタ出力８ｈを受けて、ポインタの指定するバッファに対応するリードアドレス６ａを出力する。リードアドレス出力中は転送中信号８ｋをオンにする。リードパルス生成回路６３はリードパルス生成指示６ｓを受けて、リードパルス６ｂを出力する。アドレスレジスタ６２は、低優先のバッファのデータをリード中に高優先の転送リクエスト８ｊ−１を受けた場合に、前記低優先のバッファにおけるリードアドレスを保持する。その際、リードアドレス生成回路６１は前記低優先のバッファのリードを中断し、高優先のバッファのリードを優先する。そして、高優先のバッファのリードが途切れた際に、アドレスレジスタ出力６ｒを参照して低優先のバッファのデータのリードを再開する。
【００５８】
図３３は低優先フレームの出力中に高優先フレームの転送リクエストがある場合のフレーム出力を示す図である。ここでは例として、コネクション情報４−５と固定バッファ長２サイズ分のデータ４−６，４−７から構成される＃１フレームと、コネクション情報４−１と固定バッファ長３サイズ分のデータ４−２，４−３ａ，４−３ｂ，４−４から構成される＃２フレームをあげている。そして、遅延に関する優先度は＃１＞＃２とし、＃２フレームの転送期間中に＃１フレームの転送リクエスト８ｊ−１がある場合のフレーム出力を示している。
以下、図３３の流れに沿って説明する。まず、＃２の転送リクエスト８ｊ−２があり、＃２フレーム４−１が転送される。ここで、＃２データ４−３ａを転送中に＃１転送リクエスト８ｊ−１があると、リード制御部６は最後にリードした＃２データ４−３ａのアドレスをアドレスレジスタ６２に保持する。そして、＃１フレーム４−５〜７のリードを行う。リード終了後、＃２コネクション情報４−１を出力し、アドレスレジスタ出力６ｒの次のアドレスからデータ４−３ｂ，４−４のリードを再開する。リード制御部６では、リードデータのコネクションが変化する度にバッファのコネクション情報２ｃをリードすることで、上位に対してコネクション情報を通知することができる。
【００５９】
上記に示す発明の実施の形態５によるフレーム組立装置では、転送バッファ管理テーブルを２つ設け、低優先側の転送バッファのデータを読み出し中であっても、高優先側の転送リクエストがあれば直ちに低優先側の読み出しを中断し、高優先側の転送バッファのデータの読み出しを開始することにより、遅延に関する優先制御を実現することができる。なお、本実施の形態では、優先順位を２つ設定したが、３つ以上の優先順位であってもよい。
また、上記説明ではコネクション単位で優先度を設ける場合を説明したが、例えば外部からの指令によってポート毎に優先度を都度変更し、ポート毎の優先度制御としてもよい。
【００６０】
【発明の効果】
以上のように本発明によれば、転送バッファ管理部において、転送列有無フラグと先頭ポインタと後尾ポインタの内容を比較して上記有無フラグを制御するコンパレータを設けたので、転送バッファ列の有無を直ちに確認できる。即ち、小規模で無駄のないハードウェア制御により転送の必要の有無が判る効果がある。
【００６１】
また、上記転送バッファ管理部の構成をコネクション毎またはポート毎に設けることにより、複数コネクションを収容するフレーム組立装置にてコネクション毎または出力ポート毎に異なるサービスを実施できる効果がある。
【００６２】
また、上記転送バッファ管理部の構成を遅延に関する優先順位毎に複数設け、フレームを読み出し中により優先度の高い転送リクエストがある場合は直ちに優先度の高いフレームを読み出すことにより、遅延に関する優先順位を実現できる効果がある。
【００６３】
また、空きバッファ列からバッファをはずす際に先頭ポインタと後尾ポインタの内容を比較して一致している場合に有無フラグをオフにするので、空きバッファ列の有無を直ちに確認できる効果がある。
【図面の簡単な説明】
【図１】  発明の実施の形態１におけるフレーム組立装置の全体の構成の例を示す図である。
【図２】  本発明によるフレーム組立装置の共通メモリに存在するバッファの構成を示す図である。
【図３】  実施の形態１におけるフレーム組立装置の共通メモリに存在するバッファ列を示す図である。
【図４】  実施の形態１におけるフレーム組立装置の転送バッファ管理部の構成を示す図である。
【図５】  実施の形態１におけるフレーム組立装置で転送バッファをつなぐ処理を示すフローチャート図である。
【図６】  実施の形態１におけるフレーム組立装置で転送バッファをはずす処理を示すフローチャート図である。
【図７】  実施の形態１におけるフレーム組立装置の組立中バッファ管理部の構成を示す図である。
【図８】  実施の形態１におけるフレーム組立装置の組立中バッファ管理部の処理を示すフローチャート図である。
【図９】  実施の形態１におけるフレーム組立装置の空きバッファ管理部の構成を示す図である。
【図１０】  実施の形態１におけるフレーム組立装置で転送バッファを空きバッファとしてつなぐ際の処理を示すフローチャート図である。
【図１１】  実施の形態１におけるフレーム組立装置でエラーとなった組立中バッファ列を空きバッファとしてつなぐ処理を示すフローチャート図である。
【図１２】  実施の形態１におけるフレーム組立装置で空きバッファをはずす処理を示すフローチャート図である。
【図１３】  実施の形態２におけるフレーム組立装置の転送バッファ管理部の構成を示す図である。
【図１４】  実施の形態２におけるフレーム組立装置のリクエスト受付回路の動作実施例を示すフローチャート図である。
【図１５】  実施の形態２におけるフレーム組立装置の転送バッファ管理テーブルの構成を示す図である。
【図１６】  実施の形態２におけるフレーム組立装置で転送バッファをつなぐ処理を示すフローチャート図である。
【図１７】  実施の形態２におけるフレーム組立装置で転送バッファをはずす処理を示すフローチャート図である。
【図１８】  実施の形態３におけるフレーム組立装置の転送バッファ管理部の構成を示す図である。
【図１９】  実施の形態３におけるフレーム組立装置のポート割当回路の構成を示す図である。
【図２０】  実施の形態３におけるフレーム組立装置のリクエスト受付回路の動作実施例を示すフローチャート図である。
【図２１】  実施の形態３におけるフレーム組立装置で転送バッファをつなぐ処理を示すフローチャート図である。
【図２２】  実施の形態３におけるフレーム組立装置で転送バッファをはずす処理を示すフローチャート図である。
【図２３】  実施の形態４におけるフレーム組立装置の転送バッファ管理部の構成を示す図である。
【図２４】  実施の形態４におけるフレーム組立装置の優先順位割当回路の構成を示す図である。
【図２５】  実施の形態４におけるフレーム組立装置のリクエスト受付回路の動作実施例を示すフローチャート図である。
【図２６】  実施の形態４におけるフレーム組立装置で転送バッファをつなぐ処理を示すフローチャート図である。
【図２７】  実施の形態４におけるフレーム組立装置で高優先側の転送バッファをはずす処理を示すフローチャート図である。
【図２８】  実施の形態４におけるフレーム組立装置で低優先側の転送バッファをはずす処理を示すフローチャート図である。
【図２９】  実施の形態４におけるフレーム組立装置で低優先フレームの出力中に高優先フレームの転送リクエストがある場合の動作を示す図である。
【図３０】  実施の形態５におけるフレーム組立装置の転送バッファ管理部の構成を示す図である。
【図３１】  実施の形態５におけるフレーム組立装置のリクエスト受付回路の動作実施例を示すフローチャート図である。
【図３２】  実施の形態５におけるフレーム組立装置のリード制御部の構成を示す図である。
【図３３】  実施の形態５におけるフレーム組立装置におけるフレーム出力の実施例を示す図である。
【図３４】  従来の受信バッファ管理方式を示す図である。
【符号の説明】
１  共通メモリ、２  バッファ、３  固定長セル、４  フレーム、５  ライト制御部、５ａ  ライトアドレス出力、５ｂ  ライトアドレス出力、５ｃ  コネクション情報、５ｄ  フレームエンド情報、５ｅ  セル受信通知、６  リード制御部、６１  リードアドレス生成回路、６２  アドレスレジスタ、６３  リードパルス生成回路、６ａ  リードアドレス出力、６ｂ  ライトアドレス出力、６ｒ  アドレスレジスタ出力、６ｓ  リードパルス生成指示、７  空きバッファ管理部、７ａ  先頭ポインタ、７ｂ  後尾ポインタ、７ｃ  制御部、７ｄ  コンパレータ、７ｅ  コンパレータ出力、７ｆ  有無フラグ、７ｈ  先頭ポインタ出力、７ｔ  後尾ポインタ出力、７ｓ  制御信号、８  転送バッファ管理部、８１  転送バッファ管理テーブル、８２  リクエスト受付回路、８３  ポート割当回路、８４  優先順位割当回路、８ａ  先頭ポインタ、８ｂ  後尾ポインタ、８ｃ  制御部、８ｄ  コンパレータ、８ｅ  コンパレータ出力、８ｆ  有無フラグ、８ｈ  先頭ポインタ出力、８ｔ  後尾ポインタ出力、８ｊ  転送リクエスト、８ｋ  転送中信号、８ｐ  アクノリッジ、８ｑ  ポートイネーブル、８ｓ  制御信号、９組立中バッファ管理部、９ａ  先頭ポインタ、９ｂ  後尾ポインタ、９ｃ  制御部、９ｆ  組立中フラグ、９ｈ  先頭ポインタ出力、９ｔ  後尾ポインタ出力、９ｓ  制御信号、９ｕ  組立中バッファ管理テーブル、１１１  （サイズａの）空きバッファ、１１２  （サイズｂの）空きバッファ、１１３  受信済みバッファ、１２１，１２２  空きバッファディスクリプタ、１２３  受信済みバッファディスクリプタ。
【図１】
0003642626.tif 000002
【図２】
0003642626.tif 000003
【図３】
0003642626.tif 000004
【図４】
0003642626.tif 000005
【図５】
0003642626.tif 000006
【図６】
0003642626.tif 000007
【図７】
0003642626.tif 000008
【図８】
0003642626.tif 000009
【図９】
0003642626.tif 000010
【図１０】
0003642626.tif 000011
【図１１】
0003642626.tif 000012
【図１２】
0003642626.tif 000013
【図１３】
0003642626.tif 000014
【図１４】
0003642626.tif 000015
【図１５】
0003642626.tif 000016
【図１６】
0003642626.tif 000017
【図１７】
0003642626.tif 000018
【図１８】
0003642626.tif 000019
【図１９】
0003642626.tif 000020
【図２０】
0003642626.tif 000021
【図２１】
0003642626.tif 000022
【図２２】
0003642626.tif 000023
【図２３】
0003642626.tif 000024
【図２４】
0003642626.tif 000025
【図２５】
0003642626.tif 000026
【図２６】
0003642626.tif 000027
【図２７】
0003642626.tif 000028
【図２８】
0003642626.tif 000029
【図２９】
0003642626.tif 000030
【図３０】
0003642626.tif 000031
【図３１】
0003642626.tif 000032
【図３２】
0003642626.tif 000033
【図３３】
0003642626.tif 000034
【図３４】
0003642626.tif 000035