(57)【要約】      （修正有）【課題】検索処理の低消費電力性を維持しつつ，書込容量の拡大，メモリの小型化，及び書込処理の高速化を実現する。【解決手段】検索メモリマットを構成する複数の分割メモリのメモリ空間に，書込対象のキーデータに対応するエントリアドレスを書き込む半導体装置であって，分割データのそれぞれを分割メモリに割り当てて，当該分割データをアドレスとして，当該分割メモリのメモリアドレスによって特定されるメモリ空間に，当該分割データに対応するエントリアドレスを順次書き込む（第１書込処理）。この第１書込処理において，アクセスしたメモリ空間に，既に他のエントリアドレスが書き込まれている場合には，当該メモリ空間には，エントリアドレスを書き込ない。複数の分割データのうち，一つの分割データに対応するエントリアドレスをメモリ空間に書き込むことに成功した場合には，第１書込処理を終了させる。【選択図】図２
2016219074.tif 000002
【特許請求の範囲】
【請求項１】
メモリアドレスによって特定されるメモリ空間に，キーデータに対応するエントリアドレスが書き込まれる検索メモリマット（１００）と，
前記検索メモリマット（１００）に接続された制御回路（２００）と，を備えた
半導体装置であって，
前記検索メモリマット（１００）は，
メモリ空間が，メモリアドレスを保持したまま，複数の分割メモリ（１１０ａ，１１０ｂ…）に区分されたものであり，
前記制御回路（２００）は，
キーデータが入力される入力部（２１０）と，
前記入力部（２１０）に入力されたキーデータを複数の分割データに分割する分割部（２２０）と，
書込部（２３０）と，を有し，
前記書込部（２３０）は，
前記分割部（２２０）で分割された複数の分割データのそれぞれを，複数の分割メモリ（１１０ａ，１１０ｂ…）に割り当てて，当該分割データをアドレスとして，当該分割メモリ（１１０ａ，１１０ｂ…）のメモリアドレスによって特定されるメモリ空間に，当該分割データに対応するエントリアドレスを順次書き込んでいく第１書込処理を行うものであり，
前記書込部（２３０）は，
前記第１書込処理において，
ある分割データに対応するエントリアドレスを書き込むべきメモリ空間に，既に他の分割データに対応するエントリアドレスが書き込まれている場合には，当該メモリ空間に，エントリアドレスを書き込まず，
複数の分割データのうち，一つの分割データに対応するエントリアドレスをメモリ空間に書き込むことに成功した場合には，前記第１書込処理を終了させる
半導体装置。
【請求項２】
請求項１に記載の半導体装置であって，
前記制御回路（２００）に接続された確認用メモリ（３００）を，さらに備え，
前記書込部（２３０）は，
前記入力部（２１０）に入力されたキーデータとこれに対応するエントリアドレスとを関連付けて前記確認用メモリ（３００）に書き込む第２書込処理をさらに行う
半導体装置。
【請求項３】
請求項１に記載の半導体装置であって，
バックアップメモリ（４００）をさらに備え，
前記書込部（２３０）は，
あるキーデータから分割された複数の分割データの全てについて，それに対応するエントリアドレスをメモリ空間に書き込むことができない場合には，当該キーデータとこれに対応するエントリアドレスとを関連付けて前記バックアップメモリ（４００）に書き込む
半導体装置，
【請求項４】
請求項１に記載の半導体装置であって，
符号化回路（５００）をさらに備え，
前記符号化回路（５００）は，
前記制御回路（２００）の前記入力部（２１０）に入力されたキーデータを所定のアルゴリズムに基づいて符号化し，符号化したキーデータを前記分割部（２２０）へと入力する
半導体装置。
【請求項５】
請求項１に記載の半導体装置であって，
前記検索メモリマット（１００）が，第１の検索メモリマット（１００ａ）及び第２の検索メモリマット（１００ｂ）を含んで構成され，
前記符号化回路（５００）が，互いに符号化のアルゴリズムが異なる第１の符号化回路（５００ａ）及び第２の符号化回路（５００ｂ）を含んで構成されており，
前記制御回路（２００）の書込部（２３０）は，
前記第１の符号化回路（５００ａ）によって符号化されたキーデータに対応するエントリアドレスを前記第１の検索メモリマット（１００ａ）に書き込み，
前記第２の符号化回路（５００ｂ）によって符号化されたキーデータに対応するエントリアドレスを前記第２の検索メモリマット（１００ｂ）に書き込む，
半導体装置。
【請求項６】
請求項１に記載の半導体装置であって，
前記書込部（２３０）は，
第１のキーデータについて前記第１書込処理を行うときには，第１のキーデータを分割して得られた複数の分割データのうち，ｋ番目の分割データに対応するエントリアドレスを最初にメモリ空間に書き込み，
第２のキーデータについて前記第１書込処理を行うときには，第２のキーデータを分割して得られた複数の分割データのうち，ｋ番目以外の分割データに対応するエントリアドレスを最初にメモリ空間に書き込む
半導体装置。
【請求項７】
請求項１から請求項６のいずれかに記載の半導体装置であって，
前記制御回路（２００）は，
前記入力部（２１０）に，検索対象データとしてのキーデータが入力され，前記分割部（２２０）が，当該検索対象データとしてのキーデータを複数の分割データに分割した場合において，
前記分割データのそれぞれをアドレスとして，各分割メモリ（１１０ａ，１１０ｂ…）のメモリアドレスによって特定されるメモリ空間にアクセスし，アクセスしたメモリ空間から，当該分割データに対応するエントリアドレスを読み出す読出部（２４０）を，さらに有する
半導体装置。
【請求項８】
請求項２を引用する請求項７に記載の半導体装置であって，
前記制御回路（２００）は，
前記読出部（２４０）が読み出したエントリアドレスに対応するキーデータを，前記確認用メモリ（３００）から読み出すとともに，前記確認用メモリ（３００）から読み出したキーデータが，前記入力部（２１０）に入力された前記検索対象データとしてのキーデータと一致するか否かを確認する確認部（２５０）を，さらに有する
半導体装置。
【請求項９】
請求項３を引用する請求項７に記載の半導体装置であって，
前記確認部（２５０）によって，前記読出部（２４０）が読み出した全てのエントリアドレスに対応するキーデータと前記検索対象データとしてのキーデータとが一致しないと判定された場合，
前記読出部（２４０）は，
前記バックアップメモリ（４００）を参照して，前記検索データとしてのキーデータと一致するキーデータに対応するエントリアドレスを，前記バックアップメモリ（４００）から読み出す
半導体装置，
【請求項１０】
請求項８に記載の半導体装置であって，
前記読出部（２４０）によって複数のエントリアドレスが読み出された場合に，前記複数のエントリアドレスの中からエントリアドレスの候補を絞り込み，前記エントリアドレスの候補を前記確認部（２５０）へと送出する絞込部（２７０）を，さらに有する
半導体装置。
【請求項１１】
メモリアドレスによって特定されるメモリ空間に，キーデータに対応するエントリアドレスが書き込まれる検索メモリマット（１００）と，
前記検索メモリマット（１００）に接続された制御回路（２００）と，を備えた半導体装置（１０）に，
エントリアドレスを書き込む情報書込方法であって，
前記検索メモリマット（１００）は，
メモリ空間が，メモリアドレスを保持したまま，複数の分割メモリ（１１０ａ，１１０ｂ…）に区分されたものであり，
前記情報書込方法は，
前記制御回路（２００）にキーデータが入力される工程と，
前記制御回路（２００）が，入力されたキーデータを複数の分割データに分割する工程と，
書込工程と，を含み，
前記書込工程は，
分割された複数の分割データのそれぞれを，複数の分割メモリ（１１０ａ，１１０ｂ…）に割り当てて，当該分割データをアドレスとして，当該分割メモリ（１１０ａ，１１０ｂ…）のメモリアドレスによって特定されるメモリ空間に，当該分割データに対応するエントリアドレスを順次書き込んでいく第１書込処理と含み，
前記第１書込処理において，
ある分割データに対応するエントリアドレスを書き込むべきメモリ空間に，既に他の分割データに対応するエントリアドレスが書き込まれている場合には，当該メモリ空間に，エントリアドレスを書き込まず，
複数の分割データのうち，一つの分割データに対応するエントリアドレスをメモリ空間に書き込むことに成功した場合には，前記第１書込処理を終了させる
情報書込方法。
【請求項１２】
請求項１１に記載の情報書込方法であって，
前記半導体装置（１０）は，前記制御回路（２００）に接続された確認用メモリ（３００）を，さらに備え，
前記情報書込方法の前記書込工程は，
前記入力部（２１０）に入力されたキーデータとこれに対応するエントリアドレスとを関連付けて前記確認用メモリ（３００）に書き込む第２書込処理をさらに含む
情報書込方法。
【請求項１３】
請求項１２に記載の情報書込方法によって，前記半導体装置（１０）に対して書き込まれたエントリアドレスを読み出す情報読出方法であって，
前記制御回路（２００）に検索対象データとしてのキーデータが入力される工程と，
前記制御回路（２００）が，前記検索対象データとしてのキーデータを複数の分割データに分割する工程と，
前記制御回路（２００）が，前記分割データのそれぞれをアドレスとして，各分割メモリ（１１０ａ，１１０ｂ…）のメモリアドレスによって特定されるメモリ空間にアクセスし，アクセスしたメモリ空間から，当該分割データに対応するエントリアドレスを読み出す工程と，
読み出したエントリアドレスに対応するキーデータを，前記確認用メモリ（３００）から読み出すとともに，前記確認用メモリ（３００）から読み出したキーデータが，前記検索対象データとしてのキーデータと一致するか否かを確認する工程と，を含む
情報読出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，半導体装置，半導体装置に対するエントリアドレスの書込方法，及び読出方法に関する。具体的に説明すると，本発明の半導体装置は，データの書込時及び検索時における消費電力を低減させることを図った連想メモリ（ＣＡＭ：Content Addressable Memory）などに関するものである。
【背景技術】
【０００２】
近年，クラウドコンピューティングの時代となり，インターネットスイッチやルータの高性能化や消費電力の低減が緊急の課題であるとされている。また，インターネットの検索エンジンとしては，より高速かつ低消費電力で確実な検索操作を行うことができるものが求められている。このような要求に応えるために，近年，インターネットスイッチや検索エンジンでは，ＣＡＭを使用することが多くなってきている。
【０００３】
ここで，一般的なＣＡＭは，ＣＡＭ内に記憶されているデータ検索を行う際に，キーデータと呼ばれる検索データが入力される。そして，ＣＡＭは，キーデータと同じデータがメモリに記憶されている場合に，そのキーデータが記憶されているメモリのアドレス（番地）を出力する。このときのアドレスは，エントリアドレスとも呼ばれる。一般的に，このような検索機能を実現するためには，ＣＡＭ内の全メモリ空間へのアクセスが必要となり，回路構成が複雑になるだけではなく，消費電力が大きくなるという問題があった。特に，この消費電力が大きくなるという問題は，ＣＡＭの規模に伴って大きくなるものであるため，現在では非常に深刻な問題であるとされている。
【０００４】
このような問題に対し，例えば特許文献１では，ＣＡＭの高速検索性を活かしつつ，低消費電力化を図ることを目的としたデータ検索装置が提案されている。特許文献１のデータ検索装置は，プライオリティが決められた複数のルールデータを，その大小の順序に応じて新たに順序付けし，その順序に応じて複数のメモリブロックに割り当てる。また，この検索装置は，データの検索を行う際には，検索すべき一つのメモリブロックを指定して検索処理を実行する。このように，特許文献１のデータ検索装置は，検索処理を行う際に，指定された一つのブロックのみをアクティブにし，他のブロックをアクティブにする必要がないことから，その分，通常のＣＡＭと比較して検索時の消費電力を低減することができるとされている。
【０００５】
しかしながら，上記特許文献１に開示されたデータ検索装置は，通常のメモリと比較して検索時の消費電力を低減することが可能であるものの，検索処理を実行するためには，一度にブロック内の全メモリ空間にアクセスする必要がある。このため，従来のデータ検索装置は，回路構成が複雑であるとともに，検索時における消費電力が大きいという問題を有していた。このように，上記特許文献１の技術は，現在の問題に対する根本的な解決策を提示するものではなかった。
【０００６】
そこで，高速かつ低消費電力でのデータ検索を実現するために，本発明者らによって，新規な半導体装置（ＣＡＭ）が提案されている（特許文献２）。この新規なＣＡＭは，メモリアドレスによって特定されるメモリ空間にキーデータに対応するエントリアドレスが書き込まれる検索メモリマットと，この検索メモリマットに接続された制御回路とを備える。検索メモリマットは，メモリ空間が，メモリアドレスを保持したまま，複数の分割メモリに区分されている。ＣＡＭに対して，検索メモリマットに書き込むためのキーデータが入力されると，制御回路は，このキーデータを複数の分割データに分割する。そして，制御回路は，複数の分割データのそれぞれを，複数の分割メモリに割り当てて，各分割データをアドレスとして，各分割メモリのメモリアドレスによって特定されるメモリ空間に，当該分割データに対応するエントリアドレスを書き込んでいく。このようにして，検索メモリマットに，複数のキーデータに対応するエントリアドレスが書き込まれていく。
【０００７】
また，検索メモリマットに書き込まれたキーデータを検索する処理は，書込処理と同様のステップで行われる。つまり，ＣＡＭに対して，検索対象データとしてのキーデータが入力されると，制御回路は，この検索対象データとしてのキーデータを複数の分割データに分割していく。そして，制御回路は，分割データのそれぞれをアドレスとして，各分割メモリのメモリアドレスによって特定されるメモリ空間にアクセスし，アクセスしたメモリ空間から，当該分割データに対応するエントリアドレスを読み出す。
【０００８】
このようにして，本発明者により開発された新規なＣＡＭでは，キーデータが複数に分割され，この分割されたキーデータのそれぞれに対応するエントリアドレスが，分割メモリに記憶される。このため，このエントリアドレスを検索する際には，検索メモリマット全体を一度にアクティブに（活性化）させる必要はなく，検索メモリマットを分割メモリごとに部分的にアクティブにさせて検索することが可能となる。従って，このＣＡＭによれば，従来のＣＡＭと同様の高速性でデータ検索を実現しつつ，従来のＣＡＭよりも極めて低い消費電力でデータ検索を実行することができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−１８５７９２号公報
【特許文献２】特許第５５７５９９７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ところで，特許文献２に開示されたＣＡＭは，書込処理を行う際に，基本的には，キーデータを分割して得られた分割データの全てについて，これに対応するエントリアドレスを検索メモリマットのメモリ空間に書き込むこととしている。例えば，１４４ｂｉｔのキーデータを８ｂｉｔずつ１８分割する設定の場合，特許文献２のＣＡＭは，最大で，そのキーデータに対応するエントリアドレスを，検索メモリマットを構成する１８個の分割メモリに書き込む必要がある。しかしながら，特許文献２のＣＡＭにおいて，１８個の分割メモリに書き込まれるエントリアドレスはすべて同じデータである。このように，特許文献２のＣＡＭでは，一つのキーデータを検索メモリマットに書き込む際に，同じエントリアドレスを複数箇所に書き込む必要がある。このため，一つのキーデータの書き込みに利用するメモリ空間の容量が比較的大きくなり，検索メモリマットマットに書き込むことのできるキーデータの数が十分ではないという課題があった。また，特許文献２のＣＡＭの書込方式では，検索メモリマットのサイズが大きくなる傾向にあり，ＣＡＭ自体を小型化させることが難しいという課題もある。
【００１１】
さらに，特許文献２のＣＡＭにおいて，一つのキーデータを検索メモリマットに書き込むためには，基本的に，このキーデータを複数の分割データに分割し，複数の分割データのすべてを分割メモリに割り当てて，それに対応するエントリアドレスを一つ一つ書き込んでいく必要がある。しかし，複数の分割データのすべてについてそれに対応するエントリアドレスを書き込む処理を行うと，書込処理に遅延が生じるため，多数のキーデータを初期登録する際に比較的時間がかかるという課題があった。
【００１２】
このように，特許文献２のＣＡＭは，極めて低い消費電力でキーデータの検索処理が可能であるというメリットがあるものの，書込容量（検索容量），メモリのサイズ，書込処理の速度などの点において，改良の余地があるとされていた。
【００１３】
そこで，本発明は，検索処理の低消費電力性を維持しつつ，書込容量（検索容量）の拡大，メモリの小型化，及び書込処理の高速化を実現することのできる，ＣＡＭ等半導体装置を提供することを解決課題とする。
【課題を解決するための手段】
【００１４】
本発明は，基本的に，ある書込対象のキーデータから分割された複数の分割データのうち，一つの分割データに対応するキーデータの書き込みに成功した場合には，それ以降の分割データについてはキーデータの書き込み処理を行わないようにすることで，検索メモリマットに対するキーデータの書込処理を効率化させることができるという知見に基づくものである。本発明によれば，書込容量（検索容量）を拡大させることができ，さらには，メモリの小型化及び書込処理の高速化を実現できる。具体的に説明すると，本発明は以下の構成・工程を有する。
【００１５】
本発明の第１の側面は，ＣＡＭ等の半導体装置に関する。
本発明の半導体装置は，検索メモリマット１００と，制御回路２００と，確認用メモリ３００と，を備える。検索メモリマット１００は，メモリアドレス（ＭＡ）によって特定されるメモリ空間に，キーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）が書き込まれる記憶装置である。制御回路２００は，検索メモリマットに接続されており，検索メモリマットに対するデータの書込処理及び読出処理を行う。確認用メモリ３００は，制御回路に接続された記憶装置であり，この制御回路の制御を受ける。
検索メモリマット１００は，そのメモリ空間が，メモリアドレスを保持したまま，複数の分割メモリ１１０ａ，１１０ｂ…に区分されている。
制御回路２００は，キーデータが入力される入力部２１０と，この入力部に入力されたキーデータを複数の分割データに分割する分割部２２０と，書込部２３０と，を有する。
書込部２３０は，少なくとも，下記に説明する第１書込処理を実行する。
つまり，第１書込処理は，分割部で分割された複数の分割データのそれぞれを，複数の分割メモリに割り当てて，当該分割データをアドレスとして，分割メモリのメモリアドレスによって特定されるメモリ空間に，当該分割データに対応するエントリアドレスを順次書き込んでいく処理である。
ここで，書込部２３０は，第１書込処理において，ある分割データに対応するエントリアドレスを書き込むべきメモリ空間に，既に他の分割データに対応するエントリアドレスが書き込まれている場合には，当該メモリ空間に，エントリアドレスを書き込まない。
さらに，書込部２３０は，複数の分割データのうち，一つの分割データに対応するエントリアドレスをメモリ空間に書き込むことに成功した場合には，第１書込処理を終了させ，それ以降の分割データについては書込処理を行わない。
【００１６】
上記構成のように，本発明の半導体装置は，一つの書込対象のキーデータについて，一つのエントリアドレスをメモリ空間に書き込むことに成功した場合には，第１書込処理を終了させて，それ以降は書込処理を行わないこととしている。このため，ある一つのキーデータの書込処理では，一つのメモリアドレスのみが検索メモリマットのメモリ空間に書き込まれる。上述のとおり，特許文献２の半導体装置では，ある一つのキーデータの書込処理において，複数のメモリアドレスが検索メモリマットのメモリ空間に書き込まれていた。これと比較し，本発明の半導体装置は，一つのキーデータの書込処理で使用するメモリ空間の容量を少なくすることができる。これにより，本発明は，検索メモリマット内に登録可能なキーデータの数を増やすことができ，書込容量を拡大することができる。また，本発明の半導体装置は，検索メモリマットのメモリ空間を効率的に利用できるため，メモリのサイズを小型化することが可能である。さらに，本発明の半導体装置は，一つのエントリアドレスをメモリ空間に書き込むことに成功した時点で書込処理を終了させるものであるため，書込処理の高速化を図ることができる。
【００１７】
本発明の半導体装置において，書込部２３０は，さらに，制御回路２００に接続された確認用メモリ３００を備えることが好ましい。この場合に，書込部２３０は，下記に説明する第２書込処理をさらに実行するものであることが好ましい。つまり，第２書込処理は，入力部２１０に入力されたキーデータとこれに対応するエントリアドレスとを関連付けて確認用メモリ３００に書き込む処理である。
【００１８】
上記構成のように，書込部２３０の第２書込処理によって，書込対象のキーデータとこれに対応するエントリアドレスとを関連付けて確認用メモリ３００に書き込んでおく。これにより，後述する読出処理において，検索メモリマット１００から複数のエントリアドレスが読み出されたような場合に，どのエントリアドレスが正しいものであるかを，確認用メモリ３００を参照することによって決定することが可能となる。
【００１９】
本発明の半導体装置は，バックアップメモリ４００をさらに備えることが好ましい。
また，書込部２３０は，あるキーデータから分割された複数の分割データの全てについて，それに対応するエントリアドレスをメモリ空間に書き込むことができない場合には（「全衝突」が発生した場合），当該キーデータとこれに対応するエントリアドレスとを関連付けてバックアップメモリ４００に書き込むことが好ましい。
【００２０】
上記構成のように，バックアップメモリ４００を設けて，エントリアドレスの全衝突が発生した場合には，この全衝突したエントリアドレスとキーデータとを関連付けてバックアップメモリ４００に格納する。これにより，検索メモリマット内にエントリアドレスを書き込むことができなくなるという事態を回避できる。ただし，本発明では，一つのキーデータにつき一つのエントリアドレスを検索メモリマット内に記録するものであるため，検索メモリマット内でエントリアドレスの衝突（全衝突）が発生する確率は，比較的低いものとなっている。なお，書込処理において全衝突が発生しバックアップメモリ４００にキーデータを書き込む場合，上記の確認用メモリ３００にはこれと同じキーデータを書き込む必要はない。つまり，バックアップメモリ４００にキーデータを書き込む場合，確認用メモリ３００にキーデータを書き込まなくてもよいし，書き込んでもよい。
【００２１】
本発明の半導体装置は，符号化回路５００をさらに備えることが好ましい。
符号化回路５００は，制御回路２００の入力部２１０に入力されたキーデータを所定のアルゴリズムに基づいて符号化し，符号化したキーデータを分割部２２０へと入力する回路である。
【００２２】
上記構成のように，符号化回路５００は，キーデータを符号化することで，その数値を分散させることができる。キーデータの値を分散させることで，例えば，ほぼ同内容のキーデータが複数個連続して入力された場合であっても，エントリアドレスの書込処理の際に，メモリ空間内でエントリアドレスの衝突が発生する確率を低下させることができる。これにより，エントリアドレスの効率的な書込処理が可能となる。
【００２３】
本発明の半導体装置は，上記した検索メモリマット１００が，第１の検索メモリマット１００ａ及び第２の検索メモリマット１００ｂを含んで構成されていることが好ましい。また，本発明の半導体装置は，上記した符号化回路５００が，互いに符号化のアルゴリズムが異なる第１の符号化回路５００ａ及び第２の符号化回路５００ｂを含んで構成されていることが好ましい。
この場合に，制御回路２００の書込部２３０は，まず，第１の符号化回路５００ａによって符号化されたキーデータに対応するエントリアドレスを，第１の検索メモリマット１００ａに書き込む。同時に，制御回路２００の書込部２３０は，第２の符号化回路５００ｂによって符号化されたキーデータに対応するエントリアドレスを，第２の検索メモリマット１００ｂに書き込む。
【００２４】
上記構成のように，書込部２３０は，ある一つのキーデータに対応するエントリアドレスを，少なくとも第１の検索メモリマット１００ａと第２の検索メモリマット１００ｂの両方に書き込む。このように書込部２３０は，ミラーリング書込処理を行う。さらに，あるキーデータを第１の検索メモリマット１００ａと第２の検索メモリマット１００ｂに書き込む際に，第１の符号化回路５００ａ及び第２の符号化回路５００ｂを利用して，別々のアルゴリズムで符号化（分散）させる。これにより，エントリアドレスの書込処理の際に，メモリ空間内でエントリアドレスの衝突が発生する確率をさらに低下させることができる。
【００２５】
本発明の半導体装置において，書込部２３０は，第１のキーデータについて第１書込処理を行うときには，第１のキーデータを分割して得られた複数の分割データのうち，ｋ番目の分割データに対応するエントリアドレスを最初にメモリ空間に書き込む。
この場合に，書込部２３０は，第２のキーデータについて第１書込処理を行うときには，第２のキーデータを分割して得られた複数の分割データのうち，ｋ番目以外の分割データに対応するエントリアドレスを最初にメモリ空間に書き込むことが好ましい。
【００２６】
上記構成のように，書込部２３０は，エントリアドレスの書込処理を行う分割データの順番を異ならせることで，検索メモリマット内のメモリ空間を効率的に利用することができる。つまり，書込対象のキーデータを複数の分割データに分割した後に，必ず１番目の分割データからエントリアドレスの書込処理を開始する設定であると，この１番目の分割データに対応する分割メモリにばかりエントリアドレスが書き込まれることとなり，メモリ空間の書込済領域に偏りが生じる。これに対して，例えば，書込対象のキーデータを１８分割する場合に，第１のキーデータについては１番目の分割データからエントリアドレスの書込処理を開始し，第２のキーデータについては１８番目の分割データからエントリアドレスの書込処理を開始するなど，書込処理の順番を異ならせることで，メモリ空間を広く効率的に利用できる。
【００２７】
本発明の半導体装置の制御回路２００は，さらに，検索対象のキーデータが入力された場合に，このキーデータに対応するエントリアドレスを読み出すための読出部２４０を備える。
読出部２４０は，入力部２１０に，検索対象データとしてのキーデータが入力され，分割部２２０が，当該検索対象データとしてのキーデータを複数の分割データに分割した場合において，分割データのそれぞれをアドレスとして，各分割メモリのメモリアドレスによって特定されるメモリ空間にアクセスする。そして，このアクセスしたメモリ空間から，分割データに対応するエントリアドレスを読み出す。
【００２８】
上記構成のように，検索対象のキーデータを分割して得られた分割データのそれぞれをアドレスとして分割メモリのメモリ空間にアクセスし，このアクセスしたメモリ空間に記憶されているエントリアドレスを読み出す。これにより，検索メモリマット内のすべてのメモリ空間をアクティブとすることなく，必要な部位のみをアクティブにすれば足りるようになるため，検索処理での消費電力を低減させることができる。
【００２９】
本発明の半導体装置の制御回路２００は，読出部２４０によって読み出されたエントリアドレスが適切なものであるか否かを確認するための確認部２５０を，さらに備える。
この確認部２５０は，まず，読出部２４０が読み出した一又は複数のエントリアドレスをキーとして，このエントリアドレスに対応するキーデータを，確認用メモリ３００から読み出す。そして，確認部２５０は，このようにして確認用メモリ３００から読み出したキーデータが，入力部２１０に入力された検索対象データとしてのキーデータと一致するか否かを確認する。
【００３０】
本発明の半導体装置では，上述したとおり，キーデータに対応するエントリアドレスの書込処理を行うにあたり，一つの分割データについてエントリアドレスの書き込みに成功した場合には，それ以降の分割データについてはエントリアドレスの書き込みを行わない。このため，上記した読出部２４０によってエントリアドレスの読出処理を行ったときに，複数の異なるエントリアドレスが読み出されることが想定される。このように，複数の異なるエントリアドレスが読み出されると，検索対象のキーデータに対応するエントリアドレスを決定することができない。そこで，上記構成のように確認部２５０を設けて，読出部２４０が読み出した複数のエントリアドレスのそれぞれについて，確認用メモリ３００を参照して，各エントリアドレスに対応するキーデータが，検索対象として入力されたキーデータと一致するかどうかの確認処理を行う。これにより，検索対象として入力されたキーデータと一致するエントリアドレスを，一意に決定することができる。
【００３１】
本発明の半導体装置では，確認部２５０によって，読出部２４０が読み出した全てのエントリアドレスに対応するキーデータと検索対象データとしてのキーデータとが一致しないと判定される場合がある。この場合に，読出部２４０は，バックアップメモリ４００を参照して，検索データとしてのキーデータと一致するキーデータに対応するエントリアドレスを，バックアップメモリ４００から読み出すことが好ましい。
【００３２】
上述したように，書込処理において，エントリアドレスの全衝突が発生した場合には，この全衝突したエントリアドレスとキーデータとを関連付けてバックアップメモリ４００に格納している。このため，確認部２５０によって“一致なし”と判定された場合であっても，バックアップメモリ４００内に，検索データとしてのキーデータと一致するキーデータが記憶されている可能性がある。そこで，このような場合には，読出部２４０はバックアップメモリ４００を参照することが好ましい。
【００３３】
本発明の半導体装置は，さらに，絞込部２７０を有することが好ましい。絞込部２７０は，読出部２４０によって複数のエントリアドレスが読み出された場合に，複数のエントリアドレスの中からエントリアドレスの候補を絞り込み，エントリアドレスの候補を確認部２５０へと送出する。なお，絞込部２７０によって絞り込まれたエントリアドレスの候補の数は，読出部２４０によって読み出されたエントリアドレスの数よりも少なくなる。
【００３４】
上記構成のように，本発明の読出処理においては，読出部２４０によって複数のエントリアドレスが読み出される場合がある。この場合，複数のエントリアドレスのそれぞれについて，確認用メモリ３００を照合すれば，検索対象のキーデータに対応するエントリアドレスを一意に定めることができる。しかしながら，読出部２４０によって読み出されたエントリアドレスが多いと，確認用メモリ３００を逐一参照していたのでは，読出処理の遅延を招くおそれがある。そこで，読出部２４０と確認部２５０の間に，絞込部２７０を配置する。そして，この絞込部２７０によって，読出部２４０が読み出した複数のエントリアドレスの中から，それよりも少ない候補を絞り込む処理を行い，絞込後のエントリアドレスを確認部２５０へと送出する。これにより，確認部２５０によって確認用メモリ３００を参照する回数が減少するため，検索処理の高速化を図ることができる。
【００３５】
本発明の第２の側面は，上記した第１の側面に係る半導体装置によって実行される情報書込方法に関する。
本発明の情報書込方法は，前記制御回路２００にキーデータが入力される工程と，制御回路２００が入力されたキーデータを複数の分割データに分割する工程と，書込工程と，を含む。
書込工程では，分割された複数の分割データのそれぞれを，複数の分割メモリ１１０ａ，１１０ｂ…に割り当てて，当該分割データをアドレスとして，当該分割メモリ１１０ａ，１１０ｂ…のメモリアドレスによって特定されるメモリ空間に，当該分割データに対応するエントリアドレスを順次書き込んでいく第１書込処理を行う。
ここで，第１書込処理において，ある分割データに対応するエントリアドレスを書き込むべきメモリ空間に，既に他の分割データに対応するエントリアドレスが書き込まれている場合には，当該メモリ空間に，エントリアドレスを書き込まない。
さらに，第１書込処理において，複数の分割データのうち，一つの分割データに対応するエントリアドレスをメモリ空間に書き込むことに成功した場合には，この第１書込処理を終了させる。
【００３６】
また，書込工程では，さらに，入力されたキーデータとこれに対応するエントリアドレスとを関連付けて確認用メモリ３００に書き込む第２書込処理を行うことが好ましい。
【００３７】
本発明の第３の側面は，上記した第２の側面に係る情報書込方法によって，半導体装置１０に対して書き込まれたエントリアドレスを読み出す情報読出方法に関する。
本発明の情報読出方法は，制御回路２００に検索対象データとしてのキーデータが入力される工程と，制御回路２００が検索対象データとしてのキーデータを複数の分割データに分割する工程を含む。
さらに，本発明の情報読出方法は，制御回路２００が，分割データのそれぞれをアドレスとして，各分割メモリ１１０ａ，１１０ｂ…のメモリアドレスによって特定されるメモリ空間にアクセスし，アクセスしたメモリ空間から，当該分割データに対応するエントリアドレスを読み出す工程を含む。さらに，読み出したエントリアドレスに対応するキーデータを，確認用メモリ３００から読み出すとともに，確認用メモリ３００から読み出したキーデータが，検索対象データとしてのキーデータと一致するか否かを確認する工程を含む。
【発明の効果】
【００３８】
本発明によれば，検索処理の低消費電力性を維持しつつ，書込容量（検索容量）の拡大，メモリの小型化，及び書込処理の高速化を実現することができる。
【図面の簡単な説明】
【００３９】
【図１】図１は，本発明に係る半導体装置の機能ブロックを示している。
【図２】図２は，本発明に係る半導体装置におけるデータの流れ図を示している。
【図３】図３は，本発明に係る情報書込方法のメインフローを示している。
【図４】図４は，本発明に係る情報書込方法のサブフローを示している。
【図５】図５は，基本的な書込処理の例を示している。
【図６】図６は，衝突が発生した場合の書込処理の例を示している。
【図７】図７は，全衝突が発生した場合の書込処理の例を示している。
【図８】図８は，本発明に係る情報読出方法のメインフローを示している。
【図９】図９は，本発明に係る情報読出方法のサブフローを示している。
【図１０】図１０は，基本的な読出処理の例を示している。
【図１１】図１１は，不一致が発生した場合の読出処理の例を示している。
【図１２】図１２は，符号化処理の一例を示している。
【図１３】図１３は，符号化処理の他の例を示している。
【図１４】図１４は，書込処理の他の例を示している。
【図１５】図１５は，エントリアドレスの候補の絞り込みを行う読出処理の例を示している。
【図１６】図１６は，書込処理の第１の改良例を示している。
【図１７】図１７は，書込処理の第２の改良例を示している。
【図１８】図１８は，書込処理の第３の改良例を示している。
【発明を実施するための形態】
【００４０】
以下，図面を用いて本発明を実施するための形態について説明する。本発明は，以下に説明する形態に限定されるものではなく，以下の形態から当業者が自明な範囲で適宜修正したものも含む。
【００４１】
図１は，半導体装置１０の主たる機能構成を示した機能ブロック図である。また，図２は，半導体装置１０による処理の流れを示した流れ図である。さらに，図３〜図７は，半導体装置１０によるエントリアドレスの書込処理の例を示しており，図８〜図１１は，半導体装置１０によるエントリアドレスの読出処理（検索処理）の例を示している。
【００４２】
図１に示されるように，半導体装置１０は，基本的に，検索メモリマット１００と制御回路２００と，確認用メモリ３００を備える。加えて，半導体装置１０は，バックアップメモリ４００及び符号化回路５００を備えることが好ましい。制御回路２００は，検索メモリマット１００，確認用メモリ３００，及びバックアップメモリ４００に接続されており，各メモリ１００，３００，４００に対して所定のデータ（情報）を書き込んだり読み出したりする情報処理を総合的に制御する機能を担っている。特に，制御回路２００は，検索メモリマット１００に対するデータの書込処理及び読出処理が主たる機能となる。また，制御回路２００には，符号化回路５００が組み込まれていてもよい。この場合，制御回路２００は，符号化回路５００を経由したデータに基づいて，各メモリ１００，３００，４００に対して，データの書込処理及び読出処理を行う。
【００４３】
検索メモリマット１００は，メモリアドレス（ＭＡ）によって特定されるメモリ空間（Ｄ）に，キーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）が書き込まれる記憶装置（メモリ）である。検索メモリマット１００は，エントリアドレス（ＥＡ）を書き込むためのメモリ空間（Ｄ）が，メモリアドレス（ＭＡ）を保持したまま，複数の分割メモリ１１０ａ，１１０ｂ…に区分された構成となっている。例えば，検索メモリマット１００及び複数の分割メモリ１１０ａ，１１０ｂ…の例は，図５〜図７，図１０，及び図１１などに示されている。
【００４４】
まず，図５を参照して，簡単に，検索メモリマット１００と，それに記憶されるエントリアドレス（ＥＡ）及びキーデータ（ＫＤ）の関係について説明する。図５に示されるように，検索メモリマット１００は，ｙ軸方向に沿って複数のメモリアドレス（ＭＡ）が順番に割り当てられており，このメモリアドレス（ＭＡ）によってメモリ空間（Ｄ）のアドレス（番地）が特定されている。メモリ空間（Ｄ）は，ｘ軸方向に沿ってデータを記憶する領域を有している。この検索メモリマット１００は，複数の分割メモリ１１０ａ，１１０ｂ…に区分されている。複数の分割メモリ１１０ａ，１１０ｂ…は，メモリアドレス（ＭＡ）と，それによって特定されるメモリ空間（Ｄ）を保持している。また，複数の分割メモリ１１０ａ，１１０ｂ…のメモリアドレス（ＭＡ）は，それぞれ共通している。つまり，分割メモリ１１０ａ，１１０ｂ…のそれぞれは，メモリアドレス（ＭＡ）とそれによって特定されるメモリ空間（Ｄ）とが一対一で対応付けられた構成となっている。このように，検索メモリマット１００は，複数の分割メモリ１１０ａ，１１０ｂ…に区分されたものと考えることができる。言い換えると，複数の分割メモリ１１０ａ，１１０ｂ…の集合によって，検索メモリマット１００が構築されている。
【００４５】
本発明の半導体装置１０は，連想メモリ（ＣＡＭ：Content Addressable Memory）として利用することができる。つまり，半導体装置１０は，検索メモリマット１００に，キーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を書き込む。その後又はこれと同時に，半導体装置１０は，エントリアドレス（ＥＡ）と対応付けてキーデータ（ＫＤ）を確認用メモリ３００に書き込む。他方，半導体装置１０に対して，検索対象としてのキーデータ（ＫＤ）を入力すると，半導体装置１０は，このキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を読み出して出力する。つまり，「キーデータ」とは，半導体装置１０に記憶される所望のデータを意味する。また，「エントリアドレス」とは，キーデータ（ＫＤ）が記憶されているメモリ（具体的には確認用メモリ３０）の場所（アドレス）を示すメタデータを意味している。
【００４６】
図５に示された例において，エントリアドレス（ＥＡ）は，１６進法２桁で表される８ｂｉｔのデータとして定義されている。８ｂｉｔのエントリアドレス（ＥＡ）は，００〜ＦＦの値をとる。半導体装置１０は，１つのエントリアドレス（ＥＡ）に対応付けて，１つのキーデータ（ＫＤ）を記憶するものである。つまり，１つのキーデータ（ＫＤ）に対し，１つのエントリアドレス（ＥＡ）が割り当てられる。このため，エントリアドレス（ＥＡ）が８ｂｉｔの情報である場合，半導体装置１０には２５６のキーデータ（ＫＤ）を記憶することが可能となる。従って，エントリアドレスが８ｂｉｔに設定されている半導体装置１０は，総エントリ数が２５６エントリとなる。なお，本発明において，エントリアドレス（ＥＡ）は，２ｂｉｔ以上のデータであれば問題ない。例えば，エントリアドレス（ＥＡ）は，３ｂｉｔ，４ｂｉｔ，６ｂｉｔ，又は８ｂｉｔ以上とすることもできる。また，エントリアドレス（ＥＡ）のｂｉｔ数は，検索メモリマット１００のメモリアドレス（ＭＡ）のｂｉｔ数と一致していることが好ましい。図５に示した例では，エントリアドレス（ＥＡ）とメモリアドレス（ＭＡ）は，共に，８ｂｉｔに設定されている。
【００４７】
また，図５に示された例において，半導体装置１０に入力されたキーデータ（ＫＤ）は，１４４ｂｉｔのデータに設定されている。１４４ｂｉｔのキーデータ（ＫＤ）を，エントリアドレス（ＥＡ）のｂｉｔ数に対応するように８ｂｉｔごとに分割すると，１８個のデータ（分割データ）に分割できる（１４４ｂｉｔ÷８ｂｉｔ＝１８）。ここで，本発明の半導体装置１０において，検索メモリマット１００を構成する分割メモリ１１０ａ，１１０ｂ…の数は，少なくともキーデータの分割数（１８）以上必要とされる。なお，キーデータ（ＫＤ）のｂｉｔ数は，１４４ｂｉｔに限定されるものではなく，必要に応じて適宜調整可能である。また，キーデータ（ＫＤ）を複数の分割データに分割するにあたり，キーデータ（ＫＤ）のｂｉｔ数を割る数は，エントリアドレス（ＥＡ）のｂｉｔ数であることが好ましい。つまり，（分割メモリの数）≧（ＫＤのｂｉｔ数）÷（ＥＡのｂｉｔ数）となることが好ましい。
【００４８】
また，図５に示された例において，各分割メモリ１１０ａ，１１０ｂ…のメモリアドレス（ＭＡ）は，それぞれ，８ｂｉｔで定義されたデータ（情報）である。つまり，図５に示された例では，キーデータ（ＫＤ）から分割された分割データと，メモリアドレス（ＭＡ）とは，それぞれ８ｂｉｔに設定されている点で共通している。このように，分割データとメモリアドレス（ＭＡ）のｂｉｔ数は一致していることが好ましい。なお，上述のとおり，メモリアドレス（ＭＡ）のｂｉｔ数は，エントリアドレス（ＥＡ）のｂｉｔ数とも一致する。
【００４９】
このように，本発明の半導体装置１０において，検索メモリマット１００は，エントリアドレス（ＥＡ）を書き込むためのメモリ空間（Ｄ）が，メモリアドレス（ＭＡ）を保持したまま，複数の分割メモリ１１０ａ，１１０ｂ…に区分された構成となっている。各分割メモリは，例えば，ＳＲＡＭ（Static Random Access Memory）などの記憶装置を用いて構成することができる。つまり，検索メモリマット１００は，分割メモリ１１０ａ，１１０ｂ…として機能する複数のＳＲＡＭによって構築することができる。この意味において，本発明は，複数のＳＲＡＭを利用して実現したＣＡＭであるということができる。本発明のように，複数のＳＲＡＭを用いて実現したＣＡＭを，ＳＲＡＭ−ＣＡＭと称することもできる。
【００５０】
また，図５に示された例のように，半導体装置１０に記憶可能なキーデータ（ＫＤ）の数（総エントリ数）を２５６エントリと定めた場合，この２５６エントリを識別するために必要なエントリアドレス（ＥＡ）のｂｉｔサイズは，８ｂｉｔになる。また，半導体装置１０に入力されるキーデータのｂｉｔサイズが１４４ｂｉｔであるとした場合，これをエントリアドレス（ＥＡ）のｂｉｔ数８で割ると１８となる。このような条件を想定すると，分割メモリ１１０ａ，１１０ｂ…の数は，少なくとも１８以上必要となる。
【００５１】
本発明の半導体装置１０において，最低限必要となる分割メモリ１１０ａ，１１０ｂ…の数Ｎ（検索メモリマット１００の分割数Ｎ）は，以下の式により求めることができる。
（式）Ｎ＝Ｌ／ｌｏｇ２・Ｍ
Ｌ：キーデータ長（ｂｉｔ数）
Ｍ：総エントリ数
Ｎ：分割メモリの最小個数（検索メモリマットの分割数）
【００５２】
続いて，図１〜図７を参照して，半導体装置１０による書込処理及び読出処理について説明する。なお，図１及び図２に示された符号化回路５００による符号化処理については，後ほど詳しく後述する。まずは，この符号化処理を除き，半導体装置１０による基本的な書込処理について説明を行う。
【００５３】
図１に示されるように，本実施形態に係る制御回路２００は，入力部２１０，分割部２２０，書込部２３０，読出部２４０，確認部２５０，出力部２６０，及び絞込部２７０を有している。これらの要素２１０〜２７０は，制御回路２００の機能を概念的に分類して示したものである。すなわち，制御回路２００は，これらの機能的要素２１０〜２７０を利用して，検索メモリマット１００に対しエントリアドレス（ＥＡ）を書き込んだり，検索メモリマット１００に記憶されているエントリアドレス（ＥＡ）を読み出したりする処理を行う。また，図２には，制御回路２００の各要素による情報処理のフローが一覧的に示されている。
【００５４】
まず，制御回路２００により行われるエントリアドレス（ＥＡ）の書込処理を説明する。基本的な書込処理のメインフローは，図３に示されている。また，図３に示したメインフローのうち，検索メモリマット１００にエントリアドレス（ＥＡ）を書き込む処理（ステップＳ５）の具体的なフローが，図４に示されている。さらに，書込処理の具体例が，図５〜図７に示されている。ここでの書込処理とは，新しいキーデータ（ＫＤ）を半導体装置１０に記憶する処理である。この半導体装置１０では，新しい書込対象のキーデータ（ＫＤ）に対応したエントリアドレス（ＥＡ）を検索メモリマット１００に書き込む処理が行われる。
【００５５】
図３に示されるように，書込処理においては，まず，書込対象のキーデータが，半導体装置１０に入力される（ステップＳ１）。ここで，図２に示されるように，書込対象のキーデータは，制御回路２００の入力部２１０に入力されることとなる。書込対象のキーデータが制御回路２００の入力部２１０に入力されると，この入力部２１０は，キーデータを分割部２２０及び書込部２３０へと送出する。また，入力部２１０は，入力されたキーデータを，符号化回路５００を経由して，分割部２２０へと送出することとしてもよい。なお，符号化回路５００による処理（ステップＳ２）については，詳しくは後述する。このように，入力部２１０は，制御回路２００における入力インターフェースとして機能する。
【００５６】
続いて，分割部２２０は，書込対象のキーデータを，複数の分割データへと分割する（ステップＳ３）。例えば，分割部２２０は，検索メモリマット１００を構築する分割メモリ１１０ａ，１１０ｂ…の数と等しい数にキーデータを分割することが好ましい。つまり，分割部２２０がキーデータを分割する分割数ｎは，検索メモリマット１００を構築する分割メモリ１１０ａ，１１０ｂ…の数Ｎと等しいことが好ましい。これにより，分割部２２０によって複数に分割したキーデータ（分割データ）の全てを，それぞれ順番に，複数の分割メモリ１１０ａ，１１０ｂ…に対して割り当てていくことができる。例えば，図５に示した例において，半導体装置１０には，１４４ｂｉｔのキーデータが入力されることが想定されている。また，各キーデータに割り当てられるエントリアドレスのｂｉｔ数は，８ｂｉｔであり，分割メモリの数は１８となっている。このような条件において，分割部２２０は，１４４ｂｉｔのキーデータを，８ｂｉｔ毎に１８個の分割データへと分割することが好ましい。分割部２２０によって，１４４ｂｉｔのキーデータは，８ｂｉｔずつ，１８個の分割データに変換される。なお，分割部２２０による分割条件は，分割メモリの数や，エントリアドレスのｂｉｔ数，キーデータのｂｉｔ数などに応じて，適宜変更することが可能である。分割部２２０によって生成された複数の分割データは，書込部２３０へと送出される。
【００５７】
さらに詳しく説明すると，分割部２２０により分割された分割データのビット数（α）は，検索メモリマット１００のメモリアドレス（ＭＡ）のビット数（β）と等しいことが好ましい（α＝β）。例えば，図５などに示されるように，検索メモリマット１００のメモリアドレス（ＭＡ）が８ｂｉｔで表される場合には，分割部２２０は，キーデータ（ＫＤ）を８ｂｉｔの分割データに分割することが好ましい。また例えば，検索メモリマット１００のメモリアドレス（ＭＡ）が，２ｂｉｔで表される場合には，分割部２２０は，キーデータ（ＫＤ）を２ｂｉｔの分割データに分割することが好ましい。これにより，後の処理において，分割部２２０が分割した分割データのそれぞれを，当該分割データをアドレスとして，検索メモリマット１００を構築する分割メモリに適切に割り当てることができる。
【００５８】
図１に示されるように，書込部２３０は，検索メモリマット１００を構築する複数の分割メモリ１１０ａ，１１０ｂ…や，確認用メモリ３００，バックアップメモリ４００に対して，所定のデータを書き込む機能を有する。
【００５９】
図１及び図２に示されるように，半導体装置１０に対して書込対象のキーデータ（ＫＤ）が入力されると，まず，書込部２３０は，このキーデータ（ＫＤ）に対して固有のエントリアドレス（ＥＡ）を割り当てる。このエントリアドレス（ＥＡ）は，一つのキーデータ（ＫＤ）について一つ割り当てられるものである。
【００６０】
また，図１に示されるように，書込部２３０は，入力部２１０に入力された書込対象のキーデータ（ＫＤ）（分割前の状態のキーデータ）を受け取る。そして，書込部２３０は，キーデータ（ＫＤ）に一つのエントリアドレス（ＥＡ）を割り当てて，これらのキーデータ（ＫＤ）とエントリアドレス（ＥＡ）とを関連付けて，確認用メモリ３００に書き込む（ステップＳ４）。すなわち，新しい書込対象のキーデータが半導体装置１０に入力された際，書込部２３０は，この新しいキーデータに対して一つのエントリアドレスを割り当てて，新しいキーデータとエントリアドレスの対応関係を，確認用メモリ３００に記憶しておく。これにより，確認用メモリ３００には，エントリアドレス（ＥＡ）とキーデータ（ＫＤ）とが一対一で対応して記憶される。このように，確認用メモリ３００は，キーデータとエントリアドレスの対応関係を記憶しておくためのデータベースとしても機能する。また，確認用メモリ３００は，後述するように，読出処理を行う際に，制御回路２００が読み出したエントリアドレスが正しいものであるか否かの確認を行う際にも利用される。確認用メモリ３００は，ＳＲＡＭ等の公知の記憶装置によって構成することができる。
【００６１】
なお，確認用メモリ３００は，予めエントリアドレス（ＥＡ）がすべて登録されている構成であってもよい。つまり，確認用メモリ３００は，予め登録されているエントリアドレス（ＥＡ）によって空のメモリ空間が特定されており，この空のメモリ空間に対してキーデータ（ＫＤ）を書き込むことができるようになっている。例えば，書込部２３０は，キーデータ（ＫＤ）に対して割り当てられたエントリアドレス（ＥＡ）を参照して，確認用メモリ３００にアクセスする。そして，確認用メモリ３００内のエントリアドレス（ＥＡ）によって特定されるメモリ空間に，キーデータ（ＫＤ）を書き込む。このような処理によっても，結果的には，一つのエントリアドレス（ＥＡ）と一つのキーデータ（ＫＤ）とが対応付けて確認用メモリ３００に記憶されることとなる。
【００６２】
続いて，書込部２３０は，キーデータ（ＫＤ）に対して固有のエントリアドレス（ＥＡ）を割り当てた後，又は割り当てると同時に，検索メモリマット１００を構成する複数の分割メモリ１１０ａ，１１０ｂ…に対して，キーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を書き込む処理を行う（ステップＳ５）。具体的には，書込部２３０は，複数の分割データのそれぞれを分割メモリ１１０ａ，１１０ｂ…に割り当て，各分割データをアドレスとして各分割メモリ１１０ａ，１１０ｂ…のメモリ空間にアクセスし，このアクセスしたメモリ空間に，分割データに対応するエントリアドレスを順次書き込んでいく。このステップＳ５において行われる処理は，図４においてより詳しく説明されている。
【００６３】
図４のフロー図は，キーデータ（ＫＤ）をｎ個の分割データに分割し，この分割データの順序をｋ番目と定義した場合を示している。図４に示されるように，まず，“ｋ”に“１”が代入されて，ｎ個の分割データのうち１番目（最初）の分割データの処理が開始される（ステップＳ５Ａ）。
【００６４】
次に，書込部２３０は，１番目（ｋ番目）の分割データに対して固有のエントリアドレス（ＥＡ）を割り付けるとともに，この１番目の分割データをアドレスとして，分割メモリのメモリ空間にアクセスする（ステップＳ５Ｂ）。具体的には，書込部２３０は，まず，１番目（ｋ番目）の分割データを１番目（ｋ番目）の分割メモリ１１０ａに送出する。また，書込部２３０は，１番目の分割メモリ１１０ａのｙ軸に割り当てられた複数のメモリアドレス（ＭＡ）の中から，１番目の分割データと同じ値のメモリアドレス（ＭＡ）を探し出す。そして，書込部２３０は，１番目の分割メモリ１１０ａのメモリ空間のうち，１番目の分割データと同じ値を持つメモリアドレス（ＭＡ）によって特定されるメモリ空間にアクセスする。
【００６５】
続いて，書込部２３０は，１番目（ｋ番目）の分割データに基づいてアクセスしたメモリ空間に，他の分割データに対応するエントリアドレスが既に書き込まれており，エントリアドレス同士の衝突が発生するか否かを判断する（ステップＳ５Ｃ）。例えば，現在書込処理をしているキーデータの前に，別のキーデータの書込処理を行っている場合には，エントリアドレス同士の衝突が発生し得る。
【００６６】
ステップＳ５Ｃにおいて，エントリアドレスの衝突が発生していないと判断した場合，書込部２３０は，１番目（ｋ番目）の分割データに対応するエントリアドレスを，この分割データに基づいてアクセスした１番目の分割メモリ１１０ａのメモリ空間に書き込む（ステップＳ５Ｄ）。これにより，１番目（ｋ番目）の分割データに対応するエントリアドレスの書込処理が終了する。
【００６７】
ここで，本発明においては，図４に示されるように，あるキーデータ（ＫＤ）から得られた複数の分割データのうち，１つの分割データについてエントリアドレス（ＥＡ）の書き込みに成功した場合は，それ以降の分割データについては，エントリアドレス（ＥＡ）の書込処理を停止させる。このため，ステップＳ５Ｄの後には，メインフロー（図３）へと戻り，エントリアドレスの書込処理全体が終了する。このように，本発明では，１つのキーデータ（ＫＤ）について，１つのエントリアドレス（ＥＡ）のみを検索メモリマット１００内に書き込むこととしている。これにより，書込容量（検索容量）を拡大させると同時に，書込処理の高速化を図ることができる。また，書込容量の拡大により，半導体装置全体の小型化を実現できる。
【００６８】
他方，ステップＳ５Ｃにおいて，１番目（ｋ番目）の分割データに基づいてアクセスした１番目の分割メモリ１１０ａのメモリ空間に，既に他の分割データに対応するエントリアドレス（ＥＡ）が書き込まれていると判断した場合は，書込部２３０は，その１番目の分割データに対応するエントリアドレスの書込処理は行わない（ステップＳ５Ｅ）。このため，メモリ空間内には，既に書込処理を終えた他の分割データに対応するエントリアドレスのみが残ることとなる。このように，本発明では，１つのメモリ空間に１つのエントリアドレスのみを記録すれば済む。この点からも本発明では，書込処理の効率化を図ることができる。
【００６９】
ステップＳ５Ｅのように，エントリアドレスの書き込みに失敗した場合，書込部２３０は，次の分割データの書込処理を行う。つまり，上記ステップＳ５Ｅの後，書込部２３０は，“ｋ”に“１”を加えて，この“ｋ＋１”の値を“ｋ”に代入する（ステップＳ５Ｆ）。そして，書込部２３０は，ステップＳ５Ｆを経て得られた“ｋ”の値が“ｎ（キーデータの分割数）”と等しくなったか否かを確認する（ステップＳ５Ｇ）。ｋがｎ未満（ｋ＜ｎ）である場合，書込部２３０は，ステップＳ５Ｂに戻る。例えば，１番目（ｋ番目）の分割データの処理が完了した後には，２番目（ｋ＋１番目）の分割データの処理を続けて行う。このように，書込部２３０は，エントリアドレスの書き込みに成功するまで，複数の分割データを順番に処理していく。なお，図４に示した例では，説明を簡単にするために，ステップＳ５Ｆにおいて“ｋ”に“１”を加えることとしているが，例えば“ｋ”に“−１”を加えるなど，複数の分割データを１つずつ処理できるその他のアルゴリズムを採用することも可能である。
【００７０】
続いて，ステップＳ５Ｇにおいて，“ｋ＝ｎ”であると判断された場合，１つのキーデータ（ＫＤ）を分割して得られた複数の分割データのすべてについて，衝突が発生しているといえる（ステップＳ５Ｈ）。このように，エントリアドレス（ＥＡ）の書込処理で全衝突が発生している場合，書込部２３０は，検索メモリマット１００にキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を書き込むことができない。その場合，書込部２３０は，入力部２１０に入力された書込対象のキーデータ（ＫＤ）とこれに対応するエントリアドレス（ＥＡ）とを互いに関連付けて，バックアップメモリ４００に書き込む処理を行う（ステップＳ５Ｉ）。バックアップメモリ４００は，例えば図２に示されるように，キーデータ（ＫＤ）とエントリアドレス（ＥＡ）と一対一で対応付けて記憶することのできるメモリである。バックアップメモリ４００は，例えばＳＲＡＭなどの公知のメモリによって構成することができる。このように，書込部２３０は，全衝突が生じているキーデータ（ＫＤ）については，この全衝突を回避するために，検索メモリマット１００には書き込まずに，バックアップメモリ４００に書き込んでおくことが好ましい。検索メモリマット１００とは別に，バックアップメモリ４００を設けておくことで，全衝突が生じたキーデータ（ＫＤ）の書込処理が簡易になるととともに，全衝突が生じたキーデータ（ＫＤ）の検索処理（読出処理）を効率的に行うことができるようになる。なお，書込処理において全衝突が発生しバックアップメモリ４００にキーデータを書き込む場合，上記の確認用メモリ３００にキーデータを書き込む処理（ステップＳ４）を省略することもできる。つまり，バックアップメモリ４００にキーデータを書き込む場合，確認用メモリ３００にキーデータを書き込まなくてもよいし，書き込んでもよい。
【００７１】
上記のように，書込部２３０は，ステップＳ５Ａ〜Ｓ５Ｉに従い，書込対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を，検索メモリマット１００若しくはバックアップメモリ４００に書込処理を行う。その後，書込部２３０は，書込処理を終了させて，図３に示したメインフローへと戻る。
【００７２】
次に，図５〜図７を参照して，書込部２３０による書込処理について，具体例を挙げて説明する。
【００７３】
まず，図５は，基本的な書込処理の例を示している。図５に示した例では，“００＿０１＿０２＿０３＿０４＿０５＿０６＿０７＿０８＿０９＿０Ａ＿０Ｂ＿０Ｃ＿０Ｄ＿０Ｅ＿０Ｆ＿１０＿１１”という値のキーデータ（ＫＤ）が，半導体装置１０に入力される。なお，アンダーラインは便宜的に付されたものであり，本来的には存在しない。キーデータ（ＫＤ）は，１６進法で表された１４４ｂｉｔの値である。書込部２３０は，まずこのキーデータ（ＫＤ）に対して，“００”の値を持つエントリアドレス（ＥＡ）を割り当てる。エントリアドレス（ＥＡ）は，１６進法２桁で表された８ｂｉｔの値である。なお，エントリアドレス（ＥＡ）は，数値の小さいものから順に割り当てればよい。ただし，エントリアドレス（ＥＡ）は，例えば，ランダムに割り当てることとしてもよいし，空いているものを適宜順番に割り当てるようにしてもよい。
【００７４】
また，図４に示されるように，書込部２３０は，書込対象としてのキーデータ（ＫＤ）と固有のエントリアドレス（ＥＡ）とを対応付けて，これらの値を確認用メモリ３００に書き込む。これにより，確認用メモリ３００には，エントリアドレス（ＥＡ）とキーデータ（ＫＤ）とが一対一で対応付けられて記憶されることとなる。
【００７５】
また，キーデータ（ＫＤ）が半導体装置１０に入力されると，分割部２２０が，このキーデータ（ＫＤ）を複数の分割データに分割する。図５に示された例において，検索メモリマット１００のメモリアドレス（ＭＡ）及びエントリアドレス（ＥＡ）は８ｂｉｔの値である。また，検索メモリマット１００は，１８個の分割メモリ１１０ａ，１１０ｂ，…１１０ｍに区分されている。そこで，分割部２２０は，１４４ｂｉｔのキーデータ（ＫＤ）を，８ｂｉｔずつ，１８個の分割データへと分割する。このため，各分割データは，８ｂｉｔの値となる。図５に示した例において，キーデータ（ＫＤ）は，“００”“０１”“０２”“０３”“０４”“０５”“０６”“０７”“０８”“０９”“０Ａ”“０Ｂ”“０Ｃ”“０Ｄ”“０Ｅ”“０Ｆ”“１０”“１１”という１８個の分割データに分割される。
【００７６】
その後，書込部２３０は，分割部２２０によって生成された分割データを，分割メモリ１１０ａ〜１１０ｍに割り当てて，エントリアドレス（ＥＡ）を書き込んでいく。図５に示されるように，まず，書込部２３０は，１番目の分割データ“００”を１番目の分割メモリ１１０ａに割り当てる。１番目の分割メモリ１１０ａは，“００”〜“ＦＦ”の値を持つ８ｂｉｔのメモリアドレス（ＭＡ）を有している。ここで，書込部２３０は，１番目の分割データ“００”を参照して１番目の分割メモリ１１０ａのメモリアドレス（ＭＡ）“００”を指定し，このメモリアドレス“００”によって特定されるメモリ空間（Ｄ）にアクセスする。そして，書込部２３０は，メモリアドレス“００”によって特定されるメモリ空間（Ｄ）に対し，１番目の分割データ“００”に対応するエントリアドレス（ＥＡ）“００”を書き込む。図５に示した例では，１番目の分割データ“００”について，エントリアドレス（ＥＡ）“００”の書込処理に成功している。このため，２番目以降の分割データ“０１”“０２”・・・については，エントリアドレス（ＥＡ）の書込処理は行わない。従って，図５のキーデータ（ＫＤ）については，１番目の分割データ“００”のみについて，エントリアドレス（ＥＡ）の書込処理を行えばよい。
【００７７】
続いて，図６を参照して，書込処理において，エントリアドレス（ＥＡ）の「衝突」が生じる場合の例を説明する。本発明の半導体装置では，書込部２３０が，分割データをアドレスとして，その分割データに対応するエントリアドレス（ＥＡ）を，分割メモリ１１０ａ…に書き込む。このため，同じ分割メモリの同じメモリ空間に複数のエントリアドレス（ＥＡ）が書き込まれる可能性がある。このように，同じメモリ空間に複数のエントリアドレスが書き込まれようとする現象を，本願明細書では「衝突」と表現している。ここで，本発明の半導体装置は，エントリアドレス（ＥＡ）の書込処理を行うにあたり「衝突」が生じた場合に，「衝突」が発生したメモリ空間にはエントリアドレス（ＥＡ）を重ねて書き込むことはしない。書込処理において衝突が発生した場合，書込部２３０は，衝突が発生している分割データについてはエントリアドレスの書込処理をせず，次の分割データについてエントリアドレスの書込処理を開始する。
【００７８】
図６に示した例では，図５に示したキーデータ（ＫＤ）に続いて，“００＿０２＿０２＿０３＿０４＿０５＿０６＿０７＿０８＿０９＿０Ａ＿０Ｂ＿０Ｃ＿０Ｄ＿０Ｅ＿０Ｆ＿１０＿ＦＦ”という値のキーデータ（ＫＤ）が，半導体装置１０に入力される。書込部２３０は，まずこのキーデータ（ＫＤ）に対して，“０１”の値を持つエントリアドレス（ＥＡ）を割り当てる。そして，書込部２３０は，キーデータ（ＫＤ）とエントリアドレス（ＥＡ）とを対応付けて，確認用メモリ３００に登録する。
【００７９】
また，キーデータ（ＫＤ）が半導体装置１０に入力されると，分割部２２０が，このキーデータ（ＫＤ）を複数の分割データに分割する。分割部２２０は，１４４ｂｉｔのキーデータ（ＫＤ）を，８ｂｉｔずつ，１８個の分割データへと分割する。図６に示した例において，キーデータ（ＫＤ）は，“００”“０２”“０２”“０３”“０４”“０５”“０６”“０７”“０８”“０９”“０Ａ”“０Ｂ”“０Ｃ”“０Ｄ”“０Ｅ”“０Ｆ”“１０”“ＦＦ”という１８個の分割データに分割される。
【００８０】
その後，書込部２３０は，分割部２２０によって生成された複数の分割データを，それぞれ，分割メモリ１１０ａ〜１１０ｍに割り当てて，エントリアドレス（ＥＡ）を書き込んでいく。図６に示されるように，まず，書込部２３０は，１番目の分割データ“００”を１番目の分割メモリ１１０ａに割り当てて，１番目の分割データ“００”を参照して１番目の分割メモリ１１０ａのメモリアドレス（ＭＡ）“００”を指定し，このメモリアドレス“００”によって特定されるメモリ空間（Ｄ）にアクセスする。そして，書込部２３０は，このメモリ空間（Ｄ）に，１番目の分割データ“００”に対応するエントリアドレス（ＥＡ）“０１”を書き込もうとする。しかしながら，このメモリアドレス“００”によって特定されるメモリ空間（Ｄ）には，すでに，他のエントリアドレス（ＥＡ）“００”が書き込まれている（図５参照）。このため，書込部２３０は，このメモリ空間（Ｄ）に，新しいエントリアドレス（ＥＡ）“０１”を書き込むことができない。このように，一つのメモリ空間に複数のエントリアドレス（ＥＡ）が書き込まれる現象が，「衝突」である。このような「衝突」が生じている場合，書込部２３０は，１番目の分割データ“００”について，エントリアドレス（ＥＡ）“０１”を書き込まずに処理を終える。
【００８１】
次に，書込部２３０は，２番目の分割データ“０２”についてエントリアドレス（ＥＡ）“０１”を書き込む処理を開始する。つまり，書込部２３０は，２番目の分割データ“０２”を２番目の分割メモリ１１０ｂに割り当てて，２番目の分割データ“０２”を参照して２番目の分割メモリ１１０ｂのメモリアドレス（ＭＡ）“０２”を指定し，このメモリアドレス“０２”によって特定されるメモリ空間（Ｄ）に対し，２番目の分割データ“０２”に対応するエントリアドレス（ＥＡ）“０１”を書き込む。２番目の分割データ“０２”に関しては，衝突が生じていないため，２番目の分割メモリ１１０ｂに書き込むことができる。そこで，書込部２３０は，メモリアドレス“０２”によって特定されるメモリ空間（Ｄ）に対し，２番目の分割データ“０２”に対応するエントリアドレス（ＥＡ）“０１”を書き込む。このように，図６に示した例では，２番目の分割データ“０２”について，エントリアドレス（ＥＡ）“０１”の書込処理に成功している。このため，３番目以降の分割データ“０２”“０３”・・・については，エントリアドレス（ＥＡ）の書込処理は行わない。従って，図６のキーデータ（ＫＤ）については，２番目の分割データ“０２”のみについて，エントリアドレス（ＥＡ）の書込処理を行えばよいこととなる。
【００８２】
このように，書込部２３０は，衝突が発生している分割データについてはエントリアドレスの書込処理を行わない。また，書込部２３０は，エントリアドレスの書き込みに成功するまで，複数の分割データについて書込処理を行っていく。そして，エントリアドレスの書き込みに成功した場合には書込処理を終了させ，それ以降の分割データについて書込処理行わない。これにより，検索メモリマットの書込容量を拡大させるとともに，書込処理の高速化を図ることができる。
【００８３】
続いて，図７を参照して，書込処理において，エントリアドレス（ＥＡ）の「全衝突」が生じる場合の例を説明する。本発明の半導体装置１０は，上記のように，検索メモリマット１００のメモリ空間に，エントリアドレス（ＥＡ）を順次登録していく。しかし，一つのキーデータ（ＫＤ）から生成された複数の分割データの全てについて，衝突が生じる可能性も存在する。このような全衝突が生じる可能性は極めて低いものであるが，理論的には発生し得る。そこで，図７では，全衝突が発生した場合の対策を示している。
【００８４】
図７は，全衝突が発生する場合の書込処理の例を示している。図７に示した例では，ある程度複数のキーデータ（ＫＤ）の書込処理を終えた段階で，“００＿０２＿０２＿０３＿０４＿０５＿０５＿０７＿０８＿０９＿０１＿０Ｂ＿０Ｃ＿０Ｄ＿０Ｅ＿０Ｆ＿１０＿ＦＦ”という値のキーデータ（ＫＤ）が，半導体装置１０に入力される。書込部２３０は，まずこのキーデータ（ＫＤ）に対して，“ＦＦ”の値を持つエントリアドレス（ＥＡ）を割り当てる。
【００８５】
続いて，キーデータ（ＫＤ）が半導体装置１０に入力されると，分割部２２０が，このキーデータ（ＫＤ）を複数の分割データに分割する。分割部２２０は，１４４ｂｉｔのキーデータ（ＫＤ）を，８ｂｉｔずつ，１８個の分割データへと分割する。図７に示した例において，キーデータ（ＫＤ）は，“００”“０２”“０２”“０３”“０４”“０５”“０５”“０７”“０８”“０９”“０１”“０Ｂ”“０Ｃ”“０Ｄ”“０Ｅ”“０Ｆ”“１０”“ＦＦ”という１８個の分割データに分割される。
【００８６】
その後，書込部２３０は，分割部２２０によって生成された分割データを，分割メモリ１１０ａ〜１１０ｍに割り当てて，エントリアドレス（ＥＡ）を書き込んでいく。しかしながら，１番目〜１８番目の分割メモリ１１０ａ〜１１０ｍのすべてにおいて，分割データに対応するメモリ空間（Ｄ）に既に他のエントリアドレス（ＥＡ）が書き込まれている。このため，書込部２３０は，分割データに対応するエントリアドレス（ＥＡ）を検索メモリマット１００内に書き込むことができない。
【００８７】
そこで，このような全衝突が発生した場合に，書込部２３０は，全衝突が生じたキーデータ（ＫＤ）を，固有のエントリアドレス（ＥＡ）と対応付けて，バックアップメモリ４００に書き込む。バックアップメモリ４００は，例えば図２に示されるように，キーデータ（ＫＤ）とエントリアドレス（ＥＡ）と一対一で対応付けて記憶することのできるメモリである。バックアップメモリ４００は，例えばＳＲＡＭなどの公知のメモリによって構成することができる。このように，書込部２３０は，検索メモリマット１００に書き込むと全衝突が生じるキーデータ（ＫＤ）については，バックアップメモリ４００に書き込んでおくことが好ましい。検索メモリマット１００とは別に，バックアップメモリ４００を設けておくことで，全衝突が生じたキーデータ（ＫＤ）の書込処理が簡易になるととともに，全衝突が生じたキーデータ（ＫＤ）の検索処理（読出処理）を効率的に行うことができるようになる。なお，書込部２３０は，上記のように全衝突が発生しキーデータ（ＫＤ）をバックアップメモリ４００に書き込む場合には，これと同じキーデータ（ＫＤ）を確認用メモリ３００に書き込むこととしてもよいし，書き込まないこととしてもよい。確認用メモリ３００に全衝突が生じているキーデータを書き込むか否かは，任意に設計することができる。
【００８８】
続いて，図１，図２，及び図８〜図１１を参照して，半導体装置１０による基本的な読出処理（検索処理）について説明を行う。ここでの読出処理とは，検索対象のキーデータ（ＫＤ）が半導体装置１０に入力されたときに，この半導体装置１０が，検索メモリマット１００を検索して，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を読み出して出力する処理である。なお，符号化処理を含む読出処理については後ほど説明する。
【００８９】
基本的な書込処理のメインフローは，図８に示されている。また，図８に示したメインフローのうち，検索メモリマットからエントリアドレス（ＥＡ）を読み出す処理（ステップＳ９）の具体的なフローが，図９に示されている。さらに，読出処理の具体例が，図１０及び図１１に示されている。この半導体装置１０では，検索対象のキーデータ（ＫＤ）に対応したエントリアドレス（ＥＡ）を検索メモリマット１００から読み出す処理が行われる。
【００９０】
図８に示されるように，読出処理においては，まず，検索対象のキーデータが，半導体装置１０に入力される（ステップＳ６）。ここで，図２に示されるように，検索対象のキーデータは，制御回路２００の入力部２１０に入力されることとなる。検索対象のキーデータが制御回路２００の入力部２１０に入力されると，この入力部２１０は，キーデータを分割部２２０及び確認部２５０へと送出する。また，入力部２１０は，入力されたキーデータを，符号化回路５００を経由して，分割部２２０へと送出することとしてもよい。なお，符号化回路５００による処理（ステップＳ７）については，詳しくは後述する。
【００９１】
図８に示されるように，分割部２２０は，検索対象のキーデータ（ＫＤ）を，複数の分割データへと分割する（ステップＳ８）。ここで，分割部２２０が検索対象のキーデータ（ＫＤ）を分割するときの条件（アルゴリズム）は，上述した書込対象のキーデータ（ＫＤ）を分割するときの条件（アルゴリズム）と同じである。分割部２２０によって得られた複数の分割データは，読出部２４０へと送出される。
【００９２】
続いて，読出部２４０は，検索メモリマット１００から，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を読み出す処理を行う（ステップＳ９）。具体的には，読出部２４０は，複数の分割データのそれぞれを分割メモリ１１０ａ，１１０ｂ…に割り当て，各分割データをアドレスとして各分割メモリ１１０ａ，１１０ｂ…のメモリ空間にアクセスし，このアクセスしたメモリ空間に記憶されているエントリアドレス（ＥＡ）を順次読み出していく。このステップＳ９において行われる処理は，図９においてより詳しく説明されている。
【００９３】
図９では，キーデータ（ＫＤ）の分割数をｎで定義し，この分割データの順序をｋで定義している。図９に示されるように，まず，“ｋ”に“１”が代入されて，ｎ個の分割データのうち１番目（最初）の分割データの処理が開始される（ステップＳ９Ａ）。
【００９４】
次に，読出部２４０は，１番目の分割データをアドレスとして，分割メモリのメモリ空間にアクセスする（ステップＳ９Ｂ）。このステップＳ９Ｂの処理は，図４に示したステップＳ５Ｂの処理と同じである。つまり，読出部２４０は，まず，１番目（ｋ番目）の分割データを１番目（ｋ番目）の分割メモリ１１０ａに送出する。また，読出部２４０は，１番目の分割メモリ１１０ａのｙ軸に割り当てられた複数のメモリアドレス（ＭＡ）の中から，１番目の分割データと同じ値のメモリアドレス（ＭＡ）を探し出す。そして，読出部２４０は，１番目の分割メモリ１１０ａのメモリ空間のうち，１番目の分割データと同じ値を持つメモリアドレス（ＭＡ）によって特定されるメモリ空間にアクセスする。
【００９５】
その後，読出部２４０は，ステップＳ９Ｂでアクセスしたメモリ空間からエントリアドレス（ＥＡ）を読み出す（ステップＳ９Ｃ）。なお，アクセスしたメモリ空間にエントリアドレス（ＥＡ）が記憶されていない場合には，読出部２４０は何も読み出さない。若しくは，読出部２４０は“検索結果なし”という信号を生成してもよい。
【００９６】
読出部２４０は，このような読出処理を，分割メモリ１１０ａ，１１０ｂ…のすべてについて行う。つまり，上記ステップＳ９Ｃの後，読出部２４０は，“ｋ”に“１”を加えて，この“ｋ＋１”の値を“ｋ”に代入する（ステップＳ９Ｄ）。そして，読出部２４０は，ステップＳ９Ｄを経て得られた“ｋ”の値が“ｎ（キーデータの分割数）”と等しくなったか否かを確認する（ステップＳ９Ｅ）。ｋがｎ未満（ｋ＜ｎ）である場合，読出部２４０は，ステップＳ９Ｂに戻る。例えば，１番目（ｋ番目）の分割データについて読出処理が完了した後には，２番目（ｋ＋１番目）の分割データについての読出処理を続けて行う。このように，読出部２４０は，すべての分割メモリ１１０ａ，１１０ｂ…の読出処理を終えるまで，複数の分割データに基づいて読出処理を行う。なお，図９に示した例では，説明を簡単にするために，ステップＳ５Ｆにおいて“ｋ”に“１”を加えることとしているが，その他のアルゴリズムを採用することも可能である。
【００９７】
読出部２４０は，ステップＳ９Ｆにおいて，全ての分割データについて読出処理を終えたと判断した場合，つまりｋ＝ｎに達したと判断した場合，次のステップＳ９Ｆへと移行する。ステップＳ９Ｆにおいて，まず，読出部２４０は，ステップＳ９Ｂ〜ステップＳ９Ｅの処理を繰り返し行うことで読み出した一又は複数のエントリアドレス（ＥＡ）を，確認部２５０へと送出する。確認部２５０は，読出部２４０から一又は複数のエントリアドレス（ＥＡ）を受け取ると，これらのエントリアドレスをキーとして，確認用メモリ３００にアクセスする。そして，確認部２５０は，確認用メモリ３００から，これらの一又は複数のエントリアドレス（ＥＡ）と対応付けて記憶されているキーデータ（ＫＤ）を読み出す。すなわち，上述したとおり，図３に示したステップＳ４において，書込処理時に，確認用メモリ３００には，書込対象のキーデータ（ＫＤ）とエントリアドレス（ＥＡ）が対応付けて記憶されている。このため，読出処理時において，確認部２５０は，エントリアドレス（ＥＡ）をキーとしてこの確認用メモリ３００を検索すれば，このエントリアドレス（ＥＡ）に対応したキーデータ（ＫＤ）を読み出すことができる。
【００９８】
続いて，確認部２５０は，入力部２１０から検索対象のキーデータ（ＫＤ）を受け取り，ステップＳ９Ｆで確認用メモリ３００から読み出したキーデータ（ＫＤ）が，この検索対象のキーデータ（ＫＤ）と一致するかどうかを判断する（ステップＳ９Ｇ）。つまり，本発明の読出処理では，読出部２４０が検索メモリマット１００から複数のエントリアドレス（ＥＡ）の候補を読み出すことが想定される。このようにエントリアドレス（ＥＡ）の候補が複数存在すると，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を一意に定めることができない。そこで，複数のエントリアドレス（ＥＡ）の候補の中から，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を一つ決定するために，確認部２５０が存在する。この確認部２５０は，一致判定処理（ステップＳ９Ｇ）を行う。すなわち，確認部２５０は，複数のエントリアドレス（ＥＡ）の候補のそれぞれについて，確認用メモリ３００から，これらに対応する複数のキーデータ（ＫＤ）の候補を読み出す。また，確認部２５０は，複数のキーデータ（ＫＤ）の候補と入力部２１０から受け取った検索対象のキーデータ（ＫＤ）とを照合する。そして，確認部２５０は，複数のキーデータ（ＫＤ）の候補の中に，検索対象のキーデータ（ＫＤ）と一致するものが存在するかどうかを判定する。
【００９９】
ステップＳ９Ｇにおいて，確認部２５０が，複数のキーデータ（ＫＤ）の候補の中に，検索対象のキーデータ（ＫＤ）と一致するものが存在すると判定した場合，ステップＳ９Ｈに移行する。ステップＳ９Ｈでは，確認部２５０によって検索対象のキーデータ（ＫＤ）と一致すると判断されたキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を，確認部２５０から出力部２６０へと出力する（ステップＳ９Ｈ）。その読出処理は，図８のメインフローへと戻る。出力部２６０は，外部回路に接続されている。このため，出力部２６０を介して，エントリアドレス（ＥＡ）が外部回路へと出力される（ステップＳ１０）。このように，出力部２６０は，半導体装置１０の出力インターフェースとして機能する。これにより，半導体装置１０は，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を検索結果として出力することが可能となる。
【０１００】
他方，ステップＳ９Ｇにおいて，確認部２５０が，複数のキーデータ（ＫＤ）の候補の中に，検索対象のキーデータ（ＫＤ）と一致するものが存在しないと判定した場合，ステップＳ９Ｉに移行する。ステップ９Ｉでは，読出部２４０が，検索対象のキーデータ（ＫＤ）に基づいて，バックアップメモリ４００を参照する（ステップＳ９Ｉ）。その後，読出部２４０は，この参照したバックアップメモリ４００内に検索対象のキーデータ（ＫＤ）と同じキーデータが記憶されているか否かを判定する（ステップ９Ｊ）。ここで，バックアップメモリ４００内に検索対象のキーデータ（ＫＤ）と同じキーデータが記憶されている場合，読出部２４０は，そのキーデータと関連付けられているエントリアドレス（ＥＡ）を読み出す。その後，読出部２４０は，バックアップメモリ４００から読み出したエントリアドレス（ＥＡ）を出力部２６０へと出力する（ステップＳ９Ｈ）。他方で，バックアップメモリ４００内に検索対象のキーデータ（ＫＤ）と同じキーデータが記憶されていない場合，読出部２４０は，“一致データ無し”と判定する（ステップＳ９Ｋ）。つまり，“一致データ無し”とは，検索対象のキーデータ（ＫＤ）と同じキーデータ（ＫＤ）が，未だ半導体装置１０に書き込まれていないことを意味する。読出部２４０が“一致データ無し”と判定した場合，読出処理は終了する。
【０１０１】
ここで，読出部２４０と確認部２５０の間には，絞込部２７０を設けてもよい（図１参照）。つまり，上述したステップＳ９Ｆの前に，絞込部２７０によって，エントリアドレスの候補を絞り込む処理を行うこともできる。具体的に説明すると，本発明の読出処理においては，読出部２４０によって複数のエントリアドレスが読み出される場合がある。この場合，複数のエントリアドレスのそれぞれについて，確認用メモリ３００を照合すれば，検索対象のキーデータに対応するエントリアドレスを一意に定めることができる。しかしながら，読出部２４０によって読み出されたエントリアドレスが多いと，確認用メモリ３００を逐一参照していたのでは，読出処理の遅延を招くおそれがある。そこで，読出部２４０と確認部２５０の間に，絞込部２７０を配置する。そして，この絞込部２７０によって，読出部２４０が読み出した複数のエントリアドレスの中から，それよりも少ない候補を絞り込む処理を行い，絞込後のエントリアドレスを確認部２５０へと送出する。これにより，確認部２５０によって確認用メモリ３００を参照する回数が減少するため，検索処理の高速化を図ることができる。このような絞込部２７０の具体例については，図１４及び図１５を参照して後ほど詳しく説明する。
【０１０２】
次に，図１０及び図１１を参照して，読出部２４０及び確認部２５０による読出処理について，具体例を挙げて説明する。
【０１０３】
まず，図１０は，基本的な読出処理の例を示している。図１０に示した例では，“００＿０２＿０２＿０３＿０４＿０５＿０６＿０７＿０８＿０９＿０Ａ＿０Ｂ＿０Ｃ＿０Ｄ＿０Ｅ＿０Ｆ＿１０＿ＦＦ”という値のキーデータ（ＫＤ）が，検索対象として，半導体装置１０に入力される。検索対象のキーデータ（ＫＤ）が半導体装置１０に入力されると，分割部２２０が，このキーデータ（ＫＤ）を複数の分割データに分割する。図１０に示された例において，分割部２２０は，１４４ｂｉｔのキーデータ（ＫＤ）を，８ｂｉｔずつ，１８個の分割データへと分割する。このため，各分割データは，８ｂｉｔの値となる。図１０に示した例において，キーデータ（ＫＤ）は，“００”“０２”“０２”“０３”“０４”“０５”“０６”“０７”“０８”“０９”“０Ａ”“０Ｂ”“０Ｃ”“０Ｄ”“０Ｅ”“０Ｆ”“１０”“ＦＦ”という１８個の分割データに分割される。
【０１０４】
その後，読出部２４０は，分割部２２０によって生成された分割データをアドレスとして分割メモリ１１０ａ〜１１０ｍのメモリ空間（Ｄ）にアクセスし，エントリアドレス（ＥＡ）を読み出していく。図１０に示されるように，まず，読出部２４０は，１番目の分割データ“００”を１番目の分割メモリ１１０ａに割り当てて，１番目の分割データ“００”を参照して１番目の分割メモリ１１０ａのメモリアドレス（ＭＡ）“００”を指定し，このメモリアドレス（ＭＡ）“００”によって特定されるメモリ空間（Ｄ）にアクセスする。アクセスしたメモリ空間（Ｄ）には，エントリアドレス（ＥＡ）“００”が記憶されているため，読出部２４０は，このエントリアドレス（ＥＡ）“００”を読み出す。同様に，読出部２４０は，２番目の分割データ“０２”をアドレスとして，２番目の分割メモリ１１０ｂのメモリ空間（Ｄ）にアクセスし，エントリアドレス（ＥＡ）“０１”を読み出す。読出部２４０は，このような処理を全ての分割データ及び分割メモリに対して実行する。図１０に示した例では，１番目の分割メモリ１１０ａからエントリアドレス“００”が読み出され，２番目の分割メモリ１１０ｂからエントリアドレス“０１”が読み出され，３番目の分割メモリ１１０ｃからエントリアドレス“０２”が読み出され，１８番目の分割メモリ１１０ｍからエントリアドレス“ＦＥ”が読み出されている。その他の分割メモリについては，該当するメモリ空間（Ｄ）にエントリアドレスが記憶されておらず，読出部２４０は，“検索結果なし”と判断している。
【０１０５】
このように，本発明の読出処理においては，エントリアドレスが，例えば“００”“０１”“０２”“ＦＥ”のように，複数読み出されることがある。その場合，どのエントリアドレスが検索対象のキーデータに対応するものであるかを一意に定めることができない。そこで，読出部２４０が読み出した複数のエントリアドレス“００”“０１”“０２”“ＦＥ”を候補として，この中に正しいエントリアドレスが含まれているかどうかを，確認部２５０によって確認する処理を行う。
【０１０６】
具体的に説明すると，図１０に示されるように，確認部２５０は，読出部２４０によって読み出された複数のエントリアドレスの候補“００”“０１”“０２”“ＦＥ”のそれぞれをキーとして，確認用メモリ３００にアクセスする。確認用メモリ３００には，エントリアドレス（ＥＡ）一対一で関連付けて，キーデータ（ＫＤ）が記憶されている。従って，確認部２５０は，エントリアドレス（ＥＡ）の候補“００”“０１”“０２”“ＦＥ”に対応するキーデータ（ＫＤ）を，確認用メモリ３００から読み出すことができる。そして，確認部２５０は，確認用メモリ３００から読み出したキーデータ（ＫＤ）のそれぞれを，検索対象のキーデータ（ＫＤ）と比較して，互いに一致するかどうかを確認する。図１０に示した例においては，確認用メモリ３００のうち，エントリアドレス“０２”と対応付けられた記憶領域に，“００＿０２＿０２＿０３＿０４＿０５＿０６＿０７＿０８＿０９＿０Ａ＿０Ｂ＿０Ｃ＿０Ｄ＿０Ｅ＿０Ｆ＿１０＿ＦＦ”というキーデータ（ＫＤ）が記憶されている。このキーデータ（ＫＤ）は，検索対象のキーデータ（ＫＤ）と一致している。従って，確認部２５０は，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）は，“０２”であると判断することができる。そこで，確認部２５０は，キーデータ（ＫＤ）同士の一致情報とともに，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）“０２”を出力する。これにより，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を一意に定めることができる。
【０１０７】
他方で，確認部２５０が確認用メモリ３００を参照した結果，読出部２４０によって読み出されたエントリアドレスの候補の中に，検索対象のキーデータ（ＫＤ）に対応するものが存在しないと判断される場合がある。このような例が，図１１に示されている。
【０１０８】
図１１に示した例では，検索対象のキーデータ（ＫＤ）として，“００＿０２＿０２＿０３＿０４＿０５＿０５＿０７＿０８＿０９＿０１＿０Ｂ＿０Ｃ＿０Ｄ＿０Ｅ＿０Ｆ＿１０＿ＦＦ”という値が入力されている。分割部２２０は，入力されたキーデータ（ＥＤ）を１８分割する。また，読出部２４０は，複数の分割データのそれぞれを，検索メモリマット１００を構成する複数の分割メモリ１１０ａ〜１１０ｍに割り当てる。また，読出部２４０は，各分割データをアドレスとして，各分割メモリ１１０ａ〜１１０ｍのメモリ空間（Ｄ）にアクセスし，そこに記憶されているエントリアドレス（ＥＡ）を読み出す。図１１の例では，図１０に示した例では，１番目の分割メモリ１１０ａからエントリアドレス“００”が読み出され，２番目の分割メモリ１１０ｂからエントリアドレス“０１”が読み出され，３番目の分割メモリ１１０ｃからエントリアドレス“０２”が読み出され，１８番目の分割メモリ１１０ｍからエントリアドレス“ＦＥ”が読み出されている。その後，確認部２５０は，読出部２４０が読み出したエントリアドレス（ＥＡ）の候補を用いて，確認用メモリ３００を参照し，このエントリアドレスの候補に関連付けられているキーデータ（ＫＤ）を読み出す。そして，確認部２５０は，確認用メモリ３００から読み出した複数のキーデータ（ＫＤ）と，検索対象のキーデータ（ＫＤ）とを比較し，一致するかどうかを判断する。しかし，図１１の例では，確認用メモリ３００に，検索対象のキーデータ（ＫＤ）と一致するキーデータ（ＫＤ）が記憶されていない。このため，確認部２５０は，“不一致”と判断する。
【０１０９】
しかしながら，図７で示したように，キーデータに対応するエントリアドレスを書き込む際に，すべての分割メモリにおいて衝突が発生し，エントリアドレスを分割メモリ内に書き込むことができていない場合がある。このような全衝突が発生した場合，本発明では，全衝突したキーデータ（ＫＤ）とこれに対応するエントリアドレス（ＥＡ）とをバックアップメモリ４００に書き込むこととしている（図７参照）。従って，図１１に示されるように，確認部２５０において“不一致”と判断された場合においても，バックアップメモリ４００内にキーデータ（ＫＤ）が記録されている場合がある。そこで，図１１に示されるように，“不一致”と判断された場合，読出部２４０は，バックアップメモリ４００内を検索して，検索対象のキーデータと一致するキーデータが記憶されているかどうかを調査する。ここで，図１１の例では，バックアップメモリ４００内に検索対象のキーデータと一致するキーデータが記憶されており，それに対応するエントリアドレスが“ＦＦ”となっている。従って，読出部２４０は，バックアップメモリ４００内を検索することで，検索対象のキーデータに対応するエントリアドレスが“ＦＦ”であると判断できる。このため，読出部２４０は，検索結果として，エントリアドレス“ＦＦ”を出力する。
【０１１０】
上記した書込方式及び読出方式を採用することで，本発明の半導体装置１０は，最大で，検索メモリマット１００のエントリ数と同じ数だけ，キーデータ（ＫＤ）を書き込むことができる。図５等示した例では，半導体装置１０の総エントリ数が２５６エントリであるため，最大で２５６個のキーデータ（ＫＤ）を登録することができる。従って，半導体装置１０の書込容量を飛躍的に向上させることができる。
【０１１１】
次に，図１〜図３，図８，図１２及び図１３を参照して，キーデータ（ＫＤ）の符号化処理について説明する。
【０１１２】
上述したとおり，本発明の半導体装置１０は，エントリアドレス（ＥＡ）の書込処理において衝突が発生したときには，メモリ空間にエントリアドレスを書き込まないこととしている。ここで，書込対象のキーデータ（ＫＤ）に偏りがあると，データの衝突頻度が高くなり，検索不能データ列が多くなるという問題が発生する。例えば，ＩＤ番号やＩＰアドレスを降順で連続的に書き込む場合のように，ほとんど同じデータが連続して同じ検索メモリマット１００に書き込まれると，データの偏りが発生する。これにより，検索メモリマット１００内において，エントリアドレスの衝突が発生する確率が高くなる。例えば，“００＿０１＿０２＿０３”というキーデータ（ＫＤ）に続けて，“００＿０１＿０２＿０４”というキーデータ（ＫＤ）が入力されたことを考えると，２つのキーデータ（ＫＤ）の値には最後の１ｂｉｔしか違いがない。このため，後者のキーデータ（ＫＤ）の書込処理を行う際には，最後までエントリアドレスを書き込むことができない。従って，このようなデータの偏りは，防ぐことが好ましい。
【０１１３】
そこで，本発明の半導体装置１０は，図１及び図２に示されるように，キーデータ（ＫＤ）を符号化するための符号化回路５００を備える。書込処理において，符号化回路５００は，制御回路２００に入力された書込対象のキーデータ（ＫＤ）が，分割部２２０において分割される前に符号化する（図３：ステップＳ２）。同様に，読出処理において，符号化回路５００は，制御回路２００に入力された検索対象のキーデータ（ＫＤ）が，分割部２２０において分割される前に符号化する（図８：ステップＳ７）。ここにいう符号化には，キーデータの値を所定のアルゴリズムで拡散（分散）させることや，キーデータの値の順番を並び替えるような処理が含まれる。このように，ほとんど同じキーデータが続けて入力された場合であっても，これらのキーデータを符号化することにより，検索メモリマット１００に書き込まれるデータの偏りを解消することが可能となる。データの偏りが解消すれば，検索メモリマット１００内で衝突が発生する可能性を低下させることができる。その結果，正確にデータ検索を行うことのできる可能性が高まる。なお，符号化回路５００は，書込対象のキーデータ（ＫＤ）についても検索対象のキーデータ（ＫＤ）についても全く同じアルゴリズムで符号化する。これにより，書込対象のキーデータ（ＫＤ）と検索対象のキーデータ（ＫＤ）を整合させることができる。
【０１１４】
図１２は，符号化回路５００によって実行される符号化処理の一例を概念的に示している。図１２に示されるように，符号化回路５００は，書込対象／検索対象のキーデータ（１４４ｂｉｔ）を，複数の分割データ（１〜１８）に分割する。このときの分割処理は，上述した分割部２２０による処理と同じようにすればよい。その後，符号化回路５００は，複数の分割データ（１〜１８）の位置を並べ替える。このときの並べ替え処理は，一定のアルゴリズムに基づいて行われる。その後，符号化回路５００は，並べ替えられた複数の分割データの値を拡散（分散）させる。分割データの値の拡散処理は，公知の符号化アルゴリズム（暗号化アルゴリズム）に基づいて行うことができる。例えば，拡散処理を行うことで，最初に入力されたキーデータ（ＫＤ）は，ｂｉｔ数を維持したまま，異なる値に変換されることが好ましい。図１２に示された例において，最初のキーデータ（ＫＤ）と拡散処理後のデータ（拡散化データ）は，共に１４４ｂｉｔのデータであるとされている。
【０１１５】
上記のように，例えば並べ替え処理と拡散処理との組み合わせによって，符号化回路５００はキーデータ（ＫＤ）を符号化することができる。符号化されたキーデータ（拡散化データ）は，制御回路２００の分割部２２０に入力される（図１及び図２参照）。その後，図１２に示されるように，制御回路２００は，通常どおり，拡散化データを分割して，複数の分割データを生成し，各分割データをアドレスとして，検索メモリマット１００を構成する分割メモリにアクセスする。そして，制御回路２００は，アクセスした分割メモリに対してエントリアドレス（ＥＡ）を書き込む処理，又はアクセスした分割メモリからエントリアドレス（ＥＡ）を読み出す処理を行う。
【０１１６】
図１３は，符号化回路５００によって実行される符号化処理の他の例を概念的に示している。図１３に示されるように，符号化回路５００は，書込対象／検索対象のキーデータ（１４４ｂｉｔ）を複製する。例えば，図１３に示されているように，分割メモリが１８個存在する場合には，符号化回路５００は，この分割メモリの数に併せて，キーデータ（ＫＤ）を１８個複製する。複製された複数のキーデータ（ＫＤ）は同じ値を持つものである。その後，符号化回路５００は，同じ値を持つ複数のキーデータ（ＫＤ）に対して，それぞれ異なる拡散アルゴリズムに基づいた拡散処理を行う。例えば，キーデータ（ＫＤ）は１８個に複製されているため，拡散アルゴリズムも１８種類用意されている。これにより，異なる値を持つ拡散化データが得られる。このように，符号化回路５００は，１つのキーデータ（ＫＤ）から，複数（分割メモリに対応した数）の拡散化データを生成することとしてもよい。
【０１１７】
上記のように，例えば複製処理と拡散処理との組み合わせによって，符号化回路５００はキーデータ（ＫＤ）を符号化することができる。複数の拡散化データは，制御回路２００の分割部２２０に入力される（図１及び図２参照）。その後，図１３に示されるように，制御回路２００は，複数の拡散化データをそれぞれ分割して，各拡散化データから複数の分割データを生成する。また，制御回路２００は，各分割データをアドレスとして，検索メモリマット１００を構成する分割メモリにアクセスする。そして，制御回路２００は，アクセスした分割メモリに対してエントリアドレス（ＥＡ）を書き込む処理，又はアクセスした分割メモリからエントリアドレス（ＥＡ）を読み出す処理を行う。
【０１１８】
このように，符号化回路５００を設けて，書込対象のキーデータ（ＫＤ）を符号化することにより，検索メモリマット１００に書き込まれるデータの偏りを解消することができる。データの偏りが解消すれば，検索メモリマット１００内で衝突が発生する可能性を低下させることができる。その結果，正確にデータ検索を行うことのできる可能性が高まる。
【０１１９】
次に，図１４及び図１５を参照して，エントリアドレス（ＥＡ）の候補の絞り込み処理について説明する。
【０１２０】
図１４及び図１５は，エントリアドレス（ＥＡ）の読出処理において，読出部２４０によって読み出された複数のエントリアドレス（ＥＡ）の候補の中から，検索対象のキーデータ（ＫＤ）に対応する可能性が高いものを絞り込むための処理の例を示している。上述したとおり，本発明の読出方式では，読出部２４０が，検索メモリマット１００から複数のエントリアドレス（ＥＡ）の候補を読み出してくる。エントリアドレス（ＥＡ）の候補が複数存在していても，上述のとおり，逐一確認用メモリ３００を利用して照合すれば，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を一意に定めることができる。しかし，エントリアドレス（ＥＡ）の候補の数が多いと，確認用メモリ３００と照合する回数が増えるため，読出処理に遅延が発生する可能性がある。そこで，読出部２４０によって読み出された複数のエントリアドレス（ＥＡ）の候補の中から，さらに絞り込みを行い，確認用メモリ３００と照合する回数を減らすことが好ましい。
【０１２１】
図１４は，まず，書込対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を半導体装置１０に書き込む処理の概要を示している。図１４に示されるように，１つのキーデータ（ＫＤ）を書き込むための検索メモリマット１００が，第１の検索メモリマット１００ａと第２の検索メモリマット１００ｂとから構成されている。つまり，書込対象のキーデータ（ＫＤ）は，第１の検索メモリマット１００ａと第２の検索メモリマット１００ｂの両方に入力されて書き込まれる。また，符号化回路５００は，第１の検索メモリマット１００ａ用に設けられた第１の符号化回路５００ａと，第２の検索メモリマット１００ｂ用に設けられた第２の符号化回路５００ｂとから構成されている。これらの第１の符号化回路５００ａと第２の符号化回路５００ｂとは，それぞれ符号化方式（拡散式）が異なっている。つまり，第１の符号化回路５００ａは，書込対象のキーデータ（ＫＤ）を拡散式Ａにて拡散させるのに対し，第２の符号化回路５００ｂは，書込対象の（ＫＤ）を拡散式Ｂにて拡散させる。
【０１２２】
図１４に示されるように，例えば，２８８ｂｉｔのキーデータ（ＫＤ）が半導体装置１０内に入力されると，このキーデータ（ＫＤ）に固有のエントリアドレス（ＥＡ）を割り当てて，これらの関連性を確認用メモリ３００に記録する。また，エントリアドレス（ＥＡ）の割り当てられたキーデータ（ＫＤ）は，第１の符号化回路５００ａと第２の符号化回路５００ｂの両方に入力される。各符号化回路５００ａ，５００ｂは，所定のアルゴリズムによって，書込対象のキーデータ（ＫＤ）を２８８ｂｉｔ長から３６６ｂｉｔ長に拡散させる点において共通している。このように，キーデータのｂｉｔ長を長くすることで，書込処理において全衝突が発生する可能性を低減できる。他方で，各符号化回路５００ａ，５００ｂは，キーデータの拡散方式が異なる。このため，各符号化回路５００ａ，５００ｂには，同じ値のキーデータ（２８８ｂｉｔ）が入力されるが，各符号化回路５００ａ，５００ｂから出力される拡散後のキーデータは，その値が全く異なっている。ただし，各符号化回路５００ａ，５００ｂから出力される拡散後のキーデータは，ｂｉｔ長（３６６ｂｉｔ）が共通している。その後，半導体装置１０は，第１の符号化回路５００ａによって拡散されたキーデータを２４分割し，各分割データをアドレスとして，第１の検索メモリマット１００ａの適所に，エントリアドレス（ＥＡ）を書き込んでいく。同時に，半導体装置１０は，第２の符号化回路５００ａによって拡散されたキーデータを２４分割し，各分割データをアドレスとして，第２の検索メモリマット１００ｂの適所に，エントリアドレス（ＥＡ）を書き込んでいく。ここでのエントリアドレス（ＥＡ）の書込処理は，上述した方法と同じである。このようにして，図１４の実施形態において，半導体装置１０は，２つの異なる符号化回路５００ａ，５００ｂを用いて，１つのキーデータ（ＫＤ）を別々の符号化方式で符号化し，符号化後の２つのキーデータを，それぞれ２つの異なる検索メモリマット１００ａ，１００ｂに書き込んでおく。
【０１２３】
図１５に示されるように，まず，検索対象のキーデータ（ＫＤ）に対応するエントリアドレス（ＥＡ）を半導体装置１０から読み出す処理の概要を示している。図１５に示された実施形態において，半導体装置１０の制御回路２００は，さらに絞込部２７０を有している。絞込部２７０は，読出部２４０と確認部２５０の間に設けられる。絞込部２７０は，読出部２４０が第１の検索メモリマット１００ａ及び第２の検索メモリマット１００ｂから読み出したエントリアドレス（ＥＡ）の候補の中から，さらに絞り込みを行うための機能を有している。絞込部２７０は，絞り込んだエントリアドレス（ＥＡ）の候補を確認部２５０へと送出する。このため，確認部２５０は，絞込部２７０によって絞りこまれた候補についてのみ，確認用メモリ３００での照合を行えば済む。従って，エントリアドレス（ＥＡ）の検索処理を高速化させることができる。
【０１２４】
具体的に説明すると，２８８ｂｉｔの検索対象のキーデータ（ＫＤ）が半導体装置１０に入力される。検索対象のキーデータ（ＫＤ）は，第１の符号化回路５００ａ及び第２の符号化回路５００ｂにそれぞれ入力され，３６６ｂｉｔに拡散される。拡散後の２つのキーデータ（ＫＤ）は，その後，それぞれ２４分割される。読出部２４０は，第１の符号化回路５００ａを経て得られた分割データをアドレスとして，第１の検索メモリマット１００ａのメモリ空間にアクセスし，そこに記憶されているエントリアドレス（ＥＡ）を読み出す。これにより，第１の検索メモリマット１００ａから一又は複数のエントリアドレス（ＥＡ）の候補が抽出される。第１の検索メモリマット１００ａは，２４個の分割メモリから構築されている。このため，この第１の検索メモリマット１００ａから読み出され得るエントリアドレス（ＥＡ）の候補の数は，最大で２４個となる。同時に，読出部２４０は，第２の符号化回路５００ｂを経て得られた分割データをアドレスとして，第２の検索メモリマット１００ｂのメモリ空間にアクセスし，そこに記憶されているエントリアドレス（ＥＡ）を読み出す。これにより，第２の検索メモリマット１００ｂから一又は複数のエントリアドレス（ＥＡ）の候補が抽出される。この第２の検索メモリマット１００ｂから読み出され得るエントリアドレス（ＥＡ）の候補の数も，最大で２４個となる。
【０１２５】
ここで，読出部２４０は，第１の検索メモリマット１００ａ及び第２の検索メモリマット１００ｂから読み出したエントリアドレス（ＥＡ）の候補を，それぞれ絞込部２７０へと送出する。ここで，絞込部２７０は，第１の検索メモリマット１００ａから読み出されたエントリアドレス（ＥＡ）の候補と，第２の検索メモリマット１００ｂから読み出されたエントリアドレス（ＥＡ）の候補とを比較して，共通するエントリアドレス（ＥＡ）の候補を抽出する。例えば，第１の検索メモリマット１００ａから読み出されたエントリアドレス（ＥＡ）の候補に，“０１”“０２”“０３”“０４”が含まれており，第２の検索メモリマット１００ｂから読み出されたエントリアドレス（ＥＡ）の候補に，“０３”“０４”“０５”“０６”が含まれている場合，絞込部２７０は，これらの共通している“０３”“０４”のエントリアドレスの候補を抽出する。その後，絞込部２７０は，このようにして絞り込んだエントリアドレスの候補を確認部２５０へと伝達する。
【０１２６】
確認部２５０は，絞込部２７０から受け取ったエントリアドレス（ＥＡ）の候補について，確認用メモリ３００での照合を行う。つまり，確認部２５０は，エントリアドレス（ＥＡ）の候補をキーとして確認用メモリ３００にアクセスし，そのエントリアドレス（ＥＡ）と対応付けて記憶されているキーデータ（ＫＤ）を読み出し，この読み出したキーデータ（ＫＤ）が検索対象として入力されたキーデータ（ＫＤ）と一致するかどうかの照合処理を行う。そして，半導体装置１０は，確認用メモリ３００から読み出したキーデータと検索対象のキーデータが一致した場合，そのキーデータに対応するエントリアドレス（ＥＡ）を検索結果として出力することができる。
【０１２７】
上記のように，読出部２４０と確認部２５０との間に絞込部２７０を設けることで，確認部２５０が確認用メモリ３００に照合を行う回数を減らすことができる。例えば，絞込部２７０存在していない場合に，第１の検索メモリマット１００ａから読み出されたエントリアドレス（ＥＡ）の候補に，“０１”“０２”“０３”“０４”が含まれており，第２の検索メモリマット１００ｂから読み出されたエントリアドレス（ＥＡ）の候補に，“０３”“０４”“０５”“０６”が含まれていると，確認部２５０は，確認用メモリ３００に最低でも４回の照合を行う必要がある。これに対して，絞込部２７０が存在していると，エントリアドレスの候補を“０３”“０４”の２つに絞り込むことができる。絞込部２７０を設けることで，確認部２５０は，確認用メモリ３００に２回の照合を行えば済むようになる。従って，検索処理の高速化を実現することができる。
【０１２８】
なお，エントリアドレスの候補の絞り込み処理は，上述した形態に限定されない。すなわち，絞り込み処理を行うことで，読出部２４０によって読み出されたエントリアドレスの数よりも，確認部２５０によって確認用メモリ３００に照合されるエントリアドレスの数を少なくすることができればよい。このように，絞込部２７０としては，エントリアドレスの数を少なくすることのできるものであれば，どのような形態であっても採用することができる。
【０１２９】
次に，図１６〜図１８を参照して，データの偏りが生じにくい書込処理の方式例について説明する。
【０１３０】
図５〜図７を参照して説明したとおり，本発明の半導体装置１０は，書込対象のキーデータを複数の分割データに分割した後，各分割データを検索メモリマット１００を構成する複数の分割メモリ１１０ａ，１１０ｂ…に順番に割り当てて，この分割データに対応するエントリアドレス（ＥＡ）を順次書き込んでいく。このとき，一般的には，１番目の分割データから書込処理が開始され，２番目，３番目，それ以降といったように，キーデータの先頭から末尾に向かって順番に書込処理が行われる。しかし，本発明の半導体装置１０では，上述したとおり，エントリアドレスの書き込みに成功した場合には，それ以降の書込処理は行わずに書込処理を終了させる。このため，すべての書込対象のキーデータについて一律的に１番目の分割データから書込処理を開始すると，１番目の分割メモリ１１０ａにアクセスが集中する。また，すべての書込対象のキーデータについて一律的に先頭部分から書込処理を開始すると，検索メモリマット１００の前半部分の分割メモリにエントリアドレスの書込が集中し，後半部分の分割メモリに空き領域が多くなる。このように，検索メモリマット１００内においてデータの書込済み領域に偏りが生じると，書込処理の際に衝突の発生回数が増えて書込処理に遅延が生じたり，読出処理の精度が低下したり，読出処理に遅延が生じるおそれがある。そこで，以下では，データの偏りが生じにくい書込処理の方式例を説明する。
【０１３１】
図１６に示した方式では，書込処理を行う際に，先頭側から処理を行うキーデータと，末尾側から処理を行うキーデータとに分けている。具体的に説明すると，（１）の書込対象のキーデータについては，拡散符号化し，１８個の分割データに分割した後，１番目（先頭）の分割データから昇順で書込処理を行う。他方で，（２）の書込対象のキーデータについては，拡散符号化し，１８個の分割データに分割した後，１８番目（末尾）の分割データから降順で書込処理を行う。また，（３）の書込対象のデータは，１番目（先頭）の分割データから昇順で書き込み，（４）の書込対象のデータは，１８番目（末尾）の分割データから降順で書き込むこととしている。このように，図１６の書込方式では，書込対象のキーデータが入力されたときに，先頭から書き込みを開始するものと末尾から書き込みを開始するものとに分ける。これにより，検索メモリマット１００内に書き込まれるデータの偏りを解消することができる。
【０１３２】
図１７に示した方式では，検索メモリマット１００を上下２段で構成している。つまり，検索メモリマット１００は，ｙ軸方向に，上側メモリマット１００ｃと下側メモリマット１００ｄとを連結して構成されたものである。上側メモリマット１００ｃと下側メモリマット１００ｄは，それぞれ，ｘ軸方向に，１８個の分割メモリに分割されている。ここで，（１）の書込対象のキーデータについては，拡散符号化し，１８個の分割データに分割した後，上側メモリマット１００ｃに対して，１番目（先頭）の分割データから昇順で書込処理を行う。他方，（２）の書込対象のキーデータについては，拡散符号化し，１８個の分割データに分割した後，下側メモリマット１００ｄに対して，１８番目（末尾）の分割データから降順で書込処理を行う。また，（３）の書込対象のデータは，上側メモリマット１００ｃに１番目（先頭）の分割データから昇順で書き込み，（４）の書込対象のデータは，下側メモリマット１００ｄに１８番目（末尾）の分割データから降順で書き込むこととしている。このように図１７の書込方式では，上下２段のメモリマットによって検索メモリマット１００を構築し，書込対象のキーデータが入力されたときに，上側メモリマット１００ｃに書き込みを行うものと下側メモリマット１００ｄに書き込みを行うものとに分ける。これにより，検索メモリマット１００内に書き込まれるデータの偏りを解消することができる。なお，図１７では示していないが，上側メモリマット１００ｃに１８番目（末尾）の分割データから昇順で書き込みを行ったり，下側メモリマット１００ｄに１番目（先頭）の分割データから昇順で書き込みを行うことも可能である。
【０１３３】
図１８に示した方式では，書込処理を行う際に，キーデータごとに最初に書込を開始する分割データを異ならせている。図１８では，最初に書込処理を行う分割データを，符号“Ｓ”で示している。具体的に説明すると，（１）の書込対象のキーデータについては，拡散符号化し，１８個の分割データに分割した後，１番目（先頭）の分割データから昇順で書込処理を行う。また，（２）の書込対象のキーデータについては，拡散符号化し，１８個の分割データに分割した後，２番目の分割データから昇順で書込処理を行う。また，（３）の書込対象のデータは，３番目の分割データから昇順で書き込み，（４）の書込対象のデータは，４番目の分割データから昇順で書き込むこととしている。このように，図１８の書込方式では，書込対象のキーデータが入力されたときに，最初に書込処理を開始する分割データを異ならせる。これにより，検索メモリマット１００内に書き込まれるデータの偏りを解消することができる。
【０１３４】
本願明細書では，データの偏りが生じにくい書込処理の方式について，図１６から図１８に示した例を挙げたが，書込処理の方式はこれに限定されるものではない。例えば，第１のキーデータと第２のキーデータとを半導体装置１０に書き込みする場合を想定する。この場合に，第１のキーデータについて書込処理を行うときには，第１のキーデータを分割して得られた複数の分割データのうち，ｋ番目の分割データに対応するエントリアドレスを最初にメモリ空間に書き込むようにすればよい。他方，第２のキーデータについて書込処理を行うときには，第２のキーデータを分割して得られた複数の分割データのうち，ｋ番目以外の分割データに対応するエントリアドレスを最初にメモリ空間に書き込むようにすればよい。また，最初に処理する分割データ以降については，降順又は昇順で処理することとしてもよいし，１つおき又は２つおきに処理してもよい。このように，書込対象のキーデータごとに，最初に書込処理を行う分割データを変えることで，効率的に検索メモリマットに対してキーデータに対応するエントリアドレスを書き込むことが可能となる。
【０１３５】
以上，本願明細書では，本発明の内容を表現するために，図面を参照しながら本発明の実施形態の説明を行った。ただし，本発明は，上記実施形態に限定されるものではなく，本願明細書に記載された事項に基づいて当業者が自明な変更形態や改良形態を包含するものである。
【符号の説明】
【０１３６】
１０…半導体装置                      １００…検索メモリマット
１００ａ…第１の検索メモリマット      １００ｂ…第２の検索メモリマット
１００ｃ…上側メモリマット            １００ｄ…下側メモリマット
１１０…分割メモリ                    ２００…制御回路
２１０…入力部                        ２２０…分割部
２３０…書込部                        ２４０…読出部
２５０…確認部                        ２６０…出力部
２７０…絞込部                        ３００…確認用メモリ
４００…バックアップメモリ            ５００…符号化回路
【図１】
2016219074.tif 000003
【図２】
2016219074.tif 000004
【図３】
2016219074.tif 000005
【図４】
2016219074.tif 000006
【図５】
2016219074.tif 000007
【図６】
2016219074.tif 000008
【図７】
2016219074.tif 000009
【図８】
2016219074.tif 000010
【図９】
2016219074.tif 000011
【図１０】
2016219074.tif 000012
【図１１】
2016219074.tif 000013
【図１２】
2016219074.tif 000014
【図１３】
2016219074.tif 000015
【図１４】
2016219074.tif 000016
【図１５】
2016219074.tif 000017
【図１６】
2016219074.tif 000018
【図１７】
2016219074.tif 000019
【図１８】
2016219074.tif 000020