Power Intent Formats

The October blog about CPF, UPF 1.0, and IEEE 1801 power domain definitions resulted in some reader feedback and suggestions. Several points are worthy of further discussion and clarification.

Let me start with the toughest questions. What is my motivation behind the blog? Am I trying to make CPF look better than UPF/IEEE 1801?

My preferred choice of power intent should not be a surprise to anyone. But I did not write about my opinion. The examples I used were based on real issues and real code. Many of the LP designers that I talk to are quite confused about the different power formats and the various peculiarities. I have successfully used these examples to help these designers understand the issues and move forward with their designs. Therefore, it is my hope that putting these examples into the blog can help more folks.

My motivation has always been to write a blog that does not waste a single reader’s time.

One reader pointed out that for the following example, UPF 1.0 can be coded more simply.

This is certainly true. However, if PD2 contained u3 and u4, then we would have the same redundant isolation cell issue.

I also want to clarify why the 1801 coding was much more verbose. Both CPF and UPF 1.0 have been in use for a while. I assumed that the details associated with creating power nets, etc., are well known for CPF and UPF 1.0. IEEE 1801 is very new, and the supply set concept and coding may not be familiar to most designers. Therefore, I included much more 1801 coding.

A reader pointed out that my 1801 code is unnecessarily complex. The following 1801 code is much simpler:

I totally agree that is it simpler and should work. However, no one, including the person that made the suggestion, has confirmation that there is tool support for the above code. My more complex 1801 code is based on tool-proven 1801 code that I have seen from one designer. Since I don’t have access to any 1801-based tool, you will need to verify the correctness of either coding styles.

Another reader pointed a different example of the incompatibility between CPF power domain and UPF power domain. In the following example, LP cell insertion was based on UPF 1.0 but equivalence checking was based on CPF.

Based on UPF, isolation cell is inserted at location A in the netlist. Based on CPF, isolation cell is inserted at location B for the golden RTL. This resulted in a mis-compare during equivalence checking. So, which one is correct?

I’m going to go out on a limb and state my opinion that the CPF interpretation is correct.

First, timing tends to be more relaxed between two domains than within a single domain. Therefore, it makes more sense to avoid having a redundant isolation cell at location A between u1 and u2.

Second, redundant isolation at location A does not cause any logical or electrical problems. However, placing a level shifter at location A will definitely cause an electrical problem. Consider PD1 to be 1.0 V and PD2 to be 0.8V. What kind of level shifter do we insert at location A? For the path from u1 to u3, we need to shift 1.0V down to 0.8V. This 0.8V signal level cannot be driven into u2. The other alternative is not to insert level shifter at all to satisfy u1 to u2 path. But the u1 to u3 path will have 1.0 V driving into a 0.8V domain. This could also be a problem.

In order to maintain consistency in LP insertion, location B is the only choice.