(57)【要約】【課題】  ＦＩＦＯバッファの使用効率を高める。【解決手段】  複数種類のデータをそれぞれ前記データの種類ごとに先入れ先出し形式で受け渡し可能なＦＩＦＯ制御回路であって、メモリ部と、前記メモリ部の空き領域を管理する空き領域管理回路と、前記データが格納された前記メモリ部におけるアドレス範囲を記憶するアドレス記憶部と、前記データを受信した場合には、前記空き領域管理回路から指定された前記空き領域に前記データを書き込み、その前記アドレス範囲を前記アドレス記憶部に格納するライトポインタ制御回路と、前記データを送出する場合には、前記データの種類に対応する前記アドレス範囲を先入れ順に前記アドレス記憶部から取り出して、取り出した前記アドレス範囲に格納された前記データを読み出し、前記空き領域管理回路に前記アドレス範囲を前記空き領域とさせるリードポインタ制御回路とを設ける。【選択図】  図１
2005157444.tif 000002
【特許請求の範囲】
【請求項１】
複数種類のデータをそれぞれ前記データの種類ごとに先入れ先出し形式で受け渡し可能なＦＩＦＯ制御回路であって、
複数種類の前記データを一時的に保存するメモリ部と、
前記メモリ部の空き領域を管理する空き領域管理回路と、
前記データが格納された前記メモリ部におけるアドレス範囲を記憶するアドレス記憶部と、
前記データを受信した場合には、前記空き領域管理回路に前記空き領域を問い合わせ、前記空き領域管理回路から指定された前記空き領域に前記データを書き込み、前記データが書き込まれた前記アドレス範囲を前記アドレス記憶部に格納するライトポインタ制御回路と、
前記データを送出する場合には、前記データの種類に対応する前記アドレス範囲を先入れ順に前記アドレス記憶部から取り出して、取り出した前記アドレス範囲に格納された前記データを前記メモリ部から読み出すとともに、取り出した前記アドレス範囲を前記空き領域管理回路に通知して、前記空き領域管理回路に前記アドレス範囲を前記空き領域とさせるリードポインタ制御回路と、
を備えることを特徴とするＦＩＦＯ制御回路。
【請求項２】
前記空き領域管理回路は、前記データを格納する連続した空き領域が存在しない場合は、前記ライトポインタ制御回路に対して、互いに分離配置された複数の前記空き領域を指定し、
前記ライトポインタ制御回路は、前記データを、複数の部分データに分割して、複数の前記空き領域にそれぞれ格納するとともに、複数の前記空き領域の前記アドレス範囲をそれぞれ前記アドレス記憶部に格納し、
前記リードポインタ制御回路は、前記アドレス記憶部に格納された複数の前記アドレス範囲を取得し、複数の前記アドレス範囲に格納された前記部分データをそれぞれ取り出して、前記データとして送出することを特徴とする請求項１に記載のＦＩＦＯ制御回路。
【請求項３】
前記ライトポインタ制御回路は、前記データの格納された先頭アドレス及び最終アドレスを前記アドレス範囲として前記アドレス記憶部に格納することを特徴とする請求項１又は２に記載のＦＩＦＯ制御回路。
【請求項４】
複数の前記メモリ部を備え、
前記データの受信時において、前記空き領域管理回路は、前記ライトポインタ制御回路に対して、対象メモリ部と、前記対象メモリ部における前記空き領域を指定し、
前記ライトポインタ制御回路は、指定された前記対象メモリ部における前記空き領域に前記データを格納するとともに、指定された前記メモリ部を識別する識別子と、前記データが格納された前記アドレス範囲とを、前記識別子付きアドレス範囲として前記アドレス記憶部に格納し、
前記リードポインタ制御回路は、前記アドレス記憶部から前記識別子付きアドレス範囲を取得し、前記識別子付きアドレス範囲に含まれる前記識別子に基づいて前記メモリ部を特定し、特定された前記メモリ部から前記アドレス範囲に格納された前記データを読み出すことを特徴とする請求項１に記載のＦＩＦＯ制御回路。
【請求項５】
複数の前記メモリ部と、複数の前記メモリ部に対応した複数の前記ライトポインタ制御回路及び複数の前記リードポインタ制御回路とを備え、
前記アドレス記憶部は、前記メモリ部を識別する識別子と、前記メモリ部において前記データが格納された前記アドレス範囲とを、識別子付きアドレス範囲として格納するものであり、
前記空き領域管理回路は、複数の前記メモリ部の空き領域を管理し、前記データの受信時には、前記データを書き込むべき前記メモリ部および前記空き領域を特定するものであり、
前記データの受信時には、特定された前記メモリ部に対応した前記ライトポインタ制御回路は、特定された前記メモリ部における前記空き領域に前記データを格納するとともに、前記データの前記識別子付きアドレス範囲を前記アドレス記憶部に格納し、
前記データの送出時には、前記識別子付きアドレス範囲に対応する前記リードポインタ制御回路が、前記識別子付きアドレス範囲に指定された、前記メモリ部の前記アドレス範囲から、前記データを読み出すことを特徴とする請求項１に記載のＦＩＦＯ制御回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、先入れ先出し（ＦＩＦＯ）制御回路に関する。
【背景技術】
【０００２】
高速シリアルバス転送等の技術を用いたデータ転送では、１つのパケットサイズが通常よりも大きくなるため、データ転送の実行速度を上げるためには、いわゆるダブルバッファ構造を採用することが効果的であることがわかっている。ダブルバッファ構造を採用する場合、ＦＩＦＯバッファを大きくする必要があるので、チップサイズが大きくなる上、コストも増大する。
【０００３】
一方、従来において、受信回路や送信回路等のＩＰ（Intellectual Property）コアは、それぞれ独自にＦＩＦＯバッファを備えていた。
【０００４】
図１４は、従来の受信回路（ＩＰコア）３２及び送信回路（ＩＰコア）３３を示すブロック図である。
【０００５】
図１４に示すように、受信回路３２及び送信回路３３は、それぞれＦＩＦＯバッファ（デュアルポートＲＡＭ）３４ａ、３４ｂを独自に有している。
【０００６】
受信回路３２に取り込まれた受信データは、ライトポインタ制御回路３５ａによってＦＩＦＯバッファ３４ａに書き込まれた後、リードポインタ制御回路３６ａによって読み出され、受信先に送出される。
【０００７】
一方、送信回路３３に取り込まれた送信データは、ライトポインタ制御回路３５ｂによってＦＩＦＯバッファ３４ｂに書き込まれた後、リードポインタ制御回路３６ｂによって読み出され、送信先に送出される。
【０００８】
このように、受信回路３２及び送信回路３３はそれぞれ独自にＦＩＦＯバッファを有しているため、一方のＦＩＦＯバッファの使用時に、他方のＦＩＦＯバッファが使用されない場合もある。このため、ＦＩＦＯバッファが無駄になっていることが多かった。
【０００９】
以上に対し、レジスタとソフトウェアとにより複数の用途（受信用、送信用等）を設定可能なＦＩＦＯバッファを備えたＩＰコア（送受信回路）もあった。この送受信回路では、１つのＦＩＦＯバッファ領域を、ソフトウェアを介して、受信回路用と送信回路用とにあらかじめ分けて用いる。
【００１０】
しかし、この場合でも、データ転送の際に実際に必要なＦＩＦＯバッファのサイズと、確保したＦＩＦＯバッファのサイズとが合致しないことがあり、この場合、データの転送効率が悪く、また、確保したＦＩＦＯバッファも無駄になる。
【特許文献１】特開平５−２２４８８０号公報
【特許文献２】特開平５−１０８３０６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は、上記問題点に鑑みてなされたものであり、効率よくＦＩＦＯバッファを用いることのできるＦＩＦＯ制御回路を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明のＦＩＦＯ制御回路は、複数種類のデータをそれぞれ前記データの種類ごとに先入れ先出し形式で受け渡し可能なＦＩＦＯ制御回路であって、複数種類の前記データを一時的に保存するメモリ部と、前記メモリ部の空き領域を管理する空き領域管理回路と、前記データが格納された前記メモリ部におけるアドレス範囲を記憶するアドレス記憶部と、前記データを受信した場合には、前記空き領域管理回路に前記空き領域を問い合わせ、前記空き領域管理回路から指定された前記空き領域に前記データを書き込み、前記データが書き込まれた前記アドレス範囲を前記アドレス記憶部に格納するライトポインタ制御回路と、前記データを送出する場合には、前記データの種類に対応する前記アドレス範囲を先入れ順に前記アドレス記憶部から取り出して、取り出した前記アドレス範囲に格納された前記データを前記メモリ部から読み出すとともに、取り出した前記アドレス範囲を前記空き領域管理回路に通知して、前記空き領域管理回路に前記アドレス範囲を前記空き領域とさせるリードポインタ制御回路と、を備えることを特徴とする。
【００１３】
本発明の第２のＦＩＦＯ制御回路は、第１のＦＩＦＯ制御回路において、前記空き領域管理回路は、前記データを格納する連続した空き領域が存在しない場合は、前記ライトポインタ制御回路に対して、互いに分離配置された複数の前記空き領域を指定し、前記ライトポインタ制御回路は、前記データを、複数の部分データに分割して、複数の前記空き領域にそれぞれ格納するとともに、複数の前記空き領域の前記アドレス範囲をそれぞれ前記アドレス記憶部に格納し、前記リードポインタ制御回路は、前記アドレス記憶部に格納された複数の前記アドレス範囲を取得し、複数の前記アドレス範囲に格納された前記部分データをそれぞれ取り出して、前記データとして送出することを特徴とする。
【００１４】
本発明の第３のＦＩＦＯ制御回路は、第１及び第２のＦＩＦＯ制御回路において、前記ライトポインタ制御回路は、前記データの格納された先頭アドレス及び最終アドレスを前記アドレス範囲として前記アドレス記憶部に格納することを特徴とする。
【００１５】
本発明の第４のＦＩＦＯ制御回路は、第１のＦＩＦＯ制御回路において、複数の前記メモリ部を備え、前記データの受信時において、前記空き領域管理回路は、前記ライトポインタ制御回路に対して、対象メモリ部と、前記対象メモリ部における前記空き領域を指定し、前記ライトポインタ制御回路は、指定された前記対象メモリ部における前記空き領域に前記データを格納するとともに、指定された前記メモリ部を識別する識別子と、前記データが格納された前記アドレス範囲とを、前記識別子付きアドレス範囲として前記アドレス記憶部に格納し、前記リードポインタ制御回路は、前記アドレス記憶部から前記識別子付きアドレス範囲を取得し、前記識別子付きアドレス範囲に含まれる前記識別子に基づいて前記メモリ部を特定し、特定された前記メモリ部から前記アドレス範囲に格納された前記データを読み出すことを特徴とする。
【００１６】
本発明の第５のＦＩＦＯ制御回路は、第１のＦＩＦＯ制御回路において、複数の前記メモリ部と、複数の前記メモリ部に対応した複数の前記ライトポインタ制御回路及び複数の前記リードポインタ制御回路とを備え、前記アドレス記憶部は、前記メモリ部を識別する識別子と、前記メモリ部において前記データが格納された前記アドレス範囲とを、識別子付きアドレス範囲として格納するものであり、  前記空き領域管理回路は、複数の前記メモリ部の空き領域を管理し、前記データの受信時には、前記データを書き込むべき前記メモリ部および前記空き領域を特定するものであり、前記データの受信時には、特定された前記メモリ部に対応した前記ライトポインタ制御回路は、特定された前記メモリ部における前記空き領域に前記データを格納するとともに、前記データの前記識別子付きアドレス範囲を前記アドレス記憶部に格納し、前記データの送出時には、前記識別子付きアドレス範囲に対応する前記リードポインタ制御回路が、前記識別子付きアドレス範囲に指定された、前記メモリ部の前記アドレス範囲から、前記データを読み出すことを特徴とする。
【発明の効果】
【００１７】
本発明によれば、複数種類のデータにおける各データに対してメモリ領域を動的に切り分けて適用するようにしたので、メモリを共有することができ、各データの種類ごとにメモリを設ける必要はない。従って、メモリのサイズを小さくすることができ、また、メモリの使用効率を向上させることができる。
【発明を実施するための最良の形態】
【００１８】
図１は、本発明の第１の実施の形態としてのＦＩＦＯ制御回路を適用したシステム構成例を示した図である。
【００１９】
図１に示すように、パーソナルコンピュータ等のコンピュータ８と、プリンタ、携帯電話、デジタルカメラ、スキャナ等の周辺装置４とが、それぞれのインターフェースＩＦａ、ＩＦｂを介して、例えば高速シリアルバス等により、接続されている。
【００２０】
コンピュータ８は、各種の命令及びデータが格納されたＲＡＭ３ａと、ＲＡＭ３ａ内の命令を実行して各種の演算処理を行うＣＰＵ２ａとを備え、ＲＡＭ３ａ及びＣＰＵ２ａは、データ転送用のデータバス５ａに接続されている。このデータバス５ａには、周知の送受信回路６が接続され、この送受信回路６は、上述のインターフェースＩＦａに接続されている。
【００２１】
一方、周辺装置４も、コンピュータ８と同様に、ＣＰＵ２ｂ及びＲＡＭ３ｂを備え、これらＣＰＵ２ｂ及びＲＡＭ３ｂはデータバス５ｂに接続されている。このデータバス５ｂには、本発明の特徴であるＦＩＦＯ制御回路１が接続され、このＦＩＦＯ制御回路１は、インターフェースＩＦｂに接続されている。このＦＩＦＯ制御回路１は、コンピュータ８と周辺装置４との間でデータを転送する際に、コンピュータ８と周辺装置４との処理時間の違い等を吸収するものである。
【００２２】
図２及び図３は、ＦＩＦＯ制御回路１の構成を示すブロック図である。
【００２３】
図２中の各矢印は、コンピュータ８から周辺装置４にデータ転送する際（受信時）の各種データの流れを示し、図３中の各矢印は、周辺装置４からコンピュータ８にデータ転送する際（送信時）の各種データの流れを示す。
【００２４】
図２及び図３を参照して分かるように、このＦＩＦＯ制御回路１は、受信時及び送信時において、共通のＦＩＦＯバッファ１２を用いることを特徴とする。以下、このＦＩＦＯ制御回路１について詳しく説明する。
【００２５】
まず、図２を用いて、ＦＩＦＯ制御回路１について説明する。
【００２６】
図２に示すように、受信回路１１は、コンピュータ８からのデータを受信する（［１］）。受信回路１１は、受信データが書き込まれたＦＩＦＯバッファ１２内のアドレス範囲を記憶する受信ポインタ記憶部１５（図５（ａ）参照）を備える。
【００２７】
ＦＩＦＯバッファ１２は、データ転送時において、受信データ及び送信データを一時的に格納するものである。ＦＩＦＯバッファ１２は、読出し用のポートと、書込み用のポートとの２つのポートを備えたデュアルポートタイプ（デュアルポートＲＡＭ）である。ＦＩＦＯバッファ１２は、例えば、０ｘ００００〜０ｘＦＦＦＦのアドレス領域を有する。
【００２８】
空き領域管理回路１３は、ＦＩＦＯバッファ１２の空き領域を、空き領域管理表（図６および図７参照）等により管理するものである。
【００２９】
図６（ａ）〜（ｃ）及び図７（ａ）〜（ｃ）は、空き領域管理表の一例を示す。
【００３０】
例えば、図６（ａ）の状態は、アドレス０ｘ００００〜０ｘ３ＦＦＦが使用中であることを、図６（ｂ）の状態は、アドレス０ｘ００００〜アドレス０ｘ３ＦＦＦ、及びアドレス０ｘ４０００〜０ｘ８ＦＦＦが、使用中であることを示す。
【００３１】
ライトポインタ制御回路１４は、受信回路１１から受信データを受け取り（［２］）、この受信データを格納するためのＦＩＦＯバッファ１２内の領域を、空き領域管理回路１３に問い合わる（［３］）。
【００３２】
空き領域管理回路１３は、ライトポインタ制御回路１４からの問い合わせに対し、上述の空き領域管理表を用いて、ＦＩＦＯバッファ１２における空き領域を算出し、算出した空き領域における先頭アドレス（書込み開始アドレス）をライトポインタ制御回路１４に返す（［３］）。空き領域管理回路１３が空き領域が存在しないと判断した場合は、ライトポインタ制御回路１４は、例えば、受信データを廃棄する。
【００３３】
書込み開始アドレスを受け取ったライトポインタ制御回路１４は、受信回路１１から受け取った受信データを、書込み開始アドレスから書き込む（［４］）。
【００３４】
受信データを書き込んだライトポインタ制御回路１４は、書込みデータが書き込まれた最後のアドレス（終了アドレス）を、空き領域管理回路１３に返す（［５］）。
【００３５】
空き領域管理回路１３は、上述の書込み開始アドレスから終了アドレスまでのバッファ領域を、使用中のアドレス領域として登録する。
【００３６】
一方、ライトポインタ制御回路１４は、上述の書込み開始アドレス及び終了アドレスを、受信ポインタ記憶部１５に格納する（［６］）。
【００３７】
図５（ａ）は、受信ポインタ記憶部１５の中身の一例を示す図である。
【００３８】
図５（ａ）に示すように、受信ポインタ記憶部１５内には、書込み開始アドレス０ｘ００００及び終了アドレス０ｘ３ＦＦＦ、及び、書込み開始アドレス０ｘ９０００及び終了０ｘＡＦＦＦが記憶されている。従って、この例では、書込み開始アドレス０ｘ００００〜終了アドレス０ｘ３ＦＦＦ、及び書込み開始アドレス０ｘ９０００〜終了０ｘＡＦＦＦの２つのメモリ領域にそれぞれ受信データが格納されている。
【００３９】
図２に示すように、リードポインタ制御回路１６は、ＣＰＵ２ｂ（図１参照）等からの指示に従って、受信ポインタ記憶部１５にアクセスし、最も先に格納された書込み開始アドレス及び終了アドレスを取得する（［７］）。
【００４０】
書込み開始アドレス及び終了アドレスを取得したリードポインタ制御回路１６は、ＦＩＦＯバッファ１２にアクセスし、これらのアドレスの範囲に格納された受信データを取得する（［８］）。
【００４１】
受信データを取得したリードポインタ制御回路１６は、取得した受信データを周辺装置４におけるデータバス５ｂ上に送出する（［９］）。
【００４２】
受信データの送出を終えたリードポインタ制御回路１６は、受信ポインタ記憶部１５から取得した書込み開始アドレス及び終了アドレスを空き領域管理回路１３に渡す（［１０］）。
【００４３】
空き領域管理回路１３は、渡された書込み開始アドレス及び終了アドレスを、空き領域管理表から削除して（例えば、図６（ｂ）における０ｘ４０００及び０ｘ８ＦＦＦを含む行を削除する）、この範囲におけるバッファ領域を、使用可能に解放する。
【００４４】
次に、図３を用いて、ＦＩＦＯ制御回路１について説明する。
【００４５】
図３に示すように、ライトポインタ制御回路１４は、周辺装置４におけるデータバス５ｂから送信データを受け取る（［２１］）。
【００４６】
送信データを受け取ったライトポインタ制御回路１４は、空き領域管理回路１３に空き領域を問い合わる（［２２］）。
【００４７】
空き領域管理回路１３は、空き領域管理表（図６参照）を用いて、空き領域を算出し、書込み開始アドレスをライトポインタ制御回路１４に返す（［２２］）。
【００４８】
書込み開始アドレスを受け取ったライトポインタ制御回路１４は、データバス５ｂ上から受け取った送信データを、書込み開始アドレスから書き込む（［２３］）。
【００４９】
送信データの書込みを終えたライトポインタ制御回路１４は、送信データが書込まれた最後のアドレス（終了アドレス）を、空き領域管理回路１３に返す（［２４］）。
【００５０】
終了アドレスを受け取った空き領域管理回路１３は、書込み開始アドレスから終了アドレスまでを、使用中のメモリ領域として、空き領域管理表に登録する。
【００５１】
一方、ライトポインタ制御回路１４は、上述の書込み開始アドレス及び終了アドレスを、送信回路１８における送信ポインタ記憶部１９に格納する（［２５］）。
【００５２】
図５（ｂ）は、送信ポインタ記憶部１９に格納された書込み開始アドレス及び終了アドレスの一例を示す図である。
【００５３】
図５（ｂ）に示すように、送信ポインタ記憶部１９には、書込み開始アドレス０ｘ４０００及び終了アドレス０ｘ８ＦＦＦが格納されている。
【００５４】
図３に示すように、リードポインタ制御回路１６は、ＣＰＵ２ｂ等からの指示に従って、送信ポインタ記憶部１９にアクセスし、最も先に格納された書込み開始アドレス及び終了アドレスを取得する（［２６］）。
【００５５】
書込み開始アドレス及び終了アドレスを取得したリードポインタ制御回路１６は、ＦＩＦＯバッファ１２にアクセスし、この書込み開始アドレス及び終了アドレスの範囲に格納された送信データを取得する（［２７］）。
【００５６】
送信データを取得したリードポインタ制御回路１６は、取得した送信データを送信回路１８に送出する（［２８］）。
【００５７】
送信データを受け取った送信回路１８は、受け取った送信データをコンピュータ８に向けて送出する（［２９］）。
【００５８】
一方、送信データを送信回路１８に送出したリードポインタ制御回路１６は、送信ポインタ記憶部１９から取得した書込み開始アドレス及び終了アドレスを空き領域管理回路１３に渡す（［３０］）。
【００５９】
空き領域管理回路１３は、渡された書込み開始アドレス及び終了アドレスを空き領域管理表から削除して、この範囲におけるバッファ領域を、使用可能に解放する。
【００６０】
さて、本実施の形態におけるＦＩＦＯバッファ１２は、受信データ及び送信データの両方を、任意の領域に格納することを特徴とする。
【００６１】
そこで、以下、ＦＩＦＯ制御回路１が受信データ（Ｒｘ＿Ｐａｃｋｅｔ１、）、送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）及び受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）（図４参照）をこの順に受け取ってＦＩＦＯバッファ１２に一旦格納し、その後ＦＩＦＯバッファ１２内の受信データおよび送信データを送出する例を、図２〜図７を用いて、説明する。
【００６２】
但し、動作開始当初、空き領域管理表（図６及び図７参照）、受信ポインタ記憶部１５及び送信ポインタ記憶部１９、ＦＩＦＯバッファ１２には、データは何ら格納されていないものとする。
【００６３】
まず、図２に示すように、ＦＩＦＯ制御回路１が受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）をコンピュータ８から受け取り、ＦＩＦＯバッファ１２に格納する。
【００６４】
より詳しくは、受信回路１１が受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）を受け取り（［１］）、ライトポインタ制御回路１４に送出する（［２］）。
【００６５】
受信データを受け取ったライトポインタ制御回路１４は、空き領域管理回路１３に書込み開始アドレスを問い合わせる（［３］）。空き領域管理回路１３は、空き領域管理表を用いて空き領域を調べる。ＦＩＦＯバッファ１２は全て空であるので、例えば、ＦＩＦＯバッファ１２の先頭アドレス０ｘ００００（図４参照）を書込み開始アドレスとしてライトポインタ制御回路１４に返す（［３］）。
【００６６】
書込み開始アドレス０ｘ００００を受け取ったライトポインタ制御回路１４は、図４に示すように、書込み開始アドレス０ｘ００００から受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）を書き込む。
【００６７】
受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）を書き込んだライトポインタ制御回路１４は、終了アドレス（０ｘ３ＦＦＦ）を空き領域管理回路１３に渡す（［５］）。
【００６８】
終了アドレスを受け取った空き領域管理回路１３は、書込み開始アドレス０ｘ００００及び終了アドレス０ｘ３ＦＦＦを、図６（ａ）に示すように、使用中のバッファ領域として、空き領域管理表に登録する。
【００６９】
一方、ライトポインタ制御回路１４は、図５（ａ）に示すように、上述の書込み開始アドレス０ｘ００００及び終了アドレス０ｘ３ＦＦＦを受信ポインタ記憶部１５に格納する（［６］）。
【００７０】
この状態において、次に、図３に示すように、ＦＩＦＯ制御回路１は、データバス５ｂ上から送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）を受け取って、ＦＩＦＯバッファ１２内に格納する。
【００７１】
より詳しくは、まず、ライトポインタ制御回路１４が、データバス５ｂから送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）を受け取る（［２１］）。
【００７２】
送信データを受け取ったライトポインタ制御回路１４は、空き領域管理回路１３に書込み開始アドレスを問い合わせる（［２２］）。空き領域管理回路１３は、空き領域管理表を用いて、残りの空き領域における先頭のアドレス０ｘ４０００を特定し（図６（ａ）参照）、書込み開始アドレスとしてライトポインタ制御回路１４に返す（［２２］）。
【００７３】
書込み開始アドレスを受け取ったライトポインタ制御回路１４は、図４に示すように、書込み開始アドレス０ｘ４０００から送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）を書き込む（［２３］）。
【００７４】
送信データを書き込んだライトポインタ制御回路１４は、送信データの終了アドレス（０ｘ８ＦＦＦ）を、空き領域管理回路１３に渡す（［２４］）。
【００７５】
終了アドレスを受け取った空き領域管理回路１３は、上述の書込み開始アドレス０ｘ４０００及び終了アドレス０ｘ８ＦＦＦを、図６（ｂ）に示すように、空き領域管理表に登録する。
【００７６】
一方、ライトポインタ制御回路１４は、図５（ｂ）に示すように、上述の書込み開始アドレス０ｘ４０００及び終了アドレス０ｘ８ＦＦＦを送信ポインタ記憶部１９に格納する（［２５］）。
【００７７】
この状態において、次に、図２に示すように、ＦＩＦＯ制御回路１は、コンピュータ８から受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）を受け取り、ＦＩＦＯバッファ１２内に格納する。
【００７８】
より詳しくは、まず、受信回路１１が受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）を受け取り（［１］）、ライトポインタ制御回路１４に送出する（［２］）。
【００７９】
受信データを受け取ったライトポインタ制御回路１４は、空き領域管理回路１３に、受信データの書込み開始アドレスを問い合わせる（［３］）。空き領域管理回路１３は、空き領域管理表を用いて、残りのアドレス領域０ｘ９０００〜０ｘＦＦＦＦにおける先頭アドレス０ｘ９０００（図６（ｂ）参照）を、ライトポインタ制御回路１４に返す（［３］）。
【００８０】
書込み開始アドレス０ｘ９０００を受け取ったライトポインタ制御回路１４は、図４に示すように、書込み開始アドレス０ｘ９０００から、受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）を書き込む（［４］）。
【００８１】
受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）を書き込んだライトポインタ制御回路１４は、受信データの終了アドレス（０ｘＡＦＦＦ）を空き領域管理回路１３に渡す（［５］）。
【００８２】
終了アドレスを受け取った空き領域管理回路１３は、書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＡＦＦＦを、図６（ｃ）に示すように、空き領域管理表に登録する。
【００８３】
一方、ライトポインタ制御回路１４は、図５（ａ）に示すように、書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＡＦＦＦを受信ポインタ記憶部１５に格納する（［６］）。
【００８４】
以上により、ＦＩＦＯバッファ１２内に、受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）、送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）及び受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）が順次格納された。
【００８５】
次に、ＦＩＦＯ制御回路１は、ＦＩＦＯバッファ１２内の受信データ及び送信データを順次送出する。但し、受信データを優先して送出するものとする。
【００８６】
まず、図２に示すように、ＦＩＦＯ制御回路１は、ＦＩＦＯバッファ１２内から受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）を取り出し、データバス５ｂ上に送出する。
【００８７】
より詳しくは、リードポインタ制御回路１６は、ＣＰＵ２ｂ等からの指示に従って、受信ポインタ記憶部１５にアクセスし、最も先に入力された書込み開始アドレス及び終了アドレス（０ｘ００００及び０ｘ３ＦＦＦ）（図５（ａ）参照）を取得する（［７］）。リードポインタ制御回路１６は、受信ポインタ記憶部１５内の書込み開始アドレス０ｘ００００及び終了アドレス０ｘ３ＦＦＦを消去する（図示せず）。
【００８８】
書込み開始アドレス及び終了アドレスを取得したリードポインタ制御回路１６は、ＦＩＦＯバッファ１２内における書込み開始アドレス０ｘ００００〜終了アドレス０ｘ３ＦＦＦの範囲に格納された受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）（図４参照）を読み出して（［８］）、データバス５ｂ上に送出する（［９］）。
【００８９】
受信データを送出したリードポインタ制御回路１６は、上述の書込み開始アドレス０ｘ００００及び終了アドレス０ｘ３ＦＦＦを空き領域管理回路１３に送出する（［１０］）。空き領域管理回路１３は、受け取った書込み開始アドレス０ｘ００００及び終了アドレス０ｘ３ＦＦＦを、図７（ａ）に示すように、空き領域管理表から削除して（図６（ｃ）参照）、使用可能に解放する。
【００９０】
次に、ＦＩＦＯ制御回路１は、ＦＩＦＯバッファ１２内の受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）を読み出してデータバス５ｂ上に送出する。
【００９１】
より詳しくは、まず、リードポインタ制御回路１６が、ＣＰＵ２ｂ等からの指示に従って、受信ポインタ記憶部１５内の書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＡＦＦＦ（図５（ａ）参照）を取得する（［７］）。書込み開始アドレス及び終了アドレスを取得したリードポインタ制御回路１６は、受信ポインタ記憶部１５内の書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＡＦＦＦを消去する（図示せず）。
【００９２】
受信ポインタ記憶部１５内のデータを消去したリードポインタ制御回路１６は、ＦＩＦＯバッファ１２内における書込み開始アドレス０ｘ９０００〜終了アドレス０ｘＡＦＦＦの範囲に格納された受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）（図４参照）を読み出して（［８］）、データバ５ｂ上に送出する（［９］）。
【００９３】
受信データを送出したリードポインタ制御回路１６は、書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＡＦＦＦを空き領域管理回路１３に送出する（［１０］）。空き領域管理回路１３は、受け取った書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＡＦＦＦを、図７（ｂ）に示すように、空き領域管理表から削除する。
【００９４】
次に、図３に示すように、ＦＩＦＯ制御回路１は、ＦＩＦＯバッファ１２内の送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）を読み出して、コンピュータ８に向けて送出する。
【００９５】
より詳しくは、リードポインタ制御回路１６は、ＣＰＵ２ｂ等からの指示に従って、送信ポインタ記憶部１９内の書込み開始アドレス０ｘ４０００及び終了アドレス０ｘ８ＦＦＦ（図５（ｂ）参照）を取得する（［２６］）。書込み開始アドレス及び終了アドレスを取得したリードポインタ制御回路１６は、送信ポインタ記憶部１９内の書込み開始アドレス０ｘ４０００及び終了アドレス０ｘ８ＦＦＦを消去する（図示せず）。
【００９６】
送信ポインタ記憶部１９内のデータを消去したリードポインタ制御回路１６は、ＦＩＦＯバッファ１２内における書込み開始アドレス０ｘ４０００〜終了アドレス０ｘ８ＦＦＦの範囲に格納された送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）（図４参照）を読み出して（［２７］）、送信回路１８に送出する（［２８］）。
【００９７】
送信データを受け取った送信回路１８は、受け取った送信データをコンピュータ８に向けて送出する（［２９］）。
【００９８】
一方、リードポインタ制御回路１６は、書込み開始アドレス０ｘ４０００及び終了アドレス０ｘ８ＦＦＦを空き領域管理回路１３に送出する（［３０］）。空き領域管理回路１３は、受け取った書込み開始アドレス０ｘ４０００及び終了アドレス０ｘ８ＦＦＦを、図７（ｃ）に示すように、空き領域管理表から削除する。
【００９９】
以上により、ＦＩＦＯバッファ１２内における、受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）、受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）及び送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）が順次送出された。
【０１００】
以上では、ＦＩＦＯバッファ１２内に格納した受信データ及び送信データを、受信データを優先して送出したが、送信データを優先して送出してもよい。あるいは、ＦＩＦＯバッファ内に格納された順に送出するようにしてもよい。
【０１０１】
また、以上では、受信データと送信データをＦＩＦＯバッファ内に全て格納した後、これらのデータを読み出して、送出するようにしたが、ＦＩＦＯバッファ１２内へのデータの格納と、ＦＩＦＯバッファ１２からのデータの読出しを同時に行うようにしてもよい。例えば、受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）をＦＩＦＯバッファ１２から読出しつつ、ＦＩＦＯバッファ１２に送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）を格納するようにしてもよい。
【０１０２】
以上の説明では、受信データ及び送信データをそれぞれＦＩＦＯバッファ１２内の連続した領域に格納したが、例えば、受信データあるいは送信データのサイズが大きく、連続した領域を確保できない場合は、受信データあるいは送信データを分割して格納してもよい。以下、これについて詳しく説明する。
【０１０３】
図８（ａ）及び図８（ｂ）は、受信データ（Ｒｘ＿Ｐａｃｋｅｔ１１）をＦＩＦＯバッファ１２内に分割して格納する例を説明するための図である。
【０１０４】
図８（ａ）に示すように、ＦＩＦＯバッファ１２内には、あらかじめ、受信データ（Ｒｘ＿Ｐａｃｋｅｔ１０）が格納されている。図９（ａ）は、このときの受信ポインタ記憶部１５内のデータを示す。
【０１０５】
図８（ａ）の状態にあるＦＩＦＯバッファ１２内に、図８（ｂ）に示すように、ライトポインタ制御回路１４（図２参照）が、受信データ（Ｒｘ＿Ｐａｃｋｅｔ１１）を２つ（Ｒｘ＿Ｐａｃｋｅｔ１１（１）及びＲｘ＿Ｐａｃｋｅｔ１１（２））に分割して格納する。一方、ライトポインタ制御回路１４は、受信ポインタ記憶部１５内に各部分データ（Ｒｘ＿Ｐａｃｋｅｔ１１（１）及びＲｘ＿Ｐａｃｋｅｔ１１（２））に対応した書込み開始アドレスおよび終了アドレスを格納する。この状態を図９（ｂ）に示す。
【０１０６】
図９（ｂ）に示すように、受信ポインタ記憶部１５内には、Ｒｘ＿Ｐａｃｋｅｔ１１（１）に対応して書込みアドレス０ｘ００００及び終了アドレス０ｘ３ＦＦＦが、Ｒｘ＿Ｐａｃｋｅｔ１１（２）に対応して書込みアドレス０ｘ９０００及び終了０ｘＦＦＦＦが格納される。Ｒｘ＿Ｐａｃｋｅｔ１１（１）とＲｘ＿Ｐａｃｋｅｔ１１（２）とが一体のものであることを示すデータ“＊”が終了アドレス０ｘ３ＦＦＦに付されている。
【０１０７】
データの読出し時には、リードポインタ制御回路１６は、書込み開始アドレス０ｘ００００及び終了０ｘ３ＦＦＦの範囲に格納されたＲｘ−Ｐａｃｋｅｔ１１（１）と、書込み開始アドレス０ｘ９０００及び終了０ｘＦＦＦＦの範囲に格納されたＲｘ−Ｐａｃｋｅｔ１１（２）とを一体のものとして読み出す。
【０１０８】
以上のように、本実施の形態によれば、ＦＩＦＯバッファ内の記憶領域を、使用用途に応じて、動的に割り当てるようにしたので、ＦＩＦＯバッファを複数の用途（例えば受信と送信）で同時に共用することができる。よって、ＳＯＣ（System On Chip）に占めるＦＩＦＯバッファの領域を小さくすることができ、ひいては、チップ全体の面積を縮小することが可能となる。また、ＦＩＦＯバッファを効率よく使用することができる。
【０１０９】
次に、本発明の第２の実施の形態について説明する。
【０１１０】
本実施の形態におけるＦＩＦＯ制御回路は、２つのＦＩＦＯバッファを備えることを特徴とする。以下、本実施の形態について詳しく説明する。
【０１１１】
図１０及び図１１は、本発明の第２の実施の形態としてのＦＩＦＯ制御回路２１の構成を示すブロック図である。
【０１１２】
図１０中の実線矢印は、受信時にＦＩＦＯバッファ１２Ａを用いた場合の各種データの流れを示し（［４１］〜［５０］）、一方、破線矢印は、受信時にＦＩＦＯバッファ１２Ｂを用いた場合の各種データの流れを示す（［６３］〜［７０］）。
【０１１３】
一方、図１１中の実線矢印は、送信時にＦＩＦＯバッファ１２Ａを用いた場合の各種データの流れを示し（［８１］〜［９１］）、一方、破線矢印は、送信時にＦＩＦＯバッファ１２Ｂを用いた場合の各種データの流れを示す（［９２］〜［１００］）。
【０１１４】
以下、このＦＩＦＯ制御回路２１について、受信時と送信時とに分けて、説明する。
【０１１５】
まず、図１０に示すように、受信時においては、受信回路１１は、コンピュータ８から受信データを受け取ったら（［４１］）、空き領域管理回路１３に対して、ライトポインタ制御回路１４Ａ、１４Ｂのいずれに受信データを渡すべきかを問い合わせる（［４２］）。この空き領域管理回路１３は、２つのＦＩＦＯバッファ１２Ａ，１２Ｂの空き領域を管理するものである。
【０１１６】
空き領域管理回路１３は、例えば、ＦＩＦＯバッファ１２Ａ、１２Ｂにおけるデータの占有率が同程度となるように、ライトポインタ制御回路１４Ａ、１４Ｂを指定する（［４２］）。あるいは、空き領域管理回路１３は、例えば、ライトポインタ制御回路１４Ａを優先的に指定し、ＦＩＦＯバッファ１２Ａに空き領域が無くなったら、ライトポインタ制御回路１４Ｂを指定するようにしてもよい。
【０１１７】
受信回路１１は、指定されたライトポインタ制御回路１４Ａあるいは１４Ｂに受信データを送出する（［４３］［６３］）。
【０１１８】
指定されたライトポインタ制御回路１４Ａあるいは１４Ｂは、空き領域管理回路から書込み開始アドレスを取得し（［４４］［６４］）、ＦＩＦＯバッファ１２Ａあるいは１２Ｂにおける書込み開始アドレスから受信データを書き込む（［４５］［６５］）。
【０１１９】
ライトポインタ制御回路１４Ａあるいは１４Ｂは、受信データの終了アドレスを空き領域管理回路１３に送出するとともに（［４６］［６６］）、書込み開始アドレス及び終了アドレスを受信ポインタ記憶部１５に格納する（［４７］［６７］）。
【０１２０】
一方、リードポインタ制御回路１６Ａあるいは１６Ｂは、ＣＰＵ２ｂ等からの指示に従い、受信ポインタ記憶部１５にアクセスし、書込み開始アドレス及び終了アドレスを取得する（［４８］［６８］）。
【０１２１】
リードポインタ制御回路１６Ａあるいは１６Ｂは、取得した書込み開始アドレス及び終了アドレスの範囲に格納された受信データをＦＩＦＯバッファ１２Ａあるいは１２Ｂから取得して（［４９］［６９］）、データバス５ｂ上に送出する（［５０］［７０］）。
【０１２２】
この後、リードポインタ制御回路１６Ａあるいは１６Ｂは、書込み開始アドレス及び終了アドレスを、空き領域管理回路１３に送出し（［５１］［７１］）、空き領域管理回路１３は、このアドレス範囲のバッファ領域を使用可能に解放する。
【０１２３】
次に、図１１に示すように、送信時においては、周辺装置４におけるＣＰＵ２ｂは、送信データを送出する際、空き領域管理回路１３に対して、ライトポインタ制御回路１４Ａ、１４Ｂのいずれに送信データを渡すべきかを問い合わせる（［８１］）。空き領域管理回路１３は、受信時の場合と同様にして、ライトポインタ制御回路１４Ａ、１４Ｂのいずれかを指定する（［８１］）。
【０１２４】
ＣＰＵ２ｂは、指定されたライトポインタ制御回路１４Ａあるいは１４Ｂに、送信データを送出する（［８２］［９２］）。
【０１２５】
指定されたライトポインタ制御回路１４Ａあるいは１４Ｂは、空き領域管理回路から書込み開始アドレスを取得し（［８３］［９３］）、ＦＩＦＯバッファ１２Ａあるいは１２Ｂにおける書込み開始アドレスから送信データを書き込む（［８４］［９４］）。
【０１２６】
ライトポインタ制御回路１４Ａあるいは１４Ｂは、送信データの終了アドレスを空き領域管理回路１３に送出するとともに（［８５］［９５］）、書込み開始アドレス及び終了アドレスを送信ポインタ記憶部１９に格納する（［８６］［９６］）。
【０１２７】
一方、リードポインタ制御回路１６Ａあるいは１６Ｂは、ＣＰＵ２ｂ等からの指示に従い、送信ポインタ記憶部１９から書込み開始アドレス及び終了アドレスを取得する（［８７］［９７］）。具体的には、例えば、まず、リードポインタ制御回路１６Ａがアクセスし、書込み開始アドレス及び終了アドレスが自分の担当するＦＩＦＯバッファ１２Ａのものでなければ、リードポインタ制御回路１６Ｂがアクセスする。
【０１２８】
リードポインタ制御回路１６Ａあるいは１６Ｂは、取得した書込み開始アドレス及び終了アドレスの範囲に格納された送信データをＦＩＦＯバッファ１２Ａあるいは１２Ｂから取得して（［８８］［９８］）、送信回路１８に送出する（［８９］［９９］）。
【０１２９】
送信回路１８は、受け取った送信データをコンピュータ８に向けて送信する（［９０］）。
【０１３０】
一方、リードポインタ制御回路１６Ａあるいは１６Ｂは、書込み開始アドレス及び終了アドレスを、空き領域管理回路１３に送出し（［９１］［１００］）、空き領域管理回路１３は、このアドレス範囲のバッファ領域を使用可能に解放する。
【０１３１】
次に、図１０、図１２及び図１３を用いて、受信時におけるＦＩＦＯ制御回路２１の動作例について具体例を用いて説明する。
【０１３２】
先ず、ＦＩＦＯ制御回路２１の動作例を説明するに当たっての前提条件について説明する。
【０１３３】
図１２（ａ）及び図１２（ｂ）は、ＦＩＦＯバッファ１２Ａ、１２Ｂ内のデータを示す図である。
【０１３４】
図１２（ａ）に示すように、ＦＩＦＯバッファ１２Ａ内には、受信データ（Ｒｘ＿Ｐａｃｋｅｔ１）及び送信データ（Ｔｘ＿Ｐａｃｋｅｔ１）が格納されている。
【０１３５】
一方、図１２（ｂ）に示すように、ＦＩＦＯバッファ１２Ｂ内には、受信データ（Ｒｘ＿Ｐａｃｋｅｔ２）及び送信データ（Ｔｘ＿Ｐａｃｋｅｔ２、Ｔｘ＿Ｐａｃｋｅｔ３、Ｔｘ＿Ｐａｃｋｅｔ４）が格納されている。
【０１３６】
図１２（ａ）及び図１２（ｂ）中、斜線で示す部分の受信データ（Ｒｘ＿Ｐａｃｋｅｔ３、Ｒｘ＿Ｐａｃｋｅｔ４）は、現時点では、未だ、格納されていないものとする。
【０１３７】
図１３（ａ）は、受信ポインタ記憶部１５内のデータを示す図である。図１３（ｂ）は、送信ポインタ記憶部１９内のデータを示す図である。
【０１３８】
図１３（ａ）及び図１３（ｂ）に示すように、受信ポインタ記憶部１５及び送信ポインタ記憶部１９内には、上述のＦＩＦＯバッファ１２Ａ、１２Ｂ内のデータに対応した書込み開始アドレス及び終了アドレスが格納されている。但し、図中、斜線で示す部分の書込み開始アドレス及び終了アドレスは、現時点では、未だ、格納されていないものとする。
【０１３９】
ここで、図１３（ａ）及び図１３（ｂ）中、「任意のアドレス＿Ａ」（例えば０ｘ００００＿Ａ）は、この任意のアドレス（０ｘ００００）が、ＦＩＦＯバッファ１２Ａ内のアドレス（０ｘ００００）であることを示す。一方、「任意のアドレス＿Ｂ」（例えば０ｘ００００＿Ｂ）は、この任意のアドレス（０ｘ００００）が、ＦＩＦＯバッファ１２Ｂ内のアドレス（０ｘ００００）であることを示す。
【０１４０】
以上の前提条件の下、ＦＩＦＯ制御回路２１が、２つの受信データ（Ｒｘ＿Ｐａｃｋｅｔ３、Ｒｘ＿Ｐａｃｋｅｔ４）（図１２参照）をこの順序で受信したときのＦＩＦＯ制御回路２１の動作例について説明する。
【０１４１】
まず、図１０に示すように、受信回路１１は、受信データ（Ｒｘ＿Ｐａｃｋｅｔ３）を受信すると（［４１］）、ライトポインタ制御回路１４Ａ、１４Ｂのいずれに受信データ（Ｒｘ＿Ｐａｃｋｅｔ３）を送出するべきかを空き領域管理回路１３に問い合わせる（［４２］）。
【０１４２】
空き領域管理回路１３は、ＦＩＦＯバッファ１２Ａ、１２Ｂにおける空き領域を調べる。ＦＩＦＯバッファ１２Ａ、１２Ｂ内に空き領域があるが（図１２（ａ）（ｂ）の斜線部分参照）、ＦＩＦＯバッファ１２Ａを優先し、空き領域管理回路１３は、受信回路１１に対してライトポインタ制御回路１４Ａを指示する（［４２］）。
【０１４３】
受信回路１１は、空き領域管理回路１３の指示に従い、受信データ（Ｒｘ＿Ｐａｃｋｅｔ３）をライトポインタ制御回路１４Ａに送出する。（［４３］）。
【０１４４】
ライトポインタ制御回路１４Ａは、受信データ（Ｒｘ＿Ｐａｃｋｅｔ３）の書込み開始アドレスを、空き領域管理回路１３に問い合わせる（［４４］）。
【０１４５】
空き領域管理回路１３は、空き領域における先頭のアドレス０ｘ９０００（図１２（ａ）参照）を、書込み開始アドレスとしてライトポインタ制御回路１４Ａに返す（［４４］）。
【０１４６】
書込み開始アドレスを受け取ったライトポインタ制御回路１４Ａは、図１２（ａ）に示すように、書込み開始アドレス０ｘ９０００から、受信データ（Ｒｘ＿Ｐａｃｋｅｔ３）を書き込む（［４５］）。
【０１４７】
受信データの書込みを終えたライトポインタ制御回路１４Ａは、受信データ（Ｒｘ＿Ｐａｃｋｅｔ３）の終了アドレス０ｘＦＦＦＦ（図１２（ａ）参照）を、空き領域管理回路１３に送出する（［４６］）。
【０１４８】
空き領域管理回路１３は、書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＦＦＦＦを用いて、図示しない空き領域管理表を更新する。
【０１４９】
一方、ライトポインタ制御回路１４Ａは、図１３（ａ）に示すように、書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＦＦＦＦを、それぞれ０ｘ９０００＿Ａ及び０ｘＦＦＦＦ＿Ａとして、受信ポインタ記憶部１５に格納する。
【０１５０】
この状態において、次に、受信回路１１は、次の受信データ（Ｒｘ＿Ｐａｃｋｅｔ４）をコンピュータ８から受信する（［４１］）。受信回路１１は、ライトポインタ制御回路１４Ａ、１４Ｂのいずれに受信データ（Ｒｘ＿Ｐａｃｋｅｔ４）を送出するべきかを空き領域管理回路１３に問い合わせる（［４２］）。
【０１５１】
空き領域管理回路１３は、ＦＩＦＯバッファ１２Ａ、１２Ｂにおける空き領域を調べる。ＦＩＦＯバッファ１２Ａ内に空き領域はないが（図１２（ａ）参照）、ＦＩＦＯバッファ１２Ｂ内に空き領域があるので（図１２（ｂ）参照）、空き領域管理回路１３は、受信回路１１に対してライトポインタ制御回路１４Ｂを指示する（［４２］）。
【０１５２】
受信回路１１は、空き領域管理回路１３による指示に従って、受信データ（Ｒｘ＿Ｐａｃｋｅｔ４）をライトポインタ制御回路１４Ｂに送出する。（［６３］）。
【０１５３】
ライトポインタ制御回路１４Ｂは、受信データ（Ｒｘ＿Ｐａｃｋｅｔ４）の書込み開始アドレスを、空き領域管理回路１３に問い合わせる（［６４］）。
【０１５４】
空き領域管理回路１３は、図示しない空き領域管理表に基づき、空き領域の先頭アドレス０ｘ９０００（図１２（ｂ）参照）を、書込み開始アドレスとしてライトポインタ制御回路１４Ｂに返す（［６４］）。
【０１５５】
ライトポインタ制御回路１４Ｂは、図１２（ｂ）に示すように、書込み開始アドレス０ｘ９０００から、受信データ（Ｒｘ＿Ｐａｃｋｅｔ４）を書き込む（［６５］）。
【０１５６】
ライトポインタ制御回路１４Ｂは、受信データ（Ｒｘ＿Ｐａｃｋｅｔ４）の終了アドレス０ｘＢＦＦＦ（図１２（ｂ）参照）を、空き領域管理回路１３に送出する（［６６］）。
【０１５７】
空き領域管理回路１３は、書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＢＦＦＦを用いて、図示しない空き領域管理表を更新する。
【０１５８】
一方、ライトポインタ制御回路１４Ｂは、図１３（ａ）に示すように、書込み開始アドレス０ｘ９０００及び終了アドレス０ｘＢＦＦＦを、それぞれ０ｘ９０００＿Ｂ及び０ｘＢＦＦＦ＿Ｂとして、受信ポインタ記憶部１５内に格納する。
【０１５９】
この後、リードポインタ制御回路１６Ａ、１６Ｂは、例えばＣＰＵ２ｂからの指示に従って、受信ポインタ記憶部１５あるいは送信ポインタ記憶部１９内の書込み開始アドレス及び終了アドレスを、それぞれ先に格納された順に読み出す。そして、ＦＩＦＯバッファ１２Ａあるいは１２Ｂから受信データあるいは送信データを取り出し、データバス５ｂあるいはコンピュータ８に向けて送出する。
【０１６０】
本実施の形態では、２つのＦＩＦＯバッファのそれぞれに対応させてリードポインタ制御回路およびライトポインタ制御回路を設けたが、１つのライトポインタ制御回路および１つのリードポインタ制御回路によって、２つのＦＩＦＯバッファへのデータ書込み、２つのＦＩＦＯバッファからのデータ読出しを行うようにしてもよい。
【０１６１】
以上のように、本発明の第２の実施の形態によれば、空き領域管理回路に複数のＦＩＦＯバッファの空き領域を管理させるようにしたので、複数のＦＩＦＯバッファの共用が可能となる。
【図面の簡単な説明】
【０１６２】
【図１】本発明の第１の実施の形態としてのＦＩＦＯ制御回路を用いたシステム構成例を示した図である。
【図２】ＦＩＦＯ制御回路の構成（受信時における各種データの流れを付したもの）を示すブロック図である。
【図３】ＦＩＦＯ制御回路の構成（送信時における各種データの流れを付したもの）を示すブロック図である。
【図４】ＦＩＦＯバッファ内のデータを示す図である。
【図５】受信ポインタ記憶部及び送信ポインタ記憶部内のデータを示す図である。
【図６】空き領域管理表の一例を示す。
【図７】図６に続いて、空き領域管理表の一例を示す。
【図８】受信データを分割して格納する例を示す図である。
【図９】受信データの分割格納時における受信ポインタ記憶部内のデータを示す図である。
【図１０】本発明の第２の実施の形態としてのＦＩＦＯ制御回路（受信時における各種データの流れを付したもの）を示すブロック図である。
【図１１】本発明の第２の実施の形態としてのＦＩＦＯ制御回路（送信時における各種データの流れを付したもの）を示すブロック図である。
【図１２】ＦＩＦＯバッファ１２Ａ、１２Ｂ内のデータを示す図である。
【図１３】受信ポインタ記憶部及び送信ポインタ記憶部内のデータを示す図である。
【図１４】従来の受信回路及び送信回路の構成を示す図である。
【符号の説明】
【０１６３】
１、２１  ＦＩＦＯ制御回路
２ａ、２ｂ  ＣＰＵ
３ａ、３ｂ  ＲＡＭ
４  周辺装置
５ａ、５ｂ  データバス
６  送受信回路
１１  受信回路
１２、１２Ａ、１２Ｂ  ＦＩＦＯバッファ
１３  空き領域管理回路
１４、１４Ａ、１４Ｂ  ライトポインタ制御回路
１５  受信ポインタ記憶部１５
１６、１６Ａ、１６Ｂ  リードポインタ制御回路
１８  送信回路
１９  リードポインタ記憶部
ＩＦａ、ＩＦｂ  インターフェース
【図１】
2005157444.tif 000003
【図２】
2005157444.tif 000004
【図３】
2005157444.tif 000005
【図４】
2005157444.tif 000006
【図５】
2005157444.tif 000007
【図６】
2005157444.tif 000008
【図７】
2005157444.tif 000009
【図８】
2005157444.tif 000010
【図９】
2005157444.tif 000011
【図１０】
2005157444.tif 000012
【図１１】
2005157444.tif 000013
【図１２】
2005157444.tif 000014
【図１３】
2005157444.tif 000015
【図１４】
2005157444.tif 000016