(57)【特許請求の範囲】
【請求項１】
２つの数値データを乗算する乗算器と、
ｎ（ｎは１以上の整数）ビットのデータをクロックに同期して保持するフリップフロップを複数有し、当該各フリップフロップを用いて前記乗算器の乗算結果を前記ｎビット毎に分けて保持するレジスタと、
前記乗算器が乗算する２つの数値データについて最下位ビットから連続する０の総数を検出し、検出した値に基づいて前記各フリップフロップに対する前記クロックの供給の有無を制御する制御回路と、
前記制御回路が前記クロックの供給を停止したフリップフロップからの出力値を０にマスクするマスク回路と
を備えるデジタル信号処理装置。
【請求項２】
２つの数値データを加算する加算器と、
ｎ（ｎは１以上の整数）ビットのデータをクロックに同期して保持するフリップフロップを複数有し、当該各フリップフロップを用いて前記加算器の加算結果を前記ｎビット毎に分けて保持するレジスタと、
前記加算器が加算する２つの数値データの各々について最下位ビットから連続する０の数を検出し、検出した２つの値のうち小さい方の値に基づいて前記各フリップフロップに対する前記クロックの供給の有無を制御する制御回路と、
前記制御回路が前記クロックの供給を停止したフリップフロップからの出力値を０にマスクするマスク回路と
を備えるデジタル信号処理装置。
【請求項３】
演算精度を指定する演算精度指定データが供給されると、当該演算精度指定データが指定する演算精度で数値演算を行う演算器と、
ｎ（ｎは１以上の整数）ビットのデータをクロックに同期して保持するフリップフロップを複数有し、当該各フリップフロップを用いて前記演算器の演算結果を前記ｎビット毎に分けて保持するレジスタと、
前記演算精度指定データが指定する演算精度に基づいて、前記各フリップフロップに対する前記クロックの供給の有無を制御する制御回路と、
前記制御回路が前記クロックの供給を停止したフリップフロップからの出力値をマスクするマスク回路と
を備えるデジタル信号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル信号処理装置（以下、ＤＳＰと記載する）に関する。
【背景技術】
【０００２】
例えば、特許文献１には、ＤＳＰ１において、外部から要求された処理に関する演算命令ｉａを実行している期間においてのみ、乗算器２０８，加算器２１０，レジスタ２１１等を備えた演算部２０に対してクロックを供給する一方、それ以外の期間ついては演算部２０に対するクロックの供給を止めて演算部２０の動作を停止させ、ＤＳＰ１の消費電力を削減することが記載されている（特に、段落００３１，図４参照）。
【特許文献１】特開２０００−０５７１１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
特許文献１に記載されたＤＳＰ１では、外部から要求された処理に係わる演算であれば、その演算内容に係わらず、演算を行っている期間中、演算部２０内の各部にクロックが供給されてしまう。しかしながら、例えば、２つの数値データの乗算結果をレジスタに保持する場合について考えてみると、乗算する一方の数値データの下位４ビットの値が全て“０”であった場合、レジスタで保持する乗算結果についても下位４ビットの値は全て“０”になる。このような場合に、レジスタ内の下位４ビットの値を保持するフリップフロップへのクロックの供給を停止できれば、さらなる消費電力の削減が期待できる。
【０００４】
本発明は、このような事情に鑑みてなされたものであり、その目的は、演算内容に応じて消費電力をきめ細かく削減することが可能なデジタル信号処理装置を提供することにある。
【課題を解決するための手段】
【０００５】
上述した課題を解決するために、本発明に係るデジタル信号処理装置は、２つの数値データを乗算する乗算器と、ｎ（ｎは１以上の整数）ビットのデータをクロックに同期して保持するフリップフロップを複数有し、当該各フリップフロップを用いて前記乗算器の乗算結果を前記ｎビット毎に分けて保持するレジスタと、前記乗算器が乗算する２つの数値データについて最下位ビットから連続する０の総数を検出し、検出した値に基づいて前記各フリップフロップに対する前記クロックの供給の有無を制御する制御回路と、前記制御回路が前記クロックの供給を停止したフリップフロップからの出力値を０にマスクするマスク回路とを備えることを特徴とする。
【０００６】
この発明によれば、乗算器で乗算される２つの数値データについて最下位ビットから連続する０の総数を検出することで、乗算結果について最下位ビットから連続する０の数を特定することができる。したがって、乗算結果において最下位ビットから０が少なくともｎビット以上連続している場合には、レジスタに備わる１以上のフリップフロップについて、クロックの供給を止めてその動作を停止させることが可能となる。したがって、デジタル信号処理装置の消費電力を削減することができる。
【０００７】
また、本発明に係るデジタル信号処理装置は、２つの数値データを加算する加算器と、ｎ（ｎは１以上の整数）ビットのデータをクロックに同期して保持するフリップフロップを複数有し、当該各フリップフロップを用いて前記加算器の加算結果を前記ｎビット毎に分けて保持するレジスタと、前記加算器が加算する２つの数値データの各々について最下位ビットから連続する０の数を検出し、検出した２つの値のうち小さい方の値に基づいて前記各フリップフロップに対する前記クロックの供給の有無を制御する制御回路と、前記制御回路が前記クロックの供給を停止したフリップフロップからの出力値を０にマスクするマスク回路とを備えることを特徴とする。
【０００８】
この発明によれば、加算器で加算される２つの数値データの各々について最下位ビットから連続する０の数を検出し、検出した２つの値のうち小さい方の値を得ることで、加算結果について最下位ビットから連続する０の数を特定することができる。したがって、加算結果において最下位ビットから０が少なくともｎビット以上連続している場合には、レジスタに備わる１以上のフリップフロップについて、クロックの供給を止めてその動作を停止させることが可能となる。したがって、デジタル信号処理装置の消費電力を削減することができる。
【０００９】
また、本発明に係るデジタル信号処理装置は、演算精度を指定する演算精度指定データが供給されると、当該演算精度指定データが指定する演算精度で数値演算を行う演算器と、ｎ（ｎは１以上の整数）ビットのデータをクロックに同期して保持するフリップフロップを複数有し、当該各フリップフロップを用いて前記演算器の演算結果を前記ｎビット毎に分けて保持するレジスタと、前記演算精度指定データが指定する演算精度に基づいて、前記各フリップフロップに対する前記クロックの供給の有無を制御する制御回路と、前記制御回路が前記クロックの供給を停止したフリップフロップからの出力値をマスクするマスク回路とを備えることを特徴とする。
【００１０】
この発明によれば、レジスタに備わる複数のフリップフロップのうち、演算器に対して要求された演算精度では不要となるフリップフロップについて、クロックの供給を止めてその動作を停止させることが可能となる。したがって、デジタル信号処理装置の消費電力を削減することができる。
【発明を実施するための最良の形態】
【００１１】
＜第１実施形態＞
図１は、本実施形態に係わるＤＳＰ１の全体構成を示すブロック図である。
同図に示すＤＳＰ１は、例えば、パーソナルコンピュータ等に備わる音源ボード内に設けられており、楽音の再生処理や、アナログ音声信号とデジタル音声信号の変換処理、フィルタリング処理、ミキシング処理等に関する演算を行う。
【００１２】
ＤＳＰ１は、プログラムＲＡＭ（Random Access Memory）１０、セレクタ２０、ワークＲＡＭ３０、係数ＲＡＭ４０、乗算器５０、加算器６０、制御回路７０、レジスタ８０を有しており、これらの各部には、ＤＳＰ１の外部からクロックが供給される。プログラムＲＡＭ１０には、ＤＳＰ１の各部を制御するための命令ｉが格納されている。このプログラムＲＡＭ１０に格納されている命令ｉには、乗算、加算等の演算に直接に係わる演算命令の他、データの入出力等を制御する制御命令が含まれる。
【００１３】
ＤＳＰ１は、入力データＡが入力されると、これをセレクタ２０を介してワークＲＡＭ３０に格納する。なお、レジスタ８０からの出力データもセレクタ２０にフィードバックされるようになっており、セレクタ２０は、入力データＡと、レジスタ８０からの出力データのいずれか一方を命令ｉに基づいて選択し、ワークＲＡＭ３０に供給する。このようにワークＲＡＭ３０には、入力データＡの他に、レジスタ８０からの出力データを格納することができ、これにより、入力データＡに対してある特性を有するフィルタ処理を施した後、特性の異なる別のフィルタ処理を実行すること等、複雑な演算処理を行うことが可能になる。
【００１４】
次に、ワークＲＡＭ３０から読み出されたデータは乗算器５０に供給され、乗算器５０において、係数ＲＡＭ４０から読み出された係数データＢと乗算される。係数ＲＡＭ４０には、係数データＢとして、例えば、ＦＩＲ（Finite Impulse Response）フィルタのタップ係数値等が格納されている。
【００１５】
ところで、図１に記載されている“入力データＡ 16bit（s.15）”とは、入力データＡが、１６ビットのデータであって、最上位ビットはサインビットであり、サインビット後の１５ビットが小数点以下の値を表すことを意味している。また、サインビットは、正の値なのか負の値なのかを示すデータである。したがって、図１において、入力データＡが取り得る値は、−１（0x8000）以上、＋１（0x7FFF）未満となる。これは、図１に記載されている“係数データＢ 16bit（s.15）”についても同様であり、係数データＢが取り得る値は、入力データＡの場合と同様に、−１（0x8000）以上、＋１（0x7FFF）未満となる。
【００１６】
また、図１において乗算器５０の下方に記載されている“32bit（s1.30）”とは、乗算器５０からの出力データが、３２ビットのデータであって、最上位ビットはサインビットであり、サインビット後の１ビットが整数の値を表し、その後の３０ビットが小数点以下の値を表すことを意味している。したがって、図１において、乗算器５０からの出力データが取り得る値は、−２（0x40000000）以上、＋２（0x3FFFFFFF）未満となる。なお、図１においては、加算器６０やレジスタ８０の下方にも“32bit（s1.30）”と記載されている。よって、図１において乗算器５０と加算器６０とレジスタ８０は、いずれもその出力データの取り得る値が、−２（0x40000000）以上、＋２（0x3FFFFFFF）未満となる。
【００１７】
次に、乗算器５０からの出力データは、加算器６０の一方の入力端子に供給される。また、加算器６０の他方の入力端子には、レジスタ８０からの出力データがフィードバックされる。加算器６０では、これら２つの入力端子に供給された数値データを加算する。また、加算器６０からの出力データがレジスタ８０に供給される。なお、レジスタ８０の回路構成については後述するが、レジスタ８０は、４ビットのデータをクロックに同期して保持するフリップフロップを計８つ有しており、これら８つのフリップフロップを使用して、３２ビットの演算結果を最上位ビットから順に４ビットずつ分けて保持する。
【００１８】
また、図１に示すＤＳＰ１においては、乗算器５０を用いた乗算処理のみを行い、加算器６０を用いた加算処理についてはこれをスキップし、乗算器５０の乗算結果を加算器６０を経由してレジスタ８０に供給することが可能である。このように乗算器５０を用いた乗算処理のみを行ってその乗算結果をレジスタ８０に保持する場合について考えてみると、例えば、入力データＡが“0x7F00”（111111100000000）で、係数データＢが“0x4320”（100001100100000）の場合、入力データＡについては下位８ビットの値が全て“０”となる一方、係数データＢについては下位５ビットの値が全て“０”となる。この場合、乗算結果は“0x214CE000”（100001010011001110000000000000）となり、下位１３ビットの値が全て“０”となる。したがって、上述したようにレジスタ８０が８つのフリップフロップ（４ビット）で構成されている場合は、下位１２ビットの値を保持する３つのフリップフロップについて、クロックの供給を停止し、消費電力の削減を図ることが可能になる。
【００１９】
以上のようなことから、乗算器５０を用いた乗算処理のみを行ってその乗算結果をレジスタ８０に保持する場合には、乗算器５０に供給される入力データＡと係数データＢが制御回路７０に対しても供給され、制御回路７０では、まず、供給された入力データＡと係数データＢについて、最下位ビットから連続する０の総数を検出する。例えば、上述したように入力データＡが“0x7F00”で、係数データＢが“0x4320”の場合は、入力データＡについて最下位ビットから連続する０の数は“８” であり、係数データＢについて最下位ビットから連続する０の数は“５”であるので、制御回路７０は、０の総数として検出値 “１３”を得る。
【００２０】
この後、制御回路７０は、検出した０の総数に基づいて、イネーブル信号ＥＮ［7：0］の値を設定し、これをレジスタ８０に供給する。イネーブル信号ＥＮ［7：0］は、レジスタ８０に備わる８つのフリップフロップについて、クロックの供給の有無を個別に規定する信号である。例えば、上述したように検出値が“１３”であった場合は、レジスタ８０に備わる８つのフリップフロップのうち、下位１２ビットの値を保持する３つのフリップフロップについて、クロックの供給を停止させるため、制御回路７０は、イネーブル信号ＥＮ［7：0］のうち下位３ビットの値を“０”にする。つまり、この場合は、イネーブル信号ＥＮ［7：0］の値が“11111000”に設定される。
【００２１】
このように制御回路７０は、検出した０の総数が“０”〜“３”の場合にイネーブル信号ＥＮ［7：0］の値を“11111111”に設定し、検出した０の総数が“４”〜“７”の場合にイネーブル信号ＥＮ［7：0］の値を“11111110”に設定し、検出した０の総数が“８”〜“１１”の場合にイネーブル信号ＥＮ［7：0］の値を“11111100”に設定し、…検出した０の総数が“２８”〜“３１”の場合にイネーブル信号ＥＮ［7：0］の値を“10000000”に設定する。
【００２２】
図２は、レジスタ８０の構成を示す回路図である。
同図に示すようにレジスタ８０は、加算器６０から供給される３２ビットのデータを、最上位ビットから順に４ビットずつ分けて保持するための８つの保持回路８０ａ，８０ｂ，…８０ｈを有している。保持回路８０ａは、加算器６０から供給される出力データ［31：0］のうち、最上位ビットから４ビット分のデータ、すなわち出力データ［31：28］を保持する。また、保持回路８０ｂは、加算器６０から供給される出力データ［31：0］のうち、最上位ビットから数えて５ビット目から８ビット目までの４ビット分のデータ、すなわち出力データ［27：24］を保持する。また、保持回路８０ｈは、加算器６０から供給される出力データ［31：0］のうち、最下位ビットを含む４ビット分のデータ、すなわち出力データ［3：0］を保持する。
【００２３】
なお、図示を省略しているが、保持回路８０ｂと保持回路８０ｈの間には、さらに５つの保持回路が設けられている。この５つの保持回路は、上述した保持回路８０ａ，８０ｂ，８０ｈと同様の回路構成を有している。例えば、保持回路８０ｂの後段に、５つの保持回路として、保持回路８０ｃ，８０ｄ，８０ｅ，８０ｆ，８０ｇが順に設けられている場合、加算器６０から供給される出力データ［31：0］のうち、保持回路８０ｃには出力データ［23：20］が保持され、保持回路８０ｄには出力データ［19：16］が保持され、保持回路８０ｅには出力データ［15：12］が保持され、保持回路８０ｆには出力データ［11：08］が保持され、保持回路８０ｇには出力データ［07：04］が保持される。
【００２４】
このようにレジスタ８０を構成する８つの保持回路８０ａ〜８０ｈは、基本的に同じ回路構成を有しているため、保持回路８０ａを例にその回路構成について説明すると、保持回路８０ａは、ＣＫＧ（クロックゲーティングセル）８１ａと、ＦＦ（フリップフロップ）８２ａと、マスク回路８３ａを有している。
【００２５】
ＣＫＧ８１ａには、ＤＳＰ１の外部からクロックＣＬＫが供給されるとともに、制御回路７０からイネーブル信号ＥＮ［7］が供給される。ＣＫＧ８１ａは、ＦＦ８２ａに対してクロックＣＬＫを供給するか否かを、イネーブル信号ＥＮ［7］の値に従って決定する回路であり、図３に示す回路構成を有する。図３において、ラッチ回路８１１は、クロックＣＬＫのパルスの立下りに同期してイネーブル信号ＥＮ［7］の値（０or１）をラッチし、これをＡＮＤ回路８１２に出力する。また、ＡＮＤ回路８１２は、ラッチ回路８１１からの出力値とクロックＣＬＫの論理積を出力する。その結果、ＣＫＧ８１ａは、イネーブル信号ＥＮ［7］の値として“１”が供給されると、この後、イネーブル信号ＥＮ［7］の値として“０”が供給されるまでの間、ＦＦ８２ａに対してクロックＥＮＣＬＫを供給する。また、ＣＫＧ８１ａは、イネーブル信号ＥＮ［7］の値として“０”が供給されると、この後、イネーブル信号ＥＮ［7］の値として“１”が供給されるまでの間、ＦＦ８２ａに対するクロックＥＮＣＬＫの供給を停止する。
【００２６】
図２に戻り、ＦＦ８２ａは、加算器６０から供給される出力データ［31：28］を、ＣＫＧ８１ａから供給されるクロックＥＮＣＬＫに同期して保持し、これを所定のタイミングで出力する。なお、クロックＥＮＣＬＫの供給が停止されるとＦＦ８２ａは動作を停止するが、ＦＦ８２ａには直前に書き込まれたデータが保持されているので、この値がレジスタ出力［31：28］として出力されてしまうことを防ぐため、ＦＦ８２ａの後段にはマスク回路８３ａが設けられている。マスク回路８３ａは、４個のＡＮＤ回路によって構成されており、イネーブル信号ＥＮ［7］の値が“０”の場合に、ＦＦ８２ａから出力される４ビットのデータを全て“０”にマスクする一方、イネーブル信号ＥＮ［7］の値が“１”の場合に、ＦＦ８２ａから出力される４ビットのデータを、そのままレジスタ出力［31：28］として出力する。
【００２７】
次に、ＤＳＰ１の動作例について説明する。
まず、乗算器５０において、上述した入力データＡ“0x7F00”と係数データＢ“0x4320”を乗算し、この乗算結果をレジスタ８０に保持する場合について説明する。
【００２８】
この場合、まず、入力データＡ“0x7F00”と係数データＢ“0x4320”が乗算器５０に供給され、乗算器５０において両者が乗算される。その結果、乗算器５０は、乗算結果“0x214CE000”を得る。一方、入力データＡ“0x7F00”と係数データＢ“0x4320”は、制御回路７０にも供給され、制御回路７０は、入力データＡと係数データＢについて、最下位ビットから連続する０の総数を検出する。その結果、入力データＡについて最下位ビットから連続する０の数は“８”であり、係数データＢについて最下位ビットから連続する０の数は“５”であるので、制御回路７０は０の総数として検出値 “１３”を得る。
【００２９】
次いで、制御回路７０は、検出値 “１３”に基づいてイネーブル信号ＥＮ［7：0］の値を“11111000”に設定し、これをレジスタ８０に供給する。その結果、レジスタ８０では、計８つのＦＦ８２ａ〜８２ｈのうち、下位１２ビットの値を保持する３つのＦＦ８２ｆ，８２ｇ，８２ｈについて、クロックＥＮＣＬＫの供給を停止する。したがって、乗算器５０の乗算結果“0x214CE000”をレジスタ８０で保持する場合には、計３２ビットのデータのうち、下位１２ビットのデータは保持されず、残りの上位２０ビットのデータのみがＦＦ８２ａ〜８２ｅに保持される。
【００３０】
この後、レジスタ８０で保持している乗算結果を出力する場合には、８つのＦＦ８２ａ〜８２ｈからデータが出力されるが、この際、ＦＦ８２ｆ〜８２ｈからの出力値（下位１２ビット）については、後段に設けられたマスク回路８３ｆ〜８３ｈによって全ての値が“０”にマスクされる。なお、このようにＦＦ８２ｆ〜８２ｈからの出力値をマスクするのは、前述したように、ＦＦ８２ｆ〜８２ｈには、クロックＥＮＣＬＫの供給停止に応じて動作を停止する前に書き込まれたデータが保持されているので、これがレジスタ出力［11：0］として出力されてしまうことを防ぐためである。
【００３１】
このように入力データＡ“0x7F00”と係数データＢ“0x4320”の乗算結果をレジスタ８０に保持する場合には、乗算結果をレジスタ８０で保持している期間において、ＦＦ８２ｆ〜８２ｈに対するクロックＥＮＣＬＫの供給を停止させ、これら３つのＦＦ８２ｆ〜８２ｈの動作を停止させることができるので、その分だけＤＳＰ１の消費電力を削減できる。
【００３２】
次に、乗算器５０において入力データＡ“0x7F10”（111111100010000）と係数データＢ“0x4321”（100001100100001）を乗算し、その乗算結果“0x21519110”（100001010100011001000100010000）をレジスタ８０に保持する場合について説明する。この場合、入力データＡについて最下位ビットから連続する０の数は“４”であり、係数データＢについて最下位ビットから連続する０の数は“０”である。したがって、制御回路７０は、０の総数として“４”を検出し、イネーブル信号ＥＮ［7：0］の値を“11111110”に設定する。
【００３３】
その結果、レジスタ８０では、ＦＦ８２ｈについてのみクロックＥＮＣＬＫの供給を停止する。したがって、乗算器５０の乗算結果“0x21519110”をレジスタ８０で保持する場合には、計３２ビットのデータのうち、下位４ビットのデータは保持されず、残りの上位２８ビットのデータのみがＦＦ８２ａ〜８２ｇに保持される。また、レジスタ８０で保持している乗算結果を出力する場合には、下位４ビットに相当するＦＦ８２ｈからの出力値についてのみ、その後段に設けられたマスク回路８３ｈによって全ての値が“０”にマスクされる。したがって、乗算結果をレジスタ８０で保持している期間において、ＦＦ８２ｈに対するクロックＥＮＣＬＫの供給を停止させ、ＦＦ８２ｈの動作を停止させることができるので、ＤＳＰ１の消費電力を削減できる。
【００３４】
なお、入力データＡまたは係数データＢの値が“０”の場合は、乗算結果の値も“０”になるので、制御回路７０では、０の総数に係わらず、イネーブル信号ＥＮ［7：0］の値を“00000000”に設定する。これにより、レジスタ８０では、全てのＦＦ８２ａ〜８２ｈに対するクロックＥＮＣＬＫの供給を停止し、これらのＦＦ８２ａ〜８２ｈの動作を停止させることができる。
【００３５】
このように本実施形態によれば、乗算器５０の乗算結果をレジスタ８０に保持する場合に、乗算結果において最下位ビットから０が少なくとも４ビット以上連続している場合には、レジスタ８０に備わる１以上のフリップフロップについて、クロックＥＮＣＬＫの供給を止め、その動作を停止させることが可能となる。したがって、ＤＳＰ１の消費電力を削減できる。
【００３６】
＜第２実施形態＞
図４は、第２実施形態に係わるＤＳＰ２の全体構成を示すブロック図である。
なお、同図において、第１実施形態で説明したＤＳＰ１と共通する構成要素には同一の符号を付している。ＤＳＰ２では、楽音の再生処理や、アナログ音声信号とデジタル音声信号の変換処理、フィルタリング処理、ミキシング処理等、様々な処理に関する演算を行うため、処理の種類やサンプリングレート等に応じて、乗算器５０’や加算器６０’に対して要求される演算精度が変化する。例えば、乗算器５０’と加算器６０’が、最大で、小数点以下３０ビットという演算能力を備えていたとしても、乗算器５０’や加算器６０’に対して要求される演算精度は、小数点以下１４ビットで十分な場合もあれば、小数点以下３０ビットでなければ駄目な場合もある。 
【００３７】
そこで、本実施形態に係わるＤＳＰ２では、例えば、乗算器５０’や加算器６０’に対して要求される演算精度が“16bit（s1.14）”であった場合は、計３２ビットのデータを保持することができるレジスタ８０’において、８つのＦＦ８２ａ〜ＦＦ８２ｈのうち、下位１６ビット分のデータを保持する４つのＦＦ８２ｅ〜ＦＦ８２ｈについて、クロックＥＮＣＬＫの供給を止め、その動作を停止させるようにする。
【００３８】
図４において、演算精度指定データＣは、乗算器５０’や加算器６０’に対して演算精度を指定するためのデータである。乗算器５０’や加算器６０’は、演算精度指定データＣが供給されると、演算精度指定データＣによって指定される演算精度で数値演算を行なう。また、演算精度指定データＣは、乗算器５０’や加算器６０’に加え、制御回路９０に対しても供給される。
【００３９】
なお、乗算器５０’や加算器６０’に対する演算精度の指定は、例えば、ＤＳＰ２のファームウェア等から行うことが可能である。また、ＤＳＰ２に入力する数値データの有効ビット長が指定された場合に、この有効ビット長を示す情報を演算精度指定データＣとして用いることもできる。また、図４においては、演算精度指定データＣをＤＳＰ２の外部から取り込んで、乗算器５０’，加算器６０’，制御回路９０に供給する場合について記載しているが、例えば、演算精度指定データＣと処理種別の対応関係を示すデータテーブルをプログラムＲＡＭ１０に格納しておき、処理を実行する都度、その処理に対応する演算精度指定データＣを読み出して乗算器５０’，加算器６０’，制御回路９０に供給する構成であってもよい。また、プログラムＲＡＭ１０に格納されている命令ｉ（演算命令や制御命令）に、演算精度を指定するビットデータを設け、このビットデータに対応する演算精度指定データＣが、命令ｉとともに乗算器５０’，加算器６０’，制御回路９０に供給される構成であってもよい。このように演算精度の指定は、１演算毎や１サブルーチン毎、あるいは１処理毎に行うことが可能である。
【００４０】
また、乗算器５０’や加算器６０’は、演算精度指定データＣ１が供給されると、次に演算精度指定データＣ２が供給されるまでの間、演算精度指定データＣ１によって指定される演算精度で、繰り返し数値演算を行なう構成であってもよい。
【００４１】
制御回路９０では、演算精度指定データＣが供給されると、演算精度指定データＣによって指定される演算精度に基づいてイネーブル信号ＥＮ［7：0］の値を決定し、これをレジスタ８０’に供給する。例えば、上述したように演算精度指定データＣが“16bit（s1.14）”であった場合は、レジスタ８０’に備わる８つのＦＦ８２ａ〜ＦＦ８２ｈのうち、下位１６ビット分の値を保持する４つのＦＦ８２ｅ〜ＦＦ８２ｈについて、クロックＥＮＣＬＫの供給を停止させるため、イネーブル信号ＥＮ［7：0］の値が“11110000”に設定される。
【００４２】
この場合、レジスタ８０’では、４つのＦＦ８２ｅ〜ＦＦ８２ｈに対するクロックＥＮＣＬＫの供給を停止する。したがって、乗算器５０’や加算器６０’による演算結果［16bit（s1.14）］をレジスタ８０’で保持する場合には、演算結果がＦＦ８２ａ〜８２ｄに保持される。また、レジスタ８０’で保持している演算結果を出力する場合には、８つのＦＦ８２ａ〜８２ｈからデータが出力されるが、この際、ＦＦ８２ｅ〜８２ｈからの出力値（下位１６ビット）については、その後段に設けられたマスク回路８３ｅ〜８３ｈによって全ての値がマスクされる。
【００４３】
なお、第１実施形態では、クロックＥＮＣＬＫの供給を停止したフリップフロップからの出力値をマスクする際に、その値を“０”にしたが、本実施形態では、クロックＥＮＣＬＫの供給を停止したフリップフロップからの出力値は、要求される演算精度では不要となるデータとなることから、マスクの際には、その値を“０”にするのではなく、削除またはヌル（null）にする。このように本実施形態におけるレジスタ８０’は、フリップフロップからの出力値をマスク回路においてマスクする際に、その値を削除またはヌルにする点で、第１実施形態において説明したレジスタ８０とは異なる。
【００４４】
このように本実施形態によれば、レジスタ８０’に備わる８つのＦＦ８２ａ〜ＦＦ８２ｈのうち、乗算器５０’や加算器６０’に対して要求された演算精度では不要となるフリップフロップについて、クロックＥＮＣＬＫの供給を止め、その動作を停止させることが可能となる。したがって、ＤＳＰ２の消費電力を削減できる。
【００４５】
＜変形例＞
本発明は上述した実施形態に限定されるものではなく、例えば、以下に述べる各種の変形が可能である。
【００４６】
（１）２つの数値データの加算結果をレジスタ８０に保持する場合について考えてみると、例えば、加算する２つの数値データのうち、一方の数値データについては下位７ビットの値が全て“０”で、他方の数値データについては下位４ビットの値が全て“０”であった場合、その加算結果については、少なくとも下位４ビットの値が全て“０”になる。このような場合には、レジスタ８０に備わる８つのＦＦ８２ａ〜ＦＦ８２ｈのうち、下位４ビットの値を保持する１つのＦＦ８２ｈについて、クロックＥＮＣＬＫの供給を停止し、消費電力の削減を図ることが可能である。
【００４７】
図５は、本変形例に係わるＤＳＰ３の全体構成を示すブロック図である。
なお、同図において、第１実施形態で説明したＤＳＰ１と共通する構成要素には同一の符号を付している。同図に示すようにＤＳＰ３では、加算器６０に供給される２つの数値データＸ，Ｙが制御回路１００に対しても供給され、制御回路１００では、まず、供給された数値データＸ，Ｙの各々について、最下位ビットから連続する０の数を検出する。次いで、制御回路１００は、検出した２つの値のうち小さい方の値を選択し、これを最終的な検出値とする。なお、検出した２つの値が同値の場合は、いずれか一方の値が最終的な検出値として選択される。
【００４８】
例えば、数値データＸが“0x214CE000”（100001010011001110000000000000）で、数値データＹが“0x00007F00”（000000000000000111111100000000）の場合、数値データＸについては最下位ビットから連続する０の数が“１３”であり、数値データＹについては最下位ビットから連続する０の数が“８”であるので、制御回路１００は、これらの２つの値を検出すると両者を比較し、最終的な検出値として“８”を得る。ちなみに、加算結果は“0x214D5F00”（100001010011010101111100000000）となり、下位８ビットの値が全て“０”となる。
【００４９】
この後、制御回路１００は、最終的に得られた検出値に基づいてイネーブル信号ＥＮ［7：0］の値を決定し、これをレジスタ８０に供給する。例えば、上述したように最終的な検出値が“８”であった場合は、レジスタ８０に備わる８つのＦＦ８２ａ〜ＦＦ８２ｈのうち、下位８ビットの値を保持する２つのＦＦ８２ｇ，８２ｈについて、クロックＥＮＣＬＫの供給を停止させるため、イネーブル信号ＥＮ［7：0］の値が“11111100”に設定される。
【００５０】
このようにイネーブル信号ＥＮ［7：0］の値が“11111100”に設定された場合、レジスタ８０では、２つのＦＦ８２ｇ，８２ｈに対するクロックＥＮＣＬＫの供給を停止させる。したがって、加算器６０の加算結果“0x214D5F00”をレジスタ８０に保持する場合には、計３２ビットのデータのうち、下位８ビットのデータは保持されず、残りの上位２４ビットのデータのみがＦＦ８２ａ〜８２ｆに保持される。また、レジスタ８０で保持している加算結果を出力する場合には、下位８ビットに相当するＦＦ８２ｇ，８２ｈからの出力値についてのみ、その後段に設けられたマスク回路８３ｇ，８３ｈによって全ての値が“０”にマスクされる。したがって、加算結果をレジスタ８０で保持している期間において、ＦＦ８２ｇ，８２ｈに対するクロックＥＮＣＬＫの供給を停止させ、これら２つのＦＦ８２ｇ，８２ｈの動作を停止させることができるので、ＤＳＰ３の消費電力を削減できる。
【００５１】
このように本変形例によれば、加算器６０の加算結果をレジスタ８０に保持する場合についても、加算結果において最下位ビットから０が少なくとも４ビット以上連続している場合には、レジスタ８０に備わる１以上のフリップフロップについて、クロックＥＮＣＬＫの供給を止め、その動作を停止させることが可能となる。したがって、ＤＳＰ３の消費電力を削減できる。
【００５２】
（２）上述した実施形態および変形例では、レジスタにおいて、乗算器や加算器による演算結果を４ビットずつ分けて保持する場合について説明した。しかしながら、レジスタにおいて、乗算器や加算器による演算結果を、３ビット単位や５ビット単位、あるいは１ビット単位で分けて保持する構成であってもよい。例えば、演算結果を３ビット単位で分けて保持する場合には、３ビットのデータをクロックに同期して保持するフリップフロップをレジスタに複数備えればよい。また、演算結果を１ビット単位で分けて保持する場合には、１ビットのデータをクロックに同期して保持するフリップフロップをレジスタに複数備えればよい。
また、本発明は、楽音・音声処理用のデジタル信号処理装置の他に、例えば、画像処理用のデジタル信号処理装置にも適用可能である。
【図面の簡単な説明】
【００５３】
【図１】第１実施形態に係わるＤＳＰ１の全体構成を示すブロック図である。
【図２】同実施形態に係わるレジスタ８０の構成を示す回路図である。
【図３】同実施形態に係わるＣＫＧ８１ａの構成を示す回路図である。
【図４】第２実施形態に係わるＤＳＰ２の全体構成を示すブロック図である。
【図５】変形例に係わるＤＳＰ３の全体構成を示すブロック図である。
【符号の説明】
【００５４】
１，２，３…ＤＳＰ、１０…プログラムＲＡＭ、２０…セレクタ、３０…ワークＲＡＭ、４０…係数ＲＡＭ、５０，５０’…乗算器、６０，６０’…加算器、７０，９０，１００…制御回路、８０，８０’…レジスタ、８０ａ〜８０ｈ…保持回路、８１ａ〜８１ｈ…ＣＫＧ（クロックゲーティングセル）、８２ａ〜８２ｈ…ＦＦ（フリップフロップ）、８３ａ〜８３ｈ…マスク回路、８１１…ラッチ回路、８１２…ＡＮＤ回路。
【図１】
0004935619.tif 000002
【図２】
0004935619.tif 000003
【図３】
0004935619.tif 000004
【図４】
0004935619.tif 000005
【図５】
0004935619.tif 000006