(57)【要約】  本発明のデータ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置は、アレイ状に配置された複数のプロセッサエレメントを備える。前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備える。前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる。
2018135088.tif 000002
【特許請求の範囲】
【請求項１】
アレイ状に配置された複数のプロセッサエレメントを備えたデータ処理装置であって、
前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備え、
前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる、
データ処理装置。
【請求項２】
前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化でメモリアドレスを生成する、
請求項１に記載のデータ処理装置。
【請求項３】
前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化でメモリアドレスを生成する、
請求項１に記載のデータ処理装置。
【請求項４】
前記アドレス生成器は、予め設定された所定の個数の前記メモリアドレスを生成し、
外部から入力される第１入力値と予め設定された所定の第１条件値とを比較する第１比較器と、
予め設定された所定の第１および第２設定値が入力され、前記第１比較器の第１比較結果に基づいて前記第１および第２設定値のうちのいずれかを出力する第１切換え器と、
外部から入力される第２入力値と予め設定された所定の第２条件値とを比較する第２比較器と、
予め設定された所定の第３および第４設定値が入力され、前記第２比較器の第２比較結果に基づいて前記第３および第４設定値のうちのいずれかを出力する第２切換え器と、
前記第１および第２切換え器それぞれから出力された第１および第２出力値と、予め設定された第５設定値とを加算する第１加算器と、
第３切換え器と、
レジスタと、
前記第３切換え器から出力された第３出力値と、前記第１加算器から出力された第１加算結果と加算し、その第２加算結果を前記メモリアドレスとして前記レジスタおよび前記メモリそれぞれに出力する第２加算器とを備え、
前記レジスタは、前記第２加算器から出力された前記メモリアドレスを保持して前記第２比較器へ出力し、
前記第３切換え器は、前記レジスタで保持されている前記メモリアドレス、および、予め設定された所定の第５設定値が入力され、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスを生成する場合には、前記所定の第５設定値を前記第３出力値として出力し、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスの次以降のメモリアドレスを生成する場合には、前記レジスタで保持されている前記メモリアドレスを前記第３出力値として出力する、
請求項１ないし請求項３のいずれか１項に記載のデータ処理装置。
【請求項５】
請求項１ないし請求項４のいずれか１項に記載のデータ処理装置を備え、前記データ処理装置を用いて畳み込み演算を行う畳み込み演算装置。
【請求項６】
請求項１ないし請求項４のいずれか１項に記載のデータ処理装置を備え、前記データ処理装置を用いて畳み込みニューラルネットワークを形成する畳み込みニューラルネットワーク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを処理するデータ処理装置、前記データ処理装置を備える畳み込み演算装置および前記データ処理装置を備える畳み込みニューラルネットワーク装置に関する。
【背景技術】
【０００２】
従来、データ処理の効率化や前記データ処理に伴って装置で消費する電力の効率化等の観点から、データ処理装置の一つとして、祖粒度リコンフィギャラブルアレイ（Ｃｏａｒｓｅ−Ｇｒａｉｎｅｄ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｒｉｃｈｉｔｅｃｔｕｒｅ、以下、「ＣＧＲＡ」と適宜に略記する）が知られている。このＣＧＲＡは、演算器およびレジスタ等を備えたプロセッシングエレメント（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ、以下、「ＰＥ」と適宜に略記する）をアレイ状に複数備えたプロセッサであり、動作中に、各ＰＥのデータ処理内容と各ＰＥ間の接続態様とを変更できる（再構成機能）。より具体的には、前記ＣＧＲＡは、各ＰＥのデータ処理内容および各ＰＥ間の接続態様それぞれを規定したデータ（コンフィギュレーションデータ）を格納したメモリ（コンフィギュレーションメモリ）をさらに備え、前記コンフィギュレーションデータに従って、動作中に、各ＰＥのデータ処理内容と各ＰＥ間の接続態様とを変更することで、再構成される。【０００３】
一方、画像認識では、近年、その認識精度が高いこと等から、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、以下、「ＣＮＮ」と適宜に略記する）に代表される深層学習（ディープラーニング、Ｄｅｅｐ  Ｌｅａｒｎｉｎｇ）が研究、開発さている。そして、非特許文献１には、前記ＣＧＲＡをＣＮＮに用いた技術が提案されている。【０００４】
ところで、ＣＮＮでは、そのデータ処理で畳み込み演算と呼ばれる演算が膨大な回数で実行される。このため、ＣＮＮでは、その学習の情報処理（データ処理）や前記学習後の画像認識の情報処理（データ処理）に多大な時間がかかってしまう。特に、前記ＣＧＲＡは、大略、二次元アレイの各交点に配置した各ＰＥに対し、多重化されたＦｏｒ文における最内ループを構成する要素演算を写像した後、主記憶装置から読み出したデータを一方向に流入させ、ループイタレーション（ｉｔａｒａｔｉｏｎ、繰り返し処理）の演算結果をデータ処理装置のサイクルごとに生成する。前記要素演算の写像は、主記憶装置に写像するための情報をセットし、その値を読み出すことで実行されるため、或る程度の時間を要する。そのため、最内ループで演算する回数が少ないと、演算に要する合計時間（写像時間＋演算時間）に対する写像時間の割合が増えてしまい、演算効率が悪化してしまう。ＣＮＮの畳み込み演算において、１枚の画像に対する演算では最内ループで演算される回数が少ないため、前記非特許文献１は、複数枚の画像を纏めて処理することで、演算効率の悪化を抑制している。しかしながら、略リアルタイムでデータ処理が求められる装置では、画像が１枚ずつ処理されるため、前記非特許文献１のような、複数枚の画像を纏めて処理する方式が採用できない。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｍａｓａｋａｚｕ  Ｔａｎｏｍｏｔｏ、ｅｔ  ａｌ．、“Ａ  ＣＧＲＡ−ｂａｓｅｄ  Ａｐｐｒｏａｃｈ  ｆｏｒ  Ａｃｃｅｌｅｒａｔｉｎｇ  Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ」、２０１５  ＩＥＥＥ  ９ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  Ｅｍｂｅｄｄｅｄ  Ｍｕｌｔｉｃｏｒｅ／Ｍａｎｙ−ｃｏｒ  Ｓｙｓｔｅｍｓ−ｏｎ−Ｃｈｉｐ
【発明の概要】
【０００６】
本発明は、上述の事情に鑑みて為された発明であり、その目的は、１枚ずつ画像を処理する場合でも、演算効率をより向上できるデータ処理装置、前記データ処理装置を備える畳み込み演算装置および前記データ処理装置を備える畳み込みニューラルネットワーク装置を提供することである。
【０００７】
上述した目的を実現するために、本発明の一側面を反映したデータ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置は、アレイ状に配置された複数のプロセッサエレメントを備える。前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備える。前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる。
【０００８】
発明の１または複数の実施形態により与えられる利点および特徴は、以下に与えられる詳細な説明および添付図面から十分に理解される。これら詳細な説明及び添付図面は、例としてのみ与えられるものであり本発明の限定の定義として意図されるものではない。
【図面の簡単な説明】
【０００９】
【図１】実施形態における畳み込みニューラルネットワーク装置の構成を示す図である。
【図２】前記畳み込みニューラルネットワーク装置における畳み込み層（データ処理装置）の構成を示す図である。
【図３】前記畳み込み層（データ処理装置）におけるプロセッシングエレメントの構成を示す図である。
【図４】畳み込みニューラルネットワークにおける畳み込み演算を説明するための図である。
【図５】図２に示す構成において、前記畳み込み層（データ処理装置）における１行１列に配置されたプロセッシングエレメントを説明するための図である。
【図６】図２に示す構成において、前記畳み込み層（データ処理装置）における１行２列および１行３列に配置されたプロセッシングエレメントを説明するための図である。
【図７】図２に示す構成において、前記畳み込み層（データ処理装置）における２行１列に配置されたプロセッシングエレメントを説明するための図である。
【図８】図２に示す構成において、前記畳み込み層（データ処理装置）における２行２列に配置されたプロセッシングエレメントを説明するための図である。
【図９】図２に示す構成において、前記畳み込み層（データ処理装置）における２行３列に配置されたプロセッシングエレメントを説明するための図である。
【図１０】図２に示す構成において、前記畳み込み層（データ処理装置）における２行４列に配置されたプロセッシングエレメントを説明するための図である。
【図１１】図２に示す構成において、前記畳み込み層（データ処理装置）における３行１列ないし３行４列、４行１列および４行３列に配置されたプロセッシングエレメントを説明するための図である。
【図１２】図２に示す構成において、前記畳み込み層（データ処理装置）における５行１列に配置されたプロセッシングエレメントを説明するための図である。
【図１３】前記畳み込み層に入力された画像（対象画像）の各画素値を格納するメモリのメモリアドレスを示す図である。
【図１４】前記畳み込み層で実行される畳み込み演算で用いられるカーネルの各要素（画像フィルタの各フィルタ係数）を格納するメモリのメモリアドレスを示す図である。
【図１５】前記畳み込み層による畳み込み演算によって生成された画像（特徴マップ）の各画素値を格納するメモリのメモリアドレスを示す図である。
【図１６】前記畳み込み層（データ処理装置）における演算器アレイのタイムチャートを示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、本発明の１または複数の実施形態が説明される。しかしながら、発明の範囲は、開示された実施形態に限定されない。なお、各図において同一の符号を付した構成は、同一の構成であることを示し、適宜、その説明を省略する。本明細書において、総称する場合には添え字を省略した参照符号で示し、個別の構成を指す場合には添え字を付した参照符号で示す。
【００１１】
本実施形態におけるデータ処理装置は、アレイ状に配置された複数のプロセッサエレメントを備えた装置である。前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備える。前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化で好ましくは互いに隣接する２個のメモリアドレスを生成できる。すなわち、前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化で好ましくは互いに隣接する２個のメモリアドレスを生成すること（機能）を含む。より具体的には、一態様では、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化で好ましくは互いに隣接する２個のメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化で好ましくは互いに隣接する２個のメモリアドレスを生成する。他の一態様では、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化でメモリアドレスを生成する。したがって、これら各態様において、前記アドレス生成器は、好ましくは前記複数の数値範囲における互いに隣接する２個の数値範囲の一方の最終のメモリアドレスと、前記２個の数値範囲の他方の最初のメモリアドレスとを非連続な変化（すなわち、異なる値）で生成する。
【００１２】
以下、このようなデータ処理装置を畳み込みニューラルネットワーク（ＣＮＮ）に適用、より詳しくは、前記ＣＮＮにおける、畳み込み演算を行う畳み込み層（畳み込み装置の一例）に適用した場合について、より具体的に説明するが、本実施形態にかかるデータ処理装置は、汎用であり、その用途は、限定されない。
【００１３】
図１は、実施形態における畳み込みニューラルネットワーク装置の構成を示す図である。実施形態における畳み込みニューラルネットワーク装置（ＣＮＮ装置）Ｗは、例えば、図１に示すように、前処理部１と、多層パーセプトロン部２とを備える。
【００１４】
前処理部１は、畳み込み層１１１（１１１−１、・・・、１１１−ｋ）およびプーリング層１１２（１１２−１、・・・、１１２−ｋ）を備える前処理セット１１（１１−１、・・・、１１−ｋ）を１または複数ｋ備えて構成される（ｋは２以上の整数）。前処理セット１１が複数である場合には、これら複数の前処理セット１１は、直列で接続され、複数段の構成となる。前処理部１には、学習するための画像ＩＰや認識すべき認識対象の画像ＩＰが入力される。以下、前処理部１に入力される画像ＩＰを「対象画像ＩＰ」と適宜に呼称する。
【００１５】
畳み込み層１１１は、入力された対象画像ＩＰに対し畳み込み演算を実行する装置である。より具体的には、畳み込み層１１１は、対象画像ＩＰに対し所定のカーネル（画像フィルタ）ＫＮで畳み込む（フィルタリングする）。前記カーネルＫＮは、予め設定された複数のものであり、これら複数のカーネルＫＮそれぞれによって対象画像ＩＰが畳み込まれ、カーネルＫＮの個数に応じた複数の画像（特徴マップ）ＦＭが生成される。カーネルＫＮが多いほど、対象画像ＩＰにおける様々な特徴を捉えることができる。カーネルＫＮのサイズは、任意であり、各前処理セット１１ごとに適宜に設定される。ＣＮＮでは、学習によってカーネルＫＮが生成される。すなわち、カーネルＫＮの各要素（各フィルタ係数）の数値が学習によって自動的に設定される。この畳み込み演算によって対象画像ＩＰ内のパターンが検出できるようになる。畳み込み層１１１は、当該段の前処理セット１１におけるプーリング層１１２に接続され、畳み込み演算によって生成された画像である特徴マップＦＭをこのプーリング層１１２へ出力する。実施形態にかかるデータ処理装置を備えて構成される畳み込み層１１１は、より詳しく後述する。
【００１６】
プーリング層１１２は、マックスプーリング（ｍａｘｐｏｏｌｉｎｇ）の処理を実行する装置である。より具体的には、プーリング層１１２は、所定サイズの矩形フィルタを特徴マップＦＭ内で所定の画素ずつずらしながら矩形内の最大値を取り出して新たな画像を生成する。このマックスプーリングの処理によって、抽出される特徴の位置感度が低下される。プーリング層１１２は、公知な常套技術で構成される。プーリング層１１２は、次段の前処理セット１１が存在する場合には、次段の前処理セット１１における畳み込み層１１１に接続され、その生成した画像をこの畳み込み層１１１へ出力し、次段の前処理セット１１が存在しない場合（すなわち、最終段の前処理セット１１−ｋにおけるプーリング層１１２−ｋの場合）には、多層パーセプトロン部２に接続され、前記生成した画像を多層パーセプトロン部２へ出力する。
【００１７】
多層パーセプトロン部２は、複数の層にニューロンを配置したニューラルネットワークであり、前記ニューラルネットワークによって、前処理部１の処理結果（最終段の前処理セット１１−ｋにおけるプーリング層１１２−ｋで生成された画像）に基づいて、前処理部１に入力された対象画像ＩＰを認識する装置である。多層パーセプトロン部２は、公知な常套技術で構成される。多層パーセプトロン部２は、前記認識の結果を出力する。
【００１８】
次に、畳み込み層１１１について、より詳しく説明する。図２は、前記畳み込みニューラルネットワーク装置における畳み込み層（データ処理装置）の構成を示す図である。図３は、前記畳み込み層（データ処理装置）におけるプロセッシングエレメントの構成を示す図である。図４は、畳み込みニューラルネットワークにおける畳み込み演算を説明するための図である。図５は、図２に示す構成において、前記畳み込み層（データ処理装置）における１行１列に配置されたプロセッシングエレメントを説明するための図である。図６は、図２に示す構成において、前記畳み込み層（データ処理装置）における１行２列および１行３列に配置されたプロセッシングエレメントを説明するための図である。図７は、図２に示す構成において、前記畳み込み層（データ処理装置）における２行１列に配置されたプロセッシングエレメントを説明するための図である。図８は、図２に示す構成において、前記畳み込み層（データ処理装置）における２行２列に配置されたプロセッシングエレメントを説明するための図である。図９は、図２に示す構成において、前記畳み込み層（データ処理装置）における２行３列に配置されたプロセッシングエレメントを説明するための図である。図１０は、図２に示す構成において、前記畳み込み層（データ処理装置）における２行４列に配置されたプロセッシングエレメントを説明するための図である。図１１は、図２に示す構成において、前記畳み込み層（データ処理装置）における３行１列ないし３行４列、４行１列および４行３列に配置されたプロセッシングエレメントを説明するための図である。図１２は、図２に示す構成において、前記畳み込み層（データ処理装置）における５行１列に配置されたプロセッシングエレメントを説明するための図である。
【００１９】
畳み込み層１１１は、データ処理装置の一例に相当し、祖粒度リコンフィギャラブルアレイ（Ｃｏａｒｓｅ−Ｇｒａｉｎｅｄ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｒｉｃｈｉｔｅｃｔｕｒｅ、ＣＧＲＡ）で構成されている。このＣＧＲＡで構成された畳み込み層１１１は、例えば、図２に示すように、演算器アレイ３と、メモリインターフェース（ＭＥＭＯＲＹ  Ｉ／Ｆ）４と、メモリ（ＭＥＭＯＲＹ）５とを備える。
【００２０】
メモリ５は、所定のデータを記憶する回路であり、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等である。前記所定のデータは、例えば、演算器アレイ３で演算処理されるデータ（本実施形態では対象画像ＩＰおよびカーネルＫＮ等）や、演算器アレイ３における後述のプロセッシングエレメント（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ、ＰＥ）３１のデータ処理内容および各ＰＥ３１間の接続態様それぞれを規定したデータ（コンフィギュレーションデータ）等である。
【００２１】
メモリインターフェース４は、演算器アレイ３とメモリ５とを相互に接続し、演算器アレイ３とメモリ５との間で所定のクロックに従ってデータをやり取り（送受信）するインターフェース回路である。
【００２２】
演算器アレイ３は、２次元アレイ状に配置された複数のプロセッシングエレメント（ＰＥ）３１を備え、これら各ＰＥ３１は、データバスを介してメモリインターフェース４と接続される。各ＰＥ３１は、それぞれ、データを演算する回路であり、演算器、メモリおよびレジスタ等を備えて構成される。
【００２３】
より具体的には、各ＰＥ３１は、それぞれ、例えば図３に示すように、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ、算術論理演算器）６１と、メモリ（ＭＥＭ）６２と、ＥＡＧ（Ｅｆｆｅｃｔｉｖｅ  Ａｄｄｒｅｓｓ  Ｇｅｎｅｒａｔｏｒ）６３と、加算器（ＡＤＤＥＲ）６４と、比較器６５と、切換え器６６と、レジスタ６７とを備える。
【００２４】
ＡＬＵ６１は、３入力１出力で論理演算、加減算および乗算の演算処理を行う回路である。
【００２５】
メモリ６２は、当該ＰＥ３１で処理されるデータを記憶する回路である。
【００２６】
ＥＡＧ６３は、入力に従ってメモリ６２のメモリアドレスを生成する回路であり、例えば、入力値を加算して加算結果をメモリアドレスとして出力する加算器である。ＥＡＧ６３は、本実施形態では、２個のメモリアドレスを生成可能とするために、１対（２個）の第１および第２ＥＡＧ６３−１、６３−２を備える。
【００２７】
加算器６４は、入力値を加算して加算結果を出力する回路である。本実施形態では、加算器６４は、１対（２個）の第１および第２ＥＡＧ６３−１、６３−２に対応して１対（２個）の第１および第２加算器６４−１、６４−２を備える。
【００２８】
比較器６５は、予め設定された所定の比較を行い、その比較結果を出力する回路である。本実施形態では、比較器６５は、第１ないし第３比較器６５−１〜６５−３を備える。第１比較器６５−１は、第１加算器６４−１に対する２個の入力値を生成するために、１組（２個）の第１１および第１２比較器６５−１１、６５−１２を備える。第２比較器６５−２は、第２加算器６４−２に対する２個の入力値を生成するために、１組（２個）の第２１および第２２比較器６５−２１、６５−２２を備える。したがって、本実施形態では、比較器６５は、計５個である。
【００２９】
切換え器６６は、制御信号に応じて複数の入力のうちのいずれかに切り換えて出力する回路である。本実施形態では、切換え器６６は、制御信号に応じて２個の入力のうちの一方に切り換えて前記一方を出力する回路である。本実施形態では、比較器６５は、第１ないし第５切換え器６６−１〜６６−５を備える。第１切換え器６６−１は、第１加算器６４−１に対する２個の入力値を生成するために、１組（２個）の第１１および第１２切換え器６６−１１、６６−１２を備える。第２切換え器６６−２は、第２加算器６４−２に対する２個の入力値を生成するために、１組（２個）の第２１および第２２切換え器６６−２１、６６−２２を備える。第３切換え器６６−３は、１対の第１および第２ＥＡＧ６３−１、６３−２それぞれに対する入力値を生成するために、２個の第３１および第３２切換え器６６−３１、６６−３２を備える。したがって、本実施形態では、切換え器６６は、計８個である。
【００３０】
レジスタ６７は、データを一時的に保持する回路であり、例えばフリップフロップ等を備えて構成される。本実施形態では、レジスタ６７は、第１ないし第５レジスタ６７−１〜６７−５を備える。第４レジスタ６７−４は、１対（２個）の第１および第２ＥＡＧ６３−１、６３−２に対応して１対（２個）の第４１および第４２レジスタ６７−４１、６７−４２を備える。第５レジスタ６７−５は、２個の第５１および第５２レジスタ６７−５１、６７−５２を備える。したがって、本実施形態では、レジスタ６７は、計７個である。
【００３１】
これら各回路を備えるＰＥ３１では、各回路は、基本的には、次のように接続され、入出力を行う。
【００３２】
第１１比較器６５−１１は、第１１切換え器６６−１１に接続され、その比較結果を第１１切換え器６６−１１の制御信号として第１１切換え器６６−１１へ出力する。第１１切換え器６６−１１は、第１加算器６４−１に接続され、第１１比較器６５−１１の比較結果に応じて、外部から入力された２個の入力のうちの一方に切り換えて前記一方を第１加算器６４−１へ出力する。第１２比較器６５−１２は、第１２切換え器６６−１２に接続され、その比較結果を第１２切換え器６６−１２の制御信号として第１２切換え器６６−１２へ出力する。第１２切換え器６６−１２は、第１加算器６４−１に接続され、第１２比較器６５−１２の比較結果に応じて、外部から入力された２個の入力のうちの一方に切り換えて前記一方を第１加算器６４−１へ出力する。第１加算器６４−１は、第１ＥＡＧ６３−１に接続され、第１１および第１２切換え器６６−１１、６６−１２それぞれから入力された各入力値と外部からの外部入力値とを加算して加算結果を第１ＥＡＧ６３−１へ出力する。第３１切換え器６６−３１は、第１ＥＡＧ６３−１に接続され、起動後１度目の計算時のみ外部入力が入力されるようにするＯＮＥＳＨＯＴ信号に応じて、外部および第４１レジスタ６７−４１それぞれから入力された２個の入力のうちの一方に切り換えて前記一方を第１ＥＡＧ６３−１へ出力する。第１ＥＡＧ６３−１は、メモリ６２および第４１レジスタ６７−４１それぞれに接続され、第１加算器６４−１および第３１切換え器６６−３１それぞれから入力された各入力値に基づいてメモリアドレス（第１メモリアドレス）を生成し、その第１メモリアドレスをメモリ６２および第４１レジスタ６７−４１それぞれへ出力する。より具体的には、第１ＥＡＧ６３−１は、第１加算器６４−１の加算結果と第３１切換え器６６−３１で切り換えられて出力された前記一方とを加算して、その加算結果を前記第１メモリアドレスとしてメモリ６２および第４１レジスタ６７−４１それぞれへ出力する。第４１レジスタ６７−４１は、第３１切換え器６６−３１に接続され、その保持している第１メモリアドレスを第３１切換え器６６−３１へ出力する。メモリ６２は、第１ＥＡＧ６３−１で指定された第１メモリアドレスを持つ記憶領域からデータを取り出し、第５１レジスタ６７−５１へ出力する。第５１レジスタ６７−５１は、第１メモリアドレスを持つ記憶領域から取り出された前記データを保持する。
【００３３】
第２１比較器６５−２１は、第２１切換え器６６−２１に接続され、その比較結果を第２１切換え器６６−２１の制御信号として第２１切換え器６６−２１へ出力する。第２１切換え器６６−２１は、第２加算器６４−２に接続され、第２１比較器６５−２１の比較結果に応じて、外部から入力された２個の入力のうちの一方に切り換えて前記一方を第２加算器６４−２へ出力する。第２２比較器６５−２２は、第２２切換え器６６−２２に接続され、その比較結果を第２２切換え器６６−２２の制御信号として第２２切換え器６６−２２へ出力する。第２２切換え器６６−２２は、第２加算器６４−２に接続され、第２２比較器６５−２２の比較結果に応じて、外部から入力された２個の入力のうちの一方に切り換えて前記一方を第２加算器６４−２へ出力する。第２加算器６４−２は、第２ＥＡＧ６３−２に接続され、第２１および第２２切換え器６６−２１、６６−２２それぞれから入力された各入力値と外部からの外部入力値とを加算して加算結果を第２ＥＡＧ６３−２へ出力する。第３２切換え器６６−３２は、第２ＥＡＧ６３−２に接続され、起動後１度目の計算時のみ外部入力が入力されるようにするＯＮＥＳＨＯＴ信号に応じて、外部および第４２レジスタ６７−４２それぞれから入力された２個の入力のうちの一方に切り換えて前記一方を第２ＥＡＧ６３−２へ出力する。第２ＥＡＧ６３−２は、メモリ６２および第４２レジスタ６７−４２それぞれに接続され、第２加算器６４−２および第３２切換え器６６−３２それぞれから入力された各入力値に基づいてメモリアドレス（第２メモリアドレス）を生成し、その第２メモリアドレスをメモリ６２および第４２レジスタ６７−４２それぞれへ出力する。より具体的には、第２ＥＡＧ６３−２は、第２加算器６４−２の加算結果と第３２切換え器６６−３２で切り換えられて出力された前記一方とを加算して、その加算結果を前記第２メモリアドレスとしてメモリ６２および第４２レジスタ６７−４２それぞれへ出力する。第４２レジスタ６７−４２は、第３２切換え器６６−３２に接続され、その保持している第２メモリアドレスを第３２切換え器６６−３２へ出力する。メモリ６２は、第２ＥＡＧ６３−２で指定された第２メモリアドレスを持つ記憶領域からデータを取り出し、第５２レジスタ６７−５２へ出力する。第５２レジスタ６７−５２は、第２メモリアドレスを持つ記憶領域から取り出された前記データを保持する。
【００３４】
このような動作がマシンサイクルごとに実行され、第１および第２メモリアドレスが生成される。
【００３５】
第３比較器６５−３は、第４切換え器６６−４に接続され、その比較結果を第４切換え器６６−４へ出力する。第４切換え器６６−４は、第５加算器６４−５に接続され、コンフィグレーションデータに応じて、第３比較器６５−３の比較結果および起動後１度目の計算時のみ外部入力が入力されるようにするＯＮＥＳＨＯＴ信号のうちの一方に切り換えて前記一方を第５切換え器６６−５の制御信号として第５切換え器６６−５へ出力する。第５切換え器６６−５は、ＡＬＵ６１に接続され、第４切換え器６６−４で切り換えられて出力された前記一方に応じて、外部および第１レジスタ６７−１それぞれから入力された２個の入力のうちの一方に切り換えて前記一方をＡＬＵ６１へ出力する。ＡＬＵ６１は、第１および第３レジスタ６７−１、６７−３ならびにメモリ６２それぞれに接続され、第５切換え器６６−５で切り換えられて出力された前記一方と、外部から入力された２個の各入力とに基づいて、前記演算処理を行い、その演算結果を第１および第３レジスタ６７−１、６７−３ならびにメモリ６２それぞれへ出力する。第１レジスタ６７−１は、第５切換え器６６−５に接続され、その保持している演算結果を第５切換え器６６−５へ出力する。
【００３６】
このような動作がマシンサイクルごとに実行され、ＡＬＵ６１で演算処理される。
【００３７】
ここで、ＰＥ３１におけるＡＬＵ６１、第１および第２ＥＡＧ６３−１、６３−２、第１および第２加算器６４−１、６４−２、ならびに、第１ないし第５レジスタ６７−１、６７−２、６７−３、６７−４（６７−４１、６７−４２）、６７−５（６７−５１、６７−５２）は、外部からＰＥ３１に所定のｒｅａｄｙ信号が与えられ、このｒｅａｄｙ信号がＨｉレベル（例えば１）の場合に作動し、前記ｒｅａｄｙ信号がＬｏｗレベル（例えば０）の場合に停止する。
【００３８】
このようなＰＥ３１を複数備えた演算器アレイ３は、メモリ５に格納された、所望のデータ処理（用途）に応じたコンフィギュレーションデータに従って各ＰＥ３１のデータ処理内容と各ＰＥ間の接続態様とが設定される。したがって、各ＰＥ３１における各ＡＬＵ６１で行われる演算処理と各ＥＡＧ６３−１、６３−２とで実行されるメモリアクセスとの各内容は、それぞれ、メモリ５に記憶された前記コンフィギュレーションデータで規定される。一例として、本実施形態では、前記コンフィギュレーションデータは、畳み込み演算を行うように作成されている。
【００３９】
この畳み込み演算は、数学的には、対象の関数と畳み込む関数との積の積分によって表されるが、画像のフィルタ処理（二次元の畳み込み演算）では、掛け算と足し算とで表される。より具体的には、図４に示すように、対象画像ＩＰから、カーネルＫＮのサイズに一致した範囲内における各画素の各画素値が取り出され、この取り出された各画素の各画素値とカーネルＫＮの各要素（各フィルタ係数）とが同位置同士で乗算され、各乗算結果が加算され、この加算結果が畳み込み演算で生成される新たな画像（特徴マップ）ＦＭにおける１画素の画素値とされる。対象画像ＩＰにおける例えば左上を基準とする場合、このような処理が、対象画像ＩＰにおける１行目１列目から行に沿って順次に列をずらしながら実行され、カーネルＫＮのサイズに応じた最終列まで到達すると、次行に移行されて、同様に、１列目から行に沿って順次に列をずらしながら実行され、カーネルＫＮのサイズに応じた最終列まで到達すると、次行に移行されて、以下、同様に、カーネルＫＮのサイズに応じた最終行まで実行される。なお、行に沿ったシフトは、１列ずつであって良く、また、１または複数の列を飛ばした飛び飛びであって良い。列に沿ったシフトは、１行ずつであって良く、また、１または複数の行を飛ばした飛び飛びであって良い。一例として、対象画像ＩＰのサイズがＩＨ×ＩＷであり、カーネルＫＮのサイズがＫＨ×ＫＷ＝２×２であり、行に沿ったシフトが１列ずつであり、列に沿ったシフトが１行ずつである場合、対象画像ＩＰから、カーネルＫＮのサイズに一致した２×２内における各画素の各画素値が取り出され、この取り出された各画素における１行１列の画素値とカーネルＫＮにおける１行１列のフィルタ係数が乗算され、前記取り出された各画素における１行２列の画素値とカーネルＫＮにおける１行２列のフィルタ係数が乗算され、前記取り出された各画素における２行１列の画素値とカーネルＫＮにおける２行１列のフィルタ係数が乗算され、前記取り出された各画素における２行２列の画素値とカーネルＫＮにおける２行２列のフィルタ係数が乗算され、これら４個の各乗算結果が加算され、この加算結果が特徴マップＦＭにおける１画素の画素値とされる。このような処理が、対象画像ＩＰにおける１行目１列目から行に沿って順次に列を１列ずらしながら実行され、（ＩＷ−１）列まで到達すると、次行に移行されて、同様に、１列目から行に沿って順次に列を１列ずらしながら実行され、（ＩＷ−１）列まで到達すると、次行に移行されて、以下、同様に、（ＩＨ−１）行まで実行される。このような畳み込み演算によって、ＯＨ行ＯＷ列の特徴マップＦＭが生成される。一例として、対象画像が１０×１０である場合（ＩＨ＝１０、ＩＷ＝１０）、２×２のカーネルＫＮ（ＫＨ＝２、ＫＷ＝２）では、特徴マップＦＭは、９×９となる（ＯＨ＝９、ＯＷ＝９）。
【００４０】
ＣＮＮでは、このような畳み込み演算が予め設定された個数のカーネルＫＮだけ実行され、カーネルＫＮの個数と同数ＯＣの特徴マップＦＭが生成される。一例として、図４に示すように、カーネルＫＮが３個の第１ないし第３カーネルＫＮ−１〜ＫＮ−３である場合、３個の第１ないし第３特徴マップＦＭ−１〜ＦＭ−３が生成される（ＯＣ＝３）。このようなＣＮＮの畳み込み演算は、コードで表すと次のように多重ループで表される。
【００４１】
【数１】
2018135088.tif 000003
【００４２】
すなわち、ＣＮＮの畳み込み演算は、３重のループ（３重のＦｏｒ文）で構成される。
【００４３】
この３重のループにおける最内のループ（第１ループ、ｘループ）は、対象画像ＩＰから、カーネルＫＮのサイズに一致した範囲内における各画素の各画素値を取り出し、この取り出した各画素の各画素値とカーネルＫＮの各フィルタ係数とを同位置同士で乗算し、各乗算結果を加算する処理を、１列目から行に沿って順次に列を１列ずつずらしながら、カーネルＫＮのサイズに応じた最終列まで実行する処理を表している。この第１ループは、制御変数がｘであり（ｘは整数）、対象画像ＩＰがメモリアドレス０番地から行ごとに記憶される場合、ｘ＝０から、ｘ＜ＯＷまで繰り返され、このため、ｘループと適宜に呼称される。
【００４４】
前記第１ループ（ｘループ）の外側のループ（第２ループ、ｃループ）は、第１ループの処理を各カーネルＫＮごとに実行する処理を表している。この第２ループは、制御変数がｃであり（ｃは整数）、ｃ＝０から、ｃ＜ＯＣまで繰り返され、このため、ｃループと適宜に呼称される。
【００４５】
前記第２ループ（ｃループ）の外側のループ（第３ループ、ｙループ）は、第１ループの処理を、１行目から列に沿って順次に行を１行ずつずらしながら、カーネルＫＮのサイズに応じた最終行まで実行する処理を表している。この第３ループは、制御変数がｙであり（ｙは整数）、ｙ＝０から、ｙ＜ＯＨまで繰り返され、このため、ｙループと適宜に呼称される。
【００４６】
２×２のカーネルＫＮを用いた畳み込み演算は、上述のようにコードで表されるので、畳み込み層１１１の演算器アレイ３は、５×４の２０個のＰＥ３１−１１〜３１−５４を備えて構成される。上述のｒｅａｄｙ信号は、各行ごとに与えられ、本実施形態では、５個の、１行目用のＳｔａｇｅ０＿ｒｅａｄｙ信号、２行目用のＳｔａｇｅ１＿ｒｅａｄｙ信号、３行目用のＳｔａｇｅ２＿ｒｅａｄｙ信号、４行目用のＳｔａｇｅ３＿ｒｅａｄｙ信号、および、５行目用のＳｔａｇｅ４＿ｒｅａｄｙ信号を備えて構成される。
【００４７】
右上を基準に１行目（１段目の行）のＰＥ３１−１１〜３１−１４は、各ループの制御変数を生成する回路となり、前記コンフィギュレーションデータは、１行目のＰＥ３１−１１〜３１−１４が各ループの制御変数を生成する回路となるように作成される。
【００４８】
より具体的には、本実施形態では、１行１列のＰＥ３１−１１は、ｙループの制御変数ｙを生成する回路となり、１行２列のＰＥ３１−１２は、ｃループの制御変数ｃを生成する回路となり、１行３列のＰＥ３１−１３は、ｘループの制御変数ｘを生成する回路となる。なお、１行４列のＰＥ３１−１４は、本実施形態では、使用されていない。ＰＥ３１−１１は、図５に示すように、ＡＬＵ６１、第５切換え器６６−５、ならびに、第１および第３レジスタ６７−１、６７−３を備えて構成され、第５切換え器６６−５の制御信号として、起動後１度目の計算時のみ外部入力が入力されるようにするＯＮＥＳＨＯＴ信号が第５切換え器６６−５に入力される点を除き、図３を用いて説明した上述と同様に各回路が接続され、入出力される。ＰＥ３１−１２、３１−１３は、それぞれ、図６に示すように、ＡＬＵ６１、第３比較器６５−３、第５切換え器６６−５、ならびに、第１および第３レジスタ６７−１、６７−３を備えて構成され、第３比較器６５−３の比較結果が第５切換え器６６−５の制御信号として第５切換え器６６−５へ出力する点を除き、図３を用いて説明した上述と同様に各回路が接続され、入出力される。
【００４９】
制御変数ｙを生成する１行１列のＰＥ３１−１１では、第５切換え器６６−５には、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果、および、設定値として特徴マップＦＭの行数（垂直方向の画素数）ＯＨとカーネルＫＮの個数ＯＣと特徴マップＦＭの列数（水平方向の画素数）ＯＷとの乗算結果（ＯＨ×ＯＣ×ＯＷ）が入力され、第５切換え器６６−５は、畳み込み演算の開始時に、初期値として前記設定値の乗算結果（ＯＨ×ＯＣ×ＯＷ）をＡＬＵ６１へ出力し、次以降のマシンサイクルでは、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果をＡＬＵ６１へ出力する。ＡＬＵ６１には、第５切換え器６６−５の出力と−１とが入力され、ＡＬＵ６１は、これら第５切換え器６６−５の出力と−１とを加算し（すなわち、第５切換え器６６−５の出力から１を減算し）、その加算結果を第１および第３レジスタ６７−１、６７−３それぞれへ出力する。ＰＥ３１−１１は、このように再構成され、マシンサイクルごとに動作することで、初期値ＯＨ×ＯＣ×ＯＷからマシンサイクルごとに１ずつダウンカウントする。これによってＰＥ３１−１１は、制御変数ｙを生成する。
【００５０】
制御変数ｃを生成する１行２列のＰＥ３１−１２では、第３比較器６５−３は、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果と０とを比較し、その比較結果を第５切換え器６６−５の制御信号として第５切換え器６６−５へ出力する。第５切換え器６６−５には、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果、および、設定値としてカーネルＫＮの個数ＯＣと特徴マップＦＭの列数ＯＷとの乗算結果（ＯＣ×ＯＷ）が入力され、第５切換え器６６−５は、畳み込み演算の開始時に、初期値として前記設定値の乗算結果（ＯＣ×ＯＷ）をＡＬＵ６１へ出力し、次以降のマシンサイクルでは、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果と０とが等しいと言う第３比較器６５−３の比較結果となるまで、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果をＡＬＵ６１へ出力する。ＡＬＵ６１には、第５切換え器６６−５の出力と−１とが入力され、ＡＬＵ６１は、これら第５切換え器６６−５の出力と−１とを加算し（すなわち、第５切換え器６６−５の出力から１を減算し）、その加算結果を第１および第３レジスタ６７−１、６７−３それぞれへ出力する。ＰＥ３１−１２は、このように再構成され、マシンサイクルごとに動作することで、初期値（ＯＣ×ＯＷ）からマシンサイクルごとに１ずつダウンカウントし、そして、ダウンカウントの結果が０になるたびに、前記設定値の乗算結果（ＯＣ×ＯＷ）を再びセットし、再びダウンカウントすることを繰り返す。この再セットおよび再ダウンカウントの繰り返し回数は、初回のダウンカウントが有るので、（ＯＨ−１）である。すなわち、ＰＥ３１−１２は、（ＯＣ×ＯＷ）から０までのダウンカウントの動作をＯＨ回実行する。これによってＰＥ３１−１２は、制御変数ｃを生成する。
【００５１】
制御変数ｘを生成する１行３列のＰＥ３１−１３では、第３比較器６５−３は、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果と０とを比較し、その比較結果を第５切換え器６６−５の制御信号として第５切換え器６６−５へ出力する。第５切換え器６６−５には、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果、および、設定値として特徴マップＦＭの列数ＯＷが入力され、第５切換え器６６−５は、畳み込み演算の開始時に、初期値として前記設定値の列数ＯＷをＡＬＵ６１へ出力し、次以降のマシンサイクルでは、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果と０とが等しいと言う第３比較器６５−３の比較結果となるまで、第１レジスタ６７−１に保持されているＡＬＵ６１の演算結果をＡＬＵ６１へ出力する。ＡＬＵ６１には、第５切換え器６６−５の出力と−１とが入力され、ＡＬＵ６１は、これら第５切換え器６６−５の出力と−１とを加算し（すなわち、第５切換え器６６−５の出力から１を減算し）、その加算結果を第１および第３レジスタ６７−１、６７−３それぞれへ出力する。ＰＥ３１−１３は、このように再構成され、マシンサイクルごとに動作することで、初期値ＯＷからマシンサイクルごとに１ずつダウンカウントし、そして、ダウンカウントの結果が０になるたびに、前記設定値の列数ＯＷを再びセットし、再びダウンカウントすることを繰り返す。この再セットおよび再ダウンカウントの繰り返し回数は、初回のダウンカウントが有るので、（ＯＨ×ＯＣ−１）である。すなわち、ＰＥ３１−１３は、ＯＷから０までのダウンカウントの動作をＯＨ×ＯＣ回実行する。これによってＰＥ３１−１３は、制御変数ｘを生成する。
【００５２】
１行目（１段目の行）のＰＥ３１−１１〜３１−１４は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
【００５３】
右上を基準に２行目（２段目の行）のＰＥ３１−２１〜３１−２４は、制御変数ｙで指定された当該行において、制御変数ｘで指定されることによって行に沿って１列ずつシフトしながら、対象画像ＩＰから、カーネルＫＮのサイズに一致した範囲内における各画素の各画素値を取り出し、制御変数ｃで指定されたカーネルＫＮにおける各要素（各フィルタ係数）を取り出す回路となり、前記コンフィギュレーションデータは、２行目のＰＥ３１−２１〜３１−２４が前記各画素値を取り出し、前記各フィルタ係数を取り出す回路となるように作成される。ＣＮＮの畳み込み演算では、上述したように、対象画像ＩＰに対しカーネルＫＮを、例えばラスタースキャンの如くつづら折りにシフトする必要があるため、メモリアドレスを所定の数値範囲では連続的に変化させつつ互いに隣接する数値範囲間では非連続に変化させる必要がある。このため、２行目のＰＥ３１−２１〜３１−２４は、本実施形態の特徴的な回路構成を有し、上述のように連続的に変化する一方で非連続で変化するメモリアドレスを順次に続けて生成することによって、メモリアドレス０番地から行ごとに記憶されている対象画像ＩＰの前記各画素値を取り出し、メモリアドレス０番地から行ごとにそしてカーネルＫＮごとに記憶されている各カーネルＫＮの前記各フィルタ係数を取り出している。
【００５４】
より具体的には、本実施形態では、２行１列のＰＥ３１−２１は、対象画像ＩＰから、制御変数ｙおよび制御変数ｘに応じた範囲であって、カーネルＫＮのサイズ（２×２）に一致した前記範囲内の各画素における１行１列の画素の画素値ｉ００および１行２列の画素の画素値ｉ０１を取り出す回路となる。２行２列のＰＥ３１−２２は、対象画像ＩＰから、制御変数ｙおよび制御変数ｘに応じた範囲であって、カーネルＫＮのサイズ（２×２）に一致した前記範囲内の各画素における２行１列の画素の画素値ｉ１０および２行２列の画素の画素値ｉ１１を取り出す回路となる。２行３列のＰＥ３１−２３は、制御変数ｃに応じたカーネルＫＮにおける１行１列のフィルタ係数ｋ００および１行２列のフィルタ係数ｋ０１を取り出す回路となる。２行４列のＰＥ３１−２４は、制御変数ｃに応じたカーネルＫＮにおける２行１列のフィルタ係数ｋ１０および２行２列のフィルタ係数ｋ１１を取り出す回路となる。これらＰＥ３１−２１〜３１−２４は、図７ないし図１０それぞれに示すように、メモリ６２、第１および第２ＥＡＧ６３−１、６３−２、第１および第２加算器６４−１、６４−２、第１１、第１２、第２１および第２２比較器６５−１１、６５−１２、６５−２１、６５−２２、第１１、第１２、第２１、第２２、第３１および第３２切換え器６６−１１、６６−１２、６６−２１、６６−２２、６６−３１、６６−３２、ならびに、第４１、第４２、第５１および第５２レジスタ６７−４１、６７−４２、６７−５１、６７−５２を備えて構成され、図３を用いて説明した上述と同様に各回路が接続され、入出力される。
【００５５】
２行１列のＰＥ３１−２１では、メモリ６２には、メモリインターフェース４を介してメモリ５から、対象画像ＩＰのデータが読み込まれ、メモリアドレス０番地から行ごとに格納される。第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２は、前記範囲内の各画素における１行１列の画素の画素値ｉ００を、メモリ６２から取り出すメモリアドレスｉ００＿ａｄｒを生成する回路を構成する。
【００５６】
より詳しくは、２行１列のＰＥ３１−２１において、第２１比較器６５−２１は、１行３列のＰＥ３１−１３における第３レジスタ６７−３に接続され、前記ＰＥ３１−１３の第３レジスタ６７−３に保持されているＡＬＵ６１の演算結果（すなわち、制御変数ｘ）が入力される。図７に示すように、第２１比較器６５−２１は、前記ＰＥ３１−１３の第３レジスタ６７−３から入力された制御変数ｘと（ＯＷ−１）とを比較し、その比較結果を第２１切換え器６６−２１の制御信号として第２１切換え器６６−２１へ出力する。第２１切換え器６６−２１には、１行１列のメモリアドレスｉ００＿ａｄｒを生成するために、０と−９とが入力され、第２１切換え器６６−２１は、制御変数ｘと（ＯＷ−１）とが等しくないと言う第２１比較器６５−２１の比較結果である場合、０を第２加算器６４−２へ出力し、制御変数ｘと（ＯＷ−１）とが等しいと言う第２１比較器６５−２１の比較結果である場合、−９を第２加算器６４−２へ出力する。
【００５７】
２行１列のＰＥ３１−２１において、第２２比較器６５−２２は、１行２列のＰＥ３１−１２における第３レジスタ６７−３に接続され、前記ＰＥ３１−１２の第３レジスタ６７−３に保持されているＡＬＵ６１の演算結果（すなわち、制御変数ｃ）が入力される。第２２比較器６５−２２は、前記ＰＥ３１−１２の第３レジスタ６７−３から入力された制御変数ｃと（ＯＣ×ＯＷ−１）とを比較し、その比較結果を第２２切換え器６６−２２の制御信号として第２２切換え器６６−２２へ出力する。第２２切換え器６６−２２には、１行１列のメモリアドレスｉ００＿ａｄｒを生成するために、０と１０とが入力され、第２２切換え器６６−２２は、制御変数ｃと（ＯＣ×ＯＷ−１）とが等しくないと言う第２２比較器６５−２２の比較結果である場合、０を第２加算器６４−２へ出力し、制御変数ｃと（ＯＣ×ＯＷ−１）とが等しいと言う第２２比較器６５−２２の比較結果である場合、１０を第２加算器６４−２へ出力する。
【００５８】
２行１列のＰＥ３１−２１において、第２加算器６４−２は、第２１切換え器６６−２１の出力と第２２切換器の出力との加算結果に、行方向に１列ずつシフトさせるために、さらに１を加算し、その加算結果を第２ＥＡＧ６３−２へ出力する。第４２レジスタ６７−４２は、第２ＥＡＧ６３−２で生成されたメモリアドレスｉ００＿ａｄｒを保持し、第３２切換え器６６−３２には、この第４２レジスタ６７−４２で保持されているメモリアドレスｉ００＿ａｄｒと、初期値として−２とが入力され、第３２切換え器６６−３２は、計算開始時にＯＮＥＳＨＯＴ信号で選択された−２を初期値として第２ＥＡＧ６３−２へ出力し、次以降のマシンサイクルでは、第４２レジスタ６７−４２に保持されている第２ＥＡＧ６３−２の演算結果を第２ＥＡＧ６３−２へ出力する。第２ＥＡＧ６３−２は、第２加算器６４−２の出力と第３２切換え器６６−３２の出力とを加算し、メモリアドレスｉ００＿ａｄｒを生成し、この生成したメモリアドレスｉ００＿ａｄｒを第４２レジスタ６７−４２およびメモリ６２それぞれへ出力する。メモリ６２は、第２ＥＡＧ６３−２で指定されたメモリアドレスｉ００＿ａｄｒを持つ記憶領域からデータ（すなわち、画素値ｉ００）を取り出し、第５２レジスタ６７−５２へ出力する。第５２レジスタ６７−５２は、メモリアドレスｉ００＿ａｄｒを持つ記憶領域から取り出された画素値ｉ００を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｉ００＿ａｄｒが順次に生成され、第５２レジスタ６７−５２には、前記メモリアドレスｉ００＿ａｄｒを持つ記憶領域から順次に取り出された画素値ｉ００が順次に保持される。
【００５９】
なお、上述では、第２１切換え器６６−２１に入力される値は、０と−９であって、第２２切換え器６６−２２に入力される値は、０と１０であったが、これら各値は、対象画像ＩＰのサイズＩＨ×ＩＷおよびカーネルＫＮのサイズＫＨ×ＫＷとに依存する。一般には、メモリアドレス０番地から行ごとに対象画像ＩＰが記憶される場合、第２１切換え器６６−２１に入力される値は、０と−（ＩＷ−ＫＷ＋１）とであり、第２２切換え器６６−２２に入力される値は、０とＩＷとである。第３２切換え器６６−３２に設定される初期値は、−２であったが、この値は、カーネルＫＮのサイズＫＨ×ＫＷと生成すべきメモリアドレスの行数および列数とに依存する。一般には、第３２切換え器６６−３２に設定される初期値は、−ＫＨ＋（列番号−１）＋（行番号−１）×ＩＷで表される。第１１切換え器６６−１１、第１２切換え器６６−１２および第３１切換え器６６−３１や、次に説明するＰＥ３１−２２においても、前記各値は、同様に一般化できる。
【００６０】
２行１列のＰＥ３１−２１において、第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、前記範囲内の各画素における１行２列の画素の画素値ｉ０１を、メモリ６２から取り出すメモリアドレスｉ０１＿ａｄｒを生成する回路を構成する。これら第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、図７に示すように、第３２切換え器６６−３２の初期値−２に代え初期値−１が第３１切換え器６６−３１にセットされる点を除き、それぞれ、上述した第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２と同様であるので、その説明を省略する。そして、メモリ６２は、第１ＥＡＧ６３−１で指定されたメモリアドレスｉ０１＿ａｄｒを持つ記憶領域からデータ（すなわち、画素値ｉ０１）を取り出し、第５１レジスタ６７−５１へ出力する。第５１レジスタ６７−５１は、メモリアドレスｉ０１＿ａｄｒを持つ記憶領域から取り出された画素値ｉ０１を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｉ０１＿ａｄｒが順次に生成され、第５１レジスタ６７−５１には、前記メモリアドレスｉ０１＿ａｄｒを持つ記憶領域から順次に取り出された画素値ｉ０１が順次に保持される。
【００６１】
２行２列のＰＥ３１−２２では、メモリ６２には、メモリインターフェース４を介してメモリ５から、対象画像ＩＰのデータが読み込まれ、メモリアドレス０番地から行ごとに格納される。第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２は、前記範囲内の各画素における２行１列の画素の画素値ｉ１０を、メモリ６２から取り出すメモリアドレスｉ１０＿ａｄｒを生成する回路を構成する。２行２列のＰＥ３１−２２における第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２は、図８に示すように、２行１列のＰＥ３１−２１における第３２切換え器６６−３２の初期値−２に代え初期値８が当該ＰＥ３１−２２の第３２切換え器６６−３２にセットされる点を除き、それぞれ、上述した２行１列のＰＥ３１−２１における第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２と同様であるので、その説明を省略する。そして、メモリ６２は、第２ＥＡＧ６３−２で指定されたメモリアドレスｉ１０＿ａｄｒを持つ記憶領域からデータ（すなわち、画素値ｉ１０）を取り出し、第５２レジスタ６７−５２へ出力する。第５２レジスタ６７−５２は、メモリアドレスｉ１０＿ａｄｒを持つ記憶領域から取り出された画素値ｉ１０を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｉ１０＿ａｄｒが順次に生成され、第５２レジスタ６７−５２には、前記メモリアドレスｉ１０＿ａｄｒを持つ記憶領域から順次に取り出された画素値ｉ１０が順次に保持される。
【００６２】
２行２列のＰＥ３１−２２において、第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、前記範囲内の各画素における２行２列の画素の画素値ｉ１１を、メモリ６２から取り出すメモリアドレスｉ１１＿ａｄｒを生成する回路を構成する。２行２列のＰＥ３１−２２における第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、図８に示すように、前記２行１列のＰＥ３１−２１における第３２切換え器６６−３２の初期値−２に代え初期値９が当該ＰＥ３１−３２における第３１切換え器６６−３１にセットされる点を除き、それぞれ、上述した２行１列のＰＥ３１−２１における第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２と同様であるので、その説明を省略する。そして、メモリ６２は、第１ＥＡＧ６３−１で指定されたメモリアドレスｉ１１＿ａｄｒを持つ記憶領域からデータ（すなわち、画素値ｉ１１）を取り出し、第５１レジスタ６７−５１へ出力する。第５１レジスタ６７−５１は、メモリアドレスｉ１１＿ａｄｒを持つ記憶領域から取り出された画素値ｉ１１を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｉ１１＿ａｄｒが順次に生成され、第５１レジスタ６７−５１には、前記メモリアドレスｉ１１＿ａｄｒを持つ記憶領域から順次に取り出された画素値ｉ１１が順次に保持される。
【００６３】
２行３列のＰＥ３１−２３では、メモリ６２には、メモリインターフェース４を介してメモリ５から、カーネルＫＮのデータが読み込まれ、メモリアドレス０番地から行ごとにそしてカーネルごとに格納される。第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２は、カーネルＫＮにおける１行１列のフィルタ係数ｋ００を、メモリ６２から取り出すメモリアドレスｋ００＿ａｄｒを生成する回路を構成する。
【００６４】
より詳しくは、２行３列のＰＥ３１−２３において、第２１比較器６５−２１は、１行３列のＰＥ３１−１３における第３レジスタ６７−３に接続され、前記ＰＥ３１−１３の第３レジスタ６７−３に保持されているＡＬＵ６１の演算結果（すなわち、制御変数ｘ）が入力される。図９に示すように、第２１比較器６５−２１は、前記ＰＥ３１−１３の第３レジスタ６７−３から入力された制御変数ｘと（ＯＷ−１）とを比較し、その比較結果を第２１切換え器６６−２１の制御信号として第２１切換え器６６−２１へ出力する。第２１切換え器６６−２１には、１行１列のメモリアドレスｋ００＿ａｄｒを生成するために、０と４とが入力され、第２１切換え器６６−２１は、制御変数ｘと（ＯＷ−１）とが等しくないと言う第２１比較器６５−２１の比較結果である場合、０を第２加算器６４−２へ出力し、制御変数ｘと（ＯＷ−１）とが等しいと言う第２１比較器６５−２１の比較結果である場合、４を第２加算器６４−２へ出力する。
【００６５】
２行３列のＰＥ３１−２３において、第２２比較器６５−２２は、１行２列のＰＥ３１−１２における第３レジスタ６７−３に接続され、前記ＰＥ３１−１２の第３レジスタ６７−３に保持されているＡＬＵ６１の演算結果（すなわち、制御変数ｃ）が入力される。第２２比較器６５−２２は、前記ＰＥ３１−１２の第３レジスタ６７−３から入力された制御変数ｃと（ＯＣ×ＯＷ−１）とを比較し、その比較結果を第２２切換え器６６−２２の制御信号として第２２切換え器６６−２２へ出力する。第２２切換え器６６−２２には、１行１列のメモリアドレスｋ００＿ａｄｒを生成するために、０と−１２とが入力され、第２２切換え器６６−２２は、制御変数ｃと（ＯＣ×ＯＷ−１）とが等しくないと言う第２２比較器６５−２２の比較結果である場合、０を第２加算器６４−２へ出力し、制御変数ｃと（ＯＣ×ＯＷ−１）とが等しいと言う第２２比較器６５−２２の比較結果である場合、−１２を第２加算器６４−２へ出力する。
【００６６】
２行３列のＰＥ３１−２３において、第２加算器６４−２は、第２１切換え器６６−２１の出力と第２２切換器の出力との加算結果を第２ＥＡＧ６３−２へ出力する。第４２レジスタ６７−４２は、第２ＥＡＧ６３−２で生成されたメモリアドレスｋ００＿ａｄｒを保持し、第３２切換え器６６−３２には、この第４２レジスタ６７−４２で保持されているメモリアドレスｋ００＿ａｄｒと、初期値として８が入力され、第３２切換え器６６−３２は、ＯＮＥＳＨＯＴ信号で選択された８を初期値として第２ＥＡＧ６３−２へ出力し、次以降のマシンサイクルでは、第４２レジスタ６７−４２に保持されている第２ＥＡＧ６３−２の演算結果を第２ＥＡＧ６３−２へ出力する。第２ＥＡＧ６３−２は、第２加算器６４−２の出力と第３２切換え器６６−３２の出力とを加算してメモリアドレスｋ００＿ａｄｒを生成し、この生成したメモリアドレスｋ００＿ａｄｒを第４２レジスタ６７−４２およびメモリ６２それぞれへ出力する。メモリ６２は、第２ＥＡＧ６３−２で指定されたメモリアドレスｋ００＿ａｄｒを持つ記憶領域からデータ（すなわち、フィルタ係数ｋ００）を取り出し、第５２レジスタ６７−５２へ出力する。第５２レジスタ６７−５２は、メモリアドレスｋ００＿ａｄｒを持つ記憶領域から取り出されたフィルタ係数ｋ００を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｋ００＿ａｄｒが順次に生成され、第５２レジスタ６７−５２には、前記メモリアドレスｋ００＿ａｄｒを持つ記憶領域から順次に取り出されたフィルタ係数ｋ００が順次に保持される。
【００６７】
なお、上述では、第２１切換え器６６−２１に入力される値は、０と４であって、第２２切換え器６６−２２に入力される値は、０と−１２であったが、これら各値は、カーネルＫＮのサイズＫＨ×ＫＷとカーネルＫＮの個数（ＯＣ）とに依存する。一般には、メモリアドレス０番地から行ごとにそしてカーネルＫＮごとに各カーネルＫＮが記憶される場合、第２１切換え器６６−２１に入力される値は、０とＫＨ×ＫＷとであり、第２２切換え器６６−２２に入力される値は、０と−ＫＨ×ＫＷ×ＯＣとである。第３２切換え器６６−３２に設定される初期値は、８であったが、この値は、カーネルＫＮのサイズＫＨ×ＫＷと生成すべきメモリアドレスの行数および列数とに依存する。一般には、第３１切換え器６６−３１に設定される初期値は、（ＫＨ×ＫＷ）×（−１＋ＯＣ）＋（列番号−１）＋（行番号−１）×ＫＷで表される。第１１切換え器６６−１１、第１２切換え器６６−１２および第３１切換え器６６−３１や、次に説明するＰＥ３１−２４においても、前記各値は、同様に一般化できる。
【００６８】
２行３列のＰＥ３１−２３において、第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、カーネルＫＮにおける１行２列のフィルタ係数ｋ０１を、メモリ６２から取り出すメモリアドレスｋ０１＿ａｄｒを生成する回路を構成する。これら第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、図９に示すように、第３２切換え器６６−３２の初期値８に代え初期値９が第３１切換え器６６−３１にセットされる点を除き、それぞれ、上述した第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２と同様であるので、その説明を省略する。そして、メモリ６２は、第１ＥＡＧ６３−１で指定されたメモリアドレスｋ０１＿ａｄｒを持つ記憶領域からデータ（すなわち、フィルタ係数ｋ０１）を取り出し、第５１レジスタ６７−５１へ出力する。第５１レジスタ６７−５１は、メモリアドレスｋ０１＿ａｄｒを持つ記憶領域から取り出されたフィルタ係数ｋ０１を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｋ０１＿ａｄｒが順次に生成され、第５１レジスタ６７−５１には、前記メモリアドレスｋ０１＿ａｄｒを持つ記憶領域から順次に取り出されたフィルタ係数ｋ０１が順次に保持される。
【００６９】
２行４列のＰＥ３１−２４では、メモリ６２には、メモリインターフェース４を介してメモリ５から、カーネルＫＮのデータが読み込まれ、メモリアドレス０番地から行ごとにそしてカーネルごとに格納される。第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２は、カーネルＫＮにおける２行１列のフィルタ係数ｋ１０を、メモリ６２から取り出すメモリアドレスｋ１０＿ａｄｒを生成する回路を構成する。２行４列のＰＥ３１−２４における第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２は、図１０に示すように、２行３列のＰＥ３１−２３における第３２切換え器６６−３２の初期値８に代え初期値１０が当該ＰＥ３１−２４の第３２切換え器６６−３２にセットされる点を除き、それぞれ、上述した２行３列のＰＥ３１−２３における第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２と同様であるので、その説明を省略する。そして、メモリ６２は、第２ＥＡＧ６３−２で指定されたメモリアドレスｋ１０＿ａｄｒを持つ記憶領域からデータ（すなわち、フィルタ係数ｋ１０）を取り出し、第５２レジスタ６７−５２へ出力する。第５２レジスタ６７−５２は、メモリアドレスｋ１０＿ａｄｒを持つ記憶領域から取り出されたフィルタ係数ｋ１０を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｋ１０＿ａｄｒが順次に生成され、第５２レジスタ６７−５２には、前記メモリアドレスｋ１０＿ａｄｒを持つ記憶領域から順次に取り出されたフィルタ係数ｋ１０が順次に保持される。
【００７０】
２行４列のＰＥ３１−２４において、第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、カーネルＫＮにおける２行２列のフィルタ係数ｋ１１を、メモリ６２から取り出すメモリアドレスｋｉ１１＿ａｄｒを生成する回路を構成する。２行４列のＰＥ３１−２４における第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、図１０に示すように、前記２行３列のＰＥ３１−２３における第３２切換え器６６−３２の初期値８に代え初期値１１が当該ＰＥ３１−３４における第３１切換え器６６−３１にセットされる点を除き、それぞれ、上述した２行３列のＰＥ３１−２３における第２ＥＡＧ６３−２、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２と同様であるので、その説明を省略する。そして、メモリ６２は、第１ＥＡＧ６３−１で指定されたメモリアドレスｋ１１＿ａｄｒを持つ記憶領域からデータ（すなわち、フィルタ係数ｋ１１）を取り出し、第５１レジスタ６７−５１へ出力する。第５１レジスタ６７−５１は、メモリアドレスｋ１１＿ａｄｒを持つ記憶領域から取り出されたフィルタ係数ｋ１１を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスｋ１１＿ａｄｒが順次に生成され、第５１レジスタ６７−５１には、前記メモリアドレスｋ１１＿ａｄｒを持つ記憶領域から順次に取り出されたフィルタ係数ｋ１１が順次に保持される。
【００７１】
２行目（２段目の行）のＰＥ３１−２１〜３１−２４は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
【００７２】
右上を基準に３行目（３段目の行）のＰＥ３１−３１〜３１−３４は、対象画像ＩＰのうち、カーネルＫＮのサイズに一致した範囲内における各画素の各画素値とカーネルＫＮの各要素（各フィルタ係数）とを同位置同士で乗算する回路となり、前記コンフィギュレーションデータは、３行目のＰＥ３１−３１〜３１−３４が前記各画素の各画素値とカーネルＫＮの各フィルタ係数とを同位置同士で乗算する回路となるように作成される。
【００７３】
より具体的には、本実施形態では、３行１列のＰＥ３１−３１は、１行１列の画素の画素値ｉ００と１行１列のフィルタ係数ｋ００とを乗算する回路となり、３行２列のＰＥ３１−３２は、１行２列の画素の画素値ｉ０１と１行２列のフィルタ係数ｋ０１とを乗算する回路となり、３行３列のＰＥ３１−３３は、２行１列の画素の画素値ｉ１０と２行１列のフィルタ係数ｋ１０とを乗算する回路となり、３行４列のＰＥ３１−３４は、２行２列の画素の画素値ｉ１１と２行２列のフィルタ係数ｋ１１とを乗算する回路となる。これらＰＥ３１−３１〜３１−３４は、図１１に示すように、ＡＬＵ６１および第３レジスタ６７−３を備えて構成され、図３を用いて説明した上述と同様に各回路が接続され、入出力される。
【００７４】
３行１列のＰＥ３１−２０では、２行１列のＰＥ３１−２１における第５２レジスタ６７−５２と２行３列のＰＥ３１−２３における第５２レジスタ６７−５２とがＡＬＵ６１に接続され、これによって２行１列のＰＥ３１−２１で取り出された１行１列の画素の画素値ｉ００と２行３列のＰＥ３１−２３で取り出された１行１列のフィルタ係数ｋ００とがＡＬＵ６１に入力される。ＡＬＵ６１は、これら画素値ｉ００とフィルタ係数ｋ００とを乗算し、その乗算結果（第１１乗算結果）（ｉ００×ｋ００）を第３レジスタ６７−３へ出力し、第３レジスタ６７−３は、前記第１１乗算結果（ｉ００×ｋ００）を保持する。
【００７５】
３行２列のＰＥ３１−３２では、２行１列のＰＥ３１−２１における第５１レジスタ６７−５１と２行３列のＰＥ３１−２３における第５１レジスタ６７−５１とがＡＬＵ６１に接続され、これによって２行１列のＰＥ３１−２１で取り出された１行２列の画素の画素値ｉ０１と２行３列のＰＥ３１−２３で取り出された１行２列のフィルタ係数ｋ０１とがＡＬＵ６１に入力される。ＡＬＵ６１は、これら画素の画素値ｉ０１とフィルタ係数ｋ０１とを乗算し、その乗算結果（第１２乗算結果）（ｉ０１×ｋ０１）を第３レジスタ６７−３へ出力し、第３レジスタ６７−３は、前記第１２乗算結果（ｉ０１×ｋ０１）を保持する。
【００７６】
３行３列のＰＥ３１−３３では、２行２列のＰＥ３１−２２における第５２レジスタ６７−５２と２行４列のＰＥ３１−２４における第５２レジスタ６７−５２とがＡＬＵ６１に接続され、これによって２行２列のＰＥ３１−２２で取り出された２行１列の画素の画素値ｉ１０と２行４列のＰＥ３１−２４で取り出された２行１列のフィルタ係数ｋ１０とがＡＬＵ６１に入力される。ＡＬＵ６１は、これら画素値ｉ１０とフィルタ係数ｋ１０とを乗算し、その乗算結果（第２１乗算結果）（ｉ１０×ｋ１０）を第３レジスタ６７−３へ出力し、第３レジスタ６７−３は、前記第２１乗算結果（ｉ１０×ｋ１０）を保持する。
【００７７】
３行４列のＰＥ３１−３４では、２行２列のＰＥ３１−２２における第５１レジスタ６７−５１と２行４列のＰＥ３１−２４における第５１レジスタ６７−５１とがＡＬＵ６１に接続され、これによって２行２列のＰＥ３１−２２で取り出された２行２列の画素の画素値ｉ１１と２行４列のＰＥ３１−２４で取り出された２行２列のフィルタ係数ｋ１１とがＡＬＵ６１に入力される。ＡＬＵ６１は、これら画素値ｉ１１とフィルタ係数ｋ１１とを乗算し、その乗算結果（第２２乗算結果）（ｉ１１×ｋ１１）を第３レジスタ６７−３へ出力し、第３レジスタ６７−３は、前記第２２乗算結果（ｉ１１×ｋ１１）を保持する。
【００７８】
３行目（３段目の行）のＰＥ３１−３１〜３１−３４は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
【００７９】
右上を基準に４行目（４段目の行）のＰＥ３１−４１〜３１−４４は、３行目のＰＥ３１−３１〜３１−３４で演算された各乗算結果を２個ずつ加算する回路となり、前記コンフィギュレーションデータは、４行目のＰＥ３１−４１〜３１−４４が前記各乗算結果を２個ずつ加算する回路となるように作成される。
【００８０】
より具体的には、本実施形態では、４行１列のＰＥ３１−４１は、１行１列の画素の画素値ｉ００と１行１列のフィルタ係数ｋ００とを乗算した結果である第１１乗算結果（ｉ００×ｋ００）と、１行２列の画素の画素値ｉ０１と１行２列のフィルタ係数ｋ０１とを乗算した結果である第１２乗算結果（ｉ０１×ｋ０１）とを加算する回路となり、４行３列のＰＥ３１−４３は、２行１列の画素の画素値ｉ１０と２行１列のフィルタ係数ｋ１０とを乗算した結果である第２１乗算結果（ｉ１０×ｋ１０）と、２行２列の画素の画素値ｉ１１と２行２列のフィルタ係数ｋ１１とを乗算した結果である第２２乗算結果（ｉ１１×ｋ１１）とを加算する回路となる。なお、４行２列のＰＥ３１−４２および４行４列のＰＥ３１−４４は、本実施形態では、使用されていない。これらＰＥ３１−４１、３１−４３は、図１１に示すように、ＡＬＵ６１および第３レジスタ６７−３を備えて構成され、図３を用いて説明した上述と同様に各回路が接続され、入出力される。
【００８１】
４行１列のＰＥ３１−４１では、３行１列のＰＥ３１−３１における第３レジスタ６７−３と３行２列のＰＥ３１−３２における第３レジスタ６７−３とがＡＬＵ６１に接続され、これによって３行１列のＰＥ３１−３１で演算された第１１乗算結果（ｉ００×ｋ００）と、３行２列のＰＥ３１−３２で演算された第１２乗算結果（ｉ０１×ｋ０１）とがＡＬＵ６１に入力される。ＡＬＵ６１は、これら第１１乗算結果（ｉ００×ｋ００）と第１２乗算結果（ｉ０１×ｋ０１）とを加算し、その加算結果（第１１１２加算結果）（ｉ００×ｋ００＋ｉ０１×ｋ０１）を第３レジスタ６７−３へ出力し、第３レジスタ６７−３は、前記第１１１２加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１）を保持する。
【００８２】
４行３列のＰＥ３１−４３では、３行３列のＰＥ３１−３３における第３レジスタ６７−３と３行４列のＰＥ３１−３４における第３レジスタ６７−３とがＡＬＵ６１に接続され、これによって３行３列のＰＥ３１−３３で演算された第２１乗算結果（ｉ１０×ｋ１０）と、３行４列のＰＥ３１−３４で演算された第２２乗算結果（ｉ１１×ｋ１１）とがＡＬＵ６１に入力される。ＡＬＵ６１は、これら第２１乗算結果（ｉ１０×ｋ１０）と第２２乗算結果（ｉ１１×ｋ１１）とを加算し、その加算結果（第２１２２加算結果）（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）を第３レジスタ６７−３へ出力し、第３レジスタ６７−３は、前記第２１２２加算結果（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）を保持する。
【００８３】
４行目（４段目の行）のＰＥ３１−４１〜３１−４４は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
【００８４】
右上を基準に５行目（５段目の行）のＰＥ３１−５１〜３１−５４は、４行目のＰＥ３１−４１〜３１−４４で演算された各加算結果をさらに加算する回路となり、前記コンフィギュレーションデータは、５行目のＰＥ３１−５１〜３１−５４が前記各加算結果を加算する回路となるように作成される。
【００８５】
より具体的には、本実施形態では、５行１列のＰＥ３１−５１は、第１１乗算結果（ｉ００×ｋ００）と第１２乗算結果（ｉ０１×ｋ０１）とを加算した結果である第１１１２加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１）と、第２１乗算結果（ｉ１０×ｋ１０）と第２２乗算結果（ｉ１１×ｋ１１）とを加算した結果である第２１２２加算結果（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）とを加算する回路となる。なお、５行２列のＰＥ３１−５２、５行３列のＰＥ３１−５３および５行４列のＰＥ３１−５４は、本実施形態では、使用されていない。このＰＥ３１−５１は、図１２に示すように、ＡＬＵ６１、メモリ６２、第１ＥＡＧ、第３１切換え器６６−３１、ならびに、第３および第４１レジスタ６７−３、６７−４１を備えて構成され、図３を用いて説明した上述と同様に各回路が接続され、入出力される。
【００８６】
５行１列のＰＥ３１−５１では、４行１列のＰＥ３１−４１における第３レジスタ６７−３と４行３列のＰＥ３１−４３における第３レジスタ６７−３とがＡＬＵ６１に接続され、これによって４行１列のＰＥ３１−４１で演算された第１１１２加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１）と、４行３列のＰＥ３１−４３で演算された第２１２２加算結果（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）とがＡＬＵ６１に入力される。ＡＬＵ６１は、これら第１１１２加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１）と第２１２２加算結果（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）とを加算し、その加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１＋ｉ１０×ｋ１０＋ｉ１１×ｋ１１）を第３レジスタ６７−３へ出力し、第３レジスタ６７−３は、前記加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１＋ｉ１０×ｋ１０＋ｉ１１×ｋ１１）を保持する。これによって畳み込み演算で生成される特徴マップＦＭにおける１個の画素の画素値が求められる。
【００８７】
第３１切換え器６６−３１には、第４１レジスタ６７−４１に保持されている第１ＥＡＧ６３−１の演算結果と−１とが入力され、第３１切換え器６６−３１は、畳み込み演算の開始時に、計算開始時にＯＮＥＳＨＯＴ信号で選択された−１を初期値として第１ＥＡＧ６３−１へ出力し、次以降のマシンサイクルでは、第３１レジスタ６７−３１に保持されている第１ＥＡＧ６３−１の演算結果を第１６３−１へ出力する。第１ＥＡＧ６３−１には、第４１切換え器６６−４１の出力と１とが入力され、第１ＥＡＧ６３−１は、これら第３１切換え器６６−３１の出力と１とを加算し、その加算結果を特徴マップＦＭの各画素の画素値を格納するメモリアドレスｏ＿ａｄｒとして第４１レジスタ６７−４１およびメモリ６２それぞれへ出力する。したがって、ＰＥ３１−５１の第１ＥＡＧ６３−１は、マシンサイクルごとに動作することで、０からマシンサイクルごとに１ずつアップカウントし、メモリアドレスｏ＿ａｄｒを生成する。
【００８８】
メモリ６２は、第１ＥＡＧ６３−１で指定されたメモリアドレスｏ＿ａｄｒを持つ記憶領域に、ＡＬＵ６１で求められた前記加算結果（（ｉ００×ｋ００）＋（ｉ０１×ｋ０１）＋（ｉ１０×ｋ１０）＋（ｉ１１×ｋ１１）、すなわち、特徴マップＦＭの画素値）記憶する。
【００８９】
５行目（５段目の行）のＰＥ３１−５１〜３１−５４は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
【００９０】
そして、５個のｓｔａｇｅ０＿ｒｅａｄｙ信号〜ｓｔａｇｅ４＿ｒｅａｄｙ信号は、畳み込み演算の開始では、ｓｔａｇｅ０＿ｒｅａｄｙ信号からｓｔａｇｅ４＿ｒｅａｄｙ信号へ、マシンサイクルごとに順次にＬｏｗレベルからＨｉレベルへセットされる。１行１列のＰＥ３１−１１における制御変数ｙが０になると、すなわち、対象画像ＩＰに対するカーネルＫＮを用いた畳み込み演算が終了すると、５個のｓｔａｇｅ０＿ｒｅａｄｙ信号〜ｓｔａｇｅ４＿ｒｅａｄｙ信号は、ｓｔａｇｅ０＿ｒｅａｄｙ信号からｓｔａｇｅ４＿ｒｅａｄｙ信号へ、マシンサイクルごとに順次にＨｉレベルからＬｏｗレベルへセットされる。そして、５行１列のＰＥ３１−５１におけるメモリ６２から、当該メモリ６２に記憶されている特徴マップＦＭのデータがメモリインターフェース４を介してメモリ５へ転送され、取り出される。これによって畳み込み演算の演算結果（すなわち、特徴マップＦＭ）が取得できる。
【００９１】
次に、このような畳み込み演算を実行する演算器アレイ３の動作を一例を用いてより具体的に説明する。図１３は、前記畳み込み層に入力された画像（対象画像）の各画素値を格納するメモリのメモリアドレスを示す図である。図１４は、前記畳み込み層で実行される畳み込み演算で用いられるカーネルの各要素（画像フィルタの各フィルタ係数）を格納するメモリのメモリアドレスを示す図である。図１５は、前記畳み込み層による畳み込み演算によって生成された画像（特徴マップ）の各画素値を格納するメモリのメモリアドレスを示す図である。図１５Ａは、第１特徴マップＦＭ−１を記憶する各記憶領域の各メモリアドレスｏ＿ａｄｒを示し、図１５Ｂは、第２特徴マップＦＭ−２を記憶する各記憶領域の各メモリアドレスｏ＿ａｄｒを示し、図１５Ｃは、第３特徴マップＦＭ−３を記憶する各記憶領域の各メモリアドレスｏ＿ａｄｒを示す。図１６は、前記畳み込み層（データ処理装置）における演算器アレイのタイムチャートを示す図である。図１６において、上段から下段に向かって順に、ｙループの制御変数ｙ、ｃループの制御変数ｃ、ｘループの制御変数ｘ、メモリアドレスｉ００＿ａｄｒ、メモリアドレスｉ０１＿ａｄｒ、メモリアドレスｉ１０＿ａｄｒ、メモリアドレスｉ１１＿ａｄｒ、メモリアドレスｋ００＿ａｄｒ、メモリアドレスｋ０１＿ａｄｒ、メモリアドレスｋ１０＿ａｄｒ、メモリアドレスｋ１１＿ａｄｒ、メモリアドレスｏ＿ａｄｒ、ｓｔａｇｅ０＿ｒｅａｄｙ信号、ｓｔａｇｅ１＿ｒｅａｄｙ信号、ｓｔａｇｅ２＿ｒｅａｄｙ信号、ｓｔａｇｅ３＿ｒｅａｄｙ信号、および、ｓｔａｇｅ４＿ｒｅａｄｙ信号の各値を示し、横軸は、時間である。
【００９２】
この例では、対象画像ＩＰは、図４に示すように、１０×１０のサイズを持ち（ＩＨ＝ＩＷ＝１０）、カーネルＫＮは、２×２のサイズを持つ（ＫＨ＝ＫＷ＝２）。カーネルＫＮの個数は、３個である（ＯＣ＝３）。したがって、９×９のサイズを持つ３個の特徴マップＦＭ−１〜ＦＭが畳み込み演算によって生成される（ＯＨ＝ＯＷ＝９）。
【００９３】
畳み込み演算の開始に際し、演算器アレイ３は、メモリ５からメモリインターフェース４を介してコンフィギュレーションデータを読み込む。これによって、上述したように、１行目のＰＥ３１−１１〜３１−１４は、各ループの制御変数を生成する回路となるように、再構成される。２行目のＰＥ３１−２１〜３１−２４は、制御変数ｙで指定された当該行において、制御変数ｘで指定されることによって行に沿って１列ずつシフトしながら、対象画像ＩＰから、カーネルＫＮのサイズに一致した範囲内における各画素の各画素値（ｉ００、ｉ０１、ｉ１０、ｉ１１）を取り出し、制御変数ｃで指定されたカーネルＫＮにおける各フィルタ係数（ｋ００、ｋ０１、ｋ１０、ｋ１１）を取り出す回路となるように、再構成される。３行目のＰＥ３１−３１〜３１−３４は、対象画像ＩＰのうち、カーネルＫＮのサイズに一致した範囲内における各画素の各画素値（ｉ００、ｉ０１、ｉ１０、ｉ１１）とカーネルＫＮの各フィルタ係数（ｋ００、ｋ０１、ｋ１０、ｋ１１）とを同位置同士で乗算する回路となるように、再構成される。４行目のＰＥ３１−４１〜３１−４４は、３行目のＰＥ３１−３１〜３１−３４で演算された各乗算結果（ｉ００×ｋ００、ｉ０１×ｋ０１、ｉ１０×ｋ１０、ｉ１１×ｋ１１）を２個ずつ加算する回路となるように、再構成される。５行目のＰＥ３１−５１〜３１−５４は、４行目のＰＥ３１−４１〜３１−４４で演算された各加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１、ｉ１０×ｋ１０＋ｉ１１×ｋ１１）をさらに加算する回路となるように、再構成される。
【００９４】
そして、２行１列のＰＥ３１−２１におけるメモリ６２および２行２列のＰＥ３１−２２におけるメモリ６２それぞれには、メモリインターフェース４を介してメモリ５から対象画像ＩＰの各画素値が読み込まれてメモリアドレス０番地から行ごとに格納される。２行１列のＰＥ３１−２１におけるメモリ６２および２行２列のＰＥ３１−２２におけるメモリ６２それぞれでは、例えば、図１３に示すように、対象画像ＩＰの各画素値が１０×１０の各記憶領域に格納され、これら１０×１０の各記憶領域には、０から９９までのメモリアドレスが１０個ごとに１０行に亘って（１０列で１０行に亘って）つづら折りに割り当てられている。例えば、１行目における１０個の記憶領域には、０から９までの整数が順次に割り当てられ、２行目における１０個の記憶領域には、１０から１９までの整数が順次に割り当てられ、１０行目における１０個の記憶領域には、９０から９９までの整数が順次に割り当てられている。
【００９５】
２行３列のＰＥ３１−２３におけるメモリ６２および２行４列のＰＥ３１−２４におけるメモリ６２それぞれには、メモリインターフェース４を介してメモリ５から３個のカーネルＫＮ−１〜ＫＮ−３の各フィルタ係数が読み込まれてメモリアドレス０番地から行ごとにそしてカーネルごとに格納される。２行３列のＰＥ３１−２３におけるメモリ６２および２行４列のＰＥ３１−２４におけるメモリ６２それぞれでは、例えば、図１４に示すように、３個のカーネルＫＮ−１〜ＫＮ−３の各フィルタ係数が２×６の各記憶領域に格納され、これら２×６の各記憶領域には、０から１１までのメモリアドレスが２個ごとに６行に亘って（２列で６行に亘って）つづら折りに割り当てられている。例えば、１行目における２個の各記憶領域には、０および１がそれぞれ割り当てられ、２行目における２個の記憶領域には、２および３がそれぞれ割り当てられ、６行目における２個の記憶領域には、１０および１１がそれぞれ割り当てられている。
【００９６】
演算が開始されると、図１６において、まず、最初のマシンサイクルにおいて、ｓｔａｇｅ０＿ｒｅａｄｙ信号がＨｉレベルとなり、１行目のＰＥ３１−１１〜３１−１４がその動作を開始する。なお、このマシンサイクルでは、ｓｔａｇｅ１＿ｒｅａｄｙ信号、ｓｔａｇｅ２＿ｒｅａｄｙ信号、ｓｔａｇｅ３＿ｒｅａｄｙ信号およびｓｔａｇｅ４＿ｒｅａｄｙ信号は、それぞれ、Ｌｏｗレベルであり、２行目以下のＰＥ３１−２１〜３１−５４は、動作していない。１行１列のＰＥ３１−１１は、上述の動作によって、制御変数ｙ＝２４２を生成し、その第３レジスタ６７−３に２４２を保持する。１行２列のＰＥ３１−１２は、上述の動作によって、制御変数ｃ＝２６を生成し、その第３レジスタ６７−３に２６を保持する。１行３列のＰＥ３１−１３は、上述の動作によって、制御変数ｘ＝８を生成し、その第３レジスタ６７−３に８を保持する。
【００９７】
ここで、この例では、カーネルＫＮは、対象画像ＩＰに対し行方向によって９画素分を１画素ずつシフトするので、ｘループ内の繰り返し回数は、９回であり、制御変数ｘは、８から０までの９個の整数となる。このため、制御変数ｘには、上述のように、８となる。この９回の繰り返し回数に対し、３個のカーネルＫＮ−１〜ＫＮ−３を用いて演算されるため、制御変数ｃは、２６から０までの２７個の整数となる（９×３＝２７）。この２７回の繰り返し回数に対し、対象画像ＩＰの１行目から９行目がカーネルＫＮを用いて演算されるため、制御変数ｙは、２４２から０までの２４３個の整数となる（２７×９＝２４３）。
【００９８】
次のマシンサイクルにおいて、ｓｔａｇｅ１＿ｒｅａｄｙ信号がＨｉレベルとなり、２行目のＰＥ３１−２１〜３１−２４がその動作を開始する。ｓｔａｇｅ０＿ｒｅａｄｙ信号は、Ｈｉレベルを維持し、１行目のＰＥ３１−２１〜３１−２４は、その動作を続ける。２行１列のＰＥ３１−２１は、上述の動作によって、メモリアドレスｉ００＿ａｄｒ＝０およびメモリアドレスｉ０１＿ａｄｒ＝１を生成し、図１３に示すように、メモリアドレスｉ００＿ａｄｒ＝０を持つ記憶領域からデータ（画素値ｉ００）を取り出し、その第５２レジスタ６７−５２に保持し、メモリアドレスｉ０１＿ａｄｒ＝１を持つ記憶領域からデータ（画素値ｉ０１）を取り出し、その第５１レジスタ６７−５１に保持する。２行２列のＰＥ３１−２２は、上述の動作によって、メモリアドレスｉ１０＿ａｄｒ＝１０およびメモリアドレスｉ１１＿ａｄｒ＝１１を生成し、図１３に示すように、メモリアドレスｉ１０＿ａｄｒ＝１０を持つ記憶領域からデータ（画素値ｉ１０）を取り出し、その第５２レジスタ６７−５２に保持し、メモリアドレスｉ１１＿ａｄｒ＝１１を持つ記憶領域からデータ（画素値ｉ１１）を取り出し、その第５１レジスタ６７−５１に保持する。２行３列のＰＥ３１−２３は、上述の動作によって、メモリアドレスｋ００＿ａｄｒ＝０およびメモリアドレスｋ０１＿ａｄｒ＝１を生成し、図１４に示すように、メモリアドレスｋ００＿ａｄｒ＝０を持つ記憶領域からデータ（フィルタ係数ｋ００）を取り出し、その第５２レジスタ６７−５２に保持し、メモリアドレスｋ０１＿ａｄｒ＝１を持つ記憶領域からデータ（フィルタ係数ｋ０１）を取り出し、その第５１レジスタ６７−５１に保持する。２行４列のＰＥ３１−２４は、上述の動作によって、メモリアドレスｋ１０＿ａｄｒ＝２およびメモリアドレスｋ１１＿ａｄｒ＝３を生成し、図１４に示すように、メモリアドレスｋ１０＿ａｄｒ＝２を持つ記憶領域からデータ（フィルタ係数ｋ１０）を取り出し、その第５２レジスタ６７−５２に保持し、メモリアドレスｋ１１＿ａｄｒ＝３を持つ記憶領域からデータ（フィルタ係数ｋ１１）を取り出し、その第５１レジスタ６７−５１に保持する。
【００９９】
一方、１行１列のＰＥ３１−１１は、制御変数ｙ＝２４１を生成し、その第３レジスタ６７−３に２４１を保持する。１行２列のＰＥ３１−１２は、制御変数ｃ＝２５を生成し、その第３レジスタ６７−３に２５を保持する。１行３列のＰＥ３１−１３は、制御変数ｘ＝７を生成し、その第３レジスタ６７−３に７を保持する。
【０１００】
次のマシンサイクルにおいて、ｓｔａｇｅ２＿ｒｅａｄｙ信号がＨｉレベルとなり、３行目のＰＥ３１−３１〜３１−３４がその動作を開始する。ｓｔａｇｅ０＿ｒｅａｄｙ信号およびｓｔａｇｅ１＿ｒｅａｄｙ信号は、Ｈｉレベルを維持し、１行目および２行目のＰＥ３１−１１〜３１−１４、３１−２１〜３１−２４は、その動作を続ける。３行１列のＰＥ３１−３１は、上述の動作によって、２行１列のＰＥ３１−２１から入力された画素値ｉ００と２行３列のＰＥ３１−２３から入力されたフィルタ係数ｋ００とを乗算し、その第１１乗算結果（ｉ００×ｋ００）を、その第３レジスタ６７−３に保持する。３行２列のＰＥ３１−３２は、上述の動作によって、２行１列のＰＥ３１−２１から入力された画素値ｉ０１と２行３列のＰＥ３１−２３から入力されたフィルタ係数ｋ０１とを乗算し、その第１２乗算結果（ｉ０１×ｋ０１）を、その第３レジスタ６７−３に保持する。３行３列のＰＥ３１−３３は、上述の動作によって、２行２列のＰＥ３１−２２から入力された画素値ｉ１０と２行４列のＰＥ３１−２４から入力されたフィルタ係数ｋ１０とを乗算し、その第２１乗算結果（ｉ１０×ｋ１０）を、その第３レジスタ６７−３に保持する。３行４列のＰＥ３１−３４は、上述の動作によって、２行２列のＰＥ３１−２２から入力された画素値ｉ１１と２行４列のＰＥ３１−２４から入力されたフィルタ係数ｋ１１とを乗算し、その第２２乗算結果（ｉ１１×ｋ１１）を、その第３レジスタ６７−３に保持する。
【０１０１】
一方、１行１列のＰＥ３１−１１は、制御変数ｙ＝２４０を生成し、その第３レジスタ６７−３に２４０を保持する。１行２列のＰＥ３１−１２は、制御変数ｃ＝２４を生成し、その第３レジスタ６７−３に２４を保持する。１行３列のＰＥ３１−１３は、制御変数ｘ＝６を生成し、その第３レジスタ６７−３に６を保持する。２行１列のＰＥ３１−２１は、メモリアドレスｉ００＿ａｄｒ＝１およびメモリアドレスｉ０１＿ａｄｒ＝２を生成し、図１３に示すように、それらメモリアドレスｉ００＿ａｄｒ＝１およびメモリアドレスｉ０１＿ａｄｒ＝２を持つ各記憶領域から各データ（画素値ｉ００、画素値ｉ０１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行２列のＰＥ３１−２２は、メモリアドレスｉ１０＿ａｄｒ＝１１およびメモリアドレスｉ１１＿ａｄｒ＝１２を生成し、図１３に示すように、それらメモリアドレスｉ１０＿ａｄｒ＝１１およびメモリアドレスｉ１１＿ａｄｒ＝１２を持つ各記憶領域から各データ（画素値ｉ１０、画素値ｉ１１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行３列のＰＥ３１−２３は、メモリアドレスｋ００＿ａｄｒ＝０およびメモリアドレスｋ０１＿ａｄｒ＝１を生成し、図１４に示すように、それらメモリアドレスｋ００＿ａｄｒ＝０およびメモリアドレスｋ０１＿ａｄｒ＝１を持つ各記憶領域から各データ（フィルタ係数ｋ００、フィルタ係数ｋ０１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行４列のＰＥ３１−２４は、メモリアドレスｋ１０＿ａｄｒ＝２およびメモリアドレスｋ１１＿ａｄｒ＝３を生成し、図１４に示すように、それらメモリアドレスｋ１０＿ａｄｒ＝２およびメモリアドレスｋ１１＿ａｄｒ＝３を持つ各記憶領域から各データ（フィルタ係数ｋ１０、フィルタ係数ｋ１１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。
【０１０２】
次のマシンサイクルにおいて、ｓｔａｇｅ３＿ｒｅａｄｙ信号がＨｉレベルとなり、４行目のＰＥ３１−４１〜３１−４４がその動作を開始する。ｓｔａｇｅ０＿ｒｅａｄｙ信号、ｓｔａｇｅ１＿ｒｅａｄｙ信号およびｓｔａｇｅ２＿ｒｅａｄｙ信号は、Ｈｉレベルを維持し、１行目、２行目および３行目のＰＥ３１−１１〜３１−１４、３１−２１〜３１−２４、３１−３１〜３１−３４は、その動作を続ける。４行１列のＰＥ３１−４１は、上述の動作によって、３行１列のＰＥ３１−３１から入力された第１１乗算結果（ｉ００×ｋ００）と３行２列のＰＥ３１−３２から入力された第１２乗算結果（ｉ０１×ｋ０１）とを加算し、その第１１１２加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１）を、その第３レジスタ６７−３に保持する。４行３列のＰＥ３１−４３は、上述の動作によって、３行３列のＰＥ３１−３３から入力された第２１乗算結果（ｉ１０×ｋ１０）と３行４列のＰＥ３１−３４から入力された第２２乗算結果（ｉ１１×ｋ１１）とを加算し、その第２１２２加算結果（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）を、その第３レジスタ６７−３に保持する。
【０１０３】
一方、１行１列のＰＥ３１−１１は、制御変数ｙ＝２３９を生成し、その第３レジスタ６７−３に２３９を保持する。１行２列のＰＥ３１−１２は、制御変数ｃ＝２３を生成し、その第３レジスタ６７−３に２３を保持する。１行３列のＰＥ３１−１３は、制御変数ｘ＝５を生成し、その第３レジスタ６７−３に５を保持する。２行１列のＰＥ３１−２１は、メモリアドレスｉ００＿ａｄｒ＝２およびメモリアドレスｉ０１＿ａｄｒ＝３を生成し、図１３に示すように、それらメモリアドレスｉ００＿ａｄｒ＝２およびメモリアドレスｉ０１＿ａｄｒ＝３を持つ各記憶領域から各データ（画素値ｉ００、画素値ｉ０１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行２列のＰＥ３１−２２は、メモリアドレスｉ１０＿ａｄｒ＝１２およびメモリアドレスｉ１１＿ａｄｒ＝１３を生成し、図１３に示すように、それらメモリアドレスｉ１０＿ａｄｒ＝１２およびメモリアドレスｉ１１＿ａｄｒ＝１３を持つ各記憶領域から各データ（画素値ｉ１０、画素値ｉ１１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行３列のＰＥ３１−２３は、メモリアドレスｋ００＿ａｄｒ＝０およびメモリアドレスｋ０１＿ａｄｒ＝１を生成し、図１４に示すように、それらメモリアドレスｋ００＿ａｄｒ＝０およびメモリアドレスｋ０１＿ａｄｒ＝１を持つ各記憶領域から各データ（フィルタ係数ｋ００、フィルタ係数ｋ０１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行４列のＰＥ３１−２４は、メモリアドレスｋ１０＿ａｄｒ＝２およびメモリアドレスｋ１１＿ａｄｒ＝３を生成し、図１４に示すように、それらメモリアドレスｋ１０＿ａｄｒ＝２およびメモリアドレスｋ１１＿ａｄｒ＝３を持つ各記憶領域から各データ（フィルタ係数ｋ１０、フィルタ係数ｋ１１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。３行１列のＰＥ３１−３１は、ＰＥ３１−２１およびＰＥ３１−２３それぞれからの各入力に基づいて、第１１乗算結果（ｉ００×ｋ００）を求めて、その第３レジスタ６７−３に保持する。３行２列のＰＥ３１−３２は、ＰＥ３１−２１およびＰＥ３１−２３それぞれからの各入力に基づいて、第１２乗算結果（ｉ０１×ｋ０１）を求めて、その第３レジスタ６７−３に保持する。３行３列のＰＥ３１−３３は、ＰＥ３１−２２およびＰＥ３１−２４それぞれからの各入力に基づいて、第２１乗算結果（ｉ１０×ｋ１０）を求めて、その第３レジスタ６７−３に保持する。３行４列のＰＥ３１−３４は、ＰＥ３１−２２およびＰＥ３１−２４それぞれからの各入力に基づいて、第２２乗算結果（ｉ１１×ｋ１１）を求めて、その第３レジスタ６７−３に保持する。
【０１０４】
次のマシンサイクルにおいて、ｓｔａｇｅ４＿ｒｅａｄｙ信号がＨｉレベルとなり、５行目のＰＥ３１−５１〜３１−５４がその動作を開始する。ｓｔａｇｅ０＿ｒｅａｄｙ信号、ｓｔａｇｅ１＿ｒｅａｄｙ信号、ｓｔａｇｅ２＿ｒｅａｄｙ信号およびｓｔａｇｅ３＿ｒｅａｄｙ信号は、Ｈｉレベルを維持し、１行目、２行目、３行目および４行目のＰＥ３１−１１〜３１−１４、３１−２１〜３１−２４、３１−３１〜３１−３４、３１−４１〜３１−４４は、その動作を続ける。５行１列のＰＥ３１−５１は、上述の動作によって、４行１列のＰＥ３１−４１から入力された第１１１２加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１）と４行２列のＰＥ３１−４２から入力された第２１２２加算結果（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）とを加算し、その加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１＋ｉ１０×ｋ１０＋ｉ１１×ｋ１１）をその第３レジスタ６７−３に保持する。そして、この５行１列のＰＥ３１−５１は、上述の動作によって、メモリアドレスｏ＿ａｄｒ＝０を生成し、メモリアドレスｏ＿ａｄｒ＝０を持つ記憶領域に、前記加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１＋ｉ１０×ｋ１０＋ｉ１１×ｋ１１）を格納する。
【０１０５】
一方、１行１列のＰＥ３１−１１は、制御変数ｙ＝２３８を生成し、その第３レジスタ６７−３に２３８を保持する。１行２列のＰＥ３１−１２は、制御変数ｃ＝２２を生成し、その第３レジスタ６７−３に２２を保持する。１行３列のＰＥ３１−１３は、制御変数ｘ＝４を生成し、その第３レジスタ６７−３に４を保持する。２行１列のＰＥ３１−２１は、メモリアドレスｉ００＿ａｄｒ＝３およびメモリアドレスｉ０１＿ａｄｒ＝４を生成し、図１３に示すように、それらメモリアドレスｉ００＿ａｄｒ＝３およびメモリアドレスｉ０１＿ａｄｒ＝４を持つ各記憶領域から各データ（画素値ｉ００、画素値ｉ０１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行２列のＰＥ３１−２２は、メモリアドレスｉ１０＿ａｄｒ＝１３およびメモリアドレスｉ１１＿ａｄｒ＝１４を生成し、図１３に示すように、それらメモリアドレスｉ１０＿ａｄｒ＝１３およびメモリアドレスｉ１１＿ａｄｒ＝１４を持つ各記憶領域から各データ（画素値ｉ１０、画素値ｉ１１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行３列のＰＥ３１−２３は、メモリアドレスｋ００＿ａｄｒ＝０およびメモリアドレスｋ０１＿ａｄｒ＝１を生成し、図１４に示すように、それらメモリアドレスｋ００＿ａｄｒ＝０およびメモリアドレスｋ０１＿ａｄｒ＝１を持つ各記憶領域から各データ（フィルタ係数ｋ００、フィルタ係数ｋ０１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。２行４列のＰＥ３１−２４は、メモリアドレスｋ１０＿ａｄｒ＝２およびメモリアドレスｋ１１＿ａｄｒ＝３を生成し、図１４に示すように、それらメモリアドレスｋ１０＿ａｄｒ＝２およびメモリアドレスｋ１１＿ａｄｒ＝３を持つ各記憶領域から各データ（フィルタ係数ｋ１０、フィルタ係数ｋ１１）を取り出して、その第５２レジスタ６７−５２および第５１レジスタ６７−５１にそれぞれ保持する。３行１列のＰＥ３１−３１は、ＰＥ３１−２１およびＰＥ３１−２３それぞれからの各入力に基づいて、第１１乗算結果（ｉ００×ｋ００）を求めて、その第３レジスタ６７−３に保持する。３行２列のＰＥ３１−３２は、ＰＥ３１−２１およびＰＥ３１−２３それぞれからの各入力に基づいて、第１２乗算結果（ｉ０１×ｋ０１）を求めて、その第３レジスタ６７−３に保持する。３行３列のＰＥ３１−３３は、ＰＥ３１−２２およびＰＥ３１−２４それぞれからの各入力に基づいて、第２１乗算結果（ｉ１０×ｋ１０）を求めて、その第３レジスタ６７−３に保持する。３行４列のＰＥ３１−３４は、ＰＥ３１−２２およびＰＥ３１−２４それぞれからの各入力に基づいて、第２２乗算結果（ｉ１１×ｋ１１）を求めて、その第３レジスタ６７−３に保持する。４行１列のＰＥ３１−４１は、ＰＥ３１−３１およびＰＥ３１−３２それぞれからの各入力に基づいて、第１１１２加算結果（ｉ００×ｋ００＋ｉ０１×ｋ０１）を求めて、その第３レジスタ６７−３に保持する。４行３列のＰＥ３１−４３は、ＰＥ３１−３３およびＰＥ３１−３４それぞれからの各入力に基づいて、第２１２２加算結果（ｉ１０×ｋ１０＋ｉ１１×ｋ１１）を求めて、その第３レジスタ６７−３に保持する。
【０１０６】
次以降の各マシンサイクルでは、１行１列のＰＥ３１−１１で生成される制御変数ｙが０となるまで、各行のＰＥ３１−１１〜３１−５４は、それぞれ、上述のように動作し、図１６に示す各値を生成する。すなわち、図１６に示すように、１行１列のＰＥ３１−１１は、制御変数ｙを、２４２から０まで、マシンサイクルごとに１ずつダウンカウントする。１行２列のＰＥ３１−１２は、制御変数ｃを、２６から０まで、マシンサイクルごとに１ずつダウンカウントし、０になると、再び制御変数ｃを２６にセット（初期化）して、同様にダウンカウントし、これを繰り返す。１行３列のＰＥ３１−１３は、制御変数ｘを、８から０まで、マシンサイクルごとに１ずつダウンカウントし、０になると、再び制御変数ｘを８にセット（初期化）して、同様にダウンカウントし、これを繰り返す。２行１列のＰＥ３１−２１は、メモリアドレスｉ００＿ａｄｒを、０から８まで、マシンサイクルごとに１ずつアップカウントし、８になると、再び０から同様にアップカウントし、これＯＣ回繰り返す。前記ＯＣ回繰り返すと、２行１列のＰＥ３１−２１は、メモリアドレスｉ００＿ａｄｒを、１０から１８まで、マシンサイクルごとに１ずつアップカウントし、１８になると、再び１０から同様にアップカウントし、これをＯＣ回繰り返す。前記ＯＣ回繰り返すと、２行１列のＰＥ３１−２１は、メモリアドレスｉ００＿ａｄｒを、２０から２８まで、マシンサイクルごとに１ずつアップカウントし、２８になると、再び２０から同様にアップカウントし、これＯＣ回繰り返す。２行１列のＰＥ３１−２１は、以下同様に、図１６に示すようにメモリアドレスｉ００＿ａｄｒを生成する。さらに、２行１列のＰＥ３１−２１は、メモリアドレスｉ０１＿ａｄｒを、１から９まで、マシンサイクルごとに１ずつアップカウントし、９になると、再び１から同様にアップカウントし、これをＯＣ回繰り返す。２行１列のＰＥ３１−２１が上述のように０から８まで、次に、１０から１８まで、次に、２０から２８まで、・・・繰り返したように、２行１列のＰＥ３１−２１は、上述のように１から９までＯＣ回繰り返すと、図１６に示すように、次に、１１から１９まで、次に、２１から２９まで、・・・繰り返してメモリアドレスｉ０１＿ａｄｒを生成する。２行２列のＰＥ３１−２２は、メモリアドレスｉ１０＿ａｄｒを、１０から１８まで、マシンサイクルごとに１ずつアップカウントし、１８になると、再び１０から同様にアップカウントし、これをＯＣ回繰り返す。２行１列のＰＥ３１−２１が上述のように０から８まで、次に、１０から１８まで、次に、２０から２８まで、・・・繰り返したように、２行２列のＰＥ３１−２２は、上述のように１０から１８までＯＣ回繰り返すと、図１６に示すように、次に、２０から２８まで、次に、３０から３８まで、・・・繰り返してメモリアドレスｉ１０＿ａｄｒを生成する。さらに、２行２列のＰＥ３１−２２は、メモリアドレスｉ１１＿ａｄｒを、１１から１９まで、マシンサイクルごとに１ずつアップカウントし、１９になると、再び１１から同様にアップカウントし、これをＯＣ回繰り返す。２行１列のＰＥ３１−２１が上述のように０から８まで、次に、１０から１８まで、次に、２０から２８まで、・・・繰り返したように、２行２列のＰＥ３１−２２は、上述のように１１から１９までＯＣ回繰り返すと、図１６に示すように、次に、２１から２９まで、次に、３１から３９まで、・・・繰り返してメモリアドレスｉ０１＿ａｄｒを生成する。２行３列のＰＥ３１−２３は、メモリアドレスｋ００＿ａｄｒを、９回のマシンサイクルごとに０、４、８とし、８になると、再び０から同様に９回のマシンサイクルごとに０、４、８とし、これを繰り返す。２行３列のＰＥ３１−２３は、メモリアドレスｋ０１＿ａｄｒを、９回のマシンサイクルごとに１、５、９とし、９になると、再び１から同様に９回のマシンサイクルごとに１、５、９とし、これを繰り返す。２行４列のＰＥ３１−２４は、メモリアドレスｋ１０＿ａｄｒを、９回のマシンサイクルごとに２、６、１０とし、１０になると、再び２から同様に９回のマシンサイクルごとに２、６、１０とし、これを繰り返す。２行４列のＰＥ３１−２４は、メモリアドレスｋ１１＿ａｄｒを、９回のマシンサイクルごとに３、７、１１とし、１１になると、再び３から同様に９回のマシンサイクルごとに３、７、１１とし、これを繰り返す。３行目の各ＰＥ３１−３１〜３１−３４は、２行目の各ＰＥ３１−２１〜３１−２４でマシンサイクルごとに順次に取り出された各画素値（ｉ００、ｉ０１、ｉ１０、ｉ１１）と各フィルタ係数（ｋ００、ｋ０１、ｋ１０、ｋ１１）とを同位置同士で乗算する。４行目の各ＰＥ３１−４１、３１−４３は、３行目の各ＰＥ３１−３１〜３１−３４でマシンサイクルごとに順次に乗算された各乗算結果を２個ずつ加算する。５行目の各ＰＥ３１−５１は、４行目の各ＰＥ３１−４１、３１−４３でマシンサイクルごとに順次に加算された各加算結果をさらに加算し、０からアップカウントされたメモリアドレスｏ＿ａｄｒに従った記憶領域に、その加算結果を格納する。
【０１０７】
１行１列のＰＥ３１−１１で生成される制御変数ｙが０となると、カーネルＫＮが対象画像ＩＰにおけるカーネルＫＮのサイズに応じた最終行最終列に到達したので、図１６に示すように、ｓｔａｇｅ０＿ｒｅａｄｙ信号、ｓｔａｇｅ１＿ｒｅａｄｙ信号、ｓｔａｇｅ２＿ｒｅａｄｙ信号、ｓｔａｇｅ３＿ｒｅａｄｙ信号およびｓｔａｇｅ４＿ｒｅａｄｙ信号は、それぞれ、この順でマシンサイクルごとに順次に、ＨｉレベルからＬｏｗレベルに変更され、１行目から５行目まで順次に、その動作が停止される。
【０１０８】
その動作が停止されると、５行１列のＰＥ３１−５１のメモリ６２に格納された、対象画像ＩＰに対し、３個のカーネルＫＮ−１〜ＫＮ−３で畳み込み演算した演算結果が、メモリインターフェース４を介してメモリ５へ読み出される。
【０１０９】
ここで、上述したように、メモリアドレスｏ＿ａｄｒは、０からマシンサイクルごとにアップカウントされる一方、対象画像ＩＰの１行ごとに、３個のカーネルＫＮ−１〜ＫＮ−３を用いて演算されるので、特徴マップＦＭは、図１５に示すように、各記憶領域に記憶される。すなわち、対象画像ＩＰを第１カーネルＫＮ−１で畳み込み演算することによって生成された第１特徴マップＦＭ−１は、図１５Ａに示すように、メモリアドレスｏ＿ａｄｒ＝０〜８、２７〜３５、５４〜６２、８１〜８９、１０８〜１１６、１３５〜１４３、１６２〜１７０、１８９〜１９７、２１６〜２２４それぞれを持つ各記憶領域に記憶される。すなわち、第１特徴マップＦＭ−１を記憶する各記憶領域のメモリアドレスｏ＿ａｄｒは、０から９個連続すると、１６だけ飛んでその先から再び９個連続して再び１６だけ飛び、これを繰り返す。対象画像ＩＰを第２カーネルＫＮ−２で畳み込み演算することによって生成された第２特徴マップＦＭ−２は、図１５Ｂに示すように、メモリアドレスｏ＿ａｄｒ＝９〜１７、３６〜４４、６３〜７１、９０〜９８、１１７〜１２５、１４４〜１５２、１７１〜１７９、１９８〜２０６、２２５〜２３３それぞれを持つ各記憶領域に記憶される。すなわち、第２特徴マップＦＭ−２を記憶する各記憶領域のメモリアドレスｏ＿ａｄｒは、９から９個連続すると、１６だけ飛んでその先から再び９個連続して再び１６だけ飛び、これを繰り返す。対象画像ＩＰを第３カーネルＫＮ−３で畳み込み演算することによって生成された第３特徴マップＦＭ−３は、図１５Ｃに示すように、メモリアドレスｏ＿ａｄｒ＝１８〜２６、４５〜５３、７２〜８０、９９〜１０７、１２６〜１３４、１５３〜１６１、１８０〜１８８、２０７〜２１５、２３４〜２４２それぞれを持つ各記憶領域に記憶される。すなわち、第３特徴マップＦＭ−３を記憶する各記憶領域のメモリアドレスｏ＿ａｄｒは、１８から９個連続すると、１６だけ飛んでその先から再び９個連続して再び１６だけ飛び、これを繰り返す。
【０１１０】
第１ないし第３特徴マップＦＭ−１〜ＦＭ−３を、５行１列のＰＥ３１−５１のメモリ６２から、メモリインターフェース４を介してメモリ５へ読み出してメモリ５に格納する際、第１ないし第３特徴マップＦＭ−１〜ＦＭ−３は、図１５に示すようにメモリアドレスが不連続でメモリ５に格納されて良く、また、このような不連続なメモリアドレスを考慮することで、各特徴マップＦＭごとにメモリアドレスが連続するようにメモリ５に格納されて良い。
【０１１１】
以上の説明から分かるように、本実施形態では、第１ＥＡＧ６３−１、第１加算器６４−１、第１１および第１２比較器６５−１１、６５−１２、第１１、第１２および第３１切換え器６６−１１、６６−１２、６６−３１および第４１レジスタ６７−４１は、メモリアドレスを生成する請求項のアドレス生成器の一例に相当し、第２ＥＡＧ６３−１、第２加算器６４−２、第２１および第２２比較器６５−２１、６５−２２、第２１、第２２および第３２切換え器６６−２１、６６−２２、６６−３２および第４２レジスタ６７−４２は、前記アドレス生成器の他の一例に相当する。第１１比較器６５−１１は、外部から入力される第１入力値と予め設定された所定の第１条件値とを比較する請求項の第１比較器の一例に相当し、第２１比較器６５−２１は、前記第１比較器の他の一例に相当する。第１１切換え器６６−１１は、予め設定された所定の第１および第２設定値が入力され、前記第１比較器の第１比較結果に基づいて前記第１および第２設定値のうちのいずれかを出力する請求項の第１切換え器の一例に相当し、第２１切換え器６６−２１は、前記第１切換え器の他の一例に相当する。第１２比較器６５−１２は、外部から入力される第２入力値と予め設定された所定の第２条件値とを比較する請求項の第２比較器の一例に相当し、第２２比較器６５−２２は、前記第２比較器の他の一例に相当する。第１２切換え器６６−１２は、予め設定された所定の第３および第４設定値が入力され、前記第２比較器の第２比較結果に基づいて前記第３および第４設定値のうちのいずれかを出力する請求項の第２切換え器の一例に相当し、第２２切換え器６６−２２は、前記第２切換え器の他の一例に相当する。第１加算器６４−１は、前記第１および第２切換え器それぞれから出力された第１および第２出力値と、予め設定された第５設定値とを加算する請求項の第１加算器の一例に相当し、第２加算器６４−２は、前記第１加算器の他の一例に相当する。第３１切換え器６６−３１は、請求項の第３切換え器の一例に相当し、第３２切換え器６６−３２は、請求項の第３切換え器の一例に相当する。第４１レジスタ６７−４１は、請求項のレジスタの一例に相当し、第４２レジスタ６７−４２は、請求項のレジスタの他の一例に相当する。第１ＥＡＧ６３−１は、前記第３切換え器から出力された第３出力値と、前記第１加算器から出力された第１加算結果と加算し、その第２加算結果を前記メモリアドレスとして前記レジスタおよび前記メモリそれぞれに出力する請求項の第２加算器の一例に相当し、第２ＥＡＧ６３−２は、前記第２加算器の他の一例に相当する。
【０１１２】
以上説明したように、本実施形態におけるデータ処理装置および畳み込み演算装置の各一例としての畳み込み層１１１およびこれを用いた畳み込みニューラルネットワーク装置（ＣＮＮ装置）Ｗは、メモリアドレスが非連続で変化する情報処理も実行できる。このため、上記畳み込み層１１１およびＣＮＮ装置Ｗは、多重ループの情報処理を停止することなく連続的に実行できる。したがって、上記畳み込み層１１１およびＣＮＮ装置Ｗは、１枚ずつ画像を処理する場合でも、演算効率をより向上できる。
【０１１３】
また、上記畳み込み層１１１およびＣＮＮ装置Ｗは、２行１列のＰＥ３１−２１や２行２列のＰＥ３１−２２のように、数値範囲内ではメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理できる。したがって、上記畳み込み層１１１およびＣＮＮ装置Ｗは、このような情報処理を停止することなく連続的に実行できる。
【０１１４】
また、上記畳み込み層１１１およびＣＮＮ装置Ｗは、２行３列のＰＥ３１−２３や２行４列のＰＥ３１−２４のように、数値範囲内ではメモリアドレスを一定値に固定的に生成することでメモリにおける１個の記憶領域に記憶されているデータを続けて用いてデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを一定値で生成することでメモリにおける１個の記憶領域に記憶されているデータを続けて用いてデータ処理できる。したがって、上記畳み込み層１１１およびＣＮＮ装置Ｗは、このような情報処理を停止することなく連続的に実行できる。
【０１１５】
そして、上記畳み込み層１１１およびＣＮＮ装置Ｗは、第１１、第１２、第２１、第２２、第３１および第３２切換え器６６−１１、６６−１２、６６−２１、６６−２２、６６−３１、６６−３２それぞれに設定される各設定値を所定の値に設定することで、これら情報処理を行うアドレス生成器を同一構成で構成できる。
【０１１６】
本明細書は、上記のように様々な態様の技術を開示しているが、そのうち主な技術を以下に纏める。
【０１１７】
一態様にかかるデータ処理装置は、アレイ状に配置された複数のプロセッサエレメントを備えたデータ処理装置であって、前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備え、前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化で互いに隣接する２個のメモリアドレスを生成することを含む。好ましくは、上述のデータ処理装置において、前記プロセッサエレメントは、演算処理を行う算術論理演算器をさらに備える。
【０１１８】
このようなデータ処理装置は、前記アドレス生成器を備えるので、メモリアドレスが非連続で変化する情報処理も実行できる。このため、上記データ処理装置は、多重ループの情報処理を停止することなく連続的に実行できる。したがって、上記データ処理装置は、１枚ずつ画像を処理する場合でも、演算効率をより向上できる。
【０１１９】
他の一態様では、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化でメモリアドレスを生成する。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化で互いに隣接する２個のメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化で互いに隣接する２個のメモリアドレスを生成する。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記複数の数値範囲における互いに隣接する２個の数値範囲の一方の最終のメモリアドレスと、前記２個の数値範囲の他方の最初のメモリアドレスとを非連続な変化（すなわち、異なる値）で生成する。
【０１２０】
このようなデータ処理装置は、前記アドレス生成器を備えるので、前記数値範囲内ではメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理できる。したがって、上記データ処理装置は、このような情報処理を停止することなく連続的に実行できる。
【０１２１】
他の一態様では、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化でメモリアドレスを生成する。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記複数の数値範囲における互いに隣接する２個の数値範囲の一方の最終のメモリアドレスと、前記２個の数値範囲の他方の最初のメモリアドレスとを非連続な変化（すなわち、異なる値）で生成する。
【０１２２】
このようなデータ処理装置は、前記アドレス生成器を備えるので、前記数値範囲内ではメモリアドレスを一定値に固定的に生成することでメモリにおける１個の記憶領域に記憶されているデータを続けて用いてデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを一定値で生成することでメモリにおける１個の記憶領域に記憶されているデータを続けて用いてデータ処理できる。したがって、上記データ処理装置は、このような情報処理を停止することなく連続的に実行できる。
【０１２３】
他の一態様では、上述のデータ処理装置において、前記アドレス生成器は、予め設定された所定の個数の前記メモリアドレスを生成し、外部から入力される第１入力値と予め設定された所定の第１条件値とを比較する第１比較器と、予め設定された所定の第１および第２設定値が入力され、前記第１比較器の第１比較結果に基づいて前記第１および第２設定値のうちのいずれかを出力する第１切換え器と、外部から入力される第２入力値と予め設定された所定の第２条件値とを比較する第２比較器と、予め設定された所定の第３および第４設定値が入力され、前記第２比較器の第２比較結果に基づいて前記第３および第４設定値のうちのいずれかを出力する第２切換え器と、前記第１および第２切換え器それぞれから出力された第１および第２出力値と、予め設定された第５設定値とを加算する第１加算器と、第３切換え器と、レジスタと、前記第３切換え器から出力された第３出力値と、前記第１加算器から出力された第１加算結果と加算し、その第２加算結果を前記メモリアドレスとして前記レジスタおよび前記メモリそれぞれに出力する第２加算器とを備え、前記レジスタは、前記第２加算器から出力された前記メモリアドレスを保持して前記第２比較器へ出力し、前記第３切換え器は、前記レジスタで保持されている前記メモリアドレス、および、予め設定された所定の第５設定値が入力され、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスを生成する場合には、前記所定の第５設定値を前記第３出力値として出力し、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスの次以降のメモリアドレスを生成する場合には、前記レジスタで保持されている前記メモリアドレスを前記第３出力値として出力する。
【０１２４】
このようなデータ処理装置は、第１ないし第３切換え器それぞれに設定される第１ないし第５設定値を所定の値に設定することで、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化で互いに隣接する２個のメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化で互いに隣接する２個のメモリアドレスを生成する前記アドレス生成器を構成できる一方、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する２個の数値範囲間では非連続な変化で互いに隣接する２個のメモリアドレスを生成する前記アドレス生成器を構成できる。
【０１２５】
他の一態様にかかる畳み込み演算装置は、これら上述のいずれかのデータ処理装置を備え、前記データ処理装置を用いて畳み込み演算を行う。
【０１２６】
このような畳み込み演算装置は、これら上述のいずれかのデータ処理装置を備えて畳み込み演算を行うので、多重ループの情報処理で構成される畳み込み演算を停止することなく連続的に実行できる。したがって、上記畳み込み演算装置は、１枚ずつ画像を処理する場合でも、演算効率をより向上できる。
【０１２７】
他の一態様にかかる畳み込みニューラルネットワーク装置は、これら上述のいずれかのデータ処理装置を備え、前記データ処理装置を用いて畳み込みニューラルネットワークを形成する。
【０１２８】
このような畳み込みニューラルネットワーク装置は、これら上述のいずれかのデータ処理装置を備えて畳み込み演算を行うので、多重ループの情報処理で構成される畳み込み演算を停止することなく連続的に実行できる。したがって、上記畳み込み演算装置は、１枚ずつ画像を処理する場合でも、演算効率をより向上できる。
【０１２９】
この出願は、明細書、クレーム、図面および要約を含む、２０１７年１月１７日に出願された日本国特許出願特願２０１７−６０５５を基礎とするものであり、その全体の開示は、その全体において参照により本願に組み込まれる。
【０１３０】
本発明の実施形態が詳細に図示され、かつ、説明されたが、それは単なる図例及び実例であって限定ではない。本発明の範囲は、添付されたクレームの文言によって解釈されるべきである。
【０１３１】
本発明を表現するために、上述において図面を参照しながら実施形態を通して本発明を適切且つ十分に説明したが、当業者であれば上述の実施形態を変更および／または改良することは容易に為し得ることであると認識すべきである。したがって、当業者が実施する変更形態または改良形態が、請求の範囲に記載された請求項の権利範囲を離脱するレベルのものでない限り、当該変更形態または当該改良形態は、当該請求項の権利範囲に包括されると解釈される。
【産業上の利用可能性】
【０１３２】
本発明によれば、データを処理するデータ処理装置、前記データ処理装置を備える畳み込み演算装置および前記データ処理装置を備える畳み込みニューラルネットワーク装置が提供できる。
【図１】
2018135088.tif 000004
【図２】
2018135088.tif 000005
【図３】
2018135088.tif 000006
【図４】
2018135088.tif 000007
【図５】
2018135088.tif 000008
【図６】
2018135088.tif 000009
【図７】
2018135088.tif 000010
【図８】
2018135088.tif 000011
【図９】
2018135088.tif 000012
【図１０】
2018135088.tif 000013
【図１１】
2018135088.tif 000014
【図１２】
2018135088.tif 000015
【図１３】
2018135088.tif 000016
【図１４】
2018135088.tif 000017
【図１５】
2018135088.tif 000018
【図１６】
2018135088.tif 000019
【国際調査報告】
2018135088.tif 000020
2018135088.tif 000021