説明

積和演算器

【課題】nビット系の積和演算と、2nビット系の積和演算と、を一の演算器で高速に処理すること
【解決手段】積和演算器は、nビット乗算結果または2nビット乗算の部分積のいずれかを算出するために用いる乗算器100、101及び2nビット乗算の部分積を算出するために用いる乗算器102、103を備える。乗算器100〜103の各々が算出した2nビット乗算の部分積を用いて2nビット乗算の結果を算出し、当該2nビット乗算結果と、予め算出されている2nビット累算値と、を加算することにより新たな2nビット累算値を算出する。また、乗算器100のnビット乗算結果と、乗算器101のnビット乗算結果と、予め算出されているnビット累算値と、を加算すること、により新たなnビット累算値を算出する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は積和演算器に関する。
【背景技術】
【0002】
積和演算(MAC: Multiply and ACumulation)は、デジタル信号処理等において非常に多く利用されている演算である。積和演算とは、乗算結果を順次加算する演算である。積和演算の実現する積和演算器を開示したものとして例えば非特許文献1が挙げられる。
【0003】
非特許文献1に記載の積和演算器の構成を図9に示す。当該積和演算器は、nビットMAC及びnビットSIMD(Single Instruction Multiple Data) MACを実現するための乗算器である。乗算器400は、レジスタR9及びR10からビット列を選択して読み出す。たとえば、乗算器400はビット列"b"及び"d"を読み出す。乗算器400は、読み出したビット列同士を乗算し、乗算結果をレジスタ500に書き込む。乗算器401も乗算器400と同様の構成である。乗算器401は、乗算結果をレジスタ501に書き込む。レジスタ500及びレジスタ501に値を書き込むまでの処理を第1パイプラインステージにおいて行う。
【0004】
第2パイプラインステージにおいて、加算器600は、レジスタ500及びレジスタ501から値を読み出し、読み出した値を加算する。加算器600は、加算結果を加算器601に入力する。加算器601は、レジスタR11から読み出した値と、加算器600から入力された値と、を加算する。レジスタR11には、積和演算の累算値が格納されている。加算器601は、加算結果をセレクタ700に出力する。セレクタ700は、飽和処理等の所定の後処理を行う。飽和処理とは、算出結果が所定の最大値を超えた場合に、当該最大値に値を丸める処理である。セレクタ700は、所定の後処理を行った後の値をレジスタR13に書き込む。
【0005】
近年、様々なアプリケーションソフトウェアが開発されるに伴い、積和演算器は様々なデータ長を扱う必要があり、かつ、様々な種類の演算を行う必要がある。たとえば、積和演算器が実現すべき積和演算の一例として32bit MAC、16bit SIMD(Single Instruction Multiple Data) MAC、16bit MACが挙げられる。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】NECエレクトロニクス社 μPD77016 ファミリ、[平成22年1月18日検索]、インターネット<URL:http://www.necel.com/nesdis/image/U11958JJ2V0AN00.pdf>
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上述の積和演算器によっては以下の問題がある。近年では、積和演算器の出力を使用するアプリケーションソフトウェア等の多様化により、一の積和演算器から多様な積和演算結果を出力する必要性が増加してきている。しかし上述の積和演算器では、異なる倍精度での積和演算を一の回路で実現することが考慮されていない。すなわち、上述の積和演算器では、n bit MACと、2n bit MACと、を同時に実現することができない。
【0008】
ここで、非特許文献1にかかる積和演算器を改良して、n bit MACと、2n bit MACの出力を実現することを考える。この場合、加算処理を行う第2パイプラインステージは、n bit MACの演算処理と、2n bit MACの演算処理と、により加算器を共有できる。しかし、乗算処理を行う第1パイプラインステージには、nビット乗算を行う乗算器と、2n ビット乗算を行う乗算器と、が必要となる。ここで2nビット乗算を行う乗算器は、処理すべきデータ長が大きくなるため、処理の負荷が高くなる。そのため、nビット乗算器と2nビット乗算器を第1パイプラインステージに配置した場合、第1パイプラインステージでの乗算処理が全体の処理のボトルネックとなるという問題がある。
【課題を解決するための手段】
【0009】
本発明にかかる積和演算器の一態様は、nビット乗算結果または2nビット乗算の部分積のいずれかを算出するために用いる第1及び第2の乗算器と、2nビット乗算の部分積を算出するために用いる第3及び第4の乗算器と、第1乃至第4の乗算器の夫々が算出した2nビット乗算の部分積を用いて2nビット乗算の結果を算出し、当該2nビット乗算結果と、予め算出されている2nビット累算値と、を加算することにより新たな2nビット累算値を算出する2nビット累算処理と、第1の乗算器のnビット乗算結果と、第2の乗算器のnビット乗算結果と、予め算出されているnビット累算値と、を加算することにより算出した新たなnビット累算値を算出するnビット累算処理と、を選択的に実行する累算処理部と、を備えるものである。
【0010】
本発明においては、乗算器がnビット乗算結果または2nビット乗算の部分積を求めるために併用される。2nビット累算値を算出する場合、乗算器が算出する部分積を用いて、2nビット系の乗算結果を算出できる。これにより、処理の2nビット乗算に比べて負荷の小さいnビット乗算のみを行い、かつ、一の積和演算器によりnビット累算処理と、2nビット累算処理とを行うことができる。
【発明の効果】
【0011】
本発明によれば、nビット系の積和演算と、2nビット系の積和演算と、を一の演算器で高速に処理することが可能となる。
【図面の簡単な説明】
【0012】
【図1】実施の形態1にかかる積和演算器の図である。
【図2】実施の形態1にかかる2nビット乗算結果の算出方法の概念を示す図である。
【図3】実施の形態2にかかる積和演算器の図である。
【図4】実施の形態2にかかる2nビット乗算結果の算出方法の概念を示す図である。
【図5】実施の形態3にかかる積和演算器の図である。
【図6】実施の形態4にかかる積和演算器の図である。
【図7】実施の形態4にかかる積和演算器による演算処理を示す図である。
【図8】実施の形態4にかかる積和演算器による演算処理を示す図である。
【図9】本発明が解決しようとする課題の1つに関連する積和演算器の図である。
【発明を実施するための形態】
【0013】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【0014】
実施の形態1
以下、図面を参照して本発明の実施の形態について説明する。本実施の形態にかかる積和演算器は、n bit MAC、n bit SIMD MAC、及び2n bit MACを実現する。なお、以下の説明では、2n bit MACは、ビット列Aとビット列Bを乗算し、乗算結果を累算値(乗算結果を順次加算した値)に加算することを想定する。
【0015】
図1を参照して本実施の形態にかかる積和演算器の構成について説明する。本実施の形態にかかる積和演算器は、第1パイプラインステージと、第2パイプラインステージを備える。本実施の形態にかかる積和演算器は、大別して乗算を行う複数の乗算器と、乗算器の乗算結果を用いて積和演算の演算結果を算出する累算処理部と、を備える構成である。本実施の形態にかる積和演算器における累算処理部は、第2パイプラインステージに配置された加算器とセレクタから構成される。
【0016】
第1パイプラインステージに対して、各積和演算処理(n bit MAC、n bit SIMD MAC、2n bit MAC)の入力となるビット列を保持するレジスタR0、R1が配置されている。本実施の形態にかかる積和演算器は、第1パイプラインステージと第2パイプラインステージとの間に積和演算結果を記憶するレジスタR2を備える。さらに、本実施の形態にかかる積和演算器は、第1パイプラインステージと第2パイプラインステージとの間にレジスタ300、301、302、303を備える。
【0017】
n bit MACまたはn bit SIMD MACを行う場合、レジスタR0及びR1には、乗算対象の入力値の一方であるnビットのビット列が複数(図中では2つ)格納される。ここで、複数のビット列がレジスタR0及びR1に格納されるのは、乗算器100〜103がいずれか一方を選択できるようにするためである。たとえば、n bit MACとして16bit MACを行う場合、16ビットのビット列がR0及びR1に複数格納される。2n bit MACを行う場合、レジスタR0には、ビット列Aの上位ビット(ah)及び下位ビット(al)が格納される。レジスタR1には、ビット列Bの上位ビット(bh)及び下位ビット(bl)が格納される。たとえば、2n bit MACとして32bit MACを行う場合、乗算対象の入力値である32ビットのビット列の下位16ビットのビット列が格納される。
【0018】
第1パイプラインステージには、乗算器100と、乗算器101と、乗算器102と、乗算器103と、が備えられている。乗算器100は、n bit MAC、n bit SIMD MAC、及び2n bit MACを行う場合に用いられる乗算器である。n bit MACまたはn bit SIMD MACを行う場合、乗算器100は、レジスタR0と、レジスタR1と、から乗算対象のnビットのビット列を選択し、選択した2つのビット列を乗算する。たとえば、乗算器100は、レジスタR0に格納されているビット列"a"とビット列"b"との中から"b"を選択する。同様に乗算器100は、レジスタR1からビット列"d"を選択する。乗算器100は、ビット列"b"とビット列"d"を乗算する。乗算器100は乗算結果であるビット列をレジスタ300に格納する。
【0019】
また、2n bit MACを行う場合、乗算器100はレジスタR0に格納されたnビットのビット列(ah)と、レジスタR1に格納されたnビットのビット列(bl)とを乗算する。乗算器100は乗算結果であるビット列をレジスタ300に格納する。
【0020】
乗算器101は、n bit SIMD MAC及び2n bit MACを行う場合に用いられる乗算器である。n bit SIMD MACを行う場合、乗算器101は、レジスタR0と、レジスタR1と、から乗算対象のnビットのビット列を選択し、選択した2つのビット列を乗算する。乗算器101は乗算結果であるビット列をレジスタ301に格納する。
【0021】
また、2n bit MACを行う場合、乗算器101はレジスタR0に格納されたnビットのビット列(ah)と、レジスタR1に格納されたnビットのビット列(bh)とを乗算する。乗算器101は乗算結果をレジスタ301に格納する。乗算器101は乗算結果であるビット列をレジスタ301に格納する。
【0022】
乗算器102は、2n bit MACを行う場合に用いられる乗算器である。2n bit MACを行う場合、乗算器102はレジスタR0に格納されたnビットのビット列(ah)と、レジスタR1に格納されたnビットのビット列(bl)とを乗算する。乗算器102は乗算結果をレジスタ302に格納する。
【0023】
乗算器103は、2n bit MACを行う場合に用いられる乗算器である。2n bit MACを行う場合、乗算器103はレジスタR0に格納されたnビットのビット列(al)と、レジスタR1に格納されたnビットのビット列(bh)とを乗算する。乗算器103は乗算結果をレジスタ303に格納する。
【0024】
第2パイプラインステージには、加算器200が配置される。n bit MACを行う場合、加算器200はレジスタ300及びレジスタ301に格納されたビット列を読み出す。そして、加算器200は読み出した2つのビット列の加算処理を行う。ここでn bit MACを行う場合、レジスタ301には0を示すビット列が格納されている。そのため、加算処理結果はレジスタ300に格納されていたビット列と等しくなる。加算器200は加算処理結果のビット列を加算器201に出力する。
【0025】
n bit SIMD MACを行う場合、加算器200はレジスタ300及びレジスタ301に格納されたビット列を読み出す。そして、加算器200は読み出した2つのビット列の加算処理を行う。加算器200は加算処理結果のビット列を加算器201に入力する。
【0026】
2n bit MACを行う場合、加算器200は2nビット乗算の結果を算出するために用いられる。この場合、加算器200はレジスタ300、301、302、303に格納されたnビット乗算の結果のビット列を読み出す。加算器200は、乗算器100、101、102、103が掛け合わせたビット列が演算対象ビット列の上位側か、下位側かを考慮して2nビット乗算の結果を算出する。図2は、加算器200による2nビット乗算結果の算出方法を示す。図2は、32ビット同士の乗算を16ビット同士の部分積4つにより算出する処理を示す図である。図2に示すように、各乗算器100、101、102、103が掛け合わせたビット列が上位ビットか下位ビットかに応じて桁上がりの程度を変更している。たとえば、32ビットの上位16ビット同士を掛け合わせた場合、32ビットのシフトを行った後に、加算器200において加算する。加算器200は、2nビット乗算結果であるビット列を加算器201に出力する。
【0027】
加算器201は、各積和演算処理(n bit MAC、n bit SIMD MAC、2n bit MAC)において、加算器200から出力されたビット列と、レジスタR2に格納されているビット列と、を加算する。加算器201は、加算結果のビット列をセレクタ400に出力する。
【0028】
セレクタ400は、加算器201から入力されたビット列に対して飽和演算等の後処理を行う処理部である。飽和演算とは、加算器201の出力ビット列が所定の最大値を超えた場合に、その最大値に値を丸める処理である。セレクタ400は後処理を行ったビット列をレジスタR2に格納する。
【0029】
次に、本実施の形態にかかる積和演算器によるn bit MACの処理手順について説明する。第1パイプラインステージにおいて、乗算器100は、レジスタR0及びレジスタR1からnビットのビット列を選択し、選択したビット列同士を乗算処理する。乗算器100は乗算結果をレジスタ300に格納する。一方、レジスタ301には0が格納される。
【0030】
第2パイプラインステージでは、加算器200がレジスタ300とレジスタ301とからビット列を読み出す。加算器200は加算した値、すなわちレジスタ300に格納されていたビット列を加算器201に出力する。加算器201は、レジスタR2からビット列を読み出し、読み出したビット列と加算器201から入力されたビット列とを加算する。加算器201は、加算結果をセレクタ400に出力する。セレクタ400は、加算器201から入力されたビット列に対して飽和処理、MUX処理等の後処理を実行し、後処理の結果であるビット列をレジスタR2に書き込む。
【0031】
続いて、本実施の形態にかかる積和演算器によるn bit SIMD MACの処理手順について説明する。第1パイプラインステージにおいて、乗算器100は、レジスタR0及びレジスタR1からnビットのビット列を選択し、選択したビット列を乗算処理する。乗算器100は乗算結果をレジスタ300に格納する。同様に、乗算器101は乗算結果をレジスタ301に格納する。
【0032】
第2パイプラインステージでは、加算器200がレジスタ300とレジスタ301とからビット列を読み出す。加算器200は読み出した2つのビット列を加算した値を加算器201に出力する。以降の処理は、n bit MACと同様である。
【0033】
次に、本実施の形態にかかる積和演算器による2n bit MACの処理手順について説明する。乗算器100、101、102、103は、レジスタR0及びR1からビット列を読み出し、乗算結果(乗算器101:al×bl、乗算器102:ah×bh、乗算器102:ah×bl、乗算器103:al×bh)をレジスタ300、301、302、303に格納する。
【0034】
第2パイプラインステージにおいて、加算器200は各レジスタ300、301、302、303からビット列を取り出し、前述(図2)のようにビットシフトを考慮して2nビット乗算の結果を算出する。加算器200は、算出した2nビット乗算結果を加算器201に出力する。以降の処理は、n bit MACと同様である。
【0035】
続いて、本実施の形態にかかる積和演算器の効果について説明する。乗算器100〜103は全てnビットの乗算器で構成され、nビットの乗算結果の算出及び2nビットの乗算値の部分積を算出するという2つの用途に併用される。加算器200が2nビットの乗算結果を算出する用途と、nビットの乗算値を加算するという用途に併用される。加算器201は、予め算出されている累算値(積和演算の演算結果)と、算出されたnビットの乗算結果または算出された2nビットの乗算結果と、を加算することにより積和演算を実現している。上述の構成により、ビット数の異なる各積和演算処理(n bit MAC、n bit SIMD MAC、2n bit MAC)を一の積和演算器で実現できる。
【0036】
また、2nビットの積和演算を行う場合であっても、nビット乗算を行う乗算器のみを配置している。これにより、本実施の形態にかかる積和演算器ではnビット乗算のみが行われる。一般に、nビット乗算を行う乗算器の処理は、乗算対象のビット長が短いため、2nビット乗算を行う乗算器の処理に比べて高速である。よって、2nビットの乗算を行う乗算器を配置する場合と比べ、本実施の形態にかかる積和演算器は、乗算値を算出する処理が高速になる。これにより、全体としての積和演算処理も高速になり得る。
【0037】
なお、上述の説明では積和演算処理についての説明を行ったが、これに限られず、累積演算結果から乗算結果を順次減算する積差演算に応用することも可能である。加算器201及び加算器204を減算器または加減算器に置き換えることにより積差演算を実現することが可能である。
【0038】
実施の形態2
本発明の実施の形態2は、積和演算器が第1パイプラインステージに2nビット乗算の部分積を加算する加算器を備えることを特徴とする。以下に、本実施の形態にかかる積和演算器について、第1の実施の形態にかかる積和演算器と異なる部分について説明を行う。
【0039】
図3は、本実施の形態にかかる積和演算器の構成を示す。本実施の形態にかかる積和演算器は、加算器202を備える。加算器202は、乗算器102と、乗算器103とからビット列が入力され、当該ビット列同士の加算結果をレジスタ304に出力する。加算器200は、2nビット乗算値を算出する場合、レジスタ300と、レジスタ301と、レジスタ304と、から値を読み出し、当該値から2nビット乗算値を算出する。
【0040】
続いて、図4を用いて本実施の形態にかかる積和演算器の2nビット積和演算処理の概念を説明する。図4の説明では、32ビットMAC演算(32ビットのビット列同士の乗算値を累積値に加算する。)についての積和演算処理を表している。乗算器102はビット列Aの上位16ビット(ah)と、ビット列Bの下位16ビット(bl)の乗算値(32ビット乗算の部分積)を算出する。乗算器103はビット列Aの下位16ビット(al)と、ビット列Bの上位16ビット(bh)の乗算値(32ビット乗算の部分積)を算出する。加算器202は、乗算器102が算出した乗算値と、乗算器103が算出した乗算値と、を桁上がりに考慮して加算する。すなわち、乗算器102が算出した乗算値と、乗算器103が算出した乗算値と、を16ビット左にシフトした状態で加算する。加算器202は、算出された加算値をレジスタ304に格納する。
【0041】
乗算器100は、ビット列Aの下位16ビット(al)と、ビット列Bの下位16ビット(bl)の乗算値(32ビット乗算の部分積)を算出する。乗算器100は、算出された乗算値をレジスタ300に格納する。同様に、乗算器101は、ビット列Aの上位16ビット(ah)と、ビット列Bの上位16ビット(bh)の乗算値(32ビット乗算の部分積)を算出する。乗算器101は、算出された乗算値をレジスタ301に格納する。
【0042】
加算器203は、レジスタ300に格納されたビット列と、レジスタ301に格納されたビット列と、レジスタ304に格納されたビット列と、を読み出す。加算器203は、読み出したレジスタ301に格納されたビット列を桁上がりに考慮して32ビットシフトしている。ここで、加算器203は、レジスタ100に格納された32ビットのビット列の上位16ビットと、レジスタ301に格納されたビット列と、から48ビットのビット列を生成する(図4(1))。
【0043】
加算器203は、生成した48ビットのビット列(図4(1))と、レジスタ304に格納されたビット列を加算する。加算器203は、加算結果の値(図4(2))の空き状態となっている下位16ビットを、レジスタ300に格納された値の下位16ビットに置き換える。上記の処理により、本実施の形態にかかる積和演算器は、32ビットのビット列同士の乗算結果を算出する。
【0044】
続いて本実施の形態にかかる積和演算器の効果について説明する。本実施の形態にかかる積和演算器は、第1パイプラインステージに加算器202を設けている。これにより、2n bit MACを行う場合に、2nビット乗算の部分積の加算値を第1パイプラインステージにおいて算出し、当該加算値を第2パイプラインステージで算出する必要がない。実施の形態1にかかる積和演算器では、第1パイプラインステージでの処理に比べて第2パイプラインステージの処理の負荷が高くなる傾向にある。また、本実施の形態にかかる積和演算器のように、n bit MACと2n bit MACで併用される乗算器100及び乗算器101は、レジスタR0及びR1の値を選択する選択処理を行う場合が多い。選択処理を行うことにより、乗算器100及び乗算器101は、乗算器102及び乗算器103に比べて処理が一般に遅くなる。そのため、乗算器100及び乗算器101に比べて高速に処理が終了する乗算器102及び乗算器103の乗算結果(部分積)を加算器202により加算することによって、第1パイプラインステージの処理負荷が大きくなることなく、第2パイプラインステージの処理負荷を軽減することができる。
【0045】
実施の形態3
本発明の実施の形態3にかかる積和演算器は、第2パイプラインステージをnビット系の処理を行う処理部と、2nビット系の処理を行う処理部と、を備える構成したことを特徴とする。以下に、本実施の形態にかかる積和演算器について、第1及び第2の実施の形態にかかる積和演算器と異なる部分について説明を行う。
【0046】
本実施の形態にかかる積和演算器は、第2パイプラインステージにおいてnビット系の処理を行う処理部と、2nビット系の処理を行う処理部と、を備える構成である。nビット系の処理を行う処理部は、加算器204と、加算器205と、セレクタ401と、を備える構成である。2nビット系の処理を行う処理部は、加算器206と、加算器207と、セレクタ402と、を備える構成である。
【0047】
nビット系の処理を行う処理部の動作について説明する。加算器204は、レジスタ300及びレジスタ301から値をnビット乗算の計算結果を読み出し、両者を加算する。加算器204は加算結果を加算器205に出力する。加算器205は、加算器204から出力された値と、レジスタR2から読み出した累算値を加算して、加算結果をセレクタ401に出力する。セレクタ401は、入力された値に対して飽和演算等の後処理を行う。
【0048】
次に2nビット系の処理を行う処理部の動作について説明する。加算器206は、レジスタ300、301、302、及び303からnビット乗算の値を読み出し、2nビット乗算の結果を算出する。加算器206は、算出した2nビット乗算結果を加算器207に出力する。加算器207は、加算器206から入力された2nビット乗算結果と、レジスタR2から読み出した累算値と、を加算する。加算器207は、加算結果をセレクタ402に出力する。セレクタ402は、入力された値に対して飽和演算等の後処理を行う。
【0049】
続いて、本実施の形態にかかる積和演算器の効果について説明する。2nビット系の加算処理を行う加算器206は、2nビット乗算の値を算出する加算器である。すなわち、加算器206が算出する値は2nビット乗算の値となり、4nビット以上に大きい値とならない。そのため、2nビット系の積和演算では、加算器207による加算により4nビットのビット列から1度桁上がりする可能性がある。一方、nビット系の積和演算では、加算器204及び加算器205での加算処理によって2nビットのビット列から2桁分の桁上がりが生じる可能性がある。これにより、nビット系の積和演算ではセレクタによる飽和処理が複雑となり、2nビット系の積和演算において行う飽和処理よりも重くなる。本実施の形態にかかる積和演算器は、nビット系の処理を行う処理部と、2nビット系の処理を行う処理部と、を独立に配置した構成であるため、2nビット系の積和演算処理の高速化が図れる。
【0050】
実施の形態4
本発明の実施の形態4にかかる積和演算器は、nビット系の累算値を算出する処理部と、nビット系の累算値を算出する処理部と、を備え、第1パイプラインステージに2nビット乗算の部分積を算出する加算器を備えることを特徴とする。なお、同一名及び同一符号を付した処理部は実施の形態1、2、及び3と基本的に同じ処理を行う。
【0051】
図7を用いて本実施の形態にかかる積和演算器を用いた2bit SIMD MAC演算処理の具体例を説明する。乗算器100及び乗算器101は、レジスタからビット列を取り出し、乗算を行う。乗算器101は、"11"と"11"の乗算値として"1001"をレジスタ300に書き込む。乗算器101は、"11"と"11"の乗算値として"1001"をレジスタ301に書き込む。
【0052】
加算器204は、レジスタ300から"1001"、及びレジスタ301から"1001"を読み出し、読み出したビット列を加算した値"10010"を加算器205に出力する。ここで、加算器204による加算処理は、4ビットのビット列同士の加算となるため、桁上がりが生じ得る。すなわち、加算器204の出力として5ビットのビット列を算出し得る。加算器205は、加算器204から入力されたビット列"10010"と、レジスタR2に格納されている値を加算する。図7では、レジスタR2にビット列"1110"が格納されているものとする。この場合、加算器205はビット列"10010"と、"1110"とを加算した結果である "100000"をセレクタ401に出力する。図8に示すように、加算器205による加算によっても桁上がりが生じ得る。
【0053】
セレクタ401は、入力された値に飽和処理等の後処理を行う。ここで、飽和処理として入力された値が4ビット以上の値か否かを判定し、4ビットの値に丸める処理を行うか否かを判定する。上述のように桁上がりが2回生じ得るため、セレクタ401は下位から5ビット目と6ビット目を読み出して桁上がりの有無を判定する。セレクタ401は飽和処理等を行った後の計算結果をレジスタR2に書き込む。
【0054】
続いて、図8を用いて本実施の形態にかかる積和演算器を用いた4bit MAC演算処理の具体例を説明する。乗算器100〜103は、レジスタからビット列を取り出し、乗算を行う。乗算器100は、"11"と"11"の乗算値として"1001"をレジスタ300に書き込む。乗算器101は、"11"と"11"の乗算値として"1001"をレジスタ301に書き込む。加算器202は、乗算器102の乗算値と、乗算器103の乗算値と、加算する。加算器202は、加算結果として"10010"をレジスタ304に書き込む。
【0055】
加算器206は、レジスタ300、レジスタ301、及びレジスタ304から値を読み出し、4ビット乗算の乗算値を算出する。加算器206は、4ビット乗算の乗算値を算出するために用いられるため、8ビット以上のビット列を生成することはない。すなわち、加算器206の出力結果に桁上がりが生じることはない。図8では、加算器206は4ビット乗算の値として"11100001"を算出している。
【0056】
加算器207は、加算器206の出力と、レジスタR2に格納されている値を加算する。図8では、レジスタR2にビット列"11111111"が格納されている。加算器207は、加算器206の出力"11100001"と、レジスタR2に格納されたビット列"11111111"と、の加算結果として"111100000"を得る。加算器207は、ビット列"111100000"を出力する。
【0057】
セレクタ402は、入力された値に飽和処理等の後処理を行う。ここで、飽和処理として入力された値が8ビット以上の値か否かを判定し、8ビットの値に丸める処理を行うか否かを判定する。この場合、桁上がりは加算器207における処理によってのみ生じるため、セレクタ402は下位から9ビット目を読み出せばよい。よって2bit SIMD MACを行う場合と比べて桁上がりの有無を調べるために読み出すビット列が少なくなる。
【0058】
本実施の形態にかかる積和演算器では、第1パイプラインステージに加算器202(部分積加算器)を設け、nビット系の累算値を算出する処理部と、nビット系の累算値を算出する処理部を独立して設けている。これにより、2nビット乗算を高速に演算可能となり、かつ2nビット系の積和演算において行う飽和処理を高速に行うことが可能となる。
【0059】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。たとえば、上述の説明では符号を考慮しない積和演算器について言及したが、符号(sign/unsign)を考慮して積和演算処理を行う積和演算器にも応用可能である。
【0060】
また、実施の形態1及び3にかかる積和演算器は、必ずしも2つのパイプラインステージに分けて構成することに限られず、例えば1のパイプラインステージにより構成してもよい。また、実施の形態1乃至4にかかる積和演算器は3以上のパイプラインステージを備える構成であってもよい。
【符号の説明】
【0061】
100、101、102、103 乗算器
200〜207 加算器
300〜304 レジスタ
400〜402 セレクタ
R0〜R2 レジスタ

【特許請求の範囲】
【請求項1】
nビット乗算結果または2nビット乗算の部分積のいずれかを算出するために用いる第1及び第2の乗算器と、2nビット乗算の部分積を算出するために用いる第3及び第4の乗算器と、
第1乃至第4の乗算器の夫々が算出した2nビット乗算の部分積を用いて2nビット乗算の結果を算出し、当該2nビット乗算結果と、予め算出されている2nビット累算値と、を加算することにより新たな2nビット累算値を算出する2nビット累算処理と、
第1の乗算器のnビット乗算結果と、第2の乗算器のnビット乗算結果と、予め算出されているnビット累算値と、を加算することにより算出した新たなnビット累算値を算出するnビット累算処理と、を選択的に実行する累算処理部と、を備える積和演算器。
【請求項2】
前記累算処理部は、前記第3の乗算器が算出した2nビット乗算の部分積と、前記第4の乗算器が算出した2nビット乗算の部分積と、を加算して2nビットの部分積の加算結果を算出する部分積加算器を備え、
前記部分加算器による演算は第1パイプラインステージにおいて実行し、
第2パイプラインステージにおいて、前記部分加算器が算出した部分積の加算結果と、第1及び第2の乗算器が算出した2nビット乗算の部分積と、を用いて前記2nビット乗算の結果を算出することを特徴とする請求項1に記載の積和演算器。
【請求項3】
前記累算処理部は、
第1乃至第4の乗算器の夫々が算出した2nビット乗算の部分積を用いて2nビット乗算値を算出する第1の加算器と、
前記2nビット累算値と、前記第1の加算器が算出した2nビット乗算値を加算して新たな前記2nビット累積値を算出する第2の加算器と、
前記第2の加算器が算出した前記2nビット累積値が算出した前記2nビット累積値に対して所定の後処理を行う第1のセレクタと、
第1の乗算器の算出したnビット乗算値と、第2の乗算器の算出したnビット乗算値と、を加算する第3の加算器と、
前記nビット累算値と、前記第3の加算器が算出した値を加算して新たな前記nビット累積値を算出する第4の加算器と、
前記第4の加算器が算出した前記nビット累積値に対して所定の後処理を行う第2のセレクタと、
を備えることを特徴とする請求項1または請求項2に記載の積和演算器。
【請求項4】
前記2nビット累算結果に対して所定の後処理を行ってから新たな前記2nビット累算値とし、前記nビット累算結果に対して所定の後処理を行ってから前記nビット累算値とすることを特徴とする請求項1または請求項2に記載の積和演算器。
【請求項5】
前記積和演算器は、前記nビット累算値及び前記2nビット累算値の少なくともいずれか一方を記憶する記憶部を備えることを特徴とする請求項1乃至請求項4のいずれか1項に記載の積和演算器。
【請求項6】
前記nビット累算処理を行う場合に、前記第2の乗算器のnビット乗算結果を0に固定することを特徴とする請求項1乃至請求項5のいずれか1項に記載の積和演算器。
【請求項7】
n=16であることを特徴とする請求項1乃至請求項6のいずれか1項に記載の積和演算器。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2011−180966(P2011−180966A)
【公開日】平成23年9月15日(2011.9.15)
【国際特許分類】
【出願番号】特願2010−46500(P2010−46500)
【出願日】平成22年3月3日(2010.3.3)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】