本実施形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付し、その説明は繰り返さない。
(実施形態1)
<A.ハードウェア構成>
[a1.TCAMセルの構成]
図1は、TCAMセルの構成の一例を示す回路図である。
図1を参照して、TCAMセル(メモリセルMCとも称する)は、2個のSRAMセル(Static Random Access Memory Cell)11,12と、データ比較部13とを含む。SRAMセル11をXセルとも称し、SRAMセル12をYセルとも称する。Xセル11は、内部の記憶ノード対ND1,ND1_nに互いに相補となる(一方が“1”のとき他方が“0”となる)1ビット(bit)のデータを記憶する。Yセル12は、内部の記憶ノード対ND2,ND2_nに互いに相補となる1ビットのデータを記憶する。
TCAMセルは、ビット線対BL,BL_n、サーチ線対SL,SL_n、マッチ線ML、およびワード線WLX,WLYと接続される。ビット線対BL,BL_nは、図3のTCAMセルアレイ20の列方向(Y方向)に延在し、列方向に配列された複数のTCAMセルによって共有される。サーチ線対SL,SL_nは、TCAMセルアレイ20の列方向(Y方向)に延在し、列方向に配列された複数のTCAMセルによって共有される。
マッチ線MLは、TCAMセルアレイ20の行方向(X方向)に延在し、行方向に配列された複数のTCAMセルによって共有される。ワード線WLX,WLYは、TCAMセルアレイ20の行方向(X方向)に延在し、行方向に配列された複数のTCAMセルによって共有される。
Xセル11は、インバータINV1,INV2と、NチャネルMOS(Metal Oxide Semiconductor)トランジスタQ1,Q2とを含む。インバータINV1は、記憶ノードND1_nから記憶ノードND1へ向かう方向が順方向となるように、記憶ノードND1と記憶ノードND1_nの間に接続される。インバータINV2は、INV1と並列かつ逆方向に接続される。MOSトランジスタQ1は、記憶ノードND1とビット線BLとの間に接続される。MOSトランジスタQ2は、記憶ノードND1_nとビット線BL_nとの間に接続される。MOSトランジスタQ1,Q2のゲートは、ワード線WLXと接続される。
Yセル12は、インバータINV3,INV4と、MOS(Metal Oxide Semiconductor)トランジスタQ3,Q4とを含む。インバータINV3は、記憶ノードND2_nから記憶ノードND2に向かう方向が順方向となるように、記憶ノードND2と記憶ノードND2_nの間に接続される。インバータINV4は、INV3と並列かつ逆方向に接続される。MOSトランジスタQ3は、記憶ノードND2とビット線BLとの間に接続される。MOSトランジスタQ4は、記憶ノードND2_nとビット線BL_nとの間に接続される。MOSトランジスタQ3,Q4のゲートは、ワード線WLYと接続される。
データ比較部13は、NチャネルMOSトランジスタQ6〜Q9を含む。MOSトランジスタQ6,Q7はマッチ線MLとの接続点であるノードND3と接地ノードGNDとの間に直列に接続される。MOSトランジスタQ8,Q9は、ノードND3と接地ノードGNDとの間に直列に、かつ、直列接続されたMOSトランジスタQ6,Q7の全体と並列に接続される。MOSトランジスタQ6,Q8のゲートは、記憶ノードND1,ND2とそれぞれ接続される。MOSトランジスタQ7,Q9のゲートは、サーチ線SL,SL_nとそれぞれ接続される。
図2は、図1のXセルおよびYセルの記憶内容とTCAMデータとの対応関係を表形式で示す図である。
図1および図2を参照して、TCAMセルは、2ビットのSRAMセルを用いて、“0”、“1”、“*”(ドントケア:don't care)の3値を格納することができる。具体的に、Xセル11の記憶ノードND1に“1”が格納され、Yセル12の記憶ノードND2に“0”が格納されているとき、TCAMセルには“0”が格納されているとする。Xセル11の記憶ノードND1に“0”が格納され、Yセル12の記憶ノードND2に“1”が格納されているとき、TCAMセルには“1”が格納されているとする。Xセル11の記憶ノードND1に“0”が格納され、Yセル12の記憶ノードND2に“0”が格納されているとき、TCAMセルには“*”(ドントケア)が格納されているとする。Xセル11の記憶ノードND1に“1”が格納され、Yセル12の記憶ノードND2に“1”が格納されている場合は使用しない。
上記のTCAMセルの構成によれば、サーチデータが“1”(すなわち、サーチ線SLが“1”、かつ、サーチ線SL_nが“0”)であり、TCAMデータが“0”(記憶ノードND1が“1”、かつ、記憶ノードND2が“0”)である場合には、MOSトランジスタQ6,Q7がオン状態となるために、プリチャージされたマッチ線MLの電位が接地電位まで引き抜かれる。サーチデータが“0”(すなわち、サーチ線SLが“0”、かつ、サーチ線SL_nが“1”)であり、TCAMデータが“1”(記憶ノードND1が“0”、かつ、記憶ノードND2が“1”)である場合には、MOSトランジスタQ8,Q9がオン状態となるために、プリチャージされたマッチ線MLの電位が接地電位まで引き抜かれる。すなわち、サーチデータとTCAMデータとが不一致の場合には、マッチ線MLの電位は接地電位まで引き抜かれる。
逆に、入力されたサーチデータが“1”であり、かつ、TCAMデータが“1”または“*”の場合、もしくは、サーチデータが“0”であり、かつ、TCAMデータが“0”または“*”の場合(すなわち、両者が一致する場合)、プリチャージされたマッチ線MLの電位(電源電位VDDレベル)は維持される。
上記のように、TCAMでは、1つのエントリ(行)に対応するマッチ線MLに接続された全てのTCAMセルのデータが入力サーチデータと一致しない限り、マッチ線MLに蓄えられた電荷が引き抜かれる。このため、TCAMでの検索は高速であるが、消費電流が大きいという問題がある。
[a2.サブブロックの構成]
図3は、TCAM装置を構成する1つのサブブロックの構成を示すブロック図である。
図3を参照して、サブブロック100は、TCAMセルアレイ20(単にセルアレイとも称する)と、書込ドライバ21と、サーチ線ドライバ22と、マッチアンプ部23と、制御論理回路24とを含む。サブブロック100は、さらに、図1のワード線WLX,WLYを駆動するためのワード線ドライバ(不図示)と、制御信号やアドレス信号等の入力を受ける入出力回路(不図示)と、読出回路(不図示)とを含む。
セルアレイ20は、行列状(m行;k列)に配列されたTCAMセルを含む。本例においては、セルアレイ20は、行数(エントリ数)mが256であり、列数(ビット数)kが32の場合が示されている。
セルアレイ20の各列に対応して、k個(k=32)のビット線対(BL[0],BL_n[0]からBL[k−1],BL_n[k−1]まで)と、k個(k=32)のサーチ線対(SL[0],SL_n[0]からSL[k−1],SL_n[k−1]まで)とが設けられる。セルアレイ20の各行に対応して、m本(m=256)のマッチ線(ML[0]からML[m−1]まで)と、図示しないm本のXセル用のワード線(WLX[0]からWLX[m−1]まで)と、図示しないm本のYセル用のワード線(WLY[0]からWLY[m−1]まで)とが設けられている。
書込ドライバ21は、書込時に、ビット線対BL,BL_nを介して各TCAMセルに書込データを供給する。サーチ線ドライバ22は、検索時に、サーチ線対SL,SL_nを介して各TCAMセルにサーチデータを供給する。
制御論理回路24は、サブアレイSA全体の動作を制御する。たとえば、制御論理回路24は、検索時には、サーチコマンドを受け取り、サーチ線ドライバ22と、マッチアンプ部23に制御信号を出力することによって、サーチ線ドライバ22、マッチアンプ部23、およびプリチャージ回路の動作を制御する。
マッチアンプ部23は、セルアレイの行にそれぞれ対応する複数のマッチアンプMAを含む。マッチアンプMAは、検索時に、対応するマッチ線MLの電位に基づいて、対応するTCAMセルデータと入力サーチデータの対応部分とが一致するか否かを検出する。この実施形態では、マッチアンプMAは、検索時に対応するマッチ線MLをプリチャージするためのプリチャージ回路を含む。
[a3.サーチ線ドライバの構成および動作]
図4は、サーチ線ドライバ22の構成の一例を示す回路図である。
サーチ線ドライバ22は、サーチ線イネーブル信号senaが「H」レベルに活性化されたときに、入力サーチデータskey[i](i=0,1,…,k)をサーチ線SL[i]に出力するとともに、入力サーチデータskey[i]の論理レベルを反転した信号を相補のサーチ線SL_n[i]に出力する。
具体的に、サーチ線ドライバ22は、サーチ線SL[0]〜SL[k]にそれぞれ対応するANDゲート60[0]〜60[k]と、サーチ線SL_n[0]〜SL_n[k]にそれぞれ対応するANDゲート61[0]〜61[k]と、インバータ62[0]〜62[k]とを含む。サーチ線イネーブル信号senaは、ANDゲート60[0]〜60[k]およびANDゲート61[0]〜61[k]に共通に入力される。さらに、ANDゲート60[i](i=0,1,…,k)には、対応する入力サーチデータskey[i]が入力される。
ANDゲート60[i](i=0,1,…,k)の出力信号はサーチ線SL[i]に送信される。ANDゲート61[i](i=0,1,…,k)には、対応する入力サーチデータskey[i]を反転した信号が入力される。
上記構成によれば、たとえば、サーチ線イネーブル信号senaが「H」レベルに活性化され、かつ、入力サーチデータskey[i]が「H」レベル(“1”)である場合には、サーチ線SL[i]の電圧が「H」レベルとなり、サーチ線SL_n[i]の電圧が「L」レベルとなる。サーチ線イネーブル信号senaが「H」レベルに活性化され、かつ、入力サーチデータskey[i]が「L」レベル(“0”)である場合には、サーチ線SL[i]の電圧が「L」レベルとなり、サーチ線SL_n[i]の電圧が「H」レベルとなる。
[a4.マッチアンプの構成および動作]
図5は、マッチアンプの構成の一例を示す回路図である。
図5を参照して、マッチアンプMAは、プリチャージ回路としてのPチャネルMOSトランジスタ70と、インバータ71〜74とを含む。
プリチャージ回路としてのMOSトランジスタ70がマッチアンプMAの内部にあるように図示しているが、MOSトランジスタ70はマッチアンプMAの外部に設けられていても構わない。制御論理回路24は、マッチ線プリチャージ信号mlpre_nおよびマッチアンプイネーブル信号maeを出力する。
以下、上記の構成要素の接続について説明する。MOSトランジスタ70は、対応するマッチ線MLと電源電位VDDを与える電源ノードとの間に接続される。MOSトランジスタ70のゲートには、マッチ線プリチャージ信号mlpre_nが入力される。マッチ線MLは、さらに、インバータ71の入力ノードに接続される。インバータ71の出力ノードは、インバータ74の入力ノードに接続される。インバータ74の出力ノードは、インバータ72を介してインバータ72の入力ノードに接続される。
マッチアンプイネーブル信号maeおよびその論理レベルをインバータ73によって反転させた信号は、インバータ71,72の駆動電源ノードに接続される。マッチアンプイネーブル信号maeが非活性状態(「L」レベル)のとき、インバータ71は非動作状態となり、インバータ72は動作状態となる。マッチアンプイネーブル信号maeが活性状態(「H」レベル)のとき、インバータ71は動作状態となり、インバータ72は非動作状態となる。
次に、マッチアンプMAの回路動作について説明する。マッチ線プリチャージ信号mlpre_nが活性化される(「L」レベルになる)ことによって、MOSトランジスタ70が導通する。これによって、マッチ線MLが電源電位VDDまで充電される(プリチャージされる)。
マッチ線プリチャージ信号mlpre_nが非活性化された後に、サーチ線イネーブル信号senaが活性化される(「H」レベルになる)ことによって、サーチ線対SL,SL_nにサーチデータが入力される。これによって、マッチ線MLの電位がサーチ結果(入力サーチデータの対応部分とTCAMセルデータとの比較結果)に依存して変化する。すなわち、一致(ヒット:hit)の場合、マッチ線MLの電位は電源電位VDD(「H」レベル)のまま維持され、不一致(ミス:miss)の場合、マッチ線MLの電荷が接地ノードに放電されるのでマッチ線のML電位は接地電位(「L」レベル)に変化する。
次に、マッチアンプイネーブル信号maeが活性化される(「H」レベルになる)。これによって、サーチ結果に基づくマッチ線MLの電位が、インバータ71およびインバータ74を介してマッチアンプ出力信号moとして出力される。マッチアンプイネーブル信号maeが非活性化される(「L」レベルになる)と、インバータ74とインバータ72とによって構成されるラッチ回路により、サーチ結果に基づくマッチ線MLの電位が保持される。
[a5.全体構成]
図6は、検索装置1の全体構成を示すブロック図である。
図6を参照して、検索装置1は、メイン制御回路300と、複数のサブブロック100と、プライオリティ・エンコーダ30と、複数のプリサーチサブ回路200と、複数のAND回路201とを備える。
メイン制御回路300は、検索装置1全体を制御する。
サブブロック100は、行列状に配列されたTCAMセルアレイ20と、書込ドライバ21と、サーチ線ドライバ22と、マッチアンプ部23と、制御論理回路24と、入出力回路25とを含む。
入出力回路25は、メイン制御回路300およびプリサーチサブ回路200からの各種制御信号等の入力を受ける。入出力回路25は、制御論理回路24対して入力された信号を出力する。
また、入出力回路25は、セルアレイ20から読み出された読出データrdataをメイン制御回路300およびプリサーチサブ回路200に出力する。具体的には、入出力回路25は、プリサーチサブ回路200からのリードイネーブル信号renaおよびアドレス信号raddrの入力を受けて制御論理回路24に出力する。制御論理回路24は、リードイネーブル信号renaおよびアドレス信号raddrに従ってデータ読出動作を実行する。なお、リードイネーブル信号renaおよびアドレス信号raddrは、メイン制御回路300からプリサーチサブ回路200に出力され、プリサーチサブ回路200を経由してサブブロック100に対して出力される。
ワード線ドライバは、アドレス信号raddrに従って対応するワード線を立ち上げ、ビット線対BL,BL_nを介して各メモリセルMCに格納されているデータを読出回路に出力する。読出回路は、読出データrdataを入出力回路25に出力する。
また、入出力回路25は、プリサーチサブ回路200からの書込イネーブル信号wena、書込データwdata、ライトアドレス信号waddrの入力を受けて制御論理回路24に出力する。制御論理回路24は、書込イネーブル信号wena、書込データwdata、ライトアドレス信号waddrに従ってデータ書込動作を実行する。書込ドライバ21は、書込データwdataに基づいてビット線対BL,BL_nを駆動する。そして、ワード線ドライバは、ライトアドレス信号waddrに従って対応するワード線を立ち上げ、対応するメモリセル行のの各メモリセルMCに対してデータを書き込む。
なお、書込イネーブル信号wena、ライトアドレス信号waddrおよび書込データwdataは、メイン制御回路300からプリサーチサブ回路200に出力され、プリサーチサブ回路200を経由してサブブロック100に対して出力される。
また、入出力回路25は、プリサーチサブ回路200からのサーチ線イネーブル信号senaおよびメイン制御回路300からの入力サーチデータskeyの入力を受けて制御論理回路24に出力する。制御論理回路24は、サーチ線イネーブル信号senaおよびメイン制御回路300からの入力サーチデータskeyに従ってデータ検索動作を実行する。データ検索動作の処理についてはサーチ線ドライバ22およびマッチアンプ部23について上記で説明したのと同様である。
プライオリティ・エンコーダ30は、各エントリごとのサーチ結果(入力サーチデータとTCAMデータとが一致したか否か)を隣接するサブブロック100から受け取る。プライオリティ・エンコーダ30は、ヒットアドレス(サーチデータと一致したTCAMデータが格納されているエントリアドレス)を出力するが、複数のエントリがヒット(一致)した場合には、プライオリティ・エンコーダ30は、優先度の高いヒットエントリのアドレスを出力する。
複数のプリサーチサブ回路200は、複数のサブブロック100にそれぞれ対応して設けられる。
各プリサーチサブ回路200において、プリサーチ動作が実行される。AND回路201は、複数のプリサーチサブ回路200にそれぞれ対応して設けられ、プリサーチ動作の検索結果信号sdと、検索イネーブル信号saとのAND論理演算結果に基づいてサーチ線イネーブル信号senaを出力する。
したがって、プリサーチサブ回路200のプリサーチ動作の検索結果信号sdとして「L」レベルが出力された場合には、検索イネーブル信号saが「H」レベルである場合であってもサーチ線イネーブル信号senaは、非活性状態(「L」レベル)となる。したがって、この場合には対応するサブブロック100におけるデータ検索動作は実行されない。
本例においては、サブブロック100の前段においてプリサーチサブ回路200を設ける。そして、プリサーチサブ回路200においてプリサーチ動作を実行して、検索結果信号sdを出力する。
当該検索結果信号sdに基づいてAND回路201は、サーチ線イネーブル信号senaを出力する。検索対象とする必要がないサブブロックに対しては、サーチ線イネーブル信号senaを非活性状態(「L」レベル)とすることによりデータ検索動作における低消費電力化を図ることが可能となる。
<B.プリサーチサブ回路の構成>
[b1.機能構成]
図7は、プリサーチサブ回路200の構成を説明する機能ブロック図である。
図7を参照して、プリサーチサブ回路200は、データ生成部202と、ブロック走査部204と、ブロック制御部206と、メモリ部208と、検索部210とを含む。
ブロック制御部206は、サブブロック100を制御するための各種信号を出力する。また、ブロック制御部206は、ブロック走査部204にデータ読出動作を指示する。
ブロック走査部204は、ブロック制御部206からの指示に従って対応するサブブロック100にリードイネーブル信号renaおよびアドレス信号raddrを出力する。サブブロック100は、ブロック走査部204からのリードイネーブル信号renaおよびアドレス信号raddrに基づいて、読出データrdataを出力する。ブロック走査部204は、サブブロック100からの読出データrdataをデータ生成部202に出力する。
データ生成部202は、サブブロック100からの読出データrdataに基づいて、入力される入力サーチデータskeyの一部(プリサーチキーpskey)と比較するためのプリサーチ用のフラグデータを生成する。データ生成部202は、生成したフラグデータをメモリ部208に出力する。
メモリ部208は、データ生成部202で生成されたフラグデータを格納する。
検索部210は、入力サーチデータskeyの一部であるプリサーチキーpskeyと、データ生成部202で生成されたメモリ部208に格納されているフラグデータとが一致するか否かを比較して、比較結果をブロック制御部206に出力する。
ブロック制御部206は、検索部210からの比較結果をプリサーチ動作の検索結果信号sdとしてAND回路201に出力する。
AND回路201は、ブロック制御部206からのプリサーチ動作の検索結果信号sdと、検索イネーブル信号saとのAND論理演算結果に基づいてサーチ線イネーブル信号senaを出力する。
サブブロック100は、サーチ線イネーブル信号senaに従って、入力サーチデータskeyに対するデータ検索動作を実行する。
図8は、プリサーチサブ回路200Pの構成を説明する別の機能ブロック図である。
図8を参照して、プリサーチサブ回路200Pは、プリサーチサブ回路200と比較して、メモリ部208をRAM209に置換した点が異なる。その他の構成については図7で説明したのと同様であるのでその詳細な説明については繰り返さない。メモリ部208をRAM(Random Access Memory)で構成することにより消費電力を低減するとともにメモリ部208の面積を縮小することが可能である。
図9は、プリサーチサブ回路200Qの構成を説明する別の機能ブロック図である。
図9を参照して、プリサーチサブ回路200Qは、プリサーチサブ回路200と比較して、メモリ部208および検索部210の代わりにCAM211を設けた点が異なる。その他の構成については図7で説明したのと同様であるのでその詳細な説明については繰り返さない。メモリ部208および検索部210をCAM(Content Addressable Memory)で構成することにより簡易な構成でメモリ部208および検索部210を実現することが可能である。
[b2.プリサーチサブ回路の動作概要]
図10は、プリサーチサブ回路200の動作概要を説明する図である。
図10を参照して、プリサーチサブ回路200は、データ生成部202と、ブロック走査部204と、ブロック制御部206と、メモリ部208と、検索部210とを含む。
ブロック走査部204は、対応するサブブロック100に対してデータ読出動作を実行する。本例においては、ブロック走査部204により読み出したTCAMセルデータの構成が示されている。
ブロック走査部204は、対応するサブブロック100に対してデータ読出動作を実行するリード制御部420と、読み出したデータを格納する一時記憶部422とを含む。
リード制御部420は、リードイネーブル信号renaおよびアドレス信号raddrを受けてサブブロック100に対してデータ読出動作の実行を指示する。サブブロック100は、リード制御部420からの指示に従ってデータ読出動作を実行して読出データrdataをリード制御部420に出力する。
本例においては説明を簡易にするために、一例として、一時記憶部422には、サブブロック100のTCAMセルデータとして、4個のエントリ(行)が格納され、各エントリ(行)は16ビットのデータで構成されている場合について説明する。
また、各エントリ(行)は、所定列毎に分割されている場合が示されている。本例においては、一例として4ビットずつに分割されている場合が示されている。そして、0〜3番目の領域について識別子#0が割り当てられている。また、4〜7番目の領域について識別子#1が割り当てられている。また、8〜11番目の領域について識別子#2が割り当てられている。また、12〜15番目の領域について識別子#3が割り当てられている。
1つ目のエントリ(行)は、“000*1*0000101011”のデータが格納されている場合が示されている。2つ目のエントリ(行)は、“0011011010011101”、3つ目のエントリ(行)は、“00*1001101010110”、4つ目のエントリ(行)は、“010100**00101010”のデータが格納されている場合が示されている。それぞれのエントリ(行)にはアドレスが割り当てられている。0番目(“0x0”)の領域が1つ目のエントリ(行)に対応している。1番目(“0x1”)の領域が2つ目のエントリ(行)に対応している。2番目(“0x2”)の領域が3つ目のエントリ(行)に対応している。3番目(“0x3”)の領域が4つ目のエントリ(行)に対応している。
データ生成部202は、データ判定部221と、判定レジスタ222と、選択レジスタ223と、セレクタ224,230とを含む。
データ判定部221は、一時記憶部422に格納された対応するサブブロック100からの読出データrdataに従って所定領域のデータが全てバイナリ値か否かを判定する。
データ判定部221は、各4列毎の識別子#0〜#3に対応する領域が全てのデータがバイナリ値か否かを判定する。本例においては、識別子#0に対応する領域は、“*”が含まれているため全てのデータがバイナリ値では無い。したがって、「Ternary」と判定した場合が示されている。識別子#1に対応する領域は、“*”が含まれているため全てのデータがバイナリ値では無い。したがって、「Ternary」と判定した場合が示されている。識別子#2に対応する領域は、“*”が含まれていないため全てのデータがバイナリ値である。したがって、「Binary」と判定した場合が示されている。識別子#3に対応する領域は、“*”が含まれていないため全てのデータがバイナリ値である。したがって、「Binary」と判定した場合が示されている。
データ判定部221は、各領域毎の判定結果を判定レジスタ222に格納する。判定レジスタ222は、「Binary」と判定された場合に、“1”を格納し、「Ternary」と判定された場合に“0”を格納する。
選択レジスタ223は、判定レジスタ222に格納されている判定値(“1”)に基づいて最小の識別子を指定するデータを格納する。本例においては、選択レジスタ223は、“#2”を格納する場合が示されている。
セレクタ230は、選択レジスタ223に格納されているデータに基づいてフラグデータを選択する。本例においては、選択レジスタ223に格納されているデータ(識別子#2)に基づいて、エントリ(行)の対応する領域のデータをフラグデータとして選択する。本例においては、選択レジスタ223に格納されているデータ(“#2”)に基づいて各エントリ(行)のうち8〜11番目のデータが指定される。なお、[p:0]の記号は、0〜p番目であることを示す。したがって、[11:8]は、8〜11番目であることを示す。他の例についても同様である。
セレクタ230は、0番目〜3番目のエントリ(行)について、“0010”、“1001”、“0101”、“0010”をフラグデータとして選択する。選択されたフラグデータは、メモリ部208に出力される。
メモリ部208は、フラグデータレジスタ225を含む。フラグデータレジスタ225は、比較結果として用いられるフラグデータを格納する。本例においては、選択レジスタ223に格納されているデータ(“#2”)に基づいて識別子#2に対応する各エントリ(行)のデータをフラグデータとして格納する。一例として、“0010”、“1001”、“0101”、“0010”がフラグデータレジスタ225にフラグデータとして格納されている場合が示されている。
セレクタ224は、選択レジスタ223のデータに従って入力される入力サーチデータskeyの一部のデータ(プリサーチキーpskey)を指定する。
本例においては、選択レジスタ223に格納されているデータ(“#2”)に基づいて入力サーチデータskeyのうち8〜11番目のデータがプリサーチキーpskeyとして指定される。これによりエントリ(行)の一部のデータと対応する同じ位置関係にある入力サーチデータの一部のデータが指定される。
検索部210は、比較回路226と、OR回路227とを含む。
比較回路226は、セレクタ230で選択された入力サーチデータskeyの一部データと、フラグデータレジスタ225に格納されているそれぞれのフラグデータとを比較して比較結果をOR回路227に出力する。本例においては、比較回路226は、一致した場合には「H」レベルを出力し、不一致の場合には「L」レベルを出力する。
OR回路227は、比較回路226からの比較結果のOR論理演算結果をブロック制御部206に出力する。
ブロック制御部206は、有効/無効レジスタ228と、OR回路229と、ライト制御部424とを含む。
ライト制御部424は、対応するサブブロック100に対してデータ書込動作を実行する。
ライト制御部424は、書込イネーブル信号wena、ライトアドレス信号waddrおよび書込データwdataを受けてサブブロック100に対してデータ書込動作の実行を指示する。
ライト制御部424は、有効/無効レジスタ228の値を制御する。
また、ライト制御部424は、リード制御部420にデータ読出動作の実行を指示する。
有効/無効レジスタ228は、プリサーチサブ回路200のプリサーチ動作を有効/無効に設定するためのレジスタである。プリサーチサブ回路200のプリサーチ動作を有効に設定する場合には、レジスタの値は“0”に設定される。一方、プリサーチサブ回路200のプリサーチ動作を無効に設定する場合には、レジスタの値は“1”に設定される。
OR回路229は、検索部210からの出力信号と、有効/無効レジスタ228のレジスタ値とに基づいてプリサーチ動作の検索結果信号sdを出力する。
AND回路201は、検索イネーブル信号saと、プリサーチサブ回路200のプリサーチ動作の検索結果信号sdとのAND論理演算結果をサーチ線イネーブル信号senaとして出力する。
例えば、比較回路226の比較結果としてデータが一致した場合には、プリサーチサブ回路200のプリサーチ動作の検索結果信号sd(“1”)が出力される。この場合、検索イネーブル信号sa(「H」レベル)に従ってサーチ線イネーブル信号senaは、活性状態(「H」レベル)に設定される。したがって、対応するサブブロック100に対するデータ検索動作が実行される。
一方、比較回路226の比較結果としてデータが不一致である場合には、プリサーチサブ回路200のプリサーチ動作の検索結果信号sd(“0”)が出力される。この場合、検索イネーブル信号sa(「H」レベル)の入力が有る場合でも、サーチ線イネーブル信号senaは、非活性状態(「L」レベル)に設定される。したがって、対応するサブブロック100に対するデータ検索動作は実行されない。
また、有効/無効レジスタ228のレジスタの値が“1”の場合には、比較回路226の比較結果の如何に拘わらず、プリサーチサブ回路200のプリサーチ動作の検索結果信号sd(“1”)が出力される。この場合、検索イネーブル信号sa(「H」レベル)に従ってサーチ線イネーブル信号senaは、活性状態(「H」レベル)に設定される。したがって、対応するサブブロック100に対するデータ検索動作が実行される。
したがって、プリサーチサブ回路200は、対応するサブブロックに格納されているエントリ(行)のデータに基づいて、入力サーチデータの一部と比較するためのプリサーチ用のフラグデータを生成する。そして、プリサーチサブ回路200は、有効/無効レジスタ228のレジスタ値が“0”である場合に入力サーチデータの一部とフラグデータとを比較して、データが一致する場合には、プリサーチ動作の検索結果信号sd(“1”)を出力し、不一致の場合には、プリサーチ動作の検索結果信号sd(“0”)を出力する。したがって、プリサーチ動作の検索結果信号sd(“0”)の場合には、対応するサブブロック100のデータ検索動作を実行しない。それゆえ、データ検索動作が不要なサブブロックの動作を停止して低消費電力化を図ることが可能である。
[b3.プリサーチサブ回路のリセット動作]
図11は、プリサーチサブ回路200のリセット状態あるいは初期化状態時の動作概要を説明する図である。
図11を参照して、図10の構成と比較して、有効/無効レジスタ228のレジスタ値が“1”である場合が示されている。本例においては、対応するサブブロック100にエントリ(行)のデータが格納されていない場合が示されている。リセット状態あるいは検索装置の初期化状態において、有効/無効レジスタ228のレジスタ値は“1”に設定される。
したがって、プリサーチサブ回路200におけるプリサーチ動作は無効とされる。
有効/無効レジスタ228のレジスタ値が“1”の場合には、プリサーチサブ回路200は、フラグデータ生成モードとして動作する。一方、有効/無効レジスタ228のレジスタ値が“0”の場合には、通常モードとしてプリサーチ動作を実行する。
[b4.プリサーチサブ回路のフラグデータ生成]
図12は、プリサーチサブ回路200のフラグデータ生成モードにおける動作例を説明する図である。
図12を参照して、ライト制御部424は、書込イネーブル信号wena、ライトアドレス信号waddrおよび書込データwdataを受けてサブブロック100に対してデータ書込動作の実行を指示する。本例においては、対応するサブブロック100に対してエントリ(行)に最初のデータ(“010100**00101010”)が格納される場合が示されている。
サブブロック100に対するデータ書込動作の実行を指示する場合には、ライト制御部424は、有効/無効レジスタ228のレジスタ値を“1”に設定する。これによりプリサーチ動作は無効とされる。
ブロック走査部204は、ライト制御部424からの指示に従ってフラグデータ生成モードにおいて、サブブロック100に格納されているデータを読み出す。具体的には、リード制御部420は、リードイネーブル信号renaおよびアドレス信号raddrを受けてサブブロック100に対してデータ読出動作の実行を指示する。サブブロック100は、リード制御部420からの指示に従ってデータ読出動作を実行して読出データrdataをリード制御部420に出力する。リード制御部420は、一時記憶部422に読出データrdataを格納する。
ブロック走査部204は、複数のエントリ(行)が格納されている場合には、開始アドレスから終了アドレスまでに対応するエントリ(行)のデータを昇順的に読み出す。
データ判定部221は、一時記憶部422に格納された読出データrdataに従って所定領域のデータが全てバイナリ値か否かを判定する。
本例においては、識別子#0に対応する領域は、“*”が含まれていないため全てのデータがバイナリ値である。したがって、「Binary」と判定した場合が示されている。識別子#1に対応する領域は、“*”が含まれているため全てのデータがバイナリ値でない。したがって、「Ternary」と判定した場合が示されている。識別子#2に対応する領域は、“*”が含まれていないため全てのデータがバイナリ値である。したがって、「Binary」と判定した場合が示されている。識別子#3に対応する領域は、“*”が含まれていないため全てのデータがバイナリ値である。したがって、「Binary」と判定した場合が示されている。
データ判定部221は、各領域毎の判定結果を判定レジスタ222に格納する。本例の場合には、“1011”を格納する。
選択レジスタ223は、判定レジスタ222に格納されている判定値(“1”)に基づいて最小の識別子を指定するデータを格納する。本例においては、選択レジスタ223は、“#0”を格納する場合が示されている。
フラグデータレジスタ225は、選択レジスタ223に格納されているデータ(“#1”)に基づいて識別子#1に対応する領域のデータをフラグデータとして格納する。一例として、“0101”がフラグデータレジスタ225にフラグデータとして格納されている場合が示されている。
そして、フラグデータレジスタ225におけるデータ格納後にライト制御部424は、有効/無効レジスタ228のレジスタ値を更新する。本例においては、有効/無効レジスタ228のレジスタ値は“0”に更新される。これにより、プリサーチサブ回路200におけるプリサーチ動作は有効とされる。
通常モードにおいて、選択レジスタ223に格納されているデータ(“#0”)に基づいて入力サーチデータskeyのうち0〜3番目のデータがプリサーチキーpskeyとして指定される。
比較回路226は、セレクタ230で選択された入力サーチデータskeyの一部データであるプリサーチキーpskeyと、フラグデータレジスタ225に格納されているそれぞれのフラグデータとを比較して比較結果をOR回路227に出力する。本例においては、比較回路226は、一致した場合には「H」レベルを出力し、不一致の場合には「L」レベルを出力する。
例えば、比較回路226の比較結果としてデータが一致した場合には、プリサーチサブ回路200のプリサーチ動作の検索結果信号sd(“1”)が出力される。この場合、検索イネーブル信号sa(「H」レベル)に従ってサーチ線イネーブル信号senaは、活性状態(「H」レベル)に設定される。したがって、対応するサブブロック100に対するデータ検索動作が実行される。
その後、対応するサブブロック100に対してエントリ(行)を追加格納する毎に上記処理を繰り返し実行することにより、図10で説明した状態に遷移する。
[b5.プリサーチサブ回路のフラグデータの更新]
図13は、プリサーチサブ回路200のフラグデータの更新を説明する図である。
図13を参照して、ライト制御部424は、書込イネーブル信号wena、ライトアドレス信号waddrおよび書込データwdataを受けてサブブロック100に対してデータ書込動作の実行を指示する。本例においては、対応するサブブロック100に対してエントリ(行)に図10で示された状態のデータ(“00*1001101010110”)が更新(“00*10011*1010110”)された場合が示されている。
ライト制御部424は、有効/無効レジスタ228のレジスタ値を“1”に設定する。これによりプリサーチ動作は無効とされる。
そして、上記で説明したようにブロック走査部204は、ライト制御部424からの指示に従ってフラグデータ生成モードにおいて、サブブロック100に格納されているデータを読み出す。具体的には、サブブロック100は、リード制御部420からの指示に従ってデータ読出動作を実行して読出データrdataをリード制御部420に出力する。リード制御部420は、一時記憶部422に読出データrdataを格納する。
データ判定部221は、一時記憶部422に格納された読出データrdataに従って所定領域のデータが全てバイナリ値か否かを判定する。
本例においては、識別子#0,#1,#2に対応する領域は、“*”が含まれているため全てのデータがバイナリ値では無い。したがって、「Ternary」と判定した場合が示されている。識別子#3に対応する領域は、“*”が含まれていないため全てのデータがバイナリ値である。したがって、「Binary」と判定した場合が示されている。
データ判定部221は、各領域毎の判定結果を判定レジスタ222に格納する。本例の場合には、判定レジスタ222の値は、“0011”から“0001”に更新される。
選択レジスタ223は、判定レジスタ222に格納されている判定値(“1”)に基づいて最小の識別子を指定するデータを格納する。本例においては、選択レジスタ223は、“#3”を格納する場合が示されている。
フラグデータレジスタ225は、選択レジスタ223に格納されているデータ(“#3”)に基づいて識別子#3に対応する領域のデータをフラグデータとして格納する。一例として、“1010”,“0110”,“1101”,“1011”がフラグデータレジスタ225にフラグデータとして格納されている場合が示されている。
そして、フラグデータレジスタ225におけるデータ格納後にライト制御部424は、有効/無効レジスタ228のレジスタ値を更新する。本例においては、有効/無効レジスタ228のレジスタ値は“0”に更新される。これにより、プリサーチサブ回路200におけるプリサーチ動作は有効とされる。
通常モードにおいて、選択レジスタ223に格納されているデータ(“#3”)に基づいて入力サーチデータskeyのうち12〜15番目のデータが指定される。
比較回路226は、セレクタ230で選択された入力サーチデータskeyの一部データと、フラグデータレジスタ225に格納されているそれぞれのフラグデータとを比較して比較結果をOR回路227に出力する。本例においては、比較回路226は、一致した場合には「H」レベルを出力し、不一致の場合には「L」レベルを出力する。
例えば、比較回路226の比較結果としてデータが一致した場合には、プリサーチサブ回路200のプリサーチ動作の検索結果信号sd(“1”)が出力される。この場合、検索イネーブル信号sa(「H」レベル)に従ってサーチ線イネーブル信号senaは、活性状態(「H」レベル)に設定される。したがって、対応するサブブロック100に対するデータ検索動作が実行される。
当該方式により、サブブロック100に対してエントリ(行)のデータが更新された場合に、プリサーチサブ回路200のフラグデータを更新することによりプリサーチ動作を継続することが可能である。
このフラグデータの更新については、自動的にバックグラウンドで実行するようにしても良い。
なお、上記の例においては、フラグデータとして4ビット単位で抽出する方式について説明したが、特に4ビットに限られず可変に変更することが可能である。領域を区切る位置も任意に位置に変更するようにしても良い。また、読み出しデータに対して符号化処理や、Hash関数を用いてデータ圧縮処理を行い、圧縮されたデータに基づいてフラグデータを生成したり、読み出しデータに対してブルームフィルタ等のフィルタ処理を行ったデータに基づいてフラグデータを生成することも可能である。
(変形例1)
[b6.プリサーチサブ回路のフラグデータの別の更新例]
図14は、プリサーチサブ回路200のフラグデータの別の更新を説明する図である。
図14を参照して、ライト制御部424は、書込イネーブル信号wena、ライトアドレス信号waddrおよび書込データwdataを受けてサブブロック100に対してデータ書込動作の実行を指示する。本例においては、対応するサブブロック100に対してエントリ(行)に図13に示される状態のデータ(“0011011010011101”)が更新(“001101101001*101”)された場合が示されている。
ライト制御部424は、有効/無効レジスタ228のレジスタ値を“1”に設定する。これによりプリサーチ動作は無効とされる。
そして、上記で説明したようにブロック走査部204は、ライト制御部424からの指示に従ってフラグデータ生成モードにおいて、サブブロック100に格納されているデータを読み出す。具体的には、サブブロック100は、リード制御部420からの指示に従ってデータ読出動作を実行して読出データrdataをリード制御部420に出力する。リード制御部420は、一時記憶部422に読出データrdataを格納する。
データ判定部221は、一時記憶部422に格納された読出データrdataに従って所定領域のデータが全てバイナリ値か否かを判定する。
本例においては、識別子#0,#1,#2,#3に対応する領域は、“*”が含まれているため全てのデータがバイナリ値では無い。したがって、「Ternary」と判定した場合が示されている。
データ判定部221は、各領域毎の判定結果を判定レジスタ222に格納する。本例の場合には、判定レジスタ222の値は、“0001”から“0000”に更新される。
選択レジスタ223は、判定レジスタ222に格納されている判定値に基づいて最小の識別子を指定するデータを格納する。本例においては、判定値は全て“0”であるため選択レジスタ223は、ブランクとなる場合が示されている。
これに伴い、選択レジスタ223に格納されているデータはブランクであるため、フラグデータレジスタ225に格納されるフラグデータもブランクとなり、プリサーチ動作を機能させることができない。
本例においては、判定レジスタ222に格納されている判定値が全て“0”である場合には、データ判定部221における判定対象を変更して、再判定する処理を実行する。
図15は、プリサーチサブ回路200の判定対象の変更を説明する図である。
図15に示されるように、データ判定部221は、全ての領域について、「Ternary」と判定した場合には、4ビットの領域のうち先頭ビットをマスク処理して残りの3ビットの領域のデータが全てバイナリ値か否かを判定する。
本例においては、識別子#0,#1,#2,#3のそれぞれの3ビットに対応する領域について、“*”が含まれているか否かを判定する。
識別子#0,#1の3ビットの領域については、“*”が含まれているため全てのデータがバイナリ値では無い。したがって、「Ternary」と判定した場合が示されている。
識別子#2,#3の3ビットの領域については、“*”が含まれていないため全てのデータがバイナリ値である。したがって、「Binary」と判定した場合が示されている。
データ判定部221は、各領域毎の判定結果を判定レジスタ222に格納する。本例の場合には、判定レジスタ222の値は、“0000”から“0011”に更新される。
したがって、選択レジスタ223は、判定レジスタ222に格納されている判定値(“1”)に基づいて最小の識別子を指定するデータを格納する。本例においては、選択レジスタ223は、“#2”を格納する場合が示されている。
フラグデータレジスタ225は、選択レジスタ223に格納されているデータ(“#2”)に基づいて識別子#2に対応する領域のデータをフラグデータとして格納する。その際、先頭ビットは考慮しなかったため先頭ビットについては“*”に設定して、“*010”,“*101”,“*001”,“*010”がフラグデータレジスタ225にフラグデータとして格納されている場合が示されている。
そして、フラグデータレジスタ225におけるデータ格納後にライト制御部424は、有効/無効レジスタ228のレジスタ値を更新する。本例においては、有効/無効レジスタ228のレジスタ値は“0”に更新される。これにより、プリサーチサブ回路200におけるプリサーチ動作は有効とされる。
通常モードにおいて、選択レジスタ223に格納されているデータ(“#2”)に基づいて入力サーチデータskeyのうち8〜11番目のデータがプリサーチキーとして指定される。
比較回路226は、セレクタ230で選択された入力サーチデータskeyの一部データであるプリサーチキーと、フラグデータレジスタ225に格納されているそれぞれのフラグデータとを比較して比較結果をOR回路227に出力する。比較回路226は、データが一致した場合には「H」レベルを出力し、不一致の場合には「L」レベルを出力する。
例えば、比較回路226の比較結果としてデータが一致した場合には、プリサーチサブ回路200のプリサーチ動作の検索結果信号sd(“1”)が出力される。この場合、検索イネーブル信号sa(「H」レベル)に従ってサーチ線イネーブル信号senaは、活性状態(「H」レベル)に設定される。したがって、対応するサブブロック100に対するデータ検索動作が実行される。
当該方式により、サブブロック100に対してエントリ(行)のデータが更新された場合に、判定レジスタ222の判定値が全て“0”となった場合であっても判定対象を変更することにより、プリサーチ動作を継続することが可能である。
本例では、1ビットをマスク処理し3ビット単位でフラグデータを生成する。4ビットに比べると、連続するビット列の特徴を表現する能力は低下されるが、低消費化のためのプリサーチサブ回路200の構成を維持できることが可能である。
本例においては、4ビットからビット数を減らすことを例に示したが、フラグとして使用できなかった領域が使えるようになる場合もあるため、4ビットの方式を維持するようにしても良い。たとえば、もとのデータが、“*”(Ternary)値であった部分がバイナリ(Binary)値に書き換えることは実際にありうる。その場合には、4ビット選択方式を継続してフラグのみ再生成する方式を維持することも可能となる。
なお、本例においては、4ビットのうち先頭の1ビットをマスク処理する場合について説明したが、特に当該位置は先頭に限られず他の位置をマスク処理するようにしても良い。また、マスクするビットについても1ビットに限られず複数ビットをマスク処理するようにしても良い。
(変形例2)
上記においては、エントリ(行)のデータが更新される毎に全データを読み出してデータ判定する方式について説明したが、全データの読み出しには時間がかかる。したがって、パフォーマンスの低下を防止するために複数回エントリ(行)のデータが更新された後に全データを読み出してフラグデータを更新するメンテナンス動作を実行するようにしても良い。
<C.メンテナンス動作のバリエーション>
[c1.メンテナンス動作の別の構成]
図16は、変形例2に従うプリサーチサブ回路の構成について説明する図である。
図16を参照して、ブロック制御部206をブロック制御部206Aに置換した点が異なる。
ブロック制御部206Aは、ブロック制御部206と比較して、OR回路240,241と、カウンタ242と、トリガ発生回路243と、レジスタ244と、比較回路245とをさらに含む。
トリガ発生回路243は、書込イネーブル信号wenaの入力に応答してトリガ信号を発生する。
トリガ発生回路243で発生されたトリガ信号は、カウンタ242に出力される。
カウンタ242は、トリガ信号の入力に基づいてカウントアップし、カウンタ値を保持する。したがって、カウンタ242は、書込イネーブル信号wenaの入力に従ってカウントアップするため書込回数をカウントすることが可能である。
比較回路245は、カウンタ242のカウンタ値と、レジスタ244との値を比較して、比較結果を出力する。レジスタ244は、比較回路245の比較対象となる基準値を格納する。本例においては、一例として“8”が含まれているものとする。
書込イネーブル信号wenaに従ってカウンタ242のカウンタ値が8回に到達するまでカウントアップする。カウンタ値が8回に到達した場合に比較回路245は、「H」レベルを出力する。また、カウンタ242は、カウンタ値が8回に到達した場合にリセットして初期値0に設定されるものとする。
OR回路241は、OR回路234の反転信号と、比較回路245からの信号のOR論理演算結果をOR回路240に出力する。
OR回路240は、検索部210の検索結果とOR回路240の出力信号のOR論理演算結果をAND回路201に出力する。
AND回路201は、OR回路240の出力信号と検索イネーブル信号saとのAND論理演算結果をサーチ線イネーブル信号senaとして出力する。
また、データ生成部202は、OR回路234をさらに含む。
OR回路234は、判定レジスタ222の各判定結果のOR論理演算結果をブロック制御部206#に出力する。
例えば、OR回路234は、判定レジスタ222の値が全て“0”である場合に「L」レベルを出力し、それ以外の場合には「H」レベルを出力する。
OR回路234から「L」レベルが出力された場合には、OR回路240,241の出力は「H」レベルとなり、検索イネーブル信号saが「H」レベルの場合には検索部210のプリサーチ動作の如何に拘わらずサーチ線イネーブル信号senaは、「H」レベルとなる。したがって、プリサーチ動作は無効とされ、対応するサブブロックにおけるデータ検索動作が実行される。
また、カウンタ242のカウンタ値が8回に到達した場合においても、OR回路241の出力は、「H」レベルとなり、検索イネーブル信号saが「H」レベルの場合には検索部210のプリサーチ動作の如何に拘わらずサーチ線イネーブル信号senaは、「H」レベルとなる。
したがって、プリサーチ動作は無効とされ、対応するサブブロックにおけるデータ検索動作が実行される。
また、比較回路245の出力がフラグデータの更新の要求としてブロック走査部204に出力される。ブロック走査部204は、比較回路245の出力に基づいてフラグデータを更新するメンテナンス動作を実行する。
一例として、書込イネーブル信号wenaの入力回数(書込回数)をカウントして所定回数(8回)以上となった場合に、メンテナンス動作を実行する。
図17は、プリサーチサブ回路200におけるメンテナンス動作を説明するフロー図である。
図17に示されるように、プリサーチサブ回路200は、対応するサブブロックが使用中であるか否かを判断する(ステップS2)。プリサーチサブ回路200は、フラグデータ生成モードにおいて、対応するサブブロックに対するバックグラウンド処理としてフラグデータを生成する。
プリサーチサブ回路200は、サブブロックが使用中であると判断した場合(ステップS2においてYES)には、ステップS2の状態を維持する。すなわち、サブブロックが使用中の場合には処理は実行しない。
プリサーチサブ回路200は、サブブロックが使用中で無いと判断した場合(ステップS2においてNO)には、フラグデータの更新の要求があるかどうかを判断する(ステップS3)。具体的には、リード制御部420は、比較回路245からの「H」レベルのフラグデータの更新の要求が入力されたか否かを判断する。
プリサーチサブ回路200は、フラグデータの更新の要求が無いと判断した場合(ステップS3においてNO)には、ステップS2に戻り上記処理を繰り返す。
一方、プリサーチサブ回路200は、フラグデータの更新の要求が有ると判断した場合(ステップS3においてYES)には、無効フラグを設定する(ステップS4)。OR回路240,241の出力が「H」レベルに設定される。したがって、プリサーチ動作は無効とされ、対応するサブブロックにおけるデータ検索動作が実行される。
次に、プリサーチサブ回路200は、リーダポインタのアドレス(データ読出するエントリ(行)のアドレス)に従うデータ読出を実行する(ステップS5)。具体的には、リード制御部420は、リーダポインタのアドレスに従ってサブブロック100に格納されているデータのデータ読出を実行する。
プリサーチサブ回路200は、読み出したデータを一時記憶部422に格納する(ステップS6)。具体的には、リード制御部420は、対応するサブブロック100の読出データrdataを一時記憶部422に格納する。
次に、プリサーチサブ回路200は、リーダポインタのアドレスが最終アドレス(最終行のアドレス)か否かを判断する(ステップS8)。リード制御部420は、サブブロックの読出アドレスを指定するリーダポインタが最終アドレスか否かを判断する。
ステップS8において、プリサーチサブ回路200は、リーダポインタのアドレスが最終アドレスで無いと判断した場合(ステップS8においてNO)には、リーダポインタのアドレスをカウントアップ(+1)する。具体的には、リード制御部420は、サブブロックの読出アドレスを指定するリーダポインタをカウントアップして次のエントリ(行)の読出アドレスを指定する。
そして、ステップS5に戻り、プリサーチサブ回路200は、リーダポインタのアドレス(データ読出するエントリ(行)のアドレス)に従うデータ読出を実行する。
そして、ステップS8において、プリサーチサブ回路200は、リーダポインタのアドレスが最終アドレスであると判断した場合(ステップS8においてYES)には、データ判定を実行する(ステップS12)。データ判定部221は、対応するサブブロックから読み出されたrdataに従って上記で説明したように所定領域のデータが全てバイナリ値か否かを判定する。
次に、プリサーチサブ回路200は、選択レジスタの値を更新する(ステップS14)。データ判定部221は、各領域毎の判定結果を判定レジスタ222に格納する。そして、判定レジスタ222に格納されている判定値(“1”)に基づいて最小の識別子を指定するデータを選択レジスタの値として更新する。
次に、プリサーチサブ回路200は、フラグデータを更新する(ステップS16)。フラグデータレジスタ225は、選択レジスタ223に格納されているデータに基づいて所定領域のデータをフラグデータとして更新する。
次に、プリサーチサブ回路200は、リーダポインタをリセットする(ステップS18)。リード制御部420は、サブブロックの読出アドレスを指定するリーダポインタを初期値(一例として“0x0”)に設定する。
次に、プリサーチサブ回路200は、有効フラグをセットする(ステップS20)。OR回路240,241の出力が「L」レベルに設定される。したがって、プリサーチ動作は有効とされる。
そして、処理を終了する(エンド)。
上記の方式においては、リーダポインタを更新して順次エントリ(行)を読み出す場合について説明しているが、バースト読み出しや、複数ブロックを同時に活性させることで、複数のデータを読み出す構成とすることも可能である。
上記の構成においては、書込回数に基づいてフラグデータを更新するメンテナンス動作を実行する場合について説明したが、特に当該方式に限られず別の方式でメンテナンス動作を実行することも可能である。
[c2.メンテナンス動作の別の構成]
書込イネーブル信号wenaの入力回数に限られず、メンテナンス動作を実行するようにすることも可能である。
図18は、ブロック制御部206Bの別の構成について説明する図である。
図18を参照いて、ブロック制御部206Bは、クロックカウンタ250と、比較回路252と、タイマ設定レジスタ254とを含む。
クロックカウンタ250は、基準クロックの入力に従ってカウンタ値をカウントアップさせる。
タイマ設定レジスタ254は、タイマ値を格納する。
比較回路252は、タイマ設定レジスタ254に格納されているタイマ値と、クロックカウンタ250のカウンタ値とを比較して、比較結果を出力する。本例においては、比較回路252は、カウンタ値がタイマ値に到達したか否かを判断する。
比較回路252は、タイマ値に到達した場合にフラグデータの更新の要求として「H」レベルを出力する。
また、クロックカウンタ250は、比較回路252からの信号に基づいてカウンタ値をリセットして初期値0に設定する。
比較回路252の出力(「H」レベル)に従ってプリサーチ動作は無効とされ、対応するサブブロックにおけるデータ検索動作が実行される。
また、比較回路252の出力がフラグデータの更新の要求としてブロック走査部204に出力される。ブロック走査部204のリード制御部420は、比較回路252の出力に基づいて上記で説明したメンテナンス動作を実行する。
なお、本例においては、クロックカウンタ250を利用する方式について説明したが、特にこれに限られず、計時手段を有する構成であれば、当該計時手段の値と、タイマ値との比較に基づいて比較結果を出力する構成とすることも可能である。
[c3.メンテナンス動作の別の構成]
書込データに基づいてメンテナンス動作を実行することも可能である。
図19は、ブロック制御部206Cの構成について説明する図である。
図19を参照して、ブロック制御部206Cは、書込データ制御部260と、比較回路262とを含む。
書込データ制御部260は、書込イネーブル信号wena、ライトアドレス信号waddr、書込データwdataの入力を受けて所定の動作を実行する。
書込データ制御部260は、書込イネーブル信号wenaに従って書込データwdataの入力を受け付ける。
また、書込データ制御部260は、入力された書込データwdataのうち選択レジスタ223に格納されているデータ(“#0”)に基づいて識別子#0に対応する領域のデータを抽出して比較回路262に出力する。
また、書込データ制御部260は、ライトアドレス信号waddrに従って対応するフラグデータを抽出して比較回路262に出力する。
本例においては、ライトアドレス信号waddrとして“0x0”が入力される場合が示されている。
書込データ制御部260は、ライトアドレス信号waddr(“0x0”)に対応する0番目のエントリ(行)に対応するデータのうちのフラグデータレジスタ225に格納されるフラグデータ“0001”を抽出する。
比較回路262は、書込データ制御部260により抽出された書込データwdataと、フラグデータとを比較して一致しているか否か、すなわちデータが更新されたかどうかを判断する。
比較回路262は、データが不一致である場合にはデータが更新されたと判断してフラグデータの更新を要求する。ブロック走査部204のリード制御部420は、比較回路262の出力に基づいて上記で説明したメンテナンス動作を実行する。
比較回路262は、データが一致であると判断した場合にはデータは更新されていないと判断してフラグデータの更新は要求しない。
[c4.メンテナンス動作の別の構成]
サブブロックの活性化に基づいてメンテナンス動作を実行するようにしても良い。
図20は、サブブロックの活性化に基づくメンテナンス動作について説明する図である。
図20を参照して、複数のサブブロック100は、サーチ線イネーブル信号senaに従って活性化されてデータ検索動作を実行する場合が示されている。
本例においては、4個のサブブロック100のうち3個のサブブロックが活性化されて入力サーチデータskeyに従ってデータ検索動作を実行する場合が示されている。
複数のサブブロック100に関して、活性化するサブブロック100の個数が増加するほど消費電力が増大する。したがって、所定以上のサブブロック100の個数が活性化した場合にはフラグデータの更新を要求することが可能である。
図21は、メイン制御回路300がフラグデータの更新を要求する処理を説明するフロー図である。
図21を参照して、メイン制御回路300は、全体のサブブロックのうちのサブブロックの活性率を計算する(ステップS22)。具体的には、メイン制御回路300は、各サブブロックに入力されるサーチ線イネーブル信号senaの入力状態をモニタリング(監視)し、全体のサブブロックのうちのサブブロックの活性率を計算する。
次に、メイン制御回路300は、活性率が所定値(X%)を超えているか否かを判断する(ステップS24)。
メイン制御回路300は、活性率が所定値(X%)を超えていると判断した場合(ステップS24においてYES)には、フラグの更新を要求する(ステップS26)。メイン制御回路300は、複数のプリサーチサブ回路200のそれぞれに対してフラグデータの更新を要求する。各プリサーチサブ回路200のリード制御部420は、メイン制御回路300からのフラグデータの更新の要求に基づいて上記で説明したメンテナンス動作を実行する。
そして、処理を終了する(エンド)。
一方、メイン制御回路300は、活性率が所定値を超えていないと判断した場合(ステップS24においてNO)には、フラグデータの更新を要求することなく処理を終了する(エンド)。
例えば、所定値(X%)として70%を設定した場合、図20の例においては、活性率が75%であるためフラグデータの更新を要求する。
なお、本例においては、活性率が所定値を超えているか否かを判断する方式について説明したが、複数回の活性率の平均値と比較するようにしても良い。
(実施形態2)
図22は、プリサーチサブ回路200#の構成の全体概要を説明する図である。
図22を参照して、プリサーチサブ回路200#は、ブロック走査部204と、データ生成部202と、メモリ部208と、検索部210と、ブロック制御部206#とを含む。
ブロック走査部204は、リード制御部420と、一時記憶部422とを含む。
データ生成部202は、プリサーチキー生成部430と、フラグデータ生成部432と、データ判定部221と、レジスタ部436と、無効フラグ生成部438とを含む。
リード制御部420は、リードイネーブル信号renaおよびアドレス信号raddrを受けてサブブロック100に対してデータ読出動作の実行を指示する。サブブロック100は、リード制御部420からの指示に従ってデータ読出動作を実行して読出データrdataをリード制御部420に出力する。
リード制御部420は、サブブロック100から読み出された読出データrdataを一時記憶部422に格納する。
データ判定部221は、一時記憶部422に格納された対応するサブブロック100からの読出データrdataに従って所定領域のデータが全てバイナリ値か否かを判定する。
レジスタ部436は、データ判定部221の判定結果を格納する判定レジスタ222と、判定レジスタ222に格納されている判定値に基づいて最小の識別子を指定するデータを格納する選択レジスタ223とを含む。
プリサーチキー生成部430は、セレクタ224を含む。セレクタ224は、入力サーチデータskeyの入力を受けて、選択レジスタ223に格納されているデータに基づいてプリサーチキーpskeyを指定する。
フラグデータ生成部432は、セレクタ230を含む。セレクタ230は、選択レジスタ223に格納されているデータに基づいて一時記憶部422に格納されるエントリ(行)の対応する領域のデータをフラグデータとして指定する。
無効フラグ生成部438は、OR回路234を含む。OR回路234は、判定レジスタ222の判定結果に基づいてブロック制御部206#に無効フラグを出力する。
メモリ部208は、フラグデータレジスタ225を含む。フラグデータレジスタ225は、フラグデータ生成部432により生成された比較結果として用いられるフラグデータを格納する。
検索部210は、プリサーチキーpskeyと、フラグデータレジスタ225に格納されているそれぞれのフラグデータとを比較して比較結果をブロック制御部206#に出力する。
ブロック制御部206#は、更新フラグ管理部400と、OR回路416,418と、ライト制御部424とを含む。
更新フラグ管理部400は、フラグデータの更新を管理する。具体的には、更新フラグ管理部400は、書込回数管理部402と、クロック管理部404と、書込データ管理部406と、状態管理部410と、更新フラグマージ部414とを含む。
書込回数管理部402は、サブブロック100への書込回数をカウントし、書込回数に基づいてフラグデータの更新の要求を出力する。具体的には、図16で説明した方式に従って書込イネーブル信号wenaの入力回数をカウントして所定回数以上となった場合にフラグデータの更新を要求する。
クロック管理部404は、所定期間が経過した場合にフラグデータの更新の要求を出力する。具体的には、図18で説明した方式に従って基準クロックclkをクロックカウンタでカウントアップし、タイマ値と比較してタイマ値に到達した場合にフラグデータの更新を要求する。
書込データ管理部406は、書込データに基づいてフラグデータが更新された場合にフラグデータの更新の要求を出力する。具体的には、図19で説明した方式に従って、書込データとフラグデータとを比較して、不一致であればデータが更新されたと判断してフラグデータの更新の要求を出力する。
状態管理部410は、プリサーチサブ回路200#の状態に従ってフラグデータの更新の要求を出力する。具体的には、リセット信号(init_flag)の入力に従ってフラグデータの更新の要求を出力する。なお、リセット信号(init_flag)の入力に限られず、例えば、メイン制御回路300から入力される状態指示に従ってフラグデータの更新の要求を出力しても良い。たとえば、図20および21で説明したようにメイン制御回路300は、サブブロックの活性率を算出して、活性率が所定値を超えていると判断した場合に状態管理部410に指示する。状態管理部410は、当該指示を受けてフラグデータの更新の要求を出力する。また、状態管理部410は、対応するサブブロック100のデータが更新されたと判断した場合にフラグデータの更新の要求を出力するようにしても良い。
更新フラグマージ部414は、各管理部からのフラグデータの更新の要求を受けて、サブブロックが使用中で無いと判断した場合にブロック走査部204にメンテナンス動作の実行を指示する。更新フラグマージ部414は、メイン制御回路300から出力される制御信号(nop)に従ってサブブロックが使用中であるか否かを判断する。
OR回路416は、無効フラグ生成部438で生成された無効フラグと、更新フラグマージ部414からの信号のOR論理演算結果をOR回路418に出力する。
OR回路418は、検索部210の検索結果とOR回路416の出力信号とのOR論理演算結果をAND回路201に出力する。
AND回路201は、OR回路418の出力信号と検索イネーブル信号saとのAND論理演算結果をサーチ線イネーブル信号senaとして出力する。
OR回路416から「H」レベルが出力された場合には、検索部210のプリサーチ動作の如何に拘わらずOR回路418の出力は「H」レベルとなり、サーチ線イネーブル信号senaは、「H」レベルとなる。したがって、上記で説明したのと同様にプリサーチ動作は無効とされ、対応するサブブロックにおけるデータ検索動作が実行される。
なお、上記においては、フラグデータとして4ビットのデータを抽出する方式について説明したが、これに限られず、フラグの生成方法として、読み出しデータに対して符号化処理や、Hash関数を用いてデータ圧縮処理を行い、圧縮されたデータに基づいてフラグデータを生成したり、読み出しデータに対してブルームフィルタ等のフィルタ処理を行ったデータに基づいてフラグデータを生成するようにしても良い。
(実施形態3)
図23は、実施形態3に基づくプリサーチサブ回路200Rの構成を説明する機能ブロック図である。
図23を参照して、プリサーチサブ回路200Rは、データ解析部203と、ブロック走査部204と、ブロック制御部206と、メモリ部208と、検索部210とを含む。
ブロック制御部206は、サブブロック100を制御するための各種信号を出力する。また、ブロック制御部206は、ブロック走査部204にデータ読出動作を指示する。
ブロック走査部204は、ブロック制御部206からの指示に従って対応するサブブロック100にリードイネーブル信号renaおよびアドレス信号raddrを出力する。サブブロック100は、ブロック走査部204からのリードイネーブル信号renaおよびアドレス信号raddrに基づいて、読出データrdataを出力する。ブロック走査部204は、サブブロック100からの読出データrdataをデータ生成部202に出力する。
データ解析部203は、サブブロック100からの読出データrdataに基づいてデータ解析に基づく統計データを生成する。また、入力される入力サーチデータskeyに基づくプリサーチ用のプリサーチキーpskeyを生成する。データ解析部203は、解析して生成した統計データをメモリ部208に出力する。
メモリ部208は、データ解析部203で生成した統計データを格納する。
検索部210は、プリサーチキーpskeyと、メモリ部208に格納されている統計データとを比較して、比較結果をブロック制御部206に出力する。
ブロック制御部206は、検索部210からの比較結果をプリサーチ動作の検索結果信号sdとしてAND回路201に出力する。
AND回路201は、ブロック制御部206からのプリサーチ動作の検索結果信号sdと、検索イネーブル信号saとのAND論理演算結果に基づいてサーチ線イネーブル信号senaを出力する。
サブブロック100は、サーチ線イネーブル信号senaに従って、入力サーチデータskeyに対するデータ検索動作を実行する。
図24は、実施形態3に基づくプリサーチサブ回路のプリサーチ動作を説明する図である。
図24(A)を参照して、データ解析部203において、ブロック走査部204で読み出したサブブロックの読出データrdataに従ってプリサーチテーブルを作成する方式が示されている。
具体的には、16ビットのエントリ(行)を4ビットずつのフィールドに分割し、各4ビットずつのフィールドのデータについてX値とY値とに分離する。
X値、Y値は、上記で説明したSRAM(X)セルおよびSRAM(Y)セルにそれぞれ格納される値を示す。
図2で説明したようにデータ“0”は、X値“1”、Y値“0”で表わされる。また、データ“1”は、X値“0”、Y値“1”で表わされる。データ“*”は、X値“0”、Y値“0”で表わされる。
本例においては、4ビットずつのデータのX値、Y値それぞれの“1”の数をカウントした統計データをプリサーチテーブルとして生成する。
図24(A)においては4つのエントリ(行)が示されており、サブブロック100Aおよび100Bの読出データについてX値、Y値に分離したデータがそれぞれ示されている。
また、X値、Y値に分離したデータについて、フィールドあたりのそれぞれの“1”のビット数をカウントしてプリサーチテーブルを作成した場合が示されている。
一例として、エントリ(行)は、“010100**00101010”のデータについて、X値は“1010110011010101”、Y値は“0101000000101010”となる。
4ビットずつのフィールドで“1”の数をカウントするとX値側は“2232”、Y値側は“2012”として表わされる。
他のエントリ(行)についても同様の手順で実行することによりプリサーチテーブルが作成される。
図24(B)においては、入力サーチデータと比較する場合の方式を説明する図である。
入力サーチデータ“0001001101010110”についてプリサーチ動作を実行する場合について説明する。
データ解析部203は、入力サーチデータについても上記と同様にX値、Y値に分離して、4ビットずつのフィールドで“1”の数をカウントすると、X値側は“3222”、Y値側は“1222”として表わされる。
そして、検索部210は、入力サーチデータのX値側データ“3222”およびY値側データ“1222”と、プリサーチテーブルとを比較する。
検索部210は、ビットごとにデータの大小比較を実行する。具体的には、入力サーチデータの値とプリサーチテーブルの値とを比較して、プリサーチテーブルの値が入力サーチデータの値よりも大きいか、あるいは、プリサーチテーブルの値が入力サーチデータの値以下かを判断する。ドントケアビット(“*”)はX値もY値もゼロであり、統計値としてカウントされないため、一致比較ではなく値同士を大小比較することで、検索結果の正当性を確保している。
1ビットずつ判断して、全てのビットでプリサーチテーブルの値が入力サーチデータの値以下であると判断した場合に一致“hit”と判定する。1ビットでも異なる場合には、不一致“miss”と判定する。
本例においては、サブブロック100Aの読出データrdataに基づいて生成したプリサーチテーブルとの比較において、一致した場合が示されている。一方、サブブロック100Bの読出データrdataに基づいて生成したプリサーチテーブルとの比較において、不一致の場合が示されている。
ブロック制御部206は、入力サーチデータと比較して一致した場合には、検索結果信号sd(“1”)を出力する。したがって、対応するサブブロック100Aに対するデータ検索動作が実行される。一方、ブロック制御部206は、入力サーチデータと比較して不一致の場合には、検索結果信号sd(“0”)を出力する。したがって、対応するサブブロック100Bに対するデータ検索動作は実行されない。
本例においては、サブブロック100Aにおけるデータ検索動作が実行され、サブブロック100Bにおけるデータ検索動作は実行されない。
当該方式により簡易な方式でプリサーチテーブルを生成し、簡易かつ高速なプリサーチ動作を実行することが可能である。
また、プリサーチサブ回路の部品点数を削減して構成を簡易にすることが可能である。
(変形例)
図25は、実施形態3の変形例に基づくプリサーチサブ回路のプリサーチ動作を説明する図である。
図25(A)を参照して、データ解析部203において、ブロック走査部204で読み出したサブブロックの読出データrdataに従ってプリサーチテーブルを作成する方式が示されている。
具体的には、図24で説明したのと同様の方式に従って第1のプリサーチテーブルを生成する。
そして、次に、各列毎の最小値を第2のプリサーチテーブルとして生成する。
本例においては、サブブロック100Aに対応するプリサーチテーブルとして、X値側の最小値(min)は“2021”、Y値側の最小値(min)は“0012”として表わされる。
また、サブブロック100Bに対応するプリサーチテーブルとして、X値側の最小値(min)は“0301”、Y値側の最小値(min)は“1001”として表わされる。
図25(B)においては、入力サーチデータと比較する場合の方式を説明する図である。
入力サーチデータ“0001001101010110”についてプリサーチ動作を実行する場合について説明する。
データ解析部203は、入力サーチデータについても上記と同様にX値、Y値に分離して、4ビットずつのフィールドで“1”の数をカウントすると、X値側は“3222”、Y値側は“1222”として表わされる。
そして、検索部210は、入力サーチデータのX値側データ“3222”およびY値側データ“1222”と、プリサーチテーブルとを比較する。
検索部210は、ビットごとにデータの大小比較を実行する。具体的には、入力サーチデータの値とプリサーチテーブルの値とを比較して、プリサーチテーブルの値が入力サーチデータの値よりも大きいか、あるいは、プリサーチテーブルの値が入力サーチデータの値以下かを判断する。ドントケアビット(“*”)はX値もY値もゼロであり、統計値としてカウントされないため、一致比較ではなく値同士を大小比較することで、検索結果の正当性を確保している。
1ビットずつ判断して、全てのビットでプリサーチテーブルの値が入力サーチデータの値以下であると判断した場合に一致“hit”と判定する。1ビットでも異なる場合には、不一致“miss”と判定する。
本例においては、サブブロック100Aの読出データrdataに基づいて生成したプリサーチテーブルとの比較において、一致した場合が示されている。一方、サブブロック100Bの読出データrdataに基づいて生成したプリサーチテーブルとの比較において、不一致の場合が示されている。
ブロック制御部206は、入力サーチデータと比較して一致した場合には、検索結果信号sd(“1”)を出力する。したがって、対応するサブブロック100Aに対するデータ検索動作が実行される。一方、ブロック制御部206は、入力サーチデータと比較して不一致の場合には、検索結果信号sd(“0”)を出力する。したがって、対応するサブブロック100Bに対するデータ検索動作は実行されない。
本例においては、サブブロック100Aにおけるデータ検索動作が実行され、サブブロック100Bにおけるデータ検索動作は実行されない。
当該方式により簡易な方式でプリサーチテーブルを生成し、簡易かつ高速なプリサーチ動作を実行することが可能である。
また、プリサーチサブ回路の部品点数を削減して構成を簡易にすることが可能である。
最小値のみを管理するプリサーチテーブルを生成するため、データ量が減少するため複数のレジスタ等を設ける必要が無く回路面積を縮小することが可能である。
以上、本開示を実施形態に基づき具体的に説明したが、本開示は、実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。