Get email delivery of the Cadence blog featured here
Vias are present in every design (except maybe some lead frames and the very rare single-layer substrate). Where they are placed, and how many there are, will depend on a slew of factors, though, as we know.
There are different situations and reasons for vias, even. The most common of this, naturally, is to move a routed trace from one layer to another. They can also be used for shielding of critical signals, return paths, carrying of extra current in high power situations. The list goes on.
If you are adding sets of vias to shield and protect signals, one of the best flows to add them is with the Place – Via Arrays interface. This is what we’re here to talk about today. To give you an idea of what you can do with this command set. And, beyond that, to show you the significant improvements to the use model that have been made in 17.4 over the 17.2 release’s version of this command.
So, come with us on our journey of discovery!
In the 17.2 release, should you have used these commands, you are probably aware that there were three individual menu commands: Matrix, Boundary, and Unplace (Delete). With 17.4, however, these have been combined together into a single, comprehensive command for all your via array management.
Doing this may seem insignificant at first glance. However, it allows you, as a user, to perform all your work on the via arrays within the same command. You can undo mistakes and make changes while moving between modes. Add some vias in boundary mode then, after that’s finished, switch to matrix mode to complete.
That’s hardly it, though. The most significant use model improvement is the feature that was added to 17.4 but didn’t exist at all in 17.2: update/refresh of via array groups and patterns. In the image below showing the command interface, you’ll see this at the top level beside Place and Delete.
Update will allow you to make changes to existing configurations. Whether this is to adapt to changes in surrounding routing objects or merely to increase/decrease the number of vias in the set, you are not obliged, with 17.4, to delete the existing patterns and redefine them. This can save you a significant amount of effort (and not just the delete and recreate – remembering your settings. I don’t know about you, but my memory for things I did last week is FAR from perfect!).
Many of the parameters for via arrays are the same as they were in 17.2. The UI itself looks different because of the overall GUI modernization in the 17.4 release. Additionally, now you will see pictures right there in the options form to help you better visualize the various configuration parameters. See the image below:
Rather than Matrix and Boundary commands, you will find that you have array parameters at the bottom.
Matrix modes include across the entire substrate, just a shape, or inside a specific window,
Via/Pin modes are limited to radial (place an array of vias around the pad),
Cline modes include between traces, one or two sides of single traces, or surrounding the trace. You can also place vias centered on the selected trace.
When moving between these modes the available parameters and the image will change, keeping you apprised of what you are setting, what your configurable values are, and how they will impact the results you get. Don’t forget the dynamic preview, either! Static pictures are great but seeing what things REALLY will look like IN your design… invaluable.
Examples below will hopefully help you to understand the different things you can achieve with these commands. Take the cline/segment-driven via arrays that we see here:
Some will be driven, like the one side option, based on further input as you move your cursor around (you need to pick *which* side of the cline you want the vias on. A left/right, clockwise/counter-clockwise option isn’t suitable. Traces can, and will, bend around and change angles over the complete path of the route.
When placing things in the matrix mode, whether in a given area or across the entire substrate, as many vias will be placed that can fit given your criteria (but that also won’t result in DRC spacing violations to the routing objects in that area!).
Below, we’ve created a matrix flood of vias here. You can see all the vias in the pattern which were depopulated because there were objects in the way. In this mode, the available placements don’t shift or bubble around those objects. Only those positions in the placement array will get instantiated. You can see where the second trace from the left jogs to the right. This becomes too close to the column of vias, meaning the top two positions get suppressed.
If you won’t get enough vias based on your settings, it may be necessary to change the array options (Can you switch to a staggered pattern? Use a different via padstack with smaller pads? Decrease the pitch between rows and columns?). You can do this on the fly in the command and tweak settings to get to the results that you want. It may be possible to place multiple arrays, even; which you can do easily within the command – not unlike you can define multiple passes of degassing holes for your complex shapes.
If a picture’s worth 1000 words, is a video as good as an essay? Let’s hope so. Here’s a quick illustration of the previews and different array types in action.
I hope this gives you genuine inspiration. How will you leverage via arrays to improve your designs? Can you design faster using them? Achieve better reliability of the substrate? Let us know your results and how we can improve!