(57)【特許請求の範囲】
【請求項１】
フィルタ処理を高速で行うことのできるデータ駆動型情報処理装置であって、
処理すべきおよび処理後のデータを格納する複数のデータレジスタを含むデータフィールドと、前記データフィールドにおけるデータレジスタを特定する行先情報を格納する複数の行先レジスタを含む行先フィールドとを有し、かつ、複数のエントリのそれぞれが、前記データフィールドに含まれるデータレジスタと前記行先フィールドに含まれる行先レジスタとからなるレジスタファイルと、
それぞれ異なるデータレジスタに結合される乗算器と加算シフト複合演算器とを含む演算手段と、
処理されるべきプログラムに付されたノードに対応して命令を格納するプログラムメモリ手段と、
オペランドデータとノード特定番号とを少なくとも含むデータパケットに応答して、前記プログラムメモリ手段へアクセスし、該ノードに対応する命令を読み出す命令読出手段と、
前記命令読出手段により読出された命令が前記演算手段を用いる演算を指定しているか否かを判別する判別手段と、
前記判別手段の判別結果が前記演算手段の利用を示すとき該読出された命令と、この命令とリンクして読出されたノード特定番号とオペランドデータとを含むデータパケットを前記フィルタ処理のために送出する送出手段と、
前記送出手段からのデータパケットに応答して前記レジスタファイルのデータフィールド内の所定のデータレジスタへオペランドデータを書込むデータ入力手段と、
前記送出手段からのデータパケットに応答して、前記レジスタファイルの前記データフィールド内のデータレジスタからデータを読出し前記演算手段へ与えるデータ読出手段と、
前記データパケットの命令に応答して、前記行先フィールド内の行先レジスタが記憶する行先情報が示すデータレジスタへ前記演算手段の加算シフト複合演算器の出力を書込む手段、及び、前記データパケットの命令に応答して前記演算手段の乗算器に入力データを供給したデータレジスタと同一エントリーの特定のデータレジスタへ前記乗算器の出力を書き込む手段を含むデータ書込手段と、
前記送出手段からのデータパケットに応答して、フィルタ処理結果のデータを、データパケットの形態で前記命令読出手段へ与えるデータ出力手段とを備える、データ駆動型情報処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明はデジタル信号を処理するための装置に関し、特に、映像信号および音声信号等のデジタル信号をデータ駆動方式に従ってフィルタ処理を含むプログラムを実行するデータ駆動型情報処理装置に関する。
【０００２】
【従来の技術】
信号処理の分野においては、正確に所望の信号処理を実行するために、波形整形、ノイズ成分の除去および所望の信号成分の抽出などが行なわれる。このような処理のためにはフィルタが用いられる。フィルタには、受動素子（インダクタンスＬ、キャパシタＣおよび抵抗Ｒ）を用いるＬＣＲフィルタ、演算増幅器および抵抗ＲならびにキャパシタＣを用いる能動フィルタがある。このＬＣＲフィルタおよび能動フィルタはアナログ信号をアナログ形態でフィルタ処理しており、アナログフィルタと呼ばれる。
【０００３】
一方において、映像信号および／または音声信号などを処理する分野においては、信号処理の精密化、容易化および高度化などのために、信号はデジタル形態で処理されることが多い。この場合、アナログ信号がデジタル信号に変換された後にこのデジタル信号に対し所望の信号処理が実行される。このようなデジタル信号処理分野においても、ノイズ成分の除去および所望の成分の抽出などのためにフィルタ処理が実行される。このフィルタ処理は、デジタル回路を用いてデジタル的に実行される。このフィルタ処理を行なうデジタル回路はデジタルフィルタと呼ばれる。
【０００４】
デジタルフィルタは、基本的には、加減算器と、１標本化周期（アナログ−デジタル変換されたときのサンプリング信号周期：または入力デジタル信号が与えられる周期）遅延させる遅延素子Ｄを基本構成要素として備える。このようなデジタルフィルタは、広く一般に用いられるようになってきている。
【０００５】
【発明が解決しようとする課題】
デジタルフィルタを構成する場合、そのハードウェア構成を固定的に設定したならば、アナログフィルタ回路では可能であったフィルタ係数の変更およびタップ数の変更は容易に行なうことができない。デジタルフィルタにおいては、フィルタ係数は、乗算器の係数で表わされ、この乗算係数の変更は、ハードウェア構成が固定された場合困難となるからである。また、デジタルフィルタにおいては、タップ数は、遅延回路の段数（または乗算器の数）で決定される。タップ数を変更するためには、遅延回路の段数（または乗算器の数）を変更する必要があり、容易には行なうことができない。
【０００６】
上述のような固定されたハードウェア構成を備えるデジタルフィルタの欠点を克服する方法として、以下の２種類の方法が考えられる。
【０００７】
その１つは、係数（乗算係数）を任意の値に変更することのできる専用ＬＳＩを用いることであり、もう１つは、プログラム可能なプロセサを用いるものである。
【０００８】
第１の手法においては、タップ係数（乗算係数すなわちフィルタ係数）を外部から与える構成が用いられる。この場合、タップ係数は変更可能であるものの、デジタルフィルタ自体の構造は固定されている。ＦＩＲ（有限長インパルス応答）フィルタ、ＩＩＲ（無限長インパルス応答）フィルタ、または両者を組合わせたフィルタ構成の場合、他の構成に変更することはできない。そのため、その用途が限定されるという欠点が生じる。
【０００９】
第２の方法は、ＤＳＰ（デジタル信号プロセサ）または従来のデータ駆動型プロセサなどの信号処理用プロセサを用いるものである。これらの信号処理用プロセサを用いてデジタルフィルタを構成した場合には、プログラムによりその処理内容を変更することができる。しかしながら、データ処理を行なうためのプログラムには、フィルタ処理そのものの処理を行なう命令以外の命令が含まれる。プロセサを用いてデジタルフィルタを構成した場合、その最小演算命令は、加算、減算、乗算などの命令であり、このため命令の数が増大する。
【００１０】
データ駆動型プロセサにおいては、あるノードにおいて必要とされる条件が揃ったときにそのノードが発火する。各ノードにはそれぞれ演算命令が割当てられる。したがって、このような単位演算命令を用いてデジタルフィルタを構成した場合、命令の数が増えるため、応じて等価的にノードの数が増大し、発火条件の判別、必要データの待合わせなどフィルタ処理以外のデータ処理を実行する必要があり、このフィルタ処理以外の処理実行時間がオーバーヘッドとなり、高速でフィルタ処理を行なうことができないという問題が生じる。
【００１１】
上述のように、専用ＬＳＩを用いてデジタルフィルタを構成した場合、そのハードウェア構成は固定され、プログラム可能ではないため、任意のフィルタを構成することができないという欠点がある。
【００１２】
また、この理由により、処理内容としてフィルタ処理を含む複雑なアプリケーションプログラムには、専用ＬＳＩで構成されるデジタルフィルタを利用することができないという欠点が生じる。
【００１３】
またプログラム可能なプロセサを用いた場合にはその命令の内容がフィルタ処理の基本要素となっていないため、命令実行時間によるオーバーヘッドが生じ、高速でフィルタ処理を行なうことができないという問題が生じる。
【００１４】
それゆえ、この発明の目的は、高速でフィルタ処理をその内容に含むプログラムを実行することのできる情報処理装置を提供することである。
【００１５】
この発明の他の目的は、任意のフィルタ構造を容易に実現することのできるデジタルフィルタ装置を備える情報処理装置を提供することである。
【００１６】
【課題を解決するための手段】
この発明に係るデータ駆動型情報処理装置は、複数のレジスタを有するレジスタファイルを備える。このレジスタファイルは、データを格納するデータフィールドと、このデータフィールドにおけるレジスタを特定する行先情報を格納する行先フィールドとを含む。このレジスタファイルは、各々が、データフィールドのレジスタと行先フィールドのレジスタとを含む複数のエントリーを有する。好ましくは、このレジスタファイルの１エントリーが、フィルタ処理における基本演算命令に対応する。
【００１７】
この発明に係るデータ駆動型情報処理装置は、さらに、処理されるべきプログラムに付されたノードに対応して命令を格納するプログラムメモリ手段と、オペランドデータとノード特定番号とを少なくとも含むデータパケットに応答してプログラムメモリ手段へアクセスし、該ノードに対応する命令を読出す命令読出手段と、各々が異なるデータレジスタに結合される乗算器と加算シフト複合演算器とを含む演算手段と、プログラムメモリ手段から読出された命令がこの演算手段を用いる演算を指定しているか否かを判別する判別手段と、この判別手段の判別結果が演算手段の利用を示すとき、この命令と、この命令にリンクして読出されるノード特定番号とをデータパケットに含まれるオペランドとともにパケットの形態に変換してフィルタ処理のために送出する送出手段とを含む。
【００１８】
この発明に係るデータ駆動型情報処理装置はさらに、命令送出手段から与えられるデータパケット内のオペランドデータをレジスタファイルのデータフィールドの所定のレジスタへ書込むデータ入力手段と、命令送出手段からのパケット内の命令に従ってレジスタファイル内のデータフィールドに含まれるレジスタの内容を読出し、この演算手段へ与えるデータ読出手段と、命令送出手段からのデータパケット内の命令に従って演算手段の出力をレジスタファイルのデータフィールド内のレジスタへ書込むデータ書込手段を含む。このデータ読出手段が読出すレジスタの指定は、プログラム可能である。また、データ書込手段は、行先フィールド内のレジスタのプログラム可能な行先情報が示すレジスタへ演算手段の加算シフト複合演算器の出力を書込む手段と、演算手段の乗算器の入力データと同一のエントリーの特定のデータレジスタへ乗算器の出力を書込む手段を含む。
【００１９】
この発明に係るデータ駆動型情報処理装置は、さらに命令送出手段からの命令に従ってフィルタ処理結果のデータをデータパケットの形態で伝達するデータ出力手段を備える。
【００２０】
【作用】
プログラムメモリ手段には、プログラムの各命令がノードに対応して格納され、与えられたデータパケットに従って対応の命令がプログラムメモリ手段から読出される。この読出された命令が演算装置を利用する命令の場合には、この読出された命令に従ってレジスタファイルおよび演算手段のデータの書込および読出が実行される。
【００２１】
データ駆動方式で命令が実行されるため、高速でプログラムを実行することができる。また、この命令によりフィルタ構造を定義することができるため、フィルタ処理をその内容に含むプログラムであっても高速に実行することができる。
【００２２】
演算手段は、フィルタ処理に必要とされる乗算器と加算シフト複合演算器を含む。この演算手段は、デジタルフィルタの基本ユニットを構成する。デジタルファイルのデータフィールド内のレジスタの内容は演算手段へ与えられ、所定の演算が実行される。この演算手段による演算はフィルタの基本単位の演算である。したがって、このデータレジスタの読出／書込命令は、フィルタ処理の基本単位命令となっており、フィルタ処理以外の命令を実行する必要がなく高速でフィルタ処理を行なうことができる。
【００２３】
またデータレジスタの書込／読出先を変更することによりＦＩＲフィルタおよびＩＩＲフィルタいずれをも実現することができるのみならず、所望の構造のフィルタを構築することができる。
【００２４】
また、乗算係数（フィルタ係数）をデータレジスタ内に保持しておくことにより容易にフィルタ係数を変更することができ、フィルタ特性の変更を容易に行なうことができる。
【００２５】
また、レジスタファイルのエントリーの数を調整することにより容易にフィルタのタップ数を変更することができる。
【００２６】
【実施例】
図２はこの発明において利用されるデータ駆動型フィルタ装置の全体の構成を概略的に示すブロック図である。図２において、データ駆動型フィルタ装置は、入力データを受ける入力部２０と、複数のレジスタを含み、処理されるべきデータおよび処理後のデータを格納するレジスタファイル１０と、このレジスタファイル１０に格納された最終演算結果を読出して装置外部へ出力する出力部３０を含む。
【００２７】
レジスタファイル１０は、その構成は後に詳細に説明するが、データ駆動型構成を実現するために、処理データのみならず、この処理データの書込先を特定する行先情報を格納するレジスタも備える。すなわち、レジスタファイル１０は、処理データを格納するデータフィールドと、このデータフィールド内の特定のレジスタを特定する行先情報を格納する行先フィールドとを含む。このデータフィールドおよび行先フィールドはそれぞれ複数のレジスタを含む。
【００２８】
入力部２０は、レジスタファイル１０の所定のレジスタ（この所定のレジスタはプログラムにより指定され、実現すべきフィルタ構造によって異なる）へ入力データを書込む。入力部２０はまた、後に説明するが、１つの入力データに関連する処理が完了するまで次のデータの入力を待合わせる機能を備える。
【００２９】
出力部３０は、このレジスタファイル１０の所定のレジスタ（フィルタの最終ユニットに対応するレジスタ）の内容を読出して装置外部へ出力する。この構成についても後に詳細に説明する。
【００３０】
データ駆動型フィルタ装置はさらに、乗算器１ａ〜１ｎを含む第１の演算器群４０と、加算シフト複合演算器２ａ〜２ｎを含む第２の演算器群５０を含む。この第１の演算器群４０および第２の演算器群５０に含まれる乗算器および加算シフト複合演算器の数は複数ではなく、１つであってもよい。１個の乗算器１（乗算器１ａ〜１ｎを総称的に示す）と１個の加算シフト複合演算器２（加算シフト複合演算器２ａ〜２ｎを総称的に示す）で１つの単位フィルタ構造が実現される。この第１の演算器群４０および第２の演算器群５０へは、レジスタファイル１０のデータレジスタの内容が伝達される。処理結果は、この第１の演算器群４０および第２の演算器群５０へ与えられたデータと同一エントリーの行先レジスタの内容が指定するレジスタへ書込まれる。特に、第１の演算器群４０の処理結果が書込まれるレジスタは予め固定的に設定される。
【００３１】
レジスタファイル１０は、単一代入単一読出のルールに従ってデータの書込および読出が実行される。ここで「単一代入単一読出」のルールとは、一度読出されたデータは消費され、再び利用されることがないというルールである。また、このルールでは書込みは読出しが完了するまで行なわれない。ただしこのルールは、定数データ（フィルタ係数：乗算係数）は除く。定数データは、オーバーライトされたときには、新しいデータが有効となる。
【００３２】
図３は、図２に示すレジスタファイルの内部構成を具体的に示す図である。図３において、レジスタファイル１０は、情報を格納するためのレジスタファイルＲＦと、このレジスタファイルＲＦのデータ書込および読出を制御する書込／読出制御部ＲＷＣを含む。レジスタファイルＲＦは、データフィールドＤＡＦと、行先フィールドＤＥＦを含む。データフィールドＤＡＦは、複数のデータレジスタＤＡＲを含み、行先フィールドＤＥＦは、複数の行先レジスタＤＥＲを含む。
【００３３】
図３において同一行に配置されるレジスタがこのレジスタファイルの１エントリーを構成する。データレジスタＤＡＲのデータが読出されて第１または第２の演算器群へ与えられたとき、同様に関連の行先レジスタＤＥＲの内容が読出され書込／読出制御部ＲＷＣへ与えられる。書込／読出制御部ＲＷＣは、第１または第２の演算器群からの出力データをこの行先レジスタＤＥＲからの行先情報に従って対応のデータレジスタへ書込む。書込／読出制御部ＲＷＣはデータレジスタＤＡＲおよび行先レジスタＤＥＲそれぞれ独立にその書込／読出を制御することができる。
【００３４】
レジスタファイル１０はさらに、この書込／読出制御部ＲＷＣの動作を制御するプログラムコントロール部１００を含む。プログラムコントロール部１００は、このフィルタ装置が実現するフィルタ処理内容を決定するプログラムを格納するプログラムメモリＰＭと、このプログラムメモリＰＭに格納されたプログラムに従って書込／読出制御部ＲＷＣの動作を制御するシーケンスコントローラＳＣを含む。この書込／読出制御部ＲＷＣは、したがってシーケンスコントローラＳＣの出力情報に従って、順次、または並列にレジスタファイルＲＦの内容の書込および読出、ならびにバス接続制御を実行する。
【００３５】
図３においては、入力部２０および出力部３０はともに書込／読出制御部ＲＷＣを介してデータの入出力を行なうように示されている。これは書込／読出制御部ＲＷＣが入出力インタフェース回路の機能をも併せて備えるためである。さらに図３においては、入力部２０および出力部３０はシーケンスコントローラＳＣの制御を受けるように示される。これはプログラムメモリＰＭに書込まれたプログラムに従って入力部２０が入力データＩＮを書込むデータレジスタを特定するアドレスおよび出力部３０が出力データＯＵＴを生成するためのデータフィールドＤＡＦの特定のデータレジスタＤＡＲを指定するアドレスがそれぞれこのシーケンスコントローラＳＣの制御の下に設定されることを示すためである。
【００３６】
シーケンスコントローラＳＣが入力部２０および出力部３０にこのレジスタファイルＲＦ内のデータレジスタのアドレスを設定することはなく、書込／読出制御部ＲＷＣがシーケンスコントローラＳＣの制御の下に入力部２０および出力部３０とデータの入出力を行なう構成とされてもよい。このとき、書込／読出制御部ＲＷＣはシーケンスコントローラＳＣの制御の下に入力データＩＮの書込および出力データＯＵＴの読出をレジスタファイルＲＦに対して実行する。
【００３７】
プログラムメモリＰＭへは、外部からプログラムを書込むことができる（この書込経路は示さず）。これにより、適用用途に応じたフィルタ構造を実現することができる。
【００３８】
また図３においては、レジスタファイル１０内部にプログラムコントローラ１００が設けられるように示されている。このプログラムコントローラ１００は、レジスタファイル１０の外部に設けられて装置外部から書込／読出制御部ＲＷＣを制御する構成が用いられてもよい。
【００３９】
［レジスタの構成］
図４は、レジスタファイルの構成および接続形態を示す図である。図４において、レジスタファイル１０は、１エントリーとしてデータレジスタＤＡＲと行先レジスタＤＥＲを含む。
【００４０】
このデータレジスタＤＡＲのレジスタの配置は、命令ｉｉｒおよび命令ｆｉｒに従ってその意味が変更される。命令ｉｉｒは、ＩＩＲフィルタ処理を実行するための命令であり、命令ｆｉｒはＦＩＲフィルタ処理を実行するための命令である。図４においては、この命令ｉｉｒが指定されたときのレジスタの配置を示す。
【００４１】
図４において、データレジスタＤＡＲは、処理されるべきデータを格納するＡ１レジスタ、Ａ２レジスタ、Ｃレジスタ、入力データを格納するＢレジスタ、乗算結果（Ｘの計算結果）を格納するＸレジスタ、処理データを格納するＤレジスタを含む。
【００４２】
Ａ１レジスタおよびＣレジスタに格納されたデータは、第１の演算器群４０に含まれる乗算器１へ与えられる。乗算器１の乗算結果（Ｘの計算結果）は書込回路６２を介して同じエントリー内のＸレジスタへ格納される。
【００４３】
Ｂレジスタ、ＸレジスタおよびＤレジスタの格納するデータは第２の演算器群５０に含まれる加算シフト複合演算器２へ与えられる。加算シフト複合演算器２は、加算器２２と、加算器２２の出力を所定ビットシフトするシフト回路２４を含む。ＢレジスタおよびＸレジスタの格納するデータが加算器２２へ与えられる。Ｄレジスタの格納するデータはシフト回路２４におけるシフトビット数を決定する。シフト回路２４は、そのシフト数がプログラマブルな回路であり、そのシフト操作により除算を実行する。
【００４４】
行先レジスタＤＥＲは、加算シフト複合演算器２の出力を格納する位置を示す行先情報を格納するＥレジスタと、Ａ１レジスタのデータを書込むレジスタを特定する行先情報を格納するＦレジスタを含む。このＥレジスタおよびＦレジスタはそれぞれ複数の行先を特定することができる。ＥレジスタおよびＦレジスタの格納する行先情報はプログラム可能であり、プログラムメモリＰＭ（図３参照）に格納された命令に従ってシーケンスコントローラＳＣおよび書込／読出制御部ＲＷＣの制御の下に対応の行先情報がプログラムされる。
【００４５】
図４においては、さらにこのデータの書込および読出を実行するために書込回路６１、６２および６３が示される。書込回路６１は、Ｆレジスタに格納された行先情報をデコードし、対応のレジスタへＡ１レジスタの格納するデータを書込む。書込回路６２は乗算器１の出力を同一エントリー内のＸレジスタへ書込む。書込回路６３は、Ｅレジスタに格納された行先情報をデコードし、加算シフト複合演算器２の出力を対応のレジスタへ書込む。この書込回路６１、６２および６３は図３に示す読出／制御部ＲＷＣに含まれる。また、このデータレジスタＤＡＲおよび行先レジスタＤＥＲからのデータ読出は、それぞれ独立に、図３に示す読出／書込制御部ＲＷＣにより実行される。各レジスタは読出／書込制御部ＲＷＣの制御の下にそれぞれ対応のデータバスに接続される。このレジスタとデータバスとの接続はプログラムにより決定される。
【００４６】
上述のようにレジスタファイルにおける１エントリーのレジスタにおいて、各レジスタはどの演算に利用されるかはプログラムにより固定的に設定される。すなわちＡレジスタおよびＣレジスタは乗算用のデータを格納するために利用され、ＢレジスタおよびＤレジスタは加算シフト複合演算のために利用される。それら以外の演算には利用されない。また、各レジスタには、初期値および読出専用の定数を格納することができる。このレジスタからのデータの書込および読出は単一代入／単一読出（１回限りの書込および読出）のルールに従って実行される。定数が格納されたレジスタは、書込は行なわれず、その定数を複数回読出すことができる。
【００４７】
また、行先レジスタＤＥＲに含まれるＥレジスタおよびＦレジスタの行先情報はプログラム可能である。したがって、任意の構造のフィルタを容易に構成することができる。
【００４８】
図５はｆｉｒ命令によるレジスタの接続構成を示す図である。命令ｆｉｒの場合、データレジスタＤＡＲは、Ａレジスタ、Ｃレジスタ、Ｂレジスタ、Ｘレジスタ、およびＤレジスタを含む。ＣレジスタおよびＢレジスタの格納するデータは乗算器１へ与えられる。すなわち、ＣレジスタおよびＢレジスタは乗算のためにのみ利用されるデータを格納する。Ａレジスタ、ＸレジスタおよびＤレジスタに格納されるデータは、加算シフト複合演算器２へ与えられる。Ｘレジスタへは、この乗算器１の乗算結果が書込回路６２を介して書込まれる。
【００４９】
上述のように、ｆｉｒ命令においても、各データレジスタは予め定められた演算のためにのみ利用される。
【００５０】
行先レジスタＤＥＲは、Ｂレジスタに格納されたデータを書込むレジスタを特定する行先情報を格納し、Ｆレジスタは加算シフト複合演算器２の出力データを格納するレジスタを特定する行先情報を格納する。
【００５１】
このｆｉｒ命令においても、各レジスタには初期値および読出専用の定数を置くことができる。各レジスタ（データレジスタ）に対しては単一代入／単一読出のルールに従ったデータの書込および読出が行なわれる（読出専用の定数を除く）。
【００５２】
ＥレジスタおよびＦレジスタに格納されるデータはプログラム可能である。したがって、このｆｉｒ命令の場合においてもフィルタの構成を容易に変更することができる。
【００５３】
この図４および図５に示すレジスタはレジスタファイルにおける１エントリーを構成する。１エントリーは、１つのｉｉｒ命令またはｆｉｒ命令に対応する。命令により各レジスタと乗算器および加算シフト複合演算器との間の接続が決定される。
【００５４】
図６は、ｉｉｒ命令およびｆｉｒ命令両者を実現するためのレジスタファイルの１エントリーの構成およびレジスタ間の接続を示す図である。図６において、レジスタファイルは図４に示す構成と同様、データレジスタＤＡＲがＡ１レジスタ、Ａ２レジスタ、Ｃレジスタ、Ｂレジスタ、Ｘレジスタ、およびＤレジスタを含む。行先レジスタＤＥＲはＥレジスタおよびＦレジスタを含む。レジスタＡ１，Ａ２，Ｃ，Ｂ，Ｘ，Ｄ，ＥおよびＦは１エントリを構成する。
【００５５】
命令ｆｉｒおよび命令ｉｉｒに従って演算器群４０および５０へ与えられるデータを切換えるためにスイッチ回路７１、７２および７３が設けられる。スイッチ回路７１は、命令ｆｉｒおよびｉｉｒに従ってＡ１レジスタおよびＢレジスタの伝達経路を切換える。すなわち、スイッチ回路７１は、ｆｉｒ命令の場合にはＢレジスタのデータを左出力Ｌへ出力し、Ａ１レジスタの格納データを右出力Ｒへ伝達する。スイッチ回路７１は、ｉｉｒ命令の場合には、Ｂレジスタの格納データを右出力Ｒへ伝達し、Ａ１レジスタの格納データを左出力Ｌへ伝達する。
【００５６】
スイッチ回路７２は、ｆｉｒ命令の場合にはスイッチ回路７１の左出力Ｌから与えられたデータを左出力Ｌへ伝達し、ｉｉｒ命令の場合には与えられたデータを右出力Ｒへ伝達する。スイッチ回路７３はスイッチ回路７２と同様の動作を行ない、ｆｉｒ命令の場合には入力データを左出力Ｌへ伝達し、ｉｉｒ命令の場合には入力データを右出力Ｒへ伝達する。
【００５７】
図６においては、スイッチ回路７２および７３へ行先レジスタＤＥＲに含まれるＥレジスタおよびＦレジスタの格納データが伝達されるように示されている。すなわち、このスイッチ回路７２および７３が行先情報をデコードし、データ伝達線を振分ける機能を備えるように示される（図４および図５に示す書込回路の機能を備える）。これは、スイッチ回路７２および７３は単にデータ伝達経路を切換える機能のみを備え、そのスイッチ回路の出力に図４および図５に示す書込回路６１、および６３が設けられる構成が利用されてもよい。
【００５８】
この図６に示すようにスイッチ回路７１、７２および７３のデータ伝達経路を命令ｉｉｒおよびｆｉｒに従って切換えることにより、同一のレジスタ構成を用いてｆｉｒ命令およびｉｉｒ命令いずれをも実行することができ、ＦＩＲフィルタおよびＩＩＲフィルタいずれをも実現することができ、かつまた両者を組合わせた結合型フィルタをも構成することができる。
【００５９】
［命令ブロック構造］
ｉｉｒ命令およびｆｉｒ命令はデータフロー形式で表現される。以下、この命令の記述および内部構造について説明する。
【００６０】
図７はｉｉｒ命令の記述および内部構造を示す図である。図７（Ａ）において、ｉｉｒ命令は４入力２出力命令である。入力Ａ、Ｂ、ＣおよびＤは、図４に示すレジスタに対応し、また出力ＥおよびＦはレジスタＥおよびＦに対応する。入力データとしては、初期値または定数が含まれてもよい。
【００６１】
図７（Ｂ）において、ｉｉｒ命令は、４つのノード８１、８２、８３および８４を含む。ノード８１は加算ノードであり、ノード８２は乗算を行なうノードである。ノード８３はデータを所定ビットシフトさせるシフト演算を行なうノードであり、ノード８４は与えられたデータ所定時間遅延させる遅延（Ｚ-1）を実行するノードである。
【００６２】
ノード８１は、乗算ノード（Ｘノード）の出力とＢ入力に与えられたデータを加算する。ノード８２は、Ｃ入力とノード８４の出力またはＡ１入力とを乗算する。ノード８３は、ノード８１（加算ノード：＋ノード）の出力をＤ入力に与えられたビット数だけシフトさせる。ノード８４はＡ２入力を所定時間（１Ｔ：Ｔは１サンプリング期間）遅延させる。入力Ａ１およびＡ２はどちらか一方が入力される。同時に入力Ａ１およびＡ２が与えられることは禁止される。ノード８４の出力がＦ出力（Ｆレジスタの行先情報が特定するレジスタ）へ伝達され、ノード８３の出力がＥ出力（Ｅレジスタの行先情報が特定するレジスタ）へ伝達される。
【００６３】
図４に示す構成においては、ノード８４の実行する遅延（Ｚ-1）を実現する演算器は示されていない。これは等価的にデータレジスタＤＡＲにおけるＡ２レジスタからＡ１レジスタへのデータ転送により実現される（図４においてＡ２レジスタからＡ１レジスタへの矢印で示す）。
【００６４】
図８は、ｆｉｒ命令の記述および構造を示す図である。図８（Ａ）において、ｆｉｒ命令は、４入力２出力の命令で表現される。入力Ａ、Ｂ、ＣおよびＤは、図５に示すＡレジスタ、Ｂレジスタ、ＣレジスタおよびＤレジスタに対応し、Ｅ出力およびＦ出力はＥレジスタおよびＦレジスタの格納する行先情報が特定する行先へ結合されることを示す。
【００６５】
図８（Ｂ）において、ｆｉｒ命令は、その内部構造として、乗算（Ｘ）を行なうノード９１と、加算（＋）を行なうノード９２と、所定ビットだけ入力データをシフトさせる操作を行なうノード９３と、ノード９３の出力を所定時間遅延させる遅延操作（Ｚ-1）を行なうノード９４を含む。ノード９１は、入力ＢおよびＣの乗算を行なう。ノード９２は、乗算器９１の出力と入力Ａとの加算を行なう。ノード９３は、加算ノード９２の出力をＤ入力が指定するビット数シフトさせて出力する。ノード９４はノード９３の出力を１サンプリング期間遅延させて出力する。
【００６６】
図７（Ｂ）および８（Ｂ）に示す加算ノード（８１，９２）およびシフト操作ノード（８３および９３）は図２に示すように加算シフト複合演算器として１つの演算器で表現される。
【００６７】
図７および図８に示すｉｉｒ命令およびｆｉｒ命令の内部構造はそれぞれＩＩＲフィルタおよびＦＩＲフィルタの単位構造に対応する。次に一般的なフィルタをこの命令ｉｉｒおよびｆｉｒが示す内部構造へ分解する方法について説明する。
【００６８】
［フィルタのプログラム実施例］
まずデジタルフィルタの構成の基本について説明する。
【００６９】
標本化周期Ｔで標本化された入力系列を｛ｘｎ｝＝ｘ０、ｘ１、ｘ２、…ｘｎ…とし、フィルタの出力系列を｛ｙｎ｝＝ｙ０、ｙ１、ｙ２、…ｙｎ…とする。一般に、このデジタルフィルタにおいては入力系列｛ｘｎ｝と出力系列｛ｙｎ｝とは差分方程式を用いて以下のように関係付けられる。
【００７０】
ｙｎ＝Σａｋ・ｘn-k −Σｂｋ・ｙn-k 
ここで、第１項の総和はｋ＝０〜Ｍに対して行なわれ、第２項の総和はｋ＝１〜Ｎに対して実行される。
【００７１】
すなわち、時刻ｔ＝ｎＴにおけるフィルタの出力ｙｎは、入力ｘn-M からｘn の（Ｍ＋１）個の過去および現在の入力と、出力ｙn-N からｙn-1 までのＮ個の過去のフィードバックされた出力（係数ｂｋが０でない場合）との差分により決定される。
【００７２】
通常この入力系列｛ｘｎ｝および出力系列｛ｙｎ｝はｚ変換される。ｚ変換により、標本値入力系列｛ｘｎ｝は、
Ｘ（ｚ）＝Σｘｎ・ｚ-n
と表現される。総和はｎ＝０から無限大に対して実行される。ｚ-1は単位遅延演算子と呼ばれる。このｚ変換により、出力Ｙ（Ｚ）は、
Ｙ（ｚ）＝Ｈ（ｚ）・Ｘ（ｚ）
と表現される。Ｈ（ｚ）は伝達関数と呼ばれる。上述の式において、係数ｂｋがすべて０の場合には、出力信号ｙｎは、過去の出力信号を用いないで決定される。このフィルタ処理を実現するデジタルフィルタは非巡回型デジタルフィルタと呼ばれ、トランスバーサルフィルタ（遅延素子の各タップ出力の加重和を得る構成）が一般に古くから知られている。
【００７３】
一方、係数ｂｋのうち少なくとも１個０でない係数が存在する場合、すなわち過去の出力が現在の出力に影響を及ぼす場合この構成は巡回型デジタルフィルタと呼ばれる。巡回型フィルタの伝達関数を指数に展開すると、通常はｚ-1の無限級数で表現される。すなわちインパルス入力に対して出力が無限に続く。このためこの巡回型フィルタを無限インパルス応答フィルタ（ＩＩＲフィルタ）と呼ぶ。一方、非巡回型フィルタでは、この伝達関数の級数は有限である。このため非巡回型フィルタは有限インパルス応答フィルタ（ＦＩＲフィルタ）と呼ばれる。
【００７４】
まず、代表的なフィルタの構成について説明し、次にこれを図７に示す命令構造に分解する手順について説明する。まず２次のＩＩＲフィルタを構成する場合について説明する。２次のＩＩＲフィルタは、遅延が２次項まであるフィルタを示す。
【００７５】
図９は２次ＩＩＲフィルタの構成と命令への分解手順を示す図である。図９において、２次ＩＩＲフィルタは、縦列接続された加算器１０１、１０２、１０３、および１０４と、加算器１０４の出力を係数４で除算する除算器１０５を含む。ＩＩＲフィルタはさらに、加算器１０２の出力を１サンプリング周期遅延させる遅延回路１０５と、遅延回路１０５の出力に所定の係数０．６を乗算して加算器１０２へ与える乗算器１０６と、遅延回路１０５の出力に係数０．７を乗算して加算器１０３へ与える乗算器１０７と、遅延回路１０５の出力をさらに１サンプリング期間遅延させる遅延回路１０８と、遅延回路１０８の出力に係数０．５乗算して加算器１０１へ与える乗算器１０９と、遅延回路１０８の出力に係数０．８を乗算して加算器１０４へ与える乗算器１１０を含む。
【００７６】
この図９に示す２次ＩＩＲフィルタを、次に図７に示すｉｉｒ命令に分解する。ｉｉｒ命令は、加算（＋）操作、シフト操作、乗算操作（Ｘ）、および遅延操作を含む。シフト操作により除算を実行することができる。この図９に示す２次ＩＩＲフィルタを加算、シフト、乗算および遅延の単位に分割する。
【００７７】
すなわち、加算器１０１、遅延回路１０８、および乗算器１０９を、第１のｉｉｒ命令で表現する。加算器１０２、遅延回路１０５、および乗算器１０６を、第２のｉｉｒ命令で表現する。加算器１０３および乗算器１０７を第３のｉｉｒ命令で表現する。加算器１０４、除算器１０５および乗算器１１０を第４のｉｉｒ命令で表現する。この第１ないし第４のｉｉｒ命令＃１〜＃４をフローグラフで表わすと図１０に示す記述が得られる。
【００７８】
乗算器１０６、１０７、１０９および１１０の乗算係数はそれぞれの命令におけるＣ入力へ与えられる定数により表現される。
【００７９】
図１０において、ＩＩＲフィルタは、４つの縦列接続されたｉｉｒ命令＃１〜＃４により表現される。第１のｉｉｒ命令＃１は、Ａ入力に、第２のｉｉｒ命令＃２のＦ出力を受け、Ｂ入力に外部からの入力データを受け、Ｃ入力に定数０．５を受け、Ｄ入力に定数０を受ける。第１のｉｉｒ命令＃１のＡ入力には図７に示すＡ２入力が利用される。
【００８０】
第２のｉｉｒ命令＃２は、自身のＦ出力をＡ入力に受け、第１のｉｉｒ命令＃１のＥ出力をそのＢ入力に受け、Ｃ入力に定数０．６を受け、Ｄ入力に定数０を受ける。第２のｉｉｒ命令＃２はそのＡ入力として、Ａ２入力を利用する。
【００８１】
第３のｉｉｒ命令＃３は、そのＡ入力に第２のｉｉｒ命令＃２のＦ出力を受け、Ｂ入力に第２のｉｉｒ命令＃２のＥ出力を受け、そのＣ入力に定数０．７を受け、Ｄ入力に定数０を受ける。第３のｉｉｒ命令＃３は、そのＡ入力としてＡ１入力を利用する。
【００８２】
第４のｉｉｒ命令＃４は、そのＡ入力に、第１のｉｉｒ命令のＦ出力を受け、そのＢ入力に、第３のｉｉｒ命令＃３のＥ出力を受け、そのＣ入力に定数０．８を受け、Ｄ入力に定数２を受ける。第４のｉｉｒ命令＃４のＥ出力からフィルタ処理結果が出力される。
【００８３】
ｉｉｒ命令のＤ入力には、シフト操作におけるシフトビット数を決定するデータが与えられる。このシフト操作によりデータの割算が実現される。図９に示すフィルタ構成においては、除算操作は除算器１０５においてのみ実行されている。この係数４による除算は、２ビット下位方向へデータをシフトさせることにより実現される。したがって、第４のｉｉｒ命令＃４のＤ入力に対して定数２が与えられる。残りのｉｉｒ命令＃１〜＃３に対しては除算操作は実行されないため、それぞれのＤ入力へは定数０が与えられる。
【００８４】
図１１は、図１０に示すフローグラフをテキスト形式で記述したプログラムを示す図である。図１１において右端の番号１〜６はプログラム番号を示し、左端の番号０〜４はレジスタファイルにおける行番号（エントリー番号）を示す。この行番号はデータの行先を示す行の番号と１対１に対応する。次にプログラムの内容について説明する。
【００８５】
（１）  プログラム番号１の「ｉｎｉｔｉａｌ」は初期値の宣言を示す。「１（Ａ２）＝０」は、第１のｉｉｒ命令＃１のＡ２レジスタの格納値、すなわち遅延操作Ｚ-1の入力初期値が０であることを示している。
【００８６】
また「２（Ａ２）＝０」は、第２のｉｉｒ命令＃２のＡ２レジスタの初期値が０であることすなわちその操作（Ｚ-1）の初期値が０であることを示す。
【００８７】
（２）  プログラム２の「ｉｎｐｕｔ」は外部からのデータ入力を示す。「１（Ｂ）」はこの入力データを第１のｉｉｒ命令＃１に対応する第１行のレジスタＢに格納することを示す。
【００８８】
（３）  プログラム番号３の「ｉｉｒ」はｉｉｒ命令を示す。ｉｉｒ（  ，
，０．５，０）はｉｉｒ命令に利用される定数を示す。括弧内の値は、各入力の定数すなわちｉｉｒ（Ａ２，Ｂ，Ｃ，Ｄ）の対応の入力に対する定数を表わす。プログラム番号３のプログラムにおいては以下のことが示される。
【００８９】
Ａ２入力に対しては定数値は設定されない（変数のみ）。Ｂ入力に対しても定数値は設定されない。Ｃ入力に対しては定数０．５が設定される。Ｄ入力に対しては定数０が設定される。定数値が存在しない場合は「，」のみで示す。すなわち、第１のｉｉｒ命令（プログラム番号１）に対しては、乗算係数として０．５が設定され、またシフトビット数としては０が設定されシフト動作が行なわれず、除算が行なわれないことを示す。
【００９０】
「２（Ｂ）！４（Ｈ）」はこのｉｉｒ命令のデータの行先を示し、括弧の前に付された番号が行先行数すなわち、Ｅ出力およびＦ出力の行先を示しており、このＥ出力とＦ出力の行先は！により区別される。プログラム番号３においては以下のことが示される。
【００９１】
２（Ｂ）：Ｅ出力は２行目の第２のｉｉｒ命令のＢ入力へ与えられる。
Ｆ出力は第４行の第４のｉｉｒ命令のＡ１入力へ与えれられる。
【００９２】
（４）  プログラム番号４についてはｉｉｒ命令の各定数はプログラム番号３のｉｉｒ命令のそれらと同様である。データ出力先として複数個存在する。すなわち、Ｅ出力は第２行のＡ２入力へ与えられかつ第３行のｉｉｒ命令のＢ入力へ与えられる。第１ないし第４のｉｉｒ命令はレジスタファイルにおける各行と対応しており、したがって、レジスタファイルの第２行および第３行のＡ２レジスタおよびＢレジスタへこの第２のｉｉｒ命令のＥ出力が伝達されることを示す。
【００９３】
Ｆ出力は第１のｉｉｒ命令のＡ２入力および第３のｉｉｒ命令のＡ１入力へ伝達される。すなわちレジスタファイルにおける第１行および第３行のＡ２レジスタおよびＡ１レジスタへこの第２のｉｉｒ命令のＦ出力が入力される。
【００９４】
（５）  プログラム番号５のｉｉｒ命令についてはその定数およびＥ出力の定義については上で説明したものと同じである。「ａｂｓｏｒｂ」は、行先がないことを示す。すなわち第３のｉｉｒ命令のＦ出力は出力されないことを示す。
【００９５】
（６）  プログラム番号６においてｉｉｒ命令の定義およびＦ出力の行先については上の第３のｉｉｒ命令の場合と同様である。「ｏｕｔｐｕｔ」はこの第４のｉｉｒ命令のＥ出力が出力データとして装置外部へ出力されてフィルタ処理結果を示すデータとして利用されることを示す。
【００９６】
このテキスト形式で記述されたプログラムはレジスタファイルの各行にそれぞれ対応する。すなわち、第１ないし第４のｉｉｒ命令はそれぞれレジスタファイルの第１行ないし第４行のエントリーに対応する。このプログラムに従ってレジスタファイルへのデータの書込および読出が実行される。
【００９７】
［フィルタ装置の具体的動作］
次に具体的な動作を以下の順序で説明する。
【００９８】
（ａ）動作の規則を説明する。（ｂ）レジスタの状態を実行順序に従って示す。（ｃ）実行効率を調べ、無駄なオーバーヘッドが生じていないことを実証する。および（ｄ）複数（４つ）の演算器を持った場合の動作を説明する。
【００９９】
「基本ルール」
（１）Ａ２レジスタ、Ａ１レジスタおよびＢレジスタには初期値が格納される。これらのレジスタＡ２、Ａ１およびＢの格納データは新しく入力されたデータにより更新される。ＣレジスタおよびＤレジスタに格納される定数は更新されない。定数でない場合には新しく与えられる入力データにより更新される。定数でないか否かはｉｉｒ命令により決定される。
【０１００】
（２）  すべてのレジスタの値は１回書込１回読出に限定される。すなわち単一代入単一読出のルールが適用される。ただし定数を除く。
【０１０１】
（３）  レジスタＡ１に格納されたデータと加算シフトを含む演算器の計算結果を複数かつ任意の行へ書込むことができる（プログラム可能である）。この行先はそれぞれＥ出力およびＦ出力としてプログラム（図１１参照）時において各命令に対応してプログラムにより指定される。
【０１０２】
（４）  加算シフト複合演算を除く演算の結果は予め定められたレジスタに書込まれる（Ｘレジスタ）。
【０１０３】
以下に説明する計算の実施例においては第１の演算器群４０は１個の乗算器を含み、第２の演算器群５０は１個の加算シフト複合演算器を含むと想定する。
【０１０４】
「計算のルール」
（１）  演算は、行番号すなわちプログラム番号にかかわらずデータが揃ったものから順次実行される。
【０１０５】
（２）  演算は、加算シフト、次いで乗算の優先順位で実行される。
（３）  同じ演算に対するデータが同時に揃った場合には行番号の逆順にその演算が実行される。すなわち行番号の大きい方の命令に従った演算が先に実行される。
【０１０６】
（４）  Ａ２レジスタからＡ１レジスタへのデータの移動（遅延の表現）およびＦ出力におけるデータのコピー（Ｆレジスタが複数の行先情報を含む場合）は、すべて演算の前に実行される。
【０１０７】
（５）  行先が複数存在する場合には、行先がすべて空いていない状態でない限りその演算は実行されない。すなわち演算は、行先が空いておりかつデータが揃った場合に実行される。以下の説明においては加算シフト複合演算のＥ出力および乗算操作結果のＦ出力による転送の場合にこのルールが適用される。
【０１０８】
（６）  後の演算が前の演算より優先されることはない（演算順序における追越しは生じない）。
【０１０９】
次にこの図９に示す２次ＩＩＲフィルタ処理動作を実行する際のレジスタファイル内のデータの動きについて説明する。
【０１１０】
図１２は、レジスタの初期状態と各レジスタと演算器との関係を示す図である。レジスタの初期状態は図１１に示すプログラムが書込まれ、内部状態が初期設定された状態を示す。この状態において、ＣレジスタおよびＤレジスタにはそれぞれ定数が書込まれる。Ａ１レジスタおよびＣレジスタは乗算器に結合される。ＢレジスタおよびＸレジスタは加算器へ結合され、Ｄレジスタはシフト回路へ結合される。Ａ１レジスタから読出されたデータはＦレジスタに格納された行先情報に従って対応のレジスタへ書込まれる。
【０１１１】
シフト回路すなわち加算シフト複合演算器の出力はＥレジスタに格納された行先情報に従って対応のレジスタに書込まれる。この図１２において左端に示す番号はレジスタファイルにおける行番号を示しかつ図１１に示す各プログラムの行番号と１対１に対応する。１行ないし４行のＥ１レジスタにはデータ１、０、０、および１が初期値として格納されている。この格納データは単なる一例であり、フィルタ処理動作実行時においてはこのＡ１レジスタに初期設定された値は無効データとして処理される。
【０１１２】
図１３は、第１サイクルの動作を示す図である。図１３（Ａ）において、第１行のＢレジスタへデータ“１”が格納される。この入力動作と並行して、第４行のＡ１レジスタのデータ“１”を用いた乗算が行なわれ、その乗算結果がＸレジスタへ格納される。
【０１１３】
すなわち、図１３（Ｂ）に示すようにブロック＃１の加算器の入力にデータ“１”が与えられ、またブロック＃４の加算器の入力にデータ“０．８”が与えられる。
【０１１４】
図１４は、第２サイクルの実行動作時におけるレジスタの内容およびそのときのデジタルフィルタにおけるデータの分布状態を示す図である。図１４（Ａ）において、入力部からは新たにデータは与えられず、入力待ち状態となる。第４行のエントリーにおいては、ＢレジスタとＸレジスタにデータが揃ったため、加算シフト動作が実行される。第４行に対応する命令の結果はＥレジスタの内容で決定されるレジスタに書込まれる。第４のｉｉｒ命令のＥレジスタには「出力」が指定される。したがって、データ“０．２”が外部に出力される。
【０１１５】
一方、第３行のエントリー（命令＃３に対応）においては、Ａ１レジスタのデータ“０”とＣレジスタのデータ０．７との乗算が実行され、その乗算結果が対応のＸレジスタに格納される。
【０１１６】
ここで、図１４（Ａ）においてレジスタにおいて空欄の部分はその格納データが消費されたことを示す。単一代入単一読出のルールに従ってレジスタファイルへのデータの書込および読出が実行されているため、書込まれかつ読出されたデータは再び利用されないからである。以下の説明においても同様とする。
【０１１７】
この図１４（Ａ）に示すデータの状態をデジタルフィルタにおけるデータに対応付けると図１４（Ｂ）に示すようになる。すなわち、ブロック＃４において、加算器において０と０．８とが加算され次いでシフト操作による除算が行なわれ、０．２が出力される。
【０１１８】
ブロック＃３においては、その乗算器において係数０．７と０との乗算が行なわれ、その乗算結果“０”が加算器へ与えられる。乗算操作と加算シフト複合操作は互いに異なる演算器により実行されるため、互いに並列に実行することができる。
【０１１９】
図１５は、第３実行サイクルおけるレジスタの内容およびフィルタにおけるデータの配置を示す図である。図１５（Ａ）に示すように、第３のｉｉｒ命令における加算シフト操作結果が第４行のＤレジスタへ書込まれ、一方第２行のｉｉｒ命令のＡ１レジスタとＣレジスタのデータの乗算が行なわれその乗算結果が第２行のＸレジスタに格納される。
【０１２０】
すなわち図１５（Ｂ）に示すように、ブロック＃２の加算器の入力“０”が確定状態となり、またブロック＃４の加算器の入力、すなわちプログラム＃３の加算器出力が“０”に確定する。
【０１２１】
図１６は、第４実行サイクルにおけるデータレジスタの内容とそのときのデジタルフィルタにおける確定データの分布を示す図である。図１６（Ａ）において、第１行のＡ１レジスタおよびＣレジスタに格納されたデータの乗算が行なわれその乗算結果がＸレジスタに格納される。すなわち、図１６（Ｂ）に示すように、ブロック＃１における乗算器の乗算結果が確定し、ブロック＃１の加算器の入力が確定する。次いで、遅延素子の操作を実現するためにデータのコピーが実行される。
【０１２２】
図１６（Ａ）において、第２行のＢレジスタおよびＸレジスタのデータは確定している。したがって、第１行のＡ１レジスタとＣレジスタの乗算と並行して加算シフト操作を実行できるように思われる。しかしながらこの場合、計算ルールにおいて後からの演算は前の演算よりも優先されないというルールに従って、この第２行のＢレジスタとＸレジスタのデータの加算およびシフト動作は行なわれない。
【０１２３】
図１７は、遅延操作を実現する際のレジスタのデータの動きを示す図である。図１７（Ａ）において、まず第１行のＡ２レジスタのデータ“０”が第１行および第４行のＡ１レジスタへコピーされる。これにより、ブロック＃１に含まれる遅延素子の操作が実現される。
【０１２４】
図１７（Ｂ）において、次いで第２行のＡ２レジスタのデータが第１行のＡ２レジスタと、第２行および第３行のＡ１レジスタへコピーされる。これによりブロック＃２における遅延素子の遅延操作が実現される。デジタルフィルタにおける各乗算器の入力が確定する。
【０１２５】
図１７（Ｃ）において、第２行のＢレジスタおよびＸレジスタのデータに対し加算シフト演算が実行され、この演算結果は第２行のＡ２レジスタおよび第３行のＢレジスタへ格納される。これは、ブロック＃２において加算が行なわれ、その加算結果が遅延素子入力およびブロック＃３の加算器入力へ与えられて確定状態となったことを示す。
【０１２６】
図１８は、図１７に示す動作に続く操作におけるデータレジスタにおけるデータの配置を示す図である。図１８（Ａ）において、第４行のＡ１レジスタおよびＣレジスタのデータの乗算が行なわれ、その乗算結果がＸレジスタに格納される。これはブロック＃４における乗算器の出力が確定した状態に対応する。
【０１２７】
図１８（Ｂ）に示すように、上述のコピー動作、加算およびシフト演算操作、および乗算操作を順次実行すると、最終的にデータとしては、第３行のＢレジスタおよび第４行のＸレジスタのデータが確定した状態となる。すなわち、上述の操作を実行することにより図１８（Ｃ）に示すごとくブロック＃３における加算器の入力およびブロック＃４における乗算器出力が確定した状態となる。この上述のコピー動作は常に遅延操作を実行する場合行なわれる。以下の説明においてはこの図１７（Ａ）ないし図１８（Ａ）に示す操作は省略し、図１８（Ｂ）に示す最終状態のみを示す。
【０１２８】
図１９は、第６実行サイクルにおけるデータのデータレジスタにおける配置およびデジタルフィルタにおける確定データの状態を示す図である。図１９（Ａ）に示すように、第３行のＡ１レジスタおよびＣレジスタの乗算が行なわれその乗算結果が第３行のＸレジスタに書込まれる。この乗算操作と並行して、第４行のＢレジスタおよびＸレジスタを用いた加算シフト演算操作が実行され、その演算結果のデータ“０”が出力データとして出力される。
【０１２９】
図２０は、第７実行サイクル時におけるレジスタファイルにおけるデータの配置およびデジタルフィルタにおける対応のデータの配置状態を示す図である。図２０（Ａ）に示すように、第２行のＡ１レジスタとＣレジスタのデータを用いた乗算が行なわれ、該乗算結果がＸレジスタに格納される。この乗算操作と並行して、第３行のＢレジスタとＸレジスタの加算およびシフト演算操作が実行され、この演算操作結果が第４行のＢレジスタに格納される。
【０１３０】
すなわち、図２０（Ｂ）に示すように、ブロック＃２における加算器の入力すなわち乗算器の出力が確定しかつブロック＃４の加算器の入力すなわちブロック＃３の出力が確定状態となる。
【０１３１】
図２１は第８実行サイクルにおけるデータレジスタにおけるデータの配置およびそのときのデジタルフィルタにおけるデータの配置形態を示す図である。図２１（Ａ）において次の入力データ“２”が第１行のＢレジスタへ格納される。この格納と並行して、第１行のＡ１レジスタとＣレジスタとの乗算が実行され、その乗算結果が第１行のＸレジスタへ書込まれる。また同時に第１行のＢレジスタとＸレジスタのデータに対する加算シフト操作が実行され、その演算操作結果が第２行のＢレジスタへ格納される。すなわち、第１行のデータレジスタに対し乗算操作と加算およびシフト演算操作が行なわれかつ新しい入力データの格納が実行される。
【０１３２】
すなわち、図２１（Ｂ）に示すようにブロック＃１の加算器の出力すなわちブロック＃２の加算器の入力が確定しかつブロック＃１の乗算器の出力が確定する。以降、この新しい入力データ“２”を用いて同様の動作が繰り返される。
【０１３３】
図２２は、第９実行サイクルにおけるデータのデータレジスタにおける配置を示す図である。図２２において、第２行のＢレジスタおよびＸレジスタのデータを用いた加算シフト演算操作が実行され、この結果が第３行のＢレジスタおよび第２行のＡ２レジスタへ格納される。次いで第２行の命令実行前に遅延素子の遅延操作が実行される。すなわち、Ａ２レジスタの格納データのＡ１レジスタへの転送が実行される。具体的には、第１行のＡ１レジスタの内容が第１行および第４行のＡ１レジスタへ転送され、第２行のＡ２レジスタの内容が第１行のＡ２レジスタ、第２行および第３行のＡ１レジスタへ転送される。この転送操作実行後上述の加算シフト複合演算操作が実行される。この加算シフト演算操作と並行して、第４行のＡ１レジスタとＣレジスタの乗算が実行され、その乗算結果が第４行のＸレジスタに格納される。
【０１３４】
図２３は第１０実行サイクルにおけるデータレジスタにおけるデータの配置を示す図である。図２３において、第３行のＡ１レジスタとＣレジスタの格納データの乗算が行なわれその乗算結果が第３行のＸレジスタに格納される。この乗算操作と並行して、第４行のＢレジスタとＸレジスタの格納データに対する加算およびシフト演算操作が実行され、その複合演算操作結果が出力データとして出力される。
【０１３５】
図２４は、第１１実行動作サイクルにおけるデータレジスタにおけるデータの配置を示す図である。図２４において、第２行のＡ１レジスタとＣレジスタの格納データの乗算が行なわれ、該乗算結果が第２行のＸレジスタに格納される。この乗算操作と並行して、第３行のＢレジスタおよびＸレジスタの格納データに対する加算およびシフト演算操作が実行され、その演算結果が第４行のＢレジスタに格納される。
【０１３６】
図２５は第１２実行サイクルにおけるデータレジスタ内のデータの配置を示す図である。図２５において、新たに第１行のＤレジスタに次のデータ“３”が入力される。このデータの入力と並行して、第１行のＡ１レジスタとＣレジスタの格納データに対する乗算が行なわれ、その乗算結果が第１行のＸレジスタに格納される。またこの入力および乗算操作と並行して、第１行のＢレジスタおよびＸレジスタに格納されたデータに対する加算およびシフト複合演算操作が実行され、その演算結果が第２行のＢレジスタへ格納される。このとき、第１のｉｉｒ命令における「４（Ａ１）」の操作は、先の図２２に示すコピー動作により実行されている。
【０１３７】
図２６は第１３実行サイクルにおけるデータレジスタにおけるデータの配置を示す図である。第１２実行サイクルにおいて第１ないし第４行のＡ１レジスタのデータはすべて消費されている。このため、Ａ２レジスタからＡ１レジスタの内容へのデータ転送（コピー動作）が実行される。これにより遅延素子による遅延操作が実現される。コピー操作後、第４行のデータ（“０”）と第４行のＣレジスタとの乗算が行なわれその乗算結果が第４行のＸレジスタへ格納される。この乗算操作と並行して、第２行のＢレジスタおよびＸレジスタの格納データによる加算およびシフト演算操作が実行され、その演算操作結果は第３行のＢレジスタおよび第２行のＡ２レジスタへ格納される。
【０１３８】
図２７は、第１４実行サイクル完了後のデータレジスタにおけるデータの配置を示す図である。第４行のＢレジスタおよびＸレジスタの格納データに対し加算およびシフト演算操作が実行され、その演算操作結果が出力データとして出力される。この加算シフト演算操作と並行して、第３行のＡ１レジスタおよびＣレジスタの格納データを利用した乗算が実行され、該乗算結果がＸレジスタへ格納される。
【０１３９】
図２８（Ａ）は第１５実行サイクル完了後のデータレジスタにおけるデータの配置を示す図である。図２８（Ａ）において、第２行のＡ１レジスタとＣレジスタの格納データによる乗算が行なわれ、この乗算結果が第２行のＸレジスタへ格納される。この乗算操作と並行して、第３行のＢレジスタおよびＸレジスタの格納データによる加算およびシフト演算操作が実行され、その演算操作結果が第４行のＢレジスタへ格納される。この加算およびシフト演算操作と並行して、第２行のＡ１レジスタとＣレジスタの格納データによる乗算が行なわれ、該乗算結果が第２行のＸレジスタに格納される。
【０１４０】
図２８（Ｂ）は、第１６実行サイクル完了時におけるデータレジスタ内のデータの配置を示す図である。図２８（Ｂ）において、まず第１行のＢレジスタおよびＸレジスタの格納データを用いて加算およびシフト演算操作が実行されその演算操作結果が第２行のＢレジスタへ書込まれる。次いで第１行のＡ１レジスタおよびＣレジスタの格納データによる乗算が実行されその乗算結果が第１行のＸレジスタ内へ格納される。このＸレジスタ内へのデータ格納と並行またはその完了後に新しい入力データ“４”が第１行のＢレジスタへ格納される。
【０１４１】
以降、上述の動作が繰り返し実行される。すなわち、第１行のＡ１レジスタの格納データが２回消費された（読出される）ときに第１行のＢレジスタへ新しい入力データが格納される。第１行ないし第４行のＡ１レジスタのデータがすべて一度消費された場合、Ａ２レジスタからのデータのコピーが実行される。
【０１４２】
上述の動作において、各エントリー（行）において所望のデータが揃ったときに演算が実行される。この演算データが揃ったか否かの判別は、各データレジスタに対する書込制御回路が書込を行なったことを検出することにより行なわれる。必要な２つのデータレジスタへの書込が行なわれたときにデータの読出が行なわれ所望の演算が実行される。複数の行において同一演算に対して同時にデータが確定した場合には優先順位（行番号の大きい方）に従って演算が実行される。
【０１４３】
このための構成としては以下の構成が考えられる。各レジスタに対応して書込／読出制御回路を設け、この書込／読出制御回路の制御の下に演算器へのデータの伝送および所望データの揃ったことの検出を行なう。どのレジスタへデータを書込むかはＥレジスタおよびＦレジスタにプログラムされたデータにより決定される。したがってこのプログラムされたデータに従って、書込制御回路が対応のデータレジスタへのデータの書込を実行する。この場合においても、各レジスタに対応して読出制御回路が設けられ、この読出制御回路がＥレジスタからの行先情報が自己に割当てられたアドレス（レジスタ位置指定情報）と一致した場合に与えられたデータを書込む。この場合、読出制御回路はデータ読出時において対応のＥレジスタまたはＦレジスタの内容を読出す構成となる。すなわち、ｉｉｒ命令実行時においては、Ａ１レジスタとＣレジスタの内容を読出す場合にはＥレジスタの内容も同時に読出され、ＢレジスタとＸレジスタの内容を読出す場合にはＦレジスタの内容が同時に読出される。乗算結果の格納は、固定的に定められており、乗算のために選択されたエントリーを指定する情報と同じエントリーのＸレジスタが書込可能状態とされデータが書込まれる。
【０１４４】
上述の動作および計算ルール等は、図３に示すシーケンスコントローラＳＣおよび読出／書込制御部ＲＷＣにより実現される。
【０１４５】
図２９は、上述の実行サイクル２ないし実行サイクル１６における各演算器の稼動状況を示す図である。図２９において、○は稼動状態を示し、空白状態はデータ待ち状態すなわち演算器のアイドル状態を示す。
【０１４６】
図２９から明らかなように、サイクル５ないし１６において、乗算器および加算シフト複合演算器はすべて稼働状態となっており初期動作時を除く安定状態時においては演算器が１００％動作するフル稼動状態が得られている。すなわち、各動作サイクルにおいて演算器が駆動されており命令実行待ちによるオーバーヘッドは生じず、高速でフィルタ処理を実行することが可能となる。
【０１４７】
上述のフィルタ処理は乗算器１つおよび加算およびシフト複合演算器１つを用いてフィルタ処理を実現している。次に４つの演算器、すなわち４つの乗算器および４つの加算シフト複合演算器を用いてフィルタ処理を行なう場合の動作について説明する。
【０１４８】
図３０は４つの演算器によりフィルタ処理する際のデータレジスタにおけるデータの配置を示す図である。図３０（Ａ）において、先の図１３の場合と同様の状態が初期設定される。図３０（Ａ）においては入力データ“１”が第１行のＢレジスタに格納された状態が示される。この状態においては、図３０（Ｂ）に示すようにブロック＃１〜＃４の加算器の入力がそれぞれ初期設定された状態となっており、また乗算器の入力も初期設定された状態となっている。以下の説明においては、演算器の振舞を観察するために、１サイクルの動作を加算シフト複合演算器を示す状態（ａ）と乗算器を示す状態（ｂ）の２つに分割して観察する。
【０１４９】
図３１は、第１の実行サイクルにおけるデータレジスタにおけるデータの配置およびデジタルフィルタにおけるデータの分布状態を示す図である。図３１（Ａ）に示すように、第１の実行サイクルにおいては、第１行ないし第４行のＡ１レジスタとＣレジスタの乗算操作が並列に実行され、その乗算結果が対応のＸレジスタへ格納される。シフトおよび加算演算操作はＸレジスタに確定データが存在していないため実行されない。
【０１５０】
この状態は図３１（Ｂ）に示すように、各ブロック＃１〜＃４の乗算器において並列に乗算が実行されその乗算結果が確定した状態を示す。
【０１５１】
図３２は、第２の実行サイクルにおけるデータレジスタ内のデータの配置およびそのときのデジタルフィルタにおけるデータの状態を示す図である。Ａ１レジスタのデータがすべて消費された状態において、Ａ２レジスタからＡ１レジスタへのコピー動作が実行される。すなわち、図３２（Ａ）に示すように、まず、第１行のＡ２レジスタの格納データが第１行および第４行のＡ１レジスタへ格納される。次いで図３２（Ｂ）に示すように第２行のＡ２レジスタに格納されているデータが第１行のＡ２レジスタ、第２行および第３行のＡ１レジスタへ転送される。このときまた、第１行のＢレジスタおよびＸレジスタの格納データによる加算およびシフト操作が実行される。
【０１５２】
図３３は図３２に示す動作サイクルの次に実行される状態を示す図である。図３３（Ａ）において、コピー動作完了後、第１行ないし第４行のＢレジスタにおよびＸレジスタの内容がそれぞれ対応の加算シフト演算器に転送される。この演算結果は、対応のＥレジスタに格納された行先情報により示されるレジスタに格納される。第１行のＢレジスタおよびＸレジスタの加算およびシフト結果は第２行のＢレジスタへ格納される。第２行のＢレジスタおよびＸレジスタの演算結果は第３行のＢレジスタおよび第２行のＡ２レジスタへ格納される。第３行のＢレジスタおよびＸレジスタの格納データの加算およびシフト演算結果は第４行のＢレジスタへ格納される。第４行のＢレジスタおよびＸレジスタの演算結果は出力データとして出力される。この場合、Ｂレジスタに関しては、それぞれの行番号よりも１つ大きい行番号のＢレジスタへの演算結果の書込が行なわれる。第２行に対する演算結果に対してのみ第２行のＡ２レジスタへもデータが書込まれる。
【０１５３】
このときまた第１行のＢレジスタへ次の入力データ（“２”）が書込まれる。
この状態により図３３（Ｂ）に示すように各ブロック＃１〜＃４の加算器の入力が確定状態となりかつ第２行のＡ２レジスタの内容が確定状態となる。
【０１５４】
図３４はこの加算およびシフト演算操作完了後のデータレジスタ内のデータの配置を示す図である。図３４（Ａ）に示すようにＡ１レジスタの格納データとＢレジスタの格納データとの乗算が行なわれ、その乗算結果がＸレジスタへ格納される。これにより図３４（Ｂ）に示すように各ブロック＃１、＃２、＃３、および＃４の乗算器の出力がすべて“０”の確定状態となる。ここで、演算は、加算およびシフト演算が乗算よりも先に行なわれる計算ルールが適用されていることを想起されたい。
【０１５５】
図３５は第３実行サイクル状態完了時のデータレジスタ内のデータの配置およびデジタルフィルタ内のデータの状態を示す図である。図３５（Ａ）は加算およびシフト演算操作実行完了時のデータレジスタ内のデータの配置を示し、図３５（Ｂ）は乗算操作完了後のデータレジスタ内のデータの配置を示す。図３５（Ａ）には、Ａ２レジスタからＡ１レジスタへの図３２に示すコピー動作および加算およびシフト演算操作完了後の状態が示される。この状態においてはまた新たに第１行のＢレジスタへ入力データ“３”が書込まれる。ＢレジスタとＸレジスタのデータを用いて加算およびシフト演算操作が実行され、出力データが出力される。
【０１５６】
図３５（Ｂ）においては、Ａ１レジスタの格納データとＣレジスタの格納データとの乗算が実行されその乗算結果がＸレジスタに格納される。
【０１５７】
上述の動作を実行することにより、図３５（Ｃ）に示すように出力データ“０”が得られ、各ブロック＃１〜＃４の加算器の入力も確定状態となる。続いて、図３６に示すように、Ｂレジスタ（第１行）へデータ“４”が書込まれ、各行のＢレジスタの内容が行番号の大きい方へ１行シフトされ、かつデータ“０”が出力される。図３６（Ａ）においても、ＢレジスタおよびＸレジスタのデータによる加算およびシフト演算操作が実行されかつＡ２レジスタからＡ１レジスタへのデータのコピー動作も実行されている。コピー動作完了後に加算およびシフト演算操作が実行される。この図３６（Ａ）の状態完了後図３６（Ｂ）に示すＡ１レジスタの内容とＣレジスタの内容の乗算が実行される。この乗算結果が各Ｘレジスタに格納される。以降この動作を繰り返す。
【０１５８】
上述の乗算を並列に実行する構成の場合、各レジスタからは並列にデータが読出されかつ並列にデータが書込まれる。この場合、その各レジスタにおいて先のデータの書込完了後にデータの読出が行なわれ、データの読出は有効データの書込完了後でないと実行されない。
【０１５９】
図３７はこの４つの演算器すなわち４つの乗算と４つの加算およびシフト複合演算器を用いた場合の各演算器の稼動状態を示す図である。図３７において、乗算はＸで示し、加算およびシフト演算操作は「＋ｓｈｉｆｔ」で示す。それぞれにおいて、○は演算器が稼動状態にある状態を示し、空白部分は非稼動状態すなわちデータ入力待合わせ状態を示す。図３７から明らかなように、実行サイクル２ないし４においては、演算器がすべて稼動状態となっており、高速でフィルタ処理することがわかる。
【０１６０】
［４次ＦＩＲフィルタのプログラム実施例］
次に、代表的なフィルタ構成例として４次のＦＩＲフィルタについて考察する。
【０１６１】
図３８は４次のＦＩＲデジタルフィルタの構成を示す図である。図３８に示す４次ＦＩＲデジタルフィルタは、転置型トランスバーサルフィルタとも呼ばれる。図３８において、ＦＩＲフィルタは、入力データと所定の乗算係数とを乗算する乗算器２０１、２０２、２０３および２０４と、加算器２０５、２０６、２０７および２０８と、遅延器２０９、２１０および２１１と除算器２１２を含む。乗算器２０１〜２０４は互いに並列に配置される。加算器と遅延器とは交互に配置される。
【０１６２】
加算器２０５は乗算器２０１の出力とデータ０とを加算する。遅延器２０９は加算器２０５の出力を所定期間（１サンプル周期）遅延する。加算器２０６は、乗算器２０２の出力と遅延器２０９の出力を加算する。遅延器２１０は、加算器２１６の出力を所定期間（１サンプル周期）遅延する。加算器２０７は遅延器２１０の出力と乗算器２０３の出力を加算する。遅延器２０１は加算器２０７の出力を所定期間遅延する。加算器２０８は乗算器２０４の出力と遅延器２１１の出力とを加算する。除算器２１２は加算器２０８の出力を係数４で除算し出力データを生成する。
【０１６３】
図３８に示すＦＩＲフィルタでは複数個の同一構成が縦続接続される。このＦＩＲフィルタをｆｉｒ命令に従ってブロックに分割する。ｆｉｒ命令は、４入力２出力命令であるが、その内部構造として乗算操作、加算操作、シフト操作および遅延操作を含む。したがってこの図３８に示すＦＩＲフィルタを乗算器、加算器および遅延素子を含む１つのブロックを単位として分割する。ＦＩＲデジタルフィルタはブロック＃１〜＃４に分割され、各ブロック＃１〜＃４がそれぞれｆｉｒ命令で表現される。
【０１６４】
図３９はこのデジタルフィルタをｆｉｒ命令で記述した場合のフローグラフを示す図である。図３９において、第１のｆｉｒ命令＃１は、Ａ入力に定数０を受け、Ｂ入力に入力データを受け、Ｃ入力に定数０．１を受け、Ｄ入力に定数０を受ける。第２のｆｉｒ命令＃２は、Ａ入力に第１のｆｉｒ命令＃１のＦ出力を受け、Ｂ入力に入力データを受け、Ｃ入力に定数０．２を受け、Ｄ入力に定数０を受ける。第３のｆｉｒ命令＃３は、Ａ入力に第２のｆｉｒ命令＃１のＦ出力を受け、Ｂ入力に入力データを受け、Ｃ入力に定数０．３を受け、Ｄ入力に定数０を受ける。第４のｆｉｒ命令＃４は、Ａ入力に第３のｆｉｒ命令＃３のＦ出力を受け、Ｂ入力に入力データを受け、Ｃ入力に定数０．４を受け、Ｄ入力に定数２を受ける。第４のｆｉｒ命令＃４のＦ出力からデータ処理後の出力データが出力される。
【０１６５】
図４０は図３９に示すフローグラフをテキスト形式で記述したプログラムを示す図である。以下図４０を参照してこのプログラムについて説明する。
【０１６６】
図４０において左端の番号は行番号を示し、レジスタファイルにおけるエントリーの行に１対１に対応する。図４０のプログラムの右端の番号はプログラム番号を示す。
【０１６７】
プログラム１：
プログラム１の「ｉｎｉｔｉａｌ」は初期値の宣言を示す。「２（Ａ）＝０」は第２行のレジスタＡの格納データを“０”に初期設定することを示す。すなわち第２のｆｉｒ命令＃２のＡ入力、すなわち加算器の入力初期値が“０”であることを示す。同様に「３（Ａ）＝４（Ａ）＝０」は第３および第４のｆｉｒ命令＃３および＃４のＡ入力、すなわちその加算器の入力値が“０”に初期設定されることを示す。
【０１６８】
プログラム２：
「ｉｎｐｕｔ」は外部からのデータの入力を示す。「１（Ｂ），２（Ｂ），３（Ｂ），４（Ｂ）」は、この入力データが、第１ないし第４のｆｉｒ命令のＢ入力へ与えられることを示す。すなわち、レジスタファイルにおいて第１ないし第４行のＢレジスタに外部からの入力データが格納されることを示す。
【０１６９】
プログラム３：
「ｆｉｒ」はｆｉｒ命令を示す。「ｆｉｒ（０，  ，０．１，０）」はこのｆｉｒ命令における定数を示す。括弧内の値は入力の定数、すなわちｆｉｒ（Ａ，Ｂ，Ｃ，Ｄ）における入力Ａ、Ｂ、ＣおよびＤのそれぞれの定数を表わす。このプログラム番号３のｆｉｒ命令においては、Ａの定数値が０、Ｂへは定数値でなく変数が与えられ、Ｃ入力の定数値が０．５に設定され、Ｄの定数値が０に設定される。レジスタファイルにおいては、定数は変更されない。複数回読出が可能である。Ｂ入力には入力データが与えられ、このデータを格納するレジスタＢにおいては単一代入単一読出のルールが適用される。
【０１７０】
「ａｂｓｏｒｂ！２（Ａ）」はＥ出力およびＦ出力の行先を示す。この場合、「ａｂｓｏｒｂ」はＥ出力はどの命令へも伝達されないことを示し、Ｆ出力が第２のｆｉｒ命令のＡ入力へ与えられることを示す。すなわちレジスタファイルにおいて第２行のＡレジスタへ格納されることを示す。Ｅ出力とＦ出力とは「！」で区別される。
【０１７１】
プログラム４、５：
命令ｆｉｒの定数の定義は上で示したプログラム３のそれと同じであり、その行先についてもプログラム３の場合と同じである。すなわち、第２のｆｉｒ命令のＦ出力は第３のｆｉｒ命令のＡ入力へ与えられ、第３のｆｉｒ命令のＦ出力は第４のｆｉｒ命令のＡ入力へ与えられる。
【０１７２】
プログラム６：
ｆｉｒ命令の定数については上と同じである。出力における「ｏｕｔｐｕｔ」はこの第４のｆｉｒ命令のＦ出力が装置外部へ出力され、出力データとして利用されることを示す。
【０１７３】
［ＦＩＲフィルタ操作の具体的動作］
ＦＩＲフィルタ処理の場合においても以下のルールが適用される。
【０１７４】
［基本ルール］
第１行のエントリーのＡレジスタには定数が格納される。第２行ないし第４行のＡレジスタの値は初期値であり、新たに与えられるデータにより更新される。また第１ないし第４行のＣレジスタおよびＤレジスタの格納値は定数であるため、これらのデータは更新されない。
【０１７５】
定数以外のデータには、すべてのレジスタにおいて１回書込／１回読出すなわち単一代入単一読出のルールが適用される。
【０１７６】
Ｅレジスタに格納される行先情報およびＦレジスタに格納される行先情報により、複数かつ任意の行先レジスタを指定することができる（プログラム可能である）。このＦＩＲフィルタ処理においてはＢレジスタの格納データはＥレジスタの行先情報により指定された行先へ伝達されるが、この場合「ａｂｓｏｒｂ」であるため出力されない。シフト操作結果は、Ｆレジスタに格納された行先情報が特定するレジスタへ伝達される。
【０１７７】
乗算を行なう演算器が１つ、および加算およびシフトを含む演算器が１つ存在する。
【０１７８】
［計算ルール］
ｉｉｒ命令の場合と同様である。すなわち、
（１）  演算は行番号にかかわらず必要データが揃ったものから順次実行される。
【０１７９】
（２）  演算は加算およびシフトが乗算よりも優先的に実行される。
（３）  同一の演算に対しデータが同時に揃った場合には、行番号の逆順、すなわち大きい行番号の命令に対する操作が実行される。
【０１８０】
（４）  加算およびシフト複合演算においてＦレジスタが複数の行先を指定する場合、行先のレジスタがすべて空状態でない限りその演算は実行されない。
【０１８１】
（５）  後からの演算が前の演算より優先されることはない（演算の追越しは生じない）。
【０１８２】
次に具体的動作について説明する。
（０）  初期設定
図４１はレジスタファイルにおける各レジスタの初期状態と演算器との接続関係およびそのときのＦＩＲデジタルフィルタにおけるデータの配置を示す図である。
【０１８３】
図４１（Ａ）において、初期状態においては、第１行ないし第４行のＣレジスタには乗算係数が定数データとして格納され、また第１行ないし第４行のＤレジスタにはシフト操作におけるシフトビット数を示すためのデータが定数データとして格納される。
【０１８４】
ＦＩＲフィルタ処理においては、Ｂレジスタの格納データとＣレジスタの格納データとが乗算器へ与えられ、乗算操作を受ける。ＡレジスタとＸレジスタのデータが加算操作を受け、次いでシフト操作を受ける。乗算操作の結果はＸレジスタへ格納される。加算およびシフト操作の演算結果はＦレジスタに格納された行先情報が特定するレジスタへ書込まれる。
【０１８５】
図４１（Ｂ）に示すように、初期状態においては、乗算器における乗算係数（フィルタ係数）が設定されかつブロック＃４における除算器の除算係数が初期設定される。係数４で除算をするため、シフト操作により２ビット下位ビット方向へデータがシフトされる。
【０１８６】
Ａレジスタに格納されたデータはそれぞれ加算器の一方入力のデータを与える。ブロック＃１における加算器の一方入力は定数“０”に固定される。
【０１８７】
（１）  実行サイクル１
図４２は実行サイクル１における各レジスタのデータの配置およびそのときのデジタルフィルタにおけるデータの配置を示す図である。この実行サイクル１（実行状態１）においては、外部から入力データ“１”が与えられ、第１行ないし第４行のＢレジスタにこの入力データが格納される。この状態においては、図４２（Ｂ）に示すように、乗算器の入力が確定した状態となる。
【０１８８】
（２）  実行サイクル２
図４３は実行サイクル２（実行状態２）のレジスタファイルにおける各レジスタのデータの配置およびそのときのレジスタフィルタのデータの分布を示す図である。
【０１８９】
この実行サイクル２においてはまず第４行のＢレジスタの格納データとＣレジスタの格納データの乗算が実行される。乗算に必要なデータが揃いかつ一番行番号の大きい行に対する乗算が実行される計算ルールに従っている。この乗算結果は第４行のＸレジスタに格納される。すなわち、図４３（Ｂ）に示すように、ブロック＃４において乗算器の出力が確定状態となる。
【０１９０】
（３）  実行サイクル３
図４４は実行サイクル３（実行状態３）におけるレジスタのデータの配置およびそのときのフィルタにおけるデータの分布を示す図である。実行サイクル３においては、まず第４行のエントリーにおいて、ＡレジスタおよびＸレジスタのデータが揃ったためこれらのデータを用いて加算およびシフト演算操作が実行される。この加算およびシフト演算操作により出力データが生成される。この加算およびシフト演算操作と平行して、第３行のＢレジスタの格納データとＣレジスタの格納データとの乗算が実行され、その乗算結果が第３行のＸレジスタに格納される。すなわち、図４４（Ｂ）に示すように、ブロック＃４において、加算および除算が実行され、出力データ“０．１”が生成される。これと並行して、ブロック＃３において、乗算が実行され、その乗算結果“０．３”がＸレジスタに格納される。
【０１９１】
（４）  実行サイクル４
図４５は実行サイクル４（実行状態４）におけるレジスタファイルのデータの格納状態およびデジタルフィルタのデータの分布を示す図である。図４５（Ａ）に示すように、第２行のＢレジスタの格納データとＣレジスタの格納データとの乗算が実行され、その乗算結果が第２行のＸレジスタに格納される。この乗算操作と並行して、第３行のＡレジスタおよびＸレジスタのデータを用いて加算およびシフト演算操作が実行され、その演算結果が第４行のＡレジスタに格納される。
【０１９２】
すなわち、図４５（Ｂ）に示すように、ブロック＃３における加算および遅延が実行される。
【０１９３】
ｉｉｒ命令の場合、遅延操作はレジスタ間のデータ転送により実現される。このｆｉｒ命令においては、遅延操作は、前段のブロックの加算およびシフト操作が１サイクル遅れて実行されているため、等価的に表現されていることになる。
【０１９４】
同様に、ブロック＃２において、乗算が実行されており、その乗算器の出力が確定状態となる。
【０１９５】
（５）  実行サイクル５
図４６は実行サイクル５（実行状態５）の完了後のレジスタファイルにおける各レジスタの格納データおよびそのときのデジタルフィルタのデータの分布を示す図である。
【０１９６】
図４６（Ａ）に示すように、まず第１行のＢレジスタとＡレジスタ、Ｃレジスタの格納データを用いて乗算が実行され、その乗算結果が第１行のＸレジスタに格納される。この乗算と並行して、第２行のＡレジスタとＸレジスタの格納データを用いた加算およびシフト演算操作が実行され、その演算操作結果が第３行のＡレジスタに格納される。
【０１９７】
この乗算および加算・シフト演算操作と並行して、第１行ないし第４行のＢレジスタに新たな入力データ“２”が格納される。
【０１９８】
すなわち図４６（Ｂ）に示すように、ブロック＃１において乗算器の出力が確定し、またブロック＃２において、その遅延素子の出力が確定状態となり、かつさらにブロック＃１〜＃４の乗算器の入力が確定状態となる。
【０１９９】
（６）  実行サイクル６
図４７は実行サイクル６（実行状態６）における各レジスタ格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。図４７（Ａ）に示すように、第４行のＢレジスタとＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第４行のＸレジスタに格納される。この乗算操作と並行して、第１行のＡレジスタとＸレジスタの格納データを用いて加算およびシフト演算操作が実行され、その演算結果が第２行のＡレジスタに格納される。
【０２００】
すなわち、図４７（Ｂ）に示すように、ブロック＃１の遅延素子の出力が新たに確定状態となり、またブロック＃４において、乗算器の出力が確定状態となる。
【０２０１】
（７）  実行サイクル７
図４８は実行サイクル７における各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。図４８（Ａ）に示すように、第４行のＡレジスタとＸレジスタの格納データを用いて加算およびシフト演算が実行され、その演算結果が出力データとして出力される。
【０２０２】
この加算およびシフト演算操作と並行して、第３行のＢレジスタとＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第３行のＸレジスタに格納される。
【０２０３】
すなわち、図４８（Ｂ）に示すように、ブロック＃３において乗算器の出力が確定し、またブロック＃４において加算および除算が実行され出力データが生成される。
【０２０４】
（８）  実行サイクル８
図４９は実行サイクル８（実行状態８）のレジスタファイルの各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。
【０２０５】
図４９（Ａ）に示すように、第３行のＡレジスタおよびＸレジスタの格納データ用いて加算およびシフト演算操作が実行され、その演算結果が第４行のＡレジスタに格納される。この加算およびシフト演算操作と並行して、第２行のＢレジスタおよびＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第２行のＸレジスタに格納される。
【０２０６】
すなわち図４９（Ｂ）に示すように、ブロック＃２において乗算器の出力データが確定し、またブロック＃３において、遅延素子の出力データが確定する。
【０２０７】
（９）  実行サイクル９
図５０は実行サイクル９（実行状態９）の各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。図５０（Ａ）に示すように、第１行のＢレジスタおよびＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第１行のＸレジスタに格納される。また、第２行のＡレジスタとＸレジスタの格納データを用いて加算およびシフト演算が実行され、その演算結果が第３行のＡレジスタに格納される。これらの演算と並行して、第１行ないし第４行のＢレジスタに次の入力データが格納される。
【０２０８】
すなわち、図５０（Ｂ）に示すように、ブロック＃１において乗算器のデータが確定し、ブロック＃２の遅延素子の出力データが確定し、またブロック＃１〜＃４の乗算器の入力が確定状態となる。
【０２０９】
（１０）  実行サイクル１０
図５１は実行サイクル１０（実行状態１０）のレジスタの格納データおよびそのときのデジタルフィルタのデータの分布を示す図である。図５１（Ａ）に示すように、まず第４行のＢレジスタおよびＣレジスタの格納データを用いた乗算が実行され、その乗算結果が第４行のＸレジスタに格納される。
【０２１０】
また第１行のＡレジスタおよびＸレジスタの格納データを用いて加算およびシフト演算が実行され、その演算結果が第２行のＡレジスタに格納される。
【０２１１】
すなわち図５１（Ｂ）に示すように、ブロック＃１の遅延素子の出力データが確定状態となり、またブロック＃４の乗算器の出力データが確定状態となる。
【０２１２】
（１１）  実行サイクル１１
図５２は実行サイクル１１（実行状態１１）の各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。図５２（Ａ）に示すように、まず第４行のＡレジスタおよびＸレジスタの格納データを用いて加算およびシフト演算が実行され、その演算結果が出力データとして出力される。この加算およびシフト演算と並行して、第３行のＢレジスタとＣレジスタの格納データを用いた乗算が実行され、その乗算結果が第３行のＸレジスタに格納される。
【０２１３】
すなわち、ブロック＃３における乗算器の出力データが確定状態となり、またブロック＃４から出力データが出力される。
【０２１４】
（１２）  実行サイクル１２
図５３は実行サイクル１２（実行状態１２）におけるレジスタの格納データおよびデジタルフィルタにおけるデータの分布を示す図である。図５３（Ａ）に示すように、まず第２行のＢレジスタおよびＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第２行のＸレジスタに格納される。この乗算操作と並行して、第３行のＡレジスタおよびＸレジスタを用いて加算およびシフト操作が実行され、その演算結果が第４行のＡレジスタに格納される。
【０２１５】
すなわち図５３（Ｂ）に示すように、ブロック＃２における乗算器の出力が確定し、またブロック＃３の遅延素子の出力が確定状態となる。
【０２１６】
（１３）  実行サイクル１３
図５４は実行サイクル１３（実行状態１３）における各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。図５４（Ａ）において、第１行のＢレジスタおよびＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第１行のＸレジスタに格納される。この乗算と並行して、第２行のＡレジスタおよびＸレジスタの格納データを用いて加算およびシフト演算が実行され、その演算結果が第３行のＡレジスタに格納される。これらの演算と並行して、第１行ないし第４行のＢ入力に新たな入力データが格納される。
【０２１７】
すなわち図５４（Ｂ）に示すようにブロック＃１〜＃４の乗算器の入力が確定状態となり、またブロック＃１の乗算器の出力が確定し、またブロック＃２の遅延素子の出力が確定状態となる。
【０２１８】
（１４）  実行サイクル１４
図５５は、実行サイクル１４（実行状態１４）におけるレジスタの格納データおよびそのときのデジタルフィルタのデータの分布を示す図である。図５５（Ａ）において、第４行のＢレジスタおよびＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第４行のＸレジスタに格納される。この乗算と並行して、第１行のＡレジスタおよびＸレジスタの格納データを用いて加算およびシフト演算が実行され、その演算結果が第２行のＡレジスタに格納される。
【０２１９】
すなわち図５５（Ｂ）に示すように、ブロック＃１の遅延素子の出力が確定状態となり、またブロック＃４の乗算器の出力が確定状態となる。
【０２２０】
（１５）  実行サイクル１５
図５６は実行サイクル１５（実行状態１５）におけるレジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。図５６（Ａ）において、まず第４行のＡレジスタおよびＸレジスタの格納データを用いて加算およびシフト演算が実行され、その演算結果は出力データとして出力される。この加算およびシフト演算と並行して、第３行のＢレジスタとＣレジスタの格納データを用いて乗算が実行され、その乗算結果が第３行のＸレジスタに格納される。
【０２２１】
すなわち図５６（Ｂ）に示すように、ブロック＃４から出力データが生成されて出力され、かつブロック＃３において乗算器の出力が確定状態となる。
【０２２２】
上述のように、１つの乗算器と１つの加算およびシフト演算器を用いる構成においては、行番号の大きいエントリーのデータを用いてまず乗算が実行され、次いで加算およびシフト演算が実行される。この操作を、加算およびシフト演算操作を乗算操作と並行に実行し、Ｂレジスタに格納されるデータがすべて消費されるまで順次実行する。これにより、ＦＩＲフィルタ処理を高速で実行することができる。
【０２２３】
図５７は前述のサイクル２ないし１６における各演算器の稼動状況を示す図である。図５７において○印は稼動状態を示し、空白はデータ待ち状態を示す。図５７に示されるように、第４サイクルないし第１６サイクルにおいて乗算器（Ｘ）および加算およびシフト複合演算器（＋ｓｈｉｆｔ）はすべて稼動状態にあり、初期動作時を除く安定時においては演算器は１００％のフル稼動状態となっており、命令実行のオーバーヘッドなく高速でフィルタ処理が行なわれているのが見られる。
【０２２４】
上述の説明においては、１個の乗算器および１個の加算シフト演算器が利用されている。この場合４個の乗算器および４個の加算シフト演算器を用いてフィルタ処理を実行することができる。以下この場合の構成について説明する。
【０２２５】
（０）  初期状態
図５８は、４個の乗算器と、４個の加算およびシフト演算器を用いた場合の各レジスタの初期状態を示す図である。初期状態においては、第１行ないし第４行のＢレジスタに入力データが格納される。またこのとき、ＣレジスタおよびＤレジスタにおいて乗算係数およびシフト係数が定数データとして初期設定される。さらに、Ａレジスタにおいては、その初期値が設定される。
【０２２６】
（１）  実行サイクル１
図５９は実行サイクル１におけるレジスタの各格納データとそのときのデジタルフィルタにおけるデータの分布を示す図である。実行サイクル１（実行状態１）においては、加算およびシフト演算動作は実行されない。乗算動作のみが実行される。すなわち図５９（Ａ）に示すように、第１行ないし第４行のＢレジスタとＣレジスタの格納データの乗算が行なわれ、各乗算結果が対応のＸレジスタに格納される。
【０２２７】
図５９（Ｂ）に示すように、ブロック＃１〜＃４各々において乗算が並列に実行され、各乗算器の出力データが確定状態となる。
【０２２８】
（２）  実行サイクル２
図６０は実行サイクル２におけるレジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。図６０（Ａ）において、第１ないし第４行のＡレジスタおよびＸレジスタの格納データを用いて加算およびシフト演算が実行される。このとき、演算結果は次のエントリー（次の行）のＡレジスタに格納される。第４行のＡレジスタおよびＣレジスタのデータの演算結果は出力データとして出力される。
【０２２９】
すなわち図６０（Ｂ）に示すように、各ブロック＃１〜＃４各々において、遅延素子の出力データが確定状態となるとともに、ブロック＃４においては、除算器の出力が確定状態となり、出力データが生成される。
【０２３０】
この第２サイクルにおいてはＢレジスタには有効データは存在しないため、乗算は実行されない。すなわち、複数個の乗算器と複数個の加算およびシフト演算器を利用する場合には、乗算が行なわれ、次いで加算およびシフト演算が実行される。この動作が繰り返し新しい入力データに対して実行される。
【０２３１】
この第２サイクルにおいて、加算およびシフト演算と並行して、Ｂレジスタへのデータの格納および乗算が並行に実行される。すなわち、第１サイクルにおいて、乗算が行なわれると次いで第１行ないし第４行のＢレジスタにデータが入力される。したがって、この場合、第２サイクル以降において、乗算器と加算シフト演算器は常時稼動状態となり、演算器が入力データ待合わせ状態となることはなく、高速でフィルタ処理を実行することが可能となる。
【０２３２】
ここで図５９（Ｂ）および図６０（Ｂ）において、括弧で示したデータは、それぞれのサイクルにおいて並行して実行された操作の結果得られるデータを示す。
【０２３３】
レジスタとバス（演算器とレジスタとを結合するバス）との接続はプログラムにより決定される。複数の演算器、すなわち複数の乗算器と複数の加算およびシフト演算器を用いる構成の場合、各行並列に動作するため、各行のレジスタと演算器との接続はプログラムにより一意的に固定される。この場合、同一種類の演算において各行の優先順位を特に判別する必要はない。
【０２３４】
しかしながら、１個の乗算器と１個の加算およびシフト複合演算器を利用する構成の場合、１つの演算（乗算または加算シフト演算）を行なう場合、各行において優先順位を判別する必要がある。この優先順位を判別し、必要なデータが揃った場合にデータを読出す構成について以下に説明する。
【０２３５】
図６１は、レジスタファイルにおける各レジスタの書込／読出制御を行なう構成を示す図である。この図６１は、図３に示す書込／読出制御部の構成をより具体的に示す。
【０２３６】
図６１において、代表的に２種類のレジスタを示す。この２種類のレジスタは同一の演算に使用されるデータを格納する。
【０２３７】
レジスタ＃１１に対し、書込ゲート３１１ａおよび読出ゲート３１２ａが設けられる。レジスタ＃１２に対し書込ゲート３１１ｂおよび読出ゲート３１２ｂが設けられる。
【０２３８】
第２行において、レジスタ＃２１に対し書込ゲート３１１ｃおよび読出ゲート３１２ｃが設けられる。同様にレジスタ＃１２に対し、書込ゲート３１１ｄおよび読出ゲート３１２ｄが設けられる。
【０２３９】
第３行において、レジスタ＃３１に対し書込ゲート３１１ｅおよび読出ゲート３１２ｅが設けられる。レジスタ＃３２に対し書込ゲート３１１ｆおよび読出ゲート３１２ｆが設けられる。
【０２４０】
第４行において、レジスタ＃４１に対し書込ゲート３１１ｇおよび読出ゲート３１２ｇが設けられ、レジスタ＃４２に対し書込ゲート３１１ｈおよび読出ゲート３１２ｈが設けられる。
【０２４１】
書込ゲート３１１ａ〜３１１ｈはそれぞれライトイネーブル信号ＷＥ１１、ＷＥ１２、ＷＥ２１、ＷＥ２２、ＷＥ３１、ＷＥ３２、ＷＥ４１およびＷＥ４２に応答してそれぞれ活性状態となり、関連の書込データバス３６２ａまたは３６２ｂ上のデータを対応のレジスタへ書込む。
【０２４２】
各行において、レジスタの読出を制御するために読出制御回路３１５ａ〜３１５ｄが設けられる。
【０２４３】
第４行の読出制御回路３１５ｄはライトイネーブル信号ＷＥ４１およびＷＥ４２がともに活性状態となり、レジスタ＃４１および＃４２にデータが書込まれたときに活性状態となり、対応の読出ゲート３１２ｇおよび３１２ｈをイネーブルし、レジスタ＃４１および＃４２をそれぞれ読出データバス３６０ａおよび３６０ｂへ接続する。読出データバス３６０ａおよび３６０ｂは演算器３５０に結合される。演算器３５０は乗算器または加算シフト複合演算器である。
【０２４４】
第３行の読出制御回路３１５ｃは、ライトイネーブル信号ＷＥ３１およびＷＥ３２がともに活性状態となり、かつ読出制御回路３１５ｄがデータ読出を指示していないときに活性化され、読出ゲート３１２ｅおよび３１２ｆを活性状態とする。
【０２４５】
第２行の読出制御回路３１５ｂは、ライトイネーブル信号ＷＥ２１、ＷＥ２２が活性状態となりかつ、読出制御回路３１５ｃおよび３１５ｄがともにデータ読出を指示していないときに活性化され、対応の読出ゲート３１２ｃおよび３１２ｄを活性状態とする。
【０２４６】
第１行の読出制御回路３１５ａは、ライトイネーブル信号ＷＥ１１およびＷＥ１２の活性状態になり、かつ、読出制御回路３１５ｂ、３１５ｃおよび３１５ｄがデータ読出を指示していないときに活性状態となり、対応の読出ゲート３１２ａおよび３１２ｂを活性状態とする。
【０２４７】
演算器３５０の出力はレジスタ選択回路３５０を介して所望のデータバスへ伝達される。いずれのデータバスへこの演算器３５０の出力が伝達されるかはプログラムにより決定される。レジスタ選択回路３５１は、ＥレジスタまたはＦレジスタの内容をデコードし、対応の書込ゲートを活性化するためのライトイネーブル信号ＷＥを発生するとともに、演算器３５０からのデータを対応の書込データバス上に伝達する。演算器３５０の出力がいずれの書込データバス上に伝達されるかは実現されるフィルタの構造により決定される。演算器３５０が乗算器の場合には、この乗算器出力はＸレジスタへ出力されるため、Ｘレジスタ対応の書込データバスへ伝達される。この場合、レジスタ選択回路３５１は、別の構成が用いられ、ＥレジスタまたはＦレジスタにかかわりなく、読出制御回路３１５ａ〜３１５ｄの出力に応じて、データ読出を受けた行に対応するＸレジスタへデータを伝達する。
【０２４８】
上述の構成において、読出制御回路３１５ａ〜３１５ｄは下位の読出制御回路（行番号の大きい読出制御回路）がデータ読出を行なっていないときにのみライトイネーブル信号に応答して読出ゲートをイネーブル状態とする。それにより、常に優先順位に従ってデータの読出を実行することができるとともに、演算に必要なデータが揃ったときには即座に演算を実行することができる。
【０２４９】
図６２は読出制御回路の具体的構成の一例を示す図である。図６２（Ａ）において、読出制御回路３１５は、一方のライトイネーブル信号ＷＥａ１をそのＳ入力に受けるセット・リセット（ＳＲ）フリップフロップ４０１と、他方のライトイネーブル信号ＷＥａ２をそのＳ入力に受けるＳＲフリップフロップ４０２と、ＳＲフリップフロップ４０１および４０２の出力と、下位側の読出制御回路のインバータ回路の出力を受けるＡＮＤ回路４０３と、ＡＮＤ回路４０３の出力を反転して上位の読出制御回路に含まれるＡＮＤ回路の入力へ与えるインバータ回路４０５と、ＡＮＤ回路４０３の出力をＳ入力に受けるＳＲフリップフロップ４０４と、ＳＲフリップフロップ４０４のＱ出力を所定時間遅延させる遅延回路４０６を含む。
【０２５０】
遅延回路４０６の出力はフリップフロップ４０１、４０２および４０４のリセット入力Ｒへ与えられる。またフリップフロップ４０４のＱ出力は対応の読出ゲートへ読出イネーブル信号として与えられる。次に動作についてその動作波形図である図６２（Ｂ）を参照して説明する。
【０２５１】
下位のインバータ回路の出力が“Ｌ”の場合には、下位のレジスタ（行番号の大きいレジスタ）においてデータが揃っており先に下位側において演算が実行されることを示す。したがってこの場合、ライトイネーブル信号ＷＥａ１およびＷＥａ２がともに活性状態となり対応のレジスタに有効データが書込まれ、フリップフロップ４０１および４０２がセット状態となった場合でもＡＮＤ回路４０３の出力は“Ｌ”状態にある。
【０２５２】
下位のインバータ回路の出力が“Ｈ”に立上がると、この行のレジスタの格納データを用いて演算が実行されるべきことを示す。このとき、ＡＮＤ回路４０３の出力が“Ｈ”に立上がり、インバータ回路４０５の出力が“Ｌ”に立下がる。インバータ回路４０５の出力が上位のＡＮＤ回路の入力に与えられている。これにより上位側における演算が禁止される。
【０２５３】
ＡＮＤ回路４０３の出力が“Ｈ”に立上がると、フリップフロップ４０４のＱ出力が“Ｈ”へ立上がり、対応の読出ゲートがイネーブル状態となり、レジスタの内容が読出データバスに伝達される。所定時間が経過すると、遅延回路４０６の出力よりフリップフロップ４０１、４０２および４０４がリセットされ、読出ゲートはディスエーブル状態とされるとともに、ＡＮＤ回路４０３の出力も“Ｌ”に立下がり、上位の読出制御回路を読出可能状態に設定する（インバータ回路４０５の出力が“Ｈ”となる）。この図６２に示す構成において、フリップフロップ４０４はＡＮＤ回路４０３の“Ｈ”の信号をセット入力Ｓに受けているときにリセット入力Ｒに“Ｈ”の信号を受けてリセット状態とされる。この構成は、セット状態にする駆動トランジスタよりもリセット状態に設定するトランジスタの方の駆動能力を大きく設定することにより実現される。すなわち、セット能力よりもリセット能力の方が大きくされる。
【０２５４】
この構成において、一方のレジスタが定数データを格納する場合には、フリップフロップ４０１または４０２のＱ出力を常時“Ｈ”状態に設定する必要がある。この構成は、定数データを格納するレジスタに対応するフリップフロップのリセット入力Ｒに対しては、遅延回路４０６の出力が伝達されないようにプログラムにより固定する。すなわち、遅延回路４０６とフリップフロップ４０１または４０２との間にスイッチ回路を設けておき、このスイッチ回路の導通／遮断を定数値であるか否かを示すプログラムにより決定する。
【０２５５】
上述の構成により、優先順位を乱すことなく必要なデータが揃ったときに演算を実行することが可能となる。ここで、乗算操作と加算シフト複合演算操作とでは、加算およびシフト演算操作が優先される。この場合、加算シフト演算操作に利用されるレジスタに対する読出制御回路の出力を、乗算回路に利用されるデータを格納するレジスタに設けられる読出制御回路の活性／不活性を指定する信号として利用すればよい（すなわちＡＮＤ回路４０３の入力へ与えればよい）。
【０２５６】
［システム構成例］
これまで述べてきたフィルタ装置においては、レジスタファイル内において必要なデータが揃ったときに演算処理が実行される。このようなデータ処理方式は「データ駆動方式」と呼ばれる。
【０２５７】
一方において、データ処理システムにおける処理能力を増大させるための一手法として、並列処理能力を有するデータ駆動型処理装置が知られている。データ駆動型処理装置においては、「ある処理に必要なデータがすべて揃い、かつその処理に必要な演算装置などの資源が割当てられたときにその処理を実行する」という規則に従って処理が進行する。
【０２５８】
データ駆動型処理装置およびデータ駆動型フィルタ装置はともに「データ駆動方式」に従って処理を実行する。両装置を組合せて１つの情報処理装置を構築した場合、すべての処理を「データ駆動方式」に従って実行するデータ駆動型情報処理装置が実現される。
【０２５９】
このようなデータ駆動型情報処理装置を用いれば、たとえば高速フーリエ変換（ＦＦＴ）処理を含む画像データ処理などのようなフィルタ処理を含む複雑なプログラムであっても高速かつ効率的に実行することが可能となる。高速フーリエ変換（ＦＦＴ）は基本構成要素がバタフライ演算要素であり、このバタフライ演算要素は、遅延素子と加算素子とを基本構成要素として含む。したがってこのようなバタフライ演算要素はｆｉｒ命令で記述することができるため、高速フーリエ変換処理を、ｆｉｒ命令の組合せにより実行することができるからである。以下に、このデータ駆動型フィルタ装置とデータ駆動型処理装置を組合せる構成について説明する。
【０２６０】
図１はこの発明の一実施例によるデータ駆動型情報処理装置の全体の構成を概略的に示す図である。図１において、データ駆動型情報処理装置５００は、データ駆動型フィルタ装置部分５１０と、データ駆動型プロセッサ部分５５０とを含む。
【０２６１】
データ駆動型フィルタ装置部分５１０は、複数の乗算器１ａ〜１ｎを含む第１の演算器群４０と、複数の加算およびシフト演算器２ａ〜２ｍを含む第２の演算器群５０と、第１および第２の演算器群４０および５０とのデータの授受を行なうレジスタファイル１０を含む。図１に示すデータ駆動型フィルタ装置部分５１０は、図２に示すフィルタ装置と実質的に同様の構成を備える。レジスタファイル１０は図３に示すものと同様の構成を備える（この構成については後に再度説明する）。
【０２６２】
データ駆動型プロセッサ部分５５０は、外部から与えられるデータパケットを受け内部データパケットを生成する入力部５５６と、実行されるべきプログラムの命令をプログラムのノードに対応して格納するプログラムメモリおよびこの入力データが発火状態にあるか否かに関する情報を記憶する待ち合わせメモリを含むプログラム／待ち合わせメモリ部５５２と、プログラム／待ち合わせメモリ部５５２からの発火演算データに対し演算を実行する演算部５５４と、プログラム／待ち合わせメモリ部５５２からのメモリアクセス要求命令に従って、データメモリ５７０へアクセスするメモリインターフェース（メモリＩ／Ｆ）５６０と、プログラム／待ち合わせメモリ部５５２から出力されるデータパケットを受け装置外部へ出力するための外部データパケットを生成する出力部５５８を含む。
【０２６３】
データ駆動型プロセッサにおいては、一般にデータはパケットの形態で伝播される。このパケットは命令と、入力データが到達すべき行先（プログラムノード）を示すノード番号と、発火検出のための入力データの組みを識別するための世代番号などの情報を含む。ある処理に必要とされるデータがすべてそろった状態を「発火」と称する。この発火検出の際に、ある処理に対しては１組の入力データしか許さないものは静的データ駆動方式と呼び、一方、２組以上の入力データの組みを許すものが動的データ駆動方式と呼ばれる。プログラム／待ち合わせメモリ部５５２は、命令コードと次の命令フェッチに必要となる行先情報（ノード特定番号）両者の付替を行なう機能と、ある処理に必要なデータが揃ったこと（発火）の検出を行なう機能とを備える。
【０２６４】
この命令コードおよびノード番号の付替のための情報はプログラムメモリ部に格納され、発火検出に必要な情報は待ち合わせメモリに格納される。このプログラム／待ち合わせメモリ部５５２において発火が検出されたデータはその行先に従って演算部５５４、メモリインターフェース５６０またはフィルタ装置５１０内のレジスタファイル１０へ伝達される。処理が必要とされないデータは出力部５５８を介して装置外部へ出力される。次に簡単に動作について説明する。
【０２６５】
入力部５５６からの入力データパケットは、プログラム／待ち合わせメモリ部５５２へ与えられる。このプログラム／待ち合わせメモリ部５５２において、プログラムメモリから対応の命令が読出され、この命令の実行の可能／不可能が待ち合わせメモリに格納されたデータにより判別される。実行可能となったとき（発火状態となったとき）、その命令がフィルタ操作実行命令の場合にはフィルタ装置５１０のレジスタファイル１０へ伝達され、それ以外の命令の場合には、演算部５５４へ伝達され数値演算／論理演算が実行されるかまたはメモリインターフェース部５６０へ与えられてデータメモリ５７０に対するデータの書込／読出が実行されるかまたはさらに出力部５５８を介してこのプロセッサ５５０の外部へ送出される。
【０２６６】
データ駆動型フィルタ装置５１０内で処理されるデータは入力データが与えられた場合、このフィルタ装置５１０内でフィルタ処理され、結果データのみが再びプログラム／待ち合わせメモリ部５５２へ伝達される。一方プロセッサ５５０内で処理されるデータは、プログラム／待ち合わせメモリ部５５２、演算部５５４、メモリインターフェース５６０の間を伝達されることにより発火の有無に従って処理が進行する。フィルタ装置５１０で実行されるべき命令はこのプログラム／待ち合わせメモリ部５５２において無条件で発火状態とされ、発火パケットが生成されレジスタファイル１０へ伝達される。次に各部の構成の詳細について順次説明する。
【０２６７】
図６３は図１に示すプログラム／待ち合わせメモリ部の概略構成を示す図である。図６３において、プログラム／待ち合わせメモリ部５５２は、図１に示す入力部５５６、メモリインターフェース（Ｉ／Ｆ）５６０、フィルタ装置５５０、および演算部５５４からのデータパケットの合流を行なうための合流器５８０と、データの流れの揺らぎを吸収するためのキューバッファ５８２と、キューバッファ５８２からのデータに対し、命令コードおよびノード特定番号の付替および発火検出を行なうためのプログラム機能付発火制御部（ＦＣＰ部）５８４と、ＦＣＰ部５８４からのデータをフィルタ装置５１０または分岐器５８８へ分岐させるための分岐器５８６と、分岐器５８６からのデータパケットを演算部５５４、出力部５５８およびメモリインターフェース５６０へ分岐させるための分岐器５８８を含む。合流器５８０は、４入力１出力の合流器であり、その出力に空きが生じていることを条件としてその入力に与えられたデータを出力する。
【０２６８】
分岐器５８６および５８８は、データパケットに含まれる行先ノード特定番号に従って与えられたデータの振り分けを実行する。
【０２６９】
図６４は図６３に示す合流器へ与えられるデータパケットのフォーマットを示す図である。図６４において、データパケットは、ワードの先頭位置を示すワード識別フラグＨ／Ｔと、外部制御系へ転送されるべきデータであることを示す外部制御系転送フラグＣＴＬをその先頭ビット位置に含む。データパケットはさらに、命令コードＯＰＣと、この命令の内容を示すフラグＦＬＡＧを含む。このフラグＦＬＡＧは、命令がメモリアクセス命令であるか否か、フィルタ操作命令であるか否か、およびこのデータ駆動型プロセッサ内の演算部５５４で実行される命令であるかなどを示すフラグを含む。すなわちこのフラグＦＬＡＧは複数ビットである。フラグＦＬＡＧはさらに、命令コードＯＰＣが示す命令が２項演算命令であるか単項演算命令であるかを示すフラグをも含む。
【０２７０】
データパケットはさらに、このデータパケットの行先を示す行先データを格納する行先フィールドと、このデータの組を識別するための世代番号を格納する世代フィールドと、データが格納されるオペランドフィールドとを含む。行先フィールドは、このデータパケットがノードの右側ノードへ与えられるか左側ノードへ与えられるかの２入力ノードの左右識別を示すフラグＬ／Ｒと、このプロセッサ内で実行されるプログラムのノード特定番号を示すノード番号ＮＤ＃およびマルチプロセッサシステムにおけるプロセッサを特定するためのプロセッサ番号ＰＥ＃を含む。世代フィールドは世代番号ＧＥ＃を含む。この世代番号ＧＥ＃は、プロセッサとして動的データ駆動型プロセッサを想定してるいために用いられる。待ち合わせ時において行先が同一でありかつ世代番号が同じデータが揃ったときに発火と判定される。
【０２７１】
オペランドフィールドはオペランドデータＤＡＴＡを含む。このオペランドデータは被処理データである。
【０２７２】
図６３に示す構成においては、まず合流器５８０においてデータパケットが合流されてキューバッファ５８２へ与えられた後、順次このデータパケットがＦＣＰ部５８４へ与えられる。ＦＣＰ部５８４においては、行先フィールドのノード番号ＮＤ＃と世代番号ＧＥ＃とから構成されるハッシュアドレスをプログラムメモリおよび待ち合わせメモリのアドレスとして対応の命令およびその命令実行後に到達すべきノード番号とが読出され、次に実行されるべき命令が確定される。
【０２７３】
この次に実行される命令が待ち合わせメモリ部において待ち合わせが完了したと判断され実行可能とされた場合には、この命令は分岐器５８６によりフィルタ装置５１０へ与えられるか分岐器５８８を介して演算部５５４またはメモリインターフェース５６０または出力部５５８へ伝達される。発火条件については後に詳細に説明するが、フィルタ装置５１０へ与えられて実行されるべき命令の場合には無条件で発火状態とされ、そのノード番号とともに新たな命令コード（フィルタ操作命令）がデータパケットに付され、フィルタ装置５１０へ与えられる。このフィルタ装置で実行される命令がであるか演算部５５４で実行される命令であるかまたはメモリインターフェースもしくは出力部へ伝達される命令であるかは命令フィールドに含まれるフラグＦＬＡＧを見ることにより判別される。
【０２７４】
フィルタ装置ではこの命令フィールドに含まれる命令コードＯＰＣをデコードし（フィルタ操作は関数呼出の形で実現される）、この命令コードが指定するフィルタ演算に対応するプログラムを図３に示すプログラムメモリＰＭからシーケンスコントローラＳＣが読出してレジスタファイルにセットし、この命令に従ったフィルタ操作が順次実行される。
【０２７５】
図６５は図６３に示すＦＣＰ部のより詳細な構成を示す図である。図６５において、ＦＣＰ部５８４は、たとえば連想メモリを用いて構成されるＦＣＰメモリ６００と、６段のマイクロパイプラインを構成するように配置された制御ロジックを含む。ＦＣＰメモリ６００は、入力データパケットに含まれる行先ノードに対する命令コードと、そのノードの演算結果が伝達される行先ノード番号を格納するＰＳフィールド（プログラムメモリ）６２０と、ＰＳフィールド６２０から読出された命令が発火するか否かを示す情報を格納するＦＣフィールド（待ち合わせメモリ）６２２を含む。
【０２７６】
図６６および図６７にそれぞれＰＳフィールドおよびＦＣフィールドの１エントリのデータの構成を示す。図６６を参照して、ＰＳ（プログラム記憶）フィールドは、命令フィールドと行先フィールドを含む。命令フィールドは、命令コードＯＰＣと、この命令コードＯＰＣの命令内容を識別するフラグＦＬＡＧを含む。フラグＦＬＡＧは、入力データパケット（図６４参照）において示すフラグＦＬＡＧと同様であり、命令コードＯＰＣが示す演算が２項演算命令、単項演算命令、メモリアクセス命令、およびフィルタ演算命令のいずれであるかを示す。
【０２７７】
この命令コードＯＰＣによる命令の実行後の演算結果が伝達される行先情報は最大２個格納することかできる。第１の行先ノードおよび第２の行先ノード＃１および＃２はそれぞれ２入力ノードの左右識別フラグＬ／Ｒとノード番号ＮＤ＃およびプロセッサ番号ＰＥ＃を含む。行先ノードが２つ存在する場合には、出力時において出力データのコピーを行なうことを示すフラグＣＰＹが“１”となる。
【０２７８】
図６７を参照して、ＦＣ（発火制御）フィールドは、相手方のデータを待ち合わす状態にある待ち合わせオペランドＤＡＴＡ／ＣＯＮＳＴと、待ち合わせ状態にある世代を示す待ち合わせ世代フィールドと、各種の制御フラグを含む。待ち合わせオペランドはオペランドデータＤＡＴＡの場合および定数ＣＯＮＳＴの場合がある。待ち合わせ世代フィールドは、世代番号ＧＥ＃を格納する。フラグ領域には、このＦＣフィールドにおいて待ち合わせ状態となっているデータが有効であるか否かを示す有効フラグＶＬＤと、行先が２つ存在する場合にコピーすべきことを示すコピーフラグＣＰＹを含む。
【０２７９】
発火／非発火の判別には、有効フラグＶＬＤが“１”であることを条件として待ち合わせ世代番号ＧＥ＃の比較が行なわれる。世代番号ＧＥ＃が一致した場合には発火パケットの生成が行なわれる。すなわち世代番号が一致した場合にはこのＦＣフィールドの待ち合わせオペランドと入力データパケットのオペランドデータがＰＳフィールドの命令コードＯＰＣに従って演算実行される。
【０２８０】
命令コードＯＰＣがフィルタ装置５１０における演算操作を示す場合には、フラグＦＬＡＧがフィルタ操作を示す。この場合には、待ち合わせデータは存在しないため、無条件で発火状態とされ、オペランドデータＤＡＴＡ（入力データパケットに含まれるデータ）とこのＰＳフィールドから読出された命令および行先ノード番号から出力データパケットが生成されてフィルタ装置５１０へ分岐器５８６を介して伝達される（図６３参照）。
【０２８１】
次に再び図６５へ戻って、ＦＣＰ部５８４は、キューバッファ５８２から与えられた命令が実行命令（ＦＣＰメモリ６００に対するロード／ダンプ命令以外の命令）であるか否かの識別を行なう命令識別部６０２と、命令識別部６０２から与えられるデータパケットに含まれるノード番号ＮＤ＃および世代番号ＧＥ＃をハッシュアドレスとしてＦＣＰメモリ６００をアクセスするアドレスデコーダ６０４と、アドレスデコーダ６０４によりアドレス指定されたフィールド（ＰＳフィールドおよびＦＣフィールド）を読出す命令フェッチ部６０６と、命令フェッチ部６０６により読出された命令の種類を識別する第２の命令識別部６０８と、命令識別部６０８の識別結果に従ってこのデータパケットの発火／非発火を判定する発火判定部６１０と、発火判定部６１０の判定結果に従ってパケットを生成する出力パケット生成部６１２を含む。次に動作について説明する。
【０２８２】
まずこのＦＣＰ部においては以下の動作が実行される。前述のごとく、ＰＳフィールドから読出された命令の演算結果が伝達されるべきノードが２つある場合には、対応のＦＣフィールドのフラグＣＰＹが“１”となる。
【０２８３】
また片側の入力が定数データであるオペランドに対しては同一アドレスのＦＣフィールドに定数データ（ＣＯＮＳＴ）が書込まれかつ定数フラグＣＳＴ（図６７において示す）に“１”が書込まれる。この定数データと対をなすオペランドが入力された場合無条件に発火パケットが生成される。
【０２８４】
また原則として、定数データを持たない２項演算は、左右オペランドのうち先に入力されたオペランドの内容がＦＣフィールドの待ち合わせオペランド（ＤＡＴＡ）に書込まれ、待ち合わせ状態にある有効データであることを示すフラグＶＬＰが“１”とされる。またこのとき世代番号ＧＥ＃が書込まれる。後から入力されたオペランドは、有効フラグＶＬＤが“１”であることを条件としてその２つのオペランドの内容を参照し、世代番号ＧＥ＃が一致した場合に発火パケットを生成し、かつ待ち合わせ状態のオペランドが消費されたことを示すために有効性フラグＶＬＤを“０”とする。世代番号ＧＥ＃が不一致の場合、すなわちハッシュ衝突の場合には、このデータは対を構成しないため、図６３においてループを構成するパイプライン（このプロセッサは内部演算はマイクロパイプラインを構成している）上に伝達され、この待ち合わせメモリ６２２において空き領域が生じるのを待つ。
【０２８５】
さらに、命令フィールドの命令コードＯＰＣがフィルタ操作演算の場合には、ＦＣフィールドにおける内容を参照することなく無条件で発火状態とされ、発火パケットの生成が実行される。次にプログラム実行時におけるＦＣＰ部の動作について説明する。
【０２８６】
命令識別部６０２は、キューバッファ５８２から与えられたデータパケットに含まれる命令コードＯＰＣのデコードを実行する。この命令コードのデコードは実行命令であるか外部制御命令であるか、ＦＣＰメモリに対するロード／ダンプ命令であるかの判別が実行される。実行命令であると判別された場合には、続いて直前のデータパケットに含まれるオペランドと同一アドレスをアクセスするオペランドであるか否かの判定が実行される（ノード番号ＮＤ＃および世代番号ＧＥ＃を利用する）。同一アドレス（ＦＣＰメモリ６００のアドレス）を連続してアクセスするオペランドの場合には、このＦＣＰメモリ６００へのアクセスのオーバヘッドを回避するために、メモリアクセスは実行されない。それに代えて、出力パケット生成部６１２においてオペランドの対である発火パケットを生成する（この発火パケットの生成手法は事前発火と呼ぶ）。
【０２８７】
アドレスデコーダ６０４は、次の命令のフェッチのために、この命令識別部６０２から与えられたデータパケットに含まれるノード番号ＮＤ＃および世代番号ＧＥ＃をハッシュアドレスとしてアドレスデコードを実行し、ＦＣＰメモリのアドレスを生成する。ここで、ハッシュアドレスとは、適当な関数（ハッシュ関数）をｈとし、ＦＣＰメモリ６００のアドレスをＡとすると、
Ａ＝ｈ（ＮＤ＃，ＤＥ＃）
で与えられる。
【０２８８】
ｈ（ＮＤｉ＃，ＧＥｉ＃）＝ｈ（ＮＤｊ＃，ＧＥｊ＃）
の場合、異なる世代番号であってもＦＣＰメモリの同一アドレスＡを指定している場合が生じる。この現象はハッシュ衝突と呼ばれる。ハッシュ関数ｈ（  ）はできるだけ衝突が少なくなるように定義される。ハッシュ関数には様々なものが利用されているが、キーデータ（ノード番号および世代番号）を適当な桁数で分割し、各分割された値を加算する方法（畳み込み方法）がある。この他に、キーを２乗してから中位のビット列を切出す方法がある。この２乗の代わりに割算を用いる場合もある。
【０２８９】
上述のハッシュ演算を実行することにより、ＦＣＰメモリ６００における内容の検索を高速で実行することができる。
【０２９０】
命令フェッチ部６０６は、このアドレスデコーダ６０４が生成したアドレスに従ってＦＣＰメモリ６００のＰＳフィールドおよびＦＣフィールドを参照する。すなわち、ＦＣＰメモリ６００におけるＰＳフィールド６２０から命令およびこの命令実行後の行先情報を読出し、またＦＣフィールド６２２から片側のオペランドがこのＦＣＰメモリ６００のＦＣフィールド６２０において待ち合わせを行なっているか（有効フラグＶＬＤを利用）などの情報を読出す。
【０２９１】
第２の命令識別部６０８は、ＰＳフィールド６２０から読出された命令コードＯＰＣの演算内容を識別する。すなわち、図６３に示すフィルタ装置５１０を利用する演算であるが、演算部５５４を利用する演算であるか、メモリインターフェースを介してのデータメモリへのアクセス命令であるかデータを出力する命令であるかの識別が実行される。
【０２９２】
フィルタ装置５１０を利用する命令の場合、フラグＦＬＡＧにおけるフィルタ演算操作命令を示すフラグに“１”が書込まれている。この場合には、無条件で発火状態とされる。
【０２９３】
演算部５５４における演算については、単項演算であるか２項演算であるかの識別が実行される。２項演算においてはさらに、定数演算命令であるか、事前発火（命令識別部６０２において実行された）であるかおよび２変数演算であるかの識別が実行される。
【０２９４】
発火判定部６１０はこの命令識別部６０８における命令識別結果に従って発火／非発火を判定する。単項演算命令、定数演算命令、事前発火命令およびフィルタ装置５１０を利用するフィルタ演算命令の場合には無条件で発火と判定される。
【０２９５】
発火判定部６１０は、また、ＦＣフィールドの内容を参照し、有効フラグＶＬＤが“１”であるか否かを判定し、これにより対をなすオペランドがＦＣＰメモリ６００の待ち合わせ領域（ＦＣフィールド）で待っているかを判定するとともにさらに世代番号ＧＥ＃の一致／不一致の判定を行なう。
【０２９６】
２項演算命令において発火対象となるオペランドが待っていないオペランド（ＦＣフィールドにおける有効フラグＶＬＤが“０”）のオペランドについてはＦＣフィールドへの書込を示すためのフラグが発火判定部６１０において生成される。発火判定部６１０は、さらに、ＦＣＰメモリ６００に対する書込アドレス（ハッシュアドレス）は一致し、有効フラグＶＬＤも“１”であるものの世代番号ＧＥ＃が不一致のオペランドについてはハッシュ衝突と判定し該判定結果を示すフラグを生成する。
【０２９７】
出力パケット生成部６１２は、この発火判定部６０１の判定結果に従って出力パケットを生成する。すなわち、発火と判定されたオペランドに対しては、ＰＳフィールド６０２から読出された命令コードＯＰＣおよびフラグＦＬＡＧおよび行先情報（ノード番号ＮＤ＃およびプロセッサ番号ＰＥ＃および２入力識別フラグＬ／Ｒ）で置き換え、かつＦＣフィールド６２２から読出された待ち合わせオペランドおよびフラグを追加して発火パケットを生成するとともに対応のＦＣフィールドの無効化（有効フラグＶＬＤを“０”）をする。
【０２９８】
出力パケット生成部６１２は、また、無条件発火のデータパケットに対しては、ＦＣフィールド６２２における変更を行なうことなくＰＳフィールド６２０およびＦＣフィールド６２２から読出された情報に従ってデータパケットを生成する。
【０２９９】
出力パケット生成部６１２は、また、無効演算命令において発火対象のオペランドが待ち合わせを行なっていない場合には、このデータパケットに含まれるオペランドデータおよび世代番号ＧＥ＃をＦＣフィールドへ書込み、かつ有効フラグＶＬＤに対し“１”を書込み、発火対象となるオペランドデータを待ち合わせる状態とする。
【０３００】
出力パケット生成部６１２は、ハッシュ衝突時においては、ＰＳフィールドおよびＦＣフィールド６２０および６２２からの情報によるデータパケットの変更を行なうことなくそのまま放出する。
【０３０１】
このＦＣＰ部５８４により生成されたデータパケットは分岐器５８６（図６３）および分岐器５８８（図６３参照）を介して対応の部分へ伝達される。ハッシュ衝突を生じたオペランドデータは、図６３に示す構成において分岐器５８６、分岐器５８８、および演算部５５４、合流器５８０を介してキューバッファ５８２へ与えられる。このループを待ち合わせメモリ領域に空きが存在するまで巡回する。このとき演算部５５４においては演算は実行されない（有効フラグＶＬＤの“０”および“１”により演算実行の可否が識別される）。
【０３０２】
このようなデータ駆動型プロセッサにおいてフィルタ演算命令が実行される場合には、発火判定部６１０において無条件発火と判定され、出力パケット生成部６１２において発火パケットが生成され、分岐器５８６を介してフィルタ装置５１０へ与えられる。フィルタ装置５１０はこの分岐器５８６から与えられたデータパケットに含まれる命令コードＯＰＣに従って、実行されるべきプログラム命令群を選択し所望のフィルタ演算を実行し、該実行結果をこの与えられたデータパケットのオペランドデータ領域に書込み再び合流器５８０へ伝達する。次にこのフィルタ装置５１０の構成および動作について説明する。
【０３０３】
図６８は、フィルタ装置の構成およびこのフィルタ装置に対する入出力データパケットの構成を示す図である。図６８に示すフィルタ装置５１０は、本質的に図２および図３に示すフィルタ装置と同じ構成を備える。すなわち、フィルタ装置５１０は、オペランドデータを受ける入力部７１０と、レジスタファイル７１４と、乗算器および加算シフト複合演算器を含む演算器群７１６と、データを出力する出力部７１８と、演算操作を制御するプログラムコントロール部７００と、このプログラムコントロール部７００からのプログラムに従ってレジスタファイル７１４のデータの入出力を制御する書込／読出制御部７１２を含む。この入力部７１０、書込／読出制御部７１２、レジスタファイル７１４、出力部７１８および演算器群７１６の動作は先に図２ないし図６２を参照して説明したフィルタ装置のそれと同様である。
【０３０４】
プログラムコントロール部７００は、与えられたデータパケットの命令コードをデコードする命令デコーダ７５２と、命令デコーダ７５２が特定するフィルタ演算に従って、プログラムメモリ７５６から対応のプログラム命令群を読出し、該命令の実行を制御するシーケンスコントローラ７５４を含む。プログラムメモリ７５６は、その記憶内容が外部からプログラム可能であり、アプリケーションに従ってそのフィルタ演算内容がプログラムされる。この場合、図１に示すデータメモリへのアクセスと同様、プログラムメモリ７５６へもデータ駆動型プロセッサからの命令に従ってアクセス可能とされ、必要なフィルタ演算命令がプログラムメモリ７５６に格納される構成が利用されてもよい。
【０３０５】
命令デコーダ７５２は命令コードＯＰＣをデコードし、実行されるべきフィルタ演算を特定するが、この命令デコーダ７５２はまたシーケンスコントローラ７５４内に含まれてもよい。命令デコーダ７５２は、レジスタファイル７１４に設定されたフィルタ演算内容と現在与えられた命令コードが示すフィルタ演算が同じ場合、その旨をシーケンスコントローラ７５４へ知らせる。シーケンスコントローラ７５４はこのとき、プログラムメモリ７５６へはアクセスせず入力データの書込および出力データの出力を実行する。  次に簡単に動作について説明する。
【０３０６】
データ駆動型プロセッサからフィルタ演算を実行すべきデータパケットが与えられると、このデータパケットのうち命令コードＯＰＣ＃１が命令デコーダ７５２へ与えられる。いま、命令デコーダ７５２が命令コードＯＰＣ＃１をデコードし、フィルタ演算ＦＩＲＦＵＮＣ４が指定されたと判定された状態を想定する。このフィルタ演算ＦＩＲＦＵＮＣ４は、前述の４次のＦＩＲ命令であるとする。このときシーケンスコントローラ７５４はプログラムメモリ７５６から先に説明したような４次のＦＩＲ命令（ｆｉｒ命令群）を読出し、書込／読出制御部７１２を介して必要なデータをレジスタファイル７１４に設定する。
【０３０７】
この設定の後、データパケットに含まれたオペランドデータＤＡＴＡ（入力データｉｎ）が入力部７１０および書込／読出制御部７１２を介してレジスタファイル７１４へ与えられ指定された４次のＦＩＲ演算が実行される。この実行結果は出力部７１８を介して出力される。出力部７１８から出力されるデータパケットは命令コードおよび行先情報は入力データパケットのそれと同じであるが、オペランドデータが出力データＤＡＴＡ（ｏｕｔ）に変更される。この出力データパケットは図６３に示す合流器５８０へ与えられる。
【０３０８】
ここで図６８においては、データパケットがそれぞれ命令デコーダおよび入力部へ与えられる構成が示されている。データバスと命令バスとを分離することにより、これは実現されるが、入出力インターフェース回路が設けられ、入力インターフェース部において命令コードおよびオペランドデータの振り分けが実行され、また出力インターフェース部において、このデータパケットにおけるオペランドデータの書込が実行され、最終的な出力データパケットが生成される構成が利用されてもよい。
【０３０９】
ここで、図６８において、フラグＦ・ＦＬＡＧがフィルタ演算命令であることを示すフラグである。
【０３１０】
データ駆動型フィルタ装置とデータ駆動型プロセッサとを組合せたプログラムの例を以下に示す。このプログラムはＣ言語で記述される。
【０３１１】
【数１】
0003701033.tif 000002
【０３１２】
このプログラム例においては、ＯＦＦＳＥＴに値５が定義され、次いでｍａｉｎ関数の読出が行なわれ、このｍａｉｎ関数に従って処理が実行される。まず引数（パラメータ）ｉｎ，ｏｕｔおよびａがその型とともに定義され、次いで配列領域が確保される。ここでは配列は固定的に１０個準備される。次いで関数呼出の形式でフィルタ演算が読出される。このフィルタ演算はＦＩＲＦＵＮＣ４（ｉｎ，ｏｕｔ）である。この命令が指定された場合には、フィルタ演算がフィルタ装置部において実行される。
【０３１３】
次に演算ａ＝ｏｕｔ＊ＯＦＦＳＥＴ＋ａの演算が実行される。この演算はデータ駆動型プロセッサの演算部５５４（図６３参照）で実行される。この実行結果ａは配列ｂの第５番目に書込まれる。この配列ｂは図６３に示すデータメモリにその領域が確保されており、このデータメモリへのアクセスによりデータの書込が実行される。
【０３１４】
このプログラムを実行した場合、まず図６３における合流器５８０およびキューバッファ５８２を介してＦＣＰ部５８４へ入力データが与えられる。ＦＣＰ部５８４においては、その行先情報に従ってフィルタ演算命令ＦＩＲＦＵＮＣ４（ｉｎ，ｏｕｔ）が読出される。この命令はフィルタ演算命令であるため無条件発火とされ、図６３に示す分岐器５８６を介してフィルタ装置５１０へ与えられる。このフィルタ装置５１０へはフィルタ演算命令ＦＩＲＦＵＮＣ４（ｉｎ，ｏｕｔ）とともにオペランドデータが与えられる。したがってフィルタ演算が施されるべき入力データはすべてフィルタ装置５１０へ送出され、そこで指定されたフィルタ演算が実行される。
【０３１５】
この演算結果は、再びデータパケットの形態で図６３に示す合流器５８０およびキューバッファ５８２を介してＦＣＰ部５８４へ伝達される。ＦＣＰ部５８４においては、この与えられたデータパケットの行先情報から演算命令を読出し、乗算ｏｕｔ＊ＯＦＦＳＥＴを実行するとともにデータメモリ５７０へアクセスし、配列ｂの５番目ｂ［５］のデータを読出し、加算し、この加算結果を再び配列ｂの５番目に書込む。この一連の演算はデータ駆動型プロセッサにおける演算であり、フィルタ装置におけるフィルタ演算と独立に図６３に示す演算部５５４において実行される。配列ｂの５番目にａを書込む演算命令はメモリインターフェース５６０を介してデータメモリへアクセスすることにより実行される。
【０３１６】
上述の一連の動作により、その内容にフィルタ演算処理を含む複雑なプログラムであってもデータ駆動方式に従ってすべての演算命令を実行することができ、効率的かつ高速で複雑なプログラムであっても実行することが可能となる。
【０３１７】
なお上記実施例においては、データ駆動型プロセッサとしては上述の構成に限定されず、データ駆動方式に従って処理を実行するものであれば任意の構造のプロセッサを利用することができる。
【０３１８】
［処理性能］
本発明によるデータ駆動型情報処理装置を用いた場合、従来のデータ駆動型プロセサのみを用いるフィルタ処理と比べて、ＩＩＲフィルタ処理を実現する場合には４５ないし６０倍の処理速度が得られる。同様にデータ駆動型プロセサのみを用いてＦＩＲフィルタ処理を実現する場合の構成と比べて５ないし１０倍の処理速度を得ることができる。
【０３１９】
また専用ＬＳＩを用いるフィルタ装置と比べて、タップ数を自由に設定することができる（レジスタファイルにおけるエントリーの数の増減はプログラムにより容易に実行することができる）。このため、フィルタ装置を処理用途に応じて任意にその構成を設定することができ、いずれの用途においても容易に対応することが可能となる。
【０３２０】
さらに、上述の実施例においては、ＩＩＲフィルタおよびＦＩＲフィルタそれぞれを個別に構成しているが、両者を組合わせる結合型フィルタをも容易に構成することが可能となる。
【０３２１】
また、データ駆動型フィルタ装置とデータ駆動型プロセッサとを組合せて利用するため、たとえば高速フーリエ変換を含む画像データ処理などのようなフィルタ処理を含む複雑なアプリケーションにも容易に対処することができる。またこのときデータ駆動型フィルタ装置およびデータ駆動型プロセッサともにデータ駆動方式で処理を実行しているため、必要とされるプログラムの形式が同じであり、異なる形式のプログラムを用いる必要がなく、装置間の整合性がよく、またプログラム作成が容易となる。
【０３２２】
【発明の効果】
以上のように、この発明によれば、データ駆動方式に従ってフィルタ操作を実行するデータ駆動型フィルタ装置と、データ駆動方式に従って演算命令を実行するデータ駆動型プロセッサを組合せてデータ駆動型情報処理装置を構成したため、フィルタ操作をその内容に含む複雑なアプリケーションであっても容易に対応することが可能となる。またそのときデータ駆動型フィルタ装置が実行するフィルタ操作がプログラム可能であるため、任意のフィルタ操作を容易に実現することが可能となり、種々のアプリケーションに対して柔軟に対処することのできるデータ駆動型情報処理を得ることができる。
【０３２３】
さらに、データ、定数および初期値が単一代入単一読出のルールで書込／読出が行なわれる複数のレジスタを有するレジスタファイルと、乗算器と加算シフト複合演算器とを有する演算器群とでフィルタ装置を構成したため、ＦＩＲフィルタ処理およびＩＩＲフィルタ処理における基本フィルタ演算を最小命令単位として表現することができ、フィルタ装置においては、フィルタ処理にのみ関連する命令を用いてフィルタ処理を実行することができ、高速でフィルタ処理を実行することが可能となる。
【０３２４】
また、レジスタファイルのエントリー数はタップ数に対応するため、このエントリー数はプログラムにより設定可能であり、さらに任意の構成のフィルタを容易に実現することが可能となる。
【図面の簡単な説明】
【図１】この発明の一実施例であるデータ駆動型情報処理装置の構成を示す図である。
【図２】この発明に従うデータ駆動型フィルタ装置の全体の構成を概略的に示すブロック図である。
【図３】図２に示すレジスタファイルの概略構成を示す図である。
【図４】ｉｉｒ命令におけるレジスタファイル内のレジスタ間の接続およびレジスタファイル内のレジスタの構成を示す図である。
【図５】ｆｉｒ命令におけるレジスタファイル内のレジスタ間の接続およびレジスタファイルの構成を示す図である。
【図６】ｉｉｒ命令およびｆｉｒ命令両者兼用時におけるレジスタファイルの接続構成およびレジスタファイルの構成を示す図である。
【図７】ｉｉｒ命令の記述形式およびその内部構造を示す図である。
【図８】ｆｉｒ命令の記述形式およびその内部構造を示す図である。
【図９】２次のＩＩＲフィルタの構成と本発明におけるｉｉｒ命令への分解手順を示す図である。
【図１０】図９に示す２次のＩＩＲフィルタをｉｉｒ命令で記述した際のフローグラフを示す図である。
【図１１】図１０に示すフローグラフをテキスト形式で記述した際のプログラムコーディングを示す図である。
【図１２】図９に示すフィルタ処理を実現する際の初期状態におけるレジスタファイルの各レジスタの格納データの状態および演算器との接続構成を示す図である。
【図１３】ＩＩＲフィルタ処理実行時における実行サイクル１におけるレジスタファイル内の各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。
【図１４】ＩＩＲフィルタ処理実行時における第２実行サイクルにおける各レジスタの格納データおよびそのときのデジタルフィルタのデータの分布を示す図である。
【図１５】ＩＩＲフィルタ処理実行時における第３実行サイクルにおける各レジスタの格納データおよびそのときのデジタルフィルタのデータの分布を示す図である。
【図１６】ＩＩＲフィルタ処理実行時における第４実行サイクルにおける各レジスタの格納データおよびそのときのデジタルフィルタのデータの分布を示す図である。
【図１７】ＩＩＲフィルタ処理実行時における第５実行サイクルの動作を詳細に示す図である。
【図１８】ＩＩＲフィルタ処理実行時における第５実行サイクルの詳細な動作およびこのサイクル完了時における各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。
【図１９】ＩＩＲフィルタ処理実行時における第６実行サイクル時の各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。
【図２０】ＩＩＲフィルタ処理実行時における第７実行サイクル時の各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。
【図２１】ＩＩＲフィルタ処理実行時における第８実行サイクル時の各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。
【図２２】ＩＩＲフィルタ処理実行時における第９実行サイクル時の各レジスタの格納データを示す図である。
【図２３】ＩＩＲフィルタ処理実行時における第１０実行サイクル時の各レジスタの格納データを示す図である。
【図２４】ＩＩＲフィルタ処理実行時における第１１実行サイクル時の各レジスタの格納データを示す図である。
【図２５】ＩＩＲフィルタ処理実行時における第１２実行サイクル時の各レジスタの格納データを示す図である。
【図２６】ＩＩＲフィルタ処理実行時における第１３実行サイクル時の各レジスタの格納データを示す図である。
【図２７】ＩＩＲフィルタ処理実行時における第１４実行サイクル時の各レジスタの格納データを示す図である。
【図２８】ＩＩＲフィルタ処理実行時における第１５および１６実行サイクル時の各レジスタの格納データを示す図である。
【図２９】ＩＩＲフィルタ処理実行時の第２ないし第１６動作サイクル時における各演算器の稼動状態を示す図である。
【図３０】複数の演算器を用いたＩＩＲフィルタ処理実行時における各レジスタの格納データおよびそのときのデジタルフィルタにおけるデータの分布を示す図である。
【図３１】複数の演算器を用いてＩＩＲフィルタ処理を実行する際の第１実行動作サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図３２】  複数の演算器を用いてＩＩＲフィルタ処理を実行する際の第２実行サイクル時の格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図３３】  複数の演算器を用いてＩＩＲフィルタ処理を実行する際の第３の動作サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図３４】  複数の演算器を用いてＩＩＲフィルタ処理を実行する際の乗算操作完了時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図３５】複数の演算器を用いてＩＩＲフィルタ処理を実行する際の第３の動作サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図３６】複数の演算器を用いてＩＩＲフィルタ処理を実行する際の第４の動作サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図３７】複数の演算器を用いてＩＩＲフィルタ処理を実行した際の各動作サイクル時における演算器の稼動状況を示す図である。
【図３８】４次のＦＩＲフィルタの構成およびｆｉｒ命令への分解手順を示す図である。
【図３９】図３８に示す４次のＦＩＲフィルタをｆｉｒ命令で記述する際のフローグラフを示す図である。
【図４０】図３９に示すフローグラフをテキスト形式で記述した際のプログラムコーディングを示す図である。
【図４１】ＦＩＲフィルタ処理実行時における初期状態の各レジスタ格納データおよび演算器との接続関係とそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４２】ＦＩＲフィルタ処理実行時における第１実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４３】ＦＩＲフィルタ処理実行時における第２実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４４】ＦＩＲフィルタ処理実行時における第３実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４５】ＦＩＲフィルタ処理実行時における第４実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４６】ＦＩＲフィルタ処理実行時における第５実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４７】ＦＩＲフィルタ処理実行時における第６実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４８】ＦＩＲフィルタ処理実行時における第７実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図４９】ＦＩＲフィルタ処理実行時における第８実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５０】ＦＩＲフィルタ処理実行時における第９実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５１】ＦＩＲフィルタ処理実行時における第１０実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５２】ＦＩＲフィルタ処理実行時における第１１実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５３】ＦＩＲフィルタ処理実行時における第１２実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５４】ＦＩＲフィルタ処理実行時における第１３実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５５】ＦＩＲフィルタ処理実行時における第１４実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５６】ＦＩＲフィルタ処理実行時における第１５実行サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図５７】ＦＩＲフィルタ処理実行時における第２ないし第１６実行サイクル時における各演算器の稼動状況を示す図である。
【図５８】複数の演算器を用いたＦＩＲフィルタ処理実行時における各レジスタの格納データを示す図である。
【図５９】複数の演算器を用いてＦＩＲフィルタ処理を実行する際の第１動作サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図６０】複数の演算器を用いてＦＩＲフィルタ処理を実行する際の第２動作サイクル時における各レジスタの格納データおよびそのときのデジタルフィルタ内のデータの分布を示す図である。
【図６１】レジスタファイル内のレジスタの読出制御を行なう構成の一例を示す図である。
【図６２】図６１に示す読出制御回路の構成および動作を示す図である。
【図６３】図１に示すプログラム／待ち合わせメモリ部の具体的構成を示す図である。
【図６４】データ駆動型プロセッサへ与えられるデータパケットの構成を示す図である。
【図６５】図６３に示すＦＣＰ部の具体的構成を示す図である。
【図６６】図６５に示すＰＳフィールドの１エントリの構成を示す図である。
【図６７】図６５に示すＦＣフィールドの１エントリの構成を示す図である。
【図６８】この発明の一実施例において利用されるデータ駆動型フィルタ装置の構成およびこのフィルタ装置に対する入出力データパケットの構成を示す図である。
【符号の説明】
１，１ａ〜１ｎ  乗算器
２，２ａ〜２ｎ  加算シフト複合演算器
１０  レジスタファイル
２０  入力部
２２  加算器
２４  シフト演算器
３０  出力部
４０  第１の演算器群
５０  第２の演算器群
５００  データ駆動型情報処理装置
５１０  データ駆動型フィルタ装置
５５０  データ駆動型プロセッサ
５５２  プログラム／待ち合わせメモリ部
５５４  演算部
５５６  入力部
５５８  出力部
５６０  メモリインターフェース（Ｉ／Ｆ）
５７０  データメモリ
５８０  ＦＣＰ部
６００  ＦＣＰメモリ
６０２  命令識別部
６０４  アドレスデコーダ
６０６  命令フェッチ部
６０８  命令識別部
６１０  発火判定部
６１２  出力パケット生成部
６２０  ＰＳフィールド（プログラムメモリ）
６２２  ＦＣフィールド（待ち合わせメモリ）
７００  プログラムコントロール部
７１０  入力部
７１２  書込／読出制御部
７１４  レジスタファイル
７１６  演算器群
７１８  出力部
７５２  命令デコーダ
７５４  シーケンスコントローラ
ＤＡＦ  データフィールド
ＤＥＦ  行先フィールド
ＤＡＲ  データレジスタ
ＤＥＲ  行先レジスタ
Ａ１  レジスタ
Ａ２  レジスタ
Ｃ  レジスタ
Ｂ  レジスタ
Ｘ  レジスタ
Ｄ  レジスタ
Ｅ  レジスタ
Ｆ  レジスタ
【図１】
0003701033.tif 000003
【図２】
0003701033.tif 000004
【図３】
0003701033.tif 000005
【図４】
0003701033.tif 000006
【図５】
0003701033.tif 000007
【図６】
0003701033.tif 000008
【図７】
0003701033.tif 000009
【図８】
0003701033.tif 000010
【図９】
0003701033.tif 000011
【図１０】
0003701033.tif 000012
【図１１】
0003701033.tif 000013
【図１２】
0003701033.tif 000014
【図１３】
0003701033.tif 000015
【図１４】
0003701033.tif 000016
【図１５】
0003701033.tif 000017
【図１６】
0003701033.tif 000018
【図１７】
0003701033.tif 000019
【図１８】
0003701033.tif 000020
【図１９】
0003701033.tif 000021
【図２０】
0003701033.tif 000022
【図２１】
0003701033.tif 000023
【図２２】
0003701033.tif 000024
【図２３】
0003701033.tif 000025
【図２４】
0003701033.tif 000026
【図２５】
0003701033.tif 000027
【図２６】
0003701033.tif 000028
【図２７】
0003701033.tif 000029
【図２８】
0003701033.tif 000030
【図２９】
0003701033.tif 000031
【図３０】
0003701033.tif 000032
【図３１】
0003701033.tif 000033
【図３２】
0003701033.tif 000034
【図３３】
0003701033.tif 000035
【図３４】
0003701033.tif 000036
【図３５】
0003701033.tif 000037
【図３６】
0003701033.tif 000038
【図３７】
0003701033.tif 000039
【図３８】
0003701033.tif 000040
【図３９】
0003701033.tif 000041
【図４０】
0003701033.tif 000042
【図４１】
0003701033.tif 000043
【図４２】
0003701033.tif 000044
【図４３】
0003701033.tif 000045
【図４４】
0003701033.tif 000046
【図４５】
0003701033.tif 000047
【図４６】
0003701033.tif 000048
【図４７】
0003701033.tif 000049
【図４８】
0003701033.tif 000050
【図４９】
0003701033.tif 000051
【図５０】
0003701033.tif 000052
【図５１】
0003701033.tif 000053
【図５２】
0003701033.tif 000054
【図５３】
0003701033.tif 000055
【図５４】
0003701033.tif 000056
【図５５】
0003701033.tif 000057
【図５６】
0003701033.tif 000058
【図５７】
0003701033.tif 000059
【図５８】
0003701033.tif 000060
【図５９】
0003701033.tif 000061
【図６０】
0003701033.tif 000062
【図６１】
0003701033.tif 000063
【図６２】
0003701033.tif 000064
【図６３】
0003701033.tif 000065
【図６４】
0003701033.tif 000066
【図６５】
0003701033.tif 000067
【図６６】
0003701033.tif 000068
【図６７】
0003701033.tif 000069
【図６８】
0003701033.tif 000070