(57)【要約】【課題】加算器において生じるグリッチによる消費電力を抑制した半導体装置を提供する。【解決手段】実施形態によれば、それぞれが２進数である被乗数に乗数を掛ける乗算を行う少なくとも１つの乗算器３を含む半導体装置１であって、複数の乗算において用いられる、被乗数の２のｎ（ｎは、正の整数）乗の値ではない、被乗数の正の倍数データを生成する加算器１４と、各乗算器３に設けられ、複数の加算器によって、複数の部分積の和を演算するウォレスツリー回路１５と、各乗算器３に設けられ、乗数中の選択された複数ビットに応じて、被乗数の１倍のデータと、被乗数の２のｎ乗のデータと、加算器１４の正の倍数データを選択して、複数の部分積の１つの部分積として、ウォレスツリー回路１５への出力する選択回路２１と、を有する。【選択図】図２
2020144732.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが２進数である被乗数に乗数を掛ける乗算を行う少なくとも１つの乗算器を含む半導体装置であって、
複数の前記乗算において用いられる、前記被乗数の２のｎ（ｎは、正の整数）乗の値ではない、前記被乗数の正の倍数データを生成する第１の加算器と、
各乗算器に設けられ、複数の第２の加算器によって、複数の部分積の和を演算する部分積加算回路と、
前記各乗算器に設けられ、前記乗数中の選択された複数ビットに応じて、前記被乗数の１倍のデータと、前記被乗数の２のｎ乗のデータと、前記第１の加算器の前記正の倍数データを選択して、前記複数の部分積の１つの部分積として、前記部分積加算回路への出力する選択回路と、
を有する、半導体装置。
【請求項２】
前記第１の加算器が生成した前記正の倍数データを格納するレジスタを有し、
前記選択回路は、前記正の倍数データを前記レジスタから取得する、請求項１に記載の半導体装置。
【請求項３】
前記レジスタへのクロック信号は、前記被乗数の値が変わらない状態で前記複数の乗算が行われる間、停止される、請求項２に記載の半導体装置。
【請求項４】
前記少なくとも１つの乗算器は、１つであり、
前記１つの乗算器は、選択信号に基づいて時間的に異なるタイミングで選択された複数の前記乗数に応じて、複数の積を出力する、請求項１に記載の半導体装置。
【請求項５】
前記第１の加算器が生成した前記正の倍数データを格納するレジスタを有し、
前記レジスタへのクロック信号は、前記１つの乗算器が前記複数の積を算出する間、停止される、請求項４に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体装置に関する。
【背景技術】
【０００２】
従来、乗算器を含む半導体装置が広く利用されている。乗算器では、被乗数と乗数の各ビットを乗算、すなわちアンド処理をして複数の部分積が生成され、生成された複数の部分積を加算処理することにより、乗算結果が得られる。加算処理のために、半加算器あるいは全加算器（以下、これらを纏めて呼ぶときには加算器という）が、例えばウォレスツリー（Ｗａｌｌａｃｅ  Ｔｒｅｅ）と呼ばれるツリー構造内に複数配置された部分積加算回路が使用されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−２３７９７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
実施形態は、加算器において生じるグリッチによる消費電力を抑制した半導体装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
実施形態によれば、それぞれが２進数である被乗数に乗数を掛ける乗算を行う少なくとも１つの乗算器を含む半導体装置であって、複数の前記乗算において用いられる、前記被乗数の２のｎ（ｎは、正の整数）乗の値ではない、前記被乗数の正の倍数データを生成する第１の加算器と、各乗算器に設けられ、複数の第２の加算器によって、複数の部分積の和を演算する部分積加算回路と、前記各乗算器に設けられ、前記乗数中の選択された複数ビットに応じて、前記被乗数の１倍のデータと、前記被乗数の２のｎ乗のデータと、前記第１の加算器の前記正の倍数データを選択して、前記複数の部分積の１つの部分積として、前記部分積加算回路への出力する選択回路と、を有する、半導体装置が提供される。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態に係わる半導体装置の構成図である。
【図２】第１の実施形態に係わる積和演算回路の構成を示す回路ブロック図である。
【図３】第１の実施形態に係わる、乗数を２ビットずつまとめて処理する場合の部分積を説明する図である。
【図４】第１の実施形態に係わる、乗数を２ビットずつまとめて処理する場合の部分積の和を説明する図である。
【図５】第１の実施形態に係わる各乗算器の構成を示す回路図である。
【図６】第２の実施形態に係わる半導体装置の乗算器の構成を示す回路図である。
【発明を実施するための形態】
【０００７】
以下、図面を参照して実施形態を説明する。
（第１の実施形態）
図１は、本実施形態に係わる半導体装置の構成図である。図２は、積和演算回路の構成を示す回路ブロック図である。半導体装置１は、積和演算回路２を有している。積和演算回路２は、積和演算のための複数の乗算器３を含む。積和演算回路２は、画像処理等の各種デジタル信号処理のための回路である。
【０００８】
積和演算回路２は、入力データＤＩに対して積和演算を行い、積和演算の結果を出力データＤＯとして出力する。入力データＤＩは、複数のデータであり、出力データも、複数のデータである。積和演算回路２は、例えば、画像データに対するフィルタリング処理、人工知能（ＡＩ）処理の機械学習（例えばディープラーニング）などの各種処理のために用いられる。そのため、積和演算回路２は、多くの乗算器３を含む。
【０００９】
図２に示すように、積和演算回路２の各乗算器３には、被乗数と乗数が入力され、各乗算器３は、乗算結果の積を出力する。被乗数、乗数及び積は、２進数データである。図２では、１つの乗算器３は、被乗数Ｘと乗数Ｙが入力されて積Ｚを出力し、他の１つの乗算器３は、被乗数Ｘと乗数Ｙ’が入力されて積Ｚ’を出力することが示されている。
【００１０】
積和演算回路２は、レジスタ１１、１２、１３と、加算器１４と、複数の乗算器３を含む。よって、半導体装置１は、被乗数に乗数を掛ける乗算を行う複数の乗算器３を含む。レジスタ１１には、被乗数Ｘのデータが入力される。レジスタ１１は、被乗数Ｘの２進数データを格納し、各乗算器３に出力する。
【００１１】
複数のレジスタ１２には、対応する乗算器３に供給する乗数Ｙ、Ｙ’、・・のデータが入力される。各レジスタ１２は、乗数Ｙ、Ｙ’、・・の２進数データを格納し、対応する乗算器３に出力する。
【００１２】
レジスタ１３には、加算器１４からのデータが入力される。レジスタ１３は、加算器１４からの２進数データを格納し、各乗算器３に出力する。
【００１３】
加算器１４には、被乗数Ｘのデータが入力され、被乗数Ｘの３倍、５倍、６倍等の倍数データを生成する回路である。加算器１４が生成する倍数データは、被乗数Ｘの「２のｎ乗」のデータではない。加算器１４は、加算結果である倍数データを、レジスタ１３に出力する。例えば、加算器１４が被乗数Ｘの３倍データの演算を行う場合は、加算器１４は、被乗数Ｘの１倍の値であるＸと被乗数Ｘの２倍の値である２Ｘとの加算を行う回路を含む。すなわち、加算器１４は、複数の乗算において用いられる、被乗数Ｘの２のｎ（ｎは、正の整数）乗の値ではない、被乗数Ｘ）の、３倍、５倍、６倍などの正の倍数データ（３Ｘ、５Ｘ、６Ｘ・・）を生成する回路である。
【００１４】
加算器１４は、被乗数Ｘの複数ビットに対して１つの部分積を生成する処理のために、被乗数の２倍、４倍、８倍等の２のｎ乗（ここで、ｎは、正の整数）の値ではない、被乗数の３倍、５倍、６倍等の「２のｎ乗ではない」数である、の値を、演算する回路である。
【００１５】
レジスタ１１、１２、１３は、２進数データを保持するフリップフロップである。レジスタ１１には、被乗数Ｘが格納される。レジスタ１２には、乗数Ｙが格納される。レジスタ１３には、加算器１４の出力データ、すなわち被乗数Ｘの正の倍数データが格納される。各乗算器３には、レジスタ１１、１２、１３のデータが入力される。各乗算器３は、部分積加算回路としてのウォレスツリー回路１５を含む。本実施形態では、部分積加算回路としてウォレスツリー回路１５が用いられているが、他の回路でもよい。ウォレスツリー回路１５は、各乗算器３に設けられ、ツリー状に配置された複数の加算器によって、複数の部分積の和を演算する回路である。
【００１６】
以上のように、各乗算器３には、被乗数Ｘのデータと、乗数Ｙのデータと、被乗数Ｘの２のｎ乗の値ではない、被乗数Ｘの倍数データが入力される。ここで、加算器１４が、被乗数Ｘの２のｎ乗の値ではない、被乗数Ｘの倍数データをウォレスツリー回路１５へ供給するので、ウォレスツリー回路１５内には、２倍、４倍、などの２ｎ乗のデータを生成するシフト回路のみがあればよい。
【００１７】
すなわち、ウォレスツリー回路１５を含む各乗算器３は、被乗数Ｘの「２のｎ乗ではない」値を生成するための加算器を含まないので、２のｎ乗の演算をする回路だけ、すなわちシフト回路だけを含めばよい。そのため、ウォレスツリー回路１５内のグリッチが伝搬される加算器の数は少なくなり、結果として、消費電力の低減となる。
【００１８】
次に、本実施形態の半導体装置１における乗算器３の回路構成を、４ビットデータの被乗数と乗数の場合を例に説明する。
【００１９】
初めに、説明を簡単にするために、被乗数Ｘが４ビットで（ｘ３，ｘ２，ｘ１，ｘ０）であり、乗数Ｙが４ビットで（ｙ３，ｙ２，ｙ１，ｙ０）であるときに、乗数Ｙを２ビットずつまとめて処理する場合の処理について説明する。
【００２０】
図３は、乗数Ｙを２ビットずつまとめて処理する場合の部分積を説明する図である。図３において、ｉは、０又は２である。Ｐｉは、部分積を示している。乗数Ｙの２ビットが「００」のとき、その部分積は「０」であり、乗数Ｙの２ビットが「０１」のとき、その部分積は被乗数Ｘの「Ｘ」であり、乗数Ｙの２ビットが「１０」のとき、その部分積は被乗数Ｘの２倍の「２Ｘ」であり、乗数Ｙの２ビットが「１１」のとき、その部分積は被乗数Ｘの３倍の「３Ｘ」であることを示している。
【００２１】
図４は、乗数Ｙを２ビットずつまとめて処理する場合の部分積の和を説明する図である。図４に示すように、被乗数Ｘと乗数Ｙの積Ｚは、部分積Ｐ０と、Ｐ２の和である。部分積Ｐ０は、（Ｐ４０，Ｐ３０，Ｐ２０，Ｐ１０，Ｐ００）であり、部分積Ｐ２は、（Ｐ４２，Ｐ３２，Ｐ２２，Ｐ１２，Ｐ０２）であり、積Ｚは、（Ｚ７，Ｚ６，Ｚ５，Ｚ４，Ｚ３，Ｚ２，Ｚ１，Ｚ０）となる。
【００２２】
図５は、各乗算器３の構成を示す回路図である。図５は、図３と図４で説明した、乗数Ｙに対して、２ビットずつまとめて部分積を生成する乗算器を示す。
【００２３】
乗算器３は、マルチプレクサ２１ａ、２１ｂと、基準電源２２ａ、２２ｂと、シフト回路２３ａ、２３ｂを含む。各シフト回路２３ａ、２３ｂは、入力されたデータを、１ビット左へシフトする。すなわち、各シフト回路２３ａ、２３ｂは、被乗数Ｘの２倍の値、すなわち「２Ｘ」を生成して出力する。
【００２４】
基準電源２２ａ、２２ｂは、部分積の値が「０」であることを示すデータを出力する。各シフト回路２３ａ、２３ｂは、入力されたデータを１ビット左へシフトする回路であるので、部分積が「２Ｘ」であることを示すデータを出力する。上述した加算器１４からの部分積「３Ｘ」は、レジスタ１３に格納され、レジスタ１３からの部分積が「３Ｘ」であることを示すデータを出力する。
【００２５】
各マルチプレクサ２１、２１ｂは、乗数Ｙの選択された複数ビット毎に設けられている。マルチプレクサ２１ａには、基準電源２２ａからの「０」であることを示すデータと、レジスタ１１からの被乗数Ｘのデータと、シフト回路２３ａからの「２Ｘ」のデータと、レジスタ１３からの「３Ｘ」のデータの、４つのデータが入力される。すなわち、各マルチプレクサ２１、２１ｂは、「３Ｘ」のデータをレジスタ１３から取得する。マルチプレクサ２１ａは、乗数Ｙの下位２ビット（ｙ１，ｙ０）に応じて、図３に示す条件に従って４つのデータの中から選択されたデータを、部分積Ｐ０として、出力する。
【００２６】
同様に、マルチプレクサ２１ｂには、基準電源２２ｂからの「０」であることを示すデータと、レジスタ１１からの被乗数Ｘのデータと、シフト回路２３ｂからの「２Ｘ」のデータと、レジスタ１３からの「３Ｘ」のデータの、４つのデータが入力される。マルチプレクサ２１ｂは、乗数Ｙの上位２ビット（ｙ３，ｙ２）に応じて、図３に示す条件に従って４つのデータの中から選択されたデータを、部分積Ｐ２として、出力する。すなわち、マルチプレクサ２１ａ、２１ｂは、各乗算器３に設けられ、乗数Ｙ中の選択された複数ビット（ここで２ビット）に応じて、被乗数Ｘの１倍のデータと、被乗数Ｘの２のｎ乗のデータ（ここでは２Ｘ）と、加算器１４の正の倍数データ（ここでは３Ｘ）のいずれか１つを選択して、複数の部分積の１つの部分積として、ウォレスツリー回路１５への出力する複数の選択回路２１ａ、２１ｂを構成する。
【００２７】
上述したように、被乗数Ｘの「２のｎ乗」値は、被乗数Ｘのデータをシフトするシフト回路により生成できるが、被乗数Ｘの「２のｎ乗ではない」値である被乗数Ｘの３倍、５倍、６倍等の倍数データは、シフト回路では生成できないので、上述したようなウォレスツリー回路１５の外の加算器１４により生成される。よって、乗数Ｙを数ビット纏めて処理するときの、纏めるビット数に応じて必要な加算器が、積和演算回路２内に１つ設けられればよい。
【００２８】
すなわち、上述した積和演算回路２では、共通に用いられている加算器１４を有しているため、各ウォレスツリー回路１５内には、被乗数Ｘの３倍を生成する加算器は、必要ない。そのため、図５に示すウォレスツリー回路１５の回路規模は、被乗数Ｘの３倍を生成する加算器を含むウォレスツリー回路の回路規模に比べて略半減する。よって、乗算器３内の複数の加算器において発生するグリッチによる消費電力は、大幅に低減する。
【００２９】
上述した実施形態は、乗数Ｙを２ビットずつまとめて処理する場合を例に説明したが、乗数Ｙを３ビットずつまとめて、４ビットずつまとめて、５ビットずつまとめて等の３ビット以上のビットずつまとめて処理する場合にも適用可能である。それらの場合には、加算器１４は、被乗数Ｘの５倍の「５Ｘ」、被乗数Ｘの６倍の「６Ｘ」、被乗数Ｘの７倍の「７Ｘ」などの倍数データを生成する回路を含む。
【００３０】
従って、図５に示す乗算器３によれば、図４に示す２つの部分積Ｐ０，Ｐ２を用いた乗算を行うことができる。
【００３１】
ここで、本実施形態に係る半導体装置１の効果について説明する。加算器では、２つの入力信号が同じクロックサイクルで変化するときに、２つの入力信号の微小な遅延差により出力信号にグリッチが発生し、余計な電力消費が発生する。加算器の出力信号は、他の加算器の入力信号となるため、グリッチは、例えばウォレスツリー内の後段の加算器への入力信号となって伝搬する。その結果、後段の加算器においても余計な電力消費が発生する。
【００３２】
また、乗算器の消費電力を削減するために部分積の数を減らすことにより、加算器の数を減らす工夫もある。その一例として、乗数１ビットに対して一つの部分積を作るのではなく、乗数の複数ビットに対して１つの部分積を生成するように処理する方法がある。
【００３３】
例えば乗数を２ビットずつまとめて処理する場合は、「００」の場合は加算なし、「０１」の場合は被乗数を加算し、「１０」の場合は被乗数の２倍を加算し、「１１」の場合は、被乗数の３倍を加算する、という処理により、結果として部分積の数を半減することができる。
【００３４】
しかし、例えば乗数を２ビットずつまとめて処理する方法を採用しても、結局、被乗数の３倍を生成する加算器が乗算器に必要になる。そのため、その加算器においてもグリッチが発生するため、部分積の数を減らしたメリットは相殺されてしまう。乗数を３以上のビット数ずつにまとめて処理をした場合は、被乗数の５倍、６倍、７倍など倍数を生成するための加算器が必要となる。
【００３５】
また、例えば、被乗数の３倍の生成を回避するために、ブース（Ｂｏｏｔｈ）のアルゴリズムを用いることもできる。ブースのアルゴリズムを用いることで、例えば被乗数の１倍、２倍及びそれらの負数のみで部分積を生成することができる。
【００３６】
しかし、ブースのアルゴリズムでは、符号なしの乗算であっても、部分積が負になることがあるため、符号拡張が発生する場合がある。その場合、符号拡張のために加算器の数が増えるため、増加した分の加算器の消費電力は増加する。
【００３７】
本実施形態に係る半導体装置１の乗算器３では、２のｎ乗の値ではない、被乗数の正の倍数データを生成する加算器１４と、その加算器１４の出力データを保存するレジスタ１３は、ウォレスツリー回路１５の外部に設けられる。加算器１４の出力データは、レジスタ１３に一旦保存されるため、加算器１４で生じたグリッチは、後段のウォレスツリー回路１５に伝搬しない。その結果、ウォレスツリー回路１５の消費電力は抑制される。
【００３８】
以上のように、上述した実施形態によれば、加算器において生じるグリッチによる消費電力を抑制した半導体装置を提供することができる。
【００３９】
ひいては、複数の乗算器を含む半導体装置のチップサイズも小さくなるという効果も生じる。
【００４０】
なお、本実施形態の場合、さらなる消費電力の削減のために、被乗数Ｘの値が変わらない状態で複数の積和演算が行われる場合、加算器１４の出力を保持するレジスタ１３へのクロックを停止するように制御してもよい。例えば、あるサイクルｔ１で被乗数Ｘとしてｘ１が用いられ、さらにそのサイクルｔ１に続く次のサイクルｔ２で被乗数Ｘとして同じｘ１が用いられるような場合、サイクルｔ２では、レジスタ１３へのクロックを停止してもよい。さらに、サイクルｔ２に続く次のサイクルｔ３でも被乗数Ｘとして同じｘ１が用いられるような場合、サイクルｔ３でも、レジスタ１３へのクロックを停止してもよい。従って、被乗数ｘ１が連続して用いられる場合、被乗数ｘ１をレジスタ１３に一度格納した後、そのレジスタ１３へのクロック信号の供給を停止することにより、消費電力を削減することができる。すなわち、レジスタ１３へのクロック信号が、被乗数の値が変わらない状態で複数の乗算が行われる間、停止されるようにしてもよい。
（第２の実施形態）
第１の実施形態に係る半導体装置１の積和演算回路２は、乗算器３を複数有しているが、第２の実施形態に係る積和演算回路２は、乗算器３を１つ有している。その乗算器３は、時間的に異なるタイミングで複数回動作して、異なるタイミングで与えられた乗数と被乗数の複数の積を生成して出力する。
【００４１】
第２の実施形態に係る半導体装置１の構成は、図１に示すような第１の実施形態の半導体装置１と略同様の構成を有し、かつ乗算器３も図５に示すような乗算器３と同じ構成を有している。そのため、同じ構成要素については同じ符合を用いて、同じ構成要素の説明は省略する。
【００４２】
図６は、本実施形態に係わる半導体装置１の積和演算回路２Ａの構成を示す回路図である。図６の積和演算回路２Ａには、互いに異なる複数（ここではｍ個（ｍは正の整数））の乗数Ｙ１、Ｙ２、・・・Ｙｍが、時間的に異なるタイミングで与えられる。
【００４３】
積和演算回路２Ａは、１つの乗算器３と、レジスタ１１，１２，１３と、加算器１４と、マルチプレクサ２１ｃとを含む。
【００４４】
マルチプレクサ２１ｃには、選択信号ＳＥＬが入力される。選択信号ＳＥＬは、図示しない制御回路から時間的に異なるタイミングでマルチプレクサ２１ｃに与えられる。
【００４５】
よって、マルチプレクサ２１ｃには、被乗数Ｘに掛けられる複数の乗数Ｙ１，Ｙ２、・・・が入力され、マルチプレクサ２１ｃは、選択信号ＳＥＬに応じて、複数の乗数Ｙ１、Ｙ２、・・・から１つを選択してレジスタ１２へ出力する。
【００４６】
乗算器３は、選択信号ＳＥＬの１つのタイミングに応じて、１つの積Ｚを出力する。そして、乗算器３は、選択信号ＳＥＬに基づいて時間的に異なるタイミングで選択された複数の乗数に応じて、複数の積を出力する。
【００４７】
よって、本第２の実施形態においても、加算器において生じるグリッチによる消費電力を抑制した半導体装置を提供することができる。
【００４８】
なお、本第２の実施形態の場合、さらなる消費電力の削減のために、加算器１４の出力を保持するレジスタ１３のクロックを、複数の積の算出の間は、停止するように制御してもよい。すなわち、レジスタ１３へのクロック信号が、乗算器３が複数の積を算出する間、停止されるようにしてもよい。
【００４９】
以上のように、上述した各実施形態によれば、加算器において生じるグリッチによる消費電力を抑制した半導体装置を提供することができる。
【００５０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として例示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５１】
１  半導体装置、２  積和演算回路、３、３Ａ  乗算器、１１、１２、１３  レジスタ、１４  加算器、１５、１５Ａ  ウォレスツリー回路、２１ａ、２１ｂ、２１ｃ、２１ｄ  マルチプレクサ、２２ａ、２２ｂ  基準電源、２３ａ、２３ｂ  シフト回路。
【図１】
2020144732.tif 000003
【図２】
2020144732.tif 000004
【図３】
2020144732.tif 000005
【図４】
2020144732.tif 000006
【図５】
2020144732.tif 000007
【図６】
2020144732.tif 000008