(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024024312
(43)【公開日】2024-02-22
(54)【発明の名称】プロセッサ、およびコンパイラ
(51)【国際特許分類】
G06F 8/41 20180101AFI20240215BHJP
【FI】
G06F8/41 130
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2022127072
(22)【出願日】2022-08-09
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成30年度、高効率・高速処理を可能とするAIチップ・次世代コンピューティングの技術開発/革新的AIエッジコンピューティング技術の開発/動的再構成技術を活用した組み込みAIシステムの研究開発、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】戸井 崇雄
(72)【発明者】
【氏名】西野 賢悟
(72)【発明者】
【氏名】林 大悟
【テーマコード(参考)】
5B081
【Fターム(参考)】
5B081CC28
(57)【要約】
【課題】ループ変数、またはアキュムレータ変数などを繰り返しするカウントするカウンタ回路が、プログラマブルデバイスによって構成されている場合には、処理の遅延が発生する。
【解決手段】プロセッサ161は、複数のプログラマブルロジック1からなるアレイ162と、繰り返し変更操作される変数をカウントするための少なくとも1つの専用のカウンタ回路163とを備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
複数のプログラマブルロジックからなるアレイと、
繰り返し変更操作される変数をカウントするための少なくとも1つの専用のカウンタ回路と、を備えたプロセッサ。
【請求項2】
前記カウンタ回路は、ループ記述におけるループ変数をカウントする、請求項1記載のプロセッサ。
【請求項3】
前記カウンタ回路は、ループの内部において増分値が繰り返し加算されるアキュムレータ変数をカウントする、請求項1記載のプロセッサ。
【請求項4】
前記カウンタ回路は、
選択部、記憶部、加算部、および比較部を備え、
前記選択部は、初期値、および前記加算部の出力のいずれかを選択して出力し、
前記記憶部は、前記選択部の出力を記憶し、
前記加算部は、前記記憶部の出力と増分値とを加算し、
前記比較部は、前記加算部の出力と最大値とを比較し、比較結果を表わす信号を出力する、請求項1記載のプロセッサ。
【請求項5】
前記カウンタ回路は、
第1ループのループ変数をカウントする第1のカウンタと、
前記第1ループの1つ外側の第2ループのループ変数をカウントする第2のカウンタと、を含み、
前記第1のカウンタは、前記第1ループの終了条件が満たされたときに前記第2のカウンタに第1の信号を出力し、
前記第2のカウンタは、前記第1の信号を受けたときには、前記第2ループのループ変数をインクリメントする、請求項2記載のプロセッサ。
【請求項6】
前記プロセッサは、
前記プログラマブルロジック、および前記カウンタ回路を制御することによって、前記プロセッサの状態遷移を制御する状態遷移コントローラをさらに備え、
前記第2のカウンタは、前記第2ループの終了条件が満たされたときに前記状態遷移コントローラに第2の信号を出力する、請求項5記載のプロセッサ。
【請求項7】
前記カウンタ回路は、
ループ変数の下位ビットをカウントする第1のカウンタと、
前記ループ変数の上位ビットをカウントする第2のカウンタと、
前記第1のカウンタの値と前記第2のカウンタの値とに基づいて、ループの終了条件が満たされたか否かを判定する倍幅判定部と、を含み、
前記第1のカウンタは、前記ループ変数の下位ビットが最大値を超えたときに、キャリー信号を前記第2のカウンタに出力し、
前記第2のカウンタは、前記キャリー信号を受けたときには、前記ループ変数の上位ビットをインクリメントする、請求項2記載のプロセッサ。
【請求項8】
前記カウンタ回路は、第1のモードにおいて、第1ループおよび前記第1ループの1つ外側の第2ループを含む多重ループのループ変数をカウントし、第2のモードにおいて、第3ループの2倍ビット幅のループ変数をカウントし、
前記第1のモードにおいて、前記第1ループのループ変数をカウントし、前記第2のモードにおいて、前記第3ループのループ変数の下位ビットをカウントする第1のカウンタと、
前記第1のモードにおいて、前記第2ループのループ変数をカウントし、前記第2のモードにおいて、前記第3ループのループ変数の上位ビットをカウントする第2のカウンタと、
前記第2のモードにおいて、前記第1のカウンタの値と前記第2のカウンタの値とに基づいて、前記第3ループの終了条件が満たされたか否かを判定する倍幅判定部と、を含み、
前記第1のカウンタは、前記第1のモードにおいて、前記第1ループの終了条件が満たされたときに前記第2のカウンタに第1の信号を出力し、
前記第2のカウンタは、前記第1のモードにおいて、前記第1の信号を受けたときには、前記第2ループのループ変数をインクリメントし、
前記第1のカウンタは、前記第2のモードにおいて、前記第3ループのループ変数の下位ビットが最大値を超えたときに、前記第2のカウンタに前記第1の信号を出力し、
前記第2のカウンタは、前記第2のモードにおいて、前記第1の信号を受けたときには、前記第3ループのループ変数の上位ビットをインクリメントする、請求項2記載のプロセッサ。
【請求項9】
前記プロセッサは、
前記プログラマブルロジック、および前記カウンタ回路を制御することによって、前記プロセッサの状態遷移を制御する状態遷移コントローラをさらに備え、
前記カウンタ回路は、前記状態遷移コントローラに隣接して配置される、請求項1記載のプロセッサ。
【請求項10】
前記少なくとも1つのカウンタ回路は、第1のカウンタ回路と第2のカウンタ回路とを備え、
前記第1のカウンタ回路は、第1のモードにおいて、第1ループおよび前記第1ループの1つ外側の第2ループを含む多重ループのループ変数をカウントし、前記第2のカウンタ回路は、前記第1のモードにおいて、第3ループおよび前記第3ループの1つ外側の第4ループを含む多重ループのループ変数をカウントし、
前記第1のカウンタ回路は、第2のモードにおいて、2重ループの内側の第5ループの2倍ビット幅のループ変数をカウントし、前記第2のカウンタ回路は、前記第2のモードにおいて、前記第5ループの1つ外側の第6ループの2倍ビット幅のループ変数をカウントし、
前記第1のカウンタ回路は、
前記第1のモードにおいて、前記第1ループのループ変数をカウントし、前記第2のモードにおいて、前記第5ループのループ変数の下位ビットをカウントする第1のカウンタと、
前記第1のモードにおいて、前記第2ループのループ変数をカウントし、前記第2のモードにおいて、前記第5ループのループ変数の上位ビットをカウントする第2のカウンタと、
前記第2のモードにおいて、前記第1のカウンタの値と前記第2のカウンタの値とに基づいて、前記第5ループの終了条件が満たされたか否かを判定し、前記第5ループの終了条件が満たされたときに、第5ループ条件成立信号を出力する倍幅判定部と、を含み、
前記第1のカウンタは、前記第1のモードにおいて、前記第1ループの終了条件が満たされたときに前記第2のカウンタに第1の条件成立信号を出力し、
前記第2のカウンタは、前記第1のモードにおいて、前記第1の条件成立信号を受けたときには、前記第2ループのループ変数をインクリメントし、
前記第1のカウンタは、前記第2のモードにおいて、前記第5ループのループ変数の下位ビットが最大値を超えたときに、前記第2のカウンタに第1の条件成立信号を出力し、
前記第2のカウンタは、前記第2のモードにおいて、前記第1の条件成立信号を受けたときには、前記第5ループのループ変数の上位ビットをインクリメントし、
前記第2のカウンタ回路は、
前記第1のモードにおいて、前記第3ループのループ変数をカウントし、前記第2のモードにおいて、前記第6ループのループ変数の下位ビットをカウントする第1のカウンタと、
前記第1のモードにおいて、前記第4ループの変数をカウントし、前記第2のモードにおいて、前記第6ループのループ変数の上位ビットをカウントする第2のカウンタと、
前記第2のモードにおいて、前記第1のカウンタの値と前記第2のカウンタの値とに基づいて、前記第6ループの終了条件が満たされたか否かを判定する倍幅判定部と、を含み、
前記第1のカウンタは、前記第1のモードにおいて、前記第3ループの終了条件が満たされたときに前記第2のカウンタに第1の条件成立信号を出力し、
前記第2のカウンタは、前記第1のモードにおいて、前記第1の条件成立信号を受けたときには、前記第4ループの変数をインクリメントし、
前記第1のカウンタは、前記第2のモードにおいて、前記第5ループ条件成立信号を受けたときには、前記第6ループのループ変数の下位ビットをインクリメントし、
前記第1のカウンタは、前記第2のモードにおいて、前記第6ループのループ変数の下位ビットが最大値を超えたときに、前記第2のカウンタに第1の条件成立信号を出力し、
前記第2のカウンタは、前記第2のモードにおいて、前記第1の条件成立信号を受けたときには、前記第6ループのループ変数の上位ビットをインクリメントする、請求項2記載のプロセッサ。
【請求項11】
前記少なくとも1つのカウンタ回路は、
第1ループのループ変数をカウントする第1のカウンタ回路と、
前記第1ループの1つ外側の第2ループのループ変数をカウントする第2のカウンタ回路と、を含み、
前記第1のカウンタ回路は、第1ループの終了条件が満たされたときに前記プログラマブルロジックに第1の信号を出力し、
前記プログラマブルロジックは、前記第1の信号に基づく論理演算を実行し、前記論理演算の結果が所定の条件を満たすときに増加指示信号を前記第2のカウンタ回路に出力し、
前記第2のカウンタ回路は、前記増加指示信号を受けたときには、前記第2ループのループ変数をインクリメントする、請求項2記載のプロセッサ。
【請求項12】
前記プロセッサは、
前記プログラマブルロジック、および前記カウンタ回路を制御することによって、前記プロセッサの状態遷移を制御する状態遷移コントローラをさらに備え、
前記第2のカウンタ回路は、前記第2ループの終了条件が満たされた時に、前記状態遷移コントローラに第2の信号を出力する、請求項11記載のプロセッサ。
【請求項13】
前記プロセッサは、
メモリと、
前記プログラマブルロジック、および前記カウンタ回路を制御することによって、前記プロセッサの状態遷移を制御する状態遷移コントローラと、をさらに備え、
前記少なくとも1つのカウンタ回路は、
前記状態遷移コントローラの近傍に配置され、第1の変数をカウントする第1のカウンタ回路と、
前記メモリの近傍に配置され、前記第1の変数をカウントする第2のカウンタ回路と、を含む、請求項1記載のプロセッサ。
【請求項14】
前記カウンタ回路は、
前記比較結果を表わす信号の反転信号を生成する反転部をさらに含む、請求項4記載のプロセッサ。
【請求項15】
動的再構成プロセッサによって実行されるコードを生成するコンパイラであって、
前記動的再構成プロセッサは、
複数のプログラマブルプロセッサからなるアレイと、
第1ループのループ変数をカウントする第1のカウンタと、
前記第1ループの1つ外側の第2ループのループ変数をカウントする第2のカウンタと、
前記プログラマブルプロセッサ、前記第1のカウンタおよび前記第2のカウンタを制御することによって、前記動的再構成プロセッサの状態遷移を制御する状態遷移コントローラと、を備え、
前記コンパイラは、
前記第1ループの内部の処理を複数のステージにパイプライン化し、前記第1ループの各繰り返しにおいて、最初のステージの終了後に、前記第1のカウンタに前記第1ループのループ変数をインクリメントさせ、前記第1ループの最後の繰り返しにおける最初のステージの終了後に、前記第2のカウンタに前記第2ループのループ変数をインクリメントさせるデータパスコンテキストを生成する動作合成部、を備えたコンパイラ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プロセッサ、およびコンパイラに関する。
【背景技術】
【0002】
動的再構成プロセッサと動作合成ツールの組み合わせたシステムでは、多状態回路を時系列に折りたたむことによって演算器および配線資源を再利用する(特許文献1を参照)。このため、このようなシステムは、一度書き込んだ回路を使い続けるFPGA(Field Programmable Gate Array)に代表される細粒度のリコンフィギュラブルデバイスに対して、高い面積効率でプログラムを実行できる。
【0003】
C言語などの動作記述言語によって書かれたプログラムを動的再構成プロセッサなどの書き換えが可能なプログラマブルデバイス向けの回路として合成する動作合成では、状態遷移マシン(FSM)とデータパスとを生成して、各状態に応じて時系列にデータパスを切り替える回路が生成される。この動作合成における並列化手法の一つとして、ループ記述をパイプライン回路として合成する方法が知られている(特許文献2)。
【0004】
パイプライン回路を合成する動作合成では、パイプラインのステージごとに実行を制御する方法が知られている(特許文献3)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2003-99409号公報
【特許文献2】特開2008-71089号公報
【特許文献3】特開2014-6650号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ループ変数、またはアキュムレータ変数などを繰り返しカウントするカウンタ回路が、プログラマブルロジックによって構成されている場合には、処理の遅延が発生するという問題がある。
【0007】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0008】
一実施形態のプロセッサは、複数のプログラマブルロジックからなるアレイと、繰り返し変更操作される変数をカウントするための少なくとも1つの専用のカウンタ回路とを備える。
【発明の効果】
【0009】
一実施形態のプロセッサによれば、カウンタ回路が専用回路化されているので、処理が遅延するのを回避できる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施形態のプロセッサ161の構成を表わす図である。
【
図3】C言語による画像フィルタ処理記述を表わす図である。
【
図4】第2の実施形態の動的再構成プロセッサの構成を表わす図である。
【
図5】プロセッシングエレメントPEの構成を表わす図である。
【
図6】第2の実施形態のループ記述の例を表わす図である。
【
図7】
図6のループのループ変数をカウントするための専用のカウンタ回路2の構成要素を表わすブロック図である。
【
図8】第2の実施形態のカウンタ回路の詳細な構成を表わす図である。
【
図9】参考例のカウンタの実現方法の例を表わす図である。
【
図10】プロセッシングエレメントPE(X)、PE(Y)、PE(Z)の構成を表わす図である。
【
図11】第2の実施形態の変形例のループ記述の例を表わす図である。
【
図12】
図11のループのループ変数をカウントするための専用のカウンタ回路2Aの構成要素を表わすブロック図である。
【
図13】第3の実施形態のカウンタ回路202の構成要素を表わすブロック図である。
【
図14】第3の実施形態の変形例のカウンタ回路302の構成要素を表わすブロック図である。
【
図15】第4の実施形態のカウンタ回路402の構成要素を表わすブロック図である。
【
図16】第4の実施形態の変形例のカウンタ回路502の構成を表わす図である。
【
図17】第5の実施形態のカウンタ回路、状態遷移コントローラ、およびプロセッシングエレメントアレイを表わす図である。
【
図18】第5の実施形態の変形例1のカウンタ回路、状態遷移コントローラ、およびプロセッシングエレメントアレイを表わす図である。
【
図19】第5の実施形態の変形例2のカウンタ回路、状態遷移コントローラ、およびプロセッシングエレメントアレイを表わす図である。
【
図20】第6の実施形態の動的再構成プロセッサの構成を表わす図である。
【
図21】第6の実施形態の変形例のカウンタ回路2Xの構成を表わすブロック図である。
【
図22】脱出条件成立信号PSおよび反転脱出条件信号/PSが利用されるプログラムの例を表わす図である。
【
図23】第7の実施形態のカウンタ回路72の構成要素を表わすブロック図である。
【
図24】アキュムレータを利用するプログラムの例を表わす図である。
【
図26】動作合成部900によって生成される状態遷移マシン、およびデータパスコンテキストの例を表わす図である。
【
図27】動作合成時に生成されるパイプラインの例を表わす図である。
【
図28】ループの繰り返し回数が4回の場合のパイプライン回路の実行例を表わす図である。
【
図29】パイプライン化のオーバーヘッドを表わす図である。
【
図30】パイプライン化のオーバーヘッドを削減する例を表わす図である。
【発明を実施するための形態】
【0011】
以下、実施の形態について図面を参照して説明する。
[第1の実施形態]
図1は、第1の実施形態のプロセッサの構成を表わす図である。
【0012】
プロセッサ161は、アレイ162と、少なくとも1つのカウンタ回路163とを備える。
【0013】
アレイ162は、複数のプログラマブルロジック1を含む。
プログラマブルロジック1は、加算器、セレクタ、およびLUTなどの演算資源を提供する。
【0014】
カウンタ回路163は、繰り返し変更操作される変数をカウントするための専用の回路である。繰り返し変更操作される変数とは、たとえば、ループ記述におけるループ変数、または、ループの内部において増分値が繰り返し加算されるアキュムレータ変数である。
【0015】
本実施の形態では、カウンタ回路が専用回路化されているので、処理が遅延するという問題を解決することができる。
【0016】
[第2の実施形態]
図2は、画像フィルタを説明するための図である。画像データをFIR(Finite Impulse Response)フィルタなどによって畳み込み処理する例が示されている。
図2では3×3画素のカーネルフィルタを画像に適応する例が示されている。
【0017】
図3は、C言語による画像フィルタ処理記述を表わす図である。画像imageの横サイズ(x方向)を200画素、縦サイズ(y方向)を100画素、カーネルkernelを3×3画素として記述している。左右に各1画素分、合計2画素の無効領域ができるためx方向の最大値を(200-2)画素、y方向も同様に上下方向の無効領域2画素分を引いて最大値を(100-2)画素としている。
【0018】
CPU(Central Processing Unit)などのプロセッサは、基本的に記述通り逐次的に処理する。一方、FPGAまたは動的再構成プロセッサなどのプロセッサ、または専用ハードウエアは、複数同時に演算を実行することによって、処理速度を上げることができる。
【0019】
図4は、第2の実施形態の動的再構成プロセッサの構成を表わす図である。動的再構成プロセッサは、演算要素である加減算などの基本演算が可能な複数のプロセッシングエレメントPEを含むアレイ51、乗算器MULなどのより大きな演算器要素、メモリHMEM、VMEM、およびこれらの間を接続するための配線、および配線スイッチを備える。動的再構成プロセッサは、状態遷移コントローラ50を備える。状態遷移コントローラ50は、配線スイッチ、およびプロセッシングエレメントPEに対する命令を切り替えることによって、動的再構成プロセッサの状態遷移を制御する。
【0020】
図5は、プロセッシングエレメントPEの構成を表わす図である。プロセッシングエレメントPEは、命令メモリ91と、演算器92と、レジスタ93とを備える。
【0021】
状態遷移コントローラ50からの命令ポインタPTによって、命令メモリ91内の実行命令が指定される。演算器92は、命令を実行する。レジスタ93は、データを記憶する。SWIによって、データ配線上のデータを入力するか否かが切り替えられる。SWOによって、レジスタ93内のデータをデータ配線に出力するか否かが切り替えられる。SWによって、データの伝送ルートが切り替えられる。
【0022】
状態遷移コントローラ50からの命令ポインタ、およびスイッチSW、SWI、SWOを切り替えることによって、上述した画像フィルタを実現することができる。この時に、内側ループ内の(3×3)カーネルの画像フィルタ処理部分はパイプライン化することができる。しかし、ループを制御する部分については、x=x+1のように左辺と右辺の両方に同じループ変数があって自己参照しているため、ループ変数をカウントするカウンタ回路は、パイプライン化によって動作周波数を上げることができない。
【0023】
本実施の形態の動的再構成プロセッサは、ループ変数をカウントするための専用のカウンタ回路2を備える。状態遷移コントローラ50は、カウンタ回路2を制御することによって、動的再構成プロセッサの状態を制御する。
【0024】
ループの制御は、for文とdo-while文のいずれかで記述することができる。for文では、ループ変数と最大値との比較後に、ループ変数が加算される。do-while文では、ループ変数の加算後に、ループ変数と最大値とが比較される。本実施の形態では、for文のループ変数をカウントするためのカウンタ回路が示されている。
【0025】
図6は、第2の実施形態のループ記述の例を表わす図である。
図7は、
図6のループのループ変数xをカウントするための専用のカウンタ回路2の構成要素を表わすブロック図である。カウンタ回路2は、記憶部11、選択部13、加算部12、および比較部14を備える。
【0026】
記憶部11は、選択部13の出力をカウンタ値(sCnt)として記憶する。記憶部11は、書込可能信号WEがアサートされているときに、選択部13の出力信号によって、カウンタ値(sCnt)を更新する。
【0027】
選択部13は、初期値(sInit)を記憶する。選択部13は、初期化信号(INIT)がアサートされているときに、初期値(sInit)を記憶部11に出力する。選択部13は、初期化信号(INIT)がアサートされていないときに、加算部12の出力信号を記憶部11に出力する。初期値(sInit)は、たとえば「0」である。
【0028】
加算部12は、増分値(sInc)を記憶する。加算部12は、加算指示信号(EN)がアサートされているときに、記憶部11の出力(sCnt)と増分値(sInc)とを加算する。増分値(sInc)は、たとえば、「1」である。
【0029】
比較部14は、最大値(sMax)を記憶する。比較部14は、カウンタ値(sCnt)と最大値(sMax)とを比較し、比較結果を表わす信号を出力する。比較部14は、カウンタ値(sCnt)が最大値(sMax)に達したときに、ループ脱出条件成立信号(PS)をアサートする。
【0030】
図8は、第2の実施形態のカウンタ回路の詳細な構成を表わす図である。
選択部13は、セレクタ381と、レジスタ386とを備える。セレクタ381は、初期化信号(INIT)を受ける。レジスタ386は、初期値(sInit)を記憶する。初期値(sInit)は、たとえば、「0」である。
【0031】
記憶部11は、レジスタ382を備える。レジスタ382は、カウンタ値(sCnt)を記憶する。
【0032】
加算部12は、加算器383と、レジスタ384とを備える。加算器383は、加算指示信号(EN)を受ける。レジスタ384は、増分値(sInc)を記憶する。増分値(sInc)は、たとえば、「1」である。
【0033】
本実施の形態では、カウンタ回路を専用回路化にすることによって、遅延を短縮して動作速度を向上させることができる。
【0034】
(参考例)
図9は、参考例のカウンタの実現方法の例を表わす図である。
図10は、プロセッシングエレメントPE(X)、PE(Y)、PE(Z)の構成を表わす図である。
【0035】
3個のPE(X)、PE(Y)、PE(Z)によって、カウンタ回路が実現される。このように、プログラマブルロジックにおけるPE、またはFPGAのLUTは自由度が高く汎用的な回路を作ることができる反面、専用のハードウエア回路と比べると遅延が大きくなる。
【0036】
[第2の実施形態の変形例]
図11は、第2の実施形態の変形例のループ記述の例を表わす図である。
図11では、ループ記述の例としてdo-while文を使う場合が示されている。
図12は、
図11のループのループ変数xをカウントするための専用のカウンタ回路152の構成要素を表わすブロック図である。カウンタ回路152は、記憶部11、選択部13、加算部12、および比較部64を備える。
【0037】
カウンタ回路152の記憶部11、選択部13、および加算部12の構成及び動作は、カウンタ回路2の記憶部11、選択部13、および加算部12の構成および動作と同様なので、説明を繰り返さない。
【0038】
比較部64は、最大値(sMax)を記憶する。比較部14Aは、加算部12の出力と最大値(sMax)とを比較する。比較部64は、加算部12の出力が最大値(sMax)に達したときに、ループ脱出条件成立信号(PS)をアサートする。
【0039】
[第3の実施形態]
図13は、第3の実施形態のカウンタ回路202の構成要素を表わすブロック図である。カウンタ回路202は、ループAのループ変数(たとえば、
図3のx)と、ループAの1つ外側のループBのループ変数(たとえば、
図3のy)とをカウントする。カウンタ回路202は、ループAのループ変数をカウントする第1ループ用カウンタ22Aと、ループBのループ変数をカウントする第2ループ用カウンタ22Bとを備える。
【0040】
第1ループ用カウンタ22Aは、ループAの終了条件が満たされたときに第2ループ用カウンタ22Bにループ脱出条件成立信号(PS1)(第1の信号)を出力する。第2ループ用カウンタ22Bは、ループ脱出条件成立信号(PS1)(第1の信号)を受けたときには、ループBのループ変数をインクリメントする。第2ループ用カウンタ22Bは、ループBの終了条件が満たされたときに状態遷移コントローラ50にループ脱出条件成立信号(PS1)(第2の信号)を出力する。
【0041】
第1ループ用カウンタ22Aは、記憶部11A、選択部13A、加算部12A、および比較部14Aを備える。第2ループ用カウンタ22Bは、記憶部11B、選択部13B、加算部12B、および比較部14Bを備える。
【0042】
記憶部11Aは、ループAのループ変数のカウンタ値(sCnt1)を記憶する。記憶部11Aは、書込可能信号WEがアサートされているときに、選択部13Aの出力信号によって、カウンタ値(sCnt1)を更新する。
【0043】
選択部13Aは、初期値(sInit1)を記憶する。選択部13Aは、初期化信号(INIT)がアサートされているとき、またはループ脱出条件成立信号(PS1)がアサートされているときに、初期値(sInit1)を記憶部11Aに出力する。選択部13Aは、初期化信号(INIT)がアサートされず、かつループ脱出条件成立信号(PS1)がアサートされていないときに、加算部12Aの出力信号を記憶部11Aに出力する。初期値(sInit1)は、たとえば「0」である。
【0044】
加算部12Aは、増分値(sInc1)を記憶する。加算部12Aは、加算指示信号(EN)がアサートされているときに、記憶部11Aの出力(sCnt1)と増分値(sInc1)とを加算する。増分値(sInc1)は、たとえば「1」である。
【0045】
比較部14Aは、最大値(sMax1)を記憶する。比較部14Aは、カウンタ値(sCnt1)と最大値(sMax1)とを比較する。比較部14Aは、カウンタ値(sCnt1)が最大値(sMax1)に達したときに、ループ脱出条件成立信号(PS1)をアサートする。ループ脱出条件成立信号(PS1)は、選択部13Aおよび第2ループ用カウンタ22Bの加算部12Bに送られる。
【0046】
記憶部11Bは、ループBのループ変数のカウンタ値(sCnt2)を記憶する。記憶部11Bは、書込可能信号WEがアサートされているときに、選択部13Bの出力信号によって、カウンタ値(sCnt2)を更新する。
【0047】
選択部13Bは、初期値(sInit2)を記憶する。選択部13Bは、初期化信号(INIT)がアサートされているときに、初期値(sInit2)を記憶部11Bに出力する。選択部13Bは、初期化信号(INIT)がアサートされていないときに、加算部12Bの出力信号を記憶部11Bに出力する。初期値(sInit2)は、たとえば「0」である。
【0048】
加算部12Bは、増分値(sInc2)を記憶する。加算部12Bは、ループ脱出条件成立信号(PS1)がアサートされているときに、記憶部11Bの出力(sCnt2)と増分値(sInc2)とを加算する。増分値(sInc2)は、たとえば「1」である。
【0049】
比較部14Bは、最大値(sMax2)を記憶する。比較部14Bは、カウンタ値(sCnt2)と最大値(sMax2)とを比較する。比較部14Bは、カウンタ値(sCnt2)が最大値(sMax2)に達したときに、ループ脱出条件成立信号(PS2)をアサートする。ループ脱出条件成立信号(PS2)は、状態遷移コントローラ50に送られる。
【0050】
本実施の形態のカウンタ回路202では、ループAでの繰り返しが規定回数に達した場合に、第1ループ用カウンタ22Aの比較の条件が成立して、第2ループ用カウンタ22Bに対して加算を指示する信号が送られるとともに、第1ループ用カウンタ22A自身がループの初期状態に戻り、次の繰り返し動作に移ることができる。また、ループBでの繰り返しが規定回数に達した場合に、第2ループ用カウンタ22Bの比較の条件が成立して、ループ脱出し次の動作に移ることができる。
【0051】
[第3の実施形態の変形例]
図14は、第3の実施形態の変形例のカウンタ回路302の構成要素を表わすブロック図である。このカウンタ回路302は、ループAのループ変数と、ループAの1つ外側のループBのループ変数と、ループBの1つ外側のループCのループ変数をカウントする。カウンタ回路302は、ループAのループ変数をカウントする第1ループ用カウンタ22Aと、ループBのループ変数をカウントする第2ループ用カウンタ22Bと、ループCのループ変数をカウントする第3ループ用カウンタ22Cとを備える。
【0052】
第1ループ用カウンタ22Aは、第3の実施形態と同様なので、説明を繰り返さない。
第2ループ用カウンタ22Bは、第3の実施形態と以下の点で相違する。ループ脱出条件成立信号(PS2)は、選択部13Bおよび第3ループ用カウンタ22Cの加算部12Cに送られる。
【0053】
選択部13Bは、初期化信号(INIT)がアサートされているとき、またはループAの脱出条件成立信号(PS1)とループBの脱出条件成立信号(PS2)とがともにアサートされているときに、初期値(sInit2)を記憶部11Bに出力する。
【0054】
第3ループ用カウンタ22Cは、記憶部11C、選択部13C、加算部12C、および比較部14Cを備える。
【0055】
記憶部11Cは、ループCのループ変数のカウンタ値(sCnt3)を記憶する。記憶部11Cは、書込可能信号WEがアサートされているときに、選択部13Cの出力信号によって、カウンタ値(sCnt3)を更新する。
【0056】
選択部13Cは、初期値(sInit3)を記憶する。選択部13Cは、初期化信号(INIT)がアサートされているときに、初期値(sInit3)を記憶部11Cに出力する。選択部13Cは、初期化信号(INIT)がアサートされていないときに、加算部12Cの出力信号を記憶部11Cに出力する。初期値(sInit3)は、たとえば「0」である。
【0057】
加算部12Cは、増分値(sInc3)を記憶する。加算部12Cは、ループAの脱出条件成立信号(PS1)とループBの脱出条件成立信号(PS2)とがともにアサートされているときに、記憶部11Cの出力(sCnt3)と増分値(sInc3)とを加算する。増分値(sInc3)は、たとえば「1」である。
【0058】
比較部14Cは、最大値(sMax3)を記憶する。比較部14Cは、カウンタ値(sCnt3)と最大値(sMax3)とを比較する。比較部14Cは、カウンタ値(sCnt3)が最大値(sMax3)に達したときに、ループ脱出条件成立信号(PS3)をアサートする。ループ脱出条件成立信号(PS3)は、状態遷移コントローラ50に送られる。
【0059】
[第4の実施形態]
図15は、第4の実施形態のカウンタ回路402の構成要素を表わすブロック図である。カウンタ回路402は、ループの2倍ビット幅のループ変数をカウントする。2倍ビット幅とは、たとえば32ビットである。
【0060】
カウンタ回路402は、ループ変数の下位ビットをカウントする下位ビット用カウンタ32Aと、ループ変数の上位ビットをカウントする上位ビット用カウンタ32Bと、倍幅判定部33とを備える。倍幅判定部33は、下位ビット用カウンタ32Aの値と、上位ビット用カウンタ32Bの値とに基づいて、ループの終了条件が満たされたか否かを判定する。下位ビットは、32ビットのループ変数の下位の16ビットである。上位ビットは、32ビットのループ変数の上位の16ビットである。
【0061】
下位ビット用カウンタ32Aは、ループ変数の下位ビットが最大値を超えたときに、キャリー信号CRを上位ビット用カウンタ32Bに出力する。上位ビット用カウンタ32Bは、キャリー信号CRを受けたときには、ループ変数の上位ビットをインクリメントする。
【0062】
下位ビット用カウンタ32Aは、記憶部11A、選択部13A、加算部12A、および比較部14Aを備える。これらの構成要素は、16ビット用のものである。
【0063】
上位ビット用カウンタ32Bは、記憶部11B、選択部13B、加算部12B、および比較部14Bを備える。これらの構成要素は、16ビット用のものである。
【0064】
記憶部11Aは、ループ変数の下位ビットのカウンタ値(sCnt1)を記憶する。記憶部11Aは、書込可能信号WEがアサートされているときに、選択部13Aの出力信号によって、カウンタ値(sCnt1)を更新する。
【0065】
選択部13Aは、初期値(sInit1)を記憶する。選択部13Aは、初期化信号(INIT)がアサートされているときに、初期値(sInit1)を記憶部11Aに出力する。選択部13Aは、初期化信号(INIT)がアサートされていないときに、加算部12Aの出力信号を記憶部11Aに出力する。初期値(sInit1)は、たとえば「0」である。
【0066】
加算部12Aは、増分値(sInc1)を記憶する。加算部12Aは、加算指示信号(EN)がアサートされているときに、記憶部11Aの出力(sCnt1)と増分値(sInc1)とを加算する。増分値(sInc1)は、たとえば「1」である。加算部12Aは、桁上がりが生じた場合(すなわち、加算後の値が「0xFFFF」を超えた場合に)、キャリー信号CRをアサートする。
【0067】
記憶部11Bは、ループ変数の上位ビットのカウンタ値(sCnt2)を記憶する。記憶部11Bは、書込可能信号WEがアサートされているときに、選択部13Bの出力信号によって、カウンタ値(sCnt2)を更新する。
【0068】
選択部13Bは、初期値(sInit2)を記憶する。選択部13Bは、初期化信号(INIT)がアサートされているときに、初期値(sInit2)を記憶部11Bに出力する。選択部13Bは、初期化信号(INIT)がアサートされていないときに、加算部12Bの出力信号を記憶部11Bに出力する。初期値(sInit2)は、たとえば「0」である。
【0069】
加算部12Bは、増分値(sInc2)を記憶する。加算部12Bは、キャリー信号CRがアサートされているときに、記憶部11Bの出力(sCnt2)と増分値(sInc2)とを加算する。増分値(sInc2)は、たとえば「1」である。
【0070】
倍幅判定部33は、比較部34を備える。
比較部34は、最大値(sMax)と記憶する。比較部14は、記憶部11Aからのカウンタ値(sCnt1)を下位ビットとし、記憶部11Bからのカウンタ値(sCnt2)を上位ビットとした値(たとえば、32ビット)を最大値(sMax)とを比較する。比較部34は、カウンタ値(sCnt2)が最大値(sMax)に達したときに、ループ脱出条件成立信号(PSX)をアサートする。ループ脱出条件成立信号(PSX)は、状態遷移コントローラ50に送られる。sMax2は、たとえば、「0xFFFFFFFF」である。
【0071】
[第4の実施形態の変形例]
図16は、第4の実施形態の変形例のカウンタ回路502の構成を表わす図である。
【0072】
カウンタ回路502は、第1のモードにおいて、ループA、およびループAの1つ外側のループB、およびループBの1つ外側のループCの多重ループのループ変数をカウントし、第2のモードにおいて、ループDの2倍ビット幅のループ変数をカウントする。
【0073】
カウンタ回路502は、第1のカウンタ532Aと、第2のカウンタ532Bと、第3のカウンタ532Cと、倍幅判定部533と、セレクタ190とを備える。
図16において、ブロック800が、第2のモードにおいて実行される構成要素を表わす。
【0074】
第1のカウンタ532Aは、第1のモードにおいて、ループAのループ変数をカウントし、第2のモードにおいて、ループDのループ変数の下位ビットをカウントする。
【0075】
第2のカウンタ532Bは、第1のモードにおいて、ループBのループ変数をカウントし、第2のモードにおいて、ループDのループ変数の上位ビットをカウントする。
【0076】
第3のカウンタ532Cは、第1のモードにおいて、ループCのループ変数をカウントする。
【0077】
倍幅判定部533は、第2のモードにおいて、第1のカウンタ532Aの値と第2のカウンタ532Bの値とに基づいて、ループDの終了条件が満たされたか否かを判定する。倍幅判定部533は、第2のモードにおいて、ループDの終了条件が満たされたときに、状態遷移コントローラ50への条件成立信号EventLをアサートする。
【0078】
第1のカウンタ532Aは、第1のモードにおいて、ループAの終了条件が満たされたときに第2のカウンタ532Bへの条件成立信号EventLをアサートする。
【0079】
第2のカウンタ532Bは、第1のモードにおいて、条件成立信号EventLがアサートされたときには、ループBのループ変数をインクリメントする。
【0080】
第2のカウンタ532Bは、第1のモードにおいて、ループBの終了条件が満たされたときに第3のカウンタ532Cへの条件成立信号EventMをアサートする。
【0081】
第3のカウンタ532Cは、第1のモードにおいて、条件成立信号EventLがアサートされ、かつ条件成立信号EventMがアサートされたときには、ループCのループ変数をインクリメントする。
【0082】
第3のカウンタ532Cは、第1のモードにおいて、ループCの終了条件が満たされたときに状態遷移コントローラ50への条件成立信号EventUをアサートする。
【0083】
第1のカウンタ532Aは、レジスタ89Aと、セレクタ81Aと、レジスタ82Aと、レジスタ84Aと、加算器83Aと、セレクタ88と、レジスタ86Aと、比較器85Aとを備える。
【0084】
レジスタ89Aは、初期値sInit[0]を記憶する。
セレクタ81Aは、初期化信号Initがアサートされているときには、初期値sInit[0]を出力する。セレクタ81Aは、EventLがアサートされているときは、初期値sInit[0]を出力する。セレクタ81Aは、第1のモードにおいて、初期化信号Initがアサートされず、かつモード信号modeがアサートされているときには、レジスタ82Aのカウンタ値sCnt[0]を出力する。セレクタ81Aは、第1のモードにおいて、初期化信号Initがアサートされず、かつモード信号modeがアサートされていないときには、加算器83Aの出力を出力する。セレクタ81Aは、第2のモードにおいて、倍幅判定部533の加算器183の32ビット出力の下位16ビットを出力する。
【0085】
レジスタ82Aは、セレクタ81Aの出力をカウンタ値sCnt[0]として記憶する。
【0086】
レジスタ84Aは、増分値sInc[0]を記憶する。
加算器83Aは、加算指示信号CntEnがアサートされているときに、レジスタ82Aの出力と、レジスタ84Aの出力とを加算する。
【0087】
セレクタ88は、モードCmpModeがアサートされているときには、加算器83Aの出力を出力する。セレクタ88は、モードCmpModeがアサートされていないときには、レジスタ82Aの出力を出力する。
【0088】
レジスタ86Aは、最大値sMax[0]を記憶する。
比較器85Aは、符号モードに基づいて、セレクタ88の出力のMSBを拡張された信号と最大値sMax[0]とを比較する。比較器85Aは、セレクタ88の出力のMSBを拡張された信号が最大値sMax[0]以上のときには、条件成立信号EventLをアサートする。
【0089】
第2のカウンタ532Bは、レジスタ89Bと、セレクタ81Bと、レジスタ82Bと、レジスタ84Bと、加算器83Bと、レジスタ86Bと、比較器85Bとを備える。
【0090】
レジスタ89Bは、初期値sInit[1]を記憶する。
セレクタ81Bは、初期化信号Initがアサートされているときには、初期値sInit[1]を出力する。セレクタ81Bは、EventLがアサートされ、かつEventMがアサートされているときは、初期値sInit[1]を出力する。セレクタ81Bは、第1のモードにおいて、初期化信号Initがアサートされず、かつモード信号modeがアサートされているときには、レジスタ82Bのカウンタ値sCnt[1]を出力する。セレクタ81Bは、第1のモードにおいて、初期化信号Initがアサートされず、かつモード信号modeがアサートされていないときには、加算器83Bの出力を出力する。セレクタ81Bは、第2のモードにおいて、倍幅判定部533の加算器183の32ビット出力の上位16ビットを出力する。
【0091】
レジスタ82Bは、セレクタ81Bの出力をカウンタ値sCnt[1]として記憶する。
【0092】
レジスタ84Bは、増分値sInc[1]を記憶する。
加算器83Bは、加算指示信号CntEnがアサートされ、かつ条件成立信号EventLがアサートされているときに、レジスタ82Bの出力と、レジスタ84Bの出力とを加算する。
【0093】
レジスタ86Bは、最大値sMax[1]を記憶する。
比較器85Bは、符号モードに基づいて、レジスタ82Bの出力のMSBを拡張された信号と最大値sMax[1]とを比較する。比較器85Bは、レジスタ82Bの出力のMSBを拡張された信号が最大値sMax[1]以上のときには、条件成立信号EventMをアサートする。
【0094】
第3のカウンタ532Cは、レジスタ89Cと、セレクタ81Cと、レジスタ82Cと、レジスタ84Cと、加算器83Cと、レジスタ86Cと、比較器85Cとを備える。
【0095】
レジスタ89Cは、初期値sInit[2]を記憶する。
セレクタ81Cは、初期化信号Initがアサートされているときには、初期値sInit[2]を出力する。セレクタ81Bは、第1のモードにおいて、初期化信号Initがアサートされず、かつモード信号modeがアサートされているときには、レジスタ82Cのカウンタ値sCnt[2]を出力する。セレクタ81Cは、第1のモードにおいて、初期化信号Initがアサートされず、かつモード信号modeがアサートされていないときには、加算器83Cの出力を出力する。
【0096】
レジスタ82Cは、セレクタ81Cの出力をカウンタ値sCnt[2]として記憶する。
【0097】
レジスタ84Cは、増分値sInc[2]を記憶する。
加算器83Aは、加算指示信号CntEnがアサートされ、かつ条件成立信号EventLがアサートされ、かつ条件成立信号EventMがアサートされているときに、レジスタ82Cの出力と、レジスタ84Cの出力とを加算する。
【0098】
レジスタ86Cは、最大値sMax[2]を記憶する。
比較器85Cは、符号モードに基づいて、レジスタ82Cの出力のMSBを拡張された信号と最大値sMax[2]とを比較する。比較器85Cは、レジスタ82Cの出力のMSBを拡張された信号が最大値sMax[2]以上のときには、条件成立信号EventUをアサートする。
【0099】
倍幅判定部533は、レジスタ184と、加算器183と、セレクタ188と、レジスタ86と、比較器185とを備える。
【0100】
レジスタ184は、増分値sInc[0]を記憶する。
加算器183は、第2のモードにおいて、加算指示信号CntEnがアサートされているときに、レジスタ82Aから出力されるカウンタ値sCnt[0]を下位16ビットとし、レジスタ82Bから出力されるカウンタ値sCnt[1]を上位16ビットとした値と、レジスタ184の出力とを加算する。
【0101】
セレクタ188は、モードCmpModeがアサートされているときには、加算器183の出力を出力する。セレクタ188は、モードCmpModeがアサートされていないときには、レジスタ82Aから出力されるカウンタ値sCnt[0]を下位16ビットとし、レジスタ82Bから出力されるカウンタ値sCnt[1]を上位16ビットとした値を出力する。
【0102】
レジスタ86は、最大値sMax[0]を記憶する。
比較器185は、符号モードに基づいて、セレクタ188の出力と最大値sMax[0]とを比較する。比較器185は、セレクタ188の出力が最大値sMax[0]以上のときには、条件成立信号EventLをアサートする。
【0103】
専用のカウンタ回路は高速である反面、全ての多重にネストしたループ記述に対応させようとすると回路規模が大きくなってしまう欠点がある。本実施の形態では、専用のカウンタ回路を複数連動させることによって、例えば3重ループ記述のすべてにおいて32ビットカウンタ回路が必要な場合においてもネストしたカウンタ回路を実現することができる。
【0104】
全て3つの専用カウンタ回路を32ビット化した場合と比べると、多くのループ記述においては16ビットのカウンタ回路で足りることから、本実施の形態では、遅延の増大を防ぎ、高速な動作が可能になる。また、本実施の形態によれば、多数の専用のカウンタ回路を設けること、およびカウンタ回路をプログラマブルロジックに接続するための配線スイッチを設けることによる面積増大を回避できる。
【0105】
なお、多重のループ記述のうち、一部(例えば内側のループ記述のみなど)にしか専用カウンタ回路がマッチしない場合には、該当する部分には専用カウンタ回路を使い、マッチしない部分は既存のPEまたはLUTなどの演算資源を組み合わせることでカウンタ回路を実現することとしてもよい。
【0106】
[第5の実施形態]
図17は、第5の実施形態のカウンタ回路、状態遷移コントローラ、およびプロセッシングエレメントアレイを表わす図である。
【0107】
カウンタ回路502は、状態遷移コントローラ50に隣接して配置される。
カウンタ回路502は、ループ脱出条件成立信号PS1、PS2、PS3、PXを状態遷移コントローラ50に出力する。
【0108】
状態遷移コントローラ50は、セレクタ53、および状態指定部52を備える。
セレクタ53は、複数のループ脱出条件成立信号PS1、PS2、PS3、PXから判定に使用する信号を選択する。
【0109】
状態指定部52は、選択した信号に応じて次の状態、および各状態に応じたデータパスコンテキストを決定する。
【0110】
カウンタ回路502を状態遷移コントローラ50に隣接させた位置に配置することによって、プロセッシングエレメントアレイ51を通らずに、ループ脱出条件成立信号PS1、PS2、PS3、PX信号を状態遷移コントローラ50に直接送ることができる。これによって、遅延時間を短縮させることができ、高速な動作が可能になる。
【0111】
一方で、カウンタ回路502によるループ変数の値をループ中で参照する処理には、ループの脱出条件が成立したタイミングでのみ行う処理、またはループの脱出条件が未成立の間において行う処理が存在する。この時に参照する値は、プログラムの書き方により、加算前の値である場合、または加算後の値である。
【0112】
本実施の形態では、第1のカウンタ532Aの記憶部11Aの出力S1と加算部12の出力A1とをプロセッシングエレメントアレイ51に出力する。プロセッシングエレメントアレイ51は、記憶部11Aの出力S1と加算部12の出力A1との両方を利用することができる。
【0113】
第2のカウンタ532B、および第3のカウンタ532Cについても、記憶部の出力と加算部の出力とをプロセッシングエレメントアレイ51に出力するものとしてもよい。
【0114】
[第5の実施形態の変形例1]
図18は、第5の実施形態の変形例1のカウンタ回路、状態遷移コントローラ、およびプロセッシングエレメントアレイを表わす図である。
【0115】
第1のカウンタ回路602および第2のカウンタ回路702は、連携してネストしたループに対応する。
【0116】
第1のカウンタ回路602、および第2のカウンタ回路702は、16ビット変数では多重ループに対応していても、32ビットでは1重のループにしか対応しない。第1のカウンタ回路602と第2のカウンタ回路702とを連動させることによって多重のループに対応させることができる。
【0117】
第1のカウンタ回路602は、第1のモードにおいて、ループA、ループAの1つ外側のループB、およびループBの1つ外側のループCからなる多重ループのループ変数をカウントする。第2のカウンタ回路702は、第1のモードにおいて、ループD、ループDの1つ外側のループE、およびループEの1つ外側のループFからなる多重ループのループ変数をカウントする。
【0118】
第1のカウンタ回路602は、第2のモードにおいて、2重ループの内側のループGの2倍ビット幅のループ変数をカウントする。第2のカウンタ回路702は、第2のモードにおいて、ループGの1つ外側のループHの2倍ビット幅のループ変数をカウントする。
【0119】
第1のカウンタ回路602は、第1のカウンタ132A、第2のカウンタ132B、第3のカウンタ132C、および倍幅判定部133を備える。
【0120】
第1のカウンタ132Aは、第1のモードにおいて、ループAのループ変数をカウントし、第2のモードにおいて、ループGの2倍ビット幅のループ変数の下位ビットをカウントする。
【0121】
第2のカウンタ132Bは、第1のモードにおいて、ループBのループ変数をカウントし、第2のモードにおいて、ループGの2倍ビット幅のループ変数の上位ビットをカウントする。
【0122】
第3のカウンタ132Cは、第1のモードにおいて、ループCのループ変数をカウントする。
【0123】
第1のカウンタ132Aは、第1のモードにおいて、ループAの終了条件が満たされたときに第2のカウンタ132Bに条件成立信号PS1Aを出力する。
【0124】
第2のカウンタ132Bは、第1のモードにおいて、条件成立信号PS1Aを受けたときには、ループBのループ変数をインクリメントする。第2のカウンタ132Bは、第1のモードにおいて、ループBの終了条件が満たされたときに第3のカウンタ132Cに条件成立信号PS2Aを出力する。
【0125】
第3のカウンタ132Cは、第1のモードにおいて、条件成立信号PS2Aを受けたときには、ループCのループ変数をインクリメントする。第3のカウンタ132Cは、第1のモードにおいて、ループCの終了条件が満たされたときに、状態遷移コントローラ50に条件成立信号PS3Aを出力する。
【0126】
第1のカウンタ132Aは、第2のモードにおいて、ループGのループ変数の下位ビットが最大値を超えたときに、第2のカウンタ132Bに条件成立信号PS1Aを出力する。
【0127】
第2のカウンタ132Bは、第2のモードにおいて、条件成立信号PS1Aを受けたときには、ループGのループ変数の上位ビットをインクリメントする。
【0128】
倍幅判定部133は、第2のモードにおいて、第1のカウンタ132Aの値と第2のカウンタ132Bの値とに基づいて、ループGの終了条件が満たされたか否かを判定し、ループGの終了条件が満たされたときに、条件成立信号PSXを出力する。
【0129】
第2のカウンタ回路702は、第1のカウンタ232A、第2のカウンタ232B、第3のカウンタ232C、および倍幅判定部233を備える。
【0130】
第1のカウンタ232Aは、第1のモードにおいて、ループDのループ変数をカウントし、第2のモードにおいて、ループHの2倍ビット幅のループ変数の下位ビットをカウントする。
【0131】
第2のカウンタ232Bは、第1のモードにおいて、ループEのループ変数をカウントし、第2のモードにおいて、ループHの2倍ビット幅のループ変数の上位ビットをカウントする。
【0132】
第3のカウンタ232Cは、第1のモードにおいて、ループFのループ変数をカウントする。
【0133】
第1のカウンタ232Aは、第1のモードにおいて、ループDの終了条件が満たされたときに第2のカウンタ232Bに条件成立信号PS1Bを出力する。
【0134】
第2のカウンタ232Bは、第1のモードにおいて、条件成立信号PS1Bを受けたときには、ループEのループ変数をインクリメントする。第2のカウンタ232Bは、第1のモードにおいて、ループEの終了条件が満たされたときに第3のカウンタ232Cに条件成立信号PS2Bを出力する。
【0135】
第3のカウンタ232Cは、第1のモードにおいて、条件成立信号PS2Bを受けたときには、ループFのループ変数をインクリメントする。第3のカウンタ232Cは、第1のモードにおいて、ループFの終了条件が満たされたときに、状態遷移コントローラ50に条件成立信号PS3Bを出力する。
【0136】
第1のカウンタ232Aは、第2のモードにおいて、条件成立信号PSXを受けたときには、ループHのループ変数の下位ビットをインクリメントする。
【0137】
第1のカウンタ232Aは、第2のモードにおいて、ループHのループ変数の下位ビットが最大値を超えたときに、第2のカウンタ232Bに条件成立信号PS1Bを出力する。
【0138】
第2のカウンタ232Bは、第2のモードにおいて、条件成立信号PS1Bを受けたときには、ループHのループ変数の上位ビットをインクリメントする。
【0139】
倍幅判定部233は、第2のモードにおいて、第1のカウンタ232Aの値と第2のカウンタ232Bの値とに基づいて、ループHの終了条件が満たされたか否かを判定し、ループHの終了条件が満たされたときに、条件成立信号PSYを出力する。
【0140】
[第5の実施形態の変形例2]
図19は、第5の実施形態の変形例2のカウンタ回路、状態遷移コントローラ、およびプロセッシングエレメントアレイを表わす図である。
【0141】
第1のカウンタ回路602は、第2のモードにおいて、ループAの2倍ビット幅のループ変数をカウントする。
【0142】
第2のカウンタ回路702は、第2のモードにおいて、ループAの1つ外側のループBの2倍ビット幅のループ変数をカウントする。
【0143】
第1のカウンタ回路602は、ループAの終了条件が満たされたときにプロセッシングエレメントアレイ51にループ脱出条件成立信号PSXを出力する。
【0144】
プロセッシングエレメントアレイ51の少なくとも1つのプロセッシングエレメントPEがループ脱出条件成立信号PSXに基づく論理演算を実行し、論理演算の結果が所定の条件を満たすときに、増加指示信号を第2のカウンタ回路702に出力する。
【0145】
第2のカウンタ回路702は、増加指示信号を受けたときには、ループBのループ変数をインクリメントする。第2のカウンタ回路702は、ループBの終了条件が満たされたときに状態遷移コントローラ50にループ脱出条件成立信号PSYを出力する。
【0146】
[第6の実施形態]
図20は、第6の実施形態の動的再構成プロセッサの構成を表わす図である。
【0147】
動的再構成プロセッサは、第1のカウンタ回路2A、2B、2Cと、第2のカウンタ回路20A、20B、20Cを備える。
【0148】
第2のカウンタ回路20A、20B、20Cは、第1のカウンタ回路2A、2B、2Cのコピーカウンタである。
【0149】
第1のカウンタ回路2Aは、変数Aをカウントする。第1のカウンタ回路2Bは、変数Bをカウントする。第1のカウンタ回路2Cは、変数Cをカウントする。第2のカウンタ回路20Aは、変数Aをカウントする。第2のカウンタ回路20Bは、変数Bをカウントする。第2のカウンタ回路20Cは、変数Cをカウントする。
【0150】
第1のカウンタ回路2Aと第2のカウンタ回路20Aとは、両方が同時に、または一方だけが変数Aをカウントすることができる。第1のカウンタ回路2Bと第2のカウンタ回路20Bとは、両方が同時に、または一方だけが変数Bをカウントすることができる。第1のカウンタ回路2Cと第2のカウンタ回路20Cとは、両方が同時に、または一方だけが変数Cをカウントすることができる。
【0151】
第1のカウンタ回路2A、2B、2Cは、状態遷移コントローラ50の近傍に配置される。第1のカウンタ回路2A、2B、2Cの出力は、状態遷移コントローラ50に送られ、動的再構成プロセッサの制御のために用いられる。
【0152】
第2のカウンタ回路20A、20B、20Cは、メモリVMEM、HMEMの近傍に配置される。メモリVMEM、HMEMは、第1のカウンタ回路2A、2B、2C、および状態遷移コントローラ50から離れた場所に配置されるため、第1のカウンタ回路2A、2B、2Cからループ脱出条件成立信号、または変数のカウンタ値などをVMEM、HMEMに供給しようとするとPEアレイ51の中を通過する配線が必要となるため、遅延が大きくなる。
【0153】
第2のカウンタ回路20A、20B、20Cは、近傍のメモリVMEM、HMEMにループ脱出条件成立信号、または変数のカウンタ値などを供給することによって、遅延を短縮することができる。
【0154】
なお、
図20の例では、左上隅にはカウンタ回路が配置されていないが、第2のカウンタ回路を配置してもよい。
【0155】
[第6の実施形態の変形例]
脱出条件成立信号PSは、ループの脱出条件が成立したタイミングでのみ行う処理を有効とする信号として使える。一方、ループの脱出条件が未成立の間において行う処理用には脱出条件成立信号PSを反転させる必要がある。たとえば、ループの脱出条件が未成立の間において、レジスタのライトイネーブルを指示する信号をアサートする場合がある。
【0156】
プロセッシングエレメントアレイ51中において脱出条件成立信号PSを反転することも考えられるが、演算器を使用してしまうとともに、遅延量が増加するという問題がある。カウンタ回路が脱出条件成立信号PSを反転した信号を出力することによって、このような問題を回避することができる。
【0157】
図21は、第6の実施形態の変形例のカウンタ回路2Xの構成を表わすブロック図である。このカウンタ回路2Xが、第1の実施形態のカウンタ回路2と相違する点は、カウンタ回路2Xが、反転部114を備える点である。
【0158】
反転部114は、ループ脱出条件成立信号PSを反転することによって、反転ループ脱出条件成立信号/PSを生成して、出力する。反転部114は、たとえば、インバータによって構成される。
【0159】
図22は、脱出条件成立信号PSおよび反転脱出条件信号/PSが利用されるプログラムの例を表わす図である。
【0160】
内側ループ内のarrayへの書き込みについては、内側ループを脱出していないときに書き込みを有効とするため、脱出条件成立信号PSを反転した信号/PSをarray用のレジスタへのライトイネーブルを指示する信号として用いることができる。これによって、カウンタ回路からメモリの間に別途信号反転用の汎用演算器を設ける必要がなくなる。
【0161】
内側ループ脱出後のarray2への書き込みについては、脱出条件成立信号PSをarray2用のレジスタへのライトイネーブルを指示する信号として用いることができる。
【0162】
[第7の実施形態]
カウンタ回路は、次のような利用法がある。カウンタ回路はループの内側の演算においても活用することができる。あるレジスタに毎回他から供給される値を加算するアキュムレータは、プロセッシングエレメントPEでも構築することができる。しかし、レジスタと加算器とをプログラマブル配線接続し、レジスタを起点かつ終点とするループを形成させる必要があるので、遅延が大きくなるという問題がある。
【0163】
図23は、第7の実施形態のカウンタ回路72の構成要素を表わすブロック図である。
カウンタ回路72は、ループの内部において増分値が繰り返し加算されるアキュムレータ変数をカウントする。
【0164】
カウンタ回路72は、第1の実施形態で説明したカウンタ回路2と同様に、記憶部11と、選択部134と、加算部12と、および比較部14を備える。
【0165】
図24は、アキュムレータを利用するプログラムの例を表わす図である。
図24のプログラムでは、for文によるループ記述の内側において、アキュムレータ変数acumが自己参照して累算(アキュムレータ)を行っている。例えば、画像領域内の画素値の平均を算出する場合にこのようなアキュムレータが必要になる。
【0166】
加算部12に入力される増分値αは、プロセッシングエレメントPEから与えるようにすることもできる。その結果、上記のループの内部の処理回路を固定回路とすることができる。増分値αを入力する部分については、パイプラインレジスタを挿入することで、全体として遅延量を抑えることができる。
【0167】
加算部12の加算器を浮動小数点にも対応させることで、浮動小数点のアキュムレータとして使うこともできる。浮動小数点演算は一般的に整数演算よりも遅延が大きいため、カウンタ回路72を用いることによって、遅延量を短縮することができる。
【0168】
[第8の実施形態]
画像処理では、x方向およびy方向の二重のネストしたループ記述を使って二次元平面上の点の位置を動かしていくことで処理する場所を移動させていく。AIにおける畳み込み処理ではさらにz方向となるチャネル方向の処理が入ることがある。このような画像処理およびAIにおける畳み込みなどを専用ロジック、またはプログラマブルロジックなどによって処理する場合に、高いスループットを得るための方法として回路をパイプライン化にすることが考えられる。
【0169】
しかしながら、パイプライン回路の遅延を短縮して高速化していくと、カウンタ回路がクリティカルパス(最大遅延のパス、つまり動作周波数を上げる上でボトルネックになっている部分)になるという課題があった。特にループがネストしていて、多重になっている場合には、カウンタ回路がクリティカルパスになる可能性が高くなる。
【0170】
カウンタ回路を上述の実施形態において説明したように専用回路化することによって、このような問題を解決することができる。
【0171】
本実施の形態では、動的再構成プロセッサ、そのコンパイル方法、パイプライン回路の合成について説明した上で、カウンタ回路をマッピングする方法、およびその実例を示す。
【0172】
本実施の形態のコンパイラは、上述の実施形態で説明したカウンタ回路を備える動的再構成プロセッサによって実行されるコードを生成する。
【0173】
図25は、コンパイラの構成を表わす図である。
コンパイラは、動作合成部900と、テクノロジマッピング部904と、配置配線部905と、コード生成部906とを備える。
【0174】
動作合成部900は、状態遷移コントローラ50へ割り当てる状態遷移マシン(FSM)、および各状態に応じた回路であるデータパスコンテキストを生成する。
【0175】
動作合成部900は、C言語などの動作記述言語によって記述されたプログラム、遅延情報を含む回路ライブラリ、動作周波数および回路規模など合成制約条件から状態遷移マシン(FSM)、および状態遷移マシンの各状態に応じたデータパスコンテキストを生成する。
【0176】
動作合成部900は、データフロー解析時に上述の実施形態において説明した専用のカウンタ回路を抽出する。動作合成のスケジューリングにおいて専用カウンタ回路を考慮することができるため、カウンタ回路の資源の個数管理および遅延管理が容易になる。
【0177】
テクノロジマッピング部904は、論理合成などの最適化、およびPEの演算ビット幅に応じたマッピング処理を行なう。
【0178】
配置配線部905は、演算器、レジスタ、メモリの位置を決めて、プログラマブル配線を結線する。
【0179】
コード生成部906は、状態遷移コントローラ(STC)向けのコンフィギュレーションコード、およびPEアレイ向けのコンフィギュレーションコードを生成する。
【0180】
図26は、動作合成部900によって生成される状態遷移マシン、およびデータパスコンテキストの例を表わす図である。
【0181】
動的再構成プロセッサは、回路切り替えを活用することによって、複数の条件の回路および初期化回路を混在させずに、必要な部分のみをコンテキストとして動かすことができる。例えば、画像処理の例では、動的再構成プロセッサは、内側ループ内の画像処理用のパイプライン回路と、専用カウンタ回路の設定用のレジスタ初期化回路と、その他の前処理と、後処理とを切り替える。これらを動的再構成プロセッサの各データパスコンテキストへ割り当てて、状態遷移マシンによって画像領域に応じてデータパスコンテキストを切り替える。
【0182】
図27は、動作合成時に生成されるパイプラインの例を表わす図である。
動作合成部900は、処理スループットを向上させるために、最も内側のループの内部の処理をパイプライン化する。動作合成部900は、データフローグラフを生成後にパイプライン化に向けて演算器などのリソースを制約してスケジューリングする。この際に、動作合成部900は、データハザードを避けるために、レジスタ・フォワーディングなどを行った後に、パイプライン化で複数の状態を折りたたんでパイプライン回路として合成する。
【0183】
図27では、4状態の回路を1状態の4ステージの回路として折りたたみ一つのコンテキストにまとめることによってスループットを4倍に向上させる例を示している。
【0184】
ループ内の処理は前述したようにパイプライン化によってスループットを向上させることができる。パイプライン化では、演算途中でレジスタまたはF/Fを挿入することで遅延を短縮することができる。
【0185】
しかし、内側ループと外側ループのループ記述は、パイプライン化することができないため、性能上のボトルネックとなりやすい。特にネストしたループの場合には、複数のカウンタ回路を連動させる必要があるため、動作周波数を上げることが難しくなる。そこで、動作合成部900は、多重ループの記述を上述の実施形態で説明した多重ループに対応した専用のカウンタ回路にマッピングする。
【0186】
図28は、ループの繰り返し回数が4回の場合のパイプライン回路の実行例を表わす図である。
【0187】
パイプライン回路ではデータを導入するまでのプロローグの要するサイクルと、データを排出するためのエピローグに要するサイクルとが必要となる。1状態4ステージのパイプライン回路の場合には、
図28に示すように、3サイクルのプロローグ、および3サイクルのエピローグ用のサイクル数が必要になる。
【0188】
図29は、パイプライン化のオーバーヘッドを表わす図である。
2重にネストしたループにおいて内側ループAのみをパイプライン化した場合、
図29に示すように、1状態4ステージのパイプライン回路の外側に別のループが存在することになる。外側ループBが1回実行されるごとに、内側ループAのプロローグおよびエピローグの時間が隙間となって生じるため、実行サイクル上のオーバーヘッドになってしまう。
【0189】
図30は、パイプライン化のオーバーヘッドを削減する例を表わす図である。
動作合成部900は、ループAの各繰り返しにおいて、最初のステージの終了後に、第1ループ用カウンタ22AにループAのループ変数をインクリメントさせるデータパスコンテキストを生成する。動作合成部900は、ループAの最後の繰り返しにおける最初のステージの終了後に、第2ループ用カウンタ22BにループBのループ変数をインクリメントさせるデータパスコンテキストを生成する。
【0190】
これによって、ループBの各繰り返し回数において、ループAの繰り返し回数がk回目での最初のステージの終了後に、ループAの繰り返し回数が(k+1)回目での最初のステージが開始する。ループBの繰り返し回数がs回目でのループAの最後の繰り返し回数における最初のステージの終了後に、ループBの繰り返し回数が(s+1)回目におけるループAの繰り返し回数が1回目における最初のステージが開始する。
【0191】
図30に示すように、外側ループが内側ループの中に入ることによって、1重のループ化するができる。その結果、外側ループがまわるごとに発生する内側ループのプロローグおよびエピローグに関わるオーバーヘッドを削減することができる。これによって、全体のサイクル数を短縮することができる。
【0192】
なお、合成フローにおいて、テクノロジマッピング時にカウンタ回路に該当する回路を抽出して専用カウンタ回路へマッピングするものとしてもよい。専用カウンタ回路にマッチするかどうかの判別、多重にネストしたループ記述から複数の専用カウンタ回路を使う場合の分割、その間のプログラマブル配線の接続などを行なうものとしてもよい。
【0193】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0194】
1 プログラマブルロジック、2,2A,2B,2C,2X,20A,20B,20C,72,152,163,202,203,302,402,502,602,702 カウンタ回路、11,11A,11B,11C 記憶部、12,12A,12B,12C 加算部、13,13A,13B,13C,134 選択部、14,14A,14B,14C,34,64 比較部、22A 第1ループ用カウンタ、22B 第2ループ用カウンタ、22C 第3ループ用カウンタ、32A 下位ビット用カウンタ、32B 上位ビット用カウンタ、33,133,233,533 倍幅判定部、50 状態遷移コントローラ、51,182 アレイ、52 状態指定部、53,81A,81B,81C,88,188,190,381 セレクタ、82A,82B,82C,84A,84B,84C,86,86A,86B,86C,89A,89B,89C,93,184,382,384,386 レジスタ、83A,83B,83C,183,383 加算器、85A,85B,85C,185 比較器、91 命令メモリ、92 演算器、114 反転部、132A,232A,532A 第1のカウンタ、132B,232B,532B 第2のカウンタ、132C,232C,532C 第3のカウンタ、161 プロセッサ、900 動作合成部、904 テクノロジマッピング部、905 配置配線部、906 コード生成部、HMEM,VMEM メモリ、MUL 乗算器、PE プロセッシングエレメント、SW,SWI,SWO スイッチ。