Clock gating#
This module provides automatic insertion of clock gates for reducing power usage. It uses ABC for proving correctness of gating conditions.
The process is roughly:
For each register: a. Gather nets connected to the register via BFS (limited to 100 nets for performance, user configurable). If it encounters a register, it doesn’t go through it; it stops there and goes in different directions. b. Check if a previously accepted gating condition can be reused; if so, add this register to that condition’s list of registers. c. Export the network gathered in (a) to ABC. d. Check if all the nets in the exported network can form a correct gating condition using ABC.
First, simulation with random stimuli quickly looks for counterexamples.
Then, if no counterexample was found, a SAT solver is employed to prove that the gating condition is correct. A clock enable condition is checked by ORing the nets, and a clock disable condition by ANDing them. e. If the set of all nets doesn’t form a correct gating condition, move on to the next register. Otherwise:
Check if after removing half of the nets the gating condition still works.
If so, drop the other half of the nets. Otherwise, recurse into the other half of the nets to minimize that subset.
Then, recurse into the first half of the nets to minimize that part. This produces a minimal set of nets that form a gating condition (not necessarily optimal). f. Add the minimal set of nets with the corresponding gated register to a list of accepted gating conditions. First check if it doesn’t contain it already; if it does, add the gated register to the pre-existing condition’s list of registers.
For each accepted gating condition with at least 10 corresponding registers (user-configurable), insert a new clock gate that gates the corresponding registers under this condition.
Usage:
read_liberty path/to/pdk/cell/library.lib
read_db path/to/your/design.odb
read_sdc path/to/your/constraints.sdc
clock_gating
Commands#
Note
All parameters for clock gating are optional, as indicated by square brackets: [-param param].
Clock gating#
clock_gating
[-min_instances min_instances]
[-max_cover max_cover]
[-dump_dir dump_dir]
Options#
Switch Name |
Description |
|---|---|
|
Minimum number of instances that should be gated by a single clock gate. |
|
Maximum number of initial gate condition candidate nets per instance. |
|
Directory for debug dumps. |
Example scripts#
Example script on running cgt for a sample design of aes can be found here:
./test/aes_nangate45.tcl
Regression tests#
There are a set of regression tests in ./test. For more information, refer to this section.
Simply run the following script:
./test/regression
Limitations#
Clock gating is currently not available for designs that contain HA and FA cells which are not supported by ABC.
FAQs#
Check out GitHub discussion about this tool.
References#
Aaron P. Hurst. 2008. Automatic synthesis of clock gating logic with controlled netlist perturbation. In Proceedings of the 45th annual Design Automation Conference (DAC ‘08). Association for Computing Machinery, New York, NY, USA, 654–657. https://doi.org/10.1145/1391469.1391637