(57)【要約】【課題】アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行えるデータ転送装置およびデータ転送方法を提供する。【解決手段】本発明に係るデータ転送装置は、第１のデータ単位または前記第１のデータ単位より小さい第２のデータ単位のデータがＦＩＦＯ形式で読み書きされるＦＩＦＯメモリ１１０と、ＦＩＦＯメモリ１１０に対する第１のデータ単位の書込みアドレスと読出しアドレスとが一致するか否かを判定するポインタ比較部１８０と、ポインタ比較部１８０により一致しないと判定された場合に、前記第１のデータ単位でＦＩＦＯメモ１１０からデータを読み出し、ポインタ比較部１８０により一致すると判定された場合に、前記第２のデータ単位でＦＩＦＯメモリ１１０からデータを読み出すバイトアクセス制御部１９０とを備える。【選択図】図１
2007233636.tif 000002
【特許請求の範囲】
【請求項１】
第１のデータ単位または前記第１のデータ単位より小さい第２のデータ単位のデータがＦＩＦＯ形式で読み書きされる記憶手段と、
前記記憶手段に対する前記第１のデータ単位のデータの書込みアドレスを含むライトポインタを保持するライトポインタ保持手段と、
前記記憶手段に対する前記第１のデータ単位のデータの読出しアドレスを含むリードポインタを保持するリードポインタ保持手段と、
前記書込みアドレスと、前記読出しアドレスとが一致するか否かを判定する判定手段と、
前記判定手段により一致しないと判定された場合に、前記第１のデータ単位で前記記憶手段からデータを読み出し、前記判定手段により一致すると判定された場合に、前記第２のデータ単位で前記記憶手段からデータを読み出す読出し制御手段とを備える
ことを特徴とするデータ転送装置。
【請求項２】
前記ライトポインタは、前記書込みアドレスと、前記書込みアドレスの下位のアドレスであり前記第２のデータ単位のデータの書込みアドレスに対応する下位アドレスとを含み、
前記リードポインタは、前記読出しアドレスと、前記読出しアドレスの下位のアドレスであり前記第２のデータ単位のデータの読出しアドレスに対応する下位アドレスとを含み、
前記読出し制御手段は、
前記リードポインタの下位アドレスと、前記ライトポインタの下位アドレスとの差分を算出する算出手段と、
前記算出手段による算出結果と、前記リードポインタの下位アドレスとに基づき、前記記憶手段の１以上の下位アドレスを指定するリードイネーブル信号を生成する生成手段を備え、
前記判定手段により一致すると判定された場合に、前記読出し制御手段は、前記リードイネーブル信号に基づき前記第１のデータ単位未満かつ前記第２のデータ単位以上のデータ単位で前記記憶手段よりデータを読み出す
ことを特徴とする請求項１記載のデータ転送装置。
【請求項３】
前記データ転送装置は、さらに、
前記ライトポインタに基づき、前記記憶手段にデータを書込む書込み制御手段を備え、
前記書込み制御手段は、前記記憶手段に書込んだ前記第２のデータ単位のデータ数に基づき、前記ライトポインタ保持手段に保持される前記ライトポインタをインクリメントするライトポインタ制御手段を備え、
前記読出し制御手段は、前記記憶手段から読み出した前記第２のデータ単位のデータ数に基づき、前記リードポインタ保持手段に保持される前記リードポインタをインクリメントするリードポインタ制御手段を備え、
前記書込み制御手段と、前記読出し制御手段および前記判定手段とは、非同期で動作し、
前記データ転送装置は、さらに、
前記ライトポインタを前記読出し制御手段および前記判定手段の動作クロックと同期化する同期化手段を備え、
前記判定手段は、前記同期化手段により同期化されたライトポインタに含まれる前記第１のデータ単位のデータの書込みアドレスと、前記リードポインタに含まれる前記第１のデータ単位のデータの読出しアドレスとが一致するか否かを判定し、
前記算出手段は、前記リードポインタの下位アドレスと、前記同期化手段により同期化されたライトポインタの下位アドレスとの差分を算出する
ことを特徴とする請求項２記載のデータ転送装置。
【請求項４】
前記記憶手段は、
前記第１のデータ単位でデータの読出しが行われる第１の記憶手段と、
前記第２のデータ単位でデータの読出しが行われる第２の記憶手段とを備え、
前記読出し制御手段は、前記判定手段により一致しないと判定された場合に、前記第１の記憶手段から前記第１のデータ単位でデータを読み出し、前記判定手段により一致すると判定された場合に、前記第２の記憶手段から前記第２のデータ単位でデータを読み出す
ことを特徴とする請求項１記載のデータ転送装置。
【請求項５】
前記第２の記憶手段は、前記第１のデータ単位未満かつ前記第２のデータ単位以上のデータ単位で読出しが行われ、
前記読出し制御手段は、前記判定手段により一致すると判定された場合に、前記第２の記憶手段から前記第１のデータ単位未満かつ前記第２のデータ単位以上のデータ単位でデータを読み出す
ことを特徴とする請求項４記載のデータ転送装置。
【請求項６】
前記データ転送装置は、さらに、
前記ライトポインタに基づき、前記記憶手段にデータを書込む書込み制御手段を備え、
前記書込み制御手段は、前記記憶手段に書込んだ前記第２のデータ単位のデータ数に基づき、前記ライトポインタ保持手段に保持される前記ライトポインタをインクリメントするライトポインタ制御手段を備え、
前記読出し制御手段は、前記記憶手段から読み出した前記第２のデータ単位のデータ数に基づき、前記リードポインタ保持手段に保持される前記リードポインタをインクリメントするリードポインタ制御手段を備え、
前記書込み制御手段と、前記読出し制御手段および前記判定手段とは、非同期で動作し、
前記データ転送装置は、さらに、
前記ライトポインタを前記読出し制御手段および前記判定手段の動作クロックと同期化する第１の同期化手段と、
前記第２の記憶手段の出力データを前記読出し制御手段および前記判定手段の動作クロックと同期化する第２の同期化手段とを備え、
前記判定手段は、前記第１の同期化手段により同期化されたライトポインタに含まれる前記第１のデータ単位のデータの書込みアドレスと、前記リードポインタに含まれる前記第１のデータ単位のデータの読出しアドレスとが一致するか否かを判定し、
前記読出し制御手段は、前記判定手段により一致すると判定された場合に、前記第２の記憶手段から前記第２の同期化手段により同期化された前記第２のデータ単位のデータを読み出す
ことを特徴とする請求項４または５記載のデータ転送装置。
【請求項７】
前記記憶手段は、前記第１のデータ単位以上のデータを保持するフリップフロップにより構成される
ことを特徴とする請求項１〜６の何れか１項に記載のデータ転送装置。
【請求項８】
前記記憶手段は、前記第１のデータ単位以上のデータを保持するＲＡＭにより構成される
ことを特徴とする請求項１〜６の何れか１項に記載のデータ転送装置。
【請求項９】
第１のデータ単位または前記第１のデータ単位より小さい第２のデータ単位のデータがＦＩＦＯ形式で読み書きされる記憶部と、
前記記憶部に対する前記第１のデータ単位のデータの書込みアドレスを含むライトポインタを保持するライトポインタ保持部と、
前記記憶部に対する前記第１のデータ単位のデータの読出しアドレスを含むリードポインタを保持するリードポインタ保持部とを備えるデータ転送装置におけるデータ転送方法であって、
前記書込みアドレスと、前記読出しアドレスとが一致するか否かを判定する判定ステップと、
前記判定ステップにおいて一致しないと判定された場合に、前記第１のデータ単位で前記記憶部からデータを読み出し、前記判定ステップにおいて一致すると判定された場合に、前記第２のデータ単位で前記記憶部からデータを読み出す読出しステップとを含む
ことを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置およびデータ転送方法に関し、特に、ＦＩＦＯ方式でデータの読み書きが行われるＦＩＦＯメモリを用いデータ転送を行うデータ転送装置およびデータ転送方法に関する。
【背景技術】
【０００２】
ＦＩＦＯ（First-In First-Out）方式を用いたデータ転送装置は、ＦＩＦＯ方式でデータの読み書きが行われるメモリ（以下、「ＦＩＦＯメモリ」と称す。）への書込みアドレスを指定するライトポインタと、ＦＩＦＯメモリへの読出しアドレスを指定するリードポインタとを用い、ＦＩＦＯメモリのデータの読み書きを行う。
【０００３】
近年、音声データおよび映像データならびにストリームデータを扱うデータ処理に関しては、扱うデータ量が増加している。大容量のデータを転送するデータ転送装置の処理速度を向上させるため、一度に読み書きするデータ単位を増加させる方法がとられている。
【０００４】
図１２は、複数バイト単位でデータ転送を行うＦＩＦＯ方式を用いた従来のデータ転送装置の構成を示すブロック図である。
【０００５】
図１２に示すデータ転送装置１２００は、ＦＩＦＯメモリ１２１０と、ライト回路１２２０と、リード回路１２５０とを備える。
【０００６】
ＦＩＦＯメモリ１２１０は、ＦＩＦＯ形式でのデータの読み書きが行われるメモリである。ＦＩＦＯメモリ１２１０は、ライト回路１２２０により１〜４バイト単位でデータの書込みが行われ、リード回路１２５０により４バイト単位でデータの読出しが行われる。
【０００７】
ライト回路１２２０は、１〜４バイト単位のデータをＦＩＦＯメモリ１２１０に書込む。ライト回路１２２０は、ライト制御部１２３０と、ライトポインタ保持部１２４０とを備える。
【０００８】
ライトポインタ保持部１２４０は、ＦＩＦＯメモリ１２１０への書込みバイトアドレスを指定するライトポインタ１２４１を保持する。
【０００９】
ライト制御部１２３０は、ＦＩＦＯメモリ１２１０への書込みの制御、および、ライトポインタ保持部１２４０に保持されるライトポインタ１２４１の制御を行う。ライト制御部１２３０は、ＦＩＦＯメモリ１２１０に書込んだデータのバイト数に応じて、ライトポインタ１２４１を０からカウントアップする。また、ライト制御部１２３０は、書込みバイトアドレスを指定するライトバイトイネーブル信号１２３１およびライトＦＩＦＯアドレス信号１２３２をＦＩＦＯメモリ１２１０に出力する。ライトＦＩＦＯアドレス信号１２３２は、４バイト単位のＦＩＦＯメモリのアドレスに対応する。ライト制御部１２３０は、ＦＩＦＯメモリへの書込みデータであるライトデータ１２３３をＦＩＦＯメモリ１２１０に出力する。また、ライト制御部１３０は、ライトイネーブル信号１２３４をリード回路１２５０に出力する。
【００１０】
リード回路１２５０は、ＦＩＦＯメモリ１２１０が保持するデータを４バイト単位で読み出す回路である。リード回路１２５０は、リード制御部１２６０と、リードポインタ保持部１２７０と、ポインタ比較部１２８０と、バイトアクセス制御部１２９０とを備える。
【００１１】
リードポインタ保持部１２７０は、ＦＩＦＯメモリ１２１０への読出しバイトアドレスを指定するリードポインタ１２７１を保持する。
【００１２】
リード制御部１２６０は、ＦＩＦＯメモリ１２１０から読み出したデータのバイト数に応じて、リードポインタ保持部１２７０が保持するリードポインタ１２７１を０からカウントアップする。リード制御部１２６０は、リードポインタ１２７１がライトポインタ１２４１を追い抜かないように制御する。また、リード制御部１２６０は、ＦＩＦＯメモリ１２１０への読出し動作を要求するリード要求信号１２６１をアクセス制御部１２９０に出力する。
【００１３】
ポインタ比較部１２８０は、リードポインタ１２７１の４バイト単位のアドレスと、ライトポインタ１２４１の４バイト単位のアドレスとを比較する。ポインタ比較部１２８０は、比較結果からリードポインタ１２７１の４バイト単位のアドレスと、ライトポインタ１２４１の４バイト単位のアドレスとが同じアドレスであるか否かを示す一致判定信号１２８１をアクセス制御部１２９０に出力する。
【００１４】
アクセス制御部１２９０は、ライトイネーブル信号１２３４、一致判定信号１２８１およびリード要求信号１２６１に基づき、ＦＩＦＯメモリ１２１０からのデータの読出しを制御するリードイネーブル信号１２９１を出力する。具体的には、リードポインタ１２７１の４バイト単位のアドレスと、ライトポインタ１２４１の４バイト単位のアドレスとが一致し、かつ、ライトイネーブル信号１２３４がアサートの場合には、ＦＩＦＯメモリ１２１０からの読み出しを行わないように、リードイネーブル信号１２９１をネゲートする。また、アクセス制御部１２９０は、リードポインタ１２７１の４バイト単位のデータのアドレスであるリードＦＩＦＯアドレス信号１２９２をＦＩＦＯメモリ１２１０に出力する。
【００１５】
以上より、従来のデータ転送装置１２００は、ＦＩＦＯメモリ１２１０に４バイト以上の有効なデータが保持されている場合（リードポインタ１２７１の４バイト単位のアドレスとライトポインタの４バイト単位のアドレスとが一致しない場合）には、リード回路１２５０は、ＦＩＦＯメモリ１２１０より４バイト単位でデータを読み出す。
【００１６】
一方、ストリームデータのように、データ長が１バイト単位であり、データ供給およびデータ消費の速度がそれぞれ変動するデータ転送処理においては、ライト回路１２２０より１バイト単位のデータがＦＩＦＯメモリ１２１０に書込まれる。この時、リード回路１２５０が４バイト単位でデータを読出し続けると、ライトポインタ１２４１とリードポインタ１２７１とが同一のアドレスを指定する場合が発生する。すなわち、ＦＩＦＯメモリ１２１０から読み出すデータがなくなるアンダーフローが発生する。アンダーフローが発生した場合には、リードポインタ１２７１の４バイト単位のアドレスと、ライトポインタ１２４１の４バイト単位のアドレスとが一致する状態であるので、アクセス制御部１２９０はリードイネーブル信号１２９１をディセーブルにし、読出し動作を行わない。
【００１７】
なお、上述したように、アンダーフローが発生した場合に、書込み動作または読出し動作を中断する方法については、特許文献１に記載されている。
【００１８】
一方、データ転送前後の処理効率を向上させるために、データ転送装置のデータ供給側のライト回路１２２０とデータ消費側のリード回路１２５０とをそれぞれに最適な周波数で動作させることが考えられる。この場合、ライト回路１２２０とリード回路１２５０とは互いに非同期のクロックで動作する必要がある。
【００１９】
図１３は、ライト回路１２２０とリード回路１２５０が非同期で動作する従来のデータ転送装置の構成を示すブロック図である。図１３に示すデータ転送装置１２０１は、図１２に示すデータ転送装置１２００の構成に加え、非同期受渡部１３００を備える。なお、図１２と同様の要素には同一の符号を付しており詳細な説明は省略する。
【００２０】
ライト回路１２２０とリード回路１２５０が非同期で動作する場合は、ライト回路１２２０のライトポインタ保持部１２４０が保持するライトポインタ１２４１と、リード回路１２５０のリードポインタ保持部１２７０が保持するライトポインタ１２７１とは非同期に変化する。そのため、ポインタ比較部１２８０においてライトポインタ１２４１とリードポインタ１２７１を比較するためには、ライトポインタ１２４１をリード回路のクロックに同期させる必要がある。
【００２１】
図１３に示すデータ転送装置１２０１においては、非同期受渡部１３００がライトポインタ１２４１をリード回路１２５０のクロックに同期させポインタ比較部１２８０にライトポインタ１３０１として出力する。
【００２２】
このように、従来のデータ転送装置１２０１は、ポインタ比較部１２８０によりライトポインタ１２４１をリード回路１２５０のクロックに同期させることで、ライトポインタ１２４１とリードポインタ１２７１との比較が可能になる。これにより、ライトポインタ１２４１とリードポインタ１２７１が等しいアドレスを示す場合には、図１２に示すデータ転送回路１２００と同様に、読出し動作を中断することができる。
【特許文献１】特開昭６０−２１１５５４号公報
【発明の開示】
【発明が解決しようとする課題】
【００２３】
しかしながら、図１２および図１３に示した従来のデータ転送装置は、アンダーフローが発生すると、ＦＩＦＯメモリ１２１０からのデータの読出しを中断するので、ＦＩＦＯメモリ１２１０に、１〜３バイトのデータのみが書込まれている状態において、リード回路１２５０は、データの読出しを行わないことになる。例えば、ストリームデータの処理等の１バイト単位でデータが書込まれる場合には、ライト回路１２２０から書込まれたデータが４バイト分保持されるまで、リード回路１２５０は、データを読み出すことができない。すなわち、従来のデータ転送装置では、アンダーフローが発生した場合、ＦＩＦＯメモリに書込まれたデータの読み出しのタイミングが書き込まれたタイミングから遅延するという問題がある。
【００２４】
以上の問題点に鑑み本発明は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行えるデータ転送装置およびデータ転送方法を提供することを目的とする。
【課題を解決するための手段】
【００２５】
上記目的を達成するために、本発明に係るデータ転送装置は、第１のデータ単位または前記第１のデータ単位より小さい第２のデータ単位のデータがＦＩＦＯ形式で読み書きされる記憶手段と、前記記憶手段に対する前記第１のデータ単位のデータの書込みアドレスを含むライトポインタを保持するライトポインタ保持手段と、前記記憶手段に対する前記第１のデータ単位のデータの読出しアドレスを含むリードポインタを保持するリードポインタ保持手段と、前記書込みアドレスと、前記読出しアドレスとが一致するか否かを判定する判定手段と、前記判定手段により一致しないと判定された場合に、前記第１のデータ単位で前記記憶手段からデータを読み出し、前記判定手段により一致すると判定された場合に、前記第２のデータ単位で前記記憶手段からデータを読み出す読出し制御手段とを備える。
【００２６】
この構成によれば、本発明に係るデータ転送装置は、ライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致した場合（アンダーフローが発生した場合）には、第２のデータ単位でデータを読み出す。これにより、アンダーフローが発生し、かつ、第２のデータ単位のデータが記憶手段に記憶されている場合でも、第２のデータ単位のデータを読み出すことができる。よって、本発明に係るデータ転送装置は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。また、本発明に係るデータ転送装置は、ライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致しない場合（アンダーフローが発生していない場合）には、第１のデータ単位でデータを読み出す。よって、アンダーフローが発生していない通常のデータ転送においては、データ量の大きい第１のデータ単位でデータ転送を行う。よって、高速にデータ転送を行うことができる。
【００２７】
また、前記ライトポインタは、前記書込みアドレスと、前記書込みアドレスの下位のアドレスであり前記第２のデータ単位のデータの書込みアドレスに対応する下位アドレスとを含み、前記リードポインタは、前記読出しアドレスと、前記読出しアドレスの下位のアドレスであり前記第２のデータ単位のデータの読出しアドレスに対応する下位アドレスとを含み、前記読出し制御手段は、前記リードポインタの下位アドレスと、前記ライトポインタの下位アドレスとの差分を算出する算出手段と、前記算出手段による算出結果と、前記リードポインタの下位アドレスとに基づき、前記記憶手段の１以上の下位アドレスを指定するリードイネーブル信号を生成する生成手段を備え、前記判定手段により一致すると判定された場合に、前記読出し制御手段は、前記リードイネーブル信号に基づき前記第１のデータ単位未満かつ前記第２のデータ単位以上のデータ単位で前記記憶手段よりデータを読み出してもよい。
【００２８】
この構成によれば、本発明に係るデータ転送装置は、ライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致した場合（アンダーフローが発生した場合）には、第１のデータ単位未満かつ第２のデータ単位以上のデータ単位でデータを読み出す。これにより、アンダーフローが発生し、かつ、第１のデータ単位未満かつ第２のデータ単位以上のデータ単位のデータが記憶手段に記憶されている場合でも、記憶手段に記憶されている第１のデータ単位未満かつ第２のデータ単位以上のデータを一括して読み出すことができる。よって、本発明に係るデータ転送装置は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【００２９】
また、前記データ転送装置は、さらに、前記ライトポインタに基づき、前記記憶手段にデータを書込む書込み制御手段を備え、前記書込み制御手段は、前記記憶手段に書込んだ前記第２のデータ単位のデータ数に基づき、前記ライトポインタ保持手段に保持される前記ライトポインタをインクリメントするライトポインタ制御手段を備え、前記読出し制御手段は、前記記憶手段から読み出した前記第２のデータ単位のデータ数に基づき、前記リードポインタ保持手段に保持される前記リードポインタをインクリメントするリードポインタ制御手段を備え、前記書込み制御手段と、前記読出し制御手段および前記判定手段とは、非同期で動作し、前記データ転送装置は、さらに、前記ライトポインタを前記読出し制御手段および前記判定手段の動作クロックと同期化する同期化手段を備え、前記判定手段は、前記同期化手段により同期化されたライトポインタに含まれる前記第１のデータ単位のデータの書込みアドレスと、前記リードポインタに含まれる前記第１のデータ単位のデータの読出しアドレスとが一致するか否かを判定し、前記算出手段は、前記リードポインタの下位アドレスと、前記同期化手段により同期化されたライトポインタの下位アドレスとの差分を算出してもよい。
【００３０】
この構成によれば、記憶手段にデータ書込みを行う書込み制御手段と、記憶手段からデータ読出しを行う読出し制御手段とが非同期な動作クロックで動作する場合であっても、判定手段は、同期化されたライトポインタとリードポインタとが一致するか否かを判定することができる。よって、本発明に係るデータ転送装置は、記憶手段への書込みと読出しとが非同期に行われ場合においてアンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【００３１】
また、前記記憶手段は、前記第１のデータ単位でデータの読出しが行われる第１の記憶手段と、前記第２のデータ単位でデータの読出しが行われる第２の記憶手段とを備え、前記読出し制御手段は、前記判定手段により一致しないと判定された場合に、前記第１の記憶手段から前記第１のデータ単位でデータを読み出し、前記判定手段により一致すると判定された場合に、前記第２の記憶手段から前記第２のデータ単位でデータを読み出してもよい。
【００３２】
この構成によれば、本発明に係るデータ転送装置は、判定手段によりライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致しないと判定された場合に、前記第１の記憶手段から第１のデータ単位のデータを読み出す。また、本発明に係るデータ転送装置は、判定手段によりライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致すると判定された場合に、第２の記憶手段から第２のデータ単位のデータを読み出す。これにより、アンダーフローが発生し、かつ、第２のデータ単位のデータが記憶手段に記憶されている場合でも、第２の記憶手段が保持する第２のデータ単位のデータを読み出すことができる。よって、本発明に係るデータ転送装置は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。また、アンダーフローが発生していない通常のデータ転送においては、第１の記憶手段からデータ量の大きい第１のデータ単位でデータを読出しデータ転送を行う。よって、高速にデータ転送を行うことができる。
【００３３】
また、前記第２の記憶手段は、前記第１のデータ単位未満かつ前記第２のデータ単位以上のデータ単位で読出しが行われ、前記読出し制御手段は、前記判定手段により一致すると判定された場合に、前記第２の記憶手段から前記第１のデータ単位未満かつ前記第２のデータ単位以上のデータ単位でデータを読み出してもよい。
【００３４】
この構成によれば、本発明に係るデータ転送装置は、ライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致した場合（アンダーフローが発生した場合）には、第１のデータ単位未満かつ第２のデータ単位以上のデータ単位で第２の記憶手段からデータを読み出す。これにより、アンダーフローが発生し、かつ、第１のデータ単位未満かつ第２のデータ単位以上のデータ単位のデータが記憶手段に記憶されている場合でも、記憶手段に記憶されている第１のデータ単位未満かつ第２のデータ単位以上のデータを一括して読み出すことができる。よって、本発明に係るデータ転送装置は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【００３５】
また、前記データ転送装置は、さらに、前記ライトポインタに基づき、前記記憶手段にデータを書込む書込み制御手段を備え、前記書込み制御手段は、前記記憶手段に書込んだ前記第２のデータ単位のデータ数に基づき、前記ライトポインタ保持手段に保持される前記ライトポインタをインクリメントするライトポインタ制御手段を備え、前記読出し制御手段は、前記記憶手段から読み出した前記第２のデータ単位のデータ数に基づき、前記リードポインタ保持手段に保持される前記リードポインタをインクリメントするリードポインタ制御手段を備え、前記書込み制御手段と、前記読出し制御手段および前記判定手段とは、非同期で動作し、前記データ転送装置は、さらに、前記ライトポインタを前記読出し制御手段および前記判定手段の動作クロックと同期化する第１の同期化手段と、前記第２の記憶手段の出力データを前記読出し制御手段および前記判定手段の動作クロックと同期化する第２の同期化手段とを備え、前記判定手段は、前記第１の同期化手段により同期化されたライトポインタに含まれる前記第１のデータ単位のデータの書込みアドレスと、前記リードポインタに含まれる前記第１のデータ単位のデータの読出しアドレスとが一致するか否かを判定し、前記読出し制御手段は、前記判定手段により一致すると判定された場合に、前記第２の記憶手段から前記第２の同期化手段により同期化された前記第２のデータ単位のデータを読み出してもよい。
【００３６】
この構成によれば、記憶手段にデータ書込みを行う書込み制御手段と、記憶手段からデータ読出しを行う読出し制御手段とが非同期な動作クロックで動作する場合であっても、判定手段は、同期化されたライトポインタとリードポインタとが一致するか否かを判定することができる。また、読出し制御手段は、第２の同期化手段により同期化された第２の記憶手段に保持されているデータを読み出すことができる。よって、本発明に係るデータ転送装置は、記憶手段への書込みと読出しとが非同期に行われ場合においてアンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【００３７】
また、前記記憶手段は、前記第１のデータ単位以上のデータを保持するフリップフロップにより構成されてもよい。
【００３８】
また、前記記憶手段は、前記第１のデータ単位以上のデータを保持するＲＡＭにより構成されてもよい。
【００３９】
また、本発明に係るデータ転送方法は、第１のデータ単位または前記第１のデータ単位より小さい第２のデータ単位のデータがＦＩＦＯ形式で読み書きされる記憶部と、前記記憶部に対する前記第１のデータ単位のデータの書込みアドレスを含むライトポインタを保持するライトポインタ保持部と、前記記憶部に対する前記第１のデータ単位のデータの読出しアドレスを含むリードポインタを保持するリードポインタ保持部とを備えるデータ転送装置におけるデータ転送方法であって、前記書込みアドレスと、前記読出しアドレスとが一致するか否かを判定する判定ステップと、前記判定ステップにおいて一致しないと判定された場合に、前記第１のデータ単位で前記記憶手段からデータを読み出し、前記判定ステップにおいて一致すると判定された場合に、前記第２のデータ単位で前記記憶部からデータを読み出す読出しステップとを含む。
【００４０】
これにより、本発明に係るデータ転送方法は、ライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致した場合（アンダーフローが発生した場合）には、第２のデータ単位でデータを読み出す。これにより、アンダーフローが発生し、かつ、第２のデータ単位のデータが記憶手段に記憶されている場合でも、第２のデータ単位のデータを読み出すことができる。よって、本発明に係るデータ転送方法は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。また、本発明に係るデータ転送方法は、ライトポインタに含まれる第１のデータ単位のデータの書込みアドレスと、リードポインタに含まれる第１のデータ単位のデータの読出しアドレスとが一致しない場合（アンダーフローが発生していない場合）には、第１のデータ単位でデータを読み出す。よって、アンダーフローが発生していない通常のデータ転送においては、データ量の大きい第１のデータ単位でデータ転送を行う。よって、高速にデータ転送を行うことができる。
【発明の効果】
【００４１】
以上のように本発明は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行えるデータ転送装置およびデータ転送方法を提供することができる。
【発明を実施するための最良の形態】
【００４２】
（実施の形態１）
本実施の形態におけるデータ転送装置は、アンダーフローが発生した場合には、通常のデータ転送のデータ単位より小さいデータ単位でデータを転送することで、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【００４３】
まず、本実施の形態におけるデータ転送装置の構成を説明する。
【００４４】
図１は、本実施の形態におけるデータ転送装置１００の構成を示すブロック図である。図１に示すデータ転送装置１００は、ＦＩＦＯメモリ１１０と、ライト回路１２０と、リード回路１５０とを備える。データ転送装置１００は、ＦＩＦＯメモリ１１０を介し、１〜４バイト単位のデータ単位でライト回路１２０からリード回路１５０へデータの転送を行う。
【００４５】
ＦＩＦＯメモリ１１０は、ＦＩＦＯ形式でデータの読み書きが行われるメモリである。ＦＩＦＯ形式とは、あるアドレスに格納したデータを、古く格納した順に取り出すようにする方式であり、一番新しく格納されたデータが一番最後に取り出される。ＦＩＦＯメモリ１１０は、４バイト以上のデータを保持し、１〜４バイト単位でデータの読み書きが行われる。例えば、ＦＩＦＯメモリ１１０は、１Ｋバイトのデータを保持するＳＲＡＭで構成される。なお、ＦＩＦＯメモリ１１０は、フリップフロップ、ＳＲＡＭ以外のＲＡＭ（ＤＲＡＭ等）または不揮発性メモリ等で構成されてもよい。
【００４６】
ライト回路１２０は、１バイト〜４バイト単位でＦＩＦＯメモリ１１０にデータを書込む回路である。ライト回路１２０は、ライト制御部１３０とライトポインタ保持部１４０とを備える。
【００４７】
ライトポインタ保持部１４０は、ＦＩＦＯメモリ１１０への１バイト単位の書込みバイトアドレスを指定するライトポインタ１４１を保持する。例えば、ライトポインタ１４１は１０ビットで構成される。また、ライトポインタ１４１は、ＦＩＦＯメモリ１１０に対する４バイト単位のデータの書込みバイトアドレスと、ＦＩＦＯメモリ１１０に対する４バイト単位のアドレスの下位のアドレスであり１バイト単位のデータの書込みアドレスに対応する下位アドレスとを含む。１０ビットのライトポインタ１４１の上位８ビットがＦＩＦＯメモリ１１０に対する４バイト単位のデータの書込みバイトアドレスに対応し、下位２ビットがＦＩＦＯメモリ１１０に対する４バイト単位のアドレスの下位のアドレスであり１バイト単位のデータの書込みアドレスに対応する下位アドレスに対応する。
【００４８】
ライト制御部１３０は、ＦＩＦＯメモリ１１０への書込みの制御、および、ライトポインタ保持部１４０に保持されるライトポインタ１４０の制御を行う。ライト制御部１３０は、ＦＩＦＯメモリ１１０に書込んだデータのバイト数に基づき、ライトポインタ保持部１４０が保持するライトポインタ１４１を０からインクリメントする。ライトポインタ１４１は、ＦＩＦＯメモリ１１０の最終バイトアドレスになると次は０に戻る。また、ライト制御部１３０は、ライトポインタ１４１の下位２ビットから４ビットのライトバイトイネーブル信号１３１を生成し、ＦＩＦＯメモリ１１０に出力する。ライトバイトイネーブル信号１３１の各ビットは、ＦＩＦＯメモリ１１０へのバイト単位のデータの書込みを制御する。ライト制御部１３０は、ライトポインタ１４１の上位８ビットをライトＦＩＦＯアドレス信号１３２としてＦＩＦＯメモリ１１０に出力する。ライトＦＩＦＯアドレス信号１３２は、４バイト単位のＦＩＦＯメモリ１１０のアドレスに対応する。ライト制御部１３０は、ＦＩＦＯメモリ１１０への書込みデータである４バイトのライトデータ１３３をＦＩＦＯメモリ１１０に出力する。また、ライト制御部１３０は、ライトポインタ１４１が後述するリードポインタ１７１を追い抜かないように制御する。
【００４９】
以上の構成により、ライト回路１２０は、ライトバイトイネーブル信号１３１およびライトＦＩＦＯアドレス信号１３２により、ＦＩＦＯメモリ１１０に１〜４バイト単位でデータを書込む。例えば、ＦＩＦＯメモリ１１０に４バイト単位でデータを書込む場合には、４ビットのライトバイトイネーブル信号１３１を「１１１１」とすることで、４バイトのデータをライトＦＩＦＯアドレス信号１３２が指定するＦＩＦＯメモリ１１０の４バイト単位のアドレスに書込む。また、ＦＩＦＯメモリ１１０に２バイト単位でデータを書込む場合には、４ビットのライトバイトイネーブル信号１３１を、例えば「００１１」とすることで、２バイトのデータをライトＦＩＦＯアドレス信号１３２が指定するＦＩＦＯメモリ１１０の４バイト単位のアドレスの下位２バイトに対応するアドレスに書込む。
【００５０】
リード回路１５０は、ＦＩＦＯメモリ１１０が保持するデータを読み出す回路である。リード回路１５０は、ＦＩＦＯメモリ１１０に４バイト以上のデータが保持されている通常の動作時には、４バイト単位でデータを読出す。また、リード回路１５０は、４バイト単位のデータ転送においてアンダーフローが発生し、かつ、ＦＩＦＯメモリ１１０に１〜３バイトのデータのみが書込まれている場合には、１〜３バイト単位でデータを読み出す。リード回路１５０は、リード制御部１６０と、リードポインタ保持部１７０と、ポインタ比較部１８０と、バイトアクセス制御部１９０とを備える。
【００５１】
リードポインタ保持部１７０は、ＦＩＦＯメモリ１１０への１バイト単位の読出しバイトアドレスを指定するリードポインタ１７１を保持する。例えば、リードポインタ１７１は１０ビットで構成される。また、リードポインタ１７１は、ＦＩＦＯメモリ１１０に対する４バイト単位のデータの読出しバイトアドレスと、ＦＩＦＯメモリ１１０に対する４バイト単位のアドレスの下位のアドレスであり１バイト単位のデータの読出しアドレスに対応する下位アドレスとを含む。１０ビットのリードポインタ１７１の上位８ビットがＦＩＦＯメモリ１１０に対する４バイト単位のデータの読出しバイトアドレスに対応し、下位２ビットがＦＩＦＯメモリ１１０に対する４バイト単位のアドレスの下位のアドレスであり１バイト単位のデータの書込みアドレスに対応する下位アドレスに対応する。
【００５２】
リード制御部１６０は、ＦＩＦＯメモリ１１０から読み出したデータのバイト数に基づき、リードポインタ保持部１７０が保持するリードポインタ１７１を０からインクリメントする。リードポインタ１７１は、ＦＩＦＯメモリ１１０の最終バイトアドレスになると次は０に戻る。リード制御部１６０は、リードポインタ１７１がライトポインタ１４１を追い抜かないように制御する。また、リード制御部１６０は、ＦＩＦＯメモリ１１０への読出し要求であるリード要求信号１６１をバイトアクセス制御部１９０に出力する。
【００５３】
ポインタ比較部１８０は、リードポインタ１７１とライトポインタ１４１とを比較する。ポインタ比較部１８０は、比較結果からリードポインタ１７１とライトポインタ１４１が同じアドレスであるか否かを示す一致判定信号１８１をバイトアクセス制御部１９０に出力する。また、ＦＩＦＯメモリ１１０から何バイトのデータの読み出しが可能であるかを示すリード可能バイト数信号１８２をバイトアクセス制御部１９０に出力する。
【００５４】
バイトアクセス制御部１９０は、リード要求信号１６１、リードポインタ１７１、一致判定信号１８１およびリード可能バイト数信号１８２から、４ビットのリードバイトイネーブル信号１９１およびリードポインタ１７１の上位８ビットであるリードＦＩＦＯアドレス信号１９２をＦＩＦＯメモリ１１０に出力する。
【００５５】
図２は、ポインタ比較部１８０およびバイトアクセス制御部１９０の詳細な構成を示すブロック図である。
【００５６】
ポインタ比較部１８０は、比較部１８５と減算部１８６を備える。
【００５７】
比較部１８５は、前サイクルにおける１０ビットのライトポインタ１４１の上位８ビットと、１０ビットのリードポインタ１７０の上位８ビットとを比較し、一致するか否かを判定する。すなわち、比較部１８５は、前サイクルにおけるライトポインタ１４１の４バイト単位の書込みアドレスとリードポインタ１７１の４バイト単位の読出しアドレスとが一致するか否かを判定する。比較部１８５は、判定結果を一致判定信号１８１として出力する。例えば、ライトポインタ１４１の上位８ビットと、リードポインタ１７０の上位８ビットとが一致した場合は、一致判定信号１８１は「１」となり、不一致の場合は、一致判定信号は「０」となる。
【００５８】
減算部１８６は、１０ビットのライトポインタ１４１の下位２ビットからリードポインタ１７１の下位２ビットを減算する。すなわち、減算部１８６は、リードポインタ１７１の下位アドレスと、ライトポインタ１４１の下位アドレスとの差分を算出する。これにより、減算部１８６は、４バイト単位のデータ転送におけるアンダーフローが発生した状態（ライトポインタ１４１の上位８ビットと、リードポインタ１７１の上位８ビットとが一致する状態）における、ＦＩＦＯメモリ１１０に保持されている有効な１バイト単位のデータ数を算出することができる。減算部１８６は、算出結果をリード可能バイト数信号１８２として出力する。
【００５９】
バイトアクセス制御部１９０は、リード可能バイト数信号１８２とリードポインタ１７１の下位２ビットとに基づき、ＦＩＦＯメモリ１１０の１以上の下位アドレスを指定する４ビットのリードバイトイネーブル信号１９１を生成する。バイトアクセス制御部１９０は、リード可能判定部１９５を備える。
【００６０】
リード可能判定部１９５は、リード可能バイト数信号１８２とリードポインタ１７１の下位２ビットとから、４ビットのリードバイト位置信号１９６を生成する。リードバイト位置信号１９６の各ビットは、ＦＩＦＯメモリ１１０の1バイトのデータのアドレスに対応する。リードバイト位置信号１９６の４ビットは、リードポインタ１７１が示す１バイト単位のアドレス位置から４バイト分のデータがリード可能であるか否かを示す。例えば、リードバイト位置信号１９６のリード可能なバイト位置に対応するビットが「１」となる。
【００６１】
バイトアクセス制御部１９０は、一致判定信号１８１が「１」の場合（ライトポインタ１４１の上位８ビットとリードポインタ１７１の上位８ビットとが同じ４バイト単位のアドレスを示す場合）、リードバイト位置信号１９６により、リード要求信号１６１をマスクする。リード要求時（リード要求信号１６１が「１」）において、ライトポインタ１４１とリードポインタ１７１との４バイト単位のアドレスが異なる場合（一致判定信号１８１が「０」）は、ＦＩＦＯメモリ１１０の４バイト分のデータをリード可能であるので、４ビットのリードバイトイネーブル信号１９１は、「１１１１」となる。また、リード要求時（リード要求信号１６１が「１））において、ライトポインタ１４１とリードポインタ１７１との４バイト単位のアドレスが等しい場合（一致判定信号１８１が「１」）は、ＦＩＦＯメモリ１１０のリード可能な１バイト単位のデータのアドレスは、リードバイト位置信号１９６に示されるアドレス位置であるので、４ビットのリードバイトイネーブル信号１９１に、リードバイト位置信号１９６が出力される。すなわち、バイトアクセス制御部１９０は、比較部１８５によりライトポインタ１４１の上位８ビットである４バイト単位の書込みアドレスと、リードポインタ１７１の上位８ビットである４バイト単位の読出しアドレスとが一致しないと判定された場合に、４バイト単位でＦＩＦＯメモリ１１０からデータを読み出し、比較部１８５によりライトポインタ１４１の上位８ビットである４バイト単位の書込みアドレスと、リードポインタ１７１の上位８ビットである４バイト単位の読出しアドレスとが一致すると判定された場合に、１〜３バイト単位でＦＩＦＯメモリ１１０からデータを読み出す。また、リード要求でない場合（リード要求信号１６１が「０」）は、リードバイトイネーブル信号１９１は、「００００」となりＦＩＦＯメモリ１１０からのデータの読出しは行われない。
【００６２】
以上のように、本実施の形態におけるデータ転送装置１００は、ＦＩＦＯメモリ１１０の同一の４バイト単位のアドレスに、ライトアクセスとリードアクセスとが行われた場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）には、１〜３バイト単位でデータを読み出す。これにより、４バイト単位のデータ転送におけるアンダーフローが発生した場合にも、ライト回路１２０によりＦＩＦＯメモリ１１０に書込まれた１〜３バイト単位のデータを、リード回路１５０は、遅延なく読み出すことができる。よって、本実施の形態に係るデータ転送装置は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【００６３】
以下、本実施の形態におけるデータ転送装置１００の動作について、図３を用いて説明する。
【００６４】
図３は、本実施の形態におけるデータ転送装置の動作を示すタイミング図である。図３は、ライト回路１２０がデータを書込む４バイト単位のアドレスと、リード回路１５０が読み出す４バイト単位のアドレスが等しい場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）の動作の一例を示す図である。
【００６５】
図３に示すライト要求期間３０１は、ＦＩＦＯメモリ１１０への書込みが行われる期間を示す信号である。また、ＦＩＦＯメモリ保持データ３０２は、ライト回路１２０により書込まれたＦＩＦＯメモリ１１０が保持する有効なデータを示す。図３は、ライト要求期間３０１が３サイクル（第２〜４サイクル）有効になり、その３サイクルの各サイクルにおいて１バイトのデータの書き込みが発生し、その後に、第７サイクルにおいて１バイトのデータの書き込みが発生する場合のデータ転送装置１００の動作を示す。なお、図３において、ライトポインタ１４１が「４」「５」「６」「７」の位置に書かれるバイトデータを「Ｄ４」「Ｄ５」「Ｄ６」「Ｄ７」と表記する。また、有効な複数バイトのデータを、当該バイトデータに対応した記号「Ｄ４」「Ｄ４５」「Ｄ４５６」「Ｄ４５６７」で示す。
【００６６】
ライト制御部１３０は、ライト要求期間３０１が「１」の場合に、ライトバイトイネーブル信号１３１の１バイト単位のデータのアドレスに対応するビットを「１」にする。ライト制御部１３０は、1バイトのデータを書込む毎に、ライトポインタ１４１を１インクリメントする。図３に示す第１サイクルにおいてライトポインタ１４１は「４」であり、ＦＩＦＯメモリ１１０に１バイトのデータが書込まれる毎に、ライトポインタ１４１は、「５」「６」「７」「８」と増加する。ライトポインタ１４１のＦＩＦＯメモリ１１０の４バイト単位のアドレスに対応するライトＦＩＦＯアドレス信号１３２は、第１サイクルにおいて「１」であり、４バイト分の書込みが行われた後（第７サイクルの後）、「２」に増加する。また、第２サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ４」は、第３サイクル以降、ＦＩＦＯメモリ１１０に保持され、第３サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ５」は、第４サイクル以降、ＦＩＦＯメモリ１１０に保持され、第４サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ６」は、第５サイクル以降、ＦＩＦＯメモリ１１０に保持され、第７サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ７」は、第８サイクル以降、ＦＩＦＯメモリ１１０に保持される。なお、図３において、ＦＩＦＯメモリ保持データ３０２は、リード回路１５０によりデータを読み出された後も、読み出されたデータを保持しているが、リード回路１５０によりデータが読み出された後は、読み出したデータを無効としてもよい。
【００６７】
リード回路１５０は、リード制御部１６０が出力するリード要求信号１６１が「１」である期間、ＦＩＦＯメモリ１１０からデータの読出しを行う。
【００６８】
図３に示すように第１および第２サイクルにおいて、リードポインタ１７１は「４」でありライトポインタ１４１と一致する。また、図３に示す全てのサイクルにおいて、ＦＩＦＯメモリ１１０の４バイト単位のアドレスであるリードＦＩＦＯアドレス信号１９２は、前サイクルのライトＦＩＦＯアドレス信号１３２と一致する。よって、比較部１８５は、一致判定信号１８１に「１」を出力する。第１および第２サイクルにおいては、ライトポインタ１４１とリードポインタ１７１とは等しく、ライトポインタ１４１およびリードポインタ１７１の下位２ビットの値も等しい。よって減算部１８６は、リード可能バイト数信号１８２に「０」を出力する。これにより、リード可能判定回路１９５はリードバイト位置信号１９６として「００００」を出力する。ここで、ライトＦＩＦＯアドレス信号１３２の上位８ビットとリードＦＩＦＯアドレス信号１９２の上位８ビットとは一致するので、比較部１８５の出力する一致判定信号１８１は「０」となり、リードバイトイネーブル信号１９１にはリードバイト位置信号１９６の値「００００」が出力される。
【００６９】
第３サイクルにおいて、ライトポインタ１４１は「５」であり、リードポインタ１７１は「４」であり、それぞれの下位２ビットの値は異なる。減算部１８６は、ライトポインタ１４１の下位２ビットの値「１」からリードポインタ１７１の下位２ビットの値「０」を引いた値である「１」をリード可能バイト数信号１８２に出力する。リード可能判定部１９５は、リード可能バイト数信号１８２と、リードポインタ１７１の下位２ビットとに基づき、リードバイト位置信号１９６の対応するビットを「１」にする。具体的には、リード可能バイト数信号１８２が「１」であり、リードポインタ１７１の下位２ビットの値が「０」であるので、バイト位置「０」のビットのみを「１」にし、リードバイト位置信号１９６に「０００１」を出力する。例えば、ここでリード可能バイト数信号１８２が「２」であり、リードポインタ１７１の下位２ビットの値が「１」であった場合には、バイト位置「１」および「２」のビットが「１」となり、リードバイト位置信号１９６には「０１１０」が出力される。第３サイクルにおいて、ライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とは等しいので、リードバイトイネーブル信号１９２には、リードバイト位置信号１９６の値「０００１」が出力される。これにより、リード回路１５０は、リードＦＩＦＯアドレス信号１９２「１」およびリードバイトイネーブル「０００１」に対応するアドレスの１バイトのデータを読み出す。すなわち、第２サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ４」を読み出す。
【００７０】
第４〜５サイクルにおいても第３サイクルと同様の読み出し動作が行われる。第４サイクルにおいて、ライトポインタ１４１は「６」であり、リードポインタ１７１の値「５」とは異なる。減算部１８６は、ライトポインタ１４１の下位２ビットの値「２」からリードポインタ１７１の下位２ビットの値「１」を引いた値である「１」をリード可能バイト数信号１８２に出力する。リード可能判定部１９５は、リード可能バイト数信号１８２と、リードポインタ１７１の下位２ビットとに基づき、リードバイト位置信号１９６の対応するビットを「１」にする。すなわち、リード可能バイト数信号１８２が「１」であり、リードポインタ１７１の下位２ビットの値が「１」であるので、バイト位置「１」のビットのみを「１」にし、リードバイト位置信号１９６に「００１０」を出力する。ライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とは等しいので、リードバイトイネーブル信号１９２には、リードバイト位置信号１９６の値「００１０」が出力される。これにより、リード回路１５０は、リードＦＩＦＯアドレス信号１９２「１」およびリードバイトイネーブル「００１０」に対応するアドレスの１バイトのデータを読み出す。すなわち、第３サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ５」を読み出す。
【００７１】
第５サイクルにおいて、ライトポインタ１４１は「７」であり、リードポインタ１７１の値「６」とは異なる。減算部１８６は、ライトポインタ１４１の下位２ビットの値「３」からリードポインタ１７１の下位２ビットの値「２」を引いた値である「１」をリード可能バイト数信号１８２に出力する。リード可能判定部１９５は、リード可能バイト数信号１８２と、リードポインタ１７１の下位２ビットとに基づき、リードバイト位置信号１９６の対応するビットを「１」にする。すなわち、リード可能バイト数信号１８２が「１」であり、リードポインタ１７１の下位２ビットの値が「２」であるので、バイト位置「２」のビットのみを「１」にし、リードバイト位置信号１９６に「０１００」を出力する。ライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とは等しいので、リードバイトイネーブル信号１９２には、リードバイト位置信号１９６の値「０１００」が出力される。これにより、リード回路１５０は、リードＦＩＦＯアドレス信号１９２「１」およびリードバイトイネーブル「０１００」に対応するアドレスの１バイトのデータを読み出す。すなわち、第４サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ６」を読み出す。
【００７２】
第６および第７サイクルにおいて、ライトポインタ１４１は「７」であり、リードポインタ１７１は「７」であるので、ライトポインタ１４１とリードポインタ１７１とは一致する。よって、第１および第２サイクルと同様に、リードバイトイネーブル１９２は「００００」となり、読出しは行われない。
【００７３】
第８サイクルにおいて、ライトポインタ１４１は「８」であり、リードポインタ１７１は「７」であるので、ライトポインタ１４１とリードポインタ１７１とは異なる。よって、第３〜第５サイクルと同様に読出し動作が行われる。すなわち、リード回路１５０は、第７サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ７」を読み出す。
【００７４】
以上より、本実施の形態におけるデータ転送装置１００は、４バイト単位のアドレスであるライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが等しい場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）には、１バイト単位でデータを読み出す。また、ライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが等しい場合であり、ＦＩＦＯメモリ１１０に１〜３バイトのデータが書込まれている場合には、ＦＩＦＯメモリ１１０が保持する１〜３バイトのデータ全てを、一括して読み出すことができる。よって、４バイト分のデータが書込まれた後に４バイト単位でデータを読み出す場合に比べ、ＦＩＦＯメモリ１１０に書込まれたデータを早いタイミングで読み出すことが可能となる。すなわち、本実施の形態におけるデータ転送装置１００は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。また、本実施の形態におけるデータ転送装置１００は、ＦＩＦＯメモリ１１０に４バイト以上のデータが保持されている場合には、４バイト単位でデータ読み出すので、高速にデータ転送を行うことができる。
【００７５】
なお、上記説明において、ＦＩＦＯメモリ１１０へのデータの書込みおよび読出しのデータ単位は、１〜４バイトとしている複数バイト（ビット）であればよく、１〜４バイトに限定されるものではない。ＦＩＦＯメモリ１１０へのデータの書込みおよび読出しのデータ単位は、４バイト以上であってもよいし、１バイト以下（８ビット以下）であってもよい。
【００７６】
（実施の形態２）
実施の形態１では、ライト回路１２０とリード回路１５０とが同期している場合について説明した。実施の形態２では、ライト回路１２０とリード回路１５０とが非同期で動作する場合であっても、書き込まれたデータを遅延させずにデータ転送が行えるデータ転送装置について説明する。
【００７７】
まず、実施の形態２に係るデータ転送装置の構成を説明する。
【００７８】
図４は、実施の形態２におけるデータ転送装置の構成を示すブロック図である。図４に示すデータ転送装置１０１は、図１に示すデータ転送装置１００の構成に加え、ポインタ非同期受渡部４００を備える。なお、図１と同様の要素には同一の符号を付しており詳細な説明は省略する。
【００７９】
図４に示すライト回路１２０とリード回路１５０とは、非同期で動作する。
【００８０】
ポインタ非同期受渡部４００は、ライトポインタ保持部１４０が保持するライトポインタ１４１をリード回路１５０の動作クロックと同期化し、ライトポインタ４０１としてポインタ比較部１８０に出力する。ポインタ比較部１８０の比較部１８５は、リード回路１５０の動作クロックと同期化されたライトポインタ４０１の上位８ビットとリードポインタ１７１の上位８ビットとが一致するか否かを判定し、判定結果を一致判定信号１８１として出力する。また、減算部１８６は、リードポインタ１７１の下位２ビットとライトポインタ４０１の下位２ビットとの差分を算出し、リード可能バイト数信号として出力する。
【００８１】
図５は、ポインタ非同期受渡回路４００の構成を示すブロック図である。
【００８２】
図５に示すポインタ非同期受渡回路４００は、カウンター５４０と、タイミング制御部５５０と、受け取りタイミング制御部５９０と、フリップフロップ（以下、「ＦＦ」と記す。）５１０、５２０、５３０、５６０、５７０および５８０とを備える。
【００８３】
ライトポインタ１４１は、ＦＦ５１０に保持される。ＦＦ５１０に保持された信号５１１は、ＦＦ５２０へ出力される。
【００８４】
カウンター５４０は、毎サイクルインクリメントし周期的に０に戻るカウント値５４１を出力する。タイミング制御部５５０は、カウント値５４１が所定の値となるタイミングで変化するロードホールド信号５５１をＦＦ５２０に出力する。ＦＦ５２０は、ロードホールド信号５５１の変化するタイミングで信号５１１を取り込む。ＦＦ５２０の出力信号５２１は、非同期境界をまたいで、ＦＦ５３０に入力される。
【００８５】
また、タイミング制御部５５０は、ロードホールド信号５５１の変化のタイミングと離れたタイミングで変化する信号５５２をＦＦ５６０に出力する。ＦＦ５６０は、受け取った信号５５２を非同期境界をまたいで、ＦＦ５７０に出力する。ＦＦ５６０が出力した信号は、ＦＦ５７０および５８０を介し、受け取りタイミング制御部５９０に入力される。
【００８６】
ＦＦ５７０および５８０は、非同期受渡しにおいて、信号を安定して受け渡すために必要なＦＦである。
【００８７】
受け取りタイミング制御部５９０は、ＦＦ５８０が出力する信号５８１に基づき、ＦＦ５３０の取り込みタイミングを決定する信号５９１を出力する。すなわち、ロードホールド信号５５１と離れたタイミングで変化する信号５９１をＦＦ５３０に出力する。
【００８８】
ＦＦ５３０は、信号５３０の変化のタイミングで信号５２１を取り込みライトポインタ４０１として出力する。
【００８９】
以上のような、ポインタ非同期受渡部４００を用いることで、ライトポインタ１４１をリード回路１５０の動作クロックと同期させ、ライトポインタ４０１としてリード回路に出力することができる。これにより、ライト回路１２０とリード回路１５０とが互いに非同期に動作する場合であっても、リード回路１５０は、上述した実施の形態１と同様の処理を行うことができる。よって、本実施の形態に係るデータ転送装置１０１は、ライト回路１２０とリード回路１５０とが互いに非同期に動作する場合であり、ＦＩＦＯメモリ１１０の同一の４バイト単位のアドレスに、ライトアクセスとリードアクセスとが行われた場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）には、１〜３バイト単位でデータを読み出すことができる。これにより、４バイト単位のデータ転送におけるアンダーフローが発生した場合にも、ライト回路１２０によりＦＩＦＯメモリ１１０に書込まれた１〜３バイト単位のデータを、リード回路１５０は、遅延なく読み出すことができる。よって、本実施の形態に係るデータ転送装置は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【００９０】
次に、データ転送装置１０１の動作を説明する。
【００９１】
図６は、実施の形態２に係るデータ転送装置１０１の動作を示すタイミング図である。図６は、ライト回路１２０がデータを書込む４バイト単位のアドレスと、リード回路１５０が読み出す４バイト単位のアドレスが等しい場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）の動作の一例を示す図である。また、ライト回路１２０とリード回路１５０とは非同期に動作する。
【００９２】
図６は、ライト要求期間３０１が３サイクル（第２〜４サイクル）有効になり、その３サイクルの各サイクルにおいて１バイトのデータの書き込みが発生し、その後に、第７サイクルにおいて１バイトのデータの書き込みが発生する場合のデータ転送装置１０１の動作を示す。
【００９３】
図６においてライト回路１２０によるＦＩＦＯメモリ１１０へのデータの書込み動作は、図３と同様であり、ライト制御部１３０は、ライト要求期間３０１が「１」の場合に、ライトバイトイネーブル信号１３１の１バイト単位のアドレスに対応するビットを「１」にする。ライト制御部１３０は、1バイトのデータを書込む毎に、ライトポインタ１４１をインクリメントする。図６において、ライト回路１２０の第１サイクルにおいてライトポインタ１４１は「４」であり、ＦＩＦＯメモリ１１０に１バイトのデータが書込まれる毎に、ライトポインタ１４１は、「５」「６」「７」「８」と増加する。ライトポインタ１４１のＦＩＦＯメモリ１１０の４バイト単位のアドレスに対応するライトＦＩＦＯアドレス信号１３２は、ライト回路１２０の第１サイクルにおいて「１」であり、４バイト分の書込みが行われた後（ライト回路１２０の第７サイクルの後）、「２」に増加する。また、ライト回路１２０の第２サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ４」は、ライト回路１２０の第３サイクル以降、ＦＩＦＯメモリ１１０に保持され、ライト回路１２０の第３サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ５」は、ライト回路１２０の第４サイクル以降、ＦＩＦＯメモリ１１０に保持され、ライト回路１２０の第４サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ６」は、ライト回路１２０の第５サイクル以降、ＦＩＦＯメモリ１１０に保持され、ライト回路１２０の第７サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ７」は、ライト回路１２０の第８サイクル以降、ＦＩＦＯメモリ１１０に保持される。
【００９４】
図６において、ポインタ非同期受渡部４００によるライタポインタ１４１の受渡しタイミングは、ライト回路１２０の第４サイクルのライトポインタ１４１がリード回路１５０の第６サイクルに受渡しされ、ライト回路１２０の第８サイクルのライトポインタ１４１がリード回路１５０の第９サイクルに受け渡される。
【００９５】
図６に示すリード回路１５０の第１〜第５サイクルにおいて、リードポインタ１７１は「４」であり非同期受渡し後のライトポインタ４０１の値「４」と一致する。また、ＦＩＦＯメモリ１１０の４バイト単位のアドレスであるリードＦＩＦＯアドレス信号１９２は「１」であり、ライトＦＩＦＯアドレス信号１３２と一致する。よって、比較部１８５は、一致判定信号１８１に「１」を出力する。リード回路１５０の第１〜第５サイクルにおいては、ライトポインタ４０１とリードポインタ１７１とは等しく、ライトポインタ４０１およびリードポインタ１７１の下位２ビットの値も等しい。よって減算部１８６は、リード可能バイト数信号１８２に「０」を出力する。これにより、リード可能判定回路１９５はリードバイト位置信号１９６として「００００」を出力する。ここで、一致判定信号１８１は「１」であるので、リードバイトイネーブル信号１９１にはリードバイト位置信号１９６の値「００００」が出力され、リード回路１５０による読出し動作は行われない。
【００９６】
リード回路１５０の第６サイクルにおいて、ライト回路１２０の第４サイクルのリードポインタ１４１の値「６」がポインタ非同期受渡部４００によりリード回路１５０に受け渡され、ライトポインタ４０１が「６」になる。減算部１８６は、ライトポインタ４０１の下位２ビットの値「２」からリードポインタ１７１の下位２ビットの値「０」を引いた値である「２」をリード可能バイト数信号１８２に出力する。リード可能判定部１９５は、リード可能バイト数信号１８２と、リードポインタ１７１の下位２ビットとに基づき、リードバイト位置信号１９６の対応するビットを「１」にする。すなわち、リード可能バイト数信号１８２が「２」であり、リードポインタ１７１の下位２ビットの値が「０」であるので、バイト位置「０」および「１」のビットを「１」にし、リードバイト位置信号１９６に「００１１」を出力する。ライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とは等しいので、リードバイトイネーブル信号１９２には、リードバイト位置信号１９６の値「００１１」が出力される。これにより、リード回路１５０は、リードＦＩＦＯアドレス信号１９２「１」およびリードバイトイネーブル「００１１」に対応するアドレスのデータを読み出す。すなわち、ライト回路１２０の第２および第３サイクルにおいて書込まれた２バイトのデータ「Ｄ４５」を読み出す。
【００９７】
リード回路１５０の第７および第８サイクルにおいて、ライトポインタ４０１は「６」であり、リードポインタ１７１は「６」であるので、ライトポインタ４０１とリードポインタ１７１とは一致する。よって、第１〜第５サイクルと同様に、リードバイトイネーブル１９２は「００００」となり、読出しは行われない。
【００９８】
リード回路１５０の第９サイクルにおいて、ライト回路１２０の第８サイクルのリードポインタ１４１の値「８」がポインタ非同期受渡部４００によりリード回路１５０に受け渡され、ライトポインタ４０１が「８」になる。減算部１８６は、ライトポインタ４０１の下位２ビットの値「０」からリードポインタ１７１の下位２ビットの値「２」を引いた値である「２」をリード可能バイト数信号１８２に出力する。リード可能判定部１９５は、リード可能バイト数信号１８２と、リードポインタ１７１の下位２ビットとに基づき、リードバイト位置信号１９６の対応するビットを「１」にする。すなわち、リード可能バイト数信号１８２が「２」であり、リードポインタ１７１の下位２ビットの値が「２」であるので、バイト位置「２」および「３」のビットを「１」にし、リードバイト位置信号１９６に「１１００」を出力する。ライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とは等しいので、リードバイトイネーブル信号１９２には、リードバイト位置信号１９６の値「１１００」が出力される。これにより、リード回路１５０は、リードＦＩＦＯアドレス信号１９２「１」およびリードバイトイネーブル「１１００」に対応するアドレスのデータを読み出す。すなわち、ライト回路１２０の第４および第７サイクルにおいて書込まれた２バイトのデータ「Ｄ６７」を読み出す。
【００９９】
以上より、本実施の形態におけるデータ転送装置１０１は、ライト回路１２０とリード回路１５０とが非同期で動作する場合であり、かつ、４バイト単位のアドレスであるライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが等しい場合であっても、バイト単位でデータを読み出すことができる。よって、４バイト単位のデータが書込まれた後に４バイト単位でデータを読み出す場合に比べ、ＦＩＦＯメモリ１１０に書込まれたデータを早いタイミングで読み出すことが可能となる。よって、ライト回路１２０とリード回路１５０とが非同期で動作する場合でも、ライトアクセス中の、リードアクセスの待ち時間を減少させることができる。すなわち、本実施の形態におけるデータ転送装置１０１は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【０１００】
（実施の形態３）
実施の形態３におけるデータ転送装置は、４バイト単位のデータ転送におけるアンダーフローが発生した場合には１バイト単位で読出し可能な記憶部から１バイト単位でデータを読み出すことで、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【０１０１】
まず、実施の形態３におけるデータ転送装置の構成を説明する。
【０１０２】
図７は、実施の形態３におけるデータ転送装置の構成を示すブロック図である。図７に示すデータ転送装置１０２は、図１に示すデータ転送装置１に加え、記憶部７１５と、セレクタ７９７とを備える。また、リード回路１５０は、データ選択部７９５を備え、バイトアクセス制御部１９０に代わりアクセス制御部７９０を備える。なお、図１と同様の要素には同一の符号を付しており詳細な説明は省略する。
【０１０３】
記憶部７１５は、４バイト以上のデータを記憶する。例えば、記憶部７１５は、４バイト（３２ビット）のデータ保持するＦＦにより構成される。４ビットのライトバイトイネーブル信号１３１の各ビットは、それぞれ１バイトのデータを保持するＦＦと対応する。ライトバイトイネーブル信号１３１の各ビットが「１」であると、対応するＦＦは１バイトのライトデータを保持する。すなわち、記憶部７１５には、ライト回路１２０により、ＦＩＦＯメモリ１１０に書き込まれるデータと同一のデータが順次書込まれる。なお、記憶部７１５は、ＲＡＭ等により構成されてもよい。
【０１０４】
リード回路１５０は、ＦＩＦＯメモリ１１０が保持するデータを、４バイト単位で読み出す。また、リード回路１５０は、記憶部７１５が保持するデータを１〜４バイト単位で読み出す。リード回路１５０は、リード要求部１６０と、リードポインタ保持部１７０と、ポインタ比較部１８０と、アクセス制御部７９０と、データ選択制御部７９５とを備える。
【０１０５】
アクセス制御部７９０は、リード要求信号１６１および一致判定信号１８１に基づき、１ビットのリードイネーブル信号７９１を出力する。リードイネーブル信号７９１は、リード要求信号１６１が「１」（有効）、かつ、一致判定信号１８１が「０」（リードポインタ１７１およびライトポインタ１４１の上位８ビットが不一致）の場合に「１」となり、それ以外の場合は、「０」となる。
【０１０６】
データ選択制御部７９５は、一致判定信号１８１に基づき、セレクタ７９７を制御する選択信号７９６を出力する。例えば、データ選択部７９５が、一致判定信号１８１をバッファし、選択信号７９６として出力する。
【０１０７】
セレクタ７９７は、選択信号７９６に基づき、ＦＩＦＯメモリ１１０の出力データ７９３および記憶部７１５の出力データ７１６のうち何れか一方を選択し、リードデータ７９８としてリード回路１５０に出力する。例えば、選択信号７９６が「０」の場合は、ＦＩＦＯメモリ１１０の出力データ７９３を選択し、選択信号７９６が「１」の場合は、記憶部７１５の出力データ７１６を選択する。
【０１０８】
以上より、本実施の形態に係るデータ転送装置１０２は、４バイト単位のアドレスであるライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが異なる場合（一致判定信号１８１が「０」）には、セレクタ７９７は、ＦＩＦＯメモリ１１０の出力データを選択するので、リード回路１５０は、ＦＩＦＯメモリ１１０が保持するデータを４バイト単位で読み出すことができる。また、４バイト単位のアドレスであるライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが等しい場合（一致判定信号１８１が「１」）には、セレクタ７９７は、記憶部７１５の出力データを選択するので、リード回路１５０は、記憶部７１５が保持するデータを１〜４バイト単位で読み出すことができる。よって、本実施の形態に係るデータ転送装置１０２は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【０１０９】
次に、本実施の形態に係るデータ転送装置１０２の動作を説明する。
【０１１０】
図８は、本実施の形態に係るデータ転送装置１０２の動作を示すタイミング図である。図８は、ライト回路１２０がデータを書込む４バイト単位のアドレスと、リード回路１５０が読み出す４バイト単位のアドレスが等しい場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）のデータ転送装置１０２の動作の一例を示す図である。
【０１１１】
図８に示す記憶部保持データ３０３は、記憶部７１５が保持するバイトデータを示す。図８は、ライト要求期間３０１が３サイクル（第２〜４サイクル）有効になり、その３サイクルの各サイクルにおいて１バイトのデータの書き込みが発生し、その後に、第７サイクルにおいて１バイトのデータの書き込みが発生する場合のデータ転送装置１０２の動作を示す。
【０１１２】
ライト制御部１３０は、ライト要求期間３０１が「１」の場合に、ライトバイトイネーブル信号１３１の１バイト単位のアドレスに対応するビットを「１」にする。ライト制御部１３０は、1バイトのデータを書込む毎に、ライトポインタ１４１をインクリメントする。図８において、第１サイクルにおいてライトポインタ１４１は「４」であり、ＦＩＦＯメモリ１１０に１バイトのデータが書込まれる毎に、ライトポインタ１４１は、「５」「６」「７」「８」と増加する。ライトポインタ１４１のＦＩＦＯメモリ１１０の４バイト単位のアドレスに対応するライトＦＩＦＯアドレス信号１３２は、第１サイクルにおいて「１」であり、４バイト分の書込みが行われた後（第７サイクルの後）、「２」に増加する。また、第２サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ４」は、第３サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持され、第３サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ５」は、第４サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持され、第４サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ６」は、第５サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持され、第７サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ７」は、第８サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持される。また、記憶部７１５は、保持したデータをセレクタ７９７出力する。
【０１１３】
図８に示す全てのサイクルにおいて、前サイクルのライトＦＩＦＯアドレス信号１３２と、リードＦＩＦＯアドレス信号１９２とは等しいので、一致判定信号１８１は、「１」となる。よって、アクセス制御部７９０は、リードイネーブル信号７９１に「０」を出力する。また、一致判定信号１８１が「１」なので、データ選択制御部７９５は、選択信号７９６に「１」を出力する。これにより、セレクタ７９７は、記憶部７１５の出力データ７１６を選択し、リードデータ７９８としてリード回路１５０に出力する。
【０１１４】
第２サイクルにおいて、ライト回路１２０により、ＦＩＦＯメモリ１１０および記憶部７１５にデータ「Ｄ４」が書込まれる。記憶部７１５に書込まれたデータ「Ｄ４」は、次サイクル（第３サイクル）において記憶部７１５の出力データ７１６として出力される。セレクタ７９７は、記憶部７１５の出力データ７１６を選択し、リードデータ７９８としてデータ「Ｄ４」をリード回路１５０に出力する。
【０１１５】
第３サイクルにおいて、ライト回路１２０により、ＦＩＦＯメモリ１１０および記憶部７１５にデータ「Ｄ５」が書込まれる。記憶部７１５に書込まれたデータ「Ｄ５」は、保持しているデータ「Ｄ４」と共に、次サイクル（第４サイクル）において記憶部７１５の出力データ７１６として出力される。セレクタ７９７は、記憶部７１５の出力データ７１６を選択し、リードデータ７９８としてデータ「Ｄ４５」をリード回路１５０に出力する。
【０１１６】
第４サイクルにおいて、ライト回路１２０により、ＦＩＦＯメモリ１１０および記憶部７１５にデータ「Ｄ６」が書込まれる。記憶部７１５に書込まれたデータ「Ｄ６」は、保持しているデータ「Ｄ４５」と共に、次サイクル（第５サイクル）において記憶部７１５の出力データ７１６として出力される。セレクタ７９７は、記憶部７１５の出力データ７１６を選択し、リードデータ７９８としてデータ「Ｄ４５６」をリード回路１５０に出力する。
【０１１７】
同様に、第７サイクルにおいて、ライト回路１２０により、ＦＩＦＯメモリ１１０および記憶部７１５にデータ「Ｄ７」が書込まれる。記憶部７１５に書込まれたデータ「Ｄ７」は、保持しているデータ「Ｄ４５６」と共に、次サイクル（第５サイクル）において記憶部７１５の出力データ７１６として出力される。セレクタ７９７は、記憶部７１５の出力データ７１６を選択し、リードデータ７９８としてデータ「Ｄ４５６７」をリード回路１５０に出力する。
【０１１８】
なお、記憶部７１５の出力データがセレクタ７９８により選択され、リードデータ７９８として複数バイトのデータがリード回路１５０に送られる場合には、リード回路１５０は、リードポインタ保持部１７０が保持するリードポインタ１７１の下位２ビットに基づき、有効なバイトデータを選択し、取得することができる。
【０１１９】
また、ＦＩＦＯメモリ１１０に４バイトのデータが保持された時点（図８における第８サイクル）で、リードイネーブル信号７９１を「１」にし、ＦＩＦＯメモリ１１０からデータを読み出してもよい。また、この場合は、第８サイクルにおいて、データ選択信号７９６を「０」とし、セレクタ７９７がＦＩＦＯメモリの出力データ７９３を選択してもよい。また、４バイト分のデータがＦＩＦＯメモリ１１０に保持され、リード回路１５０により読み出された時点（図８における第９サイクル以降）で、ＦＩＦＯメモリ１１０の読み出されたデータを無効としてもよい。
【０１２０】
以上より、本実施の形態におけるデータ転送装置１０２は、４バイト単位のアドレスであるライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが等しい場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）には、記憶部７１５より１バイト単位でデータを読み出す。また、ライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが等しい場合であり、ＦＩＦＯメモリ１１０および記憶部７１５に１〜３バイトの有効なデータが書込まれている場合には、記憶部７１５が保持する１〜３バイトのデータ全てを、一括して読み出すことができる。よって、４バイト分のデータが書込まれた後に４バイト単位でデータを読み出す場合に比べ、ライト回路１２０が書込んだデータを早いタイミングで読み出すことが可能となる。すなわち、本実施の形態におけるデータ転送装置１０２は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。また、本実施の形態におけるデータ転送装置１０２は、ＦＩＦＯメモリ１１０に４バイト以上のデータが保持されている場合には、４バイト単位でＦＩＦＯメモリ１１０からデータ読み出すので、高速にデータ転送を行うことができる。
【０１２１】
（実施の形態４）
実施の形態３では、ライト回路１２０とリード回路１５０とが同期している場合について説明した。実施の形態４では、ライト回路１２０とリード回路１５０とが非同期で動作する場合であっても、書き込まれたデータを遅延させずにデータ転送が行えるデータ転送装置について説明する。
【０１２２】
図９は、本発明の実施の形態４におけるデータ転送装置の構成を示すブロック図である。図９に示すデータ転送装置１０３は、図７に示す実施の形態３に係るデータ転送装置１０２に加え、ポインタ非同期受渡部４００と、データ非同期受渡部９１７とを備える。なお、図７と同様の要素には同一の符号を付しており詳細な説明は省略する。
【０１２３】
図９に示すライト回路１２０とリード回路１５０とは非同期で動作する。
【０１２４】
ポインタ非同期受渡部４００は、ライトポインタ保持部１４０が保持するライトポインタ１４１をリード回路１５０の動作クロックと同期化し、ライトポインタ４０１としてポインタ比較部１８０に出力する。ポインタ比較部１８０の比較部１８５は、リード回路１５０の動作クロックと同期化されたライトポインタ４０１の上位８ビットとリードポインタ１７１の上位８ビットとが一致するか否かを判定し、判定結果を一致判定信号１８１として出力する。また、ポインタ非同期受渡部４００の構成は、図５の構成と同様である。
【０１２５】
データ非同期受渡部９１７は、記憶部７１５の出力データ７１６をリード回路１５０の動作クロックと同期化し、信号９１８としてセレクタ７９７に出力する。リード回路１５０は、ポインタ比較部１８０によりライトポインタ４０１の上位８ビットとリードポインタ１７１の上位８ビットとが一致すると判定された場合に、記憶部７１５からデータ非同期受渡部９１７により同期化された１〜４バイト単位のデータを読み出す。
【０１２６】
図１０は、記憶部７１５およびデータ非同期受渡部９１７の構成を示すブロック図である。記憶部７１５は、ＦＦ１０１０ａ〜１０１０ｄを備える。ＦＦ１０１０ａ〜１０１０ｄは、それぞれ１バイト（８ビット）のデータを保持するＦＦである。ＦＦ１０１０ａは、ライトバイトイネーブル信号１３１の第１ビットの立上りで、第１ビットに対応するライトデータ１３３（ビット１〜８）を保持する。ＦＦ１０１０ｂは、ライトバイトイネーブル信号１３１の第２ビットの立上りで、第２ビットに対応するライトデータ１３３（ビット９〜１６）を保持する。ＦＦ１０１０ｃは、ライトバイトイネーブル信号１３１の第３ビットの立上りで、第３ビットに対応するライトデータ１３３（ビット１７〜２４）を保持する。ＦＦ１０１０ｄは、ライトバイトイネーブル信号１３１の第４ビットの立上りで、第４ビットに対応するライトデータ１３３（ビット２５〜３２）を保持する。
【０１２７】
データ非同期受渡部９１７は、カウンター１０４０と、タイミング制御部１０５０と、受け取りタイミング制御部１０９０と、ＦＦ１０２０ａ〜１０２０ｄ、１０３０ａ〜１０３０ｄ、１０６０、１０７０および１０８０とを備える。
【０１２８】
カウンター１０４０は、毎サイクルインクリメントし周期的に０に戻るカウント値１０４１を出力する。タイミング制御部１０５０は、カウント値１０４１が所定の値となるタイミングで変化するロードホールド信号１０５１をＦＦ１０２０ａ〜１０２０ｄに出力する。ＦＦ１０２０ａ〜１０２０ｄは、それぞれ１バイト（８ビット）を保持するＦＦである。ＦＦ１０２０ａ〜１０２０ｄは、ロードホールド信号１０５１の変化するタイミングで記憶部７１５の出力データ７１６を取り込む。ＦＦ１０２０ａ〜１０２０ｄの出力信号１０２１ａ〜１０２１ｄは、非同期境界をまたいで、ＦＦ１０３０ａ〜１０３０ｄに入力される。
【０１２９】
また、タイミング制御部１０５０は、ロードホールド信号１０５１と離れたタイミングで変化する信号１０５２をＦＦ１０６０に出力する。ＦＦ１０６０は、受け取った信号１０５２を非同期境界をまたいで、ＦＦ１０７０に出力する。ＦＦ１０６０が出力した信号は、ＦＦ１０７０および１０８０を介し、受け取りタイミング制御部１０９０に入力される。
【０１３０】
ＦＦ１０７０および１０８０は、非同期受渡しにおいて、信号を安定して受け渡すために必要なＦＦである。
【０１３１】
受け取りタイミング制御部１０９０は、ＦＦ１０８０が出力する信号１０８１に基づき、ＦＦ１０３０ａ〜１０３０ｄの取り込みタイミングを決定する信号１０９１を出力する。すなわち、ロードホールド信号１０５１と離れたタイミングで変化する信号１０９１をＦＦ１０３０ａ〜１０３０ｄに出力する。
【０１３２】
ＦＦ１０３０は、信号１０３０の変化のタイミングで信号１０２１を取り込み４バイト（３２ビット）の信号９１８を出力する。
【０１３３】
以上のような、データ非同期受渡部９１７を用いることで、ライト回路１２０とリード回路１５０とが互いに非同期に動作する場合であっても、記憶部７１５の出力データをリード回路１５０と同期させ、セレクタ７９７を介し、リードデータ７９８としてリード回路１５０に出力することができる。また、ポインタ非同期受渡部４００を用いることで、ライトポインタ保持部１４０が保持するライトポインタ１４１をリード回路１５０と同期させライトポインタ４０１としてリード回路１５０に入力することができる。よって、本実施の形態に係るデータ転送装置１０３は、ライト回路１２０とリード回路１５０とが互いに非同期に動作する場合であり、４バイト単位のデータ転送におけるアンダーフローが発生した場合にも、ライト回路１２０によりＦＩＦＯメモリ１１０および記憶部７１５に書込まれた１〜３バイト単位のデータを、リード回路１５０は、記憶部７１５から遅延なく読み出すことができる。よって、本実施の形態に係るデータ転送装置１０３は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【０１３４】
次に、データ転送装置１０３の動作を説明する。
【０１３５】
図１１は、実施の形態４におけるデータ転送装置１０３の動作を示すタイミング図である。図１１は、ライト回路１２０がデータを書込む４バイト単位のアドレスと、リード回路１５０が読み出す４バイト単位のアドレスが等しい場合（４バイト単位のデータ転送におけるアンダーフローが発生した場合）の動作の一例を示す図である。また、ライト回路１２０とリード回路１５０とは非同期に動作する。
【０１３６】
図１１は、ライト要求期間３０１が３サイクル（第２〜４サイクル）有効になり、その３サイクルの各サイクルにおいて１バイトのデータの書き込みが発生し、その後に、第７サイクルにおいて１バイトのデータの書き込みが発生する場合のデータ転送装置１０１の動作を示す。
【０１３７】
図１１におけるライト回路１２０によるＦＩＦＯメモリ１１０および記憶部７１５へのデータの書込み動作は、図８と同様であり、ライト制御部１３０は、ライト要求期間３０１が「１」の場合に、ライトバイトイネーブル信号１３１の１バイト単位のアドレスに対応するビットを「１」にする。ライト制御部１３０は、1バイトのデータを書込む毎に、ライトポインタ１４１をインクリメントする。図１１において、ライト回路１２０の第１サイクルにおいてライトポインタ１４１は「４」であり、ＦＩＦＯメモリ１１０に１バイトのデータが書込まれる毎に、ライトポインタ１４１は、「５」「６」「７」「８」と増加する。ライトポインタ１４１のＦＩＦＯメモリ１１０の４バイト単位のアドレスに対応するライトＦＩＦＯアドレス信号１３２は、ライト回路１２０の第１サイクルにおいて「１」であり、４バイト分の書込みが行われた後（ライト回路１２０の第７サイクルの後）、「２」に増加する。また、ライト回路１２０の第２サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ４」は、ライト回路１２０の第３サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持され、ライト回路１２０の第３サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ５」は、ライト回路１２０の第４サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持され、ライト回路１２０の第４サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ６」は、ライト回路１２０の第５サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持され、ライト回路１２０の第７サイクルにおいてライト回路１２０により書込まれたデータ「Ｄ７」は、ライト回路１２０の第８サイクル以降、ＦＩＦＯメモリ１１０および記憶部７１５に保持される。また、記憶部７１５は、保持したデータをセレクタ７９７出力する。
【０１３８】
なお、図１１において、ポインタ非同期受渡部４００によるライタポインタ１４１の受渡しタイミング、および、データ非同期受渡部９１７による記憶部７１５の出力データ７１６の受渡しタイミングは、ライト回路１２０の第４サイクルのライタポインタ１４１および出力データ７１６がリード回路１５０の第６サイクルに受渡しされ、ライト回路１２０の第８サイクルのライトポインタ１４１および出力データ７１６がリード回路１５０の第９サイクルに受け渡される。
【０１３９】
図１１に示す全てのサイクルにおいて、前サイクルのライトＦＩＦＯアドレス信号１３２と、リードＦＩＦＯアドレス信号１９２とは等しいので、一致判定信号１８１は、「１」となる。よって、アクセス制御部７９０は、リードイネーブル信号７９１に「０」を出力する。また、一致判定信号１８１が「１」なので、データ選択制御部７９５は、選択信号７９６に「１」を出力する。これにより、セレクタ７９７は、データ非同期受渡部９１７の出力データ９１８を選択し、リードデータ７９８としてリード回路１５０に出力する。
【０１４０】
リード回路１５０の第６サイクルにおいて、ライト回路１２０の第４サイクルの記憶部７１５の出力データ７１６がデータ非同期受渡部９１７から出力される。出力されたデータ「Ｄ４５」はセレクタ７９７を介し、リードデータ７９８としてリード回路１５０に入力される。
【０１４１】
リード回路の第９サイクルにおいて、ライト回路１２０の第８サイクルの記憶部７１５の出力データ７１６がデータ非同期受渡部９１７から出力される。出力されたデータ「Ｄ４５６７」はセレクタ７９７を介し、リードデータ７９８としてリード回路１５０に入力される。
【０１４２】
以上より、本実施の形態におけるデータ転送装置１０３は、ライト回路１２０とリード回路１５０とが非同期で動作する場合であり、かつ、４バイト単位のアドレスであるライトＦＩＦＯアドレス信号１３２とリードＦＩＦＯアドレス信号１９２とが等しい場合であっても、記憶部７１５から１バイト単位でデータを読み出すことができる。よって、４バイト単位のデータが書込まれた後に４バイト単位でデータを読み出す場合に比べ、ＦＩＦＯメモリ１１０に書込まれたデータを早いタイミングで読み出すことが可能となる。よって、ライト回路１２０とリード回路１５０とが非同期で動作する場合でも、ライトアクセス中の、リードアクセスの待ち時間を減少させることができる。すなわち、本実施の形態におけるデータ転送装置１０３は、アンダーフローが発生しても、書き込まれたデータを遅延させずにデータ転送が行える。
【産業上の利用可能性】
【０１４３】
本発明は、データ転送装置およびデータ転送方法に適用でき、特に、ＦＩＦＯ方式でデータの読み書きが行われるＦＩＦＯメモリを用い複数バイトのデータ単位でデータ転送を行うデータ転送装置に適用できる。
【図面の簡単な説明】
【０１４４】
【図１】本発明の実施の形態１におけるデータ転送装置の構成を示すブロック図である。
【図２】本発明の実施の形態１におけるポインタ比較部およびバイトアクセス制御部の構成を示す図である。
【図３】本発明の実施の形態１におけるデータ転送装置の動作を示すタイミング図である。
【図４】本発明の実施の形態２におけるデータ転送装置の構成を示すブロック図である。
【図５】本発明の実施の形態２におけるポインタ非同期受渡部の構成を示す図である。
【図６】本発明の実施の形態２におけるデータ転送装置の動作を示すタイミング図である。
【図７】本発明の実施の形態３におけるデータ転送装置の構成を示すブロック図である。
【図８】本発明の実施の形態３におけるデータ転送装置の動作を示すタイミング図である。
【図９】本発明の実施の形態４におけるデータ転送装置の構成を示すブロック図である。
【図１０】本発明の実施の形態４におけるデータ非同期受渡回路の構成を示す図である。
【図１１】本発明の実施の形態４におけるデータ転送装置の動作を示すタイミング図である。
【図１２】従来のデータ転送装置の構成を示すブロック図である。
【図１３】従来の非同期データ転送装置の構成を示すブロック図である。
【符号の説明】
【０１４５】
１００、１０１、１０２、１０３、１２００、１２０１  データ転送装置
１１０、１２１０  ＦＩＦＯメモリ
１２０、１２２０  ライト回路
１３０、１２３０  ライト制御部
１３１、１２３１  ライトイバイトイネーブル信号
１３２、１２３２  ライトＦＩＦＯアドレス信号
１３３、１２３３  ライトデータ
１４０、１２４０  ライトポインタ保持部
１４１、１２４１  ライトポインタ
１５０、１２５０  リード回路
１６０、１２６０  リード制御部
１６１、１２６１  リード要求信号
１７０、１２７０  リードポインタ保持部
１７１、１２７１  リードポインタ
１８０、１２８０  ポインタ比較部
１８１、１２８１  一致判定信号
１８２  リード可能バイト数信号
１８５  比較部
１８６  減算部
１９０  バイトアクセス制御部
１９１  リードバイトイネーブル信号
１９２、１２９２  リードＦＩＦＯアドレス信号
１９３、１２９３  リードデータ
１９５  リード可能判定部
１９６  リードバイト位置信号
３０１  ライト要求期間
３０２  ＦＩＦＯメモリ保持データ
３０３  記憶部保持データ
４００、１３００  非同期受渡部
４０１、１３０１  ライトポインタ（非同期受渡し後）
５４０、１０４０  カウンター
５５０、１０５０  タイミング制御部
５９０、１０９０  受け取りタイミング制御部
７１５  記憶部
７１６  記憶部の出力データ
７９０、１２９０  アクセス制御部
７９１、１２９１  リードイネーブル信号
７９３  ＦＩＦＯメモリの出力データ
７９５  データ選択制御部
７９６  選択信号
７９７  セレクタ
７９８  セレクタの出力データ
９１７  データ非同期受渡部
９１８  データ非同期受渡部の出力データ
【図１】
2007233636.tif 000003
【図２】
2007233636.tif 000004
【図３】
2007233636.tif 000005
【図４】
2007233636.tif 000006
【図５】
2007233636.tif 000007
【図６】
2007233636.tif 000008
【図７】
2007233636.tif 000009
【図８】
2007233636.tif 000010
【図９】
2007233636.tif 000011
【図１０】
2007233636.tif 000012
【図１１】
2007233636.tif 000013
【図１２】
2007233636.tif 000014
【図１３】
2007233636.tif 000015