(57)【特許請求の範囲】
【請求項１】
所定のデータ幅で特定のメモリに記憶されたデータをこのデータ幅ずつ複数の単位データ長に分割して読み出すデータ読出手段と、
このデータ読出手段によって読み出された前記データ幅のデータを入力して、前記メモリに格納されたデータの先頭位置が前記データ幅に対してずれて配置されていない場合には対応する単位データをそのまま出力するデータシフト不要時出力手段と、
前記データ読出手段によって読み出された前記データ幅のデータを入力して、前記メモリに格納されたデータの先頭位置が前記データ幅に対してずれて配置されている場合には、最初の読出サイクルで読み出されるデータと同一位置のデータ部分を各読出サイクルごとに前記データ幅の先頭位置までシフトさせた状態で保持するデータ保持手段と、このデータ保持手段に保持された直前のサイクルのデータ部分を読み出すと共に、前記最初の読出サイクルで読み出されるデータを除いた位置のデータ部分を前記同一位置のデータ部分を前記データ幅の先頭位置までシフトさせたものに続くデータ部分としてそのまま出力するデータ組合せ出力手段とを備えたデータシフト必要時出力手段
とを具備し、
前記データシフト必要時出力手段は、前記データ幅を単位データ長で割り算したときの値と同一の数のデータシフト部を備えており、それぞれのデータシフト部は前記データ読出手段によって読み出されたデータを前記データ幅ずつ複数の単位データ長に分割して入力するデータ入力手段と、これら複数のデータ入力手段から入力される単位データ長の複数のデータから特定の１つの単位データ長のデータを選択する第１のセレクタ手段と、この第１のセレクタ手段で選択された単位データ長のデータを１サイクル分ラッチして出力するラッチ手段と、このラッチ手段の出力する単位データ長のデータと前記第１のセレクタ手段で選択された単位データ長のデータのいずれかを選択する第２のセレクタ手段から構成されている
ことを特徴とするデータ読出装置。
【請求項２】
前記データシフト部は、出力する有効な単位データ長のデータが存在するときのみデータの出力を有効化するデータイネーブル信号を出力することを特徴とする請求項１記載のデータ読出装置。
【請求項３】
前記データシフト部は、前記第２のセレクタ手段からデータを出力するタイミングを判別するデータ出力タイミング判定手段を備え、このデータ出力タイミング判定手段の判定結果でデータの出力を有効化するデータイネーブル信号を出力することを特徴とする請求項１記載のデータ読出装置。
【請求項４】
前記それぞれのデータシフト部はこれらの単位データ長のデータを一斉にパラレルデータとして出力することを特徴とする請求項１記載のデータ読出装置。
【請求項５】
前記データシフト不要時出力手段は前記データシフト必要時出力手段と同一構成となっており、前記第２のセレクタ手段は前記ラッチ手段を選択することなく前記第１のセレクタ手段で選択された単位データ長のデータを常に選択するものであることを特徴とする請求項１記載のデータ読出装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はパケットデータ等のデータをメモリ内から読み出すデータ読出装置に係わり、特にパケットデータ等のデータの先頭位置が所望の位置となるように整形して読み出しを行うデータ読出装置に関する。
【０００２】
【従来の技術】
インターネットのようにパケットデータを使用したパケットネットワークでは、各種のパケットデータの伝送が行われている。このようなパケットネットワークでは、パケットの中継を行うスイッチやルータ等の処理装置で、本来のパケットに新しいＩＰヘッダを付加して、パケットを様々なプロトコルでカプセル化して中継することが行われている。
【０００３】
処理装置でこのような処理を行う際には、パケットはこの装置内部のパケットメモリに一旦格納され、プロトコルヘッダのカプセル化あるいはデカプセル化が行われている。処理装置でパケットをパケットメモリに書き込む際の先頭アドレスは、メモリのデータ幅の倍数の位置に通常は設定されている。
【０００４】
図８はこのようにパケットの格納の開始位置がメモリのデータ幅の倍数の位置と一致したパケットメモリのパケットの格納状態の一例を示したものである。この例のパケットメモリ部１１１はデータ幅が４バイトとなっており、アドレス番地“０”を開始位置としてバイト“０”からバイト“３”までが最初の４バイト分のデータとして格納されている。これ以後、アドレス番地“４”〜“７”、アドレス番地“８”〜“１１”という順序にパケットデータが格納されている。したがって、まずバイト“０”からバイト“３”までのメモリデータを読み出し、続いてアドレス番地“４”〜“７”までのメモリデータを読み出すという順序にメモリデータを読み出していけば、読み出したデータをそのままパケットを構成するデータとして処理することができる。すなわち、処理装置内の各処理ブロック内でのデータの処理に特別な前処理を行う必要がない。
【０００５】
【発明が解決しようとする課題】
ところが、前記したようにパケットデータに対してカプセル化やデカプセル化処理を実施していくと、パケットの先頭アドレスがパケットメモリのデータ幅の倍数の位置と一致しなくなる場合がある。
【０００６】
図９はパケットの先頭アドレスがパケットメモリのデータ幅の倍数の位置と一致しない一例を示したものである。この例のパケットメモリ部１１１もデータ幅が４バイトとなっているが、パケットの先頭の位置としてバイト“０”がアドレス番地“１０”となっており、この位置はデータ幅の先頭位置からずれている。このような例の場合、パケットメモリ部１１１から最初に読み出すメモリデータはバイト“０”およびバイト“１”のデータである。
【０００７】
したがって、図８に示したように、まずバイト“０”からバイト“３”までというように４バイトずつのデータとして処理できるようにするためには、パケットメモリ部１１１内の別の領域に先頭から４バイト単位となるようにメモリデータを整列させ直す必要があった。ところが、パケットメモリ部１１１内でこのような整形処理を行うと、処理装置の処理速度を低下させてしまうという問題があった。
【０００８】
そこで本発明の目的は、所定のデータ幅でデータを格納するメモリで、データの格納開始位置がデータ幅の整数倍となっていないような場合でも、整数倍となる位置からそのデータ幅でデータの読み出しを行うことのできるデータ読出装置を提供することにある。
【０００９】
【課題を解決するための手段】
請求項１記載の発明では、（イ）所定のデータ幅で特定のメモリに記憶されたデータをこのデータ幅ずつ複数の単位データ長に分割して読み出すデータ読出手段と、（ロ）このデータ読出手段によって読み出された前記したデータ幅のデータを入力して、メモリに格納されたデータの先頭位置がデータ幅に対してずれて配置されていない場合には対応する単位データをそのまま出力するデータシフト不要時出力手段と、（ハ）データ読出手段によって読み出された前記したデータ幅のデータを入力して、メモリに格納されたデータの先頭位置がデータ幅に対してずれて配置されている場合には、最初の読出サイクルで読み出されるデータと同一位置のデータ部分を各読出サイクルごとにデータ幅の先頭位置までシフトさせた状態で保持するデータ保持手段と、このデータ保持手段に保持された直前のサイクルのデータ部分を読み出すと共に、最初の読出サイクルで読み出されるデータを除いた位置のデータ部分を前記した同一位置のデータ部分をデータ幅の先頭位置までシフトさせたものに続くデータ部分としてそのまま出力するデータ組合せ出力手段とを備えたデータシフト必要時出力手段とを具備し、（ニ）データシフト必要時出力手段は、データ幅を単位データ長で割り算したときの値と同一の数のデータシフト部を備えており、それぞれのデータシフト部はデータ読出手段によって読み出されたデータをデータ幅ずつ複数の単位データ長に分割して入力するデータ入力手段と、これら複数のデータ入力手段から入力される単位データ長の複数のデータから特定の１つの単位データ長のデータを選択する第１のセレクタ手段と、この第１のセレクタ手段で選択された単位データ長のデータを１サイクル分ラッチして出力するラッチ手段と、このラッチ手段の出力する単位データ長のデータと第１のセレクタ手段で選択された単位データ長のデータのいずれかを選択する第２のセレクタ手段から構成されていることを特徴としている。
【００１０】
すなわち請求項１記載の発明では、所定のデータ幅で特定のメモリに記憶されたデータを、データ読出手段がそのデータ幅ずつ複数の単位データ長に分割して読み出すことにしている。ここで単位データ長とは任意の長さを単位としたデータ長であり、たとえばバイト単位のデータ長をいう。ビット単位であってもよい。本発明では、特定のメモリから前記したデータ幅のデータを入力した場合にメモリに格納されたデータの先頭位置がデータ幅に対してずれて配置されているかどうかによって処理を異ならせている。ずれて配置されていない場合には、データシフト不要時出力手段が対応する単位データをそのまま出力することにしている。ずれて配置されている場合には、データシフト必要時出力手段によって２回の読出サイクルで得たデータを組み合わせることで、前記した所定のデータ幅単位で、ずれが補正されたデータを出力することにしている。すなわち、データ保持手段は、最初の読出サイクルで読み出されるデータと同一位置のデータ部分を各読出サイクルごとにデータ幅の先頭位置までシフトさせた状態で保持する。そして、このデータ保持手段に保持された直前のサイクルのデータ部分を読み出すと共に、データ組合せ出力手段によって、最初の読出サイクルで読み出されるデータを除いた位置のデータ部分を前記した同一位置のデータ部分をデータ幅の先頭位置までシフトさせたものに続くデータ部分としてそのまま出力するようにしている。ここでデータシフト部は、データ幅を単位データ長で割り算したときの値と同一の数であることを示している。また、それぞれのデータシフト部は、データ読出手段によって読み出されたデータをデータ幅ずつ複数の単位データ長に分割して入力するデータ入力手段と、これらのいずれか１つを選択する第１のセレクタ手段と、第１のセレクタ手段の選択したデータを１サイクル遅らせて出力するためのラッチ手段およびこのラッチ手段の出力あるいは第１のセレクタ手段のそのままの出力のいずれか一方を選択するための第２のセレクタ手段を備えて構成されることを示している。
【００１１】
このようにメモリに格納されたデータの先頭位置がデータ幅に対してずれて配置されている場合には合計２サイクルによってずれのないデータを出力するが、後半のサイクルではデータ保持手段に更に次のサイクルでそのまま出力するデータと組み合わせるデータをラッチするので、全体的には１サイクル増えるだけで先頭位置を補正したデータを得ることができることになる。しかも本発明ではメモリに格納されたデータの先頭位置がデータ幅に対してずれて配置されていない場合には、データシフト不要時出力手段が対応する単位データをそのまま出力するので、１サイクル余計に必要とすることはない。
【００１４】
請求項２記載の発明では、請求項１記載のデータ読出装置で、データシフト部は、出力する有効な単位データ長のデータが存在するときのみデータの出力を有効化するデータイネーブル信号を出力することを特徴としている。
【００１５】
すなわち本発明では、データイネーブル信号を用いることで第２のセレクタ手段から出力されるデータが後段の回路装置で採用されるかどうかを決定できるようにしている。データシフト部によっては第２のセレクタ手段から実際のデータが存在しない状態で形式的なデータが出力される場合があるが、データイネーブル信号を用いることでこのような無効なデータを取り入れないようにすることができる。
【００１６】
請求項３記載の発明では、請求項１記載のデータ読出装置で、データシフト部は、第２のセレクタ手段からデータを出力するタイミングを判別するデータ出力タイミング判定手段を備え、このデータ出力タイミング判定手段の判定結果でデータの出力を有効化するデータイネーブル信号を出力することを特徴としている。
【００１７】
すなわち本発明では、データイネーブル信号をデータの取得タイミングの決定に用いるようにしている点で請求項２記載の発明と相違する。
【００１８】
請求項４記載の発明では、請求項１記載のデータ読出装置で、それぞれのデータシフト部はこれらの単位データ長のデータを一斉にパラレルデータとして出力することを特徴としている。
【００１９】
それぞれのデータシフト部はデータを一斉にパラレルデータとして出力してもよいし、データシフト部ごとに別々のタイミングで出力してもよい。請求項４記載の発明では、前者の出力形態を採ることで出力処理の迅速化を図っている。
【００２０】
請求項５記載の発明では、請求項１記載のデータ読出装置で、データシフト不要時出力手段はデータシフト必要時出力手段と同一構成となっており、第２のセレクタ手段はラッチ手段を選択することなく第１のセレクタ手段で選択された単位データ長のデータを常に選択するものであることを特徴としている。
【００２１】
すなわち本発明では、データシフト不要時出力手段をデータシフト必要時出力手段と同一構成とすること、すなわち回路装置の共通化を図ることが可能であることを示している。すなわち、データシフト不要時出力手段の動作時にはラッチ手段を使用しないようにすれば、データシフト必要時出力手段と回路装置を共通化することができる。
【００２２】
【発明の実施の形態】
【００２３】
【実施例】
以下実施例につき本発明を詳細に説明する。
【００２４】
図１は本発明の一実施例におけるデータ読出装置を備えたルータの要部の構成を表わしたものである。ルータ１０１は、パケットを入力する回線１０２と接続された前処理ブロック１０３を備えている。前処理ブロック１０３は回線１０２からパケット１０４を受信し、物理レイヤ処理等のパケット前処理を行うようになっている。前処理ブロック１０３で処理されたパケット１０５はパケットヘッダ処理ブロック１０６に入力される。パケットヘッダ処理ブロック１０６は、入力されたパケット１０５に対してパケットヘッダを検索するパケットヘッダ検索処理や、パケットヘッダの加工を行うパケットヘッダ加工処理およびパケットの行き先を検索する行き先検索処理を行い、後処理ブロック１０８に対して処理後のパケット１０９を送出するようになっている。
【００２５】
ここでパケットヘッダ処理ブロック１０６はパケットメモリ部１１１を接続している。パケットメモリ部１１１は、パケットヘッダ処理ブロック１０６がパケット１０５についての処理を行う間、パケットデータの格納を行うようになっている。また、前記したパケットヘッダ加工処理もパケットメモリ部１１１上で実施される。
【００２６】
パケット１０９を入力する後処理ブロック１０８は、後段のパケットスイッチ１１２等に送り込むパケット１１３に対してインタフェース処理等の必要な処理を行うようになっている。
【００２７】
図２はデータ読出装置の構成を表わしたものである。データ読出装置は、図１に示したパケットヘッダ処理ブロック１０６およびパケットメモリ部１１１によって構成されている。パケットメモリ部１１１は、第１〜第４のメモリ１２１〜１２４を備えている。パケットヘッダ処理ブロック１０６は図１に示した前処理ブロック１０３から送られてきたパケット１０５を入力して処理し、パケット１０９として後処理ブロック１０８に出力するパケット処理部１２５と、第１〜第４のメモリ１２１〜１２４とパケット処理部１２５とを接続するメモリインタフェース１２６とを備えている。メモリインタフェース１２６内にはデータの変換を行うデータ変換部１２７が配置されている。
【００２８】
パケットヘッダ処理ブロック１０６内のパケット処理部１２５は、前処理ブロック１０３からパケット１０５を受信すると、これをメモリインタフェース１２６を経由して第１〜第４のメモリ１２１〜１２４に書き込み、これを基にして各種のパケット処理を行うようになっている。メモリインタフェース１２６は第１〜第４のメモリ１２１〜１２４の制御を行う。本実施例の第１〜第４のメモリ１２１〜１２４は、それぞれ１バイト（８ビット）のデータ幅を持っている。第１〜第４のメモリ１２１〜１２４はパラレルに接続されているので、全体として４バイト（３２ビット）幅のパケットメモリを構成している。これらは、第１〜第４のメモリデータ１３１〜１３４によってデータ変換部１２７とデータの入出力を行うようになっている。
【００２９】
図３は、図２に示したデータ変換部の構成を表わしたものである。データ変換部１２７は、第１〜第４のデータシフト部１４１〜１４４を備えている。図２に示した第１〜第４のメモリ１２１〜１２４の出力する第１〜第４のメモリデータ１３１〜１３４は第１〜第４のデータシフト部１４１〜１４４に共通して入力されるようになっている。第１〜第４のデータシフト部１４１〜１４４は、図２に示したパケット処理部１２５と第１〜第４の制御信号１５１〜１５４の入出力を行うと共に、第１〜第４のバイトデータ１６１〜１６４を第１〜第４のデータシフト部１４１〜１４４からパケット処理部１２５に出力するようになっている。
【００３０】
図４は、第１のデータシフト部の具体的な構成を表わしたものである。図３に示した第２〜第４のデータシフト部１４２〜１４４は第１のデータシフト部１４１と同一の回路構成となっている。そこで、第２〜第４のデータシフト部１４２〜１４４の回路構成の図示および説明は省略する。また、第２〜第４のデータシフト部１４２〜１４４の説明を行うときには便宜的に第１のデータシフト部１４１の回路の符号をそのまま使用して説明を行う。
【００３１】
第１のデータシフト部１４１は、第１〜第４のメモリデータ１３１〜１３４を入力して選択する第１のセレクタ部１７１およびその後段に配置された第２のセレクタ部１７２と、第１のセレクタ部１７１の出力するメモリデータ１７３をラッチするフリップフロップ回路から構成されたフリップフロップ部１７４を備えている。フリップフロップ部１７４の出力するラッチメモリデータ１７５とフリップフロップ部１７４に入力されたメモリデータ１７３と同一のデータは第２のセレクタ部１７２に入力されるようになっている。
【００３２】
第１のデータシフト部１４１内には第１の制御信号１５１を構成するメモリへの制御信号１７７を入力してデータイネーブル信号１７８を出力するデータ出力タイミング判定部１７９と、第１の制御信号１５１を構成するアドレス情報１８０を入力して第１および第２のセレクト信号１８１、１８２を生成するセレクト信号生成部１８３も備えられている。アドレス情報１８０はデータ出力タイミング判定部１７９にも供給されるようになっている。また、第１のセレクト信号１８１は第１のセレクタ部１７１に入力されてその選択に使用される。同様に、第２のセレクト信号１８２は第２のセレクタ部１７２に入力されてその選択に使用されるようになっている。第２のセレクタ部１７２からは第１のバイトデータ１６１が出力されることになる。
【００３３】
以上のような構成のルータ１０１のデータ読出装置の回路動作を具体的に説明する。図４に示した第１のデータシフト部１４１を代表的に説明すると、セレクト信号生成部１８３から出力される第１および第２のセレクト信号１８１、１８２を基にして第１〜第４のメモリデータ１３１〜１３４の選択動作が行われるようになっている。ここでセレクト信号生成部１８３から出力される第１および第２のセレクト信号１８１、１８２の示す選択値Ｓは、アドレス情報１０８を基にして次の（１）式で示すように決定される。ここで選択値Ｓとは、第１〜第４のメモリデータ１３１〜１３４のどれを選択するかを数値“０”〜“３”で表わすものである。数値“０”が第１のメモリデータ１３１に対応し、順に数値“１”〜数値“３”が第２〜第４のメモリデータ１３２〜１３４に対応する。
【００３４】
選択値Ｓ＝アドレス÷４の余り        ……（１）
【００３５】
図５は、第１のセレクタにおける選択値Ｓの関係を表わしたものである。第１〜第４のデータシフト部１４１〜１４４は、第１のセレクタ部１７１に関して、それぞれ図５に総括的に示すテーブルを用意しており、図４に示したアドレス情報１８０を基にして第１〜第４のメモリデータ１３１〜１３４のいずれを選択するかを示す選択値Ｓを決定している。図５で明らかなように第１〜第４のデータシフト部１４１〜１４４が同時に選択するメモリデータは、１つずつシフトした内容となっている。
【００３６】
幾つか例を挙げる。図８に示したようにアドレスが数値“４”の倍数となっているとき、このアドレスを数値“４”で割った余りの値は“０”となる（選択値Ｓ＝“０”）。この場合、第１のデータシフト部１４１は第１のメモリデータ１３１を選択する。また、第２のデータシフト部１４２は第２のメモリデータ１３２を選択し、第３のデータシフト部１４３は第３のメモリデータ１３３を選択し、第４のデータシフト部１４４は第４のメモリデータ１３４を選択することになる。これらはそれぞれメモリデータ１７３として第２のセレクタ部１７２に入力される他、フリップフロップ部１７４からはラッチメモリデータ１７５が第２のセレクタ部１７２に入力されることになる。
【００３７】
図９に示したようにアドレスを数値“４”で割ったときの余りの値が“２”の場合（選択値Ｓ＝“２”）、第１のデータシフト部１４１は第３のメモリデータ１３３を選択する。また、第２のデータシフト部１４２は第４のメモリデータ１３４を選択し、第３のデータシフト部１４３は第１のメモリデータ１３１を選択し、第４のデータシフト部１４４は第２のメモリデータ１３２を選択する。ただし、この場合には第１のメモリデータ１３１および第２のメモリデータ１３２が共に存在していない。したがって、第１のデータシフト部１４１と第２のデータシフト部１４２の２つが対応するメモリデータ１３３、１３４を選択し、第３のデータシフト部１４３および第４のデータシフト部１４４はデータを選択しないことになる。第１のセレクタ部１７１の出力するメモリデータ１７３はそのまま第２のセレクタ部１７２に入力される他、フリップフロップ部１７４からはラッチメモリデータ１７５が第２のセレクタ部１７２に入力される。
【００３８】
ところで、第１〜第４のデータシフト部１４１〜１４４における第２のセレクタ部１７２は、第２のセレクト信号１８２の示す選択値Ｓを基にして、２つのメモリデータ１７３、１７５の一方を選択する。そしてこれらを第１〜第４のバイトデータ１６１〜１６４として出力するようになっている。
【００３９】
図６は、第２のセレクタにおける選択値Ｓの関係を表わしたものである。第１〜第４のデータシフト部１４１〜１４４は、第２のセレクタ部１７２に関して、それぞれ図６に総括的に示すテーブルを用意しており、図４に示したアドレス情報１８０を基にして２つのメモリデータ１７３、１７５のいずれを選択するかを示す選択値Ｓを決定している。
【００４０】
この図で示すように選択値Ｓが“０”の場合、第１〜第４のデータシフト部１４１〜１４４は図４に示す第１のセレクタ部１７１の出力を常に選択する。これに対して選択値Ｓが“１”の場合、第１のデータシフト部１４１のみがフリップフロップ部１７４でラッチしたデータとしてのラッチメモリデータ１７５を選択し、残りの第２〜第４のデータシフト部１４２〜１４４は図４に示す第１のセレクタ部１７１の出力を常に選択する。また、選択値Ｓが“２”の場合、第１および第２のデータシフト部１４１、１４２がフリップフロップ部１７４でラッチしたデータとしてのラッチメモリデータ１７５を選択し、残りの第３および第４のデータシフト部１４３、１４４は図４に示す第１のセレクタ部１７１の出力を常に選択する。選択値Ｓが“３”の場合、第１〜第３のデータシフト部１４１〜１４３がフリップフロップ部１７４でラッチしたデータとしてのラッチメモリデータ１７５を選択する。この場合、残りの第４のデータシフト部１４４のみが図４に示す第１のセレクタ部１７１の出力を常に選択することになる。
【００４１】
これについても幾つか例を挙げる。図８に示したように、パケットがメモリに格納されるときの先頭アドレスがメモリのデータ幅の倍数、すなわち数値“４”の倍数となっているとき、このアドレスを数値“４”で割ったときの余りの値は“０”となる（選択値Ｓ＝“０”）。この場合、第１〜第４のデータシフト部１４１〜１４４は第１のセレクタ部１７１の出力するメモリデータ１７３をすべて選択することになる。
【００４２】
一方、図９に示したようにアドレスを数値“４”で割ったときの余りの値が“２”の場合（選択値Ｓ＝“２”）、第１および第２のデータシフト部１４１、１４２がフリップフロップ部１７４の出力するラッチメモリデータ１７５を選択する。このとき第３および第４のデータシフト部１４３、１４４は第１のセレクタ部１７１の出力するメモリデータ１７３を選択することになる。
【００４３】
そこで、まず図８に示した例の場合について、データ変換部１２７全体の動作を説明する。この例の場合、第１のデータシフト部１４１で第１のセレクタ部１７１が第１のメモリデータ１３１を選択しており、これが第２のセレクタ部１７２で選択されて第１のバイトデータ１６１として出力される。また、第２のデータシフト部１４２では第１のセレクタ部１７１が第２のメモリデータ１３２を選択しており、これが第２のセレクタ部１７２で選択されて第２のバイトデータ１６２として出力される。第３のデータシフト部１４３では第１のセレクタ部１７１が第３のメモリデータ１３３を選択しており、これが第２のセレクタ部１７２で選択されて第３のバイトデータ１６３として出力される。第４のデータシフト部１４４では第１のセレクタ部１７１が第４のメモリデータ１３４を選択しており、これが第２のセレクタ部１７２で選択されて第４のバイトデータ１６４として出力される。
【００４４】
すなわち、この例の場合には図４に示したフリップフロップ部１７４は事実上不要であり、第１のセレクタ部１７１が選択したメモリデータ１７３が第２のセレクタ部１７２で常に選択される。結果的には第１〜第４のデータシフト部１４１〜１４４が図５の論理で選択した第１〜第４のメモリデータ１３１〜１３４がそのまま第２のセレクタ部１７２から出力されることになる。
【００４５】
ところで第１および第２のセレクタ部１７１、１７２の選択動作が行われた時点で、図４に示すデータ出力タイミング判定部１７９はデータイネーブル信号１７８を出力する。図２に示すデータ変換部１２７は、このデータイネーブル信号１７８が有効な場合にのみ第１〜第４のデータシフト部１４１〜１４４から第１〜第４のバイトデータ１６１〜１６４を出力することになる。図８に示したこの例の最初のサイクルでは、アドレス番地“０”〜“３”のデータ（バイト“０”〜“３”）の読み出しが行われる結果、第１のバイトデータ１６１としてバイト“０”についての第１のメモリデータ１３１が出力される。また、第２のバイトデータ１６２としてバイト“１”についての第２のメモリデータ１３２が出力され、第３のバイトデータ１６３としてバイト“２”についての第３のメモリデータ１３３が出力され、更に第４のバイトデータ１６４としてバイト“３”についての第４のメモリデータ１３４が出力されることになる。メモリインタフェース１２６は、これら第１〜第４のメモリデータ１３１〜１３４を第１〜第４のバイトデータ１６１〜１６４として取り込むことになる。すなわち、バイト“０”〜“３”の各データが読み出されることになる。
【００４６】
図８に示した次のサイクルでは、アドレス番地“４”〜“７”のデータ（バイト“４”〜“７”）の読み出しが行われる。この場合にも（１）式より選択値Ｓは“０”なので、先に説明したアドレス番地“０”〜“３”のデータ（バイト“０”〜“３”）の読み出しと全く同じ動作が行われる。したがって、第１のバイトデータ１６１としてバイト“４”についての第１のメモリデータ１３１が出力され、第２のバイトデータ１６２としてバイト“５”についての第２のメモリデータ１３２が出力され、第３のバイトデータ１６３としてバイト“６”についての第３のメモリデータ１３３が出力され、更に第４のバイトデータ１６４としてバイト“７”についての第４のメモリデータ１３４が出力されることになる。メモリインタフェース１２６は、これら第１〜第４のメモリデータ１３１〜１３４を第１〜第４のバイトデータ１６１〜１６４として取り込むことになる。このようにして、第２番目のサイクルではバイト“４”〜“７”のパケットデータの読出処理が行われる。
【００４７】
以下同様にして、パケットデータの読出処理が行われる。図８に示した例では、パケットがメモリに格納されるときの先頭アドレスがメモリのデータ幅の倍数の場合なので、４バイトずつパケットデータが特にシフト処理を行うことなく先頭側のアドレスから順に読み出されることになる。
【００４８】
次に、図９に示す場合を例にとって、パケットがメモリに格納されるときの先頭アドレスがメモリのデータ幅の倍数と異なる場合の回路動作を説明する。図２に示すパケットヘッダ処理ブロック１０６内のパケット処理部１２５が、入力されたパケット１０５を加工した結果として、パケットデータが図９に示したようにアドレス番地“１０”を先頭番地として格納された状態となっているものとする。また、パケットメモリ部１１１の４バイト幅の領域は、図の左端から順に第１〜第４のメモリ１２１〜１２４が１バイト幅ずつ対応しているものとする。
【００４９】
このような条件の下で、パケット処理部１２５がメモリインタフェース１２６を経由して図９に示したパケットを読み出すものとする。この最初のサイクルにおける読出開始時に、アドレス番地“１０”および読み出しの開始を指示する制御信号がメモリインタフェース１２６から出力される。アドレス番地“１０”に対応する第３のメモリ１２３および次のアドレス番地“１１”に対応する第４のメモリ１２４は、これを基にして図９に示したバイト“０”およびバイト“１”のメモリデータを出力する。このとき、先頭のアドレス番地“１０”よりも手前に対応した第１および第２のメモリ１２１、１２２からメモリデータは出力されない。
【００５０】
この図９に示した場合には、パケットの先頭アドレスを数値“４”で割ったときの余りの値は“２”となる（選択値Ｓ＝“２”）。したがって、この最初のサイクルで第１のデータシフト部１４１の第１のセレクタ部１７１は図５に示すように第３のメモリデータ１３３を選択し、図４に示すようにフリップフロップ１７４にこれをラッチさせる。同様に第２のデータシフト部１４２は図５に示すように第４のメモリデータ１３４を選択し、図４に示すようにフリップフロップ１７４にこれをラッチさせる。
【００５１】
図７は、この図９に示す例における各サイクルのデータシフト部の動作を図解したものである。今説明した第１番目のサイクルでは、第１のデータシフト部１４１がバイト“０”の第３のメモリデータ１３３をラッチさせ、第２のデータシフト部１４２がバイト“１”の第４のメモリデータ１３４をラッチさせたことになる。この図７で破線で囲んだ動作はメモリデータのラッチ動作のみであり、バイトデータとして出力される段階ではない。これに対して実線で囲んだ動作はメモリデータが実際にバイトデータとして出力される状態を示している。
【００５２】
第２番目のサイクルで、第１のセレクタ部１７１はラッチさせている第３のメモリデータ１３３をラッチメモリデータ１７５として出力する。同様に第２のセレクタ部１７２はラッチさせている第４のメモリデータ１３３をラッチメモリデータ１７５として出力する。
【００５３】
一方、この第２番目のサイクルの後半のタイミングで、第１〜第４のメモリ１２１〜１２４からアドレス番地“１２”〜“１５”にそれぞれ対応した第１〜第４のメモリデータ１３１〜１３４が読み出される。これらは第１〜第４のデータシフト部１４１〜１４４にパラレルに供給される。図５に示すように、このうちの第１のデータシフト部１４１は第３のメモリデータ１３３を選択し、第２のデータシフト部１４２は第４のメモリデータ１３４を選択する。これらは先と同様にフリップフロップ部１７４でラッチされる。
【００５４】
このとき、図５に示すように第３のデータシフト部１４３は第１のメモリデータ１３１を選択し、第４のデータシフト部１４４は第２のメモリデータ１３２を選択する。これらは図６に示すように第１のセレクタ部１７１の出力するメモリデータ１７３として第２のセレクタ部１７２で直接選択され、バイトデータ１６３、１６４として出力されることになる。この結果、この第２番目のサイクルでは第１〜第４のデータシフト部１４１〜１４４からバイト“０”〜バイト“３”に順序の揃った形でバイトデータ１６１〜１６４がパラレルデータとして出力されることになる。
【００５５】
同様にして第３番目のサイクルでは、第１〜第４のデータシフト部１４１〜１４４からバイト“４”〜バイト“７”に順序の揃った形でバイトデータ１６１〜１６４がパラレルデータとして出力される。以下同様である。
【００５６】
読み出されるバイトデータが４バイトの複数倍の場合、１番最後のサイクルでは、第３のデータシフト部１４３および第４のデータシフト部１４４から１バイトずつメモリデータが読み出される。このとき、その前のサイクルで第１のデータシフト部１４１および第２のデータシフト部１４２のフリップフロップ部１７４でラッチされた１バイトずつメモリデータがラッチメモリデータ１７５として選択されて読み出される。
【００５７】
これに対して読み出されるバイトデータが４バイトの複数倍となっていない場合には、最後のサイクルでデータシフト部１４１〜１４４のうちバイトデータが出力されないものが存在する。バイトデータが出力されないデータシフト部では図４に示したデータイネーブル信号１７８が出力されない。
【００５８】
以上、パケットの先頭アドレスを数値“４”で割ったときの余りの値が“２”の場合を説明したが、余りの値が“１”あるいは“３”の場合にも同様にしてパケットデータの読み出しを行うことができる。
【００５９】
このようにパケットの先頭アドレスを数値“４”で割ったとき割り切れるとき、すなわち図８で示したように余りの値が“０”の場合には、パケットデータの読み出しに際しての遅延は全く発生しない。また、パケットの先頭アドレスを数値“４”で割ったとき割り切れないとき、すなわち図９で示したように余りの値が“０”以外の場合には、１サイクル分だけ読み出しのためのサイクルを増加するだけでパケットデータを４バイトずつ順に読み出すことができることになる。
【００６０】
もちろん、以上説明した実施例ではパケットメモリ部１１１に格納したパケットデータのデータ幅が４バイトの場合を説明したが、これ以外の場合でも本発明を適用することができる。たとえばデータ幅が４バイトを超える場合にはデータシフト部の数をこれに応じて増やせばよい。また、出力されるデータはバイト単位である必要はなくビット単位であってもよい。この場合には、ビットごとにデータシフト部を用意することになる。
【００６１】
更に実施例ではデータ読出装置を備えたルータについて説明したが、ルータ以外の処理装置に対して本発明を適用することができることは当然である。
【００６２】
【発明の効果】
以上説明したように請求項１〜請求項５記載の発明によれば、メモリに格納されたデータの先頭位置がデータ幅に対してずれて配置されている場合には合計２サイクルによってずれのないデータを出力するが、後半のサイクルではデータ保持手段に更に次のサイクルでそのまま出力するデータと組み合わせるデータをラッチするので、全体的には１サイクル増えるだけで先頭位置を補正したデータを得ることができることになる。したがって、従来のこの種の処理に比べて処理の迅速化を図ることができる。しかもメモリに格納されたデータの先頭位置がデータ幅に対してずれて配置されていない場合には、データシフト不要時出力手段が対応する単位データをそのまま出力するので、データ処理のために１サイクル余計に必要とすることはなく迅速な処理が可能である。
【００６３】
また請求項２あるいは請求項３記載の発明によれば、請求項１記載のデータ読出装置で、データシフト部は、出力する有効な単位データ長のデータが存在するときのみデータの出力を有効化するデータイネーブル信号を出力するので、無効なデータを取り入れないようにしたり、データの確実な取得タイミングを得ることができる。
【００６４】
更に請求項４記載の発明によれば、データシフト部はデータを一斉にパラレルデータとして出力するので、データの出力処理の迅速化を図ることができる。
【００６５】
また請求項５記載の発明によれば、データシフト不要時出力手段をデータシフト必要時出力手段と同一構成とすること、すなわち回路装置の共通化を図ることで、そのコストダウンが可能である。
【図面の簡単な説明】
【図１】本発明の一実施例のるデータ読出装置を適用したルータの要部の構成を表わしたブロック図である。
【図２】本実施例のデータ読出装置の構成の概要を表わしたブロック図である。
【図３】図２に示したデータ変換部の構成を表わしたブロック図である。
【図４】本実施例における第１のデータシフト部の具体的な構成を表わしたブロック図である。
【図５】本実施例で第１のセレクタ部における選択値Ｓの関係を表わした説明図である。
【図６】本実施例で第２のセレクタ部における選択値Ｓの関係を表わした説明図である。
【図７】本実施例で図９に示す例における各サイクルのデータシフト部の動作を図解した説明図である。
【図８】パケットの格納の開始位置がメモリのデータ幅の倍数の位置と一致したパケットメモリの一例を示した説明図である。
【図９】パケットの先頭アドレスがデータ幅の倍数の位置と一致しない一例を示したパケットメモリの説明図である。
【符号の説明】
１０６  パケットヘッダ処理ブロック
１１１  パケットメモリ部
１２１  第１のメモリ
１２２  第２のメモリ
１２３  第３のメモリ
１２４  第４のメモリ
１２５  パケット処理部
１２６  メモリインタフェース
１２７  データ変換部
１３１  第１のメモリデータ
１３２  第２のメモリデータ
１３３  第３のメモリデータ
１３４  第４のメモリデータ
１４１  第１のデータシフト部
１４２  第２のデータシフト部
１４３  第３のデータシフト部
１４４  第４のデータシフト部
１６１〜１６４  バイトデータ
１７１  第１のセレクタ部
１７２  第２のセレクタ部
１７３  メモリデータ
１７４  フリップフロップ部
１７５  ラッチメモリデータ
１７８  データイネーブル信号
１７９  データ出力タイミング判定部
１８０  アドレス情報
１８３  セレクト信号生成部
【図１】
0003952779.tif 000002
【図２】
0003952779.tif 000003
【図３】
0003952779.tif 000004
【図４】
0003952779.tif 000005
【図５】
0003952779.tif 000006
【図６】
0003952779.tif 000007
【図７】
0003952779.tif 000008
【図８】
0003952779.tif 000009
【図９】
0003952779.tif 000010