(57)【要約】  FIFOバッファ１は、１サイクル内でデータの書き込み及び読み出しのいずれか一方を実行するメモリを複数組み合わせることにより、１サイクル内でデータの書き込み及び読み出しが可能なパケット格納バッファ１０と、パケット格納バッファ１０に含まれる、データの書き込みが可能であるメモリを示すW_Bank信号を出力するバンクスイッチ１７と、書き込み対象のデータの入力時のW_Bank信号が示すメモリに対して、書き込み対象のデータの書き込み制御を行うパケット書込制御回路１５と、パケット書込制御回路１５からのキュー書込信号「1」に応じて、バンクスイッチ１７から出力され、書き込み対象のデータの先頭データが書き込まれたメモリを示すW_Bank信号を保持するパケット書込開始バンク保持FIFOキュー１９とを備える。
2011058659.tif 000002
【特許請求の範囲】
【請求項１】
１サイクル内でデータの書き込み及び読み出しのいずれか一方を実行するメモリを複数組み合わせることにより、１サイクル内でデータの書き込み及び読み出しが可能なメモリセットと、
前記メモリセットに含まれる、データの書き込みが可能であるメモリを示す第１信号を出力する出力手段と、
書き込み対象のデータの入力時の第１信号が示すメモリに対して、前記書き込み対象のデータの書き込み制御を行う書込制御手段と、
前記書込制御手段からの指示に応じて、前記出力手段から出力され、前記書き込み対象のデータの先頭データが書き込まれたメモリを示す第１信号を保持する第１保持手段と
を備えることを特徴とするFIFOバッファ。
【請求項２】
前記メモリセットに含まれる各メモリに書き込まれたデータの読み出し時に前記出力手段から出力された第１信号の値と、前記第１保持手段に保持されている第１信号の値とに基づいて、前記各メモリに書き込まれたデータの読み出し制御を行う読出制御手段を備えることを特徴とする請求項１に記載のFIFOバッファ。
【請求項３】
前記書き込み対象のデータの長さを保持する第２保持手段を備え、
前記読出制御手段は、前記第２保持手段に保持されたデータの長さ、前記データの前記各メモリからの読み出し時に前記出力手段から出力された第１信号の値と、前記第１保持手段に保持されている第１信号の値に基づいて、前記各メモリに書き込まれたデータの読み出し制御を行うことを特徴とする請求項２に記載のFIFOバッファ。
【請求項４】
前記読出制御手段は、外部装置が前記各メモリに書き込まれたデータの送出を許可している場合、且つ前記第１保持手段に現在の読み出し対象のデータに対応する第１信号の値が保持され、前記第２保持手段に現在の読み出し対象のデータの長さが保持されている場合に、前記各メモリに書き込まれたデータの読み出し制御を行うことを特徴とする請求項３に記載のFIFOバッファ。
【請求項５】
前記第１保持手段は、１サイクル内で新しい第１信号の値の書き込み及び現在の読み出し対象のデータに対応する第１信号の値の読み出しを行い、
前記第２保持手段は、１サイクル内で新しいデータの長さの書き込み及び現在の読み出し対象のデータの長さの読み出しを行うことを特徴とする請求項３又は４に記載のFIFOバッファ。
【請求項６】
前記メモリセットに含まれる複数のメモリは、複数のランダムアクセスメモリであることを特徴とする請求項１乃至５のいずれか１項に記載のFIFOバッファ。
【請求項７】
複数のメモリを備えるFIFOバッファの制御方法であって、
前記複数のメモリのうち、データが入力した際に出力された、データの書き込みが可能であるメモリを示す第１信号が示すメモリに前記入力したデータの先頭データを書き込み、
前記データが入力した際に出力された第１信号の値をデータ毎に保持することを特徴とするFIFOバッファの制御方法。
【請求項８】
データの読み出しの際に出力される第１信号の値と、読み出し対象のデータに対応して保持されている第１信号の値とに基づいて、前記読み出し対象のデータが格納されているメモリから当該読み出し対象のデータを読み出すことを特徴とする請求項７に記載のFIFOバッファの制御方法。
【請求項９】
前記入力したデータの長さを保持し、
データの読み出しの際に出力される第１信号の値と、読み出し対象のデータに対応して保持されている第１信号の値と、前記読み出し対象のデータに対応して保持されているデータの長さとに基づいて、前記読み出し対象のデータが格納されているメモリから当該読み出し対象のデータを読み出すことを特徴とする請求項８に記載のFIFOバッファの制御方法。
【請求項１０】
外部装置が前記読み出し対象のデータの送出を許可している場合、且つ現在の読み出し対象のデータに対応する第１信号の値と現在の読み出し対象のデータの長さとが保持されている場合に、前記読み出し対象のデータが格納されているメモリから当該読み出し対象のデータを読み出すことを特徴とする請求項９に記載のFIFOバッファの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、FIFOバッファ及びFIFOバッファの制御方法に関する。
【背景技術】
【０００２】
従来より、１サイクル内にデータの書き込み及び読み出しを同時に実行するFIFOバッファが知られている。このFIFOバッファを実現するために、フリップフロップや１サイクルでデータの読み書き可能なレジスタファイルを使用した場合、物理面積（例えば１ミリ平米）あたりのバッファ容量が少ない。【０００３】
そこで、小さい物理面積で大容量のFIFOバッファを実現するために、ＲＡＭ（ランダムアクセスメモリ）を使用する方法がある（例えば、特許文献１参照）。しかしながら、ＲＡＭは、保持しているデータの読み出しと、新たなデータの書き込みとを１サイクルの期間で実行できない。このため、データの読み書きが自由なタイミングで行われるようなFIFOバッファを実現するには工夫が必要となる。【０００４】
以下、ＲＡＭを利用した従来のFIFOバッファについて説明する。【０００５】
図８は、従来のFIFOバッファの概略構成図である。【０００６】
図８のFIFOバッファ１００は、パケット入力端子１０２、複数のＲＡＭ（Random Access Memory）１１１，１１２、ライトポインタ１１３、リードポインタ１１４、パケット書込制御回路１１５を備えている。FIFOバッファ１００は、またパケット読出制御回路１１６、バンクスイッチ１１７、及びパケット長保持FIFOキュー１１８を備えている。さらに、FIFOバッファ１００は、書込開始バンク指示部１０５、及びタイミング待ち機構１０７を備えている。FIFOバッファ１００は、ＡＮＤ回路１２０，１２３、検出回路１２１，１２４、及びセレクタ１２２，１２５を備えている。ＲＡＭ１１１，１１２は、パケット格納バッファ１１０を構成し、バンク形式で構成されている。ここでは、ＲＡＭ１１１がバンク「０」であり、ＲＡＭ１１２がバンク「１」である。ＲＡＭ１１１，１１２は、サイクル毎に交互にパケットの書き込み／読み出しを行う、即ちインターリーブ動作を行う。【０００７】
ライトポインタ１１３は、パケット格納バッファ１１０内のパケットの書込位置を保持する。リードポインタ１１４は、パケット格納バッファ１１０内のパケットの読出位置を保持する。パケット書込制御回路１１５は、ＲＡＭ１１１又は１１２へのパケットの書き込みを制御し、パケット書込信号（ライトイネーブル）を出力する。パケット読出制御回路１１６は、ＲＡＭ１１１又は１１２からのパケットの読み出しを制御する。バンクスイッチ１１７は、フリップフロップ回路１１７Ａ及びインバータ１１７Ｂを備え、パケットの書き込みが可能であるＲＡＭ、つまりバンクを示す信号（W_Bank信号）を出力する。W_Bank信号が「０」である場合、パケットの書き込みが可能であるバンクはバンク０、即ちＲＡＭ１１１となる。一方、W_Bank信号が「１」である場合、パケットの書き込みが可能であるバンクはバンク１、即ちＲＡＭ１１２となる。【０００８】
書込開始バンク指示部１０５は、フリップフロップ回路１０６を備えている。フリップフロップ回路１０６は、パケットの先頭データを書き込むバンクを指定するBegin_W_Bank信号を出力する。Begin_W_Bank信号が「０」である場合、パケットの先頭データを書き込むためのバンクはバンク０、即ちＲＡＭ１１１となる。一方、Begin_W_Bank信号が「１」である場合、パケットの先頭データを書き込むためのバンクはバンク１、即ちＲＡＭ１１２となる。【０００９】
タイミング待ち機構１０７は、フリップフロップ回路１０８及びセレクタ１０９を備えている。フリップフロップ回路１０８は、パケット入力端子１０２から入力したパケットの実データを保持し、出力タイミングを１サイクル（１τ）遅らせる。セレクタ１０９は、パケットの実データの入力先を選択する回路である。セレクタ１０９は、パケット書込制御回路１１５から、パケットの実データの入力先を選択するための１τWaitSel信号を受信する。セレクタ１０９は、１τWaitSel信号「１」を受信した場合、フリップフロップ回路１０８に保持されたパケットの実データをBuf_W_Data信号としてパケット格納バッファ１１０に出力する。セレクタ１０９は、パケット書込制御回路１１５から１τWaitSel信号「０」を受信した場合、パケット入力端子１０２から入力したパケットの実データをBuf_W_Data信号としてパケット格納バッファ１１０に出力する。【００１０】
図８のFIFOバッファ１００では、パケット格納バッファ１１０の両バンクに空き領域が生じないように、パケットを詰めて両バンクに格納することを前提としている。このため、パケットの末尾データがパケット格納バッファ１１０に書き込まれた際に、パケット書込制御回路１１５は、書込開始バンク指示部１０５が出力するBegin_W_Bank信号の値を、末尾データが書き込まれたバンクと逆のバンクを示す値に書き換えている。【００１１】
パケット長保持FIFOキュー１１８は、パケット入力端子１０２から入力したパケットのパケット長を示す値を保持する。保持されたパケット長を示す値は、パケット読出回路１１６がＲＡＭ１１１又は１１２から読み出すべきパケットを読み出すときに利用される。【００１２】
検出回路１２１は、W_Bank信号が「０」であるときに、即ちW_Bank信号が「０」であることを検出すると、「１」を出力する。検出回路１２１は、W_Bank信号が「１」であるときに、即ちW_Bank信号が「１」であることを検出すると、「０」を出力する。検出回路１２４は、W_Bank信号が「１」であるときに、即ちW_Bank信号が「１」であることを検出すると、「１」を出力する。検出回路１２４は、W_Bank信号が「０」であるときに、即ちW_Bank信号が「０」であることを検出すると、「０」を出力する。セレクタ１２２は、検出回路１２１の出力に応じて、出力すべき情報を選択する。具体的には、セレクタ１２２は、検出回路１２１が「１」を出力するときには、ライトポインタ１１３からのアドレスＷＰを選択する。セレクタ１２２は、検出回路１２１が「０」を出力するときには、リードポインタ１１４からのアドレスＲＰを選択する。同様に、セレクタ１２５は、検出回路１２４の出力に応じて、出力すべき情報を選択する。具体的には、セレクタ１２５は、検出回路１２４が「１」を出力するときには、ライトポインタ１１３からのアドレスＷＰを選択する。セレクタ１２５は、検出回路１２４が「０」を出力するときには、リードポインタ１１４からのアドレスＲＰを選択する。【００１３】
バンクスイッチ１１７からのW_Bank信号「０」及びパケット書込制御回路１１５からの書込可能信号（ライトイネーブル）がＡＮＤ回路１２０に入力した場合、ライトイネーブル信号がＲＡＭ１１１のＷＥポートに入力する。このとき、セレクタ１２２は、ライトポインタ１１３からのアドレスＷＰをＲＡＭ１１１のAdrs（アドレス）ポートに入力する。ライトポインタ１１３が出力したＲＡＭ１１１のアドレスに、ＲＡＭ１１１のDT_inポートを介してタイミング待ち機構１０７から出力したパケット（実データ）が書き込まれる。一方、バンクスイッチ１１７からのW_Bank信号「１」及びパケット書込制御回路１１５からの書込可能信号（ライトイネーブル）がＡＮＤ回路１２３に入力した場合、ライトイネーブル信号がＲＡＭ１１２のＷＥポートに入力する。このとき、セレクタ１２５は、ライトポインタ１１３からのアドレスＷＰをＲＡＭ１１２のAdrs（アドレス）ポートに入力する。ライトポインタ１１３が出力したＲＡＭ１１２のアドレスに、ＲＡＭ１１２のDT_inポートを介してタイミング待ち機構１０７から出力したパケット（実データ）が書き込まれる。【００１４】
以上のように構成されたFIFOバッファ１００のパケットの書込動作を説明する。【００１５】
バンクスイッチ１１７は、W_Bank信号を継続的にパケット書込制御回路１１５、及び検出回路１２１，１２４に出力しているものとする。また、書込開始バンク指示部１０５は、Begin_W_Bank信号を継続的にパケット書込制御回路１１５に出力しているものとする。【００１６】
パケットがパケット入力端子１０２から入力すると、タイミング待ち機構１０７のフリップフロップ回路１０８は、パケット入力端子１０２から入力したパケットの実データを保持する。一方、パケットがパケット入力端子１０２から入力すると、パケット書込制御回路１１５は、パケットの先頭部分に含まれるトリガ及びパケット長の値を取得する。このとき、パケット書込制御回路１１５には、バンクスイッチ１１７からのW_Bank信号及び書込開始バンク指示部１０５からのBegin_W_Bank信号を入力する。パケット書込制御回路１１５は、バンクスイッチ１１７からのW_Bank信号と書込開始バンク指示部１０５からのBegin_W_Bank信号とが一致するか否かを判別する。【００１７】
W_Bank信号とBegin_W_Bank信号とが一致する場合は、パケット書込制御回路１１５は、パケット書込信号（ライトイネーブル）を出力する。このとき、ＲＡＭ１１１又は１１２のいずれかが、バンクスイッチ１１７からのW_Bank信号に応じて、パケットの書き込みが可能な状態となる。書き込みアドレスは、ライトポインタ１１３からのアドレスにより特定される。W_Bank信号とBegin_W_Bank信号とが一致する場合、パケット書込制御回路１１５は、セレクタ１０９に１τWaitSel信号「０」を出力する。セレクタ１０９は、パケット書込制御回路１１５から１τWaitSel信号「０」を受信し、パケット入力端子１０２から入力したパケットの実データをBuf_W_Data信号として、パケット格納バッファ１１０に出力する。このBuf_W_Data信号は、パケットの書き込みが可能な状態のバンクに格納される。【００１８】
一方、W_Bank信号とBegin_W_Bank信号とが一致しない場合は、パケットの書き込みができないタイミングであるので、パケット書込制御回路１１５は、セレクタ１０９に１τWaitSel信号「１」を出力する。セレクタ１０９は、パケット書込制御回路１１５から１τWaitSel信号「１」を受信し、１サイクル分遅延した、フリップフロップ回路１０８に保持されたパケットの実データをBuf_W_Data信号としてパケット格納バッファ１１０に出力する。このBuf_W_Data信号は、パケットの書き込みが可能な状態のバンクに格納される。【００１９】
図９は、図８のFIFOバッファ１００におけるパケットの書き込みタイミングと、パケットが両バンクに格納される状態とを示す図である。尚、図９に示すように、FIFOバッファ１００では、パケット格納バッファ１１０の両バンクに空き領域が生じないように、パケットを詰めて両バンクに格納することを前提としている。【００２０】
図９の最上段の０〜１４の数字は、サイクル番号を示す。図９では、３サイクル長の３つのパケット（Ａ１〜Ａ３、Ｂ１〜Ｂ３、Ｃ１〜Ｃ３）がパケット入力端子１０２から入力する。最初のパケットの先頭データＡ１が入力した第１サイクルでは、W_Bank信号とBegin_W_Bank信号とが一致するため、最初のパケット（Ａ１〜Ａ３）は、パケット入力端子１０２から入力して、そのままBuf_W_Data信号として出力されている（Ｐ１０１）。最初のパケットの先頭データＡ１は、第２サイクルでバンク０のアドレス０に書き込まれている。次のデータＡ２は、第３サイクルでバンク１のアドレス０に書き込まれている。末尾データＡ３は、第４サイクルでバンク０のアドレス１に書き込まれている。尚、図９のBank０ DT_in又はBank１ DT_inでは、実際に書き込まれたデータに下線が付されている。次に、最初のパケットの末尾データＡ３がBuf_W_Data信号として出力した後、パケット書込制御回路１１５が、書込開始バンク指示部１０５が出力するBegin_W_Bank信号の値（即ち、０）を、末尾データが書き込まれたバンクと逆のバンクを示す値（即ち、１）に書き換えている（Ｐ１０２）。【００２１】
次のパケットの先頭データＢ１が入力した第５サイクルでは、W_Bank信号とBegin_W_Bank信号とが一致していない（Ｐ１０３）。このため、パケット書込制御回路１１５は、セレクタ１０９に１τWaitSel信号「１」を出力する。そして、セレクタ１０９は、１サイクル分遅延した、次のパケットの先頭データＢ１をBuf_W_Data信号としてパケット格納バッファ１１０に出力する（Ｐ１０４）。次のパケットの先頭データＢ１は、第７サイクルでバンク１のアドレス１に書き込まれている。次のデータＢ２は、第８サイクルでバンク０のアドレス２に書き込まれている。末尾データＢ３は、第９サイクルでバンク１のアドレス２に書き込まれている。次に、次のパケットの末尾データＢ３がBuf_W_Data信号として出力した後、パケット書込制御回路１１５が、書込開始バンク指示部１０５が出力するBegin_W_Bank信号の値（即ち、１）を、末尾データが書き込まれたバンクと逆のバンクを示す値（即ち、０）に書き換えている（Ｐ１０５）。【００２２】
次いで、最後のパケットの先頭データＣ１が入力した第１０サイクルでは、W_Bank信号とBegin_W_Bank信号とが一致していない（Ｐ１０６）。このため、パケット書込制御回路１１５は、セレクタ１０９に１τWaitSel信号「１」を出力する。そして、セレクタ１０９は、１サイクル分遅延した、次のパケットの先頭データＣ１をBuf_W_Data信号としてパケット格納バッファ１１０に出力する（Ｐ１０７）。最後のパケットの先頭データＣ１は、第１２サイクルでバンク０のアドレス３に書き込まれている。次のデータＣ２は、第１３サイクルでバンク１のアドレス３に書き込まれている。末尾データＣ３は、第１４サイクルでバンク０のアドレス４に書き込まれている。【００２３】
尚、図９では、１つのパケットが奇数サイクル長の例のみを説明しているため、Begin_W_Bank信号は、交互に０，１に切り替わっている。しかしながら、偶数サイクル長のパケットがFIFOバッファ１００に書き込まれた場合、次のパケットに対応するBegin_W_Bank信号の値は、先行するパケットに対応するBegin_W_Bank信号の値と同一になる。
【先行技術文献】
【特許文献】
【００２４】
【特許文献１】特開昭５７−５５４６３号公報
【発明の概要】
【発明が解決しようとする課題】
【００２５】
このように、従来のFIFOバッファ１００では、パケットの入力時点のW_Bank信号とBegin_W_Bank信号とが一致しない場合があり、パケットの書き込みタイミングを１サイクル分待機せざるを得ない状況が発生することがあった。即ち、FIFOバッファ１００にパケットが到来したタイミングが、パケットをバンクに書き込み可能なタイミングでない場合、パケットの書き込みを開始するタイミングが遅延していた。【００２６】
上記課題に鑑み、明細書に開示されたFIFOバッファ及びFIFOバッファの制御方法は、データを書き込むための遅延時間を削減できることを目的とする。
【課題を解決するための手段】
【００２７】
上記目的を達成するため、FIFOバッファは、１サイクル内でデータの書き込み及び読み出しのいずれか一方を実行するメモリを複数組み合わせることにより、１サイクル内でデータの書き込み及び読み出しが可能なメモリセットと、前記メモリセットに含まれる、データの書き込みが可能であるメモリを示す第１信号を出力する出力手段と、書き込み対象のデータの入力時の第１信号が示すメモリに対して、前記書き込み対象のデータの書き込み制御を行う書込制御手段と、前記書込制御手段からの指示に応じて、前記出力手段から出力され、前記書き込み対象のデータの先頭データが書き込まれたメモリを示す第１信号を保持する第１保持手段とを備える。【００２８】
FIFOバッファの制御方法は、複数のメモリを備えるFIFOバッファの制御方法であって、前記複数のメモリのうち、データが入力した際に出力された、データの書き込みが可能であるメモリを示す第１信号が示すメモリに前記入力したデータの先頭データを書き込み、前記データが入力した際に出力された第１信号の値をデータ毎に保持する。
【発明の効果】
【００２９】
開示されたFIFOバッファは、データを書き込むための遅延時間を削減できる。
【図面の簡単な説明】
【００３０】
【図１】本実施の形態にかかるFIFO（First-In First-Out）バッファの構成図である。
【図２】パケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９の詳細な構成図である。
【図３】パケットの書込動作を示すフローチャートである。
【図４】（Ａ）は、W_Bank信号が０のときに、６サイクル長のパケットがパケット入力端子２から入力し、ＲＡＭ１１及び１２に書き込まれる例を示す図である。（Ｂ）は、W_Bank信号が１のときに、６サイクル長のパケットがパケット入力端子２から入力し、ＲＡＭ１１及び１２に書き込まれる例を示す図である。（Ｃ）は、３サイクル長の３つのパケットがＲＡＭ１１及び１２に書き込まれる例を示す図である。
【図５】パケットの読出動作を示すフローチャートである。
【図６】２つの３サイクル長のパケットが連続して入力した場合のパケット書き込み動作及びパケット読み出し動作を示すタイミングチャートである。
【図７】２つの４サイクル長のパケットが連続して入力した場合のパケット書き込み動作及びパケット読み出し動作を示すタイミングチャートである。
【図８】従来のFIFOバッファの概略構成図である。
【図９】図８のFIFOバッファにおけるパケットの書き込みタイミングと、パケットが両バンクに格納される状態とを示す図である。
【発明を実施するための形態】
【００３１】
以下、図面を参照しながら本発明の実施の形態を説明する。
【００３２】
図１は、本実施の形態にかかるFIFO（First-In First-Out）バッファの構成図である。
【００３３】
図１のFIFOバッファ１は、複数のＲＡＭ（Random Access Memory）１１，１２、ライトポインタ１３、リードポインタ１４、パケット書込制御回路１５（書込制御手段）を備えている。FIFOバッファ１は、またパケット読出制御回路１６（読出制御手段）、及びバンクスイッチ１７（出力手段）を備えている。さらに、FIFOバッファ１は、パケット長保持FIFOキュー１８（第２保持手段）、及びパケット書込開始バンク保持FIFOキュー１９（第１保持手段）を備えている。
【００３４】
ＲＡＭ１１，１２は、パケット格納バッファ１０を構成し、バンク形式で構成されている。ここでは、ＲＡＭ１１がバンク「０」であり、ＲＡＭ１２がバンク「１」である。ＲＡＭ１１，１２は、サイクル毎に交互にパケットの書き込み／読み出しを行う、即ちインターリーブ動作を行う。
【００３５】
パケットは、ＲＡＭ１１又は１２のデータバス幅の単位でパケットの先頭から順にＲＡＭ１１又は１２に書き込まれ、又はＲＡＭ１１又は１２から読み出される。例えば、ＲＡＭ１１又は１２のデータバス幅が８バイト（byte）である場合、１サイクルで８バイト分のパケットがＲＡＭ１１又は１２に書き込まれ、又はＲＡＭ１１又は１２から読み出される。パケットのサイズがＲＡＭ１１又は１２のデータバス幅より大きい場合には、当該パケットは、ｎサイクル（ｎ＝１，２，…）をかけてＲＡＭ１１又は１２に書き込まれ、又はＲＡＭ１１又は１２から読み出される。例えば、ＲＡＭ１１又は１２のデータバス幅が８バイト（byte）であり、且つパケットのサイズが４０バイトである場合には、５サイクルでパケット全体の書き込み／読み出しが行われる。また、本実施の形態で使用されるパケットは、パケットの先頭データにパケット長を示す情報が付加されている。
【００３６】
ライトポインタ１３は、パケット格納バッファ１０内のパケットの書込位置を保持する。リードポインタ１４は、パケット格納バッファ１０内のパケットの読出位置を保持する。パケット書込制御回路１５は、ＲＡＭ１１又は１２へのパケットの書き込みを制御し、パケット書込信号（ライトイネーブル）を出力する。パケット読出制御回路１６は、ＲＡＭ１１又は１２からのパケットの読み出しを制御する。バンクスイッチ１７は、フリップフロップ回路１７１及びインバータ１７２を備え、パケットの書き込みが可能であるＲＡＭ、つまりバンクを示す信号（以下W_Bank信号）を出力する。W_Bank信号が「０」である場合、パケットの書き込みが可能であるバンクはバンク０、即ちＲＡＭ１１となる。一方、W_Bank信号が「１」である場合、パケットの書き込みが可能であるバンクはバンク１、即ちＲＡＭ１２となる。
【００３７】
パケット長保持FIFOキュー１８は、パケット入力端子２から入力したパケットのパケット長を示す値を保持する。パケット書込開始バンク保持FIFOキュー１９は、パケット毎に、パケットの先頭データが書き込まれたバンクの情報、即ちパケットの先頭データが書き込まれた時点のW_Bank信号の値を保持する。
【００３８】
また、FIFOバッファ１は、ＡＮＤ回路２０，２３、検出回路２１，２４，２６、及びセレクタ２２，２５，２７を備えている。検出回路２１，２６は、W_Bank信号が「０」であるときに、即ちW_Bank信号が「０」であることを検出すると、「１」を出力する。検出回路２１，２６は、W_Bank信号が「１」であるときに、即ちW_Bank信号が「１」であることを検出すると、「０」を出力する。検出回路２４は、W_Bank信号が「１」であるときに、即ちW_Bank信号が「１」であることを検出すると、「１」を出力する。検出回路２４は、W_Bank信号が「０」であるときに、即ちW_Bank信号が「０」であることを検出すると、「０」を出力する。セレクタ２２は、検出回路２１の出力に応じて、出力すべき情報を選択する。具体的には、セレクタ２２は、検出回路２１が「１」を出力するときには、ライトポインタ１３からのアドレスＷＰを選択する。セレクタ２２は、検出回路２１が「０」を出力するときには、リードポインタ１４からのアドレスＲＰを選択する。同様に、セレクタ２５は、検出回路２４の出力に応じて、出力すべき情報を選択する。具体的には、セレクタ２５は、検出回路２４が「１」を出力するときには、ライトポインタ１３からのアドレスＷＰを選択する。セレクタ２５は、検出回路２４が「０」を出力するときには、リードポインタ１４からのアドレスＲＰを選択する。セレクタ２７は、検出回路２６の出力に応じて、パケットの読み出し先を選択する。具体的には、セレクタ２７は、検出回路２６が「０」を出力するときには、パケットの読み出し先としてバンク１、つまりＲＡＭ１２を選択する。セレクタ２７は、検出回路２６が「１」を出力するときには、パケットの読み出し先としてバンク０、つまりＲＡＭ１１を選択する。
【００３９】
ここで、W_Bank信号が「０」の場合のＡＮＤ回路２０，２３、検出回路２１，２４，２６、及びセレクタ２２，２５，２７の動作について説明する。
【００４０】
バンクスイッチ１７からのW_Bank信号「０」及びパケット書込制御回路１５からの書込可能信号（ライトイネーブル）がＡＮＤ回路２０に入力した場合、ライトイネーブル信号がＲＡＭ１１のＷＥポートに入力する。このとき、セレクタ２２は、ライトポインタ１３からのアドレスＷＰをＲＡＭ１１のAdrs（アドレス）ポートに入力する。ライトポインタ１３が出力したＲＡＭ１１のアドレスに、ＲＡＭ１１のDT_inポートを介して入力したパケット（実データ）が書き込まれる。一方、バンクスイッチ１７からのW_Bank信号が「０」のときに、検出回路２４は、セレクタ２５に「０」を出力する。これにより、セレクタ２５は、リードポインタ１４からのアドレスＲＰをＲＡＭ１２のAdrsポートに入力する。リードポインタ１４が出力したＲＡＭ１２のアドレスＲＰに書き込まれたパケットが、ＲＡＭ１２のDT_outポート及びセレクタ２７を介して出力回路２８に出力される。バンクスイッチ１７からW_Bank信号「０」が検出回路２６に出力されている場合は、検出回路２６はセレクタ２７に「１」を出力する。セレクタ２７は、検出回路２６からの出力「１」に応じて、バンク０、つまりＲＡＭ１１からパケットを読み出す。
【００４１】
次に、W_Bank信号が「１」の場合のＡＮＤ回路２０，２３、検出回路２１，２４，２６、及びセレクタ２２，２５，２７の動作について説明する。
【００４２】
バンクスイッチ１７からのW_Bank信号「１」及びパケット書込制御回路１５からの書込可能信号（ライトイネーブル）がＡＮＤ回路２３に入力した場合、ライトイネーブル信号がＲＡＭ１２のＷＥポートに入力する。このとき、セレクタ２５は、ライトポインタ１３からのアドレスＷＰをＲＡＭ１２のAdrs（アドレス）ポートに入力する。ライトポインタ１３が出力したＲＡＭ１２のアドレスに、ＲＡＭ１２のDT_inポートを介して入力したパケット（実データ）が書き込まれる。一方、バンクスイッチ１７からのW_Bank信号が「１」のときに、検出回路２１は、セレクタ２２に「０」を出力する。これにより、セレクタ２２は、リードポインタ１４からのアドレスＲＰをＲＡＭ１１のAdrsポートに入力する。リードポインタ１４が出力したＲＡＭ１１のアドレスＲＰに書き込まれたパケットが、ＲＡＭ１１のDT_outポート及びセレクタ２７を介して出力回路２８に出力される。バンクスイッチ１７からW_Bank信号「１」が検出回路２６に出力されている場合は、検出回路２６はセレクタ２７に「０」を出力する。セレクタ２７は、検出回路２６からの出力「０」に応じて、バンク１、つまりＲＡＭ１２からパケットを読み出す。
【００４３】
パケットは先頭から末尾まで途切れることなく、パケット入力端子２から入力するものとする。パケットの先頭データがパケット入力端子２から入力すると、パケット書込制御回路１５は、パケットの先頭データが到着したことを示すトリガとパケット長の値とを取得する。パケット書込制御回路１５は、トリガを取得すると、キュー書込信号（具体的には「１」）をパケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９に出力する。
【００４４】
キュー書込信号は、パケット長保持FIFOキュー１８がパケットの先頭データに含まれるパケット長を示す値を保持する指示、及びパケット書込開始バンク保持FIFOキュー１９がパケットの先頭データが入力した時点のW_Bank信号の値を保持する指示を示す信号である。キュー書込信号が「１」であるときには、パケット長保持FIFOキュー１８はパケットの先頭データに含まれるパケット長を示す値を保持する。また、キュー書込信号が「１」であるときには、パケット書込開始バンク保持FIFOキュー１９はパケットの先頭データが入力した時点のW_Bank信号の値を保持する。キュー書込信号が「０」であるときには、パケット長保持FIFOキュー１８はパケットの先頭データに含まれるパケット長を示す値を保持しない。また、キュー書込信号が「０」であるときには、パケット書込開始バンク保持FIFOキュー１９はパケットの先頭データが入力した時点のW_Bank信号の値を保持しない。
【００４５】
パケット読出制御回路１６はパケットの読み出し制御を開始するときに、キュー読出信号（具体的には「１」）をパケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９に出力する。キュー読出信号は、パケット長保持FIFOキュー１８が保持されたパケット長を示す値を読み出す指示、及びパケット書込開始バンク保持FIFOキュー１９が、パケットの先頭データが入力した時点のW_Bank信号の値を１パケット分だけ読み出す指示を示す信号である。キュー読出信号が「１」であるときには、パケット長保持FIFOキュー１８は、保持されたパケット長を示す値を読み出す。また、キュー読出信号が「１」であるときには、パケット書込開始バンク保持FIFOキュー１９は、パケットの先頭データが入力した時点のW_Bank信号の値を１パケット分だけ読み出す。一方、キュー読出信号が「０」であるときには、パケット長保持FIFOキュー１８は、保持されたパケット長を示す値を読み出さない。また、キュー読出信号が「０」であるときには、パケット書込開始バンク保持FIFOキュー１９は、パケットの先頭データが入力した時点のW_Bank信号の値を読み出さない。
【００４６】
また、パケット書込制御回路１５は、カウンタ１５Ａを備えている。カウンタ１５Ａは、パケットの書き込みが行われていない場合には、「０」を示す。カウンタ１５Ａは、パケットの書き込みが開始した場合に、「１」からサイクル毎に１インクリメントする。カウンタ１５Ａのカウント値がパケット入力端子２から入力したパケットのパケット長の値と一致した場合に、パケット長分のパケットの書き込みが完了する。パケットの書き込みが完了した場合に、カウンタ１５Ａのカウント値は「０」に戻る。但し、カウンタ１５Ａのカウント値がパケット入力端子２から入力したパケットのパケット長の値と一致したときに、パケット書込制御回路１５が次のパケットのパケット長の値を入力した場合には、パケット書込制御回路１５はカウンタ１５Ａのカウント値を「０」に戻さず、カウンタ１５Ａに「１」をセットする。こうすることで、パケットとパケットの間に隙間無く到来した場合でも、連続で書き込む事が可能である。パケット書込制御回路１５は、カウンタ１５Ａのカウント値が０より大きく且つ偶数である場合に、ライトポインタ１３を１インクリメントする。これにより、２バンク分のパケットの書き込みが行われると、ライトポインタ１３が１インクリメントする、即ち、ライトポインタ１３が示すバンクのアドレスが１つ増加する。さらに、パケット書込制御回路１５は、カウンタ１５Ａのカウント値がパケット長保持FIFOキュー１８に書き込まれたパケット長の値と一致した場合も、ライトポインタ１３を１インクリメントする。これにより、パケット長が奇数サイクル長である場合に、一方のバンクへのパケットの書き込みだけが行われて、ライトポインタ１３が１インクリメントする。
【００４７】
また、パケット読出制御回路１６は、カウンタ１６Ａを備えている。カウンタ１６Ａは、パケットの読み出しが行われていない場合には、「０」を示す。カウンタ１６Ａは、パケットの読み出しが確定した場合に、「１」からサイクル毎に１インクリメントする。カウンタ１６Ａのカウント値がパケット長保持FIFOキュー１８から読み出されたパケット長の値と一致した場合に、パケット長分のパケットの読み出しが完了する。パケットの読み出しが完了した場合に、カウンタ１６Ａのカウント値は「０」に戻る。但し、カウンタ１６Ａのカウント値がパケット長保持FIFOキュー１８から読み出されたパケット長の値と一致したときに、読み出し対象の次のパケットがある場合には、パケット読出制御回路１６はカウンタ１６Ａのカウント値を「０」に戻さず、カウンタ１６Ａに「１」をセットする。こうすることで、パケットとパケットの間に間隔が生じることが無く、連続で複数のパケットの読み出しが実行される。
【００４８】
パケット読出制御回路１６は、カウンタ１６Ａのカウント値が０より大きく且つ偶数である場合に、リードポインタ１４を１インクリメントする。これにより、２バンク分のパケットの読み出しが行われると、リードポインタ１４が１インクリメントする、即ち、リードポインタ１４が示すバンクのアドレスが１つ増加する。
【００４９】
さらに、パケット読出制御回路１６は、カウンタ１６Ａのカウント値がパケット長保持FIFOキュー１８から読み出されたパケット長の値と一致した場合も、リードポインタ１４を１インクリメントする。これにより、パケット長が奇数サイクル長である場合に、一方のバンクからのパケットの読み出しだけが行われて、リードポインタ１４が１インクリメントする。
【００５０】
パケット読出制御回路１６は、読み出しValid信号を図１の出力回路２８に出力する。読み出しValid信号は、パケットの読み出しが有効な期間を「１」で示し、パケットの読み出しが有効でない期間を「０」で示す。パケット読出制御回路１６は、カウンタ１６Ａのカウント値が０より大きい場合は、読み出しValid信号を１にする。これにより、パケットの読み出しが有効な期間、いずれかのバンクから読み出されたパケットが出力回路２８を介してパケット出力端子３に到達する。パケットの読み出しが行われていない場合には、カウンタ１６Ａのカウント値が０である。この場合、パケット読出制御回路１６は読み出しValid信号を０にする。
【００５１】
図１のセレクタ２７及びパケット出力端子２の間には、出力回路２８が設けられている。出力回路２８は、セレクタ２７からの出力及びパケット読出制御回路１６からの読み出しValid信号を入力する。出力回路２８は、パケット読出制御回路１６からの読み出しValid信号が０であるとき、即ちパケットの読み出しが行われていないときは、０を出力する。こうすることで、パケットの読み出しが行われていないときに、ＲＡＭ１１又は１２から出てくる不当な値を出力しないようにしている。また、出力回路２８は、パケット読出制御回路１６からの読み出しValid信号が０でないとき、即ちパケットの読み出しが行われているときは、いずれかのバンクから読み出されたパケットの実データを出力する。
【００５２】
図１では、パケット送出先装置６０がFIFOバッファ１の外部に設けられている。パケット送出先装置６０は、例えば不図示のメモリやＣＰＵ（Central Processing Unit）などである。パケット送出先装置６０は、FIFOバッファ１のパケット読出制御回路１６及びパケット出力端子３に接続されている。パケット送出先装置６０は、パケットの送出を許可しているか否かを示す送出先busy信号をパケット読出制御回路１６に出力する。本実施の形態では、送出先busy信号が「０」の場合には、パケット送出先装置６０はパケットの送出を許可しており、送出先busy信号が「１」の場合には、パケット送出先装置６０はパケットの送出を許可していない。また、パケット送出先装置６０は、パケット格納バッファ１０に格納されたパケットを受信する。
【００５３】
図２は、図１のパケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９の詳細な構成図である。いずれのキューもFIFO構造となっている。
【００５４】
パケット長保持FIFOキュー１８は、パケット長保持レジスタアレイ４１（第２記憶素子）を備えている。パケット書込開始バンク保持FIFOキュー１９は、パケット書込開始バンク保持レジスタアレイ４２（第１記憶素子）を備えている。パケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９は、キューライト制御部４３、キューライトポインタ４４及びキューリード制御部４５を備えている。さらに、パケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９は、キューリードポインタ４６、パケット検出部４７及びセレクタ４８を備えている。キューライト制御部４３及びキューリード制御部４５は、パケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２の両方に対して同じ制御を行っている。
【００５５】
パケット長保持レジスタアレイ４１は、パケット格納バッファ１０に格納されるパケットのパケット長の値を保持する。パケット書込開始バンク保持レジスタアレイ４２は、パケットの先頭データが入力した時点のW_Bank信号の値、即ち、パケットの書き込みが開始されたバンクの位置を示す情報を保持する。パケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２は、１サイクル内で書き込みと現在の読み出し対象である値の読み出しが行える記憶素子で構成されている。この記憶素子には、例えば、フリップフロップを用いることが考えられている。この構成によれば、パケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２は、１サイクル内でデータの書き込み及び読み出し可能なFIFO構造となる。また、図２において、FIFO構造をとるパケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２の段数は、Ｌ０〜Ｌｎ（ｎ＝０，１，２，…）で示されている。さらに、パケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２の段数は、FIFOバッファ１が受信可能な最大パケット数と同一である。
【００５６】
また、パケット長保持レジスタアレイ４１は、入力する可能性のあるパケットの長さを表現するのに必要なビット幅で構成されている。パケット書込制御回路１５から出力される、パケットの先頭データに含まれるパケット長を示す値を保持するためのキュー書込信号が「１」のサイクルのときには、パケット長保持レジスタアレイ４１は、キューライト制御部４３からの書込制御に従って、パケット格納バッファ１０に格納されるパケットのパケット長の値を、パケット長信号としてパケット毎に記録する。また、パケット長保持レジスタアレイ４１は、パケット長信号としてパケット長保持レジスタアレイ４１の先頭に記録されたパケット長の値を出力する。
【００５７】
パケット書込開始バンク保持レジスタアレイ４２は、バンクの情報を表現するのに必要なビット幅で構成されている。パケット書込制御回路１５から出力される、パケットの先頭データが入力した時点のW_Bank信号の値を保持するためのキュー書込信号が「１」のサイクルのときには、パケット書込開始バンク保持レジスタアレイ４２は、キューライト制御部４３からの書込制御に従って、W_Bank信号の値を書込開始バンク位置信号として記録する。また、パケット書込開始バンク保持レジスタアレイ４２は、「書込開始バンク位置信号」としてパケット書込開始バンク保持レジスタアレイ４２の先頭に記録されたBank信号の値を出力する。
【００５８】
キューライト制御部４３は、キューライトポインタ４４に従って、パケット長保持レジスタアレイ４１へのパケット長の値の書込制御を行うと共に、パケット書込開始バンク保持レジスタアレイ４２へのW_Bank信号の値の書込制御を行う。キューライトポインタ４４は、パケット長の値及びW_Bank信号の値の書込位置を決定する。１パケット分のパケット長の値及びW_Bank信号の値がパケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２へそれぞれ書き込まれると、キューライトポインタ４４は１インクリメントする。
【００５９】
キューリード制御部４５は、パケット読出制御回路１６から出力されるキュー読出信号が「１」のサイクルのときに、キューリードポインタ４６に従って、パケット長保持レジスタアレイ４１からパケット長の値の読出制御を行う。同時に、キューリード制御部４５は、パケット書込開始バンク保持レジスタアレイ４２からW_Bank信号の値の読出制御を行う。キューリードポインタ４６は、パケット長の値及びW_Bank信号の値の読出位置を決定する。１パケット分のパケット長の値及びW_Bank信号の値がパケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２からそれぞれ読み出されると、キューリードポインタ４６は１インクリメントする。
【００６０】
パケット検出部４７は、キューライトポインタ４４が保持する値と、キューリードポインタ４６が保持する値とを比較する。パケット検出部４７は、その比較結果に応じて、パケット長保持レジスタアレイ４１内のパケット長の値及びパケット書込開始バンク保持レジスタアレイ４２内のW_Bank信号の値の有無を示すパケット有り信号をパケット読出制御回路１６に出力する。書込回数が読出回数よりも多い場合、即ち、実際にパケット格納バッファ１０内にパケットがある場合には、パケット有り信号は「１」になる。一方、書込回数が読出回数と同じ場合、即ち、パケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２が空の場合には、パケット有り信号は「０」になる。パケット有り信号は、パケット読出制御回路１６がパケットの読み出しを開始する前提条件の１つとして利用される。具体的には、パケット有り信号が「１」であり、且つ後述する所定の条件を満たすときに、パケット読出制御回路１６はパケットの読み出し制御を開始する。パケット有り信号が「０」である場合には、パケットの読み出しを開始する前提条件を満たさないため、パケット読出制御回路１６はパケットの読み出し制御を行わない。
【００６１】
セレクタ４８は、キューリードポインタ４６により決定されたパケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２の読出位置に従って、パケット長保持レジスタアレイ４１内のパケット長の値及びパケット書込開始バンク保持レジスタアレイ４２内のW_Bank信号の値を選択する。そして、セレクタ４８は、選択されたパケット長の値をパケット長信号としてパケット読出制御回路１６に出力すると共に、選択されたW_Bank信号の値を書込み開始バンク位置信号としてパケット読出制御回路１６に出力する。例えば、キューリードポインタ４６の値が「２」である場合には、セレクタ４８は、パケット長保持レジスタアレイ４１のＬ２内のパケット長の値及びパケット書込開始バンク保持レジスタアレイ４２のＬ２内のW_Bank信号の値を選択し、パケット読出制御回路１６に出力する。
【００６２】
図３は、パケットの書込動作を示すフローチャートである。本フローチャートでは、パケットの実データをＲＡＭ１１，１２のどちらかに書き込む第１の処理と、パケット長の値及びW_Bank信号の値をそれぞれパケット長保持レジスタアレイ４１及びパケット書込開始バンク保持レジスタアレイ４２に記録する第２の処理とを分けて説明する。
【００６３】
前提として、バンクスイッチ１７は、W_Bank信号（具体的には、０又は１）を検出回路２１，２４，２６及びパケット書込開始バンク保持FIFOキュー１９に出力しているものとする。
【００６４】
（第１の処理）
パケットがパケット入力端子２から入力すると、入力したパケットのパケット長の値がパケット長保持FIFOキュー１８及びパケット書込制御回路１５に入力され、パケットの実データはＲＡＭ１１，１２に出力される（ステップＳ１）。
【００６５】
パケット書込制御回路１５は、パケット長の値の入力に基づいて、キュー書込信号「１」をキューライト制御部４３に出力し、ライトイネーブル信号をＡＮＤ回路２０，２３に出力する（ステップＳ２）。パケット書込制御回路１５のカウンタ１５Ａは、パケット長の値に応じて、サイクル毎に１インクリメントする（ステップＳ３）。
【００６６】
パケットの実データは、ライトポインタ１３によって指定されるＲＡＭのアドレスと、W_Bank信号の値で示される書込可能なＲＡＭのバンクとに従って、ＲＡＭ１１，１２のどちらかに書き込まれる（ステップＳ４）。
【００６７】
パケット書込制御回路１５は、カウンタ１５Ａのカウント値が０より大きく且つ偶数である場合、即ち、２バンク分のパケットの実データの書き込みが行われる度に、ライトポインタ１３の値を１インクリメントする（ステップＳ５）。ステップＳ５の工程は、入力したパケットのパケット長に応じて、必要なサイクル分繰り返される。ライトポインタ１３の値は、ＲＡＭ１１又は１２の書き込みアドレスとして使用される。
【００６８】
ここで、６サイクル長の１つのパケットがＲＡＭ１１及び１２に書き込まれる例を図４（Ａ）及び（Ｂ）を用いて説明する。図４（Ａ）は、W_Bank信号が０のときに、６サイクル長のパケットがパケット入力端子２から入力し、ＲＡＭ１１及び１２に書き込まれる例を示す。図４（Ｂ）は、W_Bank信号が１のときに、６サイクル長のパケットがパケット入力端子２から入力し、ＲＡＭ１１及び１２に書き込まれる例を示す。
【００６９】
図４（Ａ）では、W_Bank信号が０のときに、６サイクル長のパケットがパケット入力端子２から入力しているため、パケットの先頭データが、ＲＡＭ１１（バンク０）のアドレスAdr. ０に書き込まれる。このパケットの２サイクル目のデータは、ＲＡＭ１２（バンク１）のアドレスAdr. ０に書き込まれる。この時点で、パケットは２バンク分書き込まれたため、ステップＳ５で示すように、ライトポインタ１３の値は１インクリメントされる。従って、パケットの３サイクル目のデータは、ＲＡＭ１１（バンク０）のアドレスAdr. 1に書き込まれる。同様に、パケットの４サイクル目のデータが、ＲＡＭ１２（バンク１）のアドレスAdr. １に書き込まれた後、ライトポインタ１３の値は１インクリメントされ、パケットの５サイクル目のデータは、ＲＡＭ１１（バンク０）のアドレスAdr. ２に書き込まれる。
【００７０】
図４（Ｂ）では、W_Bank信号が１のときに、６サイクル長のパケットがパケット入力端子２から入力しているため、パケットの先頭データが、ＲＡＭ１２（バンク１）のアドレスAdr. ０に書き込まれる。このパケットの２サイクル目のデータは、ＲＡＭ１１（バンク０）のアドレスAdr. ０に書き込まれる。この時点で、パケットは２バンク分書き込まれたため、ステップＳ５で示すように、ライトポインタ１３の値は１インクリメントされる。従って、パケットの３サイクル目のデータは、ＲＡＭ１２（バンク１）のアドレスAdr. 1に書き込まれる。同様に、パケットの４サイクル目のデータが、ＲＡＭ１１（バンク０）のアドレスAdr. １に書き込まれた後、ライトポインタ１３の値は１インクリメントされ、パケットの５サイクル目のデータは、ＲＡＭ１２（バンク１）のアドレスAdr. ２に書き込まれる。
【００７１】
図３に戻り、ライトポインタ１３の値がＲＡＭ１１，１２のアドレスの最大値に達した場合は、ライトポインタ１３の値は、ＲＡＭ１１，１２の先頭アドレスに戻る（ステップＳ６）。例えば、ＲＡＭ１１，１２のアドレスの最大値が９９である場合に、ライトポインタ１３の値が９９に達すると、ライトポインタ１３の値は０、即ち先頭アドレスに戻る。パケットの長さ分のライトイネーブル信号の生成及びライトポインタ１３のインクリメントタイミングの生成は、パケット書込制御回路１５により実行される。
【００７２】
また、パケット書込制御回路１５は、入力したパケットの末尾データをＲＡＭ１１又は１２に書き込むタイミングで、ライトポインタ１３を１インクリメントする（ステップＳ７）。ライトポインタ１３で１インクリメントされたアドレスが次のパケットの書込開始アドレスになる。例えば、図４（Ｃ）では、奇数サイクル長（例えば３サイクル）のパケットがＲＡＭ１１又は１２に書き込まれる。図４（Ｃ）の場合、パケットの末尾データ（Adr. 1の（３）のデータ及びAdr. ５の（９）のデータ）をＲＡＭ１１（バンク０）に書き込むタイミングでは、パケット書込制御回路１５は、他方のＲＡＭ１２（バンク１）に何も書き込まずにライトポインタ１３を１インクリメントする。パケットが書き込まれなかったＲＡＭ１２（バンク１）のアドレスAdr. 1及びAdr. ５は、空きスペースになる。同様に、パケットの末尾データ（Adr. ３の（６）のデータ）をＲＡＭ１２（バンク１）に書き込むタイミングでは、パケット書込制御回路１５は、他方のＲＡＭ１１（バンク０）に何も書き込まずにライトポインタ１３を１インクリメントする。パケットが書き込まれなかったＲＡＭ１１（バンク０）のアドレスAdr. ３は、空きスペースになる。尚、図４（Ｃ）は、３つの３サイクル長のパケットがＲＡＭ１１及び１２に書き込まれる例を示す。
【００７３】
（第２の処理）
キューライト制御部４３は、キューライトポインタ４４により決定されたパケット長保持レジスタアレイ４１の位置に、パケット長の値を書き込む。同時に、キューライト制御部４３は、キューライトポインタ４４により決定されたパケット書込開始バンク保持レジスタアレイ４２の位置に、パケットの先頭データが入力した時点のW_Bank信号の値を書き込む（ステップＳ８）。パケット長の値及びW_Bank信号の値の書き込みは、パケットの先頭データがパケット入力端子２から入力したタイミングで行われる。その後、キューライト制御部４３は、キューライトポインタ４４の値を１インクリメントする（ステップＳ９）。尚、ステップＳ８及びＳ９の工程は、１つのパケットがパケット入力端子２から入力する度に実行される。
【００７４】
図５は、パケットの読出動作を示すフローチャートである。
【００７５】
まず、パケット読出制御回路１６は、パケット書込開始バンク保持レジスタアレイ４２から読み出し対象のパケットの書込開始バンク位置信号の値を、パケット長保持レジスタアレイ４１から読み出し対象のパケットのパケット長を取得する（ステップＳ１１）。尚、キューリード制御部４５が、読み出し対象のパケットの書込開始バンク位置信号の値及びパケット長の値を読み出す制御を実行する。読み出し位置は、キューリードポインタ４６で決定される。セレクタ４８が１パケット分の読み出し対象のパケットの書込開始バンク位置信号の値及びパケット長の値を読み出すと、キューリード制御部４５はキューリードポインタ４６を１インクリメントする。
【００７６】
次に、パケット読出制御回路１６は、パケット送出先装置６０から「送出先busy信号」を、パケット検出部４７から「パケット有り信号」を受信する（ステップＳ１２）。
【００７７】
パケット読出制御回路１６は、送出先busy信号が「０」であり（即ち、パケット送出先装置６０がパケットの送出を許可している）、且つパケット有り信号が「１」のときに、読み出し対象のパケットの書込開始バンク位置信号の値がW_Bank信号の値と不一致であるか否かを判別する（ステップＳ１３）。書込開始バンク位置信号の値がW_Bank信号の値と不一致である場合は、W_Bank信号で示されるＲＡＭ（バンク）からのパケットの実データの読み出しが可能である。
【００７８】
ステップＳ１３でＮＯの場合、つまり読み出し対象のパケットの書込開始バンク位置信号の値がW_Bank信号の値と一致する場合、読み出し対象のパケットが格納されているバンクはパケットの読み出しができない状態なので、パケット読出制御回路１６は、読み出しValid信号「０」を出力回路２８に出力する（ステップＳ１４）。これにより、パケットの読み出しが有効な期間でないことが出力回路２８に通知され、読み出し対象のパケットが格納されているバンクからのパケットの読み出しは実行されず、ステップＳ１３に戻る。
【００７９】
ステップＳ１３でＹＥＳの場合、つまり読み出し対象のパケットの書込開始バンク位置信号の値がW_Bank信号の値と不一致である場合、読み出し対象のパケットが格納されているバンクはパケットの読み出しができる状態なので、パケット読出制御回路１６は、読み出しValid信号「１」を出力回路２８に出力する（ステップＳ１５）。これにより、パケットの読み出しが有効な期間であることが出力回路２８に通知される。ステップＳ１３の判定が行われたサイクルの次のサイクルのW_Bank信号の値が検出回路２６に入力すると、セレクタ２７は、検出回路２６からの出力値に基づいて、バンク０（ＲＡＭ１１）又はバンク１（ＲＡＭ１２）から読み出し対象のパケットを読み出し、出力回路２８に出力する（ステップＳ１６）。出力回路２８は、読み出し対象のパケットを入力し、パケット出力端子３を介してパケット送出先装置６０へ出力する（ステップＳ１７）。
【００８０】
また、ステップＳ１３でＹＥＳの場合、カウンタ１６Ａは、パケット長の値に応じて、サイクル毎に１インクリメントする（ステップＳ１８）。パケット読出制御回路１６は、カウンタ１６Ａのカウント値が０より大きく且つ偶数である場合、即ち２バンク分のパケットの読み出しが行われた場合に、リードポインタ１４を１インクリメントする（ステップＳ１９）。１インクリメントされたリードポインタ１４の値は、読み出し対象のパケットのアドレスを示し、読み出し対象のパケットを格納するバンクに出力される。ステップＳ１９の工程は、読み出し対象のパケットのパケット長の値に応じて、必要なサイクル分繰り返される。リードポインタ１４の値がＲＡＭ１１，１２のアドレスの最大値に達した場合は、リードポインタ１４の値は、ＲＡＭ１１，１２の先頭アドレスに戻る（ステップＳ２０）。例えば、ＲＡＭ１１，１２のアドレスの最大値が９９である場合に、リードポインタ１４の値が９９に達すると、リードポインタ１４の値は０、即ち先頭アドレスに戻る。
【００８１】
また、パケット読出制御回路１６は、カウンタ１６Ａのカウント値がパケット長保持FIFOキュー１８から読み出されたパケット長の値と一致した場合、即ち、読み出し対象のパケットの末尾データをＲＡＭ１１又は１２から読み出すタイミングで、リードポインタ１４を１インクリメントする（ステップＳ２１）。これにより、パケット長が奇数サイクル長である場合に、一方のバンクからのパケットの読み出しだけが行われて、リードポインタ１４が１インクリメントする。つまり、書き込み時に生じたいずれかのバンクの空きスペース部分が読み出されることはない。
【００８２】
ステップＳ１１〜２１の工程で、１パケット分の読み出し対象のパケットの読み出しが完了すると、次の読み出し対象のパケットの読み出しを実行するために、ステップＳ１１〜２１の工程が繰り返される。
【００８３】
上述した図３のパケットの書込動作及び図５のパケットの読出動作が繰り返し実行されることにより、２つのＲＡＭを利用したFIFOバッファの機能が実現される。
【００８４】
図６は、２つの３サイクル長のパケットが連続して入力した場合のパケット書き込み動作及びパケット読み出し動作を示すタイミングチャートである。尚、ＲＡＭ１１及び１２では、パケット書込制御回路１５からの書込可能信号「０」及びＲＡＭ１１又は１２のAdrs（アドレス）を確定したサイクルの次のサイクルで、ＲＡＭ１１又は１２内の確定したアドレスのデータがDT_outポートから出力される。
【００８５】
まず、パケット書き込み動作について説明する。図６の最上段の０〜１８は、サイクル番号を示す。図６では、３サイクル長の２つのパケットＡ１〜Ａ３，Ｂ１〜Ｂ３がパケット入力端子２から入力する。パケットＡ１〜Ａ３の先頭データＡ１がパケット入力端子２から入力した第１サイクルで、パケット書込制御回路１５は、キュー書込信号「１」をパケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９に出力する（Ｐ１）。第１サイクルでは、W_Bank信号が「０」なので、パケット書込開始バンク保持レジスタアレイ４２のＬ０は、第２サイクルで「０」を保持する（Ｐ２）。また、キューライト制御部４３は、キュー書込信号「１」を入力した次のタイミング、即ち第２サイクルでキューライトポインタ４４を１インクリメントする（Ｐ３）。
【００８６】
第１サイクルでは、W_Bank信号が「０」且つライトポインタ１３のアドレスＷＰが「０」なので、先頭データＡ１は、第２サイクルで、バンク０のアドレス「０」に書き込まれる（Ｐ４）。尚、図６のBank０ DT_in又はBank１ DT_inでは、実際に書き込まれたデータに下線が付されている。データＡ２がパケット入力端子２から入力した第２サイクルでは、W_Bank信号が「１」且つライトポインタ１３のアドレスＷＰが「０」なので、データＡ２は、第３サイクルで、バンク１のアドレス「０」に書き込まれる（Ｐ５）。パケット書込制御回路１５は、第２サイクルで２バンク分のデータの書き込み予定が完了しているので、第３サイクルでライトポインタ１３を１インクリメントしている。末尾データＡ３がパケット入力端子２から入力した第３サイクルでは、W_Bank信号が「０」且つライトポインタ１３のアドレスＷＰが「１」なので、末尾データＡ３は、第４サイクルで、バンク０のアドレス「１」に書き込まれる。
【００８７】
パケット書込制御回路１５は、末尾データＡ３が入力したサイクルの次の第４サイクルで、ライトポインタ１３を１インクリメントする（Ｐ６）。図４（Ｃ）で説明したように、パケットの末尾データを一方のバンクに書き込む場合に、パケット書込制御回路１５は、他方のバンクに何も書き込まずにライトポインタ１３を１インクリメントするからである。
【００８８】
次いで、パケットＢ１〜Ｂ３の先頭データＢ１がパケット入力端子２から入力した第４サイクルで、パケット書込制御回路１５は、キュー書込信号「１」をパケット長保持FIFOキュー１８及びパケット書込開始バンク保持FIFOキュー１９に出力する（Ｐ７）。先頭データＢ１がパケット入力端子２から入力した第４サイクルでは、W_Bank信号が「１」なので、パケット書込開始バンク保持レジスタアレイ４２のＬ１は、第５サイクルで、「１」を保持する（Ｐ８）。また、キューライト制御部４３は、第５サイクルで、キューライトポインタ４４を１インクリメントする（Ｐ９）。
【００８９】
また、先頭データＢ１がパケット入力端子２から入力した第４サイクルでは、W_Bank信号が「１」且つライトポインタ１３のアドレスＷＰが「２」なので、先頭データＢ１は、第５サイクルで、バンク１のアドレス「２」に書き込まれる（Ｐ１０）。データＢ２がパケット入力端子２から入力した第５サイクルでは、W_Bank信号が「０」且つライトポインタ１３のアドレスＷＰが「２」なので、データＢ２は、第６サイクルで、バンク０のアドレス「２」に書き込まれる（Ｐ１１）。パケット書込制御回路１５は、第５サイクルで２バンク分のデータの書き込み予定が完了しているので、第６サイクルでライトポインタ１３を１インクリメントしている。末尾データＢ３がパケット入力端子２から入力した第６サイクルでは、W_Bank信号が「１」且つライトポインタ１３のアドレスＷＰが「３」なので、末尾データＢ３は、第７サイクルで、バンク１のアドレス「３」に書き込まれる。パケット書込制御回路１５は、第７サイクルで、ライトポインタ１３を１インクリメントする（Ｐ１２）。
【００９０】
次に、パケット読み出し動作を説明する。図６では、パケット有り信号は、第２サイクルから第１１サイクルまで「１」である。また、送出先busy信号は、第０サイクルから第６サイクルまで「１」とする。
【００９１】
キューリードポインタ４６が「０」の場合、セレクタ４８は、パケット書込開始バンク保持レジスタアレイのＬ０に格納されている「０」を読み出し、書込み開始バンク位置信号として、パケット読出制御回路１６に出力する（Ｐ１３）。
【００９２】
第８サイクルで、送出先busy信号が「０」且つパケット有り信号が「１」になり、さらに、書込開始バンク位置信号の値「０」がW_Bank信号の値「１」と不一致になる。また、第８サイクルでは、W_Bank信号の値が「１」であるため、パケットの読み出し可能なバンクはバンク０である。リードポインタ１４のアドレスRPが「０」であるので、バンクのアドレス「０」からパケットの読み出しが可能である。パケット読出制御回路１６は、バンク０のアドレス「０」から、パケットＡ１〜Ａ３の先頭データＡ１を読み出す制御を開始する（Ｐ１４）。ここで、セレクタ２７とパケット読出制御回路１６からの読み出しValid信号は、１サイクル遅れて出力される先頭データＡ１に合わせて制御される。つまり、第８サイクルで、パケットＡ１〜Ａ３の先頭データＡ１の読み出しが開始され、第９サイクルで、先頭データＡ１は出力される。また、第８サイクルで、パケット読出制御回路１６がキュー読出信号「１」をキューリード制御回路４５に出力する（Ｐ１５）。キューリード制御回路４５は、第９サイクルで、キューリードポインタ４６を１インクリメントする。
【００９３】
第９サイクルで、キューリードポインタ４６が「１」になるので、セレクタ４８は、パケット書込開始バンク保持レジスタアレイのＬ１に格納されている「１」を読み出し、書込み開始バンク位置信号として、パケット読出制御回路１６に出力する（Ｐ１６）。また、第９サイクルでは、既にアドレス「０」から先頭データＡ１を読み出すことが確定しており、W_Bank信号の値が「０」なので、先頭データＡ１はバンク０のアドレス「０」から読み出される（Ｐ１７）。第１０サイクルでは、W_Bank信号の値が「１」なので、次のデータＡ２はバンク１のアドレス「０」から読み出される（Ｐ１８）。このとき、パケット読出制御回路１６は、２バンク分のデータの読み出し予定が完了しているので、リードポインタ１４の値を１インクリメントしている。第１１サイクルで、末尾のデータＡ３はバンク０のアドレス「１」から読み出される。
【００９４】
第１１サイクルで、送出先busy信号が「０」且つパケット有り信号が「１」になり、さらに、書込開始バンク位置信号の値「１」がW_Bank信号の値「０」と不一致になる。また、第１１サイクルでは、W_Bank信号の値が「０」であるため、パケットの読み出し可能なバンクはバンク１である。リードポインタ１４のアドレスＲＰが「２」であるので、バンクのアドレス「２」からパケットの読み出しが可能である。パケット読出制御回路１６は、バンク１のアドレス「２」から、パケットＢ１〜Ｂ３の先頭データＢ１を読み出す制御を開始する（Ｐ１９）。ここで、セレクタ２７とパケット読出制御回路１６からの読み出しValid信号は、１サイクル遅れて出力される先頭データＢ１に合わせて制御される。つまり、第１１サイクルで、パケットＢ１〜Ｂ３の先頭データＢ１の読み出しが開始され、第１２サイクルで、先頭データＢ１は出力される。また、第１１サイクルで、パケット読出制御回路１６がキュー読出信号「１」をキューリード制御回路４５に出力する（Ｐ２０）。キューリード制御回路４５は、第１２サイクルで、キューリードポインタ４６を１インクリメントする。
【００９５】
第１２サイクルで、キューリードポインタ４６が「２」になるので、セレクタ４８は、パケット書込開始バンク保持レジスタアレイのＬ２に格納されている「ｘ（不定）」を読み出し、書込み開始バンク位置信号として、パケット読出制御回路１６に出力する（Ｐ２１）。また、第１２サイクルでは、既にアドレス「２」から先頭データＢ１を読み出すことが確定しており、W_Bank信号の値が「１」なので、先頭データＢ１はバンク１のアドレス「２」から読み出される（Ｐ２２）。第１３サイクルでは、W_Bank信号の値が「０」なので、次のデータＢ２はバンク０のアドレス「２」から読み出される（Ｐ２３）。このとき、パケット書込制御回路１５は、２バンク分のデータの読み出し予定が完了しているので、リードポインタ１４の値を１インクリメントしている。第１４サイクルで、末尾のデータＢ３はバンク１のアドレス「３」から読み出される。
【００９６】
図７は、２つの４サイクル長のパケットが連続して入力した場合のパケット書き込み動作及びパケット読み出し動作を示すタイミングチャートである。
【００９７】
図６のパケット書き込み動作では、３サイクル長のパケットの末尾データが一方のバンクに書き込まれる場合に、パケット書込制御回路１５が、他方のバンクに何も書き込まずにライトポインタ１３を１インクリメントしている。一方、図７のパケット書き込み動作では、４サイクル長のパケットの末尾データが一方のバンクに書き込まれるときに、末尾データの直前のデータが他方のバンクに既に書き込まれている。よって、図７のパケット書き込み動作は、パケット書込制御回路１５が、他方のバンクに何も書き込まずにライトポインタ１３を１インクリメントすることがない点で、図６のパケット書き込み動作と異なる。
【００９８】
また、図６のパケット読み出し動作では、３サイクル長のパケットの末尾データが一方のバンクから読み出される場合に、パケット読出制御回路１６が、何も書き込まれていない他方のバンクを読み出さないようにリードポインタ１４を１インクリメントしている。一方、図７のパケット書き込み動作では、４サイクル長のパケットの末尾データが一方のバンクから読み出されるときに、末尾データの直前のデータが他方のバンクから既に読み出されている。よって、図７のパケット読み出し動作は、パケット読出制御回路１６が、何も書き込まれていない他方のバンクを読み出さないようにリードポインタ１４を１インクリメントすることがない点で、図６のパケット読み出し動作と異なる。
【００９９】
その他の点については、図７のパケット書き込み動作及びパケット読み出し動作は、図６のパケット書き込み動作及びパケット読み出し動作と同様であるので、その説明は省略する。
【０１００】
以上説明したように、本実施の形態によれば、バンクスイッチ１７はパケットの書き込み可能であるＲＡＭ（バンク）を示すW_Bank信号を出力する。パケット書込制御回路１５は、書き込み対象のパケットの入力時のW_Bank信号が示すメモリに対して、書き込み対象のパケットの書き込み制御を行う。パケット書込開始バンク保持FIFOキュー１９は、パケット書込制御回路１５からのキュー書込信号「１」に応じて、バンクスイッチ１７から出力され、書き込み対象のパケットの先頭データが書き込まれたＲＡＭを示すW_Bank信号を保持する。従って、FIFOバッファ１は、パケット入力端子２から入力したパケットの書き込みタイミングを調整せず、パケット入力端子２から入力したパケットをいずれかのバンクに書き込むので、書き込み遅延時間を削減することができる。
【０１０１】
また、パケット書込開始バンク保持FIFOキュー１９に保持された、書き込み対象のパケットの先頭データが書き込まれたＲＡＭを示すW_Bank信号が、書き込み対象のパケットの読み出し時に利用されるので、ＲＡＭに書き込まれたパケットを正確に読み出すことができる。
【０１０２】
FIFOバッファ１は、ＲＡＭ１１，１２を使用するので、フリップフロップ回路を使用するFIFOバッファと比べて、単位面積あたりの記憶容量を増やすことができる。
【０１０３】
本実施の形態では、パケットとして、データ長の値が付加された可変長のパケットを使用した。しかし、データ長の値が付加されていない固定長のパケットがパケット入力端子２から入力する場合でも、パケット長保持FIFOキュー１８が固定のデータ長を出力するように構成することで、FIFOバッファ１は、データ長の値が付加されていない固定長のパケットを取り扱うことができる。
【０１０４】
また、FIFOバッファ１は２つのバンク、即ち２つのＲＡＭを備えているが、FIFOバッファ１は、２つ以上のバンクを備えていればよい。
【符号の説明】
【０１０５】
１  FIFOバッファ
１１，１２  ＲＡＭ（Random Access Memory）
１３  ライトポインタ
１４  リードポインタ
１５  パケット書込制御回路
１６  パケット読出制御回路
１７  バンクスイッチ
１８  パケット長保持FIFOキュー
１９  パケット書込開始バンク保持FIFOキュー
【図１】
2011058659.tif 000003
【図２】
2011058659.tif 000004
【図３】
2011058659.tif 000005
【図４】
2011058659.tif 000006
【図５】
2011058659.tif 000007
【図６】
2011058659.tif 000008
【図７】
2011058659.tif 000009
【図８】
2011058659.tif 000010
【図９】
2011058659.tif 000011
【国際調査報告】
2011058659.tif 000012
2011058659.tif 000013