-
Notifications
You must be signed in to change notification settings - Fork 212
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
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…check core algorithm for zero distance handling.
…efined otherwise.
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)
…hing_edges as this is more consistent
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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.