(57)【特許請求の範囲】
【請求項１】
ｙ軸方向にエントリアドレスを登録する場所が割り当てられ、ｘ軸方向にキーデータが割り当てられる構成を持つ検索メモリマット（１０２）と、
前記検索メモリマットに接続された制御回路（１０５）と、を備える
半導体装置であって、
前記検索メモリマット（１０２）は、
前記キーデータが割り当てられる領域をｙ軸方向に沿って複数に分割することにより、複数の分割メモリ（１０２ａ、１０２ｂ…）が形成されており、
前記制御回路（１０５）は、
キーデータが入力される入力部（１０５１）と、
前記入力部に入力されたキーデータを、複数に分割する分割部（１０５２）と、
前記分割部が分割したキーデータのそれぞれを、当該分割したキーデータをアドレスとして前記分割メモリに割り当てて、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリに書き込む書込部（１０５３）と、を有する
半導体装置。
【請求項２】
前記制御回路（１０５）は、さらに、
前記書込部によって分割メモリの同一のアドレスに複数のエントリアドレスが書き込まれる場合には、当該分割メモリにエントリアドレスの衝突を表す情報を書き込む衝突情報記憶部（１０５４）を、有する
請求項１に記載の半導体装置。
【請求項３】
前記制御回路（１０５）は、さらに、
前記入力部に、検索対象データとしてのキーデータが入力され、前記分割部が、当該検索対象データとしてのキーデータを複数に分割した場合に、
前記分割部が分割したキーデータのそれぞれをアドレスとして前記分割メモリにアクセスし、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリから読み出す読出部（１０５５）を、有する
請求項２に記載の半導体装置。
【請求項４】
前記読出部（１０５５）は、
前記分割部が分割したキーデータをアドレスとして前記分割メモリにアクセスしたときに、当該分割メモリに前記衝突を表す情報が書き込まれていた場合には、当該分割したキーデータについては対応するエントリアドレスを読み出さずに、配慮しないものとして処理する
請求項３に記載の半導体装置。
【請求項５】
前記半導体装置は、さらに、
各エントリアドレスと各キーデータを対応付けて記憶した確認メモリマット（１０４）を備え、
前記制御回路（１０５）は、さらに、
前記読出部（１０５５）が読み出したエントリアドレスに対応するキーデータを、前記確認メモリマットから読み出し、当該キーデータが、前記入力部に入力された前記検索対象データとしてのキーデータと一致するか否かを確認する確認部（１０５６）を、有する
請求項４に記載の半導体装置。
【請求項６】
前記半導体装置は、さらに、
キーデータを予め定められた処理により符号化し、当該符号化したキーデータを前記制御回路の入力部へと出力する符号化回路（１０６）を備える
請求項１に記載の半導体装置。
【請求項７】
前記読出部（１０５５）は、
前記分割部が分割したキーデータのそれぞれをアドレスとして前記分割メモリにアクセスしたときに、全ての分割メモリに前記衝突を表す情報が書き込まれていた場合には、当該全ての分割メモリに既に書き込まれているエントリアドレスを読み出すものであり、
前記確認部（１０５６）は、
前記読出部が読み出したエントリアドレスで前記確認メモリマットを順次参照し、前記検索対象データとしてのキーデータと一致するキーアドレスを当該確認メモリマットから抽出したうえで、当該抽出したキーデータに対応するエントリアドレスを出力する
請求項４に記載の半導体装置。
【請求項８】
ｙ軸方向にエントリアドレスを登録する場所が割り当てられ、ｘ軸方向にキーデータが割り当てられる構成を持つ検索メモリマット（１０２）を備える半導体装置に対し、前記キーデータに対応する前記エントリアドレスを書き込む方法であって、
前記検索メモリマット（１０２）は、
前記キーデータが割り当てられる領域をｙ軸方向に沿って複数に分割することにより、複数の分割メモリ（１０２ａ、１０２ｂ…）が形成されており、
前記方法は、
前記半導体装置の制御回路（１０５）にキーデータが入力される工程と、
前記制御回路が、前記入力されたキーデータを、複数に分割する工程と、
前記制御回路が、前記分割したキーデータのそれぞれを、当該分割したキーデータをアドレスとして前記分割メモリに割り当てて、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリに書き込む工程と、を含む
方法。
【請求項９】
請求項８に記載の方法により、前記半導体装置に対して書き込んだ前記エントリアドレスを読み出す方法であって、
前記制御回路に検索対象データとしてのキーデータが入力される工程と、
前記制御回路が、前記入力された検索対象データとしてのキーデータを、複数に分割する工程と、
前記制御回路が、前記分割したキーデータのそれぞれをアドレスとして前記分割メモリにアクセスし、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリから読み出す工程と、を含む
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置、及び半導体装置に対するエントリアドレスの書き込み／読み出し方法に関する。具体的に説明すると、本発明は、検索メモリマットを分割することで、データの検索時における消費電力を低減させることを図った連想メモリ（ＣＡＭ：Content Addressable Memory）に関するものである。
【背景技術】
【０００２】
近年、クラウドコンピューティングの時代となり、インターネットスイッチやルータの高性能化や消費電力の低減が緊急の課題であるとされている。また、インターネットの検索エンジンとしては、より高速かつ低消費電力で確実な検索操作を行うことができるものが求められている。このような要求に応えるために、近年、インターネットスイッチや検索エンジンでは、ＣＡＭを使用することが多くなってきている。【０００３】
ここで、一般的なＣＡＭは、ＣＡＭ内に記憶されているデータ検索を行う際に、キーデータと呼ばれる検索データが入力される。そして、ＣＡＭは、キーデータと同じデータがメモリに記憶されている場合に、そのキーデータが記憶されているエントリアドレスと呼ばれる番地を出力する。一般的に、このような検索機能を実現するためには、ＣＡＭ内の全メモリ空間へのアクセスが必要となり、回路構成が複雑になるだけではなく、消費電力が大きくなるという問題があった。特に、この消費電力が大きくなるという問題は、ＣＡＭの規模に伴って大きくなるものであるため、現在では非常に深刻な問題であるとされている。【０００４】
このような問題に対し、例えば特許文献１では、ＣＡＭの高速検索性を活かしつつ、低消費電力化を図ることを目的としたデータ検索装置が提案されている。特許文献１のデータ検索装置は、プライオリティが決められた複数のルールデータを、その大小の順序に応じて新たに順序付けし、その順序に応じて複数のメモリブロックに割り当てる。また、この検索装置は、データの検索を行う際には、検索すべき一つのメモリブロックを指定して検索処理を実行する。このように、特許文献１のデータ検索装置は、検索処理を行う際に、指定された一つのブロックのみをアクティブにし、他のブロックをアクティブにする必要がないことから、その分、通常のＣＡＭと比較して検索時の消費電力を低減することができるとされている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−１８５７９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記特許文献１に開示されたデータ検索装置は、通常のメモリと比較して検索時の消費電力を低減することが可能であるものの、検索処理を実行するためには、一度にブロック内の全メモリ空間にアクセスする必要がある。このため、従来のデータ検索装置は、回路構成が複雑であるとともに、検索時における消費電力が大きいという問題を有していた。このように、上記特許文献１の技術は、現在の問題に対する根本的な解決策を提示するものではなかった。【０００７】
従って、現在では、引き続き、ＣＡＭの高速な検索性能を維持しつつ、検索処理時における消費電力を低減することのできる新規な半導体装置が求められている。
【課題を解決するための手段】
【０００８】
そこで、本発明の発明者らは、上記問題点を解決する手段について鋭意検討した結果、検索メモリマットを複数に分割し、キーデータを複数に分割したうえで、分割した検索メモリマットに、分割したキーデータに対応するエントリアドレスを書き込むという新たな知見を得た。このように、キーデータを複数に分割して検索メモリマットに書き込むようにすることで、このキーデータの検索を行う際には、検索メモリマットを部分的にアクティブにしてデータの検索を行うことができるようになる。その結果、本発明は、従来のＣＡＭと比較して大幅な低消費電力化を実現することができる。そして、本発明者らは、上記知見に基づけば従来技術の課題を解決できることに想到し、本発明を完成させた。【０００９】
本発明の第１の側面は、半導体装置に関する。ここでは、まず、半導体装置にデータを書き込む処理について説明する。
本発明の半導体装置は、検索メモリマット１０２と制御回路１０５を備える。
検索メモリマット１０２は、ｙ軸方向（列方向）にエントリアドレスを登録する場所が割り当てられ、ｘ軸方向（行方向）にキーデータが割り当てられる。
ここで、検索メモリマット１０２は、キーデータが割り当てられる領域をｘ軸方向に沿って複数に分割することにより、複数の分割メモリ１０２ａ、１０２ｂ…が形成されている。
また、制御回路１０５は、検索メモリマットに接続されている。
ここで、制御回路１０５は、入力部１０５１と、分割部１０５２と、書込部１０５３とを有する。
入力部１０５１には、キーデータ（入力データ）が入力される。
分割部１０５２は、入力部に入力されたキーデータ（入力データ）を、複数に分割する。
書込部１０５３は、分割部が分割したキーデータのそれぞれを、当該分割したキーデータをアドレスとして分割メモリに割り当てて、当該分割したキーデータそれぞれに対応するエントリアドレスを当該分割メモリに書き込む。【００１０】
上記構成のように、本発明の半導体装置では、まず、検索メモリマット１０２のうちのキーデータが割り当てられる領域が、複数に分割されている。これにより、検索メモリマット１０２は、複数の分割メモリ１０２ａ、１０２ｂ…に分割される。ここで、本発明は、このような複数の分割メモリ１０２ａ、１０２ｂ…に対して、キーデータに対応するエントリアドレスを書き込むことで、キーデータを記憶する。すなわち、本発明は、制御回路１０５にキーデータが入力されると、このキーデータを複数に分割する。そして、制御回路１０５は、分割したキーデータのそれぞれについて、このキーデータに割り当てられているエントリアドレスを、分割メモリ１０２ａ、１０２ｂ…に書き込んでいく。また、このとき、制御回路１０５は、分割メモリにエントリアドレスを書き込むにあたり、検索メモリマット１０２のｙ軸に割り当てられたエントリアドレスを登録する場所を、分割したキーデータの内容（バイナリデータ）として、その分割したキーデータによって示される場所に、その分割したキーデータに対応するエントリアドレスを書き込んでいく。【００１１】
このようにして、本発明の半導体装置は、検索メモリマット１０２を複数に分割したうえで、そこに複数に分割したキーデータに対応するエントリアドレスを書き込む。このような書込処理を行っておくことで、キーデータの読出処理を、低消費電力で、且つ高速に行うことができる。すなわち、上記のように、本発明では、キーデータが複数に分割され、この分割されたキーデータのそれぞれについてのエントリアドレスが、分割メモリに記憶される。このため、このエントリアドレスを検索する際には、検索メモリマット１０２全体を一度に活性化させる必要はなく、検索メモリマット１０２を分割メモリ１０２ａ、１０２ｂ…ごとに部分的に活性化させて検索することが可能となる。従って、本発明によれば、従来のＣＡＭと同様の高速性でデータ検索を実現しつつ、従来のＣＡＭよりも極めて低い消費電力でデータ検索を実行することができる。【００１２】
本発明の半導体装置において、制御回路１０５は、さらに、衝突情報記憶部１０５４を有することが好ましい。
衝突情報記憶部１０５４は、書込部によって同一の分割メモリに複数のエントリアドレスが書き込まれる場合に、当該分割メモリにエントリアドレスの衝突を表す情報を書き込む。【００１３】
本発明の半導体装置では、制御回路１０５の書込部１０５３が、複数に分割したキーデータのそれぞれを、当該分割したキーデータをアドレスとして、当該分割したキーデータに対応するエントリアドレスを当該分割メモリに書き込むものであるため、同じ分割メモリの同じアドレスに複数のエントリアドレスが書き込まれる可能性がある。このように、同じアドレスに複数のエントリアドレスが書き込まれる現象を、本願明細書では「衝突」と表現している。ここで、本発明の半導体装置は、エントリアドレスの書込処理を行うにあたり「衝突」が生じた場合に、その衝突したアドレスに衝突を表す情報（フラグ等）を登録し、そのまま書込処理を続行する。これにより、エントリアドレスの書込処理を高速化できる。また、本発明は、エントリアドレスの衝突を避けるのではなく、エントリアドレスが衝突したとしても気にせずに書込処理を行う。これにより、本発明は、書込処理／読出処理におけるアルゴリズムを簡素化し、さらには、データ検索の高速性と低消費電力性の両立を実現している。【００１４】
続いて、半導体装置からデータを読み出す処理について説明する。
本発明の半導体装置において、制御回路１０５は、さらに、読出部１０５５を有する。
読出部１０５５は、入力部に、検索対象データとしてのキーデータが入力されたときに機能する。すなわち、本発明では、入力部に検索対象データとしてのキーデータが入力されると、分割部が、当該検索対象データとしてのキーデータを複数に分割する。その後、読出部１０５５は、分割部が分割したキーデータのそれぞれをアドレスとして分割メモリにアクセスし、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリから読み出す。【００１５】
上述したように、本発明の半導体装置では、キーデータが複数に分割され、この分割されたキーデータのそれぞれについてのエントリアドレスが、分割メモリに記憶されている。このため、このエントリアドレスを検索する処理では、検索メモリマット１０２全体を一度に活性化させる必要はなく、検索メモリマット１０２を分割メモリ１０２ａ、１０２ｂ…ごとに部分的に活性化させて検索することが可能となる。従って、本発明によれば、従来のＣＡＭと同様の高速性でデータ検索を実現しつつ、従来のＣＡＭよりも極めて低い消費電力でデータ検索を実行することができる。【００１６】
本発明の半導体装置において、読出部１０５５は、分割部が分割したキーデータをアドレスとして分割メモリにアクセスしたときに、当該分割メモリに衝突を表す情報が書き込まれていた場合には、当該分割したキーデータについては対応するエントリアドレスを読み出さずに、配慮しないものとして処理する。【００１７】
上記のように、本発明の半導体装置は、分割したキーデータをアドレスとして、検索メモリマット１０２を検索した際に、同一のアドレスに複数のエントリアドレスの衝突が生じている場合には、その分割したキーデータについては検索対象から除外し、「配慮しない（don’t care）」ものとして扱う。本発明は、検索対象データとしての一つのキーデータを複数に分割したうえで、検索メモリマット１０２を検索している。このため、仮に分割したキーデータのうちの幾つかが「配慮しない（don’t care）」として扱われた場合であっても、少なくとも一つの分割したキーデータによってエントリアドレスを読み出すことができれば、このエントリアドレスに対応したキーデータと、検索対象データとしてのキーデータが一致するかどうかを確認することが可能となる。従って、このように、衝突が生じているときには無理にエントリアドレスを読み出さずに、配慮しないものとして扱い、敢えてそのまま処理を続行することで、読出処理を高速化させることができる。【００１８】
ただし、データの読出処理を行うにあたり、エントリアドレスの衝突が存在すると、理論的には、データ検索の精度が低下すると考えられる。このため、続いては、エントリアドレスの衝突が生じている場合であっても、正確にデータ検索を行うことのできる可能性を高める手法の例について説明する。【００１９】
衝突対策の第１の例として、半導体装置は、確認メモリマット１０４を備えることが好ましい。この確認メモリマット１０４は、各エントリアドレスと各キーデータを対応付けて記憶している。
また、この場合に、制御回路１０５は、確認部１０５６を有することが好ましい。この確認部１０５６は、読出部１０５５が読み出したエントリアドレスに対応するキーデータを、確認メモリマットから読み出し、当該キーデータが、入力部に入力された検索対象データとしてのキーデータと一致するか否かを確認する。【００２０】
上記構成のように、本発明の半導体装置は、確認メモリマット１０４を構築する記憶領域を持ち、そこにエントリアドレスとキーデータの対応関係を記憶しておくことができる。例えば、半導体装置は、新規なキーデータが入力されてきたときに、その新規なキーデータにエントリアドレスを割り当てて、その新規なキーデータとエントリアドレスの対応関係を、確認メモリマット１０４に記憶しておけばよい。このようにすることで、上述した読出処理によってエントリアドレスを読み出したときに、確認メモリマット１０４を参照すれば、そのエントリアドレスが、検索対象データとして入力されたキーデータに対応するものであるかどうかを確認することができる。特に、検索メモリマット１０２にエントリアドレスの衝突が発生しており、読出部により「配慮しない（don’t care）」処理が行われた場合には、確認メモリマット１０２を利用して、読み出したエントリアドレスが適切なものであるかを確認することは有効である。このようにして、本発明によれば、エントリアドレスの衝突が生じている場合であっても、正確にデータ検索を行うことのできる可能性を高めることができる。【００２１】
衝突対策の第２の例として、半導体装置は、さらに、符号化回路１０６を備えるものであることが好ましい。この符号化回路１０６は、制御回路１０５の入力部１０５１の前段に配置される回路である。すなわち、符号化回路１０６は、キーデータを予め定められた処理により符号化し、当該符号化したキーデータを制御回路の入力部へと出力する。【００２２】
本発明の半導体装置は、分割したキーデータに対応するエントリアドレスを、検索メモリマット１０２の分割メモリ１０２ａ、１０２ｂ…に書き込むものであり、分割メモリの同一のアドレスに複数のエントリアドレスが書き込まれるときには、衝突情報を登録することとしている。ここで、メモリに書き込むために入力されたキーデータに偏りがあると、データの衝突頻度が高くなり、検索不能データ列が多くなるという問題が発生する。すなわち、データの偏りは、例えばＩＤ番号を降順で登録する場合のように、ほとんど同じデータを続けて複数登録するような場合に発生する。ほとんど同じ内容のデータが続けて登録されると、検索メモリマット１０２内に均一に分散さずに、検索メモリマット１０２のほとんど同じアドレスに集中して偏って登録される。そうすると、検索メモリマット１０２内において、エントリアドレスの衝突が発生する可能性が高くなる。そこで、上記した構成のように、制御回路１０５の入力部１０５１にキーデータを入力する前に、符号化回路１０６によって、当該キーデータを符号化する。ここにいう符号化には、キーデータ（バイナリデータ）を所定のアルゴリズムで分散させることや、キーデータ（バイナリデータ）の順番を並び替えるような処理が含まれる。このように、ほとんど同じキーデータが続けて入力された場合であっても、これらのキーデータを符号化することにより、これらのデータの偏りを解消することが可能となる。データの偏りが解消すれば、検索メモリマット１０２内で衝突が発生する可能性を低下させることができる。その結果、正確にデータ検索を行うことのできる可能性が高まる。【００２３】
衝突対策の第３の例として、制御回路１０５の読出部１０５５がアクセスした全ての分割メモリに、衝突を表す情報が書き込まれていた場合について説明する。分割メモリの全てに衝突が生じている可能性は極めて低いものであるが、理論的には発生し得る。
そこで、読出部１０５５は、分割部が分割したキーデータのそれぞれをアドレスとして分割メモリにアクセスしたときに、全ての分割メモリに衝突を表す情報が書き込まれていた場合には、当該全ての分割メモリに既に書き込まれているエントリアドレスを読み出すことが好ましい。
また、このような場合において、確認部１０５６は、読出部が読み出したエントリアドレスで確認メモリマットを順次参照し、検索対象データとしてのキーデータと一致するキーアドレスを当該確認メモリマットから抽出したうえで、当該抽出したキーデータに対応するエンドリアドレスを出力することが好ましい。【００２４】
上記のように、検索メモリマット１０２からの出力が全て検索無視状態であっても、本発明は、検索にヒットした全てのアドレスから、すでに書き込まれているエントリアドレスを読み出し、各エントリアドレスで確認メモリマットを順次参照する。これにより、検索メモリマット１０２からの出力が全て検索無視状態であっても、データ検索で正解を導き出すことのできる可能性がある。その結果、正確にデータ検索を行うことのできる可能性が高まる。【００２５】
本発明の第２の側面は、半導体装置に対するエントリアドレスの書き込み／読み出し方法に関する。まず、半導体装置にエントリアドレスを書き込む方法について説明する。
本発明に係る方法は、半導体装置に対し、キーデータに対応するエントリアドレスを書き込む方法に関する。この半導体装置は、ｙ軸方向にエントリアドレスを登録する場所が割り当てられ、ｘ軸方向にキーデータが割り当てられる構成を持つ検索メモリマット１０２と、この検索メモリマット１０２に接続された制御回路１０５を備えている。
検索メモリマット１０２は、キーデータが割り当てられる領域をｘ軸方向に沿って複数に分割することにより、複数の分割メモリ１０２ａ、１０２ｂ…が形成されている。
ここで、本発明の方法は、まず、半導体装置の制御回路１０５にキーデータが入力される。その後、制御回路が、入力されたキーデータを、複数に分割する。そして、制御回路が、分割したキーデータのそれぞれを、当該分割したキーデータをアドレスとして分割メモリに割り当て、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリに書き込む。【００２６】
続いて、上述した書込処理によって半導体装置に書き込んだエントリアドレスを読み出す方法について説明する。
この読出処理では、まず、制御回路に検索対象データとしてのキーデータが入力される。その後、制御回路が、入力された検索対象データとしてのキーデータを、複数に分割する。そして、制御回路が、分割したキーデータのそれぞれをアドレスとして分割メモリにアクセスし、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリから読み出す。【００２７】
上記工程に従って、半導体装置に対してエントリアドレスの書き込み／読み出しを行うことで、データ検索を高速で行うことができるとともに、データ検索時における消費電力を抑えることができる。
【発明の効果】
【００２８】
本発明によれば、データの検索処理を低消費電力で高速に行うことができる。【００２９】
また、本発明によれば、ハードウエア的な動的再構築が可能な自動スイッチを実現できる。また、本発明では、基本入力情報群をバースト転送で入力すれば、基本的には、検索処理を行うにあたりマイクロコードのみがあれば十分であり、プログラムが不要となる。もちろん同じ方法で画像圧縮や暗号化も可能である。【００３０】
また、通常の画像処理やあいまい処理では、膨大なデータベースの中で処理することから、ステップ数の多いプログラムが必要となる。これに対し、本発明よれば、基本的に、プログラムのステップ数を少なくすることができ、プログラムの簡素化を図ることができる。【００３１】
さらに、本発明によれば、入力データ（検索データ）の偏りを解消して、データの衝突頻度を低減することができる。また、本発明では、仮にデータの衝突が発生した場合でも対応可能な半導体装置を実現できる。【００３２】
さらに、本発明によれば、検索時に入力される検索データに全列衝突の状態が発生しても検索結果を出力可能とする半導体装置を実現できる。【００３３】
さらに、本発明によれば、検索用メモリマットの分割数を増加することにより衝突頻度の低減を可能とする半導体装置を実現できる。
【図面の簡単な説明】
【００３４】
【図１】本発明の一実施形態に係る半導体装置の主たる構成を示す機能ブロック図である。
【図２】本発明の一実施形態に係る書き込み方法のメインフローを示すフロー図である。
【図３】本発明の一実施形態に係る書き込み方法のサブフローを示すフロー図である。
【図４】本発明の一実施形態に係る読み出し方法のメインフローを示すフロー図である。
【図５】本発明の一実施形態に係る読み出し方法のサブフローを示すフロー図である。
【図６】本発明の一実施例を示す半導体メモリ回路構成を示す図である。
【図７】本発明の一実施例を示すＳＲＡＭ−ＣＡＭのスイッチまたは検索の動作を示す図である。
【図８】本発明の一実施例を示すＳＲＡＭ−ＣＡＭの書き込み動作を示す図である。
【図９】本発明の一実施例を示すＳＲＡＭ−ＣＡＭの検索動作を示す図である。
【図１０】本発明の一実施例を示すＳＲＡＭ−ＣＡＭのエントリ数分だけキーデータを書き込んだ時の検索時ＮＧ発生数を示す図である。
【図１１】本発明の他の実施例を示す半導体メモリ回路構成を示す図であり、２５６のエントリ数で適応した例を示す構成図である。
【図１２】図１１において、エントリ幅（エントリ数）が２５６であってもキーデータ長が３２ビットで誤動作が無くなる確率を示す図である。
【図１３】エントリアドレスのデータが同じである時、未書き込み領域が増え、書き込み数を増やすことができる構成を示す図である。
【図１４】本発明の更に他の実施例を示す拡張機能を示す構成図である。
【図１５】図１４における書き込み動作を示す図である。
【図１６】図１４における検索動作を示す図である。
【図１７】キーワード検索の基本となるマスク操作を示す図である。
【図１８】マルチヒット機能の実現例を示す構成図である。
【図１９】一般的なＣＡＭのマルチヒットとの違いを示す図である。
【図２０】一般的なＣＡＭのマルチヒットを可能とする構成を示す図である。
【図２１】マルチヒットのクロックタイミングを示すタイミング図である。
【図２２】検索メモリマットにＬＵＴ制御回路が付加された状態を示す構成図である。
【図２３】四則演算およびシフトの元になる加算器の一例を示す構成図である。
【図２４】２５６エントリ×３２キーのＣＡＭアレイの単位部分の構成図である。
【図２５】スイッチまたは検索を示す構成図である。
【図２６】ダイナミックリコンフィギュレーションメモリの一例を示す構成図である。
【図２７】演算のクロック低減の一例を示す構成図である。
【図２８】エントリ数が２５６より大きい場合の考え方を示した概念図である。
【図２９】本発明の第４の実施例を示す半導体メモリ回路構成を示す図である。
【図３０】符号化ビットとデータの散乱度合いを説明する図である。
【図３１】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの符号化回路が出力する元情報と符号化ビットを示す図である。
【図３２】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの符号化回路が出力する他の元情報と符号化ビットを示す図である。
【図３３】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの符号化回路の構成図である。
【図３４】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの符号化回路の他の構成図である。
【図３５】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭのスイッチまたは検索の動作を示す図である。
【図３６】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの書き込み動作を示す図である。
【図３７】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの検索動作を示す図である。
【図３８】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの符号化回路が出力する元情報と符号化ビットを示す図である。
【図３９】ＳＲＡＭ−ＣＡＭに入力する元情報であるキーデータと４ビットずつグループ分けしグループの配列変更を行った後のキーデータと８ビット単位で符号化した後の３種類のデータの変化を示す図である。
【図４０】キーデータ及びキーデータに対し配列変更・符号化処理を実行したときの検索メモリマットの内容及び読出し結果を示す図である。
【図４１】キーデータに対し配列変更・符号化処理を２回実行したときの検索メモリマットの内容及び読出し結果を示す図である。
【図４２】本発明の第５の実施例を示すＳＲＡＭ−ＣＡＭの書き込み動作を示す図である。
【図４３】本発明の第５の実施例を示すＳＲＡＭ−ＣＡＭの検索動作を示す図である。
【図４４】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの書き込み動作を示す図である。
【図４５】本発明の第４の実施例を示すＳＲＡＭ−ＣＡＭの検索動作を示す図である。
【発明を実施するための形態】
【００３５】
以下、図面を用いて本発明を実施するための形態について説明する。本発明は、以下に説明する形態に限定されるものではなく、以下の形態から当業者が自明な範囲で適宜修正したものも含む。
なお、本明細書において、「書き込み／読み出し」との用語は、「書き込み及び読み出しの両方又はいずれか一方」を意味する用語として用いる。
【００３６】
本発明は、半導体装置、及び半導体装置に対するエントリアドレスの書き込み／読み出し方法に関する。本発明の基本的な考え方の要素は以下のとおりである。
（１）半導体装置の制御回路は、検索対象となるデータ、すなわち、キーデータを複数に分割（ｎ分割）し、その分割したキーデータをアドレスにして、メモリ回路（検索メモリマット）にアクセスする。
（２）制御回路は、アクセスしたメモリ回路のアドレスに、分割したキーデータに対応するエントリアドレスを登録する。
（３）このエントリアドレスの登録処理は、キーデータの分割数（ｎ）に対応したメモリ回路の全てに対して行われる。
（４）このエントリアドレスの登録の後で、制御回路に検索対象データとしてのキーデータが入力されると、制御回路は、入力されたキーデータを複数に分割（ｎ分割）する。そして、制御回路は、分割したキーデータをアドレスとしてメモリ回路にアクセスし、メモリ回路に登録されているエントリアドレスを出力する。
なお、望ましくは、
（５）制御回路は、出力したエントリアドレスが全て一致したときに、それを求めるエントリアドレスとして採用する。他方、制御回路は、出力したエントリアドレスに不一致があれば、検索対象データと一致するデータは登録されていないと判定する。
【００３７】
以上は、本発明における基本的な考え方である。なお、本発明を、実際に機能を実現できる製品に実装する場合には、様々な解決すべき問題も残っているが、それらの問題を解
決する方法については、後述の実施例において詳しく説明する。
【００３８】
まず、図１〜図５を参照して、本発明の概要について説明する。
【００３９】
図１は、本発明に係る半導体装置の主たる機能構成を示した機能ブロック図である。
図１に示されるように、本発明の半導体装置は、検索メモリマット１０２と制御回路１０５とを備える。また、図１に示されるように、本発明の半導体装置は、さらに、確認メモリマット１０４と符号化回路１０６とを備えることが好ましい。制御回路１０５は、検索メモリマット１０２、確認メモリマット１０４、及び符号化回路１０６のそれぞれと接続されており、半導体装置における情報処理を総合的に制御する機能を担っている。
【００４０】
図１に示された検索メモリマット１０２は、ｙ軸方向にエントリアドレスが登録される場所が割り当てられ、ｘ軸方向にキーデータが割り当てられる構成を持つ。ここにいう「ｙ軸方向」とは、行列からなるアレイにおける列方向（縦方向）と行方向（横方向）のいずれか一方の方向を意味し、「ｘ軸方向」とは、列方向（縦方向）と行方向（横方向）のいずれか他方の方向を意味している。つまり、検索メモリマット１０２では、一つのエントリアドレスに対して、一つのキーデータが対応付けて記憶される。このように、検索メモリマット１０２は、ｙ軸方向に複数のエントリアドレスを登録する場所が割り当てられて、各エントリアドレスに対してｘ軸方向に一つのキーデータ割り当てることのできる構成を基本としている。
【００４１】
また、本発明の半導体装置によって実現可能なＣＡＭ（連想メモリ）は、一般的に、検索メモリマットに登録されている複数のキーデータの中から、ユーザによって指定されたキーデータを検索して探し出し、このキーデータが発見された場所のエントリアドレスをユーザに提供するという機能を持つものである。つまり、「キーデータ」とは、検索メモリマット内に登録される所望の情報を意味する。また、「エントリアドレス」とは、キーデータが登録されている検索メモリマット内の場所（アドレス）を示すメタ情報を意味している。
【００４２】
また、例えば後述する図８等に示されるように、検索メモリマット１０２のｙ軸方向に割り当てられた「エントリアドレスを登録する場所」には、それぞれ、その場所を特定するための番地データが与えられる。例えば、図８に示された例において、「エントリアドレスを登録する場所」は、ｙ軸方向に４つずつ存在している。それぞれの「エントリアドレスを登録する場所」の番地は、例えば２ビットのデータによって特定されている。例えば、４つの「エントリアドレスを登録する場所」には、それぞれ、“００”、“０１”、“１０”、及び“１１”の番地データが与えられている。この番地データとは、検索メモリ１０２のメモリ空間における「エントリアドレスを登録する場所」の番地を特定するためのデータである。なお、「エントリアドレスを登録する場所」は、８つ以上存在していてもよい。この「エントリアドレスを登録する場所」を特定するための番地データは、３ビット以上のデータであってもよい。例えば、この「エントリアドレスを登録する場所」を特定するための番地データは、２ビット〜６ビット又は３ビット〜５ビットのデータであってもよい。
【００４３】
また、本発明の半導体装置において、キーデータは、所望のビット数のものを書き込んだり読み出したりすることができる。また、エントリアドレスについては、例えば２ビット以上で定義することが好ましい。例えば、エントリアドレスは、２ビット〜６ビットとすることができ、３ビット〜５ビットであってもよい。
【００４４】
また、図１に示されるように、検索メモリマット１０２は、複数の分割メモリ１０２ａ、１０２ｂ、１０２ｃ…によって構築されている。複数の分割メモリは、検索メモリマット１０２の記憶空間のうち、キーデータが割り当てられるｘ軸方向の領域を、ｙ軸方向沿って複数に分割するものである。つまり、検索メモリマット１０２を複数の分割メモリ１０２ａ、１０２ｂ、１０２ｃ…に分割して構築することで、キーデータが割り当てられる領域が複数に分割される。各分割メモリは、ＳＲＡＭなどの記憶装置を用いて構成することができる。この意味において、本発明は、複数のＳＲＡＭを利用して実現したＣＡＭであるということができる。本願明細書では、ＳＲＡＭを用いて実現したＣＡＭを、ＳＲＡＭ−ＣＡＭと称している。例えば、後述するが、キーデータが割り当てられる領域が複数に分割された検索メモリマット１０２は、図８に示されるような構成となる。
【００４５】
このようにして、検索メモリマット１０２のキーデータが割り当てられるｘ軸方向の領域を複数に分割することで、検索メモリマット１０２の記憶空間は、ｙ軸方向とｘ軸方向のそれぞれが複数に分割される。このように、ｙ軸とｘ軸で特定される区画された記憶空間（セル）を、本願明細書では、検索メモリマット１０２の場所やアドレスと表現している。
【００４６】
例えば、検索メモリマット１０２の総エントリ数を、仮に、４０９６エントリと定めた場合、４０９６エントリを識別できるアドレスのサイズは、１２ビットになる。また、検索メモリ１０２に入力されるキーデータの大きさが１４４ビットであるとすると、これを前記の１２ビットで割ると１２となる。すなわち、このような場合に、分割メモリの数は、少なくとも１２以上必要となる。
このような条件を考慮すると、最低限必要となる検索メモリマット１０２の分割数Ｎは、以下の式により求めることができる。
（式）Ｎ＝Ｌ／ｌｏｇ２・Ｍ
Ｌ：キーデータ長
Ｍ：総エントリ数
Ｎ：検索メモリマットの分割数（分割メモリの最小個数）
【００４７】
他方、図１に示されるように、制御回路１０５は、基本的に、入力部１０５１、分割部１０５２、書込部１０５３、読出部１０５５、及び出力部１０５７を有している。また、制御回路１０５は、さらに、衝突情報記憶部１０５４と確認部１０５６とを有していることが好ましい。これらの要素１０５１〜１０５６は、制御回路１０５の機能を概念的に分類して示したものである。すなわち、制御回路１０５は、これらの要素１０５１〜１０５６を利用して、検索メモリマット１０２に対しエントリアドレスを書き込んだり、検索メモリマット１０２に登録されているエントリアドレスを読み出したりする処理を行う。
以下では、制御回路１０５により実行される基本的な処理について、図２〜図５のフロー図を参照しながら説明する。
【００４８】
まず、制御回路１０５により行われるエントリアドレスの書込処理を説明する。
ここで、図２及び図３は、制御回路１０５が行う書込処理を示すフロー図である。ここでの書込処理とは、新しいキーデータ（入力データ）を記憶するにあたり、その新しいキーデータに対応したエントリアドレスを検索メモリマットに書き込む処理である。
【００４９】
図２に示されるように、書込処理においては、まず、検索メモリマット内に新たに登録するためのキーデータ（入力データ）が、半導体装置に入力される（ステップＳ１）。ここで、入力データとしてのキーデータは、図１に示されるように、制御回路１０５の入力部１０５１に直接入力されることとしてもよいし、符号化回路１０６を経由して制御回路１０５の入力部１０５１に入力されるものであってもよい。
【００５０】
ここで、キーデータが符号化回路１０６に入力された場合には、符号化回路１０６によってキーデータの符号化処理が行われる（ステップＳ２）。なお、ここで行われる符号化処理については、後の［実施例４］において詳しく説明する。
【００５１】
他方、入力データとしてのキーデータが制御回路１０５の入力部１０５１に直接入力された場合、この入力部１０５１は、キーデータを分割部１０５２へと送出する。つまり、入力部１０５１は、制御回路１０５における入力インターフェースである。
【００５２】
続いて、分割部１０５２は、入力データとしてのキーデータを複数に分割する（ステップＳ３）。つまり、分割部１０５２は、入力されたキーデータのバイナリデータ（コンピュータが扱うことのできる２進形式データ）を複数に分割する。例えば、分割部１０５２は、検索メモリマット１０２を構築する分割メモリ１０２ａ、１０２ｂ、１０２ｃ…の数と等しい数にキーデータを分割することが好ましい。要するに、分割部１０５２がキーデータを分割する分割数ｎは、検索メモリマット１０２を構築する分割メモリの数Ｎであることが好ましい。これにより、分割部１０５２によって複数に分割したキーデータ（「分割キーデータ」ともいう）の全てを、それぞれ順番に、複数の分割メモリに対して登録していくことができる。
【００５３】
また、分割部１０５２は、キーデータのバイナリデータを分割するにあたり、このバイナリデータを所定ビットずつに分けることが好ましい。例えば、キーデータとして“２６９９”が入力された場合に、このキーデータ“２６９９”をバイナリで表すと“１０１０１０００１０１１”となる。例えば、分割部１０５２は、このキーデータを、“１０”“１０”“１０”“００”“１０”“１１”のように、２ビットずつに分割することとしてもよい。また、分割部１０５２は、キーデータを、３ビットずつに分割することとしてもよいし、４ビットずつに分割することもできる。例えば、分割するビット数は、２〜１０ビットずつとすればよい。
【００５４】
さらに具体的に説明すると、分割部１０５２が分割したキーデータのビット数（α）は、検索メモリマット１０２のｙ軸方向に割り当てられる「エントリアドレスを登録する場所」を特定するための番地データのビット数（β）と等しいことが好ましい（α＝β）。例えば、検索メモリマット１０２内の「エントリアドレスを登録する場所」を特定するための番地データが２ビットで表されている場合には、分割部１０５２は、入力されたキーデータを２ビットずつ複数に分割することが好ましい。同様に、検索メモリマット１０２に割り当てられるエントリアドレスを登録する場所が３ビットの番地データで特定される場合には、分割部１０５２は、入力されたキーデータを３ビットずつ複数に分割することが好ましい。これにより、後の処理において、分割部１０５２が分割したキーデータのそれぞれを、当該分割したキーデータをアドレスとして、検索メモリマット１０２を構築する分割メモリに適切に割り当てることができる。
【００５５】
図１に示されるように、書込処理においては、分割部１０５２は、上記のようにして分割したキーデータを書込部１０５３へと送出する。
【００５６】
次に、書込部１０５３は、分割部１０５２から受け取ったキーデータに対して、固有のエントリアドレスを割り当てて、確認メモリマット１０４に書き込む処理を行う（ステップＳ４）。すなわち、このステップＳ４では、新規のキーデータを新しく検索メモリマット１０２に登録するに際し、この新規のキーデータに対して一つのエントリアドレスを割り当てて、新規のキーデータとエントリアドレスの対応関係を、確認メモリマット１０４に記憶しておく。確認メモリマット１０４のデータ構造の例は、図８の右下に示されている。このように、確認メモリマット１０４は、キーデータとエントリアドレスの対応関係を記憶しておくためのデータベースとしても機能させることができる。また、確認メモリマット１０４は、後述するとおり、読出処理を行う際に、制御回路が読み出したエントリアドレスが正しいものであるか否かの最終確認を行う際にも利用される。なお、確認メモリマット１０４は、ＳＲＡＭ等の記憶装置によって構成すればよい。
【００５７】
その後、書込部１０５３は、分割部１０５２によって分割された複数の分割キーデータを、それぞれ、検索メモリマット１０２の分割メモリ１０２ａ、１０２ｂ、１０２ｃ…に書き込む処理を行う（ステップＳ５）。このステップＳ５において行われる処理は、図３においてより詳しく説明されている。
【００５８】
図３のフロー図は、キーデータ（ＫＤ）のバイナリデータをｎ個の分割キーデータに分割し、この分割キーデータの順序をｋ番目と定義した場合を示している。
すなわち、図３に示されるように、まず、“ｋ”に“１”が代入されて、ｎ個の分割キーデータのうち１番目（最初）の分割キーデータの処理が開始される（ステップＳ５Ａ）。
【００５９】
次に、書込部１０５３は、１番目（ｋ番目）の分割キーデータのエントリアドレスを、検索メモリマット１０２に割り付ける（ステップＳ５Ｂ）。具体的に、書込部１０５３は、検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレス（ＥＡ）を登録する場所」を特定するための番地データを参照しながら、１番目（ｋ番目）の分割キーデータを表すバイナリデータをアドレスとして検索メモリマット１０２にアクセスし、ここでアクセスした検索メモリマット１０２の場所（アドレス）に対し、この分割キーデータに対応付けられたエントリアドレス（ＥＡ）を割り付ける。ここでの処理は、後に、図８等を参照してより詳しく説明する。
【００６０】
要するに、書込部１０５３は、検索メモリマット１０２の適切な場所（アドレス）に、１番目（ｋ番目）の分割キーデータに対応付けられたエントリアドレス（ＥＡ）を割り付けていく。この検索メモリマット１０２の適切な場所（アドレス）は、現在処理されている分割キーデータの順序（ｋ番目）と、分割キーデータのバイナリデータによって特定することができる。つまり、まず、分割キーデータの順序（ｋ番目）を参照して、この分割キーデータのエントリアドレスを書き込む検索メモリマット１０２のｘ軸方向の領域を特定する。例えば、１番目の分割キーデータのエントリアドレスは、検索メモリマット１０２を構築する複数の分割メモリ１０２ａ、１０２ｂ、１０３ｃ…のうち、１番目の分割メモリ１０２ａに書き込まれる。次に、分割キーデータのバイナリデータを参照して、この分割キーデータのエントリアドレスを書き込む検索メモリマット１０２のｙ軸方向の領域を特定する。すなわち、分割キーデータのエントリアドレスは、その分割キーデータを示すバイナリデータと、検索メモリマット１０２のｙ軸方向に割り当てられた「エントリアドレス（ＥＡ）を登録する場所」を特定するための番地データとが一致するｙ軸方向の領域に書き込まれる。例えば、検索メモリマット１０２のｙ軸方向に“００”“０１”“１０”“１１”という４つの番地データが割り当てられており、分割キーデータのバイナリデータが“１０”であり、さらにこの分割キーデータに対応するエントリアドレスが“００”である場合を想定する。この場合に、この分割キーデータのエントリアドレス“００”は、検索メモリマット１０２のうち、“１０”の番地データが割り当てられたｙ軸方向の領域（エントリアドレス（ＥＡ）を登録する場所）に書き込まれる。このようにして、現在処理されている分割キーデータの順序（ｋ番目）と、分割キーデータのバイナリデータとに基づいて、この分割キーデータのエントリアドレスを割り付ける検索メモリマット１０２の適切な場所（アドレス）を求めることができる。
【００６１】
続いて、書込部１０５３は、１番目（ｋ番目）の分割キーデータのエントリアドレス（ＥＡ）を割り付けた場所（アドレス）に、他のエントリアドレスが既に書き込まれており、エントリアドレスの衝突が発生するか否かを確認する（ステップＳ５Ｃ）。例えば、現在書込処理をしているキーデータの前に、別のキーデータが既に検索メモリマット１０２に書き込まれている場合には、エントリアドレスの衝突が発生し得る。
【００６２】
まず、ステップＳ５Ｃにおいて、書込部１０５３がエントリアドレスの衝突が発生していないと判断した場合、書込部１０５３は、そのまま１番目（ｋ番目）の分割キーデータに対応するエントリアドレスを、検索メモリマット１０２の適切な場所（アドレス）に書き込む（ステップＳ５Ｄ）。
【００６３】
他方、ステップＳ５Ｃにおいて、書込部１０５３がエントリアドレスの衝突が発生していると判断した場合は、衝突情報記憶部１０５４が、当該衝突の発生している検索メモリマット１０２の場所（アドレス）に、衝突を表す情報を書き込む（ステップＳ５Ｅ）。例えば、衝突情報記憶部１０５４は、衝突の発生している場所（アドレス）に、フラグビットなどを追加して、衝突が起こったことを記録すればよい。
【００６４】
上記ステップＳ５Ｄ又はステップＳ５Ｅのいずれかの処理が終了した後、書込部１０５３は、“ｋ”に“１”を加えて、この“ｋ＋１”の値を“ｋ”に代入する（ステップＳ５Ｆ）。そして、書込部１０５３は、ステップＳ５Ｇを経て得られた“ｋ”の値が“ｎ（キーデータの分割数）”と等しくなったか否かを確認する（ステップＳ５Ｇ）。ｋがｎ未満（ｋ＜ｎ）である場合、書込部１０５３は、ステップＳ５Ｂに戻る。例えば、１番目（ｋ番目）の分割キーデータの処理が完了した後には、２番目（ｋ＋１番目）の分割キーデータの処理を続けて行う。他方、ｋがｎと等しくなった（ｋ＝ｎ）場合、書込部１０５３は、図３に示されたサブフローを終了し、図２に示されたメインフローへと戻る。
【００６５】
上記の各ステップ（Ｓ１〜Ｓ５）により、書込部１０５３は、複数の分割キーデータの全てについて、対応するエントリアドレスを、検索メモリマット１０２の適切な場所（アドレス）に書き込んでいく。全ての分割キーデータのエントリアドレスを書き終えると、書込部１０５３は、書込処理を終了させる。
【００６６】
続いて、制御回路１０５により行われるエントリアドレスの読出処理を説明する。
ここで、図４及び図５は、制御回路１０５が行う読出処理を示すフロー図である。ここでの読込処理とは、検索対象であるキーデータ（検索データ）と一致するデータが、すでに検索メモリマット１０２内に書き込まれている場合に、そのキーデータに対応したエントリアドレスを読み出す処理である。
【００６７】
図４に示されるように、読出処理においては、まず、検索メモリマット１０２内を検索する対象となるキーデータ（検索データ）が、半導体装置に入力される（ステップＳ６）。ここで、検索データとしてのキーデータは、図１に示されるように、制御回路１０５の入力部１０５１に直接入力されることとしてもよいし、符号化回路１０６を経由して制御回路１０５の入力部１０５１に入力されるものであってもよい。
【００６８】
ここで、検索データとしてのキーデータが符号化回路１０６に入力された場合には、符号化回路１０６によって、このキーデータの符号化処理が行われる（ステップＳ７）。なお、ここで行われる符号化処理については、後の［実施例４］において詳しく説明する。
【００６９】
他方、検索データとしてのキーデータが制御回路１０５の入力部１０５１に直接入力された場合、この入力部１０５１は、キーデータを分割部１０５２へと送出する。
【００７０】
続いて、分割部１０５２は、検索データとしてのキーデータを複数に分割する（ステップＳ８）。ここで、読出処理で分割部１０５２が行う分割処理（ステップＳ８）は、前述した書込処理で分割部１０５２が行う分割処理（ステップＳ３）と同じアルゴリズムで行われる。このように、ステップＳ８での処理は、ステップＳ３での処理と同じであるため、説明を省略する。
【００７１】
図１に示されるように、読出処理においては、分割部１０５２は、分割したキーデータを読出部１０５５へと送出する。
【００７２】
その後、読出部１０５５は、分割部１０５２によって分割された複数の分割キーデータに基づいて、検索メモリマット１０２の分割メモリ１０２ａ、１０２ｂ、１０２ｃ…アクセスし、複数の分割キーデータのそれぞれに対応するエントリアドレスを読み出す処理を行う（ステップＳ９）。このステップＳ９において行われる処理は、図５においてより詳しく説明されている。
【００７３】
図５のフロー図は、キーデータ（ＫＤ）のバイナリデータをｎ個の分割キーデータに分割し、この分割キーデータの順序をｋ番目と定義した場合を示している。
すなわち、図３に示されるように、まず、“ｋ”に“１”が代入されて、ｎ個の分割キーデータのうち１番目（最初）の分割キーデータの処理が開始される（ステップＳ９Ａ）。
【００７４】
次に、読出部１０５５は、１番目（ｋ番目）の分割キーデータに基づいて、検索メモリマット１０２内を検索する（ステップＳ９Ｂ）。具体的に、読出部１０５５は、検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレス（ＥＡ）を登録する場所」を特定するための番地データを参照しながら、１番目（ｋ番目）の分割キーデータを表すバイナリデータをアドレスとして検索メモリマット１０２にアクセスし、ここでアクセスした検索メモリマット１０２のアドレス内に書き込まれている情報を抽出する。ここでの処理は、後に、図８等を参照してより詳しく説明する。
【００７５】
要するに、ステップＳ９Ｂにおいて、読出部１０５５は、書込部１０５３がステップＳ５Ｂで行った方法を同じ方法で、検索メモリマット１０２の適切な場所（アドレス）にアクセスする。つまり、この検索メモリマット１０２の適切な場所（アドレス）は、現在処理されている分割キーデータの順序（ｋ番目）と、分割キーデータのバイナリデータによって特定することができる。検索メモリマット１０２の適切な場所を特定する方法は、ステップＳ５Ｂにおいて説明したため、ここでの説明は省略する。
【００７６】
続いて、読出部１０５５は、１番目（ｋ番目）の分割キーデータに基づいてアクセスしたアドレスに、衝突を表す情報（衝突フラグ）が書き込まれているか否かを確認する（ステップＳ９Ｃ）。ここにいう「衝突を表す情報」は、上述したステップＳ５Ｅにおいて、衝突情報記憶部１０５４により書き込まれた情報である。
【００７７】
ここで、ステップＳ９Ｃにおいて、エントリアドレスの衝突が発生している判断した場合に、読出部１０５５は、１番目（ｋ番目）の分割キーデータを検索対象として「配慮しない（don’t care）」ものとして扱う（ステップＳ９Ｄ）。すなわち、「配慮しない（don’t care）ものとして扱われた分割キーデータについては、それに対応するエントリアドレスを読み出さずに、処理を終了させる（ステップＳ９Ｇへ）。このように、読出処理においてアクセスしたアドレスに、エントリアドレスの衝突が生じている場合には、そのエントリアドレスを「配慮しない（don’t care）」という概念を導入することで、高速且つ低消費電力で、効率的にデータ検索を行うことが可能となる。
【００７８】
他方、ステップＳ９Ｃにおいて、エントリアドレスの衝突が発生していないと判断した場合、読出部１０５５は、アクセスした検索メモリマット１０２の場所（アドレス）に書き込まれている一つのエントリアドレスを読み出す（ステップ９Ｅ）。すなわち、ここで読出部１０５５が読み出すエントリアドレスは、検索対象として入力されたキーデータ（検索データ）に対応するエントリアドレスである可能性がある。ただし、一つの分割キーデータに対応するエントリアドレスを読み出すことができても、このエントリアドレスが、検索対象としてのキーデータ（検索データ）に対応するエントリアドレスであるとは言い切れないため、引き続き、各分割データに対応するエントリアドレスの読出処理をおこなっていく。
【００７９】
次に、読出部１０５５は、ステップＳ９Ｅで読み出したエントリアドレスが、他の分割データに基づいて以前に読み出したエントリアドレスと不一致であるかどうかを確認する（ステップＳ９Ｆ）。なお、最初は、１番目の分割キーデータについての処理を行っており、以前に読み出したエントリアドレスが存在しないため、ステップＳ９Ｆを通過して、ステップＳ９Ｇへと移行する。
【００８０】
上記ステップＳ９Ｄ又はステップＳ９Ｆのいずれかの処理が終了した後、読出部１０５５は、“ｋ”に“１”を加えて、この“ｋ＋１”の値を“ｋ”に代入する（ステップＳ９Ｇ）。そして、読出部１０５５は、ステップＳ９Ｇを経て得られた“ｋ”の値が“ｎ（キーデータの分割数）”と等しくなったか否かを確認する（ステップＳ９Ｈ）。ｋがｎ未満（ｋ＜ｎ）である場合、読出部１０５５は、ステップＳ９Ｂに戻る。例えば、１番目（ｋ番目）の分割キーデータに基づいた読出処理が完了した後には、２番目（ｋ＋１番目）の分割キーデータに基づいた読出処理を続けて行う。他方、ｋがｎと等しくなった（ｋ＝ｎ）場合、読出部１０５５は、図５に示されたサブフローを終了し、図４に示されたメインフローへと戻る。
【００８１】
その後、１番目（ｋ番目）の分割キーデータに続いて、２番目（ｋ＋１番目）の分割キーデータに基づく読出処理を行う。ここで、例えば、ステップ９Ｆにおいて、２番目の分割キーデータに基づいて読み出したエントリアドレスが、１番目の分割データに基づいて以前に読み出したエントリアドレスと不一致であったと判断されたとする（ステップ９Ｆ）。例えば、２番目の分割キーデータに基づいて読み出したエントリアドレスが“００”であったのに対し、１番目の分割データに基づいて以前に読み出したエントリアドレスが“０１”である可能性もある。この場合には、読出部１０５５は、検索対象として入力されたキーデータは、検索メモリマット１０２内に登録されておらず、「一致データ無し」と判定する（ステップＳ９Ｉ）。そして、読出部１０５５は、図４で示したメインフローへとは戻らずに、ここで読出処理全体を終了させる。このように、本発明では、例えば、２番目の分割キーデータを処理した段階で「一致データ無し」と判定することができるため、３番目以降の分割キーデータの読出処理を実行しなくとも、早期に結果を出すことができる。これにより、検索処理の高速化を図ることができる。
【００８２】
図４に示されるように、エントリアドレスの読出処理（ステップＳ９）を終えると、制御回路１０５による処理は、ステップＳ１０へと進む。ステップＳ１０においては、制御回路１０５の確認部１０５６が、読出部１０５５の読み出したエントリアドレスに基づいて、確認メモリマット１０４を参照する。確認メモリマット１０４には、ステップＳ４で説明したとおり、エントリアドレスとキーデータが正しい組み合わせで対応付けて記憶されている。つまり、ここで、確認部１０５６は、読出部１０５５の読み出したエントリアドレスに基づいて、このエントリアドレスに対応付けられているキーデータを確認メモリマット１０４から読み出す。そして、確認部１０５６は、確認メモリマット１０４から読み出したキーデータが、検索対象として入力されたキーデータのエントリアドレスと一致するかどうかを確認する。このように、読出部１０５５が読み出したエントリアドレスに基づいて確認用１０４を参照することで、このエントリアドレスが、本当に、検索対象として入力されたキーデータのエントリアドレスと一致するものであるか否かを確認することができる。
【００８３】
例えば、複数に分割されたキーデータに基づいて複数のエントリアドレスを読み出したときに、すべてのエントリアドレスが同じ値であれば、そのエントリアドレスは正しいものであることがわかる。しかし、本発明では、上述したとおり、複数のエントリアドレスが同じ場所（アドレス）に登録されて“衝突”が発生したときに、「配慮しない（don’t care）」という概念を導入している。そうすると、複数に分割されたキーデータに基づいて複数のエントリアドレスを読み出したときに、そのうちの幾つかは同じ値を示すものの、その他のものは「配慮しない（don’t care）」という結果が得られることもある。このため、確率論的には、読み出したエントリアドレスにエラーが発生する場合もある。そこで、このような不確実性を排除するために、本発明では、確認メモリマット１０４を参照することとしている。
【００８４】
ステップＳ１０において、確認メモリマット１０４を参照した結果、読出部１０５５が読み出したエントリアドレスに誤りがないと判断した場合、確認部１０５６は、このエントリアドレスを、出力部１０５７へと送出する。そして、出力部１０５７は、確認部１０５６から受け取った一つのエントリアドレスを、検索結果として、制御回路１０５の外部へと出力する（ステップＳ１０）。つまり、出力部１０５７は、制御回路１０５における出力インターフェースである。
【００８５】
上記の各ステップ（Ｓ６〜Ｓ１０）により、制御回路１０５は、ユーザからの検索要求に応じて、検索メモリマット１０２に登録されているデータの検索を行い、検索データとして入力されたキーデータに対応する一つのエントリアドレスを出力する。
【００８６】
上記のように、本発明に係る半導体装置は、図１に示された基本構成を有する。この半導体装置は、基本的に、図２〜図５に示した書き込み処理／読み出し処理を行う。これらの処理は、本発明の基本概念を示すものである。本発明におけるより具体的な処理は、下記［実施例１］〜［実施例６］においてより詳しく説明する。
【００８７】
本発明は、上述のように、従来の回路構成、特にメモリ回路をベースとしながら、まったく新しい論理的方式論を提供するものである。すなわち、本発明は、キーデータとそのエントリアドレスの構成を巧みに利用したプログラムレスのアーキテクチャに関する。別の言い方をすれば、本発明は、脳型のアーキテクチャに関するものである。
【００８８】
本発明においては、まず、メモリ回路のメモリ空間を複数のクラスタに分割するとともに、このクラスタに書き込むデータも同様にして分割する。また、本発明では、分割したデータ自体を、クラスタにアクセスするためのアドレスとして捉える。さらに、このアドレスをメモリ空間のｙ軸に割り当て、クラスタに入力するデータをメモリ空間のｘ軸に割り当てる。そして、本発明では、ｘ方向のメモリ空間を独立に書き込み／読み出しができる複数のメモリに分割し、分割された複数のメモリに、分割したクラスタの入力を割り当てることとしている。
【００８９】
さらに、本発明は、上記の構成により、アドレスが衝突したときに「配慮しない（don’t care）」という概念を導入することで、高速且つ低消費電力でスイッチや検索を実現することができるようになるという発想に基づいている。
【００９０】
また、本発明の発明者は、分割メモリの入力と出力部に、入出力されるデータの順序を選択的に分配できるスイッチと、これらのスイッチを制御する制御回路を設けることを発想した。これにより、分割メモリをＬＵＴ（Look Up Table）として扱うことも可能となり、メモリ内のクラスタを論理回路として扱うことも可能となる。すなわち、本発明の半導体装置は、いわゆる均質回路となる。これにより、本発明の半導体装置は、必要に応じて、論理回路やメモリとしての機能を切り替えて用いることができる。また、本発明の半導体装置は、設定する必要クラスタを隣接した位置に動的に移動することも可能となり、低消費電力で高速な検索処理が可能となる。
【００９１】
さらに、本発明の半導体装置は、分割メモリの入力部と出力部にスイッチ回路を設けることもできる。この場合、半導体装置の制御回路が、さらに、論理的に分割メモリを選択できるように構成される。この分割メモリは、さらに、ＬＵＴ（Look Up Table）としてデータが入力されていることで論理演算が可能な構成を備えており、必要ならばこれを複数ブロック配列することを可能としている。
【００９２】
また、本発明の半導体装置に対するエントリアドレス書き込み／読み出し方法は、分割キーデータで特定される分割メモリの同一のアドレスに複数のエントリアドレスが書き込まれた場合、その分割メモリのアドレスに衝突を表す情報を記憶することとしている。また、本発明の方法は、分割キーデータに基づいて読み出された情報のすべてが衝突を表す情報の場合には、読み出された衝突情報で確認メモリマットを順次参照して、一致するキーアドレスを抽出するように構成している。
【００９３】
ここで、本発明の理解を容易にするために、検索メモリマット及び分割メモリについて、具体的な数値を当てはめて説明する。検索メモリマット１０２は、複数の分割メモリを備える。例えば、検索メモリマット１０２の総エントリ数を、４０９６エントリと定めた場合、４０９６エントリを識別できるアドレスのサイズは、１２ビットになる。また、検索メモリマット１０２からエントリアドレスを検索するためのキーデータの大きさが１４４ビットであるとすると、これを前記の１２ビットで割ると１２となる。すなわち、分割メモリの数は１２となる。
【００９４】
検索メモリマット１０２に付属している制御回路１０５は、１４４ビットのキーデータが入力されると、これを１２分割して、それぞれを予め対応させた各分割メモリに割り当てる。分割したキーデータのバイナリデータは、対応する分割メモリにアクセスするためのアドレスとして用いられる。そして、この分割したキーデータにより指定された検索メモリマットの場所には、キーデータに対応するエントリアドレスを書き込む。このエントリアドレスは、１２分割された全ての分割メモリに書き込まれる。
【００９５】
次に、書き込まれた情報を読み出す場合、制御回路１０５は、書き込みと同じ手順で、入力した１４４ビットのキーデータを１２分割する。また、制御回路１０５は、分割されたキーデータをアドレスとして予め定めた分割メモリにアクセスする。そして、制御回路１０５は、指定された分割メモリに書き込まれたデータを読み出す。この読み出されたデータが、キーデータに対応するエントリアドレスである。
【００９６】
ここで、入力されるキーデータの大きさを更に大きくすることもできる。例えば、キーデータの大きさ１４４ビットから２８８ビットに拡張することも可能である。この場合には、検索メモリマット１０２を並列的に２つ並べた構成すればよい。また、検索メモリマット１０２の総エントリ数を拡大することもできる。例えば、検索メモリマット１０２の総エントリ数を４０９６から８１９２に拡大するときには、検索メモリマット１０２を直列的に２つ並べて構成すればよい。なお、検索メモリマットの総エントリ数の基本単位や、並列的又は直列的に並べる検索メモリマットの個数は、上記に限定されるものではなく、要求により自由に拡大したり縮小したりすることができる。
【００９７】
なお、後述するが、上記の検索メモリマットにスイッチ機能を付加することも可能である。この場合、検索メモリマットをルックアップテーブルＬＵＴ（Look Up Table）方式の論理回路として構成することもできる。さらに、拡大メモリ空間の一部として検索メモリマットの構成含むように設定することもできる。
【００９８】
上記の説明は、本発明の理解を容易にするための具体例である。したがって、本発明は、上記のものに限定されるものではない。
【実施例１】
【００９９】
図１は、本発明を実現する半導体装置の例を示している。特に、図６は、ＳＲＡＭ−ＣＡＭによるメモリ回路構成の一例を示している。なお、本実施例では、ＳＲＡＭ−ＣＡＭによって構成された半導体装置のメモリ構成や基本原理について説明する。しかしながら、例えば、ロウアドレス（row address）とカラムアドレス（column address）からなるメモリアレイにアクセスを行なうメモリ空間（メモリマット）を備える半導体装置であれば、本発明の原理を実現可能である。【０１００】
図６に示されるように、本発明の一実施例に係る半導体装置は、近接キャッシュメモリマット１０１、制御回路１０５、検索メモリマット１０２、比較及びラッチ回路１０３、確認メモリマット１０４を備えている。また、検索メモリマット１０２は、複数の分割メモリ１０２ａ、１０２ｂ、１０２ｃ、…、１０２ｈによって構築されている。なお、近接キャッシュメモリマット１０１は、必要としない場合には設ける必要はない。【０１０１】
まず、本発明は、インターネットのスイッチやルータでよく用いられているＣＡＭの欠点を克服することを目的とするものである。すなわち、従来のＣＡＭは、データの検索を行う際に、全ビットを活性するため大電力を消費するという欠点を有している。そこで、本発明は、検索時において、従来のＣＡＭのように全ビットを活性するのではなく、ｙ軸の指定エントリのみを活性にすることとしている。これにより、本発明によれば、従来のＣＡＭと比較して、エントリ数分の一（１／エントリ数）の活性ビットでの検索が可能となる。すなわち、本発明は、従来のＣＡＭと比較すると、ｙ軸のエントリ数分の一（１／エントリ数）のアドレスのみを動作させるだけで、検索結果を出力することができる。このため、本発明では、従来のＣＡＭが使用していた出力エンコーダが不要となり、また、大きな電力を消費するナンド回路のツリー構造が不要となる。従って、本発明によれば、低消費電力で検索処理を実行できる。【０１０２】
図６に示されるように、本発明の半導体装置（ＳＲＡＭ−ＣＡＭ）では、入力データであるキーデータ（ＫＤ）とエントリアドレス（ＥＡ）が制御回路１０５に入力され、所定のアルゴリズムで検索メモリマット１０２に書き込まれる。つまり、制御回路１０５は、入力されたキーデータを所定数に分割し、分割したキーデータをアドレスとして、予め定められた対応する分割メモリ１０２ａ、１０２ｂ、１０２ｃ、…、１０２ｈにアクセスする。そして、制御回路１０５は、このアクセスした分割メモリ１０２ａ、１０２ｂ、１０２ｃ、…、１０２ｈに、キーデータとエントリアドレスを書き込む。この制御回路１０５の書き込み動作は、分割メモリ１０２ａ、１０２ｂ、１０２ｃ、…、１０２ｈの全てに対して行なわれる。なお、本願明細書では、検索メモリマット１０２に新しく登録するために入力されたキーデータを、「入力データ」と称し、検索メモリマット１０２内を検索するために入力されたキーデータを、「検索データ」と称することもある。【０１０３】
制御回路１０５は、検索メモリマット１０２のｙ軸にエントリアドレス（ＥＡ）を登録する場所（アドレス）を割り付け、そのｘ軸にキーアドレス（ＫＤ）を割り付ける。この制御回路１０５の動作を、ＣＡＭの基本動作に対応付けて説明すると、データ検索の際に入力されるキーデータをｘ軸に割り付け、エントリアドレスを登録するための場所（アドレス）をｙ軸に割り付けるものである。【０１０４】
検索メモリマット１０２は、ｘ軸方向の領域が、複数の基本セルに分割される。検索メモリマット１０２を分割する数は、ｎ（ｎは２以上の自然数）である。各基本セルには、適切な大きさのビット数に分割されたキーデータにより指定された場所にエントリアドレス（ＥＡ）が格納される。図６の例では、ｎを８とした場合を示している。各基本セルに格納するエントリアドレスのビット数は分割されたキーデータのビット数により定まるが、キーデータのビット数は、任意である。【０１０５】
確認メモリマット１０４は、ｙ軸にエントリアドレス（ＥＡ）が割り付けられ、ｘ軸にエントリアドレスに対応するキーデータ（ＫＤ）が割り付けられる。つまり、確認メモリマット１０４のｘ軸には、エントリアドレスに対応したキーデータが書き込まれている。【０１０６】
図７は、図６で示したメモリ回路の検索動作のタイミングを、第１クロック及び第２クロックの繋がりで示している。第１のクロックでは、キーデータ（ＫＤ）を制御回路１０５に入力し、分割された各マットに格納されたエントリアドレス（ＥＡ）を読み出し、読み出したエントリアドレスをラッチ回路１０３ａへラッチする動作までが実行される。続いて、第２クロックでは、ラッチ回路１０３ａのデータを比較器１０３ｂで比較し、一致が確認されたエントリアドレスを確認メモリマット１０４へ入力し、確認メモリマット１０４を参照して一致が確認されたエントリアドレスを、ＣＡＭの出力とする動作が実行される。【０１０７】
このように、図７では、本発明の実施例に係るＳＲＡＭ−ＣＡＭによるスイッチ又は検索の動作が示されている。図７に示されるように、本実施例では、一度の検索動作が、２クロックのマシンサイクルで完了する。これに対して、従来のＣＡＭは、一度の検索動作を行うにあたり、最低でも３クロックを必要とし、一般的には５から１０クロックを必要とする。すなわち、従来のＣＡＭは、全ビットを動作させるための電力供給が不可欠であるため、パイプライン的操作が必要になる。さらに、従来のＣＡＭは、エンコーダで１クロック消費するため、最低でも３クロックが必要となる。この点、本発明のＳＲＡＭ−ＣＡＭは、キーデータの入力方法を工夫することにより、図７で示したように、２クロックで検索動作を完了させることができる。つまり、本発明のＳＲＡＭ−ＣＡＭでは、従来のＣＡＭと比較して、エントリ数分の一（１／エントリ数）の電力で検索動作を実行できる。【０１０８】
図８は、本発明の実施例に係るＳＲＡＭ−ＣＡＭの書込動作を示している。図８では、４つのキーデータ（ＫＤ＝“２６９９”“３７７９”“１８５９”“１４４０”）のエントリアドレスを、検索メモリマット１０２に入力した場合の例を示している。なお、図８に示した例では、４つのキーデータのエントリアドレスをすべて入力した後であっても、検索メモリマット１０２にはまだ空白が存在している。このため、図８の例では、エントリ数以上のキーデータを登録することができる。これは、キーデータ長がエントリ数に対して十分大きいためである。図８の例では、キーデータ長がエントリ数の２倍以上となっている。【０１０９】
図８を用いて、検索メモリマット１０２にエントリアドレスの書き込む動作の例を説明する。図８の例では、検索メモリマット１０２を６つに分割している（検索メモリマットの分割数：Ｎ）。これにより、検索メモリマット１０２ｂは、６つの分割メモリ１０２ａ、１０２ｂ、１０２ｃ、１０２ｄ、１０２ｅ、１０２ｆにより構築される。また、図８の例では、検索メモリマットに書き込まれるキーデータは、１２ビットで表される。このような１２ビットのキーデータを、６つの分割メモリに書き込んでいく。このため、制御回路１０５は、入力されたキーデータを６つに分割する（キーデータの分割数：ｎ）。従って、分割されたキーデータのビット数は、それぞれ２ビットとなる。【０１１０】
また、図８に示されるように、検索メモリマット１０２を構成する複数の分割メモリ１０２ａ〜１０２ｆのそれぞれには、そのｙ軸方向に、複数のエントリアドレスを登録するための場所が割り当てられている。このように、各分割メモリ１０２ａ〜１０２ｆの記憶領域は、それぞれｙ軸方向に複数に分割されている。図８に示された例において、各分割メモリ１０２ａ〜１０２ｆは、エントリアドレスを登録する場所を４つずつ有している。また、図８に示されるように、エントリアドレスを登録する場所には、それぞれ、検索メモリマット１０２内のメモリ空間における番地を特定するための番地データが与えられている。図８に示された例において、番地データは２ビットの情報である。例えば、番地データは、“００”“０１”“１０”“１１”のバイナリデータで表される。図８に示されるように、エントリアドレスを登録する場所には、上から順に、“００”“０１”“１０”“１１”の番地データを与えればよい。【０１１１】
まず、入力データされたキーデータ（ＫＤ）である“２６９９”“３７７９”“１８５９”“１４４０”のそれぞれに、エントリアドレス（ＥＡ）を割り当てる。図８の例では、エントリアドレスは、それぞれ２ビットのデータである。すなわち、エントリアドレスは、“００”“０１”“１０”“１１”である。このように、一つのキーデータには、一つのエントリアドレスが対応付けられる。キーデータとエントリアドレスの対応関係は、確認メモリマット１０４に記憶することとしてもよいし、他のメモリに記憶することもできる。図８の左上には、エントリアドレス（ＥＡ）とキーデータ（ＫＤ）の対応関係が示されている。【０１１２】
まず、エントリアドレス“００”に書き込まれるべきデータとして入力されたキーデータは、“２６９９”である。このキーデータ“２６９９”は、バイナリで表わすと“１０  １０  １０  ００  １０  １１”となる。本実施例では、この６分割されたキーデータのバイナリ値を、分割された検索メモリマット１０２にアクセスするためのアドレスとして用いる。すなわち、制御回路１０５は、検索メモリマット１０２を構築する複数の分割メモリ１０２ａ〜１０２ｆのそれぞれに、キーデータ“２６９９”のエントリアドレスである“００”を書き込む。このように、本発明の半導体装置では、メモリマットに書き込まれるデータが通常のＣＡＭとは逆転した形になっている。【０１１３】
図８（ａ）に示されるように、キーデータ“２６９９”は、６分割されて、“１０”“１０”“１０”“００”“１０”“１１”として表わされている。制御回路１０５は、これらの分割キーデータをアドレスとして分割された分割メモリ１０２ａ〜１０２ｆを備えた検索メモリマット１０２に対して、エントリアドレス“００”を書き込む。具体的に説明すると、制御回路１０５は、６分割された入力データ“２６９９”のうち、１番目の分割キーデータ“１０”をアドレスとして、１番目の分割メモリ１０２ａ内の番地データ“１０”で特定される場所にアクセスし、この場所に、入力データ“２６９９”に対応するエントリアドレス“００”を書き込む。続いて、制御回路１０５は、入力データ“２６９９”の２番目の分割キーデータ“１０”については、この“１０”をアドレスとして、２番目の分割メモリ１０２ｂ内の番地データ“１０”で特定される場所にアクセスし、この場所に、エントリアドレス“００”を書き込む。また、制御回路１０５は、３番目の分割キーデータ“１０”をアドレスとして、３番目の分割メモリ１０２ｃ内の番地データ“１０”で特定される場所にアクセスし、この場所にエントリアドレス“００”を書き込む。また、制御回路１０５は、４番目の分割キーデータ“００”をアドレスとして、４番目の分割メモリ１０２ｄ内の番地データ“００”で特定される場所にアクセスし、この場所にエントリアドレス“００”を書き込む。また、制御回路１０５は、５番目の分割キーデータ“１０”をアドレスとして、５番目の分割メモリ１０２ｅ内の番地データ“１０”で特定される場所にアクセスし、この場所にエントリアドレス“００”を書き込む。同様に、制御回路１０５は、６番目の分割キーデータ“１１”をアドレスとして、６番目の分割メモリ１０２ｆ内の番地データ“１１”で特定される場所にアクセスし、この場所にエントリアドレス“００”を書き込む。【０１１４】
これにより、キーデータ“２６９９”で指定された検索メモリマット１０２の分割メモリに対して、入力されたキーデータ“２６９９”に対応するエントリアドレス“００”が書き込まれたことになる。このように、キーデータ“２６９９”は、“１０  １０  １０  ００  １０  １１”で表わされるので、それを２ビットずつに６分割する。そして、分割したキーデータのそれぞれを、６分割された検索メモリマットのｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いる。【０１１５】
上記のようにして、入力されたキーデータに対応するエントリアドレスを検索メモリマットに書き込んでおく。そして、検索メモリマットを検索するときには、キーデータを書き込んだときと同様の手順で、検索対象としてのキーデータを複数に分割する。例えば、検索対象としてのキーデータが、“２６９９”である場合、このバイナリデータを“１０  １０  １０  ００  １０  １１”の６つに分割する。これにより、１番目の分割キーデータ“１０”をアドレスとして検索メモリマット１０２のデータを読み出すと、エントリアドレスの“００”が読み出される。続いて、２番目の“１０”をアドレスとして検索メモリマット１０２のデータを読み出すと、エントリアドレスの“００”が読み出される。以下同様に、３番目〜６番目のデータ“１０”“００”“１０”“１１”をそれぞれアドレスとして検索メモリマット１０２をアクセスすると、上記と同様に検索メモリマット１０２からエントリアドレスの“００”が読み出される。なお、図８は分割メモリ１０２ａ〜１０２ｈの各々から、エントリアドレスが読み出された状態を示している。【０１１６】
すなわち、分割されたキーデータのいずれか一つで、エントリアドレス“００”を検索することが可能となる。なお、この意味において、本実施例で備えている確認メモリマット１０４は、あくまでも確認用であり、原理的には必須の構成要件ではない。【０１１７】
上記のように検索メモリマット１０２を複数の分割メモリによって構成するとともに、入力用及び検索用のキーデータを分割する処理を行うことで、従来のＣＡＭの問題点を解消できる。つまり、本発明によれば、従来のＣＡＭのように全ビットを活性にする必要がなくなるため、大電力を消費するという欠点を解消することができる。本発明の実施例においては、検索結果を出力するのに、ｙ軸のエントリ数分の一（１／エントリ数）の活性ビットで検索が可能となる。、このように、本発明は、ｙ軸のエントリ数分の一（１／エントリ数）のエントリアドレスのみ動作させることが可能となる。従って、本発明では、従来のＣＡＭの出力部で使用していた大面積を消費するナンド回路のツリーで構成される出力エンコーダが不要になる。【０１１８】
続いて、図８に戻り説明を続ける。上記と同様にして、次の入力データであるキーデータ“３７７９”の入力時の動作を説明する。この、キーデータ“３７７９”は、エントリアドレス“０１”に書き込まれるべきデータとして入力されるキーデータである。キーデータ“３７７９”をバイナリで表わすと“１１  １０  １１  ００  ００  １１”となる。このバイナリ値をアドレスとして、６分割された検索メモリマット１０２のｙ軸の記憶領域にアクセスし、検索メモリマット１０２に対して、キーデータ“３７７９”に対応するエントリアドレス“０１”を書き込む。【０１１９】
図８（ｂ）では、キーデータ“３７７９”が６分割されて、“１１”“１０”“１１”“００”“００”“１１”として表わされている。制御回路１０５は、これらの分割キーデータをアドレスとして、複数の分割メモリ１０２ａ〜１０２ｆを備えた検索メモリマット１０２に対して、エントリアドレス“０１”を書き込む。つまり、制御回路１０５は、入力キーデータ“３７７９”の分割キーデータのうち、最初の分割キーデータ“１１”をアドレスとして、最初の分割メモリ１０２ａ内の番地データ“１１”で特定される場所にアクセスし、この場所にキーデータ“３７７９”に対応するエントリアドレス“０１”を書き込む。続いて、制御回路１０５は、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂ内の番地データ“１０”で特定される場所にアクセスし、この場所にエントリアドレス“０１”を書き込む。ただし、２番目の分割メモリ１０２ｂにエントリアドレスを書き込む際、この２番目の分割メモリ１０２ｂの場所には、既に、キーデータ“２６９９”のエントリアドレス“００”が書き込まれている。このように、検索メモリマット１０２にエントリアドレスを書き込もうとする際に、衝突という現象が発生する場合もある。この衝突現象が発生したアドレスは、図８（ｂ）では、塗りつぶされた部分として表示されている。この塗りつぶされた部分のキーデータは、この後に行われる検索処理では、「配慮しない（don’t care）」ものとして処理される。【０１２０】
また、本発明では、上記の衝突が起こったことを記録するために、衝突フラグを設けることが好ましい。衝突フラグは、例えば２ビットのデータとすることができる。例えば、衝突フラグを２ビットとした場合、“００”の時は未書込みの初期状態を示し、“０１”は書込み済み状態を示し、“１０”は衝突状態を示し、“１１”はその他の状態を示すことができる。【０１２１】
図８（ｂ）では、続けて、３番目の分割キーデータ“１１”をアドレスとして、３番目の分割メモリ１０２ｃ内の番地データ“１０”で特定される場所にアクセスし、この場所にエントリアドレス“０１”を書き込む。同様に、４番目から６番目の分割キーデータ“００”“００”“１１”についても、これらをアドレスとして、それぞれ３番目から６番目の分割メモリ１０２ｄ〜１０２ｆにエントリアドレス“０１”を書き込む。ただし、４番目と６番目のアドレスについては、既に他のキーデータ“２６９９”の書き込みによって使用されているため、衝突フラグが書き込まれる。これにより、４番目と６番目のアドレスについては、この後で行なわれる検索処理では「配慮しない（don’t care）」として処理される。【０１２２】
以上の処理により、キーデータ“３７９９”で指定された検索メモリマット１０２に、エントリアドレス“０１”が書き込まれたことになる。ここまでで、２つのキーデータ“２６９９”“３７９９”を検索メモリマット１０２に書き込む処理が完了する。ただし、キーデータ“３７９９”については、２、４、６番目の分割キーデータの書き込み動作で衝突が発生し、後の検索処理で「配慮しない（don’t care）」処理を行なうことになる。このため、キーデータ“３７９９”に着目すると、６つの分割キーデータのうち、３つが検索対象として扱われないため、検索対象が６個から３個に減少したことになる。【０１２３】
制御回路１０５は、同様にして、３番目及び４番目のキーデータ“１８５９”及び“１４４０”について、上記したキーデータと同様の手順で、対応するエントリアドレス“１０”及び“１１”を検索メモリマット１０２に書き込む。図８（ｃ）に示されるように、キーデータ“１８５９”の書き込み処理では、新たに５番目の分割メモリ１０２ｅでアドレス衝突が生じている。また、図８（ｄ）に示されるように、キーデータ“１４４０”の書き込み処理、新たに１番目と３番目の分割メモリ１０２ａ、１０２ｃでアドレス衝突が生じている。【０１２４】
図８（ｅ）には、確認メモリマット（ＳＲＡＭ）１０４の書き込み状態を示している。この確認メモリマット１０４のメモリアドレス“００”には、第１の入力データであるキーデータ“２６９９”のバイナリデータ“１０  １０  １０  ００  １０  １１”が分割されて順次書き込まれている。また、確認メモリマット１０４のメモリアドレス“０１”には、第２の入力データであるキーデータ“３７７９”のバイナリデータ“１１  １０  １１  ００  ００  １１”が順次書き込まれている。以下同様に、確認メモリマット１０４のメモリアドレス“１０”には、第３の入力データであるキーデータ“１８５９”のバイナリデータが順次書き込まれ、メモリアドレス“１１”には、第４の入力データであるキーデータ
“１４４０”のバイナリデータが順次書き込まれている。【０１２５】
以上の処理が、検索メモリマット１０２に入力されたキーデータに対応するエントリアドレスを書き込む基本的な処理となる。
続いて、以下では、入力されたキーデータに基づいて検索メモリマット１０２内を検索し、このキーデータに対応するエントリアドレスを読み出す処理について説明する。【０１２６】
図９は、本発明の実施例のＳＲＡＭ−ＣＡＭの検索・読出動作の例を示した図である。図９は、書込処理時にエントリアドレスの衝突が生じた場合、つまり、図８に示した濃く網掛けされたエントリアドレスを「配慮しない（don’t care）」とした場合であっても、検索入力データに基づいて正しく検索可能であることを示している。【０１２７】
図９（ａ）は、検索データとして、キーデータ“２６９９”が入力された場合を示している。入力されたキーデータ“２６９９”は、バイナリデータで“１０  １０  １０  ００  １０  １１”と表わされる。また、このキーデータ“２６９９”のバイナリデータは、“１０”“１０”“１０”“００”“１０”“１１”のように６分割される。そして、これら複数の分割キーデータは、６分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いる。【０１２８】
まず、６つの分割キーデータのうち、最初の分割キーデータ“１０”をアドレスとして、検索メモリマット１０２内の番地データ“１０”で特定される場所にアクセスすると、最初の分割メモリ１０ａのうちの“１０”に対応した場所（アドレス）から、エントリアドレス“００”が読み出される。同様に、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂ内の番地データ“１０”で特定される場所にアクセスする。しかしながら、この２番目の分割メモリ１０２ｂの場所（アドレス）には、図８（ｂ）の第２の入力データ“３７９９”の書き込み時に、アドレスの衝突が生じている。このため、制御回路は、２番目の分割キーデータ“１０”に基づいた検索処理では、検索結果を「配慮しない（don’t care）」ものとして処理を行う。よって、検索メモリマット１０２の２番目の分割メモリ１０２ｂからの読み出しデータは、検索の対象外とされる。「配慮しない（don’t care）」処理を行うか否かは、メモリからデータを一旦読み出し、その読み出したデータに付与されているフラグ部分で判断すればよい。このように、厳密に言うと、制御回路１０５は、検索の対象外としたデータについてはエントリアドレスの出力は行なわないものの、メモリ回路からの読み出し動作は行う。【０１２９】
３番目の分割キーデータ“１０”、４番目の分割キーデータ“００”、及び６番目の分割キーデータ“１１”をアドレスとした検索メモリマット１０２へのアクセスについても、同様に、「配慮しない（don’t care）」処理によって、読み出されたデータが検索の対象外とされる。他方、５番目の分割キーデータ“１０”をアドレスとして、検索メモリマット１０２の５番目の分割メモリ１０２ｆ内の番地データ“１０”で特定される場所にアクセスすると、衝突フラグが発生していないため、エントリアドレス“００”を読み出すことができる。図９（ａ）の右側の図は、キーデータ“２６９９”に基づいて、検索メモリマット１０２から読み出されたエントリアドレス（ＥＡ）を並べて表示したものである。【０１３０】
図９（ａ）で示されるように、検索データとしてのキーデータ“２６９９”に基づいて検索メモリマット１０２から読み出されるエントリアドレスのうち、実際に検索に使用されるエントリアドレスは、１番目の分割メモリ１０５ａと５番目の分割メモリ１０５ｅに書き込まれていたエントリアドレス“００”ということになる。【０１３１】
ここで、エントリアドレス“００”に基づいて、図８（ｅ）に示す確認メモリマット１０４からキーデータの値を読み出すと、このエントリアドレス“００”に対応するキーデータは、“１０  １０  １０  ００  １０  １１”であることがわかる。この、“１０  １０  １０  ００  １０  １１”は、十進法表すと“２６９９”である。これにより、読出処理で読み出されたエントリアドレス“００”が、検索データとして入力されたキーデータ“２６９９”のものであることが分かる。つまり、本発明では、「配慮しない（don’t care）」処理を適用しながらも、検索メモリマット１０２からエントリアドレスを読み出し、このエントリアドレスを用いて、確認メモリマット１０４にアクセスする。そこで、本発明は、確認メモリマット１０４からの出力データであるキーデータと、検索対象として入力されたキーデータを比較し、一致することを確認して、このエントリアドレスを出力する。【０１３２】
図９（ｂ）は、検索入力データのキーデータとして、“３７７９”が入力された場合を示している。入力されたキーデータ“３７７９”は、バイナリデータで“１１  １０  １１  ００  ００  １１”で表わされる。このバイナリデータは、“１１”“１０”“１１”“００”“００”“１１”のように６分割され、検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“１１”をアドレスとして、最初の分割メモリ１０２ａからデータを読み出すと、エントリアドレス“０１”が読み出される。２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂからデータを読み出すが、このデータは、入力データ“３７７９”の入力時にアドレス衝突が生じているため、「配慮しない（don’t care）」ものとして、検索の対象外となる。【０１３３】
３番目の分割キーデータ“１１”をアドレスとして検索メモリマット１０２の分割メモリ１０２ｃからデータを読み出すと、エントリアドレス“０１”が読み出される。また、４番目の分割キーデータ“００”、５番目の分割キーデータ“００”、６番目の分割キーデータ“１１”をそれぞれアドレスとした検索メモリマット１０２へのアクセスは、衝突が生じているために、「配慮しない（don’t care）」処理によって、検索の対象外となる。【０１３４】
図９（ｂ）に示されるように、検索データとしてのキーデータ“３７７９”に基づいて検索メモリマット１０２から読み出される値は、最初の分割メモリ１０２ａ３番目の分割メモリ１０２ｃに書き込まれていたエントリアドレス“０１”ということになる。【０１３５】
ここで、エントリアドレス“０１”により、図８（ｅ）に示した確認メモリマット１０４に格納されているキーデータの値を読み出すと、“１１  １０  １１  ００  ００  １１”となり、入力データとしてキーデータ“３７７９”と一致することが分かる。つまり、「配慮しない（don’t care）」処理を適用しつつも、検索メモリマット１０２から読み出したデータから読み出されるエントリアドレスを用いて、確認メモリマット１０４にアクセスする。そして、制御回路１０５は、確認メモリマット１０４からの出力データとしてのキーデータと、検索対象として入力されたキーデータと比較し、一致することを確認した上で出力する。【０１３６】
次に、図９（ｃ）には、検索メモリマット１０２に書き込まれていないキーデータ“１５０４”が、検索対象のキーデータとして入力された場合の処理が示されている。
まず、検索データとしてキーデータ“１５０４”が入力されると、“１５０４”のバイナリデータは、“０１”“０１”“１１”“１０”“００”“００”のように６分割される。この６つの分割キーデータは、それぞれ、検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いられる。最初の分割キーデータ“０１”をアドレスとして、最初の分割メモリ１０２ａからデータを読み出すと、書込処理時にアドレス衝突しているため、「配慮しない（don’t care）」処理が行なわれる。次いで、２番目の分割キーデータ“０１”をアドレスとして、２番目の分割メモリ１０２ｂからデータを読み出すと、エントリアドレス“１１”が読み出される。次に、３番目の分割キーデータ“１１”をアドレスとして、３番目の分割メモリ１０２ｃからデータを読み出すと、エントリアドレス“０１”が読み出される。しかし、ここで読み出されたエントリアドレス“０１”は、先に読み出されたエントリアドレス“１１”と異なる値となっている。すなわち、キーデータ“１５０４”に基づいて読み出されたエントリアドレスには、“１１”と“０１”において不一致が発生している。そうすると、検索メモリマット１０２には、未だキーデータ“１５０４”が記録されていないことがわかる。従って、制御回路１０は、３番目の分割キーデータを処理した段階で、「一致データ無し」と判定することができる。【０１３７】
このように、検索メモリマット１０２から読み出されたエントリアドレスに不一致が発生した場合は、上述した確認メモリマット１０４を用いた確認処理が不要となる。なお、本実施例には示していないが、同じ分割メモリに複数のアドレス衝突があり「配慮しない（don’t care）」処理が行われる場合、メモリから読み出されたエントリアドレスの全てが一致していても、検索データとして入力されたキーデータと、読み出し処理で出力されたエントリアドレスに対応するキーデータとが、一致しないという問題が発生することもあり得る。ただし、このような問題は、確認メモリマット１０４を参照することで解消できる。つまり、検索メモリマット１０２から読み出されたエントリアドレスに基いて、確認メモリマット１０４にアクセスし、検索対象としてのキーデータと、確認メモリマット１０４から出力されたキーデータとが一致しない場合には、「一致データ無し」と判定することができる。【０１３８】
図１０は、エントリ数分だけキーデータを書き込んだ時の検索不一致（ＮＧ）発生数を示したグラフである。つまり、図１０のグラフでは、「配慮しない（don’t care）」という処理が、検索メモリマット１０２内に複数発生し、誤動作する確率を乱数表からシミュレーションした例を示している。図１０（ａ）は、キーデータが４ビット以上で、検索メモリマットのエントリ数が４の場合を示している。また、図１０（ｂ）は、キーデータが８ビット以上で、検索メモリマットのエントリ数が８の場合を示している。図１０（ａ）に示されたシミュレーション結果を見ると、キーデータ長を８ビット以上に設定することで、検索不一致（ＮＧ）の発生数が限りなくゼロに近づくことがわかる。同様に、図１０（ｂ）に示されたシミュレーション結果を見ると、キーデータ長を１６ビット以上に設定することで、検索不一致（ＮＧ）の発生数が限りなくゼロに近づくことがわかる。つまり、これらのシミュレーション結果をみると、キーデータのビット数を、検索メモリマットのエントリ数の２倍以上とすることで、半導体装置が誤動作して検索不一致（ＮＧ）を発生させることを、ほぼ確実に防止することができることがわかる。よって、キーデータのビット数は、検索メモリマットのエントリ数の２倍以上であることが好ましい。【０１３９】
上述したように、本発明の半導体装置は、検索メモリマット１０２を構成する複数の分割メモリに対して、入力データを分割した分割キーデータをアドレスにして、その入力データのエントリアドレスを書き込む。分割キーデータは入力データを複数に分割したものであるため、これらの分割キーデータを検索メモリマット１０２に書き込む際には、衝突状態が発生する可能性がある。
このような複数の分割メモリへのエントリアドレスの書き込み操作を「第１操作」とする。なお、第１操作の処理工程の例は、図２にも示されている。【０１４０】
以上の第１操作は、検索メモリマット内のスイッチング操作または検索処理を行うための基本情報データを作成する操作となる。
この第１操作では、同じアドレスに複数のエントリアドレスが書き込まれる場合であっても、衝突フラグを設定して、そのまま入力を進める。そして、検索メモリマット内を検索する際に、衝突フラグが設定されているアドレスについては、「配慮しない（don’t care）」として処理する。このように、本発明では、分割メモリにエントリアドレスを書き込むときに発生するアドレス衝突の問題を、検索動作を行うときに解決している。【０１４１】
ここで、本実施例で説明したように、入力されるキーデータ（ＫＤ）のビット長がエントリアドレス（ＥＡ）の数に対して十分大きい場合、例えば２倍以上ある場合について考える。
例えば、キーデータのビット長が、エントリアドレスの大きさに対して小さい場合は、キーデータを分割するときに、分割部分の最初のデータの一部が次の分割キーデータに重なるようにキーデータを分割することにより、分割部分のデータの総和を元のキーデータビット長より大きくすることができる。このキーデータの拡張により、キーデータのビット長が、エントリアドレスの大きさに対して小さい場合でもキーデータのビット長を、エントリアドレスの大きさに対して十分大きくすることができる。ただし、キーデータの拡張は、分割キーデータ同士の完全な重なりが生じないようにする必要がある。【０１４２】
また、後に説明する検索動作では、検索結果として出力されるデータが正しいものであることを確認できるようにすることが、データの信頼度を確保するために重要である。このために、本発明の実施例では、メモリ空間の一部を確認メモリマット１０４に割り当てる。この確認メモリマット１０４は、ｙ軸方向にエントリアドレス（ＥＡ）を記憶する領域を有し、ｘ軸方向に、エントリアドレスに対応付けてキーデータ（ＫＤ）の記憶する領域を有している。そして、本発明の実施例では、入力されたキーデータを検索メモリマット１０２に書き込むと同時に、この確認メモリマット１０４にも、入力されたキーデータとエントリアドレスの書き込みを行う。このようにして、確認メモリマット１０４に、確認用の基本情報データを用意する。このような確認メモリマット１０４に対するキーデータの書込操作を、「第２操作」とする。なお、第１操作の処理工程の例は、図２にも示されている。【０１４３】
その後、制御回路１０５は、ユーザからの要求に応じて、入力されたキーデータに基づいて検索メモリマット１０２内を検索し、このキーデータに対応するエントリアドレスを読み出す処理を行う。エントリアドレスの読出処理では、制御回路１０５が、検索データとして入力されたキーデータを、上述したキーデータ（ＫＤ）の分割方法に従って分割し、分割キーデータで検索メモリマットを活性化させて、該当分割キーデータに基づいて読みだしたエントリアドレス（ＥＡ）を出力する。この検索処理を、「第３操作」とする。ただし、上述した書込処理（第１操作）でアドレスの衝突を記録したエントリアドレスについては、読出処理において「配慮しない（don’t care）」ものとして扱い、エントリアドレスは出力しない。【０１４４】
また、制御回路１０５は、複数の分割キーデータに基づいて１つ以上のエントリアドレスを読み出し、その読み出したエントリアドレスの全てが一致したときには、そのエントリアドレスを使用して、確認用基本情報データが格納された確認メモリマット１０４を参照する。すなわち、制御回路１０５は、検索処理で読み出したエントリアドレス、及び検索対象として入力されたキーデータを、確認メモリマット１０４のｙ軸に記憶されているエントリアドレス、及びｘ軸に記憶されているキーデータと比較する。そして、制御回路１０５は、エントリアドレスとキーデータが一致したことを確認して、一つのエントリアドレスを出力する。このような確認メモリマット１０４を参照する操作を、「第４操作」とする。なお、第４操作の処理工程の例は、図４にも示されている。なお、上記第３操作及び第３操作で出力されるエントリアドレスが、スイッチ接続または検索のアドレスとなる。【０１４５】
以上、本発明は、第１操作〜第４操作までの４つの操作を可能とするメモリ回路構成、すなわちこれらの論理方式構成を、図６に示したＳＲＡＭ−ＣＡＭのメモリ回路で実現する。
【実施例２】
【０１４６】
次に、本発明の実施例として、「配慮しない（don’t care）」という処理が複数回発生しても、半導体装置が誤動作する確率を減らす他の方法について説明する。
まず最初にこの実施例の概要を説明すると、この実施例では、検索メモリマット１０２として、ｍ個（ｍは２以上の自然数）の定義ブロックを用意する。また、検索メモリマット１０２のエントリ数をある任意の大きさに定めたときに、１つのブロックに対して、エントリアドレスを分割し、下位からエントリ数の１／ｍまで入力することを決める。そして、１つのブロックに対しては、一定数以上のエントリアドレスの入力を打ち切り、別のメモリブロックに移ってその操作を継続し、大きな基本情報データを複数のメモリブロックに格納する。この方法においては、キーデータ長がエントリ数の１／８ビット以上あることを条件とする。残り１／ｍより上位のエントリアドレスについても、下位アドレスから順番に最初のメモリブロックと同様に入力する。本実施例においては、各メモリブロックの間の操作の切り替え等を、セレクタによりこれを制御することができる。これにより、上位下位検索アドレスが合成され、前記確認用検索マットのアドレス軸としてのｙ軸に入力されて、実施例１で説明した第１から第４操作を行なうことができる。【０１４７】
図１１は、検索メモリマット１０２のエントリ数を２５６とした場合の実施例を示す。
図１１に示されるように、検索メモリマット１０２は、２つのメモリマットで構成されている。ここで、ｙ軸方向のエントリの大きさを２５６としたときに、０から１２７エントリまでを、第１の検索メモリマット１０２に入力し、１２８から２５５エントリまでを第２の検索メモリマット１０２に入力する。これにより、ほぼ完全に誤動作発生の確率を実用レベル以下に維持することが可能となる。この検索メモリマット１０２を構成する２つのメモリマット間の切り替えは、ヘッダに付加されている第１フラグＦ１を使用して行えばよい。実際の検索メモリマット１０２には、フラグとして２ビットが必要なので、２５６エントリ×３２ビットキーデータの場合、検索メモリマットとして２５６ワード×１０ビットのＳＲＡＭが８個と、確認メモリマット１０４として２５６ワード×３２ビットのＳＲＡＭが１個で構成することになる。【０１４８】
以上説明したように、検索メモリマット１０２への書込み可能なエントリ数を１／ｍ（ｍは２以上の自然数）に制限することで誤動作発生の確率を減らすことができる。図１２には、ｍが２の場合、即ち、メモリに書き込むエントリ数を１／２に制限した場合の誤動作発生の確率のシミュレーション結果が示されている。図１２に示されるように、エントリ幅（エントリ数）が２５６ワード（８ビット）であっても、確率的にはキーデータ長が３２ビットで誤動作がなくなる。なお、図１２に示したシミュレーションでは、ＣＡＭの書き込みデータとしてＥＸＣＥＬの乱数関数を適用した。【０１４９】
以上は、誤動作を防ぐ方法の例について説明したが、本発明の他の実施例としては、未書き込み領域をなくして、検索メモリマット１０２に対して効率的にエントリアドレスを登録する方法もある。
書き込むことができるエントリアドレスである登録エントリアドレスの数は、ＳＲＡＭ単位で見ると、登録エントリアドレスが全てユニークである場合に限り、未書き込み領域がなくなる。ユニークとは、ｎワード×ｎビット構成のＳＲＡＭを想定したとき、ＳＲＡＭのアドレスとＳＲＡＭの内容が同じ場合と、この状態でＳＲＡＭの内容またはアドレスを任意に入れ替えた場合の２つである。【０１５０】
しかし、図１３に示すように、複数個所でＳＲＡＭの内容、またはアドレスの重なりが生じると、その分、未書き込み領域が増える。すなわち、ＳＲＡＭの内容が同じ場合、例えば「００…００」番地のデータが「００…０１」番地のデータと同じ場合、「００…００」番地の内容が右図のように未書き込み領域になる。つまり、ユニークでないデータが増えると未書き込み領域が増える（登録しやすくなる）という結果になる。これを利用して、書き込み数を増やすことができる。これを説明している理由は、たとえばＣＡＭの検索の場合、ヘッダ等のように同じデータを何度も使用する傾向がある。この結果、個々のＳＲＡＭで見ると未書込み領域が多くなる傾向があるためである。【０１５１】
ここで、本実施例をその効果の面から纏める。
まず、ＳＲＡＭを使用しているので大規模化が容易で一般的なＣＡＭに比べエントリ数分の一（１／エントリ数）の大幅な低電力化ができる。【０１５２】
次に、書込み動作が終了した後、エントリアドレスを書き込んだ分割メモリ（ＳＲＡＭ）が１個でも残れば登録したエントリアドレスを正常に検索できる。
分割メモリ（ＳＲＡＭ）の中に検索対象外のアドレスが複数個存在しても、確認メモリマット（ＳＲＡＭ）を用いることで正しい検索が可能になる。本実施例では、ＳＲＡＭを用いて説明したが、確認メモリマットの内容は、入力データをアドレスに従って書き込めるデバイスであれば良く、レジスタ等で実現することもできる。【０１５３】
本実施例によれば、キーデータのエントリ登録時にアドレス衝突が生じたとき、「配慮しない（don’t care）」処理を行なうことによって、検索の対象外となる検索対象外を導入したことにより未書込み領域が増加した。この未書き込み領域を利用することでエントリアドレスを拡張することが可能である。【０１５４】
また、本実施例によれば、キーデータのエントリ登録時に、検索メモリマット１０２の全分割メモリ（ＳＲＡＭ）が検索対象外となる場合はキーデータのエントリ登録ができないが、この状態はＣＡＭを構成するＳＲＡＭのエリアがオーバーフローしていることを表しており、対応策としては検索メモリマットを複数個準備し、この状態が発生したら切り替えることで解決できる。
【実施例３】
【０１５５】
次に、実施例３では、実施例１及び実施例２で説明した半導体装置について、さらなる機能拡張を行う手順について説明する。
実施例１や実施例２においては、誤動作防止のため、エントリアドレスの書き込み処理を、分割メモリのアドレスの衝突により誤動作しない領域に制限するようにしている。これに加え、入力可能なエントリアドレスの数を増やすことによっても、さらに誤動作を防止することが可能となる。【０１５６】
例えば、図１４に示されるように、エントリアドレス（ＥＡ）を２ビット（図１４（ａ））から、３ビット（図１４（ｂ））に増やすこともできる。これにより、確認メモリマット１０４のエントリアドレスの数を増やすことができる。図１４に示されるように、エントリアドレスを３ビットする場合には、拡張フラグ（ＦＲＧ）を設定して、通常のエントリアドレス（通常アドレス）と、拡張したエントリアドレス（拡張アドレス）を識別するようにすればよい。例えば、図１４の例では、エントリアドレスの３ビット目が“０”である場合には、通常アドレスであることを示し、エントリアドレスの３ビット目が“１”である場合には、拡張アドレスであることを示している。【０１５７】
図１５及び図１６は、エントリアドレス（ＥＡ）を３ビットとした場合において、データを書き込む処理の例と、データを検索する処理の例を示している。
図１５は、書き込み動作の例を示したものである。図１５に示されるように、エントリアドレス（ＥＡ）を３ビットで表わすことで、エントリアドレス（ＥＡ）の数が８個となる。例えば、図１５の例では、図８に示した４つのキーデータ“２６９９”“３７７９”“１８５９”“１４４０”の他に、５つめのキーデータ“４０８”を、実施例１で説明した第１操作の手順に従って、検索メモリマット１００２と確認メモリマット１００４のそれぞれに書き込むこととしている。【０１５８】
キーデータ“４０８”のバイナリデータは“００  ０１  １０  ０１  １０  ００”であるため、検索メモリマット１００２に対しては、これらをアドレスとして書き込みを行なう。すると、最初の分割キーデータ“００”については、メモリアドレス“００”に対して、３ビットのエントリアドレス“００１”を書き込むことになる。図１５では、“００”と記載されているが、実際には、“００１”を書き込む。【０１５９】
エントリアドレス（ＥＡ）が２ビットから３ビットなったことにより、例えば、増加した１ビットが“０”のときには、エントリアドレスが２ビットのときと同じ処理を行い、増加した１ビットが“１”のときは、拡張アドレスであることの識別に使用するものとする。具体的には、キーデータ“４０８”の２番目の分割キーデータ“０１”をアドレスとすると、既に書き込まれている“１４４０”との間でアドレス衝突を起すため（図８（ｄ）参照）「配慮しない（don’t care）」処理を行う。キーデータ“４０８”の３番目の分割キーデータ“１０”をアドレスとすると、既にこのアドレスは“１４４０”の書き込み処理の際に「配慮しない（don’t care）」処理が行なわれているため、書き込みを行なわず処理を終了する。同様に４番目の分割キーデータ“０１”では、メモリアドレスに“００１”を書き込む。図１５では、“００”と記載されているが、実際には“００１”を書き込む。５、６番目の分割キーデータの“１０”“００”では、それぞれのメモリアドレスで「配慮しない（don’t care）」処理を行なう。【０１６０】
検索メモリマット１００２に対しては、エントリアドレスの３ビットのうち、上位２ビットを用いて書き込み動作を行なうことで、実施例１と同様に書き込み動作を行うことができる。【０１６１】
一方、確認メモリマット１００４に対しては、３ビットによりエントリ数が２倍に増えていることから、３ビットの下位１ビットが図１５のように増える。つまり、エントリアドレス“００１”に対して、入力データ“００  ０１  １０  ０１  １０  ００”を書き込む。【０１６２】
次に、図１６において、図１５で書き込まれた拡張されたエントリアドレスを用いた検索例を示す。
図１６（ａ）に示されるように、検索データとしてキーデータ“２６９９”が入力された場合、分割された検索メモリマット１００４の最初の分割メモリ（ＳＲＡＭ）から“０００”が読み出される。２番目から６番目の分割キーデータ対応したメモリアドレスに対しては、「配慮しない（don’t care）」処理が行なわれているため、読み出されたデータは検索対象外になる。そして、“０００”をアドレスとして確認メモリマット１００４にアクセスすると“１０  １０  １０  ００  １０  １１”が読み出される。このように、検索メモリマット１０２の確認結果が、入力データ“２６９９”と一致することが分かる。【０１６３】
次に、図１６（ｂ）に示されるように、検索データとしてキーデータ“４０８”が入力された場合、分割された検索メモリマット１００２の１番目と４番目から“００１”のエントリアドレスが読み出され、残りの検索メモリマット１００２からは、アクセスされたデータが何れも「配慮しない（don’t care）」処理が行なわれているため、読み出されたデータは検索対象外になる。読み出されたエントリアドレス“００１”で確認メモリマット１００４にアクセスすると、“００  ０１  １０  ０１  １０  ００”と入力データ“４０８”と一致することが分かる。【０１６４】
次に、キーワード検索の基本となるマスク操作の方法について、図１７を用いて説明する。図１７（ａ）は、キーデータ“１４４０”で、分割された検索メモリマット１００２の４番目から６番目をマスクして検索した様子を示している。この場合、図１７（ａ）の状態において、検索メモリマット１００２からは“１１”が出力され、確認メモリマット１００４にメモリアドレス“１１”でアクセスすると、検索メモリマット１００２からの出力と入力データとしてのキーデータとが一致することが分かる。【０１６５】
一方、図１７（ｂ）は、入力データ“１４４０”に対して、２番目、４番目、及び６番目のメモリマットをマスクして検索した例を示している。この場合、１番目、３番目、及び５番目のエントリが「配慮しない（don’t care）」とされており、２番目、４番目、及び６番目はマスクされているため、検索メモリマット１００２の出力はなくなってしまう。つまり、この場合では、検索データなしと判断される。【０１６６】
次に、本発明の実施例におけるマルチヒットの定義、及び検索エンジンへの拡張について説明する。
実施例１や実施例２と同様に、ヘッダに第１コントロールビットとしての第１フラグＦ１のビットと、第２、第３、第４・・・フラグビットとしての関連アドレスＲＦのツリーを表すビットを追加して、第１操作から第３操作を完了する。第１フラグＦ１のビットが活性でないときは、実施例１や実施例２と同様に操作を行う単一ヒットモードとなる。他方、第１フラグＦ１が活性である場合は、マルチヒットへの対応とし、図１８に示すように、要求されたキーデータを第３操作で処理し、エントリアドレスを出力した後に、これをバッファメモリＢＳＲＡＭに一時貯蔵する。この場合第４操作を中止して、第２クロックで、第３操作により出力されたエントリアドレスの関連アドレスツリーの上位アドレスをキャッシュメモリマットでヒットし、データを抽出して、そのアドレスと共に一時貯蔵をする。次のクロックで、関連アドレスツリーの第２番目にあるアドレスを、前記キャッシュメモリマットで第２該当データをヒットし、該当アドレスとデータを抽出する。これを関連フラグツリーにおける優先順位下位まで続ける。第１関連アドレスに戻ったときに、フラグが不活性になる操作を行う。これはフィードバックループであるため、この繰り返しの間（フラグの活性な間）は新規検索を中止する。新しい第４操作で一時貯蔵し、関連付けた複数のアドレスを出力する。必要に応じてデータの付加を行う。【０１６７】
これにより、検索エンジンの重要な役目である複数の類似検索が可能となる。図６において、フラグＦ１が存在する場合、先ほどの入力エントリ数の１／２入力もフラグが必要であったが、ビット数の追加を行い、フラグ機能を追加してデータに関連付けてフラグＲＦを用意する。このフラグは、いくつかに分類し、ツリー検索が可能なフラグとなる。このセット情報が近接キャッシュメモリマットに書き込みされているため、サブルーチン操作を開始し、複数の検索アドレスおよびデータを出力する。【０１６８】
ＣＡＭをマルチヒットとして利用できるようにするには、複数のキーデータを１つのエントリに対応させる必要がある。現状では、１つのエントリアドレスに複数のキーデータを対応させようとすると、検索メモリマット１０２の出力が全て検索無視状態になり、確認メモリマット１０４の読出しができなくなる。この問題を次の方法により解決する。【０１６９】
複数のキーデータを1つのエントリアドレスに対応させる場合は、フラグを“１１”に設定する。“１１”フラグのときは、確認メモリマット１０４を使用せずに、検索無視の部分を除いて、読み出したエントリアドレスの全てが一致することを確認したら、そのデータをエントリアドレスと判定する。
これは、エントリアドレスでアクセスするキャッシュメモリのデータの一部のデータで、検索の動作を制御できるようになることを意味する。【０１７０】
それを説明した図が、図１９である。図１９は、一般的なＣＡＭのマルチヒットとの違いを示している。一般的なＣＡＭのマルチヒットでは、図１９（ａ）に示すように、一つのキーデータに対して複数のエントリアドレスを出力する。一方、本実施例のＳＲＡＭ−ＣＡＭのマルチヒットでは、図１９（ｂ）に示すように、複数のキーデータの入力に対し、一つのエントリアドレスを出力する。【０１７１】
本発明のＳＲＡＭ−ＣＡＭにおいて、一般的なＣＡＭと類似なマルチヒットを可能とする方法を図２０に記述する。一般的なＣＡＭでは、図２０（ａ）に示すように、一つのキーデータ“Ａ”に対して、複数のエントリアドレス“ｍ”“ｎ”“ｐ”がヒットしている。これに対し、本実施例のＳＲＡＭ−ＣＡＭでは、図２０（ｂ）に示すように、一つのキーデータ“Ａ”に対して、エントリアドレス“ｍ”“ｎ”“ｐ”が対応している。データ０の部分は、フラグとして、マルチヒットがｏｎの場合に０若しくは１のデータを用い、マルチヒットがｏｆｆの場合に０若しくは１のデータを用いる。データ１の部分が０になるまでフラグを切替え、０となったところで、キーデータの入力停止を解除する。【０１７２】
このようにすることで、エントリアドレスでアクセスするＳＲＡＭを複数個設け、データ０で複数のＳＲＡＭを制御することができる。また、マルチポートのＳＲＡＭを使用することでマルチヒットデータの出力を高速化させることができる。【０１７３】
マルチヒットのクロックタイミングを示すと図２１のようになる。システム動作に対してＳＲＡＭの動作に余裕がある場合、ＳＲＡＭを高速化させてマルチポート的な動作をさせることができる。この図２１は、４ポート動作の例を示している。システムクロック、ＲＡＭ０クロック、ＲＡＭ１クロック、ＲＡＭ２クロック、ＲＡＭ３クロックは、４倍速クロックにより、カウンターと簡単な論理回路で容易に生成可能である。なお、システム出力をＲＡＭ３クロックのインバート信号でラッチすると、システム出力と同じタイミングになる。また、通常の動作は、システムクロックとＲＡＭ０クロックで動作させる。マルチヒットのときは、ＲＡＭ０〜ＲＡＭ３のＯＲ信号（４倍速クロック）でエントリ先のＳＲＡＭを動作させ、ＳＲＡＭのラッチ出力をＲＡＭ３クロックのインバート信号でラッチすると、システム出力と同一タイミングの４つの並列出力を得ることができる。【０１７４】
以上、スイッチルータに使用可能なＣＡＭ的動作と検索エンジンを実現する方式を述べたが、この構成はＬＵＴ（Look Up Table）をベースとした機能にも拡張可能である。そのためには、検索メモリマットのマット上下に小規模のスイッチなどの制御回路を付けることとすればよい。【０１７５】
エントリアドレスのメモリへの入力で重なりを「配慮しない（don’t care）」とする実施例１、２に記載の方法の限界は、メモリ列全てが重なる前までである。この問題は、ランダムデータよりデータの隔たりがあると起り易い。そのときの対応策は、エントリアドレスに付随しているフラグの読み替えを行なうことである。【０１７６】
データ書込み時に書き込み済みのアドレスが選択されると、フラグを“１０”として書込みを行なわず、検索時に“１０”のフラグの入力データ情報を無視する。しかし、データの隔たりにより、検索時に全メモリマットのフラグが“１０”になり検索不能に陥ることがある。これを回避するためには、検索時に全入力データのフラグが“１０”であってもＳＲＡＭの読み出し情報が全て一致する場合に限り、そのデータを検索データとしてのキーデータとして扱うようにする。【０１７７】
論理回路への適用方法は、均質回路群単位（Unified cluster circuit）の概念形成であり、飛躍的応用範囲が広がることとなる。検索メモリマットにＬＵＴ制御回路（ＬＵＴＣ）が付加された状態を図２２に示す。すなわち、図２２は、図６の検索メモリマット１０２の入力部と論理出力部にスイッチ回路網を付加された構成を示している。【０１７８】
この図２２において、ＣＴＳは制御信号、ＬＯは論理出力を示す。検索メモリマット１０２は、ＬＵＴ（Look Up Table）１０２’として利用する。四則演算およびシフトの元になる加算器の例を示すと図２３のようになる。四則演算に必要な演算ステップがスイッチ回路で構成されている。すなわち、図２３は、複数のＬＴＵを持つ場合を示しており、１６ビット加算器選択時の例を示している。ＳＷは２つの入力を切り替えるスイッチ回路、ｂ＿ＤＶはビット分配回路、Ｃはコネクタで、オン／オフ設定可能でオフの時に強制的に０にする回路である。なお、ＬＵＴの周辺回路を複数のＬＵＴに対応できるようにすることで、ダイナミックに機能が変更できるようになる。また、複数の回路ブロックと協調することで処理効率を上げ、システムの面積を縮小することができる。また、コネクタＣの出力を０に設定すると、８ビット加算器×２となる。【０１７９】
さらに、ビット数を示した全体構成例を図２４に示す。このように、検索メモリマットが、付加スイッチ回路（ＬＵＴ制御回路）により論理動作を行うことができるブロックとなる。
図２４において、２５６エントリ×３２キーのＣＡＭアレイの単位部分の構成を示すと、次のようになる。すなわち、（１）ＣＡＭ本体は、マルチヒット機能までのＣＡＭ機能を実現するものとなる。（２）ＬＵＴは、（ａ）２５６ワード×１０ビットのＳＲＡＭが８個、（ｂ）２５６ワード×３２ビットのＳＲＡＭが１個、（ｃ）２５６ワード×４８ビットのＳＲＡＭが１個の構成となる。このうち、（ｂ）と（ｃ）は、２５６ワード×１０ビットのＳＲＡＭが９個でもよい。このほうが、ＬＵＴとしての利用効率が高くなる。なお、このようにすれば、面積効率の良い論理回路あるいはメモリとして使用できる均質回路群単位が実現できる。図２４に示したブロックをアレイ状に配置するとプログラマブル論理ブロックあるいはメモリブロックとして使用できる。概念的には、ＣＡＭ機能＋プログラマブル論理ブロックあるいはメモリブロックと等価な形に構成することができる。なお、ＭＢはマルチバスを示す。【０１８０】
このようなメモリと論理が同じマットで構成できる均質ブロック配列は、必要処理ブロックを隣接に配置することが可能になるため、バスネックを解消でき、低消費電力で高速動作を確保できる。また、このような均質ブロック配列により、あらゆるプロセッシングが可能となる。【０１８１】
図２５のうち、図２５（ａ）は、スイッチまたは検索の動作を説明しており、図２５（ｂ）は、論理演算の手順（図２５（ｂ））を説明している。図２５では、システム全体を制御する回路からの指示で切り替えることで、あらゆる処理が可能となる構成を示している。なお、図２５（ｂ）において、ＣＢは近接接続バスを示し、ＬＩは論理入力を示し、ＬＯは論理出力を示している。また、一点鎖線で囲まれた部分は、サブルーチンを示し、１ループ／クロックである。【０１８２】
本実施例では、必要データ群を隣接して配置するため、隣接と１クロックで並列演算を行うことが可能である。それを図２５では、第１クロックというタイミングで表示している。これにより、可能な限り隣接状態で構成することができる。図２５（ａ）は、スイッチまたは検索の場合を示し、図２５（ｂ）は、論理演算の場合を示す。すなわち、これを拡張するとブロック単位でも可能であり、システムとしてダイナミックリコンフィグレーション（Dynamic reconfiguration）概念が生まれる（図２６）。すなわち４×４ブロック配列の例を示すと図２６のようになり、あらゆる構成が瞬時に切り替えられることが容易に判明する。これこそ脳型コンピュータの端緒であることがわかる。【０１８３】
図２６は、論理演算機能を加味したＳＲＡＭ_ＣＡＭアレイの構成を示す図である。図２６に示した例は、ダイナミックリコンフィギュレーション（Dynamic reconfiguration）メモリプロックを４×４の１６個並べた場合の構成例である。図２６に示した例では、すべてがＳＲＡＭで構成されたブロックであり、さらに機能切り替えレジスタを内蔵することで、どのような形にも瞬時に切り替えることができる。ローカルバス（ＬＢ）は、図２５の隣接バス（ＣＢ）と書かれた内容であり、これにより、隣接間の情報や処理の共有化が１クロックででき、高速化と低消費電力が達成できる。グローバルバス（ＧＢ）は、ダイナミックリコンフィギュレーション時のブロックシフト時に主に使用され、ブロックデータ群のバースト転送が主たる役目である。【０１８４】
図２６は、ＳＲＡＭ−ＣＡＭアレイを示したものであり、ＧＢはグローバルバス、ＬＢはローカルバスである。ブロックＡ，Ｄ，Ｅ，Ｈ，Ｉ，Ｌ，Ｍ，ＰはＣＡＭ機能ブロック、その他はＬＵＴ機能ブロックである。各ブロックは、機能指定をプログラムで設定する。これにより、ＣＡＭ機能ブロックで検索し、ＬＵＴ機能ブロックで各種演算処理を実行する。２つのブロックを破線で囲ってある部分は、２ブロックで処理単位ブロックを構成することを意味する。また、グローバルバス（ＧＢ）の１組のデータ幅をｎバイトとすると、本例では１６ｎバイトの処理が可能となる。また、本実施例のＬＵＴ方式は、図２７に示すように、四則演算処理が１クロックでできる利点が大きい（図２７）。すなわち、一般的な演算方式であるシフトと加算とレジスタラッチのプロセスでの４ビット乗算では、６ステップが必要となるが、本実施例のＬＵＴ方式では、ｘ、ｙアドレス入力でアクセスできる答えを引き出すのみで済むため、１ステップで完了する。なお、図２７（ａ）は２進４ビット乗算器であり、Ｈは半加算器、Ｆは全加算器、図中○で示したものはフリップフロップ回路（Ｆ／Ｆ）である。また、リップルキャリー加算器の加算段数は６段で、レイテンシーは２である。そして、これは、図２７（ｂ）に示すＬＵＴ方式の乗算器と同一機能である。【０１８５】
さらに、図２８に、エントリ数が２５６より大きい場合の考え方の概念を示す。エントリ数が２５６より大きく、例えば４ｋの場合は、２５６×１６=４ｋから１６面の領域“００００”〜“１１１１”を確保できる。この１６面の領域を、メモリ領域、ＬＵＴ、演算器、及び比較器等に割り当て、ダイナミックに切り替えることで機能向上を図ることができる。エントリアドレスを１２ビットとすると、この内の４ビットを領域指定とし、８ビットを領域内アドレスとすることができる。
【実施例４】
【０１８６】
図２９は、入力データのキーデータと、検索データとしてのキーデータを符号化する処理を行う実施例を示している。この［実施例４］は、図２に示したステップＳ２、及び図４に示したステップＳ７に関連するものである。
すなわち、実施例４に係る半導体装置は、入力データ及び検索データとしてのキーデータの符号化を行うことで、制御回路に入力される複数のキーデータの偏りを解消することを目的としている。複数のキーデータの偏りを解消することで、検索メモリマットに書き込む際の衝突頻度を低減すると共に、仮に衝突が発生した場合でも適切に検索処理を行うことができるようにすることができる。特に、図２９は、ＳＲＡＭ−ＣＡＭのメモリ回路構成の一例を示している。【０１８７】
キーデータの偏りとは、例えば、ほとんど同じバイナリデータを有する複数のキーデータが、連続して検索メモリマットに書き込まれる場合などに発生する。例えば、“００  ０１  １０  ０１  １０  ００”というキーデータが入力された後に、続けて“００  ０１  １０  ０１  １０  ０１”というキーデータが入力された場合を想定すると、２つのキーデータは、最後の１ビットしか異なる点がない。本発明の半導体装置は、アドレスの“衝突”が発生する確率を低下させるために、複数のキーデータがある程度ランダム化されて入力されることが好ましい。しかし、上記した例のように、ほとんど同じキーデータが続けて入力されると、アドレスの“衝突”が頻繁に発生することとなる。そこで、本実施例では、入力されるキーデータを符号化させて、人為的に、複数のキーデータのバイナリデータをランダム化させることとしている。【０１８８】
ここで、「符号化」とは、所定の規則（アルゴリズム）に従ってキーデータの分散化を行うことを含む。また、「符号化」には、数式（アルゴリズム）による符号化のみならず、キーデータを表すデータビットの順序を並び替えることを含むものとする。【０１８９】
図２９に示されるように、半導体装置は、近接キャッシュメモリマット１０１、符号化回路１０６、制御回路１０５、検索メモリマット１０２、比較＋ラッチ回路１０３、及び確認用メモリ１０４を含む。近接キャッシュメモリマット１０１は、必要でない場合は設ける必要はない。【０１９０】
図２９に示したＳＲＡＭ−ＣＡＭでは、元情報であるキーデータ（ＫＤ）が、まず最初に符号化回路１０６に入力される。そして、元情報であるキーデータは、符号化回路１０６によって、所定のアルゴリズムに従って符号化される。符号化回路１０６は、所定のアルゴリズムに従い、入力されたキーデータを符号化して、符号化後のキーデータを出力する。符号化回路１０６により符号化されたキーデータは、制御回路１０５に入力される。制御回路１０５は、符号化されたキーデータを、検索メモリマット１０２を検索するためのアドレス、あるいは検索メモリマット１０２に新たに書き込むためのアドレスとして用いる。【０１９１】
つまり、制御回路１０５は、符号化後のキーデータを、［実施例１］などで説明したキーデータと全く同じように扱うことができる。すなわち、制御回路１０５は、符号化後のキーデータを複数に分割し、分割したキーデータをアドレスにして検索メモリマット１０２にアクセスする。そして、制御回路１０５は、アクセスした検索メモリマット１０２にエントリアドレスを書き込んだり、アクセスした検索メモリマット１０２に書き込まれているエントリアドレスを読み出す。これらの書込処理及び読出処理は、［実施例１］等で説明した処理と同じである。この書込処理及び読出処理は、分割した検索メモリマット１０２全てに対して行なわれる。【０１９２】
まず、制御回路１０５は、検索メモリマット１０２のｙ軸にエントリアドレス（ＥＡ）を格納するための場所（アドレス）を割り付け、そのｘ軸に符号化後の分割したキーデータ（ＫＤ）を割り付ける。【０１９３】
検索メモリマット１０２は、ｘ軸に割り付けられた符号化後のキーデータに対応する適切な大きさのビット数の基本セルに分割される（分割数：Ｎ）。ここで、Ｎは２以上の自然数である。図２９の例では、Ｎは８となる。他方、各基本セルに対するビット数の割り付けは、任意とする。また、制御回路１０５は、確認メモリマット１０４のｙ軸にエントリアドレスを割り付け、ｘ軸にエントリアドレスに対応するキーデータをそれぞれ割り付ける。このため、確認メモリマット１０４には、エントリアドレスに従って、キーデータが書き込まれている。なお、確認メモリマット１０４に格納されるキーデータは、上記符号化回路１０６により符号化された入力データではなく、符号化回路１０６に入力される前の元情報としてのキーデータに対応している。【０１９４】
即ち、検索メモリマット１０２に入力されるキーデータは、書き込み時または検索時に入力される元情報としてのキーデータを符号化した符号化後のキーデータである。これに対し、確認メモリマット１０４に格納されるキーデータは符号化前のデータ、つまり書き込み時または検索時に入力される元情報としてのキーデータそのものである。つまり、確認メモリマット１０４に対する参照処理は、符号化回路１０６に入力される符号化前の元情報としてのキーデータに対して行われる。【０１９５】
図３５は、図２９で示した半導体装置の動作タイミングを、第１クロック及び第２クロックの繋がりで示している。まず、第１クロックでは、キーデータが符号化回路１０６に入力され、元情報としてのキーデータが符号化され、符号化後のキーデータが制御回路１０５へと出力される。また、第１クロックでは、制御回路１０５に符号化後のキーデータが入力され、検索メモリマット１０２に対する書込処理または読出処理が行われ、エントリアドレスがラッチ回路１０３ａへとラッチされる。ここまでの処理が、第１のクロックで実行される。続いて、第２クロックでは、ラッチ回路１０３ａからのデータが比較器１０３ｂによって比較され、その比較結果が確認メモリマット１０４へと入力される。そして、第２クロックにおいては、確認メモリマット１０４のデータと符号化前の入力データが一致することの確認が行われ、最終的に、確認メモリマット１０４から読み出されたデータが出力される。【０１９６】
以下、本実施例の符号化回路１０６の動作及び回路構成について説明する。符号化回路１０６は、データの書き込み時または読み出し時に入力される元情報としてのキーデータを符号化する。そして、符号化回路１０６は、符号化の条件を適当に設定することで、キーデータの偏りを除去したり、ビット長を変更したりする機能を有している。この符号化処理は、後述するように、データを混合したり、拡散したり、若しくは冗長性を付加したりすることにより行われる。例えば、符号化ビットは、生成多項式を用いて元情報から生成され、冗長ビットの長さは符号生成時に指定するパラメータに応じて変化する。検索メモリマット１０２（ＳＲＡＭ−ＣＡＭ）に符号化されたデータを入力する方法としては、（１）元情報＋符号化ビットの形で使用する方法、又は（２）符号化ビットのみを使用する方法が挙げられる。本実施例においては、上記（１）の方法を最初に説明し、その後で上記（２）の方法について説明する。なお、（２）の方法は、符号化ビットの中に元情報が広い範囲に渡って拡散される構成になっているため、ビットの偏りの除去により有効である。【０１９７】
図３０は、符号化ビットとデータの散乱度合いを説明するための図である。図３０では、２８ビットのキーデータが符号化回路に入力される場合を示している。図３０に示された符号生成パラメータは、入力データまたはキーデータとしての元情報の散乱度合いを表す指標となっている。例えば、２８ビットの元情報に対して符号化処理を施し、６ビットの符号化ビットを得る場合、制御回路１０５に入力される符号化後の入力データは総ビット数３４ビットとなる。この場合、散乱度合いを表す符号生成パラメータは、１ビットとなる。また、２８ビットの元情報に対して符号化処理を施し、２７ビットの符号化ビットを得る場合、制御回路１０５に入力される符号化後の入力データは総ビット数５５ビットとなる。この場合、散乱度合いを表す符号生成パラメータは、５ビットとなる。また、２８ビットの元情報に対し符号化処理を施し、７０ビットの符号化ビットを得る場合、制御回路１０５に入力される符号化後の入力データは総ビット数９８ビットとなる。この場合、散乱度合いを表す符号生成パラメータは、１１ビットとなる。【０１９８】
従って、散乱度合いを高くして符号生成パラメータのビット数を増大させるためには、符号化ビット数を増大すれば良いことがわかる。但し、符号化ビット数を増大すると検索メモリマット１０２を構成するＳＲＡＭ数を増やす必要がある。これに対し、上記（２）符号化ビットのみを使用する方法では、元情報のビット数分だけ総ビット数が減少するため、検索メモリマット１０２を構成するＳＲＡＭ数を節約することができる。また、生成される符号化ビットには冗長性があるので、生成された符号化ビットを全ビット使用する必要はなく、一部を削除することができる。このように、符号化ビットの一部を削除することにより、検索メモリマット１０２を構成するＳＲＡＭ数の節約だけでなく、キーデータのビット長をＳＲＡＭの構成に合う形に適切に調整することができる。【０１９９】
ここで、元情報としてのキーデータを７ビットとし、符号化ビットを８ビットとする場合について説明する。図３１は、本発明の一実施例を示す図であり、符号化回路１０６が出力する元情報と符号化ビットを示している。本実施例においては、符号化処理に使用する符号の一例として、ボーズ・チョドーリ・ボッケンジェム符号（ＢＣＨ符号：Bose Chaudhurin Hocquenghem符号）を利用する。ＢＣＨ符号は、パラメータ化された誤り訂正符号の一種で、シンドローム復号という簡潔な代数学的手法で復号できる点を特徴としている。ＢＣＨ符号は、低電力で小型の機器で符号化及び復号化が可能であるが、本発明では符号化の機能のみを使用し、復号の機能は使用しない。ＢＣＨ符号は、複数ビットの元データのＸＯＲ（加算＋で表示されている）からなる値で構成されている。ＢＣＨ符号は、符号化という観点から見ると、元データの部分を含まない符号化ビットのみで符号化を行っても検索が可能となる。なお、符号化には、ＢＣＨ符号化以外に、低密度パリティ検査符号（ＬＤＰＣ：Low-density parity-check code）や、ＱＳＢＣ（Quadruple Swing-By Code：（株）東芝の登録商標）などがある。本発明では、これらのＬＤＰＣやＱＳＢＣを、ＢＣＨ符号に替えて用いてもよい。【０２００】
図３１に示されるように、７ビットの元情報としてのキーデータ“a6 a5 a4 a3 a2 a1 a0”を符号化処理することで、８ビットの符号化ビット（１５，７）符号が生成されている。符号化ビットの各ビットは、“a6+a2+a0”、“a6+a5+a2+a1+a0”、“a6+a5+a4+a2+a1”、“a5+a4+a3+a1+a0”、“a6+a4+a3”、“ａ5+a3+a2”、“a4+a2+a1”、“a3+a1+a0”となる。このように、生成される符号化ビットの各ビットには、元情報としてのキーデータの各ビットの値が混合及び拡散されて、冗長性が確保されたものとなっている。【０２０１】
符号化回路１０６にて実行されるＢＣＨ符号化処理について、その詳細を説明する。
ｋビットの元情報である情報ビットを、“ak-1、ak-2、・・・a1、a0”とし、ｍビットの符号化ビットを“cm-1、cm-2、・・・c1、c0”とすると、ｎビットのＢＣＨ符号は、“ak-1、ak-2、・・・a1、a0、cm-1、cm-2、・・・c1、c0”のように表される。ＢＣＨ符号の生成は、ｍビットの符号化ビットを求めることになる。【０２０２】
このベクトルを表現した多項式は、式（１）となる。
【数１】
0005575997.tif 000002
【０２０３】
また、情報ビット部分をＰ（ｘ）とし、符号ビットをＲ（ｘ）とすると、式（２）のとおり表現できる。【０２０４】
【数２】
0005575997.tif 000003
【０２０５】
また生成多項式と呼ぶｍ次の多項式G(x)を導入し、G(x)で割り切れるもののみを符号語とするとF(x)とG(x)の間には、次式（３）が成り立つ。なお、次式（３）では、F(x)がG(x)で割り切れるということを式で表現するため、F(x)をG(x)で割ったときの商を“Q(x)”としている。
【数３】
0005575997.tif 000004
【０２０６】
式（２）及び式（３）より次式（４）が得られる。
【数４】
0005575997.tif 000005
【０２０７】
この式から、ＢＣＨ符号の生成はxmP(x)をG(x)で割った余りR(x)を求めることである。
Ｋ−１次の多項式、式（５）
【数５】
0005575997.tif 000006
をｍ次の多項式、式（６）
【数６】
0005575997.tif 000007
で割ったときの商と余りを計算する回路は一般的には図３３に示すようになる。【０２０８】
更に、図３３に示された回路をxmP(x)をG(x)で割る回路に変形すると、図３４の構成のようになる。図３４は、実際にＢＣＨ符号を生成するのに用いられる回路を示している。余りR(x)は、ak-1、ak-2、・・・a1、a0を入力後、シフトレジスタに蓄えられている情報をシフト操作により出力することにより得ることができる。この図３４に示された符号化回路で演算することで、図３１に示した（１５，７）符号を生成できる。本発明の符号化回路１０６には図３４の回路は使用せずに、図３１の演算結果を表す式を用いて構成する。この式を用いることで、図３４の回路のように符号化に何サイクルも要せずに、符号化することができる。（１５，７）符号は、生成パラメータが２（ｔ＝２）のケースであり、上述の図３１に示される元情報に符号化ビットが付加された１５ビットの符号になる。そして、この符号が、符号化後の入力データとなる。即ち、制御回路１０５を介して、検索メモリマット１０２に入力されるキーデータが生成される。ｔ＝４では図３２のようになり、より散乱度が増している。図３２は、本発明の他の例で、８ビットの元情報とこれから生成される２０ビットの符号化ビットを示す図である。【０２０９】
図３２において、８ビットの元情報としてのキーデータ“a7 a6 a5 a4 a3 a2 a1 a0 ”に対する符号化処理により２０ビットの符号化ビットが生成されている。符号化ビットの各ビットは、“a1+a2+a3処、“a0+a1+a2”、“a0+a2+a3+a6+a7”、“a3+a5”、“a2+a4+a7”、“a1+a3+a6+a7”、“a0+a2+a5+a6”、“a2+a3+a4+a5+a6”、“a1+a2+a3+a4+a5+a7”、“a0+a1+a2+a3+a4+a6+a7”、“a0+a5”、“a1+a2+a3+a4+a6+a7”、“a0+a1+a2+a3+a5+a6”、“a0+a3+a4+a5+a6”、“a1+a4+a5+a6”、“a0+a3+a4+a5+a6”、“a1+a4+a6+a7”、“a0+a3+a5+a6+a7”、“a1+a3+a4+a5”、“a0+a2+a3+a4+a7”となる。このように、生成される符号化ビットの各ビットには、元情報としてのキーデータの各ビットの値が混合、拡散され冗長性が確保されたものとなっている。そして、図３１の場合に比べ、散乱度は明らかに増大している。この元情報から生成される２０ビットの符号化ビットは元情報のＸＯＲ論理式で表されており、そのまま元情報のＸＯＲ論理回路に変換できる。【０２１０】
上記の符号化回路１０６に要求される条件としては、データの書き込み時と検索時で符号化回路１０６の出力が一致することである。即ち、符号化回路１０６は、データの書き込み時と検索時で同一の符号化を実行する。このように、符号化回路１０６は、データの書き込み時と検索時で異なる符号化ビットを生成することがないように保証されていれば良い。このようにすることで、検索メモリマット１０２を構成する各ＳＲＡＭの対応関係を維持することができる。【０２１１】
図３６を用いて、本発明の検索メモリマット１０２への書き込み動作を説明する。図３６では、説明を分かりやすくするため、４つのエントリアドレスに対応する入力データとしてのキーデータ“１６７”、“２３５”、“１１６”、“９０”は、（    ）内に表示されている。すなわち、（    ）内に表示されているキーデータは、符号化される前のデータである。そして、これらのデータが、符号化回路１０６によって符号化されて、“２６９９”、“３７７９”、“１８５９”、“１４４０”というキーデータに変換されている。【０２１２】
図３６の例では、検索メモリマット１０２は、６つの分割メモリに分割されている（分割数Ｎ＝６）。そして、制御回路１０５が、符号化後のキーデータである“２６９９”“３７７９”“１８５９”“１４４０”のそれぞれに対し、エントリアドレス“００”“０１”“１０”“１１”を割り当てた場合を想定している。【０２１３】
つまり、エントリアドレス“００”に書き込まれるべきデータとして入力されたキーデータ“１６７”は、符号化回路１０６により、“２６９９”に変換される。また、符号化後のキーデータ“２６９９”は、バイナリデータで表わすと“１０  １０  １０  ００  １０  １１”となる。符号化後のキーデータが制御回路１０５に入力されると、この制御回路１０５は、この符号化後のキーデータを複数に分割する。図３６に示された例では、符号化後のキーデータは、６つに分割されている。この分割したキーデータのそれぞれを、６分割された検索メモリマット１０２に対して書き込む。この際、検索メモリマット１０２に書き込まれるデータは、符号化後のキーデータ“２６９９”に対応したエントリアドレス“００”である。【０２１４】
図３６（ａ）に示されるように、符号化されたキーデータ“２６９９”は、制御回路１０５によって６分割されて、“１０”“１０”“１０”“００”“１０”“１１”として表わされる。制御回路１０５は、最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａに対して、エントリアドレス“００”を書き込む。次に、制御回路１０５は、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂに対し、エントリアドレス“００”を書き込む。更に、制御回路１０５は、３番目の分割キーデータ“１０”をアドレスとして、３番目の分割メモリ１０２ｃに対して、エントリアドレス“００”を書き込む。また、制御回路１０５は、４番目から６番目の分割キーデータ“００”“１０”“１１”についても同様に、４番目から６番目の分割メモリ１０２ｄ、１０２ｅ、１０２ｆのそれぞれに、エントリアドレス“００”を書き込んでいく。
これにより、符号化後のキーデータ“２６９９”で指定された検索メモリマット１０２に対し、エントリアドレス“００”が書き込まれたことになる。【０２１５】
続いて、エントリアドレス“０１”に書き込まれるべきデータとして入力されたキーデータ“２３５”は、符号化回路１０６により、“３７７９”に変換される。符号化後のキーデータ“３７７９”は、バイナリデータで表わすと“１１  １０  １１  ００  ００  １１”となる。ここで、制御回路１０５は、６分割された検索メモリマット１０２に対して、この符号化後のキーデータ“３７７９”に対応したエントリアドレス“０１”を書き込んでいく。【０２１６】
図３６（ｂ）に示されるように、符号化後のキーデータ“３７７９”は、制御回路１０５によって６分割され、“１１”“１０”“１１”“００”“００”“１１”として表わされる。制御回路１０５は、これらの分割キーデータをアドレスとして、検索メモリマット１０２に対して、エントリアドレス“０１”を書き込む。つまり、制御回路１０５は、最初の分割キーデータ“１１”をアドレスとして、最初の分割メモリ１０２ａにエントリアドレス“０１”を書き込む。また、制御回路１０５は、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂに対し、エントリアドレス“０１”を書き込む。この際、既に、符号化後のキーデータ“２６９９”の書き込みによって、２番目の分割メモリ１０２ｂのアドレスには、エントリアドレス“００”が書き込まれている。そこで、制御回路１０５は、アドレスの衝突した箇所に衝突フラグを書き込み、後の読み出し処理においては、「配慮しない（don’t care）」ものとして処理する。また、図３６（ｂ）に示されるように、さらに、制御回路１０５は、３番目の分割キーデータ“１１”をアドレスとして、３番目の分割メモリ１０２ｃにエントリアドレス“０１”を書き込む。同様に、制御回路１０５は、４番目から６番目のキーデータ“００”“００”“１１”をアドレスとして、４番目から６番目の分割メモリ１０２ｄ、１０２ｅ、１０２ｆに対し、エントリアドレス“０１”を書き込む。ただし、４番目と６番目の分割メモリ１０２ｄ、１０２ｆのアドレスには既に、符号化後のキーデータ“２６９９”のエントリアドレスが書き込まれているため、制御回路１０５は、このアドレスに衝突フラグを設定し、後に行なわれる検索処理では「配慮しない（don’t care）」ものとして処理する。【０２１７】
これにより、符号化後のキーデータ“３７９９”で指定された検索メモリマット１０２に、エントリアドレス“０１”が書き込まれたことになる。同様にして、元情報であるキーデータ“１１６”“９０”を符号化回路で“１８５９”“１４４０”に変換し、これらの符号化後のキーデータ“１８５９”“１４４０”をアドレスとして、検索メモリマット１０２にエントリアドレス“１０”“１１”を書き込む。なお、図３６（ｃ）に示されるように、符号化後のキーデータ“１８５９”の書き込み処理では、新たに５番目の分割メモリ１０２ｅにおいてアドレス衝突が生じる。また、図３６（ｄ）に示されるように、符号化後のキーデータ“１４４０”の書き込み処理では、新たに１番目及び３番目の分割メモリ１０２ａ、１０２ｃにおいてアドレス衝突が生じている。【０２１８】
図３６（ｅ）上段は、確認メモリマット（ＳＲＡＭ）１０４の書き込み状態の例を示している。
図３６（ｅ）上段に示されるように、確認メモリマット１０４においては、エントリアドレス“００”にキーデータ”１６７”のバイナリデータ“１０  １０  １０  ００”が書き込まれ、エントリアドレス“０１”にキーデータ“２３５”のバイナリデータ“１１  １０  １１  ００”が書き込まれ、エントリアドレス“１０”にキーデータ“１１６”のバイナリデータ“０１  １１  ０１  ００”が書き込まれ、エントリアドレス”１１”にキーデータ“９０”のバイナリデータ“０１  ０１  １０  １０”がそれぞれ書き込まれている。
また、図３６（ｅ）下段に示されるように、確認メモリマット１０４のエントリアドレス“００”“０１”“１０”“１１”に、符号化後のキーデータ“２６９９”、“３７７９”、“１８５９”、“１４４０”を書き込むこととしてもよい。【０２１９】
図３７は、本発明に係る半導体装置（ＳＲＡＭ−ＣＡＭ）の検索動作を示した図である。図３７（ａ）は、元情報のキーデータとして“１６７”が入力され、符号化回路１０６によって符号化後のキーデータ“２６９９”に変換されたときの検索動作を示している。符号化後のキーデータ“２６９９”は、バイナリデータでは“１０  １０  １０  ００  １０  １１”として表わされる。このバイナリデータが、制御回路１０５において６つに分割される。分割されたキーデータは、それぞれ、６分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして用いられる。最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａからデータを読み出すと、エントリアドレス“００”が読み出される。また、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂからデータを読み出す。しかし、このデータは、図３６（ｂ）で示した符号化後のキーデータ“３７９９”の入力時に、アドレス衝突が生じているため、「配慮しない（don’t care）」処理を行なう。すなわち、２番目の分割メモリ１０２ｂからの読み出しデータは検索の対象外となる。【０２２０】
また、３番目の分割キーデータ“１０”、４番目の分割キーデータ“００”、及び６番目の分割キーデータ“１１”のそれぞれをアドレスとした検索処理も同様に、アドレスの衝突が生じていることから、「配慮しない（don’t care）」処理によって、読み出したデータは検索の対象外とする。また、５番目の分割キーデータ“１０”については、これをアドレスとして５番目の分割メモリ１０２ｅにアクセスすると、エントリアドレス“００”を読み出すことができる。【０２２１】
図３７（ａ）に示されるように、符号化後のキーデータ“２６９９”に基づいて、検索メモリマット１０２から読み出されたデータは、最初の分割メモリ１０２ａのデータと５番目の分割メモリ１０２ｅのデータが、共に“００”であり一致している。これにより、符号化後のキーデータ“２６９９”に対応するエントリアドレスは、“００”であると推測できる。【０２２２】
そこで、確認メモリマット１０４を用いて、エントリアドレス“００”によりアクセスされるキーデータの値を読み出すと、“１０  １０  １０  ００”となり、符号化前の入力データであるキーデータ“１０  １０  １０  ００”と一致することが分かる。このように、制御回路１０５は、確認メモリマット１０４からの出力データであるキーデータと、符号化前の検索データとしてのキーデータを比較し、両者が一致することを確認して、エントリアドレスを出力する。【０２２３】
図３７（ｂ）は、符号化後のキーデータ“３７７９”が、検索対象として入力された場合を示している。キーデータ“３７７９”は“１１  １０  １１  ００  ００  １１”のバイナリデータで表わされ、制御回路１０５によって６分割される。分割されたキーデータは、６分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“１１”をアドレスとして、最初の分割メモリ１０２ａからデータを読み出すと、エントリアドレス“０１”が読み出される。２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂからデータを読み出すが、このデータにはアドレス衝突が生じているため、「配慮しない（don’t care）」ものとして処理する。これにより、２番目の分割キーデータ“１０”は検索の対象外とされる。【０２２４】
３番目の分割キーデータ“１１”をアドレスとして、３番目の分割メモリ１０２ｃからデータを読み出すと、エントリアドレス“０１”が読み出さる。他方、４番目の分割キーデータ“００”、５番目の分割キーデータ“００”、及び６番目の分割キーデータ“１１”のそれぞれをアドレスとした３〜６番目の分割メモリ１０２ｄ、１０２ｅ、１０２ｆへのアクセスは、「配慮しない（don’t care）」処理によって、検索の対象外となる。【０２２５】
図３７（ｂ）に示されるように、符号化後のキーデータ“３７７９”によって検索メモリマット１０２から読み出される値は、１番目及び３番目の分割メモリ１０２ａ、１０２ｃのエントリアドレス“０１”ということになる。【０２２６】
そこで、確認メモリマット１０４を用いて、エントリアドレス“０１”によってアクセスされるキーデータの値を読み出すと、“１１  １０  １１  ００”となり、符号化前のキーデータ“１１  １０  １１  ００”と一致する。つまり、制御回路１０５は、確認メモリマット１０４からの出力データとしてのキーデータと、符号化前の検索データとしてのキーデータと比較して一致することを確認した上で、エントリアドレスを出力する。【０２２７】
続いて、図３７（ｃ）は、検索メモリマット１０２に書き込まれていないキーデータ“９４”が符号化され、符号化後のキーデータ“１５０４”が、検索対象として入力された場合を示している。
図３７に示されるように、符号化回路１０６は、キーデータ“９４”を符号化して、“１５０４”に変換する。符号化後のキーデータ“１５０４”は、バイナリデータデータ“０１  ０１  １１  １０  ００  ００”で表わされる。符号化後のキーデータは、制御回路１０５において６分割される。分割されたキーデータは、６分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初のキーデータ“０１”をアドレスとして、最初の分割メモリ１０２ａからデータを読み出すと、アドレス衝突しているため「配慮しない（don’t care）」処理が行なわれる。また、２番目の分割キーデータ“０１”をアドレスとして、２番目の分割メモリ１０２ｂのデータを読み出すと、エントリアドレス“１１”が出力される。【０２２８】
また、図３７（ｃ）に示されるように、符号化後の入力データ“１５０４”に基づいて検索メモリマット１０２から読み出されるデータは、２番目の分割メモリ１０２ｂの出力としてのエントリアドレス“１１”、３番目の分割メモリ１０２ｃの出力としてのエントリアドレス“０１”、及び４番目の分割メモリ１０２ｄの出力としてのエントリアドレス“１１”と、６番目の分割メモリ１０２ｆの出力としてのエントリアドレス“１１”ということになる。なお、５番目の分割キーデータ“００”をアドレスとした分割メモリ１０２ｅへのアクセスは「配慮しない（don’t care）」処理によって、検索の対象外とされている。この場合に、検索メモリマット１０２から読み出されるエントリアドレスは、複数種類存在する。すなわち、エントリアドレスに不一致が発生している。このため、制御回路１０５は、確認メモリマット１０４を用いなくても、この段階で、検索データとしてのキーデータと一致するデータは、検索メモリマット１０２内に存在していないと判定することができる。【０２２９】
次に、図３８〜図４１を参照して、符号化ビットのみを用いて符号化した場合の実施例について説明する。説明を簡単にするため、ＳＲＡＭ−ＣＡＭに入力するキーデータのビット長を２４ビットとし、符号化により生成される符号化後のキーデータのビット長も２４ビットとする。また、符号化後のキーデータを前記の説明と同じように６分割し、分割したキーデータで、６分割された検索メモリマット１０２を検索する構成になっているとする。この前提から、ＳＲＡＭ−ＣＡＭの検索メモリマット１０２は、１６ワード×４ビットのＳＲＡＭ６個で構成されることが分かる。このため、ＳＲＡＭ−ＣＡＭのエントリ数は１６となる。【０２３０】
２４ビットの元情報から２４ビットの符号化ビットを生成する方法には様々な方法がある。ここでは、図３８を用いて、符号化ビットの生成方法の一例を説明する。図３８は、８ビットの元情報から１０ビットの符号化ビットを生成することができる例を示している。ただし、符号化ビットの１０ビットの中では、元情報が拡散されているため、ｃ０とｃ１を除きｃ２からｃ９までのビットを使用するものとする。このようにすると、８ビットの元情報から８ビットの符号化ビットが生成されることになる。しかし、このままでは２４ビットのキーデータに対して８ビット単位でしか符号化できない。８ビット単位で２４ビットの符号化を行うと、キーデータに偏りがあったとき対処できないという問題が発生する。そこで、２４ビットのキーデータを４ビットずつ６つのグループに分け、グループ単位で所定のアルゴリズムに従いグループの配列を入れ替える操作を行う。そして、入れ替えたグループの左端から２グループずつ８ビット単位で符号化する。この方法は、図３９に示されている。【０２３１】
図３９は、ＳＲＡＭ−ＣＡＭに入力する元情報であるキーデータ（図３９（ａ））と、４ビットずつグループ分けしグループの配列変更を行った後のキーデータ（図３９（ｂ））と、８ビット単位で符号化した後のキーデータ（図３９（ｃ））、の３種類のデータの変化を示している。丸内の数字（１）から（６）は、グループの区別を行うために記したものである。【０２３２】
図３９（ａ）（ｂ）（ｃ）の３種類のデータは、ＳＲＡＭ−ＣＡＭのエントリ数が１６であり、検索メモリマット１０２には１６種類のデータを書き込むことができるため、エントリ番号順に１６個記述している。また、偏りの影響を見るために、元情報の６グループの内３グループ（（１）から（３））のデータは、全て同じ値である場合を想定している。図３９のエントリアドレスと（１）から（６）とが示す場所の数字は、４ビットで表される２進数を１０進数で表記したものである。元情報としてのキーデータのエントリアドレス“０”において、（１）から（６）の６つの数字“４”、“１”、“１３”、“１４”、“１１”、“５”は、２４ビットの元情報を４ビットずつ区切ったときの（１）から（６）の各グループの値を示している。従って、このグループの配列変更を実施すると、図３９（ｂ）に示したように、（１）、（２）、（３）、（４）、（５）、（６）の元情報が、（２）、（５）、（６）、（３）、（１）、（４）の順に並び替えられる。また、並び替え後のエントリアドレス“０”は、その２４ビットのバイナリデータが、“１”、“１１”、“５”、“１３”、“４”、“１４”となる。このデータを８ビット単位の符号化で（２）（５）、（６）（３）、（１）（４）の８ビットのデータと見做して、図３８に示された符号化ビットのＸＯＲ論理式に従い、ＸＯＲ組み合わせ論理回路で変換する。この８ビット単位の符号化を実施した結果は、図３９（ｃ）に示されている。すなわち、図３９（ｃ）に示されるように、符号化を実施すると、エントリアドレス“０”のところでは、“１”、“７”、“１”、“１０”、“６”、“１２”で表される２４ビットのデータとなっている。【０２３３】
図４０（ａ）は、元情報としてのキーデータを符号化しないでＳＲＡＭ−ＣＡＭの検索メモリマット１０２に書き込み、検索メモリマット１０２に書き込まれたデータを読み出した場合を示している。図４０（ａ）は、左から順に、元情報としてのキーデータ、検索メモリマット１０２の内容、及び検索メモリマット１０２の読み出し結果を示している。図４０（ｂ）は、前述した８ビット単位の符号化を実施した後で、検索メモリマット１０２に書き込み、そのデータを読み出した場合を示している。すなわち、図４０（ｂ）は、検索メモリマット１０２のエントリ数が１６であるため、１６種のキーデータを書込み、検索メモリマット１０２から読み出した場合を示している。図４０（ｂ）は、左から順に、８ビット単位の符号化を実施したデータ、検索メモリマット１０２の内容、及び検索メモリマット１０２の読み出し結果を示している。【０２３４】
図４０（ａ）に示されるように、符号化を行わないと、（１）、（２）、（３）の分割メモリでの偏りが大きくなり、１種類のデータしか書き込まれない状態が生じる。また、図４０（ａ）に示されるように、エントリアドレス順に検索メモリマット１０２への書き込みを行うと、（１）、（２）、（３）のメモリマットには１０進数でエントリアドレスの“０”が書き込まれ、その後の書き込み操作ではアドレス衝突状態になる。図４０において、塗りつぶし状態で書き込まれている情報は“０”である。また、（４）、（５）、（６）のデータは、ランダム状態を仮定しているため、検索メモリマット１０２で見るとアドレス衝突がランダムに発生していることが分かる。図４０では、アドレス衝突は、塗りつぶし状態で表示されている。この検索メモリマット１０２に書き込まれた内容を読み出すと（１）、（２）、（３）は完全な衝突状態になり、ＳＲＡＭ−ＣＡＭとして機能しているのは、実質的には（４）、（５）、（６）の３つのメモリマットしかないことが分かる。このように、アドレス衝突が多発して、６つの分割メモリの内３つしか機能していないため、１６エントリの内５エントリの読み出し、すなわちエントリアドレス“１”、“６”、“７”、“１０”、“１１”の読み出しで、（１）から（６）が全て衝突状態になる。しかしながら、（１）から（６）の全衝突が発生していないところでは、検索メモリマット１０２に書き込まれているエントリアドレスと分割したキーデータのエントリアドレスが一致するので正しい検索ができているともいえる。【０２３５】
図４０（ｂ）は、８ビット単位の符号化処理を実施した場合の例である。図４０（ｂ）に示されるように、符号化処理を行うことにより、図４０（ａ）で示した（１）、（２）、（３）で発生したような極端な衝突は発生しなくなった。ただし、検索メモリマット１０２の読出し結果は、符号化処理をした場合と符号化処理しない場合とで、同じ結果となっている。これは、図３９の８ビット単位の符号化を実施する前のグループの配列変更実施後のデータに示しているように、符号化の対象となる２つのデータの内の１つが全く変化しない固定データになっているためである。そこで、８ビット単位の符号化実施後のデータを元情報として、もう一度、グループ配列変更と８ビット単位の符号化を行い、この結果を２回目の８ビット単位の符号化の実施とし、このデータを用いて検索メモリマット１０２への書き込みと、読み出しを実施する。【０２３６】
図４１（ａ）は、元情報としてのキーデータを符号化しないでＳＲＡＭ−ＣＡＭの検索メモリマットに書き込み、読み出しを行った場合の結果を示し、図４１（ｂ）は、２回目の８ビット単位の符号化を行い、このデータを用いて検索メモリマットに書き込みと読み出しを行った場合の結果を示している。図４１（ｂ）に示されるように、２回目の８ビット単位の符号化を行ったデータで検索メモリマット１０２に書き込み、書き込んだデータを読み出すと６つの分割メモリが全てアドレス衝突になるような状態はなくなる。また、図４１（ｂ）に示されるように、分割メモリから読み出されるエントリアドレスの全てが、キーデータのエントリアドレスと一致し、１６個のエントリデータの全てが正しく検索できていることが分かる。【０２３７】
この結果から、データの偏りが大きい場合であっても、符号化処理を複数回行うことで、より効果的にデータの偏りを除去できることが分かる。本実施例では、符号化を８ビット単位で行っているが、符号化は８ビットである必要はなく様々な組み合わせを選択することができる。すなわち、本発明は、符号生成パラメータや元情報のビット数を選択することで、様々な符号化ビットを生成することができる。例えば、検索メモリマット１０２の構成を変えない場合であっても、元情報を１２ビットあるいは１６ビットにし、１０ビットの符号化ビットを生成し、このうち本実施例のように８ビット使用してもよく、元情報を２４ビットにして、符号化ビットを２４ビットにしてもよい。元情報を１６ビットにした場合は、得られる符号化ビットを８ビットにした場合において、６個の４ビットグループ（１）〜（６）の中から重ならないように４つのグループを選択すれば、２４ビットの符号化ビットを生成できる。
【実施例５】
【０２３８】
図４２は、検索時に入力されるキーデータの全列に衝突の状態が発生した場合であっても、検索結果を出力できるようにしたＳＲＡＭ−ＣＡＭの書き込み動作を説明するための図である。
本実施例において、半導体メモリ回路の構成、及びＳＲＡＭ−ＣＡＭのスイッチ又は検索の動作については実施例１と同様であるため説明を省略する。【０２３９】
図４２を参照して、本実施例における検索メモリマット１０２への書き込み動作を説明する。なお、本実施例では、エントリアドレスが２ビット４ワード、入力データとしてのキーデータ長が１２ビットの場合を想定している。図４２の例では、検索メモリマット１０２は６分割されている。
また、本実施例では、キーデータ“２６９９”“２６９１”“１８５９”“１４４０”を、エントリアドレス“００”“０１”“１０”“１１”のそれぞれに書き込む場合を想定している。【０２４０】
エントリアドレス“００”に書き込まれるべきデータとして入力されたキーデータ“２６９９”は、バイナリデータで表わすと“１０  １０  １０  ００  １０  １１”となる。この値を６分割された分割メモリ１０２ａ〜１０２ｆのｙ軸のアドレスとして、検索メモリマット１０２にデータを書き込む。この際、書き込まれるデータは、例えば、キーデータ“２６９９”のエントリアドレス“００”である。【０２４１】
図４２（ａ）に示されるように、キーデータ“２６９９”が６分割され、“１０”“１０”“１０”“００”“１０”“１１”として表わされ、これらをアドレスとして、分割メモリ１０２ａ〜１０２ｆに対して、エントリアドレス”００”が書き込まれる。つまり、制御回路１０５は、最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａに対し、エントリアドレス“００”を書き込む。また、制御回路１０５は、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂに対し、エントリアドレス“００”を書き込む。更に、制御回路１０５は、３番目の分割キーデータ“１０”をアドレスとして、３番目の分割メモリ１０２ｃに対し、エントリアドレス“００”を書き込む。また、制御回路１０５は、４番目から６番目の分割キーデータ“００”“１０”“１１”をアドレスとして、４番目から６番目の分割メモリ１０２ｄ、１０２ｅ、１０２ｆに対し、エントリアドレス“００”を書き込む。
これにより、キーデータ“２６９９”で指定された検索メモリマット１０２に、エントリアドレス“００”が書き込まれたことになる。【０２４２】
同様にして、エントリアドレス“０１”に書き込まれるべきデータとして入力されたキーデータ“２６９１”は、バイナリで表わすと“１０  １０  １０  ００  ００  １１”となる。この値を６分割された検索メモリマットのｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとして、検索メモリマット１０２にデータを書き込む。この際、書き込まれるデータは、エントリアドレスとして入力された“０１”である。【０２４３】
図４２（ｂ）に示されるように、キーデータ“２６９１”が６分割され、“１０”“１０”“１０”“００”“００”“１１”として表わされ、これらをアドレスとしてエントリアドレス“０１”が検索メモリマット１０２に対して書き込まれる。つまり、制御回路１０５は、最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａに対し、エントリアドレス“０１”を書き込む。この際、既に、キーデータ“２６９９”の書き込み処理において、最初の分割メモリ１０２ａのアドレスには、エントリアドレス“００”が書き込まれていることから、アドレスの衝突が生じる。図４２（ｂ）では、アドレスの衝突が生じた部分を、塗りつぶして示している。このアドレスの衝突が生じた部分は、後の読み出し処理において、「配慮しない（don’t care）」として処理される。
図４２（ｂ）に示されるように、さらに、制御回路１０５は、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂに対し、エントリアドレス“０１”を書き込む。また、制御回路１０５は、３番目から６番目の分割キーデータ“１０”“００”“００”“１１”をアドレスとして、それぞれ、３番目から６番目の分割メモリ１０２ｃ、１０２ｄ、１０２ｅ、１０２ｆに対し、エントリアドレス“０１”を書き込む。ただし、２番目〜４番目と６番目のアドレスには既に、キーデータ“２６９９”のエントリアドレスが書き込まれているため、制御回路１０５は、衝突フラグを設定し、後の読み出し処理において「配慮しない（don’t care）」ものとして処理する。
これにより、キーデータ“２６９１”で指定された検索メモリマット１０２に対しエントリアドレス“０１”が書き込まれたことになる。【０２４４】
同様に、制御回路１０５は、キーデータ“１８５９”“１４４０”をアドレスとして、ＳＲＡＭ−ＣＡＭの検索メモリマット１０２に、エントリアドレス“１０”“１１”を書き込む。図４２（ｃ）に示されるように、キーデータ“１８５９”の書き込み処理においては、４番目〜６番目の分割メモリ１０２ｄ、１０２ｅ、１０２ｆでアドレス衝突が生じる。また、図４２（ｄ）に示されるように、キーデータ“１４４０”では、１、３、５番目の分割メモリ１０２ａ、１０２ｃ、１０２ｅでアドレス衝突が生じている。【０２４５】
図４２（ｅ）は、確認メモリマット（ＳＲＡＭ）１０４の書き込み状態を示している。
図４２（ａ）において、エントリアドレス“００”にキーデータ”２６９９”のバイナリデータが書き込まれ、エントリアドレス“０１”にキーデータ“２６９１”のバイナリデータが書き込まれ、エントリアドレス“１０”にキーデータ“１８５９”のバイナリデータが書き込まれ、エントリアドレス”１１”にキーデータ“１４４０”のバイナリデータが書き込まれている。【０２４６】
図４３は、本発明の［実施例５］に係るＳＲＡＭ−ＣＡＭの検索動作を示す図である。
図４３は、図４２に示したアドレスの重なった部分、つまり、濃く網掛けされたエントリを「配慮しない（don’t care）」とした場合に、入力データが正しく検索されているか否かを表わしている。【０２４７】
図４３（ａ）では、検索データとしてのキーデータ“２６９９”が入力された場合を示している。検索データとしてのキーデータ“２６９９”は、“１０  １０  １０  ００  １０  １１”のバイナリで表わされ、制御回路１０５によって、２ビットずつに６分割される。分割されたキーデータは、６分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。まず、制御回路１０５は、最初の分割キーデータをアドレスとして、最初の分割メモリ１０２ａからエントリアドレス“００”を読み出すと、このデータはアドレス衝突が生じているため、「配慮しない（don’t care）」ものして処理する。よって、制御回路１０５は、最初の分割メモリ１０２ａからの読み出しデータを検索の対象外とする。また、制御回路１０５は、２番目の分割キーデータ“１０”、３番目の分割キーデータの“１０”、４番目の分割キーデータの“００”、及び６番目の分割キーデータの“１１”のそれぞれをアドレスとして、各分割メモリ１０２ｂ、１０２ｃ、１０２ｄ、１０２ｆへアクセスする。ただし、制御回路１０５は、これらのアクセスについてはアドレスの衝突が生じているため、「配慮しない（don’t care）」処理によって、読み出したデータを検索の対象外とする。他方、制御回路１０５は、５番目の分割データの“１０”をアドレスとして、５番目の分割メモリ１０２ｅからエントリアドレス“００”を読み出すことができる。【０２４８】
図４３（ａ）に示されるように、検索データとしてのキーデータ“２６９９”によって検索メモリマット１０２から読み出されたデータのうち、実際に検索に使用されるデータは、５番目の分割メモリ１０２ｅから読み出されたエントリアドレス“００”ということになる。【０２４９】
そこで、制御回路１０５は、確認メモリマット１０４を用いて、エントリアドレス“００”によりアクセスされるキーデータの値を読み出すと、“１０  １０  １０  ００  １０  １１”となり、これは入力データとしてのキーデータと一致することが分かる。つまり、制御回路１０５は、確認メモリマット１０４からのキーデータである出力データと入力データを比較して正しいことを確認した上で、エントリアドレスを出力する。【０２５０】
図４３（ｂ）は、検索データとしてのキーデータ“１８５９”が入力された場合を示している。検索データとしてのキーデータ“１８５９”は“０１  １１  ０１  ００  ００  １１”で表わされ、制御回路１０５によって２ビットずつ６分割される。分割キーデータは、６分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。制御回路１０５は、最初の分割キーデータ“０１”をアドレスとして、最初の分割メモリ１０２ａのデータを読み出すが、このデータは、アドレス衝突が生じているため、「配慮しない（don’t care）」処理を行なうようにする。また、制御回路１０５は、２番目の分割キーデータ“１１”をアドレスとして、２番目の分割メモリ１０２ｂからデータを読み出すと、エントリアドレス“１０”を読み出すことができる。また、制御回路１０５は、３番目の分割キーデータ“０１”をアドレスとして、３番目の分割メモリ１０２ｃからデータを読み出すと、エントリアドレス“１０”を得ることができる。【０２５１】
なお、４番目の分割キーデータ“００”、５番目の分割キーデータ“００”、及び６番目の分割キーデータ“１１”のそれぞれをアドレスとした分割メモリ１０２ｄ、１０２ｅ、１０２ｆへのアクセスは、「配慮しない（don’t care）」処理によって、検索の対象外となる。【０２５２】
図４３（ｂ）に示されるように、検索データとしてのキーデータ“１８５９”によって検索メモリマット１０２から読み出される値は、２番目の分割メモリ１０２ｂからの出力であるエントリアドレス“１０”と、３番目の分割メモリ１０２ｃからの出力であるエントリアドレス“１０”ということになる。【０２５３】
確認メモリマット１０４を用いて、エントリアドレス“１０”をアドレスとしてアクセスされるキーデータの値を読み出すと、“０１  １１  ０１  ００  ００  １１”となり、これは検索データとしてのキーデータと一致していることが分かる。つまり、制御回路１０５は、確認メモリマット１０４からのキーデータとしての出力データが、検索データと比較して正しいことを確認して、エントリアドレスを出力する。【０２５４】
図４３（ｃ）に、検索データとしてのキーデータとして“２６９１”が入力された場合を示す。検索データとしてのキーデータ“２６９１”は、“１０  １０  １０  ００  ００  １１”のバイナリで表わされる。制御回路１０５は、キーデータ“２６９１”のバイナリデータを、２ビットずつに６分割する。分割キーデータは、６分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａのデータを読み出すと、「配慮しない（don’t care）」処理が行われる。また、２番目の分割キーデータ“１０”、３番目の分割キーデータ“１０”、４番目の分割キーデータ“００”、５番目の分割キーデータ“００”、分割キーデータ６番目の“１１”をアドレスとして、各分割メモリ１０２ｂ、１０２ｃ、１０２ｄ、１０２ｅ、１０２ｆのデータを読み出すと、「配慮しない（don’t care）」処理が行なわれて、検索の対象外となる。即ち、図４３（ｃ）に示した例では、キーデータを分割した全ての分割桁で、アドレスの衝突が生じている状態となっている。【０２５５】
この場合、制御回路１０５は、まず、「配慮しない（don’t care）」とした各分割メモリ１０２ａ〜１０２ｆのアドレスから、そのアドレスに書き込まれているエントリアドレスを読み出す。すなわち、各分割メモリ１０２ａ〜１０２ｆには衝突が生じている場合であっても、衝突フラグとともに、一つのエントリアドレスが書き込まれている。制御回路１０５は、この衝突フラグとともに書き込まれているエントリアドレスを、各分割メモリ１０２ａ〜１０２ｆから読み出しておく。そして、制御回路１０５は、衝突フラグとともに書き込まれているエントリアドレスを用いて、図４３（ｅ）に示された確認メモリマット１０４を順次参照する。この図４３（ｅ）に示された例において、衝突した状態のエントリアドレスは“００”と“０１”である。最初に、制御回路１０５は、確認メモリマット１０４から、エントリアドレス“００”に対応したキーデータの値を読み出すと“１０  １０  １０  ００  １０  １１”であることがわかる。このキーデータ“１０  １０  １０  ００  １０  １１”は、検索対象データとして入力されたキーデータと一致していない。よって、制御回路１０５は、“００”は求めているエントリアドレスではないと判断する。次に、制御回路１０５は、確認メモリマット１０４のエントリアドレス“０１”に対応しているキーデータの値を読み出すと、“１０  １０  １０  ００  ００  １１”であることがわかる。このキーデータ、“１０  １０  １０  ００  ００  １１”は、検索対象データとして入力されたキーデータと一致している。よって、制御回路１０５は、“０１”が求めるエントリアドレスであると判断することができる。そして、制御回路１０５は、検索結果として、このエントリアドレス“０１”を出力する。このように、分割した検索データの全てが衝突した状態にあるときでも、確認メモリマット１０４を衝突した状態のエントリアドレスで順次参照することで、キーデータと一致するキーデータを抽出することが可能となる。【０２５６】
すなわち、本発明の実施例においては、エントリアドレスの書き込み処理時にアドレスの衝突が発生すると、「配慮しない（don’t care）」処理を行う。この「配慮しない（don’t care）」処理では、（１）エントリアドレスの書き込み動作を止めるか、（２）既に書き込まれているエントリアドレスに他のエントリアドレスを上書きする処理のいずれかがなされる。このため、検索メモリマット１０２には、前者（１）の場合は、最初に書き込まれたエントリアドレスが書き込まれた状態になっており、後者（２）の場合は、最後に書き込まれたエントリアドレスが書き込まれた状態になっている。このため、アドレスに衝突が発生した状態であっても、そのアドレスには、検索の対象となるエントリアドレスが含まれている可能性がある。そこで、本発明の実施例ではこの可能性に着目し、衝突が発生したアドレスの中に含まれているエントリアドレスを抽出することで、検索対象を発見することのできる可能性を高めることとしている。これにより、本発明の実施例では、検索時に入力される検索データに全列衝突の状態が発生しても、その中に検索の対象となるエントリアドレスが含まれていれば、検索結果を出力することができる。
【実施例６】
【０２５７】
まず前提として、先述したとおり、検索メモリマット１０２を分割するときには、最低限以下の個数が必要となる。
（式）Ｎ＝Ｌ／ｌｏｇ２・Ｍ
Ｌ：キーデータ長
Ｍ：総エントリ数
Ｎ：検索メモリマットの分割数（分割メモリの最小個数）【０２５８】
例えば、キーデータ長が３２ビットであり、検索メモリマットの総エントリ数が８ビット２５６ワードである場合、分割メモリは最低限の４個必要となる。また、キーデータ長が同一である場合、検索メモリマットの総エントリ数が増加すれば、必要最低限の分割数は減少する。しかし、分割メモリの個数が減少すると情報の分散が小さくなり、衝突確率が上がる傾向にある。そのため本実施例では、以下に説明するとおり、分割メモリの数を増加して、衝突頻度を低減させることとしている。なお、例えば１２ビットのデータ長の場合、通常は１ビット目から１２ビット目として各ビットを特定するが、以下では便宜上、０ビット目から１１ビット目と称し説明する。【０２５９】
図４４は、本発明の第６の実施例を示す検索メモリマットの書き込み動作を示す図である。図４４を参照して、本発明における検索メモリマット１０２への書き込み動作を説明する。なお、本実施例では、エントリアドレスが２ビット４ワード、キーデータ長が１２ビットの場合を想定している。この場合、上述の式により、最低限必要となる分割メモリの個数は６個となる。図４４では、検索メモリマット１０２が、分割メモリ１０２ａ〜１０２ｆの６個に分割されており、さらに追加用分割メモリ１０２ｇ〜１０２ｌの６個を加え、１２個の分割メモリとされた場合の例を示している。すなわち、本実施例では、［実施例１］と比較して、検索メモリマット１０２の分割数を２倍としている。また、本実施例では、キーデータとして、“２６９９”“２６９１”“１８５９”“１４４０”をエントリアドレス“００”“０１”“１０”“１１”に書き込む場合を想定している。【０２６０】
なお、検索メモリマット１０２にデータを書き込む際の具体的な動作を説明する前に、追加用分割メモリ１０２ｇ〜１０２ｌに書きこまれるデータについて説明する。【０２６１】
図４４（ａ）において、検索メモリマット１０２の下部に、例えば［１：０］等として示した数字は、「キーデータ選択ビット」を意味している。ここにいう「キーデータ選択ビット」とは、複数の分割メモリ１０２ａ〜１０２ｆ毎に、各分割メモリに格納するキーデータのビット番号を選択するための情報である。例えば、図４４（ａ）に示した例において、「キーデータ選択ビット」は、入力された１２ビットのキーデータのバイナリデータのうち、その０ビット目と１ビット目が６番目の分割メモリ１０２ｆに格納され、２ビット目と３ビット目が５番目の分割メモリ１０２ｅに格納され、４ビット目と５ビット目が４番目の分割メモリ１０２ｄに格納され、６ビット目と７ビット目が３番目の分割メモリ１０２ｃに、８ビット目と９ビット目が２番目の分割メモリ１０２ｂに格納され、１０ビット目と１１ビット目が１番目の分割メモリ１０２ａに格納されることを示している。【０２６２】
また、図４４（ａ）に示されるように、１２ビットのキーデータのうち、４ビット目と６ビット目が１２番目の分割メモリ１０２ｌに格納され、５ビット目と７ビット目が１１番目の分割メモリ１０２ｋに格納され、０ビット目と８ビット目が１０番目の分割メモリ１０２ｊに格納され、１ビット目と９ビット目が９番目の分割メモリ１０２ｉに格納され、２ビット目と１０ビット目が８番目の分割メモリ１０２ｈに格納され、３ビット目と１１ビット目が７番目の分割メモリ１０２ｇに格納されるように、「キーデータ選択ビット」が設定されている。【０２６３】
このように、本実施例において、入力された１２ビットのキーデータは、２４ビットに拡張され、追加分割メモリを含む合計１２個の分割メモリに分散して格納される。このため、６個の追加分割メモリには、６個の分割メモリに格納されるビットデータが重複して格納される。なお、このビットデータの重複は所望の値に設定でき、それにより追加用ＳＲＡＭの個数も任意に設定することができる。【０２６４】
次に、検索メモリマット１０２に対する書き込み動作を具体的に説明する。
エントリアドレス“００”に書き込まれるべきデータとして入力されたキーデータ“２６９９”は、バイナリデータで表わすと“１０  １０  １０  ００  １０  １１”となる。そして、上述のとおり「キーデータ選択ビット」に従って、入力されたキーデータに、追加分割メモリに格納すべきビットデータを重複して追加する。すなわち、１２ビットのキーデータに、１２ビットのデータを下位ビットとして追加する。これにより、追加後のキーデータを“１０  １０  １０  ００  １０  １１  １１  ００  １１  ０１  １０  ００”（２４ビット）とする。この値を１２分割された検索メモリマット１０２のｙ軸のアドレスとして、検索メモリマット１０２にデータを書き込む。この際、検索メモリマットに書き込まれるデータは、キーデータ“２６９９”のエントリアドレスとして入力された“００”である。【０２６５】
図４４（ａ）に示されるように、１２ビットのキーデータ“２６９９”の下位に、キーデータ選択ビットに従った１２ビットが追加される。これにより、キーデータ“２６９９”は、２４ビットで表現される。そして、このデータは、１２分割されて、“１０”“１０”“１０”“００”“１０”“１１”“１１”“００”“１１”“０１”“１０”“００”として表わされる。制御回路１０５は、これらの１２個の分割キーデータをアドレスとして、１２個の分割マット１０２ａ〜１０２ｌに対して、エントリアドレス“００”を書き込む。つまり、最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａに対し、エントリアドレス“００”が書き込まれる。次に、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂに、エントリアドレス“００”が書き込まれる。さらに、３番目の分割キーデータ“１０”をアドレスとして、３番目の分割メモリ１０２ｃに、エントリアドレス“００”が書き込まれる。同様に、４番目から６番目の分割キーデータ“００”“１０”“１１”をアドレスとして、４番目から６番目の分割メモリ１０２ｄ〜１０２ｆにエントリアドレス“００”が書き込まれる。さらに、同じように、７番目から１２番目の分割キーデータ“１１”“００”“１１”“０１”“１０”“００”をアドレスとして、７番目から１２番目の分割メモリ１０２ｇ〜メモリ１０２ｌの６個の追加分割メモリにも、エントリアドレス“００”が書き込まれる。
これにより、キーデータ“２６９９”で指定された検索メモリマット１０２に、エントリアドレス“００”が書き込まれたことになる。【０２６６】
同様にして、エントリアドレス“０１”に書き込まれるべきデータとして入力されたキーデータ“２６９１”は、バイナリで表わすと“１０  １０  １０  ００  ００  １１”となる。そして、上述のとおりキーデータ選択ビットに従って、入力されたキーデータに追加分割メモリに格納すべきビットデータを重複して追加する。つまり、１２ビットのキーデータに、１２ビットのデータを下位ビットとして追加する。追加後のキーデータは、“１０  １０  １０  ００  ００  １１  １０  ００  １１  ０１  １０  ００”（２４ビット）となる。この２４ビットのキーデータを、１２個の分割キーデータに分割する。そして、この分割キーデータを１２分割された検索メモリマット１０２のｙ軸にアクセスするためのアドレスとして、検索メモリマット１０２にデータを書き込む。この際、検索メモリマット１０２に書き込まれるデータは、エントリアドレスとして入力された“０１”である。【０２６７】
図４４（ｂ）では、キーデータ“２６９１”に、上記のとおりキーデータ選択ビットに従って１２ビットが下位に追加され、その後１２分割されて、“１０”“１０”“１０”“００”“００”“１１”“１０”“００”“１１”“０１”“１０”“００”として表わされる。これらの分割キーデータをアドレスとして、分割された検索メモリマット１０２に対して、エントリアドレス“０１”が書き込まれる。つまり、最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａにエントリアドレス“０１”が書き込まれる。この際、既に、キーデータ“２６９９”の書き込みによって、分割メモリ１０２ａのアドレスには、エントリアドレス“００”が書き込まれており、アドレスの衝突が生じる。図４４（ｂ）において、塗りつぶして示された部分が衝突の生じている部分であり、この衝突の生じた部分において、分割キーデータは、「配慮しない（don’t care）」として処理される。図４４（ｂ）では、さらに、２番目の分割キーデータ“１０”をアドレスとして、２番目の分割メモリ１０２ｂにエントリアドレス“０１”を書き込む。また、３番目から６番目の分割キーデータ“１０”“００”“００”“１１”をアドレスとして、それぞれ、３番目から６番目の分割メモリ１０２ｃ、１０２ｄ、１０２ｅ、１０２ｆに、エントリアドレス“０１”を書き込む。ただし、２番目から４番目と６番目のアドレスは既に、キーデータ“２６９９”の書き込みによって使用されているため、「配慮しない（don’t care）」として処理される。続いて、７番目から１２番目の分割キーデータ“１０”“００”“１１”“０１”“１０”“００”をアドレスとしてそれぞれ、７番目から１２番目の６個の追加分割メモリ１０２ｇ〜１０２ｌの６個に、エントリアドレス“０１”を書き込む。ただし、８番目から１２番目のアドレスも既に、分割キーデータ“２６９９”の書き込みによって使用されているため、「配慮しない（don’t care）」として処理される。【０２６８】
これにより、キーデータ“２６９１”で指定された分割メモリに、エントリアドレス“０１”が書き込まれたことになる。同様にして、キーデータ“１８５９”“１４４０”をアドレスとして、検索メモリマット１０２にエントリアドレス“１０”“１１”を書き込む。図４４（ｃ）に示されるように、キーデータ“１８５９”の書き込みによっては、４番目から６番目、９番目の分割メモリでアドレスの衝突が生じている。また、図４４（ｄ）に示されるように、キーデータ“１４４０”では、１、３、５、７、８、１２番目の分割メモリでアドレスの衝突が生じている。【０２６９】
図４４（ｅ）は、確認メモリマット（ＳＲＡＭ）１０４の書き込み状態を示している。
図４４（ｅ）に示されるように、確認メモリマットには、エントリアドレス“００”にキーデータ”２６９９”のバイナリデータが書き込まれ、エントリアドレス“０１”にキーデータ“２６９１”のバイナリデータが書き込まれ、エントリアドレス“１０”にキーデータ“１８５９”のバイナリデータが書き込まれ、エントリアドレス”１１”にキーデータ“１４４０”のバイナリデータが書き込まれている。【０２７０】
図４５は、本発明の［実施例６］における検索メモリマット１０２の検索動作を示している。図４５は、図４４に示したアドレスの重なった部分、つまり、濃く網掛けされたエントリを「配慮しない（don’t care）」とした場合に、入力データが正しく検索されているか否かを表わしている。【０２７１】
図４５（ａ）では、検索データとしてキーデータ“２６９９”が入力された場合を示している。キーデータ“２６９９”は、バイナリデータ“１０  １０  １０  ００  １０  １１”で表わされる。そして、図４４で説明したとおり、キーデータ選択ビットに従い、１２ビットのキーデータに、１２ビットのデータを下位ビットとして追加する。追加後のキーデータは、“１０  １０  １０  ００  １０  １１  １１  ００  １１  ０１  １０  ００”（２４ビット）となる。この分割キーデータは、１２分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａのデータであるエントリアドレスを読み出すと、アドレス衝突が生じているため、「配慮しない（don’t care）」処理を行なう。よって、分割メモリマット１０２ａからの読み出しデータは検索の対象外とされる。２番目の以降の分割キーデータについても同様に、これらの分割キーデータをアドレスとして、検索メモリマット１０２からエントリアドレスを読み出す。ここで、５番目の分割キーデータ“１０”をアドレスとして、５番目の分割メモリ１０２ｅからデータを読み出すとエントリアドレス“００”が読み出される。また、７番目の分割キーデータ“１１”をアドレスとして、７番目の分割メモリマット１０２ｇを読み出すとエントリアドレス“００”が得られる。その他の分割キーデータについては、「配慮しない（don’t care）」処理によって検索の対象外とされる。【０２７２】
図４５（ａ）に示されるように、検索データとしてのキーデータ“２６９９”によって検索メモリマット１０２から読み出されるデータの内、検索に使用されるデータは、５番目の分割メモリ１０２ｅと７番目の分割メモリ１０２ｇの出力であるエントリアドレス“００”ということになる。【０２７３】
確認メモリマット１０４を用いて、エントリアドレス“００”をアドレスとしてアクセスされるキーデータの値を読み出すと、“１０  １０  １０  ００  １０  １１”となり、検索データとしてのキーデータと一致することが分かる。つまり、制御回路１０５は、確認メモリマット１０４からの出力データであるキーデータと検索データを比較して一致することを確認した上で、エントリアドレスを出力する。【０２７４】
図４５（ｂ）は、検索データとしてキーデータ“１８５９”が入力された場合を示している。キーデータ“１８５９”は“０１  １１  ０１  ００  ００  １１”で表わされる。そして、図４４で説明したとおり、キーデータ選択ビットに従って、１２ビットのキーデータに、１２ビットのデータを下位ビットとして追加する。追加後のキーデータは、“０１  １１  ０１  ００  ００  １１  ００  １０  １１  １１  ００  １０”（２４ビット）となる。これらの分割キーデータは、１２分割された検索メモリマット１０２のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“０１”をアドレスとして、最初の分割メモリ１０２ａのデータを読み出すが、アドレス衝突が生じているため、「配慮しない（don’t care）」処理を行なうようにされている。よって、最初の分割キーデータは、検索の対象外となる。２番目の分割キーデータ“１１”をアドレスとして、２番目の分割メモリ１０２ｂからデータを読み出すと、エントリアドレス“１０”が読み出される。３番目の分割キーデータ”０１”をアドレスとして、３番目の分割メモリ１０２ｃからデータを読み出すと、エントリアドレス“１０”が得られる。【０２７５】
４番目の“００”、５番目の“００”、６番目の“１１”、７番目の“００”、８番目の“１０”、９番目の“１１”をそれぞれアドレスとした分割メモリへのアクセスは、配慮しない（don’t care）」処理によって、検索の対象外となる。また、１０番目の分割キーデータ“１１”をアドレスとして、１０番目の分割メモリ１０２ｊからデータを読み出すと、エントリアドレス“１０”が読み出される。１１番目の分割キーデータ“００”をアドレスとして、１１番目の分割メモリ１０２ｋからデータを読み出すと、エントリアドレス“１０”が読み出される。また、１２番目の分割キーデータ“１０”をアドレスとして、１２番目の分割メモリ１０２ｌからデータを読み出すと、エントリアドレス“１０”が得られる。【０２７６】
図４５（ｂ）で示したように、検索データとしてのキーデータ“１８５９”によって検索メモリマット１０２から読み出される値は、分割された２番目の分割メモリ１０２ｂ、３番目の分割メモリ１０２ｃ、１０番目の分割メモリ１０２ｊ、１１番目の分割メモリ１０２ｋ、及び１２番目の分割メモリ１０２ｌの出力であるエントリアドレス“１０”ということになる。【０２７７】
確認メモリマット１０４を用いて、エントリアドレス“１０”によりアクセスされるキーデータの値を読み出すと、“０１  １１  ０１  ００  ００  １１”となり、検索データとしてのキーデータと一致することが分かる。つまり、制御回路１０５は、確認メモリマット１０４からの出力データであるキーデータが検索データと比較して一致することを確認した上で、エントリアドレスを出力する。【０２７８】
図４５（ｃ）は、検索データとしてのキーデータとして“２６９１”が入力された場合を示している。検索データとしてキーデータ“２６９１”は、バイナリデータ“１０  １０  １０  ００  ００  １１”で表わされる。そして、図４４で説明したとおりキーデータ選択ビットに従って、１２ビットのキーデータに、１２ビットのデータを下位ビットとして追加する。追加後のキーデータは、“１０  １０  １０  ００  ００  １１  １０  ００  １１  ０１  １０  ００”（２４ビット）となる。分割キーデータは、１２分割された検索メモリマット１０２’のｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。最初の分割キーデータ“１０”をアドレスとして、最初の分割メモリ１０２ａのデータを読み出すと、アドレス衝突しているため「配慮しない（don’t care）」処理が行なわれる。２番目の”１０”、３番目の“１０”、４番目の“００”、５番目の“００”、６番目の“１１”をアドレスとして、各分割メモリ１０２ｂ、１０２ｃ、１０２ｄ、１０２ｅ、１０２ｆのデータを読み出すと、アドレス衝突しているため「配慮しない（don’t care）」処理が行なわれる。【０２７９】
続いて７番目の分割キーデータ“１０”をアドレスとして、７番目の分割メモリ１０２ｇからデータを読み出すと、エントリアドレス“０１”が読み出さる。他方、８番目の“００”、９番目の“１１”、１０番目の“０１”、１１番目の“１０”、１２番目の“００”をアドレスとして、各分割メモリのデータを読み出すと、アドレス衝突しているため「配慮しない（don’t care）」処理が行なわれて、検索の対象外とされる。【０２８０】
図４５（ｃ）で示したように、検索データとしてのキーデータ“２６９１”によって検索メモリマット１０２から読み出される値は、７番目の分割メモリ１０２ｇの出力のエントリアドレス“０１”ということになる。【０２８１】
確認メモリマット１０４を用いて、エントリアドレス“０１”によりアクセスされるキーデータの値を読み出すと、“１０  １０  １０  ００  ００  １１”となり、検索データとしてのキーデータと一致することが分かる。つまり、制御回路１０５は、確認メモリマット１０４からの出力データであるキーデータが検索データと比較して一致することを確認して、エントリアドレスを出力する。【０２８２】
ここで、図４５（ｃ）を用いて、仮に検索メモリマット１０２を分割メモリ１０２ａ〜１０２ｆの６個に分割した場合を考える。この場合、検索データとしてのキーデータ“２６９１”が入力されると、この“２６９１”はバイナリデータ“１０  １０  １０  ００  ００  １１”で表わされる。分割キーデータは、６分割された検索メモリマットのｙ軸に割り当てられた「エントリアドレスを登録する場所」にアクセスするためのアドレスとしてそれぞれ用いられる。１番目の“１０”、２番目の“１０”、３番目の“１０”、４番目の“００”、５番目の“００”、６番目の“１１”をアドレスとして各分割メモリのデータを読み出すと、いずれもアドレス衝突しているため「配慮しない（don’t care）」処理が行なわれる。このため、この条件において、検索メモリマット１０２を分割メモリ１０２ａ〜１０２ｆの６個に分割するだけでは不十分であり、検索メモリマットから検索結果を出力することが不可能となる。【０２８３】
よって、本実施例によれば、上述のようにして分割メモリの数を増加することで、衝突頻度を低減することができる、また、本実施例によれば、検索結果を出力することができる可能性を高めることができる。【０２８４】
以上、本発明を実施例に沿って説明したが、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。つまり、上記した実施例は本発明を分かりやすくするために、本発明の内容を詳細に説明したものである。従って、本発明は、上記説明した全ての構成を備えるものに限定されるものではない。
例えば、上記の説明では、本発明の半導体装置をＳＲＡＭによって構成した例を説明したが、本発明は他のメモリ回路でも同様に実現可能である。特に、本発明としては、高速不揮発性メモリ、例えばＭＲＡＭを好適に用いることができる。
【符号の説明】
【０２８５】
１０１：近接キャッシュメモリマット
１０２、１００２：検索メモリマット
１０２ａ、１０２ｂ、１０２ｃ、…、１０２ｌ：分割メモリ
１０３：比較ラッチ回路
１０４、１００４：確認用メモリ
１０５：制御回路
１０５１：入力部
１０５２：分割部
１０５３：書込部
１０５４：衝突情報記憶部
１０５５：読出部
１０５６：確認部
１０５７：出力部
１０６：符号化回路
【要約】
【課題】低電力性と高速検索の機能とを実現する新規の半導体装置及びそれを用いた方法を提供する。
【解決手段】本発明の半導体装置は、ｙ軸方向にエントリアドレスを登録する場所が割り当てられ、ｘ軸方向にキーデータが割り当てられる構成を持つ検索メモリマット１０２と、検索メモリマットに接続された制御回路１０５と、を備える。検索メモリマットは、キーデータが割り当てられる領域をｙ軸方向に沿って複数に分割することにより、複数の分割メモリが形成されている。制御回路は、キーデータが入力される入力部１０５１と、入力部に入力されたキーデータを複数に分割する分割部１０５２と、分割部が分割したキーデータのそれぞれを当該分割したキーデータをアドレスとして分割メモリに割り当てて、当該分割したキーデータのそれぞれに対応するエントリアドレスを当該分割メモリに書き込む書込部１０５３と、を有する。
【選択図】図６【図１】
0005575997.tif 000008
【図２】
0005575997.tif 000009
【図３】
0005575997.tif 000010
【図４】
0005575997.tif 000011
【図５】
0005575997.tif 000012
【図６】
0005575997.tif 000013
【図７】
0005575997.tif 000014
【図８】
0005575997.tif 000015
【図９】
0005575997.tif 000016
【図１０】
0005575997.tif 000017
【図１１】
0005575997.tif 000018
【図１２】
0005575997.tif 000019
【図１３】
0005575997.tif 000020
【図１４】
0005575997.tif 000021
【図１５】
0005575997.tif 000022
【図１６】
0005575997.tif 000023
【図１７】
0005575997.tif 000024
【図１８】
0005575997.tif 000025
【図１９】
0005575997.tif 000026
【図２０】
0005575997.tif 000027
【図２１】
0005575997.tif 000028
【図２２】
0005575997.tif 000029
【図２３】
0005575997.tif 000030
【図２４】
0005575997.tif 000031
【図２５】
0005575997.tif 000032
【図２６】
0005575997.tif 000033
【図２７】
0005575997.tif 000034
【図２８】
0005575997.tif 000035
【図２９】
0005575997.tif 000036
【図３０】
0005575997.tif 000037
【図３１】
0005575997.tif 000038
【図３２】
0005575997.tif 000039
【図３３】
0005575997.tif 000040
【図３４】
0005575997.tif 000041
【図３５】
0005575997.tif 000042
【図３６】
0005575997.tif 000043
【図３７】
0005575997.tif 000044
【図３８】
0005575997.tif 000045
【図３９】
0005575997.tif 000046
【図４０】
0005575997.tif 000047
【図４１】
0005575997.tif 000048
【図４２】
0005575997.tif 000049
【図４３】
0005575997.tif 000050
【図４４】
0005575997.tif 000051
【図４５】
0005575997.tif 000052