<実施の形態1>
以下、図面を参照して本発明の実施の形態について説明する。
図1は、実施の形態1にかかるデータ転送装置を示すブロック図である。図1に示すように、本実施の形態にかかるデータ転送装置1は、入力制御部10、FIFO部20、及び出力制御部30を備える。FIFO部20は、データ用FIFOバッファ21と制御情報用FIFOバッファ22とを備える。
本実施の形態にかかるデータ転送装置1は、所定のパケット長を有するパケットを入力制御部10において入力し、この入力したパケットをFIFO部20に一時的に保持する。そして、出力制御部30において、FIFO部20に格納されているパケットを所定のタイミングで読み出して出力する。
データ転送装置1が転送するパケットは所定のパケット長を有する。この所定のパケット長は可変であり、データ転送装置1は可変長のパケットを転送することができる。パケットには、データと制御情報とが含まれている。具体的には、図1に示す入力パケットI_DATAには、データと制御情報とが含まれている。
入力制御部10には、入力パケットI_DATA、入力パケットI_DATAの末端を示すラスト情報I_LAST、入力パケットI_DATAが有効データであるか否かを示す有効信号I_VALID、及びパケットI_DATAの制御情報I_CTRL_INFOが供給される。ここで、制御情報I_CTRL_INFOは、入力パケットI_DATAに含まれている制御情報とは異なる制御情報である。つまり、パケットの制御情報は、入力パケットI_DATAに含まれている制御情報と、外部から供給される制御情報I_CTRL_INFOとがある。入力パケットI_DATAに含まれている制御情報は、入力パケットI_DATAの途中または末端に配置されている。
入力制御部10は、データ用FIFOバッファ21にデータwDATAおよびデータ書き込みイネーブル信号D_wenaを出力する。また、入力制御部10は、制御情報用FIFOバッファ22に制御情報C_wDATAおよび制御情報書き込みイネーブル信号C_wenaを出力する。制御情報書き込みイネーブル信号C_wenaは、出力制御部30にも供給される。
データ用FIFOバッファ21は、データ書き込みイネーブル信号D_wenaが活性状態(例えば、ハイレベル)のときに、データwDATAを格納する。また、制御情報用FIFOバッファ22は、制御情報書き込みイネーブル信号C_wenaが活性状態のときに、制御情報C_wDATAを格納する。
本実施の形態にかかるデータ転送装置1において、入力制御部10は、データ用FIFOバッファ21にデータwDATAを格納するタイミング、及び制御情報用FIFOバッファ22に制御情報C_wDATAを格納するタイミングを制御している。
出力制御部30には、入力制御部10から制御情報書き込みイネーブル信号C_wenaが供給される。また、出力制御部30は、データ用FIFOバッファ21にデータ読み出しイネーブル信号D_renaを、制御情報用FIFOバッファ22に制御情報読み出しイネーブル信号C_renaをそれぞれ出力する。
データ用FIFOバッファ21は、出力制御部30から活性状態のデータ読み出しイネーブル信号D_renaが供給されると、出力制御部30にデータrDATAを出力する。制御情報用FIFOバッファ22は、出力制御部30から活性状態の制御情報読み出しイネーブル信号C_renaが供給されると、出力制御部30に制御情報C_rDATAを出力する。
出力制御部30は、データ用FIFOバッファ21からデータrDATAを読み出し、制御情報用FIFOバッファ22から制御情報C_rDATAを読み出す。そして、制御情報C_rDATAを用いて、データrDATAの出力を制御して、制御後のデータである出力データO_DATAを出力する。
このとき、出力制御部30は、データ用FIFOバッファ21からデータrDATAを読み出すタイミングと、制御情報用FIFOバッファ22から制御情報C_rDATAを読み出すタイミングとを調整して、パケット(データrDATA)の先頭からデータの出力を制御している。
ここで、出力制御部30は、制御情報用FIFOバッファ22に制御情報が格納されているか否かを判定可能に構成されている。例えば、出力制御部30は、入力制御部10から供給された制御情報書き込みイネーブル信号C_wenaを用いて、制御情報用FIFOバッファ22に制御情報が格納されているか否かを判定することができる。
つまり、制御情報用FIFOバッファ22は、制御情報書き込みイネーブル信号C_wenaが活性状態のときに制御情報C_wDATAを格納する。よって、出力制御部30は、この制御情報書き込みイネーブル信号C_wenaが活性状態となった際に、制御情報用FIFOバッファ22に制御情報が格納されていると判定することができる。
出力制御部30は、制御情報用FIFOバッファ22に制御情報が格納されていると判定した場合、データ用FIFOバッファ21に格納されているデータrDATA、及び制御情報用FIFOバッファ22に格納されている制御情報C_rDATAを読み出す。そして、読み出した制御情報C_rDATAを用いて、読み出したデータrDATAの出力を制御する。
具体的には、出力制御部30は、入力された制御情報書き込みイネーブル信号C_wenaに基づいて、制御情報用FIFOバッファ22に制御情報が格納されているか否かを判定する。そして、制御情報用FIFOバッファ22に制御情報が格納されていると判定した場合、データ用FIFOバッファ21に格納されているデータrDATAを読み出すためのデータ読み出しイネーブル信号D_renaを生成する。更に、制御情報用FIFOバッファ22に格納されている制御情報C_rDATAを読み出すための制御情報読み出しイネーブル信号C_renaを生成する。このとき、出力制御部30は、データ読み出しイネーブル信号D_renaと制御情報読み出しイネーブル信号C_renaとを同時に活性状態とする。
上述のように、本実施の形態にかかるデータ転送装置1では、パケットに含まれるデータをデータ用FIFOバッファ21に格納し、パケットの制御情報を制御情報用FIFOバッファ22に格納している。そして、データ用FIFOバッファ21および制御情報用FIFOバッファ22からデータrDATAおよび制御情報C_rDATAをそれぞれ読み出す際に、データ用FIFOバッファ21からデータrDATAを読み出すタイミングと、制御情報用FIFOバッファ22から制御情報C_rDATAを読み出すタイミングとを調整している。よって、パケット(データrDATA)の先頭からデータの出力を制御することができるので、パケットの制御処理を柔軟に実施することができる。
したがって、本実施の形態にかかる発明により、パケットの制御処理を柔軟に実施することが可能なデータ転送装置、及びデータ転送方法を提供することができる。
<実施の形態2>
次に、本発明の実施の形態2について説明する。以下で説明する実施の形態2では、実施の形態1で説明したデータ転送装置1(図1参照)の具体的な構成例を示している。
図2は、図1に示したデータ転送装置1が備える入力制御部10の構成例を示すブロック図である。図2に示すように、入力制御部10は、制御情報生成部11と書き込みイネーブル信号生成部12とを備える。
実施の形態1で説明した場合と同様に、入力制御部10には、入力パケットI_DATA、入力パケットI_DATAの末端を示すラスト情報I_LAST、入力パケットI_DATAが有効データであるか否かを示す有効信号I_VALID、及びパケットI_DATAの制御情報I_CTRL_INFOが供給される。
図8に、データ転送装置1に供給されるデータの一例を示す。図8に示すように、入力パケットI_DATAのパケット長は可変である。図8では入力パケットI_DATAのパケット長をnバイト(nは2以上の整数)としている。また、各々のパケットのデータ幅は8ビットであるものとする。入力パケットI_DATAには、入力パケットI_DATAが有効データであるか否かを示す有効信号I_VALID(1ビット)が付加されている。入力パケットI_DATAが有効である場合は有効信号I_VALIDがハイレベルになり、入力パケットI_DATAが供給されない場合(無効な場合)は、有効信号I_VALIDがロウレベルになる。また、入力パケットI_DATAには、入力パケットI_DATAの末端を示すラスト情報I_LAST(1ビット)が付加されている。
更に、入力パケットI_DATAには制御情報が付加されている。図8に示す例では、パケットの制御情報は、入力パケットI_DATAに付加されている制御情報I_CTRL_INFO、及び入力パケットI_DATAに含まれている制御情報PORT_INFOである。
制御情報I_CTRL_INFOは外部から付加される制御情報であり、例えば入力パケットI_DATAのエラー情報(1ビット)である。図8に示すように、制御情報I_CTRL_INFOは、最後のパケットと同じタイミングで入力パケットI_DATAに付加される。換言すると、制御情報I_CTRL_INFOは、パケットの末端に配置されている。
また、制御情報PORT_INFOは、入力パケットI_DATAに含まれている制御情報であり、パケットの転送先(ポート)を示す情報である。図8に示す例では、制御情報PORT_INFOは、入力パケットI_DATAの2バイト目の第7ビットに含まれている。以下で示す例では、制御情報PORT_INFOがロウレベルの場合はポートP1にパケットを転送し、制御情報PORT_INFOがハイレベルの場合はポートP2にパケットを転送するものとする。
また、FIFO部20のメモリ容量の一例を挙げると、例えば、データ用FIFOバッファ21の容量を2048×9ビット、制御情報用FIFOバッファ22の容量を32×2ビットとすることができる。制御情報用FIFOバッファ22の容量は、データ用FIFOバッファ21の容量を最小パケット長で割った容量を必要とする。例えば、最小パケット長を64とした場合は、2048/64=32ビットとなる。
図2に示すように、入力制御部10は、入力パケットI_DATA(8ビット)とラスト情報I_LAST(1ビット)とをまとめて、データwDATA(9ビット)として出力する。このとき、入力パケットI_DATAに含まれている制御情報PORT_INFOは、制御情報生成部11に供給される。また、制御情報生成部11には、外部から制御情報I_CTRL_INFOが供給される。制御情報生成部11は、これらの制御情報、つまり、制御情報PORT_INFOと制御情報I_CTRL_INFOと保持し、保持しているこれらの制御情報をまとめて、制御情報C_wDATAとして出力する。また、制御情報生成部11は、ラスト情報I_LASTが供給されると、保持している制御情報PORT_INFOおよび制御情報I_CTRL_INFOをリセットする。
入力制御部10は、入力された有効信号I_VALIDをデータ書き込みイネーブル信号D_wenaとして出力する。また、有効信号I_VALIDは、書き込みイネーブル信号生成部12にも供給される。書き込みイネーブル信号生成部12には、ラスト情報I_LASTも供給される。書き込みイネーブル信号生成部12は、有効信号I_VALIDとラスト情報I_LASTとを用いて、制御情報書き込みイネーブル信号C_wenaを生成する。
具体的には、書き込みイネーブル信号生成部12は、制御情報PORT_INFOおよび制御情報I_CTRL_INFOのうち、時間軸上最も遅く入力される制御情報が入力されたタイミングで、活性状態の制御情報書き込みイネーブル信号C_wenaを生成する。これにより、制御情報PORT_INFOおよび制御情報I_CTRL_INFOのうち、時間軸上最も遅く入力される制御情報が入力されたタイミングで、制御情報用FIFOバッファ22に制御情報PORT_INFOおよび制御情報I_CTRL_INFOを格納することができる。
図8に示した例では、制御情報PORT_INFOは入力パケットI_DATAの2バイト目に含まれており、制御情報I_CTRL_INFOは入力パケットI_DATAの最後に付加される。よって、この場合は、時間軸上最も遅く入力される制御情報が入力されたタイミングは、制御情報I_CTRL_INFOが入力されたタイミングである。
書き込みイネーブル信号生成部12は、有効信号I_VALIDとラスト情報I_LASTとを入力しているので、制御情報I_CTRL_INFOが入力されたタイミングを把握することができる。よって、書き込みイネーブル信号生成部12は、制御情報I_CTRL_INFOが入力されたタイミング(ラスト情報I_LASTが活性状態となるタイミング)に、活性状態の制御情報書き込みイネーブル信号C_wenaを生成することができる。
図3は、入力制御部10の更に詳細な構成例を示す図であり、制御情報生成部11および書き込みイネーブル信号生成部12の具体的な構成例を示している。
図3に示すように、制御情報生成部11は、ラッチ回路14、15を備える。ラッチ回路14は、入力パケットI_DATAに含まれている制御情報PORT_INFOを入力して保持する。そして、ラッチ回路14は、保持している制御情報PORT_INFOをクロック信号I_CLKに同期して出力する。また、ラッチ回路14は、ラスト情報I_LASTが供給されると、保持している制御情報PORT_INFOをリセットする。ラッチ回路15は、外部から供給された制御情報I_CTRL_INFOを入力して保持する。そして、ラッチ回路15は、保持している制御情報I_CTRL_INFOをクロック信号I_CLKに同期して出力する。また、ラッチ回路15は、ラスト情報I_LASTが供給されると、保持している制御情報I_CTRL_INFOをリセットする。ラッチ回路14から出力された制御情報PORT_INFOとラッチ回路15から出力された制御情報I_CTRL_INFOは、まとめて制御情報C_wDATAとして出力される。
書き込みイネーブル信号生成部12は、カウンタ16およびセレクタ17を備える。カウンタ16は、有効信号I_VALIDが供給されると、クロック信号I_CLKと同期してカウントアップする。カウンタ16のカウント値L_countは、入力パケットI_DATAのパケット位置に対応している。また、カウンタ16は、ラスト情報I_LASTが供給されると、カウンタ16のカウント値L_countをリセットする。
セレクタ17には、ラスト情報I_LAST、カウンタ16のカウント値L_count、及び位置情報CTRL_POSが供給される。ここで、位置情報CTRL_POSは、入力パケットI_DATAに含まれている制御情報PORT_INFOの位置を示す情報である。本実施の形態に示す例では、図8に示したように、制御情報PORT_INFOは入力パケットI_DATAの2バイト目に含まれているので、位置情報CTRL_POSは固定値“2”となる。セレクタ17は、カウンタ16のカウント値L_countと位置情報CTRL_POSの値とを比較することで、制御情報PORT_INFOが入力されたタイミングを判定することができる。具体的には、カウンタ16のカウント値L_countが“2”である場合に、制御情報PORT_INFOが入力されたと判定することができる。
また、セレクタ17には、ラスト情報I_LASTが供給される。本実施の形態に示す例では、図8に示したように、制御情報I_CTRL_INFOは入力パケットI_DATAの最後に付加されるので、ラスト情報I_LASTが供給されるタイミングは、制御情報I_CTRL_INFOが供給されるタイミングと対応している。よって、セレクタ17は、制御情報PORT_INFOが供給されるタイミング、及び制御情報I_CTRL_INFOが供給されるタイミングを把握することができる。
したがって、セレクタ17は、制御情報PORT_INFOおよび制御情報I_CTRL_INFOのうち、時間軸上最も遅く入力される制御情報が入力されたタイミングで、活性状態(“1”)の制御情報書き込みイネーブル信号C_wenaを出力することができる。つまり、セレクタ17は、制御情報I_CTRL_INFOが入力されたタイミングで、活性状態(“1”)の制御情報書き込みイネーブル信号C_wenaを出力する。
なお、上記に示した例では、制御情報I_CTRL_INFOが入力パケットI_DATAの最後に付加されていたので、制御情報I_CTRL_INFOの位置を示す情報としてラスト情報I_LASTを用いることができた。しかし、制御情報I_CTRL_INFOが入力パケットI_DATAの途中に付加されている場合は、制御情報I_CTRL_INFOの位置を示す情報を別途セレクタ17に供給する必要がある。
次に、出力制御回路30の構成例について説明する。図4は、出力制御部30の構成例を示すブロック図である。図4に示すように、出力制御回路30は、制御情報カウント部31、読み出しイネーブル信号生成部32、及びデータ処理部33を備える。
制御情報カウント部31は、制御情報書き込みイネーブル信号C_wena及び制御情報読み出しイネーブル信号C_renaを用いて、制御情報用FIFOバッファ22に制御情報が格納されているか否かを判定する。そして、制御情報用FIFOバッファ22に制御情報が格納されている場合、制御情報が格納されていることを示すdata_exist信号を読み出しイネーブル信号生成部32に出力する。
読み出しイネーブル信号生成部32は、制御情報が格納されていることを示すdata_exist信号が供給されると、データ用FIFOバッファ21に格納されているデータrDATAを読み出すためのデータ読み出しイネーブル信号D_renaを生成する。更に、制御情報用FIFOバッファ22に格納されている制御情報C_rDATAを読み出すための制御情報読み出しイネーブル信号C_renaを生成する。このとき、読み出しイネーブル信号生成部32は、データ読み出しイネーブル信号D_renaと制御情報読み出しイネーブル信号C_renaとを同時に活性状態とする。
データ処理部33は、データ用FIFOバッファ21から読み出されたデータrDATAを、制御情報用FIFOバッファ22から読み出された制御情報C_rDATAを用いて制御して出力する。このとき、データ処理部33は、制御情報C_rDATAを用いてデータrDATAの先頭からデータrDATAの出力を制御する。
本実施の形態では、制御情報C_rDATAに含まれる制御情報PORT_INFOは、データrDATAの出力ポートを示すポート情報であり、データ処理部33は、データ用FIFOバッファ21から読み出されたデータrDATAをポート情報に応じた出力ポート(O_P1_DATAまたはO_P2_DATA)に出力する。
また、本実施の形態では、制御情報C_rDATAに含まれる制御情報I_CTRL_INFOは、データrDATAのエラー情報であり、データ処理部33は、エラー情報がエラーを示す場合、データ用FIFOバッファ21から読み出されたデータrDATAを無効にする。図4に示す例では、データ処理部33は、エラー情報がエラーを示す場合、データ用FIFOバッファ21から読み出されたデータrDATAをエラー出力ポートO_Err_DATAに出力している。なお、エラー処理は、エラー出力ポートO_Err_DATAにデータを出力する以外に、マスク処理やダミーパケットの送信などを用いてもよい。
図5は、図4に示す出力制御部30が備える制御情報カウント部31の詳細な構成例を示す図である。図5に示すように、制御情報カウント部31は、カウンタ35、セレクタ36、及びフリップフロップ回路FF1を備える。カウンタ35は、入力制御部10から制御情報書き込みイネーブル信号C_wenaが供給されるとカウントアップを行い、制御情報読み出しイネーブル信号C_renaが供給されるとカウントダウンを行う。つまり、カウンタ35のカウント値data_countは、制御情報用FIFOバッファ22に格納されている制御情報の量に対応している。カウンタ35のカウント値data_countは、セレクタ36に供給される。
セレクタ36は、カウンタ35のカウント値data_countに応じて、制御情報が格納されていることを示すdata_exist信号を出力する。具体的には、セレクタ36は、カウント値data_countが“0”であれば“0”(ロウレベル)を出力し、カウント値data_countが“1”以上であれば“1”(ハイレベル)を出力する。また、フリップフロップ回路FF1は、data_exist信号を1クロック遅延したdata_exist_1d信号を生成する。
図6は、図4に示す出力制御部30が備える読み出しイネーブル信号生成部32の詳細な構成例を示す図である。図6に示すように、読み出しイネーブル信号生成部32は、論理積回路AND1、AND2、論理和回路OR1〜OR3、及びフリップフロップ回路FF2、FF3を備える。
AND1は、読み出しデータrDATAの最後を示すrLAST信号とdata_exist信号とを入力し、これらの信号の論理積演算結果を出力する。AND2は、data_exist信号、data_exist_1d信号を反転した信号、及びデータ読み出しイネーブル信号D_renaを反転した信号を入力し、これらの信号の論理積演算結果を出力する。フリップフロップ回路FF2は、AND2の出力のタイミングを調整する。OR1は、AND1の出力とフリップフロップ回路FF2の出力の論理和演算結果を出力する。OR2は、OR1の出力とフリップフロップ回路FF3の出力の論理和演算結果を出力する。OR3は、OR1の出力とフリップフロップ回路FF3の出力の論理和演算結果を出力する。フリップフロップ回路FF3は、OR3の出力をラッチし、rLAST信号がハイレベルとなったときにリセットする。
読み出しイネーブル信号生成部32は、データ読み出しイネーブル信号D_renaと制御情報読み出しイネーブル信号C_renaとを生成する。このとき、制御情報読み出しイネーブル信号C_renaを生成する方法には、出力制御部30がデータrDATAをデータ用FIFOバッファ21から読み出している場合(読み出し動作中)と、読み出し動作中ではない場合との2つのパターンがある。
まず、読み出し動作中の場合について説明する。読み出し動作中の場合は、データ読み出しイネーブル信号D_renaがハイレベルなので、AND2の出力はロウレベルになる。よって、制御情報読み出しイネーブル信号C_renaはロウレベルの状態を維持する。その後、読み出し動作が終了するタイミングで、読み出しデータrDATAの最後を示すrLAST信号が立ち上がる。これにより、ハイレベルのrLAST信号がAND1に供給される。このタイミングでdata_exist信号がロウレベルである場合は、AND1およびAND2の出力はロウレベルの状態を維持するので、データ読み出しイネーブル信号D_renaおよび制御情報読み出しイネーブル信号C_renaはロウレベルを維持する。一方、rLAST信号が立ち上がった際にdata_exist信号がハイレベルの状態である場合は、AND1がハイレベルの信号をOR1に出力する。これにより、OR1の出力およびOR2の出力がハイレベルになるので、データ読み出しイネーブル信号D_renaおよび制御情報読み出しイネーブル信号C_renaが同一のタイミングでハイレベルになる。
また、OR1の出力がハイレベルになるので、OR3の出力もハイレベルになり、フリップフロップ回路FF3はハイレベルの信号をラッチする。このため、OR2にはフリップフロップ回路FF3からハイレベルの信号が供給され続けるので、データ読み出しイネーブル信号D_renaはハイレベルの状態を維持する。この状態は、データ用FIFOバッファ21からデータrDATAを読み出す動作が終了するまで、つまりrLAST信号がフリップフロップ回路FF3に供給されるまで継続される。
次に、読み出し動作中ではない場合について説明する。読み出し動作中ではない場合は、rLAST信号がハイレベルにならないので、AND1の出力はロウレベルの状態となる。一方、AND2は、data_exist信号がハイレベル、data_exist_1d信号がロウレベル、データ読み出しイネーブル信号D_renaがロウレベルの場合、ハイレベルの信号をフリップフロップ回路FF2に出力する。フリップフロップ回路FF2は、AND2から出力されたハイレベルの信号のタイミングを調整した後、OR1にハイレベルの信号を出力する。これにより、OR1の出力およびOR2の出力がハイレベルになるので、データ読み出しイネーブル信号D_renaおよび制御情報読み出しイネーブル信号C_renaが同一のタイミングでハイレベルになる。
また、OR1の出力がハイレベルになるので、OR3の出力もハイレベルになり、フリップフロップ回路FF3はハイレベルの信号をラッチする。このため、OR2にはフリップフロップ回路FF3からハイレベルの信号が供給され続けるので、データ読み出しイネーブル信号D_renaはハイレベルの状態を維持する。この状態は、データ用FIFOバッファ21からデータrDATAを読み出す動作が終了するまで、つまりrLAST信号がフリップフロップ回路FF3に供給されるまで継続される。
図7は、図4に示す出力制御部30が備えるデータ処理部33の詳細な構成例を示す図である。図7に示すように、データ処理部33は、ラッチ回路41およびセレクタ42を備える。
ラッチ回路41は、制御情報用FIFOバッファ22から読み出された制御情報C_rDATAを、データrDATAの末端が読み出されるまで、つまり、読み出しデータrDATAの最後を示すrLAST信号が読み出されるまでラッチする。
セレクタ42は、データ用FIFOバッファ21から読み出されたデータrDATAの出力先を、ラッチ回路41でラッチしていた制御情報lat_CTRL_DATAを用いて切り替える。このとき、セレクタ42は、制御情報lat_CTRL_DATAを用いて、データrDATAの先頭からデータrDATAの出力先を切り替える。
制御情報lat_CTRL_DATAには、データrDATAの出力ポートを示す制御情報PORT_INFO、及びデータrDATAのエラー情報である制御情報I_CTRL_INFOが含まれている。
セレクタ42は、制御情報I_CTRL_INFOがエラーを示す場合、データrDATAをエラー出力ポートO_Err_DATAに出力する。また、セレクタ42は、制御情報I_CTRL_INFOが正常を示す場合は、データrDATAを制御情報PORT_INFOが示すポートに出力する。具体的には、セレクタ42は、制御情報PORT_INFOがポートP1を示す場合、データrDATAを出力ポートO_P1_DATAに出力する。また、セレクタ42は、制御情報PORT_INFOがポートP2を示す場合、データrDATAを出力ポートO_P2_DATAに出力する。
次に、本実施の形態にかかるデータ転送装置の動作について、図9に示すフローチャートを用いて詳細に説明する。
本実施の形態にかかるデータ転送装置1は、基本的にクロックの立ち上がりに同期して動作するものとし、クロックの立ち上がりを順番にt1、t2、・・・、t25と示している。図9に示す例では、タイミングt1〜t3でパケットD1が入力され、タイミングt4〜t10でパケットD2が入力され、タイミングt11〜t14でパケットD3が入力される。パケット中の2バイト目の第7ビット目には制御情報PORT_INFOが含まれている。また、外部からパケットのエラー情報である制御情報I_CTRL_INFOが供給される。以下に示す例では、パケットD1がポートP1に出力され、パケットD2がポートP2に出力され、パケットD3がエラーである場合を示している。
まず、タイミングt1で、パケットD1の先頭のパケットが入力制御部10に入力される。このとき、有効信号I_VALIDがハイレベルになるので、データ書き込みイネーブル信号D_wenaもハイレベルになる。よって、データ用FIFOバッファ21にデータwDATA(パケットD1)が書き込まれる。
また、入力制御部10のカウンタ16(図3参照)は、パケットD1が入力されている間、カウント値L_countを順次カウントアップする。カウント値L_countが“1”となるタイミングt2では、ラッチ回路14がポート情報である制御情報PORT_INFOをラッチする。また、タイミングt3で時間軸上最も遅い制御情報I_CTRL_INFOが入力されるので、制御情報書き込みイネーブル信号C_wenaがハイレベルになる。
つまり、本実施の形態では、時間軸上最も遅い制御情報I_CTRL_INFOが入力されるタイミングは、パケットの末端に対応している。よって、図3に示すセレクタ17は、パケットD1の末端を示すラスト情報I_LAST(ハイレベル)が供給されると(タイミングt3)、ハイレベルの制御情報書き込みイネーブル信号C_wenaを制御情報用FIFOバッファ22に出力する。これにより、制御情報用FIFOバッファ22に制御情報C_wDATAが書き込まれる。
また、タイミングt3に制御情報書き込みイネーブル信号C_wenaが立ち上がるので、図5に示すカウンタ35は、タイミングt4においてカウント値data_countをカウントアップする。これによりカウント値data_countが“1”となるので、制御情報が格納されていることを示すdata_exist信号がタイミングt4で立ち上がる。
図6に示す読み出しイネーブル信号生成部32は、data_exist信号がハイレベルになると、データ読み出しイネーブル信号D_renaと制御情報読み出しイネーブル信号C_renaとを立ち上げる。データ読み出しイネーブル信号D_renaはタイミングt5〜t7の間、ハイレベルになり、制御情報読み出しイネーブル信号C_renaはタイミングt5においてハイレベルになる。よって、タイミングt6〜t8の間、データ用FIFOバッファ21に格納されているデータrDATAが読み出される。また、タイミングt6において、制御情報用FIFOバッファ22に格納されている制御情報C_rDATAが読み出される。
本実施の形態にかかるデータ転送装置1では、タイミングt5において、データ読み出しイネーブル信号D_renaと制御情報読み出しイネーブル信号C_renaとを同時に立ち上げている。よって、データrDATAの読み出し開始のタイミングと、制御情報C_rDATAの読み出し開始のタイミングとをそろえることができる。よって、パケットD1(データrDATA)の先頭からデータの出力を制御することができる。
図7に示すデータ処理部33のセレクタ42は、制御情報I_CTRL_INFO(lat_Err)が正常であり、制御情報PORT_INFO(lat_Port)がポートP1を示すので、タイミングt6〜t8において、パケットD1(データrDATA)を出力ポートO_P1_DATAに出力する。
次に、パケットD2の動作について説明する。パケットD2では、パケットD1の末端を示すラスト情報I_LASTが立ち上がった後のタイミングt4〜t10に、データ用FIFOバッファ21にデータwDATA(パケットD2)が書き込まれる。また、タイミングt10にパケットD2の末端を示すラスト情報I_LASTが立ち上がるので、制御情報書き込みイネーブル信号C_wenaが立ち上がり、制御情報用FIFOバッファ22に制御情報C_wDATAが書き込まれる。なお、パケットD2の書き込み動作については、パケットD1の書き込み動作と同様である。
その後、タイミングt11では、読み出し動作が行われておらず、また、data_exist信号がハイレベルになるので、データ読み出しイネーブル信号D_renaと制御情報読み出しイネーブル信号C_renaとが立ち上がる。よって、タイミングt13〜t19の間、データ用FIFOバッファ21に格納されているデータrDATAが読み出される。また、タイミングt13において、制御情報用FIFOバッファ22に格納されている制御情報C_rDATAが読み出される。パケットD2では、制御情報PORT_INFO(lat_Port)がポートP2を示すので、タイミングt13〜t19において、パケットD2(データrDATA)が出力ポートO_P2_DATAに出力される。なお、パケットD2の読み出し動作については、パケットD1の読み出し動作と同様である。
次に、パケットD3の動作について説明する。パケットD3の動作についても、基本的にはパケットD1、D2の動作と同様である。パケットD1、D2の動作と異なる点は、パケットD3の制御情報I_CTRL_INFOがエラーを示す点、及びパケットD3の書き込みが終了するタイミングt14において、パケットD2の読み出し動作が終了していない点である。
パケットD3では、パケットD2の末端を示すラスト情報I_LASTが立ち上がった後のタイミングt11〜t14に、データ用FIFOバッファ21にデータwDATA(パケットD3)が書き込まれる。また、タイミングt14にパケットD3の末端を示すラスト情報I_LASTが立ち上がるので、制御情報書き込みイネーブル信号C_wenaが立ち上がり、制御情報用FIFOバッファ22に制御情報C_wDATAが書き込まれる。なお、パケットD3の書き込み動作については、パケットD1、D2の書き込み動作と同様である。
タイミングt14に制御情報書き込みイネーブル信号C_wenaが立ち上がると、図5に示すカウンタ35は、タイミングt15においてカウント値data_countをカウントアップする。これによりカウント値data_countが“1”となるので、制御情報が格納されていることを示すdata_exist信号がタイミングt15で立ち上がる。しかしながら、タイミングt15ではパケットD2の読み出しが終了していないため、データ読み出しイネーブル信号D_renaがハイレベルの状態となっている。このため、読み出しデータrDATAの最後を示すrLAST信号が立ち上がるまで、パケットD3の制御情報C_rDATAの読み出しが禁止される。
その後、タイミングt19にrLAST信号が立ち上がると、制御情報読み出しイネーブル信号C_renaが立ち上がる。これにより、タイミングt20において、制御情報用FIFOバッファ22に格納されている制御情報C_rDATAが読み出される。
パケットD3においても、タイミングt20において、データrDATAの読み出し開始のタイミングと、制御情報C_rDATAの読み出し開始のタイミングとをそろえることができる。よって、パケットD3(データrDATA)の先頭からデータの出力を制御することができる。
また、パケットD3では、制御情報I_CTRL_INFOがエラーを示すので、タイミングt20〜t23において、パケットD3(データrDATA)がエラー出力ポートO_Err_DATAに出力される。
以上で説明した本実施の形態にかかる発明により、パケットの制御処理を柔軟に実施することが可能なデータ転送装置、及びデータ転送方法を提供することができる。
以上、本発明を上記実施の形態に即して説明したが、本発明は上記実施の形態の構成にのみ限定されるものではなく、本願特許請求の範囲の請求項の発明の範囲内で当業者であればなし得る各種変形、修正、組み合わせを含むことは勿論である。