Patent Description:
Integrated Circuits (ICs) are widespread in modern electronics and may be used to implement a wide range of processing and memory devices. In-memory computing technology is a developing area which aims to provide improvements in computational performance. Traditional systems tend to store data as electrical charges on a memory that is separate from the processor which performs tasks such as arithmetic and logic functions. With the increase in data required for certain applications, such as with neural network processing, data movement between the processor and memory may present one of the more critical performance and energy bottlenecks. In-memory computing can improve processing performance through the use of memory technologies that are also able to perform certain computational tasks such as the arithmetic and/or logical functions. The article "<NPL>) describes a low power <NUM>-bit R-2R ladder Digital to Analog converter. The R-2R network uses only two values (R and 2xR) and a switch designed using both NMOS and PMOS transistors.

According to an example embodiment, there is provided an apparatus that includes a resistive network with a plurality of basic computing elements coupled in series. Each basic computing element includes a first resistor having a first resistance value and a second resistor having a second resistance value. The first resistor couples an input voltage to an output voltage to be provided to a next basic computing element of the plurality of basic computing elements. The second resistor of the resistive network is coupled to an input of a memory switch that routes current received through the second resistor to either a summation bus or a subtraction bus. The apparatus also includes a signal processing unit coupled to the summation bus and the subtraction bus.

The first resistor and second resistor are configured as a current or voltage divider.

The first resistor and the second resistor include one or more high-resistance contacts formed by atomic layer deposition (ALD) of material sandwiched between conductive layers. In some examples, the high-resistance contacts have substantially a same resistance value, the second resistor comprises a single one of the high-resistance contacts, and the first resistor comprises two or more of the high-resistance contacts connected in parallel.

The second resistance value may be substantially twice that of the first resistance value.

The memory switch includes a first via switch coupled to the summation bus and a second via switch coupled to the subtraction bus.

The memory switch may be a first atom switch coupled to the summation bus and a second atom switch coupled to the subtraction bus.

According to another example embodiment, there may be provided a computing element that includes: a first resistor having a first resistance value and coupled in series between an input voltage and an output voltage; a second resistor having a second resistance value and coupled at an input of the first resistor to form a voltage or current divider; and a memory switch coupled at the output of the second resistor and configurable to route current received from the input through the second resistor to either a summation bus or a subtraction bus.

The memory switch is a first via switch coupled to the summation bus and a second via switch coupled to the subtraction bus.

The computing element may be used in an application that includes one or more of: a vector matrix multiplier application configured to beamform electromagnetic waves; a media processing application configured to compress media, wherein the media comprises one or more of video or audio; and a machine learning application.

Example embodiments will now be described, by way of non-limiting example, with reference to the accompanying drawings, in which.

Example embodiments relate to integrated circuits (ICs) and integrated circuit fabrication techniques applicable to In-Memory Computing (IMC), also sometimes referred to as Computing-in-Memory (CIM) or Processing-in-Memory (PIM). More specifically, the present disclosure describes a basic computing element (BCE) that includes a resistor network and a memory switch that provides a routing function as well as a memory function. In some example embodiments, several basic computing elements can be linked together to form a resistor ladder network. As such, each basic computing element includes a pair of resistors that implement a current division between adjacent basic computing elements of the resistor ladder network. Each basic computing element also includes a memory switch that determines whether current passing through the basic computing element from the resistor ladder network is provided to a summation or subtraction output. The combined output of a series of such basic computing elements is an analog voltage that corresponds with a digital numerical value. In this way, multiplication and other arithmetic functions may be performed in the analog domain.

The programming of each basic computing element is determined using binary control bits that determine the state of the memory switch. The memory switch is a non-volatile memory switch, meaning that the state of the switch persists after the input signals provided by the control bits are removed. Thus, in a ladder network with multiple such basic computing elements connected in series, the values of the binary control bits used to set the switch state determine the contribution of the current provided to summation or subtracting inputs of an analog signal processing unit. Therefore, what is described may be considered a mixed-signal architecture that acts as a programmable multiplier, the multiplier coefficient being the control bits, and which may also perform addition and subtraction through the analog component. Division may also be accomplished by use of the resistor network.

In example embodiments, the structure of each basic computing element is relatively simple and may be very area and cost efficient. Multiplication may be achieved using only the resistor means and addition and subtraction makes use of the analog component, such as an operational amplifier. Using a mixed-signal architecture offers further advantages in that, for addition and subtraction at least, there are no rail-to-rail switching gates. Further, many signals are ordinarily analog in many systems, e.g. camera sensor pixels, radio signals, speech/audio signals, etc., and signal processing may be done in such mixed-signal domains using one or more basic computing elements described herein.

Basic computing elements described herein may also be used for applications such as neural networks, matrix calculations, Digital Fourier Transform (DFT) Conversions, Fast Fourier Transform (FFT) Conversions, Discrete Cosine Transform (DCT) conversions and in any application where multiplication, accumulation and/or subtraction operations may be needed. The technology described herein developed for ultra-high density R-2R resistor ladder networks can be used also in DACs and successive approximation ratio (SAR) ADCs so that the area efficiency in such converters may be very high. Advantages of the example embodiments described herein may include improved memory speed, endurance, reliability, and write energy, even over certain emerging memory technologies.

The basic computing element described herein has a structure that is very area and cost efficient. It may provide <NUM>-<NUM> times higher density and much lower cost than current implementations due to, for example, the vertically-formed resistor network implementation that is used as multiplier. Example embodiments also use ultra-low power (<NUM>-<NUM> times improvement compared to current CMOS digital implementations) because the multiplier is only a resistor and summing/addition may be performed in the analog domain wherein there are no rail to rail switching gates. Very high implementation density allows parallel computation architectures that can provide high performance.

<FIG> is a block diagram of a basic computing element <NUM> in accordance with embodiments. The basic computing element <NUM> is an apparatus that includes several terminals, including a voltage input (IN) terminal <NUM>, a voltage output (OUT) terminal <NUM>, subtraction bus terminals <NUM>, summation bus terminals <NUM>, and control bit terminals <NUM>. The voltage input terminal <NUM> may be coupled to a voltage source, which maintains a fixed Direct Current (DC) voltage. In some cases, the voltage input terminal <NUM> may be coupled to the voltage output terminal of another basic computing element <NUM>. The basic computing element is configured so that the voltage level at the voltage output terminal <NUM> is a fraction of the voltage level at the voltage input terminal <NUM>. In some embodiments, the voltage level at the voltage output terminal <NUM> is half of the voltage level at the voltage input terminal <NUM>.

The basic computing element <NUM> also includes a memory switch (not shown) that routes current received at the voltage input terminal <NUM> to either the subtraction bus terminals <NUM> or the summation bus terminals <NUM>. The memory switch is a non-volatile memory element, and the state of the memory element is determined by the control bits received at the control bit terminals <NUM>. Although six control bit terminals <NUM> are shown, there may be any number of control bit terminals <NUM> depending on the type of memory switch employed. Various examples of different types of memory switches are described below in relation to <FIG>, <FIG>, <FIG>, and <FIG>.

The basic computing element <NUM> may be arranged with other basic computing elements <NUM> to from an integrated circuit capable of computational operations. A more detailed description of the basic computing element <NUM> is shown in <FIG> in relation to a resistor ladder network (also referred to herein as an R-2R network).

<FIG> is a resistance ladder network that includes a set of basic computing elements, in accordance with embodiments. The resistance ladder network <NUM> is an apparatus that includes a plurality of basic computing elements <NUM> connected in series. Although three basic computing elements are shown, the resistance ladder network <NUM> can include any suitable number of basic computing elements <NUM> depending on the desired number of voltage output levels to be represented.

As shown in <FIG>, the voltage output terminal <NUM> of each basic computing element <NUM> is coupled to the voltage input terminal <NUM> of the next basic computing element <NUM> in the series. The voltage input terminal <NUM> of the first basic computing element <NUM> in the series is coupled to a voltage source, Vin, and the voltage output terminal <NUM> of the last basic computing element <NUM> in the series is coupled to ground. Additionally, the subtraction bus terminals <NUM> are coupled to a subtraction bus <NUM>, and the summation bus terminals <NUM> are coupled to a summation bus <NUM>. The subtraction bus <NUM> and the summation bus <NUM> are coupled to a signal processing unit <NUM>, which includes an operation amplifier <NUM>. The summation bus <NUM> and the positive input of the operation amplifier <NUM> are both coupled to ground, and the subtraction bus <NUM> is coupled to the negative input of the operation amplifier <NUM>.

Each basic computing element <NUM> may include a first resistor (R1) <NUM> and a second resistor (R2) <NUM> arranged as a current divider such that current received at the voltage input terminal <NUM> is divided through the first resistor <NUM> and the second resistor <NUM>. The second resistor <NUM> may have a resistance that is an integer multiple of that of the first resistor <NUM>. In some embodiments, the second resistor <NUM> is approximately double the first resistor <NUM> so that the voltage level at the voltage output terminal <NUM> will be approximately half the voltage level at the voltage input terminal <NUM>. In this configuration, the first basic computing element <NUM> in the series will have two times the effect on the output of the ladder network <NUM> compared to the second basic computing element <NUM>, the second basic computing element <NUM> will have two times the effect on the output of the ladder network <NUM> compared to the third basic computing element <NUM>, and so on.

The basic computing element <NUM> also includes a memory switch <NUM>, which determines whether current passing through the second resistor <NUM> is routed to the summation bus <NUM> or the subtraction bus <NUM>. The state of the memory switch <NUM> may be set via the control bit terminals <NUM>. As stated above, the control bit terminals <NUM> can include any suitable number of control bits depending on the type of memory switch <NUM>. The control bits are shown in <FIG> as C<NUM> to CN-<NUM>, where CN-<NUM> can be considered the most significant bit of a binary number and C<NUM> can be considered the least significant bit of the binary number. In this way, the N-bit binary number represented by the control bits CN-<NUM> to C<NUM> can be converted to an analog voltage, Vout, at the output of the ladder network <NUM>. It may therefore be referred to also as an N-bit multiplying digital-to-analog converter (DAC). With the configuration described above, the output, Vout, will be determined according to the following formula: <MAT>.

The ladder network <NUM> shown in <FIG> can be connected in series or in parallel to other basic computing elements <NUM> to provide additional coefficients for use in computing, such as multiplication, division, addition, and subtraction and any further computational processes that make use of these basic computation types. In some embodiments, a matrix of basic computing elements <NUM> arranged as parallel ladder networks <NUM> can be used to implement a vector matrix multiplier application. The vector matrix multiplier application may have a variety of uses, including signal processing applications such as beamforming electromagnetic waves transmitted or received by an antenna array, for example.

In some example embodiments, the ladder network <NUM> may be used to implement a neural network for a machine learning application. For example, the neural network can include a grid of connected ladder networks <NUM>, such that each resistor ladder network <NUM> is programmed to represent a weight representing the strength of the connection between two nodes of the neural network. A network of such basic computing elements, configured as multiple ladder networks <NUM>, can be used to create neural networks that grow organically from learning by forming connections between neurons and tuning the strength of the connection while learning more.

The basic computing element <NUM> introduced herein may be for a wide variety of other computing applications, such as media processing applications configured to compressing or decompress media such as video and/or audio media. In media processing applications, the basic computing element <NUM> may be used to implement Digital Fourier Transform (DFT) Conversions, Fast Fourier Transform (FFT) Conversions, Discrete Cosine Transform (DCT) conversions, digital-to analog converters or successive approximation ratio (SAR) analog-to-digital converters. DCT is a basic function in image and video processing, and example embodiments therefore offer potential usage in real-time image processing systems, as well as in communications and speech processing systems.

<FIG> is an example of a basic computing element that uses a via switch, in accordance with embodiments. As shown in <FIG>, the memory switch <NUM> of the basic computing element <NUM> includes two via switches <NUM> and <NUM>, a first via switch <NUM> that couples the second resistor (R2) <NUM> to the summation bus <NUM>, and second via switch <NUM> that couples the second resistor (R2) <NUM> to the subtraction bus <NUM>. The via switches <NUM><NUM> are set or reset using the control terminals <NUM>, referred to in this embodiment as A, C, D, C', and D'. Control terminals C and D are used for controlling the first via switch <NUM> and control terminals C' and D' are used for controlling the second via switch <NUM>. The control lines associated with the control terminals C, D, C' and D' may be routed to several basic computing elements <NUM>, forming a cross-bar switch mechanism for a matrix of basic computing elements <NUM>. The control line associated with control terminal A may be dedicated to a specific one of the basic computing elements <NUM> and can be used to select the particular basic computing element <NUM> to be set or reset according to the C, D, C', and D' control lines.

To set or reset the basic computing element, one of the via switches <NUM> or <NUM> can be turned on (made conductive) to couple the second resistor <NUM> to either the summation bus <NUM> or the subtraction bus <NUM>. For example, to create a summation output, the first via switch <NUM> is turned on and the second via switch <NUM> is turned off. In some embodiments, both via switches <NUM> and <NUM> can be turned off at the same time so that current doesn't pass to either of the busses <NUM><NUM>. Once the via switch is set, the via switch maintains its state even after the signals provided through the control lines are discontinued.

<FIG> is a circuit diagram of an example via switch in accordance with embodiments. By comparison with <FIG>, the via switch <NUM> may be may represent the via switch <NUM> or <NUM>, depending on whether the via switch <NUM> is coupled to the summation bus <NUM> or the subtraction bus <NUM>. The example via switch of <FIG> includes two atom switches <NUM> and two varistors <NUM>. The atom switch <NUM> may be any suitable type of atom switch, such as a copper atom switch or others. A typical atom switch, includes two electrodes separated by a polymer electrolyte. Application of a voltage to the electrodes of a specific polarity causes a bridge of conductive metal ions to be formed, causing the atom switch to become conductive, i.e., turned on. Application of a voltage with the opposite polarity eliminates the bridge and causes the switch to be non-conductive, i.e., turned off.

The via switch <NUM> shown in <FIG> is a complimentary atom switch, meaning that is has two atom switches <NUM> are connected in series with opposite direction, i.e., opposite polarity. In <FIG>, the B terminal represents the summation bus terminal <NUM> or the subtraction bus terminal <NUM>, depending on which terminal the via switch is coupled to. To turn the via switch on, a positive voltage is applied to the A terminal and the B terminal while the C terminal and the D terminal are coupled to ground. To turn the via switch off, a positive voltage is applied to the C terminal and the D terminal while the A terminal and the B terminal are coupled to ground.

<FIG> is a cross-sectional view of part of an integrated circuit that includes a memory switch. The configuration shown in <FIG> includes metal layers <NUM> with conductive traces. The conductive trace <NUM> is coupled to the second resistor <NUM> (R2), the conductive trace <NUM> couples the second resistor <NUM> to the memory switch, which includes two via switches <NUM> and <NUM>. The via switches <NUM> and <NUM> are coupled to the summation bus <NUM> and the subtraction bus <NUM>, respectively. Depending on the particular type of via switch used, the configuration can also include one or more control terminals (not shown). However, in some implementations, the via switches <NUM><NUM> can be controlled through the conductive trace <NUM> and the summation or subtraction busses <NUM><NUM> with no additional control terminals.

From <FIG>, it will be seen that this configuration provides a very dense implementation, including a high resistance via contact stacked over and two via switches. No additional transistors or routing elements are required to implement both the routing function and the memory functions of the basic computing element. This provided not only a small volume but also low power consumption.

<FIG> is a cross sectional view of two layers of an IC implementing a resistor ladder <NUM>. With reference to <FIG>, the resistor ladder <NUM> may be used to form the first and second resistors <NUM> and <NUM> (R1 and R2) as well as the connections between the first resistors <NUM> (R1) of a series of basic computing elements <NUM>. The resistor ladder <NUM> includes a layer of high-resistance contacts <NUM> sandwiched between first conductive layer <NUM> and a second conductive layer <NUM>. The first conductive layer <NUM> and a second conductive layer <NUM> may be metal layers, for example. Each high-resistance contact <NUM> may be formed in a same processing step to have substantially the same resistance value.

As shown in <FIG>, two of the high-resistance contacts <NUM> are disposed in parallel to implement the first resistor <NUM> (R1) and a single one of the high-resistance contact <NUM> is used to implement the second resistor <NUM> (R2), which will exhibit two times the resistance as the first resistor <NUM>. With reference to <FIG>, the contacts indicated by reference numeral <NUM> can be conductively coupled to the conductive trace <NUM>, which couples the second resistor <NUM> to the via switches <NUM> or other type of memory switch. The conductive layers <NUM> and <NUM> provide the conductive path between the first resistors <NUM> connecting the voltage input terminal <NUM> to the voltage output terminal <NUM> of the next basic computing element <NUM> in the series.

The resistive contacts <NUM> may be high-resistance contacts. By "high-resistance" is meant that the resistive contacts have a resistance value that is higher, e.g. much higher, than the on-resistance of switching transistors. For example, in very low power applications, the resistance value may be in the order of Mega ohms, whereas in high speed applications, the resistance value may be in the order of tens of kilo ohms. Typical values may be substantially <NUM> Kilo ohms and above.

Each resistive contact <NUM> may be formed by atomic layer deposition (ALD) to provide the one or more high-resistance contacts between the metal layers. ALD is a thin-film deposition technique based on the use of a chemical vapour deposition. In basic terms, a film is grown on a substrate by exposing the substrate to so-called precursor gases in a sequential way that enables accurate control of the film growth and structure. Forming a resistive network using ALD enables at least part of a basic computing element to be formed in a very area and cost-efficient way, because the resistive contacts can be packed in a very dense way and the resistance values determined, for example, based on the cross-sectional area and height of the resistive contacts, assuming the resistors are grown in a vertical way between the metal layers in the manner of three-dimensional structures such as nanostructures. the resistive contacts may be of any suitable material, for example, ultra-thin Al<NUM>O<NUM>-y layers on TiO<NUM>-x grown using an ALD processes. The surface area of one resistive contact <NUM> may be only in the order of a hundred square nanometers or thereabouts.

The high-resistance contacts may have substantially the same resistance value, the first resistance element comprising two or more high-resistance contacts connected in parallel to provide the same resistance as one high-resistance contact forming the second resistor unit. By providing all contacts with the same resistance value makes fabrication straightforward, enabling good matching between different R and 2R resistor contacts to be achieved. However, other embodiments are also possible. For example, the length of the second resistor <NUM> may be twice that of the first resistor <NUM> so that the second resistor has twice the resistance value of the first resistor. Resistor length could be controlled with the number of deposition rounds, i.e. number of layers.

<FIG> is a cross-sectional view of a three-dimensional IC implementation <NUM> according to example embodiments. As shown in <FIG>, the IC implementation involves fabrication using multiple layers, including a plurality of metal layers routing <NUM>, at least one high-resistivity contact layer <NUM>. The one or more high-resistivity contact layers <NUM> may be provided by one or more vias. Such a layer or layers may be grown through ALD to achieve high uniformity and controllability. There may be provided more than one high-resistivity layer but usually this may be not needed because the area occupied by the resistors is smaller than the active devices in silicon. In fixed networks, several layers could be used to increase the area efficiency e.g. multiple fixed R-2R layers on top of one another. In fixed networks there is no switch and memory elements saving area and processing cost. Fixed network could be made also programmable with a mask, electron beam or laser. This kind of embodiment could be used for an example in neural network applications with transfer learning. In transfer learning most of the layer could be fixed and only last layers could be programmable for similar type of applications. Fixed value network would save power consumption (no leakage) and silicon cost (processing cost, silicon area).

The IC implementation also includes a least one layer of memory switches, such as via switches <NUM>, although other types of memory switches are also possible. This enables programming the coefficients of a set of basic computing elements (e.g., a ladder network) and their value retained when powered off. The IC implementation also includes a CMOS layer <NUM>, which can include digital memory, transistors such as Metal Oxide Semiconductor (MOS) transistors, Complementary Metal Oxide Semiconductor (CMOS) transistors, gates, switches, amplifiers, voltage sources, and others. The CMOS layer <NUM> includes the circuitry used for programming the via switches and receiving output signals from the configuration of basic computing elements <NUM>. The CMOS layer <NUM> can serve as an interface between the analog in-memory computing domain and a more traditional digital processing system. A neural network implementation requiring adaptiveness could utilize this kind of structure. One example could be a pre-trained natural language system, where the neural network is trained for a certain language, e.g. French, but the neural network could adapt to the speaker's speech whilst it is used. This could be used in applications to improve user recognition and even security, for example.

As explained above, the memory switches <NUM> (<FIG>) may be any suitable type of memory switch, including via switches as described above. Additional basic computing elements <NUM> with different types of memory switches <NUM> are described below.

<FIG> is a basic computing element with Field Effect Transistors (FETs). The basic computing element <NUM> of <FIG> includes the same features described above in relation to <FIG>, except that the memory switch <NUM> is implemented using non-volatile FETs. The FETs <NUM> in <FIG> may be any suitable FET that is able to maintain its state after it is set and the gate signal is subsequently discontinued. In other words, the FETs <NUM> are non-volatile and store the on/off state. Examples of such FETs include floating gate FETs and Ferro FETs.

A FET is a transistor that is turned on by applying a voltage to the gate, which creates a conductive path between the source and drain. In a floating gate transistor, the gate is electrically isolated and surrounded by highly resistive material. A number of secondary gates are deposited above the floating gate and capacitively connected to the floating gate. Due to the electrical isolation of the floating gate, the charge contained in the floating gate remains unchanged for long periods of time.

A Ferro FET (FeFET) is similar to a MOSFET, except that a layer of Iron (FE) oxide is deposited in the gate-stack. The iron oxide layer creates a capacitance that leads to a hysteresis effect, which causes the FeFET to maintain its state. A memory switch implemented using FeFETs can have fast access, low leakage, and high density.

<FIG> is a basic computing element with an atom switch. The basic computing element <NUM> of <FIG> includes the same features described above in relation to <FIG>, except that the memory switch <NUM> is implemented using a pair of atom switches. As described above, an atom switch is a type switch wherein application of a voltage to the electrodes of a specific polarity causes a bridge of conductive metal ions to be formed, causing the atom switch to become conductive, and application of a voltage with the opposite polarity eliminates the bridge and causes the switch to be non-conductive, i.e., turned off. In this implementation, the memory switch <NUM> includes two complimentary atom switches <NUM>. Each complimentary atom switch <NUM> includes back-to-back atom switches disposed in series and sharing a middle electrode. Each atom switch <NUM> is set or reset by applying a voltage to the middle electrode using a transistor such as a FET <NUM>.

In this example implementation, the B and D control lines select the atom switch to be programmed, and the C control line provides the driving voltage needed for programming. Each R2 leg will require separate access to control line A so that net A is not short circuited between the legs. To turn on a particular atom switch, the A and summation or subtraction bus may be held to ground while a positive voltage is applied to the C terminals. The B and D terminals then determine which FET is turned on and consequently which atom switch is turned on. To turn off a particular atom switch, a positive voltage may be applied to the A and summation or subtraction bus while the C terminal are held to ground. The B and D terminals then determine which FET is turned off and consequently which atom switch is turned off.

<FIG> is a circuit diagram of an integrated circuit with another type of basic computing element <NUM> in accordance with embodiments. In this example, the basic computing element <NUM> includes a single high resistivity resistor <NUM> and a memory switch <NUM>. The resistors <NUM> may be any of the high resistivity contacts described above and may be fabricated as described above. The memory switch <NUM> may be a via switch <NUM> (<FIG>), a non-volatile FET <NUM> (<FIG>), or an atom switch <NUM> (<FIG>), for example.

As shown in <FIG>, a plurality of basic computing elements <NUM> is coupled together in series to form a resistor string with high resistivity contacts. At the output of each resistor <NUM> is a tap point coupled to a memory switch <NUM>. The input voltage, VIN, can be divided by the resistor string and a suitable output voltage can be selected from one of the tap points by turning on the memory switch <NUM> to generate the desired output voltage, VOUT. This configuration can be used in resistor string DACs and may be suitable for slower speed, ultra-low power applications. The integrated circuit of <FIG> may have any suitable number of basic computing elements <NUM> depending on the desired number of voltage output levels to be represented.

<FIG> is a circuit diagram of another integrated circuit with another type of basic computing element <NUM> in accordance with embodiments. In this example, the basic computing element <NUM> includes a single high resistivity resistor <NUM> in parallel with a memory switch <NUM>. The resistors <NUM> may be any of the high resistivity contacts described above and may be fabricated as described above. The memory switch <NUM> may be a via switch <NUM> (<FIG>), a non-volatile FET <NUM> (<FIG>), or an atom switch <NUM> (<FIG>), for example.

As shown in <FIG>, a plurality of basic computing elements <NUM> is coupled together in series to form a resistor string with high resistivity contacts. Each resistor <NUM> of the resistor string has a parallel memory switch <NUM> that can shunt (i.e., short circuit) the resistor <NUM> so that the total resistance of the resistor string depends on the number of switches that are turned on (conductive). In the example shown in <FIG>, the resistor string is configured as one branch of a voltage divider circuit. With this configuration, the output voltage, VOUT, will be nearly equal to the input voltage, VIN, if all of the resistors are shunted (i.e., all of the memory switches are conductive), and the output voltage will be gradually reduced as more memory switches are switched off and the resistance of the resistor string increases. The integrated circuit of <FIG> may have any suitable number of basic computing elements <NUM> depending on the desired number of output levels to be represented.

<FIG> is a block diagram showing a medium <NUM> that contains logic for controlling an in-memory computing device. The medium <NUM> may be a computer-readable medium, including a non-transitory medium that stores code that can be accessed by a processor <NUM> over a computer bus <NUM>. For example, the computer-readable medium <NUM> can be volatile or non-volatile data storage device. The medium <NUM> can also be a logic unit, such as an Application Specific Integrated Circuit (ASIC), a Field Programmable Gate Array (FPGA), or an arrangement of logic gates implemented in one or more integrated circuits, for example.

The processor <NUM> is also connected to an in-memory computing device <NUM> that includes a plurality of basic computing elements. The basic computing elements may be any of the basic computing elements described herein, including basic computing elements <NUM>, the basic computing elements <NUM> shown in <FIG>, or the basic computing elements <NUM> shown in <FIG>. The basic computing elements may be configured as a neural network, digital to analog processor, analog to digital processor, and others. In some examples, the basic computing elements are arranged as one or more resistor ladders or one or more resistor strings as shown in <FIG> or <FIG>.

The medium <NUM> may include modules configured to perform at least some of the techniques described herein when executed by the processor <NUM>. For example, a BCE controller <NUM> can include instructions for programming the basic computing elements. Programming the basic computing elements <NUM> can include setting the non-volatile memory switches of several basic computing elements <NUM> to cause each basic computing element <NUM> to route current to a summation bus or a subtraction bus. The programming of the basic computing elements of a resistor network can convert a digital numerical value to a corresponding analog signal, which may represent a connection weight between nodes of a neural network, for example. Programming the basic computing elements <NUM> can include setting the memory switches of several basic computing elements <NUM> to cause a selected tap point to be activated to generate a desired output voltage. Programming the basic computing elements <NUM> can include setting the memory switches of several basic computing elements <NUM> to change the total resistance of the resistor string to produce a desired output voltage.

In some embodiments, the BCE controller <NUM> may be a module of computer code configured to direct the operations of the processor <NUM>. A computing system can be built using the basic computing elements described herein so that control of the computing happens with digital control but mathematical operations (multiplications, divisions, subtractions and additions) happen in analog domain using Ohm's and Kirchoff laws. This enables fast and easy control by writing the basic computing element memories and fast, low power and full analog precision calculations (not quantized to low number of bits) so this analog digital computer would enable easy to program, very high performance and very low power computing.

The block diagram of <FIG> is not intended to indicate that the medium <NUM> is to include all of the components shown in <FIG>. Further, the medium <NUM> may include any number of additional components not shown in <FIG>, depending on the details of the specific implementation.

Claim 1:
An apparatus comprising:
a resistive network comprising a plurality of basic computing elements (<NUM>) coupled in series, each basic computing element comprising a first resistor (<NUM>) having a first resistance value and a second resistor (<NUM>) having a second resistance value, wherein the first resistor couples an input voltage to an output voltage to be provided to a next basic computing element of the plurality of basic computing elements, wherein the first and second resistors are configured as a current or voltage divider, wherein the first resistor and the second resistor comprise one or more high-resistance contacts formed by atomic layer deposition (ALD) of material sandwiched between conductive layers, and wherein the second resistor of the resistive network is coupled to an input of a memory switch (<NUM>) that routes current received through the second resistor to either a summation bus or a subtraction bus, wherein the memory switch (<NUM>) comprises a first via switch (<NUM>) coupled to the summation bus and a second via switch (<NUM>) coupled to the subtraction bus; and
a signal processing unit (<NUM>) coupled to the summation bus and the subtraction bus.