(57)【特許請求の範囲】
【請求項１】
２ｎ並列（ここで、ｎは自然数）の積和演算が同時に実行可能なＳＩＭＤ積和演算方法であって、
ＳＩＭＤ積和演算で各積和演算回路に割り当てるアキュムレータアドレスの並びを、２m個（ここで、ｍ＝０，…，ｌｏｇ2ｎ）のアキュムレータを一組とし、隣接する２ｐ−１番目と２ｐ番目（ここで、ｐ＝１，…，ｎ）のアキュムレータの組を当該アキュムレータの組の中におけるアキュムレータアドレスの順番は変えずに、該各アキュムレータの組を入れ替えることでＳＩＭＤ積和演算を実行するようにしたことを特徴とするＳＩＭＤ積和演算方法。
【請求項２】
同時に動作可能な２ｎ個（ここで、ｎは自然数）の積和演算ユニットを有するＳＩＳＤ積和演算回路において、
前記積和演算ユニットをＳＩＭＤ積和演算に流用し、該各積和演算ユニットに割り当てられるアキュムレータアドレスの並びを、２m個（ここで、ｍ＝０，…，ｌｏｇ2ｎ）のアキュムレータを一組とし、隣接する２ｐ−１番目と２ｐ番目（ここで、ｐ＝１，…，ｎ）のアキュムレータの組を当該アキュムレータの組の中におけるアキュムレータアドレスの順番は変えずに、該各アキュムレータの組を入れ替えることで積和演算を実行するようにしたことを特徴とするＳＩＭＤ積和演算方法。
【請求項３】
請求項１または２に記載のＳＩＭＤ積和演算方法において、ＳＩＭＤ積和演算を実行するためにアキュムレータアドレスを入れ替えることを特徴とするＳＩＭＤ積和演算方法。
【請求項４】
同時に動作可能な２ｎ個（ここで、ｎは自然数）の積和演算ユニットを有し、該各積和演算ユニットは乗算器、加算器およびアキュムレータを備える積和演算回路であって、
前記各積和演算ユニットに割り当てられるアキュムレータアドレスの並びを、２m個（ここで、ｍ＝０，…，ｌｏｇ2ｎ）のアキュムレータを一組とし、隣接する２ｐ−１番目と２ｐ番目（ここで、ｐ＝１，…，ｎ）のアキュムレータの組を当該アキュムレータの組の中におけるアキュムレータアドレスの順番は変えずに、該各アキュムレータの組を入れ替えることで積和演算を実行するようにしたことを特徴とするＳＩＭＤ積和演算回路。
【請求項５】
請求項４に記載のＳＩＭＤ積和演算回路において、さらに、前記各積和演算ユニットに対して設けられ前記各アキュムレータのデータを切り替えて供給するセレクタと、該各アキュムレータに対して設けられ該各積和演算ユニットの演算結果を切り替えて格納するセレクタとを備え、該各セレクタを制御して該各積和演算ユニットに所定のＳＩＭＤ積和演算を実行させるようにしたことを特徴とするＳＩＭＤ積和演算回路。
【請求項６】
請求項５に記載のＳＩＭＤ積和演算回路において、前記各セレクタは、スワップ指示信号が供給されたアドレスデコーダからの制御信号により切り替え制御されることを特徴とするＳＩＭＤ積和演算回路。
【請求項７】
請求項４に記載のＳＩＭＤ積和演算回路において、さらに、前記２ｎ個の積和演算ユニットにソースデータを供給するメモリに対して、ＳＩＳＤ積和演算用とＳＩＭＤ積和演算用のソースデータアドレスを切り替えて入力するセレクタを備えることを特徴とするＳＩＭＤ積和演算回路。
【請求項８】
請求項７に記載のＳＩＭＤ積和演算回路において、前記各セレクタは、前記積和演算ユニットのいずれかに対するバリッド信号により切り替え制御されることを特徴とするＳＩＭＤ積和演算回路。
【請求項９】
請求項４に記載のＳＩＭＤ積和演算回路において、さらに、前記２ｎ個の積和演算ユニットを制御するために必要な制御信号を生成する命令デコーダに供給される資源を、ＳＩＳＤ積和演算用とＳＩＭＤ演算用とに切り替えて使用するセレクタを備えることを特徴とするＳＩＭＤ積和演算回路。
【請求項１０】
請求項４〜９のいずれか１項に記載のＳＩＭＤ積和演算回路が、半導体チップに形成されていることを特徴とする半導体集積回路装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、積和演算技術に関し、特に、ＳＩＭＤ演算を行うための方法および回路、並びに、ＳＩＭＤ積和演算回路を備えた半導体集積回路装置に関する。
近年、１つの命令で複数のデータを同時に演算するＳＩＭＤ（Single Instruction Stream-Multiple Data Stream）演算が注目され、例えば、カラー・レーザプリンタやナビゲーション・システムなどの高速データ処理および画像処理を行う高機能・高性能のシステムを実現するには、ＳＩＭＤ演算機能を有する強力なプロセッサが必要とされている。ここで、ＳＩＭＤは、１つの命令で複数のデータを同時に演算する制御方式であり、また、ＳＩＭＤ行列演算は、（高速に）行列演算が実行可能なＳＩＭＤ（積和）演算である。このようなＳＩＭＤ行列演算を行う積和演算回路においては、例えば、行列演算の引数をコピー或いはスワップさせる新たなパス(手順)が必要となって処理性能の低下を来たしている。そこで、回路に大幅な変更を加えることなく、高速にＳＩＭＤ演算を行うことのできる積和演算回路の提供が要望されている。
【０００２】
【従来の技術】
従来、例えば、２行２列の行列演算は、下記の式ｆ１のように表現され、それは後述するような演算が行われるが、積と和の処理の順番により、形式１と形式２の２つに分類することができる。
【０００３】
【数１】
0003935678.tif 000002
【０００４】
ここで、上記の行列演算を、同時に実行することが可能な２つの積和演算器を用いて、２つの演算を並列に行う１つのＳＩＭＤ命令で演算する場合を考える。
一般的な、３オペランド形式の２並列ＳＩＭＤ積和演算命令は、次のように定義される。
ニーモニック（例）  ｄｍａｃ  ＲＳi,ＲＳj,ＡＣＣk
行われる演算：
ＡＣＣk    ＝ＲＳi    ×ＲＳj    ＋ＡＣＣk
ＡＣＣk+1  ＝ＲＳi+1  ×ＲＳj+1  ＋ＡＣＣk+1
ここで、行列演算した結果である、式１の左辺（Ｘ，Ｙ）を、２本のアキュムレータＡＣＣ0およびＡＣＣ1にそれぞれ格納するものとする。
【０００５】
上記の形式１による演算の様子を、下記の式ｆ２に示す。
【０００６】
【数２】
0003935678.tif 000003
【０００７】
まず、ステップ１ではｘを２つ用意し（（ＲＳj,ＲＳj+1）＝（ｘ，ｘ））、行列の１列目の係数（ａ0,ａ1）（＝（ＲＳｉ，ＲＳｉ＋１））とそれぞれ乗算を行い、アキュムレータ（ａｃｃ0,ａｃｃ1）（＝（ＡＣＣk,ＡＣＣk+1））に格納する。このとき、アキュムレータａｃｃ0およびａｃｃ1が共にゼロならば、乗算結果とアキュムレータの値を加算し、アキュムレータに格納してもよい（積和演算）。
【０００８】
次に、ステップ２ではｙを２つ用意し（（ＲＳj,ＲＳj+1）＝（ｙ，ｙ））、行列の２列目の係数（ｂ0，ｂ1）（＝（ＲＳi，ＲＳi+1））とそれぞれ乗算を行い、アキュムレータ（ａｃｃ0,ａｃｃ1）（＝（ＡＣＣk,ＡＣＣk+1））の値とそれぞれ加算して、アキュムレータ（ａｃｃ0,ａｃｃ1）にそれぞれ格納する（積和演算）。
【０００９】
次に、形式２による演算の様子を、下記の式ｆ３に示す。
【００１０】
【数３】
0003935678.tif 000004
【００１１】
まず、ステップ１において、（ａ0,ｂ1）と（ｘ，ｙ）の内積を計算して、アキュムレータ（ａｃｃ0,ａｃｃ1）に格納する。このとき、ａｃｃ0,ａｃｃ1が共にゼロならば、乗算結果とアキュムレータの値を加算して、アキュムレータに格納してもよい（積和演算）。
次に、ステップ２において、（ｘ，ｙ）を（ｙ，ｘ）と入れ替えて、（ｂ0,ａ1）と内積を計算し、アキュムレータ（ａｃｃ0,ａｃｃ1）の値とそれぞれ加算して、アキュムレータ（ａｃｃ0,ａｃｃ1）にそれぞれ格納する（積和演算）。
【００１２】
【発明が解決しようとする課題】
ところで、従来技術において、上述した式ｆ１の行列演算を実行するためには、引数（ｘ，ｙ）をコピー或いは並び替える必要があった。
図１は一般的なＳＩＳＤ（Single Instruction Stream-Single Data Stream）積和演算の手順の一例を示す図であり、図２は２並列のＳＩＳＤ積和演算の手順の一例を示す図であり、そして、図３は従来の積和演算における課題を説明するための図である。なお、図２では、アキュムレータＡＣＣ0とＡＣＣ1との選択は、実行する積和演算命令に予め定められている。
【００１３】
積和演算は、図１に示すような手順で行われが、前述した２行２列の行列演算は、図３に示されるような手順で行われる。すなわち、図３（ａ）に示されるように、形式１のステップ２では、引数ｙをコピーして２つの同じ引数（ｙ，ｙ）と係数（ｂ0，ｂ1）との乗算を行い、また、図３（ｂ）に示されるように、形式２のステップ２では、ステップ１の引数（ｘ，ｙ）を（ｙ，ｘ）とスワップして係数（ｂ0，ａ1）との乗算を行う。従って、図３（ａ）に示す形式１では、引数をコピーする新たな手順（パス）が必要になり、また、図３（ｂ）に示す形式２では、引数をスワップさせる新たなパスが必要になり、これらの新たな手順が行列演算のオーバーヘッドになる。
【００１４】
オーバーヘッドをコピー或いはスワップさせる手順を設けて処理しようとすると、その手順を実現するための何らかの命令を実行する時間（ステップ）が必要になり、行列演算のレイテンシの増加を招いて積和演算回路（半導体集積回路装置：プロセッサ）全体の処理性能を低下させることになる。
また、オーバーヘッドの物理的な対処としては、図３（ａ）および図３（ｂ）に示される新たなパス（新規パス）が必要になり、その結果、データパスの論理段数や配線の増加といった物量（ハード面）の増大を来たすことにもなる。さらに、新規パスを選択するためのデコード手段（デコーダおよび制御信号等）が必要になり、そして、命令実行開始時に必要な制御信号を生成するための論理段数も増加して、結果的に積和演算回路（半導体集積回路装置：プロセッサ）の最大動作周波数を低下させることにもなる。
【００１５】
本発明の目的は、上述した従来の積和演算技術に鑑み、最大動作周波数の低下、レイテンシの増加および回路の大幅な変更を必要とせず、高速に行列演算が実行可能なＳＩＭＤ演算を行うことのできる積和演算回路の提供にある。
【００１６】
【課題を解決するための手段】
本発明の第１の形態によれば、２ｎ並列（ここで、ｎは自然数）の積和演算が同時に実行可能なＳＩＭＤ積和演算方法が提供される。ＳＩＭＤ積和演算で各積和演算回路に割り当てるアキュムレータアドレスの並びは、２m個（ここで、ｍ＝０，…，ｌｏｇ2ｎ）のアキュムレータを一組とし、隣接する２ｐ−１番目と２ｐ番目（ここで、ｐ＝１，…，ｎ）のアキュムレータの組をそのアキュムレータの組の中におけるアキュムレータアドレスの順番は変えずに、各アキュムレータの組が入れ替えられ、ＳＩＭＤ積和演算が実行される。
【００１７】
本発明の第２の形態によれば、同時に動作可能な２ｎ個（ここで、ｎは自然数）の積和演算ユニットを有するＳＩＳＤ積和演算回路において、該積和演算ユニットをＳＩＭＤ積和演算に流用するＳＩＭＤ積和演算方法が提供される。各積和演算ユニットに割り当てられるアキュムレータアドレスの並びは、２m個（ここで、ｍ＝０，…，ｌｏｇ2ｎ）のアキュムレータを一組とし、隣接する２ｐ−１番目と２ｐ番目（ここで、ｐ＝１，…，ｎ）のアキュムレータの組をそのアキュムレータの組の中におけるアキュムレータアドレスの順番は変えずに、各アキュムレータの組が入れ替えられ、ＳＩＭＤ積和演算が実行される。
【００１８】
本発明の第３の形態によれば、同時に動作可能な２ｎ個（ここで、ｎは自然数）の積和演算ユニットを有し、各積和演算ユニットが乗算器、加算器およびアキュムレータを備える積和演算回路が提供される。各積和演算ユニットに割り当てられるアキュムレータアドレスの並びは、２m個（ここで、ｍ＝０，…，ｌｏｇ2ｎ）のアキュムレータを一組とし、隣接する２ｐ−１番目と２ｐ番目（ここで、ｐ＝１，…，ｎ）のアキュムレータの組をそのアキュムレータの組の中におけるアキュムレータアドレスの順番は変えずに、各アキュムレータの組が入れ替えられ、ＳＩＭＤ積和演算が実行される。
【００１９】
図４は本発明および従来の行列演算処理を比較して示すタイムチャートである。
図４に示されるように、２行２列の行列演算を行う場合、コピー或いはスワップさせる手順を設けて対処すると、その手順を実現するための何らかの命令を実行する時間が必要となって、前述した形式１（従来の行列演算処理）では、１／２がオーバーヘッドになり、また、前述した形式２では、１／３がオーバーヘッドになる。これに対して、本発明では、そのようなオーバーヘッドは存在せず、行列演算のレイテンシを増加させることなく、全体の処理性能を維持することができる。
【００２０】
まず、本発明において、一般的なＳＩＭＤ演算とは使用するアキュムレータが逆になる次のようなＳＩＭＤ命令を定義する。
ニーモニック（例）ｄｍａｃｘ  ＲＳi，ＲＳj，ＡＣＣk
行われる演算：
ＡＣＣk+1  ＝ＲＳi    ×ＲＳj    ＋ＡＣＣk+1
ＡＣＣk    ＝ＲＳi+1  ×ＲＳj+1  ＋ＡＣＣk
となる。これにより、前述した形式２において必要であった（ｘ，ｙ）のスワップ操作が不要になる。
【００２１】
具体的に、まず、ステップ１で（ａ0，ｂ1）と（ｘ，ｙ）の内積を計算してアキュムレータ（ａｃｃ0，ａｃｃ1）に格納する。ここで、ａｃｃ0，ａｃｃ1が共にゼロならば、乗算結果とアキュムレータの値とを加算して、アキュムレータに格納しても良い（積和演算）。
次に、ステップ２において、（ａ1，ｂ0）と（ｘ，ｙ）の内積を計算し、アキュムレータ（ａｃｃ1，ａｃｃ0）の値とそれぞれ加算して、アキュムレータ（ａｃｃ1，ａｃｃ0）にそれぞれ格納する（積和演算）。
【００２２】
これにより、前述した形式２で必要であった引数（ｘ，ｙ）をスワップさせるオーバーヘッドが無くなって図３に示すような新規パスが不要になり、図４に示されるように、オーバーヘッドを無くした行列演算を実行することが可能になる。
ここで、本発明のアキュムレータをスワップさせるために生じる弊害は、以下に示すように、軽微または無視できる程度のものであり、実質的な問題はない。
【００２３】
前述したように、並列に実行可能な２つの積和演算回路（積和演算ユニット）は、図２のように構成される。
まず、アキュムレータアドレスをスワップさせるために必要な命令デコードについて述べる。積和演算において、アキュムレータに格納された値が加算されるのは、乗算の演算開始後であり、アキュムレータアドレスをスワップさせるために必要な命令デコードには、十分な時間が与えられるため、そのアキュムレータのスワップによる弊害は無視することができる。
【００２４】
次に、データパスについて述べる。２つの積和演算器から、どちらのアキュムレータにもアクセス可能な場合、本発明を実行するに必要なデータパスは既に備わっているため、アキュムレータアドレスを制御するだけで本発明を実行することができ、そのデータパスによる弊害も無視することができる程度のものである。
【００２５】
すなわち、後述する図５および図６の比較から明らかなように、第１の積和演算器（１３１；２３１）からは両方のアキュムレータ（１４１，１４２；２４１，２４２）にアクセス可能であり、且つ、第２の積和演算器（１３２；２３２）からは第２のアキュムレータ（１４２；２４２）にアクセス可能（すなわち、第２の積和演算器（１３２；２３２）はＳＩＭＤ命令専用の積和演算器）である場合、本発明を適用することにより、第２の積和演算器（２３２）から第１のアキュムレータ（２４１）へ接続されるパスを新設することになる。ただし、第２の積和演算器（２３２）の論理段数は、第１の積和演算器（２３１）の論理段数と変わらないため、新規パスの新設による弊害は軽微である。
【００２６】
なお、積和演算器とアキュムレータが１対１の場合には、一方の積和演算器から他方のアキュムレータへのパスを新設する必要が生じるため、セレクタ１段の論理段数の増加を招くことになる。しかしなら、この場合にも、セレクタ制御信号の生成には時間的余裕があるため、適用し得るデータパス回路（高速なデータパス回路）は容易に構成することが可能であり、その弊害は軽微であるといえる。
【００２７】
以上の説明は、２並列のＳＩＭＤ命令について述べたが、これらは、２ｎ並列のＳＩＭＤ命令に拡張することが可能である。
２ｎ行の行列において、２m個（ｍ＝０，…，ｌｏｇ2ｎ）のＡＣＣ（アキュムレータ）を一組と考え、隣接する２ｐ−１番目と２ｐ番目（ｐ＝１，…，ｎ）のＡＣＣの組を、その組の中におけるＡＣＣの順番は変えずに、全て入れ替えさせる操作（スワップさせる操作）をｆｍ＿１（  ）と定義し、スワップさせない操作をｆｍ＿０（  ）と定義する。
【００２８】
従って、２並列では、
ｄｍａｃ＝ｆ０＿０（ｄｍａｃ），ｄｍａｃｘ＝ｆ０＿１（ｄｍａｃ）
となる。
また、並列度２ｎのＳＩＭＤ命令は、一般的に、次のように表される。
ニーモニック（例）ｎｍａｃ  ＲＳi，ＲＳj，ＡＣＣk
行われる演算：
0003935678.tif 000005
従って、本発明で対象とするＳＩＭＤ命令は、次のような、［Ａ］ｎを、操作Ａをｎ回再帰的に繰り返すと定義すると、
［ｆｍ＿１（ｎｍａｃ）］ｐ（ｍ＝ｌｏｇ2ｎ−ｐ；ｐ＝１，…，ｌｏｇ2ｎ）
のように表される。
【００２９】
これらを用いることで、ハード構成の観点からも、また、実行性能の観点からも、オーバーヘッド無しに行列演算を行うことが可能になる。
本発明は、ＡＣＣをスワップさせるものであって、その対象となるＳＩＭＤ積和演算を選ばない。例えば、次に示すような、ＳＩＭＤ積和演算命令に対しても適用し得る。すなわち、形式２の積和演算器構成を２つ備えた４並列ＳＩＭＤ積和演算命令（ｎｍａｃｘ）を考えると、
ニーモニック（例）ｎｍａｃｘ  ＲＳi，ＲＳj，ＡＣＣk
行われる演算：
ＡＣＣk    ＝ＲＳi    ×ＲＳj+1  ＋ＡＣＣk
ＡＣＣk+1  ＝ＲＳi+1  ×ＲＳj    ＋ＡＣＣk+1
ＡＣＣk+2  ＝ＲＳi+2  ×ＲＳj+3  ＋ＡＣＣk+n-1
ＡＣＣk+3  ＝ＲＳi+3  ×ＲＳj+2  ＋ＡＣＣk+n-1
この場合、次のような、ｆ１＿１（ｎｍａｃｘ）構成の命令を定義することができる。
【００３０】
行われる演算：
ＡＣＣk+1  ＝ＲＳi    ×ＲＳj+1  ＋ＡＣＣk+1
ＡＣＣk    ＝ＲＳi+1  ×ＲＳj    ＋ＡＣＣk
ＡＣＣk+3  ＝ＲＳi+2  ×ＲＳj+3  ＋ＡＣＣk+3
ＡＣＣk+2  ＝ＲＳi+3  ×ＲＳj+2  ＋ＡＣＣk+2
従って、ｎｍａｃ，ｎｍａｃｘ，ｆ１＿１（ｎｍａｃ），ｆ１＿１（ｎｍａｃｘ）を実行することで、オーバーヘッド無しに、４行４列の行列演算ができることになる。
【００３１】
以上は、３オペランド形式を例として述べたが、本発明は、複数のアキュムレータを持つハード構成であれば、どのようなオペランド方式であって適用することが可能である。
【００３２】
【発明の実施の形態】
以下、本発明に係るＳＩＭＤ演算を行う積和演算回路およびこれを備えた半導体集積回路装置の実施例を、従来技術および関連技術と比較しつつ、添付図面を参照して詳述する。
図５は従来技術に係るＳＩＭＤ積和演算回路の一例を示すブロック図である。図５において、参照符号１１０はメモリ、１２０はアドレスデコーダ（ＳＩＭＤ対応アドレスデコーダ）、１３１および１３２は積和演算回路（積和演算ユニット）、１４１および１４２はアキュムレータ、そして、１５０および１６０はセレクタを示している。
【００３３】
第１の積和演算回路（第１の積和演算ユニット）１３１は、ＳＩＳＤ積和演算とＳＩＭＤ積和演算の両方を行うことができ、また、第２の積和演算回路（第２の積和演算ユニット）１３２は、ＳＩＭＤ積和演算専用のものである。
まず、ＳＩＭＤ積和演算が実行される場合、第１の積和演算回路１３１に供給されるソースデータをメモリ１１０から読み出すと共に、そのソースデータアドレスに『１』インクリメントしたアドレスから第２の積和演算回路１３２に供給されるソースデータをメモリ１１０から読み出す。この『１』インクリメントの処理は、第１の積和演算回路１３１に供給されるソースデータのアドレスを偶数に制限することで、実際に行う代わりにアドレスの最下位ビットを『１』に差し換え、これにより高速な読み出しを実現することができる。
【００３４】
メモリ１１０から読み出されたソースデータは、それぞれ積和演算回路１３１および１３２に供給される。ここで、積和演算回路（１３１，１３２）のソースデータ３（ソース３）は、アキュムレータ（１４１，１４２）から読み出される。すなわち、第１の積和演算器回路１３１には、ＳＩＭＤ対応アドレスデコーダ１２０からのアドレス制御信号Ｓ１1により制御されるセレクタ１６０を介して第１のアキュムレータ１４１（ＡＣＣ１）および第２のアキュムレータ１４２（ＡＣＣ２）からのいずれのソースデータ３も読み出し可能とされ、また、第２の積和演算器回路１３２には、第２のアキュムレータ１４２からのソースデータ３が読み出される。
【００３５】
第１の積和演算回路１３１の演算結果は、第１のアキュムレータ１４１に格納されると共に、ＳＩＭＤ対応アドレスデコーダ１２０から出力されるアドレス制御信号Ｓ１２により制御されるセレクタ１５０を介して第２の積和演算回路１３２の演算結果と選択的に第２のアキュムレータ１４２に格納される。以上のような動作により、ＳＩＭＤ積和演算が実行される。
【００３６】
図６は本発明に係るＳＩＭＤ積和演算回路の一実施例を示すブロック図である。本実施例のＳＩＭＤ積和演算回路は、上述した従来のＳＩＭＤ積和演算回路に対してわずかな変更を加えるだけで構成される。
すなわち、図５および図６の比較から明らかなように、本実施例のＳＩＭＤ積和演算回路は、図５に示す従来のＳＩＭＤ積和演算回路に対して第２の積和演算回路２３２（１３２）から第１のアキュムレータ２４１（１４１）に演算結果を書き込むデータパスＤＰ２１およびセレクタ２５１を設けると共に、第１のアキュムレータ２４１から第２の積和演算回路２３２にソースデータ３を供給するデータパスＤＰ２２およびセレクタ２６２を設けるようになっている。ここで、セレクタ２５１はＳＩＭＤ対応アドレスデコーダ２２０からのアドレス制御信号Ｓ２３により制御され、また、セレクタ２６２はＳＩＭＤ対応アドレスデコーダ１２０からのアドレス制御信号Ｓ２４により制御されるようになっている。なお、図５におけるメモリ１１０，第１の積和演算回路１３１，第２のアキュムレータ１４２，ＳＩＭＤ対応アドレスデコーダ１２０，セレクタ１５０および１６０は、それぞれ図６におけるメモリ２１０，第１の積和演算回路２３１，第２のアキュムレータ２４２，ＳＩＭＤ対応アドレスデコーダ２２０，セレクタ２５２および２６１に対応する。
【００３７】
そして、本実施例では、積和演算を行う際に、ＳＩＭＤ対応アドレスデコーダ２２０に対して、通常のＳＩＭＤ積和演算時に生成されるアドレスとはスワップした関係にあるアドレスを生成させるためのスワップ指示信号を供給するようになっている。なお、スワップ指示信号は、例えば、命令をデコードするデコーダにより生成される。
【００３８】
このように、図６に示す本実施例の積和演算回路は、図５に示す従来のＳＩＭＤ積和演算回路に対して上述したような変更を加えることで、以下のような演算を実行する。
まず、メモリ２１０からのソースデータ（ソース１，２）を読み出し、第１および第２の積和演算回路２３１，２３２に供給するまでは、図５に示す従来のＳＩＭＤ積和演算と同じである。
【００３９】
第１の積和演算器回路２３１には、ＳＩＭＤ対応アドレスデコーダ２２０からのアドレス制御信号Ｓ２１で制御されるセレクタ２６１により、第２のアキュムレータ２４２からデータが読み出され、また、第２の積和演算回路２３２には、ＳＩＭＤ対応アドレスデコーダ２２０からのアドレス制御信号Ｓ２４で制御されるセレクタ２６２により、第１のアキュムレータ２４１からデータが読み出される。
【００４０】
第１の積和演算回路２３１の演算結果は、ＳＩＭＤ対応アドレスデコーダ２２０からのアドレス制御信号Ｓ２２で制御されるセレクタ２５２により、第２のアキュムレータ２４２に格納され、また、第２の積和演算回路２３２の演算結果は、ＳＩＭＤ対応アドレスデコーダ２２０からのアドレス制御信号Ｓ２３で制御されるセレクタ２５１により、第１のアキュムレータ２４１に格納される。
【００４１】
以上のように、本第１実施例は、わずかな回路の変更だけで、オーバーヘッド無しに高速に積和演算をすることができるＳＩＭＤ積和演算回路を実現することができる。
図７は関連技術に係る２並列のＳＩＳＤ積和演算回路の一例を示すブロック図であり、２つのＳＩＳＤ積和演算が並列に実行可能な積和演算回路を有するデータ処理装置を示している。
【００４２】
各アキュムレータ３４１，３４２は、第１の積和演算回路３３１および第２の積和演算回路３３２のいずれからもソースデータを読み出し、また、その各演算結果をいずれの積和演算回路３３１，３３２にも書き込むことができるようになっている。従って、図７に示す積和演算回路は、前述した図６の第１実施例におけるデータパス構造を既に持っていることになる。ただし、この図７に示す関連技術の積和演算回路は、２並列のＳＩＳＤ積和演算を行うためだけのものであり、ＳＩＭＤ積和演算を実行することは考慮されていない。
【００４３】
すなわち、図７に示す積和演算回路により、次のような２並列のＳＩＳＤ積和演算が実行される。
まず、第１の積和演算回路３３１に供給されるソースデータをメモリ３１０から読み出すと共に、第２の積和演算回路３３２に供給されるソースデータをメモリ３１０から読み出す。メモリ３１０から読み出されたソースデータは、それぞれ積和演算回路３３１，３３２に供給される。
【００４４】
各積和演算回路のソースデータ３（ソース３）は、アキュムレータ３４１，３４２から読み出される。ここで、第１の積和演算器回路３３１には、アキュムレータ３４１と３４２のいずれからも読み出し可能ならば、アドレスデコーダ３２０からは、アドレス制御信号Ｓ３１により第１のアキュムレータ３４１からデータが読み出され、また、第２の積和演算回路３３２には、第２のアキュムレータ３４２からデータが読み出される。
【００４５】
第１の積和演算器回路３３１には、アドレスデコーダ３２０から出力されるアドレス制御信号Ｓ３１によりアキュムレータ３４１または３４２からデータが読み出され、第２の積和演算回路３３２には、アドレスデコーダ３２０から出力されるアドレス制御信号Ｓ３４によりアキュムレータ３４１または３４２からデータが読み出される。
【００４６】
第１の積和演算回路３３１の演算結果は、アドレスデコーダ３２０から出力されるアドレス制御信号Ｓ３２によりアキュムレータ３４１または３４２に格納され、また、第２の積和演算回路３３２の演算結果は、アドレスデコーダ３２０から出力されるアドレス制御信号Ｓ３３によりアキュムレータ３４１または３４２に格納される。このとき、同じアキュムレータに同時に書き込まれることはない。
【００４７】
以上のようにして、２並列のＳＩＳＤ積和演算が実行されるが、この２並列積和演算回路を本発明のＳＩＭＤ積和演算が実行できるようにしたものが図８である。すなわち、図８は本発明に係るＳＩＭＤ積和演算回路の他の実施例を示すブロック図である。
まず、ＳＩＳＤ積和演算実行時においては、第２の積和演算回路４３２に供給されるソースデータ（ソース１，２）のアドレスを、ＳＩＭＤ積和演算実行時に第２の積和演算回路４３２に供給されるソースデータのアドレス（すなわち、第１の積和演算回路４３１に供給されるソースデータのアドレスに１インクリメントしたもの）にセレクタ４７１および４７２を用いて差し替える。このセレクタ４７１，４７２を制御するための信号の生成は、次のようにすることで、特別なデコードを必要とすることなく高速にセレクタを制御することが可能になる。
【００４８】
ＳＩＭＤ積和演算を実行する際には、第２の積和演算回路４３２を使用したＳＩＳＤ積和演算を実行不可にする。これにより、ＳＩＳＤ積和演算を実行しないときには、ＳＩＭＤ積和演算実行時に第２の積和演算回路４３２に供給されるソースデータのアドレスを選択するようにセレクタ３７１，４７２を構成するだけで良いことになる。これは、アドレスだけでなく、第２の積和演算回路４３２を動作させるための制御信号を生成する命令デコーダに供給されるあらゆる資源に対して、応用可能である。すなわち、ＳＩＳＤ積和演算を行うかどうかのバリッドだけで、ＳＩＳＤ積和演算回路の全てを、ＳＩＳＤ積和演算回路への弊害を最小限にして、且つ、高速にＳＩＭＤ積和演算実行時に流用することが可能になる。
【００４９】
以上のようにして、積和演算回路にソースデータ（ソース１，２）を供給した後、ＳＩＭＤ対応アドレスデコーダ４２０により、アキュムレータ４４１，４４２に格納されたソースデータ（ソース３）を各積和演算回路４３１，４３２に供給し、その各積和演算結果を、アキュムレータ４４１，４４２にそれぞれ格納する。
【００５０】
図９は図８に示すＳＩＭＤ積和演算回路の動作を説明するための図である。なお、次の表１は、アキュムレータのアドレス（ＡＣＣアドレス）入れ替え真理値表（２×２）を示している。
【００５１】
【表１】
0003935678.tif 000006
【００５２】
まず、通常のＳＩＭＤ積和演算（ノーマル）では、制御信号Ｓ４１〜Ｓ４４により、セレクタ４５１および４６２はパス『１』を選択し且つセレクタ４５２および４６１はパス『０』を選択し、第１の積和演算回路４３１は第１のアキュムレータ４４１（ＡＣＣ１）に接続され且つ第２の積和演算回路４３２は第２のアキュムレータ４４２（ＡＣＣ２）に接続されるように制御される。
【００５３】
一方、入れ替え時のＳＩＭＤ積和演算（スワップ）では、制御信号Ｓ４１〜Ｓ４４により、セレクタ４５１および４６２はパス『０』を選択し且つセレクタ４５２および４６１はパス『１』を選択し、第１の積和演算回路４３１は第２のアキュムレータ４４２（ＡＣＣ２）に接続され且つ第２の積和演算回路４３２は第１のアキュムレータ４４１（ＡＣＣ１）に接続されるように制御される。
【００５４】
このように、図８および図９に示す本実施例によれば、既存の回路（図７に示すような関連技術の積和演算回路）に対して大きな変更を加えることなく、オーバーヘッド無しに行列演算が実行可能なＳＩＭＤ積和演算回路を実現することができる。
図１０は本発明に係るＳＩＭＤ積和演算回路が適用されるプロセッサの全体構成を示すブロック図であり、例えば、ＶＬＩＷ（Very Long Instruction Word：長命令語／並列実行型）アーキテクチャを採用した組み込み用アプリケーション特化型のプロセッサであり、上述した本発明に係るＳＩＭＤ積和演算回路が半導体チップに形成された半導体集積回路装置の一例を示すものである。
【００５５】
図１０において、参照符号６０１はＩＣＥ（in-circuit emulator）装置、６０２はシンクロナスＤＲＡＭ（ＳＤＲＡＭ）、６０３はバスブリッジ、６０４はローカルバス、そして、５００はプロセッサ（半導体集積回路装置）を示している。
プロセッサ５００は、デバッグサポートユニット５０１、バスユニット５０２、クロックジェネレータ５０３、ストレージユニット５０４、整数演算ユニット５０５、および、浮動小数点／メディア処理演算ユニット５０６を備えている。バスユニット５０２は、ＳＤＲＡＭ６０２とのインターフェースを取るＳＤＲＡＭ・Ｉ／Ｆ部５２１、バスブリッジ６０３を介してローカルバス６０４とのインターフェースを取るローカルバスＩ／Ｆ部５２２、並びに、ストレージユニット５０４とデバッグサポートユニット５０１，ＳＤＲＡＭ・Ｉ／Ｆ部５２１およびローカルバスＩ／Ｆ部５２２との間に設けられたバスインターフェース部５２３を備えている。ここで、デバッグサポートユニット５０１は、ＩＣＥ装置６０１とＩＣＥ接続され、デバッグをサポートするものである。
【００５６】
ストレージユニット５０４は、命令キャッシュ５４１およびデータキャッシュ５４２を備えている。整数演算ユニット５０５は、命令キャッシュ５４１からの命令を一時的に保持する命令フェッチ部５５１、命令フェッチ部５５１からの命令（例えば、ＶＬＩＷ命令）を整数演算（Ｉ）および浮動小数点／メディア処理演算（Ｆ／Ｍ）に分けて制御するパイプライン制御部５５２、整数演算用パイプライン５５３、および、ジェネラル・レジスタファイル部（ＲＡＭ）５５４を備えている。
【００５７】
浮動小数点／メディア処理演算ユニット５０６は、フローティング・レジスタファイル部（ＲＡＭ）５６１、浮動小数点演算用パイプライン５６２、および、メディア処理用パイプライン５６３を備えている。ここで、浮動小数点演算用パイプライン５６２は、例えば、２つのＳＩＭＤ積和演算回路を備え、また、メディア処理用パイプライン５６３は、例えば、４つのＳＩＭＤ積和演算回路を備えて構成されている。上述した本発明に係るＳＩＭＤ積和演算回路は、例えば、このような浮動小数点演算用パイプライン５６２およびメディア処理用パイプライン５６３に適用される。
【００５８】
なお、本発明に係るＳＩＭＤ積和演算回路が適用されるプロセッサ（半導体集積回路装置）５００は、例えば、複数の３２ビット整数演算ユニット（５０５：例えば、２個）、浮動小数点／メディア処理演算ユニット（５０６：例えば、それぞれ２個）を備え（計６個の演算ユニット）、整数演算ユニット５０５により高性能な信号処理を行い、また、メディア処理演算ユニット（浮動小数点／メディア処理演算ユニット５０６）により画像などの大容量連続データ（メディアデータ）の処理を行うことができる。
【００５９】
【発明の効果】
以上、詳述したように、本発明によれば、回路に大幅な変更を加えることなく、高速にＳＩＭＤ行列演算を行うことのできる積和演算回路および半導体集積回路装置を提供することができる。
【図面の簡単な説明】
【図１】一般的なＳＩＳＤ積和演算の手順の一例を示す図である。
【図２】２並列のＳＩＳＤ積和演算の手順の一例を示す図である。
【図３】従来の積和演算における課題を説明するための図である。
【図４】本発明および従来の行列演算処理を比較して示すタイムチャートである。
【図５】従来技術に係るＳＩＭＤ積和演算回路の一例を示すブロック図である。
【図６】本発明に係るＳＩＭＤ積和演算回路の一実施例を示すブロック図である。
【図７】関連技術に係る２並列のＳＩＳＤ積和演算回路の一例を示すブロック図である。
【図８】本発明に係るＳＩＭＤ積和演算回路の他の実施例を示すブロック図である。
【図９】図８に示すＳＩＭＤ積和演算回路の動作を説明するための図である。
【図１０】本発明に係るＳＩＭＤ積和演算回路が適用されるプロセッサの全体構成を示すブロック図である。
【符号の説明】
１１０，２１０，３１０，４１０…メモリ
１２０，２２０，４２０…ＳＩＭＤ対応アドレスデコーダ
３２０…アドレスデコーダ
１３１，２３１，３３１，４３１…第１の積和演算回路（第１の積和演算ユニット）
１３２，２３２，３３２，４３２…第２の積和演算回路（第２の積和演算ユニット）
１４１，２４１，３４１，４４１…第１のアキュムレータ（ＡＣＣ１）
１４２，２４２，３４２，４４２…第２のアキュムレータ（ＡＣＣ２）
１５０；２５１，２５２；３５１，３５２；４５１，４５２；１６０；２６１，２６２；３６１，３６２；４６１，４６２…セレクタ
５００…プロセッサ（半導体集積回路装置）
５０１…デバッグサポートユニット
５０２…バスユニット
５０３…クロックジェネレータ
５０４…ストレージユニット
５０５…整数演算ユニット
５０６…浮動小数点／メディア処理演算ユニット
６０１…ＩＣＥ装置
６０２…シンクロナスＤＲＡＭ（ＳＤＲＡＭ）
６０３…バスブリッジ
６０４…ローカルバス
【図１】
0003935678.tif 000007
【図２】
0003935678.tif 000008
【図３】
0003935678.tif 000009
【図４】
0003935678.tif 000010
【図５】
0003935678.tif 000011
【図６】
0003935678.tif 000012
【図７】
0003935678.tif 000013
【図８】
0003935678.tif 000014
【図９】
0003935678.tif 000015
【図１０】
0003935678.tif 000016