User Tools

Site Tools


pcb:drc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
pcb:drc [2018/09/23 13:48]
cparker
pcb:drc [2018/12/09 13:13]
cparker
Line 26: Line 26:
   - Generate the "DRC doesn'​t catch everything"​ warning.   - Generate the "DRC doesn'​t catch everything"​ warning.
   - Save layer state and turn on all layers.   - Save layer state and turn on all layers.
-  - Clear the FOUNDFLAG, DRCFLAG, and SELECTEDFLAG on all objects. DRC uses these flags to find errors.+  - Clear the FOUNDFLAG, DRCFLAG, and SELECTEDFLAG on all objects. DRC uses these flags to find errors. After clearing all the flags, the undo serial number is incremented. When we're done, we'll clear all the flags again, and execute an "​undo"​ to restore the state.
   - InitConnectionLookup -- This resets all of the lists that are used for building the connectivity map.   - 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). +  ​- Use DRCFind to check for "​insufficient overlap"​ and "​insufficient clearance"​ in copper objects. 
-    - 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. +    ​- For every element pin, pad, and via, execute DRCFind. DRCFind builds a connection list starting from the given pin/pad/via four times using the [[pcb:​connection_lookup | "​connection lookup"​]] code. 
-    - Apply a global bloat of value 0, and build a connection list with global "​drc"​ set to true.+    - Check for insufficient overlap: 
 +      - 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. 
 +      - With "​drc"​ set to true, the add_object_to_list function will exit with a return status when it finds something that doesn'​t have the SELECTEDFLAG set. "​Thing"​ is set to the new object. 
 +      - This status propagates back up, and the connection lookup is terminated early. 
 +      - A drc_violation is created that includes the "​Thing"​ object. 
 +    - Check for insufficient clearance:​ 
 +      - Do the same routine as above, except starting with a global bloat of 0, and using a bloat of "​Bloat"​ for the second run through. 
 +  - Check for minimum copper line widths: 
 +    - Iterate over all copper lines with COPPERLINE_LOOP 
 +    - Test the thickness value of the line 
 +    - Generate a drc_violation if the thickness is too thin. 
 +    - Iterate over all copper arcs with COPPERARC_LOOP 
 +    - ditto 
 +  - Check pin annular rings 
 +  - Check drill sizes 
 +  - Check pad widths 
 +  - Check via annular rings 
 +  - Check via drill sizes 
 +  - Check silk line widths 
 +  - Check element silk line widths 
 +  - Restore the layer stack visibility 
 +  - return the number of violations found
   ​   ​
 ===To Do List=== ===To Do List===
pcb/drc.txt · Last modified: 2020/06/28 12:37 by cparker