Advanced Low-Power Flow Using RTL Compiler - Integrating CPF Into The Flow
Advanced Low-Power Flow Using RTL Compiler - Integrating CPF Into The Flow
Advanced Low-power techniques are becoming a routine affair while defining synthesis
methodology. It is important for designers to understand the intricacies of way to define the
power intent in RC. This guide covers the basics of CPF and some commonly used commands
while implementing a CPF based design in RC.
Copyright Statement
© 2013 Cadence Design Systems, Inc. All rights reserved worldwide. Cadence and the Cadence
logo are registered trademarks of Cadence Design Systems, Inc. All others are the property of
their respective holders.
Contents
Introduction .................................................................................................................. 4
Some Common Low Power Techniques...................................................................... 4
The Need for a Power Format ..................................................................................... 5
Understanding the CPF Format ................................................................................... 5
Design Objects ......................................................................................................... 5
Special Library Cells for Power Management .......................................................... 6
lCPF Objects ............................................................................................................ 6
Capturing Power Intent Using CPF .............................................................................. 8
Common CPF related RC commands ....................................................................... 11
check_cpf ............................................................................................................... 11
check_library .......................................................................................................... 12
commit_cpf ............................................................................................................. 12
write_cpf ................................................................................................................. 12
read_cpf ................................................................................................................. 13
Above command will return all the power-domains.................................................... 13
report level_shifter.................................................................................................. 13
report isolation........................................................................................................ 13
report power_domain ............................................................................................. 14
report state_retention ............................................................................................. 14
verify_power_structure ........................................................................................... 14
Power Intent Validation .............................................................................................. 15
Command to invoke CLP ....................................................................................... 15
Command Template for Logical Netlist Checking .................................................. 16
Command Template for Physical Netlist Checking ................................................ 16
Introduction
The shift in the use of chips to consumer applications and the change in the latest process
technologies have made power one of the primary design criteria for a majority of the chips
worldwide. However, the industry’s design infrastructure has not evolved at the same pace. The
lack of support in the infrastructure for designs using advanced low power design techniques
has resulted in a gap between the design techniques needed to control power dissipation and
the ability of the design environment to support those techniques in a safe and efficient
manner.
Yet after all that manual work, the old flows had no way of guaranteeing consistency.
This posed a tremendous risk to the SoC as there was no way to be sure that what was verified
matched with what was implemented. This resulted in lower productivity, longer time to
market, increased risk of silicon failure, and inferior tradeoffs among performance, timing, and
power. The Common Power Format (CPF), approved by the Silicon Integration Initiative (Si2), is
a format for specifying power-saving techniques early in the design process, enabling designers
to share and reuse low-power intelligence.
• Design Objects are objects those already exist in the description of the design.
• CPF Objects are objects that are created through the CPF file
Design Objects
Design objects are objects that are being named in the description of the design, which can be
in the form of RTL files or a netlist. Various design objects that can be referenced by the CPF
commands are shown below:
Object Definition
Special Library Cells for Power Management
lCPF Objects
CPF objects are objects that are being defined (named) in the CPF constraint file. CPF objects
can be referenced by the CPF commands for building the power intent.
In this flow, the RTL files (design intent), CPF file (power intent) and SDC files (timing intent)
capture the full design requirements. In the past when designers had to change the RTL to
include low-power constructs, it precluded design reuse. Designers found they had to change
legacy code that was golden—and of course, if it were changed, it had to be verified again. And
if the same block were used in multiple places in the design, designers would have to copy and
modify the block for every power domain it was used in. This was a huge problem with the old
flow; and consequently, a huge benefit for the CPF-enabled flow.
Figure illustrates a circuit with multiple power domains and power shut-off.
The scope of the design for which CPF is intended is set by using the “set_design” command.
The CPF file for a hierarchical design can contain multiple set_design commands. The first
set_design command specifies the top module of the design, which is at the root of the design
hierarchy and is referred to as the top design. Subsequent set_design commands must each be
The create_power_domain command creates a power domain and specifies the instances and
boundary ports and pins that belong to it. By default, an instance inherits the power domain
setting from its parent hierarchical instance or the design, unless that instance was associated
with a specific power domain. In addition, all top-level boundary ports are considered to belong
to the default power domain, unless they have been associated with a specific domain. Created
power domains are associated with the design objects based on the order of the logical
hierarchy. The order in which they are created is irrelevant. A default power domain must be
specified for the top design, identified by the first set_design command.
create_power_domain \
–name pdA \
–instances {uA uC}
–shutoff_condition {!uPCM/pso[0]}
# Define PDB – PSO when pso is low
create_power_domain
–name pdB \
–instances {uB} \
–shutoff_condition {!uPCM/pso[1]}
When a block is powered down, there is a need to isolate the outputs and drive it to the
appropriate value. This is done by the create_isolation_rule command in CPF. Some key control
flops need to be retained in a powered-down block. This is specified by the
create_retention_rule command.
The create_isolation_rule command defines a rule for adding isolation cells. Individual pins can
be selected to have an isolation value of high, low, or hold. Both input and output isolation can
be supported. A number of other conditions for isolation can be selected using an appropriate
combination of the –to and –from options triggered by the control signal specified by the –
isolation_condition. Isolation behavior is virtually imposed by the simulator based on the
defined rules, without the need for isolation cells in the RTL. The isolation cells are then
inserted using the same rules during the synthesis phase.
The create_level_shifter_rule command defines rules for adding level shifters in the design:
The CPF for the state retention is as follows:
The create_state_retention_rule command defines the rule for replacing selected registers or
all registers in the specified power domain with state retention registers, as shown above. The
store and restore behavior is triggered in simulation by the control signals from the power
controller, as specified in the –save and –restore expression. Note that if –save is not specified,
it is the logical NOT of the –restore signal.
The create_power_mode command is used to define all legal modes of operation in a design
such that each power mode represents a unique combination of operating voltage levels for
individual power domains. This is needed to support power saving schemes like dynamic
voltage and frequency scaling (DVFS). Note that at least one –default mode must be specified,
which represents the power mode at the initial state of the design.
In order to make it easy for the user to write a cpf file, RC provides a command called
“write_template –cpf” which writes out a template cpf. This file can then be edited as per
power intent of the design to create a cpf file. Essentially it requires user to just fill in the blanks
to create a CPF file and greatly reduces the effort needed to create a power intent file.
check_cpf
[-isolation | -level_shifter | -retention | -all]
[-detail] [-continue_on_error]
[-debug] [-run_dir directory] [-license string] [> file]
This command checks the validity of the CPF rules against the RTL of the design. This enables
designers to capture any violations of the low power intent of the design early in the cycle.
• If no low power rule check errors are detected, the command returns 1
• If rule check errors are detected, the command returns 0. In this case, you need to make
the necessary changes to your CPF file before proceeding further with synthesis.
check_library
check_library
[-isolation_cell] [-level_shifter_cell]
[-retention_cell]
[-library_domain library_domain_list]
[-libcell libcell_list]
[> file]
This command allows users to check specific information in the loaded libraries with regards to
level shifters, isolation cells and state retention cells. The report also lists the unusable cells.
The information returned can be fine tuned by combining several options. Without any options
specified, this command list the number of level shifters, isolation cells, and state retention
cells available in each of the library domains. If no library domains exist, the report lists the
library names instead.
commit_cpf
commit_cpf
[-level_shifter_only]
[-isolation_cell_only]
[-design design]
This command inserts level-shifter logic and isolation logic as requested based on the rules
specified in previously read in CPF file(s). If specified without any options, both level-shifter
logic and isolation logic are inserted.
write_cpf
write_cpf
[-design design]
[-separate_library_cpf | -use_library_cpf file]
[-no_sdc_update
This command writes out an updated CPF file or a CPF macro. The command returns the path to
the file with the design CPF information. The golden (original) CPF file references design objects
in the RTL or original netlist. During synthesis, changes to instance and pin names can occur.
The new CPF file contains the power intent of the golden CPF file but with updated references
to the design objects.
read_cpf
read_cpf [-library] [-design design]
[-read_sdc_options string...] file [file]...
This command reads the power intent for the design from the specified Common Power Format
(CPF) file(s). After this command one can see various power-intent object are created i.e.
power_domain, power_mode, isolation_rules, level_shifter_rules, state_retention_rules etc.
One can do find on the power-intent object i.e.
find / -power_domain *
report level_shifter
report level_shifter
{ [instance_list]
| [-detail] [-hierarchical]
[-from_power_domain power_domain_list]
[-to_power_domain power_domain_list] }
[-verbose] [> file]
This command reports level-shifter information for the design. The return value of the report
corresponds to the number of leaf level-shifter instances found.
report isolation
{ [instance_list]
| [-detail] [-hierarchical]
[-from_power_domain power_domain...]
[-to_power_domain power_domain...] }
[-width integer] [> file]
This command reports isolation cell information for the design. The return value of the report
corresponds to the number of leaf isolation cell instances found. The information returned
depends on your current position in the design hierarchy.
report power_domain
report power_domain
[-detail] [-power_mode] [-qor]
[> file]
report state_retention
report state_retention
{ [instance_list]
| [-hierarchical] [-detail]
[-power_gating_pin_driver {port|pin}...]
[-power_domain power_domain-list]
[-verbose] [> file]
This command reports state retention information for the design. The return value of the
report corresponds to the number of state-retention registers found.
verify_power_structure
verify_power_structure
[-isolation] [-level_shifter] [-retention] [-all]
{-pre_synthesis | -post_synthesis} [-detail]
[-run_dir directory] [-debug]
[continue_on_error] [-license string] [> file]
This command verifies whether the low power cells in the design conform to the rules and
specifications in the loaded CPF file. Specifically, RC will flag if there are any missing isolation,
level shifter, or state retention cells or if the low power cells are not connected appropriately.
To run this command you need to have access to Conformal – Low Power.
• Syntax
• Semantics
• Design object
• Inconsistent power intent
• Incomplete power intent