(57)【要約】【課題】ＶＬＩＷ型のプロセッサと同等の並列度を確保でき、その一方で、ＶＬＩＷ型のプロセッサよりも、遥かに小型で消費電力の小さなプロセッサのアーキテクチャを提供する。【解決手段】フェッチおよびデコード機能を備えた基本プロセッサ１０と、水平型マイクロコード２１により制御される並列データ処理ユニット２０との組み合わせたデータ処理装置１を提供する。並列処理に適した部分だけを水平型マイクロコード２１で実行できるので、並列データ処理ユニット２０においてＶＬＩＷが持つ並列もしくはパイプライン並列のデータ処理が可能となり、並列処理に適していない部分は基本プロセッサ１０によりシーケンシャルなデータ処理が可能となる。水平型マイクロコード２１を採用することにより、並列データ用の命令フェッチとデコードの回路の複雑性を排除し、消費電力を押えつつ効率よく並列処理を行うデータ処理装置を提供できる。【選択図】　　　　図１
2004021890.tif 000002
【特許請求の範囲】
【請求項１】
実行プログラムに含まれる命令をフェッチおよびデコードして実行する第１の処理ユニットと、
複数の処理を同時実行可能な水平型マイクロコードにより制御される第２の処理ユニットとを有し、
前記第１の処理ユニットは、前記実行プログラムに含まれる起動命令により前記第２の処理ユニットを起動する処理を実行可能であるデータ処理装置。
【請求項２】
請求項１において、前記第１の処理ユニットは、前記第２の処理ユニットに対する起動命令を前記第２の処理ユニットに供給可能なフェッチユニットを備えているデータ処理装置。
【請求項３】
請求項１において、前記第２の処理ユニットは、
複数の前記水平型マイクロコードを格納するコードメモリと、
複数のレジスタおよび演算ユニットを具備し、それらの接続および／または機能が前記水平型マイクロコードにより変更されるデータパス部と、
前記コードメモリの実行アドレスを管理するアドレス制御部とを備えているデータ処理装置。
【請求項４】
請求項３において、前記第１または第２の処理ユニットは、前記第１の処理ユニットのデータＲＡＭと前記第２の処理ユニットのデータパス部とのインターフェイス用の複数のインターフェイスレジスタを有するデータ処理装置。
【請求項５】
請求項３において、前記第１の処理ユニットは、前記実行プログラムに含まれる命令により前記第２の処理ユニットの前記コードメモリを書き換える処理を実行可能であるデータ処理装置。
【請求項６】
請求項３において、前記第２の処理ユニットの前記コードメモリを書き換える第３の処理ユニットを有するデータ処理装置。
【請求項７】
請求項１において、前記第１の処理ユニットは、前記第２の処理ユニットに対するクロック信号の供給を制御するデータ処理装置。
【請求項８】
請求項３において、前記第２の処理ユニットは、さらに、前記水平型マイクロコードの実行回数をカウントする複数のループカウンタと、このループカウンタにより前記水平型マイクロコードの実行回数を制御するループ制御部とを備えており、
前記水平型マイクロコードは、前記データパス部の接続を制御する情報を含むオペランドフィールドと、前記ループカウンタを選択する情報を含むループカウンタ選択フィールドとを備えている、データ処理装置。
【請求項９】
請求項８において、前記ループ制御部は、前記ループカウンタでカウントする回数をセットするループ制御レジスタを備えており、
前記第１の処理ユニットは、前記実行プログラムに含まれる命令により、前記ループ制御レジスタの値をセットする処理を実行可能であるデータ処理装置。
【請求項１０】
請求項３において、前記第２のデータ処理ユニットは、前記データパス部の各演算ユニットのコンディション・コードを格納可能なコンディションコードレジスタと、
このコンディションコードレジスタと、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報とを比較し、前記各演算ユニットからレジスタへの出力および／または前記コンディションコードレジスタへのコンディション・コードの出力を制御する出力制御部を備えているデータ処理装置。
【請求項１１】
請求項３において、前記第２のデータ処理ユニットは、前記データパス部の各演算ユニットのコンディション・コードを格納可能なコンディションコードレジスタと、
このコンディションコードレジスタに格納された前のサイクルのコンディション・コード、または、前記コンディションコードレジスタに格納される同一サイクル内の前記各演算ユニットのコンディション・コードと、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報とを比較し、前記各演算ユニットからレジスタへの出力および／または前記コンディションコードレジスタへのコンディション・コードの出力を制御する出力制御部を備えているデータ処理装置。
【請求項１２】
請求項１１において、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報は、
コンディション・コードとは無関係に選択されることを指示する第１の情報と、
コンディション・コードを比較する前記各演算ユニットを指示する第２の情報と、
比較するコンディション・コードの真偽を示す第３の情報と、
比較するコンディション・コードのサイクルを示す第４の情報とを備えている、データ処理装置。
【請求項１３】
請求項１１において、前記出力制御部は、コンディション・コードを、少なくとも真偽および選択または非選択を示す複数ビットのデータに変換して前記コンディションコードレジスタに出力する変換部を備えており、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報は、デコードせずに前記コンディションコードレジスタと比較できるビットマップである、データ処理装置。
【請求項１４】
請求項１２において、前記出力制御部は、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報の前記第４の情報により、前記コンディションコードレジスタに格納されたコンディション・コードと、前記コンディションコードレジスタに格納されるコンディション・コードのいずれかを選択するコンディション・コード選択回路を備えている、データ処理装置。
【請求項１５】
請求項１４において、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報の前記第４の情報は、同一サイクル内の前記各演算ユニットに共通の情報であり、前記コンディション・コード選択回路は前記各演算ユニットに共通である、データ処理装置。
【請求項１６】
複数の処理を同時実行可能な水平型マイクロコードにより制御される並列データ処理装置であって、
複数の前記水平型マイクロコードを格納するコードメモリと、
複数のレジスタおよび演算ユニットを備え、それらの接続および／または機能が前記水平型マイクロコードにより変更されるデータパス部と、
前記データパス部の各演算ユニットのコンディション・コードを格納可能なコンディションコードレジスタと、
このコンディションコードレジスタと、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報とを比較し、前記各演算ユニットからレジスタへの出力および／または前記コンディションコードレジスタへのコンディション・コードの出力を制御する出力制御部とを有する並列データ処理装置。
【請求項１７】
複数の処理を同時実行可能な水平型マイクロコードにより制御される並列データ処理装置であって、
複数の前記水平型マイクロコードを格納するコードメモリと、
複数のレジスタおよび演算ユニットを備え、それらの接続および／または機能が前記水平型マイクロコードにより変更されるデータパス部と、
前記データパス部の各演算ユニットのコンディション・コードを格納可能なコンディションコードレジスタと、
このコンディションコードレジスタに格納された前のサイクルのコンディション・コード、または、前記コンディションコードレジスタに格納される同一サイクル内の前記各演算ユニットのコンディション・コードと、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報とを比較し、前記各演算ユニットからレジスタへの出力および／または前記コンディションコードレジスタへのコンディション・コードの出力を制御する出力制御部とを有する並列データ処理装置。
【請求項１８】
請求項１７において、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報は、
コンディション・コードとは無関係に選択されることを指示する第１の情報と、
コンディション・コードを比較する前記各演算ユニットを指示する第２の情報と、
比較するコンディション・コードの真偽を示す第３の情報と、
比較するコンディション・コードのサイクルを示す第４の情報とを備えている並列データ処理装置。
【請求項１９】
請求項１７において、前記出力制御部は、コンディション・コードを、少なくとも真偽および選択または非選択を示す複数ビットのデータに変換して前記コンディションコードレジスタに出力する変換部を備えており、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報は、デコードせずに前記コンディションコードレジスタと比較できるビットマップである、並列データ処理装置。
【請求項２０】
請求項１７において、前記出力制御部は、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報の前記第４の情報により、前記コンディションコードレジスタに格納されたコンディション・コードと、前記コンディションコードレジスタに格納されるコンディション・コードのいずれかを選択するコンディション・コード選択回路を備えている並列データ処理装置。
【請求項２１】
水平型マイクロコードにより、複数のレジスタおよび演算ユニットの接続および／または機能を変更し、複数の処理を同時実行する並列データ処理装置の制御方法であって、
コンディションコードレジスタに各演算ユニットのコンディション・コードを格納する工程と、
前記コンディションコードレジスタと、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報とを比較し、前記各演算ユニットからレジスタへの出力および／または前記コンディションコードレジスタへのコンディション・コードの出力を制御する工程とを有する並列データ処理装置の制御方法。
【請求項２２】
請求項２１において、前記出力を制御する工程では、前記コンディションコードレジスタに格納された前のサイクルのコンディション・コード、または、前記コンディションコードレジスタに格納される同一サイクル内の前記各演算ユニットのコンディション・コードと、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報とを比較する、並列データ処理装置の制御方法。
【請求項２３】
請求項２２において、前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報は、
コンディション・コードとは無関係に選択されることを指示する第１の情報と、
コンディション・コードを比較する前記各演算ユニットを指示する第２の情報と、
比較するコンディション・コードの真偽を示す第３の情報と、
比較するコンディション・コードのサイクルを示す第４の情報とを備えている並列データ処理装置の制御方法。
【請求項２４】
請求項２２において、前記コンディション・コードを格納する工程では、コンディション・コードを、少なくとも真偽および選択または非選択を示す複数ビットのデータに変換して前記コンディションコードレジスタに格納し、
前記出力を制御する工程では、ビットマップ化された前記水平型マイクロコードに含まれる前記各演算ユニットの選択情報と前記コンディションコードレジスタとデコードせずに比較する、並列データ処理装置の制御方法。
【請求項２５】
オリジナルのプログラムから並列実行に適した部分を抽出して、複数の処理を同時実行可能な水平型マイクロコードに変換する工程と、
前記オリジナルのプログラムの前記並列実行に適した部分を前記水平型マイクロコードの起動命令に置換し、フェッチおよびデコード機能を備えた基本プロセッサで実行可能な実行プログラムに変換する工程とを有するプログラム開発方法。
【請求項２６】
オリジナルのプログラムから並列実行に適した部分を抽出して、複数の処理を同時実行可能な水平型マイクロコードに変換する機能と、
前記オリジナルのプログラムの前記並列実行に適した部分を前記水平型マイクロコードの起動命令に置換し、フェッチおよびデコード機能を備えた基本プロセッサで実行可能な実行プログラムに変換する機能とを有するコンパイラ。
【請求項２７】
オリジナルのプログラムから並列実行に適した部分を抽出して、複数の処理を同時実行可能な水平型マイクロコードに変換する処理と、
前記オリジナルのプログラムの前記並列実行に適した部分を前記水平型マイクロコードの起動命令に置換し、フェッチおよびデコード機能を備えた基本プロセッサで実行可能な実行プログラムに変換する処理とを実行可能な命令を有するプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、１命令で複数の処理を指定することができるＶＬＩＷ型のマイクロコード（水平型マイクロコード）により制御される、並列データ処理が可能な処理ユニットを有するデータ処理装置およびその制御方法に関するものである。
【０００２】
【従来の技術】
並列性を高めるプロセッサ・アーキテクチャとしてＶＬＩＷ（Ｖｅｒｙ　Ｌｏｎｇ　Ｉｎｓｔｒｕｃｔｉｏｎ　Ｗｏｒｄ）が知られている。この方式は、理想的には、並列処理を実行可能なリソースを備えた演算実行ユニットを構成するレジスタファイルと演算器群の間を、命令により自由に完全接続可能とし、並列処理もしくはパイプライン並列処理を高い自由度で実行できるアーキテクチャである。したがって、名称の示す通り非常に長い命令コードとなる特徴を有する。
【０００３】
【発明が解決しようとする課題】
しかしながら、非常に長い命令コードをフェッチし、デコードする必要があるので、プロセッサの命令コードのフェッチ部およびデコード部が大きくなり、また、設計が複雑になるという問題がある。そして、複雑になることによりフェッチおよびデコード部の消費電力も非常に大きくなる。
【０００４】
また、プログラムを構成する命令がすべて並列実行可能なものではないという問題がある。たとえば、４つの処理を同時実行可能なリソースを備えたＶＬＩＷ型のプロセッサであっても、常に４つの処理を同時実行するようなプログラムは生成できず、ＶＬＩＷの１つの命令あるいは命令セットに含まれる４つの命令あるいはサブ命令（本明細書においては、複数の処理を同時実行可能なＶＬＩＷあるいは水平型マイクロコードを構成し、１つの処理に対応する命令を明確に区別するときはサブ命令と称することにする。）としてＮＯＰの占める割合は高い。
【０００５】
したがって、ＶＬＩＷ型のプロセッサはハードウェアが大きくなり膨大な消費電力を必要とする割りに、プログラムの実行効率は向上しない。このため、並列度を上げることによるメリットと、ハードウェアを大きくして消費電力が増大するディメリットを勘案すると、２つの処理を同時実行可能な程度のプロセッサが実際的であり、それ以上の並列処理を実行可能なプロセッサを実用化することは経済的でない。したがって、３つあるいはそれ以上の処理を並列実行することによりループ処理などの実行速度を大幅に向上できるアーキテクチャはあっても、それを活かしたプロセッサを実用レベルで開発および製造することはほとんどない。
【０００６】
そこで、本発明においては、ＶＬＩＷ型のプロセッサに対して、同等の並列度を確保でき、その一方で、ＶＬＩＷ型のプロセッサよりも、遥かに小型で消費電力の小さなプロセッサのアーキテクチャを提供することを目的としている。そして、ループ処理などの並列実行に適した処理を、経済的なハードウェアにより並列実行可能とすることにより、実行速度を飛躍的に向上できる経済的なプロセッサを提供することを目的としている。
【０００７】
さらに、パイプライン並列処理において並列化のネックとなる分岐処理も並列実行可能なアーキテクチャおよび制御方法を提供し、並列データ処理装置の利用効率をさらに向上することも本発明の目的としている。
【０００８】
【課題を解決するための手段】
本発明においては、フェッチおよびデコード機能を備えた基本プロセッサと、水平型マイクロコードにより制御される並列データ処理ユニットとの組み合わせにより、並列処理に適した部分だけを水平型マイクロコードで実行可能とする。この構成であれば、ＬＳＩなどのデータ処理装置において実行するために与えられた仕様のうち、並列処理が可能な部分は水平型マイクロコードにより、ＶＬＩＷが持つ並列もしくはパイプライン並列のデータ処理が可能となり、並列処理に適していない部分は基本プロセッサによりシーケンシャルなデータ処理が可能となる。さらに、水平型マイクロコードを採用することにより、並列データ処理用の命令フェッチの機能とデコードの機能の回路の複雑性を排除し、消費電力を押えつつ効率よく並列処理を行うデータ処理装置を提供できる。
【０００９】
すなわち、本発明のデータ処理装置は、実行プログラムに含まれる命令をフェッチおよびデコードして実行する第１の処理ユニット（基本プロセッサ）と、複数の処理を同時実行可能な水平型マイクロコードにより制御される第２の処理ユニット（並列データ処理ユニット）とを有し、第１の処理ユニットは、実行プログラムに含まれる起動命令により第２の処理ユニットを起動する処理を実行可能であることを特徴とする。第１の処理ユニットの実行ユニットが、フェッチおよびデコードされた起動命令により第２の処理ユニットを制御しても良い。また、フェッチおよびデコードユニットが、第２の処理ユニットに対する命令を識別して、起動命令を第２の処理ユニットに提供しても良い。あるいは、第２の処理ユニットが、第１の処理ユニットがフェッチした命令を監視し、自己の、すなわち、第２の処理ユニットに対する起動命令により起動しても良い。
【００１０】
いずれの場合も、第１の処理ユニットを制御する実行プログラムにより、第２の処理ユニットの処理を第１の処理ユニットと共に協調制御できるので、実行プログラムは実質的に水平型マイクロコードで実行されるループ処理などの並列処理も含めてクロック単位で制御できる。特に、第１の処理ユニットのフェッチおよびデコードユニットから第２の処理ユニットに対して起動命令が供給される構成は、第１の実行ユニットにおける遅れを回避できるので、ネットワーク処理や画像処理などのリアルタイム性が要求される処理に適した構成である。
【００１１】
したがって、本発明のデータ処理装置で実行する処理がＣ言語などで与えられた場合は、オリジナルのプログラムから並列実行に適した部分を抽出して、複数の処理を同時実行可能な水平型マイクロコードに変換する工程と、オリジナルのプログラムの並列実行に適した部分を水平型マイクロコードの起動命令に置換し、フェッチおよびデコード機能を備えた基本プロセッサで実行可能な実行プログラムに変換する工程とを有するプログラム開発方法を採用することが有効である。すなわち、並列実行に適した部分を水平型マイクロコードに変換する機能と、並列実行に適した部分を起動命令に置換して実行プログラムに変換する機能の２つの機能を備えたコンパイラが必要となる。このコンパイラの機能は、適当なリソースを備えたコンピュータで実行可能なソフトウェア、すなわち、プログラムあるいはプログラム製品として適当な記録媒体に記録して提供される。もちろん、コンピュータネットワークを介して提供することも可能である。
【００１２】
並列実行装置あるいは並列データ処理ユニットである第２の処理ユニットは、複数の水平型マイクロコードを格納するコードメモリと、複数のレジスタおよび演算ユニットを備え、それらの接続および／または機能が水平型マイクロコードにより変更されるデータパス部と、コードメモリの実行アドレスを管理するアドレス制御部とを備えている。第１の処理ユニットがデータＲＡＭを備えている場合は、第１または第２の処理ユニットにデータＲＡＭと第２の処理ユニットのデータパス部とのインターフェイス用の複数のインターフェイスレジスタを設け、第１の処理ユニットと第２の処理ユニットの双方によりデータＲＡＭ内のデータに基づく、あるいはデータに対する処理を行えるようにすることが望ましい。
【００１３】
また、コードメモリに格納される水平型マイクロコードを書き換えることにより、並列実行ユニットの実行内容を変更することが可能となり、並列実行ユニットのリソースをさらに効率的に使用することができる。コードメモリは基本プロセッサである第１の処理ユニットにより書き換えることができる。すなわち、第１の処理ユニットは、実行プログラムに含まれる命令により第２の処理ユニットのコードメモリを書き換える処理を実行可能とすることができる。また、第２の処理ユニットのコードメモリを書き換える第３の処理ユニットを設けることが可能であり、基本プロセッサを第２の処理ユニットのコードメモリの管理から開放することによりデータ処理装置全体の処理速度を向上することができる。
【００１４】
本発明における基本プロセッサと並列実行ユニットとの組み合わせは、並列実行ユニットを小型にでき、フェッチおよびデコードユニットのハードウェア的なオーバーヘッドを削減できるので消費電力を大幅に削減できる。さらに、データ処理装置に搭載される並列実行ユニットは１つに限定されるものではないが、少なくとも基本プロセッサと並列実行ユニットの２つの処理ユニットがデータ処理装置に搭載されるので、これらの処理ユニットに供給されるクロックを制御することにより実質的な処理能力を落とさずに消費電力をさらに低減できる。特に、第１の処理ユニットは第２の処理ユニットを起動することができるので、第１の処理ユニットは第２の処理ユニットの起動のタイミングを把握できる。したがって、第１の処理ユニットが第２の処理ユニットへ供給されるクロック信号を制御することにより、データ処理装置全体の消費電力をさらに低減できる。
【００１５】
プログラムのうち、信号処理アルゴリズムを記述する部分の大半はループ処理であり、Ｃ言語記述のステップ数そのものはそれほど大きくはない。高速フーリエ変換、フィルター処理、自己相関演算処理、アダマール変換、ビタビ符号化などの信号処理は、特殊な演算を繰り返し実行する特徴を有し、Ｃ言語のソースコードにて数十から数百ステップの範囲にて収まるのが通例である。さらに、これらのステップには同時実行可能な演算が数多く含まれている。したがって、ループ処理は本発明の並列実行ユニットで実行するのに適した部分であり、並列度を上げて実行することにより大幅に処理速度も向上する。逆に、信号処理以外の部分、データインターフェイスや割り込み処理管理などの汎用的な部分は、ステップ数を必要とするが、このような部分については並列性またはパイプライン並列性を要しないのが一般的である。さらに、信号処理の部分は、ある程度安定しているのに対し、信号処理以外の部分は仕様変更などの影響を受けやすい。このため、汎用的な並列性をさほど必要としないＣ言語記述の部分については、フレキシブルな対応ができる基本プロセッサで実行することが望ましい。
【００１６】
このように、本発明のデータ処理装置においては、低消費電力で並列度の高い処理を実行できるので、通信やネットワークにて必要となる信号処理を行うのに適している。
【００１７】
したがって、並列データ処理装置である第２の処理ユニットは、ループ処理を効率よく実行できるアーキテクチャを備えていることが望ましい。このため、本発明の第２の処理ユニットには、水平型マイクロコードの実行回数をカウントする複数のループカウンタと、このループカウンタにより水平型マイクロコードの実行回数を制御するループ制御部とを設ける。水平型マイクロコードに、データパス部の接続を制御する情報を含むオペランドフィールドと、ループカウンタを選択する情報を含むループカウンタ選択フィールドとを設けることにより、水平型マイクロコード命令毎に選択されたループカウンタでループ処理の実行回数を極めて簡単に制御できる。
【００１８】
ループ制御部に、ループカウンタでカウントする回数をセットするループ制御レジスタを設け、第１の処理ユニットが実行プログラムに含まれる命令により、ループ制御レジスタの値をセットする処理を実行することにより、ループ回数もプログラムで制御できる。ループ制御レジスタに設定されるループ回数は、第２の処理ユニットのデータパスの処理結果であっても良い。
【００１９】
ループ処理中に条件分岐を伴う命令、すなわち「ｉｆ　ｔｈｅｎ　ｅｌｓｅ文」を伴う命令が含まれていると、条件の正否により実行される演算が変わるので並列性は一気に低下する。そこで本発明においては、並列処理ユニットである第２のデータ処理ユニットに、データパス部の各演算ユニットのコンディション・コードを格納可能なコンディションコードレジスタと、このコンディションコードレジスタと水平型マイクロコードに含まれる各演算ユニットの選択情報とを比較し、各演算ユニットからレジスタへの出力および／またはコンディションコードレジスタへのコンディション・コードの出力を制御する出力制御部を設ける。この構成であると、コンディションコードレジスタに格納された前のサイクルのコンディション・コード、または、コンディションコードレジスタに格納される同一サイクル内の各演算ユニットのコンディション・コードのいずれかと、水平型マイクロコードに含まれる各演算ユニットの選択情報とを比較して出力を制御できるので、条件の正否に関わらず演算は並列に実行できる。そして、実行した結果を出力するときに、出力制御部が出力の可否を判断することにより、その演算の前提となる条件の正否を反映できる。したがって、並列性を維持したまま条件分岐を伴う命令を実行できる。
【００２０】
さらに、コンディションコードレジスタに格納された前のサイクル（実行サイクル）のコンディション・コードだけでなく、コンディションコードレジスタに格納される同一サイクル内の各演算ユニットのコンディション・コードのいずれかを選択して水平型マイクロコードに含まれる選択情報と比較することにより、同一サイクル内、すなわち、並列演算された条件結果を反映して出力を制御できるのでさらに並列性の高い処理が可能な並列データ処理装置を提供できる。
【００２１】
水平型マイクロコードに含まれる各演算ユニットの選択情報は、たとえば、コンディション・コードとは無関係に選択されることを指示する第１の情報と、コンディション・コードを比較する各演算ユニットを指示する第２の情報と、比較するコンディション・コードの真偽を示す第３の情報と、比較するコンディション・コードのサイクルを示す第４の情報とである。第４の情報は、水平型マイクロコード命令の単位で設けても良く、水平型マイクロコードを構成するサブ命令毎に設けて良い。これら４つの情報により、分岐条件に支配される演算か否か、どの演算ユニットにより演算された分岐条件に支配されるか、その分岐条件の正否あるいは真偽のいずれで選択されるのか、さらに、前のサイクルの演算結果から同一サイクル内の演算結果が決まるので、条件分岐を伴う演算を含めたすべての演算を並列実行できる。
【００２２】
また、本発明の出力制御部は、個々の演算ユニットの出力の要否を、すべての演算ユニットのコンディション・コードのいずれかを参照して判断できる構成になっている。したがって、コンディションコードレジスタに格納された前のサイクルの演算結果のみならず、同じサイクル内の演算結果も参照して出力を選択することが可能であり、条件的にはシーケンシャルに実行される演算も広い範囲で並列実行することができる。
【００２３】
また、出力制御部は、コンディション・コードを、少なくとも真偽および選択または非選択、すなわち分岐条件により選択されたことを示す情報、および選択されなかったことを示す情報の少なくともいずれかを含めて示すことができる複数ビットのデータに変換してコンディションコードレジスタに出力する変換部を備えている。したがって、水平型マイクロコードに含まれる演算ユニットの選択情報をコンディションコードレジスタの内容に対応したビットマップとすることにより、選択情報をデコードせずにコンディションコードレジスタと比較できる。たとえば、１ビット分のコンディション・コードに着目した場合、この１ビットの真偽の情報と、分岐条件による選択・非選択を示す情報とは、２ビットのデータであらわすことができ、それらのデータを直に比較できる体系のビットマップ、すなわち、ビットマップにデコードされた情報を、水平型マイクロコードをコンパイルするときにセットする。これにより、出力制御部では、コンディション・コードを比較する処理においてオーバヘッドとなるデコード回路などのハードウェアは不用となり、簡易なハードウェアで高速に処理できる。
【００２４】
このように、本発明のデータ処理装置およびその制御方法では、分岐命令によるジャンプ実行を前提としないので、ＶＬＩＷの特徴であるパイプライン並列処理の流れを乱さずに分岐命令を含むループ処理を並列実行することができる。この結果、ＶＬＩＷが持つ並列もしくはパイプライン並列のデータ処理をループ演算で活用でき、さらに水平型マイクロコードを採用することにより命令フェッチ部とデコード部の回路複雑性を排除し、消費電力を押えつつ効率よくループ処理を行うことが可能となる。したがって、信号処理の分野では頻発するループ処理をＶＬＩＷ型の並列演算によって効率よく処理することが可能となる。
【００２５】
【発明の実施の形態】
図１に本発明のデータ処理装置の一例を示してある。このデータ処理装置１は、基本プロセッサ１０と、並列データ処理ユニット２０とを備えている。基本プロセッサ１０は、実行プログラム１１を格納したコードＲＡＭ１２と、コードＲＡＭ１２から実行プログラム１１の命令をフェッチおよびデコードするフェッチ・デコード部１３と、デコードされた命令にしたがって演算処理を実行する実行ユニット１４と、演算結果や処理対象のデータが一時的に格納されるデータＲＡＭ１５を備えている。この基本プロセッサ１０は、たとえば、ＲＩＳＣ型の汎用プロセッサと同等の構成であり、フェッチ、デコード、演算、ライトバックなどの処理をパイプライン方式で行う機能を備えている。
【００２６】
並列データ処理ユニット２０は、複数の処理を同時実行可能な水平型マイクロコードにより制御される並列実行部であり、複数の水平型マイクロコード２１を格納するコードメモリ２２と、複数のレジスタおよび演算ユニットを備え、それらの接続および／または機能が水平型マイクロコード２１により変更されるデータパス部２３と、コードメモリ２２の実行アドレスやコードメモリ２２への入出力を管理する機能を備えた制御部２４を備えている。データパス部２３は、並列処理を実行可能なハードウェアとして複数の汎用レジスタおよび複数の演算器（ＡＬＵ）を備えており、これらの接続を切り替える複数のセレクタおよび配線群により、レジスタとＡＬＵを中心とするネットワークが形成されている。そして、データパス部２３のネットワークの接続と、ＡＬＵの演算機能は水平型マイクロコード２１により切り替えて設定される。
【００２７】
並列データ処理装置２０は、データインターフェイスレジスタ群２８を介してレジスタデータバス３８で基本プロセッサ１０のデータＲＡＭ１５とデータ交換できるようになっており、データパス部２３はデータＲＡＭ１５から供給されたデータを処理してデータＲＡＭ１５に出力することができる。また、本例の並列データ処理装置２０の制御部２４は、コードメモリ２２の実行アドレスを管理するアドレス制御部２５に加え、データパス部２３におけるループ処理を制御するループ制御部２６と、データパス部２３において並列演算された出力を制御する出力制御部２７とを備えている。これらの構成は以下で詳しく説明する。
【００２８】
データ処理装置１の基本プロセッサ１０と並列データ処理ユニット２０とは幾つかの信号線あるいはバスで接続されている。まず、基本プロセッサ１０のフェッチ・デコード部１３は、実行プログラム１１から並列データ処理ユニット２０を起動する命令、たとえば、「Ｖ＿ＬＯＯＰ＿ＩＮＳＴ１」をフェッチすると、命令バス３１を介して並列データ処理ユニット２０の制御部２４に対して起動信号あるいは起動命令φｓを出力する。この起動命令φｓを並列データ処理ユニット２０の制御部２４がデコードして、コードメモリ２２に格納された水平型マイクロコード２１で規定された処理を開始する。制御部２４は、処理が終了すると、割り込み信号線３２を介して割り込み信号φｉを基本プロセッサ１０に送り、処理の終了を基本プロセッサ１０に伝達する。それにより、基本プロセッサ１０は、並列データ処理ユニット２０の処理結果を基に後続の処理を行う。
【００２９】
基本プロセッサ１０のデータＲＡＭ１５には、並列データ処理ユニット２０のコードメモリ２２にダウンロードするための水平型マイクロコード２１あるいは複数の水平型マイクロコード２１からなるマイクロプログラム２９が用意されており、データバス３８を通してコードメモリ２１のマイクロコード２１を変更することができる。したがって、並列データ処理ユニット２０の処理内容は、コードメモリ２２を書き換えることにより変更することが可能であり、基本プロセッサ１０は実行プログラム１１にしたがって書き換える処理を行う。
【００３０】
このため、本例のデータ処理装置１では、並列データ処理ユニット２０により複数の異なる処理を実行することができる。そして、並列データ処理ユニット２０においては複数の演算が並列に同時実行されるために、ループ処理などのステップ数は少なくても処理時間が費やされる複数種類の信号処理が短時間で効率よく行われる。また、信号処理以外のデータインターフェイスや割り込み処理管理などの汎用的な処理は、ステップ数を必要とするが並列性がないか、あるいは並列処理をしても処理速度の向上は望めないので、消費電力の少ない基本プロセッサ１０で行うことが可能である。
【００３１】
このように基本プロセッサ１０との組み合わせで動作する並列データ処理ユニット２０の制御回路２４として必要な機能は、ファンクションの起動、終了、コードメモリ２２へのデータ出し入れ、水平型マイクロコード２１のアドレス管理、アドレステーブル参照によるループ処理と分岐処理、演算器の演算結果コンディション・コードの結果に基づく演算器への書き込み及び汎用レジスタへの書き込み制御となる。この結果、制御に関して極めて軽いステートマシンが必要とされるだけであり、並列処理を行う高速データ処理ユニットが小面積で具現できる。この極めて軽いステートマシンで制御できる点が、水平型マイクロコードで制御される並列データ処理ユニット２０において、複数処理が記述されたＶＬＩＷ命令をフェッチおよびデコードして処理を進める汎用のＶＬＩＷプロセッサと大きく異なる点である。その一方で、水平型マイクロコードによりデータパス部２３のレジスタ群と演算器群の接続が随時変更できる点が従来の固定的な配列演算であるベクトル・プロセッサ型のデータパスを備えた処理ユニットとも異なり、汎用性をある程度確保しながら並列処理により実行速度を高めることができる処理装置となっている。
【００３２】
まとめると、本例のデータ処理装置１は、並列度の高いＶＬＩＷ型である必要のない基本プロセッサ１０に、水平型マイクロコード２１による制御機構を持つ並列度の高いＶＬＩＷデータパス部（並列データ処理ユニット）２０を装着させ、水平型マイクロコード２１の中味は基本プロセッサ１０のデータＲＡＭ１５からロードさせることによりＶＬＩＷによる並列演算またはパイプライン並列演算を最も効果的に実行するアーキテクチャであると言える。したがって、本例のデータ処理装置１は、低消費電力でコンパクトでありながら高速処理が可能な集積回路装置となっている。
【００３３】
図２に示したデータ処理装置２は、本発明の異なる例である。このデータ処理装置２も、基本プロセッサ１０と並列データ処理ユニット２０を備えており、上述したデータ処理装置１と同様に低消費電力で高速処理が可能な構成である。さらに、並列データ処理ユニット２０のコードメモリ２２に対して水平型マイクロコード２１を書き換える機能を備えた管理ユニット３５を備えている。この管理ユニット３５は、マイクロプログラム２９が格納されたプログラムメモリ３６と、入出力などを制御する制御部３７を備えている。このため、管理ユニット３５により、基本プロセッサ１０に変わって並列データ処理ユニット２０の処理内容の変更をサポートできる。この構成は、制御ユニット３５が増えた分、ハードウェアは増加する。しかしながら、基本プロセッサ１０が並列データ処理ユニット２０の処理内容の変更を行う処理から開放され、それによるオーバーヘッドを除くことができる。このため、基本プロセッサ１０の処理効率が向上し、データ処理装置全体では、処理速度が向上するというメリットがある。
【００３４】
さらに、データ処理装置２は、並列データ処理ユニット２０に対するクロック信号φｃの供給を制御できるクロック制御ユニット３４を備えている。このクロック制御ユニット３４は、基本プロセッサ１０から制御線３３により供給されるオンオフ信号あるいはオンオフ命令φｏにより、基本プロセッサ１０から命令が並列データ処理ユニット２０に出されて並列データ処理ユニット２０が稼動するときだけ並列データ処理ユニット２０に対してクロック信号φｃを供給する。したがって、データ処理装置２を基本プロセッサ１０とクロック信号がオンオフできる並列データ処理ユニット２０との組み合わせを基本とするアーキテクチャとすることにより、クロック信号の制御によりさらに省電力を望みうる構成となる。
【００３５】
これらのデータ処理装置１および２（以降では、データ処理装置１を代表して説明する）では、基本プロセッサ１０と並列データ処理ユニット２０とが協働して１つのアプリケーションプログラムを実行する。このため、１つのアプリケーションプログラムを２つのモードを備えたコンパイラでコンパイルして基本プロセッサ用の実行プログラム１１と、並列データ処理ユニット２０の水平型マイクロコード２１とを生成する。
【００３６】
図３に、実行プログラム１１および水平型マイクロコード２１を生成する過程を示してある。ステップＡにおいてデータ処理装置１０で実行するオリジナルのプログラムＣｏが与えられる。オリジナルのプログラムＣｏは、ループ処理ＣＬＯＯＰなどの並列実行に適した部分と、その他のデータインターフェイス処理や割り込み処理などの汎用的な処理Ｃ１およびＣ２の部分とを備えており、ステップＢでオリジナルのプログラムＣｏから並列実行に適した部分が抽出される。本例では、並列実行に適した部分としてループ処理の部分ＣＬＯＯＰが分離される。ループ処理ＣＬＯＯＰが抽出されたプログラムは、処理ＣＬＯＯＰを開始する起動命令と処理ＣＬＯＯＰが終了したことを検出する命令とに置き換えられた実行用のソースプログラムＣｅとなる。すなわち、処理ＣＬＯＯＰとソースプログラムＣｅとの間は、ファンクション・コールとリターンという形で命令インターフェイスが取られる。もしくは、並列データ処理ユニット２０のインターフェイスレジスタにある値を書き込み、これをもって並列データ処理ユニット２０の処理を開始させる形態も可能である。
【００３７】
次に、ステップＣでこれらのプログラムがコンパイルされる。コンパイラ４０は、基本プロセッサ用の実行プログラムを生成する第１のステップあるいは機能Ｃｃ１と、並列データ処理ユニット用に水平型マイクロコードを生成する第２のステップあるいは機能Ｃｃ２とを備えている。第１の機能Ｃｃ１は汎用のＣコンパイラであり、この第１のコンパイラＣｃ１は、汎用的な処理Ｃ１およびＣ２を含み、Ｃ言語で記述したプログラムＣｅを基本プロセッサ１０の実行プログラム（オブジェクトプログラム）１１に変換する。第２の機能Ｃｃ２も、ある種のＣコンパイラであり、この第２のコンパイラＣｃ２は、ステップＢで抽出された繰り返し処理が主となるＣＬＯＯＰの部分を記述するＣ言語のプログラムを並列実行可能なように水平型マイクロコード２１あるいは水平型マイクロプログラム２９に変換する。
【００３８】
これら第１のコンパイラＣｃ１および第２のコンパイラＣｃ２の機能は、適当なリソースを備えたコンピュータで実行可能なプログラムあるいはプログラム製品として提供される。すなわち、本例のデータ処理装置用のコンパイラは２つのモードを持つことになり、出力された基本プロセッサのオブジェクトコード１１と、繰り返し信号処理などのアルゴリズムが記述された並列処理用の水平型マイクロコードとの間はファンクション・コールとリターンという形でインターフェイスが取られる。また、これらの機能Ｃｃ１およびＣｃ２は、異なるプログラム製品として提供されても良いし、１つのプログラム製品として提供されても良い。
【００３９】
なお、本例の並列データ処理ユニット２０においては後述するようにループカウンタでループを処理するので、第２のコンパイラＣｃ２によりループ処理ＣＬＯＯＰのコンパイル結果は、水平型マイクロコード２１に加え、ループ処理用のカウンタの設定値と、カウントアップしたときの分岐用アドレステーブルとなる。　すなわち、水平型マイクロコード２１は、ループ処理の間、データパス部２３のレジスタファイルと演算器群の接続を、セレクタ群を経由して決定し、並列もしくはパイプライン並列処理の実行を指示する。分岐用アドレステーブルはループ処理が終了した際の戻り番地が格納されたテーブルであり、通常、レジスタファイルに格納され、制御回路２４の内部に設置される。
【００４０】
このようにしてアプリケーションプログラムＣｏを水平型マイクロコードを用いて並列実行可能にすると、並列データ処理ユニット２０で並列実行する内容は、サブルーチンの形態とし、あらかじめ実行可能状態で水平型マイクロコードＳＲＡＭ（コードメモリ）２２にロードしておき、基本プログラム（実行プログラム）１１のほうから起動すればよい。したがって、基本プログラム１１そのものを命令長の長いＶＬＩＷとする必要が無い。この結果、基本プロセッサ１０において常時、フェッチおよびデコードの対象となる基本命令に関しては、ＶＬＩＷ形式を取る必要はない。一方、水平型マイクロコード化された処理は、データパス部２３でＶＬＩＷ化された状態で、並列もしくは並列パイプライン処理の形で実行される。したがって、ＶＬＩＷ方式のプロセッサのように、大型で消費電力の大きなフェッチおよびデコード部分を無くし、ＶＬＩＷ方式のプロセッサと同程度の並列度で並列パイプライン処理を実行することができるコンパクトなデータ処理装置１０を提供することが可能となる。
【００４１】
図４に並列データ処理ユニット２０の一例を示してある。また、図５に、並列データ処理ユニット２０を部分的にさらに詳しく示したブロック図を示してある。この並列データ処理ユニット２０のデータパス部２３は、並列に動作可能な４つの演算ユニット５１を備えており、コードメモリ２２に格納された１つの水平型マイクロコード２１により、４つの処理あるいはサブ命令を同時実行できる。個々の演算ユニット５１は、図５に示すように、１つのＡＬＵ５１ｏと、入力レジスタ５１ａおよび５１ｂと、入力レジスタ５１ａおよび５１ｂへの入力を選択する２段のセレクタ５１ｃ、５１ｄ、５１ｅおよび５１ｆを備えている。
【００４２】
演算器（ＡＬＵ）５１ｏは、乗算器、加算器などとして機能し、各演算器５１ａには、それに対応するコンディションコード格納レジスタも存在する。ＡＬＵ５１ｏと入力レジスタ５１ａおよび５１ｂは、固定的に接続されており接続の自由はない。これに対し、１段目のセレクタ５１ｃおよび５１ｄは、汎用レジスタ群（汎用レジスタファイル）５２から入力レジスタ５１ａおよび５１ｂを選択でき、２段目のセレクタ５１ｅおよび５１ｆは、さらに、自己および他のＡＬＵ５１ｏの出力も含めて入力レジスタ５１ａおよび５１ｂへの入力を選択することができる。
【００４３】
個々の演算ユニット５１の出力は、自己も含めた演算ユニット５１の入力と、汎用レジスタ群５２と、データ出力部５３と、アドレス出力部５４へ切り替えて接続できる。また、個々の演算ユニット５１の出力は、制御回路５４のループ制御部２６へもループ回数の初期セットのために出力することができる。さらに、個々の演算ユニット５１の出力は、条件判断のために出力制御部２７にも出力することができる。
【００４４】
汎用レジスタ群５２は、複数、たとえば８つの汎用レジスタ５２ａと、それに対する入力を選択するセレクタ５２ｂと、汎用レジスタ５２ａに対するライトイネーブル信号ＷＥを選択するセレクタ５２ｃとを備えている。それぞれの汎用レジスタ５２ａには、演算ユニット５１の出力だけではなく、インターフェイスレジスタ群２８の入力データレジスタ２８ａからの出力も選択できる。各汎用レジスタ５２ａへの書き込みは、ライトイネーブル信号ＷＥにより決定されるが、本例の並列データ処理ユニット２０では、各々の演算ユニット５１で演算した結果のいずれかで汎用レジスタ５２ａへの書き込みを制御することができる。このため、セレクタ５２ｃを設けている。
【００４５】
データ出力部５３は、汎用レジスタ群５２の出力または演算ユニット５１の出力のいずれかを選択してインターフェイスレジスタ群２８のデータ出力レジスタ２８ｂに出力する。また、アドレス出力部５４は、汎用レジスタ群５２の出力または演算ユニット５１の出力のいずれかを選択してインターフェイスレジスタ群２８のアドレス出力レジスタ２８ｃに出力する。さらに、水平型マイクロコード２１は、ライトまたはリードするタイミングを制御する信号をデータＲＡＭ制御レジスタ２８ｄに出力する。
【００４６】
したがって、本例の並列データ処理ユニット２０は、インターフェイスレジスタ群２８とデータバス３８を介して基本プロセッサ１０の汎用レジスタまたはデータＲＡＭ１５のデータを並列データ処理ユニット２０のデータパス部２３に入力し、演算処理して基本プロセッサ１０にフィードバックすることができる。すなわち、基本プロセッサ１０の汎用レジスタまたはデータＲＡＭ１５から読み込むアドレスをアドレス出力部５４から出力し、入力データレジスタ２８ａを介してデータを読み込む。一方、書き込むときは、アドレス出力部５４からアドレスを出力してデータ出力部５３からデータを出力し、データＲＡＭ制御レジスタ２８ｄを介して出力される基本プロセッサ宛のＷＥ信号によりデータＲＡＭ１５または汎用レジスタに書き込まれる。
【００４７】
これらの演算ユニット、レジスタおよびその他の回路要素を含むデータパス部２２の接続およびＡＬＵ５１ｏの演算内容は、水平型マイクロコード２１により制御される。したがって、水平型マイクロコード２１により設定されたデータフローグラムを基本プロセッサ１０のデータＲＡＭ１５から供給されたデータが流れて処理され、基本プロセッサのデータＲＡＭ１５にフィードバックする処理を行うことができる。
【００４８】
データパス部２２を制御する制御ユニット２４は、ループを制御するループ制御部２６と、アドレスを制御するアドレス制御部２５と、条件判定による出力を制御する出力制御部２７とを備えている。基本プロセッサ１０からは、レジスタなどに値がセットされ、起動条件が揃えられると、並列データ処理ユニット２０でデコードできるＶＵ命令で基本プロセッサ１０からコールされることにより起動がかけられる。アドレス制御部２５は、起動ＶＵ命令をデコードして、所定のアドレスの水平型マイクロコード２１をアクティブにする。そして、所定のステプの処理が終了すると、終了ＶＵ命令あるいは割り込み命令を基本プロセッサ１０に供給して基本プロセッサ１０の側で処理が継続される。たとえば、アドレス制御部２５は、シーケンサーなどのＦＳＭである。水平型マイクロコード２１を実行中は、これらの制御部は水平型マイクロコード２１に含まれている命令（サブ命令）およびパラメータに従ってデータパス部２２を制御する。
【００４９】
図６に水平型マイクロコード２１のフォーマットの一例を示してある。１つの水平型マイクロコード２１は、４つのサブ命令を記述する命令フィールド５５と、条件判断のときに参照するサイクルを規定するサイクルフラグフィールド５６と、ループカウンタを選択するループカウンタ選択フィールド５７を備えている。各々の命令フィールド５５は、さらに、操作を指定するオペランドフィールド５５ａと、使用するレジスタを指定するレジスタフィールド５５ｂと、データパス部２２のどの演算ユニット５１で処理を実行するかを指定するスロット番号フィールド５５ｃと、条件判断のときにＡＬＵ５１ａのコンディション・コードと比較するビットマップφｂｍが記述される選択条件フィールド５８とを備えている。ビットマップφｂｍは、１０ビットのデータで、＃０〜＃４までの５種類の真偽いずれかで選択される処理であるかを示す情報を備えている。
【００５０】
図７に、水平型マイクロコード２１のループカウンタ選択フィールド５７により、ループ回数が制御される構成を示してある。水平型マイクロコード２１のループカウンタ選択フィールド５７には数ビットが格納でき、ループレジスタを指定する。たとえば、２ビットなら、００：ループなし、０１：ループレジスタ＃１指定、１０：ループレジスタ＃２指定、１１：ループレジスタ＃３指定、といった具合である。
【００５１】
ループ制御回路２６は、３つのループカウンタ２６ａを備えており、水平型マイクロコード２１を複数回実行するときは、それを制御するループカウンタ２６ａが選択される。各々のループカウンタ２６ａを備えた回路２６Ｘはそれぞれ独立しており、カウントダウンされるループレジスタ２６ａ、ループ初期値レジスタ２６ｂ、デクリメンタ２６ｃと、カウンタ２６ａがカウントアップ（本例では０）になると初期値レジスタ２６ｂの値でループカウンタ２６ａをリセットする初期化回路２６ｄを備えている。インクリメンタを採用して、ループカウンタ２６ａと初期値レジスタ２６ｂとの値が一致したときにカウントアップする回路ももちろん可能である。
【００５２】
また、アドレス制御部２５はＦＳＭで構成され、ループレジスタ（ループカウンタイ）２６ａの番号に対応したループ処理開始アドレス（戻り値アドレス）を格納する分岐アドレステーブル２５ａを備えている。初期設定では、この分岐アドレステーブル２６ａに、先に説明した並列データパス専用のコンパイラＣｃ２により作成され、水平型マイクロコード２１と共に初期値レジスタ２６ｂにロードされる。したがって、ループカウンタ２６ａの初期値は、並列データ処理ユニット２０が実行プログラム１１に基づきファンクション・コールされる段階か、それ以前にループ回数として初期値レジスタ２６ｂに設定される。
【００５３】
データパス部２３がループ処理を開始すると、まず、水平型マイクロコード２１のループカウンタ選択フィールド５７の値によりカウンタ２６ａが選択される。カウンタ２６ａは初期設定されているので、水平型マイクロコード２１が実行されると、ループカウンタ選択フィールド５７により関連付けられているループレジスタあるいはループカウンタ２６ａがデクリメントされる。そして、カウンタ２６ａが　“０”になったら、アドレス制御部２５のＦＳＭ制御部２５ｂが０検出の信号を捉えて、アドレス分岐テーブル２５ａに格納された、ループレジスタ２６ａに対応したループ開始アドレスあるいは戻り値アドレスを、次の水平型マイクロコード２１のアドレスとしてコードアドレス出力部２５ｃから出力する。同時に、ループレジスタ２６ａをループ初期値レジスタ２６ｂの値に再設定して次のループ処理に備える。
【００５４】
この結果、本例の並列データ処理ユニット２０においては、ループ処理を実行する際に、ループ終了アドレスと実行アドレスの比較によるループ処理判定を行わずに済む。したがって、アドレス同士を比較するような大きな比較器を必要としないメリットがある。アドレス・コンパレータはビット数が多いので、遅延制御のクリティカル・パスとなる可能性があり、それによって処理速度が低下する可能性がある。これに対し、本例のループカウンタを選択する方法であると、ビット数は非常に少ないので、処理速度に影響を与える可能性はない。
【００５５】
また、本方式によれば、複数のループ処理がネスト構造になっても、そのループ回数の制御は非常に簡単である。ループ内に存在するネストループ数といった情報を必要とせず、異なるループカウンタ２６ａを指定してループ回数を制御するだけでネスト構造に対応できる。このため、本例であると、３重のネスト構造まで、１重のループ処理と同様の汎用的な制御で実行することができる。
【００５６】
なお、パイプライン動作には初期設定が必要であり、ネストされたループ記述において各ループで必要とされるメモリアドレス等のリソースが異なる場合においては先頭の段階において各ループ処理のイニシャライズを行うのが有効である。
【００５７】
図８に、ループ処理を水平型マイクロコード化して並列データ処理ユニット２０で実行する様子を示してある。基本プロセッサ１０を制御する実行プログラム１１では、ステップ６１で並列データ処理ユニット２０を初期設定する。この例では、命令６１ａで、データＲＡＭ１５に格納されたマイクロコードプログラム２９の中から、並列データ処理ユニット２０のコードメモリ２２へロードする水平型マイクロコード２１のアドレスを設定する。また、命令６１ｂで、並列データ処理ユニット２０のコードＲＡＭ２２に、水平型マイクロコード２１を格納するためのアドレスを並列データ処理ユニット２０のアドレスレジスタへ転送する。命令６１ｃで、コードメモリ２２へロードするデータ、すなわち、水平型マイクロコード２１をレジスタに設定する。さらに、命令６１ｄで、並列データ処理ユニット２０の、水平型マイクロコード２１を格納するためのデータレジスタへデータを転送する。これを必要なビット幅だけ繰り返し、命令６１ｅで、コードメモリ２２の指定されたアドレスに水平型マイクロコード２１を書き込む。これを並列データ処理ユニット２０で処理を行うために必要なステップ数だけ繰り返す。これにより、並列データ処理ユニット２０のコードメモリ２２は初期設定される。
【００５８】
したがって、このステップ６１において、第１の処理ユニットである基本プロセッサ１０は、実行プログラム１１に含まれる命令により第２の処理ユニットである並列データ処理ユニット２０のコードメモリ２２を書き換えることができ、並列データ処理ユニット２０により様々な処理を実行することができる。図２に示したデータ処理システム２においては、並列データ処理ユニット２０のマイクロコードを更新する作業は、基本プロセッサ１０からの命令により管理ユニット３５が実行する。したがって、ステップ６１のレジスタを用いた転送処理のほとんどは、管理ユニット３５と並列データ処理ユニット２０との間で行われる処理となり、この間、基本プロセッサ１０に異なる処理を実行することができる。このため、基本プロセッサ１０を、並列データ処理ユニット２０の処理内容の変更を行う処理、すなわち、ステップ６２のほとんどの処理から開放でき、データ処理装置２の処理速度を向上できる。
【００５９】
次に、ステップ６２で、ループ処理を実行するために、初期値設定レジスタ（ＶＲ＿ＬＯＯＰ１〜３）２６ｂに初期値を設定する。命令６２ａは、＃１の初期値レジスタＶＲ＿ＬＯＯＰ１に値を転送し、命令６２ｂは＃２の初期値レジスタＶＲ＿ＬＯＯＰ２、命令６２ｃは＃３の初期値レジスタＶＲ＿ＬＯＯＰ３に値を転送する。このステップ６２において、第１の処理ユニットである基本プロセッサ１０は、実行プログラム１１に含まれる命令により、ループ制御レジスタである初期値設定レジスタ２６ｂに、予めデータＲＡＭ１５に格納されたループ回数または実行プログラム１１に含まれる所望のループ回数をセットすることができる。
【００６０】
さらに、命令６２ｄでは、その他のパラメータが必要であれば、それもレジスタ転送する。そして、命令６２ｅで、ループレジスタを使用する水平型マイクロコード２１を起動する命令が実行される。この命令「Ｖ＿ＬＯＯＰ＿ＩＮＳＴ１」は起動命令φｓとして、基本プロセッサ１０のフェッチ・デコードユニット１３から並列データ処理ユニット２０に供給され、並列データ処理ユニット２０が処理を開始する。
【００６１】
図８に示すように、並列データ処理ユニット２０で実行される処理は３重のネストループになっている。基本プロセッサ１０が実行プログラム１１により並列データ処理ユニット２０の水平型マイクロコード２１と初期値レジスタ２６ｂを設定し、スタートをかけることにより、それぞれのループ処理を行う水平型マイクロコード２１は異なるループカウンタ２６ａで制御されるので、簡単にネスト構造のループ処理を制御できる。また、それぞれのループ処理では、水平型マイクロコード２１により、４つの処理が同時あるいは並列に実行されるので、ループ処理を高速で実行できる。
【００６２】
基本プロセッサ１０は、ステップ６３で、並列データ処理ユニット２０の処理が終了するのを待って次の処理を開始する。並列データ処理ユニット２０がループ処理を行っている間、基本プロセッサ１０は異なる処理を並列して行うことも可能である。ステップ６３では、命令６３ａで並列データ処理ユニット２０からループ処理完了を示す信号（ＶＵＷＡＩＴ信号）が来るのを待つ。次に、命令６３ｂ〜６３ｄで、並列データ処理ユニット２０の処理結果を基本プロセッサ１０に転送する。
【００６３】
並列データ処理ユニット２０で実行する「ループ文」の中には当然「ｉｆ　ｔｈｅｎ　ｅｌｓｅ文」が記述され得る。本例の並列データ処理ユニット２０においては、「ｔｈｅｎ節」の処理と「ｅｌｓｅ節」の処理とを選択して行うのではなく、どちらも実行する。すなわち、ループ処理を水平型マイクロコード２１に変換するコンパイラＣｃ２では、条件分岐の処置に際し、ふたつの選択可能な処理が用意され、まず、「ｔｈｅｎ節」と「ｅｌｓｅ節」とどちらも実行される。そして、「ｉｆ条件」の「真」・「偽」判定の結果、選択されなかった「節」の実行ステートメントは、演算ユニット５１の段階では実行しているが、その出力を最終的にはコンディションコードレジスタや汎用レジスタなどに書き込みを行わないことで条件分岐を実行する。もう１つの方法、すなわち、「ジャンプ文」を生成して分岐させることも可能である。選択肢を同時に実行する方法は「ｔｈｅｎ節」や「ｅｌｓｅ節」が浅い場合に有効であり、ジャンプ文で分岐する方法は、「ｔｈｅｎ節」や「ｅｌｓｅ節」が長い場合やアンバランスな場合に有効である。
【００６４】
図９に、並列データ処理ユニット２０に用意された出力制御部２７の概略構成を示してある。この並列データ処理ユニット２０においては、出力制御部２７で「ｉｆ条件」の演算を行う演算ユニット５１の結果により他の演算ユニット５１の出力を制御することにより、「真」・「偽」判定の結果をデータパス部２３の出力として反映できる。このため、選択肢、すなわち、「ｔｈｅｎ節」および「ｅｌｓｅ節」を同時に実行することが可能となり、条件分岐により並列パイプライン処理の効率が低下するのを防止できる。
【００６５】
本例の出力制御部２７は、４つの演算ユニット５１のそれぞれのＡＬＵ５１ａにおいて演算された「真」・「偽」の判定結果１ビットをコンディション・コード（ＣＣ）φｃｃとしてコンディションコードレジスタセット（ＣＣＲＳ）７１に出力する４つのコンディション・コード（ＣＣ）出力部７２を備えている。ＡＬＵ５１ａから出力されるコンディション・コードは１ビットに限定されるものではないが、本例では、真偽を示す１ビット分のコンディション・コードに着目して説明する。したがって、本発明は１ビットのコンディション・コードを出力するＡＬＵなどの演算ユニットを備えたデータ処理装置に限定されるものではなく、複数のビットのコンディション・コードが出力されるデータ処理装置においても、本発明は適用可能である。
【００６６】
各々のＣＣ出力部７２は、１ビットのコンディション・コードφｃｃを極性反転させて２ビットのコンディション・コード（リバイスド・コンディション・コードＲＣＣ）φｒｃにする変換回路７３と、その極性反転させた２ビットのＲＣＣφｒｃをＣＣＲＳ７１に出力するか否かを選択する出力選択部７４とを備えている。したがって、ＣＣＲＳ７１には、先の「ｉｆ条件」で演算ユニット５１が選択されていなければ「００」のＲＣＣφｒｃが、その演算ユニット５１に対応するＣＣＲＳ７１のアドレスに格納される。したがって、演算ユニット５１の番号と、ＣＣＲＳ７１のアドレス（番地）は１対１に対応している。たとえば、＃１の演算ユニット５１の出力はＣＣＲＳ７１のアドレス＃１（１番地）に格納される。一方、選択されており、演算ユニット５１の演算結果が「真（１）」であれば、「１０」のＲＣＣφｒｃが格納される。また、演算結果が「偽（０）」であれば「０１」のＲＣＣφｒｃが格納される。
【００６７】
２ビットのＲＣＣφｒｃを格納するＣＣＲＳ７１は所謂プレディケートレジスタであるが、ＡＬＵの番号とＣＣＲＳアドレスを１対１に対応させるなど、本来のプレディケートレジスタのような汎用性はないので、ＣＣＲＳ７１と称して説明する。また、ＣＣＲＳ７１は、ＣＣＲＳ＃０（０番地）に架空ＡＬＵのコンディション・コードを格納している。この０番地のＲＣＣは、プログラム全体の制御を行うものでＡＮＤ論理の場合には真に相当する「１０」があらかじめ格納されている。したがって、先行する「ｉｆ条件」に左右されずに実行される命令は、このＣＣＲＳ７１の０番地のＲＣＣと比較することにより必ず実行させるようにすることができる。このＣＣＲＳ＃０については２ビットの「１０」を１ビットのデータ「１」で置き換えることも可能である。
【００６８】
ＣＣＲＳ７１に格納された各演算ユニット５１のコンディション・コードφｒｃは、次の演算ユニット５１の演算結果を出力するか否かを判断するために、出力選択回路７４にフィードバックされる。本例の出力制御部２７は、さらに、ＣＣＲＳ７１に格納されたコンディション・コードφｒｃの代わりに、格納される前のコンディション・コードφｒｃを出力選択回路７４にフィードバックできるコンディション・コード選択回路（ＣＣ選択回路）７５を備えている。このＣＣ選択回路７５は水平型マイクロコード２１のサイクルフラグフィールド５６のデータにより制御され、サイクルフラグが立っていると、ＣＣＲＳ７１に出力されるＲＣＣφｃｒを出力選択回路７４に供給する。この結果、出力選択回路７４では、同一サイクル内の他の演算ユニット５１の演算結果を参照することが可能となり、条件分岐の演算と、その演算結果で出力が左右される演算を同じサイクルで並列に実行することが可能となる。したがって、条件分岐を含む演算をさらに効率よく並列実行することが可能となり、並列データ処理ユニット２０における処理速度をさらに向上できる。なお、ＣＣＲＳ７１の０番のコンディション・コードは、演算ユニット５１から出力されないので、いずれの場合もＣＣＲＳ７１から出力選択部７４に供給される。
【００６９】
図１０に出力選択回路７４の概略構成を示してある。この出力選択回路７４は、水平型マイクロコード２１の各命令フィールド５１に記述された１０ビットのビットマップφｂｍと、０番から４番までの２ビットのＲＣＣφｒｃとをビットバイビットで論理積を演算し、それらの論理和を演算する第１の判定回路７６を備えている。この第１の判定回路７６では、ビットマップφｂｍのビット列のうち「１」にセットされているアドレスのいずれかと、全ＲＣＣφｒｃ（１０ビット）のビット列の「１」にセットされたアドレスのいずれかが一致すると、その出力選択回路７４が選択されたことを判定する。すなわち、前のサイクルまたは同一サイクル内の「ｉｆ条件」の演算で、その出力選択回路７４に対応する演算ユニット５１が選択されたので、その演算ユニット５１の出力は汎用レジスタ５２ａまたはＣＣＲＳ７１に書き込むことが許可される。
【００７０】
出力選択回路７４は、さらに、第１の判定回路７６により選択されたときに、水平型マイクロコード２１の各命令フィールド５１に記述されたオペランドにより、汎用レジスタ５２ａへの書き込みを許可するＷＥ信号φｗｅを出力するか、ＣＣＲＳ７１へコンディション・コードを書き込むことを許可する信号φｃｅを出力するかを判断する第２の判定回路７７を備えている。「ｉｆ条件」の演算で選択された処理が条件比較、すなわち、「ｉｆ条件」の演算であれば、出力選択回路７４からはＲＣＣの書き込みを許可する信号φｃｅがＣＣ変換回路７３に供給され、２ビットに変換されたＲＣＣφｒｃが出力される。一方、「ｉｆ条件」の演算で選択された処理が汎用レジスタ５２ａへの出力を伴う処理、たとえば、算術演算命令や転送命令であれば、出力選択回路７４から汎用レジスタ群５２へライトイネーブル信号φｗｅが供給される。この結果、演算ユニット５１で並列的に処理された結果が、その演算ユニット５１を選択する「ｉｆ条件」の演算結果により出力あるいは出力されないことにより、「ｉｆ条件」で分岐（ジャンプ）して処理を実行したのと同じ結果を並列処理で得ることができる。
【００７１】
図１１に、「ｉｆ　ｔｈｅｎ　ｅｌｓｅ文」のツリー構造を有しつつ、すべての命令をサブ命令として水平型マイクロコード２１に含めて並列実行し、条件分岐により選択された正しい経路のみの実行結果が出力される例を示す。太線が実行時に選択される経路であるとする。
【００７２】
図１２は、この記述例を実行するために生成された水平型マイクロコード２１である。この水平型マイクロコード２１はサブ命令として「ｃｏｎｄｉｔｉｏｎａｌ　ｃｏｍｐａｒｅ文」および「ｃｏｎｄｉｔｉｏｎａｌ　ｍｏｖｅ文」を含んでいる。第１サイクルでは、３つの「ｃｏｎｄｉｔｉｏｎａｌ　ｃｏｍｐａｒｅ文」（ＯＰ−１、ＯＰ−２およびＯＰ−３）と１つの「ｃｏｎｄｉｔｉｏｎａｌ　ｍｏｖｅ文」（ＯＰ−４）が並列実行される。処理ＯＰ−２、ＯＰ−３およびＯＰ−４は、いずれも処理ＯＰ−１の結果により選択されたり、選択されなかったりする。このため、サイクルフラグ領域５６にはフラグが立っており、同一サイクル内の他の演算ユニット５１の演算結果が出力選択回路７４で参照される。本図からわかるように、本例のデータ処理装置１においては、図１１に示されたＯＰ−１からＯＰ−９の９つの処理を、分岐を含めて３サイクルで処理することができ、さらに、分岐が発生したことによるサイクルの無駄、すなわち、サイクルのペナルティは生じない。水平型マイクロコード２１で実行可能な命令は条件判断に限らず、乗算命令、加算命令、その他の命令であっても良い。したがって、ループ処理が要求される積和演算などを水平に展開して実行することにより、同じ処理を基本プロセッサにより実行した場合と比較すると大幅に性能を改善できる。
【００７３】
図１３に、水平型マイクロコード２１に含まれるＯＰ−１〜ＯＰ−９がサブ命令フィールド５５に展開された内容を示してある。また、図１４に、各々のサブ命令ＯＰ−１〜ＯＰ−９の記述内容を示してある。オペランドフィールド５５ａには、「ｃｏｎｄｉｔｉｏｎａｌ　ｃｏｍｐａｒｅ文」、または「ｃｏｎｄｉｔｉｏｎａｌ　ｍｏｖｅ文」が記述され、レジスタフィールド５５ｂには比較するレジスタあるいはデータを転送するレジスタが定義されている。また、スロット番号フィールド５５ｃには、演算ユニット５１を指定する情報が記載されている。本明細書においては、演算ユニット５１を規定する番号をスロット番号と称する。さらに、選択条件フィールド５８に１０ビットのビットマップφｂｍが格納されている。
【００７４】
ビットマップφｂｍは、そのサブ命令ＯＰ−１〜ＯＰ―９が架空のＡＬＵ（スロット番号０）を含む５つのスロット＃０〜＃４の真偽いずれかで選択されるかを示す情報である。すなわち、ビットマップφｂｍは、サブ命令ＯＰ−１〜ＯＰ９が先行する「ｉｆ　ｔｈｅｎ　ｅｌｓｅ文」により「ｔｈｅｎ」側に記述されたのか「ｅｌｓｅ」側に記述されたのかを示す。各スロットの情報は２ビットで記述されており、各スロットの最初のビット（１ビット目、左側のビット）が「ｔｈｅｎ」側で選択されることを示し、２ビット目（右側のビット）が「ｅｌｓｅ」側で選択されることを示す。したがって、同じ配列になっているＣＣＲＳ７１またはＣＣＲＳ７１に書き込まれるデータＲＣＣφｒｃと出力選択回路４７で比較することにより、該当するスロット番号の演算ユニット５１の出力が選択されたか否かが判断できる。
【００７５】
たとえば、サブ命令ＯＰ−１では、グローバルコンディションコードであるスロット番号＃０の「ｔｈｅｎ」側（＃０１）で選択されるようになっており、条件文に関係なく実行されることが分かる。サブ命令ＯＰ−２は、スロット番号＃１の「ｔｈｅｎ」側（＃１１）で選択されるようになっており、また、図１２に示すように、最初のサイクルではサイクルフラグ５６が立っているので、同じサイクルの一番目のスロット、すなわち、サブ命令ＯＰ−１の「ｔｈｅｎ」側で選択されることが分かる。他のサブ命令についても同様であり、サブ命令ＯＰ−５からＯＰ−９については、サイクルフラグ５６がたっていないので、ＣＣＲＳ７１に格納された前のサイクルのＲＣＣφｒｃとそれぞれのスロット番号に割り当てられたサブ命令のビットマップφｂｍが比較される。また、サブ命令ＯＰ−１からＯＰ−３は「ｃｏｎｄｉｔｉｏｎａｌ　ｃｏｍｐａｒｅ文」であるので、出力が制御されるのはＣＣＲＳ７１に対するＡＬＵ５１ａの出力である。一方、サブ命令ＯＰ−４からＯＰ−９は「ｃｏｎｄｉｔｉｏｎａｌ　ｍｏｖｅ文」であるので、出力が制御されるのは、汎用レジスタ５２ａへの書き込みであり、ＷＥ信号φｗｅが出力されるか否かとなる。
【００７６】
したがって、ビットマップφｂｍを備えた本発明の水平マイクロコード２１は、自分の経路を決定している原因となるＣＣＲＳをビットマップで命令コードに保有する形式であると言える。各演算ユニット５１の出力を選択する情報はビットマップφｂｍに限定されないが、各演算ユニット５１のコンディション・コードとは無関係に選択されることを指示する第１の情報、すなわち本例ではスロット番号０の情報（グローバルコンディションコード）が必要である。また、コンディション・コードを比較する各演算ユニット５１を指示する第２の情報が必要であり、本例ではビットマップφｂｍのスロット番号に対応して配置されたビット（２ビット毎）の順番がその情報を示す。さらに、比較するコンディション・コードの真偽を示す第３の情報が必要であり、本例では各スロットで２ビットのデータが割り当てられている。したがって、本例のビットマップφｂｍにおいては、この第３の情報に相当する２ビットにより、その第３の情報の順番で指示されるスロット番号の演算ユニット５１の論理演算結果を参照し、第３の情報の一方のデータが「１」、すなわち２ビットのデータが「１０」のときには論理演算が真のときに選択されることが示される。また、他方のビットが「１」、すなわち２ビットのデータが「０１」のときには論理演算が偽のときに選択されることが示され、さらに、双方のビットが「００」のときは選択されないことが示される。また、これらに加えて、比較するコンディション・コードのサイクルを示す第４の情報、すなわち本例ではサイクルフラグ５６を備えていることが望ましい。
【００７７】
これらの選択情報、特に、第１〜第３の情報をビットマップ化することにより、デコードせずにＣＣＲＳ７１と比較して出力を制御できるので、簡易なハードウェアにより高速で処理できる。上述したように、本例は１ビット分のコンディション・コードに着目して説明しているが、ＣＣＲＳにストアされるコンディション・コードと、水平型マイクロコード２１に含まれるビットマップφｍとが直接比較できる体系で生成されていれば本発明のメリットを得ることができる。
【００７８】
また、サイクルフラグ５６といった第４の情報を設け、ＣＣ選択回路７５を制御することにより、参照する条件判断を行う演算ユニットと、それを利用した演算を行う演算ユニットとを並列実行できるので、並列度が向上する。本例では、水平型マイクロコード毎にサイクルフラグ５６を設けて一括管理しているが、サブ命令フィールド５５にサイクルフラグフィールドを設けることにより、演算ユニット毎に、同一サイクルの分岐条件で制御するか、前のサイクルの分岐条件で制御するかを選択することが可能となり、さらにフレキシブルになり並列度を向上できる。ただし、ＣＣＲＳ７１とそれに書き込まれるＲＣＣφｒｃとを選択するＣＣ選択回路７５を各演算ユニット５１に設ける必要があるので、ハードウェアは複雑になる。
【００７９】
また、本例の並列データ処理ユニット２０においては、各演算ユニット（ＡＬＵ）５１の演算結果（コンディション・コード）があらかじめ水平型マイクロコードにより選択されて、演算ユニット５１の制御論理としてフィードバックあるいは入力されるのではない。その代わりに、すべての演算ユニット５１の演算結果（コンディション・コード）が各演算ユニット５１の制御論理として入力される。すなわち、すべての演算ユニット５１の演算結果が格納されているＣＣＲＳ７１からの出力結果もしくはＣＣＲＳ７１への書き込み情報が各演算ユニット５１にフィードバックされる。したがって、各演算ユニット５１を制御する水平型マイクロコード２１により、演算ユニット５１の単位で所望の演算結果が選択された後、この選択された演算結果と各演算ユニット５１の演算結果との条件が取られてＣＣＲＳ７１に書き込まれ、次の演算ユニット５１における処理で引用される。あるいは、汎用レジスタへの出力の可否が判断される。
【００８０】
したがって、本発明によれば、ｃｏｎｄｉｔｉｏｎａｌ　ｃｏｍｐａｒｅ命令を実行した後には、ＣＣＲＳ７１に書き込むＲＣＣφｒｃはｔｈｅｎ／ｅｌｓｅどちらか１ビットのみが“１”であり他は“０”となる。そして、前の条件文で選択されていれば、それがＣＣＲＳ７１に書き込まれ、選択されていなければ（０，０）がＣＣＲＳ７１に書き込まれる。このため、真もしくは偽の選択があるのであれば、その結果は、複数の“１”としてＣＣＲＳ７１を介して下流の命令に伝播される。
【００８１】
このように、並列データ処理用のコンパイラＣｃ２により、水平型マイクロコード２１を構成するサブ命令５５と、そのサブ命令５５が実行される演算ユニット５１と、ＣＣＲＳ７１のスロット番号と、そのサブ命令５５に含まれるビットマップφｂｍのスロット番号とを対応させ、演算ユニット５１の出力を制御することにより、条件分岐が伴うすべての命令を止めることなく並列に進めることが可能となる。特に、必要に応じて複数命令を含むサイクル単位でのＣＣＲＳ７１への書き込みデータを参照するか、格納されたデータを参照するかの選択肢を設けることにより、条件分岐の結果を水平方向にも伝播させることが可能となり、条件分岐を含む並列処理効率が飛躍的に向上する。
【００８２】
そして、本発明の並列データ処理ユニット２０では水平型マイクロコード２１を使用するのでＶＬＩＷの特徴を最も高速で、かつ高い自由度で引き出せる構成となる。即ち、レジスタファイルと演算器の接続自由度を高めようとするとセレクタ段数が深くなるが、ＶＬＩＷコードの方を水平型マイクロコードとしてあらかじめ展開させておく形式により水平型マイクロコードのフェッチ並びにデコードの機能を排除し高速性を維持している。もともとＶＬＩＷデータパスが処理するのは繰り返しループ処理が多く、コードの深さはさほどでもない。したがって、本例の並列データ処理ユニット２０のように、処理内容を水平型マイクロコード２１として常駐させたとしても、コードメモリ２２のメモリ容量が不足する心配はない。さらに、水平型マイクロコード２１に関しては、基本プロセッサ１０のデータＲＡＭ１５からロードする機能をサポートしているので、異なる水平型マイクロコードあるいはプログラムをロードすることにより、複数のループ処理機能に対応した水平型マイクロコード２１の置き換えが可能となる。したがって、その点でもコードメモリ２２のメモリ容量が不足する心配はない。
【００８３】
また、複数の並列データ処理ユニット２０を備えた集積回路装置１または２を提供することも可能であり、複数の並列データ処理ユニット２０を並列実行させることも可能である。そして、図２に示したように、複数の並列データ処理ユニット２０のクロックを制御することにより、さらにきめ細かく消費電力を低減できる。消費電力を低減するという点では、水平型マイクロコード２１を格納するコードメモリ２２をＲＯＭ化することも有効である。水平型マイクロコード２１は書き換えは不可となるが特定の信号処理に関しては面積・消費電力においてより効果がある。
【００８４】
図１５に、異なる出力制御回路２７の例を示してある。この例では、演算ユニット５１がふたつある場合におけるＣＣＲＳ７１への書き込み前情報（ＲＣＣφｒｃ）を参照する回路構成を詳細に示している。この出力制御回路２７は、自己のＣＣ出力部７２から自己のＣＣ出力部７２へ書き込み前情報φｒｃを伝達するパスはないが、自己のＣＣ出力部７２から他のすべてのＣＣ出力部７２へ書き込み前情報φｒｃを伝達するパスがある完全接続になっており、発振状態に陥る可能性のあるループが存在する。発振状態は取らない様に並列データ処理用のコンパイラＣｃ２で対応することも可能である。しかしながら、同一サイクル内のコンディション・コードを参照するために、瞬間的に発振状態となる可能性があり、消費電力をセーブすることを考え、また、経年変化および信頼性の上で問題となる可能性がある。
【００８５】
図１６に、さらに異なる出力制御回路２７の例を示してある。この出力制御回路２７においては、ＣＣＲＳ７１への書き込み前情報（ＲＣＣφｒｃ）を参照する回路は完全接続とならず、部分接続になっている。部分接続とすることにより、同一サイクル内のコンディション・コードを参照して、すべての演算ユニット（ＡＬＵ）５１が他の演算ユニット５１の書き込み前情報φｒｃを参照することができないという制約が生ずる。すなわち、第１スロットのＣＣ出力部７２から出力される第１スロットの演算ユニット５１の結果（演算結果）は、他のすべてのＣＣ出力部７２で利用できるが、第２スロットの演算結果は、第３および第４スロットのＣＣ出力部７２でしか利用できず、第３スロットの演算結果は、第４スロットのＣＣ出力部７２でしか利用できない。また、第４スロットの演算結果は、他のスロットでは利用できない。しかしながら、発振状態となることは完全に防げる。このような制約のもとで動作するように水平型マイクロコード２１を生成するようにコンパイラＣｃ２を作成することは可能であり、同一サイクル内の演算結果が参照できないケースに比較すれば処理の並列度を上げる点で十分にメリットがある。
【００８６】
なお、ＣＣＲＳ７１に格納済みのＲＣＣφｒｃを用いて演算ユニット５１の結果の書き込み条件を生成する場合には完全接続として良い。
【００８７】
図１７ないし図２０に、異なる処理を並列データ処理ユニット２０で実行する様子を示してある。図１７は、本例の処理を「ｉｆ　ｔｈｅｎ　ｅｌｓｅ文」のツリー構造で示してある。図１１に示した例では、どれかひとつの条件が成立した時にのみ実行される条件（ＡＮＤ条件）の処理であったのに対し、本例の処理は、複数の条件のうちどれが成立しても実行される条件（ＯＲ条件）の処理である。
【００８８】
図１８は、図１７に示した処理を実行するために生成された水平型マイクロコード２１である。この場合も、本例のデータ処理装置１であると、ＯＰ−１からＯＰ−６の６つの処理が２サイクルで実行でき、大幅に性能を改善できる。また、図１９に、水平型マイクロコード２１に含まれるＯＰ−１〜ＯＰ−６がサブ命令フィールド５５に展開された内容を示し、図２０に、各々のサブ命令ＯＰ−１〜ＯＰ−６の記述内容を示してある。サブ命令ＯＰ−５がＯＲ条件で実行されるマイクロコードの例であり、図９に示した出力制御回路２７によりＯＲ条件も分岐のペナルティーなしに実行できることがわかる。
【００８９】
以上、述べたように、本発明によれば、基本プロセッサ１０はＶＬＩＷである必要がないか、もしくは並列度の低いプロセッサでよく、それに対し基本プロセッサ１０の２倍以上の演算器並列度を備えた並列処理ユニット２０、すなわち、水平型マイクロコード型のＶＬＩＷデータパス部２３を備えた処理ユニットを付加することにより、様々な処理で頻繁に使用される記述である「ループ文」の効率的な処理や「ｉｆ　ｔｈｅｎ　ｅｌａｓｅ文」とそれに従属する実行文の並列動作を高める事が可能となる。両者、すなわち、基本プロセッサ１０と並列処理ユニット２０との演算並列度の比率は２以上であることが望ましく、基本プロセッサ１０が１並列であれば並列処理ユニット２０は２並列以上であることが望ましい。また、基本プロセッサ１０が２並列であれば、並列処理ユニット２０は４並列以上であることが望ましい。これはデータ処理を行う上でこの程度以上の比率を設ける事により汎用データ処理と専用データ処理の区別が明確になるからである。
【００９０】
そして、基本プロセッサ１０と並列処理ユニット２０とを有するデータ処理システム１により、基本プロセッサ１０に余なフェッチ・デコード構造を設置することなく、消費電力を押さえ、その一方で、ＶＬＩＷ型のプロセッサと同様に専用のデータパス部で効率のよい並列データ処理動作を行うプロセッサシステムの提供が可能となる。
【００９１】
【発明の効果】
本発明においては、フェッチおよびデコード機能を備えた基本プロセッサと、水平型マイクロコードにより制御される並列データ処理ユニットとの組み合わせにより、並列処理に適した部分だけを水平型マイクロコードで実行可能としている。したがって、並列処理が可能な部分は、ＶＬＩＷ型のプロセッサと同様に並列もしくはパイプライン並列のデータ処理が可能となり、並列処理に適していない部分は基本プロセッサによるシーケンシャルなデータ処理が可能となる。さらに、並列データ処理ユニットの制御に水平型マイクロコードを採用することにより、並列データ処理のための命令フェッチ部とデコード部の回路複雑性を排除でき、消費電力を押えつつ効率よく並列処理を行うことができる。
【００９２】
したがって、本発明により、ＶＬＩＷ型のプロセッサよりも、遥かに小型で消費電力の小さなプロセッサでありながら、ＶＬＩＷ型のプロセッサと同等の並列度を確保できるデータ処理システムを提供できる。このため、本発明では、経済的なハードウェアにより広範囲な並列実行が可能となり、通信やネットワークにて必要となる信号処理、特に、ループ記述による繰り返し演算が頻繁に出現する処理に対して、実行速度が飛躍的に向上した経済的なプロセッサを提供することが可能となる。
【図面の簡単な説明】
【図１】本発明のデータ処理装置（システムＬＳＩ）の一例の構成を示す図である。
【図２】図１と異なる本発明のデータ処理装置の例の構成を示す図である。
【図３】データ処理装置の設計過程を示す図である。
【図４】並列データ処理ユニットの概略構成を示す図である。
【図５】並列データ処理ユニットの回路例を示す図である。
【図６】水平型マイクロコードの構成を示す図である。
【図７】ループ制御部およびアドレス制御部の構成を示す図である。
【図８】ループ制御の様子を示す図である。
【図９】出力制御部の構成を示す図である。
【図１０】出力選択回路の構成を示す図である。
【図１１】並列実行する処理の一例を示す図である。
【図１２】図１１に示した処理を実行する水平型マイクロコードを示す図である。
【図１３】図１２に示す水平型マイクロコードに含まれる情報をさらに詳しく示す図である。
【図１４】水平型マイクロコードに含まれる情報を内容を記述的に示したものである。
【図１５】出力制御部の異なる例を示す図である。
【図１６】出力制御部のさらに異なる例を示す図である。
【図１７】並列実行する処理の異なる例を示す図である。
【図１８】図１７に示した処理を実行する水平型マイクロコードを示す図である。
【図１９】図１８に示す水平型マイクロコードに含まれる情報をさらに詳しく示す図である。
【図２０】水平型マイクロコードに含まれる情報を内容を記述的に示したものである。
【符号の説明】
１、２　データ処理装置（システムＬＳＩ、プロセッサ）
１０　　基本プロセッサ
２０　　並列データ処理ユニット
２１　　水平型マイクロコード
２２　　コードメモリ
２３　　データパス部
２４　　制御部
２５　　アドレス制御部
２６　　ループ制御部
２７　　出力制御部
２８　　データインターフェイスレジスタ
３８　　レジスタデータバス
【図１】
2004021890.tif 000003
【図２】
2004021890.tif 000004
【図３】
2004021890.tif 000005
【図４】
2004021890.tif 000006
【図５】
2004021890.tif 000007
【図６】
2004021890.tif 000008
【図７】
2004021890.tif 000009
【図８】
2004021890.tif 000010
【図９】
2004021890.tif 000011
【図１０】
2004021890.tif 000012
【図１１】
2004021890.tif 000013
【図１２】
2004021890.tif 000014
【図１３】
2004021890.tif 000015
【図１４】
2004021890.tif 000016
【図１５】
2004021890.tif 000017
【図１６】
2004021890.tif 000018
【図１７】
2004021890.tif 000019
【図１８】
2004021890.tif 000020
【図１９】
2004021890.tif 000021
【図２０】
2004021890.tif 000022