The similarities show that the creators of CPF and UPF were thinking about a very similar scope. Yet at least one large area in CPF lies outside the scope of UPF, and one large area in UPF seems to be outside the scope of CPF. In these areas, it’s not possible to capture the same intent in each format, because there are no commands even vaguely equivalent in the other format.
One complex problem in multivoltage design is performing timing analysis at the different possible temperature and process corners and ensuring coverage of every different voltage scenario. CPF provides some commands that associate different library files and operating conditions with different power modes. Thus, a static timing-analysis tool could automatically sequence a number of different runs, one for each power mode, and make sure to associate the proper set of .lib files with each separate voltage domain. Yet UPF doesn’t provide any specific syntax for this scenario.
Another complex problem in multivoltage design is providing the right simulation semantics for data corruption and voltage resolution. When a block powers off, the non-retained net values should be set to X in simulation. However, different retention registers may have different constraints on the control signal input patterns to ensure correct retention. UPF provides some commands and options to ensure that simulators will check the control signals to retention registers and generate assertion errors or X values if the wrong sequence occurs.
UPF also defines a voltage-resolution package. A certain module may operate correctly if its inputs are in a certain voltage range, but may operate incorrectly and force unknown outputs if the inputs leave this voltage range. Also, a few extra command options could easily address some minor representational differences between the formats. These differences are unlikely to arise in many designs.
For instance, the CPF power switch library command provides an easy way to specify a “partly on” state for the power switch with two enable inputs, as well as specify current limits and other parameters. It may be possible to represent the same behavior in UPF and Liberty, but it’s unlikely that synthesis tools would be able to infer the correct control behavior from the UPF and Liberty descriptions.
EXAMPLES Following are four complete examples focusing on different areas of low-power design. Each offers a simple design description and then the complete CPF and UPF files to capture the low-power intent. The discussion for each example compares and contrasts the way the intent is captured in each format. In general, you will see that both formats capture the intent, but the exact command structure is quite different.
Example 1: Two Voltage Domains The first example design has one instance “u1” that operates at 1.2 V while the rest of the design operates at 1.0 V. Level shifters are required at each domain crossing. Code list 1 and Code list 2 show the CPF and UPF, respectively, for the design.
In section 1 of the files, you can see a one-to-one correspondence between the syntax elements. In CPF, the base command is “create_power_domain -name X -instances Y Z.” In UPF, the corresponding command is “create_power_domain X -elements Y Z.” This is the only instance where the two formats have the exact same command name. For a simple domain, this section may be all that’s defined by the initial RTL designer. Other extra options allow the designer to include or exclude certain pins of the blocks.
In section 2, we assign the voltages to the domains. This is required to select the proper level-shifter cells. The different formats have multiple ways of arranging the objects, as shown by the difference in commands. In CPF, we create a power net and associate it with a domain. In general, the “create_...” commands may be used early in the design process. Additional information can be added later using the “update_...” commands.
In UPF, we set voltages on ports and give them several possible power states. In this simple example, we define only one power state named “default” and specify the voltage for that state. Then we associate the ports as primary power nets for the appropriate domains.
Both CPF and UPF use the idea of a “rule” for assigning level shifters. Suppose a design has three domains at two different voltages. There will be several crossings with different domain names, but with the same voltage values on each side. One rule can be defined for each unique crossing voltage value, which reduces the amount of data that needs to be defined.
In CPF, the “-from” and “-to” options define the valid domains for the rule. In UPF, only one domain is specified at a time. Therefore, “applies_to inputs” is roughly equivalent to “-to” and “-applies_to outputs” is roughly equivalent to “-from.”
Please refresh the page if you have trouble reading this text.
Search Electronic Design
Email Newsletter
Sponsored By:
The Find Power Products monthly newsletter brings you the most important new developments within the world of power design. The newsletter includes exerpts from industry leader Sam Davis's exclusive blog, as well as overviews of the latest new products.
Enter Email to Subscribe
Web Seminar
Sponsored By:
Title: Exploring How Good GUIs Drive Adoption in the Digital Power Management Space