本発明の実施の形態として、MPEGシステム規格に準拠したディジタル放送において、セクションデータ形式のデータを用いて送られる様々な情報を必要に応じて取捨選択するためのセクションデータ選別回路(データ選別装置)と、これを構成するヘッダ一致検出回路(データ一致検出装置)について説明する。
ディジタル放送では、映像や音声、その他各種の情報はトランスポートストリームにて伝送される。トランスポートストリームでは固定長のトランスポートストリームパケットが順次伝送される。図1はトランスポートストリームパケット、及びトランスポートストリームパケット内に各種データのテーブルを格納するためのセクションデータのフォーマットを示している。
トランスポートストリームパケット100は、パケット識別番号などからなるトランスポートパケットヘッダ110と、パケットで伝送されるデータ本体であるトランスポートパケットペイロード120とからなる。映像や音声の情報は、PESパケットという形式でトランスポートパケットペイロード120部分に格納される。一方、放送や番組に付随する各種情報(番組表や暗号化の鍵情報など)は、セクションという形式でトランスポートパケットペイロード120部分に格納される。図1では、セクション形式で各種情報を格納しているトランスポートストリームパケット100を示している。1つのトランスポートストリームパケット100には複数のセクション#1,#2,...が格納されうる。図1には、さらにセクションのデータ形式を示している。セクションは、テーブル識別子、テーブル長、テーブル識別子拡張、バージョン番号、セクション番号、最終セクション番号というようなデータの種別を表す情報と、データ本体とからなる。テーブル識別子などより、そのセクションのデータが受信すべきものであるかどうかを判断することが可能である。
図2は、ディジタル放送の受信機の構成要素であるトランスポートパケット処理装置21の概略構成を示している。入力されたトランスポートストリームは、まずパケット処理回路22で処理される。トランスポートストリームパケット100は、まずパケット選択回路23にて、トランスポートストリームパケット単位の選別が行われ、次にデータ取り出し回路24でトランスポートパケットペイロード120からデータが取り出される。ここで映像や音声の情報はPESパケットとして取り出され、メモリアクセス回路26にてメモリ27に書き込まれる。この情報はAVデコーダ28にてメモリ27から取り出され、映像や音声が再現され、表示・出力される。一方、番組や放送の各種情報は、トランスポートパケットペイロード120からセクションとして取り出される。セクションは、セクションデータ選別回路25に入力され、ここで必要なものかどうかが選別される。選別されたセクションは、メモリアクセス回路26にてメモリ27に書き込まれる。この後CPU29がメモリ27からセクションを読み出しセクションに格納されている各種情報を取り出し受信機の動作の制御などに使用する。
セクションで伝送される各種情報は受信機にとって重要な情報であり、必ず受信できるように同じ情報が繰り返し放送される。しかし、一度受信してしまえば同じ情報を何度も受け取る必要はない。このようにセクションは受信機の状態でその要否が決まり、不要な情報を捨て去ることができればCPUの処理量も減少することになり、受信機の処理能力向上に役立つことになる。
(実施の形態1)
本実施の形態1によるセクションデータ選別回路において、セクションのテーブル識別子、テーブル識別子拡張、バージョン番号、セクション番号の4つのフィールドでセクションデータの選別をする場合について説明する。ここでは、図3に示すセクションを選別することを考える。
図4には、セクションデータ選別回路25(データ選別装置)の構成図を示す。入力されたセクションデータは、データ遅延回路32およびヘッダ一致検出回路31、動作制御回路34に入力される。ヘッダ一致検出回路31では、入力されたセクションのヘッダと図3に示す一致検出候補データとの条件一致を調べ、図3の2種類の一致検出条件のうち少なくとも1つと一致する場合には、「一致」を示す一致判断信号を出力制御回路33に出力する。データ遅延回路32は、セクションヘッダが条件に一致するか否かがヘッダ一致検出回路31により判断されるまで、入力されたセクションデータを遅延させる回路である。データ遅延回路32から出力されたセクションデータは、出力制御回路33に入力される。出力制御回路33は、データ遅延回路32から与えられるセクションデータのうちヘッダ一致検出回路31からの一致判断信号が「一致」を示しているセクションデータだけを出力する。このようにセクションデータ選別回路25は、複数の一致検出候補データ(一致検出条件)のうち少なくとも1つに一致するセクションデータを選別し、出力することができる。動作制御回路34は、順次入力されるセクションデータに応じて、セクションデータ選別回路25の各部の動作タイミングを上記のように制御する回路である。
上述したヘッダ一致検出回路(データ一致検出装置)31の構成を図5に示す。ヘッダ一致検出回路31は、セクションヘッダ切り出し回路41、加算回路42、パターンメモリ43、論理積回路44、一致検出状態記憶回路45、一致判断記憶回路46を備えている。
セクションヘッダ切り出し回路41は、入力されたセクションからセクションヘッダを構成する各フィールドデータを切り出し、順次出力する。セクションヘッダ切り出し回路41は、切り出したフィールドデータを出力すると同時に、このフィールドデータのセクションヘッダ内での位置を示すフィールド位置信号も出力する。
加算回路42は、セクションヘッダ切り出し回路41から出力されたフィールドデータとフィールド位置信号とを加算し、加算結果をパターンメモリ43へ出力する。
パターンメモリ43には、セクションヘッダの各フィールドがとりうる値の各々に対応づけられたアドレスに、当該とりうる値が一致検出条件(図3)に一致すること(「一致」)を示す参照データまたは当該とりうる値が一致検出条件(図3)に一致しないこと(「不一致」)を示す参照データが一致検出条件(図3)に基づいてあらかじめCPU29により記憶されている。なお、パターンメモリ43への参照データの格納例については後に説明する。パターンメモリ43の各アドレスに記憶される複数ビット(この実施の形態では32ビット)の参照データの各ビットには、それぞれ独立の一致検出条件に基づいて値が設定されている。加算回路42から入力されたフィールドデータとフィールド位置信号の加算結果をアドレスとしてパターンメモリ43を読み出すと、このフィールドデータが一致検出条件(図3)に一致するか否かを示す参照データが出力される。
一致検出状態記憶回路45は32ビットの記憶回路であり、各ビットに一致検出処理中の状態を記憶している。一致検出状態記憶回路45は、セクションの開始ごとに全ビットの記憶内容を「一致」を表す「1」に初期化し、その後、各フィールドデータの比較が実行されるたびに論理積回路44からの出力を記憶し、記憶内容を出力する。
論理積回路44は、パターンメモリ43からの出力と一致検出状態記憶回路45からの出力信号がともに「一致」を示しているビットに関しては「一致」を出力し、それ以外のビットは「不一致」を出力し、これを一致検出状態記憶回路45に記憶する。
あるセクションのセクションヘッダの全フィールドに関してパターンメモリ43の参照が終わると、一致判断記憶回路46は一致検出状態記憶回路45の出力の少なくとも1ビットが「一致」を示している場合は「一致」を、そうでない場合は「不一致」を記憶しこれを出力する。このようにしてセクションヘッダと一致検出条件との一致判断結果が一致判断記憶回路46により記憶され出力される。
さらに具体的に機能・動作を説明する。
セクションヘッダ切り出し回路41は、セクションヘッダを構成する各フィールド(テーブル識別子,テーブル識別子拡張,バージョン番号,カレントネクスト指示,セクション番号、最終セクション番号)を切り出し出力する。ただし本実施の形態では、テーブル識別子拡張は上位8ビットと下位8ビットに分けて出力するものとする。図6には、各フィールドが出力される際のフィールド位置信号を示す。
図7に、パターンメモリ43のアドレスマップを示す。パターンメモリ43は1314ワードのメモリであり、図7に示すように、000〜0FFh番地はテーブル識別子のとりうる値00〜FFhに対応し、100〜1FFh番地はテーブル識別子拡張の上位8ビットのとりうる値00〜FFhに対応し、200〜2FFh番地はテーブル識別子拡張の下位8ビットのとりうる値00〜FFhに対応し、300〜31Fh番地はバージョン番号のとりうる値00〜1Fhに対応し、320〜321h番地はカレントネクスト指示のとりうる値0〜1hに対応し、322〜421h番地はセクション番号のとりうる値00〜FFhに対応し、422〜521h番地は最終セクション番号のとりうる値00〜FFhに対応している。各番地には32ビットの参照データを記憶でき、参照データの各ビットはそれぞれ独立の一致検出条件に対応する。すなわち本実施の形態では32種の一致検出条件との一致検出が可能である。本実施の形態では図3に示すように2種の一致検出条件(第1の一致検出条件、第2の一致検出条件)が設定されている場合について説明する。
図3に示した第1および第2の一致検出条件に基づいて参照データがパターンメモリ43に以下のように格納される。
まずパターンメモリ43のアドレス000h〜521hの参照データは、「不一致」を表す0にすべて初期化されているとする。第1の一致検出条件はパターンメモリ43の32ビットの参照データのビット位置0に対応させられている。
テーブル識別子に関しては01hとの一致を検出する必要があるため、図8に示すように、01hとテーブル識別子に対応するフィールド位置信号000hとを加算して得られる001h番地のビット位置0に、「一致」を示す「1」を記憶させておく。
テーブル識別子拡張の上位8ビットに関しては23hとの一致を検出する必要があるため、図8に示すように、23hと100h(テーブル識別子拡張上位8ビットを表すフィールド位置信号値)とを加算して得られる123h番地のビット位置0に「1」を記憶させておく。
同様にテーブル識別子拡張下位8ビットに関しては、図8に示すように、200h+45h=245h番地のビット位置0に「1」を記憶させておく。
次にバージョン番号に関しては、06hとの不一致を検出する必要があるので、図8に示すように、300h(バージョン番号に対応するフィールド位置信号値)+06h(=306h)のビット位置0は「0」のままとし、バージョン番号のとりうる値のうちの06h以外の値に対応するアドレス300h〜305h,307h〜31Fh番地のビット位置0に「1」を記憶させておく。06hとの不一致を検出することは06h以外のデータとの一致を検出することと等価だからである。
セクション番号に関しては、図8に示すように、322h+07h=329h番地のビット位置0に「1」を記憶させる。
今回の例(第1の一致検出条件)では比較対象にならないカレントネクスト指示、最終セクション番号に関しては、図8に示すように、パターンメモリ43の320〜321h番地、422〜521h番地のビット位置0を「1」に設定することで、どのようなフィールドデータが入力されても「一致」との結果を出力できる。
次に、第2の一致検出条件はパターンメモリ43の参照データのビット位置1に対応させるとする。
テーブル識別子に関しては01hとの一致を検出する必要があるため、図9に示すように、01h+000h=001h番地のビット位置1を「1」にする。
テーブル識別子拡張の上位8ビットに関しては8Xh(Xは任意の値)との一致を検出する必要があるため、図9に示すように、8Xh+100h=18Xh番地(Xは任意の値)すなわち180h〜18Fh番地のビット位置1に「1」を設定する。
同様にテーブル識別子拡張下位8ビットに関しては、図9に示すように、200h+X5h=2X5h番地(Xは任意の値)すなわち205h,215h,225h,・・・,2F5hのビット位置1に「1」を記憶させておく。
バージョン番号に関しては、16hとの一致を検出する必要があるので、図9に示すように、300h+16h=316h番地のビット位置1に「1」を設定する。
セクション番号に関しては、17h以上の値と一致する必要があるため、図9に示すように、322h〜421h番地のうち、322h+17h=339h番地以上のビット位置1に「1」を記憶させる。
今回の例(第2の一致検出条件)では比較対象にならないカレントネクスト指示、最終セクション番号に関しては、図9に示すように、パターンメモリ43の320〜321h番地、422〜521h番地のビット位置0を「1」に設定することで、どのようなフィールドデータが入力されても「一致」との結果を出力できる。
以上のようにして、図3に示した第1および第2の一致検出条件に基づいて参照データがパターンメモリ43に格納される。
ここで図10に示すヘッダを持つセクションが入力されたとする。このセクションは、図3に示す第1の一致検出条件に一致するセクションである。
セクションヘッダ切り出し回路41で入力セクションからまず1つ目のフィールドであるテーブル識別子=01hが切り出される。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として000hが出力される。これら2つの出力が加算回路42で加算され、001hがパターンメモリ43へアドレスとして入力される。パターンメモリ43からは、001h番地に記録されている32ビットの参照データ「00000003h」(ビット位置0およびビット位置1の値のみ「1」(「1」は「一致」を表す))が読み出され、論理積回路44へ入力される。一方、一致検出状態記憶回路45には、セクション開始直後であるので全てのビットが「1」(「1」は「一致」を表す)に初期化、すなわちFFFFFFFFhが記憶されており、この値が論理積回路44に入力されている。論理積回路44では上記の2つの入力データをビット毎に論理積演算を行い、演算結果00000003hを出力する。演算結果00000003hは一致検出状態記憶回路45に記憶されるとともに一致検出状態記憶回路45から出力される。一致検出状態記憶回路45に記憶された00000003hは、入力セクションデータのうち1つ目のフィールドであるテーブル識別子はパターンメモリ43のビット位置0とビット位置1に設定された2つの一致検出条件(第1および第2の一致検出条件)と一致していることを表している。
つぎに、セクションヘッダ切り出し回路41から2つ目のフィールドであるテーブル識別子拡張の上位8ビット=23hが切り出される。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として100hが出力され、加算結果123hがパターンメモリ43へアドレスとして入力される。パターンメモリ43からは、123h番地に記録されている32ビットの参照データ「00000001h」(ビット位置0のみ「1」)が読み出され、論理積回路44へ入力される。論理積回路44は、パターンメモリ43からの出力00000001hと一致検出状態記憶回路45の出力00000003hとの論理積演算を実行し、その演算結果00000001hを出力し、一致検出状態記憶回路45はこの値を記憶する。この値は、入力セクションデータのうち2つ目のフィールド(テーブル識別子拡張上位8ビット)までの部分は、パターンメモリ43のビット位置0に設定された第1の一致検出条件とだけ一致していることを表している。
つぎに、セクションヘッダ切り出し回路41から3つ目のフィールドであるテーブル識別子拡張の下位8ビット=45hが切り出される。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として200hが出力され、加算結果245hがパターンメモリ43へアドレスとして入力される。パターンメモリ43からは、245h番地に記録されている32ビットの参照データ「00000003h」(ビット位置0、ビット位置1が「1」)が読み出され、論理積回路44へ入力される。パターンメモリ43の2X5h番地(Xは任意の値)のビット位置1には、X5h(Xは任意の値)との一致判断結果が「一致」となるよう「1」が設定されている。すなわち245h番地も「1」が記憶されている。論理積回路44は、パターンメモリ43からの出力00000003hと一致検出状態記憶回路45の出力00000001hとの論理積演算を実行し、その演算結果00000001hを出力し、一致検出状態記憶回路45はこの値を記憶する。この値は、入力セクションデータのうち3つ目のフィールド(テーブル識別子拡張下位8ビット)までの部分は、パターンメモリ43のビット位置0に設定された第1の一致検出条件とだけ一致していることを表している。パターンメモリ43の出力は00000003hであり、ビット位置0、ビット位置1の2つの条件(第1および第2の一致検出条件)との一致を表していたが、一致検出状態記憶回路45には、2つ目のフィールドまでの一致検出状態としてすでにビット位置0の条件(第1の一致検出条件)以外では一致していないことが記憶されていたために、3つ目のフィールドでは一致したビット位置1の条件(第2の一致検出条件)も、一致検出状態記憶回路45には「不一致」と記憶される。
つぎに、セクションヘッダ切り出し回路41から4つ目のフィールドであるバージョン番号1Fhが切り出される。バージョン番号は5ビットの値である。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として300hが出力され、加算結果31Fhがパターンメモリ43へアドレスとして入力される。パターンメモリ43の300hから31Fh番地(306h番地以外)のビット位置0には、06hとの不一致を検出、言い換えれば06h以外の全ての値との一致を検出できるように、「1」が設定されている。このため、31Fh番地からは00000001h(ビット位置0が「1」)が読み出され、論理積回路44へ入力される。論理積回路44は、パターンメモリ43からの出力00000001hと一致検出状態記憶回路45の出力00000001hとの論理積演算を実行し、その演算結果00000001hを出力し、一致検出状態記憶回路45はこの値を記憶する。この値は、入力セクションデータのうち4つ目のフィールド(バージョン番号)までの部分は、パターンメモリ43のビット位置0に設定された第1の一致検出条件とだけ一致していることを表している。
つぎに、セクションヘッダ切り出し回路41から5つ目のフィールドであるカレントネクスト指示が切り出される。カレントネクスト指示は1ビットの数値である。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として320hが出力される。パターンメモリ43の320h、321h番地のビット位置0には「1」が記憶されており、このため、入力されたカレントネクスト指示の値に関わらず、00000001hが出力され、論理積回路44へ入力される。論理積回路44は、パターンメモリ43からの出力00000001hと一致検出状態記憶回路45の出力00000001hとの論理積演算を実行し、その演算結果00000001hを出力し、一致検出状態記憶回路45はこの値を記憶する。この値は、入力セクションデータのうち5つ目のフィールド(カレントネクスト指示)までの部分は、パターンメモリ43のビット位置0に設定された第1の一致検出条件とだけ一致していることを表している。
つぎに、セクションヘッダ切り出し回路41から6つ目のフィールドであるセクション番号=07hが切り出される。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として322hが出力される。これらの加算結果329hがアドレスとしてパターンメモリ43に入力される。329h番地のビット位置0には「1」が記憶されているため、00000001hがパターンメモリ43から出力され、論理積回路44へ入力される。論理積回路44は、パターンメモリ43からの出力00000001hと一致検出状態記憶回路45の出力00000001hとの論理積演算を実行し、その演算結果00000001hを出力し、一致検出状態記憶回路45はこの値を記憶する。この値は、入力セクションデータのうち6つ目のフィールド(セクション番号)までの部分は、パターンメモリ43のビット位置0に設定された第1の一致検出条件とだけ一致していることを表している。
つぎに、セクションヘッダ切り出し回路41から7つ目のフィールドである最終セクション番号=80hが切り出される。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として422hが出力される。パターンメモリ43の422h〜521h番地のビット位置0には「1」が記憶されており、このため、入力された最終セクション番号の値に関わらず、00000001hが出力され、論理積回路44へ入力される。論理積回路44は、パターンメモリ43からの出力00000001hと一致検出状態記憶回路45の出力00000001hとの論理積演算を実行し、その演算結果00000001hを出力し、一致検出状態記憶回路45はこの値を記憶する。この値は、入力セクションデータのうち7つ目のフィールド(最終セクション番号)までの部分すなわち入力セクションデータの一致検出対象の全フィールドの一致検出が完了した時点で、入力セクションデータはパターンメモリ43のビット位置0に設定された第1の一致検出条件と一致していることを表している。
入力セクションデータと一致検出条件との一致検出が完了したため、一致検出記憶回路45に記憶されている00000001hが一致判断記憶回路46に入力される。一致判断記憶回路46では入力が0でないため、入力セクションデータが第1の一致検出条件と一致したと判断し、一致判断結果として「一致」を出力する。
このように、入力されたセクションは一致検出条件に一致したものと判断され、一致判断記憶回路46から「一致」が出力され、ヘッダ一致検出回路31から「一致」が出力される。
一方、入力セクションデータの各フィールドが一致検出条件と一致しない場合、パターンメモリ43の出力は「不一致」を示す「0」が出力され、論理積回路44の出力が「0」となり、これが一致検出状態記憶回路45に記憶されるため、これ以降の条件が一致しても論理積回路44の出力が「0」となり、一致検出条件と一致しないことが判断できる。このように、一致検出途中のフィールドで「不一致」が検出されると、これ以降の一致検出状態記憶回路45の状態は「不一致」となり、一致判断記憶回路46には「不一致」が記憶され出力される。
次に図11に示すヘッダを持つセクションが入力されたとする。
上述の図10の例と同様に処理されることにより、図11で示す入力セクションヘッダをもつ入力セクションデータは、テーブル識別子、テーブル識別子拡張、バージョン番号、カレントネクスト指示、最終セクション番号に関して、パターンメモリ43のビット位置1に設定された第2の一致検出条件(図3参照)と一致する。ここでは、図11のセクション番号に関して詳しく説明する。
セクションヘッダ切り出し回路41からセクション番号20hが切り出され、加算回路42に入力される。同時にセクションヘッダ切り出し回路41からはフィールド位置信号として322hが出力され、加算結果342hがパターンメモリ43へアドレスとして入力される。パターンメモリ43のアドレス322h〜421h番地のうち339h番地以上のアドレスのビット位置1には、入力データ17h以上との一致を検出できるように「1」が記憶されている。このため、342h番地からは00000002h(ビット位置1が「1」)が読み出され、論理積回路44へ入力される。一方、入力セクションヘッダのセクション番号以前の各フィールドはビット位置1の条件(第2の一致検出条件)と一致しているため、一致検出状態記憶回路45は00000002hを記憶、出力している。論理積回路44は、パターンメモリ43からの出力00000002hと一致検出状態記憶回路45の出力00000002hとの論理積演算を実行し、その演算結果00000002hを出力し、一致検出状態記憶回路45はこの値を記憶する。
次に入力される最終セクション番号に関しても、一致していることが検出される。
このように、入力されたセクションは第2の一致検出条件に一致したものと判断され、一致判断記憶回路46から一致判断結果として「一致」が出力され、ヘッダ一致検出回路31から「一致」が出力される。
ヘッダ一致検出回路31から「一致」が検出されると、セクションデータ選別回路25の出力制御回路33は、入力されデータ遅延回路32で遅延された入力セクションデータを出力する。
以上のように、実施の形態1のセクションデータ選別回路25によれば、セクションヘッダとの一致検出条件を32種まで設定でき、そのうちのある条件に一致するセクションヘッダを持つセクションを選別出力することができる。
セクションヘッダを構成するそれぞれのフィールドに対して1回のパターンメモリ43への読み出しだけで一致検出条件との比較を完了させることができるため、ヘッダ一致検出回路31に必要とされるメモリのアクセスバンド幅を小さく抑えることが可能となる。
例えば、12.5Mバイト/秒で入力されるセクションの選別を32種の条件に対して実行する場合にも、12.5M回×32ビット=50Mバイト/秒のメモリアクセスバンド幅が要求されるだけであり、従来技術を用いた場合に必要となる800Mバイト/秒と比較して大幅に要求性能を抑えることが可能となる。
また、全てのデータ値について一致検出条件との一致/不一致を示す参照データをあらかじめパターンメモリ43に格納するため、条件データとの一致の検出だけでなく、不一致の検出、大小比較、フィールドデータの一部分の比較抑止などを実現でき、非常に柔軟な検出条件を設定することが可能となる。
なお、実施の形態1では、パターンメモリ43に32種の一致検出条件を設定できるものとしたがこれに限るものでなく、パターンメモリ43、論理積回路44、一致検出状態記憶回路45、一致判断記憶回路46で扱うビット数を一致検出条件数に応じて変更することにより、任意の条件数を扱うことができる。
また、実施の形態1のヘッダ一致検出回路31は、セクションヘッダの全フィールド、すなわちセクションデータの先頭の8バイト目までのフィールドについて、一致検出するものとして説明したが、一致検出対象のフィールドはこれに限られるものでなく、任意のサイズのデータについて一致検出することができる。
また、実施の形態1の一致判断記憶回路46からは、一致したか否かの結果だけを一致判断結果として出力するものとしたが、これに加えて、一致を検出した条件を示している一致検出状態記憶回路45からの入力そのものも記憶し、この情報を出力することもできる。これによりセクションデータ選別回路25では、一致検出条件との一致を判断しセクションデータの出力可否を判断するだけでなく、一致を検出した条件を示す情報も出力することが可能となる。
さらに、実施の形態1では、パターンメモリ43をヘッダ一致検出回路31に内蔵されるメモリとして説明したが、これに限定されるものでなく、CPU29の主記憶メモリと共用するなど、ヘッダ一致検出回路31の外部に置くこともできる。上述のように、12.5Mバイト/秒で入力されるセクションの選別を32種の条件に対して実行する場合に50Mバイト/秒のメモリアクセスバンド幅を使用するに留まる。CPU29の主記憶メモリは数百Mバイト/秒のアクセスバンド幅を持つことが一般的であり、このアクセスバンド幅の内50Mバイト/秒をヘッダ一致検出回路が使用することは現実的な実現形態である。パターンメモリ43の実現方法として外付けの大容量メモリを利用することにより、一致検出対象のフィールド数や一致検出条件数を増加させる場合に必要となるパターンメモリ43の容量増加に容易に対応することができる。
さらには、実施の形態1ではセクションヘッダ切り出しやフィールドデータとフィールド位置信号とを加算してパターンメモリ43へのアドレスを作ることを回路として実現する方法を説明したが、これに限られるものでなく、セクションデータからのセクションヘッダの切り出しやフィールド位置のカウント、フィールド位置信号として表されるフィールド位置情報とフィールドデータの加算を、処理の全てまたは一部をソフトウェアで実現することも可能である。フィールドデータの切り出しは、実現の形態1では12.5Mバイト/秒のデータの処理であり、ソフトウェアでも実現できる処理量である。
また、実施の形態1では、論理積回路44、一致検出状態記憶回路45、一致判断記憶回路46を回路として実現する例を示したが、これに限られるものでなく、これらをソフトウェア処理で実現することもできる。
上述のようにパターンメモリ43をCPU29の主記憶メモリとして実現し、その他のヘッダ一致検出回路31の処理をソフトウェアで実現することもできる。すなわち、実施の形態1で説明したヘッダ一致検出回路31の一部または全てをソフトウェアで実現することも可能である。
(実施の形態2)
図12に、本発明の実施の形態2におけるヘッダ一致検出回路の構成図を示す。ヘッダ一致検出回路31は、セクションヘッダ切り出し回路61、加算回路42、パターンメモリ63、演算回路64、一致検出状態記憶回路65、一致判断記憶回路46、演算順序記憶回路67を備えている。
セクションヘッダ切り出し回路61は、入力されたセクションからセクションヘッダを構成するデータを先頭から4ビット毎の部分データとして切り出し、順次出力する。セクションヘッダ切り出し回路61は、部分データを出力すると同時にこの部分データのセクションヘッダ内での位置を示す部分データ位置信号も出力する。
加算回路42は、セクションヘッダ切り出し回路61から出力された部分データと部分データ位置信号を加算し、加算結果をパターンメモリ63へ出力する。
パターンメモリ63には、セクションヘッダの各部分データがとりうる値の各々に対応づけられたアドレスに、当該とりうる値が一致検出条件に一致すること(「一致」)を示す参照データまたは当該とりうる値が一致検出条件に一致しないこと(「不一致」)を示す参照データが実施の形態1と同様にあらかじめCPU29により記憶されている。加算回路42から入力された部分データと部分データ位置信号との加算結果をアドレスとしてパターンメモリ63を読み出すと、この部分データが一致検出条件に一致するか否かを示す参照データが出力される。
一致検出状態記憶回路65は、32ビットの情報を複数ワード記憶できる記憶回路であり、各ワードの各ビットに一致検出処理中の状態を記憶している。セクションの開始ごとに一致検出状態記憶回路65は、何も記憶されていない状態に初期化される。その後、各フィールドデータの比較が実行される度に演算回路64の演算結果を記憶する。
演算回路64は、パターンメモリ63からの参照データを入力するとともに、一致検出状態記憶回路65の記憶内容を読み出し、これらのデータに対して演算順序記憶回路67からの指示に従い演算を行い、結果を一致検出状態記憶回路65に出力する。
演算順序記憶回路67には、セクションヘッダ切り出し回路61で切り出された部分データに対応して、演算回路64で演算すべき演算種類(プログラム)が記憶されている。各部分データに対して1つ以上の演算種類と演算順序を指示することができる。
あるセクションのセクションヘッダの全フィールドに関してパターンメモリ63の参照が終わると、一致判断記憶回路46は一致検出状態記憶回路65の記憶データを読み出し、少なくとも1ビットが「一致」を示している場合は「一致」を、そうでない場合は「不一致」を記憶し出力する。
このようにして一致判断記憶回路46からセクションヘッダと一致検出条件との一致判断結果が記憶され出力される。
さらに具体的に機能・動作を説明する。
セクションヘッダ切り出し回路61は、セクションヘッダを構成するデータ列の先頭から4ビット毎を部分データとして切り出す。例えば、セクションの先頭からの4ビット部分データ2つはテーブル識別子に対応する。図13には、各部分データが出力される際の部分データ位置信号を示す。
図14に、パターンメモリ63のアドレスマップを示す。パターンメモリ63は448ワードのメモリであり、図14に示すように、000〜00Fh番地はセクション先頭0〜3ビット目の部分データのとりうる値0〜Fhに対応し、010〜01F番地はセクション先頭4〜7ビット目の部分データのとりうる値0〜Fhに対応している。以下同様に、セクションのテーブル長のフィールドを除く各部分データのとりうる値が1BF番地まで対応している。各番地には32ビットの参照データを記憶でき、参照データの各ビットはそれぞれ独立の一致検出条件に対応する。すなわち実施の形態2では32種の一致検出条件との一致検出が可能である。
実施の形態2では、下記の条件に一致するセクションを選別する場合について考える。
・テーブル識別子が27hと一致
・バージョン番号が15hと不一致
・セクション番号がA5h以上
このためには、図15に示すように2種の一致検出条件を設定する。
バージョン番号は5ビットのフィールドで、40〜43ビット目の部分データの下位2ビットと44〜47ビット目の部分データの上位3ビットに対応する。このため、バージョン番号=15hとの不一致は、「(40〜43ビット目がXX10b(bは2進数を、Xは任意の値を表す)と一致しない)または(44〜47ビット目が101Xbと一致しない)」と表される。さらに、「セクション番号がA5h以上」という条件を、「セクション番号がB0h以上、または、A5h〜AFh」という2つの条件に分割している。
図15に示した第1および第2の一致検出条件に基づいて参照データがパターンメモリ63に以下のように格納される。
まずパターンメモリ63のアドレス000h〜1BFhの参照データは、「不一致」を表す0にすべて初期化されているとする。第1の一致検出条件はパターンメモリ63の32ビットの参照データのビット位置0に対応させられており、第2の一致検出条件はパターンメモリ63の32ビットの参照データのビット位置1に対応させられているものとする。
部分データ0〜3ビット目に関しては第1、第2の一致検出条件とも2hとの一致を検出する必要があるため、2hと部分データ0〜3ビット目に対応する部分データ位置信号000hとを加算して得られる002h番地のビット位置0とビット位置1に、「一致」を示す「1」を記憶させておく。
部分データ4〜7ビット目に関しては7hとの一致を検出する必要があるため、7hと部分データ4〜7ビット目に対応する部分データ位置信号010hとを加算して得られる017h番地のビット位置0とビット位置1に、「一致」を示す「1」を記憶させておく。
部分データ40〜43ビット目に関しては、第1、第2の一致検出条件とも、XX10bとの不一致を検出するため、この値と部分データ40〜43ビット目に対応する部分データ位置信号060hとを加算して得られる00000110XX10b番地のビット位置0とビット位置1に、「一致」を示す「1」を記憶させる。
同様に、部分データ44〜47ビット目に関しては、部分データ位置信号が070hなので、00000111101Xb番地のビット位置0およびビット位置1に、「一致」を示す「1」を記憶させる。
部分データ48〜51ビット目に関しては、第1の一致検出条件では、Bh以上を検出する必要がある。Bh以上との一致とは、Bh〜Fhの全てのデータと一致することである。そこで、これらの値と48〜51ビット目に対応する部分データ位置信号の値080hを加算して得られる08Bh〜08Fh番地のビット位置0に、「一致」を示す「1」を記憶させる。第2の一致検出条件に関しては、Ahとの一致を検出するために、080h+Ah=08Ah番地のビット位置1に「1」を記憶させる。
部分データ52〜55ビット目に関しては、第1の一致検出条件では任意の値で一致となればよいため、(部分データ位置信号090h)+(任意の4ビットの数値)=09Xh番地のビット位置0に「1」を記憶させる。第2の一致検出条件については、5h以上、すなわち、5h〜Fhとの一致を検出するため、(部分データ位置信号090h)+(5h〜Fh)=095h〜09Fhのビット位置1に「1」を記憶させておく。
一方、演算順序記憶回路67には、図16に示す演算種類と演算順序を、各部分データに対して設定する。
ここで図17に示すヘッダを持つセクションが入力されたとする。このセクションは、図15に示す第1の一致検出条件に一致するセクションである。
セクションヘッダ切り出し回路61で入力セクションから0〜3ビット目の部分データ=2hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として000hが出力される。これら2つの出力が加算回路42で加算され、002hがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは002h番地に記録されている00000003h(ビット位置0およびビット位置1の値のみ一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号000hが入力されているため、演算回路64に対して「パターンメモリ63の出力を一致検出状態記憶回路65の記憶位置0に書き込む」という演算指示が入力されている。演算回路64はパターンメモリ63からの出力である00000003hを一致検出状態記憶回路65の記憶位置0に書き込む。
次に、セクションヘッダ切り出し回路61で入力セクションから4〜7ビット目の部分データ=7hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として010hが出力される。これら2つの出力が加算回路42で加算され、017hがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは017h番地に記録されている00000003h(ビット位置0およびビット位置1の値のみ一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号010hが入力されているため、演算回路64に対して「パターンメモリ63の出力と、一致検出状態記憶回路65の記憶位置0の内容をビット毎に論理積演算を行い、一致検出状態記憶回路65の記憶位置0に書き込む」という演算指示が入力されている。演算回路64はパターンメモリ63からの出力である00000003hと、一致検出状態記憶回路65の記憶位置0に記憶されている00000003hのビット毎の論理積演算を行い、演算結果00000003hを一致検出状態記憶回路65の記憶位置0に書き込む。
このように、セクション先頭0から7ビット目であるテーブル識別子が入力された時点で、一致検出状態記憶回路65には、第1と第2の一致検出条件との一致を示す00000003hが記憶されている。
次に、セクションヘッダ切り出し回路61で入力セクションから24〜27ビット目の部分データ=2hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として020hが出力される。これら2つの出力が加算回路42で加算され、022hがパターンメモリ63へアドレスとして入力される。
一方、演算順序記憶回路67には部分データ位置信号020hが入力されているため、演算回路64に対して「演算なし」という演算指示が入力されている。このため、パターンメモリ63からの出力データに関わらず、一致検出状態記憶回路65の記憶データは変化せず、一致検出状態記憶回路65には、第1および第2の一致検出条件との一致を示す00000003hが記憶されている。これはテーブル識別子拡張の先頭4ビットである部分データ位置24〜27ビット目の部分データに対しては一致検出条件が設定されていない、すなわちどのような入力データに対しても「一致」と判断するためである。
入力セクションの28〜31ビット目、32〜35ビット目、36〜39ビット目の部分データに対しても、演算回路64では演算が行われない。
次に、セクションヘッダ切り出し回路61で入力セクションから40〜43ビット目の部分データ=3hが切り出される。バージョン番号のうち上位2ビット(11b)が40〜43ビット目の下位2ビットに対応するためである。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として060hが出力される。これら2つの出力が加算回路42で加算され、063h=000001100011bがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは063h番地に記録されている00000000hが読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号060hが入力されているため、演算回路64に対して「パターンメモリ63の出力をビット毎に論理反転演算を行い、一致検出状態記憶回路65の記憶位置1に書き込む」という演算指示が入力されている。演算回路64はパターンメモリ63からの出力である00000000hをビット毎に論理反転演算を行い、その演算結果であるFFFFFFFFhを一致検出状態記憶回路65の記憶位置1に書き込む。
次に、セクションヘッダ切り出し回路61で入力セクションから44〜47ビット目の部分データ=111Xbが切り出される。バージョン番号のうち下位3ビット(111b)が44〜47ビット目の上位3ビットに対応するためである。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として070hが出力される。これら2つの出力が加算回路42で加算され、00000111111Xbがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは00000111111Xb番地に記録されている00000000hが読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号070hが入力されているため、演算回路64に対する1番目の演算指示として「パターンメモリ63の出力をビット毎に論理反転演算を行い、一致検出状態記憶回路65の記憶位置2に書き込む」が入力されている。演算回路64はパターンメモリ63からの出力である00000000hをビット毎に論理反転演算を行い、その演算結果であるFFFFFFFFhを一致検出状態記憶回路65の記憶位置2に書き込む。
演算回路64に対する2番目の演算指示は「一致検出状態記憶回路65の記憶位置1の値と記憶位置2の値とをビット毎に論理和演算を行い、一致検出記憶回路65の記憶位置1に書き込む」であり、一致検出状態記憶回路65の記憶位置1の値FFFFFFFFhと記憶位置2の値FFFFFFFFhとをビット毎に論理和演算を行い、その演算結果であるFFFFFFFFhを記憶位置1に書き込む。
さらに、3番目の演算指示は「一致検出状態記憶回路65の記憶位置0の値と記憶位置1の値とをビット毎に論理積演算を行い、一致検出状態記憶回路65の記憶位置0に書き込む」であり、一致検出状態記憶回路65の記憶位置0の値00000003hと記憶位置1の値FFFFFFFFhとをビット毎に論理積演算を行い、その演算結果である00000003hを記憶位置0に書き込む。
このように演算することにより、一致検出状態記憶回路65の記憶位置0には、第1の一致検出条件と第2の一致検出条件との双方に一致しているという状態を表す00000003hが記憶されている。
上記の演算手順を採ることにより、4ビット単位の一致検出と検出結果の論理演算により「バージョン番号は15hと不一致」という5ビット単位の検出条件に対して「バージョン番号入力が1Fh」の場合に一致を検出することができる。
次に、セクションヘッダ切り出し回路61で入力セクションから48〜51ビット目(セクション番号の上位4ビット)の部分データ=Dhが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として080hが出力される。これら2つの出力が加算回路42で加算され、08Dhがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは08Dh番地に記録されている00000001h(ビット位置0の値のみ一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号080hが入力されているため、演算回路64に対して「パターンメモリ63の出力と、一致検出状態記憶回路65の記憶位置0の内容とをビット毎に論理積演算を行い、一致検出状態記憶回路65の記憶位置0に書き込む」という演算指示が入力されている。演算回路64はパターンメモリ63からの出力である00000001hと、一致検出状態記憶回路65の記憶位置0に記憶されている00000003hとのビット毎の論理積演算を行い、その演算結果00000001hを一致検出状態記憶回路65の記憶位置0に書き込む。
一致検出状態記憶回路65には、第1の一致検出条件との一致を示す00000001hが記憶されている。
次に、セクションヘッダ切り出し回路61で入力セクションから52〜55ビット目(セクション番号の下位4ビット)の部分データ=0hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として090hが出力される。これら2つの出力が加算回路42で加算され、090hがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは090h番地に記録されている00000001h(ビット位置0の値のみ一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号090hが入力されているため、演算回路64に対して「パターンメモリ63の出力と、一致検出状態記憶回路65の記憶位置0の内容とをビット毎に論理積演算を行い、一致検出状態記憶回路65の記憶位置0に書き込む」という演算指示が入力されている。演算回路64はパターンメモリ63からの出力である00000001hと、一致検出状態記憶回路65の記憶位置0に記憶されている00000001hとのビット毎の論理積演算を行い、その演算結果00000001hを一致検出状態記憶回路65の記憶位置0に書き込む。
一致検出状態記憶回路65には、第1の一致検出条件との一致を示す00000001hが記憶されている。
この後、セクションヘッダ切り出し回路61で入力セクションから56〜59ビット目の部分データ(最終セクション番号の上位4ビット)=8h、60〜63ビット目の部分データ(最終セクション番号の下位4ビット)=0hが順次切り出される。これらの部分データに対する部分データ位置信号として0A0h、0B0hが演算順序記憶回路67に入力されるが、演算順序記憶回路67には0A0h以降の演算指示は全て「演算なし」であり、このためこの時点の一致検出記憶回路65の状態はセクションヘッダの最後のデータが入力されるまで変化しない。
セクションヘッダ切り出し回路61から入力セクションの124〜127ビット目が切り出され、部分データ位置信号として1B0hが一致判断記憶回路46に入力されると、この入力セクションと一致検出条件の一致検出が完了し、一致検出記憶回路65の記憶位置0に記憶されている00000001hが一致判断記憶回路46に入力される。
一致判断記憶回路46では入力が0でないため、入力セクションデータが第1の一致検出条件と一致したと判断し、一致判断結果として「一致」を出力する。
このように、入力されたセクションは一致検出条件に一致したものと判断され、一致判断記憶回路46から「一致」が出力され、ヘッダ一致検出回路31から「一致」が出力される。
次に図18に示すヘッダを持つセクションが入力されたとする。このセクションは、図15に示す第2の一致検出条件に一致するセクションである。
テーブル識別子、テーブル識別子拡張、バージョン番号、最終セクション番号は、図17の入力セクションと同一であり、説明を省略する。
セクションヘッダ切り出し回路61で入力セクションから48〜51ビット目(セクション番号の上位4ビット)の部分データ=Ahが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として080hが出力される。これら2つの出力が加算回路42で加算され、08Ahがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは08Ah番地に記録されている00000002h(ビット位置1の値のみ一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号080hが入力されているため、演算回路64に対して「パターンメモリ63の出力と、一致検出状態記憶回路65の記憶位置0の内容とをビット毎に論理積演算を行い、一致検出状態記憶回路65の記憶位置0に書き込む」という演算指示が入力されている。演算回路64はパターンメモリ63からの出力である00000002hと、一致検出状態記憶回路65の記憶位置0に記憶されている00000003hとのビット毎の論理積演算を行い、その演算結果00000002hを一致検出状態記憶回路65の記憶位置0に書き込む。
一致検出状態記憶回路65には、第2の一致検出条件との一致を示す00000002hが記憶されている。
次に、セクションヘッダ切り出し回路61で入力セクションから52〜55ビット目(セクション番号の下位4ビット)の部分データ=6hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として090hが出力される。これら2つの出力が加算回路42で加算され、096hがパターンメモリ63へアドレスとして入力される。
パターンメモリ63からは096h番地に記録されている00000002h(ビット位置1の値のみ一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、演算順序記憶回路67には部分データ位置信号090hが入力されているため、演算回路64に対して「パターンメモリ63の出力と、一致検出状態記憶回路65の記憶位置0の内容とをビット毎に論理積演算を行い、一致検出状態記憶回路65の記憶位置0に書き込む」という演算指示が入力されている。演算回路64はパターンメモリ63からの出力である00000002hと、一致検出状態記憶回路65の記憶位置0に記憶されている00000002hとのビット毎の論理積演算を行い、その演算結果00000002hを一致検出状態記憶回路65の記憶位置0に書き込む。
一致検出状態記憶回路65には、第2の一致検出条件との一致を示す00000002hが記憶される。
52〜55ビット目(セクション番号の下位4ビット)の部分データが5h以上であれば、パターンメモリ63からは00000002hが読み出されるため、セクション番号の上位4ビットがAでかつセクション番号の下位4ビットが5h以上、すなわちセクション番号がA5h以上、AFh以下で条件と一致することが検出できる。
このようにして、図18に示す入力セクションは第2の一致検出条件と一致することが検出できる。
第2の一致検出条件では、セクション番号がA5h〜AFhで条件と一致し、第1の一致検出条件では、セクション番号がB0h以上で条件と一致することが検出できるため、入力セクションのセクション番号がA5h以上であれば第1または第2の一致検出条件のどちらかと一致することを検出できる。
以上のように、実施の形態2のセクションデータ選別回路25によれば、セクションヘッダとの一致検出条件を32種まで設定でき、そのうちのある条件に一致するセクションヘッダを持つセクションを選別出力することができる。
セクションヘッダを4ビット単位の部分データに分割し、それぞれの部分データに対して1回のパターンメモリ63への読み出しだけで一致検出条件との比較を完了させることができるため、ヘッダ一致検出回路31に必要とされるメモリのアクセスバンド幅を小さく抑えることが可能となる。
例えば、12.5Mバイト/秒で入力されるセクションの選別を32種の条件に対して実行する場合にも、最大で12.5M回×2×32ビット=100Mバイト/秒のメモリアクセスバンド幅が要求されるだけであり、従来技術を用いた場合に必要となる800Mバイト/秒と比較して大幅に要求性能を抑えることが可能となる。
また、全てのデータ値について一致検出条件との一致/不一致を示す参照データをあらかじめパターンメモリ63に格納するとともに、参照データと一致検出状態との演算指示を各部分データ位置毎に指定できるため、条件データとの一致の検出だけでなく、不一致の検出、大小比較、フィールドデータの一部分の比較抑止などを実現でき、非常に柔軟な検出条件を設定することが可能となる。
さらに、比較対象となる入力セクションを4ビット単位に部分データに分割することにより、実施の形態1と比較して検出条件をセクション先頭16バイト目までの2倍に拡張したにも関わらずパターンメモリの容量は1314ワードから448ワードに削減できる。
なお、実施の形態2では、パターンメモリ63に32種の一致検出条件を設定できるものとしたがこれに限るものでなく、一致検出条件数に応じてパターンメモリ63、演算回路64、一致検出状態記憶回路65、一致判断記憶回路46で扱うビット数を変更することにより、任意の条件数を扱うことができる。
また、実施の形態2のヘッダ一致検出回路31は、セクションデータの先頭の16バイト目までのフィールドについて、一致検出するものとして説明したが、一致検出対象のフィールドはこれに限られるものでなく、任意のサイズのデータについて一致検出することができる。
また、実施の形態2の一致判断記憶回路46からは、一致したか否かの結果だけを一致判断結果と出力するとしたが、これに加えて、一致を検出した条件を示している一致検出状態記憶回路65からの入力そのものも記憶し、この情報を出力することもできる。これによりセクションデータ選別回路25では、一致検出条件との一致を判断しセクションデータの出力可否を判断するだけでなく、一致を検出した条件を示す情報も出力することが可能となる。
また、実施の形態2の演算順序記憶回路67の説明に記載した演算内容はこれに限られるものでない。
さらに、実施の形態2では、パターンメモリ63をヘッダ一致検出回路31に内蔵されるメモリとして説明したが、これに限定されるものでなく、CPU29の主記憶メモリと共用するなど、ヘッダ一致検出回路31の外部に置くこともできる。上述のように、12.5Mバイト/秒で入力されるセクションの選別を32種の条件に対して実行する場合に100Mバイト/秒のメモリアクセスバンド幅を使用するに留まる。CPU29の主記憶メモリは数百Mバイト/秒のアクセスバンド幅を持つことが一般的であり、このアクセスバンド幅のうち100Mバイト/秒をヘッダ一致検出回路31が使用することは現実的な実現形態である。パターンメモリ63の実現方法として外付けの大容量メモリを利用することにより、一致検出対象のフィールド数や一致検出条件数を増加させる場合に必要となるパターンメモリ63の容量増加に容易に対応することができる。
さらには、実施の形態2ではセクションヘッダ切り出しや部分データと部分データ位置信号とを加算しパターンメモリへのアドレスを作ることを回路として実現する方法を説明したが、これに限られるものでなく、セクションデータからの部分データの切り出しや部分データ位置のカウント、部分データ位置信号として表される部分データ位置情報と部分データとの加算を、処理の全てまたは一部をソフトウェアで実現することも可能である。セクションヘッダからの部分データの切り出しは、実現の形態2では12.5Mバイト/秒のデータの処理であり、ソフトウェアでも実現できる処理量である。
また、実施の形態2では、演算順序記憶回路67、演算回路64、一致検出状態記憶回路65、一致判断記憶回路46を回路として実現することを説明したが、これに限られるものでなく、ソフトウェア処理で実現することもできる。
上述のようにパターンメモリ63をCPU29の主記憶メモリとして実現し、その他のヘッダ一致検出回路31の処理をソフトウェアで実現することもできる。すなわち、実施の形態2で説明したヘッダ一致検出回路31の一部または全てをソフトウェアで実現することも可能である。
(実施の形態3)
図19に、本発明の実施の形態3におけるヘッダ一致検出回路の構成図を示す。ヘッダ一致検出回路31は、セクションヘッダ切り出し回路61、加算回路42、パターンメモリ63、演算回路64、一致検出状態記憶回路65、一致判断記憶回路46、マスク条件メモリ68、反転条件メモリ69を備えている。
セクションヘッダ切り出し回路61は、セクションヘッダを構成するテーブル識別子,テーブル識別子拡張,バージョン番号,カレントネクスト指示,セクション番号,最終セクション番号などの各フィールドを切り出し出力する。この際、各フィールドのデータ長が特定のデータサイズ(本実施例では4ビット)を上回る場合は、各フィールドを更に4ビット毎の部分データとして分割し、順次出力する。セクションヘッダ切り出し回路61は、部分データを出力すると同時にこの部分データのセクションヘッダ内での位置を示す部分データ位置信号も出力する。なお、本実施例では各フィールドを4ビット毎の部分データに分割するとしたが、分割するデータサイズは4ビットに限るものではない。
加算回路42は、セクションヘッダ切り出し回路61から出力された部分データと部分データ位置信号とを加算し、加算結果をパターンメモリ63へ出力する。
パターンメモリ63には、セクションヘッダの各部分データがとりうる値の各々に対応づけられたアドレスに、当該とりうる値が一致検出条件に一致すること(「一致」)を示す参照データまたは当該とりうる値が一致検出条件に一致しないこと(「不一致」)を示す参照データが実施の形態1と同様にあらかじめCPU29により記憶されている。加算回路42から入力された部分データと部分データ位置信号の加算結果をアドレスとしてパターンメモリ63を読み出すと、この部分データが一致検出条件に一致するか否かを示す参照データが出力される。
一致検出状態記憶回路65は、32ビットの情報を複数ワード記憶できる記憶回路であり、各ワードの各ビットに一致検出処理中の状態を記憶している。セクションの開始ごとに一致検出状態記憶回路65は、何も記憶されていない状態に初期化される。その後、各フィールドデータの比較が実行される度に演算回路64の演算結果を記憶する。
演算回路64は、パターンメモリ63からの参照データを入力するとともに、一致検出状態記憶回路65の記憶内容を読み出し、これらのデータに対してマスク条件メモリ68及び反転条件メモリ69からの出力データとのビット演算を行い、その演算結果を一致検出状態記憶回路65に出力する。
マスク条件メモリ68には、セクションヘッダ切り出し回路61で切り出された部分データに対応づけて、一致検出をマスクする条件を記憶することができ、各ビットはそれぞれ独立の一致検出条件に対応する。
反転条件メモリ69には、セクションヘッダ切り出し回路61で切り出された部分データに対応づけて、一致検出結果を反転する条件を記憶することができ、各ビットはそれぞれ独立の一致検出条件に対応する。
あるセクションのセクションヘッダの全フィールドに関してパターンメモリ63の参照が終わると、一致判断記憶回路46は一致検出状態記憶回路65の記憶データを読み出し、少なくとも1ビットが「一致」を示している場合は「一致」を、そうでない場合は「不一致」を記憶し出力する。このようにして一致判断記憶回路46からセクションヘッダと一致検出候補データとの一致判断結果が記憶され出力される。
さらに具体的に機能・動作を説明する。
セクションヘッダ切り出し回路61は、セクションヘッダを構成するデータ列の先頭からテーブル識別子などの各フィールドを部分データとして切り出し、更に各フィールドデータ長が4ビットを上回る場合は、各フィールドを更に4ビット毎の部分データとして分割し、順次出力する。例えば、セクションの先頭からの4ビット部分データ2つはテーブル識別子に対応する。
図20に、パターンメモリ63のアドレスマップを示す。パターンメモリ63は448ワードのメモリであり、図20に示すように、000〜00Fh番地はセクション先頭0〜3ビット目の部分データのとりうる値0〜Fhに対応し、010〜01F番地はセクション先頭4〜7ビット目の部分データのとりうる値0〜Fhに対応している。以下同様に、セクションのテーブル長のフィールドを除く各部分データのとりうる値が1BF番地まで対応している。各番地には32ビットの参照データを記憶でき、参照データの各ビットはそれぞれ独立の一致検出条件に対応する。すなわち実施の形態3では32種の一致検出条件との一致検出が可能である。
図21は、マスク条件メモリ68のアドレスマップを示す。図21に示すように、00h番地にはセクション先頭0〜3ビット目の部分データに対応するマスク条件が、01h番地にはセクション先頭4〜7ビット目の部分データに対応するマスク条件が格納されている。以下同様に、セクションのテーブル長のフィールドを除く各部分データのマスク条件が1Dh番地までに格納されている。各番地には32ビットのマスク条件を記憶でき、各ビットはそれぞれ独立の一致検出条件に対応する。すなわち実施の形態3では32種の一致検出条件の各々に対して独立にマスク条件を設定可能である。
図22には、反転条件メモリ69のアドレスマップを示す。図22に示すように、00h番地にはセクション先頭0〜3ビット目の部分データに対応する反転条件が、01h番地にはセクション先頭4〜7ビット目の部分データに対応する反転条件が格納されている。以下同様に、セクションのテーブル長のフィールドを除く各部分データの反転条件が1Dh番地までに格納されている。各番地には32ビットの反転条件を記憶でき、各ビットはそれぞれ独立の一致検出条件に対応する。すなわち実施の形態3では32種の一致検出条件の各々に対して独立にマスク条件を設定可能である。
実施の形態3では、下記の条件に一致するセクションを第1の一致検出条件に設定し、選別する場合について考える。
・テーブル識別子が27hと一致
・バージョン番号上位4ビットが2hと不一致(一致の結果反転)
・セクション番号上位4ビットはマスク(一致検出しない)
上記各条件に基づいて参照データがパターンメモリ63に次のように格納される。
まずパターンメモリ63はすべて「不一致」を表す0に初期化されているとする。また、マスク条件メモリ68はすべて「マスクしない」を表す0に初期化されているとする。さらに反転条件メモリ69はすべて「結果反転しない」をあらわす0に初期化されているとする。
第1の一致検出条件はパターンメモリ63の参照データのビット位置0に対応させられているとする。テーブル識別子は0〜3ビット目の部分データに対応する。これに関して第1の一致検出条件では2hとの一致を検出する必要があるため、2hと部分データ0〜3ビット目に対応する部分データ位置信号000hとを加算して得られる002h番地のビット位置0に、「一致」を示す「1」を記憶させておく。
部分データ4〜7ビット目に関しては7hとの一致を検出する必要があるため、7hと部分データ4〜7ビット目に対応する部分データ位置信号010hとを加算して得られる017h番地のビット位置0に、「一致」を示す「1」を記憶させておく。
バージョン番号上位4ビットは、40〜43ビット目の部分データに対応する。このため、バージョン番号上位4ビット=2hとの不一致は、パターンメモリ63の41h番地における第1の一致検出条件に対応するビット位置0に、「一致」を示す「1」を記憶させておき、反転条件メモリ69の06h番地における第1の一致検出条件に対応するビット位置0に、「反転」を示す「1」を記憶させておく。
セクション番号上位4ビットは、48〜51ビット目の部分データに対応する。このため、セクション番号上位4ビットをマスクする場合は、マスク条件メモリ68の09h番地における第1の一致検出条件に対応するビット位置0に、「反転」を示す「1」を記憶させておく。この場合、パターンメモリ63の48〜51ビット目の部分データに対応するアドレス番地における第1の一致検出条件に対応するビット位置0のデータは一致検出に無関係となる。
次に下記のフィールドデータを有するセクションデータが入力されたとする。
・テーブル識別子が27h
・バージョン番号上位4ビットが3h
・セクション番号上位4ビットが1h
セクションヘッダ切り出し回路61で入力セクションから0〜3ビット目の部分データ=2hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として00hが出力される。これら2つの出力が加算回路42で加算され、002hがパターンメモリ63へアドレスとして入力される。パターンメモリ63からは002h番地に記録されている00000001h(ビット位置0の一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、マスク条件メモリ68には部分データ位置信号00hが入力されているため、演算回路64に対して「パターンメモリ63の出力をマスクしない」という演算指示が入力されている。また、反転条件メモリ69には部分データ位置信号00hが入力されているため、演算回路64に対して「パターンメモリ63の出力を反転しない」という演算指示が入力されている。
演算回路64はパターンメモリ63からの出力である00000001hとマスク条件メモリ68からの出力である00000000hと反転条件メモリ69からの出力である00000000hとをビット演算し、その演算結果00000001hを一致検出状態記憶回路65は記憶する。
次に、セクションヘッダ切り出し回路61で入力セクションから4〜7ビット目の部分データ=7hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として01hが出力される。これら2つの出力が加算回路42で加算され、017hがパターンメモリ63へアドレスとして入力される。パターンメモリ63からは017h番地に記録されている00000001h(ビット位置0の値のみ一致を表す「1」)が読み出され、演算回路64へ入力される。
一方、マスク条件メモリ68には部分データ位置信号01hが入力されているため、演算回路64に対して「パターンメモリ63の出力をマスクしない」という演算指示が入力されている。また、反転条件メモリ69には部分データ位置信号01hが入力されているため、演算回路64に対して「パターンメモリ63の出力を反転しない」という演算指示が入力されている。
演算回路64はパターンメモリ63からの出力である00000001hとマスク条件メモリ68からの出力である00000000hと反転条件メモリ69からの出力である00000000hとをビット演算し、その演算結果00000001hと一致検出状態記憶回路65の出力とをビット積演算した結果を一致検出状態記憶回路65は新たに記憶する。
このように、セクション先頭0から7ビット目であるテーブル識別子が入力された時点で、一致検出状態記憶回路65には、第1の一致検出条件との一致を示す00000001hが記憶されている。
次に、セクションヘッダ切り出し回路61で入力セクションから40〜43ビット目の分データ=3hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として06hが出力される。これら2つの出力が加算回路42で加算され、063hがパターンメモリ63へアドレスとして入力される。
一方、マスク条件メモリ68には部分データ位置信号06hが入力されているため、演算回路64に対して「パターンメモリ63の出力をマスクしない」という演算指示が入力されている。また、反転条件メモリ69には部分データ位置信号06hが入力されているため、演算回路64に対して「パターンメモリ63の出力を反転する」という演算指示が入力されている。
演算回路64はパターンメモリ63からの出力である00000000hとマスク条件メモリ68からの出力である00000000hと反転条件メモリ69からの出力である00000001hとをビット演算し、その演算結果00000001hと一致検出状態記憶回路65の出力とをビット積演算した結果を一致検出状態記憶回路65は新たに記憶する。
次に、セクションヘッダ切り出し回路61で入力セクションから48〜51ビット目の部分データ=1hが切り出される。同時にセクションヘッダ切り出し回路61からは部分データ位置信号として08hが出力される。これら2つの出力が加算回路42で加算され、081hがパターンメモリ63へアドレスとして入力される。
一方、マスク条件メモリ68には部分データ位置信号08hが入力されているため、演算回路64に対して「パターンメモリ63の出力をマスクする」という演算指示が入力されている。また、反転条件メモリ69には部分データ位置信号08hが入力されているため、演算回路64に対して「パターンメモリ63の出力を反転しない」という演算指示が入力されている。
演算回路64はパターンメモリ63からの出力である00000000hとマスク条件メモリ68からの出力である00000001hと反転条件メモリ69からの出力である00000000hとをビット演算し、その演算結果00000001hと一致検出状態記憶回路65の出力とをビット積演算した結果を一致検出状態記憶回路65は新たに記憶する。
このように、入力セクションデータと一致検出条件との一致検出を順次行ない、入力された部分データ全ての一致検出が完了した時点で、一致検出記憶回路65に記憶されている00000001hが一致判断記憶回路46に入力される。一致判断記憶回路46では入力が0でないため、入力セクションデータが第1の一致検出条件と一致したと判断し、一致判断結果として「一致」を出力する。
以上のように、実施の形態3のセクションデータ選別回路25によれば、セクションヘッダとの一致検出条件を32種まで設定でき、そのうちのある条件に一致するセクションヘッダを持つセクションを選別出力することができる。
セクションヘッダをテーブル識別子、テーブル識別子拡張、バージョン番号、カレントネクスト指示、セクション番号、最終セクション番号などの各フィールドに分割して切り出し、更に各フィールドのデータ長が4ビットを上回る場合は、各フィールドを更に4ビット毎の部分データとして分割し、それぞれの部分データに対する反転条件およびマスク条件を設定することで、実施形態2と比較して、より小さな面積でセクションデータ選別に必要な柔軟な比較条件を実現することが可能となる。
更に、それぞれの部分データに対して1回のパターンメモリ63への読み出しだけで一致検出条件との比較を完了させることができるため、ヘッダ一致検出回路31に必要とされるメモリのアクセスバンド幅を従来技術に比べて大幅に抑えることが可能となる。
なお、実施の形態3では、パターンメモリに32種の一致検出条件を設定できるものとしたがこれに限るものでなく、一致検出条件数に応じてパターンメモリ63、演算回路64、マスク条件メモリ68、反転条件メモリ68、一致検出状態記憶回路65、一致判断記憶回路46で扱うビット数を変更することにより、任意の条件数を扱うことができる。
また、実施の形態3のヘッダ一致検出回路31は、セクションデータの先頭の16バイト目までのフィールドについて、一致検出するものとして説明したが、一致検出対象のフィールドはこれに限られるものでなく、任意のサイズのデータについて一致検出することができる。
また、実施の形態3では、パターンメモリ63、マスク条件メモリ68、反転条件メモリ69を別々のメモリ構成としたが、これらは同一メモリの別領域を用いることもでき、いずれもヘッダ一致検出回路31に内蔵されるメモリとして説明したが、これに限定されるものでなく、CPU29の主記憶メモリと共用するなど、ヘッダ一致検出回路31の外部に置くこともできる。
また、実施の形態3では、演算回路64、一致検出状態記憶回路65、一致判断記憶回路46を回路として実現することを説明したが、これに限られるものでなく、ソフトウェア処理で実現することもできる。
上述のようにパターンメモリ63、マスク条件メモリ68、反転条件メモリ69をCPU29の主記憶メモリとして実現し、その他のヘッダ一致検出回路31の処理をソフトウェアで実現することもできる。すなわち、実施の形態3で説明したヘッダ一致検出回路31の一部または全てをソフトウェアで実現することも可能である。