(57)【特許請求の範囲】
【請求項１】
第１および第２の方向にマトリクス状に配置された複数の演算ユニットと、
前記複数の演算ユニットの前記第１の方向の配列に対応して前記第１の方向に延び、各演算ユニットの入力および／または出力データを伝送する複数の第１の配線群と、
前記複数の演算ユニットの前記第２の方向の配列に対応して前記第２の方向に延び、前記各演算ユニットの入力および／または出力データを伝送する複数の第２の配線群と、
前記第１および第２の配線群の各々の交点に配置され、前記第１の配線群に含まれる任意の配線と前記第２の配線群に含まれる任意の配線を選択して接続可能な複数のスイッチングユニットと、を備えたデータ処理区画を有し、
前記複数の演算ユニットは、特定の処理に適した異なるデータパスを備えた複数種類の演算ユニットに分類され、前記データ処理区画の少なくとも一部では、同一種類の演算ユニットが前記第１または第２の方向の配列を形成しており、
前記複数種類の演算ユニットは、データの伝送時間を遅らせる処理に適したデータパスを備えた遅延用の演算ユニットを含んでいる集積回路装置。
【請求項２】
前記複数種類の演算ユニットが前記第１の方向に等間隔で配置されている請求項１の集積回路装置。
【請求項３】
前記複数種類の演算ユニットは、少なくとも１つの異なる命令レベルの処理に適したデータパスを備えた、異なる種類の演算ユニットを含んでいる請求項１の集積回路装置。
【請求項４】
前記複数種類の演算ユニットのうち、データの入力および／または出力処理に適したデータパスを備えた演算ユニットが、前記データ処理区画の一方の端と他方の端に配列されている、請求項１の集積回路装置。
【請求項５】
前記各演算ユニットは、クロック単位で制御されるフリップフロップであって、当該各演算ユニットにおいて消費されるクロックを明確にする、入力データをラッチするフリップフロップと、出力データをラッチするフリップフロップとを備えている、請求項１の集積回路装置。
【請求項６】
前記複数種類の演算ユニットの少なくとも１つの種類の演算ユニットは、同一方向に配列されたときに、他の演算ユニットと連携して拡張された演算機能を提供可能なパスを備えている、請求項１の集積回路装置。
【請求項７】
前記各演算ユニットは、前記第１の配線群および／または第２の配線群に含まれる任意の配線を選択して信号を入力および／または出力する手段を備えている、請求項１の集積回路装置。
【請求項８】
前記各演算ユニットは、配線の選択を記憶する書き換え可能なコンフィグレイションメモリを備えており、
前記スイッチングユニットは、配線の選択を記憶する書き換え可能なコンフィグレイションメモリを備えている請求項７の集積回路装置。
【請求項９】
前記各演算ユニットは、内部のデータパスの一部を変更および／または選択する手段を備えており、前記コンフィグレイションメモリは前記内部のデータパスの変更および／または選択も記憶する、請求項８の集積回路装置。
【請求項１０】
前記内部のデータパスは、少なくとも１つの命令レベルの処理に適したデータパスである、請求項９の集積回路装置。
【請求項１１】
前記コンフィグレイションメモリの内容を書き換え可能な汎用プロセッサを有する請求項８の集積回路装置。
【請求項１２】
複数の前記データ処理区画と、これらのデータ処理区画を接続する第３の配線群とを有する請求項１の集積回路装置。
【請求項１３】
前記各演算ユニットは、データをバイトおよび／またはワード単位で処理する、請求項１の集積回路装置。
【請求項１４】
前記第１および第２の配線群はデータを伝送するバス配線と、キャリー信号を伝送するキャリー配線とを備えている、請求項１の集積回路装置。
【請求項１５】
前記各演算ユニットは、前記第２の配線群に含まれる任意の配線から信号を入力する手段と、前記第１の配線群に含まれる任意の配線に信号を出力する手段とを備えており、
前記第２の配線群は、前記複数の演算ユニットの前記第２の方向の配列の両側に沿って延びた１組の配線群を備えている、請求項１の集積回路装置。
【請求項１６】
前記データ処理区画は、前記遅延用の演算ユニットの配列を介して接続された第１のマトリクスと第２のマトリクスとを備えている、請求項１の集積回路装置。
【請求項１７】
前記複数種類の演算ユニットは、
データの入力処理に適したデータパスを備えた第１種の演算ユニット、
入力データのアドレスを指定する処理に適したデータパスを備えた第２種の演算ユニット、
データの出力処理に適したデータパスを備えた第３種の演算ユニット、
出力するデータのアドレスを指定する処理に適したデータパスを備えた第４種の演算ユニット、
算術演算および／または論理演算の処理に適したデータパスを備えた第５種の演算ユニット、
乗算処理に適したデータパスを備えた第６種の演算ユニット、
前記データ処理区画の外部に配置された演算回路と接続する処理に適したデータパスを備えた第７種の演算ユニット、および
ルックアップテーブルにより処理が選択されるデータパスを備えた第８種の演算ユニットの少なくともいずれかを含んでいる、請求項１の集積回路装置。
【請求項１８】
複数種類の演算ユニットと、それら複数種類の演算ユニットを接続する配線群と、を備えたデータ処理区画を有し、
前記複数種類の演算ユニットは、少なくとも１つの異なる命令の実行に適したデータパスを備えた、異なる種類の演算ユニットと、データの伝送時間を遅らせる処理に適したデータパスを備えた遅延用の演算ユニットとを含んでいる集積回路装置。
【請求項１９】
前記複数種類の演算ユニットは、
データの入力命令の実行に適したデータパスを備えた第１種の演算ユニット、
入力データのアドレスを指定する命令の実行に適したデータパスを備えた第２種の演算ユニット、
データの出力命令の実行に適したデータパスを備えた第３種の演算ユニット、
出力するデータのアドレスを指定する命令の実行に適したデータパスを備えた第４種の演算ユニット、
算術演算命令および／または論理演算命令の実行に適したデータパスを備えた第５種の演算ユニット、および
乗算命令の実行に適したデータパスを備えた第６種の演算ユニットの少なくともいずれかを含んでいる、請求項１８の集積回路装置。
【請求項２０】
前記複数種類の演算ユニットは、さらに、
前記データ処理区画の外部に配置された演算回路と接続する処理に適したデータパスを備えた第７種の演算ユニット、および
ルックアップテーブルにより処理が選択されるデータパスを備えた第８種の演算ユニットの少なくともいずれかを含んでいる、請求項１９の集積回路装置。
【請求項２１】
複数種類の演算ユニットと、それら複数種類の演算ユニットを接続する配線群と、を備えたデータ処理区画を有し、
前記複数種類の演算ユニットは、少なくとも１つの異なる命令の実行に適したデータパスを備えた、異なる種類の演算ユニットを含み、
各演算ユニットは、クロック単位で制御されるフリップフロップであって、当該各演算ユニットにおいて消費されるクロックを明確にする、入力データをラッチするフリップフロップと、出力データをラッチするフリップフロップとを備えている集積回路装置。
【請求項２２】
前記複数種類の演算ユニットは、第１および第２の方向にマトリクス状に配置されている、請求項１８の集積回路装置。
【請求項２３】
前記複数種類の演算ユニットのうち、データの入力命令および／または出力命令の実行に適したデータパスを備えた演算ユニットが、前記データ処理区画の一方の端と他方の端に配列されている、請求項２２の集積回路装置。
【請求項２４】
前記配線群は、前記複数種類の演算ユニットの前記第１の方向の配列の対応して前記第１の方向に延び、各演算ユニットの入力および／または出力データを伝送する複数の第１の配線群と、
前記複数種類の演算ユニットの前記第２の方向の配列に対応して前記第２の方向に延び、前記各演算ユニットの入力および／または出力データを伝送する複数の第２の配線群と、
前記第１および第２の配線群の各々の交点に配置され、前記第１の配線群に含まれる任意の配線と前記第２の配線群に含まれる任意の配線を選択して接続可能な複数のスイッチングユニットとを備えており、
前記各演算ユニットは、前記第１の配線群および／または第２の配線群に含まれる任意の配線を選択して信号を入力および／または出力する手段を備えている、請求項２２の集積回路装置。
【請求項２５】
前記配線群は、前記複数種類の演算ユニットに供給されるデータのルートを変えてデータ処理のための前記複数種類の演算ユニットの組み合わせを変更可能である、請求項１８の集積回路装置。
【請求項２６】
前記複数種類の演算ユニットは、配線の選択を記憶する書き換え可能なコンフィグレイションメモリを備えており、
前記スイッチングユニットは、配線の選択を記憶する書き換え可能なコンフィグレイションメモリを備えている請求項２５の集積回路装置。
【請求項２７】
前記複数種類の演算ユニットの少なくともいずれかは、少なくとも１つの命令の実行に適した内部のデータパスと、その内部のデータパスの一部を選択および／または変更する手段とを備えており、
前記コンフィグレイションメモリは前記内部のデータパスの選択および／または変更も記憶する、請求項２６の集積回路装置。
【請求項２８】
プログラムに基づき前記コンフィグレイションメモリの内容を書き換える制御ユニットを有する請求項２６の集積回路装置。
【請求項２９】
プログラムに基づき前記複数種類の演算ユニットの組み合わせを制御する制御ユニットを有する請求項２５の集積回路装置。
【請求項３０】
前記複数種類の演算ユニットの少なくともいずれかは、少なくとも１つの命令の実行に適した内部のデータパスと、その内部のデータパスの一部を選択および／または変更する手段とを備えており、
前記制御ユニットは、前記内部のデータパスの選択および／または変更も制御する、請求項２９の集積回路装置。
【請求項３１】
前記制御ユニットは汎用プロセッサである、請求項２９の集積回路装置。
【請求項３２】
複数の前記データ処理区画と、これらのデータ処理区画を接続する配線群とを有する請求項１８の集積回路装置。
【請求項３３】
複数の演算ユニットと、それら複数の演算ユニットを接続する配線群と、を備えたデータ処理区画を有し、
前記複数の演算ユニットは、特定の処理に適した異なるデータパスを備えた複数種類の演算ユニットに分類され、さらに、各演算ユニットは、データをバイトおよび／またはワード単位で処理する、集積回路装置。
【請求項３４】
前記複数種類の演算ユニットは、少なくとも１つの異なる命令レベルの処理に適したデータパスを備えた、異なる種類の演算ユニットを含んでいる、請求項３３の集積回路装置。
【請求項３５】
第１および第２の方向にマトリクス状に配置された複数種類の演算ユニットと、それら複数種類の演算ユニットを接続する配線群と、を備えたデータ処理区画を有し、前記複数種類の演算ユニットは、少なくとも１つの異なる命令の処理に適したデータパスを備えた、異なる種類の演算ユニットと、データの伝送時間を遅らせる処理に適したデータパスを備えた遅延用の演算ユニットとを含んでいる集積回路装置の設計方法であって、
当該集積回路装置において実行する処理の少なくとも一部を、前記複数種類の演算ユニットのいずれかにより実行可能な命令を含むプログラム言語で記述された中間記述に変換する工程と、
その中間記述の処理を実行可能な前記複数種類の演算ユニットに加えて前記遅延用の演算ユニットをタイミング調整のために含めた実行用の組み合わせを生成する工程と、
前記実行用の組み合わせを実現するように前記複数種類演算ユニットが配置された前記データ処理区画を生成する工程とを有する集積回路装置の設計方法。
【請求項３７】
複数種類の演算ユニットが配置され、配線群により前記複数種類の演算ユニットに供給されるデータのルートを変えてデータ処理のための前記複数種類の演算ユニットの組み合わせを変更可能なデータ処理区画を有し、前記複数種類の演算ユニットは、少なくとも１つの異なる命令の処理に適したデータパスを備えた、異なる種類の演算ユニットと、データの伝送時間を遅らせる処理に適したデータパスを備えた遅延用の演算ユニットとを含んでいる集積回路装置の設計方法であって、
当該集積回路装置において実行する処理の少なくとも一部を、前記複数種類の演算ユニットのいずれかにより実行可能な命令を含むプログラム言語で記述された中間記述に変換する工程と、
その中間記述の処理を実行可能な前記複数種類の演算ユニットに加えて前記遅延用の演算ユニットをタイミング調整のために含めた実行用の組み合わせを生成する工程と、
前記実行用の組み合わせに必要となる前記複数種類演算ユニットが配置された前記データ処理区画を生成する工程と、
前記実行用の組み合わせを指示する命令を備えた前記集積回路装置の実行プログラムを生成する工程とを有する集積回路装置の設計方法。
【請求項３８】
前記複数の演算ユニットの少なくともいずれかは、少なくとも１つの命令の処理に適した内部のデータパスと、その内部のデータパスの一部を選択および／または変更する手段とを備えており、
前記実行用の組み合わせを生成する工程では、前記内部のデータパスの選択および／または変更も含めた前記実行用の組み合わせを生成する、請求項３７の集積回路装置の設計方法。
【請求項３９】
複数種類の演算ユニットが配置され、配線群により前記複数種類の演算ユニットに供給されるデータのルートを変えてデータ処理のための前記複数種類の演算ユニットの組み合わせを変更可能なデータ処理区画を有し、前記複数種類の演算ユニットは、少なくとも１つの異なる命令の処理に適したデータパスを備えた、異なる種類の演算ユニットと、データの伝送時間を遅らせる処理に適したデータパスを備えた遅延用の演算ユニットとを含んでいる集積回路装置の実行プログラムの作成方法であって、
当該集積回路装置において実行する処理の少なくとも一部を、前記複数種類の演算ユニットのいずれかにより実行可能な命令を含むプログラム言語で記述された中間記述に変換する工程と、
その中間記述の処理を実行可能な前記複数種類の演算ユニットに加えて前記遅延用の演算ユニットをタイミング調整のために含めた実行用の組み合わせを生成する工程と、
前記実行用の組み合わせを指示する命令を備えた前記実行プログラムを生成する工程とを有する集積回路装置の実行プログラムの作成方法。
【請求項４１】
前記複数の演算ユニットの少なくともいずれかは、少なくとも１つの命令の処理に適した内部のデータパスと、その内部のデータパスの一部を選択および／または変更する手段とを備えており、
前記実行用の組み合わせを生成する工程では、前記内部のデータパスの選択および／または変更も含めた前記実行用の組み合わせを生成する、請求項３９の集積回路装置の実行プログラムの作成方法。
【請求項４２】
前記複数種類の演算ユニットは、データの伝送時間を遅らせる処理に適したデータパスを備えた遅延用の演算ユニットを含んでいる、請求項３３の集積回路装置。
【請求項４３】
前記各演算ユニットは、クロック単位で制御されるフリップフロップであって、当該各演算ユニットにおいて消費されるクロックを明確にする、入力データをラッチするフリップフロップと、出力データをラッチするフリップフロップとを備えている、請求項３３の集積回路装置。
【発明の詳細な説明】
技術分野
本発明は、複数の演算ユニットがマトリクス状に配置された集積回路装置に関するものである。
背景技術
論理ゲートをアレイ状に敷き詰めてその間の結線を自由に変更することができる集積回路装置としてＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）が知られている。ＦＰＧＡは、大きく分けると、複数の論理ブロックと、これらの論理ブロックの間を接続する配線によって構成されている。論理ブロックは、ルックアップテーブルとフリップフロップを含む回路ユニットであり、ルックアップテーブルの設定値を変えることにより、ビット単位でＡＮＤあるいはＯＲなどの論理関数を実現する論理ゲートとして機能する。複数の論理ブロックは、アレイ状あるいはマトリクス状に配置され、行配線および列配線により接続される。行配線および列配線は、それらの配線の交点でスイッチマトリクスなどによって接続されて配線の組換えが可能となっており、それにより論理ブロックの組み合わせを変更することができる。
ＦＰＧＡはトランジスタレベルでの接続を変更可能なアーキテクチャとして発展しており、実行可能な機能を製造した後にある程度自由に変更することが可能な集積回路装置である。したがって、ＦＰＧＡは、各種の専用演算回路を同一のハードウェアで実現することが可能であり、さらに、実現される機能を、ある程度動的に制御できる可能性のあるアーキテクチャである。また、汎用的に利用可能なアーキテクチャを提供するために、ＦＰＧＡを構成する論理ブロックは同一構成であり、個々の論理ブロックで実現可能な論理関数をＡＮＤ、ＯＲあるいはＮＡＮＤ程度のレベルに限定されている。さらに、処理するデータもビット単位である。したがって、個々の論理ブロックは４ビット程度のＳＲＡＭから成るルックアップテーブルを搭載しているに過ぎない。
ＦＰＧＡは、ルックアップテーブルを含む論理ブロックでＡＮＤやＯＲなどの論理ゲートの機能を実現し、それらを組み替え可能な配線群で接続することにより各種の専用演算回路としての機能を実現する。したがって、実現可能な機能に対して面積効率は低く、演算速度もそれほど高くはならない。さらに、ＦＰＧＡで実現可能な機能を変更しようとすると、膨大な数の論理ブロックの機能を変更する必要があるので、ダイナミックに変更することは無理である。各々の論理ブロックをダイレクトに制御できるような特殊なハードウェアを設けることにより機能を変更する時間を短縮することが可能であるとしても、アプリケーションの実行中に特殊なハードウェアを動的に制御することは難しく、さらに、経済的な解であるとも言えない。
これに対し、本願の発明者らは、適当な、あるいは特定の処理に適したデータパス（ハードウェアロジックあるいは回路）を予め備えた複数種類の演算ユニットを用意し、これらの演算ユニット間の接続を変えることにより所望の専用演算回路としての機能を定義できる集積回路装置を提案する。この集積回路装置であれば、ＦＰＧＡのようにトランジスタレベルでの接続をすべて変更する必要がないので、短時間でハードウェアを再構成できる。ＦＰＧＡのようにトランジスタレベルでの汎用性を要求するアーキテクチャではないので、実装密度も向上でき、コンパクトで経済的なシステムを提供できる。さらに、冗長な構成を削減することができるので、処理速度も高速になり、ＡＣ特性も向上する。
しかしながら、ＦＰＧＡは各回路ユニットあるいは回路ブロックが同一の構成であるために、これらの回路ブロックをマトリクス状に配列し、それらの間に行配線および列配線を配置するレイアウトは極めて規則性が高く、設計も容易であり、さらに素子レベルの面積効率も高い。これに対し、特定の処理に適したデータパスを備えた演算ユニットは、その処理により内蔵するデータパスが異なるので回路構成は同一にならない。したがって、各種の演算ユニットをシリコン基板上で実現するために必要となる面積は同一にはならない。単一構成のＦＰＧＡと同じようなマトリクスを得るために、各種の演算ユニットが内蔵するデータパスが異なるにも関わらず各種の演算ユニットが占める面積を同一にするように配置することは可能である。すなわち、占有面積が最大となる演算ユニットに揃えたマトリクスで複数の演算ユニットをレイアウトすることも可能である。しかしながら、面積効率は低下し、集積回路が非常に大きくなり、ＡＣ特性が悪化する要因となる。したがって、特定の処理に適したデータパスを備えた演算ユニットからなる集積回路装置の本来のメリットを十分に活かすことができない。
そこで、本発明においては、特定の処理に適したデータパスを備えた複数種類の演算ユニットを含む集積回路装置を実際に設計する上で、そのような演算ユニットのメリットを十分に活かすことができる集積回路装置を提供することを目的としている。そして、コンパクトで経済的な集積回路装置であり、処理速度も速く、ＡＣ特性も良好な集積回路装置を提供することを目的としている。
発明の開示
本発明の集積回路装置は、第１および第２の方向にマトリクス状に配置された複数の演算ユニットと、複数の演算ユニットの第１の方向の配列に対応して第１の方向に延び、各演算ユニットの入力および／または出力データを伝送する複数の第１の配線群と、複数の演算ユニットの第２の方向の配列に対応して第２の方向に延び、各演算ユニットの入力および／または出力データを伝送する複数の第２の配線群と、第１および第２の配線群の各々の交点に配置され、第１の配線群に含まれる任意の配線と第２の配線群に含まれる任意の配線を選択して接続可能な複数のスイッチングユニットと、を備えたデータ処理区画を有する。この集積回路装置においては、さらに、複数の演算ユニット（Ｏｐｅｒａｔｉｏｎ  Ｕｎｉｔ）が、特定の処理に適した、異なるデータパスを備えた複数種類の演算ユニットを含み、あるいは複数種類の演算ユニットに分類でき、さらに、同一種類の演算ユニットが第１または第２の方向の配列を形成する。
各々が特定の処理に適したデータパスを備え、特定の算術演算または論理演算、それらの組み合わせを実行可能な小規模な、しかしながらバイトあるいはワード単位のデータを処理できる、ユニットを本明細書では演算ユニットと呼ぶ。この演算ユニットは、エレメント、論理エレメント、論理ユニットあるいは回路ユニットなどとも称されるものである。特定の処理に適した、異なる、あるいは固有のデータパスを備えた複数種類の演算ユニットを半導体基板上に実現するための面積は、各種の演算ユニットにより異なる可能性が高い。しかしながら、同一種類の演算ユニットであれば占有する面積は同じになる。したがって、同一種類の演算ユニットにより、第１の方向または第２の方向の配列を形成することにより、配列された方向では、演算ユニットのサイズの差による凸凹はなくなる。第１の方向を行方向（水平あるいは横ライン方向）とすると、第２の方向は列方向（垂直あるいは縦ライン方向）となる。たとえば、同一種類の演算ユニットにより第１の方向の配列を形成すれば、複数の演算ユニットを、第１の方向に、直線的な、同一幅の帯を形成するように配置できる。したがって、種類毎にデータパスが異なりサイズが異なる可能性の高い複数の演算ユニットを、第２の方向には無駄なスペースを発生させずに、第１の方向は直線的に配置できる。第１の方向に演算ユニットが凹凸なく直線的に並ぶので、少なくとも第１の方向の配線群は直線的にレイアウトできる。このため、異なるデータパスを備えた演算ユニットがマトリクス状に配置された集積回路装置の面積効率および集積度を高めることが可能であり、経済的で処理速度が速くＡＣ特性も良好な集積回路装置を提供できる。
同一種類の演算ユニットを多数配置するときは、第１または第２の方向に複数の配列を形成するように配置することができる。ある種類、たとえば第１種の演算ユニットの数が、第２種の演算ユニットの数より非常に多い場合、第２類の演算ユニットの配列に単純に合わせて、第１種の演算ユニットを配置すると、データ処理区画の形状が細長くなりすぎて面積効率が低下する可能性がある。この場合は、第２種の演算ユニットの配列に、第１種の演算ユニットの配列を繋げることにより、データ処理区画の形状を改善することが望ましい。この場合も、データ処理区画の少なくとも一部である、第２種の演算ユニットの配列の幅の範囲では、同一種類の演算ユニットにより第１または第２の方向の配列が形成される。
同一種類の演算ユニットを第１の方向に配列した場合、種類によりサイズの異なる演算ユニットであっても第１の方向には直線に凹凸のない状態で並ぶが、第２の方向の直線性は保障されない。したがって、複数種類の演算ユニットを第１の方向に等間隔で配置し、第２の方向の直線性を保障することが望ましい。これにより、第２の方向の配線群を直線的にレイアウトすることが可能となり、演算ユニットを結ぶ配線長を最短にすることができる。それと共に、第１および第２の配線群を全て直線的に配置することが可能となり、異なるデータパスを備えた演算ユニットがマトリクス状に配置された集積回路装置のデザインが容易になる。各種の演算ユニットの第１の方向のサイズが異なると第２の方向は最も効率の良い配置とはならない。しかしながら、各種の演算ユニットが必要とする面積の差を、第２の方向は等しくなるように設計し、第１の方向でその差を吸収することにより、第１および第２の方向とも最密となるように効率良く各種の演算ユニットを配置することができる。
第１および第２の配線群はデータを伝送するデータバスとなるバス配線に加え、キャリー信号を伝送するキャリー配線を設けておくことが望ましい。桁上げ用の信号や真偽を示す信号をデータバスと同様の経路で演算ユニットから演算ユニットに伝送することができる。
演算ユニットは第１の配線群および第２の配線群のいずれからデータを入力しても良く、いずれにデータを出力しても良い。しかしながら、一方の配線群からデータを入力し、他方の配線群にデータを出力するように規則を決めることにより、常に１つのスイッチングユニットを経由するだけで演算ユニットから演算ユニットにデータを伝送できる。このため、演算ユニットは、第２の配線群に含まれる任意の配線から信号を入力する手段と、第１の配線群に含まれる任意の配線に信号を出力する手段とを備えていることが望ましい。
また、演算ユニットは各々が特定の処理に適したデータパスを備えているので、算術演算、論理演算などの複数の入力データがある処理を行う場合には、それに即した配置にすることができる。したがって、入力配線となる第２の配線群として、演算ユニットの第２の方向の配列の両側に沿って延びた１組の配線群を設け、演算ユニットに複数の入力データを取り込みやすい配線にすることが望ましい。
さらに、マトリクスに含まれる演算ユニットが多くなり、それらをフレキシブルに接続しようとすると演算ユニットの数に対応した配線が必要となり、膨大な配線量が要求される。したがって、マトリクスを複数に分け、隣接して配置された第１のマトリクスと第２のマトリクスの境界に、データの伝送を遅延する処理に適した演算ユニットを配列し、第１および第２のマトリクスの間で第１および第２の配線群をいったん切り離すと共に、第１および第２のマトリクスの間で伝送される信号だけが第１および第２のマトリクスの配線を共有するようにすることが望ましい。
特定の処理に適したデータパスを備えた演算ユニットとして、少なくとも１つの異なる命令あるいは命令レベルの処理に適したデータパスを備えた幾つかの種類の演算ユニットを用意することが望ましい。本明細書において、命令とは、特に断らない限り、プログラムを記述するための命令セットを構成する命令を意味し、複合命令、マクロ命令、ファンクション・コールなどを含む。したがって、各論理ユニットは、データを８ビットのバイト単位、あるいは、１６、３２さらには６４ビットなどのワード単位で処理するものとなる。この集積回路装置では、実行する処理を、演算ユニットがサポートする命令のプログラム言語で記述できれば、演算ユニットの配置配線に変換することにより、その処理を実行するための集積回路装置を簡単に設計および製造できる。
すなわち、本発明では、第１および第２の方向にマトリクス状に配置された複数種類の演算ユニットと、それら複数種類の演算ユニットを接続する配線群とを備えたデータ処理区画を有し、複数種類の演算ユニットは、少なくとも１つの異なる命令を実行可能なデータパスを備えた種類の異なる種類の演算ユニットを含んでいる集積回路装置を提供する。この集積回路装置を設計する際は、当該集積回路装置において実行する処理の少なくとも一部を、複数種類の演算ユニットのいずれかにより提供される、あるいは実行可能な命令のプログラム言語で記述された中間記述に変換する。次に、その中間記述の処理を実行可能な複数種類の演算ユニットの実行用の組み合わせを生成し、実行用の組み合わせを実現できるように複数種類演算ユニットが配置されたデータ処理区画を生成する。これにより、与えられた処理を実行可能な集積回路装置を短時間に手間なく設計および製造できる。そして、この設計および製造方法により提供される集積回路装置は、与えられた処理をハードウェアで実行するものになるので、高い処理速度を備えたものとなる。
命令レベルの処理に適したデータパスを備えた演算ユニットとしては、データの入力処理に適したデータパスを備えた第１種の演算ユニット、入力データのアドレスを指定する処理に適したデータパスを備えた第２種の演算ユニット、データの出力処理に適したデータパスを備えた第３種の演算ユニット、出力するデータのアドレスを指定する処理に適したデータパスを備えた第４種の演算ユニット、整数の加減などの算術演算および／または比較、選択などを含む論理演算処理に適したデータパスを備えた第５種の演算ユニットがある。掛け算を第５種の演算ユニットに含めても良いが、それにより第５種の演算ユニットが大きくなりすぎる場合は、乗算処理に適したデータパスを備えた第６種の演算ユニットを別に設けることも有効である。これらの種類の演算ユニットにより、多くの処理において時間が費やされる検索処理や計算処理を記述あるいは定義する命令を実行することが可能である。したがって、高い頻度で繰り返し実行される処理、たとえば、信号処理やループ処理を、多数のハードウェアリソースに展開して高速に処理できる。
すなわち、本発明により、少数のハードウェアリソースを繰り返し使用する従来のソフトウェア手法では実行速度が上がらない部分を多数のハードウェアリソース上に展開して同時実行することによりパフォーマンスを向上できる。
これらの演算ユニットを配置してデータ処理区画においてスムーズなデータフローを形成するには、データの入力命令および／または出力命令の処理に適したデータパスを備えた演算ユニットが、データ処理区画の一方の端と他方の端に配列されていることが望ましい。また、パイプライン的な処理を実行するためには、各演算ユニットで消費されるクロックを明確にする必要がある。このために、各演算ユニットは、入力データをラッチする入力側のフリップフロップと、出力データをラッチする出力側のフリップフロップとを備えていることが望ましい。ただし、入力命令あるいは出力命令の処理に適したデータパスは、それ自体がバイトあるいはワード単位でデータをラッチするフリップフロップであることがあり、この場合は、１つのフリップフロップで入力データと出力データをラッチすることになる。
内蔵されたデータパスが異なると、演算ユニットで消費されるクロック数も異なる。また、データ処理区画におけるパスが異なると、演算ユニットに到達するタイミングも異なる。したがって、データの伝送時間を遅らせる処理に適したデータパスを備えた第７種の演算ユニットを備えていることが望ましい。また、演算ユニットの組み合わせを生成する際も、タイミング調整のために、そのような演算ユニットを含めた実行用の組み合わせを生成する。
さらに、演算ユニットで処理可能な範囲を広げるためには、データ処理区画の外部に配置された演算回路と接続する処理に適したデータパスを備えた第８種の演算ユニットも有用である。また、ルックアップテーブルにより処理が選択されるデータパスを備えた第９種の演算ユニットも有用である。さらに、同一種類の演算ユニットを同一方向に配列することにより、複数の同一の演算ユニットが連携し、拡張された演算機能を提供するようにしても良い。そのために、同一方向に配列された同一種類の演算ユニットは、複数の演算ユニットが連携して拡張された演算機能を提供するためのパスを備えていることが望ましい。たとえば、算術演算処理に適した演算ユニットであれば、単精度の演算ユニットを同一方向に並べることにより倍精度の演算処理を行わせることができる。
さらに、複数のデータ処理区画と、これらのデータ処理区画を接続する第３の配線群とを設けることにより、演算ユニットの組み合わせで処理可能な範囲を大幅に拡張できる。
本発明の集積回路装置は、第１の配線群に含まれる任意の配線と第２の配線群に含まれる任意の配線を選択して接続可能なスイッチングユニットを制御することにより、演算ユニットに供給されるデータのルートを変え、データ処理のための演算ユニットの組み合わせを変えることができる。したがって、本発明においては、複数種類の演算ユニットが配置され、配線群により複数種類の演算ユニットに供給されるデータのルートを変えてデータ処理のための複数種類の演算ユニットの組み合わせを変更可能なデータ処理区画を有し、複数種類の演算ユニットは、少なくとも１つの異なる命令レベルの処理に適したデータパスを備えた、異なる種類の演算ユニットを含んでいる集積回路装置を提供できる。この集積回路装置では、製造後に、データ処理区画の機能や実行可能な処理内容を変えることができる。トランジスタレベルで回路をマッピングすることを目的としたＦＰＧＡと異なり、予め特定の処理に適したデータパスを備えた演算ユニットの組み合わせを変えることで機能や処理内容を変更するので、短時間に処理内容を変更できる。したがって、ハードウェアで行う処理内容を動的に変更する能力を備えた集積回路装置を提供できる。
さらに、この集積回路装置のデータ処理区画は、全体として異なる処理を実行可能な汎用性を備えているが、各々の演算ユニットは、予め特定の処理に適したデータパスを備えた専用的な回路ユニットで汎用性は低い。したがって、冗長な部分は少なくなり、回路に無駄が発生しにくいので、コンパクトで経済的であり、さらに処理速度の速い集積回路装置を提供できる。
演算ユニットの組み合わせのフレキシビリティーを向上するには、演算ユニットに、第１の配線群および第２の配線群に含まれる任意の配線を選択して信号を入力または出力する手段を設けることが望ましい。演算ユニットに、配線の選択を記憶する書き換え可能なコンフィグレイションメモリを設け、スイッチングユニットに、配線の選択を記憶する書き換え可能なコンフィグレイションメモリを設けることが望ましい。コンフィグレイションメモリ、たとえばレジスタの内容を書き換えることにより、データ処理区画の機能を動的に変更できる。また、変更する内容を予めメモリに記録しておくことにより、広範囲の演算ユニットにより構成される機能を１クロックで簡単に変更できる。
集積回路装置に、コンフィグレイションメモリの内容を書き換えられる制御ユニットを搭載することにより、ハードウェアで実行可能な処理内容をプログラムにより制御できる集積回路装置を提供できる。制御ユニットはシーケンサあるいはマイクロコードメモリによる小規模なものでも良い。しかしながら、プログラムにより演算ユニットの組み合わせを変えることができる程度の機能を備えた演算ユニットが望ましい。演算ユニット（論理エレメントまたは論理ユニット）がマトリクス状に配置されたデータ処理区画と、リスクプロセッサなどの汎用プロセッサとを共存させることにより、少数のハードウェアリソースを繰り返し使用する従来のソフトウェア手法が適している処理は汎用プロセッサで実行し、実行速度が上がらない部分をデータ処理区画で実行することができる。さらに、汎用プロセッサにおける処理とデータ処理区画における処理を並列実行することも可能である。さらに、データ処理区画を構成する演算ユニットから他の演算ユニットのコンフィグレイションメモリを設定することも可能である。
プログラムにより制御できる集積回路装置においては、実行する処理を演算ユニットがサポートする命令を含むプログラム言語で記述し、その中間記述を実行可能な複数種類の演算ユニットの実行用の組み合わせを指示する命令を含めることにより、集積回路装置の実行プログラムを作成できる。中間言語は、アセンブラライクの線形性が高く、データフローグラムを生成しやすいものが望ましい。
さらに、演算ユニットに、内部のデータパスの一部を変更および／または選択する手段を設けることにより、データ処理区画でハードウェアにより実行できる機能あるいは処理の選択肢を広げることができる。そして、コンフィグレイションメモリに内部のデータパスの変更および／または選択も記憶させることができる。命令レベルの処理に適した演算ユニットの内部のデータパスは、少なくとも１つの命令の実行に適したデータパスである。この集積回路装置を設計し、実行プログラムを作成する過程では、内部のデータパスの選択および／または変更も含めた実行用の組み合わせを生成し、それを指示する命令を実行プログラムに含める。
発明を実施するための最良の形態
以下に図面を参照しながら、本発明についてさらに説明する。図１に、本発明に係る集積回路装置としてシステムＬＳＩ１０を構成した例を示してある。このシステムＬＳＩ１０は、実行プログラム３に含まれた命令に基づきエラー処理を含めたＲＩＳＣプロセッサなどの汎用的な処理を行う汎用のプロセッサ部１１と、マトリクス状に配置された複数の演算ユニットにより特定のデータ処理に適合したデータフローあるいは擬似データフローが形成されるデータ処理区画（以降ではマトリクス部）２０とを備えている。汎用プロセッサ部（以降ではＲＩＳＣとも称する）は、実行プログラム３に基づき、マトリクス部２０の組み合わせ（コンフィグレイション）も制御でき、マトリクス部２０のコンフィグレイションをダイナミックに変更することができる。ＬＳＩ１０は、さらに、マトリクス部２０からの割り込み処理を制御する割り込み制御部１２と、マトリクス部２０に作動用のクロック信号を供給するクロック発生部１３と、さらにフレキシブルな演算回路を構成するためのＦＰＧＡ部１４と、外部に対するデータの入出力を制御するバス制御部１５とを備えている。プロセッサ部１１とマトリクス部２０は、プロセッサ１１とマトリクス部２０との間でデータを交換可能なデータバス１７と、プロセッサ１１からマトリクス部２０の構成および動作を制御するための命令バス１８とにより接続されている。また、マトリクス部２０から割り込み制御部１２に信号線１９を介して割り込み信号が供給され、マトリクス部２０における処理が終了したり、処理中にエラーが発生したときはマトリクス部２０の状態をプロセッサ１１にフィードバックできるようになっている。
マトリクス部２０とＦＰＧＡ１４との間もデータバス２１により接続されており、マトリクス部２０からＦＰＧＡ１４にデータを供給して処理が行われ、その結果がマトリクス部２０に返される。マトリクス部２０は、ロードバス２２およびストアバス２３によってバス制御ユニット１５と接続されており、ＬＳＩ１０の外部のデータバスとの間でデータを交換する。したがって、マトリクス部２０には、外部のＤＲＡＭ２やその他のデバイスからデータを入力でき、そのデータをマトリクス部２０で処理した結果を再び外部のデバイスに出力できる。プロセッサ部１１もデータバス１１ａを介してバス制御ユニット１５を介して外部のデバイスとデータを入出力することが可能である。プロセッサ１１の実行プログラム（オブジェクトプログラム）３は、プロセッサ１１がコードＲＡＭあるいはＲＯＭを内蔵した構成であれば予めプロセッサ１１に格納しておくことができる。また、実行プログラム３を、バス１１ａを介してＬＳＩ１０の外から供給することも可能である。
図２にマトリクス部２０の概要を示してある。このマトリクス部２０は、６８個の演算ユニット（演算エレメント）３０により、横方向（行方向）に延びた配列が１７ライン、縦方向（列方向）に延びた配列が４ライン構成されており、複数の演算ユニット３０がアレイ状あるいはマトリクス状に配置されたものとなっている。これらの演算ユニット３０の間に、さらに、横方向に延びた行配線群５１と、縦方向に延びた列配線群５２とが配置されている。列配線群５２は、列方向に並んだ演算ユニット３０の左右に分かれて配置された１対の配線群５２ｘおよび５２ｙを備えている。これらの配線群５２ｘおよび５２ｙからデータが各々の演算ユニット３０に供給される。これらの列配線群５２は、上から９行目の演算ユニット（ＤＥＬユニット）でいったん分離されており、マトリクス部２０は、上方に形成された８行４列の演算ユニット３０を備えた第１のマトリクス２８と、下方に形成された９行４列の演算ユニット３０を備えた第２のマトリクス２９との２つのセグメントに分けられている。
図３に、演算ユニット３０と、行配線群５１および列配線群５２との交点に配置されたスイッチングユニット５５を拡大して示してある。行配線群５１は、バイト（８ビット）またはワード（１６ビットまたは３２ビット）単位のデータ、すなわち、８から３２ビット程度のデータを行方向に並んだ各演算ユニット３０（本例では４つの演算ユニット）から伝送できる配線量を備えている。したがって、本例のマトリクス部２０では、行方向の配線群５１は、少なくとも４チャンネル分の配線量のあるバスである。さらに、データ数に応じた数のキャリー信号を伝送する配線も用意されている。
列配線群５２も、バイトまたはワード単位のデータを各々の演算ユニット３０に供給できる配線量を備えている。マトリクス部２０は１つのセグメントに着目すると列方向に８つの演算ユニット３０が並んでいるので、本例の列配線群５２は８チャンネル分の配線量を備えたバスである。伝送するデータ数に応じたキャリー信号を伝送する配線も用意されている。
図４は、本例のマトリクス部２０の行配線群５１および列配線群５２のうち、キャリー信号を伝送するための配線５１ｃ、５２ｃｘおよび５２ｃｙを抜き出して示してある。キャリー信号は、桁上げ用の信号や真偽を示す信号として使用することが可能であり、本例のマトリクス部２０では、演算ユニット３０のうち、算術演算および論理演算に適したデータパス部（ＳＭＡ）３２ｂと、遅延用のデータパス部（ＤＥＬ）３２ｃと、ＦＰＧＡとのインターフェイスとなるデータパス部（ＦＰＧ）３２ｅとでキャリー信号Ｃｉが使用されている。したがって、これらを備えた演算ユニット３０を接続するようにキャリー信号用の配線５１ｃ、５２ｃｘおよび５２ｃｙが配置されている。
行配線群５１と列配線群５２の各々の交点に配置されたスイッチングユニット５５は、行配線群５１の任意のチャンネルを、列配線群５２の任意のチャンネルに切り替えて接続し、バイトまたはワード単位のデータの再構成可能な伝送路を構築している。図３に示したスイッチングユニット５５では、行配線群５１の任意のチャンネルを選択して列配線群５２に接続する複数のセレクタ５８と、それらのセレクタ５８の設定を記憶するコンフィグレイションＲＡＭ５９を備えている。コンフィグレイションＲＡＭ５９のデータは、プロセッサ部１１から供給されるデータにより書き換えられるようになっており、行配線群５１と列配線群５２との接続はプロセッサ部１１の制御の下で任意に動的に制御できる。
図５に示した、異なるタイプのスイッチングユニット５６は、行配線群５１の任意のチャンネルを構成する配線と、列配線群５２の任意のチャンネルを構成する配線とをクロスバースイッチ５７により切り替えて接続する。このタイプのスイッチングユニット５６もプロセッサ部１１によりデータがセットされるコンフィグレイションＲＡＭあるいはレジスタ５９を備えており、行配線群５１と列配線群５２との接続を自由に切り替えることができる。
図２に示すように、マトリクス部２０に配列された各演算ユニット３０は、１組の列配線群５２ｘおよび５２ｙのそれぞれから入力データを選択するための１組のセレクタ３１ｘおよび３１ｙと、これらのセレクタ３１ｘおよび３１ｙにより選択された入力データｄｉｘおよびｄｉｙに特定の演算処理を施し、出力データｄｏとして行配線群５１に出力するデータパス部３２を備えている。本例のマトリクス部２０に配置された複数の演算ユニット３０は、異なる特定の処理に適したデータパスを備えた複数種類の演算ユニットを含んでいる。そして、各行を構成する演算ユニット３０は、同一種類の処理を提供する同一のデータパス３２を備えている。つまり、各行毎に異なる処理を行うためのデータパス３２を備えた演算ユニット３０が並んで配置されている。
まず、第１行目に配列されたエレメントまたは演算ユニット３０は、ロードバス２２に接続されており、データをロードする処理に適したデータパス部３２ｆを備えている。ロード用のデータパス部（ＬＤ）３２ｆの構成の一例を図６に示してある。ＬＤ３２ｆは、入力データおよび出力データをラッチするフリップフロップ４１と、出力データのチャンネルを切り替える必要がある場合はそれを選択する情報を記録するコンフィグレイションＲＡＭ３９とを備えている。このＬＤ３２ｆは、「ｉｎｐｕｔ」あるいは「ｌｏａｄ」と言った入力命令を実行するユニットである。ＬＤ３２ｆは、ロードバス２２からデータを受信して、行配線群５１に出力する。なお、図２に示したＬＤ、以降で説明するＢＡＬ、ＬＤＡ、ＳＭＡおよびＤＥＬなどの略語は、データパス部３２や、そのデータパス部を備えた演算ユニット３０を示すために本明細書では使用される。
以下で説明する各演算ユニット３０は、それぞれコンフィグレイションＲＡＭ３９を備えており、その内容をＲＩＳＣ１１により設定することにより、演算ユニット３０と行配線群５１と列配線群５２との接続を動的に切り替えることができる。また、演算ユニット３０が、セレクタにより切り替えたり、変更したり、選択できるデータパスや、初期値を含めたコンディションやパラメータを設定できる機能を備えている場合は、コンフィグレイションＲＡＭ３９のデータを設定することにより、それらを制御することができる。
第２行目および第３行目に配列された演算ユニット３０は、データをロードするためのアドレスを出力する処理に適したデータパス部３２ａを備えている。このデータパス部（ＢＬＡおよびＬＤＡ）３２ａの構成の一例を図７に示してある。このＢＬＡおよびＬＤＡ３２ａは、「ｉｎｐｕｔ．ａｄｄｒｅｓｓ＿ｅｘｔｅｒｎａｌ」および  「ｉｎｐｕｔ．ａｄｄｒｅｓｓ＿ｉｎｔｅｒｎａｌ」などの命令により入力データのアドレスを指定する命令（ファンクション）を実行するユニットである。ＢＬＡおよびＬＤＡ３２ａは、カウンタなどで構成されたアドレス発生回路３８を備えている。このアドレス発生回路３８からアドレスが出力データｄｏとして出力され、行配線群５１および列配線群５２を介して入力データｄｉｘあるいはｄｉｙとして供給される。さらに、入力データとして供給されたアドレスのいずれかを選択するセレクタ４２と、入力データおよび出力データをラッチするフリップフロップ４１とを備えている。これにより、ロードするアドレスデータｄａがマトリクス部２０からバス制御ユニット１５に出力される。この演算ユニット３０もアドレス発生回路３８やセレクタ４２の状態を設定するコンフィグレイションＲＡＭ３９を備えている。このコンフィグレイションメモリ３９の内容（データ）はプロセッサ部１１によりセットされ、行配線群５１と列配線群５２との接続を動的に切り替えたり、アドレス発生回路３８の設定を自由に変更できる。
マトリクス部２０の第２行目を構成する演算ユニット３０のＢＬＡ３２ａは、ブロックロードするためのアドレスを発生する。一方、第３行目を構成する演算ユニット３０のＬＤＡ３２ａは、にブロックロードされた中から所望のデータをロードするアドレスを発生する。これらのデータパス部ＢＬＡおよびＬＤＡのいずれも、詳細な構成は異なるとしても、概略は図７に示したような同じ構成になる。
第４行目および第５行目に配列された演算ユニット３０は、算術演算および論理演算に適したデータパス部３２ｂを備えている。そのデータパス部（ＳＭＡ）３２ｂの構成の一例を図８に示してある。ＳＭＡ３２ｂは、演算用の基本エレメントであり、バイトまたはワード単位で供給される入力データｄｉｘおよびｄｉｙをビット単位できりだすためのビットシフト回路４３と、マスク回路４４とを備えている。さらに、入力データｄｉｘおよびｄｉｙを加算あるいは減算したり、比較したり、論理和あるいは論理積を演算できる論理演算ユニット（ＡＬＵ）４５を備えている。さらに、隣接するＳＭＡ３２ｂの演算結果を結合したり選択したりするための論理ユニット（ＬＵ）４６を備えている。
また、ビットシフト回路４３、マスク回路４４、ＡＬＵ４５およびＬＵ４６の処理を選択または変更するデータを記憶するコンフィグレイションＲＡＭ３９を備えている。さらに、入力データをラッチするフリップフロップ４８と出力データをラッチするフリップフロップ４９と、タイミング調整用の他のフリップフロップＦＦなどを備えている。
このＳＭＡ３２ｂは、「ａｄｄ」、「ｓｕｂ」、「ｃｏｍｐａｒｅ」、「ｓｈｉｆｔ」、「ａｎｄ」、「ｓｅｌｅｃｔ」などの加減算、比較、選択、その他の論理演算といったプログラムを記述する際に多用される算術演算命令および論理演算命令をサポートする。いずれの演算処理を行うか、また、いずれかの演算処理を複合的に行うかは、ＲＩＳＣ１１により設定されるコンフィグレイションＲＡＭ３９の内容により自由に制御でき、いつでも変更できる。また、コンフィグレイションＲＡＭ３９により、入力データｄｉｘおよびｄｉｙとして固定値を設定することができる。キャリー信号ＣｉｘおよびＣｉｙについても同様である。加えて、出力データｄｏからＡＬＵ４５にフィードバックする経路を設けることによりステートマシンやカウンタを構成することができる。また、入力データｄｉｘおよびｄｉｙを交換する機能もサポートしており、縦配線群５２の選択自由度および使用効率を上げるためにも利用できる。
また、データパス部３２ｂには、キャリー信号ＣｉｘおよびＣｉｙを入力し選択することができるパスが用意されており、キャリー信号によりＡＬＵ４５およびＬＵ４６を制御することが可能である。また、ＡＬＵ４５の演算結果に関わるキャリー信号Ｃｏを出力するパスも用意されている。隣接するＳＭＡ３２ｂのキャリー信号を任意に演算した結果をＡＬＵ４５およびＬＵ４６に入力することができ、キャリー信号を選択するだけでなく、キャリー信号同士を演算することも可能であり、キャリー信号の自由度は高い。
左右に配置されたＳＭＡ３２ｂの一方に設けられた論理ユニット（ＬＵ）４６により左側のＡＬＵ４５の出力と、右側のＡＬＵ４５の出力を論理演算できる。このため、コンフィグレイションＲＡＭ３９でＬＵ４６を制御し、行方向に左右に並んだ２つのＳＭＡ３２ｂで１つの拡張された機能を果たせることができる。たとえば、１つの入力データｄｉｘが３２ビットであるときに、倍精度の６４ビットのデータを処理するために、２つの入力データｄｉｘおよびｄｉｙで１つの入力データを表すことができる。
本例のマトリクス部２０では、ＳＭＡ３２ｂを備えた演算ユニット３０により、７、８、１１および１３行目の配列も形成されている。
第６行目に配列された演算ユニット３０は、データが伝送されるタイミングを遅延する処理に適したデータパス部３２ｃを備えている。このデータパス部（ＤＥＬ）３２ｃの構成の一例を図９に示してある。ＤＥＬ３２ｃは、複数のセレクタとフリップフロップの組み合わせで構成された遅延回路４７と、入力側のフリップフロップ４８と、出力側のフリップフロップ４９と、回路を選択するセレクタ４２とを備えている。遅延回路４７は、コンフィグレイションＲＡＭ３９のデータにより０〜５クロックの遅延をセットでき、ＸまたはＹ系統で１〜７クロックの遅延を制御できる。さらに、コンフィグレイションＲＡＭ３９の設定により、Ｘ系統とＹ系統とを直列に接続することが可能であり、２倍の遅延時間を制御できる。また、これらのデータと共に行配線群５１および列配線群５２で導かれるキャリー信号ｃｉｘおよびｃｉｙも同様のデータパスにより遅延して出力される。
遅延用のデータパスＤＥＬ３２ｃを備えた演算ユニット３０を用意することにより、各種のデータパス部３２における信号の遅延を任意に調整できる。したがって、算術演算や論理演算用のＳＭＡ３２ｂ、また、以下で説明する乗算の処理用のＭＵＬ３２ｄなどを組み合わせてデータフローを形成したときの遅延時間の差を調整するために各データパス部３２に遅延調整用のフリップフロップおよびセレクタを設ける必要がない。このため、各々のデータパス部３２の構成が簡易になり、データパス部３２の汎用性を向上できる共に、データパス部３２が占有する面積を最小限に留めることができる。また、各データパス部３２においては、入力データをラッチする入力側のフリップフロップ４８および出力データを出力側のフリップフロップ４９を設けたり、入力データおよび出力データを共にラッチするフリップフロップ４１を設けることにより、入力データがそのままあるいは加工されて出力される待ち時間（レイテンシ）はクロック単位で制御されている。したがって、レイテンシの差は、ＤＥＬ３２ｃの機能により埋めることは容易であり、演算ユニット３２を組み合わせて行う演算のパイプラインのタイミングを保障できる。
このＤＥＬ３２ｃは、縦配線群５２で供給されるデータを横配線群５１にいったん移行するという機能も果たす。このため、第９行目に配列された演算ユニット３０は、第１のマトリクス２８の縦配線群５２で供給されたデータを選択して第２のマトリクス２９の横配線群５１に出力している。このように、遅延用のＤＥＬ３２ｃの機能を用いて第１のマトリクス２８のデータを選択して第２のマトリクス２９に供給することが可能であり、セグメント化された第１のマトリクス２８の縦配線群５２と第２のマトリクス２９の縦配線群５２とを分離することができる。したがって、縦配線群５２の配線量を各々のマトリクス２８または２９を構成する演算ユニットの数をカバーするだけに限定することが可能となり、配線が占める面積を削減でき、配線群からデータを選択するスイッチングユニット５５あるいは５６などの構成を簡易にすることができる。
このＤＥＬ３２ｃは、マトリクス部２０でデータフローを構成する際に、タイミング調整などのために自動的に挿入される。プログラム中に「ｄｅｌａｙ」命令を記述して、データフロー間あるいはＲＩＳＣプロセッサとのタイミング調整を行うことも可能であり、そのような場合は、遅延命令を実行するための演算ユニットとして使用される。
第１０行目に配列された演算ユニット３０は、「ｍｕｌｔｉｐｌｙ」命令で指示される乗算処理の実行に適したデータパス部３２ｄを備えている。そのデータパス部（ＭＵＬ）３２ｄの構成の一例を図１０に示してある。このＭＵＬ３２ｄは、行方向に配置された４つの１６ビット×１６ビット（結果３２ビット）の乗算器ＭＵＬ６１が個々のＭＵＬ３２ｄを構成する。それと共に、これらの４つのＭＵＬ６１からの出力をさらに演算処理するデータパスＣＳＡ６２およびＣＰＡ６３が配置されている。したがって、本例の乗算処理用のＭＵＬ３２ｄは、行方向に配列された４つのＭＵＬ３２ｄを結合することにより機能を拡張できる。たとえば、倍精度の乗算を実行することができる。そして、ＭＵＬ６１、ＣＳＡ６２およびＣＰＡ６３、さらには、セレクタ６４の機能はデータパス部３２ｄのコンフィグレイションＲＡＭ３９にセットされたデータで制御される。
具体的には、左端のＭＵＬ６１（ＡＨ×ＢＨ）で、入力データｄｉｘの上位１６ビットと入力データｄｉｙの上位１６ビットの乗算を行い、次のＭＵＬ６１（ＡＨ×ＢＬ）で入力データｄｉｘの上位１６ビットと入力データｄｉｙの下位１６ビットの乗算を行い、ＭＵＬ６１（ＡＬ×ＢＨ）で入力データｄｉｘの下位１６ビットと入力データｄｉｙの上位１６ビットの乗算を行い、ＭＵＬ６１（ＡＬ×ＢＬ）で入力データｄｉｘの下位１６ビットと入力データｄｉｙの下位１６ビットの乗算を行う。そして、これらの乗算器の結果をＣＳＡ６２およびＣＰＡ６３により加算することにより、行方向に配置された４つのＭＵＬ３２ｄは３２ビット×３２ビット（結果６４ビット）の乗算器としても動作する。各々のＭＵＬ３２ｄの演算結果を、ＳＭＡ３２ｂで加算することによっても同様の結果を得ることが可能であるが、ＭＵＬ３２ｄを行方向に並べて配置し、加算用の演算器となる少量の専用回線を組み込むことにより、少ない遅延時間とゲート量で同等の結果を得ることができる。
ＭＵＬ３２ｄを配置する代わりに、ＳＭＡ３２ｂに掛け算機能を付加したデータパス部（ＳＭＡＭ）をＳＭＡ３２ｂの代わりに、あるいはＳＭＡ３２ｂと共に配置しても良い。単一の演算ユニット３０にどの程度多くの演算機能を搭載し、それをコンフィグレイションＲＡＭ３９により選択して使用するかは、マトリクス部２０の設計思想の差となる。本発明においては、１つの演算ユニット３０で処理可能な内容の大小はあっても、異なるデータパスを備えた複数種類の演算ユニット３０でマトリクス部２０を構成する。したがって、すべての処理をサポートするような単一の構成の処理ユニットを敷き詰めたようなマトリクスと比較すれば、はるかに無駄なスペースは少なくなり、無駄な処理時間も少なくなり、ＡＣ特性は向上する。
第１４行目に配列された演算ユニット３０は、マトリクス部２０の外部に用意されたＦＰＧＡ１４とのインターフェイス用のデータパス部３２ｅを備えている。このインターフェイス用のデータパス部（ＦＰＧ）３２ｅの概略構成を図１１（ａ）に示してある。ＦＰＧ３２ｅは、入力データを選択するセレクタ４２と、入力データをラッチしてオフチップＦＰＧＡ１４に供給するフリップフロップ４８と、オフチップＦＰＧＡ１４の出力をラッチして出力データとするフリップフロップ４９とを備えている。このＦＰＧ３２ｅを用いることにより、入力データをいったんオフチップＦＰＧＡ１４に供給して処理した後、再びマトリクス部２０に戻して処理を継続することができる。マトリクス部２０に配列される演算ユニット３０は、ＬＳＩ１０で実行するアプリケーションプログラム中に出現頻度の高い命令をサポートするものが選択され設計および配置される。汎用性の少ない機能を含めた演算ユニット３０は面積効率を悪化させることになるので配置されない。ＦＰＧ３２ｅを配置することにより、そのような処理あるいは機能であってもハードウェアで高速処理することができる。
このＦＰＧ３２ｅは、マトリクス内に外部インターフェイスを導入する汎用性の高いデータパス部であり、接続可能な外部処理回路はＦＰＧＡに限定されるものではない。ＡＳＩＣや、本例のマトリクス部２０を備えた他のＬＳＩなどを接続することも可能である。
第１５行目および１６行目に配列された演算ユニット３０は、ストア用のアドレスを発生するのに適したデータパス部ＳＴＡおよびＢＳＡを備えている。データパス部ＳＴＡおよびＢＳＡは、上述したインプットアドレスを指示する命令と同形式の出力アドレスを指示する命令を実行する。アドレスを発生させる機能としては、図７に示したデータパス部３２ａと同様の回路を使用することができる。ストア用にも２種類のアドレスが発生されるようになっており、データパス部ＢＳＡはブロック化したデータをストアするためのアドレスを発生し、データパス部ＳＴＡはブロック化するためのアドレスを発生する。
最下段の１７行目には、「ｏｕｔｐｕｔ」、「ｓｔｏｒｅ」などの命令によりデータを出力するのに適したデータパス部ＳＴを備えた演算ユニット３０が配列されている。このデータパス部ＳＴと称されているが、算術演算用のデータパス部３２ｂとほぼ同様の構成のデータパス部を採用できる。マトリクス部２０で算術演算した結果の外部の格納先が指定されている場合には、この演算ユニットＳＴを介してデータが出力される。
本発明の演算ユニット３０の種類はこれらに限定されるものではない。図１１（ｂ）は、ルックアップテーブル用のＳＲＡＭ６５を備えたデータパス部（ＲＡＭ）３２ｇの概略構成を示してある。入力データｄｉｘをアドレス、入力データｄｉｙをデータとして使用することができ、データとアドレスが同時に与えられた場合は書き込み、アドレスのみが与えられた場合は読み出しを行う。ＳＲＡＭ６５は複数のバンクを備えており、コンフィグレイションＲＡＭ３９の設定により、切り替えて使用することができる。また、４つのＲＡＭ３２ｇを行方向に並べて配置したときに、８ビットの４つのＲＡＭとしても、１６ビットの２つのＲＡＭとしても、さらに、３２ビットの１つのＲＡＭとしても利用できる。このデータパス部３２ｇは、バイトあるいはワード単位の入力データに対して任意の関数による出力データを得るためのルックアップテーブルとして使用できる。コサイン変換処理やＣＲＣ計算をマトリクス部２０で実現する場合に有用である。
本例のシステムＬＳＩ１０は集積回路装置の一例であり、その第１の方向（本例では行または横方向）、および第２の方向（本例では列または縦方向）にマトリクス状に配置された複数の演算ユニット３０を備えている。複数の演算ユニット３０は、特定の処理に適した異なるデータパス部３２を備えた複数種類の演算ユニットを含んでおり、上記では、データの入力に適したデータパス部３２ｆ、データのアドレスを発生する処理に適したデータパス部３２ａ、算術または論理演算処理に適したデータパス部３２ｂ、乗算処理に適したデータパス部３２ｄ、データの伝送時間を遅らせる処理に適したデータパス部３２ｃを例示している。これら複数種類の演算ユニット３０の間でデータを転送する横配線群５１および縦配線群５２の接続をスイッチングユニット５５で制御し、これらの演算ユニット３０の間の接続を変えることにより、マトリクス部２０に所望のデータ処理を行うデータフロー型の専用演算回路を定義できる。このため、本例のマトリクス部２０では、ＦＰＧＡのように各トランジスタ間の接続をすべて変更しなくても、演算ユニット３０の間の接続を変更することにより、短時間で処理内容の異なる専用演算回路を再構成できる。さらに、各演算ユニット３０は、ＦＰＧＡの論理ブロックようにトランジスタレベルでの汎用性が要求されるアーキテクチャではなく、各々の演算ユニット３０が特定のデータ処理に特化したデータパス部３２を備えているので、冗長な回路を省き、実装密度を向上できる。したがって、ハードウェアの処理内容を変更可能な、コンパクトで経済的なシステムを提供できる。また、冗長な構成を極力削減できるので、ＦＰＧＡに比べて大幅に処理速度を高速化でき、ＡＣ特性も向上できる。
図６ないし図１１に示したように、各々の処理に適したデータパス部３２ａ〜３２ｇはそれぞれ異なる構成になるので、各々のデータパス部が目的とする処理を高速で実行できる反面、各々のデータパス部が占有する面積が異なる。そこで、本例のマトリクス部２０においては、同一の機能のデータパス部３２を備えた演算ユニット３０を行方向に並べて配置することにより、演算ユニット３０が占有する面積がデータパス部３２の種類によって異なっても行方向の直線性を確保している。さらに、種類が異なるデータパス部３２であっても行方向のピッチが同じになるように等間隔に配置することにより、列方向の直線性も確保している。これにより、行配線群５１および列配線群５２をそれぞれ直線的にレイアウトできる。
すなわち、同一種類のデータパス部３２を備えた演算ユニット３０を行方向に等間隔で配置することにより、それらのサイズの差は、列方向の間隔で吸収することが可能であり、列方向の間隔が行単位で変わっても直線性は保障できるので、行配線群５１としては直線的に配線できる。もちろん、行方向と列方向とを入れ替えてデザインすることは可能であり、本願の発明の範囲に含まれる。
したがって、異なる構成のデータパス部３２を備えたサイズの異なる演算ユニット３０を極めて効率よくマトリクス状に配置することができる。さらに、それらを接続する行および列配線群（バス）を直線的に配置することができる。したがって、製造後に機能をセットすることができる再構成可能な集積回路装置を、よりコンパクトに、そして低コストで供給することができる。そして、ＦＰＧＡに比較して、高速処理が可能でＡＣ特性も良い演算ユニット３０を、よりコンパクトなレイアウトで配置し、最短の配線長で接続することができるので、その高速性を確実に活かせる集積回路装置を提供できる。
このように、同一の機能のデータパス部３２を備えた演算ユニット３０を行方向に配列することは、マトリクス部２０をデータフロータイプの処理装置として機能させる上でも有効である。たとえば、上記の例では、列方向の一方の端となる第１行目にデータの入力用の演算ユニット３０を配列し、列方向の他方の端となる第１７行目にデータの出力用の演算ユニット３０を配列している。そして、マトリクス部２０では巨視的には上から下に向かうデータフローが形成されており、それに対応して他の処理に適したデータパス部を備えた演算ユニット３０が配列されている。もちろん、行配線群５１および列配線群５２を用いて下から上に向かうデータフローを形成することも可能であり、マトリクス部２０に配置された各演算ユニット３０を最大限に活かしてデータ処理を行うことができる。
さらに、算術演算などに適したデータパス部３２ｂおよび乗算に適したデータパス部３２ｄのように、同一種類の演算ユニット３０を同一方向に配列することにより複数の演算ユニット３０を連携させることが可能となる。したがって、本例のマトリクス部２０においては、演算ユニット３０を個々に利用すると共に、行方向に配列された演算ユニットを束ねて、あるいは連携させて、倍精度の演算などの拡張された演算機能を提供できるようにしている。
そして、各々の演算ユニット３０およびスイッチングユニット５５あるいは５６はプロセッサ１１からデータを設定し、個別に制御することができるコンフィグレイションメモリを備えている。したがって、演算ユニット３０の組み合わせはプロセッサ１１から自由に変更することが可能であり、さらに、トランジスタレベルで回路をマッピングするＦＰＧＡと異なり、予め特定の処理に適したデータパス部３２を備えた演算ユニット３０の組み合わせを変えるので、短時間で、ほとんど１クロックで機能を変更することができる。
さらに、各々の演算ユニット３０では、データパス部３２を構成するセレクタやＡＬＵなどの論理ゲートの機能もコンフィグレイションメモリ３９を介してプロセッサ１１によって独立してセットすることが可能である。このため、演算ユニット３０の機能自体も、データパス部３２がサービスする機能の範囲内でフレキシブルに変更することができる。本例のマトリクス部２０において、データフロー型または擬似データフロー型で処理可能な機能の範囲は非常に広くなる。また、ネットワーク処理や、画像処理などのＬＳＩ１０が用いられるアプリケーションに適した種類の演算ユニット３０を選択し、配列することが可能であり、さらに実装効率の良い集積回路装置を提供することが可能である。
なお、上記の実施の形態で説明した行配線群５１および列配線群５２を入れ替えることが可能であると共に、演算ユニット３０の配列方向も行と列を入れ替えることができる。また、演算ユニット３０は行または列配線群のいずれに対してもデータを入出力しても良い。しかしながら、上記のマトリクス部２０で示しているように、一方の配線群、本例では列配線群５２からデータを入力し、他方の配線群、本例では行配線群５１にデータを出力するように規則を決めることにより、常に１つのスイッチングユニット５５を経由するだけで演算ユニット３０から演算ユニット３０にデータを伝送できる。
図１２に、本発明にかかる、異なるＬＳＩの例を示してある。本図では、割り込み制御ユニット１２、クロック発生部１３などを省略しているが、図１に示したＬＳＩと同様に種々のユニットが搭載されている。本例のＬＳＩ１０のマトリクス部２０の、２行目以降では、行方向に６個の演算ユニット３０が配列されている。これらの内、左側の４個の演算ユニット３０は、各行毎に、上述したＲＡＭとして機能するデータパス部３２ｇを備えた演算ユニット３０、ロードするデータのアドレスを発生するＢＬＡとして機能するデータパス部３２ａを備えた演算ユニット３０、同じくアドレスを発生するＬＤＡとして機能するデータパス部３２ａを備えた演算ユニット３０である。しかしながら、各行の右側の２個の演算ユニット３０は、算術および論理演算機能をサポートするＳＭＡとして機能するデータパス部３２ｂを備えた演算ユニット３０である。これは、本例のＬＳＩ１０として要求される仕様を満足するように演算ユニット３０を選択すると、ＳＭＡ３２ｂとして機能する演算ユニットが他のタイプの演算ユニットに対し大量に必要となっているからである。ＳＭＡ３２ｂの論理ユニットを他のタイプの演算ユニットの数に合わせて配置し、行方向に４つの演算ユニット３０を並べたマトリクス部２０を設計することも可能である。しかしながら、ＬＳＩ１０を構成する他のユニットの配置にも依存するが、マトリクス部２０だけを考えると縦長の配置になるために面積効率が悪化する。また、縦方向の数が増加するので、縦配線群５２の負荷が増し、セグメントの数が増加し、その結果、ＤＥＬ３２ｃの論理ユニットが必要となり、処理速度が低下することになる。
したがって、本例のマトリクス部２０では、数の多いＳＭＡ３２ｂの演算ユニット３０を行方向に追加して配置し、全体が正方形に近づくようにしている。このマトリクス部２０は、行方向の配列がすべて同一種類の演算ユニット３０で構成されているとは言えない。しかしながら、数の少ないＲＡＭ３２ｇや、ＢＬＡおよびＬＤＡなどの演算ユニット３０が配列された範囲では、行方向の配列はすべて同一種類の演算ユニット３０で構成され、行方向の直線性が確保されている。列方向の直線性は、各種の演算ユニット３０を行方向の等ピッチで配置することにより確保できることは上記と同様である。
また、本例のマトリクス部２０では、ロードバス２２およびストアバス２３にそれぞれ６つの入力バッファ２４および出力バッファ２５が配置され、それらのうち、２つのバッファ２４および２５がバス制御ユニット１５の代わりに拡張入出力用のインターフェイス２６および２７に接続されている。この拡張インターフェイス２６および２７は、マトリクス部２０の間のインターフェイスとして利用することができる。したがって、同一チップ内に複数のマトリクス部２０を配置して拡張インターフェイス２６および２７で接続したり、マトリクス部２０を備えた複数のチップ１０を拡張インターフェイス２６および２７を使用して接続することができる。
このため、これらの拡張インターフェイス２６および２７により、マトリクス部２０を備えたＬＳＩ１０を複数個使用してデータフロー型の演算器を自由に拡張できる。接続可能なマトリクス部２０が増え、接続可能な演算ユニット３０が増加することにより、複雑な処理が実行可能となる。また、演算ユニット３０の組み合わせを変えて再構成できる範囲が広がり、柔軟性のさらに高い演算処理装置を提供できる。並列度を上げるなどのパフォーマンスを向上する演算ユニット３０の組み合わせもフレキシブルに選択できるようになる。さらに、複数のマトリクス部２０を３次元方向に配列して３次元マトリクスを構成することも可能である。
図１３（ａ）は、拡張インターフェイス２６および２７により、ｎ個のＬＳＩ１０を接続することにより、マトリクス部２０を実質的にｎ倍に広げられるようにした演算処理装置あるいは集積回路装置９を示している。これらのＬＳＩは２次元方向にも３次元方向にも組み合わせできる。
また、複数のＬＳＩ１０が接続されたシステム９において、複数のマトリクス部２０およびそれを備えたＬＳＩ１０に対し、必要な情報を伝えるためのバスとして拡張インターフェイス２６および２７を使うことも可能である。図１３（ｂ）〜（ｄ）はその幾つかの例である。図１３（ｂ）では、拡張インターフェイスによりＬＳＩ１０をチェーン状に接続しており、図１３（ｃ）ではツリー状に接続している。また、図１３（ｄ）では、複数のＬＳＩ１０をリング状に接続している。
情報を伝達するアルゴリズムは簡単で良く、たとえば、全てのＬＳＩ１０に初期設定を伝播するための単純なプログラムを用意しておく。システム９をコントロールするＬＩＳ（チェーン接続ではチェーンの先頭、ツリー接続ではツリーの最上、リング接続の場合はいずれかのＬＳＩ）が情報をデータとトークンの形で次のＬＩＳ１０に伝え、情報を受け取ったＬＳＩ１０は、自分自身の情報として受け取ると同時に次のＬＳＩ１０に情報を伝える。情報の中身とそれが自分自身の情報であるか否かは、マトリクス２０のいずれかの演算ユニット３０を用いて判断できるように定義できる。情報の転送場所は、ＲＡＭとしての機能を備えた演算ユニット３０であっても良く、プロセッサ１１のＲＡＭでも良く、各演算ユニット３０のコンフィグレイションＲＡＭ３９であっても良い。
伝達する情報としては、ＲＩＳＣプロセッサ１１のプログラム３、マトリクス２０のコンフィグレイションＲＡＭ３９に設定する情報などがある。コンフィグレイションＲＡＭ３９に設定するには、拡張入力インターフェイス２６から受信した設定情報を、マトリクス部２０のストア機能を用いて出力バス２３とバス制御ユニット１５を介して演算ユニット３０のコンフィグレイションＲＡＭ３９にアドレス指定して書き込むことができる。いったん、外部のＤＲＡＭ２に格納して、プロセッサ１１の機能を用いてコンフィグレイションＲＡＭ３９に転送しても良い。
伝達する情報としては、さらに、時間の制御用の情報がある。一定周期（例えば１秒間隔）でデータを流すことにより、システム９の基準時計として使用し、システム９を構成する複数のＬＩＳ１０における処理を同期させることができる。
図１４に、本例のＬＳＩ１０の設計および製造方法の概要を示してある。ＬＳＩ１０で実行したい処理が仕様７１として与えられると、それをＬＩＳ１０で実行するためのプログラム言語で記述されたソースファイル７３に変換する処理７２を行う。変換処理７２においては、ＡＮＳＩ−Ｃなどの一般的な高級言語で記述された仕様７１を、演算ユニットライブラリ７９を参照して、演算ユニット３０がサポートする命令を含むプログラム言語（以降では中間言語）で記述された中間記述７３に変換する。この変換処理７２は、マニュアルでも良いし、コンパイラなどのソフトウェアを使用しても実行できる。
マトリクス２０を構成する演算ユニット３０のうち、演算ユニットＬＤは、データパス３２ｆを備えており、データの入力命令の処理に適した演算ユニットである。演算ユニットＢＬＡおよびＬＤＡは、データパス３２ａを備えており入力データのアドレスを指定する命令の処理に適した演算ユニットである。演算ユニットＳＴは、データの出力命令の処理に適した演算ユニットである。また、演算ユニットＢＳＡおよびＳＴＡは、データパス３２ａを備えており、出力するデータのアドレスを指定する命令の処理に適した演算ユニットである。演算ユニットＳＭＡは、データパス３２ｂを備えており、算術演算命令および／または論理演算命令の処理に適した演算ユニットであり、さらに、演算ユニットＭＵＬは、データパス３２ｄを備えており、乗算命令の処理に適した演算ユニットである。そして、これらの演算ユニット３０は、バイトあるいはワード単位のデータを処理するので、１つの演算ユニット３０で１つの命令あるいは複数の命令の処理を実行できる。
したがって、本例のマトリクス２０を構成する複数種類の演算ユニット３０は、データの入出力命令、算術演算命令および論理演算命令をサポートしていると言うことができ、データの入出力処理、算術演算処理、論理演算処理は、演算ユニット３０がサポートする命令セット（中間言語）で記述することが可能である。入出力処理、信号処理、算術演算処理および／または論理演算処理を繰り返して行うプロセス（ループ処理）は、ＲＩＳＣプロセッサ１１を用い、限られたハードウェアリソースを用いてソフトウェアで繰り返し実行しても処理速度の向上が望みにくい。これに対し、本例のマトリクス２０であれば、演算ユニットという多数のハードウェアリソース上に展開して同時並列実行することによりパフォーマンスを向上できる。したがって、そのようなプロセスをパフォーマンスアナライザなどで見つけ、簡単にハードウェア化し、処理速度を向上できる。
与えられた仕様７１を変換した中間記述７３は、Ｃ言語で記述されたＲＩＳＣプロセッサ１１で実行する部分７３ａと、マトリクス２０で実行するように中間言語で記述された部分７３ｂとに分かれる。中間記述の中間言語の部分７３ｂは、図１７に示したようなものであり、演算ユニット３０でサポートされる命令を考慮して、データフローグラムあるいはそれに制御情報が加わったコントロールデータフローグラフに変換できる程度に処理手順に表す記述である。したがって、ハードウェア記述言語であるＨＤＬなどと異なり、システムの仕様が設計者にも十分に分かり、システムの変更や修正があったとき中間記述７３ｂにその変更や修正を容易に反映することができる。中間言語の１つの形態は、アセンブラライクなもの、たとえば、マクロアセンブル的なものである。Ｃ言語よりも、難易度も低く、線形性も確保しやすいので、データフローグラムを作成しやすく、マトリクス部２０にマッピングされたときにどのような組み合わせで実現されたかも理解しやすい。したがって、マトリクス部２０およびプログラムの開発も容易であり、デバックやメンテナンスも容易である。
中間言語で記述された部分７３ｂは、演算ユニット３０がサポートする命令で記述されているので、その部分７３ｂの処理は、マトリクス２０における演算ユニット３０の組み合わせで表すことが可能となる。したがって、次に、配置配線処理７５により、中間言語により記述された処理７３ｂを実行可能な演算ユニット３０の組み合わせ（実行用の組み合わせ）７６を生成する。この処理は、コンパイラ（ソフトウェア）により行われる。実行用の組み合わせ７６が生成されると、その実行用の組み合わせ７６が実現できるように演算ユニット３０が配置されたマトリクス部２０の情報７８が出力される。その情報７８に基づきマトリクス部２０を生成すれば、ＬＳＩ１０の基本的な設計は終了し、それに基づきＬＳＩ１０を製造できる。また、実行用の組み合わせ７６を指示する命令８０を生成し、中間言語の記述７３ｂの代わりに、実行用の組み合わせを指示する命令８０と、その組み合わせを起動する命令とを含んだＣソースファイル７４をＣコンパイラ８１でコンパイルすることにより、ＬＳＩ１０の実行用のプログラム（オブジェクトプログラム）３を生成できる。
与えられた仕様７１を実行するために、マトリクス部２０の演算ユニット３０の組み合わせを変更する必要がなければ、組み合わせを指示する命令を生成する必要はなく、中間言語で記述された部分７３ｂの処理を実行可能な演算ユニット３０を備えたマトリクス部２０を生成するだけで良い。また、既存のマトリクス部２０を使用して、与えられた仕様７１を実行する場合は、マトリクス部２０を生成することはない。既存のマトリクス部２０に配置された演算ユニット３０の組み合わせを実行用の組み合わせ７６にするための命令８０を生成して、中間言語で記述された部分７３ｂを置き換えてコンパイルすることにより実行用プログラム３を生成できる。
実行用の組み合わせ７６を生成する配置配線処理７５では、演算ユニット３０における処理のタイミング調整のために、データパス３２ｃを備えた遅延用の演算ユニットＤＥＬを含めた組み合わせを生成する必要がある。したがって、配置配線処理７５では、異なるレイアウトのマトリクス部２０を設計し、すべての実行用の組み合わせが生成できるか否かを確認する作業を、適当なアルゴリズムで繰り返し行い、適切な組み合わせを見つける必要がある。
また、各々の演算ユニット３０は、コンフィグレイションＲＡＭ３９により内部データパスの構成を変更あるいは選択することが可能である。データパス３２ｂを備えた演算ユニットＳＭＡでは、演算処理の内容をコンフィグレイションＲＡＭ３９により設定する必要がある。したがって、配置配線処理７５においては、組み合わされる演算ユニット３０の内部のデータパス３２の構成も含めた実行用の組み合わせを生成する必要がある。そして、演算ユニット３０の設定は、実行用プログラム３に含まれた組み合わせを指示する命令により、各々の演算ユニット３０のコンフィグレイションＲＡＭ３９でアクティブになるようにマトリクス部２０に供給される。
図１５ないし図２１を参照して、演算ユニット３０の組み合わせを生成する過程の概略を説明する。図１５に、配置配線を行うコンパイラ７５における処理をフローチャートで示してある。まず、ステップ９１で、図１７に示した中間言語の記述７３ｂから図１８に示したデータフローグラム（ＤＦＧ）１０１を生成する。複数のデータフローグラム１０１が必要な場合は、それらを作成する。次に、ステップ９２で、それらのデータフローグラム１０１を構成できる演算ユニット３０を含んだ適当なレイアウトのマトリクス部２０を生成し、ステップ９３で１つ１つのデータフローグラム１０１について配置配線を行い、すべてのデータフローグラム１０１が割付できるマトリクス部２０のレイアウトと、実行用の組み合わせを見つける。ステップ９４で、１つのデータフローグラム１０１でも配置配線できない場合は、配置配線不可として、ステップ９２に戻って新しいレイアウトのマトリクス部２０を生成する。マトリクス部２０の出力側は、データを出力する処理を行う演算ユニットＳＴになるので、すべての演算ユニットＳＴについてデータフローグラム１０１を割り当てできれば、配置配線が成功したことになる。
図１６に、１つのデータフローグラム１０１を実行するための演算ユニット３０を組み合わせを生成する処理をフローチャートにより示してある。レイテンシの維持を容易にするためにデータフローグラム１０１の下流から順番に演算ユニット３０を割り当てていくことが望ましい。したがって、ステップ１１１で、データフローグラム１０１を構成する末尾の演算ユニットを配置でき、それを出力の演算ユニットＳＴに配線できるか否かを確認する。ステップ１１２で、適当な演算ユニット３０とそれらを接続する配線群が見つかれば配置配線は成功である。次に、ステップ１１３では、発見した資源、すなわち、演算ユニット３０と配線群とにマークし、末尾の演算ユニット３０を配置済みとする。そして、ステプ１１４で、配置済みの演算ユニット３０の入力元の演算ユニット３０が配置配線可能であるか否かを下流から上流へ辿りながら確認する。ステップ１１５で、入力元の演算ユニット３０の配置配線が可能であり、すべての入力元の演算ユニット３０が配置配線できれば、１つのデータフローグラム１０１がマトリクス部２０に配置できたことになる。
図１８に示したデータフローグラム１０１は、２つの入力データを、２回加算して出力データを得るものであり、図１９に示すように論理ユニット３０の組み合わせに置き換えることができる。すなわち、下流側から、出力用の論理ユニットＳＴ、２つの算術計算用の論理ユニットＳＭＡ、そして、２つの入力用の論理ユニットＬＤを含む組み合わせである。算術演算用の論理ユニットＳＭＡで加算を行うと２クロックが費やされるので、そのクロック（レイテンシ）を調整するために遅延用の論理ユニットＤＥＬが組合される。さらに、マトリクス部２０のレイアウトによる遅延を調整するために論理ユニットＤＥＬを適当に組み合わせる必要がある。
図２０に、このデータフローグラム１０１をマトリクス部２０に割り付けた様子を示してある。末尾の演算ユニットＳＭＡは、その値を出力する演算ユニットＳＴと同じ列で見つかっている。その演算ユニットＳＭＡの一方の入力元となる演算ユニットＤＥＬは同じ列で見つかり、他方の入力元となる演算ユニットＳＭＡは隣の列で見つかっている。図２０のマトリクス部２０は、３つのセグメント２９に分かれているので、同じ列で見つかった演算ユニットＤＥＬの入力元となる演算ユニットＬＤとは２つの演算ユニットＤＥＬを介して接続されている。同様に、隣の列で見つかった演算ユニットＳＭＡの入力元となる演算ユニットＬＤとは２つの演算ユニットＤＥＬを介して接続されている。したがって、マトリクス部２０にマッピングされたデータフローグラム１０１の実際の組み合わせは図２１に示すようになる。この組み合わせを指示する命令８０が、このマトリクス部２０を有するＬＳＩ１０の実行プログラム３に組み込まれ、その命令８０によりＲＩＳＣプロセッサ１１がマトリクス部２０の組み合わせを制御する。それにより、中間記述７３ｂの処理がマトリクス部２０でハードウェアにより実行される。
以上に説明したように、本発明の集積回路装置は、特定の処理に適したデータパスを備えた複数種類の演算ユニットが配置されたデータ処理区画（マトリクス部）を備えており、これら複数種類の演算ユニットの組み合わせを決めることにより、与えられた仕様、あるいはその一部をハードウェアで実行可能な集積回路装置を極めて短期間に設計および製造できる。データ処理区画に配置された演算ユニットは、命令を実行する機能を備えているので、与えられた仕様を、演算ユニットがサポートする命令を含む中間言語による記述に置き換えるだけで、ソフトウェア処理をハードウェア処理に変換することが可能である。そして、演算ユニットの組み合わせを見つけるだけで、そのデータ処理区画で実行可能な処理を定義できる。したがって、与えられた仕様を実行するハードウェアを製造するために、ハードウェア記述言語に展開し、トランジスタレベルの構成に論理合成し、それからハードウェアを生成したり、ＦＰＧＡにロードできる情報に変換したりする必要はない。さらに、論理ユニットの組み合わせを生成するために作成される中間言語の記述は、設計者が容易に処理を把握できるプログラム言語であり、修正や変更に対しても極めて柔軟に短期間で対応できる。
また、データ処理区画に配置された演算ユニットは、すべてが同一構成の汎用性だけを追求したものではなく、命令により指示される処理を実行するのに適した、異なる、または固有のデータパスを備えているので、回路の冗長性は少ない。したがって、コンパクトで経済的な集積回路装置を提供することができる。処理速度も速く、ＡＣ特性も良好な集積回路装置を提供することができる。そして、この集積回路装置は、複数の演算ユニットにより構成される機能を１クロックで簡単に変更できる能力を備えているので、データ処理区画を構成する演算ユニットおよび配線群といった資源を多種多様な処理に有効活用できる。
上述した例は、本発明の一例であり、本発明は、本明細書で開示したように様々なバリエーションを含んでいる。たとえば、マトリクス状に配置された演算ユニットの組み合わせにより構成されるデータフローグラムが固定されたものから、データフローグラムがプログラムによりダイナミックに再構成可能なものまで含んでいる。また、演算ユニットの組み合わせ、および演算ユニットの内部のデータパスの選択の制御は、リスクプロセッサからの指示に限らず、他のＬＳＩ、他のマトリクス、さらには、マトリクス内の演算ユニットからも可能である。上述した演算ユニットはアドレス発生、算術演算、論理演算、乗算、遅延などの特定の処理に適したデータパスを備えているものの例であり、演算ユニットに含まれるデータパスの機能や、構成は本例に限定されるものではない。また、マトリクス状に配置される演算ユニットの種類も上記の例に限定されるものではない。本発明のデータ処理装置で実行されるアプリケーションに適した機能のデータパスを備えた幾種類の演算ユニットを生成し、それらを配置してバスで配線することにより本発明の効果を得ることが可能である。
産業上の利用可能性
本発明の集積回路装置は、様々なデータ処理を実行可能なシステムＬＳＩなどとして提供することが可能である。また、本発明の集積回路装置は、電子回路に限定されることはなく、光回路あるいは光電子回路にも適用できるものである。本発明の集積回路装置は、再構成可能なハードウェアによりデータ処理を高速に実行できるので、ネットワーク処理や、画像処理などの高速性およびリアルタイム性が要求されるデータ処理装置に好適なものである。
【図面の簡単な説明】
図１は、本発明の実施の形態に係る集積回路装置の概略構成を示すブロック図である。
図２は、マトリクス部の概略構成を示す図である。
図３は、図２に示すマトリクス部の一部を拡大して示す図である。
図４は、図２に示すマトリクス部の配線群のうち、キャリー信号を伝送する配線の配置を示す図である。
図５は、スイッチングユニットの一例を示す図である。
図６は、データを入力する命令の処理に適したデータパス部の例である。
図７は、アドレスを出力する命令の処理に適したデータパス部の例である。
図８は、算術演算および／または論理演算の命令の処理に適したデータパス部の例である。
図９は、データが伝送されるタイミングを遅延する処理に適したデータパス部の例である。
図１０は、乗算命令の処理に適したデータパス部の例である。
図１１（ａ）は、外部に配置された演算回路と接続する処理に適したデータパス部の例である。図１１（ｂ）は、ルックアップテーブルにより処理が選択されるデータパス部の例である。
図１２は、本発明の異なる集積回路装置の概略構成を示すブロック図である。
図１３は、複数のＬＳＩを接続した幾つかの例を示す図である。
図１４は、本発明の集積回路装置を設計および製造する方法の概要を示す図である。
図１５は、配置配線処理の概要を示すフローチャートである。
図１６は、１つのデータフローグラムの組み合わせを求める処理の概要を示すフローチャートである。
図１７は、中間言語の記述の例である。
図１８は、マトリクス部で実現するデータフローグラムの例である。
図１９は、データフローグラムを演算ユニットの組み合わせで構成する例である。
図２０は、データフローグラムをマトリクス部にマッピングした例である。
図２１は、データフローグラムをマトリクス部で実現する組み合わせを示す例である。
【図１】
0004208577.tif 000002
【図２】
0004208577.tif 000003
【図３】
0004208577.tif 000004
【図５】
0004208577.tif 000005
【図４】
0004208577.tif 000006
【図６】
0004208577.tif 000007
【図７】
0004208577.tif 000008
【図８】
0004208577.tif 000009
【図９】
0004208577.tif 000010
【図１０】
0004208577.tif 000011
【図１１】
0004208577.tif 000012
【図１２】
0004208577.tif 000013
【図１３】
0004208577.tif 000014
【図１４】
0004208577.tif 000015
【図１５】
0004208577.tif 000016
【図１６】
0004208577.tif 000017
【図１７】
0004208577.tif 000018
【図１８】
0004208577.tif 000019
【図１９】
0004208577.tif 000020
【図２０】
0004208577.tif 000021
【図２１】
0004208577.tif 000022