(57)【要約】【課題】データが記憶された複数の位置からそのデータが最近に書き込まれた位置を選択できる可能性を高める。【解決手段】連想メモリセルアレイ２６内の特定の文字データが記憶された複数のアドレスを表す信号MATCHが入力されると、ラッチ９０、ＡＮＤ回路９２、ＯＲ回路９４によって、複数のアドレスの少なくとも一部がローアドレス領域内にあるかどうかが判定され、ラッチ９０、ＮＯＴ回路９６、ＮＡＮＤ回路９８、ＡＮＤ回路１００によって、複数のアドレスの少なくとも一部がローアドレス領域内にある場合にハイアドレス領域からの信号MATCHがマスクされ、プライオリティエンコーダ１０２が、マスクされずに入力された信号MATCHが表すアドレスのうちの最大のアドレスを、複数のアドレスのうちの選択すべきアドレスとして出力する。【選択図】図９
2010268146.tif 000002
【特許請求の範囲】
【請求項１】
周期的にデータ要素が書き込まれるメモリ内の特定のデータ要素が記憶された複数の位置から特定の位置を選択する装置であって、
前記特定のデータ要素が記憶された前記複数の位置が、現在の周期においてデータ要素が書き込まれた前記メモリの特定の領域内の位置を含むかどうかを判定する判定部と、
前記複数の位置が前記特定の領域内の位置を含むと前記判定部により判定された場合に、当該複数の位置のうちの当該特定の領域内の少なくとも１つの位置を前記特定の位置として選択し、前記複数の位置が前記特定の領域内の位置を含まないと前記判定部により判定された場合に、当該複数の位置のうちの少なくとも１つの位置を前記特定の位置として選択する選択部と
を含む、装置。
【請求項２】
前記特定のデータ要素が記憶された前記複数の位置の各々を表す複数の信号を発生させる信号発生部を更に含み、
前記選択部は、前記複数の位置が前記特定の領域内の位置を含むと前記判定部により判定された場合に、前記信号発生部が発生させた前記複数の信号のうち前記特定の領域以外の領域内の位置を表す信号をマスクすることによって得られた少なくとも１つの信号に基づいて、当該特定の領域内の少なくとも１つの位置を選択する、請求項１の装置。
【請求項３】
前記選択部による信号のマスクに用いられるマスクパターンを記憶する記憶部を更に含み、
前記記憶部は、前記特定の領域が拡大した場合に、前記メモリの新たに当該特定の領域に含まれるようになった領域内の位置を表す信号をマスクしないように変更された前記マスクパターンを記憶する、請求項２の装置。
【請求項４】
前記選択部による信号のマスクに用いられるマスクパターンを記憶する記憶部と、
前記特定の領域と当該特定の領域以外の領域との境界を表す信号に基づいて、前記マスクパターンを生成する生成部と
を更に含む、請求項２の装置。
【請求項５】
前記特定のデータ要素が記憶された前記複数の位置の各々を表す複数の信号を発生させる信号発生部を更に含み、
前記判定部は、前記信号発生部が発生させた前記複数の信号のうち前記特定の領域以外の領域内の位置を表す信号をマスクすることによって得られた少なくとも１つの信号に対してＯＲ演算を行った結果に基づいて、前記特定のデータ要素が記憶された前記複数の位置が前記特定の領域内の位置を含むかどうかを判定する、請求項１の装置。
【請求項６】
メモリのアドレス順に周期的にデータ要素が書き込まれる当該メモリ内の特定のデータ要素が記憶された複数のアドレスから特定のアドレスを選択する装置であって、
前記特定のデータ要素が記憶された前記複数のアドレスの各々を表す複数の信号を発生させる信号発生部と、
前記信号発生部が発生させた前記複数の信号の何れかが、１つの周期において現在のアドレスよりも先にデータ要素が書き込まれるアドレスを表すかどうかを判定する判定部と、
前記複数の信号の何れかが現在のアドレスよりも先にデータ要素が書き込まれるアドレスを表すと前記判定部により判定された場合に、当該複数の信号のうち１つの周期において現在のアドレスよりも後にデータ要素が書き込まれるアドレスを表す信号をマスクすることによって得られた少なくとも１つの信号で構成される信号群を抽出し、前記複数の信号の何れもが現在のアドレスよりも先にデータ要素が書き込まれるアドレスを表さないと前記判定部により判定された場合に、当該複数の信号で構成される信号群を抽出する抽出部と、
前記抽出部により抽出された前記信号群を構成する信号のうち、１つの周期において最後にデータ要素が書き込まれるアドレスを表す信号を、前記特定のアドレスを表す信号として出力する出力部と
を含む、装置。
【請求項７】
周期的にデータ要素が書き込まれるメモリに記憶された複数のデータ要素を参照して特定のデータ要素群を符号化する装置であって、
前記特定のデータ要素群を構成するデータ要素ごとに、当該データ要素が記憶された前記メモリ内の複数の位置を検出する検出部と、
前記特定のデータ要素群を構成するデータ要素ごとに、前記検出部により検出された前記複数の位置が、現在の周期においてデータ要素が書き込まれた前記メモリの特定の領域内の位置を含むかどうかを判定する判定部と、
前記特定のデータ要素群を構成するデータ要素ごとに、前記複数の位置が前記特定の領域内の位置を含むと前記判定部により判定された場合に、当該複数の位置のうちの当該特定の領域内の１つの位置を選択し、前記複数の位置が前記特定の領域内の位置を含まないと前記判定部により判定された場合に、当該複数の位置のうちの１つの位置を選択する選択部と、
前記特定のデータ要素群を構成するデータ要素について前記選択部により前記１つの位置が連続して選択された場合に、当該特定のデータ要素群を構成する特定のデータ要素について前記選択部により選択された前記１つの位置と、前記選択部により前記１つの位置が連続して選択された回数とを用いて、当該特定のデータ要素群を符号化する符号化部と
を含む、装置。
【請求項８】
周期的にデータ要素が書き込まれるメモリ内の特定のデータ要素が記憶された複数の位置から特定の位置を選択する方法であって、
前記特定のデータ要素が記憶された前記複数の位置が、現在の周期においてデータ要素が書き込まれた前記メモリの特定の領域内の位置を含むかどうかを判定するステップと、
前記複数の位置が前記特定の領域内の位置を含むと判定された場合に、当該複数の位置のうちの当該特定の領域内の少なくとも１つの位置を前記特定の位置として選択し、前記複数の位置が前記特定の領域内の位置を含まないと判定された場合に、当該複数の位置のうちの少なくとも１つの位置を前記特定の位置として選択するステップと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データが記憶された位置を選択する装置及び方法に関する。特に、本発明は、周期的にデータ要素が書き込まれるメモリ内の特定のデータ要素が記憶された複数の位置から特定の位置を選択する装置及び方法に関する。
【背景技術】
【０００２】
ｄｅｆｌａｔｅ圧縮（ＲＦＣ１９５１）は、現在コンピュータで広く用いられているデータ圧縮形式であるＺＬＩＢ（ＲＦＣ１９５０）、ＧＺＩＰ（ＲＦＣ１９５２）のベースとなる圧縮方法であり、ＬＺ７７符号を用いてデータを圧縮する。ＬＺ７７符号では、データ中の文字列の繰り返し部分を検索し、その文字列を繰り返し部分の位置及び長さで置き換えることによってデータを圧縮する。例えば、「ＩＢＭ  ｉｓ  ＩＢＭ」という文字列をＬＺ７７符号化する場合、２つ目の「ＩＢＭ」は繰り返しであるため、この部分が圧縮される。具体的には、「７文字前から３文字長が繰り返される」ということを表す「７，３」のような符号に置き換えられて圧縮される。この場合、繰り返し部分の文字長が長いほど圧縮率は高くなる。
【０００３】
ここで、ｄｅｆｌａｔｅ圧縮の仕様では、文字列の繰り返し部分の検索をその文字列から最大３２Ｋバイト前までのデータに対して行うことになっており、文字列の繰り返し部分の検索に膨大な文字列比較処理が必要となる。
従って、これをソフトウェアで行おうとすると、処理に時間がかかってしまう。ソフトウェアでは、通常、ハッシュ法により、検索時間の短縮を図ることになる。しかしながら、ハッシュ法では、同じハッシュ値を持つ文字列が多い場合、その一部が捨てられてしまうことがある。つまり、全ての文字列を完全に検索することは、処理時間とバッファ容量を考慮すると難しいという問題があった。
【０００４】
そこで、本出願人は、ハードウェアで全ての文字列を完全に検索できる方法を提案している（例えば、特許文献１〜３参照）。しかも、この方法では、文字列の検索を極めて高速に行うことができる。
【０００５】
特許文献１では、連想メモリセル列に順に記憶された被検索文字列(BABCABB…)に対して検索文字列(ABCA)を検索する場合、最初の文字(A)との比較動作は全てのセル列で行い、次の文字(B)との比較動作は前回一致したセル列と隣り合うアドレス(2),(5)のセル列のみで行い、次の文字(C)との比較動作は同様にアドレス(3),(6)のセル列のみで行い、最後の文字(A)との比較動作は同様にアドレス(4)のセル列のみで行うことにより、短時間で検索処理が終了するようにしている。
【０００６】
特許文献２では、マッチ線のスイッチング素子を挟んで接地端の反対側の部分と電源との間に第１のスイッチング手段を設け、第１のスイッチング手段を、連想メモリが比較結果に応じてスイッチング素子をオン又はオフしている期間又は比較前の準備期間内の一部の期間オンさせることにより、貫通電流が流れている期間を短くし、消費電力を低減している。
【０００７】
特許文献３では、書込みバッファの検索文字とＣＡＭの各セル列に記憶されている文字データとの比較結果を第１ラッチ、第２ラッチに順次保持し、信号生成回路が、入力信号がローであれば第１ラッチの出力と前段の第３ラッチの出力とのＡＮＤを、入力信号がハイであれば第１ラッチの出力と前段の第２ラッチの出力とのＡＮＤを、第３ラッチを介してプライオリティエンコーダに出力すると共にＯＲ回路に出力し、第１及び第２プライオリティエンコーダが、入力信号のＯＲを出力し、ＯＲ回路から出力された信号が第４ラッチ及び別のＯＲ回路を経由して各信号生成回路に入力されるようにすることにより、クロックの１周期で信号が通過すべき経路の長さを半分にして高速化している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平７−１１４５７７号公報
【特許文献２】特開平８−１４７９８６号公報
【特許文献３】特開平８−２４２１７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで、ある文字列の繰り返し部分はその文字列に比較的近い位置に出現する確率が高い。そのため、ｄｅｆｌａｔｅ圧縮等の方法では、その文字列に近い位置にある繰り返し部分ほど短いビット長を割り当てることで圧縮率を高めている。
従って、データが周期的に（サイクリックに）書き込まれるメモリにおいて、ある文字列の繰り返し部分が複数の位置に記憶されていた場合、どの位置に記憶された繰り返し部分を選択すればよいかが問題となる。このような場合、特許文献１〜３のようにプライオリティエンコーダを用いて、つまり、メモリ上の位置に関する固定した優先順位で繰り返し部分を選択するのではなく、書込み順序を考慮してその文字列に近い位置にある繰り返し部分を選択できるようにすれば、圧縮率が向上する。つまり、一般的に言えば、データが複数の位置に記憶されている場合に、なるべくそのデータが最近に書き込まれた位置を選択できるようにすることが求められる。
【００１０】
本発明の目的は、データが記憶された複数の位置からそのデータが最近に書き込まれた位置を選択できる可能性を高めることにある。
【課題を解決するための手段】
【００１１】
かかる目的のもと、本発明は、周期的にデータ要素が書き込まれるメモリ内の特定のデータ要素が記憶された複数の位置から特定の位置を選択する装置であって、特定のデータ要素が記憶された複数の位置が、現在の周期においてデータ要素が書き込まれたメモリの特定の領域内の位置を含むかどうかを判定する判定部と、複数の位置が特定の領域内の位置を含むと判定部により判定された場合に、複数の位置のうちの特定の領域内の少なくとも１つの位置を特定の位置として選択し、複数の位置が特定の領域内の位置を含まないと判定部により判定された場合に、複数の位置のうちの少なくとも１つの位置を特定の位置として選択する選択部とを含む、装置を提供する。
【００１２】
ここで、この装置は、特定のデータ要素が記憶された複数の位置の各々を表す複数の信号を発生させる信号発生部を更に含み、選択部は、複数の位置が特定の領域内の位置を含むと判定部により判定された場合に、信号発生部が発生させた複数の信号のうち特定の領域以外の領域内の位置を表す信号をマスクすることによって得られた少なくとも１つの信号に基づいて、特定の領域内の少なくとも１つの位置を選択する、ものであってよい。その場合、この装置は、選択部による信号のマスクに用いられるマスクパターンを記憶する記憶部を更に含み、記憶部は、特定の領域が拡大した場合に、メモリの新たに特定の領域に含まれるようになった領域内の位置を表す信号をマスクしないように変更されたマスクパターンを記憶する、ものであってもよいし、選択部による信号のマスクに用いられるマスクパターンを記憶する記憶部と、特定の領域と特定の領域以外の領域との境界を表す信号に基づいて、マスクパターンを生成する生成部とを更に含む、ものであってもよい。
【００１３】
また、この装置は、特定のデータ要素が記憶された複数の位置の各々を表す複数の信号を発生させる信号発生部を更に含み、判定部は、信号発生部が発生させた複数の信号のうち特定の領域以外の領域内の位置を表す信号をマスクすることによって得られた少なくとも１つの信号に対してＯＲ演算を行った結果に基づいて、特定のデータ要素が記憶された複数の位置が特定の領域内の位置を含むかどうかを判定する、ものであってよい。
【００１４】
また、本発明は、メモリのアドレス順に周期的にデータ要素が書き込まれるメモリ内の特定のデータ要素が記憶された複数のアドレスから特定のアドレスを選択する装置であって、特定のデータ要素が記憶された複数のアドレスの各々を表す複数の信号を発生させる信号発生部と、信号発生部が発生させた複数の信号の何れかが、１つの周期において現在のアドレスよりも先にデータ要素が書き込まれるアドレスを表すかどうかを判定する判定部と、複数の信号の何れかが現在のアドレスよりも先にデータ要素が書き込まれるアドレスを表すと判定部により判定された場合に、複数の信号のうち１つの周期において現在のアドレスよりも後にデータ要素が書き込まれるアドレスを表す信号をマスクすることによって得られた少なくとも１つの信号で構成される信号群を抽出し、複数の信号の何れもが現在のアドレスよりも先にデータ要素が書き込まれるアドレスを表さないと判定部により判定された場合に、複数の信号で構成される信号群を抽出する抽出部と、抽出部により抽出された信号群を構成する信号のうち、１つの周期において最後にデータ要素が書き込まれるアドレスを表す信号を、特定のアドレスを表す信号として出力する出力部とを含む、装置も提供する。
【００１５】
更に、本発明は、周期的にデータ要素が書き込まれるメモリに記憶された複数のデータ要素を参照して特定のデータ要素群を符号化する装置であって、特定のデータ要素群を構成するデータ要素ごとに、データ要素が記憶されたメモリ内の複数の位置を検出する検出部と、特定のデータ要素群を構成するデータ要素ごとに、検出部により検出された複数の位置が、現在の周期においてデータ要素が書き込まれたメモリの特定の領域内の位置を含むかどうかを判定する判定部と、特定のデータ要素群を構成するデータ要素ごとに、複数の位置が特定の領域内の位置を含むと判定部により判定された場合に、複数の位置のうちの特定の領域内の１つの位置を選択し、複数の位置が特定の領域内の位置を含まないと判定部により判定された場合に、複数の位置のうちの１つの位置を選択する選択部と、特定のデータ要素群を構成するデータ要素について選択部により１つの位置が連続して選択された場合に、特定のデータ要素群を構成する特定のデータ要素について選択部により選択された１つの位置と、選択部により１つの位置が連続して選択された回数とを用いて、特定のデータ要素群を符号化する符号化部とを含む、装置も提供する。
【００１６】
更にまた、本発明は、周期的にデータ要素が書き込まれるメモリ内の特定のデータ要素が記憶された複数の位置から特定の位置を選択する方法であって、特定のデータ要素が記憶された複数の位置が、現在の周期においてデータ要素が書き込まれたメモリの特定の領域内の位置を含むかどうかを判定するステップと、複数の位置が特定の領域内の位置を含むと判定された場合に、複数の位置のうちの特定の領域内の少なくとも１つの位置を特定の位置として選択し、複数の位置が特定の領域内の位置を含まないと判定された場合に、複数の位置のうちの少なくとも１つの位置を特定の位置として選択するステップとを含む、方法も提供する。
【発明の効果】
【００１７】
本発明によれば、データが記憶された複数の位置からそのデータが最近に書き込まれた位置を選択できる可能性を高まる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施の形態が適用されるマイクロコンピュータの構成例を示した図である。
【図２】本発明の第１の実施の形態における文字列検索装置の構成例を示したブロック図である。
【図３】連想メモリセルの構成例を示した回路図である。
【図４】プリチャージコントローラの構成例を示した回路図である。
【図５】本発明の第１の実施の形態におけるコントローラの動作例を示したフローチャートである。
【図６】一箇所でヒットが起きる文字列検索の具体例を示した図である。
【図７】二箇所でヒットが起きる文字列検索の具体例を示した図である。
【図８】複数のヒットが起きた場合に選択すべきヒットについて説明するための図である。
【図９】本発明の第１の実施の形態におけるアドレス出力回路の第１の構成例を示した図である。
【図１０】本発明の第１の実施の形態におけるアドレス出力回路の第２の構成例を示した図である。
【図１１】本発明の第１の実施の形態における文字列検索装置の動作例を示したフローチャートである。
【図１２】本発明の第２の実施の形態における文字列圧縮コントローラの構成例を示したブロック図である。
【図１３】本発明の第２の実施の形態における文字列圧縮コントローラの動作例を示したフローチャートである。
【発明を実施するための形態】
【００１９】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
［第１の実施の形態］
図１は、本実施の形態が適用されるマイクロコンピュータ１０の構成（一部）を示す。マイクロコンピュータ１０は、ＣＰＵ１２、ＲＯＭ１４、ＲＡＭ１６を備えており、これらはアドレスバス、データバス、コントロールバス等からなるバス１８を介して互いに接続されている。また、マイクロコンピュータ１０は、本実施の形態における文字列検索装置２０を備えており、この文字列検索装置２０は、文字列検索装置２０の作動を制御するコントローラ２２を介してバス１８に接続されている。
【００２０】
図２は、本実施の形態における文字列検索装置２０を示した図である。
文字列検索装置２０は、図に「○」で示す多数の連想メモリセル（単位セル）２８がマトリクス状に配置されて構成された連想メモリセルアレイ２６を備えている。連想メモリセルアレイ２６には、Ｍ＋１本のワード線WL0〜WLM、Ｍ＋１本のマッチ線MATCH0〜MATCHM、Ｎ＋１組のビット線対BL0,BL0'〜BLN,BLN'が各々マトリクス状に配置されており、各連想メモリセル２８は、ワード線WL0〜WLMの何れか、マッチ線MATCH0〜MATCHMの何れか、及び、ビット線対BL0,BL0'〜BLN,BLN'の何れかに各々接続されている。
【００２１】
多数の連想メモリセル２８は、各々同一の構成を有している。図３に示すように、連想メモリセル２８は、互いの入力端と出力端とが接続された２個のＮＯＴ回路３０、３２を備えている。このＮＯＴ回路３０、３２のループが、１ビットのデータを記憶する記憶回路（ＳＲＡＭ型）を構成する。ＮＯＴ回路３０の出力端はＮチャンネル型のＭＯＳＦＥＴ３４のソースに、ＮＯＴ回路３２の出力端は同じくＮチャンネル型のＭＯＳＦＥＴ３６のソースに各々接続されており、ＭＯＳＦＥＴ３４、３６のゲートは各々ワード線WLに接続されている。また、ＭＯＳＦＥＴ３４、３６のドレインは各々ビット線BL,BL'に接続されている。
【００２２】
ここで、連想メモリセル２８に１ビットのデータを書き込む場合（後述する「書込み」モード）には、ワード線WLはハイレベルとされ、ビット線BLは書き込むデータＤに対応したレベル（Ｄが「１」の場合はハイレベル、「０」の場合はローレベル）とされ、ビット線BL'はビット線BLのレベルに対して反転したレベル（ビット線BLがハイレベルの場合はローレベル、ビット線BLがローレベルの場合はハイレベル）とされる。これにより、ＭＯＳＦＥＴ３４、３６がオンし、ビット線対BL又はBL'を介して供給されたデータがＮＯＴ回路３０、３２のループに保持される。尚、連想メモリセル２８に記憶されたデータを読み取ることも可能となっている（後述する「読取り」モード）。
【００２３】
また、ＮＯＴ回路３０の出力端はＭＯＳＦＥＴ３８のゲートに、ＮＯＴ回路３２の出力端はＭＯＳＦＥＴ４０のゲートに各々接続されている。尚、ＮＯＴ回路３２からはデータＤを反転したデータ（Ｑ’）が出力され、ＮＯＴ回路３０からはデータＱ’を反転したデータＱ（＝Ｄ）が出力される。ＭＯＳＦＥＴ３８、４０のドレインは各々ビット線BL',BLに接続されており、ソースはＭＯＳＦＥＴ４２のゲートに接続されている。ＭＯＳＦＥＴ４２のドレインはマッチ線MATCHに接続され、ソースは接地されている。
【００２４】
尚、本実施の形態において、同一のワード線及びマッチ線に接続される連想メモリセル２８の数は、被検索文字列を構成する１文字を表すビット数（例えばアスキーコード、ＩＳＯコード等の場合は８ビット）と一致しており、同一のワード線及びマッチ線に接続される複数の連想メモリセル２８（以下、これらを「連想メモリセル列」という）に１文字分の文字データが記憶される。また、連想メモリセルアレイ２６では、連想メモリセル列毎にアドレスが付与されている。
【００２５】
ここで、文字データは、データ要素の一例である。また、連想メモリセルアレイ２６は、データ要素が記憶された複数の位置の各々を表す複数の信号を発生させる信号発生部、及び、データ要素が記憶されたメモリ内の複数の位置を検出する検出部の一例である。
【００２６】
再び図２を参照すると、文字列検索装置２０はタイミングコントローラ５０を備えている。また、文字列検索装置２０には動作モードとして、連想メモリセルアレイ２６に記憶されたデータを読み取る「読取り」モード、連想メモリセルアレイ２６にデータを書き込む「書込み」モード、連想メモリセルアレイ２６に記憶されたデータに対して検索を行なう「検索」モードが設けられている。タイミングコントローラ５０はコントローラ２２に接続されており、これらの動作モードは、コントローラ２２からタイミングコントローラ５０に各々入力される読取り指示READ、書込み指示WRITE、検索指示SEARCHに応じて切り替わる。
【００２７】
また、タイミングコントローラ５０にはコントローラ２２からシステムクロックCLOCKが入力され、システムクロックCLOCKと同期した４つのクロック（クロックRD、クロックWT-SR、クロックRD-WT、クロックSR）を、３つの動作モードに応じて生成し出力する。
クロックRD-WTは、「読取り」及び「書込み」時にタイミングコントローラ５０に接続されたアドレスデコーダ５２に出力され、アドレスデコーダ５２を作動させる。アドレスデコーダ５２はコントローラ２２に接続されており、コントローラ２２からデータの読取り又は書込みを行なう連想メモリセル列のアドレスが指定される。アドレスデコーダ５２にはワード線WL0〜WLMが接続されており、指定されたアドレスに対応する連想メモリセル列のワード線をハイレベルとする。
【００２８】
タイミングコントローラ５０にはセンスアンプ５４及び書込みバッファ５６が接続されており、クロックRDは「読取り」時にセンスアンプ５４に出力されてセンスアンプ５４を作動させ、クロックWT-SRは「書込み」及び「検索」時に書込みバッファ５６に出力されて書込みバッファ５６を作動させる。ビット線対BL0,BL0'〜BLN,BLN'はセンスアンプ５４及び書込みバッファ５６に各々接続されている。また、センスアンプ５４及び書込みバッファ５６はコントローラ２２に接続されている。
【００２９】
センスアンプ５４は「読取り」時に、連想メモリセル列の各々の連想メモリセル２８に記憶されたデータに応じて変化されたビット線対BL0,BL0'〜BLN,BLN'のレベル（これが読取りデータを表す）を増幅してコントローラ２２に出力する。書込みバッファ５６は「書込み」及び「検索」時に、コントローラ２２から入力されてバッファに記憶されたデータに応じてビット線対BL0,BL0'〜BLN,BLN'のレベルを変化させる（ビット線対を駆動する）。尚、「検索」時には、前述のようにアドレスデコーダ５２が作動されずワード線WL0〜WLMは何れもローレベルとされているので、検索データに応じて変化されたビット線対のレベルが連想メモリセル２８に取り込まれる、即ち連想メモリセル２８に検索データが書き込まれることはない。
【００３０】
また、タイミングコントローラ５０にはＭ＋１個のプリチャージコントローラ５８０〜５８Ｍが各々接続されており、クロックSRは「検索」動作時にプリチャージコントローラ５８０〜５８Ｍに出力され、プリチャージコントローラ５８０〜５８Ｍを各々作動させる。プリチャージコントローラ５８０は端子６６を介してコントローラ２２に接続されると共にマッチ線MATCH0に接続されており、プリチャージコントローラ５８１はマッチ線MATCH0及びマッチ線MATCH1に接続されている。プリチャージコントローラ５８２以降はプリチャージコントローラ５８１と同様に隣接する２本のマッチ線に接続されている。また、プリチャージコントローラ５８Ｍはマッチ線MATCHMを介してコントローラ２２に接続されている。
【００３１】
プリチャージコントローラ５８０〜５８Ｍは同一の構成を有している。図４に示すように、プリチャージコントローラ５８はＮＯＲ回路７０を備えており、ＮＯＲ回路７０の一方の入力端は前段側のマッチ線（例えばプリチャージコントローラ５８１の場合はマッチ線MATCH0）に接続されている。但し、プリチャージコントローラ５８０は端子６６を介してコントローラ２２に接続されており、コントローラ２２から入力信号CONTROL-INとして常にローレベルの信号が入力される。また、他方の入力端はコントローラ２２に接続されており、通常はローレベルでマッチ線MATCH0〜MATCHMを全てハイレベルにチャージ（プリチャージ）するときにハイレベルとされる信号SET（図２参照）が、コントローラ２２からプリチャージコントローラ５８０〜５８Ｍの各々に入力される。ＮＯＲ回路７０の出力端はＰチャンネル型のＭＯＳＦＥＴ７２のソースに接続されている。ＭＯＳＦＥＴ７２のゲートはタイミングコントローラ５０に接続されており（図４では図示省略）、「検索」時にはクロックSRが入力される。
【００３２】
また、ＭＯＳＦＥＴ７２のドレインにはＮＯＴ回路７４の入力端及びＮＯＴ回路７６の出力端が接続されており、このＮＯＴ回路７４の出力端及びＮＯＴ回路７６の入力端はＮチャンネル型のＭＯＳＦＥＴ７８のドレインに各々接続されている。従って、ＮＯＴ回路７４、７６によって記憶回路が構成される。ＭＯＳＦＥＴ７８のゲートはタイミングコントローラ５０に接続されており、「検索」時にクロックSRが入力される。ＭＯＳＦＥＴ７８のソースはＮＡＮＤ回路８０の一方の入力端に接続されており、ＮＡＮＤ回路８０の他方の入力端はタイミングコントローラ５０に接続されている。
【００３３】
ＮＡＮＤ回路８０の出力端はＰチャンネル型のＭＯＳＦＥＴ８２のゲートに接続されている。ＭＯＳＦＥＴ８２のソースは図示しない電源に接続されており、ドレインは次段側のマッチ線（例えばプリチャージコントローラ５８１の場合はマッチ線MATCH1）に接続されている。また、タイミングコントローラ５０はＰチャンネル型のＭＯＳＦＥＴ８４のゲートにも接続されている。ＭＯＳＦＥＴ８４のソースは図示しない電源に、ドレインはＮＯＴ回路８６の入力端に各々接続されている。ＮＯＴ回路８６の入力端はＭＯＳＦＥＴ７８のソースにも接続されている。ＮＯＴ回路８６の出力端はＮチャンネル型のＭＯＳＦＥＴ８８のゲートに接続されており、ＭＯＳＦＥＴ８８のソースは接地されており、ドレインは前述の次段側のマッチ線に接続されている。
【００３４】
一方、再び図２を参照すると、マッチ線MATCH0〜MATCHMは、各々アドレス出力回路６０に接続されている。後述するように、「検索」モードにおいて比較動作を１回行なった後にマッチ線がハイレベルとなっている連想メモリセル列は、記憶しているデータと供給されたデータとが一致した連想メモリセル列である。アドレス出力回路６０は、コントローラ２２に接続されており、「検索」動作を行なってマッチ線がハイレベルとなっている連想メモリセル列のアドレスMATCH-ADDRESSをコントローラ２２に出力する。但し、複数本のマッチ線がハイレベルとなっていた場合には、後述する選択処理によって決定された連想メモリセル列のアドレスをアドレスMATCH-ADDRESSとして出力する。
【００３５】
また、マッチ線MATCH0〜MATCHMは、ＯＲ回路６２の入力端にも各々接続されている。ＯＲ回路６２の出力端はコントローラ２２に接続されており、ＯＲ回路６２は、マッチ線MATCH0〜MATCHMの少なくとも１つがハイレベルであるか否かを表す信号、即ち検索データが連想メモリセルアレイ２６に記憶されているデータと一致したか否かを表す信号ENTIRE-MATCHをコントローラ２２に出力する。
【００３６】
次に、本実施の形態における文字列検索装置２０の動作について説明する。
図５は、「検索」モードにおける検索処理の一例として文字列の検索処理を行う際の文字列検索装置２０の動作例を示したフローチャートである。尚、このフローチャートは、ＣＰＵ１２からの指示によりコントローラ２２が実行する処理の流れを示したものである。また、このとき、連想メモリセルアレイ２６の各連想メモリセル２８には、既に被検索データとしての文字列データが記憶されているものとする。
【００３７】
検索処理が開始すると、コントローラ２２は、まず、ＲＡＭ１６等に記憶されている検索文字列を表す文字列データを取り込む（ステップ２００）。次に、取り込んだ検索文字列データの先頭から１文字分の文字データを取り出す（ステップ２０２）。そして、プリチャージコントローラ５８０〜５８Ｍに出力する信号SETを一旦アクティブ（ハイレベル）とする（ステップ２０４）。
プリチャージコントローラ５８０〜５８ＭのＮＯＲ回路７０に各々入力される信号SETが一旦ハイレベルとなると、ＮＯＲ回路７０から出力される信号がローレベルとなる。ＭＯＳＦＥＴ７２はＰチャンネル型であるのでクロックSRがローレベルの間はオンしており、ＮＯＲ回路７０から出力された信号はＮＯＴ回路７４に入力され、ＮＯＴ回路７４、７６のループに保持される。
【００３８】
また、コントローラ２２は、検索文字列データから取り出した文字データを書込みバッファ５６へ出力すると共に、信号SETを一旦ハイレベルとするのに同期して、タイミングコントローラ５０に検索指示SEARCHを出力する（ステップ２０６）。これにより、タイミングコントローラ５０からは書込みバッファ５６にクロックWT-SRが出力されると共に、プリチャージコントローラ５８０〜５８ＭにクロックSRが出力されることになる。これにより、プリチャージコントローラ５８ではマッチ線MATCHのプリチャージが行われる。
【００３９】
即ち、クロックSRがプリチャージコントローラ５８に入力されると、クロックSRがハイレベルのときにはＭＯＳＦＥＴ７２がオフすると共にＭＯＳＦＥＴ７８がオンする。これにより、前述のようにＮＯＴ回路７４からハイレベルの信号が出力され、ＮＡＮＤ回路８０の一方の入力端に入力される。ＮＡＮＤ回路８０の他方の入力端にもハイレベルの信号が入力されるので、ＮＡＮＤ回路８０から出力される信号がローレベルとなり、ＭＯＳＦＥＴ８２がオンしてマッチ線MATCHが図示しない電源に接続される。このとき、ＭＯＳＦＥＴ８８はオフしているのでマッチ線MATCHはハイレベルとなる。
【００４０】
更に、クロックSRがローレベルになると、ＮＡＮＤ回路８０の一方の入力端がローレベルになるのでＮＡＮＤ回路８０から出力される信号がハイレベルとなり、ＭＯＳＦＥＴ８２がオフする。また、ＭＯＳＦＥＴ７８がオフすると共にＭＯＳＦＥＴ８４がオンするので、ＮＯＴ回路８６に図示しない電源からハイレベルの信号が供給され、ＭＯＳＦＥＴ８８はオフ状態で維持される。従って、マッチ線MATCHはハイレベルの状態でプリチャージコントローラ５８から電気的に切り離されることになる。上記の動作がプリチャージコントローラ５８０〜５８Ｍで各々行われることにより、マッチ線MATCH0〜MATCHMがハイレベルにチャージされた状態（プリチャージされた状態）となる。
【００４１】
一方、書込みバッファ５６は、クロックWT-SRが入力されると、入力された文字データに応じてビット線対BL0,BL0'〜BLN,BLN'を駆動する。連想メモリセルアレイ２６の各連想メモリセル２８では、ＮＯＴ回路３０から出力されるデータＱが「１」（ハイレベル）であればＭＯＳＦＥＴ３８がオンしており、ＮＯＴ回路３２から出力されるデータＱ’が「１」であればＭＯＳＦＥＴ４０がオンしている。従って、ＮＯＴ回路３０、３２のループに保持されているデータＱ（Ｑ’）とビット線対BL,BL'を介して供給されるデータＤ（Ｄ')とが一致している場合にはＭＯＳＦＥＴ４２はオンしない。これに対し、不一致の場合にはＭＯＳＦＥＴ３８、４０のうちオンしている方のＭＯＳＦＥＴのドレインからソースに電流が流れ、ＭＯＳＦＥＴ４２がオンし、プリチャージされたマッチ線MATCHのレベルはローレベルに低下される（ディスチャージ）。
【００４２】
上記のデータの比較は、クロックSRがローレベルとなっている間に連想メモリセル２８の各々で同時に行われる。従って、クロックSRの１周期の間にプリチャージ及びデータの比較が行われることになる。ところで、１本のマッチ線MATCHには複数の連想メモリセル２８（連想メモリセル列）が接続されているので、クロックSRの１周期の間に、連想メモリセル列に記憶されている文字データと入力された文字データとを比較する比較動作が完了する。そして、各マッチ線は、接続されている全ての連想メモリセル２８でＭＯＳＦＥＴ４２がオンしなかった場合、即ち連想メモリセル列に記憶されている文字データと書込みバッファ５６に入力された文字データとが一致していた場合にのみハイレベルの状態で維持され、不一致であった場合にはローレベルとされることになる。
【００４３】
従って、書込みバッファ５６に入力された文字データが連想メモリセル列の少なくとも何れか１つに記憶されていた場合には、ＯＲ回路６２を介して出力される信号ENTIRE-MATCHがハイレベルとなる。また、連想メモリセル列で比較動作が行なわれている間、クロックSRはローレベルとなっており、プリチャージコントローラ５８ではＭＯＳＦＥＴ７２がオンするので、各連想メモリセル列の比較結果に応じて変化される各マッチ線MATCHのレベルは、次段のプリチャージコントローラ５８のＮＯＴ回路７４、７６に伝達されて保持されることになる（例えばマッチ線MATCH0のレベルはプリチャージコントローラ５８１に伝達される）。
【００４４】
上記により、次にクロックSRがハイレベルになるとＭＯＳＦＥＴ７８がオンし、プリチャージの場合と同様に、ＮＯＴ回路７４から出力される信号がハイレベルであれば、ＭＯＳＦＥＴ８２がオンしてマッチ線MATCHがハイレベルにチャージされる。また、ＮＯＴ回路７４から出力される信号がローレベルの場合には、ＮＯＴ回路８６から出力される信号がハイレベルとなるので、ＭＯＳＦＥＴ８８がオンし、マッチ線MATCHはローレベルとされる。このようにして、前段のマッチ線がハイレベルであれば次段のマッチ線がハイレベルとされ、前段のマッチ線がローレベルであれば次段のマッチ線がローレベルとされることになる。尚、マッチ線MATCH0については、コントローラ２２からプリチャージコントローラ５８０に入力される入力信号CONTROL-INにより、１回比較動作を行なった後は必ずローレベルとされる。
【００４５】
一方、コントローラ２２は、ＯＲ回路６２から出力された信号ENTIRE-MATCHがハイレベルか否か判定する（ステップ２１０）。信号ENTIRE-MATCHがハイレベルの場合には、アドレス出力回路６０から出力されたアドレスMATCH-ADDRESSを取り込んで記憶する（ステップ２１２）。そして、検索が終了したか否か、即ち、検索文字列を構成する全ての文字の文字データを書込みバッファ５６へ出力したか否か判定する（ステップ２１４）。書込みバッファ５６へ出力していない文字データがある場合には、検索文字列データから取り出す文字データを１文字分シフトして取り出し、書込みバッファ５６へ出力する（ステップ２１６）。これにより、上記でハイレベルとされたマッチ線に接続されている連想メモリセル列において書込みバッファ５６に出力した文字データに対して比較が行われる。
【００４６】
書込みバッファ５６へ文字データを出力するとステップ２１０へ戻り、コントローラ２２は、信号ENTIRE-MATCHがハイレベルの間、書込みバッファ５６へ出力していない文字データがなくなるまでステップ２１０〜２１６の処理を繰り返し、ステップ２１２が実行される毎に記憶しているアドレス（MATCH-ADDRESS)が更新される。
【００４７】
一方、ステップ２１４で書込みバッファ５６へ出力していない文字データがなくなった場合、コントローラ２２は、記憶しているアドレスMATCH-ADDRESSをＣＰＵ１２に送信して処理を終了する（ステップ２１８）。また、ステップ２１０〜２１６の処理を繰り返している途中で信号ENTIRE-MATCHがローレベルとなった場合には、検索文字列が連想メモリセルアレイ２６に記憶されていないと判断できる。このため、コントローラ２２は、ＣＰＵ１２に検索が失敗した旨を通知し（ステップ２２０）、別の検索文字列があるか否か判定する（ステップ２２２）。
【００４８】
ステップ２２２で別の検索文字列があると判定された場合にはステップ２００へ戻り、コントローラ２２は、上記処理を繰り返す。また、ステップ２２２で別の検索文字列がないと判定された場合、コントローラ２２は検索処理を終了する。
【００４９】
尚、図５のフローチャートに示した検索処理は単なる一例であり、例えば検索文字列に最も長く一致する文字列を記憶している連想メモリセル列群のアドレスを求めることも可能である。また、連想メモリセル２８は図３に示すＳＲＡＭ型の構成に限定されるものではなく、図７に示すようなＤＲＡＭ型とすることもできる。
【００５０】
このように、本実施の形態における文字列検索装置２０は、書込みバッファ５６に１文字入力される毎に、入力された文字を全ての連想メモリセル列に格納された文字と同時に比較することができるため、高速に検索することが可能である。しかも、１クロックで１文字と一致する部分を検索することが可能であり、極めて高速に検索できるようになっている。
【００５１】
図６は、この文字列検索装置２０による文字列検索動作を具体的に示したものである。
まず、太矢印の左側に示すように、連想メモリセルアレイ２６に「ＩＢＭ  ｉｓ」までの文字列が順次格納されたとする。尚、図において、連想メモリセルアレイ２６の左側に記載した数字は、各連想メモリセル列のアドレスを示しており、ワード線WLM（マッチ線MATCHM）のＭの値に対応する。
【００５２】
この状態で、文字列検索装置２０は、続く文字列「ＩＢＭ．」が書込みバッファ５６に１文字ずつ入力されると、連想メモリセルアレイ２６に格納された文字列と順次比較を行う。即ち、１文字目の「Ｉ」が書込みバッファ５６に入力されると、アドレス０の文字データがこれと一致するので、マッチ線MATCH0をハイレベルの状態で維持する。また、２文字目の「Ｂ」が書込みバッファ５６に入力されると、アドレス１の文字データがこれと一致するので、マッチ線MATCH1をハイレベルの状態で維持する。更に、３文字目の「Ｍ」が書込みバッファ５６に入力されると、アドレス２の文字データがこれと一致するので、マッチ線MATCH2をハイレベルの状態で維持する。その後、最後の文字「.」（ピリオド）が入力されると、アドレス３の文字データはこれと不一致となるので、マッチ線MATCH3をローレベルとする。
文字列検索装置２０では、連続した文字列「ＩＢＭ」をこのような方法で検出し、太矢印の右側に示すように、最初にヒットしたアドレス（以下、「ヒットアドレス」という）及び一致した文字長（この場合はヒットアドレス０及び文字長３）を出力する。
【００５３】
また、例えば、「ＩＢＭｉｓＩＢＭａｒｅＩＢＭ」のように「ＩＢＭ」を複数含む文字列の場合は、ヒットが同時に複数の位置で起きることになる。そのような場合、単純にメモリアドレスの大きい（或いは小さい）方をプライオリティエンコーダによって固定的に選択したのでは、つまり、優先順位を固定したのでは、新しく入力される文字を書き込むアドレス（書込みアドレス）に近いヒットアドレスを選択することができない可能性がある。
【００５４】
図７は、このような場合の連想メモリセルアレイ２６を用いた文字列検索動作を示したものである。ここでは、「ＩＢＭｉｓＩＢＭａｒｅＩＢＭ」という文字列を例にとる。
まず、（ａ）の太矢印の左側に示すように、連想メモリセルアレイ２６に「ＩＢＭｉｓＩＢＭａｒｅ」までの文字列が順次格納されたとする。尚、この図においても、連想メモリセルアレイ２６の左側に記載した数字は、各連想メモリセル列のアドレスを示しており、ワード線WLM（マッチ線MATCHM）のＭの値に対応する。また、図の「書込みアドレス」は、図２のアドレスデコーダ５２に入力される信号R/W-ADDRESSに相当し、新しく入力されたデータが格納される連想メモリセル列のアドレスである。この書込みアドレスは、データが書き込まれるたびに１ずつ増加していき、一番大きいアドレスに達するとアドレス０に戻り、データの書き込みが継続される。つまり、連想メモリセルアレイ２６はリングバッファとなっている。このように、過去のバッファの容量分のデータが連想メモリセルアレイ２６には常に存在する。そして、新たに書き込む文字列との一致は、この過去のデータを対象に判定される。（ａ）の場合、文字列はアドレス０から格納されており、アドレス１１が続きの文字が格納される連想メモリセル列を指し示す書込みアドレスとなっている。
【００５５】
この状態で、文字列検索装置２０は、続く文字列「ＩＢＭ」が書込みバッファ５６に１文字ずつ入力されると、連想メモリセルアレイ２６に格納された文字列と順次比較を行う。即ち、１文字目の「Ｉ」が書込みバッファ５６に入力されると、アドレス０及び５の文字データがこれと一致するので、マッチ線MATCH0及びMATCH5をハイレベルの状態で維持する。また、２文字目の「Ｂ」が書込みバッファ５６に入力されると、アドレス１及び６の文字データがこれと一致するので、マッチ線MATCH1及びMATCH6をハイレベルの状態で維持する。更に、３文字目の「Ｍ」が書込みバッファ５６に入力されると、アドレス２及び７の文字データがこれと一致するので、マッチ線MATCH2及びMATCH7をハイレベルの状態で維持する。
【００５６】
これで検索対象文字列は終了するが、連想メモリセルアレイ２６内に「ＩＢＭ」の文字列は２つ存在するので、ここでは２箇所でヒットが起きている。
（ａ）のようにアドレス０から文字列が格納された場合であれば、ヒットした２箇所のうち、固定的な優先順位に従って、アドレスの大きい方を選択すれば、書込みアドレスに近いヒットアドレスであるアドレス５を選択することができる。
【００５７】
ところが、上述したように、連想メモリセルアレイ２６はリングバッファとして繰り返し（周期的に）使用されるため、ある時点において、（ｂ）の太矢印の左側に示すように、例えばアドレス１０から「ＩＢＭｉｓＩＢＭａｒｅ」までの文字列が格納されていることも考えられる。尚、この場合は、アドレス７が書込みアドレスである。
【００５８】
この状態で、文字列検索装置２０は、続く文字列「ＩＢＭ」が書込みバッファ５６に１文字ずつ入力されると、連想メモリセルアレイ２６に格納された文字列と順次比較を行う。即ち、１文字目の「Ｉ」が書込みバッファ５６に入力されると、アドレス１及び１０の文字データがこれと一致するので、マッチ線MATCH1及びMATCH10をハイレベルの状態で維持する。また、２文字目の「Ｂ」が書込みバッファ５６に入力されると、アドレス２及び１１の文字データがこれと一致するので、マッチ線MATCH2及びMATCH11をハイレベルの状態で維持する。更に、３文字目の「Ｍ」が書込みバッファ５６に入力されると、アドレス３及び１２の文字データがこれと一致するので、マッチ線MATCH3及びMATCH12をハイレベルの状態で維持する。
【００５９】
これで検索対象文字列は終了するが、連想メモリセルアレイ２６内に「ＩＢＭ」の文字列は２つ存在するので、ここでも２箇所でヒットが起きている。
この場合、ヒットした２箇所のうち、固定的な優先順位に従って、アドレスの大きい方を選択すれば、書込みアドレスに近いヒットアドレスであるアドレス１を選択することができず、書込みアドレスから遠いヒットアドレスであるアドレス１０を選択することになってしまう。ｄｅｆｌａｔｅ圧縮等の方法では、ある文字列の繰り返し部分のうち最も近い位置にある繰り返し部分を選択し、近い位置にある繰り返し部分ほど短いビット長の符号を割り当てることで圧縮率を高めているので、（ｂ）のような場合は、圧縮率が低下してしまう。
【００６０】
そこで、本実施の形態では、連想メモリセルアレイ２６のどこから文字列が格納されている場合であっても、書込みアドレスからみて書込み順序が最も近いヒットアドレスを選択できるようにした。
複数の位置にある文字列がヒットしたとすると、何れかの文字列を選択しなければならない。ｄｅｆｌａｔｅ圧縮では、書込みアドレスから一致した文字列までの文字数と、一致した文字列に含まれる文字数とを符号化して、圧縮を行う。その場合、書込みアドレスからの文字数が少ないほど割り当てるビット長は短くなるため、複数の位置でヒットした場合に、書込みアドレスから一番近いヒットアドレスを選択することにより、圧縮率を高めることが可能となる（ある文字列の繰り返し部分はその文字列の近くに存在する確率が高いため、このような圧縮方法が採用されている）。ｄｅｆｌａｔｅ圧縮の場合、一番近いヒットアドレスに割り当てるビット長は５ビットですむが、一番遠いヒットアドレスに割り当てるビット長は１８ビットとなってしまい、後者は前者の３．６倍となる。従って、最適なものを選択できれば、圧縮率の向上を図ることが可能となる。
【００６１】
図８は、書込みアドレスと複数のヒットアドレスとの位置関係ごとに、最適なヒットアドレスの選択について示したものである。尚、この図でも、連想メモリセルアレイ２６の上から下へ向けて昇順にアドレスが割り振られているものとする。
（ａ）に示したケース１は、書込みアドレスより小さいアドレスに複数のヒットがあった場合である。この場合は、アドレスが最大のヒットアドレスが最適値、即ち、書込みアドレスに最も近いヒットアドレスとなる。
（ｂ）に示したケース２は、書込みアドレスより大きいアドレスに複数のヒットがあった場合である。この場合も、アドレスが最大のヒットアドレスが最適値、即ち、書込みアドレスに最も近いヒットアドレスとなる。
（ｃ）に示したケース３は、書込みアドレスより小さいアドレスに１つ、大きいアドレスに１つのヒットがあった場合である。この場合は、アドレスが小さいヒットアドレスが最適値、即ち、書込みアドレスに最も近いヒットアドレスとなる。
（ｄ）に示したケース４は、書込みアドレスより小さいアドレスに２つ、大きいアドレスに１つのヒットがあった場合である。この場合は、中央にあるヒットアドレスが最適値、即ち、書込みアドレスに最も近いヒットアドレスとなる。
【００６２】
こうしてみると、最適なヒットアドレスを選択することは一見難しそうである。
そこで、書込みアドレスを境界線として、連想メモリセルアレイ２６を書込みアドレスより小さいアドレスの領域（以下、「ローアドレス領域」という）と書込みアドレスより大きいアドレスの領域（以下、「ハイアドレス領域」という）の２つの領域に分けて考える。
（１）ローアドレス領域内にヒットアドレスが存在している場合は、ハイアドレス領域内のヒットアドレスは無視した上で、アドレスが最大のヒットアドレスを選択する。
（２）ローアドレス領域内にヒットアドレスが存在していない場合は、単純にアドレスが最大のヒットアドレスを選択する。
【００６３】
以上のような法則を用いることにより、書込みアドレスからみて書込み順序が最も近いヒットアドレスを選択することが可能となる。
この方法をハードウェアで実現するためには、ローアドレス領域とハイアドレス領域とを分けるためのマスクパターンを用いることが考えられる。
【００６４】
図９は、図２の文字列検索装置２０におけるアドレス出力回路６０の構成例を示した図である。但し、アドレス出力回路６０以外の構成も一部示している。
この例では、マスクパターンを、ラッチ（フリップフロップ）９００〜９０Ｍで構成し、ラッチ９００〜９０Ｍのそれぞれが１ビットを保持している。また、マスクパターンは、書込みアドレスが１増加するとラッチ９００〜９０Ｍの全体がシフトするようになっている。
以下、マスクパターンの生成方法を述べる。
（１）リセット時には、マスクパターンを構成するラッチ９００〜９０Ｍをクリアして「０」とする。
（２）データが連想メモリセル列に書き込まれ、書込みアドレスが１増加するたびにマスクパターン全体を１ビットシフトさせる。
（３）書込みアドレスが最大値に達し、アドレス０にラップしたときには、マスクパターンを構成するラッチ９００〜９０Ｍをクリアして「０」とする。
【００６５】
このようなマスクパターンを発生させた後、ローアドレス領域でヒットがあったかどうかをデコードする。即ち、ＡＮＤ回路９２０〜９２Ｍが、マッチ線MATCH0〜MATCHMの各々とラッチ９００〜９０Ｍの各々とのＡＮＤを取り、ＯＲ回路９４が、ＡＮＤ回路９２０〜９２Ｍから出力された信号のＯＲを取る。これにより、ＯＲ回路９４から出力される信号LOW-ADDRESS-HITがハイレベルであれば、ローアドレス領域でヒットがあったことが分かり、ローレベルであれば、ローアドレス領域でヒットがなかったことが分かる。
【００６６】
そして、ローアドレス領域でヒットがあった場合には、ハイアドレス領域でのヒットをマスクして、プライオリティエンコーダ１０２に伝える。
即ち、ローアドレス領域でヒットがあった場合には、ＯＲ回路９４からのハイレベルの信号LOW-ADDRESS-HITがＮＡＮＤ回路９８の一方の入力端に入力される。
ここで、ローアドレス領域については、ラッチ９０に「１」が保持されているので（図ではラッチ９００〜９０２）、ＮＯＴ回路９６からローレベルの信号がＮＡＮＤ回路９８の他方の入力端に入力される。従って、ＮＡＮＤ回路９８からはハイレベルの信号がＡＮＤ回路１００の一方の入力端に入力される。これにより、ＡＮＤ回路１００からは、マッチ線MATCHのレベルがそのままプライオリティエンコーダ１０２に入力される。
一方、ハイアドレス領域については、ラッチ９０に「０」が保持されているので（図ではラッチ９０３〜９０Ｍ）、ＮＯＴ回路９６からハイレベルの信号がＮＡＮＤ回路９８の他方の入力端に入力される。従って、ＮＡＮＤ回路９８からはローレベルの信号がＡＮＤ回路１００の一方の入力端に入力される。これにより、ＡＮＤ回路１００からは、マッチ線MATCHのレベルに関わらず、ローレベルの信号がプライオリティエンコーダ１０２に入力される。
その後、プライオリティエンコーダ１０２は、マッチ線MATCHがハイレベルになったアドレスのうち、最大のアドレスを選択する。
【００６７】
また、ローアドレス領域でヒットがなかった場合には、全領域でのヒットをそのままプライオリティエンコーダ１０２に伝える。
即ち、ローアドレス領域でヒットがなかった場合には、ＯＲ回路９４からのローレベルの信号LOW-ADDRESS-HITがＮＡＮＤ回路９８の一方の入力端に入力される。
ここで、ローアドレス領域については、ラッチ９０に「１」が保持されているので（図ではラッチ９００〜９０２）、ＮＯＴ回路９６からローレベルの信号がＮＡＮＤ回路９８の他方の入力端に入力される。従って、ＮＡＮＤ回路９８からはハイレベルの信号がＡＮＤ回路１００の一方の入力端に入力される。これにより、ＡＮＤ回路１００からは、マッチ線MATCHのレベルがそのままプライオリティエンコーダ１０２に入力される。
一方、ハイアドレス領域については、ラッチ９０に「０」が保持されているので（図ではラッチ９０３〜９０Ｍ）、ＮＯＴ回路９６からハイレベルの信号がＮＡＮＤ回路９８の他方の入力端に入力される。従って、ＮＡＮＤ回路９８からはハイレベルの信号がＡＮＤ回路１００の一方の入力端に入力される。これにより、ＡＮＤ回路１００からは、マッチ線MATCHのレベルがそのままプライオリティエンコーダ１０２に入力される。
その後、プライオリティエンコーダ１０２は、マッチ線MATCHがハイレベルになったアドレスのうち、最大のアドレスを選択する。
【００６８】
また、マスクパターンをラッチで構成せず、書込みアドレスをデコードすることで生成することも可能である。
図１０は、この場合のアドレス出力回路６０の構成例を示した図である。但し、アドレス出力回路６０以外の構成も一部示している。
この例では、図示するように、アドレスデコーダ５２が書込みアドレスに対応して１対１でマスクパターンを生成している。例えば、信号R/W-ADDRESSがアドレス０を示していれば、マスクパターン「１０００…００」を生成し、信号R/W-ADDRESSがアドレス１を示していれば、マスクパターン「１１００…００」を生成する。このような回路では、マスクパターンのリセット等を行う必要なく、単純である。どちらが好ましいかは、ゲートサイズ、ゲート遅延等を考慮の上で決めればよい。
【００６９】
尚、図９及び図１０において、ローアドレス領域は、現在の周期においてデータ要素が書き込まれたメモリの特定の領域の一例であり、ラッチ９０とＡＮＤ回路９２とＯＲ回路９４とからなる回路は、複数の位置が特定の領域内の位置を含むかどうかを判定する判定部の一例である。また、ラッチ９０とＮＯＴ回路９６とＮＡＮＤ回路９８とＡＮＤ回路１００とからなる回路は、複数の位置のうちの特定の領域内の少なくとも１つの位置又は複数の位置のうちの少なくとも１つの位置を選択する選択部の一例であり、複数の信号のうちの少なくとも１つの信号で構成される信号群又は複数の信号で構成される信号群を抽出する抽出部の一例でもある。更に、プライオリティエンコーダ１０２は、最後にデータ要素が書き込まれるアドレスを表す信号を出力する出力部の一例であり、ラッチ９０は、信号のマスクに用いられるマスクパターンを記憶する記憶部の一例であり、アドレスデコーダ５２は、マスクパターンを生成する生成部の一例である。
【００７０】
ここで、このようなアドレス出力回路６０の動作について説明する。
図１１は、アドレス出力回路６０の動作例を示したフローチャートである。
アドレス出力回路６０は、まず、書込みアドレスのカウントアップを検出する（ステップ９０１）。
次に、アドレス出力回路６０は、マスクパターンを生成する（ステップ９０２）。尚、ここでのマスクパターンの生成方法としては、図９のようにラッチ９０の全体をシフトさせることで生成する方法や、図１０のようにアドレスデコーダ５２が信号R/W-ADDRESSに基づいて生成する方法が考えられる。
【００７１】
そして、アドレス出力回路６０は、ローアドレス領域でヒットがあったかどうかを判定する（ステップ９０３）。これは、図９及び図１０を参照して述べたように、ＯＲ回路９４においてＡＮＤ回路９２０〜９２Ｍからの信号のＯＲを取ることで判定することができる。
その結果、ローアドレス領域でヒットがあったと判定された場合、ローアドレス領域ではマッチ線MATCHのレベルがそのままプライオリティエンコーダ１０２に入力され、ハイアドレス領域ではマッチ線MATCHのレベルに関わらずローレベルの信号がプライオリティエンコーダ１０２に入力される（ステップ９０４）。
一方、ローアドレス領域でヒットがなかったと判定された場合、ローアドレス領域、ハイアドレス領域共にマッチ線MATCHのレベルがそのままプライオリティエンコーダ１０２に入力される（ステップ９０５）。
その後、プライオリティエンコーダ１０２では、入力されたハイレベルになっているマッチ線MATCHのうち、最大のものをMATCH-ADDRESSとして出力する（ステップ９０６）。
【００７２】
尚、本実施の形態において、連想メモリセルアレイ２６は、上から下へアドレス順にデータが書き込まれるものとしたが、これには限らない。例えば、アドレス順にデータを書き込まないが、１つの周期が終わると全てのアドレスにデータが書き込まれているような書込み順序を採用してもよい。
【００７３】
［第２の実施の形態］
次に、本発明の第２の実施の形態を説明する。尚、第１の実施の形態と同一の部分には同一の符号を付し、説明を省略する。本実施の形態では、第１の実施の形態のコントローラ２２に代えて、文字列圧縮コントローラ１２０が設けられている。
【００７４】
図１２は、文字列圧縮コントローラ１２０を示した図である。
文字列圧縮コントローラ１２０には、システムクロックCLOCK、圧縮処理を行なう際にローレベルとなる信号ENABLE'、及び、被圧縮文字列データ（元データ）TEXT-INPUTが入力される。文字列圧縮コントローラ１２０に入力された信号ENABLE'は、データ入力コントローラ１３６、データ出力コントローラ１３８、及び、初期設定回路１４０に各々供給され、圧縮処理を行なう際に各回路を作動させる。また、文字列圧縮コントローラ１２０に入力された被圧縮文字列データTEXT-INPUTは、データ入力コントローラ１３６に供給される。
ここで、被圧縮文字列データは、データ要素群の一例であり、文字列圧縮コントローラ１２０は、データ要素群を符号化する符号化部の一例である。
【００７５】
データ入力コントローラ１３６は、文字列検索装置２０及びデータ出力コントローラ１３８に接続されている。データ入力コントローラ１３６は、供給された被圧縮文字列データの先頭から１文字分の文字データを取り出して書込みバッファ５６及びデータ出力コントローラ１３８に出力すると共に、文字列検索装置２０に検索指示SEARCH、書込み指示WRITEを順に出力することを、文字データの取り出し位置を文字列データの末尾側へ１文字分ずつシフトしながら繰り返す。これにより、文字列検索装置２０では、検索指示SEARCHにより、書込みバッファ５６に出力されて保持された文字データに対して各連想メモリセル列に記憶している文字データとの比較動作が行われ、次に書込み指示WRITEにより、保持された文字データが連想メモリセルアレイ２６に書き込まれることになる。
【００７６】
一方、初期設定回路１４０には書込みアドレスカウンタ１４２が接続されており、更にＮＡＮＤ回路１５０を介して文字列検索装置２０に接続されている。初期設定回路１４０は信号ENABLE'がローレベルになると、出力信号を一旦アクティブ（ローレベル）とする。これにより、ＮＡＮＤ回路１５０から出力される信号SETが一旦ハイレベルになる。
【００７７】
書込みアドレスカウンタ１４２は文字列検索装置２０及びガベージアドレスコントローラ１４８に接続されている。書込みアドレスカウンタ１４２は、連想メモリセルアレイ２６のうちの特定の連想メモリセル列のアドレスをカウント値として保持しており、このカウント値をアドレスR/W-ADDRESSとして文字列検索装置２０及びガベージアドレスコントローラ１４８へ出力する。また、書込みアドレスカウンタ１４２は、初期設定回路１４０から入力された信号がローレベルになると、保持しているアドレスを「０」（連想メモリセルアレイ２６の先頭の連想メモリセル列のアドレス）にリセットすると共に、連想メモリセルアレイ２６に対するデータの書込みが行われる毎にカウント値（アドレス）をカウントアップする。
【００７８】
従って、前述の書込み指示WRITEに従って書込みバッファ５６に保持された文字データが連想メモリセルアレイ２６に書き込まれる際には、アドレスR/W-ADDRESSのカウントアップに伴って文字データが書き込まれる連想メモリセル列が順次シフトしていくことになる。尚、書込みアドレスカウンタ１４２がワード線WLMに接続された連想メモリセル列（連想メモリセルアレイ２６の末尾の連想メモリセル列）のアドレスを保持している状態で、連想メモリセルアレイ２６へのデータの書込みが行なわれた場合にも、書込みアドレスカウンタ１４２はカウント値を「０」にリセットする。
【００７９】
一方、ガベージアドレスコントローラ１４８は文字列検索装置２０に接続されており、文字列検索装置２０から信号ENTIRE-MATCH及びアドレスMATCH-ADDRESSが入力される。ガベージアドレスコントローラ１４８は、書込みアドレスが一巡していないときに、文字列検索装置２０における比較動作の結果、信号ENTIRE-MATCHがハイレベルに維持されていた場合には、書込みアドレスカウンタ１４２から入力されたアドレスR/W-ADDRESSとアドレスMATCH-ADDRESSとを比較する。そして、アドレスMATCH-ADDRESSの方が大きいか等しい場合には、今回の比較動作の結果が無効か否かを表す出力信号FOUNDをアクティブ（ローレベル：無効を表す）とする。尚、ガベージアドレスコントローラ１４８は、文字列圧縮処理が開始される際にも信号FOUNDをローレベルとする。
【００８０】
ガベージアドレスコントローラ１４８には一致長カウンタ１４４及びデータ出力コントローラ１３８が接続されており、信号FOUNDは一致長カウンタ１４４及びデータ出力コントローラ１３８の各々に入力される。また、ガベージアドレスコントローラ１４８は、前述の信号FOUNDを、ＮＡＮＤ回路１５０を介して信号SETとして文字列検索装置２０に出力する。
【００８１】
一致長カウンタ１４４は、文字列検索装置２０で比較動作が行われた後に、ガベージアドレスコントローラ１４８から入力された信号FOUNDがハイレベルの場合にはカウント値（一致長さ）をカウントアップし、信号FOUNDがローレベルの場合、即ち文字列圧縮処理が開始される際及び今回の比較動作の結果が無効であった場合にはカウント値を「０」にリセットするようになっている。一致長カウンタ１４４にはデータ出力コントローラ１３８が接続されており、データ出力コントローラ１３８にカウント値を一致長M-LENとして出力する。
【００８２】
また、文字列検索装置２０にはアドレスレジスタ１４６が接続されている。アドレスレジスタ１４６は、文字列検索装置２０からアドレスMATCH-ADDRESSを受け、これを保持すると共にアドレスS-ADRとしてデータ出力コントローラ１３８へ出力する。
【００８３】
データ出力コントローラ１３８は、一致長カウンタ１４４から出力された一致長M-LEN及びアドレスレジスタ１４６から出力されたアドレスS-ADRを保持する。また、入力された信号FOUNDが文字列検索装置２０で比較動作が行われた後もハイレベルの状態で継続している場合に、次回以降の比較動作後に信号FOUNDがローレベルに遷移するまで、又は、データ入力コントローラ１３６が被圧縮文字列データから取り出す文字データが被圧縮文字列データの末尾に到達するまで、入力された文字データの出力を停止する。
【００８４】
そして、次回以降の比較動作後に信号FOUNDがローレベルに遷移した場合、又は、被圧縮文字列データから取り出す文字データが被圧縮文字列データの末尾に到達した場合には、保持しているアドレスS-ADR及び一致長M-LENに基づいて、出力を停止していた間にデータ入力コントローラ１３６から入力されたデータを、別のデータに置き換えて（圧縮して）、圧縮文字列データCOMP-DATAとして出力する。尚、前回比較動作が行われた後の信号FOUNDがローレベルでかつ今回比較動作が行われた後の信号FOUNDもローレベルである場合には、データ入力コントローラ１３６から入力されたデータをそのまま出力する。
【００８５】
次に、本実施の形態における文字列圧縮コントローラ１２０及び文字列検索装置２０の動作について説明する。
図１３は、圧縮処理を行う際のこれらの装置の動作例を示したフローチャートである。
まず、文字列圧縮コントローラ１２０は、圧縮処理を開始する指示として、信号ENABLE'及び被圧縮文字列を表す被圧縮文字列データTEXT-INPUTの入力を受ける（ステップ２５０）。これにより、被圧縮文字列データはデータ入力コントローラ１３６に保持される。また、初期設定回路１４０から書込みアドレスカウンタ１４２及び一致長カウンタ１４４にリセット信号が出力され、各カウンタのカウント値が「０」にリセットされる。更に、初期設定回路１４０からＮＡＮＤ回路１５０を介して文字列検索装置２０へ入力される信号SETが一旦ハイレベルとされてプリチャージコントローラ５８に入力される。第１の実施の形態でも説明したように、プリチャージコントローラ５８は、信号SETがハイレベルになると、クロックSRと同期してマッチ線をハイレベルとする。
【００８６】
次に、データ入力コントローラ１３６は、圧縮処理が終了したか否かを判定する（ステップ２５２）。圧縮処理が終了していない場合には、保持している被圧縮文字列データから先頭の１文字に対応する文字データを取り出して文字列検索装置２０の書込みバッファ５６に出力する（ステップ２５４）。また、データ入力コントローラ１３６は、検索指示SEARCHを出力する（ステップ２５６）。これにより、文字列検索装置２０のタイミングコントローラ５０からクロックSR及びクロックWT-SRが出力され、第１の実施の形態と同様に連想メモリセル列毎に比較動作が行われる。そして、データ出力コントローラ１３８は、比較結果が「一致」となった連想メモリセル列が有るか否か、即ち信号FOUNDがハイレベルか否かを判定する（ステップ２５８）。
【００８７】
ところで、この最初の比較動作では連想メモリセルアレイ２６の各連想メモリセル２８に文字データを書き込んでいないので、各連想メモリセル２８に記憶されているデータは不定であり、比較結果が「一致」となった連想メモリセル列があった（信号ENTIRE-MATCHがハイレベルに維持されていた）としても偶然である。本実施の形態では、書込みアドレスが一巡していないときに、ガベージアドレスコントローラ１４８において、信号ENTIRE-MATCHがハイレベルに維持されていた場合には入力されたアドレスR/W-ADDRESSとアドレスMATCH-ADDRESSとを比較し、アドレスMATCH-ADDRESSの方が大きいか等しい場合には今回の比較動作の結果は無効であるとして、信号FOUNDをローレベル（「無効」を表す）とする。従って、この時点ではステップ２５８において比較結果が「一致」となった連想メモリセル列はないと判定されてステップ２６０へ移行する。
【００８８】
その後、データ出力コントローラ１３８は、一致長カウンタ１４４から入力されて保持している一致長さを表すカウント値M-LENが「２」よりも大きいか否か、即ち過去２回の比較動作で何れも「有効」を表す信号FOUNDが出力されたか否かを判定する（ステップ２６０）。この時点では、保持している一致長M-LENは「０」であるので、ステップ２６０において一致長M-LENは「２」よりも大きくはないと判定され、データ出力コントローラ１３８は、データ入力コントローラ１３６から入力された文字データ、即ち書込みバッファ５６に保持された文字データを圧縮データCOMP-DATAとして出力する（ステップ２６６）。
【００８９】
また、このとき、データ入力コントローラ１３６からは書込み指示WRITEが出力される。これにより、文字列検索装置２０は、書込みバッファ５６に保持された文字データを連想メモリセルアレイ２６に書き込む（ステップ２６８）。尚、文字データが書き込まれる連想メモリセル列は、書込みアドレスカウンタ１４２に保持されているアドレス（このときは「０」）に対応する連想メモリセル列である。
【００９０】
更に、ローレベルの信号FOUNDが、ＮＡＮＤ回路１５０を介してハイレベルの信号SETとして文字列検索装置２０に入力され、これによりプリチャージコントローラ５８が各マッチ線をハイレベルにチャージする（ステップ２７０）。そして、書込みアドレスカウンタ１４２がカウント値のカウントアップを行い（ステップ２７２）、ステップ２５２へ戻る。
【００９１】
このように、ステップ２５８、２６０の判定結果が「Ｎｏ」である間は、書込みバッファ５６に保持された文字データが、データ出力コントローラ１３８から圧縮文字列データCOMP-DATAとして出力されると共に連想メモリセルアレイ２６に記憶される。また、文字データを書き込む連想メモリセル列のアドレスは、前述の書込みアドレスカウンタ１４２のカウント値のカウントアップに伴って比較動作が行われる毎に順次シフトされる。
【００９２】
一方、書込みバッファ５６に保持された文字データと何れかの連想メモリセル列に記憶された文字データとが一致した場合には、ガベージアドレスコントローラ１４８から出力される信号FOUNDがハイレベル（「有効」を表す）となる。これにより、ステップ２５８において、データ出力コントローラ１３８は、比較結果が「一致」となった連想メモリセル列があると判定する。この場合にはステップ２６６のようにデータの出力は行なわれず、一致長カウンタ１４４に「有効」を表す信号FOUNDが入力されることによりカウント値がカウントアップされ、このカウント値が一致長M-LENとしてデータ出力コントローラ１３８に保持される。
【００９３】
また、文字列検索装置２０は、連想メモリセルアレイ２６への文字データの書込みをステップ２６８と同様にして行う（ステップ２７４）。次に、比較動作後マッチ線がハイレベルに維持されている連想メモリセル列の次段の連想メモリセル列のマッチ線のみをハイレベルとし、それ以外の連想メモリセル列はマッチ線をローレベルとする（ステップ２７６）。そして、書込みアドレスカウンタ１４２は、カウント値のカウントアップを行い（ステップ２７８）、ステップ２５２へ戻る。
【００９４】
このように、ステップ２５８の判定結果が「Ｙｅｓ」である間は、連想メモリセルアレイ２６への文字データの書込み及び一致長M-LENのカウントアップのみが繰り返し行われる。ところで、ステップ２５８の判定結果が２回以上続けて「Ｙｅｓ」である場合は、書込みバッファ５６に連続して入力された文字データからなる文字列が連想メモリセルアレイ２６にも記憶されていた場合、即ち被圧縮文字列の中に２文字以上の文字で構成される繰り返し文字列が発見された場合である。ステップ２７４乃至２７８の処理が２回以上繰り返された後にステップ２５８の判定結果が「Ｎｏ」となった場合、即ち過去２回の比較動作では比較結果が「一致」となった連想メモリセル列が有りかつ今回の比較動作では比較結果が「一致」となった連想メモリセル列が無かった場合には次のステップ２６０の判定結果も「Ｙｅｓ」となり、ステップ２６２へ移行する。
【００９５】
この場合、データ出力コントローラ１３８は、上記で発見された繰り返し文字列を圧縮するための圧縮コードを求める。本実施の形態では、既に出力された繰り返し文字列と同一の文字列の位置を指し示すポインタを表す圧縮コードＡと、繰り返し文字列の長さを表す圧縮コードＢとで構成された圧縮コードを求める（ステップ２６２）。具体的には、データ出力コントローラ１３８が保持しているアドレスS-ADRと一致長M-LENとの差（S-ADR - M-LEN）を圧縮コードＡとし、一致長M-LENを圧縮コードＢとする。その後、データ出力コントローラ１３８は、上記で求めた圧縮コードＡ、圧縮コードＢを出力する（ステップ２６４）。
【００９６】
尚、この圧縮コードを出力するにあたり、圧縮した文字列を復元する際に圧縮コードと文字データとを区別できるようにするために、データ出力コントローラ１３８は、文字データと圧縮コードとの間に区切りを表すコードを挿入する。これにより、データ出力コントローラ１３８から出力される圧縮文字列データCOMP-DATAの長さは、文字列圧縮コントローラ１２０に入力された被圧縮文字列データTEXT-INPUTよりも短くなる。上記処理を繰り返すことによって被圧縮文字列データTEXT-INPUTが圧縮文字列データCOMP-DATA に変換されて出力されることになる。
【００９７】
以上、本発明の実施の形態について説明した。
このように、本実施の形態では、連想メモリセルアレイ２６の現在のアドレスにおける文字データが複数のアドレスで見つかった場合に、その複数のアドレスの少なくとも一部がローアドレス領域内にあれば、ローアドレス領域内で最大のアドレスを選択し、ローアドレス領域になければ、全ての中で最大のアドレスを選択するようにした。これにより、現在のアドレスにおける文字データに書き込み順が最も近い文字データを選択できるようになった。
そして、現在のアドレスから始まる文字列を、この選択された文字データの位置及び一致する部分の長さで圧縮することにより、従来よりも圧縮率を向上させることができるようになった。
【００９８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００９９】
２０…文字列検索装置、２２…コントローラ、２６…連想メモリセルアレイ、２８…連想メモリセル、５２…アドレスデコーダ、６０…アドレス出力回路、１０２…プライオリティエンコーダ、１２０…文字列圧縮コントローラ
【図１】
2010268146.tif 000003
【図２】
2010268146.tif 000004
【図３】
2010268146.tif 000005
【図４】
2010268146.tif 000006
【図５】
2010268146.tif 000007
【図６】
2010268146.tif 000008
【図７】
2010268146.tif 000009
【図８】
2010268146.tif 000010
【図９】
2010268146.tif 000011
【図１０】
2010268146.tif 000012
【図１１】
2010268146.tif 000013
【図１２】
2010268146.tif 000014
【図１３】
2010268146.tif 000015