JP6166306B2 - 半導体装置,情報処理システム,及び情報書込/読出方法 - Google Patents

半導体装置,情報処理システム,及び情報書込/読出方法 Download PDF

Info

Publication number
JP6166306B2
JP6166306B2 JP2015101081A JP2015101081A JP6166306B2 JP 6166306 B2 JP6166306 B2 JP 6166306B2 JP 2015101081 A JP2015101081 A JP 2015101081A JP 2015101081 A JP2015101081 A JP 2015101081A JP 6166306 B2 JP6166306 B2 JP 6166306B2
Authority
JP
Japan
Prior art keywords
data
memory
divided
key data
search
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015101081A
Other languages
English (en)
Other versions
JP2016219073A (ja
Inventor
正登 西沢
正登 西沢
小林 薫
薫 小林
大塚 寛治
寛治 大塚
佐藤 陽一
陽一 佐藤
利之 河内
利之 河内
稔 上井
稔 上井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nagase and Co Ltd
Original Assignee
Nagase and Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nagase and Co Ltd filed Critical Nagase and Co Ltd
Priority to JP2015101081A priority Critical patent/JP6166306B2/ja
Priority to PCT/JP2016/062290 priority patent/WO2016185848A1/ja
Priority to TW105112474A priority patent/TWI640879B/zh
Publication of JP2016219073A publication Critical patent/JP2016219073A/ja
Application granted granted Critical
Publication of JP6166306B2 publication Critical patent/JP6166306B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C15/00Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
    • G11C15/04Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores using semiconductor elements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)

Description

本発明は,半導体装置,複数の半導体装置を備える情報処理システム,及び半導体装置に対するエントリアドレスの書込/読出方法に関する。具体的に説明すると,本発明の半導体装置は,データの書込時及び検索時における消費電力を低減させることを図った連想メモリ(CAM:Content Addressable Memory)などに関するものである。
近年,クラウドコンピューティングの時代となり,インターネットスイッチやルータの高性能化や消費電力の低減が緊急の課題であるとされている。また,インターネットの検索エンジンとしては,より高速かつ低消費電力で確実な検索操作を行うことができるものが求められている。このような要求に応えるために,近年,インターネットスイッチや検索エンジンでは,CAMを使用することが多くなってきている。
ここで,一般的なCAMは,CAM内に記憶されているデータ検索を行う際に,キーデータと呼ばれる検索データが入力される。そして,CAMは,キーデータと同じデータがメモリに記憶されている場合に,そのキーデータが記憶されているメモリのアドレス(番地)を出力する。このときのアドレスは,エントリアドレスとも呼ばれる。一般的に,このような検索機能を実現するためには,CAM内の全メモリ空間へのアクセスが必要となり,回路構成が複雑になるだけではなく,消費電力が大きくなるという問題があった。特に,この消費電力が大きくなるという問題は,CAMの規模に伴って大きくなるものであるため,現在では非常に深刻な問題であるとされている。
このような問題に対し,例えば特許文献1では,CAMの高速検索性を活かしつつ,低消費電力化を図ることを目的としたデータ検索装置が提案されている。特許文献1のデータ検索装置は,プライオリティが決められた複数のルールデータを,その大小の順序に応じて新たに順序付けし,その順序に応じて複数のメモリブロックに割り当てる。また,この検索装置は,データの検索を行う際には,検索すべき一つのメモリブロックを指定して検索処理を実行する。このように,特許文献1のデータ検索装置は,検索処理を行う際に,指定された一つのブロックのみをアクティブにし,他のブロックをアクティブにする必要がないことから,その分,通常のCAMと比較して検索時の消費電力を低減することができるとされている。
しかしながら,上記特許文献1に開示されたデータ検索装置は,通常のメモリと比較して検索時の消費電力を低減することが可能であるものの,検索処理を実行するためには,一度にブロック内の全メモリ空間にアクセスする必要がある。このため,従来のデータ検索装置は,回路構成が複雑であるとともに,検索時における消費電力が大きいという問題を有していた。このように,上記特許文献1の技術は,現在の問題に対する根本的な解決策を提示するものではなかった。
特開2004−185792号公報 特許第5575997号公報
ところで,高速かつ低消費電力でのデータ検索を実現するために,本発明者らによって,新規な半導体装置(CAM)が検討されている(特許文献2)。この新規なCAMは,メモリアドレスによって特定されるメモリ空間にキーデータに対応するエントリアドレスが書き込まれる検索メモリマットと,この検索メモリマットに接続された制御回路とを備える。検索メモリマットは,メモリ空間が,メモリアドレスを保持したまま,複数の分割メモリに区分されている。CAMに対して,検索メモリマットに書き込むためのキーデータが入力されると,制御回路は,このキーデータを複数の分割データに分割する。そして,制御回路は,複数の分割データのそれぞれを,複数の分割メモリに割り当てて,各分割データをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間に,当該分割データに対応するエントリアドレスを書き込んでいく。このようにして,検索メモリマットに,複数のキーデータに対応するエントリアドレスが書き込まれていく。
また,検索メモリマットに書き込まれたキーデータを検索する処理は,書込処理と同様のステップで行われる。つまり,CAMに対して,検索対象データとしてのキーデータが入力されると,制御回路は,この検索対象データとしてのキーデータを複数の分割データに分割していく。そして,制御回路は,分割データのそれぞれをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間から,当該分割データに対応するエントリアドレスを読み出す。
このようにして,本発明者により開発された新規なCAMでは,キーデータが複数に分割され,この分割されたキーデータのそれぞれに対応するエントリアドレスが,分割メモリに記憶される。このため,このエントリアドレスを検索する際には,検索メモリマット全体を一度にアクティブに(活性化)させる必要はなく,検索メモリマットを分割メモリごとに部分的にアクティブにさせて検索することが可能となる。従って,このCAMによれば,従来のCAMと同様の高速性でデータ検索を実現しつつ,従来のCAMよりも極めて低い消費電力でデータ検索を実行することができる。
ただし,CAMのメモリ空間に対して,複数のキーデータに対応するエントリアドレスを書き込もうとする場合,そのメモリ空間に,他のキーデータに対応するエントリアドレスが既に書き込まれている事態が想定される。このように,メモリ空間にエントリアドレスの衝突が生じている場合には,そのメモリ空間に,エントリアドレスの衝突を表す衝突情報(ドントケア値)を登録することで対処する。これにより,エントリアドレスの書込処理/読出処理を高速化できる。
しかしながら,半導体装置に書き込もうとするキーデータの値に偏りが生じており,キーデータの値がほぼ同じ値となっている場合など,キーデータを書き込もうとする際に,すべてのメモリ空間に衝突(全衝突)が生じている場合もある。このような全衝突が生じている場合,分割されたメモリ空間には,キーデータに対応するエントリアドレスが書き込まれることなく,衝突情報(ドントケア値)のみが登録されることとなる。そうすると,全衝突が生じているキーデータを検索メモリマットから検索しようとする際には,衝突情報(ドントケア値)しか読み出すことができない。この場合,例えば,衝突しているエントリアドレスから,検索対象のキーデータに対応するエントリアドレスの複数の候補を読み出し,これらの複数の候補の中から,検索対象のキーデータに対応するかどうかを一つ一つ照合する処理(いわゆる総ざらい処理)を行う必要ある。このような総ざらい処理が発生すると,データ検索処理を遅延を招いたり,データ検索の精度が低下するという問題があると考えられていた。
このように,本発明者らによっても,新規なCAMの構造において,キーデータの書込処理時に全衝突が発生した場合の対策については検討の余地があるとされていた。
また,CAMは,ワイルドカード検索機能を実装していることが求められる。例えば,IPv4に準拠した32ビットのIPアドレスは,上位24ビット(又は28ビット)がネットワークアドレスとなり,下位8ビット(又は4ビット)がホストアドレスとなるように規定されている。例えば,24ビットのネットワークアドレスは「/24」のように表記され,28ビットのネットワークアドレスは「/28」のように表記される。このような。このとき,例えば,CAMに記憶されたIPアドレスのうち,上位24ビットのネットワークアドレスが一致するものが検索対象とされ,下位8ビットのホストアドレスが無視(ドントケア)して検索が行われることも多い。このような,部分一致の検索機能は,ワイルドカード検索機能とも呼ばれる。
一般的なCAMには,このようなワイルドカード検索機能が実装されていることが求められている。本発明者らに検討されている新規なCAMの構造においても,このワイルドカード検索機能を実現するためのアーキテクチャについては検討の余地があるとされていた。
そこで,本発明の第1は,キーデータの書込処理時に全衝突が発生した場合の効率的な解決手段を提供することを第1の目的とする。
また,本発明は,ワイルドカード検索機能を実現するための効率的なアーキテクチャを提供することを第2の目的とする。
本発明は,第1の目的と第2の目的の少なくともいずれか一方を達成するものである。
本発明の第1の側面は,半導体装置に関する。
本発明の半導体装置は,検索メモリマット100と,制御回路200と,バックアップメモリ300と,を備える。
検索メモリマット100は,メモリアドレス(MA)によって特定されるメモリ空間に,キーデータ(KD)に対応するエントリアドレス(EA)が書き込まれる。制御回路200は,検索メモリマット100に接続されている。バックアップメモリ300は,制御回路200に接続されている。
検索メモリマット100は,メモリ空間が,メモリアドレス(MA)を保持したまま,複数の分割メモリ110a,110b…に区分されたものある。つまり,検索メモリマット100は,共通するメモリアドレス(MA)を有する複数の分割メモリ110a,110b…によって構成されている。
制御回路200は,入力部210と,分割部220と,書込部230と,を有する。
入力部210には,検索メモリマット100に書き込むためのキーデータ(KD)が入力される。分割部220は,入力部210に入力されたキーデータ(KD)を複数の分割データに分割する。そして,書込部230は,複数の分割データのそれぞれを,複数の分割メモリ110a,110b…に割り当てて,各分割データをアドレスとして,各分割メモリ110a,110b…のメモリアドレス(MA)によって特定されるメモリ空間に,当該分割データに対応するエントリアドレス(EA)を書き込む(図4参照)。
ここで,書込部230は,ある分割データに対応するエントリアドレス(EA)を書き込むべきメモリ空間に,既に他の分割データに対応するエントリアドレス(EA)が書き込まれている場合には,当該メモリ空間に,エントリアドレス(EA)の衝突を表す衝突情報(ドントケア値)を登録する(図5参照)。
さらに,書込部230は,あるキーデータから分割された複数の分割データの全てについて,エントリアドレス(EA)の衝突が生じている場合には,その全衝突が生じているキーデータ(KD)とこれに対応するエントリアドレス(EA)とを対応付けて,バックアップメモリ300に書き込む(図6参照)。
上記構成のように,本発明の半導体装置は,全衝突対策として,バックアップメモリ300を備えている。つまり,本発明の半導体装置では,(i)キーデータを複数の分割データに分割し,(ii)各分割データを分割メモリ110a,110b…に割り当てて,(iii)各分割データをアドレスとして,各分割メモリ110a,110b…のメモリアドレスによって特定されるメモリ空間にアクセスし,(iv)アクセスしたメモリ空間に,キーデータに対応するエントリアドレスを書き込む処理を行う(図4参照)。このとき,ある分割データに対応するエントリアドレス(EA)を書き込むべきメモリ空間に,既に他の分割データに対応するエントリアドレス(EA)が書き込まれている場合には,当該メモリ空間に,エントリアドレス(EA)の衝突を表す衝突情報(ドントケア値)を登録する(図5参照)。しかしながら,このような衝突情報は,あるキーデータから分割された複数の分割データの全てについて書き込まれる可能性もある。そこで,本発明の半導体装置は,全衝突が生じている場合には,その全衝突が生じているキーデータとこれに対応するエントリアドレスとを対応付けて,検索メモリマット100とは別に設けられたバックアップメモリ300に書き込む(図6参照)。このように,本発明の半導体装置は,バックアップメモリ300を設けておくことで,全衝突が生じるキーデータとそのエントリアドレスとを,回避させて記憶しておくことができる。全衝突が生じたキーデータは,読出処理(検索処理)が非常に煩雑なものであったが,バックアップメモリ300に記憶しておくことで,読出処理(検索処理)を迅速かつ効率的に行うことができる。これにより,上述した本発明の第1の目的が達成される。
本発明の半導体装置は,エントリアドレス(EA)に対応づけてキーデータ(KD)が記憶される確認用メモリ400を,さらに備えることが好ましい。特に,この確認用メモリ400には,上述したバックアップメモリ300に書き込まれていないエントリアドレス(EA)とキーデータ(KD)のみが記憶されることが好ましい。
上記構成のように,半導体装置は,検索メモリマット100及びバックアップメモリ300とは別の用途として,確認用メモリ400を備えていることが好ましい。例えば,半導体装置は,新規なキーデータが入力されてきたときに,その新規なキーデータにエントリアドレスを割り当てて,その新規なキーデータとエントリアドレスの対応関係を,確認用メモリ400に記憶しておくことができる。このようにすることで,キーデータの読出処理によってエントリアドレスを読み出すときに,適宜,確認用メモリ400を参照するようにすれば,その読み出したエントリアドレスが,検索対象データに対応するものであるかどうかを確認することができる。特に,検索メモリマット100においてにエントリアドレスの衝突が発生しており,読み出し処理時にドントケア処理が行われる場合には,確認用メモリ400を利用して,読み出したエントリアドレスが適切なものであるかを確認することは有効である。このようにして,本発明によれば,エントリアドレスの衝突が生じている場合であっても,正確にデータ検索を行うことが可能となる。また,バックアップメモリ300に書き込まれるエントリアドレスとキーデータについては,確認用メモリ400に記憶する必要はない。これにより,バックアップメモリ300と確認用メモリ400という別々のメモリに,重複したデータが書き込まれることを防止できる。
本発明の半導体装置は,さらに,マスクレジスタ500を備えることが好ましい。
マスクレジスタ500は,所望のマスクパターンが登録されており,当該マスクパターンに応じて,入力されたキーデータにマスクを付与する処理を行う。そして,マスクレジスタ500によってマスクが付与されたキーデータが,制御回路200の入力部210に入力される。
上記構成のように,マスクレジスタ500を設け,書込対象又は検索対象のキーデータに対してマスクを付与することにより,本発明の半導体装置にワイルドカード検索機能を実装することができる。つまり,マスクが付与された後のキーデータを,入力部210を介して,分割部220及び書込部230へと入力して処理することにより,マスクが付与されたキーデータを検索メモリマット100に記憶しておくことができる。これにより,検索メモリマット100からキーデータに対応するエントリアドレスを読み出す際にも,マスクが付与されたビットを無視する(ドントケアとする)ことが可能となる。これにより,上述した本発明の第2の目的が達成される。
本発明の半導体装置において,制御回路200は,さらに,読出部240を有することが好ましい。まず,入力部210に,検索対象データとしてのキーデータが入力されると,分割部220が,当該検索対象データとしてのキーデータを複数の分割データに分割する。その後,読出部240は,分割データのそれぞれをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間から,当該分割データに対応するエントリアドレスを読み出す(図7参照)。
このとき,読出部240は,メモリ空間にアクセスしたときに,当該メモリ空間に前記衝突情報が登録されている場合には,分割データに対応するエントリアドレスを読み出さずに,ドントケアとして処理する(図7参照)。
他方,読出部240は,ある検索対象データとしてのキーデータから分割された複数の分割データの全てがドントケアとして処理される場合,又は,読み出したエントリアドレスに不一致が生じている場合に,バックアップメモリ300から,当該検索対象データとしてのキーデータに基づいて,これに対応するエントリアドレスを検索する(図8参照)。
上記構成のように,検索対象データとしてのキーデータに対応するエントリアドレスを読み出そうとした場合,分割データの全てがドントケアとして処理される場合(全衝突)が想定される。例えば,全衝突が発生している場合,メモリ空間に書き込まれているエントリアドレスの候補を全て読み出して,検索対象データとしてのキーデータと一致しているかどうかを総ざらい的に検証することも可能である。しかし,上述した総ざらい処理を行うと,キーデータの検索処理に著しい遅延が発生する。そこで,このように全衝突が発生している場合や,エントリアドレスの不一致が生じている場合に,バックアップメモリ300を参照して,検索対象データとしてのキーデータに一致するキーデータを検索することとしている。これにより,総ざらい処理による処理遅延を回避し,迅速かつ効率的に検索結果を出力することが可能となる。このような処理は,上述した本発明の第1の目的に関連する。
本発明の第2の側面は,情報処理システムに関する。第2の側面に係る情報処理システムは,上述した第1の側面に係る半導体装置10を複数有するシステムである。
本発明の情報処理システムにおいて,複数の半導体装置10は,それぞれ,マスクレジスタ500に登録されているマスクパターンが異なることが好ましい。
上記構成のように,半導体装置10を複数用意し,各半導体装置10のマスクレジスタ500に異なるマスクパターンを登録しておく。そして,書込対象又は検索対象のキーデータがシステムに入力されたときには,マスクパターンの異なる複数の半導体装置10のそれぞれに,同じキーデータを入力する。このようにして,予め複数のマスクパターンを登録しておくことで,ワイルドカード検索機能を利用するユーザに対して,ユーザの希望に則した検索結果を提供することができる。
本発明の情報処理システムは,さらに,マスクコントローラ20を備えていることが好ましい。
マスクコントローラ20は,複数の半導体装置10のそれぞれに接続されている。
マスクコントローラ20は,テーブルデータ入力部21と,マスクパターン生成部22と,マスクパターン登録部23と,を有する。
テーブルデータ入力部21には,マスク部位を有する複数のキーデータが含まれるテーブルデータが入力される。すなわち,テーブルデータには,複数のキーデータが含まれており,この複数のキーデータの中にはマスク部位を有するものが含まれる。キーデータのマスク部位には,複数のパターンが存在していることが好ましい(図11参照)。
マスクパターン生成部22は,テーブルデータに含まれる複数のキーデータのマスク部位のパターンを解析して,複数種類のマスクパターンを生成する(図11参照)。
マスクパターン登録部23は,マスクパターン生成部22が生成した複数種類のマスクパターンを,それぞれ,異なる前記半導体装置10のマスクレジスタ500に登録する(図12,図1参照)。
上記構成のように,マスクコントローラ20を備えることで,マスク部位の異なる複数のキーデータから構成されるテーブルデータを,一括して,半導体装置10の検索メモリマット100に書き込むことができる。テーブルデータを書き込む際に,マスクコントローラ20が,キーデータのマスク部位を自動的に解析して,このマスク部位をパターン化し,このマスク部位のパターンに対応するマスクパターンを,半導体装置10のマスクレジスタ500に登録していく。このため,テーブルデータ内に含まれるキーデータを検索する際には,ワイルドカード検索機能を利用することが可能となる。このような処理は,上述した本発明の第2の目的に関連する。
本発明の第3の側面は,情報書込方法に関する。第3の側面に係る情報書込方法は,上述した第1の側面に係る半導体装置により実行される。
情報書込方法は,
制御回路にキーデータが入力される工程と;
制御回路が,キーデータを複数の分割データに分割する工程と;
制御回路が,複数の前記分割データのそれぞれを,複数の分割メモリに割り当てて,各分割データをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間に,当該分割データに対応するエントリアドレスを書き込む工程と,を含む。
エントリアドレスを書き込む工程において,制御回路は,ある分割データに対応するエントリアドレスを書き込むべきメモリ空間に,既に他の分割データに対応するエントリアドレスが書き込まれている場合には,当該メモリ空間に,エントリアドレスの衝突を表す衝突情報を登録する。ただし,制御回路は,あるキーデータから分割された複数の分割データの全てについて衝突が生じている場合には,その全衝突が生じているキーデータとこれに対応するエントリアドレスとを対応付けて,バックアップメモリ300に書き込む。
本発明の第4の側面は,情報読出方法に関する。第4の側面に係る情報読出方法は,上述した第3の側面に係る情報書込方法によって,半導体装置に書き込まれた情報を読み出す方法である。
情報読出方法は,
制御回路に検索対象データとしてのキーデータが入力される工程と;
制御回路が,検索対象データとしてのキーデータを複数の分割データに分割する工程と;
制御回路が,分割データのそれぞれをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間から,当該分割データに対応するエントリアドレスを読み出す工程と,を含む。
エントリアドレスを読み出す工程において,制御回路は,メモリ空間にアクセスしたときに,当該メモリ空間に前記衝突情報が登録されている場合には,分割データに対応するエントリアドレスを読み出さずに,ドントケアとして処理する。ただし,制御回路は,ある検索対象データとしてのキーデータから分割された複数の分割データの全てがドントケアとして処理される場合,又は,読み出したエントリアドレスに不一致が生じている場合に,バックアップメモリ300から,当該検索対象データとしてのキーデータに基づいて,これに対応するエントリアドレスを検索する。
本発明によれば,キーデータの書込処理時に全衝突が発生した場合の効率的な解決手段を提供することができる(第1の目的)。また,本発明によれば,ワイルドカード検索機能を実現するための効率的なアーキテクチャを提供することができる(第2の目的)。
図1は,本発明に係る情報処理システムの機能ブロックを示している。 図2は,本発明に係る半導体装置の機能ブロックを示している。 図3は,本発明に係る半導体装置による書込処理/読出処理のフローを示している。 図4は,基本的な書込処理の例を示している。 図5は,衝突が生じた場合の書込処理の例を示している。 図6は,全衝突が生じた場合の書込処理の例を示している。 図7は,基本的な読出処理の例を示している。 図8は,不一致が発生した場合の読出処理の例を示している。 図9は,全衝突が発生した場合の読出処理の例を示している。 図10は,マスクコントローラの構成例を示している。 図11は,マスクレジスタを含む情報処理システムの構成例を示している。 図12は,マスク処理を含む書込処理の例を示している。 図13は,マスク処理を含む読出処理の例を示している。 図14は,符号化処理の一例を示している。 図15は,符号化処理の他の例を示している。 図16は,ワイルドカード検索の方式例を示している。 図17は,ワイルドカード検索の方式例を示している。 図18は,ワイルドカード検索の方式例を示している。 図19は,ワイルドカード検索の方式例を示している。 図20は,ワイルドカード検索の方式例を示している。 図21は,ワイルドカード検索の方式例を示している。 図22は,ワイルドカード検索の方式例を示している。 図23は,ワイルドカード検索の方式例を示している。 図24は,ワイルドカード検索の方式例を示している。
以下,図面を用いて本発明を実施するための形態について説明する。本発明は,以下に説明する形態に限定されるものではなく,以下の形態から当業者が自明な範囲で適宜修正したものも含む。
図1は,情報処理システム1の概要を示したブロック図である。図1に示されるように,情報処理システム1は,複数の半導体装置10と,各半導体装置10の入力側に接続されたマスクコントローラ20と,各半導体装置10の出力側に接続されたプライオリタイザ30と,を含む。本願明細書では,まず,半導体装置10の構成について詳しく説明する。その後,複数の半導体装置10を含んで構成された情報処理システム1の構成について説明を行う。
図1は,半導体装置10の内部構成の概要を示している。また,図2は,半導体装置10の主たる機能構成を示した機能ブロック図である。また,図3は,半導体装置10による処理の流れを示したフロー図である。さらに,図4〜図6は,半導体装置10によるエントリアドレスの書込処理の例を示しており,図7〜図9は,半導体装置10によるエントリアドレスの読出処理(検索処理)の例を示している。
図1及び図2に示されるように,半導体装置10は,基本的に,検索メモリマット100と制御回路200とを備える。また半導体装置10は,さらに,バックアップメモリ300,確認用メモリ400,マスクレジスタ500,及び符号化回路600を備えることが好ましい。制御回路200は,検索メモリマット100,バックアップメモリ300,及び確認用メモリ400に接続されており,各メモリ100,300,400に対して所定のデータ(情報)を書き込んだり読み出したりする情報処理を総合的に制御する機能を担っている。特に,制御回路200は,検索メモリマット100に対するデータの書込処理及び読出処理が主たる機能となる。また,制御回路200には,マスクレジスタ500及び符号化回路600を介してデータが入力される。このため,制御回路200は,マスクレジスタ500及び符号化回路600を経由したデータに基づいて,各メモリ100,300,400に対して,データの書込処理及び読出処理を行う。
検索メモリマット100は,メモリアドレス(MA)によって特定されるメモリ空間(D)に,キーデータ(KD)に対応するエントリアドレス(EA)が書き込まれる記憶装置(メモリ)である。検索メモリマット100は,エントリアドレス(EA)を書き込むためのメモリ空間(D)が,メモリアドレス(MA)を保持したまま,複数の分割メモリ110a,110b…に区分された構成となっている。例えば,検索メモリマット100及び複数の分割メモリ110a,110b…の例は,図4などに示されている。
まず,図4を参照して,簡単に,検索メモリマット100と,それに記憶されるエントリアドレス(EA)及びキーデータ(KD)の関係について説明する。図4に示されるように,検索メモリマット100は,y軸方向に沿って複数のメモリアドレス(MA)が順番に割り当てられており,このメモリアドレス(MA)によってメモリ空間(D)のアドレス(番地)が特定されている。メモリ空間(D)は,x軸方向に沿ってデータを記憶する領域を有している。この検索メモリマット100は,複数の分割メモリ110a,110b…に区分されている。複数の分割メモリ110a,11b…は,メモリアドレス(MA)と,それによって特定されるメモリ空間(D)を保持している。また,複数の分割メモリ110a,110b…のメモリアドレス(MA)は,それぞれ共通している。つまり,分割メモリ110a,110b…のそれぞれは,メモリアドレス(MA)とそれによって特定されるメモリ空間(D)とが一対一で対応付けられた構成となっている。このように,検索メモリマット100は,複数の分割メモリ110a,110b…に区分されたものと考えることができる。言い換えると,複数の分割メモリ110a,110b…の集合によって,検索メモリマット100が構築されている。
本発明の半導体装置10は,CAM(連想メモリ)として利用することができる。つまり,半導体装置10は,検索メモリマット100に,キーデータ(KD)に対応するエントリアドレス(EA)を書き込む。その後又はこれと同時に,半導体装置10は,エントリアドレス(EA)と対応付けてキーデータ(KD)を確認用メモリ400又はバックアップメモリ300に書き込む。他方,半導体装置10に対して,検索対象としてのキーデータ(KD)を入力すると,半導体装置10は,このキーデータ(KD)に対応するエントリアドレス(EA)を読み出して出力する。つまり,「キーデータ」とは,半導体装置10に記憶される所望のデータを意味する。また,「エントリアドレス」とは,キーデータ(KD)が記憶されているメモリ(具体的には確認用メモリ400又はバックアップメモリ300)の場所(アドレス)を示すメタデータを意味している。
図4に示された例において,エントリアドレス(EA)は,16進法2桁で表される8bitのデータとして定義されている。8bitのエントリアドレス(EA)は,00〜FFの値をとる。半導体装置10は,1つのエントリアドレス(EA)に対応付けて,1つのキーデータ(KD)を記憶するものである。つまり,1つのキーデータ(KD)に対し,1つのエントリアドレス(EA)が割り当てられる。このため,エントリアドレス(EA)が8bitの情報である場合,半導体装置10には256のキーデータ(KD)を記憶することが可能となる。従って,エントリアドレスが8bitに設定されている半導体装置は,総エントリ数が256となる。なお,本発明において,エントリアドレス(EA)は,2bit以上のデータであれば問題ない。例えば,エントリアドレス(EA)は,3bit,4bit,6bit,又は8bit以上とすることもできる。また,エントリアドレス(EA)のbit数は,検索メモリマット100のメモリアドレス(MA)のbit数と一致していることが好ましい。図4に示した例では,エントリアドレス(EA)とメモリアドレス(MA)は,共に,8bitに設定されている。
また,図4に示された例において,半導体装置10に入力されたキーデータ(KD)は,144bitのデータに設定されている。144bitのキーデータ(KD)を,エントリアドレス(EA)のbit数に対応するように8bitごとに分割すると,18個のデータ(分割データ)に分割できる(つまり,144bit÷8bit=18)。ここで,本発明の半導体装置10において,検索メモリマット100を構成する分割メモリ110a,110b…の数は,少なくともキーデータの分割数(18)以上必要とされる。なお,キーデータ(KD)のbit数は,144bitに限定されるものではなく,必要に応じて適宜調整可能である。また,キーデータ(KD)を複数の分割データに分割するにあたり,キーデータ(KD)のbit数を割る数は,エントリアドレス(EA)のbit数であることが好ましい。つまり,(分割メモリの数)≧(KDのbit数)÷(EAのbit数)となることが好ましい。
また,図4に示された例において,各分割メモリ110a,110b…のメモリアドレス(MA)は,それぞれ,8bitで定義されたデータ(情報)である。つまり,図4に示された例では,キーデータ(KD)から分割された分割データと,メモリアドレス(MA)とは,それぞれ8bitに設定されている点で共通している。このように,分割データとメモリアドレス(MA)のbit数は一致していることが好ましい。なお,上述のとおり,メモリアドレス(MA)のbit数は,エントリアドレス(EA)のbit数とも一致する。
このように,本発明の半導体装置10において,検索メモリマット100は,エントリアドレス(EA)を書き込むためのメモリ空間(D)が,メモリアドレス(MA)を保持したまま,複数の分割メモリ110a,110b…に区分された構成となっている。各分割メモリは,例えば,SRAM(Static Random Access Memory)などの記憶装置を用いて構成することができる。この意味において,本発明は,複数のSRAMを利用して実現したCAMであるということができる。本発明のように,複数のSRAMを用いて実現したCAMを,SRAM−CAMと称することもできる。
また,図4に示された例のように,半導体装置10に記憶可能なキーデータ(KD)の数(総エントリ数)を256エントリと定めた場合,この256エントリを識別するために必要なエントリアドレス(EA)のbitサイズは,8bitになる。また,半導体装置10に入力されるキーデータのbitサイズが144bitであるとした場合,これをエントリアドレス(EA)のbit数8で割ると18となる。このような条件を想定すると,分割メモリ110a,110b…の数は,少なくとも18以上必要となる。
本発明の半導体装置10において,最低限必要となる分割メモリ110a,110b…の数N(検索メモリマット100の分割数N)は,以下の式により求めることができる。
(式)N=L/log・M
L:キーデータ長(bit数)
M:総エントリ数
N:分割メモリの最小個数(検索メモリマットの分割数)
続いて,図2〜図9を参照して,半導体装置10による書込処理及び読出処理について説明する。なお,図2及び図3に示されたマスクレジスタ500によるマスク処理と,符号化回路600による符号化処理については,後ほど詳しく後述する。まずは,マスク処理と符号化処理を除き,半導体装置10による基本的な書込処理について説明を行う。
図2に示されるように,制御回路200は,基本的に,入力部210,分割部220,書込部230,読出部240,確認部250,及び出力部260を有している。これらの要素210〜260は,制御回路200の機能を概念的に分類して示したものである。すなわち,制御回路200は,これらの機能的要素210〜260を利用して,検索メモリマット100に対しエントリアドレス(EA)を書き込んだり,検索メモリマット100に記憶されているエントリアドレス(EA)を読み出したりする処理を行う。また,図3には,制御回路200による情報処理のフローが示されている。
まず,制御回路200により行われるエントリアドレス(EA)の書込処理を説明する。基本的な書込処理の具体例は,図4〜図6に示されている。ここでの書込処理とは,新しいキーデータ(KD)を記憶するにあたり,その新しいキーデータ(KD)に対応したエントリアドレス(EA)を検索メモリマット100に書き込む処理である。
図2に示されるように,書込処理においては,まず,書込対象となるキーデータが,半導体装置10に入力される。ここで,書込対象のキーデータは,図2に示されるように,制御回路200の入力部210に直接入力されることとしてもよい。また,書込対象となるキーデータは,マスクレジスタ500と符号化回路600とを経由して,制御回路200の入力部210に入力されてもよい。マスクレジスタ500と符号化回路600による処理については,詳しくは後述する。
書込対象のキーデータが制御回路200の入力部210に入力されると,この入力部210は,キーデータを分割部220へと送出する。つまり,入力部210は,制御回路200における入力インターフェースとして機能する。
続いて,分割部220は,書込対象のキーデータを,複数の分割データへと分割する。例えば,分割部220は,検索メモリマット100を構築する分割メモリ110a,110b…の数と等しい数にキーデータを分割することが好ましい。つまり,分割部220がキーデータを分割する分割数nは,検索メモリマット100を構築する分割メモリ110a,110b…の数Nと等しいことが好ましい。これにより,分割部220によって複数に分割したキーデータ(分割データ)の全てを,それぞれ順番に,複数の分割メモリ110a,110b…に対して割り当てていくことができる。例えば,図3に示した例において,半導体装置10には,144bitのキーデータが入力されることが想定されている。また,各キーデータに割り当てられるエントリアドレスのbit数は,8bitであり,分割メモリの数は18となっている。このような条件において,分割部220は,144bitのキーデータを,8bit毎に18個の分割データへと分割することが好ましい。分割部220によって,144bitのキーデータは,8bitずつ,18個の分割データに変換される。なお,分割部220による分割条件は,分割メモリの数や,エントリアドレスのbit数,キーデータのbit数などに応じて,適宜変更することが可能である。分割部220によって生成された複数の分割データは,書込部230へと送出される。
さらに詳しく説明すると,分割部220により分割された分割データのビット数(α)は,検索メモリマット100のメモリアドレス(MA)のビット数(β)と等しいことが好ましい(α=β)。例えば,図4などに示されるように,検索メモリマット100のメモリアドレス(MA)が8bitで表される場合には,分割部220は,キーデータ(KD)を8bitの分割データに分割することが好ましい。また例えば,検索メモリマット100のメモリアドレス(MA)が,2bitで表される場合には,分割部220は,キーデータ(KD)を2bitの分割データに分割することが好ましい。これにより,後の処理において,分割部220が分割した分割データのそれぞれを,当該分割データをアドレスとして,検索メモリマット100を構築する分割メモリに適切に割り当てることができる。
書込部230は,検索メモリマット100を構築する複数の分割メモリ110a,110b…や,確認用メモリ400,バックアップメモリ300に対して,所定のデータを書き込む機能を有する。
図2及び図3に示されるように,半導体装置10に対して書込対象のキーデータ(KD)が入力されると,まず,書込部230は,このキーデータ(KD)に対して固有のエントリアドレス(EA)を割り当てる。このエントリアドレス(EA)は,一つのキーデータ(KD)について一つ割り当てられるものである。
また,書込部230は,キーデータ(KD)に対して固有のエントリアドレス(EA)を割り当てた後,又は割り当てると同時に,検索メモリマット100を構成する複数の分割メモリ110a,110b…に対して,キーデータ(KD)に対応するエントリアドレス(EA)を書き込んでいく。図3に示されるように,書込部230は,複数の分割データをアドレスとして,これらの分割データのそれぞれに対応するエントリアドレス(EA)を,分割メモリ110a,110b…に対して書き込む。
具体的に説明すると,図3に示されるように,キーデータ(KD)の分割数と検索メモリマット100の区分数は等しくなっている。図3に示した例では,キーデータ(KD)は,18個の分割データに分割されており,検索メモリマット100は,18個の分割メモリに区分されている。まず,書込部230は,複数の分割データを,それぞれ1つずつ,分割メモリに割り当てる。つまり,1番目の分割データは1番目の分割メモリに割り当てられ,2番目の分割データは2番目の分割メモリに割り当てられ,同じようにして,k番目の分割データはk番目の分割メモリに割り当てられる。ここで,各分割メモリは,メモリアドレス(MA)が付与されており,このメモリアドレス(MA)によってメモリ空間が特定されている。書込部230は,分割データを分割メモリに割り当てた後,この分割データと分割メモリのメモリアドレス(MA)とを照合して,この分割データと一致するメモリアドレス(MA)を指定する。例えば,分割データが“00”という値である場合,書込部230は,分割メモリの中から,“00”という値を有するメモリアドレス(MA)を指定する。そして,書込部230は,分割データに一致するメモリアドレス(MA)によって特定されるメモリ空間にアクセスし,このメモリ空間に分割データに対応するエントリアドレス(EA)を書き込んでいく。例えば,分割データ“00”に対応するエントリアドレスが“01”である場合,メモリアドレス“00”によって特定されるメモリ空間に,エントリアドレス“01”を書き込む。このように,書込部230は,分割データをアドレスとして,メモリアドレス(MA)によって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間に,分割データに対応するエントリアドレス(EA)を書き込む。書込部230は,このようなエントリアドレス(EA)の書込処理を,分割データが割り当てられた全ての分割メモリに対して行っていく。このような処理が,基本的な書込処理となる。
また,書込部230は,入力部210に入力されたキーデータ(KD)(分割前の状態のキーデータ)と,これに割り当てたエントリアドレス(EA)とを対応付けて,確認用メモリ400に書き込む処理を行う。すなわち,新しい書込対象のキーデータが半導体装置10に入力された際,書込部230は,この新しいキーデータに対して一つのエントリアドレスを割り当てて,新しいキーデータとエントリアドレスの対応関係を,確認用メモリ400に記憶しておく。これにより,確認用メモリ400には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応して記憶される。このように,確認用メモリ400は,キーデータとエントリアドレスの対応関係を記憶しておくためのデータベースとしても機能する。また,確認用メモリ400は,後述するように,読出処理を行う際に,制御回路が読み出したエントリアドレスが正しいものであるか否かの最終確認を行う際にも利用される。なお,確認用メモリ400は,SRAM等の公知の記憶装置によって構成すればよい。
また,例えば図3や図4に示されるように,確認用メモリ400は,予めエントリアドレス(EA)がすべて登録されている構成であってもよい。つまり,確認用メモリ400は,予め登録されているエントリアドレス(EA)によって空のメモリ空間が特定されており,この空のメモリ空間に対してキーデータ(KD)を書き込むことができるようになっている。例えば,書込部230は,キーデータ(KD)に対して割り当てられたエントリアドレス(EA)を参照して,確認用メモリ400にアクセスする。そして,確認用メモリ400内のエントリアドレス(EA)によって特定されるメモリ空間に,キーデータ(KD)を書き込む。このような処理によっても,結果的には,一つのエントリアドレス(EA)と一つのキーデータ(KD)とが対応付けて確認用メモリ400に記憶されることとなる。
次に,図4〜図6を参照して,書込部230による書込処理について,具体例を挙げて説明する。
まず,図4は,基本的な書込処理の例を示している。図4に示した例では,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_11”という値のキーデータ(KD)が,半導体装置10に入力される。なお,アンダーラインは便宜的に付されたものであり,本来的には存在しない。キーデータ(KD)は,16進法で表された144bitの値である。書込部230は,まずこのキーデータ(KD)に対して,“00”の値を持つエントリアドレス(EA)を割り当てる。エントリアドレス(EA)は,16進法2桁で表された8bitの値である。
またキーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。図4に示された例において,検索メモリマット100のメモリアドレス(MA)及びエントリアドレス(EA)は8bitの値である。また,検索メモリマット100は,18個の分割メモリ110a,110b,…110mに区分されている。そこで,分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。このため,各分割データは,8bitの値となる。図4に示した例において,キーデータ(KD)は,“00”“01”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“11”という18個の分割データに分割される。
その後,書込部230は,分割部220によって生成された分割データを,分割メモリ110a〜110mに割り当てて,エントリアドレス(EA)を書き込んでいく。図4に示されるように,まず,書込部230は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てる。1番目の分割メモリ110aは,“00”〜“FF”の値を持つ8bitのメモリアドレス(MA)を有している。ここで,書込部230は,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス“00”によって特定されるメモリ空間(D)にアクセスする。そして,書込部230は,メモリアドレス“00”によって特定されるメモリ空間(D)に対し,1番目の分割データ“00”に対応するエントリアドレス(EA)“00”を書き込む。このような書込処理を,書込部230は,2番目〜18番目の分割データについても同様にして行う。例えば,書込部230は,2番目の分割データ“01”を2番目の分割メモリ110bに割り当てて,2番目の分割データ“01”を参照して2番目の分割メモリ110bのメモリアドレス(MA)“01”を指定し,このメモリアドレス“01”によって特定されるメモリ空間(D)に対し,2番目の分割データ“01”に対応するエントリアドレス(EA)“00”を書き込む。また,例えば,書込部230は,18番目の分割データ“11”を18番目の分割メモリ110mに割り当てて,18番目の分割データ“11”を参照して18番目の分割メモリ110mのメモリアドレス(MA)“11”を指定し,このメモリアドレス“11”によって特定されるメモリ空間(D)に対し,18番目の分割データ“11”に対応するエントリアドレス(EA)“00”を書き込む。このようにして,書込部230は,キーデータ(KD)を複数の分割データに分割した上で,検索メモリマット100を構成する複数の分割メモリ110a,110b…に対して,キーデータ(KD)に対応するエントリアドレス(EA)を書き込んでいく。
また,図4に示されるように,書込部230は,検索メモリマット100に対する書込処理を終えると,書込対象としてのキーデータ(KD)(分割前の状態のキーデータ)と固有のエントリアドレス(EA)とを対応付けて,これらの値を確認用メモリ400に書き込む。これにより,確認用メモリ400には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応付けられて記憶されることとなる。
続いて,図5を参照して,書込処理において,エントリアドレス(EA)の「衝突」が生じる場合の例を説明する。本発明の半導体装置では,書込部230が,分割データをアドレスとして,その分割データに対応するエントリアドレス(EA)を,分割メモリ110a…に書き込む。このため,同じ分割メモリの同じメモリ空間に複数のエントリアドレス(EA)が書き込まれる可能性がある。このように,同じメモリ空間に複数のエントリアドレスが書き込まれる現象を,本願明細書では「衝突」と表現している。ここで,本発明の半導体装置は,エントリアドレス(EA)の書込処理を行うにあたり「衝突」が生じた場合に,「衝突」が発生したメモリ空間に,衝突情報(ドントケア値)を登録し,そのまま書込処理を続行する。これにより,エントリアドレスの書込処理を高速化できる。つまり,本発明は,エントリアドレス(EA)の衝突を避けるのではなく,エントリアドレスの衝突を気にせずに書込処理を行う。これにより,本発明は,書込処理/読出処理におけるアルゴリズムを簡素化し,さらには,データ検索の高速性と低消費電力性の両立を実現している。
図5は,衝突が発生する場合の書込処理の例を示している。図5に示した例では,図4に示したキーデータ(KD)に続いて,“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,半導体装置10に入力される。書込部230は,まずこのキーデータ(KD)に対して,“01”の値を持つエントリアドレス(EA)を割り当てる。
また,キーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。図5に示した例において,キーデータ(KD)は,“00”“02”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,書込部230は,分割部220によって生成された分割データを,分割メモリ110a〜110mに割り当てて,エントリアドレス(EA)を書き込んでいく。図5に示されるように,まず,書込部230は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス“00”によって特定されるメモリ空間(D)にアクセスする。そして,書込部230は,このメモリ空間(D)に,1番目の分割データ“00”に対応するエントリアドレス(EA)“01”を書き込もうとする。しかしながら,このメモリアドレス“00”によって特定されるメモリ空間(D)には,すでに,他のエントリアドレス(EA)“00”が書き込まれている(図4参照)。このため,書込部230は,このメモリ空間(D)に,新しいエントリアドレス(EA)“01”を書き込むことができない。このように,一つのメモリ空間に複数のエントリアドレス(EA)が書き込まれる現象が,「衝突」である。このような「衝突」が生じている場合,書込部230は,衝突が生じているメモリ空間(D)に,エントリアドレスの衝突を表す衝突情報(ドントケア値)を登録する。このように,書込部230は,1番目の分割データ“00”については,対応するメモリ空間に衝突情報を登録して,その書込処理を終える。
このような書込処理を,書込部230は,2番目〜18番目の分割データについても同様にして行う。例えば,書込部230は,2番目の分割データ“02”を2番目の分割メモリ110bに割り当てて,2番目の分割データ“02”を参照して2番目の分割メモリ110bのメモリアドレス(MA)“02”を指定し,このメモリアドレス“02”によって特定されるメモリ空間(D)に対し,2番目の分割データ“02”に対応するエントリアドレス(EA)“01”を書き込む。2番目の分割データ“02”に関しては,衝突が生じていないため,分割メモリに書き込むことができる。他方,例えば,書込部230は,3番目の分割データ“02”を3番目の分割メモリ110cに割り当てて,3番目の分割データ“02”を参照して3番目の分割メモリ110cのメモリアドレス(MA)“02”を指定し,このメモリアドレス“02”によって特定されるメモリ空間(D)に対し,3番目の分割データ“02”に対応するエントリアドレス(EA)“01”を書き込もうとする。しかしながら,メモリアドレス“02”によって特定されるメモリ空間(D)には,すでに,他のエントリアドレス“00”が書き込まれている。そこで,書込部230は,このメモリ空間に,衝突情報(ドントケア値)を登録して,3番目の分割データ“02”に関する書込処理を終える。このように,書込部230は,衝突が生じる部分については衝突情報を登録して,分割データのすべてについて書込処理を行う。このように,衝突が発生したメモリ空間については衝突情報を登録してそのまま書込処理を続行することで,エントリアドレスの書込処理を高速化することができる。
その後,書込部230は,図5に示されるように,書込対象としてのキーデータ(KD)(分割前の状態のキーデータ)と固有のエントリアドレス(EA)とを対応付けて,これらの値を確認用メモリ400に書き込む。これにより,確認用メモリ400には,エントリアドレス(EA)とキーデータ(KD)とが一対一で対応付けられて記憶されることとなる。
続いて,図6を参照して,書込処理において,エントリアドレス(EA)の「全衝突」が生じる場合の例を説明する。本発明の半導体装置10は,上記のように,エントリアドレスが衝突したメモリ空間には,衝突情報を登録していく。しかし,一つのキーデータ(KD)から生成された複数の分割データの全てについて,衝突が生じる可能性も存在する。このような全衝突が生じる可能性は極めて低いものであるが,理論的には発生し得る。そこで,図6では,全衝突が発生した場合の対策を示している。
図6は,全衝突が発生する場合の書込処理の例を示している。図6に示した例では,図4及び図5に示したキーデータ(KD)に続いて,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,半導体装置10に入力される。書込部230は,まずこのキーデータ(KD)に対して,“02”の値を持つエントリアドレス(EA)を割り当てる。
また,キーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。図6に示した例において,キーデータ(KD)は,“00”“01”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,書込部230は,分割部220によって生成された分割データを,分割メモリ110a〜110mに割り当てて,エントリアドレス(EA)を書き込んでいく。図6に示されるように,まず,書込部230は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス“00”によって特定されるメモリ空間(D)にアクセスして,1番目の分割データ“00”に対応するエントリアドレス(EA)“02”を書き込もうとする。しかしながら,このメモリアドレス“00”によって特定されるメモリ空間(D)には,すでに別のエントリアドレスが書き込まれており,衝突が発生している。同様に,書込部230は,2番目〜18番目の分割データについても,これらの分割データをアドレスとして,2番目〜18番目の分割メモリ110b〜110mのメモリ空間にアクセスする。しかし,2番目〜18番目の分割メモリ110b〜110mにおいても,衝突が発生している。その結果,1番目〜18番目の分割メモリ110a〜110mの全てについて,衝突が発生していることとなる。
図6に示されるように,このような全衝突が生じた場合,書込部230は,全衝突が生じたキーデータ(KD)を,固有のエントリアドレス(EA)と対応付けて,バックアップメモリ300に書き込む。バックアップメモリ300は,例えば図3に示されるように,キーデータ(KD)とエントリアドレス(EA)と一対一で対応付けて記憶することのできるメモリである。バックアップメモリ300は,例えばSRAMなどの公知のメモリによって構成することができる。このように,書込部230は,検索メモリマット100に書き込むと全衝突が生じるキーデータ(KD)については,この全衝突を回避するために,検索メモリマット100には書き込まずに,バックアップメモリ300に書き込んでおくことが好ましい。このように,検索メモリマット100とは別に,バックアップメモリ300を設けておくことで,全衝突が生じたキーデータ(KD)の書込処理が簡易になるととともに,全衝突が生じたキーデータ(KD)の検索処理(読出処理)を効率的に行うことができるようになる。なお,図6に示されるように,バックアップメモリ300に書き込まれるキーデータ(KD)は,分割部220によって分割される前の状態のものであることが好ましい。
図4及び図5を参照して説明したとおり,通常であれば,書込部230は,検索メモリマット100に対する書込処理の後,キーデータ(KD)とエントリアドレス(EA)を対応付けて確認用メモリ400に書き込む処理を行う。ただし,図6に示されるように,全衝突が生じているキーデータ(KD)は,バックアップメモリ300に書き込まれる。この場合,バックアップメモリ300に書き込まれたキーデータ(KD)を,改めて確認用メモリ400に書き込む必要はない。このように,バックアップメモリ300と確認用メモリ400のいずれか一方にのみキーデータ(KD)が書き込まれるようにすることで,そのキーデータ(KD)を読み出す際には,そのキーデータ(KD)が書き込まれている方のメモリのみを参照すれば済むため,検索処理を高速化させることができる。
また,図6に示されるように,全衝突が生じた場合,確認用メモリ400にはキーデータ(KD)が書き込まれず,本来であればキーデータ(KD)が書き込まれるべきであったメモリ空間は空(ブランク)のまま保持される。例えば,確認用メモリ400には,エントリアドレス(EA)“02”が登録されているものの,このエントリアドレス(EA)“02”によって特定されるメモリ空間は,空(ブランク)の状態となっている。このため,確認用メモリ400にアクセスして,空(ブランク)のメモリ空間を参照すれば,どのエントリアドレス(EA)に対応するキーデータ(KD)に全衝突が生じて,バックアップメモリ300に記憶されているのかを把握することができる。つまり,確認用メモリ400を見れば,エントリアドレス(EA)“02”に対応するキーデータ(KD)に全衝突が生じていることを容易に把握できる。
続いて,図2,図3,及び図7〜図9を参照して,半導体装置10による基本的な読出処理(検索処理)について説明を行う。ここでの読出処理とは,検索対象となるキーデータ(KD)が半導体装置10に入力されたときに,この半導体装置10が,検索メモリマット100を検索して,検索対象となるキーデータ(KD)に対応するエントリアドレス(EA)を読み出す処理である。なお,マスク処理と符号化処理を含む読出処理については後ほど説明することとし,ここでは,マスク処理と符号化処理を除いた読出処理について説明を行う。
図2に示されるように,書込処理においては,まず,書込対象となるキーデータが,半導体装置10に入力される。ここで,書込対象のキーデータは,図2に示されるように,制御回路200の入力部210に直接入力されることとしてもよい。また,書込対象となるキーデータは,マスクレジスタ500と符号化回路600とを経由して,制御回路200の入力部210に入力されてもよい。マスクレジスタ500と符号化回路600により処理については,詳しくは後述する。
図2及び図3に示されるように,検索対象のキーデータ(KD)が制御回路200の入力部210に入力されると,この入力部210は,キーデータ(KD)を分割部220へと送出する。続いて,分割部220は,検索対象のキーデータ(KD)を,複数の分割データへと分割する。ここで,分割部220が検索対象のキーデータ(KD)を分割するときの条件(アルゴリズム)は,上述した書込対象のキーデータ(KD)を分割するときの条件(アルゴリズム)と同じである。分割部220によって得られた複数の分割データは,読出部240へと送出される。
読出部240は,複数の分割データそれぞれについて,この分割データをアドレスとして検索メモリマット100の各分割メモリ110a,110b…にアクセスし,分割メモリ110a,110b…に記憶されているエントリアドレス(EA)を読み出す。ここで,読出部240が,分割データをアドレスとして分割メモリにアクセスする方法(アルゴリズム)は,上述した書込部230が分割データをアドレスとして分割メモリにアクセスする方法と同じである。つまり,まず,読出部240は,複数の分割データを,それぞれ1つずつ,分割メモリに割り当てる。つまり,1番目の分割データは1番目の分割メモリに割り当てられ,2番目の分割データは2番目の分割メモリに割り当てられ,同じようにして,k番目の分割データはk番目の分割メモリに割り当てられる。ここで,各分割メモリは,メモリアドレス(MA)が付与されており,このメモリアドレス(MA)によってメモリ空間が特定されている。読出部240は,分割データを分割メモリに割り当てた後,この分割データと分割メモリのメモリアドレス(MA)とを照合して,この分割データと一致するメモリアドレス(MA)を指定する。例えば,分割データが“00”という値である場合,読出部240は,分割メモリの中から,“00”という値を有するメモリアドレス(MA)を指定する。また,読出部240は,分割データに一致するメモリアドレス(MA)によって特定されるメモリ空間にアクセスする。そして,読出部240は,アクセスしたメモリ空間に記憶されているエントリアドレス(EA)を読み出していく。このように,読出部240は,分割データをアドレスとして,メモリアドレス(MA)によって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間に記憶されているエントリアドレス(EA)を読みだす。このように,読出部240は,基本的に書込部230と同じ手順でメモリ空間にアクセスして,そこに記憶されているエントリアドレス(EA)を読み出すものである。
次に,図7〜図9を参照して,読出部240による読出処理について,具体例を挙げて説明する。
まず,図7は,基本的な読出処理の例を示している。図7に示した例では,“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が,検索対象として,半導体装置10に入力される。検索対象のキーデータ(KD)が半導体装置10に入力されると,分割部220が,このキーデータ(KD)を複数の分割データに分割する。図7に示された例において,分割部220は,144bitのキーデータ(KD)を,8bitずつ,18個の分割データへと分割する。このため,各分割データは,8bitの値となる。図7に示した例において,キーデータ(KD)は,“00”“02”“02”“03”“04”“05”“06”“07”“08”“09”“0A”“0B”“0C”“0D”“0E”“0F”“10”“FF”という18個の分割データに分割される。
その後,読出部240は,分割部220によって生成された分割データをアドレスとして分割メモリ110a〜110mにアクセスし,エントリアドレス(EA)を読み出していく。図7に示されるように,まず,読出部240は,1番目の分割データ“00”を1番目の分割メモリ110aに割り当てて,1番目の分割データ“00”を参照して1番目の分割メモリ110aのメモリアドレス(MA)“00”を指定し,このメモリアドレス(MA)“00”によって特定されるメモリ空間(D)にアクセスする。しかしながら,1番目の分割メモリ110aにおいて,メモリアドレス(MA)“00”によって特定されるメモリ空間(D)には,衝突情報(ドントケア値)が登録されている。このような場合に,読出部240は,1番目の分割メモリ110aからはエントリアドレス(EA)を読み出さずに,ドントケア(配慮しないもの)として処理する。
次に,読出部240は,2番目の分割データ“02”を2番目の分割メモリ110bに割り当てて,2番目の分割データ“02”を参照して2番目の分割メモリ110bのメモリアドレス(MA)“02”を指定し,このメモリアドレス(MA)“02”によって特定されるメモリ空間(D)にアクセスする。このアクセスしたメモリ空間(D)には,衝突情報は登録されておらず,エントリアドレス“01”のみが記憶されている。そこで,読出部240は,このメモリ空間(D)からエントリアドレス“01”を読み出す。このような書込処理を,書込部230は,3番目〜18番目の分割データについても同様にして行う。例えば,読出部240は,3番目の分割データ“02”をアドレスとして,3番目の分割メモリ110cのメモリ空間にアクセスするが,このメモリ空間には衝突情報が登録されているため,ドントケアとして処理する。また,読出部240は,18番目の分割データ“FF”をアドレスとして,18番目の分割メモリ110mのメモリ空間にアクセスすると,このメモリ空間からエントリアドレス“01”を読み出すことができる。
読出部240は,1つのキーデータ(KD)から分割された複数の分割データのそれぞれについて,上記した読出処理を行う。ここで,1つキーデータ(KD)に基づいて読み出されたエントリアドレス(EA)の値が一致する場合,読出部240は,その読み出したエントリアドレス(EA)を有効なものと判断する。他方,1つキーデータ(KD)に基づいて読み出されたエントリアドレス(EA)の値に不一致がある場合,読出部240は,その読み出したエントリアドレス(EA)を無効なものと判断する。つまり,読出部240は,1つのキーデータ(KD)に関する読出処理において,1種類のエントリアドレス(EA)のみが読み出された場合を有効とし,2種類以上のエントリアドレス(EA)が読み出された場合を無効とする。図7に示された例においては,検索対象のキーデータ(KD)を分割して読出処理を行ったところ,ドンドケアとして処理されたものを除き,各分割メモリから“01”という共通の値のエントリアドレス(EA)が読み出されている。このように,読み出されたエントリアドレス(EA)の値は同じ“01”であり,すべて一致している。このため,図7の例において,読出部240は,エントリアドレス(EA)“01”を有効な値であると判断することができる。
また,読出部240が有効な値としてのエントリアドレス(EA)を読み出した場合,そのエントリアドレス(EA)は,確認部250へと送出される(図2参照)。例えば,図7の例において,エントリアドレス(EA)“01”を有効な値であると判断できるため,このエントリアドレス(EA)“01”が,確認部250へと送出される。確認部250は,読出部240によって有効と判断されたエントリアドレス(EA)に基づいて,確認用メモリ400にアクセスする。確認用メモリ400には,上述したとおり,エントリアドレス(EA)に対応づけてキーデータ(KD)が記憶されている。ここで,確認部250は,エントリアドレス(EA)と対応付けられているキーデータ(KD)を確認用メモリ400から読み出す。図7に示された例において,確認用メモリ400からは,エントリアドレス(EA)“01”に対応付けられた“00_02_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_FF”という値のキーデータ(KD)が読み出される。ここで,確認部250は,確認用メモリ400から読み出されたキーデータ(KD)と半導体装置10に入力されたキーデータ(KD)とを比較する。そして,確認部250は,その比較結果を出力する。比較結果に関する情報としては,例えば,比較対象とされた2つのキーデータ(KD)が一致又は不一致であるという情報となる。図7に示された例において,確認部250(比較器)において比較されたキーデータ(KD)は,互いに同じ値である。従って,確認部250は,キーデータ(KD)が一致する旨の情報(一致情報)を出力することができる。
図2及び図3に示されるように,読出部240によって有効であると判断されたエントリアドレス(EA)と,確認部250による確認情報(一致又は不一致の情報)は,出力部260へと送出される(図2参照)。出力部260は,外部回路に接続されている。このため,出力部260を介して,エントリアドレス(EA)と確認情報が外部回路へと出力される。このように,出力部260は,半導体装置10の出力インターフェースとして機能する。
次に,図8は,読出部240によって読み出されたエントリアドレス(EA)の値が不一致であった場合の例を示している。図8に示した例において,読出部240は,2番目の分割データ“01”をアドレスとして,2番目の分割メモリ110bのメモリ空間にアクセスしたところ,このメモリ空間からエントリアドレス“00”を読み出すことができた。他方,読出部240は,18番目の分割データ“FF”をアドレスとして,18番目の分割メモリ110mのメモリ空間にアクセスしたところ,このメモリ空間からエントリアドレス“01”を読み出すことができた。しかしながら,読出部240が2番目の分割メモリ110bから読み出したエントリアドレス“00”と,18番目の分割メモリ110mから読み出したエントリアドレス“01”の値との間には,不一致が発生している。このため,読出部240は,入力されたキーデータ(KD)に対応するエントリアドレス(EA)を一意に特定することができない。このように,読み出したエントリアドレス(EA)に不一致が発生している場合,検索メモリマット100には,入力されたキーデータ(KD)に対応するエントリアドレス(EA)が書き込まれていないものと判断できる。従って,読出部240は,これらの読み出したエントリアドレス(EA)を無効と判断する。
一方,図6を参照して説明したとおり,本発明の半導体装置10では,キーデータ(KD)の書込処理時において,エントリアドレス(EA)の全衝突が生じている場合には,検索メモリマット100には書き込まずに,キーデータ(KD)をバックアップメモリ300に書き込むこととしている。このため,図8に示されるように,読出部240によって読み出されたエントリアドレス(EA)に不一致が生じており,エントリアドレス(EA)が検索メモリマット100に書き込まれていないと判断できる場合であっても,キーデータ(KD)がバックアップメモリ300に記憶されている可能性がある。そこで,図8に示されるように,読出部240は,検索対象として入力されたキーデータ(KD)に基づいて,バックアップメモリ300に記憶されている情報を検索する。バックアップメモリ300には,上述したとおり,キーデータ(KD)とエントリアドレス(EA)が対応付けて記憶されている。このため,読出部240は,バックアップメモリ300内を検索して,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見したときには,そのキーデータ(KD)に対応付けられているエントリアドレス(EA)を読み出して出力する。他方,読出部240は,バックアップメモリ300内を検索しても,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見できなかったときには,例えば“検索情報なし(一致情報なし)”との情報を出力して,検索処理を終了する。図8に示した例では,検索対象のキーデータ(KD)に基づいてバックアップメモリ300を検索したところ,一致するキーデータ(KD)が記憶されていたため,これに対応するエントリアドレス(EA)“02”が出力されている。
続いて,図9は,読出部240による読出処理がすべてドントケアとして処理された場合の例を示している。図9に示されるように,半導体装置10に検索対象としてのキーデータ(KD)が入力されると,分割部220は,このキーデータ(KD)を複数の分割データへと分割する。また,読出部240は,各分割データをアドレスとして,各分割メモリ110a…110mにアクセスし,各分割メモリのメモリ空間からエントリアドレス(EA)を読み出そうとする。しかし,図9に示した例では,読出部240がアクセスしたメモリ空間の全てに衝突情報が登録されている。このため,読出部240は,すべての分割データについて,ドントケアとして処理している。その結果,読出部240は,検索メモリマット100から全くエントリアドレス(EA)を読み出すことができず,検索結果を得ることができない。
このような場合に,例えば,衝突している複数のエントリアドレス(EA)を候補として,これらの複数の候補の中から,検索対象のキーデータに対応するかどうかを一つ一つ照合する処理(いわゆる総ざらい処理)を行うことも考えられる。しかし,このような総ざらい処理が発生すると,データ検索処理の遅延を招いたり,データ検索の精度が低下するという問題があると考えられていた。
このため,本発明の半導体装置10では,図6を参照して説明したとおり,エントリアドレス(EA)の全衝突が生じる場合には,キーデータ(KD)をバックアップメモリ300に退避させて書き込むこととしている。このため,図9に示されるように,読出部240は,アクセスしたメモリ空間の全てに衝突情報が登録されている場合には,バックアップメモリ300を検索する処理を行う。つまり,読出部240は,全衝突によりエントリアドレス(EA)を検索できない場合には,検索対象として入力されたキーデータ(KD)に基づいて,バックアップメモリ300に記憶されている情報を検索する。読出部240は,バックアップメモリ300内を検索して,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見したときには,そのキーデータ(KD)に対応付けられているエントリアドレス(EA)を読み出して出力する。他方,読出部240は,バックアップメモリ300内を検索しても,検索対象のキーデータ(KD)と同じキーデータ(KD)を発見できなかったときには,例えば“検索情報なし(一致情報なし)”との情報を出力して,検索処理を終了する。図9に示した例では,検索対象のキーデータ(KD)に基づいてバックアップメモリ300を検索したところ,一致するキーデータ(KD)が記憶されていたため,これに対応するエントリアドレス(EA)“02”が出力されている。
このように,本発明の半導体装置は,全衝突対策として,バックアップメモリ300を備えている。本発明の半導体装置は,バックアップメモリ300を設けておくことで,全衝突が生じるキーデータとそのエントリアドレスとを,回避させて記憶しておくことができる。全衝突が生じたキーデータを読み出すための処理は非常に煩雑なものであったが,バックアップメモリ300に記憶しておくことで,読出処理(検索処理)を迅速かつ効率的に行うことができる。
次に,図1〜3及び図10〜図13を参照して,半導体装置にワイルドカード機能を実装するためのマスク処理について説明する。
図1に示されるように,複数の半導体装置10によって情報処理システム1が構築されている。情報処理システム1は,マスクコントローラ20と,複数の半導体装置10と,プライオリタイザ30とを備えている。また,複数の半導体装置10は,それぞれ,マスクレジスタ500を備えている。
マスクコントローラ20は,各半導体装置10のマスクレジスタ500に接続されている。例えば,半導体装置10には,複数のキーデータ(KD)から構成されるテーブルデータを入力することができる。テーブルデータを入力することにより,半導体装置10に対して複数のキーデータ(KD)を一括して書き込むことが可能となる。このような場合に,マスクコントローラ20は,複数のキーデータ(KD)から構成されるテーブルデータを解析し,このテーブルデータから複数のマスクパターンを抽出して,各マスクパターンを半導体装置10のマスクレジスタ500に登録する機能を有する。また,マスクレジスタ500は,登録されているマスクパターンに応じて,書込対象/検索対象となるキーデータ(KD)に対してマスクを付与する機能を持つ。また,プライオリタイザ30は,各半導体装置10の制御回路200の出力端に接続されている。プライオリタイザ30は,各制御回路200から出力されたエントリアドレス(EA)が入力される。プライオリタイザ30は,同時に複数の制御回路200からエントリアドレス(EA)が入力されたときに,各エントリアドレス(EA)の優先度(プライオリティ)を決定し,優先度の高い順に一又は複数のエントリアドレス(EA)を選択して出力する機能を持つ。
まず,半導体装置10のマスクレジスタ500にマスクパターンを登録する初期登録処理について説明する。
図10には,半導体装置10を含む情報処理システム1に入力可能なテーブルデータの一例が示されている。例えば,本発明の情報処理システム1は,インターネットスイッチやルータを構成するCAMとして利用することができる。図10に示されるように,テーブルデータは,例えば,スイッチルータ用のCAMに書き込むべき複数のキーデータ(KD)によって構成されている。例えば,各キーデータ(KD)は,「Src−IP」(送信元のIPアドレス),「Dst−IP」(送信先のIPアドレス),「Protocol」(通信に使用されるプロトコル),「Src−Port」(送信元端末のポート番号),及び「Dst−Port」(送信先端末のポート番号)などに関する情報が含まれる。また,図10において,「*」は特定されていない情報(マスク部位)を示している。また,「Src−IP」は,IPv4に準拠した32ビットのIPアドレスを示すものであるが,「/24」や「/28」といった表記は,上位24ビット(又は28ビット)がネットワークアドレスとなり,下位8ビット(又は4ビット)がホストアドレスとなることを示している。スイッチルータ用のCAMにおいては,一般的に,IPアドレスのうちのホストアドレスとなる下位ビットを無視(ドントケア)として検索される。このため,例えば「/28」といったIPアドレスにおいては,下位4ビットをマスク部位として扱うことが一般的である。
図10に示されるように,テーブルデータを構成する複数のキーデータ(KD)は,異なる部分にマスク部位を有している。ただし,各キーデータ(KD)のマスク部位は,全てのデータにおいて異なるというわけでなく,共通するマスク部位を有するキーデータ(KD)も存在している。例えば,図10に示した例では,テーブルデータは8つのキーデータ(KD)によって構成されているが,マスク部位の共通性によってグループ分けすると,5つのグループに分類することができる。同じグループに属するキーデータ(KD)は,共通するマスク部位を有していることとなる。
そこで,このようなテーブルデータをマスクコントローラ20に入力すると,マスクコントローラ20がテーブルデータを解析して,マスクパターンを自動的に生成し,各半導体装置10のマスクレジスタ500に登録する。つまり,図10に示されるように,マスクコントローラ20は,テーブルデータ入力部21と,マスクパターン生成部22と,マスクパターン登録部23を備えている。これらの要素は,マスクコントローラ20の機能的ブロックである。
テーブルデータ入力部21には,半導体装置10に書き込むことを希望する所望のテーブルデータが入力される。テーブルデータ入力部21は,入力インターフェースとして機能する。テーブルデータ入力部21は,入力されたテーブルデータをマスクパターン生成部22に送出する。
マスクパターン生成部22は,入力されたテーブルデータに含まれるキーデータ(KD)のマスク部位を解析し,このマスク部位のパターンに基づいて,一又は複数のマスクパターンを生成する。まず,マスクパターン生成部22は,テーブルデータに含まれる複数のキーデータ(KD)の中から,共通する部分にマスク部位を有するキーデータ(KD)を抽出する。このように,マスクパターン生成部22は,マスク部位の共通性に基づいて,キーデータ(KD)を複数のグループに分類する。つまり,同じグループに属するキーデータ(KD)は,共通するマスク部位を有している。その後,各グループのマスク部位の共通性に基づいて,マスクパターンを生成する。例えば,図10に示した例において,マスクパターンは,“FFFFFFF000000000FFFFFF0000”のように表される。“F”は,16進法における0〜Fまでの任意の数値が存在する部位(非マスク部位)であり,“0”は検索において無視される部位(マスク部位)を示している。このようにして,マスクパターン生成部22は,キーデータ(KD)が属する各グループについて,マスクパターンを生成する。図10に示された例にいて,マスクパターン1〜5までの5つのマスクパターンが生成されている。
マスクパターン登録部23は,マスクパターン生成部22によって生成された複数のマスクパターンを,それぞれ,異なる半導体装置10のマスクレジスタ500に振り分けて登録する。例えば,マスクパターン生成部22によって5つのマスクパターンが生成された場合,マスクパターン登録部23は,5つのマスクパターンをそれぞれ異なるマスクレジスタ500に登録する。例えば,図10に示されるように,マスクレジスタ500は,5つ用意される。第1のマスクレジスタ500には,パターン1のマスクパターンが登録され,第2のマスクレジスタ500には,パターン2のマスクパターンが登録され,第3〜第5のマスクレジスタ500も同様に処理される。このように,複数のマスクレジスタ500には,それぞれ異なるマスクパターンが登録されることとなる。これにより,複数の半導体装置10のマスクレジスタ500に対するマスクパターンの初期登録処理が完了する。
続いて,マスクパターン登録済みのマスクレジスタ500を有する半導体装置10によって,エントリアドレス(EA)を書き込む処理,及びエントリアドレス(EA)を検索する処理について説明する。
図12は,マスクレジスタ500を利用した書込処理の一例を示している。図12は,1つの半導体装置10による書込処理を示しているが,情報処理システム1に含まれる他の半導体装置10についても同様の書込処理が行われる(図11参照)。図12に示した例では,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_11”という値のキーデータ(KD)が,書込対象として,半導体装置10に入力される。書込部230は,このキーデータ(KD)に対して,“00”の値を持つエントリアドレス(EA)を割り当てる。
図12に示されるように,書込対象のキーデータ(KD)は,所定のマスクパターンが登録されているマスクレジスタ500に入力される。例えば,図12に示した例において,マスクレジスタ500には,“FF_FF_FF_FF_00_00_00_00_FF_FF_FF_FF_F0_FF_FF_FF_FF_F0”というマスクパターンが登録されている。マスクレジスタ500は,このマスクパターンに応じて,書込対象のキーデータ(KD)に対してマスクを付与する。例えば,“F”は,16進法における0〜Fまでの任意の数値が存在する部位(非マスク部位)である。このため,マスクレジスタ500は,“F”の部位については,キーデータ(KD)の値を変換しない。他方,“0”は検索において無視される部位(マスク部位)である。このため,マスクレジスタ500は,“0”の部位については,キーデータ(KD)の値を全て“0”に変換する。このため,マスクレジスタ500によって,書込対象のキーデータ(KD)の値は,“00_01_02_03_04_05_06_07_08_09_0A_0B_0C_0D_0E_0F_10_11”から,“00_01_02_03_00_00_00_00_08_09_0A_0B_00_0D_0E_0F_10_10”に変換される。これにより,書込処理のキーデータ(KD)にマスクが付与されたこととなる。
その後,書込部230は,通常どおり,マスク付与後のキーデータ(KD)について,検索メモリマット100を構成する複数の分割メモリ110a,110b…に対して,エントリアドレス(EA)の書込処理を行う。書込処理は,図4を参照して説明したものと同じであるため詳しい説明は省略する。このように,例えば,書込対象のキーデータ(KD)を,マスクレジスタ500に入力し,マスクレジスタ500によって所定のマスク部位の値を全て“0”に変換する。そして,書込対象のキーデータ(KD)について,検索において無視される部位(マスク部位)を全て“0”という値に変換した上で,検索メモリマット100に対する書込処理を行う。これにより,同じマスクレジスタ500を通過したキーデータ(KD)は,全て同じ部位が“0”という値となる。このため,マスクが付与されたキーデータ(KD)が書き込まれると,マスク部位に対応するメモリ空間には必ず衝突情報が登録されることとなり,その読出処理においてドントケア(検索無視)として処理される。このため,マスク部位については検索対象としない,いわゆるワイルドカード検索機能を実現することができる。
なお,図12に示した例において,マスクレジスタ500は,キーデータ(KD)のマスク部位を,全て“0”という値に変換している。ただし,マスク部位の値の変換値は“0”に限られない。“0”以外の値であっても,書込処理時に衝突が生じるように,キーデータ(KD)のマスク部位を共通した値に変換するようにすればよい。
また,図12に示されるように,書込部230は,マスク付与後のキーデータ(KD)の値を,エントリアドレス(EA)と対応付けて,確認用メモリ400に書き込む。つまり,ここでは,マスクが付与される前のキーデータ(KD)ではなく,マスク付与後のキーデータ(KD)の値が,確認用メモリ400に書き込まれる。
続いて,図13は,マスクレジスタ500を利用した読出処理(検索処理)の一例を示している。図13は,1つの半導体装置10による読出処理を示しているが,情報処理システム1に含まれる他の半導体装置10についても同様の読出処理が行われる(図11参照)。図13に示した例では,“00_01_02_03_DE_AD_BE_EF_08_09_0A_0B_01_0D_0E_0F_10_1F”という値のキーデータ(KD)が,検索対象として,半導体装置10に入力される。その後,検索対象のキーデータ(KD)は,所定のマスクパターンが登録されているマスクレジスタ500に入力される。例えば,図12に示した例において,マスクレジスタ500には,“FF_FF_FF_FF_00_00_00_00_FF_FF_FF_FF_F0_FF_FF_FF_FF_F0”というマスクパターンが登録されている。マスクレジスタ500は,このマスクパターンに応じて,検索対象のキーデータ(KD)に対してマスクを付与する。例えば,マスクレジスタ500は,“F”の部位については,キーデータ(KD)の値を変換せず,“0”の部位については,キーデータ(KD)の値を全て“0”に変換する。このため,マスクレジスタ500によって,検索対象のキーデータ(KD)の値は,“00_01_02_03_DE_AD_BE_EF_08_09_0A_0B_01_0D_0E_0F_10_1F”から,“00_01_02_03_00_00_00_00_08_09_0A_0B_00_0D_0E_0F_10_10”に変換される。これにより,検索処理のキーデータ(KD)にマスクが付与されたこととなる。
その後,読出部240は,通常どおり,マスク付与後のキーデータ(KD)について,検索メモリマット100を構成する複数の分割メモリ110a,110b…にアクセスし,エントリアドレス(EA)の読出処理を行う。読出処理(検索処理)は,図7を参照して説明したものと同じであるため詳しい説明は省略する。このように,例えば,検索対象のキーデータ(KD)を,マスクレジスタ500に入力し,マスクレジスタ500によって所定のマスク部位の値を全て“0”に変換する。そして,検索対象のキーデータ(KD)について,検索において無視される部位(マスク部位)を全て“0”という値に変換した上で,検索メモリマット100に対する検索処理を行う。これにより,マスク部位については検索条件として考慮することなく,検索処理を行うことができる。例えば,図12に示された書込対象のキーデータ(KD)(マスク付与前)と,図13に示された検索対象のキーデータ(KD)(マスク付与前)は,値が異なっている。しかし,図12に示されたマスク付与後のキーデータ(KD)(マスク付与前)と,図13に示されたマスク付与後のキーデータ(KD)(マスク付与前)とは,値が同じである。このため,マスクが付与された部分を検索条件として無視することで,図13に示されたマスク付与後のキーデータ(KD)に基づいて検索メモリマット100を検索すれば,図12に示された書込対象のキーデータ(KD)に対応するエントリアドレス(EA)を読みだすことができる。このため,マスク部位については検索対象としない,いわゆるワイルドカード検索機能を実現することができる。
その後,図13に示されるように,確認部250は,読出部240が読み出したエントリアドレス(EA)に基づいて確認用メモリ400を参照し,確認用メモリ400から,エントリアドレス(EA)に対応づけて記憶されているキーデータ(KD)を読み出す。そして,確認部250は,確認用メモリ400から読み出したキーデータ(KD)と,マスク付与後の検索対象のキーデータ(KD)とを比較し,一致するか否かの情報を出力する。上述したとおり,確認用メモリ400には,書込処理(図12参照)において,マスク付与後の書込対象のキーデータ(KD)が記憶されている。このため,マスク付与後のキーデータ同士を比較することで,確認部250は,検索処理が正しく行われたか否かを確認することができる。図13に示した例では,確認部250(比較器)から一致情報が出力されている。
図12及び図13で説明した書込処理/読出処理は,複数の半導体装置10において同時に行われる。つまり,図11に示されるように,情報処理システム1では,同じ書込対象又は検索対象のキーデータ(KD)が,同時に,複数の半導体装置10に対して入力される。複数の半導体装置10は,それぞれ異なるマスクパターンが登録されたマスクレジスタ500を有している。検索対象のキーデータ(KD)を複数の半導体装置10に入力した場合,各半導体装置10から得られる検索結果(エントリアドレス及び確認情報)は異なるものとなる。例えば,1つの半導体装置10のみから検索結果が出力される場合もあるし,複数の半導体装置10から検索結果が出力される場合もある。複数の半導体装置10からの検索結果は,すべてプライオリタイザ30へと入力される。
図11に示されるように,プライオリタイザ30は,複数の半導体装置10から検索結果が入力された場合に,その複数の検索結果の優先度を比較して,一又は複数の検索結果を選択して出力する。例えば,図11に示した例では,第2の半導体装置10と第4の半導体装置10からの検索結果が,プライオリタイザ30に入力されている。この場合,例えば,プライオリタイザ30は,第2の半導体装置10からの検索結果を優先して外部へと出力し,第4の半導体装置10からの検索結果を破棄している。このため,第2の半導体装置10の検索結果が優先されたものといえる。このように,プライオリタイザ30は,複数の半導体装置10に検索結果に優劣をつけるためのアルゴリズムがプログラムされており,このアルゴリズムに従って,検索結果の出力の可否を決定する。優劣のためのアルゴリズムは,任意に設定することができる。
このように,ワイルドカード検索を行った場合,複数の半導体装置10から異なる検索結果が得られる事態も想定される。この場合に,半導体装置10の出力先にプライオリタイザ30を設定しておくことで,例えば,1つの検索結果のみを選択し,残りの検索結果を破棄することができる。これにより,情報処理システム1から出力される検索結果(エントリアドレス)を1つのみに絞ることができ,その検索結果を受け取る外部回路において誤作動や混乱が生じることを防止できる。
なお,詳しい図示は省略するが,書込対象のキーデータ(KD)に対してマスクを付与して検索メモリマット100に書き込む際に,「全衝突」(図6参照)が生じる可能性もある。この場合,図3に示されるように,マスク付与後のキーデータ(KD)が,エントリアドレス(EA)と対応付けて,バックアップメモリ300に書き込まれる。また,検索対象のキーデータ(KD)に対してマスクを付与して検索処理を行う際に,検索メモリマット100から読み出されたエントリアドレス(EA)に「不一致」(図8参照)が生じたり,「全衝突」(図9参照)が生じる可能性もある。この場合,図3に示されるように,マスク付与後のキーデータ(KD)に基づいて,バックアップメモリ300を検索する。これにより,マスク処理とバックアップメモリ300を利用した全衝突対策処理とを併用することができる。
次に,図1〜図3,図14,及び図15を参照して,キーデータ(KD)の符号化処理について説明する。
上述したとおり,本発明の半導体装置10は,エントリアドレス(EA)の書込処理において衝突が発生したときには,メモリ空間に衝突情報を登録することとしている。ここで,書込対象のキーデータ(KD)に偏りがあると,データの衝突頻度が高くなり,検索不能データ列が多くなるという問題が発生する。例えば,ID番号やIPアドレスを降順で連続的に書き込む場合のように,ほとんど同じデータが連続して同じ検索メモリマット100に書き込まれると,データの偏りが発生する。これにより,検索メモリマット100内において,エントリアドレスの衝突が発生する確率が高くなる。例えば,“00_01_02_03”というキーデータ(KD)に続けて,“00_01_02_04”というキーデータ(KD)が入力されたことを考えると,2つのキーデータ(KD)の値には最後の1bitしか違いがない。このため,後者のキーデータ(KD)の書込処理を行う際には,ほとんどの値について衝突情報を登録する必要がある。このようなデータの偏りは,防ぐことが好ましい。
そこで,本発明の半導体装置10は,キーデータ(KD)を符号化するための符号化回路600(図1〜図3等参照)を備える。図1〜図3に示されるように,書込対象/検索対象のキーデータ(KD)が半導体装置10の制御回路200に入力される前に,符号化回路600によって,キーデータ(KD)を符号化する。ここにいう符号化には,キーデータの値を所定のアルゴリズムで拡散(分散)させることや,キーデータの値の順番を並び替えるような処理が含まれる。このように,ほとんど同じキーデータが続けて入力された場合であっても,これらのキーデータを符号化することにより,検索メモリマット100に書き込まれるデータの偏りを解消することが可能となる。データの偏りが解消すれば,検索メモリマット100内で衝突が発生する可能性を低下させることができる。その結果,正確にデータ検索を行うことのできる可能性が高まる。なお,符号化回路600は,書込対象のキーデータ(KD)についても検索対象のキーデータ(KD)についても全く同じアルゴリズムで符号化する。これにより,書込対象のキーデータ(KD)と検索対象のキーデータ(KD)を整合させることができる。
図14は,符号化回路600によって実行される符号化処理の一例を概念的に示している。図14に示されるように,符号化回路600は,書込対象/検索対象のキーデータ(144bit)を,複数の分割データ(1〜18)に分割する。このときの分割処理は,上述した分割部220による処理と同じようにすればよい。その後,符号化回路600は,複数の分割データ(1〜18)の位置を並べ替える。このときの並べ替え処理は,一定のアルゴリズムに基づいて行われる。その後,符号化回路600は,並べ替えられた複数の分割データの値を拡散(分散)させる。分割データの値の拡散処理は,公知の符号化アルゴリズム(暗号化アルゴリズム)に基づいて行うことができる。例えば,拡散処理を行うことで,最初に入力されたキーデータ(KD)は,bit数を維持したまま,異なる値に変換されることが好ましい。図14に示された例において,最初のキーデータ(KD)と拡散処理後のデータ(拡散化データ)は,共に144bitのデータであるとされている。
上記のように,例えば並べ替え処理と拡散処理との組み合わせによって,符号化回路600はキーデータ(KD)を符号化することができる。符号化されたキーデータ(拡散化データ)は,上述した制御回路200に入力される(図1〜図3参照)。その後,図14に示されるように,制御回路200は,通常どおり,拡散化データを分割して,複数の分割データを生成し,各分割データをアドレスとして,検索メモリマット100を構成する分割メモリにアクセスする。そして,制御回路200は,アクセスした分割メモリに対してエントリアドレス(EA)を書き込む処理,又はアクセスした分割メモリからエントリアドレス(EA)を読み出す処理を行う。
図15は,符号化回路600によって実行される符号化処理の他の例を概念的に示している。図15に示されるように,符号化回路600は,書込対象/検索対象のキーデータ(144bit)を複製する。例えば,図15に示されているように,分割メモリが18個存在する場合には,符号化回路600は,この分割メモリの数に併せて,キーデータ(KD)を18個複製する。複製された複数のキーデータ(KD)は同じ値を持つものである。その後,符号化回路600は,同じ値を持つ複数のキーデータ(KD)に対して,それぞれ異なる拡散アルゴリズムに基づいた拡散処理を行う。例えば,キーデータ(KD)は18個に複製されているため,拡散アルゴリズムも18種類用意されている。これにより,異なる値を持つ拡散化データが得られる。このように,符号化回路600は,1つのキーデータ(KD)から,複数(分割メモリに対応した数)の拡散化データを生成することとしてもよい。
上記のように,例えば複製処理と拡散処理との組み合わせによって,符号化回路600はキーデータ(KD)を符号化することができる。複数の拡散化データは,上述した制御回路200に入力される(図1〜図3参照)。その後,図15に示されるように,制御回路200は,複数の拡散化データをそれぞれ分割して,各拡散化データから複数の分割データを生成する。また,制御回路200は,各分割データをアドレスとして,検索メモリマット100を構成する分割メモリにアクセスする。そして,制御回路200は,アクセスした分割メモリに対してエントリアドレス(EA)を書き込む処理,又はアクセスした分割メモリからエントリアドレス(EA)を読み出す処理を行う。
このように,符号化回路600を設けて,キーデータ(KD)を符号化することにより,検索メモリマット100に書き込まれるデータの偏りを解消することができる。データの偏りが解消すれば,検索メモリマット100内で衝突が発生する可能性を低下させることができる。その結果,正確にデータ検索を行うことのできる可能性が高まる。
なお,図1〜図3に示されるように,マスク処理と符号化処理を併用する場合,マスクレジスタ500の後段に,符号化回路600を設けることが好ましい。つまり,符号化回路600は,マスクレジスタ500によってマスクが付与されたキーデータ(KD)を符号化する。また,図1〜図3に示されるように,バックアップメモリ300,マスクレジスタ500,及び符号化回路600を併用することも当然に可能である。
続いて,図16〜図24を参照して,ワイルドカード検索機能を実現するための方式の他の例について説明する。
図16(a)は,ワイルドカード検索機能の方式例1を概念的に示している。図16(a)に示された方式例1は,図1〜図15を参照して説明した方式と同じである。図16(b)は,方式例1とは異なる方式例2を概念的に示したものである。以下では,図17〜図24を参照して,この図16(b)に示された方式例2について説明する。
図17(a)は,検索メモリに書き込むキーデータの構成の例を示している。例えば,TCAM(半導体装置)に入力するキーデータの構成が,図17(a)のような構成を有している場合について考える。図17(a)に示されるように,キーデータの構成は,以下のように構成されている。
・入力キーデータ長:32bit
・入力キーデータの中のW/C(ワイルドカード:don’t care bit)となる部分:下位4bit(/28)又は8bit(/24)
・エントリ数:4k
W/C部分を,/24又は/28に限定して考えた場合(/32は含まれない),少なくとも下位の4bitは検索対象外となるため,上位28bitのみが検索の対象となる。ここで,W/C影響を受けない部分を「固定部分」と定義し,W/Cになる可能性のある部分を「W/C部分」と定義する。この定義に従うと,「W/C部分」は4bit,「固定部分」は24bitになる。この例ではエントリ数が4kであるため,検索メモリを構成する各分割メモリのワード長(フラグは除く)は,12bitになる。つまり,「固定部分」(24bit)を分割メモリ(12bit)に割り当てると,分割メモリ2個分になる。分割メモリの数が2個というのは衝突理論から考えると少なすぎるため,衝突が多発するという問題が発生する。この問題を解決するためには,固定部分のキーデータを拡張する必要がある。このため,固定部分のキーデータを,図17(b)に示すように拡張して,
分割メモリ6個分に相当するように,少なくても6個(72bit)程度に拡張する必要がある。
図17(b)は,固定部分のキーデータを拡張した例を示している。図17(b)において,拡張された固定部分(72bit)は,(1)〜(6)で示されている。また,W/C部分(/28と/24の差分データ+マスク情報)は,(7)で示されている。つまり,マスク部分を除いた/24及び/28のデータは,下記のようになる。
・/24のキーデータは固定部分の24bitのみ(W/C部分はマスクされる)
・/28のキーデータは固定部分の24bit+4bit(W/C部分)
また,マスクデータは,/24か/28かを指定する部分である。(7)で示されたW/C部分のマスク状態を,マスクデータによって下記のように指定する。
・/24:11(2bit)
・/28:01(2bit)
・登録無し:00(2bit)
なお,「登録なし:00」は,/28のみの登録時に誤って,/24と判断することを防止するのに必要とされる。
図18(a)は,/24及び/28対応のTCAMの構成例を示している。TCAMの実現に必要なメモリ構成は,図18(a)に示されるようになり,キーデータを4k×144bitのブロックに収容可能である。マスク情報は,その前の4bitをマスクするかどうかが識別でき,且つ,その前の4bitにマスクしたデータが登録されていることが識別できればよい。このため,マスク情報は,2bitあれば十分である。
また,図18(b)は,/16及び/18対応のTCAM(20bit)の構成例を示している。ここで,図18(a)に示した/24及び/28(ビット長32bit)対応TCAMの基本動作を説明するには規模が大きすぎるため,基本的な考え方は変えずに,規模を小さくした/16及び/18(ビット長20bit)対応のTCAMを用いて基本動作と,そのTCAMの構成方法について説明する。なお,フラグを除くデータビットを24bitから72bitへと拡散する操作以外は,/24及び/28対応のものと,/16及び/18対応のものとで,同じ操作とすることができる。
図19(a)は,/16及び/18対応のTCAM(20bit)が備える確認用メモリへの登録例を示している。確認用メモリは,検索データの最終検査用のメモリである。基本的に,確認用メモリは,W/Cの仕様とW/Cの処理後のデータを登録する場所である。確認用メモリでは,W/Cの処理に無関係な部分と,W/Cの処理に関係する部分とに分けられる。W/Cの処理に無関係な部分を,ここでは「固定部分」と呼ぶ。また,W/Cの処理に関係する部分を,「マスク部分」と呼ぶ。/16及び/18の場合は,図19(a)示すように,(1)〜(5)が固定部分となり,(5)及び(6)がマスク部分となる。/16の場合には,(1)〜(4)がW/C処理されない固定部分となり,/18の場合には,(1)〜(5)がW/C処理されない固定部分となる。(5)を,固定部分に含めるか否かは,(6)のマスクデータ((5)をマスクするかしないかを定義した情報)で決まる。/16及び/18対応TCAMにはビット長が20bitであるが,/16又は/18の何れの場合であって,下位2bitのデータはマスクされることになる。このため,検索に係わるビットは,上位から16bit又は上位から18bitということになる。なお,(1)〜(4)の固定データ部分については,この例では拡散によるビット数の拡張が不要な場合であるが,ビット数の拡張が必要な場合であっても,ビット数拡張前のデータを確認用メモリに登録することとなる。
ここで,/16及び/18対応TCAMが備える検索メモリマットへの登録方法について説明する。固定データ部分のビット数が少ない場合,衝突防止の点から,必要に応じて拡散によるビット拡張操作が必要となる。すなわち,例えば,エントリ数が4kであるのに対して固定データ部分のビット数が24bitの場合,ビット拡張を行わずに分割メモリに登録しようとすると,分割メモリの数が2となり,登録データがランダムであっても1/14.3の確率で衝突が起き,衝突が使用上の大きな問題となる。従って,この問題を解決するには,登録データのランダム化と分割メモリ数の増大による衝突確率の大幅低減を図るために,拡散操作によるビット数の拡張が必須になる。なお,/16及び/18対応TCAMでは,拡散によるビット拡張は不要としているので,原則的には(1)〜(4)のデータをそのまま検索メモリマットに登録することになる。ただし,マスク部分にW/Cが含まれるため,(1)〜(4)が必ずしもユニークになるとは限らない。つまり,(1)〜(4)部分において連続的に同じデータが登録される可能性も考えられる。このように,(1)〜(4)部分において同じデータが複数個存在すると,(1)〜(4)に全列衝突が発生し,1サイクルで検索することが出来なくなるという問題も発生する。
従って,このような全列衝突を防ぐための対策が必要となる。そこで,説明する方式例では,このW/Cによる全列衝突を防ぐために,最初のデータのみ検索メモリマットに登録し,2回目以降のデータは検索メモリマットに登録しないという概念を導入する。このような概念を,ここでは「グループ登録」と称している。「グループ登録」を行う場合,グループを代表する番号が必要になる。このグループを代表する番号を,ここでは「代表番号」と称する。さらに,この代表番号には,登録した最初のキーデータのエントリアドレスを用いるものとする。このようにすれば,(1)〜(4)の同じデータを1つのグループとし,そのグループを代表番号により区別することができるようになる。
図19(b)は,グループ登録の制約事項を説明するための図である。(1)〜(4)における同じ1つのグループには,登録上の制約がある。まず,基本的な制約事項として,CAMには同じデータは登録できないという制約がある。この制約によると,(1)〜(4)が同じデータの場合,本例では,(5)か(6)の何れかに違いがなければ登録できないことになる。この制約から登録できる範囲を考えると,以下のことがいえる。
・マスク1とマスク3の混在が可能。
・ただし,マスク1は(5)が0の場合のみ,マスク3は(5)が0〜3まで登録可能。
・マスク1とマスク3が混在する場合はマスク1の登録エントリ番号が小さくなければならない。
・(マスク1とマスク3が混在する場合の代表番号は必ずマスク1の番号になる)
この制約事項から,同じグループに属する登録データの数は,マスク1も含めると最大で5ということになる。ただし,マスク3が優先的に検索されるので,マスク3に登録されている(5)のデータは,マスク1の登録があったとしても,マスク1として検索されることはない。
その他,「グループ登録」の導入により,検索データの中に登録しない領域が生じるため,グループ登録の数が増えるに従って衝突確率が低下するという利点がある。また,「グループ登録」は,登録時の基本的な制約事項の確認を行うため,登録前に必ず読出し確認を行うための特別な制約事項が発生しないという利点もある。なお,基本的な制約事項を確認するには,固定データ部分の検索メモリを確認するだけでよく,確認用メモリによる最終確認までは必要としない。
続いて,マスクデータ部分の登録について説明する。図20(a)は,マスクデータ部分の構成例を示している。図20に示されるように,マスクデータ部分は,確認用メモリの(5)と(6)に相当する部分の登録処理を行う部分である。/16及び/18対応TCAM(20bit)の例に示したように,マスクデータ部分は,確認代表番号変換メモリとコード検索メモリ(16w×2bit SRAM)の2個からなる。
代表番号変換メモリとコード変換メモリについて説明する。まず,(5)のビット数は4bitであるが,W/Cが存在するため,/16(マスク1)では(5)全ビットが検索対象外となり,/18(マスク3)では最下位から2bitが検索対象外になる。そこで,両者に共通する最下位からの2bitを除いた残りの2bitの部分を,(5)のデータとする。このように考えると,(5)の登録データは,/16ではマスク処理後のデータである0となり,/18では最下位からの2bitを除いた上位2bitのデータである0〜3となる。W/Cがある場合,(5)の違いにより。(1)〜(4)の全列衝突が発生する。この全列衝突避けるためには,「グループ登録」を導入する必要がある。また,グループ間の衝突を避けるため,0〜15のエントリ内に/18の0〜3の登録範囲に合わせて,登録領域を確保し,各グループに割り付ける。この領域の割り付けを行うためのメモリが,「代表番号変換メモリ」であり,各領域内に(5)の値を登録したメモリが,「コード変換メモリ」である。
図20(b)は,代表番号変換メモリの登録方法の例を示している。図20(b)に示されるように,16個あるエントリを4で割ると,4個の0〜3を登録できる領域を確保できる。この0〜3を登録できる4個の領域の0のエントリアドレスを,マスク3の代表番号のシフト番号とすると,エントリアドレスの0,4,8,12が0〜3を登録できる領域を代表するシフト番号になる。このシフト番号を導入することで,どの領域に0〜3を登録するか簡単に定めることができる。例えば,図20(b)に示されるように,代表番号1にシフト番号4を登録し,シフト番号4で検索メモリのエントリアドレス4〜7に,0〜3を登録する領域に指定する。このように,0〜3を登録する領域の割り付けを行うのが,代表番号変換メモリの役目である。
図21(a)は,コード検索メモリの登録方法の例を示している。図21(a)の図は,コード3の(5)が,0〜3の何れかの値であることを示している。前述の例(図20(b)参照)で示したように,代表番号変換メモリの代表番号が1でシフト番号4が指定されたとすると,(5)の0〜3は,図21(a)に示されるように,エントリアドレス4〜7に割り付けられる。例えば,(5)が0であり,このデータのエントリアドレスが5だとすると,図21(a)の切り出し部分に示されるように,4ワードメモリの0番地に,エントリアドレス5が登録される。同様に,(5)が1,2であり,それらのデータのアドレスがそれぞれ4,12であるとすると,1番地にエントリアドレス4が登録され,2番地にエントリ番号12が登録される。このように切り出し部分で見ると,分割メモリに登録する基本的手法と全く同じになる。ただし,この切り出し部分は,エントリ数が0〜15の一部である。このため,エントリ数が0〜15の中にこの切り出し部分をあてはめる必要がある。このあてはめ操作にシフト番号を用いることになる。この例では,切り出し部分をエントリアドレスの4〜7にあてはめるため,シフト番号の4を(5)の値に加算する。この様な操作を行うことで,コード検索メモリへのデータ登録を行うことができる。
続いて,このような方式例のTCAMを用いた検索動作について説明する。図21(b)は,検索動作における動作1を示している。動作1は,「検索データの前処理」である。つまり,検索データの前処理では,入力された20bitの検索データを18bit化するとともに,(1)〜(5)の割り付けを行う。検索時に入力される検索データは20bitである。この入力データにはW/Cが含まれており,検索の対象となるデータは/16又は/18である。このため,20bitの入力データのうち,検索の対象となるのは18bit又は16bitであり,最下位から2bitのデータは検索に無関係なデータとなる。このCAMは,エントリが16ワードである。このため,20bitの入力データを4bit単位で区切り,最上位からこの4bit単位で区切ったデータに,それぞれ(1)〜(5)の番号を割り当てると,(1)〜(4)は4bitずつ合計16bitとなり,(5)は下位2bitの構成になる。(1)〜(4)は固定部分である。他方,(5)は,/16のときには,(5)の2bitが全ビットマスクされて0になり,/18のときには,そのまま2bitのデータとして取り扱われることとなる。しかし,検索データが入力された段階では,(5)のデータが/16であるか,それとも/18であるかは不明である。そこで,20bitの入力データの最下位から2bitを除いて,この入力データを(1)〜(5)に割り当てる操作が必要になる。この操作が,「検索データの前処理」である。
図22(a)は,検索動作における動作2を示している。動作2では,(1)〜(4)の固定データによるグループ(代表番号)の検索を行う。入力データの(1)〜(4)を用いて,固定部分の検索メモリを検索する。ここでの検索動作が,図22(a)に示されている。
図22(b)は,検索動作における動作3を示している。動作3では,(5)のマスクデータによる検索を行う。まず,入力データの(5)と読み出した代表番号とを用いて,マスク3のデータが登録されているか否かを検索する。登録データはマスク1かマスク3のどちらかであるため,マスク3であると仮定して検索を行い,マスク3に登録されていなければマスク1のデータであるという前提の検索方法を用いている。この検索方法が成立するためには,マスク1とマスク3が混在する場合には,マスク1をマスク3の前のエントリに登録する必要がある。なお,図23(b)において,代表番号変換で空白となっているところは,マスク3ではない(つまりマスク1のデータである)ということを示している。また,検索結果で空白となったところもマスク1のデータとなる。
図23(a)は,検索動作における動作4を示している。動作4では,動作3の検索結果を用いて確認用メモリを検索し検索入力との比較を行う。一致すればマッチ状態となり,不一致ならアンマッチとなる。図23(a)において,検索順序の1と4は,検索入力データで見ると同じになる。また,マスク3(コード3)を優先して検索することから,コード3の登録データを見ると,該当番号が登録されており,検索結果はエントリ番号4と判断される。検索順序の1と4は同じグループに属しており,コード3を優先して検索するため,コード3に登録しているエントリ番号はコード1のデータとしては検索されなくなる(ロンゲストマッチになる)。
図23(b)は,コード検索メモリの登録領域拡張法の一例を示している。/16及び/18対応TCAMの場合,例では,エントリ数16の中のうち,マスク3(コード3)の登録領域としては4種類しか取れない。これよりも登録領域を増やす必要が生じる場合もある。その場合の対策方法を検討すると,次の対策が考えられる。まず,対策方法1としては,マスク3(コード3)を,別々なTCAMブロックに登録することが考えられる。また,対策方法2としては,コード3のコード検索メモリの数を増やし,識別番号を付加することが考えられる。代表番号変換メモリの数を増やすことはせずに,未使用のフラグ(3bit)を活用して,増やしたコード検索メモリの識別を行う。例えば,000は1個目,001は2個目のようにし,代表番号変換メモリの変換時に,変換データが0で,フラグの001が読み出されたら,2個目の0〜3の該当番地を検索するようにすればよい。
図24は,パイプライン動作の場合における検索動作のフローを示している。図24は,上記した検索動作をまとめたものである。図24に示されるように,検索動作は,第1サイクルから第4サイクルによって実行することができる。
以上,本願明細書では,本発明の内容を表現するために,図面を参照しながら本発明の実施形態の説明を行った。ただし,本発明は,上記実施形態に限定されるものではなく,本願明細書に記載された事項に基づいて当業者が自明な変更形態や改良形態を包含するものである。
1…情報処理システム 10…半導体装置
20…マスクコントローラ 21…テーブルデータ入力部
22…マスクパターン生成部 23…マスクパターン登録部
30…プライオリタイザ 100…検索メモリマット
110…分割メモリ 200…制御回路
210…入力部 220…分割部
230…書込部 240…読出部
250…確認部 260…出力部
300…バックアップメモリ 400…確認用メモリ
500…マスクレジスタ 600…符号化回路

Claims (8)

  1. メモリアドレスによって特定されるメモリ空間に,キーデータに対応するエントリアドレスが書き込まれる検索メモリマット(100)と,
    前記検索メモリマットに接続された制御回路(200)と,
    前記制御回路に接続されたバックアップメモリ(300)と,を備え,
    前記検索メモリマット(100)は,
    前記メモリ空間が,前記メモリアドレスを保持したまま,複数の分割メモリ(110a,110b…)に区分されたものであり,
    前記制御回路(200)は,
    前記キーデータが入力される入力部(210)と,
    前記入力部に入力された前記キーデータを複数の分割データに分割する分割部(220)と,
    複数の前記分割データのそれぞれを,複数の前記分割メモリに割り当てて,各分割データをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間に,当該分割データに対応するエントリアドレスを書き込む書込部(230)と,を有し,
    前記書込部(230)は,
    ある分割データに対応するエントリアドレスを書き込むべきメモリ空間に,既に他の分割データに対応するエントリアドレスが書き込まれている場合には,当該メモリ空間に,エントリアドレスの衝突を表す衝突情報を書き込み,
    あるキーデータから分割された複数の分割データの全てについて前記衝突が生じている場合には,その全衝突が生じているキーデータとこれに対応するエントリアドレスとを,前記バックアップメモリ(300)に書き込む
    半導体装置。
  2. 請求項1に記載の半導体装置であって,
    前記エントリアドレスに対応づけて前記キーデータを記憶する確認用メモリ(400)を,さらに備える
    半導体装置。
  3. 請求項1に記載の半導体装置であって,
    マスクレジスタ(500)を,さらに備え,
    前記マスクレジスタ(500)は,所望のマスクパターンが登録されており,当該マスクパターンに応じて,前記キーデータにマスクを付与するものであり,
    前記マスクが付与されたキーデータが,前記制御回路(200)の前記入力部(210)に入力される
    半導体装置。
  4. 請求項1に記載の半導体装置であって,
    前記制御回路(200)は,
    前記入力部(210)に,検索対象データとしてのキーデータが入力され,前記分割部(220)が,当該検索対象データとしてのキーデータを複数の分割データに分割した場合において,
    前記分割データのそれぞれをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間から,当該分割データに対応するエントリアドレスを読み出す読出部(240)を,さらに有し,
    前記読出部(240)は,
    前記メモリ空間にアクセスしたときに,当該メモリ空間に前記衝突情報が書き込まれている場合には,分割データに対応するエントリアドレスを読み出さずに,ドントケアとして処理し,
    ある検索対象データとしてのキーデータから分割された複数の分割データの全てがドントケアとして処理される場合,又は,読み出したエントリアドレスに不一致が生じている場合に,前記バックアップメモリ(300)から,当該検索対象データとしてのキーデータに基づいて,これに対応するエントリアドレスを検索する
    半導体装置。
  5. 請求項3に記載の半導体装置(10)を複数有する情報処理システムであって,
    複数の前記半導体装置(10)は,前記マスクレジスタ(500)に登録されている前記マスクパターンが異なる
    情報処理システム。
  6. 請求項5に記載の情報処理システムであって,
    複数の前記半導体装置(10)に接続されたマスクコントローラ(20)を,さらに備え,
    前記マスクコントローラ(20)は,
    マスク部位を有する複数のキーデータが含まれるテーブルデータが入力されるテーブルデータ入力部(21)と,
    前記テーブルデータに含まれる複数のキーデータのマスク部位のパターンを解析して,複数種類のマスクパターンを生成するマスクパターン生成部(22)と,
    前記マスクパターン生成部(22)が生成した複数種類のマスクパターンを,それぞれ,異なる前記半導体装置(10)の前記マスクレジスタ(500)に登録するマスクパターン登録部(23)と,を有する
    情報処理システム。
  7. メモリアドレスによって特定されるメモリ空間に,キーデータに対応するエントリアドレスが書き込まれる検索メモリマット(100)と,
    前記検索メモリマットに接続された制御回路(200)と,
    前記制御回路に接続されたバックアップメモリ(300)と,を備える半導体装置(10)に対し,
    前記エントリアドレスを書き込む情報書込方法であって,
    前記検索メモリマット(100)は,
    前記メモリ空間が,前記メモリアドレスを保持したまま,複数の分割メモリ(110a,110b…)に区分されたものであり,
    前記書込方法は,
    前記制御回路にキーデータが入力される工程と,
    前記制御回路が,前記キーデータを複数の分割データに分割する工程と,
    前記制御回路が,複数の前記分割データのそれぞれを,複数の前記分割メモリに割り当てて,各分割データをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間に,当該分割データに対応するエントリアドレスを書き込む工程と,を含み,
    前記エントリアドレスを書き込む工程において,前記制御回路は,
    ある分割データに対応するエントリアドレスを書き込むべきメモリ空間に,既に他の分割データに対応するエントリアドレスが書き込まれている場合には,当該メモリ空間に,エントリアドレスの衝突を表す衝突情報を登録し,
    あるキーデータから分割された複数の分割データの全てについて前記衝突が生じている場合には,その全衝突が生じているキーデータとこれに対応するエントリアドレスとを,前記バックアップメモリ(300)に書き込む
    情報書込方法。
  8. 請求項7に記載の情報書込方法によって,前記半導体装置(10)に対して書き込まれた前記エントリアドレスを読み出す情報読出方法であって,
    前記制御回路に検索対象データとしてのキーデータが入力される工程と,
    前記制御回路が,前記検索対象データとしてのキーデータを複数の分割データに分割する工程と,
    前記制御回路が,前記分割データのそれぞれをアドレスとして,各分割メモリのメモリアドレスによって特定されるメモリ空間にアクセスし,アクセスしたメモリ空間から,当該分割データに対応するエントリアドレスを読み出す工程と,を含み,
    前記エントリアドレスを読み出す工程において,前記制御回路は,
    前記メモリ空間にアクセスしたときに,当該メモリ空間に前記衝突情報が登録されている場合には,分割データに対応するエントリアドレスを読み出さずに,ドントケアとして処理し,
    ある検索対象データとしてのキーデータから分割された複数の分割データの全てがドントケアとして処理される場合又は,読み出したエントリアドレスに不一致が生じている場合に,前記バックアップメモリ(300)から,当該検索対象データとしてのキーデータに基づいて,これに対応するエントリアドレスを検索する
    情報読出方法。
JP2015101081A 2015-05-18 2015-05-18 半導体装置,情報処理システム,及び情報書込/読出方法 Active JP6166306B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2015101081A JP6166306B2 (ja) 2015-05-18 2015-05-18 半導体装置,情報処理システム,及び情報書込/読出方法
PCT/JP2016/062290 WO2016185848A1 (ja) 2015-05-18 2016-04-18 半導体装置,情報処理システム,及び情報書込/読出方法
TW105112474A TWI640879B (zh) 2015-05-18 2016-04-21 Semiconductor device, information processing system, and information writing/reading method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015101081A JP6166306B2 (ja) 2015-05-18 2015-05-18 半導体装置,情報処理システム,及び情報書込/読出方法

Publications (2)

Publication Number Publication Date
JP2016219073A JP2016219073A (ja) 2016-12-22
JP6166306B2 true JP6166306B2 (ja) 2017-07-19

Family

ID=57319830

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015101081A Active JP6166306B2 (ja) 2015-05-18 2015-05-18 半導体装置,情報処理システム,及び情報書込/読出方法

Country Status (3)

Country Link
JP (1) JP6166306B2 (ja)
TW (1) TWI640879B (ja)
WO (1) WO2016185848A1 (ja)

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3644494B2 (ja) * 2001-04-13 2005-04-27 日本電気株式会社 情報検索装置
US7711893B1 (en) * 2004-07-22 2010-05-04 Netlogic Microsystems, Inc. Range code compression method and apparatus for ternary content addressable memory (CAM) devices
US20070247885A1 (en) * 2006-04-25 2007-10-25 Renesas Technology Corp. Content addressable memory
US7515449B2 (en) * 2006-09-15 2009-04-07 International Business Machines Corporation CAM asynchronous search-line switching
US8395920B2 (en) * 2009-06-30 2013-03-12 Taiwan Semiconductor Manufacturing Company, Ltd. Content addressable memory design
US8264862B2 (en) * 2010-11-24 2012-09-11 Lsi Corporation Low power SRAM based content addressable memory
JP5575997B1 (ja) * 2013-03-13 2014-08-20 長瀬産業株式会社 半導体装置及び半導体装置に対するエントリアドレス書き込み/読み出し方法

Also Published As

Publication number Publication date
JP2016219073A (ja) 2016-12-22
TW201709095A (zh) 2017-03-01
TWI640879B (zh) 2018-11-11
WO2016185848A1 (ja) 2016-11-24

Similar Documents

Publication Publication Date Title
US6944710B2 (en) Multiple category CAM
US7831765B2 (en) Distributed programmable priority encoder capable of finding the longest match in a single operation
US10944675B1 (en) TCAM with multi region lookups and a single logical lookup
US20050044134A1 (en) High-performance hashing system
US10896127B2 (en) Highly configurable memory architecture for partitioned global address space memory systems
US9672239B1 (en) Efficient content addressable memory (CAM) architecture
US6987683B2 (en) Magnitude comparator based content addressable memory for search and sorting
JPH08212136A (ja) 仮想メモリ変換処理を効率的に共有する方法及び装置
US10565205B2 (en) Incrementally building hash collision tables
US11899985B1 (en) Virtual modules in TCAM
US20150278543A1 (en) System and Method for Optimizing Storage of File System Access Control Lists
CN112447254A (zh) 三元内容可寻址存储器中的错误检测方法
US9899088B1 (en) Content addressable memory decomposition
US10795580B2 (en) Content addressable memory system
US9703484B2 (en) Memory with compressed key
US20160105363A1 (en) Memory system for multiple clients
JP6166306B2 (ja) 半導体装置,情報処理システム,及び情報書込/読出方法
US10423666B2 (en) Writing method and semiconductor device including a search memory mat with write processing terminated when one piece of divided key data is successfully written
US7516119B1 (en) Method and apparatus for action group generation and arbitration in a classification engine
JP3938124B2 (ja) データ検索装置
EP1393322B1 (en) Method and device for storing and matching arbitrary wide expressions to content addressable memories
Lin et al. TCAM-Based Packet Classification Using Multi-stage Scheme
KR101359692B1 (ko) 입력되는 서명 문자열 부분 정보를 저장하는 메모리 공간을 이용한 서명 탐지 시스템
WO2024016863A1 (zh) 规则查找方法、装置、设备及计算机可读存储介质
JP6073761B2 (ja) 検索装置および検索方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170323

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170606

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170622

R150 Certificate of patent or registration of utility model

Ref document number: 6166306

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250