PCell to create Circular Array

I'm sure many people need to populate a circular wafer with an Array of devices, where the GDS Array function doesn't quite do the trick since it only creates rectangular arrays.

I would like to make a PCell that can automatically generate a Circular array - so it can be moved, edited etc. as needed.
This is unlike making a GDS rectangular array then running resolve arrays and then delete the off-wafer die - here you lose the ability to move the entire array, change pitch/spacing, alter instance properties (unless you individually select each Instance) etc.

Has anyone done this, or have any tips on how to accomplish this?
I haven't made a PCell before, but I assume it can be a .py or .rb file placed somewhere in my KLayout path.

-- Demis


  • Hi Demis,

    the topic has been discussed in this forum already a couple of times.

    Basically for reasons of the architecture, it is impossible to generate a PCell (in a library) that instantiates a cell from the current layout. A library is a self-contained entity and cannot access the client layout. I do not recommend a PCell therefore.

    Instead, you can create a generator script - one that generates a cell placing other components like dies. This is not dynamic like a PCell, but you can add a decent user interface to compensate for that.


  • @demis, We are working on a slightly different approach to this that might be interesting to you. This is a PDK that is under heavy development, so it is in no way production ready yet, but we have a way to generate very generic arrays. It can however only place PCells. But you could make a PCell from a regular cell via KLayout's Convert to PCell-feature which is very cool.

    In our PDK, all PCells can be placed in any array; coordinates for the instances are generated via any Python code. It looks like this:

    If you tick the Array PPCell-option, you can specify a list of points where you want your PCell. In addition, you can specify a list of dictionaries with parameters for the different instances. So, as seen in the picture above, you can change the parameters for the different instances. This is probably not very useful for production, but very useful for research applications where one often wants to test to sweep a particular feature.

    If you are interested, I'd be happy to show more details about this.

Sign In or Register to comment.