IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 三星電子株式会社の特許一覧

特開2024-35145IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法
<>
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図1
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図2A
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図2B
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図2C
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図2D
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図3
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図4
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図5A
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図5B
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図6A
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図6B
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図7
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図8
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図9
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図10
  • 特開-IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024035145
(43)【公開日】2024-03-13
(54)【発明の名称】IMC回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法
(51)【国際特許分類】
   G06N 3/063 20230101AFI20240306BHJP
【FI】
G06N3/063
【審査請求】未請求
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2023137663
(22)【出願日】2023-08-28
(31)【優先権主張番号】10-2022-0109261
(32)【優先日】2022-08-30
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】18/351,039
(32)【優先日】2023-07-12
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】10-2023-0093290
(32)【優先日】2023-07-18
(33)【優先権主張国・地域又は機関】KR
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.FRAM
2.MEMORY STICK
3.ブルートゥース
4.BLUETOOTH
5.ZIGBEE
(71)【出願人】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung-ro,Yeongtong-gu,Suwon-si,Gyeonggi-do,Republic of Korea
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】尹 石柱
(72)【発明者】
【氏名】李 宰赫
(72)【発明者】
【氏名】鄭 丞哲
(72)【発明者】
【氏名】權 純完
(72)【発明者】
【氏名】明 成▲みん▼
(72)【発明者】
【氏名】尹 大健
(72)【発明者】
【氏名】昌 東眞
(57)【要約】
【課題】インメモリコンピューティング(IMC)を含む装置及び方法が提供される。
【解決手段】インメモリコンピューティング(IMC)回路は、インメモリコンピューティング(IMC)回路はそれぞれのビットセルを含むメモリバンクを含む静的ランダムアクセスメモリ(SRAM)ビットセル回路を含み、各メモリバンクに対して静的ランダムアクセスメモリの同じワードラインにグループ化されるビットセル、それぞれのビットセルに対応する演算結果に対応する信号を出力するように構成された演算子、及び複数のメモリバンク間でMAC(Multi-ACCUMULATE)演算のために対象メモリバンクに属するそれぞれのビットセルに対応する演算結果を加算器に送信するよう構成されたゲート論理回路を含む。
【選択図】図2A
【特許請求の範囲】
【請求項1】
イン・メモリコンピューティング回路であって、
複数のメモリバンクと、
前記メモリバンクそれぞれの論理演算結果を受信する論理ゲートと、
を含み、
前記メモリバンクそれぞれは、
加重値を格納するビットセルと、
入力値を受信する演算器と、
を含み、
前記演算器は前記ビットセルに接続され、前記入力値を受信した前記演算器が前記入力値と前記加重値との間の論理演算結果を出力する、イン・メモリコンピューティング回路。
【請求項2】
前記メモリバンクそれぞれの論理演算結果は、前記入力値と前記加重値に対するNAND演算値である、請求項1に記載のイン・メモリコンピューティング回路。
【請求項3】
前記論理ゲートはNANDゲートである、請求項1に記載のイン・メモリコンピューティング回路。
【請求項4】
前記論理ゲートは、前記メモリバンクのうち選択された1つのメモリバンクの入力値と加重値との間の乗算結果を出力する、請求項1に記載のイン・メモリコンピューティング回路。
【請求項5】
前記メモリバンクのうち選択されていないメモリバンクそれぞれは0の入力値を受信する、請求項4に記載のイン・メモリコンピューティング回路。
【請求項6】
前記論理ゲートに接続された加算器をさらに含む、請求項1に記載のイン・メモリコンピューティング回路。
【請求項7】
前記演算器は、ビットワイズ積演算の結果に該当する信号を出力する複数のトランジスタを含む、請求項1に記載のイン・メモリコンピューティング回路。
【請求項8】
前記演算器は、
第1トランジスタ及び第2トランジスタを含む2つのトランジスタ2T回路を含み、
前記入力値は、前記第1トランジスタの第1ゲート端子及び前記第2トランジスタの第2ゲート端子に印加され、
前記第1ゲート端子を経た前記第1トランジスタの出力値は、前記第2ゲート端子を経た前記第2トランジスタの出力値と接続されることによって前記論理演算結果を出力する、請求項1に記載のイン・メモリコンピューティング回路。
【請求項9】
前記ビットセルに格納された前記加重値に基づいた値が前記第1トランジスタのドレイン端子に印加され、
前記第1トランジスタのソース端子は、前記第2トランジスタのドレイン端子を介して前記論理ゲートの入力端子に接続される、請求項8に記載のイン・メモリコンピューティング回路。
【請求項10】
前記第1トランジスタはNMOSトランジスタを含み、
前記第2トランジスタはPMOSトランジスタを含む、請求項8に記載のイン・メモリコンピューティング回路。
【請求項11】
前記演算器は、
トランスミッションゲート及び第3トランジスタを含む3つのトランジスタ3T回路を含み、
前記入力値は、前記トランスミッションゲートのイネーブル端子及び前記第3トランジスタの第3ゲート端子に印加され、
前記トランスミッションゲートの出力値と前記第3ゲート端子を経た前記第3トランジスタの出力値それぞれは、前記論理ゲートの入力に接続されて前記論理演算結果が出力される、請求項1に記載のイン・メモリコンピューティング回路。
【請求項12】
前記論理ゲートは、前記入力値が前記演算器に印加されるか否かに応じて、前記ビットセルに該当する前記論理演算結果を前記加算器に伝達する、請求項6に記載のイン・メモリコンピューティング回路。
【請求項13】
前記イン・メモリコンピューティング回路は、モバイルデバイス、モバイル・コンピューティングデバイス、モバイルフォン、スマートフォン、個人用デジタルアシスタント、固定ロケーション端末、タブレットコンピュータ、コンピュータ、ウェアラブルデバイス、ラップトップコンピュータ、サーバ、ミュージックプレーヤー、ビデオプレーヤー、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、ナビゲーションデバイス、GPS装置、テレビ、チューナー、自動車、車両部品、航空電子システム、ドローン、マルチコプター及び医療機器から構成されたグループから選択された少なくとも1つのデバイスに統合される、請求項1~12のうちの何れか一項に記載のイン・メモリコンピューティング回路。
【請求項14】
イン・メモリコンピューティング回路を含むニューラルネットワーク装置であって、
イン・メモリコンピューティング回路を含むアレイ回路と、
クロック信号により、前記ニューラルネットワーク装置の入力信号に該当する第2値を前記イン・メモリコンピューティング回路のそれぞれに入力し、前記イン・メモリコンピューティング回路を制御するコントローラと、
を含み、
前記イン・メモリコンピューティング回路それぞれは、複数のメモリバンクを含み、
前記メモリバンクそれぞれは、加重値を格納するビットセルと入力値を受信する演算器と、
前記メモリバンクそれぞれの論理演算結果を受信する論理ゲートと、
を含み、
前記演算器は前記ビットセルに接続され、前記入力値を受信した前記演算器が前記入力値と前記加重値との間の論理演算結果を出力する、ニューラルネットワーク装置。
【請求項15】
前記メモリバンクそれぞれの論理演算結果は、前記入力値と前記加重値に対するNAND演算値である、請求項14に記載のニューラルネットワーク装置。
【請求項16】
前記論理ゲートはNANDゲートである、請求項14に記載のニューラルネットワーク装置。
【請求項17】
前記コントローラは、
前記入力値を含む入力フィーチャーマップを格納するIFM(input feature map)バッファと、
前記入力値が複数のIMC回路に印加されるか否かを制御する制御回路と、
前記加重値を読み出すRW(read write)回路と、
のうち少なくとも1つを含む、請求項14~16のうちの何れか一項に記載のニューラルネットワーク装置。
【請求項18】
イン・メモリコンピューティング装置であって、
それぞれのビットセルユニットをそれぞれ含むメモリバンクと、
前記それぞれのビットセルユニットの演算器の出力を受信する論理ゲートと、
MAC演算の少なくとも一部を行うために前記論理ゲートの出力を受信する加算器と、
を含み、
前記それぞれのビットセルユニットは、ビットセル及び演算器を含み、ビットセルのうちいずれも同じ演算器を共有しない、イン・メモリコンピューティング装置。
【請求項19】
前記それぞれのビットセルユニットの出力は前記論理ゲートに接続され、
前記ビットセルそれぞれはそれぞれの格納された値を格納し、
前記ビットセルユニットは、前記ビットセルユニットにそれぞれの入力値を提供するそれぞれの入力ラインに接続され、
前記イン・メモリコンピューティング装置は、前記ビットセルユニットに提供される入力値が、前記ビットセルユニットのいずれか1つが該当演算器によって前記格納された値に対して実行される演算の対象になるよう選択する、請求項18に記載のイン・メモリコンピューティング装置。
【請求項20】
前記演算の対象でない前記ビットセルユニットの前記格納された値は、前記論理ゲートの出力に影響を与えない、請求項19に記載のイン・メモリコンピューティング装置。
【発明の詳細な説明】
【技術分野】
【0001】
以下の実施形態は、IMC(IN MEMORY COMPUTING)回路、IMC回路を含むニューラルネットワーク装置、及びIMC回路の動作方法に関する。
【背景技術】
【0002】
多くの応用分野において、例えば、正確度、速度、及び/又はエネルギー効率性のような高性能を提供するために、マシーンラーニング(machine learning)及び/又はディープラーニング(deep learning)により学習された様々な形態の神経網(neural network;NN)が使用されることができる。神経網の機械学習を可能にするアルゴリズムは演算量が極めて多いが、例えば、2つのベクトルの内積を計算し、その値を累積合算するMAC(Multiplication and Accumulation)演算のような複雑でない演算処理により行われる。MAC演算のような複雑でない演算は、イン・メモリコンピューティングを介して実現されることができる。
【発明の概要】
【発明が解決しようとする課題】
【0003】
一実施形態によれば、SRAMビットセルを複数のメモリバンクから構成することによって演算器を制御する制御ライン数を減らし、イン・メモリコンピューティング(IMC)回路の実現面積を減少させ、これによりイン・メモリコンピューティング(IMC)回路の面積効率を向上させることにある。
【0004】
一実施形態によれば、SRAMのビットセルを複数のメモリバンクに対応するように構成し、小さい個数(例えば、2つ又は3つ)のトランジスタから構成された演算器及びゲートロジック回路により、複数のメモリバンクのうち対象メモリバンクに対応する演算結果が加算器に伝達することによって、インメモリコンピューティング(IMC)回路の制御ライン数を低減し低電圧の書き込み動作を可能にすることにある。
【0005】
一実施形態によれば、演算器によって積演算のためのトランジスタの個数を減らすことで、イン・メモリコンピューティング(IMC)回路を構成する全体トランジスタの個数を低減することにある。
【課題を解決するための手段】
【0006】
一実施形態によれば、イン・メモリコンピューティング(In-Memory Computing)回路は、複数のメモリバンクと、前記メモリバンクそれぞれの論理演算結果を受信する論理ゲートとを含み、前記メモリバンクそれぞれは、加重値を格納するビットセルと、入力値を受信する演算器とを含み、前記演算器は前記ビットセルに接続され、前記入力値を受信した前記演算器が前記入力値と前記加重値との間の論理演算結果を出力する。
【0007】
前記メモリバンクそれぞれの論理演算結果は前記入力値と前記加重値に対するNAND演算値であってもよい。
【0008】
前記論理ゲートはNANDゲートであってもよい。
【0009】
前記論理ゲートは、前記メモリバンクのうち選択された1つのメモリバンクの入力値と加重値との間の乗算結果を出力することができる。
【0010】
前記メモリバンクのうち選択されていないメモリバンクそれぞれは0の入力値を受信することができる。
【0011】
前記イン・メモリコンピューティング回路 前記論理ゲートに接続された加算器をさらに含むことができる。
【0012】
前記演算器は、ビットワイズ積演算の結果に該当する信号を出力する複数のトランジスタを含むことができる。
【0013】
前記演算器は、第1トランジスタ及び第2トランジスタを含む2つのトランジスタ2T回路を含み、前記入力値は、前記第1トランジスタの第1ゲート端子及び前記第2トランジスタの第2ゲート端子に印加され、前記第1ゲート端子を経た前記第1トランジスタの出力値は、前記第2ゲート端子を経た前記第2トランジスタの出力値と接続されることによって前記論理演算結果を出力することができる。
【0014】
前記ビットセルに格納された前記加重値に基づいた値が前記第1トランジスタのドレイン端子に印加され、前記第1トランジスタのソース端子は、前記第2トランジスタのドレイン端子を介して前記論理ゲートの入力端子に接続されることができる。
【0015】
前記第1トランジスタはNMOSトランジスタを含み、前記第2トランジスタはPMOSトランジスタを含むことができる。
【0016】
前記演算器は、トランスミッションゲート及び第3トランジスタを含む3つのトランジスタ3T回路を含み、前記入力値は、前記トランスミッションゲートのイネーブル端子及び前記第3トランジスタの第3ゲート端子に印加され、前記トランスミッションゲートの出力値と前記第3ゲート端子を経た前記第3トランジスタの出力値それぞれは、前記論理ゲートの入力に接続されて前記論理演算結果が出力されることができる。
【0017】
前記論理ゲートは、前記入力値が前記演算器に印加されるか否かに応じて、前記ビットセルに該当する前記論理演算結果を前記加算器に伝達することができる。
【0018】
前記イン・メモリコンピューティング回路は、モバイルデバイス、モバイル・コンピューティングデバイス、モバイルフォン、スマートフォン、個人用デジタルアシスタント、固定ロケーション端末、タブレットコンピュータ、コンピュータ、ウェアラブルデバイス、ラップトップコンピュータ、サーバ、ミュージックプレーヤー、ビデオプレーヤー、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、ナビゲーションデバイス、GPS装置、テレビ、チューナー、自動車、車両部品、航空電子システム、ドローン、マルチコプター及び医療機器から構成されたグループから選択された少なくとも1つのデバイスに統合されることができる。
【0019】
一実施形態によると、イン・メモリコンピューティング回路を含むニューラルネットワーク装置は、イン・メモリコンピューティング回路を含むアレイ回路と、クロック信号により、前記ニューラルネットワーク装置の入力信号に該当する第2値を前記イン・メモリコンピューティング回路のそれぞれに入力し、前記イン・メモリコンピューティング回路を制御するコントローラとを含み、前記イン・メモリコンピューティング回路それぞれは、複数のメモリバンクを含み、前記メモリバンクそれぞれは、加重値を格納するビットセルと入力値を受信する演算器と、前記メモリバンクそれぞれの前記論理演算結果を受信する論理ゲートとを含み、前記演算器は前記ビットセルに接続され、前記入力値を受信した前記演算器が前記入力値と前記加重値との間の論理演算結果を出力する。
【0020】
前記メモリバンクそれぞれの論理演算結果は前記入力値と前記加重値に対するNAND演算値であってもよい。
【0021】
前記論理ゲートはNANDゲートであってもよい。
【0022】
前記コントローラは、前記入力値を含む入力フィーチャーマップを格納するIFM(input feature map)バッファと、前記入力値が前記複数のIMC回路に印加されるか否かを制御する制御回路と、前記加重値を読み出すRW(read write)回路のうち少なくとも1つを含むことができる。
【0023】
一実施形態によると、イン・メモリコンピューティング装置は、それぞれのビットセルユニットをそれぞれ含むメモリバンクと、前記それぞれのビットセルユニットの演算器の出力を受信する論理ゲートと、MAC演算の少なくとも一部を行うために前記論理ゲートの出力を受信する加算器とを含み、前記それぞれのビットセルユニットは、ビットセル及び演算器を含み、ビットセルのうちいずれも同じ演算器を共有しない。
【0024】
前記それぞれのビットセルユニットの出力は前記論理ゲートに接続され、前記ビットセルそれぞれはそれぞれの格納された値を格納し、前記ビットセルユニットは、前記ビットセルユニットにそれぞれの入力値を提供するそれぞれの入力ラインに接続され、前記イン・メモリコンピューティング装置は、前記ビットセルユニットに提供される入力値が、前記ビットセルユニットのいずれか1つが該当演算器によって前記格納された値に対して実行される演算の対象になるよう選択することができる。
【0025】
前記演算の対象でない前記ビットセルユニットの前記格納された値は、前記論理ゲートの出力に影響を与えない。
【発明の効果】
【0026】
一態様によれば、SRAMビットセルを複数のメモリバンクから構成することによって、演算器を制御する制御ライン数を減らし、イン・メモリコンピューティング(IMC)回路の実現面積を減少させ、これによりイン・メモリコンピューティング(IMC)回路の面積効率を向上させることができる。
【0027】
一態様によれば、SRAMのビットセルを複数のメモリバンクに対応するように構成し、小さい個数(例えば、2つ又は3つ)のトランジスタから構成された演算器及びゲートロジック回路により、複数のメモリバンクのうち対象メモリバンクに対応する演算結果が加算器に伝達されるようにすることで、インメモリコンピューティング(IMC)回路の制御ライン数を低減し低電圧の書き込み動作を可能にする。
【0028】
一態様によれば、演算器によって積演算のためのトランジスタの個数を減らすことで、イン・メモリコンピューティング(IMC)回路を構成する全体トランジスタの個数を低減することができる。
【図面の簡単な説明】
【0029】
図1】一実施形態に係るイン・メモリコンピューティング(IMC)回路で動作が実行されることができるニューラルネットワークの一例示を示す図である。
図2A】一実施形態に係るイン・メモリコンピューティング(IMC)回路構造を示す図である。
図2B】一実施形態に係るイン・メモリコンピューティング(IMC)回路構造を示す図である。
図2C】一実施形態に係るイン・メモリコンピューティング(IMC)回路構造を示す図である。
図2D】一実施形態に係るイン・メモリコンピューティング(IMC)回路構造を示す図である。
図3】一実施形態により4個のメモリバンクを含むイン・メモリコンピューティング(IMC)回路の動作を説明するための図である。
図4】一実施形態に係るイン・メモリコンピューティング(IMC)回路のブロック図である。
図5A】一実施形態に係るイン・メモリコンピューティング(IMC)回路の演算器が2つのトランジスタから構成された場合の動作を説明するための図である。
図5B】一実施形態に係るイン・メモリコンピューティング(IMC)回路の演算器が2つのトランジスタから構成された場合の動作を説明するための図である。
図6A】一実施形態に係るイン・メモリコンピューティング(IMC)回路がメモリバンクを選択する方法を説明するための図である。
図6B】一実施形態に係るイン・メモリコンピューティング(IMC)回路がメモリバンクを選択する方法を説明するための図である。
図7】一実施形態に係るイン・メモリコンピューティング(IMC)回路の演算器が3つのトランジスタから構成された場合の動作を説明するための図である。
図8】他の実施形態に係るイン・メモリコンピューティング(IMC)回路の演算器が3つのトランジスタから構成された場合の動作を説明するための図である。
図9】一実施形態に係るイン・メモリコンピューティング(IMC)回路を含むニューラルネットワーク装置のブロック図である。
図10】一実施形態に係るニューラルネットワーク装置を含む電子システムのブロック図である。
図11】一実施形態に係るイン・メモリコンピューティング(IMC)回路の動作方法を示したフローチャートである。
【発明を実施するための形態】
【0030】
実施形態に対する特定な構造的又は機能的な説明は単なる例示のための目的として開示されたものであって、様々な形態に変更されることができる。したがって、実施形態は特定な開示形態に限定されるものではなく、本明細書の範囲は技術的な思想に含まれる変更、均等物ないし代替物を含む。
【0031】
第1又は第2などの用語を複数の構成要素を説明するために用いることがあるが、このような用語は1つの構成要素を他の構成要素から区別する目的としてのみ解釈されなければならない。例えば、第1構成要素は第2構成要素と命名することができ、同様に、第2構成要素は第1構成要素にも命名することができる。
【0032】
いずれかの構成要素が他の構成要素に「連結」されているか「接続」されていると言及されたときには、その他の構成要素に直接的に連結されているか又は接続されているが、中間に他の構成要素が存在し得るものと理解されなければならない。
【0033】
単数の表現は、文脈上、明白に異なる意味をもたない限り複数の表現を含む。本明細書において、「含む」又は「有する」等の用語は、明細書上に記載した特徴、数字、ステップ、動作、構成要素、部品又はこれらを組み合わせたものが存在することを示すものであって、1つ又はそれ以上の他の特徴や数字、ステップ、動作、構成要素、部品、又はこれを組み合わせたものなどの存在又は付加の可能性を予め排除しないものとして理解しなければならない。
【0034】
異なるように定義さがれない限り、技術的又は科学的な用語を含んで、ここで用いる全ての用語は、本実施形態が属する技術分野で通常の知識を有する者によって一般的に理解されるものと同じ意味を有する。一般的に用いられる予め定義された用語は、関連技術の文脈上で有する意味と一致する意味を有するものと解釈されなければならず、本明細書で明白に定義しない限り、理想的又は過度に形式的な意味として解釈されることはない。
【0035】
以下、添付する図面を参照しながら実施形態を詳細に説明する。図面を参照して説明する際に、図面符号に拘わらず同じ構成要素は同じ参照符号を付与し、これに対する重複する説明は省略する。
【0036】
図1は、一実施形態に係るイン・メモリコンピューティング(IMC)回路で動作が実行されるニューラルネットワークの一例示を示す図である。図1を参照すると、対応するイン・メモリコンピューティング回路によって動作が実行されるニューラルネットワーク110が示されている。
【0037】
イン・メモリコンピューティング(In-Memory Computing;IMC)は、フォンノイマン型アーキテクチャで発生する演算部(例えば、プロセッサ)とメモリとの間の頻繁なデータ移動による性能及び電力限界点を突破するためにデータが格納されているメモリ内部で直接演算を実行させるコンピューティングアーキテクチャーに該当する。イン・メモリコンピューティング(IMC)回路は、演算をいずれかのドメインで行うかに応じて、アナログイン・メモリコンピューティング(IMC)回路とデジタルイン・メモリコンピューティング(IMC)回路に分類される。アナログイン・メモリコンピューティング(IMC)回路は、例えば、電流、電荷、時間などのようなアナログドメインで演算を行ってもよい。デジタルイン・メモリコンピューティング(IMC)回路は、論理回路を用いてデジタルドメインで演算を行うことができる。以下の実施形態は、デジタルイン・メモリコンピューティング回路について説明する。
【0038】
イン・メモリコンピューティング(IMC)回路は、複数の乗算に対する加算を一回行うマトリックス演算、及び/又はMAC(Multiplication and Accumulation)演算を加速化することができ、これは人工知能(Artificial Intelligence;AI)の学習及び推論に一般的である。ニューラルネットワーク110の学習又は推論のためのMAC演算はメモリアレイを介して実行され、メモリアレイはイン・メモリコンピューティング(IMC)回路のうちメモリ素子のビットセルを含む。以下、説明の便宜のために、ニューラルネットワーク110が完全接続レイヤ(fully connected layers)で構成された場合を一例に挙げて説明するが、必ずこれに限定されることはない。ニューラルネットワーク110は、畳み込みレイヤで構成された畳み込みニューラルネットワークであってもよい。イン・メモリコンピューティング(IMC)回路は、ビットセルを含むメモリアレイによる演算機能を介して該当MAC演算を行うことによってニューラルネットワーク110の機械学習及び推論を可能にする。
【0039】
ニューラルネットワーク110は、例えば、2つ以上の隠れ層を含む深層神経網(Deep Neural Network;DNN)又はn-階層ニューラルネットワークであってもよい。ニューラルネットワーク110は、例えば、入力層Layer1、2つの隠れ層Layer2及びLayer3及び出力層Layer4を含む深層神経網(DNN)であってもよく、必ずこれに限定されることはない。ニューラルネットワーク110がDNNアーキテクチャーで具現された場合、有効な情報を処理できるより多くのレイヤを含んでいるため、ニューラルネットワーク110は、シングルレイヤを有するニューラルネットワークよりも複雑なデータ集合を処理することができる。一方、ニューラルネットワーク110は、4個のレイヤを含むものとして図示されているが、これは例示に過ぎず、ニューラルネットワーク110はさらに少ないか多くのレイヤを含んだり、さらに少ないか多くのチャネルを含んでもよい。ニューラルネットワーク110は、図1に示したものとは異なる様々な構造のレイヤを含んでもよい。
【0040】
ニューラルネットワーク110に含まれたレイヤそれぞれは、複数のノード115を含む。ノード(node)は、「ニューロン(neuron)」、「プロセッシングエレメント(Processing element、PE)」、「ユニット(unit)」、「チャネル(channel)」又はこれに類似の用語として知られている複数の人工ノードに該当する。ニューラルネットワーク110は、例えば、入力層が3つのノードを含み、隠れ層それぞれが5個のノードを含み、出力層が3つの出力ノードを含むが、必ずこれに限定されることはない。図1の例示は一実施形態に該当し、ニューラルネットワーク110に含まれたレイヤそれぞれは、様々な個数のノードを含んでもよい。ニューラルネットワーク110のレイヤそれぞれに含まれているノード115は、互いに接続してデータを処理してもよい。例えば、1つのノードは他のノードからデータを受信して演算してもよく、演算結果を更なるノードに出力してもよい。
【0041】
いずれかのレイヤの複数のノード115は、他のレイヤのノードと接続線を介して接続され、接続線には加重値wが設定される。例えば、いずれかのノードの演算実行結果oは、該当ノードに接続された以前レイヤの他のノードから伝播する入力データ(例えば、i、i、i、i、i)及び該当ノードの接続線の加重値(w11、w21、w31、w41、w51)に基づいて決定されてもよい。
【0042】
例えば、L個の出力値のうちl番目の出力oは、下記の数式(1)のように表現されてもよい。ここで、Lは1以上の整数であり、lは1以上L以下の整数である。
【0043】
【数1】
【0044】
数式(1)において、iはP個の入力のうちk番目の入力を示し、wklはk番目の入力及びl番目の出力間に設定されている加重値を示す。ここで、Pは1以上の整数であり、kは1以上P以下の整数を示す。
【0045】
言い換えれば、ニューラルネットワーク110でノード115間の入力/出力は、入力i及び加重値w間の加重和に示す。加重和は、複数の入力及び複数の加重値の間の乗算演算及び反復的な加算演算として、「MAC(Multiplication and Accumulation)演算」に示してもよい。MAC演算が演算機能の追加されたメモリを用いて実行される点で、MAC演算が実行される回路を「イン・メモリコンピューティング(IMC)回路」に称してもよい。
【0046】
ニューラルネットワーク110は、例えば、入力データ(例えば、i、i、i、i、i)に基づいてレイヤにおける加重和演算を行い、演算実行結果(例えば、o、o、o、o、o)に基づいて出力データ(例えば、u、u、u)を生成してもよい。
【0047】
図2A図2B図2C、及び図2Dは、一実施形態に係るイン・メモリコンピューティング(IMC)回路を含むIMCマクロの例示的な構造を示す図である。図2Aを参照すると、一実施形態に係るIMCマクロ200は、書き込みワードラインドライバ(WWL(Write Word Line)driver)210、イン・メモリコンピューティング(IMC)回路220、加算器(Adder)230、累積演算器240、入力ドライバ(input driver)(又は、読み出しワードラインドライバ(RWL(Read Word Liner)driver)250、メモリコントローラ(control unit)260、及び書き込みビットラインドライバ(WBL(Write Bit Line)driver)270を含む。IMCマクロ200は、例えば、図2Aに示したような64kb SRAM IMCマクロであってもよいが、必ずこれに限定されることはない。
【0048】
以下に記述されるように、IMC回路(例えば、IMC回路220)は、ビットセル回路(例えば、SRAMビットセル回路225)を含み、それぞれのビットセル回路は、ビットセルユニット(例えば、ビットセルユニット223a-223d)を有する。それぞれのビットセル回路のビットセルユニットは、IMC回路のそれぞれのバンクに含まれてもよい(例えば、ビットセルユニット223a-223dはそれぞれバンク0-3に含まれてもよい)。それぞれのビットセルユニットは、ビットセル及びオペレーターを含む(例えば、ビットセルユニット223aは、ビットセル221及びオペレーター222を含む)。IMC回路のビットセル回路は、また、それぞれのゲート論理回路を有してもよい(例えば、SRAMビットセル回路225は、対応するゲート論理回路227を有してもよい)。ビットセル回路のビットセルユニットは、ビットセル回路に対応するゲート論理回路にそれぞれ接続される(例えば、ビットセルユニット223a-223dはゲート論理回路227に接続される)。
【0049】
上述したように、イン・メモリコンピューティング(IMC)回路220は、それぞれのメモリバンクに配列されたそれぞれの演算子を有するビットセル(例えば、ビットセル221)を含むゲートロジック回路227及び演算器(例えば、演算器222)を含む。演算器は、それぞれのビットセルに対する演算の演算結果に対応する信号を出力する。例えば、図2Cは、Bank0にそれぞれビットセル221-0~221-3を有する4個のSRAMビットセル回路を示す。即ち、ビットセル回路は、メモリバンク0、メモリバンク1、メモリバンク2、及びメモリバンク3のような4個のメモリバンクそれぞれに含まれてもよい。同じメモリバンク(例えば、バンク0)に対応するビットセルユニットは、同じ入力値を受信することができる。
【0050】
上述したように、例えば、SRAMビットセル回路225で、1つのメモリバンクに対応する1つのビットセル221と(1つのビットセル221に対応する演算結果を出力する)1つの演算器222は、ビットセルの基本演算単位という点で「ビットセルユニット」223に称される。1つのビットセル221は、例えば、ビット値を格納するための8T(8-transistor)SRAMセル構造を有してもよい。1つの演算器222は、例えば、演算を行うための2つのトランジスタ2T回路を含む。SRAMビットセル回路225は、例えば、8T(8-transistor)SRAMセル構造を有するビットセル221に2つのトランジスタ2T個の演算器222が結合されている10個のトランジスタ10Tで構成されたSRAMセル構造を有する。演算器222は、例えば、一般のロジック乗算器(Multiplier)であってもよく、又は、パストランジスタロジック(Pass Transistor Logic)であってもよい。ゲートロジック回路227は、複数のメモリバンク(memory banks)に対応するビットセル221のうち、MAC(Multiplication and Accumulation)演算のための対象メモリバンクに属するビットセルそれぞれに対応する演算結果を加算器230に伝達する。
【0051】
以下、説明の便宜のために、「読み出しワードライン(RWL)及び書き込みワードライン(WWL)」を「ワードライン(WL)」に簡略化して表現し、「書き込みワードラインドライバ(WWL driver)及び読み出しワードラインドライバ(RWL driver)」を「ワードラインドライバ(WL driver)」に簡略化して表現する。「書き込みビットライン(Write Bit Line;WBL)」も「ビットライン(BL)」に簡略化して表現してもよい。
【0052】
IMCマクロ200は、全てのデータを「0」及び/又は「1」のようなデジタル論理値に表現するデジタル演算を実行し、入力データ201、加重値203、及び出力データ205は、バイナリフォーマット(binary format)を有してもよい。例えば、入力データ201と加重値203は、活性化関数(fact)dpにより出力データ205に変換されてもよい。図2A図2Dは、デジタル論理回路に実現することができる。
【0053】
読み出しワードライン(RWL)は、入力データ201が印加される経路と同一であるため、入力ドライバ250は、読み出しワードラインドライバ(RWL driver)に該当する。入力ドライバ250は、イン・メモリコンピューティング(IMC)回路220の演算(例えば、乗算演算又は畳み込み演算)が実行される入力データ201を(例えば、外部演算子)に伝達することができる。読み出しワードライン(RWL)信号は、入力データ201の入力値に基づいて決定されてもよい。入力データ201は、マルチビット又はシングルビットデジタルデータであってもよい。
【0054】
入力ドライバ250を介して読み出した入力データ201は、エンコーディング(Encoding;ENC)ブロック255を経てIMC回路220の入力信号に変換される。エンコーディングブロック255は、変換した入力信号と共に、複数のメモリバンクのうちMAC演算のための対象メモリバンクを選択する信号をIMC回路220に提供する。入力ドライバ250の動作に対しは、図2Bを参照して具体的に説明する。また、メモリバンクで演算が実行される過程は、以下の図2Cを参照して説明し、書き込みビットライン(WBL)ドライバ270が読み出したデータ(例えば、加重値又は入力値)をメモリバンク(ビットセル)に記録(write)する過程は、下記の図2Dを参照してより具体的に説明する。
【0055】
図2Bを参照すると、一実施形態に係る入力ドライバ250が読み出した入力データがエンコーディングブロック255を介してIMC回路220へ入力される過程の一例が示されている。例えば、IMCマクロ200が図2Aに示したような64kb SRAM IMCマクロである場合、入力ドライバ250は、IN[63:0]のように64個の入力データを読み出すことができる。ここで、64個の入力データそれぞれは4ビットから構成されてもよい。入力ドライバ250は、4ビットで構成された入力データ201(例えば、「0011 0100 1010」)を1つのビットずつ順にエンコーディングブロック255に入力する。エンコーディングブロック255は、入力データ201(例えば、「0011 0100 1010」)を2ビットの制御信号(例えば、「00」又は「10」)により4個のバンクのいずれか1つのバンクに伝達することができる。ここで、4個のバンクそれぞれはビットセルに該当する。
【0056】
例えば、1番目のメモリバンクbank0が演算器として使用される場合、IMCマクロ200は、2-ビットの制御信号「00」をエンコーディングブロック255に印加する。2-ビットの制御信号「00」がエンコーディングブロック255に印加されることにより、エンコーディングブロック255は、入力データ(例えば、「0011 0100 1010」)を1番目のメモリバンクbank0に接続されている第1出力(例えば、O0)を介してビットセルユニットに順に提供することができる。
【0057】
2番目のメモリバンクbank1が演算器として使用される場合、IMCマクロ200は、エンコーディングブロック255に2-ビットの制御信号「01」を印加し、エンコーディングブロック255は、第2メモリバンクBank1に接続された第2出力O1を介して、第2メモリバンクBank1のビットセルユニットに同じ入力データを提供することができる。
【0058】
3番目のメモリバンクbank2が演算器として使用される場合、IMCマクロ200は、制御信号「10」をエンコーディングブロック255に印加し、エンコーディングブロック255は、第3メモリバンクbank2に接続された第3出力O2を介して第3メモリバンクbank2のビットセルユニットに同じ入力データを提供することができる。
4番目のメモリバンクbank3が演算器として使用される場合、IMCマクロ200は、制御信号「11」をエンコーディングブロック255に印加し、エンコーディングブロック255は、入力データを第3メモリバンクbank3に接続された第4出力Oを介して第3メモリバンクbank3に出力する。それぞれの場合、エンコーディングブロック255のいずれかの出力(例えば、O)が制御信号によって活性化され、入力データを対応するターゲット/選択されたメモリバンク(例えば、Bank0)に提供されたエンコーディングブロック255は、他の出力が「0」(例えば、O、O及びO)を他の(選択されていない/ターゲットでない)バンクに出力するようにしてもよい。このような方式により、IMCマクロのゲート論理回路の出力は(入力ビットと選択されたメモリバンクのビットセルにあるビットで演算されるため)、選択されたメモリバンクの演算子の各演算出力にのみ依存することができる。
【0059】
図2Cを参照すると、一実施形態により入力ドライバ250が読み出した入力データ201がSRAMビットセル回路225のメモリバンクに伝達されることにより各メモリバンクで演算が実行される過程を説明するための図が示されている。例えば、図2Bを参照して説明したように、エンコーディングブロック255に制御信号「00」が印加されることで、エンコーディングブロック255は入力データ(例えば、「0011 0100 1011」)をIMC回路220の1番目のメモリバンクbank0に対応するビットセルユニット221-0、221-1、221-2、221-3にビット単位で順に提供することができる。ここで、エンコーディングブロック255は、1番目のメモリバンクbank0を除いた残りのメモリバンク(例えば、bank1、bank2、bank3)には「0」を提供することができる。1番目のメモリバンクbank0のビットセルユニットそれぞれは、エンコーディングブロック255に順に提供される入力データの値と各ビットセルユニット221-0、221-1、221-2、221-3に格納された加重値(例えば、任意の「0」又は「1」を含む加重値w1、w2、w3、w4)間の演算(例えば、乗算演算)結果を出力することができる。
【0060】
例えば、ビットセルユニットに格納された加重値wが「0」であれば、ビットセルユニットに接続されたゲートロジック回路227は、入力データ(例えば、「0011 0100 1010」)とw「0」をビット単位に乗算した結果「0000 0000 0000」を出力してもよい。Bank0以外の残りのバンクの加重値内容は、このような演算のためのゲートロジック回路227の出力に影響を与えないが、これは、残りのバンクはそれぞれの乗算演算中に全てエンコーディングブロック255から「0」を受信するためである。
【0061】
加重値w=1である場合、ビットセルユニット221-0に接続されたロジック回路227は、演算結果として入力データ(例えば、「0011 0100 1011」)と「1」との間の乗算演算結果である「0011 0100 1011」を出力する。再び、Bank0以外のバンクの加重値は、そのバンクがそれぞれの乗算演算中に全てエンコーディングブロック255から「0」を受信するため、この演算に対するゲート論理回路227の出力に影響を与えない。図2Dを参照すると、一実施形態に係る書き込みビットライン(WBL)ドライバ270が読み出したデータ(例えば、加重値又は入力値)をメモリバンク(ビットセル)(例えば、1番目のメモリバンクbank0)に書き込む過程を説明するための図が示されている。書き込みワードライン(WWL)ドライバ210は、イン・メモリコンピューティング(IMC)回路220にデータを記録するためにメモリバンク(及びそれによるビットセル)を選択してもよい。例えば、1番目のメモリバンクbank0にデータを記録しようとする場合、書き込みワードライン(WWL)ドライバ210は、書き込みワードライン(WWL)[3:0]に「1000」を適用(印加)して1番目のメモリバンクbank0を選択してもよい。4番目のメモリバンクbank3にデータを記録しようとする場合、書き込みワードライン(WWL)ドライバ210は、書き込みワードライン(WWL)[3:0]に「0001」を適用して4番目のメモリバンクbank3を選択してもよい。また、書き込みビットライン(WBL)ドライバ270は、書き込みワードライン(WWL)ドライバ210によって選択されたビットセルに格納するデータ(例えば、加重値)を提供する。図2Aに示されたWBL[255:0]は、ビットセルにデータを記録(write)する経路に該当する。図2Aに示したような64×64演算器では、256ビットのデータがそれぞれ4ビットの加重値(例えば、w、w、w、w)を有する64個の行(rows)に同時に記録されてもよい。構造により、64ビットのデータを列(column)方向に同時に記録してもよい。256ビットの入力(格納用)が(周期ごとに一列ずつ)各列に連続的にデータを伝達するとき、全体演算器のデータを合計64サイクルの間に記録することができる。書き込みビットライン(WBL)ドライバ270が書き込み動作を行う場合、読み出しワードライン(RWL)には全て「0」が入力されてもよい。
【0062】
入力ドライバ250は、例えば、プロセッサ(例えば、図10のプロセッサ1010参照)のような外部モジュールから入力データ201を受信してもよく、又は、IFM(input feature map)バッファ(例えば、図9のIFMバッファ931参照)に格納された入力フィーチャーマップ(input feature map)から入力データ201を読み出してもよい。入力データのソースは重要ではなく、任意のソースが使用されてもよい。
【0063】
例えば、図2Aに示された入力データ201の入力値がマルチビットである場合、入力ドライバ250は、マルチビット値をビット桁(bit position)ごとに順次イン・メモリコンピューティング(IMC)回路220に伝達することができる。例えば、IMCマクロ200がニューラルネットワーク演算のために動作する場合、入力ドライバ250は、読み出しワードラインドライバ(RWL driver)のように動作し得る。以下、入力ドライバ250と読み出しワードラインドライバ(RWL driver)は、互いに同じ意味として理解され得る。
【0064】
この場合、入力ドライバ250は、読み出しワードライン(例えば、RWL、RWL~RWLM-1)に神経網の各レイヤのM個ノードから受信された入力値を印加することができる。ここで、RWLmとIN[m]はのようなノードに該当する。
【0065】
例えば、m番目のノードにおける入力値がRWLmに印加され、RWLmに印加される入力値はマルチビットであるか、シングルビットであってもよい。ここで、mは0以上M-1以下の整数であり、Mは1以上の整数であってもよい。例えば、RWLmに印加される入力値がマルチビットである場合、上述したように順次ビット桁ごとのビット値がイン・メモリコンピューティング(IMC)回路220に伝達されることができる。入力ドライバ250は、前述したノードから受信されたM個の入力値を個別的にM個のビットセルに伝達することができる。後述するが、M個のビットセルそれぞれは、他のビットセルに対して並列的に積演算を行うため、各ビットラインごとにM個の積演算が並列的に実行されてもよい。
【0066】
又は、加重値203がマルチビットである場合、加重値203を表現するためのビット数だけの出力ラインをグルーピングすることができる。グルーピングされた出力ラインを「出力ライングループ」と呼ぶ。例えば、加重値203がXビットである場合、X個の出力ラインがグルーピングされ、IMCマクロ200は、グルーピングされたX個の出力ラインによって入力データ201の入力値とXビットの加重値203との間の乗算を合算した結果を出力することができる。ここで、Xは2以上の整数であってもよい。
【0067】
SRAMビットセル回路225は、マルチビットの加重値を表現するために数個のビットセルから構成されることができる。ここで、入力は、マルチビットの加重値との積のために、同時に各ビットセルに印加されることができる。例示的に、1グループにグルーピングされたX個の出力ラインのうち、第1出力ラインは、加重値のLSB(least significant bit)に対応する加重値ビット値と入力ビット値との間の乗算結果を出力してもよい。同様に、第x出力ラインは、LSBからx-1番目のビット桁の加重値ビット値と入力ビット値との間の乗算結果を出力してもよい。ここで、xは、2以上X以下の整数であってもよい。この場合、累積演算器240は、同じ出力ライングループの出力ラインに対応するビット桁を一定のビット(例えば、1つのビット)ずつシフトした結果を該当出力ラインに出力された合算結果に適用し、ビット桁をシフトした値を累積することによって最終MAC演算結果を出力することができる。累積演算器240は、例えば、シフター(shifter)と加算器(adder)に実現されてもよく、又は、別途の累算器(accumulator)によって実現されてもよいが、必ずこれに限定されることはない。
【0068】
ビットセルのそれぞれは、例えば、加重値203値(例えば、第1値)を格納してもよい。複数のビットセルを含むイン・メモリコンピューティング(IMC)回路220の構造及び動作は、以下の図3図4を参照してより具体的に説明する。
【0069】
イン・メモリコンピューティング(IMC)回路220は、入力ドライバ250を介して伝達された入力データ201の値とビットセルに格納された加重値203と間の積演算を行うことができる。一実施形態に係るイン・メモリコンピューティング(IMC)回路220は、ビットセル、演算器222及びゲートロジック回路が接続された構造を介して、ビットセルそれぞれに対応する演算結果(例えば、ビットワイズ(bit-wise)積演算の結果)に対応する信号を出力してもよい。例えば、以下の図3を参照して説明するように、全般的な演算効果として、イン・メモリコンピューティング(IMC)回路220は、ビットセルそれぞれに格納された加重値203値(例えば、第1値)と、ワードラインを介してメモリバンクに対応するビットセルの入力信号に印加される入力値(例えば、第2値)との間の積演算の結果に該当する信号に対するAND論理演算の結果値を加算器230に伝達することができる。
【0070】
演算器222は、例えば、トランジスタ数を最小化したパストランジスタロジックの形態であってもよい。
【0071】
加算器230は、1つ以上のイン・メモリコンピューティング(IMC)回路220の出力端に接続される。イン・メモリコンピューティング(IMC)回路220の出力端は出力ラインに対応する。1つの出力ラインに1つ以上のイン・メモリコンピューティング(IMC)回路220の出力端が接続されてもよい。加算器230は、1つ以上のイン・メモリコンピューティング(IMC)回路220に出力された信号を加算する。加算器230は、同じ出力ラインに接続された複数のイン・メモリコンピューティング(IMC)回路220の乗算結果を合算してもよい。加算器230は、例えば、全加算器(full adder)、半加算器(half adder)、及び/又はフリップ・フロップ(flip-flop)に実現してもよい。加算器230は、例えば、加算器ツリー回路(adder tree circuit)のようなデジタル加算器に該当し、必ずこれに限定されることはない。
【0072】
また、上述したように、イン・メモリコンピューティング(IMC)回路220の出力結果が、全体的にAND論理演算の結果値であるため、加算器230は各イン・メモリコンピューティング(IMC)回路220の出力結果を反転させるインバータを含んで実現されてもよい。この場合、加算器230は、イン・メモリコンピューティング(IMC)回路220の出力結果を反転させた値を合算してもよい。加算器230は、ビットセルそれぞれに対応する乗算結果を合算した結果を累積演算器240に伝達する。加算器230は、イン・メモリコンピューティング(IMC)回路220の各出力ラインごとに配置されてもよい。
【0073】
累積演算器240は、1つ以上のイン・メモリコンピューティング(IMC)回路220の積演算の結果を合算する加算器230の出力を格納し、合算結果を累積してもよい。累積演算器240は、加算器230でビットセルそれぞれに対応する乗算結果を合算し、合算した結果を最終的に結合してMAC演算結果(例えば、Q[13:0]~Q63[13:0]として出力することができる。
【0074】
例えば、入力ドライバ250がマルチビットからなる入力データ201を受信した場合、ワードラインドライバ210は、書き込みワードライン(write word lines)(例えば、WWL[3:0]~WWL63[3:0])を介して入力データ201のビット桁ごとのビット値をイン・メモリコンピューティング(IMC)回路220に順に伝達してもよい。そのため、イン・メモリコンピューティング(IMC)回路220も該当するビット桁の積演算の結果を出力し得る。加算器230は、該当するビット桁の積演算の結果値を合算した結果を累積演算器240に伝達する。
【0075】
累積演算器240は、該当するビット桁の合算結果をビットシフト(bit shift)して合算することができる。累積演算器240は、次のビット桁の合算結果を該当するビットシフティングされた合算結果に結合することで、積演算の結果をビット桁により累積することができる。後述するが、入力ドライバ250がシングルビットからなる入力データを受信した場合、ビットシフティングが必要でないため、累積演算器240は加算器230の合算結果を直ちに出力したり、又は、出力レジスタ(図示せず)に格納してもよい。
【0076】
出力レジスタは、累積演算器240から出力される最終積演算の結果(例えば、乗算累積結果)を格納する。累積演算器240は。シフト演算と合計演算だけでなく、累積演算も行うという点で「Shift&adder+accumulaor」240に呼んでもよい。出力レジスタに格納された最終の乗算累積結果(例えば、MAC演算結果)は、例えば、電子システムのプロセッサ(例えば、図10のプロセッサ1010参照)によって判読され、他の演算のために使用されてもよい。例えば、IMCマクロ200が一回にニューラルネットワークの一部レイヤに対応するMAC演算を行う場合、出力レジスタに格納されたMAC演算結果は、次のレイヤで実行される演算のためにワードラインドライバ210に伝達されてもよい。IMCマクロ200のワードラインドライバ210は、次のレイヤに対応する加重値集合が設定されたビットセルを選択して積演算を行うことができる。
【0077】
書き込みビットラインドライバ(WBL driver)270は、イン・メモリコンピューティング(IMC)回路220に含まれた1つ以上のビットセルのデータを用いてもよい。書き込みビットラインドライバ(WBL driver)270は「書き込み回路」のように簡略化して表現してもよい。以下、「書き込みビットラインドライバ」と「書き込み回路」は互いに混用されてもよい。
【0078】
1つ以上のビットセルのデータは、例えば、MAC演算で入力値に乗算される加重値203値を含んでもよい。書き込みビットラインドライバ270は、ビットライン(例えば、WBL、WBLB)を介してイン・メモリコンピューティング(IMC)回路220のビットセルにアクセスしてもよい。イン・メモリコンピューティング(IMC)回路220が複数のビットセルを含む場合、書き込みビットラインドライバ270は、複数のワードライン(RWL)のうち活性化されたワードラインに接続しているビットセルにアクセスしてもよい。書き込みビットラインドライバ270は、アクセスしたビットセルに加重値を設定(書き込み)するか、ビットセルに設定された加重値を読み出すことができる。
【0079】
メモリコントローラ260は、ワードラインドライバ210、1つ以上のイン・メモリコンピューティング(IMC)回路220、累積演算器240(例えば、累積演算器<0>~累積演算器<63>)、加算器230、入力ドライバ250及び/又は出力レジスタを制御することができる。
【0080】
IMCマクロ200は、例えば、ニューラルネットワーク装置、イン・メモリコンピューティング回路、MAC演算回路及び/又は装置に実現され、必ずこれに限定されることはない。IMCマクロ200は、ワードラインを介して入力値を受信し、10T SRAMビットセルに格納された加重値と入力値との間の乗算結果に対応する信号をビットラインを介して出力し得る。
【0081】
図3は、一実施形態に係るインメモリコンピューティング(IMC)回路の構造を説明するための図である。図3を参照すると、一実施形態に係るインメモリコンピューティング(IMC)回路220は、SRAMビットセル回路225及びゲートロジック回路340を含む。
【0082】
SRAMビットセル回路225は、複数のメモリバンク(memory banks)それぞれに対応する複数のビットセルユニット223を含む。ビットセルユニット223は、1つのビットセル310及び入力されたビットと1つのビットセル310との間の演算結果に該当する信号を出力する演算器320を含む。演算器320は、図2を参照して前述した演算器222に該当する。
【0083】
ビットセル310は、2つのインバータ311,313及び2つのトランスミッションゲート315,317で構成されたワードライントランジスタを含んでもよい。ここで、「トランスミッションゲート」は、NMOSトランジスタとPMOSトランジスタが並列に接続された双方向スイッチとして外部で適用するロジックレベルによって制御されることができる。例えば、トランスミッションゲート315,317のイネーブル(enable;E)端子に「1」が印加される場合、トランスミッションゲート315,317は、「閉じられた(Closed)」スイッチの役割を行う。これとは相違に、トランスミッションゲート315,317のイネーブル端子に「0」が印加される場合、トランスミッションゲート315,317は「開かれた(Opened)」スイッチの役割を行う。インバータ311,313及びトランスミッションゲート315,317のそれぞれは2つのトランジスタから構成されてもよい。
【0084】
演算器320は、複数のトランジスタ(例えば、第1トランジスタ321、第2トランジスタ323)を含む。複数のトランジスタ(例えば、第1トランジスタ321、第2トランジスタ323)は、ビットセル310に格納された第1値と入力ドライバ250を介してビットセル310に入力信号で印加される第2値間のビットワイズ(bit-wise)積の演算結果に該当する信号を出力することができる。
【0085】
演算器320は、図3図5及び/又は図6に示すように2つのトランジスタ2Tで構成されてもよく、又は、図7及び/又は図8に示すように3つのトランジスタ3Tで構成されてもよい。
【0086】
例えば、図3に示すように、演算器320が2つのトランジスタから構成された場合、ビットセルユニット223が10個のトランジスタ(2×2+2×2+2=10)から構成される点で、SRAMビットセル回路225は「10TSRAMセル」構造又は「10T」の構造に呼ぶことができる。
【0087】
SRAMビットセル回路225のビットセルユニット310のうち同じメモリバンクに該当するビットセルユニットには同じ入力値が印加されてもよい。「メモリバンク」は、全体メモリ領域を複数のブロックに割った場合、1つのブロックに該当する。メモリバンクは、メモリ領域を示す同じ番地が様々な対が存在し、64bit単位の入力/出力が発生する場合に1つのデータパスを共有しているグルーピングであるチャネル内で1つ以上のメモリの論理的なグルーピングに該当する。メモリバンクは、必ず様々な対又はセットとして使用されてもよい。メモリバンクは、例えば、加算器ツリー(adder Tree)のような加算器230を共有するメモリグループに該当する。ビットセル310は、例えば、4個のメモリバンクに対応する。
【0088】
演算器320のそれぞれは、複数のメモリバンクのうち該当メモリバンクに対応するビットセルそれぞれに格納された第1値と、ワードラインを介して該当メモリバンクの入力信号に印加される第2値との間のビットワイズ(bit-wise)積演算の結果に該当する信号を出力する複数のトランジスタ(例えば、321、323)を含んでもよい。演算器320のそれぞれは、ビットセル310のそれぞれに対応する。
【0089】
ゲートロジック回路(gate logic circuit)340は、複数のメモリバンクのうちMAC(Multiplication and Accumulation)のための対象メモリバンクに属するビットセルそれぞれに対応する演算結果を加算器230に伝達することができる。ゲートロジック回路340は、演算器320それぞれに第2値が印加されるかに応じて該当メモリバンクに属するビットセルそれぞれに対応する演算結果を加算器230に伝達することができる。ゲートロジック回路340は、例えば、NANDゲート、NORゲート、XORゲート、XNORゲート、ANDゲート、及びORゲートのいずれか1つを含んでもよいが、必ずこれに限定されることはない。例えば、ゲートロジック回路340がNANDゲート以外にNORゲート、XORゲート、XNORゲート、ANDゲート、及びORゲートを含む場合、ゲートロジック回路340の構造は、該当するゲートの論理演算に適する形態に変更されてもよい。
【0090】
インメモリコンピューティング(IMC)回路220でSRAMビットセル回路225のレイアウトの大きさとルーティングの複雑度はSRAM IMC回路の電力効率、及び/又は面積効率に大きい影響を与える。
【0091】
また、メモリの面積効率Dは下記の数式(3)のように取得することができる。
【0092】
【数2】
【0093】
ここで、WEは、multi-bitのためのメモリ容量に該当する。例えば、8bitを表現するためにはWEは8であり、4bitを表現するためにはWEは4になる。
【0094】
面積密度は、数式(3)によりメモリの面積(Area)を減少させたりメモリバンク(Bank)の個数を増加させたりすることで改善することができる。メモリの面積は、例えば、ビットセル、加算器230及び/又は周辺制御ラインが占めている面積に該当する。
【0095】
同じ原理で、イン・メモリコンピューティング(IMC)回路220に含まれているトランジスタの個数を減らしたり、メモリセルを構成しているトランジスタの個数を減らしたり、メモリバンクの個数を増加したりすることで、インメモリコンピューティング(IMC)回路220の面積を減らし得る。
【0096】
一実施形態において、SRAMのビットセルを複数のメモリバンクに対応するように構成し、小さい個数(例えば、2つ又は3つ)のトランジスタから構成された演算器320及びゲートロジック回路340によって複数のメモリバンクのうち対象メモリバンクに対応する演算結果が加算器230に伝達されるようにすることで、インメモリコンピューティング(IMC)回路の制御ライン数を低減し、低電圧の書き込み動作を可能にする一方、イン・メモリコンピューティング(IMC)回路の面積効率も向上させ得る。ここで、「対象メモリバンク」は、複数のメモリバンクのうち該当メモリバンクに属するセルそれぞれに対応する演算結果がMAC演算に使用される場合に該当メモリバンクを指す用語である。
【0097】
イン・メモリコンピューティング(IMC)回路220のビットセルを複数のメモリバンクから構成する方法は、以下の図4A及び図4Bを参照してより具体的に説明する。
【0098】
図4は、一実施形態に係るイン・メモリコンピューティング(IMC)回路のブロック図である。図4を参照すると、複数のメモリバンクに対応するSRAMビットセル415(例えば、図2のビットセル221)とSRAMビットセル415に対応する演算器420(例えば、図2の演算器222)を含むSRAMビットセル回路225、及び加算器440(例えば、加算器ツリー)を含むイン・メモリコンピューティング(IMC)回路の構造を示す図400が示されている。
【0099】
4個のメモリバンクごとにSRAMビットセル410のSRAMビットセル415のうち、同じメモリバンクに該当するビットセルには入力ドライバが読込んだSRAMの同じワードライン(例えば、IN<0:n-1><0>、...、IN<0:n-1><63>)の値が印加される。ここで、nは、例えば、64であってもよいが、必ずこれに限定されることはない。
【0100】
IMC回路220のSRAMビットセル回路225は、演算器420から入力される外部入力信号値とSRAMビットセル415に格納された値との間の演算結果に該当する信号を出力する演算器420を含んでもよい。IMC回路220は、MAC演算のための対象メモリバンクに属する各SRAMビットセル415に対応する演算結果が加算器440に伝達されるように演算を行う演算器420の入力を調節することができる(即ち、目標でない演算結果は、演算結果に寄与しない)。
【0101】
演算器420それぞれの出力は、ゲートロジック回路430のロジック演算(例えば、NANDロジック演算)を経て加算器ツリーのような加算器440に伝達されることができる。
【0102】
イン・メモリコンピューティング(IMC)回路220は、MAC演算のための対象メモリバンクに属するビットセルに対応する演算結果が対象メモリバンクのビットセル値と入力ビット値により「1」又は「0」になるようにし、対象メモリバンクを除いた残りのメモリバンクに属するビットセルに対応する演算結果が「0」になるようにする。これによって、対象メモリバンクに対応する演算結果をMAC演算に使用することができ、対象メモリバンクでないメモリバンクは演算結果に影響を与えない。
【0103】
一実施形態において、SRAMビットセル415を複数のメモリバンクで構成することによって演算器420を制御する制御ライン数を減らし、イン・メモリコンピューティング(IMC)回路220の実現面積を減少させ、これにより、イン・メモリコンピューティング(IMC)回路220の面積効率を向上させることができる。
【0104】
また、一実施形態において、演算器420により積演算のためのトランジスタの個数を減らすことで、イン・メモリコンピューティング(IMC)回路220を構成している全体トランジスタの個数を減少させることができる。
【0105】
イン・メモリコンピューティング(IMC)回路220は、SRAMビットセル回路225、ゲートロジック回路430、及び加算器440のそれぞれに印加される電源を部分的に分離してSRAMビットセル回路225、ゲートロジック回路430、及び/又は加算器440のそれぞれに異なる電圧が印加されるようにすることができる。
【0106】
図5A及び図5Bは、一実施形態に係るイン・メモリコンピューティング(IMC)回路の演算器が2つのトランジスタから構成された場合の動作を説明するための図である。図5Aを参照すると、一実施形態に係るSRAMビットセル回路225及びゲートロジック回路(例えば、NANDゲート)430を含むイン・メモリコンピューティング(IMC)回路の構造を示す図500が示されている。
【0107】
SRAMビットセル回路225は、それぞれのビットセルユニットに対して、8個のトランジスタ8Tで構成されたビットセル310と、2つのトランジスタ2Tで構成された演算器320、及びゲートロジック回路430を結合して具現された乗算セルであってもよい。SRAMビットセル回路225は、例えば、4ビットの入力信号I、I、I、Iそれぞれに接続されている4個のメモリバンクBank、Bank、Bank、Bankのそれぞれに対応するビットセル310及びビットセル310のそれぞれに対応する演算器320を含む。
【0108】
演算器320は、第1トランジスタ321及び第2トランジスタ323を含む2つのトランジスタ2T回路から構成される。第1トランジスタ321は、例えば、NMOSトランジスタに該当し、必ずこれに限定されることはない。また、第2トランジスタ323はPMOSトランジスタに該当し、必ずこれに限定されることはない。
【0109】
例えば、対象メモリバンク(例えば、メモリバンク0)の入力信号に該当する第2値(例えば、入力信号I)は、メモリバンク0に対応するビットセル310の読み出しワードライン(RWL)を介して第1トランジスタ321の第1ゲート端子及び第2トランジスタ323の第2ゲート端子に印加されてもよい。第1トランジスタ321のドレイン端子には、対象メモリバンクであるメモリバンクに属するビットセル310に格納された加重値wの反転した加重値(Inverted Weight)
【数3】
値が印加される(便宜上、wバーと表現する)。第1トランジスタ321のソース端子は、第2トランジスタ323のドレイン端子を経てゲートロジック回路430の入力端子に接続される。
【0110】
第1トランジスタ321の第1ゲート端子を経た第1トランジスタ321の出力値は、第2トランジスタ323の第2ゲート端子を経た第2トランジスタ323の出力値に接続されることによって、ビットワイズ積演算の結果に該当する信号から出力される。
【0111】
図5Bを参照すると、図5Aに示されたイン・メモリコンピューティング(IMC)回路でメモリバンク0bankが対象メモリバンクである場合のSRAMビットセル回路225の動作を示した真理表(truth table)530が示されている。
【0112】
図5Aの列(column)のヘッドは、図5Aの回路で同じポイント/ラインに対応する。
【0113】
一例として、メモリバンク0bankに対応する入力信号Iは「1」であり、メモリバンク1bank、メモリバンク2bank、及びメモリバンク3bankそれぞれに対応する入力信号I、I、Iは「0」であってもよい。また、メモリバンク0bankのビットセル310に格納された加重値wが「1」であれば、反転した加重値wバーは「0」である。
【0114】
ここで、「1」である入力信号Iが第1トランジスタ321(メモリバンク0bankのNMOSトランジスタ)のゲート端子に印加されれば、第1トランジスタ321のゲート端子とソース端子との間に電位差が発生するため、チャネルが形成されて第1トランジスタ321が「ON」される。第1トランジスタ321が「ON」されれば、第1トランジスタ321のドレイン端子に接続された反転した加重値wバー=「0」がメモリバンク0bankに対応するビットセル310の出力値Oに出力される。なお、「1」である入力信号Iがメモリバンク0bankのPMOSトランジスタである第2トランジスタ323のゲート端子に印加されれば、第2トランジスタ323の第2ゲート端子とソース端子との間に電位差が発生しないため、チャネルが形成されず第2トランジスタ323が「OFF」される。
【0115】
ここで、対象でないメモリバンク1、メモリバンク2、及びメモリバンク3それぞれに対応する入力信号I、I、I、が「0」であれば、前述と同様に方式でメモリバンク1、メモリバンク2、及びメモリバンク3それぞれに対応するビットセルの演算器320の出力値O、O、Oは「1」になる。従って、NANDゲート430の出力は出力Oに依存する。各メモリバンクに対応するビットセルの出力値のうち、メモリバンク0に対応するビットセル310の演算器320の出力値Oが「0」であるため、NANDゲート430の出力値Oは「1」になる。
【0116】
又は、メモリバンク0に対応する入力信号Iが「0」であり、メモリバンク1、メモリバンク2、及びメモリバンク3それぞれに対応する入力信号I、I、I、が「0」であってもよい。また、メモリバンク0のビットセル310に格納された加重値wが「0」であれば、反転した加重値wバーは「1」であってもよい。
【0117】
第1トランジスタ321(メモリバンク0のNMOSトランジスタ)のゲート端子に「0」の入力信号Iが印加されれば、第1トランジスタ321のゲート端子とソース端子との間に電位差が発生しないため、第1トランジスタ321の端子にチャネルが形成されず、第1トランジスタ321が「OFF」される。また、「0」の入力信号I0が第2トランジスタ323(メモリバンク0のPMOSトランジスタ)のゲート端子に印加されれば、第2トランジスタ323の第2ゲート端子とソース端子との間に発生した電位差によってチャネルが形成されるため、第2トランジスタ323が「ON」される。第2トランジスタ323が「ON」されれば、メモリバンク0に該当するビットセル310の演算器320の出力値Oで第2トランジスタ323のソース端子に印加されたVdd電圧に該当する「1」が出力されてもよい。
【0118】
メモリバンク1、メモリバンク2、及びメモリバンク3のそれぞれに対応する入力信号I、I、I、が「0」である場合、前述と同様に方式でメモリバンク1、メモリバンク2、及びメモリバンク3のそれぞれに対応するビットセルの出力値Oは「1」になる。各メモリバンクに対応するビットセルの出力値が全て「1」である場合、NANDゲート430の出力値Oは「0」になり、その結果、ANDロジック演算を行ったものと同じ結果を取得することができる。図5Aで入力信号Iに接続されたメモリバンク0に対応するビットセル310に印加される入力信号Iとビットセル310に格納された加重値wとの間の積演算は、ビットセル310に格納された加重値wの反転した加重値(Inverted Weight)wバーと入力信号Iを入力にするパストランジスタロジック(Pass transistor logic)構造を介して実行されることができる。
【0119】
ここで、「パストランジスタロジック」は、基本入力を用いてゲート端子、ソース端子、及びドレイン端子を駆動することによってロジックを実現するためのトランジスタを減らすために用いられることができる。補完的なCMOSロジックでは、基本入力がゲート端子を駆動することができる。ここで、基本入力は、例えば、入力、反転入力、VDD、及びGNDに該当する。
【0120】
前述したように、図5Aは、NMOSパストランジスタを使用するイン・メモリコンピューティング(IMC)回路によってAND機能が実現される一例を示す。NMOSパストランジスタでゲート入力が高ければ、左側NMOSトランジスタ、言い換えれば、第1トランジスタ321がオンし、ソース入力が出力にコピーされる。これとは相違に、NMOSパストランジスタでゲート入力が低ければ、右側NMOSパストランジスタ、言い換えれば、第2トランジスタ323がオンし、出力に「0」を伝達することができる。
【0121】
図5Bに示された真理表530は、前述した動作の検証のためのANDゲートの真理表に該当する。
【0122】
ここで、MAC演算に使用されるメモリバンクに対応するビットセルの読み出しワードライン(RWL)には入力信号「1」が印加され、当該メモリバンクに属するビットセルの演算結果が加算器(例えば、図4の加算器230)に伝達されることで、当該メモリバンクが選択されたように処理することができる。これとは相違に、MAC演算に使用されないメモリバンクに対応するビットセルの読み出しワードライン(RWL)には入力信号「0」が印加され、当該メモリバンクに属するビットセルの演算結果が伝達されないことで、当該メモリバンクが選択されていないように処理されることができる。
【0123】
一実施形態では、入力信号Iを読み出すための別途の読み出しワードライン(RWL)の制御信号がなくても直ちに2つのトランジスタから構成されたゲートロジック回路430(例えば、NANDゲート)を用いてビットワイズ積演算を行うため、インターフェースの制御ライン数は、ビットセル310当たり4個(例えば、WBL(Write Bit Line)、WWL(Write Word Line)、WWBL(Write Bit line inverted)、及びRWL(Read Word Line))に減少される。
【0124】
従って、イン・メモリコンピューティング(IMC)回路を構成する総トランジスタの個数は、4バンク×(SRAMビットセル8T+演算器2T)+ゲートロジック回路(8T)=4×10T+8T=48Tであり、総制御ライン数は4バンク×4=16個である。図5において、入力信号Iに接続されたメモリバンク0に対応するビットセル310の積演算の出力値Oは、他のビットセルの積演算の出力値Oと共にNANDゲート430に伝達されることができる。NANDゲート430は、真理表530のように4個のビットセルの出力値Oに対してNANDロジック演算を行った結果Oを加算器230の入力に伝達することでMAC演算を行うことができる。
【0125】
図6A及び図6Bは、一実施形態に係るイン・メモリコンピューティング(IMC)回路がメモリバンクを選択する方法を説明するための図である。図6Aを参照すると、一実施形態によりイン・メモリコンピューティング(IMC)回路のメモリバンク610が対象メモリバンクに選択され、イン・メモリコンピューティング(IMC)回路のメモリバンク630が対象メモリバンクに選択されていない場合を示す。図6Bは、図6Aに示すイン・メモリコンピューティング(IMC)回路の入力値及び出力値を有する真理表650を示す。
【0126】
図6Aに示すように、対象メモリバンクに選択されたメモリバンク610のビットセルに格納された加重値wが「0」であり、ワードラインを介してメモリバンク0の入力信号Iに印加される値が「1」である場合、メモリバンク0に対応する出力O値が「1」になる。メモリバンク0に対応するビットセルの出力O値(例えば、NANDゲートから入力されるビットセルの(O、O)のいずれか1つ)が「1」である場合、NANDゲートの出力値Oは「0」になるため、加算器230におけるMAC演算に影響を与えない。
【0127】
即ち、他のメモリバンク(例えば、メモリバンク1、メモリバンク2、メモリバンク3)の該当ビットセル単位が「0」の入力を有するとき、それぞれのビットセル演算子は、全てNANDゲートに「1」を出力する。従って、NANDゲートの出力は、メモリバンク610のビットセルの出力によって決定されてもよい。他のメモリバンク(例えば、メモリバンク1、メモリバンク2、メモリバンク3)の加重値は、NANDゲートの出力に影響を与えない。言い換えれば、メモリバンク0のビットセルユニットだけが「1」の入力を有するため、そのビットセルは、4個のビットセルユニットのうち唯一のビットセルになり、加重値Wは、NANDゲートの出力に影響を及ぼし得る。
【0128】
メモリバンク610に対応するビットセルに格納された加重値wが「1」であり、ワードラインを介してメモリバンク610の入力信号Iに印加される値が「1」である場合、メモリバンク0に対応する出力O値が「0」になる。各メモリバンクに対応するビットセルの出力値(O、O)のいずれか1つであるメモリバンク0に対応するビットセルの出力O値が「0」である場合、NANDゲートの出力値Oは「1」になるため、加算器230におけるMAC演算に影響を与える。このように、入力信号「1」が印加されるメモリバンクに対応する出力が加算器230におけるMAC演算に影響を与えるため、一実施形態では別途の制御信号がなくてもRWL(Read Word Line)を通した入力信号の印加を介して対象メモリバンク(例えば、メモリバンク0)がMAC演算のために選択されたように作用することができる。
【0129】
又は、例えば、図示の630のようにメモリバンク3に対応するビットセルに格納された加重値wが「1」であり、ワードラインを介してメモリバンク3の入力信号Iに印加される値が「0」である場合、メモリバンク1に対応する出力O値が「1」になるため、加算器230におけるMAC演算は、NANDゲートの出力に影響を受けない。
【0130】
要約すると、各メモリバンクのビットセルグループのうち各ビットセルは、その自身それぞれの演算器(例えば、ビット乗算器)を有する。動作対象でないメモリバンクのビットセルユニットには「不活性化」又は「制御」の入力信号「0」が供給されてもよい。このような信号は、実際の入力データ信号でなく、メモリバンクのターゲッティング/選択回路によって提供されてもよい。実際に入力されるデータ信号は、現在の動作対象であるメモリバンクのビットセルユニットに供給されてもよい。データ入力が「0」であれば演算結果/出力は「0」であるが、データ入力が「1」であれば、演算結果は対象ビットセルに格納された値(例えば、加重値ビット)によって変わり得る。対象ビットセルに格納された加重値ビット値が「1」であれば演算結果は「1」になり、対象ビットセルに格納された加重値ビット値が「0」であれば、演算結果は「0」になる。
【0131】
図7は、一実施形態に係るイン・メモリコンピューティング(IMC)回路の演算器が3つのトランジスタから構成された場合の動作を説明するための図である。図7を参照すると、一実施形態により入力信号I、I、I、Iそれぞれに接続されている4個のメモリバンクそれぞれに対応するビットセル310及びビットセルそれぞれに対応する演算器710を含むSRAMビットセル回路及びゲートロジック回路430(例えば、NANDゲート)を含むイン・メモリコンピューティング(IMC)回路の構造を示す図700が示されている。
【0132】
演算器710は、トランスミッションゲート(transmission gate)711及び第3トランジスタ713を含む3つのトランジスタ3T回路で構成されている。第3トランジスタ713は、例えば、PMOSトランジスタに該当するが、必ずこれに限定されることはない。
【0133】
対象メモリバンク(例えば、メモリバンク0)の入力信号に該当する第2値(例えば、入力信号I0)は、メモリバンク0に対応するビットセルの読み出しワードライン(RWL)を介して、トランスミッションゲート711のイネーブル(enable;E)端子と第3トランジスタ713のゲート端子(「第3ゲート端子」)に印加されてもよい。
【0134】
また、トランスミッションゲート711の入力(In)端子には対象メモリバンクであるメモリバンク0に属するビットセル310に格納された加重値wの反転した加重値(Inverted Weight)wバーが印加される。ビットセル310の反転された入力(Inverted input)I バーは、トランスミッションゲート711のイネーブルバーEバー端子及び第3トランジスタ713のソース端子に接続される。
【0135】
トランスミッションゲート711の出力値と第3トランジスタ713の第3ゲート端子を経た第3トランジスタ713の出力値それぞれは、NANDゲート430の入力に接続され、ビットワイズ積演算の結果に該当する信号から出力されてもよい。
【0136】
例えば、表730に記載されているように、メモリバンク0のビットセル310に格納された加重値wが「1」であり、メモリバンク0に対応する入力信号I0が「1」であり、メモリバンク1、メモリバンク2、及びメモリバンク3それぞれに対応する入力信号I、I、Iが「0」であってもよい。
【0137】
ここで、「1」の入力信号Iがトランスミッションゲート711のイネーブル端子に印加されれば、トランスミッションゲート711は「閉じられた(Closed)」スイッチの役割を行うため、トランスミッションゲート711の入力端子に接続された反転した加重値wバーである「0」がトランスミッションゲート711の出力(Out)端子として出力されることができる。また、第3トランジスタ713のゲート端子に入力信号I=「1」が印加されることで、第3トランジスタ713のソース端子に接続されている反転入力I バー=「0」が第3トランジスタ713の出力値として出力される。
【0138】
トランスミッションゲート711に出力された出力値「0」と第3トランジスタ713の出力値「0」が全て「0」であるため、メモリバンク0に対応するビットセル310の出力値Oに「0」が出力される。各メモリバンクに対応するビットセルの出力値のうちメモリバンク0に対応するビットセル演算器710の出力値Oが「0」であるため、NANDゲート430の出力値Oは「1」になる。
【0139】
図7に示されたイン・メモリコンピューティング(IMC)回路構造で入力信号が「1」である場合、ビットセルに格納されたデータwバー値がスイッチとして動作するトランスミッションゲート711を通じて伝達されるため、図5に示すインメモリコンピューティング(IMC)回路構造に比べて低電圧で動作することができる。
【0140】
また、図7に示されたイン・メモリコンピューティング(IMC)回路の単位(unit)ビットセルを構成する総トランジスタの個数は4バンク×(SRAMビットセル8T+演算器3T)+ゲートロジック回路430(8T NANDゲート)=4×11T+8T=52Tであり、総制御ライン数は4バンク×5個(例えば、WBL、WWL、WWLB、RWL、RWLB(Read Word Line inverted))=20個である。
【0141】
図8は、他の実施形態に係るイン・メモリコンピューティング(IMC)回路の演算器が3つのトランジスタから構成された場合の動作を説明するための図である。図8を参照すると、一実施形態により、入力信号I、I、I、Iそれぞれに接続されている4個のメモリバンクそれぞれに対応するビットセル310及びビットセル310それぞれに対応する演算器810を含むSRAMビットセル回路及びゲートロジック回路430を含むイン・メモリコンピューティング(IMC)回路の構造を示す図面800が示されている。
【0142】
演算器810は、NMOSトランジスタとPMOSトランジスタが並列に接続されているトランスミッションゲート811及び第4トランジスタ813を含む3つのトランジスタ3T回路から構成されてもよい。トランスミッションゲート811は、各トランジスタのゲートに印加される入力Iによってスイッチオン又はオフされる。第4トランジスタ813は、例えば、PMOSトランジスタに該当するが、必ずこれに限定されることはない。
【0143】
対象メモリバンク(例えば、メモリバンク0)の入力信号に該当する第2値(例えば、入力信号I0)は、メモリバンク0に対応するビットセルの読み出しワードライン(RWL)を介してトランスミッションゲート811のイネーブルE端子と第4トランジスタ813のゲート端子(「第4ゲート端子」)に印加されてもよい。
【0144】
また、トランスミッションゲート811の入力(In)端子には、対象メモリバンクであるメモリバンク0に属するビットセル310に格納された加重値wの反転した加重値wバーが印加されてもよい。ビットセル310の反転された入力I バーは、トランスミッションゲート811のイネーブルバーEバー端子に接続されてもよい。
【0145】
第4トランジスタ813のソース端子はVddに接続され、第4トランジスタ813のドレイン端子は、ビットセル310に格納された加重値wの反転した加重wバーに接続されてもよい。
【0146】
トランスミッションゲート811の出力値と第4トランジスタ813の第4ゲート端子を経た第4トランジスタ813の出力値それぞれは、NANDゲート430の入力に接続されてビットワイズ積演算の結果に該当する信号から出力されることができる。
【0147】
例えば、表830に記載されているように、メモリバンク0のビットセル310に格納された加重値wが「1」であり、メモリバンク0に対応する入力信号Iが「1」であり、メモリバンク1、メモリバンク2、及びメモリバンク3それぞれに対応する入力信号I、I、Iが「0」であってもよい。
【0148】
ここで、「1」の入力信号Iがトランスミッションゲート811のイネーブルE端子に印加されれば、トランスミッションゲート811は「閉じられた(Closed)」スイッチの役割を行うため、トランスミッションゲート811の入力端子に接続された反転した加重値wバーである「0」がトランスミッションゲート811の出力(Out)端子に出力される。なお、第4トランジスタ813のゲート端子に入力信号I=「1」が印加されれば、第4トランジスタ813のゲート端子(「第4ゲート端子」)とソース端子との間に電位差が発生しないため、チャネルが形成されず、第4トランジスタ813が「OFF」になる。これにより、第4トランジスタ813の出力値は「0」になる。
【0149】
トランスミッションゲート811で出力された出力値「0」と第4トランジスタ813の出力値「0」が全て「0」であるため、メモリバンク0に対応するビットセル310の演算器810の出力値Oに「0」が出力されてもよい。各メモリバンクに対応するビットセルの出力値のうち、メモリバンク0に対応するビットセル310の演算器810の出力値Oが「0」であるため、NANDゲート430の出力値Oは「1」になる。
【0150】
図9は、一実施形態に係るイン・メモリコンピューティング(IMC)回路を含むニューラルネットワーク装置のブロック図である。図9を参照すると、一実施形態に係るニューラルネットワーク装置900は、アレイ回路910及びコントローラ930を含む。
【0151】
アレイ回路910はイン・メモリコンピューティング(IMC)回路915を含む。イン・メモリコンピューティング(IMC)回路915それぞれは、複数のメモリバンクのうち該当メモリバンクに対応するビットセルそれぞれに格納された第1値と第2値との間の演算結果に該当する信号を出力する演算器がビットセルそれぞれに対応して備えられる。イン・メモリコンピューティング(IMC)回路915それぞれは、SRAMビットセル回路、演算器、及びゲートロジック回路を含んでもよい。イン・メモリコンピューティング(IMC)回路915それぞれは、図2図8を参照して前述したイン・メモリコンピューティング(IMC)回路に該当する。
【0152】
SRAMビットセル回路は複数のメモリバンクに対応するビットセルを含み、ビットセルは、メモリバンクごとにSRAMのワードラインに接続されてもよい。
【0153】
演算器は、各ビットセルに対応する演算結果に該当する信号を出力する。演算器は、複数のメモリバンクのうち、当該メモリバンクに対応するビットセルそれぞれに格納された第1値とワードラインを介して当該メモリバンクの入力信号として印加される第2値との間のビットワイズ乗算結果に対応する信号を出力する複数のトランジスタを含む。演算器は、それぞれ2つのトランジスタ2T回路から構成されてもよく、又は、3つのトランジスタ3T回路から構成されてもよい。
【0154】
例えば、演算器それぞれは、第1トランジスタ及び第2トランジスタを含む2つのトランジスタ2T回路から構成されてもよい。この場合、該当メモリバンクの入力信号に該当する第2値は、第1トランジスタの第1ゲート端子及び前記第2トランジスタの第2ゲート端子に印加されてもよい。また、第1ゲート端子を経た第1トランジスタの出力値は、第2ゲート端子を経た第2トランジスタの出力値に接続されることによって、ビットワイズ積演算の結果に該当する信号から出力されてもよい。
【0155】
又は、演算器それぞれは、トランスミッションゲート(transmission gate)及び第3トランジスタを含む3つのトランジスタ3T回路から構成されてもよい。この場合、該当メモリバンクの入力信号に該当する第2値は、トランスミッションゲートのイネーブル端子及び第3トランジスタの第3ゲート端子に印加されてもよい。トランスミッションゲートの出力値は、第3ゲート端子を経た第3トランジスタの出力値に接続されてビットワイズ積演算の結果に該当する信号から出力されてもよい。
【0156】
ゲートロジック回路(又は、ロジックゲート)は、MAC演算のために対象メモリバンクに属するビットセルそれぞれに対応する演算結果を加算器に伝達する。インメモリコンピューティング(IMC)回路915のそれぞれは、図3図8を通じて前述したイン・メモリコンピューティング(IMC)回路に該当する。
【0157】
コントローラ930は、クロック信号により、ニューラルネットワーク装置900の入力信号に該当する第2値をイン・メモリコンピューティング(IMC)回路915それぞれに入力し、イン・メモリコンピューティング(IMC)回路915それぞれを制御することができる。
【0158】
コントローラ930は、例えば、第2値を含む入力フィーチャーマップ(input feature map)を格納するIFM(input feature map)バッファ931、イン・メモリコンピューティング(IMC)回路915のそれぞれに対する第2値の印加の有無を制御する制御回路933、及び第1値を読み出すRW(read write)回路935のうち少なくとも1つを含んでもよい。
【0159】
制御回路933は、演算器に含まれた複数のトランジスタに対する第2値の印加の有無を制御することにより、ゲートロジック回路が該当メモリバンクに属するビットセルそれぞれに対応する演算結果を加算器に伝達するようにしてもよい。
【0160】
IMC装置は、加重値、入力データ/マップなどのような神経網データを参照し、上述したが、IMC装置は、任意の特定タイプのデータに制限されない。即ち、処理するために使用されるデータタイプに関係なく回路及び装置は新しくて有益である。神経網データ処理は、多くの潜在的アプリケーションのうちの1つに過ぎない。
【0161】
図10は、一実施形態に係るニューラルネットワーク装置を含む電子システムのブロック図である。図10を参照すると、一実施形態に係る電子システム1000は、ニューラルネットワーク(例えば、図1のニューラルネットワーク110)に基づいて入力データをリアルタイムに分析して有効な情報を抽出し、抽出された情報に基づいて状況を判断したり、電子システム1000が搭載されている電子デバイスの構成を制御することができる。例えば、電子システム1000は、ドローン(drone)、先端運転者補助システム(Advanced Drivers Assistance System;ADAS)などのようなロボット装置、スマートTV、スマートフォン、医療デバイス、モバイルデバイス、映像表示デバイス、計測デバイス、IoTデバイスなどに適用され、その他にも様々な種類の電子デバイスのうち少なくとも1つに搭載されてもよい。
【0162】
電子システム1000は、プロセッサ1010、RAM(Random Access Memory)1020、ニューラルネットワーク装置1030、メモリ1040、センサモジュール1050及び送受信モジュール1060を含む。電子システム1000は、入出力モジュール、セキュリティーモジュール、電力制御装置などをさらに含んでもよい。電子システム1000のハードウェア構成の一部は、少なくとも1つの半導体チップに搭載されてもよい。
【0163】
プロセッサ1010は、電子システム1000の全般的な動作を制御する。プロセッサ1010は、1つのプロセッサコア(Single Core)を含んだり、複数のプロセッサコア(Multi-Core)を含んでもよい。プロセッサ1010は、メモリ1040に格納されたプログラム及び/又はデータを処理又は実行してもよい。数個の実施形態において、プロセッサ1010は、メモリ1040に格納されたプログラムを実行することで、ニューラルネットワーク装置1030の機能を制御し得る。プロセッサ1010は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、AP(Application Processor)などに実現されることができる。
【0164】
RAM1020は、プログラム、データ、又は、命令(instructions)を一時的に格納する。例えば、メモリ1040に格納されたプログラム及び/又はデータはプロセッサ1010の制御又はブートコードによりRAM1020に一時的に格納されてもよい。RAM1020は、例えば、DRAM(Dynamic RAM)又はSRAM(Static RAM)などのメモリに実現することができる。
【0165】
ニューラルネットワーク装置1030は、受信される入力データに基づいてニューラルネットワークの演算を行い、実行結果に基づいて様々な情報信号を生成することができる。ニューラルネットワークは、例えば、CNN(Convolution Neural Network)、RNN(Recurrent Neural Network)、FNN(Fuzzy Neural Networks)、Deep Belief Networks、Restricted Boltzman Machinesなどを含むが、必ずこれに限定されることはない。ニューラルネットワーク装置1030は、例えば、ニューラルネットワーク専用のハードウェア加速器自体及び/又はそれを含む装置であってもよく、又は、図9を参照して前述したニューラルネットワーク装置900に該当する。
【0166】
ニューラルネットワーク装置1030は、イン・メモリコンピューティング(IMC)回路のSRAMビットセル回路が同じ入力データを共有及び/又は処理するように制御し、SRAMビットセル回路から出力される演算結果のうち少なくとも一部を選別することができる。
【0167】
ここで、「情報信号」は、例えば、音声認識信号、モノ認識信号、映像認識信号、生体情報認識信号などのような様々な種類の認識信号のうちの1つを含んでもよい。例えば、ニューラルネットワーク装置1030は、ビデオストリームに含まれるフレームデータを入力データとして受信し、フレームデータからフレームデータが示すイメージに含まれた事物に対する認識信号を生成してもよい。ニューラルネットワーク装置1030は、電子システム1000が搭載された電子システムの種類又は機能により様々な種類の入力データを受信し、入力データによる認識信号を生成することができる。
【0168】
メモリ1040は、データを格納するための格納場所として、OS(Operating System)、各種プログラム、及び各種データを格納してもよい。実施形態において、メモリ1040は、ニューラルネットワーク装置1030の演算実行の過程で生成される中間結果を格納してもよい。
【0169】
メモリ1040は、揮発性メモリ又は不揮発性メモリのうち少なくとも1つを含んでもよい。不揮発性メモリは、例えば、ROM(Read Only Memory)、PROM(Programmable Read Only Memory)、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically Erasable Programmable Read Only Memory)、フラッシュメモリ(flash memory)などを含んでもよいが、必ずこれに限定されることはない。揮発性メモリは、例えば、DRAM(Dynamic RAM)、SRAM(Static RAM)、SDRAM、PRAM(Phase Change Memory RAM)、MRAM(Magnetoresistive RAM)、RRAM(Resistive RAM)、及び/又はFRAM(Ferroelectric RAM)などを含んでもよいが、必ずこれに限定されることはない。実施形態により、メモリ1040は、HDD(Hard Disk Drive)、SSD(Solid State Driver)、CF(Compact Flash)カード、SD(Secure Digital)カード、Micro-SD、Mini-SD、Xdピクチャーカード(extreme Digital Picture Card)又はメモリスティック(Memory Stick)のうち少なくとも1つを含んでもよい。
【0170】
センサモジュール1050は、電子システム1000が搭載される電子機器の周辺情報を収集する。センサモジュール1050は、電子システム1000の外部から信号(例えば、映像信号、音声信号、磁気信号、生体信号、タッチ信号など)を検出又は受信し、検出又は受信された信号をデータに変換する。センサモジュール1050は、検出装置、例えば、マイク、撮像装置、イメージセンサ、LIDAR(light detection and ranging)センサ、超音波センサ、赤外線センサ、バイオセンサ、及びタッチセンサなどの様々な種類の検出装置のうち少なくとも1つを含んでもよい。
【0171】
センサモジュール1050は、変換されたデータをニューラルネットワーク装置1030に入力データとして提供することができる。例えば、センサモジュール1050はイメージセンサを含んでもよく、電子システム1000の外部環境を撮影してビデオストリームを生成し、ビデオストリームの連続するデータフレームをニューラルネットワーク装置1030に入力データとして順に提供してもよい。しかし、これに制限されることなく、センサモジュール1050は、様々な種類のデータをニューラルネットワーク装置1030に提供してもよい。
【0172】
送受信モジュール1060は、外部デバイスと通信できる様々な有線又は無線インターフェースを備える。例えば、送受信モジュール1060は、有線近距離通信網(Local Area Network;LAN)、Wi-fi(Wireless Fidelity)のような無線近距離通信網(Wireless Local Area Network;WLAN)、ブルートゥース(Bluetooth)のような無線個人通信網(Wireless Personal Area Network;WPAN)、無線USB(Wireless Universal Serial Bus)、Zigbee、NFC(Near Field Communication)、RFID(Radio-frequency identification)、PLC(Power Line communication)、又は、3G(3rd Generation)、4G(4th Generation)、LTE(Long Term Evolution)などの移動通信網(mobile cellular network)に接続可能な通信インターフェースなどを含んでもよい。
【0173】
図11は、一実施形態に係るイン・メモリコンピューティング(IMC)回路の動作方法を示したフローチャートである。以下、実施形態で各動作は、順に実行されてもよいが、必ず順に実行されなくてもよい。例えば、各動作の順序が変更されてもよく、少なくとも2つの動作が並列的に実行されてもよい。
【0174】
図11を参照すると、一実施形態に係るイン・メモリコンピューティング(IMC)回路は、ステップS1110~ステップS1140を介してビットセルそれぞれに対応する演算結果を加算器に伝達してMAC演算を行うことができる。イン・メモリコンピューティング(IMC)回路は、SRAMビットセル回路及びゲートロジック回路を含んでもよい。SRAMビットセル回路は、例えば、複数のメモリバンクに対応するビットセルとビットセルそれぞれに対応する演算結果に該当する信号を出力する演算器を含んでもよい。ここで、ビットセルは、メモリバンクごとにSRAMのワードラインに接続されてもよい。イン・メモリコンピューティング(IMC)回路は、例えば、図2図9を参照して前述したイン・メモリコンピューティング(IMC)回路に該当し、必ずこれに限定されることはない。
【0175】
ステップS1110において、イン・メモリコンピューティング(IMC)回路は、SRAMビットセル回路の複数のメモリバンクに対応するビットセルそれぞれに第1値を格納する。イン・メモリコンピューティング(IMC)回路は、RW(read write)回路を用いてビットセルそれぞれに第1値を格納することができる。
【0176】
ステップS1120において、イン・メモリコンピューティング(IMC)回路は、SRAM(static random access memory)のビットワードを介して複数のメモリバンクのうちMAC演算のための対象メモリバンクの入力信号に第2値を印加する。ここで、第2値は、イン・メモリコンピューティング(IMC)回路が、例えば、入力ドライバを介してIFM(input feature map)バッファに格納された入力フィーチャーマップから読み出したものであるが、必ずこれに限定されることはない。
【0177】
ステップS1130において、イン・メモリコンピューティング(IMC)回路は、演算器によってビットセルそれぞれに対応して、第1値と第2値との間の積演算の結果に該当する信号を出力する。演算器は積演算の結果に該当する信号を出力する複数のトランジスタを含んでもよい。イン・メモリコンピューティング(IMC)回路は、複数のメモリバンクのうち該当メモリバンクに対応するビットセルそれぞれに格納された第1値とワードラインを介して該当メモリバンクの入力信号に印加される第2値間のビットワイズ(bit-wise)積演算の結果に該当する信号を演算器を介して出力することができる。
【0178】
ステップS1140において、イン・メモリコンピューティング(IMC)回路は、加算器が演算結果に対する合計演算を行うように、ゲートロジック回路を介して対象メモリバンクに属するビットセルそれぞれに対応する演算結果を加算器に伝達する。加算器は、例えば、図2の加算器230、図3の加算器230及び/又は図4の加算器230に該当する。
【0179】
その後、加算器はステップS1140を介して伝達された演算結果に対する合計演算を行い、合計演算結果を累積演算器に格納してもよい。累積演算器は、例えば、図2A図2D、又は、図3の累積演算器240に該当する。
【0180】
図1図11に記述された神経網、神経網装置、電子システム、IMCマクロ、IMC回路、IMC装置、メモリ、格納装置、及び構成要素をハードウェア構成要素によって構成されたり、又は、ハードウェア構成要素を示す。例えば、本実施形態で説明した装置及び構成要素は、例えば、プロセッサ、コントローラ、ALU(arithmetic logic unit)、デジタル信号プロセッサ(digital signal processor)、マイクロコンピュータ、FPGA(field programmable gate array)、PLU(programmable logic unit)、マイクロプロセッサー、又は命令(instruction)を実行して応答する異なる装置のように、汎用コンピュータ又は特殊目的のコンピュータを用いて具現される。処理装置はオペレーティングシステム(OS)及びオペレーティングシステム上で行われるソフトウェアアプリケーションを実行する。また、処理装置は、ソフトウェアの実行に応答してデータをアクセス、格納、操作、処理、及び生成する。理解の便宜のために、処理装置は、1つが使用されることによって説明された場合もあるが、当技術分野で通常の知識を有する者は、処理装置が複数の処理要素(processing element)及び/又は複数タイプの処理要素を含み得ることがわかる。例えば、処理装置は、複数のプロセッサ又は1つのプロセッサ及び1つのコントローラを含む。また、並列プロセッサ(parallel processor)のような他の処理構成も可能である。
【0181】
ソフトウェアは、コンピュータプログラム、コード、命令、又はそのうちの一つ以上の組合せを含み、希望の通りに動作するよう処理装置を構成したり、独立的又は結合的に処理装置を命令することができる。ソフトウェア及び/又はデータは、処理装置によって解釈されたり処理装置に命令又はデータを提供するために、いずれかの類型の機械、構成要素、物理的装置、仮想装置、コンピュータ格納媒体又は装置、又は送信される信号波に永久的又は一時的に具体化することができる。ソフトウェアはネットワークに連結されたコンピュータシステム上に分散され、分散した方法で格納されたり実行され得る。ソフトウェア及びデータは一つ以上のコンピュータで読出し可能な記録媒体に格納され得る。
【0182】
本実施形態による方法は、様々なコンピュータ手段を介して実施されるプログラム命令の形態で具現され、コンピュータ読み取り可能な記録媒体に記録される。記録媒体は、プログラム命令、データファイル、データ構造などを単独又は組み合せて含む。記録媒体及びプログラム命令は、本発明の目的のために特別に設計して構成されたものでもよく、コンピュータソフトウェア分野の技術を有する当業者にとって公知のものであり使用可能なものであってもよい。コンピュータ読み取り可能な記録媒体の例として、ハードディスク、フロッピー(登録商標)ディスク及び磁気テープのような磁気媒体、CD-ROM、DVDのような光記録媒体、フロプティカルディスクのような磁気-光媒体、及びROM、RAM、フラッシュメモリなどのようなプログラム命令を保存して実行するように特別に構成されたハードウェア装置を含む。プログラム命令の例としては、コンパイラによって生成されるような機械語コードだけでなく、インタプリタなどを用いてコンピュータによって実行される高級言語コードを含む。
【0183】
上記で説明したハードウェア装置は、本発明に示す動作を実行するために1つ以上のソフトウェアモジュールとして作動するように構成してもよく、その逆も同様である。
【0184】
上述したように実施形態をたとえ限定された図面によって説明したが、当技術分野で通常の知識を有する者であれば、上記の説明に基づいて様々な技術的な修正及び変形を適用することができる。例えば、説明された技術が説明された方法と異なる順に実行され、及び/又は説明されたシステム、構造、装置、回路などの構成要素が説明された方法とは異なる形態に結合又は組み合わせられてもよく、他の構成要素又は均等物によって置き換え又は置換されたとしても適切な結果を達成することができる。
【0185】
したがって、他の具現、他の実施形態および特許請求の範囲と均等なものも後述する特許請求範囲の範囲に属する。
【符号の説明】
【0186】
200:IMCマクロ
210:書き込みワードラインドライバ(WWL(Write Word Line)driver)
220:イン・メモリコンピューティング(IMC)回路
230:加算器
240:累積演算器
250:入力ドライバ(input driver)(又は、読み出しワードラインドライバ(RWL(Read Word Liner)driver)
260:メモリコントローラ
270:書き込みビットラインドライバ(WBL(Write Bit Line)driver)
図1
図2A
図2B
図2C
図2D
図3
図4
図5A
図5B
図6A
図6B
図7
図8
図9
図10
図11