(57)【要約】【課題】  固定小数点型演算処理装置をもとに、演算処理回数及び回路規模をほとんど増加させずに、従来の固定小数点方式と高い互換性を保ちながら浮動小数点型演算処理装置に近い処理を行わせる。【解決手段】  浮動小数点数の仮数部のみが入力されると、乗算処理を行う乗算回路と、乗算回路の演算結果が入力されると、外部から与えられるシフト命令によるシフト量と乗算回路の入力の一方または両方の指数部の値とに基づき求められるシフト量のシフト演算処理を行うシフト回路と、シフト回路の演算結果と、レジスタおよび／またはメモリに記憶された情報とが入力されると、加算処理を行うことにより、仮数部と指数部とからなる浮動小数点データを固定小数点データに変換した演算空間で固定小数点演算を行う加算回路とを備え、加算回路は、加算処理の結果をレジスタおよび／またはメモリに記憶する。【選択図】  図６
2006155102.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点数の仮数部のみが入力されると、乗算処理を行う乗算回路と、
前記乗算回路の演算結果が入力されると、外部から与えられるシフト命令によるシフト量と前記乗算回路の入力の一方または両方の指数部の値とに基づき求められるシフト量のシフト演算処理を行うシフト回路と、
前記シフト回路の演算結果と、レジスタおよび／またはメモリに記憶された情報とが入力されると、加算処理を行うことにより、仮数部と指数部とからなる浮動小数点データを固定小数点データに変換した演算空間で固定小数点演算を行う加算回路とを備え、
前記加算回路は、前記加算処理の結果を前記レジスタおよび／またはメモリに記憶することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、前記レジスタおよび／またはメモリに記憶される少なくとも１語分のデータ語長は、前記加算回路の演算語長以下であることを特徴とする演算処理装置。
【請求項３】
請求項１または２に記載の演算処理装置において、前記加算回路は算術論理演算ユニットに組み込まれていることを特徴とする演算処理装置。
【請求項４】
請求項１から３のいずれかに記載の演算処理装置において、前記シフト回路は、データバスの仮数部を入力することができ、外部から与えられるシフト命令によるシフト量と、データバスの指数部の値とに基づきシフト量を計算し、前記データバスの仮数部のシフト演算処理を行うことを特徴とする演算処理装置。
【請求項５】
請求項１から４のいずれかに記載の演算処理装置において、前記加算回路の演算結果を出力する際に、前記第２のシフト回路によって演算結果を浮動小数点形式に変換し、固定小数点データを仮数部と指数部とに振り分ける第２のシフト回路を備えたことを特徴とする演算処理装置。
【請求項６】
請求項５に記載の演算処理装置において、前記第２のシフト回路は、最終段に設けられることを特徴とする演算処理装置。
【請求項７】
請求項１から４のいずれかに記載の演算処理装置において、演算結果を出力する際に、固定小数点方式での出力も可能であり、その際には、前記乗算回路の入力の一方または両方の指数部にシフト無しの場合の値が設定されることを特徴とする演算処理装置。
【請求項８】
請求項１から７のいずれかに記載の演算処理装置において、演算結果を再び、前記乗算回路またはシフト回路にフィードバックするパスを設けたことを特徴とする演算処理装置。
【請求項９】
請求項１から７のいずれかに記載の演算処理装置において、仮数部と指数部とに分けられたデータバスに接続し、該データバスを介して浮動小数点演算を行い、指数部がある決められた値のときは、固定小数点演算を行うことを特徴とする演算処理装置。
【請求項１０】
請求項９に記載の演算処理装置において、前記データバスを介して、仮数部および指数部が接続されるメモリおよび／またはレジスタは、指数部の値を記憶する部分が拡張するだけで、前記加算回路と同じ浮動小数点演算空間を持つことを特徴とする演算処理装置。
【請求項１１】
請求項９に記載の演算処理装置において、前記データバスの仮数部には、固定小数点方式の装置がそのまま接続可能であることを特徴とする演算処理装置。
【請求項１２】
請求項５または６に記載の演算処理装置において、浮動小数点方式から固定小数点方式への変換、固定小数点方式から浮動小数点方式への変換は、外部命令によらず自動的に行うことを特徴とする演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデジタル信号処理を行なう演算処理装置に関し、特に、デジタル信号処理を行うデジタルシグナルプロセッサ（ＤＳＰ）や、デジタルオーディオ信号処理、デジタルビデオ信号処理に関する。
【背景技術】
【０００２】
デジタル信号処理を行う演算処理装置は、その演算方式において固定小数点演算方式と浮動小数点演算方式の二つに大別することができる。一般に、固定小数点演算方式は、回路構成は簡単だが演算精度が浮動小数点演算方式に比べて劣っており、一方、浮動小数点演算方式は、回路構成は複雑だが、演算精度は固定小数点演算方式よりも優れていることは良く知られている。
【０００３】
通常、デジタルオーディオに使用する演算処理装置は、コスト面、限られた演算処理ステップ数から固定小数点方式を採用することが多いが、固定小数点演算方式の場合、演算処理空間がデータ語長に依存してしまうため、浮動小数点演算方式に比べて、広い演算空間を取ることが出来ない。そのため、固定小数点方式でも、浮動小数点なみの演算精度をもたせるさまざまな手法が開発されている（例えば、特許文献１参照）。
【０００４】
たとえば、時分割処理による乗算回路の倍精度演算、４倍精度演算手法がある。乗算回路の一方の入力を上位ビット、下位ビットに分けて後で足し合わせることにより倍精度演算を可能にし、両方の入力とも分けることで４倍精度演算をすることが可能である、しかし、分割した回数分の演算処理ステップ数が増加するため、通常の乗算と比較して、倍精度演算では２倍以上、４倍精度では４倍以上の演算処理数がかかり、使用できる用途や使用回数は限られてしまう欠点がある。  
また、その他の方法として、データを正規化しつつ演算を行う方法も考えられている。
【０００５】
これらの手法を実現する、固定小数点演算装置の構成例を図１〜５に示す。図１の固定小数点演算方式は、固定小数点用乗算回路、シフト回路、加算回路、加算結果を記録するレジスタまたはメモリで構成される。  
シフト回路は、乗算回路のフルスケール入力に対しても対応しており、２の補数演算に使用される場合は、下位ビットシフトの際には符号拡張を行う構成になっている。
【０００６】
加算回路は、加算結果を累積演算していく構成のため、上位ビットにオーバーフロー用のマージン回路が、下位ビットにアンダーフロー対策用のマージン回路がどちらか一方、あるいは、両方ついているのが普通である。単純な積和演算を行う場合は、加算回路でよいが、より複雑な演算を行うような場合は、加算回路をＡＬＵ（算術論理演算ユニット）に置き換えればよい。当然ＡＬＵは、加算回路を含んでいる。  
加算回路による加算結果、あるいはＡＬＵの演算結果を一時的に記憶するためのレジスタの数あるいはメモリ容量は用途に応じて決められる。
【０００７】
これら回路は、デジタルオーディオやデジタルビデオの信号処理に使用される場合は、できるだけ短い演算処理ステップ数で実行することが求められている。したがって、１演算処理ステップ数で乗算、シフト、加算ができれば望ましいが、高性能化も求められているため演算語長も長くなり、１演算処理ステップ数ですべての演算をすることは不可能なことが多い。そのため、演算回路の途中にパイプラインレジスタを挿入する手法を用いることがある。たとえば図１においては、乗算回路前段、乗算回路後段、シフト回路後段などにパイプラインレジスタを挿入する。本発明の図においては、具体的な実施例以外は、パイプラインレジスタは書いていないが、パイプラインレジスタを用いても同様の効果は得られる。
【０００８】
図１に示す演算処理装置の場合は、乗算回路の後にシフト回路があるため、乗算回路の入力レベル、またはシフト演算命令によりシフト回路の出力を上位ビット側、下位ビット側にシフトさせることにより乗算結果の正規化を行うことが可能であり、固定小数点演算回路でも、精度の向上をはかることができる。  
図２は、図１をさらに発展させて、シフトの入力側にセレクタを設け乗算結果以外のデータの入力を可能としている。
【０００９】
図３は、図１の演算処理装置を使って、積和演算結果を再度乗算する回路の一例である。積和演算された結果は、演算処理回路１を介して、セレクタＡのＹ１に接続されている。演算処理回路１は、無くてもかまわないが、オーバーフローしたデータを、正もしくは負のフルスケールに張り付かせる処理や、出力先の選択もしくは、次の回路への調整等を行わせる回路である。  
図４は、図２の演算処理装置を使って、積和演算結果に再度乗算を行う回路の一例である。  
図４の演算処理をさらに拡張したものを図５に表す。図５は、データバスを介して、ＲＯＭ、ＲＡＭ、各種演算回路、入出力インタフェースが接続されている。一般的にＤＳＰ（デジタルシグナルプロセッサ）と呼ばれる装置の構成例である。
【００１０】
【特許文献１】特開２０００−２３１４７１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
従来の演算処理装置は上記のように構成されるが、固定小数点演算方式の場合、基本的には小数点の位置を固定して演算を行うため、演算空間を広く取ることはできない。ただし、図１、図２に例示した演算処理装置の場合で、あらかじめ入力データの信号レベルがわかっているような場合は、シフト回路を用いて上位ビット側、あるいは下位ビット側にビットシフトを行うことによって、ある程度の演算精度を上げることは可能である。しかし、入力データの信号レベルが前もってわからないような場合は、入力レベルを検知し、それにもとづいて、シフト量を計算する必要があり、さらには移動した小数点位置をもとに戻す必要があった。ＤＳＰ演算の場合であれば、条件判定を必要とし、演算処理ステップ数が増えてしまう問題がある。
【００１２】
さらに、積和演算後の出力は、固定小数点の演算語長に戻さなければならないため、図４、図５のような演算処理装置において、微小データの積和演算が繰り返された場合、演算結果が、演算語長の範囲よりも小さくなり、演算精度がとれなくなってしまう問題がある。  
また、図５の固定小数点型ＤＳＰにおいてデータバスに接続されたＲＡＭやレジスタは、固定小数点の演算語長でしかやりとりができないため、たとえ、加算回路の演算処理空間を大きくとっても十分な効果は得られない。
【００１３】
本発明は、上記課題に鑑みなされたもので、上記課題を解決し、固定小数点型演算処理装置において、演算処理回数および回路規模をほとんど増加させずに、従来の固定小数点方式と高い互換性を保ちながら浮動小数点型演算処理装置に近い精度で処理を行うことができる演算処理装置を提供するものである。
【課題を解決するための手段】
【００１４】
上記課題を解決するため、請求項１に記載の発明は、浮動小数点数の仮数部のみが入力されると、乗算処理を行う乗算回路と、前記乗算回路の演算結果が入力されると、外部から与えられるシフト命令によるシフト量と前記乗算回路の入力の一方または両方の指数部の値とに基づき求められるシフト量のシフト演算処理を行うシフト回路と、前記シフト回路の演算結果と、レジスタおよび／またはメモリに記憶された情報とが入力されると、加算処理を行うことにより、仮数部と指数部とからなる浮動小数点データを固定小数点データに変換した演算空間で固定小数点演算を行う加算回路とを備え、前記加算回路は、前記加算処理の結果を前記レジスタおよび／またはメモリに記憶することを特徴とする。  
本発明では、仮数部と指数部とからなる浮動小数点データを、固定小数点データに変換した演算空間で固定小数点演算を行うために、加算回路が浮動小数点演算の演算精度を決めている。
【００１５】
また、請求項２に記載の本発明は、請求項１の演算処理装置において、請求項１に記載の演算処理装置において、前記レジスタおよび／またはメモリに記憶される少なくとも１語分のデータ語長は、前記加算回路の演算語長以下であることを特徴とする。
【００１６】
また、請求項３に記載の本発明は、請求項１または２に記載の演算処理装置において、前記加算回路は算術論理演算ユニットに組み込まれていることを特徴とする。
【００１７】
また、請求項４に記載の本発明は、請求項１から３のいずれかに記載の演算処理装置において、前記シフト回路は、データバスの仮数部を入力することができ、外部から与えられるシフト命令によるシフト量と、データバスの指数部の値とに基づきシフト量を計算し、前記データバスの仮数部のシフト演算処理を行うことを特徴とする。
【００１８】
また、請求項５に記載の本発明は、請求項１から４のいずれかに記載の演算処理装置において、前記加算回路の演算結果を出力する際に、前記第２のシフト回路によって演算結果を浮動小数点形式に変換し、固定小数点データを仮数部と指数部とに振り分ける第２のシフト回路を備えたことを特徴とする。
【００１９】
また、請求項６に記載の本発明は、請求項５に記載の演算処理装置において、前記第２のシフト回路は、最終段に設けられることを特徴とする。  
本発明では、最終段にて第２のシフト回路による浮動小数点化を行うため、得られるデータは演算精度について最適化されている。
【００２０】
また、請求項７に記載の本発明は、請求項１から４のいずれかに記載の演算処理装置において、演算結果を出力する際に、固定小数点方式での出力も可能であり、その際には、前記乗算回路の入力の一方または両方の指数部にシフト無しの場合の値が設定されることを特徴とする。
【００２１】
また、請求項８に記載の本発明は、請求項１から７のいずれかに記載の演算処理装置において、演算結果を再び、前記乗算回路またはシフト回路にフィードバックするパスを設けたことを特徴とする。
【００２２】
また、請求項９に記載の本発明は、請求項１から７のいずれかに記載の演算処理装置において、仮数部と指数部とに分けられたデータバスに接続し、該データバスを介して浮動小数点演算を行い、指数部がある決められた値のときは、固定小数点演算を行うことを特徴とする。
【００２３】
また、請求項１０に記載の本発明は、請求項９に記載の演算処理装置において、前記データバスを介して、仮数部および指数部が接続されるメモリおよび／またはレジスタは、指数部の値を記憶する部分が拡張するだけで、前記加算回路と同じ浮動小数点演算空間を持つことを特徴とする。
【００２４】
また、請求項１１に記載の本発明は、請求項９に記載の演算処理装置において、前記データバスの仮数部には、固定小数点方式の装置がそのまま接続可能であることを特徴とする。
【００２５】
また、請求項１２に記載の本発明は、請求項５または６に記載の演算処理装置において、浮動小数点方式から固定小数点方式への変換、固定小数点方式から浮動小数点方式への変換は、外部命令によらず自動的に行うことを特徴とする。
【００２６】
本発明では、浮動小数点方式から固定小数点方式への変換、固定小数点方式から浮動小数点方式への変換は、自動的に行われるため、本発明をデジタルシグナルプロセッサとして実施した場合、ユーザはこれらの変換のための命令を与える必要がなく、演算処理ステップ数を増加させない。
【発明の効果】
【００２７】
本発明によれば、固定小数点型演算処理装置をもとに、演算処理ステップ数および回路規模をほとんど増加させずに、従来の固定小数点方式と高い互換性を保ちながら浮動小数点型演算処理装置に近い処理を行わせることが可能となる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の実施の形態について図面を参照して説明する。
［実施形態１］
図６は、本発明の実施形態１における演算処理装置で、固定小数点用乗算回路、シフト回路、加算回路、加算結果を一時記憶するレジスタまたはメモリで構成される。
【００２９】
図６では、Ｘ×Ｙの乗算回路において、Ｘ、Ｙともに仮数部データが入力される。ここでの仮数部とは、２の補数の場合は符号ビットも含めて仮数部と呼んでいる。入力Ｘ,Ｙに特に違いはなく、どちらがＸでもＹでもかまわない。また、仮数部の小数点の位置は、どの位置にあってもかまわない。固定小数点方式として使用する場合は、固定小数点データが仮数部に対応する。一方、指数部は仮数部をシフトする範囲を示している。
【００３０】
指数部に与えられているビット数をｎとすると、２ｎ通りのシフト量のうち、シフト無しを１つとすると、シフトできる範囲は２ｎ−１で表すことができる。たとえば、ｎ＝４のとき、シフト量は、２４−１＝１５となる。指数部のシフト量のつけ方に関しては、特に規定はなく、たとえば、ｎ＝４のとき００００を最大値、１１１１を最小値と表すことも、逆に１１１１を最大値、００００を最小値と表すこともできる。また２の補数表現のように０１１１が最大値、１０００を最小値としてもかまわない。いずれにしても、ｎビットで表される２ｎ通りのシフト量が表されればよい。シフト方向も、上位ビット方向、下位ビット方向とも特に規定はなく、上位方向あるいは、下位方向のみシフトでもかまわないし、上下両方向シフトでもかまわない。
【００３１】
乗算回路においては、仮数部のみの乗算であるために通常の固定小数点演算方式と同じ回路が使用することができる。２の補数表現における負のフルスケール同士の乗算および、倍精度演算を使用することを考えた場合はＸがｘビット,Ｙがｙビットのとき出力Ｚは、ｘ＋ｙビットであることが望ましい。たとえば、Ｘが１６ビット、Ｙが２４ビットのときＺは４０ビットとなる。
【００３２】
シフト回路は、乗算回路のフルスケール同士の乗算に対してもオーバーフローすることなく対応しており、２の補数演算に使用される場合は、下位ビットシフトの際には符号拡張を行う構成になっている。  
また、シフト回路は、シフト演算命令によって与えられたシフト量と、Ｘに入力されるデータの指数部の値より計算された値をシフト量とする。たとえば、指数部の値から、ｇビット上位シフトする必要があり、シフト演算命令から、ｈビット下位シフトする必要があったとし、上位ビットシフトを＋、下位ビットシフトを−と考えた場合、シフト量ｓは、ｓ＝ｇ−ｈとなり、上位ビットシフトを−、下位ビットシフトを＋と考えた場合、シフト量ｓは、ｓ＝−ｇ＋ｈとなる。
【００３３】
このように、最終的なシフト量は簡単な加減算回路のみで構成することができる。さらに、２の補数表現を使用し、たとえば、上位ビット方向のシフトを＋、下位ビット方向のシフトを−、シフトしないときを０とすると、加算回路のみでシフト量を求めることが可能となり、演算規模を小さく、演算処理時間も短縮することができる。
【００３４】
図６においては、パイプラインレジスタは省略しているが、パイプラインレジスタをｋ段通ることにより、乗算回路の入力Yからシフト回路に到達するまでに、ｋサイクル遅れるような場合は、指数部のデータをレジスタ等でシフト量の計算をｋサイクル遅らせればよい。
【００３５】
また、図６では、乗算回路Ｘに入力されるデータは、主に固定小数点データである場合を想定している。それは、乗算回路の一方の入力はフィルタ係数などの決められた係数であることが多く、固定小数点演算でも十分な精度が得られるためである。そのため、浮動小数点データのためのシフト演算と、シフト量を変えることによるレベル変化を、１つのシフト回路で同時に処理できる。さらに、浮動小数点データのための演算処理は、自動的に行われるため、ＤＳＰとして使用した場合も、ユーザは、そのための命令を書く必要がなく、演算処理ステップは増加しないことを特徴としている。
【００３６】
図６の回路を、ＤＳＰとして使用する場合は、入力Ｘにも、浮動小数点化された演算データが入力されることが考えられる。その場合も、そのデータの指数部の値をレジスタで保持させておき、通常のシフト演算処理命令を使用すれば良い。  
さらに、従来型の固定小数点演算を行いたい場合は、指数部にシフト無しの場合の値を設定しておけば良い。このように、本実施形態のシフト回路においては、もともと固定小数点方式で使用していたシフト回路に、追加分のシフト部分と多少の演算装置（加減算回路／加算回路）を加える。
【００３７】
加算回路は、加算結果を累積演算していく構成のため、上位ビットにオーバーフロー対策用のマージン回路が、下位ビットにアンダーフロー対策用のマージン回路がこれらのどちらか一方、あるいは、両方付いているのが普通である。
【００３８】
加算回路の入力データの語長をｐビット、マージンの語長をｑビットとすると、演算空間はｐ＋ｑビットで表される。本発明の場合は、指数部をｎビットとし、仮数部をｍビット、マージンの語長をｒビットとすると、演算空間はｍ＋（２ｎ−１）＋ｒで表される。なお、ｒ＝０でもかまわない。また、必ずしも演算語長をｍ＋（２ｎ−１）＋ｒだけ確保する必要はないが、浮動小数点の演算精度は、この固定小数点方式の加算回路の演算精度で決まり、
ｐ＋ｑ ＜ ｍ＋（２ｎ−１）＋ｒ
で本発明の効果が表れる。
【００３９】
たとえば、仮数部ｍ＝２４ビット、指数部ｎ＝４ビット、マージン語長ｒ＝５ビットとすると、演算空間は、  
ｍ＋（２ｎ−1）＋ｒ ＝ ２４＋（２４−１）＋５ ＝ ４４ビット
となる。入力語長ｐ＝２４ビットとすると、  
（ｍ＋（２ｎ−１）＋ｒ）−ｐ ＝ ４４−２４ ＝ ２０ビット
となる。通常、演算語長２４ビットで２０ビットものマージン語長をとることはない。
【００４０】
図６において、単純な積和演算を行う場合は、同図に示す加算回路でよいが、より複雑な演算を行うような場合は、加算回路をＡＬＵ（算術論理演算ユニット）に置き換えればよい。ＡＬＵには、加算回路が含まれている。ＡＬＵの演算時間の時間的制約は加算回路であり、その他の算術回路、論理演算回路は大きな時間的制約にならない。そこで、ＡＬＵの設計を行う際は、加算回路のパスを優先させるようにすればよい。また、論理演算回路の性格上、論理演算の場合は、仮数部程度の語長で十分な場合が多い。以上のことから、これまで述べてきた加算回路をＡＬＵに置き換えることは容易である。
【００４１】
加算結果、あるいはＡＬＵの演算結果を一時的に記憶するためのレジスタの数あるいはメモリ容量は用途に応じて決められるが、最低1つは、加算回路、もしくはＡＬＵと同等のデータ語長が必要である。このようにすることで、積和演算結果を累算するときは、常に浮動小数点と同等の演算精度が保たれるため、加算のたびにシフト演算処理を行う等の余分な演算処理は、一切必要としない。  
従来の固定小数点演算方式と比較して加算回路あるいはＡＬＵ、レジスタもしくはメモリは、増えた語長分の増加で済む。
【００４２】
［実施形態２］
図７は、本発明の実施形態２における演算処理装置で、浮動小数点データ同士の乗算を多く行う場合の実施例である。シフト回路のシフト量を制御する加減算回路または加算回路に、乗算回路Ｘに入力される指数部を追加したところのみが異なっている。
【００４３】
［実施形態３］
図８は、本発明の実施形態３における演算処理装置で、図６に示す実施形態１の演算処理装置をさらに発展させて、シフト回路の入力側にセレクタを設け乗算結果以外のデータ（浮動小数点データ）の入力を可能としている。
セレクタが、ＳＨ（乗算回路の出力Ｚ）を選択した場合は、指数部データ１が選ばれ、ＢＨを選択した場合は、指数部データ２が選ばれる。この選ばれた指数データとシフト回路に要求されたシフト量と加減算あるいは加算を行ってシフト量を決定する。
【００４４】
［実施形態４］
図９は、本発明の実施形態４における演算処理装置で、図７に示す実施形態２の演算処理装置をさらに発展させて、同図に示すようにシフト回路の入力側にセレクタを設け乗算結果以外のデータ（浮動小数点データ）の入力を可能としている。
【００４５】
［実施形態５］
図１０は、本発明の実施形態５を示している。これは、本発明の実施形態１から４の演算処理装置（図６〜図９）において、浮動小数点データ形式から固定小数点データ形式に変換した後、再び、浮動小数点データ形式に戻す、演算処理装置を表している。
【００４６】
レジスタまたはメモリからの出力データは、演算回路１に入力される。演算回路１は、複数のレジスタもしくは、メモリから１つのデータを選択するセレクタや、オーバーフローしたデータをフルスケールにクリップさせる回路、もしくは、その他の処理を行う回路である。レジスタが１つの場合は、演算回路１はなくてもかまわない。  
演算回路１を通った回路は、シフト回路２を通して、固定小数点データ形式から浮動小数点データ形式に変換される。浮動小数点データ形式への変換は、第２のシフト回路に入力される最終データの入力レベルに応じて常に、決まったシフト処理を行い、その際のシフト量を基に指数部データを生成する。
【００４７】
積和演算を終え、オーバーフロー処理等の最終演算結果を基に、すなわち最終データの入力レベルに応じて、シフト処理が行われるため、シフト量を記憶しておいて、それをもとに浮動小数点化する方式に比べて、演算精度について最適化がはかられる。また、上記のように単純に演算データのレベルを見てシフト量を決定するため回路構成も複雑にはならない。また、第２のシフト回路（シフト回路２）は、出力結果をもとに浮動小数点に変換する上記シフト機能を備えていればよいので、指数部の語長をｎビットとした場合、２ｎ−１ビットシフトができれば良く、仮数部の固定小数点の位置によっては、ビットシフトの方向は一方向だけで済み、回路構成も簡単になる。これら一連の処理は、自動的に行わせることができるため、ＤＳＰとして使用した場合も、ユーザは、そのための命令を書く必要がなく、演算処理ステップは増加しないことを特徴としている。
【００４８】
［実施形態６］
図１１は、本発明の実施形態６を示している。同一の回路を用いて積和演算を繰り返し行う場合は、演算結果を再び乗算回路の入力側にフィードバックする必要がある。そのため、シフト回路２によって浮動小数点化された演算結果の仮数部（仮数部データ２）はセレクタＡのＹ１に接続される。一方、指数部２は、シフト量演算回路に接続され、セレクタＡでＹ１が選択された場合は、指数部データ２が選択され、セレクタＡでＹ０が選択された場合は指数部データ１が選択されるようにする。または、選択されない場合の指数部の値は、シフトしない値になるようにして、シフト回路の通常のシフト量と指数部データ１、指数部データ２を一度に加減算あるいは加算のみを行うようにしてもよい。いずれにしても、図６に示す実施形態１で行われる処理とほとんど変わらない。
【００４９】
本実施形態においては、フィードバッグ中のデータもすべて、浮動小数点データとして取り扱うことができるため、微小レベルのデータを繰り返し乗算しても加算回路部分の演算精度を保つことができ、図３に示す従来の固定小数点演算方式と比較して、高い演算精度を保つことができる。さらに、従来の固定小数点方式と同等の演算を行いたい場合は、シフト回路２においてシフトさせないように制御するか、もしくは演算回路１より固定小数点のデータを出力させ、セレクタにより、固定小数点データか浮動小数点データの仮数部かを選択できるようにしておけばよい。いずれの場合も、指数部は、シフトしない時の値に設定しておけばよい。
【００５０】
前にも述べたように、指数部データの決め方に特には決まりがないが、たとえば、以下の様にするとシフト量演算回路のシフト量演算は簡単になる。指数部を４ビットとしたときに、００００を２０すなわちシフト無し、０００１を２−１、…、１１１１を２−１５とすると、シフト回路のシフト処理は、レベルに応じて、シフトしない場合は００００、１ビット左（上位ビット）シフトは０００１、…、１５ビット左シフトは１１１１が対応する。一方、シフト回路のほうで、左シフトを−、右シフトを＋としておくことにより、シフト量演算回路でシフト量を決定する場合、ただの加算回路で構成できる。
【００５１】
仮数部のデータ語長を、固定小数点データ形式と同等にとったとしても、増加分は指数部のデータ語長分だけであり、ほとんど回路規模に影響を与えない。たとえば、仮数部を２４ビット、指数部を４ビットとし、ビット数の増加が回路規模にそのまま反映するとすると、増加分は（２４＋４）／２４＝２８／２４＝１．１７倍程度である。仮数部と指数部を足して２４ビットあるいは、それよりも少なくすることも可能である。そのようにすれば、浮動小数点化による回路規模の増加を抑えることができる。仮数部を２０ビット、指数部を４ビットとした場合、瞬時データとしては、演算精度がおちるが、演算空間は３５ｂｉｔとれるため、演算処理内容によっては、２４ビット固定小数点演算よりも高い演算精度が得られる。
【００５２】
図１１は、点線部に図６に示す実施形態と同様の回路構成を使用しているが、これを図７、図８、図９に示す構成に置き換えてもかまわない。なお、演算処理方法に違いはないため、説明は省略する。
また、図１１では、次回路に固定小数点データ２、浮動小数点データ２（仮数部２，指数部２）が接続されているが、仕様により両方でも、どちらか一方でもかまわない。
【００５３】
［実施形態７］
図１２は、本発明の実施形態７を示している。上記実施形態６では積和演算結果を乗算回路またはシフト回路にフィードバックさせている。図１２では、演算処理装置の入力および出力がデータバスにつながっている場合を示している。図１２は、上記の図１１のフィードバック部分がデータバスに置き換わっただけで、演算処理部の動作自体に違いはない。図１２において演算回路１１、演算回路１２は、複数のレジスタもしくは、メモリから１つのデータを選択するセレクタや、オーバーフローしたデータをフルスケールにクリップさせる回路、固定小数点または浮動小数点選択回路、もしくは、その他の処理を行う回路である。
【００５４】
データバスを介して、ＲＯＭ、ＲＡＭ、各種演算回路、入出力インタフェースが接続されている。これは、一般的にＤＳＰ（デジタルシグナルプロセッサ）と呼ばれている構成である。なお、ＤＳＰを構成するために、図１１で示されている、セレクタＡ、セレクタＢ、その他データバスに接続されている装置がすべて必要というわけではない。また、すべての装置にデータバスがつながる必要もない。
【００５５】
前述の実施形態６でも説明したように、本実施形態では、指数部をシフトしない場合の値にすれば、固定小数点方式として扱うことができる。したがって、データバスに接続する装置は、用途に応じて簡単に接続が可能で、特に意識をする必要がない。図１２は、図５に示す従来の演算処理装置と同等の機能を有することになる。
【００５６】
たとえば、メモリ１を固定小数点ＲＯＭとして使用した場合は、仮数部のみを接続すればよく、指数部にはシフト無しの情報を与える。メモリ２を浮動小数点ＲＡＭとして使用する場合は、仮数部と指数部をそのまま接続すればよい、データバスを介しても仮数部と指数部を接続すれば、外部回路も浮動小数点と同等の演算精度を得ることができる。この点が、従来の固定小数点演算方式と大きく違う点である。特に、ＲＡＭ，ＲＯＭ，レジスタなどの記憶装置は、指数部の語長を確保するだけで、特に新たな制御回路を必要としない。
なお、図１２の演算処理装置は図８をもとにしているが、この部分が図６、７、９に示す形態をもとに構成してもよい。
【００５７】
以上、本発明の各実施形態について説明したが、本発明によれば、固定小数点型演算処理装置をもとにしながら、演算処理ステップ数および回路規模をほとんど増加させずに、従来の固定小数点方式と高い互換性を保ちながら浮動小数点型演算処理装置に近い処理を行わせることが可能となる。
【００５８】
［実施例］
ここで、本発明の具体的な実施例について、詳細に説明する。図１３は、図１２に示す構成を具体的に表したもので、実施例としては、図８、図１０に示す形態をもとにしている。また、パイプラインレジスタであるＰレジスタ１，Ｐレジスタ２，Ｐレジスタ３，Ｐレジスタ４，Ｐレジスタ５，Ｐレジスタ６，Ｐレジスタ７を挿入した構成例となっている。パイプラインレジスタは、必要に応じてどこにいれても、また、いれなくてもかまわない。  
図１３では、２４ビット（ｂｉｔ）の仮数部と４ビット（ｂｉｔ）の指数部を例に挙げているが、仮数部および指数部のビット数に規定はない。
【００５９】
図１４は、図１３で使用する仮数部と指数部のビットフィールドを示す。図１４では、仮数部の左側を上位ビット、右側を下位ビットとしている。また、最上位ビット（ＭＳＢ）の次に小数点を置いている。また例では、２の補数表現を用いているために、ＭＳＢが符号フラグとなる（０：＋，１：−）。  
したがって、２進数で表すと、０は、００００ ００００ ００００ ００００ ００００ ００００（１６進数で００００００ｈ、ｈは１６進数表記を示す）、最小値は１０００ ００００ ００００ ００００ ００００ ００００（１６進数で８０００００ｈ）最大値は０１１１ １１１１ １１１１ １１１１ １１１１ １１１１（１６進数で７ＦＦＦＦＦｈ）となる。（１０進数で表すと−１．０〜０〜約０．９９９９９９を表す。）  
固定小数点の位置、上位ビットの向きに規定はないが、図１４が最も一般的に使用されている。また、２の補数表現を用いなくても特にかまわない。
【００６０】
図１５は、４ビットの指数部の値に対して、とりうる指数値の例を例１〜例６に示している。例１〜例６に示しているように、最低１つは例えば例１の場合の２０＝００００すなわちシフトなしであることが望ましい。図１３では例１の割り当てを使用している。この場合、指数部では、００００の時が一番大きく、その時はシフト無しということになる。これを実際に固定小数点形式に展開したものが図１６で、データバスの指数部によって表すことができる演算空間を示している。なお、同図においてＦは、符号フラグＳと同じ値をとり、−はデータが存在しないことを表している。同図からも、２４．４（仮数部語長．指数部語長）方式では、２４＋（２４−１）＝３９ビット相当の演算空間を持っていることがわかる。
【００６１】
図１７は、乗算回路の入出力フィールドを表しており、Ｘ側を１６ビット、Ｙ側を２４ビットにした場合の例を表している。出力結果は、負のフルスケール（１０進数で−１）と負のフルスケール（１０進数で−１）を掛けた場合、桁上がりが生じるため（Ｚ＝１）、ＭＳＢ側を１ビット拡張する必要がある（ＳＳ＊＊＊……）。この拡張したビットもシフト回路に入力することで、正しい演算が行われる。固定小数点演算方式では、出力Ｚを２４ビットに丸めてしまう場合があるが、本実施例では、演算精度を最大限にいかすために、すべて出力させることが望ましい。
【００６２】
図１３のシフト回路は、演算命令による左右１５ビットシフト可能なシフト回路に、指数部によるシフト回路が追加されたもので、この形態におけるシフトデータによるシフト量を図１８に示す。なお、右シフトの場合を２の補数表現で＋、左シフトを−で表している。符号のつけ方は逆でもかまわない。図１８からわかるように、本実施例のシフト回路は、右３０ビット、左１５ビットシフト可能なシフト回路である。
【００６３】
図１９は、図１３におけるＡＬＵ内部の加算回路部分のビットフィールドを示している。負のフルスケール同士の乗算のための拡張ビット１ビットを含む４０ビットに、上位空間側に３ビット（Ｅと表示）、下位空間側に１ビット（Ｅと表示）のマージンをもたせて４４ビットとしている。マージンビットの取り方は、要求される仕様によってどのようにとってもかまわない。
【００６４】
図１３のＡＬＵの先には、同じビットフィールドのＡレジスタが４つ接続され、セレクタ４、セレクタ５により一つが選択される。演算回路１は、セレクタ５を通過したデータのフルスケール判定等の処理を行った後、浮動小数点化するシフト量を決める回路である。演算結果が正のフルスケールをオーバーしていた場合は、１６進数表記で７ＦＦＦＦＦｈ、負のフルスケールをオーバーしていた場合は、１６進数表記で８０００００ｈになる。このように常にオーバーフロー処理するかしないかは、命令コードによって選択できる様にしてもかまわない。
【００６５】
図２０は、ＡＬＵ加算回路、Ａレジスタのビットフィールドが、固定小数点演算出力の場合のビットフィールド、浮動小数点演算出力の場合のビットフィールドと、どのように対応しているかを示した図である。固定小数点演算出力する場合は、最上位ビットがビットフィールドの２０の位置にあり、指数部はシフト無しの００００である。一方、浮動小数点演算出力は、信号レベルに応じて、左シフトが行われる。符合フラグの最下位ビットの位置が２０にある場合は、ビットシフト無しのため指数部は００００となり、最下位ビットの位置が１ビット右にずれるたびに、指数部は１つずつ大きくなり、最下位ビットの位置が２−１５以下になると常に指数部は１１１１となる。つまり、シフト回路２は、シフト無しから１５ビット左シフトまでを行う。図２０から２４．４浮動小数点方式で表される浮動小数点データに対して３９ビットの演算空間（固定小数点）が網羅されていることが明らかである。
【００６６】
図１３の回路には、乗算回路の前段、後段、セレクタ６およびバス出力回路の全段にパイプラインレジスタ（Ｐレジスタ１，２，３，６，７）が挿入されている。パイプラインレジスタ、およびＡレジスタ１，Ａレジスタ２，Ａレジスタ３，Ａレジスタ４は、１ＭＣＬＫサイクルで動作する。
【００６７】
データバス上のデータは（仮数部２４ビット、指数部４ビット）、セレクタ３制御用信号Ｓ３が１のとき、セレクタ３を通って、シフト回路に行くまでに、Ｐレジスタ２、Ｐレジスタ３の２つのパイプラインレジスタを通るため２ＭＣＬＫサイクル遅れることになる。Ｓ３が０のときも、ＤａｔａＲＡＭのデータは２ＭＣＬＫサイクル遅れる。  
そこで、指数部のデータもＰレジスタ４、Ｐレジスタ５を使って２ＭＣＬＫサイクル遅らせる。このときセレクタ１１、セレクタ１２の制御信号Ｓ１は、０なので、セレクタ１１はＳＨ、セレクタ１２はＳＥが選択される。  
セレクタ１１経由で、データバスの値をシフト回路に入れる場合は、制御信号Ｓ１は１となり、セレクタ１１はＢＨ、セレクタ１２はＢＥが選択される。このときはＢＨに入力される仮数部データにパイプラインレジスタがないため、指数部側も、パイプラインレジスタを使う必要がない。
【００６８】
ここで、本発明による、浮動小数点演算の自動処理を具体的に説明する。  
セレクタ５を通った時点のデータが、  
ＳＳＳＳ Ｓ▲ＳＳＳ Ｓ＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ （４４ビット）
だとすると、シフト回路２では、４ビット左シフトが行われ、仮数部は、
Ｓ＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ ＊＊＊＊ （２４ビット）
となり、指数部は、０１００ （４ビット） となる。  
このデータがバスに出力され、セレクタ３を通って乗算を行い、シフト回路の演算命令が、１１１１１１の左１ビットシフトであった場合（図１８）、シフト回路のシフト動作は、１１１１１１＋０１００＝００００１１から３ビット右シフトが行われる。このようにシフト量演算は、加算回路のみで行われることになる。
【００６９】
図１３では、セレクタ２のＸ０が選択された場合は、固定小数点データのＣＲＡＭがつながっているので、シフト操作は必要としない。セレクタ２のＸ１が選択された場合は、データバスの指数部を記憶するレジスタにデータを蓄え、シフト回路に演算結果が到達したときに、シフト演算命令を使ってシフト量をいれればよい。（図１３のシフト量に対応。）セレクタ２のデータバス側（Ｘ１）を頻繁に使用するようであれば、乗算入力のＹ側と同様な回路を設けてもよい。図１３には、ＲＡＭ、レジスタが仮数部、指数部につながっているが、こうすることにより、ＲＡＭ、レジスタの演算空間は、３９ビットになる。また、入出力インタフェース、固定小数点方式演算回路は、仮数部のみにつながっているが、データのやり取りをする際に、指数部を００００にしておけば、そのまま固定小数点演算が可能となる。
【図面の簡単な説明】
【００７０】
【図１】従来技術の固定小数点演算処理回路の例を示す図である。
【図２】図１を発展させた例を示す図である。
【図３】図１にフィードバック回路を加えた例を示す図である。
【図４】図２にフィードバック回路を加えた例を示す図である。
【図５】固定小数点ＤＳＰの一例を示す図である。
【図６】本発明の実施形態１における演算処理装置の構成を示す図である。
【図７】本発明の実施形態２における演算処理装置の構成を示す図である。
【図８】本発明の実施形態３における演算処理装置の構成を示す図である。
【図９】本発明の実施形態４における演算処理装置の構成を示す図である。
【図１０】本発明の実施形態５における演算処理装置の構成を示す図である。
【図１１】本発明の実施形態６における演算処理装置の構成の一例を示す図である。
【図１２】本発明の実施形態7における演算処理装置の構成の一例を示す図である。
【図１３】本発明の実施例の演算処理装置を示す図である。
【図１４】図１３で使用するデータバスの仮数部と指数部のビットフィールドを示す図である。
【図１５】４ビットの指数部の値に対してとりうる指数値の例を６つ示した図である。
【図１６】図１３で使用するデータバスの指数部によって表すことができる演算空間を示す図である。
【図１７】図１３で使用する乗算回路の入出力フィールドを示す図である。
【図１８】図１３で使用するシフト回路のシフトデータによるファンクションを示す図である。
【図１９】図１３で使用するＡＬＵ内部の加算回路のビットフィールドを示している図である。
【図２０】図１３で使用するＡＬＵ加算回路、Ａレジスタのビットフィールドとデータバス出力のビットフィールドを対応付けする図である。
【図１】
2006155102.tif 000003
【図２】
2006155102.tif 000004
【図３】
2006155102.tif 000005
【図４】
2006155102.tif 000006
【図５】
2006155102.tif 000007
【図６】
2006155102.tif 000008
【図７】
2006155102.tif 000009
【図８】
2006155102.tif 000010
【図９】
2006155102.tif 000011
【図１０】
2006155102.tif 000012
【図１１】
2006155102.tif 000013
【図１２】
2006155102.tif 000014
【図１３】
2006155102.tif 000015
【図１４】
2006155102.tif 000016
【図１５】
2006155102.tif 000017
【図１６】
2006155102.tif 000018
【図１７】
2006155102.tif 000019
【図１８】
2006155102.tif 000020
【図１９】
2006155102.tif 000021
【図２０】
2006155102.tif 000022