(57)【要約】【課題】コンテキスト適応型二値算術復号処理に適した命令セットを提供する。【解決手段】ＣＡＢＡＣのＢｉｎ復号命令はコプロセッサ命令デコーダ３１０によりデコードされる。このＢｉｎ復号命令は条件付き実行機能を備え、直前のＢｉｎ復号結果に応じて当該命令の実行の有無を制御する。また、このＢｉｎ復号命令は条件付き加算機能を備え、直前のＢｉｎ復号結果に応じて当該命令において使用するコンテキストインデックスを切り替える。コンテキスト変数レジスタ３３０にはＢｉｎ復号に必要な最大１６個のコンテキスト変数が保持される。Ｂｉｎバッファ３４０には過去４つの復号結果が保持される。Ｂｉｎマッチング命令がデコードされた場合、ライトバックデータ生成器３６０ではＢｉｎバッファ３４０の内容に応じて条件コードが生成される。この条件コードは後続の分岐命令により参照される。【選択図】図１０
2010130407.tif 000002
【特許請求の範囲】
【請求項１】
算術符号化されたデータを二値信号に算術復号する算術符号化データ復号命令をデコードする命令デコーダと、
直前に算術復号された二値信号を実行条件コードとして保持する実行条件コード保持部と、
前記算術符号化データ復号命令によって指定されたコンテキスト番号をそのままコンテキスト番号とするか、または、前記指定されたコンテキスト番号に１を加算した番号をコンテキスト番号とするかを、前記実行条件コードに応じて決定して当該決定されたコンテキスト番号を使用して前記算術復号を実行する算術復号実行部と
を具備する算術復号装置。
【請求項２】
前記算術復号実行部は、前記実行条件コードに応じて前記算術復号を実行するか否かを切り替える
請求項１記載の算術復号装置。
【請求項３】
前記算術符号化データ復号命令において、前記コンテキスト番号は入力オペランドに示されるレジスタの値と即値との加算値として指定される
請求項１記載の算術復号装置。
【請求項４】
算術符号化されたデータを二値信号に算術復号する算術符号化データ復号命令、前記算術復号のマッチング条件を表すビットマップを入力オペランドとして有するマッチング命令、および、分岐条件コードに応じて命令分岐を実行する分岐命令をデコードする命令デコーダと、
前記算術符号化データ復号命令によって指定されたコンテキスト番号を使用して前記算術復号を実行する算術復号実行部と、
前記算術復号された二値信号の履歴を保持する履歴保持部と、
前記二値信号の履歴が前記マッチング条件に合致しているか否かに応じて前記分岐条件コードを設定するマッチング処理部と、
前記分岐条件コードに応じて前記命令分岐を実行する命令制御部と
を具備する算術復号装置。
【請求項５】
前記算術復号実行部は、前記算術符号化データ復号命令の入力オペランドによって前記履歴のクリアが指定されている場合には前記履歴保持部に保持される前記履歴をクリアする
請求項４記載の算術復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、算術復号方式に関し、特にコンテキスト適応型二値算術符号化方式（ＣＡＢＡＣ：Context-Adaptive Binary Arithmetic Coding）により符号化されたデータを復号する算術復号装置に関する。
【背景技術】
【０００２】
コンテキスト適応型二値算術符号化方式（ＣＡＢＡＣ）は、ＩＴＵ−Ｔ（International Telecommunication Union - Telecommunication standardization sector：国際電気通信連合の電気通信標準化部門）において標準化されたＨ．２６４における、エントロピー符号化方式の一つである（非特許文献１参照。）。このＣＡＢＡＣでは、符号化前に各種多値データを「０」か「１」のシンボルで表現することにより二値化する。それを二値算術符号化処理によって符号化する。復号の際にはその逆の処理を行うことになる。
【０００３】
二値算術符号化処理は、「０」か「１」のシンボルで表現されたデータをさらに出現確率が高いと推測される方のシンボルを優勢確率シンボル（ＭＰＳ：Most Probable Symbol）とし、ＭＰＳでない方を劣勢確率シンボル（ＬＰＳ：Least Probable Symbol）として、｛０，１｝から｛ＬＰＳ，ＭＰＳ｝に置き換える処理である。そして、ＬＰＳまたはＭＰＳの２シンボルによって表現された二値データを算術符号で符号化する。ＭＰＳが「０」であるか「１」であるかは、処理済みのデータに基づいて１シンボルごとに予測されて決定される。すなわち、符号化（エンコード）の際は符号化済みのデータのみから次に符号化するシンボルのＭＰＳ値が決まり、復号（デコード）の際には復号済みのデータのみから次に復号するシンボルのＭＰＳ値が決まる。
【０００４】
また、二値算術符号化処理では、予め用意された複数の確率モデル（コンテキスト）の中から現在の状態に適合するものに順次切り替えながら処理が行われる。ＣＡＢＡＣでは、それぞれのコンテキストに対応したコンテキスト変数をコンテキスト変数テーブルに格納しておいて、コンテキストインデックス（ｃｔｘＩｄｘ）によってコンテキスト変数ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］を特定する。各コンテキスト変数は、出現確率を示す確率状態インデックスｐＳｔａｔｅＩｄｘと、出現確率の高い優勢確率シンボル（ＭＰＳ）を示すｖａｌＭＰＳとから構成される。ｐＳｔａｔｅＩｄｘは、そのコンテキストにおけるＬＰＳの出現確率の推定値を、予め定義された０から６３までの確率状態によって表す。ｖａｌＭＰＳは、ＭＰＳに該当するシンボルが「０」または「１」の何れであるかを表す。なお、各コンテキスト変数において、確率状態インデックスはｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］．ｐＳｔａｔｅＩｄｘと表記し、ｖａｌＭＰＳはｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］．ｖａｌＭＰＳと表記する。
【０００５】
ＣＡＢＡＣ復号器では、コンテキスト変数が１つ選択され、そのコンテキスト変数に基づいて１つのＢｉｎデータ（２値データの１ビット）が復号される。そして、その復号されたＢｉｎデータによってコンテキスト変数が更新される。ＣＡＢＡＣ復号器では、マクロブロックを構成するパラメータ毎に復号の方法が定義されている。このパラメータは、シンタックス要素（ＳＥ：Syntax Element）と呼ばれる。１つのシンタックス要素の復号は、複数のコンテキスト変数を使用して復号した複数のＢｉｎデータに対して、シンタックス要素毎に決められている多値化の方法に従って、シンタックス要素の多値データを求めることによって行われる。
【０００６】
１つのＢｉｎデータを復号する場合、１つ前に復号されたＢｉｎデータの値によってそのコンテキストインデックスが決まるようになっているものは、コンテキストインデックスの昇順において各シンタックス要素の先頭や中間に存在することが多い。各シンタックス要素のＢｉｎデータの長さも直前のＢｉｎデータを復号するまで確定しないものが多い。そのため、１つのシンタックス要素の復号が終わり、別のシンタックス要素を復号する際においても、コンテキストインデックスは直前のＢｉｎデータを復号するまで決まらないことになる。さらに、１つのシンタックス要素の復号において、同じコンテキストインデックスのコンテキスト変数を連続して使用する場合もあれば、毎回異なるコンテキストインデックスのコンテキスト変数を使用する場合もある。
【０００７】
先頭のＢｉｎデータのコンテキストインデックスは、シンタックス要素に応じて決まった番号である場合もあるが、復号済みの複数のシンタックス要素がどのような値かによって４個程度の候補から選択されるシンタックス要素もある。シンタックス要素の先頭以外のＢｉｎデータの場合は、１つ前に復号されたＢｉｎデータが０か１かによってコンテキストインデックスが算出される。また、シンタックス要素の最後か否かは、各シンタックス要素で定義されている可変長の符号表に基づいて判断される。
【０００８】
ＣＡＢＡＣの復号手順は、分岐処理を多く含んでいる。また、コンテキストインデックスは毎回１ずつ増加するとは限らず、同じ値が続くこともあれば２つ増加する場合もある。このようにコンテキストインデックスの算出は直前のＢｉｎデータの値に依存しており、値の算出も単純ではない。また、Ｂｉｎデータの長さはシンタックス要素によって固定の長さではなく分岐の経路によって異なるため、最後の判定も複雑である。
【０００９】
先頭のコンテキストインデックスは、シンタックス要素によって一意に決定される場合と、隣接マクロブロックから算出される場合とがある。隣接マクロブロックから算出される場合には、復号済みである真上のマクロブロックのシンタックス要素と左隣のマクロブロックのシンタックス要素とが参照される。このとき、画像の上端や左右端などのように隣接マクロブロックが存在しない場合があり、例外処理も合わせて行う必要があり、処理が非常に複雑になる。
【００１０】
このようなＣＡＢＡＣの復号処理をハードウェアで実装するためには、４６０個のコンテキスト変数を格納する専用メモリと、先頭のコンテキストインデックスを算出するために過去のシンタックス要素を保存する専用メモリが必要になる。そして、シンタックス要素毎の個別の復号方法に応じたステートマシンが必要になる。そのため、非常に複雑な制御を要し、回路規模が大きくなってしまうという問題がある。
【００１１】
一方、ＣＰＵおよびコプロセッサの組み合わせを想定して、ソフトウェア処理によりＣＡＢＡＣの復号処理を実現することが考えられる。コプロセッサ命令としてコンテキストインデックスを１つ与えると、１つのＢｉｎデータを復号して、その値をＣＰＵのレジスタへ書き戻すような命令を想定する。このような命令を実行する装置として、ＣＰＵと同程度の高周波数動作させるためにＢｉｎデータの復号をパイプライン化したＣＡＢＡＣ復号装置が提案されている（特許文献１参照。）。
【非特許文献１】ＩＴＵ−Ｔ  Ｈ．２６４
【特許文献１】特開２００７−０７４６４８号公報（図６）
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上述のソフトウェア処理を実現するための従来技術では、Ｂｉｎデータの復号処理をパイプライン化するため、Ｂｉｎデータの復号結果を得るのに数サイクル必要になり、次のコンテキストインデックスの決定も遅れることになる。コンテキストインデックスの計算とシンタックス要素の最後の判定をＣＰＵで処理することを考えると、さらにＢｉｎデータの復号毎に比較命令と分岐命令が必要になるため、コンテキストインデックスの確定がさらに遅れる。そのため、次のＢｉｎデータの復号が開始できずにパイプラインストールが頻繁に発生し、命令実行効率が著しく低下するおそれがある。一般に、命令のレイテンシを隠蔽するために本来の演算と依存関係のない演算命令をレイテンシの長い命令の後に挿入するという手法がある。しかし、ＣＡＢＡＣの復号処理においてはそのような演算パターンはほとんど無く、レイテンシを適切に隠蔽することが困難である。
【００１３】
本発明はこのような状況に鑑みてなされたものであり、コンテキスト適応型二値算術復号処理に適した命令セットを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、算術符号化されたデータを二値信号に算術復号する算術符号化データ復号命令をデコードする命令デコーダと、直前に算術復号された二値信号を実行条件コードとして保持する実行条件コード保持部と、上記算術符号化データ復号命令によって指定されたコンテキスト番号をそのままコンテキスト番号とするか、または、上記指定されたコンテキスト番号に１を加算した番号をコンテキスト番号とするかを、上記実行条件コードに応じて決定して当該決定されたコンテキスト番号を使用して上記算術復号を実行する算術復号実行部とを具備する算術復号装置である。これにより、直前の復号結果に応じてコンテキスト番号を切り換えて復号を行わせるという作用をもたらす。
【００１５】
また、この第１の側面において、上記算術復号実行部は、上記実行条件コードに応じて上記算術復号を実行するか否かを切り替えてもよい。これにより、直前の復号結果に応じて復号の有無を制御させるという作用をもたらす。
【００１６】
また、この第１の側面において、上記算術符号化データ復号命令において、上記コンテキスト番号は入力オペランドに示されるレジスタの値と即値との加算値として指定されてもよい。これにより、コンテキスト番号を動的に設定させるという作用をもたらす。
【００１７】
また、本発明の第２の側面は、算術符号化されたデータを二値信号に算術復号する算術符号化データ復号命令、上記算術復号のマッチング条件を表すビットマップを入力オペランドとして有するマッチング命令、および、分岐条件コードに応じて命令分岐を実行する分岐命令をデコードする命令デコーダと、上記算術符号化データ復号命令によって指定されたコンテキスト番号を使用して上記算術復号を実行する算術復号実行部と、上記算術復号された二値信号の履歴を保持する履歴保持部と、上記二値信号の履歴が上記マッチング条件に合致しているか否かに応じて上記分岐条件コードを設定するマッチング処理部と、上記分岐条件コードに応じて上記命令分岐を実行する命令制御部とを具備する算術復号装置である。これにより、復号履歴のマッチング条件に応じて命令分岐を実行させるという作用をもたらす。
【００１８】
また、この第２の側面において、上記算術復号実行部は、上記算術符号化データ復号命令の入力オペランドによって上記履歴のクリアが指定されている場合には上記履歴保持部に保持される上記履歴をクリアするようにしてもよい。これにより、シンタックス要素の復号開始に先立って履歴をクリアさせるという作用をもたらす。
【発明の効果】
【００１９】
本発明によれば、コンテキスト適応型二値算術復号処理をソフトウェア処理するに際して、処理速度を高速化することができるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００２０】
以下、本発明を実施するための最良の形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．ＣＡＢＡＣ復号器の概要
２．コプロセッサ命令の内容
３．適用例
【００２１】
＜１．ＣＡＢＡＣ復号器の概要＞
［ＣＡＢＡＣ復号器の機能構成例］
図１は、本発明の実施の形態における算術復号装置の一例としてのＣＡＢＡＣ復号器２０の機能構成例を示す図である。このＣＡＢＡＣ復号器２０は、符号列入力部１０から符号化データを受け取り、二値信号（Ｂｉｎデータ）に復号（デコード）した後に、多値信号（ＳＥ：シンタックス要素）に多値化するものである。ここで、シンタックス要素とは、Ｈ．２６４においてシンタックスで伝送することが規定されている情報である。このＣＡＢＡＣ復号器２０は、二値算術符号復号処理部２１と、コンテキストインデックス計算処理部２２と、コンテキスト変数テーブル保持部２３と、多値化処理部２４とを備えている。
【００２２】
コンテキストインデックス計算処理部２２は、コンテキストインデックス（ｃｔｘＩｄｘ）を計算して、その計算されたコンテキストインデックスを二値算術符号復号処理部２１に供給するものである。このコンテキストインデックス計算処理部２２は、コンテキストインデックスを計算する際、以前に復号されたＢｉｎデータおよびシンタックス要素を参照する。
【００２３】
コンテキスト変数テーブル保持部２３は、各コンテキストに対応したコンテキスト変数をコンテキスト変数テーブルとして保持するものである。各コンテキスト変数は、出現確率を示す確率状態インデックスｐＳｔａｔｅＩｄｘと、出現確率の高い優勢確率シンボル（ＭＰＳ）を示すｖａｌＭＰＳとから構成される。コンテキスト変数テーブル保持部２３に保持されるコンテキスト変数は、ｃｔｘＩｄｘによって特定され、ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］と表される。
【００２４】
二値算術符号復号処理部２１は、符号列入力部１０から入力された符号化データをＢｉｎデータに復号するものである。この二値算術符号復号処理部２１は、シンボルを１つ復号する際、コンテキストインデックス計算処理部２２からｃｔｘＩｄｘを受け取る。そして、このｃｔｘＩｄｘに基づいてコンテキスト変数テーブル保持部２３からコンテキスト変数ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］を取得する。そして、このコンテキスト変数に基づいてシンボルを復号して、Ｂｉｎデータを多値化処理部２４に出力する。
【００２５】
多値化処理部２４は、二値算術符号復号処理部２１から出力されたＢｉｎデータを元の多値信号（シンタックス要素）に多値化するものである。二値算術符号化の際にはシンタックス要素に応じて多値信号から二値信号への変換が行われており、この多値化処理部２４ではそのような二値信号を元の多値信号に戻す処理が行われる。
【００２６】
図２は、本発明の実施の形態におけるＣＡＢＡＣ復号の処理手順例を示す図である。この復号処理は、コンテキスト変数を用いてＢｉｎデータを復号するＢｉｎ復号処理（ステップＳ９０２乃至９０４）と、多値化を行う多値化処理（ステップＳ９０１、Ｓ９０５乃至９０７）とに大別される。
【００２７】
まず、シンタックス要素の先頭のｃｔｘＩｄｘがコンテキストインデックス計算処理部２２によって算出される（ステップＳ９０１）。先頭のＢｉｎデータのコンテキストインデックスは、シンタックス要素に応じて決まった番号である場合もあるが、復号済みの複数のシンタックス要素がどのような値かによって４個程度の候補から選択されるシンタックス要素もある。二値算術符号復号処理部２１は、その算出されたｃｔｘＩｄｘに基づいて、コンテキスト変数テーブル保持部２３からコンテキスト変数ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］を取得する（ステップＳ９０２）。
【００２８】
二値算術符号復号処理部２１は、この取得したコンテキスト変数を用いて、符号列入力部１０からの符号化データをＢｉｎデータに復号する（ステップＳ９０３）。Ｂｉｎデータの復号結果によって、コンテキスト変数テーブル保持部２３のコンテキスト変数は更新される（ステップＳ９０４）。
【００２９】
多値化処理部２４は、後述する可変長符号表を参照して、シンタックス要素の最後か否かを判定する（ステップＳ９０５）。シンタックス要素の最後でなければ、次のｃｔｘＩｄｘがコンテキストインデックス計算処理部２２によって算出されて（ステップＳ９０６）、ステップＳ９０２以降の処理が繰り返される。シンタックス要素の先頭以外のＢｉｎデータの場合は、１つ前に復号されたＢｉｎデータが０か１かによってｃｔｘＩｄｘが算出される。シンタックス要素の最後であれば、多値化処理部２４は、そのシンタックス要素を多値信号として生成する（ステップＳ９０７）。
【００３０】
［ＣＡＢＡＣ復号の概要］
上述のように、ＣＡＢＡＣ復号の際には、コンテキストインデックスｃｔｘＩｄｘにより特定されるコンテキスト変数ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］が用いられる。以下では、コンテキストインデックスとＢｉｎデータおよびシンタックス要素との関係について、マクロブロック（ＭＢ）タイプコンテキストグループを例として説明する。
【００３１】
図３は、本発明の実施の形態におけるマクロブロックタイプコンテキストグループのコンテキスト変数の割当例を示す図である。「ｃｉｄｘ」は、この割当例における先頭からの相対的なコンテキストインデックスを示すものである。「ｃｔｘＩｄｘ」は、Ｈ．２６４において規定されたコンテキストインデックスを示すものである。
【００３２】
図３（ａ）は、Ｉスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、８個のコンテキスト変数（「３」乃至「１０」）がシンタックス要素「Ｍｂ＿Ｔｙｐｅ＿Ｉ」に割り当てられている。
【００３３】
図３（ｂ）は、Ｐスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、７個のコンテキスト変数（「１４」乃至「２０」）がシンタックス要素「Ｍｂ＿Ｔｙｐｅ＿Ｐ」に、続く３個のコンテキスト変数（「２１」乃至「２３」）がシンタックス要素「ＳｕｂＭｂ＿Ｔｙｐｅ＿Ｐ」にそれぞれ割り当てられている。
【００３４】
図３（ｃ）は、Ｂスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、９個のコンテキスト変数（「２７」乃至「３５」）がシンタックス要素「Ｍｂ＿Ｔｙｐｅ＿Ｂ」に、続く４個のコンテキスト変数（「３６」乃至「３９」）がシンタックス要素「ＳｕｂＭｂ＿Ｔｙｐｅ＿Ｂ」にそれぞれ割り当てられている。
【００３５】
図４乃至８は、ＣＡＢＡＣにおけるｍｂ＿ｔｙｐｅまたはｓｕｂ＿ｍｂ＿ｔｙｐｅのシンタックス要素とＢｉｎデータとの対応関係を表す符号表である。図４は、Ｉスライスのｍｂ＿ｔｙｐｅ（Ｍｂ＿Ｔｙｐｅ＿Ｉ）とＢｉｎデータとの対応関係を表す符号表である。図５は、Ｐスライスのｍｂ＿ｔｙｐｅ（Ｍｂ＿Ｔｙｐｅ＿Ｐ）とＢｉｎデータとの対応関係を表す符号表である。図６は、Ｂスライスのｍｂ＿ｔｙｐｅ（Ｍｂ＿Ｔｙｐｅ＿Ｂ）とＢｉｎデータとの対応関係を表す符号表である。図７は、Ｐスライスのｓｕｂ＿ｍｂ＿ｔｙｐｅ（ＳｕｂＭｂ＿Ｔｙｐｅ＿Ｐ）とＢｉｎデータとの対応関係を表す符号表である。図８は、Ｂスライスのｓｕｂ＿ｍｂ＿ｔｙｐｅ（ＳｕｂＭｂ＿Ｔｙｐｅ＿Ｂ）とＢｉｎデータとの対応関係を表す符号表である。
【００３６】
多値化処理部２４は、図４乃至８の符号表を参照して、シンタックス要素の最後か否かを判定する。シンタックス要素の最後でなければ、最後になるまで二値算術符号復号処理部２１におけるＢｉｎデータの復号処理が繰り返される。そして、シンタックス要素の最後になると、多値化処理部２４は、図４乃至８の符号表を参照して、対応するシンタックス要素の多値信号を出力する。
【００３７】
［ＣＡＢＡＣ復号器のハードウェア構成例］
図９は、本発明の実施の形態におけるＣＡＢＡＣ復号器のハードウェア構成例を示す図である。本発明の実施の形態では、ＣＰＵを中心として構成される情報処理装置において復号コプロセッサを設け、ＣＡＢＡＣ復号のためのコプロセッサ命令を復号コプロセッサに対して発行することにより、ＣＡＢＡＣ復号器として動作させることを想定する。この情報処理装置は、メモリ１１０と、命令キャッシュ１２０と、データキャッシュ１３０と、ＤＭＡコントローラ１４０と、バス１０９と、ＣＰＵ２００と、復号コプロセッサ３００とを備える。
【００３８】
メモリ１１０は、ＣＰＵ２００および復号コプロセッサ３００において実行されるプログラムや処理対象となるデータ等を記憶するメインメモリである。命令キャッシュ１２０は、メモリ１１０に記憶されるプログラムの命令列を一時的に保持するレベル１キャッシュメモリである。データキャッシュ１３０は、メモリ１１０に記憶されるデータを一時的に保持するレベル１キャッシュメモリである。ＤＭＡコントローラ１４０は、メモリ１１０に記憶されるデータを、ＣＰＵ２００を介さずに、復号コプロセッサ３００にＤＭＡ（Direct Memory Access）転送するための制御装置である。バス１０９は、メモリ１１０、命令キャッシュ１２０、データキャッシュ１３０およびＤＭＡコントローラ１４０を相互に接続するバスである。ＣＰＵ２００は、命令キャッシュ１２０から供給された命令を実行するプロセッサである。復号コプロセッサ３００は、ＣＰＵ２００から供給されたコプロセッサ命令を実行するコプロセッサである。
【００３９】
ＤＭＡコントローラ１４０は、ストリームの読出し開始アドレスと読出しデータサイズを設定することができ、それらの設定後に転送開始が指示されることで開始アドレスから順次ストリームの読出しが行われる。ストリームは、ＤＭＡコントローラ１４０を介してメモリ１１０から順次読み出され、復号コプロセッサ３００における再正規化処理で後述のｃｏｄＩＯｆｆｓｅｔをシフトする際に、シフト量に等しいビット数のストリームがｃｏｄＩＯｆｆｓｅｔのＬＳＢ側に取り込まれる。このようにしてストリームは自動的に読み出されていき、復号処理が実行される。
【００４０】
ＣＰＵ２００は、命令デコーダ２１０と、命令制御部２２０と、演算パイプライン２３０と、プロセッサレジスタ群２４０と、ロードストアユニット２５０とを備える。命令デコーダ２１０は、命令キャッシュ１２０から供給された命令をデコード（解読）する命令デコーダである。命令制御部２２０は、ＣＰＵ２００において実行すべき命令を制御するものである。この命令制御部２２０は、プログラムカウンタ（ＰＣ）を備え、通常の状態においては連続する命令が実行されるようにプログラムカウンタを更新する。但し、命令デコーダ２１０において分岐命令がデコードされ、分岐が発生する（taken）場合には、命令制御部２２０は分岐先に飛ぶようにプログラムカウンタを更新する。演算パイプライン２３０は、パイプライン化された演算器である。ここでは簡略化のため１つしか図示していないが、必要に応じて複数本のパイプラインを演算パイプライン２３０として設けることができる。プロセッサレジスタ群２４０は、ＣＰＵ２００の汎用レジスタ（ＧＰＲ：general purpose registers）および条件コードレジスタ（ＣＣＲ：condition code registers）である。ロードストアユニット２５０は、データキャッシュ１３０を介してメモリ１１０との間のロード処理およびストア処理を行うものである。ロードストアの対象となるのは、ＣＰＵ２００のプロセッサレジスタ群２４０および後述する復号コプロセッサ３００内のコプロセッサレジスタ群である。
【００４１】
ＣＰＵ２００と復号コプロセッサ３００との間にはコプロセッサ命令キュー３０１およびライトバックバッファ３０９が設けられる。コプロセッサ命令キュー３０１は、ＣＰＵ２００から復号コプロセッサ３００へコプロセッサ命令を受け渡すために用いられる。ライトバックバッファ３０９は、復号コプロセッサ３００からＣＰＵ２００の汎用レジスタＧＰＲへデータをライトバックするために用いられる。
【００４２】
ＣＰＵ２００は、リセット後にメモリ１１０上の予め決められたメモリ番地に記憶される命令から順番に、命令制御部２２０のプログラムカウンタに従って、命令キャッシュ１２０を介してＣＰＵ２００内に取り込む。ＣＰＵ２００内で命令デコーダ２１０が命令をデコードして、命令の実行に必要なユニットを動作させるように制御を行う。ＣＰＵ２００用の命令であれば、ＣＰＵ２００内の演算パイプライン２３０を動作させる。コプロセッサ用の命令であれば、コプロセッサ命令キュー３０１を介して復号コプロセッサ３００へ命令を送る。復号コプロセッサ３００はコプロセッサ命令を受信すると、命令を解釈しその命令の実行に必要な制御を行う。ＣＰＵ２００は、命令制御部２２０のプログラムカウンタに従って、後続の命令をＣＰＵ２００内に取り込み、同様の処理を繰り返す。
【００４３】
ただし、命令デコーダ２１０において分岐命令がデコードされると、分岐先アドレスが算出され、分岐する必要があれば（taken）分岐先アドレスが命令制御部２２０のプログラムカウンタに設定される。そして、その分岐先アドレスのメモリ番地にある命令から順番に命令キャッシュ１２０を介してＣＰＵ２００内に取り込まれる。分岐命令には、無条件に分岐する無条件分岐命令と、条件コードレジスタＣＣＲの対応するビットを分岐条件コード（ＢＣ：branch code）として、ＢＣが「０」か「１」かによって分岐する条件分岐命令とが存在する。条件分岐命令は「０」で分岐するか「１」で分岐するかを指定できるものとする。条件コードレジスタＣＣＲは、比較や論理演算の結果、命令により指定されたビット位置が更新される。
【００４４】
図１０は、本発明の実施の形態における復号コプロセッサ３００の一構成例を示す図である。復号コプロセッサ３００は、コプロセッサ命令デコーダ３１０と、Ｂｉｎデコーダ３２０と、コンテキスト変数レジスタ３３０と、Ｂｉｎバッファ３４０と、Ｂｉｎカウンタ３５０と、ライトバックデータ生成器３６０とを備えている。
【００４５】
コプロセッサ命令デコーダ３１０は、コプロセッサ命令キュー３０１を介して供給されたコプロセッサ命令をデコード（解読）する命令デコーダである。このコプロセッサ命令デコーダ３１０は、特許請求の範囲に記載の命令デコーダの一例である。
【００４６】
Ｂｉｎデコーダ３２０は、ＤＭＡコントローラ１４０から供給された符号化データを復号してＢｉｎデータを生成するデコーダである。このＢｉｎデコーダ３２０は、特許請求の範囲に記載の算術復号実行部の一例である。
【００４７】
コンテキスト変数レジスタ３３０は、Ｂｉｎ復号に必要なコンテキスト変数を保持するレジスタである。このコンテキスト変数レジスタ３３０は、例えば、１２８ビット構成を想定し、８ビットに対して１つのコンテキスト変数を割り当てて、計１６個のコンテキスト変数を保持する。コンテキスト変数レジスタ３３０は、コプロセッサロード命令またはコプロセッサストア命令によって、メモリ１１０との間のデータ転送が行われる。シンタックス要素の復号を開始する前にそのシンタックス要素に対応するコンテキスト変数がメモリ１１０からコンテキスト変数レジスタ３３０へロードされて、シンタックス要素全体の復号が実行される。その後、次のシンタックス要素を復号する前に、以前のシンタックス要素のコンテキスト変数がコンテキスト変数レジスタ３３０からメモリ１１０へ退避される。そして、次のシンタックス要素のコンテキスト変数がメモリ１１０からコンテキスト変数レジスタ３３０へロードされる。このようにして、メモリ１１０上に格納されたコンテキスト変数を順次必要なだけコンテキスト変数レジスタ３３０へ読み出して復号処理を実行する。
【００４８】
この場合、１６個のコンテキスト変数は、４ビットのコンテキスト番号ｃｉｄｘにより特定することができる。実際上、コンテキスト変数の数は、シンタックス要素毎では図３に示したように、高々１６個程度であることが知られている。これを利用することにより、コンテキスト番号ｃｉｄｘを用いてコンテキスト変数レジスタ上のコンテキスト変数を特定することができ、ｃｔｘＩｄｘの算出に相当する処理を実現することができる。また、これにより、Ｂｉｎデコーダ３２０をより簡素に実現でき、全てのコンテキスト変数を格納する大容量ＳＲＡＭを用いることなくデータキャッシュを利用して処理できるようになり、小さな回路規模でＣＡＢＡＣ復号器を実現することができる。なお、ここでは８ビットに対して１つのコンテキスト変数を割り当てることを想定したが、１つのコンテキスト変数は７ビットで表現されるため、コンテキスト変数レジスタ３３０を１１２ビット構成としてもよい。
【００４９】
なお、コンテキスト変数をロード命令によりメモリ１１０からロードしたとき、図３のようにコンテキストインデックスｃｔｘＩｄｘとコンテキスト番号ｃｉｄｘが対応するようにコンテキスト変数レジスタ３３０に配置されるものとする。また、このコンテキスト変数をコンテキスト変数レジスタ３３０からストア命令によりストアすると、以前メモリ１１０に配置されていたのと同一の配置によりメモリ１１０に格納されるものとする。
【００５０】
Ｂｉｎバッファ（ＢＩＮＢＵＦ）３４０は、Ｂｉｎデコーダ３２０により復号されたＢｉｎデータの履歴を保持するバッファである。ここでは、７つ前までのＢｉｎデータの結果を同時に参照できるよう、７ビット以上のシフトレジスタにより構成されるものとする。このＢｉｎバッファ３４０は、特許請求の範囲に記載の履歴保持部の一例である。
【００５１】
Ｂｉｎカウンタ（ＢＩＮＣＮＴ）３５０は、Ｂｉｎデコーダ３２０により復号されたＢｉｎデータの数を計数するカウンタである。シンタックス要素の先頭でＢｉｎデコーダ３２０をクリアすることにより、シンタックス要素の復号後に、Ｂｉｎ列の長さを取得することができる。
【００５２】
ライトバックデータ生成器３６０は、Ｂｉｎバッファ３４０の値を参照して、ビット単位で取り出す等のデータの加工を行うものである。この加工データはライトバックバッファ３０９を介してＣＰＵ２００の汎用レジスタＧＰＲまたは条件コードレジスタＣＣＲに書き込まれる。このライトバックデータ生成器３６０は、単純なデータ加工以外にマッチング処理を行う機能を備える。マッチング処理機能とは、Ｂｉｎバッファ３４０に保持されたＢｉｎデータの履歴に対して条件を満たすビットパターンを複数指定し、その何れかのパターンに合致すれば「１」を生成し、そうでなければ「０」を生成する機能である。このマッチング処理における条件をマッチング条件と称する。なお、このライトバックデータ生成器３６０は、特許請求の範囲に記載のマッチング処理部の一例である。
【００５３】
＜２．コプロセッサ命令の内容＞
［命令セットの概要]
図１１は、本発明の実施の形態におけるＣＡＢＡＣ復号のための命令セットの一例を示す図である。ニーモニックの中で、［］により囲まれた部分は、省略が可能なオペランドを意味する。また、「ｃｐｒ」はコプロセッサレジスタ全般を意味し、コンテキスト変数レジスタ３３０の他、Ｂｉｎバッファ３４０およびＢｉｎカウンタ３５０が含まれる。
【００５４】
「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令、「ｃｂｃ＿ｄｅｃ＿ｂｉｎ＿ｃｃ」命令、および、「ｃｂｃ＿ｄｅｃ＿ｔｅｒｍ＿ｃｃ」命令は、Ｂｉｎデコーダ３２０によりＣＡＢＡＣの復号を行うＢｉｎ復号命令である。「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令では、コンテキスト番号ｃｉｄｘの即値とレジスタ番号ｒｓが示す汎用レジスタＧＰＲの値ＧＲＲ［ｒｓ］とを加算した番号によりコンテキスト変数レジスタのコンテキスト変数ＣＴＸ（ｃｉｄｘ＋ＧＰＲ［ｒｓ］）が特定される。特定されたコンテキスト変数を用いて、Ｂｉｎデータが復号され、その結果がＢｉｎバッファ３４０へ追加され、Ｂｉｎカウンタ３５０が１増加される。オプションとしてＣＥＸ０が指定された場合には、前回の復号結果のＢｉｎデータが「０」のときのみ、この「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令が実行される。また、ＣＥＸ１が指定された場合には、前回の復号結果のＢｉｎデータが「１」のときのみ、この「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令が実行される。オプションとしてＣＩＮＣ０が指定された場合には、前回の復号結果のＢｉｎデータが「０」のときにコンテキスト変数ＣＴＸ（ｃｉｄｘ＋ＧＰＲ［ｒｓ］＋１）を使用して復号が行われる。また、ＣＩＮＣ１が指定された場合には、前回の復号結果のＢｉｎデータが「１」のときにコンテキスト変数ＣＴＸ（ｃｉｄｘ＋ＧＰＲ［ｒｓ］＋１）を使用して復号が行われる。オプションとしてＣＬＲが指定された場合には、復号に先立ってＢｉｎバッファ３４０およびＢｉｎカウンタ３５０がクリアされ、Ｂｉｎバッファ３４０の内容が空になり、Ｂｉｎカウンタ３５０は一旦「０」になる。その後、Ｂｉｎデータが復号されることにより、Ｂｉｎカウンタ３５０は「１」に設定される。
【００５５】
「ｃｂｃ＿ｄｅｃ＿ｂｉｎ＿ｃｃ」命令では、オペランドｃｃにより指定されたＣＣＲのビットに、復号されたＢｉｎデータが格納される。その他のオペランドは「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令と同様である。
【００５６】
「ｃｂｃ＿ｄｅｃ＿ｔｅｒｍ＿ｃｃ」命令では、ｐＳｔａｔｅＩｄｘを「６３」、ｖａｌＭＰＳを「０」として、Ｂｉｎデータが復号され、その結果がＢｉｎバッファ３４０へ追加され、Ｂｉｎカウンタ３５０が１増加される。また、オペランドｃｃにより指定されたＣＣＲのビットに、復号されたＢｉｎデータが格納される。
【００５７】
「ｃｂｃ＿ｍａｔｃｈ」命令は、ライトバックデータ生成器３６０によりマッチング処理を行うＢｉｎマッチング命令である。この「ｃｂｃ＿ｍａｔｃｈ」命令では、Ｂｉｎバッファ３４０のＬＳＢ側の４ビット（つまり過去の４つのＢｉｎデータ）を比較対象として、マッチング処理が行われる。オペランドに列挙されたマッチパターン集合に同じパターンがあるときには「１」が、無いときには「０」が、オペランドｃｃにより指定されたＣＣＲのビットに格納される。ｐｔｎ０、ｐｔｎ１等のパターンを示すオペランドは、０、１、ｘの３文字を４つ連続して並べて、例えば、「０００１」、「ｘｘｘ１」、「ｘ１０ｘ」などのように表現する。例えば、「０００１」は、４つ前と３つ前と２つ前のＢｉｎデータが全て「０」で、最後の１つ前のＢｉｎデータが「１」であることを表す。また、ｘは「０」または「１」の何れでもよいことを表す。例えば、「ｘｘｘ１」は１つ前のＢｉｎデータが「１」である全てのパターンを表し、「ｘ１０ｘ」は３つ前のＢｉｎデータが「１」で２つ前のＢｉｎデータが「０」の全てのパターンを表す。このようにして、｛ｐｔｎ０，ｐｔｎ１，...｝に列挙したパターンで示された全てに対応するビットを１とした１６ビットのビットマップの即値が命令のオペランドに設定される。
【００５８】
「ｃｂｃ＿ｔｂｌｉｄｘ」命令は、符号表に整合するようにＢｉｎバッファ３４０の値を加工する多値化テーブルインデックス命令である。多値化処理はＢｉｎデータの可変長符号表により定義されており、また、一意復号可能な可変長符号であることから、最長な符号のＭＳＢと各符号のＭＳＢを揃えるように左シフトした値をテーブルのインデックスとして作成したテーブルを用意すると便利である。そこで、この「ｃｂｃ＿ｔｂｌｉｄｘ」命令では、復号されたシンタックス要素の最大ビット長をオペランドｗにより指定し、Ｂｉｎバッファ３４０の内容を（ＢＩＮＣＮＴ−ｗ）ビット左シフトする。これにより、そのシンタックス要素の先頭のＢｉｎデータがｗビットの値のＭＳＢになるように加工される。そして、レジスタ番号ｒｄが示す汎用レジスタＧＲＲ［ｒｄ］にｗビットのデータが書き込まれる。
【００５９】
「ｃｂｃ＿ＭｂＴｙｐｅＩ」命令、「ｃｂｃ＿ＭｂＴｙｐｅＰ」命令、「ｃｂｃ＿ＭｂＴｙｐｅＢ」命令、「ｃｂｃ＿ＳｕｂＭｂＴｙｐｅＢ」命令、および、「ｃｂｃ＿ＳｕｂＭｂＴｙｐｅＰ」命令は、多値化命令である。これら多値化命令は、図４乃至図８に示したＨ．２６４規格書に規定された復号手順に従って、Ｂｉｎバッファ３４０およびＢｉｎカウンタ３５０の値からシンタックス要素の多値信号を算出する。この算出結果は、レジスタ番号ｒｄが示す汎用レジスタＧＲＲ［ｒｄ］に書き込まれる。
【００６０】
ここまでに説明したコプロセッサ命令は、ＣＰＵ２００から復号コプロセッサ３００に供給され、復号コプロセッサ３００において実行される。これらコプロセッサ命令に加えて、ＣＡＢＡＣ復号を行うためにＣＰＵ２００において実行される命令として、以下の命令が用いられる。
【００６１】
「ｃｂｃ＿ｌｄｑ」命令は、メモリ１１０から復号コプロセッサ３００のコプロセッサレジスタにデータをロードするロード命令である。この「ｃｂｃ＿ｌｄｑ」命令では、メモリ１１０のアドレスａｄｄｒから１２８ビットのデータが読み出され、オペランドｃｐｒの示すコプロセッサレジスタへ書き込まれる。
【００６２】
「ｃｂｃ＿ｓｔｑ」命令は、復号コプロセッサ３００のコプロセッサレジスタからメモリ１１０にデータをストアするストア命令である。この「ｃｂｃ＿ｓｔｑ」命令では、オペランドｃｐｒの示すコプロセッサレジスタから１２８ビットのデータが読み出され、メモリ１１０のアドレスａｄｄｒへ書き込まれる。
【００６３】
「ｂｒ」命令は、分岐条件コードに応じて分岐先アドレスに分岐する条件分岐命令である。この「ｂｒ」命令では、オペランドｃｃにより指定されたＣＣＲのビットの値がオペランドｖに等しい場合に、メモリ１１０のアドレスａｄｄｒを分岐先アドレスとして分岐が発生する。「ｊｐｒ」命令は、無条件で分岐先アドレスにジャンプする無条件分岐命令である。この「ｊｐｒ」命令では、ＣＣＲの値にかかわらず、メモリ１１０のアドレスａｄｄｒを分岐先アドレスとして分岐が発生する。
【００６４】
［コプロセッサ命令の命令フォーマット例］
図１２は、本発明の実施の形態におけるＣＡＢＡＣ復号のためのコプロセッサ命令の命令フォーマットの一例を示す図である。図１２（ａ）は、「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令の命令フォーマットである。図１２（ｂ）は、「ｃｂｃ＿ｄｅｃ＿ｂｉｎ＿ｃｃ」命令の命令フォーマットである。図１２（ｃ）は、「ｃｂｃ＿ｄｅｃ＿ｔｅｒｍ＿ｃｃ」命令の命令フォーマットである。図１２（ｄ）は、「ｃｂｃ＿ｍａｔｃｈ」命令の命令フォーマットである。図１２（ｅ）は、「ｃｂｃ＿ｔｂｌｉｄｘ」命令の命令フォーマットである。図１２（ｆ）は、「ｃｂｃ＿ＭｂＴｙｐｅＩ」命令、「ｃｂｃ＿ＭｂＴｙｐｅＰ」命令、「ｃｂｃ＿ＭｂＴｙｐｅＢ」命令、「ｃｂｃ＿ＳｕｂＭｂＴｙｐｅＢ」命令、および、「ｃｂｃ＿ＳｕｂＭｂＴｙｐｅＰ」命令の命令フォーマットである。
【００６５】
第３１ビット目から第２６ビット目には、コプロセッサ命令を表す値ＣＯＰが共通に割り当てられている。また、第５ビット目から第０ビット目には、コプロセッサ命令の機能として各命令のコードが設定される。第２５ビット目から第２１ビット目のｒｓおよび第１５ビット目から第１１ビット目のｒｄは、汎用レジスタＧＰＲのレジスタ番号である。第２４ビット目から第２１ビット目のｗは、多値化テーブルインデックス命令の処理対象となるｗビットを表す。第１８ビット目から第１６ビット目のｃｃは、条件コードレジスタＣＣＲのビット位置を表す。第１４ビット目から第１１ビット目のｃｉｄｘはコンテキスト番号を表す。第６ビット目のＣＬＲはオプションとして、復号の際のクリアを実行するか否かを示すフラグである。
【００６６】
第２４ビット目から第１９ビット目および第１５ビット目から第６ビット目のＰＸＸＸＸは、ＸＸＸＸのパターンが現れた際に条件コードレジスタＣＣＲを「１」に設定するためのビットである。ここでは過去４つのＢｉｎデータについて判断することを想定しているため、４ビットのパターンの総数である１６個が指定できるようになっている。例えば、ビットマップのビットの値が「１」のときマッチング条件の候補とし、「０」であればマッチング条件の候補から外すものとする。複数のビットを同時に「１」にすることで、マッチング条件を満たす候補の集合を定義することができる。Ｂｉｎマッチング命令は、その集合に含まれるものがあるかを判断する比較命令として機能する。そして、比較結果を条件コードレジスタＣＣＲへ書き込むことによって分岐条件コードＢＣとして参照することができるため、分岐命令によって集合に含まれるかどうかによってプログラムを分岐させることができる。また、Ｂｉｎマッチング命令は、条件コードレジスタＣＣＲのどのビットに書き込むかを第１８ビット目から第１６ビット目のｃｃで指定することができる。例えば、条件コードレジスタＣＣＲが８ビットで８個の分岐条件コードＢＣを格納できる場合を考えると、３ビットで８個のうちの１つを特定することができる。そのため、条件コードレジスタＣＣＲのビット数だけ異なったマッチング条件のパターンの集合を定義できることになる。これにより、あるＢｉｎバッファ３４０の状態に対して複数のＢｉｎマッチング命令を実行することができ、複雑な分岐処理であっても非常に少ない分岐命令で処理することができる。
【００６７】
第１０ビット目のＣＩＮＣＢＩＮ、第９ビット目のＣＩＮＣＥＮ、第８ビット目のＣＥＸＢＩＮ、第７ビット目のＣＥＸＥＮは、直前に復号されたＢｉｎデータを実行条件コードＥＣとして利用するためのオプションである。このオプションには、条件付き加算と、条件付き実行の２種類の機能がある。条件付き加算の機能は、条件付き加算有効フラグＣＩＮＣＥＮが「１」のときにのみ有効になる。条件付き加算機能が有効なとき、条件付き加算条件ＣＩＮＣＢＩＮが実行条件コードＥＣと等しい場合にはオペランドｃｉｄｘに１を加算した番号のコンテキスト変数を用いて復号し、実行条件コードＥＣと異なる場合にはオペランドｃｉｄｘのコンテキスト変数を用いて復号を行う。条件付き実行の機能は、条件付き実行有効フラグＣＥＸＥＮが「１」のときにのみ有効になる。条件付き実行機能が有効なとき、条件付き実行条件ＣＥＸＢＩＮが実行条件コードＥＣと等しい場合にＢｉｎデータの復号処理を行うが、実行条件コードＥＣと異なる場合にはＢｉｎデータの復号を行わず、また、各種レジスタの更新を行わずにＮＯＰ命令と同様な動作をする。また、ＣＩＮＣＥＮとＣＥＸＥＮをともに「０」にすると、無条件に通常のｃｉｄｘのコンテキスト変数を用いたＢｉｎ復号処理を実行することになる。
【００６８】
ＣＥＸＥＮおよびＣＥＸＢＩＮはペアで使用され、ＣＩＮＣＥＮおよびＣＩＮＣＢＩＮもペアで使用される。ＣＥＸＥＮを「１」かつＣＥＸＢＩＮを「０」とするためには、ニーモニック（図１１）のオプションを「ＣＥＸ０」とする。ＣＥＸＥＮを「１」かつＣＥＸＢＩＮを「１」とするためには、ニーモニックのオプションを「ＣＥＸ１」とする。ＣＩＮＣＥＮを「１」かつＣＩＮＣＢＩＮを「０」とするためには、ニーモニックのオプションを「ＣＩＮＣ０」とする。ＣＩＮＣＥＮを「１」かつＣＩＮＣＢＩＮを「１」とするためには、ニーモニックのオプションを「ＣＩＮＣ１」とする。
【００６９】
［Ｂｉｎデコーダ３２０の構成例］
図１３および図１４は、本発明の実施の形態におけるＢｉｎデコーダ３２０の一構成例を示す図である。
【００７０】
シンボルを１つ復号する際には、ｐＳｔａｔｅＩｄｘおよびｖａｌＭＰＳ、すなわちコンテキスト変数ＣＴＸがコンテキスト変数レジスタ３３０から読み出される。また、内部状態変数ｃｏｄＩＲａｎｇｅの７ビット目から６ビット目までの値がｑＣｏｄＩＲａｎｇｅＩｄｘに設定される。そして、ｒａｎｇｅＴａｂＬＰＳ［ｐＳｔａｔｅＩｄｘ］［ｑＣｏｄＩＲａｎｇｅＩｄｘ］の参照値がｃｏｄＩＲａｎｇｅＬＰＳに設定され、ｃｏｄＩＲａｎｇｅからｃｏｄＩＲａｎｇｅＬＰＳを減じた値がｃｏｄＩＲａｎｇｅＭＰＳに設定される。
【００７１】
このとき、ｃｏｄＩＯｆｆｓｅｔがｃｏｄＩＲａｎｇｅＭＰＳ以上であれば、復号結果はＬＰＳになり、ｃｏｄＩＯｆｆｓｅｔからｃｏｄＩＲａｎｇｅＭＰＳを減じたものがｃｏｄＩＯｆｆｓｅｔとして更新され、ｃｏｄＩＲａｎｇｅＬＰＳがｃｏｄＩＲａｎｇｅとして更新されるとともに、コンテキスト変数が更新される。
【００７２】
一方、ｃｏｄＩＯｆｆｓｅｔがｃｏｄＩＲａｎｇｅＭＰＳ未満であれば、復号結果はＭＰＳになり、ｃｏｄＩＲａｎｇｅＭＰＳがｃｏｄＩＲａｎｇｅとして更新されるとともに、コンテキスト変数が更新される。
【００７３】
その後、内部状態変数ｃｏｄＩＲａｎｇｅおよびｃｏｄＩＯｆｆｓｅｔは、再正規化の処理対象となる。
【００７４】
復号結果がＬＰＳの場合、ｖａｌＭＰＳの反転値が復号データとして出力される。また、ｐＳｔａｔｅＩｄｘの次の状態は、遷移テーブルのｔｒａｎｓＩｄｘＬＰＳ［ｐＳｔａｔｅＩｄｘ］から求められる。このとき、ｔｒａｎｓＩｄｘＬＰＳ［ｐＳｔａｔｅＩｄｘ］が「０」であった場合、ｖａｌＭＰＳは反転される。そして、このように求められたｐＳｔａｔｅＩｄｘおよびｖａｌＭＰＳにより、コンテキスト変数が更新される。
【００７５】
復号結果がＭＰＳの場合、ｖａｌＭＰＳの値が復号データとして出力される。また、ｐＳｔａｔｅＩｄｘの次の状態は、遷移テーブルのｔｒａｎｓＩｄｘＭＰＳ［ｐＳｔａｔｅＩｄｘ］から求められ、これによりコンテキスト変数が更新される。
【００７６】
再正規化処理部３２９においては、ｃｏｄＩＲａｎｇｅが０ｘ０１００（＝２５６）より小さい場合には、ｃｏｄＩＲａｎｇｅが０ｘ０１００以上になるまで、ｃｏｄＩＲａｎｇｅおよびｃｏｄＩＯｆｆｓｅｔが１ビットずつ左シフトされるとともに、ｃｏｄＩＯｆｆｓｅｔのＬＳＢにはストリーム（符号化データ）から１ビット分が入力される。
【００７７】
復号されたＢｉｎデータは、Ｂｉｎバッファ３４０を１ビット左シフトして空いたＬＳＢに格納される。このとき、Ｂｉｎカウンタ３５０が１加算される。
【００７８】
コプロセッサ命令デコーダ３１０によってデコードされた信号は、必要に応じてパイプラインレジスタにラッチされる。この例では、「ｃｂｃ＿ｄｅｃ＿ｔｅｒｍ＿ｃｃ」命令をデコードした旨のフラグｃｂｃ＿ｄｅｃ＿ｔｅｒｍ＿ｃｃ＿ｆｌａｇが示されている。また、オプションとして、ＣＬＲ、ＣＥＸＥＮ、ＣＥＸＢＩＮ、ＣＩＮＣＥＮ、ＣＩＮＣＢＩＮ、ｃｉｄｘが示されている。
【００７９】
直前に復号されたＢｉｎデータは実行条件コード（ＥＣ）保持部３２３にも保持される。「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令および「ｃｂｃ＿ｄｅｃ＿ｂｉｎ＿ｃｃ」命令の場合、実行判定部３２１は、ＣＥＸＥＮが「０」であれば実行する旨判定してＢｉｎ有効信号を有効にし、ＣＥＸＥＮが「１」であれば条件付き実行機能を有効にする。条件付き実行機能が有効であれば、ＣＥＸＢＩＮが実行条件コード保持部３２３に保持される実行条件コードＥＣと一致していれば実行する旨判定してＢｉｎ有効信号を有効にし、不一致であれば実行しない旨判定してＢｉｎ有効信号を有効にする。なお、実行条件コード保持部３２３は、特許請求の範囲に記載の実行条件コード保持部の一例である。
【００８０】
また、「ｃｂｃ＿ｄｅｃ＿ｂｉｎ」命令および「ｃｂｃ＿ｄｅｃ＿ｂｉｎ＿ｃｃ」命令の場合、加算判定部３２２は、ＣＩＮＣＥＮが「０」であれば加算しない旨判定し、ＣＩＮＣＥＮが「１」であれば条件付き加算機能を有効にする。すなわち、条件付き加算機能が有効であれば、ＣＩＮＣＢＩＮが実行条件コード保持部３２３に保持される実行条件コードＥＣと一致していれば加算する旨判定し、不一致であれば加算しない旨判定する。加算しない旨判定された場合には、選択器３２５においてオペランドのコンテキスト番号ｃｉｄｘがそのままコンテキスト番号として選択され、選択器３２６においてコンテキスト変数ＣＴＸ（ｃｉｄｘ）が選択される。加算する旨判定された場合には、加算器３２４によってオペランドのコンテキスト番号ｃｉｄｘに１が加算された値が選択器３２５においてコンテキスト番号として選択され、選択器３２６においてコンテキスト変数ＣＴＸ（ｃｉｄｘ＋１）が選択される。ここでは、コンテキスト変数レジスタ３３０に格納されるコンテキスト変数の数を１６個（ｃｉｄｘ＝０〜１５）と想定しているため、ｃｉｄｘが「１５」の場合には、ｃｉｄｘ＋１の値は「０」になるものとする。
【００８１】
「ｃｂｃ＿ｄｅｃ＿ｔｅｒｍ＿ｃｃ」命令の場合、選択器３２７によって値「６３」がｐＳｔａｔｅＩｄｘとして選択される。また、「ｃｂｃ＿ｄｅｃ＿ｔｅｒｍ＿ｃｃ」命令の場合は、Ｂｉｎ有効信号が有効を示していたとしてもコンテキスト変数を更新しないように、論理積回路３２８によってコンテキスト変数更新許可信号がマスクされる。
【００８２】
復号の結果として得られたＢｉｎ有効信号およびシフト量は、ＤＭＡコントローラ１４０に供給される。このとき、Ｂｉｎ有効信号が有効を示していて、シフト量が「１」以上であれば、符号化データが消費されたものとして、ＤＭＡコントローラ１４０は符号化データの出力を更新する。
【００８３】
復号の結果として得られたＢｉｎ有効信号およびパイプラインレジスタにラッチされたＣＬＲは、Ｂｉｎカウンタ３５０に供給される。Ｂｉｎ有効信号が有効を示している場合にはＢｉｎカウンタ３５０が１加算される。このとき、ＣＬＲが有効、すなわちクリアする旨を示している場合には、Ｂｉｎカウンタ３５０は「１」に設定される。すなわち、このとき、Ｂｉｎデータは１ビット目としてカウントされる。
【００８４】
＜３．適用例＞
［マクロブロックタイプ（Ｉスライス）の適用例]
図１５は、Ｉスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。ノード内の数字はコンテキストインデックスを表す。上から状態遷移し、各ノードにおいて遷移した先の番号のコンテキストインデックスを使用して１つのＢｉｎデータを復号する。その後、枝で接続された別のノードへと遷移して、Ｂｉｎの復号を繰り返す。「０」または「１」のラベルが付与された枝は復号結果のＢｉｎデータの値を表し、Ｂｉｎデータの値と等しいラベルの枝に接続されたノードへ遷移（分岐）する。枝のラベルのないものは、Ｂｉｎデータの値にかかわらず必ず遷移する（分岐しない）。枝の先が「ｅｎｄ」であれば１つのシンタックス要素の復号が完了したことになる。このＩスライスのマクロブロックタイプの復号においては、「３」、「４」、「５」の何れかのコンテキストインデックスを使用してＢｉｎ復号が実行され、その復号結果によってその後の遷移が決定される。
【００８５】
図１６は、本発明の実施の形態の命令セットによるＩスライスのマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【００８６】
第１行目において、コンテキスト変数レジスタ３３０にコンテキスト変数がメモリ１１０からロードされる。第２行目において、「３」、「４」、「５」の何れかのコンテキストインデックスを使用してＢｉｎデータが復号される。このとき、オペランドＣＬＲが指定されているため、Ｂｉｎバッファ３４０およびＢｉｎカウンタ３５０がクリアされる。コンテキストインデックスはオペランドの汎用レジスタｇｐｒ１により指定される。復号されたＢｉｎデータが「０」であれば、第３行目の条件分岐命令によって第１１行目に分岐する。復号されたＢｉｎデータが「１」であれば、次の第４行目に進む。
【００８７】
第４行目において、コンテキストインデックス「２７６」を使用してＢｉｎデータが復号される。この結果は、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに保持される。
【００８８】
第５行目において、コンテキストインデックス「６」（ｃｉｄｘ＝３、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドｚｅｒｏは、オペランドレジスタｒｓとしてゼロ値を有するゼロレジスタを指定していることを意味する。オペランドＣＥＸ０は、直前の復号結果が「０」の場合にのみ、この復号を実行する旨を意味する。
【００８９】
第６行目では、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットの値、すなわち第４行目の復号命令において復号されたＢｉｎデータが「１」であれば、第１１行目に分岐し、「０」であれば、次の第７行目に進む。
【００９０】
第７行目において、コンテキストインデックス「７」（ｃｉｄｘ＝４、ｒｓ＝０）を使用してＢｉｎデータが復号される。第８行目において、コンテキストインデックス「８」（ｃｉｄｘ＝５、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ１は、直前の復号結果が「１」の場合にのみ、この復号を実行する旨を意味する。第９行目において、コンテキストインデックス「９」（ｃｉｄｘ＝６、ｒｓ＝０）を使用してＢｉｎデータが復号される。第１０行目において、コンテキストインデックス「１０」（ｃｉｄｘ＝７、ｒｓ＝０）を使用してＢｉｎデータが復号される。
【００９１】
第１１行目において、コンテキスト変数レジスタ３３０に保持されているコンテキスト変数がメモリ１１０にストアされる。第１２行目において、これまで復号されたＢｉｎデータの多値化処理が行われる。最後に、第１３行目において戻り先アドレスにジャンプする。
【００９２】
図１７は、図１６のプログラム例によりＩスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【００９３】
最初の「３」、「４」、「５」の何れかのコンテキストインデックスを使用してＢｉｎデータを復号するために、汎用レジスタにコンテキストインデックスを設定することにより、１つの命令（第２行目のＢｉｎ復号命令）で処理を行っている。
【００９４】
また、コンテキストインデックス「６」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、第６行目の分岐命令よりも先に第５行目のＢｉｎ復号命令を実行することが可能となり、分岐条件生成のレイテンシを隠蔽している。
【００９５】
また、コンテキストインデックス「８」を使用してＢｉｎデータを復号する際、第８行目のＢｉｎ復号命令において条件付き実行機能を利用することにより、分岐命令を削除し、パイプラインストールを回避している。
【００９６】
［マクロブロックタイプ（Ｐスライス）の適用例]
図１８および図１９は、Ｐスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。このＰスライスのマクロブロックタイプの復号においては、最初にコンテキストインデックス「１４」を使用してＢｉｎ復号が実行され、その結果が「１」であれば図１９のマクロブロック内の復号処理が行われる。一方、復号結果が「０」であれば次に遷移し、コンテキストインデックス「１５」を使用してＢｉｎ復号が実行される。そして、その結果に応じて、復号結果が「１」であればコンテキストインデックス「１７」を、「０」であればコンテキストインデックス「１６」をそれぞれ使用してＢｉｎ復号が実行される。
【００９７】
図２０は、本発明の実施の形態の命令セットによるＰスライスのマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【００９８】
第１行目において、コンテキスト変数レジスタ３３０にコンテキスト変数がメモリ１１０からロードされる。第２行目において、コンテキストインデックス「１４」（ｃｉｄｘ＝０、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドｚｅｒｏは、オペランドレジスタｒｓとしてゼロ値を有するゼロレジスタを指定していることを意味する。この結果は、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持される。また、オペランドＣＬＲが指定されているため、Ｂｉｎバッファ３４０およびＢｉｎカウンタ３５０がクリアされる。
【００９９】
第３行目において、コンテキストインデックス「１５」（ｃｉｄｘ＝１、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ０は、直前の復号結果が「０」の場合にのみ、この復号を実行する旨を意味する。
【０１００】
第４行目において、コンテキストインデックス「１６」または「１７」（ｃｉｄｘ＝２、ｒｓ＝０、ＣＩＮＣ１）を使用してＢｉｎデータが復号される。ここでは、オペランドＣＩＮＣ１が指定されているため、直前のＢｉｎ復号命令の結果に応じて、復号結果が「０」であればコンテキストインデックス「１６」を、「１」であればコンテキストインデックス「１７」をそれぞれ使用してＢｉｎデータが復号される。この結果は、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに保持される。
【０１０１】
第５行目の条件分岐命令では、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第２行目のＢｉｎ復号命令の復号結果が「０」であれば第１４行目に分岐する。第６行目の条件分岐命令では、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第４行目のＢｉｎ復号命令の復号結果が「０」であれば第１４行目に分岐する。
【０１０２】
第７行目において、コンテキストインデックス「２７６」を使用してＢｉｎデータが復号される。この結果は、オペランドｃｃ２により指定された条件コードレジスタＣＣＲのビットに保持される。
【０１０３】
第８行目において、コンテキストインデックス「１８」（ｃｉｄｘ＝４、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ０は、直前の復号結果が「０」の場合にのみ、この復号を実行する旨を意味する。
【０１０４】
第９行目の条件分岐命令では、オペランドｃｃ２により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第７行目のＢｉｎ復号命令の復号結果が「１」であれば第１４行目に分岐する。
【０１０５】
第１０行目において、コンテキストインデックス「１９」（ｃｉｄｘ＝５、ｒｓ＝０）を使用してＢｉｎデータが復号される。第１１行目において、コンテキストインデックス「１９」（ｃｉｄｘ＝５、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ１は、直前の復号結果が「１」の場合にのみ、この復号を実行する旨を意味する。
【０１０６】
第１２行目において、コンテキストインデックス「２０」（ｃｉｄｘ＝６、ｒｓ＝０）を使用してＢｉｎデータが復号される。第１３行目において、コンテキストインデックス「２０」（ｃｉｄｘ＝６、ｒｓ＝０）を使用してＢｉｎデータが復号される。
【０１０７】
第１４行目において、コンテキスト変数レジスタ３３０に保持されているコンテキスト変数がメモリ１１０にストアされる。第１５行目において、これまで復号されたＢｉｎデータの多値化処理が行われる。最後に、第１６行目において戻り先アドレスにジャンプする。
【０１０８】
図２１および図２２は、図２０のプログラム例によりＰスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【０１０９】
ここでは、コンテキストインデックス「１５」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、第５行目の分岐命令よりも先に第３行目のＢｉｎ復号命令を実行することが可能となり、分岐条件生成のレイテンシを隠蔽している。
【０１１０】
また、「１６」または「１７」のコンテキストインデックスを使用してＢｉｎデータを復号する際、条件付き加算機能を利用することにより、分岐命令を削除し、パイプラインストールを回避している。ここでは、マクロブロック内のコンテキストインデックス「１７」の復号命令を共通化することにより、命令数を削減している。
【０１１１】
また、コンテキストインデックス「１８」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、第９行目の分岐命令よりも先に第８行目のＢｉｎ復号命令を実行することが可能となり、分岐条件生成のレイテンシを隠蔽している。
【０１１２】
また、コンテキストインデックス「１９」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、分岐命令を削除し、パイプラインストールを回避している。
【０１１３】
［マクロブロックタイプ（Ｂスライス）の適用例]
図２３および図２４は、Ｂスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。このＢスライスのマクロブロックタイプの復号においては、最初に「２７」、「２８」、「２９」の何れかのコンテキストインデックスを使用してＢｉｎ復号が実行され、その復号結果によってその後の遷移が決定される。
【０１１４】
図２５は、本発明の実施の形態の命令セットによるＢスライスのマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【０１１５】
第１行目において、コンテキスト変数レジスタ３３０にコンテキスト変数がメモリ１１０からロードされる。第２行目において、「２７」、「２８」、「２９」の何れかのコンテキストインデックスを使用してＢｉｎデータが復号される。このとき、オペランドＣＬＲが指定されているため、Ｂｉｎバッファ３４０およびＢｉｎカウンタ３５０がクリアされる。コンテキストインデックスはオペランドの汎用レジスタｇｐｒ１により指定される。復号されたＢｉｎデータが「０」であれば、第３行目の条件分岐命令によって第２３行目に分岐する。復号されたＢｉｎデータが「１」であれば、次の第４行目に進む。
【０１１６】
第４行目において、コンテキストインデックス「３０」（ｃｉｄｘ＝３、ｒｓ＝０）を使用してＢｉｎデータが復号される。この結果は、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに保持される。
【０１１７】
第５行目において、コンテキストインデックス「３１」または「３２」（ｃｉｄｘ＝４、ｒｓ＝０、ＣＩＮＣ０）を使用してＢｉｎデータが復号される。ここでは、オペランドＣＩＮＣ０が指定されているため、直前のＢｉｎ復号命令の結果に応じて、復号結果が「１」であればコンテキストインデックス「３１」を、「０」であればコンテキストインデックス「３２」をそれぞれ使用してＢｉｎデータが復号される。
【０１１８】
第６行目の条件分岐命令では、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第４行目のＢｉｎ復号命令の復号結果が「０」であれば第２３行目に分岐する。
【０１１９】
第７乃至９行目において、コンテキストインデックス「３２」（ｃｉｄｘ＝５、ｒｓ＝０）を使用してＢｉｎデータが３回復号される。
【０１２０】
第１０行目のマッチング命令では、４つ前、３つ前、２つ前の復号結果が全て「１」の場合、または、４つ前の復号結果が「０」の場合に、オペランドｃｃ２により指定された条件コードレジスタＣＣＲのビットに「１」が保持される。それ以外の場合には、オペランドｃｃ２により指定された条件コードレジスタＣＣＲのビットに「０」が保持される。
【０１２１】
第１１行目のマッチング命令では、４つ前、３つ前、１つ前の復号結果が全て「１」で、２つ前の復号結果が「０」の場合には、オペランドｃｃ３により指定された条件コードレジスタＣＣＲのビットに「１」が保持される。それ以外の場合には、オペランドｃｃ３により指定された条件コードレジスタＣＣＲのビットに「０」が保持される。
【０１２２】
第１２行目の条件分岐命令では、オペランドｃｃ２により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第１０行目のマッチング命令の結果が「１」であれば第２３行目に分岐する。
【０１２３】
第１３行目において、コンテキストインデックス「３２」（ｃｉｄｘ＝５、ｒｓ＝０）を使用してＢｉｎデータが復号される。この結果は、オペランドｃｃ４により指定された条件コードレジスタＣＣＲのビットに保持される。
【０１２４】
第１４行目の条件分岐命令では、オペランドｃｃ３により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第１１行目のマッチング命令の結果が「０」であれば第２３行目に分岐する。第１５行目の条件分岐命令では、オペランドｃｃ４により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第１３行目のＢｉｎ復号命令の復号結果が「０」であれば第２３行目に分岐する。
【０１２５】
第１６行目において、コンテキストインデックス「２７６」を使用してＢｉｎデータが復号される。この結果は、オペランドｃｃ５により指定された条件コードレジスタＣＣＲのビットに保持される。
【０１２６】
第１７行目において、コンテキストインデックス「３３」（ｃｉｄｘ＝６、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ０は、直前の復号結果が「０」の場合にのみ、この復号を実行する旨を意味する。
【０１２７】
第１８行目の条件分岐命令では、オペランドｃｃ５により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第１６行目のＢｉｎ復号命令の復号結果が「０」であれば第２３行目に分岐する。
【０１２８】
第１９行目において、コンテキストインデックス「３４」（ｃｉｄｘ＝７、ｒｓ＝０）を使用してＢｉｎデータが復号される。
【０１２９】
第２０行目において、コンテキストインデックス「３４」（ｃｉｄｘ＝７、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ１は、直前の復号結果が「１」の場合にのみ、この復号を実行する旨を意味する。
【０１３０】
第２１および２２行目において、コンテキストインデックス「３５」（ｃｉｄｘ＝８、ｒｓ＝０）を使用してＢｉｎデータが２回復号される。
【０１３１】
第２３行目において、コンテキスト変数レジスタ３３０に保持されているコンテキスト変数がメモリ１１０にストアされる。第２４行目において、これまで復号されたＢｉｎデータの多値化処理が行われる。最後に、第２５行目において戻り先アドレスにジャンプする。
【０１３２】
図２６および図２７は、図２５のプログラム例によりＢスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【０１３３】
最初の「２７」、「２８」、「２９」の何れかのコンテキストインデックスを使用してＢｉｎデータを復号するために、汎用レジスタにコンテキストインデックスを設定することにより、１つの命令（第２行目のＢｉｎ復号命令）で処理を行っている。
【０１３４】
また、「３１」または「３２」のコンテキストインデックスを使用してＢｉｎデータを復号する際、条件付き加算機能を利用することにより、分岐命令を削除し、パイプラインストールを回避している。
【０１３５】
また、「３１」または「３２」のコンテキストインデックスを使用してＢｉｎデータを復号してからマクロブロック内のＢｉｎデータを復号するまでの処理（第５乃至１２行目の命令に相当）において、マッチング処理を利用している。これにより、分岐命令を削除して、まとめて４つのＢｉｎ復号の結果を比較することで、パイプラインストールを回避している。
【０１３６】
また、コンテキストインデックス「３３」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、第１８行目の分岐命令よりも先に第１７行目のＢｉｎ復号命令を実行することが可能となり、分岐条件生成のレイテンシを隠蔽している。
【０１３７】
また、コンテキストインデックス「３４」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、分岐命令を削除し、パイプラインストールを回避している。
【０１３８】
［サブマクロブロックタイプ（Ｐスライス）の適用例]
図２８は、Ｐスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。このＰスライスのサブマクロブロックタイプの復号においては、最初にコンテキストインデックス「２１」を使用してＢｉｎ復号が実行され、その結果が「１」であれば復号処理は終了する。一方、復号結果が「０」であれば次に遷移し、コンテキストインデックス「２２」を使用してＢｉｎ復号が実行される。そして、その結果に応じて、復号結果が「１」であればコンテキストインデックス「２３」を使用してＢｉｎ復号が実行され、復号結果が「０」であれば復号処理は終了する。
【０１３９】
図２９は、本発明の実施の形態の命令セットによるＰスライスのサブマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【０１４０】
第１行目において、コンテキスト変数レジスタ３３０にコンテキスト変数がメモリ１１０からロードされる。第２行目において、コンテキストインデックス「２１」（ｃｉｄｘ＝７、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドｚｅｒｏは、オペランドレジスタｒｓとしてゼロ値を有するゼロレジスタを指定していることを意味する。この結果は、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持される。また、オペランドＣＬＲが指定されているため、Ｂｉｎバッファ３４０およびＢｉｎカウンタ３５０がクリアされる。
【０１４１】
第３行目において、コンテキストインデックス「２２」（ｃｉｄｘ＝８、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ０は、直前の復号結果が「０」の場合にのみ、この復号を実行する旨を意味する。
【０１４２】
第４行目の条件分岐命令では、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第２行目のＢｉｎ復号命令の復号結果が「１」であれば第６行目に分岐する。
【０１４３】
第５行目において、コンテキストインデックス「２３」（ｃｉｄｘ＝９、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ１は、直前の復号結果が「１」の場合にのみ、この復号を実行する旨を意味する。
【０１４４】
第６行目において、コンテキスト変数レジスタ３３０に保持されているコンテキスト変数がメモリ１１０にストアされる。第７行目において、これまで復号されたＢｉｎデータの多値化処理が行われる。最後に、第８行目において戻り先アドレスにジャンプする。
【０１４５】
図３０は、図２９のプログラム例によりＰスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【０１４６】
ここでは、コンテキストインデックス「２２」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、第４行目の分岐命令よりも先に第３行目のＢｉｎ復号命令を実行することが可能となり、分岐条件生成のレイテンシを隠蔽している。
【０１４７】
また、コンテキストインデックス「２３」を使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、分岐命令を削除し、パイプラインストールを回避している。
【０１４８】
［サブマクロブロックタイプ（Ｂスライス）の適用例]
図３１は、Ｂスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。このＢスライスのサブマクロブロックタイプの復号においては、最初にコンテキストインデックス「３６」を使用してＢｉｎ復号が実行され、その結果が「０」であれば復号処理は終了する。一方、復号結果が「１」であれば次に遷移し、コンテキストインデックス「３７」を使用してＢｉｎ復号が実行され、その復号結果によってその後の遷移が決定される。
【０１４９】
図３２は、本発明の実施の形態の命令セットによるＢスライスのサブマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【０１５０】
第１行目において、コンテキスト変数レジスタ３３０にコンテキスト変数がメモリ１１０からロードされる。第２行目において、コンテキストインデックス「３６」（ｃｉｄｘ＝９、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドｚｅｒｏは、オペランドレジスタｒｓとしてゼロ値を有するゼロレジスタを指定していることを意味する。この結果は、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持される。また、オペランドＣＬＲが指定されているため、Ｂｉｎバッファ３４０およびＢｉｎカウンタ３５０がクリアされる。
【０１５１】
第３行目において、コンテキストインデックス「３７」（ｃｉｄｘ＝１０、ｒｓ＝０）を使用してＢｉｎデータが復号される。オペランドＣＥＸ１は、直前の復号結果が「１」の場合にのみ、この復号を実行する旨を意味する。この結果は、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持される。
【０１５２】
第４行目において、コンテキストインデックス「３８」または「３９」（ｃｉｄｘ＝１１、ｒｓ＝０、ＣＥＸ１、ＣＩＮＣ０）を使用してＢｉｎデータが復号される。ここでは、オペランドＣＩＮＣ０が指定されているため、直前のＢｉｎ復号命令の結果に応じて、復号結果が「１」であればコンテキストインデックス「３８」を、「０」であればコンテキストインデックス「３９」をそれぞれ使用してＢｉｎデータが復号される。この結果は、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持される。ただし、オペランドＣＥＸ１が指定されているため、直前の復号結果が「１」の場合にのみ、この復号が実行される。
【０１５３】
第５行目の条件分岐命令では、オペランドｃｃ０により指定された条件コードレジスタＣＣＲのビットに保持された値が「０」であれば第１１行目に分岐する。第２行目のＢｉｎ復号命令の結果が「０」の場合、第３行目および第４行目のＢｉｎ復号命令は実行されないため、この第５行目の条件分岐命令において「０」判定される対象は第２行目のＢｉｎ復号命令の結果となる。
【０１５４】
第６行目および第７行目において、コンテキストインデックス「３９」（ｃｉｄｘ＝１２、ｒｓ＝０）を使用して２回Ｂｉｎデータが復号される。
【０１５５】
第８行目のマッチング命令では、３つ前および２つ前の復号結果がそれぞれ「１」「０」の場合、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに「１」が保持される。それ以外の場合には、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに「０」が保持される。
【０１５６】
第９行目の条件分岐命令では、オペランドｃｃ１により指定された条件コードレジスタＣＣＲのビットに保持された値、すなわち第８行目のマッチング命令の結果が「０」であれば第１１行目に分岐する。
【０１５７】
第１０行目において、コンテキストインデックス「３９」（ｃｉｄｘ＝１２、ｒｓ＝０）を使用してＢｉｎデータが復号される。
【０１５８】
第１１行目において、コンテキスト変数レジスタ３３０に保持されているコンテキスト変数がメモリ１１０にストアされる。第１２行目において、これまで復号されたＢｉｎデータの多値化処理が行われる。最後に、第１３行目において戻り先アドレスにジャンプする。
【０１５９】
図３３は、図３２のプログラム例によりＢスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【０１６０】
ここでは、「３７」、「３８」または「３９」のコンテキストインデックスを使用してＢｉｎデータを復号する際、条件付き実行機能を利用することにより、第５行目の分岐命令よりも先に第３行目および第４行目のＢｉｎ復号命令を実行することが可能となり、分岐条件生成のレイテンシを隠蔽している。また、「３８」または「３９」のコンテキストインデックスを使用してＢｉｎデータを復号する際、条件付き加算機能を利用することにより、分岐命令を削除し、パイプラインストールを回避している。
【０１６１】
また、「３９」のコンテキストインデックスを使用して２回Ｂｉｎデータを復号する際、マッチング処理を利用することにより、分岐命令を削除して、まとめて２つのＢｉｎ復号の結果を比較することで、パイプラインストールを回避している。
【０１６２】
このように、本発明の実施の形態によれば、Ｂｉｎ復号命令において条件付き実行機能および条件付き加算機能を設けることにより、命令の並び替えの自由度を上げることができ、分岐条件生成のレイテンシを隠蔽することができる。また、Ｂｉｎマッチング命令を設けることにより、分岐命令を大幅に削減することができ、分岐条件生成から分岐命令実行までに起き得る待ち時間のストールサイクル数を低減することができる。すなわち、これらにより、本発明の実施の形態によれば、パイプラインの実行効率を向上することができる。
【０１６３】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、上述のように特許請求の範囲における発明特定事項とそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【０１６４】
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【図面の簡単な説明】
【０１６５】
【図１】本発明の実施の形態における算術復号装置の一例としてのＣＡＢＡＣ復号器２０の機能構成例を示す図である。
【図２】本発明の実施の形態におけるＣＡＢＡＣ復号の処理手順例を示す図である。
【図３】本発明の実施の形態におけるマクロブロックタイプコンテキストグループのコンテキスト変数の割当例を示す図である。
【図４】Ｉスライスのｍｂ＿ｔｙｐｅ（Ｍｂ＿Ｔｙｐｅ＿Ｉ）とＢｉｎデータとの対応関係を表す符号表である。
【図５】Ｐスライスのｍｂ＿ｔｙｐｅ（Ｍｂ＿Ｔｙｐｅ＿Ｐ）とＢｉｎデータとの対応関係を表す符号表である。
【図６】Ｂスライスのｍｂ＿ｔｙｐｅ（Ｍｂ＿Ｔｙｐｅ＿Ｂ）とＢｉｎデータとの対応関係を表す符号表である。
【図７】Ｐスライスのｓｕｂ＿ｍｂ＿ｔｙｐｅ（ＳｕｂＭｂ＿Ｔｙｐｅ＿Ｐ）とＢｉｎデータとの対応関係を表す符号表である。
【図８】Ｂスライスのｓｕｂ＿ｍｂ＿ｔｙｐｅ（ＳｕｂＭｂ＿Ｔｙｐｅ＿Ｂ）とＢｉｎデータとの対応関係を表す符号表である。
【図９】本発明の実施の形態におけるＣＡＢＡＣ復号器のハードウェア構成例を示す図である。
【図１０】本発明の実施の形態における復号コプロセッサ３００の一構成例を示す図である。
【図１１】本発明の実施の形態におけるＣＡＢＡＣ復号のための命令セットの一例を示す図である。
【図１２】本発明の実施の形態におけるＣＡＢＡＣ復号のためのコプロセッサ命令の命令フォーマットの一例を示す図である。
【図１３】本発明の実施の形態におけるＢｉｎデコーダ３２０の一構成例を示す図である。
【図１４】本発明の実施の形態におけるＢｉｎデコーダ３２０の再正規化処理部３２９一構成例を示す図である。
【図１５】Ｉスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図１６】本発明の実施の形態の命令セットによるＩスライスのマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【図１７】図１６のプログラム例によりＩスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図１８】Ｐスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図１９】Ｐスライスのマクロブロックタイプのマクロブロック内のシンタックス要素を復号する際の状態遷移図である。
【図２０】本発明の実施の形態の命令セットによるＰスライスのマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【図２１】図２０のプログラム例によりＰスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図２２】図２０のプログラム例によりＰスライスのマクロブロックタイプのマクロブロック内のシンタックス要素を復号する際の状態遷移図である。
【図２３】Ｂスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図２４】Ｂスライスのマクロブロックタイプのマクロブロック内のシンタックス要素を復号する際の状態遷移図である。
【図２５】本発明の実施の形態の命令セットによるＢスライスのマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【図２６】図２５のプログラム例によりＢスライスのマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図２７】図２５のプログラム例によりＢスライスのマクロブロックタイプのマクロブロック内のシンタックス要素を復号する際の状態遷移図である。
【図２８】Ｐスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図２９】本発明の実施の形態の命令セットによるＰスライスのサブマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【図３０】図２９のプログラム例によりＰスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図３１】Ｂスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【図３２】本発明の実施の形態の命令セットによるＢスライスのサブマクロブロックタイプのシンタックス要素を復号するプログラム例である。
【図３３】図３２のプログラム例によりＢスライスのサブマクロブロックタイプのシンタックス要素を復号する際の状態遷移図である。
【符号の説明】
【０１６６】
２０  ＣＡＢＡＣ復号器
２１  二値算術符号復号処理部
２２  コンテキストインデックス計算処理部
２３  コンテキスト変数テーブル保持部
２４  多値化処理部
１０９  バス
１１０  メモリ
１２０  命令キャッシュ
１３０  データキャッシュ
１４０  ＤＲＡＭコントローラ
２１０  命令デコーダ
２２０  命令制御部
２３０  演算パイプライン
２４０  プロセッサレジスタ群
２５０  ロードストアユニット
３００  復号コプロセッサ
３０１  コプロセッサ命令キュー
３０９  ライトバックバッファ
３１０  コプロセッサ命令デコーダ
３２０  Ｂｉｎデコーダ
３２１  実行判定部
３２２  加算判定部
３２３  実行条件コード保持部
３２４  加算器
３２５、３２６、３２７  選択器
３２８  論理積回路
３２９  再正規化処理部（ＲｅｎｏｒｍＤ）
３３０  コンテキスト変数レジスタ
３４０  Ｂｉｎバッファ（ＢＩＮＢＵＦ）
３５０  Ｂｉｎカウンタ（ＢＩＮＣＮＴ）
３６０  ライトバックデータ生成器
【図１】
2010130407.tif 000003
【図２】
2010130407.tif 000004
【図３】
2010130407.tif 000005
【図４】
2010130407.tif 000006
【図５】
2010130407.tif 000007
【図６】
2010130407.tif 000008
【図７】
2010130407.tif 000009
【図８】
2010130407.tif 000010
【図９】
2010130407.tif 000011
【図１０】
2010130407.tif 000012
【図１１】
2010130407.tif 000013
【図１２】
2010130407.tif 000014
【図１３】
2010130407.tif 000015
【図１４】
2010130407.tif 000016
【図１５】
2010130407.tif 000017
【図１６】
2010130407.tif 000018
【図１７】
2010130407.tif 000019
【図１８】
2010130407.tif 000020
【図１９】
2010130407.tif 000021
【図２０】
2010130407.tif 000022
【図２１】
2010130407.tif 000023
【図２２】
2010130407.tif 000024
【図２３】
2010130407.tif 000025
【図２４】
2010130407.tif 000026
【図２５】
2010130407.tif 000027
【図２６】
2010130407.tif 000028
【図２７】
2010130407.tif 000029
【図２８】
2010130407.tif 000030
【図２９】
2010130407.tif 000031
【図３０】
2010130407.tif 000032
【図３１】
2010130407.tif 000033
【図３２】
2010130407.tif 000034
【図３３】
2010130407.tif 000035