It looks like you're new here. If you want to get involved, click one of these buttons!
During our submission we have detected some issues related mainly to zero length path/polygons, what crushes our internal tools.
We would like to develop some kind of layout sanity check in order to detect these cases and give the opportunity to the designer to correctly fix them. Right now we heave this script;
dry_run = true
eps = 1.dbu
layers.each do |spec, name|
l = input(spec)
l.raw.with_area(0).output("Zero-area polygon on #{name} (#{spec})")
l.raw.edges.with_length(0).output("Zero-length edge on #{name} (#{spec})")
l.raw.width(eps).output("Zero/near-zero width spike on #{name} (#{spec})")
l.raw.notch(eps).output("Zero/near-zero gap notch on #{name} (#{spec})")
end
Unfortunately it does not detect this two cases:
1. Path spike Spike in path at location (2221.925,2907.7) in cell SoC7610 on layer 50 datatype 0.
Path of width 1.02 on metal4 50/0
2271.28000 2901.51500
2271.28000 2907.70000
2221.92500 2907.70000
2222.02500 2907.70000
99.78500 12.30000
99.78500 43.46000
84.50500 43.46000
103.03500 43.46000
103.03500 43.26000
100.08000 43.26000
100.08000 12.30000
with the problematic point 84.50500 43.46000
We suggest to save the layout with the option "Eliminate zero-length paths (conver to BOUNDARY)" but still it does not filter out all cases.
Any suggestion on how we could proceed ?
Comments
Hi @Krzysztof,
The reflecting edge from 2. can be found with a "corner with angle" check:
This will both find inner and outer reflecting edges.
If you want to run this in deep mode, make sure you turn off polygon splitting:
For finding the reflecting path, I'd suggest a more generic check - the "odd_polygons" check. This finds polygons that are non-orientable or self-overlapping. Such polygons are bad in the broadest sense as their "inner" area depends on the wrap rule. Self-reflecting paths also create such self-overlapping polygons and also paths that reflect back in an acute angle (something worth flagging as well).
Following the documentation, this check does not work in deep mode, but that is only because with polygons splitting in place, this check does not make much sense. But it can be used when reverting to
Region#strange_polygon_check.Here are both checks combined in deep mode on layer 1/0:
Matthias