(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-08-08
(45)【発行日】2022-08-17
(54)【発明の名称】半導体装置、および除算方法
(51)【国際特許分類】
G06F 7/535 20060101AFI20220809BHJP
G06F 1/03 20060101ALI20220809BHJP
G06F 9/302 20060101ALI20220809BHJP
【FI】
G06F7/535 520
G06F1/03
G06F9/302 F
(21)【出願番号】P 2018208170
(22)【出願日】2018-11-05
【審査請求日】2021-03-15
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】池田 基茂
【審査官】白石 圭吾
(56)【参考文献】
【文献】特開2000-105684(JP,A)
【文献】特開昭63-181031(JP,A)
【文献】特開平05-257650(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 5/01;7/38-7/537;7/57-7/575;7/74-7/78
G06F 1/02-1/035;7/544-7/556
G06F 9/30-9/355
(57)【特許請求の範囲】
【請求項1】
除数の絶対値の
複数のサンプル値
の各々と当該サンプル値の逆数とを関連付けた第1テーブル、および入力された除数の絶対値に基づいて、前記入力された除数の絶対値の逆数の近似値を算出する近似値算出回路を備え、
前記複数
のサンプル値の各々について、当該サンプル値と、当該サンプル値に隣接するサンプル値との間隔は、当該サンプル値が小さいほど小さく、
前記入力された除数の絶対値と前記近似値との誤差を算出する誤差算出回路と、
要求される演算精度と前記算出された誤差とに基づいて、ニュートンラフソン法の反復計算の第1の回数を算出する第1算出回路と、
前記要求される演算精度と前記算出された誤差とに基づいて、前記ニュートンラフソン法の反復計算の式を変形して当該反復計算に用いられる乗算の一部を省略した簡易演算法の反復計算の第2の回数を算出する第2算出回路と、
前記ニュートンラフソン法の反復計算を前記第1の回数繰り返す第1演算方式により、前記入力された除数の絶対値の逆数を算出する第1逆数演算回路と、
前記簡易演算法の反復計算を前記第2の回数繰り返す第2演算方式により、前記入力された除数の絶対値の逆数を算出する第2逆数演算回路と、
前記第1および第2の回数の比較結果に基づいて、前記第1および第2演算方式のうち演算レイテンシが小さい演算方式を選択する選択回路と、
前記選択された演算方式により算出された逆数を、入力された被除数に乗じて除算を実行する演算器とをさらに備える、半導体装置。
【請求項2】
前記第1算出回路は、前記要求される演算精度と前記誤差算出回路により算出された誤差とに基づいて、複数の演算精度の各々について、前記誤差のサンプル値と前記ニュートンラフソン法の反復計算の回数との関係を示す第2テーブルを参照することにより前記第1の回数を算出する、請求項1に記載の半導体装置。
【請求項3】
前記第2算出回路は、前記要求される演算精度と前記誤差算出回路により算出された誤差とに基づいて、複数の演算精度の各々について、前記誤差のサンプル値と前記簡易演算法の反復計算の回数との関係を示す第3テーブルを参照することにより前記第2の回数を算出する、請求項1に記載の半導体装置。
【請求項4】
前記入力された除数の絶対値をdとし、前記ニュートンラフソン法の反復計算をk回繰り返して得られる前記入力された除数の絶対値の逆数をXkとしたとき、前記第1逆数演算回路は、下記[数1]を用いて前記ニュートンラフソン法の反復計算を前記第1の回数繰り返すことにより前記入力された除数の絶対値の逆数を算出する、
【数1】
請求項1に記載の半導体装置。
【請求項5】
前記入力された除数の絶対値をdとし、前記簡易演算法の反復計算をk回繰り返して得られる前記入力された除数の絶対値の逆数をXkとしたとき、前記第2逆数演算回路は、下記[数2]を用いて前記簡易演算法の反復計算を前記第2の回数繰り返すことにより前記入力された除数の絶対値の逆数を算出する、
【数2】
請求項2に記載の半導体装置。
【請求項6】
前記選択回路は、前記第1の回数が前記第2の回数の1/2以下の場合には前記第1演算方式を選択し、前記第1の回数が前記第2の回数の1/2よりも大きい場合には前記第2演算方式を選択する、請求項1に記載の半導体装置。
【請求項7】
前記第1逆数演算回路および前記第2逆数演算回路は、1つの演算回路として構成されており、
前記第1演算方式に用いられる乗算器および加算器は、前記第2演算方式に用いられる乗算器および加算器と共有化されている、請求項1に記載の半導体装置。
【請求項8】
前記1つの演算回路は、前記選択回路により選択された演算方式により前記入力された除数の絶対値の逆数を算出する、請求項7に記載の半導体装置。
【請求項9】
前記近似値算出回路、前記誤差算出回路、前記第1逆数演算回路、および前記第2逆数演算回路は、1つの演算回路として構成されている、請求項1に記載の半導体装置。
【請求項10】
前記近似値算出回路は、前記第1テーブルを有する、請求項1に記載の半導体装置。
【請求項11】
前記第1算出回路は、前記要求される演算精度に対応する、前記誤差の第1サンプル値と前記ニュートンラフソン法の反復計算の回数との関係を示す第2テーブルを有し、
前記第1算出回路は、前記要求される演算精度と前記誤差算出回路により算出された誤差とに基づいて、前記第2テーブルを参照することにより前記第1の回数を算出する、請求項10に記載の半導体装置。
【請求項12】
前記第2算出回路は、前記要求される演算精度に対応する、前記誤差の第2サンプル値と前記簡易演算法の反復計算の回数との関係を示す第3テーブルを有し、
前記第2算出回路は、前記要求される演算精度と前記誤差算出回路により算出された誤差とに基づいて、前記第3テーブルを参照することにより前記第2の回数を算出する、請求項11に記載の半導体装置。
【請求項13】
プロセッサと、
前記プロセッサの指示により動作する制御回路とを備え、
前記制御回路は、除算回路と、前記除算回路に除数を入力する第1演算回路と、前記除算回路に被除数を入力する第2演算回路とを含み、
前記除算回路は、除数の絶対値の
複数のサンプル値
の各々と当該サンプル値の逆数とを関連付けた第1テーブル、および入力された除数の絶対値に基づいて、前記入力された除数の絶対値の逆数の近似値を算出する近似値算出回路を含み、
前記複数
のサンプル値の各々について、当該サンプル値と、当該サンプル値に隣接するサンプル値との間隔は、当該サンプル値が小さいほど小さく、
前記除算回路は、
前記入力された除数の絶対値と前記近似値との誤差を算出する誤差算出回路と、
要求される演算精度と前記算出された誤差とに基づいて、ニュートンラフソン法の反復計算の第1の回数を算出する第1算出回路と、
前記要求される演算精度と前記算出された誤差とに基づいて、前記ニュートンラフソン法の反復計算の式を変形して当該反復計算に用いられる乗算の一部を省略した簡易演算法の反復計算の第2の回数を算出する第2算出回路と、
前記ニュートンラフソン法の反復計算を前記第1の回数繰り返す第1演算方式により、前記入力された除数の絶対値の逆数を算出する第1逆数演算回路と、
前記簡易演算法の反復計算を前記第2の回数繰り返す第2演算方式により、前記入力された除数の絶対値の逆数を算出する第2逆数演算回路と、
前記第1および第2の回数の比較結果に基づいて、前記第1および第2演算方式のうち演算レイテンシが小さい演算方式を選択する選択回路と、
前記選択された演算方式により算出された逆数を、入力された被除数に乗じて除算を実行する演算器とをさらに含む、半導体装置。
【請求項14】
コンピュータにより実行される除算方法であって、
前記コンピュータの演算処理回路が、除数の絶対値の
複数のサンプル値
の各々と当該サンプル値の逆数とを関連付けた第1テーブル、および入力された除数の絶対値に基づいて、前記入力された除数の絶対値の逆数の近似値を算出するステップを含み、
前記複数
のサンプル値の各々について、当該サンプル値と、当該サンプル値に隣接するサンプル値との間隔は、当該サンプル値が小さいほど小さく、
前記除算方法は、
前記演算処理回路が、前記入力された除数の絶対値と前記近似値との誤差を算出するステップと、
前記演算処理回路が、要求される演算精度と前記算出された誤差とに基づいて、ニュートンラフソン法の反復計算の第1の回数を算出するステップと、
前記演算処理回路が、前記要求される演算精度と前記算出された誤差とに基づいて、前記ニュートンラフソン法の反復計算の式を変形して当該反復計算に用いられる乗算の一部を省略した簡易演算法の反復計算の第2の回数を算出するステップと、
前記演算処理回路が、前記第1および第2の回数の比較結果に基づいて、前記ニュートンラフソン法の反復計算を前記第1の回数繰り返す第1演算方式、および前記簡易演算法の反復計算を前記第2の回数繰り返す第2演算方式のうち演算レイテンシが小さい演算方式を選択するステップと、
前記演算処理回路が、前記選択された演算方式により算出された、前記入力された除数の絶対値の逆数を、入力された被除数に乗じて除算を実行するステップとを含む、除算方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、半導体装置、および除算方法に関し、例えば、除数の逆数を被除数に乗じて除算を行なう半導体装置、および除算方法に関する。
【背景技術】
【0002】
一般に、計算機やコンピュータで行われる四則演算のうち、除算は最も時間を要する演算である。例えば、代表的な乗算型除算として、ニュートンラフソン法が知られている。ニュートンラフソン法は、与えられた除数の逆数の近似値を得て、規定の演算式の反復計算を行なうことにより所定精度の逆数を得て、これを被除数に乗じて除算を実現する方法である。
【0003】
例えば、特許第4313467号公報(特許文献1)は、小容量メモリを用いた除算方式を開示している。この除算方式では、与えられた除数の仮数部を表現するビット配列をMSB(most significant bit)の1ビットを除き3つのビットフィールドに分ける。さらに、この除算方式では、そのうちMSB側のビットフィールドの内容をインデックスとしてメモリから2つの値を引きだし、これらと中間のビットフィールドの内容とを用いて一次近似を行なってニュートンラフソン法の反復計算の初期値を計算する。また、特許文献1では、ニュートンラフソン法の反復計算の式を変形して差分を分離し、この差分の演算に必要な情報が少ないことを利用して、反復計算に用いられる乗算回路の一部を省略している。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1では、除数の仮数部のMSBのビットフィールドをメモリのインデックスとして用いているため、メモリに格納されるサンプル値の間隔が均等になる。そのため、除数の値が小さい場合には逆数の近似値の誤差が大きくなる。そして、このように逆数の初期値の誤差が大きい場合には、ニュートンラフソン法を変形した式では解の収束率が悪いため、必要とする演算精度の解を得るために反復計算を繰り返す回数が多くなり、その結果、演算レイテンシが大きくなるという問題がある。
【0006】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
一実施の形態に従う半導体装置は、除数の絶対値のサンプル値と当該サンプル値の逆数とを関連付けた第1テーブル、および入力された除数の絶対値に基づいて、入力された除数の絶対値の逆数の近似値を算出する。複数のサンプル値の各々について、当該サンプル値と、当該サンプル値に隣接するサンプル値との間隔は、当該サンプル値が小さいほど小さい。半導体装置は、要求される演算精度と、入力された除数の絶対値と近似値との誤差とに基づいて、ニュートンラフソン法の反復計算の第1の回数を算出し、当該演算精度と当該算出された誤差とに基づいて、簡易演算法の反復計算の第2の回数を算出する。半導体装置は、第1および第2の回数の比較結果に基づいて、ニュートンラフソン法の反復計算を第1の回数繰り返す第1演算方式および簡易演算法の反復計算を第2の回数繰り返す第2演算方式のうち演算レイテンシが小さい演算方式を選択する。半導体装置は、選択された演算方式により算出された逆数を、入力された被除数に乗じて除算を実行する。
【0008】
一実施の形態に従う半導体装置は、プロセッサと、プロセッサの指示により動作する制御回路とを備える。制御回路は、除算回路と、除算回路に除数を入力する第1演算回路と、除算回路に被除数を入力する第2演算回路とを含む。除算回路は、除数の絶対値のサンプル値と当該サンプル値の逆数とを関連付けた第1テーブル、および入力された除数の絶対値に基づいて、入力された除数の絶対値の逆数の近似値を算出する。複数のサンプル値の各々について、当該サンプル値と、当該サンプル値に隣接するサンプル値との間隔は、当該サンプル値が小さいほど小さい。除算回路は、要求される演算精度と、入力された除数の絶対値と近似値との誤差とに基づいて、ニュートンラフソン法の反復計算の第1の回数を算出し、当該演算精度と当該算出された誤差とに基づいて、簡易演算法の反復計算の第2の回数を算出する。除算回路は、第1および第2の回数の比較結果に基づいて、ニュートンラフソン法の反復計算を第1の回数繰り返す第1演算方式および簡易演算法の反復計算を第2の回数繰り返す第2演算方式のうち演算レイテンシが小さい演算方式を選択する。除算回路は、選択された演算方式により算出された逆数を、入力された被除数に乗じて除算を実行する。
【0009】
一実施の形態に従う除算方法は、除数の絶対値のサンプル値と当該サンプル値の逆数とを関連付けた第1テーブル、および入力された除数の絶対値に基づいて、入力された除数の絶対値の逆数の近似値を算出するステップを含む。複数のサンプル値の各々について、当該サンプル値と、当該サンプル値に隣接するサンプル値との間隔は、当該サンプル値が小さいほど小さい。除算方法は、入力された除数の絶対値と近似値との誤差を算出するステップと、要求される演算精度と算出された誤差とに基づいて、ニュートンラフソン法の反復計算の第1の回数を算出するステップと、要求される演算精度と算出された誤差とに基づいて、簡易演算法の反復計算の第2の回数を算出するステップとをさらに含む。除算方法は、第1および第2の回数の比較結果に基づいて、ニュートンラフソン法の反復計算を第1の回数繰り返す第1演算方式、および簡易演算法の反復計算を第2の回数繰り返す第2演算方式のうち演算レイテンシが小さい演算方式を選択するステップを含む。除算方法は、選択された演算方式により算出された、入力された除数の絶対値の逆数を、入力された被除数に乗じて除算を実行するステップを含む。
【発明の効果】
【0010】
一実施の形態によれば、要求される演算精度を有する除数の逆数をより高速に得ることができる。
【図面の簡単な説明】
【0011】
【
図1】実施の形態1に従う半導体装置の構成例を示す模式図である。
【
図2】逆数の近似値を求めるために利用されるルックアップテーブルの一例を示す図である。
【
図3】除数と、除数の逆数との関係を説明するための図である。
【
図4】ニュートンラフソン法の反復計算の回数を求めるために利用されるルックアップテーブルの一例を示す図である。
【
図5】簡易演算法の反復計算の回数を求めるために利用されるルックアップテーブルの一例を示す図である。
【
図6】実施の形態1に従う逆数演算回路の構成例を示す模式図である。
【
図7】実施の形態1に従う他の逆数演算回路の構成例を示す模式図である。
【
図8】実施の形態1に従う半導体装置の処理手順を示すフローチャートである。
【
図9】実施の形態1に従うニュートンラフソン法の反復計算を用いる演算方式の処理手順を示すフローチャートである。
【
図10】実施の形態1に従う簡易演算法の反復計算を用いる演算方式の処理手順を示すフローチャートである。
【
図11】実施の形態2に従う半導体装置の構成例を示す模式図である。
【
図12】実施の形態2に従う逆数演算回路の回路構成例を示す模式図である。
【
図13】実施の形態3に従う半導体装置の構成例を示す模式図である。
【
図14】実施の形態4に従う半導体装置の構成例を示す図である。
【発明を実施するための形態】
【0012】
以下、各実施形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
【0013】
[実施の形態1]
<全体構成>
図1は、実施の形態1に従う半導体装置5の構成例を示す模式図である。
図1を参照して、半導体装置5は、CPU(Central Processing Unit)10と、メモリ20,30,40と、除算回路100とを含む。なお、半導体装置5は、図示しないROM(Read Only Memory)、RAM(Random access memory)、フラッシュメモリ等を含んでいてもよい。
【0014】
CPU10は、フラッシュメモリ等の不揮発性メモリに記憶されたプログラムを読み出して実行することで、半導体装置5の各部の動作を制御する。
【0015】
メモリ20は、除数の逆数を求めるために利用されるルックアップテーブル(以下、「LUT」とも称する。)21を格納する。メモリ30は、ニュートンラフソン法の反復計算の回数を得るために利用されるLUT31を格納する。メモリ40は、ニュートンラフソン法の反復計算の式を変形した簡易演算法の反復計算の回数を得るために利用されるLUT41を格納する。
【0016】
実施の形態1では、メモリ20,30,40に、それぞれLUT21,31,41を格納する構成について説明するが、当該構成に限られない。例えば、1つのメモリを複数のセクタに分けて構成し、3つの異なるセクタにそれぞれLUT21,31,41を設定する構成であってもよい。
【0017】
除算回路100は、SFR(Special Function Register)回路120と、ステートマシン回路140と、演算処理回路160とを含む。
【0018】
SFR回路120は、除算の動作を制御するパラメータ、および除算の演算結果等を格納する。具体的には、SFR回路120は、被除数Yを格納するレジスタ121と、除数Dを格納するレジスタ122と、演算精度Pを格納するレジスタ123と、起動制御情報を格納するレジスタ124と、完了通知情報を格納するレジスタ125と、演算処理回路160により算出された商Qを格納するレジスタ126とを含む。
【0019】
被除数Y、除数D、演算精度Pおよび起動制御情報の各情報は、CPU10により設定される。例えば、CPU10は、半導体装置5を用いるシステムから要求される演算精度を、演算精度Pに設定する。完了通知情報および商Qは、SFR回路120からCPU10へ出力される。
【0020】
ステートマシン回路140は、除算の動作制御を行い演算の完了を通知する。具体的には、ステートマシン回路140は、カウンタ回路142と、サブカウンタ回路144とを含む。
【0021】
カウンタ回路142は、演算処理回路160に設けられた逆数演算回路172A,172Bの動作を制御するためのカウンタkを出力する。サブカウンタ回路144は、逆数演算回路172Aの動作を制御するためのサブカウンタiを出力する。
【0022】
演算処理回路160は、符号処理回路162,182と、近似値算出回路164と、誤差算出回路166と、回数算出回路168,170と、逆数演算回路172A,172Bと、比較器176と、出力回路178と、乗算器180とを含む。
【0023】
符号処理回路162は、SFR回路120から被除数Yおよび除数Dの入力を受け付けて、符号処理を実行する。具体的には、符号処理回路162は、被除数Yが正の数の場合には被除数の絶対値yに被除数Yをそのまま代入し(すなわち、y=Y)、被除数Yが負の数の場合には被除数の絶対値yに被除数Yの絶対値を代入する(すなわち、y=|Y|)。符号処理回路162は、除数Dが正の数の場合には除数の絶対値dに除数Dをそのまま代入し(すなわち、d=D)、除数Dが負の数の場合には除数の絶対値dに除数Dの絶対値を代入する(すなわち、d=|D|)。
【0024】
また、被除数Yおよび除数Dの両方が正の数または負の数の場合、符号処理回路162は、演算処理回路160から最終的に出力される商Qが正の数であることを示す値“0”を符号情報sに代入する(すなわち、s=0)。被除数Yおよび除数Dの一方が正の数であり他方が負の数である場合、符号処理回路162は、商Qが負の数であることを示す値“1”を符号情報sに代入する(すなわち、s=1)。
【0025】
近似値算出回路164は、入力された絶対値dに基づいて、メモリ20に格納されたLUT21を参照することにより絶対値dの逆数の近似値X0を算出する。近似値X0は、絶対値dの逆数の初期値に対応する。
【0026】
図2は、逆数の近似値を求めるために利用されるルックアップテーブルの一例を示す図である。
図2を参照して、LUT21は、絶対値dのサンプル値eと、サンプル値eの逆数である切片f(すなわち、f=1/d)と、傾きgとを互いに関連付けて格納する。
【0027】
ここで、傾きgは、サンプル値eおよび切片fで構成される座標点(e,f)において、あるサンプル値eに対応する座標点と、次のサンプル値eに対応する座標点とを通る直線の傾きを示している。例えば、サンプル値e=2、切片f=0.5の場合、傾きgは、座標点(2,0.5)と座標点(4,0.25)とを通る直線の傾き“-0.125”となる。
【0028】
近似値算出回路164は、絶対値dのすべてのビットフィールドをインデックスとして、サンプル値e≦絶対値dが成立する最も近いサンプル値eを特定し、当該特定されたサンプル値eに関連付けられた切片fおよび傾きgをメモリ20から読み出す。近似値算出回路164は、以下の式(1)のように線形補間を行なうことにより、逆数の近似値X0を算出する。
【0029】
【0030】
ここで、LUT21では、複数のサンプル値eの各々について、当該サンプル値eと、当該サンプル値eに隣接するサンプル値eとの間隔は、当該サンプル値eが小さいほど小さくなるように構成される。例えば、No.2に対応するサンプル値e(=2)と、No.3に対応するサンプル値e(=4)との間隔である“2”は、No.3に対応するサンプル値e(=4)とNo.4に対応するサンプル値e(=8)との間隔である“4”よりも小さい。
図2の例では、サンプル値eと、当該サンプル値eよりも大きくかつ隣接するサンプル値eとの間隔は、1,2,4,8,・・・というように2のべき乗で変化する。このように、サンプル値eをとっている理由を
図3を参照しながら説明する。
【0031】
図3は、除数と、除数の逆数との関係を説明するための図である。
図3を参照して、曲線710は、除数と、当該除数の逆数との関係を示している。
図3に示すように、互いに隣接する2つのサンプル値eの間隔Lを均等にした場合、サンプル値eが大きい場合には線形補間により求められる逆数の近似値の誤差は小さいが、サンプル値eが小さい場合には逆数の近似値の誤差が大きくなる。
【0032】
例えば、点Z1と点Z2とを結ぶ直線701と曲線710との誤差は、点Z2と点Z3とを結ぶ直線702と曲線710との誤差よりも大きい。すなわち、サンプル値eが小さいほど逆数の近似値の誤差が大きくなる。そこで、本実施の形態に従うLUT21では、
図2に示すように、サンプル値eと、当該サンプル値eに隣接するサンプル値eとの間隔は、当該サンプル値eが小さいほど小さくなるように構成される。これにより、サンプル値eが小さい場合であっても逆数の近似値の誤差を小さくでき、ニュートンラフソン法の反復計算を高速化できる。
【0033】
上述したように、特許文献1に係る技術では、除数の仮数部のMSBのビットフィールドをメモリのインデックスとして用いているため、メモリに格納されるサンプル値の間隔が均等になる。したがって、除数の値が小さい場合には逆数の近似値の誤差が大きくなるため、ニュートンラフソン法を用いた反復計算の高速化が困難となる。
【0034】
再び、
図1を参照して、誤差算出回路166は、近似値算出回路164により算出された近似値X
0と、符号処理回路から出力された絶対値dとの入力を受け付ける。誤差算出回路166は、絶対値dと近似値X
0との誤差を示す誤差率βを算出する。誤差率βは、以下の式(2)により算出される。
【0035】
【0036】
回数算出回路168は、誤差率βと、SFR回路120に設定されている演算精度Pとの入力を受け付ける。回数算出回路168は、誤差率βと演算精度Pとに基づいて、メモリ30に格納されたLUT31を参照することにより、ニュートンラフソン法の反復計算の回数を示す反復回数mを算出する。
【0037】
図4は、ニュートンラフソン法の反復計算の回数を求めるために利用されるルックアップテーブルの一例を示す図である。
図4を参照して、LUT31は、複数の演算精度(例えば、8ビット、16ビット、32ビット)の各々について、誤差率βのサンプル値β
max1とニュートンラフソン法の反復計算の回数との関係を示している。
【0038】
ここで、サンプル値βmax1は、要求される演算精度Pで、指定された反復回数を実現する場合に許容される誤差率βの最大値を示している。例えば、要求される演算精度Pが“8ビット”であり、指定された反復回数が“4”であるとすると、誤差率βは“0.67713”よりも大きくてもよいが、“0.82288”以下でなければならない。また、反復回数が同一である場合、要求される演算精度Pが高いほどサンプル値βmax1は小さくなる。例えば、反復回数が“3”である場合、演算精度Pが8ビットの場合には誤差率βは“0.67713”まで許容されるが、演算精度Pが32ビットの場合には誤差率βは“023940”までしか許容されない。
【0039】
回数算出回路168は、演算精度Pに対するサンプル値βmax1を参照することにより、誤差率βに適した反復回数mを求めることができる。具体的には、回数算出回路168は、演算精度Pに対応するサンプル値βmax1≧誤差率βが成立する最も近いサンプル値βmax1を特定する。例えば、演算精度Pが“8ビット”であり誤差率βが“0.56845”である場合には、サンプル値βmax1“0.67713”が特定される。
【0040】
回数算出回路168は、当該特定されたサンプル値βmax1に関連付けられた反復回数をメモリ30から読み出す。回数算出回路168は、読み出した反復回数を反復回数mとして算出する。LUT31を参照することにより演算精度Pを満たす適切な反復回数mを容易に得ることができる。
【0041】
再び、
図1を参照して、回数算出回路170は、誤差率βおよび演算精度Pの入力を受け付ける。回数算出回路170は、誤差率βと演算精度Pとに基づいて、メモリ40に格納されたLUT41を参照することにより、ニュートンラフソン法の反復計算の式を変形した簡易演算法の反復計算の回数を示す反復回数nを算出する。
【0042】
図5は、簡易演算法の反復計算の回数を求めるために利用されるルックアップテーブルの一例を示す図である。
図5を参照して、LUT41は、複数の演算精度(例えば、8ビット、16ビット、32ビット)の各々について、誤差率βのサンプル値β
max2と簡易演算法の反復計算の回数との関係を示している。
【0043】
図4と同様の考え方により、例えば、要求される演算精度Pが“8ビット”であり、指定された反復回数が“4”であるとすると、誤差率βは“0.28717”よりも大きくてもよいが、“0.35355”以下でなければならない。なお、反復回数が同一である場合、簡易演算法では、ニュートンラフソン法よりも小さい誤差率βが要求される。例えば、反復回数が“3”であり、かつ演算精度Pが8ビットの場合を想定する。この場合、ニュートンラフソン法では、誤差率βは“0.67713”まで許容される(
図4参照)。一方、簡易演算法では、誤差率βは“0.35355”までしか許容されない(
図5参照)。
【0044】
回数算出回路170は、演算精度Pに対するサンプル値βmax2を参照することにより、誤差率βに適した反復回数nを求めることができる。具体的には、回数算出回路170は、演算精度Pに対応するサンプル値βmax2≧誤差率βが成立する最も近いサンプル値βmax2を特定し、当該特定されたサンプル値βmax2に関連付けられた反復回数をメモリ40から読み出す。回数算出回路170は、読み出した反復回数を反復回数nとして算出する。LUT41を参照することにより演算精度Pを満たす適切な反復回数nを容易に得ることができる。
【0045】
再び、
図1を参照して、逆数演算回路172Aは、絶対値d、近似値X
0、誤差率βおよび反復回数mの入力を受け付ける。逆数演算回路172Aは、絶対値d、近似値X
0、誤差率βおよび反復回数mと、ニュートンラフソン法の反復計算の式(3)および式(4)とを用いて、絶対値dの逆数X
mを算出する。なお、カウンタk=0の場合には、反復回数が1回の場合の逆数X
1が式(3)で算出される。
【0046】
【0047】
カウンタk>0の場合には、反復回数が“k+1”回(k:1以上の整数)の場合の逆数Xk+1が式(4)で表される。
【0048】
【0049】
逆数演算回路172Aは、式(3)および式(4)を用いて、ニュートンラフソン法の反復計算を、回数算出回路168により算出された反復回数mだけ繰り返す演算方式Aにより、逆数Xmを算出する。
【0050】
ニュートンラフソン法の反復計算の式(4)では、逆数Xk+1は、前回の逆数Xkと絶対値dとの積を2より減じた値に、前回の逆数Xkを乗算した値である。そのため、逆数X1を算出するための乗算回数は2回であり、加減算回数は1回となり、逆数X2を算出するための乗算回数は4回であり、加減算回数は2回となる。以下同様に、逆数Xkを算出するための乗算回数は2k回であり、加減算回数はk回となる。なお、逆数演算回路172Aの具体的な回路構成については後述する。
【0051】
逆数演算回路172Bは、近似値X0、誤差率βおよび反復回数nの入力を受け付ける。逆数演算回路172Bは、入力された近似値X0、誤差率βおよび反復回数nと、ニュートンラフソン法の反復計算の式(4)を変形して簡易化した式(5)、式(6)および式(7)とを用いて、絶対値dの逆数Xnを算出する。式(5)には、反復回数が“k+1”回の場合の逆数Xk+1が表されている。
【0052】
【0053】
また、上記式(5)~(7)を用いると、逆数Xk+1は以下の式(8)のように表現することもできる。
【0054】
【0055】
逆数演算回路172Bは、式(5)または式(8)を用いて、簡易演算法の反復計算を、回数算出回路170により算出された反復回数nだけ繰り返す演算方式Bにより、逆数Xnを算出する。
【0056】
簡易演算法の反復計算の式(5)または式(8)では、逆数Xk+1は、逆数の初期値(すなわち、近似値)であるX0に、誤差率βのi乗の総和を乗算した値となる。そのため、逆数X1を算出するための乗算回数は2回であり、逆数X2を算出するための乗算回数は2回であり、以下同様に、逆数Xkを算出するための乗算回数は“k+1”回となる。一方、ニュートンラフソン法では、逆数Xkを算出するための乗算回数は2k回である。そのため、簡易演算法ではニュートンラフソン法の反復計算に用いられる乗算の一部が省略されていることがわかる。
【0057】
なお、簡易演算法では、逆数X1を算出するための加減算回数は2回であり、逆数X2を算出するための加減算回数は3回である。以下同様に考えて、逆数Xkを算出するための加減算回数は“k+1”回となる。逆数演算回路172Bの具体的な回路構成については後述する。
【0058】
このように、ニュートンラフソン法の反復計算の場合、反復回数が1回増加するごとに乗算回数が2回ずつ増加していくが、簡易演算法の反復計算の場合、反復回数が1回増加するごとに乗算回数が1回ずつしか増加しない。このことから、簡易演算法の反復計算の乗算回数は、ニュートンラフソン法の反復計算の乗算回数の1/2となる。また、ニュートンラフソン法および簡易演算法ともに、反復回数が1回増加するごとに加減算回数が1回ずつ増加していく。ただし、同一の反復回数の場合には、簡易演算法の方がニュートンラフソン法よりも加減算回数が1回だけ多くなる。
【0059】
ここで、演算レイテンシに関しては、乗算回数の方が加減算回数よりも大きく影響する。そのため、反復回数mと反復回数nが同一である場合には、簡易演算法を用いる逆数演算回路172Bの演算レイテンシは、ニュートンラフソン法を用いる逆数演算回路172Aの演算レイテンシの約1/2で済む。このことから、n/2<mが成立する場合には、簡易演算法の反復計算を反復回数nだけ繰り返す演算方式Bの方が、ニュートンラフソン法の反復計算を反復回数mだけ繰り返す演算方式Aよりも演算レイテンシが小さくなる。
【0060】
比較器176は、反復回数mと反復回数nの1/2とを比較し、比較結果selを出力する。この比較結果selは、演算方式Aおよび演算方式Bのうち演算レイテンシが小さい演算方式を示す情報である。すなわち、比較器176は、反復回数mと反復回数nの1/2との比較結果に基づいて、演算方式Aおよび演算方式Bのうち演算レイテンシが小さい演算方式を選択する機能を有する。
【0061】
具体的には、比較器176は、n/2≧mが成立する場合には、比較結果selに“1”を代入して出力する。この場合、比較結果selは、演算レイテンシが小さい演算方式として演算方式Aが選択されたことを示している。比較器176は、n/2<mが成立する場合には、比較結果selに“0”を代入して出力する。この場合、比較結果selは、演算レイテンシが小さい演算方式として演算方式Bが選択されたことを示している。
【0062】
出力回路178は、比較結果selに基づいて、逆数演算回路172Aの演算方式Aにより得られる逆数Xm、および逆数演算回路172Bの演算方式Bにより得られる逆数Xnのいずれかを絶対値dの逆数Xとして乗算器180に出力する。
【0063】
具体的には、出力回路178は、比較結果selが“1”である(すなわち、演算方式Aの方が演算レイテンシが小さい)場合には、演算方式Aにより得られる逆数Xmを、絶対値dの逆数Xとして出力する。一方、出力回路178は、比較結果selが“0”である(すなわち、演算方式Bの方が演算レイテンシが小さい)場合には、演算方式Bにより得られる逆数Xnを、絶対値dの逆数Xとして出力する。
【0064】
乗算器180は、逆数Xと被除数yとの入力を受け付ける。乗算器180は、逆数Xと被除数yとを乗算して、商の絶対値qを算出する。
【0065】
符号処理回路182は、符号情報sと商の絶対値qとの入力を受け付ける。符号処理回路182は、符号情報sが“0”の場合には商Qに絶対値qを代入し、符号情報sが“1”の場合には商Qに絶対値qの2の補数を代入する。算出された商Qは、SFR回路120のレジスタ126に格納される。
【0066】
上述した処理によって、被除数Yと除数Dに対して、半導体装置5を用いるシステム等から要求される演算精度Pの商Qが算出された場合に、ステートマシン回路140は完了通知を生成する。完了通知は、レジスタ125に格納される。
【0067】
<逆数演算回路の構成例>
図6は、実施の形態1に従う逆数演算回路172Aの構成例を示す模式図である。
図6を参照して、逆数演算回路172Aは、演算回路200,202,204と、保持回路206と、出力回路208とを含む。
【0068】
演算回路200は、入力された近似値X0および誤差率βを用いた式(3)で示される演算により、1回目の反復計算結果である逆数X1を算出する。演算回路202は、入力された絶対値dおよびk回目の反復計算結果である逆数Xkを乗算して一時変数tmpを算出する。演算回路204は、一時変数tmpおよび逆数Xkを乗算して、“k+1”回目の反復計算結果である逆数Xk+1を算出する。
【0069】
出力回路208は、カウンタkが0(すなわち、演算開始)の場合には、演算回路200の演算結果(すなわち、逆数X1)を逆数Xk+1として出力し、カウンタkがk>0の場合には、演算回路204の演算結果を逆数Xk+1として出力する。保持回路206は、サブカウンタiが指定するタイミングに従って逆数Xk+1を保持する。このような回路構成により、反復回数mに対応する逆数Xmが算出される。
【0070】
図7は、実施の形態1に従う他の逆数演算回路172Bの構成例を示す模式図である。
図7を参照して、逆数演算回路172Bは、演算回路220,222,224と、保持回路226,232と、出力回路228,230,234とを含む。
【0071】
出力回路228は、カウンタkが0(すなわち、演算開始)の場合には固定値“1”を選択して演算結果Rk(すなわち、R0)として出力し、カウンタkがk>0の場合にはk回目の演算結果Rkを選択して出力する。
【0072】
演算回路220は、誤差率βと演算結果Rkとを乗算して、“k+1”回目の演算結果Rk+1を算出する。出力回路230は、カウンタkが0の場合には誤差率βを選択して演算結果Rk+1(すなわち、R1)として出力し、カウンタkがk>0の場合には、演算回路220により算出された演算結果Rk+1を選択して出力する。
【0073】
出力回路234は、カウンタkが0の場合には固定値“1”を選択して演算結果Tk(すなわち、T0)として出力し、カウンタkがk>0の場合にはk回目の演算結果Tkを選択して出力する。
【0074】
演算回路222は、演算結果Tkと演算結果Rk+1とを加算することにより、“k+1”回目の演算結果Tk+1を算出する。演算回路224は、近似値X0と演算結果Tk+1を乗算することにより、“k+1”回目の逆数の演算結果である逆数Xk+1を算出する。保持回路226は、演算回路220により算出された演算結果Rk+1を保持する。保持回路232は、演算回路222により算出された演算結果Tk+1を保持する。このような回路構成により、反復回数nに対応する逆数Xnが算出される。
【0075】
<処理手順>
図8は、実施の形態1に従う半導体装置5の処理手順を示すフローチャートである。
図8を参照して、半導体装置5は、被除数Y、除数Dおよび演算精度Pを設定する(ステップS300)。典型的には、CPU10は、被除数Y、除数D、演算精度Pを、SFR回路120のレジスタ121,122,123にそれぞれ設定する。
【0076】
ステートマシン回路140は、レジスタ124から起動制御情報を読み出して、演算処理回路160に演算を開始させる(ステップS302)。
【0077】
演算処理回路160は、被除数Yおよび除数Dの符号処理を実行する(ステップS304)。具体的には、符号処理回路162は、被除数Yおよび除数Dに基づいて、被除数Yの絶対値yと、除数Dの絶対値dと、符号情報sとを生成する。
【0078】
演算処理回路160は、絶対値dの近似値X0を算出する(ステップS306)。具体的には、近似値算出回路164は、絶対値dに基づいて、メモリ20に格納されたLUT21を参照することにより近似値X0を算出する。
【0079】
演算処理回路160は、誤差率βを算出する(ステップS308)。具体的には、誤差算出回路166は、絶対値dと近似値X0とを用いて式(2)に示された演算を実行することにより、誤差率βを算出する。
【0080】
演算処理回路160は、ニュートンラフソン法の反復計算の回数を示す反復回数mを算出する(ステップS310)。具体的には、回数算出回路168は、誤差率βと演算精度Pとに基づいて、メモリ30に格納されたLUT31を参照することにより反復回数mを算出する。
【0081】
演算処理回路160は、簡易演算法の反復計算の回数を示す反復回数nを算出する(ステップS312)。具体的には、回数算出回路170は、誤差率βと演算精度Pとに基づいて、メモリ40に格納されたLUT41を参照することにより反復回数nを算出する。
【0082】
演算処理回路160は、n/2≧mが成立するか否かを判断する(ステップS314)。反復回数mが反復回数nの1/2以下である場合には(ステップS314においてYES)、演算処理回路160は演算方式Aにより絶対値dの逆数Xを算出する(ステップS316)。ステップS316の詳細については後述する。
【0083】
反復回数mが反復回数nの1/2よりも大きい場合には(ステップS314においてNO)、演算処理回路160は演算方式Bにより絶対値dの逆数Xを算出する(ステップS318)。ステップS318の詳細については後述する。
【0084】
演算処理回路160は、被除数Yの絶対値yと、ステップS316またはS318において演算された逆数Xとを乗算して商の絶対値qを算出する(ステップS320)。演算処理回路160は、商の絶対値qの符号処理を実行して商Qを算出して(ステップS322)、処理を終了する。このとき、ステートマシン回路140は、商Qの演算が完了したことを示す完了通知を生成する。
【0085】
図9は、実施の形態1に従うニュートンラフソン法の反復計算を用いる演算方式の処理手順を示すフローチャートである。具体的には、
図9には、
図8中のステップS316の具体的な処理手順が示されている。
【0086】
図9を参照して、カウンタ回路142は、演算中の反復回数を示すカウンタkを0に設定する(ステップS340)。逆数演算回路172Aは、式(3)を用いて1回目の逆数の演算結果である逆数X
1を算出する(ステップS342)。このとき、逆数演算回路172Aは、逆数X
1を保持する。
【0087】
逆数演算回路172Aは、カウンタkが反復回数mと同一であるか否かを判断する(ステップS344)。カウンタkが反復回数mと同一ではない場合(ステップS344においてNO)、カウンタ回路142は、カウンタkをインクリメントする(ステップS346)。
【0088】
逆数演算回路172Aは、k回目の逆数の演算結果である逆数Xkと絶対値dとを乗算することにより一時変数tmpを算出する(ステップS348)。逆数演算回路172Aは、逆数Xkと、一時変数tmpを2から減じた値とを乗算することにより“k+1”回目の逆数の演算結果である逆数Xk+1を算出して(ステップS350)、ステップS344に戻る。逆数演算回路172Aは、逆数Xk+1を保持する。
【0089】
ここで、カウンタkが反復回数mと同一である場合には(ステップS344においてYES)、逆数演算回路172Aは処理を終了する。このとき、ステップS350において算出された逆数Xk+1が、絶対値dの逆数Xとなる。
【0090】
図10は、実施の形態1に従う簡易演算法の反復計算を用いる演算方式の処理手順を示すフローチャートである。具体的には、
図10には、
図8中のステップS318の具体的な処理手順が示されている。
【0091】
図10を参照して、カウンタ回路142は、演算中の反復回数を示すカウンタkを0に設定する(ステップS360)。逆数演算回路172Bは、演算中の演算結果R
k,T
kに1を代入する(ステップS362)。
【0092】
逆数演算回路172Bは、誤差率βと演算結果Rkとを乗算して、“k+1”回目の演算結果Rk+1を算出する(ステップS364)。ただし、1回目の演算結果R1は誤差率βとなるため、上記乗算は行なわれない。逆数演算回路172Bは、演算結果Rk+1を保持する。
【0093】
逆数演算回路172Bは、演算結果Tkと演算結果Rk+1とを加算することにより、“k+1”回目の演算結果Tk+1を算出する(ステップS366)。逆数演算回路172Bは、演算結果Tk+1を保持する。逆数演算回路172Bは、カウンタkが反復回数nと同一であるか否かを判断する(ステップS368)。
【0094】
カウンタkが反復回数nと同一ではない場合(ステップS368においてNO)、カウンタ回路142は、カウンタkをインクリメントする(ステップS370)。処理は、ステップS364に戻る。カウンタkが反復回数nと同一である場合(ステップS370においてYES)、逆数演算回路172Bは、近似値X0と演算結果Tk+1を乗算することにより、“k+1”回目の逆数の演算結果である逆数Xk+1を算出して(ステップS372)、処理を終了する。このとき、ステップS372において算出された逆数Xk+1が、絶対値dの逆数Xとなる。
【0095】
<利点>
実施の形態1によると、除数が小さいほどサンプル値を多くとったLUT21を用いることで、除数が小さい場合であっても、除数の逆数の近似値の誤差を小さくすることができる。これにより、ニュートンラフソン法および簡易演算法の反復計算の高速化を図ることができる。さらに、反復回数mと反復回数nとの比較結果に基づいて、演算レイテンシの小さい演算方式を選択することで、要求される演算精度の解をより高速に得ることができる。
【0096】
[実施の形態2]
実施の形態2では、実施の形態1において、ニュートンラフソン法の反復計算に用いられる演算器(乗算器および加算器)と、簡易演算法の反復計算に用いられる演算器(乗算器および加算器)とを共有化した構成について説明する。
【0097】
<全体構成>
図11は、実施の形態2に従う半導体装置5Aの構成例を示す模式図である。
図11を参照して、半導体装置5Aは、CPU10と、メモリ20,30,40と、除算回路100Aとを含む。半導体装置5Aは、
図1中の半導体装置5の除算回路100を、除算回路100Aに置き換えたものに相当する。除算回路100Aは、除算回路100から逆数演算回路172A、逆数演算回路172B、および出力回路178を削除し、その代わりに逆数演算回路184を設けた構成に相当する。
【0098】
逆数演算回路184は、逆数演算回路172A,172Bおよび出力回路178の各機能を有する。すなわち、逆数演算回路184は、逆数演算回路172A,172Bおよび出力回路178を1つの演算回路として構成したものである。また、逆数演算回路184では、逆数演算回路172Aが実行する演算方式Aに用いられる乗算器および加算器は、逆数演算回路172Bが実行する演算方式Bに用いられる乗算器および加算器と共有化されている。
【0099】
比較器176から出力される比較結果selが“1”の場合(すなわち、演算レイテンシが小さい演算方式として演算方式Aが選択されている場合)には、逆数演算回路184は、逆数演算回路172Aとして動作して、ニュートンラフソン法の反復計算をm回繰り返す演算方式Aにより、絶対値dの逆数Xを演算する。比較器176から出力される比較結果selが“0”の場合(すなわち、演算レイテンシが小さい演算方式として演算方式Bが選択されている場合)には、逆数演算回路184は、逆数演算回路172Bとして動作して、簡易演算法の反復計算をn回繰り返す演算方式Bにより、絶対値dの逆数Xを演算する。
【0100】
図12は、実施の形態2に従う逆数演算回路の回路構成例を示す模式図である。
図12を参照して、逆数演算回路184は、入力生成回路400,402,408,410と、加算器404と、保持回路406,416,418と、乗算器412と、保持値選択回路414とを含む。
【0101】
入力生成回路400は、保持回路406により保持されている値add_ff、比較結果sel、およびカウンタkに基づいて、値add_aを出力する。入力生成回路402は、誤差率β、比較結果sel、カウンタk、保持回路418に保持されている値mul_ff2、および乗算器412から出力される乗算値mul_q1に基づいて、値add_bを出力する。
【0102】
加算器404は、値add_aと値add_bとの加算値add_qを出力する。保持回路406は、値add_qを保持し、値add_ffを出力する。そのため、値add_qと値add_ffとは実質的に同一である。
【0103】
入力生成回路408は、保持回路416により保持されている値mul_ff1、近似値X0、誤差率β、比較結果sel、カウンタk、およびサブカウンタiに基づいて、値mul_aを出力する。入力生成回路410は、近似値X0、誤差率β、絶対値d、加算値add_q、保持回路406により保持されている値add_ff、比較結果sel、カウンタk、およびサブカウンタiに基づいて、値mul_bを出力する。
【0104】
乗算器412は、値mul_aおよび値mul_bの乗算値mul_q1を出力する。保持値選択回路414は、保持回路416により保持されている値mul_ff1、誤差率β、乗算値mul_q1、比較結果sel、カウンタk、およびサブカウンタiに基づいて、値mul_q2を出力する。保持回路416は、値mul_q2を保持し、値mul_ff1を出力する。そのため、値mul_q2と値mul_ff1とは実質的に同一である。保持回路418は、値mul_q1を保持し、値mul_ff2を出力する。そのため、値mul_q1と値mul_ff2とは実質的に同一である。
【0105】
<処理手順>
実施の形態2に従う半導体装置5Aの処理手順は、
図8に示す半導体装置5の処理手順におけるステップS314~S318の処理を逆数演算回路184が実行するように構成したものである。
【0106】
ここでは、実施の形態2において、逆数演算回路184が演算方式Aを用いて逆数Xを算出する処理(すなわち、ステップS316に対応する処理)と、演算方式Bを用いて逆数Xを算出する処理(すなわち、ステップS318に対応する処理)について説明する。
【0107】
逆数演算回路184は、比較結果selが“1”の場合に演算方式Aを用いて逆数Xを算出する処理を実行する。この場合、
図9に示すフローチャートが適用される。
【0108】
図9および
図12を参照して、ステップS340に対応する処理として、カウンタ回路142はカウンタkに“0”を代入し、サブカウンタ回路144はサブカウンタiに“1”を代入する。
【0109】
続いて、ステップS342に対応する処理として、次の処理が実行される。具体的には、入力生成回路400は、値add_aに“1”を代入して出力する。入力生成回路402は、値add_bに“β”を代入して出力する。そのため、加算器404により算出される加算値add_qは“1+β”となる。
【0110】
入力生成回路408は、値mul_aに“X0”を代入して出力する。入力生成回路410は、値mul_bに加算値add_qである“1+β”を代入して出力する。そのため、乗算器412により算出される乗算値mul_q1は“X0(1+β)”となる。すなわち、逆数X1が算出される。保持値選択回路414は、値mul_q2に乗算値mul_q1を代入して出力する。保持回路416は、値mul_q2である逆数X1を保持する。より具体的には、保持回路416は、k回目の逆数の演算結果である逆数Xkを保持する。
【0111】
続いて、カウンタkが反復回数mと同一ではない場合(ステップS344においてNO)、ステップS346,S348,S350に対応する処理が実行される。
【0112】
ステップS346に対応する処理として、カウンタ回路142はカウンタkをインクリメントし(すなわち、k>0が成立)、サブカウンタ回路144はサブカウンタiに“0”を代入する。
【0113】
ステップS348に対応する処理として、次の処理が実行される。具体的には、入力生成回路408は、値mul_aに保持回路416で保持されている値mul_ff1を代入して出力する。ここで、値mul_ff1には逆数Xkが代入されているため、入力生成回路408は、値mul_aに“Xk”を代入して出力する。入力生成回路410は、値mul_bに絶対値dを代入して出力する。そのため、乗算器412により算出される乗算値mul_q1は“Xk*d”となる。すなわち、一時変数tmpが算出される。
【0114】
保持値選択回路414は、値mul_q2に乗算値mul_ff1を代入して出力する。そのため、保持回路416により保持される値mul_ff1は更新されない。なお、保持回路418には、乗算値mul_q1である“Xk*d”が保持される。
【0115】
続いて、ステップS350に対応する処理として、次の処理が実行される。具体的には、サブカウンタ回路144はサブカウンタiに“1”を代入する。この場合、入力生成回路400は、値add_aに“2”を代入して出力する。入力生成回路402は、値add_bに保持回路418に保持されている値mul_ff2の2の補数を代入する。ここで、値mul_ff2には“Xk*d”(すなわち、一時変数tmp)が代入されているため、入力生成回路402は、値add_bに“-Xk*d”を代入して出力する。したがって、加算器404により算出される加算値add_qは“2-tmp”となる。
【0116】
また、入力生成回路408は、値mul_aに保持回路416に保持されている値mul_ff1(すなわち、逆数Xk)を代入して出力する。入力生成回路410は、値mul_bに加算値add_q(すなわち、“2-tmp”)を代入する。そのため、乗算器412による乗算値mul_q1は“Xk(2-tmp)”となる。すなわち、“k+1”回目の逆数の演算結果である逆数Xk+1が算出される。
【0117】
保持値選択回路414は、値mul_q2に乗算値mul_q1(すなわち、Xk+1)を代入して出力する。保持回路416は、値mul_q2に代入された“k+1”回目の逆数の演算結果である逆数Xk+1を保持する。
【0118】
そして、カウンタkが反復回数mと同一となった場合(ステップS344においてYES)、逆数演算回路184は、保持回路416に保持されている結果(すなわち、逆数Xm)を逆数Xとして算出する。
【0119】
次に、演算方式Bを用いて逆数Xを算出する処理について説明する。逆数演算回路184は、比較結果selが“0”の場合に演算方式Bを用いて逆数Xを算出する。この場合、
図10に示すフローチャートが適用される。
【0120】
図10および
図12を参照して、ステップS360に対応する処理として、カウンタ回路142はカウンタkおよびサブカウンタiに“0”を代入する。
【0121】
ステップS362に対応する処理として、入力生成回路400は、値add_aに“1”を代入して出力する。
【0122】
ステップS364に対応する処理として、次の処理を実行する。具体的には、入力生成回路402は、値add_bに“β”を代入して出力する。また、保持値選択回路414は、値mul_q2に“β”を代入して出力する。そのため、保持回路416は、値mul_q2に代入された“1”回目の演算結果R1を保持する。
【0123】
ステップS366に対応する処理として、加算器404は、加算値add_qとして“1+β”を算出する。T0=1、R1=βであることから、加算値add_qは1回目の反復計算結果であるT1(=T0+R1)に対応する。保持回路406は、加算値add_qである“T1”を保持する。このように、保持回路406には、k回目の演算結果Tkが保持される。
【0124】
続いて、カウンタkが反復回数nと同一ではない場合(ステップS368においてNO)、ステップS370,S364,S366に対応する処理が実行される。
【0125】
ステップS370に対応する処理として、カウンタ回路142はカウンタkをインクリメントする(すなわち、k>0が成立)。
【0126】
ステップS364に対応する処理として、次の処理が実行される。具体的には、入力生成回路408は、値mul_aに保持回路416で保持されている値mul_ff1を代入して出力する。値mul_ff1にはk回目の演算結果Rkが保持されている。入力生成回路410は、値mul_bに“β”を代入して出力する。そのため、乗算器412により算出される乗算値mul_q1は“Rk*β”となる。すなわち、“k+1”回目の演算結果Rk+1が算出される。
【0127】
保持値選択回路414は、値mul_q2に値mul_q1(すなわち、Rk+1)を代入して出力する。そのため、保持回路416は、値mul_q2に代入された“k+1”回目の演算結果Rk+1を保持する。
【0128】
続いて、ステップS366に対応する処理として、次の処理が実行される。具体的には、入力生成回路400は、値add_aに保持回路406に保持されている値add_ff(すなわち、Tk)を代入する。入力生成回路402は、値add_bに乗算値mul_q1(すなわち、Rk+1)を代入する。そのため、加算器404により算出される加算値add_qは“Tk+Rk+1”となる。これは、“k+1”回目の演算結果Tk+1に対応する。保持回路406は、演算結果Tk+1を保持する。
【0129】
続いて、カウンタkが反復回数nと同一となった場合(ステップS368においてYES)、ステップS372に対応する処理が実行される。
【0130】
ステップS372に対応する処理として、次の処理が実行される。具体的には、サブカウンタiを“1”にする。入力生成回路408は、値mul_aに“X0”を代入して出力する。入力生成回路410は、値mul_bに加算値add_q(すなわち、Tk+1)を代入して出力する。そのため、乗算器412により算出される乗算値mul_q1は“X0*Tk+1”となる。すなわち、“k+1”回目の逆数の演算結果である逆数Xk+1が算出される。
【0131】
保持値選択回路414は、値mul_q2に乗算値mul_q1(すなわち、Xk+1)を代入して出力する。保持回路416は、値mul_q2に代入された“k+1”回目の逆数の演算結果である逆数Xk+1を保持する。そして、逆数演算回路184は、保持回路416に保持されている結果(すなわち、逆数Xn)を逆数Xとして算出する。
【0132】
上述した実施の形態2では、逆数演算回路172A,172Bの乗算器および加算器を共有化する構成について説明したが、当該構成に限られない。近似値算出回路164における演算でも、式(1)に示されるように乗算および加算が行なわれ、誤差算出回路166における演算でも、式(2)に示されるように乗算および加算が行なわれる。そのため、同様の考え方により、近似値算出回路164および誤差算出回路166の各々で用いられる演算器を、逆数演算回路184で用いられる演算器と共有化する構成であってもよい。すなわち、実施の形態1における近似値算出回路164、誤差算出回路166、逆数演算回路172A、逆数演算回路172Bの各々で用いられる演算器を共有化する構成であってもよい。
【0133】
<利点>
実施の形態2によると、演算処理回路160内に設けられる各回路において用いられる演算器を共有化するように構成したため、実施の形態1と比較して回路規模を削減することができる。
【0134】
[実施の形態3]
実施の形態1および2では、LUT21,31,41がそれぞれメモリ20、30,40に格納されており、演算精度PがSFR回路120に設定される構成について説明した。実施の形態3では、LUT21,31,41が演算処理回路160に設けられた各回路に格納されており、SFR回路120から演算精度Pを設定するためのレジスタ123が削除されている構成について説明する。
【0135】
<全体構成>
図13は、実施の形態3に従う半導体装置5Bの構成例を示す模式図である。
図13を参照して、半導体装置5Bは、CPU10と、除算回路100Bとを含む。半導体装置5Bは、半導体装置5Aからメモリ20~40を削除し、除算回路100Aを除算回路100Bに置き換えたものである。
【0136】
除算回路100Bは、SFR回路120Bと、ステートマシン回路140と、演算処理回路160Bとを含む。SFR回路120Bは、
図11中のSFR回路120から演算精度Pのレジスタ123を削除した構成に相当する。
【0137】
演算処理回路160Bは、
図11中の演算処理回路160Aの近似値算出回路164、回数算出回路168および回数算出回路170を、それぞれ近似値算出回路186、回数算出回路188および回数算出回路190に置き換えたものに相当する。
【0138】
近似値算出回路186は、LUT21を回路内部に有している点で、
図11中の近似値算出回路164と異なる。
【0139】
回数算出回路188は、ニュートンラフソン法の反復計算の回数を得るために利用されるLUT204を有する。LUT204は、予め定められた演算精度(例えば、8ビット)に対応する、誤差率βのサンプル値β
max1とニュートンラフソン法の反復計算の回数との関係を示すルックアップテーブルである。例えば、LUT204は、
図4に示すLUT31において、8ビット以外の演算精度におけるサンプル値β
max1とニュートンラフソン法の反復計算の回数とを削除したものである。
【0140】
回数算出回路190は、簡易演算法の反復計算の回数を求めるために利用されるLUT206を有する。LUT206は、予め定められた演算精度(例えば、8ビット)に対応する、誤差率βのサンプル値β
max2と簡易演算法の反復計算の回数との関係を示すルックアップテーブルである。例えば、LUT206は、
図5に示すLUT41において、8ビット以外の演算精度におけるサンプル値β
max2と簡易演算法の反復計算の回数とを削除したものである。
【0141】
<処理手順>
実施の形態3に従う半導体装置5Bは、基本的には
図8に示すフローチャートに従って動作する。異なる点としては、ステップS306,S310,S312の内部処理のみである。
【0142】
具体的には、ステップS306に対応する処理として、近似値算出回路186は、絶対値dのすべてのビットフィールドをインデックスとして、回路内部に実装されたLUT21を参照することにより、近似値X0を算出する。具体的には、近似値算出回路186は、サンプル値e≦絶対値dが成立する最も近いサンプル値eを特定し、当該特定されたサンプル値eに関連付けられた切片fおよび傾きgを取得する。近似値算出回路186は、式(1)を用いて線形補間を行なうことにより、逆数の近似値X0を算出する。
【0143】
ステップS310に対応する処理として、回数算出回路188は、誤差率βをインデックスとして、回路内部に実装されたLUT204を参照することにより、反復回数mを算出する。具体的には、回数算出回路188は、サンプル値βmax1≧誤差率βが成立する最も近いサンプル値βmax1を特定し、当該特定されたサンプル値βmax1に関連付けられた反復回数を取得する。回数算出回路188は、取得した反復回数を反復回数mとして算出する。
【0144】
ステップS312に対応する処理として、回数算出回路190は、誤差率βをインデックスとして、回路内部に実装されたLUT206を参照することにより、反復回数nを算出する。具体的には、回数算出回路190は、サンプル値βmax2≧誤差率βが成立する最も近いサンプル値βmax2を特定し、当該特定されたサンプル値βmax2に関連付けられた反復回数を取得する。回数算出回路190は、取得した反復回数を反復回数nとして算出する。
【0145】
上述した実施の形態3では、半導体装置5Bが、半導体装置5Aに含まれる逆数演算回路184を有する構成について説明したが、当該構成に限られない。例えば、半導体装置5Bは、逆数演算回路184の代わりに、実施の形態1に従う半導体装置5に含まれる逆数演算回路172A,172Bおよび出力回路178を有していてもよい。
【0146】
<利点>
実施の形態3によると、LUTが近似値算出回路186、回数算出回路188および回数算出回路190の内部に実装されている。そのため、実施の形態1または2のようにメモリ20,30,40にアクセスしてデータを読み出す時間を省略することができるため、より高速に商Qを算出することができる。
【0147】
さらに、要求される演算精度が予め定められている場合には、実施の形態3のように演算精度のレジスタを削除し、当該要求される演算精度に対応した専用のLUTを設けることで回路規模を削減することができる。
【0148】
[実施の形態4]
実施の形態4では、実施の形態1~3に従う除算回路がアルゴリズム回路の一部として用いられる構成について説明する。
【0149】
図14は、実施の形態4に従う半導体装置5Cの構成例を示す図である。
図14を参照して、半導体装置5Cは、CPU10と、アルゴリズム制御回路1000とを含む。アルゴリズム制御回路1000は、アルゴリズム制御用SFR回路1010と、アルゴリズム制御用ステートマシン回路1020と、演算回路1030,1040,1060と、除算回路1050とを含む。
【0150】
アルゴリズム制御用SFR回路1010は、アルゴリズムの動作を制御するためのパラメータと、演算結果とを格納する。アルゴリズム制御用ステートマシン回路1020は、アルゴリズムを構成する演算回路1030,1040,1060、および除算回路1050の動作を制御する。演算回路1030は、被除数Yを生成する。演算回路1040は、除数Dを生成する。演算回路1060は、除算回路1050から商Qの入力を受け付けて、商Qを用いて各種の演算を実行する。
【0151】
除算回路1050は、実施の形態1に従う除算回路100からSFR回路120を削除した構成に相当する。除算回路1050は、被除数Y、除数D、起動制御情報等の除算に必要な各種パラメータの入力を受け付けて、商Q、完了通知等の情報を出力する。なお、除算回路1050は、実施の形態2に従う除算回路100AからSFR回路120を削除した構成であってもよいし,実施の形態3に従う除算回路100BからSFR回路120Bを削除した構成であってもよい。
【0152】
図14を参照しながら、半導体装置5Cの動作の一例について説明する。CPU10は、アルゴリズム制御用SFR回路1010に対してアルゴリズム制御回路1000を動作させる指示を与える。
【0153】
動作開始の指示を受け付けたアルゴリズム制御用SFR回路1010は、アルゴリズム制御用ステートマシン回路1020を起動する。アルゴリズム制御用ステートマシン回路1020は、演算回路1030に対して起動指示を与える。演算回路1030は、演算を行なって被除数Yを生成し、アルゴリズム制御用ステートマシン回路1020に対して完了通知を出力する。
【0154】
アルゴリズム制御用ステートマシン回路1020は、演算回路1040に対して起動指示を与える。演算回路1040は、演算を行なって除数Dを生成し、アルゴリズム制御用ステートマシン回路1020に対して完了通知を出力する。
【0155】
アルゴリズム制御用ステートマシン回路1020は、演算回路1030および演算回路1040の各々から完了通知を受けた後、除算回路1050に対して起動指示を与える。除算回路1050は、被除数Yと除数Dとの入力を受け付けて、演算を行なって商Qを生成し、アルゴリズム制御用ステートマシン回路1020に対して完了通知を出力する。
【0156】
アルゴリズム制御用ステートマシン回路1020は、除算回路1050からの完了通知を受けて後、演算回路1060に対して起動指示を与える。演算回路1060は、商Qの入力を受け付けて、演算を行なってアルゴリズム制御用ステートマシン回路1020に対して完了通知を出力する。
【0157】
<利点>
実施の形態4によると、実施の形態1~3の利点に加えて、アルゴリズム制御回路1000により被除数Y、除数D等が設定されるため、CPU10の処理負荷を軽減させることができる。
【0158】
[その他]
(1)上述した実施の形態3では、LUP21、LUP204、LUP206のすべてを演算処理回路160内に実装する構成について説明したが、当該構成に限られない。例えば、LUP21、LUP204、LUP206のうちの少なくとも1つを演算処理回路160内に実装する構成であってもよい。
【0159】
(2)上述のフローチャートで説明したような制御を実行させるプログラムは、コンピュータに付属するフレキシブルディスク、ROM、RAMおよびメモリカードなどの一時的でないコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【0160】
(3)上述した実施の形態において、その他の実施の形態で説明した処理や構成を適宜採用して実施する場合であってもよい。
【0161】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0162】
5,5A,5B,5C 半導体装置、10 CPU、20,30,40 メモリ、100,100A,100B,1050 除算回路、120,120B,1010 SFR回路、121~126 レジスタ、140 ステートマシン回路、142 カウンタ回路、144 サブカウンタ回路、160,160A,160B 演算処理回路、162,182 符号処理回路、164,186 近似値算出回路、166 誤差算出回路、168,170,188,190 回数算出回路、172A,172B,184 逆数演算回路、176 比較器、178,208,228,230,234 出力回路、180,412 乗算器、1030,1040,1060 演算回路、206,226,232,406,416,418 保持回路、400,402,408,410 入力生成回路、404 加算器、414 保持値選択回路、1000 アルゴリズム制御回路、1020 アルゴリズム制御用ステートマシン回路。