(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うＳＩＭＤデータ処理回路と、
前記ＳＩＭＤデータ処理回路によるアクセスのための前記データ要素を格納するように構成されたＳＩＭＤレジスタ・バンクと、
前記ＳＩＭＤデータ処理回路と結合されプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、
を備え、
前記命令デコーダ回路が、入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する繰返し積和演算（繰返しＭＡＣ）命令に応答して、前記ＳＩＭＤデータ処理回路を制御する制御信号を生成し、
前記ＳＩＭＤデータ処理回路は、
Ｎ個の積和演算データ要素をもたらすためにＮ個の積和演算動作を並列に行うことを含む積和演算プロセスの前記複数の反復を行い、
各反復について、前記第１ベクトルからＮ個の入力データ要素と、前記第２ベクトルからＮ個の積和演算動作の間にＮ個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求め、
前記積和演算プロセスのＭ回目の反復においてもたらされた前記Ｎ個の積和演算データ要素から導出されたＮ個の積和演算結果を出力し、
前記ＳＩＭＤデータ処理回路は、前記積和演算プロセスの前記複数の反復を行う前に、前記ＳＩＭＤレジスタ・バンクのレジスタの前記第１及び第２ベクトルにアクセスするように構成され、それにより、前記積和演算プロセスの前記複数の反復の遂行の間、前記第１及び第２ベクトルに関して前記ＳＩＭＤレジスタ・バンクへのさらなるアクセスを必要とせず、
前記ＳＩＭＤデータ処理回路は、各反復についてのＮ個の入力データ要素と単一係数データ要素を選択するように前記ＳＩＭＤデータ処理回路内の回路を制御するために用いられる制御信号を生成する状態機械を有し、
前記第１ベクトルにおける入力データ要素の数が少なくともＮ＋Ｍ−１であり、前記状態機械が、反復Ｐ−１にて用いられるＰ−１番目からＮ＋Ｐ−２番目のＮ個の入力データ要素に関してシフト動作を生じさせることによって、反復Ｐにて用いられるＰ番目からＮ＋Ｐ−１番目のＮ個の入力データ要素を決定し、
前記状態機械が、反復Ｐにて用いられる前記第２ベクトルからＰ番目の係数データ要素を決定する、
データ処理装置。
【請求項２】
前記繰返しＭＡＣ命令がＦＩＲフィルタ動作を行うために用いられ、前記Ｎ個の積和演算結果がＮ個のＦＩＲ結果からもたらされる、請求項１に記載のデータ処理装置。
【請求項３】
前記繰返しＭＡＣ命令がまた、入力オペランドとして最初の積和演算データ要素のベクトルをも有する、請求項１又は請求項２に記載のデータ処理装置。
【請求項４】
いかなる最初の積和演算データ要素のベクトルも指定されず、前記積和演算プロセスの第１の反復の前に前記Ｎ個の積和演算データ要素がゼロに設定される、請求項１又は請求項２に記載のデータ処理装置。
【請求項５】
前記状態機械がスカラー値から反復数Ｍを求め、前記複数の反復のうちの少なくとも１つが実行されている間、前記データ処理装置の１つ又は複数の構成要素にストール信号をアサートする、請求項１から請求項４までのいずれかに記載のデータ処理装置。
【請求項６】
前記複数の反復のうちの１つだけを除くすべての反復の間、前記ストール信号がアサートされる、請求項５に記載のデータ処理装置。
【請求項７】
前記入力データ要素の第１ベクトルが、Ｎの倍数である多数の入力データ要素を有し、前記ＳＩＭＤデータ処理回路が、前記ＳＩＭＤレジスタ・バンクの多数のレジスタにアクセスすることによって前記入力データ要素にアクセスし、前記多数のレジスタの各々がＮ個の入力データ要素を含む、請求項１に記載のデータ処理装置。
【請求項８】
Ｎ個の積和演算データ要素を格納するための積和演算レジスタをさらに備える、請求項１又は請求項７に記載のデータ処理装置。
【請求項９】
前記入力データ要素の各々がＸビットを備え、前記係数データ要素の各々がＹビットを備え、前記積和演算レジスタに格納される各積和演算データ要素が少なくともＸ＋Ｙビットのサイズである、請求項８に記載のデータ処理装置。
【請求項１０】
前記積和演算レジスタが、前記積和演算データ要素を拡張形式で格納し、前記拡張形式が、オーバーフローを求めるのに用いられる付加的なビットを含む、請求項９に記載のデータ処理装置。
【請求項１１】
前記入力データ要素と前記係数データ要素とのうちの少なくとも１つが、実部と虚部を備える複素数であり、
前記積和演算プロセスの各反復が、Ｎ個の複素積和演算データ要素をもたらすためにＮ個の複素積和演算動作を並列に行うことを含み、
前記Ｎ個の積和演算結果の出力が複素数である、
請求項１から請求項１０までのいずれかに記載のデータ処理装置。
【請求項１２】
前記入力データ要素と前記係数データ要素との両方が、実部と虚部を備える複素数である、請求項１１に記載のデータ処理装置。
【請求項１３】
前記各複素積和演算動作が、対応する前記複素積和演算データ要素の実部と虚部をもたらすために一連の乗算、加算及び減算動作の遂行を含む、請求項１１又は請求項１２に記載のデータ処理装置。
【請求項１４】
前記係数データ要素が複素数であり、各反復において、前記Ｎ個の複素積和演算動作が行われる前に複素係数データ要素が共役にされる、請求項１１から請求項１３までのいずれかに記載のデータ処理装置。
【請求項１５】
前記積和演算動作が乗算減算動作である、請求項１から請求項１４までのいずれかに記載のデータ処理装置。
【請求項１６】
前記命令デコーダ回路によって生成された前記制御信号の１つが、丸めが要求されるかどうかを指定し、丸めが要求される場合、前記状態機械が、丸め増分が、前記複数の反復のうちの１つにおいて行われる各積和演算動作の中に導入されるように配置される、請求項３に従属するとき請求項１から請求項１５までのいずれかに記載のデータ処理装置。
【請求項１７】
前記命令デコーダ回路によってもたらされた前記制御信号の１つが、もたらされるべき前記積和演算データ要素が飽和する又は飽和しない、のいずれであるかを指定し、前記ＳＩＭＤデータ処理回路内の累算回路が、前記制御信号に依存するように構成される、請求項１から請求項１６までのいずれかに記載のデータ処理装置。
【請求項１８】
前記スカラー値がＮ以下である、請求項１から請求項１７までのいずれかに記載のデータ処理装置。
【請求項１９】
ＱはＮ以下であるＮ＋Ｑ反復が要求され、ＱがＮ以下の場合、第１の繰返しＭＡＣ命令は、Ｎ個の反復を示すスカラー値を有し、後続するさらなる繰返しＭＡＣ命令が、Ｑ回の反復を示すスカラー値を有し、最初の積和演算データ要素のベクトルとして前記第１の繰返しＭＡＣ命令に応答して前記ＳＩＭＤデータ処理回路によって生成された前記Ｎ個の積和演算結果を識別する、請求項１８に記載のデータ処理装置。
【請求項２０】
前記繰返しＭＡＣ命令によって指定される前記スカラー値が、行うことができる反復の最大数よりも大きい場合、前記スカラー値は前記最大数と等しく設定され、前記ＳＩＭＤデータ処理回路が前記積和演算プロセスの前記最大数の反復を行う、請求項１から請求項１９までのいずれかに記載のデータ処理装置。
【請求項２１】
前記命令デコーダ回路が、一連の繰返しＭＡＣ命令に応答して、一連の積和演算段階を行うように前記ＳＩＭＤデータ処理回路を制御する制御信号を生成し、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、少なくとも１つの積和演算段階が、前の積和演算段階によって生成されたＮ個の積和演算結果を入力として用いる、請求項１から請求項２０までのいずれかに記載のデータ処理装置。
【請求項２２】
前記命令デコーダ回路が、単一の繰返しＭＡＣ命令に応答して、少なくとも２つの積和演算段階を行うために前記ＳＩＭＤデータ処理回路を制御する制御信号を生成し、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、各積和演算段階に対して要求される入力データ要素及び係数データ要素が、第１及び第２ベクトルから求められる、請求項１から請求項２１までのいずれかに記載のデータ処理装置。
【請求項２３】
前記多数の積和演算段階が、複素数に対して繰返されるＭＡＣ動作を行うために用いられる、請求項２１又は請求項１２に記載のデータ処理装置。
【請求項２４】
制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うＳＩＭＤデータ処理回路と、前記ＳＩＭＤデータ処理回路と結合され、プログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を用いてデータを処理する方法であって、
入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する繰返し積和演算（繰返しＭＡＣ）命令をデコードして制御信号を生成するステップと、
積和演算結果をもたらすために前記ＳＩＭＤデータ処理回路を前記制御信号で制御するステップと、
前記ＳＩＭＤデータ処理回路に、積和演算プロセスの前記複数の反復を行う前に、ＳＩＭＤレジスタ・バンクのレジスタの前記第１及び第２ベクトルにアクセスするようにさせるステップであって、それにより、前記積和演算プロセスの前記複数の反復の遂行の間、前記第１及び第２ベクトルに関して前記ＳＩＭＤレジスタ・バンクへのさらなるアクセスを必要としない、ステップと、
各反復についてのＮ個の入力データ要素と単一係数データ要素を選択するように前記ＳＩＭＤデータ処理回路内の回路を制御するために用いられる制御信号を生成するように前記ＳＩＭＤデータ処理回路内の状態機械を使用するステップと、
を含み、制御する前記ステップが、
前記積和演算プロセスの前記複数の反復を行うステップであって、前記積和演算プロセスの各反復が、Ｎ個の積和演算データ要素をもたらすためにＮ個の積和演算動作を並列に行うことを含むステップと、
各反復について、前記第１ベクトルからＮ個の入力データ要素と、前記第２ベクトルからＮ個の積和演算動作の間にＮ個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、
前記積和演算プロセスのＭ回目の反復においてもたらされた前記Ｎ個の積和演算データ要素から導出されたＮ個の積和演算結果を出力するステップと、
を含み、
前記第１ベクトルにおける入力データ要素の数が少なくともＮ＋Ｍ−１であり、前記状態機械が、反復Ｐ−１にて用いられるＰ−１番目からＮ＋Ｐ−２番目のＮ個の入力データ要素に関してシフト動作を生じさせることによって、反復Ｐにて用いられるＰ番目からＮ＋Ｐ−１番目のＮ個の入力データ要素を決定し、
前記状態機械が、反復Ｐにて用いられる前記第２ベクトルからＰ番目の係数データ要素を決定する、方法。
【請求項２５】
データ処理装置であって、
制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うためのＳＩＭＤデータ処理手段と、
前記ＳＩＭＤデータ処理手段によるアクセスのための前記データ要素を格納するためのＳＩＭＤレジスタ・バンク手段と、
プログラム命令に応答して前記制御信号を生成するための前記ＳＩＭＤデータ処理手段と結合された命令デコーダ手段と、
を備え、前記命令デコーダ手段が、入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する繰返し積和演算（繰返しＭＡＣ）命令に応答して、前記ＳＩＭＤデータ処理手段を制御する制御信号を生成し、
前記ＳＩＭＤデータ処理手段は、
積和演算プロセスの前記複数の反復を行うステップであって、前記積和演算プロセスの各反復が、Ｎ個の積和演算データ要素をもたらすためにＮ個の積和演算動作を並列に行うことを含むステップと、
各反復について、前記第１ベクトルからＮ個の入力データ要素と、前記第２ベクトルからＮ個の積和演算動作の間にＮ個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、
前記積和演算プロセスのＭ回目の反復においてもたらされた前記Ｎ個の積和演算データ要素から導出されたＮ個の積和演算結果を出力するステップと、
によって積和演算結果をもたらし、
前記ＳＩＭＤデータ処理手段は、前記積和演算プロセスの前記複数の反復を行う前に、前記ＳＩＭＤレジスタ・バンク手段のレジスタの前記第１及び第２ベクトルにアクセスするように構成され、それにより、前記積和演算プロセスの前記複数の反復の遂行の間、前記第１及び第２ベクトルに関して前記ＳＩＭＤレジスタ・バンク手段へのさらなるアクセスを必要とせず、
前記ＳＩＭＤデータ処理手段は、各反復についてのＮ個の入力データ要素と単一係数データ要素を選択するように前記ＳＩＭＤデータ処理手段内の回路を制御するために用いられる制御信号を生成する状態機械を有し、
前記第１ベクトルにおける入力データ要素の数が少なくともＮ＋Ｍ−１であり、前記状態機械が、反復Ｐ−１にて用いられるＰ−１番目からＮ＋Ｐ−２番目のＮ個の入力データ要素に関してシフト動作を生じさせることによって、反復Ｐにて用いられるＰ番目からＮ＋Ｐ−１番目のＮ個の入力データ要素を決定し、
前記状態機械が、反復Ｐにて用いられる前記第２ベクトルからＰ番目の係数データ要素を決定する、
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（単一命令多重データ））積和演算（ＭＡＣ）動作を行うための装置及び方法に関する。
【背景技術】
【０００２】
多数の個別のデータ要素に対して特定のデータ処理動作を行うことが必要なときに、こうした動作の遂行を加速させるための１つの公知の手法は、ＳＩＭＤ（単一命令多重データ）手法を採用することである。ＳＩＭＤ手法によれば、多数のデータ要素がレジスタ内に並んで配置され、次いで、これらのデータ要素に対して動作が並列に行われる。
【０００３】
ＳＩＭＤ手法から恩恵を受けることができる１つのタイプの動作は、Ａ＋Ｂ×Ｃ、又はＡ−Ｂ×Ｃの形態をとることができる積和演算動作である。乗算演算Ｂ×Ｃは、典型的にはＢとＣの異なる値について多数回行われ、各乗算結果が次いで、実行中の累算値Ａから加算され（又は減算される）。
【０００４】
単一の積和演算結果を生成するのに要求される動作を考えると、複数の個別の乗算動作が要求され、ＳＩＭＤデータ処理回路を用いることによって、複数のこれらの要求される乗算を並列に行って積和演算動作のスループットを増加させることができることが、上記の説明から理解されるであろう。
【０００５】
しかしながら、多数の積和演算結果をもたらすために多数の個別の積和演算動作が行われる必要があるが、そこでは各積和演算動作に用いられる入力データの間に大きな重複がある、或るタイプの動作も存在する。多数の積和演算動作が要求される場合の動作の１つの特定の例は、有限インパルス応答（ＦＩＲ）フィルタ動作であり、これは、デジタル信号プロセッサ（ＤＳＰ）において実装される標準的な信号処理タスクである。ＦＩＲフィルタ動作は、通信、音声処理、映像処理、又は画像処理のような多くの信号処理用途に通例用いられる。
【０００６】
多くの現代のデジタル信号プロセッサ、並びに、汎用マイクロプロセッサは、ＦＩＲフィルタ動作のような動作に存在するデータ・レベルの並列性を活用するためにＳＩＭＤデータ処理回路を用いる。しかしながら、重要な問題は、データ処理装置のＳＩＭＤ機能を活用するために、どのようにしてＦＩＲフィルタ動作を効果的にベクトル化するかである。
【０００７】
文献「Ｅｆｆｉｃｉｅｎｔ  Ｖｅｃｔｏｒｉｚａｔｉｏｎ  ｏｆ  ｔｈｅ  ＦＩＲ  Ｆｉｌｔｅｒ」、Ａ  Ｓｈａｈｂａｈｒａｍｉ他著、  Ｃｏｍｐｕｔｅｒ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｌａｂｏｒａｔｏｒｙ、Ｄｅｌｆｔ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｔｅｃｈｎｏｌｏｇｙ、オランダ（インターネット上でｈｔｔｐ：／／ｃｅ．ｅｔ．ｔｕｄｅｌｆｔ．ｎｌ／ｐｕｂｌｉｃａｔｉｏｎｆｉｌｅｓ／１０９０＿５０９＿ｓｈａｈｂａｈｒａｍｉ＿ｐｒｏｒｉｓｃ２００５．ｐｄｆで見られる）は、ＦＩＲフィルタ動作をベクトル化するための種々の技術を要約している。第１の技術によれば、ＦＩＲフィルタは、内部ループが単一の出力の幾つかの項を並列に計算するように、内部ループをベクトル化することによってベクトル化される。したがって、こうした手法によって、単一の積和演算結果を形成するために要求される多数の乗算動作が、ＳＩＭＤデータ処理回路内で単一の反復の間に並列に行われ、したがって、各積和演算結果が順次に求められ、処理回路のＳＩＭＤ機能は、各積和演算結果の計算をスピードアップするのに用いられる。説明された代替的な技術によれば、ＦＩＲフィルタの外部ループは、内部ループが幾つかの出力の１つの項を並列に計算するようにベクトル化される。したがって、この技術によれば、各反復において、要求される積和演算結果の各々に対して１つの積和演算計算が行われ、それにより、すべての要求される積和演算動作が並列に行われ、積和演算動作の各々についての最後の積和演算結果がプロセスの最後の反復の後で入手可能となる。文献はまた、内部ループと外部ループが同時にベクトル化される第３の機構を説明する。
【０００８】
内部ループをベクトル化するための１つの技術は、文献「ＡｌｔｉＶｅｃ  （ＴＭ）  Ｔｅｃｈｎｏｌｏｇｙ：  Ａ  ｓｅｃｏｎｄ  Ｇｅｎｅｒａｔｉｏｎ  ＳＩＭＤ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ」、Ｍ  Ｐｈｉｌｌｉｐ著、Ｍｏｔｏｒｏｌａ  Ｉｎｃ、テキサス州オースティン（インターネット上でｈｔｔｐ：／／ｗｗｗ．ｈｏｔｃｈｉｐｓ．ｏｒｇ／ａｒｃｈｉｖｅｓ／ｈｃｌ０／２＿Ｍｏｎ／ＨＣ１０．Ｓ５／ＨＣ１０．５．３．ｐｄｆで見られる）において説明され、そこではｓｕｍ−ａｃｒｏｓｓ型命令が用いられる。この文書は、ＡｌｔｉＶｅｃ乗算命令を用いて内部又は外部ＦＩＲループのいずれかをベクトル化するための技術を説明する。しかしながら、外部ループ技術は、データ並べ替え機能を同時に行わないベクトル乗算（又は積和演算）動作を用いる。
【０００９】
刊行物「Ａ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＤＳＰ  ｆｏｒ  Ｌｏｗ−Ｐｏｗｅｒ，  Ｌｏｗ−Ｃｏｍｐｌｅｘｉｔｙ  Ｂａｓｅｂａｎｄ  Ｐｒｏｃｅｓｓｉｎｇ」、Ｈ  Ｎａｅｓｓ著、Ｎｏｒｗｅｇｉａｎ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｓｃｉｅｎｃｅ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ、Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｅｌｅｃｔｒｏｎｉｃｓ  ａｎｄ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎｓ（インターネット上でｈｔｔｐ：／／ｗｗｗ．ｄｉｖａ−ｐｏｒｔａｌ．ｏｒｇ／ｎｔｎｕ／ａｂｓｔｒａｃｔ．ｘｓｑｌ？ｄｂｉｄ＝１０９５で見られる）は、繰返されるベクトル累算及びシフト動作を生み出す、外部ループをベクトル化するための技術を説明する。特に、この刊行物の図９は、２つのベクトル入力と内部シフトレジスタとを用いる動作を示す。この動作は、繰返しループ内での多数の命令の発行を通じて多数回実行される（例えば、この文書の表１０において説明されるように）。内部シフトレジスタの使用はデータの幾つかの内部並べ替えを可能にするが、要求される計算を行うために繰返しループを通じて多数回反復することが必要であり、繰返しループが繰返されるたびに、命令がデコードされ実行される必要があり、新しいデータ値がメモリからアクセスされる必要がある。
【００１０】
前述の従来技術は、一般に、ＦＩＲ計算の遂行を改善することを目的としている。しかしながら、別の大きな問題は電力消費である。本発明の発明者らは、ＦＩＲ動作を行うときに要求されるような一連のＭＡＣ動作を行うときに、各反復の前にデータ要素を適切に順序付けるために要求される、３つの重要なアクティビティ、すなわち命令フェッチ及びデコード、積和演算計算、及びベクトルデータ並べ替え計算が存在することに気づいた。さらに、発明者らは、命令フェッチ及びデコードとベクトルデータ並べ替え計算に多大な電力が、例えば、総消費電力の２５〜４０％が消費されていたことに注目した。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
したがって、公知の従来技術と比べたときに電力消費を減少させるＳＩＭＤ積和演算動作を行うための改善された技術を提供することが望ましいであろう。
【課題を解決するための手段】
【００１２】
第１の態様から見ると、本発明は、制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うＳＩＭＤデータ処理回路と、前記ＳＩＭＤデータ処理回路と結合されプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を備えるデータ処理装置であって、前記命令デコーダ回路が、入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する繰返し積和演算（繰返しＭＡＣ）命令に応答して、前記ＳＩＭＤデータ処理回路を制御する制御信号を生成し、積和演算プロセスの前記複数の反復を行い、積和演算プロセスの各反復は、Ｎ個の積和演算データ要素をもたらすためにＮ個の積和演算動作を並列に行うことを含み、各反復について、前記第１ベクトルからのＮ個の入力データ要素と、Ｎ個の積和演算動作の間にＮ個の入力データ要素の各々と乗算されるべき前記第２ベクトルからの単一係数データ要素とを求め、積和演算プロセスの最後の反復においてもたらされたＮ個の積和演算データ要素から導出されたＮ個の積和演算結果を出力する、データ処理装置を提供する。
【００１３】
本発明によれば、入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する、単一の命令が提供される（本明細書では、繰返しＭＡＣ命令と呼ぶ）。命令デコーダ回路は、こうした繰返しＭＡＣ命令に応答して、積和演算プロセスの複数の反復を行うためにＳＩＭＤデータ処理回路を制御するのに用いられる制御信号を生成し、各反復は、並列なＮ個の積和演算動作の遂行に関与する。各反復の間に、ＳＩＭＤデータ処理回路は、第１ベクトルからＮ個の入力データ要素と、第２ベクトルから単一係数データ要素とを求める。複数の反復の遂行後に、ＳＩＭＤデータ処理回路は、次いで、Ｎ個の積和演算結果を出力する。
【００１４】
したがって、本発明を用いて、単一の命令は、複数の積和演算結果を直接もたらすために、該命令の入力オペランドとして提供されたスカラー値によって求められる積和演算プロセスの複数の反復を、ＳＩＭＤデータ処理回路に行わせるのに用いることができる。すべての指定された反復に対して要求されるすべてのデータ要素は、命令の入力オペランドとして提供される第１及び第２ベクトルから直接導出することができるので、ループを通る度にメモリへのアクセスを伴うプログラム・ループの実行を多数回要求する公知の従来技術と比べたときに、エネルギー消費の大幅な減少を実現することができる。特に、本発明は、複数の積和演算結果を生成するために、さらなるレジスタ又は命令の読出しなしに実行することができる単一の命令を提供し、公知の従来技術と比べたときにエネルギー消費を大幅に節約する。
【００１５】
本発明の繰返しＭＡＣ命令は、種々の目的のために用いられてもよい。しかしながら、一実施形態において、繰返しＭＡＣ命令は、ＦＩＲフィルタ動作を行うために用いられ、Ｎ個の積和演算結果は、Ｎ個のＦＩＲ結果からもたらされる。したがって、こうした本発明の実施形態によれば、単一の命令は、該単一の命令から複数のＦＩＲ結果を直接生成するために、ＳＩＭＤデータ処理回路に積和演算プロセスの多数の反復を行わせるのに用いることができる。こうした手法は、こうしたＦＩＲ結果を生成するための特にエネルギー効率の良い機構を提供する。
【００１６】
ＳＩＭＤデータ処理回路は、種々の方法で配置することができる。しかしながら、一実施形態において、ＳＩＭＤデータ処理回路は、各反復についてのＮ個の入力データ要素と単一係数データ要素を求めるための状態機械を有する。１つの特定の実施形態において、ＳＩＭＤデータ処理回路に提供される制御信号の１つは、要求される反復数Ｍを識別し、状態機械は、行われている反復に応じて変化される内部制御信号を生成し、各反復についての入力データ要素と単一係数データ要素を選択するために用いられる。
【００１７】
１つの特定の実施形態において、第１ベクトルにおける入力データ要素の数は、少なくともＮ＋Ｍ−１であり、状態機械は、反復Ｐ−１に用いられたＮ個のデータ要素について、シフト動作を行わせることによって、反復ＰについてのＮ個の入力データ要素を求める。第１の反復が行われるとき、最初のＮ個の入力データ要素が選択される。
【００１８】
一実施形態において、状態機械は、各反復についての前記第２ベクトルから異なる係数データ要素を求める。しかしながら、幾つかの実施形態において、係数データ要素は、１以上の反復について同じに保たれる。これは、例えば、多数の個別の積和演算プロセスが単一の命令に応答して行われることを可能にすることができ、最後の反復後に、Ｎ個の積和演算結果が、各積和演算プロセスについてもたらされる。代替的に、係数データ要素を反復の度に変化させることによって、しかし入力データ要素を１以上の反復について同じに保つことによって、単一の命令に応答して多数の個別の積和演算プロセスが行われてもよい。
【００１９】
一実施形態において、繰返しＭＡＣ命令はまた、入力オペランドとして最初の積和演算データ要素のベクトルをも有する。代替的な実施形態において、こうした最初の積和演算データ要素のベクトルは提供されなくてもよく、代わりに、プロセスの開始時に累算器がゼロに初期化される。
【００２０】
本発明によれば、繰返しＭＡＣ命令は、その入力オペランドの１つとして、要求される複数の反復を示すスカラー値を指定するので、繰返しＭＡＣ命令に応答して要求される計算を行うためにＳＩＭＤデータ処理回路によってとられるクロックサイクルの数は予め定められず、繰返しＭＡＣ命令の任意の特定のインスタンスについて指定されたスカラー値に応じて大きく変化する。典型的には、データ処理装置の種々の他の構成要素のアクティビティと繰返しＭＡＣ命令に応答してＳＩＭＤデータ処理回路によって行われる計算との間に、或る種の依存が存在する。例えば、ＳＩＭＤデータ処理回路による実行のためのプログラム・メモリからフェッチされた後続の命令は、それが繰返しＭＡＣ命令に対して要求される計算を終えるまで、ＳＩＭＤデータ処理回路によって実行されることができない。さらに、データ処理装置の他の構成要素による実行のためにフェッチされた命令もまた、例えば、これらの命令が入力オペランドとしてＮ個の積和演算結果のいずれかを指定する場合に、ＳＩＭＤデータ処理回路が繰返しＭＡＣ命令に応答して要求される計算を完了するまで、実行されることができない可能性がある。
【００２１】
こうした問題に起因する不必要な電力消費を軽減するために、一実施形態において、状態機械が、スカラー値から反復数Ｍを求め、複数の反復のうちの少なくとも１つが実行されている間、データ処理装置の１つ又は複数の構成要素にストール信号をアサートする。１つの特定の例において、ストール信号は、ストール信号がアサートされる間、命令フェッチを一時停止するのに用いられる。
【００２２】
ストール信号がアサートされる時間の長さは、特定の構成要素のパイプライン深さなどのような特徴を考慮に入れて、特定の実施形態に依存する。一実施形態において、１つだけを除くすべての複数の反復の間にストール信号がアサートされ、命令フェッチ・アクティビティにおいてあらゆる不必要な電力が消費されるのを回避することによって、大幅な電力の節約がもたらされる。
【００２３】
一実施形態において、各クロックサイクルで１つの反復が完了されるが、各クロックサイクルが１つの反復が完了されるという要件は存在せず、代替的な実施形態において、各反復の完了の間に１以上のクロックサイクルが存在してもよいことが理解されるであろう。
【００２４】
一実施形態において、データ処理装置は、データ要素を格納するためのＳＩＭＤレジスタ・バンクをさらに備え、ＳＩＭＤデータ処理回路は、積和演算プロセスの前記複数の反復を行う前に、ＳＩＭＤレジスタ・バンクのレジスタから前記第１及び第２ベクトルにアクセスし、積和演算プロセスの前記複数の反復の遂行の間、第１及び第２ベクトルに関してのＳＩＭＤレジスタ・バンクへのさらなるアクセスは要求されない。積和演算プロセスの複数の反復の遂行の間に、ＳＩＭＤレジスタ・バンクにアクセスする必要性を回避することによって、大幅な電力の節約が実現される。
【００２５】
１つの特定の実施形態において、入力データ要素の第１ベクトルは、Ｎの倍数である多数の入力データ要素を有し、ＳＩＭＤデータ処理回路は、ＳＩＭＤレジスタ・バンクの多数のレジスタにアクセスすることによって前記入力データ要素にアクセスし、前記多数のレジスタの各々はＮ個の入力データ要素を含む。一実施形態において、係数データ要素の第２ベクトルは、Ｎ以下の多数の係数データ要素を有し、これらの係数データ要素は、ＳＩＭＤレジスタ・バンクの１つのレジスタからアクセスされる。しかしながら、代替的な実施形態において、係数データ要素の第２ベクトルは、Ｎの倍数である多数の係数データ要素を有してもよく、ＳＩＭＤデータ処理回路は、ＳＩＭＤレジスタ・バンクの多数のレジスタにアクセスすることによって前記係数データ要素にアクセスする。
【００２６】
一実施形態において、データ処理装置は、Ｎ個の積和演算データ要素を格納するための積和演算レジスタをさらに備える。一実施形態において、この積和演算レジスタは、ＳＩＭＤレジスタ・バンク内の１つ又は複数のレジスタによって提供されてもよいが、代替的な実施形態において、積和演算レジスタは、ＳＩＭＤレジスタ・バンクとは別に提供される。
【００２７】
一実施形態において、入力データ要素の各々はＸビットを備え、係数データ要素の各々はＹビットを備え、積和演算レジスタに格納される各積和演算データ要素は、少なくともＸ＋Ｙビットのサイズである。積和演算レジスタは、Ｎ個の積和演算データ要素を格納するので、積和演算レジスタは、ＳＩＭＤレジスタ・バンク内の入力データ要素又は係数データ要素を格納するのに用いられるレジスタよりも広いものとなる必要があることが理解されるであろう。ＸとＹは、異なるものとすることができるが、一実施形態において、ＸとＹは、入力データ要素と係数データ要素が同じサイズとなるように、同じにされる。
【００２８】
各積和演算データ要素は、正確にＸ＋Ｙビットのサイズであってもよいが、一実施形態において、積和演算レジスタは、積和演算データ要素を拡張形式で格納し、拡張形式は、オーバーフローを求めるのに用いられる付加的なビットを含む。したがって、Ｎ個の積和演算結果が、積和演算プロセスの最後の反復においてもたらされたＮ個の積和演算データ要素から導出されるとき、付加的なビットは、オーバーフローが発生した状況を検出し、且つ該当する積和演算データ要素を適宜修正するために考慮に入れることができる。Ｎ個の積和演算結果は、多くの方法で拡張形式から導出することができる。一実施形態において、拡張形式要素は、結果要素の範囲外の値がそれらの最も近い範囲内の値によって置き換えられるように、結果要素のサイズまで飽和される。別の実施形態において、結果要素は、拡張形式要素の選択された部分を取り、残りのビットを捨てることによって形成される。他の実施形態は、両方を行って、拡張形式要素の選択された部分を飽和させてもよい。
【００２９】
一実施形態において、入力データ要素と係数データ要素は実数であるが、他の実施形態において、入力データ要素と係数データ要素とのうちの少なくとも１つは、実部と虚部を備える複素数である。１つのこうした複素数の実施形態において、積和演算プロセスの各反復は、Ｎ個の複素積和演算データ要素をもたらすためにＮ個の複素積和演算動作を並列に行うことを含み、Ｎ個の積和演算結果の出力は複素数である。
【００３０】
一実施形態において、入力データ要素と係数データ要素とのうちの１つのみが複素数となる。例えば、入力データ要素は複素数であってもよく、一方、係数データ要素は実数である。１つのこうした実施形態において、係数データ要素は、複素積和演算動作を行う前に複素形式に変換されてもよい。
【００３１】
別の実施形態において、入力データ要素と係数データ要素との両方が、実部と虚部を備える複素数である。
【００３２】
一実施形態において、各複素積和演算動作は、対応する複素積和演算データ要素の実部と虚部をもたらすために、一連の乗算、加算及び減算動作の遂行を含む。
【００３３】
一実施形態において、係数データ要素は複素数であり、複素係数データ要素は、Ｎ個の複素積和演算動作が行われる前に共役にされてもよい。典型的には、これは、複素係数データ要素の虚部を無効にすることに関係する。こうした共役を行う能力は、積和演算プロセスの複数の反復の間に複素数が取り扱われる方法での融通性を提供することができる。こうした共役を指定することができる種々の方法があるが、一実施形態において、繰返しＭＡＣ命令の非共役変形と共役変形との両方を提供することができる。こうした共役繰返しＭＡＣ命令に応答して、命令デコーダ回路は、ＳＩＭＤデータ処理回路にＮ個の複素積和演算動作を行う前に複素係数データ要素の虚部を無効にさせる、付加的な制御信号を生成するように配置される。
【００３４】
一実施形態において、積和演算動作は、各乗算結果を実行中の累算値に加算されるようにしてもよいが、代替的な実施形態において、積和演算動作は、乗算減算動作を形成してもよく、各乗算結果は、実行中の累算値から減算される。１つの特定の実施形態において、積和演算プロセスの複数の反復を生じさせ、その間、その積和演算動作が、実行中の累算値に乗算結果を加算させるようにする、繰返しＭＡＣ命令は、その後に、積和演算プロセスの複数の反復を行わせる、さらなる繰返しＭＡＣ命令が続いてもよく、そこでこのときには、行われた積和演算動作は、乗算結果を実行中の累算値から減算させるようにする。こうした命令の組合せは、例えば複素数に対する動作を行うときに有用となり得る。
【００３５】
一実施形態において、命令デコーダ回路によって生成された制御信号の１つは、丸めが要求されるかどうかを指定し、丸めが要求される場合、状態機械は、前記複数の反復のうちの１つにおいて行われる、例えば、前記最後の反復において、丸め増分を各積和演算動作の中に導入させるように配置される。したがって、繰返し積和演算命令は、丸めが要求されることを指定してもよく、状態機械は、こうした場合において、最後の反復を除くすべてを丸めなしに進めるように配置され、丸め増分については、要求される丸めを実施するために、最後の反復において行われた各積和演算動作の中に導入される。一例として入力データ要素と係数データ要素との各々が１６ビットの長さである状況を考えると、もたらされた積和演算データ要素は３２ビットのサイズとなるであろう。丸めが要求されない場合、３２ビットの全結果が出力されるであろう。しかしながら、丸めが要求される場合、最上位の１６ビットが結果として出力される必要があるが、結果に直接含められない最下位の１６ビットを考慮に入れるために行われた丸め動作を伴う。要求される丸めを行うために、丸め増分は、ビット位置１５で導入される（３２ビット数は、ビット位置０〜３１によって与えられ、ビット位置３１は最上位のビットであると仮定する）。丸めが繰返しＭＡＣ命令によって指定されるとき、状態機械は、丸めプロセスが最後の積和演算結果を形成するのに用いられる最後の積和演算データ要素にのみ適用されることを保証するために、丸めが最後の反復の間でのみ適用されることを保証する。
【００３６】
しかしながら、上記で説明された実施形態において、丸め増分は最後の反復の間に導入されるが、代替的な実施形態において、丸め増分は、任意の１つの反復に導入することができ、それにより、丸めが最後の反復まで残される必要がない。
【００３７】
一実施形態において、命令デコーダ回路によって生成される制御信号の１つは、もたらされるべき積和演算データ要素が飽和する又は飽和しない、のいずれであるかを指定し、ＳＩＭＤデータ処理回路内の累算回路は、前記制御信号に依存するように構成される。したがって、本発明の実施形態において、繰返しＭＡＣ命令の飽和する変形及び飽和しない変形を指定することができる。
【００３８】
スカラー値の選択に課される制約は、実装に依存するものとなるが、一実施形態において、スカラー値はＮ以下となるように制約される。
【００３９】
こうした実施形態において、要求される反復数がＮ以下であると仮定すると、単一の繰返しＭＡＣ命令を介して、Ｎ個の積和演算結果をもたらすために積和演算プロセスの複数の反復を行うことが可能であり、これらの積和演算結果は、必要とされる実際の最後の結果を表す。しかしながら、Ｎ個より多い反復が要求される場合、これは、一連の繰返しＭＡＣ命令の使用を通じて達成することができ、後続の各繰返しＭＡＣ命令は、直前の繰返しＭＡＣ命令からの積和演算結果を入力として取り上げる。したがって、一実施形態において、Ｎ＋Ｑ反復が要求される場合（ここでＱはＮ以下である）、第１の繰返しＭＡＣ命令は、Ｎ個の反復を示すスカラー値を有し、後続するさらなる繰返しＭＡＣ命令は、Ｑ回の反復を示すスカラー値を有し、最初の積和演算データ要素のベクトルとして第１の繰返しＭＡＣ命令に応答してＳＩＭＤデータ処理回路によって生成されたＮ個の積和演算結果を識別する。
【００４０】
一実施形態において、繰返しＭＡＣ命令によって指定される前記スカラー値が、行うことができる反復の最大数（典型的には第２ベクトルにおける係数データ要素の数）よりも大きい場合、スカラー値は前記最大数と等しく設定され、前記ＳＩＭＤデータ処理回路は前記積和演算プロセスの前記最大数の反復を行う。
【００４１】
一実施形態において、命令デコーダ回路は、一連の繰返しＭＡＣ命令に応答して、一連の積和演算段階を行うように前記ＳＩＭＤデータ処理回路を制御する制御信号を生成し、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、少なくとも１つの積和演算段階は、前の積和演算段階によって生成されたＮ個の積和演算結果を入力として用いる。こうした手法は、種々の理由のため、例えば要求される反復数はＮを上回ることから用いることができるが、１つの特定の実施形態において、一連の積和演算段階は、複素数に対して繰返しＭＡＣ動作を行うために用いられる。こうした状況において、入力データ要素と係数データ要素との両方が実部と虚部を含むことになり、要求される実数及び虚数積和演算結果をもたらすために４つの積和演算段階が要求される。
【００４２】
一連の積和演算段階が行われる必要がある一実施形態において、命令デコーダ回路は、単一の繰返しＭＡＣ命令に応答して、少なくとも２つの積和演算段階を行うために前記ＳＩＭＤデータ処理回路を制御する制御信号を生成するように配置することができ、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、各積和演算段階に対して要求される入力データ要素及び係数データ要素は、第１及び第２ベクトルから求められる。したがって、単一の繰返しＭＡＣ命令に応答して、多数の積和演算段階を並列に実行することができ、１つの特定の実施形態において、２つの積和演算段階が並列に行われることが可能である。これは、入力データ要素又は係数データ要素のいずれかが２つ以上の段階に対して再び使用される場合に有用である。なぜなら、これらのデータ要素がレジスタ・バンク／メモリから一度だけアクセスされることを必要とし、それにより、さらに改善されたエネルギーの節約をもたらすことを意味するからである。
【００４３】
１つの特定の実施形態において、入力データ要素は、２つの積和演算段階の間で再び使用され、１つの段階に対する各反復には、同じＮ個の入力データ要素を用いて、他の段階のカウンターパートの反復が後続する。２つの段階の各々に対して異なる係数データ要素が用いられるように各反復で係数データ要素は変化される。１つの特定の実施形態において、要求された係数データ要素を、Ｎ個の係数データ要素を含むＳＩＭＤレジスタの内容によって提供することができるように、スカラー値Ｍは、Ｎ／２以下となるように制約される。しかしながら、代替的に、このＭに対する制約は、１以上のＳＩＭＤレジスタの内容を用いて、係数データ要素の第２ベクトルを提供することによって除去することができる。
【００４４】
第２の態様から見ると、本発明は、制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うＳＩＭＤデータ処理回路と、前記ＳＩＭＤデータ処理回路と結合されプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を用いてデータを処理する方法を提供し、前記方法は、制御信号を生成するために入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する繰返し積和演算（繰返しＭＡＣ）命令をデコードするステップと、積和演算結果をもたらすために前記ＳＩＭＤデータ処理回路を前記制御信号で制御するステップと、を含み、積和演算結果は以下のステップによってもたらされる：積和演算プロセスの前記複数の反復を行うステップであって、積和演算プロセスの各反復が、Ｎ個の積和演算データ要素をもたらすためにＮ個の積和演算動作を並列に行うことを含むステップと、各反復について、前記第１ベクトルからＮ個の入力データ要素と、Ｎ個の積和演算動作の間に該Ｎ個の入力データ要素の各々と乗算されるべき単一係数データ要素を前記第２ベクトルから求めるステップと、積和演算プロセスの最後の反復においてもたらされたＮ個の積和演算データ要素から導出されたＮ個の積和演算結果を出力するステップ。
【００４５】
第３の態様から見ると、本発明は、データ処理装置の仮想機械実装を提供し、仮想機械実装は、入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する繰返し積和演算（繰返しＭＡＣ）命令に応答して、以下のステップによって、によって積和演算結果をもたらす：積和演算プロセスの前記複数の反復を行うステップであって、積和演算プロセスの各反復は、Ｎ個の積和演算データ要素をもたらすためにＮ個の積和演算動作を並列に行うことを含むステップと、各反復について、前記第１ベクトルからＮ個の入力データ要素と、前記第２ベクトルから、Ｎ個の積和演算動作の間に該Ｎ個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、積和演算プロセスの最後の反復においてもたらされたＮ個の積和演算データ要素から導出されたＮ個の積和演算結果を出力するステップ。
【００４６】
第４の態様から見ると、本発明は、制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うためのＳＩＭＤデータ処理手段と、プログラム命令に応答して前記制御信号を生成するための前記ＳＩＭＤデータ処理手段と結合された命令デコーダ手段とを備える、データ処理装置を提供し、前記命令デコーダ手段は、入力オペランドとして入力データ要素の第１ベクトル、係数データ要素の第２ベクトル、及び要求される複数の反復Ｍを示すスカラー値を有する繰返し積和演算（繰返しＭＡＣ）命令に応答して、前記ＳＩＭＤデータ処理手段を制御する制御信号を生成し、以下のステップにより、積和演算結果をもたらす：積和演算プロセスの前記複数の反復を行うステップであって、積和演算プロセスの各反復が、Ｎ個の積和演算データ要素をもたらすためにＮ個の積和演算動作を並列に行うことを含むステップと、各反復について、前記第１ベクトルからＮ個の入力データ要素と、前記第２ベクトルから、Ｎ個の積和演算動作の間に該Ｎ個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、積和演算プロセスの最後の反復においてもたらされたＮ個の積和演算データ要素から導出されたＮ個の積和演算結果を出力するステップ。
【００４７】
本発明は、単なる例として、付属の図面において例示説明されるそれらの実施形態を参照しながらさらに説明される。
【図面の簡単な説明】
【００４８】
【図１Ａ】本発明の一実施形態に係る繰返し積和演算命令に応答してＳＩＭＤデータ処理回路によって行われる積和演算プロセスの反復を概略的に例示説明する図である。
【図１Ｂ】本発明の一実施形態に係る繰返し積和演算命令に応答してＳＩＭＤデータ処理回路によって行われる積和演算プロセスの反復を概略的に例示説明する図である。
【図２】本発明の実施形態の技術が採用され得るデータ処理装置を概略的に例示説明するブロック図である。
【図３】本発明の一実施形態のＳＩＭＤ  ＭＡＣ回路をより詳細に例示説明する図である。
【図４】図３に示される状態機械の動作を例示説明する状態図である。
【図５】図３の実施形態に係る生成された種々の信号を例示説明するタイミング図である。
【図６】本発明の一実施形態に係る各反復において行われた積和演算プロセスを概略的に例示説明する図である。
【図７】本発明の一実施形態に係る種々の反復についてのＮ個の入力データ要素が入力データ要素の第１ベクトルからどのようにして導出されるかを概略的に例示説明する図である。
【図８】本発明の一実施形態に係る各反復に用いられる係数のベクトルが係数データ要素の第２ベクトルからどのようにして導出されるかを概略的に例示説明する図である。
【図９】本発明の実施形態の一連の繰返しＭＡＣ命令が複素数に対してＦＩＲフィルタ動作を行うためにどのようにして用いられてもよいかを概略的に例示説明する図である。
【図１０】ＳＩＭＤ  ＭＡＣ回路が単一の繰返しＭＡＣ命令に応答して２つの個別の積和演算段階を並列に行うことができる、図３に示された本発明の代替的な実施形態を例示説明する図である。
【図１１】図１０の回路のタイミング図である。
【図１２】本発明の実施形態の繰返しＭＡＣ命令を用いてプログラムコードを実行するための仮想機械実装を概略的に例示説明する図である。
【発明を実施するための形態】
【００４９】
本発明の実施形態によれば、入力オペランドとして入力データ要素の第１ベクトル（ｖｄ）、係数データ要素の第２ベクトル（ｖｃ）、及び要求される複数の反復Ｍを示すスカラー値を取り上げる、繰返し積和演算（繰返しＭＡＣ）命令が提供される。随意的に、繰返しＭＡＣ命令はまた、入力オペランドとして最初の積和演算データ要素のベクトル（本明細書では最初の累算データ要素とも呼ばれる）を取り上げてもよい。
【００５０】
この命令が命令デコーダ回路によってデコードされるとき、次式によって与えられるベクトル累算器出力をもたらすためにＳＩＭＤデータ処理回路を制御するのに用いられる制御信号が生成される。
ベクトルにおけるすべての「ｉ」に対して、
ｖａｃｃ［ｉ］＝ｖｃ［０］＊ｖｄ［ｉ］＋．．．．＋ｖｃ［Ｍ−１］＊ｖｄ［ｉ＋Ｍ−１］
【００５１】
最初の積和演算データ要素のベクトルが指定される場合、この式は、以下のようになる。
ベクトルにおけるすべての「ｉ」に対して、
ｖａｃｃ［ｉ］＝ｖａｃｃ［ｉ］＋ｖｃ［０］＊ｖｄ［ｉ］＋．．．．＋ｖｃ［Ｍ−１］＊ｖｄ［ｉ＋Ｍ−ｌ］
【００５２】
ＳＩＭＤデータ処理回路は、並列処理のＮ個のレーンを提供するものとして見ることができ、一実施形態において、上記の式における変数「ｉ」は、０からＮ−１までの間のすべての値をとる。したがって、図１Ａ及び図１Ｂに例示説明されるように、ＳＩＭＤデータ処理回路は、Ｎ個の積和演算結果を含むベクトル累算器出力１０をもたらし、これらのＮ個の積和演算結果は、図１Ａ又は図１Ｂに示されたＭの反復の遂行後にもたらされる。図１Ａは、最初の積和演算データ要素のベクトルが指定されない場合に行われる積和演算プロセスの反復を例示説明し、図１Ｂは、最初の積和演算データ要素のベクトルが指定される場合に行われる積和演算プロセスの反復を例示説明する。
【００５３】
図１Ａ及び図１Ｂにおいて、および実に先述の式において、ｖａｃｃ、ｖｃ、又はｖｄの後の角括弧の数字は、演算されているこれらのベクトルの特定のデータ要素を示すことに注意されたい。したがって、図１Ａ又は図１Ｂからはっきり分かるように、第１の反復の間、係数のベクトルｖｃからの第１係数データ要素は、並列処理のＮ個のレーンのすべてにおいて用いられ、各レーンは、第１入力データ要素から始めて、入力データ要素のベクトルｖｄからの異なる入力データ要素を取り上げる。反復２において、すべてのレーンにわたって次の係数データ要素が用いられ、用いられる入力データ要素のベクトルは、第１の反復において用いられるものと類似しているが、１つのデータ要素位置だけシフトされる。各反復の間で係数データ要素と入力データ要素が変化される様式は、Ｍ番目の反復によって、用いられている係数データ要素と入力データ要素は、図１Ａ又は図１Ｂの右側の列に示されるものとなるように、同じである。
【００５４】
ベクトルｖａｃｃ、ｖｃ、及びｖｄにおけるデータ要素は、実数又は複素数とすることができる。したがって、各反復は、実数又は複素積和演算動作を行うことができ、Ｍ番目の反復は、Ｎ個の実数又は複素結果をもたらす。複素積和演算動作が行われる例を考えると、図１Ａ及び図１Ｂのボックスにおける乗算の各々は、対応する複素乗算結果データ要素の実部と虚部をもたらすために一連の乗算、加算及び減算動作の遂行が含まれる。特に、ｖｃ（ｋ）＊ｖｄ（Ｉ）の一般的な場合を考えると、以下の計算が行われる。
実部乗算結果＝［ｖｄＲ（Ｉ）＊ｖｃＲ（ｋ）］−［ｖｄＩ（Ｉ）＊ｖｃＩ（ｋ）］
虚部乗算結果＝［ｖｄＲ（Ｉ）＊ｖｃＩ（ｋ）］＋［ｖｄＩ（Ｉ）＊ｖｃＲ（ｋ）］
（式中、「Ｒ」は実数成分を表し、「Ｉ」は虚数成分を表す）。
【００５５】
実数及び虚数乗算結果は、次いで、前の実数及び虚数累算結果と累算される。
【００５６】
上記の例においては、入力データ要素と係数データ要素との両方が複素数であるが、代替的な実施形態においてこれらのうちの１つのみが、入力ベクトルにおいて複素数として提供されてもよい。例えば、入力データ要素は、複素数として提供されてもよいが、係数データ要素は、実数として提供されてもよい。
【００５７】
一実施形態において、こうした状況は、前述の複素実施形態の特別なケースとして取り扱われ、式中、ｖｄ及びｖａｃｃベクトルにおけるデータ要素は複素数であり、一方、ｖｃにおける係数データ要素は実数である。この動作を行うために、実数ｖｃ要素は、以下のように複素数に内部的に変換することができる。
ｉｎｔｅｒｎａｌ＿ｖｃＲ［ｋ］＝ｖｃ［ｋ］
ｉｎｔｅｒｎａｌ＿ｖｃＩ［ｋ］＝０
次いで、前述のように複素積和演算動作を行うことができる。
【００５８】
先に述べたように、本発明の実施形態によれば、図１Ａ又は図１Ｂにおいて例示説明されたすべての動作は、単一の繰返しＭＡＣ命令に応答してＳＩＭＤデータ処理回路によって行うことができ、したがって、Ｎ個の積和演算結果１０は、すべて単一の命令に応答してもたらされる。さらに、本発明の実施形態において、すべての要求された入力データ要素と係数データ要素は、図１Ａ又は図１Ｂに示された計算が行われる前に、ＳＩＭＤレジスタ・バンクからＳＩＭＤデータ処理回路の内部レジスタの中に読み出され、したがって、図１Ａ又は図１Ｂにおいて例示説明された計算の遂行の間にさらにＳＩＭＤレジスタ・バンクにアクセスするあらゆる必要性を回避する。こうした機能を可能にするために、入力データ要素の第１ベクトルは、少なくともＮ＋Ｍ−１のデータ要素を含み、係数データ要素の第２ベクトルは、少なくともＭ個の係数データ要素を含む。１つの特定の実施形態において、スカラー値Ｍは、Ｎ以下となるように制約され、上記の要件は、入力データ要素の第１ベクトルを形成するために２つのＮ−要素ＳＩＭＤレジスタの内容を提供することによって、及び、係数データ要素の第２ベクトルを提供するために１つのＮ要素ＳＩＭＤレジスタの内容を提供することによって満たされる。
【００５９】
繰返しＭＡＣ命令に応答して行われる動作は、種々の状況に有用であり得るが、それらはＦＩＲフィルタ動作を行うための特にエネルギー効率の良い機構を提供し、ベクトル累算器出力１０におけるＭ個の積和演算結果の各々は、ＦＩＲ結果を形成する。
【００６０】
以下のＣコードは、繰返しＭＡＣ機能的モデルの多数の変形の各々についての、標準ベクトル抽出及びスカラー乗算によるベクトルの観点で、図１Ａ及び図１Ｂの上記で説明される動作の機能的モデルを提供する。
【００６１】
１）初期累算器がゼロに設定される、ＭＡＣの繰返し。
【数１】
0005619751.tif 000002
【００６２】
２）初期累算器が入力ベクトルとされる、ＭＡＣの繰返し。
【数２】
0005619751.tif 000003
【００６３】
３）初期累算器がゼロに設定される、ＭＡＣの飽和繰返し。
【数３】
0005619751.tif 000004
【００６４】
４）初期累算器が入力ベクトルとされる、ＭＡＣの飽和繰返し。
【数４】
0005619751.tif 000005
【００６５】
５）初期累算器がゼロに設定される、ＭＡＣの飽和及び丸め繰返し。
【数５】
0005619751.tif 000006
【００６６】
６）初期累算器が入力ベクトルとされる、ＭＡＣの飽和及び丸め繰返し。
【数６】
0005619751.tif 000007
【００６７】
７）初期累算器がゼロに設定される、乗算及び減算の繰返し。
【数７】
0005619751.tif 000008
【００６８】
８）初期累算器が入力ベクトルとされる、乗算及び減算の繰返し。
【数８】
0005619751.tif 000009
【００６９】
９）初期累算器がゼロに設定される、乗算及び減算の飽和繰返し。
【数９】
0005619751.tif 000010
【００７０】
１０）初期累算器を入力ベクトルとする、乗算及び減算の飽和繰返し。
【数１０】
0005619751.tif 000011
【００７１】
１１）初期累算器がゼロに設定される、乗算及び減算の飽和及び丸め繰返し。
【数１１】
0005619751.tif 000012
【００７２】
１２）初期累算器を入力ベクトルとする、乗算及び減算の飽和及び丸め繰返し。
【数１２】
0005619751.tif 000013
【００７３】
１３）初期累算器がゼロに設定される、ＭＡＣ複素繰返し。
【数１３】
0005619751.tif 000014
【００７４】
１４）初期累算器を入力ベクトルとする、ＭＡＣ複素繰返し。
【数１４】
0005619751.tif 000015
【００７５】
１５）初期累算器がゼロに設定される、ＭＡＣの複素共役繰返し。
【数１５】
0005619751.tif 000016
【００７６】
１６）初期累算器を入力ベクトルとする、ＭＡＣの複素共役繰返し。
【数１６】
0005619751.tif 000017
【００７７】
上記の例１を考えると、このＣコードの第１のラインは、入力として入力データ要素ベクトルｖｄ０及びｖｄ１（共に入力データ要素の第１ベクトルｖｄを構成する）、係数データ要素のベクトルを形成する係数ベクトルｖｃ、及び要求される反復数を示すスカラー値を形成する整数値Ｍを取り上げる、繰返しＭＡＣ命令を識別する。命令に応答して行われる動作が、次いで、Ｃコードの残りの部分で開始する。第１に、整数変数Ｐが初期化され、その後、積和演算ベクトルｖａｃｃがゼロに初期化される（これは、コード第２行、ｖｉｎｔ３２Ｌ＿ｔ  ｖａｃｃ＝ｖｄｕｐ＿ｎ＿ｓ３２Ｌ（０）；によって行われる）。ベクトルｖｄ０、ｖｄ１、及びｖｃ内の個々のデータ要素は１６ビット幅であるのに対して、ベクトルｖａｃｃ内の個々のデータ要素は、１６ビット入力データと１６ビット係数データ要素の乗算によってもたらされる乗算結果に適応するために、３２ビット幅である。
【００７８】
次に、スカラー値Ｍに対して２つのチェックが行われる。特に、ＭがパラメータＮ（ＣコードにおいてＥＬＥＭＥＮＴＳ１６として参照される）よりも大きいか又は等しい場合、ＭはＮに設定され、一方、それ以外の場合スカラー値Ｍは変化されないままである。第２に、Ｍが１未満である場合、Ｍは０に設定され、一方、それ以外の場合、Ｍ＝Ｍ−１に設定される。
【００７９】
ループは、次いで、Ｐ＝０で開始され、ＰがＭよりも小さい間繰返される（Ｐは、ループが繰返されるたびに増分される）。各反復において、積和演算動作が行われる（ｖｍｌａｌ＿ｎ＿ｓ１６として識別される）。用いられる係数データ要素は、該単一係数データ要素を伴うベクトルｖｃからＰ番目の係数データ要素を選択するレーン取得手順を用いて求められ、次いで、ベクトルにブロードキャストされる（すなわち、すべて同じものであるＮ個の個別の係数データ要素を形成するために（このブロードキャスト機能は、ｖｍｌａｌ＿ｎ＿ｓ１６動作における「ｎ」によって示される））。同じく示されるように、ＭＡＣ動作への入力として要求されるＮ個の入力データ要素が、シフト動作ｖｅｘｔ＿ｓ１６を用いてＰの値に応じてｖｄ０及びｖｄ１から選択される。最後に、累算入力がベクトルｖａｃｃから取り上げられる。
【００８０】
ループの要求された数の反復が完了すると、結果を戻すために最後のｖｍｌａｌ＿ｎ＿ｓ１６動作が行われる。この最後の反復は、ループに入る前にＭ＝Ｍ−１に設定されたときに要求される。
【００８１】
例２は、例１と類似しているが、ここでは、最初の積和演算ベクトルｖａｃｃは、命令によって指定される。例３〜１２は、各々の乗算減算バージョンと共に、飽和する変形と飽和し丸める変形を例示説明する。
【００８２】
例１３は、例１と類似しているが、ベクトルｖａｃｃ、ｖｃ、及びｖｄにおけるデータ要素は複素数であり、各反復において、複素積和演算動作（ｖｍｌａｌ＿ｎ＿ｃ１６として識別される）と複素シフト動作（ｖｅｘｔ＿ｃ１６として識別される）が行われる。例１５は、例１３と類似しているが、積和演算動作が行われる前に係数データ要素の虚部の符号を反転させるために、係数データ要素が共役にされる。例１４及び例１６は、それぞれ例１３及び例１５と類似しているが、これらの例において、最初の積和演算ベクトルｖａｃｃは、命令によって指定される。例１３〜例１６は、実数の例１及び例２と対応する複素数変形（非共役形式と共役形式との両方における）を表すが、すべての実数の例１〜例１２についての複素数変形を容易に提供することができることが理解されるであろう。
【００８３】
図２は、本発明の一実施形態に係るデータ処理装置を例示説明し、この特定の例において、データ処理装置は、デジタル信号プロセッサ（ＤＳＰ）１００の形態をとる。ＤＳＰ１００によって行われる動作は、種々の形態をとることができるが、一実施形態において、ＤＳＰは、無線ベースバンド処理機能を行うために用いられ。無線ベースバンドは、こうした集積回路の処理機能に対して重い要求を課す。要求されるデータ・スループットは大きく、すべての要素が高効率で用いられるように、ＤＳＰ内に提供される異なる要素のバランスをとることが重要である。図２に示されるように、ＤＳＰは、ＳＩＭＤ積和演算回路１１０と種々の他のＳＩＭＤ処理回路１２０とを含むＳＩＭＤ部１０５を含む。ＳＩＭＤ  ＭＡＣ回路１１０と他のＳＩＭＤ処理回路１２０との両方は、ＳＩＭＤ処理回路によって要求されるデータ要素のベクトルを格納するＳＩＭＤレジスタ・バンク１４０へのアクセスを有する。ＳＩＭＤ  ＭＡＣ回路１１０はまた、ＭＡＣ動作の間に生成された累算データ要素を保持するのに用いられる１つ又は複数のＳＩＭＤ累算レジスタ１３０へのアクセスを有する。
【００８４】
１つの例において、ＳＩＭＤ  ＭＡＣ回路１１０と他のＳＩＭＤ処理回路１２０は、ＳＩＭＤレジスタ・バンクから提供される算術値に対して乗算、加算、及びシャッフル動作を行うために用いることができる各々１６ビット幅の３２個の並列処理レーンを有する。要求される入力値を並列処理のレーンの各々に提供するために、ＳＩＭＤレジスタ・バンク１４０内の１つ又は複数の入力値レジスタ内のそれぞれの要素から１６ビットデータワードが取り上げられる。
【００８５】
ＳＩＭＤ回路は、しばしばパイプラインされ、一実施形態において、ＳＩＭＤ  ＭＡＣ回路は、計算の結果が、計算がパイプラインの中に発せられた３サイクル後に利用可能なとなるように、３段階のパイプラインを形成する。
【００８６】
一実施形態において、それぞれの処理レーンは、コントローラ１６０によってプログラム・メモリ１６５から検索される２５６ビットの超長命令語（ＶＬＩＷ）命令によって制御される。このＶＬＩＷ命令はまた、典型的に、ＤＳＰ１００のスカラー部１４５内のスカラー処理回路１５０を制御するのに用いられるスカラー命令を含み、スカラー処理回路１５０は、１つ又は複数のスカラー・レジスタ・バンク１５５へのアクセスを有する。コントローラ１６０は、ＶＬＩＷ命令内の命令をデコードし、且つ要求される制御信号をＳＩＭＤ部１０５内の回路とスカラー部１４５内の回路に送信するのに用いられる、１つ又は複数の命令デコーダを含む。コントローラはまた、ロード／格納ユニット１７０に対して、必要に応じておよび要求される場合、制御信号を送信して、ＳＩＭＤレジスタ・バンク１４０又はスカラー・レジスタ・バンク１５５のいずれかに格納するために、データ・メモリ１７５からデータが読み込まれるようにさせるか、又はこれらのレジスタ・バンクからデータ・メモリ１７５にデータが戻されて格納されるようにする。
【００８７】
スカラー処理回路１５０は、上述のＳＩＭＤ処理回路と並列に動作し、主に制御動作を行うように働く。スカラー処理回路の１つはまた、データ・メモリ１７５におけるデータ値にアクセスするのに用いられるメモリ・アクセス・アドレスを生成することを担当するアドレス生成ユニットを制御してもよい。一実施形態において、スカラー処理回路１５０は、１から３までの間のパイプライン段階を有し、データ・メモリ１７５は、３サイクル又は６サイクルの待ち時間を有する。
【００８８】
本発明の実施形態の繰返しＭＡＣ命令を考えると、こうした命令は、コントローラ１６０によってプログラム・メモリ１６５から読み込まれるＶＬＩＷ命令内に現れてもよく、該繰返しＭＡＣ命令をデコードすると、ＳＩＭＤ  ＭＡＣ回路１１０に積和演算プロセスの複数の反復を行わせる制御信号が、ＳＩＭＤ部１０５に、特にＳＩＭＤ  ＭＡＣ回路１１０に発せられ、それにより図１Ａ又は図１Ｂにおいて概略的に例示説明される一連の動作を実施する。
【００８９】
図３は、要求される機能を提供するためにＳＩＭＤ  ＭＡＣ回路１１０内に提供される構成要素をより詳細に例示説明する図である。レジスタ２２０及び２２２は、集合的に入力データ要素の第１ベクトルｖｄを形成するベクトルｖｄ０及びｖｄ１を最初に格納するために提供され、一方、レジスタ２４６は、係数データ要素の第２ベクトルを格納するのに用いられる。マルチプレクサ２４８、１：Ｎ変換器２５０、及びマルチプレクサ２４２を用いて、レジスタ２４０に格納される係数のベクトルを形成するために、各反復について単一係数データ要素を選択し、Ｎ個のレーンにわたってブロードキャストすることができる。積和演算プロセスの第１の反復の間、これは、第１係数データ要素を取り上げ、それをＮ個のレーンにわたってブロードキャストする１：Ｎ変換器２４４を介して達成され、それによりレジスタ２４６を用いることの１つのサイクル遅延が回避される。
【００９０】
第１の反復の間、レジスタ２２０は、ベクトルｖｄ０（すなわち、ベクトルｖｄの第１のＮ個の入力データ要素）を含むが、後続の各反復について、レジスタ２２０の内容は、次の反復についての要求される入力データ要素を作製するために、レジスタ・バンク２２２（マルチプレクサ２２４を介して）からのデータ要素とレジスタ２２０の現在の内容とのうちの１つにおいて取り上げ、１つのデータ要素だけシフトを行う、シフト回路２２６を用いて変化され、この結果は、次いで、マルチプレクサ２３０を介してレジスタ２２０の中に戻るようにルーティングされる。
【００９１】
次いで、図３に示されるように、ＳＩＭＤ  ＭＡＣ回路１１０は、Ｎ個のレーンの並列処理の２６０を有し、各レーンは、ボックス２６０内で例示説明される構成要素を含み（レジスタ２６４は、すべてのレーンにまたがるものとして見ることができる）、各レーンは、入力レジスタ２２０、２４０の各々においてＮ個のデータ要素のうちの１つに対して動作する。特に、乗算回路２６２は、レジスタ２２０における入力データ要素のうちの１つを、レジスタ２４０からの係数データ要素と乗算し、その結果が、レジスタ２６４に格納される。次のクロックサイクルにおいて、ゼロに設定された回路２７２から提供された累算値とレジスタ２６４からの乗算結果を用いて加算器回路２６８によって累算動作が行われる。通常は、ライン２１７上の制御信号が、ゼロに設定する機能を使用不可にし、したがって、ＳＩＭＤ累算レジスタ１３０から累算結果が受信される。しかしながら、随意的に、繰返しＭＡＣ命令は、最初の累算値をゼロ値に指定してもよく、その場合、第１の反復の間に、ライン２１７上の制御信号がゼロに設定する機能を使用可能にし、したがって、第１サイクルにおいて用いられる累算値がないことが保証される。
【００９２】
繰返しＭＡＣ命令は、典型的には、各反復における乗算の結果が実行中の累算結果に加算される、乗算加算動作を指定するが、これは各反復における乗算結果が実行中の累算値から減算される乗算減算動作を代替的に指定してもよい。乗算減算動作が定義される場合、ライン２１６上の制御信号は、否定回路２６６に、レジスタ２６４におけるデータ要素を加算器２６８に入力する前に無効にさせる。
【００９３】
同様に、繰返しＭＡＣ命令は、もたらされる積和演算データ要素が飽和する又は飽和しない、のいずれであるかを指定してもよい。それらが飽和しない場合、典型的には、入力データ要素のサイズ及び／又は累算レジスタ１３０のサイズは、累算結果が飽和することがないように選択される。しかしながら、命令が、積和演算データ要素が飽和することを指定する場合、飽和回路２７０は、出力をＳＩＭＤ累算レジスタ１３０にルーティングする前に加算器２６８からの出力を評価することを可能にする制御信号をパス２１９上で受信する。特に、飽和論理は、出力積和演算データ要素が最大正数から最小負数まで又はその逆の方向で遷移するかどうかを判定するためにオーバーフロー・ビットを評価し、遷移する場合、それぞれ最大正数又は最小負数に保持されるように結果を修正する。
【００９４】
制御信号２１８はまた、最後の反復の間に加算器２６８によって行われる加算の中に随意的な丸め増分が導入されることを可能にするために提供され、これは、繰返しＭＡＣ命令が、丸めが要求されることを指定する場合に用いられる。丸めが要求される場合、丸めは適正な数学的結果がもたらされることを保証するために最後の反復においてのみ行われることが重要であり、したがって、随意的な丸め増分値は最後の反復の間にのみ導入され、これは、より詳細に以下で説明される状態機械２００によって制御される。
【００９５】
前述の種々の回路要素の動作は、ＳＩＭＤ  ＭＡＣ回路１１０によって実行されるべき各ＳＩＭＤ命令がコントローラ１６０によってデコードされるときに種々の制御信号を受信する、状態機械２００によって制御される。
【００９６】
図３に示されるように、状態機械は、命令がデコーディングされる際に３つの信号を受信する。第１の信号は、パス２０２上で発せられた繰返し指示であり、この信号が設定される場合、これはデコードされている命令が繰返しＭＡＣ命令であることを示し、一方、設定されない場合、これはデコードされている命令が標準ＭＡＣ命令であることを示す。パス２０４上で受信される信号は、反復数を与えるリピート信号であり、これは、スカラー・レジスタ・バンク１５５に格納されたスカラー値から提供され、標準ＭＡＣ命令に対しては用いられない。受信される最後の信号は、パス２０６上で受信されるｍｕｌｔ＿ｃｍｄ信号であり、積和演算が乗算加算又は乗算減算のいずれであるか、累算値が飽和する又は飽和しない、のいずれであるか、丸めが要求されるかどうか、最初の累算値が指定されるかどうか、動作の開始時に累算がクリアされるべきかどうか、及び任意の他の該当する制御信号といった、標準の乗算器コマンド情報を提供する。
【００９７】
代替的な実施形態において、リピート信号は、繰返しＭＡＣ命令の入力オペランドのうちの１つを形成するスカラー値から導出することができ、この場合、リピート信号は、スカラー・レジスタ・バンク１５５ではなくコントローラ１６０から提供される。
【００９８】
図４は、状態機械の２つの基本状態を示す。リセット後に、状態機械は繰返しなし状態３００にあり、設定状態でのパス２０２上の繰返し信号、及び反復数を指定するパス２０４上のリピート信号を受信するまでは、繰返しなし状態にとどまる。これらの条件下で、状態機械の状態は、繰返しなし状態３００から繰返し状態３１０に遷移する。状態機械は、多数の制御信号をＳＩＭＤ  ＭＡＣ回路１１０内の種々の構成要素に発し、制御信号は、パス２１２上のｍｃｙｃ＿ｅｎ信号を含み、それは、状態機械が繰返しなし状態３００にある間は論理０値に設定され、状態機械が繰返し状態３１０にある間は論理１値に設定される。
【００９９】
繰返し状態３１０の間、状態機械は、ｍｃｙｃ＿ｃｎｔ信号と呼ばれるカウンタを維持するが、カウンタは、各反復が行われる際に最初のリピート信号値Ｍから減算され、ｍｃｙｃ＿ｃｎｔ信号が１以下のとき、状態機械は、繰返し状態３１０から繰返しなし状態３００に戻るように遷移する。
【０１００】
図５は、状態機械２００が、パス２０２、２０４、及び２０６上で受信する、３つの入力信号に応答して、もたらす種々の信号を例示説明するタイミング図であり、それらの受信信号が繰返しＭＡＣ命令の実行を識別する状況でのものである。
【０１０１】
マルチプレクサ２３０を考えると、パス２１２上で状態機械２００によって発せられたｍｃｙｃ＿ｅｎ信号は、信号がアサートされるとマルチプレクサがその左側で（シフト回路２２６から）受信した入力をレジスタ２２０に出力するようにマルチプレクサを制御するのに用いられる。したがって、第１サイクルにおいて、ｍｃｙｃ＿ｅｎ信号をアサートする前に、ＳＩＭＤレジスタ・バンクからの出力が、マルチプレクサを介してレジスタ２２０の中にルーティングされ、先に述べたように、これは、ベクトル・レジスタの内容ｖｄ０がレジスタ２２０内に置かれることを意味する。次のサイクルにおいて、マルチプレクサ２３０は、左側入力を選択するためにアサートされたｍｃｙｃ＿ｅｎ信号によって準備され、先に説明したように、この左側入力は、レジスタ２２０の内容と、マルチプレクサ２２４の制御の下でレジスタ２２２から選択されるデータ要素の１つに基づいて、シフト回路２２６によって生成される。マルチプレクサ２２４は、図５に示されるｍｃｙｃ＿ｅｌｅｍ＿ｓｅｌ信号を受信し、該信号に従ってレジスタ２２２から該当するデータ要素を選択する。したがって、図１Ａ又は図１Ｂを参照すると、各反復についてのレジスタ２２０の内容は、各反復についての図１Ａ又は図１Ｂに概略的に示された入力データ要素となることが分かるであろう。
【０１０２】
マルチプレクサ２４２を考えると、繰返しＭＡＣ命令のない状態では、マルチプレクサ２４２の左側入力がレジスタ２４０上に伝搬される。特に、マルチプレクサ２４２は、パス２１２上で状態機械によって出力されるｍｃｙｃ＿ｅｎ信号とパス２０２上で状態機械によって受信される繰返し信号とによって形成された２ビット制御信号を受信する。繰返しＭＡＣ命令のない状態では、両方のビットは論理０状態にクリアされる。繰返しＭＡＣ命令の発生時には、繰返し信号は、第１クロックサイクルの間はｈｉｇｈに設定されるが、ｍｃｙｃ＿ｅｎ信号は、次のクロックサイクルまで状態機械２１２によって設定状態で出力されない。したがって、第１クロックサイクルの間、レジスタ２４０への入力は、マルチプレクサ２４２への中間入力によって与えられ、これは、係数のベクトルｖｃにおける第１係数データ要素、すなわちｖｃ［０］を用いて１：Ｎ変換器回路２４４によってもたらされる。後続の各サイクルについて、繰返しＭＡＣ命令の間、パス２１２上で発せられたｍｃｙｃ＿ｅｎ信号が設定され、したがって、レジスタ２４０への入力は、先に説明したようにマルチプレクサ２４８の制御の下でレジスタ２４６における内容（すなわち、係数データ要素の第２ベクトル）から生成される、マルチプレクサ２４２への右側入力から取られる。マルチプレクサ２４８は、マルチプレクサ２２４と同様に、ｍｃｙｃ＿ｅｌｅｍ＿ｓｅｌ信号を受信し、したがって、係数データ要素の各々を順に処理する。マルチプレクサ２４８を考えると、これは、ｍｃｙｃ＿ｅｌｅｍ＿ｓｅｌがｉである場合に係数データ要素ｉ＋１を選択する。
【０１０３】
完全性のために、レジスタＤ２４０及びレジスタＡ２２０からの出力が、図５において例示説明され、ＶＣ０は、第１の反復において用いられる係数のベクトルを示し、ＶＤ０は、第１の反復おいて用いられる入力データ要素のベクトルを示すなどである。
【０１０４】
図３に示されるように、パス２０６上で受信されたｍｕｌｔ＿ｃｍｄ信号は、レジスタ２０５にラッチされ、その後、マルチプレクサ２１０上でルーティングされ、そこで、種々のコマンド情報がパス２１６、２１７、２１８、及び２１９上で第３のクロックサイクルにおいて伝搬される前に、レジスタ２１５上に伝搬されてもよい。ただコマンド情報の伝搬において要求される３サイクル遅延を保証するために、該コマンド情報が適正なサイクルで累算回路に送られるように２つのレジスタ２０５、２１５が挿入される。図５に示されるように、状態機械はまた、パス２０８上でマルチプレクサ２１０の別の入力にルーティングするために、ｍｕｌｔ＿ｃｍｄ信号の僅かに修正されたバージョンを生成し、次いで、ｍｕｌｔ＿ｃｍｄ＿ｅｘ信号として、左側入力又は右側入力のいずれがマルチプレクサ２１５上に伝搬されるべきかを示す制御信号（ｍｕｌｔ＿ｃｍｄ＿ｅｘ制御信号）をマルチプレクサに発することができる。ｍｃｙｃ＿ｅｎ又はｍｃｙｃ＿ｅｘ（図５に示されたｍｃｙｃ＿ｅｎのパイプラインされるバージョン）のいずれかがｈｉｇｈに設定される間、この制御信号はｈｉｇｈに設定される。
【０１０５】
したがって、第１の反復について、図５に示されるように、受信されたｍｕｌｔ＿ｃｍｄ  ＯＰは、パス２０８上でＯＰ０として出力され、マルチプレクサ２１０からの出力に対して選択され、ＯＰ０は、ＯＰが丸めを指定する場合で、ＯＰ０が、第１の反復に丸め増分が導入されないことを保証するために丸めを使用不可にすること以外はＯＰと同一である。最後の反復に至るまでの次の反復について、状態機械は、パス２０８上でＯＰ１を発し、これは元のＯＰと同一のものとなるが、累算が常に使用可能にされ、丸めが常に使用不可にされ、ＯＰ１はマルチプレクサ２１０から伝搬される。既述のように、元のＯＰは、最初の累算がゼロに設定されるべきであることを識別し得るが、明らかにこれは第１の反復の間でのみ起こるべきであり、従って、累算を使用可能にすることが必要である。丸めは、適正な数学的丸めが起こることが保証されるように、最後のサイクルまで使用不可にされたままである必要がある。同じく図５に示されるように、最後の反復時に、ｍｕｌｔ＿ｃｍｄ＿ｅｘ信号はＯＰ２に設定され、これは元のＯＰと同一のものとなるが、累算が常に使用可能にされ、ＯＰ２はマルチプレクサ２１０から伝搬される。したがって、この時点で、元のＯＰが丸めを指定した場合、ＯＰ２もまた丸めを指定し、パス２１８上で丸め増分が導入されることになる。
【０１０６】
図５におけるｍｕｌｔ＿ｃｍｄ＿ｅｘ信号は、動作の書き戻し段階を制御するために１つのサイクル後でレジスタ２１５から発せられる信号ｍｕｌｔ＿ｃｍｄ＿ｗｂをもたらす、マルチプレクサ２１０の出力を示す。
【０１０７】
同じく図３に示されるように、パス２１２上で発せられたｍｃｙｃ＿ｅｎ信号は、図５に示されたストール信号をもたらすために随意的にレジスタ２１４にラッチすることができる。これは、コントローラに、ストール信号がアサートされる間、命令フェッチを一時停止させるために用いることができ、それにより電力消費を減少させる。
【０１０８】
図６は、本発明の実施形態においてＮ個のレーン２６０内のＳＩＭＤ  ＭＡＣ回路１１０によって行われる積和演算動作を概略的に例示説明する。図６に示されるように、乗算器２６２内のＮ個のレーンは、Ｎ個の入力データ要素４００と、単一係数データ要素をＮ回繰返すことによって形成される係数のベクトル４１０を受信し、それらに基づいて要求される乗算を行い、結果としてレジスタ２６４に格納されるＮ個の乗算データ要素４２０がもたらされる。入力データ要素と係数データ要素との各々が１６ビット幅であると仮定すると、乗算データ要素の各々は少なくとも３２ビット幅となる。
【０１０９】
その後、Ｎ個の乗算データ要素４２０が、回路２７２から入力されるＮ個の積和演算データ要素４３０に加算される（又は随意的に否定回路２６６が有効とされる場合は減算される）。典型的には、これは、前の反復からのＮ個の積和演算データ要素となる又は最初の積和演算データ要素のベクトルとなる、ＳＩＭＤ累算レジスタ１３０の内容となる。代替的に、第１の反復について、Ｎ個の積和演算データ要素はすべてゼロに設定されてもよい。加算の結果は、Ｎ個の積和演算データ要素４４０の生成であり、これらはＳＩＭＤ累算レジスタ１３０に戻されて格納される。
【０１１０】
図７は、元の入力データ要素の第１ベクトルｖｄから各反復についてのＮ個の入力データ要素を生成するために、図３における回路要素２２０、２２２、２２４、及び２２６がどのようにして配置されるかを概略的に例示説明する。特に、最初にベクトルｖｄ０  ４５０はレジスタ２２０に格納され、ベクトルｖｄ１４６０はレジスタ２２２に格納される。第１の反復では、レジスタ２２０における内容は変化されず、したがって、Ｎ個の入力データ要素４７０は乗算器２６２にルーティングされる。次の反復において、シフト回路２２６は、レジスタ２２０の現在の内容、すなわちベクトルｖｄ０  ４５０を受信し、尚且つ、レジスタ２２２に格納されたベクトルｖｄ１から第１データ要素、すなわちｖｄ［Ｎ］を受信し、１つのデータ要素だけ右シフト動作を行い、それにより、結果としてＮ個の入力データ要素４８０がもたらされ、マルチプレクサ２３０を介してレジスタ２２０の中に戻される。後続の各反復は、図１Ａ又は図１Ｂに示される一連のＮ個の入力データ要素ベクトルがもたらされるのと同様の様式で進む。
【０１１１】
図８は、各反復について用いられる係数のベクトルが、レジスタ２４６に格納された係数データ要素の第２ベクトルｖｃからどのようにして導出されるかを概略的に例示説明する。第１の反復時に、第１係数データ要素ｖｃ［０］が選択され、次いで、係数のベクトル５１０を形成するためにＮ回繰返される。先に説明したように、一実施形態において、これは実際には、１サイクルの伝搬遅延を回避するために、レジスタ２４６の内容を用いるのではなく１：Ｎ変換回路２４４を用いて達成される。次のサイクルにおいて、第２係数データ要素ｖｃ［１］が選択され、１：Ｎ変換器２５０からマルチプレクサ２４２を介してレジスタ２４０の中に入力される係数のベクトル５２０を形成するために、Ｎ回繰返される。後続の各反復について、次の係数データ要素が、図１Ａ又は図１Ｂに示される一連の係数ベクトルがもたらされるように同じ方法で選択され、操作される。
【０１１２】
上で説明された実施形態において、繰返しＭＡＣ命令は実数を処理する。しかしながら、先に説明したように、代替的な実施形態において、繰返しＭＡＣ命令は、複素数を処理するように配置されてもよく、この場合、すべてのデータ要素（入力データの第１ベクトル、第２係数のベクトル、及びＮ個の積和演算結果における）が複素数であり、すべての動作が複素動作である。図３の例を考えると、これは、乗算回路２６２を複素乗算器として配置することによって達成することができ、該複素乗算器は、実部と虚部を有する乗算結果をもたらすために要求される加算及び減算と共に段落００５４〜００５６において先に説明された実部と虚部の４つの乗算を行うように配置することができる。加算器２６８は、次いで、更新された複素累算値をもたらすために実部と虚部に対して要求される累算動作を行う複素加算器として配置することができる。乗算減算動作が行われている場合、無効化回路２６６は、加算器２６８に入力する前に乗算回路２６２によってもたらされる複素乗算結果を無効にする。
【０１１３】
複素共役繰返しＭＡＣ命令が処理されている場合、要求される乗算演算を行う前に係数データ要素の虚部の符号を反転させる付加的な制御信号を乗算回路２６２に提供することができる。
【０１１４】
上記の方法で複素数を取り扱うことの代替的方法として、複素数ＦＩＲフィルタはまた、図９に概略的に例示説明されるように、４つの非複素繰返しＭＡＣ命令を用いて組み立てることができる。特に、図９の上部において、積和演算結果の実数及び虚数成分をもたらすために要求される式が示される（「Ｒ」は実数成分を表し、「Ｉ」は虚数成分を表す）。図９の下半分において、これらの結果を生成するために要求される一連の４つの命令が示され、各命令についての入力オペランドは、角括弧で識別される。したがって、第１の繰返しＭＡＣ命令は、入力ベクトルとしてｖｄＲ及びｖｃＲを用いて乗算加算を行い、最初のゼロの累算値を有する。すべての４つの命令について、スカラー値は同じ値Ｍに設定される。第２繰返しＭＡＣ命令は、次いで、入力ベクトルとしてｖｄＩ及びｖｃＩを用い、最初の累算結果として第１の繰返しＭＡＣ命令によってもたらされる累算結果を設定して、ｖａｃｃＲ結果の生成を完了する。第２繰返しＭＡＣ命令は減算変形のものであり、したがって、乗算減算動作を行うことに注意されたい。第３の及び第４の繰返しＭＡＣ命令は、次いで、同様の方法でｖａｃｃＩ結果を生成するが、この際、の２つの繰返しＭＡＣ命令のうちの第２のものは（繰返しＭＡＣ４）はまた、加算変形である。
【０１１５】
上記で説明された本発明の実施形態において、各繰返しＭＡＣ命令は、入力データ要素の第１ベクトルと係数データ要素の第２ベクトルを受信し、Ｎ個の積和演算結果のうちの１つのセットを生成するが、代替的な実施形態において、１つの繰返しＭＡＣ命令は、Ｎ個の積和演算結果のうちの２つ以上のセットを生成するように配置することができ、その場合、入力オペランド又は係数データ要素のいずれかは、行われる２つ以上の積和演算プロセスの間で再び用いられる。こうした実施形態が、図１０のブロック図と図１１のタイミング図を参照しながら説明される。
【０１１６】
図１０において用いられる装置は、コントローラ１６０によってデコードされる単一の繰返しＭＡＣ命令にすべてが応答するＮ個の積和演算結果のうちの２つの個別のセットがもたらされるように、ＳＩＭＤ  ＭＡＣ回路１１０が２つの積和演算段階を並列に行うことを可能にするために用いられる。図１０と先に説明された図３との比較から理解されるように、回路は基本的には同一のものであり、少しの修正を受ける。最初に、以下でより詳細に説明されるように、単一のＳＩＭＤ累算レジスタ１３０の代わりに２つのＳＩＭＤ累算レジスタ６００、６１０が提供され、状態機械２００によって発せられた制御信号によって制御される幾つかの関連するアクセス制御回路６２０が提供される。さらに、レジスタ２２０への入力を求めるために図３において用いられるマルチプレクサ２３０は、ここでは、状態機械２００によって出力される制御信号から導出される２ビット信号によって制御される３つの入力マルチプレクサ６３０に置き換えられる。唯一の他の注意点は、図３においてマルチプレクサ２２４及び２４８は、両方とも状態機械からの同じ制御信号によって制御されるが、それらは、ここでは、図１１のタイミング図を参照しながらより詳細に説明されるように、２つの異なる信号によって制御されることである。
【０１１７】
図１１のタイミング図と図５のタイミング図との比較から理解されるように、図１１は、図５と類似しているが、付加的に、図１０の回路内で用いられる追加の制御信号を示す。図１０に示されるように、マルチプレクサ２４８は、図１１に示されるように各反復の間に増分されるｍｃｙｃ＿ｃ＿ｓｅｌ信号によって制御される。指定される反復数はＭであるが、２つの個別の積和演算段階が実施されている場合、ｍｃｙｃ＿ｃｏｕｎｔは、２Ｍ−１から減少される。ｍｃｙｃ＿ｃ＿ｓｅｌ信号が各反復の間に増分する結果として、各反復の間にレジスタＤ２４０から出力される係数のベクトルが変化することが分かる。
【０１１８】
対照的に、図１１から明らかなように、ｍｃｙｃ＿ｂ＿ｓｅｌ信号によって制御されるマルチプレクサ２２４は、２回の反復毎にのみ増分される。図１０に示されるように、レジスタＡ２２０からの出力は、中間入力としてマルチプレクサ６３０に戻るようにルーティングされる。ｍｃｙｃ＿ｅｎ信号が設定されるとき、マルチプレクサ６３０は、パス２１２上で状態機械２００によって出力されるｍｃｙｃ＿ａ＿ｅｎ信号の値に応じて、レジスタ２２０にその中間入力又はその左側入力のいずれかを出力する。図１１に示されるように、この信号は、各反復で設定状態とクリア状態との間で交互に変化し、その内容はｍｃｙｃ＿ａ＿ｅｎ信号がｈｉｇｈであることに応答して２つの反復毎に一度だけ更新することができるので、レジスタ２２０からの出力が２つの反復について同じに維持されることが保証される。
【０１１９】
状態機械２００からアクセス制御回路６２０によって受信されたｍｃｙｃ＿ａｃｃ＿ｃｔｒｌ信号はまた、第１の反復によって要求される最初の３つのサイクルがひとたび完了すると、クロックサイクル毎に周期変動する。この信号が論理０レベルである間に、ＳＩＭＤ累算レジスタ６００がアクセスされ、該信号が論理１レベルである間に、ＳＩＭＤ累算レジスタ６１０がアクセスされる。これは、個別の積和演算段階の各々について維持された累算データ要素が、個別のＳＩＭＤ累算レジスタ６００、６１０内に個別に保持されることを保証する。
【０１２０】
図１０及び図１１の上記の説明から理解されるように、この実施形態において、各反復について選択される入力データ要素のベクトルは、両方の積和演算段階について再び用いられる。しかしながら、係数データ要素は再び用いられず、代わりに、積和演算段階の各々について、係数データ要素の異なるベクトルが用いられ、第１積和演算段階は、ベクトルＶＣ０、ＶＣ２、ＶＣ４などを用い、第２積和演算段階ベクトルＶＣ１、ＶＣ３、ＶＣ５を用いるなどである。したがって、この実施形態において、ＳＩＭＤレジスタ・バンクにおけるレジスタの１つから提供される場合の係数データ要素の第２ベクトルは、交互の係数データ要素の各々が同じ積和演算段階に関係するようにパックされる個々の係数データ要素を含むことが分かる。この実施形態において、レジスタ２４６に格納されたＮ個の係数データ要素が、図１１に示された係数データ要素のベクトルの２Ｍ個の個別のセットを提供するのに十分なものとなるように、スカラー値ＭはＮ／２以下となるように制約される。しかしながら、代替的な実施形態において、図１０の回路は、係数データ要素の第２ベクトルを提供するために２つのＳＩＭＤレジスタの内容を用いることができるように修正することができ、それによりスカラー値ＭはＮ以下の任意の値となることができる。
【０１２１】
２つの個別の積和演算段階がＳＩＭＤ  ＭＡＣ回路１１０内で並列に行われることを可能にする単一の繰返しＭＡＣ命令の提供は、種々の状況において有用となり得る。一実施形態において、こうした命令は、複素数に対してＦＩＲフィルタ動作を行うときに要求される種々の積和演算段階を行うときのエネルギー消費を減少させるために用いられる。例えば、図９を考えると、１つの命令は、ｖａｃｃＲ＝ｖａｃｃＲ＋ｖｄＲ．ｖｃＲと、ｖａｃｃＩ＝ｖａｃｃＩ＋ｖｄＲ．ｖｃＩとの両方の段階を行うために用いることができる。特に、ｖｄＲ成分は、両方の段階の間で共有することができるが、係数データ要素の異なるベクトルは、図１０及び図１１を参照しながら先に説明された機構を用いて選択されることが明らかである。したがって、事実上、図９に示される２つの繰返しＭＡＣ命令「繰返しＭＡＣ１」及び「繰返しＭＡＣ３」によって行うことができる機能は、単一の繰返しＭＡＣ命令に包括することができる。同様に、２つの繰返しＭＡＣ命令「繰返しＭＡＣ２」及び「繰返しＭＡＣ４」によって行われる機能もまた、単一の繰返しＭＡＣ命令に包括することができるが、この場合、無効化回路２６６は、１つの累算レジスタにおいて乗算減算手順の結果が保持され、一方、他の累算レジスタにおいて乗算加算手順の結果が保持されるように、各反復の間で交互に有効にされ及び無効にされる必要がある。
【０１２２】
すべての上記の実施形態において、スカラー値がＮ以下となるように制約される場合、多数の繰返しＭＡＣ命令を一つずつ用いることによってＮ個以上の反復が要求されるときの計算を行うことがさらに可能であり、後続の繰返しＭＡＣ命令は、その最初の積和演算データ要素として、直前の繰返しＭＡＣ命令によって生成されたＮ個の積和演算結果を取り上げることが理解されるであろう。
【０１２３】
上で説明された技術は、上述の繰返しＭＡＣ命令を含む一連の固有の命令を実行するハードウェアによって行われてもよいが、代替的な実施形態において、こうした命令は、命令は仮想機械に固有のものであるが仮想機械は異なる固有の命令セットを有するハードウェア上で実行されるソフトウェアによって実装される、仮想機械環境で実行されてもよいことが理解されるであろう。仮想機械環境は、全命令セットの実行をエミュレートする全仮想機械環境を提供してもよく、又は、例えば、本発明の技術の命令を含む幾つかの命令のみがハードウェアによってトラップされ部分的仮想機械によってエミュレートされる、部分的なものであってもよい。
【０１２４】
より詳細には、上記で説明された繰返しＭＡＣ命令は、全仮想機械又は部分的仮想機械に固有の命令として実行されてもよく、仮想機械は、その基礎となるハードウェア・プラットフォームと共に、組み合わされて前述のＳＩＭＤ処理回路を提供するように動作する。
【０１２５】
図１２は、用いられ得るこうした仮想機械実装を例示説明する。先に説明された実施形態は、関係している命令をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で本発明を実施するが、ハードウェア・デバイスの所謂、仮想機械実装を提供することも可能である。これらの仮想機械実装は、仮想機械プログラム８８０をサポートするホスト・オペレーティング・システム８６０を実行するホスト・プロセッサ８４０上で実行される。典型的には、妥当な速度で実行する仮想機械実装を提供するためには大型の強力なプロセッサが要求されるが、こうした手法は、互換性又は再使用の理由のために別のプロセッサに固有のコードを実行する要望があるときのような或る状況において正当化され得る。仮想機械プログラム８８０は、仮想機械プログラム８８０によってモデル化されるデバイスであるリアルハードウェアによって提供されるであろうアプリケーション・プログラム・インターフェースと同じものである、アプリケーション・プログラム９００へのアプリケーション・プログラム・インターフェースを提供する。したがって、前述の繰返しＭＡＣ命令を含むプログラム命令は、それらの仮想機械ハードウェアとの相互作用をモデリングするために仮想機械プログラム８８０を用いてアプリケーション・プログラム９００内から実行されてもよい。
【０１２６】
特定の実施形態が本明細書に記載されたが、本発明はそれに限定されず、本発明の範囲内でそれへの多くの修正及び追加を行ってもよいことが理解されるであろう。例えば、本発明の範囲から逸脱することなく、以下の従属請求項の特徴と独立請求項の特徴との種々の組み合わせを作製することができる。
【符号の説明】
【０１２７】
１００  デジタル信号プロセッサ
１０５  ＳＩＭＤ部
１１０  ＳＩＭＤ積和演算回路
１２０  他のＳＩＭＤ処理回路
１３０  ＳＩＭＤ累算レジスタ
１４０  ＳＩＭＤレジスタ・バンク
１４５  スカラー部
１５０  スカラー処理回路
１５５  スカラー・レジスタ・バンク
１６０  コントローラ
１６５  プログラム・メモリ
１７０  ロード／格納ユニット
１７５  データ・メモリ
【図１Ａ】
0005619751.tif 000018
【図１Ｂ】
0005619751.tif 000019
【図２】
0005619751.tif 000020
【図３】
0005619751.tif 000021
【図４】
0005619751.tif 000022
【図５】
0005619751.tif 000023
【図６】
0005619751.tif 000024
【図７】
0005619751.tif 000025
【図８】
0005619751.tif 000026
【図９】
0005619751.tif 000027
【図１０】
0005619751.tif 000028
【図１１】
0005619751.tif 000029
【図１２】
0005619751.tif 000030