(57)【要約】  例において、集積回路（ＩＣ）内に実装されたニューラルネットワークの回路は、ハードウェアニューロン（１２４）のレイヤ（１２０）を含み、レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、ハードウェアニューロンの各々は、複数の入力の少なくとも一部分から第１のロジック信号を受信する入力と、第１のロジック信号および複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号とを供給する出力とを有するロジック回路（３０２）と、第２のロジック信号を受信する入力と、予め定められたロジック状態を有する第２のロジック信号の数を示すカウント信号を供給する出力とを有するカウンタ回路（３０４）と、カウント信号を受信する入力とカウント信号と複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給する出力を有する比較回路（３０６）とを含み、ハードウェアニューロンの各々の比較回路によって出力されるロジック信号は、複数の出力のそれぞれ１つとして提供される。
2019531535.tif 000002
【特許請求の範囲】
【請求項１】
集積回路（ＩＣ）内にニューラルネットワークが実装された回路であって、
ハードウェアニューロンのレイヤを備え、前記レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、前記ハードウェアニューロンの各々は、
第１のロジック信号を前記複数の入力の少なくとも一部分から受信する入力と、前記第１のロジック信号および前記複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給する出力とを有するロジック回路と、
前記第２のロジック信号を受信する入力と、予め定められたロジック状態を有する前記第２のロジック信号の数を示すカウント信号を供給する出力とを有するカウンタ回路と、
前記カウント信号を受信する入力と、前記カウント信号と前記複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給する出力とを有する比較回路と、を含み、
前記ハードウェアニューロンの各々の前記比較回路によって出力される前記ロジック信号は、前記複数の出力のそれぞれ１つとして提供される、回路。
【請求項２】
前記ハードウェアニューロンの各々の前記ロジック回路へ入力される前記第１のロジック信号は、前記レイヤへの前記複数の入力である、請求項１に記載の回路。
【請求項３】
前記レイヤは、前記複数の重みを供給する複数の重み信号を受信するように構成され、前記ハードウェアニューロンの各々内の前記ロジック回路は、ＸＮＯＲ回路である、請求項１または請求項２に記載の回路。
【請求項４】
前記ハードウェアニューロンの少なくとも一部分内の前記ロジック回路は、前記複数の重みの各々のための固定値に基づくパス回路またはインバータのいずれかである、請求項１〜請求項３のいずれか１項に記載の回路。
【請求項５】
前記ニューラルネットワークは、複数のレイヤを備え、前記回路は、
前記複数のレイヤの各々をハードウェアニューロンの前記レイヤに時間シーケンス順にマップするように構成される制御回路をさらに備える、請求項１〜請求項４のいずれか１項に記載の回路。
【請求項６】
入力データの複数のセットの各々を前記レイヤの前記複数の入力に時間シーケンス順に供給するように構成される制御回路をさらに備える、請求項１〜請求項５のいずれか１項に記載の回路。
【請求項７】
重みの複数のセットの各々を前記レイヤの前記複数の重みとして時間シーケンス順に供給するように構成される制御回路をさらに備える、請求項１〜請求項５のいずれか１項に記載の回路。
【請求項８】
ハードウェアニューロンの前記レイヤは、ハードウェアニューロンの第１のレイヤであり、前記複数の入力、前記複数の出力、前記複数の重み、および前記複数の閾値はそれぞれ、第１の複数の入力、第１の複数の出力、第１の複数の重み、および第１の複数の閾値であり、前記回路は、
ハードウェアニューロンの第２のレイヤをさらに備え、前記第２のレイヤは、第２の複数の入力、第２の複数の出力、第２の複数の重み、および第２の複数の閾値を含み、
前記第２のレイヤの前記第２の複数の入力は、前記第１のレイヤの前記第１の複数の出力である、請求項１〜請求項５のいずれか１項に記載の回路。
【請求項９】
集積回路（ＩＣ）内のニューラルネットワークの実装方法であって、
前記ＩＣ内にハードウェアニューロンのレイヤを実装することを含み、前記レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、
前記複数のニューロンの各々において、
第１のロジック信号を前記複数の入力の少なくとも一部分から受信することと、前記第１のロジック信号および前記複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給することと、
前記第２のロジック信号を受信し、予め定められたロジック状態を有する前記第２のロジック信号の数を示すカウント信号を供給することと、
前記カウント信号を受信し、前記カウント信号と前記複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給することとを備える、方法。
【請求項１０】
前記ハードウェアニューロンの各々への前記第１のロジック信号入力は、前記レイヤへの前記複数の入力である、請求項９に記載の方法。
【請求項１１】
前記レイヤは、前記複数の重みを供給する複数の重み信号を受信するように構成され、前記ハードウェアニューロンの各々は、ＸＮＯＲ回路を含む、請求項９に記載の方法。
【請求項１２】
前記ハードウェアニューロンの少なくとも一部分は、前記複数の重みの各々のための固定値に基づくパス回路またはインバータのいずれかを含む、請求項９に記載の方法。
【請求項１３】
前記ニューラルネットワークは、複数のレイヤを備え、前記方法は、
前記複数のレイヤの各々をハードウェアニューロンの前記レイヤに時間シーケンス順にマッピングすることをさらに備える、請求項９に記載の方法。
【請求項１４】
入力データの複数のセットの各々を前記レイヤの前記複数の入力に時間シーケンス順に供給することと、
重みの複数のセットの各々を前記レイヤの前記複数の重みとして時間シーケンス順に供給することとをさらに備える、請求項９に記載の方法。
【請求項１５】
ハードウェアニューロンの前記レイヤは、ハードウェアニューロンの第１のレイヤであり、前記複数の入力、前記複数の出力、前記複数の重み、および前記複数の閾値はそれぞれ、第１の複数の入力、第１の複数の出力、第１の複数の重み、および第１の複数の閾値であり、前記方法は、
ハードウェアニューロンの第２のレイヤを実装することをさらに備え、前記第２のレイヤは、第２の複数の入力、第２の複数の出力、第２の複数の重み、および第２の複数の閾値を含み、
前記第２のレイヤの前記第２の複数の入力は、前記第１のレイヤの前記第１の複数の出力である、請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本開示の例は、一般に電子回路に関し、特に、プログラマブル集積回路（ＩＣ）上のバイナリニューラルネットワークに関する。
【背景技術】
【０００２】
背景
ニューラルネットワークを活用するために、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）といったプログラマブル集積回路（ＩＣ）の使用における新たな関心がある。ニューラルネットワークの現在のＦＰＧＡ実装は、典型的にシストリックアレイアーキテクチャに基づく浮動小数点または固定小数点積和に焦点を置く。近年、一層大きく近代的な機械学習問題が、重みおよびアクティベーションに対してバイナリ表現を使用するニューラルネットワークで、高精度を達成しつつ解決され得ることが示されている。しかし、バイナリニューラルネットワークの実装は、これまでソフトウェアに制約されてきた。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
プログラマブル集積回路（ＩＣ）上にバイナリニューラルネットワークを実装するための技術が説明される。例において、集積回路（ＩＣ）内にニューラルネットワークが実装された回路は、ハードウェアニューロンのレイヤを含み、レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、ハードウェアニューロンの各々は、複数の入力の少なくとも一部分から第１のロジック信号を受信する入力と、第１のロジック信号および複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給する出力とを有するロジック回路と、第２のロジック信号を受信する入力と、予め定められたロジック状態を有する第２のロジック信号の数を示すカウント信号を供給する出力とを有するカウンタ回路と、カウント信号を受信する入力と、カウント信号と複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給する出力とを有する比較回路とを含み、ハードウェアニューロンの各々の比較回路によって出力されるロジック信号は、複数の出力のそれぞれ１つとして提供される。
【０００４】
別の例では、ニューラルネットワークを集積回路（ＩＣ）内に実装する方法は、ＩＣ内にハードウェアニューロンのレイヤを実装することを含み、レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、複数のニューロンの各々において、第１のロジック信号を複数の入力の少なくとも一部分から受信することと、第１のロジック信号および複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給することと、第２のロジック信号を受信し、予め定められたロジック状態を有する第２のロジック信号の数を示すカウント信号を供給することと、カウント信号を受信し、カウント信号と複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給することとを含む。
【０００５】
別の例では、プログラマブル集積回路（ＩＣ）は、ハードウェアニューロンのレイヤを実装するように構成されるプログラマブルファブリックを含み、レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含む。ハードウェアニューロンの各々は、複数の入力の少なくとも一部分から第１のロジック信号を受信する入力と、第１のロジック信号および複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給する出力とを有するロジック回路と、第２のロジック信号を受信する入力と、予め定められたロジック状態を有する第２のロジック信号の数を示すカウント信号を供給する出力を有するカウンタ回路と、カウント信号を受信する入力と、カウント信号と複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給する出力とを有する比較回路とを含む。ハードウェアニューロンの各々の比較回路によって出力されるロジック信号は、複数の出力のそれぞれ１つとして提供される。
【０００６】
これらおよびその他態様は、以下の詳細な説明を参照して理解され得る。
図面の簡単な説明
上記の特徴を詳細に理解することができるように、上記で簡単に要約されたより具体的な説明は、例示的な実装形態を参照することによって得られることができ、そのいくつかは添付された図面に示される。しかし、添付された図面は例示的な例の実装形態のみを示しており、したがってその範囲を限定すると考えられるべきではないことを留意すべきである。
【図面の簡単な説明】
【０００７】
【図１】例に係るプログラマブル集積回路（ＩＣ）内のハードウェア実装上へのバイナリニューラルネットワークのマッピングを表すブロック図である。
【図２】例に係るニューラルネットワーク回路のレイヤ回路を表すブロック図である。
【図３】例に係るハードウェアニューロンを表すブロック図である。
【図４】例に係るニューラルネットワーク回路のレイヤ回路を表すブロック図である。
【図５】例に係るハードウェアニューロンの特殊化を示すブロック図である。
【図６】（「マクロレベルフォールディング」とも称される）マクロレベル上でバイナリニューラルネットワークのレイヤをフォールディングした例を表すブロック図である。
【図７】例に係るマクロレベルフォールディングの方法を表すフロー図である。
【図８】（「マクロレベルフォールディング」とも称される）マクロレベル上でバイナリニューラルネットワークのニューロンをフォールディングした例を表すブロック図である。
【図９】例に係るニューラルネットワーク実装のハードウェアレイヤを有するフィールドプログラマブルゲートアレイ（ＦＰＧＡ）のアーキテクチャを図示する。
【発明を実施するための形態】
【０００８】
理解を容易にするために、図面に対して共通の同一の要素を示すために、可能な場合は同一の参照番号が使用される。１つの例の要素は、他の例に有益に組み込まれてもよいと考えられる。
【０００９】
詳細な説明
様々な特徴が、図面を参照して以下に説明される。図面は一定の縮尺で描かれるとは限らず、同様の構造または機能の要素は、図面全体を通して同様の参照番号で表されているとは限らないということに留意すべきである。図は、特徴の説明を容易にすることのみを意図されていることに留意すべきである。それらは、請求された発明の網羅的な説明としても請求された発明の範囲に対する限定としても意図されていない。さらに、示された例は、示されたすべての態様または利点を有する必要はない。特定の例に関して説明された態様または利点は必ずしもその例に限定されず、他の例においても、たとえそのように示されていなくても、またはそのように明示的に説明されていなくても、実施可能である。
【００１０】
本開示はバイナリニューラルネットワークの高効率のハードウェア実装を説明する。例では、ハードウェア実装は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）といったプログラマブル集積回路（ＩＣ）のアーキテクチャにマップされる。実装は、入力データを高い計算密度で処理する多数のニューロンをマップする。たとえば、完全なニューラルネットワークがＦＰＧＡの内部に完全にアンロールされ得ると仮定すれば、ニューラルネットワークは、到来データセット（例えば画像）をクロック周波数において分類することができる。控え目な１００ＭＨｚのクロック周波数を仮定すれば、そのようなニューラルネットワーク実装は、毎秒１億データセット（例えば、毎秒画像）において入力データセットを分類することができる。その他の例では、ニューラルネットワークを実装するために、ある量のフォールディングが行われる。ここで説明されるニューラルネットワークのハードウェア実装は、浮動小数点ニューラルネットワークを汎用処理エンジンのシストリックアレイ上にマップするＦＰＧＡ内の以前の実装とは根本的に異なる。そのような浮動小数点実装は、現在毎秒１００〜３００データセットを処理する。さらに、ここで説明されるニューラルネットワーク実装は、ＦＰＧＡ内の以前の浮動小数点実装およびグラフィックスプロセッシングユニット（ＧＰＵ）を使用する重畳実装よりも少ない電力を消費する。
【００１１】
バイナリニューラルネットワークの利益は、さらにここに説明されるように、標準的な浮動小数点積和演算が排他的ＮＯＲおよびビット数演算になることである。基本アーキテクチャは、いくつかのレイヤを含み、これは、全接続されるか部分接続され得る（例えばコンボリューション（畳み込み）、プーリング等。）。各レイヤは、いくつかのハードウェアニューロンを含む。各ハードウェアニューロンは、ニューロンを全データ入力および対応する重みのＸＮＯＲとして計算し、結果内のロジック「１」ビットの数をカウントし、カウントを閾値と比較する。ハードウェアニューロンは、ビット数が閾値よりも大きいときに真（ロジック「１」）を返し、その他のときに偽（ロジック「０」）を返す。全接続レイヤおよび部分接続レイヤは、ハードウェアニューロンが入力データを受信する方法において異なる。全接続レイヤについて、入力は、全ハードウェアニューロンにブロードキャストされる。部分接続レイヤについて、各ハードウェアニューロンは、入力データの部分上で動作する。たとえば、コンボリューションレイヤでは、各ハードウェアニューロンは、入力データの一連の部分上で動作し、これにより対応する一連のアクティベーションを生成する。実装に依存して、プーリングレイヤ（例えばマックスプーリングレイヤ）は、以前のレイヤの出力をダウンサンプルするために使用されることができる。
【００１２】
いくつかの実装では、重みおよび閾値は、まれに（例えばネットワークが再トレーニングされた後にのみ）更新され得る。このため、重みおよび／または閾値は、「ハード化」され得、このため特殊化されたハードウェアニューロンを生成する。ネットワークの特殊化は、ＸＮＯＲ動作および／または比較動作に関連付けられた全リソース要件を除去するべきである。さらに、ＦＰＧＡ内に実装されたとき、ネットワークを特殊化することは、非特殊化されたネットワーク実装に比べて著しくより少ないルーティングリソースを消費することができる。
【００１３】
いくつかの実装では、大きなネットワークは、リソース制約のために、完全にアンロールされた実装を可能としないかもしれない。たとえば、ＦＰＧＡ内のルーティング制限は、多数のシナプスを有する大きな全接続レイヤの効率的な実装を防ぎ得る。このため、いくつかの例では、ネットワークは、ハードウェアアーキテクチャ上にフォールドされ得る。フォールディングは、粒度を変化させることで達成されることができる。マクロレベルでは、全体レイヤはアーキテクチャ上に繰り返しフォールドされ得る。代替的に、いくつかのニューロンは同じハードウェアニューロン上にフォールドされ得、いくつかのシナプスは、（ルーティング要件を減少する）同じ接続上にフォールドされ得る。バイナリニューラルネットワーク実装のこれらおよびさらなる態様は、以下に図面を参照して説明される。
【００１４】
図１は、例に係るプログラマブル集積回路（ＩＣ）内のハードウェア実装上へのバイナリニューラルネットワーク１０１のマッピングを表すブロック図である。バイナリニューラルネットワークは、１つまたは複数のレイヤ１０２を含む。各レイヤ１０２は、シナプス１０６（例えば入力）およびアクティベーション１０８（例えば出力）を有するニューロン１０４を含む。レイヤ（複数可）１０２への入力は、バイナリ入力１１０、バイナリ重み１１２、および閾値１１４を含む。レイヤ（複数可）１０２の出力は、バイナリ出力１１６を含む。各バイナリ入力１１０は、１ビット値（例えばロジック「０」またはロジック「１」）である。同様に、各バイナリ重み１１２は、１ビット値である。各閾値１１４は、整数である。各バイナリ出力１１６は、１ビット値である。各ニューロン１０４は、１つまたは複数のバイナリ入力１１０をそれぞれの１つまたは複数のシナプス１０６を通して受信する。各ニューロン１０４はまた、シナプス１０６のための１つまたは複数のバイナリ重み１１２および閾値１１４を受信する。各ニューロン１０４は、バイナリ出力１１６をアクティベーション１０８を通して供給する。ニューロン１０４は、そのバイナリ入力（複数可）、バイナリ重み（複数可）、および閾値によりそのバイナリ出力（例えばロジック「１」）がアサートされるときに「アクティベートされる」。
【００１５】
いくつかのレイヤ１０２は、たとえば図２に示されるように「全接続」状態にされ得る。全接続レイヤでは、所与のバイナリ入力１１０のセットまたは以前のレイヤからのアクティベーション１０８の所与のセットは、全ニューロン１０４にブロードキャストされる。すなわち、各ニューロン１０４は、入力の同じセットの上で動作する。いくつかのレイヤ１０２は、「部分接続」状態にされ得る。部分接続レイヤでは、各ニューロン１０４は、バイナリ入力１１０の所与のセットの部分または以前のレイヤからのアクティベーション１０８の所与のセット上で動作する。異なるニューロン１０４は、入力セットの同じまたは異なる部分上で動作することができる。バイナリ入力１１０は、１つまたは複数の画像といった、１つまたは複数のデータセットを提示することができる。画像の例では、全接続レイヤへの入力は、全体画像であり、部分接続レイヤへの入力は、画像の部分である。いくつかのレイヤ１０２は「コンボリューション」レイヤであることができる。コンボリューションレイヤでは、各ニューロン１０４は、バイナリ入力１１０の所与のセットの一連の部分または以前のレイヤからのアクティベーション１０８の所与のセット上で動作する。
【００１６】
例では、バイナリニューラルネットワーク１０１は、プログラマブルＩＣ１１８内のハードウェアにマップされる。プログラマブルＩＣの例は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。ＦＰＧＡのアーキテクチャの例は、以下に説明される。バイナリニューラルネットワーク１０１は、プログラマブルＩＣ内のハードウェアにマップされるものとして説明されるが、バイナリニューラルネットワーク１０１は、任意の種類のＩＣ（例えば用途特定集積回路（ＡＳＩＣ））内のハードウェアにマップされ得ると理解されるべきである。
【００１７】
バイナリニューラルネットワーク１０１のハードウェア実装は、レイヤ回路１２０を含む。各レイヤ回路１２０は、入力接続１２２、ハードウェアニューロン１２４、および出力接続１２６を含む。レイヤ（複数可）１０２は、レイヤ回路（複数可）１２０にマップされる。シナプス１０６は、入力接続１２２にマップされる。ニューロン１０４は、ハードウェアニューロン１２４にマップされる。アクティベーション１０８は、出力接続１２６にマップされる。レイヤ回路（複数可）１２０は、レイヤ（複数可）１０２を記述する仕様に基づいてコンピュータシステム上で実行する回路設計ツールを使用して生成され得る。回路設計ツールは、レイヤ回路（複数可）１２０をプログラマブルＩＣ１１８内で構成するための構成データを生成することができる。代替的に、非プログラマブルＩＣ（例えばＡＳＩＣ）に対して、回路設計ツールは、レイヤ回路（複数可）１２０を有するＩＣを製造するためのマスクデータを生成することができる。
【００１８】
プログラマブルＩＣ１１８は、たとえば図３に示されるように、レイヤ回路１２０の動作を容易にするための、メモリ回路（複数可）１２８および制御回路１３０を含む回路を含む。メモリ回路（複数可）１２８は、レイヤ回路（複数可）１２０のためのバイナリ入力、バイナリ重み、閾値、およびバイナリ出力を保存することができる。メモリ回路（複数可）１２８は、レジスタ、先入れ先出し（ＦＩＦＯ）回路等を含むことができる。制御回路１３０は、メモリ回路（複数可）１２８への書き込みおよびそこからの読み込みを制御することができる。その他の例では、バイナリ入力は、外部回路から直接来ることができ、出力は、外部回路に直接送信され得る。重みおよび閾値は、図５に示されるようにレイヤを特殊化するときにロジックの一部としてハードコードされ得る。メモリ回路（複数可）１２８は、オンチップまたはオフチップであり得る。
【００１９】
図２は、例に係るニューラルネットワーク回路のレイヤ回路１２０Ａを表すブロック図である。レイヤ回路１２０Ａは、全接続レイヤの例であり、図１に示される任意のレイヤ回路１２０として使用されることができる。レイヤ回路１２０Ａは、ハードウェアニューロン２０２−１〜２０２−Ｙ（一般にハードウェアニューロン２０２または複数のハードウェアニューロン２０２とも称される）を含み、ここではＹは、正の整数である。ハードウェアニューロン２０２の各々のデータ入力（例えばシナプス）は、バイナリ入力を供給するロジック信号を受信する。バイナリ入力は、バイナリ入力１１０のセットまたは以前のレイヤからのアクティベーションのセットであることができる。例では、各ハードウェアニューロン２０２は、Ｘ個のロジック信号を受信するために、Ｘ個のデータ入力（例えばＸ個のシナプス）を含み、ここではＸは、正の整数である。Ｘ個のロジック信号の各々は、単一のバイナリ入力を提供する。
【００２０】
ハードウェアニューロン２０２の各々は、バイナリ重みを供給するロジック信号を受信する重み入力を含む。各ニューロン２０２は、バイナリ重みの同じまたは異なるセットを受信することができる。各ハードウェアニューロン２０２は、Ｘ個のデータ入力に対応するＸ個のバイナリ重みを受信する。各ハードウェアニューロン２０２はまた、その他のハードウェアニューロン２０２と同じまたはそれらとは異なることができる閾値を受信する。ハードウェアニューロン２０２の各々は、ロジック信号を出力（例えば１ビット出力）として生成する。ハードウェアニューロン２０２−１〜２０２−Ｙは、Ｙ個のバイナリ出力（例えばＹ個のアクティベーション）を提供するＹ個のロジック信号をまとめて出力する。
【００２１】
図３は、例に係るハードウェアニューロン２０２を表すブロック図である。ハードウェアニューロン２０２は、排他的ＮＯＲ（ＸＮＯＲ）回路３０２、カウント回路３０４、および比較回路３０６を含む。ＸＮＯＲ回路３０２は、バイナリ入力を供給するＸ個のロジック信号およびバイナリ重みを供給するＸ個のロジック信号を受信する。ＸＮＯＲ回路３０２は、バイナリ入力およびバイナリ重みのそれぞれのＸＮＯＲ結果を供給するＸ個のロジック信号を出力する。カウント回路３０４は、予め定められたロジック状態を有するＸＮＯＲ回路３０２によって出力されるＸ個のロジック信号の数（例えばＸＮＯＲ回路３０２によって出力されるロジック「１の」数）を数えるように構成される。カウント回路３０４は、カウント値を供給するカウント信号を出力する。カウント信号のビットの数は、ｌｏｇ２（Ｘ）＋１である。たとえば、Ｘが２５６である場合、カウント信号は、９つのビットを含む。比較回路３０６は、カウント信号および閾値を供給する閾値信号を受信する。閾値信号は、カウント信号と同じ幅を有する（例えばｌｏｇ２（Ｘ）＋１）。比較回路３０６は、１ビット出力値を供給するロジック信号を出力する。比較回路３０６は、カウント値が閾値よりも大きいときに出力ロジック信号をアサートし（例えばそれをロジック「１」へと設定する）、その他の場合に出力ロジック信号をデアサートする（例えばそれをロジック「０」に設定する）。
【００２２】
レイヤの各ハードウェアニューロンは、レイヤの種別によらず同じく動作する。図３に示されるように、各ハードウェアニューロンは、ＸＮＯＲ回路３０２を使用して、バイナリ入力とバイナリ重みとの間のＸＮＯＲを計算する。カウント回路３０４は、ＸＮＯＲ動作の結果内の予め定められたロジック状態の数を数える（例えばロジック「１」の数）。比較回路３０６は、カウント値を閾値と比較し、その出力に従ってアサートするかデアサートする。
【００２３】
図４は、例に係るニューラルネットワーク回路のレイヤ回路１２０Ｂを表すブロック図である。レイヤ回路１２０Ｂは、部分接続レイヤまたはコンボリューションレイヤの例であり、図１に示される任意のレイヤ１２０として使用されることができる。ハードウェアニューロン２０２の各々がバイナリ入力の個々のセットを受信する（すなわち、バイナリ入力は、ハードウェアニューロン２０２の全てにはブロードキャストされない）ということにおいて、図４の例は図３のものとは異なる。バイナリ入力の各々セットは、バイナリ入力１１０のセットの部分または以前のレイヤからのアクティベーションのセットの部分であることができる。各ハードウェアニューロン２０２に対する閾値入力は、明確性のため図４から省略される。図４に示されるハードウェアニューロン２０２は、図３に示されるものと同じ構造を有する。
【００２４】
たとえば、レイヤ回路１２０Ｂは、コンボリューションレイヤとして使用されることができる。そのような例では、入力データセット（例えば画像）は、各々が高さＨおよび幅Ｗを有するＮ個の入力特徴マップのセットに分割され得る。対応するバイナリ重みは、各々Ｋ×Ｋバイナリ重み値を有するＮ×Ｍセットに分割され得る。そのような例では、値Ｘは、Ｋ×Ｋに設定され得、値Ｙは、Ｍ×Ｗ×Ｈに設定され得る。一連のバイナリ入力セットは、一連のコンボリューションを実装するために、ハードウェアニューロン２０２の各々に提供される。シーケンスは、制御回路１３０によるメモリ回路（複数可）１２８の制御を通して制御されることができる。
【００２５】
図５は、例に係るハードウェアニューロンの特殊化を示すブロック図である。例において、ＸＮＯＲ回路３０２は、Ｘ個のデータ入力の各々についてＸＮＯＲゲートを含む。ｉ番目のＸＮＯＲゲートは、結果［ｉ］＝入力［ｉ］ＸＮＯＲ重み［ｉ］を出力する。別の例では、ＸＮＯＲ回路３０２は、重みをハード化することによって特殊化され得る。可変重みを有するよりむしろ、重みは固定され得、それぞれの重み値の固定された状態に依存して、ＸＮＯＲゲートは、アイデンティティゲート（例えばパススルーゲート）またはＮＯＴゲート（例えばインバータ）のいずれかに減少され得る。図５に示されるように、ＸＮＯＲ回路３０２は、各々データ入力値を供給するロジック信号を受信する回路５０２−１〜５０２−Ｘを含むことができる。各回路５０２は、それぞれの重み値に応じて、アイデンティティゲートまたはＮＯＴゲートのいずれかである。たとえば、ｉ番目の重みがロジック「１」である場合、ｉ番目の回路５０２−ｉはＮＯＴゲートである（例えばデータ入力［ｉ］がロジック「１」であるとき、結果［ｉ］は、ロジック「０」であり、またその逆も成立し、重み［ｉ］＝ロジック「１」を有するＸＮＯＲ関数を実装する）。ｉ番目の重みがロジック「０」である場合、ｉ番目の回路５０２−ｉはアイデンティティゲートである（例えばデータ入力［ｉ］がロジック「１」であるとき、結果［ｉ］はロジック「１」であり、またその逆も成立し、重み［ｉ］＝ロジック「０」を有するＸＮＯＲ関数を実装する）。ハードウェアニューロンのそのような特殊化は、重み値が事前にわかっているときに、実装され得る。
【００２６】
例では、バイナリニューラルネットワーク１０１は、フォールディングすることなく、レイヤ回路（複数可）１２０を使用して実装される（例えば「アンフォールドされる」）。フォールドされる場合では、バイナリニューラルネットワーク１０１の各レイヤ１０２は、プログラマブルＩＣ１１８内の対応するレイヤ回路１２０を使用して実装される。その他の例では、バイナリニューラルネットワーク１０１は、いくつかの種類のフォールディングを使用して実装される。
【００２７】
図６は、（「マクロレベルフォールディング」とも称される）マクロレベル上のバイナリニューラルネットワーク１０１にレイヤ１０２をフォールディングする例を表すブロック図である。示される例では、プログラマブルＩＣ１１８は、単一のレイヤ回路１２０を含み、バイナリニューラルネットワーク１０１は、ｎ個のレイヤ１０２−１〜１０２−ｎを含み、ここでｎは１よりも大きい整数である。レイヤ１０２−１〜１０２−ｎは、レイヤ回路１２０上に時分割多重化される。すなわち、レイヤ回路１２０は、レイヤ１０２−１を実現し、そしてレイヤ１０２−２を実現し、以下同様にレイヤ１０２−ｎを実現するように構成される。レイヤ回路１２０によって生成される結果は、レイヤ１０２の次の実行への入力として使用されるために保存される。その他の例では、プログラマブルＩＣ１１８は、複数のレイヤ回路１２０を含むことができ、レイヤ１０２は、複数のレイヤ回路１２０にわたってフォールドされる。
【００２８】
図７は、例に係るマクロレベルフォールディングの方法７００を表すフロー図である。方法７００は、図１に示されるようなプログラマブルＩＣ１１８を使用して実装され得る。方法７００は、ステップ７０２において開始し、ここで、制御回路１３０は、バイナリニューラルネットワーク１０１の第１のレイヤに対応するバイナリ重みの第１のセットおよび閾値の第１のセットを、レイヤ回路（複数可）１２０によって使用するためにメモリ回路（複数可）１２８内にロードする。ステップ７０４において、レイヤ回路（複数可）１２０は、それへのバイナリ入力を処理する。ステップ７０６において、制御回路１３０は、メモリ回路（複数可）１２８内にレイヤ回路（複数可）１２０の出力を保存する。ステップ７０８において、制御回路１３０は、バイナリニューラルネットワーク１０１の次のレイヤに対応するバイナリ重みの次のセットおよび閾値の次のセットをレイヤ回路（複数可）１２０による使用のためにメモリ回路（複数可）１２０内にロードする。ステップ７１０において、レイヤ回路（複数可）１２０は、以前のレイヤのためのレイヤ回路（複数可）１２０によって生産されたバイナリ出力を処理する。ステップ７１２において、制御回路１３０は、実装されるべきバイナリニューラルネットワーク１０１のさらなるレイヤ１０２があるかどうかを決定する。そうであれば、方法７００は、ステップ７０６に戻って繰り返す。そうでなければ、方法７００は、ステップ７１４に進み、ここでは、レイヤ回路（複数可）１２０のバイナリ出力は最終の出力として提供される。
【００２９】
図８は、（「マクロレベルフォールディング」とも称される）マクロレベル上でバイナリニューラルネットワーク１０１のニューロン１０４をフォールディングする例を表すブロック図である。示される例では、バイナリ入力、バイナリ重み、および閾値の複数セットは、ハードウェアニューロン１２４への入力として提供される（例えば入力のｎセット）。すなわち、ｎ個のニューロン１０４は、ハードウェアニューロン１２４上にフォールドされる。ｎ個のニューロンの各々は、バイナリ入力、バイナリ重み、および閾値の所与のセットによって表される。ハードウェアニューロン１２４は、入力の各々セットに対してバイナリ出力セットを生成する（例えばｎ個の入力セットに対してｎ個のバイナリ出力セット）。
【００３０】
図９はＦＰＧＡ９００の、アーキテクチャを図示しており、これは、マルチギガビットトランシーバ（「ＭＧＴ」）１、構成可能なロジックブロック（「ＣＬＢ」）２、ランダムアクセスメモリブロック（「ＢＲＡＭ」）３、入力／出力ブロック（「ＩＯＢ」）４、構成およびクロックロジック（「構成／クロック」）５、デジタル信号処理ブロック（「ＤＳＰ」）６、特殊化された入力／出力ブロック（「Ｉ／Ｏ」）７（例えば構成ポートおよびクロックポート）、および、デジタルクロックマネージャ、アナログ−デジタルコンバータ、システム監視ロジックといったその他のプログラマブルロジック８等の、多数の異なるプログラマブルタイルを含む。いくつかのＦＰＧＡはまた、汎用プロセッサブロック（「ＰＲＯＣ」）１０を含む。ＦＰＧＡ９００は、図１に示されるプログラマブルＩＣ１１８として使用されることができる。そのような場合、レイヤ回路（複数可）１２０は、ＦＰＧＡ９００のプログラマブルファブリックを使用して実装される。
【００３１】
図１１の上側において含まれる例によって示されるように、いくつかのＦＰＧＡでは、各々のプログラマブルタイルは、同じタイルの中でプログラマブルロジック素子の入力および出力端末２０への接続を有する少なくとも１つのプログラマブル相互接続素子（「ＩＮＴ」）１１を含むことができる。各々のプログラマブル相互接続素子１１はまた、同じタイルまたはその他タイル（複数可）内の隣接するプログラマブル相互接続素子（複数可）の相互接続セグメント２２への接続を含むことができる。各プログラマブル相互接続素子１１はまた、ロジックブロック（図示しない）間の一般的なルーティングリソースの相互接続セグメント２４への接続を含むことができる。一般的なルーティングリソースは、相互接続セグメント（例えば相互接続セグメント２４）トラックおよび相互接続セグメントを接続するためのスイッチブロック（図示しない）を備えるロジックブロック（図示しない）間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント（例えば相互接続セグメント２４）は、１つまたは複数のロジックブロックに広がることができる。プログラマブル相互接続素子１１は、一般的なルーティングリソースとともに、図示されるＦＰＧＡ用のプログラマブル相互接続構造（「プログラマブル相互接続」）を実装する。
【００３２】
実装例において、ＣＬＢ２は、ユーザロジックに加え単一のプログラマブル相互接続素子（「ＩＮＴ」）１１を実装するためにプログラムされることができる構成可能なロジック素子（「ＣＬＥ」）１２を含むことができる。ＢＲＡＭ３は、１つまたは複数のプログラマブル相互接続素子に加えて、ＢＲＡＭロジック素子（「ＢＲＬ」）１３を含むことができる。例示的に、タイル内に含まれる相互接続素子の数は、タイルの高さに依存する。図示される例では、ＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、その他の数（例えば４つ）もまた使用されることができる。ＤＳＰタイル６は、適切な数のプログラマブル相互接続素子に加えてＤＳＰロジック素子（「ＤＳＰＬ」）１４を含むことができる。ＩＯＢ４は、たとえば、プログラマブル相互接続素子１１の１つのインスタンスに加えて、入力／出力ロジック素子（「ＩＯＬ」）１５の２つのインスタンスを含むことができる。当業者には明らかなように、たとえば入力／出力ロジック素子１５に接続される実際の入力／出力パッドは、例示的に入出力ロジック素子１５の面積に限定されない。
【００３３】
図示される例では、（図１１に示される）ダイの中央に近い水平な領域は、構成、クロック、およびその他制御ロジックのために使用される。この水平な領域から延在する複数または１つの垂直な列９は、クロックおよび構成信号をＦＰＧＡの幅にわたって分配する。
【００３４】
図９内に図示されるアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構成する規則的柱状構造を分断させる追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび／または汎用ロジックであることができる。たとえば、プロセッサブロック１０は、ＣＬＢおよびＢＲＡＭのいくつかの列を広がる。プロセッサブロック１０は、単一のマイクロプロセッサから、マイクロプロセッサの完全なプログラマブル処理システム、メモリコントローラ、周辺機器などに及ぶ様々な構成要素であることができる。
【００３５】
図９は、例示的なＦＰＧＡアーキテクチャを示すことのみを意図していることに留意されたい。たとえば、図９の上部に含まれる、行内のロジックブロックの数、行の相対幅、行の数と順序、行に含まれるロジックブロックの種類、ロジックブロックの相対サイズ、および相互接続／ロジック実装は純粋に例示的である。たとえば、実際のＦＰＧＡでは、ユーザロジックの効率的な実装を容易にするために、ＣＬＢが表されるいずれの場所にも複数のＣＬＢの隣接する行が含まれるのが一般的であるが、隣接するＣＬＢの行数はＦＰＧＡの全体サイズによって異なる。
【００３６】
１つの例では、集積回路（ＩＣ）内にニューラルネットワークが実装された回路が提供される。そのような回路は、ハードウェアニューロンのレイヤを含んでもよく、レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、ハードウェアニューロンの各々は、複数の入力の少なくとも一部分から第１のロジック信号を受信する入力と、第１のロジック信号と複数の重みの少なくとも一部分との排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給する出力とを有するロジック回路と、第２のロジック信号を受信する入力と、予め定められたロジック状態を有する第２のロジック信号の数を示すカウント信号を供給する出力とを有するカウンタ回路と、カウント信号を受信する入力と、カウント信号と複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給する出力とを有する比較回路とを含み、ハードウェアニューロンの各々の比較回路によるロジック信号出力は、複数の出力のそれぞれ１つとして提供されてもよい。
【００３７】
いくつかのそのような回路では、ハードウェアニューロンの各々のロジック回路への第１のロジック信号入力は、レイヤへの複数の入力であってもよい。
【００３８】
いくつかのそのような回路では、レイヤは、複数の重みを供給する複数の重み信号を受信するように構成されてもよく、ハードウェアニューロンの各々内のロジック回路はＸＮＯＲ回路であってもよい。
【００３９】
いくつかのそのような回路では、ハードウェアニューロンの少なくとも一部分内のロジック回路は、複数の重みの各々のための固定値に基づく、パス回路またはインバータであってもよい。
【００４０】
いくつかのそのような回路では、ニューラルネットワークは、複数のレイヤを含んでもよく、回路は、複数のレイヤの各々をハードウェアニューロンのレイヤに時間シーケンス順にマップするように構成される制御回路をさらに備える。
【００４１】
いくつかのそのような回路は、入力データの複数のセットの各々をレイヤの複数の入力に時間シーケンス順に供給するように構成される制御回路をさらに含んでもよい。
【００４２】
そのいくつかは、重みの複数のセットの各々をレイヤの複数の重みとして時間シーケンス順に供給するように構成される制御回路をさらに含んでもよい。
【００４３】
いくつかのそのような回路では、ハードウェアニューロンのレイヤはハードウェアニューロンの第１のレイヤであってもよく、複数の入力、複数の出力、複数の重み、および複数の閾値はそれぞれ、第１の複数の入力、第１の複数の出力、第１の複数の重み、および第１の複数の閾値であり、回路は、ハードウェアニューロンの第２のレイヤをさらに備え、第２のレイヤは、第２の複数の入力、第２の複数の出力、第２の複数の重み、および第２の複数の閾値を含み、第２のレイヤの第２の複数の入力は、第１のレイヤの第１の複数の出力であってもよい。
【００４４】
いくつかのそのような回路は、第１のレイヤの第１の複数の出力と第２のレイヤの第２の複数の入力との間に配置されるメモリ回路をさらに含んでもよい。
【００４５】
別の例では、集積回路（ＩＣ）内のニューラルネットワークの実装方法が提供されてもよい。そのような方法は、ハードウェアニューロンのレイヤをＩＣ内に実装することを含んでもよく、レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、複数のニューロンの各々において、第１のロジック信号を複数の入力の少なくとも一部分から受信し、第１のロジック信号および複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給すること、第２のロジック信号を受信し、予め定められたロジック状態を有する第２のロジック信号の数を示すカウント信号を供給することと、カウント信号を受信し、カウント信号と複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給することを含む。
【００４６】
いくつかのそのような方法では、ハードウェアニューロンの各々への第１のロジック信号入力は、レイヤへの複数の入力であってもよい。
【００４７】
いくつかのそのような方法では、レイヤは複数の重みを供給する複数の重み信号を受信するように構成されてもよく、ハードウェアニューロンの各々は、ＸＮＯＲ回路を含む。
【００４８】
いくつかのそのような方法では、ハードウェアニューロンの少なくとも一部分は、複数の重みの各々のための固定値に基づくパス回路またはインバータのいずれかを含む。
【００４９】
いくつかのそのような方法では、ニューラルネットワークは、複数のレイヤを備え、方法は、複数のレイヤの各々をハードウェアニューロンのレイヤに時間シーケンス順にマッピングすることをさらに備える。
【００５０】
いくつかのそのような方法は、入力データの複数のセットの各々をレイヤの複数の入力に時間シーケンス順に供給することをさらに含んでもよい。
【００５１】
いくつかのそのような方法は、重みの複数のセットの各々をレイヤの複数の重みとして時間シーケンス順に供給することをさらに含んでもよい。
【００５２】
いくつかのそのような方法では、ハードウェアニューロンのレイヤは、ハードウェアニューロンの第１のレイヤであってもよく、複数の入力、複数の出力、複数の重み、および複数の閾値はそれぞれ、第１の複数の入力、第１の複数の出力、第１の複数の重み、および第１の複数の閾値であり、方法は、ハードウェアニューロンの第２のレイヤを実装することをさらに備え、第２のレイヤは、第２の複数の入力、第２の複数の出力、第２の複数の重み、および第２の複数の閾値を含み、第２のレイヤの第２の複数の入力は、第１のレイヤの第１の複数の出力であってもよい。
【００５３】
いくつかのそのような方法は、第１のレイヤの第１の複数の出力と第２のレイヤの第２の複数の入力との間に配置されるメモリ回路をさらに含んでもよい。
【００５４】
別の例では、プログラマブル集積回路（ＩＣ）が提供される。そのようなＩＣは、ハードウェアニューロンのレイヤを実装するように構成されるプログラマブルファブリックを含んでもよく、レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、ハードウェアニューロンの各々は、複数の入力の少なくとも一部分から第１のロジック信号を受信する入力と、第１のロジック信号および複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給する出力とを有するロジック回路と、第２のロジック信号を受信する入力と、予め定められたロジック状態を有する第２のロジック信号の数を示すカウント信号を供給する出力とを有するカウンタ回路と、カウント信号を受信する入力と、カウント信号と複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給する出力とを有する比較回路とを含み、ハードウェアニューロンの各々の比較回路によって出力されるロジック信号は、複数の出力のそれぞれ１つとして提供されてもよい。
【００５５】
いくつかのそのようなＩＣでは、レイヤは、複数の重みを供給する複数の重み信号を受信するように構成されてもよく、ハードウェアニューロンの各々内のロジック回路は、ＸＮＯＲ回路であってもよい。
【００５６】
上記は特定の例に向けられているが、他の例およびさらなる例がその基本的範囲から逸脱することなく考案されてもよく、その範囲は以下の特許請求の範囲によって決定される。
【図１】
2019531535.tif 000003
【図２】
2019531535.tif 000004
【図３】
2019531535.tif 000005
【図４】
2019531535.tif 000006
【図５】
2019531535.tif 000007
【図６】
2019531535.tif 000008
【図７】
2019531535.tif 000009
【図８】
2019531535.tif 000010
【図９】
2019531535.tif 000011
【手続補正書】
【提出日】令和1年5月9日(2019.5.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
集積回路（ＩＣ）内にバイナリニューラルネットワークが実装された回路であって、
ハードウェアニューロンのレイヤを備え、前記レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、前記ハードウェアニューロンの各々は、
第１のロジック信号を前記複数の入力の少なくとも一部分から受信する入力と、前記第１のロジック信号および前記複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給する出力とを有するロジック回路と、
前記第２のロジック信号を受信する入力と、予め定められたロジック状態を有する前記第２のロジック信号の数を示すカウント信号を供給する出力とを有するカウンタ回路と、
前記カウント信号を受信する入力と、前記カウント信号と前記複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給する出力とを有する比較回路と、を含み、
前記ハードウェアニューロンの各々の前記比較回路によって出力される前記ロジック信号は、前記複数の出力のそれぞれ１つとして提供される、回路
【請求項２】
前記ハードウェアニューロンの各々の前記ロジック回路へと入力される前記第１のロジック信号は、前記レイヤへの前記複数の入力である、請求項１に記載の回路。
【請求項３】
前記レイヤは、前記複数の重みを供給する複数の重み信号を受信するように構成され、前記ハードウェアニューロンの各々内の前記ロジック回路は、ＸＮＯＲ回路である、請求項１または請求項２に記載の回路。
【請求項４】
前記ハードウェアニューロンの少なくとも一部分内の前記ロジック回路は、前記複数の重みの各々のための固定値に基づくパス回路またはインバータのいずれかである、請求項１〜請求項３のいずれか１項に記載の回路。
【請求項５】
前記ニューラルネットワークは、複数のレイヤを備え、前記回路は、
前記複数のレイヤの各々をハードウェアニューロンの前記レイヤに時間シーケンス順にマップするように構成される制御回路をさらに備える、請求項１〜請求項４のいずれか１項に記載の回路。
【請求項６】
入力データの複数のセットの各々を前記レイヤの前記複数の入力に時間シーケンス順に供給するように構成される制御回路をさらに備える、請求項１〜請求項５のいずれか１項に記載の回路。
【請求項７】
重みの複数のセットの各々を前記レイヤの前記複数の重みとして時間シーケンス順に供給するように構成される制御回路をさらに備える、請求項１〜請求項５のいずれか１項に記載の回路。
【請求項８】
ハードウェアニューロンの前記レイヤは、ハードウェアニューロンの第１のレイヤであり、前記複数の入力、前記複数の出力、前記複数の重み、および前記複数の閾値はそれぞれ、第１の複数の入力、第１の複数の出力、第１の複数の重み、および第１の複数の閾値であり、前記回路は、
ハードウェアニューロンの第２のレイヤをさらに備え、前記第２のレイヤは、第２の複数の入力、第２の複数の出力、第２の複数の重み、および第２の複数の閾値を含み、
前記第２のレイヤの前記第２の複数の入力は、前記第１のレイヤの前記第１の複数の出力である、請求項１〜請求項５のいずれか１項に記載の回路。
【請求項９】
集積回路（ＩＣ）内のバイナリニューラルネットワークの実装方法であって、
前記ＩＣ内にハードウェアニューロンのレイヤを実装することを含み、前記レイヤは、複数の入力、複数の出力、複数の重み、および複数の閾値を含み、
前記複数のニューロンの各々において、
第１のロジック信号を前記複数の入力の少なくとも一部分から受信することと、前記第１のロジック信号および前記複数の重みの少なくとも一部分の排他的ＮＯＲ（ＸＮＯＲ）に対応する第２のロジック信号を供給することと、
前記第２のロジック信号を受信し、予め定められたロジック状態を有する前記第２のロジック信号の数を示すカウント信号を供給することと、
前記カウント信号を受信し、前記カウント信号と前記複数の閾値のうちの閾値との間の比較を示すロジック状態を有するロジック信号を供給することとを備える、方法。
【請求項１０】
前記ハードウェアニューロンの各々へと入力される前記第１のロジック信号は、前記レイヤへの前記複数の入力である、請求項９に記載の方法。
【請求項１１】
前記レイヤは、前記複数の重みを供給する複数の重み信号を受信するように構成され、前記ハードウェアニューロンの各々は、ＸＮＯＲ回路を含む、請求項９に記載の方法。
【請求項１２】
前記ハードウェアニューロンの少なくとも一部分は、前記複数の重みの各々のための固定値に基づくパス回路またはインバータのいずれかを含む、請求項９に記載の方法。
【請求項１３】
前記ニューラルネットワークは、複数のレイヤを備え、前記方法は、
前記複数のレイヤの各々をハードウェアニューロンの前記レイヤに時間シーケンス順にマッピングすることをさらに備える、請求項９に記載の方法。
【請求項１４】
入力データの複数のセットの各々を前記レイヤの前記複数の入力に時間シーケンス順に供給することと、
重みの複数のセットの各々を前記レイヤの前記複数の重みとして時間シーケンス順に供給することとをさらに備える、請求項９に記載の方法。
【請求項１５】
ハードウェアニューロンの前記レイヤは、ハードウェアニューロンの第１のレイヤであり、前記複数の入力、前記複数の出力、前記複数の重み、および前記複数の閾値はそれぞれ、第１の複数の入力、第１の複数の出力、第１の複数の重み、および第１の複数の閾値であり、前記方法は、
ハードウェアニューロンの第２のレイヤを実装することをさらに備え、前記第２のレイヤは、第２の複数の入力、第２の複数の出力、第２の複数の重み、および第２の複数の閾値を含み、
前記第２のレイヤの前記第２の複数の入力は、前記第１のレイヤの前記第１の複数の出力である、請求項９に記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】変更
【補正の内容】
【００１８】
プログラマブルＩＣ１１８は、たとえば図１に示されるように、レイヤ回路１２０の動作を容易にするための、メモリ回路（複数可）１２８および制御回路１３０を含む回路を含む。メモリ回路（複数可）１２８は、レイヤ回路（複数可）１２０のためのバイナリ入力、バイナリ重み、閾値、およびバイナリ出力を保存することができる。メモリ回路（複数可）１２８は、レジスタ、先入れ先出し（ＦＩＦＯ）回路等を含むことができる。制御回路１３０は、メモリ回路（複数可）１２８への書き込みおよびそこからの読み込みを制御することができる。その他の例では、バイナリ入力は、外部回路から直接来ることができ、出力は、外部回路に直接送信され得る。重みおよび閾値は、図５に示されるようにレイヤを特殊化するときにロジックの一部としてハードコードされ得る。メモリ回路（複数可）１２８は、オンチップまたはオフチップであり得る。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
図９の上側において含まれる例によって示されるように、いくつかのＦＰＧＡでは、各々のプログラマブルタイルは、同じタイルの中でプログラマブルロジック素子の入力および出力端末２０への接続を有する少なくとも１つのプログラマブル相互接続素子（「ＩＮＴ」）１１を含むことができる。各々のプログラマブル相互接続素子１１はまた、同じタイルまたはその他タイル（複数可）内の隣接するプログラマブル相互接続素子（複数可）の相互接続セグメント２２への接続を含むことができる。各プログラマブル相互接続素子１１はまた、ロジックブロック（図示しない）間の一般的なルーティングリソースの相互接続セグメント２４への接続を含むことができる。一般的なルーティングリソースは、相互接続セグメント（例えば相互接続セグメント２４）トラックおよび相互接続セグメントを接続するためのスイッチブロック（図示しない）を備えるロジックブロック（図示しない）間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント（例えば相互接続セグメント２４）は、１つまたは複数のロジックブロックに広がることができる。プログラマブル相互接続素子１１は、一般的なルーティングリソースとともに、図示されるＦＰＧＡ用のプログラマブル相互接続構造（「プログラマブル相互接続」）を実装する。
【国際調査報告】
2019531535.tif 000012
2019531535.tif 000013