DE102019116407A1 - Realisierung neuronaler netze mit ternären eingängen und binären gewichten in nand-speicherarrays - Google Patents

Realisierung neuronaler netze mit ternären eingängen und binären gewichten in nand-speicherarrays Download PDF

Info

Publication number
DE102019116407A1
DE102019116407A1 DE102019116407.9A DE102019116407A DE102019116407A1 DE 102019116407 A1 DE102019116407 A1 DE 102019116407A1 DE 102019116407 A DE102019116407 A DE 102019116407A DE 102019116407 A1 DE102019116407 A1 DE 102019116407A1
Authority
DE
Germany
Prior art keywords
voltage
nand
memory cells
input
inputs
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102019116407.9A
Other languages
English (en)
Inventor
Tung Thanh Hoang
Won Ho Choi
Martin LUEKER-BODEN
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SanDisk Technologies LLC
Original Assignee
SanDisk Technologies LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/368,441 external-priority patent/US11170290B2/en
Application filed by SanDisk Technologies LLC filed Critical SanDisk Technologies LLC
Publication of DE102019116407A1 publication Critical patent/DE102019116407A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/54Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using elements simulating biological cells, e.g. neuron
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/32Timing circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Theoretical Computer Science (AREA)
  • Neurology (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Hardware Design (AREA)
  • Read Only Memory (AREA)

Abstract

Die Verwendung einer NAND-Array-Architektur zum Realisieren eines binären neuronalen Netzes (BNN) ermöglicht das Durchführen einer Matrixmultiplikation und -akkumulation innerhalb des Speicherarrays. Eine Einheitssynapse zum Speichern eines Gewichts eines BNN ist in einem Paar in Reihe geschalteter Speicherzellen gespeichert. Ein Binäreingang wird als ein Muster von Spannungswerten an ein Paar von Wortleitungen angelegt, die mit der Einheitssynapse verbunden sind, um die Multiplikation des Eingangs mit dem Gewicht durchzuführen, indem bestimmt wird, ob die Einheitssynapse leitet oder nicht. Die Ergebnisse solcher Multiplikationen werden von einem Abtastverstärker bestimmt, wobei die Ergebnisse von einem Zähler akkumuliert werden. Die Anordnung kann auf ternäre Eingänge erweitert werden, um ein ternär-binäres Netz (TBN) zu realisieren, indem eine Schaltung hinzugefügt wird, um 0-Eingangswerte zu erfassen und den akkumulierten Zählerstand entsprechend anzupassen.

Description

  • RÜCKVERWEISUNG AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung bezieht sich auf die U.S. Patentanmeldung Nummer 62/702.713 , eingereicht am 24. Juli 2018, und eine Anmeldung mit dem Titel „Realization of Binary Neural Networks in NAND Memory Arrays“ von Choi et al., gleichzeitig eingereicht mit der vorliegenden Anmeldung, welche beide hierin durch Bezugnahme aufgenommen werden.
  • HINTERGRUND
  • Künstliche neuronale Netze finden zunehmend Verwendung künstlichen Intelligenz- und maschinellen Lernanwendungen. In einem künstlichen neuronalen Netz wird ein Satz von Eingängen durch eine oder mehrere dazwischenliegende oder verborgene Schichten verbreitet, um einen Ausgang zu erzeugen. Die Schichten, die den Eingang mit dem Ausgang verbinden, sind durch Sätze von Gewichten verbunden, die in einer Trainings- oder Lernphase erzeugt werden, indem ein Satz mathematischer Manipulationen bestimmt wird, um den Eingang in den Ausgang umzuwandeln, wobei durch die Schichten die Wahrscheinlichkeit jeden Ausgangs berechnet wird. Sobald die Gewichte festgelegt sind, können sie in der Inferenzphase verwendet werden, um den Ausgang von einer Reihe von Eingängen zu bestimmen. Obwohl solche neuronalen Netze hochgenaue Ergebnisse liefern können, sind sie äußerst rechenintensiv, und die Datenübertragungen, die beim Lesen der Gewichte, die die verschiedenen Schichten aus dem Speicher verbinden und sie in die Verarbeitungseinheiten einer Verarbeitungseinheit übertragen, involviert sind, können ziemlich intensiv sein.
  • Figurenliste
  • Gleich nummerierte Elemente beziehen sich auf gemeinsame Komponenten in den verschiedenen Figuren.
    • 1 ist ein Blockdiagramm, das eine Ausführungsform eines Speichersystems darstellt, das mit dem Host verbunden ist.
    • 2 ist ein Blockdiagramm einer Ausführungsform einer Front-End-Prozessorschaltung. In einigen Ausführungsformen ist die Front-End-Prozessorschaltung Teil einer Steuerung.
    • 3 ist ein Blockdiagramm einer Ausführungsform einer Back-End-Prozessorschaltung. In einigen Ausführungsformen ist die Back-End-Prozessorschaltung Teil einer Steuerung.
    • 4 ist ein Blockdiagramm einer Ausführungsform eines Speicherpakets.
    • 5 ist ein Blockdiagramm einer Ausführungsform eines Speicherchips.
    • 6 zeigt ein einfaches Beispiel eines künstlichen neuronalen Netzes.
    • 7A ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Trainieren eines neuronalen Netzes beschreibt, um einen Satz von Gewichten zu erzeugen.
    • 7B ist ein Flussdiagramm, das eine Ausführungsform eines Inferenzprozesses unter Verwendung eines neuronalen Netzes beschreibt.
    • 8 ist eine schematische Darstellung der Verwendung einer Matrixmultiplikation in einem neuronalen Netz.
    • 9 ist eine Tabelle zur Darstellung der Ausgang eines binären neuronale Netzes als Reaktion auf die verschiedenen Eingang-Gewicht-Kombinationen.
    • 10 zeigt eine Ausführungsform für eine Einheitssynapse-Zelle zum Speichern eines binären Gewichts in einem Paar von in Reihe geschalteten Speicherzellen.
    • 11 zeigt die Verteilung von Schwellenspannungen zum Speichern von Datenzuständen in einem Binär- oder Einpegel-Zellenspeicher (SLC).
    • 12 und 13 zeigen eine Ausführungsform zur Implementierung eines binären neuronalen Netzes, das ein Paar von in Reihe geschalteten der SLC-Speicherzellen als Einheitssynapse verwendet.
    • Die 14 und 15 entsprechen den 12 und 13, die erweitert sind, um einen „0“-Eingangslogikwert zum Implementieren eines ternären Eingangs einzuschließen.
    • 16 zeigt die Eingliederung der Einheitssynapsen in ein NAND-Array.
    • 17 und 18 betrachten ein Beispiel der Berechnung eines Skalarprodukts für die binäre neuronale Netz-Algebra und wie dies unter Verwendung einer zählerbasierten summierenden digitalen Schaltung für eine Ausführungsform eines SLC NAND binären neuronalen Netzes (BNN) zu implementieren ist.
    • 19 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines binären neuronalen Netzes in Inferenz.
    • 20 und 21 betrachten ein Beispiel, das die Berechnung eines Skalarprodukts für ein ternär-binäres neuronales Netz erweitert, und wie dies unter Verwendung einer zählerbasierten digitalen Summationsschaltung für eine Ausführungsform eines ternär-binären SLC-NAND-Netzes (TBN) implementiert wird.
    • 22 zeigt eine Ausführungsform einer Summationsschaltung für ein SLC NAND-Array zur Unterstützung von ternären binären neuronalen Netzen.
    • 23A und 23B stellen zwei Ausführungsformen für die kombinatorische Logikschaltungsanordnung von 22 bereit.
    • 24 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines ternären binären neuronalen Netzes in Inferenz, wie in den Tabellen der 20 und 21 und der Array-Architektur 22 dargestellt.
    • 25 und 26 veranschaulichen ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array.
    • 27 veranschaulicht ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array zur Erzielung einer hohen Parallelität über NAND-Blöcke durch das Ausnutzen mehrere Blöcke in einer einzigen Ebene.
    • 28 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung ähnlich zu 19, die jedoch die in 27 dargestellte Mehrblockparallelität einschließt.
    • 29 zeigt zusätzliche Ausführungsformen, die gleichzeitig über mehrere Ebenen auf die Eingänge eines neuronalen Netzes schließen können.
    • 30 zeigt eine Ausführungsform einer planaren Leitung für verschiedene neuronale Netzschichten.
    • 31 zeigt eine Ausführungsform, bei der Gewichte verschiedener Schichten in demselben Block, derselben Ebene oder beiden gespeichert werden können.
  • DETAILLIERTE BESCHREIBUNG
  • Um die Rechenkomplexität zu reduzieren und die Speicheranforderungen neuronaler Netze zu lockern, wurden binäre neuronale Netze (BNNs) eingeführt. In BNNs werden die Gewichte und Eingänge des neuronalen Netzes in Binärwerte (-1, +1) gekürzt, und die Binärarithmetik vereinfacht die Multiplikation und Addition zu XNOR- und Bitzähloperationen. Die folgende Offenbarung präsentiert Techniken zum Ausnutzen der Struktur eines NAND-Speichers zum Speichern der Gewichte von binären neuronalen Netzen und zum Ausführen der Multiplikations- und Akkumulationsoperationen innerhalb des NAND-Speichers.
  • Jedes binäre Gewicht wird in einer Einheitssynapse gespeichert, die aus einem Paar von in Reihe geschalteten binären Speicherzellen gebildet wird, wie etwa einem Paar benachbarter Speicherzellen auf einer NAND-Kette, wobei sich eine der Speicherzellen in einem programmierten Zustand und die andere in einem gelöschten Zustand befindet. Abhängig davon, welche Speicherzelle der Einheitssynapse sich in dem programmierten und welche Speicherzelle sich in dem gelöschten Zustand befindet, wird die Einheitssynapse entweder in dem Gewicht -1 oder dem +1 sein. Der Binäreingang wird dann als ein Spannungsmuster an die entsprechenden Wortleitungen angelegt, in denen sich eine der Wortleitungspaare auf einer Lesespannung befindet (für die nur die Speicherzelle mit gelöschtem Zustand leitet) und die andere des Wortleitungspaares liegt auf einer Durchlassspannung (für die eine Speicherzelle in einem der beiden Zustände leitet). Abhängig davon, welche Wortleitung des Wortleitungspaares bei welchem Wert ist, wird der Eingang entweder eine -1 oder eine +1 sein. Durch Anwenden des Eingangs auf das Wortleitungspaar wird die Einheitssynapse (und die entsprechende NAND-Kette) entweder leiten oder nicht, abhängig davon, ob der Eingang und das Gewicht übereinstimmen oder nicht. Das Ergebnis kann durch einen Abtastverstärker bestimmt werden, der mit einer entsprechenden Bitleitung verbunden ist. Durch Anwenden der Eingangs/Einheitssynapsen-Paare entlang einer NAND-Kette und Akkumulieren der Ergebnisse des Abtastverstärkers, können die Multiplikations- und Akkumulationsoperationen des Ausbreitens eines Eingangs durch eine Schicht eines neuronalen Netzes durchgeführt werden. Da die Wortleitungen des Arrays mehrere NAND-Ketten überspannen, kann die Operation gleichzeitig für die Binärgewichte von mehreren Einheitssynapsen durchgeführt werden.
  • Der Grad der Parallelität kann durch die Einführung von Mehrbit-Abtastverstärkern erhöht werden, sodass die Einheitssynapse von verschiedenen Speicherblöcken des Arrays gleichzeitig abgetastet werden kann. Weitere Erhöhungen der Parallelität können durch gleichzeitiges Abtasten auf mehreren Ebenen und Pipelining des Ausgangs einer Ebene, die einer Schicht eines neuronalen Netzes entspricht, zum Eingang einer anderen Ebene werden, die der nachfolgenden Schicht eines neuronalen Netzes entspricht.
  • Die Genauigkeit eines binären gewichteten neuronalen Netzes kann durch Verwendung eines ternären binären Netzes (TBN) erhöht werden. In einer TBN-Anordnung sind die Gewichtswerte binär (-1, +1), aber die Eingänge sind nun ternär (-1, 0, +1). Wie im BNN-Fall können die Gewichte immer noch in einer Einheitssynapse gespeichert werden, die aus einem Paar von in Reihe geschalteten Speicherzellen gebildet ist. Der 0-Eingangswert kann als ein Spannungsmuster implementiert werden, bei dem beide Wortleitungen des Wortleitungspaares die Lesespannung haben (für die nur die Speicherzelle für den gelöschten Zustand leitet). Um solche 0-Eingangswerte zu berücksichtigen, kann eine Logikschaltung bestimmen, wann die Spannungspegel eines Wortleitungspaares übereinstimmen, und den von den Abtastverstärkern akkumulierten Zählwert entsprechend anpassen.
  • 1 ist ein Blockdiagramm, das eine Ausführungsform eines Speichersystems 100 darstellt, das mit dem Host 120 verbunden ist. Das Speichersystem 100 kann die hierin vorgeschlagene Technologie implementieren, wobei die neuronalen Netzeingänge oder andere Daten von dem Host 120 empfangen werden. Abhängig von der Ausführungsform können die Eingänge von dem Host 120 empfangen und dann den Speicherpaketen 104 bereitgestellt werden, um auf die Gewichte zu schließen, die zuvor in die Speicherfelder der Speicherpakete 104 programmiert wurden. Viele unterschiedliche Arten von Speichersystemen können mit der hier vorgeschlagenen Technologie verwendet werden. Beispielspeichersysteme schließen Festkörperlaufwerke („SSDs“), Speicherkarten und eingebettete Speichervorrichtungen ein; es können jedoch auch andere Arten von Speichersystemen verwendet werden.
  • Das Speichersystem 100 von 1 weist eine Steuerung 102, einen nichtflüchtigen Speicher 104 zum Speichern von Daten und einen lokalen Speicher (z. B. DRAM/ReRAM) 106 auf. Die Steuerung 102 weist eine Front-End-Prozessor (FEP) -Schaltung 110 und eine oder mehrere Back-End-Prozessor (BEP) -Schaltungen 112 auf. In einer Ausführungsform ist die FEP-Schaltung 110 auf einem ASIC implementiert. In einer Ausführungsform ist jede BEP-Schaltung 112 auf einem separaten ASIC implementiert. In anderen Ausführungsformen kann eine einheitliche ASIC-Steuerung sowohl die Front-End- als auch die Back-End-Funktionen kombinieren. Die ASICs für jede der BEP-Schaltungen 112 und die FEP-Schaltung 110 sind auf dem gleichen Halbleiter implementiert, sodass die Steuerung 102 als ein System auf einem Chip („SoC“) hergestellt wird. Die FEP-Schaltung 110 und die BEP-Schaltung 112 beinhaltenn beide ihre eigenen Prozessoren. In einer Ausführungsform arbeiten die FEP-Schaltung 110 und die BEP-Schaltung 112 als Master-Slave-Konfiguration, wobei die FEP-Schaltung 110 der Master ist und jede BEP-Schaltung 112 ein Slave ist. Beispielsweise implementiert die FEP-Schaltung 110 eine Flash-Übersetzungsschicht (FTL) oder eine Medienverwaltungsschicht (MML), die eine Speicherverwaltung (z. B. Speicherbereinigung, Abnutzungsnivellierung usw.), eine Übersetzung von logischen zu physikalischen Adressen, eine Kommunikation mit dem Host, eine Verwaltung von DRAM (lokaler flüchtiger Speicher) und eine Verwaltung des Gesamtbetriebs der SSD (oder eines anderen nichtflüchtigen Speichersystems) durchführt. Die BEP-Schaltung 112 verwaltet Speicheroperationen in den Speicherpaketen/-chip auf Anforderung der FEP-Schaltung 110. Zum Beispiel kann die BEP-Schaltung 112 die Lese -, Lösch- und Programmierprozesse ausführen. Zusätzlich kann die BEP-Schaltung 112 eine Pufferverwaltung durchführen, spezifische Spannungspegel einstellen, die von der FEP-Schaltung 110 benötigt werden, eine Fehlerkorrektur (ECC) durchführen, die Toggle-Modus-Schnittstellen zu den Speicherpaketen steuern usw. In einer Ausführungsform ist jede BEP-Schaltung 112 für ihren eigenen Satz von Speicherpaketen verantwortlich.
  • In einer Ausführungsform weist der nichtflüchtige Speicher 104 eine Vielzahl von Speicherpaketen auf. Jedes Speicherpaket schließt einen oder mehrere Speicherchips ein. Daher ist die Steuerung 102 mit einem oder mehreren nichtflüchtigen Speicherchips verbunden. In einer Ausführungsform verwendet jeder Speicherchip in den Speicherpaketen 104 einen NAND-Flash-Speicher (einschließlich eines zweidimensionalen NAND-Flash-Speichers und/oder eines dreidimensionalen NAND-Flash-Speichers). In anderen Ausführungsformen kann das Speicherpaket andere Speichertypen aufweisen.
  • Die Steuerung 102 kommuniziert mit dem Host 120 über eine Schnittstelle 130, die NVM-Express (NVMe) über PCI-Express (PCIe) implementiert. Für die Zusammenarbeit mit dem Speichersystem 100 schließt der Host 120 einen Host-Prozessor 122, einen HostSpeicher 124 und eine PCIe-Schnittstelle 126 ein, die entlang dem Bus 128 angeschlossen ist. Der Hostspeicher 124 ist der physikalische Speicher des Hosts und kann ein DRAM, ein SRAM, ein nichtflüchtiger Speicher oder ein anderer Speichertyp sein. Host 120 ist extern und getrennt von dem Speichersystem 100. In einer Ausführungsform ist das Speichersystem 100 in den Host 120 eingebettet.
  • 2 ist ein Blockdiagramm einer Ausführungsform der FEP-Schaltung 110. 2 zeigt eine PCIe-Schnittstelle 150 zum Kommunizieren mit dem Host 120 und einen Hostprozessor 152 in Kommunikation mit dieser PCIe-Schnittstelle. Der Hostprozessor 152 kann jeder in der Technik bekannte Prozessortyp sein, der für die Implementierung geeignet ist. Der Hostprozessor 152 kommuniziert mit einem Network-On-Chip (NOC) 154. Ein NOC ist ein Kommunikationsuntersystem auf einer integrierten Schaltung, typischerweise zwischen Kernen in einem SoC. NOCs können synchrone und asynchrone Taktdomänen umspannen oder eine ungetaktete asynchrone Logik verwenden. Die NOC-Technologie wendet Netzwerktheorie und -verfahren auf On-Chip-Kommunikationen an und liefert beträchtliche Verbesserungen gegenüber herkömmlichen Bus- und Crossbar-Verbindungen. NOC verbessert die Skalierbarkeit von SoCs und die Leistungseffizienz komplexer SoCs im Vergleich zu anderen Designs. Die Drähte und die Verbindungen des NOC werden von vielen Signalen gemeinsam genutzt. Eine hohe Parallelität wird erreicht, da alle Verbindungen in dem NOC gleichzeitig an unterschiedlichen Datenpaketen arbeiten können. Daher liefert ein NOC, wenn die Komplexität integrierter Subsysteme wächst, eine verbesserte Leistung (wie Durchsatz) und Skalierbarkeit im Vergleich zu früheren Kommunikationsarchitekturen (z.B. dedizierten Punkt-zu-Punkt-Signaldrähten, gemeinsam genutzten Bussen oder segmentierten Bussen mit Brücken). Verbunden mit und in Kommunikation mit NOC 154 ist der Speicherprozessor 156, SRAM 160 und eine DRAM-Steuerung 162. Die DRAM-Steuerung 162 wird verwendet, um mit dem DRAM (z.B. DRAM 106) zu arbeiten und damit zu kommunizieren. SRAM 160 ist ein lokaler RAM-Speicher, der von dem Speicherprozessor 156 verwendet wird. Der Speicherprozessor 156 wird verwendet, um die FEP-Schaltung zu betreiben und die verschiedenen Speicheroperationen auszuführen. In Kommunikation mit dem NOC stehen auch zwei PCIe-Schnittstellen 164 und 166. In der Ausführungsform von 2 schließt der SSD-Controller zwei BEP-Schaltungen 112 ein; daher gibt es zwei PCIe-Schnittstellen 164/166. Jede PCIe-Schnittstelle kommuniziert mit einer der BEP-Schaltungen 112. In anderen Ausführungsformen können mehr oder weniger als zwei BEP-Schaltungen 112 vorhanden sein; daher kann es mehr als zwei PCIe-Schnittstellen geben.
  • Die FEP-Schaltung 110 kann auch eine Flash-Übersetzungsschicht (FTL) oder, allgemeiner, eine Medienverwaltungsschicht (MML) 158 einschließen, die eine Speicherverwaltung (z.B. Speicherbereinigung, Abnutzungsnivellierung, Lastausgleich usw.), eine Übersetzung von logischen zu physikalischen Adressen, eine Kommunikation mit dem Host, eine Verwaltung von DRAM (lokaler flüchtiger Speicher) und eine Verwaltung des Gesamtbetriebs der SSD oder eines anderen nichtflüchtigen Speichersystems durchführt. Die Medienverwaltungsschicht MML 158 kann als Teil der Speicherverwaltung integriert sein, die Speicherfehler behandeln und mit dem Host interagieren kann. Insbesondere kann MML ein Modul in der FEP-Schaltung 110 sein und für die Interna der Speicherverwaltung verantwortlich sein. Insbesondere kann die MML 158 einen Algorithmus in der Firmware der Speichervorrichtung einschließen, der Schreibvorgänge vom Host in Schreibvorgänge in die Speicherstruktur (z.B. 326 von 5 weiter unten) eines Chips übersetzt. MML 158 kann erforderlich sein, weil: 1) der Speicher eine begrenzte Haltbarkeit aufweisen kann; 2) die Speicherstruktur nur in Vielfachen von Seiten beschrieben werden kann; und/oder 3) die Speicherstruktur nicht beschrieben werden kann, falls sie nicht als Block gelöscht wird. Die MML 158 versteht diese potentiellen Begrenzungen der Speicherstruktur, die für den Host möglicherweise nicht sichtbar sind. Dementsprechend versucht die MML 158, die Schreibvorgänge vom Host in Schreibvorgänge in die Speicherstruktur zu übersetzen.
  • 3 ist ein Blockdiagramm einer Ausführungsform einer BEP-Schaltung 112. 3 zeigt eine PCIe Schnittstelle 200 zum Kommunizieren mit der FEP-Schaltung 110 (z.B., in Verbindung mit einer der PCIe-Schnittstellen 164 und 166 von 2). Die PCIe-Schnittstelle 200 ist in Verbindung mit zwei NOCs, 202 und 204. In einer Ausführungsform können die beiden NOCs in ein großes NOC kombiniert werden. Jeder NOC (202/204) ist über eine XOR-Maschine (224/254) und eine ECC-Maschine (226/256) mit dem SRAM (230/260), einem Puffer (232/262), einem Prozessor (220/250) und einer Datenpfadsteuerung (222/252) verbunden. Die ECC-Maschinen 226/256 werden verwendet, um eine Fehlerkorrektur durchzuführen, wie in der Technik bekannt ist. Die XOR-Maschinen 224/254 werden zum XOR der Daten verwendet, sodass Daten auf eine Weise kombiniert und gespeichert werden können, die im Falle eines Programmierfehlers wiederhergestellt werden kann. Die Datenpfadsteuerung 222 ist mit einem Schnittstellenmodul verbunden, um über vier Kanäle mit Speicherpaketen zu kommunizieren. Somit ist der obere NOC 202 einer Schnittstelle 228 für vier Kanäle zur Kommunikation mit Speicherpaketen zugeordnet, und der untere NOC 204 ist einer Schnittstelle 258 für vier zusätzliche Kanäle zur Kommunikation mit Speicherpaketen zugeordnet. Jede Schnittstelle 228/258 schließt vier Toggle-Mode-Schnittstellen (TM-Schnittstelle), vier Puffer und vier Scheduler ein. Für jeden Kanal gibt es einen Scheduler, einen Puffer und eine TM-Schnittstelle. Der Prozessor kann irgendein Standardprozessor sein, der in der Technik bekannt ist. Die Datenpfadsteuerungen 222/252 können ein Prozessor, ein FPGA, ein Mikroprozessor oder eine andere Art von Steuerung sein. Das XOR-Maschinen 224/254 und ECC-Maschinen 226/256 sind dedizierte HardwareSchaltungen, bekannt als Hardware-Beschleuniger. In anderen Ausführungsformen können die XOR-Maschinen 224/254 und ECC-Maschinen 226/256 in Software implementiert sein. Die Scheduler, Puffer und TM-Schnittstellen sind Hardwareschaltungen.
  • 4 ist ein Blockdiagramm einer Ausführungsform eines Speicherpakets 104, das eine Vielzahl von Speicherchips 292 einschließt, die mit einem Speicherbus 294 (Datenleitungen und Chipfreigabeleitungen) verbunden sind. Der Speicherbus 294 ist mit einer Toggle-Mode-Schnittstelle 296 zur Kommunikation mit der TM-Schnittstelle einer BEP-Schaltung 112 (siehe z. B. 3) verbunden. In einigen Ausführungsformen kann das Speicherpaket eine kleine Steuerung einschließen, die mit dem Speicherbus und der TM-Schnittstelle verbunden ist. Das Speicherpaket kann einen oder mehrere Speicherchips aufweisen. In einer Ausführungsform schließt jedes Speicherpaket acht oder 16 Speicherchips ein; andere Anzahlen von Speicherchips können jedoch ebenfalls implementiert werden. Die hierin beschriebene Technologie ist nicht auf eine spezifische Anzahl von Speicherchips beschränkt.
  • 5 ist ein Funktionsblockdiagramm einer Ausführungsform eines Speicherchips 300. Die in 5 dargestellten Komponenten sind elektrische Schaltungen. In einer Ausführungsform beinhaltet jeder Speicherchip 300 eine Speicherstruktur 326, eine Steuerschaltung 310 und Lese/Schreibschaltungen 328. Die Speicherstruktur 126 ist durch Wortleitungen über einen Zeilen-Decoder 324 und durch Bitleitungen über einen Spalten-Decoder 332 adressierbar. Die Lese-/Schreibschaltungen 328 beinhalten mehrere Leseblöcke 350 einschließlich SB1, SB2, ..., SBp (Messschaltung) und ermöglichen das parallele Lesen oder Programmieren einer Seite von Speicherzellen. Befehle und Daten werden zwischen der Steuereinheit und dem Speicherchip 300 über Signalleitungen 318 übertragen. In einem Ausführungsbeispiel schließt der Speicherchip 300 einen Satz von Eingangs- und/oder Ausgangs(I/O)-Stiften ein, die mit Leitungen 318 verbunden sind.
  • Die Steuerschaltung 310 arbeitet mit den Lese-/Schreibschaltungen 328 zusammen, um Speicheroperationen (z.B. Schreiben, Lesen und andere) auf der Speicherstruktur 326 auszuführen, und beinhaltet eine Zustandsmaschine 312, einen chipinternen Adressdecoder 314 und eine Leistungssteuerungsschaltung 316. Die Zustandsmaschine 312 stellt eine Chippegelsteuerung von Speichervorgängen bereit. In einer Ausführungsform ist die Zustandsmaschine 312 durch Software programmierbar. In anderen Ausführungsformen verwendet die Zustandsmaschine 312 keine Software und ist vollständig in Hardware (z.B. elektrischen Schaltungen) implementiert. In einer anderen Ausführungsform wird die Zustandsmaschine 312 durch einen Mikrocontroller ersetzt. In einer Ausführungsform beinhaltet die Steuerschaltung 310 Puffer, wie etwa Register, ROM-Sicherungen und andere Speichervorrichtungen zum Speichern von Vorgabewerten wie Basisspannungen und anderen Parametern.
  • Der On-Chip-Adressdecodierer 314 stellt eine Adressschnittstelle zwischen Adressen, die von einer Steuerung 102 verwendet werden, zu der Hardwareadresse, die von den Decodierern 324 und 332 verwendet wird, bereit. Das Leistungssteuermodul 316 steuert die Leistung und Spannungen, mit denen die Wortleitungen und Bitleitungen bei Speicheroperationen versorgt werden. Das Leistungssteuermodul 316 kann Ladungspumpen zum Erzeugen von Spannungen einschließen. Die Leseblöcke schließen Bitleitungstreiber ein.
  • Für die Zwecke dieses Dokuments, bezieht sich der Begriff „eine oder mehrere Steuerschaltungen“ auf eine Steuerung, eine Zustandsmaschine, einen Mikrocontroller und/oder die Steuerschaltung 310, oder andere analoge Schaltungen, die verwendet werden, um nichtflüchtige Speicher zu steuern.
  • In einer Ausführungsform weist die Speicherstruktur 326 ein dreidimensionales Array von nichtflüchtigen Speicherzellen auf, auf denen mehrere Speicherstufen über einem einzigen Substrat, wie z. B. einem Wafer, ausgebildet sind. Die Speicherstruktur kann jede Art von nichtflüchtigem Speicher aufweisen, der monolithisch in einer oder mehreren physischen Ebenen von Speicherzellen ausgebildet ist, die einen aktiven Bereich aufweisen, der über einem Silizium-(oder anderen Typ von) Substrat angeordnet ist. In einem Beispiel weist die nichtflüchtigen Speicherzellen vertikale NAND-Ketten mit ladungseinfangendem Material auf, wie es zum Beispiel im US-Patent 9.721.662 beschrieben ist, auf das hier in seiner Gesamtheit Bezug genommen wird.
  • In einer anderen Ausführungsform weist die Speicherstruktur 326 ein zweidimensionales Speicher-Array von nichtflüchtigen Speicherzellen auf. In einem Beispiel, sind die nichtflüchtigen Speicherzellen NAND-Flash-Speicherzellen unter Verwendung von Floating-Gates wie beschrieben, zum Beispiel, im U.S. Patentschrift 9.082.502 , hierin durch Bezugnahme in seiner Gesamtheit aufgenommen. Andere Arten von Speicherzellen (z. B. NOR-Typ-Flashspeicher) können ebenfalls verwendet werden.
  • Der exakte Typ der Speicher-Array-Architektur oder Speicherzelle, die in der Speicherstruktur 326 eingeschlossen ist, ist nicht auf die obigen Beispiele beschränkt. Viele unterschiedliche Arten von Speicher-Array-Architekturen oder Speichertechnologien können verwendet werden, um die Speicherstruktur 326 zu bilden. Keine spezielle nichtflüchtige Speichertechnologie ist für die Zwecke der neuen beanspruchten Ausführungsformen, die hier vorgeschlagen werden, erforderlich. Andere Beispiele geeigneter Technologien für Speicherzellen der Speicherstruktur 326 beinhalten ReRAM-Speicher, magnetoresistive Speicher (z.B. MRAM, Spin Transfer Torque MRAM, Spin Orbit Torque MRAM), Phasenwechselspeicher (z.B. PCM) und dergleichen. Beispiele von geeigneten Technologien für die Speicherzellen-Architekturen der Speicherstruktur 126 beinhalten zweidimensionale Arrays, dreidimensionale Arrays, KreuzpunktArrays, gestapelte zweidimensionale Arrays, vertikale Bitleitungs-Arrays und dergleichen.
  • Ein Beispiel eines ReRAM- oder PCMRAM-Kreuzpunktspeichers beinhaltet reversible Widerstandsschaltelemente, die in Kreuzpunktarrays angeordnet sind, auf die durch X-Leitungen und Y-Leitungen (z.B. Wortleitungen und Bitleitungen) zugegriffen wird. In einer anderen Ausführungsform können die Speicherzellen leitfähige Brückenspeicherelemente beinhalten. Ein leitfähiges Brückenspeicherelement kann auch als programmierbare Metallisierungszelle bezeichnet werden. Ein leitfähiges Brückenspeicherelement kann als Zustandsänderungselement basierend auf der physikalischen Verlagerung von Ionen innerhalb eines Festelektrolyten verwendet werden. In einigen Fällen kann ein leitfähiges Brückenspeicherelement zwei feste Metallelektroden beinhalten, eine relativ inerte (z.B. Wolfram) und eine elektrochemisch aktive (z.B. Silber oder Kupfer), mit einem dünnen Film des Festelektrolyten zwischen den beiden Elektroden. Mit steigender Temperatur steigt auch die Mobilität der Ionen, so dass die Programmierschwelle für die leitfähige Brückenspeicherzelle abnimmt. Somit kann das leitfähige Brückenspeicherelement einen weiten Bereich von Programmschwellenwerten als Funktion der Temperatur aufweisen.
  • Ein magnetoresistiver Speicher (MRAM) speichert Daten durch Magnetspeicherelemente. Die Elemente sind aus zwei ferromagnetischen Platten gebildet, von denen jede eine Magnetisierung halten kann, die durch eine dünne Isolierschicht getrennt ist. Eine der beiden Platten ist ein Permanentmagnet, der auf eine bestimmte Polarität eingestellt ist; die Magnetisierung der anderen Platte kann so geändert werden, dass sie der eines externen Felds entspricht, um Speicher zu speichern. Eine Speichervorrichtung ist aus einem Gitter solcher Speicherzellen aufgebaut. Bei einer Ausführungsform zum Programmieren liegt jede Speicherzelle zwischen einem Paar von Schreibleitungen, die in rechten Winkeln zueinander parallel zu der Zelle, eine über und eine unter der Zelle angeordnet sind. Wenn Strom durch sie fließt, wird ein Induktionsmagnetfeld erzeugt.
  • Phasenwechselspeicher (PCM) nutzt das einzigartige Verhalten von Chalkogenidglas aus. Eine Ausführungsform verwendet ein GeTe-Sb2Te3-Übergitter, um nicht-thermische Phasenänderungen zu erreichen, indem einfach der Koordinationszustand der Germaniumatome mit einem Laserimpuls (oder Lichtimpuls von einer anderen Quelle) geändert wird. Daher sind die Dosen der Programmierung Laserimpulse. Die Speicherzellen können gesperrt werden, indem die Speicherzellen daran gehindert werden, das Licht zu empfangen. In anderen PCM-Ausführungsformen werden die Speicherzellen durch Stromimpulse programmiert. Es sei darauf hingewiesen, dass die Verwendung von „Impuls“ in diesem Dokument keinen Rechteckimpuls erfordert, sondern eine (kontinuierliche oder nicht kontinuierliche) Schwingung oder einen Stoß eines Schalls, Stroms, Spannungslichts oder einer anderen Welle beinhaltet.
  • Ein Fachmann in der Technik wird erkennen, dass die hierin beschriebene Technologie nicht auf eine einzige spezifische Speicherstruktur beschränkt ist, sondern viele relevante Speicherstrukturen gemäß dem Geist und Umfang der Technologie, wie hierin beschrieben und wie einem Fachmann der Technik bekannt, abdeckt.
  • Wenn wir uns nun den Datentypen zuwenden, die auf nichtflüchtigen Speichervorrichtungen gespeichert werden können, ist ein spezielles Beispiel für den in der folgenden Diskussion interessierenden Datentyp das in tiefen neuronalen Netzen verwendetes Gewicht. Ein künstliches neuronales Netz wird aus einer oder mehreren Zwischenschichten zwischen einer Eingangsschicht und einer Ausgangsschicht gebildet. Das neuronale Netz findet eine mathematische Manipulation, um den Eingang in den Ausgang umzuwandeln, wobei es sich durch die Schichten bewegt und die Wahrscheinlichkeit jeden Ausgangs berechnet. 6 zeigt ein einfaches Beispiel eines künstlichen neuronalen Netzes.
  • In 6 ist ein künstliches neuronales Netz als eine durch die Kreise dargestellte verbundene Gruppe von Knoten oder künstlichen Neuronen und eine Reihe von Verbindungen vom Ausgang eines künstlichen Neurons zum Eingang eines anderen dargestellt. Das Beispiel zeigt drei Eingangsknoten (I1, I2, I3) und zwei Ausgangsknoten (O1, O2), mit einer Zwischenschicht aus vier verborgenen- oder Zwischenknoten (H1, H2, H3, H4). Die Knoten, oder künstlichen Neuronen/Synapsen, des künstlichen neuronalen Netzes werden durch logische Elemente von einem Host oder eine anderer Verarbeitungssysteme als eine mathematische Funktion implementiert, die eine oder mehrere Eingänge empfängt und diese summiert, um einen Ausgang zu erzeugen. Üblicherweise wird jeder Eingang separat gewichtet, und die Summe wird durch die mathematische Funktion des Knotens geleitet, um den Ausgang des Knotens bereitzustellen.
  • In üblichen Implementierungen von künstlichen neuronalen Netzen, ist das Signal an einer Verbindung zwischen Knoten (künstlichen Neuronen/Synapsen) eine reelle Zahl, und der Ausgang jedes künstlichen Neurons wird durch eine nichtlineare Funktion der Summe seiner Eingänge berechnet. Knoten und deren Verbindungen haben normalerweise ein Gewicht, das sich im Verlauf des Lernprozesses anpasst. Das Gewicht erhöht oder verringert die Stärke des Signals an einer Verbindung. Knoten können eine Schwelle aufweisen, sodass das Signal nur gesendet wird, wenn das Summensignal diesen Schwellenwert kreuzt. Typischerweise werden die Knoten in Schichten aggregiert. Unterschiedliche Schichten können unterschiedliche Arten von Transformationen an ihren Eingängen durchführen. Die Signale wandern von der ersten Schicht (der Eingangsschicht) zur letzten Schicht (der Ausgangsschicht), möglicherweise nachdem die Schichten mehrmals durchlaufen wurden. Obwohl 6 nur eine einzelne Zwischen- oder versteckte Schicht zeigt, kann ein komplexes tiefes neuronales Netz (DNN) viele derartige Zwischenschichten aufweisen.
  • Ein künstliches neuronales Netz wird „trainiert“, indem Eingänge bereitgestellt und anschließend die Ausgänge überprüft und korrigiert werden. Zum Beispiel verarbeitet ein neuronales Netz, das trainiert ist, Hunderassen zu erkennen, einen Satz von Bildern und berechnet die Wahrscheinlichkeit, dass der Hund in einem Bild einer bestimmten Rasse angehört. Ein Benutzer kann die Ergebnisse durchsehen und auswählen, welche Wahrscheinlichkeiten das Netz anzeigen sollte (über einem bestimmten Schwellenwert usw.) und das vorgeschlagene Etikett zurückgeben. Jede mathematische Manipulation als solche wird als Schicht betrachtet, und komplexe neuronale Netze haben viele Schichten. Aufgrund der Tiefe, die durch eine große Anzahl von Zwischen- oder versteckten Schichten bereitgestellt wird, können neuronale Netze komplexe nichtlineare Beziehungen modellieren, wenn sie trainiert werden.
  • 7A ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Trainieren eines neuronalen Netzes beschreibt, um einen Satz von Gewichten zu erzeugen. Der Trainingsprozess wird häufig in der Cloud durchgeführt, wodurch eine zusätzliche oder leistungsfähigere Verarbeitung des Zugriffes ermöglicht wird. In Schritt 701 wird der Eingang, wie beispielsweise ein Satz von Bildern, an den Eingangsknoten empfangen (z.B. I1, I2, I3 in 6). In Schritt 703 wird der Eingang unter Verwendung des aktuellen Satzes von Gewichten durch die Knoten der verborgenen Zwischenschichten (z.B. H1, H2, H3, H4 in 6) weitergeleitet. Der Ausgang des neuronalen Netzes wird dann in Schritt 705 an den Ausgangsknoten (z.B. O1, O2 in 6) empfangen. In dem Hunderassenbeispiel des vorhergehenden Absatzes wäre der Eingang die Bilddaten einer Anzahl von Hunden, und die Zwischenschichten verwenden die aktuellen Gewichtswerte, um die Wahrscheinlichkeit zu berechnen, dass der Hund in einem Bild eine bestimmte Rasse, mit dem vorgeschlagenen Hunderassenetikett, zurückgegeben in Schritt 705. Ein Benutzer kann dann die Ergebnisse in Schritt 707 überprüfen, um auszuwählen, welche Wahrscheinlichkeiten das neuronale Netz zurückgeben soll, und um zu entscheiden, ob der aktuelle Satz von Gewichten eine ausreichend genaue Kennzeichnung liefert, und wenn dies der Fall ist, ist das Training abgeschlossen (Schritt 711). Wenn das Ergebnis nicht genau genug ist, stellt das neuronale Netz die Gewichte in Schritt 709 auf der Grundlage der Wahrscheinlichkeiten ein, die der Benutzer ausgewählt hat, und kehrt dann zu Schritt 703 zurück, um die Eingangsdaten erneut mit den eingestellten Gewichten auszuführen. Sobald der Satz von Gewichten des neuronalen Netzes bestimmt wurde, kann mit „Inferenz“ gefolgert werden. Hierbei handelt es sich um den Prozess der Verwendung der bestimmten Gewichte, um ein Ausgangsergebnis aus Daten zu generieren, die in das neuronale Netz eingegeben wurden. Sobald die Gewichte in Schritt 711 bestimmt worden sind, können sie für eine spätere Verwendung in einem nichtflüchtigen Speicher gespeichert werden, wobei die Speicherung dieser Gewichte in einem nichtflüchtigen Speicher nachstehend ausführlicher erörtert wird.
  • 7B ist ein Flussdiagramm, das einen Prozess für die Inferenzphase des überwachten Lernens unter Verwendung eines neuronalen Netzes beschreibt, um die „Bedeutung“ der Eingangsdaten unter Verwendung einer geschätzten Genauigkeit vorherzusagen. Je nach Fall kann das neuronale Netz sowohl in der Cloud als auch durch den Prozessor eines Edge-Geräts (z.B. Smartphone, Automobilprozess, Hardwarebeschleuniger) abgeleitet werden. In Schritt 721 wird der Eingang empfangen, beispielsweise das Bild eines Hundes in dem oben verwendeten Beispiel. Wenn die zuvor bestimmten Gewichte nicht in dem Gerät vorhanden sind, auf dem die neuronale Netzanwendung ausgeführt wird, werden sie in Schritt 722 geladen. Beispielsweise könnte auf einem Host-Prozessor, der das neuronale Netz ausführt, das Gewicht aus einer SSD ausgelesen werden, in der es gespeichert und in den RAM auf der Host-Vorrichtung geladen werden. In Schritt 723 werden die Eingangsdaten dann durch die Schichten des neuronalen Netzes weitergegeben. Schritt 723 wird dem Schritt 703 von 7B ähneln, wobei nun jedoch die Gewichte verwendet werden, die am Ende des Trainingsprozesses in Schritt 711 eingerichtet werden. Nach der Weitergabe des Eingangs durch die Zwischenschicht wird der Ausgang dann in Schritt 725 bereitgestellt.
  • Neuronale Netze sind typischerweise Feedforward-Netze, in denen Daten von der Eingangsschicht durch die Zwischenschichten und zur Ausgangsschicht fließen, ohne sich zurückzuschleifen. Zunächst erstellt das neuronale Netz in der Trainingsphase des überwachten Lernens, wie in 7A dargestellt, eine Karte virtueller Neuronen und weist diesen Verbindungen zufällige numerische Werte oder „Gewichte“ zu. Die Gewichte und Eingänge werden multipliziert und geben einen Ausgang zwischen 0 und 1 zurück. Wenn das Netz ein bestimmtes Muster nicht genau erkennt, stellt ein Algorithmus die Gewichte ein. Auf diese Weise kann der Algorithmus bestimmte Parameter einflussreicher (durch Erhöhen des entsprechenden Gewichts) oder weniger einflussreich (durch Verringern des Gewichts) machen und die Gewichte entsprechend anpassen, bis er einen Satz von Gewichten bestimmt, der eine ausreichend korrekte mathematische Manipulation liefert, um die Daten vollständig zu verarbeiten.
  • 8 ist eine schematische Darstellung der Verwendung einer Matrixmultiplikation in einem neuronalen Netz. Die Matrixmultiplikation oder MatMul ist ein häufig verwendeter Ansatz sowohl in der Trainings- als auch in der Inferenzphase für neuronale Netze und wird in Kernel-Methoden für maschinelles Lernen verwendet. 8 ist oben ähnlich zu 6, wo nur eine einzige verborgene Schicht zwischen der Eingangsschicht und der Ausgangsschicht gezeigt wird. Die Eingangsdaten werden als Vektor einer Länge dargestellt, die der Anzahl von Eingangsknoten entspricht. Die Gewichte werden in einer Gewichtsmatrix dargestellt, wobei die Anzahl der Spalten der Anzahl der Zwischenknoten in der verborgenen Schicht und die Anzahl der Zeilen der Anzahl der Eingangsknoten entspricht. Der Ausgang wird durch eine Matrixmultiplikation des Eingangsvektors und der Gewichtsmatrix bestimmt, wobei jedes Element des Ausgangsvektors ein Skalarprodukt des Vektors der Eingangsdaten mit einer Spalte der Gewichtsmatrix ist.
  • Eine übliche Technik zum Ausführen der Matrixmultiplikationen ist die Verwendung eines Multiplizierer-Akkumulators (MAC oder MAC-Einheit). Dies hat jedoch eine Reihe von Problemen. Unter erneuter Bezugnahme auf 7B lädt die Inferenzphase in Schritt 722 die Gewichte des neuronalen Netzes, bevor die Matrixmultiplikationen durch die Ausbreitung in Schritt 723 durchgeführt werden. Da jedoch die Menge der involvierten Daten extrem groß sein kann, hat die Verwendung eines Multipliziererakkumulators für das Umfolgern mehrere Probleme, die sich auf das Laden von Gewichten beziehen. Einer davon ist eine hohe Energiedissipation, da große MAC-Arrays mit der erforderlichen Bitbreite verwendet werden müssen. Ein weiteres Problem ist die hohe Verlustleistung aufgrund der begrenzten Größe der MAC-Arrays, was zu einer hohen Datenbewegung zwischen Logik und Speicher und einer weitaus höheren Verlustleistung führt, als sie bei den Logikberechnungen selbst verwendet wird.
  • Um dabei zu helfen, diese Einschränkungen zu vermeiden, kann die Verwendung eines Multipliziererakkumulator-Arrays durch andere Speichertechnologien ersetzt werden. Beispielsweise kann die Matrixmultiplikation in einem Speicher-Array berechnet werden, indem die Eigenschaften des Speicherklassenspeichers (SCM) genutzt werden, z.B. diejenigen, die auf ReRAM-, PCM- oder MRAM-basierten Speicherzellen basieren. Dies ermöglicht, dass die neuronalen Netzeingänge über Lesebefehle bereitgestellt werden und die neuronalen Gewichte zum Umfolgern vorgeladen werden. Durch die Verwendung von In-Memory-Computing kann die Notwendigkeit einer Logik zum Durchführen der Matrixmultiplikation im MAC-Array und das Verschieben von Daten zwischen dem Speicher und dem MAC-Array entfallen.
  • Das Folgende betrachtet Ausführungsformen, die auf Speicher-Arrays basieren, die Architekturen vom NAND-Typ verwenden, wie beispielsweise Flash-NAND-Speicher, die Speicherzellen mit einem Ladungsspeicherbereich verwenden. Flash-NAND-Speicher können implementiert werden, indem sowohl Multi-Level-Zellen (MLC) -Strukturen als auch Single-Level-Zellen (SLC)-Strukturen verwendet werden, wobei im Folgenden hauptsächlich Ausführungsformen betrachtet werden, die auf einem SLC-Flash-Speicher basieren. Im Gegensatz zur MAC-Array-Logik weist die Verwendung eines SLC-Flash-Speichers mehrere Vorteile auf, einschließlich eines viel höheren Bereichs/Bit-Werts, einer viel höheren Durchsatzrate und einer signifikanten Verringerung des Energieverbrauchs aufgrund der Minimierung der Datenbewegung durch Multiplikation innerhalb des Arrays. Darüber hinaus ist die NAND-Flash-Struktur hochgradig skalierbar und unterstützt tiefe und breite neuronale Netze.
  • Eine Technik, die verwendet werden kann, um die Rechenkomplexität des Inferenzprozesses zu verringern, ist die Verwendung eines Binären neuronalen Netzes (BNN), bei dem ein neuronales Netz mit binären Gewichten und Aktivierungen arbeitet. Ein BNN (auch XNOR-Netz genannt) berechnet die Matrix-Vektor-Multiplikation mit „binären“ Eingängen {-1, 1} und „binären“ Gewichten {-1, 1}. 9 ist eine Tabelle zur Darstellung des Ausgangs eines binären neuronale Netzes als Reaktion auf die verschiedenen Eingang-Gewicht-Kombinationen. Wie in der Spalte ganz rechts gezeigt, ist der Ausgang 1, wenn Eingang und Gewicht übereinstimmen; und wenn sich der Eingang und das Gewicht unterscheiden, ist der Ausgang -1. 10-13 zeigen eine Ausführungsform der Realisierung eines neuronalen Netzes mit binären Eingängen und binären Gewichten in einem SLC-NAND-Array.
  • 10 zeigt eine Ausführungsform für eine Einheitssynapse-Zelle zum Speichern eines binären Gewichts in einem Paar von in Reihe geschalteten Speicherzellen FG1 und FG2. In diesem Beispiel ist jede der Speicherzellen eine SLC-Zelle, die einen von zwei Zuständen speichert und Teil einer größeren NAND-Kette sein kann. Die Speicherzellen FG1 und FG2 können Flash-Speicherzellen sein und werden durch jeweiliges Hinzufügen oder Entfernen von Elektronen von einer Ladungsspeicherschicht oder einem Floating-Gate programmiert oder gelöscht und werden durch Anlegen entsprechender Spannungen V1 und V2 an ihre Steuergates abgetastet. Wenn die Speicherzellen FG1 und FG2 Teil einer größeren NAND-Kette sind, die zusätzliche Einheitssynapsenzellen oder andere Speicherzellen einschließt, kann das Paar von Speicherzellen auf der NAND-Kette benachbart sein oder durch andere Speicherzellen getrennt sein, welche die NAND-Kette bilden. In der folgenden Erörterung werden die einzelnen Speicherzellen einer Einheitssynapse-Zelle als benachbart dargestellt, jedoch sind je nach Ausführungsform andere Anordnungen möglich. Beispielsweise könnte die obere Hälfte einer NAND-Kette die erste Speicherzelle jeder Einheitssynapse einschließen, während sich die zweite Speicherzelle jeder Einheitssynapse in der unteren Hälfte der NAND-Kette befindet. Bei jeder dieser Anordnungen werden beim Abtasten einer gegebenen Einheitssynapse die anderen Speicherzellen und Auswahlgatter auf derselben NAND-Kette so vorgespannt, dass sowohl die Speicherzellen der nicht ausgewählten Einheitssynapsen und alle anderen Speicherzellen leiten, zusammen mit den Auswahlgattern, leitend sind.
  • 11 zeigt die Verteilung von Schwellenspannungen zum Speichern von Datenzuständen in einem SLC-Speicher. In dieser Ausführungsform wird der gelöschte negative Schwellenzustand als „1“-Zustand und der positive Schwellenzustand als „0“-Zustand angenommen. 10 zeigt eine typische Verteilung der Schwellenspannung der Speicherzellen eines Satzes von Speicherzellen, beispielsweise eines Löschblocks oder eines gesamten Arrays, nachdem die Speicherzellen gelöscht wurden (hier dem Zustand „1“ zugewiesen) und die Speicherzellen auf die positiven Schwellenzustände programmiert werden (hier dem Zustand „0“ zugewiesen). Wie unter Bezugnahme auf die 12 und 13 weiter erläutert, hat ein binäres Gewicht eine Speicherzelle einer Einheitssynapse im „0“-Zustand und die andere Speicherzelle im „1“-Zustand. Allgemeiner gesagt, muss der „1“-Zustand kein negativer Schwellenzustand sein, solange die beiden Zustände einem unteren Schwellenzustand entsprechen, hier als der „1“-Zustand definiert, und einem höheren Schwellenzustand, hier definiert als der „0“-Zustand.
  • Zum Abtasten der Speicherzellen mit der in 11 dargestellten Schwellenverteilung wird ein erster Spannungspegel Vread verwendet, um zwischen den Datenzuständen zu unterscheiden, sodass die Speicherzelle, wenn sie an das Steuergate einer Speicherzelle angelegt wird, im „1“-Zustand leitet und im „0“-Zustand nicht leitet. Wenn zum Beispiel die „1“ Zustände ein negativer Schwellenspannungszustand sind und die „0“ Zustände ein positiver Schwellenspannungszustand sind, könnte Vread als 0 V genommen werden. Eine zweite Abtastungsspannung Vpass ist hoch genug, sodass eine Speicherzelle in jedem Zustand leiten wird. Beispielsweise könnte Vpass einige Volt betragen. Im Folgenden wird Vread als Eingangsspannungswert „0“ und Vpass als Eingangsspannungswert „1“ definiert.
  • Bei Implementierungen eines NAND-Flash-Speichers werden häufig eine Reihe unterschiedlicher Spannungspegel für Abtastoperationen sowohl bei Programmverifizierungsals auch bei Leseoperationen für SLC- und MLC-Speicher verwendet. Beispielsweise kann ein Programmierprüfpegel für einen gegebenen Datenzustand von dem Lesespannungspegel für denselben Datenzustand versetzt sein. Es können auch verschiedene Pegel zum Durchlassen von Spannungen bei verschiedenen Operationen und Bedingungen verwendet werden, um eine Speicherzelle unabhängig von ihrem gespeicherten Datenzustand in einen leitenden Zustand zu versetzen. Zur Vereinfachung der folgenden Diskussion wird nur die einzelne Vread-Spannung verwendet, um zwischen den Datenzuständen zu unterscheiden, und nur die einzelne Vpass-Spannung wird verwendet, wenn eine Speicherzelle oder ein Auswahlgatter für alle gespeicherten Datenzustandswerte in einen leitenden Zustand versetzt werden soll.
  • 12 und 13 zeigen eine Ausführungsform zur Implementierung eines binären neuronalen Netzes, das ein Paar von in Reihe geschalteten der SLC-Speicherzellen als eine Einheitssynapse verwendet. Insbesondere zeigt 13 eine Ausführungsform für die Entsprechung zwischen der Eingangslogik, der Gewichtslogik und der Ausgangslogik von 9 und den Eingangsspannungsmustern, der Schwellenspannung Vth der Speicherzellen der Einheitssynapse bzw. der Ausgangsspannung. 12 ist eine schematische Darstellung der Antwort einer Einheitssynapse auf die verschiedenen Fälle.
  • In den 12 und 13 entspricht ein logischer Eingang von -1 dem Eingangsspannungsmuster von V1=Vpass=„1“, V2=Vread=„0“; und ein logischer Eingang von +1 entspricht dem Eingangsspannungsmuster von V1= Vread=„0“, V2= Vpass=„1“. Eine Gewichtslogik von -1 entspricht dem Zustand der Speicherzelle FG1 „0“ (programmiert) und dem Zustand von FG2 „1“ (gelöschter Zustand); und eine Gewichtslogik von +1 entspricht dem Zustand der Speicherzelle FG1 „1“ und dem Zustand von FG2 „0“. Eine Ausgangslogik von +1 entspricht der Einheitssynapse, die einen Strom Icell leitet, was zu einem Ausgangsspannungsabfall von ΔV über der Einheitssynapse führt; und eine Ausgangslogik von -1 entspricht der Einheitssynapse, die nicht leitet, was zu einem geringen oder keinem Ausgangsspannungsabfall über der Einheitssynapse führt.
  • 12 zeigt schematisch die vier Fälle von Eingangs-Gewichtspaaren. Im Fall 1 stimmen der Eingang und das Gewicht beide mit den Werten von -1 überein. Das angelegte Eingangsspannungsmuster wendet die höhere Eingangsspannung von Vpass, oder „1“, an die obere Zelle mit dem höheren Vth „0“-Datenzustand und die niedrigere Eingangsspannung von Vread, oder „0“, an die niedrigere Zelle mit dem niedrigeren Wert an Vth „1“-Datenzustand an, sodass Zellen leitend sind und einen Strom von Icell durchlassen. In Fall 2 ist das Eingangsspannungsmuster in Bezug auf Fall 1 umgekehrt, wobei die Eingangslogik jetzt bei +1 liegt, während das Gewicht bei -1 liegt. Dies führt zu einem niedrigeren Vpass, oder „0“, -Spannungspegel, der an die obere Zelle mit höherem Vth angelegt wird, was folglich nicht leitend ist (wie durch das X unter der Speicherzelle angezeigt), und es fließt kein nennenswerter Strom durch das Paar.
  • Für die Fälle 3 und 4 unten in 12 beträgt der Gewichtswert jetzt +1, wobei der untere Vth-Status „1“ in der oberen Zelle und der obere Vth-Status „0“ in der unteren Zelle programmiert ist. In Fall 3 wird das Eingangsspannungsmuster -1 an die Einheitssynapse angelegt, was dazu führt, dass die untere Zelle nicht leitet, wenn sie den unteren Spannungspegel Vread, oder „0“, empfängt. In Fall 4 wird nun der höhere Vpass- oder „1“ -Eingang an die niedrigere Speicherzelle angelegt, die folglich leitet, und die Einheitssynapse leitet den Strom Icell weiter.
  • Wie in der Ausführungsform von 12 und 13 dargestellt, kann die Verwendung eines Paares von in Reihe geschalteten Speicherzellen von 10 als Einheitssynapse verwendet werden, um die binäre neuronale Netz-Logiktabelle von 9 zu implementieren. Die Einheitensynapsen können in größere NAND-Folgen mehrerer solcher in Reihe geschalteter Einheitensynapsen integriert werden. Wenn eine ausgewählte Einheitssynapse auf einer NAND-Kette abgetastet wird, können andere Einheitssynapsen auf derselben NAND-Kette unter Verwendung einer Vpass-Spannung vorgespannt werden, wobei die NAND-Ketten-Auswahlgatter ebenfalls vorgespannt werden.
  • Die Verwendung eines NAND-Flash-Speichers zum Speichern des Gewichts und zum Berechnen der Skalarprodukte von Eingängen und Gewichten im Array kann sowohl in der Trainings- als auch in der Inferenzphase verwendet werden. Die Trainingsphase kann wie in dem Ablauf von 7A fortgesetzt werden, wobei Schritt 709 die Gewichte nach Bedarf löschen und neu programmieren würde, um die Gewichte einzustellen, bis in Schritt 707 festgestellt wird, dass sie ausreichend genau sind. Die vorliegende Diskussion konzentriert sich hauptsächlich auf die Inferenzphase, in der die Gewichte zuvor in einem Trainingsprozess bestimmt und dann durch Programmieren der Einheitssynapsen auf die bestimmten binären Gewichtswerte in einen NAND-Speicher geladen wurden.
  • Eine Technik zum Verbessern der Genauigkeit eines neuronalen Netzes mit binärer Gewichtung besteht in der Verwendung eines 3-Werts oder Ternärs in einem Ternäreingang- und einem neuronalen Netz mit binärer Gewichtung (TBN). In einem solchen TBN-Netz gilt die Logiktabelle von 9 weiterhin für die Eingänge -1 und +1, wird jedoch jetzt um einen dritten Eingangswert von „0“ erweitert, für den der Ausgang jetzt gewichtsunabhängig ist und „-1“ für einen der Gewichtswerte. Die 14 und 15 entsprechen den 12 und 13, die erweitert sind, um einen „0“-Eingangslogikwert als Fälle 5 und 6 einzuschließen. Da die Gewichte immer noch binär sind, können die Einheitssynapse und die Zuordnung von Datenzustand und Eingangsspannungen die gleichen sein, wie sie in den 10 und 11 dargestellt sind.
  • In der Tabelle von 15 sind die oberen vier Zeilen für die Fälle 1-4 die gleichen wie für 13, jedoch erweitert, um einen Eingangslogikwert „0“ zum Implementieren eines ternären Eingangs einzuschließen. Die Fälle 5 und 6 entsprechen jeweils den logischen Gewichtswerten -1 und +1, jedoch jetzt mit einem logischen Eingangswert von „0“. Die binären Gewichtswerte werden wie zuvor in der Einheitssynapse implementiert, aber die Eingangslogik „0“ wird implementiert, indem die niedrige Eingangsspannung von Vread, oder „0“, an die Steuergates beider Speicherzellen der Einheitssynapse angelegt wird. Dies ist in 14 schematisch dargestellt.
  • 14 wiederholt die Fälle 1-4 aus 12 und fügt die Fälle 5 und 6 hinzu. Wie für Fall 5 dargestellt, wird, wenn Vread, oder „0“, an beide Steuergates angelegt wird und die obere Speicherzelle für das Gewicht -1 auf den hohen Vth „0“ -Datenzustand programmiert wird, die Einheitssynapse nicht leiten, wie durch das X unter der nichtleitenden Speicherzelle dargestellt. Für den Fall 6 wird für das Gewicht +1 die untere Speicherzelle der Einheitssynapse auf den hohen Vth „0“ -Datenzustand programmiert, und die Einheitssynapse wird wieder nicht leiten, wie durch das X dargestellt. Dies ist in 15 dargestellt, wo beide Fälle 5 und 6 eine Ausgangslogik von -1 haben, was keinem entladenen Strom und keinem Ausgangsspannungsabfall entspricht.
  • 16 zeigt die Eingliederung der Einheitssynapsen in ein NAND-Array, wie in der Speicherstruktur 326 von 5. 16 zeigt einen Block eines möglicherweise größeren Arrays aus vielen Blöcken mit jeweils mehreren NAND-Ketten, die zwischen eine Source-Leitung 1615 und eine entsprechende Bitleitung BLi 1603i geschaltet sind. Ein typisches NAND-Speicher-Array wird aus vielen solchen Speicherblöcken gebildet. Jede NAND-Kette besteht aus einer Anzahl von Reihenspeicherzellen, die in Reihe, zwischen einem Source-seitigen Auswahlgatter SSLi 1609i geschaltet sind, über das die NAND-Kette mit der Source-Leitung 1615 verbunden ist, und einem Drain-seitigen Auswahlgatter DSLi 1607i, über das die NAND-Kette mit der entsprechenden Bitleitung BLi 1603i verbunden ist.
  • Die Speicherzellen entlang jeder NAND-Kette sind zu Einheitssynapsen eines Paares von Speicherzellen gepaart, die ein Gewicht Wi,j speichern, wie es durch die Einheitssynapse von 10 dargestellt ist. Jede der NAND-Ketten kann eine oder mehrere Einheitssynapsen aufweisen, die in Reihe geschaltet sind, wobei die Ausführungsform von 16 pro NAND-Kette 32 Einheitssynapsen zeigt. Jede Einheitssynapse kann ein binäres Gewicht speichern und ist entlang eines Paares von Wortleitungen WL<j> 1605j und WL'<j> 1605'j verbunden, die einen entsprechenden Logikeingang Input<j> empfangen, der den Spannungen von 13 für den binären Eingangsfall und von 15 für den ternären Eingangsfall entspricht. Die Wortleitungspaare WL<j> 1605j und WL'<j> 1605'j überspannen die Spalten der NAND-Ketten des Blocks. In der Ausführungsform von 16 sind die Speicherzellen einer Einheitssynapse auf der NAND-Kette benachbart, aber andere Anordnungen können verwendet werden, sodass die Speicherzellen der Synapsen verschachtelt sind, anstatt zusammenhängend zu sein; und obwohl sich die Diskussion hier auf binäre Gewichte unter Verwendung von zwei SLC-Speicherzellen pro Synapse konzentriert, können andere Ausführungsformen mehr Speicherzellen pro Synapseneinheit, mehrstufige Speicherzellen oder beides verwenden, um neuronale Netzgewichte mit mehr als den zwei Werten das binären Beispiels speichern. Obwohl die NAND-Ketten in der gezeigten Ausführungsform aus ladungsspeichernden Flash-Speicherzellen bestehen, können auch andere Speicherzellen mit der gleichen Array-Architektur verwendet werden.
  • Die Bestimmung des Ausgangs einer Einheitssynapse 1601i,j, die das Gewicht Wi,j speichert, kann durch Anlegen eines logischen Eingangsspannungsmusters an den entsprechenden Eingang am Input<j> bestimmt werden, während die anderen Speicherzellen und Auswahlgatter der ausgewählten NAND-Kette vorgespannt sind, um EIN zu sein. Basierend auf der Eingangslogik und der Gewichtslogik wird die Einheitssynapse, die 1601i,j Gewicht Wi,j speichert, entweder leiten oder nicht, wie in der Tabelle von 15 dargestellt, die durch den entsprechenden Abtastverstärker SAi 1611i bestimmt werden kann. Wie weiter unten diskutiert, kann für jede Bitleitung eine entsprechende digitale Summierschaltung CSCi 1613i auf Zählerbasis verfolgen, wie viele der Einheitssynapsen entlang des Bitleitung in Reaktion auf die Eingänge leiten, diese Werte summieren, wobei die Abtastverstärker und Summierschaltungen Teil der Abtastblöcke 350 von 5 sein können. Der gleiche Eingang<j> wird gleichzeitig an alle Einheitssynapsen 1601i angelegt, wobei j das Gewicht Wi,j für alle Bitleitungen BLi 1603i speichert, wodurch die Auswahlgatter der entsprechenden Auswahlgatter SSLi 1609i und DSLi 1607i vorgespannt werden. Folglich kann derselbe Eingang gleichzeitig auf mehrere Synapsen angewendet werden. Die verschiedenen Synapsen entlang der NAND-Ketten können sequentiell zum Abtasten ausgewählt werden, wobei die Ergebnisse entlang jeder Bitleitung BLi 1603i durch CSCi 1613i akkumuliert werden. In einem NAND-Speicher ist eine Seite die Einheit von Lesen und Programmieren, wobei die gelesene Seite und die programmierte Seite normalerweise als gleich angesehen werden, wie beispielsweise die Gesamtheit der Speicherzellen, die entlang einer Wortleitung oder eines Teils der Speicherzellen, die entlang einer gemeinsamen Wortleitung verbunden sind. Zum Programmieren würden die Daten der Einheitssynapsen entlang einer einzelnen Wortleitung immer noch Wortleitung für Wortleitung programmiert; jedoch, bezogen auf eine Standard-NAND-Speicheroperation, bei der das Ziel, den Dateninhalt der einzelnen Speicherzellen zu bestimmen ist, wird das Lesen einer Seite der binären Gewichtseinheitssynapsen in Wortleitungspaaren durchgeführt, sodass die gelesene Seite in diesem Fall entsprechend einem Wortleitungspaar genommen werden kann.
  • Die in 16 dargestellte Anordnung kann für beide binären neuronalen Netze (BNNs) verwendet werden, bei denen sowohl die Gewichte als auch die Eingänge binär sind, und für ternär-binäre neuronale Netze (TBNs), bei denen die Gewichte binär sind, die Eingänge jedoch ternär sind. Unter erneuter Bezugnahme auf 15 ist jedoch für den Fall des ternären Eingangs der Ausgang der Abtastverstärker für beide Fälle 2 und 5 der gleiche und auch für die Fälle 3 und 6 der gleiche. Wie der Vergleich der Fälle 2 und 5 zeigt, führen sowohl der Eingang +1 als auch der Eingang 0 bei einer Gewichtslogik von -1 dazu, dass die Einheitssynapse nicht leitet, sodass der Abtastverstärker keinen Spannungsabfall feststellt. Ähnlich, wie der Vergleich der Fälle 3 und 6 zeigt, führen sowohl der Eingang -1 als auch der Eingang 0 bei einer Gewichtslogik von +1 dazu, dass die Einheitssynapse nicht leitet, sodass der Abtastverstärker keinen Spannungsabfall feststellt. Folglich können, nur basierend auf dem Leitungszustand der NAND-Kette, die Fälle 2 und 5 und die Fälle 3 und 6 nicht unterschieden werden.
  • Unter erneuter Bezugnahme auf 8 ist die Matrixmultiplikation eine Mehrfachsummenproduktberechnung (Skalarprodukt) für Eingangs-Gewichtsvektorpaare (Zeile-Spalte von Eingangsmatrizen), die zum Umfolgern in einem neuronalen Netz verwendet werden. 17 und 18 betrachten ein Beispiel der Berechnung eines Skalarprodukts für die binäre neuronale Netz-Algebra und wie dies unter Verwendung einer zählerbasierten summierenden digitalen Schaltung für eine Ausführungsform eines SLC NAND BNN zu implementieren ist. Genauer gesagt, obwohl ein binäres neuronales Netz, das auf der in der Tabelle von 8 dargestellten Logik basiert, auf den Gewichten, Eingängen und Ausgängen mit den Werten von entweder +1 oder -1 basiert, wenn es durch ein NAND-Array implementiert wird, wie In 16 dargestellt, wird ein Abtastverstärker entweder als leitend („1“) oder nicht leitend („0“) registriert. Folglich erfordern die zählerbasierten digitalen Summationsschaltungen CSCi 1613i, um die Ergebnisse zum Berechnen des Skalarprodukts der Matrixmultiplikation zu akkumulieren, eine Umwandlung der (+1, -1) -basierten Werte in eine (1,0) -Basis, wobei die -1-Werte durch 0 ersetzt werden.
  • Die Tabelle von 17 betrachtet das Skalarprodukt des Beispiels eines Eingangsvektors Ibnn eines binären neuronalen Netzes mit 8 Elementen über die obere Reihe und eines Gewichtsvektors Wbnn eines binären neuronalen Netzes mit 8 Elementen in der zweiten Reihe, wenn alle Vektorelemente auf -1/+1 quantisiert sind. Die dritte Zeile veranschaulicht das Element-für-Element-Produkt von Ibnn und Wbnn, gleich +1, wenn die beiden übereinstimmen, und -1, wenn sich diese unterscheiden. Das Skalarprodukt basiert dann auf dem Summieren dieser Bit-für-Bit-Produkte, um das Skalarprodukt Pbnn_dec der beiden Vektoren zu erzeugen. Im dezimalen System, wird das letzte korrekte Ergebnis der Addition dieser Werte als Pbnn_dec = 2 berechnet.
  • In den oberen beiden Zeilen der Tabelle von 18 werden der Eingangsvektor Ibnn und der Gewichtsvektor Wbnn für die gleichen Vektoren wie in 17 in die 1/0-Binärbasis umgewandelt. Die dritte Zeile von 18 zeigt den entsprechenden Abtastverstärkerausgang, der der bitweise XNOR-Wert der beiden Vektoren ist, welcher 1 ist, wenn die Werte übereinstimmen, und 0 ist, wenn sich die Werte unterscheiden. Indem diese Werte von den Abtastverstärkern SAi 1611i in den entsprechenden Summierschaltungen CSCi 1613i akkumuliert werden, um ihre Summe zu bestimmen, erzeugt dies einen Popcount CNTbnn_out, der den Werten der Zahl 1 entspricht. In dem Beispiel von 18 ist CNTbnn_out = 5, was sich vom Wert Pbnn_dec = 2 von 17 als Ergebnis einer Nichtübereinstimmung in dem Eingang unterscheidet und das Gewicht ist nun eine 0 anstelle von einer -1.
  • Um dies zu korrigieren und Pbnn_dec im Binärsystem zu bestimmen, kann eine Substitution des Ausgangs des Popcount-Operanden CNTbnn_out in Gl. 1 verwendet werden, um ein abgeleitetes Pbnn_dec zu erhalten P bnn_dec = 2 * CNT bnn_out S ,
    Figure DE102019116407A1_0001
    wobei S die Größe des Vektors ist. In diesem Beispiel ist S = 8, sodass Pbnn_dec = 2*5 - 8 =2 ist, was genau Pbnn_dec=2 für das Skalarprodukt von 17 ist.
  • 19 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines binären neuronalen Netzes in Inferenz, wie es in den 17 und 18 dargestellt ist. In Schritt 1901 wird ein erster Eingangswert an ein Gewicht einer ersten Einheitssynapse angelegt, um eine Multiplikation innerhalb des Arrays durchzuführen. Unter erneuter Bezugnahme auf 16 entspricht dies dem Anlegen eines Eingangswertes<j> an eine entsprechende ausgewählte Einheitssynapse 1601i, wobei j das Gewicht Wi,j auf einer Bitleitung BLi 1603i speichert, beispielsweise Eingang<0>, angewandt an die unterste Einheitssynapse auf BL0. In Schritt 1903 bestimmt der entsprechende Abtastverstärker SAi 1611i, ob die NAND-Kette leitet (1) oder nicht (0), entsprechend einer XNOR-Verknüpfung der Eingangs- und Gewichtswerte. Schritt 1905 führt die Akkumulation durch, wobei das Abtastergebnis zu einem CNTbnn_out-Wert addiert wird, der durch den Zähler CSCi 1613i aufrechterhalten wird. In Schritt 1907 wird bestimmt, ob es mehr Eingangs-/Gewichtspaare gibt, die zu dem Skalarprodukt beitragen sollen, entsprechend einem anderen Eingangs-/Gewichtspaar für das NAND (oder für andere NAND-Ketten auf anderen Blöcken, die entlang der Bitleitung verbunden sind) und wenn ja, wird zu Schritt 1901 zurückgeschleift. Wenn alle Eingangs-/Gewichtspaare für CNT bnn_ou des Skalarprodukts berechnet und summiert wurden, geht der Ablauf zu Schritt 1909 weiter, um den Popcount-CNTbnn_out-Wert zum Skalarprodukt Pbnn_dec umzuwandeln, unter Verwendung von Gl. 1. (Schritt 1908 unterscheidet zwischen den binären Eingangs- und ternären Eingangsfällen, wie unten erörtert wird). In dem Beispiel der Tabellen der 17 und 18 wäre der Wert „S“ für die Gleichung 1 gleich 8, während für eine gesamte NAND-Kette, wie in 16 dargestellt, S=32. Es sei angemerkt, dass die NAND-Array-Struktur von 16 die Berechnung eines Skalarprodukts gemäß dem Ablauf von 19 ermöglicht, das gleichzeitig entlang jeder Bitleitung ausgeführt wird.
  • 20 und 21 betrachten ein Beispiel, das die Berechnung eines Skalarprodukts für ein neuronales Netz mit ternärem Eingang und binärem Gewicht erweitert, und wie dies unter Verwendung einer digitalen Summationsschaltung auf Zählerbasis für eine SLC-NAND-TBN-Ausführungsform implementiert wird. Die 20 entspricht der 17 des BNN-Falls, wobei die Eingangswerte nun die Werte 0 sowie -1 und +1 einschließen können. Dies wird am Beispiel eines ternären Eingangsvektors Itbn veranschaulicht, der Werte von -1, 0 und +1 einschließt. Die Gewichte sind wieder ein binärer Eingangsvektor Wtbn mit Werten von -1 und +1. Die Ausgangswerten der dritten Zeile sind, wie zuvor, für die Werte -1 und +1 und sind +1, wenn das Gewicht und der Eingang übereinstimmen, und sind -1, wenn sie sich unterscheiden, jedoch mit einem Ausgang von 0 für einen Eingang von 0 für beide Gewichtswerte. Das Skalarprodukt Ptbn_dec entspricht dann dem Aufsummieren der Ausgangswerte und ergibt in diesem Beispiel ein Ergebnis von 1.
  • Die 21 ordnet diese TBN-Eingänge und Gewichte den Werten 0 und 1 zu. Wie in 18 gezeigt, wird sowohl für Gewichte als auch für Eingänge der +1-Wert auf 1 und der -1-Wert auf 0 abgebildet. Jetzt wird jedoch der 0-Eingangswert auch auf 0 abgebildet. Dies ist in den Zeilen Ibin und Wbin in der Tabelle in 21 dargestellt. Wenn Ibin und Wbin XNOR unterzogen werden, wie aufgrund des Stroms am Abtastverstärker zu sehen ist, kann dies zu ungültigen Ausgängen für die 0-Ibin-Werte führen, wie in der sechsten Spalte gezeigt, die einen Abtastverstärkerausgang von 1 in der Tabelle von 21 aufweist, wohingegen in der Tabelle von 20 der entsprechende Ausgangswert 0 ist. Dies führt zu einem Popcount-Wert CNTtbn_dec = 4. Folglich ist ein Verfahren erforderlich, um den Ausgang der digitalen Summationsschaltungen CSCi 1613i auf Zählerbasis von 16 anzupassen, um diese anomalen Ergebnisse für 0 ternäre Eingangswerte zu berücksichtigen.
  • Wird die gleiche Methode angewendet wie für den Binärfall mit Gl. 1 führt dies auch zu einem falschen Ausgangsergebnis: zum Beispiel im Fall der 20 und 21, ergibt die Gl. 1 Pbnn_dec = 4*2-8=0, wobei das richtige Ergebnis 1 ist. Durch Verwerfen der XNOR-Ausgänge von den Abtastverstärkern, die 0 Eingängen entsprechen, ist es jedoch möglich, ist es möglich, ein angepasstes, korrekt abgeleitetes Ptbn_dec zu erhalten, unter Verwendung von Gl. 2: P tbn_dec = 2 * CNT tbn_out S tbn ,
    Figure DE102019116407A1_0002
    wobei Stbn = S - Z, S ist wieder die Größe des Vektors und Z ist die Anzahl der Null-Eingänge. Wenn dies auf das Beispiel der 20 und 21 angewendet wird, führt dies dazu, dass der Ausgang XNOR (Abtastverstärkerausgang) für die (ternären) 0-Eingänge der Spalten 2, 3 und 6 verworfen wird, sodass Z = 3 und Stbn = S - Z = 5. Der neue CNTtbn_out = 3, da der XNOR-Wert von Spalte 6 jetzt verworfen wird, da er von einem (ternären) 0-Eingang stammt. Unter Verwendung des angepassten abgeleiteten Ptbn_dec für TBN kann aus Gl. 2 Folgendes berechnet werden: Ptbn_dec = 2*3 - 5 = 1.
  • Unter erneuter Bezugnahme auf 19, bestimmt Schritt 1908, ob das Speicherarray in einem Binäreingangsmodus (BNN) oder einem Ternäreingangsmodus (TBN) betrieben wird. (Der Modus kann basierend auf dem ZID_Enb-Steuersignal eingerichtet werden, wie weiter unten mit Bezug auf 22 beschrieben wird.) Im Binärmodus fährt der Ablauf mit Schritt 1909, wie oben beschrieben, fort und verwendet Gl. 1. Im ternären Eingangsmodus geht der Ablauf stattdessen zu Schritt 1911 und verwendet Gl. 2 um den Popcount CNTtbn_out zu Ptbn_dec zu konvertieren.
  • 22 zeigt eine Ausführungsform der Summationsschaltung für ein SLC NAND-Array zur Unterstützung von ternären binären neuronalen Netzen. Wie in der Architektur auf hoher Ebene von 22 dargestellt, wird eine Schaltungsanordnung eingeführt, um eine frühe Erkennung von 0-Eingängen bereitzustellen und dann die Auswirkungen der 0-Eingänge, die an den Ausgängen der Abstastverstärker gezeigt sind, zu verwerfen. Insbesondere wiederholt 23 viele der Elemente von 16 in einer etwas vereinfachten Form, schließt jedoch auch eine Nulleingangs-Erkennungs(ZID)-Einheit 2201 ein und zeigt einen Wortleitungs-Decodiererblock 2211.
  • Die ZID-Einheit 2201 ist mit den Wortleitungspaaren WL<j>, WL'<j> verbunden, um 0 Eingangsdaten zu erfassen, die als die zwei auf Vread gesetzten Wortleitungen codiert sind. Wie in der Tabelle von 15 dargestellt, unterscheiden sich für die ternären Eingänge -1 und +1 die Spannungspegel für WL<j> und WL'<j> einer ausgewählten Einheitssynapse, sind jedoch für einen Eingang 0 gleich. Für nicht ausgewählte Einheitensynapsen auf der NAND-Kette werden sowohl WL<j> als auch WL'<j> auf den gleichen Spannungspegel von Vpass eingestellt. Folglich stimmen für einen 0-Eingang in die ausgewählte Einheitssynapse die Spannungspegel auf jedem Paar von Wortleitungen überein; Bei einem -1- oder +1-Eingang an der ausgewählten Einheitssynapse wird jedoch eines der Wortleitungspaare (das der ausgewählten Einheitssynapse) nicht übereinstimmen, während die Spannungspegel der anderen Wortleitungspaare (das aller ausgewählten Einheitssynapsen) übereinstimmen werden. Um zu bestimmen, ob die Spannungspegel des Wortleitungspaares WL<j>, WL'<j> für das angelegte Eingangsspannungsmuster übereinstimmen, ist ein NOR-Logikblock 2203j mit jedem der Wortleitungspaare verbunden. Der Ausgang der NOR-Logikblöcke 2203j ist mit einer kombinatorischen Logikschaltung CL 2205 verbunden, um zu bestimmen, ob alle Wortleitungspaare übereinstimmen (ein 0-Eingang zur ausgewählten Einheitssynapse) oder ob eines der Wortleitungspaare nicht übereinstimmt (ein -1 oder +1-Eingang für die ausgewählte Einheitensynapse).
  • Basierend auf diesen Eingängen, erzeugt die kombinatorische Logikschaltung CL 2205 ein Blocksteuersignal (BSC), das an die digitalen Summationsschaltungen CSCi 1613i auf Zählerbasis jeder der Bitleitungen geliefert wird. Jede CSC-Einheit CSCi 1613i kann den Zählwert erhöhen oder, wenn ein 0-Eingang erkannt wird, den Ausgang des Abtastverstärkers im Akkumulationsprozess überschreiben und den ungültigen Ausgang der Abtastverstärker SAi 1611i unter der Kontrolle des BCC-Signals verwerfen. Die ZID-Schaltung 2201 erhöht die Latenz eines NAND-Lesebefehls nicht und die ZID-Logik befindet sich nicht im kritischen Pfad von NAND-Befehlen. Ein binäres neuronales Netz kann in der ternär-binären Architektur von 22 ausgeführt werden, indem die ZID-Schaltung 2201 unter Verwendung eines ZID_Enb-Steuersignals deaktiviert wird, das beispielsweise auf einem Modusregisterwert basieren könnte.
  • 23A und 23B stellen zwei Ausführungsformen für die kombinatorische Logikschaltungsanordnung CL 2205 bereit. In beiden Fällen sind für M-Wortleitungspaare die M-Eingänge die Ausgänge der M-NOR-Logikblöcke 2203i und der Ausgang das BCC-Signal. Die Ausführungsform von 23A verwendet einen ODER-Logik-Reduktionsbaum, um die M-Ausgänge von den NOR-Logikblöcken 2203i zu reduzieren. Die Ausführungsform von 23B verwendet eine Schaltung auf Tri-State-Basis, bei der jedes Tri-State-Element eine „1“ am A-Eingang und den Ausgang der entsprechenden NOR-Logikblöcke 2203i am B-Eingang aufweist.
  • 24 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines ternären binären neuronalen Netzes in Inferenz, wie es in den Tabellen der 20 und 21 und der Array-Architektur der 22 dargestellt ist. Beginnend mit Schritt 2401 und unter Bezugnahme auf 22 empfängt das Speicherarray einen Eingang<j> und übersetzt diesen in einen Satz von Spannungswerten, wobei in einem ternären Eingang das Spannungsmuster des Eingangs einem -1, 0 oder +1 -Eingangswert entsprechen kann; und legt in Schritt 2403 den Spannungspegel an ein Wortleitungspaar WL<j>, WL'<j> 1605j, 1605'j an. Da die Wortleitungen die NAND-Kette des ausgewählten Blocks überspannen, kann der Prozess von 24 gleichzeitig für jede der NAND-Ketten für die Einheitssynapsen ausgeführt werden, die entlang des Wortleitungspaares WL<j>, WL'<j> 1605j, 1605'j verbunden sind. Zusätzlich werden in der NAND-Struktur die anderen Elemente einer ausgewählten NAND-Kette (SSLi 1609i, DSLi 1607i und die nicht ausgewählten Speicherzellen der NAND-Kette) so vorgespannt, dass sie eingeschaltet sind, wie z.B. das Anwenden von Vpass in Schritt 2405. Obwohl in 24 als geordneter Satz von getrennten Schritten aufgelistet, werden die Schritte 2403 und 2405 typischerweise gleichzeitig vom Wortleitungsdecodierer 2211 ausgeführt.
  • In Schritt 2407 bestimmt der NOR-Logikblock 2203j, ob das Spannungsmuster von Eingang<j> mit einem 0-Eingang übereinstimmt, der dem Spannungspegel auf beiden Wortleitungen des Paares WL<j>, WL'<j> 1605j, 1605'j entspricht, übereinstimmend an der Vread-Spannung in der Ausführungsform dieses Beispiels. Der Ausgang der NOR-Logikblöcke wird an der kombinatorischen Logikschaltung CL 2205 empfangen, und wenn das ZID_Enb-Signal aktiviert ist, wird das BCC-Signal erzeugt und den CSC-Schaltungen 1613i zugeführt. Wenn die Schaltung im BNN-Modus mit Binäreingang verwendet wird, wird das Signal ZID_Enb nicht aktiviert, und die CSC-Schaltungen 1613i können wie in der Tabelle von 13 dargestellt arbeiten.
  • Schritt 2409 bestimmt die Leitfähigkeit des Satzes von Speicherzellen der ausgewählten Einheitssynapse. Wie in der Tabelle von 15 dargestellt, entspricht die Leitfähigkeit der NAND-Kette dem Ausgangslogikwert der Einheitssynapse als Reaktion auf den Eingang und kann durch den Abtastverstärker SAi 1611i bestimmt werden. Basierend auf dem Leitfähigkeitszustand der Einheitssynapse und dem Wert des Blockzählersteuerungssignals (BCC) wird in Schritt 2411 der Zählwert des entsprechenden CSCi 1613i entweder inkrementiert oder nicht, wie oben in Bezug auf Gl. 2 und der Tabelle von 21 diskutiert, sodass die falsch abgeleiteten Beiträge zu Ptbn_dec weggelassen, das Ergebnis des Abtastverstärkers überschrieben und die 0-Eingangsbeiträge in der Zählung ignoriert werden.
  • Schritt 2413 bestimmt, ob es mehr Eingangs-Gewichtspaare gibt, die zum Skalarprodukt hinzugefügt werden sollen, und wenn dies der Fall ist, kehrt der Ablauf zu Schritt 2401 zurück. Sobald die Beiträge aller Eingangs-Gewichtspaare zu den Skalarprodukten bestimmt worden sind, kann das Skalarprodukt in Schritt 2415 bereitgestellt werden. Der in Schritt 2415 bestimmte Satz von Skalarprodukten kann dann als Eingang für eine nachfolgende neuronale Netzschicht oder als Ausgang des Inferenzprozesses dienen.
  • 25 und 26 veranschaulichen ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array. In dem oben mit Bezug auf 24 beschriebenen Prozess wird die Antwort auf einen Eingang einer Einheitssynapse entlang jeder Bitleitung basierend darauf bestimmt, ob der entsprechende Abtastverstärker bestimmt, dass die Einheitssynapse leitet oder nicht. Für einen gegebenen Block wird der Beitrag jedes der Synapsen entlang einer NAND-Kette sequentiell durch die Abtastverstärker bestimmt.
  • 25 zeigt ein Beispiel von drei vollständig verbundenen Schichten mit jeweils vier Knoten, sodass die Gewichtsmatrix zwischen den Schichten eine 4x4-Matrix ist. In 25 sind die Eingänge an den Knoten mit Il,i,n bezeichnet, wobei I der Schichtindex ist, i der Eingangsindex ist und n der Neuronenindex ist. In dem Beispiel von 25 sind drei Schichten gezeigt, I=(0,1,2), und jede hat vier Knoten, n=(0,1,2,3). (Der Eingangsindex wird in einigen der folgenden Beispiele für erhöhte Parallelität verwendet.) Die Gewichtsmatrizen Wl,n,n, die die Schichten verbinden, sind dann 4x4, wobei die Matrixmultiplikation zur Bildung der Skalarprodukte von den Eingängen einer Schicht zur nächsten ist: I I + 1,  i ,  n = I I ,  i ,  n * W I ,  n ,  n .
    Figure DE102019116407A1_0003
    Die Eingänge einer Schicht werden als Spannungsmuster auf den Wortleitungspaaren an die Einheitssynapsen angelegt, um Skalarporduktwerte zu erzeugen, die die Eingänge der nächsten Schicht sind.
  • Die 26 ist eine schematische Darstellung, wie diese Gewichtsmatrizen in den Einheitssynapsen eines NAND-Arrays für die In-Array-Berechnungen der Matrixmultiplikation gespeichert werden. In Bezug auf 22 wird der Block (hier mit Block 0 bezeichnet) in Form der in den Einheitssynapsen gespeicherten Gewichte dargestellt, und nicht in Form der entsprechenden Speicherzellenpaare. Die Spannungspegel-Eingangsmuster werden als einzelner Eingang angezeigt, anstelle der an die entsprechenden Wortleitungspaare angelegten Spannungspegel. Die Gewichtsmatrix zwischen einem Paar von Schichten wird dann in einer Anzahl von Einheitensynapsen entlang einer Anzahl von NAND-Ketten gespeichert, wobei die Anzahl von Einheitensynapsen pro NAND-Kette und die Anzahl von NAND-Ketten der Größe der Gewichtsmatrix entspricht. In diesem Beispiel für 4x4-Gewichtsmatrizen entspricht dies 4 Einheitssynapsen entlang 4 NAND-Ketten. Wie in 26 dargestellt, sind dies 4 benachbarte Einheitssynapsen auf 4 benachbarten Bitleitungen, aber diese können abhängig von der Ausführungsform unterschiedlich über den Block verteilt sein.
  • In Bezug auf die Darstellung von 25 ist eine Gewichtsmatrix in transponierter Form auf dem NAND-Array gespeichert. Zum Beispiel werden die Gewichte von den verschiedenen Eingängen der ersten Schicht von 25 in den oberen Knoten 2501 der zweiten Schicht entlang der ersten NAND-Kette gespeichert, die mit BL0 verbunden ist; und die Gewichte in dem unteren Knoten 2503 werden entlang der vierten NAND-Kette gespeichert, die mit BL3 verbunden ist. Um die Übereinstimmung zu veranschaulichen, werden in 26 auch die Bezugszeichen 2501 und 2503 verwendet, um die Platzierung der entsprechenden Gewichte in diesen Knoten zu veranschaulichen.
  • Um die verschiedenen Skalarprodukte der Matrixmultiplikation zu berechnen, werden die Dateneingänge in einer Folge von Lesebefehlen bereitgestellt. Um den Ausgang einer einzelnen Schicht zu berechnen, werden die Seiten von Gewichten dann sequentiell durch die Abtastverstärker über, in diesem Beispiel, vier Zyklen gelesen: Zyklus  1 :  erreicht I 0,0,0 * W 0,0,0
    Figure DE102019116407A1_0004
    Zyklus  2 :  erreicht I 0,0,1 * W 0,0,1
    Figure DE102019116407A1_0005
    Zyklus  3 :  erreicht I 0,0,2 * W 0,0,2
    Figure DE102019116407A1_0006
    Zyklus  4 :  erreicht I 0,0,3 * W 0,0,3 ,
    Figure DE102019116407A1_0007
    wobei jeder der Zyklen einer Schleife in dem Ablauf von 24 entspricht und unterschiedliche Abstastreihenfolgen in unterschiedlichen Ausführungsformen verwendet werden können. Die Ergebnisse der Zyklen werden von dem Abtastverstärker SA auf jeder der Bitleitungen abgetastet und in den CSCs akkumuliert, die den im PCC-Signal dargestellten Wert subtrahieren, um den Einfluss von Null-Eingängen zu verwerfen, bei denen die Latenz des Akkumulationsprozesses unter den gleichzeitigen Multiplikationsoperationen für die folgenden gelesenen Zyklen verborgen wird. Der Ausgang Ptbn_dec von jeder Bitleitung wird dann die Eingänge I1+1, i, n der nächsten Schicht sein.
  • 27 veranschaulicht ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array zur Erzielung einer hohen Parallelität über NAND-Blöcke durch das Ausnutzen mehrere Blöcke in einer einzigen Ebene. In dem oben mit Bezug auf die 24 und 26 beschriebenen Prozess wird die Antwort auf einen Eingang einer Einheitssynapse entlang jeder Bitleitung basierend darauf bestimmt, ob der entsprechende Abtastverstärker bestimmt, dass die Einheitssynapse leitet oder nicht. 27 betrachtet eine Ausführungsform, die einen Mehrbit-Abtastverstärker verwendet, wie z. B. einen, der zwischen verschiedenen Strompegeln unterscheiden kann, wodurch ermöglicht wird, dass mehrere Blöcke in einer einzelnen Ebene gleichzeitig abgetastet werden.
  • Bei einer Standardleseoperation, bei der es das Ziel ist, den in einer Speicherzelle gespeicherten Datenzustand zu bestimmen, wird die Bestimmung durch einen Abtastverstärker basierend auf einem Strom- oder Spannungspegel entlang einer Bitleitung basierend darauf vorgenommen, ob die ausgewählte Speicherzelle leitend ist oder nicht. Wenn mehrere Zellen entlang einer gemeinsamen Bitleitung gleichzeitig abgetastet würden, wobei einige leiten und andere nicht leiten, wäre es nicht möglich zu bestimmen, welcher der einzelnen Speicher die leitenden Zellen der Speicherzellen sind, und ihre entsprechenden Datenzustände herzustellen. Für den Ausgang des Zählers Ptbn_dec aus der Matrixmultiplikation ist jedoch nur die Summe der Anzahl der Einheitensynapsen, die als Reaktion auf die Eingänge leiten, von Bedeutung, nicht jedoch, welche der einzelnen Synapsen dazu beitragen. Infolgedessen kann die Antwort mehrerer Einheitssynapsen auf verschiedene Blöcke als Reaktion auf einen entsprechenden Satz von Eingängen gleichzeitig bestimmt werden, wodurch die Parallelität erhöht wird, wenn der Abtastverstärker die Anzahl der leitenden Synapsen bestimmen kann. Durch die Integration von Mehrfachabtastverstärkern ermöglicht die Ausführungsform von 27, dass Mehrfacheinheitssynapsen entlang einer gemeinsamen Bitleitung von unterschiedlichen Blöcken parallel abgetastet werden.
  • 27 ist ähnlich wie in 26 angeordnet und ist wiederum so dargestellt, dass sie die gleiche 4x4-Gewichtsmatrix speichert, die die ersten zwei Schichten von 25 verbindet. 27 unterscheidet sich von 26 darin, dass die Gewichte jetzt auf zwei verschiedene Blöcke verteilt sind, hier mit Block 0 und Block 1 bezeichnet. Dies können jedoch auch zwei beliebige Blöcke derselben Ebene sein, und die Diskussion kann auf mehr als zwei Blöcke ausgedehnt werden, um die Parallelität weiter zu erhöhen. Wie oben unter Bezugnahme auf die 25 und 26 erläutert, wird die Gewichtsmatrix wieder in einer transponierten Form gespeichert.
  • Die 27 unterscheidet sich auch darin, dass die Blockzählersteuerung BCC von allen abgetasteten Blöcken berücksichtigt werden muss, um die CSC-Zählwerte für 0 Eingangswerte richtig zu versetzen. Die Ebenenzählersteuerung (PCC) ist ein Mehrbitsignal, das die Gesamtzahl der in den L-Blöcken einer Ebene vorhandenen Null-Eingänge angibt. Da einem bestimmten Block immer nur ein Eingang zugewiesen wird, wird höchstens ein Null-Eingang pro Block in jedem Zyklus einer Folge von Lesebefehlen in die Zähl-BTC-Blocklogik eingespeist, um die Anzahl von Einsen aus den verschiedenen Blöcken zu bestimmen. Die CSCs subtrahieren den im PCC-Signal dargestellten Wert, um den Zählwert zu ändern und die Auswirkung von Null-Eingängen zu verwerfen, die in den mehreren Blöcken existieren, auf die parallel zugegriffen wird. Auf die mehreren Blöcke, die sich einen Multibit-Abtastverstärker und eine CSC teilen, kann dann parallel zugegriffen werden, um den Ausgang einer einzelnen Schicht eines neuronalen Netzes zu berechnen.
  • Um eine Matrixmultiplikation durchzuführen, werden Dateneingänge in einer Folge von Lesebefehlen bereitgestellt, aber um den Ausgang einer einzelnen Schicht zu berechnen, werden jetzt mehrere Blöcke parallel gelesen (eine Seite mit Einheitensynapsen pro Block). In dem Beispiel von 27 für die Matrizen von 25, in denen zwei Blöcke gleichzeitig aktiviert sind, kann ein Ausgang einer Schicht innerhalb einer Latenz von 2 Zyklen berechnet werden: Zyklus  1 :  erreicht I 0,0,0 * W 0,0,0 + I 0,0,2 * W 0,0,2
    Figure DE102019116407A1_0008
    Zyklus  2 :  erreicht I 0,0,1 * W 0,0,1 + I 0,0,3 * W 0,0,3
    Figure DE102019116407A1_0009
    wobei Zyklus 2 akkumuliert wird, während der Ausgang für Zyklus 1 berechnet wird, sodass die Akkumulationslatenz unter gleichzeitigen Multiplikationsoperationen verborgen bleibt.
  • 28 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung ähnlich zu 19, die jedoch die in 27 dargestellte Mehrblockparallelität einschließt. In Bezug auf Schritt 1901 kann das parallele Abtasten mehrerer Blöcke in Schritt 2801 nun mehrere Eingänge gleichzeitig in jeder Schleife anwenden. In Schritt 2803 ist das Ausgangssignal des Abtastverstärkers nun ein Mehrbitwert anstelle des Binärwerts von Schritt 1903 und entspricht der Anzahl der leitenden Einheitssynapsen entlang einer Bitleitung. Der Mehrbitwert wird dann in Schritt 2805 akkumuliert, wobei die Schritte 2805, 2807, 2808, 2809 und 2811 den Schritten 1905, 1907, 1908, 1909 und 1911 von 19 entsprechen.
  • Um die Parallelität weiter zu erhöhen, kann die Anzahl der gleichzeitig abgetastete Blöcke über die beiden im Beispiel von 27 gezeigten hinaus bis zur Gesamtzahl der Eingänge für die Schicht erhöht werden. Der Grad der Parallelität kann auf Überlegungen basieren, einschließlich der Menge des resultierenden Stroms, der gezogen werden würde, und des Auflösungsniveaus, das vernünftigerweise von den Mehrbit-Abtastverstärkern aus dem verfügbaren Stromfenster erreicht werden kann.
  • 29 zeigt zusätzliche Ausführungsformen, die die Parallelität weiter erhöhen können, indem eine Architektur verwendet wird, die gleichzeitig über mehrere Ebenen auf die Eingänge eines neuronalen Netzes schließen kann. Die Implementierung mit mehreren Ebenen kann zum Abtasten eines einzelnen Blocks gleichzeitig in jeder Ebene (wie in 26) oder für mehrere Blöcke gleichzeitig in jeder Ebene (wie in 27) verwendet werden. Das Beispiel von 29 basiert wiederum auf dem Beispiel des Netzes von 25 und verwendet zwei Ebenen und zwei Blöcke in jeder Ebene, obwohl sowohl die Anzahl der Ebenen als auch die der Blöcke erweitert werden können.
  • 29 zeigt zwei Ebenen, Ebene 0 und Ebene 1, für eine Ausführungsform, bei der zwei Blöcke pro Ebene gleichzeitig abgetastet werden, wobei sich die Ebenen auf einem gemeinsamen Chip oder auf einem anderen Chip befinden können. Sowohl für Ebene 0 als auch für Ebene 1 werden die Gewichte wie in 27 gespeichert und die anderen Elemente werden ebenfalls aus 27 wiederholt. Wenn sich die Ebenen unterscheiden, ist dies der Eingangsindex für die beiden Ebenen mit den Eingängen I0,0,n für Ebene 0 und dem nachfolgenden Satz von Eingängen für die Ebene von I0,1,n für Ebene 1.
  • Bei der Parallelität auf Blockebene kann der Speicher mehrere Blöcke einer einzelnen Ebene verwenden, um einen Ausgang einer einzelnen Schicht zu berechnen, wobei die Lesebefehle parallel ausgegeben werden können, um auf mehrere Blöcke zuzugreifen, wie in Bezug auf 27 Figur beschrieben, mit einer Seite (der Einheitensynapsen) auf die pro Block in einem Zyklus zugegriffen wird. Durch Hinzufügen der Parallelität auf Ebenenniveau von 29 können mehrere Ebenen verwendet werden, um mehrere Ausgänge einer einzelnen Schicht zu berechnen, indem dieselbe Gewichtsmatrix in beiden Ebenen gespeichert wird und Daten für beide Ebenen parallel bereitgestellt werden können. In der Ausführungsform von 29 können unter Verwendung von 2 Ebenen mit 2 Blöcken/Ebene parallel die zwei Ausgänge einer einzelnen Schicht innerhalb einer Latenz von 2 Zyklen berechnet werden, wobei die Akkumulationslatenz unter Multiplikation verborgen wird (Lesebefehl).
  • Die Parallelität kann auch durch die Verwendung von Ebenen-Pipelining erhöht werden, wobei der Ausgang einer Ebene (entsprechend der Matrixmultiplikation zwischen einem Knotensatz) als Eingang einer anderen Ebene verwendet werden kann (entsprechend der Matrixmultiplikation zwischen dem nächsten Knotensatz). Das Ebenen-Pipelining kann ferner mit Parallelität auf Blockebene, Parallelität auf Ebenenstufe oder beidem kombiniert werden, um noch größere Parallelitätsstufen zu erzielen.
  • 30 zeigt eine Ausführungsform einer planaren Leitung für verschiedene neuronale Netzschichten. Unter erneuter Bezugnahme auf das Beispiel von 25 speichert die erste Stufe in der Pipeline die Gewichtsmatrix zwischen den Schichten 0 und 1 und die nächste Stufe speichert die mit der Gewichtsmatrix verbundenen Schichten 1 und 2. Das Beispiel von 30 gilt für zwei Stufen und schließt auch die 2-Ebenen-Parallelität und 2-Block-Parallelität ein, aber dies sind jeweils unabhängige Aspekte, und es können auf ähnliche Weise mehr Pipeline-Stufen implementiert werden, und der Grad der Parallelität beider Ebenen auf Blockebene ist höher, wenn zusätzliche Parallelität inkludiert wird. Die Ebenen können auf einem einzelnen Chip oder auf mehreren Chips ausgebildet sein.
  • Oben in 30 sind Ebene 0,0 und Ebene 0,1 als Ebene 0 und Ebene 1 für die Ausführungsform von 29 angeordnet und empfangen die Eingänge I0,0,n für Ebene 0,0 und I0,1,n für Ebene 0,1. Ebene 0,0 und Ebene 0,1 berechnen die Ausgänge der 0-Schicht unter Verwendung von Parallelität auf Block- und Ebenenniveau, um die Eingänge I1,0,n und I1,1,n für die nächsten Stufen in der Pipeline von Ebene 1,0 und Ebene 1,1 zu generieren. Unten in 30 sind Ebene 1,0 und Ebene 1,1 wie in der vorherigen Pipelinestufe in Ebene 0,0 und Ebene 0,1 angeordnet, speichern jedoch jetzt die Gewichtsmatrixeinträge W1,n,n (erneut in transponierter Form gespeichert) der zweiten statt der W0,n,n-Einträge der ersten Schicht. Durch Zuführen der Ausgänge der ersten Stufe zur zweiten Stufe und Anlegen der Eingänge I1,0,n und I1,1,n an die Matrixeinträge der Schicht-1 werden dann die Ausgänge der Schicht-1 berechnet.
  • Es ist anzumerken, dass die Gewichte verschiedener Schichten in demselben Block, derselben Ebene oder beiden gespeichert werden können, obwohl dies den Grad der Parallelität verringert, da die Matrixmultiplikation der verschiedenen Schichten nicht gleichzeitig durchgeführt werden würde. Dies wird durch die Ausführungsform von 31 veranschaulicht.
  • 31 zeigt eine Ausführungsform, bei der Gewichte verschiedener Schichten in demselben Block, derselben Ebene oder, in diesem Fall, beiden gespeichert werden können. Insbesondere zeigt 31 eine Ebene mit den Eingängen für zwei Schichten in einer Ebene mit Gewichten für jede in demselben Block. In diesem Beispiel befinden sich die Gewichte von Schicht 1, die in Ebene 1,0 von 30 waren, jetzt in denselben Blöcken wie die Gewichte von Schicht 0, die in Ebene 0,0 der 30 waren. Somit schließt Block 0 in 31 die Gewichte für Eingang<0> und Eingang<1> sowohl für Schicht 0 als auch für Schicht 1 ein, und Block 1 schließt die Gewichte für Eingang<2> und Eingang<3> sowohl für Schicht 0 als auch für Schicht 1 ein. Die Eingänge I0,0,n für die Schicht 0 erzeugen die Ausgänge Pn von I1,0,n für die Schicht 0, können dann, wie in Bezug auf 27 beschrieben, in einem ersten Satz von Lesevorgängen berechnet werden. Die I1,0,n dienen als Eingang für Schicht 1, wiederum wie mit Bezug auf 27 beschrieben, jedoch mit den Schicht 1-Gewichtsmatrixwerten W1,n,n, um die Schicht 1-Ausgänge in einem zweiten Satz von Lesevorgängen zu erzeugen.
  • Die obigen Ausführungsformen präsentieren Verfahren und Architekturen zum Realisieren der Inferenzphase eines neuronalen Netzes mit ternären Eingängen und binären Gewichten in einer NAND-Speicherstruktur. Durch Verwendung von zwei seriell verbundenen Speicherzellen als eine Einheitssynapse können Binärgewichte von neuronalen Netzen codiert und in einem NAND-Speicherarray gespeichert werden. Ternäre Eingänge können mithilfe einer einfachen Null-Eingangserfassungs(ZID)-schaltung verwendet werden, mit der der endgültige Ausgang einer digitalen Summierungsschaltung auf Zählerbasis angepasst werden kann, indem Fehler, die durch Null-Eingänge in ternär-binären neuronalen Netzen verursacht werden, beseitigt werden. Diese Techniken ermöglichen In-Array-Implementierungen der Matrixmultiplikation mit verbesserter Inferenzgenauigkeit, wenn TBN für große Datensätze und komplizierte tiefe neuronale Netzstrukturen (DNN) angewendet wird.
  • In Bezug auf eine Standard-NAND-basierte Architektur geben die beschriebenen Ausführungsformen einige kleine Merkmalsänderungen für die vorhandene NAND-Speicherarchitektur vor, um verschiedene Stufen der Rechenparallelität zu unterstützen. Für die Programmier- und Löschvorgänge sind keine Schaltkreisänderungen erforderlich. Eine Modifikation wird an Zeilen-, Block- und/oder Ebenendecodierern eingeführt, um Leseoperationen zu steuern, um auf den Zwei-Zellen-Einheitssynapsen gespeicherte Gewichte abzutasten, da diese eine Doppelwortleitungsauswahl mit unterschiedlicher Spannungssteuerung und für Mehrblockausführungsformen mehrere Blockauswahlen verwenden. Um 0-Eingänge zu erfassen, wird eine modifizierte digitale Summationsschaltung auf Zählerbasis zusammen mit einer Null-Eingangserfassungsschaltung eingeführt. Durch die Einführung eines Multibit-Abtastverstärkers kann auch eine parallele Berechnung über Blöcke und Ebenen hinweg verwendet werden.
  • Gemäß einem ersten Satz von Aspekten, schließt eine Vorrichtung eine Sourceleitung, eine Bitleitung und mehrere Wortleitungen ein. Eine NAND-Kette ist zwischen die Sourceleitung und die Bitleitung geschaltet, wobei die NAND-Kette mehrere nichtflüchtige Speicherzellen einschließt, die jeweils mit einer entsprechenden, aus einer Vielzahl von Wortleitungen, verbunden sind. Ein Abtastverstärker ist mit der Bitleitung verbunden und eingerichtet, um einen Leitfähigkeitszustand der NAND-Kette in Reaktion auf einen Satz von Spannungspegeln zu bestimmen, die gleichzeitig an die Vielzahl der Wortleitungen angelegt werden. Eine Logikschaltung ist mit der Vielzahl der Wortleitungen verbunden und eine Zählerschaltung ist mit dem Abtastverstärker und mit der Logikschaltung verbunden. Die Zählerschaltung ist eingerichtet zum Inkrementieren eines Zählwerts als Reaktion auf den vom Abtastverstärker bestimmten Leitfähigkeitszustand und zum Ändern des Inkrementierens des Zählwerts als Reaktion auf einen Ausgang von der Logikschaltung, die ein Muster von Spannungspegeln anzeigt, die an die Vielzahl der Wortleitungen angelegt werden.
  • In zusätzlichen Aspekten weist eine nichtflüchtige Speicherschaltung ein Array von nichtflüchtigen Speicherzellen auf, die als NAND-Ketten angeordnet und eingerichtet sind, um eine oder mehrere Binärgewichte eines neuronalen Netzes zu speichern, wobei jedes Gewicht in einem Paar von nichtflüchtigen Speicherzellen auf einer gemeinsamen NAND-Kette gespeichert ist, und eine oder mehrere Steuerschaltungen, die mit dem Array von nichtflüchtigen Speicherzellen verbunden sind. Die eine oder mehreren Steuerschaltungen sind eingerichtet zum: Empfangen einer oder mehrerer Eingänge für eine Schicht eines neuronalen Netzes und Umwandeln des einen oder mehrerer Eingänge in eines oder mehrere entsprechende Spannungsmuster von einem Satz; legen das eine oder mehrere Spannungsmuster an das Array nichtflüchtiger Speicherzellen an, um dadurch eine In-Array-Multiplikation des einen oder der mehreren Eingänge mit den Gewichten durchzuführen; akkumulieren der Ergebnisse der In-Array-Multiplikation; und eine Anzahl des einen oder der mehreren Spannungsmuster bestimmen, die einem ersten Spannungsmuster entsprechen, und anpassen der akkumulierten Ergebnisse der In-Array-Multiplikation basierend auf der Anzahl des einen oder der mehreren Spannungsmuster, die dem ersten Spannungsmuster entsprechen.
  • Weitere Aspekte weisen ein Verfahren auf, das das Empfangen eines oder mehrerer Eingangswerte und das Übersetzen jedes der einen oder mehreren Eingangswerte in ein entsprechendes Spannungsmuster einschließt, wobei jedes Spannungsmuster eines von mehreren Spannungsmustern ist, die einen Satz von N Spannungswerten aufweisen. Das eine oder die mehreren Spannungsmuster werden an eine oder mehrere NAND-Ketten angelegt, die an eine gemeinsame Bitleitung angeschlossen sind, wobei nicht mehr als eines der Spannungsmuster gleichzeitig an eine einzelne der NAND-Ketten und der Satz von N-Spannungswerten wird von jedem der Spannungsmuster an entsprechende N-Speicherzellen einer NAND-Kette angelegt, an die das Spannungsmuster angelegt wird. Die Methode, ferner einschließend: das Bestimmen der Anzahl der einen oder mehreren NAND-Ketten, die mit der gemeinsam genutzten Bitleitung verbunden sind, die in Reaktion auf das eine oder die mehreren daran angelegten Spannungsmuster leiten; das Bestimmen der Anzahl des einen oder der mehreren Spannungsmuster, die mit einem Vorbestimmten aus der Vielzahl von Mustern übereinstimmen; das Inkrementieren einer Zählung basierend auf der Anzahl der einen oder mehreren NAND-Ketten, die mit der gemeinsam genutzten Bitleitung verbunden sind, die in Reaktion auf das eine oder die mehreren daran angelegten Spannungsmuster leiten; und das Anpassen der Zählung basierend auf der Anzahl des einen oder der mehreren Spannungsmuster, die mit einem Vorbestimmten aus der Vielzahl von Mustern übereinstimmen;
  • Für die Zwecke dieses Dokuments kann eine Bezugnahme in der Beschreibung auf „eine Ausführungsform“, „einige Ausführungsformen“ oder „eine andere Ausführungsform“ verwendet werden, um verschiedene Ausführungsformen oder dieselbe Ausführungsform zu beschreiben.
  • Für die Zwecke dieses Dokuments kann eine Verbindung eine direkte Verbindung oder eine indirekte Verbindung sein (z.B. über einen oder mehrere andere Teile). In einigen Fällen, wenn ein Element als mit einem anderen Element verbunden oder gekoppelt bezeichnet wird, kann das Element direkt mit dem anderen Element verbunden sein oder indirekt über zwischenliegende Elemente mit dem anderen Element verbunden sein. Wenn ein Element als direkt mit einem anderen Element verbunden bezeichnet wird, gibt es keine Zwischenelemente zwischen dem Element und dem anderen Element. Zwei Vorrichtungen sind „in Kommunikation“, wenn sie direkt oder indirekt miteinander verbunden sind, so dass sie elektronische Signale untereinander übertragen zu können.
  • Für die Zwecke dieses Dokumentes kann der Begriff „basierend auf“ als „zumindest teilweise basierend auf“ gelesen werden.
  • Für die Zwecke dieses Dokuments impliziert ohne zusätzlichen Kontext die Verwendung numerischer Ausdrücke, wie z. B. ein „erstes“ Objekt, ein „zweites“ Objekt und ein „drittes“ Objekt möglicherweise keine Sortierung von Objekten, sondern kann stattdessen zu Identifikationszwecken verwendet werden, um verschiedene Objekte zu identifizieren.
  • Für die Zwecke dieses Dokuments kann sich der Ausdruck „Satz“ von Objekten auf einen „Satz“ von einem oder mehreren der Objekte beziehen.
  • Die vorstehende detaillierte Beschreibung wurde zum Zwecke der Veranschaulichung und Beschreibung vorgelegt. Sie soll nicht erschöpfend sein oder die genaue offenbarte Form einschränken. Viele Modifikationen und Variationen sind unter Berücksichtigung der vorstehend genannten Lehre möglich. Die beschriebenen Ausführungsformen wurden gewählt, um die Prinzipien der vorgeschlagenen Technologie und ihre praktische Anwendung am besten zu erläutern und damit anderen Fachleuten die Möglichkeit zu geben, sie in verschiedenen Ausführungsformen und mit verschiedenen Modifikationen, die für die jeweilige vorgesehene Verwendung geeignet sind, am besten zu nutzen. Es ist beabsichtigt, dass der Umfang durch die hier beigefügten Ansprüche definiert wird.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 62702713 [0001]
    • US 9721662 [0020]
    • US 9082502 [0021]

Claims (20)

  1. Eine nichtflüchtige Speicherschaltung, aufweisend: ein Array von nichtflüchtigen Speicherzellen, die als NAND-Ketten angeordnet und eingerichtet sind, um eine oder mehrere Binärgewichte eines neuronalen Netzes zu speichern, wobei jedes Gewicht in einem Paar von nichtflüchtigen Speicherzellen auf einer gemeinsamen NAND-Kette gespeichert ist; und und eine oder mehrere Steuerschaltungen, die mit dem Array von nichtflüchtigen Speicherzellen verbunden sind, der eine oder die mehreren Steuerkreise sind eingerichtet für: das Empfangen einer oder mehrerer Eingänge für eine Schicht eines neuronalen Netzes und Umwandeln des einen oder mehrerer Eingänge in eines oder mehrere entsprechende Spannungsmuster von einem Satz; das Anlegen einer oder mehrere Spannungsmuster an das Array nichtflüchtiger Speicherzellen an, um dadurch eine In-Array-Multiplikation des einen oder der mehreren Eingänge mit den Gewichten durchzuführen; das Akkumulieren von Ergebnissen der In-Array-Multiplikation; und das Bestimmen einer Anzahl des einen oder der mehreren Spannungsmuster, die einem ersten Spannungsmuster entsprechen, und Anpassen der akkumulierten Ergebnisse der In-Array-Multiplikation basierend auf der Anzahl des einen oder der mehreren Spannungsmuster, die dem ersten Spannungsmuster entsprechen.
  2. Die nichtflüchtige Speicherschaltung gemäß Anspruch 1, wobei: der eine oder die mehreren Eingänge ternäre Eingänge sind; und das erste Spannungsmuster einem 0-ternären Eingangswert entspricht.
  3. Die nichtflüchtige Speicherschaltung gemäß Anspruch 1, wobei: der eine oder die mehreren Eingänge eine Vielzahl von Eingängen sind; und die eine oder die mehreren Steuerschaltungen eingerichtet sind, um die entsprechende Vielzahl von Spannungsmuster gleichzeitig an eine Vielzahl von NAND-Ketten anzulegen, die mit einer gemeinsamen Bitleitung verbunden sind, um dadurch eine gleichzeitige In-Array-Multiplikation des einen oder der mehreren Eingänge mit den gespeicherten Gewichten in der Vielzahl von NAND-Ketten, die mit einer gemeinsamen Bitleitung verbunden sind, durchzuführen.
  4. Die nichtflüchtige Speicherschaltung gemäß Anspruch 1, wobei: eine oder mehrere Steuerschaltungen eingerichtet sind, um ein Spannungsmuster, das einem ersten Eingang des einen oder der mehreren Eingänge entspricht, gleichzeitig an eine Vielzahl von NAND-Ketten anzulegen, die jeweils mit einer anderen Bitleitung verbunden sind, um dadurch eine gleichzeitige Multiplikation des ersten Eingangs innerhalb des Arrays mit den auf der Vielzahl von NAND-Ketten gespeicherten Gewichten, die jeweils mit einer anderen Bitleitung verbunden sind, durchzuführen.
  5. Nichtflüchtige Speicherschaltung gemäß Anspruch 1, wobei die eine oder die mehreren Steuerschaltungen zusätzlich eingerichtet sind zum: Konvertieren der angepassten akkumulierten Ergebnisse in einen entsprechenden zweiten Satz von Spannungsmustern; Anlegen der zweiten eingestellten Spannungsmuster an das Array nichtflüchtiger Speicherzellen, um dadurch eine zweite Multiplikation innerhalb des Arrays der eingestellten akkumulierten Ergebnisse mit den Gewichten durchzuführen und die Ergebnisse der zweiten Multiplikation innerhalb des Arrays zu akkumulieren; und eine Anzahl des zweiten Satzes von Spannungsmustern zu bestimmen, die einem ersten Spannungsmuster entsprechen, und zum Anpassen der akkumulierten Ergebnisse der zweiten In-Array-Multiplikation basierend auf der Anzahl des zweiten Spannungsmusters, die dem ersten Spannungsmuster entsprechen.
  6. Vorrichtung aufweisend: eine Sourceleitung; eine erste Bitleitung; eine Vielzahl von ersten Wortleitungen; eine erste NAND-Kette, die zwischen die Sourceleitung und die erste Bitleitung geschaltet ist, wobei die erste NAND-Kette eine erste Vielzahl von nichtflüchtigen Speicherzellen einschließt, die jeweils mit einer entsprechenden Wortleitung, aus einer Vielzahl von Wortleitungen, verbunden sind; ein erster Abtastverstärker ist mit der ersten Bitleitung verbunden und eingerichtet, um einen Leitfähigkeitszustand der ersten NAND-Kette in Reaktion auf einen Satz von Spannungspegeln zu bestimmen, die gleichzeitig an die erste Vielzahl der ersten Wortleitungen angelegt werden; eine Logikschaltung, die mit der ersten Vielzahl der ersten Wortleitungen verbunden ist; und eine erste Zählerschaltung, die mit dem ersten Abtastverstärker und der Logikschaltung verbunden ist, wobei die erste Zählerschaltung eingerichtet ist, um einen ersten Zählwert in Reaktion auf den vom ersten Abtastverstärker bestimmten Leitfähigkeitszustand zu inkrementieren und das Inkrementieren des ersten Zählwerts in Reaktion auf einen Ausgang von der Logikschaltung, die ein erstes Muster von Spannungspegeln anzeigt, die an die erste Vielzahl der ersten Wortleitungen angelegt werden, zu ändern.
  7. Die Vorrichtung gemäß Anspruch 6, wobei die erste Vielzahl von nichtflüchtigen Speicherzellen ein erstes Paar von nichtflüchtigen Speicherzellen ist und die erste Vielzahl der ersten Wortleitungen ein Paar der ersten Wortleitungen ist.
  8. Die Vorrichtung gemäß Anspruch 7, wobei das erste Paar nichtflüchtiger Speicherzellen nichtflüchtige Speicherzellen in einem programmierten Zustand und einen Speicher in einem gelöschten Zustand einschließt.
  9. Die Vorrichtung gemäß Anspruch 7, wobei das erste Muster des Spannungspegels dem Anlegen des gleichen Spannungspegels an beide des Paares der ersten Wortleitungen entspricht.
  10. Die Vorrichtung gemäß Anspruch 6, wobei die Logikschaltung in Reaktion auf ein Steuersignal freigegeben wird.
  11. Vorrichtung gemäß Anspruch 6, weiterhin aufweisend: eine Vielzahl von zweiten Wortleitungen; und eine zweite NAND-Kette, die zwischen die Sourceleitung und die erste Bitleitung geschaltet ist, wobei die zweite NAND-Kette eine zweite Vielzahl von nichtflüchtigen Speicherzellen einschließt, die jeweils mit einer entsprechenden Wortleitung aus der zweiten Vielzahl der zweiten Wortleitungen verbunden sind, wobei der erste Abtastverstärker zusätzlich eingerichtet ist, um den Leitfähigkeitszustand als einen kombinierten Leitfähigkeitszustand der ersten NAND-Kette und der zweiten NAND-Kette als einen Mehrbitwert in Reaktion auf einen Satz von Spannungspegeln zu bestimmen, die gleichzeitig an die zweite Vielzahl von zweiten Wortleitungen angelegt werden, die Logikschaltung ist zusätzlich mit der zweiten Vielzahl der zweiten Wortleitungen verbunden, und die erste Zählerschaltung ist ferner eingerichtet, um das Inkrementieren des ersten Zählers in Reaktion auf einen Ausgang von der Logikschaltung zu ändern, die ein erstes Muster von Spannungspegeln anzeigt, die an die zweite Vielzahl von zweiten Wortleitungen angelegt werden.
  12. Vorrichtung gemäß Anspruch 6, weiterhin aufweisend: eine zweite Bitleitung eine zweite NAND-Kette, die zwischen die Sourceleitung und die zweite Bitleitung geschaltet ist, wobei die zweite NAND-Kette eine erste Vielzahl von nichtflüchtigen Speicherzellen einschließt, die jeweils mit einer entsprechenden Wortleitung aus der ersten Vielzahl der ersten Wortleitungen verbunden sind, ein zweiter Abtastverstärker ist mit der ersten Bitleitung verbunden und eingerichtet, um einen Leitfähigkeitszustand der zweiten NAND-Kette in Reaktion auf einen Satz von Spannungspegeln zu bestimmen, die gleichzeitig an die erste Vielzahl der ersten Wortleitungen angelegt werden; und eine zweite Zählerschaltung, die mit dem zweiten Abtastverstärker und mit der Logikschaltung verbunden ist, wobei die zweite Zählerschaltung eingerichtet ist, um einen zweiten Zählwert in Reaktion auf den vom zweiten Abtastverstärker bestimmten Leitfähigkeitszustand zu inkrementieren und das Inkrementieren des zweiten Zählwerts in Reaktion auf einen Ausgang von der Logikschaltung, die ein erstes Muster von Spannungspegeln anzeigt, die an die erste Vielzahl der ersten Wortleitungen angelegt werden, zu ändern.
  13. Verfahren, aufweisend: das Empfangen eines oder mehrerer erster Eingangswerte; das Übersetzen jedes der einen oder mehreren ersten Eingangswerte in ein entsprechendes erstes Spannungsmuster, wobei jedes erstes Spannungsmuster eines von mehreren Spannungsmustern ist, die einen Satz von N Spannungswerten aufweisen; das eine oder die mehreren ersten Spannungsmuster an eine oder mehrere NAND-Ketten anzulegen, die an eine gemeinsame Bitleitung angeschlossen sind, wobei nicht mehr als eines der ersten Spannungsmuster gleichzeitig an eine einzelne der NAND-Ketten angelegt wird und der Satz von N-Spannungswerten jedes der ersten Spannungsmuster an entsprechende N-Speicherzellen einer NAND-Kette angelegt werden, an die das erste Spannungsmuster angelegt wird; das Bestimmen einer Anzahl der einen oder mehreren NAND-Ketten, die mit der gemeinsam genutzten Bitleitung verbunden sind, die in Reaktion auf das eine oder die mehreren daran angelegten ersten Spannungsmuster leiten; das Bestimmen einer Anzahl des einen oder der mehreren ersten Spannungsmuster, die mit einem Vorbestimmten aus der Vielzahl von Mustern übereinstimmen; das Inkrementieren einer ersten Zählung basierend auf der Anzahl der einen oder mehreren NAND-Ketten, die mit der gemeinsam genutzten Bitleitung verbunden sind, die in Reaktion auf das eine oder die mehreren daran angelegten ersten Spannungsmuster leiten; und das Anpassen der ersten Zählung basierend auf der Anzahl des einen oder der mehreren ersten Spannungsmuster, die mit einem Vorbestimmten aus der Vielzahl von Mustern übereinstimmen;
  14. Verfahren gemäß Anspruch 13, wobei N = 2 und die Anzahl der Vielzahl der Eingangsmuster drei ist.
  15. Verfahren gemäß Anspruch 14, wobei das Vorbestimmte der Vielzahl von Spannungsmustern den zwei Spannungswerten des Satzes von Spannungswerten entspricht, die gleich sind.
  16. Verfahren gemäß Anspruch 14, wobei die zwei Speicherzellen, an die jedes der ersten Spannungsmuster angelegt wird, eine erste Speicherzelle in einem gelöschten Zustand und eine zweite Speicherzelle in einem programmierten Zustand einschließen.
  17. Verfahren gemäß Anspruch 13, wobei: der eine oder die mehreren ersten Eingänge eine Vielzahl von ersten Eingängen sind; die eine oder mehrere NAND-Ketten, die mit der gemeinsam genutzten Bitleitung verbunden sind, eine erste NAND-Kette einschließen; das Anlegen der ersten Spannungsmuster an die mit einer gemeinsam genutzten Bitleitung verbundenen NAND-Ketten das sequentielle Anlegen jedes der Vielzahl an ersten Spannungsmustern an verschiedene N-Speicherzellen der ersten NAND-Kette einschließt; und das Bestimmen der Anzahl der NAND-Ketten, die in Reaktion auf die daran angelegten ersten Spannungsmuster leiten, das Bestimmen der Häufigkeit einschließt, mit der die erste NAND-Kette in Reaktion auf das sequentielle Anlegen der Vielzahl der ersten Spannungsmuster daran leiten.
  18. Verfahren gemäß Anspruch 13, wobei: der eine oder die mehreren ersten Eingänge eine Vielzahl von ersten Eingängen sind; die eine oder mehreren NAND-Ketten, die mit der gemeinsam genutzten Bitleitung verbunden sind, eine entsprechende Vielzahl von NAND-Ketten sind; das Anlegen der ersten Spannungsmuster an die mit der gemeinsam genutzten Bitleitung verbundenen NAND-Ketten das gleichzeitige Anlegen jedes der mehreren ersten Spannungsmuster an die entsprechende der NAND-Ketten einschließt; und das Bestimmen der Anzahl der NAND-Ketten, die als Reaktion auf die daran angelegten ersten Spannungsmuster leiten, das Durchführen einer Mehrbit-Abtastoperation einschließt.
  19. Verfahren gemäß Anspruch 13, wobei das Anlegen des einen oder der mehreren ersten Spannungsmuster an eine oder mehrere NAND-Ketten, die mit einer gemeinsam genutzten Bitleitung verbunden sind, ferner einschließt: das Vorspannen von Speicherzellen der einen oder mehreren anderen NAND-Ketten, die sich von den entsprechenden N-Speicherzellen unterscheiden, um in einem leitenden Zustand zu sein.
  20. Verfahren gemäß Anspruch 13, weiterhin aufweisend: das Empfangen eines Freigabesignals, wobei das Bestimmen der Anzahl des einen oder der mehreren ersten Spannungsmuster, die mit dem Vorbestimmten der Vielzahl von Mustern übereinstimmen, in Reaktion auf das Freigabesignal durchgeführt wird.
DE102019116407.9A 2018-07-24 2019-06-17 Realisierung neuronaler netze mit ternären eingängen und binären gewichten in nand-speicherarrays Pending DE102019116407A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862702713P 2018-07-24 2018-07-24
US62/702,713 2018-07-24
US16/368,441 2019-03-28
US16/368,441 US11170290B2 (en) 2019-03-28 2019-03-28 Realization of neural networks with ternary inputs and binary weights in NAND memory arrays

Publications (1)

Publication Number Publication Date
DE102019116407A1 true DE102019116407A1 (de) 2020-01-30

Family

ID=69148797

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019116407.9A Pending DE102019116407A1 (de) 2018-07-24 2019-06-17 Realisierung neuronaler netze mit ternären eingängen und binären gewichten in nand-speicherarrays

Country Status (2)

Country Link
CN (1) CN110751276A (de)
DE (1) DE102019116407A1 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112132273B (zh) * 2020-09-22 2022-11-29 中国科学院计算技术研究所 计算装置、处理器、电子设备和计算方法
CN112201285A (zh) * 2020-10-16 2021-01-08 群联电子股份有限公司 电压控制方法、存储器存储装置及存储器控制电路单元
CN113177638B (zh) * 2020-12-11 2024-05-28 联合微电子中心有限责任公司 用于生成神经网络的二值化权重的处理器和方法
US11538509B2 (en) * 2021-03-17 2022-12-27 Qualcomm Incorporated Compute-in-memory with ternary activation
CN115412511B (zh) * 2022-07-29 2024-05-28 北京时代民芯科技有限公司 一种用于以太网交换芯片的高性能计数器电路及计数方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8406053B1 (en) * 2011-09-21 2013-03-26 Sandisk Technologies Inc. On chip dynamic read for non-volatile storage
JP6501146B2 (ja) * 2014-03-18 2019-04-17 パナソニックIpマネジメント株式会社 ニューラルネットワーク回路およびその学習方法
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
CN107256424B (zh) * 2017-05-08 2020-03-31 中国科学院计算技术研究所 三值权重卷积网络处理系统及方法

Also Published As

Publication number Publication date
CN110751276A (zh) 2020-02-04

Similar Documents

Publication Publication Date Title
DE102019116300A1 (de) Realisierung von binären neuronalen Netzen in Nand-Speicherarrays
DE102019116407A1 (de) Realisierung neuronaler netze mit ternären eingängen und binären gewichten in nand-speicherarrays
DE102019116095A1 (de) Multiplikation unter verwendung von nichtflüchtigen speicherzellen
DE112019003066T5 (de) Rechnen in Speicherschaltungen mit Multi-Vdd-Arrays und/oder analogen Multiplikatoren
DE102019116305A1 (de) Pipelining zur verbesserung der inferenzgenauigkeit neuronaler netze
DE112018000272T5 (de) Resistive Verarbeitungseinheit mit hysteretischen Aktualisierungen zum Trainieren neuronaler Netze
DE102017104257A1 (de) Auf Zellenstrom basierende Bitleitungsspannung
DE102021106911A1 (de) Vertikales abbilden und berechnen für tiefe neuronale netze in einem nichtflüchtigen speicher
DE112018004322T5 (de) Nichtflüchtiges speichersystem mit hostseitiger befehlseinspeisung
DE102010061530A1 (de) Speicher mit variablem Widerstand, Betriebsverfahren und System
DE102012209035A1 (de) Lesearchitektur für einen MRAM
DE102021115361A1 (de) Inferenzmaschine mit sehr geringer leistung und externer magnetfeldprogrammierung
DE102021115503A1 (de) Mehrstufiger inferenzmaschinenbeschleuniger mit sehr niedrigem stromverbrauch
DE102020115935A1 (de) Nichtflüchtiger speicher mit dem überspringen der programmprürung
DE112020000929T5 (de) Programmieren eines phasenwechselspeichersin einer geschlossenen schleife
DE112019003326T5 (de) Speichererweiterte neuronale netzwerkarchitekturen eines codierers-decodierers
DE112020002186T5 (de) Dnn-training mit asymmetrischen rpu-einheiten
DE102021127106A1 (de) Analoger inhaltsadressierbarer speicher zum speichern und durchsuchen beliebiger segmente von bereichen
DE112020000237T5 (de) Soft-bit-lesemodusauswahl für nicht-flüchtige speicher
DE112021002239T5 (de) Deep learning-beschleuniger und direktzugriffsspeicher mit einer kameraschnittstelle
DE102022100200A1 (de) Compute-In-Memory-Speicherarray, CIM-Speicherarray
DE112017006698T5 (de) Erreichen einheitlicher lesezeiten in nicht flüchtigen mehrebenenspeichern
DE102014118512A1 (de) Verfahren, Gerät und Vorrichtung zur Datenverarbeitung
DE112021005910T5 (de) Schnellere abdeckungskonvergenz mit automatischer testparameterabstimmung bei eingeschränkter zufallsverifikation
DE112021001968T5 (de) Driftregularisierung zum entgegenwirken einer variation in driftkoeffizienten für analoge beschleuniger

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE

Representative=s name: MURGITROYD & COMPANY, DE