(57)【要約】【課題】ｎビット系の積和演算と、２ｎビット系の積和演算と、を一の演算器で高速に処理すること  【解決手段】積和演算器は、ｎビット乗算結果または２ｎビット乗算の部分積のいずれかを算出するために用いる乗算器１００、１０１及び２ｎビット乗算の部分積を算出するために用いる乗算器１０２、１０３を備える。乗算器１００〜１０３の各々が算出した２ｎビット乗算の部分積を用いて２ｎビット乗算の結果を算出し、当該２ｎビット乗算結果と、予め算出されている２ｎビット累算値と、を加算することにより新たな２ｎビット累算値を算出する。また、乗算器１００のｎビット乗算結果と、乗算器１０１のｎビット乗算結果と、予め算出されているｎビット累算値と、を加算すること、により新たなｎビット累算値を算出する。【選択図】図１
2011180966.tif 000002
【特許請求の範囲】
【請求項１】
ｎビット乗算結果または２ｎビット乗算の部分積のいずれかを算出するために用いる第１及び第２の乗算器と、２ｎビット乗算の部分積を算出するために用いる第３及び第４の乗算器と、
第１乃至第４の乗算器の夫々が算出した２ｎビット乗算の部分積を用いて２ｎビット乗算の結果を算出し、当該２ｎビット乗算結果と、予め算出されている２ｎビット累算値と、を加算することにより新たな２ｎビット累算値を算出する２ｎビット累算処理と、
第１の乗算器のｎビット乗算結果と、第２の乗算器のｎビット乗算結果と、予め算出されているｎビット累算値と、を加算することにより算出した新たなｎビット累算値を算出するｎビット累算処理と、を選択的に実行する累算処理部と、を備える積和演算器。
【請求項２】
前記累算処理部は、前記第３の乗算器が算出した２ｎビット乗算の部分積と、前記第４の乗算器が算出した２ｎビット乗算の部分積と、を加算して２ｎビットの部分積の加算結果を算出する部分積加算器を備え、
前記部分加算器による演算は第１パイプラインステージにおいて実行し、
第２パイプラインステージにおいて、前記部分加算器が算出した部分積の加算結果と、第１及び第２の乗算器が算出した２ｎビット乗算の部分積と、を用いて前記２ｎビット乗算の結果を算出することを特徴とする請求項１に記載の積和演算器。
【請求項３】
前記累算処理部は、
第１乃至第４の乗算器の夫々が算出した２ｎビット乗算の部分積を用いて２ｎビット乗算値を算出する第１の加算器と、
前記２ｎビット累算値と、前記第１の加算器が算出した２ｎビット乗算値を加算して新たな前記２ｎビット累積値を算出する第２の加算器と、
前記第２の加算器が算出した前記２ｎビット累積値が算出した前記２ｎビット累積値に対して所定の後処理を行う第１のセレクタと、
第１の乗算器の算出したｎビット乗算値と、第２の乗算器の算出したｎビット乗算値と、を加算する第３の加算器と、
前記ｎビット累算値と、前記第３の加算器が算出した値を加算して新たな前記ｎビット累積値を算出する第４の加算器と、
前記第４の加算器が算出した前記ｎビット累積値に対して所定の後処理を行う第２のセレクタと、
を備えることを特徴とする請求項１または請求項２に記載の積和演算器。
【請求項４】
前記２ｎビット累算結果に対して所定の後処理を行ってから新たな前記２ｎビット累算値とし、前記ｎビット累算結果に対して所定の後処理を行ってから前記ｎビット累算値とすることを特徴とする請求項１または請求項２に記載の積和演算器。
【請求項５】
前記積和演算器は、前記ｎビット累算値及び前記２ｎビット累算値の少なくともいずれか一方を記憶する記憶部を備えることを特徴とする請求項１乃至請求項４のいずれか１項に記載の積和演算器。
【請求項６】
前記ｎビット累算処理を行う場合に、前記第２の乗算器のｎビット乗算結果を０に固定することを特徴とする請求項１乃至請求項５のいずれか１項に記載の積和演算器。
【請求項７】
ｎ＝１６であることを特徴とする請求項１乃至請求項６のいずれか１項に記載の積和演算器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は積和演算器に関する。
【背景技術】
【０００２】
積和演算（ＭＡＣ： Multiply and ACumulation）は、デジタル信号処理等において非常に多く利用されている演算である。積和演算とは、乗算結果を順次加算する演算である。積和演算の実現する積和演算器を開示したものとして例えば非特許文献１が挙げられる。
【０００３】
非特許文献１に記載の積和演算器の構成を図９に示す。当該積和演算器は、ｎビットＭＡＣ及びｎビットＳＩＭＤ（Single Instruction Multiple Data）  ＭＡＣを実現するための乗算器である。乗算器４００は、レジスタＲ９及びＲ１０からビット列を選択して読み出す。たとえば、乗算器４００はビット列"ｂ"及び"ｄ"を読み出す。乗算器４００は、読み出したビット列同士を乗算し、乗算結果をレジスタ５００に書き込む。乗算器４０１も乗算器４００と同様の構成である。乗算器４０１は、乗算結果をレジスタ５０１に書き込む。レジスタ５００及びレジスタ５０１に値を書き込むまでの処理を第１パイプラインステージにおいて行う。
【０００４】
第２パイプラインステージにおいて、加算器６００は、レジスタ５００及びレジスタ５０１から値を読み出し、読み出した値を加算する。加算器６００は、加算結果を加算器６０１に入力する。加算器６０１は、レジスタＲ１１から読み出した値と、加算器６００から入力された値と、を加算する。レジスタＲ１１には、積和演算の累算値が格納されている。加算器６０１は、加算結果をセレクタ７００に出力する。セレクタ７００は、飽和処理等の所定の後処理を行う。飽和処理とは、算出結果が所定の最大値を超えた場合に、当該最大値に値を丸める処理である。セレクタ７００は、所定の後処理を行った後の値をレジスタＲ１３に書き込む。
【０００５】
近年、様々なアプリケーションソフトウェアが開発されるに伴い、積和演算器は様々なデータ長を扱う必要があり、かつ、様々な種類の演算を行う必要がある。たとえば、積和演算器が実現すべき積和演算の一例として３２ｂｉｔ  ＭＡＣ、１６ｂｉｔ  ＳＩＭＤ（Single Instruction Multiple Data）  ＭＡＣ、１６ｂｉｔ  ＭＡＣが挙げられる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】ＮＥＣエレクトロニクス社 μPD77016 ファミリ、[平成22年1月18日検索]、インターネット＜URL：http://www.necel.com/nesdis/image/U11958JJ2V0AN00.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述の積和演算器によっては以下の問題がある。近年では、積和演算器の出力を使用するアプリケーションソフトウェア等の多様化により、一の積和演算器から多様な積和演算結果を出力する必要性が増加してきている。しかし上述の積和演算器では、異なる倍精度での積和演算を一の回路で実現することが考慮されていない。すなわち、上述の積和演算器では、ｎ  ｂｉｔ  ＭＡＣと、２ｎ  ｂｉｔ  ＭＡＣと、を同時に実現することができない。
【０００８】
ここで、非特許文献１にかかる積和演算器を改良して、ｎ  ｂｉｔ  ＭＡＣと、２ｎ  ｂｉｔ  ＭＡＣの出力を実現することを考える。この場合、加算処理を行う第２パイプラインステージは、ｎ  ｂｉｔ  ＭＡＣの演算処理と、２ｎ  ｂｉｔ  ＭＡＣの演算処理と、により加算器を共有できる。しかし、乗算処理を行う第１パイプラインステージには、ｎビット乗算を行う乗算器と、２ｎ  ビット乗算を行う乗算器と、が必要となる。ここで２ｎビット乗算を行う乗算器は、処理すべきデータ長が大きくなるため、処理の負荷が高くなる。そのため、ｎビット乗算器と２ｎビット乗算器を第１パイプラインステージに配置した場合、第１パイプラインステージでの乗算処理が全体の処理のボトルネックとなるという問題がある。
【課題を解決するための手段】
【０００９】
本発明にかかる積和演算器の一態様は、ｎビット乗算結果または２ｎビット乗算の部分積のいずれかを算出するために用いる第１及び第２の乗算器と、２ｎビット乗算の部分積を算出するために用いる第３及び第４の乗算器と、第１乃至第４の乗算器の夫々が算出した２ｎビット乗算の部分積を用いて２ｎビット乗算の結果を算出し、当該２ｎビット乗算結果と、予め算出されている２ｎビット累算値と、を加算することにより新たな２ｎビット累算値を算出する２ｎビット累算処理と、第１の乗算器のｎビット乗算結果と、第２の乗算器のｎビット乗算結果と、予め算出されているｎビット累算値と、を加算することにより算出した新たなｎビット累算値を算出するｎビット累算処理と、を選択的に実行する累算処理部と、を備えるものである。
【００１０】
本発明においては、乗算器がｎビット乗算結果または２ｎビット乗算の部分積を求めるために併用される。２ｎビット累算値を算出する場合、乗算器が算出する部分積を用いて、２ｎビット系の乗算結果を算出できる。これにより、処理の２ｎビット乗算に比べて負荷の小さいｎビット乗算のみを行い、かつ、一の積和演算器によりｎビット累算処理と、２ｎビット累算処理とを行うことができる。
【発明の効果】
【００１１】
本発明によれば、ｎビット系の積和演算と、２ｎビット系の積和演算と、を一の演算器で高速に処理することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１にかかる積和演算器の図である。
【図２】実施の形態１にかかる２ｎビット乗算結果の算出方法の概念を示す図である。
【図３】実施の形態２にかかる積和演算器の図である。
【図４】実施の形態２にかかる２ｎビット乗算結果の算出方法の概念を示す図である。
【図５】実施の形態３にかかる積和演算器の図である。
【図６】実施の形態４にかかる積和演算器の図である。
【図７】実施の形態４にかかる積和演算器による演算処理を示す図である。
【図８】実施の形態４にかかる積和演算器による演算処理を示す図である。
【図９】本発明が解決しようとする課題の１つに関連する積和演算器の図である。
【発明を実施するための形態】
【００１３】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１４】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。本実施の形態にかかる積和演算器は、ｎ  ｂｉｔ  ＭＡＣ、ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣ、及び２ｎ  ｂｉｔ  ＭＡＣを実現する。なお、以下の説明では、２ｎ  ｂｉｔ  ＭＡＣは、ビット列Ａとビット列Ｂを乗算し、乗算結果を累算値（乗算結果を順次加算した値）に加算することを想定する。
【００１５】
図１を参照して本実施の形態にかかる積和演算器の構成について説明する。本実施の形態にかかる積和演算器は、第１パイプラインステージと、第２パイプラインステージを備える。本実施の形態にかかる積和演算器は、大別して乗算を行う複数の乗算器と、乗算器の乗算結果を用いて積和演算の演算結果を算出する累算処理部と、を備える構成である。本実施の形態にかる積和演算器における累算処理部は、第２パイプラインステージに配置された加算器とセレクタから構成される。
【００１６】
第１パイプラインステージに対して、各積和演算処理（ｎ  ｂｉｔ  ＭＡＣ、ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣ、２ｎ  ｂｉｔ  ＭＡＣ）の入力となるビット列を保持するレジスタＲ０、Ｒ１が配置されている。本実施の形態にかかる積和演算器は、第１パイプラインステージと第２パイプラインステージとの間に積和演算結果を記憶するレジスタＲ２を備える。さらに、本実施の形態にかかる積和演算器は、第１パイプラインステージと第２パイプラインステージとの間にレジスタ３００、３０１、３０２、３０３を備える。
【００１７】
ｎ  ｂｉｔ  ＭＡＣまたはｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣを行う場合、レジスタＲ０及びＲ１には、乗算対象の入力値の一方であるｎビットのビット列が複数（図中では２つ）格納される。ここで、複数のビット列がレジスタＲ０及びＲ１に格納されるのは、乗算器１００〜１０３がいずれか一方を選択できるようにするためである。たとえば、ｎ  ｂｉｔ  ＭＡＣとして１６ｂｉｔ  ＭＡＣを行う場合、１６ビットのビット列がＲ０及びＲ１に複数格納される。２ｎ  ｂｉｔ  ＭＡＣを行う場合、レジスタＲ０には、ビット列Ａの上位ビット（ａｈ）及び下位ビット（ａｌ）が格納される。レジスタＲ１には、ビット列Ｂの上位ビット（ｂｈ）及び下位ビット（ｂｌ）が格納される。たとえば、２ｎ  ｂｉｔ  ＭＡＣとして３２ｂｉｔ  ＭＡＣを行う場合、乗算対象の入力値である３２ビットのビット列の下位１６ビットのビット列が格納される。
【００１８】
第１パイプラインステージには、乗算器１００と、乗算器１０１と、乗算器１０２と、乗算器１０３と、が備えられている。乗算器１００は、ｎ  ｂｉｔ  ＭＡＣ、ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣ、及び２ｎ  ｂｉｔ  ＭＡＣを行う場合に用いられる乗算器である。ｎ  ｂｉｔ  ＭＡＣまたはｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣを行う場合、乗算器１００は、レジスタＲ０と、レジスタＲ１と、から乗算対象のｎビットのビット列を選択し、選択した２つのビット列を乗算する。たとえば、乗算器１００は、レジスタＲ０に格納されているビット列"ａ"とビット列"ｂ"との中から"ｂ"を選択する。同様に乗算器１００は、レジスタＲ１からビット列"ｄ"を選択する。乗算器１００は、ビット列"ｂ"とビット列"ｄ"を乗算する。乗算器１００は乗算結果であるビット列をレジスタ３００に格納する。
【００１９】
また、２ｎ  ｂｉｔ  ＭＡＣを行う場合、乗算器１００はレジスタＲ０に格納されたｎビットのビット列（ａｈ）と、レジスタＲ１に格納されたｎビットのビット列（ｂｌ）とを乗算する。乗算器１００は乗算結果であるビット列をレジスタ３００に格納する。
【００２０】
乗算器１０１は、ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣ及び２ｎ  ｂｉｔ  ＭＡＣを行う場合に用いられる乗算器である。ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣを行う場合、乗算器１０１は、レジスタＲ０と、レジスタＲ１と、から乗算対象のｎビットのビット列を選択し、選択した２つのビット列を乗算する。乗算器１０１は乗算結果であるビット列をレジスタ３０１に格納する。
【００２１】
また、２ｎ  ｂｉｔ  ＭＡＣを行う場合、乗算器１０１はレジスタＲ０に格納されたｎビットのビット列（ａｈ）と、レジスタＲ１に格納されたｎビットのビット列（ｂｈ）とを乗算する。乗算器１０１は乗算結果をレジスタ３０１に格納する。乗算器１０１は乗算結果であるビット列をレジスタ３０１に格納する。
【００２２】
乗算器１０２は、２ｎ  ｂｉｔ  ＭＡＣを行う場合に用いられる乗算器である。２ｎ  ｂｉｔ  ＭＡＣを行う場合、乗算器１０２はレジスタＲ０に格納されたｎビットのビット列（ａｈ）と、レジスタＲ１に格納されたｎビットのビット列（ｂｌ）とを乗算する。乗算器１０２は乗算結果をレジスタ３０２に格納する。
【００２３】
乗算器１０３は、２ｎ  ｂｉｔ  ＭＡＣを行う場合に用いられる乗算器である。２ｎ  ｂｉｔ  ＭＡＣを行う場合、乗算器１０３はレジスタＲ０に格納されたｎビットのビット列（ａｌ）と、レジスタＲ１に格納されたｎビットのビット列（ｂｈ）とを乗算する。乗算器１０３は乗算結果をレジスタ３０３に格納する。
【００２４】
第２パイプラインステージには、加算器２００が配置される。ｎ  ｂｉｔ  ＭＡＣを行う場合、加算器２００はレジスタ３００及びレジスタ３０１に格納されたビット列を読み出す。そして、加算器２００は読み出した２つのビット列の加算処理を行う。ここでｎ  ｂｉｔ  ＭＡＣを行う場合、レジスタ３０１には０を示すビット列が格納されている。そのため、加算処理結果はレジスタ３００に格納されていたビット列と等しくなる。加算器２００は加算処理結果のビット列を加算器２０１に出力する。
【００２５】
ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣを行う場合、加算器２００はレジスタ３００及びレジスタ３０１に格納されたビット列を読み出す。そして、加算器２００は読み出した２つのビット列の加算処理を行う。加算器２００は加算処理結果のビット列を加算器２０１に入力する。
【００２６】
２ｎ  ｂｉｔ  ＭＡＣを行う場合、加算器２００は２ｎビット乗算の結果を算出するために用いられる。この場合、加算器２００はレジスタ３００、３０１、３０２、３０３に格納されたｎビット乗算の結果のビット列を読み出す。加算器２００は、乗算器１００、１０１、１０２、１０３が掛け合わせたビット列が演算対象ビット列の上位側か、下位側かを考慮して２ｎビット乗算の結果を算出する。図２は、加算器２００による２ｎビット乗算結果の算出方法を示す。図２は、３２ビット同士の乗算を１６ビット同士の部分積４つにより算出する処理を示す図である。図２に示すように、各乗算器１００、１０１、１０２、１０３が掛け合わせたビット列が上位ビットか下位ビットかに応じて桁上がりの程度を変更している。たとえば、３２ビットの上位１６ビット同士を掛け合わせた場合、３２ビットのシフトを行った後に、加算器２００において加算する。加算器２００は、２ｎビット乗算結果であるビット列を加算器２０１に出力する。
【００２７】
加算器２０１は、各積和演算処理（ｎ  ｂｉｔ  ＭＡＣ、ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣ、２ｎ  ｂｉｔ  ＭＡＣ）において、加算器２００から出力されたビット列と、レジスタＲ２に格納されているビット列と、を加算する。加算器２０１は、加算結果のビット列をセレクタ４００に出力する。
【００２８】
セレクタ４００は、加算器２０１から入力されたビット列に対して飽和演算等の後処理を行う処理部である。飽和演算とは、加算器２０１の出力ビット列が所定の最大値を超えた場合に、その最大値に値を丸める処理である。セレクタ４００は後処理を行ったビット列をレジスタＲ２に格納する。
【００２９】
次に、本実施の形態にかかる積和演算器によるｎ  ｂｉｔ  ＭＡＣの処理手順について説明する。第１パイプラインステージにおいて、乗算器１００は、レジスタＲ０及びレジスタＲ１からｎビットのビット列を選択し、選択したビット列同士を乗算処理する。乗算器１００は乗算結果をレジスタ３００に格納する。一方、レジスタ３０１には０が格納される。
【００３０】
第２パイプラインステージでは、加算器２００がレジスタ３００とレジスタ３０１とからビット列を読み出す。加算器２００は加算した値、すなわちレジスタ３００に格納されていたビット列を加算器２０１に出力する。加算器２０１は、レジスタＲ２からビット列を読み出し、読み出したビット列と加算器２０１から入力されたビット列とを加算する。加算器２０１は、加算結果をセレクタ４００に出力する。セレクタ４００は、加算器２０１から入力されたビット列に対して飽和処理、ＭＵＸ処理等の後処理を実行し、後処理の結果であるビット列をレジスタＲ２に書き込む。
【００３１】
続いて、本実施の形態にかかる積和演算器によるｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣの処理手順について説明する。第１パイプラインステージにおいて、乗算器１００は、レジスタＲ０及びレジスタＲ１からｎビットのビット列を選択し、選択したビット列を乗算処理する。乗算器１００は乗算結果をレジスタ３００に格納する。同様に、乗算器１０１は乗算結果をレジスタ３０１に格納する。
【００３２】
第２パイプラインステージでは、加算器２００がレジスタ３００とレジスタ３０１とからビット列を読み出す。加算器２００は読み出した２つのビット列を加算した値を加算器２０１に出力する。以降の処理は、ｎ  ｂｉｔ  ＭＡＣと同様である。
【００３３】
次に、本実施の形態にかかる積和演算器による２ｎ  ｂｉｔ  ＭＡＣの処理手順について説明する。乗算器１００、１０１、１０２、１０３は、レジスタＲ０及びＲ１からビット列を読み出し、乗算結果（乗算器１０１：ａｌ×ｂｌ、乗算器１０２：ａｈ×ｂｈ、乗算器１０２：ａｈ×ｂｌ、乗算器１０３：ａｌ×ｂｈ）をレジスタ３００、３０１、３０２、３０３に格納する。
【００３４】
第２パイプラインステージにおいて、加算器２００は各レジスタ３００、３０１、３０２、３０３からビット列を取り出し、前述（図２）のようにビットシフトを考慮して２ｎビット乗算の結果を算出する。加算器２００は、算出した２ｎビット乗算結果を加算器２０１に出力する。以降の処理は、ｎ  ｂｉｔ  ＭＡＣと同様である。
【００３５】
続いて、本実施の形態にかかる積和演算器の効果について説明する。乗算器１００〜１０３は全てｎビットの乗算器で構成され、ｎビットの乗算結果の算出及び２ｎビットの乗算値の部分積を算出するという２つの用途に併用される。加算器２００が２ｎビットの乗算結果を算出する用途と、ｎビットの乗算値を加算するという用途に併用される。加算器２０１は、予め算出されている累算値（積和演算の演算結果）と、算出されたｎビットの乗算結果または算出された２ｎビットの乗算結果と、を加算することにより積和演算を実現している。上述の構成により、ビット数の異なる各積和演算処理（ｎ  ｂｉｔ  ＭＡＣ、ｎ  ｂｉｔ  ＳＩＭＤ  ＭＡＣ、２ｎ  ｂｉｔ  ＭＡＣ）を一の積和演算器で実現できる。
【００３６】
また、２ｎビットの積和演算を行う場合であっても、ｎビット乗算を行う乗算器のみを配置している。これにより、本実施の形態にかかる積和演算器ではｎビット乗算のみが行われる。一般に、ｎビット乗算を行う乗算器の処理は、乗算対象のビット長が短いため、２ｎビット乗算を行う乗算器の処理に比べて高速である。よって、２ｎビットの乗算を行う乗算器を配置する場合と比べ、本実施の形態にかかる積和演算器は、乗算値を算出する処理が高速になる。これにより、全体としての積和演算処理も高速になり得る。
【００３７】
なお、上述の説明では積和演算処理についての説明を行ったが、これに限られず、累積演算結果から乗算結果を順次減算する積差演算に応用することも可能である。加算器２０１及び加算器２０４を減算器または加減算器に置き換えることにより積差演算を実現することが可能である。
【００３８】
実施の形態２
本発明の実施の形態２は、積和演算器が第１パイプラインステージに２ｎビット乗算の部分積を加算する加算器を備えることを特徴とする。以下に、本実施の形態にかかる積和演算器について、第１の実施の形態にかかる積和演算器と異なる部分について説明を行う。
【００３９】
図３は、本実施の形態にかかる積和演算器の構成を示す。本実施の形態にかかる積和演算器は、加算器２０２を備える。加算器２０２は、乗算器１０２と、乗算器１０３とからビット列が入力され、当該ビット列同士の加算結果をレジスタ３０４に出力する。加算器２００は、２ｎビット乗算値を算出する場合、レジスタ３００と、レジスタ３０１と、レジスタ３０４と、から値を読み出し、当該値から２ｎビット乗算値を算出する。
【００４０】
続いて、図４を用いて本実施の形態にかかる積和演算器の２ｎビット積和演算処理の概念を説明する。図４の説明では、３２ビットＭＡＣ演算（３２ビットのビット列同士の乗算値を累積値に加算する。）についての積和演算処理を表している。乗算器１０２はビット列Ａの上位１６ビット（ａｈ）と、ビット列Ｂの下位１６ビット（ｂｌ）の乗算値（３２ビット乗算の部分積）を算出する。乗算器１０３はビット列Ａの下位１６ビット（ａｌ）と、ビット列Ｂの上位１６ビット（ｂｈ）の乗算値（３２ビット乗算の部分積）を算出する。加算器２０２は、乗算器１０２が算出した乗算値と、乗算器１０３が算出した乗算値と、を桁上がりに考慮して加算する。すなわち、乗算器１０２が算出した乗算値と、乗算器１０３が算出した乗算値と、を１６ビット左にシフトした状態で加算する。加算器２０２は、算出された加算値をレジスタ３０４に格納する。
【００４１】
乗算器１００は、ビット列Ａの下位１６ビット（ａｌ）と、ビット列Ｂの下位１６ビット（ｂｌ）の乗算値（３２ビット乗算の部分積）を算出する。乗算器１００は、算出された乗算値をレジスタ３００に格納する。同様に、乗算器１０１は、ビット列Ａの上位１６ビット（ａｈ）と、ビット列Ｂの上位１６ビット（ｂｈ）の乗算値（３２ビット乗算の部分積）を算出する。乗算器１０１は、算出された乗算値をレジスタ３０１に格納する。
【００４２】
加算器２０３は、レジスタ３００に格納されたビット列と、レジスタ３０１に格納されたビット列と、レジスタ３０４に格納されたビット列と、を読み出す。加算器２０３は、読み出したレジスタ３０１に格納されたビット列を桁上がりに考慮して３２ビットシフトしている。ここで、加算器２０３は、レジスタ１００に格納された３２ビットのビット列の上位１６ビットと、レジスタ３０１に格納されたビット列と、から４８ビットのビット列を生成する（図４（１））。
【００４３】
加算器２０３は、生成した４８ビットのビット列（図４（１））と、レジスタ３０４に格納されたビット列を加算する。加算器２０３は、加算結果の値（図４（２））の空き状態となっている下位１６ビットを、レジスタ３００に格納された値の下位１６ビットに置き換える。上記の処理により、本実施の形態にかかる積和演算器は、３２ビットのビット列同士の乗算結果を算出する。
【００４４】
続いて本実施の形態にかかる積和演算器の効果について説明する。本実施の形態にかかる積和演算器は、第１パイプラインステージに加算器２０２を設けている。これにより、２ｎ  ｂｉｔ  ＭＡＣを行う場合に、２ｎビット乗算の部分積の加算値を第１パイプラインステージにおいて算出し、当該加算値を第２パイプラインステージで算出する必要がない。実施の形態１にかかる積和演算器では、第１パイプラインステージでの処理に比べて第２パイプラインステージの処理の負荷が高くなる傾向にある。また、本実施の形態にかかる積和演算器のように、ｎ  ｂｉｔ  ＭＡＣと２ｎ  ｂｉｔ  ＭＡＣで併用される乗算器１００及び乗算器１０１は、レジスタＲ０及びＲ１の値を選択する選択処理を行う場合が多い。選択処理を行うことにより、乗算器１００及び乗算器１０１は、乗算器１０２及び乗算器１０３に比べて処理が一般に遅くなる。そのため、乗算器１００及び乗算器１０１に比べて高速に処理が終了する乗算器１０２及び乗算器１０３の乗算結果（部分積）を加算器２０２により加算することによって、第１パイプラインステージの処理負荷が大きくなることなく、第２パイプラインステージの処理負荷を軽減することができる。
【００４５】
実施の形態３
本発明の実施の形態３にかかる積和演算器は、第２パイプラインステージをｎビット系の処理を行う処理部と、２ｎビット系の処理を行う処理部と、を備える構成したことを特徴とする。以下に、本実施の形態にかかる積和演算器について、第１及び第２の実施の形態にかかる積和演算器と異なる部分について説明を行う。
【００４６】
本実施の形態にかかる積和演算器は、第２パイプラインステージにおいてｎビット系の処理を行う処理部と、２ｎビット系の処理を行う処理部と、を備える構成である。ｎビット系の処理を行う処理部は、加算器２０４と、加算器２０５と、セレクタ４０１と、を備える構成である。２ｎビット系の処理を行う処理部は、加算器２０６と、加算器２０７と、セレクタ４０２と、を備える構成である。
【００４７】
ｎビット系の処理を行う処理部の動作について説明する。加算器２０４は、レジスタ３００及びレジスタ３０１から値をｎビット乗算の計算結果を読み出し、両者を加算する。加算器２０４は加算結果を加算器２０５に出力する。加算器２０５は、加算器２０４から出力された値と、レジスタＲ２から読み出した累算値を加算して、加算結果をセレクタ４０１に出力する。セレクタ４０１は、入力された値に対して飽和演算等の後処理を行う。
【００４８】
次に２ｎビット系の処理を行う処理部の動作について説明する。加算器２０６は、レジスタ３００、３０１、３０２、及び３０３からｎビット乗算の値を読み出し、２ｎビット乗算の結果を算出する。加算器２０６は、算出した２ｎビット乗算結果を加算器２０７に出力する。加算器２０７は、加算器２０６から入力された２ｎビット乗算結果と、レジスタＲ２から読み出した累算値と、を加算する。加算器２０７は、加算結果をセレクタ４０２に出力する。セレクタ４０２は、入力された値に対して飽和演算等の後処理を行う。
【００４９】
続いて、本実施の形態にかかる積和演算器の効果について説明する。２ｎビット系の加算処理を行う加算器２０６は、２ｎビット乗算の値を算出する加算器である。すなわち、加算器２０６が算出する値は２ｎビット乗算の値となり、４ｎビット以上に大きい値とならない。そのため、２ｎビット系の積和演算では、加算器２０７による加算により４ｎビットのビット列から１度桁上がりする可能性がある。一方、ｎビット系の積和演算では、加算器２０４及び加算器２０５での加算処理によって２ｎビットのビット列から２桁分の桁上がりが生じる可能性がある。これにより、ｎビット系の積和演算ではセレクタによる飽和処理が複雑となり、２ｎビット系の積和演算において行う飽和処理よりも重くなる。本実施の形態にかかる積和演算器は、ｎビット系の処理を行う処理部と、２ｎビット系の処理を行う処理部と、を独立に配置した構成であるため、２ｎビット系の積和演算処理の高速化が図れる。
【００５０】
実施の形態４
本発明の実施の形態４にかかる積和演算器は、ｎビット系の累算値を算出する処理部と、ｎビット系の累算値を算出する処理部と、を備え、第１パイプラインステージに２ｎビット乗算の部分積を算出する加算器を備えることを特徴とする。なお、同一名及び同一符号を付した処理部は実施の形態１、２、及び３と基本的に同じ処理を行う。
【００５１】
図７を用いて本実施の形態にかかる積和演算器を用いた２ｂｉｔ  ＳＩＭＤ ＭＡＣ演算処理の具体例を説明する。乗算器１００及び乗算器１０１は、レジスタからビット列を取り出し、乗算を行う。乗算器１０１は、"１１"と"１１"の乗算値として"１００１"をレジスタ３００に書き込む。乗算器１０１は、"１１"と"１１"の乗算値として"１００１"をレジスタ３０１に書き込む。
【００５２】
加算器２０４は、レジスタ３００から"１００１"、及びレジスタ３０１から"１００１"を読み出し、読み出したビット列を加算した値"１００１０"を加算器２０５に出力する。ここで、加算器２０４による加算処理は、４ビットのビット列同士の加算となるため、桁上がりが生じ得る。すなわち、加算器２０４の出力として５ビットのビット列を算出し得る。加算器２０５は、加算器２０４から入力されたビット列"１００１０"と、レジスタＲ２に格納されている値を加算する。図７では、レジスタＲ２にビット列"１１１０"が格納されているものとする。この場合、加算器２０５はビット列"１００１０"と、"１１１０"とを加算した結果である "１０００００"をセレクタ４０１に出力する。図８に示すように、加算器２０５による加算によっても桁上がりが生じ得る。
【００５３】
セレクタ４０１は、入力された値に飽和処理等の後処理を行う。ここで、飽和処理として入力された値が４ビット以上の値か否かを判定し、４ビットの値に丸める処理を行うか否かを判定する。上述のように桁上がりが２回生じ得るため、セレクタ４０１は下位から５ビット目と６ビット目を読み出して桁上がりの有無を判定する。セレクタ４０１は飽和処理等を行った後の計算結果をレジスタＲ２に書き込む。
【００５４】
続いて、図８を用いて本実施の形態にかかる積和演算器を用いた４ｂｉｔ  ＭＡＣ演算処理の具体例を説明する。乗算器１００〜１０３は、レジスタからビット列を取り出し、乗算を行う。乗算器１００は、"１１"と"１１"の乗算値として"１００１"をレジスタ３００に書き込む。乗算器１０１は、"１１"と"１１"の乗算値として"１００１"をレジスタ３０１に書き込む。加算器２０２は、乗算器１０２の乗算値と、乗算器１０３の乗算値と、加算する。加算器２０２は、加算結果として"１００１０"をレジスタ３０４に書き込む。
【００５５】
加算器２０６は、レジスタ３００、レジスタ３０１、及びレジスタ３０４から値を読み出し、４ビット乗算の乗算値を算出する。加算器２０６は、４ビット乗算の乗算値を算出するために用いられるため、８ビット以上のビット列を生成することはない。すなわち、加算器２０６の出力結果に桁上がりが生じることはない。図８では、加算器２０６は４ビット乗算の値として"１１１００００１"を算出している。
【００５６】
加算器２０７は、加算器２０６の出力と、レジスタＲ２に格納されている値を加算する。図８では、レジスタＲ２にビット列"１１１１１１１１"が格納されている。加算器２０７は、加算器２０６の出力"１１１００００１"と、レジスタＲ２に格納されたビット列"１１１１１１１１"と、の加算結果として"１１１１０００００"を得る。加算器２０７は、ビット列"１１１１０００００"を出力する。
【００５７】
セレクタ４０２は、入力された値に飽和処理等の後処理を行う。ここで、飽和処理として入力された値が８ビット以上の値か否かを判定し、８ビットの値に丸める処理を行うか否かを判定する。この場合、桁上がりは加算器２０７における処理によってのみ生じるため、セレクタ４０２は下位から９ビット目を読み出せばよい。よって２ｂｉｔ ＳＩＭＤ  ＭＡＣを行う場合と比べて桁上がりの有無を調べるために読み出すビット列が少なくなる。
【００５８】
本実施の形態にかかる積和演算器では、第１パイプラインステージに加算器２０２（部分積加算器）を設け、ｎビット系の累算値を算出する処理部と、ｎビット系の累算値を算出する処理部を独立して設けている。これにより、２ｎビット乗算を高速に演算可能となり、かつ２ｎビット系の積和演算において行う飽和処理を高速に行うことが可能となる。
【００５９】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。たとえば、上述の説明では符号を考慮しない積和演算器について言及したが、符号（sign/unsign）を考慮して積和演算処理を行う積和演算器にも応用可能である。
【００６０】
また、実施の形態１及び３にかかる積和演算器は、必ずしも２つのパイプラインステージに分けて構成することに限られず、例えば１のパイプラインステージにより構成してもよい。また、実施の形態１乃至４にかかる積和演算器は３以上のパイプラインステージを備える構成であってもよい。
【符号の説明】
【００６１】
１００、１０１、１０２、１０３  乗算器
２００〜２０７  加算器
３００〜３０４  レジスタ
４００〜４０２  セレクタ
Ｒ０〜Ｒ２  レジスタ
【図１】
2011180966.tif 000003
【図２】
2011180966.tif 000004
【図３】
2011180966.tif 000005
【図４】
2011180966.tif 000006
【図５】
2011180966.tif 000007
【図６】
2011180966.tif 000008
【図７】
2011180966.tif 000009
【図８】
2011180966.tif 000010
【図９】
2011180966.tif 000011