This disclosure relates generally to semiconductor memory devices, and more specifically, to controlling power consumption in memory devices.
As microprocessors and microcontrollers expand their application spaces, the size of associated executable code and data has also grown. Larger code and data sizes force larger memory array sizes. The increased bitcount causes power consumption of these arrays to also increase. In addition, these more powerful microcontrollers and microprocessors are fabricated in more advanced complementary metal oxide semiconductor (CMOS) technology nodes with ever-decreasing size. With smaller geometry, there is a corresponding increase in static power consumption. This rise in power consumption is an issue, particularly for embedded microcontrollers and microcontrollers which are intended for Internet of Things (IoT) applications where portable devices typically run off of limited battery power.
The present disclosure is illustrated by way of example and is not limited by the accompanying figures, in which like references indicate similar elements. Elements in the figures are illustrated for simplicity and clarity and have not necessarily been drawn to scale.
Embodiments of devices and methods disclosed herein include a power-gated, sectored array architecture with combined software and hardware components to eliminate or minimize any performance penalty. A memory array is split into sub-arrays, each of which can be biased with power for Standby, Read, Program and Erase operations independently of the other sectors. In some instances, some operations, like ERASE, may still be carried out with different granularity, e.g. multiple sectors simultaneously, than the remaining operations. Logic circuitry and switches associated with the array control which sub-arrays are biased at any time. An optional optimizing compiler or post-compilation optimizer can be used to create data allowing the system to select which sectors of the memory array are biased based on the probability of being used for a particular task or section of code.
Each memory sub-array 104 includes row switch 124 and column switch 126 that is coupled to respective row power gating control circuitry 122 and column power gating control circuitry 120. When a particular sub-array 104 is to be biased with power, selected column switch(es) 126 will be placed in conductive mode to allow voltages from power domains such as supply voltage VDD, program voltage VPGM, erase voltage VERASE, read voltage VREAD to be applied to selected columns of array 102. Selected row switch(es) 124 will be placed in conductive mode to allow voltages such as supply voltage VSS, program voltage VPGM, erase voltage VERS, and read voltage VREAD to be applied to selected rows of array 102. A particular sub-array 104 will be fully powered when both the respective appropriate row switches 124 and appropriate column switches 126 are in conductive mode. Otherwise, a sub-array 104 without both row switch 124 and column switch 126 in conductive mode will be in a power-down mode. Note that switches 124 and 126 can be implemented as either one switch per line, or one or more switches that control connection of the signal lines to a particular sub-array 104.
Each memory sub-array 204 includes a column switch 224 coupled to column power gating control circuitry 220 by a respective conductive line 222. Thus, power can be provided to each sub-array 204 independently of the other sub-arrays 204. When a particular sub-array 204 is to be biased with power, selected column switch(es) 224 will be placed in conductive mode to allow voltages from power domains such as supply voltages VDD and VSS, and program, erase, and read voltage biases to be applied to selected columns of memory array 202. A particular sub-array 204 will be fully powered when the appropriate column switches 224 are in conductive mode. Otherwise, a sub-array 204 with column switch 224 in non-conductive mode will be in a power-down mode. Note that switches 224 can be implemented as either one switch per line, or one or more switches that control connection of the signal lines to a particular sub-array 204.
Note that instead of column power gating control circuitry 220 and conductive lines 222 and switch 224 for each column, each row in array 202 can be connected to conductive lines across each row and to row power gating control circuitry (not shown).
Each memory sub-array 304 is coupled to column power gating control circuitry 320 by respective conductive lines 324. Thus, power can be provided to each sub-array 304 independently of the other sub-arrays 304. When a particular sub-array 304 is to be biased with power, voltages from power domains such as supply voltages VDD and VSS, and program, erase, and read voltage can be applied to selected memory sub-array(s) 304 as needed. A particular sub-array 304 will be fully powered when the voltages and biases are provided on respective conductive line 324. Otherwise, a sub-array 304 without power will be in a power-down mode. Note that instead of column power gating control circuitry 320 and conductive lines 324 for each column, each row in array 302 can be connected to conductive lines across each row and to row power gating control circuitry (not shown).
Referring to
Scheduling control block 400 is generated by analyzing each task or set of software instructions or code to be executed or being executed on CPU 112, 212, 312 to determine sub-arrays 104, 204, 304 of memory arrays 102, 202, 302 used by each task or with a high-enough probability of being next accessed after the current sub-array(s) 104, 204, 304 in use. In the example of scheduling control block 400 shown, scheduling control block 400 shows task 1 in processing system 100 using sub-arrays 104(1,1) and 104(1,2). Task 2 in processing system 100 uses sub-array 104(3,3). Task 3 in processing system 100 uses sub-arrays 104(4,2), 104(4,3), 104(5,3) and 104(6,2). Additional (or fewer) tasks can be included in scheduling control block 400, as required. Each task can have both ‘sub-arrays 104, 204, 304 in use now’ and ‘sub-arrays 104, 204, 304 with a high-enough probability of being used next’ values. The high-enough probability value enables a trade-off of performance versus power consumption. The higher the probability cut-off the lower the power consumption (fewer sub-arrays 104, 204, 304 powered) but the higher the chance that the system will next need access to an unpowered sub-array 104, 204, 304, have to wait for the sub-array 104, 204, 304 to be powered up and suffer a resulting performance degradation. A system designer can decide whether the cut-off is fixed at compile time, varies dynamically based on available battery power, or varies dynamically based on some function of other inputs, like user preference or application space. Dynamic operation requires a more complex control block 400 where the possible ‘next’ sectors can be grouped by probability of imminent execution.
Referring to
As an example of a way to determine which sub-arrays 104, 204, 304 are to be biased is to not bias other sub-arrays 104, 204, 304 until the next instruction to be executed by a task is outside of the current sub-array 104, 204, 304. Once this happens, the new sub-array is biased while biases are removed from the previously-biased sub-array. Even though the power gating circuitry 120, 122, 220, 320 consumes some power, the static power consumed by array 102, 202, 302 with N sub-arrays is reduced by a factor of N.
In another method for determining which sub-arrays 104, 204, 304 to bias, the sub-array(s) 104, 204, 304 physically closest to the sub-array 104, 204, 304 currently being used are biased. Assume a total of M sub-arrays 104, 204, 304 are biased. Even with the additional power consumption by power gating circuitry 120, 122, 220, 320, static power consumption for an array 102, 202, 302 with N sub-arrays is proportional to a factor of M/N instead of N. Biasing more sub-arrays increases the probability that, when execution jumps out of the current sub-array, the next instruction will be in an already-biased sub-array and decreases the performance impact of not biasing the entire array 102, 202, 302. The optimum value of M for a given N will be application-dependent.
In yet another method for determining which sub-arrays 104, 204, 304 to bias, the sub-array 104, 204, 304 containing the addresses next in sequence after those of the currently executing sub-array 104, 204, 304 is biased. Optionally one or more sub-arrays 104, 204, 304 with addresses after the next sub-array 104, 204, 304 to a selected depth, D, can also be biased. For the additional power consumption, static power consumption for an array with N sub-arrays 104, 204, 304 is reduced by a factor of (D+1)/N.
In a further method for determining which sub-arrays 104, 204, 304 to bias, either during or after compilation, the compiled code for a task can be optimized to remove unused and unreachable code. During this process and, if necessary, in additional optimizing passes, the optimizer constructs, for each sub-array 104, 204, 304, a list of the sub-arrays 104, 204, 304 containing addresses to which code in the sub-array being analyzed can jump, whether through interrupts, subroutine calls or other means. Optionally, the optimizer can create a jump tree of sub-arrays 104, 204, 304 by further tracing subsequent jumps. The optimum depth of this tree depends, in part, on the target reduction in power consumption, the input high-level program, language and compiler. If the optimizer is allowed to proceed past the first jump, the maximum number of sub-arrays 104, 204, 304 on any branch of the tree can be set to limit the number of sub-arrays 104, 204, 304 that can potentially be biased.
When the executable task is loaded, the linked tree can be passed to sub-array power control circuitry 116, 216, 316 along with either the address or sub-array 104, 204, 304 of the first instruction to be executed. Throughout execution, sub-array power control circuitry 116, 216, 316 can have the relevant address or sub-array information updated either on every clock cycle or whenever execution leaves the current sub-array 104, 204, 304. Sub-array power control circuitry 116, 216, 316 uses the presented address/sub-array information, the stored jump tree and, optionally, a local maximum number of sub-arrays 104, 204, 304 that can be biased to compute which sub-arrays 104, 204, 304 to bias at any time during operation.
In still a further method for determining which sub-arrays 104, 204, 304 to bias, as the high-level code is written, the programmer supplies a type and acceptable range for each input variable and parameter. Either during compilation or in a post-compilation operation, the compiled code is optimized to remove unused and unreachable code. The optimizer can be provided with data on the target memory array architecture. During the optimization process the optimizer runs a stochastic simulation, such as a Monte Carlo simulation, repeatedly running the code with randomly selected values of the variables and parameters to compile, for each sub-array 104, 204, 304, the probability of a jump to all other sub-arrays 104, 204, 304. Optionally, the optimizer can create additional statistics, such as the average number of cycles spent in the executing sub-array 104, 204, 304 before execution jumps to either any other sub-array 104, 204, 304 or each of the other sub-arrays 104, 204, 304 or a probability tree for further subsequent jumps. The optimum depth of this tree depends, in part, on the target reduction in power consumption, the input high-level program, language and compiler. If the optimizer is allowed proceed past the first jump, the maximum number of subsequent jumps on any branch of the tree can be set to limit how many sub-arrays can potentially be biased. Once the probability tree has been constructed, the optimizer stores it in the executable with the assembly code.
When the executable is loaded, the probabilities can be passed to sub-array power control circuitry 116, 216, 316 along with either the address or sub-array 104, 204, 304 of the first instruction to be executed. Throughout execution, sub-array power control circuitry 116, 216, 316 can have the relevant address or sub-array information updated either on every clock cycle or whenever execution leaves the current sub-array 104, 204, 304. Sub-array power control circuitry 116, 216, 316 uses the presented address/sub-array information, the stored probabilities, a probability threshold for biasing and, optionally, a local maximum number of sub-arrays 104, 204, 304 that can be biased to compute which sub-arrays 104, 204, 304 to bias at any time during operation.
Referring again to
During operation of processing system 100, 200, 300, process 506 includes selecting a next task for execution by scheduler 114, 214, 314. A task may be selected based on priority, availability of resources, occurrence of a specified event, a specified time, and/or other chosen criteria such as user input or other external stimulus.
In process 508, scheduler 114, 214, 314 determines sub-arrays to receive power based on the task to be executed and sub-arrays 104, 204, 304 of memory array 102, 202, 302 to be used by the task. The memory usage can be based on the address(es) provided to CPU 114, 214, 314, and/or information resulting from analysis of a task during compilation and optimization in process 502. Once the sub-array(s) 104, 204, 304 to be used for a task are determined, control signals can be sent from scheduler 114, 214, 314 to sub-array power control circuitry 116, 216, 316. The control signals may be stored in control register 118, 218, 318.
In process 510, sub-array power control circuitry 116, 216, 316 sets the power state of each sub-array 104, 204, 304 by sending signals to power gating control circuitry 120, 122, 220, 320 that control which voltages are applied to which sub-array 104, 204, 304. In some implementations, signals are sent to operate row switches 124 and column switches 126, 224 to control which sub-arrays 104, 204, 304 receive power and which remain in a power-down or reduced power state. In other embodiments, such as shown in
By now it should be appreciated that in selected embodiments there has been provided, in a memory system (100, 200, 300) having a memory array (102, 202, 302) divided into a plurality of sub-arrays (104, 204, 304) in which each sub-array has a mutually exclusive power domain, task scheduler circuitry (114, 214, 314) coupled to the memory array, and sub-array power control circuitry (116, 216, 316) coupled to the task scheduler circuitry, a method can comprise selecting, by the task scheduler circuitry, a task for execution (506); providing a control signal to the sub-array power control circuitry indicative of a set of sub-arrays to power based on the selected task (508); and setting a power state of each sub-array, by the sub-array control circuitry, in response to the control signal (510).
In another aspect, the power state of each sub-array of the set of sub-arrays can be powered up.
In another aspect, the power state of each sub-array not in the set of sub-arrays can be reduced power.
In another aspect, the power state of each sub-array not in the set of sub-arrays can be powered down.
In another aspect, each sub-array can include power gating circuitry (120, 122 and switches, etc.) such that the sub-array control circuitry controls the power gating circuitry of each sub-array to set the power state.
In another aspect, the memory can be a non-volatile memory.
In another aspect, the memory can be a random access memory (RAM).
In another aspect, the task scheduler circuitry can include stored configuration information (
In another aspect, the method can further comprise analyzing information to be stored in the memory array (502); in response to analyzing the information to be stored in the memory array, determining the corresponding set of sub-arrays used by each task (502); and programming the configuration information into the task scheduler circuitry (504).
In another aspect, analyzing the information comprises analyzing executable instructions to be stored in the memory array.
In other selected embodiments, in a memory system having a memory array divided into a plurality of sub-arrays in which each sub-array has a mutually exclusive power domain, sub-array power control circuitry coupled to memory array, and a central processing unit (CPU) coupled to the memory array, a method can comprise determining, by the sub-array power control circuitry, a subset of the sub-arrays to power up based on a physical location in the memory array of information to be accessed by the CPU; powering up each sub-array of the subset of sub-arrays and reducing power to each sub-array not in the subset of sub-arrays, wherein the subset of sub-arrays includes the information; and after the powering up each sub-array of the subset of sub-arrays, accessing the information.
In another aspect, the information to be accessed by the CPU includes code to be executed by the CPU.
In another aspect, the method can further comprise receiving a next instruction to be executed by the CPU. The determining the subset of sub-arrays to power up can be based on an address of the next instruction. The subset of the sub-arrays can include a sub-array containing the address of the next instruction.
In another aspect, the subset of the sub-arrays can further include a sub-array physically closest to the sub-array containing the address of the next instruction.
In another aspect, the method can further comprise storing a depth value, D, wherein D (118, 218, 318) is an integer greater than zero, and wherein the subset of the sub-arrays includes D sub-arrays which contain addresses in sequence after the address of the next instruction.
In another aspect, reducing power to each sub-array not in the subset of sub-arrays includes removing power from each sub-array not in the subset of sub-arrays.
In other selected embodiments, a memory system (100, 200, 300) can comprise a memory array divided into a plurality of sub-arrays in which each sub-array has a mutually exclusive power domain; task scheduler circuitry coupled to the memory array and configured to select a task for execution; and sub-array power control circuitry coupled to the task scheduler circuitry. The task scheduler circuitry can be configured to provide a control signal to the sub-array power control circuitry indicative of a set of sub-arrays to power based on the selected task, and the sub-array power control circuitry can be configured to set a power state of each sub-array in response to the control signal.
In another aspect, each sub-array can comprise power gating circuitry. The sub-array power control circuitry can be configured to control the power gating circuitry of each sub-array to set the power state.
In another aspect, the task scheduler circuitry can comprise storage circuitry configured to store configuration information which indicates a corresponding set of sub-arrays used by each task of a plurality of tasks.
In another aspect, the task scheduler circuitry can be configured to provide the control signal based on the selected task and the configuration information.
Because the apparatus implementing the present disclosure is, for the most part, composed of electronic components and circuits known to those skilled in the art, circuit details will not be explained in any greater extent than that considered necessary as illustrated above, for the understanding and appreciation of the underlying concepts of the present disclosure and in order not to obfuscate or distract from the teachings of the present disclosure.
Some of the above embodiments, as applicable, may be implemented using a variety of different information processing systems. For example, although
Thus, it is to be understood that the architectures depicted herein are merely exemplary, and that in fact many other architectures can be implemented which achieve the same functionality. In an abstract, but still definite sense, any arrangement of components to achieve the same functionality is effectively “associated” such that the desired functionality is achieved. Hence, any two components herein combined to achieve a particular functionality can be seen as “associated with” each other such that the desired functionality is achieved, irrespective of architectures or intermediate components. Likewise, any two components so associated can also be viewed as being “operably connected,” or “operably coupled,” to each other to achieve the desired functionality.
System 100, 200, 300 can include additional components for operating memory array 102, 202, 302 that are not shown to simplify
Also for example, in one embodiment, the illustrated elements of system 100, 200, 300 are circuitry located on a single integrated circuit or within a same device. Alternatively, system 100, 200, 300 may include any number of separate integrated circuits or separate devices interconnected with each other. For example, memory array 102, 202, 302 may be located on a same integrated circuit CPU 112, 212, 312 or on a separate integrated circuit or located within another peripheral or slave discretely separate from other elements of system 100, 200, 300. Peripheral(s) and I/O circuitry may also be located on separate integrated circuits or devices. Also for example, system 100, 200, 300 or portions thereof may be soft or code representations of physical circuitry or of logical representations convertible into physical circuitry. As such, system 100, 200, 300 may be embodied in a hardware description language of any appropriate type.
Furthermore, those skilled in the art will recognize that boundaries between the functionality of the above described operations merely illustrative. The functionality of multiple operations may be combined into a single operation, and/or the functionality of a single operation may be distributed in additional operations. Moreover, alternative embodiments may include multiple instances of a particular operation, and the order of operations may be altered in various other embodiments.
Although the disclosure is described herein with reference to specific embodiments, various modifications and changes can be made without departing from the scope of the present disclosure as set forth in the claims below. Accordingly, the specification and figures are to be regarded in an illustrative rather than a restrictive sense, and all such modifications are intended to be included within the scope of the present disclosure. Any benefits, advantages, or solutions to problems that are described herein with regard to specific embodiments are not intended to be construed as a critical, required, or essential feature or element of any or all the claims.
The term “coupled,” as used herein, is not intended to be limited to a direct coupling or a mechanical coupling.
Furthermore, the terms “a” or “an,” as used herein, are defined as one or more than one. Also, the use of introductory phrases such as “at least one” and “one or more” in the claims should not be construed to imply that the introduction of another claim element by the indefinite articles “a” or “an” limits any particular claim containing such introduced claim element to disclosures containing only one such element, even when the same claim includes the introductory phrases “one or more” or “at least one” and indefinite articles such as “a” or “an.” The same holds true for the use of definite articles.
Unless stated otherwise, terms such as “first” and “second” are used to arbitrarily distinguish between the elements such terms describe. Thus, these terms are not necessarily intended to indicate temporal or other prioritization of such elements.