Details of the CPF Implementation
CPF specification describes method called PSO(Power shut off) implementation that we use to write the CPF file.
Overall procedure after the RTL is complete is to write the CPF specification file along with the synthesis script. We have to use the Cadence Synthesis tool (RC Compiler version RC72USR1 or above) In the synthesis script we simply do the following
1. Read the RTL
2. Read the CPF(read_cpf)
3. Commit the CPF (commit_cpf)
4. Synthesize (synthesize)
5. Reports and analysis
6. Conformal lec Scripts (write_do_lec) to perfrom the formal verification. This is needed to make sure that the functional Intent of the block after the CPF is applied is still identical.
CPF Syntax
In the CPF we perform the following steps to implement what we have described in the previously.
1. Define the characterization sets that are needed for the three different Power Domains using the command "define_library_set". Since there are three Power Domains therefore I would expect to create atleast three library sets using this command.
a. First set is for the TOP Power domain which is running at Nominal Voltage(1.08V) but it
interacting with Mult4 which is running at 0.81V. Therefore
define_library_set -name set1 -libraries "STANDARD SS + Step Down Level Shifters"
b. Second set is for the LS Power domain which is running at 0.81V and also interacting with
TOP which is running at 1.08V therefore
define_library_set -name set2 -libraries "SSLV libs + Step UP Level Shifters"
c. Third set is for the LOW Power domain with Standard SS libraries and Retention Flops
and Power gating cell library
define_library_set -name set3 -libraries "SS libs + Retention Flop+ Power Gating .libs"
2. Define Power Domains i.e. TOP, LS and LOW using the command create_power_domains. The example of this command is
create_power_domain -name LOW -instances mult_5 -shutoff_condition "pse"
3. After creating the Power Domains, we create the different nominal conditions using the CPF command "create_nominal_condition". There are potentially 4 nominal conditions.
a. "high" means 1.08V (create_nominal_condition -name high -voltage 1.08 -library_set set1)
b. "on" means 1.08V (create_nominal_condition -name on -voltage 1.08 -library_set set3)
c. "level_shift means 0.81V(create_nominal_condition -name level_shift -voltage 0.81 -library_set set2 )
d. "off" means 0v(create_nominal_condition -name off -voltage 0.0)
The difference between high and on nominal condition is that high nominal condition is using the set1 which means it uses the standard low corner library(ss) and the step down level shifters to talk to the LS Domain. "on" nominal condition is using the set3 which means it uses the SS library + Retention flops + Power Gates.
4. After defining the Power domains and the nominal conditions we apply the nominal conditions on the power domains using the command create_power_mode. Based on the above nominal conditions we have atleast two Power modes.
create_power_mode -name shift -domain_conditions {TOP@high LOW@on LS@level_shift}
create_power_mode -name SO -domain_conditions {TOP@high LOW@off LS@level_shift}
5. Last step in the CPF is to make sure that we define all the rules that are needed for the proper implementation of Level Shifters(create_level_shifter_rule), Retention Flops(create_state_retention_rule), Isolation Rules (create_isolation_rule) and Power Switching rules(create_power_switch_rule).
Overall procedure after the RTL is complete is to write the CPF specification file along with the synthesis script. We have to use the Cadence Synthesis tool (RC Compiler version RC72USR1 or above) In the synthesis script we simply do the following
1. Read the RTL
2. Read the CPF(read_cpf)
3. Commit the CPF (commit_cpf)
4. Synthesize (synthesize)
5. Reports and analysis
6. Conformal lec Scripts (write_do_lec) to perfrom the formal verification. This is needed to make sure that the functional Intent of the block after the CPF is applied is still identical.
CPF Syntax
In the CPF we perform the following steps to implement what we have described in the previously.
1. Define the characterization sets that are needed for the three different Power Domains using the command "define_library_set". Since there are three Power Domains therefore I would expect to create atleast three library sets using this command.
a. First set is for the TOP Power domain which is running at Nominal Voltage(1.08V) but it
interacting with Mult4 which is running at 0.81V. Therefore
define_library_set -name set1 -libraries "STANDARD SS + Step Down Level Shifters"
b. Second set is for the LS Power domain which is running at 0.81V and also interacting with
TOP which is running at 1.08V therefore
define_library_set -name set2 -libraries "SSLV libs + Step UP Level Shifters"
c. Third set is for the LOW Power domain with Standard SS libraries and Retention Flops
and Power gating cell library
define_library_set -name set3 -libraries "SS libs + Retention Flop+ Power Gating .libs"
2. Define Power Domains i.e. TOP, LS and LOW using the command create_power_domains. The example of this command is
create_power_domain -name LOW -instances mult_5 -shutoff_condition "pse"
3. After creating the Power Domains, we create the different nominal conditions using the CPF command "create_nominal_condition". There are potentially 4 nominal conditions.
a. "high" means 1.08V (create_nominal_condition -name high -voltage 1.08 -library_set set1)
b. "on" means 1.08V (create_nominal_condition -name on -voltage 1.08 -library_set set3)
c. "level_shift means 0.81V(create_nominal_condition -name level_shift -voltage 0.81 -library_set set2 )
d. "off" means 0v(create_nominal_condition -name off -voltage 0.0)
The difference between high and on nominal condition is that high nominal condition is using the set1 which means it uses the standard low corner library(ss) and the step down level shifters to talk to the LS Domain. "on" nominal condition is using the set3 which means it uses the SS library + Retention flops + Power Gates.
4. After defining the Power domains and the nominal conditions we apply the nominal conditions on the power domains using the command create_power_mode. Based on the above nominal conditions we have atleast two Power modes.
create_power_mode -name shift -domain_conditions {TOP@high LOW@on LS@level_shift}
create_power_mode -name SO -domain_conditions {TOP@high LOW@off LS@level_shift}
5. Last step in the CPF is to make sure that we define all the rules that are needed for the proper implementation of Level Shifters(create_level_shifter_rule), Retention Flops(create_state_retention_rule), Isolation Rules (create_isolation_rule) and Power Switching rules(create_power_switch_rule).