Welcome to my first blog post! My plan for this space is to share with you various tips and tricks in SoC-Encounter as well as new things I learn along the way. I use Encounter every day as part of my job in Cadence Design Services. Knowledge is a two-way street, so I'm hoping that we'll have some good comments revealing how you, the customers, are using Encounter as well. Now, on to business!
My team had a situation this week where the followpins (the metal1 std cell rails) did not extend all the way to the edge of a hierarchical block. Depending on your design methodology, this may or may not be a real problem, but for us it was. Of course, we could regenerate the power grid from scratch, but that solution did not appeal to us. It's fairly easy to grab all the metal1 rails and just drag the ends to the edge of the block, so we did that. However, not all of the metal1 rails were showing up in the LEF. Here is the lefOut command we use, so that all power stripes appear as pins:
lefOut block.lef -noCutObs -stripePin -pgPinLayers 1 2 3 4 5 6 7 8 9
For some reason, only one of our VDD nets (we have two) was being recognized as a power net, so we had VSS pins and VDD pins, but no A_VDD pins. I remembered a script I wrote long ago to read in the power stripes and create square pins on each end of the stripe. I was not relishing having to dig that out and hack it to work for this project. Luckily, createPGPin came to the rescue! At first I thought it would be as tedious as hacking my old script, having to give coordinates for each pin. But a physical pin shape on each power stripe was not necessary. All that was needed was a logical pin in the database, so that lefOut would recognize the stripes as pgPins and create them in the LEF:
createPGPin -net A_VDD A_VDD
After doing this, our LEF contained all the pins we wanted and we were back on track. The createPGPin command added a line to the PGPin section of the block.fp file declaring a pin called A_VDD connected to the power net A_VDD. I suppose you could add this line by hand, but using createPGPin is easier, especially if you are scripting up a bunch of changes like this.
If you have some creative uses for createPGpin, let's hear about it in the comments. Is it part of your normal flow? Is it a new command to you, but you can think of ways to use it in your designs? Or maybe you have a different solution to the same kind of problem we had. I look forward to some discussion!