(57)【特許請求の範囲】
【請求項１】
マイクロプロセッサ(10)であって、
乗算ユニット(14)と、
多数の行先ビットを記憶し、かつ、該先行ビットを前記乗算ユニット(14)に提供するようになされた少なくとも1つの汎用レジスタ(12)と、
少なくとも乗算-高位命令(20)および乗算-高位および累算命令(22)を前記乗算ユニットに提供するように適合された制御ユニット(18)と
を備え、前記乗算ユニットが、さらに、
少なくとも第1および第2の原始オペランド(24、26)を受け取るようになされ、これらの原始オペランドがそれぞれ関連する数の原始ビットを有し、また、前記関連する数の原始ビットの和が行先ビットの数より多く、
精度向上ビットを記憶し、かつ、提供するようになされた少なくとも1つのキャッシュエントリを備えたレジスタ拡張キャッシュ(28)を有し、また、
結果オペランドの高位ビットからなる行先部分を前記汎用レジスタに記憶し、かつ、
前記結果オペランドの下位ビットからなる精度向上部分を前記キャッシュエントリに記憶する
ように適合され、前記結果オペランドが、前記乗算-高位命令を受け取ると乗算-高位演算によって生成され、また、前記乗算-高位および累算命令を受け取ると乗算-高位および累算演算によって生成され、
前記乗算-高位および累算演算が、前記少なくとも第1および第2の原始オペランドを使用して乗算-高位演算によって生成される中間結果オペランド、および前記乗算ユニット(14)に属さない前記少なくとも1つの汎用レジスタに既に記憶されている先行行先部分と、既に前記少なくとも1つのキャッシュエントリに記憶されている対応する先行精度向上部分との連結の和を使用した前記結果オペランドの生成を含む
マイクロプロセッサ(10)。
【請求項２】
前記関連する数の原始ビットの前記和が、行先ビットおよび前記精度向上ビットの前記数の和より多い、請求項1に記載のマイクロプロセッサ。
【請求項３】
レジスタ識別子を個々に有する複数(30)の汎用レジスタを備え、前記制御ユニットが、複数の前記レジスタ識別子のうちの1つと合致する行先識別子(32)を前記乗算ユニットに提供するように適合され、前記乗算ユニットが、前記行先識別子によって識別された前記汎用レジスタに前記行先部分を記憶するように適合される、請求項1から2のいずれかに記載のマイクロプロセッサ。
【請求項４】
前記レジスタ拡張キャッシュが、それぞれ複数の前記レジスタ識別子のうちの1つに対応するキャッシュエントリ識別子を使用して識別される複数の前記キャッシュエントリを備え、また、前記乗算ユニットが、前記行先部分と、前記行先識別子と合致する前記キャッシュエントリ識別子を有するキャッシュエントリによって提供される精度向上部分とを使用して前記結果オペランドを生成するように適合される、請求項3に記載のマイクロプロセッサ。
【請求項５】
前記乗算-高位演算が乗算-高位および否定演算を含み、また、前記乗算-高位および累算演算が乗算-高位否定および累算演算を含む、請求項1から4のいずれかに記載のマイクロプロセッサ。
【請求項６】
前記乗算ユニットが前記レジスタ拡張キャッシュを備える、請求項1から5のいずれかに記載のマイクロプロセッサ。
【請求項７】
前記乗算-高位演算および前記乗算-高位および累算演算が単一命令多重データ演算として実施される、請求項1から6のいずれかに記載のマイクロプロセッサ。
【請求項８】
逆離散余弦変換計算を実施するようになされた、請求項1から7のいずれかに記載のマイクロプロセッサ。
【請求項９】
精度向上ビットの前記数が、IEEE-1180-1990コンプライアンス試験による精度を有する前記逆離散余弦変換計算を可能にするように選択される、請求項8に記載のマイクロプロセッサ。
【請求項１０】
請求項1から9のいずれかに記載のマイクロプロセッサを備えるビデオデコーディングデバイス(74)。
【請求項１１】
乗算ユニットと、行先ビットを記憶し、かつ、前記乗算ユニットに提供するようになされた少なくとも1つの汎用レジスタとを備えたマイクロプロセッサ上での精度が改善された積の和計算のための方法であって、前記乗算ユニットは、精度向上ビットを記憶し、かつ、提供するようになされた少なくとも1つのキャッシュエントリを備えたレジスタ拡張キャッシュを有し、前記方法は、
乗算-高位命令を受け取るステップ(80)と、
少なくとも第1および第2の原始オペランドを受け取るステップ(82)であって、これらの原始オペランドがそれぞれ関連する数の原始ビットを有し、また、前記関連する数の原始ビットの和が行先ビットの数より多いステップ(82)と、
前記少なくとも第1および第2の原始オペランドを使用して乗算-高位演算を実行することによって結果オペランドを生成するステップ(84)と、
前記結果オペランドの高位ビットからなる行先部分を前記汎用レジスタに記憶し、かつ、前記結果オペランドの下位ビットからなる精度向上部分を前記キャッシュエントリに記憶するステップ(86)と
を含み、また、乗算-高位および累算列のコンポーネント毎に、
乗算-高位および累算命令を受け取るステップ(90)と、
前記少なくとも第1および第2の原始オペランドを受け取るステップ(92)と、
前記少なくとも第1および第2の原始オペランドを使用して乗算-高位演算によって生成される新しい結果オペランド、および前記乗算ユニット(14)に属さない前記少なくとも1つの汎用レジスタに既に記憶されている先行行先部分と、前記少なくとも1つのキャッシュエントリに既に記憶されている対応する先行精度向上部分との連結の和を使用して、乗算-高位および累算演算を実行することによって前記結果オペランドを更新するステップ(94)と、
前記結果オペランドの更新された行先部分を前記汎用レジスタに記憶し、かつ、前記結果オペランドの更新された精度向上部分を前記キャッシュエントリに記憶するステップ(96)と
を含む方法。
【請求項１２】
前記マイクロプロセッサが、レジスタ識別子を個々に有する複数の汎用レジスタを備え、前記レジスタ拡張キャッシュが、それぞれ複数の前記レジスタ識別子のうちの1つに対応するキャッシュエントリ識別子を使用して識別される複数の前記キャッシュエントリを備え、
複数の前記レジスタ識別子のうちの1つと合致する行先識別子を前記乗算ユニットに提供するステップと、
前記行先部分と、前記行先識別子と合致する前記キャッシュエントリ識別子を有するキャッシュエントリによって提供される精度向上部分とを使用して前記結果オペランドを生成するステップと
を含み、また、前記結果オペランドの高位ビットからなる行先部分を前記汎用レジスタに記憶し、かつ、前記結果オペランドの下位ビットからなる精度向上部分を前記キャッシュエントリに記憶する前記ステップ(86)が、前記行先識別子によって識別された前記汎用レジスタに前記行先部分を記憶するステップを含む、請求項11に記載の方法。
【請求項１３】
プログラマブル装置上で実行されると、請求項11または請求項12に記載されている方法のステップを実行するためのコード部分を備えたコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に処理デバイスに関し、より詳細には、マイクロプロセッサ、マイクロプロセッサ上での精度が改善された積の和計算のための方法、およびビデオデコーディングデバイスに関する。
【背景技術】
【０００２】
ディジタル信号処理アプリケーションで最も頻繁に使用される関数の1つは、積の和
【０００３】
【数１】
0005456167.tif 000002
【０００４】
であり、上式でSoPは積の和、nは積の数、iはカウンタ値、Siは、量子化された信号のn個のサンプルのi番目、また、Ciは、n個の係数(例えばフィルタ係数または変換係数)のi番目である。
【０００５】
DSP(ディジタル信号プロセッサ)および同じくいくつかの標準マイクロプロセッサは、高速で、かつ、有効な積の和計算のための専用の命令を有している。ごく一般的に使用されている命令は、内部ループ乗算および加算演算を単一の命令に結合する「MAC」(乗算および累算)命令である。
【０００６】
マイクロプロセッサ命令のオペランドは、限られた数のビットによって表されている。この範囲は、マイクロプロセッサハードウェアのレジスタ幅によって画定されている。整数オペランドの場合、この範囲は、表現することができる値の最大範囲を画定している。ディジタル信号処理では、オペランドは、量子化されたアナログ信号を表しており、また、オペランドサイズの範囲は、精度、あるいは言い換えるとアナログ信号近似の品質を画定している。
【０００７】
一例として、ほとんどの汎用マイクロプロセッサは、原始オペランドおよび行先オペランドのために、汎用マイクロプロセッサの汎用レジスタの幅によって設定される同じサイズの範囲を有している。例えば、近代のRISC(縮小命令セットコンピュータ)の概念に従うマイクロプロセッサアーキテクチャは、計算命令の原始オペランドおよび行先オペランドのために使用される同じ大きさにサイズ化された汎用レジスタの大型セットを有することができる。
【０００８】
2つの整数の数とnビットサイズの乗算によって、符号がない数に対して2・nビットサイズの積が生成され、また、符号付きの数に対して2・n-1ビットサイズの積が生成される。原始オペランドのサイズによっては、乗算命令の結果が原始レジスタのサイズと同じサイズを有する汎用レジスタに完全に適合しない場合がある。一連の積を加算することにより、積の和計算は、単一の積よりもさらに多くのビットを有する結果オペランドを生成することができる。例えば、n=16であり、また、Si、Ciが符号付き16ビット値である場合の積の和計算により、2・16-1+4=35ビットサイズの積が生成される。
【０００９】
多くの汎用マイクロプロセッサの命令セットの中に見い出される一般的なタイプの乗算命令には、積の下位ビットを行先レジスタに記憶する命令が含まれている。このタイプの乗算命令は、高水準言語をサポートするためにしばしば使用されるが、DSP計算のためにはほとんど適していない。乗算命令の結果および積の和計算の結果がオーバフローすることがある。DSP計算の場合、積の高位ビットを記憶する「乗算-高位」命令を使用することができる。単一乗算命令の結果はオーバフローし得ない。しかしながら、積の下位ビットが捨てられるため、結果オペランドの精度が低下する。
【００１０】
ゲート密度の増加およびそれに伴うディジタル回路のコスト低減により、いくつかの近代の汎用マイクロプロセッサは、高速乗算演算を提供しており、また、原理的には、一般的にはDSP上で実行されるアプリケーションのために使用することも可能である。しかしながら、行先レジスタの幅のため、積の和計算の精度は依然として限られている。
【００１１】
DSPは、特殊な種別のマイクロプロセッサである。通常、DSPには、単一の積の精度および積の和計算の精度の損失を回避するために、拡張幅を備えた累算器レジスタが含まれている。汎用制御および計算アプリケーションでは、DSPの拡張幅レジスタによって提供される利点はほとんどない。さらに、原始オペランドおよび行先オペランドならびにレジスタの不規則なレジスタサイズおよび異なるサイズは、モデルまたはレジスタセットのプログラミングを複雑にし、かつ、汎用制御および計算プログラムにおけるDSPの効率(符号密度および性能)を制限している。
【００１２】
したがって汎用マイクロプロセッサは、場合によってはDSPアプリケーションにはほとんど適しておらず、また、DSPは、場合によっては汎用制御および計算アプリケーションにもほとんど適していない。混成要求事項のアプリケーションの場合、両方のカテゴリで効率が高く、かつ、性能が高いマイクロプロセッサアーキテクチャが有利であろう。
【００１３】
しかしながら、汎用マイクロプロセッサは、精度対レジスタサイズの問題にもかかわらず、DSPアルゴリズムのために使用することができる。
【００１４】
ほとんどの汎用マイクロプロセッサのために適した手法の一例は、サイズが小さい原始オペランドを選択することができる。サイズ(ビット幅)が小さい原始オペランドを使用することにより、積の和計算の結果がオーバフローするのを防止することができる。例えばビデオアプリケーションまたは図形アプリケーションでは、サンプルは、通常、8ないし12ビット値であり、また、係数は12ないし16ビット値である。ビデオ/図形のための積の和計算の長さnは短く、2ないし8の範囲内である。例えば32ビットレジスタを備えたプロセッサは、このタイプの積の和を正確に計算することができる。しかしながら、ビデオ/図形アプリケーションの場合、典型的な出力サンプルの精度は8ビットであり、中間計算のためには16ないし20ビットで十分であるため、32・32ビット乗算を使用する場合、資源効率は悪い。
【００１５】
乗算-高位命令の使用は、積の高位ビットを行先レジスタに記憶する追加乗算命令を有するいくつかのマイクロプロセッサによって提供される手法の他の例である。この概念は、MAC(乗算および累算)命令のためにも使用されている。この概念によれば、オペランドは、最上位ビットの左が10進小数点である固定小数点数として処理される。この手法は、主としてDSPアルゴリズムのために使用することができる。オペランドが小さい場合、SIMD(単一命令多重データ)演算を可能にするために、データ経路(乗算器、レジスタ、算術論理ユニット(ALU))を複数のより小さい片に分割することができる。しかしながら、最上位ビットを得るためにどのみち計算しなければならない積の最下位ビットが捨てられ、積の和計算の精度には寄与しない。
【００１６】
さらに他の手法は、乗算/MAC行先オペランドのための連結された2つの汎用レジスタに基づいており、これは、場合によっては多くのDSPアルゴリズムのための典型的な解決法である。しかしながら、行先レジスタの利用可能な数が半分に減少している。
【００１７】
米国特許出願公開第2002/0178203(A1)号明細書に、汎用レジスタを使用する代わりに追加専用累算器レジスタを使用することができることが示されている。マイクロプロセッサのためのプログラミングモデルには、拡張精度積の和計算のための1つまたは複数の専用累算器レジスタを含むことができる。この拡張精度を利用するために、行先として累算器レジスタを指定する専用乗算およびMAC命令が提供される。積の和列の終わりに、個別の命令によって累算器の内容が汎用レジスタに転送される(一般的には任意選択のけた送り、丸めおよびクリッピングを使用して)。しかしながら、累算器の内容を汎用レジスタに転送するための余分の命令が積の和列の末端に必要である。そのために、とりわけ短い列の性能が低下する。プロセッサのプログラミングモデルがますます複雑になり、また、演算コードマップ、すなわち機械言語命令のうちの実施すべき演算を特定している部分のためのマップには、累算器を指定する乗算およびMAC命令のための余分の空間が必要である。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】米国特許出願公開第2002/0178203(A1)号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１９】
本発明の目的は、汎用マイクロプロセッサ上での精度が改善された計算を可能にすることである。
【課題を解決するための手段】
【００２０】
提供される発明によれば、添付の特許請求の範囲に記載されているマイクロプロセッサ、マイクロプロセッサ上での精度が改善された積の和計算のための方法、およびビデオデコーディングデバイスが提供される。従属請求項は、特定の実施形態に関している。本発明のこれらおよび他の態様の詳細について、以下で説明されている実施形態を参照して例を挙げて示す。
【図面の簡単な説明】
【００２１】
【図１】本発明によるマイクロプロセッサの概略実施形態例を示す図である。
【図２】本発明によるマイクロプロセッサの乗算ユニットの概略実施形態例を示す図である。
【図３】本発明によるビデオデコーディングデバイスの概略実施形態例を示す図である。
【図４】本発明による、精度が改善された積の和計算のための方法の第1の実施形態の流れ図の概略例を示す図である。
【図５】本発明による、精度が改善された積の和計算のための方法の第2の実施形態の流れ図の概略例を示す図である。
【発明を実施するための形態】
【００２２】
図において、全く同じ参照番号は、全く同じ構成要素または同様の構成要素に関している。
【００２３】
以下で説明されている本発明の実施形態は、当業者に知られている電子デバイスを使用して完全に、あるいは少なくとも部分的に実施することができる。基礎をなしている、以下で実例で示されている本発明の概念を理解する上で必要とは見なされない場合、詳細は省略されている。
【００２４】
図1を参照すると、本発明によるマイクロプロセッサの一実施形態の一例が示されている。説明および図面を簡潔にするために、当業者に知られているALU、負荷/記憶ユニット、等々などの他のユニットは示されていない。マイクロプロセッサ10は、多数の行先ビットを記憶し、かつ、乗算ユニット14に提供するようになされた少なくとも1つの汎用レジスタ12と、少なくとも乗算-高位(MULH)命令20および乗算-高位および累算(MACH)命令22を乗算ユニットに提供するように適合された制御ユニット18とを備えている。乗算ユニット14は、さらに、少なくとも第1および第2の原始オペランド24、26を受け取るようになされており、これらの原始オペランドは、それぞれ関連する数の原始ビットを有しており、また、該関連する数の原始ビットの和は行先ビットの数より多く、また、乗算ユニットは、多数の精度向上ビットを記憶し、かつ、提供するようになされた少なくとも1つのキャッシュエントリを備えたレジスタ拡張キャッシュ28に接続されており、また、結果オペランドの行先部分を汎用レジスタ12に記憶し、かつ、結果オペランドの精度向上部分をキャッシュエントリに記憶するように適合されている。結果オペランドは、乗算-高位(MULH)命令20を受け取ると乗算-高位演算によって生成され、また、乗算-高位および累算(MACH)命令22を受け取ると乗算-高位および累算演算によって生成される。
【００２５】
個別の累算レジスタを使用しなくてもよい。したがって示されているシステムには、行先として個別の累算器レジスタを指定するために必要な専用乗算/MACH命令を備える必要がなく、演算コード空間が節約され、かつ、命令解読が単純化される。
【００２６】
汎用マイクロプロセッサの場合、単純で、かつ、規則的なISA(命令セットアーキテクチャ)およびプログラミングモデルを維持することができ、したがって高水準言語コンパイラの構造を容易にすることができる。また、汎用マイクロプロセッサの場合、新しいユーザがアーキテクチャに速やかに馴れ親しむことができるよう促進することができ、したがって新しいユーザの生産性が改善される。提供されるマイクロコントローラは、余計な機能の複雑性を覆い隠すようになされている。ISAおよびプログラミングモデルを追加レジスタまたは命令を使用して拡張する必要はない。拡張精度DSP機能を必要としないユーザは、レジスタ拡張キャッシュおよびその機能の存在を知る必要はない。
【００２７】
示されているマイクロプロセッサは、任意の処理デバイスであってもよい。好ましくは、示されているマイクロプロセッサは、汎用マイクロプロセッサであってもよく、例えば原始オペランドおよび行先オペランドのための同じサイズの複数の汎用レジスタを備えたマイクロプロセッサであってもよい。
【００２８】
積の和計算のための命令列は、一連のMACH命令が後続するMULH命令で開始することができる。図に示されている概念によれば、すべて同じ行先レジスタ12を使用した、乗算-高位命令で始まり、一連のMACH命令が後続する積の和命令列のための拡張精度を達成することができる。積の和列の末端に、結果を汎用レジスタに転送するための余計な命令が不要であるため、性能が改善される。
【００２９】
結果オペランドの行先部分は、指定された汎用行先レジスタ12に書き込まれる高位ビットを備えることができる。結果オペランドの精度向上部分は、結果の下位ビットであってもよく、また、レジスタ拡張キャッシュ28のキャッシュエントリに記憶することができる。
【００３０】
乗算ユニット14は、少なくとも1つの入力を介して少なくとも第1および第2の原始オペランド24、26を受け取ることができる。乗算ユニット14は、複数の原始オペランドの各々のための専用入力を備えることができる。しかしながら、同じ入力を使用して逐次原始オペランドを提供することも可能であり、あるいは第1および第2の原始オペランドを同じ原始オペランドにすることも可能である。また、原始オペランドが一定の固定値を有していること、あるいは乗算が3つ以上の原始オペランドを使用して実施されることも、説明されているシステムの範囲内である。
【００３１】
行先ビットの数より多い関連する数の原始ビットの和は、行先ビットの数より多い和である。
【００３２】
図1に示されている実施形態例では、プロセッサセクションは、例えば32ビット幅の16個の汎用レジスタを備えたレジスタファイル30を備えている。示されている例には、例えば汎用レジスタ幅および汎用レジスタの数に対して特定の値が使用されている。本発明は、これらの特定の値に限定されない。レジスタファイル30の32ビット読取りポート34は、レジスタ拡張キャッシュ28を含んでいる乗算ユニット14に接続されている。乗算ユニットは、2つの32ビット原始オペランド24、26を受け取っている。乗算ユニット14の32ビット出力36は、レジスタファイル30の32ビット書込みポート38に接続されている。制御ユニット18の4ビット出力ポートは乗算ユニット14に接続されており、MULHおよびMACH命令の結果オペランドの4ビット行先識別子32を乗算ユニット14に発信することができる。この4ビットID32は、MULH/MACH演算毎に、レジスタファイル30の16個の汎用レジスタ12のうちの行先として使用可能な汎用レジスタ12を画定することができる。制御ユニット18の第2の出力は乗算ユニット14に接続することができ、また、MULHまたはMACH命令20、22を実行するかどうかを発信することができる。
【００３３】
示されている例でMULH命令20が実行されると、乗算ユニット14は、原始オペランド24および26の64ビット積として結果オペランドを計算することができる。行先部分すなわち64ビット積のうちの高位32ビットが乗算ユニット14のポート36を介して出力され、かつ、32ビット書込みポート38を介して、レジスタファイル30の指定された32ビット行先レジスタ12に書き込まれる。64ビット積のうちの下位32ビットは、レジスタ拡張キャッシュ28のエントリに書き込まれる。制御ユニット18から受け取った行先レジスタの4ビットIDは、例えば、同じキャッシュエントリのタグとしてレジスタ拡張キャッシュ28に記憶することができる。
【００３４】
乗算-高位および累算(MACH)演算には、少なくとも第1および第2の原始オペランド24、26を使用して乗算-高位(MULH)演算によって生成される中間結果オペランド、  および少なくとも1つの汎用レジスタ12に既に記憶されている先行行先部分と、既に少なくとも1つのキャッシュエントリに記憶されている対応する先行精度向上部分との連結の和を使用した結果オペランドの生成を含むことができる。MACH演算を実行すると、乗算の結果を、高位(つまり行先)ビットを備えた行先レジスタ12の内容と、下位(つまり精度向上)ビットを備えたキャッシュエントリの内容との連結に加えることにより、結果オペランドのための全精度を達成することができる。
【００３５】
何らかの他の命令が実行されると(制御および保全のための命令を除く)、レジスタ拡張キャッシュ28の内容を変更することはできない。
【００３６】
関連する数の原始ビットの和は、行先ビットおよび精度向上ビットの数の和と同じにすることができ、したがってキャッシュエントリはすべての精度向上ビットを記憶するように構成されている。他の実施形態では、関連する数の原始ビットの和は、行先ビットおよび精度向上ビットの数の和より多くすることができる。より狭い幅は、拡張部分の最下位ビットの一部を打ち切ることができる。それによりキャッシュエントリのサイズを小さくすることができ、したがってダイ面積が節約され、その一方で定義済み目標精度要求事項を満足することができる。
【００３７】
しかしながら、より広い幅も同じく本発明の範囲内であり、積の和計算がオーバフローする可能があるアルゴリズムのために場合によっては有用である。累算ステップの前に追加右けた送りを実施するMULHおよびMACH命令を使用することによってオーバフローを回避することができる。例えば8ビット右にけた送りされ、かつ、レジスタ拡張部分の最下位ビットとして8ビット追加される場合、最大256個の積の和でもオーバフローすることはなく、また、原始オペランドに関しては最大可能精度で計算される。
【００３８】
また、少なくとも2つの原始オペランドは、行先レジスタとして同じ幅を有していなくてもよい。いくつかの例は、原始オペランドの最大幅が行先レジスタの幅と同じである典型的な事例を示している。これらの2つの原始オペランドは、レジスタ、メモリから受け取ることができ、またはこれらの2つの原始オペランドは定数であってもよく、また、行先レジスタより狭いまたは広い任意の幅を有することができる。これらの2つの原始オペランドは、同じ幅を有していても、または有していなくてもよい。
【００３９】
これらの例に使用されている、乗算器出力のためのビットの数、すなわちビット幅は、積の幅が入力オペランド幅の和である符号なし乗算または混合符号乗算のための幅である。本発明は、この幅関係に限定されない。
【００４０】
マイクロプロセッサ10は、レジスタ識別子を個々に有する複数30の汎用レジスタ12を備えることができ、また、制御ユニット18は、複数のレジスタ識別子のうちの1つと合致する行先識別子32を乗算ユニット14に提供するように適合させることができ、乗算ユニットは、行先識別子32によって識別された汎用レジスタ12に行先部分を記憶するように適合されている。これらの複数30の汎用レジスタは、例えばレジスタファイルとして提供することができる。レジスタファイルとして提供することにより、利用可能な汎用レジスタを選択することができる。また、汎用レジスタを使用して乗算ユニットに原始オペランドを提供することも可能である。
【００４１】
また、レジスタ拡張キャッシュ28は、それぞれ複数のレジスタ識別子のうちの1つに対応するキャッシュエントリ識別子を使用して識別される複数のキャッシュエントリ(つまりキャッシュエントリは、識別子、例えば行先レジスタのレジスタ番号を使用してタグを振ることができる)を備えることができ、また、乗算ユニット14は、行先部分と、行先識別子32と合致するキャッシュエントリ識別子を有するキャッシュエントリによって提供される精度向上部分とを使用して結果オペランドを生成するように適合されている。
【００４２】
キャッシュエントリ識別子は、これらの識別子が全く同じであるか、あるいは互いに独自に接続されている場合、特定のレジスタ識別子に対応している、と言うことができる。
【００４３】
レジスタ拡張キャッシュ28は、個々の汎用レジスタ12毎にキャッシュエントリを備えることができる。しかしながら、より少ないキャッシュエントリを使用することができ、また、動的にキャッシュエントリ識別子を割り当てることも可能である。それによりキャッシュエントリの数を少なくすることができ、したがってキャッシュサイズを最小にすることができ、例えば同時に実行される期待積の和計算の最大または平均に対応するサイズにすることができる。
【００４４】
示されている例でMACH命令が実行されると、乗算ユニット14は、指定された行先レジスタの32ビット値をレジスタファイル30の読取りポート34から受け取る。乗算ユニットは、結果オペランド、つまり2つの32ビット原始オペランド24、26の64ビット積を計算することができる。
【００４５】
出力信号32を介して制御ユニット18によって提供される4ビット行先IDは、レジスタ拡張キャッシュ28のすべての有効キャッシュエントリの行先IDと比較することができる。
【００４６】
MACH命令が実行されると、レジスタ拡張キャッシュのヒット(同じ行先レジスタIDを有するエントリ)をチェックすることができる。キャッシュがヒットした場合、乗算の全精度結果が、高位ビットを保持している行先汎用レジスタ12と、下位ビットを保持しているキャッシュエントリとの連結に加えられる。示されている例では、ヒットした場合(合致する行先IDが見い出された場合)、結果オペランド、つまり64ビット積を、合致するレジスタ拡張キャッシュエントリからの32ビット値(連結の下位ビット)と、行先レジスタからの32ビット値(連結の高位ビット)との連結に加えることができる。次に、結果の下位32ビットをレジスタ拡張キャッシュ28の合致するエントリに記憶することができる。合致するキャッシュエントリの行先IDを変更することはできない。結果の高位32ビットは、乗算ユニット14のポート36を介して出力し、かつ、32ビットの広い書込みポート38を介してレジスタファイル30の32ビット行先レジスタに書き込むことができる。
【００４７】
結果オペランドの高位ビット、つまり累算結果は、対応する行先レジスタに記憶される。下位ビットは、ヒットしたキャッシュエントリに記憶される。ヒットしない場合(合致するIDが見い出されない場合)、行先部分、つまり示されている例では積の高位32ビットを行先レジスタ12からの値に加えることができ、また、32ビット結果は、乗算ユニット14のポート36を介して出力され、かつ、32ビットの広い書込みポート38を介してレジスタファイル30の32ビット行先レジスタ12に書き込まれる。したがってMACH演算のキャッシュがヒットしない場合、結果オペランドの行先部分、つまり乗算結果の高位ビットを行先レジスタに加えることができ、一方、下位ビットを捨てることができる。
【００４８】
積の和列が他の(最初の乗算-高位命令の後)乗算-高位命令によって中断されない場合、場合によっては単一のキャッシュエントリで十分である。複数のエントリを備えたレジスタ拡張キャッシュ28を使用することにより、複数の積の和列の命令を交互に配置することができる。
【００４９】
乗算-高位演算は、乗算-高位および否定演算を含むことができ、また、乗算-高位および累算演算は、乗算-高位否定および累算演算を含むことができる。「否定」オプションを備えた2つの変形態様は、例えば、サンプルまたは定数を正および負の両方の符号と共に使用することができるDSPアルゴリズムに関連付けることができる。両方の命令変形態様を有することにより、反対の符号を有する値を得るための余計な命令が節約される。
【００５０】
図1に示されているように、乗算ユニット14は、レジスタ拡張キャッシュ28を備えることができる。このレジスタ拡張キャッシュ28を備えることにより、個別のキャッシュおよび接続線路のためのダイ面積を節約することができる。しかしながら、マイクロプロセッサの乗算ユニットの中にレジスタ拡張キャッシュを備える必要はない。レジスタ拡張キャッシュは、任意の他のユニットの中に配置することも、あるいは個別のユニットにすることも可能である。
【００５１】
また、乗算-高位演算および乗算-高位および累算演算は、単一命令多重データ演算として実施することも可能である。多くのマイクロプロセッサは、データ経路エレメント(レジスタ、ALU、乗算器など)を複数のより小さい片に分割するSIMD(単一命令多重データ)命令を有することができる。それによりビデオおよび図形アルゴリズムの性能を高くすることができ、例えば16ビットの分解能で十分である。このようなプロセッサアーキテクチャの場合、方向(ベクトル成分)毎に拡張レジスタを使用することができる。32ビットレジスタを備えたプロセッサは、2方向SIMD命令を使用することによってそれらの性能を2倍にすることができる。64ビットレジスタを備えたプロセッサは、4方向SIMD命令を使用することによってそれらの性能を4倍にすることができる。
【００５２】
次に、同じく図2を参照すると、本発明によるマイクロプロセッサ10の乗算ユニット14の一実施形態の一例が示されている。図2は、単一のエントリレジスタ拡張キャッシュ28を備えた乗算ユニットの一実施態様例を示したものである。説明および図面を簡潔にするために、パイプラインレジスタは示されておらず、本発明に関連するI/O信号およびデータ経路のみが乗算ユニットと共に示されている。図1に示されている例と同様、原始オペランド幅および行先オペランド幅(32ビット)、ならびに行先IDの幅(原始オペランドおよび行先オペランドのための16個の汎用レジスタをアドレス指定するための4ビット)に対して特定の値が使用されている。しかしながら、これらの値は例であり、容易に変更することができることに留意されたい。
【００５３】
示されている乗算ユニット例は、乗算のための原始オペランドとして2つの32ビット入力信号40、42を備えることができる。第3の32ビット入力信号44は、演算の前の行先レジスタの値であってもよい。第3の32ビット入力信号44は、MACH演算のための原始オペランドとして使用することができる。入力信号46は制御信号であってもよい。入力信号46は、乗算ユニット例がMULH演算またはMACH演算を実施するかどうかを決定することができる。4ビット入力信号48は行先IDであってもよい。示されている乗算ユニットは、32ビット出力値50を生成することができる。
【００５４】
示されている例では、乗算ユニットには、以下のコンポーネントが含まれている。64ビット積66を計算する32・32ビット乗算器52、64ビット加算器54、64ビットの2入力マルチプレクサ56、32ビットの2入力マルチプレクサ58、拡張キャッシュレジスタであってもよい32ビットレジスタ60、4ビットレジスタ62および4ビット同等性比較器64。図2に示されている例では、乗算ユニット例のコンポーネントは、以下のように接続されている。乗算器52が2つの32ビット入力値40および42を受け取る。加算器54が乗算器52の出力66およびマルチプレクサ56の出力を受け取る。加算器の64ビット出力68が高位32ビット50および下位32ビット70に分割される。高位32ビットは、乗算ユニットの出力信号50である。64ビットの2入力マルチプレクサ56は、常時ゼロ値を第1の入力上で受け取る。第2の64ビット入力は、高位32ビットとして入力信号44を受け取り、また、マルチプレクサ58の出力72を下位32ビットとして受け取る。32ビットレジスタ60が、加算器54の出力68の下位32ビット70を受け取る。4ビットレジスタ62が4ビット入力信号48を受け取る。32ビットの2入力マルチプレクサ58は、第1の入力としてレジスタ60の32ビット出力を受け取り、また、第2の入力として常時ゼロ値を受け取る。4ビット同等性比較器64は、第1の入力として4ビット入力値48を受け取り、また、第2の入力としてレジスタ62の出力を受け取る。比較器の出力は、マルチプレクサ58の選択入力に接続されている。制御入力信号46は、マルチプレクサ56の選択入力、レジスタ62のイネーブル入力およびレジスタ60の第1のイネーブル入力に接続されている。
【００５５】
レジスタ60および62は、この乗算ユニット例の単なる記憶素子にすぎず、単一キャッシュエントリのタグおよびデータ部分を記憶する。他のコンポーネントは組合せコンポーネントであってもよい。これらの2つのレジスタは、クロック信号(図示せず)によって駆動され、演算の終了時にのみ、また、これらの2つのレジスタのイネーブル入力が表明された場合にのみ、新しい値を獲得する。レジスタ62は、制御入力46によって駆動される単一のイネーブル入力を有している。レジスタ60は、2つのイネーブル入力をOR構成で有している。レジスタ60は、制御入力46が表明されるか、あるいは入力48とレジスタ62の値が同じであることを比較器64の出力が示すとイネーブルされる。
【００５６】
示されている乗算ユニット例は、少なくとも3つのタイプの演算を実施することができる。これらの3つの演算のうちのどの演算を実施するかは、入力信号46によって制御され、また、比較器回路64の出力によって制御される。
【００５７】
MULH命令が実行されるとタイプ1の演算が実施される。制御入力46は、演算の終了時にマルチプレクサ56の常時ゼロ入力を選択し、レジスタ60および62の更新をイネーブルする。入力値44は無視される(不要である)。比較器64の出力も無視される(不要である)。加算器54は、乗算器52の64ビット出力66にゼロを加える。加算器の出力68は乗算器52の出力66に等しい。出力50は出力68の高位32ビットであり、乗算器出力66の高位32ビットに等しい。演算の終了時に、乗算器出力66の下位32ビットに等しい加算器出力68の下位32ビット70がレジスタ60に記憶される。4ビット行先ID48はレジスタ62に記憶される。
【００５８】
MACH命令が実行され、かつ、4ビット入力値48および4ビットレジスタ62の値が異なっている場合、つまりキャッシュミス事象の場合、タイプ2の演算が実施される。比較器64の出力は、マルチプレクサ58の常時ゼロ入力を選択し、かつ、入力46と共にレジスタ60の更新を不能にする(両方のイネーブル入力が表明解除される)。制御入力46は、レジスタ62の更新を不能にし、かつ、入力信号44とマルチプレクサ58の出力72との連結であるマルチプレクサ56の第2の入力を選択する。加算器54は、乗算器出力66の高位32ビットに32ビット入力信号44を加える。結果68の高位32ビットは出力値50である。
【００５９】
示されている例でMACH命令が実行され、かつ、4ビット入力値48および4ビットレジスタ62の値が同じである場合、つまりキャッシュヒット事象の場合、タイプ3の演算が実施される。比較器64の出力はマルチプレクサ58の第1の入力を選択し、マルチプレクサ58の出力72がレジスタ60の値になる。また、比較器64の出力は、演算の終了時にレジスタ60の更新をイネーブルする。制御入力46は、レジスタ62の更新を不能にし、かつ、入力信号44と、レジスタ60の値であるマルチプレクサ58の出力72との連結であるマルチプレクサ56の第2の入力を選択する。加算器54は、乗算器の64ビット出力66に、32ビット入力信号44(連結の高位ビット)とレジスタ60の32ビット値との64ビット連結を加える。結果68の高位32ビットは出力値50である。結果68の下位32ビット70は、演算の終了時にレジスタ60に記憶される。レジスタ62の内容は不変を維持する。
【００６０】
例えばキャッシュエントリのための有効フラグのような余計な制御機構あるいは初期化手順を不要にすることができる。
【００６１】
複数のキャッシュエントリを備えたレジスタ拡張キャッシュの場合、拡張およびIDレジスタに加えて、場合によっては、キャッシュエントリの各々に対して少なくとも有効フラグが必要である。初期化手順は、システムスタートアップ時にすべてのエントリを無効にすることができる。MULH命令が実行される際に重ね書きされるエントリを選択する方法の様々な機構が知られている(例えば最も過去に使用された)。
【００６２】
一実施形態では、レジスタ拡張キャッシュは、汎用レジスタの数に等しい多数のエントリを備えることができる。個々の汎用レジスタには特定の拡張レジスタを割り当てることができ、行先IDの記憶を不要にすることができ、また、単一のエントリの場合のように有効フラグを不要にすることができる。
【００６３】
示されているマイクロプロセッサは、逆離散余弦変換(IDCT)計算、例えば8×8点IDCTを実施するように構成することができる。好ましいことには、IEEE-1180-1990コンプライアンス試験による精度を有する逆離散余弦変換計算を可能にするために精度向上ビットの数を選択することができる。
【００６４】
例えば、Moving Picture Experts Groupによって発行されたMPEG1、MPEG2およびMPEG4-SP/ASPなどのいくつかのビデオコーデックには、デコーディングプロセスのための8×8点IDCT計算が使用されている。ソフトウェアビデオデコーダの場合、IDCT計算は、総プロセッサ負荷の高いシェアを有することがある。IEEE-1180-1990コンプライアンス試験は、例えばMPEGビデオデコーディングのために使用される8×8点IDCT計算の結果に対する最低精度を規定している。しかしながら、16ビット累算を使用してIEEE-1180-1990迎合IDCT出力を計算することはできない。迎合的であるためには、32ビットレジスタを備えたプロセッサは、SIMD命令を使用することは一切できず、また、64ビットレジスタを備えたプロセッサは、2方向SIMD命令を使用しなければならない。
【００６５】
図3に示されているように、本発明によるビデオデコーディングデバイス74の概略実施形態例は、上で説明したマイクロプロセッサ10を備えることができる。一例として、32ビットレジスタを有する本発明によるマイクロプロセッサは、2方向SIMD命令を使用して、追加レジスタまたはより広いレジスタを備えた汎用プロセッサのプログラミングモデルを拡張することなくIEEE-1180-1990迎合IDCTを計算することができ、また、64ビットを有するプロセッサは、4方向SIMD命令を使用して、同じく追加レジスタまたはより広いレジスタを備えた汎用プロセッサのプログラミングモデルを拡張することなくIEEE-1180-1990迎合IDCTを計算することができる。
【００６６】
次に図4を参照すると、本発明による、精度が改善された積の和計算のための方法の第1の実施形態の流れ図の概略例が示されている。示されている方法によれば、マイクロプロセッサ上での精度が改善された積の和計算のための方法の一部として、説明されているマイクロプロセッサの利点および特徴を実施することができる。これは、図5にも参照されている。
【００６７】
線図には、開始状態76および終了状態78が含まれている。
【００６８】
この方法は、多数の行先ビットを記憶し、かつ、乗算ユニットに提供するようになされた少なくとも1つの汎用レジスタと、多数の精度向上ビットを記憶し、かつ、提供するようになされた少なくとも1つのキャッシュエントリを備えたレジスタ拡張キャッシュとを備えたマイクロプロセッサ上での精度が改善された積の和計算のための方法である。この方法は、乗算-高位命令を受け取るステップ80と、少なくとも第1および第2の原始オペランドを受け取るステップ82であって、これらの原始オペランドがそれぞれ関連する数の原始ビットを有し、また、該関連する数の原始ビットの和が行先ビットの数より多いステップ82と、少なくとも第1および第2の原始オペランドを使用して乗算-高位演算を実行することによって結果オペランドを生成するステップ84と、結果オペランドの行先部分を汎用レジスタに記憶し、かつ、中間結果オペランドの精度向上部分をキャッシュエントリに記憶するステップ86とを含むことができ、また、乗算-高位および累算列のコンポーネント毎に、乗算-高位および累算命令を受け取るステップ90と、少なくとも第1および第2の原始オペランドを受け取るステップ92と、少なくとも第1および第2の原始オペランドを使用して乗算-高位演算によって生成される新しい結果オペランド、および少なくとも1つの汎用レジスタに既に記憶されている先行行先部分と、少なくとも1つのキャッシュエントリに既に記憶されている対応する先行精度向上部分との連結の和を使用して、乗算-高位および累算演算を実行することによって結果オペランドを更新するステップ94と、結果オペランドの更新された行先部分を汎用レジスタに記憶し、かつ、結果オペランドの更新された精度向上部分をキャッシュエントリに記憶するステップ96とを含むことができる。
【００６９】
原始オペランドは、積の和の異なるコンポーネントを処理する際に異なる値を有することができることに留意されたい。受け取ったMACH命令の列は、先行するMULH命令と関連付けることができる。ステップ90、92、94および96は、MACH命令の列のすべてのコンポーネントに対して実行することができる。この方法は、対応するMACH命令を受け取らなくなると終了することができる。さらに、積の和列の長さ、つまり列のコンポーネントの数についての事前知識を不要にすることができ、したがって例えば専用コマンドの導入を回避することができることに留意されたい。
【００７０】
この方法は、さらに、レジスタ識別子を個々に有する複数の汎用レジスタと、複数のレジスタ識別子のうちの1つに対応するキャッシュエントリ識別子を使用してそれぞれ識別される複数のキャッシュエントリを備えたレジスタ拡張キャッシュとを備えたマイクロプロセッサに適用することができる。この方法は、さらに、複数のレジスタ識別子のうちの1つと合致する行先識別子を乗算ユニットに提供するステップと、行先部分と、行先識別子と合致するキャッシュエントリ識別子を有するキャッシュエントリによって提供される精度向上部分とを使用して結果オペランドを生成するステップとを含むことができる。また、結果オペランドの行先部分を汎用レジスタに記憶し、かつ、中間結果オペランドの精度向上部分をキャッシュエントリに記憶するステップ86には、行先識別子によって識別された汎用レジスタに行先部分を記憶するステップが含まれている。
【００７１】
図5を参照すると、本発明による、精度が改善された積の和計算のための方法の第2の実施形態の流れ図の概略例が示されている。
【００７２】
線図には、開始状態100および終了状態102が含まれている。
【００７３】
示されている例には単一のエントリレジスタ拡張キャッシュが使用されている。説明には以下のレジスタおよび変数名が使用されている。
S0  原始オペランド0
S1  原始オペランド1
OPT  演算タイプ、MULHまたはMACH演算を実施するかどうかを定義する制御値
RA  レジスタアレイ
RA[i]  レジスタアレイRAのi番目のレジスタ
i  レジスタアレイRAのi番目のレジスタの指標
EXR  拡張レジスタ
IDR  IDレジスタ
PD  原始オペランドS0およびS1の積または否定積
PDL  積PDの下位ビット
PDH  積PDの高位ビット
CON  EXR(下位ビット)とRA[i](高位ビット)の連結
SUM  PDとCONの和
SUML  SUMの下位ビット
SUMH  SUMの高位ビット
【００７４】
ステップ104で値S0、S1、iおよびOPTが受け取られる。ステップ106で原始オペランドS0およびS1の積または否定積PDが計算される。ステップ108でOPTがMULHまたはMACH演算を定義しているかどうかチェックされる。MULHの場合、プロセスはステップ110で継続される。MACHの場合、プロセスはステップ112で継続される。
【００７５】
ステップ110でレジスタアレイRAのi番目のレジスタRA[i]の指標iがIDレジスタIDRに記憶される。積PDの下位ビットPDLは拡張レジスタEXRに記憶される。積PDの高位ビットPDHはレジスタアレイRAのi番目のレジスタRA[i]に記憶される。プロセスは、このステップの後に終了する102。
【００７６】
ステップ112でレジスタアレイRAのi番目のレジスタRA[i]の値が受け取られる。ステップ114で、受け取った指標iがIDレジスタIDRの値と同じであるかどうかチェックされる。受け取った指標iがレジスタIDRの値と異なっている場合、プロセスはステップ116で継続される。受け取った指標iがレジスタIDRの値と同じである場合、プロセスはステップ118で継続される。
【００７７】
ステップ116で積PDの高位ビットPDHがレジスタアレイRAのi番目のレジスタRA[i]の値に加えられる。結果は同じレジスタRA[i]に記憶される。示されているプロセスは、このステップの後に終了することができる102。
【００７８】
ステップ118で、拡張レジスタEXRの値とレジスタアレイRAのi番目のレジスタRA[i]の値の連結CONが生成される。EXRは連結の下位ビットであり、RA[i]は連結の高位ビットである。
【００７９】
ステップ120で積PDと連結CONの和SUMが計算される。EXRとRA[i]の連結のため、PDLとEXRの加算によって生成されるけた上げがPDHとRA[i]の和に伝搬される。
【００８０】
ステップ122でSUMの下位ビットSUMLが拡張レジスタEXRに記憶される。SUMの高位ビットSUMHは、レジスタアレイRAのi番目のレジスタRA[i]に記憶される。プロセスは、このステップの後に終了することができる102。
【００８１】
さらに、コンピュータプログラム製品は、プログラマブル装置上で実行されると、上で説明した方法のステップを実行するためのコード部分を備えることができる。コンピュータプログラムは、少なくとも一時的に情報処理システムに結合されるコンピュータ可読媒体上に提供することができる。
【００８２】
論理ブロックと論理ブロックの間の境界は、説明のための境界にすぎず、代替実施形態は、論理ブロックと論理ブロックの間で機能を別様に分散させることができることに留意されたい。本発明は、ハードウェアの中で実施される物理的デバイスに限定されず、プログラムコードを使用して動作させることによってデバイスの所望の機能を実施することができる任意のプログラマブルデバイスの中で実施することも可能である。明細書および図面に示されているのは実施形態例であり、本発明を示されているこれらの例に限定するものではない。「備えている」という語は、特許請求の範囲で言及されている構成要素またはステップ以外の構成要素またはステップの存在を排他するものとして解釈してはならない。
【００８３】
以上、本発明について、特定の構造、デバイスおよび方法に関連して説明したが、当業者には、本明細書における説明に基づいて、本発明は単にこのような例に限定されないこと、また、本発明のすべての範囲は、特許請求の範囲によって適切に決定されることは理解されよう。
【符号の説明】
【００８４】
10  マイクロプロセッサ
12  汎用レジスタ
14  乗算ユニット
18  制御ユニット
20  乗算-高位(MULH)命令
22  乗算-高位および累算(MACH)命令
24、26  原始オペランド
28  レジスタ拡張キャッシュ
30  レジスタファイル
32  4ビット行先識別子(出力信号)
34  32ビット読取りポート
36  32ビット出力(ポート)
38  32ビット書込みポート
【図１】
0005456167.tif 000003
【図２】
0005456167.tif 000004
【図３】
0005456167.tif 000005
【図４】
0005456167.tif 000006
【図５】
0005456167.tif 000007