(57)【要約】【課題】メモリや回路の減少による費用削減、および制御回路の簡略化による信頼性を向上させつつ、入力時と出力時のデータ配列を相違させた非同期データ転送を行うことが可能なＦＩＦＯ回路を提供する。【解決手段】データ群でのＦＩＦＯ制御において、データ群を書き込む際には、データ群の書き込み開始時と完了時を知らせるポインタを作成し、出力する。データ群を読み出す際には、データ群の読み出し開始時と完了時を知らせるポインタを作成し、出力する。これらのポインタを比較し、ＦＩＦＯメモリにデータ群を書き込み可能な記憶領域が有るか否か、ＦＩＦＯメモリに読み出し可能なデータ群が有るか否かを判断する。【選択図】図１
2014071929.tif 000002
【特許請求の範囲】
【請求項１】
ＦＩＦＯメモリを介して、複数のデータで構成されたデータ群を転送する入出力非同期のＦＩＦＯ回路において、
データ群の最初のデータの書き込みを開始する際に更新される第１ライトポインタを生成する第１ライトポインタ生成部と、
データ群の最後のデータの書き込みを開始する際に更新される第２ライトポインタを生成する第２ライトポインタ生成部と、
データ群の最初のデータの読み出しを開始した際に更新される第１リードポインタを生成する第１リードポインタ生成部と、
前記ＦＩＦＯメモリに１つのデータ群を複数回に分けて書き込む書き込み制御部と、
前記ＦＩＦＯメモリから前記データ群単位にデータを読み出す読み出し制御部と、
を有し、
前記書き込み制御部は、前記第１ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別し、
前記読み出し制御部は、前記第２ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する
ことを特徴とするＦＩＦＯ回路。
【請求項２】
ＦＩＦＯメモリを介して、複数のデータで構成されたデータ群を転送する入出力非同期のＦＩＦＯ回路において、
データ群の最初のデータの書き込みを開始する際に更新される第１ライトポインタを生成する第１ライトポインタ生成部と、
データ群の最初のデータの読み出しを開始した際に更新される第１リードポインタを生成する第１リードポインタ生成部と、
データ群の最後のデータの読み出しを開始した際に更新される第２リードポインタを生成する第２リードポインタ生成部と、
前記ＦＩＦＯメモリに前記データ群単位にデータを書き込む書き込み制御部と、
前記ＦＩＦＯメモリから１つのデータ群を複数回に分けて読み出す読み出し制御部と、
を有し、
前記書き込み制御部は、前記第１ライトポインタと前記第２リードポインタとを比較して、前記ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別し、
前記読み出し制御部は、前記第１ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する
ことを特徴とするＦＩＦＯ回路。
【請求項３】
ＦＩＦＯメモリを介して、複数のデータで構成されたデータ群を転送する入出力非同期のＦＩＦＯ回路において、
データ群の最初のデータの書き込みを開始する際に更新される第１ライトポインタを生成する第１ライトポインタ生成部と、
データ群の最後のデータの書き込みを開始する際に更新される第２ライトポインタを生成する第２ライトポインタ生成部と、
データ群の最初のデータの読み出しを開始した際に更新される第１リードポインタを生成する第１リードポインタ生成部と、
データ群の最後のデータの読み出しを開始した際に更新される第２リードポインタを生成する第２リードポインタ生成部と、
前記ＦＩＦＯメモリに１つのデータ群を複数回に分けて書き込む書き込み制御部と、
前記ＦＩＦＯメモリから１つのデータ群を複数回に分けて読み出す読み出し制御部と、
を有し、
前記書き込み制御部は、前記第１ライトポインタと前記第２リードポインタとを比較して、前記ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別し、
前記読み出し制御部は、前記第２ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する
ことを特徴とするＦＩＦＯ回路。
【請求項４】
前記書き込み制御部は、前記データ群の外部からの入力時のデータ配列に応じて書き込みアドレスを生成し、
前記読み出し制御部は、前記データ群の外部への出力時のデータ配列に応じて読み出しアドレスを生成し、
書き込み時と読み出し時における前記データ群のデータ配列を変換する
ことを特徴とする請求項１乃至３のいずれか１つに記載のＦＩＦＯ回路。
【請求項５】
１つのデータ群を、複数のＦＩＦＯメモリに分散して記憶させると共に、書き込み時と読み出し時でデータ幅を相違させる
ことを特徴とする請求項１乃至４のいずれか１つに記載のＦＩＦＯ回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ群でのＦＩＦＯ制御を行うＦＩＦＯ回路に関する。
【背景技術】
【０００２】
従来、図１５のように、デュアルポートメモリ５０のようなデータの書き込みとデータの読み出しが非同期のメモリを使用するＦＩＦＯ（First In、First Out）回路３では、デュアルポートメモリ５０に単位データ（たとえば、１バイト）を書き込む際にインクリメントされるライトポインタと、単位データを読み出す際にインクリメントされるリードポインタとを比較し、デュアルポートメモリ５０に書き込み可能な空き領域があるか否か、及びデュアルポートメモリ５０に読み出し可能なデータがあるか否かの判定を行っている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開昭６０−２６２２４２号公報
【特許文献２】特開平５−２６５７０１号公報
【特許文献３】特開平１０−２１４１７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の従来のＦＩＦＯ制御では、入出力は同じサイズの単位データでなければならない。たとえば、図１６に示すように、１バイト単位の書き込み、１バイト単位の読み出しは可能である。しかし、書き込み側と読み出し側で単位データのサイズを相違させることはできない。たとえば、図１７のように、書き込みは１バイト単位で行い、読み出しは８バイトのデータ群単位に行う、といったＦＩＦＯ制御はできない。
【０００５】
なぜなら、１バイトを書き込む毎にライトポインタをインクリメントさせ、８バイトからなる１つのデータ群を読み出す毎にリードポインタをインクリメントさせると、両者の値の整合が取れなくなる。また、８バイトを書き込む毎に、ライトポインタをインクリメントするようにして値の整合を取ったとしても、たとえば、８バイトのデータ群の１バイト目の書き込み開始時にライトポインタをインクリメントすると、読み出し側では、その時点で８バイト単位の１つのデータ群が揃ったと誤認してしまう。逆に、８バイト目を書き込んだ時点でライトポインタをインクリメントする構成にすると、７バイト目まで書き込みが行われた時点ではまだライトポインタがインクリメントされないので、次の８バイトの書き込みが可能な空き領域があると書き込み側に誤認される。
【０００６】
また、上記のように従来は、入力時の単位データと出力時の単位データを相違させることはできないので、入力（書き込み）と出力（読み出し）でデータの配列が異なるような非同期データ転送を行うこともできない。そのため、データ配列を変換するには、非同期データ転送用のメモリの他に、別途、データ配列変換用のメモリが必要となると共に、それらのメモリ間でのデータ転送を制御する必要があるため回路規模が増大してしまう。
【０００７】
本発明は、上記の問題を解決しようとするものであり、メモリや回路規模の増大を抑えて、入力時と出力時の単位データが相違する非同期転送の可能なＦＩＦＯ回路を提供することを目的としている。
【課題を解決するための手段】
【０００８】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
【０００９】
［１］ＦＩＦＯメモリを介して、複数のデータで構成されたデータ群を転送する入出力非同期のＦＩＦＯ回路において、
データ群の最初のデータの書き込みを開始する際に更新される第１ライトポインタを生成する第１ライトポインタ生成部と、
データ群の最後のデータの書き込みを開始する際に更新される第２ライトポインタを生成する第２ライトポインタ生成部と、
データ群の最初のデータの読み出しを開始した際に更新される第１リードポインタを生成する第１リードポインタ生成部と、
前記ＦＩＦＯメモリに１つのデータ群を複数回に分けて書き込む書き込み制御部と、
前記ＦＩＦＯメモリから前記データ群単位にデータを読み出す読み出し制御部と、
を有し、
前記書き込み制御部は、前記第１ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別し、
前記読み出し制御部は、前記第２ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する
ことを特徴とするＦＩＦＯ回路。
【００１０】
上記発明では、データ群単位で読み出しを行う際に、第２ライトポインタと第１リードポインタのカウント値を比較して、ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する。第２ライトポインタは、データ群の最後のデータの書き込み開始時にインクリメントされる、つまり、複数回に分けて行われるデータ群の書き込みが完了する際に更新されるので、第２ライトポインタを調べれば、書き込みが完了したデータ群の数がわかる。一方、データ群単位で書き込みを行う際には、第１ライトポインタと第１リードポインタのカウント値を比較して、ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別する。また、１つのデータ群を複数回に分けて書き込む際の１回当たりのデータ量やデータ配列と、データ群単位で読み出す際のデータ配列とを相違させることができるので、ＦＩＦＯを介した非同期データ転送においてデータ配列の変換が可能になる。
【００１１】
［２］ＦＩＦＯメモリを介して、複数のデータで構成されたデータ群を転送する入出力非同期のＦＩＦＯ回路において、
データ群の最初のデータの書き込みを開始する際に更新される第１ライトポインタを生成する第１ライトポインタ生成部と、
データ群の最初のデータの読み出しを開始した際に更新される第１リードポインタを生成する第１リードポインタ生成部と、
データ群の最後のデータの読み出しを開始した際に更新される第２リードポインタを生成する第２リードポインタ生成部と、
前記ＦＩＦＯメモリに前記データ群単位にデータを書き込む書き込み制御部と、
前記ＦＩＦＯメモリから１つのデータ群を複数回に分けて読み出す読み出し制御部と、
を有し、
前記書き込み制御部は、前記第１ライトポインタと前記第２リードポインタとを比較して、前記ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別し、
前記読み出し制御部は、前記第１ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する
ことを特徴とするＦＩＦＯ回路。
【００１２】
上記発明では、データ群単位で書き込みを行う際に、第１ライトポインタと第２リードポインタのカウント値を比較して、ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別する。第２リードポインタは、複数回に分けて行われるデータ群の最後のデータの読み出し開始時にインクリメントされる、つまり、データ群の読み出しが完了する際に更新されるので、第２リードポインタを調べれば、読み出しが完了したデータ群の数がわかる。一方、データ群単位で読み出しを行う際には、第１ライトポインタと第１リードポインタのカウント値を比較して、ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する。また、データ群単位で書き込む際のデータ配列と、１つのデータ群を複数回に分けて読み出す際の１回当たりのデータ量やデータ配列とを相違させることができるので、ＦＩＦＯを介した非同期データ転送においてデータ配列の変換が可能になる。
【００１３】
［３］ＦＩＦＯメモリを介して、複数のデータで構成されたデータ群を転送する入出力非同期のＦＩＦＯ回路において、
データ群の最初のデータの書き込みを開始する際に更新される第１ライトポインタを生成する第１ライトポインタ生成部と、
データ群の最後のデータの書き込みを開始する際に更新される第２ライトポインタを生成する第２ライトポインタ生成部と、
データ群の最初のデータの読み出しを開始した際に更新される第１リードポインタを生成する第１リードポインタ生成部と、
データ群の最後のデータの読み出しを開始した際に更新される第２リードポインタを生成する第２リードポインタ生成部と、
前記ＦＩＦＯメモリに１つのデータ群を複数回に分けて書き込む書き込み制御部と、
前記ＦＩＦＯメモリから１つのデータ群を複数回に分けて読み出す読み出し制御部と、
を有し、
前記書き込み制御部は、前記第１ライトポインタと前記第２リードポインタとを比較して、前記ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別し、
前記読み出し制御部は、前記第２ライトポインタと前記第１リードポインタとを比較して、前記ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する
ことを特徴とするＦＩＦＯ回路。
【００１４】
上記発明では、複数回に分けたデータ群の書き込みと、複数回に分けたデータ群の読み出しを行うことができる。データ群の書き込みを行う際には、第１ライトポインタと第２リードポインタのカウント値を比較して、ＦＩＦＯメモリに新たなデータ群を書き込み可能な空き領域があるか否かを判別する。データ群の読み出しを行う際には、第２ライトポインタと第１リードポインタのカウント値を比較して、ＦＩＦＯメモリに読み出すことのできるデータ群があるか否かを判別する。また、複数回に分けて１つのデータ群を書き込む際の単位書き込み量やデータ配列と、複数回に分けて１つのデータ群を読み出す際の単位読み出し量やデータ配列を相違させることができるので、ＦＩＦＯを介した非同期データ転送においてデータ配列の変換が可能になる。
【００１５】
［４］前記書き込み制御部は、前記データ群の外部からの入力時のデータ配列に応じて書き込みアドレスを生成し、
前記読み出し制御部は、前記データ群の外部への出力時のデータ配列に応じて読み出しアドレスを生成し、
書き込み時と読み出し時における前記データ群のデータ配列を変換する
ことを特徴とする［１］乃至［３］のいずれか１つに記載のＦＩＦＯ回路。
【００１６】
上記発明では、ＦＩＦＯメモリにデータを書き込む際に、データを書き込む記憶領域を指定する書き込みアドレスを、データ群の外部からの入力時のデータ配列に応じて作成する。また、ＦＩＦＯメモリからデータを読み出す際に、データを読み出す記憶領域を指定する読み出しアドレスを、データ群の外部への出力時のデータ配列に応じて作成する。これにより、データの書き込み時と読み出し時におけるデータ群のデータ配列を変換することができる。たとえば、データ０〜７の順番で書き込んだデータ群を、データ７〜０のようにデータの順番を入れ替えて読み出すことができる。
【００１７】
［５］１つのデータ群を、複数のＦＩＦＯメモリに分散して記憶させると共に、書き込み時と読み出し時でデータ幅を相違させる
ことを特徴とする［１］乃至［４］のいずれか１つに記載のＦＩＦＯ回路。
【００１８】
上記発明では、複数のＦＩＦＯメモリを備えることで、書き込み制御では一度に複数のＦＩＦＯメモリに対してデータを書き込むことが可能になり、読み出し制御では一度に複数のＦＩＦＯメモリからデータを読み出すことが可能となる。一度にデータを書き込むＦＩＦＯメモリの数と、一度にデータを読み出すＦＩＦＯメモリの数を相違させることで、書き込み時と読み出し時でデータ幅を相違させることができる。
【発明の効果】
【００１９】
本発明のＦＩＦＯ回路によれば、メモリや回路の減少による費用削減、および制御回路の簡略化による信頼性を向上させつつ、入力時と出力時のデータ配列を相違させた非同期データ転送を行うことができる。
【図面の簡単な説明】
【００２０】
【図１】本発明のＦＩＦＯ回路を示す全体図である。
【図２】態様例１における書き込み制御時の各種信号等の出力タイミングを示す説明図である。
【図３】態様例１における読み出し制御時の各種信号等の出力タイミングを示す説明図である。
【図４】態様例１において、Ｆｕｌｌ信号の出力開始、出力停止に係る各種信号の出力タイミングを示す説明図である。
【図５】態様例１において、Ｅｍｐｔｙ信号の出力開始、出力停止に係る各種信号の出力タイミングを示す説明図である。
【図６】態様例２におけるＦＩＦＯ制御の様子を示す説明図である。
【図７】態様例２における書き込み制御時の各種信号等の出力タイミングを示す説明図である。
【図８】態様例２における読み出し制御時の各種信号等の出力タイミングを示す説明図である。
【図９】態様例３におけるＦＩＦＯ制御の様子を示す説明図である。
【図１０】態様例３における書き込み制御時の各種信号等の出力タイミングを示す説明図である。
【図１１】態様例３における読み出し制御時の各種信号等の出力タイミングを示す説明図である。
【図１２】態様例４におけるＦＩＦＯ制御の様子を示す説明図である。
【図１３】態様例４における書き込み制御時の各種信号等の出力タイミングを示す説明図である。
【図１４】態様例４における読み出し制御時の各種信号等の出力タイミングを示す説明図である。
【図１５】従来のＦＩＦＯ回路を示す全体図である。
【図１６】１バイト単位でデータの書き込み、読み出しを行うＦＩＦＯ制御の様子を示す説明図である。
【図１７】１バイト単位でデータを書き込み、８バイトのデータ群単位でデータの読み出しを行うＦＩＦＯ制御の様子を示す説明図である。
【発明を実施するための形態】
【００２１】
以下、図面に基づき本発明の実施の形態を説明する。
【００２２】
図１は本発明のＦＩＦＯ回路５の概略構成図を示す。本発明のＦＩＦＯ回路５では、複数回に分けたデータ群の書き込みと、複数回に分けたデータ群の読み出しを行うといったＦＩＦＯ制御が可能である。また、複数回に分けて１つのデータ群を書き込む際の単位書き込み量やデータ配列と、複数回に分けて１つのデータ群を読み出す際の単位読み出し量やデータ配列を相違させることができるので、入力時と出力時のデータ配列を相違させた非同期データ転送が可能となる。
【００２３】
本発明のＦＩＦＯ回路５は、データ入力制御部３０と、ライトカウンタ制御部３１と、メモリライト制御部３２と、ＦＩＦＯ空き制御部３３と、シンクロナイザ３４と、データ出力制御部４０と、リードカウンタ制御部４１と、メモリリード制御部４２と、ＦＩＦＯ空き制御部４３と、シンクロナイザ４４と、デュアルポートメモリ５０を備えて構成されている。
【００２４】
また、ライトカウンタ制御部３１には、ライトアドレス生成部３５と、第１ライトポインタ生成部３６Ａと、第２ライトポインタ生成部３６Ｂが含まれている。リードカウンタ制御部４１には、リードアドレス生成部４５と、第１リードポインタ生成部４６Ａと、第２リードポインタ生成部４６Ｂが含まれている。
【００２５】
図１５に示す従来のＦＩＦＯ回路３との主な相違は、従来のＦＩＦＯ回路３は、ライトポインタ生成部３６、リードポインタ生成部４６をそれぞれ１つずつ有するのに対し、本実施の形態に係るＦＩＦＯ回路５は、それぞれ２つずつ（第１ライトポインタ生成部３６Ａと第２ライトポインタ生成部３６Ｂ、第１リードポインタ生成部４６Ａと第２リードポインタ生成部４６Ｂ）有する点である。
【００２６】
まず、図１のＦＩＦＯ回路５を構成する各部位について説明する。なお、図示省略するが、書き込み側には、書き込み用のクロック（Ｗｃｌｋ（Write Clock）とする）が、読み出し側には、読み出し用のクロック（Ｒｃｌｋ（Read Clock）とする）が入力されており、各部位はそれぞれのクロックに合わせて動作する。すなわち、書き込み側と読み出し側は異なるクロックに基づいて非同期に動作する。
【００２７】
デュアルポートメモリ５０は、データの書き込みと読み出しを非同期に並行して行うことができる、所謂、ＦＩＦＯメモリである。すなわち、データの書き込みに係るクロック（Ｗｃｌｋ）と、データの読み出しに係るクロック（Ｒｃｌｋ）が別々の非同期メモリである。
【００２８】
データ入力制御部３０には、書き込み対象の入力データであるＩｎｄａｔａと共に、その入力されたデータが有効であることを示すvalid信号（このvalid信号をＷｖａｌｉｄと呼ぶ）が外部の装置（ライト側装置）から入力される。
【００２９】
また、データ入力制御部３０には、ＦＩＦＯ空き制御部３３からＦｕｌｌ信号が入力される。Ｆｕｌｌ信号は、デュアルポートメモリ５０に１つのデータ群を書き込み可能な空き領域が存在するか否かを示す信号である。空きが有る場合はＬｏｗが、空きが無い場合はＨｉｇｈの信号がＦＩＦＯ空き制御部３３から出力される。入力されるＦｕｌｌ信号がＬｏｗであれば、デュアルポートメモリ５０にデータを書き込み可能な領域があると判断し、データ入力制御部３０はＩｎｄａｔａとＷｖａｌｉｄを出力する。データ入力制御部３０が出力したＩｎｄａｔａはメモリライト制御部３２へ、Ｗｖａｌｉｄはライトカウンタ制御部３１へ入力される。
【００３０】
ライトカウンタ制御部３１にＷｖａｌｉｄが入力されている間（Ｗｖａｌｉｄが有効な間）は、ライトアドレス生成部３５はＷｃｌｋに同期して順次Ｗａｄｒ(write address)を生成する。Ｗａｄｒは、Ｗｖａｌｉｄと同時にデータ入力制御部３０から入力されたデータ（Ｉｎｄａｔａ）をデュアルポートメモリ５０内のどの記憶領域に書き込むのかを示す情報である。
【００３１】
ライトカウンタ制御部３１は、生成されたＷａｄｒと共にＷｅｎ(Write Enable信号)を出力する。ＷｅｎはＷａｄｒが有効であってＩｎｄａｔａを書き込み可能であることを示す信号である。ライトカウンタ制御部３１は、ＷａｄｒとＷｅｎをデータ入力制御部３０からＷｖａｌｉｄが入力された次のクロックから出力する。
【００３２】
ライトカウンタ制御部３１が出力したＷａｄｒとＷｅｎはメモリライト制御部３２に入力される。メモリライト制御部３２は、デュアルポートメモリ５０へのデータの書き込み制御を行う。メモリライト制御部３２は、入力されたデータであるＩｎｄａｔａをデュアルポートメモリ５０に対する書き込みデータであるＷｄａｔａに変換する。たとえば、シリアル・パラレル変換を行う、あるいは、書き込み対象のＩｎｄａｔａを複数のデュアルポートメモリに分けて書き込む場合にＩｎｄａｔａをそれぞれのデュアルポートメモリに対応するように分割するといった変換を行う。そして、入力されたＷａｄｒ、Ｗｅｎと共にＷｄａｔａをデュアルポートメモリ５０に出力する。
【００３３】
データ出力制御部４０には外部の装置（リード側の装置）からデータの読み出し指令が入力される。また、データ出力制御部４０にはＦＩＦＯ空き制御部４３からＥｍｐｔｙ信号が入力される。Ｅｍｐｔｙ信号は、デュアルポートメモリ５０に読み出し可能なデータ群が存在するか否かを示す信号である。読み出し可能なデータ群が有る場合はＬｏｗが、無い場合はＨｉｇｈの信号がＦＩＦＯ空き制御部４３から出力される
【００３４】
データ出力制御部４０は読み出し指令が入力されたら、入力されるＥｍｐｔｙ信号がＬｏｗか否かを調べ、Ｌｏｗであれば、デュアルポートメモリ５０に読み出すことの可能なデータがあると判断し、Ｒｅｎ（Read enable 信号）を出力する。Ｒｅｎは読み出し動作の実行を指示する信号である。
【００３５】
Ｒｅｎはリードカウンタ制御部４１に入力される。リードアドレス生成部４５は、リードカウンタ制御部４１にＲｅｎが入力されている間は、Ｒｃｌｋに同期して順次Ｒａｄｒ(read address)を生成する。Ｒａｄｒは、データをデュアルポートメモリ５０のどの記憶領域から読み出すかを示す情報である。リードカウンタ制御部４１は、リードアドレス生成部４５が生成したＲａｄｒと、データ出力制御部４０から入力されたＲｅｎをメモリリード制御部４２に対して出力する。
【００３６】
メモリリード制御部４２は、デュアルポートメモリ５０からデータの読み出し制御を行う。メモリリード制御部４２は、リードカウンタ制御部４１から入力されたＲａｄｒとＲｅｎをデュアルポートメモリ５０に出力する。デュアルポートメモリ５０はこのＲａｄｒとＲｅｎの入力に応じてＲｄａｔａ（Read data）を出力する。Ｒｄａｔａは、Ｒａｄｒの示す記憶領域から読み出されたデータである。Ｒｄａｔａはメモリリード制御部４２に入力される。
【００３７】
メモリリード制御部４２は、入力されたＲｄａｔａを出力用のデータであるＯｕｔｄａｔａに変換して出力する。また、Ｏｕｔｄａｔａの出力に合わせて、そのデータが有効であることを示すvalid信号（このvalid信号をＲｖａｌｉｄと呼ぶ）を生成して出力する。
【００３８】
ＯｕｔｄａｔａとＲｖａｌｉｄは、データ出力制御部４０へ出力される。ＯｕｔｄａｔａとＲｖａｌｉｄが入力されたデータ出力制御部４０は、ＯｕｔｄａｔａとＲｖａｌｉｄを外部の装置に出力する。
【００３９】
なお、Ｗａｄｒはデータ群の外部からの入力時のデータ配列（Ｉｎｄａｔａのデータ配列）に応じて作成され、Ｒａｄｒはデータ群の外部への出力時のデータ配列（Ｏｕｔｄａｔａのデータ配列）に応じて作成される。これにより、書き込み時と読み出し時におけるデータ群のデータ配列を変換することができる。
【００４０】
第１ライトポインタ生成部３６Ａは、ＦＩＦＯ空き制御部３３に第１ＷｐｔｒＡ（Write pointerＡ）を出力する。第１ＷｐｔｒＡはいくつ目のデータ群の書き込みを開始したのかを示すカウント値である。ライトカウンタ制御部３１にＷｖａｌｉｄが入力されている間（Ｗｖａｌｉｄが有効な間）は、第１ライトポインタ生成部３６Ａは、データ群を構成するデータのうち、最初に書き込まれるデータのクロックに合わせて第１ＷｐｔｒＡをインクリメントする。
【００４１】
第２ライトポインタ生成部３６Ｂは、シンクロナイザ４４に第２ＷｐｔｒＢ（Write pointerＢ）を出力する。第２ＷｐｔｒＢはいくつ目のデータ群の書き込みを完了したのかを示すカウント値である。ライトカウンタ制御部３１にＷｖａｌｉｄが入力されている間（Ｗｖａｌｉｄが有効な間）は、第１ライトポインタ生成部３６Ａは、データ群を構成するデータのうち、最後に書き込まれるデータのクロックに合わせて第２ＷｐｔｒＢをインクリメントする。
【００４２】
なお、予め１つのデータ群を何回に分けて、どのようなデータ配列で書き込むかは設定してあるものとする。データ群の最後のデータの書き込みは、上記の設定と、書き始めからの書き込み回数（クロック）とから認識される。
【００４３】
第１リードポインタ生成部４６Ａは、ＦＩＦＯ空き制御部４３に第１ＲｐｔｒＡ（Read pointerＡ）を出力する。第１ＲｐｔｒＡはいくつ目のデータ群の読み出しを開始したのかを示すカウント値である。リードカウンタ制御部４１にＲｅｎが入力されている間、データ群を構成するデータのうち、最初に読み出すデータのクロックに合わせて、第１ＲｐｔｒＡをインクリメントする。
【００４４】
第２リードポインタ生成部４６Ｂは、シンクロナイザ３４に第２ＲｐｔｒＢ（Read pointerＢ）を出力する。第２ＲｐｔｒＢはいくつ目のデータ群の読み出しを完了したのかを示すカウント値である。リードカウンタ制御部４１にＲｅｎが入力されている間、データ群を構成するデータのうち、最後に読み出すデータのクロックに合わせて、第２ＲｐｔｒＢをインクリメントする。
【００４５】
なお、予め１つのデータ群を何回に分けて、どのようなデータ配列で読み出すかは設定してあるものとする。データ群の最後のデータの読み出しは、上記の設定と、読み出しを開始してからの読み出し回数（クロック）とから認識される。
【００４６】
リードポインタ（第１ＲｐｔｒＡ、第２ＲｐｔｒＢ）やライトポインタ（第１ＷｐｔｒＡ、第２ＷｐｔｒＢ）は、リセットされるまで、カウントアップを続ける。本発明のＦＩＦＯ回路５では、非同期データ転送する最大データ量が予め分かっており、カウンタのサイズはそれ以上になっている。たとえば、１ページ分の画像データの非同期データ転送が完了する毎に、リードポインタ、ライトポインタはリセットされる。
【００４７】
シンクロナイザ３４に入力された第２ＲｐｔｒＢは、Ｒｃｌｋに同期して入力されている。シンクロナイザ３４は、この入力された第２ＲｐｔｒＢをＷｃｌｋに同期させて出力する。シンクロナイザ３４から出力された第２ＲｐｔｒＢはＦＩＦＯ空き制御部３３に入力される。
【００４８】
シンクロナイザ４４に入力された第２ＷｐｔｒＢは、Ｗｃｌｋに同期して入力されている。シンクロナイザ４４は、この入力された第２ＷｐｔｒＢをＲｃｌｋに同期させて出力する。シンクロナイザ４４から出力された第２ＷｐｔｒＢはＦＩＦＯ空き制御部４３に入力される。
【００４９】
ＦＩＦＯ空き制御部３３は、第１ライトポインタ生成部３６Ａから入力される第１ＷｐｔｒＡと、シンクロナイザ３４から入力される第２ＲｐｔｒＢとの大小を比較してＦｕｌｌ信号の出力を制御する。すなわち、デュアルポートメモリ５０に記憶可能なデータ群の数をＱとした場合、
第１ＷｐｔｒＡ＝第２ＲｐｔｒＢ＋Ｑ
ならばデュアルポートメモリ５０に書き込み可能な記憶領域が無いとしてＨｉｇｈのＦｕｌｌ信号を出力し、
第１ＷｐｔｒＡ＜第２ＲｐｔｒＢ＋Ｑ
ならばデュアルポートメモリ５０に書き込み可能な記憶領域があるとしてＬｏｗのＦｕｌｌ信号を出力する。
【００５０】
ＦＩＦＯ空き制御部４３は、第１リードポインタ生成部４６Ａから入力される第１ＲｐｔｒＡとシンクロナイザ４４から入力される第２ＷｐｔｒＢとの大小を比較してＥｍｐｔｙ信号の出力を制御する。すなわち、
第２ＷｐｔｒＢ＝第１ＲｐｔｒＡ
ならばデュアルポートメモリ５０に読み出し可能なデータ群が無いとしてＨｉｇｈのＥｍｐｔｙ信号を出力し、
第２ＷｐｔｒＢ＞第１ＲｐｔｒＡ
ならばデュアルポートメモリ５０に読み出し可能なデータ群があるとしてＬｏｗのＥｍｐｔｙ信号を出力する。
【００５１】
以後、複数の態様例を挙げながら、ＦＩＦＯ回路５の動作について説明する。
【００５２】
＜態様例１＞
態様例１では、１つのデータ群は８バイト単位であり、書き込みは１バイトずつ８回に分けて行い、読み出しも１バイト単位で８回に分けて行う。データ配列は８バイト単位でＬＳＢとＭＳＢを入れ替えるように変換する。
【００５３】
図２は、態様例１において１バイトずつデータの書き込み制御を行う際の当該書き込み制御に係る信号やデータ等が出力されるタイミングを示す。Ｗｃｌｋは、書き込み制御に係るクロックを示す。書き込み制御に係る各種のデータや信号等は、このＷｃｌｋに合わせて出力される。図中のＴ１〜Ｔ４は、それぞれＷｃｌｋが出力されるタイミングを示す。
【００５４】
図２のＦｕｌｌは、ＦＩＦＯ空き制御部３３から出力されるＦｕｌｌ信号を示す。図中では、ＬｏｗのＦｕｌｌ信号が出力され続けている。
【００５５】
図２のＷｖａｌｉｄは、データ出力制御部４０から出力されるＷｖａｌｉｄを示す。図中では、Ｔ１以後、継続して出力されている。
【００５６】
図２のＩｎｄａｔａは、データ出力制御部４０から出力されるＩｎｄａｔａを示す。図中では、Ｔ１以後、Ｗｃｌｋに同期してデータ０（図中ではＤ０と示す）、データ１、データ２・・・と順番に出力されている。
【００５７】
図２のＷｅｎはメモリライト制御部３２から出力されるＷｅｎを示す。図中では、Ｔ２以後、継続して出力されている。
【００５８】
図２のＷｄａｔａは、メモリライト制御部３２から出力されるＷｄａｔａを示す。図中では、Ｔ２以後、Ｗｃｌｋに同期してデータ０（図中ではＤ０と示す）、データ１、データ２・・・と順番に出力されている。
【００５９】
図２のＷａｄｒは、メモリライト制御部３２から出力されるＷａｄｒを示す。図中では、Ｔ２以後、Ｗｃｌｋに同期して０、１、２、３・・・と順番に出力されている。
【００６０】
図２の第１ＷｐｔｒＡは、第１ライトポインタ生成部３６Ａが出力するカウント値を示す。図２の第２ＷｐｔｒＢは、第２ライトポインタ生成部３６Ｂが出力するカウント値を示す。
【００６１】
まず、Ｔ１からＩｎｄａｔａの出力が開始される。メモリライト制御部３２に入力されたＩｎｄａｔａは、１クロック分の間にＷｄａｔａに変換される。そしてメモリライト制御部３２はＴ２からＷｄａｔａの出力を開始する。
【００６２】
Ｔ２では、Ｗｄａｔａと共に、ＷｅｎとＷａｄｒの出力が開始される。デュアルポートメモリ５０は、メモリライト制御部３２から出力されたＷｅｎが入力されている間、Ｗａｄｒが示す記憶領域にＷｄａｔａを書き込む。
【００６３】
Ｔ２で出力されるＷｄａｔａ（図中Ｄ０）は、８バイトのデータ群を構成するデータのうち、最初に書き込むデータである。第１ライトポインタ生成部３６Ａは、Ｔ２にて、第１ＷｐｔｒＡをインクリメント（０→１）する。
【００６４】
Ｔ３にて、８バイトのデータ群を構成するデータのうち、最後のデータとなるＷｄａｔａ（図中のＤ７）が出力されるので、第２ライトポインタ生成部３６Ｂは、第２ＷｐｔｒＢをインクリメント（０→１）する。
【００６５】
Ｔ４で出力されるＷｄａｔａ（図中Ｄ８）は、Ｔ２〜Ｔ４までに書き込まれたデータ群の次のデータ群を構成するデータのうち、最初に書き込まれるデータなので、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメント（１→２）する。
【００６６】
このようにして、１バイト単位でデータを書き込みつつ、８バイトのデータ群となるデータの書き込み開始時には、第１ＷｐｔｒＡをインクリメントし、書き込み完了時には、第２ＷｐｔｒＢをインクリメントする。これにより、読み出し側は、いくつのデータ群の書き込みが完了したかが分かる。
【００６７】
図３は、態様例１において、８バイトのデータ群を１バイトずつ読み出す際の当該読み出し制御に係る信号やデータ等が出力されるタイミングを示す。ここでは、８バイトのデータのうち、番号が大きいものから順番に出力される。たとえばＤ０〜Ｄ７のデータ群を読み出す際には、Ｄ７、Ｄ６、Ｄ５、Ｄ４・・・と順番に読み出す。また、各バイト内でのビット配列も逆順にされる。すなわち、８バイト単位でビット配列が逆順になるようにデータ配列が変換される。Ｒｃｌｋは、読み出し制御に係るクロックを示す。読み出し制御に係る各種のデータや信号等は、このＲｃｌｋに合わせて出力される。Ｓ１〜Ｓ４は、それぞれＲｃｌｋが出力されるタイミングを示す。
【００６８】
図３のＥｍｐｔｙは、ＦＩＦＯ空き制御部４３から出力されるＥｍｐｔｙ信号を示す。図中では、Ｓ１までは、Ｈｉｇｈが出力されており、Ｓ１以後は、Ｌｏｗが出力されている。
【００６９】
図３のＲｅｎは、メモリリード制御部４２から出力されるＲｅｎを示す。図中では、Ｓ１以後、継続して出力されている。
【００７０】
図３のＲｄａｔａは、デュアルポートメモリ５０から出力されるＲｄａｔａを示す。デュアルポートメモリ５０から出力されたＲｄａｔａは、メモリリード制御部４２に入力される。
【００７１】
図３のＲａｄｒは、メモリリード制御部４２から出力されるＲａｄｒを示す。図中では、Ｓ１以後、Ｒｃｌｋに同期して７、６・・・０、１５、１４・・・８、２３・・・と出力されている。
【００７２】
図３の第１ＲｐｔｒＡは、第１リードポインタ生成部４６Ａが出力するカウント値を示す。図３の第２ＲｐｔｒＢは、第２リードポインタ生成部４６Ｂが出力するカウント値を示す。
【００７３】
図３のＲｖａｌｉｄは、メモリリード制御部４２から出力されるＲｖａｌｉｄを示す。図３のＯｕｔｄａｔａは、メモリリード制御部４２から出力されるＯｕｔｄａｔａを示す。
【００７４】
まず、Ｓ１にて、ＥｍｐｔｙがＬｏｗになり、メモリリード制御部４２からＲｅｎの出力が開始される。メモリリード制御部４２からはＲｅｎと共にＲａｄｒも出力される。また、このＲｅｎとＲａｄｒが入力されたデュアルポートメモリ５０はＲｄａｔａを出力する。
【００７５】
メモリリード制御部４２では、１クロック分の間に、読み出されたＲｄａｔａを出力用のデータであるＯｕｔｄａｔａに変換する。その後、メモリリード制御部４２は、Ｓ２から、Ｏｕｔｄａｔａと共にＲｖａｌｉｄを出力する。
【００７６】
Ｓ１で出力されるＲｄａｔａ（図中Ｄ７）は、８バイトのデータ群を構成するデータのうち、最初に読み出されるデータである。第１リードポインタ生成部４６Ａは、Ｓ１にて、第１ＲｐｔｒＡをインクリメント（０→１）する。
【００７７】
Ｓ３で出力されるＲｄａｔａ（図中のＤ０）は、８バイトのデータ群を構成するデータのうち、最後に読み出されるデータである。第２リードポインタ生成部４６Ｂは、Ｓ３にて、第２ＲｐｔｒＢをインクリメント（０→１）する。
【００７８】
Ｓ４で出力されるＲｄａｔａ（図中Ｄ１５）は、Ｓ１〜Ｓ４で読み出されたデータ群の次のデータ群を構成するデータのうち、最初に読み出されるデータなので、第１リードポインタ生成部４６Ａは、第１ＲｐｔｒＡをインクリメント（１→２）する。
【００７９】
このようにして、１バイトずつ、８バイトのデータ群を読み出す。データ群の読み出し開始時には、第１ＲｐｔｒＡをインクリメントし、読み出し完了時には、第２ＲｐｔｒＢをインクリメントする。これにより、書き込み側は、いくつのデータ群が読み出されたのかがわかる。また、８バイトのデータ群を読み出す際には、そのデータ群を構成するデータの順番を入れ替えて（８バイト単位でＬＳＢ（最下位ビット）とＭＳＢ（最上位ビット）を入れ替えて）読み出すことができ、データ転送と同時にデータ配列の変換が行われる。
【００８０】
図４は、態様例１におけるＦＩＦＯ回路５の書き込み制御において、デュアルポートメモリ５０内に、新たなデータ群を書き込み可能な記憶領域が無くなった場合の一例を示す。記憶領域の有無に合わせてＦｕｌｌ信号のＨｉｇｈとＬｏｗが切り替わる。図４のＷｃｌｋ、Ｆｕｌｌ、第１ＷｐｔｒＡ、第２ＲｐｔｒＢは、図２、図３と共通のものを示す。Ｔ５〜Ｔ８は、それぞれＷｃｌｋが出力されるタイミングを示す。
【００８１】
デュアルポートメモリ５０に保存可能なデータ群の最大数をＱとし、態様例１では、Ｑ＝１６とする。
【００８２】
まず、Ｔ５から、読み出し制御時における新たなデータ群の書き込みが開始される。新たなデータ群の書き込みが開始されるので、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメントする（ＡＰ１５→ＡＰ１６）。
【００８３】
第１ＷｐｔｒＡのカウント値が１６になった時点（Ｔ５）での第２ＲｐｔｒＢのカウント値は０（読み出しが完了したデータ群の数が０）である。よって
・（第１ＷｐｔｒＡ＝第２ＲｐｔｒＢ＋Ｑ、１６＝０＋１６）
となる。すなわち、デュアルポートメモリ５０に新たなデータ群を書き込み可能な記憶領域が無くなったので、ＦＩＦＯ空き制御部３３は、Ｆｕｌｌ信号を、ＬｏｗからＨｉｇｈに切り替える。Ｈｉｇｈに切り替わったことで、次の新たなデータ群の書き込みは不可能になる。なお、現在書き込み中のデータ群の書き込みは継続される。
【００８４】
その後、Ｔ６にて、１つのデータ群の読み出しが完了し、第２リードポインタ生成部４６Ｂが、第２ＲｐｔｒＢをインクリメントする（０→１）。
【００８５】
Ｔ６では、１つのデータ群の読み出しが終了したので、
・（第１ＷｐｔｒＡ＜第２ＲｐｔｒＢ＋Ｑ、１６＜１＋１６）
となる。すなわち、デュアルポートメモリ５０に新たなデータ群を書き込み可能な記憶領域があるので、ＦＩＦＯ空き制御部３３は次のクロックから（Ｔ７から）Ｆｕｌｌ信号をＨｉｇｈからＬｏｗに切り替える。Ｌｏｗに切り替わったことで、次の新たなデータ群の書き込みが可能となる。
【００８６】
その後、Ｔ８にて、Ｔ５から書き込みを開始したデータ群の書き込みが終了し、新たなデータ群の書き込みが開始される。Ｔ８にて、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメントする（１６→１７）。
【００８７】
Ｔ８で、第１ＷｐｔｒＡのカウント値が１７になったので、
・（第１ＷｐｔｒＡ＝第２ＲｐｔｒＢ＋Ｑ、１７＝１＋１６）
となる。すなわち、デュアルポートメモリ５０に新たなデータ群を書き込み可能な記憶領域が無いので、ＦＩＦＯ空き制御部３３は、Ｆｕｌｌ信号を、ＬｏｗからＨｉｇｈに再び切り替える。Ｈｉｇｈに切り替わったことで、次の新たなデータ群の書き込みは不可能になる。
【００８８】
このように、ＦＩＦＯ回路５では、データ群の書き込み開始に係るカウント値である第１ＷｐｔｒＡと、データ群の読み出し完了に係るカウント値である第２ＲｐｔｒＢを比べることで、新たなデータ群の書き込みが可能か否かを判断する。
【００８９】
図５は、態様例１におけるＦＩＦＯ回路５の読み出し制御において、デュアルポートメモリ５０内に、新たに読み出し可能なデータ群が無くなった場合の一例を示す。読み出し可能なデータ群の有無に合わせてＥｍｐｔｙ信号のＨｉｇｈとＬｏｗが切り替わる。図５のＲｃｌｋ、Ｅｍｐｔｙ、第１ＲｐｔｒＡ、第２ＷｐｔｒＢは、図２、図３のものと共通のものを示す。Ｓ５〜Ｓ８は、それぞれＲｃｌｋが出力されるタイミングを示す。
【００９０】
まず、Ｓ５から、新たなデータ群の読み出しが開始される。新たなデータ群の読み出しが開始されるので、第１リードポインタ生成部４６Ａは、第１ＲｐｔｒＡをインクリメントする（７→８）。
【００９１】
第１ＲｐｔｒＡのカウント値が８になった時点（Ｓ５）での第２ＷｐｔｒＢのカウント値が８（書き込みが完了したデータ群の数が８）になる。よって
・（第２ＷｐｔｒＢ＝第１ＲｐｔｒＡ、８＝８）
となる。すなわち、デュアルポートメモリ５０に新たに読み出し可能なデータ群が無いので、ＦＩＦＯ空き制御部４３は、Ｅｍｐｔｙ信号を、ＬｏｗからＨｉｇｈに切り替える。Ｈｉｇｈに切り替わったことで、次の新たなデータ群の読み出しは不可能になる。なお、現在読み出し中のデータ群の読み出しは継続される。
【００９２】
その後、Ｓ６にて、１つのデータ群の書き込みが完了し、第２ライトポインタ生成部３６Ｂが、第２ＷｐｔｒＢをインクリメントする（８→９）。
【００９３】
Ｓ６では、１つのデータ群の書き込みが終了したので、
・（第２ＷｐｔｒＢ＜第１ＲｐｔｒＡ、９＜８）
となる。すなわち、デュアルポートメモリ５０に新たに読み出し可能なデータ群が存在するので、ＦＩＦＯ空き制御部４３は次のクロックから（Ｓ７から）Ｅｍｐｔｙ信号をＨｉｇｈからＬｏｗに切り替える。Ｌｏｗに切り替わったことで、次の新たなデータ群の読み出しが可能となる。
【００９４】
その後、Ｓ８にて、Ｓ５から読み出しを開始したデータ群の読み出しが終了し、新たなデータ群の読み出しが開始されるので、第１リードポインタ生成部４６Ａは、第１ＲｐｔｒＡをインクリメントする（８→９）。
【００９５】
Ｓ８で、第１ＲｐｔｒＡのカウント値が９になったので、
・（第１ＲｐｔｒＡ＝第２ＷｐｔｒＢ、９＝９）
となる。すなわち、デュアルポートメモリ５０に新たに読み出し可能なデータ群が無いので、ＦＩＦＯ空き制御部４３は、Ｅｍｐｔｙ信号を、ＬｏｗからＨｉｇｈに再び切り替える。Ｈｉｇｈに切り替わったことで、次の新たなデータ群の読み出しは不可能になる。
【００９６】
このように、ＦＩＦＯ回路５では、データ群の読み出し開始に係るカウント値である第１ＲｐｔｒＡと、データ群の書き込み完了に係るカウント値である第２ＷｐｔｒＢを比べることで、新たなデータ群の読み出しが可能か否かを判断する。
【００９７】
＜態様例２＞
態様例１では、ＦＩＦＯ回路５は１つのＦＩＦＯメモリ（デュアルポートメモリ５０）を備えていたが、態様例２では、４つのＦＩＦＯメモリを備えた（デュアルポートメモリ５０に代わってデュアルポートメモリ５１〜５４を備えた）ＦＩＦＯ回路５が、ＦＩＦＯ制御を行う場合について説明する。
【００９８】
図６は、態様例２におけるＦＩＦＯ回路５が、ＦＩＦＯ制御を行う様子を示す。態様例２では、１つのデータ群は４バイト単位である。書き込み制御では、１バイトずつ４回に分けて、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）に順番に書き込む。読み出し制御では、４つのＦＩＦＯメモリから１バイトずつ、一度に読み出す。図６では、１バイト幅の入力データを４バイトのパラレルデータに変換し、４バイト幅のデータを出力している。
【００９９】
図７は、図６のＦＩＦＯ制御のうち、書き込み制御に係る信号やデータ等が出力されるタイミングを示す。図中のＷｃｌｋ、Ｆｕｌｌ、Ｗｖａｌｉｄ、Ｉｎｄａｔａ、Ｗｄａｔａ、Ｗａｄｒ、第１ＷｐｔｒＡ、第２ＷｐｔｒＢは、図２と共通のものを示す。書き込み制御に係る各種のデータや信号等は、Ｗｃｌｋに合わせて出力される。図中のＴ１〜Ｔ６は、それぞれＷｃｌｋが出力されるタイミングを示す。なお、図７でも、図２と同様にＬｏｗのＦｕｌｌ信号が出力され続けている。
【０１００】
態様例２では、メモリライト制御部３２が、データを書き込むデュアルポートメモリ（５１〜５４）に応じて、異なるＷｅｎ（Ｗｅｎ/Ｍ１〜Ｍ４）を出力する。Ｗｅｎ/Ｍ１は、デュアルポートメモリ５１に、Ｗｅｎ/Ｍ２は、デュアルポートメモリ５２に、Ｗｅｎ/Ｍ３は、デュアルポートメモリ５３に、Ｗｅｎ/Ｍ４は、デュアルポートメモリ５４にデータの書き込みを許可する信号である。これらの４つのＷｅｎ（Ｗｅｎ/Ｍ１〜Ｍ４）を異なるタイミングで順番に出力することで、デュアルポートメモリ５１〜５４にデータが順番に書き込まれていく。
【０１０１】
まず、Ｔ１からＩｎｄａｔａの出力が開始される。メモリライト制御部３２に入力されたＩｎｄａｔａは、１クロック分の間にＷｄａｔａに変換される。そしてメモリライト制御部３２はＴ２からＷｄａｔａの出力を開始する。
【０１０２】
Ｔ２では、Ｗｄａｔａと共に、Ｗｅｎ（Ｍ１〜Ｍ４）とＷａｄｒの出力が開始されている。メモリライト制御部３２から、出力されたＷｅｎ（Ｍ１〜Ｍ４）に対応するデュアルポートメモリ５１〜５４にＷｄａｔａを書き込む。
【０１０３】
たとえば、図７では、Ｗｅｎ/Ｍ１は、Ｔ２で出力を開始し、Ｔ３で出力を停止する。Ｗｅｎ/Ｍ１に合わせて、Ｗｄａｔａのデータ０（図中ではＤ０と示す）が、デュアルポートメモリ５１に書き込まれる。Ｗｅｎ/Ｍ２は、Ｔ３で出力を開始し、Ｔ４で出力を停止する。Ｗｅｎ/Ｍ２に合わせてＷｄａｔａのデータ１（図中ではＤ１と示す）がデュアルポートメモリ５２に書き込まれる。Ｗｅｎ/Ｍ３は、Ｔ４で出力を開始し、Ｔ５で出力を停止する。Ｗｅｎ/Ｍ３に合わせて、Ｗｄａｔａのデータ２（図中ではＤ２と示す）が、デュアルポートメモリ５３に書き込まれる。Ｗｅｎ/Ｍ４は、Ｔ５で出力を開始し、Ｔ６で出力を停止する。Ｗｅｎ/Ｍ４に合わせて、Ｗｄａｔａのデータ３（図中ではＤ３と示す）が、デュアルポートメモリ５４に書き込まれる。
【０１０４】
Ｗｄａｔａが書き込まれる際には、デュアルポートメモリ５１〜５４においてＷａｄｒが示す記憶領域にＷｄａｔａを書き込む。態様例２では、Ｗａｄｒは、Ｔ２以後のＷｃｌｋに同期して４クロックごとに０、１、２、３・・・と順番に出力されている。出力されたＷａｄｒは、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）にデータを書き込む際に共通して使用される。たとえば、図７では、Ｔ２〜Ｔ６間で出力されているＷａｄｒ（アドレス０）に従って、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）にデータが書き込まれる。
【０１０５】
Ｔ２で出力されるＷｄａｔａ（図中Ｄ０）は、４バイトのデータ群を構成するデータのうち、最初に書き込むデータである。第１ライトポインタ生成部３６Ａは、Ｔ２にて、第１ＷｐｔｒＡをインクリメント（０→１）する。
【０１０６】
Ｔ５にて、４バイトのデータ群を構成するデータのうち、最後のデータとなるＷｄａｔａ（図中のＤ３）が出力されるので、第２ライトポインタ生成部３６Ｂは、第２ＷｐｔｒＢをインクリメント（０→１）する。
【０１０７】
Ｔ６で出力されるＷｄａｔａ（図中Ｄ４）は、Ｔ２〜Ｔ６までに書き込まれたデータ群の次のデータ群を構成するデータのうち、最初に書き込まれるデータなので、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメント（１→２）する。
【０１０８】
このようにして、１バイト単位で４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）にデータを順番に書き込みつつ、４バイトのデータ群となるデータの書き込み開始時には、第１ＷｐｔｒＡをインクリメントし、書き込み完了時には、第２ＷｐｔｒＢをインクリメントする。
【０１０９】
図８は、態様例２の読み出し制御（４バイトのデータ群単位でデータを読み出す制御）において、当該読み出し制御に係る信号やデータ等が出力されるタイミングを示す。Ｒｃｌｋ、Ｅｍｐｔｙ、Ｒｅｎ、Ｒａｄｒ、第１ＲｐｔｒＡ、第２ＲｐｔｒＢ、Ｒｖａｌｉｄ、Ｏｕｔｄａｔａは図３と共通のものを示す。読み出し制御に係る各種のデータや信号等は、Ｒｃｌｋに合わせて出力される。図中のＳ１〜Ｓ３は、それぞれＲｃｌｋが出力されるタイミングを示す。
【０１１０】
態様例２では、１つのデータ群に属する４つのデータ（Ｒｄａｔａ/Ｍ１〜Ｍ４）を４つのデュアルポートメモリ（５１〜５４）から同時に読み出す。図８のＲｄａｔａ/Ｍ１はデュアルポートメモリ５１から、Ｒｄａｔａ/Ｍ２はデュアルポートメモリ５２から、Ｒｄａｔａ/Ｍ３はデュアルポートメモリ５３から、Ｒｄａｔａ/Ｍ４はデュアルポートメモリ５４から読み出したデータを示す。
【０１１１】
まず、Ｓ１にて、ＥｍｐｔｙがＬｏｗになり、メモリリード制御部４２からＲｅｎの出力が開始される。メモリリード制御部４２からはＲｅｎと共にＲａｄｒも出力される。ＲａｄｒはＳ１以後のＲｃｌｋに同期して０、１、２、３・・・と順番に出力される。また、このＲｅｎとＲａｄｒが入力されたデュアルポートメモリ５１〜５４は、それぞれＲｄａｔａ（Ｍ１〜Ｍ４）を出力する。出力されたＲｄａｔａ（Ｍ１〜Ｍ４）は、メモリリード制御部４２に入力される。
【０１１２】
メモリリード制御部４２では、１クロック分の間に、４つのメモリから同時に出力されたＲｄａｔａを出力用のデータであるＯｕｔｄａｔａに変換する。その後、メモリリード制御部４２は、Ｓ２から、Ｏｕｔｄａｔａと共にＲｖａｌｉｄを出力する。Ｏｕｔｄａｔａは、４バイトのデータ群単位で出力される。
【０１１３】
Ｓ１では、４バイトのデータ群を構成する４つのデータ（Ｒｄａｔａ/Ｍ１〜Ｍ４、Ｄ０〜Ｄ３）の読み出しが同時に開始されるので、第１リードポインタ生成部４６Ａによる、第１ＲｐｔｒＡのインクリメントと第２リードポインタ生成部４６Ｂによる第２ＲｐｔｒＢのインクリメントは同時に行われる。
【０１１４】
すなわち、Ｓ１にて、第１リードポインタ生成部４６Ａは第１ＲｐｔｒＡをインクリメント（０→１）し、第２リードポインタ生成部４６Ｂは、第２ＲｐｔｒＢをインクリメント（０→１）する。
【０１１５】
同様に、Ｓ２では、次のデータ群を構成する４つのデータ（Ｒｄａｔａ/Ｍ１〜Ｍ４、Ｄ４〜Ｄ７）の読み出しが同時に開始される。そのため、Ｓ２にて、第１リードポインタ生成部４６Ａは、第１ＲｐｔｒＡをインクリメント（１→２）する。また第２リードポインタ生成部４６Ｂは、第２ＲｐｔｒＢをインクリメント（１→２）する。
【０１１６】
このようにして、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）から同時に１バイトずつ、計４バイトのデータ群単位でデータを読み出すのでデータ群の最初のデータの読み出しとデータ群の最後のデータの読み出しは同時に行われる。したがって、データ群の読み出し開始時に第１ＲｐｔｒＡのインクリメントと第２ＲｐｔｒＢのインクリメントが同時に行われる。
【０１１７】
態様例２の場合、１つのデータ群の読み出しを１回の読み出し動作で行うので、第１リードポインタ（第１ＲｐｔｒＡ）と第２リードポインタ（第２ＲｐｔｒＢ）は別々に生成する必要はなく、１つの共通したリードポインタでもかまわない。
【０１１８】
態様例２では、一度にデータを書き込むＦＩＦＯメモリの数と、一度にデータを読み出すＦＩＦＯメモリの数を相違させることで、書き込みと読み出しの際のデータ幅を相違させることができる。なお、複数のＦＩＦＯメモリからデータを同時に読み出すことで、データの読み出し速度が、ＦＩＦＯメモリが１つの場合に比べて高速化する。
【０１１９】
＜態様例３＞
態様例３でも、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）を備えたＦＩＦＯ回路５が、ＦＩＦＯ制御を行う場合について説明する。
【０１２０】
図９は、態様例３におけるＦＩＦＯ回路５が、ＦＩＦＯ制御を行う様子を示す。態様例３では、１つのデータ群は４バイト単位である。書き込み制御では、４バイトのデータ群を、１バイト単位で４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）に同時に書き込む。読み出し制御では、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）から１バイトずつデータを順番に読み出す。つまり、図９では、１バイト×４ｃｈのパラレルデータを、１バイト幅のシリアルデータに変換して出力している。
【０１２１】
図１０は、図９のＦＩＦＯ制御のうち、書き込み制御に係る信号やデータ等が出力されるタイミングを示す。図中のＷｃｌｋ、Ｆｕｌｌ、Ｗｖａｌｉｄ、Ｉｎｄａｔａ、Ｗｅｎ（Ｍ１〜Ｍ４）、Ｗａｄｒ、第１ＷｐｔｒＡ、第２ＷｐｔｒＢは、図７と共通のものを示す。書き込み制御に係る各種のデータや信号等は、Ｗｃｌｋに合わせて出力される。図中のＴ１〜Ｔ３は、それぞれＷｃｌｋが出力されるタイミングを示す。なお、図１０でも、図７と同様にＬｏｗのＦｕｌｌ信号が出力され続けている。
【０１２２】
態様例３では、書き込み先のＦＩＦＯメモリに応じて、４つのＷｄａｔａ（Ｍ１〜Ｍ４）を示す。Ｗｄａｔａ/Ｍ１はデュアルポートメモリ５１に書き込まれるデータである。Ｗｄａｔａ/Ｍ２はデュアルポートメモリ５２に書き込まれるデータである。Ｗｄａｔａ/Ｍ３はデュアルポートメモリ５３に書き込まれるデータである。Ｗｄａｔａ/Ｍ４はデュアルポートメモリ５４に書き込まれるデータである。
【０１２３】
まず、Ｔ１からＩｎｄａｔａの出力が開始される。態様例３では、４バイトのデータ群単位でＩｎｄａｔａが出力される。メモリライト制御部３２に入力されたＩｎｄａｔａは、１クロック分の間にＷｄａｔａに変換される。そしてメモリライト制御部３２はＴ２からＷｄａｔａ（Ｍ１〜Ｍ４）の出力を開始する。
【０１２４】
Ｔ２では、Ｗｄａｔａ（Ｍ１〜Ｍ４）と共に、Ｗｅｎ（Ｍ１〜Ｍ４）とＷａｄｒの出力が開始されている。態様例３では、Ｗｅｎ（Ｍ１〜Ｍ４）は同時に出力されている。メモリライト制御部３２から、出力されたＷｅｎ（Ｍ１〜Ｍ４）に対応するデュアルポートメモリ５１〜５４にＷｄａｔａ（Ｍ１〜Ｍ４）が書き込まれる。
【０１２５】
たとえば、図１０では、Ｗｅｎ/Ｍ１〜Ｍ４は、Ｔ２から、同時に出力を開始する。Ｗｅｎ/Ｍ１に合わせて、Ｗｄａｔａ/Ｍ１のデータ０（図中ではＤ０と示す）が、デュアルポートメモリ５１に、書き込まれる。Ｗｅｎ/Ｍ２に合わせてＷｄａｔａ/Ｍ２のデータ１（図中ではＤ１と示す）がデュアルポートメモリ５２に書き込まれる。Ｗｅｎ/Ｍ３に合わせて、Ｗｄａｔａ/Ｍ３のデータ２（図中ではＤ２と示す）が、デュアルポートメモリ５３に書き込まれる。Ｗｅｎ/Ｍ４に合わせて、Ｗｄａｔａ/Ｍ４のデータ３（図中ではＤ３と示す）が、デュアルポートメモリ５４に書き込まれる。
【０１２６】
Ｗｄａｔａが書き込まれる際には、Ｗａｄｒが示す記憶領域にＷｄａｔａを書き込む。態様例３では、Ｗａｄｒは、Ｔ２以後のＷｃｌｋに同期して１クロックごとに０、１、２、３・・・と順番に出力されている。出力されたＷａｄｒは、４つのメモリにデータを書き込む際に共通して使用される。
【０１２７】
Ｔ２では、４バイトのデータ群を構成する４つのＷｄａｔａ（Ｄ０からＤ３）の書き込みが同時に開始されるので、第１ライトポインタ生成部３６Ａによる第１ＷｐｔｒＡのインクリメントと第２ライトポインタ生成部３６Ｂによる第２ＷｐｔｒＢのインクリメントは同時に行われる。
【０１２８】
すなわち、Ｔ２にて、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメント（０→１）し、第２ライトポインタ生成部３６Ｂは、第２ＷｐｔｒＢをインクリメント（０→１）する。
【０１２９】
同様に、Ｔ３には、次のデータ群を構成する４つのデータ（Ｄ４からＤ７）の書き込みが同時に開始される。そのため、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメント（１→２）する。また、第２ライトポインタ生成部３６Ｂは、第２ＷｐｔｒＢをインクリメント（１→２）する。
【０１３０】
このようにして、４バイトのデータ群を１バイト単位で４つのメモリに一度に書き込むので、データ群の最初のデータの書き込みとデータ群の最後のデータの書き込みは同時に行われる。したがって、データ群の書き込み開始時に第１ＷｐｔｒＡのインクリメントと第２ＷｐｔｒＢのインクリメントが同時に行われる。
【０１３１】
態様例３の場合、１つのデータ群の書き込みを１回の書き込み動作で行うので、第１ライトポインタ（第１ＷｐｔｒＡ）と第２ライトポインタ（第２ＷｐｔｒＢ）は別々に生成する必要はなく、１つの共通したライトポインタでもかまわない。
【０１３２】
図１１は、態様例３の読み出し制御（４つのメモリから１バイトずつ順番にデータを読み出す）において、当該読み出し制御に係る信号やデータ等が出力されるタイミングを示す。Ｒｃｌｋ、Ｅｍｐｔｙ、Ｒｄａｔａ（Ｍ１〜Ｍ４）Ｒａｄｒ、第１ＲｐｔｒＡ、第２ＲｐｔｒＢ、Ｒｖａｌｉｄ、Ｏｕｔｄａｔａは図８と共通のものを示す。読み出し制御に係る各種のデータや信号等は、Ｒｃｌｋに合わせて出力される。図中のＳ１〜Ｓ５は、それぞれＲｃｌｋが出力されるタイミングを示す。
【０１３３】
図１１のＲｅｎ/Ｍ１はデュアルポートメモリ５１から、Ｒｅｎ/Ｍ２はデュアルポートメモリ５２から、Ｒｅｎ/Ｍ３はデュアルポートメモリ５３から、Ｒｅｎ/Ｍ４はデュアルポートメモリ５４からデータの読み出しを許可する信号を示す。これらの４つのＲｅｎ（Ｍ１〜Ｍ４）を異なるタイミングで出力することで、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）から１つのデータ群に属する４つのデータが４回に分けて順番に読み出される。
【０１３４】
まず、Ｓ１にて、ＥｍｐｔｙがＬｏｗになり、以後、メモリリード制御部４２からＲｅｎ（Ｍ１〜Ｍ４）の出力が順番に開始される。メモリリード制御部４２から、出力されたＲｅｎ（Ｍ１〜Ｍ４）に応じてデュアルポートメモリ５１〜５４からＲｄａｔａ（Ｍ１〜Ｍ４）が読み出される。
【０１３５】
たとえば、図１１では、Ｒｅｎ/Ｍ１は、Ｓ１で出力を開始し、Ｓ２で出力を停止する。Ｒｅｎ/Ｍ１に合わせて、Ｒｄａｔａ/Ｍ１のデータ０（図中ではＤ０と示す）が、デュアルポートメモリ５１から読み出される。Ｒｅｎ/Ｍ２は、Ｓ２で出力を開始し、Ｓ３で出力を停止する。Ｒｅｎ/Ｍ２に合わせてＲｄａｔａ/Ｍ２のデータ１（図中ではＤ１と示す）がデュアルポートメモリ５２から読み出される。Ｒｅｎ/Ｍ３は、Ｓ３で出力を開始し、Ｓ４で出力を停止する。Ｒｅｎ/Ｍ３に合わせて、Ｒｄａｔａ/Ｍ３のデータ２（図中ではＤ２と示す）が、デュアルポートメモリ５３から読み出される。Ｒｅｎ/Ｍ４は、Ｓ４で出力を開始し、Ｓ５で出力を停止する。Ｒｅｎ/Ｍ４に合わせて、Ｒｄａｔａ/Ｍ４のデータ３（図中ではＤ３と示す）が、デュアルポートメモリ５４から読み出される。
【０１３６】
Ｓ１では、メモリリード制御部４２からＲａｄｒも出力される。ＲａｄｒはＳ１以後のＲｃｌｋに同期して４クロックごとに０、１、２、３・・・と順番に出力される。Ｒａｄｒは４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）からデータを読み出す際に共通して使用される。
【０１３７】
デュアルポートメモリ５１〜５４から出力されたＲｄａｔａ（Ｍ１〜Ｍ４）は、メモリリード制御部４２に入力される。Ｒｄａｔａ（Ｍ１〜Ｍ４）が入力されたら、メモリリード制御部４２は、１クロック分の間に、その入力されたＲｄａｔａ（Ｍ１〜Ｍ４）を出力用のデータであるＯｕｔｄａｔａに変換する。その後、メモリリード制御部４２は、Ｏｕｔｄａｔａと共にＲｖａｌｉｄを出力する。Ｏｕｔｄａｔａは、１バイトのデータ単位で出力される。図１１では、Ｓ２から、ＯｕｔｄａｔａとＲｖａｌｉｄの出力が開始されている。
【０１３８】
Ｓ１で出力されるＲｄａｔａ/Ｍ１（図中Ｄ０）は、４バイトのデータ群を構成するデータのうち、最初に読み出されるデータである。第１リードポインタ生成部４６Ａは、Ｓ１にて第１ＲｐｔｒＡをインクリメント（０→１）する。
【０１３９】
Ｓ４で出力されるＲｄａｔａ/Ｍ４（図中のＤ３）は、４バイトのデータ群を構成するデータのうち、最後に読み出されるデータである。第２リードポインタ生成部４６Ｂは、Ｓ４にて、第２ＲｐｔｒＢをインクリメント（０→１）する。
【０１４０】
Ｓ５で出力されるＲｄａｔａ/Ｍ１（図中Ｄ４）は、次のデータ群を構成するデータのうち、最初に読み出されるデータなので、第１リードポインタ生成部４６Ａは、第１ＲｐｔｒＡをインクリメント（１→２）する。
【０１４１】
このようにして、１バイト単位で４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）からデータを順番に読み出しつつ、４バイトのデータ群となるデータの読み出し開始時には、第１ＲｐｔｒＡをインクリメントし、そのデータ群の最後のデータの読み出し開始時に、第２ＲｐｔｒＢをインクリメントする。
【０１４２】
態様例３でも、一度にデータを書き込むＦＩＦＯメモリの数と、一度にデータを読み出すＦＩＦＯメモリの数を相違させることで、書き込みと読み出しの際のデータ幅を相違させることができる。なお、複数のＦＩＦＯメモリに同時にデータを書き込むことで、データの書き込み速度が、ＦＩＦＯメモリが１つの場合に比べて高速化する。
【０１４３】
＜態様例４＞
態様例４でも、態様例２、３と同じく４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）を備えたＦＩＦＯ回路５が、ＦＩＦＯ制御を行う場合について説明する。
【０１４４】
図１２は、態様例４におけるＦＩＦＯ回路５が、ＦＩＦＯ制御を行う様子を示す。態様例４では、１バイト幅の入力データを１６バイトのブロックデータに変換し、１６バイト幅のデータを出力する。１６バイトのブロックデータが１つのデータ群になっている。
【０１４５】
態様例４の書き込み制御では、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）に対して順番にデータを書き込む。１つのＦＩＦＯメモリに対して、１バイトのデータを８回書き込んだら、次のＦＩＦＯメモリに書き込みを行う。読み出し制御では、４つのＦＩＦＯメモリから同時に１バイトずつ、データを読み出す。一度に４バイトのデータが読み出されるので、４回データを読み出したら１６バイトのデータ群となる。
【０１４６】
図１３は、図１２のＦＩＦＯ制御のうち、書き込み制御に係る信号やデータ等が出力されるタイミングを示す。図中のＷｃｌｋ、Ｆｕｌｌ、Ｗｖａｌｉｄ、Ｉｎｄａｔａ、Ｗｅｎ（Ｗｅｎ/Ｍ１〜Ｍ４）、Ｗａｄｒ、第１ＷｐｔｒＡ、第２ＷｐｔｒＢは、図７と共通のものを示す。書き込み制御に係る各種のデータや信号等は、Ｗｃｌｋに合わせて出力される。図中のＴ１〜Ｔ９は、それぞれＷｃｌｋが出力されるタイミングを示す。なお、図１３でも、図１０と同様にＬｏｗのＦｕｌｌ信号が出力され続けている。
【０１４７】
まず、Ｔ１からＩｎｄａｔａの出力が開始される。メモリライト制御部３２に入力されたＩｎｄａｔａは、１クロック分の間にＷｄａｔａに変換される。そしてメモリライト制御部３２はＴ２からＷｄａｔａの出力を開始する。
【０１４８】
Ｔ２では、Ｗｄａｔａと共に、Ｗｅｎ（Ｍ１〜Ｍ４）とＷａｄｒの出力が開始されている。メモリライト制御部３２から、出力されたＷｅｎ（Ｍ１〜Ｍ４）に対応するデュアルポートメモリ５１〜５４にＷｄａｔａを書き込む。
【０１４９】
たとえば、図１３では、Ｗｅｎ/Ｍ１は、Ｔ２で出力を開始し、８クロック後のＴ４で出力を停止する。Ｗｅｎ/Ｍ１に合わせて、Ｗｄａｔａのデータ０〜７（図中ではＤ０〜Ｄ７と示す）が、デュアルポートメモリ５１に、１バイトずつ８回に分けて書き込まれる。なお、図中、クロックは一部省略されている。Ｗｅｎ/Ｍ２は、Ｔ４で出力を開始し、８クロック後のＴ５で出力を停止する。Ｗｅｎ/Ｍ２に合わせてＷｄａｔａのデータ８〜１５（図中ではＤ８〜Ｄ１５と示す）がデュアルポートメモリ５２に、１バイトずつ８回に分けて書き込まれる。Ｗｅｎ/Ｍ３は、Ｔ５で出力を開始し、８クロック後のＴ６で出力を停止する。Ｗｅｎ/Ｍ３に合わせて、Ｗｄａｔａのデータ１６〜２３（図中ではＤ１６〜Ｄ２３と示す）が、デュアルポートメモリ５３に、１バイトずつ８回に分けて書き込まれる。Ｗｅｎ/Ｍ４は、Ｔ６で出力を開始し、８クロック後のＴ９で出力を停止する。Ｗｅｎ/Ｍ４に合わせて、Ｗｄａｔａのデータ２４〜３１（図中ではＤ２４〜Ｄ３１と示す）が、デュアルポートメモリ５４に、１バイトずつ８回に分けて書き込まれる。
【０１５０】
Ｗｄａｔａが書き込まれる際には、Ｗａｄｒが示す記憶領域にＷｄａｔａを書き込む。図１３では、Ｗａｄｒは、Ｔ２以後のＷｃｌｋに同期して１クロックごとに０、１・・・７、０、１・・・７、０、１・・・７、０、１・・・７、８と順番に出力している。
【０１５１】
Ｔ２で出力されるＷｄａｔａ（図中Ｄ０）は、１６バイトのデータ群を構成するデータのうち、最初に書き込まれるデータなので、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメント（０→１）する。
【０１５２】
図１２の右側に示す１６バイトのデータ群（ブロックデータ）は、図１３のＴ２で書き込みを開始したデータ群である。このデータ群は、Ｄ０〜Ｄ３、Ｄ８〜Ｄ１１、Ｄ１６〜Ｄ１９、Ｄ２４〜Ｄ２７（このデータ群をデータ群Ａと呼ぶ）で構成される。図１２、図１３において、データ群Ａの次に読み出されるデータ群（このデータ群をデータ群Ｂと呼ぶ）は、Ｄ４〜Ｄ７、Ｄ１２〜Ｄ１５、Ｄ２０〜Ｄ２３、Ｄ２８〜Ｄ３１で構成される。
【０１５３】
図１３に戻って説明を続ける。Ｔ３で出力されるＷｄａｔａ（図中Ｄ４）は、データ群Ａの次のデータ群であるデータ群Ｂを構成するデータのうち、最初に書き込まれるデータなので、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメント（１→２）する。
【０１５４】
Ｔ３の時点で、データ群Ａのデータの書き込みが完了していないが、データ群Ｂの書き込みも開始されるので、第１ＷｐｔｒＡがインクリメントされる。
【０１５５】
Ｔ７にて、データ群Ａを構成するデータのうち、最後のデータとなるＷｄａｔａ（図中のＤ２７）が出力されるので、第２ライトポインタ生成部３６Ｂが、第２ＷｐｔｒＢをインクリメント（０→１）する。Ｔ８にて、データ群Ａの書き込みは完了する。
【０１５６】
Ｔ８にて、データ群Ｂを構成するデータのうち、最後のデータとなるＷｄａｔａ（図中のＤ３１）が出力されるので、第２ライトポインタ生成部３６Ｂが、第２ＷｐｔｒＢをインクリメント（１→２）する。Ｔ９にて、データ群Ｂの書き込みは完了する。
【０１５７】
Ｔ９で出力されるＷｄａｔａ（図中Ｄ３２）は、データ群Ｂの次のデータ群を構成するデータのうち、最初に書き込まれるデータなので、第１ライトポインタ生成部３６Ａは、第１ＷｐｔｒＡをインクリメント（２→３）する。
【０１５８】
このように、あるデータ群の書き込み途中で、次のデータ群の書き込みを開始した場合であっても、書き込みを開始したデータ群の数を第１ＷｐｔｒＡで、書き込みが完了したデータ群の数を第２ＷｐｔｒＢでカウントする。
【０１５９】
図１４は、態様例４の読み出し制御（１６バイトのデータ群単位でデータを読み出す）において、当該読み出し制御に係る信号やデータ等が出力されるタイミングを示す。Ｒｃｌｋ、Ｅｍｐｔｙ、Ｒｅｎ、Ｒｄａｔａ（Ｍ１〜Ｍ４）、Ｒａｄｒ、第１ＲｐｔｒＡ、第２ＲｐｔｒＢ、Ｒｖａｌｉｄ、Ｏｕｔｄａｔａは図８と共通のものを示す。読み出し制御に係る各種のデータや信号等は、Ｒｃｌｋに合わせて出力される。図中のＳ１〜Ｓ５は、それぞれＲｃｌｋが出力されるタイミングを示す。
【０１６０】
まず、Ｓ１にて、ＥｍｐｔｙがＬｏｗになり、メモリリード制御部４２からＲｅｎの出力が開始される。メモリリード制御部４２からはＲｅｎと共にＲａｄｒも出力される。ＲａｄｒはＳ１以後のＲｃｌｋに同期して、０、１、２、３・・・と順番に出力される。また、このＲｅｎとＲａｄｒが入力されたデュアルポートメモリ５１〜５４は、それぞれＲｄａｔａ（Ｍ１〜Ｍ４）を出力する。出力されたＲｄａｔａ（Ｍ１〜Ｍ４）は、メモリリード制御部４２に入力される。
【０１６１】
メモリリード制御部４２では、１クロック分の間に、４つのＦＩＦＯメモリ（デュアルポートメモリ５１〜５４）から出力されたＲｄａｔａ（Ｍ１〜Ｍ４）を出力用のデータであるＯｕｔｄａｔａに変換する。その後、メモリリード制御部４２は、Ｓ２から、Ｏｕｔｄａｔａと共にＲｖａｌｉｄを出力する。Ｏｕｔｄａｔａは、１クロックで４バイトずつ出力される。たとえば、Ｓ２〜Ｓ５では、Ｓ２でＤ０〜Ｄ３が、Ｓ３でＤ８〜Ｄ１１が、Ｓ４でＤ１６〜Ｄ１９が、Ｓ５でＤ２４〜Ｄ２７が出力される。
【０１６２】
Ｓ１では、１６バイトのデータ群（ここではデータ群Ａ）を構成するデータのうちの４つのデータ（Ｄ０、Ｄ８、Ｄ１６、Ｄ２４）の出力が同時に開始されるので、第１リードポインタ生成部４６Ａは第１ＲｐｔｒＡをインクリメント（０→１）する。
【０１６３】
Ｓ４では、データ群Ａを構成するデータの内の最後の４つのデータの出力が開始されるので、第２リードポインタ生成部４６Ｂは、Ｓ４にて、第２ＲｐｔｒＢをインクリメント（０→１）する。
【０１６４】
Ｓ５では、データ群Ｂを構成するデータのうちの４つのデータ（Ｄ４、Ｄ１２、Ｄ２０、Ｄ２８）の出力が同時に開始されるので、第１リードポインタ生成部４６Ａは、第１ＲｐｔｒＡをインクリメント（１→２）する。
【０１６５】
このようにして、デュアルポートメモリ５１〜５４からデータを読み出し、出力する。１６バイトのデータ群の読み出し開始時には、第１ＲｐｔｒＡをインクリメントし、読み出し完了時には、第２ＲｐｔｒＢをインクリメントする。
【０１６６】
態様例４でも、一度にデータを書き込むＦＩＦＯメモリの数と、一度にデータを読み出すＦＩＦＯメモリの数を相違させることで、書き込みと読み出しの際のデータ幅を相違させることができる。また、複数のメモリからデータを同時に読み出すことで、データの読み出し速度が、メモリが１つの場合に比べて高速化する。
【０１６７】
このように、本発明のＦＩＦＯ回路５は、複数のデータで構成されたデータ群単位で非同期データ転送が可能である。また、入出力時のデータ配列を変換することができる。
【０１６８】
以上、本発明の実施の形態を図面によって説明してきたが、具体的な構成は実施の形態に示したものに限られるものではなく、本発明の要旨を逸脱しない範囲における変更や追加があっても本発明に含まれる。
【０１６９】
本発明の実施の形態では、態様例２〜４にて、４つのデュアルポートメモリ５１〜５４を使用したが、複数のＦＩＦＯメモリを使用する場合のＦＩＦＯメモリの数はこれに限らない。また、データ群のサイズやデータ配列は、態様例１〜４で例示したものに限らず、外部の装置等から受け付けた設定に対応可能になっている。
【符号の説明】
【０１７０】
３…ＦＩＦＯ回路（従来技術のＦＩＦＯ回路）
５…ＦＩＦＯ回路（本発明のＦＩＦＯ回路）
３０…データ入力制御部
３１…ライトカウンタ制御部
３２…メモリライト制御部
３３…ＦＩＦＯ空き制御部
３４…シンクロナイザ
３５…ライトアドレス生成部
３６…ライトポインタ生成部
３６Ａ…第１ライトポインタ生成部
３６Ｂ…第２ライトポインタ生成部
４０…データ出力制御部
４１…リードカウンタ制御部
４２…メモリリード制御部
４３…ＦＩＦＯ空き制御部
４４…シンクロナイザ
４５…リードアドレス生成部
４６…リードポインタ生成部
４６Ａ…第１リードポインタ生成部
４６Ｂ…第２リードポインタ生成部
５０…デュアルポートメモリ
５１〜５４…デュアルポートメモリ
【図１】
2014071929.tif 000003
【図２】
2014071929.tif 000004
【図３】
2014071929.tif 000005
【図４】
2014071929.tif 000006
【図５】
2014071929.tif 000007
【図６】
2014071929.tif 000008
【図７】
2014071929.tif 000009
【図８】
2014071929.tif 000010
【図９】
2014071929.tif 000011
【図１０】
2014071929.tif 000012
【図１１】
2014071929.tif 000013
【図１２】
2014071929.tif 000014
【図１３】
2014071929.tif 000015
【図１４】
2014071929.tif 000016
【図１５】
2014071929.tif 000017
【図１６】
2014071929.tif 000018
【図１７】
2014071929.tif 000019