(57)【特許請求の範囲】
【請求項１】
出力値を、出力値の冗長２進表現の各桁を、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列で置き換えることによって得られるビット列で出力し、出力データのビットの変化回数が少なくなるように、出力値の冗長２進表現と、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列での置き換え方が選択されることを特徴とする読み出し専用メモリ。
【請求項２】
演算過程において読み出し専用メモリの出力データを使用する演算装置において、
出力値を、出力値の冗長２進表現の各桁を、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列で置き換えることによって得られるビット列で出力し、出力データのビットの変化回数が少なくなるように、出力値の冗長２進表現と、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列での置き換え方が選択される読み出し専用メモリを設けたことを特徴とする演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、読み出し専用メモリ、及び、演算過程において読み出し専用メモリの出力データを使用する演算装置に関するものである。
【０００２】
【従来の技術】
演算過程において読み出し専用メモリ（以下、「メモリ」と省略する）の出力データを使用する演算装置の一例のブロック図を図９に示す。同図において、数値演算処理装置１００は、当該演算装置への入力Ｘと、メモリ２００の出力データとに基づいて演算を行い、出力Ｙを得ている。
【０００３】
そして、メモリ２００は出力値を２進表現で出力している。つまり、メモリ２００からは、例えば、その出力ビット数を１２ビットとすると、出力値が７２４であるときは、７２４の２進表現である００１０１１０１０１００が出力され、また、出力値が−２５６と負値であるときは、−２５６を２の補数を用いて２進表現した１１１１００００００００が出力される。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記の演算装置においては、入力Ｘの変化、あるいは、演算処理の対象となる入力の変化などによって、メモリ２００の出力データも当然変化するわけであるが、上述したように、メモリ２００の出力データは２進表現であるため、メモリの出力データのビットの変化回数（以下、「遷移回数」と呼ぶ）が多く、これは、消費電力の増大につながり、また、装置の摩耗を促進し、装置の寿命を短くする原因となっている。
【０００５】
そこで、本発明は、消費電力を低減し、かつ、装置の寿命を延ばすことができるメモリ、及び、消費電力が低く、かつ、寿命が長い演算装置を提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記の目的を達成するため、請求項１に記載のメモリでは、出力値を、出力値の冗長２進表現の各桁を、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列で置き換えることによって得られるビット列で出力し、出力データのビットの変化回数が少なくなるように、出力値の冗長２進表現と、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列での置き換え方が選択されるようにしている。
【０００７】
以上の構成によって、後述するように、各出力値の前あるいは後の少なくともどちらか一方に出力される出力値が決まっているメモリについては、出力値を２進表現で出力するメモリよりも、遷移回数を少なくすることができる。また、一部の出力値に対して、その前あるいは後の少なくともどちらか一方に出力される出力値が決まっているメモリであれば、上記作用が生じる可能性がある。
【０００８】
また、請求項２に記載の演算装置では、演算過程において読み出し専用メモリの出力データを使用する演算装置において、出力値を、出力値の冗長２進表現の各桁を、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列で置き換えることによって得られるビット列で出力し、出力データのビットの変化回数が少なくなるように、出力値の冗長２進表現と、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる複数ビット列での置き換え方が選択される読み出し専用メモリを設けている。
【０００９】
以上の構成によって、後述するように、メモリの各出力データを使用するに際して、その前あるいは後の少なくともどちらか一方に使用する出力データが決まっている演算装置については、出力値を２進表現で出力するメモリを設けた場合よりも、遷移回数を少なくすることができる。また、メモリの一部の出力データを使用するに際して、その前あるいは後の少なくともどちらか一方に使用するデータが決まっている演算装置であれば、上記作用が生じる可能性がある。
【００１０】
【発明の実施の形態】
以下に、本発明の実施形態を図面を参照しながら説明する。本発明の一実施形態であるメモリは、出力値の冗長２進表現の各桁を、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なる２ビット列で置き換えることによって得られるビット列で出力値を出力する（以下、冗長２進表現の各桁を、冗長２進表現の各桁がとり得る値に割り当てられたそれぞれ異なるｘビット列で置き換えることを、「冗長２進表現をｘビット列で符号化する」と呼び、冗長２進表現をｘビット列で符号化することによって得られるビット列を「冗長２進表現符号」と呼ぶ）。
【００１１】
ここで、冗長２進表現とは、２を固定基数とし、−１と０と１との３つを用いて数値を表したものである。すなわち、冗長２進表現と２進表現とでは各桁の重みが同じ（２）であり、各桁のとり得る値が異なっている（２進表現では０と１との２つであるのに対し、冗長２進表現では−１と０と１との３つである）。そして、この冗長２進表現では、１つの数値について複数の表し方が可能である。具体的には、例えば、５桁の冗長２進表現では、数値１を「００００１」、「０００１−１」、「００１−１−１」、「０１−１−１−１」、「１−１−１−１−１」と表すことができる。
【００１２】
次に、冗長２進表現の各桁がとり得る値は−１、０、１の３つであり、２ビット列としては（００）、（０１）、（１０）、（１１）の４つが考えられるので、冗長２進表現を２ビット列で符号化するには、4Ｐ3＝２４通りの方法がある。しかしながら、今、問題としているのは、遷移回数（ビットの変化数）であって、冗長２進表現の桁においては、−１と０との間、０と１との間、１と−１との間での３通りの変化が考えられ、−１、０、１の３つにそれぞれ異なる２ビット列を割り当てると、その割り当て方によらず、前記３通りの変化のうちのいずれか１つにおいて遷移回数が２となり（割り当てた２ビットが両方ともに変化し）、残りの２つにおいては遷移回数が１となる（割り当てた２ビットの一方しか変化しない）ので、冗長２進表現を２ビット列で符号化するには、遷移回数が２となるのを、−１と０との間での変化の際とするか、０と１との間での変化の際とするか、１と−１との間での変化の際とするか、の３通りの方法があることになる。
【００１３】
この３通りの方法のそれぞれの一例を図１に示す。同図において、−１に（１０）を、０に（００）を、１に（１１）を、それぞれ割り当てたものを定義１とし、−１に（１１）を、０に（００）を、１に（０１）を、それぞれ割り当てたものを定義２とし、−１に（１０）を、０に（００）を、１に（０１）を、それぞれ割り当てたものを定義３としており、定義１によれば０と１との間での変化の際に、定義２によれば−１と０との間での変化の際に、定義３によれば−１と１との間での変化の際に、それぞれ遷移回数が２となる。
【００１４】
そして、出力の順番が決められていたり、出力値が限定され完全に自由ではないメモリについては、冗長２進表現符号で出力値を出力することによって、２進表現で出力値を出力するよりも、遷移回数を少なくすることができる可能性が生じる。というのは、冗長２進表現では、前述したように、１つの数値について複数の表し方が可能であるので、メモリの各出力値の前あるいは後に出力される出力値が決まっていれば、遷移回数が少なくなるように、各出力値の前あるいは後に出力される出力値に応じて、各出力値の表し方を適切に選択することができるからである。
【００１５】
これを具体的な例を挙げて確認してみる。例えば、図２に示すように、メモリの出力値が０から３１に変化するとき、２進表現では０は「０００００」であり、３１は「１１１１１」であるので、メモリの出力データが２進表現である場合は遷移回数が５であるのに対し、冗長２進表現では、桁数を６桁とすると、０は「００００００」であり、３１は「０１１１１１」、「１−１１１１１」、「１０−１１１１」、「１００−１１１」、「１０００−１１」、「１００００−１」と表すことができるが、「１００００−１」を選択することによって、冗長２進表現の各桁の変化回数としては、−１と０との間での変化が１回、０と１との間での変化が１回であるので、メモリの出力データが冗長２進表現を２ビット列で符号化したものである場合は、冗長２進表現を符号化する方法が、図１に示す定義１であれば遷移回数を３、図１に示す定義２であれば遷移回数を３、図１に示す定義３であれば遷移回数を２、とそれぞれすることができる。
【００１６】
以上の内容からして、本実施形態のメモリによれば、各出力値の前あるいは後の少なくともどちらか一方に出力される出力値が決まっているメモリについては、出力値を２進表現で出力するメモリよりも、遷移回数を少なくすることができるので、消費電力を低減し、メモリの出力データを使用する装置の寿命を延ばすことができる。また、一部の出力値に対して、その前あるいは後の少なくともどちらか一方に出力される出力値が決まっているメモリであれば、上記作用効果を奏する可能性がある。
【００１７】
以下、本発明の演算装置について説明する。尚、演算過程においてメモリの出力データを使用する演算装置としては、定数加算器、定数乗算器、定数係数の積和演算器、係数の決まったマトリクス演算器、ディジタル比較器、マトリクス演算器を応用した離散コサイン変換器など様々なものが存在するが、離散コサイン変換器を例にとって行うものとする。
【００１８】
まず、離散コサイン変換について説明を行う。例えば、１次元の８個のｎビットのデータＸ1、Ｘ2、…、Ｘ8に対する離散コサイン変換式は次に示す（数１）で表され、この変換式で得られる８個のデータＹ1、Ｙ2、…、Ｙ8は離散コサイン変換係数と呼ばれる。
【００１９】
【数１】
0003916277.tif 000002
【００２０】
（数１）を変形すると、次の（数２）が得られる。
【００２１】
【数２】
0003916277.tif 000003
【００２２】
（数２）の係数を整数にするために、係数を２9倍して小数点以下を切り捨てると、次の（数３）が得られる。
【００２３】
【数３】
0003916277.tif 000004
【００２４】
（数３）より、Ｙj（ｊ＝１、２、…、８）は次に示す（数４）で表される。
【００２５】
【数４】
0003916277.tif 000005
【００２６】
次に、（数４）のＺk（ｋ＝１、２、３、４）は２つのｎビットのデータＸjの和あるいは差であるので、Ｚkをｎ＋１ビットとし、Ｚkのビット位ｉのビットをＺk（ｉ）とおくと、Ｚkは次に示す（数５）で表される。尚、ビット位ｉとは、最下位のｉ−１個上の桁を意味しており、例えば、ビット位１のビットは最下位ビットを表しており、Ｚkのビット位ｎ＋１のビットは最上位ビットを表している。
【００２７】
【数５】
0003916277.tif 000006
【００２８】
（数５）より、（数４）は次に示す（数６）で表される。
【００２９】
【数６】
0003916277.tif 000007
【００３０】
（数４）で示したように、ｊに応じてＴ1、Ｔ2、Ｔ3、Ｔ4が固定されているので、（数６）より、Ｙjはｎ＋１個の４ビット列（Ｚ1（１）Ｚ2（１）Ｚ3（１）Ｚ4（１））、（Ｚ1（２）Ｚ2（２）Ｚ3（２）Ｚ4（２））、…、（Ｚ1（ｎ＋１）Ｚ2（ｎ＋１）Ｚ3（ｎ＋１）Ｚ4（ｎ＋１））の関数であることがわかる。
【００３１】
尚、ここで、Ｔ1・Ｚ1（ｉ）＋Ｔ2・Ｚ2（ｉ）＋Ｔ3・Ｚ3（ｉ）＋Ｔ4・Ｚ4（ｉ）をＹjの部分和と定義し、以下、必要に応じて、Ｚkのビット位１のビットを要素とするＹjの部分和、つまり、Ｔ1・Ｚ1（１）＋Ｔ2・Ｚ2（１）＋Ｔ3・Ｚ3（１）＋Ｔ4・Ｚ4（１）をＹjの第１部分和、Ｚkのビット位２のビットを要素とするＹjの部分和、つまり、Ｔ1・Ｚ1（２）＋Ｔ2・Ｚ2（２）＋Ｔ3・Ｚ3（２）＋Ｔ4・Ｚ4（２）をＹjの第２部分和、…、Ｚkのビット位ｎ＋１のビットを要素とするＹjの部分和、つまり、Ｔ1・Ｚ1（ｎ＋１）＋Ｔ2・Ｚ2（ｎ＋１）＋Ｔ3・Ｚ3（ｎ＋１）＋Ｔ4・Ｚ4（ｎ＋１）をＹjの第ｎ＋１部分和、というように表現する。
【００３２】
そこで、Ｚkのビット数と同数（ｎ＋１個）のメモリを設け、各メモリにＹjの部分和がとり得る値の全て（８×２4＝１２８個）を記憶させておき、各メモリが、例えば、ｊの値を示すデータ及び４ビット列（Ｚ1（ｉ）Ｚ2（ｉ）Ｚ3（ｉ）Ｚ4（ｉ））を入力すると、その入力に応じたＹjの部分和を出力するようにしておけば、ｊの値を示すデータを各メモリに与え、また、Ｚkの各同一ビット位のビットからなる全て（ｎ＋１個）の４ビット列（Ｚ1（１）Ｚ2（１）Ｚ3（１）Ｚ4（１））、（Ｚ1（２）Ｚ2（２）Ｚ3（２）Ｚ4（２））、…、（Ｚ1（ｎ＋１）Ｚ2（ｎ＋１）Ｚ3（ｎ＋１）Ｚ4（ｎ＋１））をそれぞれ異なるメモリに与え、その際に各メモリが出力する部分和を、（数６）に示すように、その要素である４ビット列を構成するビットのＺkにおけるビット位に応じてシフトさせて加算することによって、Ｙjを算出することができる。
【００３３】
以上のような方法を用いることによって、８個の入力データＸ1、Ｘ2、…、Ｘ8に対して離散コサイン変換係数Ｙ1、Ｙ2、…、Ｙ8を出力する１次元８要素の離散コサイン変換器のブロック図を図３に示す。尚、入力データＸ1、Ｘ2、…、Ｘ8はそれぞれ１０ビットとする。同図において、１はカウンタ、２は加減算器、３−１、３−２、…、３−１１はメモリ、４は加算器である。
【００３４】
以下、各部の動作について説明する。まず、カウンタ１の出力（以下、「カウンタ値」と呼ぶ）は所定時間毎にサイクリックに変化し、８種類の信号が存在している、つまり、８種類の信号をａ、ｂ、ｃ、ｄ、ｅ、ｆ、ｇ、ｈと表現すれば、カウンタ値はａ→ｂ→ｃ→ｄ→ｅ→ｆ→ｇ→ｈ→ａ→…と変化する。そして、カウンタ値は加減算器２とメモリ３−１、３−２、…、３−１１とに与えられている。
【００３５】
次に、加減算器２は当該１次元８要素の離散コサイン変換器への入力である８個のデータＸ1、Ｘ2、…、Ｘ8に対して、４つのデータＺ1、Ｚ2、Ｚ3、Ｚ4を生成し、カウンタ値がａ、ｂ、ｃ、ｄであるときは、Ｚ1＝Ｘ1＋Ｘ8、Ｚ2＝Ｘ2＋Ｘ7、Ｚ3＝Ｘ3＋Ｘ6、Ｚ4＝Ｘ4＋Ｘ5であり、カウンタ値がｅ、ｆ、ｇ、ｈであるときは、Ｚ1＝Ｘ1−Ｘ8、Ｚ2＝Ｘ2−Ｘ7、Ｚ3＝Ｘ3−Ｘ6、Ｚ4＝Ｘ4−Ｘ5である。尚、Ｚ1、Ｚ2、Ｚ3、Ｚ4は、Ｘ1、Ｘ2、…、Ｘ8がそれぞれ１０ビットであり、これらについて１回加算あるいは減算したものであるので、それぞれ１１ビットとなる。
【００３６】
そして、Ｚ1、Ｚ2、Ｚ3、Ｚ4はそれぞれビット分配され、Ｚ1、Ｚ2、Ｚ3、Ｚ4の各同一ビット位のビットからなる１１組の４ビット列（Ｚ1（ｉ）Ｚ2（ｉ）Ｚ3（ｉ）Ｚ4（ｉ））（ｉ＝１〜１１）が加減算器２から出力され、このうち、Ｚ1、Ｚ2、Ｚ3、Ｚ4のビット位１のビットからなるもの、つまり、（Ｚ1（１）Ｚ2（１）Ｚ3（１）Ｚ4（１））がメモリ３−１に、Ｚ1、Ｚ2、Ｚ3、Ｚ4のビット位２のビットからなるもの、つまり、（Ｚ1（２）Ｚ2（２）Ｚ3（２）Ｚ4（２））がメモリ３−２に、…、Ｚ1、Ｚ2、Ｚ3、Ｚ4のビット位１１のビットからなるもの、つまり、（Ｚ1（１１）Ｚ2（１１）Ｚ3（１１）Ｚ4（１１））がメモリ３−１１にというように、それぞれ異なるメモリに与えられる。
【００３７】
メモリ３−１、３−２、…、３−１１の出力値はそれぞれ、図４に示すように、入力であるカウンタ値と４ビット列（Ｚ1（ｉ）Ｚ2（ｉ）Ｚ3（ｉ）Ｚ4（ｉ））について、カウンタ値がａである場合に、４ビット列が（００００）であるときは０、４ビット列が（０００１）であるときは３６２、…、４ビット列が（１１１１）であるときは１４４８であり、カウンタ値がｂである場合に、４ビット列が（００００）であるときは０、４ビット列が（０００１）であるときは−４３７、…、４ビット列が（１１１１）であるときは０であり、………、カウンタ値がｈである場合に、４ビット列が（００００）であるときは０、４ビット列が（０００１）であるときは−３６２、…、４ビット列が（１１１１）であるときは−１８８である。
【００３８】
これにより、カウンタ値とＺkとの関係、（数４）に示すＹjのｊの値とＺkの係数Ｔkの値との関係、及び、各メモリが入力する４ビット列を構成するビットのＺkにおけるビット位からして、カウンタ値がａであるときは、メモリ３−１はＹ1の第１部分和を、メモリ３−２はＹ1の第２部分和を、…、メモリ３−１１はＹ1の第１１部分和を、それぞれ出力し、カウンタ値がｂであるときは、メモリ３−１はＹ3の第１部分和を、メモリ３−２はＹ3の第２部分和を、…、メモリ３−１１はＹ3の第１１部分和を、それぞれ出力し、カウンタ値がｃであるときは、メモリ３−１はＹ5の第１部分和を、メモリ３−２はＹ5の第２部分和を、…、メモリ３−１１はＹ5の第１１部分和を、それぞれ出力し、カウンタ値がｄであるときは、メモリ３−１はＹ7の第１部分和を、メモリ３−２はＹ7の第２部分和を、…、メモリ３−１１はＹ7の第１１部分和を、それぞれ出力し、カウンタ値がｅであるときは、メモリ３−１はＹ2の第１部分和を、メモリ３−２はＹ2の第２部分和を、…、メモリ３−１１はＹ2の第１１部分和を、それぞれ出力し、カウンタ値がｆであるときは、メモリ３−１はＹ4の第１部分和を、メモリ３−２はＹ4の第２部分和を、…、メモリ３−１１はＹ4の第１１部分和を、それぞれ出力し、カウンタ値がｇであるときは、メモリ３−１はＹ6の第１部分和を、メモリ３−２はＹ6の第２部分和を、…、メモリ３−１１はＹ6の第１１部分和を、それぞれ出力し、カウンタ値がｈであるときは、メモリ３−１はＹ8の第１部分和を、メモリ３−２はＹ8の第２部分和を、…、メモリ３−１１はＹ8の第１１部分和を、それぞれ出力することになる。尚、各メモリの出力ビット数は、後述するように、今の場合、２２ビット以上とすればよい。
【００３９】
次に、加算器４はメモリ３−１、３−２、…、３−１１が出力する部分和を入力し、これらを、メモリ３−１が出力するものはシフトさせないが、メモリ３−２が出力する部分和は１ビット上に、メモリ３−３が出力する部分和は２ビット上に、…、メモリ３−１１が出力する部分和は１０ビット上に、それぞれシフトさせた後、加算する。
【００４０】
これにより、前述したように、メモリ３−１、３−２、…、３−１１がそれぞれＹjの第１部分和、第２部分和、…、第１１部分和を出力すること、及び、（数６）に示すＹjとその部分和との関係からして、Ｙjが算出されることになる。尚、加算器４は加算結果、すなわち、Ｙjを出力するに際して、必要に応じて所定ビット数に丸めるという処理を行うようになっている。また、この１次元８要素の離散コサイン変換器においては、図４に示す各メモリの入出力関係、及び、前述したカウンタ値の変化態様からして、Ｙ1、Ｙ3、Ｙ5、Ｙ7、Ｙ2、Ｙ4、Ｙ6、Ｙ8の順にＹjが算出されることになる。
【００４１】
そして、図４に示す各メモリの出力値は冗長２進表現を２ビット列で符号化した冗長２進表現符号で出力される。つまり、例えば、メモリに入力される４ビット列が（０１０１）で、カウンタ値がａであるときには、出力値は７２４であるので、この冗長２進表現の１つである「０１０−１００−１０−１−１００」を２ビット列で符号化したもの、すなわち、冗長２進表現を２ビット列で符号化する方法が図１に示す定義３である場合は、（０００１００１０００００１０００１０１０００００）が出力される。
【００４２】
ここで、メモリに出力値を冗長２進表現符号で出力させるには、まず、出力値を冗長２進表現に変換する必要があるが、前述したように、１つの数値を表す冗長２進表現は複数存在するので、その中から１つを選択しなければならない。これについて以下に説明する。本実施形態の１次元８要素の離散コサイン変換器においては、カウンタ値がａ→ｂ→ｃ→ｄと変化する間、及び、ｅ→ｆ→ｇ→ｈと変化する間は、Ｚkが変化せず、よって、メモリへの入力４ビット列が変化しないので、メモリの各入力４ビット列に対する、カウンタ値がａのときの出力値、カウンタ値がｂのときの出力値、カウンタ値がｃのときの出力値、及び、カウンタ値がｄのときの出力値、の４つの出力値の間では出力の順番が固定されており、同じく、カウンタ値がｅのときの出力値、カウンタ値がｆのときの出力値、カウンタ値がｇのときの出力値、及び、カウンタ値がｈのときの出力値、の４つの出力値の間では出力の順番が固定されている。したがって、遷移回数を少なくするという観点からして、これらの４つの出力値が順に出力される際の、それぞれの冗長２進表現間での桁の変化回数が最も少なくなるように、各出力値の冗長２進表現を（冗長２進表現を符号化する方法も踏まえて）選択することになる。
【００４３】
具体的な例を図５を用いて示す。メモリの出力値は、入力４ビット列（０１０１）に対して、カウンタ値がａのときのは７２４、カウンタ値がｂのときは−２５６、カウンタ値がｃのときは０、カウンタ値がｄのときは−５１２であるので、７２４の冗長２進表現としては「０１０−１００−１０−１−１００」を、−２５６の冗長２進表現としては「０００−１００００００００」を、−５１２の冗長２進表現としては「００−１０００００００００」を、それぞれ選択することによって（０の冗長２進表現は「００００００００００００」である）、カウンタ値がａ→ｂ→ｃ→ｄと変化する間の１つのメモリの遷移回数が６と最も少なくなる（図５の（イ））。また、メモリの出力値は、入力４ビット列（００１１）に対して、カウンタ値がｅのときのは３７７、カウンタ値がｆのときは−７０８、カウンタ値がｇのときは４４７、カウンタ値がｈのときは−５５であるので、３７７の冗長２進表現としては「００１０−１００００−１−１−１」を、−７０８の冗長２進表現としては「０−１１０−１−１０００−１００」を、４４７の冗長２進表現としては「００１００−１０００００−１」を、−５５の冗長２進表現としては「０００００−１００１０１−１」を、それぞれ選択することによって、カウンタ値がｅ→ｆ→ｇ→ｈと変化する間の１つのメモリの遷移回数が１１と最も少なくなる（図５の（ロ））。尚、冗長２進表現を符号化する方法としては、図１に示す定義３を用いている。
【００４４】
そして、上記２つの例において、カウンタ値がｄ→ｅと変化する間の１つのメモリの遷移回数は６となるので（図５の（ハ））、１次元８要素の離散コサイン変換器が８個のデータＸ1、Ｘ2、…、Ｘ8を入力してから８個の離散コサイン変換係数Ｙ1、Ｙ2、…、Ｙ8を出力するまでの間の１つのメモリにおける遷移回数（以下、「総遷移回数」と表現する）は、カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列が（０１０１）、カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列が（００１１）であるメモリでは、６＋１１＋６＝２３となる。
【００４５】
このようにして、メモリの各入力４ビット列に対するカウンタ値がａ、ｂ、ｃ、ｄのときの４つの出力値とそれらの出力順、及び、カウンタ値がｅ、ｆ、ｇ、ｈのときの４つの出力値とそれらの出力順に基づいて、メモリが格納している１２８個の全ての出力値について冗長２進表現が選択されている。
【００４６】
尚、比較のため、従来通りメモリの出力値を２進表現で出力する場合の１つのメモリにおける遷移回数を求めてみると、図７に示すように、カウンタ値がａ、ｂ、ｃ、ｄであるときの４ビット列が（０１０１）であり、カウンタ値がｅ、ｆ、ｇ、ｈであるときの４ビット列が（００１１）である場合、カウンタ値がａ→ｂ→ｃ→ｄと変化する間の遷移回数は１４となり（図７の（イ））、また、カウンタ値がｅ→ｆ→ｇ→ｈと変化する間の遷移回数は１８となり（図７の（ロ））、また、カウンタ値がｄ→ｅと変化する間の遷移回数は９となる（図７の（ハ））。よって、カウンタ値がａ、ｂ、ｃ、ｄであるときの４ビット列が（０１０１）であり、カウンタ値がｅ、ｆ、ｇ、ｈであるときの４ビット列が（００１１）であるメモリでは、総遷移回数が１４＋１８＋９＝４１となる。
【００４７】
ここで、メモリの出力ビット数については、上記例（図５）によれば、出力値の冗長２進表現を１２桁としており、メモリからは冗長２進表現符号（冗長２進表現を２ビット列で符号化したもの）が出力されるので、１２桁×２＝２４ビットとなるが、ｎ桁の冗長２進表現では−２n＋１〜２n−１の数値を表すことができるので、本実施形態の１次元８要素の離散コサイン変換器においては、メモリの出力値が−７９８〜１４４８である（図４参照）ことから、１１桁の冗長２進表現でメモリの出力値を全て表すことができ、１１桁×２＝２２ビットとしてもよい。また、逆に、メモリの出力ビット数を２４ビットよりも多くしてもよく、こうすることによって、冗長２進表現の桁数が多くなり、１つの数値をより多くの態様で表すことができるので、遷移回数をより一層少なくすることが可能である。結論として、本実施形態の１次元８要素の離散コサイン変換器では、メモリの出力ビット数を２２ビット以上確保しておけばよい。
【００４８】
尚、ｎ桁の２進表現では、負数を２の補数で表現するとして、−２n-1〜２n-1−１の数値を表すことができ、一方、ｎ−１桁の冗長２進表現では−２n-1＋１〜２n-1−１の数値を表すことができるので、ｎ桁の２進表現では表すことができて、ｎ−１桁の冗長２進表現では表すことができない数値は−２n-1の１つだけであり、ほとんどの場合、ｎ桁の２進表現はｎ−１桁の冗長２進表現で置き換えることができる。したがって、メモリに出力値を２進表現で出力させるときに、メモリの出力ビット数がｎビット以上必要であった場合に、メモリに出力値を冗長２進表現符号で出力させるには、メモリの出力ビット数を（ｎ−１）×２＝２ｎ−２ビット以上としておけばよい。
【００４９】
そして、全ての入力４ビット列について、１つのメモリにおける、カウンタ値がａ→ｂ→ｃ→ｄと変化するときの遷移回数、カウンタ値がｅ→ｆ→ｇ→ｈと変化するときの遷移回数、及び、カウンタ値がｄ→ｅと変化するときの遷移回数を求め、その結果をまとめたものが図６である。
【００５０】
同図において、「遷移回数」と記入されている欄の各下欄は、カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列がその左隣の欄に記入されているものである場合に、カウンタ値がａ→ｂ→ｃ→ｄと変化する間の遷移回数を示しており、これらの合計がその最下欄に記入されている。
【００５１】
また、「遷移回数」と記入されている欄の各右欄は、カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列がその上隣の欄に記入されているものである場合に、カウンタ値がｅ→ｆ→ｇ→ｈと変化する間の遷移回数を示しており、これらの合計がその最右欄に記入されている。
【００５２】
また、上記２つの各欄が交わる欄は、カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列が最左隣の欄に記入されているものであり、カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列が最上隣の欄に記入されているものである場合に、カウンタ値がｄ→ｅと変化する間の遷移回数を示しており、これらの合計が同図の右下隅の欄に記入されている。
【００５３】
そして、１次元８要素の離散コサイン変換器が８個の入力データＸ1、Ｘ2、…、Ｘ8に対して８個の離散コサイン変換係数Ｙ1、Ｙ2、…、Ｙ8を出力するまでには、１つのメモリについて、カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列が１６種類であり、カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列が１６種類であるので、１６×１６＝２５６通りのパターンが考えられるが、これらの各パターンにおける総遷移回数の合計は、１６６×１６＋１８０×１６＋１５７４＝７１１０となる。そして、この総遷移回数の合計をパターン数（２５６）で割ったもの（以下、「平均総遷移回数」と表現する）は２７．７７となり、この値は各パターンが同じ確率で発生するとした場合の総遷移回数の指標となるものである。
【００５４】
尚、比較のため、従来通りメモリの出力値を２進表現で出力する場合についても、同様に、全ての入力４ビット列について、１つのメモリにおける、カウンタ値がａ→ｂ→ｃ→ｄと変化するときの遷移回数、カウンタ値がｅ→ｆ→ｇ→ｈと変化するときの遷移回数、及び、カウンタ値がｄ→ｅと変化するときの遷移回数を求め、その結果を図８にまとめている。尚、各欄の数値が意味する内容については図６と同じであり、総遷移回数の合計は２４４×１６＋２７２×１６＋１４４２＝９６９８、平均総遷移回数は９６９８÷２５６≒３７．８８となっている。
【００５５】
したがって、１次元８要素の離散コサイン変換器においては、メモリが出力値を、２進表現で出力する代わりに、冗長２進表現符号で出力することによって、平均総遷移回数が３７．８８から２７．７７と約２６．７％少なくすることが可能であることがわかる。
【００５６】
以上のように、本実施形態の１次元８要素の離散コサイン変換器によれば、出力値を２進表現で出力するメモリを設けた場合よりも、遷移回数を少なくすることができるので、装置の消費電力が低くなり、かつ、装置の寿命が長くなるという効果につながる。
【００５７】
尚、本発明の演算装置の実施形態として、１次元８要素の離散コサイン変換器を示したが、本発明の演算装置はこれに限定されるものではなく、演算過程においてメモリの出力データを使用し、メモリの各出力データを使用するに際して、その前あるいは後の少なくともどちらか一方に使用する出力データが決まっている演算装置であればよい。
【００５８】
また、メモリの一部の出力データを使用するに際して、その前あるいは後の少なくともどちらか一方に使用するデータが決まっている演算装置に対して本発明を実施した場合にも、上記作用効果を奏する可能性があると言える。
【００５９】
また、上記実施形態においては、冗長２進表現を符号化するにあたって、２ビット列を用いたが、場合によってはより多くのビット数のビット列を用いてもよい。
【００６０】
【発明の効果】
以上説明したように、請求項１に記載のメモリによれば、各出力値の前あるいは後の少なくともどちらか一方に出力される出力値が決まっているメモリについては、出力値を２進表現で出力するメモリよりも、遷移回数を少なくすることができ、したがって、消費電力を低減し、かつ、装置の寿命を延ばすことができる。尚、一部の出力値に対して、その前あるいは後の少なくともどちらか一方に出力される出力値が決まっているメモリであれば、上記効果が得られる可能性がある。
【００６１】
また、請求項２に記載の演算装置によれば、メモリの各出力データを使用するに際して、その前あるいは後の少なくともどちらか一方に使用する出力データが決まっている演算装置については、出力値を２進表現で出力するメモリを設けた場合よりも、遷移回数を少なくすることができ、これは、装置の消費電力が低くなり、かつ、装置の寿命が長くなるという効果をもたらす。尚、メモリの一部の出力データを使用するに際して、その前あるいは後の少なくともどちらか一方に使用するデータが決まっている演算装置であれば、上記効果が得られる可能性がある。
【図面の簡単な説明】
【図１】  冗長２進表現を２ビット列で符号化する３通りの方法のそれぞれの一例を説明する図である。
【図２】  出力値が０から３１に変化する際に、２進表現で出力する場合と冗長２進表現で出力する場合との遷移回数を比較するための図である。
【図３】  本発明の一実施形態である１次元８要素の離散コサイン変換器のブロック図である。
【図４】  メモリ３−１、３−２、…、３−１１の出力値を示す図である。
【図５】（イ）カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列が（０１０１）である場合に、カウンタ値がａ→ｂ→ｃ→ｄと変化する間の１つのメモリの遷移回数を示す図である。
（ロ）カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列が（００１１）である場合に、カウンタ値がｅ→ｆ→ｇ→ｈと変化する間の１つのメモリの遷移回数を示す図である。
（ハ）カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列が（０１０１）であり、カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列が（００１１）である場合に、カウンタ値がｄ→ｅと変化する間の１つのメモリの遷移回数を示す図である。
【図６】  全ての入力４ビット列について、１つのメモリにおける、カウンタ値がａ→ｂ→ｃ→ｄと変化するときの遷移回数、カウンタ値がｅ→ｆ→ｇ→ｈと変化するときの遷移回数、及び、カウンタ値がｄ→ｅと変化するときの遷移回数をまとめた図である。
【図７】（イ）メモリが出力値を２進表現で出力するとした場合の、カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列が（０１０１）である場合に、カウンタ値がａ→ｂ→ｃ→ｄと変化する間の１つのメモリの遷移回数を示す図である。
（ロ）メモリが出力値を２進表現で出力するとした場合の、カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列が（００１１）である場合に、カウンタ値がｅ→ｆ→ｇ→ｈと変化する間の１つのメモリの遷移回数を示す図である。
（ハ）メモリが出力値を２進表現で出力するとした場合の、カウンタ値がａ、ｂ、ｃ、ｄであるときの入力４ビット列が（０１０１）であり、カウンタ値がｅ、ｆ、ｇ、ｈであるときの入力４ビット列が（００１１）である場合に、カウンタ値がｄ→ｅと変化する間の１つのメモリの遷移回数を示す図である。
【図８】  メモリが出力値を２進表現で出力するとした場合の、全ての入力４ビット列について、１つのメモリにおける、カウンタ値がａ→ｂ→ｃ→ｄと変化するときの遷移回数、カウンタ値がｅ→ｆ→ｇ→ｈと変化するときの遷移回数、及び、カウンタ値がｄ→ｅと変化するときの遷移回数をまとめた図である。
【図９】  演算過程においてメモリの出力データを使用する演算装置の一例のブロック図である。
【符号の説明】
１    カウンタ
２    加減算器
３−１、３−２、…、３−１１    メモリ（出力データが冗長２進表現符号）
４    加算器
１００    数値演算処理装置
２００    メモリ（出力データが２進表現）
【図１】
0003916277.tif 000008
【図２】
0003916277.tif 000009
【図３】
0003916277.tif 000010
【図４】
0003916277.tif 000011
【図５】
0003916277.tif 000012
【図６】
0003916277.tif 000013
【図７】
0003916277.tif 000014
【図８】
0003916277.tif 000015
【図９】
0003916277.tif 000016