(57)【要約】【課題】リコンフィギュラブルＳＩＭＤベクトル処理システムを提供する。【解決手段】システムであって、冗長形式で表される２Ｎビットの積をＭ個出力するＭ個のＮビット×Ｎビット乗算器と、Ｍ個の２Ｎビットの積を受け取り、Ｍ個の２Ｎビットの積に基づいて冗長形式で表されるＭＮビットの積を生成するコンプレッサと、Ｍ個の２Ｎビットの積およびＭＮビットの積を受け取り、Ｍ個の２Ｎビットの積およびＭＮビットの積のうちいずれかを選択し、選択した積を非冗長形式に変換する加算器ブロックとを備えるシステムを提供する。【選択図】図１
2008117389.tif 000002
【特許請求の範囲】
【請求項１】
回路であって、
一の冗長形式で表される２Ｎビットの積をＭ個出力するＭ個のＮビット×Ｎビット乗算器と、
前記Ｍ個の２Ｎビットの積を受け取り、当該Ｍ個の２Ｎビットの積に基づいて一の冗長形式で表される一のＭＮビットの積を生成する一のコンプレッサと、
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積を受け取り、前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうちいずれかを選択し、選択した積を一の非冗長形式に変換する一の加算器ブロックと
を備える回路。
【請求項２】
前記Ｍ個の２Ｎビットの積のうち一の第１の２Ｎビットの積は、一の第１数の一の上位Ｎビットと一の第２数の一の上位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第２の２Ｎビットの積は、前記第１数の一の下位Ｎビットと前記第２数の前記上位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第３の２Ｎビットの積は、前記第１数の前記上位Ｎビットと前記第２数の一の下位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第４の２Ｎビットの積は、前記第１数の前記下位Ｎビットと前記第２数の前記下位Ｎビットとの一の積であり、
前記コンプレッサが生成する前記ＭＮビットの積は、前記第１数と第２数の乗算結果に等しい
請求項１に記載の回路。
【請求項３】
前記加算器ブロックはさらに、前記ＭＮビットの積のうちＭＮ個のＣａｒｒｙビットを選択し、前記ＭＮビットの積のうちＭＮ個のＳｕｍビットを選択し、前記選択したＭＮ個のＣａｒｒｙビットとＭＮ個のＳｕｍビットを加算して前記ＭＮビットの積を一の非冗長形式へと変換する
請求項２に記載の回路。
【請求項４】
一の第１モードにおいて、前記加算器ブロックは、
前記Ｍ個の２Ｎビットの積のうち一の第１の２Ｎビットの積の、一の上位Ｎ個のＣａｒｒｙビットおよび一の上位Ｎ個のＳｕｍビットおよび、前記Ｍ個の２Ｎビットの積のうち一の第２の２Ｎビットの積の、一の上位Ｎ個のＣａｒｒｙビットおよび一の上位Ｎ個のＳｕｍビットを受け取り、
前記第１の２Ｎビットの積と前記第２の２Ｎビットの積の前記上位Ｎ個のＣａｒｒｙビットおよび前記第１の２Ｎビットの積および前記第２の２Ｎビットの積の前記上位Ｎ個のＳｕｍビットを選択するか、もしくは前記第１の２Ｎビットの積と前記第２の２Ｎビットの積の前記下位Ｎ個のＣａｒｒｙビットおよび前記第１の２Ｎビットの積および前記第２の２Ｎビットの積の前記下位Ｎ個のＳｕｍビットを選択し、
前記第１の２Ｎビットの積のうち選択されたＮ個のＣａｒｒｙビットと、前記第１の２Ｎビットの積のうち選択されたＮ個のＳｕｍビットを加算し、
前記第２の２Ｎビットの積のうち選択されたＮ個のＣａｒｒｙビットと、前記第２の２Ｎビットの積のうち選択されたＮ個のＳｕｍビットを加算する
請求項１に記載の回路。
【請求項５】
前記第１モードにおいて、前記加算器ブロックは複数のＮビット境界での桁上げの伝播を行わないようにする
請求項４に記載の回路。
【請求項６】
前記加算器ブロックはさらに、
バイナリ形式で表される、一のＭＮビットの第１数および一のＭＮビットの第２数を受け取り、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、１つのオペランド、Ｍ／２個のオペランドもしくはＭ個のオペランドのうちいずれを示しているか判断し、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、Ｍ個のオペランドを示していると判断された場合、複数のＮビットの境界で桁上げの伝播をしないようにして、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、Ｍ／２個のオペランドを示していると判断された場合、複数の２Ｎビットの境界で桁上げの伝播をしないようにして、
前記ＭＮビットの第１数および前記ＭＮビットの第２数を加算して一の和を生成し、
前記生成された和に基づくと共に前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、１つのオペランド、Ｍ／２個のオペランドもしくはＭ個のオペランドのうちいずれを示しているかに基づいて、１以上の所望の和を決定する
請求項１に記載の回路。
【請求項７】
方法であって、
Ｍ個のＮビット×Ｎビット乗算器のそれぞれから、一の冗長形式で表される２Ｎビットの積をＭ個受け取ることと、
前記Ｍ個の２Ｎビットの積、または一のコンプレッサから出力された一の冗長形式で表される一のＭＮビットの積のうちいずれかを選択することと、
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうち選択された積を一の非冗長形式に変換することと
を含む方法。
【請求項８】
前記Ｍ個の２Ｎビットの積のうち一の第１の２Ｎビットの積は、一の第１数の一の上位Ｎビットと一の第２数の一の上位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第２の２Ｎビットの積は、前記第１数の一の下位Ｎビットと前記第２数の前記上位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第３の２Ｎビットの積は、前記第１数の前記上位Ｎビットと前記第２数の一の下位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第４の２Ｎビットの積は、前記第１数の前記下位Ｎビットと前記第２数の前記下位Ｎビットとの一の積であり、
前記コンプレッサが生成する前記ＭＮビットの積は、前記第１数と第２数の乗算結果に等しい
請求項７に記載の方法。
【請求項９】
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうちいずれかを選択することは、
前記ＭＮビットの積のうちＭＮ個のＣａｒｒｙビットを選択することと、
前記ＭＮビットの積のうちＭＮ個のＳｕｍビットを選択することと
を含み、
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうち選択された積を前記非冗長形式に変換することは、
前記選択したＭＮ個のＣａｒｒｙビットとＭＮ個のＳｕｍビットを加算して前記ＭＮビットの積を前記非冗長形式へと変換することを含む
請求項８に記載の方法。
【請求項１０】
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうちいずれかを選択することは、
前記Ｍ個の２Ｎビットの積のうち一の第１の２Ｎビットの積の、一の上位Ｎ個のＣａｒｒｙビットおよび一の上位Ｎ個のＳｕｍビットおよび、前記Ｍ個の２Ｎビットの積のうち一の第２の２Ｎビットの積の、一の上位Ｎ個のＣａｒｒｙビットおよび一の上位Ｎ個のＳｕｍビットを受け取ることと、
前記第１の２Ｎビットの積と前記第２の２Ｎビットの積の前記上位Ｎ個のＣａｒｒｙビットおよび前記第１の２Ｎビットの積および前記第２の２Ｎビットの積の前記上位Ｎ個のＳｕｍビット、もしくは前記第１の２Ｎビットの積と前記第２の２Ｎビットの積の前記下位Ｎ個のＣａｒｒｙビットおよび前記第１の２Ｎビットの積および前記第２の２Ｎビットの積の前記下位Ｎ個のＳｕｍビットを選択すること
を含み、
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうち選択された積を前記非冗長形式に変換することは、
前記第１の２Ｎビットの積のうち選択されたＮ個のＣａｒｒｙビットと、前記第１の２Ｎビットの積のうち選択されたＮ個のＳｕｍビットを加算することと、
前記第２の２Ｎビットの積のうち選択されたＮ個のＣａｒｒｙビットと、前記第２の２Ｎビットの積のうち選択されたＮ個のＳｕｍビットを加算することと
を含む
請求項７に記載の方法。
【請求項１１】
前記第１の２Ｎビットの積のうち選択されたＮ個のＣａｒｒｙビットと、前記第１の２Ｎビットの積のうち選択されたＮ個のＳｕｍビットを加算することは、複数のＮビットの境界で桁上げの伝播を行わないようにすることを含む
請求項１０に記載の方法。
【請求項１２】
前記受け取ることはさらに、バイナリ形式で表される、一のＭＮビットの第１数および一のＭＮビットの第２数を受け取ることを含み、
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうち選択された積を一の非冗長形式に変換することは、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、１つのオペランド、Ｍ／２個のオペランドもしくはＭ個のオペランドのうちいずれを示しているか判断することと、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、Ｍ個のオペランドを示していると判断された場合、複数のＮビットの境界で桁上げの伝播をしないようにすることと、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、Ｍ／２個のオペランドを示していると判断された場合、複数の２Ｎビットの境界で桁上げの伝播をしないようにすることと、
前記ＭＮビットの第１数および前記ＭＮビットの第２数を加算して一の和を生成することと、
前記生成された和および前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、１つのオペランド、Ｍ／２個のオペランドもしくはＭ個のオペランドのうちいずれを示しているかに基づいて、１以上の所望の和を決定することと
を含む
請求項７に記載の方法。
【請求項１３】
システムであって、
一のプロセッサ
を備え、当該プロセッサは、
一の冗長形式で表される２Ｎビットの積をＭ個出力するＭ個のＮビット×Ｎビット乗算器と、
前記Ｍ個の２Ｎビットの積を受け取り、当該Ｍ個の２Ｎビットの積に基づいて一の冗長形式で表される一のＭＮビットの積を生成する一のコンプレッサと、
前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積を受け取り、前記Ｍ個の２Ｎビットの積および前記ＭＮビットの積のうちいずれかを選択し、選択した積を一の非冗長形式に変換する一の加算器ブロックと、
前記プロセッサに接続された一のダブル・データ・レート・メモリと
を有するシステム。
【請求項１４】
前記Ｍ個の２Ｎビットの積のうち一の第１の２Ｎビットの積は、一の第１数の一の上位Ｎビットと一の第２数の一の上位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第２の２Ｎビットの積は、前記第１数の一の下位Ｎビットと前記第２数の前記上位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第３の２Ｎビットの積は、前記第１数の前記上位Ｎビットと前記第２数の一の下位Ｎビットとの一の積であり、
前記Ｍ個の２Ｎビットの積のうち一の第４の２Ｎビットの積は、前記第１数の前記下位Ｎビットと前記第２数の前記下位Ｎビットとの一の積であり、
前記コンプレッサが生成する前記ＭＮビットの積は、前記第１数と第２数の乗算結果に等しく
前記加算器ブロックはさらに、前記ＭＮビットの積のうちＭＮ個のＣａｒｒｙビットを選択し、前記ＭＮビットの積のうちＭＮ個のＳｕｍビットを選択し、前記選択したＭＮ個のＣａｒｒｙビットとＭＮ個のＳｕｍビットを加算して前記ＭＮビットの積を一の非冗長形式へと変換する
請求項１３に記載のシステム。
【請求項１５】
一の第１モードにおいて、前記加算器ブロックは、
前記Ｍ個の２Ｎビットの積のうち一の第１の２Ｎビットの積の、一の上位Ｎ個のＣａｒｒｙビットおよび一の上位Ｎ個のＳｕｍビットおよび、前記Ｍ個の２Ｎビットの積のうち一の第２の２Ｎビットの積の、一の上位Ｎ個のＣａｒｒｙビットおよび一の上位Ｎ個のＳｕｍビットを受け取り、
前記第１の２Ｎビットの積と前記第２の２Ｎビットの積の前記上位Ｎ個のＣａｒｒｙビットおよび前記第１の２Ｎビットの積および前記第２の２Ｎビットの積の前記上位Ｎ個のＳｕｍビットを選択するか、もしくは前記第１の２Ｎビットの積と前記第２の２Ｎビットの積の前記下位Ｎ個のＣａｒｒｙビットおよび前記第１の２Ｎビットの積および前記第２の２Ｎビットの積の前記下位Ｎ個のＳｕｍビットを選択し、
前記第１の２Ｎビットの積のうち選択されたＮ個のＣａｒｒｙビットと、前記第１の２Ｎビットの積のうち選択されたＮ個のＳｕｍビットを加算し、
前記第２の２Ｎビットの積のうち選択されたＮ個のＣａｒｒｙビットと、前記第２の２Ｎビットの積のうち選択されたＮ個のＳｕｍビットを加算し、
複数のＮビット境界での桁上げの伝播を行わないようにする
請求項１３に記載のシステム。
【請求項１６】
前記加算器ブロックはさらに、
バイナリ形式で表される、一のＭＮビットの第１数および一のＭＮビットの第２数を受け取り、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、１つのオペランド、Ｍ／２個のオペランドもしくはＭ個のオペランドのうちいずれを示しているか判断し、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、Ｍ個のオペランドを示していると判断された場合、複数のＮビットの境界で桁上げの伝播をしないようにして、
前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、Ｍ／２個のオペランドを示していると判断された場合、複数の２Ｎビットの境界で桁上げの伝播をしないようにして、
前記ＭＮビットの第１数および前記ＭＮビットの第２数を加算して一の和を生成し、
前記生成された和に基づくと共に前記ＭＮビットの第１数および前記ＭＮビットの第２数はそれぞれ、１つのオペランド、Ｍ／２個のオペランドもしくはＭ個のオペランドのうちいずれを示しているかに基づいて、１以上の所望の和を決定する
請求項１３に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
動画処理、グラフィクス処理および音声処理といったマルチメディア・アプリケーションを実施するので、消費者用演算システムに求められる性能が近年非常に高くなっている。上記のマルチメディア・アプリケーションは、電力および空間について厳しい制限を持つ携帯用演算デバイスに関して、特に課題を抱えている。
【０００２】
このように非常に多くの処理を必要とするアプリケーションを実施するには通常、単一命令多重データ（ＳＩＭＤ）アーキテクチャが利用される。ＳＩＭＤアーキテクチャの構成要素のうち電力や性能に大きな影響を与える構成要素は一般的に、乗算器および加算器を備える。ここで、ＳＩＭＤアーキテクチャには、固定ビット幅のオペランドを扱い、固定の割合で並行処理を行う、乗算器および加算器から成る構成が含まれるとしてもよい。しかしながら、アプリケーションごとに必要なオペランドのビット幅および／または並行処理の程度が異なる場合がある。このため当該ＳＩＭＤアーキテクチャは、別のアプリケーションが規定する要件を満たすべく、乗算器および加算器を含む構成（つまり、別途設けたＳＩＭＤデータパス）を別に備えている必要がある。
【図面の簡単な説明】
【０００３】
【図１】実施形態に係る回路を示すブロック図である。
【０００４】
【図２】実施形態に係るプロセスを示すフローチャートである。
【０００５】
【図３】実施形態に係る回路を詳細に示すブロック図である。
【０００６】
【図４】実施形態に係るプロセスを示すフローチャートである。
【０００７】
【図５】実施形態に係るプロセスを示すフローチャートである。
【０００８】
【図６】実施形態に係る、副次的に求められた積に基づき所望の積を求める方法を示す図である。
【０００９】
【図７】実施形態に係る、プロセスを示すフローチャートである。
【００１０】
【図８】実施形態に係るシステムを示すブロック図である。
【発明を実施するための最良の形態】
【００１１】
図１は、実施形態に係る回路１００を示す図である。回路１００はベクトル処理回路を構成する素子を備えるとしてもよい。回路１００は、マイクロプロセッサの機能ブロック、専用グラフィクスプロセッサ、もしくは既に公知のまたは公知となる適切なデバイスにおいて実現されるとしてもよい。例えば、回路１００は、個別素子、集積回路および／またはソフトウェアを組み合わせることによっても実現するとしてもよい。
【００１２】
回路１００は、Ｎ×Ｎビットの乗算器１１２〜１１８を備える。Ｎ×Ｎビット乗算器１１２〜１１８はそれぞれ、Ｎビットのオペランドを２個受け取り、２Ｎビットの、当該２つのオペランドの積（例えば、Ｐ１、Ｐ２、Ｐ３およびＰ４）を１個出力するとしてもよい。実施形態によっては、この２Ｎビットの積は、桁上げ保存方式（Ｃａｒｒｙ−Ｓａｖｅ方式）のような冗長形式で表される。従って、２Ｎビットの積はそれぞれ、２Ｎ個のＣａｒｒｙビットと２Ｎ個のＳｕｍビットによって表される。
【００１３】
加算器ブロック１２０は、Ｎ×Ｎビット乗算器１１２〜１１８から２Ｎビットの積を受け取るとしてもよい。加算器ブロック１２０は、受け取った２Ｎビットの積を非冗長形式へと変換するとしてもよい。非冗長形式は、これに限定されないが、例えば２の補数に基づくバイナリ・フォーマットが挙げられる。加算器ブロック１２０はまた、４Ｎビットの積をコンプレッサ１３０から受け取るとしてもよい。この４Ｎビットの積もまた冗長形式で表わされていてよい。その場合、当該４Ｎビットの積は４Ｎ個のＣａｒｒｙビットと４Ｎ個のＳｕｍビットによって表される。また、加算器ブロック１２０は、この４Ｎビットの積を非冗長フォーマットへ変換するとしてもよい。
【００１４】
以下に詳述する実施形態において、加算器ブロック１２０はまた独立した加算器として動作するとしてもよい。例えば、加算器ブロック１２０は、非冗長形式で表された数字を２個受け取り、受け取った２個の数字を選択的に加算して非冗長形式で表される和を生成するとしてもよい。
【００１５】
図２は、実施形態に係るプロセス２００を示すフローチャートである。本明細書で説明する他のプロセスと同様に、プロセス２００は、既に公知のまたは公知となるシステムであれば、どのようなシステムによって実行されるとしてもよい。例を挙げると、これに限定されるわけではないが、回路１００によって実行されるとしてもよい。
【００１６】
まず、ステップ２１０において、Ｍ個のＮ×Ｎビット乗算器から冗長形式で表される２Ｎビットの積をＭ個受け取る。回路１００を例に挙げて説明すると、加算器ブロック１２０は乗算器１１２〜１１８から、４個の２Ｎビットの積、Ｐ１、Ｐ２、Ｐ３およびＰ４を受け取るとしてもよい。２Ｎビットの積はそれぞれ、２Ｎ個のＣａｒｒｙビットと２Ｎ個のＳｕｍビットで表されるとしてもよい。
【００１７】
続いてステップ２２０において、Ｍ個の２Ｎビットの積またはコンプレッサが出力するＭＮビットの積のいずれかを選択する。上記の例に基づいて説明を続けると、加算器ブロック１２０はさらに、コンプレッサ１３０から冗長形式の４Ｎビットの積を受け取る。そして加算器ブロック１２０はステップ２２０において、Ｍ個の２Ｎビットの積もしくはＭＮビットの積のいずれかを選択するように動作する。実施形態によっては、加算器ブロック１２０は、常に乗算器１１２〜１１８が出力したＭ個の２Ｎビットの積と、コンプレッサ１３０が出力したＭＮビットの積の両方を受け取るわけではないとしてもよい。例えば、コンプレッサブロック１３０がディセーブルとされる期間が動作中に何度かあってもよく、この場合加算器ブロック１２０は、コンプレッサ１３０からＭＮビットの積を受け取らないとしてもよい。
【００１８】
選択された方の積はステップ２３０において非冗長形式に変換される。この変換は単に、選択された積のＣａｒｒｙビットを選択された積のＳｕｍビットに加算することを含むとしてもよい。
【００１９】
回路１００およびプロセス２００は、組み合わせて利用してもよいし個別に利用してもよい。どちらの場合も、回路１００およびプロセス２００は、リコンフィギュラブルＳＩＭＤベクトル処理を実現するとしてもよい。このような処理を実施することによって、適切なデバイスにおいてダイ領域および電力消費を節約できる。
【００２０】
図３は、実施形態に係る回路３００を詳細に示すブロック図である。回路３００は、回路１００の一実施形態を備えるとしてもよく、従って回路１００の特性の一部または全てを含むとしてもよい。
【００２１】
回路３００は、乗算器３１０、加算器ブロック３２０、および６：２のコンプレッサ３３０を備える。乗算器３１０は、フリップフロップ３１１、４個の１６×１６ビットの乗算器３１２〜３１５およびフリップフロップ３１６を有する。乗算器３１０は、乗算器電力制御回路３１７から電力供給を受ける。
【００２２】
乗算器３１２から３１５はそれぞれ、クロック信号ｃｌｋに応じてフリップフロップ３１１から１６ビットのオペランドを２個受け取る。このため、実施形態によっては、回路３００は１６×１６ビットの乗算を４つ並行して実施するとしてもよい。実施形態によっては、乗算器３１２〜３１５がそれぞれ受け取った２個の１６ビットのオペランドは、２個の３２ビットのオペランドのうちのいずれかの上位または下位１６ビットを含むとしてもよい。このような実施形態によると、後述するように、コンプレッサ３３０の動作と同時に、当該２個の３２ビットのオペランドの積を求めるとしてもよい。
【００２３】
乗算器３１２〜３１５は符号付き乗算器を有するとしてもよい。符号付き乗算器３１２〜３１５の符合拡張は、各乗算器が独立して１６ビット×１６ビットの乗算を実施するか、後述するように符号付き乗算器３１２〜３１５が互いに組み合わせられて３２ビット×３２ビットの乗算を実施するように動作するか、このどちらかに応じて変更されるとしてもよい。符合拡張の変更は制御部３２５が制御するとしてもよい。実施形態によっては、乗算器３１２〜３１５は符号付きオペランドまたは符合なしのオペランドのいずれに対して演算を行うか選択するとしてもよい。
【００２４】
図３に示すように、乗算器３１２〜３１５はそれぞれ、受け取った２個の１６ビットのオペランドに基づいて計算した３２ビットの積を出力する。当該積は、桁上げ保存（Ｃａｒｒｙ−Ｓａｖｅ）形式で表される。具体的には、３２ビットの積はそれぞれ、３２個のＣａｒｒｙビットと３２個のＳｕｍビットによって表される。フリップフロップ３１６は、受け取るクロック信号ｃｌｋに応じて２５６（つまり、３２×２×４）ビットを格納する。
【００２５】
加算器ブロック３２０はマルチプレクサ３２２およびマルチプレクサ３２４を有する。マルチプレクサ３２２の１つの入力は、フリップフロップ３１６に格納された各積の３２個のＣａｒｒｙビット（Ｃ３〜Ｃ０）のうちの上位１６ビットを受け取る。従って、当該入力は６４ビットの入力を含むとしてもよい。マルチプレクサ３２２の別の入力は、フリップフロップ３１６に格納された各積の３２個のＣａｒｒｙビット（Ｃ３〜Ｃ０）のうちの下位１６ビットを受け取るので、同じく６４ビットの入力を含むとしてもよい。同様に、マルチプレクサ３２４の１つの入力は、フリップフロップ３１６に格納された各積の３２個のＳｕｍビット（Ｓ３〜Ｓ０）のうちの上位１６ビットを受け取り、マルチプレクサ３２４の別の入力は、フリップフロップ３１６に格納された各積の３２個のＳｕｍビット（Ｓ３〜Ｓ０）のうちの下位１６ビットを受け取る。
【００２６】
制御部３２５は、マルチプレクサ３２２および３２４それぞれについて、入力ラインのうち１本を選択する。加算器３２６は、制御部３２５からの制御信号に基づいて選択されたそれぞれの入力ラインのデータを受け取って、合計を計算する。後述するが、当該制御信号は加算器３２６に対し、所望の動作モードに応じて１６ビットまたは３２ビットの境界で桁上げを伝播させないように指示する。こうして得られる非冗長値は、入力されるクロック信号ｃｌｋに応じて、フリップフロップ３２８に格納される。加算器ブロック３２０は、加算器ブロック電力制御回路３２９から電力供給を受ける。加算器ブロック電力制御回路３２９および乗算器電力制御回路もまた、実施形態によっては、制御部３２５によって制御されるとしてもよい。
【００２７】
コンプレッサ３３０は、コンプレッサ電力制御回路３３５から電力供給を受ける。当該コンプレッサ電力制御回路３３５もまた制御部３２５に制御されるとしてもよい。コンプレッサ３３０は、乗算器３１０が出力する３２ビットの積（ＣＳ３〜ＣＳ０）をそれぞれ受け取るとしてもよい。コンプレッサ３３０は乗算器からの出力を圧縮して、Ｃａｒｒｙ−Ｓａｖｅ形式の３２ビット×３２ビットの乗算に基づいて６４ビットの積（ＣＳＸ）を求めるとしてもよい。この圧縮については、図５および図６を参照しつつ以下で詳述する。
【００２８】
加算器ブロック３２０のマルチプレクサ３２２は、６４ビットの積ＣＳＸを構成する６４個のＣａｒｒｙビットＣＸを受け取る。また、マルチプレクサ３２４はＣＳＸのうち６４個のＳｕｍビットＳＸを受け取る。加算器３２６は続いてＣＸとＳＸを加算して、ＣＳＸを非冗長フォーマットに変換するとしてもよい。
【００２９】
加算器ブロック３２０はさらに、１４４ビットのフリップフロップ３２７を有する。フリップフロップ３２７は第１の７２ビットをマルチプレクサ３２２の入力に対して出力し、第２の７２ビットをマルチプレクサ３２４の入力に対して出力するとしてもよい。従って、制御部３２５がこれらの入力を選択する場合、加算器３２６は、第１の７２ビットと第２の７２ビットの合計を計算する。後述するが、第１の７２ビットおよび第２の７２ビットのそれぞれに２以上のオペランドを設けて、適切なビット境界において桁上げ（キャリー）の伝播をさせないように加算器３２６を制御することによって、並行して加算を実施するとしてもよい。
【００３０】
実施形態によっては、回路３００は、並行処理の程度およびオペランドのビット幅を変化させつつ（並行処理の程度は例えば１〜４の間で、ビット幅は例えば１６〜７２の間で）、少なくとも６つの異なるモードで動作する、エネルギー効率の良いリコンフィギュラブルＳＩＭＤベクトル処理回路を提供するとしてもよい。例えば、回路３００は、同一のハードウェアに基づいて、１６ビット×１６ビットの乗算を４つ並行して行うか、１つの３２ビット×３２ビットの乗算を行うか選択するとしてもよい。
【００３１】
動作モードごとに、回路３００のうち利用する構成要素の組が異なるとしてもよい。例えば、電力制御回路３１７、３２９および３３５は、特定の動作モードの場合、回路３００の構成要素のうち必要とされない構成要素への電力の供給を止めるべく制御されるとしてもよい。また、電力制御回路３１７、３２９および３３５は、特定の動作モードの場合、求められる性能が比較的低い構成要素に対する電力供給を低減させるべく（Ｖｃｃｌｏ）制御されるとしてもよい。実施形態によっては、回路３００はＶｃｃｌｏ領域からＶｃｃｈｉ領域へと変化する信号を必要としない。このため、性能および電力を低下させるためのレベルシフタを回路３００内に設ける必要性が少なくなるとしてもよい。
【００３２】
図４は、実施形態に係る、並行して乗算を行う場合のプロセス４００を詳細に説明するためのフローチャートである。プロセス４００は、例えば、回路１００および／または回路３００によって実施されるとしてもよい。本明細書で説明する処理はいずれも、ハードウェア、ソフトウェア（マイクロコードを含む）またはハードウェアとソフトウェアの組み合わせによって実施されるとしてもよい。
【００３３】
ステップ４０５においてまずコンプレッサをディセーブルとする。例えば回路３００を用いて説明すると、ステップ４０５においてコンプレッサ３３０をディセーブルとしてもよい。実施形態によっては、制御部３２５は、回路３３５のスイッチを開くべく、６２ｃｔ＿ｓｅｌｌｏ信号および６２ｃｔ＿ｓｅｌｈｉ信号（図３参照）を制御する。
【００３４】
続いて、ステップ４１０において加算器への電力供給を低減する。コンプレッサ３３０をディセーブルとすることによって、回路３００のデータパスにあるゲートの数が減る。このようなゲートの数の減少に対応して、回路３００の動作周波数を維持するべく加算器への電力供給を低減するとしてもよい。制御部３２５はＡｄｄ＿ｓｅｌｌｏ信号およびＡｄｄ＿ｓｅｌｈｉ信号（図３参照）を制御して、加算器ブロック３２０に対してＶｃｃｌｏ供給電力を接続し、加算器ブロック３２０とＶｃｃｈｉ供給電力の接続を切るとしてもよい。
【００３５】
ステップ４１５において、第１数のＮ個のビットと第２数のＮ個のビットを乗算して、第１積を生成する。当該第１積は２Ｎ個のＣａｒｒｙビットおよび２Ｎ個のＳｕｍビットを含む。ステップ４１５の一例を挙げると、乗算器３１２は１６ビットの第１数と１６ビットの第２数を乗算して、３２個のＣａｒｒｙビットＣ３および３２個のＳｕｍビットＳ３を生成するとしてもよい。同様に、乗算器３１３はステップ４２０において、１６ビットの第３数と１６ビットの第４数を乗算して、３２個のＣａｒｒｙビットＣ２と３２個のＳｕｍビットＳ２を生成するとしてもよい。
【００３６】
回路３００はまた、乗算器３１４および３１５において同様の乗算が行われるように図示されているが、プロセス４００の説明においては、乗算器３１２および３１３だけに言及する。このように、実施形態によっては、プロセス４００が含む乗算は２つに限定されるとしてもよい。
【００３７】
続いてステップ４２５において、第１積および第２積の上位ワード（ｈｉｇｈ  ｗｏｒｄ）を計算するか、下位ワード（ｌｏｗ  ｗｏｒｄ）を計算するかを判断する。本例によると、上位ワードは積の上位Ｎビット（つまり１６ビット）を含み、下位ワードは積の下位Ｎビットを含む。上位ワードを選択する場合、処理はステップ４３０へと進む。
【００３８】
ステップ４２５における判断を行うのは制御部３２５であってよい。上位ワードと判断された場合、ステップ４３０において制御部３２５はマルチプレクサ３２２を制御して、Ｃ３〜Ｃ０の３２〜１６の入力を選択するとしてもよい。制御部３２５はまた、ステップ４３５において、マルチプレクサ３２４を制御してＳ３〜Ｓ０の３２〜１６の入力を選択するとしてもよい。
【００３９】
下位ワードと判断された場合、処理はステップ４４０へと進む。ステップ４４０において制御部３２５は、マルチプレクサ３２２を制御して、Ｃ３〜Ｃ０の１５〜０の入力を選択するとしてもよい。制御部３２５はまた、ステップ４４５において、マルチプレクサ３２４を制御してＳ３〜Ｓ０の１５〜０の入力を選択するとしてもよい。
【００４０】
続いてステップ４５０において、Ｎビットの境界において桁上げを伝播させないように加算器を制御する。このように制御することによって、加算器は並行して加算処理を実施することができるようになるとしてもよい。実施形態によっては、制御部３２５は加算器３２６を制御して、１６ビットの境界において桁上げが伝播しないようにしてもよい。
【００４１】
ステップ４５５において、第１積のうち選択されたＮ個のＣａｒｒｙビットを第１積のうち選択されたＮ個のＳｕｍビットに加算する。例えば、高位ワードと判断された場合、第１積ＣＳ３のうち選択された上位１６個のＣａｒｒｙビットをマルチプレクサ３２２から受け取り、マルチプレクサ３２４から受け取った第１積ＣＳ３のうち選択された上位１６個のＳｕｍビットに対して加算される。このような処理を行うことによって、第１積を非冗長形式に変換するとしてもよい。
【００４２】
ステップ４６０において、第２積のうち選択されたＮ個のＣａｒｒｙビットを第２積のうち選択されたＮ個のＳｕｍビットに加算する。下位ワードと判断された場合、第１積ＣＳ３のうち下位１６個のＣａｒｒｙビットをマルチプレクサ３２２から受け取り、第１積ＣＳ３のうち下位１６個のＳｕｍビットをマルチプレクサ３２４から受け取る。受け取ったビットを加算することによって、第２積を非冗長形式に変換する。
【００４３】
ステップ４５５および４６０の加算は同時に実施されるとしてもよい。具体的に説明すると加算器３２６は、ステップ４３０および４３５において選択されたビット、もしくはステップ４４０および４４５において選択されたビットを、２個の７２ビットの入力を介して同時に受け取るとしてもよい。そして加算器３２６は、１６ビットの境界において桁上げの伝播をさせないようにして、７２ビットの加算を行うことによって、ステップ４５５および４６０の加算を実施するとしてもよい。
【００４４】
図５は、実施形態に係る、２Ｎビット×２Ｎビットの乗算を行う場合のプロセス５００を説明するフローチャートを示す図である。まずステップ５０５において、乗算器、コンプレッサおよび加算器ブロックに対する電力供給が、Ｖｃｃｈｉに設定される。この電力供給が行われた場合に、性能および電力消費が最大になるとしてもよい。また、この電力供給が行われた場合に回路は、コンプレッサ３３０がディセーブルされた場合と同じ周波数で動作できるとしてもよい。実施形態によっては、ステップ５０５において、制御部３２５が回路３１７、３３５および３２９を制御して、Ｖｃｃｈｉの電力供給を乗算器３１０、加算器ブロック３２０およびコンプレッサ３３０へと接続するとしてもよい。
【００４５】
ステップ５１０において、第１数の上位Ｎ個のビットと第２数の上位Ｎ個のビットを乗算して、第１積を生成する。第１積は、２Ｎ個のＣａｒｒｙビットおよび２Ｎ個のＳｕｍビットを含む。本例においては、第１数をＸ１Ｘ０と表記し、第２数をＹ１Ｙ０と表記する。第１数の上位Ｎ個のビットおよび第２数の上位Ｎ個のビットは従って、それぞれＸ１およびＹ１と表記するとしてもよい。そして、第１積はＸ１Ｙ１と示す。
【００４６】
ステップ５１５において、第１数の下位Ｎ個のビットと第２数の上位Ｎ個のビットを乗算して、第２積を生成する。本例においては、第２積をＸ０Ｙ１は２Ｎ個のＣａｒｒｙビットと２Ｎ個のＳｕｍビットで表す。ステップ５２０において、第１数の上位Ｎ個のビットと第２数の下位Ｎ個のビットを乗算し、第３積Ｘ１Ｙ０を生成する。ステップ５２５において、第１数の下位Ｎ個のビットと第２数の下位Ｎ個のビットを乗算して、第４積Ｘ０Ｙ０を生成する。
【００４７】
図３に関して、Ｘ１およびＹ１はフリップフロップ３１１に格納され、クロック信号に応じて乗算器３１２に出力される。同様に、Ｘ０およびＹ１はフリップフロップ３１１に格納され乗算器３１３に出力される。Ｘ１およびＹ０はフリップフロップ３１１に格納され乗算器３１４に出力される。Ｘ０およびＹ０はフリップフロップ３１１に格納され乗算器３１５に出力される。このためステップ５１０〜５２５で実施される乗算は、乗算器３１２〜３１５で並行して実施するとしてもよい。この結果得られた積Ｘ１Ｙ１、Ｘ０Ｙ１、Ｘ１Ｙ０およびＸ０Ｙ０は、Ｃａｒｒｙ−Ｓａｖｅビットから成るＣＳ３、ＣＳ２，ＣＳ１およびＣＳ０として表記するとしてもよい。
【００４８】
続いて、ステップ５３０において第１数と第２数の積を決定する。この決定は、第１積、第２積、第３積および第４積に基づいて行われる。こうして得られる積は、４Ｎ個のＣａｒｒｙビットと４Ｎ個のＳｕｍビットによって表される。
【００４９】
本例によると、Ｘ１Ｘ０とＹ１Ｙ０の積をステップ５３０において求める。その結果得られる積は、上述したように、Ｃａｒｒｙ−Ｓａｖｅビットから成るＣＳ３、ＣＳ２，ＣＳ１およびＣＳ０として示す、積Ｘ１Ｙ１、Ｘ０Ｙ１、Ｘ１Ｙ０およびＸ０Ｙ０に基づいて求める。実施形態に係る、Ｃａｒｒｙ−Ｓａｖｅビットから成るＣＳ３、ＣＳ２，ＣＳ１およびＣＳ０に基づいてＸ１Ｘ０とＹ１Ｙ０の積を求める一般的な方法は、図３に示したコンプレッサ３３０の動作を参照されたい。
【００５０】
図６は、実施形態に係る、ステップ５３０で行われる処理をより詳細に説明する図である。図６は、積ＣＳＸが含む、４Ｎ個のＣａｒｒｙビットと４Ｎ個のＳｕｍビットを決定する方法を示す。同図に示すように、３２ビットのＣＳ３、３２ビットのＣＳ２、３２ビットのＣＳ１および３２ビットのＣＳ０はそれぞれ、積Ｘ１Ｙ１、Ｘ０Ｙ１、Ｘ１Ｙ０およびＸ０Ｙ０を示し、６４ビットのアドレススペースに配置されている。アドレススペースのビット１５からビット０はＣＳ０の下位１６ビットから成る、アドレススペースのビット６３〜４８はＣＳ３の上位１６ビットから成る。アドレススペースのビット４７〜３２はＣＳ１、ＣＳ３およびＣＳ２のビットの組み合わせから成り、当該アドレススペースのビット３１〜１６はＣＳ１、ＣＳ０およびＣＳ２のビットの組み合わせから成る。
【００５１】
ステップ５３５において、加算器への入力として、４Ｎ個のＣａｒｒｙビットおよび４Ｎ個のＳｕｍビットを選択する。一例を挙げると、コンプレッサ３３０はＣａｒｒｙビットＣＸおよびＳｕｍビットＳＸをマルチプレクサ３２２および３２４に対して出力する。ステップ５３５において、制御部３２５は対応する入力を選択するようにマルチプレクサ３２２および３２４を制御する。続いて加算器３２６は、受け取った１２８ビット（つまり、６４個のＣａｒｒｙビットおよび６４個のＳｕｍビット）に対して加算を実施して、非冗長形式で表されるＸ１Ｘ０とＹ１Ｙ０の積を生成する。
【００５２】
図７は、実施形態に係る、並行処理の度合を様々に変更して加算を行う場合の、プロセス７００を示すフローチャートである。ステップ７１０において、乗算器およびコンプレッサがディセーブルとされ、ステップ７２０において加算器に対する電力供給が低減される。加算器に対する電力供給は、コンプレッサおよび乗算器をディセーブルとすることによってデータパスのゲートの数が減少するが、この数の減少に関わらず所望の動作周波数を維持することを目的として、低減される。
【００５３】
ステップ７１０では、制御部３２５が、回路３１７および回路３３５のスイッチを開くことによって、乗算器およびコンプレッサをディセーブルするとしてもよい。実施形態によっては、ステップ７２０で、制御部３２５がＡｄｄ＿ｓｅｌｌｏ信号およびＡｄｄ＿ｓｅｌｈｉ信号を制御することによって、Ｖｃｃｌｏ電力供給を加算器ブロック３２０に接続して、Ｖｃｃｈｉ電力供給と加算器ブロック３２０の接続を切る。
【００５４】
ステップ７３０において加算モードを決定する。プロセス７００において実施可能な加算モードは、４つの（Ｎビット+Ｎビット）の加算処理、２つの（２Ｎビット+２Ｎビット）の加算処理、１つの（３Ｎビット+３Ｎビット）の加算処理、および１つの（４Ｎビット+４Ｎビット）の加算処理である。フリップフロップ３２７は、所望のモードに対応するオペランドを非冗長形式（例えば、２進法形式）で格納するとしてもよい。
【００５５】
一例を挙げると、制御部３２５が、４つの（Ｎビット+Ｎビット）の加算処理が必要な加算モードであると判断する。従ってフリップフロップ３２７は、マルチプレクサ３２２の入力に対して出力するべく４つの１６ビットのオペランドを格納し、マルチプレクサ３２４の入力に対して出力するべく４つの１６ビットのオペランドを格納する。続いて処理はステップ７４０に進み、Ｎビットの境界で桁上げの伝播を行わないように加算器を制御する。実施形態によっては、ステップ７４０で制御部３２５が、１６ビットの境界で桁上げの伝播が生じないように加算器３２６を制御するとしてもよい。
【００５６】
ステップ７６０において、加算器に対する入力として、第１加算オペランドおよび第２加算オペランドを選択する。一例を挙げると、制御部３２５はステップ７６０でマルチプレクサ３２２を制御してフリップフロップ３２７に接続された７２ビットの入力を選択し、マルチプレクサ３２４を制御してフリップフロップ３２７に接続された７２ビットの入力を選択するとしてもよい。マルチプレクサ３２２に接続された７２ビットの入力は４つの１６ビットのオペランドを含むとしてもよい。この４つのオペランドはそれぞれ、マルチプレクサ３２に接続された７２ビットの入力に含まれる４つの１６ビットのオペランドに加算される。
【００５７】
ステップ７７０において、第１オペランドと第２オペランドを加算してその和を生成する。現在選択されている加算モードによると、ステップ７７０の加算は１６ビットの境界で桁上げを伝播させないようにして実施される。従って、所望されている４つの和は、得られた７２ビットの和を構成する４つの１６ビットの部分に基づいて決定されるとしてもよい。具体的には、７２ビットの和の１番目の１６ビットが第１の所望の和を示し、当該７２ビットの和の２番目の１６ビットが第２の所望の和を示し、７２ビットの和の３番目の１６ビットが第３の所望の和を示し、当該７２ビットの和の４番目の１６ビットが第４の所望の和を示す。
【００５８】
加算モードが２つの（２Ｎビット+２Ｎビット）の加算処理を必要とすると判断された場合、処理はステップ７３０からステップ７５０へと進む。ステップ７５０において加算器は、２Ｎビットの境界で桁上げを伝播させないように制御される。また、フリップフロップ３２７は、マルチプレクサ３２２の入力へ出力されるべく２つの３２ビットのオペランドを格納し、マルチプレクサ３２４の入力へ出力されるべく２つの３２ビットのオペランドを格納する。これらのオペランドを、ステップ７６０でマルチプレクサ３２２および３２４に対する入力として選択して、ステップ７７０で加算する。続いてステップ７８０で加算結果に基づいて所望されている２つの和を得る。具体的には、生成された７２ビットの和の１番目の３２ビットを第１の所望の和とし、２番目の３２ビットを第２の所望の和とする。
【００５９】
加算モードが１つの（３Ｎビット+３Ｎビット）の加算処理、もしくは１つの（４Ｎビット+４Ｎビット）の加算処理を必要とすると判断された場合には、処理はステップ７３０からステップ７６０へと直接進む。従って、加算器内での桁上げの伝播は禁止されない。フリップフロップ３２７は、マルチプレクサ３２２の入力への出力として４８ビットまたは６４ビットのオペランドを格納し、マルチプレクサ３２４の入力への出力として４８ビットまたは６４ビットのオペランドを格納する。これらのオペランドが、ステップ７６０でマルチプレクサ３２２および３２４への入力として選択され、ステップ７７０で加算され和を生成する。ステップ７８０では、生成された和に等しくなるように所望の和を決定する。図３に示すように、加算器３２６は最大で７２ビットのビット長のオペランドに対応できる。
【００６０】
図８は、実施形態に係るシステム８００を示すブロック図である。システム８００は集積回路８１０を備える。集積回路８１０はマイクロプロセッサであってもよいし、別の種類の集積回路であってもよい。集積回路８１０はベクトル処理エンジン８２０を有する。ベクトル処理エンジン８２０は適切な形態で実現されるとしてよい。ベクトル処理エンジン８２０は、本明細書で説明した、回路１００、回路３００および／または処理に基づいて実現されるとしてもよい。
【００６１】
集積回路８１０は、ダイの外部にあるキャッシュ８３０と通信する。キャッシュ８３０はベクトル処理エンジン８２０に入力されるオペランドを格納したレジスタを含むとしてもよい。集積回路８１０はまた、ホストバスおよびチップセット８５０を介して、システムメモリ８４０と通信するとしてもよい。メモリ８４０は適切な種類のメモリによって構成されるとしてもよい。例を挙げると、これらに限定されないが、ＳＤＲＲＡＭ（Ｓｉｎｇｌｅ  Ｄａｔａ  Ｒａｔｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）またはＤＤＲＲＡＭ（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などがある。また、上記以外のダイの外部に設けられる機能部として、音声プロセッサ８６０およびＮＩＣ（ネットワーク・インターフェース・コントローラ）８７０があり、適切なバスを介して集積回路８１０と通信するとしてもよい。
【００６２】
本明細書では様々な実施形態を説明したが、すべて例示目的に過ぎない。従って、当業者であれば本明細書の内容に基づき、様々な変形および変更を加えてほかの実施形態として実施することに想到するのは明らかである。
【図１】
2008117389.tif 000003
【図２】
2008117389.tif 000004
【図３】
2008117389.tif 000005
【図４】
2008117389.tif 000006
【図５】
2008117389.tif 000007
【図６】
2008117389.tif 000008
【図７】
2008117389.tif 000009
【図８】
2008117389.tif 000010
【外国語明細書】
2008117389.tif 000011
2008117389.tif 000012
2008117389.tif 000013
2008117389.tif 000014
2008117389.tif 000015
2008117389.tif 000016
2008117389.tif 000017
2008117389.tif 000018
2008117389.tif 000019
2008117389.tif 000020
2008117389.tif 000021
2008117389.tif 000022
2008117389.tif 000023
2008117389.tif 000024
2008117389.tif 000025
2008117389.tif 000026
2008117389.tif 000027
2008117389.tif 000028
2008117389.tif 000029
2008117389.tif 000030
2008117389.tif 000031
2008117389.tif 000032
2008117389.tif 000033
2008117389.tif 000034
2008117389.tif 000035
2008117389.tif 000036