

You will need to deal with different etch rates on different materials in some way, and for true realism you need to give the etched holes a realistic shape (isotropic / anisotropic). Realistic is important for many applications, and the boolean approach allows that in principle.Įtching holes is probably a little harder to program than deposition.

I would be interested to contribute (would need to learn Ruby etc).
XSECTION SOLUTIONS CODE
So, I think it is an excellent approach, as long as the boolean code handles glitches correctly (which I seem to recall it does). Also, the approach that you propose using booleans is in principle much faster than the algorithm that I implemented. Unfortunately, there are copyright issues with sharing the code. I have contacted you earlier via email on a cross-section program that I already have. I am not quite sure whether that is a stupid approach to use, so I'd appreciate feedback. The script is not nearly finished, so I don't have anything to provide yet. This script was actually used to produce the screenshot. This sample is supposed to mimic field oxide formation and deposition of some poly layer (gate oxide and all the well/implant things are omitted to keep it simple). "output" will produce the material geometry on the respective output layer. The non-conformal extreme case would be xy=0. In this case, two dimensions are specified which means that the material will grow in xy and z direction (xy first, z second). "grow" will make the given seed line grow atop of the material stack. "all" is a special mask which covers all. "mask" converts horizontal geometry into intervals along the cut line and produces thin seed lines on the surface of the current material stack. Such layers can be sized and boolean operations can be applied. It's not as simple as a table description but far more versatile.Ī sample script may look like that: m = mask(layer("3/0").sized(-0.5))įox = m.grow(0.5, 2).or(m.grow_into(0.5, 0.5, si))įor a brief description: "layer" extracts and original layer. This script must be provided for a certain technology. In that scenario, a ruby script declares the process steps by executing a sequence of operations that define input geometry, apply material modifications and output the results. This way, rulers, layer (=material) coloring, screenshot and other features are available as well. It produces a new "layout" in a new panel. A ruby script creates the material geometry and provides methods to simulate the process steps in a very simple way. A ruler specifies the cut line in the original layout. The underlying concept is to create a vertical cut where polygons represent the materials. Have a look at the screenshot about one result. IMHO it is possible to emulate the process stack more or less using the boolean and sizing functions already built into KLayout. After thinking somewhat about that request, I think I can come up with a very simple solution.
