Patent Description:
A system on a chip (SoC) is an integrated circuit that integrates different components of a mobile computing device, including a central processing unit (CPU), memory, input/output ports, cellular radios, and secondary storage, and so on. In contrast to the traditional motherboard-based PC architecture, where a motherboard houses and connects detachable or replaceable components, SoCs integrate all these components into a single integrated circuit. SoCs are commonly used in mobile computing, edge computing, and embedded systems, such as smartphones, tablet computers, WiFi routers, Internet of Things (IoT) devices, and so on.

Clock gating is used in many circuits for reducing dynamic power dissipation, by removing the clock pulse when the circuit is not in use. Clock gating saves power by pruning the clock tree, in some cases, at the cost of adding more logic to a circuit. A SoC can include multiple devices that need clock gating. For example, when a device of the SoC does not need to work for some clock cycles (e.g., <NUM> clock cycles or <NUM> clock cycle), the system can determine to perform clock gating for the device, e.g., removing the clock pulse, or switching between "clock on" and "clock off" according to the requirements of that device. When the device needs to come back to work, the system can add back the clock pulse. Clock gating by removing and adding back clock pulses in a device causes changes in the current. Di/dt is the rate-of-change of the current and can be expressed in units of amps per second. A positive di/dt represents an increase in the current and a negative di/dt represents a decrease in the current.

However, when multiple subsystems or multiple components of a device need clock gating, clock gating can result in sudden change in the current requirement of the device. The sudden change in the current is referred to as di/dt noise or the di/dt effect, which is also known as surge current or in-rush current. High performance design of modem devices may require more frequent and higher amount of clock gating, which may result in higher di/dt noise. Thus, di/dt noise is becoming an important source of power supply noise in modem day chips. Di/dt effect increases when clock gating is performed on a significant part of the device.

Some systems can utilize higher noise margins during clock gating to mitigate the di/dt effect. To do so, the system can estimate a di/dt noise percentage and can allocate a sufficient amount of noise margin during which desired work cannot be performed. However, when a large amount of noise margin is allocated in a large size circuit, e.g., a high performance chip, there are fewer opportunities to save the power, e.g., by reducing the voltage or some other techniques. Thus, the system must operate at a lower speed. In addition, the system has to use higher noise margins because of the unpredictability of di/dt noise. The problem becomes more impactful when circuit size goes bigger, such as modern day devices with multiple CPU cores.

Some systems can stagger the clock gating of the multiple components of a device to mitigate the di/dt effect. Staggering is helpful when the clock of an entire component is being gated on or gated off. However, modern day devices may need to perform clock gating for a portion of a component and may need to perform many types of clock gating, e.g., fine grained clock gating, micro textual clock gating, etc. Thus, staggering cannot help when much complex clock gating is happening inside the multiple components of the device.

<CIT> discloses a system on chip (SoC) that includes a plurality of intellectual property (IP) blocks and a clock management unit (CMU) configured to perform clock gating on at least one of the IP blocks. The IP blocks and the CMU interface with one another using a full handshake method. The full handshake method may include at least one of the IP blocks sending a request signal to the CMU to begin providing a clock signal or to stop providing the clock signal, and the CMU sending an acknowledgement signal to the corresponding IP block in response to receipt of the request signal.

<CIT> discloses various systems and methods for reducing the power consumption of CSRs (Control and Status Registers) within an integrated circuit (IC) are disclosed. In one embodiment, an IC includes a plurality of CSRs. Each CSR includes one or more flip-flops that are used to store one or more bits of control and/or status information for an associated device on the IC. The IC also includes one or more clock gates. Each clock gate is coupled to provide a gated clock signal to one or more of the flip-flops in a respective one of the CSRs. Each clock gate is configured to output a clock signal as the gated clock signal if a clock enable signal that corresponds to the respective CSR is asserted. The IC also includes one or more clock gating units that are each configured to generate the clock enable signal for a respective one of the CSRs.

This specification describes technologies for di/dt management during clock gating of multiple computing devices in a system. The techniques use a centralized di/dt manager that can receive clock gating requests from the multiple computing devices and can determine to approve which of the clock gating requests such that the total clock gating value of the system is within a threshold.

The subject matter described in this specification can be implemented in particular embodiments so as to realize one or more of the following advantages. The techniques use a centralized di/dt manager to manage di/dt noise during clock gating of multiple computing devices in a device. The di/dt manager receives clock gating requests from the multiple computing devices and determines which of the clock gating requests to approve such that the total clock gating value of the device is within a threshold. Therefore, the techniques can control the di/dt noise to be within a limit and can reduce the noise margin in the device. Therefore, there are more opportunities to save the power, e.g., by lowering the voltage because power is directly proportional to the square of the voltage, or using other techniques, and the system can execute at a higher speed. The techniques can increase the frequency of operation and can finish a task earlier, saving the energy required for a task.

Like reference numbers and designations in the various drawings indicate like components.

<FIG> is a diagram of an example system <NUM>. The system <NUM> can include a system on a chip (SoC) device installed on a mobile device (e.g., a smart phone or a tablet). A SoC is an integrated circuit system that can include each component of the system on a single silicon substrate or on multiple interconnected dies, e.g., using silicon interposers, stacked dies, or interconnect bridges. Alternatively or in addition, the system <NUM> can be another type of device that uses centralized clock gating control.

The system <NUM> includes multiple computing devices, subsystems, or components. For example, the system <NUM> includes multiple compute cores, e.g., compute core <NUM><NUM>(<NUM>), compute core <NUM><NUM>(<NUM>),. , compute core n <NUM> (n), (collectively, "compute cores <NUM>"). For example, the compute cores can be central processing units (CPUs), graphics processing units (GPUs), digital signal processors (DSPs), machine learning tiles, image processors, or any other appropriate types of computing devices. Although the techniques are illustrated for the multiple compute cores <NUM>, similar techniques are applicable to any kind of device which have multiple computing devices, subsystems, or components.

Each computing device, e.g., each compute core, has respective clock gating logic that is configured to apply clock gating to a portion of the computing device. Clock gating is a technique used in many circuits for reducing dynamic power dissipation, by removing, or holding steady, a clock pulse when the circuit is not in use. Clock gating saves power by pruning the clock tree, at the cost of adding more logic to a circuit. Some devices may need to perform clock gating for a portion of a component and may need to perform many types of clock gating, e.g., fine grained clock gating, micro textual clock gating, etc..

For example, a CPU core may not need to work for some clock cycles (e.g., <NUM> clock cycles , <NUM> clock cycles, or <NUM> clock cycle), the CPU core may desire to perform clock gating, e.g., removing the clock pulse according to the requirements of the CPU core. After a period of time, the CPU core may need to come back to work, and the CPU core may desire to end the clock gating, e.g., adding back the clock pulse according to the requirements of the CPU core. In some examples, a portion of the CPU core may not be required to work for some clock cycles.

Clock gating by removing and adding back clock pulses in a device causes changes in the current. Di/dt is the rate-of-change of the current and can be expressed in units of amps per second. A positive di/dt represents an increase in the current and a negative di/dt represents a decrease in the current. When multiple subsystems or multiple components of a device need clock gating, clock gating can result in sudden change in the current of the device. The sudden change in the current is referred to as di/dt noise or the di/dt effect, which is also known as surge current or in-rush current. High performance design of modem devices may require more frequent and higher amount of clock gating, which may result in higher di/dt noise. Thus, di/dt noise is becoming an important source of power supply noise in modem day chips. Di/dt effect increases when clock gating is performed on a significant part of the device.

The system <NUM> includes a centralized di/dt manager <NUM>. The di/dt manager <NUM> can control the di/dt noise by managing clock gating requests from the multiple computing devices in the system <NUM>. The di/dt manager <NUM> can control the di/dt noise to be within a limit and can reduce the noise margin in the system <NUM>. Therefore, there are more opportunities to save the power, e.g., by reducing the voltage or some other techniques, and the system <NUM> can perform at a higher speed.

The di/dt manager <NUM> can receive, from the compute cores <NUM>, respective clock gating requests <NUM>(<NUM>), <NUM>(<NUM>),. , <NUM>(n) (collectively, <NUM>), to perform the clock gating. Each clock gating request <NUM> specifies a respective clock gating value representing how much of the requesting compute core will be clock gated. In some implementations, the clock gating value can represent a percentage of clock gating that a compute core desires to perform in a particular clock cycle.

For example, the CPU core <NUM><NUM>(<NUM>) can be in an operating state at a first time point. At a second time point after the first time point, the CPU core <NUM><NUM>(<NUM>) may determine that the number of instructions being processed by the core has reduced. The CPU core may determine to perform clock gating for a portion of the CPU core. The di/dt manager <NUM> can receive, from the CPU core <NUM><NUM>(<NUM>), a clock gating request <NUM>(<NUM>), to perform the clock gating. The clock gating request <NUM>(<NUM>) can include a percentage, e.g., <NUM>%, of clock gating that the CPU core <NUM><NUM>(<NUM>) desires to perform in a particular clock cycle. In some implementations, the CPU core may be already under clock gating, and the clock gating request <NUM>(<NUM>) can include a percentage, e.g., <NUM>%, of additional clock gating that the CPU core <NUM><NUM>(<NUM>) desires to perform in a particular clock cycle.

The di/dt manager <NUM> computes, from the clock gating requests <NUM>, a total clock gating value of the system <NUM>. For example, the di/dt manager <NUM> can compute the total clock gating value of the system <NUM> by calculating a sum of the respective percentage of additional clock gating requested. In some implementations, the di/dt manager <NUM> can calculate a weighted sum of the respective percentage of additional clock gating requested, and the weight can be proportional to a size of the computing device or a frequency of the computing device, or a combination of both.

The di/dt manager <NUM> determines, from the total clock gating value, which of the clock gating requests from the plurality of compute cores <NUM> to approve. The di/dt manager <NUM> can compare the total clock gating value to a clock gating threshold of the system <NUM>. The clock gating threshold is the maximum amount of clock gating that can be allowed without severely impacting the performance of the system <NUM>, e.g., without requiring high noise margins. The di/dt manager <NUM> can obtain the clock gating threshold after post silicon measurement and/or characterization, and can store the clock gating threshold in a register, e.g., a control and status registers (CSR) or any programmable register, included in the di/dt manager <NUM>. In some implementations, the di/dt manager <NUM> can burn the clock gating threshold in fuses for production parts.

In some implementations, if the total clock gating value is less than the clock gating threshold, the di/dt manager <NUM> can approve the clock gating requests from all of the compute cores <NUM>. In some implementations, if the total clock gating value is greater than the clock gating threshold, the di/dt manager <NUM> can approve the clock gating requests from fewer than all of the compute cores <NUM>. In some implementations, the di/dt manager <NUM> can select a combination of the compute cores <NUM> whose clock gating values are less than the clock gating threshold, and can approve the clock gating requests from the selected combination of compute cores. Thus, the di/dt manager <NUM> can make sure that the total allowed clock gating is within a limit and can reduce the noise margin in the device.

The di/dt manager <NUM> provides the compute cores <NUM>, responses <NUM>(<NUM>), <NUM>(<NUM>),. , <NUM>(n) (collectively, <NUM>) to the respective clock gating requests <NUM>. Each response <NUM> represents whether the clock gating request <NUM> is approved. For example, the di/dt manager <NUM> can provide the compute core <NUM>(<NUM>) a response <NUM>(<NUM>), and the response <NUM>(<NUM>) can be "proceed with clock gating", representing that the clock gating request <NUM>(<NUM>) is approved.

The communication between the di/dt manager <NUM> and the compute cores <NUM> can be implemented in various ways. In some implementations, the system <NUM> can include a physical interface for the communication. For example, the physical interface for the communication can include a set of signals between the compute cores <NUM> and the di/dt manager <NUM>. The set of signals can inform the di/dt manager <NUM> the amount of clock gating a compute core is planning to do, and the set of signals can include approvals or rejections from the di/dt managers. In some implementations, the system <NUM> can include a virtual interface for the communication. For example, the system <NUM> can implement the communication between the compute cores <NUM> and the di/dt manager <NUM> via reading a status of one or more sensors, or via reading a status of one or more registers, without using a set of physical signals. In some implementations, the system <NUM>, e.g., the di/dt manager <NUM>, can include a plurality of status registers, e.g., control and status registers (CSR), and the status registers can store the request <NUM>, the responses <NUM>, or a combination of both. In some implementations, the system <NUM> can include a plurality of sensors, e.g., current sensors, for the communication between the di/dt manager <NUM> and the compute cores <NUM>. Other implementations are also possible.

<FIG> is a flowchart of an example for di/dt management during clock gating. For convenience, the process will be described as being performed by the system <NUM> that includes a di/dt manager <NUM>. The system can include the components described in reference to <FIG>, including one or more computing devices, subsystems, components, or some combination of these.

The system receives, from a plurality of computing devices, respective clock gating requests to perform the clock gating (<NUM>). Each clock gating request specifies a respective clock gating value representing how much of the requesting computing device will be clock gated. In some implementations, each clock gating value can represent a percentage of a computing device that is to be clock gated. For example, each clock gating value can represent a percentage of clock gating each core <NUM> desires to perform during a clock cycle.

The system <NUM> can include the plurality of computing devices and a centralized di/dt manager. In some implementations, the centralized di/dt manager and the plurality of computing devices can be integrated on a single system on a chip. For example, the system <NUM> can be a system on a chip (SoC), and the SoC can include a di/dt manager and a plurality of computing devices, such as subsystems, components, computing devices, or a combination of these.

Each computing device can have respective clock gating logic that can be configured to apply clock gating to a portion of the computing device. In some implementations, each computing device can apply or perform the requested clock gating if and only if the centralized di/dt manager <NUM> has provided a response approving the clock gating request.

The system computes, from the clock gating requests, a total clock gating value of the device (<NUM>). In some implementations, each of the plurality of computing devices can be associated with a weight, and the system can compute the total clock gating value of the device by multiplying the clock gating value of each request by a respective weight from the requesting computing device. The weight from the requesting computing device can be stored in the di/dt manager, e.g., in a CSR register or any programmable register, of the di/dt manager. In some implementations, the weights can be burned in fuses for production parts.

In some implementations, the weight can be determined based on a size of the computing device, a frequency of the computing device, the voltage of operation and technology cells, or a combination of these. For example, the sizes of the cores <NUM> can be different. One core can be <NUM> square nanometer, and another core can be <NUM> square millimeter or <NUM> square micrometer. When the cores <NUM> are communicating the clock gating requests, the overall effect from the cores can be different. As another example, the frequencies of the cores <NUM> can be different. One core can be <NUM>, and another core can be <NUM>. When the cores <NUM> are communicating the clock gating requests, the overall effect from the cores can be different. In some implementations, the weights for each computing device can be determined after post silicon measurement and/or characterization.

<FIG> is a flowchart of an example <NUM> for di/dt management during clock gating. A di/dt manager can receive requests from a plurality of computing devices, e.g., cores, along with percentage of clock gating each core desires to perform (<NUM>). The percentage of clock gating each core desires to perform can be N1, N2,. , Nn, for a total of n cores indexed from <NUM> to n. The di/dt manager computes a total clock gating value of the cores (<NUM>). Each core can have a respective weight W1, W2,. The total clock gating value of the device can be a weighted sum of the percentage of clock gating each core desires to perform, e.g., N1W1+N2W2+.

Referring back to <FIG>, the system determines, from the total clock gating value, which of the clock gating requests from the plurality of computing devices to approve (<NUM>). The system can compare the total clock gating value to a clock gating threshold of the device. The system can determine that the total clock gating value is less than the clock gating threshold, and in response, the system can approve the clock gating requests from all of the computing devices.

The system can compare the total clock gating value to a clock gating threshold of the device. The system can determine that the total clock gating value is greater than the clock gating threshold, and in response, the system can provide approvals to fewer than all of the plurality of computing devices. In some implementations, the system can select a combination of the plurality of computing devices whose clock gating values are less than the clock gating threshold, and can provide approvals to the selected combination of the plurality of computing devices.

The system provides, each of the plurality of computing devices, responses to the respective clock gating requests, each response representing whether the clock gating request is approved (<NUM>).

Referring to <FIG>, the di/dt manager can compare the total clock gating value to a clock gating threshold of the device (<NUM>). For example, the di/dt manager can determine whether the total clock gating value, e.g., N1W1+N2W2+. +NnWn, satisfies a criterion, e.g., not larger than the percentage of clock gating allowed for the device.

The di/dt manager can include a CSR that stores the clock gating threshold of the device. In some implementations, the limit of allowed percentage of clock gating may change over time, and the di/dt manager can include a CSR that stores the clock gating threshold of the device at any given time point.

If N1W1+N2W2+. +NnWn is not larger than the percentage of clock gating allowed, the di/dt manager can let all n cores go through clock gating that they desire to perform (<NUM>). For example, the di/dt manager <NUM> can determine that the total clock gating value from all compute cores <NUM> is less than the clock gating threshold. In response, the di/dt manager <NUM> can approve the clock gating requests <NUM> from all the compute cores <NUM>. The di/dt manager <NUM> can provide response <NUM> to all the cores <NUM>, and each response can represent that the clock gating request is approved.

If N1W1+N2W2+. +NnWn is larger than the percentage of clock gating allowed, the di/dt manager can find a number m such that N1W1+N2W2+. +NmWm is not larger than the percentage of clock gating allowed for the device (<NUM>). Here, m is a positive integer that is smaller than the total number of cores n.

If the di/dt manager can find a number m such that N1W1+N2W2+. +NmWm is not larger than the percentage of clock gating allowed for the device, the di/dt manager can let all m cores go through clock gating that they desire to perform (<NUM>). In some cases, the di/dt manager can find only one core that can go through clock gating.

For example, the di/dt manager <NUM> can determine that the total clock gating value from all CPU cores <NUM> is larger than the clock gating threshold, and the total clock gating value from the CPU cores <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>) is not larger than the clock gating threshold. In response, the di/dt manager <NUM> can approve the clock gating requests <NUM> from the CPU cores <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>). The di/dt manager <NUM> can provide responses <NUM> to the CPU cores <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>), indicating that the respective clock gating request is approved. The di/dt manager <NUM> can provide responses <NUM> to the rest of the CPU cores, indicating that the respective clock gating request is not approved.

If the di/dt manager cannot find a number m (m is a positive integer smaller than n) such that N1W1+N2W2+. +NmWm is not larger than the percentage of clock gating allowed for the device, the di/dt manager can determine that none of the cores can go through clock gating. In some implementations, the di/dt manager can ask one or more cores to reduce the desired percentage of clock gating (<NUM>).

The di/dt manager can keep evaluating the next set of cores which can safely go through clock gating (<NUM>). For example, during the next clock cycle, the di/dt manager can reevaluate the compute cores <NUM>(<NUM>),. , <NUM>(n) that were not approved for clock gating in the previous clock cycle. The di/dt manager can determine that the total clock gating value from the compute cores <NUM>(<NUM>),. , <NUM>(n) is not larger than the clock gating threshold. In response, the di/dt manager <NUM> can approve the clock gating requests from the compute cores <NUM>(<NUM>),. , <NUM>(n). The di/dt manager <NUM> can provide responses to the compute cores <NUM>(<NUM>),. , <NUM>(n), indicating that the respective clock gating request is approved.

Embodiments of the subject matter and the actions and operations described in this specification can be implemented in digital electronic circuitry, in tangibly-embodied computer software or firmware, in computer hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Alternatively or in addition, the program instructions can be encoded on an artificially-generated propagated signal, e.g., a machine-generated electrical, optical, or electromagnetic signal that is generated to encode information for transmission to suitable receiver apparatus for execution by a data processing apparatus. The computer storage medium can be or be part of a machine-readable storage device, a machine-readable storage substrate, a random or serial access memory device, or a combination of one or more of them. A computer storage medium is not a propagated signal.

A computer program, which may also be referred to or described as a program, software, a software application, an app, a module, a software module, an engine, a script, or code, can be written in any form of programming language, including compiled or interpreted languages, or declarative or procedural languages; and it can be deployed in any form, including as a stand-alone program or as a module, component, engine, subroutine, or other unit suitable for executing in a computing environment, which environment may include one or more computers interconnected by a data communication network in one or more locations.

A computer program can be stored in a portion of a file that holds other programs or data, e.g., one or more scripts stored in a markup language document, in a single file dedicated to the program in question, or in multiple coordinated files, e.g., files that store one or more modules, sub-programs, or portions of code.

To provide for interaction with a user, embodiments of the subject matter described in this specification can be implemented on, or configured to communicate with, a computer having a display device, e.g., a LCD (liquid crystal display) monitor, for displaying information to the user, and an input device by which the user can provide input to the computer, e.g., a keyboard and a pointing device, e.g., a mouse, a trackball or touchpad. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user's device in response to requests received from the web browser, or by interacting with an app running on a user device, e.g., a smartphone or electronic tablet.

Embodiments of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a client device having a graphical user interface, a web browser, or an app through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back-end, middleware, or front-end components.

While this specification contains many specific implementation details, these should not be construed as limitations on the scope of the invention or on the scope of what is claimed, but rather as descriptions of features that may be specific to particular embodiments.

Claim 1:
A device (<NUM>) comprising:
a plurality of computing devices (<NUM>(<NUM>), <NUM>(<NUM>), <NUM>(n)), wherein each computing device has respective clock gating logic that is configured to apply clock gating to a portion of the computing device; and
a centralized di/dt manager (<NUM>) that is configured to perform operations comprising:
receiving, from the plurality of computing devices, respective clock gating requests to perform the clock gating, wherein each clock gating request specifies a respective clock gating value representing how much of the requesting computing device will be clock gated,
computing, from the clock gating requests, a total clock gating value of the device,
determining, from the total clock gating value, which of the clock gating requests from the plurality of computing devices to approve, such that a total approved clock gating is less than a clock gating threshold of the device, and
providing, the each of the plurality of computing devices, responses to the respective clock gating requests, each response representing whether the clock gating request is approved.