Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DRC switch to exclude the kissing corner configuration (and more) #1600

Merged
merged 17 commits into from
Feb 12, 2024

Conversation

klayoutmatthias
Copy link
Collaborator

@klayoutmatthias klayoutmatthias commented Jan 24, 2024

The concept currently is based on the treatment of collinear (in-line) edges. By default, the checks include those edges, if the touch (share at least one common point).

The first part of this change is to also include touching corners for non-collinear input edges. Kissing corners can arise from situations which are non-Manhattan and in that case, the incoming edges are not necessarily collinear.

In addition, another core feature has been added to configure the behavior in the touching edges case - either to ignore such edges completely or to consider them only if the share more than a single point.

DRC functions have been equipped with two new options: "without_touching_corners" to exclude the kissing corner case and "without_touching_edges" to exclude collinear edges in general. The latter option can be useful for suppressing errors when a layer is separated into two parts - e.g. thin and wide metal parts. For implementation narrow/wide space checks ("separation between narrow and wide") it is important to suppress errors happening at the interface otherwise.

@klayoutmatthias klayoutmatthias merged commit a1c08c0 into master Feb 12, 2024
20 of 21 checks passed
klayoutmatthias added a commit that referenced this pull request Feb 12, 2024
)

* Some refactoring, introducing new configuration option for edge pair check core algorithm for zero distance handling.

* Bugfix

* Renaming for clarification of collinear edges vs. distance which is defined otherwise.

* Implemented low-level option for collinear edge handling in Edges and Region

* DRC integration of new features

* Simple test for collinear mode feature

* Updating documentation

* Experiment: extending collinear mode towards 'zero distance'

* DRC 'collinear mode' becomes 'zero distance mode'

With this change, the default implementation for kissing corners
is changed from collinear edges only to touching edges in general.

The original mode can be restored by using:

l1.space(600.nm, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(103, 0)

* Adding test data

* Fixed unit tests

* Fixed unit test

* Renamed new DRC options to: without_touching_corners and without_touching_edges as this is more consistent

* Fixed GSI binding, so no internal error is thrown when generating the doc

---------

Co-authored-by: Matthias Koefferlein <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant