(57)【要約】【課題】  本発明は積和演算器に関し、演算データを複数個格納するレジスタのアドレスを自動生成、演算途中のデータの出力、オーバーフローの通知を可能とし、積和演算器の処理効率を向上し、再帰型のフィルタを容易に構成可能とすることを目的とする。【解決手段】  係数レジスタ100 、データレジスタ110 、乗算器130 、加算器140 および外部装置との間でデータ転送を行なうデータバス120 を有する積和演算器において、データレジスタ110 のアドレスを外部から一々すべて指定することなく、外部からは最初に一度だけ該データレジスタ110 を示すアドレスを入力するだけでデータ格納アドレスを自動生成し、一連のデータを格納するデータ一括自動格納手段180 を有する。また、積和演算途中の中間結果データをデータレジスタ110 に自動的に格納し、再帰的な積和演算を行なう。【選択図】図１
2004280854.tif 000002
【特許請求の範囲】
【請求項１】
２つ以上のデータを格納可能な積和演算用のレジスタを有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
前記積和演算用データの転送時に、積和演算器以外のユニットから一つのアドレスを指定し、該アドレスが前記レジスタのアドレスと一致すれば、前記レジスタの格納位置を自動的に指定し、前記レジスタへの演算データの書き込みを行なうアドレス自動設定手段を
有することを特徴とする積和演算器。
【請求項２】
請求項１に記載の積和演算回路において、
前記アドレス自動設定手段は、ＣＰＵ等の積和演算器以外のユニットが指定するアドレスをデコードするデコーダと、前記デコーダによって該アドレスが前記レジスタのアドレスと一致する場合に演算データ項数をカウントするカウンタと、演算データ項数を選択信号として前記レジスタの格納位置を選択し演算データを前記レジスタに格納するセレクタで構成する
ことを特徴とする積和演算器。
【請求項３】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
前記積和演算用データの転送時に、積和演算器以外のユニットから一つのアドレスと前記レジスタのポインタの値を指定し、該アドレスとポインタ値の和によって格納位置を指定し、前記レジスタへの演算データの書き込みを行なうアドレス設定手段を
有することを特徴とする積和演算器。
【請求項４】
請求項３に記載の積和演算回路において、
前記アドレス設定手段は、ＣＰＵ等の積和演算器以外のユニットが指定するアドレスとポインタ値を加算する加算器と、加算器の出力として得られる前記レジスタのアドレスをデコードするデコーダと、デコード結果を選択信号として前記レジスタの格納位置を選択し演算データを前記レジスタに格納するセレクタで構成する
ことを特徴とする積和演算器。
【請求項５】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
演算結果のデータを積和演算器の演算データの一つとして前記レジスタに自動転送する
ことを特徴とする積和演算器。
【請求項６】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
演算結果のデータを積和演算器の演算データの一つとして前記レジスタに自動転送すると次の演算を起動する
ことを特徴とする積和演算器。
【請求項７】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
積和演算途中の中間データを出力する
ことを特徴とする積和演算器。
【請求項８】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
積和演算中にオーバーフローが起きた場合に、オーバーフローが起きた時点の項番号を格納するレジスタを有する
ことを特徴とする積和演算器。
【請求項９】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
積和演算中にオーバーフローが起きた場合に、オーバーフローが起きた時点の項番号を格納するレジスタと
オーバーフローが起きた時点の演算途中の中間データを格納するレジスタと
を有することを特徴とする積和演算器。
【請求項１０】
請求項９に記載の積和演算回路において、
積和演算中のオーバーフローの判定において、積和演算器以外のユニットから有効なビット長を指定し、該有効ビット長に対するオーバーフローを判定する
ことを特徴とする積和演算器。
【請求項１１】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
前記レジスタへの演算データの書き込みを演算開始のトリガとする
ことを特徴とする積和演算器。
【請求項１２】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なう積和演算器において、
前記レジスタの任意のアドレスを指定し、前記レジスタ内の該アドレス以前の演算データに対して演算を行った後演算を中断し、その後、演算開始のトリガを与えることにより演算を再開する
ことを特徴とする積和演算器。
【請求項１３】
請求項１２に記載の積和演算回路において、
演算の中断後、前記レジスタへの演算データの書き込みを演算開始のトリガとする
ことを特徴とする積和演算器。
【請求項１４】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なうフィルタ回路において、
前記積和演算用データの転送時に、一つのアドレスを指定し、該アドレスが前記レジスタのアドレスと一致すれば、前記レジスタへの格納位置を自動的に指定し、前記レジスタへの演算データの書き込みを行なうアドレス自動設定手段を
有することを特徴とするデジタルフィルタ。
【請求項１５】
２つ以上のデータを格納可能な積和演算用のレジスタを２組以上有し、前記レジスタの各々に予め積和演算用データを転送したのち、前記レジスタの各データを順次使用して積和演算を行なうフィルタ回路において、
前記積和演算用データの転送時に、一つのアドレスと前記レジスタのポインタの値を指定し、該アドレスとポインタ値の和によって格納位置を指定し、前記レジスタへの演算データの書き込みを行なうアドレス設定手段を
有することを特徴とするデジタルフィルタ。
【請求項１６】
２個以上のデータを格納可能なレジスタへのデータ転送において、
外部から一つのアドレスを指定し、該アドレスが前記レジスタのアドレスと一致すれば、前記レジスタの格納位置を自動的に指定し、前記レジスタへの演算データの書き込みを行なう
ことを特徴とするレジスタの格納位置指定方式。
【請求項１７】
２個以上のデータを格納可能なレジスタへのデータ転送において、
外部から一つのアドレスと前記レジスタのポインタの値を指定し、該アドレスとポインタ値の和によって格納位置を指定し、前記レジスタへの演算データの書き込みを行なう  ことを特徴とするレジスタの格納位置指定方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、積和演算器に係り、さらに詳しくは、ＩＩＲ（Infinite Impulse Response）フィルタ（再帰型フィルタ）あるいは、ＦＩＲ（Finite Impulse Response）フィルタ（非再帰型フィルタ）として機能し、かつ、転送速度の速い、高速の積和演算器に関する。
【背景技術】
【０００２】
近年、自動車、メカトロニクス等の分野で、データをディジタルフィルタを用いてフィルタリングする要求が高まっており、積和演算器やディジタル信号処理専用のＬＳＩ(Large Scale Integration Circuit) であるＤＳＰ（Digital Signal Processor) 等が活用されている。これらの分野では、演算項数の少ないフィルタ計算が主であり、処理速度の速いＩＩＲフィルタがしばしば使用される。
【０００３】
図１７は、ＦＩＲを使用した従来の積和演算器の説明図である。
この演算器は、ＲＡＭ（Random Accress Memory)等で実現できる二つのレジスタ、すなわち、係数レジスタ800 とデータレジスタ810 と、該係数レジスタ800 の出力および該データレジスタ810 の出力を二つの入力として積を求める乗算器830 、該乗算器830 の出力を一方の入力とする加算器840 、該乗算器830 および加算器840 による積和演算途中の中間データを格納する中間データレジスタ850 、積和演算結果を格納する結果レジスタ860 、データレジスタ810 のアドレスを指定するアドレス・デコーダ870 で構成される。ここで、中間データレジスタ850 の出力が該加算器850 のもう一方の入力となり、これにより積和演算が可能となる。
【０００４】
まず、係数レジスタ800 とデータレジスタ810 に、それぞれ係数データと入力データを予めデータバス820 を介して転送しておく。例えば、４項の積和演算ならば、４つの入力データと４つの係数データをそれぞれデータ・レジスタ810 と係数レジスタ800 に入力しておく。そして、このデータと係数を一つずつ順次掛け合わせて加算することによりＦＩＲフィルタ演算を実行する。このとき、データレジスタ810 の書き込みアドレスは図示していない外部のＣＰＵ等がアドレス指定することにより行なう。すなわち、図示されていない外部のＣＰＵ等からアドレスをアドレス・デコーダ870 に入力し、アドレスデコーダ870 がこのアドレスをデコードしてデーダレジスタ810 の実アドレスを求め、そのアドレスにデータバス820 を介して入力データを書き込み、書き込まれたデータを読みだして乗算器830 に入力し、積和演算を起動させる。
【０００５】
この演算器でＩＩＲフィルタを実現するためには、結果レジスタ860 に格納された積和演算結果をデータバス820 を介してデータレジスタ810 に転送し、再び積和演算を起動する必要がある。すなわち、図示されていない外部のＣＰＵ等でアドレス指定を行ないアドレスデータ870 により実アドレスを求めてデータレジスタ810 の該アドレスに結果レジスタ860 の内容をデータバス820 を介して書き込み、さらに、データレジスタ810 の読み出しアドレスを指定し積和演算を再起動して次の積和演算を開始するのである。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の方法では、アドレス指定および積和演算の起動をすべて外部のＣＰＵ等が実行しなければならず、そのためのソフトウエアが必要なうえ、データ転送等の処理速度が遅いという問題があった。
【０００７】
また、ＣＰＵがデータレジスタの書き込みアドレスを指定するため、指定のためのアドレスを格納しておく記憶域がデータ毎に必要であった。
本発明は、ＦＩＲフィルタ処理が行え、かつ、ＩＩＲフィルタの実現に適し、転送速度の速い、高速の積和演算回路を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明のブロック図を図１乃至図６に示す。本発明は、積和演算の係数を複数項分格納する係数レジスタ100 と、積和演算のデータを複数格納するデータレジスタ110 、データバス120 、係数レジスタ100 内の係数とデータレジスタ110 内のデータの積和演算を行なう乗算器130 と加算器140 、積和演算の中間データを格納する中間データレジスタ150 、積和演算結果を格納する結果レジスタ160 、アドレスバス170 を前提とする。ここで、データバス120 およびアドレスバス170 は図示されていないＣＰＵに接続されており、データおよびアドレスの入出力に使用されることを前提とする。
【０００９】
係数レジスタ100 はデータバス120 と接続され、該係数レジスタ120 の出力は乗算器130 の一方の入力となり、データレジスタ110 の出力が乗算器130 のもう一方の入力となる。乗算器130 の出力は加算器140 の一方の入力となり、中間データレジスタ150 の出力がもう一方の入力となる。加算器140 の出力は中間データレジスタ150 および結果レジスタ160 の入力となり、該結果レジスタ160 はデータバス120 に接続されている。
【００１０】
図１は本発明の第１の構成のブロック図である。
データ一括自動格納手段180 を有する。データ一括自動格納手段180 は、図示されていない外部のＣＰＵからのデータレジスタ110 のアドレスを最初に一度アドレスバス170 を介して受けることにより、データレジスタ110 の格納位置を自動的に順次指定する。これにより、初めの一回だけ外部のＣＰＵからアドレスデータを入力しさえすれば、データバス120 を介して送られてくる入力データをデータレジスタ110 に順次書き込む処理、およびデータレジスタ110 からデータを順次読み出して積和演算を行なう処理が可能になる。
【００１１】
図２は本発明の第２の構成のブロック図である。
第２の構成は、第１の構成のデータ一括自動格納手段180 に代えてアドレス自動設定手段200 を有する。
【００１２】
アドレス自動設定手段200 は、図示されていない外部のＣＰＵからのアドレスバス170 を介してデータレジスタ110 のアドレスを受け取り、その後は最初のアドレスと同一のダミー・アドレスをアドレスバス170 を介して受けることにより、データレジスタ110 の格納位置を自動的に指定し、入力データの書き込みおよび読み出しを行なう。
【００１３】
従来、図１７に示したように、データレジスタ110 にデータを一つ格納するたびにその都度、外部のＣＰＵで指定したアドレスをデコードして実アドレスを求めていた。しかし、この構成のデータ一括自動格納手段180 により、データレジスタ110 のアドレスをダミーアドレスとしてデータ入力の都度入力すれば自動的にデータレジスタ110 の格納位置を指定することが可能になる。これにより、ＣＰＵ側でデータレジスタ110 の一つ一つの格納位置のアドレス・データを記憶させておく必要もなくなる。
【００１４】
図３は本発明の第３の構成のブロック図である。
第３の構成は、第１の構成のデータ一括自動格納手段180 に代えてアドレス設定手段300 を有する。
【００１５】
アドレス設定手段300 は、図示されていない外部のＣＰＵから最初の一度だけアドレスデータをアドレスバス170 を介して入力し、また、データバス120 を介してデータ入力の都度ポインタ値を入力すれば、データレジスタ110 の格納位置を指定する。
【００１６】
これにより、従来、その都度アドレスデータをアドレスバス170 を介して入力していた手間が省ける。
図４は本発明の第４の構成のブロック図である。
【００１７】
第４の構成は、第３の構成に加えて、中間データ再帰手段400 を有する。
中間データ再帰手段400 は、乗算器130 および加算器140 による積和演算の中間結果をデータバス120 を介することなくデータレジスタ110 に戻す。
【００１８】
これにより、ＩＩＲのような再帰型のフィルタを構成する場合に、簡単に演算途中結果をデータレジスタ110 に格納し、再度積和演算を行なうことが可能になる。このとき、中間結果を格納するデータレジスタ110 のアドレスは第３の構成のアドレス設定手段300 により発生する。
【００１９】
第４の構成のアドレス設定手段300 は、第１の構成のデータ一括自動格納手段180 あるいは第２の構成のアドレス自動設定手段200 に置き換えることもできる。
図５は本発明の第５の構成のブロック図である。
【００２０】
第５の構成は、第４の構成に加えて、中間データ読み出し手段500 を有する。  中間データ読み出し手段500 は、乗算器130 および加算器140 による積和演算の中間結果をデータバス120 に出力する。これにより、図示されていないＣＰＵ等は、データバス120 を介して積和演算途中の中間データを読みだすことが可能になる。
【００２１】
第５の構成のアドレス設定手段300 は、第１の構成のデータ一括自動格納手段180 あるいは第２の構成のアドレス自動設定手段200 に置き換えることもできる。
図６は本発明の第６の構成のブロック図である。
【００２２】
第６の構成は、第５の構成に加えて、オーバフロー通知手段600 を有する。
オーバーフロー通知手段600 は、演算途中にオーバーフローが起きた場合に、該オーバーフローが発生したときに演算していた積和の項数番号を格納し、図示していない外部のＣＰＵに通知する。
【００２３】
第６の構成のアドレス設定手段300 は、第１の構成のデータ一括自動格納手段180 あるいは第２の構成のアドレス自動設定手段200 に置き換えることもできる。
次に、図１乃至図６に示した第１乃至第６の構成のブロック図の作用を説明する。
【００２４】
まず、第１の構成（図１）の作用を説明する。
積和演算に先立ち、係数レジスタ100 およびデータレジスタ110 に係数および入力データを格納する。データレジスタ110 にデータを格納する場合、まず、データバス120 およびアドレスバス170 に接続され、図示されていないＣＰＵ等によりデータレジスタ110 のアドレスをアドレスバス170 によりデータ一括自動格納手段180 に入力する。また、データバス120 を介して格納データをデータ一括自動格納手段180 に入力する。
【００２５】
データ一括自動格納手段180 は、入力されたアドレスがデータレジスタ110 のアドレスであればデータレジスタ110 の先頭実アドレスを指定し、該先頭実アドレスに格納データを格納する。アドレスがデータレジスタ110 のアドレスでなければ無視する。
【００２６】
最初のアドレス入力によりデータレジスタ110 の先頭アドレスが指定され、その後はデータバス120 からデータが入力されるごとに順次データレジスタ110 の次のアドレスにデータを格納していく。
【００２７】
第１の構成は、図示していないＣＰＵからのアドレス指定を１回すればよい。従来の方式よりもデータ転送、アドレス指定にかかる時間が短くでき、積和演算処理を簡単に、また高速に実行することが可能になる。
【００２８】
係数レジスタ100 には、図示されていないＣＰＵから係数データをデータバスを介して入力する。係数データは入力データのように頻繁に書き換える訳ではないので、従来通り該ＣＰＵによってアドレスを指定し、データバスを介して係数データを書き込めばよいが、データレジスタ110 の場合と同様にデータ一括自動格納手段180 を係数レジスタ100 に接続して、データレジスタ110 と同様のアドレス指定を行ってもよい。
【００２９】
係数レジスタ100 およびデータレジスタ110 に係数および入力データが格納されたら、乗算器130 および加算器140 により積和演算を行なう。この場合、積和演算に最初に使用するデータが乗算器130 に入力される。係数レジスタ100 内の係数が乗算器130 のもう一方の入力となる。乗算器130 が積を算出し、これを加算器140 に入力する。最初加算器140 のもう一方の入力値は０に設定しておき和を求める。加算器140 の出力は中間データレジスタ150 に格納され、中間データレジスタ150 の出力は加算器140 の入力となる。これにより、中間結果に次の積が足しこまれていき、積和演算が実行される。積和演算の結果は結果レジスタ160 に格納され、図示されていないＣＰＵ等から読みだすことができる。
【００３０】
次に、第２の構成（図２）の作用を説明する。
第２の構成と第１の構成における相違点は、第２の構成のアドレス自動設定手段200 によるデータレジスタ110 のアドレス設定方法である。それ以外は第１の構成の作用と同様である。
【００３１】
第１の構成の場合は、データレジスタ110 にデータを最初に格納する際に１回だけアドレスバス170 を介してデータレジスタ110 のアドレスをデータ一括自動格納手段180 に入力した。これに対して第２の構成の場合は、データレジスタ110 にデータを入力するごとに、図示していないＣＰＵからアドレスバス170 を介してデータレジスタ110 のアドレスをアドレス自動設定手段200 に入力する。この際、該アドレスはデータレジスタ110 の一つ一つの格納領域のアドレスである必要はなく、最初に入力したデータレジスタ110 のアドレスと同一でよい（データレジスタ110 のアドレスであれば同じアドレスでよいのでダミーアドレスと呼ぶ）。
【００３２】
アドレス自動設定手段200 は、入力されたアドレスがデータレジスタ110 のアドレスであれば最初は先頭の実アドレスを、それ以後は順次格納されるべき実アドレスを指定し、データバス120 から入力される入力データを順次格納していく。アドレスバス170 を介してアドレス自動設定手段200 に入力されたアドレスがデータレジスタ110 のアドレスでなければ、アドレス自動設定手段200 は無視する。
【００３３】
これによって、従来のように実際にデータレジスタ110 に格納するのに使用するアドレスを保持しておく必要はなく、メモリ領域が削減できる。また、最初の格納アドレス以外は従来のように一々入力されたアドレスをデコードする必要もなく、処理速度も速くなる。
【００３４】
次に、第３の構成（図３）の作用を説明する。
第３の構成と第１、第２の構成における相違点は、アドレス設定手段300 によるデータレジスタ110 のアドレス設定方法である。それ以外は第１および第２の構成の作用と同様である。
【００３５】
第３の構成では、図示していないＣＰＵにより、データレジスタ110 に最初に、例えばデータを格納する先頭アドレスをアドレスバス170 を介して、また、データバス120 を介してデータレジスタ110 のポインタ値と入力データを対にして入力する。すなわち、最初のデータの場合はポインタ値０と入力データを、次にポインタ値１と入力データを、というように順次入力する。
【００３６】
アドレス設定手段300 は、該先頭アドレスからデータレジスタ110 に格納する先頭実アドレスを指定し、ポインタ値によって当該入力データの格納アドレスを指定し、格納する。
【００３７】
第３の構成は、第１および第２の構成のようにデータレジスタ110 のポインタは自動生成できない。しかしながら、アドレスの指定を最初のデータ転送のときのみ行えばよいので、従来の方式よりもアドレス転送処理が少なく、処理速度が向上する。よって、第３の構成は、第１および第２の構成よりもハードウエア・コストを抑えた普及版向けの構成と言える。
【００３８】
次に、第４の構成（図４）の作用を説明する。
第４の構成は、第３の構成に中間データ再帰手段400 を加えた構成であり、データレジスタ110 のアドレス指定は第３の構成の作用と同様で、前述の作用によりデータレジスタ110 および係数レジスタ100 にそれぞれデータおよび係数が格納され、積和演算が起動される。
【００３９】
乗算器130 により係数レジスタ100 およびデータレジスタ110 のそれぞれ先頭の係数とデータの積が算出され、加算器140 に入力される。最初、加算器140 ののもう一方の入力値は０に設定され、和が算出され、
出力される。該和は中間データレジスタ150 に格納される。最初の積和が算出され、中間データレジスタ150 に格納されると、次の係数とデータの積和が読みだされて乗算器130 により積が算出される。該積は加算器140 の入力となり、中間データレジスタ150 に先に格納された該和をもう一方の入力として和を求め、再び中間データレジスタ150 に格納される。この処理が繰り返されることにより、積和が求まる。
【００４０】
第４の構成では、中間データ再帰手段400 が該加算器140 の出力である積和の中間データを、図示していないＣＰＵからの指示によりデータレジスタ110 に戻す処理を行なう。該中間データは図示していないＣＰＵから指定されたデータレジスタ110 のアドレスに格納される。これにより、積和の中間データを使用して再帰的な積和演算が可能となる。この第４の構成はＩＩＲフィルタの構成に適している。
【００４１】
第５の構成（図５）は、第４の構成にさらに中間データ読み出し手段500 を加えた構成である。よって、第５の構成の作用は、前述の第４の構成の作用に加えて、加算器140 の出力である積和の中間データを、図示していないＣＰＵからの指示によりデータバス120 に出力し、該ＣＰＵに該中間データを転送する。
【００４２】
これにより、任意の時点で、図示していないＣＰＵの指示により、積和の中間データを読みだすことが可能になる。
最後に、第６の構成（図６）は、第５の構成にさらに加えてオーバーフロー通知手段600 を有するものである。よって、データレジスタ110 へのデータ書き込みや積和演算処理は第５の構成と同様に行われる。
【００４３】
積和演算では乗算器130 および加算器140 で演算できるビット数に限りがあり、積和によりそのビット数をオーバーフローしてしまうことがある。従来はオーバフローを起こしてもそのまま処理が継続するだけであったが、第６の構成のオーバフロー通知手段600 は、乗算器130 および加算器140 により積和が算出され中間データが求まるごとにオーバーフローが起きていないか否かを判断し、オーバーフローが起きた場合には、オーバーフローを起こした中間データが何項目までの積和であるかを示すために、オーバーフローを起こした項数をデータバス120 に出力する。
【００４４】
図示されていないＣＰＵはこの項数を読みだすことにより、オーバーフローが起きないように係数等を修正するデバグ処理を容易に行なうことが可能になる。
【発明の効果】
【００４５】
本発明によれば、第１および第２の構成では、積和演算データを格納するデータレジスタの格納アドレスを外部から指定することなく、積和演算回路内でアドレス生成できるようになり、従来のように、アドレスデータを外部のメモリ領域等に格納しておいて積和演算回路に転送する必要がなくなり、転送時間、アドレス生成時間が短縮され、処理速度が向上する。また、第３の構成では、演算データを任意のタイミングでデータレジスタに格納することが可能になる。さらに、第４の構成では、積和演算の途中データをデータレジスタ110 に戻すことにより再帰的な積和演算がデータバスを介することなく実現でき、データ転送処理時間を短縮できる。また、第５の構成では、積和演算の途中データをデータバスに出力することにより、外部での途中データの処理が容易に行えるようになる。また、第６の構成では、積和演算中のオーバーフローを通知可能となり、係数の再設定等のデバグ効率が向上する。
【００４６】
以上のように、本発明により、ＦＩＲフィルタだけでなくＩＩＲフィルタに適し、アドレス生成やデータ転送を高速に行える積和演算回路が実現できる。
【発明を実施するための最良の形態】
【００４７】
図７は、本発明の一実施例のシステム構成図である。前述した本発明の第１乃至第６のいずれも、このシステム構成で実現できる。
まず、ＣＰＵ700 が存在する。このＣＰＵ700 は第１乃至第６の構成の説明において図示していないＣＰＵと記述していたものにあたる。ＣＰＵ700 はアドレスバス710 およびデータバス720 を有している。また、アドレスバス710 およびデータバス720 にはメモリ730 と積和演算回路740 が接続されている。
【００４８】
メモリ730 にはＣＰＵ700 の制御ソフトウエアや、積和演算回路740 が使用する入力データや係数、アドレスデータ、ポインタ値等が格納されている。
一方、積和演算回路740 は、第１乃至第６の構成を実現した積和演算回路が入る。
【００４９】
尚、本発明は図７の構成に必ずしも限定されるものではなく、例えば、ＣＰＵの代わりにシーケンサを備えたＤＳＰにも同様に適用できる。
以下、第１乃至第６の構成について、それぞれの実施例を説明する。
【００５０】
どの構成の実施例も、複数項分の係数データを格納する係数レジスタ100 、複数項分の入力データを格納するデータレジスタ110 、積和演算処理を行なうための乗算器130 と加算器140 、積和演算途中の中間データを格納する中間データレジスタ150 、積和演算結果を格納する結果レジスタ160 を前提とする。
【００５１】
係数レジスタ100 およびデータレジスタ110 の出力はそれぞれ乗算器130 の２つの入力となり、係数レジスタ100 はデータバス120 にも接続され、図７に図示され、図８には図示されていないＣＰＵ700 によってデータバス120 を介して係数データの書き込み／読み出しを行える。乗算器130 の出力は加算器140 の入力となり、加算器140 のもう一つの入力には中間データレジスタ150 の出力が接続されている。加算器140 の出力は中間データレジスタ150 および結果レジスタ160 の入力となる。結果レジスタ160 はデータバス120 に接続され、該ＣＰＵ700 によって積和演算結果を結果レジスタ160 から読み出す等の処理が可能である。  図８は第１の構成の積和演算回路についての一実施例の構成図である。
【００５２】
図１で説明した第１の構成のデータ一括自動格納手段180 は、デコーダ800 と、カウンタ810 、セレクタ820 で構成される。デコーダ800 はアドレスバス170 とカウンタ810 に接続され、カウンタ810 はデコーダ800 とセレクタ820 に接続される。セレクタ820 はカウンタ及びデータバス120 、データレジスタ110 に接続される。
【００５３】
該ＣＰＵ700 の指示によりアドレスデータがアドレスバス170 を介してデコーダ800 に入力される。デコーダ800 は入力されたアドレスデータをデコードする。すなわち、入力されたアドレスがデータレジスタ110 のアドレスか否かを判定し、データレジスタ110 のアドレスでなければ無視する。一方、データレジスタ110 のアドレスであればカウンタ810 にクリア信号を入力する。
【００５４】
カウンタ810 は、データレジスタ110 の格納位置に対応する項数番号をカウントする。例えば同図の場合、データレジスタ110 には４項分の入力データが格納できるので、カウンタ810 は０〜３をカウントする。８項の積和演算であれば０〜７、３２項の積和演算であれば０〜３１をカウントするのは言うまでもない。カウンタ810 はサイクリックなカウンタ回路で実現できる。
【００５５】
カウンタ810 はデコーダ800 からのクリア信号を受けてカウントを０にクリアする。すなわち、外部のＣＰＵ700 によってデータレジスタ110 のアドレスがアドレスバス170 を介してデコーダ800 に入力されると、カウンタ810 が０にクリアされる。
【００５６】
カウンタ810 の出力はセレクタ820 に入力され、選択信号となる。すなわち、カウンタ出力が０ならばデータレジスタ110 の先頭アドレスに、カウンタ出力が１ならばデータレジスタ110 の２番目の格納場所にデータバス120 を介してセレクタ820 に入力された入力データを格納する。カウンタ810 はデータレジスタ110 へのデータ格納が完了するとインクリメントする。
【００５７】
この構成では、ＣＰＵ700 は、最初のデータ格納時にのみアドレスデータと入力データの対を積和演算回路740 に転送し、それ以降はデータのみをデータバス120 を介して積和演算回路740 に転送すればよい。また、本構成のデコーダ800 は、入力されるアドレスがデータレジスタ110 のアドレスか否かを判定し、データレジスタ110 のアドレスであればクリア信号をカウンタ810 に出力する簡単な構成のデコーダである。
【００５８】
以上のように、この構成は、データレジスタ110 のアドレスを最初に一回指定すれば、その後はデータを順次自動的にデータレジスタ110 に格納することが可能であり、複数のデータを一括して自動的にデータレジスタ110 に格納できる。  また、積和演算のためのデータの読み出しにも適する構成である。
【００５９】
すなわち、積和演算の起動時に１回データレジスタ110 のアドレスを指定して読み出し乗算器130 や加算器140 等を起動するようにすれば、データレジスタ110 の値を自動的に順次読み出して乗算器130 に出力することが可能である。このときは、カウンタ810 を積和演算１回が完了するごとにインクリメントすればよい。
【００６０】
同図では、係数レジスタ100 の書き込み／読み出しはＣＰＵ700 が行ない自動化されていないが、データレジスタ110 と同様の回路を付加して、係数の一括自動書き込み／読み出しを行わせてもよい。
【００６１】
図９は、第２の構成（図２）の実施例のシステム構成図である。
第２の構成のアドレス自動設定手段200 は、第１の構成（図８）と同様に、デコーダ900 とカウンタ910 、セレクタ920 で構成する。デコーダ900 はアドレスバス170 とカウンタ910 に、カウンタ910 はデコーダ900 とセレクタ920 に、セレクタ920 はデータバス120 とカウンタ910 、データレジスタ110 に接続される。この接続も第１の構成と同じである。
【００６２】
第１の構成（図８）との違いは、ＣＰＵ700 が常にアドレスと入力データを対にして入力する点である。アドレスはアドレスバス170 を介してデコーダ900 に、入力データはデータバス120 を介してセレクタ920 に入力される。但し、該アドレスからデータレジスタ110 の実アドレスを求めるわけではないので、該アドレスはデータレジスタ110 を示すアドレスであれば何でもよい。
【００６３】
デコーダ900 はアドレスバス170 から入力される該アドレスをデコードし、該アドレスがデータレジスタ110 を示すアドレスか否かを判断する。該アドレスがデータレジスタ110 を示すアドレスであればカウンタ910 をインクリメントする信号をカウンタ910 に出力する。一方、該アドレスが他のレジスタ等を示す異なるアドレスであれば、該アドレスとデータの対は無視する。
【００６４】
カウンタ910 は、デコーダ900 からのインクリメント信号を受けてインクリメントし、カウンタ値をセレクタ920 に出力する。カウンタ910 の値は、最初のアドレス／データ入力の時点で０にクリアすればよい。
【００６５】
セレクタ920 はカウンタ910 からの入力（カウンタ値）を選択信号とし、データレジスタ110 の対応する格納位置に、データバス120 から入力されたデータを格納する。
以上のように、第２の構成によれば、データレジスタ110 のアドレスが指定されたデータだけをデータレジスタ110 に順次格納することができる。従来の方式では、アドレスバス170 から入力されるアドレスをデコードして一々データレジスタ110 の実アドレスを求めていたが、本構成の場合は、カウンタ910 をインクリメントしてデータレジスタ110 の格納位置を求めるので、デコーダ900 はデータレジスタ110 を示すアドレスか否かを判定する機能だけを持っていればよい。  図１０は、第３の構成（図３）の実施例のシステム構成図である。
【００６６】
第３の構成のアドレス設定手段300 は、ポインタレジスタ1000、加算器1010、データ1020、セレクタ1030からなる。ポインタレジスタ1000はデータバス120 と加算器1010の一方の入力と接続され、加算器1010のもう一方の入力はアドレスバス170 と接続される。加算器1010の出力がデコーダ1020に接続され、デコーダ1020の出力はセレクタ1030に接続される。セレクタ1030はデータバス120 およびデコーダ1020、データレジスタ110 と接続される。
【００６７】
第３の構成は、第１および第２の構成のようにデータレジスタ110 の格納位置の選択信号（ポインタ）を内部で自動的に生成するわけではない。すなわち、ＣＰＵ700 が、データレジスタ110 のアドレスと、データレジスタ110 中での格納位置を示すポインタ値をデータレジスタ110 にデータを格納するごとに指定する。アドレスとしては例えば先頭アドレスを指定すればよい。あるいはまた、データアドレス110 に対応するダミーアドレスを指定してもよい。
【００６８】
該アドレスはアドレスバス170 を介して加算器1010に、ポインタ値はデータバス120 を介してポインタレジスタ1000に格納される。ポインタ値は０〜（データレジスタ110 の格納個数−１）の値をとり、その値はＣＰＵ700 が制御する。
【００６９】
該アドレスおよびポインタレジスタ1000の出力であるポインタ値が加算器1010に入力され、加算される。加算器1010の出力はデコーダ1020に入力され、アドレスのデコードを行なう。デコーダ1020の出力はセレクタ1030に入力され、セレクタ1030の選択信号となる。デコーダ1020からの選択信号により、データレジスタ110 中での格納位置が決まり、データバス120 を介してセレクタ1030に入力された入力データを該格納位置に格納する。
【００７０】
以上のように、本構成は、ＣＰＵ700 がデータレジスタ110 の先頭アドレスとポインタ値を指定する必要があり、第１、第２の構成に比べればＣＰＵ700 への依存度は大きい。しかし、ＣＰＵ700 は従来方式のようにデータレジスタ110 の個々の格納位置のアドレスを持つ必要はなく、先頭アドレスとポインタ値だけをメモリ領域に格納しておき、積和演算回路に対して指定してやればよい。また、第１、第２の構成と異なり、ＣＰＵ700 がデータレジスタ110 内の格納位置を先頭アドレスとポインタ値を使用して指定することが可能である。
【００７１】
第３の構成は、加算器1010がなしでも実現できる。すなわち、アドレスバス170 から入力されるアドレスをデコーダ1020でデコードしたうえセレクタ1030に入力するとともに、データバス120 を介してポインタレジスタ1000に格納されたポインタ値もセレクタ1030に入力する。そして、セレクタ1030がデコード済みのアドレス、例えばデータレジスタ110 の先頭アドレスと、ポインタ値の両方を選択信号としてデータレジスタ110 の格納位置を指定する。
【００７２】
図１１は、第４の構成（図４）の実施例のシステム構成図である。
第４の構成は、第３の構成に中間データ再帰手段400 を加えたものであり、中間データ再帰手段400 以外は第３の構成と同様である。
【００７３】
中間データ再帰手段400 は積和演算の加算器140 の出力をデータレジスタ110 に戻すデータ線1100で実現する。データレジスタ110 への格納アドレスはＣＰＵ700 で直接指定してもよいし、第３の構成の実施例（図１０）で説明したアドレス指定方法で指定してもよい。
【００７４】
このように、加算器140 の出力をデータレジスタ110 に戻すことにより、積和演算の途中データを使用して再び積和演算を行なう再帰型の処理が可能となり、ＩＩＲフィルタを実現できる。
【００７５】
図１２は、第５の構成（図５）の実施例のシステム構成図である。
第５の構成は、第４の構成に中間データ読み出し手段500 を加えた構成であり、中間データ読み出し手段500 以外は第４の構成と同様である。
【００７６】
中間データ読み出し手段500 は、中間データレジスタ150 の出力をデータバス120 に接続するデータ線1200で実現できる。ＣＰＵ700 の命令により中間データレジスタ150 に格納されている積和演算の途中データをデータバスを介して読み出す。
【００７７】
読み出したデータはＣＰＵ700 で処理することもできるし、再びデータレジスタ110 に格納することも可能である。データレジスタ110 に格納する場合、ポインタレジスタ1000、加算器1010、デコーダ1020、セレクタ1030を使用した第３の構成のアドレス指定方法でデータレジスタ110 のアドレスを指定し格納することができる。また、第１の構成のアドレス指定方法である、カウンタを自動的にインクリメントしてデータレジスタ110 のアドレスを指定する方法により、中間データを次々にデータレジスタ110 に格納し、再び積和演算を行なうこともできる。
【００７８】
図１３は、第６の構成（図６）の実施例のシステム構成図である。
第６の構成は、第５の構成にオーバーフロー通知手段600 を加えた構成であり、オーバーフロー通知手段600 以外は第５の構成と同様である。
【００７９】
オーバーフロー通知手段600 は、中間データレジスタ150 の出力を入力とするオーバーフロー項数レジスタ1300で実現する。オーバーフロー項数レジスタ1300の出力はデータバス120 に接続される。
【００８０】
オーバーフロー項数レジスタ1300には、積和演算途中でオーバーフローが生じた場合に、オーバーフローが生じた積和演算の項数が格納される。オーバーフロー項数レジスタ1300に格納された項数や中間データレジスタ150 のオーバーフローした中間データをデータ線1200を使用して読みだすことにより、オーバーフローしないように係数データを作り変える等のデバグ処理が容易に行えるようになる。
【００８１】
図１４は、第６の構成（図６、図１３）の実施例のより詳しいシステム構成図である。
同図では、例えば、４項の積和演算を想定し、係数レジスタ100 には４項分の係数データ（Ａ0 、Ａ1 、Ａ2 、Ａ3 ）が、データレジスタ110 には４項分の入力データ（Ｘ0 、Ｘ1 、Ｘ2 、Ｘ3 ）が格納できるようになっている。この項数は、２以上ならいくらでも良い。
【００８２】
本実施例では、図１３のシステム構成に加えて、中間データレジスタ150 の出力を入力としオーバーフローしたデータを格納し、その出力がデータバス120 に接続されたオーバーフローデータレジスタ1400と、データバス120 に接続されＣＰＵ700 が転送するポインタ値を格納する二つのレジスタ、ポインタレジスタ２  1410とポインタレジスタ３  1420と、データレジスタ110 のデータ出力を入力データとし、ポインタレジスタ３  1420のポインタ値を選択信号とするセレクタ1430で実現する。ポインタレジスタ２  1410のポインタ値はもう一方のセレクタ1030の選択信号となる。
【００８３】
今、係数レジスタ100 には係数データ（Ａ0 、Ａ1 、Ａ2 、Ａ3 ）が、データレジスタ110 には入力データ（Ｘ0 、Ｘ1 、Ｘ2 、Ｘ3 ）が格納されたものとし、積和演算の手順を順を追って説明する。
【００８４】
この積和演算器では、乗算器130 で係数データ×入力データの演算を各項のデータについて行ない、加算器140 で積の値を順次加算していく。すなわち、Ａ0 ×Ｘ0 ＋Ａ1 ×Ｘ1 ＋Ａ2 ×Ｘ2 ＋Ａ3 ×Ｘ3 を演算することになる。
【００８５】
係数データおよび入力データが８ビットならば、加算器140 の出力線は８＋８＋２（４項分を足すことにより生じる）＝１８ビットの幅があれば積和演算でオーバーフローを起こすことはない。しかし、演算結果も８ビットとすると、オーバーフローが起こることが考えられ、オーバーフローへの対策が積和演算回路に必要となる。
【００８６】
本実施例で、例えば、Ｑ６固定小数点データで演算を行なうとする。すなわち、符号１ビットに整数部１ビット、小数部６ビットのデータ形式である。
そして、今、Ａ0 ＝Ａ1 ＝Ａ2 ＝Ａ3 ＝１（１０進数）＝４０Ｈ（Ｑ６固定小数点表現を１６進数で表記。２進数で表現すると0100 0000)、Ｘ0 ＝Ｘ1 ＝Ｘ2 ＝Ｘ3 ＝４０Ｈとする。すると、最初の積演算Ａ0 ×Ｘ0 ＝１０００Ｈ（２進数で表現すると0001 0000 0000 0000)となる。これは８ビットのＱ６固定小数点で表すと４０Ｈである。次にＡ1 ×Ｘ1 ＝１０００ＨをＡ0 ×Ｘ0 ＝１０００Ｈに加算すると２０００Ｈとなる。これを８ビットのＱ６で表すと８０Ｈとなってしまい、８ビットのＱ６固定小数点データとしてはオーバーフローしたことになる。すなわち、Ｑ６固定小数点データは８０Ｈ（２進数では1000 0000 、１０進数では−２）から７ＦＨ（２進数では0111 1111 、１０進数では１．９８４３７５）の間の値しか表せない。
【００８７】
本実施例では、この場合、オーバーフローデータレジスタ1400にオーバーフローしてしまった中間データである８０Ｈが、また、オーバーフロー項数レジスタ1300には第２項目の積和演算でオーバーフローを起こしたので２という値が格納されたうえ、積和演算は続けられる。そして、オーバーフローしたままＡ0 ×Ｘ0 ＋Ａ1 ×Ｘ1 ＋Ａ2 ×Ｘ2 ＋Ａ3 ×Ｘ3 を最後まで演算し、４０００Ｈを結果レジスタ160 に格納し、さらにデータ線1200を介してデータバス120 に出力して処理を終了する。このとき、８ビットのＱ６固定小数点データとして出力するように指定してあれば、結果レジスタ160 には００Ｈが格納され、処理を終了する。
【００８８】
一方、連続して次の演算を行なう場合を考える。今までのデータＸ0 、Ｘ1 、Ｘ2 、Ｘ3 の次に新たな入力データＸ4 を持ってきてＡ0 ×Ｘ1 ＋Ａ1 ×Ｘ2 ＋Ａ2 ×Ｘ3 ＋Ａ3 ×Ｘ4 を演算したい場合には、Ｘ0 が入っているデータレジスタ100 の格納位置にＸ4 を格納する必要がある。
【００８９】
この場合、ＣＰＵ700 により、データバス120 を介してポインタレジスタ１  1000に値０を、またデータバス120 を介してセレクタ1030に入力データを、さらにアドレスバス170 を介して加算器1010にダミーアドレス（データレジスタ110 を示すアドレス）等を指定することにより、今までのＸ0 の位置にＸ4 が格納される。
【００９０】
そして、積和演算を起動するのに先立ち、ＣＰＵ700 により、ポインタレジスタ３  1420の値を０から１にする。これにより、セレクタ1430の選択信号の値が１増え、データレジスタ110 からの先頭の読み出しアドレスが１ずれてＸ1 になる。
【００９１】
以上のように、ポインタレジスタ３  1420はデータレジスタ110 からの先頭読み出しアドレスをずらす信号を発生する。
さらに、積和演算結果あるいは中間データをデータレジスタ110 に格納して次の積和演算に使用する場合を考える。
【００９２】
このような場合は、積和演算結果ならばＣＰＵ700 により結果レジスタ160 の値をデータバス120 を介してセレクタ1030に戻し、２つ目のポインタレジスタ２  1410に値を設定して該ポインタ値をセレクタ1030に入力する。これにより、データレジスタ110 の格納位置が定まり、演算結果を格納することが可能になる。  一方、中間データをデータレジスタ110 に戻す場合には、ＣＰＵ700 によりデータ線1100を介して中間データをセレクタ1030に戻してやればよい。データレジスタ110 の格納位置はポインタレジスタ２  1410にポインタ値を設定することにより決める。
【００９３】
ポインタレジスタ２  1410を置くことにより、ＩＩＲフィルタを容易に構成することが可能になる。
図１５は、図１４の実施例の構成に加えてデータ長選択セレクタ1500を加算器140 の出力と中間データレジスタ150 の間に挿入した構成である。データ長選択セレクタ1500は、積和結果のデータのうちの一部のビットを選択するセレクタである。例えば１６ビットのうちの８ビットを選択したり、３２ビットのうちの１６ビットを選択したり、８ビットをそのまま出したりすることが可能になる。
【００９４】
最後に、図１６は、図１４の実施例の構成に加えてポインタレジスタ４  1600とコントローラＣＴＬ1610を加えた構成である。ポインタレジスタ４  1600はデータバス120 およびコントローラ1610に接続され、コントローラ1610はデータバス120 およびデータレジスタ110 、係数レジスタ100 、乗算器130 、加算器140 に接続されている。
【００９５】
積和演算をある項まで実行し、その後の演算は図示していない他の処理装置等から送られてこないと実行できないような場合、演算できる項まで演算しておき、そこで止めておく場合に使用する。ポインタレジスタ４  1600には積和演算を止める項のアドレスを示すポインタ値を格納しておく。
【００９６】
データレジスタ110 から乗算器130 に入力されるデータ読み出しのアドレスがポインタレジスタ４  1600が示すアドレスと一致すると、コントローラ1610は積和演算を中止する。そして、コントローラ1610は必要なデータがデータバス120 を介して転送されるのを待機し、該データがデータレジスタ110 あるいは係数レジスタ100 等に格納されると、コントローラ1610は中断した積和演算を再開するように乗算器130 、加算器140 等を制御する。
【００９７】
本発明の積和演算器では、係数レジスタに格納する係数データを適当に選ぶことにより、様々な特性を持つＦＩＲフィルタを構成することができる。また、積和演算の結果を入力データとしてデータレジスタに格納することにより、多様なＩＩＲフィルタを構成できる。
【００９８】
例えば、遅延素子を介した信号に相当するデータを入力データとして用いれば、非再帰形の遅延フィルタ（トランスバーサルフィルタ）や再帰形の遅延フィルタを構成することができる。
【図面の簡単な説明】
【００９９】
【図１】本発明の第１の構成のブロック図である。
【図２】本発明の第２の構成のブロック図である。
【図３】本発明の第３の構成のブロック図である。
【図４】本発明の第４の構成のブロック図である。
【図５】本発明の第５の構成のブロック図である。
【図６】本発明の第６の構成のブロック図である。
【図７】一実施例のシステム構成図である。
【図８】積和演算回路の第１の構成の一実施例のシステム構成図である。
【図９】積和演算回路の第２の構成の一実施例のシステム構成図である。
【図１０】積和演算回路の第３の構成の一実施例のシステム構成図である。
【図１１】積和演算回路の第４の構成の一実施例のシステム構成図である。
【図１２】積和演算回路の第５の構成の一実施例のシステム構成図である。
【図１３】積和演算回路の第６の構成の一実施例のシステム構成図である。
【図１４】積和演算回路の第６の構成のより詳細な構成図である。
【図１５】積和演算結果のデータ長を選択可能にするための一実施例のシステム構成図である。
【図１６】積和演算を一時中断可能にする一実施例のシステム構成図である。
【図１７】従来の積和演算回路の構成図である。
【符号の説明】
【０１００】
１００      係数レジスタ
１１０      データレジスタ
１２０      データバス
１３０      乗算器
１４０      加算器
１５０      中間データレジスタ
１６０      結果レジスタ
１７０      アドレスバス
１８０      データ一括自動格納手段
３００      アドレス設定手段
４００      中間データ再帰手段
５００      中間データ読出し手段
６００      オーバーフロー通知手段
【図１】
2004280854.tif 000003
【図２】
2004280854.tif 000004
【図３】
2004280854.tif 000005
【図４】
2004280854.tif 000006
【図５】
2004280854.tif 000007
【図６】
2004280854.tif 000008
【図７】
2004280854.tif 000009
【図８】
2004280854.tif 000010
【図９】
2004280854.tif 000011
【図１０】
2004280854.tif 000012
【図１１】
2004280854.tif 000013
【図１２】
2004280854.tif 000014
【図１３】
2004280854.tif 000015
【図１４】
2004280854.tif 000016
【図１５】
2004280854.tif 000017
【図１６】
2004280854.tif 000018
【図１７】
2004280854.tif 000019