The advantage of utilizing a combination of low-power components in conjunction with low-power design techniques is more valuable now than ever before. Requirements for lower power consumption continue to increase significantly as components become battery-powered, smaller and require more functionality. When programmable logic devices are included in low-power applications, it is important to constrain the design for power efficiently. The following sections discuss various methods of reducing dynamic and static power consumption and provide some examples that show how to minimize power consumption. Sources of power consumption The three main sources of power consumption are inrush, standby and dynamic. Current associated with the power-up sequence of a device is referred to as inrush current. Standby power, also known as static power, is the power of a device when the power lines are active and when there is no switching activity on the I/Os. Dynamic power, also referred to as switching power, is the power associated with a device during normal operation. Inrush current is device-specific. For example, SRAM-based FPGAs have a high inrush current because on power-up these devices are not configured and need to actively download data from external memory chips to configure their programmable resources, such as routing connections and lookup tables. Conversely, anti-fuse-based FPGAs do not have a high inrush current since they do not require power-on configuration. Much like inrush power, standby power depends heavily on the electrical characteristics of a component. Due to the extensive number of SRAM cells within SRAM FPGA interconnects, they can consume hundreds of milliamps even at standby. Since anti-fuse FPGAs have metal-to-metal interconnects, they do not require the additional transistors, and hence power, to retain interconnects. However, for both FPGA process types, leakage current increases as process geometry shrinks, which exacerbates the power problem. As an additional dilemma, dynamic power can easily be several times greater than standby power. Dynamic power is proportional to the frequency of charging and discharging of internal parasitic capacitances of a component, such as registers and combinatorial logic, so optimizations are generally design-oriented. Cutting power consumption The following are some techniques that can be used to minimize power consumption within an FPGA design: - State machine encoding. A number of logic resources are defined by the type of finite state machines implemented. One-hot state machine encoding creates state machines with one flip-flop per state and decreased combinatorial logic width compared with Gray and binary state machines. The lower utilization of one-hot state machines vs. Gray and binary state machines results in a more power-efficient design. Some synthesizer software automatically encodes state machines, but the most effective way is to define state values directly in the HDL code.
- Guarded evaluation. The key to guarded evaluation is to stop inputs from propagating down to additional logic blocks if the resulting outputs do not require updating. Guarding the evaluation of input signals ensures that outputs change values only when it is appropriate. As a result, unnecessary output switching is minimized.
Adding latches at the inputs of large combinatorial logic (e.g., wide bus multiplexer) can suppress invalid switching activity, because inputs are latched only when the outputs are supposed to be updated. Similarly, control registers can be implemented to enable or disable lower-level modules (e.g., state machines in submodules). Holding large buses and submodules in a constant state helps reduce the amount of irrelevant switching. - Combinatorial loops. Occasionally, it is possible for a designer to inadvertently create combinatorial loops in an FPGA design. These loops are formed when there is a group of related combinatorial logic that, under certain conditions, will oscillate indefinitely. Oscillators draw excessive amounts of current in FPGAs. Therefore, it is a good idea to evaluate out oscillators or make sure that any feedback logic is gated by a register prior to reevaluation.
- Gated clocks. Temporarily unused modules can have their clocks slowed or stopped. Power savings comes from clocks only being provided to certain portions of the design at any given time. Gating a clock contributes to a significant amount of power savings because the number of active clock buffers reduces the number of toggling flip-flops decreases, and consequently the fan-out of those flip-flops will be less likely to toggle. Gating clocks requires careful planning and partitioning of algorithms, but the power savings can be considerable.
System-level savings Power savings can also be realized at the system level in the following areas: - System clock speeds. System clock frequency has a dramatic impact on the overall power consumption of a board, since clock signals have the highest switching activity and capacitive load. Clock speed directly relates to bandwidth performance, however. To achieve an optimum balance between power and throughput, a slower clock can be supplied to components that do not require a fast clock. For devices that are critical to bandwidth, provide a fast clock, or use a built-in phase-locked loop (when available) to internally generate a fast clock for the specific modules that require faster performance.
- Component enabling. Sometimes output values are evaluated even though their behavior is not necessary for the current function. To alleviate the superfluous power consumption caused by unused I/O, a system controller can be mapped to the FPGA to power down or disable devices that are temporarily unused. A system controller can deactivate the enable signal to a device when that device is irrelevant to the current operation, or put a device in its sleep mode when that device will not be accessed for an extended period of time. Implementing such a system controller in a low-power FPGA reduces the overall switching activity of the system, and intelligently keeps the appropriate devices in their sleep modes. Component enabling is similar to guarded evaluation except that component enabling is implemented at the system level to control components on the board instead of modules in an FPGA.
- Intelligent coprocessor. Liquid-crystal display screens and microprocessors typically take up most of the power budget in a design so it is general practice to dim or partially disable LCD screens to save power. Likewise, keeping a microprocessor in its sleep mode also lengthens battery life.
Unfortunately, microprocessors usually need to handle interrupt service routines across multiple devices, which tends to keep the microprocessor out of sleep mode. For that reason, offloading peripheral operations and interrupt control to a low-power FPGA significantly reduces power consumption. A low-power interrupt controller or data coprocessor implemented in an FPGA can handle some of the interrupt activity on its own, and avoid having to wake up the microprocessor for lower-priority transactions. For systems where low power is vital, employing power reduction design techniques with appropriate low-power programmable logic devices helps keep system power consumption to a minimum. Jason K. Lew (jlew@quicklogic.com) is an applications engineer for QuickLogic Corp. (Sunnyvale, Calif.). | See related chart SRAM-based interconnects require a pass transistor and SRAM configuration transistors, adding routing capacitance, which increases power consumption. Anti-fuse interconnects create a low resistance, low-capacitance, metal-to-metal link, which equates to low power consumption. Source: QuickLogic Corp. | |