(57)【要約】【課題】演算粒度を変更可能なデータ処理装置を提供すること【解決手段】ＯＲ回路３４、演算粒度に応じて、ＰＥ（２ｎ）２１−１内の演算回路３２から出力される下位ビットの演算によって発生する桁上げと、ＰＥ（２ｎ＋１）２１−２内の演算回路３２から出力される上位ビットの演算によって発生する桁上げとのいずれかを選択してＰＥ（２ｎ）２１−１内の演算回路３２に出力する。また、ＯＲ回路３７は、演算粒度に応じて、ＰＥ（２ｎ＋１）２１−２内の演算回路３２から出力される上位ビットの演算によって発生する桁上げと、ＰＥ（２ｎ）２１−１内の演算回路３２から出力される下位ビットの演算によって発生する桁上げとのいずれかを選択してＰＥ（２ｎ＋１）２１−２内の演算回路３２に出力する。したがって、演算粒度を変更することが可能となる。【選択図】図９
2010122741.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算器を並列に動作させて演算処理を行なうデータ処理装置であって、
前記複数の演算器のそれぞれは、データレジスタに記憶される演算データの中の所定ビットの演算を行なう演算手段と、
桁上げを記憶して前記演算手段に出力する桁上げ記憶手段とを含み、
前記複数の演算器の中の第１の演算器はさらに、演算粒度に応じて、前記第１の演算器内の演算手段から出力される下位ビットの演算によって発生する桁上げと、第２の演算器内の演算手段から出力される上位ビットの演算によって発生する桁上げとのいずれかを選択して前記第１の演算器内の桁上げ記憶手段に出力する第１の選択手段を含み、
前記複数の演算器の中の前記第２の演算器はさらに、演算粒度に応じて、前記第２の演算器内の演算手段から出力される上位ビットの演算によって発生する桁上げと、前記第１の演算器内の演算手段から出力される下位ビットの演算によって発生する桁上げとのいずれかを選択して前記第２の演算器内の桁上げ記憶手段に出力する第２の選択手段を含む、データ処理装置。
【請求項２】
前記第１の演算器に対応するエントリには演算データの偶数エントリが配置され、前記第２の演算器に対応するエントリには演算データの奇数エントリが配置され、
前記偶数エントリと前記奇数エントリとの間で演算データが前記所定ビット単位で交互に配置される、請求項１記載のデータ処理装置。
【請求項３】
前記第１の演算器の動作開始のタイミングと、前記第２の演算器の動作開始のタイミングとが所定時間だけずらされる、請求項１または２記載のデータ処理装置。
【請求項４】
複数の演算器を並列に動作させて演算処理を行なうデータ処理装置であって、
前記複数の演算器のそれぞれは、データレジスタに記憶される演算データの中の所定ビットの演算を行なう演算手段と、
桁上げを記憶して前記演算手段に出力する桁上げ記憶手段とを含み、
前記複数の演算器の中の第１の演算器はさらに、演算粒度に応じて、前記第１の演算器内の演算手段から出力される下位ビットの演算によって発生する桁上げと、上位ビットの演算によって発生する桁上げとのいずれかを選択して前記第１の演算器内の桁上げ記憶手段に出力する選択手段を含み、
前記複数の演算器の中の第２の演算器内の演算手段は、前記第１の演算器内の演算手段によって桁上げが発生しない場合の演算を行ない、
前記データ処理装置はさらに、前記第１の演算器内の演算手段から出力される下位ビットの演算によって発生する桁上げと、前記第２の演算器内の演算手段から出力される上位ビットの演算結果および桁上げとから、前記第１の演算器内の演算手段によって桁上げが発生した場合の演算結果および桁上げを生成する生成手段を含む、データ処理装置。
【請求項５】
前記生成手段は、前記第１の演算器内の演算手段によって桁上げが発生しない場合に、前記第２の演算器内の演算手段から出力される演算結果の下位ビットをそのまま出力し、前記第１の演算器内の演算手段によって桁上げが発生した場合に、前記第２の演算器内の演算手段から出力される演算結果の下位ビットを反転して出力する第１のセレクタと、
前記第１の演算器内の演算手段によって桁上げが発生し、前記第２の演算器内の演算手段から出力される演算結果の下位ビットが１の場合に、前記第２の演算器内の演算手段から出力される演算結果の上位ビットを反転して出力し、それ以外の場合に演算結果の上位ビットをそのまま出力する第２のセレクタと、
前記第１の演算器内の演算手段によって桁上げが発生し、前記第２の演算器内の演算手段から出力される演算結果の下位ビットおよび上位ビットが共に１の場合に、前記第２の演算器内の演算手段から出力される桁上げを反転して出力し、それ以外の場合に桁上げをそのまま出力する第３のセレクタとを含む、請求項４記載のデータ処理装置。
【請求項６】
前記第１の演算器に対応するエントリには演算データの偶数エントリが配置され、前記第２の演算器に対応するエントリには演算データの奇数エントリが配置され、
前記偶数エントリと前記奇数エントリとの間で演算データが前記所定ビット単位で交互に配置される、請求項４または５記載のデータ処理装置。
【請求項７】
複数の演算器を並列に動作させて演算処理を行なうデータ処理装置であって、
前記複数の演算器のそれぞれは、データレジスタに記憶される演算データの中の所定ビットの演算を行なう演算手段と、
桁上げを記憶して前記演算手段に出力する桁上げ記憶手段とを含み、
前記複数の演算器の中の第１の演算器内の演算手段は、下位ビットの演算によって発生する桁上げを記憶し、
前記複数の演算器の中の第２の演算器内の演算手段は、前記第１の演算器内の演算手段による下位ビットの演算によって桁上げが発生しない場合の上位ビットの演算を行なって演算結果を記憶し、
前記複数の演算器の中の第３の演算器内の演算手段は、前記第１の演算器内の演算手段による下位ビットの演算によって桁上げが発生する場合の上位ビットの演算を行なって演算結果を記憶し、
前記データ処理装置はさらに、前記第１の演算器内の演算手段によって記憶された桁上げに応じて、前記第２の演算器内の演算手段によって記憶された演算結果と、前記第３の演算器内の演算手段によって記憶された演算結果とを選択的に前記第２の演算器に出力する第１の選択手段と、
前記第１の演算器内の演算手段によって記憶された桁上げに応じて、前記第２の演算器内の演算手段によって記憶された演算結果と、前記第３の演算器内の演算手段によって記憶された演算結果とを選択的に前記第３の演算器に出力する第２の選択手段とを含む、データ処理装置。
【請求項８】
複数の演算器を並列に動作させて演算処理を行なうデータ処理装置であって、
前記複数の演算器のそれぞれは、データレジスタに記憶される演算データの中の所定ビットの演算を行なう演算手段と、
桁上げを記憶して前記演算手段に出力する桁上げ記憶手段とを含み、
前記複数の演算器の中の第１の演算器内の演算手段は、下位ビットの演算によって発生する桁上げを記憶し、
前記複数の演算器の中の第２の演算器内の演算手段は、前記第１の演算器内の演算手段による下位ビットの演算によって桁上げが発生しない場合の中位ビットの演算を行なって演算結果を記憶し、
前記複数の演算器の中の第３の演算器内の演算手段は、前記第１の演算器内の演算手段による下位ビットの演算によって桁上げが発生する場合の中位ビットの演算を行なって演算結果を記憶し、
前記複数の演算器の中の第４の演算器内の演算手段は、前記第２の演算器または前記第３の演算手段内の演算手段による中位ビットの演算によって桁上げが発生しない場合の上位ビットの演算を行なって演算結果を記憶し、
前記複数の演算器の中の第５の演算器内の演算手段は、前記第２の演算器または前記第３の演算手段内の演算手段による中位ビットの演算によって桁上げが発生する場合の上位ビットの演算を行なって演算結果を記憶し、
前記データ処理装置はさらに、前記第１の演算器内の演算手段によって記憶された桁上げに応じて、前記第２の演算器内の演算手段によって記憶された演算結果と、前記第３の演算器内の演算手段によって記憶された演算結果とを選択的に前記第２の演算器に出力する第１の選択手段と、
前記第１の演算器内の演算手段によって記憶された桁上げに応じて、前記第２の演算器内の演算手段によって記憶された演算結果と、前記第３の演算器内の演算手段によって記憶された演算結果とを選択的に前記第３の演算器に出力する第２の選択手段と、
前記第２の演算器または前記第３の演算器内の演算手段によって記憶された桁上げに応じて、前記第４の演算器内の演算手段によって記憶された演算結果と、前記第５の演算器内の演算手段によって記憶された演算結果とを選択的に前記第４の演算器に出力する第３の選択手段と、
前記第２の演算器または前記第３の演算器内の演算手段によって記憶された桁上げに応じて、前記第４の演算器内の演算手段によって記憶された演算結果と、前記第５の演算器内の演算手段によって記憶された演算結果とを選択的に前記第５の演算器に出力する第４の選択手段とを含む、データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算器を同時に動作させて演算処理を行なう技術に関し、特に、演算粒度を変更可能なデータ処理装置に関する。
【背景技術】
【０００２】
近年、携帯端末機器の普及に伴い、音声や画像のような大量のデータを高速に処理するデジタル信号処理の重要性が高くなってきている。一般に、このようなデジタル信号処理には、専用の半導体装置としてＤＳＰ（Digital Signal Processor）が用いられることが多い。しかしながら、処理対象のデータが非常に多い場合には、専用ＤＳＰを用いたとしても性能を飛躍的に向上させることは難しい。
【０００３】
たとえば、演算対象のデータが１万組ある場合には、１つ１つのデータに対する積和演算を１マシンサイクルで実行できたとしても、演算のために最低でも１万サイクルが必要になる。すなわち、１つ１つのデータに対する処理は高速であるが、データ処理が直列であるため、オーディオや画像などのようにデータ量が多くなると、それに比例して処理時間が長くなってしまう。
【０００４】
処理対象のデータが多い場合には、並列演算によって処理性能を向上させることが可能である。すなわち、演算器を複数個用意し、それらを同時に動作させることで複数のデータ処理を同時に行なうことが可能である。このとき、複数のデータに対して同じ演算を行なう場合には、ＳＩＭＤ（Single Instruction stream-Multiple Data stream）と呼ばれる方式を採用することにより、高い並列性を保ったまま演算器の面積を削減することが可能である。すなわち、データ処理器を複数用意するが、命令を解釈して処理を制御する制御部を共通にすることで、小さい面積で高い性能を発揮させることができる。これに関連する技術として、下記の特許文献１に開示された発明がある。
【０００５】
特許文献１に開示された発明は、大量のデータを、その演算内容およびデータビット幅にかかわらず高速で演算処理する半導体装置に関する。メモリセルマットを複数のエントリに分割し、各エントリに対応して、演算処理ユニットを配置し、これらのエントリと対応の演算処理ユニットとの間で、ビットシリアルかつエントリパラレル態様で演算処理を実行する。並列演算性が低い場合には、このメモリセルマット下部に設けられた演算器群に対して、エントリシリアルかつビットパラレル態様でデータを転送して演算処理を実行する。
【特許文献１】特開２００６−１２７４６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述のようなデータ処理装置においては、プロセッサを単純化してプロセッサ数を増加させ、それらのプロセッサを超並列に動作させることによりピーク性能を向上させている。一般に、プロセッサによる演算の並列度が高ければ、それを搭載したデータ処理装置は高い性能を示す。しかしながら、アプリケーションや処理内容によっては演算の並列度が低下することがある。
【０００７】
たとえば、プロセッサが処理する演算データの数が多い場合には、データ群が複数のエントリにわたって配置される。これらのデータ群内のデータ間で依存関係がある場合には、依存関係のある一方のデータの演算が終了するまで他方のデータの演算が待たされる。
【０００８】
このような逐次処理が発生すると、演算の並列度が低下してデータ処理装置の処理性能が低下する。したがって、アプリケーションや処理内容に依存せずに、高い並列度で動作する処理機構が必要であるが、上記の特許文献１では、このような問題点を解決することができない。
【０００９】
本発明は、上記問題点を解決するためなされたものであり、その目的は、演算粒度を変更可能なデータ処理装置を提供することである。
【課題を解決するための手段】
【００１０】
本発明の一実施例によれば、複数のＰＥを並列に動作させて演算処理を行なうデータ処理装置が提供される。複数のＰＥのそれぞれは、データレジスタに記憶される演算データの中の所定ビットの演算を行なう演算回路と、桁上げを記憶して演算回路に出力するキャリーレジスタとを含む。
【００１１】
ＰＥ（２ｎ）はさらに、演算粒度に応じて、ＰＥ（２ｎ）内の演算回路から出力される下位ビットの演算によって発生する桁上げと、ＰＥ（２ｎ＋１）内の演算回路から出力される上位ビットの演算によって発生する桁上げとのいずれかを選択してＰＥ（２ｎ）内のキャリーレジスタに出力する回路を含む。
【００１２】
また、ＰＥ（２ｎ＋１）はさらに、演算粒度に応じて、ＰＥ（２ｎ＋１）内の演算回路から出力される上位ビットの演算によって発生する桁上げと、ＰＥ（２ｎ）内の演算回路から出力される下位ビットの演算によって発生する桁上げとのいずれかを選択してＰＥ（２ｎ＋１）内のキャリーレジスタに出力する回路を含む。
【発明の効果】
【００１３】
この実施例によれば、データ処理装置は、演算粒度に応じて、ＰＥ（２ｎ）内の演算回路から出力される下位ビットの演算によって発生する桁上げと、ＰＥ（２ｎ＋１）内の演算回路から出力される上位ビットの演算によって発生する桁上げとのいずれかを選択してＰＥ（２ｎ）内のキャリーレジスタに出力する回路と、ＰＥ（２ｎ＋１）内の演算回路から出力される上位ビットの演算によって発生する桁上げと、ＰＥ（２ｎ）内の演算回路から出力される下位ビットの演算によって発生する桁上げとのいずれかを選択してＰＥ（２ｎ＋１）内のキャリーレジスタに出力する回路とを含むので、演算粒度を変更することが可能となる。
【発明を実施するための最良の形態】
【００１４】
図１は、本発明のデータ処理装置を含んだ半導体装置の概略構成を示すブロック図である。図１（ａ）は、半導体装置の全体構成を示している。この半導体装置１は、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）２に接続されており、複数の演算器（以下、ＰＥ（Processor Element）と呼ぶ。）を有するデータ処理装置（以下、ＭＸ（Matrix Processor）コアとも呼ぶ。）１１と、ホストＣＰＵ（Central Processing Unit）１２と、ＤＭＡＣ（Direct Memory Access Controller）１３と、メモリコントローラ１４とを含み、これらがバス１５を介して接続される。
【００１５】
ＳＤＲＡＭ２は、ホストＣＰＵ１２によって実行されるプログラム、プログラムの実行の際に参照されるデータや、ＭＸコア１１によって実行される命令コード、演算データなどを記憶する。メモリコントローラ１４は、ホストＣＰＵ１２およびＤＭＡＣ１３からの要求に応じてＳＤＲＡＭ２に対する命令コードおよびデータの読出し／書込みを行なう。
【００１６】
ホストＣＰＵ１２は、図示しない内蔵メモリに記憶される命令コードをフェッチして実行したり、メモリコントローラ１４を介してＳＤＲＡＭ２から命令コードをフェッチして実行したりすることにより、半導体装置１全体の制御を行なう。
【００１７】
ＤＭＡＣ１３は、ホストＣＰＵ１２からのＤＭＡ転送要求に応じて半導体装置１内のＤＭＡ転送を制御する。たとえば、ＤＭＡＣ１３は、ＳＤＲＡＭ２とＭＸコア１１内の命令メモリ２５との間のＤＭＡ転送を実行する。
【００１８】
図１（ｂ）は、ＭＸコア１１の内部構成を示すブロック図である。このＭＸコア１１は、ｍ個のＰＥ２１−１〜２１−ｍと、ＰＥ２１−１〜２１−ｍに対応するｍエントリ分のデータレジスタ２２−１〜２２−ｍと、Ｉ／Ｏインタフェース２３と、コントローラ２４とを含む。また、コントローラ２４は、命令メモリ２５を含む。なお、本発明においては、ＭＸコア１１が１０２４エントリに対応した個数のＰＥおよびデータレジスタを有する場合について説明するが、ＰＥおよびデータレジスタの個数はこれに限定されるものではない。また、１エントリ分のデータレジスタが左右に５１２ビット（合計１０２４ビット）ずつ配置される場合について説明するが、ビット数はこれに限定されるものではない。
【００１９】
データレジスタ２２−１〜２２−ｍは、たとえばメディアデータをサンプリングされたデータの配列として記憶する。ＰＥ２１−１〜２１−ｍのそれぞれは、データレジスタ２２−１〜２２−ｍに記憶された配列データの各要素に対して演算を行うことにより並列に処理を行なう。なお、ＰＥ２１−１〜２１−ｍおよびデータレジスタ２２−１〜２２−ｍの動作の詳細は後述の各実施の形態において説明する。
【００２０】
Ｉ／Ｏインタフェース２３は、バス１５を介してデータの入出力を行なう。Ｉ／Ｏインタフェース２３は、バス１５を介して演算処理要求を受けると、その演算処理要求をコントローラ２４に出力する。また、Ｉ／Ｏインタフェース２３は、コントローラ２４から演算処理結果を受けると、その演算処理結果をバス１５を介して出力する。
【００２１】
コントローラ２４は、Ｉ／Ｏインタフェース２３から演算処理要求を受けると、命令メモリ２５に格納されたマイクロコードに対応する演算を順次ＰＥ２１−１〜２１−ｍに行なわせ、演算処理要求に対応した演算処理を行なわせる。そして、コントローラ２４は、演算処理結果をＩ／Ｏインタフェース２３に出力する。
【００２２】
図２は、ＭＸコア１１による並列演算の一例を示す図である。オペランド（演算データ）ａおよびｂが左右のデータレジスタに配置されており、コントローラ２４によって１０２４エントリ分のデータが指定されると、ＰＥは左右のデータレジスタからオペランドａおよびｂを読み出し（ロード）、演算を行なう。ＰＥは、演算結果ｃを再度データレジスタに格納する（ストア）。
【００２３】
このロード、演算、およびストアのＮｂｉｔ処理は１サイクルで完了し、オペランドのデータ長分だけ繰り返される。ＭＸコア１１は、このＳＩＭＤ演算を最大１０２４だけ並列に行なうことにより高い処理性能を実現する。また、ＭＸコア１１にはマスキング機能が用意されており、特定のエントリのみで演算を行なうことも可能である。
【００２４】
図３は、ＭＸコア１１の問題点を説明するための図である。ＭＸコア１１は、時間シリアル処理を空間パラレル処理に変換した処理構造を有している。したがって、空間面積（ＰＥ）を有効利用できれば、すなわち、演算時に高い並列度を維持できれば、ＭＸコア１１は高い処理性能を実現することができる。しかしながら、アプリケーションや処理内容によっては並列度が低下することがあり、性能低下の原因となっている。以下、この問題を、「並列度低下の問題」と呼ぶ。
【００２５】
図３（ａ）は、データ群に対してシーケンシャルな処理が必要な場合のＰＥの稼動状況を示している。このシーケンシャルな処理の一例として、ＡＣＯ（Ant Colony Optimization）アルゴリズムが挙げられる。ＡＣＯアルゴリズムにおいては、Ｄａｔａ［ｋ］の演算は、Ｄａｔａ［ｋ−１］の演算結果が決定するまで待たされる。したがって、図３（ａ）に示すように、データ群が２エントリにわたる場合、片方のＰＥはエントリの演算が行なえないため、ＭＸコア１１の並列度が低下する。なお、図３（ａ）においては、処理の前半のＰＥ稼動状況を示しており、斜線を施した一方のＰＥが稼動中であり、斜線を施さない他方のＰＥが非稼動中である。
【００２６】
図３（ｂ）は、１データが複数エントリにわたる場合のＰＥの稼動状況を示している。このような処理の一例として、ＲＳＡ（Rivest-Shamir-Adleman method）暗号が挙げられる。図３（ｂ）に示すように、ＲＳＡ暗号においては、取り扱うデータのサイズが大きいため、１データが２エントリにわたって配置される。ＰＥによる演算は下位ビットから順次行なわれるため、上位ビットの演算は下位ビットの演算終了まで待たされる。そのため、演算の並列度はおおよそ半分になる。
【００２７】
図３（ｃ）は、演算に使用しないエントリが発生する場合のＰＥの稼動状況を示してる。このような処理の一例として、ＭＰ３デコード処理を挙げることができる。図３（ｃ）に示すように、ＭＰ３デコーダにおいては、グラニュールと呼ばれる５７６データが並列処理の対象となる。ＭＸコア１１の全てのＰＥ（１０２４個）のうち、約半分（５７６個）だけが稼動し、他のＰＥが稼動しないため、ＭＸコア１１の並列度は低下する。
【００２８】
このように、演算データが複数エントリにまたがり、かつ互いのエントリ間の演算データに依存関係がある場合や、演算対象のデータ数が１０２４未満の場合には、ＭＸコア１１の並列度が低下してしまうため、処理性能が低下することになる。
【００２９】
一般に、アプリケーションは幾つかの処理によって構成され、それぞれの処理には適した演算粒度が存在し、そのような適した演算粒度で処理を行うことにより、効率のよい実装と高い性能とを実現できる。しかしながら、アプリケーション毎に処理の割合が異なるため、演算粒度を固定した処理機構では面積的に、および速度的に効率のよい実装を行なうことはできない。以下、この問題を、「演算粒度依存の問題」と呼ぶ。
【００３０】
図４は、図３に示すＭＸコア１１の問題点に対する代替技術を示す図である。図４（ａ）は、ＰＥの演算粒度をＮｂｉｔから２Ｎｂｉｔに粗くした場合を示している。この場合、１ＰＥのサイズが大きくなるため、ＭＸコア１１としての回路面積も大きくなる。そのため、ＭＸコア１１の動作周波数を高くすることができないといった問題が発生する。
【００３１】
また、演算粒度が固定されているため、上述の「演算粒度依存の問題」を解決することはできない。
【００３２】
図４（ｂ）は、データレジスタのサイズを拡張した場合を示している。この場合、ＭＸコア１１としての回路面積も大きくなってしまう。また、データレジスタとＰＥとの間の配線長が長くなってしまい、配線遅延が増大することになる。この配線遅延の増大は、ＭＸコア１１の動作周波数の低下を招くことになる。
【００３３】
また、データレジスタを拡張して配線するため、その配線上でデータレジスタとＰＥとの間の高速データ転送を行なうためには、センスアンプおよびライトドライバにおける消費電力が増大してしまう。また、演算粒度が固定されているため、上述の「演算粒度依存の問題」を解決することはできない。
【００３４】
本発明は、演算器（ＰＥ）の演算粒度を変更可能とするものであり、隣接する複数のＰＥをカスケード接続することによって粒度変更を実現する。図５は、本発明の基本原理を説明するための図である。図５（ａ）は、演算粒度がＮｂｉｔの場合のＰＥを示しており、上述の「並列度低下の問題」が発生していることを示している。
【００３５】
図５（ｂ）は、演算粒度を変更することにより、ｋ個のＮｂｉｔのＰＥを１個のｋ・ＮｂｉｔのＰＥとした場合を示している。図５（ｂ）に示すように、ＰＥの演算粒度を変更することにより全てのＰＥを稼動状態とすることができる。
【００３６】
逆に、演算粒度を変更することにより、１個のｋ・ＮｂｉｔのＰＥをｋ個のＮｂｉｔのＰＥとすることも可能である。
【００３７】
図６は、本発明による「並列度低下の問題」の解決の一例を説明するための図である。図６（ａ）は、演算粒度がＮｂｉｔの場合のＰＥにおける並列度を示している。図６（ａ）においては、Ｄａｔａ１の上位ビットと下位ビットとが異なるＰＥで演算されるため、Ｄａｔａ１の下位ビットの演算が終了するまで上位ビットの演算が待たされてしまい、並列度が５０％となる。
【００３８】
図６（ｂ）は、演算粒度が２Ｎｂｉｔの場合のＰＥにおける並列度を示している。図６（ｂ）において、Ｄａｔａ１の上位ビットと下位ビットとが１つのＰＥで演算されるため、全てのＰＥが並列に演算を行なうことができ、並列度が１００％となる。
【００３９】
図６（ｃ）は、演算粒度が３Ｎｂｉｔの場合のＰＥにおける並列度を示している。図６（ｃ）において、Ｄａｔａ１の上位ビットおよび下位ビットと、Ｄａｔａ２の下位ビットとが１つのＰＥで演算され、Ｄａｔａ２の上位ビットと、Ｄａｔａ３の上位ビットおよび下位ビットとが異なるＰＥで演算されるため、Ｄａｔａ２の下位ビットの演算が終了するまで上位ビットの演算が待たされてしまい、並列度が７５％となる。
【００４０】
図６（ａ）〜図６（ｃ）に示すように、演算粒度がＮｂｉｔであり、１データが２エントリにまたがる場合には並列度が５０％となるが、演算粒度を２Ｎｂｉｔとすることにより並列度が１００％になり、２．０倍の性能改善となる。また、演算粒度を３Ｎｂｉｔとすることにより並列度が７５％となり、１．５倍の性能改善となる。
【００４１】
図７は、本発明による「並列度低下の問題」の解決の他の一例を説明するための図である。図７（ａ）は、演算粒度がＮｂｉｔの場合のＰＥにおける並列度を示している。図７（ａ）においては、Ｄａｔａ１の上位ビットが第１のＰＥで演算され、Ｄａｔａ１の中位ビットが第２のＰＥで演算され、Ｄａｔａ１の下位ビットが第３のＰＥで演算されるため、第３のＰＥによる演算が終了するまで第２のＰＥによる演算が待たされ、第２のＰＥによる演算が終了するまで第１のＰＥによる演算が待たされてしまい、並列度が３０％となる。
【００４２】
図７（ｂ）は、演算粒度が２Ｎｂｉｔの場合のＰＥにおける並列度を示している。図７（ｂ）において、Ｄａｔａ１の中位ビットと下位ビットとが第１のＰＥで演算され、Ｄａｔａ１の上位ビットとＤａｔａ２の下位ビットとが第２のＰＥで演算され、Ｄａｔａ２の上位ビットと中位ビットとが第３のＰＥで演算されるため、第１のＰＥによるＤａｔａ１の中位ビットの演算が終了するまで第２のＰＥによるＤａｔａ１の上位ビットの演算が待たされ、第２のＰＥによるＤａｔａ２の下位ビットの演算が終了するまで第３のＰＥによるＤａｔａ２の中位ビットの演算が待たされてしまい、並列度が５０％となる。
【００４３】
図７（ｃ）は、演算粒度が３Ｎｂｉｔの場合のＰＥにおける並列度を示している。図７（ｃ）において、Ｄａｔａ１の上位ビット、中位ビットおよび下位ビットが１つのＰＥで演算され、Ｄａｔａ２の上位ビット、中位ビットおよび下位ビットが異なるＰＥで演算されるため、全てのＰＥが並列に演算を行なうことができ、並列度が１００％となる。
【００４４】
図７（ａ）〜図７（ｃ）に示すように、演算粒度がＮｂｉｔであり、１データが３エントリにまたがる場合には並列度が３０％となるが、演算粒度を２Ｎｂｉｔとすることにより並列度が５０％になり、１．７倍の性能改善となる。また、演算粒度を３Ｎｂｉｔとすることにより並列度が１００％となり、３．０倍の性能改善となる。
【００４５】
このように、ＰＥの演算粒度を適切な演算粒度とすることにより、「並列度低下の問題」を解決することができる。また、処理内容に応じてＰＥの演算粒度を変更することにより、上述の「演算粒度依存の問題」も解決することができる。
【００４６】
図８は、ＰＥの基本的構成を示すブロック図である。このＰＥ２１は、並列に設けられる１ビットのレジスタ（ＸレジスタおよびＸＨレジスタ）３１と、２ビット演算回路３２と、キャリーレジスタ（Ｃレジスタ）３３とを含む。このＰＥ２１による演算は、以下のように行われる。
【００４７】
まず、左側のデータレジスタ２２から、ＸレジスタおよびＸＨレジスタ３１に２ビットの演算データが読み出される（Ｒｅａｄ）。次に、演算回路３２は、ＸレジスタおよびＸＨレジスタ３１の値（ＩＮ１）、右側のデータレジスタ２２の２ビットの値（ＩＮ２）、およびキャリーレジスタ３３の１ビットの値（ＣＩＮ）を演算する（Ｍｏｄｉｆｙ）。
【００４８】
最後に、演算回路３２は、演算結果（ＯＵＴ）を右側のデータレジスタ２２に書き込み、桁上げ（ＣＯＵＴ）をキャリーレジスタ３３に格納する（Ｗｒｉｔｅ）。これらは１サイクルで実行され、演算データのデータ長分だけ演算が繰り返される。なお、キャリーレジスタ３３の初期値は“０”となっている。
【００４９】
（第１の実施の形態）
本発明におけるデータ処理装置においては、複数エントリのＰＥ間で桁上げ伝播をするためにカスケード接続を行なう。しかしながら、ｋ個のＰＥをカスケード接続すれば、粗粒度化後のＰＥにおいてｋ倍の組合わせ遅延が発生することになる。これでは、ＭＸコア１１の動作周波数を下げなければならない。
【００５０】
本発明の第１の実施の形態においては、演算粒度の変更をＭＸコア１１の動作周波数を下げずに行なうために、粗粒度化するエントリ間の動作タイミングをずらすことにより、桁上げ遅延が動作周波数に与える影響を回避するものである。
【００５１】
図９は、本発明の第１の実施の形態におけるＭＸコア１１の内部構成の一例を示すブロック図である。本実施の形態におけるＭＸコア１１は、ＰＥ間の桁上げ伝播配線の経路を切替えることにより、演算粒度を２ビットから４ビット、または４ビットから２ビットに切替えることを可能にしたものである。以下、粒度変更後の演算として加算命令の場合について説明するが、これは減算および乗算は加算命令から構成されているためであり、加算命令で粒度変更後の演算が可能であれば減算および乗算も実現可能だからである。
【００５２】
ＰＥ（２ｎ）２１−１は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ（Ｃレジスタ）３３と、ＯＲ回路３４と、スイッチ回路３５および３６とを含む。また、ＰＥ（２ｎ＋１）２１−２は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ３３と、ＯＲ回路３７と、スイッチ回路３８および３９とを含む。
【００５３】
演算粒度が２ビットの場合にはｓｅｌｅｃｔ信号に“０”が出力され、インバータ４０は“１”を出力する。このとき、スイッチ回路３５が導通状態となり、演算回路３２からの桁上げ（ＣＯＵＴ）がキャリーレジスタ３３に入力される。そして、キャリーレジスタ３３の値がＯＲ回路３４を介して演算回路３２に入力される。一方、スイッチ回路３６は非導通状態となる。
【００５４】
また、インバータ４１は“１”を出力し、スイッチ回路３９が導通状態となり、演算回路３２からの桁上げ（ＣＯＵＴ）がキャリーレジスタ３３に入力される。そして、キャリーレジスタ３３の値がＯＲ回路３７を介して演算回路３２に入力される。一方、スイッチ回路３８は非導通状態となる。したがって、ＰＥ（２ｎ）２１−１およびＰＥ（２ｎ＋１）２１−２は、それぞれ２ビットＰＥとして動作することになる。
【００５５】
演算粒度が４ビットの場合にはｓｅｌｅｃｔ信号に“１”が出力され、インバータ４０は“０”を出力する。このとき、スイッチ回路３５が非導通状態となり、ＯＲ回路３４はＰＥ（２ｎ＋１）２１−２内の演算回路３２からの桁上げ（ＣＯＵＴ）を演算回路３２に出力する。一方、スイッチ回路３６は導通状態となり、ＰＥ（２ｎ）２１−１内の演算回路３２からの桁上げ（ＣＯＵＴ）がＰＥ（２ｎ＋１）２１−２内のＯＲ回路３７を介して演算回路３２に入力される。
【００５６】
また、スイッチ回路３８が導通状態となり、ＰＥ（２ｎ＋１）２１−２内の演算回路３２からの桁上げ（ＣＯＵＴ）がＰＥ（２ｎ）２１−１内のＯＲ回路３４を介して演算回路３２に入力される。一方、インバータ４１は“０”を出力し、スイッチ回路３９は非導通状態となり、ＰＥ（２ｎ）２１−１内の演算回路３２からの桁上げ（ＣＯＵＴ）がＯＲ回路３７を介して演算回路３２に入力される。したがって、ＰＥ（２ｎ）２１−１およびＰＥ（２ｎ＋１）２１−２は、４ビットＰＥとして動作することになる。なお、演算粒度が４ビットの場合には、ＰＥ（２ｎ）２１−１のトリガと、ＰＥ（２ｎ＋１）２１−２のトリガとが半サイクルずらされる。
【００５７】
また、図９に示すように、偶数エントリと奇数エントリとの間でデータが２ビット単位で交互に配置されることになる。
【００５８】
図１０は、本発明の第１の実施の形態におけるＭＸコア１１の内部構成の他の一例を示すブロック図である。ＰＥ（２ｎ）２１−１は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ３３と、セレクタ４２とを含む。また、ＰＥ（２ｎ＋１）２１−２は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ３３と、セレクタ４３とを含む。
【００５９】
図１０に示すＰＥ（２ｎ）２１−１およびＰＥ（２ｎ＋１）２１−２の内部構成は、図９に示す内部構成と比較して、ＯＲ回路、スイッチ回路およびインバータをセレクタに置換したものであり、基本的な動作は同じである。したがって、その動作の詳細な説明は繰り返さない。
【００６０】
図１１は、本発明の第１の実施の形態におけるＭＸコア１１の演算粒度を４ビットとしたときの動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、クロック信号の立ち上がりで左側のデータレジスタ２２−１から演算データａ０およびａ１が読み出され、右側のデータレジスタ２２−１から演算データｂ０およびｂ１が読み出される（Ｒｅａｄ）。
【００６１】
次に、ＰＥ（２ｎ）２１−１は、下位２ビットの加算を行ない（Ｍｏｄｉｆｙ）、キャリーＣ２をＰＥ（２ｎ＋１）２１−２に出力する。そして、演算結果Ｓ０およびＳ１を右側のデータレジスタ２２−１に書き込む（Ｗｒｉｔｅ）。
【００６２】
一方、ＰＥ（２ｎ＋１）２１−２は、半サイクル遅れて動作を開始し、クロック信号の立ち下がりで左側のデータレジスタ２２−２から演算データａ２およびａ３が読み出され、右側のデータレジスタ２２−２から演算データｂ２およびｂ３が読み出される（Ｒｅａｄ）。
【００６３】
次に、ＰＥ（２ｎ＋１）２１−２は、演算データａ２、ａ３、ｂ２、ｂ３およびキャリーＣ２を用いて上位２ビットの加算を行ない（Ｍｏｄｉｆｙ）、キャリーＣ４をＰＥ（２ｎ）２１−１に出力する。そして、演算結果Ｓ２およびＳ３を右側のデータレジスタ２２−２に書き込む（Ｗｒｉｔｅ）。
【００６４】
２番目のサイクルにおいて、ＰＥ（２ｎ）２１−１は、ＰＥ（２ｎ＋１）２１−２から出力されるキャリーを用いて下位２ビットの演算を行ない、以降同様の動作を繰り返す。また、ＰＥ（２ｎ＋１）２１−２は、２番目のサイクル以降も同様の動作を繰り返す。この４ビットの加算は、データ長だけ繰り返される。
【００６５】
以上説明したように、本実施の形態におけるデータ処理装置によれば、ＰＥ（２ｎ）２１−１およびＰＥ（２ｎ＋１）２１−２は、演算粒度を２ビットにする場合には、演算回路３２の桁上げ出力（ＣＯＵＴ）を自身の桁上げ入力（ＣＩＮ）に接続し、演算粒度を４ビットにする場合には、演算回路３２の桁上げ出力（ＣＯＵＴ）を他方の演算回路３２の桁上げ入力（ＣＩＮ）に接続するようにしたので、演算粒度を変更可能なデータ処理装置を提供することが可能となった。すなわち、「並列度低下の問題」および「演算粒度依存の問題」を解決することが可能となった。
【００６６】
また、演算粒度を４ビットにする場合、ＰＥ（２ｎ）２１−１のトリガとＰＥ（２ｎ＋１）２１−２のトリガとを半サイクルずらすようにし、エントリ間で発生する演算開始のずれの時間を桁上げ伝播のための時間として確保するようにしたので、所要サイクル数の増加を抑えつつ、ＰＥの粗粒度化によって発生する桁上げ伝播遅延の問題を解決することが可能となった。また、これにより、後述の第２〜第４の実施の形態におけるデータ処理装置と比較して、追加リソースを抑えることができる。
【００６７】
また、粗粒度化した場合であっても、２Ｎｂｉｔの演算に必要なエントリ数は２エントリであり、後述の第２および第４の実施の形態におけるデータ処理装置と比較して、より少ないエントリ数で粒度変更が行なえ、実装効率を高めることが可能である。
【００６８】
また、図４（ａ）に示す代替技術のように、１ＰＥのサイズを大きくする必要がないため、同じ並列度（エントリ数）の場合には、代替技術と比較してＭＸコア１１の回路面積を小さく抑えることができ、ＭＸコア１１の動作周波数が低下するのを防止することが可能となった。
【００６９】
また、図４（ｂ）に示す代替技術のように、データレジスタを拡張する必要がないため、代替技術と比較してＭＸコア１１の回路面積を小さく抑えることができ、消費電力の増大を防止することが可能となった。
【００７０】
（第２の実施の形態）
本発明の第１の実施の形態におけるＭＸコア１１は、粗粒度化するエントリ間の動作タイミングをずらすことにより桁上げ遅延が動作周波数に与える影響を回避するものであった。本発明の第２の実施の形態におけるＭＸコア１１は、演算データを上位桁と下位桁との２ブロックに分け、それぞれのブロックの演算を並列に行なう。ただし、上位桁のブロックについては、下位桁のブロックからの桁上げがある場合と桁上げがない場合との２種類の演算をしておき、下位桁のブロックからの桁上げが確定した時点で上位桁のブロックを選択するものである。したがって、本実施の形態におけるＭＸコア１１は、ＰＥ間の桁上げ伝播遅延の影響を受けることはない。
【００７１】
図１２は、本発明の第２の実施の形態におけるＭＸコア１１の演算の流れを模式的に示す図である。図１２においては、連続する３つのエントリのＰＥを、ＰＥ（３ｎ）、ＰＥ（３ｎ＋１）、ＰＥ（３ｎ＋２）とし、８ビットの加算（ａ＋ｂ＝Ｓ）の場合についての演算の流れが示されている。なお、ｎ＝０，１，２，…とする。
【００７２】
また、ＰＥ（３ｎ）、ＰＥ（３ｎ＋１）およびＰＥ（３ｎ＋２）は、図８に示すＰＥと同等の構成を有している。ＰＥ（３ｎ）は、下位桁のブロックの演算を行なう。ＰＥ（３ｎ＋１）は、下位桁のブロックからの桁上げがない場合における上位桁のブロックの演算を行なうため、図８に示すキャリーレジスタ３３の初期値として“０”が設定される。また、ＰＥ（３ｎ＋２）は、下位桁のブロックからの桁上げがある場合における上位桁のブロックの演算を行なうため、図８に示すキャリーレジスタ３３の初期値として“１”が設定される。
【００７３】
図１２（ａ）は、各エントリの初期配置を示している。ＰＥ（３ｎ）に対応するエントリ３ｎには、演算データａ［０］〜ａ［３］およびｂ［０］〜ｂ［３］が配置される。また、ＰＥ（３ｎ＋１）に対応するエントリ３ｎ＋１には、演算データａ［４］〜ａ［７］およびｂ［４］〜ｂ［７］が配置される。なお、ＰＥ（３ｎ＋２）に対応するエントリ３ｎ＋２には、演算データは配置されない。
【００７４】
図１２（ｂ）に示すように、ＰＥ（３ｎ）は、下位桁ブロックのうちａ［０］およびａ［１］と、ｂ［０］およびｂ［１］との加算を行ない、加算結果Ｓ［０］およびＳ［１］をエントリ３ｎに格納する。これと並行して、ＰＥ（３ｎ＋１）は、下位桁ブロックからの桁上げがない場合を想定し、上位桁ブロックのうちａ［４］およびａ［５］と、ｂ［４］およびｂ［５］との加算を行ない、加算結果Ｓ［４］およびＳ［５］をエントリ３ｎ＋１に格納する。また、ＰＥ（３ｎ＋２）は、下位桁ブロックからの桁上げがある場合を想定し、上位桁ブロックのうちａ［４］およびａ［５］と、ｂ［４］およびｂ［５］との加算を行ない、加算結果Ｓ’［４］およびＳ’［５］をエントリ３ｎ＋２に格納する。
【００７５】
図１２（ｃ）に示すように、次に、ＰＥ（３ｎ）は、下位桁ブロックのうちａ［２］およびａ［３］と、ｂ［２］およびｂ［３］との加算を行ない、加算結果Ｓ［２］およびＳ［３］をエントリ３ｎに格納する。これと並行して、ＰＥ（３ｎ＋１）は、上位桁ブロックのうちａ［６］およびａ［７］と、ｂ［６］およびｂ［７］との加算を行ない、加算結果Ｓ［６］およびＳ［７］をエントリ３ｎ＋１に格納する。また、ＰＥ（３ｎ＋２）は、上位桁ブロックのうちａ［６］およびａ［７］と、ｂ［６］およびｂ［７］との加算を行ない、加算結果Ｓ’［６］およびＳ’［７］をエントリ３ｎ＋２に格納する。
【００７６】
図１２（ｄ）に示すように、最後に、ＰＥ（３ｎ）は、下位桁ブロックの加算によって発生する桁上げＣ４を、エントリ３ｎのテンポラリ領域に保存する。
【００７７】
図１３は、演算結果Ｓを次の演算で使用する場合のデータ読み出し方法を説明するための図である。ＰＥ（３ｎ＋１）による演算結果と、ＰＥ（３ｎ＋２）による演算結果とのどちらが有効であるかは、下位桁ブロックの演算後に発生する桁上げＣ４によって決定される。
【００７８】
図１３（ａ）は、下位桁ブロックからの桁上げがない場合のデータ読み出しを示している。ＰＥ（３ｎ）は、エントリ３ｎに格納される演算結果Ｓ［０］〜Ｓ［３］を読み出し、演算を行なう。また、ＰＥ（３ｎ＋１）およびＰＥ（３ｎ＋２）は、エントリ３ｎ＋１に格納される演算結果Ｓ［４］〜Ｓ［７］を読み出し、演算を行なう。
【００７９】
図１３（ｂ）は、下位桁ブロックからの桁上げがある場合のデータ読み出しを示している。ＰＥ（３ｎ）は、エントリ３ｎに格納される演算結果Ｓ［０］〜Ｓ［３］を読み出し、演算を行なう。また、ＰＥ（３ｎ＋１）およびＰＥ（３ｎ＋２）は、エントリ３ｎ＋２に格納される演算結果Ｓ’［４］〜Ｓ’［７］を読み出し、演算を行なう。
【００８０】
図１４は、本発明の第２の実施の形態におけるＭＸコア１１の演算動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、クロック信号の立ち上がりでＰＥ（３ｎ）はエントリ３ｎから前回の演算結果の桁上げＣ４を読み出し、ＰＥ（３ｎ＋１）およびＰＥ（３ｎ＋２）に転送する。
【００８１】
２番目のサイクルにおいて、ＰＥ（３ｎ）は、エントリ３ｎから演算データａ０およびａ１と、演算データｂ０およびｂ１とを読み出し（Ｒｅａｄ）、２ビットの加算を行ない（Ｍｏｄｉｆｙ）、演算結果Ｓ０およびＳ１をエントリ３ｎに書き込む（Ｗｒｉｔｅ）。これと並行して、ＰＥ（３ｎ＋１）は、前回の桁上げＣ４に応じて、エントリ３ｎ＋１または３ｎ＋２から演算データａ４およびａ５と、演算データｂ４およびｂ５とを読み出し、２ビットの加算を行ない、演算結果Ｓ４およびＳ５をエントリ３ｎ＋１に書き込む。また、ＰＥ（３ｎ＋２）は、前回の桁上げＣ４に応じて、エントリ３ｎ＋１または３ｎ＋２から演算データａ４およびａ５と、演算データｂ４およびｂ５とを読み出し、２ビットの加算を行ない、演算結果Ｓ’４およびＳ’５をエントリ３ｎ＋２に書き込む。
【００８２】
３番目のサイクルにおいて、ＰＥ（３ｎ）〜ＰＥ（３ｎ＋２）は、２番目のサイクルと同様の動作を行ない、演算結果Ｓ２およびＳ３がエントリ３ｎに書き込まれ、演算結果Ｓ６およびＳ７がエントリ３ｎ＋１に書き込まれ、演算結果Ｓ’６およびＳ’７がエントリ３ｎ＋２に書き込まれる。
【００８３】
最後のサイクルにおいて、ＰＥ（３ｎ）は、下位桁ブロックの桁上げＣ４をエントリ３ｎに保存する。
【００８４】
図１５は、本発明の第２の実施の形態におけるＭＸコア１１の内部構成の一例を示す図である。本実施の形態におけるＭＸコア１１は、基本的には、図８に示すＭＸコアの構成と同様である。図１５においては、ＰＥの内部構成のうちＸレジスタのみを記載しており、さらにＰＥ間データ通信を行なうために設けられたエントリコミュニケータ（ＥＣＭ）回路の一部、および新たに追加された追加回路部が記載されている。
【００８５】
図１３を用いて説明したように、ＰＥ（３ｎ＋１）およびＰＥ（３ｎ＋２）は下位桁ブロックの桁上げに依存したデータ読み出しが必要となる。そのため、ＰＥ間データ通信を行なうために設けられたＥＣＭ回路のセレクタ５１〜５４を利用する。
【００８６】
図１５において、スイッチ回路５５，５９および６０と、インバータ５６〜５８、１０２とが新たに追加された追加回路部である。演算粒度２ビットが選択された場合（ｓｅｌｅｃｔ信号が“０”の場合）には、スイッチ回路５５がオフとなって非導通状態となり、追加回路部が無効となる。したがって、図８に示すＭＸコア１１と同様の動作を行なう。
【００８７】
演算粒度４ビットが選択された場合（ｓｅｌｅｃｔ信号が“１”の場合）には、スイッチ回路５５がオンとなって導通状態となり、追加回路部が有効となる。このとき、下位桁ブロックからの桁上げＣ４が“０”であれば、インバータ５７が“１”を出力し、インバータ５８が“１”を出力する。インバータ１０２が“１”を出力し、スイッチ回路５９が導通状態となり、スイッチ回路６０が非導通状態となる。その結果、セレクタ５３は、エントリ３ｎ＋１に格納される演算データＳ［４］〜Ｓ［７］を選択し、ＰＥ（３ｎ＋２）内のＸレジスタ３１−３に出力する。
【００８８】
また、下位桁ブロックからの桁上げＣ４が“１”であれば、インバータ５６が“０”を出力する。インバータ１０２が“０”を出力し、スイッチ回路５９が非導通状態となり、スイッチ回路６０が導通状態となる。その結果、セレクタ５２は、エントリ３ｎ＋２に格納される演算データＳ’［４］〜Ｓ’［７］を選択し、ＰＥ（３ｎ＋１）内のＸレジスタ３１−２に出力する。
【００８９】
以上説明したように、本実施の形態におけるデータ処理装置によれば、上位桁ブロックの演算を行なう際、下位桁ブロックからの桁上げがある場合と桁上げがない場合との２種類の演算をしておき、下位桁ブロックからの桁上げが確定した時点で上位桁のブロックを選択するようにしたので、演算粒度を変更可能なデータ処理装置を提供することが可能となった。すなわち、「並列度低下の問題」および「演算粒度依存の問題」を解決することが可能となった。
【００９０】
また、第１の実施の形態におけるデータ処理装置のように、演算粒度が４ビットのときに偶数エントリと奇数エントリとの間でデータを２ビット単位で交互に配置する必要がなく、演算データの下位桁ブロックを偶数エントリに配置し、上位桁ブロックを奇数エントリに配置するだけで演算が行なえるため、複雑なデータの並べ替えが不要となった。
【００９１】
また、第１の実施の形態におけるデータ処理装置のように桁上げ伝播遅延の問題を解決するためにエントリ間の動作タイミングをずらす必要がないため、タイミング設計を容易に行なうことが可能となった。
【００９２】
また、上位桁ブロック用の演算ユニットとして新たにＰＥを割り当てるだけで粗粒度化が行なえるため、拡張性が高いデータ処理装置を提供することが可能となった。
【００９３】
（第３の実施の形態）
本発明の第３の実施の形態におけるデータ処理装置は、加算結果に現れる規則性を利用したユニットをＰＥに設けることにより、桁上げ伝播を待つことなく複数のＰＥで並列演算を行なうものである。
【００９４】
図１６は、４ビット加算の一例を示す図である。ここで、ａ０〜ａ３の４ビットおよびｂ０〜ｂ３の４ビットのうち、下位２ビットを下位桁ブロック、上位２ビットを上位桁ブロックと呼ぶことにする。このとき、下位桁ブロックから上位桁ブロックへ伝播する桁上げＣ２を用いることにより、桁上げなし（Ｃ２＝０）として計算した上位桁ブロックの解（Ｓ２，Ｓ３，Ｃ４）から、桁上げあり（Ｃ２＝１）のときの解（Ｓ２’，Ｓ３’，Ｃ４’）を生成することができる。
【００９５】
図１７は、加算結果に現れる規則性を説明するための図である。下位桁ブロックからの桁上げなし（Ｃ２＝０）として計算した上位桁ブロックの解をＳ２，Ｓ３，Ｃ４とすると、下位桁ブロックからの桁上げあり（Ｃ２＝１）の時のＳ２’はＳ２を反転した値となる。また、下位桁ブロックからの桁上げがあり（Ｃ２＝１）、Ｓ２＝１の時のＳ３’はＳ３を反転した値となる。また、下位桁ブロックからの桁上げがあり（Ｃ２＝１）、Ｓ２＝１であり、かつＳ３＝１の時のＣ４’はＣ４を反転した値となる。これら以外の条件の時のＳ２’，Ｓ３’およびＣ４’は、Ｓ２，Ｓ３およびＣ４と同じ値となる。
【００９６】
図１８は、図１７に示す加算結果に現れる規則性に基づいて上位桁ブロックの演算を行なう回路構成の一例、およびその動作を説明するためのタイミングチャートである。図１８（ａ）に示すように、２ビット加算器６１は、下位桁ブロックのａ０およびａ１と、ｂ０およびｂ１との加算を行ない、桁上げＣ２をユニット６３に出力する。
【００９７】
また、２ビット加算器６２は、下位桁ブロックからの桁上げがないときの、上位桁ブロックのａ２およびａ３と、ｂ２およびｂ３との加算を行ない、演算結果Ｓ２およびＳ３と、桁上げＣ４とをユニット６３に出力する。
【００９８】
ユニット６３は、２ビット加算器６１から出力される桁上げＣ２に基づいて、下位桁ブロックからの桁上げＣ２を考慮した上位桁ブロックの解を生成して出力すると共に、下位桁ブロックからの桁上げＣ２を考慮した上位桁ブロックの桁上げＣ４をキャリーレジスタ３３に書き込む。
【００９９】
図１８（ｂ）は、本発明の第３の実施の形態におけるＭＸコア１１の動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、ＰＥ（２ｎ）は、演算データａ０およびａ１と演算データｂ０およびｂ１とをデータレジスタから読み出す（Ｒｅａｄ）。次に、ＰＥ（２ｎ）は、下位２ビットの加算を行ない、桁上げＣ２をＰＥ（２ｎ＋１）側に出力する（Ｍｏｄｉｆｙ）。そして、ＰＥ（２ｎ）は、演算結果Ｓ０およびＳ１をデータレジスタに書き込む（Ｗｒｉｔｅ）。
【０１００】
一方、同じタイミングで、ＰＥ（２ｎ＋１）は、演算データａ２およびａ３と演算データｂ２およびｂ３とをデータレジスタから読み出す（Ｒｅａｄ）。次に、ＰＥ（２ｎ＋１）は、上位２ビットの加算を行なって桁上げＣ２を考慮しない解Ｓ２およびＳ３をユニット６３に出力する。このとき、ユニット６３は、ＰＥ（２ｎ）から出力される桁上げＣ２に基づいて、桁上げＣ２を考慮した解Ｓ２およびＳ３を生成すると共に、桁上げＣ２を考慮した桁上げＣ４をＰＥ（２ｎ）側に出力する（Ｍｏｄｉｆｙ）。そして、ＰＥ（２ｎ＋１）は、演算結果Ｓ２およびＳ３をデータレジスタに書き込む（Ｗｒｉｔｅ）。
【０１０１】
２番目のサイクルにおいて、ＰＥ（２ｎ）は、ユニット６３から出力される桁上げＣ４を用いて下位２ビットの演算を行ない、以降同様の動作を繰り返す。また、ＰＥ（２ｎ＋１）は、２番目のサイクル以降も同様の動作を繰り返す。この４ビットの加算は、データ長だけ繰り返される。
【０１０２】
図１９は、本発明の第３の実施の形態におけるＭＸコア１１の内部構成の一例を示すブロック図である。ＰＥ（２ｎ）２１−１は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ（Ｃレジスタ）３３と、セレクタ６４とを含む。また、ＰＥ（２ｎ＋１）２１−２は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ３３と、スイッチ回路６７とを含む。
【０１０３】
また、ＭＸコア１１はさらに、スイッチ回路６５と、インバータ６６，６９，７３および７４と、セレクタ６８，７２および７５と、ＡＮＤ回路７０および７１とを含む。これらの回路が、上述のユニット６３に相当する。
【０１０４】
演算粒度が２ビットの場合にはｓｅｌｅｃｔ信号に“０”が出力され、スイッチ回路６５が非導通状態となる。このとき、セレクタ６４は、ＰＥ（２ｎ）２１−１内の演算回路３２からの桁上げ（ＣＯＵＴ）を選択してキャリーレジスタ３３に出力する。
【０１０５】
また、インバータ６６は“１”を出力し、スイッチ回路６７が導通状態となり、ＰＥ（２ｎ＋１）２１−２内の演算回路３２からの桁上げ（ＣＯＵＴ）がキャリーレジスタ３３に入力される。また、セレクタ７２は、演算回路３２の演算結果の上位ビット（ＯＵＴ２）を選択してデータレジスタ２２−２に出力する。また、セレクタ７５は、演算回路３２の演算結果の下位ビット（ＯＵＴ１）を選択してデータレジスタ２２−２に出力する。したがって、ＰＥ（２ｎ）２１−１およびＰＥ（２ｎ＋１）２１−２は、それぞれ２ビットＰＥとして動作することになる。
【０１０６】
演算粒度が４ビットの場合にはｓｅｌｅｃｔ信号に“１”が出力され、スイッチ回路６５が導通状態となる。このとき、セレクタ６４は、セレクタ６８から出力されるＰＥ（２ｎ）２１−１からの桁上げを考慮したＰＥ（２ｎ＋１）２１−２の桁上げを選択してキャリーレジスタ３３に出力する。
【０１０７】
また、インバータ６６は“０”を出力し、スイッチ回路６７が非導通状態となり、キャリーレジスタ３３の出力が“０”に固定される。また、セレクタ７５は、ＰＥ（２ｎ）２１−１からの桁上げが“０”のときに演算回路３２の演算結果の下位ビット（ＯＵＴ１）を選択してデータレジスタ２２−２に出力し、桁上げが“１”のときにインバータ７４から出力される演算結果の下位ビット（ＯＵＴ１）を反転した値を選択してデータレジスタ２２−２に出力する。
【０１０８】
また、セレクタ７２は、ＰＥ（２ｎ）２１−１からの桁上げが“１”であり、かつ演算結果の下位ビット（ＯＵＴ１）が“１”のとき（ＡＮＤ回路７０が“１”を出力するとき）に、インバータ７３から出力される演算回路３２の演算結果の上位ビット（ＯＵＴ２）を反転した値を選択してデータレジスタ２２−２に出力し、それ以外にとき（ＡＮＤ回路７０が“０”を出力するとき）に、演算回路３２の演算結果の上位ビット（ＯＵＴ２）をそのままデータレジスタ２２−２に出力する。
【０１０９】
また、セレクタ６８は、ＰＥ（２ｎ）２１−１からの桁上げが“１”であり、かつ演算結果の下位ビット（ＯＵＴ１）および上位ビット（ＯＵＴ２）が共に“１”のとき（ＡＮＤ回路７１が“１”を出力するとき）に、インバータ６９から出力される演算回路３２の桁上げ（ＣＯＵＴ）を反転した値を選択してＰＥ（２ｎ）２１−１に出力し、それ以外にとき（ＡＮＤ回路７１が“０”を出力するとき）に、演算回路３２の桁上げ（ＣＯＵＴ）をそのままＰＥ（２ｎ＋１）２１−１に出力する。
【０１１０】
図２０は、本発明の第３の実施の形態におけるＭＸコア１１の内部構成の他の一例を示すブロック図である。ＰＥ（２ｎ）２１−１は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ（Ｃレジスタ）３３と、セレクタ６４とを含む。また、ＰＥ（２ｎ＋１）２１−２は、ＸレジスタおよびＸＨレジスタ３１と、２ビット演算回路３２と、キャリーレジスタ３３と、スイッチ回路６７とを含む。
【０１１１】
また、ＭＸコア１１はさらに、スイッチ回路６５と、インバータ６６と、ＡＮＤ回路７０および７１と、論理和（ＯＲ）回路７６と、排他的論理和（ＥＸ−ＯＲ）回路７７および７８とを含む。これらの回路が、上述のユニット６３に相当する。
【０１１２】
図２０に示すＭＸコア１１の内部構成は、図１９に示す内部構成と比較して、インバータおよびセレクタをＥＸ−ＯＲ回路またはＯＲ回路に置換したものであり、基本的な動作は同じである。したがって、その動作の詳細な説明は繰り返さない。
【０１１３】
以上説明したように、本実施の形態におけるデータ処理装置によれば、演算粒度を２ビットにする場合には、演算回路３２の桁上げ出力（ＣＯＵＴ）を自身の桁上げ入力（ＣＩＮ）に接続し、演算粒度を４ビットにする場合には、下位桁ブロックからの桁上げがないときの上位桁ブロックの演算をしておき、ユニット６３が下位桁ブロックからの桁上げに応じて桁上げを考慮した上位桁ブロックの解を生成するようにしたので、演算粒度を変更可能なデータ処理装置を提供することが可能となった。すなわち、「並列度低下の問題」および「演算粒度依存の問題」を解決することが可能となった。
【０１１４】
また、ユニット６３を用いることにより、桁上げ先見加算器と同様の機能を、より少ない回路リソースで実現することが可能となった。
【０１１５】
また、所要サイクル数の増加を抑えつつ、ＰＥの粗粒度化によって発生する桁上げ伝播遅延の問題を解決することが可能となった。
【０１１６】
また、粗粒度化した場合であっても、２Ｎｂｉｔの演算に必要なエントリ数は２エントリであり、第２および第４の実施の形態におけるデータ処理装置と比較して、より少ないエントリ数で粒度変更が行なえ、実装効率を高めることが可能である。
【０１１７】
（第４の実施の形態）
本発明の第２の実施の形態におけるＭＸコア１１は、演算データを上位桁と下位桁との２ブロックに分け、それぞれのブロックの演算を並列に行なうものであった。本発明の第４の実施の形態におけるＭＸコア１１は、演算データを上位桁、中位桁および下位桁の３ブロックに分け、それぞれのブロックの演算を並列に行なう。ただし、中位桁のブロックについては、下位桁のブロックからの桁上げがある場合と桁上げがない場合との２種類の演算をしておき、下位桁のブロックからの桁上げが確定した時点で中位桁のブロックを選択する。同様に、上位桁のブロックについては、中位桁のブロックからの桁上げがある場合と桁上げがない場合との２種類の演算をしておき、中位桁のブロックからの桁上げが確定した時点で上位桁のブロックを選択するものである。したがって、本実施の形態におけるＭＸコア１１は、第２の実施の形態におけるＭＸコア１１と同様に、ＰＥ間の桁上げ伝播遅延の影響を受けることはない。
【０１１８】
図２１は、本発明の第４の実施の形態におけるＭＸコア１１の演算の流れを模式的に示す図である。図２１においては、連続する５つのエントリのＰＥを、ＰＥ（５ｎ）、ＰＥ（５ｎ＋１）、ＰＥ（５ｎ＋２）、ＰＥ（５ｎ＋３）およびＰＥ（５ｎ＋４）とし、１２ビットの加算（ａ＋ｂ＝Ｓ）の場合についての演算の流れが示されている。なお、ｎ＝０，１，２，…とする。
【０１１９】
また、ＰＥ（５ｎ）、ＰＥ（５ｎ＋１）、ＰＥ（５ｎ＋２）、ＰＥ（５ｎ＋３）およびＰＥ（５ｎ＋４）は、図８に示すＰＥと同等の構成を有している。ＰＥ（５ｎ）は、下位桁のブロックの演算を行なう。ＰＥ（５ｎ＋１）は、下位桁のブロックからの桁上げがない場合における中位桁のブロックの演算を行なうため、図８に示すキャリーレジスタ３３の初期値として“０”が設定される。また、ＰＥ（５ｎ＋２）は、下位桁のブロックからの桁上げがある場合における中位桁のブロックの演算を行なうため、図８に示すキャリーレジスタ３３の初期値として“１”が設定される。
【０１２０】
同様に、ＰＥ（５ｎ＋３）は、中位桁のブロックからの桁上げがない場合における上位桁のブロックの演算を行なうため、図８に示すキャリーレジスタ３３の初期値として“０”が設定される。また、ＰＥ（５ｎ＋４）は、中位桁のブロックからの桁上げがある場合における上位桁のブロックの演算を行なうため、図８に示すキャリーレジスタ３３の初期値として“１”が設定される。
【０１２１】
図２１（ａ）は、各エントリの初期配置を示している。ＰＥ（５ｎ）に対応するエントリには、演算データａ［０］〜ａ［３］およびｂ［０］〜ｂ［３］が配置される。また、ＰＥ（５ｎ＋１）に対応するエントリには、演算データａ［４］〜ａ［７］およびｂ［４］〜ｂ［７］が配置される。また、ＰＥ（５ｎ＋３）に対応するエントリには、演算データａ［８］〜ａ［１１］およびｂ［８］〜ｂ［１１］が配置される。なお、ＰＥ（５ｎ＋２）およびＰＥ（５ｎ＋４）に対応するエントリには、演算データは配置されない。
【０１２２】
図２１（ｂ）に示すように、ＰＥ（５ｎ）は、下位桁ブロックのうちａ［０］およびａ［１］と、ｂ［０］およびｂ［１］との加算を行ない、加算結果Ｓ［０］およびＳ［１］をエントリ５ｎに格納する。これと並行して、ＰＥ（５ｎ＋１）は、下位桁ブロックからの桁上げがない場合を想定し、中位桁ブロックのうちａ［４］およびａ［５］と、ｂ［４］およびｂ［５］との加算を行ない、加算結果Ｓ［４］およびＳ［５］をエントリ５ｎ＋１に格納する。また、ＰＥ（５ｎ＋３）は、中位桁ブロックからの桁上げがない場合を想定し、上位桁ブロックのうちａ［８］およびａ［９］と、ｂ［８］およびｂ［９］との加算を行ない、加算結果Ｓ［８］およびＳ［９］をエントリ５ｎ＋３に格納する。
【０１２３】
また、ＰＥ（５ｎ＋２）は、下位桁ブロックからの桁上げがある場合を想定し、中位桁ブロックのうちａ［４］およびａ［５］と、ｂ［４］およびｂ［５］との加算を行ない、加算結果Ｓ’［４］およびＳ’［５］をエントリ５ｎ＋２に格納する。また、ＰＥ（５ｎ＋４）は、中位桁ブロックからの桁上げがある場合を想定し、上位桁ブロックのうちａ［８］およびａ［９］と、ｂ［８］およびｂ［９］との加算を行ない、加算結果Ｓ’［８］およびＳ’［９］をエントリ５ｎ＋４に格納する。
【０１２４】
図２１（ｃ）に示すように、次に、ＰＥ（５ｎ）は、下位桁ブロックのうちａ［２］およびａ［３］と、ｂ［２］およびｂ［３］との加算を行ない、加算結果Ｓ［２］およびＳ［３］をエントリ５ｎに格納する。これと並行して、ＰＥ（３ｎ＋１）は、中位桁ブロックのうちａ［６］およびａ［７］と、ｂ［６］およびｂ［７］との加算を行ない、加算結果Ｓ［６］およびＳ［７］をエントリ５ｎ＋１に格納する。ＰＥ（５ｎ＋３）は、上位桁ブロックのうちａ［１０］およびａ［１１］と、ｂ［１０］およびｂ［１１］との加算を行ない、加算結果Ｓ［１０］およびＳ［１１］をエントリ５ｎ＋３に格納する。
【０１２５】
また、ＰＥ（５ｎ＋２）は、中位桁ブロックのうちａ［６］およびａ［７］と、ｂ［６］およびｂ［７］との加算を行ない、加算結果Ｓ’［６］およびＳ’［７］をエントリ５ｎ＋２に格納する。また、ＰＥ（５ｎ＋４）は、上位桁ブロックのうちａ［１０］およびａ［１１］と、ｂ［１０］およびｂ［１１］との加算を行ない、加算結果Ｓ’［１０］およびＳ’［１１］をエントリ５ｎ＋４に格納する。
【０１２６】
図２１（ｄ）に示すように、最後に、ＰＥ（５ｎ）は、下位桁ブロックの加算によって発生する桁上げＣ（５ｎ，４）を、エントリ５ｎのテンポラリ領域に保存する。また、ＰＥ（５ｎ＋１）は、中位桁ブロックの加算（下位桁ブロックからの桁上げがない場合）によって発生する桁上げＣ（５ｎ＋１，４）を、エントリ５ｎ＋１のテンポラリ領域に保存する。また、ＰＥ（５ｎ＋２）は、中位桁ブロックの加算（下位桁ブロックからの桁上げがある場合）によって発生する桁上げＣ（５ｎ＋２，４）を、エントリ５ｎ＋２のテンポラリ領域に保存する。
【０１２７】
図２２は、演算結果Ｓを次の演算で使用する場合のデータ読み出し方法を説明するための図である。ＰＥ（５ｎ＋１）による演算結果と、ＰＥ（５ｎ＋２）による演算結果とのどちらが有効であるかは、下位桁ブロックの演算後に発生する桁上げＣ（５ｎ，４）によって決定される。また、ＰＥ（５ｎ＋３）による演算結果と、ＰＥ（５ｎ＋４）による演算結果とのどちらが有効であるかは、中位桁ブロックの演算後に発生する桁上げＣ（５ｎ＋１，４）またはＣ（５ｎ＋２，４）よって決定される。
【０１２８】
図２２（ａ）は、下位桁ブロックからの桁上げがなく（Ｃ（５ｎ，４）＝０）、中位桁ブロックからの桁上げがある（Ｃ（５ｎ＋１，４）＝１）場合のデータ読み出しを示している。ＰＥ（５ｎ）は、エントリ５ｎに格納される演算結果Ｓ［０］〜Ｓ［３］を読み出し、演算を行なう。また、ＰＥ（５ｎ＋１）およびＰＥ（５ｎ＋２）は、エントリ５ｎ＋１に格納される演算結果Ｓ［４］〜Ｓ［７］を読み出し、演算を行なう。また、ＰＥ（５ｎ＋３）およびＰＥ（５ｎ＋４）は、エントリ５ｎ＋４に格納される演算結果Ｓ’［８］〜Ｓ’［１１］を読み出し、演算を行なう。
【０１２９】
図２２（ｂ）は、下位桁ブロックからの桁上げがあり（Ｃ（５ｎ，４）＝１）、中位桁ブロックからの桁上げがない（Ｃ（５ｎ＋２，４）＝０）場合のデータ読み出しを示している。ＰＥ（５ｎ）は、エントリ５ｎに格納される演算結果Ｓ［０］〜Ｓ［３］を読み出し、演算を行なう。また、ＰＥ（５ｎ＋１）およびＰＥ（５ｎ＋２）は、エントリ５ｎ＋２に格納される演算結果Ｓ’［４］〜Ｓ’［７］を読み出し、演算を行なう。また、ＰＥ（５ｎ＋３）およびＰＥ（５ｎ＋４）は、エントリ５ｎ＋３に格納される演算結果Ｓ［８］〜Ｓ［１１］を読み出し、演算を行なう。
【０１３０】
図２３は、本発明の第４の実施の形態におけるＭＸコア１１の演算動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、クロック信号の立ち上がりでＰＥ（５ｎ）はエントリ５ｎから前回の演算結果の桁上げＣ（５ｎ，４）を読み出し、ＰＥ（５ｎ＋１）およびＰＥ（５ｎ＋２）に転送する。ＰＥ（５ｎ＋１）およびＰＥ（５ｎ＋２）は、桁上げＣ（５ｎ，４）によっていずれが選択されたかを判断し、選択されたＰＥ（５ｎ＋１）またはＰＥ（５ｎ＋２）がエントリ５ｎ＋１または５ｎ＋２から前回の演算結果の桁上げＣ（５ｎ＋１，４）またはＣ（５ｎ＋２，４）を読み出し、ＰＥ（５ｎ＋３）およびＰＥ（５ｎ＋４）に転送する。
【０１３１】
２番目のサイクルにおいて、ＰＥ（５ｎ）は、エントリ５ｎから演算データａ０およびａ１と、演算データｂ０およびｂ１とを読み出し（Ｒｅａｄ）、２ビットの加算を行ない（Ｍｏｄｉｆｙ）、演算結果Ｓ０およびＳ１をエントリ５ｎに書き込む（Ｗｒｉｔｅ）。これと並行して、ＰＥ（５ｎ＋１）は、前回の桁上げＣ（５ｎ，４）に応じて、エントリ５ｎ＋１または５ｎ＋２から演算データａ４およびａ５と、演算データｂ４およびｂ５とを読み出し、２ビットの加算を行ない、演算結果Ｓ４およびＳ５をエントリ５ｎ＋１に書き込む。また、ＰＥ（５ｎ＋２）は、前回の桁上げＣ（５ｎ，４）に応じて、エントリ５ｎ＋１または５ｎ＋２から演算データａ４およびａ５と、演算データｂ４およびｂ５とを読み出し、２ビットの加算を行ない、演算結果Ｓ’４およびＳ’５をエントリ５ｎ＋２に書き込む。
【０１３２】
また、ＰＥ（５ｎ＋３）は、前回の桁上げＣ（５ｎ＋１，４）またはＣ（５ｎ＋２，４）に応じて、エントリ５ｎ＋３または５ｎ＋４から演算データａ８およびａ９と、演算データｂ８およびｂ９とを読み出し、２ビットの加算を行ない、演算結果Ｓ８およびＳ９をエントリ５ｎ＋３に書き込む。また、ＰＥ（５ｎ＋４）は、前回の桁上げＣ（５ｎ＋１，４）またはＣ（５ｎ＋２，４）に応じて、エントリ５ｎ＋３または５ｎ＋４から演算データａ８およびａ９と、演算データｂ８およびｂ９とを読み出し、２ビットの加算を行ない、演算結果Ｓ’８およびＳ’９をエントリ５ｎ＋４に書き込む。
【０１３３】
３番目のサイクルにおいて、ＰＥ（５ｎ）〜ＰＥ（５ｎ＋４）は、２番目のサイクルと同様の動作を行ない、演算結果Ｓ２およびＳ３がエントリ５ｎに書き込まれ、演算結果Ｓ６およびＳ７がエントリ５ｎ＋１に書き込まれ、演算結果Ｓ’６およびＳ’７がエントリ５ｎ＋２に書き込まれ、演算結果Ｓ１０およびＳ１１がエントリ５ｎ＋３に書き込まれ、演算結果Ｓ’１０およびＳ’１１がエントリ５ｎ＋４に書き込まれる。
【０１３４】
最後のサイクルにおいて、ＰＥ（５ｎ）は、下位桁ブロックの桁上げＣ（５ｎ，４）をエントリ５ｎに保存し、ＰＥ（５ｎ＋１）およびＰＥ（５ｎ＋２）は、中位桁ブロックの桁上げＣ（５ｎ＋１，４）およびＣ（５ｎ＋２，４）をエントリ５ｎ＋１および５ｎ＋２に保存する。
【０１３５】
図２４は、本発明の第４の実施の形態におけるＭＸコア１１の内部構成の一例を示す図である。本実施の形態におけるＭＸコア１１は、基本的には、図８に示すＭＸコアの構成と同様である。図２４においては、ＰＥの内部構成のうちＸレジスタのみを記載しており、さらにＰＥ間データ通信を行なうために設けられたエントリコミュニケータ（ＥＣＭ）回路の一部、および新たに追加された追加回路部が記載されている。
【０１３６】
図２２を用いて説明したように、ＰＥ（５ｎ＋１）およびＰＥ（５ｎ＋２）は下位桁ブロックの桁上げに依存したデータ読み出しが必要となる。そのため、ＰＥ間データ通信を行なうために設けられたＥＣＭ回路のセレクタ８２〜８３を利用する。また、ＰＥ（５ｎ＋３）およびＰＥ（５ｎ＋４）は中位桁ブロックの桁上げに依存したデータ読み出しが必要となる。そのため、ＰＥ間データ通信を行なうために設けられたＥＣＭ回路のセレクタ８４〜８５を利用する。
【０１３７】
図２４において、スイッチ回路９２〜９４および９８〜１０１と、インバータ８６〜９１、１０３、１０４と、ＡＮＤ回路９５および９６と、ＯＲ回路９７とが新たに追加された追加回路部である。演算粒度２ビットが選択された場合（ｓｅｌｅｃｔ信号が“０”の場合）には、スイッチ回路９２〜９４がオフとなって非導通状態となり、追加回路部が無効となる。したがって、図８に示すＭＸコア１１と同様の動作を行なう。
【０１３８】
演算粒度６ビットが選択された場合（ｓｅｌｅｃｔ信号が“１”の場合）には、スイッチ回路９２〜９４がオンとなって導通状態となり、追加回路部が有効となる。このとき、下位桁ブロックからの桁上げＣ（５ｎ，４）が“０”であれば、インバータ８７が“１”を出力し、インバータ８８が“１”を出力する。インバータ１０３が“１”を出力し、スイッチ回路９８が導通状態となり、スイッチ回路９９が非導通状態となる。その結果、セレクタ８３は、エントリ５ｎ＋１に格納される演算データＳ［４］〜Ｓ［７］を選択し、ＰＥ（５ｎ＋２）内のＸレジスタ３１−３に出力する。
【０１３９】
また、ＯＲ回路９７は、中位桁ブロックからの桁上げＣ（５ｎ＋１，４）を選択して出力する。このとき、桁上げＣ（５ｎ＋１，４）が“０”であれば、インバータ９０が“１”を出力し、インバータ９１が“１”を出力する。インバータ１０４が“１”を出力し、スイッチ回路１００が導通状態となり、スイッチ回路１０１が非導通状態となる。その結果、セレクタ８５は、エントリ５ｎ＋３に格納される演算データＳ［８］〜Ｓ［１１］を選択し、ＰＥ（５ｎ＋４）内のＸレジスタ３１−５に出力する。
【０１４０】
また、桁上げＣ（５ｎ＋１，４）が“１”であれば、インバータ８９が“０”を出力する。インバータ１０４が“０”を出力し、スイッチ回路１００が非導通状態となり、スイッチ回路１０１が導通状態となる。その結果、セレクタ８４は、エントリ５ｎ＋４に格納される演算データＳ’［８］〜Ｓ’［１１］を選択し、ＰＥ（５ｎ＋３）内のＸレジスタ３１−４に出力する。
【０１４１】
また、下位桁ブロックからの桁上げＣ（５ｎ，４）が“１”であれば、インバータ８６が“０”を出力する。インバータ１０２が“０”を出力し、スイッチ回路９８が非導通状態となり、スイッチ回路９９が導通状態となる。その結果、セレクタ８２は、エントリ５ｎ＋２に格納される演算データＳ’［４］〜Ｓ’［７］を選択し、ＰＥ（５ｎ＋１）内のＸレジスタ３１−２に出力する。
【０１４２】
また、ＯＲ回路９７は、中位桁ブロックからの桁上げＣ（５ｎ＋２，４）を選択して出力する。このとき、桁上げＣ（５ｎ＋２，４）が“０”であれば、インバータ９０が“１”を出力し、インバータ９１が“１”を出力する。インバータ１０３が“１”を出力し、スイッチ回路１００が導通状態となり、スイッチ回路１０１が非導通状態となる。その結果、セレクタ８５は、エントリ５ｎ＋３に格納される演算データＳ［８］〜Ｓ［１１］を選択し、ＰＥ（５ｎ＋４）内のＸレジスタ３１−５に出力する。
【０１４３】
また、桁上げＣ（５ｎ＋１，４）が“１”であれば、インバータ８９が“０”を出力する。インバータ１０３が“０”を出力し、スイッチ回路１００が非導通状態となり、スイッチ回路１０１が導通状態となる。その結果、セレクタ８４は、エントリ５ｎ＋４に格納される演算データＳ’［８］〜Ｓ’［１１］を選択し、ＰＥ（５ｎ＋３）内のＸレジスタ３１−４に出力する。
【０１４４】
以上説明したように、本実施の形態におけるデータ処理装置によれば、中位桁ブロックおよび上位桁ブロックの演算を行なう際、下位桁ブロックおよび中位桁ブロックからの桁上げがある場合と桁上げがない場合との２種類の演算をしておき、下位桁ブロックからの桁上げが確定した時点で中位桁のブロックを選択し、中位桁ブロックからの桁上げが確定した時点で上位桁のブロックを選択するようにしたので、本発明の第２の実施の形態において説明した効果と同様の効果を奏することが可能なった、
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１４５】
【図１】本発明のデータ処理装置を含んだ半導体装置の概略構成を示すブロック図である。
【図２】ＭＸコア１１による並列演算の一例を示す図である。
【図３】ＭＸコア１１の問題点を説明するための図である。
【図４】図３に示すＭＸコア１１の問題点に対する代替技術を示す図である。
【図５】本発明の基本原理を説明するための図である。
【図６】本発明による「並列度低下の問題」の解決の一例を説明するための図である。
【図７】本発明による「並列度低下の問題」の解決の他の一例を説明するための図である。
【図８】ＰＥの基本的構成を示すブロック図である。
【図９】本発明の第１の実施の形態におけるＭＸコア１１の内部構成の一例を示すブロック図である。
【図１０】本発明の第１の実施の形態におけるＭＸコア１１の内部構成の他の一例を示すブロック図である。
【図１１】本発明の第１の実施の形態におけるＭＸコア１１の演算粒度を４ビットとしたときの動作を説明するためのタイミングチャートである。
【図１２】本発明の第２の実施の形態におけるＭＸコア１１の演算の流れを模式的に示す図である。
【図１３】演算結果Ｓを次の演算で使用する場合のデータ読み出し方法を説明するための図である。
【図１４】本発明の第２の実施の形態におけるＭＸコア１１の演算動作を説明するためのタイミングチャートである。
【図１５】本発明の第２の実施の形態におけるＭＸコア１１の内部構成の一例を示す図である。
【図１６】４ビット加算の一例を示す図である。
【図１７】加算結果に現れる規則性を説明するための図である。
【図１８】図１７に示す加算結果に現れる規則性に基づいて上位桁ブロックの演算を行なう回路構成の一例、およびその動作を説明するためのタイミングチャートである。
【図１９】本発明の第３の実施の形態におけるＭＸコア１１の内部構成の一例を示すブロック図である。
【図２０】本発明の第３の実施の形態におけるＭＸコア１１の内部構成の他の一例を示すブロック図である。
【図２１】本発明の第４の実施の形態におけるＭＸコア１１の演算の流れを模式的に示す図である。
【図２２】演算結果Ｓを次の演算で使用する場合のデータ読み出し方法を説明するための図である。
【図２３】本発明の第４の実施の形態におけるＭＸコア１１の演算動作を説明するためのタイミングチャートである。
【図２４】本発明の第４の実施の形態におけるＭＸコア１１の内部構成の一例を示す図である。
【符号の説明】
【０１４６】
１  半導体装置、２  ＳＤＲＡＭ、１１  ＭＸコア、１２  ホストＣＰＵ、１３  ＤＭＡＣ、１４  メモリコントローラ、１５  バス、２１−１〜２１−ｍ  ＰＥ、２２−１〜２２−ｍ  データレジスタ、２３  Ｉ／Ｏインタフェース、２４  コントローラ、２５  命令メモリ、３１  ＸレジスタおよびＸＨレジスタ、３２  ２ビット演算回路、３３  キャリーレジスタ、３４，３７，９７  ＯＲ回路、３５，３６，３８，３９，５５，５９，６０，６５，６７，９２〜９４，９８〜１０１  スイッチ回路、４０，４１，５６〜５８，６６，６９，７３，７４，８６〜９１  インバータ、４２，４３，５１〜５４，６４，６８，７２，７５，８１〜８５  セレクタ、６１，６２  ２ビット加算器、６３  ユニット、７０，７１，９５，９６  ＡＮＤ回路、７６〜７８  ＥＸ−ＯＲ回路。
【図１】
2010122741.tif 000003
【図２】
2010122741.tif 000004
【図３】
2010122741.tif 000005
【図４】
2010122741.tif 000006
【図５】
2010122741.tif 000007
【図６】
2010122741.tif 000008
【図７】
2010122741.tif 000009
【図８】
2010122741.tif 000010
【図９】
2010122741.tif 000011
【図１０】
2010122741.tif 000012
【図１１】
2010122741.tif 000013
【図１２】
2010122741.tif 000014
【図１３】
2010122741.tif 000015
【図１４】
2010122741.tif 000016
【図１５】
2010122741.tif 000017
【図１６】
2010122741.tif 000018
【図１７】
2010122741.tif 000019
【図１８】
2010122741.tif 000020
【図１９】
2010122741.tif 000021
【図２０】
2010122741.tif 000022
【図２１】
2010122741.tif 000023
【図２２】
2010122741.tif 000024
【図２３】
2010122741.tif 000025
【図２４】
2010122741.tif 000026