(57)【要約】単一命令複数データ（ＳＩＭＤ）演算を行なうための密結合デュアル１６ビットの積和演算（ＭＡＣ）ユニットが、蓄積依存性ペナルティーを解決するためにパイプライン中の別の演算へ中間結果を転送し得る。ＭＡＣユニットが、３２ビット×３２ビットの演算を行なうために更に使用され得る。
2005532601.tif 000002
【特許請求の範囲】
【請求項１】
パイプライン中の第１積和演算において第１圧縮演算を行なうステップと、
前記第１積和演算中の第１圧縮演算において２つ以上の中間ベクトルを生成するステップと、
前記２つ以上の中間ベクトルのそれぞれの少なくとも一部を前記パイプライン中の第２積和演算に転送するステップと
を備える、方法。
【請求項２】
前記２つ以上の中間ベクトルのそれぞれの少なくとも一部を転送するステップが、前記２つ以上の中間ベクトルのそれぞれの下位部分を転送するステップを備える、請求項１に記載の方法。
【請求項３】
前記第１圧縮演算を行なうステップが、第１の複数の部分積を第１和ベクトルおよび第１キャリ・ベクトルへ圧縮し、第２の複数の部分積を第２和ベクトルおよび第２キャリ・ベクトルへ圧縮するステップとを備える、請求項１に記載の方法。
【請求項４】
前記２つ以上の中間ベクトルを生成するステップが、前記第１和ベクトル、前記第２和ベクトル、前記第１キャリ・ベクトルおよび前記第２キャリ・ベクトルを、中間和ベクトルおよび中間キャリ・ベクトルへ圧縮するステップを備える、請求項１に記載の方法。
【請求項５】
前記転送するステップが、前記２つ以上の中間ベクトルのそれぞれの少なくとも一部をウォリスのトリー圧縮ユニットへ転送するステップを備える、請求項１に記載の方法。
【請求項６】
機械実行命令を格納する機械可読メディアを含む物品であって、前記命令が機械に、
パイプライン中の第１積和演算において第１圧縮演算を行なわせ、
前記第１積和演算中の第１圧縮演算において２つ以上の中間ベクトルを生成させ、
前記２つ以上の中間ベクトルのそれぞれの少なくとも一部を前記パイプライン中の第２積和演算に転送させる
物品。
【請求項７】
前記機械に前記２つ以上の中間ベクトルのそれぞれの少なくとも一部を転送させる命令が、前記機械に前記２つ以上の中間ベクトルのそれぞれの下位ビットを転送させる命令を備える、請求項６に記載の物品。
【請求項８】
前記機械に第１圧縮演算を行なわせる命令が、前記機械に第１の複数の部分積を第１和ベクトルおよび第１キャリ・ベクトルへ圧縮させ、第２の複数の部分積を第２和ベクトルおよび第２キャリ・ベクトルへ圧縮させる命令とを備える、請求項６に記載の物品。
【請求項９】
前記機械に前記２つ以上の中間ベクトルを生成させる命令が、前記機械に、前記第１和ベクトル、前記第２和ベクトル、前記第１キャリ・ベクトルおよび前記第２キャリ・ベクトルを、中間和ベクトルおよび中間キャリ・ベクトルへ圧縮させる命令を備える、請求項６に記載の物品。
【請求項１０】
前記機械に転送させる命令が、前記機械に、前記２つ以上の中間ベクトルのそれぞれの少なくとも一部をウォリスのトリー圧縮ユニットへ転送させる命令を備える、請求項６に記載の物品。
【請求項１１】
積和演算の第１ウォリスのトリー圧縮段階において、第１の複数の部分積を第１和ベクトルおよび第１キャリ・ベクトルへ圧縮し、第２の複数の部分積を第２和ベクトルおよび第２キャリ・ベクトルへ圧縮するステップと、
前記第１和ベクトル、前記第２和ベクトル、前記第１キャリ・ベクトルおよび前記第２キャリ・ベクトルを、第１中間和ベクトルおよび第１中間キャリ・ベクトルへ圧縮するステップと、
積和演算の第２段階において、前記中間和ベクトルおよび第３の複数の部分積を圧縮し、前記中間キャリ・ベクトルおよび第４の複数の部分積を圧縮するステップと
を備える、方法。
【請求項１２】
前記積和演算が、単一命令複数データ（ＳＩＭＤ）演算を含む、請求項１１に記載の方法。
【請求項１３】
第１のペアのオペランドから前記第１の複数の部分積を生成するステップと、
第２のペアのオペランドから前記第２の複数の部分積を生成するステップと、
第３のペアのオペランドから前記第３の複数の部分積を生成するステップと、
第４のペアのオペランドから前記第４の複数の部分積を生成するステップと
を更に備える、請求項１１に記載の方法。
【請求項１４】
パイプライン中の第２積和演算へ前記中間和ベクトルおよび前記中間キャリ・ベクトルを転送するステップを更に備える、請求項１１に記載の方法。
【請求項１５】
前記転送するステップが、前記第２積和演算における累積加算データ依存性を除去するステップを備える、請求項１４に記載の方法。
【請求項１６】
機械実行命令を格納する機械可読メディアを含む物品であって、前記命令が機械に、
積和演算の第１ウォリスのトリー圧縮段階において、第１の複数の部分積を第１和ベクトルおよび第１キャリ・ベクトルへ圧縮させ、第２の複数の部分積を第２和ベクトルおよび第２キャリ・ベクトルへ圧縮させる命令と、
前記第１和ベクトル、前記第２和ベクトル、前記第１キャリ・ベクトルおよび前記第２キャリ・ベクトルを、第１中間和ベクトルおよび第１中間キャリ・ベクトルへ圧縮させる命令と、
積和演算の第２段階において、前記中間和ベクトルおよび第３の複数の部分積を圧縮し、前記中間キャリ・ベクトルおよび第４の複数の部分積を圧縮させる命令と
を備える、物品。
【請求項１７】
前記積和演算が、単一命令複数データ（ＳＩＭＤ）演算を含む、請求項１６に記載の物品。
【請求項１８】
前記機械に、
第１のペアのオペランドから前記第１の複数の部分積を生成させ、
第２のペアのオペランドから前記第２の複数の部分積を生成させ、
第３のペアのオペランドから前記第３の複数の部分積を生成させ、
第４のペアのオペランドから前記第４の複数の部分積を生成させ
る命令を更に備える、請求項１６に記載の物品。
【請求項１９】
前記機械に、パイプライン中の第２積和演算へ前記中間和ベクトルおよび前記中間キャリ・ベクトルを転送させる命令を更に備える、請求項１６に記載の物品。
【請求項２０】
前記機械に転送させる命令が、前記機械に前記第２積和演算における累積加算データ依存性を除去させる命令を備える、請求項１６記載の物品
【請求項２１】
積和演算の第１および第２段階においてベクトルを圧縮する第１および第２ウォリスのトリー圧縮ユニットと、
前記積和演算の前記第１段階において前記第１および第２ウォリスのトリー圧縮ユニットから出力される複数のベクトルを２つの中間ベクトルへと圧縮するコンプレッサと、
前記コンプレッサの出力からマルチプレクサーの入力までのデータ経路と
を備え、
前記マルチプレクサーが、前記２つの中間ベクトルの中の一つを前記積和演算の前記第２段階において前記第１および第２ウォリスのトリー圧縮ユニットの中の一つに選択的に入力する、
装置。
【請求項２２】
デュアル積和演算ユニットを更に備える、請求項２１に記載の装置。
【請求項２３】
前記複数のベクトルが、第１和ベクトル、第２和ベクトル、第１キャリ・ベクトルおよび第２キャリ・ベクトルを含む、請求項２１に記載の装置。
【請求項２４】
前記コンプレッサが、は４：２ベクトル・コンプレッサを含む、請求項２１に記載の装置。
【請求項２５】
前記マルチプレクサーが、前記第１ウォリスのトリー圧縮ユニットに接続される出力を有する第１マルチプレクサーと、前記第２ウォリスのトリー圧縮ユニットに接続される出力を有する第２マルチプレクサーとを備える、請求項２１に記載の装置。
【請求項２６】
静的ランダムアクセス記憶装置と、
前記静的ランダムアクセス記憶装置に接続されるプロセッサと
を備え、
前記プロセッサがデュアル積和演算ユニットを備え、
前記ユニットが、
積和演算の第１および第２段階においてベクトルを圧縮する第１および第２ウォリスのトリー圧縮ユニットと、
前記積和演算の前記第１段階において前記第１および第２ウォリスのトリー圧縮ユニットから出力される複数のベクトルを２つの中間ベクトルへと圧縮するコンプレッサと、
前記コンプレッサの出力からマルチプレクサーの入力までのデータ経路と
を備え、
前記マルチプレクサーが、前記２つの中間ベクトルの中の一つを前記積和演算の前記第２段階において前記第１および第２ウォリスのトリー圧縮ユニットの中の一つに選択的に入力する、
システム。
【請求項２７】
前記マルチプレクサーは、前記第１ウォリスのトリー圧縮ユニットに接続される出力を有する第１マルチプレクサーと、前記第２ウォリスのトリー圧縮ユニットに接続される出力を有する第２マルチプレクサーとを備える、請求項２６に記載のシステム。
【請求項２８】
４つのｎビット演算として、第１および第２の２ｎビットオペランドの積和演算を実行するステップを備える、方法。
【請求項２９】
前記実行するステップが、
前記第１オペランドの下位ｎビットおよび前記第２オペランドの下位ｎビットから部分積ベクトルを生成するステップと、
前記第１オペランドの上位ｎビットおよび前記第２オペランドの下位ｎビットから部分積ベクトルを生成するステップと、
前記第１オペランドの上位ｎビットおよび前記第２オペランドの上位ｎビットから部分積ベクトルを生成するステップと、
前記第１オペランドの下位ｎビットおよび前記第２オペランドの上位ｎビットから部分積ベクトルを生成するステップと
を備える、請求項２８に記載の方法。
【請求項３０】
前記第１オペランドの上位ｎビットおよび前記第２オペランドの下位ｎビットから生成された前記部分積を２つの中間ベクトルへと圧縮するステップと、
前記中間ベクトルを左にｎビットだけシフトするステップと
を更に備える、請求項２８に記載の方法。
【請求項３１】
前記実行するステップが、密結合デュアルｎビット積和演算ユニット上で積和演算を実行するステップを備える、請求項２８に記載の方法。
【請求項３２】
ｎ＝１６である、請求項２８に記載の方法。
【請求項３３】
機械実行命令を格納する機械可読メディアを含む物品であって、前記命令が機械に、
４つのｎビット演算として、第１および第２の２ｎビットオペランドの積和演算を実行させる、物品。
【請求項３４】
前記機械に実行させる命令が、
前記第１オペランドの下位ｎビットおよび前記第２オペランドの下位ｎビットから部分積ベクトルを生成させ、
前記第１オペランドの上位ｎビットおよび前記第２オペランドの下位ｎビットから部分積ベクトルを生成させ、
前記第１オペランドの上位ｎビットおよび前記第２オペランドの上位ｎビットから部分積ベクトルを生成させ、
前記第１オペランドの下位ｎビットおよび前記第２オペランドの上位ｎビットから部分積ベクトルを生成させ
る命令を備える、請求項３３に記載の物品。
【請求項３５】
前記機械に
前記第１オペランドの上位ｎビットおよび前記第２オペランドの下位ｎビットから生成された前記部分積を２つの中間ベクトルへと圧縮させ、
前記中間ベクトルを左にｎビットだけシフトさせ
る命令を更に備える、請求項３３に記載の物品。
【請求項３６】
前記機械に実行させる命令が、密結合デュアルｎビット積和演算ユニット上で積和演算を実行させる命令を備える、請求項３３に記載の物品。
【請求項３７】
ｎ＝１６である、請求項３３に記載の物品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、単一命令複数データ（ＳＩＭＤ）命令用の積和演算（ＭＡＣ）ユニットに関する。
【背景技術】
【０００２】
デジタルシグナルプロセッサー（ＤＳＰ）は、ＳＩＭＤ（単一命令複数データ）、即ち並列データ・プロセッサとして作動し得る。ＳＩＭＤ演算では、単一の指示が多数の処理要素に送信され、多数の処理要素は、異なるデータに対して同一の演算を行なう。ＳＩＭＤ命令は、加算、減算、乗算、積和演算（ＭＡＣ）のような幾つかの種類の標準演算、および、クリッピングや双一次の補間演算の実行のような多くの特定の命令を提供する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
多くのスピーチ・コーデックを含む多くのＤＳＰアプリケーションは、高性能１６ビットの積和演算（ＭＡＣ）演算を必要とする。これらの１６ビットのＤＳＰアプリケーションにおいて高い性能を達成するために、６４ビットのＳＩＭＤ命令が導入され得る。４つの１６ビットのデータ・アイテムが６４ビットのレジスタに同時にロードされ得るので、より効率的にメディアストリームを扱うために、およびレジスタ圧力やメモリ・トラフックを減少させるために６４ビットのＳＩＭＤ命令が使用され得る。
【０００４】
高い性能を達成するためには、高スループットは重要な要素であるが、ワイヤレス／携帯機器製品用のＤＳＰを設計する際には、消費電力に対する配慮が更に重要となり得る。従って、ＤＳＰの使用に際して、高性能かつ低消費電力のＭＡＣアーキテクチャが望まれ得る。
【発明を実施するための最良の形態】
【０００５】
図１は、一実施形態における積和演算（ＭＡＣ）ユニット１００を示す。ＭＡＣユニット１００は、多くの異なるＳＩＭＤ（単一命令複数データ）演算を行なうために使用され得る。
【０００６】
ＭＡＣユニット１００は、密結合デュアル１６ビットのＭＡＣアーキテクチャを備えて良い。そのようなＭＡＣユニットによって実行され得る１６ビットのＭＡＣ  ＳＩＭＤ演算２００が、図２において概念的に示される。２つの６４ビットのレジスタの内容である２０２（ｗＲｎ）および２０４（ｗＲｍ）は、４対の１６ビット値、Ａ０〜Ａ３（ｗＲｎ）およびＢ０〜Ｂ３（ｗＲｍ）として扱われ得る。ｗＲｎの第１の１６ビットから第４の１６ビットまでが、ｗＲｍの第１の１６ビットから第４の１６ビットまでのそれぞれと乗ぜられる。その後、４つの乗算された結果Ｐ０〜Ｐ３は、６４ビットのレジスタ２０６（ｗＲｄ）の値に加算され、その結果がレジスタ２０６へ送られる。
【０００７】
ＭＡＣ演算２００は、４つの実行段階で実行され得る。即ち、（１）Ｂ１とＢ０のブースエンコードおよびウォリスのトリー圧縮、（２）Ｂ３とＢ２のブースエンコードおよびウォリスのトリー圧縮、（３）４：２圧縮、および結果の下位３２ビットの加算、そして（４）結果の上位３２ビットの加算、である。これらの４つの段階は、ＣＳＡ０、ＣＳＡ１、ＣＬＡ０およびＣＬＡ１段階としてそれぞれ参照され得る。
【０００８】
図３ａ〜図３ｃは、一実施形態におけるＭＡＣ演算２００のインプリメンテーション３００について記述するフローチャートである。ＣＳＡ０段階において、ＭＵＸ＆ブース・エンコーダ・ユニット１０２がＢ０（１６ビット）を選択し、これらのビットをエンコードする（ブロック３０２）。複数の制御信号が生成され、そのそれぞれが、セット｛０、−Ａ０、−２Ａ０、Ａ０、２Ａ０｝から部分積ベクトルを選択する。９つの部分積ベクトル（Ｐａ０〜Ｐａ８）が生成され、ＭＵＸアレイ１０４に引き渡される（ブロック３０４）。全ての９つの部分積ベクトル、およびレジスタ２０６（ｗＲｄ）の値の下位３２ビットは、ウォリスのトリーユニット１０６によって２つのベクトルに圧縮される（ブロック３０６）。２つのベクトルは和ベクトルおよびキャリ・ベクトルを含み、これらは、和ベクトル・フリップフロップ（ＦＦ）１０８およびキャリ・ベクトルＦＦ１１０にそれぞれ格納される。
【０００９】
ＭＵＸ＆ブース・エンコーダ・ユニット１１２はＢ１（１６ビット）を選択し、これらのビットをエンコードする（ブロック３０８）。複数の制御信号が生成され、そのそれぞれが、セット｛０、−Ａ１、−２Ａ１、Ａ１、２Ａ１｝から部分積ベクトルを選択する。９つの部分積ベクトル（Ｐｂ０〜Ｐｂ８）が生成され、ＭＵＸアレイ１１４に引き渡される  （ブロック３１０）。全ての９つの部分積ベクトル、および零ベクトルが、ウォリスのトリーユニット１１６によって２つのベクトルに圧縮される（ブロック３１２）。２つのベクトルは和ベクトルおよびキャリ・ベクトルを含み、これらは、和ベクトルＦＦ１１８およびキャリ・ベクトルＦＦ１２０にそれぞれ格納される。
【００１０】
ＣＳＡ１段階において、ＣＳＡ０段階からの和ベクトルおよびキャリ・ベクトルＦＦ１０８、１１０、１１８および１２０からの４つのベクトルが、ＭＵＸ＆４：２圧縮ユニット１２２によって２つのＶｓ０およびＶｃ０に圧縮される（ブロック３１４）。ＭＵＸ＆ブース・エンコーダ・ユニット１０２はＢ２（１６ビット）を選択し、これらのビットをエンコードする（ブロック３１６）。複数の制御信号が生成され、そのそれぞれが、セット｛０、−Ａ２、−２Ａ２、Ａ２、２Ａ２｝から部分積ベクトルを選択する。９つの部分積ベクトルが生成される（ブロック３１８）。全ての９つの部分積ベクトル、およびベクトルＶｓ０は、ウォリスのトリーユニット１０６によって２つのベクトルに圧縮される（ブロック３２０）。２つのベクトルは和ベクトルおよびキャリ・ベクトルを含み、これらは、和ベクトルＦＦ１０８およびキャリ・ベクトルＦＦ１１０にそれぞれ格納される。
【００１１】
ＭＵＸ＆ブース・エンコーダ・ユニット１１２はＢ３（１６ビット）を選択し、これらのビットをエンコードする（ブロック３２２）。複数の制御信号が生成され、そのそれぞれが、セット｛０、−Ａ３、−２Ａ３、Ａ３、２Ａ３｝から部分積ベクトルを選択する。９つの部分積ベクトルが生成される（ブロック３２４）。全ての９つの部分積ベクトル、およびベクトルＶｃ０は、ウォリスのトリーユニット１１６によって２つのベクトルに圧縮される（ブロック３２６）。２つのベクトルは和ベクトルおよびキャリ・ベクトルを含み、これらは、和ベクトルＦＦ１１８およびキャリ・ベクトルＦＦ１２０にそれぞれ格納される。
【００１２】
ＣＬＡ０段階において、ＣＳＡ１段階からのＦＦ１０８、１１０、１１８および１２０からの４つのベクトルは、ベクトルＶｓ１およびベクトルＶｃ１を生成するために、４：２圧縮ユニット１２２に送信される（ブロック３２７）。最終結果の下位３２ビットを生成するために、Ｖｓ１とＶｃ１の下位３２ビットが、キャリルックアヘッド（ＣＬＡ）ユニット１２４によって加算される（ブロック３２８）。
【００１３】
ＣＬＡ１段階において、Ｖｓ１とＶｃ１の上位ビットは、２つの３２ビットのベクトルまで符号拡張される（ブロック３３０）。その後、拡張ベクトルおよびｗＲｄの上位３２ビットは、３：２圧縮ユニット１２６によって２つのベクトルに圧縮される（ブロック３３２）。最終結果の上位３２ビットを生成するために、圧縮された２つのベクトルおよびＣＬＡ０ユニット１２４からのキャリーインビットが、ＣＬＡユニット１２８によって加算される（ブロック３３４）。
【００１４】
上述されたように、ブース・エンコーディングおよびベクトル圧縮は、終了するまでに２回のサイクルを要する。第１サイクルにおいて、両方のウォリスのトリーユニットからの結果は、第２サイクルにおいて更に処理されるために送り返される。従来、ＦＦ１０８、１１０、１１８および１２０からの４つのベクトルは全て、第２のサイクルにおける更なる処理のためにウォリスのトリーに送信される。しかしながら、ＭＵＸ＆４：２圧縮ユニット１２２がベクトルの４：２圧縮をＭＵＸ＆ブース・エンコーダ・ユニットおよびＭＵＸ配列より速く行なうことが出来る事が明らかになった。従って、ＭＵＸ＆４：２圧縮ユニット１２２からの２つのベクトルだけ（Ｖｓ０とＶｃ０）が、ウォリスのトリーユニット１０６および１１６に送り返される。このアーキテクチャによって、フィードバック・ルーティングは縮小され得、また、ウォリスのトリーユニット１０６、１１６は比較的小さくなる。フィードバック・ルーティングがより少ないことによって、レイアウトがより簡単になる。ルーティングの限界がＭＡＣの設計において問題となるので、レイアウトをより簡単にすることは好ましい事である。
【００１５】
従来のＭＡＣの幾つかのインプリメンテーションは、１回のサイクルで６４ビットの加算を行なう。しかしながら、このようなＭＡＣは、超高周波数の６４ビットのデータ経路にとって好適で有るとは限らない。また、これらの結果は、パイプライン化におけるデータ依存性の解決のために一般に使用されるバイパス・ロジックを経由して戻るための十分な時間を有さない可能性がある。従来のアーキテクチャと比較して、図１に示されるデュアルＭＡＣアーキテクチャは、超高周波数および低消費電力アプリケーション中において容易に実施され得る。ＣＬＡ１段階はＣＬＡ０段階より少ない論理ゲートを有し得、このことによって、最終結果が、バイパス・ロジックを経由して戻るのに十分な時間を有し得、該デュアルＭＡＣアーキテクチャを、高速かつ低消費電力の６４ビットのデータ経路に好適なものとする。
【００１６】
ＭＡＣユニットは、パイプライン化されたＤＳＰにおいて使用されても良い。指示の相対的なタイミングを、それらの実行をオーバーラップさせることによって変更するパイプライン化は、パイプライン化されていないＤＳＰと比較して、ＤＳＰのスループットを増加させ得る。しかしながら、パイプライン化は、前の指示の結果が利用可能でないのにもかかわらず現在の指示によって必要である場合は常に発生し得るデータ依存性（またはハザード）を招き得る。データ依存性が解決されるまで、現在の演算はパイプライン中に格納され得る。
【００１７】
通常、データ転送は最終演算結果に基づく。多くのＤＳＰアルゴリズムについては、現在のＭＡＣ演算に、以前のＭＡＣ演算の結果を加算する必要がある。しかしながら、ＭＡＣ演算は、完成するまでに４回のサイクルを要し得、また、前回のＭＡＣ演算の結果は現在のＭＡＣ演算に利用可能では無い可能性もある。この場合、蓄積依存性と称されるデータ依存性が引き起こされる。
【００１８】
図４ａから図４ｃは、標準データ転送スキームの際に発生し得る蓄積依存性ペナルティーを示す。標準転送スキームは、蓄積依存性ペナルティーを低減させるために使用され、ＥＸ４０４は、他の非ＭＡＣ命令のための実行段階である。標準データ転送が使用されたとしても、蓄積依存性ペナルティーは、最悪ケースにおいて２サイクルであり、これは、図４ａに示される（ＣＬＡ１段階の後、最終結果が利用可能になる前に３つのストール４０２が存在するが、図４ａの第１ストール４０２はウォリスのトリーユニットにおけるリソース・コンフリクトに起因し、これはデータ依存性ペナルティーとしてカウントされない、という事に注意されたい）。２サイクルのペナルティーは、幾つかのＤＳＰアプリケーションにとって致命的であり、従って、蓄積依存性ペナルティーを除去することが望まれる。
【００１９】
ＭＡＣユニット１００は、中間データ転送と称される新たなデータ転送スキームを実施するために使用されても良く、これによって、蓄積依存性ペナルティーが除去され得る。前回の計算の最終結果を待つ代わりに、中間データ転送スキームは、データ依存性を解決するために中間結果を転送する。図５ａから図５ｃは、図４ａから４ｃに示された例において中間データ転送技術を使用する例を示す。
【００２０】
図５ａ〜図５ｃに示されるように、ＣＳＡ０段階５００は、オペランドＢ０およびＢ１に対してそれぞれブース・エンコーディングおよびウォリスのトリー圧縮を行なうために２つのサブステージ５０２（ＢＥ０）および５０４（ＷＴ０）へ分割される。ＣＳＡ１段階５０６は、オペランドＢ２およびＢ３に対してそれぞれブース・エンコーディングおよびウォリスのトリー圧縮を行なうために２つのサブステージ５０８（ＢＥ１）および５０４（ＷＴ１）へ分割される。ＣＬＡ０段階５１２は、複数のベクトルの４：２圧縮および最終結果の下位３２ビットの加算とを行なうために、２つのサブステージ５１４（４Ｔ２）および５１６（ＡＤＤ０）へ分割される。ＣＬＡ１段階５１８は、最終結果５２０の上位３２ビットの加算（ＡＤＤ１）を含む。
【００２１】
図５ａおよび５ｂに示されるケースにおいて、第１ＭＡＣ命令の中間ベクトルＶｓ，Ｖｃの下位３２ビットは、蓄積依存性を解決するために、第２ＭＡＣ命令のためのウォリスのトリーユニット１０６および１１６へ転送され得る。ＣＬＡ１ユニット１２８からの第１ＭＡＣ命令の上位３２ビットの結果は、ＭＵＸ＆３：２圧縮ユニット１２６へ転送される。図５ａのストール４０２はウォリスのトリーリ・ソース・コンフリクトに起因し、これはデータ依存性ペナルティーとしてカウントされない。
【００２２】
図５ｃに示されるるケースにおいて、第１ＭＡＣ命令の最終結果が第２ＭＡＣ命令のために必要である場合、第１ＭＡＣ命令の最終結果は利用可能ではないが、第１ＭＡＣ命令の下位３２ビットの結果は利用可能である。最終結果を待つ代わりに、第１ＭＡＣ命令の下位３２ビットの結果は、蓄積依存性を解決するためにウォリスのトリーユニット１０６へ転送される。ＣＬＡ１ユニット１２６からの第１ＭＡＣ命令の上位３２ビットの結果は、ＭＵＣ＆３：２圧縮ユニット１２８へ転送される。
【００２３】
図４ａから図４ｃに示される標準のデータ転送技術と、図５ａから図５ｃに示される中間データ転送技術との間の蓄積データ依存性ペナルティーの比較は、表１で与えられる。表１に示されるように、中間データ転送は、蓄積依存性を除去し得、これによって、比較的多くのＤＳＰアプリケーションのための高スループットを可能にし得る。
【００２４】
【表１】
2005532601.tif 000003
【００２５】
図１に示されるような密結合デュアル１６ビットのＭＡＣユニットは、一実施形態において、１６ビットのＳＩＭＤ命令に対してと同様に、３２ビット×３２ビットの命令に対して使用されてよい。次の数式中で示されるように、３２ビット×３２ビットの演算は、４つの１６ビット×１６ビットの演算に分割されても良い。
【００２６】
【数１】
2005532601.tif 000004
【００２７】
図６は、一実施形態における、３２ビット×３２ビットのＭＡＣ演算６００について記述するフローチャートである。ＣＳＡ０段階において、Ａ［１５：０］×Ｂ［１５：０］の部分積ベクトルが、ＭＵＸ＆ブース・エンコーダ・ユニット１０２によって生成される（ブロック６０２）。ウォリスのトリーユニット１０６は、部分積ベクトルを２つのベクトルへと圧縮する（ブロック６０４）。２つのベクトルは和ベクトルおよびキャリ・ベクトルをそれぞれ含み、和ベクトルＦＦ１０８およびキャリ・ベクトルＦＦ１１０に格納される。Ａ［３１：１６］×Ｂ［１５：０］の部分積ベクトルが、ＭＵＸ＆ブース・エンコーダ・ユニット１１２によって生成される（ブロック６０６）。ウォリスのトリーユニット１１６は部分積ベクトルを２つのベクトルへと圧縮する（ブロック６０８）。２つのベクトルは和ベクトルおよびキャリ・ベクトルをそれぞれ含み、和ベクトルＦＦ１０８およびキャリ・ベクトルＦＦ１１０に格納される。
【００２８】
ＣＳＡ１段階において、和ベクトルＦＦ１１８およびキャリ・ベクトルＦＦ１２０からの２つのベクトルが、１６ビット分左にシフトする（ブロック６１０）。ＭＵＸ＆４：２圧縮ユニット１２２は、和ベクトルＦＦ１０８およびキャリ・ベクトルＦＦ１１０からのシフトされたベクトルおよび他の２つのベクトルをベクトルＶｓ０およびベクトルＶｃ０へと圧縮する（ブロック６１２）。Ｖｓ０およびＶｃ０の下位１６ビットはＣＬＡ０ユニット１２４に送信される。残りのビットは、ウォリスのトリーユニット１０６および１１６に送り返される。ビット０〜ビット１５の最終結果は、ＣＬＡ０ユニット１２４によって生成される（ブロック６１４）。その後、Ａ［１５：０］×Ｂ［３１：１６］の部分積ベクトルおよびＶｓ０からのフィードバック・ベクトルは、ウォリスのトリーユニット１０６によって２つのベクトルへと圧縮される（ブロック６１６）。２つのベクトルは和ベクトルおよびキャリ・ベクトルを含み、和ベクトルＦＦ１０８およびキャリ・ベクトルＦＦ１２０にそれぞれ格納される。その後、Ａ［３１：１６］×Ｂ［３１：１６］の部分積ベクトルおよびＶｓ０からのフィードバック・ベクトルが、ウォリスのトリーユニット１１６によって２つのベクトルへと圧縮される（ブロック６１８）。２つのベクトルは和ベクトルおよびキャリ・ベクトルを含み、和ベクトルＦＦ１１８およびキャリ・ベクトルＦＦ１２０にそれぞれ格納される。
【００２９】
ＣＳＡ０段階において、和ベクトルＦＦ１１８およびキャリ・ベクトルＦＦ１２０からの２つのベクトルが、１６ビット分左にシフトする（ブロック６２０）。ＭＵＸ＆４：２圧縮ユニット１２２は、和ベクトルＦＦ１０８およびキャリ・ベクトルＦＦ１１０からのシフトされたベクトルおよび他の２つのベクトルをベクトルＶｓ１およびベクトルＶｃ１へと圧縮する（ブロック６２２）。ベクトルＶｓ１およびＶｃ１の下位１６ビットはＣＬＡ０ユニット１２４に送信される。そして、ビット１６〜ビット３１の最終結果が生成される（ブロック６２４）。
【００３０】
ＣＬＡ１段階において、上位３２ビット（ビット３２からビット６３まで）の最終結果を生成するために、ベクトルＶｓ１およびＶｃ１の上位ビット（ビット１６からビット４７まで）が、ＣＬＡ１ユニット１２８によって加算される（ブロック６２６）。
【００３１】
ＭＡＣユニット１００は、汎用コンピューティング・システム、デジタル処理システム、ラップトップ・コンピューター、個人用デジタル情報処理端末（ＰＤＡ）および携帯電話を含む様々なシステムで実施されて良い。このようなシステムにおいて、ＭＡＣユニットは、フラッシュ・メモリー・デバイスあるいは静的ランダムアクセス記憶装置（ＳＲＡＭ）のようなメモリ素子に接続されるプロセッサに含まれていて良く、ＯＳあるいは他のソフトウエア・アプリケーションを格納する。
【００３２】
このようなプロセッサは、ビデオカムコーダー、通信会議装置、ＰＣビデオカード、および高品位テレビジョン（ＨＤＴＶ）中に使用されてもよい。さらに、このようなプロセッサは、携帯電話、音声認識および他のアプリケーションの中で使用される音声処理のようなデジタル信号処理を利用する他の技術に関して使用されてもよい。
【００３３】
例えば、図７は、一実施形態における、ＭＡＣユニット１００を含むプロセッサ７０１を備える携帯型ビデオ装置７００を示す。携帯型ビデオ装置７００は、アンテナ７０２またはデジタルビデオ記憶媒体７０４（例えばディジタル・ビデオ・ディスク（ＤＶＤ）またはメモリーカード）から受信したエンコードされた映像信号から生成したビデオ画像を表示する携帯型のデバイスであって良い。プロセッサ１００は、プロセッサ演算のための命令およびデータを格納するキャッシュ・メモリ７０６、および例えばＳＲＡＭ７０８のような他のデバイスと通信して良い。
【００３４】
多くの実施形態が記載されたが、様々な修正が本発明の精神と範囲から逸脱することなく為され得る事が理解される。例えば、フローチャートの任意のブロックがスキップされたり、任意の順序で実行されたりすることが可能であり、かつ望ましい結果を生じさせ得る。さらに、オペランドのサイズおよび１つのＳＩＭＤ命令にあたりに作用されるオペランドの数は変化しても良い。従って、他の実施形態は添付の特許請求の範囲内である。
【図面の簡単な説明】
【００３５】
【図１】一実施形態における、デュアル積和演算（ＭＡＣ）ユニットのブロック線図である。
【図２】一実施形態における、ＭＡＣ  ＳＩＭＤ（単一命令複数データ）演算を示すブロック線図である。
【図３ａ】一実施形態における、ＭＡＣ  ＳＩＭＤ演算について記述するフローチャートである。
【図３ｂ】一実施形態における、ＭＡＣ  ＳＩＭＤ演算について記述するフローチャートである。
【図３ｃ】一実施形態における、ＭＡＣ  ＳＩＭＤ演算について記述するフローチャートである。
【図４】一実施形態における、データ転送を利用したパイプライン化された命令シーケンスを示すブロック線図である。
【図５】一実施形態における、中間データ転送を利用するパイプライン化された命令シーケンスを示すブロック線図である。
【図６ａ】一実施形態における、密結合デュアル１６ビットＭＡＣユニット上で行なわれる３２ビット×３２ビットのＭＡＣ演算について記述するフローチャートである。
【図６ｂ】一実施形態における、密結合デュアル１６ビットＭＡＣユニット上で行なわれる３２ビット×３２ビットのＭＡＣ演算について記述するフローチャートである。
【図７】一実施形態における、ＭＡＣユニットを備える携帯型ビデオ装置のブロック線図である。
【図１】
2005532601.tif 000005
【図２】
2005532601.tif 000006
【図３ａ】
2005532601.tif 000007
【図３ｂ】
2005532601.tif 000008
【図３ｃ】
2005532601.tif 000009
【図４】
2005532601.tif 000010
【図５】
2005532601.tif 000011
【図６ａ】
2005532601.tif 000012
【図６ｂ】
2005532601.tif 000013
【図７】
2005532601.tif 000014
【手続補正書】
【提出日】平成16年8月4日(2004.8.4)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００２
【補正方法】変更
【補正の内容】
【０００２】
デジタルシグナルプロセッサー（ＤＳＰ）は、ＳＩＭＤ（単一命令複数データ）、即ち並列データ・プロセッサとして作動し得る。ＳＩＭＤ演算では、単一の指示が多数の処理要素に送信され、多数の処理要素は、異なるデータに対して同一の演算を行なう。ＳＩＭＤ命令は、加算、減算、乗算、積和演算（ＭＡＣ）のような幾つかの種類の標準演算、および、クリッピングや双一次の補間演算の実行のような多くの特定の命令を提供する。
【特許文献１】特表２００３−５１８６９０公報
【国際調査報告】
2005532601.tif 000015
2005532601.tif 000016
2005532601.tif 000017
2005532601.tif 000018
2005532601.tif 000019