Performance, silicon area, and testability were the key design constraints to be met during the design of any digital VLSI system in the past. Increasingly, of late, power has received the same weight-age as a design constraint, primarily due to the enormous success of portable and handheld computing. In today's designs, power is the primary design constraint, with other constraints adapting themselves around the primary power number. This phenomenon has been true independent of the size of the system as power efficiency is a growing concern to all aspects of computing systems ranging from the very small, highly integrated System-on-a-Chip (SoC) based handheld devices to larger systems including servers, and many-core high performance computing systems. Handheld devices just cannot afford to get hot, nor have their batteries run out half-way through an emergency call. Data centers can no longer afford to contribute an observable share of the power consumption of the city. There are four key components to any power management system-specification, modeling/estimation, technique, and verification-the ability to precisely specify the power intent; to model the system and be able to experiment with possible options; to algorithmically or manually modify the design to improve power consumption; and, to check and provide guarantees that the functionality of the design is preserved. In this paper, we survey state-of-the-art methods for each of these four key components across all levels of design hierarchy, abstraction and implementation.