Checking Designs

Verifying a design can be a complex task. An automatic design rule check has been standard for many years in the area of IC design and it is getting more standard in the areas of MEMS, Microwave, PCBs, etc. A versatile Design Rule Checker is integrated into the LayoutEditor. A complete design check can be triggered by calling a DRC macro. Any single check can also be called manually. The LayoutEditor supports many different design rule checks. More checks are supported than a simple IC design requires. For all tests, the area to be checked can be specified as well as how rule violations are reported. As a matter of course, all design rule checks work on all angle elements. Design rule checks are not intended to check Multi-Gigabit designs, it will lack in performance but will work if you have a powerful system and enough run time to operate. Designs with up to a million shapes are no problem, even if computationally intensive options are used.

Illustration

DRC violations can be reported in three ways:

Graphical Illustration

The shape violating the rule will be displayed in the main drawing on an own error layer. The violation will be displayed graphically by a new cell which is named after the checked cell, it will have a suffix with the name of the design rule check. All detected errors are added to this cell on an error layer. A new cell reference to this cell is added to the unmodified original cell. If an identical check was performed before, the earlier results are deleted. Use ClearDRC to delete any prior results. If this method is used, the error layer and the feature to delete detected violations is setup in the DRC dock window. The DRC dock windows will be opened by calling any DRC feature from the Utilities menu.

Design-check-example

Listing Violations

A list will be generated showing each detected violation, with one violation per line. Each line contains a symbol, the name of the check and, where applicable, the measured value. By clicking on the list, the current view is directed to the location of the violation. A double click will mark the entry. The violation list can be stored and loaded. The violation list can be deleted manually or by a macro.

violation-list

Summarizing Report

Next to the graphical display and the violation list, a summarizing report can be created. It contains a list of all checks being made with the number of violations.

Check Area

The area being checked can be defined. It can check the whole cell, a user-defined region or the shapes in the current view. If the check region is limited, all applicable violations in the check area will be found. Depending on the type of check, some violations near the border region may also be displayed.

Entering the Check Rules

All Design Rule Checks can be entered within the graphical user interface. Each check will have its own user interface to enter the required check values.

DRC Macro

Each DRC check available in the user interface performs only a single check. A complete DRC usually requires many individual rules. For a complete DRC in a single step, a macro must be created with all the necessary rules folded into it. When doing so, each rule can be given an individual name. This macro shown below provides an example. It represents a part of the sample macros shipped with LayoutEditor.

#!/usr/bin/layout
#name=Macro: drc example.layout
#help=example for a drc macro

int main(){

layout->drcTool->result="DRC (LayoutEditor example) \r\n";

// setup error layer
layout->drawing->activeLayer=0;
layout->drcTool->setErrorLayerToActiveLayer();

// check for layer metal 1
layout->drcTool->ruleName= "Minimum Size Metal1";
layout->drcTool->minimumSize(800,6,true);
layout->drcTool->ruleName= "Minimum Distance Metal1";
layout->drcTool->minimumElementDistance(800,6,true);

// check for layer metal 2
layout->drcTool->ruleName= "Minimum Size Metal2";
layout->drcTool->minimumSize(900,8,true);
layout->drcTool->ruleName= "Minimum Distance Metal2";
layout->drcTool->minimumElementDistance(900,8,true);

// check for via1  (metal1 to metal2)
layout->drcTool->ruleName= "Via in metal1";
layout->drcTool->inside(50,7,6);
layout->drcTool->ruleName= "Via in metal2";
layout->drcTool->inside(60,7,8);

layout->drcTool->showReport();

}