本発明は、回路を再構成可能なデバイスに関するものである。
国際公開WO2003/023602号には、複数の処理ユニットを有するデータ処理システムであって、第1、第2および第3のデータ転送手段を有するデータ処理システムを提供することが記載されている。第1のデータ転送手段は、複数の処理ユニットをネットワーク状に接続して第1のデータの受け渡しを行い、複数の処理ユニットのうち、2以上の処理ユニットを接続することにより、再構成可能な少なくとも1つのデータフローを構成する。第2のデータ転送手段は、複数の処理ユニットに対し設定データをロードする制御情報などを第2のデータとして並列に供給する。第3のデータ転送手段は、複数の処理ユニットの各々に対して設定データを供給する。この設定データは、第1のデータ転送手段を介して接続される他の処理ユニットを直接または間接的に変更し、および/または、当該処理ユニットの処理内容を変更することにより、異なる機能のデータフローを設定するデータである。
この文献には、制御情報にデータフローを識別する情報を付加してブロードキャストし、複数の処理ユニット(エレメント)により構成されるデータフローを制御することが記載されている。データフローを再構成するために利用可能な処理ユニットの数が数百あるいはそれ以上になると、データフローを一時停止させるための制御情報などを各処理ユニットに伝達するタイミングを一致させないと、データフローにより処理されているデータあるいは処理状態を破棄せずに一時停止させることが難しい。
本発明の一態様は、複数の処理エレメントと、それら複数の処理エレメントを接続するためのルーティングマトリクスとを含み、複数の処理エレメントの少なくとも一部およびルーティングマトリクスの少なくとも一部によりデータフローが再構成される再構成区画を有するデバイスである。データフローを再構成する典型的な手段は、複数の処理エレメントのそれぞれの処理エレメントの機能を変更すること、および/または、ルーティングマトリクスの少なくとも一部の接続を変更することである。
このデバイスの複数の処理エレメントは複数のセグメントに区分けして配置されている。さらに、ルーティングマトリクスは、各セグメントに含まれる複数の処理エレメントを第1の遅延の範囲内で接続するための第1レベルのルーティングマトリクスと、異なるセグメントに含まれる複数の処理エレメントを、第1の遅延とは異なる遅延で接続するための第2レベルのルーティングマトリクスとを含む。このデバイスは、さらに、再構成区画に含まれる複数の処理エレメントのそれぞれにコマンドを伝達するためのコマンド伝達システムを有する。
このコマンド伝達システムは、各セグメントに設けられた伝達用のコマンドレジスタ(レジスタユニット)を有し、さらに、各セグメント内の複数の処理エレメントと伝達用のコマンドレジスタとを第1の遅延の範囲内で接続するための第1レベルのコマンド伝達マトリクスと、複数のセグメントの伝達用のコマンドレジスタとコマンドを出力するコマンド出力ユニットとを第1の遅延とは異なる遅延で接続するための第2レベルのコマンド伝達マトリクスとを含む。コマンドレジスタは、典型的にはマルチビットのフリップフロップまたはラッチユニットを含み、コマンドをクロックサイクル単位で入力および出力し、コマンドをクロックサイクルに同期して転送するために使用できる。
このデバイスでは、複数の処理エレメントが、第1レベルのルーティングマトリクスにより第1の遅延(第1の遅延時間、第1のサイクルまたは第1のレイテンシ)の範囲内、たとえば、複数の処理エレメントが動作する最少の時間間隔の1クロックサイクルで接続できる複数のセグメントに区分けして配置される。したがって、伝達用のコマンドレジスタと、第1レベルのコマンド伝達マトリクスとをセグメント毎に設けることにより、セグメント内のすべての処理エレメントに対して、伝達用のコマンドレジスタからコマンドを第1の遅延の範囲内、たとえば、1クロックサイクルで伝達できる。このため、第2レベルのコマンド伝達マトリクスにより、複数のセグメントのコマンドレジスタに対し所定の遅延(遅延時間、レイテンシ)の範囲内、たとえば1クロックサイクルでコマンド出力ユニットからコマンドを伝達すれば、コマンド出力ユニットから出力されたコマンドにより、再構成区画に含まれる全ての処理エレメントを同期して(同じタイミングで)制御できる。
このコマンド伝達システムでは、コマンド出力ユニットから各処理エレメントに対して所定の(固定された)遅延を経た後にコマンドが伝達される。したがって、コマンドの伝達には、少なくとも複数クロックサイクルを消費するが、コマンドの伝達に要するクロックサイクル(レイテンシ)は一義的に規定できる。このため、各セグメント内の処理エレメントだけではなく、再構成区画に含まれる全ての処理エレメントに対して同期してコマンドを伝達できる。したがって、所定のレイテンシを考慮してコマンドを出力することにより、多数の処理エレメントによりデータフローが構成される場合であっても、データフローを構成する多数の処理エレメントを同期して一時的に停止したり、再稼働させたりすることが可能となる。
コマンドは、データフローを制御するデバイス内あるいはデバイス外のプロセッサから供給されても良い。即応性の要求されるコマンドは、複数の処理エレメントの少なくとも一部より生成および出力されても良い。それらの少なくとも一部の処理エレメントは、コマンド生成ユニットを含むことが望ましい。コマンドを生成および出力する処理エレメントの典型的なものは、再構成区画に構成されたデータフローにより処理された出力を一時的に格納する格納ユニットを含む出力インタフェースエレメントである。出力インタフェースエレメントは、格納ユニット(バッファ)にてデータ入出力の速度差を吸収できない場合は、このコマンド伝達システムを介してストップコマンドを出力して、再構成区画に再構成されたデータフローを一時的に停止することができる。すなわち、コマンド伝達システムにより伝達されるコマンドの典型的なものは、各処理エレメントのクロックを停止するためのストップコマンドである。
デバイスは、さらに、コマンド生成ユニットにより発生されたコマンドをコマンド出力ユニットに収集するためのコマンド収集システムを含む。コマンド収集システムは、各セグメントに設けられた収集用のコマンドレジスタを含み、さらに、各セグメント内の少なくとも一部の処理エレメントと収集用のコマンドレジスタとを第1の遅延の範囲内で接続するための第1レベルのコマンド収集マトリクスを含む。コマンド収集システムは、さらに、複数のセグメントの収集用のコマンドレジスタとコマンド出力ユニットとを第1の遅延とは異なる遅延で接続するための第2レベルのコマンド収集マトリクスを含む。
収集用のコマンドレジスタと、第1レベルのコマンド収集マトリクスとをセグメント毎に設けることにより、セグメント内のコマンド生成ユニットを含む処理エレメントの全てから収集用のコマンドレジスタに第1の遅延の範囲内、たとえば、1クロックサイクルでコマンドを収集できる。このため、第2レベルのコマンド収集マトリクスにより、複数のセグメントの収集用のコマンドレジスタから、所定の遅延の範囲内、たとえば1クロックサイクルでコマンド出力ユニットにコマンドを回収すれば、再構成区画に含まれるコマンド生成ユニットを備えた処理エレメントの全てから所定のレイテンシ(遅延)でコマンドをコマンド出力ユニットに収集できる。このため、コマンド伝達システムを介して、コマンド生成ユニットから所定の、あるいは規定されたレイテンシで、再構成区画に含まれる全ての処理エレメントを同期して(同じタイミングで)、そのコマンドにより制御できる。
したがって、再構成区画に含まれた、ある処理エレメントのコマンド生成ユニットにより生成されたコマンドを、再構成区画に含まれる全ての処理エレメントに同期して伝達することが可能となる。このため、再構成区画に含まれる処理エレメントにより、データフローを的確に制御することが可能となる。例えば、多数の処理エレメントによりデータフローが構成される場合であっても、データフローを構成する多数の処理エレメントを、処理エレメントから出力されるコマンドにより、同期して一時的に停止したり、再稼働させたりすることが可能となる。
このデバイスにおいては、コマンドを発生する処理エレメントが属するセグメントの処理エレメントに対してもコマンド収集システムおよびコマンド伝達システムを介してコマンドが伝達される。さらに、コマンドを発生する処理エレメント自身においても、コマンド収集システムおよびコマンド伝達システムを介してコマンドを受信する。したがって、再構成区画に属する全ての処理エレメントにおいて、処理エレメントにおけるコマンド発生から処理エレメントにおいてコマンドを受信するまでのレイテンシは一律である。このため、再構成区画に含まれる複数のセグメントにわたり再構成されるデータフローに属する全ての処理エレメントに対してコマンドを同期したタイミングで伝達でき、データフローの処理に不整合が発生するのを防止できる。
コマンド出力ユニットは、少なくとも一部の処理エレメントの出力したコマンドを第2レベルのコマンド伝達マトリクスを介して複数のセグメントのコマンドレジスタに伝達するコマンドリレーユニットとしての機能を有する。コマンド出力ユニットにレジスタ(フリップフロップ)を設けることにより、各処理エレメントへコマンドが伝達されるレイテンシをさらに精度良く規定できる。コマンドのソースとなる他の少なくとも一部の処理エレメントは、コマンド収集システムおよびコマンド伝達システムによりコマンドを伝達するために要するクロックサイクルを加味してコマンドを出力することにより、データフローを適切に制御できる。コマンド出力ユニットは、出力インタフェースエレメントに含まれていても良い。
再構成区画に構成されたデータフローに入力されるデータを一時的に格納する格納ユニットを含む入力インタフェースエレメントもコマンドを生成および出力することが望ましい。データフローにより処理されている途中のデータを一時的に格納する格納ユニットを含むデータ格納型エレメントもコマンドを生成および出力することが望ましい。データフローに入力するデータの準備ができていなかったり、データフローの途中において上流のデータフローおよび下流のデータフローの処理速度の調整が必要となるケースがあるからである。
入力インタフェースエレメントまたはデータ格納型エレメントに含まれるコマンド生成ユニットは、それぞれの格納ユニットに残存するデータ量が、コマンド収集システムおよびコマンド伝達システムによりコマンドを伝達するために消費されるサイクル(クロックサイクル、レイテンシ)の間に、そのデータを処理するデータフローにより消費されるデータ量と同じになったときに、ストップコマンドを出力することが望ましい。入力インタフェースエレメントまたはデータ格納型エレメントがデータフローにデータを提供する場合に、そのデータフローによる処理に不整合を発生させずに一時停止させ、また、そのデータフローによる処理を再開できる。コマンド生成ユニットは、格納ユニットに最終のデータがあるときは、ストップコマンドを出力せずに、最終のデータを出力できるようにすることが望ましい。
再構成区画に複数のデータフローが構成される場合は、再構成区画に含まれる複数の処理エレメントは、それぞれの処理エレメントが属するデータフローを識別する識別情報を含む制御ユニットを含み、コマンドは識別情報を含むことが望ましい。複数のデータフローに含まれる処理エレメントを識別情報により識別し、ストップすべきデータフローだけを停止し、他のデータフローはそのまま稼働させることができる。コマンド生成ユニットを含む処理エレメントの上流のデータフローを識別する識別情報と、下流のデータフローを識別する識別情報とは異なることが望ましい。処理エレメントの上流のデータフローの稼働と下流のデータフローの稼働とを個別に制御することにより、コマンドの発生要因を解決できる可能性がある。
図1は、再構成可能なデバイスのブロックダイアグラム。
図2は、PEマトリクスの配列を示す。
図3は、PEマトリクスのセグメントの配列を示す。
図4は、PEマトリクスの配置を拡大して示す。
図5は、セグメント内のPEの配列を示す。
図6は、セグメント内の配線(イントラセグメント配線)を示す。
図7は、セグメント間の配線(インターセグメント配線)を示す。
図8は、ALUエレメントのブロックダイアグラム。
図9は、LDBエレメントのブロックダイアグラム。
図10は、STBエレメントのブロックダイアグラム。
図11は、RAMDエレメントのブロックダイアグラム。
図12は、DLEエレメントのブロックダイアグラム。
図13は、コマンド伝達システムおよびコマンド収集システムのブロックダイアグラム。
図14は、PEの制御ユニットのブロックダイアグラム。
図15は、LDBエレメントのバンク切り替えを示す。
図16は、バブルが発生した例を示す。
図17は、フローストップによりデータフローを停止した例を示す。
図18は、LDBエレメントのバンクコントローラ(コマンド生成ユニット)を示す。
図19は、フローストップコマンドを出力したときのタイミングチャート。
図20は、フローストップコマンドが出力されないときのタイミングチャート。
図21は、フローストップコマンドが出力されないときの他の例のタイミングチャート。
発明の実施の形態
図1に、再構成可能なデバイスの一例を示している。このデバイス1は、本願の出願人が開発したDAPDNAと称する半導体集積回路装置である。このデバイス1は、DAPと呼ばれるRISCコアモジュール2と、DNA(Distributed Network Architecture)と呼ばれるダイナミックリコンフィグラブルデータフローアクセレレータ(Dynamic Reconfigurable Data-flow Accelerator)3とを含む。デバイス1は、DAP2およびDNA3に加え、DNA3のダイレクト入出力用のインタフェース4と、PCIインタフェース5と、SDRAMインタフェース6と、DMAコントローラ7と、その他のバスインタフェース8と、これらを接続するための高速バススイッチ9とを含む。DAP2は、デバッグインタフェース2aと、RISCコア2bと、命令キャッシュ2cと、データキャッシュ2dとを含む。このデバイス(システム)1は、1つのチップ(IC、LSIあるいはASIC)として提供することも可能であり、複数のチップを含むチップセットとして提供することも可能である。
DNA3は、955個の処理エレメントPE(以降では単にPEまたはPEsと呼ぶことがある)が2次元に配置されたPEマトリクス(マトリックス)10と、このPEマトリクス10に含まれる複数の処理エレメントPE(PEs)の機能および/または接続を変えてPEマトリクス10を再構成するためのコンフィギュレーションデータが格納されるコンフィギュレーションメモリシステム11とを含む。コンフィギュレーションメモリシステム11は、各PEの制御ユニットに含まれるコンフィギュレーションレジスタシステムと、それらのレジスタシステムへコンフィギュレーションデータを転送する転送システムとを含む。
図2に、PEマトリクス10の配列を拡大して示している。PEマトリクス10には955個のPE17が縦横にマトリクス(2次元アレイ構造)を構成するように配置されており、並列処理プロセッサの中核をなしている。PEマトリクス10は、ハードウェア的には2次元の格子状に並んだPE17と、それらを接続するバス(配線マトリクス)で構成されている。各PE17は演算器やメモリといった基本的な機能だけを持ち、これらのPE17をバスで相互に接続することにより、複雑な機能を実現する。各PE17の機能やバスの接続はソフトウェアで変更でき、その情報をDNAコンフィギュレーションと呼んでいる。PEマトリクス10の上でさまざまな処理をするためには、その処理に対応したDNAコンフィギュレーションを作成してPEマトリクス10に設定する。PEマトリクス10内には複数のDNAコンフィギュレーションを保存することができ、現在の処理にどのDNAコンフィギュレーションを使用するかは動的に変更できる。これらについては、以降においてさらに詳しく説明する。
PEマトリクス10における処理の基本的な動作は、図2に示すように、外部のメインメモリ19などから取り込んだデータを処理して、再び外部に送り出すことである。外部のメインメモリ19などに対してはSDRAMインタフェース6などを介してデータを入出力できる。PEマトリクス10には、外部からのデータの取り込み口は2種類用意されている。1つはLDBと呼ばれるPE17で、SDRAMインタフェース6などを介してデバイス1に接続されたメインメモリ19からデータを取り込む。もう1つはLDXと呼ばれるPE17で、ダイレクトI/Oインタフェース4を介して外部接続された他のデバイス18から直接データを取り込む。これらのPE17から取り込まれたデータはPEマトリクス10の内部の複数のPE17により構成されるデータフロー(データパス)で処理され、出力される。処理の終わったデータを外部に送り出す口も2種類用意されている。1つはSTBと呼ばれるPE17で、メインメモリ19にデータを書き込む。他の1つはSTXと呼ばれるPE17で、ダイレクトI/Oインタフェース4を介して接続された外部デバイス18に直接データを送り出す。
図3から図5に、PEマトリクス10のさらに詳細な構成を示している。PEマトリクス10に配置された複数のPE17は、データに対して種々の処理を行うことを中心とするPE(ePE)17eと、PE間の接続を主に行う接続用のPE(DLVおよびDLH)17cとを含む。図3に示すように、PEマトリクス10に配置された複数のPE17は、4カラム×4ロウ構成の16個のセグメント(以降において、セグメントを一般的に示す場合はセグメントS、個々のセグメントを示す場合はセグメントS0−S15、または、セグメントa1−a4、b1−b4、c1−c4およびd1−d4とする)に分割あるいは区画化されている。それぞれのセグメントSには8カラム×8ロウ構成のデータ処理用のPE(ePE)と、他のセグメントSとの境界に沿って配置されたDLVおよびDLHとを含む。各々のセグメントSに含まれるPE17は、1サイクルの遅延の範囲内でデータを送受信可能なイントラセグメントコネクション(セグメント内接続、第1レベルのルーティングマトリクス)21で接続されている。また、隣接するセグメントSは、DLVおよびDLHを介してインターセグメントコネクション(セグメント間接続、第2レベルのルーティングマトリクス)22により接続されている。なお、以降において、各タイプのPE17を示す場合は、LDB、LDXなどの各タイプの名称を示す。
それぞれのセグメントの配置は異なっている。たとえば、セグメントa1−d1にはLDBまたはLDXが配置され、セグメントa4−d4にはSTBまたはSTXが配置されている。PEマトリクス10に構成されるデータフロー(データパス)における基本的な信号の流れはセグメントa1、b1、c1、d1からセグメントa4、b4、c4、d4となる。
図4に、セグメントa1〜a4およびb1〜b4のPE17の配置の一例を示している。図5には、セグメントa1の配置を拡大して示している。各セグメント内のデータ処理用のPE17eは基本的に8カラム×8ロウ構成となっている。すなわち、セグメントの左上をカラムc0、ロウr0、右下のPEをカラムc9、ロウr9としたときに、データ処理用のPE17eはカラムc1〜c8およびロウr1〜r8の範囲に配置されている。DLHおよびDLVを除くPE17eの左上のものが、カラムc1、ロウr1に配置される。ただし、MUL、SFT、RMCなど2系統のデータ出力を持つPE17e、およびRAMは2カラム、すなわち、最小のPE17の2つ分のエリアが割り当てられている。STBおよびLDBには4カラム分、すなわち、最小のPE17の4つ分のエリアが割り当てられている。
また、データ転送用のPE17cであるDLVおよびDLHは、カラムc0およびc9、ロウr0およびr9に配置される。なお、各セグメントの4コーナーにはDLVおよびDLHは存在しない。さらに、図4に示すように、上下左右の端に位置するセグメントでは、上下のロウのDLVまたは左右のカラムのDLHは存在しない。すなわち、四隅のセグメントa1、a4、d1およびd4では、上下の一方のロウ(r0またはr9)にDLVは存在せず、左右の一方のカラム(c0またはc9)にDLHは存在しない。セグメントb1、c1では上方のロウr0にDLVは存在しない。セグメントb4、c4では、下方のロウr9にDLVは存在しない。セグメントa2、a3では左側のカラムc0にDLHは存在せず、セグメントd2、d3では右側にカラムc9にDLHは存在しない。
図6に、イントラセグメントコネクション(セグメント内接続、第1レベルのバス、第1レベルのルーティングマトリクス)21を示している。第1レベルのバス21は、セグメント内のPEを接続する横方向(水平方向)のバス21hおよび縦方向(垂直方向)のバス21vと、バス21hおよび21vを接続するためのスイッチ(セレクタ、バスセレクタ、H−to−Vセレクタ)21sとを含む。
図6は、セグメント内の4カラム×2ロウのエリア、たとえば、カラムc1〜c4およびロウr1〜r2を抜粋したものである。横方向のバス21hは、同一ロウに配置された各PE17の出力と左右に隣接するセグメントのDLHの出力とを接続するためのバスである。縦方向のバス21vは、同一カラムに配置されたセレクタ21sの出力と、上下に隣接するセグメントのDLVの出力とを接続するためのバスである。セレクタ21sは、縦方向のバス21vと横方向のバス21hの各交点に配置されており、図6のように同一カラム上の奇数および偶数のロウ(ロウ2N−1および2N)がペアとなるように構成されている。各コーナーのセレクタ21sは、各ロウ(横方向のバス)21hから2出力を縦方向のバス21vに出力する。第1レベルのバス21は、さらに、各PE17に対応して、縦方向のバス21vと各PE17とを接続するためのセレクタ(PE入力セレクタ)21tを含む。
これらのバス21hおよび21vを含む第1レベルのバス21により接続できる範囲、すなわち、各セグメントS内のPEの間(接続元のPEのFF(フリップフロップ)またはレジスタと、接続先のPEのFFまたはレジスタとの間)では1サイクル(1クロックサイクル)以内にデータを送受信できる。したがって、信号が伝搬するタイミング(レイテンシ)的には、例えば、セグメントa1に含まれるPEは、いずれも等価である。このため、同一セグメント内であれば、回路を構成するために、いずれのPEを選択して機能を割り付けても、事前のタイミングの検討は不要である。タイミング的には、あるセグメント内の複数のPEを用いて、所定の回路を自由に配置および配線できる。
図7に、第2レベルのルーティングマトリクス22の構成を示している。図7では、第2レベルのルーティングマトリクス22により、隣接するセグメント(図7ではセグメントa1およびb1)にそれぞれ含まれている接続用のPE17cに含まれるDLHを接続している。図7に示したそれぞれのDLHは、それぞれのセグメントS1およびS4の内部の第1レベルのルーティングマトリクス(intra-segment interconnect)21に接続している。したがって、セグメントS1に含まれるPE17と、セグメントS4に含まれるPE17とを第2レベルのルーティングマトリクス(inter-segment interconnect)22を介して接続することができる。接続用のディレイエレメント17cであるDLHは、第1レベルのルーティングマトリクス21に含まれるバスのインタフェースとして機能する。したがって、第1レベルのルーティングマトリクス21に含まれるバスを、セグメント毎に独立して使用できる。一方、セグメント間でデータを入出力する必要があるときは、接続用のDLHに含まれるFF(フリップフロップ、レジスタ)を介してデータを入出力する。このため、セグメント間の第2レベルのルーティングマトリクス22を介して信号が伝達されると、クロックに同期した1サイクルの遅延が新たに加わる。上下に配置されたセグメントSの接続も接続用のPE17cであるDLVを介して同様に行われる。
第1レベルのルーティングマトリクス21のみを用いてPE17を接続する場合、PE17の間の遅延時間(遅延、レイテンシ)は1クロックサイクル(第1の遅延)の範囲内で接続されることが保証される。したがって、タイミングの検証は不用である。これに対し、第2レベルのルーティングマトリクス22を介してPE17を接続する場合は、少なくとも1クロックサイクルの遅延が余分に加わる。第2レベルのルーティングマトリクス22を介して接続する場合の遅延時間は、ディレイエレメントDLHの設定に依存し、遅延量(遅延時間)は制御できる。例えば、DLHの遅延量を制御することにより、第2のルーティングマトリクス22を2回使用する信号と、第2のルーティングマトリクス22を1回使用する信号とをシンクロナイズできる。他の接続用のディレイエレメントDLVを介して隣接するセグメントSを接続するときも同様である。
図7に示したDLHにおいては、PEマトリクス10の横方向のバス(Hバス)21hの信号を隣のセグメントに渡す機能を持つ。それぞれのDLHは、24入力8出力である。24個の入力は、ペアとなる奇数および偶数のロウの各PE17からの出力(ロウ当たり8出力の2倍、合計16)と、同じセグメント内で対向するDLHの4つの出力の倍(合計8)とを含む。各々のDLHは、それら24の入力から8つの出力を選択し、第2レベルのルーティングマトリクス22を介して隣のセグメントのDLHに出力する。DLVにおいても基本的な構成は同じである。
図4および図5に示したマトリクス10に配置されたPE17の内、ALU、ALC、ALS、MUL、BTC、RMCおよびSFTで示されたタイプのPE17は、20種類の算術演算、論理演算および2入力の比較機能を持つ。データの入出力は、16ビットデータの2入力、1出力である。乗算器は、16ビットデータの入力、32ビットデータの出力である。これらのPE17は一般にALUエレメントと称されるが、それぞれ固有の演算機能を含む。例えば、ALUとALCは同じ演算処理を含むが、内部に固定値を持つかどうかの違いがある。ALCは1個の16ビットの固定値を内蔵し、ALUは固定値を内蔵しないかわりに、隣接するALCの固定値を利用する。ALSは、1個の16ビット固定値を内蔵し、FF1(Find the First 1)、SN1(Sum of Number of 1)、S2P(Serial To Parallel)、P2S(Parallel To Serial)などの特殊処理をサポートする。MULは、乗算器を内蔵する。BTCは、ビット単位で出力データを設定する。出力16ビットに対して、個々の出力ビットに入力32ビットから任意の1ビットを選択することができる。RMCは2入力2出力のPEで、ビットのローテート、マスク処理および比較処理を実行する。また、16ビットの固定値を供給する。SFTは32ビットのシフト処理を行う。
DLEで示されたタイプのPE17は、レイテンシの調整とセグメント間のデータの受け渡しに使用される遅延エレメントである。DELのデータの入出力は1入力1出力である。遅延エレメントには、遅延調整用PE17eとしてDLE、セグメント間のデータ受け渡し専用PE17cであるDLHおよびDLVが含まれる。
RAMで示されたタイプのPE17はDNAマトリクス10の内部メモリである。RAMは、8Kバイト×54個および16Kバイト×1個の合計448Kバイトのメモリ領域を含む。このメモリ領域では、DNAコンフィグレーションを切り換えても値は保持される。RAMエレメントには、RAMS、RAMD、RAMVの3種類が含まれる。
C16L、C16S、C32L、C32S、C32EおよびC16Eで示されたタイプのPE17は、カウンタエレメントであり、DNAバッファに対するアドレスジェネレータ、メインメモリに対するアドレスジェネレータ、および汎用カウンタとして使用される。C16LおよびC16SはDNAバッファに対するアドレスジェネレータであり、カウンタ機能(16ビットカウンタを2つ)を持ち、ALUエレメントと併用してより複雑なアドレスパターンを生成することができる。C32LおよびC32Sは、メインメモリに対するアドレスジェネレータであり、カウンタ機能(32ビットカウンタを2つ)を持ち、ALUエレメントと併用してより複雑なアドレスパターンを生成することができる。C32EおよびC16Eは、それぞれ、32ビットおよび16ビットの汎用カウンタである。
LDBで示されたタイプのPE17は、メインメモリ19からPEマトリクス10にデータを入力するDNAロードバッファであり、入力インタフェースエレメントに相当する。LDBは、4バッファ構成で、1バンクが8Kバイトの容量のバッファを含む。STBは、PEマトリクス10からメインメモリ19へデータを出力するDNAストアバッファであり、出力インタフェースエレメントに相当する。STBで示されたタイプのPE17は、2バッファ構成で、1バンクが8Kバイトの容量のバッファを含む。LDXは、ダイレクトI/Oを介して他のDNAからデータを入力し、ダイレクトI/Oを介して他のDNAへデータを出力する。
図8は、ALUで示されたタイプのPE17(以降ではALUエレメント)のブロックダイアグラムである。dixおよびdiyはデータ入力であり、セレクタ21tにより縦方向のバス21vから選択される入力を示す。doはデータ出力であり、横方向のバス21hへの出力を示す。他のエレメントにおいても同様である。dicは、ALUエレメントの入力インタフェースであり、ほぼ同等の機能を備えたエレメントであるALCエレメントのレジスタにストアされた固定値(イミディエート)からの入力を示す。ALCエレメントは、固定値をストアできるレジスタ101を除き、ほぼALUエレメントと同じ構成となっている。docは、ALUエレメントの出力インタフェースである。cixおよびciyはキャリー入力であり、coはキャリー出力である。PEマトリクス10は、図6および図7で示したデータバスと同様の構成のキャリー用のバスを備えている。図8において二重線で囲われた四角形は、レジスタを示す。以下の各PE17のブロックダイアグラムにおいても同様である。
セレクタ102は、ALU113の入力Xとして、データdixと、レジスタ101の定数(コンスタント)とを選択する。セレクタ103は、ALU113の入力Yの遅延を設定する。セレクタ104は、入力Yのキャリーの遅延を設定する。セレクタ105および106は、入力XおよびYを交換(スワップ)するためのものである。セレクタ107は、入力Xのフィードバックを設定するためのものであり、スワップした入力Xのトークンまたは入力Yのキャリーを選択する。セレクタ108は、入力Xを選択するためのものであり、ALUの出力をフィードバックできる。セレクタ109は、ALU113をスルーするためのものである。セレクタ112は、このPE17の出力を選択するためのものである。セレクタ110は、ALU113の入力側のキャリーを選択するためのものであり、キャリー入力(遅延も含め)と、入力XまたはYのトークン(スワップされたものも含め)とが選択対象となる。セレクタ111は、このPE17から出力されるキャリーを選択するためのものであり、ALU113の入力キャリー、ALU113の出力キャリー、ALU113を比較器として使用したときのキャリー、入力Yのキャリーが選択対象となる。
さらに、図8のALUエレメントは、エレメント内の処理内容(機能および接続)を制御するための制御ユニット15を含む。制御ユニット15は、コンフィギュレーションメモリシステム11を構成するコンフィギュレーションレジスタシステム12と、コマンドデコードシステム55とを含む。制御ユニット15は、転送システム13によりALUエレメントのコンフィギュレーションレジスタシステム12に転送され、有効になったコンフィギュレーションデータによりALUエレメントの機能を切り替え、制御する。たとえば、制御ユニット15は、有効なコンフィギュレーションデータに基づき、ALUエレメントに含まれるセレクタの設定を行い、ALU113などの論理演算素子の機能の切り替えを行い、ALUエレメントにおいて所望のデータ処理が行われるようにする。したがって、レジスタシステム12において有効になるコンフィギュレーションデータにより、ALUエレメントの機能を1クロックサイクルで切り替えることができる。他のPE17についても同様である。
制御ユニット15のコマンドデコードシステム55は、セグメント内のコマンド伝達マトリクス(第1レベルのコマンド伝達マトリクス)51を介して転送されたコマンドをデコードする。コマンドが、コンフィグレーションレジスタ12において有効なコンフィギュレーションデータに関連し、データフローを識別するための情報(EID)と一致するEIDを含んでいれば、そのコマンドに基づきALUエレメントを制御する。たとえば、ストップコマンドであれば、ALUエレメントのクロックを停止し、すべての機能をストップさせる。他のPE17についても同様である。
図9は、LDBで示されたタイプのPE17(以降ではLDBエレメント)のブロックダイアグラムである。LDBエレメントは、メインメモリ19からPEマトリクス(DNAマトリクス)10へのデータ転送用バッファを含む入力インタフェースエレメントである。LDBエレメントは、PEマトリクス10に再構成されたデータフローへの入力データを一時的に格納するための格納領域29aを備えている。格納領域29aは、それぞれ8Kバイトの4つのバンク29xを備えている。4つのバンク29xの1つはバックグラウンドバンク(メインメモリ19からの入力バンク)として機能し、1つはフォアグラウンドバンク(PEマトリクス10への出力バンク)として機能する。
LDBエレメントはバンクコントロールユニット29bを含む。バンクコントロールユニット29bは、4つのバンク29xを独立して動作させ、データの入力および/または出力終了に同期してバンク切り替えを発生し、格納領域29aがDNAマトリクス10のPE17またはデータフローから1クロック毎にアクセスできるようにする。これらのバンク29xを備えた格納領域29aは、LDBエレメントからデータを受け入れるデータフローに対してシーケンシャルにデータを提供する。
また、DNAマトリクス10からC16Lエレメントにてアドレスを生成することにより、格納領域29aのバンク29xにランダムアクセスが可能である。また、同一EID(データフロー識別情報)により、複数チャネル間で同期動作が可能である。また、メインメモリ19からDNAマトリクス10への転送用バッファとして利用する以外に、ループバック機能を使ってDNAマトリクス10の内部のデータを書き込むバッファとして利用することができる。
LDBエレメントのバンクコントロールユニット29bは、コマンド生成ユニットとしての機能を備えており、フローストップ信号を生成および出力する機能を含む。LDBエレメントから出力される(読み出される)データの処理を行うデータフロー(データパス)を停止させたい場合は、LDBエレメントのバンクコントロールユニット29bは、その処理のためにPEマトリクス10に再構成されたデータフローを示すEIDとフローストップ信号とを備えたフローストップコマンド(ストップコマンド、フローストップリクエスト)Csを生成し、出力する。それによりLDBエレメントは、出力制御ユニット122を介してデータを読み出す所望のデータフローを停止できる。
外部メモリ19からLDBエレメントにデータを入力する(書き込む)処理を行うデータフロー(データパス)を停止させたい場合は、そのためにPEマトリクス10に再構成された、外部メモリ19の読み取り用のデータフローを示すEIDと、フローストップ信号とを備えたコマンドCsをLDBエレメントのバンクコントロールユニット29bが出力する。それにより、LDBエレメントは入力制御ユニット121を介してデータを入力している所望のデータフローを停止できる。LDBエレメントも、ALUエレメントと同様の機能を備えた制御ユニット15を備えている。
LDBエレメントは、格納領域29aの読み出し、書き込み、およびバンク29xの切り替えを行うための書き込みカウンタ123と、読み出しカウンタ126と、しきい値を格納するための入力カウントレジスタ124および出力カウントレジスタ125と、アクセスのデータ単位を記憶するためのレジスタ127とを含む。
図10は、STBで示されたタイプのPE17(以降ではSTBエレメント)のブロックダイアグラムである。STBエレメントは、DNAマトリクス10からメインメモリ19へのデータ転送用バッファを含む出力インタフェースエレメントである。STBエレメントは、データフローから出力されたデータを一時的に格納するための格納領域28aを含む。格納領域28は、それぞれ8Kバイトのバンク28xを2つ備えている。2つのバンク28xの1つはバックグラウンドバンク(メインメモリ19へ出力するバンク)として機能し、他の1つはフォアグラウンドバンク(PEマトリクス10から入力するためのバンク)として機能する。
STBエレメントはバンクコントロールユニット28bを含む。バンクコントロールユニット28bは2つのバンク28xを独立して動作させ、データの入力および/または出力終了に同期してバンク切り替えを発生し、格納領域28aがDNAマトリクス10のPE17またはデータフローから1クロック毎にアクセスできるようにする。
STBエレメントのバンクコントロールユニット28bも、コマンド生成ユニットとしての機能を備えており、フローストップ信号を生成する機能を含む。STBエレメントからメインメモリ19に出力される(読み出される)データの処理を行うデータフロー(データパス)を停止させたい場合は、その処理のためにPEマトリクス10に再構成されたデータフローを示すEIDを含むストップコマンドCsをバンクコントロールユニット28bが生成し、出力する。入力制御ユニット131に接続され、STBエレメントにデータを入力する(書き込む)処理を行うデータフロー(データパス)を停止させたい場合は、そのためのデータフローを示すEIDを含むストップコマンドCsをバンクコントロールユニット28bが生成し、出力する。したがって、LDBと同様に、バンクコントローラ28bは、フローストップ信号とEIDとを備えたストップコマンドCsにより、所望のデータフローを停止できる。
STBエレメントも制御ユニット15を備えている。STBエレメントの制御ユニット15は、コンフィギュレーションレジスタシステム12と、コマンドデコードシステム55と、さらに、コマンド出力ユニット(コマンドリレーユニット)59とを含む。コマンドリレーユニット59は、STBエレメントの内部で発生したストップコマンドCsと、LDBなどの内部で発生したストップコマンドCsとの論理和をとって、統合されたストップコマンドCsをセグメント外のコマンド伝達マトリクス(第2レベルのコマンド伝達マトリクス)52に出力する。
STBエレメントは、さらに、格納領域28aの読み出し、書き込み、およびバンク28xの切り替えを行うための書き込みカウンタ133と、読み出しカウンタ136と、しきい値を格納するための入力カウントレジスタ134および出力カウントレジスタ135と、アクセスのデータ単位を記憶するためのレジスタ137とを含む。
図11に、RAMで示されたタイプのPE17(以降ではRAMエレメント)のブロックダイアグラムを示している。図11に示したRAMエレメントは、RAMDエレメントである。RAMDエレメントはPEマトリクス10に内蔵されたデュアルポートメモリである。RAMDエレメントは、デュアルポートRAM27aと、リード/ライトコントローラ27bと、コンフィギュレーションデータによりRAMDエレメントの機能を制御するための制御ユニット15とを含む。
RAMDエレメントは、コンフィギュレーションデータにより、アドレスデコードモード、デュアルポート16ビットモード、ヒストグラムモード、16ビットFIFOモード、ディレイモードでの使用が可能である。このため、データフローにおいて、ラインバッファ、FIFOなどの一時的なデータ保持、ルックアップテーブル、ヒストグラム処理などのために利用できる。さらに、RAMDエレメントは、RISC2のメモリ空間に内蔵されているため、PEマトリクス10に構成されるデータフローとは別に、RISC2はRAM27aを直接読み書きすることができる。データフローのアクセスと直接アクセスが同時に行われた場合、直接アクセスが優先される。
RAMDエレメントはコマンド生成ユニット69を含む。コマンド生成ユニット69は、リード/ライトコントローラ27bから出力されたストップ信号と、制御ユニット15において有効なコンフィギュレーションデータに含まれるEIDとを含むストップコマンドCsを出力する。FIFOモードなどにおいて、RAMDエレメントのコマンド生成ユニット69は、上流のデータフローの処理速度と、下流のデータフローの処理速度との速度差が大きくなると、上流のデータフローのEIDまたは下流のデータフローのEIDを含むフローストップコマンドCsを出力する。
図12に、DLEで示されたタイプのPE17(以降ではDLEエレメント)のブロックダイアグラムを示している。DLEエレメントはPEマトリクス10に再構成されるデータフロー中のデータおよびキャリーの遅延値を調整する。DLEエレメントは、遅延回路26aと、遅延量を制御するためのモード制御ユニット26bと、コンフィギュレーションデータによりモードを制御するための制御ユニット15とを含む。
DLEエレメントでは、データは1〜8の遅延調整が可能であり、キャリーは1〜16の遅延調整が可能である。さらに、DLEエレメントは、FIFO機能を備えている。したがって、PEマトリクス10において、データおよびキャリー間のタイミング調整、データの緩衝バッファなどとして利用できる。
DLEエレメントもコマンド生成ユニット69を含む。コマンド生成ユニット69は、モード制御ユニット26bから出力されたストップ信号と、制御ユニット15において有効なコンフィギュレーションデータに含まれるEIDとを含むストップコマンドCsを出力する。FIFOモードなどにおいて、DLEエレメントのコマンド生成ユニット69は、上流のデータフローの処理速度と、下流のデータフローの処理速度との速度差が大きくなると、上流のデータフローのEIDまたは下流のデータフローのEIDを含むフローストップコマンドCsを出力する。
このデバイス1は、さらに、コマンドを各PE17に伝達するためのコマンド伝達システム50と、PE17の一部により生成されたコマンドを収集してコマンド伝達システム50に渡すためのコマンド収集システム60とを有する。図13は、コマンド伝達システム50およびコマンド収集システム60の概要を示している。
図13は、簡単のために、PEマトリクス10の16個のセグメントSのうち、セグメントa1〜a4を抜き出して示しているが、他のセグメントにおいても同様である。PEマトリクス10に配置されたPE17およびルーティングマトリクス21および22により、太線で示したようなデータフロー(データパス)70が構成される。この例のデータフロー70では、セグメントa1のLDBを介してデータが入力され、セグメントa4のSTBを介してデータが出力される。データフロー70を構成するために、セグメント内のALUなどのPE17がイントラセグメントコネクション21により接続され、セグメント間はDLVペアを介してインターセグメントコネクション22により接続される。PEマトリクス10に再構成されるデータフロー70は、これに限られず、また、再構成されるデータフロー70の数は1つに限定されず、多くのケースでは複数のデータフローが再構成される。PEにはLDB、STB、RAMD、DLEも含まれるが、これらのエレメントはフローストップコマンドCsの発生源(生成ソース)となるPE17なので、個別に示している。
コマンド伝達システム50は、PEマトリクス10に含まれる複数のPE17のそれぞれに、ストップコマンドCsおよび他のコマンドを伝達するためのシステムである。コマンド伝達システム50は、セグメントa1〜a4のそれぞれに設けられた伝達用のコマンドレジスタ(レジスタ、フリップフロップ、FF)53と、セグメントa1〜a4のそれぞれの内部に配置された複数のPEと伝達用のコマンドレジスタ53とを接続するための第1レベルのコマンド伝達マトリクス(コマンド伝達用接続、コマンド伝達用バス、コマンド伝達用配線)51とを含む。コマンド伝達システム50は、さらに、セグメント毎に設けられた複数の伝達用のコマンドレジスタ53とコマンドリレーユニット(コマンド出力ユニット)59とを接続する第2レベルのコマンド伝達マトリクス52を含む。
コマンドレジスタ(レジスタユニット)53はFFと表示されているように、典型的にはマルチビットのフリップフロップFFまたはラッチユニットからなるレジスタを含み、コマンドを転送するための他の論理ゲートを含んでいても良い。コマンドレジスタ53は、ストップコマンドCsおよび他のコマンドをクロックサイクル単位で入力および出力し、コマンドをクロックサイクルに同期して転送するために使用される。
コマンド伝達システム50においては、STBのコマンド出力ユニット59のコマンドレジスタ59fと、各セグメントa1〜a4の伝達用のコマンドレジスタ53とが第2レベルのコマンド伝達マトリクス52により接続されている。第2レベルのコマンド伝達マトリクス52は、1クロックサイクルの範囲内において、STBのコマンド出力ユニット59のコマンドレジスタ59fから各セグメントa1〜a4の伝達用のコマンドレジスタ53へデータ(コマンド)を伝達(伝送)する。
各セグメントa1〜a4においては、伝達用のコマンドレジスタ53がセグメント内に配置され、第1レベルのコマンド伝達マトリクス51によりセグメント内の全てのPEと接続されている。各セグメントa1〜a4においては、同一セグメント内に配置された全てのPE17は、そのセグメント内のPE17と1クロックサイクルの範囲内で、データが伝達(伝送)される。したがって、第1レベルのコマンド伝達マトリクス51により、各セグメントのPE17に対し、同一セグメント内に設けられたコマンドレジスタ53から1クロックサイクルの範囲内で、データ(コマンド)が伝達(伝送)される。
すなわち、各セグメントa1〜a4に配置された全てのPEは、各セグメントのコマンドレジスタ53にラッチされたコマンドにより、次のクロックサイクルで制御される。したがって、コマンド伝達システム50により、PEマトリクス10に配置されている全てのPEは、STBのコマンド出力ユニット59のコマンドレジスタ59fがコマンドをラッチしてから2クロックサイクル目でコマンドにより同期して制御される。
コマンド伝達システム50は、上記と同様に、RISCモジュール2などから供給される他のコマンドもPEマトリクス10の全てのPEに同期して伝達できる。
コマンド収集システム60は、PEマトリクス10のコマンド生成元のPE17からストップコマンドCsおよび他のコマンドを収集するためのシステムである。コマンド収集システム60は、セグメントa1〜a4のそれぞれに設けられた収集用のコマンドレジスタ(レジスタ、フリップフロップ、FF)63と、セグメントa1〜a4のそれぞれの内部に配置された複数のPE17の一部のPEであって、コマンド発生源となるPEと収集用のコマンドレジスタ63とを接続するための第1レベルのコマンド収集マトリクス(コマンド収集用接続、コマンド収集用バス、コマンド収集用配線)61とを含む。コマンド収集システム60は、さらに、セグメント毎に設けられた複数の収集用のコマンドレジスタ63とコマンドリレーユニット(コマンド出力ユニット)59とを接続するための第2レベルのコマンド収集マトリクス62を含む。
収集用のコマンドレジスタ63は、伝達用のコマンドレジスタ52と同様に、典型的にはマルチビットのフリップフロップFFまたはラッチユニットからなるレジスタを含み、コマンドを転送するための他の論理ゲートを含んでいても良い。コマンドレジスタ63は、ストップコマンドCsおよび他のコマンドをクロックサイクル単位で入力および出力し、コマンドをクロックサイクルに同期して転送するために使用される。
コマンド収集システム60では、収集用のコマンドレジスタ63がセグメント内に配置され、第1レベルのコマンド収集マトリクス61によりセグメント内の全てのコマンド発生源となるPEと接続されている。このため、各セグメントa1〜a4においては、第1レベルのコマンド収集マトリクス61により、コマンド発生源の各PEから、同一セグメント内に設けられたコマンドレジスタ63へ1クロックサイクルの範囲内で、データ(ストップコマンド)を収集できる。
STBのコマンド出力ユニット59のコマンドレジスタ59fと、各セグメントa1〜a4の収集用のコマンドレジスタ63とは第2レベルのコマンド収集マトリクス62により接続されている。第2レベルのコマンド収集マトリクス62は、1クロックサイクルの範囲内において、各セグメントa1〜a4の収集用のコマンドレジスタ63からSTBのコマンド出力ユニット59のコマンドレジスタ59fへデータ(コマンド)を伝達(伝送)する。したがって、コマンド収集システム60により、PEマトリクス10に配置されているコマンド発生源のPE17の全てから、STBのコマンド出力ユニット59のコマンドレジスタ59fへ、2クロックサイクルでコマンドが伝達(収集)される。
このデバイス1においては、コマンドを発生するPE17が属するセグメントのPE17に対してもコマンド収集システム60およびコマンド伝達システム50を介してコマンドが伝達される。さらに、コマンドを発生するPE17自身においても、コマンドを受領する制御ユニット15に対しては、コマンド収集システム60およびコマンド伝達システム50を介してコマンドが伝達される。したがって、PEマトリクス10に属する全てのPE17において、PE17におけるコマンド発生からPE17においてコマンドを受信するまでのレイテンシは一律である。このため、PEマトリクス10に含まれる複数のセグメントにわたり再構成されるデータフローに属する全てのPE17に対してコマンドを同期したタイミングで伝達でき、データフロー70の処理に不整合が発生するのを防止できる。
コマンド収集システム60の第1のマトリクス61および第2のマトリクス62はコマンドの論理和を生成するORゲート61rおよび62rを含む。ストップコマンドCsはEIDの情報を含む16ビットの信号(stop[15:0])であり、ビット0は「EID=0」を示す。したがって、ストップコマンドCsの論理和を出力することにより、複数のEIDに対応する複数のデータフローを同じタイミングでストップさせることができる。このため、異なるデータ処理を行っている複数のデータフローがPEマトリクス10に構成されている場合であっても、このコマンド収集システム60およびコマンド伝達システム50を用いることにより、複数のデータフロー70を的確に、そしてフレキシブルに制御できる。
図14に、各PE17に含まれる制御ユニット15のブロックダイアグラムを示している。図14は、制御ユニット15に含まれるコンフィギュレーションレジスタシステム12と、コマンドデコードシステム55とを示している。コンフィギュレーションレジスタシステム(メモリシステム)12は、2つ(2バンク)のバックグラウンドメモリ12bと、1つ(1バンク)のフォアグラウンドメモリ12aとの計3バンクのコンフィギュレーションメモリを備えている。これら3つのバンク12aおよび12bのそれぞれにDNAコンフィギュレーションを1ずつ保持できる。レジスタシステム12は、さらに、フォアグラウンドメモリ12aおよびバックグラウンドメモリ12bのそれぞれに転送システム13からDNAコンフィギュレーションを格納する回路12cと、バックグラウンドメモリ12bに格納されたDNAコンフィギュレーションをフォアグラウンドメモリ12aに転送する回路12dとを含む。
制御ユニット15のレジスタシステム12において、実際に有効になり、各PE17の機能(状態、データパス)を制御するのは、フォアグラウンドメモリ12aにあるDNAコンフィギュレーションである。有効なDNAコンフィギュレーションは、フォアグラウンドメモリ12a内のインストラクションレジスタ12iを書き換えることで切り替えることができる。インストラクションレジスタ12iへの書き込みは、バックグラウンドメモリ12bのバンクから転送する方法(ダイナミックリコンフィギュレーション)と、メモリマップ上のコントロールレジスタ(DNACFGW)から直接書き込む方法がある。バックグラウンドメモリ12bからフォアグラウンドメモリ12aへは、1クロックで転送でき、1クロックでPE17の機能を切り換えることができる。
バックグラウンドメモリ12bの2バンクのうち、不要になったバンクに対してDNAコンフィギュレーションをメインメモリからロードできる。このため、DNAコンフィギュレーション数の実用上の制限はない。フォアグラウンドメモリ12aのDNAコンフィギュレーションを切り替えることをダイナミックリコンフィギュレーションと呼び、2つの方法が用意されている。1つは実行中のDNAコンフィギュレーションからDAP(RISCユニット)2に割り込みを発生させ、DAPのプログラムで切り替える方法である。もう1つは実行中のDNAコンフィギュレーションを自律的に切り替える方法である。後者の方法を特に、自律ダイナミックリコンフィギュレーションと呼ぶ。
DNAコンフィギュレーション(コンフィギュレーションデータ)は、各PE17の機能をセットする(切り替える、再構成する)ための回路情報、パラメータなどを含む。コンフィギュレーションデータは、さらに、それぞれのPE17が含まれるデータフロー70を識別するための情報(データフロー識別情報)であるEIDを含む。実行中の(有効な)DNAコンフィギュレーションのEID55eは、コマンドデコードシステム55において参照される。コマンドデコードシステム55は、EIDのデコーダ55dと、PEの動作をオンオフするためのクロック制御ユニット55sとを含む。上述したように、ストップコマンドCsはEIDを示す16ビットの信号を含む。コマンドデコードシステム55は、現在有効なDNAコンフィギュレーションのEID55eと一致するEIDがストップコマンドCsに含まれていれば、クロックを停止して、PE17の動作をストップする。たとえば、EID55eが「2」であり、ストップコマンドCsのビット2(データの2ビット目)が「1」であれば、PEを停止させる。ストップコマンドCsのビット0および2が「1」であれば、EID55eが「0」および「2」のPEの動作を停止でき、複数のデータフローを同時に制御できる。
図15は、LDB(LDBエレメント)の格納領域29aに含まれる4つのバンク29xによりメインメモリ(DRAM)19からPEマトリクス10にデータを入力する様子を示している。デバイス1のLDBは、4バンク構成の格納領域29aを備えている。この構成によりDRAM19へのリードレイテンシを隠すことができる。LDBでは、PEマトリクス10(マトリクス10のPE17またはデータフロー70)へのデータの読み出しが終わり、格納領域29aをバンクスイッチしてからDRAM19への読み出し要求を行なう。
近年のDRAM19の高速化は著しいが、その代償としてアクセスレイテンシが大きくなっている。つまり、リードコマンドの入力からデータの読み出しまでのクロック数が大きくなっている。そのため、2バンク構成の場合、バッファの深さを浅くすると(読み出し量が小さい場合)、バンクスイッチしてからリードリクエストを出していたのでは、リード側のバンクのデータの読み出しも終わってしまい、PEマトリクス10への入力ができずデータフロー70が遊んでしまう。これを避けるために、デバイス1ではバンク数を増やし4バンクとしている。バンク数を増やすことにより、ライト側のバンク29xを複数(この例ではライトバンクが3つ)になる。このため、リード側のバンク29xが空になり、リードバンクからライトバンクへバンクスイッチされるのを待たずにDRAM19へリードリクエストを出すことができる。したがって、DRAM19へのアクセスレイテンシを隠すことができる。
DRAM19へのアクセスが競合したり、その他の理由により、LDBのリード側のバンク29xが空になったときにライト側のバンク29xに規定量のデータがロードされていないケースがある。このときは、バンクスイッチ(バンク切り替え)することは適当ではなく、LDBからのデータの読み出しを停止するか、あるいは、リード側のバンク29xが空になった後に読みだされるデータを無効にすることが望ましい。データフロー型のコンピュータにおいて、データの有効無効を示すために、データ毎にトークンを付与することが知られている。トークンによるデータフローの制御は、データとともにトークンを伝達すればよいので、ハードウェアの構成が容易であり、このデバイス1においても用いられている。しかしながら、トークンだけの制御では、データフローが誤った演算を行う可能性がある。
図16にその一例を示している。データフローにおいて以下の式(1)の演算を行う場合、図16に示すように、サイクルt(0)にリード側のバンク29xが空になると、5番目に入力されるデータが無効(バブルと呼ぶ)となる。このとき、ケース1のように、Y(t)のデータのトークンに基づき演算を行った場合は無効なデータによる結果は無効として処理される。一方、ケース2のように、Y(t−1)のトークンに基づき演算を行った場合は、有効なデータによる結果に誤りが発生する。Y(t)のトークンとY(t−1)のトークンとの両方が有効なときのみ結果が有効であるとすると、有効な演算結果が無効な結果として処理される。したがって、データフローに含まれる演算により有効なトークンを選択するという処理が必要になり、データフローの設計では、それを意識する必要がある。
Y(t)=Y(t)+Y(t−1) ・・・(1)
図17に、本例のデバイス1においてサイクルt(0)にリード側のバンク29xが空になった状態を示している。デバイス1においては、コマンド収集システム60およびコマンド伝達システム50により、PE17において生成されたフローストップコマンドCsは、レジスタ53にラッチされ、全てのPE17にフローストップコマンドCsが伝達される。ただし、フローストップコマンドCsの生成から伝達までに3クロックサイクルを要し、4クロックサイクル後にはすべてのPE17がコマンドCsを参照し(伝達され)、すべてのPE17がコマンドCsにより制御される。
したがって、図17に示すように、LDBが、リード側のバンク29xが空になるt(0)の4クロックサイクル前のt(−4)にコマンドCsを出力する。このストップコマンドCsにより、データフロー70とLDBとをストップさせることができる。LDBは、ロードバッファ29aにデータが無いときはストップするのでトークンがないデータ(バブル)は出力されない。さらに、対応するEIDのデータフローも一時停止されるので無効なデータによる処理は行われない。したがって、バブルフリーの環境を提供でき、ユーザはバブルを意識する必要はなく、トークンの選択を意識しなくてもデータフローを設計でき、PEマトリクスにマッピングすることができる。
さらに、デバイス1においては、フローストップコマンドCsにより、該当EIDのPEのローカルクロックも停止するので、消費電力も下がる。トークンだけの制御の場合、データフローは停止しないので、無効なデータも演算されているケースが多い。そのために電力が消費され、さらに、メモリあるいはレジスタが無効な演算により不必要に上書きされたりする可能性がある。しかしながら、このデバイス1においては、PEから生成されるフローストップコマンドCsによりデータフローを停止することが可能なので、そのような不具合の発生を未然に防止できる。
LDB、RAMなどのエレメントにおいてフローストップコマンドを生成するユニットであるバンクコントロールユニット29bおよびコマンド生成ユニット69は、さらに、データの数が決まっている場合には、最終のデータを出力するためにフローストップを解除する、あるいは生成しない機能を備えている。FIFOとして機能する格納領域29aの残容量は最終データを受け付けた後は増えないので、データフローがデッドロックしてしまう可能性があるからである。そのため、LDBのコマンド生成ユニットであるバンクコントロールユニット29bは、エレメントC32Lからのエンドトークンをラッチしておき、そのアドレスのリードデータが帰ってきた場合に、それ以降はフローストップを出すことを解除する機能29dを備えている(図9参照)。この機能29dにより、最終データも問題なくPEマトリクス10に再構成されたデータフローへ出力される。フローストップを解除する別の実施例としては、上記のC32Lからのエンドトークンで発生する割り込み要因を受けて、DAP2が特定のレジスタを設定し、解除できるようにしておいても良い。
図18にLDBエレメントにおいて、フローストップコマンドCsを生成および出力する構成およびタイミングを示している。バンクスイッチイングにより、ライトバンク29xがリードバンク29xになり、リードバンク29xがライトバンク29xなる。その後、スワップされたリードバンク29xからPEマトリクス10へデータが送出される。データの送出によりリードバンク29xで読み出せる量が、レジスタ125に格納された所定のしきい値29tを下回ったときを、コマンド生成ユニットでもあるバンクコントローラ29bが略空状態(オールモストエンプティ、almost empty)STaeと判断し、バンクコントローラ29bのフローストップ要求機能29sがフローストップを行なうためにフローストップコマンドCsを出力する。しきい値29tは、フローストップ要求機能29sがコマンドCsを出力してから、LDBおよびセグメントにコマンドCsが戻ってくるまでのレイテンシに基づいて決定される。
このデバイス1においては、具体的には、フローストップコマンドCsが各PE17に参照されるようになるのに(到達するのに)3クロックを要し、データフロー70が停止するまでに4クロックを要する。したがって、コマンドCsのレイテンシ(遅れ)が4クロックサイクルであり、格納領域29aのリードバンク29xに残ったデータが4クロックサイクル分になった時、すなわち、データd4を出したときに略空状態STaeと判断し、フローストップコマンドCsを出力すればよい。
図19にフローストップコマンドCsを出力し、データフローが停止するまでのタイミングチャートを示している。サイクルt(−4)にバンクコントローラ29bがデータd4を検出すると、バンクコントローラ29bは略空状態STaeを判断する。このLDBエレメントは、EID2のデータフロー70に属する(データフローにデータを提供している)ので、バンクコントローラ29bはEID2のフローストップコマンドCsを出力する。
バンクコントローラ29bが出力したフローストップコマンドCs(フローストップ要求)は、第1レベルのコマンド収集マトリクス61を介して、サイクルt(−3)に、コマンド収集システム60の各セグメントのコマンドレジスタ(FF)63によりラッチ(ゲット)される。すなわち、コマンドCsがコマンド収集システム60のレジスタ63に収集される。
コマンド収集システム60のレジスタ63に収集されたコマンドCsは、第2レベルのコマンド収集マトリクス62を介して、サイクルt(−2)に、STBのコマンド出力ユニット59の出力レジスタ(FF)59fによりゲットされる。すなわち、コマンドCsがレジスタ59fに収集される。
レジスタ59fに収集されたコマンドCsは、第2レベルのコマンド伝達マトリクス52を介して、サイクルt(−1)に、コマンド伝達システム50の各セグメントのコマンドレジスタ(FF)53にゲットされる。すなわち、フローストップコマンドCsがレジスタ53に伝達される。ストップコマンドCsは、次のクロックがインバリッドであることを示す。
次のサイクルt(0)に、EID2の各PE17は、第1レベルのコマンド伝達マトリクス51を介して、各セグメントのコマンドレジスタ53のコマンドCsを認識し、コマンドCsによりストップする。したがって、サイクルt(0)に、EID2のデータフロー70はストップする。
フローストップコマンドCsは、発生源のLDBエレメントのバンクコントローラ29bにおいて、ライトバンク29xがフル状態STfになり、バンクスイッチが完了してリードバンク29xが切り替わるまで保持される。このケースでは、サイクルt(4)にフローストップコマンドCsが解除される。
その後、フローストップコマンドCsの解除は上記と同様にコマンド収集システム60およびコマンド伝達システム50を介してPE17に認識される。したがって、レジスタ53のEID2のフローストップコマンドCsはサイクルt(7)に解除される。このため、次のサイクルt(8)にEID2のデータフローに属する全てのPE17はストップが解除され、データd0から処理を再開する。
サイクルt(8)にはバンクスイッチは完了しており、データd0に続いてデータdnがLDBから供給されるようになっている。このため、バブルが入ることはなく、EID2のデータフロー70は処理を正常に継続できる。また、サイクルt(0)からサイクルt(8)の間は、EID2のデータフローに属するPE17については、クロックを停止できるので、消費電力を削減できる。RAMエレメントなどは、データの入力または出力などに関して他のEIDの属する処理を行っている場合があり、そのときは完全にはストップせず、電力も消費される可能性がある。
図20は、フローストップコマンドCsを出さずにバンク切り替えを行うケースを示している。LDBエレメントにおいて、リードバンク29xのデータが略空状態(オールモストエンプティの状態)STaeになったとしても、ライト側のバンク20xがすでにフル状態(書き込み済み状態)STfであれば、リードバンク29xが空になったときにバンクスイッチ可能である。コマンド生成ユニットとして機能するバンクコントローラ29bは、フローストップを出すことを解除する機能29dを備えており、解除機能29dが動作する。解除機能29dは、サイクルt(−4)の略空状態STaeに対し、ライトバンク29xがフル(書き込み済み)なのでフローストップは不要であると判断し、略空状態STaeを解除する。このため、フローストップコマンドCsは出力されない。これにより無用なデータフローの停止を防止できる。
図21は、最終データに対してフローストップコマンドCsを出さないケースを示している。バンクコントローラ29bの解除機能29dは、最終データがリードバンク29xにある場合も動作する。したがって、最終データがリードバンク29xにある場合は、フローストップコマンドCsは出力されない。最終データがリードバンク29xにあれば、最終データ以降のデータが、主メモリ(DRAM)19から読み出されない。したがって、バンクスイッチ(バンク切り替え)は行われない。このため、データフロー70を停止してしまうと、最終データが読み出されなくなる。解除機能29dは、フローストップコマンドCsを出さないことにより、そのような事態を未然に防止できる。
最終データがリードバンク29xにあるか否かは、DRAM19のリードアドレスを出力するエレメントC32Lのエンドトークンのフラグにより判断することができる。解除機能29dは、サイクルt(−4)の略空状態STaeに対し、エンドトークンフラグがハイ(H)なのでフローストップは不要であると判断し、略空状態STaeを解除する。このため、フローストップコマンドCsは出力されない。これにより無用なデータフローの停止を防止できる。
以上では、LDBエレメントにおいてフローストップコマンドCsを出力する場合を例に説明しているが、データフローの中でFIFOとしての機能を含むPE17であるDLEエレメントおよびRAMエレメントにおいても同様に上流および/または下流のデータフローを制御できる。たとえば、上流のデータフローのFIFOとしての機能にセットされたDLEエレメントまたはRAMエレメントにおいて、上流のデータフローの書き込みによりFIFOがフルになりそうなタイミングで、自身の、または上流のデータフローのEIDに対応する番号のフローストップ要求を出す。この動作により、上流(書き込み側の)のデータフローを止めることができる。これにより、下流のデータフローでは、上流のデータフローの都合を考えず自分の都合の良いタイミングで処理できる。
DLEエレメントまたはRAMエレメントは、下流のデータフローに対しても、FIFOに残存するデータ量により、下流のデータフローのEIDを持ったフローストップ要求(フローストップコマンド)を出す。下流のデータフローにバブルが供給されることを未然に防止できる。また、例えば、読み出し可能かどうかをPE17のキャリー信号で通知しても良い。キャリーが「1」ならば、FIFOに読み出せるデータがあることを示す。下流はこの信号を使い、都合の良いときに読み出しを行うことができる。
このような構造をとることで、PE17からフローストップを含むコマンドCsを発生させることができ、データフローをEIDで分離し、PE17から制御することができる。フローストップなどのコマンドの発生源となるPE17は、上記に限定されない。たとえば、PEマトリクスの構成されるデータフローの処理で、フィードバック処理があると、複数回、例えば3回に1回しか処理したくないときがある。例えば、読み出し側がフィードバックの処理のため1/3回しか処理しない場合には、同じデータを3回読み出して、見かけ上、1/3回のレートにして処理することが考えられる。しかしながら、上述したRAM、DLEに加えて、ALUなどのデータ入力と判断機能とを備えたPE17からフローストップコマンドを出力することにより、3回に1回しか処理したくないときは、2サイクルだけ入力側のデータフローを停止できる。このような制御を行うことにより、デバイス1における消費電力を削減することが可能となる。
このデバイス1においては、PE17からフローストップコマンドを出力し、セグメントに関係なく、全てのPE17を同期して制御することができる。したがって、データフローを識別情報(EID)の単位で分割して制御できる。例えば、リード側のデータフローはリード側の都合で読み出しを行えるようになる。
セグメント化は、さらに、データフローの設計およびマッピングにおいて有効である。セグメント内においてはタイミング収束が保証されるので、セグメントの範囲内での配置配線の自由度を向上するのに適している。さらに、セグメント化により、信号を送受信するためのバス(ルーティングマトリクス)をセグメント毎に独立して使用することが可能となり、配線の使用効率を向上できるというメリットも得られる。複数のPEを複数のセグメントに分けて配置する(セグメント化する)構成は、ALUなどの機能を含む、均一な、あるいは均一に近い複数のPEあるいは論理ブロック(LCB)が含む再構成可能なデバイスにおいても導入できる。
本発明に含まれるルーティングマトリクスは、電気的な配線などの、電気電子的な方法により信号を伝達するルーティングマトリクスに限られない。本発明に含まれるルーティングマトリクスは、光を含めた他の情報伝達方式が適用されるルーティングマトリクスであっても良い。また、本発明に含まれるPEの配置およびセグメントの配置は、2次元の縦横の規則的な配列に限定されない。3方あるいは6方などに規則的に複数のPEおよびセグメントを配置することも可能である。さらに、多層化などの方法により、PEおよびセグメントを3次元に配置することも可能である。