(57)【要約】【課題】関連メモリに対する柔軟性が高いアクセスが可能な半導体装置を実現する。【解決手段】半導体装置は、入力された検索データがメモリセルアレイの行毎に格納されたエントリデータに一致するか否かを検索し、一致するエントリデータに対応するアドレス情報を出力する連想メモリと、連想メモリのアドレス情報に従ってアクセス可能に設けられた、エントリデータに対応する関連データが格納された関連メモリと、連想メモリから出力されたアドレス情報を別のアドレス情報に変換可能な変換レジスタと、変換レジスタの出力結果に従うアドレス情報に基づいて関連メモリにアクセスして、エントリデータに対応する関連データを取得する制御部と、連想メモリから出力されたアドレス情報と、関連メモリから出力された関連データとを合成した合成データを外部に出力する合成データ出力部とを備える。【選択図】図２
2019008860.tif 000002
【特許請求の範囲】
【請求項１】
入力された検索データがメモリセルアレイの行毎に格納されたエントリデータに一致するか否かを検索し、一致するエントリデータに対応するアドレス情報を出力する連想メモリと、
前記連想メモリのアドレス情報に従ってアクセス可能に設けられた、前記エントリデータに対応する関連データが格納された関連メモリと、
前記連想メモリから出力されたアドレス情報を別のアドレス情報に変換可能な変換レジスタと、
前記変換レジスタの出力結果に従うアドレス情報に基づいて前記関連メモリにアクセスして、前記エントリデータに対応する関連データを取得する制御部と、
前記連想メモリから出力されたアドレス情報と、前記関連メモリから出力された関連データとを合成した合成データを外部に出力する合成データ出力部とを備える、半導体装置。
【請求項２】
前記変換レジスタは、
前記連想メモリから出力されたアドレス情報が所定のアドレス情報である場合に前記別のアドレス情報に変換して出力し、
前記連想メモリから出力されたアドレス情報が前記所定のアドレス情報以外である場合には前記アドレス情報を変換せずに出力する、請求項１記載の半導体装置。
【請求項３】
入力された検索データがメモリセルアレイの行毎に格納されたエントリデータに一致するか否かを検索し、一致するエントリデータに対応するアドレス情報を出力する連想メモリと、
前記連想メモリのアドレス情報に従ってアクセス可能に設けられた、前記エントリデータに対応する関連データが格納された関連メモリと、
前記関連メモリにアクセスするためのアクセス情報が格納された付加レジスタと、
前記付加レジスタに格納されたアクセス情報およびアドレス情報に基づいて前記関連メモリにアクセスして、前記エントリデータに対応する関連データを取得する制御部と、
前記連想メモリから出力されたアドレス情報と、前記関連メモリから出力された関連データとを合成した合成データを外部に出力する合成データ出力部とを備える、半導体装置。
【請求項４】
前記関連メモリは、複数のサブブロックを含み、
前記アクセス情報は、前記関連データのデータサイズに関する情報を含み、
前記制御部は、前記データサイズに関する情報および前記アドレス情報に基づいて、前記関連メモリの前記複数のサブブロックのうちの少なくとも１つのサブブロックにアクセスして、前記エントリデータに対応する関連データを取得する、請求項３記載の半導体装置。
【請求項５】
前記アクセス情報は、前記複数のサブブロックのうちの１つを選択する選択情報をさらに含み、
前記制御部は、前記関連データのデータサイズに関する情報、前記選択情報および前記アドレス情報に基づいて、前記関連メモリにアクセスして、前記エントリデータに対応する関連データを取得する、請求項４記載の半導体装置。
【請求項６】
前記制御部は、
前記関連データのデータサイズが１以上である場合には、前記アドレス情報に基づいて、前記関連メモリにアクセスして、前記エントリデータに対応する関連データを取得し、
前記関連データのデータサイズが０である場合には、前記関連メモリにアクセスしない、請求項４記載の半導体装置。
【請求項７】
前記合成データ出力部は、前記関連データのデータサイズに関する情報に基づいて前記合成データの長さを調整する、請求項４記載の半導体装置。
【請求項８】
前記アクセス情報は、外部への前記アドレス情報の出力に対する許可／不許可を設定する外部出力設定情報を含み、
前記合成データ出力部は、
前記外部出力設定情報が前記アドレス情報の出力に対する許可を設定する場合には、前記連想メモリから出力されたアドレス情報と、前記関連メモリから出力された関連データとを合成した合成データを外部に出力し、
前記外部出力設定情報が前記アドレス情報の出力に対する不許可を設定する場合には、前記連想メモリから出力されたアドレス情報を出力せず、前記関連メモリから出力された関連データのみを外部に出力する、請求項３記載の半導体装置。
【請求項９】
前記関連メモリは、
前記連想メモリのアドレス情報に従ってアクセス可能に設けられた、前記エントリデータに対応する第１の関連データが格納された内部関連メモリと、
前記連想メモリのアドレス情報に従ってアクセス可能に設けられた、前記エントリデータに対応する第２の関連データが格納された外部関連メモリとを含み、
前記制御部は、前記付加レジスタに格納されたアクセス情報およびアドレス情報に基づいて前記内部関連メモリおよび前記外部関連メモリのいずれか一方にアクセスして、前記エントリデータに対応する第１あるいは第２関連データを取得し、
前記合成データ出力部は、前記連想メモリから出力されたアドレス情報と、前記内部あるいは外部関連メモリから出力された第１あるいは第２関連データとを合成した合成データを外部に出力する、請求項３記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、半導体装置に関し、たとえば、連想メモリに関する。
【背景技術】
【０００２】
連想メモリまたはＣＡＭ（内容参照メモリ：Content Addressable Memory）と呼ばれる記憶装置は、記憶しているデータワードの中から検索ワードに一致しているものを検索し、一致しているデータワードが見つかった場合は、そのアドレスを出力するものである。
【０００３】
特に、ＣＡＭは、インターネットなどのネットワーク用のルータにおいてアドレス検索およびアクセス制御のために幅広く利用されている（特許文献１）。
【０００４】
この点で、特許文献１では、ＣＡＭとは別に、データワードと関連する関連データ（Associated Data）を格納した関連メモリ（Associated Memory（AM））が設けられた構成が開示されている。
【０００５】
一般的に関連メモリは、ＣＡＭと同一のアドレスを用いて、関連データにアクセス可能な構成として設けられている。
【０００６】
また、関連メモリは、ＣＡＭと同様に大容量化が求められており、特許文献１には、複数のアレイを設けて切り替える構成により大容量化を図っている。
【０００７】
一方で、関連メモリは、ＣＡＭとの関係において１対１の関係で紐付けられており、当該関係に自由度が無いという課題が有った。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国特許第７２８１０８５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本開示は、上記の課題を解決するためになされたものであって、関連メモリに対する柔軟性の高いアクセスが可能な半導体装置を提供することを目的とする。
【００１０】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本開示のある局面に従う半導体装置は、入力された検索データがメモリセルアレイの行毎に格納されたエントリデータに一致するか否かを検索し、一致するエントリデータに対応するアドレス情報を出力する連想メモリと、連想メモリのアドレス情報に従ってアクセス可能に設けられた、エントリデータに対応する関連データが格納された関連メモリと、連想メモリから出力されたアドレス情報を別のアドレス情報に変換可能な変換レジスタと、変換レジスタの出力結果に従うアドレス情報に基づいて関連メモリにアクセスして、エントリデータに対応する関連データを取得する制御部と、連想メモリから出力されたアドレス情報と、関連メモリから出力された関連データとを合成した合成データを外部に出力する合成データ出力部とを備える。
【発明の効果】
【００１２】
一実施例によれば、関連メモリに対する柔軟性が高いアクセスが可能な半導体装置を実現することが可能である。
【図面の簡単な説明】
【００１３】
【図１】実施形態１に基づく通信機器１００の構成を説明する図である。
【図２】実施形態１に基づく通信機器１００の検索動作を説明する図である。
【図３】実施形態１に基づく制御部４００の処理フローを説明する図である。
【図４】実施形態２に基づく通信機器１０１の構成を説明する図である。
【図５】実施形態２に基づくＡＤレジスタ５１０に格納されているアクセステーブルを説明する図である。
【図６】実施形態２に基づく制御部４００の処理フローを説明する図である。
【図７】実施形態２の変形例に基づく通信パケットについて説明する図である。
【図８】実施形態２の変形例に基づく通信パケットの送信について説明する概念図である。
【図９】実施形態３に基づく通信機器１１０の構成を説明する図である。
【発明を実施するための形態】
【００１４】
実施形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付し、その説明は繰り返さない。
【００１５】
（実施形態１）
＜通信機器１００の全体構成＞
図１は、実施形態１に基づく通信機器１００の構成を説明する図である。
【００１６】
図１に示されるように、通信機器１００は、スイッチあるいはルータ等の通信装置である。
【００１７】
通信機器１００は、連想メモリ２００と、関連メモリ３００と、制御部４００と、ＡＤレジスタ５００と、転送制御部６００とを含む。
【００１８】
制御部４００は、一例として、ＣＰＵ（Central Processing Unit）で構成され、機器全体を制御する。
【００１９】
制御部４００は、図示しない汎用メモリに格納されたプログラムと協働して種々の機能を実現する。たとえば、汎用メモリは、ＤＲＡＭ（Dynamic Random Access Memory）で構成することが可能であり、制御部４００と協働することによりオペレーティングシステム（ＯＳ）を構築する。
【００２０】
制御部４００は、隣接する通信機器等と情報交換し、転送処理に必要な情報を維持管理する。
【００２１】
転送制御部６００は、制御部４００からの指示に従って通信パケットの転送処理を実行する。転送制御部６００は、転送処理に特化したＡＳＩＣ（Application Specific Integrated Circuit）回路あるいはＮＰＵ(Network Processing Unit)といった専用ハードウェアが設けられている。
【００２２】
制御部４００は、連想メモリ２００および関連メモリ３００ならびにＡＤレジスタ５００にアクセスして、転送処理に必要な情報を取得する。
【００２３】
連想メモリ２００は、本例においては、ＣＡＭ装置を用いる場合について説明する。
関連メモリ３００は、ＤＲＡＭ等で構成する。
【００２４】
連想メモリ２００は、複数のブロック２０１で構成されている。
本例においては、一例として、ブロック番号ｂｋ０〜ｂｋＮまで設けられている場合が示されている。
【００２５】
各ブロック２０１は、メモリセルアレイを有し、当該メモリセルアレイの行毎にエントリデータ２０２が格納されている。一例として、各行毎にエントリ番号０〜ｍのエントリデータが格納されている場合が示されている。
【００２６】
本例においては、制御部４００から連想メモリ２００の各ブロック２０１に対してサーチキー２０４が与えられる。各ブロック２０１において、サーチキー２０４と一致するエントリデータが格納されているか否かの検索処理が実行される。各ブロック２０１において、一致（ｈｉｔ）するエントリデータがあると判断した場合には、一致したエントリデータが属するブロックを示すブロック番号と当該エントリデータのエントリ番号からなるアドレス情報をヒットインデックス２０５として制御部４００に出力する。
【００２７】
関連メモリ３００は、複数のブロック３０１で構成されている。
本例においては、一例として、ブロック番号ｂｋ０〜ｂｋＮのブロックが設けられている場合が示されている。関連メモリ３００は、連想メモリ２００のアドレス情報に従ってアクセス可能に設けられている。一例として、同一のアドレス空間を有しているが、特に同一のアドレス空間に限られず、より小さなアドレス空間としても良い。
【００２８】
各ブロック３０１は、メモリセルアレイを有し、当該メモリセルアレイの行毎に関連データ３０２が格納されている。一例として、各行毎に関連データ番号０〜ｍの関連データが格納されている場合が示されている。各関連データ番号０〜ｍのアドレス情報は、連想メモリ２００の各ブロックのエントリ番号０〜ｍのアドレス情報に対応する。
【００２９】
本例においては、制御部４００から関連メモリ３００にアクセスするアドレス情報が送信される。
【００３０】
関連メモリ３００は、アドレス情報に基づいて関連データ３０７を読み出し、制御部４００に出力する。
【００３１】
ＡＤレジスタ５００は、連想メモリ２００から出力されたアドレス情報であるヒットインデックス２０５を別のアドレス情報に変換するために用いられるレジスタ情報を有している。
【００３２】
制御部４００は、ＡＤレジスタ５００に格納されているレジスタ情報に基づいてアドレス情報であるヒットインデックス２０５を別のアドレス情報に変換することが可能である。
【００３３】
図２は、実施形態１に基づく通信機器１００の検索動作を説明する図である。
図２に示されるように、本例において、ＡＤレジスタ５００には、レジスタ情報としてアドレス変換テーブルが格納されている。
【００３４】
具体的には、アドレス変換テーブルは、ブロック番号と、アドレス変換フラグと、変換アドレス情報とを含む。
【００３５】
具体的には、本例においては、ブロック番号ｂｋ０に対応して、アドレス変換フラグが「１」、アドレス情報としてブロック番号ｂｋＮが関連付けられて登録されている場合が示されている。
【００３６】
また、他のブロック番号ｂｋ１〜ｂｋＮにそれぞれ対応して、アドレス変換フラグが「０」、変換アドレス情報は無しとして関連付けられて登録されている場合が示されている。
【００３７】
ここで、アドレス変換フラグ「０」の場合にはアドレス情報を変換しないことを意味する。また、アドレス変換フラグ「１」の場合には、アドレス情報を変換することを意味する。
【００３８】
変換アドレス情報は、アドレス変換フラグが「１」の場合に、アドレスを変換する際に用いられる情報である。
【００３９】
すなわち、当該アドレス変換テーブルには、ヒットインデックス２０５に含まれるブロック番号が、ブロック番号ｂｋ０を示す場合は、アドレス変換フラグが「１」であることよりアドレスが変換することが示され、具体的には、変換アドレス情報としてブロックｂｋＮを指定することが示されている。
【００４０】
また、ヒットインデックス２０５に含まれるブロック番号が、ブロック番号ｂｋ１〜ｂｋＮを示す場合には、アドレス変換フラグが「０」であることよりアドレスは変換しないことが示されている。
【００４１】
制御部４００は、当該アドレス変換テーブルに基づいてアドレス情報を変換する。
一例として、連想メモリ２００のブロック番号ｂｋ１のブロックのエントリ番号１のエントリデータがサーチキー２０４と一致した場合について説明する。
【００４２】
この場合、連想メモリ２００は、ブロック番号ｂｋ１およびエントリ番号１のデータを含むヒットインデックス２０５（アドレス情報）を制御部４００に出力する。
【００４３】
制御部４００は、連想メモリ２００からのヒットインデックス２０５を受けて、ＡＤレジスタ５００にアクセスし、ヒットインデックス２０５にて示されるブロック番号に対応するレジスタ情報（アドレス変換テーブル）を取得する。
【００４４】
制御部４００は、ヒットインデックス２０５（アドレス情報）で示されたブロック番号ｂｋ１に対応するアドレス変換フラグが「０」を示すことから、そのままアドレス情報を変更せずに、関連メモリ３００に当該アドレス情報を出力する。
【００４５】
関連メモリ３００は、制御部４００からのアドレス情報の入力に基づいて、ブロック番号ｂｋ１の関連データ番号１の関連データを制御部４００に出力する。
【００４６】
制御部４００は、連想メモリ２００から取得したヒットインデックス２０５（アドレス情報）と、関連メモリ３００から取得した関連データ３０７を転送制御部６００に出力する。
【００４７】
転送制御部６００は、制御部４００から出力されたアドレス情報と関連データ３０７とを合成した通信パケットを生成して、外部に送信する。
【００４８】
別の例として、連想メモリ２００のブロック番号ｂｋ０において、エントリ番号０がサーチキー２０４と一致した場合について説明する。
【００４９】
この場合、連想メモリ２００は、ブロック番号ｂｋ０のエントリ番号０に対応するヒットインデックス２０５（アドレス情報）を制御部４００に出力する。
【００５０】
制御部４００は、連想メモリ２００からのヒットインデックス２０５を受けて、ＡＤレジスタ５００にアクセスし、レジスタ情報（アドレス変換テーブル）を取得する。
【００５１】
制御部４００は、ヒットインデックス２５０（アドレス情報）で示されたブロック番号ｂｋ０に対応するアドレス変換フラグが「１」を示すことからアドレスを変換する。具体的には、ヒットインデックス２５０（アドレス情報）に含まれているブロック番号を、変換アドレス情報としてブロック番号ｂｋＮを指定するアドレス情報に変換する。そして、制御部４００は、関連メモリ３００に当該変換されたアドレス情報を出力する。
【００５２】
関連メモリ３００は、制御部４００からの変換されたアドレス情報の入力に基づいて、ブロック番号ｂｋＮの関連データ番号０の関連データを制御部４００に出力する。
【００５３】
制御部４００は、連想メモリ２００から取得したヒットインデックス２０５（アドレス情報）と、関連メモリ３００から取得した関連データ３０７を転送制御部６００に出力する。
【００５４】
転送制御部６００は、制御部４００から出力されたアドレス情報と関連データ３０７とを合成した通信パケットを生成して、外部に送信する。
【００５５】
当該方式により、所定のアドレス情報である場合には、別のアドレス情報に変換して、変換したアドレス情報に基づく関連データ３０７を取得することが可能である。
【００５６】
したがって、ＡＤレジスタ５００に格納されているレジスタ情報を適宜任意の値に変更することにより柔軟性の高い関連メモリ３００へのアクセスが可能となる。
【００５７】
なお、上記では、ブロック番号ｂｋ０に関するヒットインデックス２０５（アドレス情報）に従って、変換アドレス情報としてブロック番号ｂｋＮを指定し、当該ブロック番号ｂｋＮの関連データ番号０が読み出される場合について説明した。一方で、ブロック番号ｂｋＮのブロック全体（ブロックに含まれる全ての関連データ）を指定するようにしても良い。
【００５８】
これにより、エントリデータに対して関連データが１対１の関係ではなく、１対複数の関係に設定することも可能であり、必要に応じて容量の大きな関連データを取得することも可能である。
【００５９】
また、実施形態１においては、連想メモリ２００に含まれるブロック数と、関連メモリに含まれるブロック数が同じであるとして説明したが、それに限定されることはない。それぞれ異なるブロック番号に関する複数のヒットインデックスに対応する変換アドレス情報が、同じブロック番号を指定していてもよい。例えば、ブロック番号Ｂｋ０に関するヒットインデックスに対応する変換アドレス情報と、ブロック番号Ｂｋ１に関するヒットインデックスに対応する変換アドレス情報とが、同じブロック番号ＢｋＮを指定していてもよい。
【００６０】
これにより、関連メモリのブロック数を低減、すなわち、関連メモリのメモリ容量を低減することができ、結果、チップ面積の削減が可能となる。
【００６１】
＜処理フロー＞
図３は、実施形態１に基づく制御部４００の処理フローを説明する図である。
【００６２】
図３に示されるように、制御部４００は、検索指示が有るか否かを判断する（ステップＳ２）。
【００６３】
次に、制御部４００は、検索指示が有ると判断した場合（ステップＳ２においてＹＥＳ）には、サーチキー２０４を抽出する（ステップＳ４）。
【００６４】
次に、制御部４００は、サーチキー２０４に基づいて検索処理を実行する（ステップＳ６）。
【００６５】
次に、制御部４００は、ヒットインデックス２０５が有るか否かを判断する（ステップＳ８）。
【００６６】
ステップＳ８において、制御部４００は、ヒットインデックス２０５が有ると判断した場合（ステップＳ８においてＹＥＳ）には、ＡＤレジスタ５００にアクセスしてレジスタ情報（アドレス変換テーブル）を取得する（ステップＳ１０）。
【００６７】
次に、制御部４００は、ヒットインデックス２０５とレジスタ情報（アドレス変換テーブル）に基づいて関連メモリ３００をアクセスするためのアドレス情報を生成し、生成されたアドレス情報に基づきアクセス処理を実行する（ステップＳ１２）。
【００６８】
具体的には、制御部４００は、図２で説明したように、ヒットインデックス２０５が所定のアドレス情報であるか否かを判断し、所定のアドレス情報である場合には、別のアドレス情報に変換する。制御部４００は、変換したアドレス情報を関連メモリ３００に出力するアクセス処理を実行する。
【００６９】
次に、制御部４００は、関連メモリ３００から関連データ３０７を取得したか否かを判断する（ステップＳ１４）。
【００７０】
次に、制御部４００は、関連メモリ３００から関連データ３０７を取得したと判断した場合（ステップＳ１４においてＹＥＳ）には、転送制御部６００に通信パケット生成を指示する（ステップＳ１６）。
【００７１】
転送制御部６００は、制御部４００からの通信パケット生成の指示に従ってヒットインデックス（アドレス情報）と関連データとを合成した通信パケットを生成して、外部に送信する。
【００７２】
そして、処理を終了する（エンド）。
一方、ステップＳ８において、制御部４００は、ヒットインデックス２０５が無いと判断した場合（ステップＳ８においてＮＯ）には、転送制御部６００にミス出力を指示する（ステップＳ１８）。
【００７３】
転送制御部６００は、制御部４００からのミス出力指示に従って、外部にミスを送信する。
【００７４】
そして、処理を終了する（エンド）。
（実施形態２）
上記の実施形態１では、連想メモリ２００から出力されたヒットインデックス２０５であるアドレス情報をＡＤレジスタ５００に格納されているレジスタ情報に基づいて別のアドレス情報に変換し、当該別のアドレス情報に基づいて関連メモリ３００から関連データ３０７を取得する方式について説明した。
【００７５】
実施形態２では、連想メモリ２００から出力されたヒットインデックス２０５であるアドレス情報を変換せずに、関連データを可変に取得する方式について説明する。
【００７６】
図４は、実施形態２に基づく通信機器１０１の構成を説明する図である。
図４に示されるように、通信機器１０１は、通信機器１００と同様に、スイッチあるいはルータ等の通信装置である。
【００７７】
通信機器１０１は、通信機器１００と比較して、関連メモリ３００を関連メモリ７００に変更した点が異なる。その他の点については図１で説明したのと同様であるのでその詳細な説明については繰り返さない。
【００７８】
関連メモリ７００は、ブロックｂｋ０〜ｂｋＮを含む。
関連メモリ７００のブロックｂｋ０は、サブブロックｂｋ０Ａ，ｂｋ０Ｂを含む。他のブロックについても同様である。
【００７９】
サブブロックｂｋ０Ａ，ｂｋ０Ｂの指定は、後述するがＡＤレジスタ５１０に格納されている選択フラグに基づいて指定される。
【００８０】
実施形態１で説明したのと同様に関連メモリ７００は、連想メモリ２００と同一のアドレス空間を有する。
【００８１】
一例として、連想メモリ２００のブロック番号ｂｋ０において、エントリ番号１がサーチキー２０４と一致した場合を説明する。
【００８２】
これにより、連想メモリ２００は、ブロック番号ｂｋ０のエントリ番号１に対応するヒットインデックス２０５（アドレス情報）を制御部４００に出力する。
【００８３】
制御部４００は、連想メモリ２００からのヒットインデックス２０５を受けて、関連メモリ７００にアクセスして関連データを取得する。
【００８４】
その際、制御部４００は、ＡＤレジスタ５１０に格納されているアクセステーブルに基づいて関連メモリ７００にアクセスするためのアドレス情報を生成し、関連メモリ７００をアクセスする。
【００８５】
図５は、実施形態２に基づくＡＤレジスタ５１０に格納されているアクセステーブルを説明する図である。
【００８６】
図５に示されるように、アクセステーブルとして５つのケースのアクセス情報が示されている。
【００８７】
ケース０のアクセス情報は、関連データサイズが「１」であり、選択フラグが「０」、ヒットインデックス有効／無効フラグが「１」に設定されている。
【００８８】
この場合、関連メモリ７００から読み出される関連データサイズは通常のサイズである。ここで、「通常のサイズ」とは、データサイズとして使用できる最小単位、すなわち、サブブロック一つ分の関連データサイズを示す。
【００８９】
選択フラグは、アクセスするブロックｂｋのサブブロックを選択するフラグである。
本例においては、選択フラグが「０」の場合には、「Ａ」の方のサブブロックが選択され、「１」の場合には「Ｂ」の方のサブブロックが選択される。この場合、選択フラグが「０」でるため「Ａ」の方のサブブロックが選択される。
【００９０】
ヒットインデックス有効／無効フラグが「１」の場合には、転送制御部６００から出力される転送データにヒットインデックス２０５を含めることを意味する。一方、ヒットインデックス有効／無効フラグが「０」の場合には、転送制御部６００から出力される転送データにヒットインデックス２０５は含めないことを意味する。
【００９１】
すなわち、ケース０の場合は、「Ａ」のサブブロックの関連データとヒットインデックスとが出力されることとなる。
【００９２】
ケース１のアクセス情報は、関連データサイズが「１」であり、選択フラグが「１」、ヒットインデックス有効／無効フラグが「１」に設定されている。
【００９３】
この場合、関連メモリ７００から読み出される関連データサイズは通常のサイズである。
【００９４】
選択フラグは、「１」の場合には「Ｂ」の方のサブブロックが選択される。ヒットインデックス有効／無効フラグが「１」の場合には、転送制御部６００から出力される転送データにヒットインデックスを含めることを意味する。一方、ヒットインデックス有効／無効フラグが「０」の場合には、転送制御部６００から出力される転送データにヒットインデックスは含めないことを意味する。
【００９５】
すなわち、ケース１の場合には、「Ｂ」のサブブロックの関連データとヒットインデックスとが出力されることとなる。
【００９６】
ケース２のアクセス情報は、関連データサイズが「２」であり、選択フラグが無し、ヒットインデックス有効／無効フラグが「１」に設定されている。
【００９７】
この場合、関連メモリ７００から読み出される関連データサイズは通常のサイズの２倍、すなわち、サブブロック二つ分の関連データサイズである。
【００９８】
選択フラグは、無しであり、アクセスするブロックｂｋのサブブロックの両方から関連データが読み出される。また、ヒットインデックス有効／無効フラグが「１」の場合であるため転送制御部６００から出力される転送データにヒットインデックスが含まれる。
【００９９】
すなわち、ケース２の場合には、「Ａ」「Ｂ」の両方のサブブロックの関連データとヒットインデックスとが出力されることとなる。
【０１００】
ケース３のアクセス情報は、関連データサイズが「０」であり、選択フラグが無し、ヒットインデックス有効／無効フラグが「１」に設定されている。
【０１０１】
この場合、関連メモリ７００から読み出される関連データサイズは０、すなわち、関連データは読み出されないことを意味する。
【０１０２】
選択フラグは、無しである。
また、ヒットインデックス有効／無効フラグが「１」の場合であるため転送制御部６００から出力される転送データには、ヒットインデックスのみが含まれる。関連データは含まれない。
【０１０３】
すなわち、ケース３の場合には、ヒットインデックスのみが出力されることとなる。
ケース４のアクセス情報は、関連データサイズが「２」であり、選択フラグが無し、ヒットインデックス有効／無効フラグが「０」に設定されている。
【０１０４】
この場合、関連メモリ７００から読み出される関連データサイズは通常のサイズの２倍である。選択フラグは、無しであり、アクセスするブロックｂｋのサブブロックの両方から関連データが読み出される。また、ヒットインデックス有効／無効フラグが「０」の場合であるため転送制御部６００から出力される転送データには、ヒットインデックスは含まれず、関連データのみ含まれる。
【０１０５】
すなわち、ケース４の場合には、関連データのみが出力されることとなる。
ケース１〜４のアクセス情報のいずれかが選択されるかについては、検索指示に含まれるサーチプロファイルにより設定される。
【０１０６】
一例として、連想メモリ２００のブロック番号ｂｋ０において、エントリ番号１がサーチキー６０４と一致した場合が示されている。
【０１０７】
これにより、連想メモリ２００は、ブロック番号ｂｋ０およびエントリ番号１のデータを含むヒットインデックス６０５（アドレス情報）を制御部４００に出力する。
【０１０８】
制御部４００は、連想メモリ２００からヒットインデックス６０５を受ける。
また、制御部４００は、サーチプロファイルに基づいてＡＤレジスタ５１０からアクセス情報を取得する。一例として、ケース０に対応するアクセス情報を取得する場合について説明する。
【０１０９】
この場合、制御部４００は、ブロック番号ｂｋ０に関するヒットインデックス６０５（アドレス情報）を受けている。また、ケース０のアクセス情報は、関連データサイズが「１」であり、選択フラグが「０」である。したがって、制御部４００は、関連メモリ７００のブロック番号ｂｋ０のサブブロックｂｋ０Ａにアクセスするアドレス情報を生成して、出力する。
【０１１０】
関連メモリ７００は、制御部４００からのアドレス情報に基づいて、ブロック番号ｂｋ０のサブブロックｂｋ０Ａの関連データ番号１の関連データを制御部４００に出力する。
【０１１１】
制御部４００は、ヒットインデックス有効／無効フラグが「１」であるため連想メモリ２００から取得したヒットインデックス６０５（アドレス情報）と、関連メモリ７００から取得した関連データ７０７を転送制御部６００に出力する。
【０１１２】
転送制御部６００は、制御部４００から出力されたアドレス情報と関連データ７０７とを合成した通信パケットを生成して、外部に送信する。
【０１１３】
別の例として、制御部４００は、サーチプロファイルに基づいてＡＤレジスタ５１０からアクセス情報を取得する。一例として、ケース１に対応するアクセス情報を取得する場合について説明する。
【０１１４】
この場合、制御部４００は、ブロック番号ｂｋ０に関するヒットインデックス６０５（アドレス情報）を受けている。また、ケース１のアクセス情報は、関連データサイズが「１」であり、選択フラグが「１」である。したがって、制御部４００は、関連メモリ７００のブロック番号ｂｋ０のサブブロックｂｋ０Ｂにアクセスするアドレス情報を生成して、出力する。
【０１１５】
関連メモリ７００は、制御部４００からのアドレス情報に基づいて、ブロック番号ｂｋ０のサブブロックｂｋ０Ｂの関連データ番号１の関連データを制御部４００に出力する。
【０１１６】
制御部４００は、ヒットインデックス有効／無効フラグが「１」であるため連想メモリ２００から取得したヒットインデックス６０５（アドレス情報）と、関連メモリ７００から取得した関連データ７０７を転送制御部６００に出力する。
【０１１７】
転送制御部６００は、制御部４００から出力されたアドレス情報と関連データ７０７とを合成した通信パケットを生成して、外部に送信する。
【０１１８】
また、別の例として、制御部４００は、サーチプロファイルに基づいてＡＤレジスタ５１０からアクセス情報を取得する。一例として、ケース２に対応するアクセス情報を取得する場合について説明する。
【０１１９】
この場合、制御部４００は、ブロック番号ｂｋ０に関するヒットインデックス６０５（アドレス情報）を受けている。また、ケース２のアクセス情報は、関連データサイズが「２」であり、選択フラグが「なし」である。したがって、制御部４００は、関連メモリ７００のブロック番号ｂｋ０のサブブロックｂｋ０Ａ，ｂｋ０Ｂにそれぞれアクセスするアドレス情報を出力する。
【０１２０】
関連メモリ７００は、制御部４００からのアドレス情報の入力に基づいて、ブロック番号ｂｋ０のサブブロックｂｋ０Ａ，ｂｋ０Ｂの関連データ番号１の２つの関連データを制御部４００に出力する。
【０１２１】
制御部４００は、ヒットインデックス有効／無効フラグが「１」であるため連想メモリ２００から取得したヒットインデックス６０５（アドレス情報）と、関連メモリ７００から取得した複数の関連データ７０７を転送制御部６００に出力する。
【０１２２】
転送制御部６００は、制御部４００から出力されたアドレス情報と複数の関連データ７０７とを合成した通信パケットを生成して、外部に送信する。
【０１２３】
また、別の例として、制御部４００は、サーチプロファイルに基づいてＡＤレジスタ５１０からアクセス情報を取得する。一例として、ケース３に対応するアクセス情報を取得する場合について説明する。
【０１２４】
この場合、制御部４００は、ブロック番号ｂｋ０に関するヒットインデックス６０５（アドレス情報）を受けている。また、ケース３のアクセス情報は、関連データサイズは「０」であり、選択フラグが「なし」である。したがって、制御部４００は、関連メモリ７００にアクセスしない。
【０１２５】
制御部４００は、ヒットインデックス有効／無効フラグが「１」であるため連想メモリ２００から取得したヒットインデックス６０５（アドレス情報）を転送制御部６００に出力する。
【０１２６】
転送制御部６００は、制御部４００から出力されたアドレス情報を通信パケットに含めて、外部に送信する。
【０１２７】
さらに、別の例として、制御部４００は、サーチプロファイルに基づいてＡＤレジスタ５１０からアクセス情報を取得する。一例として、ケース４に対応するアクセス情報を取得する場合について説明する。
【０１２８】
この場合、制御部４００は、ブロック番号ｂｋ０に関するヒットインデックス６０５（アドレス情報）を受けている。また、ケース４のアクセス情報は、関連データサイズが「２」であり、選択フラグが「なし」である。したがって、制御部４００は、関連メモリ７００のブロック番号ｂｋ０のサブブロックｂｋ０Ａ，ｂｋ０Ｂにそれぞれアクセスするアドレス情報を出力する。
【０１２９】
関連メモリ７００は、制御部４００からのアドレス情報の入力に基づいて、ブロック番号ｂｋ０のサブブロックｂｋ０Ａ，ｂｋ０Ｂの関連データ番号１の２つの関連データを制御部４００に出力する。
【０１３０】
制御部４００は、ヒットインデックス有効／無効フラグが「０」であるため連想メモリ２００から取得したヒットインデックス６０５（アドレス情報）を転送制御部６００に出力せず、関連メモリ７００から取得した複数の関連データ７０７のみを転送制御部６００に出力する。
【０１３１】
転送制御部６００は、制御部４００から出力された複数の関連データ７０７を合成した通信パケットを生成して、外部に送信する。
【０１３２】
＜処理フロー＞
図６は、実施形態２に基づく制御部４００の処理フローを説明する図である。
【０１３３】
図６に示されるように、制御部４００は、検索指示が有るか否かを判断する（ステップＳ２）。
【０１３４】
次に、制御部４００は、検索指示が有ると判断した場合（ステップＳ２においてＹＥＳ）には、サーチキー２０４と、サーチプロファイルを抽出する（ステップＳ４）。
【０１３５】
次に、制御部４００は、サーチキー２０４に基づいて検索処理を実行する（ステップＳ６）。
【０１３６】
次に、制御部４００は、ヒットインデックスが有ったか否かを判断する（ステップＳ８）。
【０１３７】
ステップＳ８において、制御部４００は、ヒットインデックスが有ったと判断した場合（ステップＳ８においてＹＥＳ）には、サーチプロファイルに基づいてアクセス方式を設定する（ステップＳ１１）。具体的には、制御部４００は、ＡＤレジスタ５１０にアクセスしてサーチプロファイルに基づくケースのアクセス情報を取得する。
【０１３８】
サーチプロファイルがケース０を指定している場合には、関連メモリ７００に対するアクセス方式として、関連データのサイズとして通常のサイズを読み出すアクセス処理を実行する。また、選択フラグが「０」の場合であるため、「Ａ」の方のサブブロックを選択する。
【０１３９】
サーチプロファイルがケース１を指定している場合には、関連メモリ７００に対するアクセス方式として、関連データのサイズとして通常のサイズを読み出すアクセス処理を実行する。また、選択フラグが「１」の場合であるため、「Ｂ」の方のサブブロックを選択する。
【０１４０】
サーチプロファイルがケース２を指定している場合には、関連メモリ７００に対するアクセス方式として、関連データサイズが「２」であり、通常のサイズの２倍を読み出すアクセス処理を実行する。すなわち、「Ａ」および「Ｂ」の両方のサブブロックを選択する。
【０１４１】
サーチプロファイルがケース３を指定している場合には、関連メモリ７００に対するアクセスは実行しない。
【０１４２】
サーチプロファイルがケース４を指定している場合には、関連メモリ７００に対するアクセス方式として、関連データサイズが「２」であり、通常のサイズの２倍を読み出すアクセス処理を実行する。すなわち、「Ａ」および「Ｂ」の両方のサブブロックを選択する。
【０１４３】
次に、制御部４００は、ヒットインデックスと設定したアクセス方式とに基づいて関連メモリ３００に対するアクセス処理を実行する（ステップＳ１２）。
【０１４４】
次に、制御部４００は、関連メモリ３００から関連データを取得したか否かを判断する（ステップＳ１４）。
【０１４５】
次に、制御部４００は、関連メモリ３００から関連データを取得したと判断した場合（ステップＳ１４においてＹＥＳ）には、転送制御部６００に通信パケットの生成を指示する（ステップＳ１６）。
【０１４６】
転送制御部６００は、制御部４００からの通信パケット生成の指示に従ってヒットインデックス（アドレス情報）と関連データとを合成した通信パケットを生成して、外部に送信する。
【０１４７】
この場合、サーチプロファイルがケース０を指定している場合には、ヒットインデックス（アドレス情報）と関連データとを合成した通信パケットを生成して外部に送信する。
【０１４８】
サーチプロファイルがケース１を指定している場合には、ヒットインデックス（アドレス情報）と関連データとを合成した通信パケットを生成して外部に送信する。
【０１４９】
サーチプロファイルがケース２を指定している場合には、ヒットインデックス（アドレス情報）と通常サイズの２倍のサイズ、すなわち二つ分のサブブロックの関連データとを合成した通信パケットを生成して外部に送信する。
【０１５０】
サーチプロファイルがケース３を指定している場合には、ヒットインデックスのみを含む通信パケットを生成して外部に送信する。
【０１５１】
サーチプロファイルがケース４を指定している場合には、２つのサブブロックの関連データのみを含む通信パケットを生成して外部に送信する。
【０１５２】
そして、処理を終了する（エンド）。
一方、ステップＳ８において、制御部４００は、ヒットインデックスが無いと判断した場合（ステップＳ８においてＮＯ）には、転送制御部６００にミス出力を指示する（ステップＳ１８）。
【０１５３】
そして、処理を終了する（エンド）。
当該処理により、サーチプロファイルに含まれる情報に基づいて、アクセス方式を変更し連想メモリ２００から出力されたヒットインデックス２０５であるアドレス情報を変換せずに、関連データを可変に取得することが可能である。
【０１５４】
なお、サーチプロファイルは検索指示毎に与えられるものであっても、検索前の連想メモリのテーブル構築時にのみ与えられるものであってもよい。連想メモリのテーブル構築時にのみサーチプロファイルが与えられる場合には、サーチプロファイルが変更されるまで同じアクセス方式で、ヒットインデックスであるアドレス情報が変換されることになる。
【０１５５】
また、実施形態２において、ＡＤレジスタ５１０に格納されているアクセス方式に関する情報は、サーチプロファイルに基づいて選択されるが、ブロック番号に対応して、関連データサイズ、選択フラグ、ヒットインデックス有効／無効フラグ等の情報が格納されていてもよい。この場合には、サーチプロファイルの情報は不要で、制御部４００は、ヒットインデックスに含まれるブロック番号と、それに対応するＡＤレジスタの情報に基づいてアドレス情報を変換することで、ヒットインデックス毎に所望の出力方式に合わせて関連データを取得することができる。
【０１５６】
（変形例）
図７は、実施形態２の変形例に基づく通信パケットについて説明する図である。
【０１５７】
図７に示されるように、各ケースに従う通信パケットについて、フォーマットが固定されている場合には、固定フォーマット長のデータが無い部分は、無効データ（invalid）がダミーで挿入されていた。
【０１５８】
一方、固定フォーマット長ではなく、フレックスのフォーマット長にすれば通信パケットのデータ量を縮小することが可能である。
【０１５９】
一例として、転送制御部６００は、サーチプロファイルにケース０，１が含まれている場合には、ヒットインデックス（アドレス情報）と関連データとを合成した通信パケットを生成して外部に送信する。
【０１６０】
転送制御部６００は、サーチプロファイルにケース２が含まれている場合には、ヒットインデックス（アドレス情報）と通常サイズの２倍のサイズ、すなわち二つのサブブロックの関連データとを合成した通信パケットを生成して外部に送信する。
【０１６１】
転送制御部６００は、サーチプロファイルにケース３が含まれている場合には、ヒットインデックスのみを含む通信パケットを生成して外部に送信する。
【０１６２】
転送制御部６００は、サーチプロファイルにケース４が含まれている場合には、通常サイズの２倍のサイズ、すなわち二つのサブブロックの関連データのみを含む通信パケットを生成して外部に送信する。
【０１６３】
転送制御部６００は、通信パケットのヘッダー部分にあるデータサイズを編集して通信パケットを送信する。
【０１６４】
図８は、実施形態２の変形例に基づく通信パケットの送信について説明する概念図である。
【０１６５】
図８に示されるように、一例として固定フォーマット長の通信パケットをケース１〜ケース４まで順番に送信する例について説明する。
【０１６６】
この場合、無効データも含まれるため全体の通信パケットの長さが長くなる。
一方、フレックスのフォーマット長の通信パケットの場合には、無効データの領域が設けられていないため通信パケットのデータ量を縮小し、転送レートを改善することが可能である。
【０１６７】
（実施形態３）
図９は、実施形態３に基づく通信機器１１０の構成を説明する図である。
【０１６８】
図９に示されるように、通信機器１１０は、スイッチあるいはルータ等の通信装置である。
【０１６９】
本例においては、通信機器１１０に２つのチップ８００，８１０が設けられている場合が示されている。
【０１７０】
チップ８００は、連想メモリ２００と、関連メモリ３００と、制御部４００と、ＡＤレジスタ５２０と、転送制御部６００とを含み、図１で説明したのと基本的には同様であるのでその詳細な説明については繰り返さない。
【０１７１】
チップ８１０は、チップ８００と一体ではなく、外部に設けられた別のチップであり、関連メモリ８２０が設けられている場合が示されている。
【０１７２】
関連メモリ８２０は、ＤＲＡＭ等で構成する。
関連メモリ８２０は、外部の関連データ（外部関連データとも称する）を格納する。
【０１７３】
図示しないが関連メモリ８２０は、図１で説明したのと同様に、複数のブロックで構成されており、関連メモリ８２０は、連想メモリ２００と同一のアドレス空間を有している。
【０１７４】
関連メモリ８２０は、図１で説明したのと同様に、メモリセルアレイを有し、当該メモリセルアレイの行毎に外部関連データ３０２が格納されている。一例として、各行毎に外部関連データ番号０〜ｍが格納されている場合が示されている。
【０１７５】
本例においては、チップ８１０に対して、チップ８００の制御部４００から関連メモリ８２０にアクセスするアドレス情報が送信される。
【０１７６】
関連メモリ８２０は、アドレス情報に基づいて外部関連データを制御部４００に出力する。
【０１７７】
ＡＤレジスタ５２０は、連想メモリ２００から出力されたアドレス情報であるヒットインデックス２０５を用いて、関連メモリにアクセスするためのレジスタ情報を有している。
【０１７８】
制御部４００は、ＡＤレジスタ５２０に格納されているレジスタ情報に基づいてアドレス情報であるヒットインデックス２０５を用いて、関連メモリにアクセスする。
【０１７９】
具体的には、アクセステーブルは、ブロック番号と、アクセス変更フラグとを含む。
具体的には、本例においては、ブロック番号ｂｋ０に対応して、アクセス変更フラグが「１」が関連付けられて登録されている場合が示されている。
【０１８０】
他のブロック番号ｂｋ１〜ｂｋＮにそれぞれ対応して、アクセス変更フラグが「０」が関連付けられて登録されている場合が示されている。
【０１８１】
ここで、アクセス変更フラグ「１」の場合には外部の関連メモリ８２０にアクセスすることを意味する。また、アクセス変更フラグ「０」の場合には、内部の関連メモリ３００にアクセスすることを意味する。
【０１８２】
当該アクセステーブルは、ブロック番号ｂｋ０に関するアドレス情報をヒットインデックス２０５として取得した場合には、アクセス変更フラグ「１」により関連メモリ８２０にアクセスする。具体的には、制御部４００は、関連メモリ８２０の外部関連データを取得するためにアドレス情報を外部のチップ８１０に出力する。
【０１８３】
関連メモリ８２０は、外部関連データを制御部４００に出力する。
転送制御部６００は、制御部４００から出力されたアドレス情報と外部関連データとを合成した通信パケットを生成して、外部に送信する。
【０１８４】
一方、アクセス変更フラグ「１」の場合には外部の関連メモリ８２０にアクセスすることを意味する。また、アクセス変更フラグ「０」の場合には、内部の関連メモリ３００にアクセスすることを意味する。
【０１８５】
制御部４００は、ブロック番号ｂｋ０に関するアドレス情報をヒットインデックスとして取得した場合には、アクセステーブルに従うアクセス変更フラグ「１」により関連メモリ８２０にアクセスする。具体的には、制御部４００は、関連メモリ８２０の外部関連データを取得するためにアドレス情報を外部のチップ８１０に出力する。
【０１８６】
関連メモリ８２０は、外部関連データを制御部４００に出力する。
転送制御部６００は、制御部４００から出力されたアドレス情報と外部関連データとを合成した通信パケットを生成して、外部に送信する。
【０１８７】
制御部４００は、ブロック番号ｂｋ１に関するアドレス情報をヒットインデックス２０５として取得した場合には、アクセステーブルに従うアクセス変更フラグ「０」により内部の関連メモリ３００にアクセスする。具体的には、制御部４００は、関連メモリ３００の関連データを取得するためにアドレス情報を関連メモリ３００に出力する。
【０１８８】
関連メモリ３００は、関連データを制御部４００に出力する。
転送制御部６００は、制御部４００から出力されたアドレス情報と関連データとを合成した通信パケットを生成して、外部に送信する。
【０１８９】
当該構成により、ＡＤレジスタ５２０に格納されているレジスタ情報に基づいて、内部の関連メモリにアクセスするか、あるいは外部の関連メモリにアクセスするかを切り替えることが可能である。
【０１９０】
一例として、内部の関連メモリには、高速に処理するために必要な命令およびデータが格納された関連データが格納され、外部の関連メモリには、低速での処理が可能な命令およびデータが格納された関連データを格納するようにしても良い。
【０１９１】
これにより、関連データの利用形態に従って柔軟に関連データを格納することが可能である。また、ＡＤレジスタ５２０に格納されているレジスタ情報に基づいてそのアクセス方式を柔軟に変更することが可能である。
【０１９２】
以上、本開示を実施形態に基づき具体的に説明したが、本開示は、実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１９３】
１００，１０１，１１０  通信機器、２００  連想メモリ、３００，７００，８２０  関連メモリ、４００  制御部、５００，５１０，５２０  ＡＤレジスタ、６００  転送制御部。
【図１】
2019008860.tif 000003
【図２】
2019008860.tif 000004
【図３】
2019008860.tif 000005
【図４】
2019008860.tif 000006
【図５】
2019008860.tif 000007
【図６】
2019008860.tif 000008
【図７】
2019008860.tif 000009
【図８】
2019008860.tif 000010
【図９】
2019008860.tif 000011