図1は、本発明のデータ処理装置を含んだ半導体装置の概略構成を示すブロック図である。図1(a)は、半導体装置の全体構成を示している。この半導体装置1は、SDRAM(Synchronous Dynamic Random Access Memory)2に接続されており、複数の演算器(以下、PE(Processor Element)と呼ぶ。)を有するデータ処理装置(以下、MX(Matrix Processor)コアとも呼ぶ。)11と、ホストCPU(Central Processing Unit)12と、DMAC(Direct Memory Access Controller)13と、メモリコントローラ14とを含み、これらがバス15を介して接続される。
SDRAM2は、ホストCPU12によって実行されるプログラム、プログラムの実行の際に参照されるデータや、MXコア11によって実行される命令コード、演算データなどを記憶する。メモリコントローラ14は、ホストCPU12およびDMAC13からの要求に応じてSDRAM2に対する命令コードおよびデータの読出し/書込みを行なう。
ホストCPU12は、図示しない内蔵メモリに記憶される命令コードをフェッチして実行したり、メモリコントローラ14を介してSDRAM2から命令コードをフェッチして実行したりすることにより、半導体装置1全体の制御を行なう。
DMAC13は、ホストCPU12からのDMA転送要求に応じて半導体装置1内のDMA転送を制御する。たとえば、DMAC13は、SDRAM2とMXコア11内の命令メモリ25との間のDMA転送を実行する。
図1(b)は、MXコア11の内部構成を示すブロック図である。このMXコア11は、m個のPE21−1〜21−mと、PE21−1〜21−mに対応するmエントリ分のデータレジスタ22−1〜22−mと、I/Oインタフェース23と、コントローラ24とを含む。また、コントローラ24は、命令メモリ25を含む。なお、本発明においては、MXコア11が1024エントリに対応した個数のPEおよびデータレジスタを有する場合について説明するが、PEおよびデータレジスタの個数はこれに限定されるものではない。また、1エントリ分のデータレジスタが左右に512ビット(合計1024ビット)ずつ配置される場合について説明するが、ビット数はこれに限定されるものではない。
データレジスタ22−1〜22−mは、たとえばメディアデータをサンプリングされたデータの配列として記憶する。PE21−1〜21−mのそれぞれは、データレジスタ22−1〜22−mに記憶された配列データの各要素に対して演算を行うことにより並列に処理を行なう。なお、PE21−1〜21−mおよびデータレジスタ22−1〜22−mの動作の詳細は後述の各実施の形態において説明する。
I/Oインタフェース23は、バス15を介してデータの入出力を行なう。I/Oインタフェース23は、バス15を介して演算処理要求を受けると、その演算処理要求をコントローラ24に出力する。また、I/Oインタフェース23は、コントローラ24から演算処理結果を受けると、その演算処理結果をバス15を介して出力する。
コントローラ24は、I/Oインタフェース23から演算処理要求を受けると、命令メモリ25に格納されたマイクロコードに対応する演算を順次PE21−1〜21−mに行なわせ、演算処理要求に対応した演算処理を行なわせる。そして、コントローラ24は、演算処理結果をI/Oインタフェース23に出力する。
図2は、MXコア11による並列演算の一例を示す図である。オペランド(演算データ)aおよびbが左右のデータレジスタに配置されており、コントローラ24によって1024エントリ分のデータが指定されると、PEは左右のデータレジスタからオペランドaおよびbを読み出し(ロード)、演算を行なう。PEは、演算結果cを再度データレジスタに格納する(ストア)。
このロード、演算、およびストアのNbit処理は1サイクルで完了し、オペランドのデータ長分だけ繰り返される。MXコア11は、このSIMD演算を最大1024だけ並列に行なうことにより高い処理性能を実現する。また、MXコア11にはマスキング機能が用意されており、特定のエントリのみで演算を行なうことも可能である。
図3は、MXコア11の問題点を説明するための図である。MXコア11は、時間シリアル処理を空間パラレル処理に変換した処理構造を有している。したがって、空間面積(PE)を有効利用できれば、すなわち、演算時に高い並列度を維持できれば、MXコア11は高い処理性能を実現することができる。しかしながら、アプリケーションや処理内容によっては並列度が低下することがあり、性能低下の原因となっている。以下、この問題を、「並列度低下の問題」と呼ぶ。
図3(a)は、データ群に対してシーケンシャルな処理が必要な場合のPEの稼動状況を示している。このシーケンシャルな処理の一例として、ACO(Ant Colony Optimization)アルゴリズムが挙げられる。ACOアルゴリズムにおいては、Data[k]の演算は、Data[k−1]の演算結果が決定するまで待たされる。したがって、図3(a)に示すように、データ群が2エントリにわたる場合、片方のPEはエントリの演算が行なえないため、MXコア11の並列度が低下する。なお、図3(a)においては、処理の前半のPE稼動状況を示しており、斜線を施した一方のPEが稼動中であり、斜線を施さない他方のPEが非稼動中である。
図3(b)は、1データが複数エントリにわたる場合のPEの稼動状況を示している。このような処理の一例として、RSA(Rivest-Shamir-Adleman method)暗号が挙げられる。図3(b)に示すように、RSA暗号においては、取り扱うデータのサイズが大きいため、1データが2エントリにわたって配置される。PEによる演算は下位ビットから順次行なわれるため、上位ビットの演算は下位ビットの演算終了まで待たされる。そのため、演算の並列度はおおよそ半分になる。
図3(c)は、演算に使用しないエントリが発生する場合のPEの稼動状況を示してる。このような処理の一例として、MP3デコード処理を挙げることができる。図3(c)に示すように、MP3デコーダにおいては、グラニュールと呼ばれる576データが並列処理の対象となる。MXコア11の全てのPE(1024個)のうち、約半分(576個)だけが稼動し、他のPEが稼動しないため、MXコア11の並列度は低下する。
このように、演算データが複数エントリにまたがり、かつ互いのエントリ間の演算データに依存関係がある場合や、演算対象のデータ数が1024未満の場合には、MXコア11の並列度が低下してしまうため、処理性能が低下することになる。
一般に、アプリケーションは幾つかの処理によって構成され、それぞれの処理には適した演算粒度が存在し、そのような適した演算粒度で処理を行うことにより、効率のよい実装と高い性能とを実現できる。しかしながら、アプリケーション毎に処理の割合が異なるため、演算粒度を固定した処理機構では面積的に、および速度的に効率のよい実装を行なうことはできない。以下、この問題を、「演算粒度依存の問題」と呼ぶ。
図4は、図3に示すMXコア11の問題点に対する代替技術を示す図である。図4(a)は、PEの演算粒度をNbitから2Nbitに粗くした場合を示している。この場合、1PEのサイズが大きくなるため、MXコア11としての回路面積も大きくなる。そのため、MXコア11の動作周波数を高くすることができないといった問題が発生する。
また、演算粒度が固定されているため、上述の「演算粒度依存の問題」を解決することはできない。
図4(b)は、データレジスタのサイズを拡張した場合を示している。この場合、MXコア11としての回路面積も大きくなってしまう。また、データレジスタとPEとの間の配線長が長くなってしまい、配線遅延が増大することになる。この配線遅延の増大は、MXコア11の動作周波数の低下を招くことになる。
また、データレジスタを拡張して配線するため、その配線上でデータレジスタとPEとの間の高速データ転送を行なうためには、センスアンプおよびライトドライバにおける消費電力が増大してしまう。また、演算粒度が固定されているため、上述の「演算粒度依存の問題」を解決することはできない。
本発明は、演算器(PE)の演算粒度を変更可能とするものであり、隣接する複数のPEをカスケード接続することによって粒度変更を実現する。図5は、本発明の基本原理を説明するための図である。図5(a)は、演算粒度がNbitの場合のPEを示しており、上述の「並列度低下の問題」が発生していることを示している。
図5(b)は、演算粒度を変更することにより、k個のNbitのPEを1個のk・NbitのPEとした場合を示している。図5(b)に示すように、PEの演算粒度を変更することにより全てのPEを稼動状態とすることができる。
逆に、演算粒度を変更することにより、1個のk・NbitのPEをk個のNbitのPEとすることも可能である。
図6は、本発明による「並列度低下の問題」の解決の一例を説明するための図である。図6(a)は、演算粒度がNbitの場合のPEにおける並列度を示している。図6(a)においては、Data1の上位ビットと下位ビットとが異なるPEで演算されるため、Data1の下位ビットの演算が終了するまで上位ビットの演算が待たされてしまい、並列度が50%となる。
図6(b)は、演算粒度が2Nbitの場合のPEにおける並列度を示している。図6(b)において、Data1の上位ビットと下位ビットとが1つのPEで演算されるため、全てのPEが並列に演算を行なうことができ、並列度が100%となる。
図6(c)は、演算粒度が3Nbitの場合のPEにおける並列度を示している。図6(c)において、Data1の上位ビットおよび下位ビットと、Data2の下位ビットとが1つのPEで演算され、Data2の上位ビットと、Data3の上位ビットおよび下位ビットとが異なるPEで演算されるため、Data2の下位ビットの演算が終了するまで上位ビットの演算が待たされてしまい、並列度が75%となる。
図6(a)〜図6(c)に示すように、演算粒度がNbitであり、1データが2エントリにまたがる場合には並列度が50%となるが、演算粒度を2Nbitとすることにより並列度が100%になり、2.0倍の性能改善となる。また、演算粒度を3Nbitとすることにより並列度が75%となり、1.5倍の性能改善となる。
図7は、本発明による「並列度低下の問題」の解決の他の一例を説明するための図である。図7(a)は、演算粒度がNbitの場合のPEにおける並列度を示している。図7(a)においては、Data1の上位ビットが第1のPEで演算され、Data1の中位ビットが第2のPEで演算され、Data1の下位ビットが第3のPEで演算されるため、第3のPEによる演算が終了するまで第2のPEによる演算が待たされ、第2のPEによる演算が終了するまで第1のPEによる演算が待たされてしまい、並列度が30%となる。
図7(b)は、演算粒度が2Nbitの場合のPEにおける並列度を示している。図7(b)において、Data1の中位ビットと下位ビットとが第1のPEで演算され、Data1の上位ビットとData2の下位ビットとが第2のPEで演算され、Data2の上位ビットと中位ビットとが第3のPEで演算されるため、第1のPEによるData1の中位ビットの演算が終了するまで第2のPEによるData1の上位ビットの演算が待たされ、第2のPEによるData2の下位ビットの演算が終了するまで第3のPEによるData2の中位ビットの演算が待たされてしまい、並列度が50%となる。
図7(c)は、演算粒度が3Nbitの場合のPEにおける並列度を示している。図7(c)において、Data1の上位ビット、中位ビットおよび下位ビットが1つのPEで演算され、Data2の上位ビット、中位ビットおよび下位ビットが異なるPEで演算されるため、全てのPEが並列に演算を行なうことができ、並列度が100%となる。
図7(a)〜図7(c)に示すように、演算粒度がNbitであり、1データが3エントリにまたがる場合には並列度が30%となるが、演算粒度を2Nbitとすることにより並列度が50%になり、1.7倍の性能改善となる。また、演算粒度を3Nbitとすることにより並列度が100%となり、3.0倍の性能改善となる。
このように、PEの演算粒度を適切な演算粒度とすることにより、「並列度低下の問題」を解決することができる。また、処理内容に応じてPEの演算粒度を変更することにより、上述の「演算粒度依存の問題」も解決することができる。
図8は、PEの基本的構成を示すブロック図である。このPE21は、並列に設けられる1ビットのレジスタ(XレジスタおよびXHレジスタ)31と、2ビット演算回路32と、キャリーレジスタ(Cレジスタ)33とを含む。このPE21による演算は、以下のように行われる。
まず、左側のデータレジスタ22から、XレジスタおよびXHレジスタ31に2ビットの演算データが読み出される(Read)。次に、演算回路32は、XレジスタおよびXHレジスタ31の値(IN1)、右側のデータレジスタ22の2ビットの値(IN2)、およびキャリーレジスタ33の1ビットの値(CIN)を演算する(Modify)。
最後に、演算回路32は、演算結果(OUT)を右側のデータレジスタ22に書き込み、桁上げ(COUT)をキャリーレジスタ33に格納する(Write)。これらは1サイクルで実行され、演算データのデータ長分だけ演算が繰り返される。なお、キャリーレジスタ33の初期値は“0”となっている。
(第1の実施の形態)
本発明におけるデータ処理装置においては、複数エントリのPE間で桁上げ伝播をするためにカスケード接続を行なう。しかしながら、k個のPEをカスケード接続すれば、粗粒度化後のPEにおいてk倍の組合わせ遅延が発生することになる。これでは、MXコア11の動作周波数を下げなければならない。
本発明の第1の実施の形態においては、演算粒度の変更をMXコア11の動作周波数を下げずに行なうために、粗粒度化するエントリ間の動作タイミングをずらすことにより、桁上げ遅延が動作周波数に与える影響を回避するものである。
図9は、本発明の第1の実施の形態におけるMXコア11の内部構成の一例を示すブロック図である。本実施の形態におけるMXコア11は、PE間の桁上げ伝播配線の経路を切替えることにより、演算粒度を2ビットから4ビット、または4ビットから2ビットに切替えることを可能にしたものである。以下、粒度変更後の演算として加算命令の場合について説明するが、これは減算および乗算は加算命令から構成されているためであり、加算命令で粒度変更後の演算が可能であれば減算および乗算も実現可能だからである。
PE(2n)21−1は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ(Cレジスタ)33と、OR回路34と、スイッチ回路35および36とを含む。また、PE(2n+1)21−2は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ33と、OR回路37と、スイッチ回路38および39とを含む。
演算粒度が2ビットの場合にはselect信号に“0”が出力され、インバータ40は“1”を出力する。このとき、スイッチ回路35が導通状態となり、演算回路32からの桁上げ(COUT)がキャリーレジスタ33に入力される。そして、キャリーレジスタ33の値がOR回路34を介して演算回路32に入力される。一方、スイッチ回路36は非導通状態となる。
また、インバータ41は“1”を出力し、スイッチ回路39が導通状態となり、演算回路32からの桁上げ(COUT)がキャリーレジスタ33に入力される。そして、キャリーレジスタ33の値がOR回路37を介して演算回路32に入力される。一方、スイッチ回路38は非導通状態となる。したがって、PE(2n)21−1およびPE(2n+1)21−2は、それぞれ2ビットPEとして動作することになる。
演算粒度が4ビットの場合にはselect信号に“1”が出力され、インバータ40は“0”を出力する。このとき、スイッチ回路35が非導通状態となり、OR回路34はPE(2n+1)21−2内の演算回路32からの桁上げ(COUT)を演算回路32に出力する。一方、スイッチ回路36は導通状態となり、PE(2n)21−1内の演算回路32からの桁上げ(COUT)がPE(2n+1)21−2内のOR回路37を介して演算回路32に入力される。
また、スイッチ回路38が導通状態となり、PE(2n+1)21−2内の演算回路32からの桁上げ(COUT)がPE(2n)21−1内のOR回路34を介して演算回路32に入力される。一方、インバータ41は“0”を出力し、スイッチ回路39は非導通状態となり、PE(2n)21−1内の演算回路32からの桁上げ(COUT)がOR回路37を介して演算回路32に入力される。したがって、PE(2n)21−1およびPE(2n+1)21−2は、4ビットPEとして動作することになる。なお、演算粒度が4ビットの場合には、PE(2n)21−1のトリガと、PE(2n+1)21−2のトリガとが半サイクルずらされる。
また、図9に示すように、偶数エントリと奇数エントリとの間でデータが2ビット単位で交互に配置されることになる。
図10は、本発明の第1の実施の形態におけるMXコア11の内部構成の他の一例を示すブロック図である。PE(2n)21−1は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ33と、セレクタ42とを含む。また、PE(2n+1)21−2は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ33と、セレクタ43とを含む。
図10に示すPE(2n)21−1およびPE(2n+1)21−2の内部構成は、図9に示す内部構成と比較して、OR回路、スイッチ回路およびインバータをセレクタに置換したものであり、基本的な動作は同じである。したがって、その動作の詳細な説明は繰り返さない。
図11は、本発明の第1の実施の形態におけるMXコア11の演算粒度を4ビットとしたときの動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、クロック信号の立ち上がりで左側のデータレジスタ22−1から演算データa0およびa1が読み出され、右側のデータレジスタ22−1から演算データb0およびb1が読み出される(Read)。
次に、PE(2n)21−1は、下位2ビットの加算を行ない(Modify)、キャリーC2をPE(2n+1)21−2に出力する。そして、演算結果S0およびS1を右側のデータレジスタ22−1に書き込む(Write)。
一方、PE(2n+1)21−2は、半サイクル遅れて動作を開始し、クロック信号の立ち下がりで左側のデータレジスタ22−2から演算データa2およびa3が読み出され、右側のデータレジスタ22−2から演算データb2およびb3が読み出される(Read)。
次に、PE(2n+1)21−2は、演算データa2、a3、b2、b3およびキャリーC2を用いて上位2ビットの加算を行ない(Modify)、キャリーC4をPE(2n)21−1に出力する。そして、演算結果S2およびS3を右側のデータレジスタ22−2に書き込む(Write)。
2番目のサイクルにおいて、PE(2n)21−1は、PE(2n+1)21−2から出力されるキャリーを用いて下位2ビットの演算を行ない、以降同様の動作を繰り返す。また、PE(2n+1)21−2は、2番目のサイクル以降も同様の動作を繰り返す。この4ビットの加算は、データ長だけ繰り返される。
以上説明したように、本実施の形態におけるデータ処理装置によれば、PE(2n)21−1およびPE(2n+1)21−2は、演算粒度を2ビットにする場合には、演算回路32の桁上げ出力(COUT)を自身の桁上げ入力(CIN)に接続し、演算粒度を4ビットにする場合には、演算回路32の桁上げ出力(COUT)を他方の演算回路32の桁上げ入力(CIN)に接続するようにしたので、演算粒度を変更可能なデータ処理装置を提供することが可能となった。すなわち、「並列度低下の問題」および「演算粒度依存の問題」を解決することが可能となった。
また、演算粒度を4ビットにする場合、PE(2n)21−1のトリガとPE(2n+1)21−2のトリガとを半サイクルずらすようにし、エントリ間で発生する演算開始のずれの時間を桁上げ伝播のための時間として確保するようにしたので、所要サイクル数の増加を抑えつつ、PEの粗粒度化によって発生する桁上げ伝播遅延の問題を解決することが可能となった。また、これにより、後述の第2〜第4の実施の形態におけるデータ処理装置と比較して、追加リソースを抑えることができる。
また、粗粒度化した場合であっても、2Nbitの演算に必要なエントリ数は2エントリであり、後述の第2および第4の実施の形態におけるデータ処理装置と比較して、より少ないエントリ数で粒度変更が行なえ、実装効率を高めることが可能である。
また、図4(a)に示す代替技術のように、1PEのサイズを大きくする必要がないため、同じ並列度(エントリ数)の場合には、代替技術と比較してMXコア11の回路面積を小さく抑えることができ、MXコア11の動作周波数が低下するのを防止することが可能となった。
また、図4(b)に示す代替技術のように、データレジスタを拡張する必要がないため、代替技術と比較してMXコア11の回路面積を小さく抑えることができ、消費電力の増大を防止することが可能となった。
(第2の実施の形態)
本発明の第1の実施の形態におけるMXコア11は、粗粒度化するエントリ間の動作タイミングをずらすことにより桁上げ遅延が動作周波数に与える影響を回避するものであった。本発明の第2の実施の形態におけるMXコア11は、演算データを上位桁と下位桁との2ブロックに分け、それぞれのブロックの演算を並列に行なう。ただし、上位桁のブロックについては、下位桁のブロックからの桁上げがある場合と桁上げがない場合との2種類の演算をしておき、下位桁のブロックからの桁上げが確定した時点で上位桁のブロックを選択するものである。したがって、本実施の形態におけるMXコア11は、PE間の桁上げ伝播遅延の影響を受けることはない。
図12は、本発明の第2の実施の形態におけるMXコア11の演算の流れを模式的に示す図である。図12においては、連続する3つのエントリのPEを、PE(3n)、PE(3n+1)、PE(3n+2)とし、8ビットの加算(a+b=S)の場合についての演算の流れが示されている。なお、n=0,1,2,…とする。
また、PE(3n)、PE(3n+1)およびPE(3n+2)は、図8に示すPEと同等の構成を有している。PE(3n)は、下位桁のブロックの演算を行なう。PE(3n+1)は、下位桁のブロックからの桁上げがない場合における上位桁のブロックの演算を行なうため、図8に示すキャリーレジスタ33の初期値として“0”が設定される。また、PE(3n+2)は、下位桁のブロックからの桁上げがある場合における上位桁のブロックの演算を行なうため、図8に示すキャリーレジスタ33の初期値として“1”が設定される。
図12(a)は、各エントリの初期配置を示している。PE(3n)に対応するエントリ3nには、演算データa[0]〜a[3]およびb[0]〜b[3]が配置される。また、PE(3n+1)に対応するエントリ3n+1には、演算データa[4]〜a[7]およびb[4]〜b[7]が配置される。なお、PE(3n+2)に対応するエントリ3n+2には、演算データは配置されない。
図12(b)に示すように、PE(3n)は、下位桁ブロックのうちa[0]およびa[1]と、b[0]およびb[1]との加算を行ない、加算結果S[0]およびS[1]をエントリ3nに格納する。これと並行して、PE(3n+1)は、下位桁ブロックからの桁上げがない場合を想定し、上位桁ブロックのうちa[4]およびa[5]と、b[4]およびb[5]との加算を行ない、加算結果S[4]およびS[5]をエントリ3n+1に格納する。また、PE(3n+2)は、下位桁ブロックからの桁上げがある場合を想定し、上位桁ブロックのうちa[4]およびa[5]と、b[4]およびb[5]との加算を行ない、加算結果S’[4]およびS’[5]をエントリ3n+2に格納する。
図12(c)に示すように、次に、PE(3n)は、下位桁ブロックのうちa[2]およびa[3]と、b[2]およびb[3]との加算を行ない、加算結果S[2]およびS[3]をエントリ3nに格納する。これと並行して、PE(3n+1)は、上位桁ブロックのうちa[6]およびa[7]と、b[6]およびb[7]との加算を行ない、加算結果S[6]およびS[7]をエントリ3n+1に格納する。また、PE(3n+2)は、上位桁ブロックのうちa[6]およびa[7]と、b[6]およびb[7]との加算を行ない、加算結果S’[6]およびS’[7]をエントリ3n+2に格納する。
図12(d)に示すように、最後に、PE(3n)は、下位桁ブロックの加算によって発生する桁上げC4を、エントリ3nのテンポラリ領域に保存する。
図13は、演算結果Sを次の演算で使用する場合のデータ読み出し方法を説明するための図である。PE(3n+1)による演算結果と、PE(3n+2)による演算結果とのどちらが有効であるかは、下位桁ブロックの演算後に発生する桁上げC4によって決定される。
図13(a)は、下位桁ブロックからの桁上げがない場合のデータ読み出しを示している。PE(3n)は、エントリ3nに格納される演算結果S[0]〜S[3]を読み出し、演算を行なう。また、PE(3n+1)およびPE(3n+2)は、エントリ3n+1に格納される演算結果S[4]〜S[7]を読み出し、演算を行なう。
図13(b)は、下位桁ブロックからの桁上げがある場合のデータ読み出しを示している。PE(3n)は、エントリ3nに格納される演算結果S[0]〜S[3]を読み出し、演算を行なう。また、PE(3n+1)およびPE(3n+2)は、エントリ3n+2に格納される演算結果S’[4]〜S’[7]を読み出し、演算を行なう。
図14は、本発明の第2の実施の形態におけるMXコア11の演算動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、クロック信号の立ち上がりでPE(3n)はエントリ3nから前回の演算結果の桁上げC4を読み出し、PE(3n+1)およびPE(3n+2)に転送する。
2番目のサイクルにおいて、PE(3n)は、エントリ3nから演算データa0およびa1と、演算データb0およびb1とを読み出し(Read)、2ビットの加算を行ない(Modify)、演算結果S0およびS1をエントリ3nに書き込む(Write)。これと並行して、PE(3n+1)は、前回の桁上げC4に応じて、エントリ3n+1または3n+2から演算データa4およびa5と、演算データb4およびb5とを読み出し、2ビットの加算を行ない、演算結果S4およびS5をエントリ3n+1に書き込む。また、PE(3n+2)は、前回の桁上げC4に応じて、エントリ3n+1または3n+2から演算データa4およびa5と、演算データb4およびb5とを読み出し、2ビットの加算を行ない、演算結果S’4およびS’5をエントリ3n+2に書き込む。
3番目のサイクルにおいて、PE(3n)〜PE(3n+2)は、2番目のサイクルと同様の動作を行ない、演算結果S2およびS3がエントリ3nに書き込まれ、演算結果S6およびS7がエントリ3n+1に書き込まれ、演算結果S’6およびS’7がエントリ3n+2に書き込まれる。
最後のサイクルにおいて、PE(3n)は、下位桁ブロックの桁上げC4をエントリ3nに保存する。
図15は、本発明の第2の実施の形態におけるMXコア11の内部構成の一例を示す図である。本実施の形態におけるMXコア11は、基本的には、図8に示すMXコアの構成と同様である。図15においては、PEの内部構成のうちXレジスタのみを記載しており、さらにPE間データ通信を行なうために設けられたエントリコミュニケータ(ECM)回路の一部、および新たに追加された追加回路部が記載されている。
図13を用いて説明したように、PE(3n+1)およびPE(3n+2)は下位桁ブロックの桁上げに依存したデータ読み出しが必要となる。そのため、PE間データ通信を行なうために設けられたECM回路のセレクタ51〜54を利用する。
図15において、スイッチ回路55,59および60と、インバータ56〜58、102とが新たに追加された追加回路部である。演算粒度2ビットが選択された場合(select信号が“0”の場合)には、スイッチ回路55がオフとなって非導通状態となり、追加回路部が無効となる。したがって、図8に示すMXコア11と同様の動作を行なう。
演算粒度4ビットが選択された場合(select信号が“1”の場合)には、スイッチ回路55がオンとなって導通状態となり、追加回路部が有効となる。このとき、下位桁ブロックからの桁上げC4が“0”であれば、インバータ57が“1”を出力し、インバータ58が“1”を出力する。インバータ102が“1”を出力し、スイッチ回路59が導通状態となり、スイッチ回路60が非導通状態となる。その結果、セレクタ53は、エントリ3n+1に格納される演算データS[4]〜S[7]を選択し、PE(3n+2)内のXレジスタ31−3に出力する。
また、下位桁ブロックからの桁上げC4が“1”であれば、インバータ56が“0”を出力する。インバータ102が“0”を出力し、スイッチ回路59が非導通状態となり、スイッチ回路60が導通状態となる。その結果、セレクタ52は、エントリ3n+2に格納される演算データS’[4]〜S’[7]を選択し、PE(3n+1)内のXレジスタ31−2に出力する。
以上説明したように、本実施の形態におけるデータ処理装置によれば、上位桁ブロックの演算を行なう際、下位桁ブロックからの桁上げがある場合と桁上げがない場合との2種類の演算をしておき、下位桁ブロックからの桁上げが確定した時点で上位桁のブロックを選択するようにしたので、演算粒度を変更可能なデータ処理装置を提供することが可能となった。すなわち、「並列度低下の問題」および「演算粒度依存の問題」を解決することが可能となった。
また、第1の実施の形態におけるデータ処理装置のように、演算粒度が4ビットのときに偶数エントリと奇数エントリとの間でデータを2ビット単位で交互に配置する必要がなく、演算データの下位桁ブロックを偶数エントリに配置し、上位桁ブロックを奇数エントリに配置するだけで演算が行なえるため、複雑なデータの並べ替えが不要となった。
また、第1の実施の形態におけるデータ処理装置のように桁上げ伝播遅延の問題を解決するためにエントリ間の動作タイミングをずらす必要がないため、タイミング設計を容易に行なうことが可能となった。
また、上位桁ブロック用の演算ユニットとして新たにPEを割り当てるだけで粗粒度化が行なえるため、拡張性が高いデータ処理装置を提供することが可能となった。
(第3の実施の形態)
本発明の第3の実施の形態におけるデータ処理装置は、加算結果に現れる規則性を利用したユニットをPEに設けることにより、桁上げ伝播を待つことなく複数のPEで並列演算を行なうものである。
図16は、4ビット加算の一例を示す図である。ここで、a0〜a3の4ビットおよびb0〜b3の4ビットのうち、下位2ビットを下位桁ブロック、上位2ビットを上位桁ブロックと呼ぶことにする。このとき、下位桁ブロックから上位桁ブロックへ伝播する桁上げC2を用いることにより、桁上げなし(C2=0)として計算した上位桁ブロックの解(S2,S3,C4)から、桁上げあり(C2=1)のときの解(S2’,S3’,C4’)を生成することができる。
図17は、加算結果に現れる規則性を説明するための図である。下位桁ブロックからの桁上げなし(C2=0)として計算した上位桁ブロックの解をS2,S3,C4とすると、下位桁ブロックからの桁上げあり(C2=1)の時のS2’はS2を反転した値となる。また、下位桁ブロックからの桁上げがあり(C2=1)、S2=1の時のS3’はS3を反転した値となる。また、下位桁ブロックからの桁上げがあり(C2=1)、S2=1であり、かつS3=1の時のC4’はC4を反転した値となる。これら以外の条件の時のS2’,S3’およびC4’は、S2,S3およびC4と同じ値となる。
図18は、図17に示す加算結果に現れる規則性に基づいて上位桁ブロックの演算を行なう回路構成の一例、およびその動作を説明するためのタイミングチャートである。図18(a)に示すように、2ビット加算器61は、下位桁ブロックのa0およびa1と、b0およびb1との加算を行ない、桁上げC2をユニット63に出力する。
また、2ビット加算器62は、下位桁ブロックからの桁上げがないときの、上位桁ブロックのa2およびa3と、b2およびb3との加算を行ない、演算結果S2およびS3と、桁上げC4とをユニット63に出力する。
ユニット63は、2ビット加算器61から出力される桁上げC2に基づいて、下位桁ブロックからの桁上げC2を考慮した上位桁ブロックの解を生成して出力すると共に、下位桁ブロックからの桁上げC2を考慮した上位桁ブロックの桁上げC4をキャリーレジスタ33に書き込む。
図18(b)は、本発明の第3の実施の形態におけるMXコア11の動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、PE(2n)は、演算データa0およびa1と演算データb0およびb1とをデータレジスタから読み出す(Read)。次に、PE(2n)は、下位2ビットの加算を行ない、桁上げC2をPE(2n+1)側に出力する(Modify)。そして、PE(2n)は、演算結果S0およびS1をデータレジスタに書き込む(Write)。
一方、同じタイミングで、PE(2n+1)は、演算データa2およびa3と演算データb2およびb3とをデータレジスタから読み出す(Read)。次に、PE(2n+1)は、上位2ビットの加算を行なって桁上げC2を考慮しない解S2およびS3をユニット63に出力する。このとき、ユニット63は、PE(2n)から出力される桁上げC2に基づいて、桁上げC2を考慮した解S2およびS3を生成すると共に、桁上げC2を考慮した桁上げC4をPE(2n)側に出力する(Modify)。そして、PE(2n+1)は、演算結果S2およびS3をデータレジスタに書き込む(Write)。
2番目のサイクルにおいて、PE(2n)は、ユニット63から出力される桁上げC4を用いて下位2ビットの演算を行ない、以降同様の動作を繰り返す。また、PE(2n+1)は、2番目のサイクル以降も同様の動作を繰り返す。この4ビットの加算は、データ長だけ繰り返される。
図19は、本発明の第3の実施の形態におけるMXコア11の内部構成の一例を示すブロック図である。PE(2n)21−1は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ(Cレジスタ)33と、セレクタ64とを含む。また、PE(2n+1)21−2は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ33と、スイッチ回路67とを含む。
また、MXコア11はさらに、スイッチ回路65と、インバータ66,69,73および74と、セレクタ68,72および75と、AND回路70および71とを含む。これらの回路が、上述のユニット63に相当する。
演算粒度が2ビットの場合にはselect信号に“0”が出力され、スイッチ回路65が非導通状態となる。このとき、セレクタ64は、PE(2n)21−1内の演算回路32からの桁上げ(COUT)を選択してキャリーレジスタ33に出力する。
また、インバータ66は“1”を出力し、スイッチ回路67が導通状態となり、PE(2n+1)21−2内の演算回路32からの桁上げ(COUT)がキャリーレジスタ33に入力される。また、セレクタ72は、演算回路32の演算結果の上位ビット(OUT2)を選択してデータレジスタ22−2に出力する。また、セレクタ75は、演算回路32の演算結果の下位ビット(OUT1)を選択してデータレジスタ22−2に出力する。したがって、PE(2n)21−1およびPE(2n+1)21−2は、それぞれ2ビットPEとして動作することになる。
演算粒度が4ビットの場合にはselect信号に“1”が出力され、スイッチ回路65が導通状態となる。このとき、セレクタ64は、セレクタ68から出力されるPE(2n)21−1からの桁上げを考慮したPE(2n+1)21−2の桁上げを選択してキャリーレジスタ33に出力する。
また、インバータ66は“0”を出力し、スイッチ回路67が非導通状態となり、キャリーレジスタ33の出力が“0”に固定される。また、セレクタ75は、PE(2n)21−1からの桁上げが“0”のときに演算回路32の演算結果の下位ビット(OUT1)を選択してデータレジスタ22−2に出力し、桁上げが“1”のときにインバータ74から出力される演算結果の下位ビット(OUT1)を反転した値を選択してデータレジスタ22−2に出力する。
また、セレクタ72は、PE(2n)21−1からの桁上げが“1”であり、かつ演算結果の下位ビット(OUT1)が“1”のとき(AND回路70が“1”を出力するとき)に、インバータ73から出力される演算回路32の演算結果の上位ビット(OUT2)を反転した値を選択してデータレジスタ22−2に出力し、それ以外にとき(AND回路70が“0”を出力するとき)に、演算回路32の演算結果の上位ビット(OUT2)をそのままデータレジスタ22−2に出力する。
また、セレクタ68は、PE(2n)21−1からの桁上げが“1”であり、かつ演算結果の下位ビット(OUT1)および上位ビット(OUT2)が共に“1”のとき(AND回路71が“1”を出力するとき)に、インバータ69から出力される演算回路32の桁上げ(COUT)を反転した値を選択してPE(2n)21−1に出力し、それ以外にとき(AND回路71が“0”を出力するとき)に、演算回路32の桁上げ(COUT)をそのままPE(2n+1)21−1に出力する。
図20は、本発明の第3の実施の形態におけるMXコア11の内部構成の他の一例を示すブロック図である。PE(2n)21−1は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ(Cレジスタ)33と、セレクタ64とを含む。また、PE(2n+1)21−2は、XレジスタおよびXHレジスタ31と、2ビット演算回路32と、キャリーレジスタ33と、スイッチ回路67とを含む。
また、MXコア11はさらに、スイッチ回路65と、インバータ66と、AND回路70および71と、論理和(OR)回路76と、排他的論理和(EX−OR)回路77および78とを含む。これらの回路が、上述のユニット63に相当する。
図20に示すMXコア11の内部構成は、図19に示す内部構成と比較して、インバータおよびセレクタをEX−OR回路またはOR回路に置換したものであり、基本的な動作は同じである。したがって、その動作の詳細な説明は繰り返さない。
以上説明したように、本実施の形態におけるデータ処理装置によれば、演算粒度を2ビットにする場合には、演算回路32の桁上げ出力(COUT)を自身の桁上げ入力(CIN)に接続し、演算粒度を4ビットにする場合には、下位桁ブロックからの桁上げがないときの上位桁ブロックの演算をしておき、ユニット63が下位桁ブロックからの桁上げに応じて桁上げを考慮した上位桁ブロックの解を生成するようにしたので、演算粒度を変更可能なデータ処理装置を提供することが可能となった。すなわち、「並列度低下の問題」および「演算粒度依存の問題」を解決することが可能となった。
また、ユニット63を用いることにより、桁上げ先見加算器と同様の機能を、より少ない回路リソースで実現することが可能となった。
また、所要サイクル数の増加を抑えつつ、PEの粗粒度化によって発生する桁上げ伝播遅延の問題を解決することが可能となった。
また、粗粒度化した場合であっても、2Nbitの演算に必要なエントリ数は2エントリであり、第2および第4の実施の形態におけるデータ処理装置と比較して、より少ないエントリ数で粒度変更が行なえ、実装効率を高めることが可能である。
(第4の実施の形態)
本発明の第2の実施の形態におけるMXコア11は、演算データを上位桁と下位桁との2ブロックに分け、それぞれのブロックの演算を並列に行なうものであった。本発明の第4の実施の形態におけるMXコア11は、演算データを上位桁、中位桁および下位桁の3ブロックに分け、それぞれのブロックの演算を並列に行なう。ただし、中位桁のブロックについては、下位桁のブロックからの桁上げがある場合と桁上げがない場合との2種類の演算をしておき、下位桁のブロックからの桁上げが確定した時点で中位桁のブロックを選択する。同様に、上位桁のブロックについては、中位桁のブロックからの桁上げがある場合と桁上げがない場合との2種類の演算をしておき、中位桁のブロックからの桁上げが確定した時点で上位桁のブロックを選択するものである。したがって、本実施の形態におけるMXコア11は、第2の実施の形態におけるMXコア11と同様に、PE間の桁上げ伝播遅延の影響を受けることはない。
図21は、本発明の第4の実施の形態におけるMXコア11の演算の流れを模式的に示す図である。図21においては、連続する5つのエントリのPEを、PE(5n)、PE(5n+1)、PE(5n+2)、PE(5n+3)およびPE(5n+4)とし、12ビットの加算(a+b=S)の場合についての演算の流れが示されている。なお、n=0,1,2,…とする。
また、PE(5n)、PE(5n+1)、PE(5n+2)、PE(5n+3)およびPE(5n+4)は、図8に示すPEと同等の構成を有している。PE(5n)は、下位桁のブロックの演算を行なう。PE(5n+1)は、下位桁のブロックからの桁上げがない場合における中位桁のブロックの演算を行なうため、図8に示すキャリーレジスタ33の初期値として“0”が設定される。また、PE(5n+2)は、下位桁のブロックからの桁上げがある場合における中位桁のブロックの演算を行なうため、図8に示すキャリーレジスタ33の初期値として“1”が設定される。
同様に、PE(5n+3)は、中位桁のブロックからの桁上げがない場合における上位桁のブロックの演算を行なうため、図8に示すキャリーレジスタ33の初期値として“0”が設定される。また、PE(5n+4)は、中位桁のブロックからの桁上げがある場合における上位桁のブロックの演算を行なうため、図8に示すキャリーレジスタ33の初期値として“1”が設定される。
図21(a)は、各エントリの初期配置を示している。PE(5n)に対応するエントリには、演算データa[0]〜a[3]およびb[0]〜b[3]が配置される。また、PE(5n+1)に対応するエントリには、演算データa[4]〜a[7]およびb[4]〜b[7]が配置される。また、PE(5n+3)に対応するエントリには、演算データa[8]〜a[11]およびb[8]〜b[11]が配置される。なお、PE(5n+2)およびPE(5n+4)に対応するエントリには、演算データは配置されない。
図21(b)に示すように、PE(5n)は、下位桁ブロックのうちa[0]およびa[1]と、b[0]およびb[1]との加算を行ない、加算結果S[0]およびS[1]をエントリ5nに格納する。これと並行して、PE(5n+1)は、下位桁ブロックからの桁上げがない場合を想定し、中位桁ブロックのうちa[4]およびa[5]と、b[4]およびb[5]との加算を行ない、加算結果S[4]およびS[5]をエントリ5n+1に格納する。また、PE(5n+3)は、中位桁ブロックからの桁上げがない場合を想定し、上位桁ブロックのうちa[8]およびa[9]と、b[8]およびb[9]との加算を行ない、加算結果S[8]およびS[9]をエントリ5n+3に格納する。
また、PE(5n+2)は、下位桁ブロックからの桁上げがある場合を想定し、中位桁ブロックのうちa[4]およびa[5]と、b[4]およびb[5]との加算を行ない、加算結果S’[4]およびS’[5]をエントリ5n+2に格納する。また、PE(5n+4)は、中位桁ブロックからの桁上げがある場合を想定し、上位桁ブロックのうちa[8]およびa[9]と、b[8]およびb[9]との加算を行ない、加算結果S’[8]およびS’[9]をエントリ5n+4に格納する。
図21(c)に示すように、次に、PE(5n)は、下位桁ブロックのうちa[2]およびa[3]と、b[2]およびb[3]との加算を行ない、加算結果S[2]およびS[3]をエントリ5nに格納する。これと並行して、PE(3n+1)は、中位桁ブロックのうちa[6]およびa[7]と、b[6]およびb[7]との加算を行ない、加算結果S[6]およびS[7]をエントリ5n+1に格納する。PE(5n+3)は、上位桁ブロックのうちa[10]およびa[11]と、b[10]およびb[11]との加算を行ない、加算結果S[10]およびS[11]をエントリ5n+3に格納する。
また、PE(5n+2)は、中位桁ブロックのうちa[6]およびa[7]と、b[6]およびb[7]との加算を行ない、加算結果S’[6]およびS’[7]をエントリ5n+2に格納する。また、PE(5n+4)は、上位桁ブロックのうちa[10]およびa[11]と、b[10]およびb[11]との加算を行ない、加算結果S’[10]およびS’[11]をエントリ5n+4に格納する。
図21(d)に示すように、最後に、PE(5n)は、下位桁ブロックの加算によって発生する桁上げC(5n,4)を、エントリ5nのテンポラリ領域に保存する。また、PE(5n+1)は、中位桁ブロックの加算(下位桁ブロックからの桁上げがない場合)によって発生する桁上げC(5n+1,4)を、エントリ5n+1のテンポラリ領域に保存する。また、PE(5n+2)は、中位桁ブロックの加算(下位桁ブロックからの桁上げがある場合)によって発生する桁上げC(5n+2,4)を、エントリ5n+2のテンポラリ領域に保存する。
図22は、演算結果Sを次の演算で使用する場合のデータ読み出し方法を説明するための図である。PE(5n+1)による演算結果と、PE(5n+2)による演算結果とのどちらが有効であるかは、下位桁ブロックの演算後に発生する桁上げC(5n,4)によって決定される。また、PE(5n+3)による演算結果と、PE(5n+4)による演算結果とのどちらが有効であるかは、中位桁ブロックの演算後に発生する桁上げC(5n+1,4)またはC(5n+2,4)よって決定される。
図22(a)は、下位桁ブロックからの桁上げがなく(C(5n,4)=0)、中位桁ブロックからの桁上げがある(C(5n+1,4)=1)場合のデータ読み出しを示している。PE(5n)は、エントリ5nに格納される演算結果S[0]〜S[3]を読み出し、演算を行なう。また、PE(5n+1)およびPE(5n+2)は、エントリ5n+1に格納される演算結果S[4]〜S[7]を読み出し、演算を行なう。また、PE(5n+3)およびPE(5n+4)は、エントリ5n+4に格納される演算結果S’[8]〜S’[11]を読み出し、演算を行なう。
図22(b)は、下位桁ブロックからの桁上げがあり(C(5n,4)=1)、中位桁ブロックからの桁上げがない(C(5n+2,4)=0)場合のデータ読み出しを示している。PE(5n)は、エントリ5nに格納される演算結果S[0]〜S[3]を読み出し、演算を行なう。また、PE(5n+1)およびPE(5n+2)は、エントリ5n+2に格納される演算結果S’[4]〜S’[7]を読み出し、演算を行なう。また、PE(5n+3)およびPE(5n+4)は、エントリ5n+3に格納される演算結果S[8]〜S[11]を読み出し、演算を行なう。
図23は、本発明の第4の実施の形態におけるMXコア11の演算動作を説明するためのタイミングチャートである。まず、最初のサイクルにおいて、クロック信号の立ち上がりでPE(5n)はエントリ5nから前回の演算結果の桁上げC(5n,4)を読み出し、PE(5n+1)およびPE(5n+2)に転送する。PE(5n+1)およびPE(5n+2)は、桁上げC(5n,4)によっていずれが選択されたかを判断し、選択されたPE(5n+1)またはPE(5n+2)がエントリ5n+1または5n+2から前回の演算結果の桁上げC(5n+1,4)またはC(5n+2,4)を読み出し、PE(5n+3)およびPE(5n+4)に転送する。
2番目のサイクルにおいて、PE(5n)は、エントリ5nから演算データa0およびa1と、演算データb0およびb1とを読み出し(Read)、2ビットの加算を行ない(Modify)、演算結果S0およびS1をエントリ5nに書き込む(Write)。これと並行して、PE(5n+1)は、前回の桁上げC(5n,4)に応じて、エントリ5n+1または5n+2から演算データa4およびa5と、演算データb4およびb5とを読み出し、2ビットの加算を行ない、演算結果S4およびS5をエントリ5n+1に書き込む。また、PE(5n+2)は、前回の桁上げC(5n,4)に応じて、エントリ5n+1または5n+2から演算データa4およびa5と、演算データb4およびb5とを読み出し、2ビットの加算を行ない、演算結果S’4およびS’5をエントリ5n+2に書き込む。
また、PE(5n+3)は、前回の桁上げC(5n+1,4)またはC(5n+2,4)に応じて、エントリ5n+3または5n+4から演算データa8およびa9と、演算データb8およびb9とを読み出し、2ビットの加算を行ない、演算結果S8およびS9をエントリ5n+3に書き込む。また、PE(5n+4)は、前回の桁上げC(5n+1,4)またはC(5n+2,4)に応じて、エントリ5n+3または5n+4から演算データa8およびa9と、演算データb8およびb9とを読み出し、2ビットの加算を行ない、演算結果S’8およびS’9をエントリ5n+4に書き込む。
3番目のサイクルにおいて、PE(5n)〜PE(5n+4)は、2番目のサイクルと同様の動作を行ない、演算結果S2およびS3がエントリ5nに書き込まれ、演算結果S6およびS7がエントリ5n+1に書き込まれ、演算結果S’6およびS’7がエントリ5n+2に書き込まれ、演算結果S10およびS11がエントリ5n+3に書き込まれ、演算結果S’10およびS’11がエントリ5n+4に書き込まれる。
最後のサイクルにおいて、PE(5n)は、下位桁ブロックの桁上げC(5n,4)をエントリ5nに保存し、PE(5n+1)およびPE(5n+2)は、中位桁ブロックの桁上げC(5n+1,4)およびC(5n+2,4)をエントリ5n+1および5n+2に保存する。
図24は、本発明の第4の実施の形態におけるMXコア11の内部構成の一例を示す図である。本実施の形態におけるMXコア11は、基本的には、図8に示すMXコアの構成と同様である。図24においては、PEの内部構成のうちXレジスタのみを記載しており、さらにPE間データ通信を行なうために設けられたエントリコミュニケータ(ECM)回路の一部、および新たに追加された追加回路部が記載されている。
図22を用いて説明したように、PE(5n+1)およびPE(5n+2)は下位桁ブロックの桁上げに依存したデータ読み出しが必要となる。そのため、PE間データ通信を行なうために設けられたECM回路のセレクタ82〜83を利用する。また、PE(5n+3)およびPE(5n+4)は中位桁ブロックの桁上げに依存したデータ読み出しが必要となる。そのため、PE間データ通信を行なうために設けられたECM回路のセレクタ84〜85を利用する。
図24において、スイッチ回路92〜94および98〜101と、インバータ86〜91、103、104と、AND回路95および96と、OR回路97とが新たに追加された追加回路部である。演算粒度2ビットが選択された場合(select信号が“0”の場合)には、スイッチ回路92〜94がオフとなって非導通状態となり、追加回路部が無効となる。したがって、図8に示すMXコア11と同様の動作を行なう。
演算粒度6ビットが選択された場合(select信号が“1”の場合)には、スイッチ回路92〜94がオンとなって導通状態となり、追加回路部が有効となる。このとき、下位桁ブロックからの桁上げC(5n,4)が“0”であれば、インバータ87が“1”を出力し、インバータ88が“1”を出力する。インバータ103が“1”を出力し、スイッチ回路98が導通状態となり、スイッチ回路99が非導通状態となる。その結果、セレクタ83は、エントリ5n+1に格納される演算データS[4]〜S[7]を選択し、PE(5n+2)内のXレジスタ31−3に出力する。
また、OR回路97は、中位桁ブロックからの桁上げC(5n+1,4)を選択して出力する。このとき、桁上げC(5n+1,4)が“0”であれば、インバータ90が“1”を出力し、インバータ91が“1”を出力する。インバータ104が“1”を出力し、スイッチ回路100が導通状態となり、スイッチ回路101が非導通状態となる。その結果、セレクタ85は、エントリ5n+3に格納される演算データS[8]〜S[11]を選択し、PE(5n+4)内のXレジスタ31−5に出力する。
また、桁上げC(5n+1,4)が“1”であれば、インバータ89が“0”を出力する。インバータ104が“0”を出力し、スイッチ回路100が非導通状態となり、スイッチ回路101が導通状態となる。その結果、セレクタ84は、エントリ5n+4に格納される演算データS’[8]〜S’[11]を選択し、PE(5n+3)内のXレジスタ31−4に出力する。
また、下位桁ブロックからの桁上げC(5n,4)が“1”であれば、インバータ86が“0”を出力する。インバータ102が“0”を出力し、スイッチ回路98が非導通状態となり、スイッチ回路99が導通状態となる。その結果、セレクタ82は、エントリ5n+2に格納される演算データS’[4]〜S’[7]を選択し、PE(5n+1)内のXレジスタ31−2に出力する。
また、OR回路97は、中位桁ブロックからの桁上げC(5n+2,4)を選択して出力する。このとき、桁上げC(5n+2,4)が“0”であれば、インバータ90が“1”を出力し、インバータ91が“1”を出力する。インバータ103が“1”を出力し、スイッチ回路100が導通状態となり、スイッチ回路101が非導通状態となる。その結果、セレクタ85は、エントリ5n+3に格納される演算データS[8]〜S[11]を選択し、PE(5n+4)内のXレジスタ31−5に出力する。
また、桁上げC(5n+1,4)が“1”であれば、インバータ89が“0”を出力する。インバータ103が“0”を出力し、スイッチ回路100が非導通状態となり、スイッチ回路101が導通状態となる。その結果、セレクタ84は、エントリ5n+4に格納される演算データS’[8]〜S’[11]を選択し、PE(5n+3)内のXレジスタ31−4に出力する。
以上説明したように、本実施の形態におけるデータ処理装置によれば、中位桁ブロックおよび上位桁ブロックの演算を行なう際、下位桁ブロックおよび中位桁ブロックからの桁上げがある場合と桁上げがない場合との2種類の演算をしておき、下位桁ブロックからの桁上げが確定した時点で中位桁のブロックを選択し、中位桁ブロックからの桁上げが確定した時点で上位桁のブロックを選択するようにしたので、本発明の第2の実施の形態において説明した効果と同様の効果を奏することが可能なった、
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 半導体装置、2 SDRAM、11 MXコア、12 ホストCPU、13 DMAC、14 メモリコントローラ、15 バス、21−1〜21−m PE、22−1〜22−m データレジスタ、23 I/Oインタフェース、24 コントローラ、25 命令メモリ、31 XレジスタおよびXHレジスタ、32 2ビット演算回路、33 キャリーレジスタ、34,37,97 OR回路、35,36,38,39,55,59,60,65,67,92〜94,98〜101 スイッチ回路、40,41,56〜58,66,69,73,74,86〜91 インバータ、42,43,51〜54,64,68,72,75,81〜85 セレクタ、61,62 2ビット加算器、63 ユニット、70,71,95,96 AND回路、76〜78 EX−OR回路。