(57)【要約】同一部分を有する長さの異なる複数の文字列が存在する検索対象から長い方の文字列を効果的に検出する。ある文字を開始点として、入力された文字データとＣＡＭセルアレイ２６内の文字データとの連続一致を判定し、連続一致の有無を示すORFB-0と、連続一致のアドレスを示すMADR-0とを出力する繰り返しデータ検索回路２１と、１文字ずつずらした文字を開始点として連続一致を判定し、連続一致の有無を示すORFB-1、…、ORFB-Kと、連続一致のアドレスを示すMADR-1、…、MADR-Kとを出力するトレース回路１００１、…、１００Ｋとを含む。そして、ORFB-0、…、ORFB-Kのうち最も長く連続一致であった信号を出力した回路が特定され、MADR-0、…、MADR-Kのうちその回路が出力したアドレスが最も長い一致文字列のアドレスとして使用される。
2012090584.tif 000002
【特許請求の範囲】
【請求項１】
第１のデータ要素列に基づいて第２のデータ要素列を検索する際の当該第１のデータ要素列における検索開始点を決定する装置であって、
前記第２のデータ要素列を構成する複数のデータ要素の各データ要素を、当該第２のデータ要素列における当該各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、当該検索データ要素に一致する一致データ要素を当該複数のデータ要素の１つとして記憶していれば、当該一致データ要素が記憶されているアドレスを出力する連想メモリと、
各生成回路が、前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの当該各生成回路に対して決められた個別開始点で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す列存在情報を生成する生成回路である複数の生成回路と、
前記第１のデータ要素列を構成するデータ要素を前記検索データ要素として順次前記連想メモリに与えることによって前記複数の生成回路の各々により順次生成された複数の列存在情報に基づいて、前記検索開始点を決定する決定部と
を含む、装置。
【請求項２】
前記決定部は、前記複数の生成回路のうちの特定の生成回路による前記列存在情報の連続生成回数が、当該連続生成回数が多いと認められるための所定の条件を満たす場合に、当該特定の生成回路に対して決められた前記個別開始点を、前記検索開始点として決定する、請求項１の装置。
【請求項３】
前記所定の条件は、前記特定の生成回路による前記列存在情報の連続生成回数が、前記複数の生成回路のうちの他の生成回路による前記列存在情報の連続生成回数の何れよりも多いという条件を含む、請求項２の装置。
【請求項４】
データ要素列の第１の部分データ要素列を、当該データ要素列の第２の部分データ要素列の位置及び長さの情報で置換することにより、当該データ要素列を圧縮する装置であって、
前記データ要素列の少なくとも一部を構成する複数のデータ要素の各データ要素を、当該データ要素列における当該各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、当該検索データ要素に一致する一致データ要素を当該複数のデータ要素の１つとして記憶していれば、当該一致データ要素が記憶されているアドレスを出力する連想メモリと、
各生成回路が、前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの当該各生成回路に対して決められた個別開始点で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す列存在情報と、当該一致データ要素の列が記憶されているアドレスを示す列アドレス情報とを生成する生成回路である複数の生成回路と、
前記第１の部分データ要素列を構成するデータ要素を前記検索データ要素として順次前記連想メモリに与えることによって前記複数の生成回路の各々により順次生成された複数の列存在情報及び複数の列アドレス情報に基づいて、前記第２の部分データ要素列の位置及び長さを決定する決定部と
を含む、装置。
【請求項５】
前記決定部は、前記複数の生成回路のうちの特定の生成回路による前記列存在情報の連続生成回数が、当該連続生成回数が多いと認められるための所定の条件を満たす場合に、当該特定の生成回路により前記列存在情報が生成されなくなる直前に当該特定の生成回路により生成された前記列アドレス情報に応じて、前記第２の部分データ要素列の位置を決定し、当該連続生成回数に応じて、前記第２の部分データ要素列の長さを決定する、請求項４の装置。
【請求項６】
前記所定の条件は、前記特定の生成回路による前記列存在情報の連続生成回数が、前記複数の生成回路のうちの他の生成回路による前記列存在情報の連続生成回数の何れよりも多いという条件を含む、請求項５の装置。
【請求項７】
データ要素列の第１の部分データ要素列を、当該データ要素列の第２の部分データ要素列の位置及び長さの情報で置換することにより、当該データ要素列を圧縮する装置であって、
前記データ要素列の少なくとも一部を構成する複数のデータ要素の各データ要素を、当該データ要素列における当該各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、当該検索データ要素に一致する一致データ要素を当該複数のデータ要素の１つとして記憶していれば、当該一致データ要素が記憶されているアドレスを出力する連想メモリと、
前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの基準データ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す第１の列存在情報と、当該一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する基本生成回路と、
Ｊ番目の拡張生成回路が、前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの前記基準データ要素からＪ番目のデータ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す第１の列存在情報と、当該一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する拡張生成回路であるＫ個の拡張生成回路（Ｋは自然数、ＪはＫ以下の自然数）と、
前記検索データ要素が前記連想メモリに与えられた場合に、前記基本生成回路及び前記Ｋ個の拡張生成回路の何れかにより前記第１の列存在情報が生成されていれば、それまでに与えられた検索データ要素の列のうちの前記基準データ要素以降の何れかのデータ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていることを示す第２の列存在情報を出力する第１の出力回路と、
前記検索データ要素が前記連想メモリに与えられた場合に、前記基本生成回路及び前記Ｋ個の拡張生成回路のうち、前記第１の列存在情報を生成している少なくとも１つの生成回路が生成する前記第１の列アドレス情報を、第２の列アドレス情報として出力する第２の出力回路と、
前記第１の部分データ要素列を構成するデータ要素を前記検索データ要素として順次前記連想メモリに与え、前記第１の出力回路から前記第２の列存在情報が出力されなくなる直前に前記第２の出力回路から出力された前記第２の列アドレス情報に応じて、前記第２の部分データ要素列の位置を決定し、前記第１の出力回路からの前記第２の列存在情報の連続出力回数に応じて、前記第２の部分データ要素列の長さを決定する決定部と
を含む、装置。
【請求項８】
第１のデータ要素列に基づいて第２のデータ要素列を検索する際の当該第１のデータ要素列における検索開始点を決定する方法であって、
前記第２のデータ要素列を構成する複数のデータ要素の各データ要素を、当該第２のデータ要素列における当該各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、当該検索データ要素に一致する一致データ要素を当該複数のデータ要素の１つとして記憶していれば、当該一致データ要素が記憶されているアドレスを出力する連想メモリを含み、
複数の生成回路の各生成回路が、前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの当該各生成回路に対して決められた個別開始点で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す列存在情報を生成するステップと、
前記第１のデータ要素列を構成するデータ要素を前記検索データ要素として順次前記連想メモリに与えることによって前記複数の生成回路の各々により順次生成された複数の列存在情報に基づいて、前記検索開始点を決定するステップと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索開始点を決定する装置及び方法に関する。特に、本発明は、第１のデータ要素列に基づいて第２のデータ要素列を検索する際の第１のデータ要素列における検索開始点を決定する装置及び方法に関する。
【背景技術】
【０００２】
ｄｅｆｌａｔｅ圧縮（ＲＦＣ１９５１）は、現在コンピュータで広く用いられているデータ圧縮形式であるＺＬＩＢ（ＲＦＣ１９５０）、ＧＺＩＰ（ＲＦＣ１９５２）のベースとなる圧縮方法である。ｄｅｆｌａｔｅ圧縮は２種類の圧縮アルゴリズムの連結で成り立っており、前段部分はＬＺ７７符号化を用いている。ＬＺ７７符号化では、データ中の文字列の繰り返し部分を検索し、その文字列を繰り返し部分の位置及び長さで置き換えることによってデータを圧縮する。例えば、「ＩＢＭ  ｉｓ  ＩＢＭ」という文字列をＬＺ７７符号化する場合、２つ目の「ＩＢＭ」は繰り返しであるため、この部分が圧縮される。具体的には、「７文字前から３文字長が繰り返される」ということを表す「７，３」のような符号に置き換えられて圧縮される。この場合、繰り返し部分の文字長が長いほど圧縮率は高くなる。【０００３】
ここで、ｄｅｆｌａｔｅ圧縮の仕様では、文字列の繰り返し部分の検索をその文字列から最大３２Ｋバイト前までのデータに対して行うことになっており、文字列の繰り返し部分の検索に膨大な文字列比較処理が必要となる。
従って、これをソフトウェアで行おうとすると、処理に時間がかかってしまう。ソフトウェアでは、通常、ハッシュ法により、検索時間の短縮を図ることになる。しかしながら、ハッシュ法では、同じハッシュ値を持つ文字列が多い場合、その一部が捨てられてしまうことがある。つまり、全ての文字列を完全に検索することは、処理時間とバッファ容量を考慮すると難しいという問題があった。【０００４】
そこで、本出願人は、ハードウェアで全ての文字列を完全に検索できる方法を提案している（例えば、特許文献１〜３参照）。しかも、この方法では、文字列の検索を極めて高速に行うことができる。【０００５】
特許文献１では、連想メモリセル列に順に記憶された被検索文字列(BABCABB…)に対して検索文字列(ABCA)を検索する場合、最初の文字(A)との比較動作は全てのセル列で行い、次の文字(B)との比較動作は前回一致したセル列と隣り合うアドレス(2),(5)のセル列のみで行い、次の文字(C)との比較動作は同様にアドレス(3),(6)のセル列のみで行い、最後の文字(A)との比較動作は同様にアドレス(4)のセル列のみで行うことにより、短時間で検索処理が終了するようにしている。【０００６】
特許文献２では、マッチ線のスイッチング素子を挟んで接地端の反対側の部分と電源との間に第１のスイッチング手段を設け、第１のスイッチング手段を、連想メモリが比較結果に応じてスイッチング素子をオン又はオフしている期間又は比較前の準備期間内の一部の期間オンさせることにより、貫通電流が流れている期間を短くし、消費電力を低減している。【０００７】
特許文献３では、書込みバッファの検索文字とＣＡＭの各セル列に記憶されている文字データとの比較結果を第１ラッチ、第２ラッチに順次保持し、信号生成回路が、入力信号がローであれば第１ラッチの出力と前段の第３ラッチの出力とのＡＮＤを、入力信号がハイであれば第１ラッチの出力と前段の第２ラッチの出力とのＡＮＤを、第３ラッチを介してプライオリティエンコーダに出力すると共にＯＲ回路に出力し、第１及び第２プライオリティエンコーダが、入力信号のＯＲを出力し、ＯＲ回路から出力された信号が第４ラッチ及び別のＯＲ回路を経由して各信号生成回路に入力されるようにすることにより、クロックの１周期で信号が通過すべき経路の長さを半分にして高速化している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平７−１１４５７７号公報
【特許文献２】特開平８−１４７９８６号公報
【特許文献３】特開平８−２４２１７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで、特許文献１〜３に記載された文字列検索装置では、１文字以上の文字列の一致を、最初に一致した文字からトレースすることにより判断する。多くの圧縮対象データに対してこの方法は有効である。しかしながら、同一部分を有する長さの異なる複数の文字列がオーバーラップして存在し、この複数の文字列に同一部分が末尾にある文字列と先頭にある文字列とが含まれ、後者の方が長いケースもある。このようなケースに対応するには、文字列の複数のトレースを並行して行う必要がある。【００１０】
本発明の目的は、同一部分を有する長さの異なる複数の文字列が存在する検索対象から長い方の文字列を効果的に検出することにある。
【課題を解決するための手段】
【００１１】
かかる目的のもと、本発明は、第１のデータ要素列に基づいて第２のデータ要素列を検索する際の第１のデータ要素列における検索開始点を決定する装置であって、第２のデータ要素列を構成する複数のデータ要素の各データ要素を、第２のデータ要素列における各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、検索データ要素に一致する一致データ要素を複数のデータ要素の１つとして記憶していれば、一致データ要素が記憶されているアドレスを出力する連想メモリと、各生成回路が、検索データ要素が連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの各生成回路に対して決められた個別開始点で始まる列に一致する一致データ要素の列が連想メモリに記憶されていれば、連想メモリから出力されるアドレスに基づいて、一致データ要素の列が記憶されていることを示す列存在情報を生成する生成回路である複数の生成回路と、第１のデータ要素列を構成するデータ要素を検索データ要素として順次連想メモリに与えることによって複数の生成回路の各々により順次生成された複数の列存在情報に基づいて、検索開始点を決定する決定部とを含む、装置を提供する。【００１２】
ここで、決定部は、複数の生成回路のうちの特定の生成回路による列存在情報の連続生成回数が、連続生成回数が多いと認められるための所定の条件を満たす場合に、特定の生成回路に対して決められた個別開始点を、検索開始点として決定する、ものであってよい。
そして、所定の条件は、特定の生成回路による列存在情報の連続生成回数が、複数の生成回路のうちの他の生成回路による列存在情報の連続生成回数の何れよりも多いという条件を含む、ものであってよい。【００１３】
また、本発明は、データ要素列の第１の部分データ要素列を、データ要素列の第２の部分データ要素列の位置及び長さの情報で置換することにより、データ要素列を圧縮する装置であって、データ要素列の少なくとも一部を構成する複数のデータ要素の各データ要素を、データ要素列における各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、検索データ要素に一致する一致データ要素を複数のデータ要素の１つとして記憶していれば、一致データ要素が記憶されているアドレスを出力する連想メモリと、各生成回路が、検索データ要素が連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの各生成回路に対して決められた個別開始点で始まる列に一致する一致データ要素の列が連想メモリに記憶されていれば、連想メモリから出力されるアドレスに基づいて、一致データ要素の列が記憶されていることを示す列存在情報と、一致データ要素の列が記憶されているアドレスを示す列アドレス情報とを生成する生成回路である複数の生成回路と、第１の部分データ要素列を構成するデータ要素を検索データ要素として順次連想メモリに与えることによって複数の生成回路の各々により順次生成された複数の列存在情報及び複数の列アドレス情報に基づいて、第２の部分データ要素列の位置及び長さを決定する決定部とを含む、装置も提供する。【００１４】
更に、本発明は、データ要素列の第１の部分データ要素列を、データ要素列の第２の部分データ要素列の位置及び長さの情報で置換することにより、データ要素列を圧縮する装置であって、データ要素列の少なくとも一部を構成する複数のデータ要素の各データ要素を、データ要素列における各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、検索データ要素に一致する一致データ要素を複数のデータ要素の１つとして記憶していれば、一致データ要素が記憶されているアドレスを出力する連想メモリと、検索データ要素が連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの基準データ要素で始まる列に一致する一致データ要素の列が連想メモリに記憶されていれば、連想メモリから出力されるアドレスに基づいて、一致データ要素の列が記憶されていることを示す第１の列存在情報と、一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する基本生成回路と、Ｊ番目の拡張生成回路が、検索データ要素が連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの基準データ要素からＪ番目のデータ要素で始まる列に一致する一致データ要素の列が連想メモリに記憶されていれば、連想メモリから出力されるアドレスに基づいて、一致データ要素の列が記憶されていることを示す第１の列存在情報と、一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する拡張生成回路であるＫ個の拡張生成回路（Ｋは自然数、ＪはＫ以下の自然数）と、検索データ要素が連想メモリに与えられた場合に、基本生成回路及びＫ個の拡張生成回路の何れかにより第１の列存在情報が生成されていれば、それまでに与えられた検索データ要素の列のうちの基準データ要素以降の何れかのデータ要素で始まる列に一致する一致データ要素の列が連想メモリに記憶されていることを示す第２の列存在情報を出力する第１の出力回路と、検索データ要素が連想メモリに与えられた場合に、基本生成回路及びＫ個の拡張生成回路のうち、第１の列存在情報を生成している少なくとも１つの生成回路が生成する第１の列アドレス情報を、第２の列アドレス情報として出力する第２の出力回路と、第１の部分データ要素列を構成するデータ要素を検索データ要素として順次連想メモリに与え、第１の出力回路から第２の列存在情報が出力されなくなる直前に第２の出力回路から出力された第２の列アドレス情報に応じて、第２の部分データ要素列の位置を決定し、第１の出力回路からの第２の列存在情報の連続出力回数に応じて、第２の部分データ要素列の長さを決定する決定部とを含む、装置も提供する。【００１５】
更にまた、本発明は、第１のデータ要素列に基づいて第２のデータ要素列を検索する際の第１のデータ要素列における検索開始点を決定する方法であって、第２のデータ要素列を構成する複数のデータ要素の各データ要素を、第２のデータ要素列における各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、検索データ要素に一致する一致データ要素を複数のデータ要素の１つとして記憶していれば、一致データ要素が記憶されているアドレスを出力する連想メモリを含み、複数の生成回路の各生成回路が、検索データ要素が連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの各生成回路に対して決められた個別開始点で始まる列に一致する一致データ要素の列が連想メモリに記憶されていれば、連想メモリから出力されるアドレスに基づいて、一致データ要素の列が記憶されていることを示す列存在情報を生成するステップと、第１のデータ要素列を構成するデータ要素を検索データ要素として順次連想メモリに与えることによって複数の生成回路の各々により順次生成された複数の列存在情報に基づいて、検索開始点を決定するステップとを含む、方法も提供する。
【発明の効果】
【００１６】
本発明によれば、同一部分を有する長さの異なる複数の文字列が存在する検索対象から長い方の文字列を効果的に検出することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態が適用されるマイクロコンピュータの構成例を示した図である。
【図２】本発明の実施の形態における繰り返しデータ検索回路の構成例を示したブロック図である。
【図３】連想メモリセルの構成例を示した回路図である。
【図４】本発明の実施の形態における比較結果制御回路の構成例を示したブロック図である。
【図５】（ａ）乃至（ｅ）は本実施の形態における比較結果制御回路の動作を説明するための概念図である。
【図６】複数の文字列のトレースを並行して行うことが必要になる文字列検索の具体例を示した図である。
【図７−１】本発明の実施の形態における繰り返しデータ検索装置の構成例を示した図である。
【図７−２】本発明の実施の形態における繰り返しデータ検索装置の構成例を示した図である。
【図８−１】（ａ）、（ｂ）は本発明の実施の形態の繰り返しデータ検索回路及びトレース回路における動作を説明するための概念図である。
【図８−２】（ｃ）、（ｄ）は本発明の実施の形態の繰り返しデータ検索回路及びトレース回路における動作を説明するための概念図である。
【図８−３】（ｅ）、（ｆ）は本発明の実施の形態の繰り返しデータ検索回路及びトレース回路における動作を説明するための概念図である。
【図９】本発明の実施の形態におけるデータ圧縮コントローラの動作例を示したフローチャートである。
【図１０】図９のフローチャートにおける圧縮データ出力処理の内容を示したフローチャートである。
【発明を実施するための形態】
【００１８】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
図１は、本実施の形態が適用されるマイクロコンピュータ１０の構成（一部）を示す。マイクロコンピュータ１０は、ＣＰＵ１２、ＲＯＭ１４、ＲＡＭ１６を備えており、これらはアドレスバス、データバス、コントロールバス等からなるバス１８を介して互いに接続されている。
【００１９】
また、マイクロコンピュータ１０は、本実施の形態における複数の繰り返しデータ検索装置２０ａ、２０ｂ、…を備えており、これらは、繰り返しデータ検索装置の作動を制御するデータ圧縮コントローラ２２を介してバス１８に接続されている。尚、繰り返しデータ検索装置２０ａ、２０ｂ、…は各々同一の構成であり、本実施の形態ではＰ＋１個の繰り返しデータ検索装置が設けられている。以下ではＰ＋１個の繰り返しデータ検索装置を「繰り返しデータ検索装置２０」と総称してその構成を説明すると共に、個々の繰り返しデータ検索装置については「ブロック０」〜「ブロックＰ」と称して区別する。
【００２０】
図２は、本実施の形態における繰り返しデータ検索装置２０のベースとなる繰り返しデータ検索回路２１を示した図である。
繰り返しデータ検索回路２１は、図に「○」で示す多数の連想メモリセル（以下、連想メモリをＣＡＭという）２８がマトリクス状に配置されて構成されたＣＡＭセルアレイ２６を備えている。ＣＡＭセルアレイ２６にはＮ＋１本のワード線WL0〜WLN、Ｎ＋１本のマッチ線MATCH0〜MATCHN、Ｍ＋１組のビット線対BL0,BL0'〜BLM,BLM'が各々マトリクス状に配置されており、各ＣＡＭセル２８は、ワード線WL0〜WLNの何れか、マッチ線MATCH0〜MATCHNの何れか、及び、ビット線対BL0,BL0'〜BLM,BLM'の何れかに各々接続されている。
【００２１】
多数のＣＡＭセル２８は、各々同一の構成を有している。図３に示すように、ＣＡＭセル２８は、互いの入力端と出力端とが接続された２個のＮＯＴ回路３０、３２を備えている。このＮＯＴ回路３０、３２のループが、１ビットのデータを記憶する記憶回路（ＳＲＡＭ型）を構成する。ＮＯＴ回路３０の出力端はＮ−ＭＯＳＦＥＴ３４のソースに、ＮＯＴ回路３２の出力端は同じくＮ−ＭＯＳＦＥＴ３６のソースに各々接続されており、Ｎ−ＭＯＳＦＥＴ３４、３６のゲートは各々ワード線WLに接続されている。また、Ｎ−ＭＯＳＦＥＴ３４、３６のドレインは各々ビット線BL,BL'に接続されている。
【００２２】
ここで、ＣＡＭセル２８に１ビットのデータを書き込む場合には、ワード線WLはハイレベルとされ、ビット線BLは書き込むデータＤに対応したレベル（Ｄが「１」の場合はハイレベル、「０」の場合はローレベル）とされ、ビット線BL'はビット線BLのレベルに対して反転したレベル（ビット線BLがハイレベルの場合はローレベル、ビット線BLがローレベルの場合はハイレベル）とされる。これにより、Ｎ−ＭＯＳＦＥＴ３４、３６がオンし、ビット線BL又はBL'を介して供給されたデータがＮＯＴ回路３０、３２のループに保持される。
【００２３】
また、ＮＯＴ回路３０の出力端はＮ−ＭＯＳＦＥＴ３８のゲートに、ＮＯＴ回路３２の出力端はＮ−ＭＯＳＦＥＴ４０のゲートに各々接続されている。尚、ＮＯＴ回路３２からはデータＤを反転したデータ（Ｑ’）が出力され、ＮＯＴ回路３０からはデータＱ’を反転したデータＱ（＝Ｄ）が出力される。Ｎ−ＭＯＳＦＥＴ３８、４０のドレインは各々ビット線BL',BLに接続されており、ソースはＮ−ＭＯＳＦＥＴ４２のゲートに接続されている。Ｎ−ＭＯＳＦＥＴ４２のドレインはマッチ線MATCHに接続され、ソースは接地されている。
【００２４】
尚、本実施の形態では、同一のワード線及びマッチ線に、一例としてＭ＋１個のＣＡＭセル２８を接続しており、同一のワード線及びマッチ線に接続された複数のＣＡＭセル２８（以下、これらをＣＡＭセル列という）にＭ＋１ビットのデータを記憶できるようにしている。また、ＣＡＭセルアレイ２６では、ＣＡＭセル列毎にアドレスが付与されている。
【００２５】
再び図２を参照すると、繰り返しデータ検索回路２１はタイミングコントローラ５０を備えている。タイミングコントローラ５０はデータ圧縮コントローラ２２に接続されている。データ圧縮コントローラ２２からタイミングコントローラ５０に検索指示SEARCHが入力されると、繰り返しデータ検索回路２１は、入力された検索データをＣＡＭセルアレイ２６の各ＣＡＭセル列に記憶されたデータと比較し、次に検索データをＣＡＭセルアレイ２６の何れかのＣＡＭセル列に書き込むことを繰り返す「検索」モードを実行する。
【００２６】
タイミングコントローラ５０にはデータ圧縮コントローラ２２からシステムクロックCLOCKが入力され、システムクロックCLOCKと同期したクロックSRを生成し出力する。クロックSRはタイミングコントローラ５０に接続された書込みバッファ５６に出力される。
【００２７】
書込みバッファ５６はデータ圧縮コントローラ２２に接続されており、コントーラ２２から検索データが順次入力される。書込みバッファ５６にはビット線対BL0,BL0'〜BLM,BLM'が各々接続されており、入力された検索データを保持すると共に、タイミングコントローラ５０から入力されたクロックSRに同期したタイミングで、保持している検索データの値に応じてビット線対BL0,BL0'〜BLM,BLM'のレベルを変化させる（ビット線対を駆動する）。書込みバッファ５６が所定の検索データに応じて各ビット線対を駆動している間に、各ＣＡＭセル列に記憶されたデータとその所定の検索データとの比較、及び、所定のＣＡＭセル列への所定の検索データの書込みが行われる。
【００２８】
タイミングコントローラ５０にはアドレスデコーダ５２も接続されており、クロックSRはアドレスデコーダ５２にも出力される。アドレスデコーダ５２はデータ圧縮コントローラ２２に接続されており、データ圧縮コントローラ２２から検索データの書込みを行うＣＡＭセル列のアドレス（書込みアドレスWADR）が指定される。アドレスデコーダ５２にはワード線WL0〜WLNが接続されており、クロックSRと同期したタイミングで、より詳しくは書込みバッファ５６が所定の検索データに応じて各ビット線対を駆動している期間内で、かつ、各ＣＡＭセル列に記憶されたデータと所定の検索データとの比較が行われた後に、指定された書込みアドレスWADRに対応するＣＡＭセル列のワード線をアサートし（イネーブルとし）、所定の検索データを指定されたアドレスに対応するＣＡＭセル列に書き込む。
【００２９】
また、タイミングコントローラ５０には、各々マッチ線MATCH0〜MATCHNに接続されたＮ＋１個のマッチ線コントローラ５８０〜５８Ｎも各々接続されており、クロックSRはマッチ線コントローラ５８０〜５８Ｎの各々にも出力される。マッチ線コントローラ５８０〜５８Ｎは、入力されたクロックSRに基づき各ＣＡＭセル列に記憶されたデータと検索データとの比較に先立ってマッチ線MATCH0〜MATCHNをハイレベルにチャージ（プリチャージ）する。このマッチ線コントローラ５８０〜５８Ｎによるマッチ線のプリチャージは、書込みバッファ５６が所定の検索データに応じた各ビット線対の駆動を終了してから、次の検索データに応じた各ビット線対の駆動を開始するまでの期間内に行われる。
【００３０】
また、マッチ線MATCH0〜MATCHNは、比較結果制御回路６０に各々接続されている。図４に示すように、比較結果制御回路６０は、ラッチ６２０〜６２Ｎ、信号生成回路６４０〜６４Ｎ、ラッチ６６０〜６６Ｎを備えている。尚、図４では、マッチ線コントローラ５８０〜５８Ｎの図示を省略している。また、図４では信号生成回路６４０〜６４Ｎのうち、マッチ線MATCH1に接続された信号生成回路６４１についてのみ具体的な構成を示しているが、他の信号生成回路も各々同一の構成であり、以下では比較結果制御回路６０のうちマッチ線MATCH1に対応する回路部分についてのみ説明する。
【００３１】
マッチ線MATCH1はラッチ６２１の入力端に接続されており、ラッチ６２１の出力端は信号生成回路６４１のＡＮＤ回路６８１、７０１に各々２個設けられた入力端の一方に各々接続されている。ＡＮＤ回路６８１の２個の入力端の他方にはＯＲ回路７２１の出力端が接続されており、ＯＲ回路７２１の２個の入力端の一方、及び、ＡＮＤ回路７０１の２個の入力端の他方は、前段のラッチ６６０の出力端に各々接続されている。ＡＮＤ回路６８１の出力端はラッチ６６１の入力端に接続されており、ラッチ６６１の出力端は前記と同様に、次段の信号生成回路６４２の図示しないＯＲ回路７２２及びＡＮＤ回路７０２の入力端に各々接続されている。また、ラッチ６６１の出力端は第１プライオリティエンコーダ７４の入力端にも接続されている。更に、ＡＮＤ回路７０１の出力端はＯＲ回路７８の１個の入力端に接続されており、ＯＲ回路７８の他の入力端には図示しないＡＮＤ回路７００、７０２〜７０Ｎの出力端が接続されている。ＯＲ回路７８の出力端はＯＲ回路８０の１個の入力端に接続されており、ＯＲ回路８０の他の入力端には、他の繰り返しデータ検索回路２１のＯＲ回路７８の出力端が接続されている。ＯＲ回路８０の出力端は、信号生成回路６４０〜６４ＮのＯＲ回路７２０〜７２Ｎの入力端に図示しないインバータを介して接続されており（ＯＲ回路７２１のみ図示）、ＯＲ回路７２０〜７２Ｎには、ＯＲ回路８０から出力されたフィードバック信号ORFBが反転されて入力される。また、ＯＲ回路８０から出力されたフィードバック信号ORFBはデータ圧縮コントローラ２２にも出力される（図２も参照）。
【００３２】
尚、図４にはブロック０の繰り返しデータ検索回路２１の比較結果制御回路６０を示しており、信号生成回路６４０のＯＲ回路７２０の２個の入力端の一方は、ブロックＰの比較結果制御回路６０のラッチ６６Ｎの出力端に接続されている。また、ブロック０の比較結果制御回路６０のラッチ６６Ｎの出力端は、ブロック１の比較結果制御回路６０のＯＲ回路７２０の２個の入力端の一方に接続されている（図２も参照）。
【００３３】
第１プライオリティエンコーダ７４の出力端は第２プライオリティエンコーダ７６の入力端に接続されている。第１プライオリティエンコーダ７４は、比較結果制御回路６０の６６０〜６６Ｎから各々入力された信号のうち「検索」動作を行った後に入力信号がハイレベルとなっている信号に対応するアドレスをエンコードして一致アドレスMADR0として第２プライオリティエンコーダ７６に出力すると共に、ラッチ６６０〜６６Ｎから各々入力された信号の論理和を一致信号MSIG0として第２プライオリティエンコーダ７６に出力する。尚、ラッチ６６０〜６６Ｎから入力された信号のうちの複数の信号がハイレベルであった場合には、一致アドレスMADR0として、予め定められた基準に従って優先順位の高い連想メモリセル列のアドレス、例えば、最も低いアドレス、又は、その時点の書込みアドレスWADRに最も近いアドレスを出力する。尚、後者のアドレスを出力するのは、圧縮に用いる距離情報が小さくてすむので、結果として圧縮率が高くなるという理由による。
【００３４】
また、第２プライオリティエンコーダ７６の入力端には、他の繰り返しデータ検索回路２１の第１プライオリティエンコーダ７４から出力された一致アドレスMADR及び一致信号MSIGも入力される。第２プライオリティエンコーダ７６の出力端はデータ圧縮コントローラ２２に接続されている。
【００３５】
第２プライオリティエンコーダ７６は第１プライオリティエンコーダ７４とほぼ同様の構成であり、複数の第１プライオリティエンコーダ７４から各々入力されたアドレスMADR0〜MADRPのうち、MSIG0〜MSIGPがハイレベルであるものの中から予め定められた基準に従い優先順位の高いアドレス、例えば、最も低いアドレスにそのブロックのアドレス（複数の繰り返しデータ検索装置に各々付与されたアドレス）を付加したアドレス、又は、その時点の書込みアドレスWADRに最も近いアドレスを一致アドレスMADRとしてデータ圧縮コントローラ２２に出力すると共に、複数の第１プライオリティエンコーダ７４から各々入力された一致信号MSIG0〜MSIGPの論理和を表す信号を一致信号MSIGとしてデータ圧縮コントローラ２２に出力する。
【００３６】
次に、本実施の形態の作用として、まず、繰り返しデータ検索回路２１における比較動作について説明する。被圧縮データ（元データ）の圧縮を行う場合、データ圧縮コントローラ２２は後述するように元データから所定ビット長の単位データを検索データとして順次取り出し、検索指示SEARCH、書込みアドレスWADRと共に繰り返しデータ検索回路２１に順次出力する。
【００３７】
検索指示SEARCHが入力されると、繰り返しデータ検索回路２１ではタイミングコントローラ５０から書込みバッファ５６、アドレスデコーダ５２及びマッチ線コントローラ５８０〜５８ＮにクロックSRが出力され、マッチ線コントローラ５８ではＣＡＭセルアレイ２６における比較動作に先立ってマッチ線MATCH0〜MATCHNのプリチャージを行い、書込みバッファ５６では入力された検索データを保持すると共に、検索データに応じてビット線対BL0,BL0'〜BLM,BLM'を駆動する。
【００３８】
ＣＡＭセルアレイ２６の各ＣＡＭセル２８では、ＮＯＴ回路３０から出力されるデータＱが「１」（ハイレベル）であればＮ−ＭＯＳＦＥＴ３８がオンしており、ＮＯＴ回路３２から出力されるデータＱ’が「１」であればＮ−ＭＯＳＦＥＴ４０がオンしている。従って、ＮＯＴ回路３０、３２のループに保持されているデータＱ（Ｑ’）とビット線対BL,BL'を介して供給されるデータＤ（Ｄ')とが一致している場合にはＮ−ＭＯＳＦＥＴ４２はオンしないが、不一致の場合にはＮ−ＭＯＳＦＥＴ３８、４０のうちオンしている方のＮ−ＭＯＳＦＥＴのドレインからソースに電流が流れ、Ｎ−ＭＯＳＦＥＴ４２がオンする。これにより、プリチャージされたマッチ線MATCHのレベルはローレベルに低下される（ディスチャージ）。
【００３９】
上記のデータの比較はＣＡＭセル２８の各々で同時に行なわれる。ところで、１本のマッチ線MATCHには複数のＣＡＭセル２８（ＣＡＭセル列）が接続されているので、クロックSRの１周期のほぼ前半で、ＣＡＭセル列に記憶されている文字データと入力された文字データとを比較する比較動作が完了し、各マッチ線は、接続されている全てのＣＡＭセル２８でＮ−ＭＯＳＦＥＴ４２がオンしなかった場合、即ちＣＡＭセル列に記憶されている文字データと書込みバッファ５６に入力された文字データとが一致していた場合にのみハイレベルの状態で維持され、不一致であった場合にはローレベルとされることになる。
【００４０】
クロックSRの１周期の後半には、入力された書込みアドレスWADRに対応するＣＡＭセル列のワード線がアドレスデコーダ５２によりアサートされ（イネーブルとされ）、そのＣＡＭセル列に検索データが書き込まれる。そして、ＣＡＭセル列への検索データの書込みが終了しワード線がローレベルにされると共に書込みバッファ５６による各ビット線対の駆動が停止されると、マッチ線コントローラ５８により各マッチ線のプリチャージが再び行われる。
【００４１】
以上の動作（比較動作）はクロックSRの１周期の間に行われ、データ圧縮コントローラ２２からの検索データ、検索指示SEARCH、書込みアドレスWADRの入力に同期して繰り返される。
【００４２】
尚、上記説明において、文字データはデータ要素の一例である。また、ORFBが「１」である場合の信号は、一致データ要素の列が記憶されていることを示す列存在情報、第１の列存在情報の一例であり、MADRは、一致データ要素の列が記憶されているアドレスを示す列アドレス情報、第１の列アドレス情報の一例であり、信号生成回路６４、ラッチ６６、第１プライオリティエンコーダ７４、第２プライオリティエンコーダ７６、ＯＲ回路７８からなる部分は生成回路、特に基本生成回路の一例である。更に、データ圧縮コントローラ２２は、検索開始点、データ要素列の位置及び長さを決定する決定部の一例である。
【００４３】
次に、比較結果制御回路６０の動作について、図５を参照して説明する。尚、図５では元データがテキストデータであり、アドレス「０」〜「５」のＣＡＭセル列に既に「ＡＢＡＢＢＣ」の文字データ列が順に記憶されており、かつ、検索データとして「ＡＢＢＢＣ…」の順に文字データが入力された場合を例として示しており、ラッチ６２０〜６２５をML0〜ML5、ラッチ６６０〜６６５をPS0〜PS5と称している。また、以下では他の繰り返しデータ検索装置においては比較動作の結果が連続して「不一致」となっているものとする。
【００４４】
図５（ａ）に示すように、検索データとして、まず「Ａ」の文字データが入力されると、アドレス「０」及び「２」のＣＡＭセル列（図５では太枠で示す）で比較結果が「一致」となり、マッチ線MATCH0〜MATCH5のうちマッチ線MATCH0及びMATCH2以外はローレベルにディスチャージされ、マッチ線MATCH0及びMATCH2のみがハイレベルのまま維持される。各マッチ線MATCH0〜MATCH5のレベルは比較結果制御回路６０のラッチML0〜ML5に各々保持された後に、次の周期で信号生成回路６４０〜６４５に各々出力される。
【００４５】
図５（ａ）に示すように、このときはラッチPS0〜PS5に保持されているレベルがローレベル（図５では「０」：図示していないラッチPS6〜PSN、及び、他のブロックのラッチPS0〜PSNについても同様とする）であるので、ＡＮＤ回路７００〜７０５から出力される信号は何れもローレベルとなり、ＯＲ回路７８から出力されるフィードバック信号ORFB0及びＯＲ回路８０から出力されるフィードバック信号ORFBもローレベルとなる。このように本実施の形態では、１文字のみ一致したのみ、即ち１回の比較動作で比較結果が「一致」となったＣＡＭセル列があったのみではフィードバック信号ORFBはハイレベルとはならない。またフィードバック信号ORFBがローレベルであるので、ＯＲ回路７２０〜７２５の出力は何れもハイレベルとなり、ラッチML0〜ML5から出力された信号のレベルはラッチPS0〜PS5にそのまま保持される（図５（ｂ）参照）。
【００４６】
図５（ｂ）に示すように、次の検索データとして「Ｂ」の文字データが入力されると、アドレス「１」、「３」、「４」のＣＡＭセル列で比較結果が「一致」となり、各マッチ線のレベル（マッチ線MATCH1,3,5のみがハイレベル）はラッチML0〜ML5に各々保持される。そして次の周期では、ラッチML1、ML3、ML5の出力が各々ハイレベルになると共に、ラッチPS0、PS2（即ちラッチML1、ML3の前段のラッチPS）の出力が各々ハイレベルとなるので、図５（ｂ）に示すようにＡＮＤ回路７０１、７０３から出力される信号がハイレベルとなり、ＯＲ回路７８から出力されるフィードバック信号ORFB0、ＯＲ回路８０から出力されるフィードバック信号ORFBが各々ハイレベルになる。
【００４７】
このように、フィードバック信号ORFBは２文字以上連続して一致した場合、即ち続けて入力された複数の検索データからなるデータ列がＣＡＭセルアレイ２６に記憶されていた場合にのみハイレベルとなる。尚、第１プライオリティエンコーダ７４が一致アドレスMADR0として最も低いアドレスを出力するものであるとすると、一致アドレスMADR0はPS0に対応するアドレス「０」となる。また、第２プライオリティエンコーダ７６から出力される一致アドレスMADRについては、他の繰り返しデータ検索装置から入力される一致アドレスの値にも依存するが、他の繰り返しデータ検索装置でデータが一致していない場合には、一致アドレスMADRの下位側のビットの値は一致アドレスMADR0の値に等しくなる。また一致アドレスMADRの上位側のビットの値は、一致したエンコーダブロックのアドレス（複数の繰り返しデータ検索装置の各々に付与されたアドレス）となるが、この場合はアドレス０のブロックなので全て０となる。
【００４８】
図５（ｃ）に示すように、次の検索データとして「Ｂ」の文字データが入力されると、前回と同じマッチ線がハイレベルとなり、各マッチ線のレベルがラッチML0〜ML5に各々一旦保持された後に、信号生成回路６４０〜６４５に各々出力される。このときには、出力がハイレベルとなるラッチML1、ML3、ML4のうち前段のラッチPSの出力もハイレベルであるラッチはラッチML4のみであるので、ＡＮＤ回路７０１、７０３、７０４から出力される信号のうちＡＮＤ回路７０４から出力される信号のみがハイレベルとなる。従って、ＯＲ回路７８から出力されるフィードバック信号ORFB0はハイレベルで維持され、一致アドレスMADR0はPS4に対応するアドレス「４」となる。
【００４９】
また、フィードバック信号ORFBがハイレベルで維持されるので、現在のサイクルをｍとすると、アドレスｎのラッチPSには、アドレスｎのラッチMLの出力ML(n,m)と、前段のラッチPSの出力PS(n-1,m)との論理積に相当する信号が出力される。この結果、ラッチPS4のみハイレベルを保持することになる。
【００５０】
続いて図５（ｄ）に示すように、次の検索データとして「Ｂ」の文字データが入力される。この場合、ラッチML0〜ML5に各々一旦保持された後に信号生成回路６４０〜６４５に各々入力される各マッチ線のレベルは前回と同じであるが、ハイレベルの信号を出力するラッチML1、ML3、ML4の何れについても、前段のラッチPSから出力される信号がローレベルであるので、ＡＮＤ回路７００〜７０５から出力される信号は何れもローレベルとなり、フィードバック信号ORFB0及びフィードバック信号ORFBもローレベルとなる。またフィードバック信号ORFBがローレベルになると、各信号生成回路６４０〜６４５のＯＲ回路７２０〜７２５の出力信号が各々ハイレベルとなるので、ラッチML1〜ML5から出力された信号のレベルはラッチPS0〜PS5にそのまま保持される。
【００５１】
更に、図５（ｅ）に示すように次の検索データとして「Ｃ」の文字データが入力されるとマッチ線MATCH5のみがハイレベルとなり、各マッチ線のレベルがラッチML0〜ML5に各々一旦保持された後に、信号生成回路６４０〜６４５に各々出力される。このときには、ラッチML5からのみハイレベルの信号が出力され、前段のラッチPS4からもハイレベルの信号が出力されるので、ＡＮＤ回路７００〜７０５から出力される信号のうちＡＮＤ回路７０５から出力される信号のみがハイレベルとなる。従って、ＯＲ回路７８から出力されるフィードバック信号ORFB0はハイレベルで維持され、一致アドレスMADR0はPS1に対応するアドレス「１」となる。
【００５２】
このように、繰り返しデータ検索回路２１は、１文字入力されるごとにＣＡＭセルアレイ２６全体からその文字に一致する文字を検索する機能と、一致する文字があった文字についてその直前までの文字列が一致していたかの情報を保持する機能とを有しており、他の方法に比べ圧倒的に高速な文字列検索を可能にするものである。
【００５３】
ここで、問題となるのは、文字列のトレースをどのように開始するかという点である。通常は最初の１文字が一致した位置で文字列のトレースを開始する。そうすることで、ある程度効果的な文字列圧縮を行うことは可能である。しかしながら、圧縮対象文字列によっては、最初の１文字が一致した位置でトレースを開始することが、必ずしも最良の圧縮に結び付くわけではない。
【００５４】
図６に、このような文字列検索の例を示す。
この例では、図６（ａ）に示すように、「Ａ」から「Ｙ」まで１０文字（枠で囲んで示す）が入力された状態で、この１０文字からなる文字列を対象として、新たに入力される文字列「ＡＢＣＤＥＦ」に一致する文字列を検索する。
このとき、最初に一致した文字からトレースすると、図６（ｂ）のような圧縮結果が得られる。即ち、まず、文字列「ＡＢＣ」に一致する文字列（太枠で囲んで示す）が見つかり、次に、新たに入力された文字列のうちの残りの文字列「ＤＥＦ」に一致する文字列（太枠で囲んで示す）が見つかる。これにより、文字列「ＡＢＣＤＥＦ」は「＜１０，３＞＜７，３＞」に置き換えられ、圧縮が実現される。
これに対し、最初に一致した文字を捨てて、２文字目が一致した位置からトレースすると、図６（ｃ）のような圧縮結果が得られる。即ち、文字列「ＢＣＤＥＦ」に一致する文字列（太枠で囲んで示す）が見つかる。これにより、文字列「ＡＢＣＤＥＦ」は「Ａ＜７，５＞」に置き換えられ、図６（ｂ）よりも高い圧縮率となっている。
【００５５】
この場合に、最初の文字の一致を捨てた方がよいのかどうかや、何文字目までの一致を捨てるのが最良なのかは、圧縮対象データの属性次第である。従って、実際の適用には、複数のトレースを同時に行い、文字列の一致が途切れたトレースは切り捨て、文字列の一致が最も長く続いているトレースを選択する必要がある。
【００５６】
そこで、本実施の形態では、図２〜図５で述べたバイトの一致検出機構をそのまま利用し、この機能に複数の文字列トレース機構をカスケード接続した。これにより、複数の文字列トレース機構は、トレースの開始を各機構の段数分遅らせた文字列の一致検索を効果的に同時進行させ、全てのトレースの中から文字列一致が最長のものを選択する。言い換えると、図２〜図５で述べた装置の大部分の面積を占める一致文字検出機構はそのまま利用し、文字列のトレース機構のみを複数個実装することで、ハードウェアリソースの増加を最小限に保ち、スループットを低下させることなく、文字列検索機能を強化する。
【００５７】
図７−１及び図７−２は、本実施の形態における繰り返しデータ検索装置２０の構成例を示したものである。
図７−１に示すように、繰り返しデータ検索装置２０は、繰り返しデータ検索回路２１と、トレース回路１００１、１００２、…、１００Ｋとを含む。
【００５８】
繰り返しデータ検索回路２１は、内部構成については図２〜図４で説明したものと同様であるが、トレース回路１００１、１００２、…、１００Ｋを接続したことにより、外部の回路との間で信号の入出力を行う構成について若干構成が異なっているので、その構成が異なる部分のみを説明する。尚、図では、図４のラッチ６２０〜６２Ｎをまとめてラッチ６２とし、図４のラッチ６６０〜６６Ｎをまとめてラッチ６６としている。また、図４と同様、ＡＮＤ回路６８０〜６８Ｎ、ＡＮＤ回路７００〜７０Ｎ、ＯＲ回路７２０〜７２Ｎのうち、ＡＮＤ回路６８１、ＡＮＤ回路７０１、ＯＲ回路７２１のみを示している。但し、添字は省略している。
【００５９】
図７−１に示すように、繰り返しデータ検索回路２１は、ＯＲ回路７８と、ＪＫフリップフロップ１０２１とを更に含む。ＯＲ回路７８の出力端はＯＲ回路８４の１個の入力端に接続され、ＯＲ回路８４の出力端はインバータを介してＯＲ回路７２の２個の入力端の一方に接続されている。また、ＯＲ回路７８の出力端はＪＫフリップフロップ１０２１のＪ入力端にも接続され、ＯＲ回路８４の出力端はＪＫフリップフロップ１０２１のＫ入力端にインバータを介して接続されている。
また、図４では、第１プライオリティエンコーダ７４及び第２のプライオリティエンコーダ７６を設けていたが、ここでは、第２プライオリティエンコーダ７６に相当するプライオリティエンコーダ８２のみを設けている。即ち、図４では、ＣＡＭセルアレイ２６から第１プライオリティエンコーダ７４までが繰り返しデータ検索回路２１であったが、この図では、ＣＡＭセルアレイ２６から第２プライオリティエンコーダ７６に相当するプライオリティエンコーダ８２までが繰り返しデータ検索回路２１になっている。
【００６０】
トレース回路１００１、１００２、…、１００Ｋは各々同一の構成であるので、トレース回路１００Ｊで代表して述べる（Ｊ＝１，２，…，Ｋ）。
トレース回路１００Ｊは、繰り返しデータ検索回路２１のＣＡＭセルアレイ２６及びラッチ６２を除く部分とほぼ同様の構成である。即ち、トレース回路１００Ｊは、ラッチ１０６Ｊ０〜１０６ＪＮ、ＡＮＤ回路１０８Ｊ０〜１０８ＪＮ、ＡＮＤ回路１１０Ｊ０〜１１０ＪＮ、ＯＲ回路１１２Ｊ０〜１１２ＪＮ、ＯＲ回路１１４Ｊ、プライオリティエンコーダ１１６Ｊを有しており、これらは各々、繰り返しデータ検索回路２１のラッチ６６０〜６６Ｎ、ＡＮＤ回路６８０〜６８Ｎ、ＡＮＤ回路７００〜７０Ｎ、ＯＲ回路７２０〜７２Ｎ、ＯＲ回路７８、プライオリティエンコーダ８２に相当する。尚、トレース回路１００Ｊについても、ラッチ１０６Ｊ０〜１０６ＪＮをまとめてラッチ１０６Ｊとしている。また、ＡＮＤ回路１０８Ｊ０〜１０８ＪＮ、ＡＮＤ回路１１０Ｊ０〜１１０ＪＮ、ＯＲ回路１１２Ｊ０〜１１２ＪＮのうち、ＡＮＤ回路１０８Ｊ１、ＡＮＤ回路１１０Ｊ１、ＯＲ回路１１２Ｊ１のみを示している。但し、２つ目の添字（ＣＡＭセル列のアドレスを表す添字）は省略している。
【００６１】
図７−１に示すように、トレース回路１００Ｊは、ＯＲ回路１１４Ｊと、ＪＫフリップフロップ１０２Ｊ＋１と、ＡＮＤ回路１０４Ｊとを含む。ＯＲ回路１１４Ｊの出力端はＯＲ回路８４の１個の入力端に接続されている。また、ＯＲ回路１１４Ｊの出力端はＪＫフリップフロップ１０２Ｊ＋１のＪ入力端にも接続され、ＯＲ回路８４の出力端はＪＫフリップフロップ１０２Ｊ＋１のＫ入力端にインバータを介して接続されている（Ｊ＝Ｋのときは除く）。更に、ＯＲ回路８４の出力端はＡＮＤ回路１０４Ｊの２個の入力端の一方に接続され、ＡＮＤ回路１０４Ｊの２個の入力端の他方にはＪＫフリップフロップ１０２Ｊ−１の出力端が接続されている。
【００６２】
また、図７−２に示すように、繰り返しデータ検索装置２０は、タイミング調整回路群８６と、フリップフロップ群８８と、ＯＲ回路９０と、デコーダ９２と、フリップフロップ群９４と、セレクタ９６とを更に含む。
【００６３】
タイミング調整回路群８６は、ＡＮＤ回路１１８０〜１１８Ｋと、Ｄフリップフロップ１２００〜１２０Ｋとを含む。ＡＮＤ回路１１８０の２個の入力端の一方は繰り返しデータ検索回路２１のＯＲ回路７８の出力端に接続され、ＡＮＤ回路１１８０の２個の入力端の他方はＤフリップフロップ１２００の出力端に接続されている。また、Ｄフリップフロップ１２００のデータ入力端は接地されており、クロック入力端はＯＲ回路７８の出力端に接続されている。ＡＮＤ回路１１８Ｊの２個の入力端の一方はトレース回路１００ＪのＯＲ回路１１４Ｊの出力端に接続され、ＡＮＤ回路１１８Ｊの２個の入力端の他方はＤフリップフロップ１２０Ｊの出力端に接続されている。また、Ｄフリップフロップ１２０Ｊのデータ入力端は接地されており、クロック入力端はＯＲ回路１１４Ｊの出力端に接続されている（Ｊ＝１，２，…，Ｋ）。
【００６４】
フリップフロップ群８８は、フリップフロップ１２２０１〜１２２０Ｋ、１２２１１〜１２２１（Ｋ−１）、…、１２２（Ｋ−１）１を含む。フリップフロップ１２２Ｊ１〜１２２Ｊ（Ｋ−Ｊ）は（Ｋ−Ｊ）段フリップフロップを構成し、フリップフロップ１２２Ｊ（Ｋ−Ｊ）の入力端はＡＮＤ回路１１８Ｊの出力端に接続され、フリップフロップ１２２Ｊ１の出力端はＯＲ回路９０及びデコーダ９２の入力端に接続されている（Ｊ＝１，２，…，Ｋ−１）。尚、ＡＮＤ回路１１８Ｋの出力端は直接ＯＲ回路９０及びデコーダ９２の入力端に接続されている。
【００６５】
フリップフロップ群９４は、フリップフロップ１２４０１〜１２４０Ｋ、１２４１１〜１２４１（Ｋ−１）、…、１２４（Ｋ−１）１を含む。フリップフロップ１２４０１〜１２４０ＫはＫ段フリップフロップを構成し、フリップフロップ１２４０Ｋの入力端は繰り返しデータ検索回路２１のプライオリティエンコーダ８２の出力端に接続され、フリップフロップ１２４０１の出力端はセレクタ９６の入力端に接続されている。また、フリップフロップ１２４Ｊ１〜１２４Ｊ（Ｋ−Ｊ）は（Ｋ−Ｊ）段フリップフロップを構成し、フリップフロップ１２４Ｊ（Ｋ−Ｊ）の入力端はトレース回路１００Ｊのプライオリティエンコーダ１１６Ｊの出力端に接続され、フリップフロップ１２４Ｊ１の出力端はセレクタ９６の入力端に接続されている（Ｊ＝１，２，…，Ｋ−１）。尚、プライオリティエンコーダ１１６Ｋの出力端は直接セレクタ９６の入力端に接続されている。
【００６６】
尚、上記説明において、ラッチ１０６Ｊ、ＡＮＤ回路１０８Ｊ、ＡＮＤ回路１１０Ｊ、ＯＲ回路１１２Ｊ、ＯＲ回路１１４Ｊ、プライオリティエンコーダ１１６Ｊからなる部分は生成回路、特にＪ番目の拡張生成回路の一例である。また、ＯＲ回路９０は第１の出力回路の一例であり、セレクタ９６は第２の出力回路の一例である。
【００６７】
次に、本実施の形態における繰り返しデータ検索装置２０の動作について、図８−１〜図８−３を参照して説明する。尚、図８−１〜図８−３では元データがテキストデータであり、アドレス「０」〜「９」のＣＡＭセル列に既に「ＡＢＣＸＢＣＤＥＦＹ」の文字データ列が順に記憶されており、かつ、検索データとして「ＡＢＣＤＥＦ」の順に文字データが入力された場合を例として示しており、トレース回路１００の数を５としている。また、ラッチ６２０〜６２９をML0〜ML9、ラッチ６６０〜６６9をPS00〜PS09、ラッチ１０６1０〜１０６１９をPS10〜PS19、ラッチ１０６２０〜１０６２９をPS20〜PS29、…、ラッチ１０６５０〜１０６５９をPS50〜PS59と称している。更に、繰り返しデータ検索回路２１、トレース回路１００１、１００２、…、１００Ｊの各々において、複数のPSに「１」が保持されていた場合、プライオリティエンコーダ８２、１１６１、１１６２、…、１１６Ｋは、最も低いアドレスを選択して出力するものとする。
【００６８】
図８−１（ａ）に示すように、検索データとして、まず「Ａ」の文字データが入力されると、アドレス「０」のＣＡＭセル列で比較結果が「一致」となるので、ラッチML0に保持されるレベルがハイレベルとなる。
【００６９】
このとき、ラッチPS00〜PS09に保持されているレベルがローレベルであるので、ＡＮＤ回路７００〜７０９から出力される信号は何れもローレベルとなり、ＯＲ回路７８から出力されるフィードバック信号ORFB-0もローレベルとなる。
ラッチPS10〜PS19、…、PS50〜PS59に保持されているレベルがローレベルであるので、ＡＮＤ回路１１０１０〜１１０１９、…、１１０５０〜１１０５９から出力される信号は何れもローレベルとなり、ＯＲ回路１１４１、…、１１４５から出力されるフィードバック信号ORFB-1、…、ORFB-5もローレベルとなる。
【００７０】
このようにフィードバック信号ORFB-0、ORFB-1、…、ORFB-5がローレベルであることから、ＯＲ回路８４から出力される信号はローレベルとなるので、ＯＲ回路７２０〜７２９の出力は何れもハイレベルとなり、ラッチML0〜ML9から出力された信号のレベルはラッチPS00〜PS09にそのまま保持される。これにより、ラッチPS00〜PS09のうち、ラッチPS00が保持するレベルのみがハイレベルとなっているので、プライオリティエンコーダ８２は、一致アドレスMADR-0としてアドレス「０」を出力する（図８−１（ｂ）参照）。
【００７１】
また、ＯＲ回路７８から出力されるローレベルの信号がＪＫフリップフロップ１０２１のＪ入力端に入力され、ＯＲ回路８４から出力されるローレベルの信号を反転したハイレベルの信号がＪＫフリップフロップ１０２１のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２１に保持されるレベルはローレベルとなる。
【００７２】
図８−１（ｂ）に示すように、次の検索データとして「Ｂ」の文字データが入力されると、アドレス「１」、「４」のＣＡＭセル列で比較結果が「一致」となるので、ラッチML1、ML4に保持されるレベルがハイレベルとなる。
【００７３】
このとき、ラッチPS00に保持されているレベルがハイレベルであるので、ＡＮＤ回路７０１から出力される信号はハイレベルとなり、ＯＲ回路７８から出力されるフィードバック信号ORFB-0もハイレベルとなる。
ラッチPS10〜PS19、…、PS50〜PS59に保持されているレベルがローレベルであるので、ＡＮＤ回路１１０１０〜１１０１９、…、１１０５０〜１１０５９から出力される信号は何れもローレベルとなり、ＯＲ回路１１４１、…、１１４５から出力されるフィードバック信号ORFB-1、…、ORFB-5もローレベルとなる。
【００７４】
このようにフィードバック信号ORFB-0がハイレベルであることから、ＯＲ回路８４から出力される信号もハイレベルとなるので、ラッチML0〜ML9から出力された信号のレベルと前段のラッチPSから出力された信号との論理積がラッチPS00〜PS09に保持される。これにより、ラッチPS00〜PS09のうち、ラッチPS1が保持するレベルのみがハイレベルとなっているので、プライオリティエンコーダ８２は、一致アドレスMADR-0としてアドレス「１」を出力する（図８−２（ｃ）のPS0欄参照）。
ＪＫフリップフロップ１０２１に保持されていたレベルはローレベルであり、ＡＮＤ回路１０４１から出力される信号もローレベルとなるので、ＯＲ回路１１２１０〜１１２１９の出力は何れもハイレベルとなり、ラッチML0〜ML9から出力された信号のレベルはラッチPS10〜PS19にそのまま保持される。これにより、ラッチPS10〜PS19のうち、ラッチPS11、PS14が保持するレベルがハイレベルとなっているので、プライオリティエンコーダ１１６１は、一致アドレスMADR-1としてアドレス「１」を出力する（図８−２（ｃ）のPS1欄参照）。
【００７５】
また、ＯＲ回路７８から出力されるハイレベルの信号がＪＫフリップフロップ１０２１のＪ入力端に入力され、ＯＲ回路８４から出力されるハイレベルの信号を反転したローレベルの信号がＪＫフリップフロップ１０２１のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２１に保持されるレベルはハイレベルとなる。
ＯＲ回路１１４１から出力されるローレベルの信号がＪＫフリップフロップ１０２２のＪ入力端に入力され、ＯＲ回路８４から出力されるローレベルの信号を反転したハイレベルの信号がＪＫフリップフロップ１０２２のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２２に保持されるレベルはローレベルとなる。
【００７６】
図８−２（ｃ）に示すように、次の検索データとして「Ｃ」の文字データが入力されると、アドレス「２」、「５」のＣＡＭセル列で比較結果が「一致」となるので、ラッチML2、ML5に保持されるレベルがハイレベルとなる。
【００７７】
このとき、ラッチPS01に保持されているレベルがハイレベルであるので、ＡＮＤ回路７０１から出力される信号はハイレベルとなり、ＯＲ回路７８から出力されるフィードバック信号ORFB-0もハイレベルとなる。
ラッチPS11、PS14に保持されているレベルがハイレベルであるので、ＡＮＤ回路１１０１１、１１０１４から出力される信号はハイレベルとなり、ＯＲ回路１１４１から出力されるフィードバック信号ORFB-1もハイレベルとなる。
ラッチPS20〜PS29、…、PS50〜PS59に保持されているレベルがローレベルであるので、ＡＮＤ回路１１０２０〜１１０２９、…、１１０５０〜１１０５９から出力される信号は何れもローレベルとなり、ＯＲ回路１１４２、…、１１４５から出力されるフィードバック信号ORFB-2、…、ORFB-5もローレベルとなる。
【００７８】
このようにフィードバック信号ORFB-0、ORFB-1がハイレベルであることから、ＯＲ回路８４から出力される信号もハイレベルとなるので、ラッチML0〜ML9から出力された信号のレベルと前段のラッチPS0から出力された信号との論理積がラッチPS00〜PS09に保持される。これにより、ラッチPS00〜PS09のうち、ラッチPS02が保持するレベルのみがハイレベルとなっているので、プライオリティエンコーダ８２は、一致アドレスMADR-0としてアドレス「２」を出力する（図８−２（ｄ）のPS0欄参照）。
ＪＫフリップフロップ１０２１に保持されていたレベル及びＯＲ回路８４から出力される信号はハイレベルであり、ＡＮＤ回路１０４１から出力される信号もハイレベルとなるので、ラッチML0〜ML9から出力された信号のレベルと前段のラッチPS1から出力された信号との論理積がラッチPS10〜PS19に保持される。これにより、ラッチPS10〜PS19のうち、ラッチPS12、PS15が保持するレベルがハイレベルとなっているので、プライオリティエンコーダ１１６１は、一致アドレスMADR-1としてアドレス「２」を出力する（図８−２（ｄ）のPS1欄参照）。
ＪＫフリップフロップ１０２２に保持されていたレベルはローレベルであり、ＡＮＤ回路１０４２から出力される信号もローレベルとなるので、ＯＲ回路１１２２０〜１１２２９の出力は何れもハイレベルとなり、ラッチML0〜ML9から出力された信号のレベルはラッチPS10〜PS19にそのまま保持される。これにより、ラッチPS20〜P29のうち、ラッチPS22、PS25が保持するレベルがハイレベルとなっているので、プライオリティエンコーダ１１６２は、一致アドレスMADR-2としてアドレス「２」を出力する（図８−２（ｄ）のPS2欄参照）。
【００７９】
また、ＯＲ回路７８から出力されるハイレベルの信号がＪＫフリップフロップ１０２１のＪ入力端に入力され、ＯＲ回路８４から出力されるハイレベルの信号を反転したローレベルの信号がＪＫフリップフロップ１０２１のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２１に保持されるレベルはハイレベルとなる。
ＯＲ回路１１４１から出力されるハイレベルの信号がＪＫフリップフロップ１０２２のＪ入力端に入力され、ＯＲ回路８４から出力されるハイレベルの信号を反転したローレベルの信号がＪＫフリップフロップ１０２２のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２２に保持されるレベルはハイレベルとなる。
ＯＲ回路１１４２から出力されるローレベルの信号がＪＫフリップフロップ１０２３のＪ入力端に入力され、ＯＲ回路８４から出力されるハイレベルの信号を反転したローレベルの信号がＪＫフリップフロップ１０２３のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２３に保持されるレベルはローレベルとなる。
【００８０】
図８−２（ｄ）に示すように、次の検索データとして「Ｄ」の文字データが入力されると、アドレス「６」のＣＡＭセル列で比較結果が「一致」となるので、ラッチML6に保持されるレベルがハイレベルとなる。
【００８１】
このとき、ラッチML6の前段のラッチPS05に保持されているレベルはローレベルであり、また、ラッチPS02に保持されているレベルはハイレベルであるが後段のラッチML3に保持されているレベルはローレベルであるので、ＡＮＤ回路７００〜７０９から出力される信号は何れもローレベルとなり、ＯＲ回路７８から出力されるフィードバック信号ORFB-0もローレベルとなる。
ラッチPS12、PS15、PS22、PS25に保持されているレベルがハイレベルであるので、ＡＮＤ回路１１０１０〜１１０１９、１１０２０〜１１０２９から出力される信号は何れもハイレベルとなり、ＯＲ回路１１４１、１１４２から出力されるフィードバック信号ORFB-1、ORFB-2もハイレベルとなる。
ラッチPS30〜PS39、…、PS50〜PS59に保持されているレベルがローレベルであるので、ＡＮＤ回路１１０３０〜１１０３９、…、１１０５０〜１１０５９から出力される信号は何れもローレベルとなり、ＯＲ回路１１４３、…、１１４５から出力されるフィードバック信号ORFB-3、…、ORFB-5もローレベルとなる。
【００８２】
このようにフィードバック信号ORFB-1、ORFB-2がハイレベルであることから、ＯＲ回路８４から出力される信号もハイレベルとなるので、ラッチML0〜ML9から出力された信号のレベルと前段のラッチPS0から出力された信号との論理積がラッチPS00〜PS09に保持される（図８−３（ｅ）のPS0欄参照）。即ち、検索データとの一致がここで途切れたので、ラッチPS00〜PS09に保持されているレベルはローレベルとなっている。
ＪＫフリップフロップ１０２１、１０２２に保持されていたレベル及びＯＲ回路８４から出力される信号はハイレベルであり、ＡＮＤ回路１０４１、１０４２から出力される信号もハイレベルとなるので、ラッチML0〜ML9から出力された信号のレベルと前段のラッチPS1、PS2から出力された信号の各々との論理積がラッチPS10〜PS19、PS20〜PS29に保持される。これにより、ラッチPS10〜PS19、PS20〜PS29のうち、ラッチPS16、PS26が保持するレベルがハイレベルとなっているので、プライオリティエンコーダ１１６１、１１６2は、一致アドレスMADR-1、MADR-2としてアドレス「６」を出力する（図８−３（ｅ）のPS1欄、PS2欄参照）。
ＪＫフリップフロップ１０２３に保持されていたレベルはローレベルであり、ＡＮＤ回路１０４３から出力される信号もローレベルとなるので、ＯＲ回路１１２３０〜１１２３９の出力は何れもハイレベルとなり、ラッチML0〜ML9から出力された信号のレベルはラッチPS30〜PS39にそのまま保持される。これにより、ラッチPS30〜PS39のうち、ラッチPS36が保持するレベルがハイレベルとなっているので、プライオリティエンコーダ１１６３は、一致アドレスMADR-3としてアドレス「６」を出力する（図８−３（ｅ）のPS3欄参照）。
【００８３】
また、ＯＲ回路７８から出力されるローレベルの信号がＪＫフリップフロップ１０２１のＪ入力端に入力され、ＯＲ回路８４から出力されるハイレベルの信号を反転したローレベルの信号がＪＫフリップフロップ１０２１のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２１に保持されるレベルはハイレベルとなる。
ＯＲ回路１１４１、１１４２から出力されるハイレベルの信号がＪＫフリップフロップ１０２２、１０２３のＪ入力端に入力され、ＯＲ回路８４から出力されるハイレベルの信号を反転したローレベルの信号がＪＫフリップフロップ１０２２、１０２３のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２２、１０２３に保持されるレベルはハイレベルとなる。
ＯＲ回路１１４３から出力されるローレベルの信号がＪＫフリップフロップ１０２４のＪ入力端に入力され、ＯＲ回路８４から出力されるハイレベルの信号を反転したローレベルの信号がＪＫフリップフロップ１０２４のＫ入力端に入力されることにより、ＪＫフリップフロップ１０２４に保持されるレベルはローレベルとなる。
【００８４】
図８−３（ｅ）に示すように、次の検索データとして「Ｅ」の文字データが入力されると、アドレス「７」のＣＡＭセル列で比較結果が「一致」となるので、ラッチML6に保持されるレベルがハイレベルとなる。
【００８５】
このとき、ラッチPS00〜PS09に保持されているレベルがローレベルであるので、ＡＮＤ回路７００〜７０９から出力される信号は何れもローレベルとなり、ＯＲ回路７８から出力されるフィードバック信号ORFB-0もローレベルとなる。
ラッチPS16、PS26、PS36に保持されているレベルがハイレベルであるので、ＡＮＤ回路１１０１０〜１１０１９、１１０２０〜１１０２９、１１０３０〜１１０３９から出力される信号は何れもハイレベルとなり、ＯＲ回路１１４１、１１４２、１１４３から出力されるフィードバック信号ORFB-1、ORFB-2、ORFB-3もハイレベルとなる。
ラッチPS40〜PS49、PS50〜PS59に保持されているレベルがローレベルであるので、ＡＮＤ回路１１０４０〜１１０４９、１１０５０〜１１０５９から出力される信号は何れもローレベルとなり、ＯＲ回路１１４４、１１４５から出力されるフィードバック信号ORFB-4、ORFB-5もローレベルとなる。
【００８６】
このようにフィードバック信号ORFB-1、ORFB-2、ORFB-3がハイレベルであることから、ＯＲ回路８４から出力される信号もハイレベルとなるので、ラッチML0〜ML9から出力された信号のレベルと前段のラッチPS0から出力された信号との論理積がラッチPS00〜PS09に保持される（図８−３（ｆ）のPS0欄参照）。
ＪＫフリップフロップ１０２１、１０２２、１０２３に保持されていたレベル及びＯＲ回路８４から出力される信号はハイレベルであり、ＡＮＤ回路１０４１、１０４２、１０４３から出力される信号もハイレベルとなるので、ラッチML0〜ML9から出力された信号のレベルと前段のラッチPS1、PS2、PS3から出力された信号の各々との論理積がラッチPS10〜PS19、PS20〜PS29、PS30〜PS39に保持される。これにより、ラッチPS10〜PS19、PS20〜PS29、PS30〜PS39のうち、ラッチPS17、PS27、PS37が保持するレベルがハイレベルとなっているので、プライオリティエンコーダ１１６１、１１６２、１１６３は、一致アドレスMADR-1、MADR-2、MADR-3としてアドレス「７」を出力する（図８−３（ｆ）のPS1欄、PS2欄、PS3欄参照）。
ＪＫフリップフロップ１０２４に保持されていたレベルはローレベルであり、ＡＮＤ回路１０４４から出力される信号もローレベルとなるので、ＯＲ回路１１２４０〜１１２４９の出力は何れもハイレベルとなり、ラッチML0〜ML9から出力された信号のレベルはラッチPS40〜PS49にそのまま保持される。これにより、ラッチPS40〜PS49のうち、ラッチPS47が保持するレベルがハイレベルとなっているので、プライオリティエンコーダ１１６４は、一致アドレスMADR-4としてアドレス「７」を出力する（図８−３（ｆ）のPS4欄参照）。
【００８７】
以上の動作で文字データが入力されるごとに出力されたORFB-0〜ORFB-K（上記例ではＫ＝５）はＡＮＤ回路１１８０〜１１８Ｋを経由してデコーダ９２へと出力される。ここで、本実施の形態では、ＯＲ回路８４からのフィードバック信号ORFBがローレベルになると、Ｄフリップフロップ１２００〜１２０Ｋがハイレベルに設定され、ORFB-0〜ORFB-KがＡＮＤ回路１１８０〜１１８Ｋを通過できるようになっている。一方で、ORFB-0〜ORFB-Kのレベルが一旦ハイレベルになった後にローレベルになると、Ｄフリップフロップ１２００〜１２０Ｋのクロック入力端から入力されるレベルがローレベルからハイレベルになり、ORFB-0〜ORFB-KがＡＮＤ回路１１８０〜１１８Ｋを通過できないようになる。
また、同じく文字データが入力されるごとに出力されたMADR-0〜MADR-5はセレクタ９６へと出力される。
【００８８】
但し、本実施の形態では、ORFB-Jを伝える経路上のデコーダ９２の前にＫ−Ｊ段のフリップフロップ１２２を設け、MADR-Jを伝える経路上のセレクタ９６の前にＫ−Ｊ段のフリップフロップ１２４を設けている（Ｊ＝１，２，…，Ｋ−１）。また、ORFB-K、MADR-Kを伝える経路上のデコーダ９２、セレクタ９６の前にはフリップフロップを設けていない。これにより、ORFB-0〜ORFB-5及びMADR-0〜MADR-5は、上記動作で基準とした文字データの入力タイミングに同期したタイミングでデコーダ９２及びセレクタ９６に届くのではなく、フリップフロップの段数分ずれたタイミングでデコーダ９２及びセレクタ９６に届くようになっている。
【００８９】
そこで、次に、デコーダ９２及びセレクタ９６が信号を受け取るタイミングを基準として、繰り返しデータ検索装置２０の動作を説明する。尚、図８−１〜図８−３には示していないが、以下では、図８−３（ｆ）の文字データ「Ｆ」で文字列の一致は終了することを前提にする。即ち、文字データ「Ｆ」の次の文字データが入力されると、ORFB-0〜ORFB-5はローレベルになるものとする。また、デコーダ９２は、ORFB-0〜ORFB-5のうちハイレベルになっているORFBの番号をセレクタ９６に伝え、セレクタ９６は、デコーダ９２から伝えられた番号のMADRのうち、最小の番号のMADRを選択するものとする。
【００９０】
まず、デコーダ９２が図８−１（ｂ）で出力されたORFB-0をフリップフロップ１２２０１から受け取る時点を考える。この時点において、デコーダ９２は、図８−２（ｃ）で出力されたORFB-1をフリップフロップ１２２１１から、図８−２（ｄ）で出力されたORFB-2をフリップフロップ１２２２１から、図８−３（ｅ）で出力されたORFB-3をフリップフロップ１２２３１から、図８−３（ｆ）で出力されたORFB-4をフリップフロップ１２２４１から、図８−３（ｆ）以降に出力されたORFB-5（ローレベル）をプライオリティエンコーダ１１６５から受け取る。この場合、ORFB-0〜ORFB-4がハイレベルなので、ＯＲ回路９０からデータ圧縮コントローラ２２へ出力されるConsolidated ORFB（以下、「C-ORFB」と略記する）はハイレベルとなる。また、デコーダ９２は、ORFB-0〜ORFB-4がハイレベルであることをセレクタ９６に伝え、セレクタ９６は、MADR-0を選択し、アドレス「０」をデータ圧縮コントローラ２２に出力する。
【００９１】
次に、デコーダ９２は、図８−２（ｃ）で出力されたORFB-0をフリップフロップ１２２０１から、図８−２（ｄ）で出力されたORFB-1をフリップフロップ１２２１１から、図８−３（ｅ）で出力されたORFB-2をフリップフロップ１２２２１から、図８−３（ｆ）で出力されたORFB-3をフリップフロップ１２２３１から、図８−３（ｆ）以降に出力されたORFB-4、ORFB-5（何れもローレベル）を各々、フリップフロップ１２２４１、プライオリティエンコーダ１１６５から受け取る。この場合、ORFB-0〜ORFB-3がハイレベルなので、ＯＲ回路９０からデータ圧縮コントローラ２２へ出力されるC-ORFBはハイレベルとなる。また、デコーダ９２は、ORFB-0〜ORFB-3がハイレベルであることをセレクタ９６に伝え、セレクタ９６は、MADR-0を選択し、アドレス「１」をデータ圧縮コントローラ２２に出力する。
【００９２】
次に、デコーダ９２は、図８−２（ｄ）で出力されたORFB-0をフリップフロップ１２２０１から、図８−３（ｅ）で出力されたORFB-1をフリップフロップ１２２１１から、図８−３（ｆ）で出力されたORFB-2をフリップフロップ１２２２１から、図８−３（ｆ）以降に出力されたORFB-3〜ORFB-5（何れもローレベル）を各々、フリップフロップ１２２３１、フリップフロップ１２２４１、プライオリティエンコーダ１１６５から受け取る。この場合、ORFB-1、ORFB-2がハイレベルなので、ＯＲ回路９０からデータ圧縮コントローラ２２へ出力されるC-ORFBはハイレベルとなる。また、デコーダ９２は、ORFB-1、ORFB-2がハイレベルであることをセレクタ９６に伝え、セレクタ９６は、MADR-1を選択し、アドレス「６」をデータ圧縮コントローラ２２に出力する。図８−１〜図８−３の例では、「Ａ」からトレースした場合、この時点で文字列の一致が途切れるので、デコーダ９２はORFB-0をセレクタ９６に伝えず、セレクタ９６がORFB-0を選択しないようにしている。
【００９３】
次に、デコーダ９２は、図８−３（ｅ）で出力されたORFB-0をフリップフロップ１２２０１から、図８−３（ｆ）で出力されたORFB-1をフリップフロップ１２２１１から、図８−３（ｆ）以降に出力されたORFB-2〜ORFB-5（何れもローレベル）を各々、フリップフロップ１２２２１、フリップフロップ１２２３１、フリップフロップ１２２４１、プライオリティエンコーダ１１６５から受け取る。この場合、ORFB-1がハイレベルなので、ＯＲ回路９０からデータ圧縮コントローラ２２へ出力されるC-ORFBはハイレベルとなる。また、デコーダ９２は、ORFB-1がハイレベルであることをセレクタ９６に伝え、セレクタ９６は、MADR-1を選択し、アドレス「７」をデータ圧縮コントローラ２２に出力する。
【００９４】
次に、デコーダ９２は、図８−３（ｆ）で出力されたORFB-0をフリップフロップ１２２０１から、図８−３（ｆ）以降に出力されたORFB-1〜ORFB-5（何れもローレベル）を各々、フリップフロップ１２２１１、フリップフロップ１２２２１、フリップフロップ１２２３１、フリップフロップ１２２４１、プライオリティエンコーダ１１６５から受け取る。この場合、ORFB-1〜ORFB-5は何れもローレベルなので、ＯＲ回路９０からデータ圧縮コントローラ２２へ出力されるC-ORFBはローレベルとなる。
従って、データ圧縮コントローラ２２は、C-ORFBがローレベルになる直前にセレクタ９６から受け取った「７」を一致アドレスとして用いることになる。
【００９５】
次に、本実施の形態におけるデータ圧縮コントローラ２２の動作について説明する。
図９は、データ圧縮コントローラ２２における処理を示したフローチャートである。尚、この処理は、データ圧縮コントローラ２２にバス１８を介して圧縮すべきデータ（元データ）が転送され、ＣＰＵ１２から元データの圧縮が指示されると実行される。
【００９６】
データ圧縮コントローラ２２は、まず、繰り返しデータ検索装置２０の比較結果制御回路６０のラッチ６２０〜６２Ｎ、ラッチ６６０〜６６Ｎを各々リセットする（ステップ２００）。次に、一致長MLENを「１」に、書込みアドレスWADRを「０」に各々初期設定する（ステップ２０２）。そして、繰り返しデータ検索装置２０への元データの出力が終了したか否か判定する（ステップ２０４）。判定が否定された場合には、元データから先頭の１文字に対応する文字Ｃ０のデータを検索データとして取り出し、繰り返しデータ検索装置２０に検索指示SEARCH、書込みアドレスWADRと共に出力する（ステップ２０６）。これにより、繰り返しデータ検索装置２０では前述した検索動作が行われる。
【００９７】
次に、データ圧縮コントローラ２２は、繰り返しデータ検索装置２０から出力される文字列一致信号C-ORFBがハイレベルになったか否か判定する（ステップ２０８）。このときには、先のステップ２００で各ラッチ６２及び各ラッチ６６をリセットしたことに伴って文字列一致信号C-ORFBはローレベルで維持されるので、判定が否定されてステップ２１０へ移行する。そこで、データ圧縮コントローラ２２は、今回の比較動作が所定の元データに対する第１回目の比較動作であるか否か判定し（ステップ２１０）、判定が肯定された場合はステップ２１２で圧縮データの出力処理を行うことなくステップ２１４へ移行する。前述したORFBと同様、文字列一致信号C-ORFBも２文字以上連続して一致しないとハイレベルにならないため、比較結果「不一致」が続いている場合は後述するように圧縮データとして前回検索した文字を出力する。従って、この時点では圧縮データとして出力すべきデータがないためステップ２１２を実行しない。
【００９８】
その後、データ圧縮コントローラ２２は、一致長MLENに「１」を代入し（ステップ２１４）、ステップ２１８へ移行する。そして、前々回検索文字Ｃ２に前回検索文字Ｃ１のデータを、前回検索文字Ｃ１に今回の文字Ｃ０のデータを、各々設定し（ステップ２１８）、現在の書込みアドレスWADR（第１回目の比較動作では０）に対応するＣＡＭセル列に文字Ｃ０のデータを書き込む（ステップ２２０）。この書込み処理は、実際にはアドレスデコーダ５２によって書込みアドレスWADRに対応するＣＡＭセル列のワード線をアサートする（イネーブルにする）ことにより行われる。また、データ圧縮コントローラ２２は、次の書込みアドレスWADRとして、書込みアドレスWADRに１を加算し（従って文字データはＣＡＭセル列のアドレスの昇順に書き込まれる）、ＣＡＭセルアレイ２６のサイズＮ＋１で除した余りを設定する（ステップ２２２）。
【００９９】
これにより全てのＣＡＭセル列にデータを書き込んだ後は、アドレス「０」のＣＡＭセル列にデータが書き込まれるので、ＣＡＭセルアレイ２６が所謂リングバッファとして用いられ、ＣＡＭセルアレイ２６のオーバフロー等が発生することはない。
【０１００】
ステップ２２２の処理を行った後はステップ２０４へ戻る。ステップ２０４の判定が否定された場合にはステップ２０６以降の処理を再度実行するが、ステップ２０６では前回検索文字Ｃ１に続く文字Ｃ０のデータが検索データとして元データから取り出され、検索指示SEARCH、書込みアドレスWADRと共に繰り返しデータ検索装置２０へ出力される。そしてステップ２０８の判定が否定された場合はステップ２１０へ移行し、この判定が否定されることによりステップ２１２の圧縮データ出力処理が行われる。
【０１０１】
図１０に示すように、データ圧縮コントローラ２２は、この圧縮データ出力処理で、一致長MLENが２か否か判定する（ステップ２３０）。前回の比較結果は「一致」であるが、前々回の比較結果が「一致」でない場合は判定が肯定され、圧縮データとして、前々回検索文字Ｃ２のデータを出力し（ステップ２３６）、次いで前回検索文字Ｃ１のデータを出力し（ステップ２３８）、その後に図９のフローチャートのステップ２１４へ移行する。
ステップ２３０で判定が否定された場合、データ圧縮コントローラ２２は、一致長MLENが１か否かを判定する（ステップ２３２）。前回の比較結果が「一致」でない場合は判定が肯定され、圧縮データとして前回検索文字Ｃ１のデータを出力し（ステップ２３８）、その後に図９のフローチャートのステップ２１４へ移行する。
【０１０２】
ところで、図９のフローチャートにおいてステップ２０８の判定が肯定された場合には、一致長MLENをカウントアップし（ステップ２１６）、その後にステップ２１８へ移行する。従って、文字列一致信号C-ORFBがハイレベルとなっている間は圧縮データの出力は行われない。
【０１０３】
また、前回の比較動作でハイレベルとなっていた文字列一致信号C-ORFBがローレベルに変化してステップ２１０の判定が否定された場合は、２文字以上の長さの繰り返し文字列の末尾が検出された場合であるので、ステップ２１２で圧縮データ出力処理が行われる。このときは、前回及び前々回の比較結果が共に「一致」であれば、先に説明したステップ２１６で一致長MLENがカウントアップされて３以上になっているので、ステップ２３０及びステップ２３２の判定が共に否定され、ステップ２３４へ移行する。
【０１０４】
そこで、データ圧縮コントローラ２２は、繰り返し文字列を圧縮するための圧縮コードを求める。本実施の形態では、繰り返し文字列と同一の文字列の位置を指し示すポインタを表す第１のコードと、繰り返し文字列の長さを表す第２のコードとで構成された圧縮コードを用いており、第１のコードとして一致アドレスMADRと一致長MLENとの差に１を加えた値（MADR−MLEN＋１）を、第２のコードとして一致長MLENを各々設定し、出力する（ステップ２３４）。これにより、データ圧縮コントローラ２２から出力される圧縮データの長さは、元データよりも短くなる。
【０１０５】
尚、この圧縮コードを出力するにあたり、圧縮した文字列を復元する際に圧縮コードと文字データとを区別できるようにするために、データ圧縮コントローラ２２は文字データと圧縮コードとの間に区切りを表すコードも挿入する。このように、繰り返し文字列が発見される毎にステップ２３４が実行され、発見された繰り返し文字列が圧縮コードに変換されて出力されることにより、元データの冗長性が取り除かれ、元データが圧縮データに圧縮されることになる。
【０１０６】
上述の処理を繰り返し、元データからの文字Ｃのデータの取り出し位置が元データの末尾に到達するとステップ２０４の判定が肯定され、データ圧縮コントローラ２２は、圧縮データ出力処理を再び行う（ステップ２２４）。このとき、一致長MLENの値が３以上であれば、ステップ２３４で圧縮コードの出力が行われるが、一致長MLENの値が２の場合には、ステップ２３６及びステップ２３８で圧縮データとして前々回検索文字Ｃ２のデータ及び前回検索文字Ｃ１のデータを、一致長MLENの値が１の場合には、ステップ２３８で圧縮データとして前回検索文字Ｃ１のデータを、それぞれ出力し、処理を終了する。
【０１０７】
尚、この動作例では、圧縮コードのうち第１のコードとして、繰り返し文字列と同一の文字列の位置を指し示すポインタを用いたが、前述した例に従い、繰り返し文字列と同一の文字列の位置と繰り返し文字列の位置との距離を用いてもよい。この場合、データ圧縮コントローラ２２は、繰り返しデータ検索回路２１及びトレース回路１００１、１００２、…、１００Ｋのうち、ハイレベルのORFBを最も長く出力し続けていた回路を、繰り返しデータ検索装置２０からのDecode Output信号（図７−２参照）に基づいて認識し、その回路におけるトレース開始文字の位置から上記繰り返し文字列と同一の文字列の位置を減算して得られた値を第１のコードとすればよい。
【０１０８】
以上、本発明の実施の形態について説明した。
このように、本実施の形態では、入力された文字データに一致する文字データをＣＡＭセルアレイ２６から検出して文字列としての一致を判定する繰り返しデータ検索回路２１に、１文字ずつずらした検索開始点から文字列としての一致を判定する複数のトレース回路１００を接続した。これにより、同一部分を有する長さの異なる複数の文字列が存在する検索対象から長い方の文字列を効果的に検出することが可能となり、圧縮率を向上できるようになった。
【０１０９】
ここで、本実施の形態による有効性の検証について述べる。
データ圧縮アルゴリズムの評価用の一般的なデータセットとして、Canterbury Corpusの一連のデータがあるが、例えばその中のkennedy.xls（1,029,744バイト）に関する本実施の形態の有効性を示すデータを以下に示す。尚、このデータは、３２ＫＢのＣＡＭを用いてＬＺ７７圧縮を行ったものをFixed Huffman Tableで圧縮し、ハードウェアの振る舞いと等価なソフトウェアモデルで検証することにより得られたものである。
（１）ＬＺ７７に繰り返しデータ検索回路２１のみを適用した場合、圧縮後のバイト数は417,599となり、圧縮率は0.41となった。
（２）ＬＺ７７に繰り返しデータ検索回路２１及び１バイト遅らせてトレースする１つのトレース回路１００からなる回路を適用した場合、圧縮後のバイト数は302,140ととなり、圧縮率は0.29となった。
繰り返しデータ検索回路２１では、各アドレスに１０ビット（ＣＡＭセルアレイ２６に８ビット、ラッチ６２に１ビット、ラッチ６６に１ビット）の情報が保持されるが、上記では各アドレスに１ビットを追加することで圧縮率が飛躍的に向上することが分かる。
【０１１０】
尚、本実施の形態では、文字列のある部分を別の部分の位置及び長さの情報で置換することにより文字列を圧縮することを前提にしたが、文字列のある部に基づいて別の部分を検索する際の検索開始点を決定することを前提にしてもよい。その場合、繰り返しデータ検索回路２１及びトレース回路１００１、１００２、…、１００Ｋのうち、ハイレベルのORFBの連続生成回数が最も多い回路が分かればよいので、必ずしもORFBの論理和をとってC-ORFBを求めたり、C-ORFBの連続出力回数をカウントしたりする必要はない。
【０１１１】
また、本実施の形態では、ハイレベルのORFBの連続生成回数が最も多い回路に対して予め決められた個別開始点を検索開始点に決定したが、これには限らない。例えば、ハイレベルのORFBの連続生成回数が閾値を超えた時点でトレースを終了し、その時点でハイレベルのORFBを生成している何れかの回路を選択して、その選択された回路に対して予め決められた個別開始点を検索開始点に決定してもよい。即ち、より一般的に言うと、ハイレベルのORFBの連続生成回数が所定の条件を満たす回路に対して予め決められた個別開始点を検索開始点に決定するようなものでよい。
【０１１２】
更に、本実施の形態では、繰り返しデータ検索回路２１及びトレース回路１００１、１００２、…、１００Ｋに対して個別開始点を１文字ずつずらして設定したが、これには限らない。各回路の間で個別開始点が異なってさえいれば、何文字ずつずらして設定してもよい。
【０１１３】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【０１１４】
２０…繰り返しデータ検索装置、２１…繰り返しデータ検索回路、２２…データ圧縮コントローラ、２６…ＣＡＭセルアレイ、２８…ＣＡＭセル、５２…アドレスデコーダ、６０…比較結果制御回路、６４…信号生成回路、７４…第１プライオリティエンコーダ、７６…第２プライオリティエンコーダ、９０…ＯＲ回路、９２…デコーダ、９６…セレクタ、１２２，１２４…フリップフロップ
【図１】
2012090584.tif 000003
【図２】
2012090584.tif 000004
【図３】
2012090584.tif 000005
【図４】
2012090584.tif 000006
【図５】
2012090584.tif 000007
【図６】
2012090584.tif 000008
【図７−１】
2012090584.tif 000009
【図７−２】
2012090584.tif 000010
【図８−１】
2012090584.tif 000011
【図８−２】
2012090584.tif 000012
【図８−３】
2012090584.tif 000013
【図９】
2012090584.tif 000014
【図１０】
2012090584.tif 000015
【手続補正書】
【提出日】平成24年3月13日(2012.3.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ要素列の第１の部分データ要素列を、当該データ要素列の第２の部分データ要素列の位置及び長さの情報で置換することにより、当該データ要素列を圧縮する装置であって、
前記データ要素列の少なくとも一部を構成する複数のデータ要素の各データ要素を、当該データ要素列における当該各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、当該検索データ要素に一致する一致データ要素を当該複数のデータ要素の１つとして記憶していれば、当該一致データ要素が記憶されているアドレスを出力する連想メモリと、
前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの基準データ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す第１の列存在情報と、当該一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する基本生成回路と、
Ｊ番目の拡張生成回路が、前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの前記基準データ要素からＪ番目のデータ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す第１の列存在情報と、当該一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する拡張生成回路であるＫ個の拡張生成回路（Ｋは自然数、ＪはＫ以下の自然数）と、
前記検索データ要素が前記連想メモリに与えられた場合に、前記基本生成回路及び前記Ｋ個の拡張生成回路の何れかにより前記第１の列存在情報が生成されていれば、それまでに与えられた検索データ要素の列のうちの前記基準データ要素以降の何れかのデータ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていることを示す第２の列存在情報を出力する第１の出力回路と、
前記検索データ要素が前記連想メモリに与えられた場合に、前記基本生成回路及び前記Ｋ個の拡張生成回路のうち、前記第１の列存在情報を生成している少なくとも１つの生成回路が生成する前記第１の列アドレス情報を、第２の列アドレス情報として出力する第２の出力回路と、
前記第１の部分データ要素列を構成するデータ要素を前記検索データ要素として順次前記連想メモリに与え、前記第１の出力回路から前記第２の列存在情報が出力されなくなる直前に前記第２の出力回路から出力された前記第２の列アドレス情報に応じて、前記第２の部分データ要素列の位置を決定し、前記第１の出力回路からの前記第２の列存在情報の連続出力回数に応じて、前記第２の部分データ要素列の長さを決定する決定部と
を含む、装置。
【請求項２】
前記決定部は、前記複数の生成回路のうちの特定の生成回路による前記列存在情報の連続生成回数が、当該連続生成回数が多いと認められるための所定の条件を満たす場合に、当該特定の生成回路に対して決められた前記個別開始点を、前記検索開始点として決定する、請求項１の装置。
【請求項３】
前記所定の条件は、前記特定の生成回路による前記列存在情報の連続生成回数が、前記複数の生成回路のうちの他の生成回路による前記列存在情報の連続生成回数の何れよりも多いという条件を含む、請求項２の装置。
【請求項４】
（削除）
【請求項５】
（削除）
【請求項６】
（削除）
【請求項７】
（削除）
【請求項８】
（削除）
【手続補正書】
【提出日】平成26年2月24日(2014.2.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ要素列の第１の部分データ要素列を、当該データ要素列の第２の部分データ要素列の位置及び長さの情報で置換することにより、当該データ要素列を圧縮する装置であって、
前記データ要素列の少なくとも一部を構成する複数のデータ要素の各データ要素を、当該データ要素列における当該各データ要素の位置に応じたアドレスに記憶し、検索データ要素が与えられた場合に、当該検索データ要素に一致する一致データ要素を当該複数のデータ要素の１つとして記憶していれば、当該一致データ要素が記憶されているアドレスを出力する連想メモリと、
前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの基準データ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す第１の列存在情報と、当該一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する基本生成回路と、
Ｊ番目の拡張生成回路が、前記検索データ要素が前記連想メモリに与えられた場合に、それまでに与えられた検索データ要素の列のうちの前記基準データ要素からＪ番目のデータ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていれば、当該連想メモリから出力される前記アドレスに基づいて、当該一致データ要素の列が記憶されていることを示す第１の列存在情報と、当該一致データ要素の列が記憶されているアドレスを示す第１の列アドレス情報とを生成する拡張生成回路であるＫ個の拡張生成回路（Ｋは自然数、ＪはＫ以下の自然数）と、
前記検索データ要素が前記連想メモリに与えられた場合に、前記基本生成回路及び前記Ｋ個の拡張生成回路の何れかにより前記第１の列存在情報が生成されていれば、それまでに与えられた検索データ要素の列のうちの前記基準データ要素以降の何れかのデータ要素で始まる列に一致する一致データ要素の列が当該連想メモリに記憶されていることを示す第２の列存在情報を出力する第１の出力回路と、
前記検索データ要素が前記連想メモリに与えられた場合に、前記基本生成回路及び前記Ｋ個の拡張生成回路のうち、前記第１の列存在情報を生成している少なくとも１つの生成回路が生成する前記第１の列アドレス情報を、第２の列アドレス情報として出力する第２の出力回路と、
前記第１の部分データ要素列を構成するデータ要素を前記検索データ要素として順次前記連想メモリに与え、前記第１の出力回路から前記第２の列存在情報が出力されなくなる直前に前記第２の出力回路から出力された前記第２の列アドレス情報に応じて、前記第２の部分データ要素列の位置を決定し、前記第１の出力回路からの前記第２の列存在情報の連続出力回数に応じて、前記第２の部分データ要素列の長さを決定する決定部と
を含む、装置。
【請求項２】
前記決定部は、複数の生成回路のうちの特定の生成回路による前記列存在情報の連続生成回数が、当該連続生成回数が多いと認められるための所定の条件を満たす場合に、当該特定の生成回路に対して決められた個別開始点を、検索開始点として決定する、請求項１の装置。
【請求項３】
前記所定の条件は、前記特定の生成回路による前記列存在情報の連続生成回数が、前記複数の生成回路のうちの他の生成回路による前記列存在情報の連続生成回数の何れよりも多いという条件を含む、請求項２の装置。
【国際調査報告】
2012090584.tif 000016
2012090584.tif 000017
2012090584.tif 000018
2012090584.tif 000019