This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
pcb:drc [2018/08/05 19:08] cparker |
pcb:drc [2018/09/22 13:23] cparker |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | This page will serve to document the design rule checker. | + | This page will serve to document the design rule checker. This is presently documented "as-is". |
+ | |||
+ | For work tasks, see the [[https://blueprints.launchpad.net/pcb/+spec/drc|LaunchPad blueprint]]. | ||
===DRC Violations=== | ===DRC Violations=== | ||
Line 18: | Line 20: | ||
Executing the DRC() action will wipe out the selected, found, and DRC flags on most objects, although, apparently not elements. | Executing the DRC() action will wipe out the selected, found, and DRC flags on most objects, although, apparently not elements. | ||
+ | |||
+ | - Execute the DRC() action. | ||
+ | - Generate the "DRC doesn't catch everything" warning. | ||
+ | - Save layer state and turn on all layers. | ||
+ | - Clear the FOUNDFLAG, DRCFLAG, and SELECTEDFLAG on all objects. DRC uses these flags to find errors. | ||
+ | - InitConnectionLookup -- This resets all of the lists that are used for building the connectivity map. | ||
+ | - For every element pin, pad, and via, execute DRCFind. DRCFind builds a connection list starting from the given pin/pad/via four times. See below for a more detailed description of that process (if I get around to writing it). | ||
+ | - Apply a global bloat of value "Shrink", and build a connection list, with global drc set to false. This will set the DRCFLAG and SELECTEDFLAG on every object that is touching the given pin/pad/via. | ||
+ | - Apply a global bloat of value 0, and build a connection list with global "drc" set to true. | ||
+ | | ||
+ | ===To Do List=== | ||
+ | DRC tests: | ||
+ | * Go through the DRC code for different kinds of violations to check that all possible code paths are being tested | ||
+ | * Generate graphical output for the DRC report | ||
+ | * Generate LaTeX output for the DRC report (wishlist!) | ||
+ | * Figure out what else uses the "ConnectionLookup" code and write tests so that we don't break anything else as we're reworking the DRC | ||
+ | |||
+ | DRC backend work: | ||
+ | * Separate the DRC code from the "ConnectionLookup" code. | ||
+ | * Get rid of the "drc", "User", and "AndDraw" parameters. (Still trying to figure out what the implications of this would be) | ||
+ | * Factor all of the different DRC tests into separate functions so that they can be executed individually. | ||
+ | * Have DRC functions operate on "DataType" objects so that you can selectively apply the DRC to, say, the objects in the buffer | ||
+ | * Work through more of Peter C's work to see how much of it we should incorporate (home/cparker/peterc_drc, he has quite a bit of good stuff here, but I'd like to include it intelligently instead of just picking the commits.) | ||
+ | |||
+ | DRC interface: | ||
+ | * Create a DRC panel in the preferences window that allows for adjusting settings (possibly with image descriptions of the violations) and running specific tests individually | ||
+ | * Figure out what the lesstif HID requirements are for the DRC code (it works differently, presenting violation by violation) | ||
+ | |||
+ | DRC bugs: | ||
+ | * Highlight both offending objects instead of just one^^^ | ||
+ | * Find more than one "insufficient overlap" or "insufficient gap" per pin/pad/via^^^ | ||
+ | * Check for duplicate DRC errors before appending a new one (can happen if more than one pin is connected to an object) | ||
+ | * On MacOS the images in the DRC window of the GTK HID are garbled |