Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
COMPUTING MEMORY ARCHITECTURE
Document Type and Number:
WIPO Patent Application WO/2019/067980
Kind Code:
A1
Abstract:
Provided herein is a computing memory architecture. The non-volatile memory architecture can comprise a resistive random access memory array comprising multiple sets of bitlines and multiple wordlines, a first data interface for receiving data from an external device and for outputting data to the external device, and a second data interface for outputting data to the external device. The non-volatile memory architecture can also comprise programmable processing elements connected to respective sets of the multiple sets of bitlines of the resistive random access memory array, and connected to the data interface. The programmable processing elements are configured to receive stored data from the resistive random access memory array via the respective sets of bitlines or to receive external data from the external device via the data interface, and execute a logical or mathematical algorithm on the external data or the stored data and generate processed data.

Inventors:
ASNAASHARI MEHDI (US)
NAZARIAN HAGOP (US)
SUCUR CHRISTOPHE (US)
DUBOIS SYLVAIN (US)
Application Number:
PCT/US2018/053544
Publication Date:
April 04, 2019
Filing Date:
September 28, 2018
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
CROSSBAR INC (US)
International Classes:
G11C13/00; G11C5/12; G11C7/12; G11C11/02; G11C11/34
Domestic Patent References:
WO2017131792A12017-08-03
Foreign References:
US20140133211A12014-05-15
US20120030396A12012-02-02
US9524210B12016-12-20
US20150003156A12015-01-01
US7095642B12006-08-22
US20130132685A12013-05-23
US20150009745A12015-01-08
US20160189775A12016-06-30
US20140293674A12014-10-02
US20160260775A12016-09-08
Attorney, Agent or Firm:
CLAPPER, Matthew et al. (US)
Download PDF:
Claims:
CLAIMS

What is claimed is:

1. A non- volatile memory architecture, comprising:

a resistive random access memory array comprising multiple sets of bitlines and multiple wordlines;

a first data interface for receiving data from an external device and for outputting data to the external device, the first data interface comprises a first bandwidth; and

a second data interface for outputting data to the external device, the second data interface comprises a second bandwidth different than the first bandwidth.

2. The non-volatile memory architecture of claim 1 , wherein the second data interface selects a subset of bitlines from the multiple sets of bitlines, and wherein the first data interface selects all bitlines from the multiple sets of bitlines.

3. The non-volatile memory architecture of claim 1, further comprising:

programmable processing elements connected to respective sets of the multiple sets of bitlines of the resistive random access memory array, wherein the programmable processing elements are configured to receive stored data from the resistive random access memory array via the respective sets of bitlines or to receive external data from the external device, and execute a logical or mathematical algorithm on the external data or the stored data and generate processed data.

4. The non-volatile memory architecture of claim 3, further comprising read sense amps connected to the multiple sets of bitlines and configured to acquire the stored data from memory cells of the resistive random access memory array.

5. The non- volatile memory architecture of claim 3, wherein the programmable processing elements are located between the first data interface and the resistive random access memory array, and are physically connected with the multiple sets of bitlines of the resistive random access memory array.

6. The non-volatile memory architecture of claim 3, wherein a first processing element of the programmable processing elements is associated with a first set of the bitlines and a second processing element of the programmable processing elements is associated with a second set of the bitlines.

7. The non-volatile memory architecture of claim 3, further comprising correction code decoders associated with the programmable processing elements and configured to identify and correct an error bit in the stored data in conjunction with the programmable processing elements receiving the stored data from the resistive random access memory array.

8. The non- volatile memory architecture of claim 7, wherein respective correction code decoders of the correction code decoders are associated with respective programmable processing elements of the programmable processing elements.

9. The non-volatile memory architecture of claim 7, wherein respective correction code decoders of the correction code decoders are associated with at least two programmable processing elements of the programmable processing elements.

10. The non-volatile memory architecture of claim 3, wherein the resistive random access memory array comprises a wordline start pointer and a wordline stop pointer, and wherein the wordline start pointer and the wordline stop pointer are configured to identify a subset of data stored at the resistive random access memory array as the stored data, and facilitate transfer of only the subset of data to the programmable processing elements.

11. The non-volatile memory architecture of claim 3 , wherein programmable processing elements of the programmable processing elements independently execute the logical or mathematical algorithm on the external data or the stored data and generate the processed data.

12. The non- volatile memory architecture of claim 3, wherein a programmable processing element of the programmable processing elements is disabled based on a determination that at least one bit line of the set of multiple sets of bits lines

connected to the programmable processing element is defective.

13. The non- volatile memory architecture of claim 3, wherein a computed value of a programmable processing element of the programmable processing elements is ignored based on a determination that at least one bit line of the set of multiple sets of bits lines connected to the programmable processing element is defective.

14. The non-volatile memory architecture of claim 3, further comprising:

a write circuitry logic shared between the resistive random access memory array and another resistive random access memory array; and

a multiplexer that facilitates sequential access of the multiple wordlines of the resistive random access memory and other multiple wordlines of the another resistive random access memory array.

15. A non-volatile memory logic system, comprising:

bit lines and at a set of wordlines;

a set of resistive switching memory circuits at respective intersections between the bit lines and the set of wordlines, wherein resistive switching memory cells within the set of resistive switching memory circuits are programmed with respective bit values corresponding to a first data matrix, and wherein a second data matrix, represented by a set of electrical currents input onto wordlines of the set of wordlines, is provided to the non-volatile memory logic system as a system input, and

wherein, in response to an input of the second data matrix and a programming of the resistive switching memory cells to the first data matrix, the non- volatile

memory logic system generates an output on the bit lines.

16. The non-volatile memory logic system of claim 1, wherein the output is a dot product multiplication result of the first data matrix and the second data matrix.

17. The non-volatile memory logic system of claim 1, wherein different dot product results for the first data matrix are obtained based on second data matrices applied to the set of wordlines.

18. The non-volatile memory logic system of claim 1, further comprising resistive switching memory circuits on the bit lines.

19. The non-volatile memory logic system of claim 1, wherein the first data matrix programmed to the set of resistive switching memory circuits is a two-dimensional matrix.

20. The non-volatile memory logic system of claim 1, wherein the output is provided by respective output currents on the bit lines and wherein the respective output currents on the bit lines are a function of an electrical voltage or a current input on the set of wordlines and respective resistive states of a set of resistive switching memory cells.

Description:
Non-Provisional Patent Application

COMPUTING MEMORY ARCHITECTURE

Title: COMPUTING MEMORY ARCHITECTURE

CROSS-REFERENCE TO RELATED APPLICATIONS

[0001] This application claims the benefit of United States Provisional Application

Serial Number 62/566,001, filed September 29, 2017, and entitled "LOGIC, COMPUTING AND MANAGEMENT APPLICATIONS FOR RESISTIVE MEMORY DEVICES", the entirety of which is expressly incorporated herein by reference.

TECHNICAL FIELD

[0002] This disclosure generally relates to an architecture for an electronic memory having inline processing capability.

BACKGROUND

[0003] Resistive-switching memory represents a recent innovation within the field of integrated circuit technology. While much of resistive-switching memory technology is in the development stage, various technological concepts for resistive-switching memory have been demonstrated by the inventor(s) and are in one or more stages of verification to prove or disprove associated theories or techniques. The inventor(s) believe that resistive- switching memory technology shows compelling evidence to hold substantial advantages over competing technologies in the semiconductor electronics industry.

[0004] Over time, advancement in technology has provided an increase in a number of semiconductor devices, such as transistors, that can be fabricated on a given geometric area of a semiconductor chip. An implication of increasing the number of semiconductor devices is increasing memory capacity and processing power for the semiconductor chip and associated electronic devices.

[0005] Models for resistive-switching memory proposed by the inventor(s) utilize two-terminal structures. Two-terminal memory technology is contrasted, for instance, with gate-controlled transistors in which conductivity between two terminals is mediated by a third terminal, called a gate terminal. Two-terminal memory devices can differ from three terminal devices in function as well as structure. For instance, some two-terminal devices can be constructed between a pair of conductive contacts, as opposed to having a third terminal that is adjacent to a set of conductive terminals. Rather than being operable through a stimulus applied to the third terminal, two-terminal memory devices can be controlled by applying a stimulus at one or both of the pair of conductive contacts. The inventor(s) of the present disclosure is further aware of a variety of two-terminal memory technologies, such as phase-change memory, magneto-resistive memory, conductive-bridging memory, as well as others.

[0006] While much of resistive memory technology is in the development stage, various technological concepts for resistive memory have been demonstrated by the assignee of the present invention and are in one or more stages of verification to prove or disprove associated theory(ies). Even so, resistive memory technology promises to hold substantial advantages over competing technologies in the semiconductor electronics industry.

[0007] As models of resistive memory technology are tested and results obtained, the results are speculatively extrapolated to memory devices in which resistive memory replaces a conventional memory. For instance, the assignee of the present invention has conducted research related to software models of memory arrays comprising resistive memory instead of complementary metal-oxide semiconductor (CMOS) NAND or NOR memory. Software projections suggest that two-terminal memory arrays can provide significant benefits for electronic devices, including reduced power consumption, higher memory density, advanced technology nodes, or improved performance, among others.

[0008] Drawing from existing research, the inventor(s) endeavors to discover applications where two-terminal memory can provide real-world benefits for electronic devices.

SUMMARY

[0009] The following presents a simplified summary of the specification in order to provide a basic understanding of some aspects of the specification. This summary is not an extensive overview of the specification. It is intended to neither identify key or critical elements of the specification nor delineate the scope of any particular embodiments of the specification, or any scope of the claims. Its purpose is to present some concepts of the specification in a simplified form as a prelude to the more detailed description that is presented in this disclosure.

[0010] An aspect relates to a non- volatile memory architecture that can comprise a resistive random access memory array comprising multiple sets of bitlines and multiple wordlines. The non-volatile memory architecture can also comprise a first data interface for receiving data from an external device and for outputting data to the external device. Further, the non- volatile memory architecture can also comprise a second data interface for outputting data to the external device. The second data interface comprises a second bandwidth different than the first bandwidth.

[0011] According to an example, the second data interface selects a subset of bitlines from the multiple sets of bitlines. Further to this example, the first data interface selects all bitlines from the multiple sets of bitlines.

[0012] According to some implementations, the non-volatile memory architecture can comprise programmable processing elements connected to respective sets of the multiple sets of bitlines of the resistive random access memory array. The programmable processing elements can be configured to receive stored data from the resistive random access memory array and via respective sets of bitlines or to receive external data from the external device. Further, the programmable processing elements can execute a logical or mathematical algorithm on the external data or the stored data and generate processed data.

[0013] According to an implementation, the non-volatile memory architecture can further comprise read sense amps connected the multiple sets of bitlines. The read sense amps can be configured to acquire the stored data from memory cells of the resistive random access memory array.

[0014] In an implementation, the programmable processing elements can be located between the data interface and the resistive random access memory array. The programmable processing elements can be physically connected with the multiple sets of bitlines of the resistive random access memory array.

[0015] According to some implementations, a first processing element of the programmable processing elements can be associated with a first set of the bitlines and a second processing element of the processing elements can be associated with a second set of the bitlines. In an implementation, a first quantity of bitlines in the first set of the bitlines can be the same as a second quantity of the bitlines in the second set of the bitlines. In an alternative implementation, a first quantity of bitlines in the first set of the bitlines can be different than a second quantity of the bitlines in the second set of the bitlines.

[0016] In another implementation, the non-volatile memory architecture can comprise correction code decoders associated with the programmable processing elements. Further to this implementation, the correction code decoders can be configured to identify and correct an error bit in the stored data in conjunction with the programmable processing elements receiving the stored data from the resistive random access memory array. [0017] According to some implementations, the resistive random access memory array can comprise a wordline start pointer and a wordline stop pointer. Further to this implementation, the wordline start pointer and the wordline stop pointer can be configured to identify a subset of data stored at the resistive random access memory array as the stored data. Further, the wordline start pointer and the wordline stop pointer can facilitate transfer of only the subset of data to the programmable processing elements.

[0018] Another aspect relates to a method that can comprise receiving, at

programmable processing elements of a non- volatile memory, stored data from a resistive random access memory array or external data from an external device via a data interface. The resistive random access memory array can comprise multiple sets of bitlines and multiple wordlines. The stored data can be received over respective sets of bitlines. The method can also comprise generating, by the programmable processing elements, processed data based on an execution of a logical or mathematical algorithm on the external data or the stored data. The programmable processing elements can perform the execution in parallel.

[0019] An aspect relates to a non- volatile memory logic system that can

comprise a bit line(s) and at a set of wordlines. Also included in the non- volatile

memory logic system can be a set of resistive switching memory circuits at respective intersections between the bit line(s) and the set of wordlines. Resistive switching

memory cells within the resistive switching memory circuits can be programmed with respective bit values corresponding to a first data matrix. A second data matrix,

represented by a set of electrical currents input onto the wordlines, is then provided to the non- volatile memory logic system as a system input. The non- volatile memory logic system generates an output, on the bit line(s), in response to input of the second data matrix and the programming of the resistive switching memory cells to the first data matrix. In an embodiment, the output can be a dot product multiplication result of the first data matrix and the second data matrix.

[0020] According to an implementation, an output of the non-volatile memory logic system can be provided by an output current on a bit line(s) thereof. The output current on the bit line(s) can be a function of the electrical voltage or currents input on the set of wordlines and the resistive states (e.g., the first data matrix) of the set of resistive switching memory cells. In an embodiment, a wordline having a high logic value (e.g. , high electrical voltage or current) and a resistive switching memory circuit having a high logic value (e.g. , low resistance state) can generate a low resistance path to ground resulting in a current (or small range of current) on a bit line of the nonvolatile memory logic system. Additional resistive switching memory circuits on the same bit line, if having the high logic value on the wordline and the high logic value programmed to the resistive switching memory circuit, can each generate additional low resistance paths to ground and therefore generate additional currents (or small ranges of the current) on the bit line, that are additive. A low logic value on a wordline, or a low logic value programmed to a resistive switching memory circuit, results in a high resistance path to ground on that wordline and therefore no or negligible additional current. By measuring a number of units of current on the bit line, a dot product of a first data matrix programmed to the resistive switching memory circuits and a second data matrix of the electrical currents on the wordline can be determined.

[0021] In accordance with an implementation, a first data matrix can be programmed to resistive switching memory circuits on one or more bit lines of a nonvolatile memory logic system. This first data matrix can serve as a data filter (e.g. , a dot product data filter or kernel), as one operational example. Different second data matrices can be applied to the set of wordlines to obtain different dot product results for the first data matrix. Thus, with a single programming operation setting the resistive switching memory circuits to the first data matrix, multiple dot product results of the first data matrix can be obtained, in relatively short time. For instance, inputting a sequence of different second data matrices on the set of wordlines and obtaining respective output currents on the bit line(s) after each such input can produce dot product results of the first data matrix with each of the sequence of different second data matrices.

[0022] In an implementation, a disclosed non-volatile memory logic system can comprise multiple bit lines intersecting the set of wordlines, with resistive switching memory circuits at each wordline-bit line intersection. Further to this implementation, the first data matrix programmed to the resistive switching memory circuits can be a two-dimensional matrix (e.g. , an n x m data matrix where n and m are both positive numbers greater than 1). The second data matrix (e.g. , a one- dimensional data matrix) input on the set of wordlines can be received at resistive switching memory circuits on each of the multiple bit lines, effecting a one- dimensional by two-dimensional dot product result, in various embodiments. In further embodiments, the first data matrix can emulate multi-bit numbers utilizing the two-dimensional matrix by multiplying current on a bit line by 2 n , where n is a bit order associated with the bit line (e.g. , 0 th order, first order, second order, and so on).

Non-binary multi-bit numbers can be emulated by multiplying current on a bit line by x n (e.g. , where x is equal to 10 for base order 10 numbers, and so forth).

[0023] In still further implementations, a disclosed non-volatile memory logic system can implement a dot product of a two-dimensional first data matrix with a two-dimensional second data matrix. A two-dimensional first data matrix can be programmed to the resistive switching memory circuits as described above. Further, input of a two-dimensional second data matrix can be emulated by inputting onto the wordlines (e.g. , on different clock cycles) successive bit orders of the two-dimensional second data matrix (each successive bit order being a one-dimensional portion of the second data matrix), and multiplying successive bit order dot product results by their respective bit order (e.g. , 2 n for a binary system, where n is the bit order). Results of successive one-dimension by two-dimension dot product operations (multiplied by their bit order) are then summed to generate a result of the dot product of the two-dimension first data matrix and the two-dimension second data matrix.

[0024] The following description and the drawings set forth certain illustrative aspects of the specification. These aspects are indicative, however, of but a few of the various ways in which the principles of the specification can be employed. Other advantages and novel features of the specification will become apparent from the following detailed description of the specification when considered in conjunction with the drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

[0025] Numerous aspects, embodiments, objects and advantages of the present invention will be apparent upon consideration of the following detailed description, taken in conjunction with the accompanying drawings, in which like reference characters refer to like parts throughout. In this specification, numerous specific details are set forth in order to provide a thorough understanding of this disclosure. It should be understood, however, that certain aspects of the subject disclosure can be practiced without these specific details, or with other methods, components, materials, etc. In other instances, well-known structures and devices are shown in block diagram form to facilitate describing the subject disclosure;

[0026] Figure 1 illustrates a schematic diagram of an example computing memory architecture that comprises a memory array according to an embodiment of the subject disclosure

[0027] Figure 2 illustrates an example memory array architecture according to an embodiment of the subject disclosure;

[0028] Figure 3 illustrates an example processing element according to an embodiment of the subject disclosure;

[0029] Figure 4 illustrates an example memory array architecture that includes parity bits according to an embodiment of the subject disclosure;

[0030] Figure 5 illustrates an example memory array architecture that includes shared parity bits according to an embodiment of the subject disclosure;

[0031] Figure 6 illustrates an example of multiple memory arrays sharing write circuitry logic according to an embodiment of the subject disclosure;

[0032] Figure 7 illustrates an example resistive random access memory array according to an embodiment of the subject disclosure;

[0033] Figure 8 illustrates another example computing memory architecture according to an embodiment of the subject disclosure;

[0034] Figure 9 illustrates a further example memory array architecture according to one or more embodiments of the subject disclosure;

[0035] Figure 10 illustrates an example convolution accelerator according to an embodiment of the subject disclosure;

[0036] Figure 11 illustrates yet another example computing memory architecture according to an embodiment of the subject disclosure;

[0037] Figure 12 illustrates a further example computing memory architecture according to an embodiment of the subject disclosure;

[0038] Figure 13 illustrates an example computing memory architecture illustrating intercommunication among processing elements according to an embodiment of the subject disclosure;

[0039] Figure 14 illustrates an example of multiple computing memory architectures cascaded in series according to an embodiment of the subject disclosure;

[0040] Figure 15 illustrates a block diagram of an example electronic operating environment in accordance with certain embodiments of the subject disclosure;

[0041] Figure 16 illustrates a flowchart of an example method for operation of a nonvolatile memory architecture in accordance with one or more embodiments provided herein;

[0042] Figure 17 illustrates a schematic diagram of an example circuit that can be utilized for matrix multiplication (e.g. , dot product multiplication) according to an embodiment of the subject disclosure;

[0043] Figure 18 illustrates a schematic diagram of an example circuit representing a

3 x 1 matrix with 3 x 3 matrix multiplication according to an embodiment of the subject disclosure;

[0044] Figures 19A- 19H illustrate example alternative implementations of a filter circuits comprising resistive memories according to an embodiment of the subject disclosure;

[0045] Figure 20 illustrates an example, non- limiting circuit for implementation of a

1x3 to 3x1 matrix multiplication according to an embodiment of the subject disclosure;

[0046] Figure 21 illustrates another example, non-limiting circuit for implementation of a matrix multiplication according to an embodiment of the subject disclosure;

[0047] Figure 22 illustrates another example, non-limiting circuit that can be utilized for matrix multiplication according to an embodiment of the subject disclosure;

[0048] Figure 23 illustrates another example, non-limiting circuit for matrix multiplication according to an embodiment of the subject disclosure;

[0049] Figure 24 illustrates an example, non- limiting circuit for a dot product accelerator (DPA) for convolution arithmetic according to an embodiment of the subject disclosure;

[0050] Figure 25 illustrates an example, alternative embodiment of a convolution accelerator according to an embodiment of the subject disclosure;

[0051] Figure 26 illustrates another example, non-limiting matrix convolution according to an embodiment of the subject disclosure;

[0052] Figure 27 illustrates an example, non-limiting chart of values and distribution for on/off resistance according to an embodiment of the subject disclosure;

[0053] Figure 28 illustrates an example, non-limiting chart of a multi-level resistance

ReRAM according to an embodiment of the subject disclosure;

[0054] Figure 29 illustrates an example circuit for matrix multiplication utilizing a 4- state (2 -bits) multi-level resistance ReRAM according to an embodiment of the subject disclosure;

[0055] Figure 30 illustrates an example, non-limiting implementation of a signed matrix multiplication, incorporating positive and negative bit values as an example, according to an embodiment of the subject disclosure;

[0056] Figure 31 illustrates an example, non- limiting circuit for sensing and subtracting current on multiple bit lines according to an embodiment of the subject disclosure;

[0057] Figure 32 illustrates an example, non-limiting alternative circuit for signed matrix multiplication according to an embodiment of the subject disclosure;

[0058] Figure 33 illustrates an example, non- limiting circuit of an alternate embodiment for signed matrix multiplication according to an embodiment of the subject disclosure;

[0059] Figure 34 illustrates an example, non-limiting circuit for a signed matrix dot- product according to an embodiment of the subject disclosure;

[0060] Figure 35 illustrates a flowchart of an example method for operation of resistive random access memory matrix multiplication structures according to an embodiment of the subject disclosure; and

[0061] Figure 36 depicts a block diagram of an example computing environment in accordance with certain embodiments of the subject disclosure.

DETAILED DESCRIPTION

INTRODUCTION

[0062] As its name implies, a two-terminal memory device has two terminals or electrodes. Herein, the terms "electrode" and "terminal" are used interchangeably. Generally, a first electrode of two-terminal memory is referred to as a "top electrode" (TE) and a second electrode of the two-terminal memory is referred to as a "bottom electrode" (BE), although it is understood that electrodes of a two-terminal memory device can be according to any suitable arrangement, including a horizontal arrangement in which components of a memory cell are (substantially) side-by-side rather than overlying one another and including an oblique arrangement in which a memory cell stack is constructed at non-right angles to an underlying substrate. Situated between the TE and BE of a two-terminal memory device is typically an interface layer sometimes referred to as a switching layer, a resistive switching medium (RSM) or a resistive switching layer (RSL). When incorporating a RSM, the two-terminal memory device can be referred to as a (two-terminal) resistive switching device. In at least some disclosed embodiments, a non-volatile resistive switching device can be provided as a data storage device, and a volatile resistive switching device can be provided in series with the non- volatile resistive switching device to serve as an access device (also referred to as a selector device) for the data storage device. In such embodiments, the access device can mitigate current leakage in a 1 transistor - many resistive memory cell (lTnR) architecture, among other benefits.

[0063] One example of a resistive switching memory is a filamentary resistive memory cell. Composition of filamentary resistive memory cells, generally speaking, can vary per device with different components selected to achieve desired characteristics (e.g. , volatility/non-volatility, on/off current ratio, switching time, read time, memory durability, program/erase cycle, and so on). One example of a filamentary resistive memory cell can comprise: a conductive layer, e.g. , metal, metal-alloy (including, for instance, a metal-metal alloy such as TiW and others, and various suitable a metal-nonmetal alloys), metal-nitride (e.g. , comprising TiN, TaN, or other suitable metal-nitride compound), an optional interface layer (e.g. , doped p-type (or n-type) silicon (Si) bearing layer (e.g., a p-type or n-type Si bearing layer, p-type or n-type polysilicon, p-type or n-type polycrystalline SiGe, etc.), a RSL and an active metal-containing layer capable of being ionized. Under suitable conditions, the active metal-containing layer can provide filament- forming ions to the RSL. In such embodiments, a conductive filament (e.g. , formed by the ions) can facilitate electrical conductivity through at least a subset of the RSL, and a resistance of the filament-based device can be determined, as one example, by a tunneling resistance between the filament and the conductive layer.

[0064] A RSL (which can also be referred to in the art as a resistive switching media

(RSM)) can comprise, e.g., an undoped amorphous Si-containing layer, a semiconductor layer having intrinsic characteristics, a silicon nitride (e.g. , SiN, S13N4, SiN x where x is a positive number, etc.), a Si sub-oxide (e.g. , SiOx wherein x has a value between 0.1 and 2), a Si sub- nitride, a metal oxide, a metal nitride, a non-stoichiometric silicon compound, a silicon and nitrogen containing material, a metal and nitrogen containing material, and so forth. Other examples of amorphous and / or non-stoichiometric materials suitable for the RSL could include SixGeYOz (where X, Y and Z are respective suitable positive numbers), a silicon oxide (e.g. , SION, where N is a suitable positive number), a silicon oxynitride, an undoped amorphous Si (a-Si), amorphous SiGe (a-SiGe), TaOe (where B is a suitable positive number), HfOc (where C is a suitable positive number), TIOD (where D is a suitable number), AhOE (where E is a suitable positive number) other suitable oxides and so forth, a nitride (e.g. , AiN, SiN), e.g., or the like, or a suitable combination thereof.

[0065] In some embodiments, a RSL employed as part of a non-volatile memory device (non-volatile RSL) can include a relatively large number (e.g. , compared to a volatile selector device) of material voids or defects to trap neutral metal particles (at least at low voltage) within the RSL. The relatively large number of voids or defects can facilitate formation of a thick, stable structure of the neutral metal particles. In such a structure, these trapped particles can maintain the non- volatile memory device in a low resistance state in the absence of an external stimulus (e.g. , electrical power), thereby achieving non-volatile operation. In other embodiments, a RSL employed for a volatile selector device (volatile RSL) can have very few material voids or defects. Having few particle-trapping

voids/defects, a conductive filament formed in the volatile RSL can be quite thin, and unstable absent a suitably high external stimulus (e.g. , an electric field, voltage, current, joule heating, or a suitable combination thereof). Moreover, in the context of a volatile selector device, the neutral metal particles can be selected to have high surface energy, and good diffusivity within the volatile RSL. This leads to a conductive filament that can form rapidly in response to a suitable stimulus, but also deform quite readily, e.g. , in response to the external stimulus dropping below a deformation magnitude. Note that a volatile RSL and conductive filament for the selector device can have different electrical characteristics than a conductive filament and non- volatile RSL for the non-volatile memory device. For instance, the selector device RSL can have higher material electrical resistance, and can have higher on/off current ratio, among others.

[0066] An active metal-containing layer for a filamentary-based memory cell can include, among others: silver (Ag), gold (Au), titanium (Ti), titanium-nitride (TiN) or other suitable compounds of titanium, nickel (Ni), copper (Cu), aluminum (Al), chromium (Cr), tantalum(Ta), iron (Fe), manganese (Mn), tungsten (W), vanadium (V), cobalt (Co), platinum (Pt), hafnium (Hi), and palladium (Pd). Other suitable conductive materials, as well as compounds, oxides e.g. , nitrides e.g. , alloys, or combinations of the foregoing or similar materials can be employed for the active metal-containing layer in some aspects of the subject disclosure. Further, a non-stoichiometric compound, such as a non-stoichiometric metal oxide or metal nitride (e.g. , AlOx, AINx, CuOx, CuNx, AgOx, AgNx, and so forth, where x is a suitable positive number 0<x<2, which can have differing values for differing ones of the non-stoichiometric compounds) or other suitable metal compound can be employed for the active metal-containing layer, in at least one embodiment.

[0067] In one or more embodiments, a disclosed filamentary resistive switching device can include an active metal layer comprising a metal nitride selected from the group consisting of: TiNx, TaNx, AINx, CuNx, WNx and AgNx, where x is a positive number. In a further embodiment(s), the active metal layer can comprise a metal oxide selected from the group consisting of: TiOx, TaOx, AlOx, CuOx, WOx and AgOx. In yet another

embodiment(s), the active metal layer can comprise a metal oxi-nitride selected from the group consisting of: TiOaNb, AlOaNb, CuOaNb, WOaNb and AgOaNb, where a and b are positive numbers. The disclosed filamentary resistive switching device can further comprise a switching layer comprising a switching material selected from the group consisting of: SiOy, AlNy, TiOy, TaOy, AlOy, CuOy, TiNx, TiNy, TaNx, TaNy, SiOx, SiNy, AlNx, CuNx, CuNy, AgNx, AgNy, TiOx, TaOx, AlOx, CuOx, AgOx, and AgOy, where x and y are positive numbers, and y is larger than x. Various combinations of the above are envisioned and contemplated within the scope of embodiments of the present invention.

[0068] In one example, a disclosed filamentary resistive switching device comprises a particle donor layer (e.g. , the active metal-containing layer) comprising a metal compound and a resistive switching layer. In one alternative embodiment of this example, the particle donor layer comprises a metal nitride: MNx, e.g. , AgNx, TiNx, AlNx, etc., and the resistive switching layer comprises a metal nitride: MNy, e.g. , AgNy, TiNy, AlNy, and so forth, where y and x are positive numbers, and in some cases y is larger than x. In an alternative embodiment of this example, the particle donor layer comprises a metal oxide: MOx, e.g. , AgOx, TiOx, AlOx, and so on, and the resistive switching layer comprises a metal oxide: MOy, e.g. , AgOy, TiOy, AlOy, or the like, where y and x are positive numbers, and in some cases y is larger than x. In yet another alternative, the metal compound of the particle donor layer is a MNx (e.g. , AgNx, TiNx, AlNx, etc.), and the resistive switching layer is selected from a group consisting of MOy (e.g. , AgOx, TiOx, AlOx, etc.) and SiOy, where x and y are typically non- stoichiometric values.

[0069] As utilized herein, variables x, a, b, and so forth representative of values or ratios of one element with respect to another (or others) in a compound can have different values suitable for respective compounds, and are not intended to denote a same or similar value or ratio among the compounds. Some details pertaining to embodiments of the subject disclosure similar to the foregoing example(s) can be found in the following U.S. patent applications that are licensed to the assignee of the present application for patent: Application Serial Number 13/875,541 filed October 19, 2007 and Application Serial Number 12/575,921 filed October 8, 2009; each of the foregoing patent applications are hereby incorporated by reference herein in their respective entireties and for all purposes.

[0070] As mentioned above, applying a program voltage (also referred to as a "program pulse") to one of the electrodes of the two-terminal memory can cause a conductive filament to form in an interface layer (e.g. , a RSL). By convention and as generally described herein, the TE receives the program pulse and the BE is grounded (or held at lower voltage or opposite polarity compared to the program pulse), but such is not intended to be limiting for all embodiments. Conversely, applying an "erase pulse" to one of the electrodes (generally a pulse of opposite polarity as the program pulse or to the opposite electrode as the program pulse) can break continuity of the filament, e.g. , by driving the metal particles or other material that forms the filament back toward the active metal source. Properties of this conductive filament as well as its presence or absence affect the electrical characteristics of the two-terminal memory cell such as, for example, lowering the resistance and/or increasing conductance across the two terminals when the conductive filament is present as opposed to when not present.

[0071] Following program or erase pulses, a read pulse can be asserted. This read pulse is typically lower in magnitude relative to program or erase pulses and typically insufficient to affect the conductive filament and/or change the state of the two-terminal memory cell. By applying a read pulse to one of the electrodes of the two-terminal memory, a measured current (e.g. , I on ) can be indicative of the conductive state of the two-terminal memory cell. For example, when the conductive filament has been formed (e.g. , in response to application of a program pulse), the conductance of the cell is greater than otherwise and the measured current (e.g. , I on ) reading in response to the read pulse will be greater. On the other hand, when the conductive filament is removed (e.g. , in response to application of an erase pulse), the resistance of the cell is high because the interface layer has a relatively high electrical resistance, so the conductance of the cell is lower and the measured current (e.g. , Ioff) reading in response to the read pulse will be lower. By convention, when the conductive filament is formed, the memory cell is said to be in the "on-state" with a high conductance. When the conductive filament is not extant, the memory cell is said to be in the "off-state." A memory cell being in the on-state or the off-state can be logically mapped to binary values such as, e.g. , "1 " and "0." It is understood that conventions used herein associated with the state of the cell or the associated logical binary mapping are not intended to be limiting, as other conventions, including an opposite convention can be employed in connection with the disclosed subject matter. Techniques detailed herein are described and illustrated in connection with single-level cell (SLC) memory, but it is understood that the disclosed techniques can also be utilized for multi-level cell (MLC) memory in which a single memory cell can retain a set of measurably distinct states that represent multiple bits of information.

[0072] By mapping digital information to non-volatile resistance states of a two- terminal memory cell, digital information can be stored at such device. An electronic device containing many of these two-terminal memory cells can likewise store significant quantities of data. High density arrays are configured to contain as many memory cells as possible for a given area of chip space, thereby maximizing data storage capacity of a memory chip, or system-on-chip device.

[0073] For two-terminal memory formed at intersections of metal lines within a wafer

(e.g. , a crossbar array), the inventor(s) of the subject disclosure is cognizant of two general conventions for arrangement of the memory cells. A first convention is the 1T1R memory array, in which each memory cell is isolated from electrical effects (e.g. , current, including leak path current(s)) of surrounding circuitry by an associated transistor. A second convention is the lTnR memory array (n being a positive number greater than one), where a group of multiple memory cells is isolated from electrical effects of surrounding circuitry by one (or more) transistors. In the 1T1R context, individual memory cells can be configured to have high current suppression between memory cells, significantly reducing leakage path currents for the 1T1R memory array. In the lTnR context, individual memory cells can include a selector device (e.g. , a volatile, two-terminal filamentary resistance device), to suppress leakage path currents among the group of multiple memory cells isolated by the one (or more) transistors.

EXAMPLE COMPUTING MEMORY ARCHITECTURE

[0074] Various aspects or features of this disclosure are described with reference to the drawings, wherein like reference numerals are used to refer to like elements throughout. In this specification, numerous specific details are set forth in order to provide a thorough understanding of this disclosure. It should be understood, however, that certain aspects of disclosure can be practiced without these specific details, or with other methods, components, materials, etc. In other instances, well-known structures and devices are shown in block diagram form to facilitate describing the subject disclosure.

[0075] Referring initially to Figure 1 , illustrated is a schematic diagram of an example computing memory architecture 10 that comprises a memory array according to an embodiment of the subject disclosure. The example of Figure 1 is an 8-bit logical interface and 512-bit physical interface; 64KB (512K bits) memory array. [0076] The computing memory architecture 10 can comprise a memory array that comprises two interfaces, namely, a physical interface 12 and a logical interface 14. For example, the physical interface 12 can be a physical access mode. The physical interface 12 can be a wide interface (e.g., high throughput/bandwidth (BW)). For example, the physical interface 12 can be 512 bits. The physical interface 12 can use small, low power read only sense amps (SAs) 16, illustrated by the rows of triangles at the top of Figure 1. Outputs of the sense amps are illustrated as Physical IO (e.g., PIO_0 through PIO_511). The read only sense amps 16 can be a large number of read sense amps. Further, the read only sense amps 16 can consume small, low current. The read only sense amps 16 are not used during a logical access mode.

[0077] The logical interface 16 can be a logical access mode. The logical interface 14 can be a narrow interface (e.g., low throughput/bandwidth). For example, the logical interface 14 can be 8 bits. The logical interface 14 can utilize bigger, high power read/write sense amps, as illustrated. For example, the logical interface 14 can comprise a first sense amp 16, a second sense amp 18, through an eighth sense amp 20. The physical interface 12 can have a high throughput/bandwidth. The read/write sense amps (e.g., the first sense amp 16, the second sense amp 18, through the eighth sense amp 20) can utilize a relatively big, high current. Further, the read/write sense amps are not utilized during a physical access mode. Outputs of the sense amps are illustrated as Logical IO (e.g., LIO_0 through LIO_7).

[0078] The memory array can have two modes of operations: logical and physical (or wide and narrow). The lower address bits are not used in physical or wide mode. For example, during physical or wide mode, YMux is not used, only XMux is used to select the wordline (WL). Further, during physical or wide mode, all bitlines are used (e.g., are decoded). In the logical or narrow mode, both YMux and XMux are used. For example, XMux can be utilized to select the wordline, YMux can be utilized to select the bitline.

[0079] For example, the memory array can be asymmetric and can comprise two interfaces. One interface can comprise a small number of Input/Outputs (IOs) and big sense amps for write and optionally read. These reads and writes are logical since the bitlines are shoveled around in the YMux. A second interface can comprise a large number of IOs and small sense amps optimized for current consumption, speed, and size. The second interface does not use the YMux, only XMux since all the bitlines are read at once and hence low current SA is a must to read large number of bitlines (e.g., 512, 2048, or even more). Since these memories are targeted for read intensive applications, slower and lower bandwidth writes are acceptable. Furthermore, since all the bitlines are read, it is a physical read.

Logical read is optional to check the data but it is not a must since the data can be read physically and some physical to logical mapping can be performed. Therefore, the memory comprises two interfaces, logical slow BW using YMux and high bandwidth physical (no YMux); asymmetric throughput.

[0080] In further detail, in logical or narrow mode, all address lines can be used by both XMux (selects a wordline) and YMux (selects a subset of bitlines) to decode a byte (or word or doubleword). In physical or wide mode, only XMux is used to select a wordline and YMux is not used since all bitlines are being sensed. Thus, there can be a mode register, for example, to select the access type (narrow or wide).

[0081] There can be various sensing procedures in memory architectures. The sensing procedures can be designed based on the specification(s) and the architecture of the intended product. By way of example and not limitation, if many bitlines are to be sensed (e.g., more than 1000 simultaneously) and keep the product active and current manageable (e.g., low current, such as ~<50mA), a pure charging and discharge sensing procedure can be adopted. According to this procedure, intended bit lines can be precharged. Further, the selected memory cells (a row of cells) can be activated. If a cell is programmed to be conductive the bit line is discharged. If a cell is not programmed and highly resistive the precharged value will remain. A simple latch type sensing can be used to detect the state of the bit lines. The latch can be designed with limited current operation such that the average current consumption does not exceed the 50mA. This can be a common sensing procedure adopted in many NAND products.

[0082] However, if speed (or low latency is required) and is the priority, then providing active sensing is needed. According to an active sensing protocol, a reference current/voltage can be set (e.g., a current can be kept high). The reference current can bey set at the center point between the high and low resistance states of the cells. All sense amps (op amps) are active and ready to monitor the state of the memory cells. A cascoded transistor can be used to clamp the bit line to reduce the Bitline swing (e.g., used for fast sensing). A short precharge phase could be used. When the selected cells are activated, current is injected into the selected cells. Cells with low resistance will react to the injected current and the associated sense amps will change their state. Cells with high resistance will stay unchanged and the associated sense amps will stay at their present state. It is noted that the active current injected per bit line and the active current in each sensing circuit (OP AMP) will increase the current consumption of this approach. Further, the selected bit lines in this approach will be limited by the current consumption of each active sense amp. In addition, with this sensing scheme faster sensing is achieved with more current consuming sense amps. In an example, many bit lines may be used for image data, and few bit lines may be used for kernel

(convolution) data. Because the kernel is used often, higher power sense amps may be used.

[0083] It is noted that a large portion of a read/write SA circuit can be associated with the write operation, which is actually two separate program and erase operations. This will make the SA bigger. Also, different techniques of designing SA can be used for read only SA.

[0084] In further detail, read/write sensing can include many additional components that makes it larger than a read sensing. The following is a non- limiting example of additional components that are needed for a Read/Write sensing: write sensing circuits, verify circuits, analog referencing circuits, and/or array referencing circuits and memory cells. Write sensing circuits may need larger transistors to provide the necessary current drive to set and reset (or program/erase). Verify circuits are utilized to sense the written cell and check and see if it was written or not. This is usually a different circuit then the normal read sensing since it requires to shift the sensing margin to much higher or much lower levels than a normal read sensing to check for a good "0" and a good "1" data. Analog referencing circuits are utilized to generate the "0", and "1" verify margin levels. Further array referencing circuits and memory cells are added to make sure the references track process changes across the die or wafer.

[0085] Figure 2 illustrates a schematic diagram of an example computing memory architecture 100 according to an embodiment of the subject disclosure. The computing memory architecture 100 can comprise a very wide memory array and a highly parallel computing engine. Conventional memory arrays can have multiple bitlines and wordlines. For example, conventional memory arrays can have a 32-bit output (or a 64-bit output). Even though these conventional memory arrays can have multiple bitlines and wordlines, access to only a 32 bit (or 64 bit) array is provided. In contrast, the various aspects provided herein provide the capability of the memory array to read a larger number of bits than conventional limitations (e.g. , 1,024 bits, 2,048 bits, or more bits) at about the same time. Thus, the various aspects can increase memory capacity and can increase processing power capability as will be discussed herein.

[0086] The computing memory architecture 100 can include analog circuitry 102. Also included in the computing memory architecture 100 is a resistive random access memory or ReRAM array 104 comprising multiple sets of bitlines and multiple wordlines. Also including in the computing memory architecture 100 can be read sensors 106 or read sense amps connected to the multiple sets of bitlines and configured to acquire stored data from memory cells of the ReRAM array 104. According to some implementations, the computing memory architecture 100 can be read intensive. For example, there can be one read sense amp per bitline for a given number of bitlines (e.g. , 1,024, 2,048, or other suitable number), which can provide a high throughput for read operations. In addition, there can be write sense amps per sets of bits (e.g. , 8, 16, or 32 bits). As such, the analog circuitry 102, which can include sense amps associated with write operation(s), can remain small in size and current consumption associated with write operations can remain low. Further, the computing memory architecture 100 can comprise multiple wordlines, illustrated as a first wordline (WL 0) through wordline K-l (WL K-l), where K is an integer. The computing memory architecture 100 can include 1,024 bits lines, 2,048 bits lines, and so on, in addition to the K number of wordlines.

[0087] Programmable processing elements (PEs) can be located on top of the array

(e.g., the ReRAM array 104) and can be connected to respective groups or set of the multiple bitlines of the ReRAM array 104. Further, the one or more programmable processing elements can be connected to a data interface. For example, the one or more processing elements can be located adjacent input/output lines (e.g. , I/Os 108). Illustrated are a first processing element (PE 1), a second processing element (PE 2), through an N processing element (PE N), where N is an integer. As illustrated, the one or more programmable processing elements can be located between the data interface and the ReRAM array 104 and can be physically connected with the multiple sets of bitlines of the ReRAM array 104.

[0088] The one or more programmable processing elements can independently compute or determine respective functions (e.g. , sensing, matching, logical algorithms, mathematical algorithms, and so on) and output a result of the independent processing functions. The one or more programmable processing elements can be configured to receive stored data from the ReRAM array 104 via the respective sets of bitlines and/or to receive data from an external device via the data interface. Further, the one or more programmable processing elements can execute a logical or mathematical algorithm on the external data and/or on the stored data and generate processed data.

[0089] According to some implementations, the wordlines can be activated sequentially and/or randomly. However, all the processing elements connected to groups of bitlines activated by a wordline will receive data from memory cells activated by that wordline. As different wordlines are activated (e.g. , one wordline at a time), data from different rows of memory cells can be provided to the processing elements.

[0090] In accordance with a non-limiting example, the computing memory architecture 100 can comprise 2,048 bitlines and one or more processing elements can utilize 16 bits of inputs. Thus, there can be 128 processing elements located on top of the ReRAM array 104, in an implementation where the processing elements are associated with the same quantity of bitlines. Accordingly, the computing memory architecture 100 can be utilized for highly parallel computing.

[0091] According to some implementations, a different quantity of bitlines can be connected to respective processing elements of the one or more processing elements. For example, a first processing element can be associated with 8 bitlines and a second processing element can be associated with 16 bitlines. The first processing element and the second processing element are accessing data on the same wordline, however, the second processing element is using more bitlines than the first processing element in this example. Further, the data provided to the one or more processing elements is generally from a same wordline.

[0092] In the example of Figure 2, the first set of bitlines are dedicated for PE 1 , the second set of bitlines are dedicated for PE 2 and so on. Thus, when wordline 0 (e.g. , WL 0) is activated, for example, PE 1 receives its respective information from a first group of memory cells on WL 0 and the first set of bitlines, by way of the first set of bitlines. Further, when wordline 0 is activated, PE 2 receives its respective information from a second group of memory cells on WL 0 and the second set of bitlines, by way of the second set of bitlines, and so on. When wordline 1 (WL 1) is activated, PE 1 receives its respective information from a third group of memory cells on WL 1 and the first set of bitlines, again over the first set of bitlines, and PE 2 receives its respective information from a fourth group of memory cells on WL 1 and the second set of bitlines, over the second set of bitlines, and so on. Thus, the engine can feed data on a given wordline to different processing elements connected to memory cells on that wordline, and repeat this process for differing wordlines of the ReRAM array 104.

[0093] According to some implementations, if one or more bit lines of the memory array are defective, the memory array can continue to be utilized by disabling the one or more processing elements associate with the defective bit lines. The one or more processing elements can be disabled and/or or its computed value can be ignored or discarded.

Accordingly, a production yield can be increased, which can lower a cost associated with the computing memory architecture 100.

[0094] The example computing memory architecture 100 can be configured to perform various logical or mathematical functions by way of programmable processing elements PE 1 through PE N. Some non-limiting examples of such functions can include a sensing function, a pattern recognition, a feature extraction, a NAND operation, a NOR operation, a XOR operation, or any other suitable logical or processing operation, as well as various mathematical functions, and so on. By way of example and not limitation, for feature extraction, a set of features can be retained in a library or data store (e.g. , programmed into the memory array). For this example, there can be thousands of feature data, wherein respective sets of the thousands of feature data can be provided to the one or more processing elements (e.g. , a processing element of the one or more processing elements receive its respective input from the ReRAM array 104). Thus, the first processing element (e.g. , PE 1) can receive its respective feature data, the second processing element (e.g. , PE 2) can receive its respective feature data, and so on.

[0095] In a specific end-use example, the pattern recognition and feature extraction can be utilized to implement facial recognition. Instructions for analyzing sets of data to identify or infer facial feature information can be directed to the processing elements to perform a particular task. In an example, pre-captured facial features/pictures can be programmed into the ReRAM array 104. A surveillance camera (or other image capture device) can capture pictures of what is to be analyzed, and captured picture data can then be fed into one or more processing elements where the captured picture is processed by one or more processing elements against their respective stored pictures. The respective stored data associated with pre-captured pictures is fed to their corresponding one or more processing elements, which implement the facial recognition algorithm against the captured picture.

[0096] Because the processing elements are integrated within computing memory architecture 100, facial recognition can be implemented in conjunction with stored images in the array. In an embodiment, a plurality of the processing elements can be leveraged to implement the facial recognition algorithm, in parallel on different sets of data. Alternatively, different processing elements can be leveraged to implement different subsets of the facial recognition algorithm on subsets of the data. In one particular example, computing memory architecture 100 can be incorporated into an electronic device (e.g. , a digital security camera) that takes pictures of individuals entering an area monitored by the electronic device.

Authorized individual pictures, such as employees of a company, can be stored into ReRAM array 104, and the processing elements can compare the picture data against stored picture data to determine, in the case of facial recognition for instance, whether an individual within the monitored area is an authorized individual represented by the stored picture data.

According to an implementation, details associated with the match, such as employee name, work location, and so on, can also be stored in ReRAM array 104 to facilitate additional onboard processing by computing memory architecture 100.

[0097] It is noted that data is retained in the memory, not in the processing element(s).

However, the processing element performs a logical or mathematical computation on input data and data on the ReRAM array 104 to generate processed data, which can be output from computing memory architecture 100 or stored in some registers or memory within the computing memory architecture 100 or a scratch pad area within the ReRAM array.

[0098] As mentioned above, the processing elements can operate in parallel on separate instructions, on separate data, as well as integratively on a common set of instructions or data. As an example of the former in the context of the facial recognition paradigm, two processing elements (e.g. , PE 1 and PE 2) can be provided with a same set of picture data representing a captured picture of a person. Both processing elements can compare the respective captured picture data to stored picture data of authorized personnel in their respective bitlines of the ReRAM array 104, for instance PE 1 evaluates the picture data against the stored picture data and fails to determine a match. PE 1 can output a facial recognition failure. However, PE 2 evaluates the picture data and determines it is a match to stored picture data in bitlines corresponding to PE 2, and outputs a facial recognition success. Although this example was discussed with respect to two processing elements, a memory architecture as provided herein can include multiple processing elements (e.g. , 1 ,000 processing elements, 10,000 processing elements, and so on). Thus, hundreds (or even thousands) of pictures can be compared against the input data and the multiple processing elements can compare the incoming picture to respective stored pictures simultaneously. Further, although discussed with respect to images or pictures, the disclosed aspects are not limited to an implementation related to optical recognition. Instead, the processing can be performed for any suitable simple logic or mathematical algorithms, (e.g. , AND operation, NOR operation, multiplication, etc. ), to varying degrees of complex logic or mathematical algorithms (e.g. , machine-learning algorithms for sentiment analysis e.g., including words, dialog, and so on, for simulated neural networks, derivative calculus, or other suitable machine-implemented algorithms. It is noted that the accuracy of the comparison (or other functionality) can be in direct proportion to the amount of data available to the one or more processing elements.

[0099] In another example, social media feeds can be processed in accordance with the various aspects provided herein. The sentiment and/or the words included in the social media feeds can be determined by the one or more processing elements. Sentiments or phrases can be programmed into the ReRAM array 104. Social media feeds can be fed to the processing elements and compared against the sentiment and phrases. According to an implementation, a counter can be associated with the computing memory architecture 100 and utilized to determine how many times a particular sentiment was shared through the social media feeds. Further, if there are 125 social media feeds, for example, all 125 feeds do not have to be input to the processing elements at the same time. Instead, the one or more feeds (or other data, such as images) can be provided at different times.

[00100] Figure 2 illustrates an example processing element 200 according to an embodiment of the subject disclosure. The processing element 200 can be PE 1, PE 2, through PE N of Figure 2. As illustrated the processing element 200 can have multiple inputs (e.g., two inputs, three inputs, etc.) namely, a first input 202 and a second input 204. The first input 202 can be configured to receive data from the ReRAM array. Thus, the first input 202 can include data stored at ReRAM array (e.g. , the ReRAM Array 104 of Figure 2) and pulled up on the respective bitlines connected to the processing elements. The second input 204 can be configured to receive data from an external device. Thus, the second input 204 can include incoming data, which can be received from through the data interface, or the one or more input/output lines (e.g. , the I/Os 108 of Figure 2). The incoming data received over the second input 204 can originate at a source external to the computing memory architecture 100, such as an integrated electronic device (e.g. , the camera providing picture data) or a host computing device (e.g. , providing social media feed data), or other suitable device.

[00101] The output 206 can be provided separately from the outputs of other processing elements of the memory array. However, according to some implementations, the output 206 can be cascaded with respective outputs from the other processing elements. For example, the various outputs can be cascaded together, processed and produce a single output. According to some implementations, processed data can be selectively provided by output 206 only in response to satisfaction of a condition(s) (e.g. , in response to the processed data being within a certain threshold parameter or matching a category parameter associated with first input data 202). According to some implementations, the one or more outputs can be provided and an entity that can perform the match determination.

[00102] Figure 3 illustrates an example memory array architecture 300 that includes parity bits according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity.

[00103] As illustrated, one or more correction code decoders can identify an error(s) in data stored in the ReRAM array 104 and correct the data error(s) prior to the (erroneous) data being sent to the one or more processing elements. For example, a first correction code decoder 302 can be associated with PE 1 , a second correction code decoder 304 can be associated with PE 2, and an N* correction code decoder 306 can be associated with PE N. Subsets of data stored at the ReRAM array 104 can be associated with parity bits utilized for error correction algorithms. In an example, a 16 bit processing element can utilize a few bits for parity (e.g. , 5 bits, 6 bits, and so on). The parity bits can be additional bits allocated to the respective processing element such that the example processing element retains its 16 bits in order to perform its associated function. As compared to the computing memory architecture 100 of Figure 2, the memory array architecture 300 of Figure 4 comprises two additional bits going to the one or more processing elements. However, other implementations can utilize fewer or more bitlines for parity than the number shown and described.

[00104] Figure 4 illustrates an example memory array architecture 400 that includes shared parity bits according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity.

[00105] According to some implementations, to optimize overhead associated with the parity, there can be parity across more than one processing element. As illustrated, a correction code decoder 402 can be utilized for two processing elements (e.g. , PE 1 and PE 2). However, in other implementations, more than two processing elements can share a correction code decoder. Thus, the correction decoder can correct data prior to the data being sent to the one or more processing elements. The correction code can span across multiple processing elements for efficient correction coverage.

[00106] Figure 5 illustrates an example of multiple memory arrays 500 sharing write circuitry logic according to an embodiment of the subject disclosure. According to an aspect, the write circuitry can be shared among multiple arrays, as illustrated by the analog circuitry and write circuit 502. In this example, the analog circuitry and write circuit 502 is shared by the multiple memory arrays located above and below the analog circuitry and write circuit 502. In this manner, the footprint (or geometric area) of the memory architecture does not need to increase in proportion to the space of the multiple memory arrays. However, the bandwidth for reading and writing may be reduced (e.g. , slightly longer processing time) with a shared analog circuitry and write circuit 502, however, the tradeoff is that the area efficiency is increased (e.g. , the size of the memory architecture uses less space as compared to memory arrays that do not share write circuitry logic). The analog circuitry and write circuit 502 is mainly used to initialize the ReRAM arrays and infrequent updates to the array and, as such, will not affect the performance of the engine. Each of the memory arrays can still maintain their dedicated read sensors, which is utilized during normal computational operations.

[00107] According to some implementations, the wordlines can be accessed sequentially and the row decoder can be a counter 504 or a x multiplexer (e.g., x mux). For example, the counter 504 can start at zero, then count through one, two, three, and so on. This does not need a full row decode. For example, the counter can progress from one wordline to the next wordline as it counts. According to another implementation, the counter can be a shift register with a rolling bit. For example, the shift register can have zeros and/or ones and can be shifted as it progresses sequentially through the wordlines.

[00108] Figure 6 illustrates an example resistive random access memory array 600 according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity.

[00109] The resistive random access memory array 600 can comprise one or more wordline start pointers and one or more wordline stop pointers that can be configured to indicate a beginning and an ending of one or more groups of data, respectively. In some implementations, the resistive random access memory array 600 can have multiple sets of data and/or features for the one or more processing elements. For example, a first set of data is illustrated by dashed box 602 and a second set of data is illustrated by dashed box 604. In Figure 7, for the first set of data, a first wordline start pointer can be provided at wordline 0 (WL 0) and a first wordline stop pointer can be provided at wordline M-1 (WL M- 1). For the second set of data, a second wordline start pointer can be provided at wordline M (WL M) and a second wordline stop pointer can be provided at wordline K- l (WL K-l). [00110] To select one of the sets of data to send to a processing element(s), the wordline start pointer can be set to a wordline at which the set of data begins, and the wordline stop pointer can be set to a second wordline at which the set of data ends. A controller can sequentially activate wordlines starting at the wordline start pointer and ending at the wordline stop pointer to selectively send the one set of data, from the multiple sets of data, to the processing element(s).

[00111] According to an implementation, the wordlines can be selected sequentially. Further, a counter or shift register can be used as the wordline address decoder. The one or more processing elements can process the same input data and, therefore, can share the I/Os 108.

[00112] A category can be associated with at least a portion of the incoming data. In an example, a first set of data in ReRAM is associated with a first category and a second set of data in ReRAM is associated with a second category. For example purposes, the first category is related to "animals" and the second category is related to "trees." According to this example, when the incoming data is received, an indication is provided that identifies the category associated with the data (e.g. , the data is assigned to one of the two categorizes (e.g. , a tree or an animal)). Based on the indicator, either the first set of data or the second set of data in ReRAM is fetched by the processing elements. For data associated with the category trees, the processing elements can fetch the second set of data in ReRAM associated with trees to perform a match.

[00113] Such categorization can also be applied for the array of Figure 6 and, if the type of incoming data is known, only the processing elements (or processing engines) that have that type of data category need to be activated. The other processing elements do not need to be activated, since is already known that those other processing elements will not match. According, power can be conserved since excessive processing elements do not have to be activated.

[00114] Thus, if two categories are mutually exclusive (such as the example of animals and trees) only a subset of the one or more processing elements are activated when the categorization is known. However, if two or more categories are not mutually exclusive (e.g. , there is some overlap), all processing elements are activated.

[00115] Further, the different portions of data related to the different categories can be placed in different portions of the memory. In an example, wordline 0 through wordline M-l (e.g. , WL 0 through WL M- l in Figure 7) can have the features for the first category and wordline M to wordline K- l (e.g. , WL M to WL K- l) can have the features for the second category. If it is known a priori the category for the incoming data (which can be stored in ReRAM array 104), the wordlines associated with that category can be utilized and those wordlines can push the data to the processing elements. Accordingly, there can be twice as many features in the array without significantly increasing the size of the array.

[00116] However, continuing the above example, if the category is not known a priori, or both sets of categories should be utilized (e.g. , not mutually exclusive), the first set can be processed first and the second set can be processed second. Accordingly, twice as many feature sets can be included in the logic without significant changes to the size of the array, however, the processing speed can take about twice as long. Thus, with the same engine the data can be compared against twice as many feature sets.

[00117] According to an implementation, a size of the ReRAM Array 104 of the memory array 600 can be significantly smaller than the analog circuitry 102 and read sensors 106 and as such, increasing the wordlines by a factor of 2 or 4 will not increase size of the memory array 600 substantially. Increasing the number of wordlines can increase the number of features that can be stored in the ReRAM array 104.

[00118] The diagrams included herein are described with respect to interaction between several memory cells, memory cell components, or memory architectures. It should be appreciated that such diagrams can include those memory cells, components and architectures specified therein, some of the specified memory cells / components / architectures, or suitable alternative or additional memory cells / components / architectures. Sub-components can also be implemented as electrically connected to other sub-components rather than included within a parent architecture. Moreover, some of the disclosed embodiments can be implemented as part(s) of other disclosed embodiments where suitable. Additionally, it is noted that one or more disclosed processes can be combined into a single process providing aggregate functionality. For instance, a program process can comprise an erase process, or vice versa, to facilitate programming and erasing a semiconductor cell by way of a single process. In addition, it should be appreciated that respective rows of multiple cell memory architectures can be erased in groups (e.g. , multiple rows erased concurrently) or individually. Moreover, it should be appreciated that multiple memory cells on a particular row can be read or programmed in groups (e.g. , multiple memory cells read/programmed concurrently) or individually. Components of the disclosed architectures can also interact with one or more other components not specifically described herein but known by those of skill in the art or made evident by way of the context provided herein.

[00119] Figure 7 illustrates another example computing memory architecture 700 according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity.

[00120] As illustrated, the ReRAM array 104 can include configuration information for the processing elements. As illustrated, first configuration information (Config 1) corresponds to the first processing element (PE 1); second configuration information (Config

2) corresponds to the second processing element (PE 2); and Nth configuration information

(Config N) corresponds to the Nth processing element (PE N). It is noted that the processing elements do not need to be the same.

[00121] Configuration information can be written to the ReRAM array 104. Upon or after power up, the configuration information can be loaded into the corresponding processing elements in parallel. Thus, Config 1 can be loaded into PE 1; Config 2 can be loaded into PE 2; and Config N can be loaded into PE N in parallel during initialization. Each processing element can have its unique configuration information stored in ReRAM and loaded during power up or initialization. According to some implementations, the parallel loading of information can reduce the power up time or waking up from standby, which can improve system latency and increase processing efficiency.

[00122] Figure 8 illustrates a further example memory array architecture 800 according to one or more embodiments of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity. This example is similar to the computing memory architecture 100 of Figure 2. However, for the computing memory architecture 800 of Figure 9, instead of processing elements, convolution accelerators can be utilized.

[00123] As illustrated, one or more kernels (or feature information) can be included in the ReRAM array 104. For example, illustrated are a first kernel (Kernel 1), a second kernel (Kernel 2), through an Nth Kernel (Kernel Ν), where N is an integer. One or more programmable convolution accelerators (CAs) can be located on top of the array (e.g., the ReRAM array 104). For example, illustrated are a first convolution accelerator (CA 1), a second convolution accelerator (CA 2), through an Ν convolution accelerator (CA Ν), where Ν is an integer.

[00124] The one or more programmable convolution accelerators can be connected to respective groups or sets of the multiple bitlines of the ReRAM array 104. Further, the one or more programmable convolution accelerators can be connected to a data interface 108. As illustrated, the one or more programmable convolution accelerators can be located between the data interface and the ReRAM array 104 and can be physically connected with the multiple sets of bitlines of the ReRAM array 104 and image input 802.

[00125] The one or more programmable convolution accelerators can perform convolution in parallel between the stored image in image input 802 and their respective kernels and store the result in filtered image memory. The one or more programmable convolution accelerators can be configured to receive stored data (Kernels) from the ReRAM array 104 via the respective sets of bitlines and to receive data from an image input memory 802 via the data interface 108. Further, the one or more programmable convolution accelerators can execute a logical or mathematical algorithm on the input data (e.g., image input 802) using their corresponding kernels and store the generated processed data in their respective output memory (e.g., filtered images memory). At the end of a convolution operation, each of the output memories can contain processed data corresponding to the common input data and their corresponding kernel.

[00126] Figure 9 illustrates an example convolution accelerator 900 according to an embodiment of the subject disclosure. The convolution accelerator 900 can be, for example, CA 1, CA 2, through CA N of Figure 9. The convolution accelerator 900 can have multiple inputs such as, for example, a first input 902 and a second input 904. The first input 902 can be configured to receive data from the ReRAM array and can include data stored at the ReRAM array (e.g., the ReRAM array 104 of Figure 9). The second input 904 can be configured to receive data. For example, the second input 904 can be a memory or incoming data received through the data interface and/or the one or more input/output lines (e.g., the VOs 108 of Figure 9).

[00127] In an example, pixels from an image in an image input buffer can be input to the convolution accelerators. Further, the convolution accelerators can be loaded with their corresponding kernels. The convolution accelerators can perform convolution on the input pixels and the corresponding kernel, the results can be stored in a memory location of the corresponding image filter buffers. Upon or after the result is stored, the next set of pixels from the image input buffer can be input (or presented) to the convolution accelerators. The next set of pixels can be convolved with the kernel and stored in another location in the corresponding filtered image buffer until the entire input image is processed and filtered image buffers can have N set of independently filtered images of the same input image. Filtered images can further be filtered with other sets of kernels in the same HPM

(Hierarchical Parallelism and Hierarchical Memories) or another HPM. The parallelism of convolution can be utilized to accelerate Neural Network computing, according to an implementation.

[00128] Figure 10 illustrates yet another example computing memory architecture 1000 according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity. As illustrated, the ReRAM Array 104 can comprise the configuration information that can be used during the power up sequence. Further, the ReRAM array 104 can comprise the kernels or feature information that can be used by the processing elements to perform convolution or pattern matching upon or after configuration.

[00129] As illustrated, a first kernel (Kernel 1) can correspond to Config 1 and PE 1 ; a second kernel (Kernel 2) can correspond to Config 2 and PE 2; and an Nth Kernel (Kernel N) can correspond to Config N and PE N. During the power on or initialization, Config 1 can be loaded into PE 1 ; Config 2 can be loaded into PE 2; and Config N can be loaded into PE N in parallel. This parallel loading of information can reduce the power up time, which can increase processing efficiency. After initialization, the processing elements can use Kernel data or feature data stored in ReRAM.

[00130] Figure 11 illustrates a further example computing memory architecture 1100 according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity. The computing memory architecture 1100 comprises computing elements configured for versatility such that the computing memory architecture 1100 can be utilized for different applications.

[00131] As illustrated, the ReRAM Array 104 can comprise the configuration information and the kernels. Further, the ReRAM Array 104 can comprise various feature data, illustrated as first features (Features 1), second features (Features 2), through N features (Features N). Further, convolution accelerators and processing elements can be located on top of the array (e.g., ReRAM Array 104).

[00132] In an example, the device can be configured for use of the processing elements and/or the convolution accelerators. Further, the device can be configured to dynamically switch between the processing elements and/or the convolution accelerators. When performing the dynamic switching, configuration data can be utilized to configure the device. Thereafter, the kernel data can be utilized for the convolution accelerators and the feature data can be utilized for the processing elements. Accordingly, the one or more computing engines (or one or more elements) can have respective sets of data in the ReRAM Array 104 and can be loaded to the engine appropriately for the configuration (e.g., use of the processing elements or use of the convolution accelerators).

[00133] Figure 12 illustrates an example computing memory architecture 1200 illustrating intercommunication among processing elements according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other

embodiments described herein is omitted for sake of brevity.

[00134] The processing elements of the computing memory architecture 1200 can communicate amongst themselves to select the processing element that comprises data that most closely matches a matching criteria. For example, in a case where the processing elements are comparing the input data with their associated feature data, the processing elements can communicate with one another to determine the winning processing element that matches the input the closest. The information from the winning processing element is the information reported to the host. Alternatively, the host reads the results from all the processing elements and the host selects the information to use based on a comparison of the resulting data received from all of the processing elements.

[00135] Figure 13 illustrates an example of multiple computing memory architectures cascaded in series according to an embodiment of the subject disclosure. Repetitive description of like elements employed in other embodiments described herein is omitted for sake of brevity.

[00136] As illustrated, a first computing memory architecture 1300 can be placed in series with a second computing memory architecture 1304 through an Nth computing memory architecture 1306. The illustrated computing memory architectures of Figure 14 can be, for example, similar to the computing memory architecture 1200 of Figure 13.

[00137] Cascading the memory architectures in series can increase the number of processing elements according to an implementation. Further, intercommunication among the processing elements to select the processing element with information most closely matching a criteria can reduce the processing power needed by the host for searching for the best match. In addition, there can be more significant reduction of processing power when multiple computing memory architectures are cascaded together, as illustrated in Figure 14. EXAMPLE OPERATING ENVIRONMENTS

[00138] In order to provide a context for the various aspects of the disclosed subject matter, Figure 15, as well as the following discussion, is intended to provide a brief, general description of a suitable environment in which various aspects of the disclosed subject matter can be implemented or processed. While the subject matter has been described above in the general context of semiconductor architectures and process methodologies for fabricating and operating such architectures, those skilled in the art will recognize that the subject disclosure also can be implemented in combination with other architectures or process methodologies. Moreover, those skilled in the art will appreciate that the disclosed processes can be practiced with a processing system or a computer processor, either alone or in conjunction with a host computer, which can include single-processor or multiprocessor computer systems, mini- computing devices, mainframe computers, as well as personal computers, hand-held computing devices (e.g. , PDA, phone, watch), microprocessor-based or programmable consumer or industrial electronics, and the like. The illustrated aspects can also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. However, some, if not all aspects of the claimed innovation can be practiced on stand-alone electronic devices, such as a memory card, Flash memory module, removable memory (e.g. , CF card, USB memory stick, SD card, microSD card), or the like. In a distributed computing environment, program modules can be located in both local and remote memory storage modules or devices.

[00139] Figure 15 illustrates a block diagram of an example operating and control environment 1500 for a memory array 1502 of a multi-bank memory cell array according to aspects of the subject disclosure. In at least one aspect of the subject disclosure, memory array 1502 can comprise memory selected from a variety of memory cell technologies. In at least one embodiment, memory array 1502 can comprise a two-terminal memory technology, arranged in a compact two or three dimensional architecture. Suitable two-terminal memory technologies can include resistive- switching memory, conductive-bridging memory, phase- change memory, organic memory, magneto-resistive memory, or the like, or a suitable combination of the foregoing. In yet another embodiment, memory array 1502 can be configured to operate according to a read operation as provided herein.

[00140] A column controller 1504 and sense amps 1506 can be formed adjacent to memory array 1502. Moreover, column controller 1504 can be configured to activate (or identify for activation) a subset of bitlines of memory array 1502. Column controller 1504 can utilize a control signal provided by a reference and control signal generator(s) 1508 to activate, as well as operate upon, respective ones of the subset of bitlines, applying suitable program, erase or read voltages to those bitlines. Non-activated bitlines can be kept at an inhibit voltage (also applied by reference and control signal generator(s) 1508), to mitigate or avoid bit-disturb effects on these non-activated bitlines.

[00141] In addition, operating and control environment 1500 can comprise a row controller 1510. Row controller 1510 can be formed adjacent to and electrically connected with wordlines of memory array 1502. Further, utilizing control signals of reference and control signal generator(s) 1508, row controller 1510 can select particular rows of memory cells with a suitable selection voltage. Moreover, row controller 1510 can facilitate program, erase or read operations by applying suitable voltages at selected wordlines.

[00142] Sense amps 1506 can read data from, or write data to the activated memory cells of memory array 1502, which are selected by the column controller 1504 and the row controller 1510. Data read out from memory array 1502 can be provided to an input and input/output buffer 1512. Likewise, data to be written to memory array 1502 can be received from the input and input/output buffer 1512 and written to the activated memory cells of memory array 1502.

[00143] A clock source(s) 1514 can provide respective clock pulses to facilitate timing for read, write, and program operations of row controller 1510 and column controller 1504. Clock source(s) 1514 can further facilitate selection of wordlines or bitlines in response to external or internal commands received by operating and control environment 1500. Input and input/output buffer 1512 can comprise a command and address input, as well as a bidirectional data input and output. Instructions are provided over the command and address input, and the data to be written to memory array 1502 as well as data read from memory array 1502 is conveyed on the bidirectional data input and output, facilitating connection to an external host apparatus, such as a computer or other processing device (not depicted, but see e.g. , computer 3602 of Figure 36, below).

[00144] Input and input/output buffer 1512 can be configured to receive write data, receive an erase instruction, receive a status or maintenance instruction, output readout data, output status information, and receive address data and command data, as well as address data for respective instructions. Address data can be transferred to row controller 1510 and column controller 1504 by an address register 1516. In addition, input data is transmitted to memory array 1502 via signal input lines between sense amps 1506 and input and input/output buffer 1512, and output data is received from memory array 1502 via signal output lines from sense amps 1506 to input and input/output buffer 1512. Input data can be received from the host apparatus, and output data can be delivered to the host apparatus via the I/O bus.

[00145] Commands received from the host apparatus can be provided to a command interface 1518. Command interface 1518 can be configured to receive external control signals from the host apparatus, and determine whether data input to the input and input/output buffer 1512 is write data, a command, or an address. Input commands can be transferred to a state machine 1520.

[00146] State machine 1520 can be configured to manage programming and reprogramming of memory array 1502 (as well as other memory banks of the multi-bank memory array). Instructions provided to state machine 1520 are implemented according to control logic configurations, enabling state machine 1520 to manage read, write, erase, data input, data output, and other functionality associated with memory array 1502. In some aspects, state machine 1520 can send and receive acknowledgments and negative acknowledgments regarding successful receipt or execution of various commands. In further embodiments, state machine 1520 can decode and implement status-related commands, decode and implement configuration commands, and so on.

[00147] To implement read, write, erase, input, output, etc., functionality, state machine 1520 can control clock source(s) 1514 or reference and control signal generator(s) 1508. Control of clock source(s) 1514 can cause output pulses configured to facilitate row controller 1510 and column controller 1504 implementing the particular functionality.

Output pulses can be transferred to selected bitlines by column controller 1504, for instance, or wordlines by row controller 1510, for instance.

EXAMPLE METHOD FOR A COMPUTING MEMORY ARCHITECTURE

[00148] In view of the exemplary diagrams described above, process methods that can be implemented in accordance with the disclosed subject matter will be better appreciated with reference to flow charts. While for purposes of simplicity of explanation, the methods are shown and described as a series of blocks, it is to be understood and appreciated that the claimed subject matter is not limited by the order of the blocks, as some blocks can occur in different orders and/or concurrently with other blocks from what is depicted and described herein. Moreover, not all illustrated blocks can be required to implement the methods described herein. Additionally, it should be further appreciated that the methods disclosed throughout this specification are capable of being stored on an article of manufacture to facilitate transporting and transferring such methodologies to an electronic device. The term article of manufacture, as used, is intended to encompass a computer program accessible from any computer-readable device, device in conjunction with a carrier, or storage medium.

[00149] Figure 16 illustrates a flowchart of an example method 1600 for operation of a non- volatile memory architecture in accordance with one or more embodiments provided herein. The method 1600 starts, at 1602, with receipt, at programmable processing elements of a non- volatile memory, stored data from a resistive random access memory array or external data from an external device via a data interface. The resistive random access memory array can comprise multiple sets of bitlines and multiple wordlines. Further, the stored data can be received over respective sets of bitlines.

[00150] In some implementations, receiving the stored data from the resistive random access memory array can comprise receiving the stored data from correction code decoders. The correction code decoders can be associated with the programmable processing elements that can identify and correct an error bit in the stored data. Additionally or alternatively, receiving the stored data from the resistive random access memory array can comprise receiving a subset of the stored data based on an identification of the subset of the data by a wordline start pointer and a wordline stop pointer associated with the resistive random access memory array.

[00151] According to some implementations, the programmable processing elements are located between the data interface and the resistive random access memory array, and are physically connected with the multiple sets of bitlines of the resistive random access memory array. In accordance with some implementations, a first processing element of the programmable processing elements can be associated with a first set of the bitlines and a second processing element of the programmable processing elements can be associated with a second set of the bitlines. Further to this implementation, a first quantity of bitlines in the first set of the bitlines can be the same as a second quantity of the bitlines in the second set of the bitlines. Alternatively, a first quantity of bitlines in the first set of the bitlines can be different than a second quantity of the bitlines in the second set of the bitlines.

[00152] At 1604, the method can include generating, by the programmable processing elements, processed data based on an execution of a logical or mathematical algorithm on the external data or the stored data. The programmable processing elements can perform the execution in parallel, or substantially in parallel (e.g., a first programmable processing element can perform its respective execution at about the same time as a second

programmable processing element performs its respective execution). According to an implementation, generating the processed data can comprise independently executing, by the programmable processing elements, the logical or mathematical algorithm on the external data or the stored data.

[00153] In an embodiment, method 1600 can comprise receiving the stored data from the resistive random access memory array comprises receiving the stored data from read sense amps connected to the multiple sets of bitlines, wherein the read sense amps acquire the stored data from memory cells of the resistive random access memory array.

[00154] In further embodiments, method 1600 can comprise the programmable processing elements being located between the data interface and the resistive random access memory array, and being physically connected with the multiple sets of bitlines of the resistive random access memory array.

[00155] In an embodiment, method 1600 can comprise receiving the stored data from the resistive random access memory array, which comprises receiving the stored data from correction code decoders, wherein the correction code decoders are associated with the programmable processing elements and identify and correct an error bit in the stored data.

[00156] In further embodiments, method 1600 can comprise wherein the receiving the stored data from the resistive random access memory array comprises receiving a subset of the stored data based on an identification of the subset of the data by a wordline start pointer and a wordline stop pointer associated with the resistive random access memory array.

[00157] In another embodiment, method 1600 can comprise wherein the generating the processed data comprises independently executing, by the programmable processing elements, the logical or mathematical algorithm on the external data or the stored data.

EXAMPLE MATRIX MULTIPLICATION EMBODIMENTS

[00158] Referring now to Figure 17, illustrated is a schematic diagram of an example circuit 1700 that can be utilized for matrix multiplication (e.g. , dot product multiplication) according to an embodiment of the subject disclosure. Matrix multiplication (or a matrix product) is an operation that produces a product data matrix from two data matrices. A dot product (also called a scalar product) is an operation that takes two equal-length sequences of numbers and returns a single number. Electronic circuits that implement matrix multiplication operations can be implemented in part with non- volatile resistive memory circuits as will be discussed herein. Various embodiments of disclosed resistive memory circuits provide dot product accelerators that have low power consumption, high processing speed, small chip density, and low fabrication cost.

[00159] For purposes of discussion, a first data matrix is represented by a sequence of data bits programmed to a set of resistive memory circuits, and a second data matrix is represented by electrical inputs to the resistive memory circuits. In various embodiments, the electrical inputs can include, e.g. , a binary input represented by a logical high input signal or logical low input signal. The binary (electrical) input can be embodied by an electrical current, a voltage, an electric field, or other suitable electrical input, or suitable combinations of the foregoing, in various embodiments.

[00160] The example circuit 1700 can be utilized for a 1 x 3 matrix to 3 x 1 matrix multiplication with each data and filter having a binary value (0 or 1). Therefore, the first data matrix can include data bits programmed to a set of resistive memory circuits (also referred to as input data) (e.g. , a set of filters F) and the second data matrix can include

F 2

electrical inputs to the resistive memory circuits (also referred to as activation data bits) [D Q D J D 2 ] (e.g., a set of data).

[00161] The example circuit 1700 can include a bit line 1702 and multiple wordlines, illustrated as a first wordline 1704, a second wordline 1706, and a third wordline 1708. At the intersections of the bit line and the multiple wordlines are respective resistive memory circuits, represented by the dashed circles. The resistive memory circuits can be programmed to store a first matrix of data bits, also referred to as a data filter(s) F. These resistive memory circuits can be reprogrammed to store different matrixes of data bits, by applying suitable program (or erase) signals at the respective intersections. Further details related to the components resistive memory circuits (also referred to herein as filters, or filter circuits) will be provided below.

[00162] As mentioned, the filter circuits can be populated (or programmed) with respective input data bits of the first input matrix. For example, a first filter circuit at the intersection of the bit line 1702 and the first wordline 1704 can be programmed with a first input data Fo of the first data matrix. In the binary context, Fo can thus be programmed to a 0 or a 1 , though non-binary systems can be implemented within the scope of the present disclosure as well. A second filter circuit at the intersection of the bit line 1702 and the second wordline 1706 can be programmed with a second input data Fi of the first data matrix. Further, a third filter circuit at the intersection of the bit line 1702 and the third wordline 1708 can be programmed with a third input data F2 of the first data matrix. As a particular example, the data matrix: 1 0 1 can be programmed to the filters of Figure 17 by

programming Fo to 1 , Fi to 0 and F2 to 1. Since the input data Fo, Fi , and F2 are programmed into the filter, the values of the filters (kernels) do not change (e.g., remain static) until a subsequent programming operation is performed to re -program the filters.

[00163] Input voltage or current at the wordlines can include respective activation bit values of the second data matrix. Thus, the first wordline 1704 can receive a first activation data Do of the second data matrix. The second wordline 1706 can receive a second activation data Di of the second data matrix. Further, the third wordline 1708 can receive a third activation data D2 of the second data matrix. As another particular example, to input a second data matrix: 0 0 1 , a high signal is provided for the first activation data on Do, a low signal is provided for the second activation data on Di, and a low signal is provided for the third activation data on D2.

[00164] A l x 3 to 3 x l matrix multiplication can be applied to the example circuit

1700 according to the following equation,

Equation 1.

[00165] For purposes of describing the various aspects, a resistive memory circuit programmed to a value of " 1 " indicates a non-volatile resistive memory cell in a low resistance state (LRS), and a resistive memory circuit programmed to a value of "0" indicates a non-volatile resistive memory cell in a high resistance state (HRS). A read voltage VREAD is applied to bit line 1702 in conjunction with generating a matrix multiplication output for the 1 x 3 matrix multiplication implemented by Figure 17. Respective resistive memory circuits at each of the filters Fo, Fi, F2 can be configured to provide a low resistance path to ground, generating a unit electrical current in response to VREAD on bit line 1702, if programmed to an input value of "1" and in response to an activation value of "1." Filters F0, FI , F2 result in a high resistance path to ground if programmed to an input value of "0" or in response to an activation value of "0," generating no significant electrical current on bit line 1702.

[00166] As a particular example, if a value of an input data is "0" or a value of an activation data is "0," on a particular wordline, contribution of current on bit line 1702 provided by that particular wordline is "0." As another example, if the value of activation data Do is "0" and the value of input data Fo is " 1 ," the contribution of current value on bit line 1702 associated with first wordline 1704 is "0." As an additional example, if the value of activation data Do is " 1 " and the value of input data Fo is "0," the contribution of current on bit line 1702 associated with wordline 1704 is likewise "0." In a further example, if the value of activation data Do is " 1 " and the value of input data Fo is " 1 ," then a contribution of current on bit line 1702 associated with wordline 1704 is " 1 unit," and similarly for wordlines 1706 and 1708. Where multiple wordlines 1704, 1706, 1708 have input data bits programmed to "1" and receive activation values of "1", multiple (additive) instances of the unit electrical current will be measured on bit line 1702. Thus, by applying Equation 1 , and measuring current on bit line 1702, a dot product output of the 1 x 3 matrix with a 3 x 1 can be acquired. It is noted that "0" current is current that does not significantly contribute current to the bit line and, as such, does not affect the additive current.

[00167] Figure 18 illustrates a schematic diagram of an example circuit 1800 representing a 3 x 1 matrix with 3 x 3 matrix multiplication according to an embodiment of the subject disclosure. The example circuit 1800 includes three bit lines, illustrated as a first bit line 1802, a second bit line 1804, and a third bit line 1806. Also included in the example circuit 1800 are three wordlines, illustrated as a first wordline 1808, a second wordline 1810, and a third wordline 1812.

[00168] For the 3 x 1 to 3 x 3 matrix multiplication, a first input data matrix can include input data bits F 1 F 4 F 7 , and a second data matrix can include activation data bits | ^ D Q D j D 2 J . In this case, the matrix multiplication can be expressed as:

Equation 2 [00169] Similar to Figure 17, the filters F can be programmed with respective input data of the first data matrix. For example, a first filter circuit at the intersection of the first bit line 1802 and the first wordline 1808 can be programmed with a first input data Fo of the first data matrix. A second filter circuit at the intersection of the first bit line 1802 and the second wordline 1810 can be programmed with a second input data Fi of the first data matrix. A third filter circuit at the intersection of the first bit line 1802 and the third wordline 1812 can be programmed with a third input data F2 of the first data matrix.

[00170] In a similar manner, a fourth filter circuit at the intersection of the second bit line 1804 and the first wordline 1808 can be programmed with a fourth input data F3 of the first data matrix. A fifth filter circuit at the intersection of the second bit line 1804 and the second wordline 1810 can be programmed with a fifth input data F 4 of the first data matrix. A sixth filter circuit at the intersection of the second bit line 1804 and the third wordline 1812 can be programmed with a sixth input data F5 of the first data matrix.

[00171] Further, a seventh filter circuit at the intersection of the third bit line 1806 and the first wordline 1808 can be programmed with a seventh input data bit F 6 of the first data matrix. An eighth filter circuit at the intersection n of the third bit line 1806 and the second wordline 1810 can be programmed with an eighth input data bit F7 of the first data matrix. A ninth filter circuit at the intersection of the third bit line 1806 and the third wordline 1812 can be programmed with a ninth input data bit Fs of the first data matrix.

[00172] Since the input data bits Fo ,Fi, F 2 , F3, F 4 , F5, F 6 , F 7 , and Fs are programmed into non- volatile resistive memory cells of the filters (e.g. , see resistive memory 1816, or Figure 19B, discussed below), the values of F (kernels) do not change (e.g. , remain static) until a subsequent programming operation is performed (e.g. , a new input data matrix is programmed into the filters). Accordingly, the filter F can be programmed and data D can be changed and results can be obtained based on the value of the filter F and the value of the data D.

[00173] As mentioned, the intersection of the wordlines and bit lines can include respective non-volatile resistive memory cells, which can be connected within the memory array in different manners. For example, the circled area at the intersection of the third bit line 1806 and the third wordline 1812 is illustrated in an exploded view of a filter circuit 1814. As illustrated, the resistive memory 1816 can be connected to a transistor 1818. In this example implementation, the activation value D enters a gate 1820 of the transistor 1818. Thus, if the ninth input data Fs is " 1 " (e.g. , resistive memory 1816 is in a low resistance state) and the third activation D2 1S " 1 ," (transistor 1818 is activated), filter Fs provides a low resistance path to ground, and draws a unit electrical current in response to VREAD on third bit line 1806. If the ninth input data Fs is "0" (e.g. , resistive memory 1816 is in a high resistance state), although the gate 1820 is high and therefore transistor 1818 is activated, the current through the resistive memory 1816 will be negligible (e.g. , there will be little, if any current flowing through the third bit line 1806). For current to be contributing (e.g. , sinking) on a bit line, both the respective input data bits and the respective activation data bits should have values of " 1. " Thus, if all the activation data bits on the wordlines have a value of " 1 " and all the input data programmed on a word line have a value of " 1 ," there will be three unit electrical currents contributing to a current measured on the third bit line 1806. Therefore, the sum of the bit line is a combination of three current paths flowing through the bit line (Equation 1).

[00174] Figure 19A illustrates an alternative implementation of a filter circuit 1900 comprising a resistive memory according to an embodiment of the subject disclosure. In this embodiment, the filter circuit 1900 includes a resistive memory 1902 that is implemented as a single resistor that has a first end connected to the wordline D 1904 and a second end connected to the bit line 1906. The resistive memory implementation of Figure 19A has a small size in terms of physical area used, since only a single two-terminal resistive memory cell is included in the circuit. However, the example embodiment of Figure 19A can have a large amount of current leakage, and thus variability in current on bit line 1906, since all the resistors (where multiple filter circuits 1900 are deployed on a bit line 1906) are always selected and all the resistors contribute (sink) current even when the value of "D" (the wordline) is " 1. " The value of the resistor and its distribution should be selected to correct detection of the sum on a bit line.

[00175] Figure 19B illustrates another example alternative embodiment of a filter circuit 1908 comprising a resistive memory 1910 according to an embodiment of the subject disclosure. The filter circuit 1908 includes the resistive memory 1910, a first NMOS transistor X 1912, an inverter 1914, a second NMOS transistor 1916, and a PMOS transistor 1918. The first NMOS transistor X 1912 is either "ON" or "OFF" with no resistor in the path. With VBIAS low, PMOS transistor 1918 is activated and provides Vcc to the common node 1920 shared by inverter 1914, PMOS transistor 1918 and second NMOS transistor 1916. If second NMOS transistor 1916 is deactivated (e.g. , D has a low input) or if resistive memory 1910 stores a "0" (e.g. , has a high resistance state), common node 1920 is effectively isolated from ground and Vcc appears at an input of inverter 1914, which outputs a low signal (e.g. , "0") to a gate of first NMOS transistor 1912. In such condition, first NMOS transistor 1912 is deactivated and does not provide a low resistance path to ground, thereby drawing no significant current on bit line 1906. Conversely, if both D is high (activating second NMOS transistor 1916) and resistive memory 1910 stores a "1" (has a low resistance state), common node 1920 is connected to ground, and thus inverter 1914 outputs a high signal (e.g. , "1") to the gate of first NMOS transistor 1912. In this state, first NMOS transistor 1912 is activated providing a low resistance path to ground, and a current will be drawn on bit line 1906 in response to VREAD.

[00176] In an alternate implementation, the inverter 1914 can be removed and, thus, the circuit will sink current when dot product is "0." First NMOS 1912 can have very high uniformity in both the low resistance state and high resistance state, substantially reducing variability of unit electrical current on bit line 1906, enabling accurate as well as larger numbers of filter circuits 1908 on a single bit line 1906 without losing the ability to differentiate among proper dot product output values. Filter circuit 1908 takes up more area on a chip given the larger number of components (e.g. , transistors), compared with other filter circuits described herein.

[00177] As compared to the filter circuit 1900 of Figure 19A and filter circuit 1908 of

Figure 19B, the filter circuit 1814 of Figure 18 is in the middle in terms of size (e.g. , one two- terminal non-volatile resistive memory cell, and one transistor). Further, the filter circuit 1814 of Figure 18 is in the middle in terms of current variability since the transistor is off when D is "0. " When D is " 1 ," then variability among resistive memory cells on a single bit line 1906 can affect the variability of current measured on the bit line 1906, which in turn can limit a number of filter circuits 1814 per bit line 1906.

[00178] Illustrated in Figures 19C-19H are a voltage divider 1922 that comprises two resistive switching memory elements, namely, a first or top resistive switching memory element and a second or bottom resistive switching memory element. Also included is a common node 1924 between the two resistive switching memory elements. A bit line is illustrated at 1926, and a transistor connected to each bit line 1926 (e.g., see transistor x 1912 of Figure 19B) can be sized based on a multiplication ratio needed for the given bit line 1926 (e.g., matching a position of the bit line 1926 in a matrix multiplication array).

[00179] In the implementation of Figure 19C, the common node 1924 serves as an output to a transistor element 1926. Further to this implementation, the first resistive switching memory element is F, and the second resistive switching memory element is F bar. Thus, two states are represented. A first state is a condition represented by F having a high resistance and F bar having a low resistance. In the first state, Vcc is applied and there is voltage (or negligible voltage) at the common node 1924. Therefore, voltage does not appear at the gate of the transistor element 1926. A second state is a condition represented by F having a low resistance and F bar having a high resistance. In the second state, Vcc is applied and voltage will appear at the common node 1924. Thus, voltage appears at the gate of the transistor element 1926. As illustrated, D is connected to the source of the transistor element 1926 for the implementation of the first circuit (" 1 ").

[00180] In the circuit of Figure 19D, the top or first resistive switching memory element is F bar and the bottom or second resistive switching memory element is F. Similar to the first circuit, when the first resistive switching memory element (e.g., F bar) has high resistance and the second first resistive switching memory element (e.g., F) has low resistance, there is no (or minimal) voltage at the common node 1924. However, when the first resistive switching memory element has low resistance and the second first resistive switching memory element has high resistance, there is voltage applied at the common node 1924. In the embodiment of the second circuit, the common node 1924 is a source input of the transistor element 1926 and D controls the gate of the transistor element 1926.

[00181] The circuit of Figure 19E comprises the voltage divider 1922 and a common node 1924, which represents the output of the voltage divider 1922. Also included in this embodiment is a latch 1928 and a latch enable transistor 1930. The output value of the voltage divider 1922 is loaded to the latch 1928. Then, the latch enable transistor 1930 is deactivated (e.g., turned off) so that Vcc can be turned off. In this manner, the voltage divider 1922 does not require continuous power due to the operation of the latch 1928 and the latch enable transistor 1930. Thereafter, the third circuit operates the same as the second circuit. Thus, the difference between the second circuit and the third circuit is the third circuit traps the output value of the voltage divider 1922 so that the Vcc can be turned off at the voltage divider 1922.

[00182] For Figures 19F, 19G and 19H, resistance values for transistors xl , x2 and x4 are selected to achieve desired current outputs on Do, Di and D2. As one example, resistance of x4 transistor R x4 can be four times the resistance of xl transistor R x i, whereas resistance of x2 transistor R X 2 can be twice R x i . However this example is in no way limiting and other relative strengths of transistors xl , x2 and x4 can be provided depending on design choice. The circuit of Figure 19F is a multi-bit version that operates similar to the single bit version of the circuit of Figure 19C. The circuit of Figure 19G is a multi-bit version that operates similar to the single bit version of the circuit of Figure 19D. Further, the circuit of Figure 19H is a multi-bit version that operates similar to the single bit version of the circuit of Figure 19E.

[00183] Also illustrated are respective program/erase inputs 1932. In an example, for programming, a program input can be provided to the common node 1924 of the voltage divider 1922. According to some implementations, ground or Vcc could be changed to a suitable program or erase voltage in conjunction with the program input as needed to program or erase the first resistive memory or the second resistive memory.

[00184] Figure 20 illustrates an example, non-limiting circuit 2000 for implementation of a 1x3 to 3x1 matrix multiplication according to an embodiment of the subject disclosure. In this implementation, each filter F is four bits (and four filter circuits) and each data D is one bit. Current amplifier circuits 2010 are provided to model higher order bit numbers (in a binary system for this example, where current amplification is 2 n and n is the bit order (0 th order bit, 1 st order bit, 2 nd order bit, 3 rd order bit)). Circuit 2000 can be modified, as would be understood in the art, to model different sized matrixes as well as different numbers of bits. Thus, the following matrix multiplier applies.

[ D o D i D 2 ] X

Equation 3.

[00185] In the preceding figures, the data D was a single bit and the filter F was a single bit. In the implementation of Figure 20, the data D is one bit, but the filter F is four bits. Thus, F Q = F , F , F , F , where 0.3, 0.2, 0.1 , and 0.0 represent the third order, second order, first order, and zero order bits of F0, respectively. In a similar manner,

F = F F F F and F = F F F F

1 1.3 ' 1.2' 1.1 ' 1.0 2 2.3 ' 2.2 ' 2.1 ' 2.0 "

[00186] Illustrated are four bit lines, namely, a first bit line 2002, a second bit line

2004, a third bit line 2006, and a fourth bit line 2008. The first bit line 2002 can include the least significant bit (LSB) or Bit 0 (e.g. , F Q , F , and F ). The second bit line 2004 can include the second LSB or Bit 1 (e.g. , F , F , and F 2 ; ). The third bit line 2004 can include the second most significant bit (MSB) or Bit 2 (e.g. , F Q 2 , F , and F ). Further, the fourth bit line 2008 can include the MSB or Bit 3 ( F Q 3 , F ; 3 , and F 2 3 ).

[00187] In response to activation bit values Do, Di, and D2 being input on wordline

1820, current drawn on the first bit line 2002 is provided to a summing circuit 2012 to obtain the LSB value (e.g. , the multiplier is 1). Note that the output of circuit 2000 in Figure 20 is the output of summing circuit 2012. Current on the second bit line 2004 in response to input of the activation bit values is provided to a x2 current multiplication circuit (e.g. , a x2 current mirror, or the like) to emulate a relative value of the second LSB. The x2 multiplication circuit therefore multiplies the current on bit line 2004 by a factor of two, to obtain the second LSB value. The second LSB value is also provided to summing circuit 2012. Similarly, current on the third bit line 2006 is provided to a x4 current multiplication circuit, the output of which is received at summing circuit 2012 (the second MSB value), and current on the fourth bit line 2008 is input to a x8 current multiplication circuit (emulating a 3 rd order binary bit), which outputs the MSB to summing circuit 2012. An exploded view of an example current mirror X8 is illustrated at 2010, although other suitable current multiplication circuits can be utilized as alternatives. Further, another manner of deriving the bit order multiplier can be utilized instead of a current multiplier, according to some implementations (e.g. , 2 D bit lines and filter circuits per bit order, that are pre-summed before being received at summing circuit 2012, as one example).

[00188] The sum of the LSB, second LSB (the output of the x2 current multiplication circuit), the second MSB (the output of the x4 current multiplication circuit), and the MSB (the output of the x8 current multiplication circuit) are added by the summing circuit 2012 to derive the dot product result of the matrix of equation 19, supra. However, it is noted that other suitable adders (e.g. , digital adder, analog adder, etc. ) can be utilized and the adder at 2012 is illustrated for example purposes only.

[00189] Figure 21 illustrates another example, non-limiting circuit 2100 for implementation of a matrix multiplication according to an embodiment of the subject disclosure. In this implementation, the matrix multiplication is a 1 x 3 (D) to 3 x 1 (F) matrix multiplication, with F being 4 bits wide and D being M bits wide, which can include any number of bits (e.g. , 8 bits, 16 bits, 32 bits, and so on). [00190] As illustrated, the circuit 2100 can be similar to the circuit 2000 of Figure 20.

Respective input filter bits F can include four bits, denoted, for example, as

F2 = F 2.3 ' F 2.2' F 2. i ' F 2.o - In a similar manner, F, = F, 3 , F, 2 , F, A , F, 0 and F Q = F Q 3 , F Q 2 , F Q A , F Q 0 . The inp rut data bits can be denoted as D n 0 = D„ O.„M- 1 l,' D„ O.M„-„2' K , ' D„ 0.„1 ' D n 0.„0 . Thus,' the following ° matrix multiplier applies:

Equation 4.

[00191] In the example illustrated in Figure 21 , data D comprises 8 bits (e.g. , M equals

8 in this example). During implementation, at each clock cycle, the D bits are received at each bit line. Thus, during a first clock cycle (clock 1), filter circuits on bit lines 2002, 2004, 2006, and 2008 receive the Dx.o bits concurrently. The respective bit line current outputs from the filter circuits are multiplied (x8, x4, x2, xl , respectively) to emulate the respective bit orders and are then summed at a summing circuit 2102. The output of the summing circuit 2102 is converted to digital form at an analog to digital converter (ADC) 2104, and stored in MAC 2106 during the first clock cycle. Thus, the entire 4-bit filter circuit for the Dx.o bits is activated concurrently, producing a dot product output for the first D bit (Dx.o) for all 4 F bits on the first clock cycle.

[00192] During a second clock cycle (Clock 2), the Dx.i bits are input to all bit lines and all bit lines output their current to the multipliers and are multiplied (x8, x4, x2, xl , respectively) to emulate their respective bit orders. These values are then summed at the summing circuit 2102 and converted to digital form at the ADC 2104. This is, again, performed concurrently in order to generate a second dot product output for the second D bit (again for all 4 F bits) on the second clock cycle. The MAC 2106 can multiply the output of the ADC 2104 by two (x2) and can add the result to the previously stored value.

[00193] This process is repeated on subsequent clock cycles up to M clock cycles for the M-lth D bit. An accumulator MAC 2106 (e.g., through a multiply accumulate (MAC) operation) multiples the result of the 4 F bit calculation by (2 ** Clock_Cycle - 1) and adds it to the previously stored value in the MAC 2106 at the end of each clock cycle. Thus, at the end of M clock cycles the MAC 2106 has added up the entire result of the M bit x 4 bit dot product. It is noted that the accumulator 2106 is set to zero prior to implementation of the multiplication operation.

[00194] Figure 22 illustrates another example, non-limiting example of another circuit

2200 that can be utilized for matrix multiplication according to an embodiment of the subject disclosure. The matrix multiplication is a 1x3 to 3x1 in this example and the filter F comprises four bits; the data D comprises three bits (e.g. , M = 3 if continuing the example provided in Figure 21 , supra). The example of Figure 22 illustrates the example matrix multiplication using separate hardware circuits for each of the D bits, instead of shifting data one bit at a time into a single such hardware circuit M times and multiplying and adding results with MAC 2106, as discussed with respect to the circuit 2100 of Figure 21.

[00195] As illustrated, the circuit 2200 comprises the circuit 2100 of Figure 21 duplicated three times (one time for each data D bit), illustrated as a first matrix

multiplication circuit 2202, a second matrix multiplication circuit 2204, and a third matrix multiplication circuit 2206. Thus, instead of inputting subsequent D-bits on different clock cycles into the same set of filter circuits, as discussed with respect to Figure 21, three sets of filter circuits (or, for example, M sets of filter circuits, where D comprises another number M) are utilized in accordance with the implementation of Figure 22. The operation of the first circuit 2202, the second circuit 2204, and the third circuit 2206 is similar to the circuit 500 of Figure 21. The following equation can be utilized with this implementation.

F 0.3 ' F 0.2 ' F 0.1 ' F 0.0

[ D o. 2 ' D o, ' D o.o D L2 , D L 1 , D L0 Ό 2 2 , Ό , Ό 2 ΰ ] x p p p p

1.3 ' 1.2 ' 1.1 ' 1.0

F 2.3 ' F 2.2' F 2.1 ' F 2.0

Equation 5.

[00196] Emulation of higher order F bits is achieved by the x2, x4, x8 multipliers described above with respect to circuit 2100, supra. Likewise, emulation of bit order for the D bits is achieved by multiplying output of first circuit 2202 xl (the LSB for the D bits), multiplying output of second circuit 2204 x 2 (the second LSB for the D bits), and multiplying output of third circuit 2206 x 4 (the MSB for the D bits). Stated differently, an output of the first circuit 2202 can be applied at a summing circuit 2208 without a multiplier to obtain the LSB value (e.g., the multiplier is 1) for the D bits. The LSB value is provided to a summing circuit 2208. A second output of the second circuit 2204 can be provided to an x2 current multiplication circuit to obtain the second LSB value for the D bits. The second LSB value is provided to the summing circuit 2208. Further, a third output of the third circuit 2206 can be provided to an x4 current multiplication circuit, to obtain the MSB value for the D bits. The MSB value is also provided to the summing circuit 2208. To reiterate, the multipliers (e.g. , xl, x2, x4) can be determined based on the respective bit orders of the D bits associated with respective matrix multiplication circuits 2202, 2204, 2206. First circuit 2202 has is associated with zero order D bits, the second filter or second circuit 2204 is associated with first order D bits, and the third filter or third circuit 2206 is associated with second order D bits. As indicated, the operations can be performed in analog and then can be converted to digital by an ADC 2210.

[00197] Figure 23 illustrates another example, non-limiting circuit for matrix multiplication according to an embodiment of the subject disclosure. In this implementation, the activation data D comprise three bits and the input data F comprise four bits. The schematic 2300 on the left side of Figure 23 depicts a similar layout for bit lines and the orientation of filter circuits to the preceding figures (e.g. , Figure 22, supra). In contrast, schematic 2300 provides separate input wordlines for each of the D bits, and different filter circuits 2304 to receive multiple wordline inputs concurrently and emulate higher order D bits. The filter circuits 2304 are illustrated in more detail with the cutout of filter circuit 2302. It is noted that the circuit 2302 is an extension of circuit 1908 in Figure 19B.

[00198] The filter circuit 2302 on the right side illustrates an exploded view of the circuits 2304 depicted in the dashed ovals of schematic layout 2300. As illustrated by the filter circuit 2302, three wordlines Di.o, Di.i, and Di. 2 provide input to the filter circuit 2302. For other embodiments, filter circuit 2302 can be modified to accommodate larger numbers of D bits and larger numbers of wordlines. Further, the filter circuit 2302 can be programmed into a single resistive switching memory device 2312 that represents the value of an associated one of the F bits (e.g. , F bit Fi.o in the case of the filter circuit 2302). In a similar manner, another iteration of filter circuit 2302 (with appropriate values of respective F bits programmed to the resistive switching memory devices) is provided at cross sections of each bit line and wordlines for the Di. x , and likewise at cross sections of each bit line and wordlines for the Do. x and D2 as illustrated in schematic layout 2300

[00199] Continuing with reference to the filter circuit 2302, the value of the resistive switching memory device in combination with the values of D 1.0, D 1.1, and D1.2, are configured to turn the transistors 2306, 2308, 2310 "on" or "off." Note that transistors 2306, 2308 and 2310 have labels xl, x2, x4, respectively, that connote their relative conductances when activated, and accordingly the relative current drawn from the bit line 2314 when active. More explicitly, transistor 2310 can be selected to have approximately 4x the conductance of transistor 2306 when active, and transistor 2308 can be selected to have approximately 2x the conductance of transistor 2306 when active, for this example. This relative current multiplication effect can emulate higher orders of the D bits (e.g. , zero order D bit receiving xl relative current multiplication, first order D bit receiving 2x relative current multiplication, and so on). The operation at each transistor 2306, 2308, 2310 is similar to the operation of circuit 308 of Figure 3B, wherein each wordline Di.o, Di.i, and Di. 2 is input to a respective circuit, and a given transistor (e.g. , transistor 2306) is deactivated unless both resistive switching memory device 2312 is programmed to a low resistance state and its associated D bit wordline (e.g. , Di.o) is a "1", or high value. When resistive switching memory device 2312 is erased to the high resistance state, circuit 2302 will contribute no substantial current to bit line 2314.

[00200] To illustrate this operation, if the resistive switching memory device 2312 stores a "0" (e.g. , is in a high resistance state), V cc appears at inputs of the respective inverters, which output respective low signals (e.g. , "0" to respective gates of the NMOS transistors. In such conditions the NMOS transistors are deactivated and do not provide low resistance paths to ground, thereby drawing no significant current on the bit line 2314.

[00201] Conversely, if the resistive switching memory 2306 stores a " 1" (e.g. , is in a low resistance state) the respective D bit inputs will determine whether Vcc at any given gate of transistors 2306, 2308, 2310 is pulled to ground. If D bit Di.o has an input data bit of " 1" for instance, Vcc at the gate of transistor 2306 is grounded, and a low signal is input to the inverter at the gate of transistor 2306. Such inverter outputs a high signal (e.g. , " 1 ") to the gate of the NMOS transistor 2306. In this state, the NMOS transistor is activated, providing a low resistance path to ground, and a corresponding current will be drawn on the bit line. This operation is similar for transistors 2308 and 2310 and their respective D bit inputs Du and Di.2- Wordlines that have an activation data bit of "0" will not contribute to the current drawn on the bit line.

[00202] Figure 24 illustrates an example, non- limiting circuit 2400 for a dot product accelerator (DPA) for convolution arithmetic according to an embodiment of the subject disclosure. In this implementation, there is a 3x3 data matrix (Do, Di, . . . Ds) and a 3x3 kernel (Fo, Fi, . . . F 8 ). Further, the data and the kernel are single bits (e.g. , 1 bit-Data, 1 bit- Kernel). The following equation can be utilized:

D o D 2 F o F i p 2

D 3 D 4 Θ F 3

D 6 D 7 F 6 F

Equation 6.

[00203] In this implementation, the kernel is superimposed over the data as illustrated in the circuit 2400. Thus, the filter is placed on top of the data and the results of the data bits and the filter bits are input into a summing circuit to obtain the result. According to some implementations, the convolution does not need to be a 3x3 matrix; instead any number can be utilized (e.g. , a 5 x 5 matrix, a 7 x 7 matrix, and so on).

[00204] In further detail, all D values can be input concurrently and acted upon by the respective F filter circuits to determine the contribution of current on bit lines by the circuits 2402 at cross sections of bit lines and wordlines. Each circuit 2402 contributes current to the bit line if Dx is " 1 " and its corresponding resistive switching memory device stores a " 1 " (e.g., it is in a low resistance state). Thus, the currents from the circuit 2402 will add up on the bit line concurrently and the sum can be measured at a single time.

[00205] Figure 25 illustrates an example, alternative embodiment of a convolution accelerator 2500 according to an embodiment of the subject disclosure. Instead of multiplying current to emulate higher order F bits, there are provided duplicate sets of wordlines on a given bit line, each wordline having a filter circuit that can draw current on the bit line. Figure 25 facilitates current multiplication that emulates higher bit orders with additional hardware rather than with current multiplication circuits (e.g. , a current mirror). A least significant bit line 2502 has a single set of wordlines and filter circuits, a second least significant bit line has two sets of wordlines and filter circuits, the third least significant bit line has three sets of wordlines and filter circuits, and so on, up to a most significant bit line having Y sets of wordlines and filter circuits, Y being the number of bit lines (and the number of filter bits, or F bits) in convolution accelerator 2500.

[00206] For an nxn matrix having a filter with Y bits, the matrix multiplication is modeled by the number of bit lines (columns) equal to the filter size, or Y, and the number of rows N equal to n 2 *2 Y 1 . It is noted that the grey circles represent circuits that have no impact on the matrix multiplication, for instance because no filter circuit exists at those bit line-wordline intersections, or because resistive switching memory devices of those filter circuits are all erased (e.g. , in high resistance state) and do not measurably contribute to current on the bit lines 2502, 2504, 2506, 2508.

[00207] The array dimension (number of wordlines and bit lines) of convolution accelerator 2500 is determined by the matrix size n and number of bits in the filter Y. The number of columns is equal to the bit filter size Y and the number of rows is given by the equation n 2 * 2 Y 1 . In an example, a matrix of 5 x 5 and a 6 bit filter can result in an array size of 800 x 6, which is derived from the following:

n 2 * 2 YA

= 5 2 * 2^

= 5 2 * 2 5

= 25 * 32

= 800

[00208] In another example, for a matrix 3 x 3 and an 8-bit filter, the array size is 1152 x 8, which is derived as follows:

n2 * 2 Y-l

= 3 2 * 2^

= 3 2 * 2 7

= 9 * 128

= 1152

[00209] The data bits are shifted serially, with one iteration per bit of data. Further, the MAC can multiply the data by 2 ** (Iteration- 1) and the data can be accumulated. In an alternative implementation, additional arrays of the convolution accelerator each receiving one iteration of the D bits, and the results can be summed.

[00210] For the implementation of Figure 25, the following equation represents the matrix multiplication implemented by convolution accelerator 2500.

DO Dl Dn FO Fl Fn

L L L L

L L L L

L DN - 2 DN - 1 L FN - 2 FN - 1 Equation 7.

[00211] Figure 26 illustrates another example, non-limiting matrix convolution 2600 according to an embodiment of the subject disclosure. This implementation utilizes a multi- bit filter and a multi-bit kernel. The input data bits F comprise K number of bits and the activation data bits comprise L number of bits, where K and L are integers. According to some implementations, K and L are the same value. However, according to some

implementations, K and L are different values.

[00212] As illustrated, there are K bit lines, a first bit line 2602, a second bit line 2604, up through a K-2 bit line 2606, a K- l bit line 2608, and a K th bit line 2610. The first bit line 2602 can include the LSB or zero order bit: Bit 0. The second bit line 2604 can include the second LSB or first order bit: Bit 1. The K-2 bit line 2606 can include the third most significant bit (third MSB) or Bit K-2. The fourth bit line 2608 can include the second MSB or K02. Further, the fifth bit line 2610 can include the MSB or Bit K- l.

[00213] In response to activation bit values being input on the wordlines, current drawn on the first bit line 2602 is provided to a summing circuit 2612 to obtain the LSB value (e.g. , the multiplier is 1) for the K-bit filter. Current on the second bit line 2604 in response to input of the activation bit values is provided to a x2 current multiplication circuit (e.g. , a x2 current mirror, or the like) to emulate a relative value of the second LSB. The x2

multiplication circuit, therefore, multiplies the current on bit line 2604 by a factor of two to obtain the second LSB. The third MSB is also provided to the summing circuit 2612. In a similar manner, current on the K-2 bit line 2606 is provided to a x2' current multiplication circuit, the output of which is received at the summing circuit (e.g. , the third MSB value), where "i" is a placeholder integer and its value is determined based on the bit line number associated with the bit line of that multiplier circuit (e.g. , k minus 3 for the third MSB). For the K-2 bit line 2606, the current multiplication circuit will be a x2 K"3 multiplier. Similarly, current on the second MSB bit line 2608 is provided to a x2' current multiplication circuit, the output of which is received at the summing circuit (e.g. , the second MSB value), where in this case the current multiplication circuit will be a x2 K"2 multiplier. Lastly, current on the K bit line 2610 is provided to an x2 K 1 current multiplication circuit, the output of which is received at the summing circuit 2612 (e.g. , the MSB value).

[00214] The filter circuit 2614 on the right (which is an exploded view of the filter circuit Fi.o) includes transistors xl, x2, through x2 L 1 , having relative conductance values (when activated) that provide current multiplication for higher orders of the D bits. For the matrix convolution 2600 of Figure 26, the following equation represents the matrix multiplication implemented by the illustrated circuit.

F 0 F l K - F M-1

D M L L D 2M 1 F M L L F 2M- ,1

Θ

^(N-l)xM "^NxM-l F (N-l)xM ' F NxM-1

Equation

[00215] Figure 27 illustrates an example, non- limiting chart 2700 of values and distribution for on/off resistance values of multiple resistive switching memory devices, according to an embodiment of the subject disclosure. Resistance is illustrated on the horizontal axis 2702 and count (number of such memory devices) is illustrated on the vertical axis 2704. On the horizontal axis 2702, the low (on) resistance state is on the left and the high (off) resistance state is on the right. Each state comprises a range of resistance values for which a memory device could be categorized in that state.

[00216] The resistance of the cell and its distribution at each state can be a factor in circuit design of 1814 in Figure 18 or circuit 1900 in Figure 19A. In read intensive applications where writes/ReRAM updates do not occur often, ReRAM write algorithms (both program and erase) can be optimized to maximize the "On" and "Off" resistances as well as to narrow the resistance distributions of the "On" and "Off" states, respectively. Further, wide distribution, particularly at "Off" state, can affect the computation adversely.

[00217] In a sample of resistive switching memory circuits (e.g. , 1,000 ReRAMs) illustrated in Figure 27, the actual resistance value of the low resistance state has a first distribution for the sample resistive switching memory circuits and for the high resistance state there is a second distribution of the actual resistance for those sample resistive switching memory circuits. Ideally, those distributions should be as tight as possible.

[00218] As discussed herein, the data bits programmed in the filters might not be changed often and the programming is not performed during the computational phase.

Different write algorithms can be applied to maximize the on/off state distributions of the ReRAMs and the ratio, as discussed herein. [00219] Figure 28 illustrates an example, non-limiting chart 2800 of a multi-level resistance ReRAM according to an embodiment of the subject disclosure. Multi-bit ReRAMs can be utilized to model multiple filter bits in a matrix multiplication, which can effectively reduce the number of columns (bit lines) in an array and circuitry associated with the bit lines.

[00220] The more bits that a single multi-level ReRAM can store, the more filter bits can be modeled with a single filter circuit. Figure 29 illustrates an example circuit 2900 for a 1x3 to 3x1 matrix multiplication utilizing a 4- state (2-bit) multi-level resistance (MLR) ReRAM according to an embodiment of the subject disclosure. For this matrix

multiplication, each filter F is 4 bits and the activation data bits D are 1 bit. The 2 bit MLC provides a resistive switching memory circuit that has four states. Each bit line having 2-bit MLC filter circuits can represent two of the 4-bit F bits. Thus, two such bit lines (as illustrated, with the second bit line receiving x4 multiplication) can model the 4-bit filter. Thus, the following equation can represent the matrix multiplication implemented by circuit 2900:

D 0 D ! D 2 Θ aIld F 2 = ( F 2.3 ' F 2.2 ) ' ( F 2.1 ' F 2.o )

Equation 9.

[00221] The resistance states of the MLCs can be selected to have proportional resistance values to match values of filters Fx. In the example given by circuit 2900, MLC filter circuits can have ReRAMs with a resistance state 0 representing lowest resistance state, resistance state 3 representing highest resistance state, and resistance states 1 and 2 representing resistance states in-between states 0 and 3, with state 1 having a lower resistance than state 2. As described, MLC resistive memory devices can be utilized to reduce the number of bit lines, to shrink the array size for matrix multiplication and to and conserve power.

[00222] Figure 30 illustrates an example, non-limiting implementation of a signed matrix multiplication 3000, incorporating positive and negative bit values as an example, according to an embodiment of the subject disclosure. In one embodiment, each F bit is represented by two bit lines, namely, a positive bit line and a negative bit line for that F-bit, each having their own filter circuits. An F-bit having a positive value is programmed into a filter circuit on the positive bit line (the negative bit line filter circuit remaining erased) and an F-bit having a negative value is programmed into the negative bit line (the positive bit line filter circuit remaining erased). As an explicit non-limiting example, for an F-bit value of "0," nothing is programmed to the positive bit line filter circuit or the negative bit line filter circuit (e.g. , both filter circuits are erased). If the F-bit value is " 1," the positive bit line is programmed. If the result is "-1," the negative bit line is programmed. When activation data is received at the filter circuit, the positive bit line includes the sum of all the positive currents and the negative bit line includes the sum of the negative currents. In this case, the negative bit line is subtracted from the positive bit line to derive the result for a given F-bit. For this implementation, the following equations are implemented in the example circuit of matrix multiplication 3000:

Equation 10.

-1

1 1 1 0 IX - 1 + 1X0 + 1X1 = 0

1

Equation 11.

The activation bits D are [1 1 1], whereas the input filter bits are [-1 0 1]. Both the D bits and F bits are single bit numbers (zero order bits only). Note that the bottom right picture illustrates the positive bit line and negative bit line programming to achieve the [-1 0 1] input filter bit matrix.

[00223] Figure 31 illustrates an example, non- limiting circuit 3100 for sensing and subtracting current on multiple bit lines according to an embodiment of the subject disclosure. Current from the bit lines are subtracted (e.g. , the current from the negative bit line is subtracted from the current from the positive bit line). The result can be positive or negative.

[00224] According to some implementations, I can be added to obtain a positive result. Circuitry for generating I can be designed to make the result of I + I - I positive. Therefore, any following circuitry only has to deal with current in one direction. So

[00225] Figure 32 illustrates an example, non-limiting alternative circuit 3200 for signed matrix multiplication according to an embodiment of the subject disclosure. An exploded view of Fi is illustrated by positive filter circuit 3202 and negative filter circuit 3204. The positive filter(s) will contribute (e.g. , sink) current (adding to the current on the bit line in a forward direction); the negative filter(s) will source current in a reverse direction (subtracting from the current on the bit line in the forward direction). The result is accumulation of positive and negative current in the bit line. By convention, if current is being contributed on the bit line, the result is positive. However, if current is being sourced on the bit line, the result is negative.

[00226] Figure 33 illustrates an example, non- limiting circuit 3300 of an alternate embodiment for signed matrix multiplication according to an embodiment of the subject disclosure. An exploded view of filter circuit Fi is illustrated by positive filter circuit 3302 and negative filter circuit 3304. The positive filter circuit 3302 will contribute current; the negative filter circuit 3304 will source the current. The result is accumulation of current in the bit line.

[00227] Figure 34 illustrates an example, non-limiting circuit 3400 for a 1x2 signed matrix dot-product according to an embodiment of the subject disclosure. For this implementation, the filter F is 4 bits and the data D is 3 bits.

[00228] When using signed arithmetic, the MSB includes the sign. For example, 0xA4 (-92) is equal to 0x80 (-128) + 0x24 (36). The current contribution for the negative elementary multiplications is used as a contributor to the current. The MSB of the filter multiplied with the MSB of the data is used as a source since it is the product of two negative numbers. Accordingly the following relationships apply:

[00229] (Not MSB) x (Not MSB) -> source

[00230] MSB x MSB -> source

[00231] (Not MSB) x MSB -> sink

[00232] MSB x (Not MSB) -> sink

[00233] The diagrams included herein are described with respect to interaction between several memory cells, memory cell components, or memory architectures. It should be appreciated that such diagrams can include those memory cells, components and architectures specified therein, some of the specified memory cells / components / architectures, or suitable alternative or additional memory cells / components / architectures. Sub-components can also be implemented as electrically connected to other sub-components rather than included within a parent architecture. Moreover, some of the disclosed embodiments can be implemented as part(s) of other disclosed embodiments where suitable. Additionally, it is noted that one or more disclosed processes can be combined into a single process providing aggregate functionality. For instance, a program process can comprise an erase process, or vice versa, to facilitate programming and erasing a semiconductor cell by way of a single process. In addition, it should be appreciated that respective rows of multiple cell memory architectures can be erased in groups (e.g. , multiple rows erased concurrently) or individually. Moreover, it should be appreciated that multiple memory cells on a particular row can be read or programmed in groups (e.g. , multiple memory cells read/programmed concurrently) or individually. Components of the disclosed architectures can also interact with one or more other components not specifically described herein but known by those of skill in the art or made evident by way of the context provided herein.

EXAMPLE METHOD FOR RESISTIVE RANDOM ACCESS MEMORY MATRIX MULTIPLICATION STRUCTURES

[00234] Figure 35 illustrates a flowchart of an example method 3500 for operation of resistive random access memory matrix multiplication structures according to an embodiment of the subject disclosure. At 3502 a set of resistive switching memory circuits can be programmed with respective bit values corresponding to a first data matrix. The set of resistive switching memory circuits can be located at respective intersections between bit lines and a set of wordlines. For example, the resistive switching memory circuits can be located on the bit lines. At 3504, a set of electrical currents can be input onto wordlines of the set of wordlines. The set of electrical currents can represent a second data matrix.

[00235] At 3506, a generation of an output on the bit lines can be facilitated based on the inputting of the second data matrix and the programming the resistive switching memory cells to the first data matrix. In an implementation, facilitating the generation of the output can comprise facilitating the output of a dot product multiplication result of the first data matrix and the second data matrix. According to another implementation, facilitating the generation of the output can comprise obtaining different dot product results for the first data matrix based on second data matrices applied to the set of wordlines.

[00236] In an example, the set of resistive switching memory circuits can comprise resistive switching memory cells. The first data matrix programmed to the set of resistive switching memory circuits can be a two-dimensional matrix. In an example, the first data matrix can be a data filter.

[00237] According to some implementations, facilitating the generation of the output can comprise facilitating a first programming operation that sets resistive switching memory circuits to the first data matrix. Further, to this implementation, a first set of multiple dot product results of the first data matrix can be obtained based on the first programming operation.

[00238] In some implementations, the method 3500 can comprise inputting a sequence of second data matrices on the set of wordlines. Further, to these implementations, the method 3500 can comprise obtaining a second set of multiple dot product results of second data matrices based on the inputting the sequence of second data matrices.

[00239] In an embodiment, method 3500 can comprise facilitating the output of a dot product multiplication result of the first data matrix and the second data matrix.

[00240] In another embodiment, method 3500 can comprise wherein the facilitating the generation of the output comprises obtaining different dot product results for the first data matrix based on second data matrices applied to the set of wordlines.

[00241] In other embodiments, method 3500 can comprise resistive switching memory circuits being on the bit lines. In an additional embodiment, method 3500 can comprise the first data matrix programmed to the set of resistive switching

memory circuits being a two-dimensional matrix. In still other embodiments, method

3500 can comprise the first data matrix being a data filter.

[00242] In yet other embodiments, method 3500 can comprise wherein the

facilitating the generation of the output comprises: facilitating a first programming operation that sets resistive switching memory circuits to the first data matrix; and obtaining a first set of multiple dot product results of the first data matrix based on the first programming operation.

[00243] In an additional embodiment, method 3500 can comprise inputting a sequence of second data matrices on the set of wordlines; and obtaining a second set of multiple dot product results of second data matrices based on the inputting the

sequence of second data matrices. EXAMPLE COMPUTING ENVIRONMENT OPERABLE WITH ONE OR MORE DISCLOSED EMBODIMENTS

[00244] With reference to Figure 36, a suitable environment 3600 for implementing various aspects of the claimed subject matter includes a computer 3602. The computer 3602 includes a processing unit 3604, a system memory 3606, a codec 3607, and a system bus 3610. The system bus 3610 couples system components including, but not limited to, the system memory 3606 to the processing unit 3604. The processing unit 3604 can be any of various available processors. Dual microprocessors and other multiprocessor architectures also can be employed as the processing unit 3604.

[00245] The system bus 3610 can be any of several types of bus structure(s) including the memory bus or memory controller, a peripheral bus or external bus, and/or a local bus using any variety of available bus architectures including, but not limited to, Industrial Standard Architecture (ISA), Micro-Channel Architecture (MSA), Extended ISA (EISA), Intelligent Drive Electronics (IDE), VESA Local Bus (VLB), Peripheral Component Interconnect (PCI), Card Bus, Universal Serial Bus (USB), Advanced Graphics Port (AGP), Personal Computer Memory Card International Association bus (PCMCIA), Firewire (IEEE 1394), and Small Computer Systems Interface (SCSI).

[00246] The system memory 3606 includes volatile memory 3612 and non-volatile memory 3614. The basic input/output system (BIOS), containing the basic routines to transfer information between elements within the computer 3602, such as during start-up, is stored in non-volatile memory 3614. In addition, according to present innovations, codec 3607 can include at least one of an encoder or decoder, wherein the at least one of an encoder or decoder can consist of hardware, software, or a combination of hardware and software. Although, codec 3607 is depicted as a separate component, codec 3607 can be contained within non- volatile memory 3614. By way of illustration, and not limitation, non- volatile memory 3614 can include read only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), or flash memory. Volatile memory 3612 includes random access memory (RAM), which acts as external cache memory. According to present aspects, the volatile memory can store the write operation retry logic (not shown in Figure 36) and the like. By way of illustration and not limitation, RAM is available in many forms such as static RAM (SRAM), dynamic RAM (DRAM), synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), and enhanced SDRAM (ESDRAM). [00247] Computer 3602 can also include removable/non-removable, volatile/nonvolatile computer storage medium. Figure 36 illustrates, for example, disk storage device 3616. Disk storage device 3616 includes, but is not limited to, devices like a magnetic disk drive, solid state disk (SSD) floppy disk drive, tape drive, Jaz drive, Zip drive, LS- 100 drive, flash memory card, or memory stick. In addition, disk storage device 3616 can include storage medium separately or in combination with other storage medium including, but not limited to, an optical disk drive such as a compact disk ROM device (CD-ROM), CD recordable drive (CD-R Drive), CD rewritable drive (CD-RW Drive) or a digital versatile disk ROM drive (DVD-ROM). To facilitate connection of the disk storage device 3616 to the system bus 3610, a removable or non-removable interface is typically used, such as interface 3618. It is appreciated that the disk storage device 3616 can store information related to a user. Such information might be stored at or provided to a server or to an application running on a user device. In one embodiment, the user can be notified (e.g. , by way of output device(s) 3636) of the types of information that are stored to disk storage device 3616 and/or transmitted to the server or application. The user can be provided the opportunity to opt-in or opt-out of having such information collected and/or shared with the server or application (e.g. , by way of input from input device(s) 3622).

[00248] It is to be appreciated that Figure 36 describes software that acts as an intermediary between users and the basic computer resources described in the suitable operating environment 3600. Such software includes an operating system 3624. Operating system 3624, which can be stored on disk storage device 3616, acts to control and allocate resources of the computer system 3602. Applications 3626 take advantage of the

management of resources by operating system 3624 through program modules 3628, and program data 3630, such as the boot/shutdown transaction table and the like, stored either in system memory 3606 or on disk storage device 3616. It is to be appreciated that the claimed subject matter can be implemented with various operating systems or combinations of operating systems.

[00249] A user enters commands or information into the computer 3602 through input device(s) 3622. Input devices 3622 include, but are not limited to, a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, joystick, game pad, satellite dish, scanner, TV tuner card, digital camera, digital video camera, web camera, and the like. These and other input devices connect to the processing unit 3604 through the system bus 3610 via interface port(s) 3632. Interface port(s) 3632 include, for example, a serial port, a parallel port, a game port, and a universal serial bus (USB). Output device(s) 3620 use some of the same type of ports as input device(s) 3622. Thus, for example, a USB port can be used to provide input to computer 3602 and to output information from computer 3602 to an output device 3620. Output adapter 3608 is provided to illustrate that there are some output devices 3620 such as monitors, speakers, and printers, among other output devices 3620, which require special adapters. The output adapters 3608 include, by way of illustration and not limitation, video and sound cards that provide a means of connection between the output device 3620 and the system bus 3610. It should be noted that other devices and/or systems of devices provide both input and output capabilities such as remote computer(s) 3634.

[00250] Computer 3602 can operate in a networked environment using logical connections to one or more remote computers, such as remote computer(s) 3634. The remote computer(s) 3634 can be a personal computer, a server, a router, a network PC, a workstation, a microprocessor based appliance, a peer device, a smart phone, a tablet, or other network node, and typically includes many of the elements described relative to computer 3602. For purposes of brevity, only a memory storage device 3636 is illustrated with remote

computer(s) 3634. Remote computer(s) 3634 is logically connected to computer 3602 through a network interface 3638 and then connected via communication connection(s) 3640. Network interface 3638 encompasses wire and/or wireless communication networks such as local-area networks (LAN) and wide-area networks (WAN) and cellular networks. LAN technologies include Fiber Distributed Data Interface (FDDI), Copper Distributed Data Interface (CDDI), Ethernet, Token Ring and the like. WAN technologies include, but are not limited to, point-to-point links, circuit switching networks like Integrated Services Digital Networks (ISDN) and variations thereon, packet switching networks, and Digital Subscriber Lines (DSL).

[00251] Communication connection(s) 3640 refers to the hardware/software employed to connect the network interface 3638 to the system bus 3610. While communication connection 3640 is shown for illustrative clarity inside computer 3602, it can also be external to computer 3602. The hardware/software necessary for connection to the network interface 3638 includes, for exemplary purposes only, internal and external technologies such as, modems including regular telephone grade modems, cable modems and DSL modems, ISDN adapters, and wired and wireless Ethernet cards, hubs, and routers.

[00252] The illustrated aspects of the disclosure can also be practiced in distributed computing environments where certain tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules or stored information, instructions, or the like can be located in local or remote memory storage devices.

[00253] Moreover, it is to be appreciated that various components described herein can include electrical circuit(s) that can include components and circuitry elements of suitable value in order to implement the embodiments of the subject disclosure. Furthermore, it can be appreciated that many of the various components can be implemented on one or more IC chips. For example, in one embodiment, a set of components can be implemented in a single IC chip. In other embodiments, one or more of respective components are fabricated or implemented on separate IC chips.

[00254] As utilized herein, terms "component," "system," "architecture" and the like are intended to refer to a computer or electronic -related entity, either hardware, a combination of hardware and software, software (e.g. , in execution), or firmware. For example, a component can be one or more transistors, a memory cell, an arrangement of transistors or memory cells, a gate array, a programmable gate array, an application specific integrated circuit, a controller, a processor, a process running on the processor, an object, executable, program or application accessing or interfacing with semiconductor memory, a computer, or the like, or a suitable combination thereof. The component can include erasable

programming (e.g. , process instructions at least in part stored in erasable memory) or hard programming (e.g. , process instructions burned into non-erasable memory at manufacture).

[00255] By way of illustration, both a process executed from memory and the processor can be a component. As another example, an architecture can include an arrangement of electronic hardware (e.g. , parallel or serial transistors), processing instructions and a processor, which implement the processing instructions in a manner suitable to the arrangement of electronic hardware. In addition, an architecture can include a single component (e.g. , a transistor, a gate array, . . .) or an arrangement of components (e.g. , a series or parallel arrangement of transistors, a gate array connected with program circuitry, power leads, electrical ground, input signal lines and output signal lines, and so on). A system can include one or more components as well as one or more architectures. One example system can include a switching block architecture comprising crossed input/output lines and pass gate transistors, as well as power source(s), signal generator(s), communication bus(ses), controllers, I/O interface, address registers, and so on. It is to be appreciated that some overlap in definitions is anticipated, and an architecture or a system can be a stand-alone component, or a component of another architecture, system, etc.

[00256] In addition to the foregoing, the disclosed subject matter can be implemented as a method, apparatus, or article of manufacture using typical manufacturing, programming or engineering techniques to produce hardware, firmware, software, or any suitable combination thereof to control an electronic device to implement the disclosed subject matter. The terms "apparatus" and "article of manufacture" where used herein are intended to encompass an electronic device, a semiconductor device, a computer, or a computer program accessible from any computer-readable device, carrier, or media. Computer-readable media can include hardware media, or software media. In addition, the media can include non- transitory media, or transport media. In one example, non-transitory media can include computer readable hardware media. Specific examples of computer readable hardware media can include but are not limited to magnetic storage devices (e.g. , hard disk, floppy disk, magnetic strips...), optical disks (e.g. , compact disk (CD), digital versatile disk (DVD)...), smart cards, and flash memory devices (e.g. , card, stick, key drive...). Computer-readable transport media can include carrier waves, or the like. Of course, those skilled in the art will recognize many modifications can be made to this configuration without departing from the scope or spirit of the disclosed subject matter.

[00257] What has been described above includes examples of the subject innovation. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing the subject innovation, but one of ordinary skill in the art can recognize that many further combinations and permutations of the subject innovation are possible. Accordingly, the disclosed subject matter is intended to embrace all such alterations, modifications and variations that fall within the spirit and scope of the disclosure. Furthermore, to the extent that a term "includes", "including", "has" or "having" and variants thereof is used in either the detailed description or the claims, such term is intended to be inclusive in a manner similar to the term "comprising" as "comprising" is interpreted when employed as a transitional word in a claim.

[00258] Moreover, the word "exemplary" is used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as "exemplary" is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the word exemplary is intended to present concepts in a concrete fashion. As used in this application, the term "or" is intended to mean an inclusive "or" rather than an exclusive "or." That is, unless specified otherwise, or clear from context, "X employs A or B" is intended to mean any of the natural inclusive permutations. That is, if X employs A; X employs B ; or X employs both A and B, then "X employs A or B" is satisfied under any of the foregoing instances. In addition, the articles "a" and "an" as used in this application and the appended claims should generally be construed to mean "one or more" unless specified otherwise or clear from context to be directed to a singular form.

[00259] Additionally, some portions of the detailed description have been presented in terms of algorithms or process operations on data bits within electronic memory. These process descriptions or representations are mechanisms employed by those cognizant in the art to effectively convey the substance of their work to others equally skilled. A process is here, generally, conceived to be a self-consistent sequence of acts leading to a desired result. The acts are those requiring physical manipulations of physical quantities. Typically, though not necessarily, these quantities take the form of electrical and/or magnetic signals capable of being stored, transferred, combined, compared, and/or otherwise manipulated.

[00260] It has proven convenient, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like. It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise or apparent from the foregoing discussion, it is appreciated that throughout the disclosed subject matter, discussions utilizing terms such as processing, computing, replicating, mimicking, determining, or transmitting, and the like, refer to the action and processes of processing systems, and/or similar consumer or industrial electronic devices or machines, that manipulate or transform data or signals represented as physical (electrical or electronic) quantities within the circuits, registers or memories of the electronic device(s), into other data or signals similarly represented as physical quantities within the machine or computer system memories or registers or other such information storage, transmission and/or display devices.

[00261] In regard to the various functions performed by the above described components, architectures, circuits, processes and the like, the terms (including a reference to a "means") used to describe such components are intended to correspond, unless otherwise indicated, to any component which performs the specified function of the described component (e.g. , a functional equivalent), even though not structurally equivalent to the disclosed structure, which performs the function in the herein illustrated exemplary aspects of the embodiments. In addition, while a particular feature can have been disclosed with respect to only one of several implementations, such feature can be combined with one or more other features of the other implementations as can be desired and advantageous for any given or particular application. It will also be recognized that the embodiments include a system as well as a computer-readable medium having computer-executable instructions for performing the acts and/or events of the various processes.