001_full_flow : Full Flow Example
This example demonstrates running Guardian Design Rule Checking on a layout in the Expert interactive layout environment, and viewing any violations found.
Requires : Expert, Guardian
Minimum Version
: Expert 4.14.0.R, Guardian 4.14.0.R
You will also need to download, from this example's web page, the two data files: drc_full_flow_28.eld (the design database) and drc_full_flow_28.dsf (the DRC script).
1. Opening the layout in Expert
First start the Expert layout editor program, either with the command expert or by clicking the expert icon.
From the main menu bar at the top, click File->Open to open the Load Project menu, navigate to the directory into which the drc_full_flow_28.eld design database file was downloaded and Open it.
This will call up the Open Cell(s) menus, and here double-click mux4 , the top-level cell. By default this shows the hierarchical view of the design; you can see the full details by clicking View->Cell View->Flat .
See Figure1
2. Setting up DRC
The next step is to load the DRC script (also known as deck or runset). From the main Expert menu, click Verification->DRC->DRC script panel. This pops up the DRC Script Panel , and in here click File->Open to open the Select DRC Script File(s) menu, navigate to the directory into which the drc_full_flow_28.dsf DRC script file was downloaded and Open it. The DRC script is then shown in the DRC Script Panel .
See Figure2
3. Running DRC
You can enable progress bars, to monitor progress of the run, from the DRC Script Panel with Setup->Current DRC script run preferences... and in the popup window check Script progress bar and Command progress bar. If the progress bars are not enabled you will instead see a timer icon while the DRC is running.
The Setup->Current DRC script run preferences... menu also contains further options to customize the run, for example to limit the number of errors output or show the run log.
To run DRC, click DRC->Run in the DRC Script Panel
4. Selecting and Loading DRC Results
After DRC has been run, any DRC violations found can be viewed interactively on top of the original layout in Expert. From the Expert main menu, first load the DRC results into the Expert layout database with Verification->DRC->Errors->Load Errors. This opens the Load DRC Errors menu.
See Figure3
The first panel, Runs , in the Load DRC Errors menu shows one line for every time you have run DRC. Normally you will only be interested in the latest run, but it can be useful to see and compare the results from previous runs, for example to check that any fixes made to the layout have been successful. You can delete any previous runs that are no longer of use.
The second panel, Checks , shows a list of the individual DRC rule checks for the selected DRC run. By default it only shows rule checks which found errors, but clicking Show All will show every rule check done, even if it did not find any errors. If there are only a few errors found you can click Select All so that all the errors will be shown on the layout together, however if there are a lot of errors this can make it difficult to view individual errors, so you can select specific errors and look at them one at a time.
The final panel in Load DRC Errors is Errors and Cells. This allows further refinement of the error viewing when hierarchical error report is selected, but is not used in this example.
After selecting the required errors to view, click Load at the bottom of the Load DRC Errors panel; this loads the selected DRC errors into the layout database and they can now be viewed on the layout.
5. Viewing DRC Results
After Loading the DRC errors in the previous step, you can now use the Expert interactive error viewing facility to zoom into, and show explanations of, the errors.
To do this, click Verification->DRC->Errors->First error to show the first error , then Verification->DRC->Errors->Next error to show subsequent errors. There are several options to refine this, for example Verification->DRC->Errors->Filled error markers will show the error bars filled in. See Figure4 and Figure5 .
Note that all of the DRC operations can also be accessed directly from icons in the menu bars, rather than using the cascading menu commands shown in this text. Holding the mouse over an icon shows its function, or you can refer to the manual for a full description of the icons and the commands.
drc_full_flow_28.dsf
/////////////////////////////////////////////////////////// // DRC script for logic demo // Layer Mapping and Setup Commands (resolution etc) // are taken from the technology file. // When running DRC from Expert, the technology file // is included in the design database (.eld) // When running DRC on a gds2 file in batch, the technology // file (.tcn) must be specified in the batch file /////////////////////////////////////////////////////////// Update_layout: input=no, technology=no, new=no; output_error_subsegments: yes; Merge_Input: on; //////////////////// // Global Defines // //////////////////// Substrate: LayerR=&A; Logicform: PSUB=&A.dif.(N_WELL.or.DEEP_N_WELL); Logicform: Nactive_in_PWELL=(N_PLUS_SELECT.and.ACTIVE.and.PSUB); Logicform: ISOPWELL=DEEP_N_WELL.dif.N_WELL; Logicform: Nactive_in_ISOPWELL=(N_PLUS_SELECT.and.ACTIVE.and.ISOPWELL); Logicform: Pactive_in_NWELL=P_PLUS_SELECT.and.ACTIVE.and.N_WELL; Logicform: NWELL_TIE=N_PLUS_SELECT.and.ACTIVE.AND.N_WELL; Logicform: PSUB_TIE=(P_PLUS_SELECT.and.ACTIVE).DIF.N_WELL; Logicform: SD_ACTIVE=(P_PLUS_SELECT.and.ACTIVE.AND.N_WELL).or.((N_PLUS_SELECT.and.ACTIVE).DIF.N_WELL); Logicform: SUB_TIE_ACTIVE=(NWELL_TIE).or.(PSUB_TIE); ////////////////////////// // Connectivity Defines // ////////////////////////// Connect: Layer1=N_WELL, Layer2=NWELL_TIE ,LayerC=CONTACT, Options =(I-); Connect: Layer1=PSUB, Layer2=PSUB_TIE ,LayerC=CONTACT, Options =(I-); /////////////////// //Rules for N_WELL /////////////////// //1.1 Minimum width Select: Relation=overlap, Layer1=N_WELL, layer2=THICK_ACTIVE, LayerR=REG_NWELL, Options=(not); Width: Layer = REG_NWELL, Limits<10, ID= "1.1 Minimum width"; //1.2 Minimum spacing between wells at different potential OutDistance: Layer = N_WELL, Limits<9 , Options=(C), ID= "1.2 Minimum spacing between wells at different potential"; //1.3 Minimum spacing between wells at same potential OutDistance: Layer = N_WELL, Limits<6, Options=(N,C'), ID= "1.3 Minimum spacing between wells at same potential"; //1.4 Minimum spacing between wells of different type (if both are drawn) Logicform: OVERLAPPING_WELLS=(N_WELL).and.(P_WELL); Copy: Layer=OVERLAPPING_WELLS, ID="1.4 Minimum spacing between wells of different type (if both are drawn)"; /////////////////// //Rules for ACTIVE /////////////////// //2.1 Minimum width Width: Layer = ACTIVE, Limits<2.5 , ID= "2.1 Minimum width"; //2.2 Minimum spacing OutDistance: Layer = ACTIVE, Limits<3 , Options=(N), ID= "2.2 Minimum spacing"; //2.3 Source/drain active to well edge InDistance: Layer1 = SD_ACTIVE, Layer2 = N_WELL, Limits<5 , Options=(T), ID="2.3 Source/drain active to well edge"; OutDistance: Layer1 = SD_ACTIVE, Layer2 = N_WELL, Limits<5 , Options=(T), ID="2.3 Source/drain active to well edge"; //2.4 Substrate/well contact active to well edge InDistance: Layer1 = SUB_TIE_ACTIVE, Layer2 = N_WELL, Limits<2, Options=(T), ID="2.4 Substrate/well contact active to well edge"; OutDistance: Layer1 = SUB_TIE_ACTIVE, Layer2 = N_WELL, Limits<2, Options=(T), ID="2.4 Substrate/well contact active to well edge"; //2.5 Minimum spacing between non-abutting active of different implant. Abutting active ("split-active") is illustrated under Select Layout Rules. Select: Layer1=P_PLUS_SELECT, Layer2=N_PLUS_SELECT, LayerR=PtouchN, relation=touch; Select: Layer1=N_PLUS_SELECT, Layer2=P_PLUS_SELECT, LayerR=NtouchP, relation=touch; Logicform: naaodi=(PtouchN.or.NtouchP).and.ACTIVE; OutDistance: Layer = naaodi, Limits<4, Options=(N), ID= "2.5 Minimum spacing between non-abutting active of different implant. Abutting active (split-active) is illustrated under Select Layout Rules."; /////////////////// //Rules for POLY /////////////////// Logicform: TRANSISTOR=(POLY.and.ACTIVE); //3.1 Minimum width Width: Layer = POLY, Limits<2 , ID= "3.1 Minimum width"; //3.2 Minimum spacing over field Logicform: FIELDPOLY=POLY.DIF.ACTIVE; OutDistance: Layer = FIELDPOLY, Limits<2 , Options=(N), ID= "3.2 Minimum spacing over field"; //3.2.a Minimum spacing over active OutDistance: Layer = TRANSISTOR, Limits<2, Options=(N), ID= "3.2.a Minimum spacing over active"; //3.3 Minimum gate extension of active InDistance: Layer1 = TRANSISTOR, Layer2 = POLY, Limits<2, ID="3.3 Minimum gate extension of active"; //3.4 Minimum active extension of poly InDistance: Layer1 = TRANSISTOR, Layer2 = ACTIVE, Limits<3, ID="3.4 Minimum active extension of poly"; //3.5 Minimum field poly to active OutDistance: Layer1=POLY, Layer2=ACTIVE, Limits<1 , Options=(T), ID="3.5 Minimum field poly to active"; /////////////////// //Rules for N_PLUS_SELECT /////////////////// Logicform: SELECT=N_PLUS_SELECT.or.P_PLUS_SELECT; //4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width OutDistance: Layer1 = TRANSISTOR, Layer2 = SUB_TIE_ACTIVE, Limits<3, ID= "4.1 Minimum select spacing to channel of transistor"; //4.2 Minimum select overlap of active InDistance: Layer1 = ACTIVE, Layer2 = SELECT, Limits<1, Options=(T), ID="4.2 Minimum select overlap of active"; //4.3 Minimum select overlap of contact InDistance: Layer1 = CONTACT, Layer2 = SELECT, Limits<1 , Options=(T), ID="4.3 Minimum select overlap of contact"; //4.4 Minimum select width and spacing Width: Layer = SELECT, Limits<2 , ID= "4.4 Minimum select width and spacing "; //4.4 Minimum select width and spacing OutDistance: Layer = SELECT, Limits<2 , Options=(N), ID= "4.4 Minimum select width and spacing "; Logicform: BAD_SELECT=N_PLUS_SELECT.and.P_PLUS_SELECT; COPY: Layer=BAD_SELECT, ID="P-select and N-select may be coincident, but must not overlap"; /////////////////// //Rules for CONTACT /////////////////// //5.1, 6.1 Exact contact size SQUARE: Layer=CONTACT, LayerR=BAD_CONTACT, Value=2, Type=EQ, Options=(NOT); Copy: Layer=BAD_CONTACT, ID="5.1, 6.1 Exact contact size"; //5.2 Minimum poly overlap InDistance: Layer1 = CONTACT, Layer2 = POLY, Limits<1.5 , Options=(T), ID="5.2 Minimum poly overlap"; //5.3, 6.3 Minimum contact spacing OutDistance: Layer = CONTACT, Limits<2, Options=(N), ID= "5.3, 6.3 Minimum contact spacing"; //5.4, 6.4 Minimum spacing to gate of transistor OutDistance: Layer1=CONTACT, Layer2=TRANSISTOR, Limits<1.5 , Options=(T), ID="5.4, 6.4 Minimum spacing to gate of transistor"; /////////////////// //Rules for Active Contact /////////////////// //6.2 Minimum active overlap InDistance: Layer1 = CONTACT, Layer2 = ACTIVE, Limits<1 , Options=(T), ID="6.2 Minimum active overlap"; /////////////////// //Rules for METAL1 /////////////////// //7.1 Minimum width Width: Layer = METAL1, Limits<3 , ID= "7.1 Minimum width"; //7.2 Minimum spacing OutDistance: Layer = METAL1, Limits<1.5 , Options=(N), ID= "7.2 Minimum spacing"; //7.3 Minimum overlap of any contact InDistance: Layer1 = CONTACT, Layer2 = METAL1, Limits<1, Options=(T), ID="7.3 Minimum overlap of any contact"; Undersize: layer=METAL1, LayerR=&big_metal1, value=5.0; Oversize: layer=&big_metal1, LayerR=wide_metal1, value=5.0; //7.4 Minimum spacing when either metal line is wider than 10 lambda OutDistance: Layer1=wide_metal1, Layer2=METAL1, Limits<4 , Options=(T), ID="7.4 Minimum spacing when either metal line is wider than 10 lambda"; /////////////////// //Rules for VIA /////////////////// //8.1 Exact size 2 x 2 SQUARE: Layer=VIA, LayerR=BAD_VIA, Value=2, Type=EQ, Options=(NOT); Copy: Layer=BAD_VIA, ID="8.1 Exact size 2 x 2"; //8.2 Minimum via1 spacing OutDistance: Layer=VIA, Limits<3 , Options=(T), ID="8.2 Minimum via1 spacing for 3+Metal Process"; //8.3 Minimum overlap by metal1 InDistance: Layer1 = VIA, Layer2 = METAL1, Limits<1 , Options=(T), ID="8.3 Minimum overlap by metal1"; //8.4 Minimum spacing to contact for technology codes mapped to processes that do not allow stacked vias (SCNA, SCNE, SCN3M, SCN3MLC) 2 n/a n/a 2 2 n/a OutDistance: Layer1 = VIA, Layer2 = CONTACT, Limits<1.5 , Options=(T), ID="8.4 Min VIA to contact(no stacked vias)"; //8.5 Minimum spacing to poly or active edge for technology codes mapped to processes that do not allow stacked vias (NOTE Logicform: PorA=POLY.or.ACTIVE; OutDistance: Layer1 = VIA, Layer2 =PorA, Limits<2 , ID="8.5 Minimum spacing to poly or active edge(no stacked vias)"; InDistance: Layer1 = VIA, Layer2 = PorA, Limits<2 , ID="8.5 Minimum spacing to poly or active edge(no stacked vias)"; /////////////////// //Rules for METAL2 /////////////////// //9.1 Minimum width Width: Layer = METAL2, Limits<3 , ID= "9.1 Minimum width"; //9.2 Minimum spacing OutDistance: Layer = METAL2, Limits<1, Options=(N), ID= "9.2 Minimum spacing"; //9.3 Minimum overlap of via1 InDistance: Layer1 = VIA, Layer2 = METAL2, Limits<1 , Options=(T), ID="9.3 Minimum overlap of via1"; Undersize: layer=METAL2, LayerR=&big_metal2, value=5.0; Oversize: layer=&big_metal2, LayerR=wide_metal2, value=5.0; //9.4 Minimum spacing when either metal line is wider than 10 lambda OutDistance: Layer1=wide_metal2, Layer2=METAL2, Limits<6, Options=(T), ID="9.4 Minimum spacing when either metal line is wider than 10 lambda"; /////////////////// //Rules for POLY2 for Capacitor /////////////////// Select: Layer1=POLY2, Layer2=POLY, LayerR=POLY2CAP, Relation=Inside; //11.1 Minimum width Width: Layer = POLY2CAP, Limits<3, ID= "11.1 Minimum width"; //11.2 Minimum spacing OutDistance: Layer = POLY2CAP, Limits<3, Options=(N), ID= "11.2 Minimum spacing"; //11.3 Minimum poly overlap InDistance: Layer1 = POLY2CAP, Layer2 = POLY, Limits<2, Options=(T), ID="11.3 Minimum poly overlap"; //11.4 Minimum spacing to active or well edge OutDistance: Layer1=POLY2CAP, Layer2=ACTIVE, Limits<2, Options=(T), ID="11.4 Minimum spacing to active or well edge"; OutDistance: Layer1=POLY2CAP, Layer2=N_WELL, Limits<2, Options=(T), ID="11.4 Minimum spacing to active or well edge"; InDistance: Layer1=POLY2CAP, Layer2=N_WELL, Limits<2, Options=(T), ID="11.4 Minimum spacing to active or well edge"; Logicform: POLYCONTACT=POLY.and.CONTACT.DIF.POLY2; //11.5 Minimum spacing to poly contact OutDistance: Layer1=POLY2CAP, Layer2=POLYCONTACT, Limits<3, Options=(T), ID="11.5 Minimum spacing to poly contact"; //11.6 Minimum spacing to unrelated metal DISCONNECT: Layer=GLASS; DISCONNECT: Layer=METAL1; Connect: Layer1=POLY2CAP, Layer2=METAL1 , LayerC=CONTACT, Options =(I-); CONNECT_ORDER:; OutDistance: Layer1=POLY2CAP, Layer2=METAL1, Limits<2, Options=(C), ID="11.6 Minimum spacing to unrelated metal"; /////////////////// //Rules for VIA2 /////////////////// //14.1 Exact size SQUARE: Layer=VIA2, LayerR=BAD_VIA2, Value=2, Type=EQ, Options=(NOT); Copy: Layer=BAD_VIA2, ID="14.1 Exact size"; //14.2 Minimum spacing OutDistance: Layer = VIA2, Limits<3 , Options=(N), ID= "14.2 Minimum spacing"; //14.3 Minimum overlap by metal2 InDistance: Layer1 = VIA2, Layer2 = METAL2, Limits<1 , Options=(T), ID="14.3 Minimum overlap by metal2"; //14.4 Minimum spacing to via1"; OutDistance: Layer1=VIA2, Layer2=VIA, Limits<2, Options=(T), ID="14.4 Minimum spacing to via1 (no stacked vias)"; //14.5 Via2 may be placed over contact /////////////////// //Rules for METAL3 /////////////////// //15.1 Minimum width Width: Layer = METAL3, Limits<6 , ID= "15.1 Minimum width"; //15.2 Minimum spacing to metal3 OutDistance: Layer = METAL3, Limits<4 , Options=(N), ID= "15.2 Minimum spacing to metal3"; //15.3 Minimum overlap of via2 InDistance: Layer1 = VIA2, Layer2 = METAL3, Limits<2 , Options=(T), ID="15.3 Minimum overlap of via2"; Undersize: layer=METAL3, LayerR=&big_metal3, value=5.0; Oversize: layer=&big_metal3, LayerR=wide_metal3, value=5.0; //15.4 Minimum spacing when either metal line is wider than 10 um OutDistance: Layer1=wide_metal3, Layer2=METAL3, Limits<8 , Options=(T), ID="15.4 Minimum spacing when either metal line is wider than 10 um"; /////////////////// //Rules for PBASE (SCNA ONLY) /////////////////// Logicform: PBASE_CON=PBASE.and.CONTACT; //16.1 All active contact SQUARE: Layer=PBASE_CON, LayerR=BAD_PBASE_CON, Value=2, Type=EQ, Options=(NOT); Copy: Layer=BAD_PBASE_CON, ID="16.1 All active contact"; /////////////////// //Rules for VIA3 /////////////////// //21.1 Exact size SQUARE: Layer=VIA3, LayerR=BAD_VIA3, Value=2, Type=EQ, Options=(NOT); Copy: Layer=BAD_VIA3, ID="21.1 Exact size"; //21.2 Minimum spacing OutDistance: Layer = VIA3, Limits<3, Options=(T), ID="21.2 Minimum spacing"; //21.3 Minimum overlap by Metal3 InDistance: Layer1 = VIA3, Layer2 = METAL3, Limits<2, Options=(T), ID="21.3 Minimum overlap by Metal3"; /////////////////// //Rules for METAL4 /////////////////// //22.1 METAL4 width Width: Layer = METAL4, Limits<6, ID= "22.1 METAL4 width"; //22.2 METAL4 space OutDistance: Layer = METAL4, Limits<6, Options=(N), ID= "22.2 METAL4 space"; //22.3 METAL4 overlap of VIA3 InDistance: Layer1 = VIA3, Layer2 = METAL4, Limits<2 , Options=(T), ID="22.3 METAL4 overlap of VIA3"; Undersize: layer=METAL4, LayerR=&big_metal4, value=5.0; Oversize: layer=&big_metal4, LayerR=wide_metal4, value=5.0; //22.4 Minimum spacing when either metal line is wider than 10 um OutDistance: Layer1=wide_metal4, Layer2=METAL4, Limits<6, Options=(T), ID="22.4 Minimum spacing when either metal line is wider than 10 um"; /////////////////// //Rules for THICK_ACTIVE /////////////////// //24.1 Minimum width Width: Layer = THICK_ACTIVE, Limits<4 , ID= "24.1 Minimum width"; //24.2 Minimum spacing OutDistance: Layer = THICK_ACTIVE, Limits<4, Options=(N), ID= "24.2 Minimum spacing"; //24.3 Minimum ACTIVE overlap InDistance: Layer1 = ACTIVE, Layer2 = THICK_ACTIVE, Limits<4, ID="24.3 Minimum ACTIVE overlap"; //24.4 Minimum space to external ACTIVE OutDistance: Layer1=THICK_ACTIVE, Layer2=ACTIVE, Limits<4, Options=(T), ID="24.4 Minimum space to external ACTIVE"; Logicform: TGPOLY=THICK_ACTIVE.and.POLY; //24.5 Minimum poly width in a THICK_ACTIVE gate Width: Layer = TGPOLY, Limits<3 , ID= "24.5 Minimum poly width in a THICK_ACTIVE gate"; //24.6 Every ACTIVE region is either entirely inside THICK_ACTIVE or entirely outside THICK_ACTIVE Select: Layer1=ACTIVE, Layer2=THICK_ACTIVE, LayerR=BAD_ACTIVE, Relation=CUT; Copy: Layer=BAD_ACTIVE, ID="24.6 ACTIVE is entirely inside THICK_ACTIVE or entirely outside THICK_ACTIVE"; /////////////////// //Rules for VIA4 /////////////////// //25.1 Exact size SQUARE: Layer=VIA4, LayerR=BAD_VIA4, Value=2, Type=EQ, Options=(NOT); Copy: Layer=BAD_VIA4, ID="25.1 Exact size"; //25.2 Minimum spacing OutDistance: Layer = VIA4, Limits<3 , Options=(N), ID= "25.2 Minimum spacing"; //25.3 Minimum overlap by Metal4 InDistance: Layer1 = VIA4, Layer2 = METAL4, Limits<2 , Options=(T), ID="25.3 Minimum overlap by Metal4"; /////////////////// //Rules for METAL5 /////////////////// //26.1 Minimum width Width: Layer = METAL5, Limits<6, ID= "26.1 Minimum width"; //26.2 Minimum spacing to Metal5 OutDistance: Layer = METAL5, Limits<4 , Options=(N), ID= "26.2 Minimum spacing to Metal5"; //26.3 Minimum overlap of Via4 InDistance: Layer1 = VIA4, Layer2 = METAL5, Limits<2, Options=(T), ID="26.3 Minimum overlap of Via4"; Undersize: layer=METAL5, LayerR=&big_metal5, value=5.0; Oversize: layer=&big_metal5, LayerR=wide_metal5, value=5.0; //26.4 Minimum spacing when either metal line is wider than 10 um OutDistance: Layer1=wide_metal5, Layer2=METAL5, Limits<8, Options=(T), ID="26.4 Minimum spacing when either metal line is wider than 10 um"; /////////////////// //Rules for VIA5 /////////////////// //29.1 Exact size SQUARE: Layer=VIA5, LayerR=BAD_VIA5, Value=3, Type=EQ, Options=(NOT); Copy: Layer=BAD_VIA5, ID="29.1 Exact size"; //29.2 Minimum spacing OutDistance: Layer = VIA5, Limits<4, Options=(T), ID="29.2 Minimum spacing"; //29.3 Minimum overlap by Metal5 InDistance: Layer1 = VIA5, Layer2 = METAL5, Limits<1, Options=(T), ID="29.3 Minimum overlap by Metal5"; /////////////////// //Rules for METAL6 /////////////////// //30.1 Minimum width Width: Layer = METAL6, Limits<6, ID= "30.1 Minimum width"; //30.2 Minimum spacing to Metal6 OutDistance: Layer = METAL6, Limits<5 , Options=(N), ID= "30.2 Minimum spacing to Metal6"; //30.3 Minimum overlap of Via5 InDistance: Layer1 = VIA5, Layer2 = METAL6, Limits<1, ID="30.3 Minimum overlap of Via5"; Undersize: layer=METAL6, LayerR=&big_metal6, value=5.0; Oversize: layer=&big_metal6, LayerR=wide_metal6, value=5.0; //30.4 Minimum spacing when either metal line is wider than 10 um OutDistance: Layer1=wide_metal6, Layer2=METAL6, Limits<10 , Options=(T), ID="30.4 Minimum spacing when either metal line is wider than 10 um"; /////////////////// //Rules for DEEP_N_WELL /////////////////// //31.1 Minimum Width, Deep_N_Well Width: Layer = DEEP_N_WELL, Limits<22.5, ID= "31.1 Minimum Width, Deep_N_Well"; //31.2 Minimum Spacing, Deep_N_Well to Deep_N_Well OutDistance: Layer = DEEP_N_WELL, Limits<50, Options=(N), ID= "31.2 Minimum Spacing, Deep_N_Well to Deep_N_Well"; //31.3 Minimum extension, N_Well beyond Deep_N_Well edge Logicform: NWELLS=N_WELL.or.DEEP_N_WELL; InDistance: Layer1 = DEEP_N_WELL, Layer2 = NWELLS, Limits<4, ID="31.3 Minimum extension, N_Well beyond Deep_N_Well edge"; //31.4 Minimum overlap, N_Well over Deep_N_Well edge OvDistance: Layer1 = N_WELL, Layer2 = DEEP_N_WELL, Limits<0.5, ID="31.4 Minimum overlap, N_Well over Deep_N_Well edge"; //31.5 Minimum spacing, Deep_N_Well to unrelated N_Well DISCONNECT: Layer=DEEP_N_WELL; DISCONNECT: Layer=N_WELL; Connect: Layer1=DEEP_N_WELL, Layer2=DEEP_N_WELL ,Options =(T+); CONNECT_ORDER:; OutDistance: Layer1=DEEP_N_WELL, Layer2=N_WELL, Limits<35, Options=(C), ID="31.5 Minimum spacing, Deep_N_Well to unrelated N_Well"; //31.6 Minimum spacing, N+Active in isolated P-well, to N_Well OutDistance: Layer1=Nactive_in_ISOPWELL, Layer2=N_WELL, Limits<5, Options=(T), ID="31.6 Minimum spacing, N+Active in isolated P-well, to N_Well"; //31.7 Minimum spacing, external N+Active to Deep_N_Well OutDistance: Layer1=Nactive_in_PWELL, Layer2=DEEP_N_WELL, Limits<30, Options=(T), ID="31.7 Minimum spacing, external N+Active to Deep_N_Well"; //31.8 Minimum spacing, P+Active in N_Well to its Deep_N_Well OutDistance: Layer1=Pactive_in_NWELL, Layer2=DEEP_N_WELL, Limits<10 , Options=(T), ID="31.8 Minimum spacing, P+Active in N_Well to its Deep_N_Well";