Get email delivery of the Cadence blog featured here
Having coincident edges shared across multiple layers is frequently not a desirable situation to be in. Just as we don’t appreciate degassing holes at the same position on adjacent layers – which can lead to dips or valleys in the finished product – the boundary and void edges for shapes often have similar desires, if not requirements.
For those of you working in silicon, for instance, the seal ring geometries have this as an explicit requirement. Your manufacturer will have rules for the offsets of the seal ring geometries from one layer to the next. How do you go about creating these staggered patterns with complex shape outlines?
It is simple to offset a filled shape’s boundary, moving it either in or out relative to the original geometry. But, when you want to move *both* the void and outer boundary in the same direction, things are a little more complicated. This is because moving the outer boundary in involves a contraction of the shape (reduction of metal), while the same movement of a void edge involves an overall metal expansion. You are adding metal when you shrink a void’s size.
Since these two actions are opposite each other, creating an offset outline in this way, where the metal width between outline and void remains constant, takes a few more steps. Each step itself is quick and easy, though, so stay with us as we walk through the process.
This flow makes use of two primary commands: Edit - Z-Copy and Shape - Shape Operations - ANDNOT. For simplicity in this example, let’s consider a circle with a round cutout, forming a consistent width of metal. An identical process is used for more complex shape outlines.
I want to create another shape that is still the same 100um wide, but inset 10um from the original. Let’s assume that we are making our new shape on a different layer from our source object. Make a direct copy (voids + outline) with no expansion or contraction of the base outline to the new layer. Next, we need references to use with the Boolean shape operations, and I can obtain these with the Z-Copy command.
Create another copy of the shape, expanded by 10um with the voids being copied. The parameters are shown below, along with the results. Because of the expansion, the inner edge has moved in; the outer edge has moved out. If we were to use this shape, we would now have a width of 120um for the ring, not the 100um we want to keep consistent.
Let’s make a second copy. Use a contraction of 10um and do not copy the voids. We only need the outer edge for our reference. Why copy something we do not need?
Now, we have all the geometries that we require. All that is left to do is combine them together to get the updating circle that we want.
To create the correct shape, we want to remove all the original voids from our base reference template. This is easy to do with the Shape - Manual Void/Cavity - Delete or the Shape Edit Application Mode. Select and delete the void(s). Below, we can see all the various outlines of shapes. This makes it easy to see the relative offsets between things.
Use the ANDNOT boolean operation between the original outline (no voids; it’s a solid, filled shape, now!) and the expanded shape from our first interaction. This will keep a solid circle only inside the contracted void boundary. Thus, we have our revised “holes” for the final shape.
Last, but certainly not least, a second ANDNOT action with our result above and the contracted outline from phase one. This will pull in the outer boundary 10um and leave us with a donut shape once more:
Comparing the geometries for the original reference and the new shape shows the effects of the operations most clearly. All radius values have pulled in by a consistent 10um, leaving us with the exact metal width we wanted.
The example above is contrived. A donut is easy. But, when you have a very complicated shape and want to perform the same actions (or if you need to offset the inner and outer edges by different amounts – perhaps pulling in the void by 15um by the outer boundary only by 5um), the exact same process can be used.
Next time you need to create staggered shapes in PCB, keep the above steps in mind. It will hopefully prove far more efficient and consistent than hand calculations to offset different segments or creating another shape manually!