0% found this document useful (0 votes)
615 views1,753 pages

Ledit

Uploaded by

Porferio
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
615 views1,753 pages

Ledit

Uploaded by

Porferio
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 1753

L-Edit 14 User Guide—Contents

Section 1: Layout Editing


1 Introduction to Layout Editing 38
Launching L-Edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Setup Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Command-Line Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Elements of the User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
The Help Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Opening the Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Installing Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Managing Commuter Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Displaying the Product Version or Contacting Customer Support . . . . . .43
Diagnostics for Customer Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Toolbars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Standard Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Drawing Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Editing Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Verification Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Alignment Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
MultiGrid Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Base Point Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Object Snap Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Node Highlighting Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Layer Palettes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Status Bars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Status Bar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Mouse Button Bar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Locator Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Coordinate System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Relative Coordinate Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Aerial View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Layout Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Text Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Command Line Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Design Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Verification Error Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
SDL Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

2 Application and Design Setup 54


Replacing the Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Importing a Setup from Virtuoso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Importing a Setup from Laker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Merging Layer Setups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Color Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Application Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Workgroup and User Configuration Files . . . . . . . . . . . . . . . . . . . . . . 60
Editing Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Contents of Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Keyboard Customization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

L-Edit 14 User Guide 1


L-Edit 14 User Guide—Contents
(Continued)
UPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Advanced Performance Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Text Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Files Modified Outside the Text Editor. . . . . . . . . . . . . . . . . . . . . . . . .75
Text Style. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Adding Keywords to a Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Design Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Internal Units, Display Units, and Technology Units. . . . . . . . . . . . . 77
Technology Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Grid Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Grid Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Multigrid Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Selection Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Selection and Deselection Ranges. . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Drawing Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Cross Reference (XRef) File Designation. . . . . . . . . . . . . . . . . . . . . 85
Snap Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Interactive DRC Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Layer Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
To Add a New Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Options for Defining Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
General Layer Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Derivation Layer Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Rendering Layer Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Rendering Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Paint Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Add Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Subtract Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Rendering Passes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Outline Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Listing GDS Information for Layers in a File . . . . . . . . . . . . . . . . . . . 95
Deleting Multiple Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Special Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Wire Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
End Styles and Join Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Wire Style Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Rescaling a Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

3 Viewing the Layout 102


Refreshing the Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Displaying Layout Interface Elements . . . . . . . . . . . . . . . . . . . . . . 103
Showing and Hiding Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Layer Palettes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Using the Compact Layer Palette . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Compact Layer Palette Shortcuts. . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Using the Layer Palette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Layer Palette Shortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Creating and Saving Palettes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

L-Edit 14 User Guide 2


L-Edit 14 User Guide—Contents
(Continued)
Showing and Hiding Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Show/Hide Layers Using the View > Layers Command. . . . . . . . . . . . .111
Show/Hide Layers Using the Compact Layer Palette . . . . . . . . . . . . . .112
Show/Hide Layers Using a Context-Sensitive Menu . . . . . . . . . . . . . . .113
Show/Hide Layers Using Setup Layers . . . . . . . . . . . . . . . . . . . . . . . . .113
Locking Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Viewing Layout Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Displaying Instance Insides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Displaying Instance Insides While Drawing and Editing. . . . . . . . . . 116
Zooming and Panning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Zooming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Zooming While Editing In-Place . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Panning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Zooming and Panning with the Mouse . . . . . . . . . . . . . . . . . . . . . . 118
Mouse Wheel Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Auto-Panning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Moving to Specific Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Exchanging Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Cross-Section Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Grow/Deposit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Etch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Implant/Diffuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Single-Step Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Process Definition Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

4 Working with Files 126


Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Creating Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Setup Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Opening Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Closing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Saving Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
TDB File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Layout Print Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Print Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Print Preview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
File Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Listing Object Types by Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Transferring File Information to Cells . . . . . . . . . . . . . . . . . . . . . . . 138
Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Property Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Viewing and Editing Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Adding Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Deleting Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Renaming Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Deleting Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Editing Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Organizing Properties in a Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . 141
Adding a Copyright, Logo or Text to a File. . . . . . . . . . . . . . . . . . . . . 142

L-Edit 14 User Guide 3


L-Edit 14 User Guide—Contents
(Continued)
Adding True Type Fonts to a Design. . . . . . . . . . . . . . . . . . . . . . . . .142
Using the alphabet.tdb File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143
Exiting L-Edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

5 Importing and Exporting Files 146


Importing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Importing GDS Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Prompt if unknown layers are found. . . . . . . . . . . . . . . . . . . . . . . . . 147
GDSII Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Database Resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
XrefCells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Setting the View Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Importing CIF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Importing DXF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Draw > Convert > Connect Segments. . . . . . . . . . . . . . . . . . . . . . . . . . 151
Importing Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Merging and Dithering Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Exporting Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Exporting GDS Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Polygons with Too Many Vertices . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Exporting CIF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Exporting DXF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Exporting PostScript Masks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
CIF File Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Calls (Instances). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Geometric Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Fabrication Cell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Wires in CIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
GDSII File Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
GDSII Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
GDSII Naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
GDSII Date Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
GDSII Shape Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
GDSII Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Assigning Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Wires in GDSII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Ports and Port Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Resizing Port Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

6 Drawing and Editing Objects 170


Object Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Selecting a Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Selecting a Drawing Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Selecting Angle Constraints for Drawing Tools . . . . . . . . . . . . . . . . 171
Changing Constraints while Drawing or Editing . . . . . . . . . . . . . . . . 172
Drawing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

L-Edit 14 User Guide 4


L-Edit 14 User Guide—Contents
(Continued)
Circles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Pie Wedges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Tori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Polygons and Wires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Self-Intersecting Polygons and Wires . . . . . . . . . . . . . . . . . . . . . . . 173
Self-Intersecting Polygons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174
Ambiguous Fill Polygons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174
Winding Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
How to Convert a Straight Polygon Edge to a Curve . . . . . . . . . . . . 176
Curve Height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Chamfers and Fillets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
How the “Distance” Value Sets the Size of a Chamfer or Fillet . . . . . . . 179
Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Persistent Rulers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Temporary Rulers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Editing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Drawing in Outline Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Resizing and Reshaping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Editing Multiple Objects Simultaneously. . . . . . . . . . . . . . . . . . . . . . 181
Adding Vertices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Pie Wedges and Tori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Object Snapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Object Snap Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Object Snap Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Object Snap Shortcut Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Order of Preference in Snapping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Snapping Objects to the Manufacturing Grid . . . . . . . . . . . . . . . . . . 186
Draw > Convert > Snap to Manufacturing Grid. . . . . . . . . . . . . . . . . 186
Aligning and Distributing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Bounding Box and Snapping Options. . . . . . . . . . . . . . . . . . . . . . . . 188
Minimum and Abutment Bounding Boxes . . . . . . . . . . . . . . . . . . . . . . . 188
Alignment Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Distribution Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Distribution Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Tiling Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Tile Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Slicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Nibbling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Merging Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Boolean and Grow Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Converting Objects to Polygons . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Converting Polygons to Orthogonal or 45° Geometry . . . . . . . . . . 199
Removing Curves from Polygons . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Fracturing Polygons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Wire Utilities for Editing Wires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Adding Wire Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Extending Wires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Resume Drawing a Wire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Joining Wires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Slicing Wires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Editing Objects Using Text and Data Values . . . . . . . . . . . . . . . . . . . 206
Edit > Edit Object(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Multiple Object Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

L-Edit 14 User Guide 5


L-Edit 14 User Guide—Contents
(Continued)
Edit Object(s)—Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Corners. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
Bottom Left Corner and Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . .211
Center and Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Edit Object(s)—Polygons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Edit Object(s)—Wires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Edit Object(s)—Circles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Edit Object(s)—Pie Wedges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Sweep Angle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Edit Object(s)—Tori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Edit Object(s)—Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Edit Object(s)—Rulers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Command Line Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Opening the Command Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Using the Command Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Coordinate Entry Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Command Completion Using a Mouse Click . . . . . . . . . . . . . . . . . . 224
Reference Point Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Reference Point Location for Multiple Objects . . . . . . . . . . . . . . . . . . . 224
Special Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Keyboard Shortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Command Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
!! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
¦ , Ø. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
<Esc> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Layer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Move. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Polygon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Command Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

7 Working with Cells 233


Design Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Symbols in the Design Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Sort and Display Modes in the Design Navigator . . . . . . . . . . . . . . 235
Top down - all cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Bottom up - all cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Top down - non-instanced . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
By date modified. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
DRC Status. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
DRC Status Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Copy Display to Text View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

L-Edit 14 User Guide 6


L-Edit 14 User Guide—Contents
(Continued)
Performing Cell Operations with the Design Navigator . . . . . . . . . . 239
Locking and Unlocking Cells Hierarchically. . . . . . . . . . . . . . . . . . . .240
Copying and Instancing from the Design Navigator . . . . . . . . . . . . .240
Printing Cell Hierarchy from the Design Navigator . . . . . . . . . . . . . .241
Creating Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Opening Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Reverting Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Renaming Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Copying Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Resolving Name Conflicts When Copying Cells. . . . . . . . . . . . . . . . 247
Resolving Layer Conflicts When Copying Cells . . . . . . . . . . . . . . . . 247
Saving a Cell to Another File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Copying a Piece of a Cell to Another Cell . . . . . . . . . . . . . . . . . . . . 248
Deleting Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Cell Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Listing the Object Types and Layers Used in a Cell . . . . . . . . . . . . 251
Operations on Multiple Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Deleting Multiple Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Instancing Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Setting Instance Selectability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Creating Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Filtering the List of Cell Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Aligning Instances by Abut Ports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Creating Arrays using Edit > Object(s) . . . . . . . . . . . . . . . . . . . . . . 259
Creating Arrays using the Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Editing Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Flattening Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Assigning Names to Instances (Cell > Assign Instance Names) . . 262
Replacing Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Replacing Multiple Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Editing Instances “In-Place” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Push to Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Editing Instances Using Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Xref Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Creating Xref Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Managing Xref Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Xref Cells and GDSII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Updating Xref Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Unlinking Xref Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Deleting Xref Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Updates to Xref Cell Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Specifying the Fabrication Cell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Finding I/O Pads in the Fabrication Cell . . . . . . . . . . . . . . . . . . . . . 273

8 Working with Objects 275


Selecting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Explicit Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Using a Selection Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Disallowing Instance Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Implicit Selection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Extend Selection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Cycle Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Edge Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

L-Edit 14 User Guide 7


L-Edit 14 User Guide—Contents
(Continued)
Universal Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Deselecting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Explicit Deselection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Implicit Deselection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Hidden Deselection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Universal Deselection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Finding Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Find Next/Find Previous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Grouping and Ungrouping Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Grouping Instances to Create an Array . . . . . . . . . . . . . . . . . . . . . 281
Ungrouping Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Undoing Draw > Group and Draw > Ungroup . . . . . . . . . . . . . . . . . 282
Moving Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Repositioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Move By . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Behavior of the Move By Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Nudge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Force Move Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Base Point Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Setting the Base Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Move and Copy/Paste Operations in Base Point Mode . . . . . . . . . . . . 285
Reorienting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Specifying Rotation Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Moving Objects from One Layer to Another . . . . . . . . . . . . . . . . . . 288
Copying and Duplicating Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Copying Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Duplicating Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Copying to the Clipboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Pasting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Paste to Cursor Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Deleting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Undoing Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Redo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

9 Generated Cells 291


Generating Layout from Code—“T-Cells”. . . . . . . . . . . . . . . . . . . . . . 291
Creating T-Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
T-Cell Parameter Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
T-Cell Code Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Opening T-Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Closing T-Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Instancing T-Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Regenerating T-Cell Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
T-Cell Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Generating T-Cell Code from Layout —“T-Cell Builder” . . . . . . . . . . 298
Defining Stretch Ports for the T-Cell Builder. . . . . . . . . . . . . . . . . . 298
Constructing a T-Cell with Stretch Parameters—MOSFET Example 299
Parameter Types in the T-Cell Builder . . . . . . . . . . . . . . . . . . . . . . . . . 300
Repeating Elements with the T-Cell Builder . . . . . . . . . . . . . . . . . . . 301
Setting the Layer as a T-Cell Builder Parameter . . . . . . . . . . . . . . . 302
Defining Conditional Inclusion as a T-Cell Builder Parameter . . . . . 303
Finding Objects that have T-Cell Builder Parameters . . . . . . . . . . . 304
Automatically Generated Contact Cells and Vias . . . . . . . . . . . . . . . 304

L-Edit 14 User Guide 8


L-Edit 14 User Guide—Contents
(Continued)
Creating Generated Contact Cells. . . . . . . . . . . . . . . . . . . . . . . . . . 305
Using the Fracture Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .306
Using the Area Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307
Editing Generated Contact Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Using Generated Contacts and Vias to Speed Routing . . . . . . . . . .307
Using Generated Contacts and Vias for Automatic Arrays . . . . . . . .308
Automatically Generating a Guard Ring . . . . . . . . . . . . . . . . . . . . . 309
Deleting a Guard Ring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311

10 Generating Layers 312


Layer Derivation Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Defining Derived Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Boolean Layer Derivations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Boolean Operation Outcomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
OR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Grow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Boolean Order of Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Select Layer Derivations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Select Operation Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Inside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Not Inside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Outside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Not Inside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Hole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Not Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Touch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Not Touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Enclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Overlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Vertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Area Layer Derivations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Density Layer Derivations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Setting Up Command File Derived Layers . . . . . . . . . . . . . . . . . . . 326
Generating Derived Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Choose a Command Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Run the Derivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Automatic Layer Generation with DRC and Extract . . . . . . . . . . . . . 328
Showing and Hiding Generated Layers . . . . . . . . . . . . . . . . . . . . . 329
Locking Generated Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Removing Generated Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

11 Schematic-Driven Layout (SDL) 330


How to Run SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Configure for Optimal Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Import a Netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Position Layout and Route Critical Nets . . . . . . . . . . . . . . . . . . . . . . 332
Auto-Route Remaining Nets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Updates Based on Engineering Change Orders (ECO) . . . . . . . . . . 332
SDL Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Define the Routing Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
SDL Router Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Grid Spacing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

L-Edit 14 User Guide 9


L-Edit 14 User Guide—Contents
(Continued)
Router Grid Spacing Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335
Router Grid Offset Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336
Wire Width Computation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336
Routing Wire End Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337
Wide Wire Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337
Locating Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Trace to Port Connection Behavior . . . . . . . . . . . . . . . . . . . . . . . . . .338
Point Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339
Line Ports (1D) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Box Ports (2D) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Obstruction Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Breakouts and Notches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Netlist Format for SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Case Sensitivity in SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Implicit Model Definitions in SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Remapping Model Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Alternative Netlist Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Importing a Netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Automatically Generating Layout Elements . . . . . . . . . . . . . . . . . . 346
Adding Instances for Missing Subcircuits . . . . . . . . . . . . . . . . . . . . . 347
Adding Instances of T-Cells for Missing Devices . . . . . . . . . . . . . . . 348
T-Cell Naming and Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Layout Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Automatic Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Router Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
The SDL Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Using the SDL Navigator Checklist . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Setting the Active Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
The SDL Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Context-Sensitive Menus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Updating from an Engineering Change Order (ECO). . . . . . . . . . . . . 356

12 Interactive DRC 359


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Setting Up Interactive DRC Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Spacing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Surround . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Overlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Running Interactive DRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

13 Node Highlighting 366


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Node Highlighting Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Default Location of Saved Node Highlighting Data . . . . . . . . . . . . . 368
The Node Highlighting Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Using Node Highlighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

14 Add-Ins 374
Count Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Generated Layers for Legacy Extract . . . . . . . . . . . . . . . . . . . . . . . . . 375
Legacy Layer Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Working with 45° Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

L-Edit 14 User Guide 10


L-Edit 14 User Guide—Contents
(Continued)
Writing Out Node Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378
Adding User Parameters to Extracted Devices . . . . . . . . . . . . . . . . .379
Legacy Extract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Setup Extract Standard Rule Set–General . . . . . . . . . . . . . . . . . . . .380
Setup Extract Standard Rule Set–Output . . . . . . . . . . . . . . . . . . . . .381
Setup Extract Standard Rule Set–Subcircuit. . . . . . . . . . . . . . . . . . .384
Activating Subcircuit Recognition . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Using Subcircuit Definitions for Hierarchical Cell Recognition. . . . . 386
Designing Subcircuit Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Subcircuit Recognition Polygons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Subcircuit Connection Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Crossing Over a Subcircuit Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
SPICE OUTPUT Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Property Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Application Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Area Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Instance Location Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Mask Bias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Mark Cells for Flattening During DRC . . . . . . . . . . . . . . . . . . . . . . . . . 395
Fix Wires With Short Segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Repeat Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

Section 2: Placement and Routing


15 Introduction to Placement and Routing 398
Placement and Routing in L-Edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Standard Cell Place and Route (SPR) . . . . . . . . . . . . . . . . . . . . . . . . . 398

16 Placing and Routing Standard Cell Designs 400


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Required Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
SPR Process Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Design Tips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Core Generation and Pad Routing. . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Padframe Generation and Pad Routing. . . . . . . . . . . . . . . . . . . . . . . . 405
SPR Port Annotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Generating a Padframe from a Netlist with Pad Cells . . . . . . . . . . . 406
Generating a Padframe Without a Netlist or Without Pad Cells . . . . 406
Global Input Signal Routing (Clock Routing) . . . . . . . . . . . . . . . . . . . 406
SPR Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Mapping Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
Initializing Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
SPR Core Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
SPR Core Setup–General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
SPR Core Setup–Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Over-the-Cell Routing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
SPR Core Setup–Design Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
SPR Core Setup–Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Assigning Net Criticality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Clustering Standard Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
SPR Core Setup–Global Signals . . . . . . . . . . . . . . . . . . . . . . . . . . 419

L-Edit 14 User Guide 11


L-Edit 14 User Guide—Contents
(Continued)
SPR Core Setup–Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
SPR Core Setup–I/O Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
SPR Padframe Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
SPR Padframe Setup–General . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
SPR Padframe Setup–Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Adding Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424
Pad Naming and Ordering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424
Mirroring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
SPR Pad Route Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
SPR Pad Route Setup–General . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
SPR Pad Route Setup–Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
SPR Pad Route Setup–Design Rules . . . . . . . . . . . . . . . . . . . . . . 429
SPR Pad Route Setup–Core Signals . . . . . . . . . . . . . . . . . . . . . . . 431
SPR Pad Route Setup–Padframe Signals . . . . . . . . . . . . . . . . . . . 432
Standard Cell Place and Route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Indent Middle Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Placement Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Optimization Factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Output Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Label Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Nodal Capacitance Files (CAP) . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Two-Layer Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Standard Delay Format Files (SDF) . . . . . . . . . . . . . . . . . . . . . . . . 440
Pin-to-Pin Delay Calculation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
SDF Driver Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Import .LIB Timing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Edit Pin Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444

17 Standard Cell Library Designer’s Guide 445


Standard Cell Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Standard Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Abutment Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Power Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Signal Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Row Crosser Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Special Standard Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Pad Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Abutment Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Connection Ports Between Pad Cells. . . . . . . . . . . . . . . . . . . . . . . 449
Signals from Pad to Layout Core . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Power Supply Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Corner Pad Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Pad Cells Without Bond Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Pad Orientations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Mirror Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Designing Cells for Global Signal Routing . . . . . . . . . . . . . . . . . . . . . 452
Global Signal Port Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Buffer Cell Input Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

18 Place and Route File Formats 454

L-Edit 14 User Guide 12


L-Edit 14 User Guide—Contents
(Continued)
TPR Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Interpretation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
EDIF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Interpretation: Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Interpretation: I/O Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Interpretation: Criticality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Additional Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
SDF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Pin-to-Pin Delay Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Interpretation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
CAP Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Interpretation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

Section 3: Design Verification


19 Introduction to Design Verification 462
Design Verification in L-Edit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

20 DRC Standard Rules 463


Design Rule Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Setups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Copying Setup Information to a New File . . . . . . . . . . . . . . . . . . . . . 463
Combining Rules from Different Files. . . . . . . . . . . . . . . . . . . . . . . . 463
Generated Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Exporting DRC Standard Rules to Calibre Format . . . . . . . . . . . . . 464
Design Rule Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Minimum Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Exact Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Not Exist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Spacing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Surround . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Overlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Rule Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Acute Angles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Flag to Append Special Commands . . . . . . . . . . . . . . . . . . . . . . . . . 469
Standard DRC rule: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Equivalent Calibre format rule: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Specifying DRC Standard Design Rules . . . . . . . . . . . . . . . . . . . . . . . 471
Geometry Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Optimizing Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Checking Incrementally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Checking Hidden Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Disabling Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

L-Edit 14 User Guide 13


L-Edit 14 User Guide—Contents
(Continued)
21 DRC Setup 476
Design Rule Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Setting Up DRC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Running DRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Design Rule Check on a Full Cell . . . . . . . . . . . . . . . . . . . . . . . . . . .479
Region-Only Design Rule Check. . . . . . . . . . . . . . . . . . . . . . . . . . . .479
Single Rule Check from a Command File . . . . . . . . . . . . . . . . . . . . .480
DRC Progress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Notification of DRC Completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Command File Syntax Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
DRC Status. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Excluding Cells from DRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Debugging DRC Results with Generated Layers . . . . . . . . . . . . . . . . 483
Generating Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Generate Layers directly from a Command File. . . . . . . . . . . . . . . . 484

22 HiPer Verify: Calibre Command Files 486


Input Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Case Sensitivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
New Line Insensitivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Navigation in the Text Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Preprocessor Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Numeric Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Reserved Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Reserved Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
Command File Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
A Basic Command File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Command Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Intermediate Layer Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Edge Directed Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Polygon Directed Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Output Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Summary and Classification of Commands . . . . . . . . . . . . . . . . . . 492
Polygon Layer Selectors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Edge Layer Selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Layer Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Omitted Environment Setup Commands . . . . . . . . . . . . . . . . . . . . 494
Function Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Environment Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Operating Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Hierarchy Modication Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Geometry Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Drawn Layer Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Connect and Connectivity Commands . . . . . . . . . . . . . . . . . . . . . . . . . 497
Antenna Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Polygon Boolean Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Utility Layer Generation Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Polygon Size Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Two-Layer Polygon Selection Operations . . . . . . . . . . . . . . . . . . . . . . . 499
Single-Layer Polygon Selection Operations . . . . . . . . . . . . . . . . . . . . . 500
Polygon Area Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Polygon Edge Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Edge, Length and Angle Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 500

L-Edit 14 User Guide 14


L-Edit 14 User Guide—Contents
(Continued)
Edge Selection Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .500
Dimensional Check Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501
Text Based Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .502
Netlist Extraction Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .502
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
ANGLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
AREA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
ATTACH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
COINCIDENT EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
COINCIDENT INSIDE EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
COINCIDENT OUTSIDE EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
CONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
CONVEX EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Detailed Endpoint Specification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Edge Layer Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
COPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
CUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
DENSITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
DEVICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
DISCONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
DMACRO and CMACRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
DONUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
DRAWN ACUTE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
DRAWN OFFGRID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
DRAWN SKEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
DRC INCREMENTAL CONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . 531
DRC MAXIMUM RESULTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
DRC PRINT AREA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
DRC PRINT PERIMETER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
DRC SELECT CHECK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
DRC TOLERANCE FACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
DRC UNSELECT CHECK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
ENC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
ENCLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
ENCLOSE RECTANGLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
EXCLUDE CELL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
EXPAND EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
EXPAND TEXT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
EXT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
EXTENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
EXTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
FLAG ACUTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
FLAG NONSIMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
FLAG OFFGRID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
FLAG POLYGONVERTEXLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
FLAG SKEW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
FLAG WIREVERTEXLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
FLAG ZEROWIDTHWIRES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
FLATTEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
FLATTEN CELL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
FLATTEN INSIDE CELL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
GROUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
GROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
HOLES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

L-Edit 14 User Guide 15


L-Edit 14 User Guide—Contents
(Continued)
INSIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
NSIDE CELL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
INSIDE EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
INT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
INTERACT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
LABEL ORDER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
LAYER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
LAYER MAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
LAYER RESOLUTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
LENGTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
NET AREA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
NET AREA RATIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
NET AREA RATIO PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
OFFGRID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
OR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
ORNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
OUTSIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
OUTSIDE EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
PATH LENGTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
PERIMETER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
POLYGON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
POLYNET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
PRECISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
RECTANGLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
RECTANGLE ENCLOSURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
RECTANGLES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
RESOLUTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
SCONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
SHRINK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
Optimizing SIZE Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
SNAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
STAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
SVRF ERROR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
TEXT DEPTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
TEXT LAYER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
TITLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
TOUCH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
TOUCH EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
TOUCH INSIDE EDGE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
TOUCH OUTSIDE EDGE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
VARIABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
VERTEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
VIRTUAL CONNECT COLON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
VIRTUAL CONNECT NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
VIRTUAL CONNECT SEMICOLON AS COLON . . . . . . . . . . . . . . . 631
WITH EDGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
WITH TEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
WITH WIDTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
XOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Supported Calibre Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
Tanner Commands with no Calibre Equivalent . . . . . . . . . . . . . . . . . 639

L-Edit 14 User Guide 16


L-Edit 14 User Guide—Contents
(Continued)
Unsupported Calibre Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639

23 HiPer Verify: Dracula Command Files 647


Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Structure of a Dracula File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Command Usage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Conjunctive Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Navigation in the Text Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Attaching Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Simple Example of a Dracula File . . . . . . . . . . . . . . . . . . . . . . . . . 650
Description Block Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
DELCEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
FLAG-ACUTEANGLE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
FLAG-NON45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
FLAG-OFFGRID/FLAG-PTH-OFFGRID. . . . . . . . . . . . . . . . . . . . . . 656
FLAG-SELFINTERS/FLAG-SELFTOUCH . . . . . . . . . . . . . . . . . . . . 657
RESOLUTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
TEXT-LEVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
TEXT-PRI-ONLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Input-Layer Block Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Layer Assignment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
Layer-Name Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
CONNECT LAYER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
IDTEXT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
TEXTSEQUENCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Operation Block Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
ANDNOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
AREA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
CAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
CONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
CORNER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
COVERAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
DEVTAG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Circuit Element Extract Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
EDGECHK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
ELEMENT BJT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
ELEMENT CAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
ELEMENT DIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
ELEMENT IN? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
ELEMENT LDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
ELEMENT MOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
ELEMENT RES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
ENC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
EQUATION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
EXT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
GROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
HOLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
INT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
LENGTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
LEXTRACT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
Antenna Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
OCTBIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719

L-Edit 14 User Guide 17


L-Edit 14 User Guide—Contents
(Continued)
OR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
PARSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Inductors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
PLENGTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
RECTCHK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
SCONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
SELECT ANGLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
SELECT BY LABEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
SELECT CONN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
SELECT CUT, TOUCH, ENCLOSE, OVERLAP . . . . . . . . . . . . . . . 729
SELECT INSIDE, OUTSIDE, HOLE. . . . . . . . . . . . . . . . . . . . . . . . . 731
SELECT LABEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732
SELECT VERTEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
SHRINK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
SNAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
STAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
WIDTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
XOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742

24 HiPer Verify: Assura Command Files 743


Typographic Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
Rule Syntax and Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
Structure of an Assura File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
Layer Definition Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
Layer Derivation Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
DRC Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Command Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
How To Run Assura Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Assura Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Setup Assura — avParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
Setup Assura — Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
Setup Assura — userVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
Setup Assura — techParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
Setup Assura — Prolog Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
Initializing the Assura Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
Using Virtuoso Import for Assura Setup . . . . . . . . . . . . . . . . . . . . . . 750
Parsing the File to Setup Assura . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
Functions By Category . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
Layer Definition Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
Layer Derivation Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
Layer Derivation Rules Using Shape Selection. . . . . . . . . . . . . . . . . . . 752
Layer Derivation Rules using Shape Sizing . . . . . . . . . . . . . . . . . . . . . 753
Layer Derivation Rules using Shape Generation . . . . . . . . . . . . . . . . . 753
Layout Display Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
Layout Extraction Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
Device Extraction Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
DRC Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
DRC Check Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
DRC Output Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756
cellBoundary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
drc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
Adding a Message to a DRC Check . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
DRC Check Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760

L-Edit 14 User Guide 18


L-Edit 14 User Guide—Contents
(Continued)
area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .760
coverage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .760
enc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .761
notch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .761
ovlp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .762
sep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .762
sepNotch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .762
venc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .763
width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
DRC Check Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
app. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
diffNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
edge, edgea, edgeb. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
fig, figa, figb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
length, lengtha, lengthb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
lessShielded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
notParallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
onlyPerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
opposite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
parallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
sameNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
shielded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
withPerp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
errorLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
extractCAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
geomAnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
geomAndNot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
geomAvoiding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
geomBkgnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
geomButting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
geomButtOnly. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776
geomButtOrCoin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
geomButtOrOver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
geomCat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
geomCoincident . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
geomConnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
geomContactCheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783
geomEnclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
geomGetAngledEdge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
geomGetEdge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
geomGetHoled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
geomGetLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
geomGetNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
geomGetNon45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
geomGetNon90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
geomGetNonRectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
geomGetPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
geomGetRectangle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
geomGetTexted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
geomGetUnTexted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
geomGetVertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
geomGrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800
geomHoles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
geomInside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
geomNoHoles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
geomOr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
geomOutside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806

L-Edit 14 User Guide 19


L-Edit 14 User Guide—Contents
(Continued)
geomOverlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
geomSepInside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
geomSepOutside. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
geomSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
geomStamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
geomStraddle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
geomWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
layerDefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
layerName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
offGrid (DRC Offgrid Data Check) . . . . . . . . . . . . . . . . . . . . . . . . . . 816
pinLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
pinText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
saveDerived . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
textToPin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820

25 Layout vs. Layout 821


Select Files to Compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
Select Cells and Layers to Compare . . . . . . . . . . . . . . . . . . . . . . . 822
View LVL Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
LVL Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
LVL_Results TDB File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
Layout vs. Layout Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825

26 Extracting Layout 829


Extract Definition Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Configuring the Extractor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Setup Extract—General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Setup Extract—Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
Devices and Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Finding Devices and Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
Extracting Resistor and Capacitors . . . . . . . . . . . . . . . . . . . . . . . . 835
Wire Conversions in Layer Generation. . . . . . . . . . . . . . . . . . . . . . 836
Configuration Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
Device Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
Recognition Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
Pin Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
Detecting Soft Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
Using a “SUBCKT” Device to Extract Non-Standard Devices . . . . 839
Extract Definition File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
Comment Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
Connect and Attach Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
Substrate Node Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
Device Statements–General Format . . . . . . . . . . . . . . . . . . . . . . . 841
Device Statements–Specific Formats. . . . . . . . . . . . . . . . . . . . . . . 842
Capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
Resistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
Inductor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
BJT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
Diode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
GAASFET/MESFET 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
GAASFET/MESFET 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
JFET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
MOSFET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847

L-Edit 14 User Guide 20


L-Edit 14 User Guide—Contents
(Continued)
Subcircuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .847

27 Viewing Verification Results 850


The Verification Error Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
Verification Error Navigator for DRC . . . . . . . . . . . . . . . . . . . . . . . . .850
Error Navigator Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .851
Verification Error Navigator for Extract . . . . . . . . . . . . . . . . . . . . . . .852
Error Indicators During Verification Runs . . . . . . . . . . . . . . . . . . . . . 852
Using Checkmarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Viewing Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
Viewing “Job” Runs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
Cell Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
Verification Navigator Command Menu . . . . . . . . . . . . . . . . . . . . . . 855
Verification Navigator Context Menu . . . . . . . . . . . . . . . . . . . . . . . . 856
Placing Error Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
Setting the Color of DRC Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Finding Error Markers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Clearing Error Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Error Display Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Viewing Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Sorting Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
DRC Report Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
DRC Summary Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
DRC Runtime Statistics Report . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
Exporting a Text File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
Displaying Calibre® DRC Results . . . . . . . . . . . . . . . . . . . . . . . . . 863
Finding Open Circuits and Short Circuits . . . . . . . . . . . . . . . . . . . . . 864
Extract Report Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
Extract Summary Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Extract Runtime Statistics Report . . . . . . . . . . . . . . . . . . . . . . . . . . 867
Tanner “EVI” for Calibre Results Viewing Environment (RVE) . . . . 868
Installing and Configuring EVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Starting Jobs on the Remote Machine . . . . . . . . . . . . . . . . . . . . . . . . . 869
Setup EVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Setup Calibre RVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
DRC Results Viewing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
Installing an X server to set the Xming Access Controls Option . . . . . . 872
Installing a Telnet/SSH client to Enable X11 Forwarding . . . . . . . . . . . 873
EVI for DRC and LVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
Viewing DRC Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
Cross Probing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
Shorts and Open Circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
Finding Parasitics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874

28 Cross Probing 875


Key Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875
Using Cross Probing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875

29 Introduction to LVS 880


LVS Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
Launching LVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
Input and Output Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
Prematch Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881

L-Edit 14 User Guide 21


L-Edit 14 User Guide—Contents
(Continued)
Element Description Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .881
Permutability Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .882
Element Description Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . .882
File Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
Backup Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
Menus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
Status Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Setup Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Setup—Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
Setup—Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
Setup—Device Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
Setup—Merge Devices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
Devices That Can Be Merged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
Merging Series MOSFETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
Setup Window—Parasitics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
Setup—Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
Detecting Soft Connections with LVS . . . . . . . . . . . . . . . . . . . . . . . . . . 896
Setup—Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
Text Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
Using Go To . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
Verification Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
Verification Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
LVS Output File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
Node and Element List Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
SPICE File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
Device Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
Subcircuit Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
Subcircuit Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907
SPICE Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
.INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
.MODEL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
.MALIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
Auto-Declaration of Models in LVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
.GLOBAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
.OPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
.PARAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
.END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
CDL Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
Restrictions and Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
Using LVS in Batch Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
Creating a Batch File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
Creating a Verification Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
Creating a Verification Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
Running LVS in Batch Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917

30 LVS Output Tutorial 919


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919

L-Edit 14 User Guide 22


L-Edit 14 User Guide—Contents
(Continued)
Parsing Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
Parameter Matching Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
Automorph Class Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
Resolving Fragmentation of an Automorph Class . . . . . . . . . . . . . . 922
Fragmented Class Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
Resolving a Fragmented Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
Using Device Parameters to Resolve Fragmented Classes . . . . . . 928
Element Description File Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . 929

31 Netlist Comparison 931


Flattened Netlists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
Multiplicity Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
Netlist Comparison Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
Fragmented Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
Resolving Fragmented Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Automorph Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Resolving Automorph Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Preiteration Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Detailed Trial Matching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Parameter Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
Permuted Classes in Digital Designs . . . . . . . . . . . . . . . . . . . . . . . . . 935
Avoiding Permuted Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936
LVS Algorithms and Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936
Resolving Discrepancies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937

32 LVS Command-Line Syntax 939


Running LVS from the Command Prompt . . . . . . . . . . . . . . . . . . . . . 939
Batch-File Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Running a Batch File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
Ignore Bulk Nodes (-b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
Consider Parameters (-cnnnn) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
Maximum Value Difference (-dv n) . . . . . . . . . . . . . . . . . . . . . . . . . 941
Maximum Geometrical Difference (-dg n). . . . . . . . . . . . . . . . . . . . 941
Element Description File (-e "file") . . . . . . . . . . . . . . . . . . . . . . . . . 941
Output File Display Options (-f[fapr]) . . . . . . . . . . . . . . . . . . . . . . . 941
Granularity (-%g=n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
Flattened Schematic Netlist (-h "file") . . . . . . . . . . . . . . . . . . . . . . . 942
Fast Iteration (-i) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
Delete Disconnected Devices (-k) . . . . . . . . . . . . . . . . . . . . . . . . . 943
List Elements and Nodes (-l "file") . . . . . . . . . . . . . . . . . . . . . . . . . 943
Merge Devices (-mdevice {ALL | model_list}). . . . . . . . . . . . . . . . . 943
Merging Nonpolarized Devices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944
Nonpolarized Elements (-n[rcl]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
Output file (-o"file") . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
Prematch File (-p "file"). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946
Input SPICE Syntax (-pspice, -phspice, -hpspice) . . . . . . . . . . . . . 946
Merge Series MOSFETs (-r {ALL | model_list}) . . . . . . . . . . . . . . . 946
Remove Parasitics (-s test=value) . . . . . . . . . . . . . . . . . . . . . . . . . 947
Flattened Layout Netlist (-t"file") . . . . . . . . . . . . . . . . . . . . . . . . . . . 947
Remove Device Models (-u /model1//model2//.../) . . . . . . . . . . . . . 948

L-Edit 14 User Guide 23


L-Edit 14 User Guide—Contents
(Continued)
Screen Display Options(-v[fpar]) . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
Delete Shorted Devices (-x). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
Yes to All Questions (-y[12]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
Short Out Device Models (-z /model1//model2//.../). . . . . . . . . . . . . 949

33 LVS Glossary 950

Section 4: User-Programmable Interface


34 Introduction to Programming the User Interface 952
Using Macros-The Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
Loading a Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953
Entering Library References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
UPI Include Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
Running a Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
Writing a Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
Example 1: Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
Format Outline. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
Defining the Macro Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
Displaying a Message Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958
Registering the Function as a Macro. . . . . . . . . . . . . . . . . . . . . . . . . . . 958
Example 2: Format for a Compiled (.dll) Macro . . . . . . . . . . . . . . . . 958
Debugging Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959
How to compile UPI with Visual Studio 2005 . . . . . . . . . . . . . . . . . . . 960
Setting up a NON-MFC UPI macro in Microsoft Visual Studio 2005962
Binding Macros to Hot Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
Binding Macros to Menu Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
Example 3: Layout Palette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
Creating Resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
UPI_Entry_Point() Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
Displaying and Managing the Palette . . . . . . . . . . . . . . . . . . . . . . . . . . 973
Macro Definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974
Copy-Protecting Macro DLLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
Opening a Copy-Protected DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
Creating a Copy-Protected DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
Initiating Password Verification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
Verifying the Password. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
Additional Support Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978

35 UPI Functions Reference 980


Function Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
Database Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
Data Types and Typedefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
Data Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
Numerical Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Obsolete Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Interface Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
Dialog Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
Dialog Button Returns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
LDialog_MsgBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
LDialog_MultiLineMsgBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986

L-Edit 14 User Guide 24


L-Edit 14 User Guide—Contents
(Continued)
LDialog_AlertBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
LDialog_YesNoBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
LDialog_InputBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
LDialog_MultiLineInputBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990
LDialog_PickList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
LDialog_File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
Cursor and Display Functions996
LCursor_GetPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
LCursor_GetPositionEx99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
LCursor_GetSnappedPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
LDisplay_Refresh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
LStatusBar_SetMsg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001
LCell_HomeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
LCell_GetVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
LCell_GetLastVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
LCell_MakeVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
LCell_MakeVisibleNoRefresh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
UPI Macro Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
LMacro_Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
LMacro_BindToHotKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
LMacro_BindToMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
LMacro_BindToMenuAndHotKey_v9_30 . . . . . . . . . . . . . . . . . . . . 1011
LMacro_IsLoaded. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
LMacro_Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
LMacro_LoadEx1200 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
LMacro_UnLoad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
LMacro_GetNewTCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
UPI Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
LUpi_GetSerialNumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
LUpi_SetQuietMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
LUpi_InQuietMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
LUpi_SetSelectionTool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
LUpi_SetDrawingTool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
LUpi_InsertMenuItemSeparator . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027
LUpi_SetReturnCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028
LUpi_GetReturnCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
LUpi_SetUpdateDisplayMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
LUpi_GetUpdateDisplayMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
LFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
LFormatV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
Windows Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
LWindow_GetVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036
LWindow_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
LWindow_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038
LWindow_IsLast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
LWindow_MakeVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
LWindow_Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
LWindow_CloseAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
LWindow_EditInPlacePushIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043
LWindow_EditInPlacePopOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044
LWindow_EditInPlacePopToTop . . . . . . . . . . . . . . . . . . . . . . . . . . 1045
LWindow_GetType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046
LWindow_GetFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
LWindow_GetCell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
LWindow_GetEditTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049

L-Edit 14 User Guide 25


L-Edit 14 User Guide—Contents
(Continued)
LWindow_GetTopCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
LWindow_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
LWindow_GetWindowHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
LWindow_NewTextWindow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
LWindow_LoadTextFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054
LWindow_SaveToFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
LWindow_GetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
LWindow_SetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057
LWindow_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
LWindow_SetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059
Database Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060
Application Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061
LApp_GetCacheInstances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062
LApp_GetCacheInstancesSmallerThanNumOfPixels . . . . . . . . . . 1063
LApp_GetFillObjectsDuringDrawing. . . . . . . . . . . . . . . . . . . . . . . . 1064
LApp_GetHideInstanceInsidesIfLessThanNumOfPixels . . . . . . . . 1065
LApp_GetHideObjectsSmallerThanNumOfPixels . . . . . . . . . . . . . 1067
LApp_GetHideSmallInstanceInsides . . . . . . . . . . . . . . . . . . . . . . . 1068
LApp_GetHideSmallObjects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
LApp_GetInterruptableRendering. . . . . . . . . . . . . . . . . . . . . . . . . . 1070
LApp_GetRedrawAllWindows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
LApp_GetVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
LApp_GetVersionDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
LApp_GetFullVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074
LApp_GetShowDesignWhileRendering . . . . . . . . . . . . . . . . . . . . . 1075
LApp_GetShowDesignFirstTimeIncrement . . . . . . . . . . . . . . . . . . 1076
LApp_GetShowDesignNextTimeIncrement . . . . . . . . . . . . . . . . . . 1077
LApp_GetRenderingUseCPUForColorMixing . . . . . . . . . . . . . . . . 1078
LApp_GetRenderingUseMMX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079
LApp_GetRenderingUsePatBltForPatterns . . . . . . . . . . . . . . . . . . 1080
LApp_GetAllowSelectionOnLockedLayers. . . . . . . . . . . . . . . . . . . 1081
LApp_SetCacheInstances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
LApp_SetCacheInstancesSmallerThanNumOfPixels. . . . . . . . . . . 1083
LApp_SetExportMaskDataExportHiddenObjects . . . . . . . . . . . . . . 1084
LApp_SetFillObjectsDuringDrawing . . . . . . . . . . . . . . . . . . . . . . . . 1085
LApp_SetHideInstanceInsidesIfLessThanNumOfPixels. . . . . . . . . 1086
LApp_SetHideObjectsSmallerThanNumOfPixels. . . . . . . . . . . . . . 1088
LApp_SetHideSmallInstanceInsides . . . . . . . . . . . . . . . . . . . . . . . 1089
LApp_SetHideSmallObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
LApp_SetInterruptableRendering . . . . . . . . . . . . . . . . . . . . . . . . . . 1091
LApp_SetRedrawAllWindows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092
LApp_SetShowDesignWhileRendering . . . . . . . . . . . . . . . . . . . . . 1093
LApp_SetShowDesignTimeIncrement . . . . . . . . . . . . . . . . . . . . . . 1094
LApp_SetRenderingUseCPUForColorMixing. . . . . . . . . . . . . . . . . 1095
LApp_SetRenderingUseMMX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096
LApp_SetRenderingUsePatBltForPatterns . . . . . . . . . . . . . . . . . . 1097
LApp_SetAllowSelectionOnLockedLayers . . . . . . . . . . . . . . . . . . . 1098
LApp_ExitAfterCompletion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
File Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1100
LFile_New. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
LFile_Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103
LFile_OpenCell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104
LFile_Save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
LFile_SaveAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
LFile_Close. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107

L-Edit 14 User Guide 26


L-Edit 14 User Guide—Contents
(Continued)
LFile_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108
LFile_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
LFile_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
LFile_GetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111
LFile_SetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
LFile_IsChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
LFile_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114
LFile_GetAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115
LFile_SetAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116
LFile_GetFabricationCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117
LFile_SetFabricationCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118
LFile_GetOrganization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
LFile_SetOrganization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120
LFile_GetLayoutVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121
LFile_SetLayoutVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122
LFile_GetSetupVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123
LFile_SetSetupVersion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
LFile_GetInfoText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
LFile_SetInfoText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126
LFile_GetEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
LFile_SetEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128
LFile_GetGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129
LFile_GetGridEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
LFile_GetGrid_v10_00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131
LFile_SetGrid_v10_00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132
LFile_SetGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134
LFile_SetGridEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
LFile_GetCurveSetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137
LFile_SetCurveSetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
LFile_GetSelectionParam. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140
LFile_SetSelectionParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
LFile_GetUserData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142
LFile_SetUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143
LFile_DeleteUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144
LFile_ClearUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145
LFile_DisplayCellBrowser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1146
LFile_SetLastCurrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1147
LFile_GetDesignRuleFlags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148
LFile_SetDesignRuleFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149
LFile_GetResolvedFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
LFile_GetVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
LFile_IntUtoLocU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
LFile_LocUtoIntU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1154
LFile_SetChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155
LFile_GetDisplayUnitInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1156
LFile_SetDisplayUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157
LFile_IntUtoDispU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158
LFile_DispUtoIntU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
LFile_IntUtoMicrons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
LFile_MicronsToIntU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
Cell Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
LCell_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163
LCell_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1164
LCell_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165
LCell_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166

L-Edit 14 User Guide 27


L-Edit 14 User Guide—Contents
(Continued)
LCell_GetFile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1167
LCell_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
LCell_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169
LCell_GetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
LCell_SetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171
LCell_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
LCell_SetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
LCell_GetAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
LCell_SetAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
LCell_GetOrganization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
LCell_SetOrganization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
LCell_GetInfoText. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
LCell_SetInfoText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
LCell_GetVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
LCell_SetVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181
LCell_GetCreatedTime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
LCell_GetModifiedTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
LCell_IsChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184
LCell_GetView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
LCell_SetView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
LCell_GetMbb. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187
LCell_GetMbbAll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
LCell_Flatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
LCell_ClearUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190
LCell_GetUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
LCell_SetUserData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
LCell_DeleteUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193
LCell_GenerateLayersEx830 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
LCell_GenerateLayersEx99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196
LCell_GenerateLayers_v10_00 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197
LCell_GenerateLayers_v11_10 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199
LCell_SetChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
LCell_RunDRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201
LCell_RunDRCEx00. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202
LCell_RunDRCEx01. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
LCell_RunDRCCommandFile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206
LCell_ClearUndoLists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207
LCell_GetParameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
LCell_GetTCellPreviousValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209
LCell_SetShowInLists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211
LCell_GetShowInLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212
LCell_CalcMBB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
LCell_AddMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214
LCell_RemoveMarker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
LCell_RemoveAllMarkers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
LCell_BooleanOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
LCell_Slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219
LCell_SetBasePoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220
LCell_GetBasePoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
l_Slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222
Instance Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223
LInstance_New. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224
LInstance_New_Ex99. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225
LInstance_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226
LInstance_Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227

L-Edit 14 User Guide 28


L-Edit 14 User Guide—Contents
(Continued)
LInstance_Set_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1228
LInstance_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1229
LInstance_FindNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1230
LInstance_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231
LInstance_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232
LInstance_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1233
LInstance_SetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234
LInstance_GetCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235
LInstance_GetTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1236
LInstance_GetTransform_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237
LInstance_GetRepeatCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238
LInstance_GetDelta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239
LInstance_GetMbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1240
LInstance_Generate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241
LInstance_GenerateV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1242
Entity Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
LEntity_PropertyExists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245
LEntity_GetPropertyType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246
LEntity_GetPropertyValueSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247
LEntity_GetPropertyValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248
LEntity_AssignProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249
LEntity_AssignBlobProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250
LEntity_DeleteProperty. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1251
LEntity_DeleteAllProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252
LEntity_CopyAllProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253
LEntity_GetFirstProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254
LEntity_GetNextProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1255
LEntity_SetCurrentProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256
LEntity_BrowseProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1257
LEntity_LoadBlobProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258
LEntity_SaveBlobProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259
LEntity_ReadPropertiesFromFile . . . . . . . . . . . . . . . . . . . . . . . . . . 1260
LEntity_StringToValidPropertyName . . . . . . . . . . . . . . . . . . . . . . . 1262
LEntity_ValidPropertyNameToString . . . . . . . . . . . . . . . . . . . . . . . 1264
LEntity_WritePropertiesToFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1266
LEntity_StoreAsCompressedBlob . . . . . . . . . . . . . . . . . . . . . . . . . 1268
LEntity_DecompressBlobToFile . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
Object Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1270
LObject_Delete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1271
LObject_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272
LObject_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
LObject_Transform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274
LObject_Transform_Ex99. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275
LObject_GetInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276
LObject_GetMbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277
LObject_GetShape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1278
LObject_GetGeometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
LObject_GetVertexList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1280
LObject_Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281
LObject_Perimeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
LObject_GetLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283
LObject_GetGDSIIDataType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1284
LObject_SetGDSIIDataType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285
LObject_ChangeLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287
LObject_ConvertToPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1289

L-Edit 14 User Guide 29


L-Edit 14 User Guide—Contents
(Continued)
LObject_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290
LObject_SnapToGrid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
LObject_SnapToMfgGrid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
LObject_DistanceToPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293
LVertex_GetCount. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295
LVertex_GetArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296
LVertex_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297
LVertex_GetPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
LVertex_SetPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299
LVertex_Add. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1300
LVertex_Delete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
LVertex_AddCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302
LVertex_GetCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
LVertex_GetCurveEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304
LVertex_GetCurveExactCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305
LVertex_HasCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306
LVertex_SetCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
LVertex_RemoveCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308
LBox_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310
LBox_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
LBox_GetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312
LCircle_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1314
LCircle_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315
LCircle_GetCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316
LCircle_GetRadius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317
LCircle_GetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
LPie_CreateNew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1320
LPie_GetParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
LPie_SetParams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
LTorus_CreateNew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325
LTorus_GetParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
LTorus_SetParams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328
LWire_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331
LWire_GetWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332
LWire_GetCapType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333
LWire_GetJoinType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
LWire_GetMiterAngle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335
LWire_GetLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
LWire_GetSquares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
LWire_GetResistance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338
LWire_SetWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339
LWire_SetJoinType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340
LWire_SetCapType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341
LWire_SetMiterAngle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342
LPolygon_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
LPolygon_WireToPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345
LPolygon_CircleToPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346
LPolygon_HasCurve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347
LPolygon_RemoveAllCurves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348
LPolygon_StraightenAllCurves. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1349
LPort_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
LPort_Delete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352
LPort_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1353
LPort_FindNext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354
LPort_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355

L-Edit 14 User Guide 30


L-Edit 14 User Guide—Contents
(Continued)
LPort_GetNext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
LPort_GetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357
LPort_SetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358
LPort_GetTextSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359
LPort_GetLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1360
LPort_GetMbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1361
LPort_GetRect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362
LPort_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363
LPort_SetTextSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
LPort_GetTextAlignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365
LPort_SetTextAlignment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1366
Selection Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1368
LSelection_Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
LSelection_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1370
LSelection_PasteToLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371
LSelection_Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1372
LSelection_SelectAll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1373
LSelection_DeselectAll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
LSelection_AddObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375
LSelection_RemoveObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376
LSelection_GetObject. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377
LSelection_AddAllObjectsOnLayer . . . . . . . . . . . . . . . . . . . . . . . . 1378
LSelection_RemoveAllObjectsOnLayer . . . . . . . . . . . . . . . . . . . . . 1379
LSelection_AddAllObjectsInRect . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
LSelection_RemoveAllObjectsInRect. . . . . . . . . . . . . . . . . . . . . . . 1381
LSelection_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
LSelection_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383
LSelection_GetLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384
LSelection_ChangeLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
LSelection_Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
LSelection_Duplicate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387
LSelection_Group. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388
LSelection_UnGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389
LSelection_Flatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390
LSelection_Merge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
LSelection_FlipHorizontal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392
LSelection_FlipVertical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
LSelection_SliceHorizontal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
LSelection_SliceVertical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395
LSelection_Rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396
LSelection_RotateAroundPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397
LSelection_SnapToMfgGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399
Layer Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400
LLayer_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
LLayer_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403
LLayer_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1404
LLayer_FindGDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405
LLayer_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
LLayer_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407
LLayer_PrecedingLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
LLayer_PrecedingLayerEx99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409
LLayer_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410
LLayer_SetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411
LLayer_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
LLayer_GetParametersEx830 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413

L-Edit 14 User Guide 31


L-Edit 14 User Guide—Contents
(Continued)
LLayer_SetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415
LLayer_SetParametersEx830 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416
LLayer_GetCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1418
LLayer_SetCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419
LLayer_GetRho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1420
LLayer_SetRho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421
LLayer_GetCurrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422
LLayer_SetCurrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423
LLayer_GetSpecial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424
LLayer_SetSpecial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
LLayer_MoveLayer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426
LLayer_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
LLayer_GetDerivedList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
LLayer_GetDerivedNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
LLayer_IsDerived . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431
LLayer_EnableAllDerived . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432
LLayer_DisableAllDerived . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433
LLayer_GetDerivedParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
LLayer_GetDerivedParametersEx830 . . . . . . . . . . . . . . . . . . . . . . 1435
LLayer_SetDerivedParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436
LLayer_SetDerivedParametersEx830 . . . . . . . . . . . . . . . . . . . . . . 1437
LLayer_DestroyDerivedParameter . . . . . . . . . . . . . . . . . . . . . . . . . 1438
LLayer_DestroyDerivedParameterEx840. . . . . . . . . . . . . . . . . . . . 1440
LCell_GenerateLayers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
LCell_ClearGenerateLayers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442
LPass_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444
LPass_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445
LPass_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446
LPass_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1447
LPass_SetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1448
LLayer_GetRenderingAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1449
LLayer_SetRenderingAttribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1450
LLayer_GetRenderingObjectName . . . . . . . . . . . . . . . . . . . . . . . . 1451
Technology Setup Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452
LFile_GetTechnology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453
LFile_SetTechnology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1454
LFile_SetTechnologyName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455
LFile_SetTechnologyUnitNum . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1456
LFile_SetTechnologyUnitDenom . . . . . . . . . . . . . . . . . . . . . . . . . . 1457
LFile_SetTechnologyLambdaNum . . . . . . . . . . . . . . . . . . . . . . . . . 1458
LFile_SetTechnologyLambdaDenom . . . . . . . . . . . . . . . . . . . . . . . 1459
LFile_GetTechnologyEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1460
LFile_SetTechnologyEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1461
LFile_SetTechnologyUnitName . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462
LFile_GetColorPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1464
LFile_GetColorPaletteNumColors . . . . . . . . . . . . . . . . . . . . . . . . . 1465
LFile_GetColorPaletteSortBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1466
LFile_SetColorPalette. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1467
LFile_SetColorPaletteNumColors. . . . . . . . . . . . . . . . . . . . . . . . . . 1468
LFile_SetColorPaletteSortBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469
Import/Export Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470
LFile_GetCIFParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472
LFile_SetCIFParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473
LFile_GetGDSParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475
LFile_SetGDSParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476

L-Edit 14 User Guide 32


L-Edit 14 User Guide—Contents
(Continued)
DRC Functions1477
LDrcRule_Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1478
LDrcRule_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479
LDrcRule_Find. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1480
LDrcRule_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481
LDrcRule_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482
LDrcRule_SetRuleSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1483
LDrcRule_SetTolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484
LDrcRule_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485
LDrcRule_SetParameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486
LDRCRule_DestroyParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487
LDRC_Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1489
LFile_GetBinSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1490
LFile_SetBinSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491
LFile_GetDrcFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492
LFile_SetDrcFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493
LCell_OpenDRCSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1494
LCell_OpenDRCStatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1495
LCell_GetDRCNumErrors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1496
LCell_GetDRCStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1497
Extract Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1498
LExtract_Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499
LExtract_Run_Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1500
LExtract_RunCommandFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1501
LCell_OpenExtractSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502
LCell_OpenExtractStatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503
LExtract_RunEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504
LExtract_GetOptions_Ex98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506
LExtract_GetOptionsEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507
LExtract_SetOptionsEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509
Core Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1511
LCore_GetCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512
LCore_GetLLHCap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513
LCore_SetLLHCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514
LCore_GetLLVCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515
LCore_SetLLVCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1516
Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517
LPoint_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519
LPoint_Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1520
LPoint_Subtract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1521
LPoint_Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522
LPoint_Transform_Ex99. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523
LRect_Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525
LRect_Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526
LRect_Transform_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1527
LTransform_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1529
LTransform_Set_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1530
LTransform_Zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531
LTransform_Zero_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1532
LTransform_Add. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533
LTransform_Add_Ex99. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1534
LTransform_Subtract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535
LTransform_Subtract_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1536
LTransform_GetInverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537
LCSV_Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539

L-Edit 14 User Guide 33


L-Edit 14 User Guide—Contents
(Continued)
Data Types and Typedefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1540
LAmbiguousFillType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542
LArcDirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543
LBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544
LBooleanOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545
LCapType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546
LCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547
LCIFParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548
LColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549
LCoord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550
LCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551
LCursorType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552
LCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1553
LDerivedLayerAreaOperation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554
LDerivedLayerBoolOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556
LDerivedLayerDensityOperation . . . . . . . . . . . . . . . . . . . . . . . . . . 1557
LDerivedLayerParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
LDerivedLayerParamEx830 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559
LDerivedLayerSelectOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561
LDesignRuleFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563
LDesignRuleParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1564
LDialogItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1565
LDisplayUnitInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566
LDrcFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567
LDrcRule. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568
LDrcRuleType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569
LDrcStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570
LEntity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571
LEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572
LExtractOptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573
LExtractOptionsEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575
LFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578
LFileType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579
LGDSParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1580
LGeomType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581
LGrid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582
LGridEx840. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583
LGrid_v10_00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1585
LInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587
LJoinType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1588
LLayer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589
LLayerParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1590
LLayerParamEx830 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591
LLayerViewStatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1593
LLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594
LMagnification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595
LMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596
LMarkerParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597
LMarkerParam_V11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598
LObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600
LOrientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601
LOrientation_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602
LOutlineStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603
LPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1604
LPass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605

L-Edit 14 User Guide 34


L-Edit 14 User Guide—Contents
(Continued)
LPassMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606
LPassParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607
LPassType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1608
LPieParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609
LPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1610
LPort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611
LPropertyType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612
LRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613
LRenderingAttribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1614
LRenderingAttributeIndex. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1615
LSelection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1616
LSelectionParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617
LShapeType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1618
LSpecialLayer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1619
LStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1620
LStipple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1621
tech_unit_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622
LTechnology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623
LTechnologyEx840. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624
LTorusParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625
LTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1626
LTransform_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627
LVertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628
LWindow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629
LWindowType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630
LWireConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631
LWireConfigBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632
LWireParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633
UPIDrawingToolType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634

36 LComp Functions Reference 1636


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636
Composition with LComp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636
Initializing LComp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636
Elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1637
State Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638
State Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
LC_SetReferencePoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1640
LC_GetReferencePoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
LC_SetAbutmentType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
LC_GetAbutmentType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
LC_SetPlacementOrientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644
LC_GetPlacementOrientation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645
LC_AddPlacementOrientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646
LC_SubtractPlacementOrientation . . . . . . . . . . . . . . . . . . . . . . . . . 1647
LC_SetCompositionDirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648
LC_GetCompositionDirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1649
LC_SetPlacementOverlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1650
LC_GetPlacementOverlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1651
LC_SetXYPlacementPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652
LC_GetXYPlacementPosition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653
LC_SetXPlacementPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1654
LC_GetXPlacementPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655
LC_SetYPlacementPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1656
LC_GetYPlacementPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1657

L-Edit 14 User Guide 35


L-Edit 14 User Guide—Contents
(Continued)
LC_IncrementXPlacementPosition . . . . . . . . . . . . . . . . . . . . . . . . 1658
LC_IncrementYPlacementPosition . . . . . . . . . . . . . . . . . . . . . . . . 1659
Placement Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1660
LC_Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661
LC_Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662
LC_Generate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663
LC_Align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1664
LC_InstanceAlign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1665
LC_GenerateAlign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666
Position Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667
LC_GetPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668
LC_GetPointEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1669
LC_GetPlacementRect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1670
LC_GetPlacementRectEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1671
LC_GetElementWidth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672
LC_GetElementHeight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1673
Geometry Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1674
LC_StartWire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1675
LC_AddWirePoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1676
LC_EndWire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1677
LC_CreateBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1678
LC_CreateCircle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1679
LC_CreatePort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1680
LC_StartPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1681
LC_AddPolygonPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682
LC_EndPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1683
Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1684
LC_Push. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1685
LC_Pop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686
LC_DiskFileExists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1687
LC_DiskFileDelete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688
LC_DiskFileRename. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689
LC_Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1690
LC_Microns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1691
LC_InMicrons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692
LC_CellOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693
LC_CellNew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694
LC_CellClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695
LC_CellExists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696
LC_PropagatePorts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697
LC_Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1698
LC_TraceFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1699
LC_PlaceMarkerAtCurrentPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1700
Typedefs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1701
AbutTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702
CompositionDirectionType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703
RelativeTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1704
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705
Logo Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1706
Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708
Matched Dual Capacitor Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1717

37 Alphabetical List of UPI and LComp Functions 1723

L-Edit 14 User Guide 36


L-Edit 14 User Guide—Contents
(Continued)
Index 1737

Credits 1753

L-Edit 14 User Guide 37


1 Introduction to Layout Editing

Launching L-Edit

To launch L-Edit, click the Start button on the Windows taskbar and navigate to L-Edit in the Tanner
EDA directory. You can also double-click the L-Edit icon on your desktop, which looks like this:

Setup Files

Every L-Edit design file contains basic information regarding layers and technology settings,
application display and editing options, and design-specific settings. Collectively this information is
known as the “setup.” You can enter this information manually or transfer it between design files using
File > Replace Setup and File > Export Setup. See “Application and Design Setup” on page 54 for
further information.

When you launch L-Edit, the program attempts to locate the file ledit.tdb and read it for setup
information. If it does not find this file in the current directory, L-Edit searches the directory where the
executable is located. If L-Edit does not locate ledit.tdb, it displays a warning.

With or without setup information from ledit.tdb, when L-Edit launches it creates a new file (Layout1)
with one cell, Cell0. To start L-Edit with a specific TDB file, double-click on the TDB file in Windows
Explorer.

Command-Line Arguments

L-Edit may be launched with or without command-line arguments. If a command-line TDB File is not
specified in the command line, L-Edit starts with a new empty layout file modeled after ledit.tdb.

To launch L-Edit with a command-line argument, click the Start button on the Windows taskbar and
select Run. Use the Browse button and navigate to the directory that contains ledit.exe. Command line
options can also be put into a program shortcut by editing the shortcut properties.

L-Edit uses the following command-line arguments:

Arguments Description

file1.tdb, file2.tdb, ... The names of the TDB files to open. TDB files specified on the
command line open with the number of layout windows they had
when last saved.
-d Prevents L-Edit from changing the current directory. Without this
flag, L-Edit sets the current directory to that of the last TDB file that
was opened in L-Edit.

L-Edit 14 User Guide Section 0 38


Chapter 1: Introduction to Layout Editing Launching L-Edit

Arguments Description

-d <dir name> Changes the current directory to the one specified.


-f Instructs L-Edit to ignore workgroup and user configuration files. For
more information, see “Application Parameters” on page 60.
-n Hides the splash screen. The L-Edit splash screen will not be
displayed during product startup.
-r This command associates TDB files with the version of L-Edit shown
on the command line, then exits without launching L-Edit. By default,
L-Edit associates itself with the TDB file extension every time it is
launched, whether or not the -r option is set on the command line.
L-Edit will not associate itself with TDB if it is a beta version. This
flag can be used in batch scripts. It cannot be used with -s flag.
-s Prevents file association. Normally, L-Edit sets the file association for
TDB files to itself whenever it is launched. The -s option prevents this
automatic file association. This option is useful, for example, if you
have L-Edit version 8.3 but prefer that your TDB files launch version
8.22. In that case you would run L-Edit version 8.22 normally to
establish the file association. Then, each time you launch version 8.3
you would do so from the command line using the -s flag to prevent a
new file association.
-u <filename> Loads the specified macro file. Multiple -u options can be used to
load multiple macro files. For more information, see “Using
Macros-The Basics” on page 952.
-U <filename> Loads the specified macro file and executes the first macro registered
in UPI_Entry_Point. Only one macro can be executed, but that macro
can be used to call other macros.

L-Edit 14 User Guide Section Section 1 39


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Elements of the User Interface

The L-Edit interface has the following major components:

Menu bar Locator bar

Toolbars

Layer Palette

Mouse button
bar

Aerial view

Status bar Design Schematic Text Editor Command Layout area


Navigator Driven Line window
Layout
Navigator

L-Edit 14 User Guide Section Section 1 40


Chapter 1: Introduction to Layout Editing Elements of the User Interface

The Help Menu

The Help menu has commands that open product documentation, provide links and diagnostic functions
for customer support, display version information, manage commuter licensing and to install the
example files that are shipped with L-Edit.

Opening the Documentation


To open the user guides and manuals, press the help button ( ) or select from the Help menu
commands. L-Edit will launch Adobe Acrobat™ Reader and open the selected documentation in .pdf
format.

Installing Examples
Click Help > Setup Examples to install the example and tutorial files that are included with L-Edit.

Managing Commuter Licensing


A commuter license is a portable license in a multi-seat environment that can be transferred from the
system where L-Edit is installed another computer, for example to a laptop for travel purposes. Use

L-Edit 14 User Guide Section Section 1 41


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Help > Commuter Licenses to obtain and return commuter licenses or to check on the licensing status
of L-Edit modules.

L-Edit 14 User Guide Section Section 1 42


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Displaying the Product Version or Contacting Customer Support


To determine which version of L-Edit you are using, to find contact information for the Tanner EDA
Sales and Support departments, or to quickly read memory information for your computer, choose from
the tabs in Help > About. .

Diagnostics for Customer Support


Click Help > Support Diagnostics to perform the system check you will need if you contact Tanner
technical support.

L-Edit 14 User Guide Section Section 1 43


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Toolbars

L-Edit provides numerous toolbars to speed editing, which you can show or hide using
View > Toolbars, or using the context-sensitive menu accessed with a right click in any toolbar.

You can also move and resize L-Edit toolbars. A toolbar must be undocked in order to be resized. To
undock a toolbar, click on one of its edges and drag it out of the toolbar area. To resize a toolbar, click
and drag on an edge once it is undocked. You can keep the toolbar “floating” (undocked), or you can
either return it to the toolbar area from whence it came by double-clicking on it, or you can drag it to
any docked position you prefer.

L-Edit maintains whatever changes you make to a toolbar’s location and size when you exit the
program. If you move or resize toolbars during an L-Edit session and want to return them to the
positions they occupied at the start of the session, use Reset Toolbars in the menu shown above.

L-Edit 14 User Guide Section Section 1 44


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Standard Toolbar

Button Menu Command

File > New

File > Open

File > Save

File > Print

Edit > Cut

Edit > Copy

Edit > Paste

Edit > Undo

Edit > Redo

Edit > Edit In-Place > Push Into

Edit > Edit In-Place > Pop Out

Edit > Find

Edit > Find Next

Edit > Find Previous

View > Goto

View > Design Navigator

View > Zoom > Mouse

View > Insides > Toggle Insides

View > Hierarchy Level

Cell > Open

Cell > Copy

Tools > Cross-Section

Tools > Regenerate T-Cells

Help > L-Edit User Guide

Drawing Toolbar

See “Drawing and Editing Objects” on page 170 for instructions on using these commands.

Button Object

Cursor tool
Box
90° polygon
45° polygon

L-Edit 14 User Guide Section Section 1 45


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Button Object

All-angle polygon
Orthogonal wire
45° wire
All-angle wire
Wire width
Circle
Pie Wedge
Torus
Port
90° ruler
45° ruler
All-angle ruler
Instance (Cell > Instance)

Editing Toolbar

See “Drawing and Editing Objects” on page 170 for instructions on using these commands.

Button Menu Command

Edit > Duplicate

Draw > Rotate > 90 degrees

Draw > Rotate > Rotate

Draw > Flip > Horizontal

Draw > Flip > Vertical

Draw > Slice > Horizontal

Draw > Slice > Vertical

Draw > Nibble

Draw > Merge

Draw > Boolean Grow/Shrink Operations

Draw > Group

Draw > Ungroup

Edit > Edit Object(s)

Draw > Move By

L-Edit 14 User Guide Section Section 1 46


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Verification Toolbar

See “The Verification Error Navigator” on page 850 for instructions on using these commands

Button Menu Command

Tools > DRC

Tools > Extract

Tools > DRC Box

Tools > DRC Setup

Tools > Extract Setup

Tools > Enable Interactive DRC

Setup > Design > Interactive DRC

Alignment Toolbar

See “Aligning and Distributing Objects” on page 187 for a description of this toolbar

Button Menu Command

Draw > Align > Left

Draw > Align > Horizontal Center

Draw > Align > Right

Draw > Align > Top

Draw > Align > Vertical Center

Draw > Align > Bottom

Draw > Align > Distribute Horizontally

Draw > Align > Distribute Evenly Horizontally

Draw > Align > Distribute Evenly Vertically

Draw > Align > Tile Horizontally

Draw > Align > Tile Vertically

Draw > Align > Tile as a 2D Array

MultiGrid Toolbar

See “Multigrid Toolbar” on page 81 for a description of this toolbar.

Button Menu Command

Mouse Grid 1

Mouse Grid 2

Mouse Grid 3

L-Edit 14 User Guide Section Section 1 47


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Button Menu Command

Max Grid

Manufacturing Grid

Make Coarser

Make Finer

Set Nudge from Snap Grid

Mouse Snap Grid

Base Point Toolbar

See “Base Point Mode” on page 285 for a description of how to use this toolbar.

Button Menu Command

Use Base Point

Pick Base Point

(untitled) Enter coordinates to locate a base point.

Object Snap Toolbar

See “Object Snapping” on page 182 for a description of how to use this toolbar.

Button Menu Command

Vertex

Midpoint

Edge

Center

Quadrant

Pin

Instance

Instance MBB

Enable Object Snap

Setup Object Snap

Node Highlighting Toolbar

See “The Node Highlighting Toolbar” on page 369 for a description of how to use this toolbar.

Button Menu Command

Extract Connectivity

L-Edit 14 User Guide Section Section 1 48


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Button Menu Command

Highlight Node

Highlight by Name

Zoom to Node

Toggle Markers

Clear Markers

Enable Node Highlighting

Node Highlight Setup

Layer Palettes

L-Edit supports an unlimited number of technology layers. They can be displayed using either of two
layer “palettes.” Either or both palettes can be open at once, and can float or be docked. You can resize
the palettes or use the scroll bars to view layers not visible in the current display. Please refer to “Layer
Palettes” on page 106 for detailed information on using the layer palettes.

The Compact Layer Palette is a grid of icons that replicate the color and pattern of each layer to
provide a quick way to select a layer when you are drawing.

The Layer Palette is also used for layer selection, but provides additional features for layer display and
manipulation.

Compact Layer Palette Layer Palette

L-Edit 14 User Guide Section Section 1 49


Chapter 1: Introduction to Layout Editing Elements of the User Interface

Status Bars

There are three status bars associated with L-Edit: the status bar, the mouse button bar, and the locator.
To show or hide a status bar, use View > Status Bars.

Status Bar

The status bar, located at the bottom of the L-Edit window, displays context-sensitive information
about items in the interface.

The status bar contains two panes. The left pane displays regular L-Edit status as indicated in the
following table. The right pane indicated the current mode.

Action Display

When the pointer is in the The name of the layer the pointer is over. If the layer is generated, the
Compact Layer palette: Boolean formula for that layer is also shown.
When a menu command is A description of the command.
highlighted:
When a single object is The type, layer, and size of the object. For cell instances and arrays,
selected: the name of the instanced cell.
When multiple objects are The count, by type, of the selected items (for example, 4 boxes, 1
selected: circle, 3 ports, and 1 instance).

When a persistent ruler is The ∆X & ∆Y of a ruler or measurement operation.


selected:
When the pointer is in a The function of the pointed-to tool.
toolbar:
All other times: Ready

The Details button ( )creates a text file containing a textual description of the selected object, such as
Box, A=1082.25, P=154.0000, W=58.5000, H=18.5000 on Layer 'Poly'.

The right pane displays the L-Edit mode. Possible modes are:

ƒ Drawing (default)
ƒ Nibble

L-Edit 14 User Guide Section Section 1 50


Chapter 1: Introduction to Layout Editing Elements of the User Interface

ƒ DRC Box
ƒ Zoom Box (for View > Zoom > Mouse command)

Mouse Button Bar

The mouse button bar displays the current function of each mouse button.

The mouse buttons function differently depending on the location of the mouse in the application and
the current L-Edit mode (drawing, editing, zooming, etc.).

Locator Bar

In default (“absolute”) mode, the locator provides the location of the pointer relative to the absolute
origin in display units. The absolute origin is at the coordinates (0,0), and it is indicated by a cross in the
layout area.

View > Display > Cycle Locator Bar Format (shortcut Shift+F) will cycle through the different locator
bar display types. See “Locator bar display during editing” on page 63 for the other coordinate display
modes.

Coordinate System
L-Edit shows object sizes, distances, and positions in any of six physical units, called display units:
Microns, Mils, Millimeters, Centimeters, Inches, or a custom unit (if one is defined).

Custom units are defined in the Setup Design—Technology dialog. This dialog also lets you set the
default value of display units. For its own computation, L-Edit uses internal units (30-bit signed
integers). The relation between internal units and physical (technology) units is also defined in the same
dialog. For further information, see “Technology Parameters” on page 78.

Display units do not affect the physical dimensions of your layout. Rather, they determine the system of
units in which L-Edit reports physical lengths, areas, and positions. Display units also determine the
units used to specify spatial parameters in various L-Edit dialogs.

For example, if display units are set to microns, (a, b) refers to coordinates microns.

L-Edit 14 User Guide Section Section 1 51


Chapter 1: Introduction to Layout Editing Elements of the User Interface

If you change the display units to millimeters, the same coordinates (a, b) will be shown in millimeters:

Relative Coordinate Display


When you press Q, the locator changes to relative coordinate display mode. In this mode, the locator
displays the coordinates of the pointer’s position relative to its position when Q was pressed. The third
number represents the distance between the pointer’s current position and its initial position. When you
press Q again, the display goes back to the default mode.

Aerial View

The aerial view toolbar shows the position of the current viewing window relative to the cell boundary.
The viewing window is shown in blue outline, and the cell boundary is depicted in either black or white,
depending on the background color of the layout window. You can use aerial view toolbar as a
navigation device; simply click within it to pan to a location in the viewing window.

Layout Area

The area available for drawing objects is called the layout area. The origin of the coordinate system
(0,0) is indicated with a cross-hair marker, which you can hide or display using
View > Display > Origin. Optional displays of major and minor grids provide a set of convenient
locating points, which you can hide or display using View > Display > Major Grid and
View > Display > Minor Grid. You can adjust the spacing of the major and minor grid points using
Setup Design—Grid.

Text Editor

L-Edit provides a text editor with syntax highlighting for several file types. The File > New command
automatically launches the text editor if you have picked any of the following file types:

L-Edit 14 User Guide Section Section 1 52


Chapter 1: Introduction to Layout Editing Elements of the User Interface

ƒ Text
ƒ UPI Macro
ƒ SPICE netlist
ƒ Calibre, Dracula and Assura command files

See “Text Style” on page 76 and “Text Editor” on page 74 for the setup options that control this
window.

Command Line Window

In addition to menu items and keyboard shortcuts, L-Edit includes a command line interface that allows
textual entry of basic commands and their associated coordinates. This window allows for repeatable,
coordinate-specific object manipulations and command scripting with text files.

See “Command Line Editing” on page 221 for instructions on using this tool.

Design Navigator

The Design Navigator shows all cells in a design in a hierarchical display that includes information
about parent and child cells, XrefCells and DRC status, whether the cell is locked and similar details.
You can also use it to quickly find and open a cell instance.

See “Design Navigator” on page 233 for instructions on using this tool.

Verification Error Navigator

The Verification Error Navigator is a toolbar that displays a scrollable tree of DRC rules and violations
for the active cell. After running DRC, you can use the Verification Error Navigator to step through and
display errors in the active layout.

See “The Verification Error Navigator” on page 850 for instructions on using this tool.

SDL Navigator

The schematic-driven layout (SDL) navigator let you associate a netlist with any layout cell, and
provides navigation tools to identify required interconnections. It also can automatically generate layout
corresponding to subcircuits and devices.

See “Schematic-Driven Layout (SDL)” on page 330 for more details.

L-Edit 14 User Guide Section Section 1 53


2 Application and Design Setup
1

Replacing the Setup

Every L-Edit design file contains basic information such as a layer list, technology settings, and
module-specific options for SPR, DRC, and Extract. Collectively, this information is known as the
“setup.”

File > Replace Setup lets you import setup information from a source file to the current file.

From file Name of the TDB file whose setup is to be imported. Click Browse to
navigate to an existing file.

L-Edit 14 User Guide Section 1 54


Chapter 2: Application and Design Setup Replacing the Setup

Layers Imports layer setup from the specified file.


ƒ Replace deletes the layers in the destination file and replaces
them with the layers from the source file.
ƒ Merge adds the layers from the source file to the list of available
layers in the destination file. Source file layers not present in the
destination file are appended to the layer list in the destination
file. If a layer in the source file has the same name as a layer in
the destination file, the position it has in the destination file is
maintained. For further information, see “Merging Layer Setups”
on page 58.
Additional layer-specific setup options include:
ƒ CIF names
ƒ GDS II numbers
ƒ Wire settings

Technology Options include:


ƒ Maintain physical size—With this option, L-Edit checks all
objects in all cells and unit-specific parameters entered in other
dialogs to determine if the layout will be truncated when it is
rescaled. L-Edit presents one warning for each cell and set of
parameters if a truncation will occur. If you answer Yes to all the
warnings, or if no truncation will occur, L-Edit rescales the
design. If you answer No to any of the warnings, L-Edit cancels
the rescaling operation.
ƒ Rescale—L-Edit rescales the design by applying technology
scaling parameters in the source file to objects in the destination
file.
Draw Transfers the parameters entered in Setup Design—Drawing. See
“Drawing Parameters” on page 84.
Palette Transfers the color parameters entered in Setup Colors. See “Color
Parameters” on page 59.
Show/Hides Transfers the view settings for grid, origin, ports, and other objects.
Properties If checked, replaces the System and other parameters set in File >
Info—Properties. See “Properties” on page 138.

Selection Transfers the parameters entered in Setup Design—Selection. See


“Selection Parameters” on page 82.
Grid Transfers the parameters for the display grid and mouse snap grid.
See “Grid Parameters” on page 79.
Xref files If checked, replaces the TDB files that will be used as cross-reference
of library files, as set in Setup > Design—Xref files. See “Cross
Reference (XRef) File Designation” on page 85.
Object Snap Transfers the setup parameters for object snapping. See “Object Snap
Setup” on page 183.
Interactive DRC Transfers the setup parameters for interactive DRC. See “Setting Up
Interactive DRC Rules” on page 360.

L-Edit 14 User Guide Section 1 55


Chapter 2: Application and Design Setup Replacing the Setup

Node Highlighting Transfers the setup parameters for interactive DRC. See “Node
Highlighting Setup” on page 366.
Modules Check the corresponding box to replace setup information for:
ƒ DRC rules
ƒ Extract
ƒ Cross-Section

SPR Check the corresponding box to replace setup information for:


ƒ Core setup (see “SPR Core Setup” on page 411)
ƒ Padframe setup (see “SPR Padframe Setup” on page 422)
ƒ Pad route setup (see “SPR Pad Route Setup” on page 426)
ƒ Place and Route configuration (see “SPR Setup” on page 408)

Uncheck All Deselects all options

Importing a Setup from Virtuoso

This import feature simplifies transitions of designs from the Cadence Virtuoso® to the Tanner L-Edit
design environment. Importing a Virtuoso setup always creates a new L-Edit file. The display and tech
files are concatenated and read as one.

The Setup > Import > Import Virtuoso® Setup command creates an L-Edit technology setup by
reading a Virtuoso technology file. Imported elements include palette colors, background color, grid
colors, layers (including rendering information, GDS layer number and GDS datatype) and
manufacturing grid. L-Edit elements that are missing from Virtuoso (such as user-defined rendering)
are automatically generated.

Display file Specifies rendering information (palette colors and stipple patterns.)

L-Edit 14 User Guide Section 1 56


Chapter 2: Application and Design Setup Replacing the Setup

Tech file Specifies technology information (layers, purposes, and bindings


between these and display data).
Display name In Virtuoso, “displays” are used to identify particular drawing styles,
often optimized for specific display devices (e.g., screen, plotter,
printer). One of these displays must be selected to import into L-Edit.
GDS layer mapping file Specifies GDSII layer information (layer numbers and datatypes from
the Virtuoso layer map file.)
Create L-Edit layers from: L-Edit layers can be created from any of three sources:
ƒ Virtuoso techLayers/techPurposes—An L-Edit layer can be
created for each pair of Virtuoso layer / purpose. A Virtuoso
“purpose” identifies an application of a given layer; for example,
layer “metal” can have two purposes: “contact” and “wire”. Each
layer-purpose pair has its own rendering information, GDS
number, etc.
ƒ Virtuoso techLayers (in techDisplay order)—An L-Edit layer
can be created for each Virtuoso layer. The rendering information
is taken from the first packet bound to that layer, for the
particular display specified.
ƒ Virtuoso packets—Rendering information in Virtuoso (line
styles, colors and weights, fill colors and stipples) is grouped into
“packets.” An L-Edit layer can be created for each Virtuoso
packet.

Importing a Setup from Laker

You can import Silicon Canvas’ Laker file setups to the Tanner L-Edit design environment using
Setup > Import > Import Laker Setup. You must have a file open in L-Edit to access the command, but
importing a Laker setup creates a new L-Edit file.

Setup > Import > Import Laker Setup creates an L-Edit technology setup by reading a Laker display
(.dsp) and technology (.tf) file. Imported elements include palette colors, background color, grid colors,
and layer rendering information, GDS layer number and GDS datatype.

L-Edit elements that are missing from Laker (such as user-defined rendering) are automatically
generated to default settings. L-Edit will warn if it encounters an undefined command but the import
will continue.

Display file Specifies rendering information (palette colors and stipple patterns).

L-Edit 14 User Guide Section 1 57


Chapter 2: Application and Design Setup Replacing the Setup

Tech file Specifies layer definitions, GDS mappings, and bindings between
these and display values.

L-Edit provides a brief summary after a successful import.

Merging Layer Setups

When you merge layer setups, L-Edit adds source-file layers to the layer list in the destination file. If the
source file has layers not present in the destination file, L-Edit appends them to the destination-file layer
list. If the source file and destination file have a layer with the same name, the layer maintains its
position in the destination file’s layer list.

For example, a source file contains layers A, B, and C (in that order), and a destination file contains
layers B, D, and E (in that order). After replacing, the destination file will contain layers A, B, and C.
After merging, the destination file will contain layers B, D, E, A, and C. (The destination file’s
information on layer B is replaced with the source file’s information on layer B.)

Note: Importing a layer setup also transfers a layer’s lock status from the source file to the
target file. For example, if you lock Metal1 in the source file, it will be locked in the
target file. Conversely, if you lock Metal1 in the target file but unlock it in the source
file, it will then be unlocked in the target file after you replace the layer setup.

L-Edit 14 User Guide Section 1 58


Chapter 2: Application and Design Setup Color Parameters

Color Parameters

You can display an L-Edit design file using 16, 32, 64, 128, or 256 colors in your palette. Each color has
two attributes, a unique identifying binary code and an RGB color definition. You use Setup > Colors
to define your design colors.

Binary code for the color, in this


case purple.

RGB values for the color, in this


case R=170, G=85, B=170.

Number of colors Select the number of colors that will be available for defining layer
colors. Options are 16, 32, 64, 128, or 256 (True Color mode) colors.
Sort colors by Select how colors will be sorted. This setting applies to both this
dialog and the Setup Layers dialog. Options are:
ƒ Index—sorts by index number, which is the binary value of a
color.
ƒ Number of bits—sorts by the number of bits used to define a
color and then by index number if the number of bits set is equal.
ƒ Hue—sorts by hue, then saturation, then luminosity, then index
number.
ƒ Brightness—sorts by luminosity in descending order, then hue,
then saturation, then index number.
(left pane) Shows a sample of each defined color and the associated 4- to 8- bit
binary code used to assign a unique color index number to that color.

The number of bits used in each color depends on the number of


colors available in the file (for example, 4 bits are used in a 16 color
file).
Color (RGB) Displays the composition of each color as a function of its Red,
Green, and Blue values, which can range from 0 to 255.

You can use the slider controls or type a number in the red, green and
blue colored boxes to modify a color.

L-Edit 14 User Guide Section 1 59


Chapter 2: Application and Design Setup Application Parameters

Color Picker Opens the standard Windows Color dialog that allows you to select
and define colors.

Application Parameters

To modify application-level settings in L-Edit, choose Setup > Application. Application-level settings
are divided into nine categories, which appear on separate tabs—General, Keyboard, Mouse,
Warnings, UPI, Rendering, Selection, Text Editor and Text Style.

Configuration Files

Application settings are saved in application configuration (.ini) files. You specify configuration file
options in the top portion of the Setup Application dialog.

Configuration
File Options

Configuration files are ASCII files containing application-wide setup information that can be edited and
shared among multiple users. To load settings from an existing file, enter the name of the file in the
Workgroup or User field, or choose from available files using the Browse button next to the desired
field. Click Load to load the settings into L-Edit.

Workgroup and User Configuration Files

L-Edit can load configuration information from either a Workgroup or a User file. Workgroup files are
intended to be shared by multiple users; for example, they may contain key remapping sequences that
will be used by many users. User files are intended to contain preferences specific to a particular
individual.

Changes in the Setup Application dialog can only be saved to User configuration files. Therefore, an
INI file loaded as a Workgroup file is protected from accidentally being changed. When both
workgroup and user files are specified in Setup Application, settings from the user file override
settings in the workgroup file.

To create a workgroup configuration file, first save the desired settings in a user configuration file. You
can then copy the user configuration file to a new name to create a workgroup file.

Editing Configuration Files

Tanner INI files use the Windows INI file format and can be edited with any text editor. To write out the
user configuration file, press Shift+Enter or hold the Shift key while clicking OK in the Setup
Application dialog.

L-Edit 14 User Guide Section 1 60


Chapter 2: Application and Design Setup Application Parameters

Contents of Configuration Files

The following L-Edit parameters are saved in an INI file:

Parameters Refer to Section:

General options, including:


ƒ Mouse settings “Mouse” (page 65)

ƒ Recently used file list and “General” (page 62)


TDB Setup Path
ƒ Examine Xref Cells during “Updating Xref Cells” (page 269)
loading
ƒ Enable keyboard shortcuts in “Design Navigator” (page 233)
the Design Navigator
ƒ Show Verification Error “Optimizing Performance” (page 474)
Navigator after running DRC
Toolbar settings “General” (page 62)

Editing options, including:


ƒ Autopan, rubberbanding, “General” (page 62)
Paste to cursor
ƒ Instance rendering and “Rendering” (page 69)
caching
Warnings “Warnings” (page 67)

CIF import and export options “Importing CIF Files” (page 149) and “Exporting CIF Files”
(page 156)
GDSII import and export options “Importing GDS Files” (page 146) and “Exporting GDS Files”
(page 153)
Keyboard remapping settings “Keyboard Customization” (page 64)

L-Edit 14 User Guide Section 1 61


Chapter 2: Application and Design Setup Application Parameters

General

Use the General tab to customize editing options, toolbar display, and other general application
parameters.

Paste to cursor When this option is checked, objects placed in the layout with
Edit > Paste move with the pointer until any mouse button is clicked.
They are then “dropped” into place at the location of the pointer. See
“Paste to Cursor Feature” (page 289). Before objects are dropped in
their final position, they can be rotated or flipped using keyboard
command shortcuts. See “Reorienting” (page 286).
Auto-panning When this option is checked, L-Edit automatically pans the view
when the pointer touches an edge of the window during a draw, move,
or edit operation.
Active-push When this option is checked, it is unnecessary to hold down the
rubberbanding mouse button during a drag operation. For example, when drawing a
box, you can click and release the DRAW button at one corner of the
box, move the pointer to the opposite corner of the box, then click the
DRAW button again to complete the operation.

L-Edit 14 User Guide Section 1 62


Chapter 2: Application and Design Setup Application Parameters

Show edit vector When this option is checked, L-Edit draws a rubberband line during a
move or edit operation from the cursor start position to its current
during the click-and-drag operation.
increment port text on When this option is checked, and the last character in the port name
Duplicate field is a numeral, L-Edit automatically increments the port label by
one with each port that is placed.
instance stretching When this option is checked, instances and arrays will be stretched,
where stretching increases the repeat count of the instance or array in
the direction of the stretch.

The default state of this option is on, which sets the middle mouse
button in “EDIT” mode when the cursor is on the corner or edge of an
instance’s minimum bounding box. The instance will “MOVE” when
the cursor is not on an edge or corner, or when this option is set to
“OFF.”
ƒ For instances of regular cells, stretching converts the instance
into an array.
ƒ For instances of T-Cells, stretching regenerates the instance with
updated stretching parameters. (T-Cell parameters have an option
for this purpose.)
ƒ For arrays, stretching increases or decreases the number of rows
and columns in the direction of the stretch by the whole number
that best fits the extent of the edit.
Locator bar display during These checkboxes set the type of coordinates the locator bar displays
editing in the editing windows.

Pressing Shift+F will cycle through the different locator bar display
types (also View > Display > Cycle Locator Bar Format.)

Pressing Q will toggle the locator bar display to relative coordinate


mode with respect to the position of the cursor when Q was pressed.
When you press Q again, the display goes back to the default mode.
ƒ Delta format—displays coordinates in (delta-x, delta-y, delta)
format relative to the start of the edit.
ƒ Polar format—displays coordinates in polar format (delta, angle)
relative to the start of the edit. When an edit operation is not
being performed, the polar coordinate display is relative to the
origin of the cell.
ƒ Absolute format—displays the value of the x- and y- coordinates
of the current position of the mouse.
Toolbars: Sets the default pixel size of icons on the Layer palettes. You can
increase or decrease the icon size in two-pixel increments at any time
Layer icon size by right-clicking on any layer name, in either Palette, and selecting
Options.

Drawing mode Sets the default display of drawing tools on the Drawing toolbar.
When Orthogonal or 45 Degrees is chosen, only those tools fitting
that description will be displayed. When All Angle is selected, all
tools are displayed.
Use large buttons When checked, increases the size of all toolbar buttons by 50 percent.

L-Edit 14 User Guide Section 1 63


Chapter 2: Application and Design Setup Application Parameters

Recently used file list Controls the number of recently used files displayed in the File menu.
Language used in menus Select the language for menus. Choosing Windows in this entry will
put menus in the language based on Windows settings.
File Integrity: If checked, L-Edit reads the tdb file immediately after writing.
If it detects errors it reports them and reverses the write operation by
Validate after saving (can renaming the .tdx (backup of backup) file to .tdo, and the .tdo
be slow) (backup) file to .tdb. As noted, this can be a time consuming process.
TDB setup path Predefined directories for TDB setup files. TDB files in these
directories are listed in the Copy TDB setup from file field in the
File > New and File > Import Mask Data dialogs.

Keyboard Customization

Use the Keyboard tab to customize keyboard shortcuts.

Category Command categories corresponding to L-Edit menu items. To select a


category, highlight an item in the drop-down list.
Commands The set of commands for the selected category. Highlight a command
from the list to select it. Additional commands may be viewed by
moving the scrollbar up or down.

L-Edit 14 User Guide Section 1 64


Chapter 2: Application and Design Setup Application Parameters

Description A description of the command highlighted in the Commands list.


Current keys The current shortcut key combination for the command highlighted in
the Commands list. To delete a shortcut, highlight the shortcut and
click Remove.
Press new shortcut key With the cursor in this field, press the desired shortcut on the
keyboard, which will then be textually represented in the field. Click
Assign to register the new shortcut.

Default Reassigns all shortcut key assignments in the current editor to their
default settings.

Not that only user-defined keyboard assignments are saved in the user configuration file. To write all
keyboard assignments to the user configuration file, press Shift+Enter or hold the Shift key while
clicking OK

Mouse

Use the Mouse tab to customize mouse button assignments and mouse tooltip display options.

L-Edit 14 User Guide Section 1 65


Chapter 2: Application and Design Setup Application Parameters

Show under mouse pointer When checked, the mouse pointer displays a persistent tooltip
showing the operation associated with each mouse button.
ƒ Text only displays vertical text describing each button operation.
ƒ Pictures only displays icons indicating each button operation.
ƒ Both text and pictures displays tooltip text and icons with the
mouse pointer.
When Solid Background is checked, L-Edit encloses the mouse
tooltips in a box with solid fill.

Note: You can toggle mouse tooltips display at any time using
View > Display > Mouse Hints.

Button Assignments Determines the order in which mouse button assignments are
displayed in tooltips and in the Mouse Button bar. You can select a
Right-handed or Left-handed mouse, or choose OS default to use
the default setting for your operating system.
Hide middle button When selected, hides the middle button reference in the mouse
operations tooltips and the Mouse Button Bar. Use this feature to show the
functionality of a two-button mouse.
Full-screen cursor When this option is selected, the cursor is displayed as vertical and
horizontal lines extending across the full extent of the layout window.

L-Edit 14 User Guide Section 1 66


Chapter 2: Application and Design Setup Application Parameters

Warnings

Use the Warnings tab to enable and disable optional warnings and explanations that you may encounter
while editing a design file.

L-Edit 14 User Guide Section 1 67


Chapter 2: Application and Design Setup Application Parameters

UPI

Choosing the UPI tab in the Setup Application dialog allows you to set a path to the header files that
L-Edit uses when running an interpreted macro. This dialog is also used to set a path to the log file
where UPI writes macro errors.

Location of the interpreter The complete path of the directory containing the L-Edit interpreter
header files header files. Clicking Browse next to this field calls a standard
Windows directory browser.

Note: The path name in this field is limited to a maximum of 75


characters. Therefore, you should not keep interpreter header
files in highly nested subdirectories.
Update display When checked, L-Edit updates the display while UPI code is
executing. When unchecked (default), L-Edit does not update the
display during the execution of a macro or T-Cell generator.
Show warning dialog When checked (default), L-Edit displays warning dialog boxes in the
boxes user interface. When unchecked, L-Edit runs in quiet mode, in which
warning dialog boxes are not displayed.

Note: Batch processing must be run in quiet mode.

L-Edit 14 User Guide Section 1 68


Chapter 2: Application and Design Setup Application Parameters

Rendering

Use the Rendering tab to establish basic display behavior.

Hide instance insides if Defines the minimum size (in pixels) that an instance must be to be
less than completely drawn on the screen. If the instance width is smaller than
the Horizontal parameter or the instance height is smaller than the
Vertical parameter, it is drawn in outline mode—its insides are not
shown.

Suppressing the display of instance insides can enhance screen redraw


times and clarify the layout if the screen is zoomed out to a relatively
small magnification.
Cache instances smaller When checked, defines the maximum size (in pixels) that an instance
than may be to be cached. Cached instances are are rendered once and then
copied for each instance reference. They can be subsequently
redrawn at much higher speeds than non-cached instances but may
display alignment artifacts at the instance boundaries.

Very large cached instances may exhaust the available memory. The
default maximum size is 700 pixels.

L-Edit 14 User Guide Section 1 69


Chapter 2: Application and Design Setup Application Parameters

Hide objects smaller than When checked, defines the minimum size (in pixels) that an object
must be to be drawn on the screen.
Redraw Choose All windows to redraw, for example, instances of a cell in
other windows when the cell itself is modified, or Active window to
redraw just what is displayed in the currently active window. L-Edit
will redraw other windows as soon as they are activated. Redrawing
the active window only can substantially improve rendering speed.
Fill objects when When unchecked, renders objects in outline mode during drawing or
editing/drawing editing operations.
Rendering can be When checked, rendering can be interrupted with any mouse click or
interrupted key stoke so that a full redraw does not have to be completed between
each operation.
Show design while When checked, periodically updates the design display during
rendering rendering. The First time after field specifies the elapsed time from
the start of a rendering operation to the first display update. L-Edit
then periodically updates the display at the interval specified in Then
every until rendering is complete. Both times are defined in msec.

When Show design while rendering is not checked, L-Edit waits to


complete a rendering operation before updating the display. This
setting allows for faster rendering, but with less immediate feedback
during screen refresh operations.
Advanced performance Opens Advanced Performance Settings, which allows you to set
settings and test system performance options that affect L-Edit rendering
speed. (See “Advanced Performance Settings,” below.)
Instance Name Text Height These fields set the font size of cell names so they will remain visible
regardless of zoom level.

The Maximum value sets the largest font height of the instance name,
in pixels. (If this value results in an instance name that will not fit in
the instance MBB L-Edit will shrink it to fit.)

The Minimum value sets the size at which instance name text display
will be suppressed, in pixels.
Temporary rulers text Enter a size in pixels for temporary ruler text.
height

L-Edit 14 User Guide Section 1 70


Chapter 2: Application and Design Setup Application Parameters

Advanced Performance Settings

Use CPU for color mixing Affects rendering performance by allowing your CPU or video card to
handle the process of color mixing.

L-Edit mixes layer colors to produce the proper color display where
objects overlap. When relatively few objects are drawn on a relatively
large number of layers, performance can degrade.

Unless you have very powerful video card, this option should be
checked to perform color mixing on the CPU.
Use MMX technology If the CPU is used for color mixing, MMX technology generally
provides optimal performance. However, occasionally an unusual
system configuration produces better performance with this option
disabled.
Use PatBlt function for L-Edit uses a fast Win32 function called PatBlt when rendering layers
patterns with objects having patterned fill or outlines. However, video driver
manufacturers may implement this function in a non-optimal or
unpredictable manner. If you find that patterns are not rendered
correctly when this option is checked, try unchecking it.

Note that for Windows 95/98/ME it is recommended that this option


be disabled.
Default Restore the default settings, which are best for most system
configurations.
Test Performs a rendering test by measuring how long it takes to redraw
the top layout window ten times. Use this test to analyze different
performance settings.

L-Edit 14 User Guide Section 1 71


Chapter 2: Application and Design Setup Application Parameters

Selection

Use the Selection tab to specify edge selection modes and general selection parameters.

If you simply click the mouse repeatedly without moving it, L-Edit selects objects in cycle, as described
in “Cycle Selection” on page 276.

Permit selection of objects When this option is on, objects on locked layers may be selected and
on locked layers their properties may be inspected. When off, objects on locked layers
will not be selectable.

L-Edit 14 User Guide Section 1 72


Chapter 2: Application and Design Setup Application Parameters

Minimum zoom/selection Specifies the minimum area, in pixels, of a zoom or selection box.
box size The zoom/selection box is a construct L-Edit uses in zooming to a
specified view and selecting objects.

A zoom box defines the boundaries of the view during a zoom


operation. When you choose View > Zoom and draw a box, for
example, L-Edit zooms to a view corresponding to that box.

A selection box specifies an area within which L-Edit selects objects.


When you drag a selection box around an object, selects all or part of
that object, depending on your Edge selection mode setting.

If your mouse is not perfectly stable, you can use the option Minimum
zoom/selection box size to specify the minimum size of this box.
Use a relatively small value, such as 2 or 3 pixels, to prevent L-Edit
from misinterpreting small, accidental mouse movements as a zoom
or selection box.
Edge selection modes Governs edge selection behavior.
ƒ Select edges only when fully enclosed by selection box—
with this option, L-Edit will only select objects completely
contained within the selection box. Any previously selected
objects will be deselected.
ƒ Select edges when partly enclosed by selection box—with
this option, L-Edit will select all objects completely or partly
contained within the selection box.
Enable implicit selections When implicit selection is enabled, a click-and-drag of the middle
mouse button while near or over an object or object edge will
implicitly select that object. When this option is not checked, you
must select objects explicitly. See “Implicit Selection” on page 276.
Highlight implicit Implicit selections are highlighted with dashed outline as the mouse is
selections positioned over an object or an edge. This gives an indication which
object or edge an implicit edit will act upon. A useful feature is that
cell and instance names will be displayed when the mouse is moved
over an instance, when this option is on.

L-Edit 14 User Guide Section 1 73


Chapter 2: Application and Design Setup Application Parameters

Text Editor

Use the Text Editor tab to control whether and how files are saved when a file has been modified
outside of the L-Edit text editor.

When the L-Edit text editor loads a file it does not lock it. It checks the stored version of a file for
modifications when files are saved, first changed, and when the text window or application becomes
active or is closed. If a stored file has not changed, nothing will happen.

Auto-Load When enabled, L-Edit automatically updates the text files that have
been modified outside of the text editor when those files have not
been modified within the text editor.
Modified text files If documents that will be used during DRC, extract, LVS, simulation
or UPI have been modified before any of these operations are started:
ƒ Save all changes—silently saves only those files directly
associated with the operation.
ƒ Prompt to save changes—opens a dialog indicating which files
have been modified, with the option to save them.
ƒ Don’t save changes—modified files will not be saved and the
operation will use the stored version of those files.

L-Edit 14 User Guide Section 1 74


Chapter 2: Application and Design Setup Application Parameters

Files Modified Outside the Text Editor

When Auto-Load is disabled, L-Edit will open a checklist of all the files open in the text editor that
have been modified elsewhere. You will have the option to reload modified files (checked) or not. Files
that have also been modified in the text editor will be highlighted. Similarly, when Prompt to save
changes is selected, L-Edit will open a checklist of the modified files associated with the operation you
are running.

L-Edit 14 User Guide Section 1 75


Chapter 2: Application and Design Setup Application Parameters

Text Style

Use the Text Style tab to define the types of text (keyword groups) that will be highlighted in the text
editor, and their appearance.

Each file type has a set of predefined keyword groups that cannot be edited or deleted. Use this tab to
view those settings, and to add or remove your own keyword groups with customized characteristics.

File Type A drop down list of the file types for which keywords are or can be
defined.
Font Allows you to set the typeface (Face Name) and point Size in which
a given keyword group will appear.
Paragraph Allows you to set the increment, in spaces, of the Tab Size used by
the text editor.
Groups Displays the keyword groups defined for a given file type. Use Add to
enter the name of a new keyword group. Use Edit to enter the
keywords belonging to a group. Use Remove to delete a keyword
group.
Colors Use Foreground and Background to set the respective colors for a
keyword group.

L-Edit 14 User Guide Section 1 76


Chapter 2: Application and Design Setup Design Setup

Adding Keywords to a Group

Edit keyword groups opens the Keywords dialog, which allows you to enter keywords and to specify
whether the case is evaluated (Case sensitive keywords checkbox enabled) when highlighting is
applied.

Design Setup

To modify design-level settings in L-Edit, choose Setup > Design. This command opens the Design
Setup dialog, which has tabs that allow you to manipulate design parameters in eight categories:

ƒ “Technology Parameters” (page 78)


ƒ “Grid Parameters” (page 79)
ƒ “Selection Parameters” (page 82)
ƒ “Drawing Parameters” (page 84)
ƒ “Cross Reference (XRef) File Designation” (page 85) also called “Xref files”
ƒ “Snap Parameters” (page 86)
ƒ “Interactive DRC Parameters” (page 86)
ƒ “Node Highlighting Setup” (page 366)

Internal Units, Display Units, and Technology Units

L-Edit uses display units to report object dimensions and coordinates. The program also uses display
units to set the display grids and mouse snap grid. You can choose to display units of microns, mils,
millimeters, centimeters, inches, or a custom unit. (Custom units can be defined on the Setup > Grid—
Technology dialog.) The choice of display units does not affect the scaling of your design.

For its own computation, L-Edit uses internal units (30-bit signed integers). Before beginning your
design, you should define the relation between L-Edit’s internal units and physical, or technology, units,

L-Edit 14 User Guide Section 1 77


Chapter 2: Application and Design Setup Design Setup

as it will determine the extent of the layout area and the smallest object that can be drawn. This relation
is also critical when you replace your design setup or export a design to CIF or GDSII format. Defining
this relationship sets the scale of the design file.

The L-Edit layout area extends from -536,870,912 to +536,870,912 internal units in both the x-
(horizontal) and y- (vertical) directions. Thus, if 1 internal unit = 0.001 micron, the largest possible
design is 1,073,741 microns (almost 42.3 inches) on a side. Similarly, the smallest dimension L-Edit
can define is 1 internal unit. If 1 internal unit = 0.001 micron, the smallest possible feature size would be
0.001 micron. (In practical terms, of course, 0.001 micron is an unrealistically small feature size.)

In practice, you might also wish to adjust other settings based on your minimum feature size. If you use
the display grid as a visual aid while drawing, you may wish to adjust its spacing. To achieve adequate
resolution, you may wish to adjust the spacing of the mouse snap grid or turn it off altogether. You can
enter new values for these settings on the Setup Design—Grid tab. If you change the display units,
L-Edit will automatically convert these numbers to the new unit system.

See “Grid Parameters” on page 79 for further information on setting the display grid and the mouse
snap grid.

Technology Parameters

To specify technology parameters, choose Setup > Design. The Setup Design dialog with the
Technology tab displayed appears:

Technology name Used to determine whether two design files are compatible. If you
attempt to copy a cell from a file with a technology name different
from that of the current cell, L-Edit presents a warning.

L-Edit 14 User Guide Section 1 78


Chapter 2: Application and Design Setup Design Setup

Display units Specifies the units that L-Edit uses in displaying distance and area
values, as well as the units in which physical distances are specified in
other user dialogs. For example, you may wish to define a technology
unit that corresponds to a manufacturing specification, such as a
fraction of a micron. You can still choose display units of microns, so
that all distances will be displayed in a familiar unit system.

Changing the display units does not change the scale of your design.
You can use any of the predefined units (Microns, Mils, Millimeters,
Centimeters, or Inches), or a custom unit (if one is defined).

Technology units A technology is described by a specific unit of measurement. Select


one of the predefined units (Microns, Mils, Millimeters,
Centimeters, or Inches), or a custom unit (Other). If you choose a
custom unit, you must also specify its equivalent in microns and in
internal units (for CIF/GDS II output, design rule checking, and other
purposes) under Technology Setup. See “CIF File Formatting” on
page 158 or “GDSII File Formatting” on page 163 for more
information.
Database Resolution Defines the relationship between internal units and technology
(physical) units.

Note: Changing the database resolution will rescale your design.


This operation cannot be undone.
Technology to micron For custom units, defines the relationship between microns and the
mapping custom unit. For example, you might want to work in technology
units equal to a fraction of a micron, such as 0.18. Under Technology
Units, click Other. You can type a name for the new units, or accept
the default name of Lambda. Then, under Technology to micron
mapping, define 1 Lambda = 18/100 Microns.

Grid Parameters

To aid the viewing, drawing, and editing of objects, L-Edit provides three independent grids—the
displayed grids, the mouse snap grid, and the manufacturing grid—each of which divides the layout
area into equal squares whose corners are gridpoints.

ƒ The display grid provides a set of convenient locating points. L-Edit can display both a major grid
and a minor grid.
ƒ The mouse snap grid determines the pointer’s freedom of movement.
ƒ The manufacturing grid corresponds to the resolution at which the manufacturer can produce
circuit elements.

Grid parameters are specified using Setup > Design—Grid. Parameters that represent physical
distances are always specified in the current display units. You can set display units on the Setup
Design—Technology tab. When you change display units, L-Edit automatically converts the grid
settings to the new display units.

For more information about grid display, see “Grid Rendering” on page 81.

L-Edit 14 User Guide Section 1 79


Chapter 2: Application and Design Setup Design Setup

Setup > Design—Grid

Major displayed grid The absolute spacing of the major grid display. The value entered in
this field is the distance, in display units, between major grid points.
Suppress major grid if less The apparent spacing of the displayed grid varies with the
than magnification of the Layout Area. If the number of screen pixels
between major grid points is less than the value entered in this field,
then the major grid is hidden.
Minor displayed grid The absolute spacing of the minor grid display. The value entered in
this field is the distance, in display units, between minor grid points.
Suppress minor grid if less The number of screen pixels between minor grid points below which
than the minor grid is hidden.
Cursor type ƒ Snapping—Causes the cursor to snap to the gridpoints specified
in Mouse snap grid.
ƒ Smooth—Allows the cursor to move unconstrained. Points
picked during drawing and editing operations are still snapped to
the mouse snap grid when the cursor type is Smooth.
Mouse snap grid Absolute spacing of the mouse snap grid. The value entered in this
field is the minimum resolution, in display units, allowed during
drawing and editing operations. All drawing and editing coordinates
are snapped to this grid size.

You can use the “Multigrid Toolbar” on page 81 to toggle mouse


snapping on or off and to jump to up to three preset grid values.

L-Edit 14 User Guide Section 1 80


Chapter 2: Application and Design Setup Design Setup

Manufacturing Grid Sets the absolute spacing of the manufacturing grid.

The DRC option Flag off-grid identifies vertices and instances that
are not on the manufacturing grid.
Display curves using When checked, curved objects (circles, tori, and pie wedges) will be
manufacturing grid displayed as vertices that snap to the manufacturing grid rather than as
smooth curves. See “Flag to Append Special Commands” on page
469 to modify DRC error reporting on approximated curves.

Grid Rendering

L-Edit renders both major and minor grids on a Grid layer, which is specified in Setup > Special
Layers (see “Rescaling a Design” on page 101). Major and minor grid colors are rendering parameters
of the grid layer in Setup > Layers—Rendering.

The major and minor grids take the colors specified for Object Outline and Object Fill, respectively, on
the grid layer. If there is no outline, both major and minor grids are displayed in the Object Fill color.
Similarly, if there is no fill, both grids are displayed in the Object Outline color. If neither fill nor
outline exists on the grid layer, then no grids are rendered.

Rendering setup options are discussed in “Rendering” on page 69.

Multigrid Toolbar

The Multigrid toolbar provides a convenient way to change the current mouse snap grid and the nudge
distance, and also to switch between several predefined grid sizes. It is particularly helpful when you
have a large change in zoom level.

You can enable or disable this toolbar using the View > Toolbars menu item, or by right-clicking in the
toolbar area of the application.

The first five buttons from the left set the current mouse snap grid. These buttons are modal—only one
can be active at a time.

Function Icon Description

Mouse Grid 1, 2 & 3 These buttons let you set three predefined mouse
snap grid values. Simply click on one of the
buttons and enter a value in Mouse Snap Grid
field.
Max grid Sets the mouse snap grid to be one internal unit.

Manufacturing grid Sets the mouse snap grid to the same value as the
manufacturing grid.

L-Edit 14 User Guide Section 1 81


Chapter 2: Application and Design Setup Design Setup

Function Icon Description

Make Coarser Increments the value in the Mouse Snap Grid


Make Finer field upwards or downwards respectively to make
the grid coarser or finer, in steps of 1, 2, 5, and 10
display units. This command is not available if
the grid is set to “finest” or “manufacturing grid”.
Set Nudge From Snap Sets the nudge amount to the current Mouse
Grid Snap Grid value.

Mouse Snap Grid Use this numeric field to enter the mouse snap
grid values for the buttons 1, 2 & 3, or, when the
Set Nudge From Snap Grid button is pressed,
the nudge distance.

Selection Parameters

You can modify object selection parameters in the Setup Design—Selection dialog.

Selection range A positive integer s such that: if the pointer is outside an object but is
still within s display units of any of the object’s edges, then the object
can still be selected. See “Selection and Deselection Ranges,” below.

L-Edit 14 User Guide Section 1 82


Chapter 2: Application and Design Setup Design Setup

Deselection range A positive integer d such that: if a mouse button is clicked (for
example, to initiate a move, edit, or copy operation) when the distance
between the pointer and a selected object is greater than d display
units, then the selected object is deselected. The deselection range is
set by default to the largest possible number (to indicate infinity), so
that a selected object is never automatically deselected.
Edit range A positive integer e such that: if the pointer is within e display units of
an edge or vertex of the selected object, then clicking the Move-Edit
mouse button will execute the edit operation; otherwise it is a move
operation. Two numbers are supplied: one in display units, the other
in pixels. e takes the value that results in a larger on-screen distance.
Select drawn objects Instructs L-Edit to automatically select an object after it is created.
This is useful for designers who like to position or edit objects after
creating them instead of while drawing them.

Selection and Deselection Ranges

The values set for Selection range and Deselection range govern the operation of the implicit
selection feature (see “Implicit Selection” on page 276). When you click the MOVE-EDIT mouse
button, L-Edit selects geometry within the selection range and deselects geometry outside the
deselection range. In the following illustration, the selection range is bounded by a heavy black outline
(not drawn to scale).

When multiple objects are within the selection range, L-Edit determines which object to select using the
following priority: (1) objects the pointer is inside, ordered by the closest edge; (2) objects the pointer is
outside, yet still within the selection range, ordered by the closest edge.

L-Edit 14 User Guide Section 1 83


Chapter 2: Application and Design Setup Design Setup

Drawing Parameters

You can modify drawing parameters in the Setup Design—Drawing dialog.

Default port text size Default text size in display units for ports.
Nudge amount Amount (in display units) to move objects during the nudge
operation.
Text size The default letter height, in display units, for text associated with
persistent rulers.
Display text Persistent ruler text can be displayed in one of four ways: No text,
Centered, At end points, or At tick marks. Select the desired option
from the drop-down list.
End style Persistent ruler lines contain one of two end styles: arrows or tick
marks. Highlight the illustration in the drop-down list to select the
default end style.
Show tick marks Toggles the display of tick marks. To change the position of Major
and Minor tick marks (in display units), type the desired spacing in
the appropriate field. Major tick marks are twice as long as Minor.
Symmetric When this box is checked, tick marks extend above and below the
persistent ruler.

L-Edit 14 User Guide Section 1 84


Chapter 2: Application and Design Setup Design Setup

Create rulers on The default layer for persistent rulers. The Current Layer option
places rulers on whichever layer is currently selected. To draw
persistent rulers to another layer, click the second option button and
select a layer from the drop-down list.

Cross Reference (XRef) File Designation

Use Setup > Design—Xref files to list the files you want to use as cross reference or library files.

TDB Xref files Enter a path and file name by using a slow click (click and hold the
mouse button briefly before releasing) within the entry area to initiate
edit mode. If you use relative paths, they will be relative to the
location of the design file in which you are working. To browse for a
file, click the ellipsis button ( ).

The order in which you list files in this dialog is critical. L-Edit will
check files for cross-referenced cells in this order during GDSII
import. To speed L-Edit processing, list files with the most cross
referenced cells higher in this list. Files are also listed in this order in
the Cell Instance dialog and the Design Navigator.

Double-clicking on a file name opens the Properties window for that


file.

L-Edit 14 User Guide Section 1 85


Chapter 2: Application and Design Setup Design Setup

The file list has four buttons:

Adds a new file to the list and puts you in edit mode for that file.

Deletes the selected Xref library file from the list.

Moves the selected Xref library file up on the list.

Moves the selected Xref library file down on the list.

To cross-reference cells when exporting to GDSII, you need to first specify which files will be library
files by listing them in the Setup > Design—Xref files dialog. A library file, called an Xref file in
L-Edit terminology, is any TDB file containing cells which are referenced from another file.

Once a file is linked to a design, its cells can be cross-referenced using the Cell Instance dialog, or by
dragging it from the Design Navigator and dropping it into your layout. Conversely, when you instance
a cell from a different file into your current file, L-Edit opens Setup > Design—Xref files with the
source file added to the Xref files list. Cells from an Xref file are called XrefCells.

Xref file names and paths are stored in your TDB design file, and are transferred during a File > Import
Mask Data, File > Replace Setup or File > New operation.

Library files can also be referenced when you import a GDSII file (see “Use File > Import Mask
Data > GDSII to import GDSII files into L-Edit.” on page 146).

Snap Parameters

Object snapping snaps the cursor to user selected snap points on objects. Snap points include object
vertices, edge midpoints, edges, wire centerlines, box and circle center points, instances, and ports. See
“Object Snapping” (page 182) for setting up and using Object Snapping.

Interactive DRC Parameters

Interactive DRC allows DRC rules to be checked in real time, while polygons are being drawn or
edited. See “Interactive DRC” (page 359) for setting up and using interactive DRC.

L-Edit 14 User Guide Section 1 86


Chapter 2: Application and Design Setup Layer Setup

Layer Setup

An L-Edit setup contains an ordered list of layers. To edit the layer structure in the active file, open the
Setup Layers dialog by choosing Setup > Layers, right-clicking from either of the layer palettes, or
double-clicking anywhere on the Compact Layer palette.

The Layers list on the left shows all the defined layers in the active file.

To Add a New Layer

; Click Add. A layer named “New Layer [n]” (where n is the number of the new layer) will be added to
the layer list, with all values in each of the three Setup Layers cleared.

; Click Rename to edit the layer name. Note that no two layers can have the same name. Derived layers
must be positioned in the list below the layers from which they are derived. You can also rename a layer
by double clicking on it in the layer list.

Options for Defining Layers

There are three tabs in the Setup Layers dialog: General, Derivation, and Rendering. The following
common controls for the layer list are available with each of these tabs:

Add To add a layer to the list, click the Add button. A New Layer [n]
(where [n] is the number of the new layer) will be added to the layer
list; this name can be edited by clicking Rename.
Delete To delete a layer, highlight the layer in the list and click Delete. A
layer can only be deleted if it contains no geometry.
Rename Opens a dialog that allows you to enter a new name for the
highlighted layer.

L-Edit 14 User Guide Section 1 87


Chapter 2: Application and Design Setup Layer Setup

Copy To add a copy of an existing layer, highlight the layer in the list and
click Copy. The new layer is placed below the selected layer, with
“Copy of” preceding the layer name.
Note: GDSII number, GDSII data type, and CIF name are not copied
to the new layer.
Move Layer Click on the up or down arrow to reposition the highlighted layer in
the list.
Properties Opens the Properties dialog, where you can define and attach any
number of properties to the layer.

General Layer Parameters

The General tab, shown in the previous figure, allows you to set the following layer properties:

Locked When this box is checked, geometry on a layer cannot be drawn,


moved, or edited.
Hidden When this box is checked, the layer is hidden (not displayed).
Layer-to-substrate Specifies the Area capacitance between the layer and the substrate (in
capacitance aF/sq. micron), and the Fringe capacitance (in fF/micron).
Resistivity Specify the resistivity (resistance per square unit area) of the layer
material in Ohms/square.
Import/Export To edit the import/export parameters of the selected layer, enter
values in these fields as appropriate:
ƒ GDSII number—an integer that indicates the GDSII layer
number
ƒ GDSII data type—an integer that can be used in combination
with the GDSII number to identify an additional layer. For
further information, see “GDSII Data Type” on page 166.
ƒ CIF name

Default wire settings Set the default Width (in display units), End style, and Join style for
the layer’s wire settings. See “End Styles and Join Styles” on page 98
for more information on wire settings.

Derivation Layer Parameters

The Derivation tab allows you to define new layers that are derived from existing ones using logical
and selective operations. The various settings are discussed in “Generating Layers” on page 312.

L-Edit 14 User Guide Section 1 88


Chapter 2: Application and Design Setup Layer Setup

Rendering Layer Parameters

The options on the Rendering tab control layer appearance.

A layer’s appearance is determined by when it is drawn with respect to the other layers in the design—
its pass value, and whether its color is added, subtracted, or replaces the colors of the layers that are
drawn before it—its mode.

For each layer, you can also specify a color and a pattern for the fill and outline of drawn elements in
normal state and in selected state. The elements for which color and pattern can be set are:

ƒ Object
ƒ Selected object
ƒ Port box
ƒ Selected port box
ƒ Port text
ƒ Selected port text
ƒ Wire centerline
ƒ Selected wire centerline

L-Edit 14 User Guide Section 1 89


Chapter 2: Application and Design Setup Layer Setup

Note: Wire centerlines, whether or not the wire is selected, are always rendered in a 1 pixel
wide solid pattern.

Mode Use Mode to control how a layer affects the appearance of the layers
with which it overlaps. Options are:
ƒ Add—use a logical OR operation
ƒ Subtract—use a logical AND NOT operation
ƒ Paint—use a logical OVERWRITE operation
(See “Rendering Modes” on page 90 for more information.)
Pass Use Pass to control the order in which layers are rendered. Pass
values range from 1 to 10, where 1 is rendered first and 10 is rendered
last. (See “Rendering Passes” on page 93 for more information.)
Paint background color on Use this option to properly render stacked vias. When this box is
previous pass checked, the layout background color clears all layers with a pass
value less than that of the active layer prior to rendering of a patterned
object.

This option is available only for non-selected objects with a non-solid


fill, for layers with a pass value greater than one.
Pattern Select one of the predefined patterns from the drop-down list or use
(for Fill and Outline) Other to create one of your own. (See “Pattern” on page 93 for more
information.)
None fills in none of the pixel elements used to create a pattern, Solid
fills them all in.
Color To set rendering color, click one of the bars or bit codes in the
(for Fill and Outline) drop-down list. (See “Color” on page 94.)

(The number of colors available and how they are sorted is controlled
in the Setup Colors dialog. See “Color Parameters” on page 59 for
more information.)
Style Click on the ellipsis (…) to set the outline style for the selected
(for Outline only) element. L-Edit opens the Outline Style dialog where you can specify
a line style, line width, and the line width unit of measure. (See
“Outline Style” on page 95.)

Rendering Modes

L-Edit objects can be drawn in one of three modes that control how layers are rendered, particularly
when they overlap, Paint, Add, or Subtract.

L-Edit 14 User Guide Section 1 90


Chapter 2: Application and Design Setup Layer Setup

Drawing mode applies to fill, or to outline if the layer has no fill. If a layer has fill and outline, the
outline is always rendered in Paint mode, no matter which mode is selected for the fill. Objects that are
selected are always rendered in Paint mode and cannot be set to another mode.

Paint Mode
Object colors and patterns are combined as layers are drawn. Overlapping objects produce entirely new
colors and patterns. This mechanism ensures that regions of overlap are displayed in a meaningful way
without obscuring the presence of other objects.

In Paint mode, the color of regions of overlap and all drawn objects is determined by a logical
OVERWRITE operation. The bit values of a layer always overwrite the bit values of the layers drawn
before it (i.e. with equal or lower Pass values). For layers with the same pass value, rendering proceeds
in layer list order.

However, if the Paint background color on previous pass checkbox is enabled, a layer is rendered in
two passes. The first pass clears the layer with a pass value lower than that of the active layer, and
replaces it with the background color of the layout window. The second pass then draws the stipple
pattern for the layer as usual. (This option is only available to layers with a non-solid fill pattern and a
pass value greater than one.)

For example, in the illustration below, both via layers are set to paint the background on previous layer
passes. Layer Via 2 (black stipple pattern C, with a pass value higher than the others) is rendered over
the layer Poly (red, with a pass value lower than Via 2) and over Via 1 (blue stipple pattern R, with a
pass value lower than via 2) layers.

L-Edit 14 User Guide Section 1 91


Chapter 2: Application and Design Setup Layer Setup

Add Mode
In Add mode, the color of regions of overlap is determined by a logical OR between the bits of the color
code for each layer. The bit values of an Add layer are added to the bit values of those layers drawn
before it.

For example, if Metal1 is blue with a Pass value of 1:

and Metal2 is grey with a Pass value of 2:

their overlapping areas will be rendered as a darker blue, as shown in the figures below:

The region of Metal1


and Metal2 overlap is
shown by a third
darker color created
by the logical OR
(Add) operation.

Subtract Mode
In Subtract mode, the color of regions of overlap is determined by a logical AND NOT. The
complement of the bit values of a Subtract layer are subtracted from the bit values of those layers drawn
before it. (This corresponds to the “clear” mode in previous version of L-Edit.)

Note that a subtract layer “clears” colors rendered before it but has no effect on the appearance of
objects on layers rendered after it.

For example, if Metal1 is with a Pass value of 1 and Add mode,

P Select is with a Pass value of 2 and Add mode, and

Via1 is with a Pass value of 2 and Subtract mode, then

objects on Via1 will be rendered as , as shown in the following


illustration.

To define vias that appear transparent, the via layer Pass value must be higher than that of the metal
layers (2 or higher), so that the via layer color operation will affect them, or the via layer should come

L-Edit 14 User Guide Section 1 92


Chapter 2: Application and Design Setup Layer Setup

after the metal layers in the layer list. The mode should be Subtract and the color 1111 (black). With a
color bit code of 1111, subtract mode yields the logical operation AND NOT of 1111—or the logical
AND of 0000, the complement of 1111. The logical AND of 0000 and any other color will be 0000, so
the drawn color will always be 0000.

A box on Via1 layer has the same color everywhere it overlaps other layers, because its bits are
subtracting all previously rendered bits.

Rendering Passes

Each layer is rendered in one pass. The order in which layers are rendered is determined first by position
in the layer list and then by the pass value. Lower pass values are rendered first, with possible values
ranging from one to ten.

You can set your rendering passes so that objects will be drawn in a way that parallels the
manufacturing processes or simply to control rendering of overlaps. However, a layer that is derived
from other layers must be below all its source layers in the layer list.

For layers with both fill and an outline, fill is rendered first, then the outline, and both will be completed
before the fill for the next layer is started. Selection is always rendered with the last pass (10).

Note that for rendering, pass order will take precedence over layer order in the Layers list.

Pattern

To change the stipple pattern, select one of the predefined patterns from the drop-down list. None fills
in none of the pixel elements used to create a pattern—a None pattern for fill yields no fill, a None
pattern for outline yields no outline. A Solid fills in all pixel elements.

L-Edit 14 User Guide Section 1 93


Chapter 2: Application and Design Setup Layer Setup

You can also pick Other to open the Create Pattern dialog, where you can design a new pattern.

New patterns are added to the bottom of the drop-down list with the label “custom.”

Color

To set rendering color, click one of the bars or bit codes in the drop-down list.

The number of colors available and how they are sorted is controlled in the Setup Colors dialog. (See
“Color Parameters” on page 59 for more information.)

To outline an object when it is selected, click on the “Selected...” element name in the list, define an
outline style, and set the fill pattern to None.

L-Edit 14 User Guide Section 1 94


Chapter 2: Application and Design Setup Layer Setup

Outline Style

You can set both a line style and width for outlines. Line width can be measured in either pixels or
display units.

For curved geometry, outline thickness is displayed at a fixed value of 1 pixel.

Note that boxes and rectangular polygons are rendered so that all edges include the snap grid pixels.
When two such drawn objects coincide, they will therefore overlap by a width of one pixel. Such an
overlap will be rendered in a distinct color, creating a visible line, unless you use a layer setup where the
outline is the same color as the fill.

Listing GDS Information for Layers in a File

Use File > Layer Summary to generate reports on the layers in a design. You can specify the layer types
to list, the sort order and the level of detail to include (GDSII number, data type, derivation equation,
etc.)

Deleting Multiple Layers

Setup > Delete Layers… allows you to delete multiple layers even if they have geometry on them or
they are locked. The layer list is sorted with drawn layers first, then derived layers, then external layers,
and then special layers. Layer are subsorted alphabetically within each group.

When a layer cannot be deleted it will appear grayed out. When you set your options so a layer with
geometry, a locked layer or a locked layer with geometry can be deleted, it is shown in a darker version
of its normal display color:

ƒ Drawn—black/dark green if locked

L-Edit 14 User Guide Section 1 95


Chapter 2: Application and Design Setup Special Layers

ƒ Derived—red/dark red if locked


ƒ External—green/dark green if locked
ƒ Special—magenta/dark magenta if locked

Mark All Checks all the layers in the dialog.


Unmark All Removes the check from all layers in the dialog.
Allow deleting locked When this option is checked it is possible to check and delete a layer
layers even though it is locked.
Delete layer even if it has When this option is checked, it is possible to check and delete a layer
geometry even though it contains geometry.
Sort alphabetically Sorts the layers alphabetically rather than by status.

Special Layers

Special layers are used to represent L-Edit layout elements such as the display grid, origin, drag boxes,
and so on. They are treated just like other layers—you define them using Setup > Layers, draw objects
on them, and can specify design rules for them. In fact, they may be identical to layers used for other

L-Edit 14 User Guide Section 1 96


Chapter 2: Application and Design Setup Wire Styles

purposes (for example, Poly can be designated as the Grid layer). Choose Setup > Special Layers to
designate special layers. Select an appropriate layer from the drop-down menu next to each field.

Grid The layer on which the displayed grid points are drawn.
Drag box The layer on which the boxes displayed during a drag operation are
drawn and on which the nibbling wire is drawn.
Origin The layer on which the crosshair marker representing the coordinate
system origin is drawn.
Cell outline The layer on which instanced cell outlines are drawn.
Error The layer on which DRC and SPR error markers are drawn.
Icon The layer on which non-fabricating comment items are drawn.
First mask The layer on which the first fabrication mask is drawn.

Wire Styles

An L-Edit wire consists of one or more rectangular segments joined at common ends. All segments in
the wire have the same width, but each segment can have a different length. The point where two

L-Edit 14 User Guide Section 1 97


Chapter 2: Application and Design Setup Wire Styles

segments meet is called a join. The endpoints of a wire are the two segment ends which are not involved
in joins.

Endpoint

Width Join

Length

Endpoint

A wire is characterized by a style, consisting of three properties:

ƒ Width (in display units—different from the “width” reported in the status bar when a wire is
selected).
ƒ End style (the appearance of the wire’s endpoints).
ƒ Join style (the appearance of the wire’s joins).

When you select a wire, the width value reported in the status bar is the x-width of the minimum
bounding box of the whole wire, as shown here:

Minimum bounding box

Width reported in status bar

End Styles and Join Styles

L-Edit recognizes three end styles and four join styles. These styles affect the appearance of wires on
the screen only, and changing a wire’s style does not affect its endpoint or vertex coordinates. Contact
your fabricator to determine the actual method of fabricating wires and what end and join styles the
fabricator supports.

L-Edit 14 User Guide Section 1 98


Chapter 2: Application and Design Setup Wire Styles

Warning: It is critical to verify that your fabricator interprets wires in the same manner as your layout. Otherwise
the actual chip fabricated may be very different from what you wanted.

End styles include:

End styles Description

Butt Flush with the endpoint.


Round “Capped” with a half-circle whose diameter equals the wire width.
Extend Extended past the endpoint for a distance equal to half the wire width.

Join styles include:

Join styles Description

Layout The adjoining segment ends are extended to a distance equal to half
the wire width. The resulting gap is filled with a triangle. This is the
default join style.

This join style corresponds most closely to the interpretation of wires


used by most fabricators. We recommend using this join style
exclusively in your designs. (Wires created in versions of L-Edit
previous to version 5 are automatically converted to the join layout
style.)
Round The adjoining segment ends take on the round style.
Bevel The adjoining segment ends take on the butt style. The resulting gap
is filled with a triangle.
Miter The adjoining segment ends are extended until their outer edges meet.
If the angle between the two segments is less than the user-specified
miter angle, a bevel join is used instead.

L-Edit 14 User Guide Section 1 99


Chapter 2: Application and Design Setup Wire Styles

The figure below illustrates various end and join styles.

Layout join Round join Bevel join Miter join

Wire Style Defaults

When a wire is first created, its style is taken from the default setting for the layer on which the wire is
drawn, specified by choosing Setup > Layers. You may change the wire style parameters in the Default
wire setting area in the Setup Layers dialog.

Before you draw wires for the first time, or if you are setting up technology files for others who may use
wires, set the wire defaults for each layer according to whether your likely output format will be CIF or
GDS II.

For CIF, use wires with the extend end style and the layout join style.

For GDSII, allowable combinations of end and join styles are shown in the table below. All other
combinations of end and join styles will produce an error message when exporting to a GDSII file.

End style Join style

Butt Layout
Round Round
Extend Layout

After you draw an individual wire you can change its individual style with Edit > Edit Objects.

L-Edit 14 User Guide Section 1 100


Chapter 2: Application and Design Setup Rescaling a Design

Rescaling a Design

A design scaling wizard, Setup > Rescale Wizard... is available to assist in rescaling a design, either by
specifying a current and a new feature size, or by specifying a percentage to scale the design. In the first
step of the Rescale Wizard you specify how much you want to rescale the design

In the second step of the Rescale Wizard you specify which quantities you want to rescale. You also
choose the method used to rescale the design. Rescaling by changing the database resolution will
rescale all geometry and settings, with no truncation. Rescaling without changing the database
resolution can cause truncation as geometry coordinates and settings will be multiplied by the ratio of
From feature size/To feature size. Quantities that will be truncated are indicated in the Rescale wizard
dialog.

L-Edit 14 User Guide Section 1 101


3 Viewing the Layout
1

At times you may want to display only a portion of your design. Hiding various layout elements can be
useful in two ways:

ƒ It speeds up screen redraw by reducing the amount of geometry that must be rendered on screen.
ƒ It allows you to focus more effectively on the particular geometry you are working with.

This chapter explains how to show and hide layout interface elements, layers, objects, and instance
contents. It also explains how to view different levels of hierarchy and zoom and pan in the design. All
commands apply to all cells in the active file.

Refreshing the Screen

Use View > Redraw or press the Space bar on the keyboard to refresh the screen. L-Edit redraws the
layout in the current view.

L-Edit 14 User Guide Section 1 102


Chapter 3: Viewing the Layout

Displaying Layout Interface Elements

Use View > Display to turn the display on and off for each layout interface element. A check mark next
to the item indicates the item is on (displayed).

Icon Turns the visibility of lower-level geometry on and off when


View > Insides > Toggle Insides is off. (See “Displaying Instance
Insides” on page 115.) When Icon is on, L-Edit displays objects that
reside on the Icon layer within an instance but hides the rest of the
instance’s contents.
Many IC fabricators allow the identification of an Icon layer whose
geometry is ignored during fabrication. To specify exactly one L-Edit
layer as the Icon layer, use Setup > Special Layers (see “Rescaling a
Design” on page 101). Objects on the Icon layer can be used to
annotate an instanced cell or highlight one cell’s relationship to
another.
Arrays Turns the visibility on and off for instance contents in arrays in the
active cell. When on, all arrays are shown in full, with all repeated
instances visible. When off, each array is displayed as an outline in
which only the first instance is rendered.
Ports Turns the visibility on and off for ports within the first level of
hierarchy for all displayed instances. This command does not affect
top-level ports, which are always shown, or ports on hidden layers,
which are never shown.
Major Grid Turns the visibility of the major grid display on and off when the Grid
layer is shown. (For information on showing and hiding layers, see
“Showing and Hiding Layers” on page 111.) The displayed grid is not
visible under all magnifications.

L-Edit 14 User Guide Section 1 103


Chapter 3: Viewing the Layout

Minor Grid Turns the visibility of the minor grid display on and off when the
Grid layer is shown. The displayed grid is not visible under all
magnifications.
Origin Turns on and off the visibility of the crosshair marker that indicates
the origin (0,0) when the Origin layer is shown. (For information on
showing and hiding layers, see “Showing and Hiding Layers” on page
111.)
Mouse Hints Turns on and off the visibility of mouse tooltips displayed beneath the
mouse pointer in layout windows. Mouse hints show the operation
associated with each mouse button as vertical text, icons, or both.
Cycle Locator Bar Format Cycle through the different locator bar display types.
(Shift+F)

Toggle Markers Toggles marker display on and off.


Clear Markers Deletes all markers from the active file.

Showing and Hiding Objects

You can show or hide all objects of a specific type in a design. When you hide objects, L-Edit indicates
the hidden state by shading the object icon on the Drawing toolbar. While objects are hidden, you
cannot draw, select, edit, move, or delete them.

To show and hide objects, you can:

ƒ Choose View > Objects


ƒ Click an object icon on the Drawing toolbar with the middle mouse button
ƒ Right-click on the Drawing toolbar to access a pop-up menu.

Each of these methods is described below.

When you select View > Objects, L-Edit displays the following menu:

L-Edit 14 User Guide Section 1 104


Chapter 3: Viewing the Layout

A check by each object type indicates the object is currently visible in the design. To make all objects
visible, select Show All. To hide all objects in the design, select Hide All.

Pie wedges and tori are treated as polygons, so they change hidden/visible state together.Similarly, the
command operates on all wires - orthogonal, 45°, or all-angle - together.

You can also use icons on the Drawing toolbar to toggle the hidden state of a particular object type,
simply position the pointer over the desired object icon and click the HIDE/SHOW (middle) mouse
button.

When all objects are shown, to hide all objects except for a particular object, position the pointer
directly over the desired object icon in the Drawing toolbar and click the H/S ALL (Ctrl+HIDE/SHOW)
mouse button.

Finally, you can also show and hide objects via a context-sensitive menu. To access this menu, position
the pointer over any object icon in the Drawing toolbar and click the MENU (right) mouse button.
L-Edit displays the following menu:

This menu is context-sensitive.

Show pertains to the specific object icon the pointer is over at the
time you activate the menu. A check mark next to Show indicates
that objects of that type are currently visible in the design; no check
mark indicates that objects of that type are hidden.

To make all objects visible, select Show All. To hide all objects
except for a particular object type, position the pointer directly over
the desired object and select Hide All.

L-Edit 14 User Guide Section 1 105


Chapter 3: Viewing the Layout Layer Palettes

Layer Palettes

L-Edit provides two layer “palettes,” the Layer Palette and the Compact Layer Palette. You can have
either or both palettes open at once. They can float or be docked, they can be resized to show all layers,
or you can use scroll bars to view layers not visible in a smaller sized display.

Both can be filtered using a pull-down category list to display just those layers that are drawn, in use,
generated or special.

You can also select Filter, and then enter text in the entry field to limit the display to layers that include
exactly the characters entered anywhere in their name.

Compact Layer Palette Layer Palette

L-Edit 14 User Guide Section 1 106


Chapter 3: Viewing the Layout Layer Palettes

Using the Compact Layer Palette

The Compact Layer Palette is a grid of icons that replicate the color and pattern of each layer to
provide a quick way to select a layer when you are drawing.

Compact layer palette scroll bar


Filter field

Layer category pull-down

Layer icons

Compact layer palette scroll bar

As the pointer moves over an icon in the Compact Layer palette, the name of the layer will appear in the
status bar. Icons in the Compact Layer palette are displayed in the same order as they are listed in the
Setup Layers dialog, arrayed from top to bottom and left to right.

Compact Layer Palette Shortcuts

You can show, hide, or lock layers; open the Setup Layers dialog, and change the size of the icons in
the Compact Layer palette by right-clicking on any layer icon to open the menu shown below.

See Showing and Hiding Layers on page 111 for information on


the Show [Layer name], Show All, Hide All, Show Generated,
and Hide Generated options.

See Locking Layers on page 114 for information on the Lock


[Layer name], Lock All, and Unlock All options.

Setup opens the Setup Layers dialog. You can also open Setup
Layers directly to a specific layer by double-clicking on that layer’s
icon in the Compact Layer palette (see Layer Setup on page 87).

Use Increase Icon Size or Decrease Icon Size to change the size
of the layer icons, by two pixels each time you select the command.

L-Edit 14 User Guide Section 1 107


Chapter 3: Viewing the Layout Layer Palettes

Using the Layer Palette

The Layer Palette is also used for layer selection, but it also provides additional features for layer
display and manipulation. Use the Layer Palette to manage layer settings and display properties.

Header — shows the currently selected layer


and opens a context-sensitive menu
Category field
Filter field

Layers list:

Red text and a check in the column


indicates hidden — the layer is not
displayed in layout.

Grey shading and a check in the


column indicates locked — geometry on
the layer cannot be drawn, moved, or
edited.

Blue text and a check in the column


indicates protected — objects on the layer
cannot be selected.

Toggle buttons for instance and port selectability


Name of palette currently loaded

(Header) This header area indicates the currently selected layer. Right-clicking
here opens a context-sensitive menu (see “Layer Palette Shortcuts” on
page 110).
(Category field) Select a layer category — All, Filter, Drawn, In Use in File, In Use in
Cell, In Use in Cell + Hierarchy, Generated or Special to limit the
list to just that type of layer.
ƒ “In Use in Cell” only shows layers used in top-level geometry of
a cell and does not show layers used by instances within the cell.
ƒ “In Use in Cell + Hierarchy” shows layers used in top-level
geometry and the layers used in instances contained in the cell.
This is helpful, for example, when a cell contains just instances
and no primitive geometry.
ƒ Choosing Filter in this field activates the filter field so you can
limit the layer list by name.
(Filter field) Filters the layer list to show only those layers that contain the
characters entered in this field any place in their name. For example,
“la” in the filter field will display layers “label,” “blade” and any
others with “la” any place in their name.

L-Edit 14 User Guide Section 1 108


Chapter 3: Viewing the Layout Layer Palettes

(Layers List) Use the buttons in the layers list to sort the list. Click in a checkbox to
apply a layer setting.

Sort by layer name

Sort by locked status

Sort by hidden status

Sort by protected status

Sort by GDSII number

Right-clicking on any of the buttons opens this menu:

Locked When a box in this column is checked, the layer is locked so that
geometry cannot be drawn, moved, or edited, and the layer name
appears with grey highlighting.

Hidden When a box in this column is checked, the layer is hidden (not
displayed in layout)and the layer name appears in red text.

Protected When a box in this column is checked, the layer is protected (so that
objects on the layer cannot be selected) and the layer name appears in
blue text.

GDSII number This column displays the GDSII layer number.

Select Use these buttons to toggle selectability for the active design.
Indicates that instances can be selected.

Indicates that instances cannot be selected

Indicates that ports can be selected.

Indicates that ports cannot be selected

L-Edit 14 User Guide Section 1 109


Chapter 3: Viewing the Layout Layer Palettes

(currently loaded palette) This field displays the name of the palette that is currently loaded.
<All layers> is the default.

It is also a pull-down menu you can use to select previously saved


palettes, or to create and save palettes using the <Setup> option (see
“Creating and Saving Palettes” on page 110).

Layer Palette Shortcuts

Right-click in the Layer Palette header or on any layer name in the list to open the following shortcut
menu. The layer controls vary as shown.

Pick Options to control the columns that will be displayed in a palette and the size of icons. You can
access the Options menu with a right-click anywhere in the Layer Palette.

Creating and Saving Palettes

You can name and save layer display choices for future reuse using Setup Layer Palettes. Highlight
layers in the right pane using the Shift and Ctrl buttons for multiple selection.

Use the “<--Exclude” button to remove and the “Include-->” button to keep layers in a specific palette.

L-Edit 14 User Guide Section 1 110


Chapter 3: Viewing the Layout Layer Palettes

You can also lock, hide or protect layers using the checkboxes.

New opens the dialog


where can you assign a
name to a specific Layer
Palette setup.

Showing and Hiding Layers

You can show or hide all objects on a specific layer in a design. When a layer is hidden you cannot
draw, select, edit, move, or delete objects it contains. L-Edit indicates the hidden state differently on
each of the layer palettes: with diagonal hatching on icons in the Compact Layer palette and with gray
shading on the layer name in the Layer Palette. To show or hide layers, you can:

ƒ choose View > Layers


ƒ click a layer icon on the one of the layer palettes
ƒ access a context-sensitive menu
ƒ check the Hidden option in the Setup Layers dialog.

Show/Hide Layers Using the View > Layers Command


When you select View > Layers, L-Edit displays the following menu:

L-Edit 14 User Guide Section 1 111


Chapter 3: Viewing the Layout Layer Palettes

Show [Layer name] refers to the active layer. A check mark next to Show [Layer name] indicates that
objects on that layer are currently visible in the design; no check mark indicates the objects on that layer
are hidden. Other commands function as follows:

Show All Makes objects on all layers visible


Hide All Hides objects on all layers except those on the active layer
Show Generated Shows objects on all generated layers.
Hide Generated Hides objects on all generated layers except the active layer if the
active layer is a generated layer

Show/Hide Layers Using the Compact Layer Palette


To hide or show an individual layer from the Compact Layer palette, position the pointer directly over
the desired layer icon in the Compact Layer palette and click the HIDE/SHOW (middle) mouse button.
L-Edit will show the layer indicated by the pointer (if currently hidden) or hide it (if currently shown).
The indicator for the hidden state is diagonal lines through an icon, as shown below.

Point at a layer in the palette and click the HIDE/SHOW


(middle) button.

All layers showing. Middle layer hidden.

When all layers are showing, you can hide all but one by clicking the H/S ALL (Ctrl+HIDE/SHOW)
mouse button over the desired layer icon.

Click the H/S ALL mouse button


(Ctrl+HIDE/SHOW) over the desired layer icon.

L-Edit will hide all layers except the one


indicated by the pointer.

L-Edit 14 User Guide Section 1 112


Chapter 3: Viewing the Layout Layer Palettes

Show/Hide Layers Using a Context-Sensitive Menu


You can also show and hide objects via a context-sensitive menu. To access this menu, position the
pointer over any layer icon in the Compact Layer palette and right-click. L-Edit displays the following
context-sensitive menu,

The layer in Show [Layer name] at the top of the menu


corresponds to the layer icon the pointer was over when the menu
was activated.

A check next to Show [Layer name] indicates objects on that layer


are currently visible in the design; no check indicates the objects on
that layer are hidden.

To make objects on all layers visible, select Show All. To hide objects on all layers except those on a
particular layer, position the pointer directly over the desired layer icon in the Compact Layer palette
and select Hide All.

Show Generated shows objects on all generated layers. Hide Generated hides objects on all generated
layers except the layer indicated by the pointer if the indicated layer is a generated layer. (For
information on generated layers, see “Generating Layers” on page 312.)

Show/Hide Layers Using Setup Layers


Finally, you can hide or show a layer from the Setup Layers dialog. To access this dialog, choose
Setup > Layers, double-click an icon in the Compact Layer palette or use the context-sensitive menus
in the Layer palette.

Place a check in the Hidden check box and click OK. For more information on the Setup Layers dialog,
see “Layer Setup” on page 87.

L-Edit 14 User Guide Section 1 113


Chapter 3: Viewing the Layout Viewing Layout Hierarchy

Locking Layers

Lock [Layer name] refers to the layer icon the pointer is positioned over at the time you activate the
menu. When a layer is locked, you cannot draw, move, or edit objects on that layer. Use Lock All or
Unlock All to lock or unlock all layers, respectively.

When a layer is locked, L-Edit indicates this status in two ways.

The layer icon is cross-hatched as shown above (enlarged),


and a check mark appears next to Lock [Layer name] in the
context-sensitive menu.

Viewing Layout Hierarchy

To clarify different parts of your design, you can show and hide different levels of hierarchy. Select one
of the following commands:

ƒ View > Hierarchy Level > Show one more level


ƒ View > Hierarchy Level > Show one less level

To display a specific number of levels, select View > Hierarchy Level > View hierarchy level. L-Edit
displays the View Hierarchy Levels dialog.

The view level is relative to the top level of the cell. If you specify zero or a number higher than the
number of levels that exist in the design, L-Edit displays all hierarchy levels.

L-Edit 14 User Guide Section 1 114


Chapter 3: Viewing the Layout Viewing Layout Hierarchy

You can also select the number of levels to show from the drop-down list in the Standard toolbar,
illustrated below. However you set the view hierarchy, L-Edit saves the information in the TDB file.

Click the menu in the Standard toolbar to specify how many levels of hierarchy you want to
display. Selecting Other opens the View Hierarchy Levels dialog.

You can also use the Design Navigator (page 233) to display a hierarchical list of all cells in the design,
including information such as whether the cell is locked, which instances it contains, its DRC status,
etc.

Use View > Arrange Design Navigator to quickly arrange all open windows with the Design Navigator
to one side and the layout windows, each the same size, on the other.

Displaying Instance Insides

There are two ways to display instances in your design:

ƒ Completely, so that you can see all of the objects (the insides) in the instanced cells
ƒ As outlines with just the name of the instanced cell. Displaying instances as outlines decreases the
amount of time L-Edit takes to redraw the screen and can help clarify different portions of the
design.

There is a set of View commands that control the visibility of insides in a design for either all instances,
only selected instances, or only leaf-level cells. (A leaf-level cell contains no instanced cells.)

The following table describes these commands.

Command Keyboard Shortcut Description

View > Insides > Toggle Ctrl+I or Tab Shows or hides the insides of all instances
Insides at all levels of the hierarchy. When insides
are hidden, ports one level down in the
hierarchy remain visible.
View > Insides > Show Cell S Shows the insides of the selected
Insides instance(s).
View > Insides > Hide Cell D Hides the insides of the selected
Insides instance(s).
View > Insides > Show Alt+B Shows the insides of all leaf-level cells in
Leaves the design.
View > Insides > Hide Alt+L Hides the insides of all leaf-level cells in
Leaves the design.

L-Edit 14 User Guide Section 1 115


Chapter 3: Viewing the Layout Zooming and Panning

You can also use Setup > Application—Rendering to set a default pixel size below which instance
insides will be hidden. (See “Rendering” on page 69 for information on this option.)

Displaying Instance Insides While Drawing and Editing

During drawing operations, the Tab key toggles display of the object being drawn from fill mode, where
objects are rendered completely filled, to outline mode, where objects are rendering with their insides
hidden.

To set outline mode as the default during drawing, uncheck the Fill objects when editing/drawing
checkbox in Setup > Application—Rendering.

After the drawing operation is completed the drawing mode will revert to the default setting.

Similarly, when an instance is being moved, the Tab key acts as a three state button that cycles through
the following display levels:

ƒ outline only
ƒ outline of the instance and outlines of all first level objects inside the instance
ƒ outline of the instance and fills of all first level objects inside the instance, with the exception of
other instances.

Zooming and Panning

You can zoom into or out of the current view to see more or less of the design. You can also move (pan)
around the design to see different portions of it at the current level of magnification. All commands
affect only the active cell.

Zooming

There are four L-Edit commands related to zooming. All of them change the magnification of the
current view and do not affect the position and location of objects in the design. Increasing the
magnification (zooming in) causes the objects to look larger; decreasing the magnification (zooming
out) causes the objects to look smaller. The following table describes each command.

Keyboard Shortcut
Command Description

View > Home Home Changes the magnification so that the


view includes all objects in the cell.
View > Zoom > In + Magnifies the view by a factor of two.
View > Zoom > Out – Reduces the magnification of the view by
a factor of two.
View > Zoom > Zoom By... Alt+Z Zooms in/out by a specific amount. The
zoom amount is relative zoom factor
change. Values less than 1, zoom in, while
values greater than 1, zoom out. For
example, 2 will zoom out by 2x while 0.5
will zoom in by 2x.

L-Edit 14 User Guide Section 1 116


Chapter 3: Viewing the Layout Zooming and Panning

Keyboard Shortcut
Command Description

View > Zoom > To W Changes the magnification so that the


Selections view includes only selected objects in the
cell.

Zooming While Editing In-Place

When you are editing an instance in-place you can zoom to the home view of the cell you are currently
editing or the home view of the top cell in the instance hierarchy. To zoom to the home view of the cell
you are currently editing, use View > Home or press the Home key. To zoom to the home view of the
top cell in the instance hierarchy use Edit > Edit In-Place > View Top Cell or press the End key.

For more information on editing in-place, see “Editing In-Place” on page 288.

Panning

There are nine L-Edit commands related to panning. All of them change the current view and do not
affect the position and location of objects in the design. The following table describes each command.

Keyboard Shortcut
Command Description

View > Pan > To Selections Y Centers the view over the selected objects.
Depending on the magnification, all selected
objects may not be visible in the resulting
view.
View > Pan > Left ← Moves the view to the left by one-quarter of
its width.
View > Pan > Right → Moves the view to the right by one-quarter
of its width
View > Pan > Up ↑ Moves the view up by one-quarter of its
height.
View > Pan > Down ↓ Moves the view down by one quarter of its
height.
View > Pan > Pan By... Alt+F 0 > Right Up < 0 Down Left DX DY space
comma or tab delimited.
View > Pan > Object J Pans to the left side of an object. For wires, it
Pan > Left pans to the leftmost endpoint. For boxes and
polygons, it pans to the center of the left size
of the object’s minimum bounding box
(MBB).
View > Pan > Object K Pans to the right side of an object. For wires,
Pan > Right it pans to the rightmost endpoint. For boxes
and polygons, it pans to the center of the
right size of the object’s minimum bounding
box (MBB).

L-Edit 14 User Guide Section 1 117


Chapter 3: Viewing the Layout Zooming and Panning

Keyboard Shortcut
Command Description

View > Pan > Object Displays the Object Pan Settings dialog.
Pan > Settings...

ƒ Center view on endpoint - Centers the


display on the object’s endpoint, without
changing the zoom level.
ƒ Center on endpoint and zoom -
Centers the display on the object’s
endpoint and zooms in or out until the
object’s endpoint and a specified margin
(see below) fill the active window.
ƒ Margin around endpoint - Sets the
margin, in display units, to be displayed
around the object’s endpoint when
automatic zoom is active.

View > Pan > To Cell Edge shifts the view so that the edge of the view is flush with the edge of the
contents of the cell.

Keyboard Shortcut
Command Description

View > Pan > To Cell Shift + ← Shifts the view so that the left edge of the
Edge > Left view is flush with the left edge of the
contents of the cell.
View > Pan > To Cell Shift + → Shifts the view so that the right edge of the
Edge > Right view is flush with the right edge of the
contents of the cell.
View > Pan > To Cell Shift + ↑ Shifts the view so that the top edge of the
Edge > Up view is flush with the top edge of the
contents of the cell.
View > Pan > To Cell Shift + ↓ Shifts the view so that the bottom edge of the
Edge > Down view is flush with the bottom edge of the
contents of the cell.

Zooming and Panning with the Mouse

Use View > Zoom > Mouse, click the mouse zoom button ( ), or press Z to change the functions of
the mouse buttons for a single operation. The three buttons become ZOOM BOX (left), PAN (middle),
and ZOOM OUT (right). The following table describes each button function.

Button Action

ZOOM BOX ƒ Click at a single point to magnify the area around the pointer by a
factor of two.

L-Edit 14 User Guide Section 1 118


Chapter 3: Viewing the Layout Zooming and Panning

Button Action

ƒ Click and drag the pointer to specify a rectangular area to which


the view will be zoomed. The height-to-width ratio is maintained
as closely as possible to the original view.
PAN ƒ Click to pan the view so that the new center is located at the
pointer’s position.
ƒ Click and drag the pointer to pan the view in the direction and
through the distance of the pointer’s motion (when the button is
released).
ZOOM OUT ƒ Click to zoom the display window out from the location of the
pointer.

After a mouse-controlled viewing operation, the mouse buttons revert to their previous functions.

Mouse Wheel Functions

The mouse wheel works to scroll up and down through any layout, cross section, text or navigator
window in L-Edit if no keys are used.

In a layout window, CTRL + mouse wheel zooms the window in or out with the cursor location as the
center, and SHIFT + mouse wheel scrolls the window left or right.

In a cross section window, the mouse wheel will step up or down through process layers.

In a non-window area (title bars, toolbars, etc.) the mouse wheel will scroll through all open document
windows and CTRL + mouse wheel will scroll through only the windows in the active file.

Auto-Panning

Auto-panning involves using the mouse to continually pan the view. To activate auto-panning, use
Setup > Application—General and check the Auto-panning option. With auto-panning on, when you
draw on object or a selection marquee to the edge of the current view the view automatically pans
beyond the edge.

Moving to Specific Coordinates

Use View > Goto to center the view on specific coordinates in the layout.

The coordinates are in display units, separated by a space or a comma, and are relative to the origin.
Coordinates can be typed or copy-pasted into the field.

L-Edit 14 User Guide Section 1 119


Chapter 3: Viewing the Layout Cross-Section Viewer

Exchanging Views

Use View > Exchange or press X to return to the previous view after you execute any zoom or pan
command. You can use this command to go back and forth between two views.

Cross-Section Viewer

L-Edit cross-section views depict the vertical structure of an integrated circuit.

Though actual chips have properties and process artifacts such as smooth height transitions, bird’s beak,
and planarization which L-Edit does not model, the cross-section viewer provides a highly readable
image of the fabrication process.

Cross-section views are generated from layout by simulating a set of process (fabrication) steps and
building the diagram from the substrate up, one layer at a time. These simplified process steps
correspond only roughly to the process steps used by the fabricator to create the chip. The process
definition is derived from a separate text file (see “Process Definition Files” on page 124).

The cross-section viewer simulates three types of process steps:

ƒ Grow/deposit to generate new material


ƒ Etch to remove material
ƒ Implant/diffuse to modify the material nearest the surface

Grow/Deposit

New material is generated uniformly in a grow/deposit step. The substance specified in the process step
statement is grown or deposited vertically to the specified depth (measured in technology units) on all
upward-facing surfaces. The following figure depicts new material deposited in a grow/deposit step.

depth

Oxide growth and metal deposition are both simulated with this type of step. (In reality these fabrication
layers and the substrate are manufactured with completely different procedures, but for cross-section
viewing purposes, the results can be modeled in the same way.)

Etch

An etch step removes material from all areas covered by the specified mask layer. The etch process
model involves up to three parameters: the depth, the undercut offset, and the angle. Depths and offsets
are measured in technology units; angles are measured in degrees. A cross-section surface resulting

L-Edit 14 User Guide Section 1 120


Chapter 3: Viewing the Layout Cross-Section Viewer

from an etch step with depth d, undercut offset u, and angle a, between points x1 and x2, is shown in the
following figure.

u u

d
a

x1 x2

Typically, many of the layers to be etched will not be simple drawn mask layers, but will result from
logical operations such as AND, OR, and NOT combining several mask layers. Unlike a physical etch
that may remove some materials but not others, the simplified etch step removes all materials
uniformly. Although nonphysical, the simplified etch captures the important details of most
semiconductor fabrication processes.

Implant/Diffuse

To simulate the ion-implantation or high-temperature diffusion process that modifies the type of
semiconductor nearest the surface, an implant/diffuse step causes the color of the specified mask layer
to replace the existing ones from the top surface down to the specified depth in all areas covered by the
layer. The implant/diffuse process model involves the same parameters as in the etch model, except that
the underlying material is replaced rather than removed.

Again, the mask layer may be a logically derived one. For example, the self-aligned polysilicon gate
structure requires a combination of the polysilicon and active mask layers to determine where to show
the implanted active, which may be blocked by either field oxide (the NOT of active) or by polysilicon.
Operations on layers are specified with the Setup Layers dialog (see “Layer Setup” on page 87). The
derived layers are specified for cross-section views the same way as for DRC and extraction layers.

Operation

A process definition file must exist prior to generating a cross-section. The layer names in this file must
exactly match the layer names in the layout that you wish to view in cross-section. Sample process
definition files are provided in the tech directory, which is located in the default L-Edit install directory.
The process definition files are described in the file Index.txt, which is located in the same directory.
For information on the syntax of a process definition file, see “Process Definition Files” on page 124.

The cell for which you wish to generate the cross-section must be open. Arrange the display such that a
small region of interest (usually a few transistors) is centered in the upper portion of the layout view.

L-Edit 14 User Guide Section 1 121


Chapter 3: Viewing the Layout Cross-Section Viewer

When you choose Tools > Cross-Section or press the cross-section button ( ) L-Edit displays the
following dialog:

Process definition file Type in the name of the process definition file, or use the Browse
button to select the file.
Pause after first step Pauses cross-section generation after the first step in the process. To
resume cross-section generation, click the Next Step button ( )in
the cross-section window.
Vertical coordinate (Y) Sets the vertical coordinate along which the cross-section is
generated.
Pick Allows you to set the vertical coordinate graphically. The cursor
becomes a horizontal line that can be dragged up or down in the
layout. Clicking the mouse button over the desired position reopens
the Generate Cross-Section dialog, with the graphically selected
y-coordinate in the Vertical coordinate (Y) field.
Exaggeration factor Sets the magnification factor for the cross-section along the z-axis in
terms of a ratio. Since process depths are measured in technology
units, the displayed thicknesses of layers in cross-section scale with
the current layout magnification. At very large or very small
magnifications, it may be impossible to display cross-section views
effectively at a 1:1 horizontal-to-vertical aspect ratio. The two fields
(numerator and denominator) specify the ratio by which to compress
or expand the vertical axis of the cross-section.
Auto-fit in window Sets magnification along the z-axis for maximum visibility.

L-Edit 14 User Guide Section 1 122


Chapter 3: Viewing the Layout Cross-Section Viewer

Display

L-Edit displays the cross-section view in the lower portion of the application interface.

Where the active cell displays a cross-section view:

ƒ You cannot pan, zoom, or edit in the cross-section window.


ƒ You cannot perform an editing operation in other windows associated with the file.
ƒ You cannot resize the layout window.

The split line separating layout from the generated cross-section can be dragged into another location.
Double-clicking on this line removes the cross-section view.

To continue normal layout editing, close the cross-section window.

Single-Step Display

You can step through the cross-section view one process step at a time. To do click the appropriate
button in the cross-section window:

First process step


Previous process step
Next process step
Final process step

L-Edit 14 User Guide Section 1 123


Chapter 3: Viewing the Layout Cross-Section Viewer

A tooltip identifying the associated process step appears over these buttons when you point at them. The
current step is displayed in the status bar.

Single-step mode is useful for learning the steps involved in fabrication. For instruction in real
fabrication processing, a much more detailed process definition could be used.

Single-stepping through a fabrication cross-section that includes all the photoresist and other
intermediate processing steps would better communicate the full complexity of today’s fabrication
processes. For designers who only want to view final cross-sections, simpler process definitions (such
as the example in this chapter) are sufficient and easier to maintain.

Process Definition Files

The cross-section process definition file (XST) contains a list of comment statements and process
statements. Comment statements begin with a pound sign (#) and continue to the end of the line.

Process statements have the following format:

step layer depth label [angle [offset]] [comment]

Each process statement begins with a step type, one of the following:

ƒ gd or grow/deposit

ƒ e or etch

ƒ id or implant/diffuse

Layer is the name of the involved layer. The name of the layer must match the layer name used in the
L-Edit TDB file. If the layer name begins with a digit or contains spaces, then the entire name must be
enclosed in double-quotes ("…"). The layer name describes something different for each type of step:

ƒ For grow/deposit steps: the layer to be grown/deposited


ƒ For etch steps: the layer to be etched away
ƒ For implant/diffuse steps: the layer to be diffused

A dash (-) in place of a layer name indicates that the process step has no associated rendering
information.

Depth is a (non-negative) value indicating the depth, measured in technology units. The depth also
means different things for different steps:

ƒ For grow/deposit steps: the number of units to grow upward


ƒ For etch and implant/diffuse steps: the number of units downward to apply the step

Label is optional. The label may be any string. If it contains spaces, the entire label must be enclosed in
double-quotes ("…"). A dash (-) may be used in place of a label.

If desired, two parameters that apply only to etch and implant/diffuse steps are inserted next:

ƒ Etch-implant angle (integer)


ƒ Undercut offset (non-negative floating-point or integer)

Angles are measured in degrees and must be between 0 and 180; offsets are measured in technology
units. The default values are angle = 80 and offset = 0.

L-Edit 14 User Guide Section 1 124


Chapter 3: Viewing the Layout Cross-Section Viewer

Last is an optional comment. The comment begins with a pound sign (#) and continues to the end of the
line.

Example

A sample definition for an n-well, double-poly, double-metal CMOS process is shown below. Each line
(after the header) corresponds to one process step.

# File: mORBn20.xst
# For: Cross-section process definition file
# Vendor: MOSIS:Orbit Semiconductor
# Technology: 2.0U N-Well (Lambda = 1.0um, Technology = SCNA)
# Technology Setup File: mORBn20.tdb
# Copyright (c) 1991-93
# Tanner Research, Inc. All rights reserved
# ******************************************************************************
# L-Edit
# Step Layer NameDepth Label [Angle[offset]] Comment
# ------------------------------------------------------------------------------
gd - 10 p- # 1. Substrate
id "Well X”3 n- # 2. n-Well
id ActPSelNotPoly0.9p+ 75 0 # 3. p-Implant
id ActNSelNotPoly0.9n+ 75 0 # 4. n-Implant
id CCD&Act 0.4 - # 5. CCD Implant
id "P Base"2 - # 6. NPN Base Implant
gd - 0.6 - # 7. Field Oxide
e Active 0.6 - 45 # 8.
gd - 0.04 - # 9. Gate Oxide
gd Poly 0.4 - # 10. Polysilicon
e NotPoly 0.44 - 45 # 11.
gd - 0.07 - 45 # 12. 2nd Gate Oxide
gd Poly2 0.4 - # 13. 2nd Polysilicon
e NotPoly20.47 - 60 # 14.
gd - 0.9 - # 15.
e "P/P2/Act Contact"0.9- 60 # 16.
gd Metal1 0.6 - # 17. Metal 1
e "Not Metal1"0.6 - 45 # 18.
gd - 1 - # 19.
e Via 1 - 60 # 20.
gd Metal2 1.15 - # 21. Metal 2
e "Not Metal2"1.15- 45 # 22.
gd - 2 - # 23. Overglass
e Overglass2 - # 24.

L-Edit 14 User Guide Section 1 125


4 Working with Files
1

Files

A complete L-Edit design is composed of cells contained in a design file. You can open as many design
files simultaneously as your hardware allows. L-Edit displays the name of the active file in the title bar.

Creating Files

Create new files by choosing File > New to open the New File dialog:

L-Edit 14 User Guide Section 1 126


Chapter 4: Working with Files Opening Files

L-Edit will open a layout window or the Tanner text editor, depending upon the file type you have
selected.

File type The type of file to create.


ƒ Layout opens a Tanner Database (TDB) file in a layout window.
The remaining options open the L-Edit text editor:
ƒ Text creates an ASCII text file for normal text editing
ƒ UPI Macro creates a new UPI macro template file with syntax
highlighting and commented-out coding guidelines
ƒ SPICE netlist opens a blank text screen that will highlight
syntax when a SPICE netlist is opened or entered
ƒ Calibre Command File creates a new Calibre template file with
syntax highlighting and commented-out coding guidelines
ƒ Dracula Command File creates a new Dracula template file
ƒ Assura Command File creates a new Assura template file
ƒ Tanner Extract File creates a new Tanner extract template file
See “Text Editor” on page 74 for a description of keywords that will
be highlighted for each file type, and their predefined styles.
Copy TDB setup from file For Layout files, the TDB file from which to take setup information
for the new file. You can choose a setup file by selecting one from the
list of predefined setup files, by typing the name of the file into the
text field, or by browsing. If you do not select a setup file, the new file
is opened with the default <empty> setup.

Setup Files

The list of predefined setup files will contain:

ƒ <empty>—this is a standard empty setup (this is the default setup with white background, single
layer and no DRC rules).
ƒ The list of currently loaded TDB files (displayed in bold face).
ƒ The list of TDB setup files found in the predefined setup directories. You can specify the TDB
setup path in the Setup Application dialog.

When you create a new file, L-Edit will assign it a default name (ex. Text or Spice), followed by a
number, e.g., Text2 or Spice5, depending on the history of the current session. When you first save the
new file, you will be prompted to change the filename, if needed.

After creating a file, you can specify additional information using the File Information dialog (see “File
Information” on page 137).

Opening Files

Use one of the following to open a file:

L-Edit 14 User Guide Section 1 127


Chapter 4: Working with Files Opening Files

ƒ Select File > Open or press Ctrl+O


ƒ Click the open file button ( )
ƒ Drag and drop a file icon from Windows explorer.
ƒ Open a recently used file by selecting its name from the bottom of the File menu.

Look in The source directory.


File name The name of the file to be opened. The wildcard character (*) can be
used to narrow down the list of available files. (For example, to list
only TDB files whose names begin with the letter a, type a*.tdb and
press Enter.) Only one file can be opened at a time. All files of the
specified type in the source directory are listed in the space above this
field.
Files of type The type of file listed. Predefined file types include:
ƒ Tanner Database Files (*.tdb)
ƒ Extract Definition Files (*.ext)
ƒ Netlist Files (*.tpr; *.ed)
ƒ Spice Files (*.sp;*.spc)
ƒ Design Rule Errors Text Files (*.drc)
ƒ Design Rule Text Files (*.rul)
ƒ Cross-Section Process Definition Files (*.xst.)
ƒ Nodal Capacitance Files (*.cap)
ƒ Standard Delay Format Files (*.sdf)
ƒ Application Configuration Files (*.ini)
ƒ Error Files (*.err)
ƒ All Files (*.*)
All file types in the source directory (*.*) can be displayed; however,
only TDB or text files can be opened with the File > Open command.

L-Edit 14 User Guide Section 1 128


Chapter 4: Working with Files Closing Files

Open as read-only Opens the selected file as read-only. When this option is checked,
changes made to the file cannot be saved. This option is only
supported for TDB files.
Check XrefCells Verifies that cells referenced from other files are current. If they are
not, the Examine XrefCell Links dialog appears. See “Updating Xref
Cells” on page 269 for further information.

Closing Files

To close the current file, choose File > Close or press Ctrl+W. If a file contains any unsaved changes,
L-Edit will prompt you to save them.

ƒ Clicking Yes saves the file. If the file is new, the Save As dialog appears (see “Saving Files,”
below).
ƒ Clicking No closes the file and discards all unsaved changes.
ƒ Clicking Cancel cancels the close operation.

Saving Files

To save the current file, choose File > Save or press Ctrl+S. L-Edit saves the file using its current
filename and path.

L-Edit 14 User Guide Section 1 129


Chapter 4: Working with Files Saving Files

To save a file using a different name or location, choose File > Save As. L-Edit displays the Save As
dialog.

Save in The target directory.


File name The name under which the file corresponding to the active window is
to be saved. The space above this field lists all files of the specified
type in the target directory. If you choose a name that already belongs
to an existing file, L-Edit prompts you for permission to overwrite the
existing file.
Save as type By default, the active file is saved as its current type. Text file can be
saved with any extension. Save as is often used to revert to a previous
version format for backwards compatibility.

L-Edit saves the following information for each file:

ƒ Size and location of all layout windows opened in this file


ƒ Which cells are open
ƒ The following viewing options:

Zoom levels of open cells

Visibility of origin and grid

Visibility of arrays and ports

Last view

Visibility of layers

L-Edit 14 User Guide Section 1 130


Chapter 4: Working with Files Printing

TDB File Format

Tanner Database (TDB) is a proprietary, machine-readable format optimized for the Tanner Tools
environment. TDB files are saved with the .tdb filename extension. By default, the scrollable list
displays TDB files.

Along with the design itself, a TDB file contains setup information including layer rendering
information, CIF and GDSII setup information, design rules, and L-Edit configuration settings. Setup
information can be read into L-Edit with File > Replace Setup.

When a file is saved, L-Edit automatically backs up previously-saved versions of the file with a .tdo
extension.

Printing

Use File > Print or press Ctrl+P to print. For TDB files, L-Edit opens the following dialog:

Name The device to which the data in the active file will be printed.
Properties Opens the Printer Properties dialog.

L-Edit 14 User Guide Section 1 131


Chapter 4: Working with Files Printing

Print to file Prints to a file instead of the physical printer. If this option is checked,
clicking OK opens the Print to File dialog.
Print range The set of pages to be printed.
Copies The number of copies to be printed, with the option to collate.
Layout area Drop-down menu that gives the option to print
ƒ Entire cell
ƒ Current window only

Resolution Printer resolution in dots per inch (dpi).


ƒ Best (matches printer resolution)
ƒ 600 x 600
ƒ 300 x 300
ƒ 150 x 150
ƒ 75 x 75

Scaling Option buttons control the magnification of the layout on the printed
page.
ƒ Pages—the number of pages (width × height) that the printed
layout will occupy. For example, a 3×2 page scale will result in a
layout that spans 6 printed pages: 3 wide and 2 high. Multiple
pages can be pasted together after printing to create the layout as
on the screen.
ƒ Display Units per—the ratio of display units to physical units on
the page. (To specify display units, use the pull-down menu in
the locator bar.) Options are Inch and centimeter. Selecting this
option will activate the field where you specify the number of
display units per the specified physical unit.
Options Opens the Layout Print Options dialog (see “Layout Print Options,”
below).

For text files, the dialog appears without the options for Layout area, Resolution, and Scaling:

L-Edit 14 User Guide Section 1 132


Chapter 4: Working with Files Printing

Layout Print Options

This dialog lets you control print legends, margins and page overlaps, as well as how much print
information will be stored in the L-Edit internal buffer.

Include header Lets you select whether a header will be printed (at the top left of the
plot) and what it will contain. Possible values are:
ƒ \n — new line
ƒ %c — cell name
ƒ %d — current date and time
ƒ %n — file name
ƒ %p — fine path
ƒ %s — scale
ƒ %v — L-Edit version
ƒ \\ — back slash
ƒ %% — percent sign

Include legend Toggles printing of a default legend for the layers shown in the plot,
positioned below the header.

L-Edit 14 User Guide Section 1 133


Chapter 4: Working with Files Printing

Include ruler Toggles printing of vertical and horizontal rulers showing major and
minor tick marks, along the image edge.
Coordinates at corners Toggles printing of tick mark values at the corners of the image only
only (checked) or along the entire length of the rulers.
Reverse black and white (if Allows you to invert black and white rendering in the plot (as
background is black) compared to the onscreen rendering) for layouts with a black
background. Note that only true black (red=0, green=0, blue=0)
values will be reversed to white.

All other colors will be printed as they are rendered onscreen.


Margins Controls the margin sizes for single page printing.
Multi-page margins Controls the margin sizes for mutli-page printing.
Multi-page overlap Controls the amount of image overlap on each page during multi-page
printing.
Memory Sets the size of the internal L-Edit memory buffer for bitmap
information sent to the printer, in megabytes.

L-Edit prepares the entire bitmap that represents a plot in computer


memory and then sends it to the printer driver. Most printer drivers
limit the size of such a bitmap, but not many can accurately measure
what this limit should be. Due to this limit, when printing large plots,
L-Edit splits the bitmap into sections and sends them one by one to
the printer driver. L-Edit uses the “bitmap buffer” value to calculate
how many sections it needs. The bigger the value the fewer sections
needed and the faster L-Edit will print in almost all cases.

8 MB is the best value for most printers, but some plotters benefit
from a higher value. Some older printers can handle only 1MB
sections.

L-Edit 14 User Guide Section 1 134


Chapter 4: Working with Files Printing

Print Setup

To set up printing parameters, choose File > Print Setup. For TDB files, the following dialog appears:

(For text files, the dialog appears without the Layout area, Resolution, and Scaling options.)

Printer The default device to which the active text file will be printed. The
drop-down list shows available printers.
Properties Opens the Printer Properties dialog.
Paper Specifies the paper size and source.
Orientation Specifies the orientation of the printed page as portrait or landscape.
Layout area Drop-down menu that gives the option to print the entire cell or just
that part of the cell displayed on your monitor.
Resolution Printer resolution in dots per inch (dpi).
ƒ Best (matches printer resolution)
ƒ 600 x 600
ƒ 300 x 300
ƒ 150 x 150
ƒ 75 x 75

L-Edit 14 User Guide Section 1 135


Chapter 4: Working with Files Printing

Scaling Option buttons control the default magnification of the layout on the
printed page.
ƒ Pages—the number of pages (width × height) that the printed
layout will occupy. For example, a 3×2 page scale will result in a
layout that spans 6 printed pages: 3 wide and 2 high. Multiple
pages can be pasted together after printing to create the layout as
on the screen.
ƒ Display Units per—the ratio of display units to physical units on
the page. (To specify display units, use the pull-down menu in
the locator bar.) Options are Inch and centimeter. Selecting this
option will activate the field where you specify the number of
display units per the specified physical unit.
Options Opens the Layout Print Options dialog (see “Layout Print Options”
on page 133).
Network Opens the Connect to Printer dialog, which allows you to connect to
printers in your shared environment.

Print Preview

File > Print Preview displays the active cell as it will be printed in full-page mode. Cells cannot be
edited in Print Preview.

Print Opens the Print dialog (see “Printing” on page 131).


Next Page Displays the next page in the window.
Prev Page Displays the previous page in the window.
Two Page Displays two pages in the window.
Zoom In Magnifies the display.
Zoom Out De-magnifies the display.
Close Closes the Print Preview dialog.

L-Edit 14 User Guide Section 1 136


Chapter 4: Working with Files File Information

In addition to layouts, you can also preview text or a Design Navigator display.

File Information

Access information about the current file by choosing File > Info.

File path The path and filename of the active file.


File info Includes Author, Organization, and Information (notes or messages)
for the active document. Information can contain a maximum of 256
characters. Object Count shows the total number of polygons in a
file. (You can also use “Mark Cells for Flattening During DRC”
(page 395) to determine this value at any time.)
File flags Locks the current file. Locked files cannot be edited, but data from
the file can be copied to another file.

L-Edit 14 User Guide Section 1 137


Chapter 4: Working with Files Properties

File dates and versions The date and time the file was created and last revised. Setup info
and Layout info include version numbers. The version numbering
system provides an internal accounting method for tracking layout
design and file setup changes. Major numbers are increased by
clicking the Increment button; minor numbers are automatically
incremented each time changes in the file are saved.
Properties Accesses the Properties dialog. For more information on file
properties, see “Properties” on page 138.

Listing Object Types by Layer

Use File > File Object Summary to generate a text file listing the number of boxes, polygons, wires,
circles, pie wedges, tori, ports and rulers on each layer of a file.

Transferring File Information to Cells

Use Tools > Add-Ins > Transfer File Info to Cells to copy just the author and organization information
from the file information to the information dialog for all cells in the file.

Properties

L-Edit properties are comprised of a name and value and are used to store information. You can attach
properties to L-Edit objects, layers, instances, cells, and files.

When you attach a property to a cell or instance, it is local to that cell or instance only. Properties
attached to primitive cells do not propagate throughout the design hierarchy.

If you copy a cell, however (using Cell > Copy), the copied cell will contain any properties created in
the original.

Properties are classified by type and can be arranged in hierarchical groups. Properties have many
applications, including:

ƒ Netlist extraction—you can use properties to control the information extracted from a layout.
ƒ Design management—in conjunction with a UPI macro, you can use properties for such tasks as
counting the instances of a cell.
ƒ Design documentation—you can load a text file or other document into a property attached to a file,
cell, layer, or other object.

Property Types

Valid property data types include the following:

None Property without a value—often used simply to create a level of


hierarchy.
Integer Signed integer from -2,147,483,648–2,147,483,647.
Byte Unsigned integer from 0–255.

L-Edit 14 User Guide Section 1 138


Chapter 4: Working with Files Properties

Real Floating point (8-byte) number from 1.7E +/- 308.


String Alphanumeric string.
Logical Boolean with values True or False.
Pointer Address of a location in RAM memory.
BLOB Binary large object.

Viewing and Editing Properties

Properties are viewed and edited using the Properties dialog. For layout objects, you can access this
dialog in the following way:

; Select the object of interest.

; Choose Edit > Edit Object(s).

; In the Edit Object(s) dialog, click Properties.

For layers, you can access the Properties dialog in the following way:

; Choose the menu command Setup > Layers.

; In the Setup Layers dialog, click Properties.

For files and cells, you can access the Properties dialog in the following way:

; Open the file or cell of interest.

; Choose the menu command File > Info or Cell > Info, as appropriate.

; In the File Information or Cell Information dialog, click Properties.

For any object, L-Edit displays the Properties dialog:

L-Edit 14 User Guide Section 1 139


Chapter 4: Working with Files Properties

The Properties dialog has two major areas—the Properties tree on the left and the value fields on the
right.

The Properties tree displays the properties for the selected file, cell, layer, or object. Properties with
subproperties appear in the tree with folder icons; properties without subproperties appear with small
white rectangles. A plus sign next to a folder indicates that the property can be expanded; a minus sign
indicates that it can be collapsed.

When you select a property, its name, type, and value are displayed in the fields Property, Type, and
Value to the right of the Properties tree. You can use the Values field to type values for a selected
property or to choose values from the list of previous entries. Click on a property to open the
Subproperties list.

Binary Large Object (“Blob”) Properties

When you select or create a property of the type binary large object (BLOB), the Load and Save
buttons below the Subproperties list are activated.

Load Accesses a standard Windows file browser in which you navigate to


the object to be loaded into a BLOB property.
Save Accesses a standard Windows file browser in which you specify the
filename and path of the file to which the BLOB will be written. The
default filename extension is .blo.

Adding Properties

To add a property, select a property in the Properties tree that you want to be the parent for the new
property. Then perform one of the following actions:

ƒ Click Add Property.


ƒ Right-click and select Add property from the pop-up menu.
ƒ Press the Insert key (Ins).

L-Edit displays the Add Property dialog:

Property name Full name of the new property.


Property type Data type of the new property. For further information, see “Property
Types” on page 138.

L-Edit 14 User Guide Section 1 140


Chapter 4: Working with Files Properties

Property value Value of the new property. Type the value in this field or click the
arrow to select from a list of previously used values.

Deleting Properties

To delete a property, select it in the Properties tree and perform one of the following three actions:

ƒ Click Delete Property.


ƒ Right-click and select Delete property from the pop-up menu.
ƒ Press the Delete key (Del).

Renaming Properties

To rename a property, select it in the Properties tree and perform one of the following three actions:

ƒ Right-click and select Rename property from the pop-up menu.


ƒ Press F2.

Deleting Values

To delete a property’s value, perform one of the following actions:

ƒ Select the icon in the Properties tree and click Delete Value.
ƒ Select the subproperty in the Subproperties list and click Delete Value.
ƒ Select the subproperty in the Subproperties list and press Del.
ƒ Select the subproperty in the Subproperties list, right-click, and choose Delete Value in the
resulting pop-up menu.

Editing Values

When you select a property in the Properties tree, you can edit its value in the Value field. You can also
edit values for subproperties of the selected property in the Value column of the Subproperties list.
Select an item in the Subproperties list and press F2. Alternatively, you can right-click the item and
select Modify value in the resulting pop-up menu.

Organizing Properties in a Hierarchy

You can create a hierarchy by selecting a property in the Properties tree and adding subproperties
beneath it. The selected property is then shown as a folder icon, and properties shown beneath it are
grouped at a deeper level (or levels) of hierarchy.

L-Edit uses a period (.) to separate levels of hierarchy in the Properties tree. For example, the path
EXTRACT.W contains the property EXTRACT and the subproperty W.

L-Edit 14 User Guide Section 1 141


Chapter 4: Working with Files Adding a Copyright, Logo or Text to a File

Adding a Copyright, Logo or Text to a File

L-Edit provides several methods for adding text to your layout. The Text to Layout feature lets you add
text in any of the fonts on your PC, by rendering the characters as bitmaps and creating box geometry
for each pixel. You can also use the Layout Text Generator to generate text or a logo. The associated
alphabet.tdb file is required for this macro to function.

Adding True Type Fonts to a Design

Use the Draw > Layout Generators > Convert Formatted Text to Layout command to add text in any
of the fonts available to your PC. Text is created as layout geometry by producing a box corresponding
to each pixel of a character after it has been rendered as a bitmap.

Layer Select the layer on which the text geometry will be drawn.
Text size Enter a size for the text.

Note: You may need to experiment with this value to get the text size
you prefer as it will be relative to the scale of your design.
Font Click this button to select from the available fonts.

Bold and italic styles are supported when available. The Font dialog
shows a preset font size of 16, but it is the Text Size field on the Text
to Layout dialog that controls text size.

Text Enter the text string you want to add as layout.


Merge resulting polygons By default (with this option off) L-Edit will merge rows of contiguous
pixels to reduce file size and processing time. When this option is on,
the resulting layout can be merged into non-contiguous polygons of
any shape.

L-Edit 14 User Guide Section 1 142


Chapter 4: Working with Files Adding a Copyright, Logo or Text to a File

Point size is not an absolute value but differs for every font, as it is a value based upon the distance
between lines of set type and the difference between the highest ascender and lowest descender in a
given font.

One convention is to specify the height of the capital M as 72% of the font height. This works fairly
well for most Roman style fonts but is not as consistent for other font styles.

Using the alphabet.tdb File

alphabet.tdb is a special file containing cell instances for the letters in the alphabet, numerals and
special characters plus cells for a copyright and a logo. It is shipped with L-Edit in the
C:\Documents and Settings\username\My Documents\Tanner EDA\Tanner Tools v xx.yy\L-Edit\
AddIns directory.

(See also the UPI macro “Logo Generator” (page 1706).)

L-Edit 14 User Guide Section 1 143


Chapter 4: Working with Files Adding a Copyright, Logo or Text to a File

The Draw > Layout Generators > Layout Text Generator command takes cells from alphabet.tdb,
and adds them as layout geometry to your current design.

Layout Text String Enter your text here. A maximum of 1024 characters is allowed. You
can use the following formatting codes:
&c - Center text
&l - Align text left
&r - Align text right
\\n - Insert new line
&d - Insert current date
&t - Insert company logo
&m - Insert mask copyright
Layer Name The layer on which to generate the text. The layer must exist in the
current technology setup.
Cell name Cell in which the text will be generated. (This field is enabled only
when Create as Instance is checked.)
Print Date Prints the current date.
Print Mask Copyright Prints the copyright symbol from the Mask Copyright Symbol cell in
the alphabet.tdb file.
Underline Underlines the text string and, if used, date. This feature is useful
when you need to etch away the material underneath the text.
Create as Instance Generates the text as an instance of a new cell, which will replace the
contents of the current cell. Use the Cell Name field to specify the
name of the new cell.
Print Company Logo Prints the contents of the Company Logo cell in the alphabet.tdb
file. To print your own company logo simply save your logo file to
the Company Logo cell in alphabet.tdb.

L-Edit 14 User Guide Section 1 144


Chapter 4: Working with Files Exiting L-Edit

Text Size Enter the desired text size in the current display units. You may need
to experiment with this value to get the text size you prefer as it will
be relative to the scale of your design.

In alphabet.tbd, though the height of MBB of each character is 1


micron, the characters of that block capital alphabet do not span that
full height. So, if you enter a text size of 1 in a design using microns
as the display unit, the text itself will not be a full micron high. The
extra space is needed for the ascenders and descenders in lowercase
and non-block lettering.

Exiting L-Edit

Choose File > Exit to exit L-Edit. A warning prompts you to save changes in each unsaved file.

L-Edit 14 User Guide Section 1 145


Chapter 5: Importing and Exporting Files

5 Importing and Exporting Files


1

Importing Files

You can import GDSII, CIF and DXF format files, as well as the bitmap formats GIF, JPEG, TIFF and
BMP into an L-Edit file. You can also import a Cadence Virtuoso® technology file (see “Importing a
Setup from Virtuoso” on page 56) or a Silicon Canvas Laker file (see “Importing a Setup from Laker”
on page 57) into L-Edit .

Importing GDS Files

Use File > Import Mask Data > GDSII to import GDSII files into L-Edit.

From file Name of the file containing the design data to be imported. L-Edit
will search for zipped GDS files with a .gds.gz extension as well as
.gds files, and will unzip a file if needed during the import procedure.

Use setup file Specifies a TDB setup file containing the necessary layer setup
information.

L-Edit 14 User Guide Section 1 146


Chapter 5: Importing and Exporting Files Importing Files

If Unknown Layers are If GDS layer numbers are found that are not in the setup file then
found prompt to ask how to map the layer, or automatically generate new
layers.
Treat different GDS data If this option is checked then layers with the same GDS layer number
types on a layer as but different data types will be placed on different layers. The layers
different layers will have the same GDS number but different names and different
data types. If not checked then layers with the same GDS number but
different data types will be placed on the same layer.
Database resolution: From This field displays the database resolution in the GDS file and may
GDS file not be modified. This option may be chosen when importing using an
empty setup file.
Database resolution: When a TDB setup file is specified, this field displays the resolution
Custom/From TDB file of the setup file which is used for import. When an empty setup file is
specified this field allows you to specify a custom resolution
Import Imports the specified file

Prompt if unknown layers are found

If you selected to prompt for unknown layers then L-Edit will display the dialog shown below if your
design has a layer for which there is no corresponding layer in the setup file,

Options include:

ƒ Creating a new layer for the unknown value


ƒ Generating a new layer for all unknown values
ƒ Mapping the unknown value to an existing layer

After importing a GDSII file, L-Edit produces a log file summarizing settings, showing status, and
providing detailed warning and error messages.

GDSII Data Type

If the option Treat different GDS data types on a layer as different layers is selected, then:

L-Edit 14 User Guide Section 1 147


Chapter 5: Importing and Exporting Files Importing Files

ƒ If an object has a combination of GDSII layer number and data type that corresponds to an existing
layer in the TDB setup file, L-Edit maps the object to that layer.
ƒ If a layer does not exist corresponding to the GDS number and data type of the object, or you are
importing into an empty setup, a new layer will be created and the object will be mapped to that
layer.

If this option is not selected then L-Edit will map the object to the first layer with the corresponding
GDS number and will ignore the data type. If a layer with the GDS number does not exist it will be
created.

Database Resolution

When importing a GDS file you may specify a file to use as a setup file, or import with an empty setup
file. When importing using a specified setup file, the database resolution used will be the resolution in
the setup file. If the resolution in the setup file is different to the resolution in the GDS file, then the
GDS data is scaled to maintain the physical size of the layout. When importing using an empty setup
file, you have the choice of using the resolution in the GDS file or specifying your own custom
resolution.

XrefCells

During GDSII import, L-Edit will create an XrefCell for each external cell and will attempt to
automatically establish a link by locating the cell using its cell name in each Xref file. The files will be
searched in the order that they are listed in the Setup > Design—Xref files dialog (see “Cross
Reference (XRef) File Designation” on page 85). Once L-Edit finds a matching cell name, the link is
established and no further searching is done.

If L-Edit does not find the referenced external cell in any of the cross-referenced TDB libraries, it will
create a blank cell and open the Examine XrefCell Links dialog to allow you to redirect the missing cell
definition at the end of the GDSII import operation (see “Updating Xref Cells” on page 269).

Setting the View Level

Often a designer will want to set or change the hierarchy view level when importing a GDSII file. This
setting is saved with the L-Edit design file for each cell view so cannot be controlled using the
technology setup information. You can instead use a read-only registry string to set the Hierarchy Level
value for all new cells created during GDSII import. This is an optional setting with a persistent value.
Set it to the integer representing the desired level or use zero to set it to “all.”

For example, if your GDSII file shows all levels but you are importing into L-Edit to place or position
cells, you would use

[HKEY_CURRENT_USER\Software\Tanner EDA\L-Edit\Import/Export\GDSII]
"HierarchyLevelOnGDSImport"="1"

to view just the cell names and rotation at the first level of the view hierarchy.

L-Edit 14 User Guide Section 1 148


Chapter 5: Importing and Exporting Files Importing Files

Importing CIF Files

Use File > Import Mask Data > CIF to import CIF files into L-Edit. Note that to avoid errors, rotated
boxes should be entered as polygons.

From file Name of the file containing the design data to be imported.
Use setup file Specifies a TDB setup file containing the necessary layer setup
information.
If Unknown Layers are If CIF layer names are found that are not in the setup file then prompt
found to ask how to map the layer, or automatically generate new layers.
Read rectangular polygons Rectangular polygons in CIF will be converted to boxes in L-Edit if
as boxes this option is checked. This option speeds processing, as boxes
consume less memory and are drawn faster than polygons.
Import Imports the specified file

Importing DXF Files

Use File > Import Mask Data > DXF to import DXF files into L-Edit.

L-Edit will attempt to read the specified DXF file into a new L-Edit file. The technology settings for the
new file are taken from the L-Edit file open at the time the import is executed. L-Edit generates a log
file detailing conversion issues.

L-Edit 14 User Guide Section 1 149


Chapter 5: Importing and Exporting Files Importing Files

DXF ARCs are imported as zero-area curved polygons; DXF LINEs and open POLYLINEs are
imported as wires of zero width. If the open POLYLINE has curved segments, the wire will contain a
multi-segment approximation to the curved edge, not exceeding 256 segments.

From file Name of the file containing the design data to be imported.
Scale DXF files do not contain explicit scaling information. Thus, you must
specify how many display units each DXF unit corresponds to.
Objects with Non-Zero DXF files can contain 3-D data. If Ignore these objects is selected,
Elevation only objects with Z=0 coordinates will be read in; this filter is applied
on a vertex-by-vertex basis. If Collapse these objects to Z=0 plane
is selected, the Z value of each vertex is ignored.
Merge Open Polylines DXF objects are sometimes exploded into their constituent segments.
Often, you will want to merge these segments into polygons. When
this option is selected, L-Edit will search for segments having
endpoints within the specified tolerance, and try to build closed paths
of such segments. If a closed path is found, the individual segments
are replaced by a single L-Edit polygon.

Note: The search for possible closed paths is not exhaustive, so


selecting as small a tolerance value as possible is the best
strategy. See “Draw > Convert > Connect Segments” (page
151).
Do not import hatch fills or When checked, omits hatch fills and dimensions from the information
dimension imported to L-Edit.
Do not import visible When checked, visible attributes in the DXF file will not be
attributes as ports considered ports in L-Edit.

L-Edit 14 User Guide Section 1 150


Chapter 5: Importing and Exporting Files Importing Files

Draw > Convert > Connect Segments


Use this command after a DXF file is imported into L-Edit to fix unresolved polygons.

Geometry in a DXF design that is drawn using polylines is replaced with zero-width wires when
imported to L-Edit. Occasionally, depending upon the original drawing and the merge tolerance setting
during import, some polylines intended to circumscribe a polygon may remain unconnected in L-Edit.

To edit such an anomaly, select the unconnected zero-width wires, making sure the layer on which the
polygon is to be drawn is selected. If the polylines are closer together than the value in the Tolerance
field of Connect Segments, the lines will connect to form a polygon on the selected layer.

Importing Graphics

You can use L-Edit to import a GIF, JPEG, TIFF or BMP format raster graphic into your design file.
L-Edit converts the bitmap into layout geometry by drawing a corresponding box for each pixel in the
image.

L-Edit 14 User Guide Section 1 151


Chapter 5: Importing and Exporting Files Importing Files

Merging and Dithering Options

Import options include dithering, for photographs or other images with many colors or high resolution,
and merging, which reduces the number of polygons that are drawn, as shown below

Use the menu command Draw > Layout Generators > Import Image to set your import options.

File Name of the file to import. Valid formats are GIF, JPEG, TIFF and
BMP.
Layer Select the layer on which the image geometry will be drawn.
Pixel size L-Edit draws a square corresponding to each pixel of the imported
bitmap. Use this field to enter the dimension of that square. For
example, if the pixel size is set to 1um and the image is 594 pixels
wide, then the resulting layout will be 594um long. This field is
initialized to the manufacturing grid.

L-Edit 14 User Guide Section 1 152


Chapter 5: Importing and Exporting Files Exporting Files

Construct Polygons from Creates layout for a negative of the imported image.
BRIGHT regions

Merge resulting polygons With this option on, the resulting layout can be merged into
non-contiguous polygons of any shape (see illustration). Such
(See illustration below.) merging can take a long time for images with an area larger than 300
x 300 pixels; L-Edit will request confirmation before merging files of
this size and larger.

With this option off (the default), L-Edit will merge contiguous pixels
into rows to reduce file size and processing time. No other geometry
is created.
Dither grayscale image Performs a non-weighted Floyd-Steinberg error diffusion dithering to
the image before converting it to layout.

Merge resulting polygons off Merge resulting polygons on

L-Edit merges contiguous L-Edit merges pixels into larger


pixels into rows to reduce polygons of any shape.
file size and processing time.

Exporting Files

You can export GDSII, CIF and DXF format files from an L-Edit file.

Exporting GDS Files

L-Edit accepts and preserves non-standard GDSII numbers when importing and exporting GDSII files.
For further information on assigning and propagating GDSII data types, see “Assigning Data Types” on
page 166.

After exporting a GDSII file, L-Edit produces a log file with detailed warning and error messages.
However, L-Edit does not create backups for GDSII files. If you try to write to an existing GDSII file,
L-Edit will warn that you are about to overwrite a file.

L-Edit 14 User Guide Section 1 153


Chapter 5: Importing and Exporting Files Exporting Files

L-Edit assigns a number to each layer in the design in order to conform to GDSII syntax. To modify a
GDSII layer number prior to exporting the file, use Setup > Layers—General. Select a layer in the
Layers list and enter the appropriate value in the GDSII number field.

Polygons with Too Many Vertices

GDSII files do not contain curves. L-Edit automatically converts circles, pie wedges, tori and
curved-sided polygons to straight-sided polygons when writing out GDSII. (For information on the
parameters, see “Cross Reference (XRef) File Designation” on page 85.)

Wires and polygons in a GDSII file cannot contain more than 200 vertices. If your design contains a
wire or polygon with more than 200 vertices, L-Edit will write a warning to the GDS Export log.

To resolve this problem, you can fracture a polygon having a large numbers of vertices into many
polygons with fewer vertices using Draw > Convert > Fracture Polygons. Note that the fracture
operation will not modify wires, circles, pie wedges, or tori. (See “Fracturing Polygons” on page 202.)

Use File > Export Mask Data > GDSII to export GDSII files from L-Edit.

To file Name of the file to which you want to export GDSII.


Zip output file Check this box to zip the file during export. L-Edit will append .gz to
the file extension.
Log file Enter a file name and directory location for the export log file.
Open in log window When this option is checked, the log file will open in the L-Edit text
editor.

L-Edit 14 User Guide Section 1 154


Chapter 5: Importing and Exporting Files Exporting Files

Do not export hidden When this option is checked, L-Edit will not write any objects that are
objects hidden either by object type or by layer. When this option is off, all
objects will be written to the GDSII file, whether hidden or not.
Overwrite object data type When this box is checked, an object will be written to the GDSII file
with layer data type with the data type of the layer on which it is drawn. If the layer does
not have a data type, the object retains its data type. For further
information, see “Assigning Data Types” on page 166.
Calculate MOSIS Calculate checksum required for submitting GDSII files to MOSIS.
Checksum
Check for self-intersecting When this box is checked, polygons and wires will be checked for self
polygons and wires intersections, and self intersections will be reported to the GDS export
log. This option can significantly slow down time required for export.
Write XRefCells as links When this option is checked, L-Edit will export XrefCells as cell
references only; their contents will not be included. An XrefCell that
is not instanced will not be written out. When this option is not
checked, L-Edit will write all cell references and their contents to the
GDSII file, whether the cell is an XrefCell or not.

Note: only the cell name is exported, not the contents of the cell. All
cells that are linked must have a local cell name that is the same as
their XrefCell name for GDSII to successfully export when using this
option. If a local cell name is not the same as its external cell name
when the Write XrefCells as links option is on, the GDSII export
operation will report an error and abort.
Fracture polygons with Polygons with more than n vertices will be split into multiple
more than n vertices polygons with less than or equal to n vertices. Circles, Arcs, and Tori
will also be fractured if their vertex count exceeds n when they are
converted to polygons for GDS export.
GDSII default (1 database When selected, L-Edit converts object dimensions into units of 0.001
unit = 0.001 microns) micron (the default GDSII database unit) when exporting a GDSII
file. For example, a 10×10 box with 1 internal unit = 1 lambda = 1
micron in the L-Edit layout would be recorded in the GDSII file as
having dimensions of 10,000×10,000 database units.
Custom Check this option and enter a value to convert object dimensions to
database units of other than 0.001 microns, or to user units when
exporting a GDSII file.
Cell names Select Preserve Case to leave the case of cell names unmodified,
Upper Case to convert cell names to upper case or Lower Case to
convert cell names to lower case (note that some GDSII systems do
not recognize lowercase letters).
Restrict cell names Select 32 characters to conform to the GDS standard. Cell names
will be truncated to 32 characters and if needed, modified to avoid
name collisions, in which case a warning will be written to the GDSII
exportlLog. Select 128 characters to conform to Cadence Virtuoso®
GDS import capability, where truncation will occur at 128 characters.
Select Unlimited for no truncation.
Export cell: Exports all cells to the GDSII file.
All cells

L-Edit 14 User Guide Section 1 155


Chapter 5: Importing and Exporting Files Exporting Files

Export cell: Exports just the specified cell and all cells instanced in it, and
Selected cell and its instantiated in those cells, etc. to the base of the cell's hierarchy.
hierarchy

Export Exports the specified file.

Exporting CIF Files

L-Edit cannot export layers without legal CIF names. L-Edit does not create backup files for CIF files.
If you try to write to an existing CIF file, L-Edit will warn that you are about to overwrite a file.

CIF files support circles, therefore they are not approximated during the export process. Curves,
however, are not supported. If your design contains curves they are automatically approximated during
export. For more information on the related parameters, see “Cross Reference (XRef) File Designation”
on page 85.

Tanner reads either CIF extensions 85 or 91 to attach the instance name to a cell, but writes 91.

Use File > Export Mask Data > CIF to export CIF files from L-Edit.

To file Name of the file to which you want to export CIF.


Do not export hidden When this option is checked, L-Edit will not write any objects that are
objects hidden either by object type or by layer. When this option is off, all
objects will be written to the CIF file, whether hidden or not.
Export rectangular ports as L-Edit writes out ports using the .cif extension, where the port’s label
center points is written along with the location of the port. When this option is
checked L-Edit writes the coordinates of rectangular shaped ports as a
single point at the center. When this option is unchecked, L-Edit
writes rectangular shaped ports using the center/length/width syntax
of CIF boxes. The unchecked option does not conform to standard
CIF syntax. For more information see “Extensions” on page 162.
Calculate MOSIS Calculate checksum required for submitting CIF files to MOSIS.
Checksum
Check for self-intersecting When this box is checked, polygons and wires will be checked for self
polygons and wires intersections. This option can significantly slow down time required
for export.
Export Exports the specified file

L-Edit 14 User Guide Section 1 156


Chapter 5: Importing and Exporting Files Exporting Files

Exporting DXF Files

L-Edit will attempt to create legal DXF names for cells and layers by replacing illegal characters with
"_". Use File > Export Mask Data > DXF to export DXF files from L-Edit.

To file Name of the file to which you want to export DXF.


Export L-Edit wires as DXF When this option is checked, all wire is exported as an “open
open polylines (ignores polyline” (the DXF name for a path), which is simply a series of
end and join styles) vertices and a width. End style and join style information is lost.
Otherwise, the wire is converted to a polygon, and a “closed polyline”
(the DXF name for a polygon) is written out. This shape accurately
reflects the outline of the original L-Edit wire.
Export curved objects as When this option is checked, circles and curved objects will be
straight polygons exported as polygons, with the vertices of the polygons on the
manufacturing grid. Otherwise, curved objects are exported to DXF
as true circles and curves.
Flatten output When this option is checked, data will be flatten during export to the
DXF file.

L-Edit 14 User Guide Section 1 157


Chapter 5: Importing and Exporting Files CIF File Formatting

Exporting PostScript Masks

The Tools > Add-Ins > PostScript Mask Separation command generates individual PostScript files
from the layout database. The masks are one-to-one scale, and are either positive or negative polarity.

All layers that have a MaskPolarity string property set are written out. If the value of this property is
Negative, a negative mask is written; otherwise, a positive mask is written. The user geometry is
centered on the mask. The mask size, if given, sets the clipping boundary for the generated PostScript.
If not set, the entire page is used (an A4/ 8.5" by 11" page size is assumed).

CIF File Formatting

Caltech Intermediate Form (CIF) is an ASCII file format for the interchange of mask geometry
information among IC designers and foundries. CIF is defined in Introduction to VLSI Systems by Mead
and Conway (Addison-Wesley, 1980). CIF files are typically saved with the .cif extension.

A CIF file may contain a single design or a library of designs. CIF assumes a right-handed geometry,
with the x-axis increasing to the right and the y-axis increasing upward. The basic unit of measurement
is 0.01 micron.

Commands may be used to scale object sizes, use different layers, and change the placement of objects.
Comments may be added to a CIF file by enclosing them in parentheses. All CIF commands and
comments must be terminated with semicolons.

L-Edit reads either CIF extension 85 or 91 to attach instance names to cells, and writes 91.

Symbols

CIF symbols are defined with the DS and DF commands. DS begins a symbol definition:

DS nnn a b;

where nnn is the symbol number and a and b are the (optional) scaling factors. All commands that
follow the DS command and precede the DF command are included in the symbol. CIF symbols are
always given numeric names.

The optional scaling factors a and b are applied to the integer coordinates and distances within a symbol
by multiplying each value by a and then dividing the result by b. Scaling helps to shorten the length of

L-Edit 14 User Guide Section 1 158


Chapter 5: Importing and Exporting Files CIF File Formatting

CIF files by eliminating trailing zeros. By default, coordinates and distances in CIF are specified in
units of 0.01 micron; a = 100 and b = 1 would allow values to be specified in microns instead. The
coordinates (10,6) with a = 100 and b = 1, for example, are equivalent to (1000,600) with a = 1 and b =
1. If a and b are not specified, then they are both assumed to be 1, and all integers are mapped to the
0.01 micron standard.

The DF command ends the last open DS command:

DF; (end of symbol definition);

If no symbol is open when a DF command is encountered, then a warning message is generated.

Symbols may be instanced within other symbols and are functionally equivalent to L-Edit cells.

Calls (Instances)

Once a symbol is defined, it may be instanced with the C (call) command. In addition to instancing the
named symbol, the C command also permits a variety of optional transformations to be applied:

C integer transformation;

where integer is the number of the symbol being called and transformation is an optional
transformation. A transformation may be composed of several translations, mirrors, or rotations.
Combinations of transformation operations are unambiguously applied from left to right as they are
encountered within the command. Great care should be exercised when determining the order of
transformation operations since the commutative property does not hold.

The translation operation specifies a coordinate. The coordinate represents the endpoint of a vector
originating at (0,0). For example:

C 55 T -100,10; (call command with translation);

calls symbol 55 and translates it 100 units in the negative x direction and 10 units in the positive y
direction.

The mirroring operations, MX and MY, correspond to multiplying the x and y coordinates by –1,
respectively. For example:

C 99 MX; (call symbol 99 and flip horizontally);


C 22 MY; (call symbol 22 and flip vertically);

The rotation operation rotates the called symbol in the specified direction. Direction is indicated by a
direction vector: a coordinate whose vector from the origin (0,0) sets the angle to which the symbol’s
x-axis is rotated. Only the direction of the vector is significant; the magnitude is ignored. For example:

C 44 R 0,1; (call command with rotation);

calls symbol 44 and rotates its x-axis by 90°.

Geometric Primitives

CIF provides commands for creating four types of geometric primitives: boxes, polygons, roundflashes
(circles), and wires.

L-Edit 14 User Guide Section 1 159


Chapter 5: Importing and Exporting Files CIF File Formatting

The B (box) command defines a rectangular box of fixed length and width. The center coordinates
locate the box, and a direction vector indicates its orientation. For example:

B 25 60 80,40 -20,20; (box command);

describes a box of length 25 and width 60, with center at (80,40) and direction vector (–20,20). The
length of the box is parallel to the direction vector, and its width is perpendicular to the direction.

The P (polygon) command defines a polygon with a certain number of sides and vertices. P accepts a
path of coordinates and creates the enclosed polygonal region in the order in which the vertices are
specified (the edge connecting the last vertex with the first is implied). For example:

P 0,0 0,40 20,40 20,20 40,20 40,0;

describes an L-shaped polygon with vertices at (0,0), (0,40), (20,40), (20,20), (40,20), and (40,0).

(0,40) (20,40)

(20,20) (40,20)

(0,0) (40,0)

To convert rectangular polygons to boxes when reading CIF into L-Edit, you must check the Read
rectangular polygons as boxes option in the Import CIF dialog.

The R (roundflash) command defines a roundflash (circle) of fixed diameter and position. For example:

R 100 -200,350; (roundflash command);

describes a circle of diameter 100 with center at (–200,350).

50

(–200,350)

The W (wire) command defines a wire with fixed width along a specified path. A wire can be described
as a long run of uniform width; ideally, the locus of points within one-half width of the given centerline
or path and one-half width of the endpoints (semicircular caps). For example:

W 40 0,0 0,100 100,100; (wire command);

L-Edit 14 User Guide Section 1 160


Chapter 5: Importing and Exporting Files CIF File Formatting

describes a wire of width 40 with centerline vertices at (0,0), (0,100), and (100,100).

(0,100) (100,100)

40

(0,0)
20

Layers

All primitive geometry elements must be associated with a particular fabrication mask or technology
layer. Layers are specified with the L (layer) command. Primitives created after an L command belong
to that layer until the layer is reset by the next L command. The form of the L command is:

L shortname; (layer command);

where shortname is the 1–4 character layer name. Layer names must be unique and correspond to
fabrication masks being constructed. You should therefore take care that the layer names you use accord
with the conventions established by your fabricator. The General tab of the Setup Layers dialog
correlates CIF layer names and technology layers; the CIF names are used instead of the L-Edit layer
names during the conversion of the design file into CIF. Layer names that do not conform to legal CIF
syntax must be modified before saving. Layer name specifications are preserved across symbol calls.

Layer names in the setup file must agree with the layer names of CIF files read in; otherwise, the
geometry information on the non-matching layers in the CIF file will be transferred to the Icon layer.
Your fabricator may apply additional restrictions and extensions to the CIF standard.

Fabrication Cell

One piece of information which must be supplied to your fabricator is the name of the cell which
represents the top level of your design. The fabricator will typically choose the top-level cell in your
design, if it is the only such cell. However, if you do not specify this information and your fabricator has
a choice about which cell to fabricate, the wrong one might be chosen.

L-Edit does not accept geometry other than CIF symbols. A CIF call (instance) to the top level of a
design is achieved by choosing Cell > Fabricate. Fabricate causes a CIF C command (or call to the
selected cell) to be created at the top level, effectively identifying that cell as the cell to be fabricated.
L-Edit only allows a single call outside of a symbol definition. If any rotations or transformations are
embedded in this outside call, L-Edit suppresses them when the file is read.

Warning: Once a fabrication cell has been chosen, it will remain the fabrication cell until a new one is chosen,
even if it ceases to be the top-level cell in your design. Be sure to check the fabrication cell before
writing a CIF file!

L-Edit 14 User Guide Section 1 161


Chapter 5: Importing and Exporting Files CIF File Formatting

Restrictions

L-Edit accepts forward references (symbol calls before the symbol definitions they reference), but
removes them during conversion of the design into CIF.

L-Edit does not support the CIF DD (delete symbol definition) command.

Extensions

L-Edit supports two user extensions to the basic CIF syntax. The first extension is a cell name extension
of the form:

9 cellname;

where cellname is the name of the currently open CIF symbol. This command can only appear within
the context of an open symbol (between a DS/DF command pair). The cell name may contain spaces
and must be terminated with a semicolon. Duplicate, zero-length, and null cell names are not permitted.

If a CIF file does not define cell names for CIF symbols, then L-Edit automatically assigns as the cell
name the expression:

(DS nnn)

where nnn is the CIF symbol number. This definition is suppressed when the CIF file is written out.
You should therefore avoid naming cells with this syntax, or else the name will be suppressed during
CIF file conversion. L-Edit reads out-of-order cell numbers, but always orders cells by number while
writing out the design in CIF.

The second user extension is a port extension of the form:

94 portname width height center_x center_y layer;

where portname is the name of the port (label), x and y are the coordinates of the port, and layer is the
name of the port’s layer. This is a relatively standard port or label user extension to CIF. However, it is
not as flexible as L-Edit’s definition of a port. An L-Edit port can be a point, a line, or a box, and the
text can be rotated in a variety of ways; this CIF user extension can only represent a single point, with
no information on the position or rotation of the associated text. When L-Edit writes a port into a CIF
file, it computes the centerpoint of the port and records this in the CIF file as the position of the port.
You can preserve the box associated with the port in CIF as written by L-Edit by unchecking the Export
rectangular ports as center points option in the dialog. This results in the use of nonstandard notation
for ports, and other software tools may not be able to read this form of CIF.

Wires in CIF

CIF was developed at a time when masks were usually created by Gerber photoplotters. Such plotters
could make wires by opening a circular aperture and moving it along a pathway. The resulting wire
would therefore have rounded corners and ends. This fabrication method gave rise to the CIF
specification for rounded wires. However, present-day mask making is almost entirely raster-based, and
thus has a strong affinity toward orthogonal structures.

Many fabricators assume CIF wires to have extended wire end styles with mitered corners. Thus to
adhere to the fabricators’ implementation of wires, all your CIF wires should be of extend end style and
layout join style. Fabricators such as MOSIS and Orbit often run CIF and GDSII files through a
high-end program called CATS, which is used to produce formats for specific mask-making equipment
from both those layout file formats. CATS uses its own clipping algorithm for acute angle CIF wires

L-Edit 14 User Guide Section 1 162


Chapter 5: Importing and Exporting Files GDSII File Formatting

and GDSII paths with a pathtype of 0 or 2. This algorithm corresponds exactly with the L-Edit wire
layout join style (the default), which employs a miter length of one-half the width of the wire for wires
with an acute join angle. You should check with your fabricator concerning the exact method of
fabrication used for wires before using wires in your layout.

Scaling

Apart from the user-selectable scaling of L-Edit internal units, L-Edit incorporates an implicit scaling
factor while writing CIF files. Due to the manner in which geometric objects are represented in CIF, it is
necessary for L-Edit to apply an implicit multiplication factor of two to all geometry as it is written out
to CIF. The reason for this scaling is that CIF represents boxes with integer length, width, and center
coordinates. L-Edit, however, can create boxes with fractional center coordinates: a box of width and
length 3 with lower left corner at (0,0) has its center at (1.5,1.5), for example. L-Edit circumvents this
problem by multiplying all coordinates by two when writing a CIF file. The same box, after being
written out to a CIF file, would have a length and width of 6 and be centered at (3,3). L-Edit
incorporates this multiplication by 2 into the scaling factors recorded in the CIF file, so that when the
file is read in by a CIF reader it is scaled correctly.

GDSII File Formatting

GDSII stream format is a binary file format for interchanging mask geometry information between
different IC CAD systems. The L-Edit implementation of GDSII file reading and writing conforms to
the Calma Stream Format, GDSII release 6.0, with some limitations. GDSII files are typically saved
with the .gds extension.

A GDSII file may contain a single design or a library of designs. GDSII assumes right-handed
geometry, with the x-axis increasing to the right and the y-axis increasing upward. The basic unit is set
to the GDSII default (user unit = 1 micron and 1000 database units per user unit).

Most L-Edit elements have a one-to-one correspondence with elements of GDSII stream files. GDSII
last access time information is not supported by L-Edit. L-Edit circles are approximated by GDSII
polygons. L-Edit cell names may be modified on export to GDSII.

L-Edit 14 User Guide Section 1 163


Chapter 5: Importing and Exporting Files GDSII File Formatting

GDSII Properties

The GDSII properties of objects may be examined, edited and removed by first selecting the object(s)
and using Tools > Add-Ins > Add/Edit GDS Properties (shortcut Alt+P).

Use the Add button to enter the Attribute and Value of a property

The Delete button deletes the highlighted property, Delete All deletes all properties assigned to an
object.

Use Tools > Add-Ins > Display GDS Properties to show the properties in layout and
Tools >Add-Ins > Remove GDS Property Labels to hide displayed properties.

GDS properties are supported and transferred for any instance, box, polygon, wire, circles, pie wedge,
and torus.

Circles, pie wedges and tori are automatically converted to polygons when GDS mask data is exported,
using the manufacturing grid. (Refer to “Converting Objects to Polygons” on page 198 and “Snapping
Objects to the Manufacturing Grid” on page 186 for a description of how curves are converted.

L-Edit 14 User Guide Section 1 164


Chapter 5: Importing and Exporting Files GDSII File Formatting

Warning: If you plan to export to GDSII format, it is best to “Display curves using manufacturing grid” (page
81) in the layout rather than as smooth curves.

GDSII Naming

The table below shows the correspondence between L-Edit elements and their GDSII names. GDSII
data types for L-Edit boxes, wires, and polygons can be viewed and edited in the Edit Object(s) dialog
with Edit > Edit Object(s).

L-Edit GDSII

File Stream file


Cell Definition Structure
Box Boundary *
Box ** Box
Polygon Boundary
Wire Path
Circle Boundary
Instance SRef
Array ARef
Port Text
Data type Data type

* L-Edit boxes are written to GDSII files as 4-sided boundaries (polygons). When reading boundaries from a GDSII file, L-Edit
checks each one to see if it is a 4-sided orthogonal polygon, and if so, represents it as an L-Edit box.

** GDSII boxes are not intended to be mask geometry and are generally discarded by mask-making software. If L-Edit
encounters GDSII boxes while reading a GDSII file, a dialog is presented with two options: discard all GDSII boxes or convert
them to L-Edit boxes (mask geometry).

GDSII allows only the following restricted set of characters in cell names. “a” … “z”, “A” … “Z”, “0”
… “9”, underscore “_”, question mark “?”, and dollar sign “$”. L-Edit cell names may include a fuller
set of characters, some of which would be illegal in GDSII. Therefore, L-Edit checks each cell name
before writing it out to a GDSII file. If any spaces “ ” are found, L-Edit replaces them with underscores
“_” in the GDSII file. If any other illegal characters are found, L-Edit will replace them with
underscores and write a message to the GDS log.

Some GDSII systems do not recognize lower case letters in cell names. For interfacing with these
systems, L-Edit provides the capability to write all cell names to a GDSII file in upper case. This option
is enabled by selecting Upper case in the Cell names box in the Export GDS dialog.

GDSII Date Formats

The GDSII format allows for the year to be stored in one of three formats:

ƒ current year (e.g. 103 representing the year 2003)


ƒ full representation (e.g., 1999)

L-Edit 14 User Guide Section 1 165


Chapter 5: Importing and Exporting Files GDSII File Formatting

ƒ last two digits of the year (e.g., 32 representing the year 2032 or 1932)

When a year is read from a GDSII file, it may need to be modified to represent the correct year,
depending on which date format is used. The current year format is the default. If the last two digits of
the year is detected during GDSII import, L-Edit will use the algorithm shown below to modify the date
that was read.

ƒ for years less than 60, add 2000 to the year


ƒ for years greater than or equal to 60 or less than or equal to 1960, add 1900 to the year
ƒ for years greater than 60, do not modify the year

This approach will handle all three date formats until the year 2060.

GDSII Shape Definition

Warning: GDSII does not contain a specification for circles. Therefore, L-Edit approximates circles using
64-sided polygons. Thus, circles are not preserved when a GDSII file is written and read back in.

L-Edit supports all-angle rotations of instances and 90° rotations of text.

L-Edit treats four-sided polygons as boxes. If you export, then reimport, a design that contains
four-sided polygons that are orthogonally oriented rectangles, L-Edit will convert them into boxes. For
the purposes of fabrication, there may be no difference between a box and its equivalent polygon.

Many different versions of GDSII readers and writers exist. Some newer versions produce elements
which are not compatible with older versions of GDSII. The elements in L-Edit are confined to
elements which are common to all.

GDSII Data Type

GDSII layers are identified by the GDSII number assigned to that layer or, alternately, by the
combination of the assigned GDSII number and GDSII data type. You can use this data type in
conjunction with the GDSII layer number to overcome the 64-layer limitation in the GDSII database.

The GDSII specification indicates that the GDSII layer number and GDSII data type should have a
range of 0 to 255. However, L-Edit supports non-standard GDSII layer number and GDSII data type
values in the range of -32,768 to 32,767 for compatibility with other tools that are able to output
numbers outside the 0-255 range. L-Edit will write a warning to the log file during import and export
indicating that the GDSII file that was read or written does not adhere to the GDSII Stream
Specification.

Assigning Data Types

Use Setup > Layers—General to assign a data type to a layer, Edit > Edit Object to assign a data type
to an object, or Draw > Assign GDSII Data Types to propagate a layer’s data type value to all objects
on that layer.

When you assign a GDSII data type to a layer, all objects subsequently drawn on that layer will acquire
that data type. If you subsequently change the data type for a layer, however, the new data type will only
be applied to objects drawn after the change.

L-Edit 14 User Guide Section 1 166


Chapter 5: Importing and Exporting Files GDSII File Formatting

If you merge intersecting objects with different GDSII data types, L-Edit replaces their respective data
type values with the data type for the layer (or 0 if no data type is set for the layer) without a warning.

To propagate a layer’s data type value to all objects currently drawn on that layer, use Draw > Assign
GDSII Data Types, shown below.

This command propagates the data type for a layer to all objects on that layer, overwriting any current
values, for all layers in a design. You can perform this operation for the active file or all open files.

Wires in GDSII

The GDSII layout format allows for three different types of wires (paths), each with a unique pathtype
value:

ƒ pathtype 0: butt ends and square corners (corresponds to L-Edit Round end style with Round join
style)
ƒ pathtype 1: round ends and round corners (corresponds to L-Edit Butt end style with Layout join
style)
ƒ pathtype 2: extended ends and square corners (corresponds to L-Edit Extend end style with Layout
join style)

These GDSII pathtypes correspond directly to three of the twelve possible L-Edit wires. When reading
GDSII files, L-Edit sets wire end styles and join styles to match the three GDSII pathtypes. When
creating GDSII output, L-Edit assigns a GDSII pathtype according to the following table. When the end
styles and join styles do not correspond exactly to a GDSII pathtype (indcated in the table with an
asterisk), L-Edit will provide a warning message.

End style Join style GDS II pathtype

Butt Layout 0
Butt Miter 0*
Butt Round 0*
Butt Bevel 0*
Round Layout 1*
Round Miter 1*
Round Round 1
Round Bevel 1*
Extend Layout 2

L-Edit 14 User Guide Section 1 167


Chapter 5: Importing and Exporting Files GDSII File Formatting

End style Join style GDS II pathtype

Extend Miter 2*
Extend Round 2*
Extend Bevel 2*

Many fabricators such as MOSIS and Orbit run GDSII files through CATS (a high-end program used to
produce formats for specific mask-making equipment from GDSII layout files). CATS uses its own
clipping algorithm for acute angle GDSII paths with a pathtype of 0 or 2. This algorithm corresponds
exactly to the L-Edit layout wire join style, the default wire join style. Layout join style employs a fixed
miter length of one-half the width of the wire for wires with an acute join angle.

When you are about to use wires for the first time or you are setting up the technology files for others
who may use wires, take a moment to set up the wire defaults for each layer according to whether your
likely output format will be GDSII. For GDSII, use one of the three legitimate combinations of end
style and join style. It is also strongly recommended that you contact your fabricator before you define
the wire styles for your design to understand how they will interpret GDSII wires.

Ports and Port Text

L-Edit uses the default port text size as a reference during import and export. On export, L-Edit
calculates the ratio between the default text size and a port’s actual text size and writes that value to the
GDSII file. On import, it determines the absolute text size for a given port by multiplying the default
port text size by the magnification factor in the GDSII file.

To change the text size of ports in exported GDSII files, decrease or increase the default port text size
prior to exporting the design, using Setup > Design—Drawing (see “Drawing Parameters” on page 84)
or “Resizing Port Text” (page 168), below.

To change the text size of ports in a design imported from GDSII, modify the default port text size in the
setup file before importing the design from GDSII.

Resizing Port Text

The Tools > Add-Ins > Text Resize command works on all ports within the active TDB file to either
scale the text size or set the text size to a specific size.

Scale Text Scales port text size. The default value is 50%. Scale values less than
100 decrease the text size; values above 100 increase the text size.

L-Edit 14 User Guide Section 1 168


Chapter 5: Importing and Exporting Files GDSII File Formatting

Fixed Size Enter a port text size in locator units. The default value is the default
text size for the active TDB file.
Statistics Displays the minimum, average, and maximum port text sizes used in
the active file.

To add text as a drawn element of a cell, please see “Adding a Copyright, Logo or Text to a File”
(page 142).

L-Edit 14 User Guide Section 1 169


6 Drawing and Editing Objects

Object Types

The basic task in designing layout is drawing objects, which represent the elements and patterns of the
circuitry to be fabricated.

There are several types of objects you can draw. Each object type is associated with a tool on the
Drawing toolbar which you use to draw the corresponding object.

Object type Icon Description

Box A shape characterized by four 90° corners.

Polygon A shape characterized by an arbitrary number of


vertices connected by straight edges to form a
closed (possibly self-intersecting) figure.
Wire A shape consisting of one or more rectangular
segments, of equal width, joined at common ends.

Circle A shape characterized by a center (point) and a


radius.

Pie Wedge A section of a circle characterized by a center, a


radius, and a sweep angle.

Torus A section of a circle characterized by a center,


two radii (inner and outer), and a sweep angle.

Port A point or box with associated text, used to label


layout for documentation purposes.

Ruler A line with a choice of end styles and optional


tick marks, used to measure layout.

Instance A symbolic representation of a cell at a specific


location and orientation in another cell. For
information on how to create an instance, see
“Creating Instances” on page 283.

L-Edit 14 User Guide Section 1 170


Chapter 6: Drawing and Editing Objects Selecting a Layer

Selecting a Layer

Before you draw an object, you must select a layer. When a layer is selected, the layer icon in the
Compact Layer palette is outlined, and the name of the layer appears at the top of the Layer Palette. (See
“Layer Palettes” on page 49.) Any objects you create during a draw operation will be on the selected
layer and will display the color and pattern specified for that layer.

You can select a layer in three ways:

ƒ Click an icon or pick a layer from the drop-down list in the Compact Layer palette.
ƒ Select the desired layer from the list in the Layer palette.
ƒ Choose Draw > Pick Layer (shortcut key A) to change the current layer to the layer of the object
which the cursor is over, whether instanced geometry or not and regardless of any object selected.

After you specify a layer, drawing an object involves two basic steps: (1) selecting a drawing tool and
(2) executing a drawing operation.

Selecting a Drawing Tool

To select a drawing tool, click on a button in the Drawing toolbar. You will remain in the same drawing
mode until you select another tool.

Selecting Angle Constraints for Drawing Tools

You can limit the range of tools displayed in the Drawing toolbar to match your design, either by
right-clicking in the Drawing toolbar, or using the Drawing mode field in Setup > Application—
General to choose Orthogonal, 45 Degrees, All Angle or All Angle & Curves.

L-Edit 14 User Guide Section 1 171


Chapter 6: Drawing and Editing Objects Drawing Objects

Changing Constraints while Drawing or Editing

You can use hot keys to temporarily change the drawing mode while in any drawing or editing mode.

ƒ Press and hold the Shift key to constrain drawing and editing to 45-degree movement.
ƒ Press and hold the Ctrl key to constrain drawing and editing to 45-degree movement.
ƒ Press and hold Ctrl + Shift to allow all-angle drawing and editing.

Drawing Objects

The starting point for drawing any object is its anchor point. To draw an object, select a drawing tool
and position the crosshair pointer where you want the anchor point to be. Click the DRAW (left) mouse
button to begin drawing the object.

Note that in order to draw circles or other curves, you must set the Drawing toolbar to All Angle &
Curves.

While you are drawing or editing an object you can toggle rendering of that object from filled mode to a
transparent outline-only mode so that the objects below remain visible. Use the Tab key (or Ctrl+I) to
perform this toggle. (See “Displaying Instance Insides While Drawing and Editing” on page 116 for
more information.)

Note that you cannot draw on a layer that is locked.

Boxes

The anchor point is one of the corners of the box.

Hold the DRAW mouse button and drag the pointer away from the anchor point to determine the
opposite corner (and therefore the length and width) of the box. Release the DRAW button at the
desired opposite corner.

For information on editing boxes textually, see “Edit Object(s)—Boxes” on page 209.

Circles

The anchor point is the center of the circle.

Hold the DRAW mouse button and drag the pointer away from the anchor point to determine the radius
of the circle. Release the DRAW button at the desired radius.

For information on editing circles textually, see “Edit Object(s)—Circles” on page 215.

Pie Wedges

The anchor point is the center of the pie wedge. The mouse buttons become VERTEX, BACKUP, and
END, respectively.

To create a pie wedge, click the VERTEX (left) mouse button at the anchor point and drag the pointer
away from the anchor point to determine the radius of the pie wedge (indicated by a thin line). Click or

L-Edit 14 User Guide Section 1 172


Chapter 6: Drawing and Editing Objects Drawing Objects

release the VERTEX mouse button at the desired radius. Drag the pointer again to determine the end
angle of the pie wedge. The angle is always calculated counterclockwise. Click the VERTEX or END
(right) mouse button to complete the pie wedge. Click the BACKUP mouse button to reverse each step
before the pie wedge is completed.

For information on editing pie wedges textually, see “Edit Object(s)—Pie Wedges” on page 216.

Tori

The anchor point is the center of the torus. The mouse buttons become VERTEX, BACKUP, and END
respectively.

To create a torus, click the VERTEX (left) mouse button at the anchor point and drag the pointer away
from the anchor point to determine the first radius of the torus (indicated by a thin line). Click or release
the VERTEX mouse button at the desired first radius. Drag the pointer again to determine the sweep
angle and the second radius of the torus. Click the VERTEX or END (right) mouse button to complete
the torus. Click the BACKUP mouse button to reverse each step before the torus is completed.

For information on editing tori textually, see “Edit Object(s)—Tori” on page 217.

Polygons and Wires

The anchor point is the first vertex of the polygon or wire. Polygons and wires can have any number of
vertices. The mouse buttons become VERTEX, BACKUP, and END, respectively.

To create a polygon or wire, click the VERTEX (left) mouse button at the anchor point and drag the
pointer away from the anchor point to determine the second vertex. Repeat the process for each
successive vertex. Click the BACKUP mouse button to remove the last vertex that was placed.

Click the END mouse button at the last vertex to complete the object. When you click the END button,
coincident vertices (two or more vertices occupying the same location) and colinear vertices (three or
more vertices lying on the same straight line) are eliminated.

For information on wire styles see “End Styles and Join Styles” on page 98.

Warning: The appearance of a wire on the screen does not guarantee it will form a connection with an object when
the chip is fabricated. Check with your manufacturer regarding the type of join and end styles to use in
your design.

For information on wire style requirements for CIF and GDSII file formats see “Wires in CIF” on page
162 and “Wires in GDSII” on page 167, respectively. For information on editing polygons and wires
textually, see “Edit Object(s)—Polygons” on page 213 and “Edit Object(s)—Wires” on page 214.

Self-Intersecting Polygons and Wires

Two common design errors involve self-intersecting polygons and polygons with ambiguous fills.
Either can be misinterpreted by the manufacturer and result in an incorrect object mask.

L-Edit will display a warning when drawing or editing a polygon if the polygon intersects itself at any
point. The Fix option breaks up the polygon into multiple polygons at its self-intersecting points. A

L-Edit 14 User Guide Section 1 173


Chapter 6: Drawing and Editing Objects Drawing Objects

similar warning is displayed for self-intersecting wires. You can turn off these and other warnings with
Setup > Application—Warnings.

Self-Intersecting Polygons

An example of a self-intersecting polygon is shown below:

Ambiguous Fill Polygons

Certain types of self intersecting polygons result in an ambiguous definition of the filled area of the
polygon. An example of a polygon with an ambiguous fill is shown in the following illustration.

L-Edit 14 User Guide Section 1 174


Chapter 6: Drawing and Editing Objects Drawing Objects

Depending upon the manufacturer’s convention, the white enclosed box might or might not be filled
when fabricated.

ambiguous fill

Similarly, in the figure below the desired fill in the region of intersection cannot be determined
unambiguously.

ambiguous fill

L-Edit 14 User Guide Section 1 175


Chapter 6: Drawing and Editing Objects Drawing Objects

Winding Number

The areas of a self intersecting polygon can be classified by a winding number. In the illustration below,
each value represents the winding number—the number of times that a point in the polygon is
circumscribed when the figure is traced in one direction around its perimeter.

1
0 2
1
0 3
2
1

L-Edit interprets an area with winding number equal to zero as unfilled, an area with an odd winding
number as filled, and an area with an even number as unfilled. Polygons with a winding number greater
than or equal to two are identified as ambiguous polygons, since other CAD systems may interpret the
filled area differently.

Curves

Using an all-angle tool and the ARC mouse shortcut, you can convert an edge of an existing orthogonal,
45-degree, or all-angle polygon to a curved edge (the portion of a circular arc with endpoints at the two
vertices of the original edge). Boxes cannot be converted to curves.

This operation is only possible on existing polygons—you cannot directly draw a polygon with curved
edges. (See “Chamfers and Fillets” on page 178 for converting the shape of vertices.)

How to Convert a Straight Polygon Edge to a Curve

; Select the All Angle & Curves display mode.

; Using the SEL EDGES mouse button (Ctrl+LEFT), click to select a single edge of the polygon.

Note: To convert an edge to a curve, you must select only the edge of an object, not the
entire object. If you select the entire object, it is only possible to add a vertex to any of
its edges.

L-Edit 14 User Guide Section 1 176


Chapter 6: Drawing and Editing Objects Drawing Objects

; Using the ARC mouse button (Ctrl+MIDDLE or Alt+Ctrl+LEFT), drag the cursor to increase or decrease
the curvature of the arc.

Each curve is defined by a specific curve height, illustrated in the following section.

L-Edit 14 User Guide Section 1 177


Chapter 6: Drawing and Editing Objects Drawing Objects

Curve Height

curve height

chord

chord

Curve height is the perpendicular distance, in display units, between the chord that connects the two
endpoints of the curve and the midpoint of the curve. The curve height will be positive or negative
depending on the order in which the vertices of the polygon were created.

For more information about setting curve height and editing curves textually, see “Edit Object(s)—
Polygons” on page 213.

Chamfers and Fillets

A chamfer is a beveled edge connecting two surfaces. If the surfaces are at right angles, the chamfer
will typically be symmetrical at 45-degrees. Similarly, a fillet is a curved connection between two
surfaces, which is concave for an interior corner and convex for an exterior corner as shown below.

Chamfered edges Filleted edges

L-Edit 14 User Guide Section 1 178


Chapter 6: Drawing and Editing Objects Drawing Objects

First select an object, then use Draw > Curve Tools > Chamfer... or Draw > Curve Tools > Fillet... to
open the Chamfer/Fillet dialog.

Operation Select Chamfer or Fillet.


Type Select Vertex and then use the Pick button choose a single vertex of
the selected object.

Select Object to chamfer or fillet all vertices on the object.


Distance Enter a value (by default, in display units) of the perpendicular
distance between the endpoints of the chamfer or fillet.

(See “How the “Distance” Value Sets the Size of a Chamfer or Fillet,”
below).

How the “Distance” Value Sets the Size of a Chamfer or Fillet


The radius of a fillet (or the cut of a chamfer) is determined by the intersection, at two points, of the
polygon and a circle established by the Distance value.

On the polygon below, the Distance value along each edge of a vertex (A) intersects with the diameter
of a circle having a radius of the same Distance value (B) to create the fillet radius.

The 45-degree
polygon (bright green)
is the initial geometry.
B

A The curved polygon


A
(teal green) is the
result of the fillet
operation.
B
The red and gray
circles demonstrate
how the curve of the
fillet is set by the
distance value.

L-Edit 14 User Guide Section 1 179


Chapter 6: Drawing and Editing Objects Drawing Objects

Ports

A port can be a point, a line, or a two-dimensional box.

The anchor point is the location of the port. The anchor point of a point or line port is a corner of the
port.

To draw a point port, position the pointer at the anchor point and press the DRAW mouse button.

To draw a box port, hold the DRAW mouse button and drag the pointer away from the anchor point to
determine the opposite corner (and therefore the length and width) of the box. Release the DRAW
button at the desired location of the opposite corner.

To draw a line port, hold the DRAW mouse button and drag the pointer away from the anchor point in a
vertical or horizontal line. Release the DRAW button at the desired location of the opposite end of the
line port.

When you release the DRAW mouse button, the Edit Object(s)—Ports dialog opens and prompts you
for the Port name. At this point you can also modify other attributes of the port, including GDSII data
type, text size, coordinates, text orientation, and text alignment.

For more information on editing ports textually, see “Edit Object(s)—Ports” on page 218.

Persistent Rulers

The anchor point is one of the endpoints of the ruler. Hold the DRAW mouse button and drag the
pointer away from the anchor point to determine the other endpoint (and therefore the length and
orientation) of the ruler. Release the DRAW button at the desired endpoint.

You can draw rulers on a dedicated special layer or on any other layer. To modify default ruler settings
including the layer on which rulers are drawn, text size, end style, and tick mark settings, use
Setup > Design—Drawing.

For information on editing rulers textually, see “Edit Object(s)—Rulers” on page 220.

Temporary Rulers
L-Edit provides a tempory ruler that can be used with any drawing tool. The temporary ruler measures
in any angle and direction allowed by the current drawing tool, starting at the cursor location when it is
activated. Temporary rulers will respond to the key controls Shift to force 90° drawing, Ctrl to force 45°
drawing and Ctrl+Shift to force all-angle drawing.

Use the t key to initiate the temporary ruler. The left mouse button ends measurement and retains the
ruler display. The right mouse button ends measurement and erases the ruler.

You can use Toggle Markers on the Verification Navigator toolbar to toggle display of temporary
rulers and Clear Markers to erase temporary rulers.

There is a Temporary rulers text height field in Setup > Application—Rendering where you can set
the text size for temporary rulers.

L-Edit 14 User Guide Section 1 180


Chapter 6: Drawing and Editing Objects Editing Objects

Editing Objects

You can edit objects graphically, using your keyboard and mouse. You can resize and reshape objects,
perform stretch editing, add vertices to polygons or wires, and slice, merge, or nibble objects.

Drawing in Outline Mode

While you are drawing or editing an object you can toggle rendering of that object from filled mode to a
transparent outline-only mode so that objects below remain visible. Use the Tab key or Ctrl+I to
perform this toggle. (See “Displaying Instance Insides While Drawing and Editing” on page 116 for
more information.)

Resizing and Reshaping

You can resize a box, port, or polygon by moving a vertex or an edge to change the object’s dimensions.
You can resize a circle by dragging its edge towards or away from the center, which changes the radius.
You can resize a wire by selecting a wire edge and dragging it; you can add vertices to a wire by
selecting it and choosing Draw > Add Wire Section. To change the width of a wire, however, you must
use the Edit Object—Wire dialog (see “Editing Objects Using Text and Data Values” on page 206).

To resize or reshape an object, position the pointer on or near a vertex or edge. Click the MOVE/EDIT
mouse button and drag the vertex or edge to the desired position.

For implicit editing, the distance between the cursor and the edge or vertex of an object determines
which operation, MOVE or EDIT, will be performed. You set this distance using the Edit range fields
in the with Setup > Design—Selection dialog.

If no other objects are selected, clicking the MOVE/EDIT (middle) mouse button within the selection
range of an object will implicitly select it. If you implicitly select an object it is automatically deselected
after the operation. For explicit selection, you can set whether an entire edge needs to be enclosed, or
just a part of it, using Setup > Application—Selection. (See “Selecting Objects” on page 275 for
settings.)

Holding the Shift key after starting a MOVE/EDIT mouse button forces the operation to be orthogonal,
where edges can only be moved in the horizontal or vertical directions.

Editing Multiple Objects Simultaneously

You can resize or reshape one or more boxes, polygons, wires, pie wedges, tori, or ports simultaneously
by selecting and moving sets of their edges.

Select the edges of the desired objects. To modify the selected objects, drag the edges in the desired
direction with the MOVE/EDIT mouse button. All selected edges and objects will move the same
direction and distance, subject to any constraints imposed by the objects themselves.

Adding Vertices

You can add vertices to all-angle polygons or wires after you create them. To add a vertex, select the
object and position the pointer on the edge where you want the new vertex to be. Hold Ctrl+the
MOVE/EDIT mouse button while dragging the new vertex into position.

L-Edit 14 User Guide Section 1 181


Chapter 6: Drawing and Editing Objects Editing Objects

Pie Wedges and Tori

When you use the mouse to reshape and resize a pie wedge or torus, you can change the sweep angle or
the radii. To change the sweep angle, position the pointer on one straight edge of the selected object,
click the MOVE/EDIT mouse button and drag the mouse in the desired direction. To change the radii,
place the pointer on the curved edge and drag it to the desired position. You can change either radius of
a torus.

Object Snapping

During drawing, moving or editing, you can use object snapping to “snap” the mouse to a specific area
on layout objects.

L-Edit will snap to locations down the hierarchy on unmerged geometry. L-Edit will not snap to hidden
geometry such as a hidden layer or an instance with its inside hidden.

The small black square on the


upper right corner of the blue
rectangle shows that
snapping is on, and set to
vertex snapping.

L-Edit 14 User Guide Section 1 182


Chapter 6: Drawing and Editing Objects Editing Objects

Object Snap Setup

Object snap options are set in the Setup > Design—Object Snap dialog.

Enable Object Snapping Enables or disables object snapping. When disabled, no object
snapping will occur regardless of the individual snap state.
Vertex Vertex snapping - Snaps the mouse to vertices of boxes, polygons,
wire centerlines, pie wedges, tori, and port boxes. During a drawing
or editing command, this snap mode can be toggle by pressing
Shift+V.

Midpoint Midpoint snapping - Snaps the mouse to the midpoint of edges of


boxes, polygons, wire centerlines, pie wedges, tori, and port boxes.
During a drawing or editing command, this snap mode can be toggle
by pressing Shift+D.
Edge (or wire centerline) Edge snapping - Snaps the mouse to nearest point on the edge of
boxes, polygons, wire centerlines, pie wedges, tori, and port boxes.
During a drawing or editing command, this snap mode can be toggle
by pressing Shift+E.
Center Center snapping - Snaps the mouse to the center of circles, boxes,
pie wedges, tori, and curved edges of polygons. During a drawing or
editing command, this snap mode can be toggle by pressing Shift+C.

L-Edit 14 User Guide Section 1 183


Chapter 6: Drawing and Editing Objects Editing Objects

Quadrant Quadrant snapping - Snaps the mouse to nearest quadrant on a


curved edge of circles, pie wedges, tori, and curved polygons.
Pin Pin snapping - Snaps the mouse to nearest point on the edge of
boxes, polygons, wire centerlines, pie wedges, tori, and port boxes.
During a drawing or editing command, this snap mode can be toggle
by pressing Shift+T.
Instance Instance snapping - Snaps the mouse to nearest point on the edge of
boxes, polygons, wire centerlines, pie wedges, tori, and port boxes.
During a drawing or editing command, this snap mode can be toggle
by pressing Shift+S.
Move cursor to snap point When this option is enabled, the mouse cursor will move to or snap to
the snap location if the cursor moves within an area the size of the
marker for that snap location.
Aperture Size Aperture Size is the area of influence of a snap location. When you
move the mouse cursor within an area the size of the aperture, the
cursor will snap to that location. Increasing the Aperture Size will
will allow you to be further away from the snap location to snap to it.
Instance MBB Snaps instances to their MBB—the minimum bounding box of all
objects in the cell of the instance. See also “Bounding Box and
Snapping Options” on page 188.
Abut MBB-MBB of objects Snaps instances to the instance’s abutment bounding box, which is the
on the Icon layer MBB of all objects in the cell of the instance on the Icon/Outline
special layer. The abutment bounding box is useful when snapping to
overlap markers in cells. See also “Minimum and Abutment
Bounding Boxes” on page 188.
Offset Offsets the snap location by the specified amount. This can be used to
snap by an overlap amount. For example, if the offset set is set to 0.15
0.15, L-Edit will snap to a snap location (i.e. vertex) plus an extra
0.15 in the x direction and extra 0.15 in the y direction.

Display Markers Displays the context sensitive snap markers while the user is drawing,
selecting, or editing.
Auto Sets the color of the markers to be the last color in the color palette for
the active design file, with a one pixel halo in the first color in the
color palette. (Usually this results in black being used as the marker
color.)
Pick Color... Sets the color of the markers.
Marker Size Sets the size of the markers in pixels.

L-Edit 14 User Guide Section 1 184


Chapter 6: Drawing and Editing Objects Editing Objects

Object Snap Toolbar

Most of the object snapping commands can also be enabled or disabled using the Object Snap toolbar.

Toolbar Marker Description and Default shortcut


button Symbol

Vertex snapping
Shift+V.

Midpoint snapping
Shift+D.

Edge snapping
Shift+E.

Center snapping
Shift+C.

Quadrant snapping - Snaps the mouse to nearest quadrant on a


curved edge of circles, pie wedges, tori, and curved polygons.

Pin snapping
Shift+T.

instance snapping
Shift+S.

Toggles between Instance MBB and Abut MBB

Enable Object Snapping


Alt+S or F9.

Setup Object Snapping - opens the Object Snap tab of


Setup > Design so you can change object snapping options. (See
“Object Snap Setup” on page 183.)

Object Snap Shortcut Keys


Setup Application > Keyboard > Draw > Enable Object Snap assigns a shortcut key that turns on or
off specific object snap types, or all object snapping.

Pressing the assigned shortcut key will work even during a draw, edit or move operation. If snapping is
on, for example, you can temporarily turn it off while in the middle of drawing one polygon to place a
vertex within the aperture of another polygon. The toolbar is always updated to show the current snap
state.

L-Edit 14 User Guide Section 1 185


Chapter 6: Drawing and Editing Objects Editing Objects

Order of Preference in Snapping


When multiple snap points exist within the aperture, the order of precedence for where snapping will
occur is as follows:

Box

[1]Vertex
[2]Midpoint
[3]Center
[4]Edge

Polygon

[1]Vertex
[2]Midpoint
[3]Edge

Wire

[1]Vertex of the wire’s centerline


[2]Midpoint of the wire’s centerline
[3]Edge of the wire’s centerline

Circle

[1]Center
[2]Quadrant

Pie Wedge, Torus, or Curved Polygon

[1]Vertex
[2]Midpoint
[3]Quadrant
[4]Center
[5]Edge

Port

[1]Pin - Center of the port box


[2]Vertex - Vertex of a port box
[3]Midpoint - Midpoint of a port box

Instance

[1]Endpoint
[2]Midpoint
[3]Instance boundary or origin

Snapping Objects to the Manufacturing Grid

You can snap the vertices and other control parameters of objects to the Manufacturing Grid using
Draw > Convert > Snap to Manufacturing Grid. Snapping to the manufacturing grid does not change
the type of an object.

Draw > Convert > Snap to Manufacturing Grid


ƒ Vertices of boxes, polygons, ports, and rulers are snapped to the manufacturing grid.
ƒ Vertices on wire centerlines are snapped.

L-Edit 14 User Guide Section 1 186


Chapter 6: Drawing and Editing Objects Editing Objects

ƒ Instance origins are snapped, and array delta values are snapped such that the origin of array
elements are on the manufacturing grid.
ƒ The curve height of curved segments of polygons are snapped to an integer multiple of the
manufacturing grid, and the radius of pie wedges and tori are snapped to an integer multiple of the
manufacturing grid.
ƒ The center of a circle is snapped to the manufacturing grid, and the radius is snapped to an integer
multiple of the manufacturing grid.

(See also “Grid Parameters” on page 79 and “Multigrid Toolbar” on page 81.)

Snapping to the manufacturing grid is an effective way to remove vertices from polygons with very
high resolution of vertices, while still maintaining the shape of the original polygon. The snapped
polygon will not deviate from the original polygon by more than the snap grid.Alternately, polygons
with too many vertices can be fractured into several smaller polygons with fewer vertices (see
“Fracturing Polygons” on page 202.)

Aligning and Distributing Objects

You can align, distribute, or tile objects using the alignment commands from either the menu or the
Alignment toolbar.

L-Edit 14 User Guide Section 1 187


Chapter 6: Drawing and Editing Objects Editing Objects

Bounding Box and Snapping Options

Use Draw > Align > Options to set basic parameters for the alignment, distribution and tiling
operations.

Bounding Box for Controls how instances are selected for aligning, tiling, or distributing
instances (see “Minimum and Abutment Bounding Boxes,” below).
ƒ Minimum bounding box—use the minimum bounding box of all
objects in the cell.
ƒ Abutment bounding box—use the minimum bounding box of
all objects in the cell on the Icon special layer.
Alignment done relative to Controls which set of objects are included in the MBB that acts as the
point of reference for alignment operations.
ƒ MBB of selected objects—use the MBB of the currently
selected objects.
ƒ Last selected object—use the MBB of the last selected object.

Snap alignment point & When checked, prevents objects from be placed off-grid. All
distribution distance alignment points and distribution distances will be snapped to either
the Manufacturing grid or the Mouse snap grid.

Minimum and Abutment Bounding Boxes


For alignment, tiling, and distributing, you have the option to use either the minimum bounding box
(MBB) of all objects in the cell or the abutment bounding box which is the MBB of all objects in the

L-Edit 14 User Guide Section 1 188


Chapter 6: Drawing and Editing Objects Editing Objects

cell on the Icon/Outline special layer. The abutment bounding box is useful when tiling standard cells
that need to be overlapped.

Minimum Bounding Box Cell MBB Abutment Bounding Box

box on
Icon/Outline
layer

Alignment Commands

Align Left - Aligns the left edge of objects to the left edge of the bounding box (MBB) of the
selected objects or the left edge of the last selected object.

Align Horizontal Centers - Aligns objects vertically to the center of the MBB of the selected
objects or the center of the last selected object.

L-Edit 14 User Guide Section 1 189


Chapter 6: Drawing and Editing Objects Editing Objects

Align Right - Aligns objects to the right edge of the MBB of the selected objects or the right edge
of the last selected object.

Align Horizontal Centers

Align Left Align Right

Align Vertical and Horizontal Centers- Aligns the horizontal and vertical centers of objects to the
center of the MBB (of either the selected objects or the center of the last selected object).

after—centers aligned

before

L-Edit 14 User Guide Section 1 190


Chapter 6: Drawing and Editing Objects Editing Objects

Align Tops - Aligns objects to the top edge of the MBB of the selected objects or the top edge of
the last selected object.

Align Vertical Centers- Aligns objects horizontally to the center of the MBB of the selected
objects or the center of the last selected object.

Align Bottoms - Aligns objects to the bottom edge of the MBB of the selected objects or the
bottom edge of the last selected object.

Distribution Options

The anchor of a distribution operation is determined by the objects having a MBB with the least x value
and then the objects having a MBB with the least y value. If two or more objects have the same
minimum x or y value for their MBB, the largest of these objects is given the left most or bottom most
position.

If two or more objects have the same minimum x or y value for their MBB and are the same size, the
object whose layer is highest in the layer list is selected for the left most or bottom most position

Distribute Distance Distance—Spaces the objects by a specific amount.

L-Edit 14 User Guide Section 1 191


Chapter 6: Drawing and Editing Objects Editing Objects

Minimum distance between objects—Spaces the objects by the


minimum distance or pitch between all objects.
Maximum distance between objects—Spaces the objects by the
maximum distance or pitch between all objects as the value to space
the objects.
Average distance between objects—Spaces the objects by the
average distance or pitch between all objects as the value to space the
objects.
Distance between the first two left/bottom objects—Spaces the
objects by the distance or pitch between the two objects that are the
left most, bottom most objects.
Distribute by Pitch—Evenly spaces the center of the objects’ MBB
Edge to Edge—Evenly spaces the outside edge to outside edge of the
objects’ MBB. (See illustration that follows.)

Distribution Commands

Distribute Horizontally - Equally spaces all objects horizontally starting with the left most, bottom
most object. When you run this command, a dialog will appear asking how you want to space the
objects. No alignment is performed on the distributed objects.

L-Edit 14 User Guide Section 1 192


Chapter 6: Drawing and Editing Objects Editing Objects

Distribute Vertically - Equally spaces all objects vertically starting with the left most, bottom most
object. When you run this command, a dialog will appear asking how you want to space the objects. No
alignment is performed on the distributed objects.

Tiling Options

Objects for tiling are sorted into rows and columns according to a MBB around them. For two objects to
be on the same row, the midpoint of each object has to be within the MBB of the other object. In the
example below, the midpoint of the central blue box is above the MBB of the lower green and red box,
so it will be on the second row.

Row 3

Row 2

Row 1

L-Edit 14 User Guide Section 1 193


Chapter 6: Drawing and Editing Objects Editing Objects

Tile Commands

Tile Horizontally - Tiles or stacks the objects horizontally so that each objects is next to each other
with the bottom of their MBB’s aligned. For sorting order, see Distribute Horizontally.

Tile Vertically - Tiles or stacks the objects vertically so that each objects is next to each other with
the bottom of their MBB’s aligned. For sorting order, see Distribute Horizontally.

Tile as a 2D Array - Tiles or stacks the objects horizontally so that each objects is next to each
other with the bottom of their MBB’s aligned.

Slicing

Divide selected objects along a horizontal line by choosing Draw > Slice > Horizontal or clicking the
horizontal slice button ( ). Divide selected objects along a vertical line by choosing
Draw > Slice > Vertical or clicking the vertical slice button ( ).

Note: Ports, rulers, and instances cannot be sliced. If you select objects of these types,
L-Edit ignores them during a slice operation.

L-Edit 14 User Guide Section 1 194


Chapter 6: Drawing and Editing Objects Editing Objects

Divide selected objects along a line at any angle by choosing Draw > Slice > All Angle, then specify the
slice line in the dialog.

You can specify the slice line for an all-angle slice by either specifying two points on the line, or by
specifying one point and an angle. To slice using two points, select Point1 and Point 2 in the Slice
dialog, to slice using one point and an angle, select Point 1 and the desired angle.

When you execute a slice command, the view automatically zooms to include all selected objects and a
horizontal or vertical line appears, indicating where to slice (divide) the objects. The line moves with
the pointer until you place it by clicking any mouse button, at which time each object splits into two
new objects with coincident edges.

Note: When slicing, circles, pie wedges, tori, and curved polygons are approximated by an
all-angle polygon within a tolerance given by the Manufacturing Grid, see “Grid
Parameters” on page 79.

Nibbling

To nibble, or cut out, an area from selected objects in the active cell, perform the following steps:

; Select the desired objects. They may be on multiple layers.

; Select the drawing tool to use for nibbling.

; Choose Draw > Nibble, press Alt+X, or click the nibble button ( ) to draw the shape to nibble from
the selected objects. An area equal to the shape is deleted from the objects.

You can only nibble certain objects. These are the same objects you can use as a nibbling tool. These
objects are:

ƒ Box
ƒ 90°, 45°, all-angle, and curved polygon
ƒ 90°, 45°, and all-angle wire
ƒ Circle
ƒ Pie Wedge
ƒ Torus

L-Edit 14 User Guide Section 1 195


Chapter 6: Drawing and Editing Objects Editing Objects

L-Edit ignores attempts to nibble ports, rulers, and instances.

When you use a wire as a nibbling tool, the default wire width for the Drag Box Layer must be set to the
width of the nibbling wire. (For information on changing wire parameters for a specific layer, see “End
Styles and Join Styles” on page 98.) If the wire width for the Drag Box Layer is set to zero, you will not
be able to use wires to nibble other objects.

Note: When nibbling, circles, pie wedges, tori, and curved polygons are approximated by an
all-angle polygon within a tolerance given by the Manufacturing Grid, see “Grid
Parameters” on page 79.

Merging Objects

Use Draw > Merge to merge multiple selected intersecting boxes, polygons (90°, 45°, all-angle, and
curved polygons), or wires (90°, 45°, and all-angle), circles, pie wedges, and tori into one object. You
can only merge intersecting objects that lie on the same layer. If you select objects from more than one
layer, L-Edit merges each set of overlapping selected objects on the same layer into one object. Circles,
pie wedges, tori, and curved polygons are approximated by an all-angle polygon within a tolerance
given by the Manufacturing Grid, see “Grid Parameters” on page 79.

Note: When a wire is merged with another object it becomes a polygon.

Warning: If you merge intersecting objects with different GDSII data types, L-Edit replaces their respective data
type values with the data type for the layer (or to “0” if a data type has not been set for the layer) without
a warning.

Boolean and Grow Operations

You create new polygons by applying logical operations to one or more drawn objects using
Draw > Boolean/Grow Operations. Note that L-Edit does not support Boolean operations on instances.

To perform a Boolean operation, select one or more objects on the layout and then choose
Draw > Boolean/Grow Operations from the L-Edit menu (or use the shortcut B). Valid objects for this

L-Edit 14 User Guide Section 1 196


Chapter 6: Drawing and Editing Objects Editing Objects

operation include boxes, all-angle polygons, wires, circles, pie wedges, and tori. When you click OK to
perform the Boolean operation, L-Edit creates one or more polygons on the Result layer.

The Inputs field shows the number and type of objects selected on each layer.

The operations And, Xor, Subtract (A-B), and Subtract (B-A) require that exactly two inputs be
specified. If this condition is not met, the Inputs field displays an error message; you must select
exactly two inputs or choose another operation. You can specify two inputs, A and B, in the following
ways:

ƒ Select exactly two objects on the same or different layers. L-Edit assigns the input names A and B
to the objects, and displays these assignments in the Inputs field.
ƒ Select any number of objects on exactly two layers. L-Edit assigns all selections on one layer to
input A, and all selections on the other layer to input B. The corresponding layer for each input is
shown in the Inputs field.

In the Result field, select the layer on which to create the resulting polygon(s).

To replace the input objects with the resulting polygon(s), check the option labeled Delete inputs after
operation is done. To preserve all input objects, leave this box unchecked (default).

In the Operation field, choose one of the following Boolean operations:

Operation Description Illustration

Or A|B

Takes the union of all inputs.

And A&B

Takes the intersection of inputs A


and B. This function can be
applied to exactly two objects, or
to any number of objects on
exactly two layers.
Xor A⊗B

Represents the area occupied by


exactly one input (A or B),
excluding all areas of
intersection. This function can be
applied to exactly two objects, or
to any number of objects on
exactly two layers.
Not A

Represents the outside, or


inverse, of all input objects
within the region defined by their
collective minimum bounding
box.

L-Edit 14 User Guide Section 1 197


Chapter 6: Drawing and Editing Objects Editing Objects

Operation Description Illustration

Grow Takes the union of all input


objects, then displaces each edge
outward by the distance specified
in the By field. (Default: 1.000)

Shrink Takes the union of all input


objects, then displaces each edge
inward by the distance specified
in the By field. (Default: 1.000)

Subtract (A-B) A&B

Represents the portion of input A a


that does not intersect with input
B. This function can be applied to b
exactly two objects, or to any
number of objects on exactly two
layers.
Subtract (B-A) B&A

Represents the portion of input B a


that does not intersect with input
A. This function can be applied to
b
exactly two objects, or to any
number of objects on exactly two
layers.

Converting Objects to Polygons

You can convert boxes, wires, circles, pie wedges, tori, and polygons with curved sides to straight sided
polygons. First select the objects, then choose Draw > Convert > To Polygon.

Circles, polygons with curved edges, the curved parts of pie wedges and tori will be approximated by
creating new vertices and snapping these vertices to the manufacturing grid. (Vertices are added within
a distance of less than the manufacturing grid of the original shape. See “Grid Parameters” on page 79.)
Vertices on non-curved segments are not modified.

L-Edit 14 User Guide Section 1 198


Chapter 6: Drawing and Editing Objects Editing Objects

Note: L-Edit automatically converts circles, pie wedges, tori, and curved-sided polygons to
straight-sided polygons when writing out GDSII. When writing out CIF, L-Edit
converts the same shapes except circles.

Converting Polygons to Orthogonal or 45° Geometry

You can convert a straight-edged polygon to a polygon with either orthogonal or 45° edges using the
Draw > Convert > Polygon To Orthogonal/45 command.

The Orthogonal and 45’s commands convert polygons using a predetermined step size.

Before - polygon with straight edges

After - polygon with orthogonal edges

L-Edit 14 User Guide Section 1 199


Chapter 6: Drawing and Editing Objects Editing Objects

Draw > Convert > Polygon To Orthogonal/45 > 45’s

Before - polygon with straight edges After - polygon with 45° edges

L-Edit 14 User Guide Section 1 200


Chapter 6: Drawing and Editing Objects Editing Objects

Selecting either Orthogonal Step or 45 Step lets you control the size of the new edges (the angle,
however, remains fixed.)

Small orthogonal step size.

Large orthogonal step size.

Small 45° step size.

Large 45° step size.

Removing Curves from Polygons

You can straighten the curved segments of polygons using Draw > Convert > Straighten Curved
Segments. This operation will remove the curvature from all segments of all selected polygons.
Circles, pie wedges and tori are not affected.

L-Edit 14 User Guide Section 1 201


Chapter 6: Drawing and Editing Objects Editing Objects

Fracturing Polygons

The Draw > Convert > Fracture Polygons command divides polygons with a large numbers of
vertices into several polygons with fewer vertices. The polygons are fractured according to the
maximum number of vertices you specify.

Note that this operation does not modify wires, circles, pie wedges, or tori.

Fracture You can choose to fracture only the polygon(s) you have selected, all
the polygons in a cell, or all polygons in the file.
Maximum Number of Sets the maximum number of allowable vertices for the selected
vertices polygons.

Wire Utilities for Editing Wires

L-Edit provides several utilities to make editing wires easier. Draw > Wire Utilities allows you to join
two or more wires together into one wire, extend the end segment of several wires to a new location, or
slice one wire into two wires.

Adding Wire Sections

You can insert new wire sections into an existing orthogonal or 45° wire. First select an orthogonal or
45° wire to enable the command. Use Draw > Add Wire Section to switch to Add Section mode, and
click on the selected wire at the point where you want to add a new wire section. L-Edit automatically
draws the new section on the same layer on which the existing wire is drawn. To return to drawing
mode, use the CANCEL mouse button. Areas where the wire intersects itself will be displayed as white.

Extending Wires

Extend will extend the end segment of the selected wires to the point where you click. Use
Draw > Wire Utilities > Extend to extend the selected wires. It will ask you to click where you want to
extend the wires to. It will then extend the closest end segment of each wire to point where you clicked.

L-Edit 14 User Guide Section 1 202


Chapter 6: Drawing and Editing Objects Editing Objects

Extend will not change the angle of the end segment. For non-orthogonal end segments, it will extend
them to the intersection point between the end segment and the line that is perpendicular to the end
segment and goes through the clicked point.

Resume Drawing a Wire

You can restart drawing a wire from its end point by pressing Ctrl+middle mouse button when the
cursor is directly over the endpoint. Make sure the wire is deselected before you lauch this operation.

Normally, the middle mouse


button is in edit mode. Press Ctrl and the middle mouse button when the
cursor is directly over the wire endpoint to trigger
“vertex” mode, then release the Ctrl key and move
the cursor to continue drawing the wire.

L-Edit 14 User Guide Section 1 203


Chapter 6: Drawing and Editing Objects Editing Objects

L-Edit will resume drawing the wire, rather than just editing it.

Once drawing is resumed, you can continue


to draw the wire using the left mouse button
to add vertices, the middle mouse button to
back up, and the right mouse button to end
the wire.

Joining Wires

The Join command connects two or more selected wires. Draw > Wire Utilities > Settings lets you set
whether wires must be touching to be joined.

Join wires only if they When this option is checked, two wires will only be joined if their
touch at their endpoints endpoints are touching. End style is ignored.

When this option is not checked, all wires in the selection list will be
joined by creating a wire segment between each closest two
endpoints. As shown in the following illustration, a wire segment is
inserted from endpoint to endpoint. Thus, if the two endpoints do not
have a common x or y value, an all-angle wire segment will be added.

L-Edit 14 User Guide Section 1 204


Chapter 6: Drawing and Editing Objects Editing Objects

Before join:

After, with Join wires only if they touch at their endpoints


checked.

Only wires that touch are joined.

After, with Join wires only if they touch at their endpoints


unchecked.

All wires are joined.

L-Edit 14 User Guide Section 1 205


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Slicing Wires

Slice will break a single wire into two wires. Use Draw > Wire Utilities > Slice to slice a wire. It will
ask you to click where you want to slice the wire. It will then slice the wire at the closest point on the
wire to where you clicked.

Editing Objects Using Text and Data Values

You can use text and data values to edit one or more drawn object in L-Edit using the Edit Object(s)
dialog.

Edit > Edit Object(s)

Select one or more objects in layout and use one of the following commands. If multiple objects are
selected they will all acquire the values entered in this dialog.

ƒ choose Edit > Edit Object(s)


ƒ press Ctrl+E
ƒ double-click the MOVE/EDIT mouse button
ƒ click the edit object(s) button ( ).

L-Edit 14 User Guide Section 1 206


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

The On layer and GDSII Data type fields are universal to all selected objects.

Note that if you change the layer of an object in the Edit Object(s) dialog but not the GDSII datatype,
L-Edit will automatically change the datatype to the value of the new layer as well.

On The layer on which the selected object(s) reside. You can select from
the drop-down list to change the layer.
GDSII Data type An integer ranging from 0-63, used primarily by GDSII database
users who intend to export a GDSII file from L-Edit and read it into
another program requiring additional information. Use this field to
assign or reassign a GDSII data type value to the selected object(s).
Properties Opens the Properties dialog for the selected object. This button is
only available when a single object is selected. See “Properties” on
page 138.

The Edit Object(s) dialog contains the following tabs:

ƒ Boxes (see “Edit Object(s)—Boxes” on page 209)


ƒ Polygons (see “Edit Object(s)—Polygons” on page 213)

ƒ Wires (see “Edit Object(s)—Wires” on page 214)


ƒ Circles (see “Edit Object(s)—Circles” on page 215)
ƒ Pie Wedges (see “Edit Object(s)—Pie Wedges” on page 216)
ƒ Tori (see “Edit Object(s)—Tori” on page 217)
ƒ Ports (see “Edit Object(s)—Ports” on page 218)
ƒ Rulers (see “Edit Object(s)—Rulers” on page 220)
ƒ Instances (see “Instances” on page 221)
ƒ T-Cell Parameters (see “Opening Cells” on page 243)

Multiple Object Editing

When you select multiple objects you can use the Edit Object(s) dialog to modify those objects
simultaneously.

L-Edit 14 User Guide Section 1 207


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Each tab in the Edit Object(s) dialog indicates the number of selected objects of that type in
parentheses.

Mixed-value and
disabled fields appear
similar, but mixed-value
fields are enterable and
disabled fields are not.

In this example, the 21


instances that are
selected all have the
same scale factors and
Y direction repeat count
when arrayed, but their
values for the other
parameters are
different.

When multiple objects with different properties are selected, the affected fields will have a mixed-value
appearance—that is, they do not contain a value since multiple values exist for those fields, and the
field background is gray.

Unlike disabled (“grayed-out”) fields, which you cannot edit, mixed-value fields accept new data. All
selected objects take on the value entered. In the example above, if you entered “8” in the X Translation
field, all 21 of the selected instances would move to the right by 8 microns.

L-Edit 14 User Guide Section 1 208


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Edit Object(s)—Boxes

To change the coordinates or dimensions of a box, choose the Edit Object(s)—Boxes tab.

This dialog provides three methods of displaying box coordinates and dimensions, which you choose
from the menu Show box coordinates, using. The pull-down options are Corners, Bottom left corner
and dimensions, and Center and dimensions.

The read-only fields in the bottom half of the dialog display coordinates and/or dimensions derived
from the values entered in the Coordinates group. The text can be selected and copied. After you edit a
value in the Coordinates group, you can click any of the read-only fields to update it.

L-Edit 14 User Guide Section 1 209


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Corners

Coordinates (Display Coordinates of the selected box or boxes, in display units. Values to
Units) be entered include:
ƒ X1—X-axis position of the lower left corner of the selected box
or boxes
ƒ Y1—Y-axis position of the lower left corner of the selected box
or boxes
ƒ X2—Y-axis position of the upper right corner of the selected box
or boxes
ƒ Y2—Y-axis position of the upper right corner of the selected box
or boxes
X center and Y center X- and Y-axis coordinates of the center of the selected box or boxes
(read-only)
Width and Height Width and height of the selected box or boxes
(read-only)

L-Edit 14 User Guide Section 1 210


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Bottom Left Corner and Dimensions

Coordinates (Display Coordinates and dimensions of the selected box or boxes, in display
Units) units. Values to be entered include:
ƒ X Left—X-axis position of the left edge of the selected box or
boxes
ƒ Y Top—Y-axis position of the top edge of the selected box or
boxes
ƒ Width—Width of the selected box or boxes
ƒ Height—Height of the selected box or boxes

X center and Y center X- and Y-axis coordinates of the center of the selected box or boxes
(read-only)
X2 and Y2 X- and Y-axis coordinates of the upper-right corner of the selected
(read-only) box or boxes

L-Edit 14 User Guide Section 1 211


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Center and Dimensions

Coordinates (Display Coordinates and dimensions of the selected box or boxes, in display
Units) units. Values to be entered include:
ƒ X center—X-axis coordinate of the center of the selected box or
boxes
ƒ Y center—Y-axis coordinate of the center of the selected box or
boxes
ƒ Width—Width of the selected box or boxes
ƒ Height—Height of the selected box or boxes

X1 and Y1 X- and Y-axis coordinates of the bottom-left corner of the selected


(read-only) box or boxes
X2 and Y2 X- and Y-axis coordinates of the upper-right corner of the selected
(read-only) box or boxes

L-Edit 14 User Guide Section 1 212


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Edit Object(s)—Polygons

To modify a polygon, choose the Edit Object(s)—Polygons tab. This tab allows you to add, delete, or
modify vertices and curves.

Note: If multiple polygons are selected, the Vertices list is disabled.

Vertices (Display Units) The X and Y coordinates of the vertices of the selected polygon. For
convenience, the pound sign (#) numbers the vertices.
Add Vertex Creates a new vertex with the selected coordinates.
Delete Vertex Removes the selected vertex from the object.
Show Curve Height If checked, column Curve Height is displayed in the Vertices list.
(For a definition of curve height, see “Curve Height” on page 178.)

L-Edit 14 User Guide Section 1 213


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Edit Object(s)—Wires

To modify, add, or delete a wire’s vertices, or change a wire’s width, end, or join styles, choose the Edit
Object(s)—Wires tab.

The following options are included. Refer to “End Styles and Join Styles” on page 98 for more detailed
information these options. Note that if multiple wires are selected, the Vertices list is disabled.

Vertices (Display Units) The X and Y coordinates of the selected wire’s vertices. Add Vertex
creates a new vertex with the selected coordinates. Delete vertex
removes the selected vertex from the object.
Wire width The width of selected wires in display units. Use Setup > Layers to
set the default wire width, end style, and join style for each layer. See
“Layer Setup” on page 87 for more information on layer setups.
Join style The type of join for the wires. A drop-down menu lists four styles:
Layout, Round, Bevel, or Miter.

End style The type of end for the wires. A drop-down menu lists three styles:
Butt, Round, or Extend.

Angle The angle between two segments in a miter style join.

L-Edit 14 User Guide Section 1 214


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Edit Object(s)—Circles

To modify the coordinates of the center and the radius of a circle, choose the Edit Object(s)—Circles
tab.

Coordinates (Display Individual coordinate fields include:


Units)
ƒ X and Y coordinates of the center of the selected circle
ƒ Radius of the selected circle

L-Edit 14 User Guide Section 1 215


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Edit Object(s)—Pie Wedges

To modify the coordinates of the center of a pie wedge, its sweep angle, and its radius, choose the Edit
Object(s)—Pie Wedges tab.

Center Coordinates The X and Y coordinates of the center of the selected pie wedge.
(Display Units)

Sweep Angle The angle from the horizontal (0°) to the Begin and End of the pie
(Counterclockwise) wedge. See “Sweep Angle,” below.
Radius The radius of the pie wedge.

L-Edit 14 User Guide Section 1 216


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Sweep Angle

The Sweep Angle is calculated counterclockwise as the angle from the horizontal (0°) to the Begin and
End of the pie wedge. In the illustration below, the Begin angle is 90° and the End angle is 180°.

Begin

End

Edit Object(s)—Tori

To modify the coordinates of the center of a torus, its sweep angle, and its radii, choose the Edit
Object(s)—Tori tab.

L-Edit 14 User Guide Section 1 217


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Center Coordinates The X and Y coordinates of the center of the selected torus.
(Display units)
Sweep Angle The angle from the horizontal (0°) to the Begin and End of the
(Counterclockwise) selected torus.
Radii Radius 1 is the first radius you create, whether it is to the inner or
outer edge of the torus.

For information on how L-Edit calculates the Sweep Angle, see “Sweep Angle” on page 217.

Edit Object(s)—Ports

To create a port or change the attributes of a port, choose the Edit Object(s)—Ports tab.

Port name The visible text associated with the port.

L-Edit 14 User Guide Section 1 218


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Multiple Press this button to create multiple ports where integers in the name
are incremented by a specified value for each port placed. You can
also select and edit an existing port then press this button to create
multiple ports.

Total—enter the number of ports to create


Delta—enter an offset value for the X and Y directions.
Increment—enter the amount by which integers in the port name will
increment.
Text size The size of the on-screen text. Use Setup > Design—Drawing to
change the default port text size.
Coordinates (Display units) The coordinates of the lower-left and upper-right vertices of the port.
If the port is a point, the coordinates are the same.
Text Orientation Specifies the orientation of port text. Options are Vertical and
Horizontal.

Text Alignment The position of the text in relation to the port. For horizontal
alignment, the options are Left, Center, and Right. For vertical
alignment, the options are Above, Middle, and Below. The default
position is the below the port and left-aligned.
Preview Demonstrates options selected for Text Orientation and Text
Alignment.

If you don’t specify a placement configuration, port text is automatically placed horizontally on the
screen at the lower center of the port. The Port name will be initialized to the last entered text, and the
last numerical sequence in the text will be incremented by 1. For example, if you created a port with a
Port name “DATA16bit-Line3bc,” the next port you create will be named “DATA16bit-Line4bc.”

Note: If you change layers while creating a port, the GDSII data type will change
accordingly. If you change layers while editing a port, however, the GDSII data type
will not change unless you explicitly reset it.

L-Edit 14 User Guide Section 1 219


Chapter 6: Drawing and Editing Objects Editing Objects Using Text and Data Values

Edit Object(s)—Rulers

To change the attributes of a ruler, choose the Edit Object(s)—Rulers tab.

Text Specifies the size, display style, and character angle of the text and
numbers associated with the selected ruler.
Show text on the other side Causes numbers and tick marks to appear on the opposite side of the
of the ruler selected ruler.
Tick marks (Display units) Specifies the distance between major and minor tick marks in the
Major and Minor fields, respectively.

Visible Displays tick marks for the selected ruler


Symmetric Displays tick marks on both sides of the selected ruler.
End style Specifies the end style for the selected ruler. Options include butt and
arrow style.
Start point Specifies the X and Y coordinates of the selected ruler’s start point.
End point Specifies the X and Y coordinates of the selected ruler’s end point.

L-Edit 14 User Guide Section 1 220


Chapter 6: Drawing and Editing Objects Command Line Editing

In the Display drop-down list you can choose one of four display types:

No text No numbers are visible.


Centered The total length of the ruler is
displayed in the center of the
ruler.
At end points Numbers are displayed at the
start and end points of the ruler.
At tick marks Numbers are displayed at each
major tick mark along the ruler
(default display).

Note: To set default ruler settings, use Setup > Design—Drawing.

Instances

To edit an instance as an object, choose the Edit Object(s)—Instances tab (see “Editing Instances
Using Text” on page 266).

Command Line Editing

L-Edit includes a command line interface that allows you to use basic textual commands and their
associated coordinates so that you can enter precise and repeatable object drawing and editing
operations and perform command scripting with text files.

Opening the Command Window

To open the Command Line window, select Tools > Activate Command Line. The Command Line
window will initially appear docked at the bottom of the application window, but can be moved by
dragging any corner or edge.

You can also use the ‘ key (grave accent, found below the tilde (~)) to toggle the command line window
open and closed.

L-Edit 14 User Guide Section 1 221


Chapter 6: Drawing and Editing Objects Command Line Editing

Using the Command Window

Click inside the window to make it active. Commands are entered at the command prompt (a flashing
cursor) and are applied only to the layout window that is currently active.

The command window behaves much like a toolbar. It can be dragged to any locations on the desktop
and hidden using either Tools > Activate Command Line, View > Toolbars > Command Line, or the
hot key ‘ (grave accent, found below the tilde (~)). This same hot key also toggles focus between the
command line window and the layout window.

A log of previous commands is kept for display and reuse. Use the up and down (↑, ↓) arrow keys to
scroll through and display prior commands. Text can also be copied and pasted to form new commands.
Use the Esc key to cancel a command.

Command scripting is also supported; refer to “Command Scripting” on page 232 for details.

A right-click in the command line window opens a context-sensitive menu for performing the
following functions:

Paste Paste from Windows clipboard into Command Line window. Only
first command is pasted if multiple lines were previously copied.
Copy Copy selected text from Command Line window into the Windows
clipboard. Text can then be pasted into another editor or into the
Command window.
Copy to file Save selected text to a .tco (Tanner command file) script file. For
more information on object properties, see “Command Scripting” on
page 232.
Delete last line Delete the last line of text.
Clear all Clears all commands from the command log.
Customize Opens the Customize Command Line dialog (see below).

L-Edit 14 User Guide Section 1 222


Chapter 6: Drawing and Editing Objects Command Line Editing

Customize Command Line is a dialog for configuring font size, color and background of the
Command Line window. It also allows specification of a default directory for command scripts.

Syntax

The basic command syntax is as follows:

command <arguments> <options> <press Enter> <mouse click>

Coordinate Entry Options

Arguments typically include a list of coordinates. Coordinates are relative by default (x1, y1). An
exclamation point is used to designate absolute coordinates (!x, !y). Display units are used for relative
and absolute coordinates.

For commands that support the entry of multiple coordinate pairs, the use of absolute coordinates sets
the reference point for the relative coordinates that follow. For example:

box !x1 !y1 x2 y2

will draw a box with its reference point at absolute location x1,y1 and opposing corner at (x1 + x2, y1 +
y2).

A -! used in an argument specifies that all values that follow are in absolute coordinates. For example:

box -! x1 y1 x2 y2

will draw a box with one corner at absolute location x1, y1 and the opposing corner at absolute location
x2, y2.

L-Edit 14 User Guide Section 1 223


Chapter 6: Drawing and Editing Objects Command Line Editing

Command Completion Using a Mouse Click

Some commands support coordinate entry using the mouse. In this case, after the partial command is
typed it must be followed by the Enter key and then one or more mouse clicks to complete the
command.

When multiple mouse clicks are required you use a left mouse button click to enter multiple coordinate
locations, and a right mouse button click to complete the coordinate entry and execute the command.

Once the command is executed, the coordinate values entered using the mouse are displayed in the
Command Line window. The Esc key can be used during mouse entry to abort a command.

Reference Point Location

The commands copy, move, paste, and rotate require a reference point for locating the new object
position. In each command, you can keep the default reference point, specify an offset from the default
reference point, or specify the reference point in absolute coordinates. The default reference point
differs depending upon the command and whether or not multiple objects are selected.

When a single primitive object is selected for copy, move, or paste commands, the default reference
point is the lower left corner of the minimum bounding box.

Reference point of single


wire.

When a single instance is selected, the default reference point is the instance origin.

Note: Note that the reference point does not snap to the grid.

Reference Point Location for Multiple Objects


When multiple primitive objects are selected for copy, move, or paste commands, the reference point
is determined by a mouse click. In this case, the reference point may be specified at any location within
the minimum bounding box for the objects As with other mouse click operations, you must press the
Enter key to pick a position using the mouse.

A mouse click determines the reference


point that will be used for multiple
selected objects.

L-Edit 14 User Guide Section 1 224


Chapter 6: Drawing and Editing Objects Command Line Editing

When any number of primitive objects are selected for the rotate command, the default reference point
is the center of the minimum bounding box for the objects.

For rotate commands, the default


reference point is always located at the
center of the minimum bounding box for
the selected objects.

Special Characters

The special characters slash (/), space ( ), and quotes (") cannot be used in an argument. To use these
characters you must either enclose the entire string in double quotes or precede each individual special
character with the backslash (\) escape character.

For example, the layer name Not Poly may be entered as "Not Poly" or Not\ Poly. Similarly, to include
a pathname C:\TEMP\NEWFILE.TDB you would enter "C:\TEMP\NEWFILE.TDB" or
"C:\\TEMP\\NEWFILE.TDB".

If a cell name includes a space or comma, it must be enclosed in quotes.

Keyboard Shortcuts

The TAB key functions as a position-sensitive shortcut within the command window. Depending on the
cursor position in a command, TAB will cycle through the available values for commands, layer names,
cell names, and file names. For example, in the command:

box !24 !14 !4 !1 -l <TAB>

pressing the TAB key will display the defined layer names in layer list order.

Typing a letter prior to using the TAB key will scroll the display to the first list element starting with
that letter.

Command Reference

The following commands are available for the Command Line.

!!

Repeat and execute the last command. If the command requires mouse entry, that portion of the
command is not executed.

¦,Ø

Scroll up or down through the log of command entries.

<Esc>

The Esc key cancels the current command.

L-Edit 14 User Guide Section 1 225


Chapter 6: Drawing and Editing Objects Command Line Editing

Array

Create an array of the selected instance(s) with the designated number of rows and columns. The
argument Xp Yp determines the distance between the origin of each element in the array.

Yp

Xp

original instance

Argument Example

array Rows Cols Xp Yp array 4 6 10 14

For positive pitch, array is performed in the positive x and y direction. For negative pitch, the array is
performed in the negative x and y direction regardless of overlap, as shown below.

Yp

-Xp

original instance

L-Edit 14 User Guide Section 1 226


Chapter 6: Drawing and Editing Objects Command Line Editing

Box

Draw a box as follows. The option -l changes the designated layer.

Argument Description

box w h <press Enter> Draw a box of width w and height h with its center at the mouse click
<mouse click> position.
Example: box 4 10 -l Metal1 <mouse click>
box !x1 !y1 <press Enter> Draw a box with corners at (x1, y1) and the mouse click position.
<mouse click>
Example: box 4 10
box !x1 !y1 !x2 !y2 Draw a box with corners at absolute locations (x1, y1) and (x2, y2).

Example: box !42 !51 !46 !61


box !x1 !y1 x2 y2 Draw a box with corners at absolute location (x1, y1) and relative
location (x1 + x2, y1 + y2).
Example: box !42 !51 49 62
box -! x1 y1 x2 y2 Draw a box with corners at absolute locations (x1, y1) and (x2, y2).
Example: box -! 42 51 49 62

Copy

Copy the selected object(s) as follows. The option -l changes the designated layer. The option -R
followed by two relative coordinates specifies an offset of the reference point from the lower left corner
of the minimum bounding box.

If multiple objects are selected, this command prompts for a mouse click to determine the reference
point that will be used when the objects are pasted.

Argument Description

copy Store the selected object(s) in the paste buffer.


copy x y Copy the selected object(s) and paste with reference point at (∆x, ∆y).
Example: copy 4 6
copy !x !y Copy the selected object(s) and paste reference point at absolute
location (x, y).
Example: copy 4 10 -l Metal1 <press Enter> <mouse click>
copy -! x y Copy selected object(s) and paste reference point at the absolute
location (x, y).
Example: box 4 10 -l Metal1 <press Enter> <mouse click>

L-Edit 14 User Guide Section 1 227


Chapter 6: Drawing and Editing Objects Command Line Editing

Goto

Shift the screen display.

Argument Description

goto x y Shift screen center by (∆x, ∆y).


goto !x !y Move screen center to absolute coordinate (x, y).
goto -! x y Move screen center to absolute coordinate (x, y).

Instance

Create an instance of the selected cell. This command supports the use of Xref cells with the -f filename
option, which creates an XrefCell instance of a cell from the specified file. If a cell name includes a
space or comma, it must be enclosed in quotes.

Example:

instance "NAND 1" !14 !22 -f mainlib.tdb

creates a referenced instance of cell NAND from the mainlib.tdb file, with its origin at (14, 22).

Argument Description

instance cName x y Instance cell cName, placing the cell's origin at position ∆x, ∆y
relative to screen center.
Example: instance "DFF R2" 0 3
instance cName !x !y Instance cell cName, placing the cell's origin at position x, y.
Example: instance DFF !42 !136
instance cName -! x y Instance cell cName, placing the cell's origin at position x, y.
Example: instance DFF -! 42 136
instance cName <press Instance cell cName, placing the cell's origin at the position given by
Enter> <mouse click> the mouse click.

Layer

Change the active layer to the layer designated using either the layer name or GDSII layer number.

Argument Description

layer LayNum Change active layer to the designated GDSII layer number.
Example: layer 42
layer LayName Change active layer to the designated layer name.
Example: layer "SubCkt ID"

L-Edit 14 User Guide Section 1 228


Chapter 6: Drawing and Editing Objects Command Line Editing

Move

Move the selected object(s). The option -R followed by two relative coordinates specifies an offset of
the reference point from the lower left corner of the minimum bounding box.

Argument Description

move x y Move selected object(s) by ∆x, ∆y.


Example: move -40 -32
move !x !y Move the lower left corner of the selected object to (x, y). If multiple
objects are selected, this command prompts for a mouse click to
determine the reference point for the translation to (x, y).
Example: move !42 !136 <press Enter> <mouse click>
move -! x y Move the lower left corner of the selected object(s) to the absolute
location (x, y). If multiple objects are selected, this command prompts
for a mouse click to determine the reference point for the translation
to (x, y).
Example: move -! 42 136

Path

Draw a wire between mouse click points in the layout or absolute coordinate points. The option -l
changes the designated layer. The option -pw changes the wire width.

Argument Description

path <mouse click(s)> Draw a wire segment between mouse click points. Drawing is ended
<right mouse click> with a right mouse click. Note that wires are drawn in outline mode
until the drawing is complete.
Example: path -l Metal1 -pw 12 <mouse click> <mouse click> <right mouse click>
path !x !y <mouse click(s)> Draw a wire from absolute location (!x, !y) to selected mouse click
<right mouse click> points, ending with a right mouse click.
Example: path !1092 !476 <mouse click> <mouse click> <right mouse click>
path !x1 !y1 !x2 !y2 ... Draw a wire with vertices at the absolute locations (!xn, !yn) entered.
Example: path !-12 !-14 !79.5 !16 !80.5 !9.5 !50 !-4.5 !23.5 !-15.5 !48.5 !-22.5
path -! x1 y1 x2 y2 ... Draw a wire with vertices at the absolute locations (!xn, !yn) entered.
Example: path -! 4 10 11 15 20 20 30 45 45 60

Paste

Paste the selected object(s) into the layout. The option -l changes the designated layer.

Argument Description

paste x. y Paste the selected object(s), translating the reference point of the
objects in the paste buffer by (∆x, ∆y).

L-Edit 14 User Guide Section 1 229


Chapter 6: Drawing and Editing Objects Command Line Editing

Example: paste 15 25
paste !x !y Paste the selected object(s), translating the reference point of the
objects in the paste buffer to the absolute location (x, y).
Example: paste !1092 !476
paste -! x y Paste the selected object(s), translating the reference point of the
objects in the paste buffer to the absolute location (x, y).
Example: paste -! -12 -14
paste <mouse click> Paste the selected object(s) with the reference point of the objects in
the paste buffer to the mouse click point.
Example: paste <press Enter> <mouse click>

Polygon

Draw an all-angle polygon at the indicated absolute vertices. The option -l changes the designated layer.

Argument Description

polygon !x1 !y1 !x2 !y2 ... Draw a polygon with vertices at the indicated absolute coordinates.
Example: polygon 15 25
polygon -! x1 y1 x2 y2 ... Draw a polygon with vertices at the indicated absolute coordinates.
Example: polygon -! -12 -14
polygon !x1 !y1 <mouse Draw a polygon with first vertex at (x1 y1) and additional vertices
click> indicated by mouse clicks. A right mouse click completes the
command.
Example: polygon !1092 !476 <mouse click> <mouse click> <right mouse click>
polygon <mouse click> Draw a polygon with all vertices indicated by mouse clicks. A right
mouse click completes the command.
Example: polygon <mouse click> <mouse click> <right mouse click>

Rotate

Rotate the selected object(s) counterclockwise across an angular distance (in degrees) with respect to
the specified point. The value of angle must be between -360 and +360 degrees, exclusively.

Argument Description

rotate angle x y Rotate the selection counter-clockwise by angle (degrees) with


respect to the point offset from the selection’s center by (∆x, ∆y).
Example: rotate 90 0 0
rotate angle !x !y Rotate the selection counter-clockwise by the angle (degrees) with
respect to the absolute coordinates (x, y).
Example: rotate 120 !1092 !476

L-Edit 14 User Guide Section 1 230


Chapter 6: Drawing and Editing Objects Command Line Editing

rotate angle -! x y Rotate the selection counter-clockwise by angle (degrees) with


respect to the absolute coordinates (x, y).
Example: rotate 45 -! -12 26
rotate angle <mouse click> Rotate the selection counter-clockwise by angle (degrees) with
respect to the point indicated by mouse click.
Example: rotate 240 <press Enter> <mouse click>

Run

Execute the sequence of commands in the specified file.

Argument Example

run filename run repwire.tco

Text

Create a point port at the specified location. The option -l changes the designated layer.

Argument Description

text label !x !y Create a port at location (x , y) with the text string label.

Example: text Gnd !4 !10 -l Metal1


text label -!x y Create a port at location (x , y) with the text string label.

Example: text label Gnd -! 4 10 -l Metal1


label <mouse click> Create a port at the mouse click position with the text string label.

Example: text Gnd <press Enter> <mouse click>

Width

Set the wire width (in Display Units).

Argument Option

width Sets the wire width to the default value for the active layer.

Example: width
width wire width Sets the wire width to the specified value.

Example: width 3

L-Edit 14 User Guide Section 1 231


Chapter 6: Drawing and Editing Objects Command Line Editing

Command Scripting

Command scripting is supported through the use of a run command that opens and executes a text file
containing a list of commands. The file format for this command list is Tanner Command Files with a
.tco extension.

You can use the Copy to file command (Ctrl+L from within the command line window) to save
highlighted text from the command window directly to a .tco script file.

C++ style comments are supported in command script files. The run command cannot be nested. Note
that commands using mouse completion are not generally supported in command scripts.

L-Edit 14 User Guide Section 1 232


7 Working with Cells
1

The cell is the basic building block of an integrated circuit design. A cell in L-Edit can contain three
types of components:

ƒ Primitives—geometrical objects created in the cell


ƒ T-Cell code and parameters—instructions to generate layout in another cell (discussed in the
chapter Generated Cells, page 291).
ƒ Instances—references to other cells

In an efficient design, cells, primitives, and instances form a treelike hierarchical structure. The most
elementary cells reside near the “bottom” of the hierarchy; the subsystem cells, composed largely of
instances, reside near the “top.” Actions on a particular cell affect all of its instances in cells “above” it
in the hierarchy.

The figure below illustrates a design hierarchy:

Instance Primitive

Cell

source cell source cells

= primitive = instance

Design Navigator

The Design Navigator lists all cells in a design in a hierarchical structure, including information on
instances, Xref cells and files, and fabrication cells. To open the Design Navigator, use View > Design
Navigator, or click in the standard toolbar.

L-Edit 14 User Guide Section 1 233


Chapter 7: Working with Cells Design Navigator

You can use View > Arrange Design Navigator to arrange all open windows with the Design
Navigator docked to one side and the layout windows, each the same size, on the other.

The Design Navigator always opens in Top down - all cells display mode. The default list order is
alphabetical. You can also sort by date modified or DRC status (see “Sort and Display Modes in the
Design Navigator” on page 235).

A + icon indicates a collapsed state and a - icon indicates an expanded state. To expand or collapse the
cell list click the + or - icon.

The unlabeled filter field searches the


display list and highlights the first cell
that begins with the characters entered
in this field.

Symbols in the Design Navigator

In each of the dialogs you access with the Cell menu commands, L-Edit uses these symbols to identify
cells.

Cell0 Bold text indicates cells with unsaved changes.


The padlock indicates a locked cell.
In the Select Cell to Delete dialog, a cell that cannot be deleted. In
the Select Cell to Instance dialog, a cell that cannot be instanced.
A locked cell that be deleted or instanced.
The fabrication cell.
A locked fabrication cell.
A fabrication cell that cannot be deleted or instanced.
A locked fabrication cell that cannot be deleted or instanced.
The generator icon indicates a T-Cell.
Cell_foo1 Blue text indicates Xref files and their cells.

L-Edit 14 User Guide Section 1 234


Chapter 7: Working with Cells Design Navigator

Sort and Display Modes in the Design Navigator

You can view cells in the Design Navigator several ways. Use the drop-down list on the toolbar to select
a display mode.

Select the desired display mode from the drop-down list:


ƒ “Top down - all cells” on page 235
ƒ “Bottom up - all cells” on page 236
ƒ “Top down - non-instanced” on page 237
ƒ “By date modified” on page 237
ƒ “DRC Status” on page 238
Collapse all cells to display only the top level.
Expand all cells to display all levels of instancing.
Create a new cell.
Delete the selected cell. This operation is only available when the
selected cell is not instanced in another cell.
“Copy Display to Text View” on page 238
Shows all cells in the list, including hidden cells. When unselected,
does not show hidden cells. You can make a cell hidden by
deselecting the Show in Lists option in Cell > Info—Cell
Information. Cells generated by a T-Cell are automatically hidden by
L-Edit.

Top down - all cells

In this mode cells are hierarchically listed in terms of instances they contain. When a cell contains
instances and is collapsed, it is marked with a plus icon (+). When you expand the cell, the instanced

L-Edit 14 User Guide Section 1 235


Chapter 7: Working with Cells Design Navigator

cells are listed below it. Numbers in brackets indicate the number of times the particular cell is
instanced in the higher cell.

Bottom up - all cells

In this mode cells are listed in terms of where they are instanced. When a cell is instanced in other cells
it is marked with a + and the cells which contain it as an instance are listed below it. Numbers in
brackets indicate the number of times the higher-level cell is instanced in the particular cell.

In this illustration, cell CELL is instanced in two other cells: Twice in Cell0 and eight times in
COLUMN. COLUMN is also instanced in other cells (indicated by the + icon).

L-Edit 14 User Guide Section 1 236


Chapter 7: Working with Cells Design Navigator

Top down - non-instanced

Only cells which are not instanced in other cells are listed in this mode.

By date modified

All cells are displayed and sorted by modification date/time. The newest cells are at the top; the oldest
are at the bottom. Version is displayed for reference only. Subcells are not displayed in this mode.

L-Edit 14 User Guide Section 1 237


Chapter 7: Working with Cells Design Navigator

DRC Status

In this display mode, all cells are listed in alphabetical order with an icon indicating their DRC status
(see “DRC Status” on page 483. )

DRC Status Icons

DRC Needed. DRC has not been run on this cell, changes have been
made to this cell since the last DRC run, or the DRC setup has
changed since the last DRC run.
DRC Failed. DRC has been run on this cell, and errors were found.
DRC Passed. DRC has been run on this cell and no errors were found.
Exclude all instances of this cell from DRC.

Copy Display to Text View

The Design Navigator can convert its cell tree display to a text representation by pressing the Copy To
Text View button ( ) on the Design Navigator tool bar. The text view will formatted to reflect the
displayed cell tree. For example, if the displayed cell tree is in top down - all cells mode, the text view
will also be ordered that way. If the cell is locked, the word “locked” will appear in brackets to the right
of the cell name.

L-Edit 14 User Guide Section 1 238


Chapter 7: Working with Cells Design Navigator

Performing Cell Operations with the Design Navigator

To access the context-sensitive menu of available commands for the Design Navigator, select a cell and
click the right mouse button.

Open Opens the selected cell.


New Creates a new cell.
Rename Renames the selected cell.
Delete Deletes the selected cell. This command is only available when the
selected cell is not instanced in another cell.
Hierarchical Delete Deletes the selected cell and all cells instanced in it. This command is
only available when the instanced cells are not instanced anywhere
else.
Lock Locks/unlocks the selected cell.
Hierarchical lock Locks the selected cell and all cells that are instanced in it (see
“Locking and Unlocking Cells Hierarchically” on page 240).
Hierarchical unlock Unlocks the selected cell and invokes a warning dialog that asks if the
user wants to individually unlock each cell that is instanced in it. The
dialog also gives the option to unlock all instanced cells.
Flatten Flattens the hierarchy of the selected cell.
Fabricate Marks the selected cell for fabrication.
Save Cell to File Opens a dialog to save the selected cell to a TDB file. The default
filename is CellName.tdb.
Create/Update T-Cell Creates a new T-Cell code template for the selected cell. If the cell
Code... already has T-Cell code, L-Edit displays a warning and asks if you
want to replace the existing code.
Info Displays the Cell Information dialog for the selected cell.

L-Edit 14 User Guide Section 1 239


Chapter 7: Working with Cells Design Navigator

Shortcuts Sets whether keyboard shortcuts will be active in the Design


Navigator.
ƒ On—Keyboard shortcuts are active, i.e. pressing O will open the
selected cell, not cycle the selection to the first cell that begins
with the letter O.
ƒ Off—Keyboard shortcuts are inactive to allow cycle selection by
typing the first few letters of a cell name.

Locking and Unlocking Cells Hierarchically

Hierarchical locking and unlocking allows you to lock and unlock cells and all of their instanced cells
so that a locked cell cannot be modified during an edit in-place operation.

In hierarchical unlocking, the top-level cell is unlocked and L-Edit prompts you for permission to
individually unlock each cell that is instanced in it. The dialog also gives the option to unlock all
instanced cells.

Locking and unlocking will always be exclusive. For example, if cell A and cell B both instance cell C,
and hierarchical lock is performed on cells A and B, all three cells will be locked. If cell A is
subsequently hierarchically unlocked, cell C will be unlocked, including its instance in cell B.

Depending on the state of the selected cell and the associated file, some menu items will be disabled:

If file is locked: All items except for Open, Info are disabled.
If selected cell is instanced in Delete, Hierarchical Delete are disabled.
another cell:
If selected cell is locked: Flatten, Rename, Delete, Hierarchical Delete are disabled.

Copying and Instancing from the Design Navigator

You can copy or instance cells to another file directly from the Design Navigator using drag-and-drop
operations:

ƒ If you drag and drop a cell from the Design Navigator onto the layout of the same file, L-Edit
creates an instance of the cell.
ƒ If you drag and drop a cell from the Design Navigator to the Design Navigator of another file,
L-Edit creates a copy of the cell in the other file.
ƒ If you drag and drop a cell from the Design Navigator onto the layout of another file, L-Edit creates
an instance of the cell in the other file. (Note that this is new behavior as of version 14. Prior to that

L-Edit 14 User Guide Section 1 240


Chapter 7: Working with Cells Creating Cells

the default action was to move the cell and create an external Xref.) However, if you right-click and
drag, L-Edit will prompt you to either instance, copy and instance, or copy the cell.

ƒ If you drag and drop a cell from an Xref file that is already in the active TDB file, then the instance
is set to the existing Xref cell.

Printing Cell Hierarchy from the Design Navigator

You can print the cell hierarchy when the Design Navigator is the active window. The hierarchy will be
printed in its current state, using + and - to indicate the state of the branches. Each level of the cell
hierarchy will be shifted from the previous one to the right by three characters.

Information that the cell is locked or selected for fabrication will be displayed in brackets after the cell
name, in the form [Locked] or [Fabricate].

Creating Cells

To create a new cell, choose Cell > New or press N. The General tab allows you to enter identification
information about the cell. If the cell will contain only primitives and instances, click OK. To add

L-Edit 14 User Guide Section 1 241


Chapter 7: Working with Cells Creating Cells

parameters and UPI code for a T-Cell, click the T-Cell Parameters tab (see “Creating T-Cells” on page
291).

Cell name The name of the new cell. Each component cell of a file must have a
unique name.
Cell info Includes Author, Organization, and Information (notes or messages)
for the active cell.
Open in new window Instructs L-Edit to open the cell in a new layout window. The Select
Cell To Edit dialog (accessed with Cell > Open) has an identical
option. Setting this option in either dialog controls the behavior for
both commands. L-Edit saves last state of this check box when you
exit the application.

L-Edit 14 User Guide Section 1 242


Chapter 7: Working with Cells Opening Cells

Opening Cells

To open a cell, choose Cell > Open, press O, or click the open cell button ( ).

File The name of the current file (default) or of any other open file.
Cell list The specified file’s component cells are displayed in the scrollable
list. To open a cell, select it and click OK or double-click it.
Open in new window Instructs L-Edit to open a cell in a new layout window. The Create
New Cell dialog (accessed with Cell > New) has an identical option.
Setting this option in either dialog controls the behavior for both
commands. L-Edit saves last state of this check box when you exit the
application.
Open View Instructs L-Edit to open either the cell Layout or a text window
containing T-Cell Code for the selected cell. If the selected cell is not
already a generator cell, the option T-Cell Code will open a blank
code window.
Show all cells When checked, shows all cells in the list, including hidden cells.
When unchecked, does not show hidden cells. You can make a cell
hidden by deselecting the Show in Lists option in Cell > Info—Cell
Information. Cells generated by a T-Cell are automatically hidden by
L-Edit.

If a cell name is in boldface type, it indicates that the cell has been edited but that the changes have not
yet been saved. T-Cells are shown with a generator icon ( ) next to them.

L-Edit 14 User Guide Section 1 243


Chapter 7: Working with Cells Reverting Cells

If an instance is selected in the layout, its name will be highlighted in the Open Cell dialog. If multiple
instances are selected, the referenced cell of the first instance in the selection will be highlighted. If no
instance is selected, the last cell opened will be highlighted.

Cell names can be selected by typing in the Filter field. As you type letters in the Filter field, L-Edit
automatically highlights the first name in the list beginning with the (case-insensitive) partial name
being entered. For example, typing “g” causes the first cell name beginning with g or G to be
highlighted; adding a u highlights the first cell beginning with gu, Gu, gU, or GU; and so on.

You can open multiple views of a cell by reopening the same cell. L-Edit will display and update each
view of the cell in a separate layout window. The name of a cell is found in the title bar.

Reverting Cells

Cell > Revert Cell allows you to reverse all changes made to the layout of the active cell after any the
following operations:

ƒ File > Save


ƒ Tools > Generate Layers
ƒ Tools > DRC
ƒ Tools > Extract
ƒ Draw > Assign GDSII Data Types
ƒ Draw > Clear Rulers
ƒ Tools > Clear Generate Layers
ƒ Tools > Clear Error Layers

Warning: The Revert Cell command does not reverse changes to T-Cell code.

The Revert Cell command cannot be undone using Edit > Undo.

L-Edit 14 User Guide Section 1 244


Chapter 7: Working with Cells Renaming Cells

Renaming Cells

To rename the current cell, choose Cell > Rename (or press T).

Rename cell as The new name of the active cell.


Cell info Includes editable text fields for Author, Organization, and
Information (notes or messages) for the active cell.

The renamed cell stays open when you click OK.

Before netlist extract, it is possible to have two instances with the same instance name. However, after
netlist extraction, L-Edit will force each instance to have a unique name.

You can also use Cell > Close As, which copies the cell with all current changes to a cell with a new
name. Cell > Close As closes the original — without saving layout changes since the previous save
operation — and opens the newly named cell.

The Close Cell As dialog contains a field to enter the new cell’s name.

Copying Cells

You can copy cells within an active file or from any other file that is open. In the copy cell process,
L-Edit creates a new cell, not an instance, including all primitives and instances defined by the original
cell. When a cell is copied from another file, all cell definitions of the instances in the copied cell are
also copied.

L-Edit 14 User Guide Section 1 245


Chapter 7: Working with Cells Copying Cells

L-Edit can also copy just a portion of a cell and paste it into a new cell created for that “clip out;” see
“Copying a Piece of a Cell to Another Cell” on page 248.

To copy cells, choose Cell > Copy, press C, or click the copy cell button ( ). If an instance is
selected in the layout, the referenced cell will be highlighted in the Select Cell to Copy dialog. If
multiple instances are selected, the referenced cell of the first instance in the selection will be
highlighted. If no instance is selected, the current cell will be highlighted.

File Name of the active file (default) or any other file specified from the
drop-down list. In the drop-down list, TDB files that are open but not
active are displayed in red, cross-referenced TDB files are displayed
in blue.
Search Enter the cell’s name here, or highlight it on the scrollable list of the
specified file’s component cells, which is displayed in the above this
field. Click OK or double-click a highlighted cell name to open the
Cell Copy dialog.

Reference type ƒ Move cell to current file—moves the selected cell from another
file to the current file (See also “Creating Xref Cells” on page
268.)
ƒ Copy cell to current file—creates a copy of the specified cell in
the current file. (This is the default.)
Show all cells When checked, shows all cells in the list, including hidden cells.
When unchecked, does not show hidden cells. You can make a cell
hidden by deselecting the Show in Lists option in Cell > Info—Cell
Information. Cells generated by a T-Cell are automatically hidden by
L-Edit.

L-Edit 14 User Guide Section 1 246


Chapter 7: Working with Cells Copying Cells

Resolving Name Conflicts When Copying Cells

Each cell in a file must have a unique name. If the cell you are copying is within the current file, you
must give the copy a new name.

If the cell being copied is in a different file, the copy proceeds automatically unless L-Edit detects a
name conflict. Name conflicts can arise for the cell being copied or for any cell it contains. If there is a
name conflict, L-Edit opens a Conflict Resolution dialog.

The Action field for each name conflict contains a drop-down list of possible resolutions. You can
specify a different action for each name conflict. The default action is to rename the new cell as
CellName_1 (or x+1). Cells are listed alpahbetically.

For each name conflict, select one of the following options:

Rename new cell Rename the cell being copied from the source file. When this option
(default) is selected, you can enter a new cell name in the field labeled New
Name. The default name is CellName_New.

Rename old cell Rename the cell residing in the current (destination) file. When this
option is selected, you can enter a new cell name in the field labeled
New Name. The default name is CellName_New

Overwrite old cell The cell in the current file is overwritten by the copied cell.
Use old cell The source cell causing a name conflict is not copied.

Resolving Layer Conflicts When Copying Cells

When you copy a cell from one file to another, L-Edit checks the destination file setup for technology
conflicts. If the cell being copied and the current file use different technologies, these differences are
listed in a Conflict Resolution dialog.

L-Edit 14 User Guide Section 1 247


Chapter 7: Working with Cells Copying Cells

Conflicts are reported in a Conflict Resolution dialog such as the one shown below.

If the cell being copied includes layers that are not defined in the current file, L-Edit lists these as
Unknown layers. For each unknown layer, select an Action from the drop-down list to resolve the
conflict. You can either copy the layer definition from the file containing the cell to the current file, or
you can map the unknown layer to a layer that is defined in the current file.

To ignore the differences and proceed with copying the cell, check Ignore different technologies and
click OK. To resolve different technologies, click Cancel and edit the technology setup information for
one of the two files.

Saving a Cell to Another File

Save Cell to file saves a single cell and its hierarchy to a new TDB file. To save a single cell to TDB
use Cell > Save Cell to File.... The Save Cell to File dialog shown below allows you to choose the cell
to save and the file to which it will be saved. The Browse button opens a standard Windows Save As
dialog.

Copying a Piece of a Cell to Another Cell

The command Draw > Clip Out Region... copies a rectangular region of a cell and saves that region and
its hierarchy to a new cell. All geometry within the boundary of the clipped rectangle and all instances
completely inside the clip rectangle will retain their hierarchy. Objects on hidden layers will be copied.

L-Edit 14 User Guide Section 1 248


Chapter 7: Working with Cells Deleting Cells

The Clip Out Region dialog shown below lets you name the new cell and specify the portion to be
copied.

New Cell Name Name of the new cell where the clipped region will be saved. L-Edit
appends “_clipcut” to the name of the source cell and will use the
appended name if nothing else is entered in this field.
Clip To Define the rectangle to be copied, either by entering absolute x, y
coordinates for the corners, or by clicking on the Pick... button.
Pick... Click on this button to return to the layout to use the mouse to select
the clipping rectangle. The first click selects the lower left point, the
second click selects the upper right point of the rectangle to be copied.

Deleting Cells

To delete a cell, choose Cell > Delete or press B. L-Edit displays the Select Cell To Delete dialog:

File The name of the active TDB file (default). All open TDB files are
listed in the drop-down list.
Cell The specified file’s component cells are displayed in the scrollable
list. Cells which cannot be deleted (due to being instanced in other
cells) have a red (x) next to them. Highlight an available cell and click
OK to delete the cell.

L-Edit 14 User Guide Section 1 249


Chapter 7: Working with Cells Cell Information

Hierarchical delete Checking this box causes all cells instanced within the selected cell to
also be deleted, unless they are instanced in additional cells.

Cell Information

Use Cell > Info to edit information on the active cell. (See “Creating T-Cells” on page 291 for how to
use the T-Cells Parameters tab.

Cell name Name of the active cell


Cell data Includes Author, Organization, and Information (notes or messages)
for the active cell. Information can contain a maximum of 256
characters.

L-Edit 14 User Guide Section 1 250


Chapter 7: Working with Cells Cell Information

Cell version and dates The date and time the cell was created and last modified. The version
numbering system provides an internal accounting method for
tracking changes. Increment increases the version number to the next
major version (for example, 3.08 to 4.00). L-Edit automatically
increments the minor version number (for example, 3.08 to 3.09) each
time changes to the cell are saved.

Use Alt+K to decrement version numbers (for example, 3.27 to 3.00


then 2.00).

Use Alt+L to increment the minor version (for example, 3.27 to 3.29).
DRC Status The DRC status of the cell, either Needed, Passed, or Failed.
Exclude instances of this cell Check this checkbox to exclude all instances of this cell from all DRC
from DRC runs. See “Excluding Cells from DRC” on page 483
Cell locked Switches the cell between locked and unlocked states. Locked cells
cannot be edited, but objects in them may be selected and copied to
other cells, and the cell can be instanced in other cells.
Show in lists If checked, the cell will appear in cell lists, such as the Design
Navigator, Cell > Instance, etc. If unchecked, the cell will be
suppressed from these lists.
Default view Select the default view when opening this cell. Choose Layout to
open the layout view of this cell by default, or choose T-Cell to open
the code view of this cell by default.
XRefCell If the cell is an Xref cell, Referenced file is the name and path of the
TDB file which contains the referenced cell. Referenced cell is the
name of the referenced cell. All of the information in the Cell
Information dialog for an Xref cell pertains to the referenced cell and
is read-only and cannot be edited.
Properties Opens the Properties dialog for the cell. For information on cell
properties, see “Properties” on page 138.

Listing the Object Types and Layers Used in a Cell

Cell > Cell Object Summary counts the type and number of objects on each layer used in a cell, for the
top level of the cell and all objects in the hierarchy. Each object is counted only once.

Cell > Layer-Cell Cross Reference lists the layers in a design file that have geometry on them and
gives the name of the cells that contain the geometry.

For example:

Layer-Cell Cross-Reference
Layer "Active"
DFFC
Nand2C
Nor2
Nor2C
Pad_BidirHE
PadGnd
PadVdd
RowCrosser
TieHigh

L-Edit 14 User Guide Section 1 251


Chapter 7: Working with Cells Operations on Multiple Cells

TieLow

Operations on Multiple Cells

The Cell > Multiple Cell Operations commands let you perform certain operations on more than one
cell at once. In each of the multiple cell dialogs, cells that are not instanced are listed before those that
are, sorted alphabetically within each group. Possible multiple cell operations are:

ƒ Show Cells in the Design Navigator—All cells that are checked will be shown in the Design
Navigator when “Show All Cells” is turned off. Cells are sorted with shown first, then hidden.
ƒ Hide Cells in the Design Navigator—All cells that are checked will be hidden in the Design
Navigator when “Show All Cells” is turned off. Cells are sorted with shown first, then hidden.
ƒ Lock Cells—All checked cells will be locked. Cells are sorted with unlocked first, then locked.
ƒ Unlock Cells—All checked cells will be unlocked. Cells are sorted with unlocked first, then
locked.
ƒ Delete Cells—see “Deleting Multiple Cells” on page 254
ƒ DRC Cells—Performs DRC on all cells that are checked using the current DRC setup.

L-Edit 14 User Guide Section 1 252


Chapter 7: Working with Cells Operations on Multiple Cells

ƒ Extract Cells—Performs Extract on all cells that are checked using the current extract setup for
each cell.

The following controls are common to all the multiple cell operations (show/hide, lock/unlock, DRC
and Extract):

Mark All Checks all the cells in the list.


Unmark All Removes the check from all cells in the dialog.
Automatically mark cells With this option enabled, when a cell has a checkmark, L-Edit will
and their subcells automatically check all of the cells instanced in that cell.
Sort alphabetically With this option enabled, the cell list is sorted alphabetically rather
than by status.

L-Edit 14 User Guide Section 1 253


Chapter 7: Working with Cells Operations on Multiple Cells

Deleting Multiple Cells

The Delete Cells Dialog has two additional checkboxes.

Allow deleting locked cells When this option is checked, it is possible to check and delete a cell
even though it is locked.
Delete cell even if it is When this option is checked, it is possible to check and delete a cell
instanced even though it is instanced in another cell. The instances are deleted
before the source cell is deleted.

When a cell is not available for deletion it will appear grayed out. When locked cells, instanced cells, or
locked and instanced cells are available for deletion, their display colors are:

ƒ Unlocked, not instanced—black


ƒ Locked, not instanced—dark blue
ƒ Unlocked, instanced—red
ƒ Locked, instanced—dark red

L-Edit 14 User Guide Section 1 254


Chapter 7: Working with Cells Instancing Cells

Instancing Cells

An instance is a representation of a cell in a particular location and orientation in another cell. An


instance can reference a cell composed of primitives, other instances, or a combination of primitives and
instances. An instance can also reference a cell generated from T-Cell code, called an auto-generated
cell. However, a cell cannot instance itself—that is, you cannot create an instance of a cell in the cell
itself.

An “instancing” cell contains such a representation; an “instanced” cell is the source, or referenced, cell.
Changes made to the instanced (source) cell are automatically propagated to all instances of that cell.
Changes made to a T-Cell, which L-Edit uses to generate source cells, cause all auto-generated cells and
their instances to be flagged “out of date.” You can update T-Cell instances using the
Cell > Regenerate T-Cells command.

Layouts that use instances consume less memory than “flat” designs, where all the features exist as
originally drawn objects.

Setting Instance Selectability


Note that it is possible to set L-Edit so that instances can or cannot be selected. This setting applies
globally, to all instances in a design. When instance selection is not allowed (command unchecked), the
icon will have a red dot in the lower left corner ( ).

However, if you place a new instance while instances are unselectable, it be in the selected state and
stay that way until deselected so it can be positioned. If you accidentally unselect it, Undo will return it
to its previous position and restore the selection.

Use Edit > Allow Instance Selection from the menu bar or right-click on the Instance button in the
Drawing toolbar to access the same command.

L-Edit 14 User Guide Section 1 255


Chapter 7: Working with Cells Instancing Cells

Creating Instances

You can instance a cell from the active TDB file or another TDB file (Xref file). Use Cell > Instance,
press I, or click on the Instance icon in the Drawing toolbar to open the Select Cell to Instance
dialog. You can also drag and drop a cell from the Design Navigator into the current file.

File Name of the active file (default) or any other file specified from the
drop-down list. In the drop-down list, red indicates a TDB file that is
open but not active, blue indicates a cross-referenced TDB file. To
view a file not currently open, click the Browse button.
Filter Use the Filter field to narrow the displayed list. When you type a
letter in the Filter field, L-Edit displays only those cell names
containing that character. When you type a second letter, L-Edit
displays only those cell names containing those two characters in that
same order, and so on. See “Filtering the List of Cell Names,” below.

L-Edit 14 User Guide Section 1 256


Chapter 7: Working with Cells Instancing Cells

Instance Name Name of the cell currently selected in the cell list. To select a cell,
highlight its name in the cell list. Double-click or click OK to create
an instance of the cell.

In the cell list, bold font indicates that a cell has been edited but the
changes have not been saved.

Note: Each instance in a cell must have a unique name after netlist
extraction. Before netlist extract, you can have two instances
with the same instance name. However, after netlist extraction,
L-Edit will force each instance to have a unique name.
Reference type Available when you instance a cell from a file other than the active
file—that is, an Xref file. You can instance cells from other files in
two ways:
ƒ External reference creates an Xref cell (see “Xref Cells” on
page 268).
ƒ Copy cell to current file copies the cell to the active file and
creates an instance of that local cell (see “Copying and
Duplicating Objects” on page 288).
If you try to instance a cell from an Xref file but the cell is already in
your active file, an instance will be made from the existing Xref cell.
Replace Replaces the instance in the layout area with an instance of the
specified cell. See also “Replacing Multiple Instances” on page 265.

When this option is checked, two other options become available:


ƒ Abutment—aligns the instance selected in the layout with the
replacement instance according to their abut ports. For a detailed
description, see “Aligning Instances by Abut Ports” on page 258.
ƒ Origin—aligns the instance selected in the layout with the
replacement instance according to their origins. With this option,
the replaced instance maintains the position of the previous
instance with respect to the origin (position 0,0) of the coordinate
system.
Show all cells When checked, shows all cells in the list, including hidden cells.
When unchecked, does not show hidden cells. You can make a cell
hidden by deselecting the Show in Lists option in Cell > Info—Cell
Information. Cells generated by a T-Cell are automatically hidden by
L-Edit.

If you have selected an instance in the layout of a cell that is not set to
Show in lists in Cell > Info, you must enable Show all cells to be
able to instance that cell.

L-Edit 14 User Guide Section 1 257


Chapter 7: Working with Cells Instancing Cells

Filtering the List of Cell Names

The letter “o” in the filter field displays


just the objects in the list that contain
“o”.

The letters “os” in the filter field display just the objects in
the list that contain “os”.

Aligning Instances by Abut Ports


When you select an instance and replace it, you have the option of aligning the selected instance and the
replacement instance according to their origins or abut ports.

An abut port is a box port with text that matches the Abutment field in the dialog SPR Core Setup—
General. When you replace an instance and specify alignment by abut port, L-Edit examines the
selected instance and the instance you are replacing it with to see if their abut ports match. The check of
abut port names is case-sensitive.

If the abut ports in the two cells have matching names and dimensions, L-Edit places the new instance
in exactly the same position as the previous one. If the abut ports in the two cells do not match, or if
there are no abut ports in either cell, L-Edit will prompt you with the following dialog for permission to
align on the instances on their centers.

For further information on abut ports, see “SPR Core Setup–General” on page 412.

L-Edit 14 User Guide Section 1 258


Chapter 7: Working with Cells Instancing Cells

Creating Arrays using Edit > Object(s)

An array is a two-dimensional arrangement of objects, offset in the vertical and/or horizontal directions
by specified amounts. A single instance is equivalent to a 1x1 array.

To create an array, select the instance and choose Edit > Edit Object(s), press Ctrl+E, double-click the
MOVE/EDIT mouse button, or click the edit object(s) button ( ).

In the Edit Object dialog, select the Instances tab.

In the Array parameters area, enter the horizontal and vertical repeat count and the X and Y spacing
(Delta) between array elements.

You can also create an array by grouping instances (see “Grouping and Ungrouping Objects” on page
280) or by duplicating objects (see “Copying and Duplicating Objects” on page 288.)

Creating Arrays using the Mouse

You can quickly create an array of any instance by selecting an edge or corner and using the Move
operation. The newly-created array will be an instance itself.

L-Edit 14 User Guide Section 1 259


Chapter 7: Working with Cells Editing Instances

Simply select the edge of an instance and drag the mouse to create an array in one direction or select a
corner to create an array in both the x- and y-directions, as illustrated below.

You can use Draw > Ungroup to convert the array to its component instances.

Editing Instances

With certain exceptions, to edit the contents of an instance you must edit the cell it refers to. An instance
cannot be reshaped, sliced, or merged, and vertices and edges cannot be individually edited.

However, an instance as a whole can be:

L-Edit 14 User Guide Section 1 260


Chapter 7: Working with Cells Editing Instances

ƒ Moved
ƒ Rotated or flipped (see “Reorienting” on page 286)
ƒ Edited textually (see “Editing Instances Using Text” on page 266)
ƒ Replaced (see “Replacing Instances” on page 264)

An instance cannot be edited or moved if it contains objects that are drawn on a locked layer. To edit or
move such an instance, you must first unlock any locked layers.

You can edit the contents of an instance or array in two ways:

ƒ Return to the original cell and make the desired changes there
ƒ Use Edit > Edit In-Place (see “Editing Instances “In-Place”” on page 265)

Changes made in an original layout cell (or auto-generated T-Cell) are automatically propagated to all
instances and arrays of that cell.

Flattening Instances

Cell > Flatten removes the hierarchy of a cell. This is done by replacing all instances with the objects
from the cell that they reference. The effects of this command cannot be reversed using the Undo
command.

To flatten an instance by only one level, select it and use Draw > Ungroup. This command can be
undone.

L-Edit 14 User Guide Section 1 261


Chapter 7: Working with Cells Editing Instances

Assigning Names to Instances (Cell > Assign Instance Names)

You can quickly assign unique names to individual instances throughout the hierarchy using the
Cell > Assign Instance Names command. Instance names are assigned using contents of the selected
prefix field, plus the Separator (if any), plus the Start at value.

Assign names to Use these buttons to set the range of the name changes:
ƒ Selected instances in this cell—renames just the instances in
the active cell that are selected.
ƒ Instances in this cell—renames all instances in the current cell.
ƒ Instances in this cell and hierarchy—renames all instances in
the current cell and each of the instances up the hierarchy to the
parent cells.
ƒ Instances in all cells—renames cell instances in the entire
design.
Custom prefix When checked, uses the characters in the entry field as the first part of
the instance name. You may enter characters of any type or leave this
field blank.
Use cell name as prefix When checked, uses the instance’s master cell name as a prefix for the
new name.
Separator Enter characters of any type that will be used to separate the cell name
from its “Start at” value. You may leave this field empty.

L-Edit 14 User Guide Section 1 262


Chapter 7: Working with Cells Editing Instances

Start at Enter the beginning value of the cell name suffix, which will
increment by one. You must enter a positive integer.
Example Shows an example of what the new cell names will look like.
Apply to Use these buttons to filter instance selection:
ƒ Only unnamed instances and conflicting instances—renames
just the instances that have either have no name or conflicting
names.
ƒ All Instances—renames all instances.
You can also filter by cell name using one, none or both of the
following fields. Use the browse button to pick from the list, and a
comma or semicolon to separate cell names.
ƒ Exclude instances of cells—if a cell name is in this list,
instances of that cell will not be renamed, regardless of any other
selection criteria.
ƒ Include Instances of cells—if a cell name is in this list,
instances of that cell will be renamed, regardless of any other
selection criteria.
The exclude list has priority over the include list—if a cell name is in
both lists, it will be excluded. If you enter an invalid cell name L-Edit
will display a warning.

After the operation is complete L-Edit opens a simple log of the name reassignments as shown below,
which lists the instances included in and excluded from assignment.

Assigning names to instances in all cells.


Prefix: TSM65
Separator: -
Start index: 99
Apply to: All instances
Exclude instances of cells:
(empty)
Include instances of cells:
(empty)

Cell Cell0

Cell Cell1

Cell Cell2
Cell2/U52 -> TSM65-99

Cell Cell3
Cell3/U53 -> TSM65-99

Cell Cell4
Cell4/cel7-C -> TSM65-99
Cell4/cel6-B -> TSM65-100
Cell4/cel6-A -> TSM65-101
Cell4/cel5-A -> TSM65-102
Cell4/cel1-A -> TSM65-103

Cell Cell5

Cell Cell6

Total renamed: 7

L-Edit 14 User Guide Section 1 263


Chapter 7: Working with Cells Editing Instances

Replacing Instances

Cell > Replace Instance replaces all instances of one type with another, either in the top level of a cell,
in a cell and down its hierarchy, or in all cells. Note that this operation cannot be undone.

1 selected instance Replaces just the one instance selected.


regardless of it’s parent cell
Instance to replace Instance of cell—use this pull-down menu to select the instance to be
replaced.

Pick one of these to set the scope of the replacement:


ƒ Top level of this cell—replaces instances in just the selected
cell.
ƒ This cell and its hierarchy—replaces in the selected cell and all
instances it comprises.
ƒ All cells in the TDB file—replaces every instance of the selected
cell in the entire design.
with instances of cell Name of the cell that will replace the original cell.
Replace instance with Origin aligns the origins of the two cell, Center aligns the center of
respect to cell the MBB of the two cells.

L-Edit 14 User Guide Section 1 264


Chapter 7: Working with Cells Editing Instances

Backup affected cells This option allows you to save the existing versions of the cells that
will change, with “_Backup1” as the default appended text.

Replacing Multiple Instances

You can also use the Edit Object—Instances dialog to replace multiple selected instances, whether the
same or different, with another instance. When multiple instance are selected, the Instance of cell and
Instance name fields will be disabled, but you can click on the Change button to open the Select Cell
to Instance dialog.

Use the cell list to pick the cell that will replace those selected in the layout (self-referential cells will be
disabled).

Editing Instances “In-Place”

Editing in-place allows you to edit an instance without opening the original cell. Note that editing
in-place is not available for instances that have been rotated by a non-orthogonal angle or for instances
of Xref cells. To edit an instance in place:

[1] Select the instance to edit.

[2] Choose Edit > Edit In-Place > Push Into, press Page Down, or click the edit in-place button ( ) to
“step down” into the instance.

After you have stepped down into an instance you can edit the contents of the instance as if you had
opened the original cell. The original cell will also show the changes made to the instance.

Editing a T-Cell instance in-place allows you to edit the contents of the auto-generated cell
corresponding to the selected instance. Editing a T-Cell instance in-place automatically propagates
changes to all instances of the T-Cell that were created with the same parameters.

While editing in-place you can only select or edit objects contained in the instance. This includes
regular geometry as well as other instances or arrays. Editing in-place does not allow you to change
T-Cell code.

You can step down multiple levels in an instance. Continue selecting instances and use Edit > Edit
In-Place > Push Into as described above.

To step up in the hierarchy and end the edit in-place session, use Edit > Edit In-Place > Pop Up, press
Page Up, or click the pop edit in-place button ( ) on the Standard toolbar.

When you are editing in-place, you can use Edit > Edit In-Place > View Top Cell or press the End key
to go to the home view of the top cell. Use View > Home or press the Home key to go to the home view
of the cell currently being edited in the instance hierarchy.

L-Edit 14 User Guide Section 1 265


Chapter 7: Working with Cells Editing Instances

Push to Object

You can step through the design hierarchy multiple instances at a time using Edit > Edit
In-Place > Push to Object, or pressing Ctrl+PageDown. Push to Object will push the editing context
though multiple hierarchy levels and will select the object that the mouse pointer is currently over.
Invoking Push to Object repeatedly will cycle though selecting objects that the cursor is over, moving
up and down hierarchy as necessary.

Selecting Edit > Edit In-Place > Pop to Top Cell, or Ctrl+Page Up will step up the hierarchy to the top
cell.

Note: Changes made to a T-Cell instance using Edit > Edit In-Place will be lost if you
regenerate the T-Cell.

Editing Instances Using Text

To edit an instance as an object, choose the Edit Object(s)—Instances tab. You can change the name of
the instance and factors that affect the display of the instance.

Instance of cell Name of the instanced cell. Disabled when multiple instances are
selected.

To instance a different cell, click the Change button to open the


Select cell to instance dialog.

L-Edit 14 User Guide Section 1 266


Chapter 7: Working with Cells Editing Instances

Instance name Identifies the selected instance or array. Disabled when multiple
instances are selected. L-Edit automatically assigns a name if you
leave this field blank.

Note: Each instance in a cell must have a unique name after netlist
extraction. Before netlist extract, you can have two instances
with the same instance name. However, after netlist extraction,
L-Edit will force each instance to have a unique name.
Coordinate system Sets two options controlling the rotation of selected instances and
their coordinate system.
ƒ Rotation angle—the angle by which the instance is rotated, in
increments up to .01 degree. The coordinate axes illustration is
updated as the angle is changed. Coordinates of arrays are
specified with respect to the instanced cell. If the underlying
subgrid is insufficient for accurate rendering of the rotated
instance, a warning appears, suggesting the grid be rescaled. This
occurs if the mouse snap grid parameter is less than 100. The
physical sizes of objects are unchanged.
ƒ Mirror—when checked, flips the instance coordinate system
horizontally. The coordinate axes illustration reflects the change.
Translation (Display units) The position of the instance with respect to the origin of the
instancing cell. When you first create an instance, L-Edit places it at
the center of the visible layout area. Moving the instance changes the
x- and y- coordinates.
Scale factor A fraction that defines the scaling of the instance relative to the
original cell. This factor is applied to the X and Y coordinates of all
objects in the instanced cell. Scaled instances maintain their
proportions and geometry in both GDSII and CIF formats, but CIF
output results in the creation of new cells which are scaled versions of
the originals.
Array parameters Enter number of times the instance is arrayed in the X and Y
Repeat count directions of the instanced cell’s coordinate system.
Array parameters Enter the X and Y spacing, respectively, between array elements.
Delta
L-Edit measures the distance from the lower left corner of each array
element in the instanced cell’s coordinate system. ∆X increases to the
right, ∆Y increases upwards. If both of these numbers are zero, all of
the array elements are placed exactly on top of one another.
Array parameters Press either or both of these buttons to set the corresponding ∆X or
Cell Width ∆Y field to the MBB of the selected instance.
Cell Height

Note: Instances are not affected by On layer or GDSII Data type changes in the Edit
Object(s) dialog.

L-Edit 14 User Guide Section 1 267


Chapter 7: Working with Cells Xref Cells

Xref Cells

An Xref cell is a cell that references a cell in another TDB file. Xref cells take all their attributes from
the source cell, and can be updated when the referenced cell changes.

Xref cells point down to the original cell in a chain of references. For example if File1:Cell(A) instances
File2:Cell(B) and File2:Cell(B) instances File3: Cell(C), Cell(A) Xref cells in File1 will point directly
to File3: Cell(3).

Xref cells have names of the form cellname:libraryname, where library name is the TDB file from
which the referenced cell originates. Within a local file, an Xref cell must have a unique name. If the
name of the Xref cell conflicts with an existing cell in the active file, L-Edit will prompt you to rename
the Xref cell.

Xref cells are identified with a “link” icon ( ) in the Design Navigator and other cell dialogs. You
can view and open Xref cells as you would other cells. However, Xref cells are read-only and cannot be
edited in the local tdb file. To modify one you must edit the source cell in the referenced file and then
also update the link.

Creating Xref Cells

There are many ways to create an Xref cell in your active file:

ƒ Use the Design Navigator to instance a cell from an existing library into either the layout window
or the Design Navigator of the active file
ƒ Use Cell > Copy with the option Move cell to current file
ƒ Instance a cell from another file using the external reference option (see “Creating Instances” on
page 283)

When you create an Xref cell, L-Edit keeps a local copy of the layout so you can view the cell even if
the link to the library is missing, but you cannot edit directly in the Xref cell.

By default, Xref cells are not shown in cell list dialogs in files other than where they originate.
However, you can choose to display them, either by selecting Show All Cells in the list dialogs or by
turning on the Show in Lists attribute of individual Xref cells.

When you create or update an Xref cell, it acquires the following information from the referenced cell:

ƒ The current version number of the cell


ƒ The date and time the cell was last modified
ƒ Geometric design changes to the cell, including changes on special layers or generated layers
ƒ Extract options

Managing Xref Cells

L-Edit keeps track of XrefFiles, which resolve the library name to the path to the library file. XrefFiles
are listed in the Setup > Design—Xref files dialog (see “Cross Reference (XRef) File Designation” on
page 85). This dialog can be used to redirect Xref cells to different versions of the same library.

L-Edit 14 User Guide Section 1 268


Chapter 7: Working with Cells Xref Cells

Note: L-Edit does not update Xref cells automatically when changes are made to their
source cells.

To update Xref cells, you must either:

ƒ Select Check XrefCells or Update XrefCells in the Setup > Design—Xref files dialog, to trigger
the desired action each time the TDB file is opened.
ƒ Execute Cell > Update Xref Cells
ƒ Open the Examine XrefCell Links dialog, select the XrefCells to update, and click Update. (See
“Managing Xref Cells” on page 268.)

L-Edit verifies that the referenced cell and the referenced file still exist. If they do not, or if their names
have been changed, L-Edit displays a warning.

In some cases, the local file and the referenced file may have conflicting layers, or technologies, as
shown in the example below. If such a conflict occurs, L-Edit will prompt you to resolve it.

Xref Cells and GDSII

L-Edit supports a library concept in the use of GDSII files. If a cell reference is in the GDSII file but the
cell’s contents (structure and layout) are not, then that cell is considered an Xref cell.

In this case, during GDSII import, L-Edit will create an Xref cell reference and will attempt to
automatically establish the link by locating the cell using its cell name in each Xref file. L-Edit searches
the TDB files in the order in which they are listed in the Setup > Design—Xref files dialog. Once
L-Edit finds a matching cell name, the link is established and no further searching is done.

If L-Edit does not find the referenced external cell in any of the cross-referenced TDB libraries, it will
create a blank cell and open the Examine XrefCell Links dialog to allow you to redirect the missing cell
definition at the end of the GDSII import operation (see “Updating Xref Cells,” below.)

Updating Xref Cells

The Examine XrefCell Links dialog lists all Xref cells in the file, and indicates any differences between
the Xref cells and the source cells they reference. You use this dialog to:

L-Edit 14 User Guide Section 1 269


Chapter 7: Working with Cells Xref Cells

ƒ Update one or more Xref cells


ƒ Unlink an Xref cell and convert it to an ordinary cell
ƒ Change a referenced cell by referencing a different cell in the same Xref file
ƒ Redirect an Xref cell by changing the filename and/or path to the referenced file

Use Cell > Examine XrefCell Links to open the Examine XrefCell Links dialog. (This dialog will also
open automatically whenever you open a TDB file that has Check XrefCells or Update XrefCells
selected in the Setup > Design—Xref files dialog.)

Cell The name of the Xref cell.


ƒ Yellow shading indicates that a difference exists between the
Xref cell and the referenced cell.
ƒ Black boldface type indicates that the referenced cell has a more
recent version or time than the Xref cell.
ƒ Red type indicates that the referenced cell no longer exists.
ƒ Green type indicates that the Xref cell has a more recent version
and time than the referenced cell.
Xref File The name of the library file that contains the referenced cell.
Local Version The version of the snapshot of the referenced cell.
ƒ Boldface type indicates that the Xref cell has a higher version
number than the referenced cell.
Ref. Version The current version of the referenced cell.
ƒ Boldface type indicates that the referenced cell has a higher
version number than the Xref cell.
Local Time The date and time of the snapshot of the referenced cell.
ƒ Boldface type indicates that Local Time is later than Referenced
Time.

L-Edit 14 User Guide Section 1 270


Chapter 7: Working with Cells Xref Cells

Ref. Time The date and time that the referenced cell was last modified.
ƒ Boldface type indicates that Referenced Time is later than Local
Time.

Status Displays the status of the Xref cell.

Control buttons are:

Update All Updates all Xref cells with the latest information from their source
files. (See “Updating Xref Cells” on page 269.) This function is the
same as the Cell > Update Xref Cells command.
Update Sel. Updates the selected Xref cell(s) with the latest information from their
source files.
Select All Selects all Xref cells in the list.
Unlink Unlinks the selected Xref cell (see “Unlinking Xref Cells,” below).
Report Exports a text file that shows all the data in the dialog.
Xref Files Opens the Setup > Design—Xref files dialog.
Show ƒ All—sets display to show all Xref cells.
ƒ Different—sets display to show only Xref cells that require
updating.
ƒ Problem—sets display to show only Xref cells that failed to
update or for which no reference file was found.

Unlinking Xref Cells

When you press the Unlink button, L-Edit opens a confirmation dialog and checks if the selected cell is
up to date.

If you proceed, L-Edit will remove the Xref properties and rename the cell by omitting the library name
suffix. the cell is effectively unlinked from its library.

If the Xref cell being unlinked is instanced in other Xref cells as well as regular cells, L-Edit will need
to create a copy of the former Xref cell instead. In this case the instances are redirected to the new cells,
which will be marked as “modified.”

If a cell with the new name already exists, you will be prompted to either use the existing cell or to
cancel the unlink operation. A separate dialog will open for each conflicting cell, but you can use the
Use Always button to automatically update the remaining conflicts.

L-Edit 14 User Guide Section 1 271


Chapter 7: Working with Cells Specifying the Fabrication Cell

The final report dialog show the number of cells that were unlinked, the number of Xref cells kept and
the number of local copies used. The unlinked cells will no longer appear in the Examine XrefCell
Links dialog.

Deleting Xref Cells

You can delete an Xref cell from the Design Navigator or by using Cell > Delete.

Updates to Xref Cell Behavior

Subsequent to L-Edit version 13, Xref cell behavior is updated so that the Move operation creates an
Xref link. The Copy operation does not create an Xref link.

When you drag and drop a cell from one Design Navigator to another using the left mouse button, it
copies the cell. The default radio button behavior in the Copy cell dialog is also copy. If you right-click
to drag and drop a cell, you can choose between the Move and Copy options.

If you unintentionally create an Xref cell, you can unlink it from the library it is referenced to as
described in “Unlinking Xref Cells” on page 271. If the unlinked cell is locked, you can unlock it by
right-clicking on the cell and unchecking the Lock option.

The implementation of Xref cells in files prior to version 13 is converted to a new Xref cell mechanism.
In most cases, this conversion will be transparent. If XrefFiles were not specified in the old TDB file,
they will need to be specified in the new design. In the (very rare) case that a circular dependency
existed between files in the TDB file that pre-dates version 13, this circular dependency will be broken,
and the cell hierarchy will have to be redesigned.

Specifying the Fabrication Cell

Before fabricating your design, you must supply your fabricator with the name of the cell that represents
the top level of your design. If you do not specify this information, your fabricator may incorrectly
identify this cell.

Identifying the fabrication cell instructs L-Edit to tag the cell as such when it exports a CIF file. The
identified cell becomes the only top-level cell in the CIF file. (This feature is only available for CIF
files. The GDS II format does not contain top-level cell information.)

Once a fabrication cell has been chosen, it will remain the fabrication cell until a new one is chosen,
even if it ceases to be the top-level cell in your design. Be sure to identify the fabrication cell before
writing a CIF file!

L-Edit 14 User Guide Section 1 272


Chapter 7: Working with Cells Specifying the Fabrication Cell

Identify the cell to fabricate by choosing Cell > Fabricate.

File Name of the active TDB file (default). All open TDB files are listed.
Cell The specified file’s component cells are displayed in the scrollable
list. Highlight a cell and click OK to tag it.

Finding I/O Pads in the Fabrication Cell

The Tools > Add-Ins > I/O Pad Crossreference... is a feature that can automatically generate the pad
coordinates for probe cards or bonding diagrams that are generally required by the packaging houses. It
analyzes the layout of the currently specified fabrication cell, and finds all I/O ports (pads) in that cell.
Pads are recognized as objects on the user-specified layer (typically Overglass).

Besides counting and reporting the number of pads, this command has two options:

ƒ An overlay cell can be generated. An overlay cell is a new cell (the user must specify the name of
this cell), containing box objects on the I/O pad recognition layer. Also, if a port is found within the
pad box, on any layer, on any level of hierarchy, that name becomes associated with that pad. The
overlay cell contains ports with this same name, assigned sizes and text directions that produce a
visually appealing layout. This pad overlay cell is useful for communicating with package houses /
bonding houses.

The second option is to create a Cross Reference disk file containing the pad list information. This file
can be in either of two formats, determined by the file extension specified. .txt files are simply
tab-delimited lines containing the pad position, the pad name, and the x- and y- locations of the center
of each pad. .aif files are in AIF format, a text format promoted by packaging houses (specifically

L-Edit 14 User Guide Section 1 273


Chapter 7: Working with Cells Specifying the Fabrication Cell

Amkor); in addition to pad names and location, the AIF file contains the dimensions of the pad. If the
AIF format is selected then the coordinates are relative to the middle of the cell's MBB, but if the TXT
file is selected then the coordinate space of the cell (i.e. the cell origin) is used.

L-Edit 14 User Guide Section 1 274


8 Working with Objects
1

Selecting Objects

Selecting an object specifies that subsequent editing operations affect that object specifically. More than
one object may be selected at a time.

By default, selected objects are outlined. To change the manner in which selection is displayed on any
given layer use “Layer Setup” on page 87.

L-Edit provides several ways to select an object using the selection tool on the Drawing toolbar:

Action Mouse button

Explicitly select an object or SELECT


set of objects before an
operation is performed.
Implicitly select an object in MOVE/EDIT
the process of performing an
operation on it.
Add an object to a set of EXTEND SELECT
selected objects. (Shift+SELECT)

Explicit Selection

To explicitly select an object, position the pointer over the object to be selected and click the SELECT
button. Any previously selected objects are automatically deselected.

Using a Selection Box


You can also explicitly select a set of objects by dragging a selection box around them, as follows:

; Position the pointer outside the set of objects to be selected.

; Drag the pointer with the SELECT mouse button held, forming a selection marquee around the objects.

; Position the opposite corner of the selection marquee so that the marquee completely encloses all the
objects to be selected but does not completely enclose any other objects, and release the SELECT
mouse button.

You can control the behavior of the selection box with the “Edge selection modes” (page 73) setup
option.

L-Edit 14 User Guide Section 1 275


Chapter 8: Working with Objects Selecting Objects

Disallowing Instance Selection


You can set instances so they cannot be selected by right-clicking on the Instance icon of the Drawing
toolbar. When

The instance icon showing that A red dot on the instance icon
icons can be selected. indicates that icons cannot be
selected.

Implicit Selection

If no other objects are selected, pressing and holding the MOVE/EDIT mouse button in or near an
object (within the selection range) selects that object and begins a move or edit operation.

Note that implicit selection is governed by the values set for selection range and deselection range. (See
“Selection” on page 72.) Depending on these values, you may accidentally include previously selected
objects (outside the deselection range) when you select another object implicitly.

There are two ways to avoid this potential problem:

ƒ Use Edit > Deselect All to deselect all objects before you perform implicit selection.
ƒ Set the deselection range appropriately.

Extend Selection

You can extend a selection by including another object or group of objects in the set of already selected
objects. Select the additional object(s) with the EXTEND SELECT (Shift+SELECT) mouse button.
Previously selected objects are not deselected.

Cycle Selection

When you click repeatedly within the selection range of several objects, L-Edit selects each object in
turn. The first click selects the closest object. The next click with the pointer in the same spot deselects
the object just selected and selects the next closest object (within the selection range).

Repeated clicks progressively select nearby objects until there are no more objects within the selection
range. The next click deselects all objects. The following click repeats the cycle, beginning with the
closest object.

A message at the left end of the status bar reports which object is selected.

Edge Selection

In addition to selecting whole objects, you can also select individual edges of one or more objects. The
following illustrations explain these techniques.

L-Edit 14 User Guide Section 1 276


Chapter 8: Working with Objects Selecting Objects

You can directly select the edge of an object by clicking it with the SELECT EDGES mouse button
(Ctrl+Right SELECT)

Select the edge of an object by clicking it with the SELECT EDGES mouse button
(Ctrl+Right SELECT)

You can also select an edge with a selection box around the desired edge(s).

If your setup option is Select edges only when fully enclosed by selection box, only edges that are
completely enclosed in the selection box will be selected.

Only the two edges that are


completely enclosed by the green
selection box are selected.

L-Edit 14 User Guide Section 1 277


Chapter 8: Working with Objects Deselecting Objects

If your setup option is Select edges when partly enclosed by selection box, L-Edit will select any
edge that is either partly or completely contained within the selection box.

If you have one or more edges selected and you want to select additional edges, use the Shift+SELECT
EDGES mouse button (Shift+Ctrl+Right SELECT).

Universal Selection

You can select all objects in the active cell by choosing Edit > Select All or pressing Ctrl+A.

Deselecting Objects

Deselecting objects causes them to no longer be available for editing operations.

A deselection range ensures that selected objects will not accidentally be deselected before an operation
is performed. For information on the deselection range, see “Selection Parameters” on page 82.

Explicit Deselection

To deselect a selected object without affecting other selected objects, place the pointer within the
selection range of the object and use the DESELECT (Alt+right SELECT) mouse button.

Clicking the DESELECT button near an object which is not selected or outside the selection range of all
selected objects has no effect.

L-Edit 14 User Guide Section 1 278


Chapter 8: Working with Objects Finding Objects

Implicit Deselection

Clicking the SELECT button outside the selection range of selected objects automatically deselects the
objects.

Hidden Deselection

When a layer is hidden, all selected objects on that layer are automatically deselected. This prevents
hidden objects from being moved or edited. These objects remain deselected even after they are made
visible again.

Universal Deselection

You can deselect all objects in the active cell by choosing Edit > Deselect All or pressing Alt+A.

Finding Objects

To search for geometric objects or for ports or instances of a particular name, choose Edit > Find, press
Ctrl+F, or click the find button ( ).

Find what A Box, Circle, Polygon, Ruler, and/or Wire search finds the object(s)
on the layer specified in the On layer field. A Port search finds ports
by name on the layer specified in the Port field. When no layer is
specified, L-Edit searches for the specified items on all layers. An
Instance search finds instances by the Instance name or the
originating Cell name specified in the Instance field.

L-Edit 14 User Guide Section 1 279


Chapter 8: Working with Objects Grouping and Ungrouping Objects

Change view after finding Controls the view when L-Edit finds the specified object.
ƒ Pan centers the view on the found object.
ƒ Pan & Zoom centers the view on the found object and zooms in
or out so that the object fills the active layout window.
ƒ No change leaves the view unchanged.

Match whole names only Instructs L-Edit to select only objects whose names exactly match the
specified text. Without this option, L-Edit selects any port or instance
containing the search term as a portion of the full name.
Match case Instructs L-Edit to perform a case-sensitive search.
Find Next Finds and selects the next matching item.
Find All Finds and selects all matching items at once.

During an L-Edit session, search parameters typed in the Find Object(s) dialog remain in memory and
are used for all subsequent Find operations. The search parameters are not cleared when you switch
between cells and files.

Find Next/Find Previous

When an object has been found, you can search for the next object or for the previously found object.
Choosing Edit > Find Next, pressing F, or clicking the find next button ( ) prompts L-Edit to search
for and select the next object satisfying the current search criteria.

Choosing Edit > Find Previous, pressing P, or clicking the find previous button ( ) prompts L-Edit
to search for and select the previous object satisfying the current search criteria.

If the Find command has not yet been executed, the Find Object(s) dialog is opened. The Find Next
and Find Previous operations use the current search criteria, even if those criteria were originally set in
a different cell or file.

The Find Next and Find Previous operations select objects in a cyclical manner. When the last object
matching the search parameters is found, L-Edit repeats the search, beginning with the first object
found.

Grouping and Ungrouping Objects

The Group command creates a new cell containing all objects and instances that are currently selected.
This new cell is instanced into the active cell. If the selected objects are all instances of the same cell
and meet additional criteria, the command will instead create an array as described in “Grouping
Instances to Create an Array” on page 281.

L-Edit 14 User Guide Section 1 280


Chapter 8: Working with Objects Grouping and Ungrouping Objects

Choose Draw > Group or press Ctrl+G to execute this command.

Group Cell Name The name of the new cell.


Origin Select an origin from these options. This is a persistent setting.
ƒ Top Left corner
ƒ Top right corner
ƒ Bottom left corner
ƒ Bottom right corner
ƒ Center
ƒ Parent cell origin
Cell info Includes Author, Organization, and Information (notes or messages)
for the new cell.

Grouping Instances to Create an Array

Any type of object (geometry, ports, instances) may be grouped. The command can also be used to
create an array from selected instances of the same cell, under certain conditions. The selected instances
must be:

ƒ Of the same cell.


ƒ Have no repeat values.
ƒ Have the same orthogonal transformations and regular translations. (Nonorthogonally rotated
instances cannot be grouped.)

In other words, Draw > Group (Ctrl+G) can transform a collection of instances that already have the
appearance and spacing of an array into a single object that L-Edit recognizes as an array. If these
conditions are met, an array is automatically formed. If not, L-Edit prompts for the name of the new cell
to be created from the selected objects.

L-Edit 14 User Guide Section 1 281


Chapter 8: Working with Objects Moving Objects

Ungrouping Instances

Draw > Ungroup (Ctrl+U) flattens the selected instances into their component objects, without deleting
the cell created by Draw > Group. When used on an array, the command “explodes” the array into its
component instances.

Draw > Ungroup works independently of the Group command, and can be used to remove an array
from any existing instance, however it was created. In other words, it works like Cell > Flatten, except
that Flatten will flatten an entire cell, including all its instances, but Ungroup will flatten just one level
down (only the selected instance or set of instances).

When you ungroup an array in L-Edit, each individual instance does not automatically inherit the
instance name. However, if more than one instances have the same instance name before netlist
extraction, L-Edit automatically assigns them unique instance names after netlist extraction by
appending “_n” to each of the remaining instances, incrementing n by one for each instance.

For example, if three instances have the instance name “CAP” in the layout, after netlist extraction one
of the instances will keep the instance name “CAP,” the second instance name is “CAP_2” and the third
instance name is “CAP_3.”

Undoing Draw > Group and Draw > Ungroup

Both Draw > Group and Draw > Ungroup can be reversed with the Undo command.

ƒ Executing Undo immediately after Draw > Ungroup results in the selected objects being grouped
again, as if the Draw > Group command had just been used for the first time.
ƒ Executing Undo immediately after Draw > Group, however, is not a complete reversal of
Draw > Group. The cell created by Draw > Group is not deleted.

Moving Objects

You can reposition and reorient objects in L-Edit graphically with the mouse and keyboard; textually by
entering coordinates and other values; or by using the command line interface or UPI macros.

Note: If an object is drawn on a locked layer, it cannot be edited or moved. To edit or move
such an object, you must first unlock the currently locked layer or layers.

Repositioning

To move an object, select it and position the pointer anywhere except on a vertex or edge of the selected
object. Holding the MOVE/EDIT button, drag the object to its new position.

Note that the MOVE/EDIT button function depends on the position of the pointer:

ƒ If the pointer is within the edit range set for the current design, an EDIT is performed.
ƒ If the pointer is beyond the edit range, a MOVE is performed.

L-Edit 14 User Guide Section 1 282


Chapter 8: Working with Objects Moving Objects

The edit range is specified in the Setup Design dialog under the Selection tab (see “Selection” on page
72). However, you can “force” a move rather than an edit operation using the Draw > Force Move
command (default hotkey Alt+M) (see “Force Move Mode” (page 285).

A single object can be implicitly selected and moved by clicking the MOVE/EDIT button in or near it
(but not on a vertex or edge) and dragging the object to its new position. The object is automatically
deselected after the move.

Multiple objects to be moved simultaneously must all be explicitly selected. The pointer may be
initially positioned anywhere, including on any vertex or edge. When moved, the selected objects’
relative positions are maintained.

To constrain movement to the horizontal or vertical directions only, hold the Shift key down while
using the MOVE/EDIT button.

Move By

You can move selected objects a specified distance using the Move dialog, which you open by choosing
Draw > Move By. “Behavior of the Move By Options” on page 284 illustrates the behavior of the two
options.

Selection relative to Moves the selected object(s) by the x, y values entered, relative to
current position their current position(s).
Selection by vector from Moves the selected object(s) as determined by a vector from the base
base point to absolute point to the absolute coordinate specified by the x, y value entered.
coordinates
Note: This option is only available when a base point is picked.

Round offsets to mfg grid When checked, snaps the user-supplied x, y values to the
manufacturing grid when moving object(s).

L-Edit 14 User Guide Section 1 283


Chapter 8: Working with Objects Moving Objects

Behavior of the Move By Options


Move by operation using Selection relative to current position (drawing mode):

Selection relative to current position moves the origin of the selection by ∆x, ∆y relative to
the origin of the current position (-20, 30 in this example).

Move by operation in Selection by vector from base point to absolute coordinates (base point
mode):

-20, 30

In Base Point mode the Move By operation moves the selection along a vector drawn from the
base point position to the absolute position indicated by the x, y coordinates entered (-20, 30 in
this example).

Nudge

Use this feature to incrementally move (nudge) a selected object or objects a predetermined distance.
The movement increment is the same is every direction.

You specify nudge distance in the Nudge amount field of the Setup Design—Drawing dialog (see
“Drawing Parameters” on page 84)

Command Shortcut

Draw > Nudge > Left Ctrl + ←

Draw > Nudge > Right Ctrl + →

Draw > Nudge > Up Ctrl + ↑

Draw > Nudge > Down Ctrl + ↓

L-Edit 14 User Guide Section 1 284


Chapter 8: Working with Objects Moving Objects

Force Move Mode

In normal drawing mode, the EDIT command is active when the cursor is within an object’s edit range
parameter (see “Edit range” (page 83)), and the MOVE command is active when the cursor is outside
that range. When you use the Draw > Force Move mode (default hotkey Alt+M) L-Edit will perform a
MOVE operation regardless of the cursor position (the status bar will show Mode: Move.)

If no objects are selected prior to using this command, the move adheres to the selection range for
implicit selection—nothing will happen unless you are within the selection range. After the move
operation is finished, L-Edit reverts to normal drawing mode (Mode: Drawing in the status bar), or you
can cancel the force move operation by pressing ESC.

Base Point Mode

The base point feature enables a user-specified reference point for editing operations, which change as
follows when L-Edit is in base point mode. After an editing operation is performed in base point mode,
L-Edit will return to the previous mode.

Operation Result

Move Moves the selection from the base point to the current cursor location.
Edit Edits (stretches) the selection from the base point to the current cursor
location.
Rotate Rotates the selection around the base point.
Flip Flips the selection with respect to the base point.
Instance Instances the cell with its origin at the base point.
Cut, Copy Pastes the object at the base point. You can also use the base point to
set the origin of the object being cut or copied.

Setting the Base Point


The base point toolbar displays the location of the base point in an editable field you can use to type in
coordinates.

coordinate entry field

Draw > Base Point > Pick Base Point icon - use to set a base point with the cursor.
Draw > Base Point > Use Base Point icon - use to toggle base point mode on and off.

To simultaneously place the base point at the cursor’s current location and turn on base point mode, use
Draw > Base Point > Place Base Point at cursor or the keyboard shortcut Ctrl+Q. To use your cursor
to pick a base point, use the icon or Draw > Base Point > Pick Base Point.

Once a base point is set you can toggle the mode on and off with the icon , the keyboard shortcut
Shift+Q, by using Draw > Base Point > Use Base Point.

Move and Copy/Paste Operations in Base Point Mode


When you cut or copy and then paste an object(s) in base point mode, L-Edit uses the base point as the
reference point. When you paste in base point mode but no reference point was set explicitly during the
last copy operation, the lower left corner of the copied object(s) is pasted at the base point.

L-Edit 14 User Guide Section 1 285


Chapter 8: Working with Objects Moving Objects

The base point feature can also be used to control positioning of a pasted object during a cut or copy
command. To do so, select an object, then place the base point at the desired location. The origin of the
object will be pasted at the base point rather than at the middle of the layout window (the normal
default).

You can also use the base point to pick an origin for an object before the cut/copy command. You must
use the base point to pick a paste origin point, otherwise L-Edit will simply paste the object using its
default origin in the default location.

Copy/Cut... Paste...

base point ON base point ON:


The base point is the reference during the copy operation and that
reference point is the base point during the paste operation.
base point ON base point OFF:
The base point is the reference during the copy operation but the
center of the copied objects is pasted at the center of the screen.
base point OFF base point ON:
The the lower left corner of the copied objects is pasted at the base
point.
base point OFF base point OFF:
Normal cut/paste behavior.

The move command (middle mouse button) moves the selected objects according to the values set in
the Move dialog (see “Behavior of the Move By Options” on page 284).

Reorienting

These commands change the orientation of selected objects.

Command Shortcut Button Description

Draw > Rotate > 90 R Rotates the selected object 90°


degrees counterclockwise about its geometrical
center.

Draw > Rotate > Rotate Ctrl+R Opens a dialog to rotate the selected object
counter-clockwise by n degrees with respect
to a specified point.


(x, y)

L-Edit 14 User Guide Section 1 286


Chapter 8: Working with Objects Moving Objects

Command Shortcut Button Description

See “Specifying Rotation Parameters” on


page 287 for instruction in using the
Draw > Rotate > Rotate command.

Draw > Flip > Horizontal H Flips the selected object about the vertical
axis through its geometrical center.

Draw > Flip > Vertical V Flips the selected object about the horizontal
axis through its geometrical center.

When multiple objects are selected, the rotation or flip occurs about the geometrical center of the
selected group.

Specifying Rotation Parameters

The Rotate Selected Objects dialog allows you to specify the angle and reference point around which
to rotate the selected object.

To access this dialog, select an object or objects, then choose Draw > Rotate > Rotate or press Ctrl+R.

Enter a value (degrees) in the Rotation angle field to specify the angular distance around which to
rotate the selected object. The angle must be between -360 and +360 degrees, exclusive. The rotation
angle can have up to 6 decimals of accuracy.

Note: You can use the up and down arrows to step through multiples of 90 degrees between
-270 and 270. Other values can be typed directly in the editing field.

You can also use the base point feature (see “Base Point Mode” on page 285) to specify the reference
point around which L-Edit will rotate the selected object(s).

L-Edit 14 User Guide Section 1 287


Chapter 8: Working with Objects Copying and Duplicating Objects

Moving Objects from One Layer to Another

Use Setup > Merge Layers to transfer all objects on one layer, regardless of cell, onto another layer.

Merge layer Select the layer from which objects will be moved. (Only those layers
that have geometry on them are included in the drop-down list.)
Into layer Select from the list of defined, generated (in red), and special (in
green) layers to which objects will be moved.

Copying and Duplicating Objects

You can copy objects in two ways. Note that to copy multiple objects simultaneously, you must
explicitly select them.

Copying Objects

Chose Edit > Copy, press Ctrl+C, or click the copy button ( ). The copy operation saves a copy of
the selected object(s) to the internal clipboard. The copied objects must be placed using the paste
operation command (see “Pasting Objects” on page 289).

Duplicating Objects

Chose Edit > Duplicate, press Ctrl+D, or click the duplicate button ( ). The Duplicate operation
copies the selected object(s) and pastes them, as the current selection, exactly over the original(s) in the
active cell. The Duplicate command also saves the x- and y- translation when you drag the duplicated
objects to a new position immediately after they are duplicated. (The duplicate objects remain selected
until you explicitly select something else.)

Since the Duplicate command stores the offset as well as the objects, subsequent use of the command
allows you to create regular structures quickly and accurately.

Keep in mind that multiple placement of the same object can be useful in making arrays, but it can also
result in designs that use a great deal of memory and are difficult to update. Multiple placement of the
same object should not be used as a substitute for good hierarchical design using instantiation.

Duplicate does not update the contents of the internal L-Edit clipboard, so objects placed on the
clipboard using Copy can still be pasted to layout.

L-Edit 14 User Guide Section 1 288


Chapter 8: Working with Objects Pasting Objects

Copying to the Clipboard

Large areas of the layout can be copied as a bitmap to the external Windows clipboard by choosing
Edit > Clipboard > Copy Window. These bitmap images can be pasted into other applications, but they
cannot be pasted back into L-Edit. The resolution of the bitmap is the same as that of the screen.

Pasting Objects

L-Edit maintains an internal clipboard that stores cut and copied objects. It can be used to transfer
objects between cells or between layers within a file.

Choosing Edit > Paste, pressing Ctrl+V, or clicking the paste button ( ) places the stored object(s) in
the center of the active layout window, unless the Paste to cursor feature (see below) is enabled.

Choosing Edit > Paste to Layer or pressing Alt+V also places the stored object in the center of the
layout window of the active cell (unless the Paste to cursor feature is enabled). In addition, this
command places the object on the currently selected layer. If you select multiple objects on separate
layers, they will all be pasted to the single layer specified with the Paste to Layer command. Pasted
objects are automatically selected after execution of the paste command.

The contents of the internal clipboard can be pasted multiple times. Objects remain in the clipboard
until another object is cut or copied, or until the file is closed.

Note: When you paste an object to a layer, L-Edit will overwrite the object’s GDSII data
type with the data type of the target layer. If the target layer has no GDSII data type
assigned, the pasted object will retain its original data type.

Paste to Cursor Feature

If the Paste to cursor box in the Setup Application—General dialog (see “General” on page 62) is
turned on, the contents of the clipboard appear in the layout window but move with the pointer until any
mouse button is clicked. The objects are then positioned at the location of the cursor when the paste
command is executed. Before clicking the mouse button, you can flip or rotate the objects horizontally
or vertically by using the keyboard shortcut commands. (See “Reorienting” on page 286 for a list of
default shortcut commands.)

You can also set a base point to control the origin of the copy or copied object and the location of the
origin to which it is pasted. See “Base Point Mode” on page 285.

Deleting Objects

You can remove objects from the layout in two ways:

ƒ Choosing Edit > Cut, pressing Ctrl+X, or clicking the cut button ( ). The Cut command puts the
deleted objects into the internal clipboard. From there they can be restored to the current cell or
pasted into another cell in the same file (see “Pasting Objects” on page 289).

L-Edit 14 User Guide Section 1 289


Chapter 8: Working with Objects Undoing Operations

ƒ Choosing Edit > Clear, or pressing Delete or Backspace. The Clear operation does not put the
deleted objects into the internal clipboard. They can be restored to the active cell only with the
Undo command (see “Undoing Operations,” below).

Undoing Operations

L-Edit maintains a list of edited objects and operations on a per cell basis in the undo buffer. Choosing
Edit > Undo, pressing Ctrl+Z, or clicking the Undo button ( ) reverses the last operation performed
in a cell. You may continue undoing your operations in reverse order, one at a time, up to and including
the first operation on the cell since opening or saving it. L-Edit maintains a separate undo buffer for
each cell. Only those operations that directly affect objects—drawing, copying, editing, moving,
instancing, grouping, flipping, rotating, slicing, and merging—can be undone.

Undo reverses mouse-based draw, move, edit, and copy operations, and the following commands:

ƒ Edit > Cut


ƒ Edit > Paste
ƒ Draw > Group / Ungroup
ƒ Draw > Rotate
ƒ Draw > Flip > Horizontal / Vertical
ƒ Draw > Slice > Horizontal / Vertical
ƒ Draw > Merge
ƒ Cell > Instance

The following operations clear the undo buffer. Editing performed prior to any of these operations
cannot be reversed with the Undo command.

ƒ File > Save


ƒ File > Save As
ƒ File > Replace Setup
ƒ Cell > Revert Cell
ƒ Cell > Flatten
ƒ Tools > Generate Layers

Redo

You can reverse an Undo command by choosing Edit > Redo, pressing Ctrl+Y, or clicking the redo
button ( ).

After an Undo operation is performed, the object or operation goes into a redo buffer, also maintained
by L-Edit on a per-cell basis. After executing an Undo command, you can use the Redo command to
revert the cell to its state before the Undo command was executed.

Like the undo buffer, the redo buffer is maintained separately for each cell. The redo buffer is subject to
the same guidelines and restrictions as the undo buffer, and it is cleared by the same methods. When
editing continues, the redo buffer is cleared. The depth of both buffers is limited only by computer
resources.

L-Edit 14 User Guide Section 1 290


9 Generated Cells
1

L-Edit has several different processes for automatically generating cell or device layout that can also
include electrical parameters, layer configurations and design rules.

ƒ T-Cells are cells that are generated from UPI code. Because L-Edit’s UPI is so powerful, T-Cells
can be very complex. L-Edit also provides a callback feature that can check the validity of T-Cell
parameters, or modify other values when a related one changes.
ƒ T-Cell Builder lets you automatically create simple T-Cell code views from layout geometry. The
resulting T-Cells are parameterized, and can be modified with these parameters.

Generating Layout from Code—“T-Cells”

Cells that contain layout-generating code are called T-Cells. T-Cells are parameterized, allowing a
single T-Cell to represent different layout configurations when you generate instances of that T-Cell
that have different parameter values.

Creating T-Cells

The T-Cell Parameters tab of the Create New Cell dialog contains a table in which you can list
parameters as input to generate T-Cell instances. For example, parameters for a decoder generator cell
might include a user-specified number of outputs, number of bits, and pitch, and presence or absence of
spacers.

To create a new T-Cell, use Cell > New to enter parameters in the list on the T-Cell Parameters tab.
You can also create a new T-Cell by right-clicking on a cell in the Design Navigator and choosing
Create/Update T-Cell Code. If the cell already has T-Cell code, L-Edit will display a warning and ask
if you want to replace the existing code.

L-Edit 14 User Guide Section 1 291


Chapter 9: Generated Cells Generating Layout from Code—“T-Cells”

T-Cell Parameter Types


To enter a new parameter, first type a parameter name in the Name field. In the Type field, use the
drop-down list provided, or type the first letter of a data type to select it. T-Cell code can accept the
following data types: Boolean, Integer, Float, String, or Layer and HStretch or VStretch.

The HStretch and VStretch types set cell behavior when you select and drag an edge.

The default select-and-drag behavior is to replicate the T-Cell instance, creating an array:

When you set the parameter Type to HStretch or VStretch, the edge select-and-drag behavior is to
extend the dimension of that parameter:

In the Default Value field, enter the default value of the parameter. For Boolean and Layer data types,
a drop-down list of possible entries is provided.

T-Cell Code Templates

After you have finished entering parameters in the T-Cell Parameters tab, click OK. L-Edit will
generate a template that is the skeleton of your T-Cell code.

L-Edit 14 User Guide Section 1 292


Chapter 9: Generated Cells Generating Layout from Code—“T-Cells”

This T-Cell template contains the outline for a UPI macro based on the parameters you’ve entered.
Follow the directions in the comments to complete the code. You can encode your T-Cell with
additional UPI functions if desired. T-Cell are precompiled as DLLs, and the L-Edit compiler supports
C++. The precompiler will delay performance the first time the code runs, but subsequent cell
placement will be much faster.

/*******************************************************************************
* Cell Name: Cell0
* Creator : Tanner EDA Application Engineer
*
* Revision History:
* 7 May 2009Generated by L-Edit
*******************************************************************************/
module Cell0_code
{
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include "ldata.h"

/* Begin -- Remove this block if you are not using L-Comp. */


#include "lcomp.h"
/* End */

/* TODO: Put local functions here. */


void Cell0_main(void)
{
/* Begin DO NOT EDIT SECTION generated by L-Edit */
LCell cellCurrent = (LCell)LMacro_GetNewTCell();
const char* gizmo = (const char*)LCell_GetParameter(cellCurrent, "gizmo");
double blob = LAtoF((const char*)LCell_GetParameter(cellCurrent, "blob"));
/* End DO NOT EDIT SECTION generated by L-Edit */

/* Begin -- Remove this block if you are not using L-Comp. */


LC_InitializeState();
LC_CurrentCell = cellCurrent;
/* End */

/* TODO: Put local variables here. */

/* TODO: Begin custom generator code.*/

/* End custom generator code.*/


}
}
Cell0_main();

L-Edit 14 User Guide Section 1 293


Chapter 9: Generated Cells Generating Layout from Code—“T-Cells”

Opening T-Cells

T-Cells are shown with a generator icon ( ) next to them in cell lists. Note that Auto-generated cells
are automatically hidden from the Design Navigator and other cell lists. To show auto-generated cells,
select Show All Cells in the Design Navigator.

To open a T-Cell, choose Cell > Open (shortcut O) and select T-Cell Code in the Open view menu.
You can also open a T-Cell by right-clicking in the Design Navigator and choosing Create/Update
T-Cell Code.code templates for L-Edit will open a text window containing the T-Cell code for the cell,
or a blank code window if the selected cell is not already a generator cell.

If an instance is selected in the layout, its name will be highlighted in the Open Cell dialog. If multiple
instances are selected, the referenced cell of the first instance in the selection will be highlighted. If no
instance is selected, the last cell opened will be highlighted.

Closing T-Cells

The Close Cell As dialog contains a field to enter the new cell’s name.

L-Edit 14 User Guide Section 1 294


Chapter 9: Generated Cells Generating Layout from Code—“T-Cells”

When you use Cell > Close As to copy a T-Cell, all changes to the T-Cell code view are preserved in
both the original cell and the copy, regardless of when the last save operation occurred.

Note: Changes made to a T-Cell instance using Edit > Edit In-Place will be lost if you
regenerate the T-Cell. The Revert Cell command does not reverse changes to T-Cell
code.

Instancing T-Cells

An instance is a representation of a cell in a particular location and orientation in another cell. An


instance can reference a cell composed of primitives, other instances, a combination of primitives and
instances or a cell generated from T-Cell code, also referred to as a generated cell. A T-Cell does not
have geometry until it is instanced.

A quick way to instance a T-Cell is to click and drag it from the Design Navigator into a new cell. When
you instance a T-Cell for which parameters have been defined, L-Edit opens the T-Cell Parameters
dialog where you can accept or edit the existing parameter values.

When instancing a T-Cell, L-Edit first generates a new cell containing the geometry specified by the
T-Cell. This cell, called an auto-generated cell, is the source cell for the instance. The auto-generated
cell is named by appending parameter values to the original T-Cell name. For example, the dialog
shown below creates an instance of an auto-generated cell, named
MatchedDualCapacitorArray_Auto_12_4_16. Changes made to a T-Cell, which L-Edit uses to
generate source cells, cause all auto-generated cells and their instances to be flagged “out of date.”

L-Edit 14 User Guide Section 1 295


Chapter 9: Generated Cells Generating Layout from Code—“T-Cells”

You can update T-Cell instances using the Cells > Regenerate T-Cells command (see “Regenerating
T-Cell Instances,” below).

The T-Cell generator


“MatchedDualCapacitorA
rray” has T-Cell
parameters x, y, and
size.

When instanced into


Cell2 with x=16, L-Edit
creates the instance and
names it
“MatchedDualCapacitorA
rray_Auto_12_4_16” as
shown below.

Regenerating T-Cell Instances

T-Cell instances are references to auto-generated cells, which contain geometry generated by the T-Cell
with a specific set of parameters. When you edit T-Cell instances using Edit > Edit In-Place, changes
are only propagated to other instances that were created with identical parameter values.

To edit the contents of all instances of a T-Cell, open the original T-Cell and make the desired changes.
When you are finished, instances of the T-Cell will be flagged “out of date.” To propagate changes in
the T-Cell to its instances, select Cells > Regenerate T-Cells from the L-Edit menu.

The top of the Regenerate T-Cells dialog gives a message indicating if the most recently viewed T-Cell
is out-of-date. To regenerate (update instances of) T-Cell, select one of the following options:

All T-Cells in the active file Replaces all T-Cell instances in the active file with new instances that
reflect the most current version of each T-Cell. Instances are
re-created with the same parameters they originally used.

L-Edit 14 User Guide Section 1 296


Chapter 9: Generated Cells Generating Layout from Code—“T-Cells”

All out-of-date T-Cells in Updates only those T-Cell that are flagged “out-of-date.” A T-Cell is
the active file out-of-date when it contains changes that have not been propagated to
its instances.
All cells generated from Updates only those instances that refer to the most recently active
TCell_Name T-Cell.

When Confirm each cell is checked, L-Edit will prompt you to confirm updates of each T-Cell and
parameter set. One or more instances that represent a given T-Cell and parameters are listed using the
naming convention:

Name_Auto_param1_param2_...

Parameters are listed in the order in which they appear in the T-Cell Parameters dialog. (See
“Instancing T-Cells” on page 295.) String parameters are not included in T-Cell names. For example,
the dialog shown below requests permission to update all instances of the T-Cell
MatchedDualCapacitorArray that were created with parameters 4, 4, and 16,

Note: Regenerating T-Cell instances replaces all auto-generated cells. Therefore, all
changes made to auto-generated source cells (using Edit > Edit In-Place) will be lost.

T-Cell Callbacks

The UPI function “LCell_GetTCellPreviousValue” (page 1209) lets you retrieve the previous value of
a T-Cell parameter, which is the value used the last time the T-Cell was created or modified. This
function has an identical signature to LCell_SetTCellDefaultValue which can be used in conjunction
with LCell_GetTCellPreviousValue to implement “callbacks,” in which a T-Cell can validate and
modify the parameters that are passed to it.

LCell_GetTCellPreviousValue is used to obtain the previous value of a T-Cell parameter the last time
the T-Cell was created or modified. If the T-Cell is newly created, an empty string is returned.

The following examples show how LCell_GetTCellPreviousValue can be used to determine whether a
particular parameter has changed since the previous invocation of the T-Cell.

int HasChanged( LCell pCell, char *param_name )


{
char old_val[1024], new_val[1024];
LCell_GetTCellPreviousValue(pCell, param_name, old_val, sizeof(old_val));
LCell_GetTCellDefaultValue(pCell, param_name, new_val, sizeof(new_val));
return strcmp( old_val, new_val );
}

Then, in the main T-Cell code body, we can use this information to modify other parameters. For
example, suppose we had a resistor that was parameterized by R, L and W. The values of these three

L-Edit 14 User Guide Section 1 297


Chapter 9: Generated Cells Generating T-Cell Code from Layout —“T-Cell Builder”

parameters need to be consistent, so we need to modify one of them to enforce this consistency. One
possible solution would be the following:

// update new parameters accordingly


char new_val[1024];
if ( HasChanged(cellCurrent, "L" ) && HasChanged(cellCurrent, "W" ) )
{
R = L / W * resistivity;
sprintf( new_val, "%g", R );
LCell_SetTCellDefaultValue(cellCurrent, "R", new_val);
}
else if ( HasChanged(cellCurrent, "L" ) )
{
W = L * resistivity / R;
sprintf( new_val, "%g", W );
LCell_SetTCellDefaultValue(cellCurrent, "W", new_val);
}
else
{
L = W * R / resistivity;
sprintf( new_val, "%g", L );
LCell_SetTCellDefaultValue(cellCurrent, "L", new_val);
}

Generating T-Cell Code from Layout —“T-Cell Builder”

The T-Cell Builder, accessed from the Cell > T-Cell menu, allows you to automatically generate T-Cell
code views from existing layout views.

The resulting T-Cells are parameterized, and contain geometry elements whose appearance can depend
on these parameters. Because you do not need to write any UPI code directly, this feature is very useful
if you are unfamiliar with UPI programming.

A cell must contain stretch ports in its layout to trigger the T-Cell builder. A T-Cell code view is
constructed when you indicate the layer on which the stretch ports are drawn and analyze the geometry
of the cell by executing the Cell > T-Cell > Construct T-Cell command. You can then keep or overwrite
the parameters in that code view.

Once the cell has a code view, you can create parameterized layout by instancing it like any other
T-Cell. Each time you add or change a parameter you must execute Cell > T-Cell > Construct T-Cell to
apply the changes.

The T-Cell Builder can create parameters to either stretch (the default), move or repeat geometry
according to the values you enter. The T-Cell Builder can also construct a parameter that sets the layer
on which geometry is drawn, and a parameter for simple TRUE/FALSE conditions by which geometry
is included when the T-Cell is instanced.

Defining Stretch Ports for the T-Cell Builder

The stretch axis parameters are defined by special stretch ports on a user-selected layer. These ports
define the name of the parameter that controls the stretch, the direction of the stretch, and the default
value of the stretch. These ports may be drawn on any layer, but you must choose that layer as the
stretch port layer when you construct your T-Cell.

L-Edit 14 User Guide Section 1 298


Chapter 9: Generated Cells Generating T-Cell Code from Layout —“T-Cell Builder”

Stretch ports must be line ports (i.e. have exactly one dimension and be non-zero). Stretch ports control
stretch perpendicular to the direction in which they are drawn. In T-Cell builder processing, the port line
is extended to the cell perimeter in both directions and any object it intersects is stretched by the value
indicated in the port text. Objects that are entirely on one side of the port may be moved, depending on
the direction of the stretch.

The default value of the parameter is taken from the size of the port, or by declaring it in the port string,
in the form “parameterName=defaultValue.”

When stretch ports are incorrectly defined or not defined at all, L-Edit displays this message:

Constructing a T-Cell with Stretch Parameters—MOSFET Example

A commonly-desired operation is for one or more dimensions of an object to be set by a cell parameter.
For example, a simple MOSFET is often parameterized by its channel length and width. To create a
parameterized MOSFET T-Cell, you first create the cell layout shown below.

Note the one-dimensional ports “length=2” and “width=5.” These ports, which can be on any layer you
select, define the axes with respect to which cell elements will be stretched.

Stretching is the default operation if no other is specified.

The one-dimensional
ports are the
reference points for
stretch operations.

The channel resulting from the Boolean


operation "Active AND Poly" has a width of
5 and length of 2.

Once you have the raw geometry and ports in a cell, you can invoke Cell > T-Cell > Construct T-Cell to
generate T-Cell code from that layout.

L-Edit 14 User Guide Section 1 299


Chapter 9: Generated Cells Generating T-Cell Code from Layout —“T-Cell Builder”

L-Edit will prompt you to enter the Stretch port layer, which must be the layer on which the stretch
ports are drawn. If there is preexisting T-Cell code, L-Edit will also confirm that you want to overwrite
it.

After L-Edit constructs the T-Cell code you can instance the MOSFET into layout using the
conventional Cell > Instance command, and change the values of the parameters as desired.

Instance of the T-Cell


MOSFET with width=20 and
length=2.

Parameter Types in the T-Cell Builder


T-Cell builder parameters are characterized by certain types, as shown in the menu below. The
HStretch and VStretch types are described in “T-Cell Parameter Types” on page 292.

L-Edit 14 User Guide Section 1 300


Chapter 9: Generated Cells Generating T-Cell Code from Layout —“T-Cell Builder”

Repeating Elements with the T-Cell Builder

To repeat rather than stretch elements in a constructed T-Cell, first select the layout objects you want to
repeat, then invoke Cell > T-Cell > Define Repeat Group.

Repeat ƒ Stretch—this is the default, and confirms that the object is free to
Horizontal and Vertical stretch in the indicated direction as long as it is intersected by a
stretch axis.
ƒ None—if selected, the object in question is neither repeated, nor
is it stretched. This choice is appropriate for items such as
contacts, which must remain a specific size.
ƒ Count—the parameter is taken to be an integer, and determines
the number of times the object is repeated.
ƒ Fill—the object is iterated to fill the distance specified by the
named parameter.
Parameter Name The parameter that controls the selected option.
Stepping Distance The pitch between adjacent repeated objects.
Repeat Direction The direction in which the operation will occur with respect to the
original object. In the Horizontal direction, objects are repeated or
stretched to the left, right, or equally from the center (left and right).
In the Vertical direction, objects are repeated or stretched up, down or
equally from the center (up and down).

Returning to the MOSFET example, you would select the four contact boxes, use Cell > T-Cell > Define
Repeat Group to enter the repeat parameters shown in the Define Repeat Group dialog above, use

L-Edit 14 User Guide Section 1 301


Chapter 9: Generated Cells Generating T-Cell Code from Layout —“T-Cell Builder”

Cell > T-Cell > Construct T-Cell to update and apply the parameters, and then instance the cell.
Entering a width parameter value of 20 creates the mosfet_Auto_20_2 cell shown below.

Setting the Layer as a T-Cell Builder Parameter

The layer on which an object is placed can be made into a parameter of the T-Cell by selecting the
object and invoking Cell > T-Cell > Choose Layer. Only the objects that are selected when you open
the Choose Layer dialog will have their layer parameterized.

T-Cell parameter Enter a name for the layer parameter.


Default layer Pick a default layer for the choose layer parameter.

For example, in the resistor shown below, one segment is selected for Choose Layer parameterization.

L-Edit 14 User Guide Section 1 302


Chapter 9: Generated Cells Generating T-Cell Code from Layout —“T-Cell Builder”

Once the T-Cell is (re)constructed you can instance cell res and choose the layer on which the segment
is drawn.

Defining Conditional Inclusion as a T-Cell Builder Parameter

You can use T-Cell builder to define parameter for an object such that it will be included or excluded
based on a Boolean or logical condition.

A conditional exclusion can also be based on a logical expression if the expression uses a parameter that
has been previously defined by ports on the layout. If the condition is true then the object is included.
For example, if you have a stretch port width you can use the logical expression width > 10. (In this
case the default value is not relevant.)

Condition for Inclusion Enter a name for the condition or an expression that uses defined
parameters.
Default value Select FALSE or TRUE as a default value.

For following example, in cell MOSFET select the box on layer HV Oxide, define a condition
parameter called HighVoltage, and regenerate the T-Cell.

L-Edit 14 User Guide Section 1 303


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

When you instance MOSFET and select value FALSE for parameter HighVoltage, the selected box will
not be drawn.

Finding Objects that have T-Cell Builder Parameters

This function selects all the objects in a builder T-Cell for which a repeat group, conditional inclusion or
layer parameter is defined. It is a useful shortcut since there is no visual indication of the objects in a
T-Cell that have parameters

Automatically Generated Contact Cells and Vias

L-Edit includes a feature for automatically generating contact cells or vias with special coding that
speeds routing. You can import these cells from Virtuoso or define them in L-Edit.

You can instantly generate an array of these cells, or use them to create a guard ring, a collection of
contact cells or vias forming a perimeter around the geometry you have selected. The guard ring feature
can also produce geometry covering the entire area of the selected objects (a Boolean OR union).

L-Edit 14 User Guide Section 1 304


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

Creating Generated Contact Cells

Use Draw > Contacts > Define Contact Cell to open the Define Contact / Guard Ring Cell dialog.

Cell name Enter or edit the name of the contact cell.


Via Layer Select a Layer for the contact or via, and enter X- and Y- values for
the Via size and Pitch (the minimum distance between the two
contacts.)
Lower Layer Select the lower contact layer from the Layer menu. The value in
Surround via by is the minimum amount by which the layer must
surround the contact.

When L-Edit generates a guard ring, the default is to merge contact


cell geometry on every layer. Check Fracture (for any layer but the
via layer) to generate separate geometry on that layer for each
individual contact cell. (See “Using the Fracture Option” on page 306
for an illustration.)

L-Edit 14 User Guide Section 1 305


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

Upper Layer Select the upper layer from the Layer menu. The value in Surround
via by is the minimum amount by which the layer must surround the
contact.
Other Layers Select any other layers on which to generate geometry and enter the
minimum contact surround value.

Check Area to generate geometry that will cover the entire area of the
geometry selected for guard ring placement. (See “Using the Area
Option” on page 307 for an illustration.)

Using the Fracture Option


When you check Fracture for a given layer in the Define Contact / Guard Ring Cell dialog, L-Edit will
create separate rather than merged geometry on that layer whenever it places the cell.

With Fracture, each box on layer


Active is separate.

Geometry on layer Active is merged


when the fracture option is not
checked.

L-Edit 14 User Guide Section 1 306


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

Using the Area Option


The Area option (for layers other than those used for the via and routing) in a generated contact cell will
draw geometry surrounding the union of all the selected geometry in a cell, with the additional
surrounding area you specify.

Guard ring
using a cell
with the Area
option checked
for one layer.

Editing Generated Contact Cells

To edit an existing contact cell or via the cell must be the currently active cell. When you open the
Define Contact / Guard Ring Cell dialog it will contain the current settings for that cell.

Using Generated Contacts and Vias to Speed Routing

Once generated contact cells and vias are defined, you can use shortcut keys while routing to
simultaneously place a via and switch between the upper and lower routing layers used in that contact
cell.

When you are drawing with a wire tool, use the desired shortcut to place a contact, centered at the
mouse location, after the wire is terminated. If the current layer is the upper layer, use
Draw > Contacts > Down (Single) (shortcut key left bracket [ ) to simultaneously instance a contact
cell and switch from the current layer to the lower routing layer of that contact. If the current layer is the
lower layer, use Draw > Contacts > Up (Single) (shortcut key right bracket ] ) to instance a contact and
switch to the upper routing layer.

L-Edit 14 User Guide Section 1 307


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

L-Edit will choose the first generated contact cell alphabetically that includes the layer which is active
when you are in wire mode. Remember that the wire must be terminated for automatic placement of
contact/contact arrays to take effect.

The first wire is drawn on


layer Metal2.

Generated via ViaM2M3


is defined such that:
Via layer = Via2
Lower layer = Metal2
Upper layer = Metal3

The shortcut key ] places


ViaM2M3 and switches
the active layer to Metal3.

The second wire is drawn


on layer Metal3.

Shortcut key [ instances


ViaM2M3 and switches
the active layer to Metal2.

Using Generated Contacts and Vias for Automatic Arrays

You can also use shortcut commands to select an area inside of which L-Edit will automatically
instance an array of the active contact cell or via. Use Draw > Contacts > Down (Area) (shortcut
Shift+[ ) and Draw > Contacts > Up (Area) (shortcut Shift+] ) to place an array of contact cells in the
area between the current layer and lower or upper layer, respectively, of the active contact.

L-Edit 14 User Guide Section 1 308


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

Automatically Generating a Guard Ring

L-Edit will automatically create a guard ring around geometry that is selected when you use the
Draw > Guard Rings > Draw Guard Ring Around Selection command.

Contact cell Enter the name of the contact cell that will comprise the guard ring.
Spacing to selection Enter the orthogonal distance from the selected geometry to the inner
edge of the guard ring.

You have the option to place the guard ring either around the selection or the MBB of the selection, or
tho replace the entire selection with a guard ring

L-Edit 14 User Guide Section 1 309


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

In this example, the two polygons on layer Active are selected:

CntN is chosen as the contact cell for the generated guard ring.

Contact cell CntN:

N Implant layer
Active layer
Contact layer

As shown below, the guard ring remains selected after Draw Guard Ring Around Selection is
executed.

L-Edit 14 User Guide Section 1 310


Chapter 9: Generated Cells Automatically Generated Contact Cells and Vias

Note that The guard ring geometry is merged in orthogonal sections on layers N Implant and Active.

Deleting a Guard Ring

Because L-Edit recognizes its own generated cells, you can select an entire cell including its guard ring
and only the guard ring will be deleted when you use Draw > Guard Rings > Delete.

The entire cell and the


guard ring are selected.

After the Draw > Guard


Rings > Delete
operation, the cell
remains intact—only the
guard ring has been
deleted.

L-Edit 14 User Guide Section 1 311


10 Generating Layers
1

There are two types of layers in L-Edit, drawn layers and derived layers, also known as generated
layers. A drawn layer is a layer that the designer will draw on.

A derived layer is generated by L-Edit based on operations and selections made to existing layers.
While you can draw on a derived layer, all polygons on a derived layer will be deleted prior to
generation if that layer is used to derive others.

You can change a derived layer to a drawn layer simply by setting it to Drawn type in Setup Layers—
Derivation. L-Edit saves the derivation in case the layer is reclassified as Derived.

Layer Derivation Steps

To first step is to create a derived layer using Setup > Layers—Derivation. To do this you add a name
for the derived layer to the layer list, and then define its characteristics. The target layer—the layer on
which the operation results will be drawn—is always the layer highlighted in the Layers list.

Any layer in the layer list that is above the one to be derived, including other derived layers, may be
used in the definition of a derived layer. The layer that you want to generate must always be inserted in
the layer list after the names of the layers that are used to create it.

The next step is to generate the derived layers using Tools > Generate Layers. You choose the
command set (L-Edit Standard-Derived layers or layer definitions from Calibre, Assura or Dracula).
Objects on derived layers are automatically created during the generate layers operation (see
“Generating Derived Layers” on page 326.)

L-Edit 14 User Guide Section 1 312


Chapter 10: Generating Layers Defining Derived Layers

Defining Derived Layers

You define generated layers in the Derivation tab of Setup Layers dialog. To open this dialog, choose
Setup > Layers, or double-click anywhere on the layers palette.

Derived layers can be created using the following operations:

ƒ Boolean — Applies the logical AND, OR, and NOT operators to a combination of source layers.
ƒ Select — Selects polygons based on their area relationships between source layers.
ƒ Area — Selects polygons that are either equal to a specified area or within a specified area range.
ƒ Density — Selects polygons based on the relative density of two source layers.

Each derivation type includes a Boolean NOT case, which provides the complimentary output of a given
operation.

L-Edit 14 User Guide Section 1 313


Chapter 10: Generating Layers Defining Derived Layers

Boolean Layer Derivations

To define derived layers using Boolean operators, click on the Derivation tab in Setup Layers and
select Boolean from the Derivation Type drop-down menu.

Use this dialog to pick the name of the derived layer, specify up to three source layers, and compose the
Boolean operations performed to create the new layer. Note that operations are always evaluated from
top to bottom, and the derived layer must be positioned in the Layers list below each of its source
layers.

Type Choose the Boolean derivation type from the drop-down list.
Show Opens the dialog Full Derivation, which shows the derivation for the
selected layer and all of its source layers in terms of drawn (mask)
layers.
Source layers (Display Existing layers from which the new layer will be created (derived).
Units) Select each source layer (Layer 1, Layer 2, Layer 3) from the
drop-down list. Only layers listed above the target layer are available.
Two operations can be applied to each source layer:
ƒ NOT—when this box is checked, the complement of the source
layer is used.
ƒ Grow—enter a positive or negative integer for the amount, in
Display units, by which objects on the source layer are grown or
shrunk on the derived layer. Objects grow or shrink uniformly by
the given quantity.
Operation Select a Boolean AND or OR from the drop-down lists between layers
to specify pairwise operations.

L-Edit 14 User Guide Section 1 314


Chapter 10: Generating Layers Defining Derived Layers

Boolean Operation Outcomes

Three elementary Boolean operations can be applied to previously defined layers: AND, OR, and NOT.
L-Edit also performs the “Grow” (page 316) operation, used to oversize or undersize (shrink) objects.
These operations can be used individually or combined to produce more complex formulas.

AND
The AND operation (abbreviated &) creates objects on a derived layer from the intersection of objects on
two other layers.

b a&b

OR
The OR operation (abbreviated |) creates objects on a derived layer from the union of objects on two
other layers.

a a|b

NOT
The NOT operation creates objects on a derived layer based on the absence, or inverse, of objects on
another layer. Mathematically, the derived layer should extend throughout the layout area wherever the

L-Edit 14 User Guide Section 1 315


Chapter 10: Generating Layers Defining Derived Layers

original layer does not exist. Because the layout area is not explicitly defined, L-Edit applies the NOT
operation within the minimum bounding box that encompasses all existing objects.

a NOT a

Grow
The Grow operation creates objects on a derived layer by increasing the size of each object on the
original layer. Specifically, a Grow operation displaces each edge by the specified number distance (in
display units).

Grow b

A negative Grow parameter yields a shrink operation, creating objects on a derived layer by displacing
the edge of each object on the original layer inward by the specified distance (in display units).

If any dimension of an object is less than or equal to twice the shrink amount, a new object will not be
created on the derived layer.

c shrink c (not created)

a shrink a

shrink b
b

L-Edit 14 User Guide Section 1 316


Chapter 10: Generating Layers Defining Derived Layers

Boolean Order of Operations

Boolean operations are performed on the source layers in the following order:

[11] Grow (individually)

[12] NOT (individually)

[13] AND/OR (first to last)

AND has higher precedence than OR. For example, a AND b OR c is read as (a AND b) OR c, and c OR
a AND b is read as c OR (a AND b).

In the following example, the source layers consist of layers a, b, and c, with the following operations:
NOT and Grow 2 on b; AND between a and b; OR between b and c. The total derivation can be
expressed as (a AND (NOT(Grow 2 b))) OR c.

In this case, the operations are performed as follows:

[1] Grow 2 on b

[2] NOT on the result of step 1

[3] AND between a and the result of step 2

[4] OR between the result of step 3 and c.

L-Edit 14 User Guide Section 1 317


Chapter 10: Generating Layers Defining Derived Layers

Select Layer Derivations

Select operations allow you to define a relationship that selects a group of polygons from a layer and
creates a new layer with the results. These operations allow you to create rules that cannot be made with
logical operations, such as spacing checks and sizing checks.

Type Choose the Select derivation type from the drop-down list.
Show Opens the dialog Full Derivation, which shows the derivation for the
selected layer and all of its source layers in terms of drawn (mask)
layers.
Source Layers Existing layers from which the new layer will be created (derived).
Layer 1, Layer 2 Select each source layer from the drop-down list. Only layers listed
prior to the target layer are available.
NOT When this box is checked, the NOT of the relation is applied.

L-Edit 14 User Guide Section 1 318


Chapter 10: Generating Layers Defining Derived Layers

Relation Choose one of the following select relationships from the drop-down
list:
ƒ “Inside” (page 319)
ƒ “Outside” (page 320)
ƒ “Hole” (page 321)
ƒ “Cut” (page 321)
ƒ “Touch” (page 322)
ƒ “Enclose” (page 323)
ƒ “Overlap” (page 323)
ƒ “Vertex” (page 323)

n1, n2 When the Vertex relation is selected, enter a minimum (n1) and
maximum (n2) value (exclusive) to define the vertex count range.

Select Operation Relationships

The select relationships are described and illustrated below.

Inside
The inside operation selects layer 1 polygons that are completely contained in layer 2 polygons, as
shown below (where layer 1 is red).

L-Edit 14 User Guide Section 1 319


Chapter 10: Generating Layers Defining Derived Layers

Not Inside
The not inside operation selects layer 1 polygons that are NOT completely contained in layer 2
polygons (equivalent to outside or cut), as shown below (where layer 1 is red).

Outside
The outside operation selects layer 1 polygons that are completely outside of layer 2 polygons, as
shown below (where layer 1 is red).

L-Edit 14 User Guide Section 1 320


Chapter 10: Generating Layers Defining Derived Layers

Not Inside
The not outside operation selects layer 1 polygons that are not completely outside layer 2 polygons
(equivalent to inside or cut), as shown below (where layer 1 is red).

Hole
The hole operation selects layer 1 polygons that have their entire outside surface exactly touching the
outside surface of a layer 2 polygon, as shown below (where layer 1 is red).

The not hole operation selects any layer 1 polygons that do not exactly fill a hole in a layer 2 polygon.

Cut
The cut operation selects layer 1 polygons that intersect but do not just touch layer 2 polygons, so that
they have areas that are both inside and outside of layer 2 polygons, as shown below (where layer 1 is
red).

L-Edit 14 User Guide Section 1 321


Chapter 10: Generating Layers Defining Derived Layers

Not Cut
The not cut operation selects layer 1 polygons that are either completely inside of or completely outside
of layer 2 polygons, as shown below (where layer 1 is red).

Touch
The touch operation selects layer 1 polygons that touch layer 2 polygons from the outside and do not
also cut, as shown below (where layer 1 is red).

L-Edit 14 User Guide Section 1 322


Chapter 10: Generating Layers Defining Derived Layers

Not Touch
The not touch operation selects layer 1 polygons that do not touch layer 2 polygons, as shown below
(where layer 1 is red).

Enclose
The enclose operation selects layer 1 polygons that completely enclose layer 2 polygons. This includes
layer 1 polygons that are inside and touching layer 2 polygons. The not enclose operation selects layer
1 polygons that do not completely enclose layer 2 polygons.

Overlap
The overlap operation selects layer 1 polygons that touch, cut, enclose or are inside of layer 2 polygons.

The not overlap operation selects layer 1 polygons that are entirely outside of layer 2 polygons.

Vertex
The vertex operation selects layer 1 polygons with more than or equal to a specified minimum number
and fewer than or equal to a specified maximum number of vertices. The not vertex operation selects
layer 1 polygons with fewer than the minimum number or more than the maximum number of vertices.

L-Edit 14 User Guide Section 1 323


Chapter 10: Generating Layers Defining Derived Layers

Area Layer Derivations

The Area option in the Derivation tab checks polygons on the selected layer to determine if their areas
are equal to a specified area or are within a specified area range.

Type Choose the area derivation type from the drop-down list.
Show Opens the dialog Full Derivation, which shows the derivation for the
selected layer and all of its source layers in terms of drawn (mask)
layers.
Source Layers Existing layers from which the new layer will be created (derived).
Select each source layer from the drop-down list. Only layers listed
prior to the target layer are available.
NOT When this box is checked, the NOT of the relation is used, so
polygons with area outside the specified range are flagged.
Square Display units Select one of these radio buttons to set the units for area calculation.
or As with the rule distance in Setup Design Rules, (see “Specifying
Square Lambda DRC Standard Design Rules” on page 471) areas do not get rescaled
when Square Display Units is selected, but do get rescaled when
Square Lambda are used.

Range Click one of these radio buttons to pick either polygons with an area
or in the range specified in n1 and n2 (exclusive) or polygons equal in
Equal area to the value entered in Equal.

L-Edit 14 User Guide Section 1 324


Chapter 10: Generating Layers Defining Derived Layers

Density Layer Derivations

Certain design rules require testing of the percentage of area covered by a certain layer. The density
operation selects polygons based on the percentage of area that one layer covers in an area defined by
another layer. The selected objects can then be used in a density DRC rule.

The density operation derives boundary polygons within which the density of layout on the Density of
layer is between a minimum n1 and maximum n2 percentage. The boundary may be the cell extent, or
may be polygons on a specified layer. The density of the input layer is computed separately within each
boundary polygon by performing a Boolean AND operation of the input density layer with each
polygon on the boundary layer. Valid range values are between 0 and 100 percent, where n1 must be
less than or equal to n2.

The not density operation selects boundary polygons within which the density of layout on the input
Density of layer is less than the minimum percentage or greater than the maximum percentage.

L-Edit calculates the area density of the specified density layer that exists inside each polygon of the
boundary layer, and outputs the boundary layer polygon if the density is within the specified range.

Specifically, for each polygon P in layer 1, L-Edit calculates:

density = (area of (P AND layer 2))/(area of P) x 100%


ƒ then outputs P to the derived layer if the density is in the specified range (or not in the given range
if NOT is turned on).

The options used in designating the density layer are:

Derivation Type Choose Density from the drop-down list.

L-Edit 14 User Guide Section 1 325


Chapter 10: Generating Layers Generating Derived Layers

Show Opens the dialog Full Derivation, which shows the derivation for the
selected layer and all of its source layers in terms of drawn (mask)
layers.
NOT When this box is checked, the NOT of the relation is applied.
Density of layer The input layer from which the density is calculated.
Inside polygons of layer The boundary polygons within which the density is measured. The
boundary can be a layer or the cell boundary.
n1, n2 Enter a minimum (n1) and maximum (n2) value (exclusive) to define
the density range.

Setting Up Command File Derived Layers

Layers can also be defined in command files, using Dracula, Assura or Calibre command file format,
using any of the layer derivation commands. See “HiPer Verify: Calibre Command Files” on page 486
or “HiPer Verify: Dracula Command Files” on page 647 for details.

Generating Derived Layers

After derived layers have been defined, they can be generated in the active cell using Tools > Generate
Layers.

Choose a Command Set

ƒ Invoke Tools > Generate Layers


ƒ If you want to generate layers defined in the Setup Layers dialog, select Standard-Derived
Layers. If you want to generate layers defined in a Dracula, Assura or Calibre command file, press
the Add Command File to List button ( ), then press the Browse button ( ) to browse to and
select a command file from disk.
ƒ You can setup and save multiple command files, but only one at a time can be used. The derived
layers defined in L-Edit or in a command file are listed in the lower portion of the dialog, for the
highlighted command set. Command files containing both DRC statements and derived layers can
be included in the list.
ƒ Highlight the command file you wish to run.

Run the Derivation

ƒ Check the checkboxes corresponding to the layers you wish to generate.


ƒ Press the Run button to generate the layers you have selected, or Accept to save your settings
without running the derivation.

L-Edit 14 User Guide Section 1 326


Chapter 10: Generating Layers Generating Derived Layers

Command Sets Enter the command files you wish to run, or select Standard-Derived
Layers to generate layers derived in the Setup Layers dialog. Use the
Add command file to list and Delete command file from list buttons
to add and remove files from the list.

Select the command set containing the layer definitions you wish to
generate.
Layers to generate Place a checkmark next to each layer you wish to generate. You can
mark layers individually by clicking in the checkbox next to the layer
name. To mark a group of adjacent layers, click and drag the mouse
from the first to the last layer in the group. Use Mark All and Unmark
All to add or remove checkmarks next to all layers in the list.

Only derived layers for which derivation is enabled may be generated.


Locked layers and derived layers that have the Enable Derivation
option off are not listed in this dialog. Ports on derived layers are not
deleted.

L-Edit 14 User Guide Section 1 327


Chapter 10: Generating Layers Generating Derived Layers

Automatically mark If the source layers for a derived layer are themselves derived layers,
intermediate layers checking this option causes L-Edit to automatically mark the derived
source layers. For example, consider the following derived layers:

Gate = Poly & Active


ptran = Gate & NWell

When this option is checked, marking ptran will automatically mark


the intermediate derived layer, Gate, which is required to generate
ptran.

When L-Edit generates a layer that is derived from other derived


layers, L-Edit generates the source layers internally. If the source
layer is marked, L-Edit then updates this layer with the results of
generation. If the layer is not marked, L-Edit discards the source layer
results after the marked layer is generated.

Note: L-Edit does not generate locked source layers or layers for
which derivation is disabled. In these cases, L-Edit treats the
source layers as drawn layers for the purposes of generating
the derived layer.
Merge polygons after layer Causes polygons on a derived layer to be merged upon completion of
generation the process. This option can significantly increase processing time for
complex layouts.

When you execute the Generate Layers command, L-Edit automatically deletes existing objects on
generated layers before regenerating those layers. Only those layers selected for generation will be
cleared.

When layers are generated from command files, the following behavior will occur:

ƒ If a layer does not exist in L-Edit for the layer being generated, then a new layer will be created at
the end of the layer list with the name of the layer being generated, and the geometry is put on this
layer. The layer is created as Derived, with Type External.
ƒ If a Derived layer of type External already exists in L-Edit with the same name as a layer being
generated, then this layer is reused.
ƒ If a Drawn layer exists in L-Edit with the same name as a layer being generated, then a new layer
will be created at the end of the layer list with the name of the layer being generated plus "_1"
appended, and the geometry is put on this layer. The "_1" is incremented as required to avoid name
collisions. The layer is created as Derived, with Type External.
ƒ If a Derived layer of type other than External exists in L-Edit with the same name as a layer being
generated, then it is treated the same as a Drawn Layer.

Automatic Layer Generation with DRC and Extract

L-Edit automatically generates objects on derived layers before DRC or Extract runs and clears those
objects afterwards. It only deletes objects generated during that DRC or Extract run, however—
previously generated objects remain.

L-Edit 14 User Guide Section 1 328


Chapter 10: Generating Layers Generating Derived Layers

Showing and Hiding Generated Layers

Use the menu commands View > Layers > Show Generated and View > Layers > Hide Generated to
show and hide derived layers. (See “Showing and Hiding Layers” on page 111.) If the current layer is a
derived layer, it will remain visible when derived layers are hidden.

You can also show or hide derived layers using the context-sensitive menus on the layer palettes, just as
you would any other layer. With the pointer over any non-derived layer icon, click the right mouse
button and choose Hide Generated. All derived layers will be hidden and their icon or name will be
shaded on the layer palettes.

To hide all derived layers except the selected layer, position the pointer over the desired derived layer
icon and choose Hide Generated in the context-sensitive menu. Choose Show Generated to display all
generated layers in all cells for the active file.

Locking Generated Layers

You can lock derived layers from the Layer palette just as you would any other layer. Select
“generated” from the pull-down list then right-click on any layer name to open the menu. Pick “Lock”
and then “Lock All” or lock layers individually by clicking in the Lock ( ) column.

Removing Generated Layers

Tools > Clear Generated Layers removes objects from all derived layers in the active cell, the active
file, or in all open files. All objects on derived layers are deleted, regardless of how they were created.
Ports may be optionally kept. This command cannot be undone.

This Cell (cell name) Removes derived layers in the active cell.
This File (file name) Removes derived layers in the active file.
All Files Removes derived layers in all open files.
Do not delete ports Prevents L-Edit from removing ports on the derived layers in the
specified file or cell. Use this option when your design uses a derived
layer as its extract recognition layer and you want to retain the ports
on this layer.

L-Edit 14 User Guide Section 1 329


11 Schematic-Driven Layout (SDL)

1
The L-Edit schematic-driven layout (SDL) tool reads a netlist for instance and connectivity information,
then generates those instances into a cell, creates flylines, and performs automatic routing that generates
orthogonal routing wires and vias between devices and I/O ports. You can also use SDL to generate
layout corresponding to subcircuits and devices, and L-Edit will update the flylines as you move
instances or route nets.

The SDL router is a gridded area router — the center and end-points of routing wires are always placed
on-grid. You can set the router to automatically calculate the routing grid, or you can set it manually to
adhere to a wire-to-wire, wire-to-via or via-to-via spacing domain. SDL routing supports two to eight
layers, with user-specified width and spacing rules for each layer and the option to specify obstructions
on a per-layer basis. You can choose to route single nodes, groups, or the entire design on any given
pass.

The SDL Navigator lets you view by net or by instance to manage the manual and automatic routing
status of each net. Its highlight feature lets you mark nets or pins for any of the SDL operations, so you
can select paths to auto-route, rip-up or re-route as needed.

For example, if you have nets that are critical to a design you can auto-route them first to benefit from
the maximum availability of routing resources, or route them manually to satisfy specific performance
requirements, then let the router automatically route the rest or the design.

In addition to incremental routing within the layout, SDL also has an engineering-change-order (ECO)
capability so you can input netlist changes without disturbing existing placement and routing.

L-Edit 14 User Guide Section 1 330


Chapter 11: Schematic-Driven Layout (SDL) How to Run SDL

The layout below shows a simple example of SDL-generated flylines prior to routing.

How to Run SDL

Configure for Optimal Routing

Please read SDL Configuration (page 332) first to see the relationship between the following elements.

Layers—Set the routing layers based on your standard cell library. See “Define the Routing Layers” on
page 332.

Grid—Determine whether you should specify a routing grid spacing or have L-Edit calculate one. See
“Grid Spacing” on page 334.

Port Placement—Place ports on cell boundaries and, if necessary, on grid. See “Locating Ports” on
page 338.

Obstructions—Add obstructions or holes in obstructions. You will need to use obstructions carefully
to accommodate your routing layers, via design and wire end styles. See “Obstruction Regions” on page
341.

Netlist—Check to insure that each device listed in your netlist is a cell with pre-defined layout or a
T-Cell, prior to running SDL. The device name in the netlist must match the cell name in your TDB file
for that device to be instantiated during SDL from your netlist. See Netlist Format for SDL (page 343).

Import a Netlist

The SDL Navigator is a dockable window with a toolbar for all the SDL commands. It has a Load
Netlist icon that opens the “Import Netlist” dialog, where you specify which netlist to load and which

L-Edit 14 User Guide Section 1 331


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

layout elements to add or update if they are not included in the netlist. See Importing a Netlist (page
344).

Cells and ports that do not exist or do not match by name can be optionally generated when you import
the netlist. See “Automatically Generating Layout Elements” on page 346.

Position Layout and Route Critical Nets

Once the netlist information is imported, all devices are instanced in the layout and the SDL Navigator
displays the nets in layout and their routing status. See “Layout Placement” on page 349

As a guide for manual placement, each net has a flylines of a different color to illustrate congestion.
You can manually route critical nets first, using the flylines as a guide to minimize path length.
Manually placed routes can be tagged with the net name of the active net so the router will not route
them, and so all geometry associated with the net can be ripped up if needed. See The SDL Navigator
(page 351).

Auto-Route Remaining Nets

Establish routing layers and settings using Setup Router. Once your routing setup is defined, use the
“Route All” icon. The router will ignore nets that have been checked off in the SDL checklist. All
geometry the router places is labeled with its net name. See Automatic Routing (page 349).

Updates Based on Engineering Change Orders (ECO)

If you need to import an updated netlist, SDL provides a comparison function that displays added or
deleted pins and nodes that have changed. See Updating from an Engineering Change Order (ECO)
(page 356).

SDL Configuration

The router adheres to these fundamental rules:

ƒ Traces and ports are always routed center-to-center, on routing grid points.
ƒ Routing wires are orthogonal.
ƒ A routing layer is a layer where the Route box is checked in Setup Router, a non-routing layer is a
layer where the Route box is not checked.
ƒ The layer the port is on determines the routing layer that will connect to the port.
ƒ Wherever possible, horizontal routing is performed on odd-numbered routing layers and vertical
routing on even-numbered layers.

Define the Routing Layers

Routing is performed on one pair of horizontal and vertical layers at a time. The automatic router
supports up to eight routing layers. At least two routing layers must be specified so routes can cross
each other. The automatic router will only route to a port placed on a layer defined in the Setup Router
dialog. Via arrays will be used on wide metal trace layer transitions.

Note that geometry on a hidden layer will be ignored.

L-Edit 14 User Guide Section 1 332


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

SDL Router Setup

Before you use the SDL router, you must specify the routing layers, obstruction layers and via cells it
will use when it performs automatic routing. You also have the option to define an area other than the
MBB of the top-level cell within which layout and routing will be confined.

To open the Setup Router dialog, select the Command Menu ( ) from the SDL navigator toolbar
and choose Setup Router... or use Tools > SDL Navigator > Setup Router.

Route If checked, the defined layer will be used for automatic routing. If
unchecked, you may make connections to the layer using the
specified via cell, but no routes will be placed using that layer.
Layer Select the layer to use for routing from the drop-down list of all layers
in the current file.

The first layer in the list with the Route option checked will be used
to route in the horizontal direction. The second layer will be used to
route in the vertical direction, and each successive layer will alternate
between horizontal and vertical routing.
Width Specifies the minimum width of routing wires that are created on the
selected routing layer. This value should match the DRC value for the
process. However, the SDL router will determine the appropriate wire
widths based on the size of the ports in the layout as described in
“Wire Width Computation” on page 336.
Spacing Specifies the minimum wire-to-wire spacing the SDL router will use
for the selected routing layer.

L-Edit 14 User Guide Section 1 333


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

Obstruction layer Obstruction regions are used to define areas where the SDL router
cannot route. A unique obstruction layer may be assigned to each
routing layer or they can all be assigned the same obstruction layer.
You are not required to set a obstruction layer here. If there are
keepout layers in instances, however, the settings should match.

Note that because of grid placement requirements, a routing wire can


sometimes overlap a obstruction boundary. See “Wire Width
Computation” on page 336.
Via Cell Specify from the drop-down the via cell that will connect the
specified layer routing to the next layer in the setup list. (Usually the
last layer does not require an entry in this field.)
Same-net via pitch Specifies the closest pitch (minimum distance between vias,
measured center-to-center) allowed for vias added by the SDL router.

This setting is used to determine the via spacing when an array of vias
is created for a transition between layers on wide metal routes. It is
also used to determine the minimum spacing of two vias on the same
net. Metal notches between vias on the same net are automatically
filled in with metal.
Routing area: Sets the layer that will define the extent of the routing boundary.
Routing extent polygon on Routing will be contained within a polygon drawn on this layer.
layer
To allow the auto-router some extra space so that it can place routing
outside the MBB of the I/O ports, draw a box on the Routing Region
layer that includes some margin space around the layout.

If no layer is specified here, or if no polygon is drawn in that layer,


the default routing area is the cell MBB.
Routing grid: Sets the distance between grid points, in the X- and Y-direction
X-Spacing / Y Spacing respectively. A zero value causes the SDL router to compute the
routing grid as described in “Grid Spacing,” below.
Routing grid: Sets a known grid point the specified distance from the cell origin, in
X Offset / Y Offset the X- and Y-directions respectively. Used to align the router grid
with another grid, typically the one used for standard cells. See
“Router Grid Offset Field,” below.

Grid Spacing

You can specify a grid spacing or let the router calculate grid spacing based on the router setup. It will
calculate a spacing to provide the least constraints based on design rules for the design. The best
practice is to adopt grid and port settings from the standard cells.

L-Edit 14 User Guide Section 1 334


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

If you prefer to set the grid manually to adhere to an existing spacing domain, adhere to the minimum
spacing values shown below to prevent router failure..

MinGridSpacing = MinWireWidth + MinWireSpacing

Router Grid Spacing Field


When the X Spacing and Y Spacing fields are set to 0, the router analyzes the user-specified layer
spacing, layer width, and via cell sizes for each routing layer and automatically computes a grid spacing
based on the largest of all routing layers. Computed grid spacing for each routing layer is based on a
wire-to-via spacing as shown below.

Width ViaCellWidth
GridSpacing = --------------- + Spacing + ------------------------------------
2 2

When a non-zero value is entered in any of the X Spacing, Y Spacing, X Offset, and Y Offset fields, the
router also uses the layer spacing, layer width, and the size of the via cell specified by the user, but it
will also determine whether to use via-to-via spacing or via-to-wire spacing rules. If the resulting grid
settings are too small to support the specified layer width, spacing, and via cell, L-Edit displays an error.

L-Edit 14 User Guide Section 1 335


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

Router Grid Offset Field


Each I/O port must be placed on a routing layer for the SDL router to connect to it, and should be placed
so that it is near the edge of the cell, or can be easily accessed with routes. If they are placed too close
to one another, the SDL router may not be able to connect to all the I/O ports. Ideally, the ports should
be placed on a specific routing grid so that the SDL router can directly access the ports without having
to create breakouts. (See “Breakouts and Notches” on page 342.)

When you have cells that use a particular grid, you can set the router grid to match by using the router
grid spacing and the router grid offset so that all ports are centered on a grid point. Once the grid
spacing is set, enter the X-and Y offset amounts that will place a cell grid point on a routing grid point.

Enter offset values


that will align the grid
points in the top level
SDL cell with the
imported cells.

Wire Width Computation

The width of routing geometry is subject to a minimum width constraint in the setup dialog but will be
computed based upon the type and dimension of the port that it will connect to. When a connection is to
be made between two ports with different dimensions, the smaller of the two trace widths is used for
that connection.

For example, if a point port is to be connected to a line port, the minimum trace width defined for the
layer in the Setup Router dialog will be used.

For box ports, the smaller dimension of the port will determine the route width. If the smaller
dimension is less than the minimum specified route width, the minimum route width will be used.

The trace width computation applies the same way to both routing layers and non-routing layers. The
table below describes how the trace width will be determined for each port type:

Point Port Uses the minimum trace width defined for the layer in the Setup
Router dialog.

L-Edit 14 User Guide Section 1 336


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

Line Port (1D) Uses the dimension of the line port as the trace width.
If the dimension of the line port is less than the minimum trace width
defined for the layer in the Setup Router dialog, the minimum trace
width will be used instead of the line port dimension.

See for routing wide metal to line ports.


Box Port (2D) Uses the smaller of the two dimensions of the box port as the trace
width. If the smaller dimension of the box port is less than the
minimum trace width defined for the layer in the Setup Router
dialog, the minimum trace width will be used instead of the box port
dimension.

Routing Wire End Styles


Routing wires will be created using the Extend end style and the Layout join style. Note that when the
router is attempting to connect to manually placed routes having a wire end style other than Extend,
those wires will be converted to polygons. A breakout polygon, however, connects flush with a port.

Wide Wire Routing


The minimum port size for wide wire is the grid spacig plus the wire width.

The router has added three


rectangles to complete via to
port wiring.

Port P2 meets minimum width


requirements.

MinPortLength = GridSpacing + WireWidth

L-Edit 14 User Guide Section 1 337


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

In order to auto-route traces with wide metal, one port dimension must be equal to or greater than the
desired trace width.

For example, in this illustration, the


router grid is set to 1um, so the next
available wire size is 1.25um (grid
spacing + wire width).

Ports below 1.25um will be routed at the


minimum size. The GND net has a wide
port of 1.5um to produce wide metal
routing.

Locating Ports

Ports should be located on the cell boundary for optimal routing. For connections inside the cell or
within the obstruction layer it is recommended you manually route to place a port to the boundary rather
than trying to connect inside the cell.

In some cases it may be simpler to route using a hole in the obstruction layer. For example, if you have
a cell with crowded routing on layer M1 and you need to route to a port on M1, you can cut a hole or
channel in the M1 obstruction layer, of M1 via width minimum, so that routing will come in to the port
on layer M1.

If a port is on a layer that is not defined as a routing layer, it will be ignored.

Trace to Port Connection Behavior

Port to trace connection geometry will differ according to whether a routing or non-routing layer is used
and whether the connection is to a point, line or box port.

L-Edit 14 User Guide Section 1 338


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

Point Ports
Connections to a point port use the minimum trace width defined for the layer in the Setup Router
dialog. The trace will be routed to a point port such that the center of the endpoint of the wire will
exactly hit the port, as shown below.

If a port is off-grid, breakout routing is created to get the routing onto the grid. If the port is on a routing
layer (Route box in checked state in Setup Router), the breakout will be on the same layer as the port.

If an off-grid point port is on a non-routing layer, the breakout will be on the next higher routing layer.

L-Edit 14 User Guide Section 1 339


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

Line Ports (1D)


A trace will be routed to a line port such that the line is approached in a direction opposite its axis and
contact is made approximately along the length of the line port, as shown below.

Box Ports (2D)


The router will assume that the box port is filled in the subcell with the same layer used to place the port
and therefore may only connect to the edges of the box port. The trace will be routed to a box port based
upon one of three scenarios as follows.

Note that routing to a box port will fail if the port is smaller in either dimension than the minimum trace
width.

Box Port Larger than Trace in Both Dimensions

[1] If both the length and width of the box port are greater than or equal to the minimum trace width, the
trace may approach the box port from either axis and will contact the port along an edge equal to the
width of the trace:

This dimension must be less


than the minimum trace width.

L-Edit 14 User Guide Section 1 340


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

Box Port Larger than Trace in One Dimension

[2] If one dimension of the box port is smaller than the minimum trace width and one is larger, the trace
may approach the box port only along the longer axis:

Box Port Smaller than Trace

[3] If both dimensions of the box port are smaller than the minimum trace width, the trace may approach
the box port from either axis and will contact the port centered on the trace end:

Obstruction Regions

Routing obstruction layers can be drawn in library cells or specified in the SDL top-level cell.

L-Edit 14 User Guide Section 1 341


Chapter 11: Schematic-Driven Layout (SDL) SDL Configuration

Note that obstruction regions do not adhere to DRC spacing rules, so metal can be drawn adjacent to
obstruction.

DRC rules do not apply - metal can be drawn


flush with an obstruction.

To prevent routing failures, make sure your obstruction includes room for wires to connect to line or
box ports in your design. If, for example, a design uses line ports, confine routing to a layer that does
not have obstructions, manually route to the cell boundary, or draw obstructions so the ports are
exposed.

Similarly, as shown in this example, if Poly is not a routing layer (i.e. the Route box is not checked for
Poly in Setup Router) you can place a Poly-M1 Via on Poly obstruction to reach a port on Poly.

Poly layer

Poly-M1 via

Poly keepout layer

Breakouts and Notches

The router creates short pieces of non-wire geometry to connect off-grid ports to the on-grid wiring, or
so that the routing adheres to DRC rules. These segments are called breakouts.

The router will create breakouts as required to complete connections if, for example, the ports in your
cells are not designed on-grid, if the cell grid is offset from the routing grid, or if the cells are not placed
in the layout so as to align with the routing grid.

L-Edit 14 User Guide Section 1 342


Chapter 11: Schematic-Driven Layout (SDL) Netlist Format for SDL

Breakout placement and configuration will differ according to the port type (point, line, box),
orientation, layer and via usage, trace width, and the presence of any obstructions or routing boundaries,
as outlined on the following pages.

During auto-routing, L-Edit fills notches to close gaps that would otherwise be left, for example,
between trace connected to a larger dimension via.

Notches filled by the auto-router

Netlist Format for SDL

The netlist can be a hierarchical SPICE or a structural Verilog netlist. Each device that is listed in your
netlist should be a cell with pre-defined layout or a T-Cell prior to running SDL. The device name in
the netlist must match the cell name in your TDB file for that device to be instantiated during SDL from
your netlist. Cells that do not exist or do not match by name may be optionally generated upon
importing of the netlist for later layout.

If a subcircuit exists in the netlist with the same name as the currently active layout cell, then that
subcircuit is used to create the netlist for the current cell. This behavior means that you can have all
netlists for all cells in the same SPICE file. If a subcircuit with the same name as the current cell does
not exist in the SPICE file, then the top-level SPICE entities are used to create the netlist.

SDL orders the placement of instances by device group and then order of appearance in the SPICE
netlist. Initial placements will occur within the MBB of existing objects or, if no objects exist, in a
vertical stack.

The router will connect to a random initial placement of top level ports on routing layers.

Case Sensitivity in SDL


In the SDL navigator, port names, pin names and instance names are matched in a case-insensitive
manner. Cell names that are read from the netlist are matched to existing L-Edit cells also in a
case-insensitive manner.

Implicit Model Definitions in SDL

When a device statement includes a model name, SDL looks for a corresponding .model statement in
the netlist.

L-Edit 14 User Guide Section 1 343


Chapter 11: Schematic-Driven Layout (SDL) Importing a Netlist

In SPICE, BJTs and other devices can have three terminals or four and they also need a model. In the
case of a three terminal device, SDL is not able to determine if the fourth pin is a fourth terminal or a
model, unless it has already encountered either that terminal nor that model before. When it has
encountered a previous definition on another device, SDL will attempt to resolve this ambiguity, in
which case it gives a warning “Implicit model definitions for yyy” in the SDL log. If the .model
statement is missing, SDL will warn with the error message “internal error.”

To eliminate the need to write a model definition for BJTs and other devices, SDL can automatically
add a simple model definition that contains no parameters (e.g., “.model mydevice”.)

SDL will provide implicit model definitions for diode (D), JFET (J), GaAsFET (B), BJT (Q), MOSFET
(M), and MESFET (Z) device statements. Such model definitions appear as warnings in the SDL
output. For example, auto-declaration of the MOSFET model M1 would result in the following
warning:

Warning: test1.sp(4): Implicit .model definition M1

Remapping Model Names


SDL supports the .malias command, which allows L-Edit to recognize two different model names as
the same model. See “.MALIAS” on page 909 in the LVS section for more details.

Alternative Netlist Format


If you do not have a SPICE netlist available, the SDL navigator can import or export a simple wirelist
format, in which each line contains the following tab-delimited fields:

NODE NAME \t CELL NAME \t INSTANCE NAME \t PORT NAME

For I/O ports, the syntax is similar, but the cell and instance names are omitted:

NODE NAME \t \t \t PORT NAME

In both of these cases, spaces are shown around the tab character (\t) for clarity; these spaces are not
present in the actual wirelist.

To import this wirelist format, select “WRL” from the File format pull-down menu in the Import Netlist
dialog.

Importing a Netlist

Note that while you are using this feature a networked license is checked out to your PC, labelled
“SDL.” If needed, the license can be revoked manually from within SDL, with wlladmin.

Each layout cell can have its own netlist associated with it. When the active cell changes in L-Edit, the
SDL navigator also changes to show the netlist associated with the new cell. If no netlist has yet been
associated with a cell, the navigator shows a message to that effect.

SDL may be run on multiple cells using the same top-level netlist file. If the subcircuit name in the
netlist does not match a cell name identically, the top-level schematic will be used from the netlist.

L-Edit opens a log file when the import process finishes.

L-Edit 14 User Guide Section 1 344


Chapter 11: Schematic-Driven Layout (SDL) Importing a Netlist

You load a netlist using either the Tools > SDL Navigator > Load Netlist menu item or the “Load
Netlist” button on the SDL navigator toolbar, which opens the following dialog:

From File Enter a netlist or use Browse to search the file system for the desired
netlist. Press Edit to open the currently loaded netlist file in the L-Edit
text editor.
File format Select a file format from the pull-down menu: T-Spice, HSPICE,
P-Spice, CDL, Verilog or WRL.
Include substrate terminals Bulk terminals of semiconductor devices (M, B, Q, J and Z) can be
of semiconductor devices optionally included in the netlist. In the case of SDL, three-terminal
in netlist resistors (“bulk resistors”) are read, and mapped into subcircuits.

For example, the resistor “RR1 net1 net2 1K $SUB=VCC $[B]


$W=6u” would be mapped onto “XRR1 net1 net2 VCC B R=1K
W=6u”.

Insert multiple devices When checked, causes M number of separate instances of a device to
where M > 1 be placed, rather than a single device with multiplicity M, where M is
the multiplicity parameter on a device.
Clear Netlist Removes the association between the netlist and the current cell, and
clears the SDL navigator display.

L-Edit 14 User Guide Section 1 345


Chapter 11: Schematic-Driven Layout (SDL) Importing a Netlist

Automatically Generating Layout Elements

When a netlist is imported, you may optionally create various layout elements. If none of these Modify
Layout options are selected, the layout is not modified in any way. After import, added or modified
elements remain in the L-Edit selection list.

Log all changes If this option is selected, a log file is displayed showing the operations
that were performed and their success or failure.
Add instances for missing If this option is selected, instances are created for missing subcircuits.
subcircuits See “Adding Instances for Missing Subcircuits” on page 347.
Add instances of T-Cells If this option is selected, SPICE devices are mapped into T-Cells, and
for missing devices device parameters are passed to the T-Cell. See “Adding Instances of
T-Cells for Missing Devices” on page 348.
ƒ Model—Choose this naming convention when T-Cells are the
only type of cell in the library that uses “model’ in the instance
name.
ƒ Device_Model—Choose this naming convention when cell
types other than T-Cells also use “model’ in the instance name.
For example, a SPICE device “M1 a b c d MOD” will create an
instance of a cell “MOD” if Model is selected, and will create an
instance of a cell “M_MOD” if Device_Model is selected.

L-Edit 14 User Guide Section 1 346


Chapter 11: Schematic-Driven Layout (SDL) Importing a Netlist

Remove device designator If this option is selected, when an instance name starts with a letter
(X,M,R,...) from instance and is followed by a non-digit, the starting letter is stripped when the
names netlist is imported.

For example, given the following SPICE input:


Xfoo In Out INV
an instance of cell INV would be created; with remove device
designator enabled, the instance would be called “foo”.

Alternately, if the SPICE input was:


X123 In Out INV
with remove device designator enabled, the instance would be called
“X123” as the instance name is followed by a digit.
Search Libraries If files are specified in this field, L-Edit will search them for missing
cells. When a cell is not found in the current file, but is found in the
library file, it will be copied to the current file, and instanced from
there. Separate multiple file names with a semi-colon.
Add missing I/O ports If a cell is a subcircuit, it has interface ports through which it connects
to nodes in the cells in which it is instanced. When this option is
enabled (and the cell is a subcircuit), any missing I/O ports will be
created. They are initially placed in the lower-left corner of the cell
and should then be manually moved to the appropriate position.

In the Create New Ports area at the bottom of the dialog use the
Layer pull-down menu to specify the layer on which ports are drawn
on and the Size field to specify the size of the ports.
Update parameters of If this option is selected, the parameters of devices created via T-Cells
T-Cells from devices specified in the SPICE netlist are updated. Note that
UNDO is not available to revert this operation.
Create template cells for If this option is selected, a “template” cell is created for every cell that
subcircuits whose cell is specified as a subcircuit in the current cell’s netlist and which does
does not exist not exist in the layout database. This option is particularly useful in
conjunction with the Add missing I/O ports option above.
Create New Ports Allows you to create new ports when a netlist is imported, by entering
the layer and size of port boxes L-Edit should draw.

Adding Instances for Missing Subcircuits

For example, given the following SPICE input:

X123 In Out INV

an instance of cell INV would be created; the instance would be called X123. If an instance with the
appropriate name (e.g., X123 in our example above) already exists in the layout, it is left untouched. If
“extra” instances are found (i.e. instances that have no corresponding entry in the SPICE netlist), they
are left untouched. In other words, the SDL import will not modify existing layout, but will merely add
to it.

A “library” TDB file can also be specified in the Search Library field. If a cell is not found in the
current file, but is found in the library file, it will be copied to the current file, and instanced upon
request.

L-Edit 14 User Guide Section 1 347


Chapter 11: Schematic-Driven Layout (SDL) Importing a Netlist

Note: If the cell exists in the current file, the library file is not checked at all. As such, the
SDL feature cannot be used to update the cells in the current design file.

Adding Instances of T-Cells for Missing Devices

When this option is selected, SPICE devices are mapped into T-Cells, and device parameters are passed
to the T-Cell. If a cell of the correct name exists, but it is a regular cell and not a T-Cell, it will be used
instead. It is the user’s responsibility to ensure that the necessary cells exist in the current design.

If a “library” TDB file is specified in the Search Library field, L-Edit will search there for missing
T-Cells. You can use the option “Model” when T-Cells are the only type of cell in the library that
includes “model” in the instance name. If other types of cells include “model” in their name you must
select the Device_Model option to isolate T-Cells.

T-Cell Naming and Parameters


SDL recognizes arbitrary user-supplied parameters and passes them directly to T-Cells. Note, however,
that if the SPICE netlist contains multiple parameters that differ only in case, SDL will not collapse or
combine them. Or, if you have instances of mosfet T-Cells in the layout that use parameters w and l
(lower case) and you receive updated T-Cells with parameters W and L (upper case), upon regeneration
the T-Cell instances will have w, l, W, and L in their parameter lists.

The SPICE devices, their T-Cell mappings, pin names, and the device parameters are as follows:

Device T-Cell Name Pin Names Parameters


MOSFET (M) Mosfet model name D, G, S, B (opt.) L (in meters)
W (in meters)
M
RESISTOR Resistor model name, or RES if RP, RM R (in ohms)
(R) no model name present
M
CAPACITOR Capacitor model name, or CAP if CP, CM C (in Farads)
(C) no model name present
M
INDUCTOR Inductor model name, or LP, LM L (in Henrys)
(L) INDUCTOR if no model name
present M
DIODE (D) Diode model name DP, DM A (in square meters)
M
GAASFET (B) Gaasfet model name D, G, S, B (opt.) A (in square meters)
M
JFET (J) Jfet model name D, G, S, B (opt.) A (in square meters)
M

L-Edit 14 User Guide Section 1 348


Chapter 11: Schematic-Driven Layout (SDL) Automatic Routing

BJT (Q) Bjt model name C, B, E, A (in square meters)


BULK (opt.)
M
MESFET (Z) Mesfet model name D, G, S, B (opt.) A (in square meters)
L (in meters)
W (in meters)
M
Transmission TLINE AP, AM, BP, BM Z0
line (T)
TD
F
NL

Layout Placement

After a netlist is imported, all geometry arrives in the “selected” state.

The first instance is placed in the lower-left corner of the MBB of the current cell with subsequent
instances stacked to the right or above the first instance. Whenever possible all instances are kept within
the MBB of the current cell.

Automatic Routing

Automatic routing of all unchecked nodes may be invoked with the Route All icon in the SDL navigator
( ) or by selecting Tools > SDL Navigator > Route All.

L-Edit 14 User Guide Section 1 349


Chapter 11: Schematic-Driven Layout (SDL) Automatic Routing

Router Commands
You access router commands with the Command Menu button in the SDL navigator ( ).

Add Selection Flyline Adds flylines for all nodes in the active layout selection. Select
(Tools > SDL Navigator > CTRL+A (select all) in the layout and use this command to display all
Add Selection Flyline)
flylines for the cell.
Tag Selections with active Tags any selected objects in the layout with the active net. See
net “Setting the Active Net” on page 352.
Pick Closest Pin When you invoke this command, L-Edit prompts you to click the
(Tools > SDL Navigator > mouse in the layout window. The pin closest to that point will be
Pick Closest Pin) highlighted in the netlist tree view.

This command is particularly useful to identify nodes, and then, with


the assistance of the flyline tool, show interconnections.
Ripup All Nets Removes all objects that are tagged with a routing node name. See
(Tools > SDL Navigator > “Automatic Routing” on page 349.
Ripup All Nets)

Remove ECO status Removes the ECO icon indicators and updates the SDL navigator
using the latest ECO netlist. See “Updating from an Engineering
Change Order (ECO)” on page 356.
Export Wire List... Exports the SDL navigator node list in a simple text netlist format.
See “Alternative Netlist Format” on page 344.
Setup Router... Opens the Setup Router dialog. See “SDL Router Setup” on page
(Tools > SDL Navigator > 333.
Setup Router....)

By Net Displays a list of nodes present in the current cell. Expanding a node
(Tools > SD Navigator > shows all the pins connected to that node. The format of each pin is
By Net)
“instance name”/“port name.”
By Instance Displays a list of instance names present in the current cell.
(Tools > SDL Navigator > Expanding an instance name shows all the nodes connected to that
By Instance)
instance. The format of each node is “port name”=“node name.”

L-Edit 14 User Guide Section 1 350


Chapter 11: Schematic-Driven Layout (SDL) Automatic Routing

By Unrouted Segment Displays a list of nodes in the current cell. Expanding a node shows
(Tools > SDL Navigator > the coordinates of the segments that could not be automatically routed
By Unrouted Segment)
to each other.
Release License Releases the SDL license immediately. Unless this command is
invoked, the license is only released when you close the .tdb file.

The SDL Navigator

The SDL navigator is a dockable toolbar for the schematic-driven layout and automatic routing
commands. It also displays information about routing status in a checklist format.

You can launch it by right-clicking in the toolbar area and selecting SDL Navigator, using the menu
option View > Toolbars > SDL Navigator, or Tools > SDL Navigator > Show SDL Navigator.
Netlist View
Load Netlist
Marker toggle
Flyline toggle
Highlight Layout
Zoom to
Route All
Command Menu
Toggle Highlight
Remove All Markers

Typing in this filter field searches


the display list and highlights the
first item that contains the text
entered. The item can be in any
part of the tree, and the match is
case-insensitive.

The search begins with the item


currently selected.

A green check indicates the


entire net was routed
successfully.

A red X indicates that all or a


portion of the net was unable to
be routed.

Once you load a netlist, the SDL navigator shows a checklist of all nodes and instances that were
imported. If you sort the view by netlist, you can expand each node to show all the pins connected to it.
If you sort the view by instance, you can expand each instance to show all the nodes it connects to.

Note: Nodes which only connect to a single pin are not displayed in the SDL navigator.

The data in the SDL navigator is stored persistently in the TDB database, so it is available in subsequent
editing sessions.

L-Edit 14 User Guide Section 1 351


Chapter 11: Schematic-Driven Layout (SDL) Automatic Routing

Using the SDL Navigator Checklist


The checkbox features is available for your convenience. You can use it to select nets, pins or instances,
depending on the current view type, so that an action will apply to just what is selected. For example,
you can use the checklist for flyline display to indicate which pins and nodes have been “wired up.”
Similarly, you can mark nets to select nets to rip up, nets for which routing is complete, to indicate the
active net, etc.

If you expand the symbol to the left of the net segment in the SDL Navigator, you can view the pins
associated with that net segment, shown for node Vb1 above. You can then use the Flyline icon to show
the connections that need to be made. For example, in the illustration above, flylines for Vb1 are drawn
in red.

When you are viewing By Net, a middle-click on a given net sets it as the active net. The SDL
Navigator will change to display that net in italics.

Setting the Active Net


The Active Net function allows you to automatically add the property of belonging to a given net to
geometry either before or after it is drawn. This is called “tagging” a net.

You can use the Active Net command to select or deselect the currently highlighted node in the SDL
navigator as the active net. You can also use the middle mouse button as a toggle in the SDL Navigator
to activate and deactivate the Active Net state. When you are routing nets in layout you can also
right-click a node so that geometry you draw subsequently is tagged as belonging to the active net.

The net name will be italicized to indicate that it is the active net. The context-sensitive menu for the net
will have a checkmark to the left of “Active Net” as shown below.

If you specify an Active Net before geometry is drawn, any objects or instances that are placed in the
layout while the net is active will be tagged with that net name.

To tag objects or instances in layout after they have been placed, set the net you want to assign them to
as Active, select the objects to be tagged the layout, then use the “Tag Selections with active net”
command.

To deactivate a net, either select another net as active, right-click the currently active net and select
“Active Net” again to remove the checkmark, or select the net in the SDL navigator using the
middle-mouse button.

L-Edit 14 User Guide Section 1 352


Chapter 11: Schematic-Driven Layout (SDL) Automatic Routing

The SDL Toolbar

Netlist View Displays a pull-down menu of netlist view options. These view
options are also available from the SDL Command Menu and the
individual commands described.
ƒ By Net—Displays a list of nodes present in the current cell.
Expanding a node shows all the pins connected to that node. The
format of each pin is “instance name”/“port name”. Viewing by
net may also be invoked by selecting Tools > SDL
Navigator > By Net.

ƒ By Instance—Displays a list of instance names present in the


current cell. Expanding an instance name shows all the nodes
connected to that instance. The format of each node is “port
name”=“node name”. Viewing by instance may also be invoked
by selecting Tools > SDL Navigator > By Instance.
ƒ By Unrouted Segment—Displays a list of nodes in the current
cell. Expanding a node shows the coordinates of the segments
that could not be automatically routed to each other. Viewing by
unrouted segment may also be invoked by selecting Tools > SDL
Navigator > By Unrouted Segment.

Load Netlist Opens the Import Netlist dialog. (See “Importing a Netlist” on page
344.)
Marker Adds or removes markers from the currently highlighted entry in the
netlist navigator tree. When you move an instance while markers are
displayed, the marker will update based upon the new placement of
the instance.
ƒ When viewing By net, if a node is selected in the tree view, then
markers are toggled at all pins within the node. If a single pin is
selected in the tree view, then a single marker is toggled at that
pin.
ƒ When viewing By Instance, if an instance is selected in the tree
view, then markers are toggled at all nodes connected to that
instance. If a single node is selected in the tree view, then a single
marker is toggled at the node connection point to the instance.
ƒ When viewing By unrouted segments, if a node is selected in
the tree view, then a set of markers will be toggled for each
unrouted segment of that node. If segment coordinates are
Example of a marker. selected in the tree view, then a single marker is toggled at that
segment.

L-Edit 14 User Guide Section 1 353


Chapter 11: Schematic-Driven Layout (SDL) Automatic Routing

Flyline When a node is highlighted, click to display a set of flylines that


connect all pins that (i) are connected to the node, and (ii) are not
checked off (i.e., the checkbox in the tree view is empty).

When you move an instance while flylines are displayed, the flyline
will update based upon the new placement of the instance.
ƒ If a pin is highlighted, the flylines for its parent node are shown.
ƒ If an instance is highlighted, the flylines for all nodes connected
to that instance are shown.
ƒ If unrouted segment coordinates are highlighted, the flyline for
the segment is shown.
The flyline that is displayed is a minimum spanning tree; it shows the
shortest connections necessary to connect all the desired pins. The
Example of a flyline in layout
((magenta traces).
distance that is minimized is the orthogonal distance between
connected pins.
Zoom Zooms to the highlighted entry.
ƒ If the entry is a pin, zooms to the pin.
ƒ If the entry is a node, zooms to the MBB of all the pins on the
node.
ƒ If the entry is an instance, zooms to the instance.
ƒ If the entry is an unrouted segment, zooms to the MBB of the
coordinates of the segment.
Note that you can also zoom to markers and flylines using the “w”
hotkey (as long as the selection list is empty).
Route All Routes all unchecked nodes using the SDL automatic router.

Command Menu Opens a pull-down menu of SDL navigation operations. See “Router
Commands” on page 350.
Toggle Markers Toggles between hiding and showing all markers and flylines in the
display.
Remove All Markers Clears all markers and flylines from the display.

L-Edit 14 User Guide Section 1 354


Chapter 11: Schematic-Driven Layout (SDL) Automatic Routing

Context-Sensitive Menus
You can right-click on any node, instance or pin name in the SDL navigator to open a context-sensitive
menu. The controls vary by node, pin or instance as described.

Active Net Selects or deselects the currently highlighted entry in the netlist
navigator tree as the active net. Any objects or instances that are
placed in the layout while a net is active will be tagged with that net
name. See “Setting the Active Net” on page 352.
Marker Adds or removes markers from the currently highlighted entry (or
entries) in the netlist navigator tree.
Flyline Adds or removes flylines from the currently highlighted entry (or
entries) in the netlist navigator tree.
Route Routes the selected node(s) using the SDL automatic router. See
“Automatic Routing” on page 349.

Ripup Net Removes all objects tagged with the selected node name. Checked
nets are not ripped up.
Select Net Selects the tagged geometry in the layout associated with the
highlighted entry (or entries) in the netlist navigator tree.
ƒ If a node, pin, or unrouted segment is highlighted, any tagged
geometry for the associated nets will be selected.
ƒ If an instance is highlighted, all tagged geometry for the nets
connected to the instance will be selected.

L-Edit 14 User Guide Section 1 355


Chapter 11: Schematic-Driven Layout (SDL) Updating from an Engineering Change Order (ECO)

Select Instance Selects the layout instance(s) associated with the highlighted entry (or
entries) in the netlist navigator tree.
ƒ If a node is highlighted, the instances the node connects to will
be selected in the layout.
ƒ If a pin is highlighted, the instance the pin is connected to will be
selected in the layout.
ƒ If an instance is highlighted, that instance will be selected in the
layout.
ƒ If an unrouted segment is highlighted, the instances the segment
connects to will be selected in the layout.
Mark Complete/Unmark Toggles the checkmark for the selected node, pin or instance to
Complete indicate completion of routing.
Power Toggles indication of the selected node name as the power node. This
is displayed using the “(power)” indication after the node name.
Multiple nodes may be marked as a power node.
Delete Removes the selected node, pin or instance from the netlist navigator
window.

Note: This operation cannot be undone.

Highlight All Highlights all nodes in the netlist navigator window when viewing by
net or by unrouted segment. Highlights all instances in the netlist
navigator window when viewing by instance.
Collapse Tree Closes all open sub-trees in the netlist navigator window.

Updating from an Engineering Change Order (ECO)

Managing engineering change orders (ECOs) is the process of receiving an updated netlist, and
importing it into the SDL navigator with the option “Compute and display differences from the
current netlist” selected in the Import Netlist dialog.

This operation will display nodes that have changed with an exclamation point, pins that have been
deleted with a red minus sign, and pins that have been added with a blue plus sign.

Subsequent ECO netlist imports will display changes relative to the most recently imported netlist. You
can identify differences between an arbitrary pair of netlists by importing the first one with “replace

L-Edit 14 User Guide Section 1 356


Chapter 11: Schematic-Driven Layout (SDL) Updating from an Engineering Change Order (ECO)

current netlist” selected then importing the second as an ECO netlist. Once the ECO netlist has been
imported, you can use the SDL navigator buttons as before.

Nodes that have changed


are marked with a yellow
exclamation point.

Nodes that have been


deleted are marked with a
red minus sign.

Nodes that have been


added are marked with a
blue plus sign.

Notice in the example above that simple node renames are also displayed in this view, as shown by the
renaming of “Node N_9” to “N_Rename.” Also, two pins (XXa5/Inm and XXa5/Inp) were swapped,
causing both a disconnection and reconnection to nodes N_7 and N_8.

L-Edit 14 User Guide Section 1 357


Chapter 11: Schematic-Driven Layout (SDL) Updating from an Engineering Change Order (ECO)

The SDL import will then create instances, devices and ports within this box, if possible. The order in
which instances are created is the order they are encountered in the netllist based on device groups.

In this example, a
dummy box is drawn
on the Icon/Outline
layer of an empty cell.

SDL places
instances within that
box, with ports lined
horizontally below.

L-Edit 14 User Guide Section 1 358


12 Interactive DRC
1

Introduction

Interactive DRC lets you create highly compact designs by highlighting DRC violations in real time as
you draw and edit.

Interactive DRC shows a colored outline when a polygon violates one of the defined rules (that is, when
a minimum layout distance is exceeded), and optionally, another colored outline when a violation limit
is reached. Markers display while an object is being drawn or edited but not after it has been placed.

The following rule types are supported:

ƒ “Width” (page 362)


ƒ “Spacing” (page 362)
ƒ “Surround” (page 363)
ƒ “Overlap” (page 363)
ƒ “Extension” (page 364)

L-Edit 14 User Guide Section 1 359


Chapter 12: Interactive DRC Setting Up Interactive DRC Rules

Setting Up Interactive DRC Rules

To setup interactive DRC, invoke Setup > Design, and select the Interactive DRC tab, or click the
Setup Interactive DRC toolbar button .

New rule
Delete rule
Move rule up
Move rule down

Enable Interactive DRC Enables the interactive DRC function when checked.
Prevent violations Prevents you from moving an object past the first violation distance it
encounters.
Show distances Check this box to show the distance between the orthogonal edges of
the active object and other objects that are closest to or most in
violation of any rule. If the edge pair closest to or most in violation in
non-orthogonal, a single diagonal ruler will display.
Enable All Enables all interactive DRC rules.
Disable All Disables all interactive DRC rules.
Import from DRC Standard Imports the built-in set of Tanner design check rules. See “DRC Rule
Sets to run” on page 477.
Violation Marker Color Use these controls to set the color of the interactive DRC ruler and
edge marker when an object is in violation.

Auto sets the color of the violation marker to the last color in the
color palette, usually black. Pick lets you choose the marker color
using the standard Color selection dialog.

L-Edit 14 User Guide Section 1 360


Chapter 12: Interactive DRC Setting Up Interactive DRC Rules

At Limit Marker Color When checked, Show displays the interactive DRC ruler and edge
marker when you reach a violation limit — any further movement in
the same direction will result in a violation.

Auto sets the color of the violation marker to the last color in the
color palette, usually black. Pick lets you choose the marker color
using the standard Color selection dialog.

In the illustrations below, the limit marker is cyan blue and the violation marker is red. In the first
example, the via is at the .150 micron limit for Poly layer surrounding the Contact layer.
The cyan edge markers and text
indicate the via is at a limit, in this case
.150 microns for Poly surrounding
Contact.

When the via is moved to the right and up, it falls into violation of the Metal1 to Metal1 spacing rule of
.350 microns.

The red markers and text indicate a


violation of the Metal1 to Metal1 spacing
rule of .350 microns.

L-Edit 14 User Guide Section 1 361


Chapter 12: Interactive DRC Setting Up Interactive DRC Rules

Width

Width rules specify the minimum width of all objects on the specified layer. The width measurement is
not displayed when an object is being moved since its edges are not changing with respect to one
another.

Width rule measures inside edge


to inside edge distance.

Spacing

The spacing rule specifies the minimum distance that should separate all pairs of objects, either on the
same layer or two different layers.

Spacing rule measures outside


edge to outside edge distance.

Objects touching by coincident edges, intersecting objects, and one layer enclosing the other layer are
not are not flagged as violations by interactive DRC. Also, edges intersecting at an acute angle are not
flagged as a violation.

DRC Rule Distance

Not a violation

Violation

Not a violation

Not a violation

Not a violation

Not a violation

L-Edit 14 User Guide Section 1 362


Chapter 12: Interactive DRC Setting Up Interactive DRC Rules

Surround

The Surround rule specifies that objects on one layer must be completely surrounded by objects on
another layer.

Surround rule measures outside edge to


inside edge distance.

Inside layer polygons completely outside the surrounding layer are not flagged as violations by
interactive DRC.
DRC Rule Distance

Not a violation

Violation

Violation

Violation

Violation

Not a violation

Overlap

Overlap rules specify the minimum amount that an object on one layer must overlap an object on
another layer (when there is an overlap).

Overlap rule measures inside edge


to inside edge distance.

L-Edit 14 User Guide Section 1 363


Chapter 12: Interactive DRC Setting Up Interactive DRC Rules

Objects which overlap more than the specified distance or whose edges coincide are not considered in
violation of overlap rules
DRC Rule Distance

Not a violation

Not a violation

Not a violation

Violation

Not a violation

Not a violation

Extension

Extension rules specify the minimum amount that an object on one layer must extend beyond the edge
of an object on another layer.

Extension rule measures inside edge


to outside edge distance.

One layer completely outside the other layer, or one layer completely inside but not inside coincident
with the other layer is not considered a violation.
DRC Rule Distance

Not a violation

Not a violation

Not a violation

Violation

Violation

Not a violation

L-Edit 11 User Guide Section 1 364


Chapter 12: Interactive DRC Running Interactive DRC

Running Interactive DRC

To enable Interactive DRC click the Enable Interactive DRC toolbar button . After enabling
Interactive DRC begin editing your layout. Error markers will appear in the layout as soon as violations
are detected.

L-Edit 11 User Guide Section 1 365


13 Node Highlighting
1

Introduction

Node highlighting allows you to highlight the geometry connected to a selected net. An unlimited
number of nets may be sequentially selected. When you have selected an object from lower in the cell
hierarchy, all related connectivity from the top level cell will be displayed. If a selection touches more
than one net the potential nodes are displayed and you will be prompted to pick one.

To highlighting nodes you must first define connectivity statements using the Setup Design dialog,
then extract the connectivity data and select nodes for highlighting either using the mouse or by typing
in node names.

Node Highlighting Setup

Choose Setup > Design and select the Node Highlighting tab, or click the Node Highlight Setup
toolbar button to enter connection statements. You can enter connection statements manually, or
import them from an extract definition (.ext) file.

Node highlighting works on merged objects on drawn or derived layers. If derived layers are used, they
must be set up in the TDB file before connectivity data can be extracted. (The node highlight engine
will generate any needed derived layers.)

Objects are defined as connected if the AND of objects on Layer1, Layer2 and the connection layer
results in geometry. Objects that touch are not considered connected. If a connection layer is not
specified, Layer1 and Layer2 must overlap to be considered connected.

Use the icons below to manage the rule list.

Move down
Move up
Delete Rule
New Rule

L-Edit 14 User Guide Section 1 366


Chapter 13: Node Highlighting Node Highlighting Setup

Layer1, Layer2 The layers that are connected by the connection layer. Layer1 cannot
equal Layer2.
Connection Layer The layer through which Layer1 and Layer2 connect. If either Layer1
or 2 is equal to the Connection Layer value, the Connection Layer
should not be assigned a value.
Auto Sets the color of the node marker to the last color in the color palette,
usually black.
Customize Opens the Node Highlighting Colors dialog, which allows you to
enter an unlimited number of colors for the Cycle function. Each
color can be customized using the RBG sliding controls or by clicking
on Color picker... for advanced color controls.

Default sets the color cycle to eight pre-selected colors.

Cycle Cycles through the colors defined in the Node Highlighting Colors
dialog as nodes are selected for highlighting. The color cycle starts
with either the custom or automatic color depending on which of
these options is checked.

If this option is not checked, all nodes are highlighted with the same
color.
Import from EXT file... Imports the connectivity information from an extract definition (.ext)
file.

L-Edit 14 User Guide Section 1 367


Chapter 13: Node Highlighting Node Highlighting Setup

Save Folder... Use this button to save connectivity data to a folder other than the
L-Edit default location, which is described in “Default Location of
Saved Node Highlighting Data,” below.

Note: The Setup Extract—Options dialog and the


Setup > Design—Node Highlighting dialog each include the
option to save node highlighting data, and to choose where it is
saved. Be careful to manage these settings to avoid losing or
overwriting your data.
Node Naming Sets the level of hierarchy from which ports will be used for node
naming during node highlighting. Choose from None, Top level only
or All levels, or Depth. None will be the fastest setting, All levels the
slowest.
None—no ports are written to GDSII for node highlighting.
Depth—enter an integer value to specify the level of hierarchy that
will be used. A depth of zero is equivalent to top level only.

Note that the Highlight by name command can be used regardless of


the Node Naming setting.

Default Location of Saved Node Highlighting Data

When you extract connectivity, L-Edit creates a NodeHighlighting folder with a [designname_nh]
subfolder as the default location for data from each cell that has node highlighting data.

It also activates the “enable node highlighting” button, which locks those data files so they cannot be
opened elsewhere at the same time. .

...\NodeHighlighting\test_lights_nh

L-Edit 14 User Guide Section 1 368


Chapter 13: Node Highlighting Node Highlighting Setup

The Node Highlighting Toolbar

You can run node highlighting using the menu commands in Tools > Node Highlighting or the Node
Highlighting toolbar. The table describes the icons below from left to right:

Extract Connectivity Runs the connectivity extraction engine and saves the results in the
design directory. Connectivity data is saved with the design file. If
connectivity information already exists, you will be prompted before
the data is extracted again.
Highlight Node Initiates node highlight mode. Once active, a left mouse click
highlights a node.

Each merged polygon on each of the node layers will be highlighted,


and the node name will be displayed in the status bar. Selecting a
node that is already highlighted will give you the option to remove
that highlight or change its color.

Previous node highlights remain when a new node is selected.


Highlight by Name Opens the Highlight Node by Name dialog which allows you to
highlight a node by name. Matching is case-insensitive. If the node
name is not found or if it matches more than one node, a warning will
indicate so and advise on how a node will be selected if it is not
unique. A history drop down list is provided for the Node Name
field.
Zoom to Node Pans and zooms to display all highlighted nodes in entirety plus a
10% margin.

Toggle Markers Toggles the display of all design markers (node highlighting, DRC,
SDL, cross probing, etc.).

(markers on)

(marker off)
Clear Markers Deletes the display of all design markers (node highlighting, DRC,
SDL, cross probing, etc.).

L-Edit 14 User Guide Section 1 369


Chapter 13: Node Highlighting Node Highlighting Setup

Enable Node Highlighting Use this button to obtain and release the node highlighting license. (It
will appear lighter when enabled.) Node highlighting data is license
controlled so that it cannot be opened by someone else when it is in
use. See “Default Location of Saved Node Highlighting Data” on
page 368.

Disabling node highlighting clears all markers as if you had used the
Clear Markers button.

Node Highlight Setup Opens the Setup Design dialog at the Node Highlighting tab. See
“Node Highlighting Setup” on page 366 for further information.

Open Connectivity Opens a text window displaying the Connectivity Extraction Log.
Extraction Log The log lists the port name and coordinates (in internal units) of ports
found on the same net. The log file is created in a temp directory and
is erased when the TDB file with which it is associated is closed.

Data is described in the following format, where the net number is


randomly assigned:
Found port conflict in net 30358248 within cell Core:
U33/Mux2_15_2/Out at (1216000, -420000)
U33/Mux2_8_1/A at (1136000, -420000)

Using Node Highlighting

[1] Use Tools > Node Highlighting > Extract Connectivity or the button to extract connectivity
data. If connectivity data for the cell already exists L-Edit will confirm that you wish to replace it.

L-Edit 14 User Guide Section 1 370


Chapter 13: Node Highlighting Node Highlighting Setup

[2] Once you have extracted connectivity data, you can highlight a node either by name or by clicking in
the layout. Using the mouse, pick Highlight Node then click on a point in the layout.

[3] If you pick a point that belongs to more than one node, L-Edit will list those nodes so you can choose
the one you want. When two nodes are highlighted in the list it often means that there is a sublayer.

[4] If you pick a node that is already highlighted, L-Edit will prompt you to remove or change the color of
the existing highlighting or to cancel the node selection process.

L-Edit 14 User Guide Section 1 371


Chapter 13: Node Highlighting Node Highlighting Setup

[5] To highlight a node by name, click on Highlight by Name and type the name of the node you want.

[6] L-Edit will highlight nodes using the marker color settings entered in the Node Highlighting Setup
dialog.

L-Edit 14 User Guide Section 1 372


Chapter 13: Node Highlighting Node Highlighting Setup

[7] It can be easier to see the highlighted nets when you toggle the markers on and off or if you hide most
layers. In the example below, the lower image shows only the “Active Contact” layer, and you can see
that the marker color has cycled from red to orange.

You can also press W to zoom into a marker.

L-Edit 14 User Guide Section 1 373


14 Add-Ins
1

The Tools > Add-Ins menu contains a miscellaneous set of macros for relatively uncommon tasks. .

Several macros are documented in this chapter, the remainder are documented in the functional area to
which they are related.

Note that you can use the shortcuts Tools > Macros and Tools > Repeat Macro to speed access to
commonly used add-ins.

Add-In macros documented in this chapter include the following:

ƒ “Count Objects” (page 375)


ƒ “Generated Layers for Legacy Extract” (page 375)
ƒ “Legacy Extract” (page 380)
ƒ “Area Calculator” (page 392)
ƒ “Instance Location Summary” (page 393)
ƒ “Mask Bias” (page 394)
ƒ “Mark Cells for Flattening During DRC” (page 395)
ƒ “Fix Wires With Short Segments” (page 396)
ƒ “Macro” (page 397)
ƒ “Repeat Macro” (page 397)

The following macros are discussed in the sections of the manual to which they relate functionally:

L-Edit 14 User Guide Section 1 374


Chapter 14: Add-Ins Count Objects

ƒ “Displaying Calibre® DRC Results” (page 863)


ƒ “Transferring File Information to Cells” (page 138)
ƒ “GDSII Properties” (page 164)
ƒ “Exporting PostScript Masks” (page 158)
ƒ “Resizing Port Text” (page 168)
ƒ “Importing a Setup from Laker” (page 57)
ƒ “Finding I/O Pads in the Fabrication Cell” (page 273)

Count Objects

Tools > Add-Ins > Count Object counts all objects in a design file, except ports and rulers since they
are not manufactured.

Generated Layers for Legacy Extract

When you use generated layers in an extract definition, L-Edit automatically generates objects on those
layers before proceeding with netlist extraction. Following netlist extraction, L-Edit automatically
deletes the objects it created during that Extract run. However, it only deletes objects generated during
that most recent Extract run—previously generated objects remain.

The extractor uses the layer generation method found in L-Edit version 9, which only operates on
boxes, and 45° and 90° polygons and wires. It does not extract circles or all-angle polygons and wires.

This behavior is different from layer generation using Tools > DRC or Tools > Generate Layers. If
you need to manually run the Extract layer generation, you can do this using “Generated Layers for
Legacy Extract,” below.

L-Edit 14 User Guide Section 1 375


Chapter 14: Add-Ins Generated Layers for Legacy Extract

Legacy Layer Generation

Because the extractor generates layers automatically, you do not need to perform layer generation as a
separate step. However, if you wish to manually generate layers to see them as the extractor sees them,
you can do so using Tools > Add-Ins > Legacy Layer Generation:

Target Layer(s) to be generated. Options include:


ƒ All layers
ƒ Layer—a single layer, selected from the drop-down menu
If a derived layer is dependent on source layers that are themselves
derived, the source layers are recursively generated as well.

Note: L-Edit does not generate locked source layers or layers for
which derivation is disabled. In these cases, L-Edit treats the
source layers as drawn layers for the purposes of generating
the derived layer.
Delete all derived layers Clears objects on all derived layers. When generating a single Layer,
prior to generation use this option to clear objects on other derived layers. Ports on
derived layers are not deleted.
Binning When checked, L-Edit divides the layout into a grid of square bins
and performs layer generation within each bin. Choosing the optimal
bin size significantly increases performance because objects that are
distant from one another are not involved together in layer-generation
operations.
Bin size Length, in display units, of each side of a bin.

Note: Note that the actual bin size used to generate layers is snapped
up to a multiple of the mouse snapping grid (set in Setup
Design > Grid > Mouse snap grid) to avoid generating
off-grid polygons.
Merge objects after Causes objects on a generated layer to be merged upon completion of
generation the process. This option can significantly increase processing time for
more complex layouts.

L-Edit 14 User Guide Section 1 376


Chapter 14: Add-Ins Generated Layers for Legacy Extract

Warning: If a source layer (i.e., an input to a derived layer) is hidden, L-Edit ignores objects on that layer.

When you execute the Generate Layers command, L-Edit automatically deletes existing objects on
derived layers before regenerating those layers. If you generate only a single layer, however, L-Edit
does not delete objects on other derived layers.

To delete such objects, check the option Delete all derived layers prior to generation. L-Edit does not
delete ports on derived layers. If generation is disabled for a particular layer, L-Edit does not
automatically delete objects on that layer before generating other layers.

Working with 45° Objects

When layers are generated with Tools > Extract, all off-grid vertices are rounded to the nearest internal
unit that preserves the angles. Off-grid vertices may result from off-grid intersections of 45° polygons,
and from conversion of 45° wires to polygons. The coordinates of off-grid vertices are rounded to the
nearest internal unit while still preserving 45° and 90° angles. If the dimensions of the source objects
(measured in internal units) are small, then the resulting polygons may be distorted.

In the following example, the polygons on layers a and b create an off-grid intersection. (The distance
between gridpoints is one internal unit). When generating a polygon equal to (a | b), L-Edit rounds the
off-grid vertex to the nearest gridpoint. To preserve 45° and 90° angles, two additional vertices must be
shifted to the left. This results in a distortion of the original shapes.

a b

a OR b
* Off-grid vertex

To can prevent distortion from rounding of grid coordinates, you should maintain a minimum
resolution, in internal units, for all edge lengths, wire widths, distances between objects, and Grow
distances. You can specify this minimum resolution by setting the mapping from internal units to
technology units in Setup > Design—Technology dialog (see “Technology Parameters” on page 78).
A setting of at least 100 internal units per technology unit is recommended for designs containing 45°
objects.

L-Edit 14 User Guide Section 1 377


Chapter 14: Add-Ins Generated Layers for Legacy Extract

When you run Extract, L-Edit checks the snap grid parameter. If it is less than 100 internal units, L-Edit
assumes that edges or spacings smaller than 100 internal units may exist on the layout, and the warning
appears, suggesting that the layout may need to be rescaled.

If you are certain that no edges, wire widths, spacing, or Grow values smaller than 100 internal units
exist, then click Yes to proceed. Changing the snap parameter to an equivalent of 100 internal units
prevents the warning from appearing (see “Grid Parameters” on page 79).

The equivalent number of internal units is based on the snap grid value (in display units) and the
number of internal units per display unit. It is up to you to make sure that no objects smaller than the
subgrid are created; the warning depends only on the current value of the snap grid, not on the actual
size of objects in the layout. You can rescale the design by increasing the number of internal units per
technology unit.

Writing Out Node Names

Legacy Extract can write out nodes as internally generated numbers (using the option Integers in
Extract—Output) or as descriptive strings (using the option Names in Extract—Output). For further
information on this dialog, see “Setup Extract Standard Rule Set–Output” (page 381).

To label a node or element for extract to a netlist, you must add a port to the layer of that node or
element, within an object (box, polygon or wire) on that layer. When Names is selected, L-Edit derives
node names from the names of ports found on the same layer as the node. It derives element names from
ports found on the device-specific recognition layer that are completely enclosed by that device. Port
labels are transferred when generating a layer for extract. For example, if you have a node name IN1 that
is on Metal 1 but in your extract definition file you use M1Wire which is Metal 1 and Not Inductor ID,
then the port on Metal 1 will be transferred to M1Wire during extract and will label the node IN1.

If you want to use the same ports for a design rule check that uses an assigned dummy layer, you can
change the layers for your ports by:

; hiding all objects except for ports

; hiding all layers except the node layer

; selecting all objects, which will be just the ports on the node layer

; using Edit > Edit Object to change the layer to the layer of your choice.

The strings produced by the extractor are the hierarchical names; each instance involved in a node is
mentioned and separated from the others by a slash (/), with the port name at the end. (Instances that are
unnamed in the layout are named automatically by the extractor.) For example, the node name

L-Edit 14 User Guide Section 1 378


Chapter 14: Add-Ins Generated Layers for Legacy Extract

U1/alpha/in describes a port in contained by an instance alpha, which in turn is contained by an


instance U1.

Adding User Parameters to Extracted Devices

Users can annotate extracted devices with parameters that are meaningful to downstream tools. To
annotate a device, create a port on the recognition layer that overlaps the device in question. The port
should be the device name followed by user parameters that users want add. This will set the particular
name and user parameters for that device. The first word of the port will become the SPICE name for
the device and the rest of the port text as the parameters to add to the device line.

Users can add extra parameters, replace existing parameters, or use existing parameters in their
expressions of their extra parameters. The directory L-Edit Pro\Samples\Extract contains two
examples demonstrating user parameters. The following are a series of examples showing the different
results of user parameters.

ƒ No port label
R23 nodeA nodeB R=3
ƒ Port text = "Rin" - labels a device to be Rin
Rin nodeA nodeB R=3

ƒ Port text = "Rin turns=4" - labels a device to be Rin, with property "turns=4"
Rin nodeA nodeB R=3 turns=4

ƒ Port text = "turns=4" - adds property "turns=4" to auto-named device


R23 nodeA nodeB R=3 turns=4

ƒ Port text = "Rin R=10 turns=4" - labels a device to be Rin, with property "turns=4" and the "R="
property will be replaced with the value in the port text.
R23 nodeA nodeB R=10 turns=4

ƒ Port text = "Mn1" - labels a device to be Mn1 - The model name is taken from the extract definition
file.
device = MOSFET(
RLAYER=ntran;
Drain=ndiff, AREA, PERIMETER;
Gate=poly wire;
Source=ndiff, AREA, PERIMETER;
Bulk=subs;
MODEL=NMOS;
)

Mn1 nodeD nodeG nodeS nodeB NMOS L=5u W=10u

ƒ Port text = "Mn1 MODEL=MyNMOS" - labels a device to be Mn1, with the model name replaced
with the specified model name, "MyNMOS". This allows the user to override the model name in
the EXT file.
Mn1 nodeD nodeG nodeS nodeB MyNMOS L=5u W=10u

ƒ Port text = " Mn1 AD='${W}*6u' " - labels a device to be Mn1, with ${W} replaced with the width
of the transistor. This allows the user to use device parameters in expressions of other parameters.
Mn1 nodeD nodeG nodeS nodeB MyNMOS L=5u W=10u AD='5u*6u'

L-Edit 14 User Guide Section 1 379


Chapter 14: Add-Ins Legacy Extract

The port string can include tokens, which are references to other values and device parameters. The
following tokens are expanded when writing to the SPICE netlist. All other text is parsed without
expansion. See the previous paragraph for an example.

Token Expansion

${property} The value of the named property (as a string). property can be
expressed using the full path—e.g., Mechanical.Length. If no path is
designated, EXTRACT is assumed.
\n \t New line (\n) or tab (\t) characters.
\\ \$ \{ \} The character after the initial backslash (instead of being interpreted
as part of a token).

Legacy Extract

Setup Extract Standard Rule Set–General

Use Tools > Add-Ins > Legacy Extract... to access this tab so you can specify input and output files
and other primary settings.

Extract definition file Name of the input file containing the extractor device and
interconnection definitions. You can choose from available files and
directories with the Browse button. You can open the file in a text
window with the Edit button. This will also close the Extract dialog.

L-Edit 14 User Guide Section 1 380


Chapter 14: Add-Ins Legacy Extract

SPICE extract output file Name of the output file containing the extracted netlist. Enter the
name (or use the default). You can choose from available files and
directories with the Browse button. You can open the file in a text
window with the Edit button. This will also close the Extract dialog.
Overwrite existing output When checked, causes automatic overwriting of the SPICE output
files file, even if these files already exist.
Open SPICE output file When checked, automatically opens the SPICE output file after
after extracting Extract runs.
Label all devices For each unnamed device, creates a two-dimensional port at the
location of the device. The text of the port is the text of the element
name for the device. Device labels will not be generated for devices
with user-placed labels.
The group Place device labels on layer contains options for writing
the device labels on the device-specific Recognition Layer or another
layer you select.
Write nodal parasitic Computes the capacitance with respect to the substrate of each node
capacitance in the circuit using the area and fringe capacitance constants specified
with “Layer Setup” (page 87). The node to substrate capacitance of N
is written to the netlist as a capacitor between N and the
substrate/ground (0). The form of this notation is Cpar1, Cpar2,
etc.
Write nodal parasitic capacitance is not generally turned on when a
netlist is extracted for LVS since the other netlist (typically derived
from a schematic) will not contain parasitic capacitors associated with
nodes.
Ignore nodal parasitic Specifies a limit, in femtofarads, below which the nodal parasitic
capacitance less than capacitance will not be written to the netlist. This field is disabled
when the Write nodal parasitic capacitance box is unchecked.
Bin size Length of one side of a bin, in display units. To improve performance,
L-Edit divides the layout into a grid of square bins and extracts each
bin individually. Devices that cross bin boundaries are extracted
properly.
Binning is not used if the Recognize subcircuit instances box in the
Subcircuit tab is checked.

Setup Extract Standard Rule Set–Output

L-Edit 14 User Guide Section 1 381


Chapter 14: Add-Ins Legacy Extract

Use the fields in this tab to specify the way in which the extracted circuit is written to the output netlist.

Write node names aliases Writes all node names associated with each node in comments at the
beginning of the netlist file in the section NODE NAME ALIASES.
* NODE NAME ALIASES
* NODE = NODE NAME (NodeLabelX, NodeLabelY)
* 1 = U1/Out (39.5,-9)
* 2 = B (-1,23.5)
* 2 = C (-42.5,23.5)
* 2 = U0/A (13.5,-9)
* 3 = D (33.5,20)

Write device coordinates Writes the coordinates in display units of the lower left and upper
(Display units) right corners of the device at the end of the SPICE line as a in-line
comment.
M1 1 3 5 5 PMOS L=2u W=28u $ (36.5 29 38.5 57)

P-Spice compatible Writes in-line comments using the ; character instead of the $
comments character so that they are compatible with P-Spice.
M1 1 3 5 5 PMOS L=2u W=28u ; (36.5 29 38.5 57)

Write terminal names for Writes the terminal names for subcircuits in a comment following
subcircuits each subcircuit statement in the netlist. Terminal names of other
devices are never written to the netlist file.
X1 1 2 4 ICResPoly L=2.4u W=720n
* X1 PLUS MINUS BULK

Write shorted devices If IGNORE_SHORTS is set in the extract definition file, writes
shorted devices into the netlist as comments; otherwise, shorted
devices are ignored. If IGNORE_SHORTS is not set, a shorted device
is written to the SPICE file as a regular device.

L-Edit 14 User Guide Section 1 382


Chapter 14: Add-Ins Legacy Extract

Write layer cap. & Writes warnings on missing layer capacitance and resistance values to
resistance warnings the specified netlist file.
* Warning: Layers with Unassigned AREA Capacitance.
* <PMOS Capacitor ID>
* Warning: Layers with Unassigned FRINGE Capacitance
* <Poly1-Poly2 Capacitor ID>
* Warning: Layers with Zero Resistance.
* <N Well Resistor ID>

Write node-element Writes a node-element cross-reference table in the comments of the


cross-reference netlist file. Also, list are the element’s terminal, the edge between the
node and the device recognition polygon, and the device’s location.
* NODE-ELEMENT CROSS REFERENCE
* NODE = ELEMENT Terminal (PinEdgeX1 PinEdgeY1
* PinEdgeX2 PinEdgeY2) (ElemX1 ElemY1 ElemX2 ElemY2)
* 6 = R1 P (-65 20 -65 30) (-65 20 -60 30)
* U0/A = R1 N (-60 20 -60 30) (-65 20 -60 30)
* U0/A = Mn1 G (18.5 -9 20.5 19) (18.5 -9 20.5 19)
* U0/A = Mp2 G (18.5 29 20.5 57) (18.5 29 20.5 57)
* U0/Gnd = M2 B (36.5 -9 38.5 19) (36.5 -9 38.5 19)
* U0/Gnd = Mn1 B (18.5 -9 20.5 19) (18.5 -9 20.5 19)
* U0/Out = M1 D (36.5 29 36.5 57) (36.5 29 38.5 57)
The element terminal abbreviations are as follows:
Resistor, Capacitor, Inductor: P - Positive, N - Negative
Diode: P - Anode, N - Cathode
BJT: C - collector, B - Base, E - Emitter, S - Substrate.
JFETs/MESFETs: D - Drain, G - Gate, S - Source, B - Bulk
MOSFETs: D - Drain, G - Gate, S - Source, B - Bulk
For Subcircuit, the entire pin name from the EXT file is written.
* 1 = X1(MINUS) (-16 25 -16 36) (-18.5 25 -16 36)

Write node name conflicts Flags node name conflicts that occur in the hierarchy other than in the
not at the top level top level. This is especially helpful for nodes in standard place and
route cells.
Write nodes and devices as Controls whether nodes are written as internally generated numbers
(Integers) or as descriptive strings (Names). Ports in the layout can
be used as node or element names in the netlist. For further
information, see “Writing Out Node Names” on page 378.
Write values in scientific When checked, this option writes numerical values in scientific
notation notation instead of SPICE engineering units.
Option on (checked)
M1 1 3 5 5 PMOS L=2E-6 W=2.8E-5
Option off (unchecked)
M1 1 3 5 5 PMOS L=2u W=28u

Write verbose SPICE Writes resistors, inductors, and capacitors to the netlist file with the
statements device value preceded with a R=, L=, or C=. For example, a capacitor
would have the following format: Cxxx n1 n2 modelName
C=cValue.

Write empty subcircuit Writes an empty subcircuit definition block at the top of the netlist
definition file. Use only with Recognize subcircuit instances on “Setup
Extract Standard Rule Set–Subcircuit” (page 384).

Write .END statement Writes a .END statement at the end of the netlist

L-Edit 14 User Guide Section 1 383


Chapter 14: Add-Ins Legacy Extract

Wrap lines greater than 80 Wraps SPICE lines at 80 characters and continues them on the next
chars. line, including comments.
M189 DataInB DataInUnBuf Vdd Vdd PMOS L=2u W=13u
becomes
M189 DataInB DataInUnBuf Vdd Vdd PMOS
+ L=2u W=13u

SPICE include statement Specifies text that is written unaltered as the second line of the output
netlist. Typically, an .include file command is entered, where file
represents a model or subcircuit file name.

Note: L-Edit cannot determine if other nodes in the circuit are ground nodes. If other nodes
are to represent ground, then they must be renamed 0—or any of its equivalents—in
the netlist.

Setup Extract Standard Rule Set–Subcircuit

Use the fields in this tab to specify parameters for subcircuit extraction.

Recognize subcircuit Activates the subcircuit recognition feature.


instances
Subcircuit recognition Name of the subcircuit recognition layer (SRL). This mandatory layer
layer should not contain electrically significant geometry.

L-Edit 14 User Guide Section 1 384


Chapter 14: Add-Ins Legacy Extract

Write netlist as a subcircuit When checked, this option writes the entire netlist in subcircuit
definition (.SUBCKT ... format. A .subckt command appears before the first device, and an
.ENDS) .ends command appears after the last device. When this option is
used, there must be a subcircuit recognition polygon at the top level
defining the subcircuit in order for Extract to proceed with subcircuit
extraction.
Flag improper overlaps Controls the reaction to geometry violations: under- or over-filled
connection ports or geometry that overlaps the subcircuit boundary.
Check to display warnings; clear to suppress warnings. Suppressing
warnings can be useful when extracting autorouted standard cell
designs with known over- and under-fill characteristics.
Ignore subcircuit List of ports whose names are ignored in subcircuit extraction.
connection ports with Contains the following fields:
names
ƒ SPR core ports—read-only field listing port names predefined
in SPR Core Setup—General.
ƒ SPR padframe ports—read-only field listing port names
predefined in SPR Padframe Setup—General.
ƒ One Other Port—use this field to specify one additional
subcircuit connection port to be ignored.
ƒ Ignore subcircuit connection port on layer—name of a layer
on which intruding geometry and subcircuit connection ports will
not be recognized. The netlist extractor also ignores any
geometry on the Icon layer (often used for documentation
purposes).
For more information see “Designing Subcircuit Cells” on page 386.
Subcircuit cross port Lists ports whose names are ignored in subcircuit extraction. Contains
names the following fields:
ƒ SPR row crosser—read-only field listing subcircuit cross ports
predefined in SPR Core Setup—General.
ƒ One Other Port—use this field to specify one additional
subcircuit cross port.
For more information see “Crossing Over a Subcircuit Instance” on
page 390.

Activating Subcircuit Recognition

Subcircuit recognition is activated by checking the Recognize subcircuit instances option in the
dialog “Setup Extract Standard Rule Set–Subcircuit” (page 384).

If the Write netlist as a subcircuit definition option is checked, then the entire netlist is written in
subcircuit format:

ƒ A .subckt command appears before the first device statement, and an .ends command appears
after the last device statement.
ƒ Subcircuit connection ports at the top level (that is, not contained in instances) of the extracted cell
are written as SPICE subcircuit pins in the output.

L-Edit 14 User Guide Section 1 385


Chapter 14: Add-Ins Legacy Extract

This feature can provide complete subcircuit definitions corresponding to subcircuit instance statements
generated from other cells. It requires that the subcircuit recognition polygon and the proper pin ports
exist at the top level.

As the extractor runs with subcircuit recognition activated, any errors are reported, and ports placed on
the Error layer at their locations in the layout.

Using Subcircuit Definitions for Hierarchical Cell Recognition

Though Legacy Extract does not process hierarchical designs, it does allow for a form of hierarchical
extraction that speeds the extraction process in higher-level cells. This is done by designating
often-instanced lower-level cells “subcircuit cells,” essentially making them black boxes, so that every
instance will not be extracted explicitly.

When not set to recognize such “subcircuits,” Legacy Extract flattens instances. The extracted netlist
therefore describes all devices at the same level, with no indication of hierarchy. However, if subcircuit
recognition is activated and there are instances of subcircuit cells, then the extracted netlist contains:

ƒ An empty subcircuit definition block corresponding to each subcircuit cell. Each such block begins
with the .subckt command and ends with the .ends command. Subcircuit and node names in the
netlist are taken from the names of the subcircuit cells and their connection ports.
ƒ A SPICE subcircuit instance statement corresponding to each instance. Each such statement has
the form xinstance pin1 … subcircuit, where instance represents the instance name, pin1 … the
pin list, and subcircuit the subcircuit definition name. (If the instance is unnamed in the layout,
Extract automatically assigns its name in the netlist.)

Designing Subcircuit Cells

Subcircuit recognition is recursive within non-subcircuit instances. If a higher-level cell contains a


non-subcircuit instance, and the instanced cell itself contains marked (subcircuit) instances, then the
subcircuit instances are properly extracted as subcircuits at any level of hierarchy, and any
non-subcircuit instances are flattened.

Subcircuit Recognition Polygons


A cell is marked as a subcircuit cell by the presence of a subcircuit recognition polygon (SRP) on the
subcircuit recognition layer (SRL).

The SRP is a box or a 90° polygon. It delimits the area of any of the subcircuit cell’s instances that
cannot be overlapped by geometry in the containing cell and the perimeter at which subcircuit
connection ports may be placed. There are two exceptions to the rule against overlapping an instanced
cell’s SRP:

ƒ Geometry inside subcircuit connection ports.


ƒ Geometry over cross port channels.

There may be only one SRP per subcircuit cell. If no SRP exists in the cell, then its instances are not
recognized as subcircuits; the extractor flattens them.

Any geometry in a cell that contains an SRP, including geometry outside the SRP, appears in instances
of the cell but is ignored by the extractor.

L-Edit 14 User Guide Section 1 386


Chapter 14: Add-Ins Legacy Extract

Subcircuit Connection Ports


The pins of a subcircuit instance are formed by placing subcircuit connection ports inside the subcircuit
cell on the particular layer on which connections will be made to the instance. A connection port must
both (1) be completely contained by the SRP, and (2) share an edge with the SRP. The port may be
2-dimensional or 1-dimensional (as long as it is co-linear with an SRP edge), but not 0-dimensional (a
point).

Subcircuit Recognition Polygon

0-D: Ignored
0-D: Ignored

1-D, not colinear with SRP edge: Ignored


1-D, colinear with SRP edge: Accepted as connection port

2-D, not on SRP edge: Ignored


2-D, on SRP edge: Accepted as connection port
2-D, not totally enclosed by SRP: Ignored
2-D, not enclosed by SRP: Ignored

The text associated with a connection port is transferred to the output netlist as the name of a signal
parameter (node) on the subcircuit definition. All connection ports, on all layers, with the same name
(within one subcircuit cell) are extracted as the same subcircuit pin. The pins of a subcircuit are written
in alphabetical, then numerical, order.

Certain named ports can be ignored as candidates for connection ports. These are shown in the dialog
“Setup Extract Standard Rule Set–Subcircuit” (page 384), in the Ignore subcircuit connection
ports with names section:

Ignored ports How specified

SPR core ports “SPR Core Setup–General” (page 412)


SPR padframe ports “SPR Padframe Setup–General” (page 422)
Ports on the Icon layer “Rescaling a Design” (page 101)
Ports matching a single Other text field
additional name
Ports on a single additional Ignore subcircuit connection port on layer drop-down list
layer

Connecting to a Subcircuit Instance

A connection to a subcircuit instance is formed by drawing an orthogonal wire, box, or polygon into a
connection port, on the same layer.

ƒ Into a 1-dimensional port, connecting geometry should be exactly as wide as the port and must
exactly abut the port without overshooting it.
ƒ Into a 2-dimensional port, connecting geometry should exactly fill the port, with neither gaps nor
spillovers.

Odd-width wires with extend or round end styles should not be used.

L-Edit 14 User Guide Section 1 387


Chapter 14: Add-Ins Legacy Extract

If the connecting geometry touches the connection port but does not exactly satisfy the above criteria,
then a connection is still specified in the output netlist, but a warning is generated.

The SRPs of multiple subcircuit instances may be abutted together; connections are formed between
abutting 1-dimensional connection ports without additional geometry.

Subcircuit recognition polygon

Incorrect

Correct

Incorrect

Connecting geometry should approach the SRP orthogonally for a distance at least equal to the largest
DRC spacing rule specified for the connecting layer. Non-connecting geometry should not be placed
any closer to a subcircuit instance than this distance.

L-Edit 14 User Guide Section 1 388


Chapter 14: Add-Ins Legacy Extract

A connection port should not exist on an “inside” corner of an SRP, but should be separated from the
corner by a distance D at least equal to the largest spacing rule value L specified for the layer. See the
following illustration.

Subcircuit recognition polygon

Incorrect

Correct

Correct
D≥L

Note: Extract does not check spacing rules.

Subcircuit connection ports and SPR signal connection ports have very similar functions: they mark the
locations of connections from outside to inside instances. There are, however, some important
differences.

ƒ Subcircuit connection ports may be 1- or 2-dimensional. SPR signal ports must be 1-dimensional.
ƒ 2-dimensional subcircuit ports must be completely filled by connecting geometry, and
1-dimensional subcircuit ports require the connecting geometry to have the same width. SPR signal
ports can be of a different width than the connecting geometry.
ƒ SPR signal ports may be entirely within the interior of a cell. Subcircuit connection ports must
share an edge with the subcircuit recognition polygon.

Because of these factors, the port construction shown in the following figure is used in standard cell
design for use with both SPR and Extract. Moreover, running Extract with the Flag improper overlaps

L-Edit 14 User Guide Section 1 389


Chapter 14: Add-Ins Legacy Extract

option turned off eliminates subcircuit extract warnings. For further information, see “Setup Extract
Standard Rule Set–Subcircuit” (page 384).

A 1-D subcircuit A 1-D


port should be SPR port
as wide as a can be

Added subcircuit
connection port,
Existing 1-D recognizing
SPR signal port connection from top.
also serves as a
subcircuit
connection port. Added subcircuit
connection port,
recognizing
connection from
Added SRP bottom.

Existing 1-D SPR signal port for


autorouting.

Crossing Over a Subcircuit Instance


A 1-dimensional cross port in a subcircuit cell defines a “channel” in the cell’s instances, over which
geometry may run without causing an overlap warning. The channel runs perpendicular to the width of
the cross port and extends from one end of the subcircuit recognition polygon to the other.

L-Edit 14 User Guide Section 1 390


Chapter 14: Add-Ins Legacy Extract

Extract recognizes the following as cross ports:

Cross ports How specified

Row crosser ports “SPR Core Setup–General” (page 412)


Ports matching a single In “Setup Extract Standard Rule Set–Subcircuit” (page 384), in the
additional name Subcircuit cross port names section, Other text field

SPICE OUTPUT Properties


SPICE OUTPUT properties are a subset of the general purpose L-Edit properties described in
“Properties” on page 138. In subcircuit extraction, SPICE OUTPUT properties determine the device
name, connectivity, and device parameters of the subcircuit.

You can use properties to format the output of subcircuit information written to a SPICE netlist. You
can attach properties to either a parent cell or an instance. L-Edit⁄Extract searches for instance properties
first. If it does not find any, it searches for properties on the parent cell.

SPICE OUTPUT properties are only processed as part of subcircuit extraction. See “Using Subcircuit
Definitions for Hierarchical Cell Recognition” on page 386 for more information.

Property Tokens
String properties can include tokens, which are references to other values and variables. The following
tokens are expanded during subcircuit extraction. All other text is parsed without expansion.

Token Expansion

# An incremented integer that counts the instances of the cell. (This


token is only expanded during extract.)
${property} The value of the named property (as a string). property can be
expressed using the full path—e.g., Mechanical.Length. If no path is
designated, EXTRACT is assumed.
%{port} The name of the node to which the pin associated with the named port
is attached.
\n \t New line (\n) or tab (\t) characters.
\\ \# \$ \% \{ \} \[ \] The character after the initial backslash (instead of being interpreted
as part of a token).

For example, the value of the following EXTRACT.SPICE OUTPUT property:

XPlate %{right} %{left} platemodel W=${W} L=${L}

would result in the following netlist output:

XPlate 5 3 platemodel W=5e-6 L=2e-6

where EXTRACT.W=5e-6 and EXTRACT.L=2e-6.

L-Edit 14 User Guide Section 1 391


Chapter 14: Add-Ins Area Calculator

Application Example

In the following example, the SPICE OUTPUT property allows you to specify multiple energy domain
connections such as electrical and mechanical connections—for example, the SPICE OUTPUT property
of the following MEMS plate:

X${instance} %{PL_Left}_m %{PL_Right}_m %{PL_Bottom}_m %{PL_Top}_m


%{PL_Left}_e %{PL_Right}_e %{PL_Bottom}_e %{PL_Top}_e mass4_geo W=${W}
L=${L}

will result in the following netlist output:

Xu5 3_m 4_m 6_m 2_m


3_e 4_e 6_m 2_m
mass4_geo W=3e-3 L=2e-4

where EXTRACT.W=3e-3 and EXTRACT.L=2e-4.

Notice that all ports are referenced twice in this string using property tokens: one to specify the
mechanical connection and the other to specify the electrical connection.

Area Calculator

Use Tools > Add-Ins > Area Calculator to calculate the area of all selected objects except instances.
The area calculated is the sum of a merge operation on all selected objects. All selected objects are
included, regardless of layer. The area is calculated for the resulting polygons. The area is displayed in
square display units. The Minimum Bounding Box (MBB) of the merged polygons and the density of
the merged polygons in their MBB is displayed also.

L-Edit 14 User Guide Section 1 392


Chapter 14: Add-Ins Instance Location Summary

Instance Location Summary

This macro generates an .htm format table that lists all cell instances in the active view. Colored values
are used to highlight a translation point that is not on an integer increment of the micron grid.

Cell Name Names the cells instanced in the cell on which the macro ran.
X (microns), Y (microns) Cites the displacement in the x- and y-direction, respectively, of the
instance with respect to its primitive cell.
Orientation Indicates the clockwise degree of rotation with respect to the
primitive cell, where zero is no rotation and a negative value is in a
mirrored position.
Scale A value ≥ 1 indicates the instance has been enlarged, a value < 1
indicates the instance has been shrunk, and 1 indicates no change in
size.
X Repeat, Y Repeat For instance arrays, indicates the horizontal (X) and vertical (Y)
repeat counts of the instance.
Delta X, Delta Y For instance arrays, indicates the X and Y spacing between array
elements, measured origin to origin.

L-Edit 14 User Guide Section 1 393


Chapter 14: Add-Ins Mask Bias

Mask Bias

Use this macro to performing mask resizing on a layer by layer basis. You can remove or merge
geometry as well as shrink or grow objects by layer.

Drawn Use this list to select the Drawn layer.


Grow By (Lambda) Enter the number by which the layer(s) will grow (positive number)
or shrink (negative number).
Mask Use this list to select the Mask layer.
Delete geometry on target Deletes the geometry on the layer where the change will take effect,
prior to resize before the resizing operation.
Delete geometry on source Deletes the geometry on the layer that does not change, after the
layer after resize resizing operation.
Merge geometry after Merges the geometry on the layer where the change is applied, after
resize the resizing operation.

L-Edit 14 User Guide Section 1 394


Chapter 14: Add-Ins Mark Cells for Flattening During DRC

Resize geometry in: ƒ Active cell only—applies the change to all geometry on the
selected layers of the currently active cell.
ƒ Selected objects in active cell only—applies the change only to
selected geometry on the selected layers of the currently active
cell.
ƒ Active cell and descendants—applies the change to all
geometry on the selected layers of the currently active cell and all
its instances in the design.
ƒ All cells in active file—applies the change to all geometry on the
selected layers of the all cells in the design.
Drawn - > Mask Sets the Drawn column as the source layer(s) and the Mask column as
the target layer(s).
Mask - > Drawn Sets changes to be applied to geometry on layers in the Drawn
column with respect to geometry on the Mask layer(s).

Mark Cells for Flattening During DRC

Use this dialog to select the cells that will be assessed for flattening according to the options selected in
DRC Flattening Setup.

Cells to flatten Use this list to select the cells that will be analyzed for flattening prior
to DRC. Use the Mark All and Unmark All buttons to speed the
selection process.

L-Edit 14 User Guide Section 1 395


Chapter 14: Add-Ins Fix Wires With Short Segments

Fix Wires With Short Segments

This utility is used mainly to clean up DXF files. It finds and corrects short segments on any wire that is
shorter than half the wire width, by removing them and projecting and connecting the other wire
segments. This is an all-angle function, the changes are not confined to orthogonal geometry.

After completing the operation L-Edit opens a simple log showing the date and time, and the number of
wire changed or deleted. Changes made using this dialog cannot be reversed.

Before After

L-Edit 14 User Guide Section 1 396


Chapter 14: Add-Ins Macro

Macro

Tools > Macro opens a dialog that allows you to run any of the macros loaded to its list, and to add the
listed macros to the L-Edit Tools pulldown menu.

Macros Highlight a macro in this list to Run it. Close closes the entire dialog.
Macro Files ƒ Load—lets you browse for new .c and .dll macro files to add to
the list.
ƒ Reload—lets you reload macro using the existing path and
filename, for example when a file has been updated.
ƒ Unload—removes a macro from the list.
ƒ Setup—opens Setup Application at the UPI tab so you can
specify the location of macro interpreter header files.
Load Files at Startup Saves the currently highlighted macro to the Tools menu beneath
Add-Ins. Note that only one macro at a time will be saved.

Repeat Macro

Tools > Repeat Macro simply re-opens the dialog of the most recently used macro.

L-Edit 14 User Guide Section 1 397


15 Introduction to Placement and
Routing
Section 2Section 2: Placement and Routing

Placement and Routing in L-Edit

This volume of the L-Edit user guide describes the automatic standard cell place and route (SPR)
features of L-Edit.

The chapter “Placing and Routing Standard Cell Designs” on page 400 explains the three SPR modules:
core generation, pad routing, and padframe generation. It also explains global signal routing, which is
used to route as many as two I/O signals independent of other signals. The chapter “Standard Cell
Library Designer’s Guide” on page 445 provides design rules for creating standard cell libraries.

Standard Cell Place and Route (SPR)

Standard cell place and route (SPR) is a place and route package for standard cells that can
automatically lay out entire chips. It consists of three modules: a core place and route module to
generate a core cell, a padframe generator, and a pad route module to connect the padframe with the
core cell. You can run these three modules individually or together.

SPR uses standard cells and pad cells from a standard cell library. Netlists can be provided in Electronic
Design Interchange Format (EDIF) or Tanner Place and Route (TPR) format. If needed, a mapping tool
allows you to achieve consistency between the cell and pin names in your netlist and your library.

SPR generates a core, a padframe, and a chip cell in L-Edit which then can be checked for design rules
and extracted. In order to verify the delay constraints, you can generate a nodal capacitance (CAP) file
or a standard delay format (SDF) file, or both, during the place and route step.

The place and route steps are fully automated. You can use two- or three-layer routing, with the latter
including the option of over-the-cell (OTC) routing. Up to two I/O signals (e.g., clock signals) can be
routed separately to better control delay and skew when you use the global input signal routing function.
Among the many features of SPR are standard cell grouping (cell clustering) and critical nets
consideration.

L-Edit 14 User Guide Section 2 398


Chapter 15: Introduction to Placement and Routing Standard Cell Place and Route (SPR)

The following diagram illustrates the design flow for L-Edit⁄SPR within the Tanner EDA tool suite.

L-Edit / SPR Design Environment

Syntax and usage for the following file formats are detailed in the chapter “Place and Route File
Formats” on page 454:

ƒ CAP files—an SPR output file that lists the capacitance, area, and length of each node due to
routing.
ƒ EDIF files—a netlist format used as input for SPR.
ƒ TPR files—a netlist format used as input for SPR.
ƒ SDF file—an output file that contains interconnect delays due to routing in standard delay format.

L-Edit 14 User Guide Section 2 399


16 Placing and Routing Standard Cell
2
Designs

Introduction

L-Edit⁄SPR (Standard Cell Place and Route) places and routes a design using a user-provided EDIF or
TPR netlist and a standard cell source library as input. SPR includes three options:

ƒ Core place and route generates a core cell using standard cells from a standard cell library.
Parameters for standard cell core place and route can be specified in the dialog “SPR Core Setup”
on page 411.
ƒ Padframe generation creates a user-specified padframe with pad cells from the standard cell
library. Parameters for padframe generation are specified in the dialog “SPR Padframe Setup” on
page 422.
ƒ Pad routing routes signals, including power and ground, between the layout core of a chip and its
padframe. Parameters for pad routing are specified in the dialog “SPR Pad Route Setup” on page
426.

You can perform the three SPR operations in one step or separately. L-Edit can perform a pad route
against a single pregenerated core cell or a set of core cells and/or other customized building blocks, as
long as the layout core of the chip is composed in one cell. Similarly, L-Edit can perform a pad route
against a pregenerated padframe, which can also be built in any manner, as long as it forms a single
padframe cell and conforms to SPR constraints.

L-Edit 14 User Guide Section 2 400


Chapter 16: Placing and Routing Standard Cell Designs Required Files

Running all three operations produces a completed design like the following:

Pad route

Padframe
Layout core

Bonding pad

Chip with core, padframe, and pad routing.

Required Files

To run SPR, the following files are required:

ƒ A design file (.tdb).


ƒ A netlist file (.tpr, .edf, .edn, or .edi). This file contains a textual description of your schematic
design and identifies the cells that are required from the standard cell library file.
ƒ A standard cell library such as morbn20d.tdb, which contains the standard cells and pad cells
required for your design. This particular file is a component of the Tanner Research standard cell
library SCMOSLib. You can also create your own standard cell library.

Note: To place and route a design, you must first define (in your design file) a technology
setup appropriate to your standard cell library. If you start L-Edit with an empty
design file, use File > New to copy the technology setup from an existing TDB file or
a technology file such as morbn20.tdb before setting up or running SPR.
Alternatively, you can simply open a design file that already contains the correct
technology setup.

SPR Process Overview

To place and route a design using L-Edit⁄SPR, you will typically perform the following steps:

L-Edit 14 User Guide Section 2 401


Chapter 16: Placing and Routing Standard Cell Designs SPR Process Overview

; Create a schematic representation of your design.

; Export the schematic as either a flattened EDIF netlist or in TPR format. L-Edit supports EDIF version
2 0 0, EDIF level 0, keywordLevel 0, viewType NETLIST, or netlists with one level of hierarchy.

; Launch L-Edit. Use File > New to create your design file (layout file). Import the design information
(technology setup) from your cell library into the design file by entering your cell library file name in
the Copy TDB setup from file field of the New File dialog.

; Use File > Save to label and save your initial design file with an appropriate name.

; Choose Tools > SPR > Setup. In the SPR Setup dialog (see “SPR Setup” on page 408) specify the
names of the standard cell library file and the netlist file. Also specify the power and ground node and
port names as used in your schematic. (These names must match the names of the power and ground
ports in the standard cells.)

; Click the Initialize Setup button. This will read the netlist and initialize the following setup dialogs with
netlist information: critical nets, I/O signals, padframe layout, and core and padframe signals of the pad
route.

; Click the buttons Core Setup, Padframe Setup, and Pad Route Setup, respectively, to specify the
remaining setup parameters for core placement and routing (see “SPR Core Setup” on page 411),
padframe generation (see “SPR Padframe Setup” on page 422), and pad routing (see “SPR Pad Route
Setup” on page 426).

; Choose Tools > SPR > Place and Route. Select the appropriate option (Core place and route,
Padframe generation, or Pad route) singly or in any combination. Depending on your standard cell
design, uncheck or check the Global input signal routing option. (Global input signal routing requires
special buses to be available in your standard cells, see “Global Input Signal Routing (Clock Routing)”
on page 406 for further details). Decide on your core configuration. For example, select Square if you
want to obtain a square core shape. Check or uncheck the placement and routing optimization options.
Specify the output options—for example, whether you want to label nodes with ports (to support node
recognition during extraction) or whether you want to generate files containing nodal capacitances.

; Click the Run button. Depending on your selected options, SPR will generate up to three new cells: a
core cell, a padframe cell, and/or a chip cell (which contains the core, the padframe and the padroute). If
these cells already exist in your design file, SPR will prompt you before overwriting them.

; When processing is complete, SPR will output an SPR Complete dialog providing summary statistical
information for your design. (You can use Tools > SPR > Summary at any time to display a text file
with further details.)

; Click the OK button in the summary dialog to display the completed design. The example shown below
includes 990 standard cells (3,510 gates). On a 450 MHz Pentium II PC with 128 MB RAM, using both
placement and routing optimization, SPR can generate this design in less than ten minutes.

L-Edit 14 User Guide Section 2 402


Chapter 16: Placing and Routing Standard Cell Designs SPR Process Overview

; Confirm that the dimensions of the core and/or padframe fall within the size limitation imposed by your
vendor. If not, you need to re-run SPR with either a different core configuration or increased placement
and routing optimization (see “Placement Optimization” on page 436).

; Verify the design using L-Edit DRC (see “Running DRC” on page 479) and L-Edit Extract (see
“Extracting Layout” on page 829.)

; Save the design in GDSII format and send it to your vendor for fabrication.

Design Tips

If you use an EDIF netlist and your netlist cell and/or port names differ from the names used in the
standard cell library, use the Mapping Table button on the SPR Setup dialog (see “Mapping Table” on
page 410) to generate a mapping table that allows you to assign the correlating names. SPR will use this
mapping information when it discovers a discrepancy between a cell or port name in your netlist and
your cell library.

Before running SPR on a new layout, use the Initialize Setup button (see “Initializing Setup” on page
411) to automatically enter pad-related information (for example, I/O signal configuration) from your
netlist into the setup dialogs. SPR will only refer to the netlist if a dialog is empty. In this case, L-Edit
will automatically fill the dialog fields with the netlist information.

We recommend that new users first generate a core separately. The dialogs that require I/O signal
information (SPR Core Setup—I/O Signals) can be filled out either manually or, if pads or I/O signals
are available in the netlist, initialized with the netlist information using the Initialize Setup feature. The
padframe should be created next, taking the core dimensions into consideration. Finally, you can
generate the new chip cell by performing a pad route using the core and padframe cells.

L-Edit 14 User Guide Section 2 403


Chapter 16: Placing and Routing Standard Cell Designs Core Generation and Pad Routing

Core Generation and Pad Routing

In pad routing, L-Edit routes signals only between the outer edge of the core and the inner edge of the
padframe. Therefore, the core’s position and dimensions are critical, but its internal geometry is not.

L-Edit determines the core’s position by searching for an abutment port, which defines the edges of the
core cell. The program creates the abutment port on the layer defined as the Icon layer. To define the
Icon layer, choose Setup > Special Layers. For further information, see “Rescaling a Design” on page
101.

The core and pad routing must adhere to the following constraints:

ƒ The core must contain signal ports along its edges for every signal going to the padframe.
ƒ Signal ports on the core and padframe must be ordered such that no signal running between core
and padframe crosses over another signal, except for power and ground.
ƒ However, signals may cross power or ground rails only if the materials used for routing are
different (for example, Metal2 for I/O signals and Metal1 for power and ground).
ƒ Power and ground lines are of the same material and may not cross.

The following figure illustrates the placement of signal ports along the core.

N M L K

Vdd Gnd

A J

Abutment port
B I

C H

D E F G

Core with abutment port and signal ports (A - N).

The pad router can only route a single core to the padframe. To use several core cells, you must create a
new cell, instance each core cell, manually wire the instances together and finally surround the contents
of this new cell with an abutment port and signal ports as described above. L-Edit then treats this new
cell as a “single” core for the purposes of pad routing. You specify the name of this newly created core
cell and other necessary information in the dialogs “SPR Core Setup–General” on page 412 and “SPR
Pad Route Setup–General” on page 428.

A netlist is not required if you perform a separate pad route with pregenerated core and padframe cells.

L-Edit 14 User Guide Section 2 404


Chapter 16: Placing and Routing Standard Cell Designs Padframe Generation and Pad Routing

Padframe Generation and Pad Routing

In padframe routing, L-Edit routes signals only as far as the inner edge of the padframe. Therefore, the
padframe’s position and dimensions are critical, but its internal geometry is not. To indicate the region
in which the core may be placed, L-Edit places a rectangular padframe port on the inner edge of the
padframe.

For each signal going to the core, the padframe must contain one signal port along its inner edge. Signal
ports for each signal going to the core must be placed on the padframe in the same order and on the
same side as the signal ports around the core cell. These ports may be at the top level (in the padframe
cell itself) or they may be one level lower in the hierarchy (in a pad cell instanced by the padframe).
Power and ground pads must be on different sides of the padframe. L-Edit cannot route directly between
the pads on the padframe—it can only route between the padframe and the core.

The following illustration shows a padframe with ports for signals, power, and ground.

Padframe port
Vdd

Gnd

Signal ports

Padframe with ports for signals, power, and ground. The


padframe port defines the inner edge of the padframe.

SPR Port Annotation

The Padframe generator of SPR will create a new port for each pad, and give these ports the same name
as the netlist instance name of the corresponding pad. These new ports are particularly useful for
extract/simulation, so that the I/O pads of the resulting netlist have constant, persistent names. They are
also useful in creating bonding diagrams, and other documentation.

These ports are created in the padframe cell. These new ports are placed coincident with the ports
named “Pad” inside each pad library cell, on the same layer as the “Pad” port, with text size that is 10
times as large. If the pad cell does not contain a “Pad” port, no new port is created.

A padframe can be generated using two methods:

L-Edit 14 User Guide Section 2 405


Chapter 16: Placing and Routing Standard Cell Designs Global Input Signal Routing (Clock Routing)

Generating a Padframe from a Netlist with Pad Cells

; If the netlist contains pad cells, use the Initialize Setup button to automatically include pad cell instance
names and their location in the SPR Padframe Setup—Layout dialog.

; Fill out the remaining input fields, like padframe size and padframe cell name. In the SPR Setup dialog,
provide the names of the cell library that contains the pad cells and the appropriate netlist.

; Run SPR with Padframe generation turned on.

Generating a Padframe Without a Netlist or Without Pad Cells

; If the netlist does not contain pad cells or if no netlist is available, manually input pad cell names and
their location in the SPR Padframe Setup—Layout dialog.

; Fill out the remaining input fields, like padframe size and padframe cell name.

; In the SPR Setup dialog, provide the name of the cell library that contains the pad cells and leave the
netlist input field blank.

; Run SPR with Padframe generation turned on.

Global Input Signal Routing (Clock Routing)

Global input signal routing is used to route as many as two I/O signals, such as clock nets,
independently from other signals.

For global input signal routing, standard cells must contain two global signal buses, with four global
signal ports, placed above and below the power and ground buses The following illustration shows a
standard cell (top view) with two global signal buses. GS1 and GS2 are global signal ports of this
standard cell.

GS1 GS1
VDD

GND

GS2 GS2

Standard cell (top view) with two global signal buses.


GS1 and GS2 are global signal ports of this standard cell.

L-Edit 14 User Guide Section 2 406


Chapter 16: Placing and Routing Standard Cell Designs Global Input Signal Routing (Clock Routing)

During core routing, L-Edit connects signal ports belonging to global signal nets (labeled A and B in the
illustration below) to the dedicated global signal bus.

GS1 GS1
Vertical
Routing VDD
Layer
Horizontal A
Routing B
Layer
GND
Via
GS2 GS2

Internal signal ports of the two global signal nets connected with the
dedicated global signal buses.

After placement, L-Edit adds buffer cells to both ends of the standard cell rows. L-Edit calculates the
number of buffer cells required for each row by dividing the number of standard cells connected to the
global signal nets by the driving force, which the user specifies in the dialog “SPR Core Setup–Global
Signals” on page 419.

Buffer cells are dedicated to one of the two global signal buses. Each buffer cell contains an IN port that
is accessible from the side and placed on the vertical layer. The IN port of the outermost buffer cell is
connected with the vertical global signal rail on this side.

The vertical global signal rail is placed on the vertical layer, inside of the vertical power rail. It is twice
as wide as the IN port of the buffer cell(s) on this side.

Row buffers (dedicated to GS2) GND

GS1 GS1
Vertical
Routing
Layer VDD VDD
Horizontal IN IN IN
Routing
Layer OUT OUT OUT

Via GND
GS2 GS2

GS2 rail GND

Buffer cells (right side) and their connection with the global signal rail GS2

Pad routing connects the vertical global signal rails to the appropriate ports on the padframe. Layer
assignment for global signal pad routing is equivalent to the layer assignment for regular I/O signals
leaving the core. The pads of the global signal nets have to be located either on the left (for the left
global signal rail) or on the right side (for the right global signal rail).

L-Edit 14 User Guide Section 2 407


Chapter 16: Placing and Routing Standard Cell Designs SPR Setup

GS1

VDD GS2

Pads GND

Vertical
Routing
Layer
Horizontal
Routing
Layer

Global input signal and power routing

SPR Setup

Before running SPR, you must set the appropriate options. Use Tools > SPR > Setup to open the SPR
Setup dialog.

L-Edit 14 User Guide Section 2 408


Chapter 16: Placing and Routing Standard Cell Designs SPR Setup

Specify the following:

Standard cell library file File containing the standard cells and pad cells that L-Edit uses to
generate your design. If your design file already contains the required
cells, you may use it instead of the standard cell library. Enter the full
pathname if the file is not in the current L-Edit directory.
Netlist file File containing a textual description of your schematic design, which
identifies the cells required from the standard cell library. This file is
always required when you place and route a core. It is optional when
you perform only pad routing or padframe generation.

SPR accepts flattened EDIF netlists or netlists with one level of


hierarchy only.

Two types of netlist files are supported:


ƒ TPR—Tanner Place and Route Format, produced by S-Edit
ƒ EDIF—EDIF version 2 0 0, EDIF level 0, keywordLevel 0,
viewType NETLIST. (Acceptable filename extensions are .edf,
.edn, and .edi.)

A SPICE netlist can also be used if it is first converted to TPR format.


Mapping Table Accesses the dialog “Mapping Table” on page 410 to map cell and
port names between the EDIF netlist and the standard cell library.
Initialize Setup Reads pad-related information from the netlist and completes the
fields in the setup dialogs that specify critical nets, padframe layout,
core signals, and padframe signals. If these fields already contain
information, SPR will prompt you to keep or overwrite the values.
(See “Initializing Setup” on page 411.)
Remove power and ground If power and ground pins are explicitly placed on schematic symbols,
nets from the netlist and this option should be checked to remove power and ground from the
power and ground pins netlist for correct place and route performance.
from the gates during
reading

Power signal Schematic netlist name of the power node. The power signal must
have the same name as the power port in the standard cells.
Ground signal Schematic netlist name of the ground node. The ground signal must
have the same name as the ground port in the standard cells.

When you have typed the correct information in these fields, click the appropriate button—Core setup,
which opens “SPR Core Setup–General” on page 412, Padframe setup, which opens “SPR Padframe
Setup–General” on page 422, or Pad route setup, which opens “SPR Pad Route Setup–General” on
page 428—to continue SPR setup.

Each of these dialogs contains a Reset button, which resets all fields and options to the values they held
when you accessed the dialog.

If you are using an EDIF netlist and it has different cell and port names than those used in the cell
library, you must map these names correctly. For additional information on this topic, see the section
“Mapping Table,” below.

L-Edit 14 User Guide Section 2 409


Chapter 16: Placing and Routing Standard Cell Designs SPR Setup

Mapping Table

L-Edit invokes the Mapping Table dialog while processing the EDIF netlist whenever it finds a
discrepancy between the cell or port names. You can also click Mapping Table in the SPR Setup dialog
to directly generate a mapping table before running SPR.

Mapping information is saved in the design file. If you change the netlist (within the same design file),
the mapping table will display values for previously mapped cells and ports.

Use this dialog to define the correspondence between:

ƒ Cells in the EDIF netlist and cells in the standard cell library file.
ƒ Ports in the EDIF netlist and ports in the standard cell library file, within individual cells.

Port mapping is only required if a port name discrepancy occurs. However, if you map one port in
an individual cell, you must map all ports in that cell.

If your cell interface in the EDIF file contains ports which are not connected in your design, you
can label them as “not used” during the mapping process.

To map a cell, click the netlist or TDB cell name, or Browse Cells. To map a port, click the netlist or
TDB port name, or Browse Ports. L-Edit displays a dialog in which you select the correct cell or port.

Cell mapping A numbered list of cells named in the EDIF netlist.


ƒ Netlist cell names—list of cells named in the EDIF netlist.

ƒ TDB cell names—list of cells contained in the standard cell


library file.

L-Edit 14 User Guide Section 2 410


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

To map a cell, click on a cell name, or Browse Cells. L-Edit displays


a dialog where you can select the correct cell.
Port mapping A numbered list of ports named in the specified cell in the EDIF
netlist.
ƒ Netlist port names—list of ports named in the EDIF netlist.

ƒ TDB port names—list of ports contained in the standard cell


library file.
To map a port, click on the netlist or TDB port name or Browse
Ports. L-Edit displays a dialog in which you select the correct port.

Browse Cells Opens a dialog containing a list of cells contained in the specified
standard cell library file.
Browse Ports Opens a dialog containing a list of ports for the specified cell in the
specified standard cell library file.
Accept Saves mapping input and closes the Mapping Table dialog.
OK Saves mapping input, checks that all EDIF cells and ports are
mapped, and closes the Mapping Table dialog.

Initializing Setup

The Initialize Setup function keeps the setup dialogs and the netlist synchronized. You should use it
when you create a new design and whenever the netlist is changed or updated. When you click the
Initialize Setup button, SPR updates the following dialog values with values from the netlist:

ƒ Critical nets in SPR Core Setup—Placement, if any


ƒ I/O signal specifications in SPR Core Setup—I/O Signals
ƒ Pad route specifications in SPR Pad Route Setup—Padframe Signals and SPR Pad Route
Setup—Core Signals

ƒ Padframe specifications in SPR Padframe Setup—Layout

You cannot cancel or undo this operation.

SPR Core Setup

In this dialog, you define the parameters L-Edit will use to generate your design core. The dialog
consists of seven tabs:

ƒ General
ƒ Layers
ƒ Design Rules
ƒ Placement
ƒ Global Signals
ƒ Power
ƒ I/O Signals

L-Edit 14 User Guide Section 2 411


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

Each tab contains a Reset button, which resets all fields and options to the values they held when you
accessed the dialog.

SPR Core Setup–General

The General tab contains fields used to define the library cells, standard cell ports, and output cells used
in generating the core.

L-Edit requires three special standard cells in a library set: a row crosser cell, the tie-to-power cell, and
the tie-to-ground cell. They are used for node connections only and are not included in the netlist.

Specify the following:

Library cell names Row crosser cell, Tie-to-Power cell, and Tie-to-Ground cell, as they
are named in the standard cell library. These cells must be part of the
standard cell library. For detailed design information on these cells,
see “Special Standard Cells” on page 448.
A row crosser cell contains one row cross port and is placed to make
up a cross-row pass to route wires across a standard cell.
The tie-to-power cell is needed where a standard cell has a pin
directly tied to Vdd.
The tie-to-ground cell is needed where a standard cell has a pin
directly tied to Gnd.
Port names in standard Names of the Row crosser port and Abutment port as they are
cells named in the standard cell library.
A row crosser port defines crossing paths to route wires across a
standard cell row. This port must be placed on the vertical routing
layer.
The abutment port surrounds the standard cell and defines its edges.

L-Edit 14 User Guide Section 2 412


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

Core cell The name of the core cell to be created.


Row base name The base name of the row cells to be created.
Channel base name The base name of the channel cells to be created.

SPR Core Setup–Layers

The Layers tab contains fields that define the layers L-Edit will use to route the core. You use it to
specify whether two or three layers are used for routing. If you use three layers, you can also select
over-the-cell (OTC) routing.

This tab also contains fields for the layer-to-layer capacitance between routing layers. These
capacitance values are used for extracting nodal capacitances, which are written to the CAP file (see
“Nodal Capacitance Files (CAP)” on page 438).

Click on 2-layer routing or 3-layer routing to choose a routing configuration. If you use three-layer
routing, Over-the-cell routing will be an available option.

Specify the following:

Signal routing layers Specify the routing layers and the via layer(s) to be used for channel
routing.
Power/Ground routing Specify the routing layers for power and ground. This assignment
layers must be consistent with the layer assignment of the power and ground
buses within the standard cells (usually in the H1 layer).
Layer-to-layer area Enter the layer-to-layer capacitances between your routing layers (in
capacitances aF/sq. micron). These values are only required if the Write CAP file
option in the Standard Cell Place and Route dialog is checked.

L-Edit 14 User Guide Section 2 413


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

Over-the-Cell Routing

Over-the-cell (OTC) routing uses tracks above the cells, in the H2 layer, between the channel edge and
the “outermost” port inside the cells, for routing.

A special algorithm sorts net segments to utilize these tracks as effectively as possible. The number of
OTC tracks depends directly on how you have placed your ports inside the standard cells. If all ports are
lined up in the center of the standard cell, a maximum number of OTC tracks can be utilized.

Outermost ports
Cell

inside the cell

OTC routing in
M3

Routing in M1
Channel

and M3

Routing in M3

Layout example of three metal layers with OTC routing.

L-Edit 14 User Guide Section 2 414


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

SPR Core Setup–Design Rules

Use the Design Rules tab to specify the design rules L-Edit must follow to route the core in
conformance with the technology used to fabricate your design.

A C B

D F E
G H
I J

The figures “SPR widths, spaces, and via surrounds in 2-layer routing” on page 416 and “Minimum
cell-cell and cell-power spaces” on page 416 illustrate the application of design rules in 2-layer routing.
The letters in the dialog fields provide a key for the labels in the illustrations and the values they
represent.

This tab also displays the effective channel pitch on the H layer(s) in a read-only field. (The channel
pitch is the distance between the centerlines of two neighboring horizontal routing segments.) This
value is internally calculated according to your design rules.

L-Edit 14 User Guide Section 2 415


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

Signal A
Signal B
Signal C

Standard Standard Standard


Cell Cell Cell
A B C
Abut Abut
H B
G
V
Routing
Layer
A Channel
H1 I pitch
Routing E C
D
Layer

Via
F
J
SPR widths, spaces, and via surrounds in 2-layer routing

L Standard cell row # n

Routing channel # n K

Standard cell row # n+1

Vdd Gnd

Minimum cell-cell and cell-power spaces

L-Edit 14 User Guide Section 2 416


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

SPR Core Setup–Placement

This tab contains options for controlling the outcome of the automatic placer.

Specify the following options:

Net Name Enter a net name.


Criticality Enter an integer criticality value. A positive integer value denotes a
higher priority net, a negative integer value reduces the importance of
the net during placement. See “Assigning Net Criticality” on page
417 for further details.
To add a new critical net, click Add. To delete a critical net, select it
and click Delete.
Instance Name Instance name of a standard cell to be included in a cluster.
Cluster Enter an integer value. All cell instances with the same cluster
number are placed within one cluster. See “Clustering Standard
Cells” on page 418 for further details.
To add a new cell instance to a cluster, click Add. To delete a cell
instance from a cluster, highlight the instance name and click Delete.

Assigning Net Criticality

Nets that are critical in your layout can be specified in the List of critical nets. Criticality is expressed
as an integer value that may be positive or negative. The higher the criticality value, the higher the
priority of the net during placement. (A positive value net is given a higher priority, a negative value net
is given a lower priority during placement.) The value for any net that is not specified in this table is
zero.

The consideration of net criticality in L-Edit/SPR is based on two assumptions:

L-Edit 14 User Guide Section 2 417


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

ƒ The numerical value of the criticality describes the relative importance of a net compared to others.
For example, if the criticality of net A is twice the criticality assigned to net B, then the placer
considers it as twice as important to reduce the length of net A compared to net B.
ƒ The critical values are scaled internally according to the largest value that has been entered, with
the largest value assigned to a fixed internal value. Hence, if net A is the only net with an assigned
criticality, than any criticality value greater than zero for this net would lead to the same result.

Net criticality can be entered either by using the EDIF netlist attribute criticality, or directly in the SPR
Core Setup—Placement dialog. If SPR finds criticality values in this dialog, it will ignore any
criticality values found in the netlist. To transfer criticality values from the netlist into this dialog, use
the Initialize Setup button (see “Initializing Setup” on page 411).

Clustering Standard Cells

The List of clusters allows you to group standard cells together. All cell instances assigned the same
cluster number are placed side by side, from left to right, in the order in which they appear in this table.
Cell clusters cannot be “broken”—they must fit on one row. Note that row crossers might be inserted
between two cells within one cluster.

Note: If you turn off placement optimization, cell clustering can also be used to place your
cells in a specific sequence. SPR always places cell instances from left to right inside
a cluster according to their sequence in the list of clusters. Without placement
optimization, clusters are placed according to their number, starting with the lowest
row, from left to right (see the figure on the following page). Cell instances that are
not included in any cluster are placed subsequently, in the sequence of the netlist.

Cluster 3

Cell instances without a cluster


number
Cluster 1 Cluster 2

Core with two rows containing clusters that are placed with placement
optimization turned off.

L-Edit 14 User Guide Section 2 418


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

SPR Core Setup–Global Signals

This tab contains options used to route global input signals. If you do not check the option Global input
signal routing in the Standard Cell Place and Route dialog (see “Standard Cell Place and Route” on
page 433), you can ignore this dialog.

Specify the following options:

Global input signal names Specify one or two signals for global routing.
in netlist

Ports names in standard Names of the bus ports in the standard cells that will be used for each
cell global input signal. This port name assignment subsequently defines
the bus, rail, and pad positions used to route each global signal net
(see “Global Input Signal Routing (Clock Routing)” on page 406).
Buffer cells in standard cell Names of the buffer cells to be placed on the left and right side of the
library standard cell rows. If your design has only one global input signal,
specify one buffer cell on the same side as the global input signal rail.
Driving force Driving force is the driving capability (fanout) of one buffer cell—the
maximum number of standard cells that can be driven by this buffer
cell. The value must be greater than or equal to 1. L-Edit calculates
the number of buffer cells to place on the edge of each standard cell
row by dividing the number of driven cells in the row by this value.
Global input signal 1 rail on Click the option button for whether the Global input signal 1 rail
should be on the Left side or the Right side of the core. L-Edit will
place the rail for Global input signal 2 on the opposite side.

Note: The assignment of global signal bus ports to each global signal net determines the
assignment of these nets to either the upper or lower global signal bus. Because buffer
cells are specifically connected to either the upper or lower global signal bus, this port

L-Edit 14 User Guide Section 2 419


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

assignment also determines which global signal net the left and right global signal
rails represent.

SPR Core Setup–Power

This tab contains options for the placement and width of power and ground rails.

Specify the following options:

Power (Vdd) rail on: Power and ground rails can be placed either on the left or right side of
the core cell. This choice will be overwritten by the location of the
power and ground pads if the padframe is generated simultaneously
and a conflict is detected.
Automatic (Bus width x Check here if you want your power and ground rail widths to be
fanout) calculated internally by SPR. In this case, the width is determined by
multiplying the bus width (in the rows) with the number of rows to be
driven.
Power (Vdd) rail width The width of the Vdd rail in display units (if Automatic is
unchecked).
Ground (Gdd) rail width The width of the Gnd rail in display units (if Automatic is
unchecked).

SPR Core Setup–I/O Signals

This tab contains options for the location of input/output signals around the core. Initialize Setup will
complete this dialog automatically if your netlist contains pad connections or interface I/O signals (for
EDIF netlists only; see “EDIF Files” on page 455).

L-Edit 14 User Guide Section 2 420


Chapter 16: Placing and Routing Standard Cell Designs SPR Core Setup

You do not fill out the I/O signal list if you perform core place and route in conjunction with pad
routing and padframe generation.

Specify the following options:

I/O signals leave core on Layer (H1 or V) on which I/O signals will leave the core. Options are
H1 layer and V layer. If you perform pad routing, this layer must be
identical to the pad routing layer for I/O signals (see “SPR Pad Route
Setup–Layers” on page 428).
I/O signal list Defines the name of each I/O signal, the side from which it exits, and
its relative position on that side.
Use the Position value to specify the relative position of a signal on a
given side proceeding counter-clockwise. The higher the value, the
later a signal’s position on a side. For each side, signals are ordered as
follows:

Left:top to bottom
Bottom:left to right
Right:bottom to top
Top:right to left
Only the left and right core edges can be used for routing global input
signals. It is also recommended that you do not use the uppermost and
lowermost pads for global signals.
To add a signal to the list, click Add. A New Signal is highlighted and
can be edited. The name of the signal must be the same as in the
netlist. To delete a signal, highlight the signal in the list and click
Delete.

L-Edit 14 User Guide Section 2 421


Chapter 16: Placing and Routing Standard Cell Designs SPR Padframe Setup

SPR Padframe Setup

In padframe generation, L-Edit takes pad cells from the standard cell library, places them in a
rectangular ring, and if required, connects them together. The exact size and shape of this padframe is
determined by the maximum of (1) the configuration specifications of the core cell and (2) the actual
size of the padframe after all specified pads have been placed abutting one another in their respective
positions. The type of pad placed in each position depends on the name indicated in the setup procedure.

To set parameters for padframe generation, click Padframe Setup in the SPR Setup dialog. L-Edit will
display the SPR Padframe Setup dialog.

The dialog consists of two tabs—General and Layout. Each tab contains a Reset button, which will
reset all fields and options to the values they held when you accessed the tab.

SPR Padframe Setup–General

This tab contains fields used to specify the cells and ports in the standard cell library that L-Edit will use
for padframe generation.

Specify the following options:

Library cell names Specify the name of the Power pad cell, the Ground pad cell, and
the Corner pad cell to be drawn from the standard cell library.

L-Edit 14 User Guide Section 2 422


Chapter 16: Placing and Routing Standard Cell Designs SPR Padframe Setup

Port names Names of the ports used to define the dimensions, positions, and
orientation of the pad cells and padframe. These include the
following:
ƒ Pad cell abutment port—enter the name of the port used to
define the edge of each pad cell.
ƒ Pad cell mirror port—enter the name of the port used in the
standard cell library to designate mirror ports in pad cells (for
additional information, see “Mirror Ports” on page 452). L-Edit
will place pad cells with this port name in a special orientation.
ƒ Padframe port—enter the name of the port used to define the
inner edge of the padframe.
Output cell name Specify the name of the generated Padframe cell.

SPR Padframe Setup–Layout

Use this tab to specify the padframe’s size and the location of the pads, plus individual characteristics of
each pad in the padframe. Initialize Setup will complete this dialog automatically if your netlist
contains pad connections.

Specify the following:

Padframe dimensions Width and Height of the padframe. If you enter zero for any or both of
(Display units) the dimensions, L-Edit automatically determines the minimum size
required.

L-Edit 14 User Guide Section 2 423


Chapter 16: Placing and Routing Standard Cell Designs SPR Padframe Setup

The Padlist presents a numbered list of pads with their locations and attributes. Corner pads are not
listed. If the padlist is empty, L-Edit will use the pad configuration in the netlist. The padlist contains
the following columns:

# The number of the pad in the padframe. L-Edit orders pads


counterclockwise along each side according to this number.
Instance name The name of the pad instance. The name of the pad must be the same
as the instance name in the netlist file. Pad cell names can be entered
if no netlist is provided. (Padframe generation only.) See “Pad Cells”
on page 449 for naming conventions and restrictions.

To add an instance to the list, click Add. A New Pad is highlighted


and can be edited. To delete a pad, highlight it by clicking any of its
attributes and click Delete.
Side The side of the padframe on which the pad is placed. Pads must be
entered into the pad list in the order left—bottom—right—top.
Mirror Select either Yes or No. When you enter Yes for a given pad, L-Edit
mirrors the pad through its vertical axis—unless this mirroring will
conflict with mirroring information present in the cell library. For
additional information, see “Mirroring” on page 426.
Power/Ground Enter Vdd and Gnd to designate particular pads as power and ground.
Only one Vdd pad and one Gnd pad may be placed, and they must be
on different sides.

If the design requires more than one power or ground pad in the
padframe, list a “temporary” pad in your schematic or in the padframe
setup. After padframe generation, edit the layout to remove the
“temporary” pad and place a Vdd or Gnd pad in its place, making
connections as required. (See “SPR Padframe Setup” on page 422.)

Adding Pads

L-Edit automatically places corner pads. If the padframe schematic contains fewer pads than the
number required by the chip foundry for a complete padframe layout, you must complete the padframe
by one of two methods:

ƒ Adding placeholder pads at the appropriate locations in the padframe setup (for example, to have a
total of 10 pads on each side of a 40-pin frame).
ƒ Adding the required number of unconnected pad instances to the schematic, with module ports to
specify their location.

Pad Naming and Ordering

Pad names entered in the padlist must meet one of the following criteria:

ƒ The name must be exactly the same (except for case) as the instance name in the netlist file. For
example, if the pad instance name is U21_3, enter U21_3 as the pad name.
ƒ The name must match (except for case) the instance name in the netlist up to (but not including) the
first occurrence of a < in the netlist instance name. For example, if the pad instance name is
U21<1<333, enter U21 as the pad name.

L-Edit 14 User Guide Section 2 424


Chapter 16: Placing and Routing Standard Cell Designs SPR Padframe Setup

ƒ The name must be exactly the same (except for case) as one of the pad cells in the standard cell
library—for example, OPad or VddPad. Use this criterion when you only perform padframe
generation; no netlist input is required in the SPR Setup dialog.

You can also specify pad information in the schematic (or directly in the netlist) by placing pads
connected to the appropriate signals in the design. If the pads are to be in a specific order, then attach
module ports to the PAD pins of each pad. (The PAD pin represents the location where a bonding wire
will connect this signal to a pin on the chip.) These module port names must all be in one of the
following formats. (In the following table, n is a number from 1 to the number of pads in the design, s is
the first character of a side—L for left, R for right, and so on—and x is any string of characters.)

For information on defining pads in an EDIF netlist, see “EDIF Files” on page 455.

Format Examples Results

PAD_n PAD_1 The pads are placed in order. For example,


PAD_2 PAD_1 is placed in the top of the left side
PAD_n_x PAD_1_CLOCK of the padframe, PAD_2 just below it, and
PAD_2_DATA so on, traversing counterclockwise around
the padframe. The more detailed form
provides for port labeling. (See the figure
“Pad order—Example 1” on page 425.)
PAD_sn PAD_L1 The pads are placed in counterclockwise
PAD_L2 order on the given side. For example,
PAD_B1 PAD_L1 is placed at the top of the left side
PAD_sn_x PAD_L1_CLOCK of the padframe, and PAD_L2 just below
PAD_T3_ENABLE it. PAD_B1 is placed on the far left of the
bottom of the padframe, and PAD_B2 just
to the right of it. The more detailed form
provides for port labeling. (See the figure
“Pad order—Example 2” on page 426.)

PAD_8_A2 PAD_7

PAD_1 PAD_6

CORE

PAD_2 PAD_5_B0

PAD_3_A0 PAD_4

Pad order—Example 1

L-Edit 14 User Guide Section 2 425


Chapter 16: Placing and Routing Standard Cell Designs SPR Pad Route Setup

PAD_T2_A2 PAD_T1

PAD_L1_A1 PAD_R2

CORE

PAD_L2 PAD_R1_B0

PAD_B1 PAD_B2_A0

Pad order—Example 2

Mirroring

Mirroring is used to mirror pads at specific locations. Incorrect mirroring could cause your chip to
malfunction. Standard cell libraries provided by Tanner EDA contain information for automatic pad
mirroring, if required. Where more specific mirroring information is needed, it is provided in the
standard cell library file setup.

To use this information, use File > Replace Setup. Type the name of the standard cell library file in the
From file field. In the SPR group, select only Padframe setup. (For placing mirroring information into
your own pad cells, see “Pad Cells” on page 449.)

SPR Pad Route Setup

The L-Edit pad router is a two-layer router. It first routes the power bus on one layer, then the signals on
another layer. For each side of the padframe, there is a one-to-one correspondence between “connected”
signals on the padframe and “connected” signals on the core. In other words, the uppermost
“connected” signal on the left side of the padframe is routed to the uppermost “connected” signal on the
left side of the core, the next “connected” signal down on the left side of the padframe is routed to the
next “connected” signal down on the left side of the core, and so on. Each side of the padframe must
have the same number of “connected” signals as there are on the corresponding side of the core.

L-Edit 14 User Guide Section 2 426


Chapter 16: Placing and Routing Standard Cell Designs SPR Pad Route Setup

Padframe

Core

Pad router example

To set parameters for pad routing, click Pad Route Setup in the SPR Setup dialog. L-Edit will display
the SPR Pad Route Setup dialog.

The dialog consists of five tabs:

ƒ General
ƒ Layers
ƒ Design Rules
ƒ Core Signals
ƒ Padframe Signals

Each tab contains a Reset button, which resets all fields and options to the values they held when you
accessed the tab.

L-Edit 14 User Guide Section 2 427


Chapter 16: Placing and Routing Standard Cell Designs SPR Pad Route Setup

SPR Pad Route Setup–General

In the General tab, enter the name of the Chip cell. The chip cell contains the core and the padframe
instance, and it is where the pad routing will be placed.

SPR Pad Route Setup–Layers

The Layers tab is used to specify pad routing layers for I/O signals, power/ground signals, and pad vias
(if needed).

L-Edit 14 User Guide Section 2 428


Chapter 16: Placing and Routing Standard Cell Designs SPR Pad Route Setup

Specify the following options:

I/O signal layer Layer on which I/O signals are routed. In pad routing, I/O signals
must be assigned to the same layer as that specified in “SPR Core
Setup–I/O Signals” on page 420.

Power/ground signals Layer on which power/ground signals are routed. These must be
routed on a different layer than I/O signals.
Pad via layer Layer on which pad vias are drawn. L-Edit inserts pad vias if the ports
of all pad cells are placed on a layer other than the I/O signal layer.

SPR Pad Route Setup–Design Rules

Use the Design Rules tab to specify design rule values L-Edit will use to perform pad routing that
conforms to the fabrication technology used for your design. (The letters correspond to dimensions
shown on pages 2-89 and 2-90.)

A
B C
D E
F G

H
I
J

Values entered in this dialog are applied in the design as illustrated in the figures “Layer widths and
spaces used in pad routing” and “Layer, core and pad spacing used in pad routing”, below.

The letters in the dialog fields provide a key for the labels in the following illustrations and the values
they represent.

L-Edit 14 User Guide Section 2 429


Chapter 16: Placing and Routing Standard Cell Designs SPR Pad Route Setup

If the pad cell ports are on the pad routing layer, L-Edit applies the following design rules.

Padframe Pad route Core

A Signal A
Signal A D

Signal B
F
I/O signal Vdd
Signal B
layer Port: Core
E
G

Vdd pad C

Power/ground
layer
Port: Frame

Layer widths and spaces used in pad routing

For I/O signals, all pad cell ports must be located on the same layer, but that layer need not coincide
with the pad routing layer. In this case, L-Edit inserts a pad via, using the design rules illustrated below.

Padframe
Pad route Core
I/O signal
layer F H
A
Signal C Signal C
Pad port J
layer Port: Core

Design rules for pad via

L-Edit 14 User Guide Section 2 430


Chapter 16: Placing and Routing Standard Cell Designs SPR Pad Route Setup

SPR Pad Route Setup–Core Signals

Use the Core Signals tab to specify the signals entering or exiting the core. Initialize Setup will
complete this dialog automatically if your netlist contains pad connections.

Enter the following information in the I/O signal list

Signal name Defines the names of all signals exiting or entering the core,
beginning with the first signal on the upper left side of the core and
proceeding counter-clockwise. Edit the Signal name, Side, or
Connect (Yes or No) by selecting the item and typing the desired
value.
This list must contain as many signals as there are ports around the
core.
To add a signal to the list, click Add. A New signal is highlighted and
can be edited. To delete a signal, highlight it (by clicking any of its
attributes) then click Delete.
Side Side on which the signal is routed between the core and padframe.
Options are:
ƒ Left
ƒ Bottom
ƒ Right
ƒ Top

Connect Options are Yes and No. To connect a signal to the padframe, type
Yes; otherwise type No.

L-Edit 14 User Guide Section 2 431


Chapter 16: Placing and Routing Standard Cell Designs SPR Pad Route Setup

SPR Pad Route Setup–Padframe Signals

Use the Padframe Signals tab to specify a list of signals entering or exiting the padframe. Initialize
Setup will complete this dialog automatically if your netlist contains pad connections.

Enter the following information in the I/O signal list:

Signal name Defines the names of all signals exiting or entering the padframe,
beginning with the first signal on the upper-left side of the padframe
and proceeding counterclockwise.
This list must contain as many signals as there are pads around the
padframe.
To add a signal to the list, click Add. A New signal is highlighted and
can be edited. To delete a signal, highlight it by clicking any of its
attributes then click Delete. To edit a signal, highlight it by clicking
any of its attributes then click again to make the field editable.
Side Side on which the signal is routed between the core and padframe.
Options are:
ƒ Left
ƒ Bottom
ƒ Right
ƒ Top

Connect Options are Yes and No. To connect a signal to the padframe, type
Yes; otherwise type No.

L-Edit 14 User Guide Section 2 432


Chapter 16: Placing and Routing Standard Cell Designs Standard Cell Place and Route

Standard Cell Place and Route

Use Tools > SPR > Place and Route to display the following dialog:

L-Edit 14 User Guide Section 2 433


Chapter 16: Placing and Routing Standard Cell Designs Standard Cell Place and Route

You can run the following three modules either in one step or separately:

ƒ Core place and route—generates the design core using the options specified in “SPR Core
Setup” on page 411.

ƒ Padframe generation—generates the padframe using the options specified in “SPR Padframe
Setup” on page 422.

ƒ Pad route—routes between the padframe and the core using options specified in “SPR Pad Route
Setup” on page 426.

Global input signal routing allows you to perform a separate route of up to two input signal nets. This
option is only available when you select Core place and route.

Clicking Setup opens the “SPR Setup” on page 408 dialog.

Specify the following:

Constraint Specifies the factors used to constrain core size and shape. Options
include:
ƒ Square—Generates a core with four sides of approximately
equal length.
ƒ Width—Generates a core using the specified Row length.
ƒ Height—Generates a core using the specified Number of rows.
ƒ Width and Height—Generates a core using the specified Row
length and Number of rows.

Selecting Width and Height will interrupt SPR after placement if the
program cannot meet both constraints. In such a case, L-Edit will ask
you whether you want to abort or continue the SPR run.
Row length Nominal length of rows placed in the core. Available only when
Constraint is set to Width or Width and Height. This value is only an
approximation, because the actual row length varies according to the
number of row crosser cells inserted during routing.
Number of rows Number of rows in the finished core. Available only when Constraint
is set to Height or Width and Height. Increasing the number of rows
makes the core taller and thinner; decreasing it makes the core shorter
and wider.
Indent middle rows Generates a core using the value entered in Middle/top ratio. This
value is the ratio of the target length of the middle row of cells to that
of the top and bottom rows.

Refer to “Indent Middle Rows” on page 435 for guidelines on values


for this field.

This value must be between 0 and 1 (inclusive); the default value is 1.


Using 1 for the Middle/top ratio is equivalent to turning off the
Indent middle rows option.

Optimization (in Placement Reduces core size by minimizing the overall netlength. When this
group) option is off, L-Edit places cells according to their sequence in the
netlist.

L-Edit 14 User Guide Section 2 434


Chapter 16: Placing and Routing Standard Cell Designs Standard Cell Place and Route

Optimization factor Controls the degree of optimization and thus the quality of the
placement. The higher the value, the greater the total placement time.
Available only when Optimization is checked. See “Optimization
Factor” on page 436 for guidelines on values for this field.
Optimization (in Routing Optimizes routing by minimizing netlength, reducing the number of
group) required vias, or both. When you select Optimization in the Routing
group you must also specify one of the following options:
ƒ Netlength and Via Reduction—invokes a postrouting algorithm
that minimizes netlength (by shortening net loops) and reduces
the number of generated vias (by eliminating unnecessary layer
changes between net segments).
ƒ Netlength Reduction—invokes a postrouting algorithm that
minimizes netlength.
ƒ Via Reduction—invokes a postrouting algorithm that reduces the
number of generated vias.
Label nodes with ports Places ports with the names of nodes onto the layout. You can use this
option to extract a SPICE netlist with the original node names. This
feature is also useful when it is necessary to perform any manual
modifications to the results of the router, because it allows you to
trace individual nodes as they wind through the core. For additional
information on this option, see “Label Nodes” on page 437.
Write CAP file Writes out a file of nodal properties, including nodal capacitances,
after routing. Type the filename in the adjacent field or click Browse
to select a file from a standard file browser. For additional
information on this option, see “Nodal Capacitance Files (CAP)” on
page 438.
Write SDF file Writes out a file that lists the delays due to routing in standard delay
format (SDF). Type the filename in the adjacent field or click Browse
to select a file from a standard file browser.
Selecting the Write SDF file option gives you the delay option
Pin-to-Pin delay, which calculates the interconnection delay between
a driver pin and a receiver pin. For additional information on this
option, see “Standard Delay Format Files (SDF)” on page 440.

Indent Middle Rows

One factor affecting the width of standard cell rows is the number of row crosser cells inserted in a row.
A row crosser is a small cell which contains a row crosser port but no logic; it simply provides a path for
a signal to move through a row. When L-Edit needs to route a signal across a row of cells and no other
cell in the row contains an unused row crosser port, the program inserts a row crosser cell.

Statistically, more row crossers are required in the middle rows of a design than in top or bottom rows,
because the middle is more congested with logic. Hence, the middle rows might become significantly
wider than they were estimated to be by the placement optimizer.

Select Indent middle rows for designs that have a significant number of row crosser cells added to their
middle rows. If an initial SPR run produces a design whose middle rows are significantly wider than the
top or bottom rows, use a Middle/top ratio of less than 1.

L-Edit 14 User Guide Section 2 435


Chapter 16: Placing and Routing Standard Cell Designs Standard Cell Place and Route

Placement Optimization

The core of a standard cell design contains rows of standard cells, which are designed to abut one
another horizontally to form power and ground connections.

You can produce a more compact design by selecting Optimization in the Placement group. With
Optimization on, L-Edit considers the positions and connections of standard cells and alters those
positions where necessary to achieve a more compact layout. For example, if the output of a DFF is
connected to the input of an inverter, the optimizer might relocate the DFF or the inverter to make the
wire between them as short as possible.

With Optimization off, L-Edit simply places cells according to their sequence in the netlist.

When you select Optimization, you must also choose an Optimization factor. This factor enables you
to control the degree of optimization and thus the quality of the placement. The higher the optimization
value, the greater the total placement time will be. For additional information on this field, see
“Optimization Factor,” below.

Optimization Factor

L-Edit uses a simulated annealing algorithm to optimize placement (described in Sechen, see
“References” on page 444). The optimizer algorithm randomly chooses pairs of cells and determines
whether their locations should be exchanged in order to reduce the overall net length.

The Optimization factor is a measure of the number of states which the optimizer looks at per cell for
every temperature step of the process, and so controls the placement time. For example, the placement
for an optimization factor of 2 should be about an order of magnitude slower than a placement for an
optimization factor of 0.2. Although it is possible to obtain better final results by increasing the factor
by one or two orders of magnitude, a factor of 1 represents a balanced trade-off between total placement
time and final core area. The following figure shows the average relationship between the final
optimized core area and the optimization factor. Clearly, the improvement to the core area is not large
for factors greater than 1.

L-Edit 14 User Guide Section 2 436


Chapter 16: Placing and Routing Standard Cell Designs Output Options

Core area

6x

The difference between the core area


5x when optimization factor = 1 and the core area
when optimization factor = 10 is within 5% in
most cases.
4x
The curve of larger circuits is slightly shifted
to the right.
3x

2x

Optimal core area


1x

Optimization
factor
0 1 2 3 4 5 6 7 8

Optimization factor and core area for circuits up to 1000 standard cells.

Note: To minimize core size, it is best to run SPR several times with different optimization
factors of around 1 rather than running it once with a single large optimization factor.

An optimization factor of 0 is not equivalent to “no optimization.” The optimizer will still run through
placement, the row evener, global routing, and detailed routing with a minimal running time and a
minimal effect on the placement optimization of the design. This is a good value to use while
experimenting with other optimization controls (for example, changing the number of rows).

You can bypass placement optimization by clearing the Optimization check box. This is the fastest
method for generating layout, but the final core will be significantly larger than a core produced with
optimization.

Note: To avoid excessive complexity in channel routing, it is recommended that you always
turn Placement Optimization on for circuits with more than 2,000 standard cells.

Output Options

Label Nodes

The Label nodes with ports switch instructs L-Edit to place ports on the layout (in the vertical routing
layer) using the same port names as those used in the design schematic. You can use this option to
extract a SPICE netlist with the original node names. This feature is also useful when it is necessary to
perform any manual modifications to the results of the router, because it allows you to trace individual
nodes as they wind through the core.

L-Edit 14 User Guide Section 2 437


Chapter 16: Placing and Routing Standard Cell Designs Output Options

Nodal Capacitance Files (CAP)

The option Write CAP file instructs L-Edit to compute the capacitance, length, and area added to each
node due to routing. L-Edit writes the results to a plain-text file with the filename extension .cap.

Each line in the file is in the format:

node capacitance NoOfTerminals Length AreaOnH1 AreaOnV AreaOnH2

where node is the name of the node, capacitance is an integer denoting capacitance of this node in
hundredths of a picofarad, NoOfTerminals is the number of pins attached to this node, and Length is the
length of the interconnect of this node. AreaOnH1, AreaOnV, and AreaOnH2 denote the area of the
route taken by this node on the H1, V, and H2 layers.

Note: To use this file in a simulation, you must convert it to SPICE format.

Node capacitances are calculated based on the capacitance per unit area for a particular routing layer
and the area occupied by the node. The capacitance per unit area for a layer is the capacitance between a
particular routing layer and the substrate or the capacitance between two routing layers. Node
capacitances also consider the fringe capacitance per unit length between the edges of the routing and
the substrate.

The base values for capacitance between a layer and substrate or layer and another layer, as well as the
fringe capacitance between the routing layer and the substrate, are entered by the user. These
capacitance values are process-dependent and should be available from your chip foundry.

In the following discussion, we assume the horizontal routing layers to be Metal1 and Metal3 and the
vertical routing layer to be Metal2. The capacitance on a node Cnode is computed as

C node = C A,M1S A M1 + C A,M2S A M2 + C A,M3S A M3 [non-overlap] (16.1)


+ C O,M1M2 A M1M2 + C O, M1M3 A M1M3 [overlap M1]
+ C O, M2M1 A M2M1 + C O, M2M3 A M2M3 [overlap M2]
+ C O, M3M1 A M3M1 + C O, M3M2 A M3M2 [overlap M3]
+ C F, M1S P M1 + C F, M2S P M2 + C F, M3S P M3 [fringe]

with

C O, M1M2 = C A, M1S + C A, M1M2 (16.2)

C O, M1M3 = C A, M1S + C A, M1M3 (16.3)

C O, M2M1 = C A, M1M2 (16.4)

C O, M2M3 = C A, M2S + C A, M2M3 (16.5)

C O, M3M1 = C A, M1M3 (16.6)

C O, M3M2 = C A, M2M3 (16.7)

L-Edit 14 User Guide Section 2 438


Chapter 16: Placing and Routing Standard Cell Designs Output Options

where

CA,MXS Area capacitance per unit area between the MetalX layer and the
substrate (entered using Setup > Layers—General).
CA,MXMY Area capacitance per unit area between the MetalX layer and the
MetalY layer (entered in the “SPR Core Setup–Layers” on page 413
dialog).
CO,MYMX Overlap capacitance per unit area on MetalX when overlapped by
routing on MetalY (calculated by SPR).
CF,MXS Fringe capacitance per unit length between the MetalX layer and the
substrate (entered using Setup > Layers—General).
AMX Area covered by the route of this node in MetalX with no overlap to
any routing in any other layer (calculated by SPR).
AMXMY Area covered by the route of this node in MetalX that overlaps with
routing in MetalY layer (calculated by SPR).
PMX Perimeter of all routing segments of this node in MetalX (calculated
by SPR).

Two-Layer Example

It is important to know how to extract numbers from the foundry’s actual process parameter sheet for
entry in the dialog. In the following two-layer example, the process parameters are taken from a typical
2-micron N-well process. The value given for each layer (except for the last entry) is the area
capacitance between the specified layer and the substrate, in aF/µm2.

Layer CA

Poly—Substrate 55
N Diff—Substrate 128
P Diff—Substrate 322
Metal1— Substrate 25
(CA,M1S)
Metal2—Substrate (CA,M2S) 20
Metal1—Metal2 (CA,M1M2) 38

L-Edit 14 User Guide Section 2 439


Chapter 16: Placing and Routing Standard Cell Designs Output Options

Metal2 (vertical route) Metal2 (vertical route)

Metal1 (horizontal route) CA,M1M2 (Metal1-Metal2)


CA,M2S (Metal2-Substrate)

CA,M1S (Metal1-Substrate) CA,M1S (Metal1-Substrate)

Substrate
Interconnect capacitances in two-layer routing

Capacitance values are entered with two setup commands.

Dialog Values entered

Setup Layers—General, CA,M1S = 25 and CA,M2S = 20 are entered for Metal1 and Metal2,
Layer-to-substrate [Area] respectively.
capacitance field

SPR Core Setup–Layers, CA,M1M2 = 38 is entered.


Layer-to-layer area
capacitance field

The overlap capacitances of Metal1 and Metal2 are internally calculated as follows:

ƒ An overlapping node on Metal1 sees an overlap capacitance of C A, M1S + C A,M1M2 .


ƒ An overlapping node on Metal2 sees an overlap capacitance of CA,M1M2 only.
ƒ Thus, CO,M1M2 = CA,M1S + CA,M1M2 = 63 and CO,M2M1 = CA,M1M2 = 38.

Standard Delay Format Files (SDF)

When you run SPR with the option Write SDF file, L-Edit computes the delays due to routing and
outputs the results into a standard delay format (SDF) file with the filename extension .sdf.

The L-Edit interconnect delay calculation is based on the Elmore delay model. The capacitance and
resistance is extracted segment by segment and distributed as a π model.

L-Edit 14 User Guide Section 2 440


Chapter 16: Placing and Routing Standard Cell Designs Output Options

Each segment of the interconnect is associated with a lumped R and C value.

Pin C (OUTPUT)

Seg 5
Seg 2 Seg 4

Seg 1 Seg 3

Pin A Pin B
(INPUT) (INPUT)

The R and C values are determined by

R = R square ⋅ (Length of segment ⁄ Width of segment) (16.8)

C = C area ⋅ Area of segment + Cfringe ⋅ Perimeter of segment (16.9)

where width of segment is defined as the wire edge that connects to the pin and

Perimeter = 2 ⋅ ( Length of segment + Width of segment ) (16.10)

Note: Capacitance with respect to the substrate is the only capacitance component that is
considered. No attempt is made to include layer-to-layer or crosstalk capacitance
terms.

The detailed R and C values are calculated as follows:

For a segment located on Metaln:

R = R Mn ⋅ Number of squares = R Mn ⋅ ( L seg ⁄ W seg ) (16.11)

·
C = C A, MnS ⋅ A Mn + C F, MnS ⋅ P M n (16.12)

where

RMn Resistivity (resistance per square) of the Entered in Setup Layers—General.


Metaln layer
CA,MnS Area capacitance per unit area between Entered in Setup Layers—General.
the Metaln layer and the substrate
CF,MnS Fringe capacitance per unit length Entered in Setup Layers—General.
between the Metaln layer and the
substrate

L-Edit 14 User Guide Section 2 441


Chapter 16: Placing and Routing Standard Cell Designs Output Options

Lseg, Wseg Length and width of the segment Calculated by SPR


AMn Area covered by the segment of this Calculated by SPR
node in Metaln
PMn Perimeter of the segment of this node in Calculated by SPR
Metaln

Note: The area and perimeter term includes the small amount of overlap between layers.
The error resulting from this inclusion is negligible.

The R and C values for each segment are distributed as a π model. For the above interconnection, the R
and C values are distributed as follows:

Pin-to-Pin Delay Calculation

The pin-to-pin delay is the interconnection delay between a driver pin and a receiver pin. Driver pins are
all output or bidirectional pins on a net; input pins are all input or bidirectional pins on a net. In this
example, the pin C is the driver pin and A and B are the receiver pins.

Delay(Pin C to Pin A) = ROUT,C × (C5 + C4 + C3 + C2 + C1 + CIN,A + CIN,B)


+ R5 × (0.5C5 + C4 + C3 + C2 + C1 + CIN,A + CIN,B)
+ R4 × (0.5C4 + C3 + C2 + C1 + CIN,A + CIN,B)
+ R2 × (0.5C2 + C1 + CIN,A)
+ R1 × (0.5 C1 + CIN,A)

This delay calculation corresponds to the 63.2% threshold voltage of the single-pole response.

The SDF computed by L-Edit contains interconnect delays for both rising and falling edges. These are
computed using different values for the driver impedance ROUT. The values for ROUT, CIN, and COUT (if

L-Edit 14 User Guide Section 2 442


Chapter 16: Placing and Routing Standard Cell Designs SDF Driver Properties

any) are obtained from properties placed on the corresponding ports of the standard cell layout used by
SPR. These properties may be modified in two ways:

ƒ You can enter them using the Tools > Add-Ins > SDF Driver Properties > “Edit Pin
Characteristics” on page 444. The resistance values are given in ohms, and capacitance values are
in Farads.
ƒ You can import the data from a Liberty timing (.lib) file using Tools > Add-Ins > SDF Driver
Properties > “Import .LIB Timing Data” on page 443. In this case, all cells found in the library file
are annotated. A fragment of a .lib file is shown below:
library (tsmm025DL) {
pulling_resistance_unit : "1kohm";
capacitive_load_unit (1.0, ff);

cell(Buf1) {
pin (A) {
direction : input;
capacitance : 0.983;
}
pin (OUT) {
direction : output
timing() {
rise_resistance : 3.70;
fall_resistance : 3.63;
}
}
}
}

SDF Driver Properties

SDF Driver Properties is a macro that allows you to specify driver/receiver data by importing a .lib file
or by editing driver/receiver properties on specific ports. SPR uses the driver/receiver properties on the
zero-height ports in the standard cell for SDF calculations. (See the Application Notes for additional
details.)

Import .LIB Timing Data

You can import timing data for SDF from a Liberty Timing File (.lib). To import a .lib file, select
Tools > SPR > SDF Driver Properties > Import .LIB Timing Data... from the L-Edit menu.

Type the name of the appropriate .lib file, or click Browse to open a standard file browser. Click import
to set the port properties specified in the .lib file.

L-Edit 14 User Guide Section 2 443


Chapter 16: Placing and Routing Standard Cell Designs References

Edit Pin Characteristics

To edit driver/receiver characteristics on a selected port, choose the menu option Tools > SPR > SDF
Driver Properties > Edit Pin Characteristics....

Using the pull-down menu, choose a pin Type of Input, Output, or None.

If the pin type is Input or Output, you can edit pin characteristics in the appropriate fields. Options
include:

Load capacitance The load capacitance of the selected pin.


(Input and Output pins.)
Pull-up resistance The effective drive impedance of the logic gate when it is trying to
(Output only.) drive a logic “1” (high voltage).
Pull-down resistance. The effective drive impedance of the logic gate when it is trying to
(Output only.) drive a logic “0” (low voltage).

Pull-up and pull-down resistance are usually determined experimentally or by simulation, by measuring
the propagation delay of a given gate layout driving various values of load capacitance. The slope of
this curve is the drive impedance (pull-up or pull-down), while the delay for C=0 gives the intrinsic gate
delay (also known as the internal gate delay).

References

Sechen, Carl. 1988. VLSI Placement and Global Routing Using Simulated Annealing. Boston: Kluwer
Academic Publishers.

L-Edit 14 User Guide Section 2 444


17 Standard Cell Library Designer’s
Guide
2

Standard Cell Library

The cells in a standard cell library must meet certain constraints of dimension and port positions for
proper use by L-Edit. Usually, a standard cell library includes two types of cells:

ƒ Standard cells, which L-Edit can place and route.


ƒ Pad cells, an optional set, which L-Edit uses in padframe generation and routing.

Standard Cells

Abutment Ports

Each standard cell should have a special abutment port whose name is consistent with the Abutment
port entry in the “SPR Core Setup–General” (page 412) dialog. The dimensions and position of an
abutment port correspond to the boundaries of the cell to which it belongs. The abutment port must have
the same height in all standard cells in a library set. Abutment port widths should also be integer
multiples of the vertical routing pitch.

Note: Channel routing will take less time when the abutment ports are of a uniform width
and spacing.

Power Ports

Power buses enter and exit at the ends of the standard cell rows, run horizontally along the row, and
connect to power ports within each cell, which must be placed on both sides of a standard cell at the cell
boundary. Power port names are specified in the Power Signal and Ground Signal fields in the SPR
Setup dialog.

Ports for a power terminal (Vdd or Gnd) must have the same height and position relative to the
abutment port in every standard cell of a library set. The width of power ports has to be zero. The power

L-Edit 14 User Guide Section 2 445


Chapter 17: Standard Cell Library Designer’s Guide Standard Cells

rail can run along the left or right side of the core, as specified in the “SPR Core Setup–I/O Signals”
(page 420) dialog.

Vdd Vdd

Gnd Gnd

Abut

Typical power bus arrangement and power port positions.

Signal Ports

Signals other than power and ground are routed to ports through the top or bottom sides of a standard
cell. A signal port must have a height of zero and a name complying with that of standard cell primitives
in the netlist, and it must be placed on the same layer as the vertical routing wires.

Signal ports for signal routings must be placed at related layout geometry where the signals are
available. Signal port positions must comply with the relevant design rules (see “SPR Core Setup–
Design Rules” (page 415)), with predefined routing width and space specifications. Signal ports can be
either inside the standard cell or on its boundary (see the illustration “Signal port positions in standard
cells” on page 447.)

Note: Channel routing will take less time when the signal ports are of a uniform width and
spacing. Signal port widths should also be integer values.

L-Edit 14 User Guide Section 2 446


Chapter 17: Standard Cell Library Designer’s Guide Standard Cells

A B Cross Cross Out

Vdd Vdd Vdd Vdd

Cross Out
B
A
Cross
Gnd Gnd Gnd Gnd

Abut Abut A Cross B Cross Out

(a) Signal ports in cell interior (b) Signal ports on cell edges

Signal port positions in standard cells

There are three options for routing wires to fit specific layout features of a standard cell set.

Node A Node A
Cross
A

A A
Abut Abut Abut

Option 1: Vertical routing Option 2: Vertical routing Option 3: Vertical routing wires
wires are allowed to wires are not allowed to are only allowed to reach from a
overlap a standard cell overlap any portions of a designated side of a standard
and allowed to enter the standard cell. They are cell. In this example, a wire
cell from the top or allowed to reach ports at coming from the upper routing
bottom. either top or bottom edges channel reaches the signal port A
of the cell. It is assumed (at the bottom edge of the cell)
that every pair of the same through an additional row
named ports relates to the crosser cell and an additional
same internally connected horizontal routing wire in the
node. lower channel.

Routing wire arrangements in standard cells

Row Crosser Ports

To route wires between two routing channels—that is, across a standard cell row—L-Edit uses
user-specified row crosser ports that identify crossing paths on standard cell rows. (Row crosser ports
illustrated in figures in this chapter have the port name Cross.) The use of row crosser ports is
illustrated in a regular standard cell in the figure “Signal port positions in standard cells” on page 447
and in a dedicated row cross cell in the figure “Routing wire arrangements in standard cells” on page

L-Edit 14 User Guide Section 2 447


Chapter 17: Standard Cell Library Designer’s Guide Special Standard Cells

447 (Option 3). In a regular standard cell, it is a good practice to place as many row crosser ports as
design rules and SPR constraints allow. This helps L-Edit increase area efficiency, because if there are
no more row crosser ports in standard cells within a certain row span, L-Edit may have to insert a row
crosser cell.

A row crosser cell is a standard cell that contains only one row crosser port and is placed only to make
up a cross-row pass. In the figure “Signal port positions in standard cells” on page 447 (b), L-Edit will
treat the pairs of port Cross as a crossing pass between the routing channels above and below the
current standard cell row. As with signal ports, it is assumed that the pair are internally connected with
layout geometry in related layers in the standard cell. L-Edit picks pairs of row crosser ports from left to
right. Dotted lines in the figure connect related upper and lower signal ports. The figure “SPR box
generation for design rule correctness of a row crosser port” on page 448 illustrates how L-Edit
automatically generates extra geometry around a row crosser port to ensure design rule correctness at
that location.

Cross Cross

Abut Abut

(a) Dotted line indicates the (b) During SPR, L-Edit


region around a cross port automatically generates a
where design rules may box in the vertical routing
potentially be violated layer to ensure design rule
during SPR. correctness.

SPR box generation for design rule correctness of a row crosser port

Note: Row crosser ports must be placed on the vertical routing layer. SPR will not
recognize such a port when it is placed on the horizontal routing layer.

Special Standard Cells

L-Edit requires three special standard cells to be included in a library cell set. These cells are not
standard cell primitives like the ones included in the netlist; they are for node connections only.

The Tie-to-Power Cell and Tie-to-Ground Cell are needed where a standard cell has a pin directly tied
to Vdd or Gnd. The Row Crosser Cell is a special standard cell that contains only a row crosser port. Its
sole purpose is to allow a connection between two channels located above and below a standard cell
row. The figure “Connection cells in a standard cell set,” below illustrates these three typical connection
cells.

L-Edit 14 User Guide Section 2 448


Chapter 17: Standard Cell Library Designer’s Guide Pad Cells

Although a given SPR operation might not require these three cells—the use of the Tie-to-Power cell or
Tie-to-Ground cell depends on the specific netlist, and the use of row crosser cells depends on the actual
routing condition—L-Edit treats them as prerequisite and elementary parts of the standard cell library.
Specify the names of the Tie-to-Power, Tie-to-Ground, and row crosser cells in the “SPR Core Setup–
General” (page 412) dialog. L-Edit will report an error if any of these three cells are missing in the
standard cell library.

Vdd Vdd Vdd Vdd Vdd Vdd

Gnd Cross
Vdd

Gnd Gnd Gnd Gnd Gnd Gnd

Abut Abut Abut


Tie-to-Vdd Cell Tie-to-Gnd Cell Row Crosser Cell

Connection cells in a standard cell set

Pad Cells

Abutment Ports

Each pad cell should have a special abutment port whose name is consistent with the entry Pad cell
abutment port in the “SPR Padframe Setup–General” (page 422) dialog. The dimensions of an
abutment port geometry specify the boundaries of the cell to which it belongs. The abutment port must
have the same height in all pad cells in a library set.

Connection Ports Between Pad Cells

When pad cells are placed in a padframe, power buses and signal buses (if specified) run horizontally
across each pad cell. During padframe generation, L-Edit places pads in a user-specified padframe and
fills the gaps between pads with cell connections to assure continuity of power and/or signal buses to all
pads. These interpad connections must have dedicated ports on two sides of the pad cell boundary.
Power ports in all pad cells in a library set must have the same height and the same position along the

L-Edit 14 User Guide Section 2 449


Chapter 17: Standard Cell Library Designer’s Guide Pad Cells

cell boundary. The existence of interpad connection ports in a particular layer specifies a connection in
that layer.

The figure “Typical pad cells lined up in a segment of a padframe” on page 450 (simplified so that only
straight signal passes and power buses are shown) illustrates connections between pad cells A and B. In
padframe generation, L-Edit can optimize the padframe under certain conditions so that adjacent pads
are attached to each other, as shown between pad cells B and C. In this case, the abutment ports (labeled
Abut) specify the pad cell boundaries and allow L-Edit to abut and align pad cells. The same figure also
shows typical arrangements of power bus ports (on the sides) and signal ports (on the bottoms) in pad
cells.

When two adjacent pad cells are placed Pad cell bonding areas usually SPR aligns adjacent
apart from each other in a padframe, have the same dimensions pad cells according to
SPR automatically extends power buses their abutment ports
and signals labeled with side ports

Pad Pad Pad


Cell Cell Cell
A B C

Vdd Vdd Vdd VddVdd Vdd


Gnd Gnd Gnd GndGnd Gnd

Abut Signal A Abut Signal B Abut Signal C

Power buses for the padframe. The side ports Signal ports are available at the bottom of
are necessary to continue signals between pad a pad cell’s abutment port, for routing to the
cells when they are placed apart from each other core circuits of the chip
in a padframe

Typical pad cells lined up in a segment of a padframe

Signals from Pad to Layout Core

In order to interface with the layout core of a chip, signal ports must be available on the bottom
boundary of a pad cell. A signal port is a zero-height port with its width equal to the layout path of the
dedicated signal.

Power Supply Pads

In padframe generation, L-Edit automatically places one Vdd pad cell and one Gnd pad cell into the
frame. Their cell names can be customized in the “SPR Padframe Setup” (page 422) dialog. A power
supply pad cell is subject to the same structure constraints as a normal signal pad. There must be at least
one pair of power supply pads in a padframe, which provide both power connections to all pads in the
padframe and to the layout core of the chip. It is not necessary to specify these power supply pad cells as
library primitives in your netlist. If your design requires secondary power supply pads, specify them in
the netlist as you would regular signal pads.

Corner Pad Cells

Standard cell libraries must include a special corner pad cell, which is required to complete a padframe.
This cell will be oriented and placed at all four corners of the padframe. A corner pad usually contains

L-Edit 14 User Guide Section 2 450


Chapter 17: Standard Cell Library Designer’s Guide Pad Cells

no active circuit, signal path, or bounding area because it does not directly face the layout core. Corner
cells continue the power bus and other signal connections between two perpendicular sides of the
padframe. They may also contain certain electrostatic discharge (ESD) protection guardbands in
structures as they are built in regular pad cells. For proper extension of power buses and signals, corner
pad cells must meet the same design requirements as regular pad cells. In particular, they must contain
side ports like those created in regular pad cells.

Pad Cells Without Bond Pads

In some cases, a pad cell is needed to fill a gap in a segment of a padframe. Pad cell sets are allowed to
have pad cells without bonding pads. Such a pad will not be bondable, but it can serve as a padframe
spacer cell. L-Edit allows any such unbondable pad cells to occupy a pad slot in the padframe
specification, as specified in the “SPR Padframe Setup” (page 422) dialog. The figure “Mirror-labeled
pads in a padframe” on page 452 illustrates how pad slots are indexed in the SPR Padframe Setup—
Layout dialog. Typical uses of such spacers are as padframe corner cells and padframe spacer cells.
L-Edit requires corner cells to complete a padframe; spacer cells may be useful optional cells when
specific padframe geometry and dimensions are required by a chosen process vendor. Since no signal
paths lead to the layout core of the chip, it is not necessary to include these types of pad cells in the
netlist primitive set.

Pad Orientations

The Mirror switch in the SPR Padframe Setup—Layout dialog, set by typing Yes or No in the Mirror
column of the padlist, instructs L-Edit to mirror an individual pad when placing it in a padframe. This
feature is especially useful when a pad cell contains asymmetrical features that would affect intercell
connections. In the figure “Using a mirrored pad cell in a padframe,” below, pad cell A has a wider
ground bus on the left side and wider power bus on the right. Consequently, a power short exists
between the first pad cell A on the left and its duplicate on the right—i.e., Vdd in the left pad cell A has
been connected to Gnd in the duplicate pad cell A on the right. The power short has been avoided in the
next two duplicated pairs of pad cell A, because the third pad cell A has been placed in its mirrored
orientation.

Pad Cell Pad Cell Pad Cell Pad Cell


A (normal) A (normal)A (mirrored) A (normal)

Vdd Vdd Vdd Vdd Vdd Vdd Vdd Vdd


Gnd Gnd Gnd Gnd Gnd GndGnd Gnd

Abut Signal A Abut Signal A Signal A Abut Abut Signal A

Vdd and Gnd pads are shorted Vdd and Gnd pads are not shorted
when Pad Cell A’s are abutted in when the duplicate Pad Cell A is
normal position. mirrored.

Using a mirrored pad cell in a padframe

L-Edit 14 User Guide Section 2 451


Chapter 17: Standard Cell Library Designer’s Guide Designing Cells for Global Signal Routing

Mirror Ports

You can specify a Pad cell mirror port in the “SPR Padframe Setup–General” (page 422) dialog.
When L-Edit encounters a pad cell with the specified mirror port name, the program automatically
alters this pad cell’s orientation when placing it adjacent to another pad cell labeled as a mirror port. In
addition, this mirroring feature can be propagated through a padframe’s corner pad cell if the corner pad
cell has also been labeled with a mirror port.

The figure “Mirror-labeled pads in a padframe” on page 452 shows an example of an SPR-generated
padframe with some typical mirroring effects. All pad cells and padframe corner cells contain mirror
ports. Pad cells labeled m are in mirrored orientation, while other cells are on their normal orientation.

22 21 20 19 18 17 16
m m
1 15
m m
2 14

3 13
m m
4 12

5 6 7 8 9 10 11
m m m

Mirror-labeled pads in a padframe

Designing Cells for Global Signal Routing

Global Signal Port Definitions

For global input signal routing, standard cells and buffer cells are extended by two global signal buses,
which are located above and below the power buses on the horizontal layer. Each bus contains two ports
(labeled GS1 and GS2 in the following figure). These port names are defined during cell design, and
they thus become part of the cell definition in the standard cell library.

GS1 GS1 GS1 GS1


Vertical
Routing VDD VDD VDD
Layer
Horizontal IN
OUT A B OUT
Routing IN
Layer
GND GND GND
Via
GS2 GS2 GS2 GS2

(a) Left buffer (b) Standard (c) Right


cell cell buffer cell

Global signal ports (GS1 and GS2) in standard cells and buffer cells

L-Edit 14 User Guide Section 2 452


Chapter 17: Standard Cell Library Designer’s Guide Designing Cells for Global Signal Routing

Global signal port names are assigned to the global input signals in the “SPR Core Setup–Global
Signals” (page 419) dialog. Note that in this dialog, SPR users also assign a specific net name to each
of the global input signals. Thus, the assignment of a global input signal port to each of the global input
signals determines which signal bus (upper or lower) represents a specific global signal net. Because
buffer cells are specifically dedicated to either the upper or lower global signal bus, this port assignment
also determines:

ƒ Which global signal rail (left or right) represents a specific global signal net.
ƒ The side of the padframe on which the pad of this net is placed.

As an example, let NetA be the name of a signal designated Global Input Signal 1. Assume that the
standard cell library contains buffer cells designed as those shown in the figure “Global signal ports
(GS1 and GS2) in standard cells and buffer cells” on page 452, with the left buffer cell connecting to the
upper global signal bus, which is labeled with the port GS1. If port GS1 is designated as the port for
Global Input Signal 1 (which is NetA), the following will occur:

ƒ In the standard cells, the internal signal port for NetA will be connected to the upper global signal
bus because GS1 is its assigned port name.
ƒ Because the left-side buffer cell is designed such that it drives the upper global signal bus, the left
global signal rail will carry NetA.
ƒ Subsequently, it will be necessary to specify that NetA exit the left padframe edge (see “SPR Pad
Route Setup–Padframe Signals” (page 432)).

Note: Because buffer cells are specifically dedicated to either the upper or lower global
signal bus, buffer cell design determines the relationship between port names and the
side on which the net associated with this port leaves the core. The buffer cell
designer thus determines the side of the padframe to which global signal ports are
ultimately connected.

Buffer Cell Input Ports

Besides meeting all general design constraints imposed on standard cells, buffer cells used in global
input signal routing must also meet the following constraints:

ƒ Each buffer cell must contain an input port located on one side of its abutment port. The left buffer
cell has its input port on the left side of its abutment port; the right buffer cell has its input port on
the right side of its abutment port.
ƒ Input ports on buffer cells must be vertical ports (height > 0, width = 0) and reside on the vertical
routing layer.

The height of the input port determines the width of the global signal rail connected with it. The width
of the global signal rail will be twice the height of the input port. Buffer cell input port names can be
arbitrary.

L-Edit 14 User Guide Section 2 453


18 Place and Route File Formats
2

L-Edit standard cell place and route accepts Tanner Place and Route (TPR) and Electronic Design
Interchange Format (EDIF) input files, and generates Standard Delay Format (SDF) and Nodal
Capacitance files (CAP) output files.

TPR Files

L-Edit can use netlist files in Tanner Place and Route (.tpr) format to generate chip layouts. TPR files
are ASCII text files that are generated automatically by the schematic editor S-Edit; they can also be
created with any text editor.

Syntax

A portion of the .tpr netlist file for the bargraph example is shown below.

Comment line $ TPR written by the Tanner Research schematic editor, S-Edit
$ Version: 2.0 Beta 5 Jan 7, 1998 16:07:16

Pad cell definition CP PadOut DataOut Pad;


Instance definition UPadOut_1 N2 PAD_B1_L31;

CP PadInC DataIn DataInB DataInUnBuf Pad;


UPadInC_1 N68 IPAD_9/N2 IPAD_9/N1 PAD_L9_SCO;

In the two lines above, DataIn, DataInB, and DataInUnBuf are the names of ports in the pad cell
PadInC (PortList). N68, IPAD_9/N2, and IPAD_9/N1 are the names of nets attached to these ports
(NetList). PAD_L9_SCO is the name given to the body region of the pad. L9 identifies the position of
the pad as the ninth pad from the top on the left side of the padframe.

Ground pad CP PadGnd Pad;


UPadGnd_1 PAD_R8_GND;

Power pad CP PadVdd Pad;


UPadVdd_1 PAD_L6_VDD;

Cell definition C INV A Out;


Instance definition UINV_3 BARGRAPH_1/BG64_2/N9 BARGRAPH_1/BG64_2/SFT3;

L-Edit 14 User Guide Section 2 454


Chapter 18: Place and Route File Formats EDIF Files

C Mux2 A B Out Sel;


UMux2_1 BARGRAPH_1/BG64_1/BG4_1/N118 BARGRAPH_1/BG64_1/BG4_1/N108
N62
+ BARGRAPH_1/BG64_1/S11;

In the three lines above, A, B, Out, and Sel are ports in the standard cell Mux2 (PortList).
BARGRAPH_1/BG64_1/BG4_1/N118, BARGRAPH_1/BG64_1/BG4_1/N108, N62, and
BARGRAPH_1/BG64_1/S11 are the names of nets attached to these ports (NetList). Note that these net
names include the hierarchical structure of the schematic. This is the manner in which S-Edit creates a
“flattened” .tpr netlist. A plus sign (+) indicates a continuation of the previous line.

Interpretation

Pad cells are defined in the format:

CP <padname> <pin1> <pin2> … Pad


U<gateUID> <net1> <net2> … Pad_<PadPosition>

Standard cells are defined in the format:

C <cellname> <pin1> <pin2> …


U<gateUID> <net1> <net2> …

A .tpr file must conform to the following rules:

ƒ All signals which are to be routed within the core or from the core to the padframe are required to
be listed, with the exception of the Vdd and Gnd signal connections to pads.
ƒ For each cell, the PortList and NetList must have the same number of elements.
ƒ The name “PAD” in the PortList of a pad cell refers to the actual bonding region of the pad, and is
not actually involved in the placement and routing process. Pad cells must have a signal marked
“PAD.”
ƒ The bonding region of a pad can contain the location of the pad on the padframe. For example,
“B1” stands for the leftmost pad on the bottom side of the padframe (L = Left, B = Bottom, R =
Right, T = Top).
ƒ Power and ground pads do not have to be included in the netlist. If they are not included, SPR will
place them automatically.
ƒ The parts listed in the file must match the cells contained in the layout library. To match, the name
of the part must be identical to the name of the library cell (except for case), and every signal listed
in the part description must have at least one port of the same name somewhere in the library cell.

EDIF Files

Netlist files in Electronic Design Interchange Format (EDIF) are used by SPR to place and route a
design. EDIF netlist files typically have a filename extension of .edf, .edn, or .edi.

SPR requires flattened EDIF netlists or netlists with one level of hierarchy.

L-Edit supports flattened EDIF version 2 0 0 with EDIF level 0, keyword level 0, and netlist view—
(edifLevel 0), (keywordLevel 0), and (viewType NETLIST) files. Other view types are ignored.

L-Edit 14 User Guide Section 2 455


Chapter 18: Place and Route File Formats EDIF Files

The netlist parser is limited to one netlist view label per netlist. If the netlist contains more than one
netlist view, L-Edit warns you and ignores subsequent, different view labels.

All cell properties will be transferred to the relating instance. Properties with no relation to a netlist
view will be ignored. L-Edit currently supports the use of properties with regard to the labeling and
positioning of pads and I/O signals. If an EDIF netlist contains both pad properties and I/O signals, only
the pads will be considered. L-Edit provides an optional warning when both appear in a netlist, which
may be disabled using Setup > Application > Warnings.

The parser is limited to one design—(design designname (…))—per EDIF netlist file.

External EDIF library definitions—(external libraryname (…))—are treated in the same way as
normal EDIF library definitions—(library libraryname (…)). Furthermore, the parser considers only
library information present in the current EDIF netlist file.

A mapping table is generated if cell names or port names in the EDIF netlist differ from those used in
the cell library. L-Edit automatically accesses the Mapping Table dialog whenever it encounters a cell
or port name discrepancy between the EDIF netlist and the standard cell library. You can also access
this dialog via the SPR Setup dialog. The mapping information is stored in the TDB design file.

Syntax

The following example shows excerpts from an EDIF netlist containing pad cells, I/O signals and
critical nets. If pad cells and I/O signals are both included in the netlist, the pad cell configuration has
precedence over I/O signals.

(edif bargraph
(edifVersion 2 0 0)
(edifLevel 0)
(keywordMap (keywordLevel 0))
(status
(written
(timestamp 1998 11 01 07 5 00)
(program "S-Edit" (version "Version 2.06"))))
(library bargraph_top
(edifLevel 0)
(technology (numberDefinition (scale 1 (E 1 -12) (unit CAPACITANCE))))
(cell bargraph_top
(cellType GENERIC)
(status
:
(view view_1
(viewType NETLIST)
(interface
(port ClB (comment "I/O Signal")
(property PIN_LOCATION (string "L2"))
(direction INPUT))
:
(instance PadInC_1
(viewRef view_1 (cellRef PadInC))
(portInstance DataIn)
(portInstance DataInB)
:
(property PAD (string "L1")) (comment "Pad")
:
(net N54
(joined
(portRef DataInB (instanceRef PadInC_5))
:
)
(criticality 100) (comment "Net criticality")
)

L-Edit 14 User Guide Section 2 456


Chapter 18: Place and Route File Formats EDIF Files

(net N55
(joined
(portRef ClB) (comment "Reference to an I/O Signal")
:
)
)
:
)
))
)
(design ROOT
(cellRef bargraph_top
(libraryRef bargraph_top)))
)

Interpretation: Pads

Pad cells are defined by creating a property named PAD with a value such as L1 in the pad cell instance.
The following formats are supported:

(property PAD (string "L1"))

or

(property PAD (string "1"))

The string value determines the position of the pad, counting counterclockwise. (In this example, the
pad is placed on the upper-left position of the padframe.) In the first format, the sides of the padframe
are labeled with L (left), B (bottom), R (right), and T (top). The subsequent number determines the
position on this side. The second format labels the pad position with only a numeric value ( > 0). The
resulting position is determined according to this value, counting counterclockwise, starting from the
upper left position on the padframe. In other words, pad position L1 is equal to pad position 1. To avoid
ambiguity, it is recommended that only one format be used in the same netlist file.

Pads with no string value attached, e.g., (property PAD (string "")), are equally distributed around the
padframe.

Interpretation: I/O Signals

If you intend to generate an SPR core cell only, you don't need to specify pad cells. In this case, ports
assigned to the top-level cell in your EDIF netlist can be assigned to I/O signals leaving the core. Please
note that I/O signals will only be considered if the netlist does not contain pad cells. (If both are present,
pad cells will be considered and I/O signals will be ignored.)

I/O signals are defined through the EDIF interface keyword. When SPR reads the netlist, it uses the
I/O signals designated in the interface section to initialize the core I/O signals setup (SPR > Setup >
Core Setup—I/O Signals dialog). You can change the signal location in this dialog to suit your design.

In most schematic editors, when you define pins or ports to a schematic or symbol, they are designated
as I/O signals. The following is an example showing the I/O signal CLK:

(interface
(port CLK
(direction INPUT)
)

L-Edit 14 User Guide Section 2 457


Chapter 18: Place and Route File Formats EDIF Files

In the above example, no pin position has been provided. In this case, the signal CLK will be equally
distributed with the other I/O signals around the core during placement. (A specific I/O signal position
can be defined in the (SPR Core Setup—I/O Signals dialog.)

Alternatively, you can also provide an I/O signal port position as shown below:

(interface
(port CLK
(direction INPUT)
(property PIN_LOCATION (string "L2"))
)

This example will place the I/O signal CLK on the second position (top to bottom) on the left side of the
core. The EDIF property PIN_LOCATION with the property value 1, 2, … or L1, L2, ..., B1, … , R1, …,
T1… indicates the relative position in which the I/O signals will be placed around the core, counting
counter-clockwise.

Interpretation: Criticality

Critical nets are defined by using the criticality construct in EDIF. SPR considers critical nets during
placement optimization. Criticality is expressed as an integer value. It may be positive (this net is given
a higher priority for placement purposes) or negative (this net is given a lower priority during
placement). The default value for any net that is not specified with a criticality value is zero.

The consideration of net criticality in SPR is based on two assumptions:

ƒ The numerical value of the criticality describes the relative importance of a net compared to others.
For example, if the criticality of net A is twice the criticality assigned to net B, then the placer
considers it twice as important to reduce the length of net A compared to net B.
ƒ The critical values are scaled internally according to the largest value that has been entered, with
the largest value assigned to a fixed internal value. For example, if net A is the only net with an
assigned criticality, then any criticality value greater than zero for this net would lead to the same
result.

Additional Notes

An EDIF netlist file must conform to the following rules:

ƒ An EDIF netlist component (e.g., cell, port) must be defined completely before it can be used.
ƒ If your cell interface in the EDIF file contains ports which are not connected in your design, you
can label them as “not used” during the mapping process.
ƒ All signals that are to be routed within the core or from the core to the padframe must be listed,
with the exception of VDD and GND signal connections to pads.
ƒ Power and ground pads do not have to be included in the netlist. If they are not included, L-Edit
places them automatically in accordance with the power and ground rails.
ƒ The range of integer numbers is –231+1 ≤ x ≤ 231-1 (32-bit signed integers). Real numbers are valid
in a range of –1 × 1035 ≤ y ≤ 1 × 1035. The length of a string is limited to 256 characters. The length
of a line is limited to 512 characters.
ƒ The array construct (array arrayname (...)) in a name definition is limited to one- or
two-dimensional arrays.

L-Edit 14 User Guide Section 2 458


Chapter 18: Place and Route File Formats SDF Files

ƒ Valid EDIF identifiers consist of alphanumeric or underscore characters, and must be preceded by
an ampersand (&) if the first character is not alphabetic. Thus, “pure” integer numbers are not
allowed as identifiers.
ƒ An ampersand (&) at the beginning of an identifier will be ignored. The case of a character is not
significant. For example, &Nand2, Nand2, and nand2 all represent the same EDIF name.

References

A complete description of the EDIF standard is contained in the Electronic Industries Association (EIA)
publication, Electronic Design Interchange Format Version 2 0 0 (ANSI/EIA Standard 548-1988),
Electronic Industries Association, 1988, ISBN 0-7908-0000-4.

SDF Files

Pin-to-Pin Delay Syntax


(DELAYFILE
(SDFVERSION "OVI Standard 3.0")
(DESIGN "bargraph")
(DATE "02/22/1999")
(VENDOR "Tanner Research, Inc.")
(PROGRAM "L-Edit/SPR")
(VERSION "8.0")
(DIVIDER /)
(VOLTAGE)
(PROCESS)
(TEMPERATURE)
(TIMESCALE 1ps)
(CELL
(CELLTYPE "bargraph")
(INSTANCE bargraph)
(DELAY
(ABSOLUTE
(INTERCONNECT NAND_1/C NOR_2/A (0.005))
(INTERCONNECT NAND_1/C NOR_2/B (0.003))
etc.
)
)
)
)

Interpretation

The pin-to-pin delay is generated in the OVI SDF Specification Standard 3.0:

INTERCONNECT <port_instance_1> <port_instance_2> (<delay>)

port_instance_1 is an output or bi-directional port. port_instance_2 is an input or bi-directional port.


delay is the interconnect delay between the output and the input ports.

The DESIGN entry in the SDF file header indicates the name of the design—that is, the name of the
TDB file.

L-Edit 14 User Guide Section 2 459


Chapter 18: Place and Route File Formats CAP Files

The CELLTYPE entry indicates the name of the cell—either the chip cell name (if pad route is included)
or the core cell name (if core route only).

CAP Files

L-Edit standard cell place and route calculates the nodal capacitances and other characteristics of the
interconnect and outputs this information to a nodal capacitance file with the extension .cap.

Syntax

The following is an example of a CAP file.

$ -------------------------------------------------------------------------------
$ Nodal Capacitance File : D:\ledit_files\v8_shipping\example3\bargraph.cap
$ SPR Date and Time: 02/27/1999 - 8:00
$
$ H1 layer-to-substrate cap. - Area : 36 aF/sq.micron Fringe : 0.086 fF/micron
$ V layer-to-substrate cap. - Area : 11 aF/sq.micron Fringe : 0.077 fF/micron
$ H2 layer-to-substrate cap. - Area : 7 aF/sq.micron Fringe : 0.031 fF/micron
$
$ H1 layer-to-V layer cap. - Area : 31 aF/sq.micron
$ V layer-to-H2 layer cap. - Area : 28 aF/sq.micron
$ H1 layer-to-H2 layer cap. - Area : 10 aF/sq.micron
$
$ 1 Locator Unit (LU) = 1/1 Lambda = 7/20 Micron(s)
$
$
$ Node CapacitanceNo ofLength Area Area Area
$ Terminalsof Nodeon H1 on V on H2
$ (1/100 pF) (LU) (LU^2) (LU^2) (LU^2)
$ --------------------------------------------------------------------------------

N4 6 9 5964.400678.000010567.20013296.000
N27 7 2 6046.000975.000012480.0009366.000
N26 2 2 2452.0000.00004479.0005754.000
N25 9 2 7589.0002373.000011829.00017130.000
N24 5 2 4062.0000.00003936.00016500.000
: : : :: : :
N12 1 2 599.5000.00001798.5000.0000

$ --------------------------------------------------------------------------------
$
$ Length of all nets (LU) : 1893584.90

Interpretation

Each line in the file is in the format:

node capacitance NoOfTerminals Length AreaOnH1 AreaOnV AreaOnH2

where:

node Name of the node.


capacitance An integer denoting capacitance of this node in hundredth of a
picofarad.

L-Edit 14 User Guide Section 2 460


Chapter 18: Place and Route File Formats CAP Files

NoOfTerminals Number of pins attached to the node.


Length Length of the interconnect of the node.
AreaOnH1 Area of the route taken by the node on the H1 layer.
AreaOnV Area of the route taken by this node on the H2 layer.
AreaOnH2 Area of the route taken by this node on the H2 layer.

For a detailed description of how nodal capacitances are calculated, see “Output Options” on page 437.

L-Edit 14 User Guide Section 2 461


19 Introduction to Design Verification

Section 3Section 3: Design Verification

Design Verification in L-Edit

This section of the L-Edit User Guide describes the design verification features of L-Edit:

ƒ Standard DRC — an easy to use design rule checker with setup dialog
ƒ HiPer Verify — a powerful 64 bit design rule checker supporting Calibre, Assura and Dracula
syntax
ƒ Extract — a netlist extraction tool
ƒ LVS — a layout-vs.-schematic comparison application
ƒ LVL — a layout-vs.-layout comparison wizard

Chapter 20, DRC Standard Rules (page 463) describes L-Edit⁄DRC Standard. Standard DRC features
user-programmable rules and handles minimum width, exact width, minimum space, minimum
surround, non-exist, overlap, and extension rules. It can run a full-chip or region-only DRC. Error
markers allow you to quickly and easily locate design rule violations.

Chapter 22, HiPer Verify: Calibre Command Files (page 486) and Chapter 23, HiPer Verify: Dracula
Command Files (page 647) describe HiPer Verify. HiPer Verify features the ability to run Calibre,
Assura and Dracula format command files without modification or translation. HiPer Verify features a
larger set of available commands than DRC Standard, the ability to reprocess results with conjunctive
rules, plus the ability to run DRC as a background process. It is fully integrated in the layout editor, and
results are placed directly into an error navigator for viewing.

Chapter 26, Extracting Layout (page 829) describes Extract, the netlist extractor. Extract creates
SPICE-compatible circuit netlists from L-Edit layouts. It can recognize active and passive devices,
subcircuits, and the most common device parameters, including resistance, capacitance, length, width,
area, and source and drain area.

Chapter 29, Introduction to LVS (page 880), Chapter 30, LVS Output Tutorial (page 919), Chapter 31,
Netlist Comparison (page 931) and Chapter 32, LVS Command-Line Syntax (page 939) discuss LVS,
or layout versus schematic, a tool that compares two netlists to determine whether they describe the
same circuit. When they do not, LVS works in conjunction with L-Edit to identify and correct errors.

L-Edit also provides a handy tool, layout versus layout (or LVL) which compares two L-Edit layout
files for differences in their geometry. This feature is described in Chapter 25, Layout vs. Layout (page
821).

Syntax and usage for the file formats used in design verification are detailed in Chapter 29, Introduction
to LVS (page 880).

L-Edit 14 User Guide Section 3 462


20 DRC Standard Rules
3

Design Rule Sets

It is not usually necessary to create design rules sets from scratch. If you have a previous design file that
uses a set of rules similar to those you want to employ in your current design, you can modify the rule
set from the previous design.

In general, you must perform the following three steps to create or edit a design rule set:

[1] Determine which rules must be specified. Fabrication services or foundries are typically able to provide
design rule sets.

[2] Determine which generated layers, if any, will be needed to implement each rule in the set. Define these
layers using Setup > Layers (see “Layer Setup” on page 87).

[3] Enter the rules in the Setup Design Rules dialog—see “Specifying DRC Standard Design Rules” on
page 471.

Setups

The design rule set is part of the setup specification that characterizes every L-Edit design. This setup
should be established before you start any new design. Again, it is not usually necessary to create this
setup from scratch. If you have a design file that uses the same or a set of rules similar to those you want
to employ in your current design, you can modify the rule set from the previous design.

To use existing rules in a new file, you can either copy a previous design setup to the new file, or you
can combine rules from different designs in a new setup. These two methods are described below.

Copying Setup Information to a New File

There are three ways to copy setup information to a new file:

ƒ Copy a design file. The copy will automatically contain the same setup information as the original
design file.
ƒ Create a new file while a file with the desired setup information is active. The new file will
automatically contain the same setup information.
ƒ Import from a TDB file. Use the command File > Replace Setup to copy the setup information
from the specified file to the active file. See “Replacing the Setup” on page 54.

If necessary, you can modify design rules in the new or copied file using the Setup Design Rules
dialog (see “Specifying DRC Standard Design Rules” on page 471).

Combining Rules from Different Files

You can combine design rules from TDB files as follows:

L-Edit 14 User Guide Section 3 463


Chapter 20: DRC Standard Rules Design Rule Types

ƒ Start by opening the design file into which you want to introduce additional rules. In that file, use
the Setup Design Rules dialog to delete the design rules that you do not want to keep.
ƒ Create any additional needed layers, including generated layers, and remove any unused layers.
You should be careful in this step to create all and only the required layers. Design rules associated
with missing layers will not work properly. No design rules will be specified for extra layers, so
layout errors on those layers will not be detected.
ƒ Specify the TDB file from which existing rules are to be taken in the Replace Setup Information
dialog (see “Replacing the Setup” on page 54). Enter the name of the source file, uncheck all the
options except DRC rules, and click OK. L-Edit reads the specified setup, including design rules,
into the active file.

Generated Layers

You can specify design rules for generated layers just as you would for other layers. When you use
generated layers in the specification of a design rule, L-Edit⁄DRC automatically generates objects on
those layers then deletes these objects when the check is complete.

Following the DRC run, L-Edit automatically deletes objects on generated layers that were created
during the DRC run. If Enable Derivation is off in the Setup Layers—Derivation dialog, then DRC
doesn’t generate or delete the derived layer.

For information about defining generated layers, see “Generating Layers” on page 312.

Exporting DRC Standard Rules to Calibre Format

You can export DRC setups in DRC Standard Rule format to Calibre format to use as a starting point
for writing more advanced rule sets in text file format. To export DRC Standard rule to a text file, select
Tools > DRC Setup from the menu, then highlight DRC Standard Rule Set and press the Edit button to
open the Setup DRC Standard Rule Set dialog. Press the Export to Command File button.

Design Rule Types

L-Edit supports seven types of design rules. Each of these rule types is described below, with specific
examples shown in the accompanying figures.

ƒ “Minimum Width” (page 465)


ƒ “Exact Width” (page 465)
ƒ “Not Exist” (page 465)
ƒ “Spacing” (page 465)
ƒ “Surround” (page 466)
ƒ “Overlap” (page 466)
ƒ “Extension” (page 466)
ƒ “Density” (page 467)

L-Edit 14 User Guide Section 3 464


Chapter 20: DRC Standard Rules Design Rule Types

Minimum Width

Minimum width rules specify the minimum width of all objects, in any direction, on the named layer.

Poly Minimum Width = 2 lambda

You can specify exceptions for this rule type as described in “Rule Exceptions” on page 467.

Exact Width

Exact width rules specify the exact width of all objects on the named layer.

Poly Contact Exact Width = 2 lambda

Not Exist

Not exist rules specify that no objects should exist on the named layer. Not exist rules are unique in
having no associated distance.

Spacing

Spacing rules specify the minimum distance that should separate all pairs of objects, either on the same
layer or two different layers.

Via to Poly Contact Spacing = 2 lambda

You can specify exceptions for this rule type as described in “Rule Exceptions” on page 467.

L-Edit 14 User Guide Section 3 465


Chapter 20: DRC Standard Rules Design Rule Types

Surround

Surround rules specify that objects on one layer must be completely surrounded by objects on another
layer.

Metal2 Surround Via = 1 lambda

You can specify exceptions for this rule type as described in “Rule Exceptions” on page 467.

Overlap

Overlap rules specify the minimum amount that an object on one layer must overlap an object on
another layer (when there is an overlap). Objects which overlap more than the specified distance or
whose edges coincide are not considered in violation of overlap rules.

Rule distance

OK

OK

OK

Violation

OK

OK

Poly Contact Overlap Poly = 2 lambda

Extension

Extension rules specify the minimum amount that an object on one layer must extend beyond the edge
of an object on another layer. Objects are not considered in violation of extension rules when they:

ƒ Extend more than the specified distance


ƒ Have a coincident edge but are otherwise outside
ƒ Are entirely surrounded

L-Edit 14 User Guide Section 3 466


Chapter 20: DRC Standard Rules Design Rule Types

Rule distance

OK

OK

OK

Violation

Violation

OK

Poly Contact Extend Poly = 2 lambda

Density

The density rule finds and flags objects on the derived density layer specified in Layer1. The layer
specified must be a Density type derived layer. Violations to the rule include any polygons output to a
density layer.

See “Density Layer Derivations” on page 325 for a description of density layers.

Rule Exceptions

You can fine-tune some rules by specifying particular layout conditions that are not to be reported as
violations. These conditions are represented by the Ignore options in the dialog Setup Design Rules
(see “Specifying DRC Standard Design Rules” on page 471).

Condition Description Applicable rules

Coincidences Coincident edges between objects are Surround


ignored.
Intersections Intersections between objects are ignored. Surround
If layer 2 completely Objects on one layer entirely surrounded Spacing
encloses layer 1 by objects on another layer are ignored.
If layer 1 completely Objects on one layer entirely outside Surround
outside layer 2 objects on another layer are ignored.
Acute angles Errors caused by acute angles (less than Minimum width
90°) are ignored. Spacing
Surround

L-Edit 14 User Guide Section 3 467


Chapter 20: DRC Standard Rules Design Rule Types

The following illustration shows exception conditions for spacing and surround rules.

Spacing

Rule distance

Always OK

Always a violation

OK if Coincidences checked; otherwise a violation

OK if Intersections checked; otherwise a violation

OK if If layer 2 … encloses layer 1 checked; otherwise a violation

OK if If layer 2 … encloses layer 1 checked; otherwise a violation

Surround
Rule distance

Always OK

Always a violation

OK if Coincidences checked; otherwise a violation

OK if Intersections checked; otherwise a violation

OK if If layer 1 … outside layer 2 checked; otherwise a violation

OK if If layer 1 … outside layer 2 checked; otherwise a violation

Acute Angles

When two consecutive edges of a polygon form an acute angle, the distance between them always goes
to zero at the vertex. This means that acute angles, by definition, will lead to violations of minimum
width and minimum spacing rules in DRC.

By checking the option Ignore: Acute angles, you can instruct L-Edit to ignore violations caused by
acute angles. This option does not exclude objects with acute angles from the design rule check. Instead,
it suppresses errors that result from an acute angle in the layout.

For example, consider the following all-angle polygon drawn on layer Poly:

L-Edit 14 User Guide Section 3 468


Chapter 20: DRC Standard Rules Design Rule Types

Checking this object for minimum width would ordinarily yield three violations, as marked here:

Min. width

Min. spacing

Min. width

Running the same design rule check with the option Ignore: Acute angles, however, ignores those
violations that are caused by an acute angle. With these errors excluded, L-Edit reports only one
violation.

Min. width

Flag to Append Special Commands

When L-Edit runs a standard DRC rule, the DRC engine first converts the rule to Calibre format. You
can use the special flag “|||” after a design rule to instruct the DRC engine to append any commands that
follow the ||| characters to the Calibre rule.

For example, when Display curves using manufactured grid is checked, L-Edit will convert curved
objects to polygons, with vertices that snap to the manufacturing grid. DRC treats these segment as
separate objects, and if they cause a spacing violation will generate hundreds of violations.

While you can limit the number of errors reported for a single DRC rule, the limitation applies even
when the errors come from different cell instances. Similarly, temporarily increasing the size of the
manufacturing grid can decrease the number of DRC errors, but also changes the geometry to an
inaccurate representation of the object.

Instead, you can use the “|||” flag at the end of the name of the spacing rule to pass special conditions to
the DRC engine. In the following example, the “Projecting” command is used to instruct DRC to
consider only those edges that project onto each other by more than one manufacturing grid.

Standard DRC rule:


Rule name: Min. Permolloy Width
Type: Min Width
Rule distance: 650um
Layer1: Permolloy

L-Edit 14 User Guide Section 3 469


Chapter 20: DRC Standard Rules Design Rule Types

Equivalent Calibre format rule:


"Min Permalloy width" { @ < 650 Microns
INTERNAL Permalloy < 650 SINGULAR
SAVE "Min Permalloy width::Result"
}

Standard DRC rule with ||| flag:

Rule name: Min Permalloy width ||| PROJ > 5


Type: Min Width
Rule distance: 650um
Layer1: Permolloy

Equivalent Calibre format rule with ||| flag:

"Min Permalloy width" { @ < 650 Microns PROJ > 5


INTERNAL Permalloy < 650 PROJECTING SINGULAR
SAVE "Min Permalloy width::Result"
}

L-Edit 14 User Guide Section 3 470


Chapter 20: DRC Standard Rules Specifying DRC Standard Design Rules

Specifying DRC Standard Design Rules

Select Tools > DRC Setup from the menu, highlight DRC Standard Rule Set in the rule set list, then
press the Edit button ( ) to open the Setup DRC Standard Rule Set dialog, which allows you to
modify the DRC standard design rules.

Rule set Name identifies the design rule set.

All-angle tolerance is a value T, common to all rules in the set, which


together with the distance D for each rule (see below) determines the
precision of error checking. A distance on the layout must be less than
D- T to be flagged as a violation. The All-angle tolerance is only
applied if one of the two edges being compared is non-orthogonal.

Limit number of errors reported per rule to is an integer T, with a


default value of 1000.

L-Edit 14 User Guide Section 3 471


Chapter 20: DRC Standard Rules Specifying DRC Standard Design Rules

Rules list The list of available rules. The checkbox next to each rule indicates if
the rule is currently enabled. Enabled rules will be checked when
DRC is run.

You can alter the Rules list with the following options:
ƒ Enable All—Enables all valid rules in the Rules list.
ƒ Disable All—Disables all rules in the Rules list.
ƒ Add—Adds a new rule to the Rules list. To add a rule, click
Add, then type the name of the new rule in the Rule field.
ƒ Delete—Deletes the highlighted rule.
ƒ Copy—Adds a copy of the highlighted rule to the Rules list. The
copy is placed underneath the original rule, with “Copy of”
preceding the rule name.
ƒ Move Rule—Click the up or down Move Rule arrows to
reposition the highlighted rule.
Rule The name of the rule highlighted in the Rules list. Rule type, Ignore,
Rule distance, and Rule layers all pertain to the uniquely named
rule.
Rule type Selected by clicking the appropriate option button. See “Design Rule
Types” on page 464 for information on the supported types.
Ignore Cases which will not be considered a design rule violation. Options
include:
ƒ Coincidences
ƒ Intersections
ƒ If layer 1 completely outside layer2
ƒ Acute angles
See “Rule Exceptions” on page 467 and “Acute Angles” on page 468
for further information on the use of these options.
Rule distance The distance value associated with a rule. Distances are measured
either in display units. You can change the display units using the
pull-down menu in the locator bar.
Rule layers DRC specifies which layers are involved in each of the design rules.
For example, selecting the Spacing rule type automatically specifies
Minimum Layer [ ] to Layer [ ] spacing. To specify a rule layer, open
the Setup Layers dialog, then choose from the layer list.
Geometry Flags... Opens the Geometry Flags dialog for flagging instances of specific
geometry configurations. (See “Geometry Flags” on page 472.)
Geometry flags are counted as errors during a DRC run.
Export to Command File Exports the DRC ruleset to a textual command file. The ruleset is
opened in a text window, which can then be saved to disk.

Geometry Flags

During DRC, each drawn layer is checked for geometry violations. Hidden layers are not checked. Use
the Geometry Flags dialog to specify geometry configurations that L-Edit will flag as errors during
DRC, to enable geometry checks on derived layers or on layers that are not used by the active DRC rule

L-Edit 14 User Guide Section 3 472


Chapter 20: DRC Standard Rules Specifying DRC Standard Design Rules

set. To access this dialog, click the Geometry Flags button at the bottom of the Setup Design Rules
dialog. You can also open this dialog using Tools > Check Geometry Flags.

Flag acute angles Reports an error whenever two consecutive edges of a polygon or
wire on a drawn layer form an acute angle (less than 90 degrees).
These errors are reported in a rule named “Polygons and wires with
acute angles (<900).”
Flag all-angle edges Reports an error when an all-angle edge (i.e., neither orthogonal nor
45-degrees) is found in a polygon on a drawn layer. All-angle edges
are measured in cell coordinates; an edge is flagged as all-angle if it is
neither orthogonal nor 45-degrees as it occurs in the cell in which it
was drawn.

Because angles are measured in cell coordinates, instance rotations do


not affect which edges are flagged as all-angle:

Rotated instance
All-angle edge
All-angle edge

Errors are reported to a rule named “All-Angle edges.”

L-Edit 14 User Guide Section 3 473


Chapter 20: DRC Standard Rules Optimizing Performance

Flag off-grid Reports an error when an off-grid vertex or instance is found. Wires
are checked using their centerline vertices. Errors are reported to a
rule called “Offgrid objects.”

The number in parentheses gives the gridsize, in display units, used to


determine offgrid objects and vertices. The gridsize used is the
Manufacturing Grid size, which you can specify in
Setup > Application—Grid.

Flag zero-width wires Reports an error whenever a wire with zero width is found on a drawn
layer.
Flag polygons with more Reports an error whenever a polygon with more than the specified
than N1 vertices number of vertices is found on a drawn layer.
Flag wires with more than Report an error whenever a wire with more than the specified number
N2 vertices of vertices is found on a drawn layer.
Flag self intersections Reports an error whenever a self intersecting polygon or wire is found
(Always checked) on a drawn layer. The perimeter boundary of the wire is checked and
reported for self intersections, not the centerline. Self intersecting
polygons and wires are not processed further by the DRC engine.
Flag round join/end wire Reports an error whenever a wire with round join/end style is found
styles (Always checked) on a drawn layer. Wires with the round join/end style are processed
by the DRC engine, but are approximated as layout style.

Optimizing Performance

Design rule checking is a complicated, computation-intensive process that involves large numbers of
comparisons and measurements. Some DRC runs can result in very long execution times. This section
outlines several ways to achieve faster results.

Checking Incrementally

Use region-only checks at convenient stopping points in the design process. Performing region-only
checks will also help prevent compounding of errors which might require extensive layout modification
to correct. Use the full-cell check for completed cells and at least once on the final design.

Checking Hidden Layers

You can set whether DRC will or will not check rules involving hidden layers, for each layer that is
hidden. For example, if you have examined and repaired all violations involving particular layers, you
may want to hide these layers to reduce execution times for subsequent DRC runs involving other
layers.

L-Edit 14 User Guide Section 3 474


Chapter 20: DRC Standard Rules Optimizing Performance

When DRC is initiated, L-Edit will prompt you for your preferred action for each hidden layer it finds.

Yes Keep this layer hidden and ignore it during DRC.


Yes to All Keep all layers hidden and ignore them during DRC.
No Cancel operation.
Show All Layers and Start Change state of all hidden layers to “shown” and include them in
DRC operations.

Disabling Rules

Use the checkboxes in Setup Design Rules to enable (checked) or disable (unchecked) rules you do
not need. Alternately you can use the ||| flag to append Calibre rules to —see “Flag to Append Special
Commands” on page 469.

L-Edit 14 User Guide Section 3 475


21 DRC Setup
3

Design rules, in their simplest form, are usually minimum allowable values for widths, separations,
extensions, and overlaps of and between geometrical objects. The exact nature of design rules is
dependent on specifications supplied by the foundry to which the design will be submitted for
fabrication.

To check a layout for design rule violations involves two basic steps:

ƒ Define the rules that are acceptable for your design.


ƒ Run the design rule checker, on the entire design or a portion of it.

The commands Tools > DRC (for whole cells) and Tools > DRC Box (for limited regions) run a design
rule checker, which determines whether a design obeys a specific set of rules. Design rule violations are
saved in the TDB file. You can then step through and display design rule violations using the
Verification Error Navigator. A summary report of design rule violations is also saved in the TDB file.

Note that the netlist will not be exported if a design rule error exists.

Design Rule Sets

Design rules are supported in these formats:

ƒ Tanner DRC Standard Rule Set— Tanner format, with graphical setup interface.
ƒ Mentor Graphics Calibre® compatible format — text format command file.*
ƒ Cadence Dracula® compatible format — text format command file.*
ƒ Cadence Assura® compatible format — text format command file.*

Setting Up DRC

To run DRC you must first load and select the rule sets you want to run. You add and select rule sets
from the Setup DRC dialog. The Tanner DRC Standard Ruleset is loaded by default. To use it, simply
click on its checkbox.

You also use this dialog to set the order in which rule checks are executed, and as a shortcut to open the
windows where rule sets can be edited.

* Calibre is a trademark of Mentor Graphics Corporation. Dracula and Assura are trademarks of Cadence Design Systems, Inc.

L-Edit 14 User Guide Section 3 476


Chapter 21: DRC Setup Setting Up DRC

Note that checkmarks in the Setup DRC list control only which rule sets to run. All other functions in
the setup dialog are performed on the rule set that is highlighted.

Use Tools > DRC Setup or press the Setup DRC icon ( ) in the verification toolbar to open Setup
DRC.

DRC Rule Sets to run Lists the DRC command files that are loaded and available to run.
DRC Standard Rule Set is the built in Tanner rule set which is loaded
by default. It cannot be deleted from the list.

DRC will only run the rule sets with checkboxes in the “checked”
state.

See “Icons for the DRC Rule Sets list” on page 479 for a table of the
icons that control the rule list.
Calibre Defines Use this field to enter variable or variable and value combinations to
trigger preprocessor commands that are written in the rule files using
#DEFINE and #IFDEF.

Note: DRC setup values in this field are saved and will not replace
Extract define values.
Setup Assura See “Assura Setup” on page 746.

L-Edit 14 User Guide Section 3 477


Chapter 21: DRC Setup Setting Up DRC

Run in background Check this box to run DRC in background. When DRC is run in
background, you can continue to edit and perform other L-Edit
operations while DRC is running. DRC results are returned as soon as
they are found, so you can browse and correct errors before the entire
DRC job is complete.
Lock participating cells Locks the cell, and all hierarchy below that cell, to prevent edits while
while DRC runs DRC is running.
Save node-highlighting A check in this box allows you to save node highlighting data to the
data location specified using the To Folder button (which opens a standard
Browse for Folder window).

Note: The Setup Extract—Options dialog and the


Setup > Design—Node Highlighting dialog both include the
option to save node highlighting data, and to choose where it is
saved. Be careful to manage these settings to avoid losing or
overwriting your data.
Send E-mail to: Enter an E-mail address to send notification to the specified recipient
when the Extract job is complete. Use Configure to set the E-mail
options shown below. Note that most E-mail applications will require
a response prior to sending an E-mail initiated from another
application.

Play sound Check to play a sound when DRC is complete. You can configure the
sound from the standard Windows sounds available.
Pop up message box Opens a DRC Completion Report when DRC is complete.

L-Edit 14 User Guide Section 3 478


Chapter 21: DRC Setup Running DRC

Icons for the DRC Rule Sets list


Edit selected command file Opens the selected rule set for editing. If DRC Standard Rule
Set is highlighted, the Setup DRC Standard Rule Set dialog
( ) opens. If a command file is selected, that file opens in a text
window.
Add command file to list Press this button to add a new entry to the list of command files.
You can browse to and select a file with the ( ) button.
( )
Delete command file from list Removes the highlighted command file from the list.

( )
Move Up Moves the highlighted command file up in the list.

( )
Move Down Moves the highlighted command file down in the list.

( )

Running DRC

When your layout is complete, you should check for design rule violations before sending the layout to
the chip foundry for fabrication. If a chip is fabricated with design rule violations, it may fail to function
as designed.

You can run DRC against an entire cell or a specific region (“DRC box”) of the cell.

Design Rule Check on a Full Cell

To perform a rule check on the entire layout of the active cell, select Tools > DRC ( ).

This button is a toggle, so that during the design check it functions as a stop button ( ). If you stop a
DRC run, L-Edit prompts for a confirmation and opens a DRC completion report indicating that the job
was terminated prior to completion.

Region-Only Design Rule Check

To perform a rule check on just an area of a cell, use Tools > DRC Box ( ).

Run a region-only check when a restricted area or group of objects in the layout needs to be checked for
design rule errors. A region-only check is useful for interim verification during layout creation or to
confirm that a design rule violation in a specific region has been corrected.

To perform a region-only check, select Tools > DRC Box then click and drag in the layout (you will be
using the DRAW mouse button) to outline the rectangular area of the layout to be checked. The outline
will only be visible while DRC is running.

L-Edit 14 User Guide Section 3 479


Chapter 21: DRC Setup Running DRC

Objects inside or intersecting the region are processed in the DRC Box check. Objects intersecting the
region are not clipped to the region. As a result, violations can be reported when running region-only
DRC that are not present when DRC is run on the entire cell, due to the exclusion of objects outside the
region. If this happens, making the region larger should reduce these false errors.

Single Rule Check from a Command File

You can run a single rule in a command file by placing the cursor on the desired rule in the command
file, right-clicking the mouse, and selecting Run Rule rulename. This will run the selected rule on the
entire cell.

After you invoke Run Rule, L-Edit opens a dialog where you can choose the file and cell on which to
run the specified rule.

L-Edit 14 User Guide Section 3 480


Chapter 21: DRC Setup Running DRC

DRC Progress

While DRC is running, L-Edit displays a progress dialog similar to the following:

The progress dialog displays the cell, the rule set, and the name of the current rule being checked, as
well as the elapsed time, the estimated time remaining in the DRC run, the number of flags checked and
rules completed, and the number of errors found.

For each rule for which errors are found, the dialog lists the rule name and the corresponding number of
violations. The contents of the progress dialog are saved in the DRC Summary Report. The DRC
Summary Report may be opened at any time from the Verification Error Navigator, by invoking
Actions > Open DRC Summary Report.

Notification of DRC Completion

DRC can be configured to notify you upon completion with either a brief summary report, a sound, or
both. This is especially useful when running DRC in background. To configure DRC to present a

L-Edit 14 User Guide Section 3 481


Chapter 21: DRC Setup Command File Syntax Checking

message box upon completion, select Pop up message box in the Setup DRC dialog. The dialog
shown below will be presented when the DRC job is complete.

Activate view of this cell Opens the cell that the DRC job was run on. This is useful when
running DRC in background, and a different cell may currently be
open.
Show Summary Report Displays the DRC summary report in a text window. See summary
reports, below.

To configure DRC to play a sound upon completion, select Play sound in the Setup DRC dialog. Press
the Configure button to invoke the standard Windows sound selection dialog.

Command File Syntax Checking

L-Edit DRC includes a syntax checker for checking the validity of command files. The syntax checker
should be used to verify the correctness of command files before running DRC and also when you
create new command files.

The layout and .ext file must be open when L-Edit performs this check. To invoke the syntax checker,
select Tools > Check Syntax (shortcut key F6).

Command file window

Error bookmark

Error window

L-Edit 14 User Guide Section 3 482


Chapter 21: DRC Setup DRC Status

ƒ A window will open below the command file window listing syntax errors and warnings.
Double-clicking the cursor on a line in the error window will scroll the command file window to
the corresponding error.
ƒ Syntax errors within connect() and/or device() statements are reported with the line number and
and a best guess of the reason for parser failure. Semantic errors are reported as they are for
Calibre, Assura or Dracula rule decks.
ƒ Bookmarks will also be placed in the command file window on the line corresponding to each
syntax error. You can use Edit > Go To Next Bookmark (shortcut key F2) and Edit > Go To
Previous Bookmark (shortcut key Shift+F2) to navigate through the errors. Edit > Clear All
Bookmarks (shortcut key Ctrl+Shift+F2) clears all bookmarks.

DRC Status

Each cell has a DRC Status setting, which can be one of the following states:

ƒ Needed — DRC has never been run on the cell, or edits have been made since last run.
ƒ Passed — DRC has been run on the cell, and no violations were found.
ƒ Failed — DRC has been run on the cell, and violations were found.

Running DRC on a cell will set the DRC Status flag for the cell to either Passed or Failed. The DRC
status flag is set only for the toplevel cell from which the DRC job is invoked, even though instances of
other cells checked in the process. Editing a cell after DRC has been run on that cell will revert it’s
status back to Needed. Any change to the DRC Setup, including changes to Layer Setup, will also
cause the DRC Status of all cells to revert to the Needed state.

The DRC status of all cells may be viewed in the Design Navigator (See “DRC Status” on page 238), or
for any single cell it may be viewed in the Cell > Info dialog (See “Cell Information” on page 250). The
DRC Status may also be manually changed in the Cell > Info dialog.

Excluding Cells from DRC

Instances of specified cells can be excluded from DRC. To mark a cell for exclusion from DRC, select
Exclude instances of this cell from DRC in the Cell > Info dialog of the cell.

Marking a cell for exclusion from DRC is particularly useful for logo cells, which typically contain
DRC violations that can be ignored.

Debugging DRC Results with Generated Layers

When debugging DRC results, it is often useful to be able to generate and visualize the derived layers
that are used in a rulecheck command.

L-Edit 14 User Guide Section 3 483


Chapter 21: DRC Setup Debugging DRC Results with Generated Layers

Generating Layers

You can generate any of the derived layers within the global scope of a command file with a single
command, Tools > Generate Layers (see “Generating Derived Layers” (page 326) for more details).
Global scope consists of any definition not within the braces ({,}) of a rulecheck statement.

Generate Layers directly from a Command File

You can also generate a single layer in a command file by placing the cursor on the desired layer
definition in the command file, right-clicking the mouse, and selecting Layer Derivation in the context
sensitive menu. Layers defined in either global and local scope of a rulecheck statement can be selected.

L-Edit 14 User Guide Section 3 484


Chapter 21: DRC Setup Debugging DRC Results with Generated Layers

When you execute Layer Derivation from a command file, L-Edit opens a dialog that displays the
derivation tree for the layer, and allows you to generate that layer as well as intermediate layers in the
derivation. You also choose the file and cell for which to generate layers.

Pressing the Generate button will generate the selected layer. Intermediate layers in the derivation can
be included by checking the Generate intermediate layers checkbox.

L-Edit 14 User Guide Section 3 485


22 HiPer Verify: Calibre Command
Files

This section provides the reference to Calibre® compatible DRC command file format.

Input Conventions

This section describes the syntax and constraints on commands and functions.

Case Sensitivity

Keywords are always case-insensitive. Names are case-insensitive unless used for cell names or file
names. RuleCheck names, layer names, net names, variable names, and so forth, are always
case-insensitive

New Line Insensitivity

The statements that appear in a rule can begin anywhere on a line and can span lines. In addition,
statements and operations need not each begin on a new line.

Navigation in the Text Editor


To speed navigation in the text editor, you can right-click on a layer name to access the command “Go
To Layer Definition” in the context-sensitive menu, which jumps the cursor to the line with the
definition for that layer.

Preprocessor Commands

#DEFINE, #IFDEF, #ELSE, and #ENDIF are supported as a mechanism of conditionally executing
blocks of commands.

Comments

Commands may be commented out using C-Style (/* … */) and C++ Style (//) comments characters.
C-Style comments may span multiple lines. C++ Style comments extend from the comment characters
to the end of the line.

Constraints

Many operations require a mathematical constraint as one or more of the input parameters. The
constraint is usually applied to either a count of the number of some quantity, or to the measurement of
some distance. Constraints are expressed as follows:

L-Edit 14 User Guide Section 3 486


Chapter 22: HiPer Verify: Calibre Command Files

<a

>a

<= a

>= a

==a

!= a

>a<b

>= a < b

> a <= b

>= a <= b

Where "a" and "b" are non-negative numbers. Not all operations permit all constraints.

Numeric Expressions

A numeric expression can be used to specify any numeric parameter in any layer operation. Numeric
expressions can also be used to define variables in a Variable specification statement. A numeric
expression is a combination of numeric constants, numeric variables, the unary "+" and "-" operators,
and the binary "+", "-", "*", "/", and "%" operators.

Reserved Symbols

The following are reserved symbols and may not be used in layer names or rule names in the command
file.

// @ = { } " ' ( ) [ ] < == > <= >= != - + * / ! % && || :: , /* */

L-Edit 14 User Guide Section 3 487


Chapter 22: HiPer Verify: Calibre Command Files

Reserved Keywords

The following words are reserved keywords and may not be used as layer names or rule names in the
command file.

abut factor parallel


acute flag perimeter
and flatten perp
angle group perpendicular
angled grow polygon
area holes precision
by in proj
coin include projecting
coincident inside rectangle
convex int rectangles
copy interact region
corner internal resolution
cut intersecting shrink
donut layer singular
drawn length size
drc measure snap
enc merge square
enclose not step
enclosure obtuse title
exclude offgrid touch
expand opposite variable
ext or vertex
extend out with
extent outside xor
extents overlap
external para

L-Edit 14 User Guide Section 3 488


Chapter 22: HiPer Verify: Calibre Command Files

Command File Examples

The smallest command file consists of :

ƒ A PRECISION statement to define the ratio of user units to database units


ƒ LAYER statement(s) to define drawn layers
ƒ A RuleCheck statement

Note that the LAYER statement can be use to give a layer a different name in the command file
compared to the tdb file. One could have layer Metal1 with GDS number 49 in the tdb file, but define
LAYER M1 49 in the command file.

PRECISION 1000

LAYER M1 49

M1.S { @ M1 Spacing < 0.3


EXT M1 < 0.3
}

A Basic Command File


//*******************************************************************
// Sample DRC Command File
//*******************************************************************

TITLE "Sample DRC Command File"

// Setup Info
PRECISION 1000
RESOLUTION 10
FLAG ACUTE YES
FLAG SKEW YES
FLAG OFFGRID YES
FLAG NONSIMPLE YES

// Input Layers
LAYER ACTIVE 1
LAYER POLY 2
LAYER CONTACT 3
LAYER METAL1 4

// Common Derived Layers


FIELD_POLY = POLY NOT ACTIVE
POLY_CONT = CONTACT NOT OUTSIDE FIELD_POLY
DIFF_CONT = CONTACT OUTSIDE FIELD_POLY

// POLY DRC Rules


PO.1 { @ Minimum poly space < 0.38
EXT POLY < 0.38 ABUT < 90
}
PO.2 { @ Minimum poly on field space to active < 0.16
EXT POLY ACTIVE < 0.16 ABUT < 90 SINGULAR
}
PO.3 { @ Minimum active extend gate < 0.6
ENC POLY ACTIVE < 0.6 SINGULAR ABUT < 90

L-Edit 14 User Guide Section 3 489


Chapter 22: HiPer Verify: Calibre Command Files

// CONTACT DRC Rules


CO.1 { @ Contact width != 0.30
NOT RECTANGLE CONTACT == 0.30 BY == 0.30
}
CO.2 { @ Contact spacing < 0.30
EXT CONTACT < 0.30 SINGULAR
}
CO.3 { @ POLY contact space to active < 0.28
EXT POLY_CONT ACTIVE < 0.28 SINGULAR ABUT <90
}
CO.4 { @ Active overlap contact < 0.12, also floating contacts
ENC DIFF_CONT ACTIVE < 0.12 SINGULAR ABUT <90 OUTSIDE ALSO
}

// METAL1 DRC Rules


M1.1 { @ METAL1 width < 0.36
INT METAL1 < 0.36 SINGULAR ABUT < 90
}
M1.2 { @ METAL1 spacing < 0.36
EXT METAL1 < 0.36 ABUT < 90
}
M1.3 { @ Min METAL1 density < 30%
DENSITY METAL1 < 0.30
}

Command Usage

Commands can be used as layer derivation statements, or in RuleCheck statements. Layer derivations
that appear outside of Rule Check statements are referred to as “global” derivations. Layer derivations
inside of Rule Check statements are referred to as “local” derivations.

ƒ A layer derivation statement consists of directing the results of a command to a named layer.
GATE = POLY AND ACTIVE
ƒ An implicit layer definition consists of a matched pair of parenthesis containing a layer definition.
NTRAN = (POLY AND ACTIVE) NOT NWELL

A RuleCheck statement consists of a name followed by a left brace “{”, followed by a sequence
consisting of either layer derivations or dimensional checks, followed by a right brace “}”:

ƒ A Rule Check Statement directs the results of a command to the Verification Error Navigator, with
the specified rule name.
rule-name1 {
EXT GATE < 2.0
}

Rule check statements have the following properties:

ƒ Multiple commands within a Rule Check Statement are allowed.


rule1 {

L-Edit 14 User Guide Section 3 490


Chapter 22: HiPer Verify: Calibre Command Files

EXT GATE < 2.0


INT GATE < 2.0
}

ƒ Layer derivations such as "Z = Layer1 AND Layer2" are allowed within a rule check statement.
Layer Z is local in scope within that rule, and can be used by commands within that rule.
rule2 {
GATE = POLY AND ACTIVE
INT GATE < 2.0
}

ƒ Any command, not only dimensional check operations, may be used to direct errors to the
Verification Error Navigator. For example
rule3 {
VIA OUTSIDE METAL
}

ƒ Rule Check comments are text following the @ symbol, to the end of the line. Multiple Rule Check
comment line are allowed. Rule check comments are displayed in the Verification Error Navigator
along with the rule name.
rule4 { @ Rule check comment
@ Second comment line
GATE = POLY AND ACTIVE
INT GATE < 2.0
}

ƒ Implicit layer definitions are allowed within dimensional check operations (ENC, EXT, INT).
Implicit layer definitions may not be used with dimensional check operations when the edge
directed output options [ ] or ( ) are used.
rule5 {
EXT (POLY AND ACTIVE) < 2.0
}

Intermediate Layer Rules

Edge Directed Output


The output of a dimensional check operation (ENC, EXT, INT) can be put on an edge layer by
surrounding one of the input layers in the operation with brackets [ ] or parenthesis (). The edge layer
may then be processed by other commands.

Enclosing a layer in brackets is called positive edge-directed output, and returns the edges on the layer
that are normally flagged by the rule.

Enclosing a layer in parenthesis is called negative edge-directed output, and returns the edges on the
layer that would not normally be returned by the rule.

L-Edit 14 User Guide Section 3 491


Chapter 22: HiPer Verify: Calibre Command Files

Only one edge-directed output specification may appear in a single dimensional check operation.
Edge-directed output specifications apply to Internal, External, and Enclosure.

rule-name {
Z = EXT [layer1] < n1
LENGTH Z > n2
}

rule-name {
Z = EXT [Layer1] Layer2 < n1
LENGTH Z < n2
}

Polygon Directed Output


The output of a dimensional check operation (ENC, EXT, INT) can also be put on a polygon layer by
using the REGION option. The polygon layer may then be processed by other commands.

rule-name {
Z = INT Metal1 < n1 REGION
EXT Z > n2
}

Output Reports

L-Edit produces a summary report showing all rules that were run and all rules that were turned off, and
the rules enabled or disabled by the DRC SELECT CHECK and DRC UNSELECT CHECK options.

Summary and Classification of Commands

Commands can be classified as either layer selectors or layer constructors. Commands classified as
layer selectors select existing polygon or edge data from the appropriate input layer. Commands
classified as layer constructors create new polygon data.

Polygon Layer Selectors

The table below lists the polygon layer selector operations. These commands select polygons from an
input layer.

[Not] Area

Copy

[Not] Cut

[Not] Donut

[Not] Enclose

[Not] Enclose Rectangle

[Not] Inside

[Not] Interact

[Not] Net

[Not] Outside

L-Edit 14 User Guide Section 3 492


Chapter 22: HiPer Verify: Calibre Command Files

Perimeter

[Not] Rectangle

[Not] Touch

Vertex

[Not] With Edge

[Not] With Text

[Not] With Width

Edge Layer Selectors

The table below lists the edge layer selector operations. These commands select edge from an input
layer.

[Not] Angle

[Not] Coincident Edge

[Not] Coincident Inside


Edge

[Not] Coincident Outside


Edge

Convex Edge

Copy

Drawn Acute*

Drawn Offgrid *

Drawn Skew*

Enclosure (edge-directed
dimensional check)

External (edge-directed
dimensional check)

[Not] Inside Edge

Internal (edge-directed
dimensional check)

[Not] Length

Offgrid*

[Not] Outside Edge

Path Length

[Not] Touch Edge


[Not] Touch Inside Edge

[Not] Touch Outside Edge

L-Edit 14 User Guide Section 3 493


Chapter 22: HiPer Verify: Calibre Command Files

Layer Constructors

Operations classified as layer constructors create new polygon data. The table below lists the layer
constructor operations.

AND

[Not] Inside Cell

Density

Enclosure
(polygon-directed check)

Expand Edge

Expand Text

Extent

Extents

External (polygon-directed
check)

Flatten

Grow

Holes

Internal (polygon-directed
check)

Merge

NOT

OR

Pathchk

Rectangles

Shrink

Size

Snap

Stamp

XOR

Omitted Environment Setup Commands

The following environment setup commands are not supported as they are not required when running
DRC in the L-Edit environment.

DRC RESULTS DATABASE It is not necessary to specify an external results filename. Results are
saved in the tdb file.

L-Edit 14 User Guide Section 3 494


Chapter 22: HiPer Verify: Calibre Command Files

DRC CHECK MAP This statement controls the database output structure in Calibre. It is
not required in HiPer Verify.
DRC CHECK TEXT This statement controls what components of a rule in the command
file get copied into the Calibre results database. It is not required in
HiPer Verify.
DRC EXCLUDE FALSE This statement overrides the default Calibre behavior to suppress
NOTCH certain false errors. It is not required in HiPer Verify.
DRC MAXIMUM VERTEX A user specified limit on the number of vertices on error polygons is
not supported. Polygon fracturing on layout is supported by the
Draw > Convert > Fracture Polygons command.

DRC RESULTS DATABASE It is not necessary to specify an external results filename. Results are
saved in the tdb file.
DRC KEEP EMPTY Specifies whether rule checks containing no errors are saved to DRC
results. HiPer always saves all rule checks so one can see the rule was
checked, even when there are no errors. Checks with no errors can be
made visible or not visible in the Verification Error Navigator.
DRC SUMMARY REPORT It is not necessary to specify an external summary file name. A
summary report is always created and saved in the tdb file. It may be
opened in a text window from the Verification Error Navigator
toolbar with Actions > Open DRC Summary Report, and then saved
to disk.
LAYOUT DEPTH Checking toplevel polygons only is not supported. The entire
hierarchy is processed.
LAYOUT PATH LAYOUT PATH is not required in HiPer Verify. DRC is run on the
currently active cell in the open tdb file.
LAYOUT PRIMARY DRC is run on the currently active cell. LAYOUT PRIMARY is not
required in HiPer Verify.
LAYOUT SYSTEM In Calibre, specifies the layout file type. Not required in HiPer Verify.

The indicated options are not supported in the following commands.

AND Single layer syntax is not supported. AND layer1 [constraint]


EXTENT CELL EXTENT CELL is not supported.
[Not] With Neighbor Optional constraints.

L-Edit 14 User Guide Section 3 495


Chapter 22: HiPer Verify: Calibre Command Files

Function Overview

Functions may be grouped in the following categories.

Environment Setup
ƒ TITLE (page 622)
ƒ PRECISION (page 606)
ƒ RESOLUTION (page 612)

Operating Commands
Operating commands control high level aspects of the DRC job.

ƒ DRC UNSELECT CHECK (page 537)


ƒ DRC UNSELECT CHECK (page 537)
ƒ DRC PRINT AREA (page 533)
ƒ DRC PRINT PERIMETER (page 534)
ƒ DRC SELECT CHECK (page 535)
ƒ DRC TOLERANCE FACTOR (page 536)
ƒ DRC UNSELECT CHECK (page 537)
ƒ GROUP (page 566)
ƒ INCLUDE (page 569)
ƒ SVRF ERROR (page 619)
ƒ VERTEX (page 628)

Hierarchy Modication Commands


These commands modify cell hierarchy for all layers in the cell:

ƒ EXCLUDE CELL (page 545)


ƒ FLATTEN CELL (page 564)
ƒ FLATTEN INSIDE CELL (page 565)

These commands modify the hierarchy of specified layers, across all cells:

ƒ MERGE (page 584)


ƒ MERGE (page 584)

Geometry Flags
Geometry flags are checked on original drawn polygons and wires only. The check is performed on the
original polygons and wires on the layer, not on a merged representation of the layer. Only drawn layers
are checked, derived layers are not checked.

ƒ LAYER RESOLUTION (page 582)


ƒ FLAG NONSIMPLE (page 557)
ƒ FLAG OFFGRID (page 558)

L-Edit 14 User Guide Section 3 496


Chapter 22: HiPer Verify: Calibre Command Files

ƒ FLAG POLYGONVERTEXLIMIT (page 559)


ƒ FLAG SKEW (page 560)
ƒ FLAG WIREVERTEXLIMIT (page 561)
ƒ FLAG ZEROWIDTHWIRES (page 562)
ƒ DRAWN ACUTE (page 528)
ƒ DRAWN OFFGRID (page 529)
ƒ DRAWN SKEW (page 530)
ƒ LAYER RESOLUTION (page 582)
ƒ OFFGRID (page 597)

Drawn Layer Definitions


ƒ POLYGON (page 604)
ƒ LAYER MAP (page 581)
ƒ POLYGON (page 604)

Connect and Connectivity Commands


A NET is formed by the CONNECT command, as shown below:

LAYER layer1 49
LAYER layer2 51
LAYER connect-layer 50
CONNECT layer1 layer2 BY connect-layer

The LAYER command will read both layout and text from the specified layer; no extra command is
required to read in text. Nets may be named by placing text labels (L-Edit ports) overlapping the
polygons that form a net, thus assigning the net a name equal to the text of the label. For text labels that
are boxes or lines, the center of the text label is used when comparing overlaps with polygons.

Database Specification Commands for Net Naming

The TEXT LAYER and TEXT DEPTH commands specify the layers and the hierarchical levels from
which text labels are used for net naming, as follows:

ƒ TEXT LAYER - Only text objects on layers that are listed in the TEXT LAYER command will be
used for net naming.
ƒ TEXT DEPTH - The TEXT DEPTH command specifies the depth in the hierarchy for using text
objects for application in net naming. TEXT DEPTH ALL uses text objects from throughout the
hierarchy, TEXT DEPTH PRIMARY uses only text objects from the top-level cell, and TEXT
DEPTH n1 uses text objects n1 levels below the top-level cell. TEXT DEPTH PRIMARY is the
default. Text objects that come from lower levels of the hierarchy are flattened and transformed to
the top-level coordinate space. These text objects then behave as if they originated at the top level.

Priority Rules for Attachment of Net Names

The process of assigning label names to nets proceeds in the following order:

Explicit Attachment - ATTACH

If the rule file contains the command

L-Edit 14 User Guide Section 3 497


Chapter 22: HiPer Verify: Calibre Command Files

ATTACH text-layer geometry-layer

connectivity extraction will assign the name of a text object on layer text-layer to a net containing a
polygon on layer geometry-layer if the polygon on layer geometry-layer completely covers the text
object. The rule file can contain more than one Attach operation for the text layer layer, such as:

ATTACH text-layer geometry-layer1


ATTACH text-layer geometry-layer2

ATTACH text-layer geometry-layerN

In this case, the connectivity extractor looks for polygons on any one of the target layers
geometry-layer1, …, geometry-layerN that intersect the label location. If exactly one polygon is found,
then the label name is assigned to the net that contains that polygon. If more than one polygon is found,
one is chosen arbitrarily and a warning is issued.

Implicit Attachment - Label and polygon on the same layer

The connectivity extractor will assign the name of a text object on a layer to a net containing a polygon
on the same layer if the polygon completely covers the text object.

Attachment by LABEL ORDER

After net naming by explicit Attach commands or Implicit Attach has taken place, the order of layers
specified by the LABEL ORDER command is used to resolve any additional net naming attachments.
The connectivity extractor will assign the name of a text object on any layers listed in the TEXT
LAYER command that have not already been explicitly or implicitly attached, to the first overlapping
polygon in the LABEL ORDER list.

If no Label Order operation is present in the rule file, or if no polygon on any of the Label Order layers
intersects the label location, then the label is ignored and a warning is issued (Unattached Label
Warning).

ƒ DRC INCREMENTAL CONNECT (page 531)


ƒ DRC INCREMENTAL CONNECT (page 531)
ƒ DISCONNECT (page 523)
ƒ DRC INCREMENTAL CONNECT (page 531)
ƒ LABEL ORDER (page 579)
ƒ NET (page 585)
ƒ SCONNECT (page 613)
ƒ TEXT DEPTH (page 620)
ƒ TEXT DEPTH (page 620)
ƒ TEXT LAYER (page 621)
ƒ VIRTUAL CONNECT NAME (page 630)
ƒ VIRTUAL CONNECT COLON (page 629)
ƒ VIRTUAL CONNECT SEMICOLON AS COLON (page 631)

L-Edit 14 User Guide Section 3 498


Chapter 22: HiPer Verify: Calibre Command Files

Antenna Rules
Antenna checks are used to limit the damage of the thin gate oxide during the manufacturing process
due to charge accumulation on the interconnect layers (metal, polysilicon) during certain fabrication
steps like Plasma etching.

The term antenna refers to large metal interconnect, connected to a gate that is not electrically
connected to silicon or grounded, during the processing steps of the wafer. If the connection to silicon
does not exist, charges may build up on the interconnect to the point that rapid discharge takes place and
permanent physical damage results to thin transistor gate oxide. This rapid and destructive phenomenon
is known as the "antenna effect" or "Plasma Induced Damage".

The antenna ratio is defined as the ratio between the physical area of the conductors making up the
antenna to the total gate oxide area to which the antenna is electrically connected. The area of the
conductor includes both the top of the conductor as well as the side walls, although one of these might
be ignored in some checks.

ƒ NET AREA (page 586)


ƒ NET AREA RATIO (page 587)
ƒ NET AREA RATIO PRINT (page 595)
ƒ ORNET (page 599)
ƒ POLYNET (page 605)

Polygon Boolean Operations


ƒ AND (page 503)
ƒ OR (page 598)
ƒ OR (page 598)
ƒ XOR (page 635)

Utility Layer Generation Operations


ƒ EXTENT (page 554)
ƒ EXTENT (page 554)
ƒ EXTENTS (page 555)
ƒ RECTANGLES (page 611)
ƒ RECTANGLES (page 611)
ƒ RECTANGLES (page 611)
ƒ SNAP (page 617)

Polygon Size Operations


ƒ HOLES (page 568)
ƒ SHRINK (page 615)
ƒ SIZE (page 616)
ƒ WITH WIDTH (page 634)

Two-Layer Polygon Selection Operations


These commands select polygons from an input layer based on relationships to polygons on another
input layer.

L-Edit 14 User Guide Section 3 499


Chapter 22: HiPer Verify: Calibre Command Files

ƒ ENCLOSE (page 543)


ƒ ENCLOSE (page 543)
ƒ INSIDE (page 570)
ƒ INTERACT (page 578)
ƒ OUTSIDE (page 600)
ƒ VERTEX (page 628)
ƒ RECTANGLE ENCLOSURE (page 608)

Single-Layer Polygon Selection Operations


These commands select polygons from a single input layer, based on the properties of the polygons on
that layer.

ƒ DONUT (page 527)


ƒ ENCLOSE RECTANGLE (page 544)
ƒ RECTANGLE (page 607)
ƒ RECTANGLE (page 607)
ƒ VERTEX (page 628)
ƒ VERTEX (page 628)

Polygon Area Operations


ƒ AREA (page 505)
ƒ DENSITY (page 515)

Polygon Edge Operations


ƒ WITH EDGE (page 632)
ƒ EXPAND EDGE (page 546)

Edge, Length and Angle Operations


ƒ ANGLE (page 504)
ƒ LENGTH (page 583)
ƒ LENGTH (page 583)
ƒ PATH LENGTH (page 602)

Edge Selection Operations


ƒ TOUCH EDGE (page 624)
ƒ COINCIDENT INSIDE EDGE (page 508)
ƒ COINCIDENT OUTSIDE EDGE (page 509)
ƒ INSIDE EDGE (page 572)
ƒ TOUCH EDGE (page 624)
ƒ TOUCH EDGE (page 624)
ƒ TOUCH INSIDE EDGE (page 625)
ƒ TOUCH OUTSIDE EDGE (page 626)

L-Edit 14 User Guide Section 3 500


Chapter 22: HiPer Verify: Calibre Command Files

Dimensional Check Operations


Dimensional edge operations (ENC, EXT, INT) measure the distance between pairs of edges of
polygons on different or the same layer, and output results if the specified distance constraint is met. To
determine the output of the measurement of the distance between a pair of edges, a region is constructed
around each edge that extends out from the edge a distance specified by the constraint amount, and with
a shape specified by the measurement metric. Portions of the opposing edge that intersect the region of
a given edge are then output.

The region construction is illustrated below for the three available measurement metrics. The region
construction is shown for one of the edges of layer1, and corresponding output from edges on layer2 is
shown. Region construction is similarly performed on layer2, and output edges from layer1 is
determined. Note that by default, perpendicular edges are not measured.

Euclidean — The Euclidean metric forms a region with quarter-circle boundaries at that extend past the
corners of the selected edges. This is the default metric.

rule_euc {EXT layer1 layer2 < 2}

Euclidean 2

layer1 layer2 Output

Square — The Square metric forms a region with right-angle boundaries that extend past the corners of
the selected edges.

rule_sq { EXT layer1 layer2 < 2 SQUARE }.

2
Square 2

layer1 layer2 Output

Opposite — The opposite metric forms a region with right-angle angle boundaries that do not extend
past the corners of the selected edges.

L-Edit 14 User Guide Section 3 501


Chapter 22: HiPer Verify: Calibre Command Files

rule_opp { EXT layer1 layer2 < 2 OPPOSITE}.

Opposite 2

layer1 layer2 Output

ƒ ENC (page 538)


ƒ EXT (page 549)
ƒ INT (page 573)

Text Based Operations


ƒ EXPAND TEXT (page 548)
ƒ WITH TEXT (page 633)

Netlist Extraction Operations


ƒ DEVICE (page 518)

Functions

L-Edit 14 User Guide Section 3 502


Chapter 22: HiPer Verify: Calibre Command Files

AND

Polygon Boolean Operations


[polygon-layer =] layer1 AND layer2
[polygon-layer =] AND layer1 layer2

Description

Calculates the intersection of layer1 and layer2.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer

L-Edit 14 User Guide Section 3 503


Chapter 22: HiPer Verify: Calibre Command Files

ANGLE

Edge, Length and Angle Operations


[edge-layer =] [NOT] ANGLE layer1 constraint

Description

Produces all layer1 edges whose acute angle magnitude with the x-axis conforms to the constraint. The
NOT option produces all layer1 edges not produced by the corresponding ANGLE operation.

Parameters

layer1 A drawn or derived polygon layer.


constraint Constraint is any range defined by “Constraints” (page 491) where
the constraint's values represent an angle range in degrees. The
constraint values must be greater than or equal to 0 but less than or
equal to 90.

L-Edit 14 User Guide Section 3 504


Chapter 22: HiPer Verify: Calibre Command Files

AREA

Polygon Area Operations


[polygon-layer =] [NOT] AREA layer1 constraint

Description

Produces layer1 polygons whose area conforms to the constraint. The NOT option produces layer1
polygons not produced by the corresponding AREA operation.

Parameters

layer1 A drawn or derived polygon layer


constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be a non-negative real number.

L-Edit 14 User Guide Section 3 505


Chapter 22: HiPer Verify: Calibre Command Files

ATTACH

Connect and Connectivity-Related Commands


ATTACH layer1 layer2

Description

The attach operation assigns names to extracted nets using text objects (ports) placed on the layout. It
attaches the name of a text object on layer1 to a net containing a polygon on layer2 if the polygon
completely covers the text object. The same layer1 can be used in multiple ATTACH operations with
different layer2 names.

Parameters

layer1 A drawn layer name containing net labels.


layer2 A drawn layer name or layer set or a derived polygon layer. Must
appear as an input layer to a Connect or Sconnect operation.

L-Edit 14 User Guide Section 3 506


Chapter 22: HiPer Verify: Calibre Command Files

COINCIDENT EDGE

Edge Selection Operations


[edge-layer =] [NOT] COINcident EDGE layer1 layer2
[edge-layer =] layer1 [NOT] COINcident EDGE layer2

Description

Produces all layer1 edges or edge segments coincident with layer2 edges. The NOT option produces all
layer1 edges not produced by the corresponding COINCIDENT EDGE operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer or a derived edge layer.

L-Edit 14 User Guide Section 3 507


Chapter 22: HiPer Verify: Calibre Command Files

COINCIDENT INSIDE EDGE

[edge-layer =] [NOT] COINcident INside EDGE layer1 layer2


[edge-layer =] layer1 [NOT] COINcident INside EDGE layer2

Description

Produces all layer1 edges or edge segments coincident from the inside with layer2 edges. An edge
segment on layer1 is coincident from the inside with an edge segment on layer2 if the two edges are
coincident and interior of the two polygons corresponding to the two edges are overlapping in the
region adjacent to the two edges. The NOT option produces all layer1 edges not produced by the
corresponding COINCIDENT INSIDE EDGE operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer or a derived edge layer.

L-Edit 14 User Guide Section 3 508


Chapter 22: HiPer Verify: Calibre Command Files

COINCIDENT OUTSIDE EDGE

[edge-layer =] [NOT] COINcident OUTside EDGE layer1 layer2


[edge-layer =] layer1 [NOT] COINcident OUTside EDGE layer2

Description

Produces all layer1 edges or edge segments coincident from the outside with layer2 edges. An edge
segment on layer1 is coincident from the outside with an edge segment on layer2 if the two edges are
coincident and the polygon on layer1 is outside the polygons on layer2 in the region adjacent to the two
edges. The NOT option produces all layer1 edges not produced by the corresponding COINCIDENT
OUTSIDE EDGE operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer or a derived edge layer.

L-Edit 14 User Guide Section 3 509


Chapter 22: HiPer Verify: Calibre Command Files

CONNECT

Syntax 1:
CONNECT layer1 […layerN]

Syntax 2:
CONNECT layer1 layer2 […layerN] BY layerC

Description

Syntax 1 forms a connection between abutting or overlapping objects on the input layers. Connected
objects are part of the same electrical node. Syntax 2 specifies electrical connections between layer2,
layer1, and layerC objects, where layer2 (through layerN) objects have positive area overlap with both
layer1 and layerC objects.

Parameters

layer1[… layerN] A drawn or derived layer, followed optionally by other drawn or


derived layers.
layer2[… layerN] A drawn or derived layer, followed optionally by other drawn or
derived layers.
BY layerC A required keyword for Syntax 2, followed by a drawn or derived
layer. This specifies a contact layer.

Description Details

The layers in the connect operation without the BY keyword may appear in any order without changing
the meaning of the operation.

A connect operation with the BY keyword specifies a connection between layer1, layerC, and one of the
layer2 through layerN objects. The connection is made to the first of the layer2 through layerN objects,
that has a positive area overlap with both layer1 and layerC objects.

L-Edit 14 User Guide Section 3 510


Chapter 22: HiPer Verify: Calibre Command Files

CONVEX EDGE

Simple syntax:

[edge-layer =] CONVEX EDGE layer1 endpoint_constraint [WITH LENGTH


edge_length_constraint]

Detailed syntax:

[edge-layer =] CONVEX EDGE layer1


ANGLE1 angle_constraint [LENGTH1 abut_length_constraint]
ANGLE2 angle_constraint [LENGTH2 abut_length_constraint]
[WITH LENGTH edge_length_constraint]

Description

Produces an edge layer by selecting edges depending on the number of convex endpoints. Edge length,
angle of abutting edges, and length of abutting edges may also be considered. This operation is not
limited to selection of edges based purely on convexity. In most cases the convexity (or concavity) of
the endpoints of edges is a by-product of the properties you desire. This operation has two syntaxes,
simple or detailed. Both the simple and detailed specifications can include the WITH LENGTH
secondary keyword and the edge_length_constraint. The differences between simple and detailed are
discussed in the following sections.

Simple Syntax Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.

Detailed Endpoint Specification


Edge selection may also be specified by the angles formed by adjacent edges at each endpoint of a given
edge. ANGLE1 denotes one endpoint and ANGLE2 denotes the other endpoint. LENGTH1 and
LENGTH2 additionally specify edge selection based on the length of the adjacent edges at the
endpoints of a given edge. Length parameters are associated with ANGLE1 and ANGLE2, respectively.

Angle constraints which are < 180 degrees (measured internal to the polygon) are convex. Angle
constraints which are > 180 degrees are concave. If you do not specify LENGTH1 and LENGTH2 they
default to the constraint >=0.

Detailed endpoint specification selects edges with the following algorithm.

ƒ Designate the endpoints of the edge as A and B.


ƒ The edge is selected if the status at endpoint A satisfies the ANGLE1 and LENGTH1 constraints,
and the status at endpoint B satisfies the ANGLE2 and LENGTH2 constraints.
ƒ If the edge is not selected from the previous test, then:
ƒ The edge is selected if the status at endpoint B satisfies the ANGLE1 and LENGTH1 constraints
and the status at endpoint A satisfies the ANGLE2 and LENGTH2 constraints.

The tool does not select the edge if it does not meet the above requirements.

L-Edit 14 User Guide Section 3 511


Chapter 22: HiPer Verify: Calibre Command Files

Edge Layer Input


The process of edge selection needs to be refined for a derived edge input layer. This is due to the
possibility that abutting edges may not be present. For simple endpoint specification, the number of
convex endpoints is counted as before. However, if an abutting edge is absent, the endpoint is not
counted. This edge is then selected if the number of convex endpoints passes the associated constraint.
For detailed endpoint specification, the angle at an endpoint where there is no abutting edge is defined
as 0 degrees. This value can be used since edges cannot meet at an angle of 0 degrees in a layer
representing merged data. The length of the abutting edge (which is missing) to be is defined to be 0
user units. For example, if the ANGLE1 constraint includes 0, an endpoint with no abutting edge will
satisfy the ANGLE1 constraint.

Examples

The following example selects all metal1 edges which have both endpoints at
a convex corner:
CONVEX EDGE metal1 == 2
The following example selects all metal edges which have one endpoint at a
convex corner and length less than 3 user units:
CONVEX EDGE metal == 1 WITH LENGTH < 3

L-Edit 14 User Guide Section 3 512


Chapter 22: HiPer Verify: Calibre Command Files

COPY

Utility Layer Generation Operations


[result-layer =] COPY [layer1]

Description

Copies a polygon or edge layer to a new layer with a different name. Can also be used to output a layer
as DRC violations.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.

Examples

The COPY command can be used to output a derived layer as errors:

GATE = POLY AND ACTIVE


Gate.Out { // Rule to output GATE derived layer
COPY GATE
}

The COPY command can be used to output intermediate layers in a Rule Check
statement as errors for visualization purposes.

LongThinMetalTraces { @ Flag Metal1 traces narrower than 4.0 um


@ and longer than 100.0 um
A = INT [Metal1] < 4.0
COPY A // COPY command outputs all A edges as errors
LENGTH A > 100.0 // Errors will also be output from here.
// Comment LENGTH out if desired.

L-Edit 14 User Guide Section 3 513


Chapter 22: HiPer Verify: Calibre Command Files

CUT

Two-Layer Polygon Selection Operations


[polygon-layer =] layer1 [NOT] CUT layer2 [constraint [BY NET]]
[polygon-layer =] [NOT] CUT layer1 layer2 [constraint [BY NET]]

Description

Produces layer1 polygons that have portions both inside and outside layer2. The NOT option produces
those layer1 polygons not produced by the corresponding CUT operation. The input layers will be
merged if the constraint option is used, and will run slower than the CUT operation with no constraint.

(This option is not yet supported.) If BY NET is specified, the constraint applies to the number of layer2
polygons on distinct nets that CUT layer1.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
constraint Specifies the number of layer2 polygons that layer1 must have
portions both inside and outside of, in order to be selected by the CUT
operation. Constraint is any range defined by “Constraints” (page
491) where the constraints values must be positive integers.
BY NET When the BY NET option is used, then a layer1 polygon is selected
when the specified number of layer2 polygons on distinct nets cut the
layer1 polygon. Layer2 must have connectivity.

Examples

layer1 layer2 layer1 CUT layer2

L-Edit 14 User Guide Section 3 514


Chapter 22: HiPer Verify: Calibre Command Files

DENSITY

[polygon-layer =] DENSITY layer1 [...layerN] [[density_expression]]


constraint [INSIDE OF { {x1 y1 x2 y2} | EXTENT | {LAYER layer2} } ]
[WINDOW {w | wx wy} ] [STEP {s | sx sy} ] [TRUNCATE | BACKUP|IGNORE|WRAP]
[CENTERS value] [{PRINT | PRINT ONLY} file_name]

Description

Produces rectangular boundaries within which the ratio of the area of layer1 to the area of the rectangle
meets the constraint. The boundaries within which density is calculated may be a single rectangle, or
using the WINDOW/STEP options, a sequence of rectangular windows moving across the chip can be
considered. The INSIDE OF LAYER option modifies the boundary within which density is calculated
from a rectangle to being the boundaries of the polygons on the specified layer.

Parameters

layer1 [...layerN] A drawn or derived polygon layer


[density_expression] An optional expression in brackets ( [ ] ) that allows customizable
control over the density ratio computations. The expression may
contain numbers, numeric variables, binary operators ( *, / , +, -),
unary operators (+, -, !, ~), and AREA functions of the input layers of
the form:
AREA (input_layer)

The expression must not result in negative values.


constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be a non-negative real number. Specifies
the ratio of the area of layer1 to the area of the specified boundary that
must exist for the boundary polygon to be produced.
INSIDE OF Defines a rectangular boundary within which a moving window will
travel. If this option is not specified, then the boundary is equal to the
database extent.
INSIDE OF X1 Y1 X2 Y2 Specifies a rectangular boundary. Negative numbers must be in
parenthesis.
INSIDE OF EXTENT Specifies that the boundary is the Extent of the input layer.
INSIDE OF LAYER layer2 Specifies that the density is calculated within the boundary of each
polygon on layer2.
WINDOW Specifies a window within which the density check is computed.
WINDOW w Specifies a square window with dimension w.
WINDOW wx wy Specifies a rectangular window with dimension wx by wy.
STEP s Specifies that window moves up and to the right by a distance s.
STEP sx sy Specifies that window moves to the right by sx and up by sy.

L-Edit 14 User Guide Section 3 515


Chapter 22: HiPer Verify: Calibre Command Files

TRUNCATE Specifies that if the rightmost or topmost windows do not exactly end
at the boundary of the database (or layer), then those windows are
truncated to fit the database (or layer), and the density calculation is
done on the reduced window size. This is the default behavior.
BACKUP Specifies that if the rightmost or topmost windows do not exactly end
at the boundary of the database (or layer), then those windows are
moved such that the rightmost or topmost boundary of the window
coincides with the boundary of the database (or layer), and the density
calculation is done on a full window size.
IGNORE Specifies that if a window overlaps the right-hand edge or the top
edge of the boundary box, the window is ignored and no data for that
window location is output.
WRAP Specifies that if if a window overlaps the right-hand edge or the top
edge of the boundary box, the boundary box and its data are
duplicated and added to the right-hand side or top side of the original
bounding box. The density measurement is then taken in the window
that intersects the duplicated boundaries.
CENTERS value Specifies that output should be squares of dimension value, located at
the center of each window that would be normally be output.
{PRINT/PRINT ONLY} PRINT and PRINT ONLY writes the coordinates and corresponding
file_name density of output rectangles to the specified file. The PRINT option
prints to the file and outputs to the resulting polygon layer or error
layer. The PRINT ONLY option prints to the filename but does not
output to the result layer or error layer.

A path that includes the colon character must be in quotes. If a full


path is not provided, then the path is relative to the tdb file.

Description Details

Density is computed as a ratio of two areas:

Density = A1 / A2

If the WINDOW option is not present then:

If no INSIDE OF options are present, then A1 is the area of the input layer, layer1, and A2 is the area of
the database extent.

If INSIDE OF EXTENT is specified, then A1 is the area of the input layer, layer1, and A2 is the area of
the extent of layer1.

If INSIDE OF x1 y1 x2 y2 is present, then let R be the rectangle formed by x1 y1 x2 y2. A1 is the area
of (layer1 AND R ) and A2 is the area of R.

If INSIDE OF LAYER layer2 is specified, then for each polygon P on layer2, the density is calculated
using A1 = area of (layer1 AND P), and A2 = area of P, and the boundary of P is output if the constraint
is met.

L-Edit 14 User Guide Section 3 516


Chapter 22: HiPer Verify: Calibre Command Files

If the WINDOW option is present:

If no INSIDE OF options are present, then a rectangle, W, specified by the WINDOW dimensions is
positioned starting at the lower left of the database extent, and subsequently positioned by moving by
the STEP amount in the x- and y- directions. For each window position, A1 is calculated as the area of
(layer1 AND W) and A2 is the area of W.

If INSIDE OF EXTENT is specified, then a rectangle, W, specified by the WINDOW dimensions is


positioned starting at the lower left of layer1 extent, and subsequently positioned by moving by the
STEP amount in the x- and y- directions. For each window position, A1 is calculated as the area of
(layer1 AND W) and A2 is the area of W.

If INSIDE OF x1 y1 x2 y2 is present, then let R be the rectangle formed by x1 y1 x2 y2. A rectangle, W,


specified by the WINDOW dimensions is positioned starting at the lower left of R, and subsequently
positioned by moving by the STEP amount in the x- and y- directions. A1 is the area of (layer1 AND R
AND W ) and A2 is the area of the rectangle formed R AND W.

IF INSIDE OF LAYER layer2 is specified then a rectangle, W, specified by the WINDOW dimensions
is positioned starting at the lower left of the extent of layer2, and subsequently positioned by moving by
the STEP amount in the x- and y- directions. For each window position, A1 is calculated as the area of
(layer1 AND layer2 AND W) and A2 is the area of W.

Examples

1.Density of POLY over the database extent must exceed 15%.

POLY_Density { @ Min. POLY area coverage 15%


DENSITY POLY < 0.15
}

2. Density of Metal1 in every 200um x200um window must exceed 25%. Windows are stepped at
100um interval, and rightmost and topmost windows are backed up. Print violating windows to a log
file.

METAL1_Density { @ METAL1 area coverage must be >= 25% over 200 um x 200 um
DENSITY METAL1 < 0.25 WINDOW 200 STEP 100 BACKUP PRINT METAL1_density.log
}

3. Density of METAL1 plus METAL2 must be greater than 40%

METAL_Density { @ METAL1 plus METAL2 area coverage must be >= 40% over
200umx200um
DENSITY METAL1 METAL1 < 0.4 WINDOW 200 STEP 100 BACKUP PRINT
METAL_density.log
[ (AREA(METAL1) + AREA(METAL2))/AREA() ]
}

L-Edit 14 User Guide Section 3 517


Chapter 22: HiPer Verify: Calibre Command Files

DEVICE

Netlist Extraction Operations


DEVice {element_name [(model_name)]} device_layer {pin_layer [(pin_name)] }
[<auxiliary_layer>][BY NET | BY SHAPE][property_specification][NETLIST MODEL
netlist_model_name] [NETLIST ELEMENT netlist_element_name]

Description
The DEVice statement defines devices for netlist extraction, defines how devices are to be recognized,
names pins, and defines properties of devices and how they are computed.

Parameters

element_name The type of the device, which may be either built-in or user-defined.
Predefined element names specify built-in (or reserved) devices. All
other devices are user-defined (or generic).
model_name An optional string, enclosed in parentheses, that specifies the model
for the device. It is also known as the component subtype of the
device. If specified, it must immediately follow the element_name
parameter.
device_layer A required layer containing the device recognition shapes. It is also
called the seed layer. The device layer is the first layer you specify
within the operation given the recognition precedence of the
element_name as discussed previously. Device recognition is
centered around each device (or seed) shape on this layer. You can
specify the device_layer as one of the pin_layers, but not more than
once per statement. Connectivity need not be established on these
layers.

L-Edit 14 User Guide Section 3 518


Chapter 22: HiPer Verify: Calibre Command Files

pin_layer A required layer on which pin shapes for the device are found. You
can specify multiple pin_layer names. These layers must have their
connectivity established by connectivity extraction operations. A
layer has connectivity when one of the following conditions is
satisfied:
ƒ A Connect operation contains the layer.
ƒ A net-preserving operation derives the layer from a
separate layer carrying a net number
ƒ A Stamp operation transfers net numbers to the layer.
Device recognition logic, not the connectivity extractor, associates
pin shapes to device shapes. Therefore, you do not need to connect
the pin layers to the device layer by Connect statements. To do so
would short the pins together through the device shape. Pins using the
same layer in a Device statement are interchangeable and belong to
the same pin-swap group.

Note that pin shapes must touch or overlap device recognition shapes
in order for a device to be recognized. Touching at a corner point does
not satisfy this condition. Device shapes that do not touch the correct
pin layers are considered bad devices, and are listed in the
Verification Error Navigator.

If the element_name in the statement is a reserved name, then you


must specify one layer for each pin. If a device has more than one pin
on a given layer, you must repeat that layer as a parameter for each
associated pin. The same device, auxiliary, and pin layers can appear
in multiple Device statements. However, to prevent ambiguity, the
following restriction is enforced: if two statements have the same
device_layer, then it must not be possible to reorder the list of
auxiliary and pin layers in one statement so that it exactly matches the
list of auxiliary and pin layers in the other statement. In making the
comparison, the device_layer should be ignored in any list where it
appears as a pin_layer. For example:

device foo A B(p) A(q)


device bar A B(p)

causes a compilation error since pin A in foo is ignored. This results


in a device ambiguity the compiler does not allow.

Note: If the device pin number does not match the default pin
number of that device type, then the device should be extracted
as a subckt instead of the defined device type.

For example, the following command defines device type R (resistor)


and 3 pin layers (pd3bbTerm_S, pd3bbTerm_S, ntubNotRes).

DEVICE R("pprnwbb") pd3bbResBody pd3bbTerm_S


pd3bbTerm_S ntubNotRes

We know the resistor should only have two pins. So the pin layer
number does not match the default resistor device pin number. In this
case, this device should be extracted as “X” device (subckt) instead of
“R” device.

L-Edit 14 User Guide Section 3 519


Chapter 22: HiPer Verify: Calibre Command Files

(pin_name) An optional name, enclosed in parentheses, that explicitly names each


pin in the definition of a device. The parameter pair pin_layer
(pin_name) can be specified any number of times in one statement.

If the element_name in the statement is built-in for recognition, then


default pin_names are assigned. You can specify the device_layer as
one of the pin layers, but not more than once per statement. Pin names
do not need to be explicitly provided, but if present, they must match
the default names that would have been assigned if you want to use the
built-in algorithms for property calculation. Providing pin names for
built-in-for-recognition elements makes the rule file more readable
and is recommended.

If the element has extra pins in addition to the default pins, then a
pin_name parameter must be provided following each extra pin_layer
in the Device statement. The order of the extra pin layers is unimpor-
tant in the Device statement. For the extra pins, you can create any pin
names you wish, except reserved keywords must be enclosed in double
quotation marks.

If the element_name in the statement is user-defined, then a pin_name


parameter must be provided following each pin_layer in the Device
operation. The pin_layer order is unimportant in the Device operation
in this case. However, the order of pin layers can determine the order
in which pins are listed in an extracted netlist. You may use any pin
names as desired, except if you use a reserved keyword for a pin_name
then you must enclose the pin_name in double quotes.

The same pin_name parameter cannot be used twice in the same De-
vice statement, but can be reused in other statements. If the schematic
for the device uses certain pin names, then the same names should be
used in the Device operation so that LVS applications can match cor-
rect pins.

<auxiliary_layer> An optional layer name, enclosed in angle brackets ( < > ), that identi-
[<auxiliary_layer> ...] fies non-pin layers used to classify device instances and used in prop-
erty computation. You can specify <auxiliary_layer> any number of
times in one statement. They can appear before, after, or intermixed
with the pin layers.

An auxiliary layer is a layer containing shapes that are neither seed nor
pin shapes. You can use auxiliary layers to interact with other shapes
of the device for property alteration, or to classify the device. For each
auxiliary layer present in a Device operation, at least one shape from
that layer must touch or overlap the seed shape before a device instance
can be extracted. You cannot limit the number of overlapped shapes,
although a property computation can determine the number of shapes
found to touch or overlap by using the COUNT( ) function of the
built-in property computation language.

Auxiliary layers do not need to have connectivity. Any node informa-


tion on auxiliary layers is unavailable to device extraction. An auxilia-
ry layer cannot appear twice in the same Device statement. You cannot
use a layer as both an <auxiliary_layer> and a pin_layer in the same
Device operation, nor in any other Device operation using the same
device_layer.

L-Edit 14 User Guide Section 3 520


Chapter 22: HiPer Verify: Calibre Command Files

BY NET | BY SHAPE An optional keyword set that selects the pin recognition method for the
device. Two device recognition operations in the rule file with the
same device_layer must have the same pin recognition method. The
possible choices are:

BY NET — Treats pin shapes on the same layer and connected to the
same net as a single pin. This is the default behavior if you do not in-
clude a keyword from this set. The pin fill-in algorithm is used to sup-
ply missing pins, where applicable.

BY SHAPE — Treats pin shapes as separate pins even when they are
on the same layer and are connected to the same net. Also, no fill-in is
attempted to supply missing pins. Specifying BY SHAPE can increase
runtime significantly.

[property_specification] An optional string, enclosed in square brackets ([ ]), that specifies


which properties are to be computed for device instances and how they
are computed.

A property specification can take one of two forms: either a list of


floating-point numbers, or a short program written in a property com-
putation language. The list of numbers form is only applicable to cer-
tain reserved element names.
The following is an example of each form of property specification:
DEVice R resistor_layer metal_1 metal_2 [1.1]
// resistivity is 1.1 resistance units per square
// internal default calculation is used to find
// resistance

DEVice R layer metal_1 metal_2


[
property R
R = .5*(AREA(layer)-AREA_COMMON(layer, metal_1)-
AREA_COMMON(layer, metal_2))
]
/* R is defined as the resistance of the device and
calculated as shown */

If you provide a property specification algorithm, you take on respon-


sibility for calculating all properties of the device. The device is then
considered user-defined, even if it has a reserved element_name.

[NETLIST MODEL An optional keyword set that specifies to use netlist_model_name


netlist_model_name] when netlisting element model names in SPICE, otherwise, the
(model_name) parameter is used. These are only used for netlisting
and not as component subtypes during LVS. For example:

DEVICE mn ngate poly(g) ndiff(s) ndiff(d) psub(b)


NETLIST MODEL nmos

causes the device to appear in the netlist as a model named nmos.

L-Edit 14 User Guide Section 3 521


Chapter 22: HiPer Verify: Calibre Command Files

[NETLIST ELEMENT This optional keyword set overrides the default SPICE element name
netlist_element_name] prefixes during netlisting. The default names are: C, D, J, M, Q, R,
and X (X is the netlist name for user-defined devices). NETLIST
ELEMENT is not used by LVS for circuit comparison and is not used
for extracted netlists. In the examples below, LDD devices are
netlisted as M devices, and L devices are netlisted as y devices:

DEVICE LDD gate sd(D) poly(G) sd(S) bulk (B) NETLIST


ELEMENT “m”

DEVICE L seed contact(POS) contact(NEG) NETLIST


ELEMENT “y”

In addition, a character can be specified to separate the instance name


from the device ID number. In the example below, X devices are
netlisted as x$n where n is the device ID number:
DEVICE X seed a(A) b(B) NETLIST ELEMENT “x$”

This example causes the device to appear in the netlist as the type
netlist_element_name.

L-Edit 14 User Guide Section 3 522


Chapter 22: HiPer Verify: Calibre Command Files

DISCONNECT

DISCONNECT

Parameters

There are no parameters for this statement.

Description

Allows the total deletion of an existing connectivity model in an Incremental Connect sequence.
(Incremental Connect sequences occur when Connect operations are performed incrementally due to the
DRC Incremental Connect YES specification statement in the rule file.) You can specify this statement
any number of times.

See Also

“NET” (page 545), “CONNECT” (page 541), “SCONNECT” (page 546) and “DRC INCREMENTAL
CONNECT” (page 543).

L-Edit 14 User Guide Section 3 523


Chapter 22: HiPer Verify: Calibre Command Files

DMACRO and CMACRO

Operating Commands

Description

Macros are functional templates, similar to the macros of the C and C++ languages, that can be called
multiple times in a rule file.

Defining Macros—DMACRO

A macro definition consists of the keyword DMACRO (define macro), a name, zero or more arguments,
followed by "{" bracketing a sequence of zero or more verification statements or operations, closed by
"}".

DMACRO names must be unique, each argument must be a name, and an argument may not be
duplicated in the same DMACRO argument list.

Ordinary nesting rules for left and right braces prohibit nested DMACRO definitions.

Invoking Macros—CMACRO

A macro is invoked by the keyword CMACRO (call macro), followed by a macro name and a list of
zero or more arguments. Each argument may be either a name or a numeric constant. The name must
match that of some DMACRO definition, and a sufficient number of arguments must be present after
the CMACRO name. The DMACRO definition between the braces is placed in the CMACRO call, with
argument substitution.

When a DMACRO is instantiated in a CMACRO, the layer definition names defined in the DMACRO
are locally-scoped You do this by generating a name that is unique with in the rule file for each layer
definition in the DMACRO construct when the DMACRO is instantiated. References to layer definition
names in the DMACRO are also substituted appropriately, as shown in the shown width_checks
example.

A DMACRO definition may itself contain nested CMACROs. However, recursion is not allowed, so no
CMACRO can call a DMACRO that contains a call to that same CMACRO.

Rule Files

You can use macros to derive layers; however, a DMACRO definition used to derive layers, either
locally or globally, may not have any intermediate derived layers. For example, this is allowed:

DMACRO ex1 layer constraint {


(size layer BY constraint UNDEROVER) and layer
}
x = CMACRO ex1 metal1 .01 // global
rule_1 {
x = CMACRO ex1 metal1 .01 // local
copy x
}

Notice that DMACRO ex1 has no intermediate derived layers in it, so deriving x, as shown, will work in
either local or global scope. However, the following example demonstrates a problematic syntax:

DMACRO ex2 layer1 layer2 constraint{

L-Edit 14 User Guide Section 3 524


Chapter 22: HiPer Verify: Calibre Command Files

int_layer = layer1 or layer2


//intermediate derived layer
size int_layer BY constraint UNDEROVER
}
x = CMACRO ex2 in1 in2 .01
// Bad. intermediate layer exists in ex2

Notice DMACRO ex2 has an intermediate derived layer in it. This means ex2 should not be used in a
layer derivation, because the scoping of intermediate derived layers in a DMACRO cannot generally be
used to derive other layers.

Any of the rule file comment characters may be used in a macro definition; however, user comments
will not appear in the DRC results database. User comments should be placed in the rule check that calls
the DMACRO.

Examples

PRECISION 1000
RESOLUTION 100

LAYER Poly 46
LAYER Active 43
LAYER Metal1 49
LAYER Metal2 51
LAYER EmptyLayer 100

// Simple Macro
DMACRO WideLayout layer value {
(SIZE layer BY value UNDEROVER) and layer
}

WidePoly {
CMACRO WideLayout Poly 1.5
}

// Local scoping
// Example showing that layer definitions are locally scoped.
// Layers A and B are scoped locally within the macro
// so there is no confusion between the two CMACRO calls
// in the same rulecheck.

DMACRO WidthCheck layer size_val wid_val {


A = SIZE layer BY -size_val
B = SIZE A BY size_val
INT B < wid_val
}

widthChecks {
CMACRO WidthCheck Poly 1.0 5.0
CMACRO WidthCheck Metal1 1.0 5.5
}

// Nested Macros
DMACRO NarrowLayer layer size_val {
INT layer <= size_val
}

DMACRO NarrowLayout layer1 layer2 size_value {


CMACRO NarrowLayer layer1 size_value
CMACRO NarrowLayer layer2 size_value

L-Edit 14 User Guide Section 3 525


Chapter 22: HiPer Verify: Calibre Command Files

Narrows {
CMACRO NarrowLayout Metal1 Poly 1.0
}

L-Edit 14 User Guide Section 3 526


Chapter 22: HiPer Verify: Calibre Command Files

DONUT

Single-Layer Polygon Selection Operations


[polygon-layer =] [NOT] DONUT layer1 [constraint]

Description

Produces all layer1 polygons that have a hole or holes. The NOT option produces those polygons not
produced by the corresponding DONUT operation.

Parameters

layer1 A drawn or derived polygon layer


constraint Specifies the number of holes a layer1 polygon must have in order to
be selected by the DONUT operation. Constraint is any range defined
by “Constraints” (page 491) where the constraints values must be
integer.

Examples

Show a polygon with a hole that touches the boundary at a point – this isn't
really a hole.

L-Edit 14 User Guide Section 3 527


Chapter 22: HiPer Verify: Calibre Command Files

DRAWN ACUTE

DRAWN ACUTE

Description

Reports an error for any two consecutive edges of a drawn polygon or wire that form an acute angle.

This command produces that same output as the FLAG ACUTE command, but the drawn command
provides for a user specified rule name.

Examples

G.1 { @ Shapes with acute angles between line segments are not allowed
DRAWN ACUTE
}

L-Edit 14 User Guide Section 3 528


Chapter 22: HiPer Verify: Calibre Command Files

DRAWN OFFGRID

DRAWN OFFGRID

Description

Reports an error for every offgrid vertex of drawn polygons and wires. Also reports errors for offgrid
instance placements, rotated instances, and instance arrays and scaling that could result in offgrid
geometry. Checking and reporting is done in the context of the cell. The grid is defined by the
RESOLUTION command.

This command produces that same output as the FLAG OFFGRID command, but the drawn command
provides for a user specified rule name.

Examples

G.2 { @ grid must be an integer multiple of 0.005u


DRAWN OFFGRID
}

L-Edit 14 User Guide Section 3 529


Chapter 22: HiPer Verify: Calibre Command Files

DRAWN SKEW

DRAWN SKEW

Description

Reports an error for any non-90 or non-45 degree edge of a drawn polygon or centerline segment of a
drawn wire. Reporting is based on the angle of the edge in its cell coordinate space, not in coordinate
space of instances of that cell.

This command produces that same output as the FLAG SKEW command, but the drawn command
provides for a user specified rule name.

Examples

G.3 { @ Shapes must be orthogonal or on a 45 degree angle.


DRAWN SKEW
}

L-Edit 14 User Guide Section 3 530


Chapter 22: HiPer Verify: Calibre Command Files

DRC INCREMENTAL CONNECT

DRC INCREMENTAL CONNECT

Parameters

YES Enables incremental connectivity.


NO Use this setting so that incremental connectivity is not enabled. This
is the default behavior if you do not include this statement in your rule
file.

Description

Used only in DRC applications, in particular for antenna checking and other specialized connectivity
checks. Enables incremental connectivity extraction which, if used, causes the tool to connect a subset
of the interconnect layers and perform design rule checks based on the connectivity of that subset.

When enabled, L-Edit views the rule file as having the following partial front-to-back ordering so that
incremental connect rules are read first:

<layer operations> //Connectivity zone #0


<connect operations>
<layer operations> //Connectivity zone #1
<connect operations>
<layer operations> //Connectivity zone #2
...
<connect operations>
<layer operations> //Connectivity zone #N

Layer operations include the output operations of DRC. As such, operations requiring connectivity
information in connectivity zone #0 are not allowed. Operations requiring connectivity information in a
zone #x where x > 0 treat the connectivity as if only the Connect operations prior to connectivity zone
#x have been executed. They are not allowed if that connectivity can only be established by Connect
operations after connectivity zone #i.

L-Edit 14 User Guide Section 3 531


Chapter 22: HiPer Verify: Calibre Command Files

DRC MAXIMUM RESULTS

DRC MAXIMUM RESULTS {maxresults | ALL}

Description

Specifies the maximum number of errors that will be reported for a DRC Rule. You can only specify
this statement once in a rule file. When the maximum results are generated for a rule, a warning is
issued, and no additional results are added to the Verification Error Navigator.

For the Geometry Flags, FLAG ACUTE, FLAG OFFGRID, and FLAG SKEW, a maximum of 100
errors are always reported.

Parameters

maxresults A positive integer that specifies the maximum result count for an
individual RuleCheck in DRC execution. If this statement is not
included, the default value is 1000.
ALL A required secondary keyword that specifies that there is no
maximum result count, for an individual RuleCheck in DRC.

L-Edit 14 User Guide Section 3 532


Chapter 22: HiPer Verify: Calibre Command Files

DRC PRINT AREA

DRC PRINT AREA layer [… layer]

Description

Prints the area of the specified layers to the DRC Summary Report. This statement can appear multiple
times.

Parameters

layer A drawn or derived polygon layer.

Examples

DRC PRINT AREA metal1 metal2

L-Edit 14 User Guide Section 3 533


Chapter 22: HiPer Verify: Calibre Command Files

DRC PRINT PERIMETER

DRC PRINT PERIMETER layer [… layer]

Prints the perimeter of the specified layers to the DRC Summary Report. This statement can appear
multiple times. This operation requires flattening the layer and can therefore be time consuming.

Parameters

layer A drawn or derived polygon layer.

Examples

DRC PRINT PERIMETER metal1 metal2

L-Edit 14 User Guide Section 3 534


Chapter 22: HiPer Verify: Calibre Command Files

DRC SELECT CHECK

DRC SELECT CHECK rule_check …

Description

Provides selective inclusion of specified RuleCheck statements or RuleCheck Groups in the DRC job.
By default all rules are included. The wildcard (?) is supported for this command.

RuleCheck statements are selected for inclusion as follows:

1. If there are no DRC Select Check specification statements in the rule file then all rules are included.
Otherwise, only those RuleChecks specified in DRC Select Check statements are included.

2. All RuleChecks specified in any DRC Unselect Check specification statements in the rule file are
then excluded.

Parameters

rule_check A list of RuleCheck or Group names.

Example 1

DRC SELECT CHECK PO.S1 PO.S2 PO.S3

Example 2

GROUP Poly_CHK PO?


PO.1 {
INT Poly < 2.
}

PO.2a {
EXT Poly < 3.
}

L-Edit 14 User Guide Section 3 535


Chapter 22: HiPer Verify: Calibre Command Files

DRC TOLERANCE FACTOR

DRC TOLERANCE FACTOR tolerance

Description

Reduces false errors on all-angle DRC rule check operations. The tolerance is applied to distance
measurement operations whose constraint is of the form “< d” when either one of two edges being
compared is non-orthogonal. In this case, the constraint value is decreased by the given tolerance (to no
more than 0) prior to the actual measurement. This command can appear only once in the command file.

Parameters

tolerance A positive real number in user units that specifies the tolerance used
in DRC when at least one of the edges is all-angle. Tolerance is
assigned a default value of 1/PRECISION.

Examples

DRC TOLERANCE FACTOR 0.005

L-Edit 14 User Guide Section 3 536


Chapter 22: HiPer Verify: Calibre Command Files

DRC UNSELECT CHECK

DRC UNSELECT CHECK rule_check …

Description

Provides selective exclusion of specified RuleCheck statements or RuleCheck Groups in the DRC job.
By default all rules are included.

RuleCheck statements are selected for inclusion as follows:

1. If there are no DRC Select Check specification statements in the rule file then all rules are included.
Otherwise, only those RuleChecks specified in DRC Select Check statements are included.

2. All RuleChecks specified in any DRC Unselect Check specification statements in the rule file are
then excluded.

Parameters

rule_check A list of RuleCheck or Group names.

Examples

DRC UNSELECT CHECK PO.S1 PO.S2 PO.S3

L-Edit 14 User Guide Section 3 537


Chapter 22: HiPer Verify: Calibre Command Files

ENC

ENClosure layer1 layer2 constraint [metric] [polygon_containment]


[connectivity_filter] [orientation_filter] [projection_filter]
[angled_filter] [corner_filter] [intersection_filter] [reversal] [output]

Description

Measures the distance between the outside of layer1 and the inside of layer2 boundaries. Edge pairs that
meet the constraint are output. The ENC command is typically used for enclosure or extension checks.
Note that the behavior of the rule depends on the order of the layers. By default, intersecting or
overlapping edge pairs are not compared.

Parameters

The following parameters are common to all ENC, EXT, and INT RuleChecks.

layer1 A drawn layer, derived polygon layer, or derived edge layer.


layer2 A drawn layer, derived polygon layer, or derived edge layer.
Constraint Constraint is any range defined by “Constraints” (page 491), except
> a, >= a, or != a, where the constraints values must be a non-negative
real number in user units.
metric EUCLIDEAN (Default) — Use the euclidean metric.

OPPOSITE — Use the opposite metric.

SQUARE — Use the square metric.


polygon_containment MEASURE ALL — Specifies that all edges are compared, including
those normally not compared due to intersection, polygon
containment, or visibility blocking.

MEASURE COINcident — Specifies that edge pairs that are outside


coincident that would normally not be compared, should be
compared.
connectivity_filter CONNECTED — Specifies that only edges from the same net are
compared.

NOT CONNECTED – Specifies that only edges from different nets


are compared.

To use these filters, the input layers must posses valid connectivity.

L-Edit 14 User Guide Section 3 538


Chapter 22: HiPer Verify: Calibre Command Files

orientation_filter acute_filter

ACUTE ALSO — Specifies to measure edges with an


appropriate angle between 0 and 90 degrees, exclusive. This
is the default behavior if you do not specify a choice from
the acute_filter option subset.

ACUTE ONLY — Specifies to measure only edges with an


appropriate angle between 0 and 90 degrees, exclusive. You
cannot use this parameter and a parameter from the other
subsets of orientation_filter in the same Enclosure operation.

NOT ACUTE — Specifies to not measure edges with an


appropriate angle between 0 and 90 degrees.

parallel_filter

PARAllel ALSO — Specifies to measure parallel edges.


This is the default behavior if you do not specify a choice
from the parallel_filter option subset.

PARAllel ONLY — Specifies to measure only parallel


edges. You cannot use this parameter and a parameter from
the other subsets of orientation_filter in the same Enclosure
operation.

NOT PARAllel — specifies to not measure parallel edges.

perpendicular_filter

NOT PERPendicular — Specifies to not measure


perpendicular edges. This is the default behavior if you do
not specify a choice from the perpendicular_filter option
subset.

PERPendicular ONLY — Specifies to measure only


perpendicular edges. You cannot use this parameter and a
parameter from the other subsets of orientation_filter in the
same Enclosure operation.

PERPendicular ALSO — Specifies to measure


perpendicular edges.

obtuse_filter

NOT OBTUSE — Specifies to not measure edges with an


appropriate angle between 90 and 180 degrees, exclusive.
This is the default behavior if you do not specify a choice
from the obtuse_filter option subset.

OBTUSE ONLY — Specifies to measure only edges with


an appropriate angle between 90 and 180 degrees, exclusive.
You cannot use this parameter and an parameter from the
other subsets of orientation_filter in the same Enclosure
operation.

OBTUSE ALSO — Specifies to measure edges with an


appropriate angle between 90 and 180 degrees, exclusive.
L-Edit 14 User Guide Section 3 539
Chapter 22: HiPer Verify: Calibre Command Files

projection_filter PROJecting [constraint] — Specifies to compare the distance


between two edges only when one edge projects onto the other edge
and the length of projection conforms to the constraint. This is the
default behavior, with constraint set to “>=0”, if you do not specify a
choice from this set in the operation.

NOT PROJecting — Specifies to compare the distance between two


edges only when neither edge projects onto the other edge.
angled_filter ANGLED [constraint] — Specifies to measure the two edges only
when the number of non-orthogonal (angled) edges in the pair meets
the given constraint. The constraint is optional and when omitted,
defaults to “> 0”.
corner_filter You cannot specify this filter with an orientation, projection, or
angled filter.

CORNER TO CORNER — Specifies to measure and output errors


only for edges in a corner-to-corner configuration.

Additional options CORNER, CORNER TO EDGE, and NOT


CORNER are not supported at this time.

L-Edit 14 User Guide Section 3 540


Chapter 22: HiPer Verify: Calibre Command Files

intersection_filter Specifies to measure intersecting edges, and specifies exactly the


characteristics of intersecting edges that are to be measured.
Intersecting or abutting (coincident) edges are not measured by
default. Coincident or abutting edges are considered to be
intersecting. The value of intersection_filter is:

[ABUT [abut_constraint] ] [OVERLAP] [SINGULAR]


[INTERSECTING ONLY]

You can specify any combination of ABUT, OVERLAP, and


SINGULAR in one operation.

ABUT [abut_constraint] — Specifies that intersecting edges should


also be output if the angle between them conforms to the optional
constraint (interpreted in degrees). Output from the ABUT condition
is in addition to any other output the Enclosure operation generates.
The abut_constraint modifier must contain non-negative real numbers
less than 180. Single-operator constraints such as < 90 and > 135 are
interpreted as >= 0 < 90 and > 135 < 180. With no constraint
specified, the default value is >= 0 < 180.

If the abut_constraint modifier includes zero in its range then any


edges A of layer1 which are coincident inside with edges B of layer2
are also output (because the angle between the exterior side of A and
the interior side of B is zero).

OVERLAP — Specifies that output should also occur where a


polygon from one input layer crosses a polygon from the other input
layer. Edges forming the point of overlap are measured and output as
if an unconstrained ABUT parameter was specified. This overrides
any specified ABUT parameter at the point of overlap only.

This keyword cannot be used when either of the input layers is a


derived edge layer because polygons are required to determine if an
overlap condition is present. Output from the overlap condition is in
addition to any other output generated by the Enclosure operation.

SINGULAR — Specifies that intersecting edges at points of polygon


singularity should also be output. Singularities are point-to-edge or
point-to-point polygon intersections or self-intersections.

INTERSECTING ONLY — Specifies that only intersecting edge


errors are to be output. Must be preceded with at least one of the other
options in this group. The ABUT, OVERLAP, and SINGULAR
options normally add intersecting edge violations to the non
intersecting edge violations that are normally output. The
INTERSECTING ONLY option, when added to one of the other
options, causes only intersecting edge violations to be output. This
filter ignores orientation, angled, projection, and corner filters.
Output REGION [EXTENTS] — constructs polygon projections between
the error edges and then outputs them as polygon data. When you
specify REGION the polygon region is used, but when you specify
REGION EXTENTS the extents of the polygon region is used.

L-Edit 14 User Guide Section 3 541


Chapter 22: HiPer Verify: Calibre Command Files

The following parameter applies to ENC only.

reversal INSIDE ALSO — outputs edges from layer2 that are enclosed by the
layer1. When you specify INSIDE ALSO between layer1 and layer2,
then edges from layer2 inside, but not coincident-inside, relative to
layer1 are output by the operation. Layer1 cannot be a derived edge
layer.

The connectivity keywords CONNECTED and NOT CONNECTED


do affect the output from the INSIDE ALSO option. If you specify
NOT CONNECTED, then the INSIDE ALSO parameter does not
output an edge if the polygon containing it (or the edge coincident
inside with it) are on the same electrical node. If you specify
CONNECTED, then the INSIDE ALSO parameter does not output an
edge if the polygon containing it (or the edge coincident inside with
it) are on different electrical nodes.

OUTSIDE ALSO — outputs edges from layer1 that are not enclosed
by layer2. When you specify OUTSIDE ALSO between layer1 and
layer2, then edges from layer1 outside or coincident-outside with
layer2 are output by the operation. If layer2 is a derived edge layer,
then the semantics are restricted to coincident outside edges from
layer1.

The connectivity keywords CONNECTED and NOT CONNECTED


do not affect output from the OUTSIDE ALSO keyword in an
Enclosure operation.

Examples

PO.O.1 { @ Minimum POLY extension out of ACTIVE < 0.25


ENC ACTIVE POLY < 0.25 SINGULAR ABUT >=0 <90
}

VIA1.E.1 { @ Min M1 surrounding VIA1 is 0.1


ENC VIA1 M1 < 0.1 ABUT<90 SINGULAR OVERLAP OUTSIDE ALSO
}

L-Edit 14 User Guide Section 3 542


Chapter 22: HiPer Verify: Calibre Command Files

ENCLOSE

[polygon-layer =] layer1 [NOT] ENCLOSE layer2 [constraint [BY NET]]


[polygon-layer =] [NOT] ENCLOSE layer1 layer2 [constraint [BY NET]]

Description

Produces layer1 polygons that completely enclose any layer2 polygon. The NOT option produces those
layer1 polygons not produced by the corresponding ENCLOSE operation. The input layers will be
merged if the constraint option is used, and will run slower than the ENCLOSE operation with no
constraint.

(This option is not yet supported.) If BY NET is specified, the constraint applies to the number of layer2
polygons on distinct nets that CUT layer1.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
constraint Specifies the number of layer2 polygons that a layer1 polygon must
enclose, in order to be selected by the ENCLOSE operation.
Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be integer.
BY NET When the BY NET option is used, then a layer1 polygon is selected
when the specified number of layer2 polygons on distinct nets enclose
the layer1 polygon. Layer2 must have connectivity.

L-Edit 14 User Guide Section 3 543


Chapter 22: HiPer Verify: Calibre Command Files

ENCLOSE RECTANGLE

[polygon-layer =] ENCLOSE RECTANGLE layer1 width length [ORTHOGONAL ONLY]

Description

Selects all polygons on layer1 that can enclose a rectangle of the specified width and length dimensions.
Width may be oriented along either the x- or y- axis, but only orthogonal rectangles or rectangles at
45-degrees will be considered. To consider only orthogonally oriented rectangles, use the
ORTHOGONAL ONLY option.

Parameters

layer1 A drawn or derived polygon layer.


width A positive floating-point number interpreted in user units.
length A positive floating-point number interpreted in user units.
ORTHOGONAL ONLY Limits selection to polygons enclosing rectangles having sides that
are parallel to the x- and y- axis.

L-Edit 14 User Guide Section 3 544


Chapter 22: HiPer Verify: Calibre Command Files

EXCLUDE CELL

Hierarchy Modification Commands


EXCLUDE CELL name …

Description

Excludes all instances of specified cells when processing DRC commands. Cells may also be excluded
from DRC processing by checking “Exclude instances of this cell from DRC” in the Cell > Info dialog
in L-Edit.

Parameters

name The name of a cell. If a cell name has spaces, then the name is in
quotes. Name can be specified any number of times in one statement.
Wildcards are not permitted at this time.

Examples

EXCLUDE CELL logo

L-Edit 14 User Guide Section 3 545


Chapter 22: HiPer Verify: Calibre Command Files

EXPAND EDGE

[polygon-layer =] EXPAND EDGE layer1 expansion_set number1 [EXTEND BY


[FACTOR] number2] [CORNER FILL]

Description

Converts all layer1 edges into rectangles by sweeping edges a specified distance, in a direction toward
the inside of the polygon, or toward the outside of the polygon from which the edge originated.

Parameters

layer1 A drawn or derived polygon layer, or a derived edge layer.


expansion_set INside BY — Expands an edge towards the inside of the polygon it
originated from by the amount specified in the number1 parameter.
This secondary keyword can be used along with OUTside BY
FACTOR.

INside BY FACTOR — Expands an edge towards the inside of the


polygon it originated from by the product of the number1 parameter
and the edge's length. This secondary keyword can be used along with
OUTside BY

OUTside BY — Expands an edge towards the outside of the polygon


it originated from by the amount specified in the number1 parameter.
This secondary keyword can be used along with INside BY
FACTOR.

OUTside BY FACTOR — Expands an edge towards the outside of


the polygon it originated from by the product of the number1
parameter and the edge's length. This secondary keyword can be used
along with INside BY.

BY — Performs expansion of both secondary keywords INside BY


and OUTside BY. You cannot use this parameter with any other
secondary keyword in this set.

BY FACTOR — Performs expansion of both secondary keywords


INside BY FACTOR and OUTside BY FACTOR. You cannot use
this parameter with any other secondary keyword in this set.
number1 A positive real number, must follow the specified secondary
keywords listed for expansion_set.
[EXTEND BY [FACTOR] Extends or retracts both ends of an edge prior to expanding into
number 2] rectangles. A positive number2 parameter specifies the amount to
extend both ends of an edge. A negative number2 parameter specifies
the amount to retract both ends of an edge. An edge disappears if it is
retracted more than or equal to two times its original length

L-Edit 14 User Guide Section 3 546


Chapter 22: HiPer Verify: Calibre Command Files

[CORNER FILL] An optional secondary keyword that directs an Expand Edge


operation to fill gaps between rectangles formed by the operation at
corners of the input layer. You cannot specify CORNER FILL with a
BY FACTOR secondary keyword or an EXTEND secondary
keyword.

L-Edit 14 User Guide Section 3 547


Chapter 22: HiPer Verify: Calibre Command Files

EXPAND TEXT

Text Based Operations


EXPAND TEXT text_name [text_layer] BY number [PRIMARY ONLY]

Description

Produces a derived polygon layer containing squares centered on the locations of text objects having the
specified text_name. The sides of the squares have length equal to number.

The parameter order must be observed to avoid ambiguity. The text_name is case insensitive. The
text_name parameter can contain one or more question mark (?) wildcard characters, where the (?)
matches zero or more characters.

Parameters

text_name The name of a text object. Can be a string variable.


text_layer An optional drawn layer that contains the text_name. The text_layer
option is used to restrict the text search to the specified layer.
number A positive floating-point number in user units that specifies the size
of the squares.
PRIMARY ONLY An optional keyword that specifies only text at the top level of the
hierarchy is used.

L-Edit 14 User Guide Section 3 548


Chapter 22: HiPer Verify: Calibre Command Files

EXT

EXTernal layer1 constraint [metric] [polygon_filter][polygon_containment]


[connectivity_filter] [orientation_filter] [projection_filter]
[angled_filter] [corner_filter] [intersection_filter] [reversal] [output]

EXTernal layer1 layer2 constraint [metric] [polygon_containment]


[connectivity_filter] [orientation_filter] [projection_filter]
[angled_filter] [corner_filter] [intersection_filter] [reversal] [output]

Description

Measures the distance between the outside of layer1 boundaries, or the distance between the outside of
layer1 and the outside of layer2 boundaries. Edge pairs that meet the constraint are output. By default,
intersecting or overlapping edge pairs are not compared.

Parameters

The following parameters are common to all ENC, EXT and INT rule checks.

layer1 A drawn layer, derived polygon layer, or derived edge layer.


layer2 A drawn layer, derived polygon layer, or derived edge layer.
Constraint Constraint is any range defined by “Constraints” (page 491), except
> a, >= a, or != a, where the constraints values must be a non-negative
real number in user units.
metric EUCLIDEAN (Default) — Use the euclidean metric.

OPPOSITE — Use the opposite metric.

SQUARE — Use the square metric.


polygon_containment MEASURE ALL — Specifies that all edges are compared, including
those normally not compared due to intersection, polygon
containment, or visibility blocking.

MEASURE COINcident – Specifies that edge pairs that are outside


coincident that would normally not be compared, should be
compared.
connectivity_filter CONNECTED — Specifies that only edges from the same net are
compared.

NOT CONNECTED – Specifies that only edges from different nets


are compared.

L-Edit 14 User Guide Section 3 549


Chapter 22: HiPer Verify: Calibre Command Files

orientation_filter acute_filter

ACUTE ALSO — Specifies to measure edges with an


appropriate angle between 0 and 90 degrees, exclusive. This
is the default behavior if you do not specify a choice from
the acute_filter option subset.

ACUTE ONLY — Specifies to measure only edges with an


appropriate angle between 0 and 90 degrees, exclusive. You
cannot use this parameter and a parameter from the other
subsets of orientation_filter in the same External operation.

NOT ACUTE — Specifies to not measure edges with an


appropriate angle between 0 and 90 degrees.

parallel_filter

PARAllel ALSO — Specifies to measure parallel edges.


This is the default behavior if you do not specify a choice
from the parallel_filter option subset.

PARAllel ONLY — Specifies to measure only parallel


edges. You cannot use this parameter and a parameter from
the other subsets of orientation_filter in the same External
operation.

NOT PARAllel — specifies to not measure parallel edges.

perpendicular_filter

NOT PERPendicular — Specifies to not measure


perpendicular edges. This is the default behavior if you do
not specify a choice from the perpendicular_filter option
subset.

PERPendicular ONLY — Specifies to measure only


perpendicular edges. You cannot use this parameter and a
parameter from the other subsets of orientation_filter in the
same External operation.

PERPendicular ALSO — Specifies to measure


perpendicular edges.

obtuse_filter

NOT OBTUSE — Specifies to not measure edges with an


appropriate angle between 90 and 180 degrees, exclusive.
This is the default behavior if you do not specify a choice
from the obtuse_filter option subset.

OBTUSE ONLY — Specifies to measure only edges with


an appropriate angle between 90 and 180 degrees, exclusive.
You cannot use this parameter and an parameter from the
other subsets of orientation_filter in the same External
operation.

OBTUSE ALSO — Specifies to measure edges with an


appropriate angle between 90 and 180 degrees, exclusive.
L-Edit 14 User Guide Section 3 550
Chapter 22: HiPer Verify: Calibre Command Files

projection_filter PROJecting [constraint] — Specifies to compare the distance


between two edges only when one edge projects onto the other edge
and the length of projection conforms to the constraint. This is the
default behavior, with constraint set to “>=0”, if you do not specify a
choice from this set in the operation.

NOT PROJecting — Specifies to compare the distance between two


edges only when neither edge projects onto the other edge.
angled_filter ANGLED [constraint] — Specifies to measure the two edges only
when the number of non-orthogonal (angled) edges in the pair meets
the given constraint. The constraint is optional and when omitted,
defaults to “> 0”.
corner_filter You cannot specify this filter with an orientation, projection, or
angled filter.

CORNER TO CORNER — Specifies to measure and output errors


only for edges in a corner-to-corner configuration.

Additional options CORNER, CORNER TO EDGE, and NOT


CORNER are not supported at this time.

L-Edit 14 User Guide Section 3 551


Chapter 22: HiPer Verify: Calibre Command Files

intersection_filter Specifies to measure intersecting edges, and specifies exactly the


characteristics of intersecting edges that are to be measured.
Intersecting or abutting (coincident) edges are not measured by
default. Coincident or abutting edges are considered to be
intersecting. The value of intersection_filter is:

[ABUT [abut_constraint] ] [OVERLAP] [SINGULAR]


[INTERSECTING ONLY]

You can specify any combination of ABUT, OVERLAP, and


SINGULAR in one operation.

ABUT [abut_constraint] — Specifies that intersecting edges should


also be output if the angle between them conforms to the optional
constraint (interpreted in degrees). Output from the ABUT condition
is in addition to any other output the External operation generates.
The abut_constraint modifier must contain non-negative real numbers
less than 180. Single-operator constraints such as < 90 and > 135 are
interpreted as >= 0 < 90 and > 135 < 180. With no constraint
specified, the default value is >= 0 < 180.

If the abut_constraint modifier includes zero in its range then any


edges A of layer1 which are coincident outside with edges B of layer2
are also output (because the angle between the exterior side of A and
the exterior side of B is zero).

OVERLAP — Specifies that output should also occur where a


polygon from one input layer crosses a polygon from the other input
layer. Edges forming the point of overlap are measured and output as
if an unconstrained ABUT parameter was specified. This overrides
any specified ABUT parameter at the point of overlap only.

This keyword cannot be used when either of the input layers is a


derived edge layer because polygons are required to determine if an
overlap condition is present. Output from the overlap condition is in
addition to any other output generated by the Enclosure operation.

SINGULAR — Specifies that intersecting edges at points of polygon


singularity should also be output. Singularities are point-to-edge or
point-to-point polygon intersections or self-intersections.

INTERSECTING ONLY — Specifies that only intersecting edge


errors are to be output. Must be preceded with at least one of the other
options in this group. The ABUT, OVERLAP, and SINGULAR
options normally add intersecting edge violations to the non
intersecting edge violations that are normally output. The
INTERSECTING ONLY option, when added to one of the other
options, causes only intersecting edge violations to be output. This
filter ignores orientation, angled, projection, and corner filters.
Output REGION [EXTENTS] — constructs polygon projections between
the error edges and then outputs them as polygon data. When you
specify REGION the polygon region is used, but when you specify
REGION EXTENTS the extents of the polygon region is used.

L-Edit 14 User Guide Section 3 552


Chapter 22: HiPer Verify: Calibre Command Files

The following parameters apply to EXT only.

reversal INSIDE ALSO — outputs edges and edge segments from layer1 or
layer2 that are inside or inside-coincident of the other layer.

The connectivity keywords CONNECTED and NOT CONNECTED


do affect the output from the INSIDE ALSO option. If you specify
NOT CONNECTED, then the INSIDE ALSO parameter does not
output an edge if the polygon containing it (or the edge
coincident-inside with it) are on the same electrical node. If you
specify CONNECTED, then the INSIDE ALSO parameter does not
output an edge if the polygon containing it (or the edge coincident
inside with it) are on different electrical nodes

The following parameters apply to single layer EXT only.

polygon_filter The secondary keywords in this set instruct the one-layer External
operation to measure the separation between the outsides of edges
based upon polygon membership.

NOTCH — measures the separation between the outsides of two


edges from only the same polygon.

SPACE — measures the separation between the outsides of two


edges from only different polygons.

If you do not specify either NOTCH or SPACE, then both conditions


are measured.

Examples

ACT.S.1 { @ Minimum ACTIVE spacing < 0.5


EXT ACTIVE< 0.5 SINGULAR ABUT <90
}

L-Edit 14 User Guide Section 3 553


Chapter 22: HiPer Verify: Calibre Command Files

EXTENT

[polygon-layer =] EXTENT [layer1]

Description

Produces a layer consisting of one rectangle equal to the minimum bounding box of all input layers. If
the layer1 option is present, then the resulting polygon layer consists of one rectangle equal to the
minimum bounding box of that layer.

Parameters

layer1 A drawn or derived polygon layer

Examples

CHIP = EXTENT

L-Edit 14 User Guide Section 3 554


Chapter 22: HiPer Verify: Calibre Command Files

EXTENTS

[polygon-layer =] EXTENTS layer1 [CENTERS [number]]

Description

Produces a layer consisting of the (merged) minimum bounding boxes of each polygon on layer1.

Parameters

layer1 A drawn or derived polygon layer


CENTERS Produce squares at the center of each bounding box instead of the
bounding boxes themselves.
number Specifies the size of the generated squares if CENTERS is specified.
The square will have the dimension of number user units by number
user units. The default value is 1.

Examples

// Center-to-center pad distance must be 200 microns:

pad_center = EXTENTS pad CENTERS 2


pad_spacing {
EXT pad_center < 198 // Use 198 since centers are 2x2
}

L-Edit 14 User Guide Section 3 555


Chapter 22: HiPer Verify: Calibre Command Files

FLAG ACUTE

Geometry Flags
FLAG ACUTE {NO | YES}

Description

Reports an error for any two consecutive edges of a drawn polygon or wire that form an acute angle.
Errors will appear in the Error Navigator with a rule name “Polygons and wires with acute angles (<
90o)”. This command can appear only once in the command file.

Parameters

NO Default. Do not report acute angles.


YES Report acute angles.

Examples

FLAG ACUTE YES

L-Edit 14 User Guide Section 3 556


Chapter 22: HiPer Verify: Calibre Command Files

FLAG NONSIMPLE

FLAG NONSIMPLE YES

Description

Reports an error if two edges on the same drawn polygon intersect or if filled region of the polygon is
ambiguous. Wires are checked for intersections based on the outer boundary of the wire.

Self intersecting polygons and wires are ignored by all layer generation and rule checking commands.
Self-intersecting polygons and wires are always reported, this command is not required. A “NO”
argument in this command will be ignored, and self intersections will be checked anyway. This
command can appear only once in the command file.

L-Edit 14 User Guide Section 3 557


Chapter 22: HiPer Verify: Calibre Command Files

FLAG OFFGRID

FLAG OFFGRID {NO | YES}

Description

Report an error for every offgrid vertex of drawn polygons and wires. Also report errors for offgrid
instance placements, rotated instances, and instance arrays and scaling that could result in offgrid
geometry. Checking and reporting is done in the context of the cell. The grid is defined by the
RESOLUTION command. Errors will appear in the Error Navigator with a rule name “Offgrid (grid
size) objects”. This command can appear only once in the command file.

Parameters

NO Default. Do not report offgrid vertices and instances.


YES Report offgrid vertices and instances.

Examples

FLAG OFFGRID YES

L-Edit 14 User Guide Section 3 558


Chapter 22: HiPer Verify: Calibre Command Files

FLAG POLYGONVERTEXLIMIT

FLAG POLYGONVERTEXLIMIT {NO | maxvertices}

Description

Reports an error for any drawn polygon with more than a specified number of vertices. This command
can appear only once in the command file.

Parameters

NO Default.
maxvertices Drawn polygons with more than maxvertices are reported as an error.
A positive integer.

Examples

Polygons in GDSII files have the last vertex repeat the first vertex, so to flag polygons that will have
more than 200 vertices when your file is saved to GDS, set maxvertices equal to 199.

FLAG POLYGONVERTEXLIMIT 199

L-Edit 14 User Guide Section 3 559


Chapter 22: HiPer Verify: Calibre Command Files

FLAG SKEW

FLAG SKEW {NO | YES}

Description

Reports an error for any non-90 or non-45 degree edge of a drawn polygon or centerline segment of a
drawn wire. Reporting is based on the angle of the edge in its cell coordinate space, not in coordinate
space of instances of that cell. Errors will appear in the Error Navigator with a rule name “All-angle
edges”. This command can appear only once in the command file.

Parameters

NO Default. Do not report skew edges


YES Report skew edges

Examples

FLAG SKEW YES

L-Edit 14 User Guide Section 3 560


Chapter 22: HiPer Verify: Calibre Command Files

FLAG WIREVERTEXLIMIT

FLAG WIREVERTEXLIMIT {NO | maxvertices}

Description

Reports an error for any wire with more than a specified number of vertices. This command can appear
only once in the command file.

Parameters

NO Do not report wire vertex count errors.


maxvertices Wires with more than maxvertices are reported as an error. A positive
integer.

Examples

FLAG WIREVERTEXLIMIT 200

L-Edit 14 User Guide Section 3 561


Chapter 22: HiPer Verify: Calibre Command Files

FLAG ZEROWIDTHWIRES

FLAG ZEROWIDTHWIRES {NO | YES}

Description

Reports an error for any zero width wire. This command can appear only once in the command file.

Parameters

NO Default. Do not report zero width wires.


YES Report zero width wires.

Examples

FLAG ZEROWIDTHWIRES YES

L-Edit 14 User Guide Section 3 562


Chapter 22: HiPer Verify: Calibre Command Files

FLATTEN

[result-layer =] FLATTEN layer1

Description

Flattens the specified layer to the top level.

Parameters

layer A drawn or derived polygon layer or a derived edge layer.

L-Edit 14 User Guide Section 3 563


Chapter 22: HiPer Verify: Calibre Command Files

FLATTEN CELL

FLATTEN CELL name …

Description

Flattens instances of specified cells into their parent. Instances of the specified cells are replaced by
their flat contents.

Parameters

name The name of a cell. If a cell name has spaces, then the name is in
quotes. Name can be specified any number of times in one statement.
Wildcards are not permitted at this time.

Examples

FLATTEN CELL cell0 cell1

L-Edit 14 User Guide Section 3 564


Chapter 22: HiPer Verify: Calibre Command Files

FLATTEN INSIDE CELL

FLATTEN INSIDE CELL name …

Description

Flattens the contents of specified cells. Instances of the specified cells remain in place, with their
contents flattened. Cells may also be identified for flattening using Tools > Add Inst > Mark cells for
flattening during DRC.

Parameters

name The name of a cell. If a cell name has spaces, then the name is in
quotes. Name can be specified any number of times in one statement.
Wildcards are not permitted at this time.

Examples

Consider cell A which contains instances of cell B, and cell A is instanced in cell Top. FLATTEN
INSIDE CELL A will cause the contents of A to be flattened, but there will still be instances of A in cell
Top.

L-Edit 14 User Guide Section 3 565


Chapter 22: HiPer Verify: Calibre Command Files

GROUP

GROUP name rule_check …

Description

Names a set of RuleCheck statements. The group name can then be used in DRC SELECT CHECK and
DRC UNSELECT CHECK commands.

The (?) character is a wildcard that matches zero or more characters. Names in the body of a Group
statement can contain one or more question mark (?) characters. Wildcard matching is only applied to
RuleCheck statement names in the group definition, and not to other group names.

Parameters

name A text string that specifies the name of the RuleCheck group.
rule_check A RuleCheck name or group name.

Examples

GROUP POLY_SPACING_RULES PO.S1 PO.S2 PO.S3


DRC SELECT CHECK POLY_SPACING_RULES

The above GROUP statement can be written more simply using the (?) wildcard character:

GROUP POLY_SPACING_RULES PO.S?

L-Edit 14 User Guide Section 3 566


Chapter 22: HiPer Verify: Calibre Command Files

GROW

Polygon Size Operations


[polygon-layer =] GROW layer1 [RIGHT BY value] [TOP BY value] [LEFT BY
value][BOTTOM BY value]

Description

Performs outward translation of the input layer edges in the direction of the x-axis, y-axis, or both.

Parameters

layer1 An drawn or derived polygon layer or derived edge layer.


RIGHT BY value Translate the right edge(s) of each polygon on layer1, toward the
outside of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.
TOP BY value Translate the top edge(s) of each polygon on layer1, toward the
outside of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.
LEFT BY value Translate the left edge(s) of each polygon on layer1, toward the
outside of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.
BOTTOM BY value Translate the bottom edge(s) of each polygon on layer1, toward the
outside of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.

L-Edit 14 User Guide Section 3 567


Chapter 22: HiPer Verify: Calibre Command Files

HOLES

[polygon-layer =] HOLES layer1 [constraint] [INNER] [EMPTY]

Description

Produces a layer consisting of polygons that exactly fit inside the holes of layer1 polygons. Optionally,
only produce polygons whose area satisfies a constraint.

Parameters

layer1 A drawn or derived polygon layer.


constraint Constraint is any range defined by “Constraints” (page 491).
inner if a hole contains another hole, only produce the inner hole.
empty Prevents output of holes that contain polygons on the input layer.
Specifically prevent output of holes that are NOT OUTSIDE the input
layer.

L-Edit 14 User Guide Section 3 568


Chapter 22: HiPer Verify: Calibre Command Files

INCLUDE

INCLUDE filename…

Description

Includes the specified command file into the current command file.

Parameters

filename A valid path and filename. Relative paths are resolved with respect to the
location of the topmost command file.

L-Edit 14 User Guide Section 3 569


Chapter 22: HiPer Verify: Calibre Command Files

INSIDE

[polygon-layer =] layer1 [NOT] INSIDE layer2


[polygon-layer =] [NOT] INSIDE layer1 layer2

Description

Produces all layer1 polygons that are completely inside layer2 polygons. Touching from the inside is
considered to be inside. The NOT option produces those layer1 polygons not produced by the
corresponding INSIDE operation.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer

L-Edit 14 User Guide Section 3 570


Chapter 22: HiPer Verify: Calibre Command Files

NSIDE CELL

[NOT] INSIDE CELL layer1 cellname [… cellname] [PRIMARY ONLY]

Description

Produces all polygons from the input layer that are contained inside the specified cells, and the
sub-hierarchies of those cells. PRIMARY ONLY causes only top-level geometry from specified cells to
be produced. Parameters must appear in the specified command order to avoid ambiguity.

Parameters

layer1 A drawn layer.


cellname The name of a cell. Any number of cell names can be specified,
separated by a space, and cell names are case-sensitive. The name can
be a string variable (see Variable). The cellname can contain one or
more asterisk (*) wildcard characters, where the * character matches
zero or more characters. When using *, enclose the cell name in
quotes because the asterisk is a reserved symbol
PRIMARY ONLY When PRIMARY ONLY is specified, only geometry in the top level
of the specified cells is output. Geometry from the sub-hierarchy of a
specified cell may be output if it is the top level of another specified
cell.

L-Edit 14 User Guide Section 3 571


Chapter 22: HiPer Verify: Calibre Command Files

INSIDE EDGE

[edge-layer =] [NOT] INside EDGE layer1 layer2


[edge-layer =] layer1 [NOT] INside EDGE layer2

Description

Produces all layer1 edge segments that are completely contained inside layer2 polygons. The NOT
option produces all layer1 edges not produced by the corresponding INSIDE EDGE operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer.

L-Edit 14 User Guide Section 3 572


Chapter 22: HiPer Verify: Calibre Command Files

INT

INTernal layer1 constraint [metric] [orientation_filter] [projection_filter]


[angled_filter] [corner_filter] [intersection_filter] [output]

INTernal layer1 layer2 constraint [metric] [polygon_containment]


[connectivity_filter] [orientation_filter] [projection_filter]
[angled_filter] [corner_filter] [intersection_filter] [output]

Description

Measures the distance between the inside of layer1 boundaries, or the inside of layer1 and the inside of
layer2 boundaries. Edge pairs that meet the constraint are output. By default, intersecting or overlapping
edge pairs are not compared.

Parameters

The following parameters are common to all ENC, EXT and INT RuleChecks.

layer1 A drawn layer, derived polygon layer, or derived edge layer.


layer2 A drawn layer, derived polygon layer, or derived edge layer.
Constraint Constraint is any range defined by “Constraints” (page 491), except
> a, >= a, or != a, where the constraints values must be a non-negative
real number in user units.
metric EUCLIDEAN (Default) — Use the euclidean metric.

OPPOSITE — Use the opposite metric.

SQUARE — Use the square metric.


polygon_containment MEASURE ALL — Specifies that all edges are compared, including
those normally not compared due to intersection, polygon
containment, or visibility blocking.

MEASURE COINcident – Specifies that edge pairs that are outside


coincident that would normally not be compared, should be
compared.
connectivity_filter CONNECTED — Specifies that only edges from the same net are
compared.

NOT CONNECTED – Specifies that only edges from different nets


are compared.

L-Edit 14 User Guide Section 3 573


Chapter 22: HiPer Verify: Calibre Command Files

orientation_filter acute_filter

ACUTE ALSO — Specifies to measure edges with an


appropriate angle between 0 and 90 degrees, exclusive. This
is the default behavior if you do not specify a choice from
the acute_filter option subset.

ACUTE ONLY — Specifies to measure only edges with an


appropriate angle between 0 and 90 degrees, exclusive. You
cannot use this parameter and a parameter from the other
subsets of orientation_filter in the same Internal operation.

NOT ACUTE — Specifies to not measure edges with an


appropriate angle between 0 and 90 degrees.

parallel_filter

PARAllel ALSO — Specifies to measure parallel edges.


This is the default behavior if you do not specify a choice
from the parallel_filter option subset.

PARAllel ONLY — Specifies to measure only parallel


edges. You cannot use this parameter and a parameter from
the other subsets of orientation_filter in the same Internal
operation.

NOT PARAllel — specifies to not measure parallel edges.

perpendicular_filter

NOT PERPendicular — Specifies to not measure


perpendicular edges. This is the default behavior if you do
not specify a choice from the perpendicular_filter option
subset.

PERPendicular ONLY — Specifies to measure only


perpendicular edges. You cannot use this parameter and a
parameter from the other subsets of orientation_filter in the
same Internal operation.

PERPendicular ALSO — Specifies to measure


perpendicular edges.

obtuse_filter

NOT OBTUSE — Specifies to not measure edges with an


appropriate angle between 90 and 180 degrees, exclusive.
This is the default behavior if you do not specify a choice
from the obtuse_filter option subset.

OBTUSE ONLY — Specifies to measure only edges with


an appropriate angle between 90 and 180 degrees, exclusive.
You cannot use this parameter and an parameter from the
other subsets of orientation_filter in the same Internal
operation.

OBTUSE ALSO — Specifies to measure edges with an


appropriate angle between 90 and 180 degrees, exclusive.
L-Edit 14 User Guide Section 3 574
Chapter 22: HiPer Verify: Calibre Command Files

projection_filter PROJecting [constraint] — Specifies to compare the distance


between two edges only when one edge projects onto the other edge
and the length of projection conforms to the constraint. This is the
default behavior, with constraint set to “>=0”, if you do not specify a
choice from this set in the operation.

NOT PROJecting — Specifies to compare the distance between two


edges only when neither edge projects onto the other edge.
angled_filter ANGLED [constraint] — Specifies to measure the two edges only
when the number of non-orthogonal (angled) edges in the pair meets
the given constraint. The constraint is optional and when omitted,
defaults to “> 0”.
corner_filter You cannot specify this filter with an orientation, projection, or
angled filter.

CORNER TO CORNER — Specifies to measure and output errors


only for edges in a corner-to-corner configuration.

Additional options CORNER, CORNER TO EDGE, and NOT


CORNER are not supported at this time.

L-Edit 14 User Guide Section 3 575


Chapter 22: HiPer Verify: Calibre Command Files

intersection_filter Specifies to measure intersecting edges, and specifies exactly the


characteristics of intersecting edges that are to be measured.
Intersecting or abutting (coincident) edges are not measured by
default. Coincident or abutting edges are considered to be
intersecting. The value of intersection_filter is:

[ABUT [abut_constraint] ] [OVERLAP] [SINGULAR]


[INTERSECTING ONLY]

You can specify any combination of ABUT, OVERLAP, and


SINGULAR in one operation.

ABUT [abut_constraint] — Specifies that intersecting edges should


also be output if the angle between them conforms to the optional
constraint (interpreted in degrees). Output from the ABUT condition
is in addition to any other output the Internal operation generates. The
abut_constraint modifier must contain non-negative real numbers less
than 180. Single-operator constraints such as < 90 and > 135 are
interpreted as >= 0 < 90 and > 135 < 180. With no constraint
specified, the default value is >= 0 < 180.

If the abut_constraint modifier includes zero in its range then any


edges A of layer1 which are coincident outside with edges B of layer2
are also output (because the angle between the exterior side of A and
the interior side of B is zero).

OVERLAP — Specifies that output should also occur where a


polygon from one input layer crosses a polygon from the other input
layer. Edges forming the point of overlap are measured and output as
if an unconstrained ABUT parameter was specified. This overrides
any specified ABUT parameter at the point of overlap only.

This keyword cannot be used when either of the input layers is a


derived edge layer because polygons are required to determine if an
overlap condition is present. Output from the overlap condition is in
addition to any other output generated by the Enclosure operation.

SINGULAR — Specifies that intersecting edges at points of polygon


singularity should also be output. Singularities are point-to-edge or
point-to-point polygon intersections or self-intersections.

INTERSECTING ONLY — Specifies that only intersecting edge


errors are to be output. Must be preceded with at least one of the other
options in this group. The ABUT, OVERLAP, and SINGULAR
options normally add intersecting edge violations to the non
intersecting edge violations that are normally output. The
INTERSECTING ONLY option, when added to one of the other
options, causes only intersecting edge violations to be output. This
filter ignores orientation, angled, projection, and corner filters.
Output REGION [EXTENTS] — constructs polygon projections between
the error edges and then outputs them as polygon data. When you
specify REGION the polygon region is used, but when you specify
REGION EXTENTS the extents of the polygon region is used.

L-Edit 14 User Guide Section 3 576


Chapter 22: HiPer Verify: Calibre Command Files

Examples

M1.W.1 { @ Minimum M1 width < 0.6


INT M1 < 0.6 SINGULAR REGION ABUT < 90

L-Edit 14 User Guide Section 3 577


Chapter 22: HiPer Verify: Calibre Command Files

INTERACT

[polygon-layer =] layer1 [NOT] INTERACT layer2 [constraint [BY NET]]


[polygon-layer =] [NOT] INTERACT layer1 layer2 [constraint [BY NET]]

Description

Produces all layer1 polygons that have some or all area inside layer2 polygons or share an edge with
layer2 polygons. The NOT option produces those layer1 polygons not produced by the corresponding
INTERACT operation. The input layers will be merged if the constraint option is used, and will run
slower than the INTERACT operation with no constraint.

(This option is not yet supported.) If BY NET is specified, the constraint applies to the number of layer2
polygons on distinct nets that CUT layer1.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
constraint Specifies the number of layer2 polygons that a layer1 polygon must
interact with, in order to be selected by the INTERACT operation.
Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be integer.
BY NET When the BY NET option is used, then a layer1 polygon is selected
when the specified number of layer2 polygons on distinct nets interact
the layer1 polygon. Layer2 must have connectivity.

L-Edit 14 User Guide Section 3 578


Chapter 22: HiPer Verify: Calibre Command Files

LABEL ORDER

LABEL ORDER layer [… layer]

Description

LABEL ORDER defines the layer sequence in which polygons on a net are examined for intersection
and attachment with a net naming label. Only layers listed in the TEXT LAYER command are used in
net naming. The process of assigning label names to nets gives first priority to explicit ATTACH
commands, then to implicit attachment (labels on same layer as overlapping polygon), and then to the
LABEL ORDER for the remaining text labels. When multiple polygons on different nets overlap a
label, then the net with the polygon whose layer appears first in the Label Order list is labeled with the
value of the net name.

Parameters

layer A drawn layer or a derived polygon layer. This layer must appear as
an input layer to a Connect or Sconnect operation in the same
verification set. You can specify layer any number of times in one
statement

L-Edit 14 User Guide Section 3 579


Chapter 22: HiPer Verify: Calibre Command Files

LAYER

LAYER name {GDS# … | drawn_layer …}

Description

Specifies the name of a drawn layer in terms of its GDSII number or other previously defined names.

A LAYER statement is required in the command file in order to use a drawn layer in a layer operation
or DRC command. LAYER statements can be used to map a layer name in the L-Edit editing
environment to a different name in the DRC command file by assigning the same GDSII number to the
layer in each location.

To make a layer in the tdb file to be equal to different layer name in the DRC command file then assign
the same GDS number to that layer in Setup Layers > General in the tdb file, and to the new name in a
LAYER statement in the command file.

Parameters

name A drawn layer name.


GDS# A list of GDS numbers.
drawn_layer A list of previously defined layer names.

Examples

LAYER Active 3 11 12
LAYER Poly1 46
LAYER Poly2 47
LAYER AllPoly Poly1 Poly2

L-Edit 14 User Guide Section 3 580


Chapter 22: HiPer Verify: Calibre Command Files

LAYER MAP

LAYER MAP source_layer {DATATYPE | TEXTTYPE} source_type target_layer

Description

Specifies a mapping of specified GDS number and DATATYPE or TEXTTYPE to different layers.

Parameters

source_layer A positive integer or a constraint of integers that represents the GDS


layer number of the source layer. An integer specifies a single source
layer, and a constraint specifies a range of source layers.
{DATAYPE | TEXTTYPE} Use DATATYPE to map geometry and TEXTTYPE to map text
(ports).
source_type A positive integer or a constraint of integers that represents the GDS
datatype of the source layer. An integer specifies a single datatype,
and a constraint specifies a range of datatypes.
target_layer A positive integer that specifies the GDS number of the target layer.

When using the LAYER MAP command in a command file, there should be corresponding layers and
datatypes setup in L-Edit. Use Setup > Layers to setup GDS layer numbers and datatypes for the
layout. The datatypes in the Setup Layers dialog are used to initialize the datatype of new objects
created on a layer. Assigning a datatype to a layer will not automatically assign that datatype to
pre-existing objects on that layer. You can propagate the layer datatype to all existing objects on that
layer using Draw > Assign GDSII Datatypes.

Examples

// Layers M1 and M1_TIGHT both have GDS number 49 in L-Edit,


// but they have different datatypes. If we use the statement
// LAYER M1 49, then both M1 and M1_TIGHT will map to M1
// in DRC. By using LAYER MAP, we can distinguish each
// layer for different rules in DRC.
LAYER MAP 49 DATATYPE 0 101 // M1 layer
LAYER M1 101
LAYER MAP 49 DATATYPE 1 102 // M1_TIGHT layer
LAYER M1_TIGHT 102

M1.Spacing {
EXT M1 < 3.0
}
M1_TIGHT.Spacing {
EXT M1_TIGHT < 2.0

L-Edit 14 User Guide Section 3 581


Chapter 22: HiPer Verify: Calibre Command Files

LAYER RESOLUTION

LAYER RESOLUTION layer1 {s | sx sy}

Description

Overrides the default RESOLUTION specification statement parameters for a specified drawn layer
during off-grid vertex checking with Flag Offgrid, Drawn Offgrid, or Snap Offgrid. During off-grid
checking, all geometries on layer1 are checked using the resolution specified in the Layer Resolution
statement rather than the default specified in the Resolution specification statement.

The statement may be specified any number of times but only once for any particular drawn layer.

Parameters

layer1 The name of a drawn layer (do not specify a layer set name).
s A positive integer in database units that specifies the x-direction and
y-direction grid size for off-grid checking for the specified layer.

sx A positive integer in database units that specifies the x-direction grid


size for off-grid checking for the specified layer.
sx A positive integer in database units that specifies the y-direction grid
size for off-grid checking for the specified layer.

L-Edit 14 User Guide Section 3 582


Chapter 22: HiPer Verify: Calibre Command Files

LENGTH

[edge-layer =] [NOT] LENGTH layer1 constraint

Description

Produces all layer1 edges whose length conforms to the constraint. The NOT option produces all layer1
edges not produced by the corresponding LENGTH operation.

Parameters

layer1 A drawn or derived polygon layer or derived edge layer.


constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be a non-negative real number in user
units.

L-Edit 14 User Guide Section 3 583


Chapter 22: HiPer Verify: Calibre Command Files

MERGE

[result-layer =] MERGE layer1 [BY 0]

Description

Promotes polygons on the specified layer up the hierarchy and merges them such that polygons on the
resultant layer are completely contained in a single cell, and are not spread over the hierarchy.

Parameters

layer A drawn or derived polygon layer or a derived edge layer.


BY 0 MERGE layer1 BY 0 does not merge polygons in different cells that
Abut, only merges polygons that overlap

L-Edit 14 User Guide Section 3 584


Chapter 22: HiPer Verify: Calibre Command Files

NET

[NOT] NET layer1 net_name […net_name]

Description

Produces all layer1 polygons that belong to the net having the specified netname. The connectivity on
layer1 must be established through a connectivity operation.

Parameters

layer1 A drawn layer or layer set, or a derived polygon layer.


net_name A name of a net, which can contain one or more question characters.
The ? is a wildcard character that matches zero or more characters.
You can specify net_name any number of times in one statement. The
net_name can also be a string variable (see Variable).

L-Edit 14 User Guide Section 3 585


Chapter 22: HiPer Verify: Calibre Command Files

NET AREA

NET AREA layer constraint

Description

Selects all polygons on a specified layer that have a total area conforming to a constraint or a single net.

Parameters

layer1 A drawn layer, layer set, or a derived polygon layer.


constraint A required constraint, which must be a non-negative floating-point
number and is interpreted in user units squared. (See “Constraints” on
page 491.)

See Also

“NET” (page 545), “CONNECT” (page 541), “SCONNECT” (page 546) and “STAMP” (page 548).

L-Edit 14 User Guide Section 3 586


Chapter 22: HiPer Verify: Calibre Command Files

NET AREA RATIO

Standard Form

NET AREA RATIO


{layer1 [SCALE BY value] {[COUNT ONLY] | [PERIMETER ONLY]}}
[...{layerN [SCALE BY value] {[COUNT ONLY] | [PERIMETER ONLY]}}]
[OVER]
{d_layer1 [SCALE BY value] {[COUNT ONLY] | [PERIMETER ONLY]}}
[...{d_layerN [SCALE BY value] {[COUNT ONLY] | [PERIMETER ONLY]}}]
[‘[‘expression‘]‘] constraint [INSIDE OF LAYER layer][ACCUMULATE [alayer]]
{[RDB file_name [BY LAYER]
[{rdb_layer [MAXIMUM max_polygon}]] [{rdb_layer [MAXIMUM max_polygon
...}]]]}

Single-layer Form

NET AREA RATIO layer [expression] constraint [INSIDE OF LAYER layer]


{[RDB file_name [BY LAYER]
[{rdb_layer [MAXIMUM max_polygon}]] [{rdb_layer [MAXIMUM max_polygon
...}]]]}

ACCUMULATE-only Form

NET AREA RATIO ACCUMULATE layer1 layer2 constraint [Aexpression]

Description

Selects polygons based on the ratios of polygon areas, perimeters, and counts on the same nets,
primarily for antenna checks. The Standard form is the most general of the three. The Single-layer form
is used for finding net information about a single layer. The ACCUMULATE-only form performs ratio
accumulation calculations for two input layers. Note that the expression INSIDE OF LAYER is not
supported.

Standard Form

The Standard form operation selects all polygons from layer1 that lie on an electrical node, such that the
ratio of the total area of layerN polygons on that node to the total area of d_layerN polygons satisfies the
given constraint. The term “area” is used loosely here, as the calculated ratio can pertain to other
quantities like polygon counts or perimeters. The unit dimensions of the ratio that is calculated are
determined by the [expression], if provided; otherwise, area is used as the unit of measurement.

Note that all layer1 polygons on the node are selected if the ratio meets the constraint. The behavior is
different if you use the ACCUMULATE, rdb_layer, or BY LAYER parameters. For ACCUMULATE,
d_layer1 polygons are selected. For rdb_layer (and BY LAYER), you can specify input layers other
than layer1 or d_layer1, which can be selected for output.

Single-layer Form

An [expression] is required in the single-layer form. The input layer behaves like layer1 in the standard
form (ACCUMULATE not specified) and like d_layer1 in the standard form (ACCUMULATE is
specified). There is no == 0 constraint special case in the single-layer form. Otherwise, the semantics
are identical to the standard form. For example:

L-Edit 14 User Guide Section 3 587


Chapter 22: HiPer Verify: Calibre Command Files

// Derive a NARAC layer where each gate polygon has its


// individual area attached:
CONNECT gate
area_gate = NET AREA RATIO gate >= 0 [ AREA( gate ) ] ACCUMULATE

ACCUMULATE-only Form

Parameters layer1 and layer2 must each be the output layer of a previous Net Area Ratio
ACCUMULATE operation. In addition, they must have the same layer of origin, just as d_layer1 and
alayer in the Standard form. The operation creates a Net Area Ratio ACCUMULATE layer consisting
of a subset of the polygons in layer1 with potentially new values attached.

The [Aexpression] is similar to the [expression] in the Standard form, except that the only function
which may be computed for the input layers is VALUE, which returns the value attached to the
polygon(s) for which the expression is computed.

Parameters

Parameter Description

layer n A drawn layer, layer set, or a derived polygon layer, which must have
connectivity information. In Standard form you can layer as often as
you like. In Single-layer form you can only specify one layer. In
ACCUMULATE-only form you can only specify two input layers,
which must be derived from previous ACCUMULATE-only
operations.
OVER This keyword must be included when you use more than one d_layer
in Standard form.
d_layer n A required drawn layer, layer set, or a derived polygon layer, which
must have extracted connectivity information. These are the layers
that are part of the ratio denominator. You can specify d_layer, along
with any optional keywords, any number of times in one Standard
form statement, but you must include the OVER keyword when you
do so.
[expression] A numeric expression that allows customizable control over the
operation computations. The expression defines calculations to be
made using the input layers. These calculations may or may not be
ratios. They cannot produce strictly negative results. The expression
must be contained in square brackets.

The [expression] is mandatory in the Single-layer form. For the


ACCUMULATE-only form, the [Aexpression] is mandatory but is
evaluated differently than an [expression]. The only function
available for this type of expression is VALUE. (See
“ACCUMULATE-only Form” on page 557.)

The expression may contain numbers, numeric variables, binary


operators (^, *, /, +, -), unary operators (+, -, !, ~), and algebraic or
transcendental functions as follows:

L-Edit 14 User Guide Section 3 588


Chapter 22: HiPer Verify: Calibre Command Files

Parameter Description

[expression], continued ƒ ! — returns “0” (false) if its argument is non-zero and “1” (true)
if its argument is zero. Used in front of AREA() (most efficient),
PERIMETER(), or COUNT(), the ! operator can be extremely
valuable in performance optimizations for antenna checking
where regions connected to diodes are not to be counted in
antenna area calculations, for instance.
ƒ ~ — returns “0” (false) if the argument is positive and “1” (true)
if the argument is non-positive. The ~ operator is particularly
useful where the sign of the argument is of concern.
ƒ AREA(input_layer)
ƒ PERIMETER(input_layer)
ƒ COUNT(input_layer)
ƒ SQRT(x) — square root of x
ƒ EXP(x) — exponential (base e) of x
ƒ LOG(x) — natural logarithm of x
ƒ SIN(x) — sine of x radians
ƒ COS(x) — cosine of x radians
ƒ TAN(x) — tangent of x radians
Note: The input_layer is an input layer in the same Net Area Ratio
statement and is not an ACCUMULATE layer.
constraint A required string that must contain non-negative real numbers (< 0 is
not allowed). It is interpreted as the constraining value of the
operation.
INSIDE OF LAYER layer An optional keyword and layer name set that causes the Net Area
Ratio calculation for the input layerN polygons to be taken only for
the portions of the layerN polygons that are inside polygons on the
INSIDE OF LAYER layer parameter. The layer parameter must be an
original or derived polygon layer. This keyword set is only available
in a standard form or single-layer form operation and may not be used
with the ACCUMULATE or RDB keyword sets.
ACCUMULATE [alayer] An optional keyword set that attaches Net Area Ratio values to the
derived output layer. The optional alayer is a derived layer from a
previous Net Area Ratio ACCUMULATE operation (which specifies
to add such derived output layer values from alayer to a new output
layer.) The output layer can either be a derived layer or an error layer.

L-Edit 14 User Guide Section 3 589


Chapter 22: HiPer Verify: Calibre Command Files

Parameter Description

RDB file_name An optional keyword set that specifies RDB output to the filename,
where file_name is a string that instructs the tool to create, as apart of
the Net Area Ratio operation, an ASCII results database (RDB) with
geometry clustered by net and detailed statistics (area, perimeter, etc.)
by net, having the given file_name. This database is in addition to the
usual DRC results database. This keyword may not be specified with
an ==0 constraint and is for use in DRC-related applications only.

If specified without the ACCUMULATE keyword, polygons come


from the first numerator layer. If specified with the ACCUMULATE
keyword, polygons come from the first denominator layer.
Additionally, the rdb_layer parameter can specify layers to appear in
the RDB database.

Note: The ONLY option is not supported.

rdb_layer Specifies an original layer, layer set, or a derived polygon layer to


appear in the RDB database. This layer must appear as a layer or
d_layer within the same Net Area Ratio operation.
The next three keywords are provided primarily for backward compatibility; they have largely been
replaced by the [expression]. If you do not use an [expression], Net Area Ratio uses database units for
area and perimeter measurements. This implies the Precision is multiplied by user units of length to
calculate areas and perimeters for Net Area Ratio operations not using an [expression].
SCALE BY value Optional keyword set where value is a non-zero floating-point
number that instructs the tool to multiply the nodal area, perimeter, or
count of the layer (layer or d_layer) by value prior to its use in the
calculation. This is often used with COUNT ONLY and
PERIMETER ONLY to get the units of measurement (area, length,
and polygon count) in a ratio to match.
COUNT ONLY Optional keyword that instructs the tool to use the nodal polygon
count of the layer when calculating the net ratio instead of the area,
for the associated layer. COUNT has no units of measurement, so if
you want to have COUNT related to perimeter (units of length) or
area (units of length squared), use SCALE BY and a factor
that uses your Precision specification statement (for perimeter) or
Precision squared (for area).
PERIMETER ONLY Optional keyword that instructs the tool to use the nodal perimeter in
the calculation of the net ratio instead of the area, for the associated
layer. Internal calculations of length are done in database units, so you
may need use a SCALE BY factor to relate perimeter to area for the
units of a ratio to match. Using the Precision value as part of the
factor to multiply perimeter by yields the correct dimensions of area
(length squared) in database units.

Examples

Basic Syntax

The basic syntax for NET AREA RATIO is:

NET AREA RATIO layer1 [...layerN] [OVER] d_layer1 [...d_layerN]

L-Edit 14 User Guide Section 3 590


Chapter 22: HiPer Verify: Calibre Command Files

[[expression]] constraint [ACCUMULATE [alayer]]

Given the command

NET AREA RATIO L1 L2 ... Ln OVER D1 D2 ... Dm constraint

L1 L2 … Ln are numerator layers and D1 D2 … Dm are denominator layers. For each net, the NET
AREA RATIO command computes the total area of all polygons on layers L1 … Ln divided by the total
area of all polygons on layers D1… Dm, and outputs L1 polygons if the computed ratio meets the
constraint. If the NET AREA RATIO command contains an expression, then the expression is evaluated
for each net, and L1 polygons are output if the expression meets the constraint.

When ACCUMULATE is present, for example

NET AREA RATIO L1 L2 ... Ln OVER D1 D2 ... Dm constraint ACCUMULATE AC1

then D1 polygons are output.

Poly Check

A simple field-poly check can be written as

Gate = Poly AND Active


CONNECT Poly Gate

ANT.Poly { @ Error if Area (Poly) / Area (Gate) > 100


NET AREA RATIO Poly Gate > 100
}

ANT.Poly will flag an error if the ratio of the area of Poly to the area of Gate on any net exceeds 100.
The output of the check are the Poly regions that could cause gate failure. The sidewall areas of Poly are
ignored in this check.

Metal Layer Check

VARIABLE thickness 0.5


Gate = Poly AND Active
CONNECT Poly Gate
CONNECT Metal1 Poly BY PolyCont

ANT.Metal1 { @ Error if (sidewall area of Metal1) / (area of gate) > 100


NET AREA RATIO Metal1 Gate >100
[PERIMTER(Metal1)*thickness/AREA(Gate)]
}

ANT.Metal1 will flag an error if the ratio of the sidewall area of Metal1 to the area of Gate on a net
exceeds 100. The output of the check are the Metal1 regions that could cause gate failure. The top areas
of Metal1 are ignored in this check.

Net Area Accumulation Ratio

Antenna checks at each level of interconnect may not be sufficient to accurately check for charge
accumulation. Using INCREMENTAL CONNECT YES and the ACCUMULATE option of NET
AREA RATIO, you can model and check the accumulation of charge over multiple interconnect layers.

L-Edit 14 User Guide Section 3 591


Chapter 22: HiPer Verify: Calibre Command Files

The areas of the polygons are indicated in the following figure:

The command file below models the accumulation of charge on gates through the fabrication of Metal1,
Metal2, and Metal3 interconnect layers. Area ratios of metal to gate are computed and accumulated on
gates through the fabrication of the interconnect layers, and gates whose accumulated area ratios
exceeds 150 are flagged as violations.

TITLE "Calibre NET AREA RATIO with ACCUMULATE"

DRC INCREMENTAL CONNECT YES

Gate = Poly AND Active

CONNECT Gate Poly


CONNECT Metal1 Poly BY PolyCont
//***************************
//*** Connectivity zone 1 ***
//***************************

// AC1 contains all Gate polygons, with the Metal1/Gate ratio


// attached to gate polygons.
AC1 = NET AREA RATIO Metal1 Gate >= 0 ACCUMULATE

// Write out Metal1/Gate area ratios for debug


NET AREA RATIO PRINT AC1 NAR_AC1.txt

At this point AC1 contains all Gate polygons, with the Metal1/Gate ratio attached to gate polygons.

L-Edit 14 User Guide Section 3 592


Chapter 22: HiPer Verify: Calibre Command Files

The ratios of Metal1 area to gate area on each net (at this stage of connectivity) are computed as
follows:

Area(Metal1a)/Area(G1+G2) = 100/(5+5) = 10
Area(Metal1b)/Area(G3+G4) = 200/(5+5) = 20
Area(Metal1c)/Area(G5+G6) = 300/(5+5) = 30
Area(Metal1d)/Area(G7+G8) = 400/(5+5) = 40
Area(Metal1e)/Area(G9+G10)= 250/(2.5+2.5) = 50

At this point the area ratios on the gates are

AC1:G1 = AC1:G2 = 10
AC1:G3 = AC1:G4 = 20
AC1:G5 = AC1:G6 = 30
AC1:G7 = AC1:G8 = 40
AC1:G9 = AC1:G10 = 50

CONNECT Metal2 Metal1 By Via1


//***************************
//*** Connectivity zone 2 ***
//***************************

// AC2 contains all gate polygons, with the accumulated


// Metal/gate ratios from Metal1 and Metal2
AC2 = NET AREA RATIO Metal2 Gate >= 0 ACCUMULATE AC1

// Write out accumulated ratios for debug


NET AREA RATIO PRINT AC2 NAR_AC2.txt

The ratios of Metal2 area to Gate area on each net (at this stage of connectivity) are computed as
follows:

Area(Metal2a)/Area(G1+G2+G3+G4) = 600/(5+5+5+5) = 30
Area(Metal2b)/Area(G5+G6+G7+G8+G9+G10) = 1000/(5+5+5+5+2.5+2.5) = 40

These area ratios are added to the existing area ratios on the gates. At this point the ratios on the gate
are:

AC2:G1 = AC2:G2 = 30+10 = 40


AC2:G3 = AC2:G4 = 30+20 = 50
AC2:G5 = AC2:G6 = 40+30 = 70
AC2:G7 = AC2:G8 = 40+40 = 80
AC2:G9 = AC2:G10 = 40+50 = 90

CONNECT Metal3 Metal2 By Via2


//***************************
//*** Connectivity zone 3 ***
//***************************

NAR.1 {

// AC3 contains those gate polygons whose accumulated Metal/Gate


// ratios from Metal1, Metal2, and Metal3 exceeds 150.
AC3 = NET AREA RATIO Metal3 Gate > 150 ACCUMULATE AC2

L-Edit 14 User Guide Section 3 593


Chapter 22: HiPer Verify: Calibre Command Files

COPY AC3

// Write out the accumulated ratios on the gate polygons in AC3


NET AREA RATIO PRINT AC3 NAR_AC3.txt

// Show the whole net as one error. Ornet performs an OR operation


// on all overlapping polygons on two input layers that are on the same net
Poly_ant = NET AREA RATIO Poly AC3 > 0
Metal1_ant = NET AREA RATIO Metal1 AC3 > 0
Metal2_ant = NET AREA RATIO Metal2 AC3 > 0
Metal3_ant = NET AREA RATIO Metal3 AC3 > 0
X = ORNET Poly_ant Metal1_ant
Y = ORNET Metal2_ant Metal3_ant
ORNET X Y

The ratios of Metal3 area to Gate area on each net (at this stage of connectivity) are computed as
follows:

Area(Metal3a)/Area(G1+G2+G3+G4+G5+G6+G7+G8+G9+G10) =
3600/(5+5+5+5+5+5+5+5+2.5+2.5) = 80

These area ratios are added to the existing area ratios on the gates. At this point the ratios on the gate
are:

AC3:G1 = AC3:G2 = 80+40=120


AC3:G3 = AC3:G4 = 80+50=130
AC3:G5 = AC3:G6 = 80+70=150
AC3:G7 = AC3:G8 = 80+80=160
AC3:G9 = AC3:G10 = 80+90=170

The rule specifies that accumulated ratios > 150 are output, so G7, G8, G9, and G10 should be output.

See Also

“NET AREA RATIO PRINT” (page 564), “NET” (page 545), and “ATTACH” (page 540)

L-Edit 14 User Guide Section 3 594


Chapter 22: HiPer Verify: Calibre Command Files

NET AREA RATIO PRINT

NET AREA RATIO PRINT layer filename

Description

Prints the input net area ratio accumulation information to the specified file.

Each line in the destination file corresponds to a polygon in the input layer, and consists of its lower left
vertex coordinates followed by the antenna ratio associated with the polygon. These are specified in
user units. Here is an example of the filename output:

189.625 406 23.7767


217.625 68 20.814

A NET AREA RATIO operation with ACCUMULATE option must be executed prior to printing. For
example, it can be an operation in a DRC rule check that generates output:

ANT.Metal1 { X = NET AREA RATIO Metal1 Gate> 400 ACCUMULATE


NET AREA RATIO PRINT X ANT_M1.txt
}

Output from Net Area Ratio Print operations is different from Net Area Ratio RDB output. Net Area
Ratio Print does not generate a DRC results style database, and it uses only net area ratio accumulation
layers for input, and for output statistics. Also, Net Area Ratio RDB allows you to specify
non-ACCUMULATE layers for output.

Parameters

layer A required derived polygon layer that must be the output of a Net
Area Ratio ACCUMULATE operation.
filename A required filename for the output ASCII file. The layer must be
specified before the filename to prevent ambiguity, but the filename
parameter can contain environment variables.

See Also

“NET AREA RATIO” (page 556), “NET” (page 545)

L-Edit 14 User Guide Section 3 595


Chapter 22: HiPer Verify: Calibre Command Files

NOT

[polygon-layer =] layer1 NOT layer2


[polygon-layer =] NOT layer1 layer2

Description

Calculates the region formed by layer1 minus layer2.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer

L-Edit 14 User Guide Section 3 596


Chapter 22: HiPer Verify: Calibre Command Files

OFFGRID

OFFGRID layer1 {s | sx sy}

Description

Reports an error for every offgrid vertex of drawn polygons and wires on the specified layer and
specified grid. This command can flag off-grid vertices of merged or derived layers, whereas the Flag
Offgrid command only checks drawn layers. Original drawn layers are merged before the offgrid check
is performed. Note, this operation can be time consuming if applied to large layers. The FLAG
OFFGRID command, which does not merge layers, is a less time consuming approach.

Parameters

layer1 A drawn or derived polygon layer.


{ s| sx sy } Positive integer(s) in database units, that specify the snap grid. The
value s is applied in both x and y directions, while sx is applied in the
x direction and sy in the y direction.

Example

The following checks for metal1 vertices that are not on a 0.01 micron grid (assuming 1000 database
units per user-unit)”:

Metal1_Offgrid {
OFFGRID metal1 10
}

L-Edit 14 User Guide Section 3 597


Chapter 22: HiPer Verify: Calibre Command Files

OR

[polygon-layer =] OR layer1 constraint

Description

Calculates the region formed by the union of layer1 and layer2.

Parameters

layer1 A drawn or derived polygon layer


constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be integer.

L-Edit 14 User Guide Section 3 598


Chapter 22: HiPer Verify: Calibre Command Files

ORNET

ORNET layer1 layer2 [by net | by shape]

Description

Note: This operation is performed flat in hierarchical applications; it has largely been
replaced by “NET AREA RATIO” with the RDB option.

Performs a Boolean OR operation on all overlapping layer1 and layer2 polygons on the same net.
Generates output equivalent to the polygon data on layer2 if layer1 is empty and vice versa.

Net Area, Net Area Ratio, and other Ornet operations having the same settings are the only operations
that can have an input layer derived by Ornet because Ornet generates unmerged data. However, a layer
derived by Ornet can be output to the DRC results database (which should be its primary use.) The
connectivity on the input layers must be established.

Parameters

layer1 A drawn or derived layer.


layer2 A drawn or derived layer.
[BY net] An optional keyword that instructs L-Edit to merge overlapping
layer1 and layer2 polygons that are on the same net. This is the
default behavior if you do not include BY NET or BY SHAPE in the
statement.
[BY shape] An optional keyword that instructs tL-Edit not to merge any
overlapping layer1 and layer2 polygons on the same net, but to output
individual polygons instead.

See Also

“NET AREA RATIO” (page 556) and “NET AREA RATIO PRINT” (page 564)

L-Edit 14 User Guide Section 3 599


Chapter 22: HiPer Verify: Calibre Command Files

OUTSIDE

[polygon-layer =] layer1 [NOT] OUTSIDE layer2


[polygon-layer =] [NOT] OUTSIDE layer1 layer2

Description

Produces all layer1 polygons that are completely outside layer2 polygons. Touching from the outside is
considered to be outside. The NOT option produces those layer1 polygons not produced by the
corresponding OUTSIDE operation.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer

L-Edit 14 User Guide Section 3 600


Chapter 22: HiPer Verify: Calibre Command Files

OUTSIDE EDGE

[edge-layer =] [NOT] OUTside EDGE layer1 layer2


[edge-layer =] layer1 [NOT] OUTside EDGE layer2

Description

Produces all layer1 edge segments that are completely outside layer2 polygons. The NOT option
produces all layer1 edges not produced by the corresponding OUTSIDE EDGE operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer.

L-Edit 14 User Guide Section 3 601


Chapter 22: HiPer Verify: Calibre Command Files

PATH LENGTH

[edge-layer =] PATH LENGTH layer constraint

Description

Produces layer1 edges where the length of a contiguous set of edges conforms to the constraint.

Parameters

layer1 A derived edge layer.


Constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be a non-negative real number in user
units.

L-Edit 14 User Guide Section 3 602


Chapter 22: HiPer Verify: Calibre Command Files

PERIMETER

[polygon-layer =] PERIMETER layer1 constraint

Description

Produces layer1 polygons whose perimeter conforms to the constraint.

Parameters

layer1 A drawn or derived polygon layer


constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be a non-negative real number.

L-Edit 14 User Guide Section 3 603


Chapter 22: HiPer Verify: Calibre Command Files

POLYGON

POLYGON {x y} … layer1

Description

Defines a polygon having the specified coordinates on the specified layer, placed in the toplevel cell of
the design. Two (x,y) coordinate pairs are interpreted as an orthogonal rectangle. If more than two
points are specified, the first and last point are connected, and do not need to be the same. The polygon
can be specified in clockwise or counterclockwise order, but must be non self intersecting.

Parameters

(x,y) A pair of real numbers in user units that specify the vertices of the
polygon
layer1 A drawn polygon layer previously defined with a LAYER statement.

Examples

LAYER EXCL 64
POLYGON –100 –220.5 100 220.5 EXCL

L-Edit 14 User Guide Section 3 604


Chapter 22: HiPer Verify: Calibre Command Files

POLYNET

POLYNET layer

Description

Creates a net for each layer polygon. Note that this operation is performed flat even in hierarchical
tools.

Parameters

layer A drawn or derived layer.

L-Edit 14 User Guide Section 3 605


Chapter 22: HiPer Verify: Calibre Command Files

PRECISION

PRECISION number

Description

Specifies the ratio of user units to database internal units. This statement has the same meaning as
“Database resolution” in L-Edit Setup > Design, and must have the same value. This command can
appear only once in the command file. The default PRECISION is 1000 if this command is not present.

Parameters

number A positive integer that defines the database resolution

Examples

PRECISION 1000 // 1000 database units per micron

L-Edit 14 User Guide Section 3 606


Chapter 22: HiPer Verify: Calibre Command Files

RECTANGLE

RECTANGLE layer [constraint1 [BY constraint2]] [ASPECT constraint3]


[ORTHOGONAL ONLY | MEASURE EXTENTS]

Description

Produces rectangles from layer1. If constraints are specified, only rectangles whose dimensions
conform to the constraint are produced. The NOT option produces layer1 rectangles not produced by
the corresponding RECTANGLE operation.

Parameters

layer1 A drawn or derived polygon layer


constraint1 Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be a non-negative real number. If
constraint1 is specified but constraint2 is not specified, then the
rectangle is selected if either dimension of the rectangle satisfies the
constraint.
BY constraint2 Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be a non-negative real number.
ASPECT constraint3 Specifies the ratio of the longer side to the shorter side that a rectangle
must have in order to be output.
ORTHOGONAL ONLY Restricts selection to rectangles with sides that are parallel to the
horizontal and vertical coordinate axis.
MEASURE EXTENTS Selects polygons based on their MBB. May not be specified with
ORTHOGONAL ONLY.

L-Edit 14 User Guide Section 3 607


Chapter 22: HiPer Verify: Calibre Command Files

RECTANGLE ENCLOSURE

[polygon-layer =] layer1 layer2 [intersection_filter] [OUTSIDE ALSO]]


[ORTHOGONAL ONLY] {RECTANGLE _RULE [rectangle_rule...]}

Description

Rectangle enclosure uses a sequential process of elimination to make enclosure checks more efficient
when multiple rules must be applied. Geometry is tested first to confirm rectangularity, then against the
global parameters ABUT, SINGULAR or OUTSIDE ONLY (if used), then against each of eight
rectangle rule relations (of each edge to each of four values, in both clockwise and counter-clockwise
directions), which are of the type GOOD or BAD.

GOOD type rules output rectangles that fail any one of their criteria and do not output rectangles that
satisfy all of their criteria. BAD type rules output rectangles that meet all of their criteria.

If the ABUT constraint is specified, intersecting edges will be measured. If the SINGULAR constraint
is specified, point-to-point intersections, including self-intersections will also be measured. These
options can be used together in any combination.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
intersection filter Optional parameters that permit intersecting edge or point pairs to be
measured using the form

ABUT [constraint] [SINGULAR]

Used when a certain distance between intersecting objects is


acceptable. You can specify any combination of these keywords in
one operation.
ABUT [constraint] Measures the separation between intersecting edges, if the angle
between them conforms to the constraint, specified in degrees.

The default value is >= 0 < 180. Optionally, you can enter a
non-negative real number less than 180. Single operator constraints
such as < 90 and > 135 are interpreted as >= 0 < 90 and > 135 < 180.

Note that if the constraint modifier includes zero in its range (for
example, < 90, == 0, >= 0 < 45), then any edges A of X and B of Y,
which are coincident inside are also output because the angle between
the exterior side of A and the interior side of B is zero. There is no
measurement involved in this event, and polygon containment criteria
are not applied.

L-Edit 14 User Guide Section 3 608


Chapter 22: HiPer Verify: Calibre Command Files

SINGULAR Includes measurement of the separation between corresponding sides


of intersecting edges at points of singularity (point-to-edge or
point-to-point intersections or self-intersections). Though normally
singularities are a design rule violation, in some cases there is a
maximum allowable dimension that geometries with singular point of
contact conform to, as shown below.

measures this distance

If a point of singularity is detected, all edges forming that point are


measured as if an unconstrained ABUT parameter were specified,
overriding any ABUT parameter value entered.
OUTSIDE ALSO Outputs edges on layer1 that are outside or coincident outside from
layer2.
ORTHOGONAL ONLY Limits the rectangle enclosure operation to check only those
rectangles with edges parallel to the coordinate axes of the design.
rectangle_rule Indicates how layer1 rectangles enclosed by layer2 are to be
measured. At least one rule with four values must be defined, in the
form:

GOOD | BAD {value1 [metric] value2 [metric] value3 [metric]


value4 [metric]}

GOOD rules do not output rectangles that satisfy them. BAD rules do
output rectangles that satisfy them.

Enclosure values are measured as < value, where the value is a


positive floating-point number. The default metric is Euclidean but
may be changed to OPPOSITE, OPPOSITE EXTENDED, or
SQUARE.

Note: Applying the OPPOSITE metric can use large amounts of


processing time and memory since so many more errors will
be found.

Examples

For example, you would use Rectangle Enclosure instead of iterations of the Enclosure rule to test the
following case:

All contacts must be enclosed by metal of .15. However, if two opposite sides are at least .5 then the two
other sides can touch, or, if two opposite sides are at least .4 the two other sides can be as close as .05, or
if two opposite sides are at least .3 the two other sides can be as close as .3. The contacts must be fully
enclosed, and acute abutments are considered errors.

You would use the following rules:

L-Edit 14 User Guide Section 3 609


Chapter 22: HiPer Verify: Calibre Command Files

RECTANGLE ENCLOSURE contact metal ABUT > 0 < 90 SINGULAR OUTSIDE ALSO

GOOD 0.00 0.50 0.00 0.50


GOOD 0.05 0.40 0.05 0.40
GOOD 0.10 0.30 0.10 0.30
GOOD 0.15 0.15 0.15 0.15

The tool checks each enclosure of contact by metal against the four spacing conditions listed, in the
order the conditions appear. Any rectangle that does not satisfy at least one of the four conditions is
classified as BAD and is output. Note that you do not need to explicitly specify any BAD conditions in
order for a contact to be classified as BAD. A check having only BAD rules will output all layer1
rectangles. As such it is sufficient to specify all GOOD rules, unless there are only a few BAD
conditions to check. BAD rules are best used to filter out gross violations.

Every edge of each rectangle is examined for each rule, first in clockwise order, and then again in
counter-clockwise order. A relation satisfies a GOOD rule if all rules four elements of that relation are
GOOD. A relation satisfies a BAD rule if all rules four elements of that relation are BAD. If the value 0
is used, the result is considered GOOD in a GOOD type rule and BAD in a BAD type rule.

Some possible results are shown below.

L-Edit 14 User Guide Section 3 610


Chapter 22: HiPer Verify: Calibre Command Files

RECTANGLES

[polygon-layer =] RECTANGLES width length {spacing | {width_spacing


length_spacing} } [OFFSET {offset | {width_offset length_offset} } ] [
{INSIDE OF x1 y1 x2 y2} | {INSIDE OF LAYER layer} ] [MAINTAIN SPACING]

Description

Produces a layer consisting of a set of rectangles with specified width, spacing, and offset.

Parameters

width length The width (x-axis) and length (y-axis) of the generated rectangles in
user-units. Positive floating point numbers
spacing The spacing between rectangles in user-units. A positive floating
point number.
width_spacing The x-axis and y-axis spacing, respectively, between rectangles in
length_spacing user-units. Positive floating point numbers.
OFFSET A secondary keyword that specifies that rectangles are offset from the
previous row/column of rectangles by a specified amount.
offset Specifies the same offset in the x-axis and y-axis directions for each
rectangle relative to the previous row/column of rectangles
width_offset length_offset Specifies the offset in the x-axis and y-axis directions respectively for
each rectangle relative to the previous row/column of rectangles.
Positive floating point numbers.
INSIDE OF x1 y1 x2 y2 Specifies an area within the extent of the cell boundary to be filled
with the specified rectangles. The parameters x1 y1 x2 y2 are four
floating point numbers, in user-units, that indicate the lower-left (x1,
y1) and upper-right (x2, y2) corners of the extent to be filled.

Negative numbers must be in parenthesis.


INSIDE OF LAYER layer Specifies that rectangles are only produced within the boundary of the
specified layer. The parameter layer is a string that specifies a derived
or original polygon layer.
MAINTAIN SPACING Specifies that no rectangle will be generated closer to another
rectangle than the width_spacing and length_spacing parameters.
This applies to clusters of rectangles between neighboring instances.

L-Edit 14 User Guide Section 3 611


Chapter 22: HiPer Verify: Calibre Command Files

RESOLUTION

RESOLUTION {s | sx sy}

Description

Specifies the grid size for offgrid checking by the FLAG OFFGRID command. This command can
appear at most once in the command file.

Parameters

s A positive integer that specifies the x-direction and y-direction grid


size for off-grid checking.
sx A positive integer that specifies the x-direction grid size for off-grid
checking.
sy A positive integer that specifies the y-direction grid size for off-grid
checking.

Examples

RESOLUTION 100 // define a one tenth micron grid for FLAG OFFGRID

L-Edit 14 User Guide Section 3 612


Chapter 22: HiPer Verify: Calibre Command Files

SCONNECT

Syntax 1:
SCONNECT upper_layer lower_layer [… lower_layer] {BY contact_layer}[LINK
name]

Syntax 2:
SCONNECT upper_layer lower_layer [LINK name] [ABUT ALSO]

Description

Establishes soft connections from the upper_layer polygons to lower_layer polygons through
contact_layer. Connections are unidirectional; node numbers are passed from upper_layer to
lower_layer, but not in the other direction.

Syntax 1:

Connections are made through the contact_layer argument if you use the BY keyword. Connectivity
information is passed from upper_layer to lower_layer, through layerC objects, where lower_layer
objects have positive overlap, with area common to both upper_layer and lower_layerC objects. Contact
(layerC) polygons receive node numbers from upper_layer geometries. If more than one lower_layer is
specified using Syntax 1, then shielding applies. The connection is made from the upper_layer to only
the first lower_layer found at the particular location, in the specified order.

Syntax 2:

Connectivity information is passed from upper_layer to lower_layer, where upper_layer objects have
positive overlap with lower_layer objects. The ABUT ALSO option allows connectivity information to
be passed when upper_layer and lower_layer objects do not have positive overlap, but abut.

If two or more electrical nodes on upper_layer form soft connections to the same lower_layer polygon,
then the electrical node that contains the largest number of polygon vertices (including contacts) is
chosen.

Polygons on lower_layer that are not connected to any upper_layer in any Sconnect operation are called
floating. Floating polygons receive unique node numbers if the secondary keyword LINK is not used, or
if the secondary keyword LINK is used, but no node exists having the specified name. A warning is
issued if the LINK keyword is used but no node exists with the specified name.

Parameters

upper_layer A required original layer or layer set, or a derived polygon layer.


lower_layer A required original layer or layer set, or a derived polygon layer. You
can specify only one lower_layer in a Syntax 2 statement. Any layer
specified as a lower_layer cannot simultaneously be a contact_layer
in any Sconnect operation. Any lower_layer may be specified as a
lower_layer in a different Sconnect operation.
BY contact_layer A required secondary keyword set used with Syntax 1, where
contact_layer is an original layer or layer set, or a derived polygon
layer. The secondary keyword BY must always precede the name of
this contact layer.

L-Edit 14 User Guide Section 3 613


Chapter 22: HiPer Verify: Calibre Command Files

LINK name An optional secondary keyword set, where name indicates an


electrical node, that specifies the node number for floating polygons.
Floating polygons are polygons on any specified lower_layer that are
not connected to any upper_layer polygons. If a node with the name
specified in the LINK option exists in the top level cell, then floating
polygons receive this node name.
ABUT ALSO A optional secondary keyword that specifies that abutment is
considered to constitute overlap in this operation. Applies to Syntax 2
only.

L-Edit 14 User Guide Section 3 614


Chapter 22: HiPer Verify: Calibre Command Files

SHRINK

[polygon-layer =] SHRINK layer1 [RIGHT BY value] [TOP BY value] [LEFT BY


value][BOTTOM BY value]

Description

Performs inward translation of the input layer edges in the direction of the x-axis, y-axis, or both.

Parameters

layer1 An drawn or derived polygon layer or derived edge layer.


RIGHT BY value Translate the right edge(s) of each polygon on layer1, toward the
inside of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.
TOP BY value Translate the top edge(s) of each polygon on layer1, toward the inside
of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.
LEFT BY value Translate the left edge(s) of each polygon on layer1, toward the inside
of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.
BOTTOM BY value Translate the bottom edge(s) of each polygon on layer1, toward the
inside of each polygon layer1, by the specified value. Value is a
non-negative real number in user units.

L-Edit 14 User Guide Section 3 615


Chapter 22: HiPer Verify: Calibre Command Files

SIZE

[polygon-layer =] SIZE layer1 BY size_value [OVERLAP ONLY|[INSIDE OF|OUTSIDE


OF] layer2 [STEP step_value]] [TRUNCATE distance]

[polygon-layer =] SIZE layer1 BY size_value [UNDEROVER|OVERUNDER] [TRUNCATE


distance]

Description

Performs a size up or size down on a layer. A positive size_value performs a size up, or grow, and a
negative size_value performs a size down, or shrink.

Parameters

layer1 A drawn or derived polygon layer


size_value The amount to grow or shrink the layer1 polygons. This value must be
positive if either UNDEROVER or OVERUNDER are specified.
UNDEROVER Undersize then oversize layer1 in a single operation.
OVERUNDER Oversize then undersize layer1 in a single operation.
OVERLAP ONLY Specifies that only the overlapping regions of the oversized polygons
are output.
INSIDE OF layer2 Constrains layer1 to travel inside layer2 when performing the SIZE
operation. size_value must be positive when this option is used.
OUTSIDE OF layer2 Constrains layer1 to travel outside layer2 when performing the SIZE
operation. size_value must be positive when this option is used
STEP step_value The step size of the sizing process. If size_value is not evenly
divisible by step_value then the last step may be smaller than
step_value in order to size by exactly size_value.
TRUNCATE distance The truncation distance to prevent large spikes when the size
operation is performed on small acute angles. The default value is
1/COS(67.5), approximately 2.61. At the default truncation distance,
corners at edges of >= 45 degree angles will not be truncated, corners
at edges of < 45 degrees will be truncated.

Optimizing SIZE Performance


The SIZE command, with STEP option as shown below:

SIZE layer1 BY size_value [INSIDE OF|OUTSIDE OF] layer2 [STEP step_value]]

will perform a sequence of size operations by step_value, until a total sizing of size_value has been
achieved (the last step_value may be reduced to obtain a size of exactly size_value). Certain foundry
DRC file contain very small values of step_value, resulting in a very large number of steps and slow
performance on these commands. Temporarily removing these commands by commenting them out can
significantly improve performance of the whole DRC job. You will also need to comment out layers
that derive from these operations.

L-Edit 14 User Guide Section 3 616


Chapter 22: HiPer Verify: Calibre Command Files

SNAP

[polygon-layer =] SNAP layer1 {r | x y}

Description

Produces a layer by snapping the vertices of the input layer to the specified grid. 45-degree edges are
preserved.

Parameters

LAYER1 A drawn or derived polygon layer.


r|XY Integer(s) in database units that specify the snap grid. A single value,
r, may be specified for both x and y snapping, or x and y snapping
values may be specified separately.

L-Edit 14 User Guide Section 3 617


Chapter 22: HiPer Verify: Calibre Command Files

STAMP

STAMP layer1 BY layer2 [ABUT ALSO]

Description

Produces a layer containing all layer1 polygons overlapped by layer2 polygons, and then transfers
connectivity from the layer2 polygons onto the output layer polygons. If a layer1 polygon is overlapped
by two or more layer2 polygons from different nets, or not overlapped at all, then the Stamp operation
does not output the layer1 polygon. Warning messages report missing or conflicting connections. The
ABUT ALSO option allows polygon abutment (touching at an edge) to establish a valid connection.

Parameters

layer1 A drawn or derived polygon layer.


layer2 A drawn or derived polygon layer.
ABUT ALSO Specifies that abutment of layer1 and layer2 is treated as an overlap.

L-Edit 14 User Guide Section 3 618


Chapter 22: HiPer Verify: Calibre Command Files

SVRF ERROR

SVRF ERROR message

Description

This specification statement, where message is a string, generates a fatal rule file compiler error with
message as the error message, if the statement is encountered during compilation. Since it always
generates an error, it should appear in a conditional statement.

Parameters

message A text string to be displayed, typically as a message for a compilation error.

Example

#ifndef ANTENNA SET


SVRF ERROR "Do not run these rules unless ANTENNA is set"
#endif

L-Edit 14 User Guide Section 3 619


Chapter 22: HiPer Verify: Calibre Command Files

TEXT DEPTH

TEXT DEPTH [PRIMARY | ALL | number]

Description

The TEXT DEPTH statement specifies the hierarchical depth for using text objects from the layout
database for application in net naming. TEXT DEPTH ALL selects text objects from throughout the
hierarchy, TEXT DEPTH PRIMARY selects only text objects from the top-level cell, and TEXT
DEPTH n1 selects text objects n1 levels below the top-level cell. TEXT DEPTH PRIMARY is the
default.

Text objects that come from lower levels of the hierarchy are transformed to the top-level coordinate
space and are replicated according to the hierarchical structure of the design. Such text objects then
behave as if they originated at the top level; this is true in flat as well as hierarchical applications. This
statement supports connectivity extraction only. It does not influence text objects used by the With Text
operation.

Parameters

PRIMARY Specifies that only text objects from the toplevel cell are selected.
This is the default behavior if you do not include this statement in the
rule file.
ALL Specifies that free-standing text objects from throughout the hierarchy
are used as top-level text.
number An non-negative integer that specifies to use text objects from number
levels below the top-level cell. Specifying zero is equivalent to
PRIMARY.

L-Edit 14 User Guide Section 3 620


Chapter 22: HiPer Verify: Calibre Command Files

TEXT LAYER

TEXT LAYER layer [...layer]

Description

Specifies the layers in the database from which text is used for net naming in connectivity extraction.
Only text objects on layers that appear in Text Layer specification statements will be used in net
naming. Thus, if there are no Text Layer specification statements in the rule file, then no database text
objects are used by the connectivity extractor. This statement may be specified any number of times.

This statement affects connectivity extraction only; it does not influence text objects used by With Text
or Expand Text operations in the rule file.

Parameters

layer A layer name or number of a drawn layer from which to read text.
You can specify layer any number of times in one statement. Layer
sets are allowed and are equivalent to specifying each layer of the set
individually.

Example

Ports on metal2 will not be used to label nets, because metal2 is not in the
TEXT LAYER list.
TEXT LAYER poly metal1 diff 16

L-Edit 14 User Guide Section 3 621


Chapter 22: HiPer Verify: Calibre Command Files

TITLE

TITLE rulesetname

Description

Specifies the title of the rule set. This command can appear only once in the command file.

Parameters

rulesetname A text string.

Examples

TITLE “DRC command file for 0.18 micron process”

L-Edit 14 User Guide Section 3 622


Chapter 22: HiPer Verify: Calibre Command Files

TOUCH

[polygon-layer =] layer1 [NOT] TOUCH layer2 [constraint [BY NET]]


[polygon-layer =] [NOT] TOUCH layer1 layer2 [constraint [BY NET]]

Description

Produces all layer1 polygons that are completely outside layer2 polygons but share an edge with layer2
polygons. The NOT option produces those layer1 polygons not produced by the corresponding TOUCH
operation. The input layers will be merged if the constraint option is used, and will run slower than the
TOUCH operation with no constraint.

(This option is not yet supported.) If BY NET is specified, the constraint applies to the number of layer2
polygons on distinct nets that CUT layer1.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
constraint Specifies the number of layer2 polygons that a layer1 polygon must
touch, in order to be selected by the TOUCH operation. Constraint is
any range defined by “Constraints” (page 491) where the constraints
values must be integer.
BY NET When the BY NET option is used, then a layer1 polygon is selected
when the specified number of layer2 polygons on distinct nets touch
the layer1 polygon. Layer2 must have connectivity.

L-Edit 14 User Guide Section 3 623


Chapter 22: HiPer Verify: Calibre Command Files

TOUCH EDGE

[edge-layer =] [NOT] TOUCH EDGE layer1 layer2


[edge-layer =] layer1 [NOT] TOUCH EDGE layer2

Description

Produces all layer1 edges that touch layer2 edges. TOUCH EDGE produces the whole edge on layer1
when part of an edge is coincident, whereas COINCIDENT EDGE will just produce that segment that
touches. The NOT option produces all layer1 edges not produced by the corresponding TOUCH EDGE
operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer or a derived edge layer.

L-Edit 14 User Guide Section 3 624


Chapter 22: HiPer Verify: Calibre Command Files

TOUCH INSIDE EDGE

[edge-layer =] [NOT] TOUCH INside EDGE layer1 layer2


[edge-layer =] layer1 [NOT] TOUCH INside EDGE layer2

Description

Produces all layer1 edges that touch layer2 edges from the inside. TOUCH INSIDE EDGE produces the
whole edge on layer1 when part of an edge is inside coincident, whereas COINCIDENT INSIDE EDGE
will just produce that segment that touches. The NOT option produces all layer1 edges not produced by
the corresponding TOUCH INSIDE EDGE operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer or a derived edge layer.

L-Edit 14 User Guide Section 3 625


Chapter 22: HiPer Verify: Calibre Command Files

TOUCH OUTSIDE EDGE

[edge-layer =] [NOT] TOUCH OUTside EDGE layer1 layer2


[edge-layer =] layer1 [NOT] TOUCH OUTside EDGE layer2

Description

Produces all layer1 edges that touch layer2 edges from the outside. TOUCH OUTSIDE EDGE produces
the whole edge when part of an edge is outside coincident, whereas COINCIDENT OUTSIDE EDGE
will just produce that segment that touches. The NOT option produces all layer1 edges not produced by
the corresponding TOUCH OUTSIDE EDGE operation.

Parameters

layer1 A drawn or derived polygon layer or a derived edge layer.


layer2 A drawn or derived polygon layer or a derived edge layer.

L-Edit 14 User Guide Section 3 626


Chapter 22: HiPer Verify: Calibre Command Files

VARIABLE

VARIABLE name {value | ENVIRONMENT}

Description

Allows the use of variables in place of numeric constants in the file.

Variables can be placed inside of Rule Check comments and resolved to their value in the Verification
Error Navigator by placing a carat (^) in front of the variable name. To display the (^) character, precede
it with a backslash (\).

Parameters

name A string that specifies the name of a variable

value A string, which is a real number or an equation. The equation can include
references to other variables

ENVIRONMENT A keyword that specifies that name is defined as an Environment variable in


the operating system.

Examples

The following commands:

VARIABLE POLY_WIDTH 2
Rule_PO.W { @ Poly width must be ^POLY_WIDTH microns.
INT poly < POLY_WIDTH
}

are equivalent writing:


Rule_PO.W { @ Poly width must be 2 microns.
INT poly < 2

L-Edit 14 User Guide Section 3 627


Chapter 22: HiPer Verify: Calibre Command Files

VERTEX

[polygon-layer =] VERTEX layer1 constraint

Description

Produces layer1 polygons whose vertex count conforms to the constraint.

Parameters

layer1 A drawn or derived polygon layer


constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be integer.

L-Edit 14 User Guide Section 3 628


Chapter 22: HiPer Verify: Calibre Command Files

VIRTUAL CONNECT COLON

VIRTUAL CONNECT COLON {NO | YES}

Description

Specifies that net names containing the colon character (:) are treated as virtually connected. Any set of
geometrically disjoint nets with net labels that have the same name up to the first colon in the name are
treated as a single net, if Virtual Connect Colon Yes is specified. The colon and all characters after it are
ignored when net names are matched. Colons can appear anywhere in the name with the exception that
a colon at the beginning of a name is treated as a regular character (that is, it has no special effect).

Parameters

NO Specifies for the tool to not create virtual connections for net names
containing a colon character (:). This is the default behavior when you
do not include this statement in the rule file
YES Specifies for the tool to create virtual connections for net names
containing a colon character (:).

Examples

VIRTUAL CONNECT COLON YES

1.Two geometrically distinct nets labeled N1: and N1:will be virtually connected. The name of the
resulting net will be N1.

2.Two geometrically distinct nets labeled N1 and N1: are NOT virtually connected because the first N1
does not contain a colon. A warning is given about two nets with the same name and the name N1 is
randomly assigned to one of them.

3.Geometrically distinct nets labeled VDD:, VDD:2, VDD:3, and will be virtually connected. The name
given will be VDD.

L-Edit 14 User Guide Section 3 629


Chapter 22: HiPer Verify: Calibre Command Files

VIRTUAL CONNECT NAME

VIRTUAL CONNECT NAME net_name [... net_name]

Description

Specifies virtual connections for the specified net names. Any set of geometrically disjoint nets that
share the same name are treated as a single net, if that name appears in a Virtual Connect Name
statement. This statement can be specified any number of times. Each name is a case-insensitive net
name. If Virtual Connect Colon is also specified, then Virtual Connect Name operates on names after
all colon suffixes have been stripped off.

Virtual connections are only made on the top-level cell. You can use the question mark (?) as a wildcard
to match zero or more characters.

Parameters

net_name A net name. You can specify net_name any number of times in one
statement. The name can be a string variable.

Example

In the following example any set of geometrically distinct nets with the name VDD will become a
single net, and any set of distinct nets with the name VCC will become a single net.

VIRTUAL CONNECT NAME “VDD” “VCC”

L-Edit 14 User Guide Section 3 630


Chapter 22: HiPer Verify: Calibre Command Files

VIRTUAL CONNECT SEMICOLON AS COLON

Description

See “VIRTUAL CONNECT COLON” (page 552). Treats nets having a semicolon in their name as if the
semicolon is a colon. VIRTUAL CONNECT COLON checks whether N is set to YES or NO. If
VIRTUAL CONNECT SEMICOLON is set to YES then semicolons in net names are treated as colons.

Examples

[1] VIRTUAL CONNECT COLON YES

VIRTUAL CONNECT SEMICOLON AS COLON YES

Three net segments labeled XYZ:1 XYZ:2 XYZ;3 are virtually connected as a single net when a
semicolon in a net label is treated as a colon.

[2] VIRTUAL CONNECT COLON NO

VIRTUAL CONNECT SEMICOLON AS COLON YES

or just

VIRTUAL CONNECT SEMICOLON AS COLON YES

No virtual connection will be made in three net segments labeled XYZ:1 XYZ:2 XYZ;3.

L-Edit 14 User Guide Section 3 631


Chapter 22: HiPer Verify: Calibre Command Files

WITH EDGE

Polygon Edge Operations


[polygon-layer =] [NOT] WITH EDGE layer1 layer2 [constraint]
[polygon-layer =] layer1 [NOT] WITH EDGE layer2 [constraint]

Description

Produces layer1 polygons that have edges or edge segments coincident with layer2. The constraint
specifies the number of layer1 edges that a layer1 polygon must have on layer2 to be selected. The NOT
option produces layer1 polygons that are not produced by the corresponding WITH EDGE operation.

Parameters

layer1 A drawn or derived polygon layer


layer2 A derived edge layer.
constraint Constraint is any range defined by “Constraints” (page 491) where
the constraints values must be integer.

Dimensional Check Operations

L-Edit 14 User Guide Section 3 632


Chapter 22: HiPer Verify: Calibre Command Files

WITH TEXT

[NOT] WITH TEXT layer1 text_ name [text_layer] [PRIMARY ONLY]

Description

Produces all layer1 polygons that intersect the location of text objects having the specified text_name.
The command parameter order must be observed. If text_layer is specified, then only text objects with
the specified name on layer text_layer are considered, otherwise all layers are considered.

The Text, Text Depth, and Text Layer statements have no effect on With Text operations.

Parameters

layer A drawn or derived polygon layer.


text_name The name of a text object, which can contain one or more question
mark (?) characters. The ? is a wildcard character that matches zero or
more characters. The name can be a string variable (see Variable).
text_layer A drawn layer containing text objects. Text_layer can be a layer name
or GDS number.
PRIMARY ONLY Specifies that only top-level text is to be considered.

Example:

The text_layer equal to 40 in the example below means to look only on layer 40 for “TEXTPAD”,
“PROBEPAD”, and “SCRIBE”. If the “40” were not present, then look on all layers.

LAYER pad 40
pad_t = pad WITH TEXT "TESTPAD" 40
pad_p = pad WITH TEXT "PROBEPAD" 40
pad_sc = pad WITH TEXT "SCRIBE" 40

L-Edit 14 User Guide Section 3 633


Chapter 22: HiPer Verify: Calibre Command Files

WITH WIDTH

[polygon-layer =] WITH WIDTH layer1 constraint

Description

Selects those polygons or portions of polygons that satisfy the width constraint. For constraints >w and
orthogonal geometry, this is equivalent to doing a SIZE layer1 BY (w/2) UNDEROVER.

Parameters

layer1 A drawn or derived polygon layer.


Constraint Specifies the width that the selected polygon or portion of a polygons
must have in order to be produced. Constraints of type > or >= are
allowed.

L-Edit 14 User Guide Section 3 634


Chapter 22: HiPer Verify: Calibre Command Files

XOR

[polygon-layer =] layer1 XOR layer2


[polygon-layer =] XOR layer1 layer2

Description

Calculates the region formed by both layers minus the region shared by both layers.

Parameters

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer

L-Edit 14 User Guide Section 3 635


Chapter 22: HiPer Verify: Calibre Command Files

Supported Calibre Commands

ƒ AND
ƒ Angle
ƒ Area
ƒ Attach
ƒ CMACRO
ƒ Coincident Edge
ƒ Coincident Inside Edge
ƒ Coincident Outside Edge
ƒ Connect
ƒ Convex Edge
ƒ Copy
ƒ Cut
ƒ Density — options not supported - GRADIENT, CORNER, RDB, TRUNCATE,
BACKUP, WRAP, CENTERED, BY POLYGON
ƒ Device
ƒ Disconnect
ƒ DMACRO
ƒ Donut
ƒ Drawn Acute
ƒ Drawn Offgrid
ƒ Drawn Skew
ƒ DRC Incremental Connect
ƒ DRC Maximum Results
ƒ DRC Print Area
ƒ DRC Print Perimeter
ƒ DRC Select Check
ƒ DRC Tolerance Factor
ƒ DRC Unselect Check
ƒ Enclose
ƒ Enclose Rectangle
ƒ Enclosure
ƒ Exclude Cell
ƒ Expand Edge
ƒ Expand Text
ƒ Extent
ƒ Extents
ƒ External
ƒ Flag Acute
ƒ Flag Nonsimple
ƒ Flag Offgrid
ƒ Flatten
ƒ Flatten Cell

L-Edit 14 User Guide Section 3 636


Chapter 22: HiPer Verify: Calibre Command Files

ƒ Flatten Inside Cell


ƒ Group
ƒ Grow
ƒ Holes
ƒ Include
ƒ Inside
ƒ Inside Cell
ƒ Inside Edge
ƒ Interact
ƒ Internal
ƒ Label Order
ƒ Layer
ƒ Layer Map
ƒ Layer Resolution
ƒ Length
ƒ Merge
ƒ Net
ƒ Net Area
ƒ Net Area RatioOptions Not Supported - INSIDE OF LAYER
ƒ Net Area Ratio Print
ƒ NOT
ƒ Not Angle
ƒ Not Area
ƒ Not Coincident Edge
ƒ Not Coincident Inside Edge
ƒ Not Coincident Outside Edge
ƒ Not Cut
ƒ Not Donut
ƒ Not Enclose
ƒ Not Enclose Rectangle
ƒ Not Inside
ƒ Not Inside Cell
ƒ Not Inside Edge
ƒ Not Interact
ƒ Not Length
ƒ Not Net
ƒ Not Outside
ƒ Not Outside Edge
ƒ Not Rectangle
ƒ Not Touch
ƒ Not Touch Edge
ƒ Not Touch Inside Edge
ƒ Not Touch Outside Edge
ƒ Not With Edge
ƒ Not With Text

L-Edit 14 User Guide Section 3 637


Chapter 22: HiPer Verify: Calibre Command Files

ƒ Not With Width


ƒ Offgrid
ƒ OR
ƒ Ornet
ƒ Outside
ƒ Outside Edge
ƒ Path Length
ƒ Perimeter
ƒ Polygon
ƒ Port Depth
ƒ Port Layer Polygon
ƒ Port Layer Text
ƒ Precision
ƒ Rectangle
ƒ Rectangle Enclosure
ƒ Rectangles
ƒ Resolution
ƒ Sconnect
ƒ Shift
ƒ Shrink
ƒ Size
ƒ Snap
ƒ Stamp
ƒ SVRF Error
ƒ Text Depth
ƒ Text Layer
ƒ Title
ƒ Touch
ƒ Touch Edge
ƒ Touch Inside Edge
ƒ Touch Outside Edge
ƒ Variable
ƒ Vertex
ƒ Virtual Connect Colon
ƒ Virtual Connect Depth
ƒ Virtual Connect Name
ƒ Virtual Connect Semicolon As Colon
ƒ With Edge
ƒ With Text
ƒ With Width
ƒ XOR

L-Edit 14 User Guide Section 3 638


Chapter 22: HiPer Verify: Calibre Command Files

Tanner Commands with no Calibre Equivalent

ƒ DRC Results Database


ƒ DRC Results Database Libname
ƒ DRC Results Database Precision
ƒ DRC Summary Report
ƒ Layout Base Cell
ƒ Layout Base Layer
ƒ Layout Path
ƒ Layout Path2
ƒ Layout Primary
ƒ Layout Primary2
ƒ Layout Top Layer
ƒ Mask Results Database
ƒ Mask SVDB Directory

Unsupported Calibre Commands

L-Edit does not support all of the Calibre commands, options or flags, particularly if they do not relate
to DRC. L-Edit does not support all of the Calibre commands, particularly if they do not relate to DRC,
or all of the options and flags in some commands.

ƒ AND (Single Layer Syntax)


ƒ Capacitance Alias
ƒ Capacitance Ignore
ƒ Capacitance Order
ƒ DBCLASSIFY
ƒ Deangle
ƒ Density Convolve
ƒ Device Layer
ƒ DFM Analyze
ƒ DFM Create Layer
ƒ DFM Critical Area
ƒ DFM Database
ƒ DFM Expand Edge
ƒ DFM Expand Enclosure
ƒ DFM Fill
ƒ DFM Function
ƒ DFM Grow
ƒ DFM Histogram
ƒ DFM Measure
ƒ DFM Property
ƒ DFM RDB

L-Edit 14 User Guide Section 3 639


Chapter 22: HiPer Verify: Calibre Command Files

ƒ DFM Select Check


ƒ DFM Size
ƒ DFM Spec Fill
ƒ DFM Spec Fill Optimizer
ƒ DFM Spec Fill Shape
ƒ DFM Transition
ƒ Drawn Angled
ƒ DRC Incremental Connect Warning
ƒ DRC Keep Empty
ƒ DRC Maximum Vertex
ƒ DRC Select Check By Layer
ƒ DRC Tolerance Factor NAR
ƒ DRC Unselect Check By Layer
ƒ ERC Cell Name
ƒ ERC Check Text
ƒ ERC Keep Empty
ƒ ERC Maximum Results
ƒ ERC Maximum Vertex
ƒ ERC Path Also
ƒ ERC Pathchk
ƒ ERC Results Database
ƒ ERC Select Check
ƒ ERC Summary Report
ƒ ERC Unselect Check
ƒ Exclude Acute
ƒ Exclude Angled
ƒ Exclude Offgrid
ƒ Exclude Skew
ƒ Expand Cell
ƒ Expand Cell Text
ƒ Extent Cell
ƒ Flag Angled
ƒ Flag Nonsimple Path
ƒ Flag Skew
ƒ Fracture HITACHI
ƒ Fracture JEOL
ƒ Fracture MEBES
ƒ Fracture MICRONIC
ƒ Fracture NUFLARE
ƒ Fracture VBOASIS
ƒ Hcell
ƒ Inductance MICheck
ƒ Inductance Wire
ƒ Layer Directory
ƒ Layout Allow Duplicate Cell

L-Edit 14 User Guide Section 3 640


Chapter 22: HiPer Verify: Calibre Command Files

ƒ Layout Bump2
ƒ Layout Case
ƒ Layout Cell List
ƒ Layout Depth
ƒ Layout Error On Input
ƒ Layout Ignore Text
ƒ Layout Input Exception Severity
ƒ Layout Magnify
ƒ Layout Merge On Input
ƒ Layout Polygon
ƒ Layout Preserve Case
ƒ Layout Preserve Cell List
ƒ Layout Process Box Record
ƒ Layout Property Audit
ƒ Layout Property Text
ƒ Layout Rename Cell
ƒ Layout Rename Text
ƒ Layout System
ƒ Layout System2
ƒ Layout Text
ƒ Layout Use Database Precision
ƒ Layout Windel
ƒ Layout Windel Cell
ƒ Layout Windel Layer
ƒ Layout Window
ƒ Layout Window Cell
ƒ Layout Window Clip
ƒ Layout Window Layer
ƒ Litho
ƒ Litho File
ƒ LVS Abort On ERC Error
ƒ LVS Abort On Softchk
ƒ LVS Abort On Supply Error
ƒ LVS All Capacitor Pins Swappable
ƒ LVS Box
ƒ LVS Builtin Device Pin Swap
ƒ LVS Cell List
ƒ LVS Cell Supply
ƒ LVS Check Port Names
ƒ LVS Compare Case
ƒ LVS Component Subtype Property
ƒ LVS Component Type Property
ƒ LVS Cpoint
ƒ LVS Device Type
ƒ LVS Discard Pins By Device

L-Edit 14 User Guide Section 3 641


Chapter 22: HiPer Verify: Calibre Command Files

ƒ LVS Downcase Device


ƒ LVS Exclude Hcell
ƒ LVS Execute ERC
ƒ LVS Expand Seed Promotions
ƒ LVS Expand Unbalanced Cells
ƒ LVS Filter
ƒ LVS Filter Unused Bipolar
ƒ LVS Filter Unused Capacitors
ƒ LVS Filter Unused Diodes
ƒ LVS Filter Unused MOS
ƒ LVS Filter Unused Option
ƒ LVS Filter Unused Resistors
ƒ LVS Global Layout Name
ƒ LVS Globals Are Ports
ƒ LVS Ground Name
ƒ LVS Heap Directory
ƒ LVS Ignore Ports
ƒ LVS Ignore Trivial Named Ports
ƒ LVS Inject Logic
ƒ LVS Isolate Shorts
ƒ LVS Map Device
ƒ LVS Netlist All Texted Pins
ƒ LVS Netlist Allow Inconsistent Model
ƒ LVS Netlist Box Contents
ƒ LVS Netlist Comment Coded Substrate
ƒ LVS Netlist Unnamed Box Pins
ƒ LVS NL Pin Locations
ƒ LVS Non User Name
ƒ LVS Out Of Range Exclude Zero
ƒ LVS Pin Name Property
ƒ LVS Power Name
ƒ LVS Precise Interaction
ƒ LVS Preserve Floating Top Nets
ƒ LVS Preserve Parameterized Cells
ƒ LVS Property Initialize
ƒ LVS Property Map
ƒ LVS Property Resolution Maximum
ƒ LVS Push Devices
ƒ LVS Recognize Gates
ƒ LVS Recognize Gates Tolerance
ƒ LVS Reduce
ƒ LVS Reduce Parallel Bipolar
ƒ LVS Reduce Parallel Capacitors
ƒ LVS Reduce Parallel Diodes
ƒ LVS Reduce Parallel MOS

L-Edit 14 User Guide Section 3 642


Chapter 22: HiPer Verify: Calibre Command Files

ƒ LVS Reduce Parallel Resistors


ƒ LVS Reduce Semi Series MOS
ƒ LVS Reduce Series Capacitors
ƒ LVS Reduce Series MOS
ƒ LVS Reduce Series Resistors
ƒ LVS Reduce Split Gates
ƒ LVS Reduction Priority
ƒ LVS Report
ƒ LVS Report Maximum
ƒ LVS Report Option
ƒ LVS Report Units
ƒ LVS Report Warnings Top Only
ƒ LVS Reverse WL
ƒ LVS Show Seed Promotions
ƒ LVS Show Seed Promotions Maximum
ƒ LVS Signature Maximum
ƒ LVS Soft Substrate Pins
ƒ LVS Softchk
ƒ LVS Spice Allow Duplicate Subcircuit Names
ƒ LVS Spice Allow Floating Pins
ƒ LVS Spice Allow Inline Parameters
ƒ LVS Spice Allow Unquoted Strings
ƒ LVS Spice Conditional LDD
ƒ LVS Spice Cull Primitive Subcircuits
ƒ LVS Spice Implied MOS Area
ƒ LVS Spice Multiplier Name
ƒ LVS Spice Option
ƒ LVS Spice Override Globals
ƒ LVS Spice Prefer Pins
ƒ LVS Spice Redefine Param
ƒ LVS Spice Rename Parameter
ƒ LVS Spice Replicate Devices
ƒ LVS Spice Slash Is Space
ƒ LVS Spice Strict WL
ƒ LVS Split Gate Ratio
ƒ LVS Strict Subtypes
ƒ LVS Write Injected Layout Netlist
ƒ LVS Write Injected Source Netlist
ƒ LVS Write Layout Netlist
ƒ LVS Write Source Netlist
ƒ Magnify
ƒ MDP Embed
ƒ MDP Mapsize
ƒ MDPmerge
ƒ MDPstat

L-Edit 14 User Guide Section 3 643


Chapter 22: HiPer Verify: Calibre Command Files

ƒ MDPverify
ƒ Not With Neighbor
ƒ Opcbias
ƒ Opclineend
ƒ Opcsbar
ƒ OR Edge
ƒ Parasitic Variation
ƒ Pathchk
ƒ PEX BA Mapfile
ƒ PEX Density Estimate
ƒ PEX Density Window
ƒ PEX Driver File
ƒ PEX Elayer
ƒ PEX Exclude Distributed
ƒ PEX Exclude Lumped
ƒ PEX Fill Handling
ƒ PEX Generate Driver_File Tag
ƒ PEX Ground
ƒ PEX Ground Layer
ƒ PEX Ideal Xcell
ƒ PEX Include Distributed
ƒ PEX Include Lumped
ƒ PEX Inductance Default PI
ƒ PEX Inductance Differential Pair
ƒ PEX Inductance Doprocess
ƒ PEX Inductance Filter
ƒ PEX Inductance Frequency
ƒ PEX Inductance Parameters
ƒ PEX Inductance Range
ƒ PEX Inductance Returnpath
ƒ PEX Inductance Self
ƒ PEX Inductance Switch_Time
ƒ PEX Inductance Victim
ƒ PEX Inductance Victim_File
ƒ PEX Inductance Victim_Path
ƒ PEX InductanceFrequency
ƒ PEX InductanceSwitch_Time
ƒ PEX Magnify
ƒ PEX Netlist ADMS
ƒ PEX Netlist Character Map
ƒ PEX Netlist Distributed
ƒ PEX Netlist Lumped
ƒ PEX Netlist Position File
ƒ PEX Netlist Simple
ƒ PEX Pin Order

L-Edit 14 User Guide Section 3 644


Chapter 22: HiPer Verify: Calibre Command Files

ƒ PEX Power
ƒ PEX Probe File
ƒ PEX Profile
ƒ PEX Reduce CC
ƒ PEX Reduce Coupled
ƒ PEX Reduce Distributed
ƒ PEX Reduce Lumped C
ƒ PEX Reduce ROnly
ƒ PEX Report Distributed
ƒ PEX Report Lumped
ƒ PEX Report Netsummary
ƒ PEX Resistance Parameters
ƒ PEX Skin Include
ƒ PEX Temperature
ƒ PEX Thickness EQN
ƒ PEX Thickness Nominal
ƒ PEX Threshold
ƒ PEX Tolerance Distributed
ƒ PEX Via Reduction Resistance
ƒ Pins
ƒ Ports
ƒ Push
ƒ Push Cell
ƒ Resistance Connection
ƒ Resistance Device_Seed
ƒ Resistance Rho
ƒ Resistance Sheet
ƒ Rotate
ƒ Snap Offgrid
ƒ Source Case
ƒ Source Path
ƒ Source Primary
ƒ Source System
ƒ SVRF Message
ƒ TDDRC
ƒ Text
ƒ Text Print Maximum
ƒ Topex
ƒ Trace Property
ƒ Unit Capacitance
ƒ Unit Inductance
ƒ Unit Length
ƒ Unit Resistance
ƒ Unit Time
ƒ Virtual Connect Box Colon

L-Edit 14 User Guide Section 3 645


Chapter 22: HiPer Verify: Calibre Command Files

ƒ Virtual Connect Box Name


ƒ Virtual Connect Report
ƒ With Neighbor

L-Edit 14 User Guide Section 3 646


23 HiPer Verify: Dracula Command
Files

Introduction

This section provides a reference to Dracula® compatible DRC and Extract command file format. *

Structure of a Dracula File

A Dracula format command file has the following major sections. Each block begins with a statement
that identifies the block and ends with an *END statement. The *END statement is always the last line
in the block. The block statements begin with an asterisk (*) in the first column.

“Description Block Commands” on page 652

The Description block contains Environment Setup commands and Geometry Flag commands.

The Description block describes the system and contains information about the circuit to be
checked, such as input/output devices, file names, and formats.

“Input-Layer Block Commands” on page 662

The Input-Layer block contains Drawn Layer and Text Layer definition commands.

“Operation Block Commands” on page 671

The Operation block contains the Boolean, size, selection, area, rule check and remaining
commands.

Create as many operation blocks as necessary to define your rules and processes. Individual
definitions are automatically concatenated in the order you specify.

L-Edit supports several Dracula extract commands.

Command Usage

Commands can be used as layer derivation statements, or in rule check statements.

ƒ A layer derivation statement consists of directing the results of a command to a named layer.
AND POLY ACTIVE GATE
ƒ A rule check statement uses the OUTPUT keyword to direct the results of a command to the
Verification Error Navigator. The name after the OUTPUT keyword is the rulename that will

* Dracula is a registered trademark of Cadence Design Systems, Inc.

L-Edit 14 User Guide Section 3 647


Chapter 23: HiPer Verify: Dracula Command Files Introduction

appear in the Verification Error Navigator. The number following the rulename is a layer number
used by Dracula.
EXT GATE LT 2.0 OUTPUT GAS1 64
ƒ Any command, not only dimensional check operations, may direct errors to the Verification Error
Navigator. For example
SEL VIA OUTSIDE METAL V1 OUTPUT V1 64

Conjunctive Rules

Errors from dimensional check operations can be reprocessed using conjunctive rule syntax. The
following commands can be used to create conjunctive rules:

ƒ ENC
ƒ EXT
ƒ INT
ƒ WIDTH
ƒ LENGTH

Consider the following sequence for finding M1 segments that are narrower than 3.0, closer than 5.0 to
other narrow segments , and longer than 10.0:

WIDTH M1 LT 3.0 &


EXT M1 LT 5.0 &
LENGTH M1 GE 10.0 OUTPUT M1_THINCLOSELONG 64

The & operator causes the results of the command to be placed on a temporary layer conjoined to M1.
Any references to M1 after the & and before the next OUTPUT keyword will use the temporary layer,
and will continue to filter the results until they are output by the OUTPUT statement. After the
OUTPUT statement, usage of M1 will refer to the original M1 layer.

Conjunctive rename allows renaming of the result of a conductive rule. Consider the following
sequence for finding M1 segments that are closer than 5.0 to other M1 segments, and longer than 10.0.
The results of the first operation are put on a layer called &M1CLOSE.

EXT M1&M1CLOSE LT 5.0 &


LENGTH &M1CLOSE GE 10.0 OUTPUT M1_CLOSELONG 64

Dimensional Check statements can also output results to a named layer, for subsequent processing using
the R or R’ flag. Consider the following sequence for finding GATE lengths less than 0.5:

AND POLY ACTIVE GATE


ENC [TR] GATE ACTIVE LT 0.001 GL
PLENGTH GL LT 0.5 OUTPUT GATELENGTH 64

Navigation in the Text Editor


To speed navigation in the text editor, you can right-click on a layer name to access the command “Go
To Layer Definition” in the context-sensitive menu, which jumps the cursor to the line with the
definition for that layer.

L-Edit 14 User Guide Section 3 648


Chapter 23: HiPer Verify: Dracula Command Files Introduction Attaching Text

Attaching Text

In L-Edit, you do not directly attach text strings to layout geometries. Text strings are part of a separate
layer and do not have pointers back to polygons. Dracula attaches text to its corresponding geometry
according to your definition in the Input-Layer block.

The ATTACH command attaches text to a geometry on a layer. The following command will attach text
on layer 9 to layer Metal. Text on layer 9 can now only be used to attach to metal, and will not attach to
any other layer.

* INPUT-LAYER
Metal = 9 TEXT = 9 ATTACH Metal

The following command will attach text on layer 109 to layer Metal.

* INPUT-LAYER
Metal = 9 TEXT = 109 ATTACH Metal

The ATTACH command can also be written on a separate line than the layer definition:

* INPUT-LAYER
Metal = 9
TEXT = 109 ATTACH Metal

Text that is not attached to a specific layer can attach to any layer, as specified by the
CONNECT-LAYER command, and the optional TEXTSEQUENCE COMMAND. In the following
example, text on layer 9 will label any layer, according to CONNECT-LAYER and TEXTSEQUENCE,
as there is no ATTACH command.

* INPUT-LAYER
Metal = 9 TEXT = 9

Example

*INPUT-LAYER
diffus = 2
poly = 8
metal = 9 TEXT = 60
text = 20 ATTACH metal
CONNECT-LAYER = diffus poly metal
PAD-LAYER = vapox
*END

In this example, the text on layer 60 is not specifically attached to one layer, so it attaches to one of the
connect layers. The text on layer 20 can attach only to layer metal.

Dracula attaches text in the reverse order of the CONNECT-LAYER, where the metal layer has the
highest priority and the diffusion layer the lowest. In the previous example, text strings with coordinates
within the metal geometries are attached to the metal layer and eliminated from further attachments. All
remaining text in the polysilicon is attached. Finally, the text in the diffusion is attached and Dracula
discards any text outside the three layers.

Net Naming Rules and Conventions

L-Edit 14 User Guide Section 3 649


Chapter 23: HiPer Verify: Dracula Command Files Introduction Attaching Text

Nets are formed in Dracula by the command

CONNECT layer1 layer2 BY connect-layer

Nets may be named by placing text labels (L-Edit ports) overlapping the polygons that form a net, thus
assigning the net a name equal to the text of the label. The rules describing how labels are used to name
nets in Dracula are described in this section. Note that SELECT LABEL, which selects polygons on a
layer with a specified net name, is the only Dracula DRC command that specifically uses a net name.
(This is distinct from the SELECT BY LABEL command, which selects polygons on a layer based on
overlapping text labels, and is completely unrelated to nets.)

The CONNECT-LAYER command in the Input-Layer Block defines the conductor layers of the IC
process from bottom to top. If you use a CONNECT command in the Operation block, you must use the
CONNECT-LAYER command in the Input-Layer block. Specify only the layers that appear in the
CONNECT commands (excluding the contact layers). You can specify multiple layer names on one line
or use multiple lines.

The TEXTSEQUENCE command in the Input-Layer Block redefines the text sequence generated by
the CONNECT-LAYER command. The TEXTSEQUENCE command reorders the interconnect layers
for attaching text. Text attaches first to the rightmost argument, then in order from right to left, similar
to the CONNECT-LAYER command.

Translation to Calibre:

CONNECT-LAYER = bottom-layer ... middle-layer ... top-layer

Translates to:

TEXT LAYER bottom-layer ... middle-layer ... top-layer


LABEL ORDER top-layer ... middle-layer ... bottom-layer

Note that layer order is reversed.

If TEXTSEQUENCE is present, then

CONNECT-LAYER = bottom-layer ... middle-layer ... top-layer


TEXTSEQUENCE = middle-layer ... bottom-layer

Translates to:

TEXT LAYER bottom-layer ... middle-layer ... top-layer


LABEL ORDER bottom-layer ... middle-layer ...

Note that layer order is reversed and CONNECT-LAYER is required, regardless of the
presence of TEXTSEQUENCE.

Simple Example of a Dracula File

*DESCRIPTION
; Place environment commands in the DESCRIPTION block.
SCALE = .001 MICRON
RESOLUTION = .001 MICRON
FLAGNON45 = YES
FLAG-OFFGRID = YES

L-Edit 14 User Guide Section 3 650


Chapter 23: HiPer Verify: Dracula Command Files Introduction Attaching Text

*END

*INPUT-LAYER
; Define input layers in the INPUT-LAYER block.
POLY = 1
*END

*OPERATION
; Place Boolean, Select, Size, and Dimensional check operations
; in the OPTATION block
WIDTH POLY LT 0.18 OUTPUT POW1A 63

*END

L-Edit 14 User Guide Section 3 651


Chapter 23: HiPer Verify: Dracula Command Files Introduction Attaching Text

Description Block Commands

L-Edit 14 User Guide Section 3 652


Chapter 23: HiPer Verify: Dracula Command Files Introduction DELCEL

DELCEL

DELCEL = name …

Description

Excludes instances of specified cells from layout when processing DRC commands. Cells may also be
excluded from DRC processing by checking “Exclude instances of this cell from DRC” in the
Cell > Info dialog in L-Edit.

Arguments

name The name of a cell. If a cell name has spaces, then the name is in
quotes. Name can be specified any number of times in one statement

Examples

DELCEL LOGO PICTURE

Calibre Format

EXCLUDE CELL name …

L-Edit 14 User Guide Section 3 653


Chapter 23: HiPer Verify: Dracula Command Files Introduction FLAG-ACUTEANGLE

FLAG-ACUTEANGLE

FLAG-ACUTEANGLE = NO | YES

Description

Reports an error for any two consecutive edges of a drawn polygon or wire that form an acute angle.
This command can appear only once in the command file.

Arguments

NO Default. Do not report acute angles.


YES Report acute angles.

Examples

FLAG-ACUTE = YES

Calibre Format

FLAG ACUTE {NO | YES}

L-Edit 14 User Guide Section 3 654


Chapter 23: HiPer Verify: Dracula Command Files Introduction FLAG-NON45

FLAG-NON45

FLAG-NON45 = NO | YES

Description

Reports an error for any non-90 or non-45 degree edge of a drawn polygon or centerline segment of a
drawn wire. Reporting is based on the angle of the edge in its cell coordinate space, not in coordinate
space of instances of that cell. This command can appear only once in the command file.

Arguments

NO Default. Do not report non-90/non-45 degree edges.


YES Report non-90/non-45 degree edges.

Examples

FLAG-NON45 = YES

Calibre Format

FLAG SKEW {NO | YES}

L-Edit 14 User Guide Section 3 655


Chapter 23: HiPer Verify: Dracula Command Files Introduction FLAG-OFFGRID/FLAG-PTH-OFFGRID

FLAG-OFFGRID/FLAG-PTH-OFFGRID

FLAG-OFFGRID = NO | YES {grid-value}


FLAG-PTH-OFFGRID = NO | YES

Description

Reports an error for every offgrid vertex of drawn polygons and wires. Also reports errors for offgrid
instance placements, rotated instances, and instance arrays and scaling that could result in offgrid
geometry. Checking and reporting is done in the context of the cell. The grid is defined by the
RESOLUTION command, or can be overridden by the FLAG-OFFGRID command. This command can
appear only once in the command file.

Note: L-Edit/DRC does not have separate control of offgrid checking for polygons and wires. If either
of these options are YES, then L-Edit/DRC will check polygons, wires and instances for offgrid.

Arguments

NO Default. Do not report offgrid vertices and instances.


YES Report offgrid vertices and instances.
GRID-VALUE Grid value that overrides the RESOLUTION value.

Examples

FLAG-OFFGRID = YES

Calibre Format

FLAG OFFGRID YES

L-Edit 14 User Guide Section 3 656


Chapter 23: HiPer Verify: Dracula Command Files Introduction FLAG-SELFINTERS/FLAG-SELFTOUCH

FLAG-SELFINTERS/FLAG-SELFTOUCH

FLAG-SELFINTERS = YES {FULL}

Description

Report an error if two edges on the same drawn polygon intersect or if filled region of the polygon is
ambiguous. Wires are checked for intersections based on the outer boundary of the wire.

Self-intersecting polygons and wires are always reported as errors. Self intersecting polygons and wires
are ignored by all layer generation and rule checking commands. A no argument in this command will
be ignored, and self-intersections will be checked anyway. The FULL option tells DRACULA to flag
re-entrant polygons. In L-Edit DRC these are always flagged, so the FULL option is not required. This
command can appear only once in the command file.

Examples

FLAG-SELFINTERS = YES

Calibre Format

FLAG NONSIMPLE YES

L-Edit 14 User Guide Section 3 657


Chapter 23: HiPer Verify: Dracula Command Files Introduction RESOLUTION

RESOLUTION

RESOLUTION = step-size units

Description

Defines the grid size for offgrid checking by the FLAG-OFFGRID command. This command can
appear only once in the Description Block.

Note: L-Edit/DRC will not automatically snap offgrid vertices to the RESOLUTION grid, as Dracula
will.

Arguments

step-size A positive integer that defines the grid size for offgrid checking by
the FLAG-OFFGRID command.
units MICRONS or MILS ( MICRON, MIC, and MIL are also allowed.)

Examples

RESOLUTION = 0.010 MICRONS

Calibre Format

RESOLUTION 1/step-size

L-Edit 14 User Guide Section 3 658


Chapter 23: HiPer Verify: Dracula Command Files Introduction SCALE

SCALE

SCALE = unit-size units

Description

Specifies the number of internal database units that equals one layout unit. This command can appear
only once in the Description Block.

Arguments

unit-size A positive integer.


Units MICRONS or MILS ( MICRON, MIC, and MIL are also allowed.)

Examples

scale= .001 MICRONS

Calibre Format

PRECISION 1/unit-size

L-Edit 14 User Guide Section 3 659


Chapter 23: HiPer Verify: Dracula Command Files Introduction TEXT-LEVEL

TEXT-LEVEL

TEXT-LEVEL = n1:n2 / n

Description

Specifies the number of levels of hierarchy from which to read text. This command applies to cell and
composite texts. Count the depth levels from the primary cell or level 0.

Note: TEXT-LEVEL = 0 has the same effect as the TEXT-PRI-ONLY = YES command.

Arguments

n1:n2 The range of levels of hierarchy from which Dracula reads text.
n The range from 0 to n levels of hierarchy from which text is read.

Example

In this example, Dracula reads text from the primary cell:

TEXT-LEVEL = 0

In this example, Dracula reads text from level 0 to level 3:

TEXT-LEVEL = 3

In this example, Dracula reads text from level 3 to level 5:

TEXT-LEVEL = 3:5

In this example, Dracula reads text from level 3 only:

TEXT-LEVEL = 3:3

Translation to Calibre

TEXT-LEVEL = n
translates to: TEXT DEPTH = n

TEXT-LEVEL = n1:n2
translates to: TEXT DEPTH = >= n1 <= n2 (Not standard Calibre.)

L-Edit 14 User Guide Section 3 660


Chapter 23: HiPer Verify: Dracula Command Files Introduction TEXT-PRI-ONLY

TEXT-PRI-ONLY

TEXT-PRI-ONLY = YES/NO

Description

Processes only the text associated with the top-level (primary) cell in the layout. This command ignores
text associated with cells nested below the top-level cell, even if the text is on the same text layer
number. If you do not specify TEXT-PRI-ONLY, Dracula places all text at the top level and processes
it. However, the TEXT-LEVEL command will override TEXT-PRI-ONLY.

Arguments

YES Translates to TEXT-DEPTH = PRIMARY.


NO Translates to TEXT-DEPTH = ALL (default).

Translation to Calibre

TEXT-PRI-ONLY = YES
translates to TEXT DEPTH = PRIMARY

TEXT-PRI-ONLY = NO

translates to TEXT DEPTH = ALL (default)

Note: Dracula default is to process text from all cells. Calibre default is to process text from
toplevel (primary) cell only.

L-Edit 14 User Guide Section 3 661


Chapter 23: HiPer Verify: Dracula Command Files Introduction TEXT-PRI-ONLY

Input-Layer Block Commands

L-Edit 14 User Guide Section 3 662


Chapter 23: HiPer Verify: Dracula Command Files Introduction Layer Assignment

Layer Assignment

layer-name = layer-number {OFFGRID = off-grid} {DATATYPE = data-type}


{TEXT = text-layer} {IDTEXT layer} {TEXTTYPE text-type} {ATTACH
layer-name1}

TEXT = text-layer {TEXTTYPE text-type} {ATTACH layer-name1}

Description

Defines the name of a drawn layer in terms of its GDSII number.

A layer assignment statement is required in the command file in order to use a drawn layer in a layer
derivation or DRC command when running DRC from within the L-Edit environment. Layer
assignments statements can be used to map a layer name in the L-Edit editing environment to a different
name in the DRC command file by assigning the same GDSII number to the layer in each location.

To make a layer in the tdb file to be equal to different layer name in the DRC command file then assign
the same GDS number to that layer in Setup Layers > General in the tdb file, and to the new name in a
layer assignment statement in the command file. A summary of mappings will be reported in the DRC
Summary Report for all layer names that are different in the tdb file and command file.

Arguments

layer-name User-defined layer name. You can use the same layer name on more
than one line to group layers from different layer numbers.
layer-number The GDS number of the assigned layer in the layout CAD system.
Also, you can use inclusive range values (for example, metal = 1:3.
DATATYPE = data-type Specifies a datatype or range of datatypes for the corresponding GDS
number, to assign to the layer. A range of datatypes is specified as
DATATYPE=5:10. The default is all datatypes.
TEXT = text-layer Specifies the GDS layer number for text.
TEXTTYPE = text-type The GDS datatype or range of datatypes for the corresponding GDS
number, to assign to the layer. Text-type is the same as datatype, but
refers to text objects.
ATTACH layer-name1 The attach operation assigns names to extracted nets using text
objects (ports) placed on the layout. It attaches the name of a text
object on layer1 to a net containing a polygon on layer2 if the polygon
completely covers the text object. The layer-name1 parameter is the
layer name given to the text defined by the text-layer parameter. The
layers specified by layer-name1must appear in a CONNECT-LAYER
or TEXTSEQUENCE command.

Unsupported Arguments

ANGLE = ALL/90/45/NON-45/ACUTE/NON-90/NON-ACUTE

L-Edit 14 User Guide Section 3 663


Chapter 23: HiPer Verify: Dracula Command Files Introduction Layer Assignment

Examples

Example1:

Poly1 = 46

Example2: Layer OD consists of GDS layers 3, 11, and 12.

OD = 3
OD = 11
OD = 12

Example 3: Using DATATYPE

METAL1-TIGHT = 49 DATATYPE = 1
METAL1 = 49 DATATYPE 0:3

METAL1 does not contain objects from layer 49 datatype 1, as these were used by METAL1-TIGHT.

Calibre Format

// Dracula command: Layer-name = layer-number

LAYER layer-name layer-number

// Dracula command: layer-name = layer-number DATATYPE = 5:10


LAYER layer-name 1000 // 1000 is a temporary GDS number
LAYER MAP layer-number DATATYPE >=5 <= 10 1000

L-Edit 14 User Guide Section 3 664


Chapter 23: HiPer Verify: Dracula Command Files Introduction Layer-Name Definition

Layer-Name Definition

layer-name = layer-number {OFFGRID = off-grid} {DATATYPE = data-type}


{TEXT = text-layer} {TEXTTYPE text-type} {ATTACH layer-name1}
{ANGLE = ALL/90/45/NON-45/ACUTE/NON-90/NON-ACUTE}

TEXT = text-layer layer-purpose {TEXTTYPE text-type} {ATTACH layer-name1}


{ANGLE = ALL/90/45/NON-45/ACUTE/NON-90/NON-ACUTE}

Description

The layer-name variable assigns names to layout layers. You can name layers from GDSII, Edge, EDIF,
or CIF formats.

Note: Dracula can read the same layer for both TEXT and CTEXT text, but you cannot
attach text in the same layer to different layers.

For example, in the following some of the text attached to MET is lost:

POLY=3 CTEXT=29 ATTACH=POLY


MET=6 CTEXT=29 ATTACH=MET
VAPOX=7 TEXT=29

Arguments

layer-name User-defined layer name.


layer-number The GDS number for the layer name.
off-grid Translate to Calibre: layer-name_offgrid {OFFGRID layer-name
off-grid}
data-type Specifies a datatype or range of datatypes for the corresponding GDS
number, to assign to the layer. A range of datatypes is specified as
DATATYPE=5:10. The default is all datatypes.
text-layer The text that is plotted when you specify the PLOT commands. Text
can be designated as a layer-name so that it is associated with a layer
number, for example, text = 60 ATTACH metal. Range value as
entered with a colon, for example, TEXT=13:44. The default is that
TEXT is not used
text-type The GDS datatype or range of datatypes for the corresponding GDS
number, to assign to the layer. Text-type is the same as datatype, but
refers to text objects.

L-Edit 14 User Guide Section 3 665


Chapter 23: HiPer Verify: Dracula Command Files Introduction Layer-Name Definition

ATTACH layer-name1 The attach operation assigns names to extracted nets using text
objects (ports) placed on the layout. It attaches the name of a text
object on layer1 to a net containing a polygon on layer2 if the polygon
completely covers the text object.

The layer-name1 parameter is the layer name given to the text defined
by the text-layer parameter. The layers specified by layer-name1 must
appear in a CONNECT-LAYER or TEXTSEQUENCE command.

Calibre Format

Example 1:

layer-name = layer-number DATATYPE datatype TEXT = text-layer TEXTTYPE


text-type ATTACH layername1

This is the same as if the line had been separated into two lines, as shown below:

layer-name = layer-number DATATYPE datatype


TEXT = text-layer TEXTTYPE text-type ATTACH layername1

Example 2:

a)

TEXT = gds-text-layer ATTACH layer-name1

Translation:

TEXT LAYER gds-text-layer


ATTACH gds-text-layer layer-name1

b)

TEXT = 49 ATTACH Metal1

Translation:

TEXT LAYER 49
ATTACH 49 Metal1

Example3:

a)

TEXT = gds-text-layer TEXTTYPE text-type ATTACH layer-name1

Translation:

LAYER TEMP 1001


LAYERMAP == gds-text-layer TEXTTYPE constraint text-type 1001

L-Edit 14 User Guide Section 3 666


Chapter 23: HiPer Verify: Dracula Command Files Introduction Layer-Name Definition

b)

TEXT = 49 TEXTTYPE 2 ATTACH Metal1

Translation:

LAYER TEMP 1001


LAYER MAP == 49 TEXTTYPE == 2 1001
TEXT LAYER TEMP
ATTACH TEMP Metal1

L-Edit 14 User Guide Section 3 667


Chapter 23: HiPer Verify: Dracula Command Files Introduction CONNECT LAYER

CONNECT LAYER

CONNECT-LAYER = layer1 layer2 …

Description

CONNECT-LAYER defines the layer sequence in which polygons on a net are examined for
intersection and attachment with a net naming label. The process of assigning label names to nets gives
first priority to explicit ATTACH commands, then to implicit attachment (labels on same layer as
overlapping polygon), and then to the CONNECT-LAYER for the remaining text labels. When multiple
polygons on different nets overlap a label, then the net with the polygon whose layer appears last in the
CONNECT-LAYER list is labeled with the value of the net name. The TEXTSEQUENCE command
overrides the sequence given by CONNECT-LAYER.

If you use a CONNECT command in the Operation block, you must have a CONNECT-LAYER
command in the Input-Layer block. Only layers that appear in CONNECT commands can appear in the
CONNECT-LAYER command. Contact layers should not be listed. You can specify multiple layer
names on one line or use multiple lines.

Arguments

layer1 A drawn or derived layer.


layer2 A drawn or derived layer.

Translation to Calibre

Connect-Layer = layer1 layer2 layer3 … layerN

Translates to:

TEXT LAYER layer1 layer2 layer3 … layerN


LABEL ORDER layerN … layer3 layer2 layer1

Note: Note that the layer order is reversed in this translation, as required for the Label Order
specification statement in Calibre.

L-Edit 14 User Guide Section 3 668


Chapter 23: HiPer Verify: Dracula Command Files Introduction IDTEXT

IDTEXT

layer1 = IDTEXT layerNumber

Description

Specifies text layers to be used with SELECT BY LABEL. The IDTEXT command is used only with
the SELECT BY LABEL {[t] | [t']} command. IDTEXT lets you add text to layers for identification
purposes. These layers are independent of connectivity. You can select polygons by idtext names from a
particular idtext layer.

Arguments

layer1 Layer name for text used by SELECT BY LABEL.


layerNumber GDS number of the layer used in the SELECT BY LABEL command.

Example

*INPUT-LAYER
metal1 = 1
IDTXT8 = IDTEXT 8
*END
*OPERATION
SELECT METAL1 BY IDTXT8 LABEL[T] VDD? MT1VDD
*END

L-Edit 14 User Guide Section 3 669


Chapter 23: HiPer Verify: Dracula Command Files Introduction TEXTSEQUENCE

TEXTSEQUENCE

TEXTSEQUENCE = layer1 layer2...

Description

The TEXTSEQUENCE command overrides the sequence given by CONNECT-LAYER. When


multiple polygons on different nets overlap a label, then the net with the polygon whose layer appears
last in the TEXTSEQUENCE list, if it is present, is labeled with the value of the net name. Text attaches
first to the rightmost argument, then in order from right to left.

Arguments

layer The name of the layer in the TEXTSEQUENCE command (excluding


contact layers).

Calibre Format

*INPUT-LAYER
metal1 = 1
IDTXT8 = IDTEXT 8
*END
*OPERATION
SELECT METAL1 BY IDTXT8 LABEL[T] VDD? MT1VDD
*END

TEXTSEQUENCE = layer1 layer2 layer3 … layerN

Translates to:

LABEL ORDER layerN … layer3 layer2 layer1

Note that the layer order is reversed in this translation, as required for the Label Order specification
statement in Calibre.

L-Edit 14 User Guide Section 3 670


Chapter 23: HiPer Verify: Dracula Command Files Introduction TEXTSEQUENCE

Operation Block Commands

L-Edit 14 User Guide Section 3 671


Chapter 23: HiPer Verify: Dracula Command Files Introduction AND

AND

AND layer1 layer2 result-layer {OUTPUT c-name l-num {d-num}}

Description

Calculates the intersection of layer1 and layer2.

Arguments

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

Calibre Format

result-layer = layer1 AND layer2

Or

c-name { @ AND layer1 layer2 l-num


AND layer1 layer2
}

L-Edit 14 User Guide Section 3 672


Chapter 23: HiPer Verify: Dracula Command Files Introduction ANDNOT

ANDNOT

ANDNOT layer1 layer2 and-result not-result

Description

Produces the AND and NOT of two input layers in a single operation.

Arguments

,layer1 A drawn or derived polygon layer.


layer2 A drawn or derived polygon layer.
and-result The result of layer1 AND layer2
not-result The result of layer1 NOT layer2

L-Edit 14 User Guide Section 3 673


Chapter 23: HiPer Verify: Dracula Command Files Introduction AREA

AREA

AREA layer1 constraint result-layer {OUTPUT c-name l-num {d-num}}

Description

Produces layer1 polygons whose area conforms to the constraint.

Arguments

layer1 A drawn or derived polygon layer


constraint NE n1— produces polygons whose area is not equal to n1.

EQ n1 — whose area is equal to n1.

RANGE n1 n2 — produces polygons with areas such that n1 < AREA


< n2. (Exclusive).
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored

Calibre Format

result-layer = layer1 AREA layer1 >=n1 <= n2

Or

c-name {
AREA layer1 >=n1<=n2

L-Edit 14 User Guide Section 3 674


Chapter 23: HiPer Verify: Dracula Command Files Introduction CAT

CAT

CAT layer1 layer2 result-layer {OUTPUT c-name l-num {d-num}}

Description

Calculates the region formed by both layers minus the region shared by both layers. Performs the same
operation as the OR command.

Arguments

,layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

L-Edit 14 User Guide Section 3 675


Chapter 23: HiPer Verify: Dracula Command Files Introduction CONNECT

CONNECT

CONNECT layer1 layer2 BY connect-layer

Description

Defines a connection between overlapping objects on layer1 and layer2, where there is positive area
overlap of layer1, layer2 and connect-layer. Connected objects are part of the same electrical net.

Arguments

layer1 A drawn or derived layer.


layer2 A drawn or derived layer.
connect-layer A drawn or derived layer. This specifies a contact layer.

L-Edit 14 User Guide Section 3 676


Chapter 23: HiPer Verify: Dracula Command Files Introduction CORNER

CORNER

CORNER {[option]} layer1 relation-a {relation-b} {CORNER-SIZE n}


result-layer {OUTPUT c-name l-num {d-num}}

Description

Identifies polygon corners and creates boxes on corner vertices.

Arguments

option A — Report 90° corners only.


B — Report 45° corners only.
C — Report any angle corners
layer1 A drawn or derived polygon layer.
relation-a INSIDE — Creates boxes on the inside of polygons.
OUTSIDE — Creates boxes on the outside of polygons.
relation-b INNER — Creates boxes on the concave side of corners
OUTER — Creates boxes on the convex side of corners
Used in combination with INSIDE or OUTSIDE, the INNER and
OUTER options filter the output to produce only those boxes that
meet both relation-a and relation-b.
CORNER-SIZE n The size of the boxes created. Default value is 2 times the
RESOLUTION, if this value is not specified.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored

Calibre Format

There is no Calibre command corresponding to the Dracula CORNER command.

L-Edit 14 User Guide Section 3 677


Chapter 23: HiPer Verify: Dracula Command Files Introduction COVERAGE

COVERAGE

COVERAGE layer1 constraint windowSize stepSize result-layer

COVERAGE {NOT} layer1 constraint windowSize stepSize {OUTSQU square-layer}


{SQSZ size-of-square}{result-layer} {OUTPUT c-name l-num}

COVERAGE {NOT} layer1 constraint RECT rectanglelayer {result-layer} {OUTPUT


c-name l-num}

COVERAGE layer1 percentage windowSize stepSize result-layer

COVERAGE {NOT} layer1 LT/GT/RANGE percentage windowSize stepSize


{OUTSQU square-file} {SQSZ size-of-square} {trapfile} {OUTPUT result-layer}

COVERAGE {NOT} layer1 LT/GT/RANGE percentage RECT rectanglelayer {trapfile}


{OUTPUT result-layer}

Description

Reports an error for rectangular window within which the ratio of the area of layer1 to the area of the
window meets the constraint. Error flags are the rectangle in which the violation occurs. Results are
merged prior to output.

Arguments

layer1 A drawn or derived polygon layer.


constraint Specifies the ratio of the area of layer1 to the area of the specified
boundary that must exist for the boundary polygon to be produced.
The values p1 and p2 must be non-negative real numbers. The
following constraints can be chosen:

LT/LE p1— Output windows in which the ratio of the area of layer1
to the area of the window is < or <= to p1.

RANGE p1 p2 — Output windows in which the ratio of the area of


layer1 to the area of the window is > p1 < p2.

GT/GE p1— Output windows in which the ratio of the area of layer1
to the area of the window is >or >= to p1.

EQ p1— Output windows in which the ratio of the area of layer1 to


the area of the window is = to p1.
NOT Takes the compliment of the constraint.
windowSize Specifies a window size within which the density check is computed.
stepSize Specifies the step size for moving the window.
OUTSQU square-layer Square-layer is a derived polygon layer containing squares of size
size-of-square located at the center of each violating window.

L-Edit 14 User Guide Section 3 678


Chapter 23: HiPer Verify: Dracula Command Files Introduction COVERAGE

SQSZ size-of-square Specifies the size of squares on square-layer. If this parameter is not
present, the default value is the stepSize.
RECT rectanglelayer Specifies that, for each rectangle on rectanglelayer, check the ratio
(area of layer1) / ( area of rectangle), and output if the ratio meets the
specified constraint.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name.

Example

COVERAGE POLY LT 0.35 10 10 OUTSQU squareLayer SQSZ 2 PolyDen4 OUTPUT


PolyDen4 64
COVERAGE POLY LT 0.35 10 10 OUTSQU squareLayer2 PolyDen5 OUTPUT PolyDen5 64

Calibre Format

rule-name {@ layer1 density constraint


DENSITY layer1 constraint WINDOW w STEP s
}

L-Edit 14 User Guide Section 3 679


Chapter 23: HiPer Verify: Dracula Command Files Introduction DEVTAG

DEVTAG

DEVTAG element[type] layer-b layer-c


(for tagging from a defined ELEMENT BJT device)

DEVTAG[L] layer-a layer-b layer-c


(for tagging from an intermediate layer)

DEVTAG[S] BJT[type] layer-d layer-e

DEVTAG[LS] layer-c layer-f layer-g

Description

Defines aliases for certain layers described in extract electrical properties by tagging multiple layers that
are parts of a device with device numbers assigned by the device layer. You must define the device in
the ELEMENT (see page 682) command before using this command.

The DEVTAG command links device numbers of the layers that form multiple emitter or collector
bipolar devices in the layout database. It tags device number information onto the tagged layer (layer-b)
from the tagging layer (device layer or layer-a) when polygons in the tagging layer overlap or touch
polygons in the tagged layer. DEVTAG outputs tagged polygons to output layer-c.

Multiple tagging is allowed in bipolar devices where you can link a polygon to several devices. When
the tagged layer (layer-b) is not directly overlapped to the device layer, an intermediate layer (such as a
SIZE layer) can tag the device number information. You do not have to tag the device layer in the
ELEMENT command.

While extracting parameters from a multiple-terminal device, make sure the function or use of all
generated layers from which you are extracting parameters represents the exact device (for example,
MOS: gate, source-drain, and body; BJT: collector, base, emitter, and so forth).

DEVTAG identifies the devices by the layer names you specify in the ELEMENT command. Thus,
either the tagged layer you are extracting (layer-b) or the intermediate layers in the tagging sequence
must correspond to the functional layers in the ELEMENT command.

Note: When you use more than one DEVTAG command in a rules file, they must be
grouped together. Also, you cannot use any other command between a group of
DEVTAG commands.

DEVTAG commands are used when extracting lateral PNP devices that have multi-collectors with one
emitter area. Use this command to distribute the emitter area evenly to all the BJT transistors that share
the same emitter in the SPICE output.

Arguments

element [type] Type of bipolar device used in the ELEMENT BJT[type] command.
This ELEMENT[type] is the tagging device for tagging directly from
the bipolar device (ELEMENT BJT). For example, BJT[NV] for a
vertical npn and BJT[LP] for a lateral pnp.

L-Edit 14 User Guide Section 3 680


Chapter 23: HiPer Verify: Dracula Command Files Introduction DEVTAG

layer-a Tagging (intermediate) layer. This layer must have been previously
tagged with a DEVTAG (tagged from a defined ELEMENT BJT
device). You must specify the L option.
layer-b Tagged layer. Contains groups of polygons, usually of the multiple
collectors or emitters of a bipolar device. The specified layer carries
the same device number as the tagging layer that touches or overlaps
layer-b.
layer-c Output layer (intermediate layer) containing trapezoids with tagged
device number information. Specify this layer for LPE only. This
layer is generated from a previous tagged DEVTAG command.
layer-d Emitter layer of BJT element that you need to distribute.
layer-e Tagging intermediate layer (see layer-a).
layer-f Tagged layer (see layer-b).
layer-g Tagged result layer (see layer-c).

Examples

The following is an example of the type of lateral PNP devices. Since the collectors are used as device
recognition layers, there are four BJT transistors defined.

PARSET BJT1 AREA PERI EA EP


ELEMENT BJT[LP] COLLPN COLLPN BASELPN EMITLPN
DEVTAG[S] BJT[LP] EMITLPN BMIT1
LEXTRACT BJT1 BMIT1 BY BJT[LP] BJTLP
C1,C2,C3,C4: COLLPN
B: BASELPN
E: EMITLPN (Area is 100u)

L-Edit 14 User Guide Section 3 681


Chapter 23: HiPer Verify: Dracula Command Files Introduction DEVTAG

Circuit Element Extract Commands


The circuit element extraction commands define electrical circuit elements. You use these commands to
extract MOS devices, pads, and electrical parameters such as widths and lengths. When you define
electrical nodes with CONNECT commands, circuit element extraction commands automatically
generate a circuit netlist. You can use this extracted circuit to perform layout versus schematic checks
(LVS).

Extract checks the devices defined in an ELEMENT command to verify that they are formed correctly.
The first three characters you specify in an ELEMENT or PARASITIC command must be unique. Also,
you cannot specify the same layer name more than once in the ELEMENT command.

L-Edit 14 User Guide Section 3 682


Chapter 23: HiPer Verify: Dracula Command Files Introduction EDGECHK

EDGECHK

EDGECHK[O] layer1 {ANGLE[90 | -90]} LENGTH measurement value1 {result-layer}


{OUTPUT c-name l-num {d-num}}

Description

Checks the continuous path length of all edges, only Manhattan edges, or only Non-Manhattan edges on
the input layer. Flagged edges are extended inside the input polygon by one RESOLUTION by default,
or outside the polygon if the [O] option is specified. By default, all edges are included in the check. Use
the ANGLE option to specify only Manhattan or non-Manhattan edges.

Arguments

layer1 A drawn or derived polygon layer.


ANGLE[90] Only check Manhattan edges (parallel with X-Y axis).
ANGLE[-90] Only check non-Manhattan edges.
measurement Allowed measurements are LT, RA, GT.
[O] The output edge is extended inside the input polygon by default,
outside the input polygon if the [O] option is specified.

Calibre Format

Y = layer ANGLE angle_constraint


Z = PATH LENGTH Y measurement value1
result-layer = EXPAND EDGE Z INSIDE BY resolution_value
c-name {
COPY result-layer
}

If ANGLE option is not present, translate as :

Z = LENGTH layer_constraint value1


result-layer = EXPAND EDGE Z INSIDE BY resolution_value c-name {
COPY result-layer
}
If [O] option present, use OUTSIDE BY in EXPAND EDGE

For no ANGLE option:angle_constraint is ">=0 <=90".

For ANGLE[90]:angle_constraint is "< 0.1 > 89.9"

For ANGLE[-90]:angle_constraint is " > 0.1 < 89.9"

For [O]:In EXPAND EDGE, use OUTSIDE BY rather than INSIDE BY

L-Edit 14 User Guide Section 3 683


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT BJT

ELEMENT BJT

ELEMENT BJT{[type]} layer-a layer-b layer-c layer-d {layer-s}

Description

Defines bipolar devices.

ELEMENT BJT should not use terminal layer names having the three first letters “BJT.” In general, the
device layer used for a vertical npn device must be the emitter region, because an npn can have multiple
emitters. Also, the emitter region overlaps all three terminals of this device.

For the lateral pnp, the device layer must be the collector region because a pnp can have multiple
collectors. The collector layer does not touch or overlap the emitter layer for its terminal connection. To
overcome this, the emitter layer is sized to overlap the collector device layer and is stamped with node
information.

Note: Once a layer has been defined as a device or terminal layer, it must not be changed by
any operation (mentioned as an output layer) after the ELEMENT command.

Arguments

type Two-character code that denotes the type of BJT device. The first
character must be any letter from A-Z. The second character is
optional and can be any letter from A-Z or any number from 0-9
(except for 8). You can use this code to differentiate BJT devices. For
example, vertical npn devices are type NV and lateral pnp devices are
type PL.
layer-a Device layer, one region per device. This layer defines the device
region that touches or overlaps the bipolar conductor layers. For an
npn device, this is usually defined by the emitter. For a lateral pnp
device, this is usually defined by the collector.
layer-b Terminal conductor layer for the collector terminal. This layer must
carry node information.
layer-c Terminal conductor layer for the base terminal. This layer must carry
node information.
layer-d Terminal conductor layer for the emitter terminal. This layer must
carry node information.
layer-s Substrate terminal layer. If you define this substrate layer, LVS
checks for discrepancies or inconsistencies found in the layout or
schematic. Discrepancies are reported in the LVS report file. You
must also add a CDL definition for substrate.

L-Edit 14 User Guide Section 3 684


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT BJT

Examples

In the following example, the enpn is the emitter region and device layer. Layers covered, base, and
np+ are the BJT terminal conductors and they must carry node information.

ELEMENT BJT[NV] enpn covered base np+

In the next example, cpnp1 is the collector region and device layer.

ELEMENT BJT[PL] cpnp1 base buried oepnpl

This last example shows the ELEMENT command with a substrate layer defined. The name specified
here is CHANNEL, but you can specify any name.

ELEMENT BJT[A] BJTW COLL BASE EMIT CHANNEL

L-Edit 14 User Guide Section 3 685


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT CAP

ELEMENT CAP

ELEMENT CAP {[type]} layer-a layer-b layer-c {layer-s}

Description

Defines a capacitor device. ELEMENT CAP should not have terminal layer names with the three first
letters “CAP.”

Note: Once a layer has been defined as a device or terminal layer, it must not be changed by
any operation or mentioned as an output layer after the ELEMENT command.

Arguments

type Two-character code that denotes the type of CAP device. The first
character must be a letter from A-Z. A second character is optional
and can be any letter from A-Z or a number from 0-9 (except 8). This
code differentiates capacitor devices.
layer-a Device layer, one region per device, that defines the capacitor region
that touches or overlaps the capacitor conductor layers.
layer-b Terminal conductor layer for one side of the capacitor. This layer
must carry node information.
layer-c Terminal conductor layer for the other side of the capacitor. This
layer must carry node information.
layer-s Substrate terminal layer. If you define this substrate layer, LVS
checks for discrepancies or inconsistencies found in the layout or
schematic. Discrepancies are reported in the LVS report file. You
must also add a CDL definition for substrate.

Example

*OPERATION
.
.
ELEMENT CAP[PP] p12cap pl2 pl1
ELEMENT CAP[A] metpwel metal pwell
.
.
*END

netlist:
C1 sig1 sig2 3pf $ [PP] or $.MODEL=PP
C2 sig3 sig4 1 pf $ [A] or $.MODEL=A

LVS checks the capacitor type because the netlist has optional subtypes specified with brackets [ ] (or
with the .MODEL command.)

L-Edit 14 User Guide Section 3 686


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT DIO

ELEMENT DIO

ELEMENT DIO {[type]} layer-a layer-b layer-c {layer-s}

Description

Defines the P-N junction diode. This command does not define an LPE element. ELEMENT DIO
should not have terminal layer names with the three first letters “DIO”.

Note: Once a layer has been defined as a device or terminal layer, it must not be changed by
any operation or mentioned as an output layer after the ELEMENT command.

Arguments

type Two-character code that denotes the type of DIO device. The first
character must be a letter from A-Z. A second character is optional
and can be any letter from A-Z or a number from 0-9 (except 8). This
code differentiates diode devices. For example, P-diode to
N-substrate devices are [P] type, and N-diode to Pwell devices are [N]
type.
layer-a Device layer, one region per device. This layer defines the diode
region that touches or overlaps the anode and cathode conductor
layers.
layer-b Anode conductor layer for the anode terminal, usually the p+
diffusion or the P-well. This layer must carry node information.
layer-c Cathode conductor layer for the cathode terminal, usually the n+
diffusion or the N-substrate. This layer must carry node information.
layer-s Substrate terminal layer. If you define this substrate layer, LVS
checks for discrepancies or inconsistencies found in the layout or
schematic. It reports discrepancies in the LVS report file. You must
also add a CDL definition for substrate.

Example

.
CONNECT-LAYER=nsub pwell nsd psd poly metal
*END
*OPERATION
.
AND psd diode pdio; identify the P+ pdio
CONNECT metal nsd BY cont
CONNECT metal psd BY cont
CONNECT nsd nsub BY ntnsub
.
ELEMENT DIO[P] pdio psd nsub
;For a p+ diode element to the n-substrate.

L-Edit 14 User Guide Section 3 687


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT IN?

ELEMENT IN?

ELEMENT device layer-a layer-b layer-c {layer-s}

This is the ELEMENT IN? syntax in the Operation Block of your rule file when the PARSET command
syntax in the Description Block of your rule file is as follows:

PARSET = pname param1 param2 param3,...paramn

The ? in the ELEMENT IN? command stands for any letter of the alphabet, but the first 2 characters of
the device name must start with “IN”.

Description

This command lets you use BOX devices to simulate inductors and extract some important parameters
for the inductors, such as the number of turns or diameter of inner circle, and output them to the SPICE
netlist file for supporting inductors in layout designs.

The first step is to use the PARSET command to specify what parameters will be extracted. There are
four geometric primitives regarding inductors provided: ID, IN, IW, and IS; and one reserved
parameter, LL. See the PARSET (page 721) command for more information on these four primitives
and the reserved parameter.

Once a layer has been defined as a device or terminal layer, it must not be changed by any operation or
mentioned as an output layer after the ELEMENT command.

Arguments

device User-defined device name with three characters. The first two
characters should be IN.
layer-a Device layer, one region per device
layer-b Terminal layer for one side of the inductor.
layer-c Terminal layer for the other side of the inductor.
layer-s Substrate terminal layer.

Example

Description Block:

PARSET = TEST ID IN IW IS LL
Operation Block:
ELEMENT IND INDSYM ME4 ME5
LEXTRACT TEST INDSYM BY IND INDPAR1 &
EQUATION LL=ID+IN+IW+IS
LPESELECT[NY] IND output SPICE

L-Edit 14 User Guide Section 3 688


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT LDD

ELEMENT LDD

ELEMENT LDD {[type]} layer-a layer-b layer-c layer-d


{layer-e}

Description

Defines a lightly doped drain MOS element whose source and drain cannot be swapped. ELEMENT
LDD should not have terminal layer names with the three first letters “LDD.”

A special LDD[X-] type stops the generation of pseudo gates when you run an LVS check. To disallow
devices from forming pseudo gates, specify an ELEMENT LDD command where the first character
type is an X and the second character type is either a letter from A-Z or a number from 0-9 (except 8).
This allows LVS to locally stop the formation of pseudo gates in the layout and also allows LVS
checking of mixed analog and digital circuits.

To perform LVS, you must define LDD devices on the schematic netlist. There is, however, no special
element called LDD in SPICE or other standard simulation packages. Using Circuit Description
Language (CDL), you can code LDD devices as MOS devices with the designator LDD[type] specified
as a comment:

Mxxxxx nd ng ns {nb} mname {L=val1} {W=val2} $LDD[type]

Note: Once a layer has been defined as a device or terminal layer, it must not be changed by
any operation or mentioned as an output layer after the ELEMENT command.

Arguments

type Two-character code used to denote the type of LDD MOS device. The
first character must be a letter from A-Z. The second is optional and
can be any letter from A-Z or any number from 0-9 (except 8). This
code differentiates MOS devices with different implants. For
example, CMOS pull-up devices are P type and pull-down devices are
N type. NMOS devices are E, D, and N types.
layer-a Device layer, one region per device. This layer defines the device
region that touches or overlaps the device conductor layers. For
silicon-gate MOS, this is the channel region layer usually defined by
the overlapped area of polysilicon and diffusion. For a gallium arsenic
transistor, this is the channel region layer usually defined by the
overlapped area of schottky metal and lightly doped diffusion. For
metal-gate MOS, this is the gate region usually defined by the thin
oxide mask.
layer-b Gate conductor layer. For silicon-gate MOS, this is the polysilicon
layer. For metal-gate MOS, this is the metal layer; for gallium arsenic,
this is the schottky metal layer. This layer must carry node
information.

L-Edit 14 User Guide Section 3 689


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT LDD

layer-c Lightly doped drain conductor layer. For silicon-gate MOS, this is the
self-aligned lightly doped diffusion layer, usually defined by the
lightly doped diffusion layer excluding the channel regions. For
metal-gate MOS, this is the lightly doped diffusion layer. This layer
must carry node information.
layer-d Source conductor layer. For silicon-gate MOS, this is the self-aligned
diffusion layer, usually defined by the diffusion layer Source
conductor layer. For silicon-gate MOS, this is the self-aligned
diffusion layer, usually defined by the diffusion layer
layer-e Substrate conductor layer. This substrate layer is for optional use in
running LVS with checks for substrate connection mismatch. For
MOS this is usually N-well, P-well, N-substrate, or P-substrate. If you
specify this layer, it must carry node information.

Example

ELEMENT LDD[N] GNDX POLY1 NDDIF1 NDIF1 PWELL1

L-Edit 14 User Guide Section 3 690


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT MOS

ELEMENT MOS

ELEMENT MOS {[type]} layer-a layer-b layer-c {layer-d}

Description

Defines metal or silicon-gate MOS devices. ELEMENT MOS should not have terminal layer names
with the three first letters “MOS”.

A special MOS[X-] type stops the generation of pseudo gates when you run an LVS check. To disallow
devices from forming pseudo gates, specify an ELEMENT MOS command where the first character
type is an X and the second character type is either a letter from A-Z or a number from 0-9 (except 8).
This allows LVS to locally stop the formation of pseudo gates in the layout and allows the LVS
checking of mixed analog and digital circuits.

Note: Once a layer has been defined as a device or terminal layer, it must not be changed by
any operation or mentioned as an output layer after the ELEMENT command.

Arguments

type Two-character code to denote the type of MOS device. The first
character must be a letter from A-Z. The second is optional and can be
any letter from A-Z or any number from 0-9 (except 8). This code
differentiates MOS devices with different implants. For example,
CMOS pull-up devices are [P] type and pull-down devices are [N]
type. NMOS devices are [E], [D], and [N] types. See the note below
on the special ELEMENT MOS[X-] type.
layer-a Device layer, one region per device. For silicon-gate MOS, this is the
channel region layer usually defined by the overlapped area of
polysilicon and diffusion. For a gallium arsenic transistor, this is the
channel region layer usually defined by the overlapped area of
schottky metal and lightly doped diffusion. For metal-gate MOS, this
is the gate region usually defined by the thin oxide mask.
layer-b Gate conductor layer. For silicon-gate MOS, this is the polysilicon
layer. For metal-gate MOS, this is the metal layer. For gallium
arsenic, this is the schottky metal layer. This layer must carry node
information.
layer-c Source/drain conductor layer. For silicon-gate MOS, this is the self-
aligned diffusion layer, usually defined by the diffusion layer
excluding the channel regions. For metal-gate MOS, this is the
diffusion layer. This layer must carry node information.
layer-d Substrate conductor layer. This substrate layer is optional when you
run LVS or LPE checking substrate connection mismatch. For MOS:
usually N-well, P-well, N-substrate, or P-substrate. If you specify this
layer, it must carry node information.

L-Edit 14 User Guide Section 3 691


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT MOS

Example

In this example, the MOS[X] transistor forms pseudo gates for LVS. The MOS[XN] transistor is not
allowed to form pseudo gates and remain as a transistor in an LVS run.

ELEMENT MOS[N] ngate poly nsd pwell


ELEMENT MOS[D] depchnl poly srcdrn
ELEMENT MOS[N] nchnl metal diff
ELEMENT MOS chnl poly srcdrn
ELEMENT MOS[P] oxide metal diff nsub
ELEMENT MOS[X] xgate poly nsd pwell
ELEMENT MOS[XN] xngate poly nsd pwell

L-Edit 14 User Guide Section 3 692


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT RES

ELEMENT RES

ELEMENT RES {[type]} layer-a layer-b {layer-s}

Description

Defines a resistor device (poly, diffusion, thin-film, etc.). This command does not define an LPE
element. ELEMENT RES should not have terminal layer names with the three first letters “RES.”

Note: Once a layer has been defined as a device or terminal layer, it must not be changed by
any operation or mentioned as an output layer after the ELEMENT command.

Arguments

type Two-character code that denotes the type of RES device. The first
character must be a letter from A-Z. A second character is optional
and can be any letter from A-Z or a number from 0-9 (except 8). This
code differentiates diode devices. This code differentiates among
resistor devices. For example, P-diffusion devices are [PD] type and
poly devices are [PO] type.
layer-a Device layer, one region per device. This layer defines the resistor
region that touches or overlaps the resistor conductor layers.
layer-b Terminal conductor layer usually defined by a conductor layer
excluding the resistor region (layer-a). This layer must carry node
information.
layer-s Substrate terminal layer. If you define this substrate layer, LVS
checks for discrepancies or inconsistencies found in the layout or
schematic. LVS reports discrepancies in the LVS report file. (You
must also add a CDL definition for substrate.)

Example 1

For a poly resistor element:

AND ipoly res pores; digitized resistor mask


NOT ipoly pores poly
ELEMENT RES[PO] pores poly

Example 2

For a p+ diffusion resistor element:

SELECT pdiff LABEL[R] R? pdifres


STAMP cont BY metal
ELEMENT RES[PD] pdifres cont

Example 3

L-Edit 14 User Guide Section 3 693


Chapter 23: HiPer Verify: Dracula Command Files Introduction ELEMENT RES

ELEMENT RES[PO] pores poly


ELEMENT RES[PD] pdifres cont
..
LVSCHK
*END

CDL netlist:

R1 sig1 sig2 3k $[PO] or $.MODEL=PO


R2 sig3 sig4 1k $[PD] or $.MODEL=PD

LVS checks the resistor subtype because the CDL netlist specifies the option subtypes either with the
brackets [ ] or with the .MODEL command.

L-Edit 14 User Guide Section 3 694


Chapter 23: HiPer Verify: Dracula Command Files Introduction ENC

ENC

ENC {[option1]} layer1 {&layer-a1}[O] layer2 {&layer-a2} measurement


{result-layer} {OUTPUT c-name l-num {d-num}} {&}

Description

Measures the distance between the outside of layer1 and the inside of layer2 boundaries and outputs the
edge pairs that meet the constraints.

Arguments

layer1 A drawn or derived polygon layer.


layer2 A drawn or derived polygon layer.
option1 The following options are common to WIDTH, ENC, EXT, and
INT:

C — Only flags the edge-pair when the edges are parallel.

C’ — Only flags the edge pair when the edges are nonparallel.

P (-) — Flags segments of edges that project onto each other. Dracula
definition is defined as: Two edges project if perpendicular lines from
a referenced edge intersect the other edge. The referenced edge is the
edge most closely aligned to the x or y axis.

P'(-) — Flags edges that do not project onto each other.

R — Constructs polygons from the projection of error edges. You


must specify only the result-layer, and not specify OUTPUT when
using this option. This option turns on the P option.

R’ — Outputs error flags in polygon format so you can reuse error


data. You can process the created layer with logical operations. The
flags are one RESOLUTION unit wide (as specified in the
Description block). You cannot specify an OUTPUT error cell.

S (+) — Flags violations on the polygon if the edges of the polygon


are within a “square boundary” inside of the other polygon edge.

N — Only flag violations on polygons that are on different nets. Use


the CONNECT command to connect nodes before using this option.

N’ — Inverse of N option. Only flag violations on polygons that are


on the same net.

(continued)

L-Edit 14 User Guide Section 3 695


Chapter 23: HiPer Verify: Dracula Command Files Introduction ENC

option1 X — Checks the delta value in the x direction between two edges. The
(continued) edges must project onto each other. Non-Manhattan data is not
checked.

Y — Checks the delta value in the y direction between two edges. The
edges must project onto each other. Non-Manhattan data is not
checked.
The following options are for ENC command only:

E (+) — Flags polygons from layer1 that are totally outside polygons
from layer2. Performs an enclosure test in parallel with other
functions performed by the ENC command.

O (+) — Flags layer1 polygons and layer2 polygons that cut/overlap


each other. Outputs edges from layer2 that are enclosed by layer1.
Within a conjunctive rule, only layer2 (the enclosing layer) receives
error flags.

T (+) — Flags outside segments of enclosed polygons (layer1) that


touch inside segments of enclosing polygons (layer2).

V — Check all polygon edges, ignoring shielding by polygon


containment of one layer inside another.

The O, G, and E options are only supported when directed as errors


with an OUTPUT statement, they are not supported when directed to
a layer. The O and G flags behave the same.

L-Edit 14 User Guide Section 3 696


Chapter 23: HiPer Verify: Dracula Command Files Introduction ENC

measurement LT/LE n1 — Flags an error if the two segments are spaced less than
n1 for LT or less than or equal to n1 for LE. Does not flag an error if
the segments touch.

EQ n1 — Flags an error if the two segments are spaced equal to n1.

RANGE n1 n2 — Flags an error if the two segments are spaced less


than n2 and greater than n1. If you do not want acute-angle error
flags, you must specify the RANGE measurement.

SELLT/SELLE n1 — SELLT and SELLE output those layer1


polygons that would be flagged by using LT n1 or LE n1 with the
same options. Specify a result-layer name and do not use the
OUTPUT statement when specifying this option.

SELEQ/NE n1 — SELEQ outputs those layer1 polygons that would


be flagged by using EQ n1 with the same options. SELNE outputs
those polygons that would not be flagged by using EQ with the same
options. Specify a result-layer name and do not use the OUTPUT
statement when using this option.

SELRA n1 n2 — SELRA outputs those layer1 polygons that would


be flagged by using RANGE n1 n2 measurement with the same
options. Specify a result-layer name and do not use the OUTPUT
statement when specifying this option.

SELGT/GE n1 — SELGT and SELGE outputs those layer1


polygons that would not be flagged when you specify a LE n1 or LT
n1 measurement with the same options. Specify a result-layer name
and do not use the OUTPUT statement when using this option.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.
& Creates a conjunctive rule. See “Conjunctive Rules” on page 648.
[O] The [O] option after layer1 indicates to use the original layer, not the
layer generated by the previous operation in the conjunctive rule. Use
this option only with a conjunctive rule.

Unsupported Arguments

The following options are not supported:

U, U', CORNER-CORNER n2, CORNER-EDGE n3

Calibre Format

The basic Dracula rule

ENC LAYER1 LAYER2 LT 2.0 OUTPUT ENC1 63

Translates to Calibre format as:

L-Edit 14 User Guide Section 3 697


Chapter 23: HiPer Verify: Dracula Command Files Introduction ENC

ENC1 {
ENC LAYER1 LAYER2 < 2.0 ABUT >0<90 SINGULAR
}

The mapping of Dracula options to Calibre format is shown in the table below. The following options
are common to WIDTH, ENC, EXT, INT

C PARALLEL ONLY
C’ NOT PARALLEL
P PROJECTING
P’ NOT PROJECTING
R PROJECTING REGION
R’ In an ENC rule, R' is translated using EXPAND EDGE layer
OUTSIDE BY.

ENC[R'] layer1 layer2 LT d result

Translates to:

E1 = ENC [layer1] layer2 < d ABUT >0<90


E2 = ENC layer1 [layer2] < d ABUT >0<90
temp1 = EXPAND EDGE E1 OUTSIDE BY 0.01
temp2 = EXPAND EDGE E2 OUTSIDE BY 0.01
result = temp1 OR temp2
// Here 0.01 is the value of RESOLUTION
S SQUARE
LT/LE Constraint is “< n1” or “<= n1”

ENC layer1 layer2 LT d

Translates to:

ENC layer1 layer2 < dABUT >0<90 SINGULAR


EQ N1 Constraint is “== n1”

RANGE n1 n2 Constraint is “> n1 < n2”, and does not include ABUT and
SINGULAR parameters.

SELLT/SELLE ENC layer1 layer2 SELLT d result-layer

Translates to:

temp-edge-layer = ENC [layer1] layer2 < d


result-layer = layer1 WITH EDGE temp-edge-layer

L-Edit 14 User Guide Section 3 698


Chapter 23: HiPer Verify: Dracula Command Files Introduction ENC

SELGT/SELGE ENC layer1 layer2 SELGT d result-layer

Translates to:

temp-edge-layer = ENC [layer1] layer2 <= d


result-layer = layer1 NOT WITH EDGE temp-edge-layer
SELNE ENC layer1 layer2 SELNE d result-layer

Translates to:

temp-edge-layer = ENC [layer1] layer2 == d


result-layer = layer1 NOT WITH EDGE temp-edge-layer
N NOT CONNECTED
N’ CONNECTED
X For example, Dracula
ENC [X] layer1 LT 3 OUTPUT R2 64
INT [X] layer2 LT 3 OUTPUT R3 64

Translates to Calibre:

T0 = ANGLE layer1 == 90
T1 = ANGLE layer2 == 90

ENC T0 T1 < 3 PARALLEL ONLY PROJECTING ABUT > 0 <


90 SINGULAR
INT T0 T1 < 3 PARALLEL ONLY PROJECTING ABUT > 0 <
90 SINGULAR
Y Similarly, Y option translates to ANGLE layerx == 0, with
PROJECTING and PARALLEL ONLY options enforced.
The X and Y options are mutually exclusive.

The following options apply to ENC only:

E In the ENC rule, the E flag is translated by adding layer1 OUTSIDE


layer2 to the basic rule.

ENC[E] layer1 layer2 LT d OUTPUT result 63

Translates to:

result {
ENC layer1 layer2 < d ABUT >0<90 SINGULAR
layer1 OUTSIDE layer2
}

L-Edit 14 User Guide Section 3 699


Chapter 23: HiPer Verify: Dracula Command Files Introduction ENC

O In the ENC rule, the O flag is translated by adding the INSIDE ALSO
option.

ENC[O] layer1 layer2 LT d OUTPUT result 63

Translates to:
result {
ENC layer1 layer2 < d ABUT >0<90 SINGULAR INSIDE ALSO }
T Modify ABUT >0< 90 to just ABUT < 90
V MEASURE ALL

L-Edit 14 User Guide Section 3 700


Chapter 23: HiPer Verify: Dracula Command Files Introduction EQUATION

EQUATION

EQUATION K parameter = FORTRAN-expression {&}

Description

This property calculation command specifies the equations that compute device parameters from
extracted layout geometric primitive parameters or other computed parameters.

Use this command in conjunction with the LEXTRACT (page 715) command. You must specify the
parameter to compute and all EQUATION parameters in the PARSET (page 721) command in the
description block.

If you conjunct equations, EQUATION evaluates them sequentially. All referenced parameters in
equations must be computed in previous equations.

Do not use tab characters in the equation line.

Arguments

K Specifies the fringe coefficient, and can apply to the same or different
layer fringe extraction and overlap capacitance extraction with fringe
consideration. You can use only DEPT and WIDT parameters as
arguments. You must specify this equation first.
parameter Parameter to compute.
FORTRAN - expression The following expressions are accepted:

Numbers Integer, real number, scientific notation


Variables As defined in the PARSET command
Operations Unary +, unary -, binary +, binary -, *, /, **
Parentheses (,)
Functions LOG, EXP, MAX, MIN, SIN, COS, TAN, ASIN,
ACOS, ATAN, SINH, COSH, TANH, SQRT,
LOG10, INT, and ABS.
& Conjunction of several equations.

ƒ The INT function allows you to get the integer value from the EQUATION command. For
example, this INT function allows you to output an integer value only of all resistors for contact in
order to calculate the CONTACT numbers. See Example 1 below.
ƒ The maximum length of an equation is 80 characters. To include equations longer than 80
characters, use a continuation as shown in the Example 2.
ƒ The ABS function is used in the parameter expressions that this EQUATION command enables;
see Example 3.

Example 1

EQUATION CNUM=INT((W-(2*M+CW))/(CW+CS)+1)

L-Edit 14 User Guide Section 3 701


Chapter 23: HiPer Verify: Dracula Command Files Introduction EQUATION

where

ƒ CNUM is the contact number


ƒ W is the width of resistor body
ƒ M is the margin of the resistor head and contact
ƒ CW is the width of contact
ƒ CS is the space of the contacts

Example 2

EQUATION ca=0.00005*area+1.OE-4*(peri-ovpr)+1.4E-4*ovpr+
0.00005*area+1.OE-12*(2*peri-ovpr)+2.0

EQUATION ca=ca+4.5*(peri-ovpr)

Example 3

*.GLOBAL
*.BIPOLAR
*.RESVAL
*.SCALE
*.EQUATION
.PARAM
.SUBCKT test MINUS PLUS
Rrmfg1r0 PLUS MINUS
+(12.0+1.1*abs(2.34)) $[R1] $W=2u
.ENDS test

L-Edit 14 User Guide Section 3 702


Chapter 23: HiPer Verify: Dracula Command Files Introduction EXT

EXT

EXT{[option1]} layer1{&layer-a1}{[O]} {layer2{&layer-a2}} measurement


{result-layer} {OUTPUT c-name l-num {d-num}} {&}

Description

Measures the distance between the outside of layer1 boundaries, or the distance between the outside of
layer1 and the outside of layer2 boundaries.

Arguments

layer1 A drawn or derived polygon layer.


layer2 A drawn or derived polygon layer.
option1 The following options are common to WIDTH, ENC, EXT, and
INT:

C — Only flags the edge-pair when the edges are parallel.

C’ — Only flags the edge pair when the edges are nonparallel.

P (-) — Flags segments of edges that project onto each other. Dracula
definition is defined as: Two edges project if perpendicular lines from
a referenced edge intersect the other edge. The referenced edge is the
edge most closely aligned to the x or y axis.

P'(-) — Flags edges that do not project onto each other.

R — Constructs polygons from the projection of error edges. You


must specify only the result-layer, and not specify OUTPUT when
using this option. This option turns on the P option.

R’ — Outputs error flags in polygon format so you can reuse error


data. You can process the created layer with logical operations. The
flags are one RESOLUTION unit wide (as specified in the
Description block). You cannot specify an OUTPUT error cell.

S (+) — Flags violations on the polygon if the edges of the polygon


are within a “square boundary” inside of the other polygon edge.

N — Only flag violations on polygons that are part of different nodes.


Use the CONNECT command to connect nodes before using this
option.

N’ — Inverse of N option. Only flag violations on polygons that are


part of the same node.

(continued)

L-Edit 14 User Guide Section 3 703


Chapter 23: HiPer Verify: Dracula Command Files Introduction EXT

option1 X — Checks the delta value in the x direction between two edges. The
(continued) edges must project onto each other. Non-Manhattan data is not
checked.

Y — Checks the delta value in the y direction between two edges. The
edges must project onto each other. Non-Manhattan data is not
checked.
The following options are for EXT command only:

E (+) — Flags a polygon that is totally enclosed by a polygon from


the other layer.

O (+), G(+) — Flags layer1 and layer2 polygons that cut/overlap each
other. Error flags cover segments within layer1 and layer2 that outline
the overlapping area of the two polygons. The segments flagged are
the segments of these two polygons that cut the edges of the polygons.
Does not flag a polygon that fully encloses a polygon of the other
layer.

T (+) — Flags outside segments of layer1 polygons that touch outside


segments of layer2 polygons.

V — Check all polygon edges, ignoring shielding by polygon


containment of one layer inside another.

H (+) — Flags the outside edges of notched layer1 polygons that fail
the spacing check. A notch is a set of non-adjacent facing edges, or
adjacent facing edges that create an external angle of less than 90
degrees. Use this option only with a single input layer.

The O, G, and E options are only supported when directed as errors


with an OUTPUT statement, they are not supported when directed to
a layer. The O and G flags behave the same.

L-Edit 14 User Guide Section 3 704


Chapter 23: HiPer Verify: Dracula Command Files Introduction EXT

measurement LT/LE n1 — Flags an error if the two segments are spaced less than
n1 for LT or less than or equal to n1 for LE. Does not flag an error if
the segments touch.

EQ n1 — Flags an error if the two segments are spaced equal to n1.

RANGE n1 n2 — Flags an error if the two segments are spaced less


than n2 and greater than n1. If you do not want acute-angle error
flags, you must specify the RANGE measurement.

SELLT/SELLE n1 — SELLT and SELLE output those layer1


polygons that would be flagged by using LT n1 or LE n1 with the
same options. Specify a result-layer name and do not use the
OUTPUT statement when specifying this option.

SELEQ/NE n1 — SELEQ outputs those layer1 polygons that would


be flagged by using EQ n1 with the same options. SELNE outputs
those layer1 polygons that would not be flagged by using EQ n1 with
the same options. Specify a result-layer name and do not use the
OUTPUT statement when using this option.

SELRA n1 n2 — SELRA outputs those layer1 polygons that would


be flagged by using RANGE n1 n2 measurement with the same
options. Specify a result-layer name and do not use the OUTPUT
statement when specifying this option.

SELGT/GE n1 — SELGT and SELGE outputs those layer1


polygons that would not be flagged when you specify a LE n1 or LT
n1 measurement with the same options. Specify a result-layer name
and do not use the OUTPUT statement when using this option.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.
& Creates a conjunctive rule. See “Conjunctive Rules” on page 648.
[O] The [O] option after layer1 indicates to use the original layer, not the
layer generated by the previous operation in the conjunctive rule. Use
this option only with a conjunctive rule.

Unsupported Arguments

The following options are not supported:

U, U', CORNER-CORNER n2, CORNER-EDGE n3

H option is supported, absence of H is not supported. The O, G, and E options are only supported when
directed as errors with an OUTPUT statement, they are not supported when directed to a layer.

Calibre Format

The basic Dracula rule

L-Edit 14 User Guide Section 3 705


Chapter 23: HiPer Verify: Dracula Command Files Introduction EXT

EXT LAYER1 LAYER2 LT 2.0 OUTPUT EXT1 63

Translates to Calibre format as:

EXT1 {
EXT LAYER1 LAYER2 < 2.0 ABUT >0<90 SINGULAR
}

The mapping of Dracula options to Calibre format is shown in the table below. The following options
are common to WIDTH, ENC, EXT, INT:

C PARALLEL ONLY
C’ NOT PARALLEL
P PROJECTING
P’ NOT PROJECTING
R PROJECTING REGION
R’ In a EXT rule, R' is translated using EXPAND EDGE layer
OUTSIDE BY.

EXT[R'] layer1 layer2 LT d result

Translates to:

E1 = EXT [layer1] layer2 < d ABUT >0<90


E2 = EXT layer1 [layer2] < d ABUT >0<90
temp1 = EXPAND EDGE E1 OUTSIDE BY 0.01
temp2 = EXPAND EDGE E2 OUTSIDE BY 0.01
result = temp1 OR temp2
// Here 0.01 is the value of RESOLUTION
S SQUARE
LT/LE < / <= n1
EXT layer1 layer2 LT 2.0
Translates to:
EXT layer1 layer2 < 2.0 ABUT >0<90 SINGULAR
EQ n1 n1
RANGE n1n2 n1 < n2, does not include ABUT SINGULAR parameters.
SELLT/SELLE EXT layer1 layer2 SELLT d result-layer
Translates to:
temp-edge-layer = EXT [layer1] layer2 < d
result-layer = layer1 WITH EDGE temp-edge-layer
N NOT CONNECTED
N’ CONNECTED SPACE

L-Edit 14 User Guide Section 3 706


Chapter 23: HiPer Verify: Dracula Command Files Introduction EXT

The following options apply to EXT only:

E In the EXT rule, the E flag is translated by adding (layer1 INSIDE


layer2) OR (layer2 INSIDE layer1) to the basic rule.

EXT[E] layer1 layer2 LT d OUTPUT result 63

Translates to:

result {
EXT layer1 layer2 < d ABUT >0<90 SINGULAR
(layer1 INSIDE layer2) OR (layer2 INSIDE layer1)
}
O, G In the EXT rule, the O and G flags are translated by adding (layer1
CUT layer2) AND (layer2 CUT layer1) to the basic rule.

EXT[E] layer1 layer2 LT d OUTPUT result 63

Translates to:

result {
EXT layer1 layer2 < d ABUT >0<90 SINGULAR
(layer1 CUT layer2) AND (layer2 CUT layer1))
}
OE In the EXT rule, if both E and O options are present, the rule is most
efficiently translated by adding the INSIDE ALSO option.

EXT[EO] layer1 layer2 LT d OUTPUT result 63

Translates to:
result {
EXT layer1 layer2 < d ABUT >0<90 SINGULAR INSIDE ALSO }
H “H” behavior is default Calibre behavior for single layer rule. Use
SPACE if “H” is not present
T Modify ABUT >0< 90 to just ABUT < 90
T Remove ABUT constraint
V MEASURE ALL

L-Edit 14 User Guide Section 3 707


Chapter 23: HiPer Verify: Dracula Command Files Introduction GROW

GROW

GROW layer1 dx dy dx1 dy1 result-layer {OUTPUT c-name l-num {d-num}}

Description

Oversizes right, left, top and bottom edges of a layer by individually specified amounts. This command
is supported only in the case of dx=dy=dx2=dy2.

Arguments

layer1 A drawn or derived polygon layer


dx, dy, dx2, dy2 The amount to grow layer1 polygons. All values must be positive and
equal. For all-angle polygons, Dracula grows all-angle edges by more
than the specified grow amount. L-Edit grows all-angle edges by
exactly the specified amount.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored

Unsupported Arguments

This command is supported only in the case of dx=dy=dx2=dy2.

Calibre Format

result-layer = SIZE layer1 BY size_value

L-Edit 14 User Guide Section 3 708


Chapter 23: HiPer Verify: Dracula Command Files Introduction HOLE

HOLE

HOLE layer1 x-extent y-extent result-layer

Description

Produces a polygon layer formed by the holes of the input layer.

Arguments

,layer1 A drawn or derived polygon layer.


x-extent y-extent Holes must have the orthogonal extents larger than x-extent by
y-extent to be included in the output.
result-layer Output layer that contains holes of layer1.

Example

Z = HOLES layer1
result-layer = RECTANGLE Z < x-extent BY < y-extent MEASURE EXTENTS

L-Edit 14 User Guide Section 3 709


Chapter 23: HiPer Verify: Dracula Command Files Introduction INT

INT

INT{[option1]} layer1{&layer-a1}{[O]} layer2{&layer-a2} measurement


{result-layer} {OUTPUT c-name l-num {d-num}} {&}

Description

Measures the distance between the inside of layer1 boundaries and the inside of layer2 boundaries.
Checks the amount by which polygons of two layers overlap

Arguments

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
option1 The following options are common to WIDTH, ENC, EXT, and
INT:

C — Only flags the edge-pair when the edges are parallel.

C’ — Only flags the edge pair when the edges are nonparallel.

P (-) — Flags segments of edges that project onto each other. Dracula
definition is defined as: Two edges project if perpendicular lines from
a referenced edge intersect the other edge. The referenced edge is the
edge most closely aligned to the x or y axis.

P'(-) — Flags edges that do not project onto each other.

R — Constructs polygons from the projection of error edges. You


must specify only the result-layer, and not specify OUTPUT when
using this option. This option turns on the P option.

R’ — Outputs error flags in polygon format so you can reuse error


data. You can process the created layer with logical operations. The
flags are one RESOLUTION unit wide (as specified in the
Description block). You cannot specify an OUTPUT error cell.

S (+) — Flags violations on the polygon if the edges of the polygon


are within a “square boundary” inside of the other polygon edge.

N — Only flag violations on polygons that are part of different nodes.


Use the CONNECT command to connect nodes before using this
option.

N’ — Inverse of N option. Only flag violations on polygons that are


part of the same node.

(continued)

L-Edit 14 User Guide Section 3 710


Chapter 23: HiPer Verify: Dracula Command Files Introduction INT

option1 X — Checks the delta value in the x direction between two edges. The
(continued) edges must project onto each other. Non-Manhattan data is not
checked.

Y — Checks the delta value in the y direction between two edges. The
edges must project onto each other. Non-Manhattan data is not
checked.
The following options are for INT command only:

T (+) — Flags inside segments of polygons of two layers that


coincide.

V — Checks the inside edges of layer1 to the inside edges of all


surrounding geometries of layer2. Check all polygon edges, ignoring
shielding by polygon containment of one layer inside another.
measurement LT/LE n1 — Flags an error if the two segments are spaced less than
n1 for LT or less than or equal to n1 for LE. Does not flag an error if
the segments touch.

EQ n1 — Flags an error if the two segments are spaced equal to n1.

RANGE n1 n2 — Flags an error if the two segments are spaced less


than n2 and greater than n1. If you do not want acute-angle error
flags, you must specify the RANGE measurement.

SELLT/SELLE n1 — SELLT and SELLE output those layer1


polygons that would be flagged by using LT n1 or LE n1 with the
same options. Specify a result-layer name and do not use the
OUTPUT statement when specifying this option.

SELEQ/NE n1 — SELEQ outputs those layer1 polygons that would


be flagged by using EQ n1 with the same options. SELNE outputs
those layer1 polygons that would not be flagged by using EQ n1 with
the same options. Specify a result-layer name and do not use the
OUTPUT statement when using this option.

SELRA n1 n2 — SELRA outputs those layer1 polygons that would


be flagged by using RANGE n1 n2 measurement with the same
options. Specify a result-layer name and do not use the OUTPUT
statement when specifying this option.

SELGT/GE n1 — SELGT and SELGE outputs those layer1


polygons that would not be flagged when you specify a LE n1 or LT
n1 measurement with the same options. Specify a result-layer name
and do not use the OUTPUT statement when using this option.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.
& Creates a conjunctive rule. See “Conjunctive Rules” on page 648.
[O] The [O] option after layer1 indicates to use the original layer, not the
layer generated by the previous operation in the conjunctive rule. Use
this option only with a conjunctive rule.

L-Edit 14 User Guide Section 3 711


Chapter 23: HiPer Verify: Dracula Command Files Introduction INT

Unsupported Arguments

The following options are not supported:

U, U', CORNER-CORNER n2, CORNER-EDGE n3

Calibre Format

The basic Dracula rule

INT LAYER1 LAYER2 LT 2.0 OUTPUT INT1 63

Translates to Calibre format as:

INT1 {
INT LAYER1 LAYER2 < 2.0 ABUT >0<90 SINGULAR
}

C PARALLEL ONLY
C’ NOT PARALLEL
P PROJECTING
P’ N OT PROJECTING
R PROJECTING REGION
R’ In an INT rule, R' is translated using EXPAND EDGE layer
OUTSIDE BY.

INT[R'] layer1 layer2 LT d result

Translates to:

E1 = INT [layer1] layer2 < d ABUT >0<90


E2 = INT layer1 [layer2] < d ABUT >0<90
temp1 = EXPAND EDGE E1 OUTSIDE BY 0.01
temp2 = EXPAND EDGE E2 OUTSIDE BY 0.01
result = temp1 OR temp2
// Here 0.01 is the value of RESOLUTION
S SQUARE
LT/LE n1 < / <= n1

INT layer1 layer2 LT d

Translates to:

INT layer1 layer2 < d ABUT >0<90 SINGULAR


EQ n1 == n1
RANGE n1n2 n1 < n2, does not include ABUT SINGULAR parameters.

L-Edit 14 User Guide Section 3 712


Chapter 23: HiPer Verify: Dracula Command Files Introduction INT

SELLT/SELLE INT layer1 layer2 SELLT d result-layer

Translates to:

temp-edge-layer = INT [layer1] layer2 < d


result-layer = layer1 WITH EDGE temp-edge-layer
N NOT CONNECTED
N’ CONNECTED

The following options apply to INT only:

T Modify ABUT >0< 90 to just ABUT < 90


V MEASURE ALL

L-Edit 14 User Guide Section 3 713


Chapter 23: HiPer Verify: Dracula Command Files Introduction LENGTH

LENGTH

LENGTH layer1 {&layer1} measurement {OUTPUT c-name l-num {d-num}} {&}

Description

Produces all edges of layer1 whose length conforms to the constraint. The NOT option produces all
layer1 edges not produced by the corresponding LENGTH operation.

Arguments

layer A drawn or derived polygon layer


measurement GT/GE/ LT/LE n1 — Output edges with length that are >, >=, <, <=
the constraint value n1 respectively.

RANGE n1 n2 — Outputs edges with length that are greater than n1


and less than n2 ( > n1 < n2).
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored
& Creates a conjunctive rule. See “Conjunctive Rules” on page 648.

Examples

EXT metal1 LT 0.3 &


LENGTH metal1 GT 10.0 OUTPUT M1.C 64

Calibre Format

LENGTH layer1 constraint

L-Edit 14 User Guide Section 3 714


Chapter 23: HiPer Verify: Dracula Command Files Introduction LEXTRACT

LEXTRACT

LEXTRACT pset layer-a {layer-b} BY ELEMENT[type]{pfname}{&}


LEXTRACT[E] RES layer-c layer-d BY RES{[type]} &

Note: L-Edit does not currently support extraction by node or parasitic extraction.

Description

Extracts geometric parameters from one or two layers of a BJT, CAP, DIO, MOS, or RES device. You
specify the parameters to extract in a PARSET command in the description block. The number of input
layers you specify with the LEXTRACT command depends on the primitive parameters you specify
with the PARSET command. When you use the LEXTRACT command, you must also specify a
PARSET command in the Description block.

The first layer you specify must be a device layer or a layer with the device number tagged on by a
DEVTAG command. The second layer you specify can augment the parameters you are extracting from
the first layer.

You should group all parameter extractions for each device type in a conjoined group. Specify only one
LEXTRACT conjoined group with the EQUATION command for each device type. Similarly, specify
only one conjoined group for each device type (element [type]).

You cannot place another command within a group of LEXTRACT commands. In addition, you need to
group LEXTRACT, DEVTAG, LVSCHK, or LPECHK commands together. Do not use any other
command within any group of these commands.

For bipolar devices, LEXTRACT extracts width and length, as well as the geometric parameters area
and perimeter from one or more layers.

Antenna Checks
In certain applications, you might want to compare the ratio of device area to the layer area driving the
devices. This check, called an antenna check, is useful when you want to ensure that induced
capacitance, caused by a fabrication process or a circuit operation, does not cause the drive current or
the transition time to become unstable.

Arguments

pset Name of the parameter set PARSET to extract (specified in the


description block). The name can have up to four alphanumeric
characters, the first of which must be a letter.
layer-a The first layer from which parameters are extracted. This layer must
be either the device layer or a layer with a device number tagged by
the DEVTAG command.
layer-b The optional second layer from which parameters are extracted. It is
used in relation to the first layer to extract geometric parameters such
as overlapped areas and perimeters.

L-Edit 14 User Guide Section 3 715


Chapter 23: HiPer Verify: Dracula Command Files Introduction LEXTRACT

NODE Extracts parameters from layer-a onto each node. Because of this,
layer-a must contain nodal information. Use this keyword when
checking the area ratio of layers on devices. For example:

LEXTRACT pset layer1 {layer 2} BY NODE outfile


{&}

type Type of device specified in the ELEMENT command. For example,


BJT[NV] for a vertical npn and BJT[LP] for a lateral pnp. Elements
can be BJT, CAP, DIO, MOS, and RES.
pfname Output parameter file name. Specify only one file name for each
conjoined group.
& Conjunction of several extractions into one output file.

Example

Extracting width and length of a BJT:

*DESCRIPTION
...
MODEL=BJT[VN],VNPN BJT[LP],LPNP BJT[SP],SPNP DIO[OV],OVD
PARSET BJTS AREA OVPR L W
...
*END
*OPERATION
...
AND EMIT BURIED XYZ
NOT XYZ TRUBASE MNO
EXT[PR] VNPN CONT LT 6 DUMMY
ELEMENT BJT[VN] VNPN BURIED TRUBASE METAL1
ELEMENT BJT[LP] CLPNP CLPNP BURIED OLPNP
ELEMENT BJT[SP] SUBPNP BULK EMIT TRUBASE
...
ELEMENT RES RESBODY TRUBASE
PARAMETER RES 1
...
LEXTRACT BJTS VNPN DUMMY by BJT[VN] VNPARA &
EQUATION W=OVPR &
EQUATION L=AREA/W
LPECHK BJTWPERCENT = 10.00 BJTLPERCENT = 11.0
LPECHK RESWPERCENT = 5.00 RESLPERCENT = 8.0
*END

To extract the length and width of a BJT, you must define a PARSET with a W and L. Then specify an
LEXTRACT defining the equations and extraction layers. In this example, an EXT[PR] check is done
between the device layer and a contact layer to produce an intermediate layer that can compute the
periphery overlap (OVPR). The periphery overlap is treated as W while L is computed from AREA
divided by W. If no existing layer can be used together with the device layer to produce the overlap
periphery you want, you might need a new layer for that purpose.

In the SPICE file generated by the LPESELECT BJT command in conjunction with the LEXTRACT
command, the bipolar SPICE file has the following format:

CA = the area of the collector BP = the perimeter of the base


CP = the perimeter of the collector EA = the area of the emitter

L-Edit 14 User Guide Section 3 716


Chapter 23: HiPer Verify: Dracula Command Files Introduction LEXTRACT

BA = the area of the base EP = the perimeter of the emitter

L-Edit 14 User Guide Section 3 717


Chapter 23: HiPer Verify: Dracula Command Files Introduction NOT

NOT

NOT layer1 layer2 result-layer {OUTPUT c-name l-num {d-num}}

Description

Calculates the region formed by layer1 minus layer2.

Arguments

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

Calibre Format

result-layer = layer1 NOT layer2

Or

c-name { @ NOT layer1 layer2 l-num


NOT layer1 layer2
}

L-Edit 14 User Guide Section 3 718


Chapter 23: HiPer Verify: Dracula Command Files Introduction OCTBIAS

OCTBIAS

OCTBIAS layer1 BY n1 result-layer {OUTPUT c-name l-num)

Description

Cuts all Manhattan corners on the specified layer at a 45° angle, a distance of n1 from the corner.

Arguments

layer1 A drawn or derived polygon layer.


n1 The distance by which to cut Manhattan corners

Examples

OCTBIAS layer1 BY 1.0 oct_layer1 OUTPUT oct_layer1

Calibre Format

There is no Calibre command corresponding to the Dracula OCTBIAS command.

L-Edit 14 User Guide Section 3 719


Chapter 23: HiPer Verify: Dracula Command Files Introduction OR

OR

OR layer1 layer2 result-layer {OUTPUT c-name l-num {d-num}}

Description

Calculates the region formed by the union of layer1 and layer2.

Arguments

,layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

Calibre Format

result-layer = layer1 OR layer2

Or

c-name { @ OR layer1 layer2 l-num


XOR layer1 layer2
}

L-Edit 14 User Guide Section 3 720


Chapter 23: HiPer Verify: Dracula Command Files Introduction PARSET

PARSET

PARSET = pname, param1, param2...paramn

Description

Specifies the names of a parameter set for a group of geometric primitives or computed parameters. To
extract these geometric primitives and computed parameters, use the LEXTRACT (page 715) and
EQUATION (page 701) commands in the operation block. If you specify LEXTRACT, you must also
specify PARSET.

Arguments

pname Specifies the parameter set name. Maximum length is four


alphanumeric. The first characters must be a letter. Do not specify any
of the following reserved names: MOSD, DIOD, DIO2, DIO3,
CAPD, CAPF, BJTD, or RESD. Default parameter set name is
CAPO.
param Specifies the parameters in a set. The parameter limit is 18. PRE
recognizes only the first ten parameter keywords and overwrites the
last eight parameters with node and subnode information in order to
save the data file size. The reserved parameter keywords used by
SPICE must be limited to the first ten parameters.
Geometric Primitives
Primitives that relate to the layer(s) you specify in LEXTRACT.
Extracted values relate to each device layer of layer-a in
LEXTRACT. You cannot alter these primitives by using an equation.
ANG Total internal angle
AREA Area .
PERI Perimeter
W1 Overlapped perimeter to node 1 of second layer
W2 Overlapped perimeter to node 2 of second layer
OVAR Overlapped area to second layer
OVPR Overlapped perimeter to second layer
WIDT Distance that the geometries on the layer run parallel
DEPT Distance between the parallel geometries
TPR Perimeter of touching geometries that cause fringe effect
CLL Sum of fringe effect related to TPR
ID Diameter of the inner circle. It’s possible that the diameter of
X-direction is different from that of Y-direction. Whichever
is smaller will be selected.
IN Number of circles
IW Width of each circle
IS Spacing between circles
Reserved Parameter Keywords
Keywords reserved for parameter values that relate to specific
devices. You usually specify these keywords for SPICE
simulations. You change these keywords by using an EQUATION
command.

L-Edit 14 User Guide Section 3 721


Chapter 23: HiPer Verify: Dracula Command Files Introduction PARSET

W MOS, BJT, and RES channel width


L MOS, BJT, and RES channel length
AD MOS
PD MOS
AS MOS
PS MOS
A1 DIO area
P1 DIO perimeter
A2 DIO area
P2 DIO perimeter
A3 DIO area
P3 DIO perimeter
C CAP value
R RES value
CA BJT collector area
CP BJT collector perimeter
BA BJT base area
BP BJT base perimeter
EA BJT emitter area
EP BJT emitter perimeter
K Fringe capacitance, attribute 2
LL Inductance of the inductor, calculated depending on the
equation specified in the rule file associated with that
particular element. See “Inductors,” below for information
on the different types of inductors.
User-Defined Parameters
Names other than reserved parameter keywords. The maximum
length is four alphanumeric characters and the first character must be
a letter.

Inductors
When you need to support inductors in layout designs, you must first use this PARSET command (in
the description block commands section of your rule file) to specify what parameters will be extracted,
followed by the ELEMENT IN? (see page 688)) in the operation block of commands in your rule file.

There are four geometric primitives regarding inductors provided: ID, IN, IW, and IS; and one reserved
parameter, LL. See the Geometric Primitives in “Arguments,” above for definitions of these four
primitives.

Example

Extracting width and length of a BJT:

*DESCRIPTION
...
MODEL=BJT[VN],VNPN BJT[LP],LPNP BJT[SP],SPNP DIO[OV],OVD
PARSET BJTS AREA OVPR L W
...

*END

L-Edit 14 User Guide Section 3 722


Chapter 23: HiPer Verify: Dracula Command Files Introduction PLENGTH

PLENGTH

PLENGTH layer1 measurement {result-layer} {OUTPUT c-name l-num { d-num}}

Description

Produces layer1 edges where the length of a contiguous set of edges conforms to the constraint.

Arguments

layer1 A drawn or derived polygon layer


measurement NE/EQ n1— Output edges with length that are not equal or equal to
the constraint value n1 respectively.

RANGE n1 n2 — Outputs edge paths with length that are greater than
n1 and less than n2 ( > n1 < n2).
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored

Examples

INT [R] metal1 LT 0.5 thin_metal1


PLENGTH thin_metal1 RANGE 0 50.0 OUTPUT M1.D 64

Calibre Format

PATH LENGTH layer1 constraint

L-Edit 14 User Guide Section 3 723


Chapter 23: HiPer Verify: Dracula Command Files Introduction RECTCHK

RECTCHK

RECTCHK[option] layer {WIDLEN NE/EQ value1 value2} {result-layer} {OUTPUT


c-name l-num}

RECTCHK[option] layer {WIDTH NE/EQ/LT/RA/GT value1 {value2}} {LENGTH


NE/EQ/LT/RA/GT value1 {value2}} {result-layer} {OUTPUT c-name l-num}

Description

Selects rectangles with specified width and height measurements.

Arguments

Option R — Select the shape only if it is a rectangle. By default, RECTCHK


selects all shapes that are not rectangular in addition to the selected
rectangles.

A — If both WIDTH and LENGTH are specified, by default the OR


of the WIDTH and LENGTH constraints must be satisfied for a
rectangle to be selected. If you use [A], then the AND of the WIDTH
and LENGTH constraints must be satisfied for a rectangle to be
selected.

T — Check rectangles that form butted trapezoids. This option is not


supported.

WIDLEN Selects rectangles of dimension equal to or not equal to value1 by


value2.
WIDTH Selects rectangles with width meeting the specified measurement.
LENGTH Selects rectangles with length meeting the specified measurement.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment.

L-Edit 14 User Guide Section 3 724


Chapter 23: HiPer Verify: Dracula Command Files Introduction SCONNECT

SCONNECT

SCONNECT upper_layer lower_layer BY contact_layer {LINK label}

Description

Establishes soft connections from the upper_layer polygons to lower_layer polygons through
contact_layer polygons. Connections are unidirectional; node numbers are passed from upper_layer to
lower_layer, but not in the other direction.

Connectivity information is passed from upper_layer to lower_layer, through contact_layer objects,


where lower_layer objects have positive area overlap both contact-layer and upper_layer objects.
Contact polygons receive node numbers from upper_layer geometries.

Arguments

upper_layer A drawn or derived polygon layer.


Lower_layer A drawn or derived polygon layer.

L-Edit 14 User Guide Section 3 725


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT ANGLE

SELECT ANGLE

SELECT layer1 ANGLE [n1] output-layer {OUTPUT c-name l-num {d-num}}

Description

Select polygons based on the angles of the edges forming the polygon.

Arguments

layer1 A drawn or derived polygon layer.


ANGLE [n1] n1 can be one of the following:

90 — Select polygons with all edges horizontal or vertical.


45 — Select polygons with all edges horizontal or vertical or 45°, and
containing at least on 45° edge.
-90 — At least one edge is not horizontal or vertical.
-45 — At least one edge is not horizontal, vertical or 45°.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

L-Edit 14 User Guide Section 3 726


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT BY LABEL

SELECT BY LABEL

SELECT layer1 BY text_layer LABEL([t] | [t']) ( label| label-list)


result-layer {OUTPUT c-name l-num { d-num}}

Description

Produces all layer1 polygons that intersect the location of text objects on layer text_layer having the
specified label name.

Arguments

layer1 A drawn or derived polygon layer.


text_layer A layer containing text objects. This layer must have a corresponding
IDTEXT statement in the input layer block.
t Selects objects that are labeled by the specified text.
t’ Selects objects that are not labeled by the specified text.
label Any label, which can include meta characters such as ?.
label-list A list of up to a maximum of 20 labels. The list must be surrounded
by braces and labels names should be space or comma separated. ({
label1 label2 ...}).
result layer Name of the output layer.

Example

IDTXT8 = IDTEXT 8
SELECT METAL1 BY IDTXT8 LABEL[T] VDD? MT1VDD ;

Calibre Format

SELECT layer1 BY text_layer LABEL([t] | [t']) ( label| label-list)


result-layer {OUTPUT c-name l-num { d-num}}

Translates to:

If [t] option
result-layer = layer1 WITH TEXT label text_layer
c-name { COPY result-layer }
If [t'] option
result-layer = layer1 NOT WITH TEXT label text_layer
c-name { COPY result-layer }

If label-list is specified, then create a temp result layer for each label in the label-list, then OR the temp
layers together.

L-Edit 14 User Guide Section 3 727


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT CONN

SELECT CONN

SELECT layer1 CONN layer2 result-layer {OUTPUT c-name l-name {d-num}}

Description

Produces layer1 polygons that are connected to layer2. Select CONN first selects all layer1 polygons
that are connected to layer2, then adds to the selection any other layer1 polygons that are on the same
node as any polygons in the originally selected set. If either layer1 or layer2 do not have connectivity,
then the result is an empty layer.

Arguments

layer1 A drawn or derived polygon layer.


layer2 A drawn or derived polygon layer.

L-Edit 14 User Guide Section 3 728


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT CUT, TOUCH, ENCLOSE, OVERLAP

SELECT CUT, TOUCH, ENCLOSE, OVERLAP

SELECT[N] {NOT} layer1 relation {[n1:n2]} layer2 result-layer {OUTPUT c-name


l-num {d-num}}

Description

Selects polygons from layer1 that have a specified relation to layer2. Relations can be CUT, TOUCH,
ENCLOSE, or OVERLAP. A range may also be specified.

Arguments

N The N option turns on node-based selection. Select operations with


the N option first select all polygons on layer1 that have the specified
relation to layer2, irrespective of connectivity, then adds to the
selection any other layer1 polygons that are on the same node as any
polygon in the originally selected set.
layer1 A drawn or derived polygon layer
layer2 A drawn or derived polygon layer
relation CUT — Produces layer1 polygons that have portions both inside and
outside layer2. The NOT option produces those polygons not
produced by the corresponding SELECT CUT operation.

TOUCH — Produces all layer1 polygons that are completely outside


layer2 polygons but share an edge with layer2 polygons. The NOT
option produces those polygons not produced by the corresponding
SELECT TOUCH operation

ENCLOSE — Produces layer1 polygons that completely enclose any


layer2 polygon. The NOT option produces those polygons not
produced by the corresponding SELECT ENCLOSE operation

OVERLAP — Produces all layer1 polygons that have some or all


area inside layer2 polygons or share an edge with layer2 polygons.
The NOT option produces those polygons not produced by the
corresponding OVERLAP operation
[n1:n2] Outputs layer1 polygons satisfy the relation with the specified range
of layer2 polygons. The range values (n1and n2) are inclusive and
must be integers. Zero is not allowed.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

Calibre Format

result-layer = layer1 CUT layer2 >=n1 <= n2


result-layer = layer1 TOUCH layer2 >=n1 <= n2

L-Edit 14 User Guide Section 3 729


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT CUT, TOUCH, ENCLOSE, OVERLAP

result-layer = layer1 ENCLOSE layer2 >=n1 <= n2


result-layer = layer1 INTERACT layer2 >=n1 <= n2

L-Edit 14 User Guide Section 3 730


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT INSIDE, OUTSIDE, HOLE

SELECT INSIDE, OUTSIDE, HOLE

SELECT[N] {NOT} layer1 relation layer2 result-layer {OUTPUT c-name l-num


{d-num}}

Description

Selects polygons from layer1 that have a specified relation to layer2. Relations can be INSIDE,
OUTSIDE or HOLE.

Arguments

N The N option turns on node-based selection. Select operations with


the N option first select all polygons on layer1 that have the specified
relation to layer2, irrespective of connectivity, then adds to the
selection any other layer1 polygons that are on the same node as any
polygon in the originally selected set.
layer1 A drawn or derived polygon layer
layer2 A drawn or derived polygon layer
relation INSIDE — Produces all layer1 polygons that are completely inside
layer2 polygons. Touching from the inside is considered to be inside.
The NOT option produces those polygons not produced by the
corresponding SELECT INSIDE operation.

OUTSIDE — Produces all layer1 polygons that are completely


outside layer2 polygons. Touching from the outside is considered to
be outside. The NOT option produces those polygons not produced by
the corresponding SELECT OUTSIDE operation.

HOLE — Produces all layer1 polygons that exactly fit inside holes of
layer2 polygons. The NOT option produces those polygons not
produced by the corresponding SELECT HOLE operation.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

Unsupported Arguments

The N option for node based selection is not supported.

Calibre Format

result-layer = layer1 INSIDE layer2


result-layer = layer1 OUTSIDE layer2

There is no Calibre command corresponding to the Dracula HOLE command.

L-Edit 14 User Guide Section 3 731


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT LABEL

SELECT LABEL

SELECT layer1 LABEL net_name result-layer {OUTPUT c-name l-num { d-num}}

Description

Produces all layer1 polygons that belong to the net having the specified net name. The connectivity on
layer1 must be established through a connectivity operation. Net names are given by placing text labels
(ports) on the layout.

Arguments

layer1 A drawn or derived polygon layer.


net_name The text label of the node to check.

Calibre Format

SELECT layer1 LABEL net_name result-layer {OUTPUT c-name l-num { d-num}}

Translates to:

result-layer = NET layer1 net_name


c-name {COPY result-layer}

L-Edit 14 User Guide Section 3 732


Chapter 23: HiPer Verify: Dracula Command Files Introduction SELECT VERTEX

SELECT VERTEX

SELECT layer1 VERTEX [n1: n2] result-layer {OUTPUT c-name {d-num}}

Description

Produces layer1 polygons that satisfy the specified vertex count range.

Arguments

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
[n1:n2] The range of vertex counts. The command produces layer1 polygons
that contain between n1 and n2 vertices, inclusive of n1 and n2. The
values of n1 and n2 must be nonzero integers
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

Calibre Format

result-layer = layer1 VERTEX layer2 >=n1 <= n2

L-Edit 14 User Guide Section 3 733


Chapter 23: HiPer Verify: Dracula Command Files Introduction SHRINK

SHRINK

SHRINK layer1 dx dy dx1 dy1 result-layer {OUTPUT c-name l-num {d-num}}

Description

Undersizes right, left, top and bottom edges of a layer by individually specified amounts. This
command is supported only in the case of dx=dy=dx2=dy2.

Arguments

layer A drawn or derived polygon layer


dx, dy, dx2, dy2 The amount to shrink layer1 polygons. All values must be positive
and equal. For all-angle polygons, Dracula shrinks all-angle edges by
more than the specified grow amount. L-Edit shrinks all-angle edges
by exactly the specified amount.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment d-num is ignored.

Unsupported arguments

This command is supported only in the case of dx=dy=dx2=dy2.

Calibre Format

result-layer = SIZE layer1 BY size_value

L-Edit 14 User Guide Section 3 734


Chapter 23: HiPer Verify: Dracula Command Files Introduction SIZE

SIZE

SIZE layer1 BY size_value {result-layer} {OUTPUT c-name l-num {d-num}}

SIZE layer1 BY size_value STEP step_value {result-layer} {OUTPUT c-name


l-num {d-num}}

SIZE layer1 WITHIN layer2 BY size_value [STEP step_value] {result-layer}


{OUTPUT c-name l-num {d-num}}

SIZE layer1 DOWN-UP BY size_value {result-layer} {OUTPUT c-name 1-num


{d-num}}

Description

Resizes a layer up or down. A positive size_value performs a size up, or grow, and a negative
size_value performs a size down, or shrink.

Arguments

layer1 A drawn or derived polygon layer


size_value The amount to grow or shrink the layer1 polygons.
WITHIN layer2 Constrains layer1 to travel inside layer2 when performing the SIZE
operation. size_value must be positive when this option is used.
STEP step_value The step size of the sizing process. If size_value is not evenly
divisible by step_value then the last step may be smaller than
step_value in order to size by exactly size_value.
DOWN-UP Performs a size-down and size-up of the specified amount in a single
operation. If size_value is negative the effect is a size-up followed by
size-down.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored.

Unsupported Arguments

Options B,L,N,O,P,R,S,T,W are not supported.

Calibre Format

result-layer = SIZE layer1 BY size_value INSIDE OF layer2 STEP step_value

Or

result-layer = SIZE layer1 BY size_value UNDEROVER

L-Edit 14 User Guide Section 3 735


Chapter 23: HiPer Verify: Dracula Command Files Introduction SNAP

SNAP

SNAP layer1 TO grid-value {result-layer}

Description

Snaps the coordinates of the geometry to a specified grid. Results are output to another layer, or can be
placed back on the original layer.

Arguments

,layer1 A drawn or derived polygon layer


lgrid-value Grid to which to snap the layer. The value must be the multiple of
the RESOLUTION specified in the Description block.
result-layer IAn optional target layer for the snapped layer. If not specified, the
snapped results overwrite layer1.

L-Edit 14 User Guide Section 3 736


Chapter 23: HiPer Verify: Dracula Command Files Introduction STAMP

STAMP

STAMP layer1 BY layer2 {OUTPUT {[options]}c-name l-num { d-num}}

Description

Transfers net identification information from layer2 polygons to layer1 polygons where layer1 polygons
are overlapped by layer2 polygons from a single net. If a layer1 polygon is overlapped by two or more
layer2 polygons from different nets, or not overlapped at all, then the layer1 polygon is an undefined
net. Warning messages report missing or conflicting connections.

Arguments

layer1 A drawn or derived polygon layer.


layer2 A drawn or derived polygon layer.
contact-layer A drawn or derived polygon layer.
contact-layer An optional secondary keyword set, where name indicates an
electrical node, that specifies the node number for floating polygons.
Floating polygons are polygons on any specified lower_layer that are
not connected to any upper_layer polygons. Floating polygons
receive the node number of the electrical node having the specified
name in the top-level cell.

L-Edit 14 User Guide Section 3 737


Chapter 23: HiPer Verify: Dracula Command Files Introduction WIDTH

WIDTH

WIDTH {[option1]} layer1 {&layer1}{[O]} measurement ANGLE = angle-opt


{result-layer} {OUTPUT c-name l-num {d-num}} {&}

WIDTH layer1 RECT = n3 BY n4 {result-layer} {OUTPUT c-name l-num {d-num}}

Description

Measures the distance between the inside of layer1 boundaries, and outputs edge pairs that meet the
constraint.

Arguments

layer1 A drawn or derived polygon layer.


option1 The following options are common to WIDTH, ENC, EXT, and
INT:

C — Only flags the edge-pair when the edges are parallel.

C’ — Only flags the edge pair when the edges are nonparallel.

P (-) — Flags segments of edges that project onto each other. Dracula
definition is defined as: Two edges project if perpendicular lines from
a referenced edge intersect the other edge. The referenced edge is the
edge most closely aligned to the x or y axis.

P'(-) — Flags edges that do not project onto each other.

R — Constructs polygons from the projection of error edges. You


must specify only the result-layer, and not specify OUTPUT when
using this option. This option turns on the P option.

R’ — Outputs error flags in polygon format so you can reuse error


data. You can process the created layer with logical operations. The
flags are one RESOLUTION unit wide (as specified in the
Description block). You cannot specify an OUTPUT error cell.

S (+) — Flags violations on the polygon if the edges of the polygon


are within a “square boundary” inside of the other polygon edge.
X — Checks the delta value in the x direction between two edges. The
edges must project onto each other. Non-Manhattan data is not
checked.

Y — Checks the delta value in the y direction between two edges. The
edges must project onto each other. Non-Manhattan data is not
checked.

L-Edit 14 User Guide Section 3 738


Chapter 23: HiPer Verify: Dracula Command Files Introduction WIDTH

The following option1 options are for WIDTH command only:

D — Disables acute-angle checking.

L — The L option when used with SELEQ is useful for exact size
checks.

WIDTH [L] VIA1 SELNE 3.0 result-layer

will output VIA1 polygons that are not exactly 3.0x3.0 in dimension.
measurement LT/LE n1 — Flags an error if the two segments are spaced less than
n1 for LT or less than or equal to n1 for LE. Does not flag an error if
the segments touch.

EQ n1 — Flags an error if the two segments are spaced equal to n1.

GT/GE n1 — Flags an error if the two segments are spaced greater


than n1 for GT or greater than or equal to n1 for GE. Does not flag an
error if the segments touch.

RANGE n1 n2 — Flags an error if the two segments are spaced less


than n2 and greater than n1. If you do not want acute-angle error
flags, you must specify the RANGE measurement.

SELLT/SELLE n1 — SELLT and SELLE output those layer1


polygons that would be flagged by using LT n1 or LE n1 with the
same options. Specify a result-layer name and do not use the
OUTPUT statement when specifying this option.

SELEQ/SELNE n1 — SELEQ and SELNE output those layer1


polygons that would be flagged by using EQ n1 or an NE n1 with the
same options. Specify a result-layer name and do not use the
OUTPUT statement when using this option.

SELRA n1 n2 — SELRA outputs those layer1 polygons that would


be flagged by using RANGE n1 n2 measurement with the same
options. Specify a result-layer name and do not use the OUTPUT
statement when specifying this option.

SELGT/GE n1 — SELGT and SELGE outputs those layer1


polygons that would not be flagged when you specify a LE n1 or LT
n1 measurement with the same options. Specify a result-layer name
and do not use the OUTPUT statement when using this option.
angle-opt 45, non-45, 90, or non-90 — Specifies that only edge-pairs at the
specified angle are to be checked. When you use this option, the C
option is automatically invoked.
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored
& Creates a conjunctive rule. See “Conjunctive Rules” on page 648.

L-Edit 14 User Guide Section 3 739


Chapter 23: HiPer Verify: Dracula Command Files Introduction WIDTH

[O] The [O] option after layer1 indicates to use the original layer, not the
layer generated by the previous operation in the conjunctive rule. Use
this option only with a conjunctive rule.

The WIDTH rule with the RECT option flags rectangles that are exactly n3 by n4 in dimension.

Unsupported Arguments

The following options are not supported:

CORNER-CORNER n2, CORNER-EDGE n3

Calibre Format

The basic Dracula rule

WIDTH LAYER1 LT 2.0 OUTPUT WIDTH1 63

Translates to Calibre format as:

WIDTH1 {
INT LAYER1 < 2.0 ABUT >0<90 SINGULAR
}

The mapping of Dracula options to Calibre format is shown in the table below. The following options
are common to WIDTH, ENC, EXT, INT:

C PARALLEL ONLY
C’ NOT PARALLEL
P PROJECTING
P’ N OT PROJECTING
R PROJECTING REGION
R’ In a width rule, R' is translated using EXPAND EDGE layer
OUTSIDE BY.

WIDTH[R'] layer1 LT d result

Translates to:

temp = INT [layer1] < d ABUT >0<90


result = EXPAND EDGE temp OUTSIDE BY 0.01
// Here 0.01 is the value of RESOLUTION
S SQUARE

L-Edit 14 User Guide Section 3 740


Chapter 23: HiPer Verify: Dracula Command Files Introduction WIDTH

LT/LE n1 < / <= n1

WIDTH layer1 LT d

Translates to:

INT layer1 < d ABUT >0<90 SINGULAR


EQ/NE n1 == / != n1
RANGE n1 n2 > n1 < n2, does not include ABUT SINGULAR parameters.
SELLT/SELLE WIDTH layer1 SELLT d result-layer

Translates to:

temp-edge-layer = INT [layer1] < d result-layer = layer1 WITH


EDGE temp-edge-layer
angle-opt There is no direct translation to Calibre for angle-opt.

The following options apply to WIDTH only:

D Do not include ABUT >0< 90.


L The L option when used with SELEQ is useful for exact size checks.

WIDTH[L] layer1 SELEQ d rule-name

Translates to:

Rule-name {RECTANGLE layer1 == d BY ==d }

WIDTH[L] layer1 SELNE d rule-name

Translates to:

Rule-name { NOT RECTANGLE layer1 == d BY ==d }

The WIDTH rule with the RECT option translates as follows:

WIDTH layer1 RECT = n3 BY n4 {trapfile} {OUTPUT c-name l-num {d-num}}

This translates to Calibre as:

c-name { RECTANGLE layer1 ==n3 BY ==n4}

L-Edit 14 User Guide Section 3 741


Chapter 23: HiPer Verify: Dracula Command Files Introduction XOR

XOR

XOR layer1 layer2 result-layer {OUTPUT c-name l-num {d-num}}

Description

Calculates the region formed by both layers minus the region shared by both layers.

Arguments

layer1 A drawn or derived polygon layer


layer2 A drawn or derived polygon layer
OUTPUT If the OUTPUT option is specified, the results of the operation are
sent as errors to a rule named c-name. The input layer names and
l-num are written as a rule comment. d-num is ignored

Calibre Format

result-layer = layer1 XOR layer2

Or

c-name { @ XOR layer1 layer2 l-num


XOR layer1 layer2
}

L-Edit 14 User Guide Section 3 742


24 HiPer Verify: Assura Command
Files

HiPer Verify provides a significant compatibility with the support of Assura™ DRC. SKILL commands
that control the flow of the DRC checks are also supported so the command file can be run directly in
HiPer Verify without modification. Layer names, purposes and parameters imported via L-Edit’s
capability to import Virtuoso are used when you run Assura command files.*

This chapter provides a reference to compatible DRC command file formats in L-Edit and directions for
setting up Assura rules and using the SKILL-language parser.

Typographic Syntax

The following typographic conventions are used in this chapter.

literal Nonitalic words indicate keywords that you must enter literally for
rule, function, or option names.
field Words in italics indicate user-defined arguments for which you must
substitute a name or a value.
| Vertical bars separate possible choices for a single argument. They
take precedence over any other character.
[ ] Brackets denote optional arguments. When used with vertical bars,
they enclose a list of choices. You can choose one argument from the
list or choose none.
{ } Curly braces are used with vertical bars to enclose a list of choices.
You must choose one argument from the list.
An ellipsis (three dots in a row, ...) indicates that you optionally can
... repeat the previous argument.

Terminology

The basic command components described in this chapter.

rules Statements contained within rule sections in rule files and run-specific
files are called rules.
parameters Statements that are preceded with the “?” character that are placed
within a parameter section are called parameters.
functions Statements contained within rule files and run-specific files that are
placed outside of rule or parameter sections are called functions.

* Assura is a registered trademark of Cadence Design Systems, Inc.

L-Edit 14 User Guide Section 3 743


Chapter 24: HiPer Verify: Assura Command Files

Rule Syntax and Formatting

Assura rules must conform to these requirements:

ƒ Layer names, cell names and file names are case sensitive
ƒ Layers must be defined before they are used
ƒ Layers can be redefined any number of times

L-Edit will check for the following errors and resolve them as described:

ƒ If an operation uses an undefined layer, L-Edit will warn that the layer mane is not defined.
ƒ If an edge layer is input for an operation that is only valid for polygon layer input, L-Edit will warn
that there is a layer type mismatch.
ƒ If an operation uses a layer that is not created because it’s the result of an unsupported operation,
L-Edit will cancel the operation.
ƒ If an operation or option is not supported, L-Edit will ignore the entire operation.

L-Edit provides these formatting benefits:

ƒ Statements that appear in a rule can begin anywhere on a line and can span lines. In addition,
statements and operations need not each begin on a new line.
ƒ You can right-click on a layer name in the text editor to access the command “Go To Layer
Definition” in the context-sensitive menu, which jumps the cursor to the line with the definition for
that layer.
ƒ #DEFINE, #IFDEF, #ELSE, and #ENDIF are supported as a mechanism of conditionally executing
blocks of commands
ƒ Commands may be commented out using C-Style (/* … */) and C++ Style (//) comments
characters. C-Style comments may span multiple lines. C++ Style comments extend from the
comment characters to the end of the line.

Structure of an Assura File

Assura DRC rules are written in logical order to test foundry design rules against the input
layout data. The first step is identifying the physical design layers contained in the input layout
data. The next step is to derive additional layers from the original input layers to allow the tool
to test against specific foundry requirements. At that point a comprehensive set of commands
to check geometric shapes and relationships in the layout to foundry process design rules can
be applied. If needed, layout geometries can then be adjusted or resized to conform prior to
other checking and the production of the final mask.

Layer Definition Rules


These rules identify the physical design layers contained in the input layout database. To allow
the DRC rules to be used with different layout databases, you can have separate layerDefs
subsections, for example, one listing L-Edit layer names and another listing GDSII layers.

Layer Derivation Rules


These logical operation rules are applied to the existing layers to derive new layers to test
against specific foundry requirements. For example, you can derived MOSFET gate regions,
well taps and substrate ties from the original layer information.

L-Edit 14 User Guide Section 3 744


Chapter 24: HiPer Verify: Assura Command Files

DRC Operations
DRC verifies that a layout conforms to the technology design rules. The Assura DRC checks every cell
in the layout as if it the highest in the hierarchy so that errors are reported within a cell only once, rather
than once per instance of the cell.

Command Usage
ƒ Commands can be used as layer derivation statements or in rule check statements.
ƒ Commands may be nested. For example:
outLayer = geomAnd( geomAbutting( L1 L2 ) L3 )
ƒ A layer derivation statement writes the results of a command to a named layer. For example:
AND POLY ACTIVE GATE
ƒ A rule check statement uses the OUTPUT keyword to direct the results of a command to the
Verification Error Navigator. The name after the OUTPUT keyword is the rulename that will
appear in the Verification Error Navigator. The number following the rulename is a layer number
used by Assura. For example:
EXT GATE LT 2.0 OUTPUT GAS1 64
ƒ Any command, not only dimensional check operations, may direct errors to the Verification Error
Navigator. For example:
SEL VIA OUTSIDE METAL V1 OUTPUT V1 64

L-Edit 14 User Guide Section 3 745


Chapter 24: HiPer Verify: Assura Command Files How To Run Assura Rules

How To Run Assura Rules

To enable Assura DRC rules, invoke Tools > DRC Setup and add your Assura rule file(s) to the DRC
Rule Sets to run list. (See “Setting Up DRC” on page 476 for complete dialog instructions.)

Assura Setup

The Setup Assura button accesses this multi-tabbed dialog.

L-Edit 14 User Guide Section 3 746


Chapter 24: HiPer Verify: Assura Command Files How To Run Assura Rules

Setup Assura — avParameters


Assura allows you to define certain avParameters that control the execution of the Assura run.

L-Edit supports following parameters:

inputLayout inputLayout controls which layerDefs block in the Assura rule file to
use. Valid values are DF2, DFII, GD2, or GDII. Upper or lower case
is acceptable.

The layerDefs section of an Assura file defines the original layers in


the design. An Assura rule file may contain layer definitions based on
layer names in the database using the “df2”option, or based on GDS
layer numbers using the “gds2”option, as shown below.

layerDefs( "df2"
layer1
layer2
..)
layerDefs( "GDS2"
layer1
layer2
..
)
dbuPerUU Specifies the database units per user unit and can be used to
override the default value, which is taken from the Setup
Design > Technology tab in L-Edit.

L-Edit 14 User Guide Section 3 747


Chapter 24: HiPer Verify: Assura Command Files How To Run Assura Rules

Setup Assura — Switches


Assura rule files can contain sets of operations to be included or excluded using a conditional statement
that is executed based on the presence of a switch in the Switches tab of the Setup Assura dialog.

The avSwitch() function is used to test whether a user-defined switch has been defined and marked as
present in the Switches tab. The switch() function is also supported as an alias for avSwitch.

Name The name of a switch describing a certain rule set.


Present When this box is checked, the conditional statement in the Name
column will be executed.

For example, if the “doMetal1Rule” switch is defined in the Switches tab of the Assura Setup dialog
and the Present column is checked, then the Metal1 drc rules in the conditional check will be run. The
related Assura conditional statement would read as follows.

if( avSwitch("doMetal1Rules") then


drc(Metal1 sep < 1 "Metal1 spacing < 1")
drc(Metal1 width < 1 "Metal1 width < 1")
)

L-Edit 14 User Guide Section 3 748


Chapter 24: HiPer Verify: Assura Command Files How To Run Assura Rules

Setup Assura — userVariables


Assura rule files may refer to user parameters that are defined outside of the rule file, to control the flow
of execution, or as input values input to DRC operations.

User variables are sent to the Skill parser verbatim, with quotes included, as:

name = value

For example, the variable TopMetal is defined with a value “M4.” The variable TopMetal could be used
in a rule file as follows:

case(TopMetal
("M4"
… operations if TopMetal is "M4"
)
("M5"
… operations if TopMetal is "M5"
)
) ; case TopMetal

L-Edit 14 User Guide Section 3 749


Chapter 24: HiPer Verify: Assura Command Files How To Run Assura Rules

Setup Assura — techParams


Assura rule files may refer to technology parameters defined in the layout database, using the
techGetParam() function. This function returns the value of a named parameter from the layout
database. You define the technology parameters accessed by the techGetParam() function in the
techParams tab of the Setup Assura dialog.

For example, technology parameters libName, grid, NWL2, NWL1, ME1B, and ME1A are defined in the
techParams tab. The Assura rules file can access the value of these parameters as shown below:

val = techGetParam(tfId "NWL1")


sprintf(txt "NWL1: NWell Minimum Width = %L" val)
drc( NWell width < val "txt")

Setup Assura — Prolog Text


The Prolog Text tab allows you to enter Skill code to be executed prior to execution of the main Assura
rule file. This can be used to setup the runtime environment for any items that do not fit within the
previously described methods.

Initializing the Assura Setup

Using Virtuoso Import for Assura Setup

Importing a Virtuoso technology file that corresponds to the Assura file also imports the correct layer
name and purpose settings and techParams for the design.

Note: You must do this technology import on an empty layout, before any layout is created,
Then you can either create layout or import it via GDSII.

L-Edit 14 User Guide Section 3 750


Chapter 24: HiPer Verify: Assura Command Files How To Run Assura Rules

Parsing the File to Setup Assura

If you add the Assura file to the list of files in Setup DRC, and then perform a syntax check on the
Assura file by opening the file and invoking Tools > Check Syntax (shortcut key F6), you can initialize
the Switches, userVariables, and techParams tabs in the Setup Assura dialog, with all switches, user
variables and technology parameters that are found in the Assura rule file.

Note, however, that switches are initialized as not present, and user variables and technology
parameters are initialized without any values.

L-Edit 14 User Guide Section 3 751


Chapter 24: HiPer Verify: Assura Command Files Functions By Category

Functions By Category

Layer Definition Rules


Drawn layers are the layers you create in your layout. This section contains a description of the
following layer definition section keywords and rules:

ƒ cellBoundary (page 757)


ƒ layerDefs (page 814)
ƒ layerName (page 815)
ƒ pinText (page 818)
ƒ textToPin (page 820)
ƒ textToPin (page 820)

Layer Derivation Rules


Derived layers are the layers the tool creates when it processes the original layers. Examples of derived
layers are sized layers, combined layers you create with logical operations for gate-recognition
purposes, or edge layers you create with geomGetEdge for device recognition purposes.

You can use a derived layer the same way you use an original layer. For example, in this simple rule:

gate = geomAnd( polysilicon diffusion )

creates a derived gate layer from the original polysilicon and diffusion layers. You can also use

x = gate

so the derived layer names x and gate refer to the same data created by the geomAnd rule.

The general format of the rules file used to define original layers and derive additional layers is as
follows:

drcExtractRules(
layerDefs(original layer definition rules)
<layer derivation rules>
<other rules related to the appropriate Assura verification tool>
)

Layer Derivation Rules Using Shape Selection


Shape selection rules let you derive layers by selecting shapes from one or two layers.

The selection criteria can be a logical operation performed upon, or a relationship between, shapes on
one or two layers. It can also be based upon the geometries or characteristics of shapes, for instance
angled edges or text strings, on one or two layers.

These shape selection rules are essential to derive layers from original layout layers in order to perform
foundry-specified DRC checks and to create the device recognition and terminal layers necessary for
LVS verification.

ƒ geomAnd (page 771)


ƒ geomAndNot (page 772)

L-Edit 14 User Guide Section 3 752


Chapter 24: HiPer Verify: Assura Command Files Functions By Category

ƒ geomAvoiding (page 773)


ƒ geomButting (page 775)
ƒ geomButtOnly (page 776)
ƒ geomButtOrCoin (page 777)
ƒ geomButtOrOver (page 778)
ƒ geomCat (page 779)
ƒ geomEnclose (page 785)
ƒ geomContactCheck (page 783)
ƒ geomEnclose (page 785)
ƒ geomGetAngledEdge (page 786)
ƒ geomGetEdge on page 788
ƒ geomGetHoled on page 789
ƒ geomGetLength on page 790
ƒ geomGetNet on page 791
ƒ geomGetNon45 on page 792
ƒ geomGetNon90 on page 793
ƒ geomGetNonRectangle on page 794
ƒ geomStraddle on page 812
ƒ geomGetTexted on page 797
ƒ geomGetUnTexted on page 798
ƒ geomGetVertex on page 799
ƒ geomStraddle on page 812
ƒ geomStraddle on page 812
ƒ geomOutside on page 806

ƒ geomOverlap on page 807


ƒ Arguments on page 809
ƒ geomSepOutside on page 809
ƒ geomStraddle on page 812
ƒ geomWidth on page 813
ƒ geomgetpolygon

Layer Derivation Rules using Shape Sizing


ƒ geomSize on page 810
ƒ geomSize on page 810
ƒ saveDerived on page 819

Layer Derivation Rules using Shape Generation


ƒ geomHoles on page 801
ƒ geomHoles on page 801
ƒ geomNoHoles on page 804

L-Edit 14 User Guide Section 3 753


Chapter 24: HiPer Verify: Assura Command Files Functions By Category

Layout Display Rules


ƒ offGrid (DRC Offgrid Data Check) on page 816

Layout Extraction Rules


ƒ geomConnect on page 781
ƒ geomStamp on page 811

Device Extraction Rules


ƒ extractCAP on page 770

DRC Operations
DRC rules verify that a layout conforms to the minimum width, spacing, and other design constraints
established for a given fabrication process or process variation.

ƒ area (page 760)


ƒ coverage (page 760)
ƒ sep (page 762)
ƒ notch (page 761)
ƒ sepNotch (page 762)
ƒ width (page 763)
ƒ enc (page 761)
ƒ ovlp (page 762)
ƒ venc (page 763)

DRC Check Modifiers


DRC check modifiers apply restrictions on the edge relationships for the drc checks. You can use the
check modifiers in any combination as long as they are not mutually exclusive (for example, Parallel
and notParallel.)

[outLayer = ] drc( inLayer1 [inLayer2] check [modifiers] [message])


[errorLayer(outLayer)]

Note that if you use the sameNet or diffNet modifiers, you must first use geomConnect (page 781)
to connect the input layers.

Note: When you run a connectivity check in a check area window, the status of connected
shapes outside the checking area is not included.

ƒ diffNet (page 766)


ƒ sameNet (page 768)
ƒ parallel (page 768)
ƒ notParallel (page 767)
ƒ withPerp (page 768)
ƒ onlyPerp (page 767)
ƒ opposite (page 767)
ƒ app (page 765)

L-Edit 14 User Guide Section 3 754


Chapter 24: HiPer Verify: Assura Command Files Functions By Category

ƒ length, lengtha, lengthb (page 766)


ƒ lessShielded (page 767)
ƒ shielded (page 768)

DRC Output Modifiers


DRC output modifiers let you change the format of the output of a DRC check. Only one of these output
modifiers below may be used in a DRC operation.

ƒ edge, edgea, edgeb (page 766)


ƒ fig, figa, figb (page 766)

L-Edit 14 User Guide Section 3 755


Chapter 24: HiPer Verify: Assura Command Files Functions

Functions

L-Edit 14 User Guide Section 3 756


Chapter 24: HiPer Verify: Assura Command Files Functions cellBoundary

cellBoundary

layerName = cellBoundary([root][""])

Description

This keyword simply derives the minimum bounding box (MBB) of the top-level cell of the active
design. It is used for area-based rules that rely on cell boundaries.

As of version 14, the file and cellname options are not supported, cellBoundary will always
specify the rectangle bounding the top cell.

L-Edit 14 User Guide Section 3 757


Chapter 24: HiPer Verify: Assura Command Files Functions drc

drc

[outLayer = ]drc( inLayer1 [inLayer2] check [modifiers]


)[errorLayer(outLayer)])

Description

Use the drc rule for design-rule checking operations with the available keywords and options.

If outLayer is specified, you must use errorLayer(outLayer) to save the error layer. If outLayer is not
specified, an error layer is saved automatically.

Adding a Message to a DRC Check


You can include a message with any of the drc check keywords by entering text enclosed with double
quotes as the last argument. L-Edit will display the text verbatim in the Error Navigator. In the
following example,

angmet = geomGetAngledEdge( metal 0 < keep < 90 )


drc( angmet via enc < distance "via enclosure violation near angled metal" )
badvia1 = drc( metal via venc(( width >20 encAll < 1.5 ) ( width <= 20
encAll <0.8 ))
errorLayer( badvia1 "via enclosure violation near manhattan metal" )
badvia2 = geomAndNot( via metal )errorLayer( badvia2 "via straddling or
outside metal" )

L-Edit will display via enclosure violation near angled metal or via enclosure violation near
manhattan metal when it finds such an error.

Arguments

outLayer Writes the results of the DRC check to the layer you specify. The
output modifiers define the result format.

If you do not specify an output modifier, drc writes the check results
to outLayer in default form. In an area check, drc writes the
original polygon to the output layer.
InLayer1 Name of the first (or only) layer to process.
inLayer2 Name of the second layer to process.

The order of the layers can be important, as several keywords and


output modifiers give different results if you reverse the names of the
first and second layers.
check Use the check keyword to specify the type of check and a dimensional
limit, in one of these three syntax forms:
ƒ lower_limit op check_keyword op upper_limit
ƒ check_keyword op upper_limit
ƒ check_keyword op lower_limit

L-Edit 14 User Guide Section 3 758


Chapter 24: HiPer Verify: Assura Command Files Functions drc

The lower and upper limits can be integers, floating point numbers, or
expressions. You define both limits in the units used in the active file.

You must specify the upper limit for all checks except area.
The lower limit is optional, with a default lower limit of less than or
equal to 0.
You can use the following limit operators:
<
<=
>
>=
==

check keywords DRC Check Keywords (page 760) can be one of the following, which
may also be used with modifiers:
ƒ area (page 760)
ƒ coverage (page 760)
ƒ sep (page 762)
ƒ notch (page 761)
ƒ sepNotch (page 762)
ƒ width (page 763)
ƒ enc (page 761)
ƒ ovlp (page 762)
ƒ venc (page 763)

modifiers Use modifiers to restrict the scope of a check or to modify the output
information. There are three types of modifiers:
ƒ check (DRC Check Modifiers on page 765)
ƒ output (edge, edgea, edgeb on page 766)
ƒ message (Adding a Message to a DRC Check on page 758)

Examples

drc( active width < 2 sameNet notParallel)


drc( diffn sep < 3parallel diffNet edge)

L-Edit 14 User Guide Section 3 759


Chapter 24: HiPer Verify: Assura Command Files Functions drc

DRC Check Keywords

The check keywords specify how the tool will evaluate geometric relationships in a layout.

area
Checks the area of individual shapes on a single layer and measures the entire shape. This check can
have any combination of lower and upper limits. The area size is in square user units.

The only modifier area check uses is the message modifier.

Example
This example finds all shapes of otv whose area falls within the range greater than four but less than or
equal to twelve).

drc( ovt 4< area <= 12 )

coverage
outLayer = drc(inLayer [boundLayer] coverage [boundary(x1 y1 x2 y2)]
[windowSize=wxy stepSize=sxy]
)

Measures the coverage density of a material against a specified coverage percentage, within every
possible fixed-size window on the chip or on the given box on the boundary layer. You can alternately
specify the windowSize and stepSize values to check the total coverage ratio.

You cannot use the two methods boundLayer and boundary(x1 y1 x2 y2) at the same time.

The badSquares option is ignored with a warning but the command is run. The flat and heir
options are ignored silently.

Arguments

inLayer Layer for which coverage is calculated.


boundLayer Specifies the referenced check layer that makes the coverage rule
check within the respective box of each individual shape in this
boundary layer, instead of the box of the whole chip. boundLayer
can specify more than one referenced check area.
coverage Keyword to specify drc coverage. The range check can have any
combination of lower and upper limits. For example:
a < coverage < b, coverage < b, coverage > a

boundary Use this keyword followed by two (x,y) coordinate positions that
stand for the stand for the referenced check box to specify just one
check area.

If you do not specify a windowSize and stepSize, L-Edit checks


the total coverage value of the chip or boundary layer by default.

Merge checking will be performed if any portion of the moving


window steps outside of the cell boundary. For efficient checking the
windowSize value should be an integer multiple of stepSize.

windowSize Specifies the width and height of the scan window, in user units. Only
a square window is supported.

L-Edit 14 User Guide Section 3 760


Chapter 24: HiPer Verify: Assura Command Files Functions drc

stepSize Specifies the number of windows within a scan window by setting the
stepping distance of two successive positions of the window in either
the X or Y direction.

For example, a cell starts at coordinates (0, 0) and the window is


moving from left to right and bottom to top, the first window will
cover a square whose diagonal goes from (0, 0) to (windowSize,
windowSize) and the next window will cover (stepSize, 0) to
(windowSize + stepSize, windowSize), etc.

The movement continues until the right edge of the window falls
outside the cell boundary. Then the window moves back to the Y axis
and starts at (0, stepSize) and so on.

Note: stepSize must divide evenly into windowSize.

enc
Measures the enclosure of shapes on the second layer by shapes on the first layer, where enclosure is
measured as the distance between inside facing edges of shapes on the first layer to outside facing edges
of shapes on the second layer.

enc verifies that first layer shapes enclose second layer shapes, so the order of the two required input
layers is important. Each shape on a layer is checked against each shape on the other layer.

You must specify an upper or exact dimensional limit and you can optionally specify a lower
dimensional limit, in user units.

There are cases where enc will fail to flag a violation.

In this case, you could use geomStraddle In this case, you could use geomOutside
instead: instead:

errlay1 = geomStraddle( A B ) errlay2 = geomOutside( A B )

notch
Checks a single layer only for the separation of edges that form notches, where a notch is the distance
between outside facing edges of the same shape.

The notch check must have an upper dimensional bound and can also have a lower dimensional bound.

Example
This example finds all notches of metal2 whose dimensions are greater than 2.

L-Edit 14 User Guide Section 3 761


Chapter 24: HiPer Verify: Assura Command Files Functions drc

drc( metal2 notch > 2)

ovlp
Measures the overlap of shapes on one layer by shapes on another layer, where overlap is the distance
from an inside facing edge of a shape on one layer to an inside facing edge of a shape on the other layer.
Note that because the keyword ovlp checks whether edges, not shapes, overlap, it can check shapes that
are fully enclosed.

The order of the input layers is not important. Each shape on a layer is tested against each shape on the
other layer.

You must specify an upper or exact dimensional limit and you can optionally specify a lower
dimensional limit, in user units.

sep
Measures the separation between different shapes on the same layer or on two different layers, where
separation is the distance between the outside facing edges of shapes.

If you define only one input layer, sep checks each shape on that layer against every other shape on the
same layer. If you define two input layers, sep checks each shape on one layer against every shape on
the other layer.

Note that sep does not check overlapping shapes; you must use geomAnd or geomOverlap for
overlaps.

Example
This example finds gate-to-conn spacing violations when edges are between .4 and 3.2 apart.

drc( gate conn .4< sep < 3.2 )

sepNotch
This check performs both the sep and notch checks at once and is usually faster than running each
check individually. It measures the separation between different shapes and also edges that form
notches on individual shapes.

Shapes and edges must be on the same layer for this check, and only one distance can be checked for
both separation and notches in a given rule.

L-Edit 14 User Guide Section 3 762


Chapter 24: HiPer Verify: Assura Command Files Functions drc

Example

separation check

notch check

venc
[outLayer=] drc(encLayer viaLayer venc(viaEncList {enc1 <aa enc2 <bb enc3
<cc enc4 <dd}) [message])

Performs contact or via enclosure checks. As of version 14, L-Edit supports only the rectangular
enclosure constraint option.

The venc test is performed on an enclosed polygon, usually a contact or a via, which must be
rectangular with the edges parallel to the x or y axis. If an enclosed polygon is not a manhattan
rectangle, it is ignored. An enclosed manhattan rectangle must be fully enclosed or all of its edges will
be ignored.

Note that Assura DRC does not check enclosure with a single drc rule. Usually, a drc rule such as drc(
metal via enc < distance ) is accompanied by a geomAndNot( via metal ) or a
combination of geomStraddle( via metal ) and geomOutside( via metal ). Similarly, the
via enclosure check does not verify all via enclosure relationships, only those that are fully enclosed and
orthogonal.

Arguments

outLayer The layer to which results of the DRC check are written.
encLayer Input layer that contains the enclosing shapes.
viaLayer Input layer with the rectangular via or contact shapes.
venc Keyword triggering the via enclosure check.
viaEncList List that contains measurements for the four possible widths.

width
[outLayer =] drc( inLayer width [modifiers] [withCornerTouch] )

Checks the width of individual shapes on a single layer, where width is the distance between inside
facing edges of a given shape.

L-Edit 14 User Guide Section 3 763


Chapter 24: HiPer Verify: Assura Command Files Functions drc

Arguments

outLayer Output layer.


InLayer Input layer.
width Integer or floating-point number that specifies the width check. You
must specify an upper dimensional limit, and you may optionally
specify a lower dimensional limit.
modifiers You can use any of the DRC check modifiers to limit or modify the
output.
withCornerTouch Use this keyword to find corner touch errors during a width check.
withCornerTouch applies to the width function only, and can only
be used with an upper limit as shown in the following syntax:

width op upper_limit

For example, this rule finds width with corner touch errors that are less than 5.

drc( met3 width < 5 withCornerTouch )

L-Edit 14 User Guide Section 3 764


Chapter 24: HiPer Verify: Assura Command Files Functions drc

DRC Check Modifiers

app
Checks “apposition,” which is the projection of one edge onto the other. You specify the limits required
for the apposition of edges to check.

As with opp, you must consider the application and meaning of apposition. When edges are parallel, the
meaning is clear. When edges are not parallel to each other, the meaning of apposition depends upon the
reference edge, which you cannot always predict. As a result, the apposition value is independent of the
length of the edges to be checked. Apposition measures only within the range of the checking
dimension.

You specify an apposition value as follows:

lower_limit op app op upper_limit


app op lower_limit
app op upper_limit

Operators can be any of the following: <, <=, >, >=, or ==.

If angled edges diverge, apposition measures only up to the point where the separation equals the upper
limit check dimension, as shown below.

Examples
This example checks poly-to-diffn spacing of less than 2 but only flags error regions with an apposition
greater than 3.

drc( poly diffn sep < 2 app > 3 )

This example flags parallel metal edges that are less than 4 apart with an apposition less than 2.

drc( metal sep < 4 app < 2 parallel )

The next example flags edges of metal that are parallel to poly and less than 2 apart from poly, using an
apposition that is greater than 5 but less than 20.

drc( metal poly sep < 2 5 < app < 20 parallel edgea )

L-Edit 14 User Guide Section 3 765


Chapter 24: HiPer Verify: Assura Command Files Functions drc

diffNet
Modifies a check so it is performed only if the related edges are from polygons on different electrical
nets. diffNet therefore only applies to two-layer checks or single-layer separations, and is effective only
on connected layers.

For example, the following rule finds all shapes of otv having an area that falls within the range greater
than four but less than or equal to twelve.

drc( ovt 4< area <= 12 )

edge, edgea, edgeb


Normally a DRC check outputs the quadrilateral error region between the edges. These modifiers
specify that the segments of the edges in an error become the output of the check, rather than the error
region between the edges, as follows.

edge Outputs the error segments of the edges of both layers in a two-layer
check, or error segments of a single layer in a one-layer check.

Note: Edge results from a two-layer check are typically for display
purposes only, not subsequent DRC operations.
edgea In a two-layer check, the error segment of the edge of the first layer.
In a single-layer check, the error segments of a single layer.
egdeb The error segment of the edge of the second layer in a two-layer
check. Does not apply to a single-layer check.

fig, figa, figb


Specifies that the output of the check is the polygons from which the edges originate rather than the
edges themselves (or an error region between the edges.)

fig Outputs the figures of both layers in a two-layer check, or the single
layer in a one-layer check.

Note: fig results from a two-layer check are typically for display
purposes only, not subsequent DRC operations.
figa In a two-layer check, outputs polygons of the first layer. In a
single-layer check, figures of the single layer.
figb Outputs the polygon of the second layer in a two-layer check.

length, lengtha, lengthb


Specifies that a check is made only if the lengths of the individual edges in the check are within
specified limits, using the following syntax.

lower_limit op length op upper_limit


length op lower_limit
length op upper_limit

L-Edit 14 User Guide Section 3 766


Chapter 24: HiPer Verify: Assura Command Files Functions drc

Operators can be any of the following: <, <=, >, >=, or ==.

length The lengths of edges from both layers in a two-layer check, or both
shapes from the single layer in a single-layer check, must be within
the modifier limits.
lengtha The length of the edge from the first layer in a two-layer check must
be within the modifier limits.
lengthb The length of the edge from the second layer in a two-layer check
must be within the modifier limits.

lessShielded
This modifier is used only with the enc keyword. It modifies an enclosure check to “look through” the
wall when two shapes are apart from, or only butt, each other.

For example:

r334b = drc( endcap diff enc < 0.24 lessShielded )

Depending upon the use of the shielded, lessShielded or no modifier, enc check results can vary
greatly.

• Using enc alone might


or might not report these
errors.

• Using enc with


shielded will never
report these errors.
error
• Using enc with
lessShielded will
always report these errors.
enc enc

notParallel
Limits checking to edges that are not parallel to each other.

onlyPerp
Limits checking to edges that are perpendicular to each other.

opposite
Limits checking to only those edges that are opposite each other. For parallel edges, the portion of the
checked edges is based on a perpendicular projection of each edge. For non-parallel edges, the meaning
of “opposite” edges is not as clearly defined.

For nonparallel edges, the resulting error region depends on the perpendicular projections of both edges.
The portion of an edge directly “facing” another edge can be different depending on the edge from

L-Edit 14 User Guide Section 3 767


Chapter 24: HiPer Verify: Assura Command Files Functions drc

which you make the perpendicular projection, called the “reference edge.” In the example below, the
blue lines show rectangle A as the reference edge and the black lines show B as the reference edge.

The blue lines show A as the reference edge.

The black lines show B as the reference edge.

parallel
Limits checking to parallel edges.

sameNet
Modifies a check so it is performed only if the related edges are from polygons on the same electrical
nets. sameNet therefore only applies to two-layer checks or single-layer separations, and is effective
only on connected layers.

shielded
The shielded modifier changes DRC error reporting when other edges of the same layers intervene
between the edges being checked—that is, when the error between edges is being “shielded.”

The effect of the shielded modifier varies depending on whether you have the opposite modifier
specified also. Without the opposite modifier, the shielded modifier eliminates an error only if the
intervening edge or shape completely shields the edges being checked. In the examples below, no error
is formed for the left and middle figures, but the error for the right figure remains unchanged.

With the opposite modifier, an error is created between the edges being checked for each part of the
edge pairs that have an unobstructed view of each other.

error error

sep enc sep

withPerp
Checks perpendicular edges in addition to the other important edge relationships.

L-Edit 14 User Guide Section 3 768


Chapter 24: HiPer Verify: Assura Command Files Functions errorLayer

errorLayer

errorLayer( layer ["message"] )

Description

Defines the contents of a layer as errors and writes the layer name to the Verification Error Navigator.

Arguments

layer User-specified error layer.


message User-specified annotation.

Example

nAndPdiff = geomAnd( ndiff pdiff )


errorLayer( nAndPdiff "ndiff and pdiff must not overlap" )

This example uses errorLayer to specify the result of a geomAnd operation as an error.

See also saveDerived on page 819.

L-Edit 14 User Guide Section 3 769


Chapter 24: HiPer Verify: Assura Command Files Functions extractCAP

extractCAP

[outLayer =] extractCAP( "device" recLayer (pos "name") (minus "name")

Description

This function extracts capacitor devices from layout. Devices are not extracted if the number of physical
terminals does not match the number of terminals specified.

As of version 14, the label, spiceModel, cellView and flagMalformed keywords are not
supported.

Note: If you are going to create an extracted view, you must define the terminal names as
they are defined in the symbol.

In addition, the terminal layers pos, minus, and s must exist, and must be connected
layers.

Arguments

outlayer Name of the device layer created by the extractCAP statement. If


you do not specify a device output layer name, the tool creates a name
as follows:

device_recLayer_CAP_number

where device and recLayer are the names you specify in the device
and recLayer arguments, and number is an internally generated layer
number.
device Device name. Enter a character string enclosed in quotation marks.
Spaces are not allowed.
reclayer Recognition layer name. Each shape on this layer causes a separate
device to be extracted.
pos, minus Layer names of the capacitor terminals, where terminals are defined
using the format shown below: name of the layer of the terminal,
followed by an optional text string in parentheses that specifies the
terminal name. The default terminal names are POS and MINUS.

layer [ ( "name" ) ]

s Optional substrate connection, using the format shown below. The


default terminal name is SUBSTRATE.

layer [ ( "name" ) ]

L-Edit 14 User Guide Section 3 770


Chapter 24: HiPer Verify: Assura Command Files Functions geomAnd

geomAnd

[outLayer =] geomAnd( inLayer1 [inLayer2] [edges] )

Description

Generates new shapes from the overlap of original shapes on the input layers.

You can specify one or two input layers to generate the areas common to both input layers. Note: If one
of the input layers to geomAnd is an edge layer, the resulting output layer is an edge layer. You do not
need to specify the edges option if one of your input layers is an edge layer.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. If you specify only one polygon layer, the input
polygon layer must be an original graphics layer or the result of a
geomSize operation with the unmergedOut option.
edges Specifies edge output. Note that geomAnd creates edges only when
the edges of the shapes are colinear.

Example

gate = geomAnd( poly diff )


selfoverlap = geomAnd( poly )

Before geomAnd After geomAnd

L-Edit 14 User Guide Section 3 771


Chapter 24: HiPer Verify: Assura Command Files Functions geomAndNot

geomAndNot

[outLayer =] geomAndNot(inLayer1 inLayer2 [edges] )

Description

Generates new shapes from areas of the first layer that do not overlap any area of the second layer.

If one of the input layers to a geomAndNot is an edge layer, the resulting output layer is an edge layer.
You do not need to specify the edges option if one of your input layers is an edge layer.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. Both must be specified.
edges Specifies edge output. GeomAndNot only creates edges when the
edges of the shapes are colinear.

L-Edit 14 User Guide Section 3 772


Chapter 24: HiPer Verify: Assura Command Files Functions geomAvoiding

geomAvoiding

[outLayer =] geomAvoiding( inLayer1 inLayer2 )

Description

Selects shapes on the first layer that are completely outside, without abutting, shapes on the second
layer. (See also “geomOverlap” on page 752.)

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. Both must be specified. These can be either
derived layer names or original graphics layer names.

L-Edit 14 User Guide Section 3 773


Chapter 24: HiPer Verify: Assura Command Files Functions geomBkgnd

geomBkgnd

[outLayer =] geomBkgnd( )

Description

Generates a layer consisting of a single rectangle whose area encompasses all shapes on all layers of a
cell. If a cell includes instances, the rectangle will not overlap the instances.

Arguments

outLayer Output layer name of the merged background shape that encompasses
all shapes on all layers of the entire design.

L-Edit 14 User Guide Section 3 774


Chapter 24: HiPer Verify: Assura Command Files Functions geomButting

geomButting

[outLayer =] geomButting( inLayer1 inLayer2 )

Description

Selects polygons on the first layer that abut polygons on the second layer.

A polygon on the first layer can be coincident or overlapping with a single second-layer polygon to be
evaluated as abutting.

Other relationships for the same shape do not affect the selection. For abut-only relationships, see the
geomButtOnly (page 776) rule description.

The connection and limits options are not supported.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. Both must be specified.

L-Edit 14 User Guide Section 3 775


Chapter 24: HiPer Verify: Assura Command Files Functions geomButtOnly

geomButtOnly

[[outLayer =] geomButtOnly( inLayer1 inLayer2 [connection] [limits] )

Description

Selects polygons on the first layer that abut polygons on the second layer. This rule differs from
geomButting (page 775) in that a shape on the first layer abuts only if none of its edges overlap
polygons on the second layer.

The option [connection] is not supported.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. Both must be specified. These can be either
derived layer names or original graphics layer names.
Ilimits Specifies the number, limit or range of abutting polygons with the
keywords “keep” or “ignore” and the following operators:
<
<=
>
>=
==

keep—selects the shape on inLayer1 if the number of polygons


abutted inLayer2 equals the limit or falls within the specified range.

ignore—rejects the shape on inLayer1 if the number of abutted


inLayer2 polygons matches the limit or falls within the specified
range.

Examples

badgate = geomButting( gate diffn 2 < ignore < 4 )


pulldown = geomButting( poly diffn sameNet )

L-Edit 14 User Guide Section 3 776


Chapter 24: HiPer Verify: Assura Command Files Functions geomButtOrCoin

geomButtOrCoin

[outLayer=] geomButtOrCoin( inLayer1 inLayer2 [connection] [limits] )

Description

The geomButtOrCoin rule selects shapes on the first layer that abut or are coincident with shapes on the
second layer. Butting and coincidence are defined as any edge-to-edge coincidence, regardless of
whether the shapes overlap at the point of coincidence.

The options [connection] and [limits] are not supported.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. Both must be specified. These can be either
derived layer names or original graphics layer names.

L-Edit 14 User Guide Section 3 777


Chapter 24: HiPer Verify: Assura Command Files Functions geomButtOrOver

geomButtOrOver

[outLayer=] geomButtOrOver( inLayer1 inLayer2 [limits] )

Description

The geomButtOrOver rule selects shapes on the first layer that abut or overlap shapes on the second
layer.

Butting is edge-to-edge coincidence where the shapes do not overlap at the point of coincidence.
Overlap is defined as a common area between the shapes. The geomButtOrOver rule is a combination
of the geomButting (page 775) and geomOverlap rules.

As of version 14, the option [connection] is not supported.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. Both must be specified.
limits Specifies the number, limit or range of abutting polygons with the
keywords “keep” or “ignore” and the following operators:
<
<=
>
>=
==

A shape on inLayer1 is not selected if there is not a shape on inLayer2


with the required relationship, even if the limits you specify
encompass the value 0.

If you specify a limit or range, at least one edge of the inLayer2


polygon must abut or overlap the inLayer1 polygon to select the
inLayer1 polygon.

keep—selects the shape on inLayer1 if the number of polygons


abutted or overlapping polygons on inLayer2 equals the limit or falls
within the specified range.

ignore—rejects the shape on inLayer1 if the number of abutted or


overlapping inLayer2 polygons matches the limit or falls within the
specified range.

Example

mechanism = geomButtOrOver( big top sameNet 3 < ignore < 7 )

L-Edit 14 User Guide Section 3 778


Chapter 24: HiPer Verify: Assura Command Files Functions geomCat

geomCat

[ outLayer =] geomCat( inLayer1 [ inLayer2 ...] )

Description

Combines shapes on the input layers without merging them.

If two or more shapes on the same layer are exactly the same and are in the same location, geomCat
replaces them with a single shape.

Arguments

outLayer The output layer, containing the unmerged shapes from all input
layers.
InLayer1, inLayer2 Input layer names. You can specify one, two or more input layers.
You cannot combine polygon layers with edge layers.

L-Edit 14 User Guide Section 3 779


Chapter 24: HiPer Verify: Assura Command Files Functions geomCoincident

geomCoincident

[outLayer =] geomCoincident( inLayer1 inLayer2 [connection] [limits] )

Description

Selects polygons on the first layer that have edges coincident with polygons on the second layer.

A shape on the first input layer is considered to be coincident with a shape on the second layer if any of
their edges are coincident when the shapes overlap. For coincident-only relationships, see the rule
geomContactCheck on page 783.

The options [connection] and [limits] are not supported.

Prerequisites

If you use the connection option with geomCoincident, you must first use geomConnect or
geomStamp to transfer connectivity information to the input layers.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. You must specify two.

L-Edit 14 User Guide Section 3 780


Chapter 24: HiPer Verify: Assura Command Files Functions geomConnect

geomConnect

geomConnect( {via(viaLayer conLayer1 conLayer2 ...) |


svia(viaLayer conLayer1 conLayer2 ...) |
buttOrOver(conLayer1 conLayer2) |
overlap(conLayer1 conLayer2)} ...
[label(labelLayer conLayer) ...]
[soft(conLayerSoft1 conLayerSoft2 ...) ...]
)

Description

The geomConnect command defines layer connectivity by assigning all connecting shapes to nets for
device extraction and subsequent netlist processing.

You can have multiple geomConnect statements in a rules file, but keep in mind that each new
geomConnect statement redefines the entire connectivity used in the rules file from that point on.
There are no incremental changes to connectivity.

As of version 14, the probe keyword is not supported.

Note: geomConnect cannot process edge input layers—you must specify polygon input
layers.

Arguments

via Identifies a via layer and two or more conducting layers connected
through the via layer. geomConnect connects shapes on the
conducting layers that have a common area with shapes on the via
layer.
svia svia identifies a sequential via layer. A sequential via layer is a via
layer and two conducting layers listed in their appropriate mask
sequence.

You must specify the order of conducting layers so that they match
the top-to-bottom sequence in the mask.
You can use the viaLayer parameter with both the via and svia keywords. The viaLayer keyword
specifies the via layer name. If multiple via commands use the same viaLayer, they are processed
as a single via clause.
ButtOrOver Specifies two connecting layers, conLayer1 and conlayer2, that are
connected by abutment or overlap. Use this keyword for
well-tie-to-wells and local interconnect.

You can use the soft keyword with connecting layers that are
specified in buttOrOver.

L-Edit 14 User Guide Section 3 781


Chapter 24: HiPer Verify: Assura Command Files Functions geomConnect

overlap Similar to the geomOverlap function, specifies two connecting layers,


conLayer1 and conLayer2, that are to be connected by overlapping of
the shapes. Use this keyword for well-tie-to-wells and local
interconnect.

You can use the soft keyword with connecting layers that are
specified in overlap.
label Specifies a label layer and the conducting layers to which the label
applies, and checks the text labels on the label layer against shapes on
the conducting layers. If the origin of a label is inside a shape,
geomConnect names the net for that shape.

Note: You must specify a text or pinText command for the label
keyword to work.

If the origin of a label is positioned over more than one conducting


layers, the label is applied from the first layer on the layer list.

You can place duplicate labels on a single net, and you can apply one
label to a single net any number of times. However, if a single net has
two or more names, geomConnect discards both names and flags
them with a warning message.

If two or more nets have the same name, geomConnect adds a unique
suffix to each of them.

If multiple labels with different names occur on the same net,


geomConnect gives that net the name of the first label it finds.

If multiple nets have labels with the same name, geomConnect


assigns the name to the first net it finds with that name and issues a
warning message for each additional net with that name.

L-Edit 14 User Guide Section 3 782


Chapter 24: HiPer Verify: Assura Command Files Functions geomContactCheck

geomContactCheck

[ outLayer = ] geomContactCheck( inLayer [length_limits]


[width_limits][ignore] )

Description

Selects all rectangular contacts on the input layer meeting the specified length and width criteria, and
copies them to the output layer. For a shape to be interpreted as a rectangle, its edges must be
orthogonal to the X and Y axes.

“length_limits” refers to the side along the major axis of the rectangle, while “width_limits”
refers to the side along the minor axis.

If you include the ignore keyword, you can output all non-rectangular contacts, and also all
rectangular contacts that fail to meet the specified length and width criteria. (To output only rectangles,
see geomStraddle on page 812.)

Arguments

outLayer Output polygon layer name.


InLayer Input layer.
length_limits The keyword length used in a comparison to user units of length (the
major axis of the polygon) using the standard comparison operators:
<
<=
>
>=
==

The value associated with length_limits must be equal to or


greater than the value associated with width_limits.

geomContactCheck defaults to the operator && between


length_limits and width_limits.

width_limits The keyword width used in comparison to user units of width (the
minor axis of the polygon). The standard comparison operators
are used (<, >, ==, >=, and <=). The value associated with
width_limits must be less than or equal to the value
associated with length_limits.
geomContactCheck defaults to the operator && between
length_limits and width_limits.

L-Edit 14 User Guide Section 3 783


Chapter 24: HiPer Verify: Assura Command Files Functions geomContactCheck

ignore A keyword causing geomContactCheck to output all non-rectangular


shapes. In the same operation, ignore outputs
those rectangles that fail to meet the length and width criteria.
Specifying geomContactCheck(inLayer ignore) is equal to
geomGetPolygon(inLayer).

ignore—rejects the shape from inLayer1 if the number of inLayer2


polygons matches the limit or is within the specified range.

For example, 1 <= keep <= 3

Example

This example uses the keyword ignore to select all polygons; it also selects rectangular shapes that do
not have length 6 and width 6.

badContacts = geomContactCheck( inLayer length==6 width==6 ignore )

L-Edit 14 User Guide Section 3 784


Chapter 24: HiPer Verify: Assura Command Files Functions geomEnclose

geomEnclose

[outLayer =] geomEnclose( inLayer1 inLayer2 [connection][limits] )

Description

Selects polygons on the first layer that entirely enclose polygons on the second layer. Other
relationships for the same shape and coincident edges do not affect selection.

As of version 14, the option [connection] is not supported.

Arguments

outLayer Output layer name.


InLayer1, inLayer2 Input layer names. You must specify two.
limits Specifies the number of enclosed polygons to keep or ignore using a
limit or range value and the following operators:
<
<=
>
>=
==

keep—selects the shape from inLayer1 if the number of enclosed


inLayer2 polygons matches the limit or is within specified the range.

ignore—rejects the shape from inLayer1 if the number of inLayer2


polygons matches the limit or is within the specified range.

For example, 1 <= keep <= 3

Example

error = geomEnclose( nmos npn_fill 2 < ignore < 5 )

L-Edit 14 User Guide Section 3 785


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetAngledEdge

geomGetAngledEdge

[outLayer =] geomGetAngledEdge( inLayer [limits] [fig] )

Description

Selects edges or polygons from the input layer according to their angle relative to the X and Y axes.

Arguments

outLayer Output edge layer name, or polygon layer name if you use the fig
option.
InLayer Edge or polygon input layer.

Note: If you use the fig option you must use a polygon layer as the
input layer.
limits Specifies the angle an edge must have to be selected. Only a positive
value between 0 and 90 is valid.

You can specify a limit or range with one of the following keywords:
ƒ keep—Selects the polygons or edges if their angles relative to
the X and Y axes match the limit or fall within the specified
range.
ƒ ignore—Rejects the polygons or edges if their angles relative to
the X and Y axes match the limit or fall within the specified
range.
Note: If you specify an inclusive range, the values must add up to 90.

You can use the following operators with a limit or range:


<
<=
>
>=
==
(continued)

L-Edit 14 User Guide Section 3 786


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetAngledEdge

The angle of an edge is measured independently of the polygon it is


part of. The concepts ‘inside’ and ‘outside’ are not considered when
measuring angles.

Although the angle or range of angles must be positive relative to the


X axis, geomGetAngledEdgeselects all edges with a positive or
negative angle that conform to the specification relative to the X axis
and Y axis, as shown in the following figure.

fig You can use the fig keyword with polygon layer input to output the
entire shape rather than just its selected edge.

Examples

keep == 35

ignore < 15 (also ignores > 70)

20 < keep < 40

0 <= ignore <= 90

manhattan = geomGetAngledEdge( gate keep == 90 fig )

app45 = geomGetAngledEdge( metal2 44 <= keep <= 46 fig )

L-Edit 14 User Guide Section 3 787


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetEdge

geomGetEdge

[outLayer =] geomGetEdge( inLayer0 [op1 inLayer1] [op2 inLayer2])

Description

Selects edge segments from the edge or polygon input layer according to their relationships to polygons
on other layers. You can specify a sequence of operators and layers to define a relationship between an
edge of a shape on one input layer relative to the shapes on the other input layers.

You can use the data geomGetEdge extracts to check design rules but it is not intended for parameter
and parasitic extraction.

As of version 14, the operators not over and over are not supported.

Arguments

outLayer Output layer name.


InLayer0 Edge or polygon input layer name. This layer contains the edge
segments that geomGetEdge selects and copies to the output layer.
op1 inLayer1 A combination of operator and layer that defines when to select edges
on inLayer0. inLayer1 must be a polygon layer. Possible values for
are:
ƒ butting—Edge coincidence between inLayer0 and inLayer1
where the layers do not overlap.
ƒ coincident—Edge coincidence between inLayer0 and inLayer1
where the layers do overlap.
ƒ outside—Edges of inLayer0 that are outside inLayer1 and are
not butting.
ƒ inside—Edges of inLayer0 that are inside inLayer1 and are not
coincident.

L-Edit 14 User Guide Section 3 788


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetHoled

geomGetHoled

[outLayer=] geomGetHoled( inLayer )

Description

The geomGetHoled rule selects all polygons from the input layer that contain holes, where a hole
“donut”) is an area created when the perimeter of a polygon encloses an area that is not the polygon.

Arguments

outLayer Output layer name.


inLayer Input layer name, either a derived layer name or a graphics layer
name.

L-Edit 14 User Guide Section 3 789


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetLength

geomGetLength

[outLayer =] geomGetLength( inLayer limits [contiguous] [fig] [outLayer2 =


unselectedEdges] )

Description

Selects edges from the input layer by their individual length.

geomGetLength generates individual edges as output regardless of the input format or contiguous
option unless you use the fig option, which generates polygons.

As of version 14, the operator contiguous is not supported for a polygon layer.

Arguments

outLayer Output edge layer name, or polygon layer name if you use the fig
option.
InLayer Edge or polygon input layer.
limits Use with the following keywords to specify a limit or range for the
length of edges to be selected:
ƒ keep—Selects the edge from inLayer if the length of a polygon
edge matches the limit or falls within the specified range.
ƒ ignore—Rejects the edge from inLayer if the length of a polygon
edge matches the limit or falls within the specified range.
You can use the following operators with a limit or range:
<
<=
>
>=
==

contiguous Specifies that the check is made on the sum of lengths of contiguous
edges. Edges are contiguous if their ends meet at the same coordinate.
fig You can use the fig keyword with polygon layer input or the
contiguous option to generate polygon output rather than edge output.
outLayer2 Output edge layer name for unselected edges. All input edges that are
not output on outLayer1 are output on outLayer2 if specified. This
option is useful when multiple selections are being done on the same
layer. It cannot be used with the fig option.

L-Edit 14 User Guide Section 3 790


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetNet

geomGetNet

[outLayer =] geomGetNet( inLayer "text1" ["text2"...] )

Description

Selects polygons from the input layer by the name of the electrical net at the top-level cell to which they
belong.

Any polygon that is part of a net having one of the specified net names is copied from the input layer to
the output layer. The input layer must have been previously referenced in a geomConnect rule to extract
the circuit connectivity. The net names you specify must refer to text labels.

Arguments

outLayer Output layer name.


inLayer Edge or polygon input layer name. This layer contains the edge
segments that geomGetEdge selects and copies to the output layer.
text1, text2 The name of a net, in quotation marks, corresponding to a label in the
circuit. You can use the wildcard operator * in the text string.

L-Edit 14 User Guide Section 3 791


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetNon45

geomGetNon45

[outLayer =] geomGetNon45( inLayer [fig] )

Description

Selects edges from the input layer if they are not parallel to the X and Y axes of the circuit and are not at
a 45-degree angles to the axes. Use the fig option to select polygons if any of the edges conform to these
criteria.

Arguments

outLayer Output layer name. This can be a derived or a graphics layer.


InLayer Edge or polygon input layer name. If you use the fig option, you must
specify a polygon layer.
fig Sends polygons to the output layer rather than edges.

L-Edit 14 User Guide Section 3 792


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetNon90

geomGetNon90

[ outLayer = ] geomGetNon90(inLayer [fig])

Description

Maintains the net numbers of shapes in the output layer by selecting from the input layer those edges
that are not parallel to the x and y axes of the circuit. If you specify the fig option, the rule selects
complete shapes that meet this criteria.

Arguments

outLayer Optional output layer name. This can be a polygon or a edge layer.
InLayer Input layer name. This can be either a derived layer or a graphics
layer, unless you specify the fig option, in which case it must be a
polygon layer.
fig For polygon input layers, specifies that the figure containing the
selected edge is passed to the output rather than to the edge itself.

L-Edit 14 User Guide Section 3 793


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetNonRectangle

geomGetNonRectangle

[outLayer =] geomGetNonRectangle( inLayer [outLayer2 = unselectedShapes] )

Description

Selects all shapes that are not rectangles, where a non-rectangular shape has edges that are not parallel
to the X and Y axes.

You can use the keyword unselectedShapes and a second output layer to output two layers in one rule.

Arguments

outLayer Output layer.


inLayer Input layer.
outLayer2 Rectangle output layer name. This option must be followed by the
keyword unselectedShapes.

Example

A and B are considered rectangles.

C is a non-rectangular polygon.

L-Edit 14 User Guide Section 3 794


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetPolygon

geomGetPolygon

[outLayer =] geomGetPolygon( inLayer [outLayer2 = unselectedShapes] )

Description

Note: This rule is identical to geomGetNonRectangle (page 794).

Selects all shapes that are not rectangles, where a non-rectangular shape has edges that are not parallel
to the X and Y axes. You can use the keyword unselectedShapes and a second output layer to output
two layers in one rule.

Arguments

outLayer Output layer.


inLayer Input layer.
outLayer2 Rectangle output layer name. This option must be followed by the
keyword unselectedShapes.

L-Edit 14 User Guide Section 3 795


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetRectangle

geomGetRectangle

[ outLayer = ] geomGetRectangle( inLayer [ length_limits ] [ width_limits ]


[ ignore ] ))

Description

Selects all rectangles on the input layer and copies them to the output layer, where a rectangle is defined
as a shape having edges parallel to the X and Y axes.

You can set length and width criteria then select those rectangles that either satisfy or fail to satisfy the
specified criteria.

length_limits refers to the side along the major axis of the rectangle, while width_limits refers to
the side along the minor axis.

Arguments

outLayer Output layer.


inLayer Input layer.
length_limits The keyword length used in a comparison to user units of length
(length being the major axis of the rectangle).

The standard comparison operators used are <, <=, >, >=, = and ==.

The value associated with length_limits must be equal to or greater


than the value associated with width_limits.

The default operator between length_limits and width_limits is &&.


width_limits The keyword width used in a comparison to user units of width (the
minor axis of the rectangle).

The standard comparison operators used are (<, <=, >, >=, = and ==).
The value associated with width_limits must be less than or equal to
the value associated with length_limits.

The default operator between length_limits and width_limits is &&.


ignore Use this keyword to exclude rectangles that meet the specified
length_limits and width_limits. All other rectangles are selected.

Note that geomGetRectangle(inLayer ignore) produces empty output,


which will cause an error and terminate processing.

L-Edit 14 User Guide Section 3 796


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetTexted

geomGetTexted

[outLayer =] geomGetTexted( inLayer textLayer [string ...] )

Description

Selects polygons from the input layer if the origin of the specified text string is over the area of the
polygon.

Arguments

outLayer Output layer.


inLayer Input layer.
textLayer Drawn layer with text strings.

To select a polygon, you must specify one or more of the text strings
on the textLayer, and the text string origin must be on a polygon of
the input layer.
string One or more text strings, each enclosed in quotation marks.

If you omit the text string, this rule selects any polygon on the input
layer with any text string. You can specify the wildcard character (*)
in a string.

Examples

geomGet Texted(xx yy "pad") >> xx WITH TEXT yy "pad"

geomGetTexted(xx yy "pad*" >> xx WITH TEXT yy "pad?"

geomGetTexted(xx yy "pad1" "pad2" "pad3" ...) >> (xx WITH TEXT yy "pad1") OR
(xx WITH TEXT yy "pad2") OR (xx WITH TEXT yy "pad3")

L-Edit 14 User Guide Section 3 797


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetUnTexted

geomGetUnTexted

[outLayer=] geomGetUnTexted( inLayer textLayer string [string ... ] )

Description

Selects polygons based on the absence of a specified text string. Polygons are not selected, if the origin
of the text string is over the any area of the polygon, including its edges or corners.

If you omit the text string, geomGetUnTexted selects any polygon on the input layer that has no text
string.

Arguments

outLayer Output polygon layer.


inLayer Input polygon layer.
textLayer Drawn layer with text strings.
string One or more text strings on the textLayer, each enclosed in
quotation marks. A polygon is selected when the text string origin is
not on the polygon of the input layer.

Text strings can contain any characters allowed in a label. You can
specify the wildcard character (*) in a string.

A text string can have multiple instances on different polygons. A


single rule selects all polygons on the specified layer except those
with the specified text string. You can use multiple
geomGetUnTexted rules to deselect polygons on different layers
with same the specified text string. You can also use multiple
geomGetUnTexted rules to deselect a single polygon on an input
layer many times, with different text strings.

Examples

single string:

geomGet UnTexted(xx yy ""pad"") >> xx NOT WITH TEXT yy ""pad""

wildcard:

geomGetUnTexted(xx yy ""pad*"" >> xx NOT WITH TEXT yy ""pad?""

multiple strings:

geomGetUnTexted(xx yy ""pad1"" ""pad2"" ""pad3"" …) >> Temp = (xx WITH TEXT


yy ""pad1"") OR (xx WITH TEXT yy ""pad2"") OR (xx WITH TEXT yy ""pad3"")
xx NOT Temp"

L-Edit 14 User Guide Section 3 798


Chapter 24: HiPer Verify: Assura Command Files Functions geomGetVertex

geomGetVertex

[outLayer =] geomGetVertex( inLayer limits )

Description

Selects all shapes on the input layer with a vertex count matching the limit or within the range specified
in the limits argument.

Arguments

outLayer Output layer.


inLayer Input layer.
limits Specifies the number of vertices a shape must have for
geomGetVertex to select that shape. Specify the value by using a limit
or range containing one of the following keywords:
ƒ keep—Selects a shape if it adheres to the limit criteria.
ƒ ignore—Rejects a shape if it adheres to the limit criteria.
You can use these standard comparison operators with a limit or
range:
<
<=
>
>=
==

L-Edit 14 User Guide Section 3 799


Chapter 24: HiPer Verify: Assura Command Files Functions geomGrow

geomGrow

outLayer = geomGrow( inLayer xValue yValue )

Description

Grows or shrinks shapes symmetrically in the horizontal and vertical directions.

A sizing value is applied equally in both directions to the X-axis and Y-axis, but the axes can be
assigned two different sizing values.

Note also that you cannot apply a grow and a shrink parameter within one geomGrow rule.

Arguments

outLayer Output layer.


inLayer Input layer. Must be a polygon layer.
XValue The amount you want to size shapes in the horizontal direction. A
positive number grows a shape, a negative number shrinks a shape,
and zero performs no change.

The maximum value is 10,000 and the minimum value is determined


by the resolution.
YValue The amount you want to size shapes in the vertical direction. A
positive number grows a shape, a negative number shrinks a shape,
and zero performs no change.

The maximum value is 10,000 and the minimum value is determined


by the resolution.

L-Edit 14 User Guide Section 3 800


Chapter 24: HiPer Verify: Assura Command Files Functions geomHoles

geomHoles

[outLayer =] geomHoles( inLayer [area limits] )

Description

Generates shapes consisting of all the holes in polygons on the input layer.

As of version 14, extent limits are not supported.

Note that if geomHoles area is present in the rule deck, a drc sep of the same input layers must also
be defined in the rule deck or an error will be generated. (sep (page 762) checks for minimum
separation between input shapes and flags an error if the area of ring holes formed by two shapes is too
small.)

geomHoles area calculations are illustrated below.

Note that geomHoles


calculates area as an entire
hole, regardless of any
shapes the hole may
contain.

2 In this example, the area of


the green square donut hole
1 4 is calculated as the full 4 * 4
=16, not 4*4 - 1*2=14.
4
So, if you are using an area
limit, such that:

HolesLimit= geomCat(
geomHoles( metal1 area <=
15 )
drc( metal1 sep >= 0.5)
)

the green square donut hole


will be selected.

Arguments

outLayer Output layer.


inLayer Input layer. Must be a polygon layer.

L-Edit 14 User Guide Section 3 801


Chapter 24: HiPer Verify: Assura Command Files Functions geomHoles

area limits Selects holes having an area that complies with a specified limit and
writes them to the output layer.

The area limits operators are as follows, and area limit values must be
positive:
<
<=
==

L-Edit 14 User Guide Section 3 802


Chapter 24: HiPer Verify: Assura Command Files Functions geomInside

geomInside

[outLayer =] geomInside( inLayer1 inLayer2 [connection] )

Description

Selects polygons on the first layer that are completely inside polygons on the second layer. Coincident
polygons are considered inside in this check. If shapes on two layers are coincident on all sides, then
this rule considers each layer inside the other.

Arguments

outLayer Output layer.


inLayer1, inLayer2 Input layer. As of version 14, must be a polygon layer.

L-Edit 14 User Guide Section 3 803


Chapter 24: HiPer Verify: Assura Command Files Functions geomNoHoles

geomNoHoles

[outLayer =] geomNoHoles( inLayer )

Description

Generates new polygons consisting of the original polygons of the input layer but without the holes.

(A hole is an area created when the perimeter of a polygon touches an area that is not part of the
polygon, as shown below.

Before and after the


geomNoHoles operation.

Arguments

outLayer Output layer.


inLayer Input layer.

L-Edit 14 User Guide Section 3 804


Chapter 24: HiPer Verify: Assura Command Files Functions geomOr

geomOr

[outLayer =] geomOr( inLayer1 [inLayer2 ...] [edges] )

Description

Merges all shapes on one or more polygon input layers.

If one of the input layers is an edge layer, the resulting output layer is an edge layer, and you do not
need to specify the edges option.

Arguments

outLayer Output layer.


inLayer1, inLayer2 Input layers. As of version 14, must be a polygon layer.
edge Specifies edge output.

Example

This example merges all shapes on the active and thin_active layers:

poly = geomOr( active thin_active )

L-Edit 14 User Guide Section 3 805


Chapter 24: HiPer Verify: Assura Command Files Functions geomOutside

geomOutside

[outLayer =] geomOutside( inLayer1 inLayer2 )

Description

Selects polygons on the first layer that are completely outside polygons on the second layer. Abutting
edges are considered outside.

As of version 14, the connection and limits options are not supported.

Arguments

outLayer Output layer.


inLayer1, inLayer2 Input layers. Two must be specified and they must be polygon layers.

L-Edit 14 User Guide Section 3 806


Chapter 24: HiPer Verify: Assura Command Files Functions geomOverlap

geomOverlap

[outLayer =] geomOverlap( inLayer1 inLayer2 [connection][limits] )

Description

Selects polygons on the first layer that overlap polygons on the second layer.

Overlap occurs when a first-layer shape has any common area with a second-layer shape. Other
relationships such as overlaps, abuts, or coincidence do not affect the selection.

As of version 14, the connection and limits options are not supported.

Arguments

outLayer Output layer.


inLayer1, inLayer2 Input layers. Two must be specified.

L-Edit 14 User Guide Section 3 807


Chapter 24: HiPer Verify: Assura Command Files Functions geomSepInside

geomSepInside

[outLayer =] geomSepInside(deviceLayer maxDist contactLayer wellLayer


[anyOutside | allOutside] )

Description

Selects those shapes from deviceLayer that are separated by more than the maxDist value from all
the shapes on contactLayer that are also contained within a shape on wellLayer. To be selected, a
shape on contactLayer must also be at least partly contained within a shape on wellLayer.

Arguments

outLayer Output layer.


deviceLayer Input layer that is tested for shapes whose distance exceeds maxDist
from the shapes on contactLayer.
maxDist The critical distance between any shape on deviceLayer and any
shape on contactLayer.
contactLayer Input layer that is tested for shapes whose distance exceeds maxDist
from shapes on deviceLayer.
wellLayer Input layer containing at least one shape within which a contactLayer
shape is also found.
anyOutside Optional. Outputs the part of shapes that are outside the specified
distance as well as shapes that are entirely outside that distance
(comparable to geomAndNot.)

This is the default rule behavior.


allOutside Optional. Outputs only those shapes that are entirely outside the
specified distance (comparable to geomOutside.)

Examples

This example selects those shapes on via that are more than 125 um from any shape on channel. A shape
on channel is not selected unless it is contained within a shape on nwell:

res_loss_high = geomSepInside( via 125 channel nwell )

L-Edit 14 User Guide Section 3 808


Chapter 24: HiPer Verify: Assura Command Files Functions geomSepOutside

geomSepOutside

[outLayer =] geomSepOutside( deviceLayer maxDist contactLayer wellLayer


[anyOutside | allOutside] )

Description

Selects those shapes from deviceLayer that are separated by more than the maxDist value from all
the shapes on contactLayer that are also contained within a shape on wellLayer. To be selected, a
shape on contactLayer must also be at least partly contained within a shape on wellLayer.

Arguments

outLayer Output layer.


deviceLayer Input layer that is tested for shapes whose distance exceeds maxDist
from the shapes on contactLayer.
maxDist The critical distance between any shape on deviceLayer and any
shape on contactLayer.
contactLayer Input layer that is tested for shapes whose distance exceeds maxDist
from shapes on deviceLayer.
wellLayer Input layer containing at least one shape within which a contactLayer
shape is also found.
anyOutside Optional. Outputs the part of shapes that are outside the specified
distance as well as shapes that are entirely outside that distance
(comparable to geomAndNot.)

This is the default rule behavior.


allOutside Optional. Outputs only those shapes that are entirely outside the
specified distance (comparable to geomOutside.)

Examples

This example selects those shapes on via that are more than 125 um from any shape on channel. A shape
on channel is not selected unless it is contained within a shape on nwell:

res_loss_high = geomSepInside( via 125 channel nwell )

L-Edit 14 User Guide Section 3 809


Chapter 24: HiPer Verify: Assura Command Files Functions geomSize

geomSize

[outLayer =] geomSize(inLayer size [edges][downUp] )

Description

Performs an oversize or undersize operation on the layer you specify. This rule merges shapes that grow
into one another and truncates acute angles.

Shapes that abut cannot pull apart in a negative sizing operation because the layer has been previously
merged, unless you specified the unmergedIn option. (As of version 14, the
[{unmerged|unmergedIn|unmergedOut}] option is not supported.) Similarly, this rule removes
overlapping edges of shapes that were separate originally and extend into each other during a positive
sizing operation. If you specify the unmergedOut option, the overlapping edges of the polygons remain
separate.

Polygons that change as a result of geomSize maintain their original shape except when they have
features that are less than or equal to twice the size value. In positive sizing, holes and notches may
disappear, and angles may be truncated. In negative sizing, narrow sections and small corners may
disappear.

Arguments

outLayer Output layer.


inLayer Input layer. Can be a derived polygon, edge or drawn layer.
size Integer or floating-point number that defines the dimension of the size
operation. This value can be negative or positive, but should be
greater than 0.0005.
edges Sizes each edge of a polygon or edges layer based on the size value.

Each edge is expanded into a rectangle where the size value is the
dimension perpendicular to the edge. Positive sizing extends
rectangles to the outside of the original shape, negative sizing extends
rectangles to the inside of the original shape. If the resultant shapes
overlap they are not merged.

This is the default mode for input edge layers.


downUp Use with undersizing to eliminate small geometries that disappear
after the undersizing. This options speeds checking when you need to
use a large checking dimension in a drc check. You can also insert a
downUp rule before the actual undersizing to speed up the sizing step.

L-Edit 14 User Guide Section 3 810


Chapter 24: HiPer Verify: Assura Command Files Functions geomStamp

geomStamp

geomStamp(inLayer connectLayer [buttOrOver]


)

Description

Allows you to transfer electrical connectivity information (“net identifier”) from a previously connected
layer to any other layer.

geomStamp assigns the net identifier of each connectLayer shape to the net identifier of each inLayer
shape that the connectLayer shape overlaps. If an inLayer shape does not overlap any connectLayer
shape, geomStamp assigns a new net identifier to the inLayer shape.

Like geomConnect, the geomStamp function always assigns a net identifier to an inLayer shape; it
does not use an output layer.

If an inLayer shape overlaps more than one connectLayer shape, geomStamp counts the number of
connectLayer shapes and transfers the net identifier associated with the majority of connectLayer
shapes to the inLayer.

As of version 14, the multStamp, floating, multConnect, and error options are not supported.

L-Edit 14 User Guide Section 3 811


Chapter 24: HiPer Verify: Assura Command Files Functions geomStraddle

geomStraddle

[outLayer =] geomStraddle( inLayer1 inLayer2 [limits] )

Description

Selects polygons on the first layer that straddle polygons on the second layer. A polygon straddles
another if part of the layer1 polygon covers, abuts or is coincident to a layer2 polygon.

As of version 14, the connection option is not supported.

Arguments

outLayer Output layer.


inLayer1, inLayer2 Input layers. Two layers are required.
limit Specifies the number of straddled polygons. If you use a limit, at least
one shape must meet the criteria to be selected.

Specify the value by using a limit or range containing one of the


following keywords:
ƒ keep—selects a shape if it adheres to the limit or range criteria.
ƒ ignore—rejects a shape if it adheres to the limit range criteria.
You can use these standard comparison operators with a limit or
range:
<
<=
>
>=
==

L-Edit 14 User Guide Section 3 812


Chapter 24: HiPer Verify: Assura Command Files Functions geomWidth

geomWidth

[outLayer =] geomWidth( inLayer keep { > | >= } width )

Description

Filters out areas with opposite edges whose distances are smaller than or equal to a specified width.

Warning: This rule can in some cases alter the absolute angle of an edge. Because coordinates are represented by
integers, coordinates that involve fractions or irrational numbers are rounded off, which can sometimes
introduces a rotation of the sized edge.
However, vertical and horizontal angles, and 45-degree angles that connect to verticals and horizontals,
are maintained.

Arguments

outLayer Output layer.


inLayer Input layer containing the geometries to be extracted.
width The width value that will filter shapes. geomWidth will not select
shapes smaller than or equal to this width.

L-Edit 14 User Guide Section 3 813


Chapter 24: HiPer Verify: Assura Command Files Functions layerDefs

layerDefs

layerDefs( format inlayer1 {inlayer2 inlayer3...} )

Description

This keyword starts a layerdefs section in the rules file. The layerdefs section defines original layers in
your design. You can specify one or more sets of layerDefs in a single rules file.

Arguments

format Specifies the design format. You must include the quotation marks.
“GDSII” is the only option L-Edit accepts.
inlayer1, inlayer2 ... User-defined layer names.

Unsupported Arguments

“df2”

Example

layerDefs( "GDS2"
inlayer1
inlayer2
.
.
)

L-Edit 14 User Guide Section 3 814


Chapter 24: HiPer Verify: Assura Command Files Functions layerName

layerName

layerName = layer( layerId [type( dataType )] )

Description

Defines the original layers within a layerDefs section using a symbol name assigned to a layer
definition. You use this layerName in subsequent layer-derivation rules.

Arguments

layerName Output layer name.


layer Keyword that indicates the input layer is a geometric layer.
layerID For GDSII geometric layers, this is the layer number.

Layer names are case sensitive. To map multiple layers to a single


layerName, list the layers separated by spaces.

Layer names are restricted to 255 characters, the first character


of which cannot be a digit. Allowed characters are A–Z, a–z,
0–9, underscore (_), and question mark (?).

Layer names can contain special characters but they must be preceded
by a backslash (\). For example, n\>. Blank, tab, and paragraph
characters are not allowed.
dataType dataType for the layer.

Example

metal2 = layer( 10 type( 11:13 ) )

This example combines the contents of the GDSII format layers 10, 11, 12, and 13 into a single metal2
layer with potentially overlapping polygons. These overlaps are removed automatically if the resultant
layer is used in subsequent operations.

L-Edit 14 User Guide Section 3 815


Chapter 24: HiPer Verify: Assura Command Files Functions offGrid (DRC Offgrid Data Check)

offGrid (DRC Offgrid Data Check)

offGrid( inLayer gridSize [markerSize] [raw] ["message"] )

Description

The offGrid rule lets you evaluate a layout for grid errors by checking the top-level cell for offgrid
data. Hierarchical information is accounted for so it reports errors are reported as if flat.

You can use offGrid to report separate and multiple output layers with one command line.

Arguments

offGrid Rule to check for offgrid coordinates.


inLayer Layer to be checked for offgrid coordinates. Can be an original layer
or a derived layer.
gridSize Grid size against which the layer is checked for offgrid coordinates.
markerSize Value that indicates the length of the marker that indicates an offgrid
vertex. If not specified, the default value is 1 user unit.
raw This option prohibits merging shapes on an original graphics
input layer. If raw is not specified, the original layers will be merged
before offgrid checking. It has no effect on derived layers.
“message” User-specified message that will be displayed in the error navigator.
If not specified, the complete rule will be used as the message.

Note: Do not enclose the message in quotation marks.

L-Edit 14 User Guide Section 3 816


Chapter 24: HiPer Verify: Assura Command Files Functions pinLayer

pinLayer

layerName = pinLayer( "layerName" type( "purpose") )

Description

Use pinLayer to identify the shapes to be processed as pins. See also pinText (page 818) and
textToPin (page 820).

Arguments

layerName Output layer name representing the pin layer.


pinLayer Keyword instructing the software to find the geometry on the
specified layer.
ƒ layerName—the layer name, which must be enclosed in
quotation marks.
ƒ type—the type keyword identifies the layer-purpose name.
ƒ purpose—enter the layer purpose, which must be enclosed in
quotation marks.

L-Edit 14 User Guide Section 3 817


Chapter 24: HiPer Verify: Assura Command Files Functions pinText

pinText

layerName = pinText( layer_definition... )

Description

Use pinText to identify the text to be processed as pin names. pinText creates labels from pins that
are defined on a specified source layer.

You can name pins as geometric shapes on layers that become part of the design interconnect. The
pinText rule transforms the pins into a standard form that the software uses. See also textToPin (page
820) and textToPin (page 820).

Note: pinText does not apply to GDSII. See textToPin on page 820.

Arguments

layerName Output layer name representing the layer text.


pinText Keyword instructing the software to find text objects in the specified
layer.
layer_definition Use the following syntax:

layerId [type( dataType )]

ƒ layerId—the layer name, which must be enclosed in quotation


marks.
ƒ type—the type keyword identifies the layer-purpose name,
which must be enclosed in quotation marks. (If you do not
specify the type keyword, the default specifies all layer purposes
except boundary.)
ƒ dataType—specifies the layer-purpose name, which must be
enclosed in quotation marks.

L-Edit 14 User Guide Section 3 818


Chapter 24: HiPer Verify: Assura Command Files Functions saveDerived

saveDerived

saveDerived( "message")

Description

Defines the contents of a derived layer as errors and writes the user-defined string to the Verification
Error Navigator

See also offGrid (DRC Offgrid Data Check) on page 816.

L-Edit 14 User Guide Section 3 819


Chapter 24: HiPer Verify: Assura Command Files Functions textToPin

textToPin

layerName = textToPin( layer_definition... )

Description

textToPin creates and names pins from an existing layout. You can name pins as geometric shapes on
layers that become part of the design interconnect. The textToPin rule transforms the pins into a
standard form that the software uses. See also pinText (page 818) and textToPin (page 820).

Note: Flattened text is not handled as pins, but labels are attached to the net if there is no
conflict with other labels.

Arguments

layerName Output layer name representing the layer text.


pinText Keyword instructing the software to find text objects in the specified
layer.
layer_definition Use the following syntax:

layerId [type( dataType )]

ƒ layerId—the layer name, which must be enclosed in quotation


marks.
ƒ type—the type keyword identifies the layer-purpose name,
which must be enclosed in quotation marks. (If you do not
specify the type keyword, the default specifies all layer purposes
except boundary.)
ƒ dataType—specifies the layer-purpose name, which must be
enclosed in quotation marks.

L-Edit 14 User Guide Section 3 820


25 Layout vs. Layout
3

Layout versus layout (LVL) compares two L-Edit layout files for their differences. It looks for moved,
added and deleted geometry.

Typically you compare two different layout files to discover their possible differences. You can also
compare two different cells in the same layout file. In either case, you can choose which layers L-Edit
will examine. The command File > Layout vs Layout Comparison opens a series of dialogs where you
make these choices.

There are two components to the LVL comparison results:

ƒ A log file which shows the layers being compared and uses Boolean operators to detail the
differences between the files, by layer for the layers with changes.
ƒ An LVL_Results TDB file (which is temporary unless saved). This TDB file contains a cell for
each of the input files, with generated layers containing objects that shows where and how the files
differ for the Boolean conditions—A NOT B and NOT A AND B—considered. The file layers
includes only the those selected for LVL comparison and the resulting generated layers.

Select Files to Compare

Use the first dialog of the Layout vs. Layout wizard to enter the files for L-Edit to compare.

ƒ One design file must be open.


ƒ File 1 and File 2 can be the same as well as different files.

L-Edit 14 User Guide Section 3 821


Chapter 25: Layout vs. Layout Select Cells and Layers to Compare

ƒ The option “Just create the derived layers but don’t generate the LVL results” creates all the
layers that are derived during LVL but does not draw the related layout. This option allows you to
setup the layer derivation and then generate the layers as a separate step using
Tools > Add-Ins > Legacy Layer Generation (see . It creates a larger number of derived layers
than the full LVL process because during LVL any derived layers with no objects are deleted.

Select Cells and Layers to Compare

Use the second dialog of the Layout vs. Layout wizard to select the cells and layers L-Edit will
compare.

ƒ The cell that was active when you launched Layout vs. Layout will be preselected in the Cell
drop-down list.
ƒ You can compare different cells as well as the same cell, or two cells from the same file.
ƒ You can compare a single layer or multiple layers, in any combination.
ƒ The Layers checklist includes layers from both of the cells being compared.
ƒ In the Layers checklist, L-Edit displays layer names in pink if the top cell does not have geometry
on the layer but the bottom cell does. (The layer is used in the B cell but not the A cell—A [not
exist] B [Drawn/Special/In Use].)

ƒ In the Layers checklist, L-Edit displays layer names in red if the top cell has geometry on the layer
but the bottom cell does not. (The layer is used in the A cell but not the B cell—
A [Drawn/Special/In Use] B [not exist].)

L-Edit 14 User Guide Section 3 822


Chapter 25: Layout vs. Layout View LVL Results

View LVL Results

When layout versus layout comparison is complete, L-Edit opens a log file and a temporary design file
LVL_Results LVL [File A_FileB.tdb].

LVL Log File

ƒ Layout vs. Layout Log—The log header shows the L-Edit version used for LVL, the date and time
it was performed, and the file location, name and cells compared.
ƒ Layers being compared—This section of the log lists the layers selected for comparison.
ƒ Layers with changes—Details the generated layers containing objects that show the differences
between the input file layers compared.
ƒ Result A NOT B indicates an object present in Cell A but not Cell B.
ƒ Result NOT A AND B indicates an object not present in Cell A but present in Cell B.

L-Edit 14 User Guide Section 3 823


Chapter 25: Layout vs. Layout View LVL Results

LVL_Results TDB File

Input layers from File A and


File B that were compared.

Derived layer from LVL


process.

ƒ The LVL_Results file contains only the drawn layers from the input files that were selected for
comparison and the derived layers created by the LVL operation.
ƒ In the Layer palette for the LVL_Results file, layers that do not have a difference result are hidden
(shown as grayed out in the palette) so that only the derived layers with objects resulting from
differences, and the drawn layers where the differences occurred, will be displayed.
ƒ The LVL_Results file has one cell for each of the input files, with difference results placed as
polygons on the appropriate generated layers in a third LVL_Results cell.

L-Edit 14 User Guide Section 3 824


Chapter 25: Layout vs. Layout Layout vs. Layout Example

Layout vs. Layout Example

[1] Cell A: new-lights is compared to Cell B: new-lights_1, both from the same TDB file

Cell A: new-lights

Cell B:
new-lights_1
is the same
cell with
certain
geometry
moved, added
or removed.

[2] Cell LVL_Results LVLnew-lights_new-lights_1 contains the change objects.

L-Edit 14 User Guide Section 3 825


Chapter 25: Layout vs. Layout Layout vs. Layout Example

[3] The log shows that layers Active, P Select, Via, Metal1 and Active Contact were compared, and that
eight derived layers were generated showing differences between the two cells.

[4] We will examine the generated layers one by one. Note the layer patterns shown in the palette.

[5] Right-click on a layer to open a menu where you can hide all but the selected layer.

L-Edit 14 User Guide Section 3 826


Chapter 25: Layout vs. Layout Layout vs. Layout Example

[6] With all other layers hidden it is easy to see the objects showing differences. Here the two rectangles on
layer Active (green) show the results of A NOT B—objects that are present in Cell A but not Cell B.

[7] The results for NOT A AND B on layer Active (green)—objects that are not present in Cell A but are in
Cell B—are nil.

L-Edit 14 User Guide Section 3 827


Chapter 25: Layout vs. Layout Layout vs. Layout Example

[8] However, the results for NOT A AND B on layer P Select (pink checked) do show objects that are not
present in Cell A but are in Cell B.

L-Edit 14 User Guide Section 3 828


26 Extracting Layout
3

Extraction is a method of verifying a layout. The extraction process produces a netlist that describes the
circuit represented by the layout in terms of device and connectivity information.

The extraction process is defined by making associations between patterns of layout geometry and the
circuit components they represent. These associations are defined in the extract definition file.

The L-Edit general device extractor:

ƒ Recognizes active devices (BJTs, diodes, GaAsFETs, JFETs, and MOSFETs), passive devices
(capacitors, inductors, and resistors), and non-standard or compound devices by means of
subcircuit recognition.
ƒ Maintains process independence by means of an extract definition file, which describes how layers
interact electrically.
ƒ Accepts Mentor Graphics Corporation Calibre®, Cadence Design Systems Dracula® and Tanner
extract definition files.
ƒ Uses device definitions that can be specified using generated layers, for a greatly expanded set of
possible definitions. Derived layers are generated and disposed of automatically.
ƒ Works with the most common device parameters, including resistance, capacitance, and device
length, width, and area. These parameters provide useful information when verifying drive, fanout,
and other circuit performance characteristics.
ƒ Allows for 45-degree and all-angle geometry and, with HiPer Verify, hierarchical netlist extraction.
ƒ Creates a netlist file in Berkeley 2G6 SPICE format, usable with any tool that reads a SPICE netlist.
This netlist is ideal for use with the Tanner T-Spice circuit simulator, to verify device sizes, drive
capabilities, and other circuit performance factors; or the LVS netlist comparator, to check the
equivalence of netlists generated from different sources.

The “Configuration Example” on page 836 illustrates the concepts described in this section.

Extract Definition Files

The extract definition file contains a list of the connect statements and devices to be extracted. This file
can be used to define:

ƒ Connections between two different process layers


ƒ Devices definitions in terms of type, component layers, pins, and model names

See the section “Extract Definition File Format” on page 839 for further details on extract definition
files syntax. The directory samples\tech\mosis contains a set of extract definition files that correspond
to various technology processes. You can modify these files as necessary to define additional
connections and devices for extraction.

L-Edit 14 User Guide Section 3 829


Chapter 26: Extracting Layout Configuring the Extractor

Configuring the Extractor

To run Extract you must first load and select the extract definition files you want to run, then use
Tools > Extract to perform the netlist extraction from the active cell using the extract rule(s) you have
specified in the Setup Extract dialog.

Note that a netlist will not be exported if a design rule error exists.

The L-Edit extract engine can process Tanner .ext, Calibre .cal or Dracula .dra extract files. Note that
Tanner .ext files do not contain layer derivations; those are in the .tdb file instead.

Setup Extract—General

Select Tools > Extract Setup from the menu or use the Setup Extract button ( ) on the verification
toolbar to open the Setup Extract dialog, which has a General and an Options tab.

In addition to loading and selecting extract definition files, you also use Setup Extract to set the order
in which rule checks are executed and as a shortcut to open a text editor where you can edit the rule sets.

Note: Checkmarks in the Setup Extract list determine which rule sets to run during extract.
All other functions in the dialog are performed only on the rule set that is highlighted.

L-Edit 14 User Guide Section 3 830


Chapter 26: Extracting Layout Configuring the Extractor

Edit selected command file Opens the selected rule set for editing. If Extract Standard Rule Set
is highlighted, the Setup Extract Standard Rule Set dialog opens. If
( ) a command file is selected, that file opens in an L-Edit text window.
Add command file to list Press this button to add a new entry to the list of command files. You
can browse to and select a file with the browse ( ) button.
( )
Delete command file from Removes the highlighted file from the list.
list

( )
Move Up Moves the highlighted file up in the list. Rule sets are run in the order
in which they appear in this list.
( )
Move Down Moves the highlighted file down in the list. Rule sets are run in the
order in which they appear in this list.
( )
Extract Rule Sets to run Lists the Extract command files that are loaded and available to run.

Note: Only those rule sets that have their checkboxes in the
“checked” state will be run when Extract is invoked.
Defines Use this field to enter variable or variable and value combination to
trigger preprocessor commands that are written in the rule files using
#DEFINE and #IFDEF.

Note: Extract setup values in this field are saved separately from
DRC define values.
SPICE extract output file Browse to or enter the name of the SPICE netlist generated by the
selected extractor.
Overwrite existing output Check this box to overwrite any existing output files of the same
file name without a confirmation.
Open SPICE output file Check this box to open the SPICE extract file after the extract run.
after extracting

L-Edit 14 User Guide Section 3 831


Chapter 26: Extracting Layout Configuring the Extractor

Setup Extract—Options

Statements to include Text entered in this field is added verbatim to the netlist. For example,
before netlist enter a .include command to add a model or device name.
Write empty subcircuit When checked, empty subcircuit definitions will be written to the
definitions netlist. (See “Using a “SUBCKT” Device to Extract Non-Standard
Devices” on page 839.)
Write .model statements When checked, model definitions will be written to the netlist.
Save node-highlighting When checked, node highlighting data is saved with the .tdb file. Use
data the Save Folder button to select the directory where the data is saved.

Note: The Setup DRC dialog and the Setup > Design—Node
Highlighting dialog each include the option to save node
highlighting data and to choose where it is saved. Be careful to
manage these settings to avoid losing or overwriting your data.
Write hierarchical netlist When checked, includes design hierarchy information in the netlist.
Write node name aliases When checked, writes node name aliases to the netlist.

L-Edit 14 User Guide Section 3 832


Chapter 26: Extracting Layout Devices and Connections

Run in background Check this box to run Extract in background. Background processing
means that you can continue to edit and perform other L-Edit
operations while Extract is running. Extract results are returned as
soon as they are found, so you can browse and correct errors before
the entire Extract job is complete.
Lock participating cells Locks the cell, and all hierarchy below that cell, to prevent edits while
while Extract runs Extract is running.
Extract as: Writes the netlist as the top level of a design.
Top level cell
Extract as: Writes the netlsit as a subcircuit.
Subcircuit
Send E-mail to: Enter an mail address to send notification to the specified recipient
when the Extract job is complete. Use Configure to set the E-mail
options shown below. Note that most E-mail applications will require
a response prior to sending an E-mail initiated from another
application.

Play sound Check to play a sound when Extract is complete. You can configure
the sound from the standard Windows sounds available.
Pop up message box Check to open an Extract Completion Report when Extract is
complete.

Devices and Connections

The first step is to determine the specific classes of devices and connections that are to be extracted.

ƒ A device is any circuit element (transistor, resistor, capacitor, diode, etc.).


ƒ A connection is any electrical connectivity between two process layers, such as between the Poly
and Metal1 layers when a contact is present on the Poly Contact layer.

Only relevant devices and connections need be defined. For example, every design contains resistors,
because no process layer is a perfect conductor. But if the design to be extracted does not contain any

L-Edit 14 User Guide Section 3 833


Chapter 26: Extracting Layout Devices and Connections

wire long enough for its inherent resistance to affect the circuit’s performance, then the wires do not
have to be defined and extracted as resistors.

Finding Devices and Nodes

Tools > Goto Device (Alt+G) locates a device or node from the extract output file by zooming to it and
placing a marker in the layout. You must have extracted connectivity first or pointed to the correct
SPICE file for this operation to function. The behavior is slightly different for the two search types.

You can toggle the marker display on ( ) and off ( ) with the lightbulb toolbar button and
delete all markers with the eraser toolbar button ( ).

Tools > Goto Device

GoTo Enter the Name of the device or node you want to locate.
Look for Select Device or Node.

Note: For nodes to appear in the extract output file, you must check
the Write node-element cross-reference option in the
Output tab of the Tools > Extract dialog.

Mouse Pick Click this button to select a device with a mouse click in the layout.

L-Edit 14 User Guide Section 3 834


Chapter 26: Extracting Layout Devices and Connections

When you enter a device, L-Edit will zoom to it as shown below.

device marker

When you enter a node, L-Edit will highlight the elements connected to that node and create disposable
ports on the error layer that you can reposition to better inspect the node.

node markers

Extracting Resistor and Capacitors

To extract resistors and capacitors, you must in addition enter the following three constants for each
involved layer. Use “General Layer Parameters” (page 88) to enter these values.

ƒ An area capacitance (in attofarads per square micron)


ƒ A fringe capacitance (in femtofarads per micron)
ƒ A resistivity (in ohms per unit area)

Capacitance is the sum of two products: that of the area of the capacitor and the area capacitance, and
that of the perimeter of the capacitor and the fringe capacitance. (Capacitors are polygons on the
recognition layer.) Resistance is the product of the resistivity and the length of the resistor, divided by
the width.

L-Edit 14 User Guide Section 3 835


Chapter 26: Extracting Layout Configuration Example

Wire Conversions in Layer Generation

Wires involved in layer-generation operations on the source layers are converted to polygons on the
generated layer. However, some join styles on 45° wires result in wire edges that meet at non-45°
angles. To ensure that the resulting objects are true 45° polygons when the layer is generated, the
problem joins are modified. Round joins are processed as layout joins and round ends are processed as
butt ends to satisfy the 45° polygon criteria.

Examples of a converted 45° source wire to a generated layer polygon are shown in the following
figure:

Rescaled

Generated layer

Source layer

Not rescaled

Generated layer

Source layer

After rescaling, the finer grid resolution (more internal units per technology unit) allows the generated
polygon to approximate the source wire more closely. Without rescaling the design, the vertex of the
generated polygon in the above example is forced to the nearest internal unit that maintains a 45° angle.

Configuration Example

The following example illustrates how to configure the extractor to recognize a transistor in a CMOS
n-well process. It shows how transistors may be clearly and uniquely identified by generated layer
definitions and device statements in the extractor definition file. Other SPICE devices may be identified
in similar fashion.

An NMOS transistor in an n-well CMOS process consists of:

ƒ The channel
ƒ A source pin of n-doped diffusion material touching the channel
ƒ A gate pin of polysilicon over the channel
ƒ A drain pin of n-doped diffusion material touching the channel
ƒ A bulk pin to the substrate

L-Edit 14 User Guide Section 3 836


Chapter 26: Extracting Layout Configuration Example

When the extractor finds a configuration of polygons in the layout corresponding to this definition, it
should write an NMOS transistor statement into the output file (netlist).

Device Definition

The following statement causes a MOSFET to be generated in the output.

# NMOS transistor
device = MOSFET(
RLAYER=ntran;
Drain=ndiff, WIDTH;
Gate=Poly;
Source=ndiff, WIDTH;
Bulk=subs;
MODEL=NMOS;
)

The recognition layer is defined as ntran, and the pin layers are defined as ndiff, Poly, and subs. This
causes the extractor to recognize a MOSFET wherever it sees ntran geometry, touched by geometry on
ndiff, Poly, and subs.

However, MOSFETs are not typically created by drawing geometry on ntran, ndiff, or subs. They are
created by drawing Poly geometry over Active geometry inside NSelect geometry.

To generate correct geometry on the ntran, ndiff, and subs layers from user-drawn geometry on
Active, Poly, and N Select layers, use generated layers (see “Generating Layers” on page 312).

Recognition Layers

A transistor gate is formed on the chip when Poly geometry and Active geometry intersect on the
layout. The generated layer

gate = ( Poly ) AND ( Active )

is used to define a generic transistor gate.

However, a CMOS process will have both NMOS transistors (in the substrate) and PMOS transistors.
The gate layer definition does not differentiate between the two.

L-Edit uses a default CMOS setup that assumes a p-substrate, has a nongenerated layer (N Well) for
defining the n-well, but does not have a layer for defining the substrate surface. The generated layer

subs = NOT ( N Well )

is used to define the substrate surface.

Now, two generated layers can uniquely identify NMOS and PMOS transistor channels:

ntran = ( gate ) AND ( subs )


ptran = ( gate ) AND ( N Well )

Pin Layers

When the extractor identifies a transistor to be written to the output netlist, it looks for the pins that
should be touching the recognition layer if the device is properly constructed.

L-Edit 14 User Guide Section 3 837


Chapter 26: Extracting Layout Configuration Example

A MOSFET has four pins attached to it: drain, gate, source, and bulk. The gate is defined to be the Poly
geometry that touches the transistor. The bulk in a PMOS device is the N Well, and in an NMOS device
is the substrate (subs). For these pins, the proper layers are already defined.

In the layout, a single polygon on the Active layer stretches across the whole transistor, but in a
fabricated chip, the diffusion material will not exist under the gate. The generated layer

Field Active = ( Active ) AND ( NOT (Poly ) )

creates geometry on either side of, but not underneath, a transistor gate.

Finally, an NMOS transistor has source and drain pins made up of n-doped material, and a PMOS
transistor has source and drain pins made of p-doped material. The doping type is controlled by drawing
geometry on the N Select and P Select layers, so two generated layers can uniquely identify both pin
layers:

ndiff = ( Field Active ) AND ( N Select )


pdiff = ( Field Active ) AND ( P Select )

Detecting Soft Connections

You can configure the extractor to write special devices for each connection to a well or substrate,
called “soft connections.”

These special devices must be included in the netlist for LVS to identify soft-connected nodes (see
“Detecting Soft Connections with LVS” on page 896). By convention, these devices are 0Ω resistors
with designated model types, such as R_WELLCONTACT and R_SUBSCONTACT.

To write special devices for soft connections, make the following changes in the extract file:

ƒ To detect ohmic contacts to well and substrate, create two additional derived layers:
ohmic well contact := n well wire AND ndiff
ohmic substrate contact := subs AND pdiff
ƒ Do not connect wells and substrates to diffusions through ohmic contacts. Look through the extract
file and delete lines like the following:
connect(n well wire, ndiff, ndiff)
connect(subs, pdiff, pdiff)
ƒ Add device recognition statements for the ohmic contact special devices (resistors). For example:
# Well contact
device = RES(
RLAYER=ohmic well contact;
Plus=n well wire;
Minus=ndiff;
MODEL=WELLCONTACT;
)

# substrate contact
device = RES(
RLAYER=ohmic substrate contact;
Plus=subs;
Minus=pdiff;
MODEL=SUBSCONTACT;
)

L-Edit 14 User Guide Section 3 838


Chapter 26: Extracting Layout Extract Definition File Format

Using a “SUBCKT” Device to Extract Non-Standard Devices

You can use the SUBCKT device in the EXT file to extract non-standard devices such as resistors with
a bulk connection. The directory L-Edit Pro\Samples\Extract\ICResistors contains an example
demonstrating the extraction of a resistor with a bulk connection.

Here is a SPICE subcircuit that can model an IC resistor with a bulk connection.

.SUBCKT ICResPoly Plus Minus Bulk L=1 W=1


.PARAM Poly_Conduct = 140
.PARAM Rs='L/(W*Poly_Conduct)'
.PARAM Eox = '3.9*8.85E-12'
.PARAM Tox = 3.750E-7
.PARAM Cs='L*W*Eox/Tox'
R1 Plus 2 R='Rs/2'
R2 2 Minus R='Rs/2'
C1 Plus Bulk C='Cs/4'
C2 2 Bulk C='Cs/2'
C3 Minus Bulk C='Cs/4'
.ENDS

The subcircuit has three terminals and needs the length and width of the device. We can extract this
using the subcircuit device in the EXT file.

# IC Poly Resistor
device = SUBCKT(
RLAYER=PolyResistor, LW;
Plus=PolyWire, DEVICEWIDTH;
Minus=PolyWire, DEVICEWIDTH;
Bulk=Substrate;
MODEL=ICResPoly;
)

This device definition uses the layer PolyResistor for the recognition layer, which is Poly & Resistor
ID. This makes sure that we have to have both Poly and ID to have a resistor. If we used just the ID, then
there could be a chance that we create a resistor with just the ID and not the Poly. Extract will think
there is a resistor there when physically there is not. The positive and negative pins use PolyWire,
which is Poly & NOT Resistor ID. If we used just Poly, the resistor would be shorted. The keyword
DEVICEWIDTH is used on the positive and negative pins so that the width of those pins will be used to
calculate the width of the device. The bulk connection use Substrate, which is NOT N Well.

When you run extract, make sure to check “Write empty subcircuits definitions” so you can
.INCLUDE your subcircuit definition for the resistor by using the “SPICE include statement” option.
The result will look like the following.

.INCLUDE ResSubs.sp
X1 1 2 4 ICResPoly L=2.4u W=720n

Extract Definition File Format

The .ext extract definition file contains a list of comments, connection statements, and device
statements. L-Edit is shipped with a directory containing a set of extract definition files that correspond
to various technology processes. You can modify these files as necessary to define additional
connections and devices for extraction.

L-Edit 14 User Guide Section 3 839


Chapter 26: Extracting Layout Extract Definition File Format

Extract definition files must conform to the following restrictions:

ƒ Layer names are case-sensitive, and must match the case of layer names defined in the TDB file.
The rest of the definition file is case-insensitive; upper and lower cases can be used
interchangeably.
ƒ Layer names cannot contain commas or semicolons and they cannot be longer than 40 characters.
ƒ Layer names cannot have leading or trailing spaces.
ƒ Pin names cannot contain commas, semicolons, or spaces, and they cannot be named MODEL.
ƒ Model names cannot contain commas, semicolons, spaces, or closing parentheses.
ƒ For compatibility with existing extract definition files, the WIDTH keyword is ignored for all
devices except a GAASFET/MESFET.
ƒ IGNORE_SHORTS indicates that if the device has all of its pins connected to the same node then it
will be considered shorted and the device will be written to the extract netlist file as a comment.

Comment Statements

A comment statement begins with a pound sign (#) and continues to the end of the line:

# This is an extract definition file comment.

Connect and Attach Statements

A connection statement defines a connection between two different layers. A connection always
involves three layers: the two layers being connected and the layer through which they connect.
Connection statements have the following format:

connect(Layer1, Layer2, ThroughLayer)

where Layer1 and Layer2 are the names of the layers being connected, and ThroughLayer is the name
of the connecting layer. For example:

# Connect Poly to Metal1


CONNECT(Poly, Metal1, PolyContact)

The connect statement does an AND operation of Layer1 and ThroughLayer, and the resulting
geometry has to either overlap or touch Layer2 in order for it to make a connection. Therefore, if
Layer1 and ThroughLayer are not overlapping, no connection will be made. For example, if you
wanted to connect N-Well to n diffusion you could write two separate connect statements.

# Connects N-Well to n diffusion.


# N-Well and n diffusion have to overlap to make a connection.
connect(NWell, nDiff, nDiff)

# Connects N-Well to n diffusion.


# N-Well and n diffusion have to overlap or touch to make a connection.
connect(nDiff, NWell, nDiff)

The Tanner .ext format also supports the attach command, which is used to label nets with names using
ports on the layout. The attach command attaches a name from a port object on one layer to a net with a
polygon on a second layer that overlaps the port. The second layer must appear as one of the layers in a
connect statement.

The attach command has the following format:

L-Edit 14 User Guide Section 3 840


Chapter 26: Extracting Layout Extract Definition File Format

attach(Layer1, Layer2)

where Layer1 is the layer containing the port object and Layer2 is the polygon layer to which the net
name should be attached.

Substrate Node Statement

Nodal parasitic capacitances are referenced from the node to the substrate. You can designate the
substrate node by indicating the substrate layer. Extract will then find the first node connected to the
substrate layer and use that as the substrate node when writing the parasitic nodal capacitors. If no
substrate layer is indicated, Extract will use node 0 or ground as the substrate node. The substrate node
statement has the following format:

SUBSTRATE_NODE = SubstrateLayer;

where SubstrateLayer is the name of the substrate layer. For example:

# Use Subs as the Substrate node.


SUBSTRATE_NODE = subs;

results in the following SPICE output:

Cpar1 5 2 10f

where 2 is the substrate node.

Device Statements–General Format

A device statement defines a device. Passive (capacitors, resistors, and inductors,) active (BJTs, diodes,
GaAsFETs, JFETs, MOSFETs), and subcircuit devices are specified with the same general format.

For all device statements, it is necessary to identify a recognition layer, which is the layer Extract uses
to recognize the device. You may specify multiple devices with the same recognition layer as long as
they have different pin configurations. This technique is particularly useful in extracting
multisource/drain transistors. The recognition layer is defined as follows:

RLAYER = rLayer ;

where RLAYER = is required, and rLayer is the name of the recognition layer.

Following the recognition layer is a list of pins of the device. The order of this list determines the order
of the pins in the extracted netlist. The extractor does not require any particular order, but LVS requires
that both source netlists contain pins in the same order, and SPICE simulators also have strict rules
about the order in which pins appear. We recommend following the standard SPICE orders:

ƒ BJT devices: collector—base—emitter—substrate


ƒ MOSFET, JFET, and GaAsFet/MESFET devices: drain—gate—source—bulk
ƒ Diodes, resistors, capacitors, and inductor devices: positiveNode—NegativeNode

If the pin names used in the EXT file are Collector, Base, Emitter, and Substrate (BJT devices), or
Drain, Gate, Source, and Bulk (all other active devices), they are sorted automatically in the default
SPICE order.

Pins are specified as follows:

L-Edit 14 User Guide Section 3 841


Chapter 26: Extracting Layout Extract Definition File Format

pinName = pinLayer ;

where pinName is the name of the pin and pinLayer is the name of the associated layer.

A model definition follows the list of pins. This definition is not required for passive devices, where
MODEL =; is acceptable. The model name, if present, will be written into the extracted netlist. For
SPICE, model names are not required for capacitors, resistors, inductors, or diodes, but are required for
all other devices.

For passive devices, model statements have the form:

MODEL = [model];

For active devices, model statements have the form:

MODEL = model ;

where MODEL = is required and model is the optional model name. The empty statement MODEL =; is
still required if no model name is specified.

Device Statements–Specific Formats

In the following format specifications:

ƒ Unitalicized words and characters (except the bracket characters [ and ]) are to be entered as shown.
ƒ Words and characters enclosed by brackets ([ ]) are optional.
ƒ Words and characters enclosed by braces and separated by a vertical pipe—{option1 | option2 }—
represent alternates. You can use the syntax on the left or the right side of the pipe character.
ƒ Variables containing the string Layer represent layer names.
ƒ model represents the SPICE model name for the device.

Capacitor

DEVICE= CAP (
RLAYER = rLayer [,{AREA} | {LW}];
Plus = Layer1 [,AREA];
Minus = Layer2 [,AREA];
MODEL = [modelname ];
) [IGNORE_SHORTS]

A capacitor has the following format in the SPICE output statement:

AREA keyword
Cxxx n1 n2 [ModelName] [C=]cValue

LW keyword
Cxxx n1 n2 [ModelName] L=cLength W=cWidth

The following rules apply to capacitors:

ƒ The optional AREA keyword for a capacitor may be specified on only one layer (recognition or pin
layer) and is used to indicate the layer for which the capacitance will be calculated.
ƒ If no AREA keyword or LW keyword is present, the capacitance will be based on the area of the
recognition layer (rLayer).

L-Edit 14 User Guide Section 3 842


Chapter 26: Extracting Layout Extract Definition File Format

ƒ The LW keyword cannot be used with the AREA keyword.


ƒ The LW keyword can only be used with the recognition layer (rLayer).
ƒ Capacitance is calculated as follows:
Ctotal = Carea + Cfringe
Carea = (Area of the Layer) * (Layer's Area Capacitance)
Cfringe = (Perimeter of the Layer) * (Layer's Fringe Capacitance)
ƒ The area capacitance (aF/sq. micron) and fringe capacitance (fF/micron) are specified in the Setup
Layers dialog for each specific layer (see “Layer Setup” on page 87).

ƒ Capacitor average length and width are calculated as if the capacitor was a rectangle. They are
calculated as follows:
L perimeter = Perimeter of the Layer

L area = Area of the Layer


1 1 2
C length = --- • L perimeter + --- L perimeter ∠ 16 • L area
4 4
1 1 2
C width = --- • L perimeter ∠ --- L perimeter ∠ 16 • L area
4 4

Resistor

DEVICE=RES (
RLAYER = rLayer [, LW];
Plus = Layer1 ;
Minus = Layer2 ;
MODEL = [ModelName ];
) [IGNORE_SHORTS]

A resistor has the following format in the SPICE output statement:

AREA keyword
Rxxx n1 n2 [ModelName] [R=]rValue

LW keyword
Rxxx n1 n2 [ModelName] L=rLength W=rWidth

The following rules apply to resistors:

ƒ Resistance is calculated with the formula R = ρ × ( l ⁄ w ) , where ρ is the sheet resistance in units
of ohms/square, l is the length of the resistor, and w is the width of the resistor.
ƒ The value of ρ is taken from the number specified with the Setup Layers dialog for the recognition
layer (rLayer) of the resistor (see “Layer Setup” on page 87).
ƒ The LW keyword can only be used with the recognition layer (rLayer).
ƒ The values of l and w are determined from the layout. The extractor computes the area of the
recognition layer and divides it by the effective width to obtain l. The width of a pin is the length of

L-Edit 14 User Guide Section 3 843


Chapter 26: Extracting Layout Extract Definition File Format

the edge that the pin shares with the recognition layer (rLayer). The effective width is the average
of the plus pin width and minus pin width.

Minus pin width

Plus pin width

Recognition Minus pin


Plus pin layer Minus pin

Inductor

DEVICE=IND (
RLAYER = rLayer ;
Plus = Layer1 ;
Minus = Layer2 ;
MODEL = [model ] ;
) [IGNORE_SHORTS]

An inductor has the following format in the SPICE output statement:

Lname n1 n2 [model] [L=]

Extract does not calculate inductance; users must add this value after netlist extraction.

BJT

DEVICE=BJT (
RLAYER = rLayer [,AREA];
Collector = cLayer [,AREA];
Base = bLayer [,AREA];
Emitter = eLayer [,AREA];
[Substrate = [sLayer ]];
MODEL = model ;
[NominalArea = areaVal ;]
) [IGNORE_SHORTS]

A BJT device has the following format in the SPICE output statement:

Qname col bas emt [sub] model [AREA= {rLayerArea | pinArea } /areaVal]

The following rules apply to BJT devices:

ƒ The optional AREA keyword can be specified on only one layer (the recognition layer or the pin
layer). It is used to indicate the layer for which the area is to be calculated.
ƒ Nominal area can be expressed either in decimal or scientific notation. It has units of m2, but no
unit tag will appear after the value.
ƒ The NominalArea keyword is required if the AREA keyword is used.
ƒ If no AREA keyword is present, the area will not be written to the SPICE statement.

L-Edit 14 User Guide Section 3 844


Chapter 26: Extracting Layout Extract Definition File Format

Diode

DEVICE=DIODE (
RLAYER = rLayer [, AREA];
Plus = Layer1 [, AREA];
Minus = Layer2 [, AREA];
MODEL = model ;
[NominalArea = areaVal ;]
) [IGNORE_SHORTS]

A diode has the following format in the SPICE output statement:

Dname n1 n2 model [AREA= {rLayerArea | pinArea } /areaVal]

The following rules apply to diodes:

ƒ The optional AREA keyword can be specified on only one layer (the recognition layer or the pin
layer). It is used to indicate the layer for which the area is to be calculated.
ƒ Nominal area can be expressed either in decimal or scientific notation. It has units of m2, but no
unit tag will appear after the value.
ƒ The NominalArea keyword is required if the AREA keyword is used.
ƒ If no AREA keyword is present, the area will not be written to the SPICE statement.

GAASFET/MESFET 1

The following syntax can be used to define a GAASFET/MESFET device using its nominal area as a
parameter.

DEVICE=GAASFET (
RLAYER = rLayer [, AREA];
Drain = dLayer [, AREA];
Gate = gLayer [, AREA];
Source = sLayer [, AREA];
[Bulk = [bLayer];]
MODEL = model;
[NominalArea = areaVal;]
) [IGNORE_SHORTS]

The GAASFET/MESFET device has the following format in the SPICE output statement:

Zname drn gat src [blk] model [AREA= {rLayerArea | pinArea } /areaVal]

The following rules apply to GAASFET/MESFET devices:

ƒ The optional AREA keyword can be specified on only one layer (the recognition layer or the pin
layer). It is used to indicate the layer for which the area is to be calculated.
ƒ Nominal area can be expressed either in decimal or scientific notation. It has units of m2, but no
unit tag will appear after the value.
ƒ The NominalArea keyword is required if the AREA keyword is used.
ƒ If no AREA keyword is present, the area will not be written to the SPICE statement.
ƒ The GAASFET/MESFET 1 syntax is distinguished by the presence of the AREA, and/or
NominalArea keywords. L-Edit determines the appropriate output based on the presence of either
of these keywords.

L-Edit 14 User Guide Section 3 845


Chapter 26: Extracting Layout Extract Definition File Format

GAASFET/MESFET 2

The following syntax can be used to define a GAASFET/MESFET device using its width as a
parameter.

DEVICE=GAASFET (
RLAYER = rLayer ;
Drain = dLayer [, WIDTH];
Gate = gLayer ;
Source = sLayer [, WIDTH];
[Bulk = [bLayer ];]
MODEL = model ;
) [IGNORE_SHORTS]

A GAASFET/MESFET device has the following format in the SPICE output statement:

Zname drn gat src [blk] model L=length W=width

The following rules apply to GAASFET/MESFET devices:

ƒ The length is the length of gate, and the width is the length of the edge that the indicated layer
shares with the recognition layer (rLayer). The length and width have units of meters.
ƒ The optional WIDTH keyword for a GAASFET/MESFET may be specified on only the drain or
source pin but not both, and is used to indicate the layer for which width will be calculated.
ƒ If no WIDTH keyword is present, the width and length will not be written to the SPICE statement.
ƒ The GAASFET/MESFET 1 syntax is distinguished by the presence of the WIDTH keyword. L-Edit
determines the appropriate output based on the presence of this keyword.

JFET

DEVICE=JFET (
RLAYER = rLayer [, AREA];
Drain = dLayer [, AREA];
Gate = gLayer [, AREA];
Source = sLayer [, AREA];
[Bulk = [bLayer ];]
MODEL = model ;
[NominalArea = areaVal ;]
) [IGNORE_SHORTS]

A JFET device has the following format in the SPICE output statement:

Jname drn gat src [blk] model [AREA= {rLayerArea | pinArea } /areaVal]

The following rules apply to JFET devices:

ƒ The optional AREA keyword can be specified on only one layer (the recognition layer or the pin
layer). It is used to indicate the layer for which the area is to be calculated.
ƒ Nominal area can be expressed either in decimal or scientific notation. It has units of m2, but no
unit tag will appear after the value.
ƒ The NominalArea keyword is required if the AREA keyword is used.
ƒ If no AREA keyword is present, the area will not be written to the SPICE statement.

L-Edit 14 User Guide Section 3 846


Chapter 26: Extracting Layout Extract Definition File Format

MOSFET

DEVICE=MOSFET (
RLAYER = rLayer ;
Drain = dLayer {[, AREA] [, PERIMETER [/GATE=#]] |
[,GEO]};
Gate = gLayer ;
Source = sLayer [, AREA] [, PERIMETER [/GATE=#]];
[Bulk = [bLayer ];]
MODEL = model ;
) [IGNORE_SHORTS]

A MOSFET device has the following format in the SPICE output statement:

Mname drn gat src [blk] model L=lengthValue W=widthValue {[AD=areaValue]


[PD=perimeterValue] [AS=areaValue] [PS=perimeterValue] | [GEO=#]}

The following rules apply to MOSFET devices:

ƒ The length is the length of gate, and the width is the average length of the edges that the source and
drain share with the recognition layer (rLayer). The length and width have units of meter.
ƒ The optional AREA keyword may be specified on the drain or source pin or both. It is used to
indicate whether the area for that layer will be calculated and written for the AD (Area of the Drain)
and AS (Area of the Source) output values.
ƒ The optional PERIMETER keyword may be specified on the drain or source pin or both, and is used
to indicate whether the perimeter for that layer will be calculated and written for the PD (Perimeter
of the Drain) and PS (Perimeter of the Source) output values. The shared edge is not included in
perimeter calculations for a source or drain.
ƒ The optional /GATE=# keyword is used with the PERIMETER keyword. It may be specified on the
drain or source pin or both, but only where the PERIMETER keyword has already been designated.
The number is a decimal value between 0.0 and 1.0, indicating the fraction of the gate width to
include in the perimeter. If the /GATE=# keyword is missing, the perimeter will include the gate
width.
ƒ The optional GEO keyword may be specified on only the drain pin. It is used to indicate that the
GEO value will be written to the SPICE statement. The GEO keyword can only be used if the
AREA and PERIMETER keywords are not used. The values of GEO written to the SPICE statement
are as follows:

GEO=0—drain and source areas are not shared


GEO=1—drain is shared
GEO=2—source is shared
GEO=3—both drain and source are shared
ƒ The GEO keyword is used with the area calculation method (ACM) for modeling the source and
drain diodes. Users are encouraged to use the AREA and PERIMETER options because they yield
more accurate approximations of the area and perimeter values than those achieved using the GEO
option.

Subcircuit

Subcircuits can be defined explicitly for the extractor. This method of describing subcircuits is different
from automatic subcircuit instance recognition (see “Using a “SUBCKT” Device to Extract
Non-Standard Devices” on page 839).

DEVICE=SUBCKT (

L-Edit 14 User Guide Section 3 847


Chapter 26: Extracting Layout Extract Definition File Format

RLAYER = rLayer [, AREA] [, PERIMETER] [, LW];


pin1Name = pin1Layer [, AREA] [, PERIMETER] [, WIDTH] [, DEVICEWIDTH];
pin2Name = pin2Layer [, AREA] [, PERIMETER] [, WIDTH] [, DEVICEWIDTH];
. . .
MODEL = model ;
[NominalArea = areaVal ;]
) [IGNORE_SHORTS]

A subcircuit has the following format in the SPICE output statement:

AREA Keyword
Xzzz n1 [n2 ...] cName [AREA=rLayerArea/areaVal]
[PERI=rLayerPerimeter]
[L=cLength W=cWidth]
[AREA_pin1Name=pin1Area/areaVal]
[PERI_pin1Name=pin1Perimeter]
[WIDTH_pin1Name=pin1Width]
[AREA_pin2Name=pin2Area/areaVal]
[PERI_pin2Name=pin2Perimeter]
[WIDTH_pin2Name=pin2Width] ...

The following rules apply to subcircuits:

ƒ Nets that are internal to a subcircuit are not promoted up to the subcircuit interface.
ƒ The optional AREA keyword may be specified on one or more layers (recognition or pin layer). An
area will be calculated for each indicated layer.
ƒ The optional PERIMETER keyword may be specified on one or more layers (recognition or pin
layer). A perimeter will be calculated for each indicated layer.
ƒ The optional WIDTH keyword may be specified on one or more pin layers. A width of the pin layer
edge that is coincidence with the recognition layer will be calculated for each indicated layer. The
WIDTH keyword may not be used with the recognition layer.
ƒ The LW keyword can be used with the AREA and/or PERIMETER keyword.
ƒ The LW keyword can only be used with the recognition layer (rLayer).
ƒ The DEVICEWIDTH keyword can only be used if the LW keyword is present and it can only be used
with the pin layers. This affects the calculation of L and W, see below.
ƒ Nominal area can be expressed either in decimal or scientific notation. It has units of m2, but no
unit tag will appear after the value.
ƒ The NominalArea keyword is required if the AREA keyword is used.
ƒ If no AREA keyword is present, the area will not be written to the SPICE statement.

L-Edit 14 User Guide Section 3 848


Chapter 26: Extracting Layout Extract Definition File Format

ƒ If no DEVICEWIDTH keywords exist on any pin, the Subcircuit average length and width are
calculated as if the Subcircuit recognition layer geometry was a rectangle. They are calculated as
follows:
L perimeter = Perimeter of the Layer

L area = Area of the Layer


1 1 2
C length = --- • L perimeter + --- L perimeter ∠ 16 • L area
4 4
1 1 2
C width = --- • L perimeter ∠ --- L perimeter ∠ 16 • L area
4 4

ƒ If one or more DEVICEWIDTH keywords exists on the pins, the Subcircuit average width is equal to
the average width of the pins that are marked with DEVICEWIDTH. The length is equal to the
AREA/Width. The width of a pin is the length of the shared edge between polygons on the pin
layer and polygons of the recognition layer. An example is shown below.
DEVICE=SUBCKT (
RLAYER = Recognition Layer, LW;
pin1 = pin1Layer, DEVICEWIDTH;
pin2 = pin2Layer, DEVICEWIDTH;
pin3 = pin3Layer;
MODEL = MySub;
)

Pin3

Pin1width

Recognition Pin2
Recognition
Plus pin
Pin1 layer Minus pin
layer

Pin2width

Pin1 width = Width of Pin 1

Pin2 width = Width of Pin 2

RL area = Area of the Recognition Layer


Pin1 width + Pin2 width
S width = ------------------------------------------------------
2
RL area
S length = ----------------
S width

L-Edit 14 User Guide Section 3 849


27 Viewing Verification Results

The Verification Error Navigator

The Verification Error Navigator provides an interface with which to browse and display DRC or
Extract errors in the active layout. For both processes, the Verification Error Navigator is designed to
simplify iterations of the error correction workflow.

The Verification Error Navigator is a resizable and dockable toolbar. It contains a scrollable tree of
rules plus controls for loading errors and displaying them in the active layout. You can expand or
collapse a individual rule or device to show or hide individual errors for that rule. For each DRC rule,
L-Edit lists the number of violations in square brackets. Navigator controls are the same for both DRC
and Extract results.

To open the Verification Error Navigator, select Tools > Verification Error Navigator > Show
Verification Error Navigator from the L-Edit menu.

Verification Error Navigator for DRC

Legend:
DRC or Extract Rule
Cell name
Error name
Checkbox for “marking”
errors
[#] Number of violations
corresponding to each
rule or cell
{#} Actual distance of each
violation

L-Edit 14 User Guide Section 3 850


Chapter 27: Veiwing Verification Results The Verification Error Navigator

Error Navigator Toolbar

The following table lists the Verification Error Navigator toolbar commands. You can map shortcut
keys for all commands using Setup > Application (see “Keyboard Customization” on page 64).

Button Description

Toggles the display of error markers on the selected error. When the
display is on, L-Edit draws markers on the violating edge segments
and shows an optional circle and cross hairs, as specified in the
Verification Error Navigator Options dialog.

Removes an error marker completely, so that it can no longer be


displayed.
Displays the next error in the tree. The shortcut for this command is
the period key (.).
Equivalent to Tools > Verification Error Navigator > Next Error.
Displays the previous error in the tree. The shortcut for this command
is the comma key (,).
Equivalent to Tools Verification Error Navigator > Previous Error.
Displays the Verification Error Navigator Options dialog to specify
how errors are displayed. (See “Error Display Options” on page 859.)
Equivalent to Tools > Verification Error Navigator > Verification
Error Navigator Options.

Toggles which rules are displayed in the navigation tree. When


enabled, all rules are shown. When disabled, only rules with
violations are shown.
Equivalent to Tools > Verification Error Navigator > View All
Rules.

Toggles which rules are displayed in the navigation tree. When


selected, the top level of the tree is rules. When unselected, the top
level of the tree is cells containing violations.
Equivalent to Tools > Verification Error Navigator > View By Rule.
Displays each error in the cell in which it originally occurs. When this
option is selected, errors are shown in the cell in which they occur.
When unselected, all errors are shown in the top-level layout.
Equivalent to Tools > Verification Error Navigator > Cell Context
(see “Cell Context” on page 854.)
Displays a pull-down command menu of error navigator actions. See
“Verification Navigator Command Menu” on page 855.
Deletes the selected error from the tree and from the error layer, then
selects and displays the next error in the tree. If a rule is selected, a
dialog asks if you want to delete all errors for that rule.

Note: Deletion of errors using ( ) cannot be undone.


Number of errors found in the current extract or DRC run.

You can view the number of marked errors (errors with checkmarks
next to them) by moving the cursor over this field.

L-Edit 14 User Guide Section 3 851


Chapter 27: Veiwing Verification Results The Verification Error Navigator

Button Description

The current job, identified by the cell on which DRC or extract was
performed.
Forward and back buttons. Use these to move through recently
viewed combinations of verification job and active cell. When you
activate a new cell or load a new verification job, the forward portion
of this list of views is discarded.

Verification Error Navigator for Extract

Legend:
DRC or Extract Rule
Cell name
Error name
Short or open circuit
indicator
Checkbox for “marking”
errors
[#] Number of violations
corresponding to each
rule or cell
{#} Actual distance of each
violation

Error Indicators During Verification Runs

L-Edit provides several visual indicators when a DRC or Extract job terminates prior to completion,
usually due to an internal error, job cancellation or insufficient memory. When results in the
Verification Error Navigator are incomplete, its background will be gold colored. A message is also
written to both the summary report and the statistics report.

L-Edit 14 User Guide Section 3 852


Chapter 27: Veiwing Verification Results The Verification Error Navigator

When a DRC or Extract job terminates unexpectedly as a result of running out of memory, L-Edit
provide the following error message. .

In addition, the “remaining” portion of the progress bar will be displayed in gold when there is a large
amount of swapping during a verification run.

Using Checkmarks

Each rule, cell, and error shown in the Verification Error Navigator tree has a checkbox. You can mark
items for any reason - for example, to indicate the errors which have been fixed, or to indicate errors
that you want to review later. The Verification Error Navigator includes a number of preset actions that
you can perform on the errors that are marked (see “Verification Navigator Command Menu,” below).

To add or remove a mark next to an item, simply click in the checkbox. When some but not all of the
items in a certain group are checked, the checkbox for the parent item will have a grayed-out
background.

L-Edit 14 User Guide Section 3 853


Chapter 27: Veiwing Verification Results The Verification Error Navigator

Viewing Errors

For each error, L-Edit draws markers over the violating edge segments. Errors can be further
highlighted with a circle and cross hairs, as illustrated below.

Markers show where


the violation occurs.

To display an error in the active layout, click on the Error name ( ) in the Verification Error Navigator
tree. L-Edit automatically pans and/or zooms to the error marker according to your settings in the View
or Modify Verification Error Navigator Options dialog. (See “Error Display Options” on page 859.)

To step forward or backward through errors, click the Next Error ( ) or Previous Error ( ) toolbar
buttons. (You can also select Next Error or Previous Error from the Tools > Verification Error
Navigator submenu, or use the period (.) and comma (,) for shortcut key, respectively.

Click ( ) to toggle marker display on or off for the selected error.

You can zoom in to enlarge and center the error in the layout window by pressing the shortcut key W.
To return to the default view, click again on the Error name button.

Viewing “Job” Runs

The cell on which DRC or Extract is run defines a job. You can have multiple jobs loaded into the error
navigator, but only one is displayed in the rule tree at a time. To switch between jobs (i.e., runs on
different cells), use the drop-down combo box in the Verification Error Navigator toolbar
( ). A job is listed by the name of the cell on which it was run.

When you use the forward and backward buttons ( ), you are scrolling through various
combinations of job runs and active cell, as you would when using a web browser. When you create a
new context by selecting a job or changing the active cell, the forward portion of the list of recent
contexts is cleared.

Cell Context

Each error found in a job can be represented in two contexts. The cell on which the job was run defines
the top-level context for that job. You can show an error as it appears in the top-level context for the
current job ( disabled), or you can show the error in the cell in which it occurs ( enabled). The
cell context is always the same for a given error, regardless of which job is active. If the error occurs in
the top-level cell for the current job, then only one context is available.

L-Edit 14 User Guide Section 3 854


Chapter 27: Veiwing Verification Results The Verification Error Navigator

Verification Navigator Command Menu

L-Edit provides a number of preset actions for marked errors, which you can access using the dropdown
Command menu ( ) on the Verification Navigator toolbar.

Hide All Marked Errors When this mode is selected, all marked errors are automatically
hidden from the tree display. This mode is persistent—while you are
in this mode, adding a check in the checkbox for an error causes it to
be automatically hidden.

To exit the mode, select Hide all marked errors again to unmark it in
the menu. This does not change the visibility or checkmarks of hidden
errors; however, newly marked errors are not hidden when the Hide
all marked errors option is off.

Show Hidden Errors Shows errors that were previously hidden. This option does not
expand the tree. Checkmarks are left unchanged.
Clear All Marks Clears checkmarks from all errors in the tree. Hidden errors will
remain hidden; use Show hidden errors to display these.
Invert Marks Changes all error checkboxes to the opposite state—previously
unmarked errors become marked, and previously marked errors
become unmarked.
Delete Marked Errors Permanently removes all marked errors from the DRC results. The
Verification Error Navigator will issue a warning before deleting
hidden errors.
Delete Results Deletes all results for the current job.
Export Results Exports results for the current job to a text file. See “Exporting a Text
File” on page 863.
Place Error Objects on Places objects (polygons, wires, and/or ports) on the error layer to
Layout highlight violations. See “Placing Error Markers,” below.
Open DRC Summary Displays the DRC summary report in a text window. See “DRC
Report Summary Report” on page 861.
Open DRC Runtime Displays a DRC runtime statistics report in a text window. See “DRC
Statistics Runtime Statistics Report” on page 863.

L-Edit 14 User Guide Section 3 855


Chapter 27: Veiwing Verification Results The Verification Error Navigator

Open Extract Summary Displays the Extract summary report in a text window. See “Extract
Report Summary Report” on page 865.
Open Extract Runtime Displays the Extract runtime statistics report in a text window. See
Statistics “Extract Runtime Statistics Report” on page 867
Show DRC Results Check this option to display DRC results in the Verification Error
Navigator window.
Show Extract Results Check this option to display Extract results in the Verification Error
Navigator window.

Verification Navigator Context Menu

Display in Cell Context Shows errors in the cell where they originate.
Display in Top-level Shows errors in their top-level cell context.
Context

Mark Enters a checkmark in each checkbox for the selected cell or rule and
all those below it in the hierarchy.
Unmark Clears the checkmarks in each checkbox for the selected cell or rule
and all those below it in the hierarchy.
Jump to Rule in Setup In DRC, opens the design rule file at the highlighted cell or rule.
DRC/Jump to Device in
Netlist In Extract, opens the extract rule file at the highlighted device; see
“Finding Devices and Nodes” on page 834. From LVS or T-Spice you
can also right-click on a line in the netlist and select Jump > Device
in layout.

Placing Error Markers

When you select an error in the Navigator tree, L-Edit automatically highlights that error in the layout.
(You can enter your preference for how a selected error is highlighted with “Error Display Options” on
page 859.) These error markers, however, are temporary. When you select a new error, L-Edit clears the
previous marker and highlights the currently selected error.

If you wish to locate all errors in the layout, you can use the Place error objects on layout command to
create error objects and/or ports for all violations. These error objects are added to the error layer and
saved with the TDB file.

L-Edit 14 User Guide Section 3 856


Chapter 27: Veiwing Verification Results The Verification Error Navigator

Error ports and objects can be moved, deleted, hidden, and shown in the same manner as other objects.
Error objects are persistent; they are saved on the error layer of the TDB file and will remain there until
you choose to delete them.

Placement options include:

Flat, all objects on top-level Places all error objects in the top-level layout for the DRC job.
cell
In the cell associated with Places error objects in the cells in which they were found.
the error

Examples, one instance of Places a single error object for each rule that was violated. If an error
each error in the top level is repeated in the layout, only one example will be shown with the
cell error object. All example objects are placed in the top-level layout for
the DRC job.

These additional options determine which objects are placed in the layout. You must select at least one
of the first two options under Objects to place (polygons or ports).

Polygons and/or wires Places a polygon and/or wires on each error to illustrate the violation.
representing errors
Ports labeling errors with Places a port with text labeling each error. Each error port consists of
text the name of the violated design rule, the rule distance, and the spacing
or nature of the error in brackets. For example, an error port named
8.4c Via to Active Spacing < 2 [1] shows that the associated violation
involves a spacing of 1, when the minimum Via-Active spacing
should be 2.
Markers Places a circle, with crosshairs extending to the four sides of the
window, on each error.
Include errors hidden in Places error objects on all violations, including those that are hidden
the error navigator from display in the Verification Error Navigator tree. When this
option is not checked, hidden errors are omitted from the error layer.

L-Edit 14 User Guide Section 3 857


Chapter 27: Veiwing Verification Results The Verification Error Navigator

Setting the Color of DRC Markers


The error marker by default uses the last color in the color palette. The color palette can be accessed
with Setup > Colors. You can change the last color by first selecting the color in the color list and then
using the RGB slide bars or the color picker button to select an appropriate color for your error markers.

Finding Error Markers

You can use Edit > Find to locate marked errors. Specify a Wire search (for error objects) or a Port
search (for error ports) on the Error layer. For ease of viewing, specify Pan or Pan & zoom as the
viewing option.

Note that because of the default rendering setup of the Error layer, a port’s text is only visible when the
port is selected. Thus, as the search commands go through ports on the Error layer, the names of the
error ports become visible one at a time.

Clearing Error Markers

Tools > Clear Error Layer opens the following dialog, prompts for options, then removes error markers
(ports and objects).

This cell (cell name) Removes all objects on the Error layer in the active cell
This file (file name) Removes all objects on the Error layer in the active file

L-Edit 14 User Guide Section 3 858


Chapter 27: Veiwing Verification Results The Verification Error Navigator

All files Removes all objects on the Error layer in all open files

Warning: This command cannot be undone.

Error Display Options

Viewing Options

Tools > Verification Error Navigator > Verification Error Navigator Options opens a dialog with
controls for how L-Edit displays errors when they are selected in the Verification Error Navigator. You
can also access this dialog by clicking ( ) on the toolbar.

The General tab contains these browsing and display options:

Leave view unchanged Leaves the layout view unchanged when you select and display an
error.
Center view on error Centers the display on the selected error, without changing the zoom
level.
Center view on error & Centers the display on the selected error and zooms in or out until the
zoom error and a specified margin (see below) fill the active window.

L-Edit 14 User Guide Section 3 859


Chapter 27: Veiwing Verification Results DRC Report Files

Margin around error Sets the margin, in display units, to be displayed around the selected
error when zoom is active.
Display error marker circle Instructs L-Edit to draw a circle around each error when it is being
viewed.
Display error marker cross Instructs L-Edit to draw two lines - one vertical and one horizontal -
hairs that intersect the center point of the currently selected violation.
Reuse the active cell Displays the selected error in the active cell window.
window

Open the cell in a new Opens a new window when the selected error is not in the same cell as
window that shown in the active window (default).
Limit number of errors Specifies the maximum number of errors included in the Verification
listed per rule-cell Error Navigator tree for a single rule and cell.
combination to:

Sorting Options

The Sort tab contains options for sorting rules when they are viewed either by rule or by cell.

Descending error count Lists rules or cells in descending order of error count, with rules or
cells containing the most violations listed first.
Alphabetically Lists rules or cells alphabetically.
Results order Lists rules in the order found in the DRC or Extract results (default).
This option is active when “viewing by rule” only.

DRC Report Files

L-Edit automatically generates both a summary report and a runtime statistics report for each DRC run.
After DRC completes, these reports are stored with the cell on which DRC was run.

You can view these reports for the selected DRC job by selecting the corresponding menu options in the
Verification Error Navigator Actions menu. You can also instruct L-Edit to display the summary report
automatically upon completion of DRC, by selecting the corresponding option in either the Design
Rule Check dialog or the DRC Progress dialog. When you display a report, L-Edit opens the report in

L-Edit 14 User Guide Section 3 860


Chapter 27: Veiwing Verification Results DRC Report Files

an L-Edit text window with the default filename “Summary of cellname.drc” or “Statistics of
cellname.drc.” You can then save the report to a text file, if desired.

DRC Summary Report

The DRC summary report contains a summary of DRC results, including the number of errors found for
each rule and each cell. The DRC summary report also gives information about memory usage, runtime,
and files.

Following is a sample DRC Summary Report.

************ RESULTS SUMMARY ************************************


DRC Errors Generated 215
CPU Time: 23:14:00
REAL Time: 00:01:00
Number of Input Objects: 5449 (70067)
Number of Rules Executed: 88
Number of Disabled Rules: 7

************ EXECUTION SUMMARY **********************************


Execution Date/Time: Jun 19 2002 10:50:49
L-Edit Version: v10.0
Rule Set Name: MOSIS/HP 1.0U SCN3M, Tight Metal
File Name:
Cell Name: top
User Name: TannerEDA
Computer Name: TANNERPC
Memory used at start: 0K

************ GEOMETRY FLAG SUMMARY ******************************


ACUTE ANGLES............. 0
ALL ANGLE EDGES.......... 0
OFFGRID ................. Disabled
SELF INTERSECTIONS ...... 1
WIRE JOIN STYLES ........ 0
WIRE END STYLES ......... 0

************ RULES WITH ERRORS FOUND ****************************


1.3 Well to Well(Same Potential) Spacing ........................ 2
2.2 Active to Active Spacing .................................... 8
2.3b Source/Drain Active to Well Space ......................... 4
2.4a WellContact(Active) to Well Edge ........................... 2
4.2a/2.5 Active to N-Select Edge ................................ 2
4.2b/2.5 Active to P-Select Edge ................................ 2
4.3c Not Exist: ActiveContact not on act ........................ 4
...

************ RULES WITH NO ERRORS FOUND *************************


1.1 Well Minimum Width
2.1 Active Minimum Width
2.3a Source/Drain Active to Well Edge
2.4b SubsContact(Active) to Well Spacing
...

************ DISABLED RULES *************************************


1.2 Well to Well (diff potential) Not che
2.5 Covered in 4.2. Active from diff imp
10.1b BondingArea:PadComment(100x100um)

L-Edit 14 User Guide Section 3 861


Chapter 27: Veiwing Verification Results DRC Report Files

...

************ CELLS WITH ERRORS FOUND ****************************


PadVdd .......................................................... 2
Row_10 .......................................................... 2
TannerEDALogo ................................................... 80
Chip ............................................................ 2
Frame ........................................................... 75
Pad_BidirHE08 ................................................... 1
PadGnd .......................................................... 52
Core ............................................................ 1

************ INPUT LAYER SUMMARY ********************************


Active .............. Number of Geometry Objects = 155 (1577)
Active Contact ...... Number of Geometry Objects = 1222 (39830)
Cap Well ............ Number of Geometry Objects = 0 (0)
Metal1 .............. Number of Geometry Objects = 756 (3660)
...

The DRC summary report is organized into the following sections:

RESULTS SUMMARY The results summary includes the following information:


ƒ DRC Errors Generated—the total number of errors generated,
including Geometry Flag violations.
ƒ CPU Time and REAL Time—the cpu and wallclock times,
respectively. Each time is given in H:M:S format.
ƒ Number of input objects—Number of objects obtained by
counting each primitive object in each cell. The number of
objects that would be counted in a flattened layout is shown in
parentheses.
ƒ Number of Rules Executed—Total number of rules executed, not
counting geometry flags.
ƒ Number of Disabled Rules—Total number of disabled rules, not
counting Geometry Flags.
EXECUTION SUMMARY Lists statistics pertaining to the execution time, file and cellnames,
username, and memory usage.
GEOMETRY FLAG The Geometry Flag Summary lists the number of Geometry Flags
SUMMARY found for acute angles, all-angle edges, off-grid vertices,
self-intersecting polygons, and wire join/end styles. Acute angles,
all-angle edges, and off-grid vertices are only counted when their
corresponding Geometry Flag options have been checked in the DRC
Setup dialog. If these options are left unchecked, then they are listed
as “disabled” in the Geometry Flag Summary. Self-intersecting
polygons and wire join/end styles are always reported.
RULES WITH ERRORS Lists all rules for which at least one violation was found. Rules are
FOUND listed in the order they appear in the Setup DRC dialog.
RULES WITH NO ERRORS Enabled rules for which no errors were found.
FOUND
DISABLED RULES List of disabled rules.

L-Edit 14 User Guide Section 3 862


Chapter 27: Veiwing Verification Results DRC Report Files

CELLS WITH ERRORS List of cells in which errors were found, and the number of errors in
FOUND each cell (including geometry flag violations).
INPUT LAYER SUMMARY Lists each layer used by an enabled rule, including layers that do not
contain any objects. Next to each layername, the number of geometry
objects is listed. The number of objects on the layer if the database
were flattened is included in parentheses.

DRC Runtime Statistics Report

When you select Open DRC Runtime Statistics from Tools > Verification Error
Navigator > Actions, L-Edit displays timing statistics for layer derivation and design rule checks in a
text window. (You can see an example of an Extract statistics report in “Extract Runtime Statistics
Report” on page 867.)

Exporting a Text File

You can export the results of a DRC or Extract job to a text file by selecting the option Export results in
the Verification Error Navigator Command menu. L-Edit writes design rule errors to a text file with the
cell name as filename and the extension .tde.

Displaying Calibre® DRC Results

L-Edit allows you to load DRC errors from a Calibre® DRC results database into the Verification Error
Navigator and display them in the active layout.* The database you select must be flat (i.e., not
hierarchical) and in ASCII format to be compatible with L-Edit.

To specify the database to load, select Tools > Add-Ins > Load Calibre® DRC Results Database.

Type the Calibre DRC Results database filename in the editing field, or select Browse to navigate to the
desired file.

You need to enter scaling information based on the technology you use in the Meters per User Unit
field. For example, go to Setup > Setup Design > Technology to find your tech setup. If your tech
units are one micron and the database resolution is 1/1000, the scaling factor will be 1e-009 meters per
user units.

Click OK to display the Verification Error Navigator for the specified file. The display shown in the
error navigator depends upon the information in the Calibre file. If hierarchical information is included,

* Calibre is a registered trademark of Mentor Graphics Corporation.

L-Edit 14 User Guide Section 3 863


Chapter 27: Veiwing Verification Results Extract Report Files

the error navigator will display an error within the cell it originates and also in the cell on which the
DRC was run.

Finding Open Circuits and Short Circuits

HiPer Verify warns in the Verification error navigator for open circuits and short circuits, with a display
that lets you click on the warning in the navigator display to zoom directly to the error in layout.
Warnings are grouped by type, cell and net name. for each error, the navigator shows the coordinate
location, layer, and whether the conflicting object has been used or ignored.

For example, in the simple cell shown below, after extract the error navigator shows a short circuit,
where a net has been labelled both GND and GND1, and an open circuit, where the same net name “A”
is used three times. Each of these violations has a checkbox in which you can click to place an error
marker to easily locate the violation in the layout.

Extract Report Files

In addition to the netlist, L-Edit automatically generates both a summary report and a runtime statistics
report for each Extract run. After Extract completes, these reports are stored with the cell on which
Extract was run.

You can view these reports for the selected Extract job by selecting the corresponding menu options in
the Verification Error Navigator Command menu. You can also instruct L-Edit to display the summary
report automatically upon completion of Extract, by selecting the corresponding option in the Extract
Progress dialog. When you display a report, L-Edit opens the report in an L-Edit text window with the
default filename “Summary of cellname” or “Statistics of cellname.Extract.” You can then save the
report to a text file, if desired.

L-Edit 14 User Guide Section 3 864


Chapter 27: Veiwing Verification Results Extract Report Files

Extract Summary Report

The Extract summary report contains a summary of Extract results, including the number of errors
found for each rule and each cell, and bad devices (ex. missing or extra pins). The Extract summary
report also gives information about memory usage, runtime, and files.

Following is a sample Extract Summary Report.

L-Edit EXTRACT SUMMARY REPORT


EXECUTION SUMMARY Execution Start Time Feb 15 2008 11:04:05
L-Edit Version L-Edit Win32 13.00 Beta 3.20080215.07:18:40
Build Number 3749
Rule Set Name
File Name \\suntan2\tmp\barry\HiPerExtractExample\lights.tdb
Cell Name Pad_BidirHE (Feb 15 11:03:56 2008)
User Name jbergstr
Computer Name DEV01XP
Operating System Windows XP 5.1 2600 Service Pack 2
Total physical memory 2047.0MB
Memory used at start 28.4M
----------------------------------------------------------------------------
EXTRACT JOB RESULTS SUMMARY Total EXTRACT Errors Generated 23
CPU Time 00:00:00
Real Time 00:00:08
Rules Executed 21

EXTRACT Errors Generated by Rule Set


\\suntan2\tmp\barry\HiPerExtractExample\HiPer-LVS.cal 22
\\suntan2\tmp\barry\HiPerExtractExample\Dracula025_4M.drc 1
----------------------------------------------------------------------------
RUN-TIME ERRORS AND WARNINGS
----------------------------------------------------------------------------
L-Edit EXTRACT Log
PARSING SUMMARY
Command File: \\suntan2\tmp\barry\HiPerExtractExample\HiPer-LVS.cal
Rule Set Name: Calibre LVS for Generic 0.25um process
No warnings.

Command File: \\suntan2\tmp\barry\HiPerExtractExample\Dracula025_4M.drc


Rule Set Name:
No warnings.
----------------------------------------------------------------------------
Running command file \\suntan2\tmp\barry\HiPerExtractExample\HiPer-LVS.cal
Rule Set Name Calibre LVS for Generic 0.25um process
Execution Start Time Feb 15 2008 11:04:05
Maximum Results 1000

INPUT LAYER SUMMARY Layer Name Object Count Flattened


Active 7 7
ActiveCont 410 410
Metal1 30 30
Metal2 10 10
NDiffResistorID 1 1
NMOSCapacitorID 0 0
NSelect 3 3
NWell 2 2
NWellResistorID 0 0
PDiffResistorID 0 0
PMOSCapacitorID 0 0
PSelect 4 4

L-Edit 14 User Guide Section 3 865


Chapter 27: Veiwing Verification Results Extract Report Files

PadComment 1 1
Poly 13 13
PolyCont 17 17
PolyResistorID 0 0
Via1 86 86

----------------------------------------------------------------------------
EXCLUDED CELLS
None

---------------------------------------------------------------------------
GEOMETRY FLAG SUMMARY ACUTE ANGLES Disabled
ALL ANGLE EDGES Disabled
OFFGRID Disabled
ZERO-WIDTH WIRES 0
POLYGONS WITH OVER 199 VERTICES 0
WIRES WITH OVER 200 VERTICES 0
SELF INTERSECTIONS 1
WIRE JOIN/END STYLES 0

----------------------------------------------------------------------------
CELLS WITH ERRORS FOUND Pad_BidirHE 22
----------------------------------------------------------------------------
RESULTS SUMMARY Errors Generated 1
CPU Time 00:00:00
REAL Time 00:00:02
Input Objects 584 (584)
Rules Executed 14
Geometry Flags Executed 5
Disabled Rules 0

----------------------------------------------------------------------------
Running command file
\\suntan2\tmp\barry\HiPerExtractExample\Dracula025_4M.drc Rule Set Name
Execution Start Time Feb 15 2008 11:04:08
Maximum Results 1000

INPUT LAYER SUMMARY Layer Name Object Count Flattened

----------------------------------------------------------------------------
EXCLUDED CELLS
None

----------------------------------------------------------------------------
GEOMETRY FLAG SUMMARY ACUTE ANGLES Disabled
ALL ANGLE EDGES 0
OFFGRID 0
ZERO-WIDTH WIRES 0
POLYGONS WITH OVER 199 VERTICES 0
WIRES WITH OVER 200 VERTICES 0
SELF INTERSECTIONS 1
WIRE JOIN/END STYLES 0

----------------------------------------------------------------------------
CELLS WITH ERRORS FOUND Pad_BidirHE 1
----------------------------------------------------------------------------
RESULTS SUMMARY Errors Generated 23
CPU Time 00:00:00
REAL Time 00:00:06
Input Objects 0 (0)
Rules Executed 7

L-Edit 14 User Guide Section 3 866


Chapter 27: Veiwing Verification Results Extract Report Files

Geometry Flags Executed 7


Disabled Rules 0
----------------------------------------------------------------------------

The Extract summary report is organized into the following sections:

EXECUTION SUMMARY Lists statistics pertaining to the execution time, file and cellnames,
username, and memory usage.
RESULTS SUMMARY The results summary includes the following information:
ƒ Extract Errors Generated—the total number of errors generated.
ƒ CPU Time and REAL Time—the cpu and wallclock times,
respectively. Each time is given in H:M:S format.
ƒ be counted in a flattened layout is shown in parentheses.
ƒ Number of Rules Executed—Total number of rules executed, not
counting geometry flags.
ƒ Number of Errors Generated by Rule Set
PARSING SUMMARY Lists the command files, rules set names, and any warnings.
INPUT LAYER SUMMARY Lists each layer used by an enabled rule, including layers that do not
contain any objects. Next to each Layer Name, the number of
geometry objects (Object Count) and the number of objects on the
layer if the database were Flattened is included.
EXCLUDED CELLS Lists any cells excluded from processing.
GEOMETRY FLAG Lists the number of Geometry Flags found for acute angles, all-angle
SUMMARY edges, off-grid vertices, zero-width wires, polygons with over 100
vertices, wires with over 200 vertices, self-intersecting polygons, and
wire join/end styles.

Acute angles, all-angle edges, and off-grid vertices are only counted
when their corresponding Geometry Flag options have been checked
in the DRC Setup dialog. If these options are left unchecked, then
they are listed as “disabled” in the Geometry Flag Summary.
Self-intersecting polygons and wire join/end styles are always
reported.
CELLS WITH ERRORS List of cells in which errors were found, and the number of errors in
FOUND each cell (including geometry flags executed).
RESULTS SUMMARY Lists the number of Errors Generated, the CPU and REAL time, the
number of input objects, the number of rules executed, the number of
flags executed, the number of disabled rules.

Extract Runtime Statistics Report

When you select Open Extract Runtime Statistics, L-Edit displays run time and memory usage
statistics for layer derivation and rules in a text window as shown in the following (truncated) example.

The Page Faults/Sec column indicates the amount of swapping during a job. If these values are high you
should consider adding random access memory to your computer or using a 64-bit operating system.

L-Edit 14 User Guide Section 3 867


Chapter 27: Veiwing Verification Results Extract Report Files

L-Edit VERIFICATION RUNTIME STATISTICS REPORT


************ EXECUTION SUMMARY **********************************
Execution Date/Time: Oct 01 2008 16:08:15
L-Edit Version: L-Edit Win32 14.00.20081001.14:51:20
Build Number: 4222
Rule Set Name:
File Name: Y:\My Documents\doc\2008\08.22.2008 64-bit 8Gb-DONE-DRC_testfile.tdb
Cell Name: RPD_GEN_10 ()
Maximum Results: 1000
User Name: jbergstr
Computer Name: JBERGSTRXP2
Operating system: Windows XP 5.1 2600 Service Pack 2
Total physical memory: 2046.1MB
Memory used at start: 22.2M

Command File: Y:\My Documents\doc\2008\torex.drc

************ RUNTIME STATISTICS *********************************

Time Cumulative Delta Page


(seconds) Memory (MB) Memory Faults/s
INIT, 5.195, 30.0M, +29400K, 1551,
SIMPLIFY, 7.738, 41.8M, +9936K, 384,
WS1W 0.512, 42.2M, +388K, 97, INTERNAL L
WS1W, 0.007, 42.2M, , 0, SAVE $$TEMP0072
WS1S 0.022, 42.4M, +184K, 46, EXTERNAL L
WS1S, 0.002, 42.4M, , 0, SAVE $$TEMP0074
, 0.014, 42.5M, +20K, 5, NISO INTERACT EDUMY
, 0.001, 42.5M, , 0, NISO NOT BIPNISO
, 0.002, 42.5M, , 0, NISO INTERACT SC
, 0.001, 42.5M, , 0, $$DRA0039 NOT SCNISO

<etc.>

Tanner “EVI” for Calibre Results Viewing Environment (RVE)

Tanner Tools is integrated with the Mentor Graphics' Calibre Interactive and Calibre Results Viewing
Environment (RVE) applications through the External Verification Interface (EVI) to provide a
seamless mechanism for launching Calibre and viewing Calibre results in L-Edit or S-Edit.

EVI implements all of the Calibre RVE interface, so Calibre users can view DRC, LVS and parasitic
extraction results, including highlighted nets and/or devices, in L-Edit and S-Edit. For more efficient
LVS, EVI also takes advantage of Calibre RVE’s ability to display hierarchical SPICE netlists and to
inspect parasitic capacitances, sorted by node or layer. You can also perform layout-to-schematic
cross-probing from L-Edit and S-Edit, greatly simplifying LVS verification.

EVI resides entirely on the PC client running Tanner Tools and connects to a running Calibre RVE
license on a Unix/Linux server. The single page EVI configuration dialog lets you set a port for
communication with Calibre RVE and Calibre Interactive, the intermediate file locations for storing
results when passing them from the PC to the server running Calibre, and the location of the L-Edit or
S-Edit design database.

The External Verification Interface requires a separate subscription license, which can be purchased
from Tanner EDA Sales.

L-Edit 14 User Guide Section 3 868


Chapter 27: Veiwing Verification Results Extract Report Files

Installing and Configuring EVI

You will need an X Window Server on your PC and a way to launch jobs on the remote Linux/Unix
machine where Calibre® is located. Depending on your network and security setting, you can either set
access controls option on the X server or Enable X11 Forwarding with your SSH client, but don’t set
both.

See Installing an X server to set the Xming Access Controls Option for details on how to install a free X
Window Server. Installing a Telnet/SSH client to Enable X11 Forwarding for details on how to install a
free telnet/SSH client.

Starting Jobs on the Remote Machine


Follow these steps to test your connection and start a remote job.

[1] Start your X Windows Server

[2] Connect with Telnet or SSH to the Linux/Unix machine where Calibre is located.

[3] Once connected, type “export DISPLAY=<YourPCName>:0.0” at the prompt, where <YourPCName>
is the name of your computer. (You can use the Windows key + the Pause key ( + ) to open the
System Properties dialog, which has a Computer Name tab that shows your PC name.)

[4] Run XClock by typing “xclock” at the prompt. If XClock appears then you are able to connect and start
a remote job.

Setup EVI
EVI runs on the Windows PC where you run L-Edit and S-Edit.

[1] Start EVI from the Windows computer where you run L-Edit and S-Edit. You can use either Start > All
Programs > Tanner EDA > Tanner Tools v##.# > External Verification Interface, or C:\ Program
Files\Tanner EDA\Tanner Tools v##.#\evi.exe, where ##.# is the product version installed on your PC
(e.g. 14.0). This will add the EVI icon ( ) to your system tray.

L-Edit 14 User Guide Section 3 869


Chapter 27: Veiwing Verification Results Extract Report Files

[2] If you get a Windows flag, allow the Firewall connection.

[3] In the EVI dialog, make sure the port number is 9189. You will need a location on the network for the
results that both your Windows PC and Calibre can access.

Socket Port Enter 9189.


Calibre Path Prefix Type the path to the network location for the results in the form that
Calibre (Linux/Unix) can use to access the directory (e.g.
/net/data/verification).
Tanner Path Prefix Type the path to the network location for the results in the form that
Tanner (PC) can use to access the directory (e.g.
\\<servername>\<sharename>\verification)
Start with Windows Check this box to launch EVI during Windows startup.

[4] Click Apply to accept your entries, then Hide to minimize the dialog to the system tray or Exit to close
the dialog.

L-Edit 14 User Guide Section 3 870


Chapter 27: Veiwing Verification Results Extract Report Files

Setup Calibre RVE


[1] Connect to the Linux/Unix machine where Calibre is located. (This is usually done with a Telnet or
SSH client. If you don't have a telnet/SSH client, see “Installing a Telnet/SSH client to Enable X11
Forwarding” on page 873.)

[2] Start the Calibre toolbar by typing “calibre - gui” at the prompt. If this doesn't work, you may have to
start the Calibre license manager first by typing “lmgrd”.

[3] Click on RVE in the Calibre Interactive toolbar.

[4] Run Setup > Setup Layout Viewer in Calibre RVE.

[5] Set the Layout Viewer to Other and Tanner (L-Edit). (For older versions of Calibre RVE, you will need
to set it to Other and Other.)

[6] Set the Hostname field to your hostname or the IP address of your Windows PC. The Socket Number
should be 9189.

[7] Set the Highlight Data field to the same Calibre path prefix you set in the EVI dialog plus a filename to
store the results. For example, /net/data/verification/query_results.

[8] Click the Connect button under IPC Settings to test the connection, then click OK.

L-Edit 14 User Guide Section 3 871


Chapter 27: Veiwing Verification Results Extract Report Files

[9] Run Setup > Setup Schematic Viewer in Calibre RVE.

[10] Set the Schematic Viewer to Other and Tanner (S-Edit). (Again, for older versions of Calibre RVE you
will need to set it to Other and Other.)

[11] Make sure the Use layout viewer connection option is enabled.

[12] Click OK.

DRC Results Viewing


[1] Unzip the test data to the network location indicated in the Tanner Path Prefix field of the EVI dialog.

[2] Start L-Edit and load the HiPer.tbd database file. L-Edit and S-Edit have to be running when viewing
results in Calibre RVE.

[3] In Calibre RVE, load the DRC results file.

[4] Browse the DRC error database with Calibre RVE.

Installing an X server to set the Xming Access Controls Option


[1] Install Xming X Server on your PC (http://www.straightrunning.com/XmingNotes/).

[2] Download public domain Xming from Sourceforge.

[3] Download public domain Xming-fonts from Sourceforge.

[4] Install Xming.

L-Edit 14 User Guide Section 3 872


Chapter 27: Veiwing Verification Results Extract Report Files

[5] To set the access controls on the X server, right-click on the Xming desktop icon and add -ac after :0 in
the Target field.

[6] Install fonts.

Installing a Telnet/SSH client to Enable X11 Forwarding


[1] Install PuTTY from (http://www.putty.org/).

[2] Start PuTTY.

[3] To enable X11 forwarding select Connection > SSH > X11 category.

[4] Check the Enable X11 Forwarding checkbox only if you didn’t use the access control option on your X
windows server.

[5] Leave the X display location blank. PuTTY will automatically fill this in.

L-Edit 14 User Guide Section 3 873


Chapter 27: Veiwing Verification Results Extract Report Files

EVI for DRC and LVS

You can run DRC or LVS directly on a cell in L-Edit or S-Edit by specifying the design database and
the primary cell in Calibre Interactive. Communicating through the EVI plug-in, Calibre Interactive
then exports the files needed from L-Edit or S-Edit and runs Calibre on those files.

ƒ For DRC, EVI makes a call to L-Edit to export the layout in GDSII format, then sends it to Calibre
nmDRC.
ƒ For LVS, EVI makes a call to L-Edit for the exported layout and to S-Edit to export the schematic
in SPICE format, then sends them to Calibre LVS.Calibre runs and then creates the Calibre results
file, while the user remains in L-Edit. When the results are ready, they are loaded into Calibre RVE
for review.

Viewing DRC Errors


To view DRC errors you click on the error in Calibre RVE, which communicates through EVI to
highlight the error in L-Edit. The errors display in sequence, and you resolve each one in turn in L-Edit,
optionally re-running DRC.

Cross Probing
EVI supports both tools during LVS by requesting a given net in the layout or schematic and
highlighting it in L-Edit and S-Edit. EVI can also query RVE for the location of particular devices in the
layout or schematic by device name or from the cursor’s current position.

Shorts and Open Circuits


To track down shorts and opens on complicated nets in layout, EVI can highlight a net by marking only
specified layers or by marking each layer of the net in a different color.

Finding Parasitics
You can also browse extracted parasitic results in Calibre RVE and L-Edit or S-Edit, sorting parasitic
results by net name or by value to find those nets of greatest interest. EVI can highlight the resistance,
capacitance to substrate, and coupling capacitance in the layout or schematic. This allows you to
pinpoint the specific layout geometry causing the largest parasitics, then modify the layout to minimize
any parasitic effects.

L-Edit 14 User Guide Section 3 874


28 Cross Probing
3

Tanner Tools provides easy and efficient verification with cross probing that lets you click in a netlist to
locate corresponding nets and devices in the layout or schematic.

When you select a device from an extracted or exported netlist, you can instantly view that object in a
layout view in L-Edit, or a schematic view in S-Edit. Because Tanner applications produce hierarchical
netlists for designs with various levels of hierarchy, you can locate a problem quickly and resolve it just
once, in the cell where the error originates.

Key Features

ƒ You can cross probe to layout or schematic from any of the Tanner applications that reads a SPICE
netlist—LVS, S-Edit, T-Spice or L-Edit—by right-clicking on a device in the netlist.
ƒ From a SPICE file open in any Tanner text editor, you can bookmark all instances of all instances
of a subcircuit, go to the start or end of a subcircuit, jump to the definition of a subcircuit from an
instance of a subcircuit, or jump to the model statement from an instance of a primitive device.
ƒ You can set the level of zoom and type of highlighting you prefer, and use standard L-Edit marker
controls to control your cross probing markers.

Using Cross Probing

To cross probe to layout, use a netlist extracted from L-Edit. To cross probe to a schematic, use a netlist
exported from S-Edit. To cross probe to either schematic or layout use an LVS results file. The design
you are cross probing must be active in L-Edit for layout or S-Edit for schematic.

You will notice that extracted netlists include a comment at the end of each device, which is a set of
coordinate values for the displacement, rotation and array values used to locate the device in layout.
Schematics use the instance name to locate instances.‘

Remember that the design must be open and active in the intended application for cross probing to
work. When you select a cross probe option, the corresponding L-Edit or S-Edit taskbar button will
blink to laert you that the result is available.

L-Edit 14 User Guide Section 3 875


Chapter 28: Cross Probing Using Cross Probing

[1] Right-click on a device in the netlist to open the menu shown below and click on Jump. (Only Tanner
options are described below, all others are standard Windows operations.))

Insert Single Line When the cursor is midline, inserts the character for a mid-line
Comment (*...) comment, a dollar sign ($), at the cursor position. Disabled when the
cursor is at the beginning of a line.
Remove Single Line When the cursor is on a comment line, removes the start of line
Comment (*...) comment character, an asterisk (*), from that line.
Jump Opens the crossprobe menu (shown below).
Refresh Syntax Re-applies netlist formatting.
Highlighting

[2] Click on Jump to open this menu and select the option you want.

Device in Layout Opens the cell in L-Edit and draws a marker on the device.
Device in Schematic Opens the cell in S-Edit and highlights the marker.
Net in Schematic Highlights the node in S-Edit.

[3] Alternately, you can highlight a device in L-Edit then use Tools > Jump to “devicename” in
schematic to highlight the corresponding device in S-Edit.

L-Edit 14 User Guide Section 3 876


Chapter 28: Cross Probing Using Cross Probing

[4] S-Edit will display the device in the selected state.

[5] If the proper design is not open in L-Edit, or if you have attempted to probe from an exported netlist,
you will get an error in the Command Line window. For example,

Probe: Device "MP1" not found in cell "NOR2"

If the proper design is not open in S-Edit, or if you try to probe from an extracted netlist into schematic,
S-Edit will display this error message.

L-Edit 14 User Guide Section 3 877


Chapter 28: Cross Probing Using Cross Probing

[6] In L-Edit, the device will be highlighted in its most primitive cell in the design hierarchy. To help locate
the cross probed device, you can press W to zoom into it, or you can use the Toggle Marker button to
turn the highlighting on and off.

Marker colors in L-Edit are determined by the settings for node highlighting markers (see “Node
Highlighting Setup” on page 366).

Node Highlight Setup


Clear Markers
Toggle Markers

These marker controls apply to all types of


markers, including SDL, node highlighting and
cross probing.

[7] When you pick view schematic options from a netlist file, S-Edit will open the corresponding page with
the selected device highlighted. For example, S-Edit will highlight instance P2 of cell PMOS in
NAND2C when you jump to Device in Schematic from the following line:

L-Edit 14 User Guide Section 3 878


Chapter 28: Cross Probing Using Cross Probing

MP1 Out1 A Vdd Vdd PMOS W=2.5u L=250n M=2 AS=4.5p PS=13.6u AD=3.125p PD=7.5u

L-Edit 14 User Guide Section 3 879


29 Introduction to LVS
3

LVS stands for layout versus schematic. This netlist comparison tool compares two netlists to determine
whether they describe the same circuit. When they do not, LVS works in conjunction with L-Edit to
identify and correct errors.

LVS can be used to determine whether a schematic circuit matches a layout, or whether two different
schematics or layouts implement the same circuit.

LVS Features

ƒ SPICE input format LVS accepts standard SPICE-format netlists.


ƒ Fragmentation When two netlists are not equivalent, LVS can identify unresolvable
identification nodes and devices and assist in locating them on the original
schematic or layout.
ƒ Automorphism LVS identifies automorph classes—sets of elements or nodes (such as
resolution devices in parallel) which cannot be distinguished from one another.
To resolve automorph classes, LVS can either employ user-supplied
prematch information or a detailed trial matching process.
ƒ Parameter comparison LVS uses topological (device types, number of connections),
parametric (resistance, capacitance), and geometric (area, length,
width) information to compare netlists. Matching thresholds can be
defined to specify how different two values can be while still
comparing equivalently. Different margins can be defined for
parametric and geometric comparisons.
ƒ Permuted class LVS can identify the switching of two elements in series.
resolution

Launching LVS

You can launch LVS by:

ƒ Clicking the Start button on the Windows toolbar and navigating to the application through the
Programs menu
ƒ Double-clicking the LVS icon from your desktop or another Tanner tool
ƒ Double-clicking an LVS verification database (.vdb) file in Windows Explorer
ƒ Double-clicking an LVS batch (.bat) file in Windows Explorer (see “Using LVS in Batch Mode”
on page 913)
ƒ Invoking LVS from a DOS command prompt (see “LVS Command-Line Syntax” on page 939.)

L-Edit 14 User Guide Section 3 880


Chapter 29: Introduction to LVS Input and Output Files

The LVS icon looks like this:

Input and Output Files

LVS requires two SPICE-format netlist files for input. SPICE files can be in either T-Spice or P-Spice
format. In T-Spice mode, LVS also accepts netlists in H-Spice or Berkeley Spice format.

Optional input files include prematch files and element description files.

Information required for the verification run—input and output files, plus verification options—is
referred to as a verification setup. LVS saves a setup to a verification database (.vdb) file. Multiple
verification setups can be exported to a batch (.bat) file for subsequent invocation from a DOS
command prompt. See “Setup—Input” on page 886 and “Setup—Output” on page 887.

Prematch Files

A prematch file is a text file that specifies pairs of nodes and elements that are to be considered equal.
LVS uses this information to resolve automorph classes.

Syntax

Each line of a prematch file names two nodes or elements that are to be considered equal:

member1a member2a
member1b member2b
member1c member3c
...

member1 … The entry on the left in each line belongs to the Layout netlist
specified in the Run LVS dialog—see “Setup—Input” on page 886.
member2 … The entry on the right in each line belongs to the Schematic netlist
specified in the Run LVS dialog—see “Setup—Input” on page 886.

Element Description Files

The element description file .elm contains a list of statements defining all non-SPICE devices present in
the netlists to be compared by LVS. It is only needed when the netlist files being compared contain
special devices.

Syntax

Element description statements have the following syntax:

L-Edit 14 User Guide Section 3 881


Chapter 29: Introduction to LVS Input and Output Files

|| d name pin [pin ...] [(perm[,perm ...])];

|| d An element description statement always begins with these


characters.
name The name of the element being defined. The element name must
match the subcircuit name used in the SPICE file.
pin A list of the pins for the element. There must be at least one pin.
perm An optional list of pin permutability statements, enclosed in
parentheses. If more than one permutability statement is included,
then they are separated with commas. No spaces are allowed within
the parentheses.
; An element description statement always ends with a semicolon.

Permutability Statements

Pin permutability statements are used to indicate pins whose order can be swapped. For example, if you
were defining a transistor, it might not be possible to distinguish between the source and drain pins, so
you would declare them permutable. The names of the pins used in these statements must exactly match
the pin names used elsewhere in the statement, including capitalization. Pin permutability statements
can have one of two forms:

pin==

or

pin1=pin2[=pin3[=...]]

The first example states that all pins with the given name (pin) are permutable. The second statement
states that all pins in the list (pin1, pin2, pin3, …) are permutable with each other. No spaces are
allowed in either form.

Element Description Examples

|| d C POS NEG (POS=NEG) ;

The example above defines a non-polarized capacitor.

|| d DEV G1 G2 G3 DS DS (G1=G2=G3,DS==) ;

The example above defines a custom element, which will be called in the netlist file through a subcircuit
element statement.

File Locking

LVS reads in all input files, including layout and schematic netlist files, element description files, and
prematch files, at the start of a verification run. You can open such files for reading at this time, but
LVS will prevent you from editing them. The verification database (.vdb) file itself is locked
throughout the verification, and you cannot edit it at any time during the run.

LVS also locks input files while processing each verification setup in a queue or batch file.

L-Edit 14 User Guide Section 3 882


Chapter 29: Introduction to LVS User Interface

Backup Files

LVS automatically creates a backup of each verification database file, using the same filename as the
original, but with a .vdo extension. Each time you modify the .vdb file, LVS will overwrite the previous
backup of that file.

User Interface

The basic LVS user interface (shown below) consists of the following elements:

ƒ Title bar
ƒ Menu bar
ƒ Toolbar (optional)
ƒ Status bar (optional)

Title bar
Menu bar
Toolbar

Status bar

Depending on the types of files that are currently open and the task being performed, the user interface
may also contain the following other elements:

ƒ “Setup Window” on page 885


ƒ “Text Window” on page 898
ƒ “Verification Window” on page 899
ƒ “Verification Queue” on page 901

L-Edit 14 User Guide Section 3 883


Chapter 29: Introduction to LVS User Interface

Menus

The availability of individual menus depends on the types of files you have open in LVS. When no files
are open, the LVS menu bar will look like this:

Commands for creating, opening, saving, and printing files

Commands for displaying or hiding elements of the user interface

Commands for starting, stopping, or setting up verification runs

Commands for starting, stopping, or setting up verification runs


Commands for accessing the online documentation

When the active window contains a setup file, the LVS menu bar will look like this:

Commands for selecting, tiling, or cascading windows

When the active window contains a text file, the LVS menu bar will look like this:

Commands for editing and searching in text files

Toolbar

You can position the toolbar anywhere within the application window or dock it against one side of the
application window. You can also display or hide the toolbar by selecting View > Toolbar.

L-Edit 14 User Guide Section 3 884


Chapter 29: Introduction to LVS User Interface

The availability of toolbar buttons will depend on the type of file in the active window—setup or text—
and whether or not a verification queue exists.

Create a new document Run verification

Open a file Stop verification

Save a file Open queue dialog


Find
Print Redo
Run queue
Undo
Print preview
Paste Add setup to queue

Copy Access online documentation


Cut

Status Bar

When a verification window is active and the cursor is in the output file section, the status bar displays
the number of the line where the cursor is positioned. If a text window is active, the status bar displays
both the line number and column number of the cursor position.

Setup Window

When one or more LVS setup files are open, the user interface will contain one setup window for every
open setup file. The setup window contains five tabs, and it is used to specify input files and a variety of
verification options.

To create a new setup window, select File > New. In the New dialog, select LVS Setup and click OK.

LVS will create a new setup window with the default name Setup1, which corresponds to the setup file
Setup1.vdb. When you save the setup file for the first time, you can either use the default name or
supply your own, but you must use the .vdb extension (to ensure that Windows automatically
recognizes the files as an LVS verification database). Subsequent new setup windows will receive
similar names by default—Setup2, Setup3, etc.

To open an existing setup window, select File > Open. In the Open dialog, select the appropriate
Verification Database File (*.vdb) from the Files of type drop-down list and select an available file or
enter its name in the File name field.

L-Edit 14 User Guide Section 3 885


Chapter 29: Introduction to LVS User Interface

Setup—Input

The Input tab contains fields for specifying input files to be compared by LVS. You can type the correct
filename in a field, or use a Browse button to navigate to an appropriate directory. Click Edit to open
the specified file in a text window.

Layout netlist The two input files to be compared. Each file must be in a SPICE
and format chosen from the drop-down list provided. Options are:
Schematic netlist
ƒ T-Spice — Select T-Spice syntax. This is the default mode.
ƒ H-Spice — Select HSPICE syntax.
ƒ P-Spice — Select P-Spice syntax. This mode must be selected if
the input files were produced by P-Spice.
ƒ CDL — Select Cadence Circuit Description Language syntax.
The default filename extensions is .spc for both input netlists. (See
“SPICE File Format” on page 903.)
Prematch file An optional input file that specifies equivalent elements and nodes for
the iterative matching process. The default filename extension is .pre.
(See “Prematch Files” on page 881.)
Element description file An optional input file containing instructions on how to deal with
custom devices. The default filename extension is .elm. (See
“Element Description Files” on page 881.)
Save modified files without If this option is enabled, text files that are open and modified within
prompting LVS and are required for the LVS job will be automatically saved
when “Run LVS” is pressed.

L-Edit 14 User Guide Section 3 886


Chapter 29: Introduction to LVS User Interface

Setup—Output

The Output tab contains fields for specifying output files and display options.

In the Output Files section, you can type the correct filename in a field, or use a Browse button to
navigate to an appropriate directory. Click Edit to open the specified file in a text window.

Output file When checked, specifies an output file containing verification results.
The default filename extension is .out.
Node and element list An optional output file containing a node and element list. The default
filename extension is .lst.

L-Edit 14 User Guide Section 3 887


Chapter 29: Introduction to LVS User Interface

Flattened layout netlist Optional output files containing the flattened layout and schematic
and netlists. Each file includes only the information that LVS will use to
Flattened schematic netlist compare circuit descriptions. Commands, comments, and ignored
devices or parameters are omitted, and parallel or series elements are
merged as specified in the top section of the Merge Devices tab.

Note: If Merge series MOSFETs is selected on the Merge Devices


tab, the flattened netlist will not reflect collapsed series
MOSFETs. To maintain SPICE compatibility, LVS writes the
flattened netlist before merging series MOSFETs.

The default filename extensions are .spc and .sp for the flattened
layout and schematic netlists, respectively.

Flattened netlists use the @ symbol instead of parentheses ( ) to


designate hierarchy in device and net names. For example,
M1@X1/X2/ for devices and N1@X1/X2/ for nets instead of
M1(X1/X2/) and N1(X1/X2/). This syntax is compatible with
T-Spice and H-Spice.
Overwrite existing output When checked, causes automatic overwriting of the output files, even
files if these files already exist.

Display Options Use the checkboxes to specify which processing information LVS
will display and/or record during the verification run:
ƒ Output file—when checked, prints the selected information to
the output file. To enable this option, you must specify an Output
file in the top portion of the dialog.

ƒ Screen—when checked, displays the selected information in the


verification window.
Show fragmented classes—Shows information on fragmented
classes of nodes and elements.
Show automorph classes—Shows information on automorph
classes of nodes and elements.
Show series MOSFETs that differ in order—Shows information on
functionally equivalent groups of series MOSFETS that differ in
order (also known as permuted classes).

L-Edit 14 User Guide Section 3 888


Chapter 29: Introduction to LVS User Interface

Show detailed processing information—Instructs LVS to include


additional processing information:
ƒ Shows single-connection nodes.
ƒ If a prematch file is used, displays prematched elements and
elements that LVS attempts to postmatch. This is useful for
troubleshooting netlists returned as not identical due to
fragmentation after automorphism or permutability.
ƒ If an element description file is used, lists subcircuits that will not
be flattened (i.e., those designated as special elements).
ƒ Logs merged series or parallel devices.
ƒ Lists deletions of shorted and disconnected devices.
ƒ Lists parasitic devices that were removed or shorted.

For further information on individual netlist classes, see also “Resolving Fragmented Classes” on page
933, “Resolving Automorph Classes” on page 934 and “Permuted Classes in Digital Designs” on page
935.

Setup—Device Parameters

The Device Parameters tab allows you to specify which parametric information LVS should consider
for different elements during iteration matching and detailed trial matching.

R, C and L Elements:

L-Edit 14 User Guide Section 3 889


Chapter 29: Introduction to LVS User Interface

ƒ Resistance, Considers parametric information on resistance, capacitance, and


capacitance, and inductance elements.
inductance values

MOSFET Elements:

ƒ Lengths and widths Considers MOSFET length and width parameters.


ƒ Area and perimeter of Considers source/drain areas and perimeters of MOSFET elements.
source and drain

ƒ Diffusion squares of Considers parametric information about diffusion squares of


gate, bulk, source, and MOSFET gate, bulk, source, and drain terminals.
drain
B, D, J and Q Elements:

ƒ Areas Considers area parameters for non-MOSFET semiconductor devices.


T Elements:

ƒ Transmission line Considers transmission line impedance.


impedance
ƒ Transmission delay, Considers transmission line parameters describing delay, frequency,
line frequency and and wavelength number.
number of
wavelengths
X Elements:

ƒ Parameters Considers parameter values of unflattened or autodefined subcircuits.


These parameters are treated as “value” parameters for the purpose of
comparison tolerance. Parameters of “regular” subcircuits are passed
down the hierarchy to the contents of each subcircuit.

Deviations (in %):

ƒ Maximum The maximum amount (as a percentage of the larger value) by which
element-value two parameter values may differ and still compare as equal. The
tolerance default is 5%.

This tolerance applies to:


ƒ Resistance, capacitance, and inductance values
ƒ Transmission line number of wavelengths, frequency, delay, and
impedance
ƒ MOSFET numbers of gate/source/bulk/drain diffusion squares
ƒ Maximum The maximum amount (as a percentage of the larger value) by which
geometric-value two geometric shapes may differ and still compare as equal. The
tolerance default is 5%.

This tolerance applies to:


ƒ GaAsFET, diode, JFET, and BJT element areas
ƒ MOSFET length and width
ƒ MOSFET source/drain areas and perimeters

For more information, see “Parameter Matching” on page 935.

L-Edit 14 User Guide Section 3 890


Chapter 29: Introduction to LVS User Interface

Setup—Merge Devices

Before LVS compares the two input netlists, it can eliminate potential ambiguities by reducing the total
number of devices used in each circuit. LVS does this by merging similar devices in series or parallel
configurations. (In previous versions of LVS, merging devices was referred to as network optimization.)
When LVS merges a group of series or parallel devices, it replaces them with a single equivalent
component.

Merge options for each device type are specified in the Merge Devices dialog.

Options apply to both


parallel and series
configurations of R, L, and
C devices

Options apply only to


parallel configurations of B,
D, J, M, Q, and Z devices

Applies only to series


configurations of M devices

Devices That Can Be Merged


The top portion of the dialog controls merge options for the following device types and configurations:

ƒ Resistors (R) — parallel and series


ƒ Inductors (L) — parallel and series
ƒ Capacitors (C) — parallel and series
ƒ GaAsFETs (B) — parallel
ƒ Diodes (D) — parallel
ƒ JFETs (J) — parallel
ƒ BJTs (Q) — parallel
ƒ MESFETs (Z) — parallel
ƒ MOSFETs (Mp, Ms) — parallel MOSFETS and stacked MOSFETS (series MOSFETS with gates
connected to the same node). For parallel MOSFETS to be merged, both devices must have the
same gate length; the gate width of the resulting device is the sum of the widths of the original
devices, and the area and perimeter of the source and drain are the sum of the respective terminal
dimensions. For stacked MOSFETS to be merged, both devices must have the same gate width; the

L-Edit 14 User Guide Section 3 891


Chapter 29: Introduction to LVS User Interface

gate length of the resulting device is the sum of the lengths of the original devices. In the case of
merged stacked MOSFETS, the area and perimeter of the diffusion between the devices is divided
evenly between the resulting source and drain terminals.

For each device type, select one of the following options from the drop-down list:

None Leaves devices in their current configuration. LVS will not merge
devices for which None is selected.
All Merges series or parallel instances of the same device model into
equivalent single devices.
Model When the Model option is selected, LVS merges only devices that are
instances of the specified model(s). In the text entry field, type the
models you wish to make available for merge operations. List models
with the following syntax:

type_name1, type_name2, ...

where type is the letter abbreviation for the device type, and name1,
name2, etc. are model names defined in .model statements.

Merging Series MOSFETS


You can use the Set All or Set None button to quickly change all merge settings except for the series
MOSFETs.

Series MOSFET Specifies merge behavior for MOSFET devices in series. If this
optimization (treat series option is selected, the order in which series MOSFETS occur is
MOSFETS as logically ignored.
equivalent) Select None, All, or Model in the pull-down menu. If Model is
selected, type the names of the models to be considered for merge
operations in the editing field.
Find series MOSFETs that When Series MOSFET optimization is set to either All or Model, this
differ in order or parameter option instructs LVS to identify functionally equivalent groups of
values series MOSFETs that occur in different orders. The default state for
this option is unchecked.

When this analysis is enabled, the parameter values of the series


MOSFETs are inspected after the matching is complete. Parameter
mismatch warnings are given in cases where the differences exceed
the comparison tolerance specified in the Device Parameters tab.

Note: Series MOSFETs that differ in order are also called permuted
classes. See “Permuted Classes in Digital Designs” on page
935 for further discussion.
Remove shorted devices Deletes shorted devices, in which all terminals are connected
together.
Remove disconnected Deletes disconnected (open) devices. A MOSFET is considered
devices disconnected if the gate terminal is not connected to any other device,
and at least one source/drain terminal is not connected to any other
device. All other devices types are considered disconnected if at least
one of their terminals is not connected to any other device.

L-Edit 14 User Guide Section 3 892


Chapter 29: Introduction to LVS User Interface

Setup Window—Parasitics

The Parasitics tab contains fields to help LVS identify parasitic capacitors and resistors that should not
be considered in the netlist comparison.

For example, parasitics may have been added to one of the input netlists for detailed timing simulations.
These elements must be removed prior to netlist comparison. Similarly, even with a .include statement,
LVS will not consider nodes to be the same if they are named differently but not connected.

LVS automatically shorts out the following nodes and removes the voltage source or resistor prior to
netlist comparison:

ƒ nodes connected by a 0V voltage source


ƒ nodes connected by a resistor of model R_SHORTED_VSOURCE
ƒ nodes named in a .connect statement.

When you use the .CONNECT command to short two nodes the syntax can be in the form of either
.connect C1@X1/ C2@X1/, .connect X1/C1 X1/C2”, .connect C1(X1/) C2(X1/).

(Prior to version 14.00, LVS would look for voltage sources with the syntax Vsourcename node1
node2 0 and convert them to zero-ohm resistors having the model name R_SHORTED_VSOURCE. These
could then be filtered out using a very small value (ex. 1.00000e-006) in the “Short out resistors”
field, or by entering “R_SHORTED_VSOURCE” in the “Short out device models named” field. When
LVS added support for voltage source syntax with the DC term and voltage units in the voltage source
device definition (“R1 a b dc 0” as well as “R1 a b 0V,” where the “0” can include a SPICE suffix.)
LVS would convert the 0V voltage source to a 0ohm resistor, and you would short out a zero-volt
voltage source by shorting all of its terminals and then removing the device.)

L-Edit 14 User Guide Section 3 893


Chapter 29: Introduction to LVS User Interface

When specifying models, use the syntax type_namex, where “type” is the letter abbreviation for the
device type, and “name1,” “name2,” etc. are model names defined in the .model statements.

Short out resistors <= Removes any resistor with resistance less than or equal to the
specified value, and connects (shorts) the two nodes that were
spanned by the device.
Remove resistors >= Removes any resistor with resistance greater than or equal to the
specified value.
Remove capacitors <= Removes any capacitor with capacitance less than or equal to the
specified value.
Short out capacitors >= Removes any capacitor with capacitance greater than or equal to the
specified value, and r and connects (shorts) the two nodes that were
spanned by the device.
Remove device models Removes all instances of the device models listed in the text entry
named: field. Use the syntax type_namex, where “type” is the letter
abbreviation for the device type, and “namex” is a model name.
Short device models Removes any instance of the device models listed, and connects the
named: nodes that were spanned by the device. Use the syntax type_namex,
where “type” is the letter abbreviation for the device type, and
“namex” is a model name.

L-Edit 14 User Guide Section 3 894


Chapter 29: Introduction to LVS User Interface

Setup—Options

The Options tab contains options for parsing files and flattening netlists, as well as an option to find
soft connections with specified models (see “Detecting Soft Connections with LVS” on page 896):

Consider M bulk terminals When checked, considers the fourth terminal on MOSFET, BJT,
and B, J, Q, Z substrate GAASFET and MESFET devices during verification. If unchecked,
terminals this terminal is ignored. The default is checked, to consider bulk
nodes.
FET S and D are When checked, the source and drain terminals of FETs (MOSFETs,
swappable, except: GAASFETs and MESFETs) are considered to be interchangeable,
except for device models that are explicitly listed. When not checked,
the reverse is true: by default, FETs are asymmetric (e.g., LDD
devices), and symmetric device models are listed explicitly. The
default state is checked.
BJT C and E are When checked, the collector and emitter terminals of BJTs are
swappable, except: considered to be interchangeable, except for device models that are
explicitly listed. When not checked, the reverse is true: by default,
BJTs are asymmetric, and symmetric device models are listed
explicitly. The default state is unchecked.
Resistors are polarized, When checked, all resistors are regarded as polarized elements (i.e.,
except: the two terminals are not interchangeable), except for device models
that are explicitly listed. When not checked, the reverse is true: by
default resistors are unpolarized, and polarized models are listed
explicitly. The default state is unchecked.

L-Edit 14 User Guide Section 3 895


Chapter 29: Introduction to LVS User Interface

Capacitors are polarized, When checked, all capacitors are regarded as polarized elements (i.e.,
except: the two terminals are not interchangeable), except for device models
that are explicitly listed. When not checked, the reverse is true: by
default capacitors are unpolarized, and polarized models are listed
explicitly. The default state is unchecked.
Inductors are polarized, When checked, all inductors are regarded as polarized elements (i.e.,
except: the two terminals are not interchangeable), except for device models
that are explicitly listed. When not checked, the reverse is true: by
default inductors are unpolarized, and polarized models are listed
explicitly. The default state is unchecked.
Find soft connections with When checked, LVS performs a pre-search for wells and substrate
models: contacts that connect as described in “Detecting Soft Connections
with LVS,” below. Enter the model names of the devices used to
identify ohmic well and substrate contacts.

Detecting Soft Connections with LVS


A MOSFET is said to be “soft connected” to a node when the only electrical connection to that node
goes through a well or a substrate. This condition can be a serious problem if, for example, instead of
being connected directly to a power supply metallization, a transistor's source is connected only to the
well (through an ohmic contact) and that well is in turn connected to the power rail (through another
ohmic contact). Soft connections can lead to reduced drive strength, longer gate propagation delays, and
susceptibility to latch-up.

LVS has an option to detect such soft connections when special devices are included in the SPICE
netlist. It is recommended that ohmic contacts to wells and substrate be extracted as zero-ohm resistors,
of type R_WELLCONTACT and R_SUBSCONTACT. (See “Detecting Soft Connections” on page 838
for information about extracting these devices.) This method allows you to simulate the extracted netlist
with T-Spice; if desired, the resistors can be removed in LVS using the options in “Setup—Merge
Devices” (page 891).

To detect soft-connected devices, check the option labeled Find soft connections with models: and
enter the model names of the devices used to identify ohmic well and substrate contacts.

Before executing the regular LVS netlist comparison algorithm, LVS searches for wells and substrate
that connect to at least one device (excluding MOSFET bulk terminals) and connect through
soft-contact devices to more than one node. LVS prints the names of all nodes that are soft-connected
through each well/substrate. LVS then shorts and removes all soft-connect devices, and proceeds with
the regular netlist comparison algorithm.

L-Edit 14 User Guide Section 3 896


Chapter 29: Introduction to LVS User Interface

Setup—Performance

The Performance tab contains options that instruct LVS how to perform during iteration.

Normal iteration: consider Considers both fanout and element type during iteration. This is the
fanout and element type default.
Fast iteration: consider Considers only fanout.
fanout only
Continue processing when Continues to run even on element or node count mismatch. If this
mismatch in node or option is not selected, LVS issues a prompt when an element/node
element count found count mismatch occurs. In batch or queuing mode, this option is
automatically selected.
Automatically perform Instructs LVS to perform detailed trial-matching when automorphed
detailed trial matching to element or node classes occur without first issuing a prompt. In batch
resolve automorph classes or queuing mode, this option is automatically selected.

L-Edit 14 User Guide Section 3 897


Chapter 29: Introduction to LVS User Interface

Text Window

When a SPICE file, or other text-format file, is open, the user interface will contain one or more text
windows.

The text window is used to edit text-format files, such as SPICE, prematch, or element description files.
To create a new text file (and open a new text window), select File > New > Text. LVS will create a new
text window with the default name LVS1. When you save the text file, you can either use the default
name or supply your own, but you must supply an appropriate filename extension, such as .spc or .elm.
Subsequent new text windows will receive similar names by default—LVS2, LVS3, etc.

Using Go To
To speed searches in a text file, you can use Edit > Go To. Depending on the value you enter and your
selection, LVS will move the cursor directly to the beginning of the specified line, column or bookmark

L-Edit 14 User Guide Section 3 898


Chapter 29: Introduction to LVS User Interface

Verification Window

LVS reports its progress and the results of a verification run in the verification window.

The verification results will appear in this window whenever you run a verification. You can also
display the results of the last-performed verification by selecting View > Verification Window anytime
after the initial verification run. If you select this command before running a verification, the window
will be empty.

The verification window is divided into three sections, or panes. The uppermost section lists the input
and output files used in the verification, and the current status of each file. A graphic indicator also
displays the progress LVS has made in the current process.

The middle section of the verification window reports the result of a verification run, relevant notes, and
any errors encountered during the verification. Below the text, a graphic indicator displays the progress
LVS has made in processing the verification run as a whole.

The bottom section of the verification window contains an editable copy of the output file, which
reports input files and options set in the setup window, plus verification progress statements written
during the run. This section can be used to perform line edits on the output file using the following basic

L-Edit 14 User Guide Section 3 899


Chapter 29: Introduction to LVS User Interface

text editing commands. Note that in the verification window these commands are only available via the
keyboard.

Ctrl+A Select all.


Ctrl+C Copy to clipboard.
Ctrl+F Find.
Ctrl+G Go to line.
Ctrl+S Save to file.
Ctrl+V Paste from clipboard.
Ctrl+X Cut to clipboard.
Ctrl+Home Position cursor on first line.
Ctrl+End Position cursor on last line.
Page Up Scroll up through file.
Page Down Scroll down through file.
Delete Delete line.

In the verification window (“Verification Window” on page 899), the bottom section shows the
command line derived from entries made in the setup window. This command line is used to initiate the
verification run:

Command line:
lvs C:\Tanner\LEdit83\Samples\LVS\layout_resonator.spc
C:\Tanner\LEdit83\Samples\LVS\schematic_resonator.spc
-o C:\Tanner\LEdit83\Samples\LVS\resonator.out
-l C:\Tanner\LEdit83\Samples\LVS\layout_resonator.lst
-e C:\Tanner\LEdit83\Samples\LVS\resonator.elm
-nrcl -y2 -fafpr

Beneath the command line, LVS displays the options chosen in the setup window:

Engine configuration report:


Consider Bulk nodes........................................ON
Consider Resistors as polarized elements........................OFF
Consider Capacitors as polarized elements.......................OFF
Consider Inductors as polarized elements........................OFF
Merge series, parallel R and C, parallel MOSFETs.
Delete shorted devices.....................................OFF
Merge series MOSFETs............................................OFF
Find series MOSFETs that differ in order........................OFF
Fast Iteration.............................................OFF

Next, the verification window displays the progress statements written during the verification run:

Reading element definitions from file


C:\Tanner\LEdit83\Samples\LVS\resonator.elm
Parsing file C:\Tanner\LEdit83\Samples\LVS\layout_resonator.spc...
Flattening netlist...
Parsing file C:\Tanner\LEdit83\Samples\LVS\schematic_resonator.spc...

For further information on LVS verification output, see the “LVS Output Tutorial” on page 919.

L-Edit 14 User Guide Section 3 900


Chapter 29: Introduction to LVS User Interface

You can rerun the verification whose results are reported in the verification window by clicking on the
appropriate setup window and pressing F5.

Verification Queue

You can run several verifications consecutively by creating a verification queue. Once you have created
such a queue, you can use it to run multiple verifications without additional user intervention.

To create a verification queue or add a setup to an existing queue, select Verification > Add to Queue
or click the following toolbar button:

LVS will automatically add the active setup to the end of the existing queue.

To display the verification queue, select Verification > Verification Queue (F8) or click the Open
Queue Dialog ( ) button. LVS will display a dialog like this:

Each setup is listed in the Setup Names field. You can make changes to the existing queue via
keyboard shortcuts or a toolbar within the dialog. The toolbar buttons, with their functions and
corresponding keyboard shortcuts, are illustrated below:

Move selected setup down one position (Down arrow)

Move selected setup up one position (Up arrow)

Delete selected setup (Del)

Add setup to queue (Ctrl+O)

Clicking OK saves any changes you have made to the verification queue and closes the dialog. LVS
saves the most recent verification queue in the registry, allowing you to retrieve the current settings the
next time LVS is launched.

L-Edit 14 User Guide Section 3 901


Chapter 29: Introduction to LVS User Interface

Clicking Run initiates a verification for every setup listed in the verification queue. You can also
initiate such a verification run with the verification queue closed by selecting Verification > Start
Verification Queue (F9) or by clicking the Run Queue toolbar button:

When LVS has finished running the verification queue, it will display a dialog like the following:

LVS Output File Format

LVS writes the verification results to an output file with the extension .lvs (or .out). The LVS .out file
is a text file that contains the command line used to initiate the verification run, verification options,
progress statements written during the verification run, and the results of the verification itself.

In the following example, this command line is used to initiate the verification run:

Command line:
lvs layout_resonator.spc schematic_resonator.spc -o C:\test\resonator.lvs -l
layout_resonator.lst -e \\Petervpc\lvs v3.0 rel\Examples\resonator.elm -nrcl -y2
-vfpar

Beneath the command line, LVS displays the options chosen in the setup window:

Engine configuration report:


Consider Bulk nodes...................................................ON
Consider Resistors as polarized elements..............................OFF
Consider Capacitors as polarized elements.............................OFF
Consider Inductors as polarized elements..............................OFF
Optimize shorted & parallel R, C, MOSFETs; series R and C...............OFF
Replace series MOSFETs................................................OFF
Fast Iteration........................................................OFF

Next, the verification window displays the progress statements written during the verification run:

Reading element definitions from file \\Petervpc\lvs v3.0 rel\Examples\resonator.el


Parsing file layout_resonator.spc...
Not resolving subckt fspring
Not resolving subckt comb
Not resolving subckt fspring
Not resolving subckt comb
Not resolving subckt plate4
Parsing file schematic_resonator.spc...

Verification results can vary widely according to problems encountered during the verification run. For
further information on LVS verification output, see the “LVS Output Tutorial” on page 919.

L-Edit 14 User Guide Section 3 902


Chapter 29: Introduction to LVS User Interface

Node and Element List Format

The node and element list .lst is an optionally generated output text file, that names matching and
unresolved nodes and elements, by iteration, in the two compared netlists.

An element from one file cannot be equated with a node from the other file.

Syntax
For each iteration, nodes and elements are listed in the order:

ƒ Resolved nodes
ƒ Other (unresolved) nodes
ƒ Resolved elements
ƒ Other (unresolved) elements

Resolved nodes and elements are listed as follows:

member1a <=> member2a


member1b <=> member2b
...

member1 … The entry on the left in each line belongs to the Layout netlist
specified in the Run LVS dialog.
member2 … The entry on the right in each line belongs to the Schematic netlist
specified in the Run LVS dialog.

Other (unresolved) nodes and elements are listed in single-column format.

SPICE File Format

By using the correct commands, an entire circuit and all contained devices can be described in SPICE
format.

The maximum number of characters per line is 80. Statements extending over multiple lines must have
the + continuation character in the first column of each line after the first.

Filenames are dependent on the operating system in use; the filename specified in an .include command
must meet operating system requirements, including maximum length and special character
requirements.

Note: File paths that contain spaces must be enclosed in single quotes.

Device Statements

Each device statement in a SPICE file begins with a key letter indicating the device type, followed by
the unique name assigned to the specified element. The combination of key letter and name define a
unique instance of a device. Device parameters are listed after the element name. They may include:

L-Edit 14 User Guide Section 3 903


Chapter 29: Introduction to LVS User Interface

ƒ Names of the nodes connected to device terminals.


ƒ The name of a corresponding device model. Device models are declared using the .model
command (see “.MODEL” on page 908).
ƒ An electrical value such as capacitance, inductance, or resistance.
ƒ An area scale factor, [AREA=]area or [A=]area in D, Q, J Z and M devices for compatibility with
Calibre netlist extraction.)
ƒ Geometric parameters such as length and width.
ƒ A multiplicity factor, [M=mult]. Multiplicity indicates the number of devices occurring in parallel;
the default value of this parameter is 1.

The following table describes the correct syntax for device statements supported by LVS.

BJT (Q) Qname collector base emitter [substrate]


+ model [[AREA=]area] [M=mult]

The parameters collector, base, emitter, and substrate (optional)


specify the nodes connected to each of these terminals.
Capacitor (C) There are three syntax options for capacitor device statements. You
can specify the capacitance directly, use a default capacitance for the
model, or calculate capacitance from length and width values.
Syntax 1 The first syntax requires that you specify the capacitance, c:

Cname node1 node2 [model] [C=]c [M=mult]

The use of a capacitor model is optional. However, if you do include a


model name, it must be declared in a model statement of the form:

.model modelname

Additional model parameters are optional.


Syntax 2 The second syntax uses the default model capacitance:

Cname node1 node2 model

In this syntax, you must include a capacitor model for which a default
capacitance is defined. The model must be declared in a model
statement of the form:

.model modelname C CAP=val [params...]

where C is the device type and CAP is the default capacitance.


Additional model parameters are optional.

L-Edit 14 User Guide Section 3 904


Chapter 29: Introduction to LVS User Interface

Syntax 3 The third syntax allows you to calculate capacitance using length and
width parameters and an appropriate model statement:

Cname node1 node2 modelname L=length W=width

To use this syntax, you must specify a model that is declared in a


model statement of the form:

.model modelname C [COX=val] [CAPSW=val][params...]

where C is the device type and COX and CAPSW are used to calculate
capacitance from the length and width values. The calculated
capacitance is equal to COX×L×W+2×(L+W)×CAPSW. At least one
of COX or CAPSW must be present. Additional model parameters are
optional.
Diode (D) Dname node1 node2 model [[AREA=]area]
+ [M=mult]

The node names node1 and node2 represent the positive and
negative terminals, respectively, of the diode.
Inductor (L) Lname node1 node2 [model] [L=]l [M=mult]

The node names node1 and node2 represent the positive and
negative terminals, respectively, of the inductor. The inductance is
specified by the parameter [L=]l.
JFET (J) Jname drain gate source [bulk] model
+ [[AREA=]area] [M=mult]

The parameters drain, gate, source, and bulk (optional) specify the
nodes connected to each of these terminals.
MESFET (Z) Zname drain gate source [bulk] model
+ [[AREA=]area] [M=mult]

The parameters drain, gate, source, and bulk (optional) specify the
nodes connected to each of these terminals. (LVS also supports the B
key letter in MESFET statements.)
MOSFET (M) Mname drain gate source [bulk] model [L=length]
+ [W=width] [AD=ad] [PD=pd] [AS=as] [PS=ps]
+ [NRD=nrd] [NRS=nrs] [NRG=nrg] [NRB=nrb]
+ [M=mult]

The parameters drain, gate, source, and bulk (optional) specify the
nodes connected to each of these terminals. In addition, MOSFETs
use the following optional parameters:
ƒ length, width —Channel length and width.
ƒ ad, pd—Drain area and perimeter.
ƒ as, ps—Source area and perimeter.
ƒ nrd, nrs, nrg, nrb—Number of squares of diffusion for drain,
source, gate, and bulk.
Resistor (R) There are two syntax options for a resistor; the choice depends on
whether a sheet resistance value is required to calculate the resistance.
In both cases, node1 and node2 are the nodes spanned by the resistor.

L-Edit 14 User Guide Section 3 905


Chapter 29: Introduction to LVS User Interface

Syntax 1 The first syntax requires that you specify the resistance, r.

Rname node1 node2 [model] [R=]r [M=mult]

The use of a resistor model is optional. However, if you do include a


model name, it must be declared in a model statement of the form:

.model modelname [R [RSH=val]]

where the optional parameters R and RSH specify the model type and
sheet resistance, respectively.
Syntax 2 You can optionally specify resistor length and width instead of the
resistance (r).

Rname node1 node2 model L=length W=width [M=mult]

To use length and width parameters, you must specify a resistor


model that corresponds to a model statement of the form:

.model modelname R RSH=val

In this syntax, the device type (R) and sheet resistance (RSH) are
required parameters.
Transmission Line (T) Tname n1a n1b n2a n2b [Z0=z] [TD=d] [f=F] [nl=N]

Terminals n1a (+) and n1b (−) are at one end of the transmission line,
and n2a (+) and n2b (−) are at the opposite end. Additional
transmission line parameters are:
ƒ z—Impedance (ohms).
ƒ d—Transmission delay (seconds). The delay may instead be
specified indirectly from f and n.
ƒ F—Line frequency (Hertz).
ƒ N—Normalized number of wavelengths. The transmission delay
(d) is equal to n /f.

Note: Only the SPICE devices and parameters relevant to LVS are listed here. A complete
list of available devices can be found in the T-Spice or H-SPICE user guides.

Subcircuit Instances

Subcircuit instance statements have the following syntax:

T-Spice / H-SPICE:

Xiname node1 [node2 ...] cname [par1=p1 par2=p2 ...]

P-SPICE:

Xiname node1 [node2 ...] cname PARAMS:[par1=p1 par2=p2 ...]

For Extract, the syntax varies as follows:

L-Edit 14 User Guide Section 3 906


Chapter 29: Introduction to LVS User Interface

Xiname node1 [node2 ...] cname [AREA=rLayerArea/areaVal]


[AREA_pinName=pin1Area/areaVal]
[AREA_pinName=pin2Area/areaVal] ...

iname A unique instance name.


node1 node2 Node names. There must be as many node names listed as there are in
the subcircuit definition.
par1 par2 The list of available parameters is determined by the subcircuit
definition. Parameter assignments are optional on a subcircuit
instance statement; parameters may be listed in any order. If a
parameter’s value is not specified in the instance statement, its value
is taken from the default assigned in the subcircuit definition
statement. The multiplicity parameter (M=m) is implicitly defined and
can also be listed.
cname The subcircuit name (from the definition statement).

For example (in T-Spice or H-SPICE):

X123 N125 N253 N74 myCircuit AREA=100 Q=42 E=17

or (in P-SPICE):

X123 N125 N253 N74 myCircuit PARAMS: AREA=100 Q=42 E=17

instantiates a previously defined subcircuit called myCircuit. Its unique name, to distinguish it from
other instances of the same subcircuit, is X123. It has three pins, connected to nodes N125, N253 and
N74. It also has three parameters: AREA, Q, and E. The definition for this subcircuit is given as an
example below.

For Extract

X123 N125 N253 N74 myCircuit AREA=100 AREA_Pin1=15

defines an instance X123 of a subcircuit called myCircuit. It has three pins, connected to nodes N125,
N253, and N74.

Subcircuit Definitions

Subcircuit definition statements have the following syntax:

T-Spice / H-SPICE:

.SUBCKT name pin1 [pin2 ...] [par1=val1 par2=val2 ...]


<subcircuit definition>
.ENDS [name]

P-SPICE:

.SUBCKT name pin1 [pin2 ...] PARAMS:[par1=val1 par2=val2 ...]


<subcircuit definition>

L-Edit 14 User Guide Section 3 907


Chapter 29: Introduction to LVS User Interface

.ENDS [name]

name The name, or type, of the circuit.


pin1 pin2 The pins (inputs and outputs) to the circuit.
par1 par2 An optional list defining the parameters whose values must be known
when the subcircuit is instantiated. A value given for a parameter here
is its default, to be assumed if the parameter is not assigned a value on
the subcircuit instance statement. The multiplicity (M=m) parameter
may not be included here.

The last line of the subcircuit definition can optionally contain the same subcircuit name used in the first
line of the definition (for example, .ends MYCIRCUIT).

In between the first (.subckt) and last (.ends) lines are any number of other SPICE commands and
statements (except subcircuit instance and model commands).

If the subcircuit is empty, it must be defined as an element in the special element file to be used with
LVS.

Duplicate subcircuits are ignored, with a warning.

SPICE Statements

.INCLUDE
A SPICE file can include the contents of other SPICE files with the .include command.

The .include command has the following syntax:

.INCLUDE 'filename'

The filename can be the name of any other SPICE file, and can include drive and path information, if
needed. The filename must be contained within single quotes. Care should be taken to ensure that
inclusion commands do not involve logical loops (for example, fileA including fileB, which itself
includes fileA).

.MODEL
The .model command defines a model to be used in device statements. It can appear anywhere in the
SPICE file, even after the specified model is mentioned in an element statement.

The .model command has the following syntax:

.MODEL name type [par1=p1 par2=p2 ...]

name The name of the model.


type One of the following: C (capacitor); R (resistor); L (inductor); D
(diode); NPN or PNP (BJT); NJF or PJF (JFET); NMOS or PMOS
(MOSFET); NMF or PMF (MESFET).

In LVS, this parameter is ignored and can be left off.

L-Edit 14 User Guide Section 3 908


Chapter 29: Introduction to LVS User Interface

par1 par2 The parameters for the model are listed after the model type, and are
specific to the model type. The set of parameters determines the
SPICE behavior of the model. However, for extraction and netlist
comparison, the parameters are not used and can be left off.

For example:

.model mydevice nmos

specifies an NMOS MOSFET device named mydevice. The model name can be used in device
statements such as the following:

m123 42 51 7 mydevice l=2 w=28

This defines an NMOS transistor with the unique name of M123. Its drain is connected to node 42, its
gate to node 51, and its source to node 7. It has a length of 2 and a width of 28.

.MALIAS
The .malias command assigns an alias to a model name which was defined in a .model command so
that device references to model names may use either the original model name or the alias name.

Alias name assignments may also refer to binned model base names, with declarations for
modelname.1, modelname.2, etc., combined into a single modelname and alias reference. For example,
given binned models nch.1, nch.2, nch.3, etc. you may declare an alias name “nmosmodel” for the
model name “nch.”

The .malias command has the following syntax:

.malias ModelName=AliasName1 [ AliasName2 [ AliasName3 [ ... ] ] ]]

For example:

.model nch.1 nmos level=49 ...


.model nch.2 nmos level=49 ...
.malias nch=nmosmodel

or:

.model dio d ...


.malias dio=zenerdiode

Auto-Declaration of Models in LVS


When a device statement includes a model name, LVS looks for a corresponding .model statement in
the netlist. If the .model statement is missing, LVS can automatically add a simple model declaration
without any parameters (e.g., .model mydevice). LVS will auto-declare models for diode (D), JFET
(J), GaAsFET (B), BJT (Q), MOSFET (M), and MESFET (Z) device statements.

This is necessary to resolve a fundamental ambiguity in SPICE. BJTs and other devices can have three
terminals or four; they also need a model. In the case of a three terminal device, LVS can't tell if the
fourth pin is a fourth terminal or a model if it has not yet encountered either that terminal nor that model
before. When it has encountered a previous definition of that net on another device, LVS can resolve
this ambiguity. Otherwise it will auto-declare the model.

L-Edit 14 User Guide Section 3 909


Chapter 29: Introduction to LVS User Interface

Auto-declared model names appear as warnings in the LVS output. For example, auto-declaration of the
MOSFET model M1 would result in the following warning:

Warning: test1.sp(4): Implicit .model definition M1

When possible, it is best to export model declarations of mosfet and bipolars, etc. from your netlist, as
they are necessary for L-Edit, yet do not cause any problem for LVS.

Note: LVS does not auto-declare models for resistors (R), capacitors (C), or inductors (I). In
these device statements, using a model name that is not declared with .model will
result in an error.

.GLOBAL
The .global command declares certain nodes as global throughout the SPICE file. It is used in SPICE
files containing subcircuits in order to make certain signals available to the subcircuit without explicitly
having to declare them in the subcircuit definition. Typical global nodes might include clocks, power,
the data bus, etc.

The .global command has the following syntax:

.global node1 node2 ...

For example:

.global clock data1 data2 data3 data4

Without .global, the clock node would be considered local to the subcircuit in which it is defined and
distinct from any other node called clock outside of the subcircuit. With .global however, every node
called clock inside or outside of a subcircuit is equivalent.

If the -pspice option is specified on the command line, LVS recognizes PSPICE global nodes.

.OPTION
The .option command has the following syntax:

.option [scale=s][parhier=local|global|tspice]

LVS scales all geometric parameters stated in device statements by the given value s. For example, a
scale value of 2 doubles the length and width parameters of all MOSFETs, and squares the area
parameter on all diodes, BJTs, etc.

The parhier option determines the precedence with which parameter values are applied. If
parhier=global, a higher level parameter definition overrides a parameter defined in lower level of the
design hierarchy. If parhier=local, the innermost scope takes precedence. Setting parhier=tspice is
similar to parhier=local, except that in a subcircuit, the parameter value defined on the .subckt line has
higher priority than a .param within the subckt definition. The default is parhier=global.

For example:

.option scale=2
.option scale=100m

L-Edit 14 User Guide Section 3 910


Chapter 29: Introduction to LVS User Interface

.PARAM
The .param command defines symbolic parameter values so that they can be used anywhere that a
parameter value is called for.

The .param command has the following syntax:

.param symbol1=n1 symbol2=n2 ...

For example:

.param cap100=100pf tranlen=2u tranwid=28u

specifies parameter values that could then be used in statements such as:

c123 12 56 c=cap100
m43 24 54 300 nmos l=tranlen w=tranwid
.subckt mycircuit in out reset c=cap100

Parameters can also be defined in terms of arithmetic expressions.

For example:

.param resistance=10
R1 1 2 R=’resistance*2’

would create a 20 ohm resistor.

Subcircuits can have parameters when defined, for example

.subckt res a b resistance=20

Subcircuit calls can also have parameters, for example

x1 1 2 res resistance=30

The order of precedence of parameter evaluation depends on the .option parhier. In the default case
(.option parhier=global), the outermost definition takes precedence.

Consider the following example:

.param resistance=A
.subckt res a b resistance=G
.param resistance=F
R1 a b R='resistance'
.ends

.subckt r a b resistance=D
.param resistance=C
x1 a b res resistance=E
.subckt

X1 1 2 r resistance=B

The order of precedence, from high to low, is (A, B, C, D, E, F, G).

If .option parhier=local, the precedence becomes (E, F, G, B, C, D, A).

L-Edit 14 User Guide Section 3 911


Chapter 29: Introduction to LVS User Interface

if .option parhier=tspice, the order is (E, F, G, B, C, D, A)

In all cases, parameters defined on the subcircuit call have higher priority than those defined inside the
subckt using .param, which in turn have higher priority than those defined on the .subckt definition
line.

.END
A SPICE file is terminated with an .end command on the last line of the file. Anything following this
command is ignored.

The .end command has the following syntax:

.end

Parameters

Parameter values can take many forms. Some examples are:

area=10 l=.001 r=3.4e-3 c=cap100

In the last example, cap100 must have previously been defined by a .param command. None of the
examples specify units, so default units are assumed (ohms for resistance, farads for capacitance, meters
for length, square meters for area, and so on).

Numbers can be followed by metric abbreviations indicating order of magnitude. The base units (s, v, a,
f, h) are implicit from the context; any characters following the metric abbreviation are ignored. For
example, the following expressions can all specify a capacitance of 10.2 picofarads:

C=10.2pF
C=10.2P
C=10.2pxyz

Acceptable metric prefix abbreviations are shown in the following table.

Abbreviation Prefix Meaning

t or T tera- 1012
g or G giga- 109
meg or MEG mega- 106
k or K kilo- 103
m or M milli- 10–3
u or U micro- 10–6
n or N nano- 10–9
p or P pico- 10–12
f or F femto- 10–15

A commonly used abbreviation is the unit mil (or MIL), representing 10–3 inch.

Parameters listed more than once on the same statement assume the first assigned value. For example:

L-Edit 14 User Guide Section 3 912


Chapter 29: Introduction to LVS Using LVS in Batch Mode

C12 45 123 C=10p C=20U

defines a 10 picofarad capacitor, not a 20 microfarad one.

Comments

Comment lines are designated by an asterisk (*) in the first column. In-line comments are designated by
a dollar sign ($) for T-Spice and H-Spice format netlists, or by a semi-colon (;) for P-Spice format
netlists. All text following the inline comment character up to the end of the line on which it is found is
ignored.

The first line of any SPICE file is always considered a comment, even without comment delimiters.

CDL Files

Circuit Description Language (CDL) files are regular SPICE files, with a few minor syntax changes:

ƒ Subcircuit calls contain a “/” before the name of the subcircuit being instanced.
ƒ Resistors and capacitors contain optional models and physical sizes. For example:
“R11 net1 net2 1k $[B] $W=6u” or “C11 net1 net2 5p $[F]”.
ƒ A three terminal (bulk) resistor device is available. LVS maps these devices into subcircuits. For
example, the resistor “R11 net1 net2 1k $SUB=VCC $[B] $W=6u” becomes equivalent to the
subcircuit call: “XR11 net1 net2 VCC B R=1k W=6u”

Restrictions and Extensions

There are many varieties of SPICE, but only those conforming to the syntax described above are
supported for the purposes of netlist comparison and layout extraction.

Unsupported parameters, if present, are ignored. Default values for parameters are not supported, except
for the multiplicity parameter and subcircuit parameters. If a parameter is not specified but is needed for
a computation, an error will occur and a warning message will be displayed.

Subcircuit definitions may not have model statements or other subcircuit definitions within them.

The .bulk command is not supported.

Only certain model types are supported (see “.MODEL” (page 908)); others are ignored. Parameters for
model statements are not utilized. Any parameters listed in a model statement will be ignored.

For netlist comparison, the SPICE format supported by LVS contains an additional feature to enable
comparison of non-standard elements. This is accomplished by defining the additional elements in an
element description file, and then using the devices in the same manner as you would use a subcircuit
element.

Using LVS in Batch Mode

Using LVS in batch mode provides another way to run multiple verifications consecutively. To run
LVS in batch mode, you must first create a batch file. A batch file is a text file containing one or more

L-Edit 14 User Guide Section 3 913


Chapter 29: Introduction to LVS Using LVS in Batch Mode

command-line invocations of LVS and appropriate setup information—input files and verification
options—for each verification run.

Creating a Batch File

To create a batch file, select File > Export Batch File (Ctrl+E) with a setup window active. LVS will
display the Export Batch File as dialog. Navigate to the correct directory if necessary and enter the
name of the batch file in the File name field, then click Save. LVS will create a batch file with a single
invocation of LVS and command-line options derived from the parameters set in the active setup
window. A simple batch file will contain text like the following:

start /w lvs "C:\LVS\Examples\Ex2_1.spc" "C:\LVS\Examples\Ex2_2.spc" -o


"C:\LVS\Examples\Ex2.out" -nrcl -c1245 -dv5.000 -dg0.010 -vfa -q

For further information on batch-file syntax, see “Batch-File Syntax” on page 939. For further
information on command-line options, see “Options” on page 940.

To add verifications to an existing batch file, select it in the Export Batch File as dialog and click
Save. LVS will prompt you with the following dialog:

To add to the current batch file, click Append To. LVS will append an appropriate command line to the
existing batch file. If you click Overwrite, LVS will overwrite the existing batch file with a new
command line using setup information derived from the current setup window. You can further develop
a batch file by editing it in the LVS text window. For example, you can change the names and paths of
the SPICE files used in the verification, or set different command-line options.

To run an LVS batch file, double-click it in Windows Explorer or invoke it from a DOS command
prompt. Note that LVS does not support launching of multiple instances—to run a batch file, you must
first exit LVS for Windows. For further information, see “Running a Batch File” on page 939.

L-Edit 14 User Guide Section 3 914


Chapter 29: Introduction to LVS Using LVS in Batch Mode

Tutorial

This brief tutorial will teach you how to perform the following basic tasks in LVS:

ƒ Set up and run a verification


ƒ Create a verification queue
ƒ Create and run a verification batch file

For information on interpreting LVS output and resolving verification problems, see the “LVS Output
Tutorial” on page 919.

Creating a Verification Setup

In the following steps, you will learn to create and run an LVS verification database (.vdb) file. The file
you will create is also provided as C:\{install_dir}\Samples\LVS\ex1.vdb.

; Start LVS, if it is not already running.

; Select File > New or click the New button in the toolbar.

; In the New dialog, select LVS Setup as the file type, and click OK.

; LVS will display a setup window. In the File tab, type the names of the two netlists you wish to
compare. You can also use the Browse buttons to navigate to these files. For this tutorial, use the files
ex1_1.spc as the layout netlist and ex1_2.spc as the schematic netlist. Both of these files are located in
C:\install_dir\Samples\LVS.

; Check the Output file option and enter the name of the output file in the corresponding field. For this
tutorial, use C:\install_dir\Samples\LVS\ex1.out.

; Check the option Overwrite existing output files so that LVS will overwrite this output file on
subsequent verification runs without prompting you.

; On the Options tab, check the following options:

ƒ Consider MOSFET bulk nodes (substrate) during iteration matching


ƒ Consider resistors as polarized elements
ƒ Consider capacitors as polarized elements
ƒ Consider inductors as polarized elements

; On the Device Parameters tab, check Resistance, capacitance, and inductance values. Enter a
Maximum element-value tolerance of 5.000.

; On the Performance tab, select Normal iteration: consider fanout and element type.

; On the Verbosity Level tab, check the following options for both Output file and Screen:

ƒ Show fragmented classes


ƒ Show automorph classes
ƒ Show series MOSFETs that differ in order

L-Edit 14 User Guide Section 3 915


Chapter 29: Introduction to LVS Using LVS in Batch Mode

; Save your setup as ex1.vdb, or another name of your choice.

; Select Verification > Run (F5) or click the Run Verification ( ) button on the toolbar.

; This verification run will produce an element/node count mismatch. LVS will prompt you for
permission to continue iteration. Click Yes.

LVS will complete the verification run and display the following results in the verification window:

0 perfectly matched element class(es)


1 fragmented element class(es)
3 perfectly matched node class(es)
12 fragmented node class(es)

Circuits are not equal.

This verification run results in one fragmented element class and 12 fragmented node classes. It is not
necessary to resolve these fragmented classes now, but the correct procedure is described in “Resolving
a Fragmented Class” on page 925.

; Now create another verification setup using the following input files and parameters. Save your setup
file as ex2.vdb (or use the setup file supplied with LVS).

ƒ On the File tab, select C:\install_dir\Samples\LVS\ex1_2.spc as the layout netlist file and
C:\install_dir\Samples\LVS\ex2_1.spc as the schematic netlist file. Check the Output file option
and name the output file C:\install_dir\Samples\LVS\ex2.out.
ƒ On the Options tab, check the following options:
Consider MOSFET bulk nodes (substrate) during iteration matching

Consider resistors as polarized elements

Consider capacitors as polarized elements

Consider inductors as polarized elements

ƒ On the Device Parameters tab, check the following options:

Resistance, capacitance, and inductance values. Then enter a Maximum element-value


tolerance of 5.000.

Areas (in B, D, J and Q Elements). Then enter a Maximum geometric-value tolerance of


5.000.

ƒ On the Performance tab, select Normal iteration: consider fanout and element type.
ƒ On the Verbosity Level tab, check the following options for both Output file and Screen:
Show fragmented classes

Show automorph classes

Show series MOSFETs that differ in order

; Select Verification > Run (F5) or click the Run Verification ( ) button on the toolbar. LVS will
complete the verification run and display the following results in the verification window:

32 perfectly matched element class(es)


18 perfectly matched node class(es)
4 fragmented node class(es)

L-Edit 14 User Guide Section 3 916


Chapter 29: Introduction to LVS Using LVS in Batch Mode

Circuits are not equal.

; When you are finished viewing the results, close the verification window.

Creating a Verification Queue

In the following steps, you will learn how to create and run a verification queue.

; Select ex2.vdb as the active setup window.

; Select Verification > Add to Queue (F7) or click the Add to queue button ( ) on the toolbar.

; Select Verification > Verification Queue (F8) or click the Open Queue Dialog button ( ) on the
toolbar. LVS will display the Verification Queue dialog with the file ex2.vdb listed in the queue.

; Within the verification queue dialog, click the Add setup to queue button ( ) or type the shortcut
Ctrl+O. LVS will open a standard Windows file browser.

; Select the file C:\install_dir\Samples\LVS\ex1.vdb and click Open. LVS will add this setup file to the
verification queue.

; Repeat the last two steps and add file ex3_1.vdb to the queue.

; If desired, rearrange the setups in the queue, using the arrow keys or appropriate buttons ( and ) in
the Verification Queue dialog.

; To run the verification, click Run in the Verification Queue dialog, or click OK to close the dialog, then
select Verification > Start Verification Queue (F9). You can also click the Run Queue ( ) button in
the application toolbar.

LVS will run the verifications in the order listed and report the results in the Queue Status dialog. You
should see the following results (in the order you specified):

C:\Tanner\LEdit84\Samples\LVS\ex2.vdbCircuits are not equal!


C:\Tanner\LEdit84\Samples\LVS\ex1.vdbCircuits are not equal!
C:\Tanner\LEdit84\Samples\LVS\ex3_1.vdbCircuits are equal!

; Close the Verification Queue dialog, if necessary.

In the next section, you will learn how to create and run a verification batch file.

Running LVS in Batch Mode

; Select ex1.vdb as the active setup window.

; Select File > Export Batch File (Ctrl+E).

; LVS will display the Export Batch File as dialog. Select ex1.bat or type it in the File name field. Click
Save.

; Select ex2.vdb as the active setup window.

; Select File > Export Batch File (Ctrl+E). In the Export Batch File as dialog, type ex1.bat in the File
name field and click OK.

; LVS will prompt you with the dialog Batch file already exists. Click the Append To button.

L-Edit 14 User Guide Section 3 917


Chapter 29: Introduction to LVS Using LVS in Batch Mode

; Select ex3_1.vdb as the active setup window and repeat the last two steps to add this setup to the batch
file.

; Exit LVS and open a DOS window. Navigate to the LVS installation directory, then type
Samples\LVS\ex1.bat. For default installations, the command line should read:

C:\Tanner\LEdit84> Samples\LVS\ex1.bat

LVS will run the verifications listed in the batch file and write the results to the specified output file(s).
You can view the results using the LVS text window or any other text editor.

L-Edit 14 User Guide Section 3 918


30 LVS Output Tutorial
3

Introduction

LVS generates certain output upon execution, depending on which options are checked on the “Setup—
Output” (page 887) tab in the setup window. In the following examples, the .vdb files are opened in
LVS and run with a single invocation. If run in batch mode, user interactions, defaults, and generated
output may differ.

All files used in this chapter are available in the \install_dir\Samples\LVS\ directory.

Parsing Information

LVS first reports parsing information about both of the netlists.

Following is an example of the output ex1.out, generated by LVS for ex1.vdb. The options for Show
Fragmented Classes, Show Automorph Classes, and Show Detailed Processing Information are
checked in both Output file and Screen columns, so all information written to the output file is also
written to the verification window.

Engine configuration report:


Consider Bulk nodes.................................ON
Consider Resistors as polarized elements............ON
Consider Capacitors as polarized elements...........ON
Consider Inductors as polarized elements............ON
Optimize shorted & parallel R, C, MOSFETs;
series R and C............................OFF
Replace series MOSFETs.............................OFF
Fast Iteration.....................................OFF
Parameter comparison threshold for CAPACITORS.......5%
Parameter comparison threshold for INDUCTORS........5%
Parameter comparison threshold for RESISTORS........5%

Parsing file ex1_1.spc...


Including file MODELS.SPC
Flattening network...
Parsing file ex1_2.spc...
Including file MODELS.SPC
Flattening network...

Device ex1_1.spc ex1_2.spc Status


------- ----------- ----------- ---------
C 4 4
M_NSS 20 20
M_PSS 26 24 MISMATCH (2)
Total element 50 48 MISMATCH (2)
Total nodes 20 20

L-Edit 14 User Guide Section 3 919


Chapter 30: LVS Output Tutorial Parameter Matching Example

LVS begins the parsing information by stating which file was read and listing any files included in this
file. After the network is flattened, the program reports the kinds of elements found and the number of
nodes found. The program concatenates the device type with the model name to make up the element
type, as in M_NSS. This helps distinguish between elements of the same device type that use different
models.

If the program detects a numerical difference between the number of different elements and the number
of nodes between the two files, it poses a question identifying the problem and requiring instructions to
continue or exit. If the Continue processing when mismatch in node or element count found option
on the “Setup—Performance” (page 897) tab in the setup window is checked, or if LVS is invoked
from batch mode, the program does not stop at this point and continues on to the iteration.

Parameter Matching Example

Following is an example of the output ex2.out, generated by LVS for ex2.vdb. In this example, LVS is
instructed to use parameter matching (Resistance, Capacitance and Inductance values for R, C, and
L Elements and Lengths and Widths for MOSFET Elements on the “Setup—Device Parameters”
(page 889) tab), in addition to the topological characteristics. (See “Parameter Matching” on page 935
for more information on this method.)

Iterating...
5% done
10% done
...
25% done

Warning: Parametric mismatch between elements


ex1_2.spc: M346:L=2 W=5 (Not all decimals shown)
ex2_1.spc: M6(XSUBA/X34):L=2 W=6 (Not all decimals shown)

Warning: Parametric mismatch between elements


ex1_2.spc: M6:L=2 W=5 (Not all decimals shown)
ex2_1.spc: M6(XSUBA/X33):L=2 W=6 (Not all decimals shown)

50% done
...

In this example, during the iteration matching process LVS encountered elements that are topologically
matched but are parametrically different. LVS reports this as a warning, but it does not affect the
iteration process.

Automorph Class Example

When LVS finishes iteration, it reports any automorphism or fragmentation that occurs. Automorph
classes are listed first.

Following is an example of the output ex3.out, generated by LVS for ex3_1.vdb.

**************** REPORTING AUTOMORPHISM **************

L-Edit 14 User Guide Section 3 920


Chapter 30: LVS Output Tutorial Automorph Class Example

Report of elements:
*******************
Automorph class of elements
Ex3_1.spc M1(XSUBA/X34)_2fanout: BULK = 41D/S ( 3, 7) G = 7
Ex3_1.spc M1(XSUBA/X34)_1fanout: BULK = 41D/S ( 3, 7) G = 7
Ex3_2.spc M350 fanout: BULK = 41 D/S ( 3, 7) G = 7
Ex3_2.spc M341 fanout: BULK = 41 D/S ( 3, 7) G = 7
---------------------------------------------------
Automorph class of elements
...
...
...
---------------------------------------------------
Automorph class of elements
Ex3_1.spc: 4 element(s)
Ex3_2.spc: 4 element(s)
Ex3_1.spc C1(XSUBA/X34)_2 fanout: POS/NEG ( 35, 41)
Ex3_1.spc C1(XSUBA/X34)_1 fanout: POS/NEG ( 35, 41)
Ex3_1.spc C1(XSUBA/X33)_2 fanout: POS/NEG ( 35, 41)
Ex3_1.spc C1(XSUBA/X33)_1 fanout: POS/NEG ( 35, 41)
Ex3_2.spc C1_4 fanout: POS/NEG ( 35, 41)
Ex3_2.spc C1_3 fanout: POS/NEG ( 35, 41)
Ex3_2.spc C1_2 fanout: POS/NEG ( 35, 41)
Ex3_2.spc C1_1 fanout: POS/NEG ( 35, 41)
---------------------------------------------------

****************** ITERATION SUMMARY ******************

32 perfectly matched element class(es)


7 automorph element class(es)
20 perfectly matched node class(es)

Each element is listed on a separate line. For each element, the netlist file of origin is listed first
(Ex3_1.spc) followed by the unique name of the element (M1(XSUBA/X34)_2). Hierarchical
information is provided within the parentheses as well as with the appended number at the end.
Whenever LVS encounters a line such as M1 N39 N23 N25 VDD PSS L=2 W=5 M=2 (line 14 of file
Ex3_1.spc), the multiplier M=2 causes LVS to create several identical copies of an element. In this
case, two copies are made. To distinguish between them, LVS appends a number at the end of each
constructed element name.

The fanout tells what the “electrical” fanout of each terminal is. This describes the number of elements
each terminal of the element is connected to, not counting the one obvious connection to itself. For
example, element M1(XSUBA/X34)_2 has 41 elements connected to its bulk terminal, three elements to
either its drain or source terminal, seven elements to the other of drain and source, and seven elements
to its gate terminal. (LVS cannot distinguish between source and drain for FET transistors since there is
no topological distinction between them.) All elements within a single automorph class have exactly the
same fanout.

Since the Detailed Trial Matching to resolve Automorph Classes option was not checked in this
example (see “Detailed Trial Matching” on page 934), an alert box appears asking if LVS should use
detailed trial matching to try and match the elements and nodes of the automorph classes. For the file
ex3_1.vdb, detailed trial matching results in the conclusion that the circuits are equal. The output from
detailed trial matching for this example is discussed on page 3-922.

During detailed trial matching, LVS attempts to pair up the members of automorph classes. In most
cases, this resolves the automorphism and the circuits are found equal. Occasionally the trial matching
results in fragmentation; however, in the case of attempting to resolve an automorph class, it does not

L-Edit 14 User Guide Section 3 921


Chapter 30: LVS Output Tutorial Automorph Class Example

mean the two circuits are different. It only means that the particular trial matches did not resolve the
particular automorph class.

Resolving Fragmentation of an Automorph Class

When detailed trial matching causes fragmentation of an automorph class, there are usually two reasons
for this result:

ƒ The trial-matching algorithm is not able to solve the problem. In this case you should provide a
prematch file for sets of nodes and elements, giving LVS a “head start” on matching elements. (See
“Preiteration Matching” on page 934 for more information on prematch files.)
ƒ There is, in fact, a difference between the two files being compared.

In either case, the way to move towards a solution at this point is to use a prematch file. Rerun LVS with
the Show Detailed Processing Information option on the “Setup—Output” (page 887) tab in the
setup window checked. This option provides details about the various nodes and elements the detailed
trial matching procedure matches. In most cases the last matched pair of elements or nodes causes the
fragmentation. You will need to look back in your output and find a different match in the automorph
class from which this last pair comes.

For example, if the last matched pair before fragmentation was:

Matched Elements C1(XSUBA/X34)_1 and C1_1

it means that LVS attempted to match element C1(XSUBA/X34)_1 with element C1_1, and the match
failed. Therefore, you should attempt to match a different element with C1(XSUBA/X34)_1, and a
possible line in your prematch file would be:

C1(XSUBA/X34)_1 C1_4

The order in which elements and nodes are specified in a prematch file has to reflect the order in which
the respective netlist files are specified on the command line.

With this line in the prematch file, rerun LVS again. Include the prematch file on the “Setup—Input”
(page 886) tab in the setup window.

If the problem of fragmentation recurs, then repeat the process above and add more lines of information
to the prematch file.

If the two files being compared are equal, a few lines in the prematch file are all that is needed. If there
is a discrepancy between the two input files, you will need to continue adding information to the
prematch file until you are able to determine what the discrepancy is, using the methods of reasoning
outlined above.

For the file ex3_1.vdb, detailed trial matching results in the following output:

....

*************** POST ITERATION MATCHING *******************


Doing detailed trial matching... Step 1 (Match by parameters)

********************* ITERATING ***************************


Doing detailed trial matching... Step 2 (Random matches)
Matched Elements C1(XSUBA/X34)_2 and C1_4
Matched Elements C1(XSUBA/X33)_1 and C1_1
Matched Elements C1(XSUBA/X34)_1 and C1_3

L-Edit 14 User Guide Section 3 922


Chapter 30: LVS Output Tutorial Automorph Class Example

90% done
Matched Elements M10(XSUBA/X34)_1 and M3410
Matched Elements M10(XSUBA/X33)_1 and M10
Matched Elements M19(XSUBA/X33)_1 and M19
95% done
Matched Elements M1(XSUBA/X33)_2 and M3
Matched Elements M19(XSUBA/X34)_1 and M3419
Matched Elements M1(XSUBA/X34)_2 and M350
100% done

********************* FINAL RESULT ************************


Circuits are equal.

Besides providing the information that the circuits are equal, the output also gives information about
what elements were matched during the trial matching process. This information can be turned into a
prematch file to speed up the iteration process next time LVS is run. The above output is listed in the
prematch file as:

M1(XSUBA/X34)_2 M350
M19(XSUBA/X34)_1 M3419
M1(XSUBA/X33)_2 M3

M19(XSUBA/X33)_1 M19
M10(XSUBA/X33)_1 M10
M10(XSUBA/X34)_1 M3410

C1(XSUBA/X33)_1 C1_1
C1(XSUBA/X34)_1 C1_3
C1(XSUBA/X34)_2 C1_4

The name of the prematch file is ex3_1.pre, and it is entered in the Prematch File field on the “Setup—
Input” (page 886) tab in the setup window in ex3_2.vdb. Following is the output generated by LVS for
ex3_2.vdb.

....
....
Processing file C:\Tanner\LEdit83\Samples\LVS\Ex3_1.pre of matched
elements/nodes
Matched Elements M1(XSUBA/X34)_2 and M350
Matched Elements M19(XSUBA/X34)_1 and M3419
Matched Elements M1(XSUBA/X33)_2 and M3
Matched Elements M19(XSUBA/X33)_1 and M19
Matched Elements M10(XSUBA/X33)_1 and M10
Matched Elements M10(XSUBA/X34)_1 and M3410
Matched Elements C1(XSUBA/X33)_1 and C1_1
Matched Elements C1(XSUBA/X34)_1 and C1_3
Matched Elements C1(XSUBA/X34)_2 and C1_4

*********************** ITERATING ************************


Iterating...
....
....

**************** REPORTING AUTOMORPHISM ******************


Report of elements:
*******************
Automorph class of elements
Ex3_1.spc C1(XSUBA/X33)_2 fanout: POS/NEG ( 35, 41)
Ex3_2.spc C1_2 fanout: POS/NEG ( 35, 41)
---------------------------------------------------

L-Edit 14 User Guide Section 3 923


Chapter 30: LVS Output Tutorial Fragmented Class Example

**************** ITERATION SUMMARY ***********************


47 perfectly matched element class(es)
1 automorphed element class(es)
20 perfectly matched node class(es)

************** POST ITERATION MATCHING *******************


Doing detailed trial matching... Step 1 (Match by parameters)

********************* ITERATING **************************


Doing detailed trial matching... Step 2 (Random matches)
Matched Elements C1(XSUBA/X33)_2 and C1_2

********************* FINAL RESULT ***********************


Circuits are equal.

LVS matched nine out of ten of the original automorph elements before the iteration process began. In
the file ex3_3.vdb, the last element is added to the prematch file ex3_2.pre. When LVS is run, all
automorph classes are matched.

In this example only automorph classes of elements have been shown. Automorph classes of nodes are
addressed in a similar fashion.

Fragmented Class Example

Fragmentation can occur either during the regular iterative process or during the detailed trial matching
procedure in the case of previous automorphism. Following is an example of the output (ex4.out)
generated by LVS for ex4.vdb, including fragmented classes.

...
...
...
45% done
50% done
55% done

*************** REPORTING FRAGMENTATION *****************

Report of elements:
*******************
Fragmented class of elements
Ex1_1.spc: 6 element(s)
Ex1_2.spc: 4 element(s)
...
...
...
----------------------------------------------------------

Report of nodes:
Report of nodes:
****************
Fragmented class of nodes
Ex1_2.spc16 connected to1 M_NSS_D/S2 M_NSS_G
4 M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes

L-Edit 14 User Guide Section 3 924


Chapter 30: LVS Output Tutorial Fragmented Class Example

Ex1_2.spc3 connected to3 M_NSS_D/S1 M_NSS_G


3 M_PSS_D/S1 M_PSS_G
Ex1_2.spc15 connected to3 M_NSS_D/S1 M_NSS_G
3 M_PSS_D/S1 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc7 connected to6 M_NSS_G6 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc5 connected to1 M_NSS_D/S2 M_NSS_G
2 M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc4 connected to4 C_POS/NEG24 M_PSS_BULK
14 M_PSS_D/S
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spc5 connected to1 M_NSS_D/S2 M_NSS_G 5
M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spcN25(XSUBA/X33/)connected to3 M_NSS_D/S
1 M_NSS_G4 M_PSS_D/S1 M_PSS_G
Ex1_1.spcN25(XSUBA/X34/)connected to3 M_NSS_D/S
1 M_NSS_G4 M_PSS_D/S1 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spc1 connected to6 M_NSS_G8 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spc8 connected to1 M_NSS_D/S2 M_NSS_G 3
M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spcVDD connected to4 C_POS/NEG26 M_PSS_BULK
14 M_PSS_D/S
----------------------------------------------------------
0 perfectly matched element class(es)
1 fragmented element class(es)
4 perfectly matched node class(es)
10 fragmented node class(es)

Circuits are not equal.


****************

Fragmented element classes are listed first. In this example there are no fragmented element classes.
Node classes are listed thereafter. The first class shows node 16 from file ex1_2.spc. The node is
connected to one drain/source terminal on MOS transistors of type (model) NSS: two gate terminals of
the same kind of transistor and four drain/source terminals on MOS transistors of type (model) PSS,
and, finally, to four gate terminals of the same kind.

Resolving a Fragmented Class

If your design uses capacitors, resistors, or inductors, make sure that you treat them consistently either
as polarized or nonpolarized devices. If the polarization of resistors is important, make sure you check
the Consider Resistors as Polarized Elements option on the “Setup—Device Parameters” (page
889) tab in the setup window. If this option is not enabled, some devices may have the positive and
negative terminals switched, causing fragmentation.

L-Edit 14 User Guide Section 3 925


Chapter 30: LVS Output Tutorial Fragmented Class Example

If your design is fully digital and you have not avoided permuted inputs to gates during layout and
schematic design, fragmentation will result. LVS compares elements at a transistor level, and cannot
interpret the design at the gate level. Permuted inputs to gates are a common cause of unnecessary
fragmentation in digital designs. The Replace Series MOSFETs option on the “Setup—Device
Parameters” (page 889) tab in the setup window triggers the replacement of series-chain transistors,
such as the series of three n-transistors in a three-input NAND gate. In this case, the three n-transistors
are replaced during the iteration process with an imaginary part with three permutable input terminals,
representing the A, B, and C terminals of the gate. Since the transistors are now replaced, any
fragmentation caused by permuted inputs to gates is eliminated. If your design contains both digital and
analog parts, the digital parts need to be separated and compared separately in order to use this function.
Otherwise, the replacement routine also transforms series chain transistors in the analog part of your
design.

If your circuit files represent a typical ASIC design situation, you may have represented many parallel
MOSFETs in your layout with a single MOSFET in your schematic, with an equivalent width equal to
the sum of the widths of your layout MOSFETs. You may also have represented single capacitors and
resistors in your schematic with multiple devices in your layout. If either of these cases are applicable, it
is worth enabling the Optimize Network option on the “Setup—Device Parameters” (page 889) tab in
the setup window to optimize the networks before the iteration process begins.

Following is an example of the output generated by LVS for ex4.vdb. The output demonstrates the
report of nodes in the Fragmentation section.

Report of nodes:
****************
Fragmented class of nodes
Ex1_2.spc16 connected to1 M_NSS_D/S 2 M_NSS_G
4 M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc3 connected to3 M_NSS_D/S1 M_NSS_G
3 M_PSS_D/S1 M_PSS_G
Ex1_2.spc15 connected to3 M_NSS_D/S1 M_NSS_G
3 M_PSS_D/S1 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc7 connected to6 M_NSS_G6 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc5 connected to1 M_NSS_D/S2 M_NSS_G
2 M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc4 connected to4 C_POS/NEG24 M_PSS_BULK
14 M_PSS_D/S
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spc5 connected to1 M_NSS_D/S2 M_NSS_G
5 M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spcN25(XSUBA/X33/)connected to3 M_NSS_D/S
1 M_NSS_G 4 M_PSS_D/S1 M_PSS_G
Ex1_1.spcN25(XSUBA/X34/)connected to3 M_NSS_D/S
1 M_NSS_G4 M_PSS_D/S1 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spc1 connected to6 M_NSSG 8 M_PSS_G
----------------------------------------------------------

L-Edit 14 User Guide Section 3 926


Chapter 30: LVS Output Tutorial Fragmented Class Example

Fragmented class of nodes


Ex1_1.spc8 connected to1 M_NSS_D/S2 M_NSS_G 3
M_PSS_D/S4 M_PSS_G
----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spcVDD connected to4 C_POS/NEG26 M_PSS_BULK
14 M_PSS_D/S
----------------------------------------------------------
0 perfectly matched element class(es)
1 fragmented element class(es)
4 perfectly matched node class(es)
10 fragmented node class(es)

Circuits are not equal.

From the output we know that there is a discrepancy in the number of elements between the two files.
File ex1_1.spc has two more M_PSS elements than ex1_2.spc. This fact is reflected in the following
two classes:

----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spc VDD connected to 4 C_POS/NEG
26 M_PSS_BULK 14 M_PSS_D/S
----------------------------------------------------------
----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc 4 connected to 4 C_POS/NEG
24 M_PSS_BULK 14 M_PSS_D/S
----------------------------------------------------------

It is reasonable at this point to assume that node 4 and node VDD are supposed to be matched.

The key to finding the difference between the two files lies in concentrating on the differences in the
connectivity between the nodes in the fragmented classes. Concentrating on two particular classes, one
from each file, will quickly lead to the root of the problem:

----------------------------------------------------------
Fragmented class of nodes
Ex1_2.spc15 connected to3 M_NSS_D/S1 M_NSS_G
3 M_PSS_D/S1 M_PSS_G
Ex1_2.spc3 connected to3 M_NSS_D/S1 M_NSS_G
3 M_PSS_D/S1 M_PSS_G
----------------------------------------------------------

and

----------------------------------------------------------
Fragmented class of nodes
Ex1_1.spcN25(XSUBA/X34)connected to3 M_NSS_D/S
1 M_NSS_G4 M_PSS_D/S1 M_PSS_G
Ex1_1.spcN25(XSUBA/X33)connected to3 M_NSS_D/S
1 M_NSS_G4 M_PSS_D/S1 M_PSS_G
----------------------------------------------------------

Node N25 in subcircuit XSUBA in file ex1_1.spc in two cases has one more connection to a
drain-source terminal of a p-transistor than the potential match in the second file, ex1_2.spc. Looking
at the nodes in their respective netlist files (skipping all but drain-source connections to p-transistors)
gives:

L-Edit 14 User Guide Section 3 927


Chapter 30: LVS Output Tutorial Fragmented Class Example

ex1_1.spc:
M1 N39 N23 N25 VDD PSS L=2 W=5 M=2
M11 2 CLK N25 VDD PSS L=2 W=5 M=2
M4 N39 N25 N23 VDD PSS L=2 W=5 M=1

ex1_2.spc:
M1 1 2 3 4 PSS L=2 W=5
M3 1 2 3 4 PSS L=2 W=5
M11 5 7 3 4 PSS L=2 W=5
M4 1 3 2 4 PSS L=2 W=5

We are looking at only half the cases. From the second file, ex1_2.spc, we are only concentrating on
node 3. Similar output is generated for node 15. Looking back at the fragmented classes, we see that
node 7 of M11, a potential candidate for an error, has six connections to p-transistors. The potential
equivalent node in file ex1_1.spc, node 1 (node 1 gets mapped into the CLK node through the
hierarchy), has eight connections to p-transistors. Therefore, it is safe to assume that either M11 of file
ex1_2.spc needs to be duplicated along with the equivalent transistor for the node 15 case, M3411, or
that the multiplier M=2 of M11 in file ex1_1.spc has to be replaced with M=1. Doing one or the other
and rerunning LVS will get through the iteration process to the point of automorphism. (See
“Automorph Class Example” on page 920.)

Often there is more than one problem in a fragmented class. Since fragmentation problems tend to hide
each other, the fastest approach is to fix the identified problem and then rerun LVS. In the previous
example, only one problem caused the fragmentation.

Using Device Parameters to Resolve Fragmented Classes

When LVS reports fragmented classes, it will group together elements or nodes that are connected to
similarly sized devices. This grouping is often helpful in focusing attention to differences between the
two netlists. For example, in the following large netlist, two nodes were inadvertently shorted into a
single node. The output report contains:

Fragmented class of nodes


cs205.spc: 9 nodes
cs205.cir: 8 nodes

cs205.spc 5363 connected to 2 M_ne2_D/S 2 M_pe2_D/S


***** (cs205.spc: 1; cs205.cir: 0) *****

cs205.spc 2884 connected to 2 M_ne2_D/S 2 M_pe2_D/S


cs205.spc 2663 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.spc 3013 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.spc 3588 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.spc 2443 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.spc 2237 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.spc 3346 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.spc 2121 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 418 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 352 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 461 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 483 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 398 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 540 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 377 connected to 2 M_ne2_D/S 2 M_pe2_D/S
cs205.cir 439 connected to 2 M_ne2_D/S 2 M_pe2_D/S
***** (cs205.spc: 8; cs205.cir: 8) *****

L-Edit 14 User Guide Section 3 928


Chapter 30: LVS Output Tutorial Element Description File Example

---------------------------------------------

Node 5363 in cs205.spc was singled out, because the devices that it connected to had parameters that
were different from those of the other nodes in this fragmentation class. Of course, if device parameters
are ignored, the result will be to group all these nodes into a single, undistinguished, fragmentation class
(this result is equivalent to the reporting algorithm of LVS V9 and earlier).

Element Description File Example

This example illustrates the output generated when an element description file is used during the run.
An element description file is a text file that describes specialized elements used in the design not
identified by LVS. The element description file in this example describes the specialized elements
(combs, springs, and plates) used in a resonator for a Micro Electro Mechanical System (MEMS)
design. LVS compares the elements down to the level of information provided in the element
description file. (For information on the format of this file, see “Element Description Files” on page
881.)

Following are the contents of the element description file resonator.elm.

|| d comb 1 2 3 4;
|| d plate4 1 2 3 4 5 6 7 8;
|| d fspring 1 2 3 4;

Following is an example of the output file resonator.out, generated by LVS for resonator.vdb. Notice
that LVS reports many of these elements as connected to only one pin. Catching nodes with only one
connection (floating pins) is a very important check to perform, because not connecting a pin (for
example, a bulk node to the substrate) can be fatal in a design. LVS identifies such problems before they
become costly.

Reading element definitions from file resonator.elm...


Parsing file layout_resonator.spc...
Flattening network...
Not resolving subckt fspring
Not resolving subckt comb
Not resolving subckt fspring
Not resolving subckt comb
Not resolving subckt plate4
Parsing file schematic_resonator.spc...
Flattening network...

Device layout_resonator.spc schematic_resonator.spc


--------------- --------------- --------------
fspring 2 2
plate4 1 1
comb 2 2
Total elements 5 5
Total nodes 16 16
Single-pin nodes 8 8

Nodes in file layout_resonator.spc connected to only one pin


*********************
4_e
...
20_m
*********************

L-Edit 14 User Guide Section 3 929


Chapter 30: LVS Output Tutorial Element Description File Example

Nodes in file schematic_resonator.spc connected to only one pin


*********************
N1
...
N5
*********************

********************** ITERATING **************************


Iterating...
5% done
10% done
...
...
100% done

***************** REPORTING AUTOMORPHISM ******************


Report of elements:
*******************
Automorph class of elements
layout resonator.spc XPlateInst_plate4
fanout: 1=1 2=1 3=1 4=1 5=1 6=1 7=1 8=1
schematicresonator.spc XMass5_plate4
fanout: 1=1 2=1 3=1 4=1 5=1 6=1 7=1 8=1
---------------------------------------------------

****************** ITERATION SUMMARY **********************


4 perfectly matched element class(es)
1 automorphed element class(es)
16 perfectly matched node class(es)

**************** POST ITERATION MATCHING ******************


Doing detailed trial matching... Step 1 (Match by parameters)
********************** ITERATING *************************
Doing detailed trial matching... Step 2 (Random matches)
Matched Elements XPlateInst_plate4 and XMass5_plate4

*********************** FINAL RESULT *********************


Note: Networks only compared as far down as specified in the element
description file.
Circuits are equal.

L-Edit 14 User Guide Section 3 930


31 Netlist Comparison
3

In netlist comparison, we compare two netlists to verify their supposed equivalence. The two netlists are
usually from different sources (such as an S-Edit schematic and an L-Edit layout), but they can also be
from two schematics or two layouts; generated by different design editors but represented in the same
netlist format; or two revisions of the same schematic.

In a verification run, LVS first reads in the two netlists and compiles a list of elements and a list of
nodes. It then uses an iterative process to repeatedly divide classes of elements and nodes into smaller
and smaller classes until each element and node can be uniquely identified and compared.

Flattened Netlists

Before comparing circuits, LVS performs pre-processing on each netlist to flatten hierarchical
structures and simplify the content. Each file includes only the information that LVS will use to
compare circuit descriptions. Commands, comments, and ignored devices or parameters are omitted,
and parallel or series elements are merged as specified in the top section of “Setup—Merge Devices”
(page 891). The files generated by this processing are called flattened netlists; you can save these files
by specifying filenames for Flattened Layout Netlist and Flattened Schematic Netlist in “Setup—
Output” (page 887).

Note: If Merge series MOSFETs is selected on the Merge Devices tab, the flattened netlist
will not reflect collapsed series MOSFETs. To maintain SPICE compatibility, LVS
writes the flattened netlist before merging series MOSFETs.

Multiplicity Parameters

LVS supports the multiplicity parameter M in device statements to indicate multiple parallel devices.
When a device statement includes a multiplicity parameter with M > 1, LVS calculates new device
parameters to eliminate the multiplicity factor. For a device with M=n, this is equivalent to merging n
parallel devices. LVS always replaces devices with M>1 with a single, merged device. This step is not
affected by settings on the Merge Devices tab.

For example, the following MOSFET statement indicates three identical devices in parallel:

M1 a b c d NMOS M=3 L=5 W=10

LVS replaces this statement with a single equivalent device without multiplicity:

M1 a b c d NMOS L=5 W=30

L-Edit 14 User Guide Section 3 931


Chapter 31: Netlist Comparison Netlist Comparison Basics

Netlist Comparison Basics

LVS compares elements and connections for similar characteristics, not for functionality or purpose.
Therefore, it is important that the netlists being compared have the same types of basic circuit elements.
If you compared a netlist containing Boolean logic gates and a netlist containing transistors, for
example, LVS would find them unequal because it does not construct Boolean logic gates from
transistors.

LVS processes subcircuits by flattening them, then individually comparing their constituent elements
and nodes. If the two designs resolve to the same hierarchical levels, however, you can explicitly define
higher-level subcircuits as elements for comparison in an element description file. For further
information on this technique, see “Element Description File Example” on page 929.

LVS begins by reading in the two netlists and compiling a list of elements and a list of nodes. (An
element is any type of logic or circuit component, such as a transistor, resistor, or capacitor. A node
indicates a connection: a wire and anything directly attached to it.)

LVS then sorts the elements and nodes into classes. A class is a set of elements or nodes with something
in common. For example, LVS might begin by separating the elements into different classes: a
transistor class, a resistor class, and so on. Further divisions might divide the transistor class into P
transistor and N transistor classes.

Nodes are separated in a similar manner. They might be separated into classes according to the number
of elements attached to them. Further separation might be based on the types of elements attached to the
nodes.

The process of separating elements and nodes according to topological information is called topological
matching. Topological matching groups elements and nodes by types and connectivity, rather than by
capacitance or element size, which are not used in the default matching process. Topological matching
continues until no further fracturing is possible. Ideally, each class will contain only two members at
this point, one from each netlist file. If this state is achieved, the netlists are said to be topologically
equal.

If topological equality is not achieved, there can be several explanations. For further information on
resolving topological inequality, please see:

ƒ “Fragmented Classes” on page 932


ƒ “Automorph Classes” on page 933
ƒ “Permuted Classes in Digital Designs” on page 935

Fragmented Classes

After topological matching, any class remaining with a different number of members between the two
files is called a fragmented class. Fragmented classes are almost always the result of differences
between the two netlists, indicating a design error that must be resolved.

LVS cannot resolve fragmented classes because there is not a one-to-one match between elements or
nodes in the netlists. If a fragmented class occurs, you should examine the source of the netlist files to
determine and resolve the problem.

L-Edit 14 User Guide Section 3 932


Chapter 31: Netlist Comparison Automorph Classes

Resolving Fragmented Classes

When iteration produces fragmented classes, you must examine the fragmented class members and
trace them back to their origins in the netlist sources.

If you run LVS as a stand-alone application, you must trace a class member back to its origin using the
netlist. This task is much simpler if the element or node has a meaningful name or label in the source
design. You will find it helpful to generously label the design with unique, readable names that can be
extracted to the netlist.

Understanding LVS output can also help you locate an element or node. During the comparison,
hierarchy information is appended onto elements and nodes. For example, an element named M7(X3/X2)
refers to a transistor element named M7, which resides in the subcircuit X2, which is instanced from the
subcircuit X3. See the “LVS Output Tutorial” on page 919 for more information about the LVS output
format.

If you cannot identify an element or node from its LVS-generated name, try locating the element or
node in the netlist file, which may contain additional information. For example, a netlist generated with
the option Write device coordinates (in Tools > Extract—Output) might contain a line such as:

R0 1266 1269 259.6


* R0 Plus Minus ( L B R T ) A = 9.744e2, w= 2.4

The letters L, B, R, and T in the comment line represent four numbers in the netlist file. These numbers
would indicate the left, bottom, right and top boundaries of the element recognition layer, respectively.
You can look at these coordinates on your layout to find a specific element.

You can also use the option Label all devices (in Tools > Extract—Output) to label all the devices on
the layout with ports, where the port text is the device name. Using Edit > Find, you would then be able
to find a specific device in the layout.

If the fragmented class is a node, you can count the number of pins on the nodes. This will tell you how
many elements are attached to the node.

Another way to identify fragmentation problems is to compare the fragmented classes. If one netlist
produces two fragmented element classes with a fanout of one, and the other netlist file produces one
fragmented element class with a fanout of two, these three classes may represent the same element (with
one pin left without a connection). In such a case, LVS can identify floating pins if you select the option
Detailed processing information in “Setup—Output” (page 887).

Automorph Classes

After topological matching, any unresolved class containing an even number of members, half from one
netlist and half from the other, is called an automorph class. Automorph classes are not necessarily
caused by design errors—they also occur when LVS does not have enough information to distinguish
between members of a class. You should resolve automorph classes, however, to confirm the
correspondence of the two netlists.

In some cases, members of an automorph class actually do match each other, such as when a class
contains identical elements connected in parallel. Because LVS cannot distinguish such elements using
its default iteration procedure, it may be unable to resolve them during its initial verification run. For
example, LVS would be unable to distinguish two equivalent resistors connected in parallel. In practice,
however, such identification would be unnecessary, because the resistors are identical in all respects.

L-Edit 14 User Guide Section 3 933


Chapter 31: Netlist Comparison Automorph Classes

Resolving Automorph Classes

The following sections describe three methods for resolving automorph classes:

ƒ “Preiteration Matching,” below


ƒ “Detailed Trial Matching,” below
ƒ “Parameter Matching” on page 935

Preiteration Matching

In some cases, you can prevent the formation of an automorph class by providing LVS with enough
information to distinguish between the members of a class. This technique is called preiteration
matching, because LVS performs a preliminary match of specified elements or nodes before its usual
iteration.

LVS performs preiteration matching when you instruct it to use a prematch file, which contains a list of
statements that define equivalent elements or nodes. You enter these statements in a prematch file when
you know that a given pair of members are, in fact, identical. The exact format of this file is described in
“Prematch Files” on page 881.

To specify the use of a prematch file, check the Prematch file option in “Setup—Input” (page 886) and
provide the filename and path in the adjacent field.

Note: Preiteration matching can significantly increase verification speed, especially for
large designs, but it can also prevent LVS from detecting design errors if the
prematch file contains erroneous matches. Use a prematch file only when you have
previously verified the existence of an automorph class and only when you are certain
that the specified elements or nodes are equivalent.

Detailed Trial Matching

Another means of resolving an automorph class is to instruct LVS to run detailed trial matching. In
detailed trial matching, LVS attempts to resolve automorph classes by making a “guess” match between
two class members, then resuming the iteration from that point. The program begins by matching an
automorph element pair and then iterates on the automorph node classes until no more iteration can be
done. It then matches a pair of automorph nodes and iterates on the remaining automorph elements.
LVS continues in this way, alternating between element and node classes until it can go no further.

Detailed trial matching sometimes fractures an automorph class into a fragmented class, but this result
would indicate that LVS made an incorrect trial match. In such a case, you should try one or more of the
following solutions to resolve the automorph class:

ƒ Rerun the verification with detailed trial matching enabled. LVS temporarily stores a record of its
matches in memory, but it does not save them with the VDB file. Therefore, you must make the
second attempt at detailed trial matching without closing the VDB file.
ƒ Examine the output file to discover what matching assignments LVS made. With your knowledge
of the design, you may be able to make better assignments than those made by LVS and enter them
into a prematch file.
ƒ Rerun the verification with parameter matching enabled—see “Parameter Matching,” below.

L-Edit 14 User Guide Section 3 934


Chapter 31: Netlist Comparison Permuted Classes in Digital Designs

To specify detailed trial matching, check the option Automatically perform detailed trial matching to
resolve automorph classes in “Setup—Performance” (page 897). In the event of an automorph class,
LVS will automatically proceed to detailed trial matching. If you do not check this option before the
verification run, LVS will prompt you for permission to perform detailed trial matching.

If you run the iteration in batch mode or as part of a verification queue, LVS automatically performs
detailed trial matching on all automorph classes whether you check the option or not.

Note: LVS stores element and node information internally, and the program’s matching
assignments for a particular automorph class depend on the size and location of
memory blocks available at a particular time. Therefore, results from detailed trial
matching may vary with each run.

Parameter Matching

The third method of resolving an automorph class is called parameter matching. In this method, LVS
considers additional user-specified parameters such as capacitance and element size to further
distinguish class members that would otherwise form an automorph class. For example, it may be
possible to divert automorph nodes with different capacitances into different classes, possibly resolving
the automorphism. Such a step may also convert an automorph class to a fragmented one, but you can
then take appropriate steps to correct the error that produces the fragmented class.

To specify parameter matching, select the particular parameters you want LVS to consider in the dialog
Setup—Device Parameters.

Permuted Classes in Digital Designs

If you select the option Merge Series MOSFETS, LVS can catch and identify permuted classes. A
permuted class occurs in digital designs when many digital circuits provide terminals that are
functionally equivalent, but in a different order in schematic and layout designs. In such a case, LVS
will create fragmented classes unless it considers permuted classes.

Warning: Permuted classes in an analog design could generate problems and should be avoided.

The following illustration demonstrates a permuted class. The two input NOR gate designs shown
below are functionally identical, but in topological iteration with series replacement, LVS would note
the pin permutation and report an error. The iteration invoked without series replacement would
generate four fragmented element classes, each with one element in the class.

L-Edit 14 User Guide Section 3 935


Chapter 31: Netlist Comparison LVS Algorithms and Limitations

Avoiding Permuted Classes

The best way to avoid permuted classes is to standardize pin name assignments in both schematic and
layout design. Always assign A to the top pin or the pin closest to Vdd, for example, and B to the lower
pin or the pin closest to GND. Standardized pin name assignments such as these will prevent LVS from
generating permuted classes.

LVS Algorithms and Limitations

LVS uses an algorithm that repeatedly fractures the classes in an effort to generate a unique
classification of the elements and nodes in a netlist. This methodology has several important
advantages, but it also has a few limitations.

During the topological matching process, LVS continues to fragment elements and nodes into
increasingly smaller and more identifiable classes. In an ideal comparison, the iteration process ends
when each class has exactly two members whose features are known. The following diagrams illustrate
this procedure.

L-Edit 14 User Guide Section 3 936


Chapter 31: Netlist Comparison Resolving Discrepancies

T1 T2 T3 T4

Vdd out A B M GND

T1 T2 T3 T4

Vdd out A B M GND

Notice that bulk nodes are not considered, and the two diagrams of the internal data structures are not
identical, indicating fragmented classes if LVS is run without series replacement.

There are several advantages to representing netlists in this way, including:

ƒ Isomorphism can easily be determined since each representation is unique for each circuit.
ƒ No knowledge of driving elements is required.
ƒ No knowledge of the elements and their pins is required.
ƒ There is easy recognition of shorts and opens.

One limitation to this type of netlist representation is that a highly symmetrical design will fail to
converge to fragmented classes, as in the diagram below. Exhaustive trial matching of all elements in
the second equivalent class yields no self-consistent partitions, and the data structures are not
isomorphic. The result, however, is correct.

G B 7 2

A 1

F C 6 3

E D 5 4

Resolving Discrepancies

Resolving netlist comparison discrepancies can be a challenging process if the involved circuits are
large, because a single problem might create many automorph and/or fragmented classes. Here are a
few suggestions for resolving netlist comparison problems, which are applicable to the resolution of
both automorph and fragmented classes.

L-Edit 14 User Guide Section 3 937


Chapter 31: Netlist Comparison Resolving Discrepancies

ƒ Liberally label the sources for your netlists. If you do not provide a name for a node or element,
LVS constructs one automatically, but the resulting name may be just a number, perhaps
concatenated onto another string. Even an LVS-generated identifier can be helpful, however—if
you recognize only a portion of a node or element name, you may still be able to identify the
problem.
ƒ If possible, recompare the netlists often. Sometimes identifying a single matching element or node
will provide LVS with enough information to complete the job. In other cases, a single problem
will create a very large fragmented class. Identifying one or two matching pairs from this class and
entering them into a prematch file will usually be sufficient for LVS to fracture the large
fragmented class into several smaller ones, thus giving you an easier task to perform.

L-Edit 14 User Guide Section 3 938


32 LVS Command-Line Syntax
3

Running LVS from the Command Prompt

You can invoke LVS from a DOS command prompt, specifying input and output files plus all
verification options on the command line, and achieve the same results as you would when running
LVS under Windows. Additionally, for batch-mode operation, LVS must be invoked from a DOS
command prompt.

To invoke LVS, change to the LVS directory on your hard disk, or make sure that the LVS directory is
in your path. Then enter the LVS command at the DOS prompt:

LVS [options] "netlist1" "netlist2"

netlist1 and netlist2 are the two netlist files to be compared. Specify the full path for any file not in the
current directory and enclose the entire filename and path in quotation marks.

Filenames and paths with spaces in them are legal, but depending on the DOS operating system version
you are using, arguments longer than 112 characters may not be allowed. Exceeding this length will
result in the error message “Unrecognized line argument” and termination of LVS processing.

options are command-line arguments, which provide additional operating instructions to LVS.

Each of these arguments is discussed in “Options” on page 940.

Batch-File Syntax

An LVS batch file will contain text similar to the following:

C:\Documents and Setings\username\My Documents\Tanner Tools vxx.yy\L-Edit


and LVS\LVS\Ex3>start /w../../../lvs ex3_1.spc ex3_2.spc -p ex3_1.pre -o
ex3_2.lvs -nrcl -vfar-fafr

Each verification listed in a batch file must begin with the command start /w. This command instructs
DOS to start LVS with the first set of options and wait for the program to exit before launching it again.
Without this command, only the first verification run listed in the batch file would succeed. LVS would
fail to run subsequent verifications.

Note that in contrast to the simple command-line example on the previous page, which lists options
before the netlist files, this batch-file example lists options following the netlist files. The command
File > Export Batch File uses this syntax in creating batch files, but in fact, either syntax is legal. If you
create a batch file directly in a text editor, you can list command-line options before or after the netlist
files. LVS accepts either syntax.

Running a Batch File

To run a batch file, enter the following command from a DOS command prompt:

L-Edit 14 User Guide Section 3 939


Chapter 32: LVS Command-Line Syntax Options

filename.bat

where filename.bat is the name of the batch file.

LVS will start up and run the verifications listed in the batch file. The program will create a
user-specified output file, as specified by the -o command-line option.

You can view the resulting output file using the LVS text window or any other text editor.

Note: LVS does not support launching of multiple instances. If you are running LVS under
Windows, you must first exit the program before running a batch file from the DOS
command line.

Options

Options are preceded by a dash or minus sign (-) and are separated by spaces. You can specify options
before or after the two netlist files—LVS accepts either syntax.

Where options have arguments, such as -cnnn, the option can be typed with or without a space between
the option and the argument—as -cnnn or -c nnn. LVS accepts either syntax.

Except where specifically noted, command-line options are case-insensitive.

Ignore Bulk Nodes (-b)

This option is the inverse of Consider bulk nodes (substrate) during iteration matching in the setup
window.

The -b option instructs LVS to ignore bulk (substrate) nodes on semiconductor devices during the
iteration matching process. (By default, LVS takes bulk nodes into consideration.) A typical digital
design will always have the bulk nodes of elements connected to power or ground. Ignoring the bulk
nodes while processing such files will reduce memory usage and increase processing speed.

The bulk node parameter is optional in the netlist input file. If you instruct LVS to consider bulk nodes
but all of the bulk nodes are not present in the netlists, the iteration process will result in fragmentation.

Consider Parameters (-cnnnn)

The -cnnnn option tells LVS what parametric information to consider during iteration matching and
trial matching. nnnn is a series of single-digit integers from the following list. This option corresponds
to the following options in the setup window (see “Setup—Device Parameters” (page 889).

1 Consider resistance, capacitance, and inductance for R, C, and L


elements.
2 Consider L and W for MOSFETs.
3 Consider AS, AD, PD and PS for MOSFETs.
4 Consider areas of B, D, J, and Q elements.

L-Edit 14 User Guide Section 3 940


Chapter 32: LVS Command-Line Syntax Options

5 Consider Z0 for T elements.


6 Consider TD, F, and NL for T elements.
7 Consider NRD, NRS, NRG, and NRB for MOSFETs.

For example, to consider resistance, capacitance and inductance; L and W; and NRD, NRS, NRG, and
NRB, use -c127.

Maximum Value Difference (-dv n)

This option corresponds to Maximum element-value tolerance in the setup window (see “Setup—
Device Parameters” (page 889).

The -dvn option, where n is a percent value between 0 and 100, defines the maximum amount two
parameter values may differ and still compare as equal. This value is often referred to as the slew rate.
The number is expressed as a percentage of the larger parametric value. The default is 5% (-dv5).
Noninteger values are permitted (for example, -dv4.5). This option takes effect only when the -c127
option is used.

For example, if element1 had a capacitance of 15.5 fF and element2 had a capacitance of 16.1 fF, they
would be considered equivalent with -dv4, but not with -dv3.

See also “Consider Parameters (-cnnnn)” on page 940.

Maximum Geometrical Difference (-dg n)

This option corresponds to Maximum geometric-value tolerance in the setup window (see “Setup—
Device Parameters” (page 889)).

The -dgn option works in exactly the same manner as -dvn, except that it operates on geometrical
comparisons, such as L and W for MOSFETs. The default value is 5% (-dg5). This option has an effect
only when the -c3456 option is used.

See also “Consider Parameters (-cnnnn)” on page 940.

Element Description File (-e "file")

This option corresponds to Element description file in the setup window (see “Setup—Input” (page
886).

The -e"file" option specifies the location of the element description file named file. Specify the full path
if needed, and enclose the entire filename and path in quotation marks. LVS recognizes standard SPICE
elements such as resistors, inductors, capacitors. If you use a nonstandard element, however, you will
need to define it in an element description file and use this option to instruct LVS to read in the file. The
netlist files can include elements described in the element description file by using them as a subcircuit
element.

Output File Display Options (-f[fapr])

These options control the amount of information included in the output file. They correspond to the
Display Options: Output file checkboxes in the setup window; see “Setup—Output” (page 887).

L-Edit 14 User Guide Section 3 941


Chapter 32: LVS Command-Line Syntax Options

The -f[fapr] option instructs LVS to write processing information to the output file. Fragmented classes,
permuted classes, automorph classes, and detailed processing information can be saved using this
option. The flags f, a, p, and r may be included in any combination, as follows.

f Show fragmented classes.


a Show automorph classes.
p Show permuted classes.
r Show detailed processing information:
ƒ Shows single-connection nodes.
ƒ If a prematch file is used (-p option), writes the prematched
elements to the output file, as well as those elements that the
program attempts to postmatch. This is useful for troubleshooting
netlists returned as not identical due to fragmentation after
automorphism or permutability.
ƒ If an element description file is used (-e option), lists subcircuits
that will not be flattened (i.e., those designated as special
elements).
ƒ Shows a summary of merged series or parallel devices. Logs
deletions of shorted and disconnected devices.
ƒ Lists parasitic devices that were removed or shorted.

Granularity (-%g=n)

The -%g=n option controls the granularity of the percentages displayed while LVS is iterating. The
default is g = 5; LVS will report its progress to the screen in increments of 5%, based on the total
number of nodes and how many it has already processed. Setting g = 0 turns off the reporting.

Note: This option can only be set on the command line and will only affect the completion
percentage reported to the output file. Because LVS does not display the verification
window when run in batch mode, use of this option is inappropriate for that mode.

Flattened Schematic Netlist (-h "file")

This option corresponds to Flattened Schematic Netlist option in “Setup—Output” (page 887). The -h
“file” option writes a flattened version of the schematic netlist to a separate file named file. The
flattened netlist includes only the information that LVS will use to compare circuit descriptions.
Commands, comments, and ignored devices or parameters are omitted, and parallel or series elements
are merged as specified in the top portion of “Setup—Merge Devices” (page 891).

Note: If Merge series MOSFETs is selected on the Merge Devices tab, the flattened netlist
will not reflect collapsed series MOSFETs. To maintain SPICE compatibility, LVS
writes the flattened netlist before merging series MOSFETs.

L-Edit 14 User Guide Section 3 942


Chapter 32: LVS Command-Line Syntax Options

Fast Iteration (-i)

This option corresponds to Fast iteration: consider fanout only in the setup window; see “Setup—
Performance” (page 897).

The -i option instructs LVS to perform a fast iteration. By default LVS considers fanout and element
types when performing topological iteration, but specifying -i instructs LVS to consider only fanout
during this process.

Specifying -i increases the speed of the iteration process preparation, where LVS forms the initial
element and node classes. When performing a single verification, LVS would normally prompt the user
for permission to continue iteration on detection of a mismatch in the element or node count at this
point. In batch mode, however, LVS would always continue iteration even on an element or node count
mismatch. Therefore, specifying -i is inappropriate for batch-mode operation.

Delete Disconnected Devices (-k)

This option corresponds to Delete Disconnected Devices in the setup window; see “Setup—Merge
Devices” (page 891).

The -k option instructs LVS to delete disconnected devices, which are defined as follows:

MOSFETs A MOSFET is considered disconnected if both of the following


conditions are true:
ƒ The gate terminal is not connected to any other device, and
ƒ At least one source/drain terminal is not connected to any other
device.
Other device types All other device types are considered disconnected if at least one
terminal is not connected to any other device.

List Elements and Nodes (-l "file")

This option corresponds to Node and element list in the setup window (see “Setup—Input” (page
886).

The -l option instructs LVS to list the nodes and elements into a file of the specified name. Specify the
full path if you wish to create this file in a directory other than the current directory.

Warning: This option will typically create a very large output file if the input circuits are even of moderate
complexity.

Merge Devices (-mdevice {ALL | model_list})

This set of options corresponds to the top portion of the Setup—Merge Devices dialog; see “Setup—
Merge Devices” (page 891).

The -m option instructs LVS to merge series or parallel devices of the same model into equivalent single
devices. You can specify the models that LVS will consider for merge operations, or you can apply the
merge option to all models of the specified device type.

L-Edit 14 User Guide Section 3 943


Chapter 32: LVS Command-Line Syntax Options

For example,

-mr ALL

instructs LVS to merge instances of the same resistor model and occur in parallel or in series.

The option:

-mm /M_n1//M_p1/

instructs LVS to merge parallel n1 MOSFETs and to merge parallel p1 MOSFETs. In this case, only
MOSFETs of the n1 or p1 models can be merged; LVS leaves other MOSFET models in their original
configuration.

Each -m option corresponds to exactly one device type. To set multiple merge options, you must enter
the -m option for each relevant device type. For example:

-mr ALL -mc /C_cap1/ -md ALL ...

Arguments for the -m option are defined in the following table:

device Device type for which you are specifying the merge option. Each
device type is represented by its letter abbreviation:
ƒ r — resistors (parallel and series)
ƒ l — inductors (parallel and series)
ƒ c — capacitors (parallel and series)
ƒ b — GaAsFETs (parallel)
ƒ d — Diodes (parallel)
ƒ j — JFETs (parallel)
ƒ m — MOSFETs (parallel)
ƒ q — BJTs (parallel)
ƒ z — MESFETs (parallel)

ALL Instructs LVS to merge devices that are instances of the same model
when they occur in parallel. For r, l, and c device types, LVS also
merges series devices of the same model.
model_list List of models that can be considered for merge operations. The name
of each model must be prefixed with the key letter of the device type,
followed by an underscore. Type a slash (/) at the beginning and end
of each model name. For example,

-md /d_d1//d_d2//d_d3/

specifies diode models d1, d2, and d3.

Merging Nonpolarized Devices

LVS can treat r, l, and c devices as either polarized or nonpolarized elements, as specified by the -n
option on the command line. If -n (nonpolarized treatment of r, l, and c elements) is specified, a circuit
may contain devices that can be merged in more than one way. Consider the following example:

L-Edit 14 User Guide Section 3 944


Chapter 32: LVS Command-Line Syntax Options

C1 A B C=30pF
C2 B A C=30pF
R1 A GND 12k

It is assumed here that even if this is part of a much larger circuit node, node B has only two pins.
Merging the capacitors in series, we can replace C1 and C2 with a single capacitor C3 with an
equivalent capacitance of 15 pF:

C3 A A C=15 pF
R1 A GND 12k

Alternately, the two capacitors C1 and C2 could be considered to be in parallel, since nodes A and B are
interchangeable on a nonpolar device. In this case, merging the two parallel capacitors gives:

C3 A B C=60pF
R1 A GND 12k

Both of these are equally valid ways to merge devices. With the -n option, LVS may use two different
approaches to merge devices in the two netlists being compared. This will certainly result in
fragmentation, as the two resulting topologies are completely different. If treating elements as
nonpolarized will create ambiguous configurations, you should not use the -n option.

Nonpolarized Elements (-n[rcl])

These options correspond to the following options in “Setup—Input” (page 886):

ƒ Consider resistors as polarized elements


ƒ Consider capacitors as polarized elements
ƒ Consider inductors as polarized elements

The -n[rcl] option instructs LVS to consider resistor, capacitor, and/or inductor elements as
nonpolarized. LVS treats the two terminals of a nonpolarized element as interchangeable during the
matching process. If this option is not specified, LVS considers these elements to be polarized; that is,
the two terminals of such an element are considered topologically different during the matching
process.

The arguments r, c, and l specify which elements LVS is to consider as nonpolarized (r=capacitors,
l=inductors, and c=resistors). Specifying -n without an additional argument instructs LVS to consider
all these elements as nonpolarized; specifying -nrcl achieves the same result.

Note: In some circuits, use of the -n option may create multiple possibilities for merging
devices, leading to fragmentation. These circuits are described in “Merging
Nonpolarized Devices” on page 944.

Output file (-o"file")

This option corresponds to the Output file option in “Setup—Output” (page 887). The -o "file" option
(lowercase o required) creates a separate output file named file.

Note: In batch-mode operations, LVS does not write results to the verification window.
Therefore, an output file is required to preserve verification results.

L-Edit 14 User Guide Section 3 945


Chapter 32: LVS Command-Line Syntax Options

Prematch File (-p "file")

This option corresponds to Prematch file in the setup window (see “Setup—Input” (page 886)).

The -p"file" option instructs LVS to equate the elements and nodes listed in the prematch file named file
before beginning the iterative matching process. Specify the full path if this file will not be created in
the current directory.

The prematch file is a text file created by the user to equate certain elements and nodes before LVS
begins its processing. For further information, see “Prematch Files” on page 881.

Input SPICE Syntax (-pspice, -phspice, -hpspice)

These options correspond to the SPICE format options for Layout netlist and Schematic netlist in the
setup window; see “Setup—Input” (page 886). The default syntax mode for input files is
T-Spice/H-Spice. If either input file is in P-Spice syntax, you must specify one of the following options:

-pspice Both input files are in P-Spice format.


-phspice The layout netlist is in P-Spice format, and the schematic netlist is in
T-Spice/H-Spice format.
-hpspice The layout netlist is in T-Spice/H-Spice format, and the schematic
netlist is in P-Spice format.

Merge Series MOSFETs (-r {ALL | model_list})

The -r option corresponds to the Merge series MOSFETs option, and the [s] option corresponds to Find
series MOSFETs that differ in order. Both options are found in “Setup—Merge Devices” (page 891).

The -r[s] option allows LVS to replace series chain MOSFETs (of a particular model) with equivalent
components, which reduces the processing required. (Instances of two or more different MOSFET
models are never merged.) This feature is intended only for fully digital designs, and is not meant for
netlists representing analog designs. The inclusion of the [s] flag instructs LVS to identify functionally
equivalent groups of series MOSFETs that are ordered differently in the two netlists.

Note: Series MOSFETs that differ in order are also called permuted classes. See “Permuted
Classes in Digital Designs” on page 935 for further discussion.

Arguments for the -r[s] option are:

ALL Instructs LVS to merge series chain MOSFETs that are instances of
the same model.

L-Edit 14 User Guide Section 3 946


Chapter 32: LVS Command-Line Syntax Options

model_list List of models that can be considered for merge operations. When this
list is given, LVS only merges series MOSFETs when they are
instances of one of the listed models.

The name of each model must be prefixed with the key letter of the
device type (m), followed by an underscore. Type a slash (/) at the
beginning and end of each model name. For example,

-r /m_n1//m_n2//m_p1/

specifies MOSFET models n1, n2, or p1 for merge operations.

Remove Parasitics (-s test=value)

This option corresponds to the options in “Setup Window—Parasitics” (page 893). The -s option
specifies a criterion by which LVS can identify parasitic devices to remove or short.

Arguments for this option include:

test Choose one of the following options, which correspond to the


checkboxes in “Setup Window—Parasitics” (page 893):
ƒ rmin — For every resistor with resistance less than or equal to
the specified value, LVS removes the resistor and connects
(shorts) the two nodes that were spanned.
ƒ rmax — Removes any resistor with resistance greater than or
equal to the specified value.
ƒ cmin — Removes any capacitor with capacitance less than or
equal to the specified value.
ƒ cmax — For every capacitor with capacitance greater than or
equal to the specified value, LVS removes the capacitor and
connects (shorts) the two nodes that were spanned.
value Maximum or minimum value of the device parameter specified in
test.

For example, the options:

-srmin=10 -srmax=0.01p

instruct LVS to short and remove resistors with resistances less than 10 Ohms, and to remove capacitors
with capacitances greater than 0.01 pF. Use a separate -s option to specify each threshold value.

Flattened Layout Netlist (-t"file")

This option corresponds to Flattened Layout Netlist option in “Setup—Output” (page 887). The -t
"file" option writes the flattened version of the layout netlist to a separate file named file. The flattened
netlist includes only the information that LVS will use to compare circuit descriptions. Commands,
comments, and ignored devices or parameters are omitted, and parallel or series elements are merged as
specified in the top portion of “Setup—Merge Devices” (page 891).

L-Edit 14 User Guide Section 3 947


Chapter 32: LVS Command-Line Syntax Options

Note: If Merge series MOSFETs is selected on the Merge Devices tab, the flattened netlist
will not reflect collapsed series MOSFETs. To maintain SPICE compatibility, LVS
writes the flattened netlist before merging series MOSFETs.

Remove Device Models (-u /model1//model2//.../)

This option corresponds to the option Remove device models named: in “Setup Window—
Parasitics” (page 893). The -u option instructs LVS to remove all instances of the listed device models
from the input netlists.

Each device model name must be prefixed by the key letter for that device type, followed by an
underscore. Each device model name must also be enclosed in forward slashes (/). For example,

-u /M_n1//C_cap/

instructs LVS to remove instances of the MOSFET model n1 and of the capacitor model cap.

Screen Display Options(-v[fpar])

These options control the amount of information displayed on the screen. They correspond to the
Display Options: Screen checkboxes in the setup window; see “Setup—Output” (page 887).

The -v[fapr] option instructs LVS to display processing information on the screen. Fragmented classes,
permuted classes, automorph classes, and detailed processing information can be displayed using this
option. The flags f, a, p, and r may be included in any combination, as follows.

f Show fragmented classes.


a Show automorph classes.
p Show permuted classes.
r Show detailed processing information:
ƒ Displays single-connection nodes.
ƒ If a prematch file is used (-p option), LVS writes the prematched
elements to the screen, as well as those elements that the program
attempts to postmatch. This is useful for troubleshooting netlists
returned as not identical due to fragmentation after
automorphism or permutability.
ƒ If an element description file is used (-e option), LVS lists
subcircuits that will not be flattened (i.e., those designated as
special elements).
ƒ Displays a summary of merged series or parallel devices. Logs
deletions of shorted and disconnected devices.
ƒ Lists parasitic devices that were removed or shorted.

Note: These options instruct LVS to display processing information to the verification
window. Because LVS does not display the verification window when run in batch
mode, use of these options is inappropriate for that mode.

L-Edit 14 User Guide Section 3 948


Chapter 32: LVS Command-Line Syntax Options

Delete Shorted Devices (-x)

This option corresponds to the Delete shorted devices option in “Setup—Merge Devices” (page 891).
The -x option instructs LVS to delete shorted devices, in which all device terminals are connected
together.

Yes to All Questions (-y[12])

The -y[1] option corresponds to Continue on element/node count mismatch, while the -y[2] option
corresponds to Detailed trial matching to resolve automorph classes. Both are located in “Setup—
Performance” (page 897).

The -y option without any arguments is equivalent to -y12. This instructs LVS to answer “yes” to all
program prompts.

Short Out Device Models (-z /model1//model2//.../)

This option corresponds to the option Short out device models named: in “Setup Window—
Parasitics” (page 893). The -z option instructs LVS to short the terminals of the indicated devices, then
remove these devices from the netlist.

Each device model name must be prefixed by the key letter for that device type, followed by an
underscore. Each device model name must also be enclosed in forward slashes (/). For example,

-z /R_res//C_cap/

instructs LVS to short and remove instances of the resistor model res and of the capacitor model cap.

L-Edit 14 User Guide Section 3 949


Chapter 33: LVS Glossary

33 LVS Glossary

automorph class

A class with an even number of four or more members, half from each netlist, in which there is
insufficient information to further resolve the class. The members may be identical, but
additional information (such as parameters) may be necessary to differentiate the members.

batch file

A text file containing one or more command-line invocations of LVS and appropriate setup
information—input files and verification options—for each verification run.

class

A set of elements or nodes with something in common, such as topological or parametric


characteristics. Types of classes include automorph, fragmented, and permuted.

detailed trial matching

A process used by LVS to try to resolve automorph classes. LVS assigns a matching pair of
members and continues the iteration process from that match.

element

Any type of logic or circuit component (transistor, resistor, or capacitor).

element description file

A text file that describes specialized or custom elements which are used in the design but not
recognized by LVS.

fragmented class

A class with a different number of members from each netlist. This type of class is usually the
result of one or more design errors.

netlist

A textual description of the connectivity of a design.

node

An electrical connection between one or more ports, labels, or wires.

node and element list

A text file that contains lists of all the matching and unresolved nodes and elements in the two
netlists being compared. The lists are broken down by each LVS iteration.

parameters

Information in a netlist about each element and node in addition to topological characteristics.
For example, node capacitance and element size.

L-Edit 14 User Guide Section 3 950


Chapter 33: LVS Glossary parameter matching

parameter matching

The process of using parameters in addition to topological characteristics to differentiate


members of a class.

permuted class

A class containing series chain MOSFETs whose terminals are functionally equivalent, but in
a different order, in the designs being compared. Occurs in digital designs during the optional
replacement of series chain MOSFETs with equivalent components.

prematch file

A user-supplied text file that lists the equivalent members of an automorph class.

resolution

Classes are resolved when their members are matched (through detailed trial matching or
another process). Occurs when the members of a netlist are equivalently matched to the
members of the other netlist.

SPICE

A netlist format commonly used for circuit simulation or comparison.

slew rate

The maximum percentage by which two parameter values may differ and still compare as
equal.

topological characteristics

Information in a netlist regarding element type and connectivities of each element and node.

topological matching

The default LVS iteration process that uses topological characteristics to match elements and
nodes.

verbosity level

The amount of information displayed in the verification window during a verification run.

verification queue

A dialog that contains a list of consecutive verification runs.

verification run

The set of iterations LVS executes to compare netlists.

verification setup

Information required for an LVS verification run, including input and output files and
verification options. The information is entered in the setup dialogs and can be saved in a
verification database file.

L-Edit 14 User Guide Section 3 951


34 Introduction to Programming the
User Interface
Section 4Section 4: User-Programmable Interface

The L-Edit User-Programmable Interface (UPI) is a powerful set of tools for automating, customizing,
and extending the L-Edit commands and functions, adding enormously to its power and flexibility.

UPI uses C/C++ language macros that describe actions or sets of actions to be performed automatically.
UPI scripts are precompiled as dynamically linked libraries (DLLs) in the background and then
executed (rather than being interpreted), or they can be explicitly saved as DLLs for later distribution
and use. L-Edit example macros (which previously had to be compiled by the user) have been updated
to work correctly with the new compiler.

Macros are written using a vast set of UPI functions, variables, and data types that specify and modify
the whole range of L-Edit operations. (Refer to “UPI Functions Reference” on page 980 for descriptions
of all the UPI function calls.) Sets of macros can be loaded together or accessed individually.

Using Macros-The Basics

There are several steps to using UPI macros:

“Writing a Macro” (page 956)

Write, name and save macros as files that consists of one or more C-language macro routines.

“Loading a Macro” (page 953)

Macros are loaded via the macro interface.

“Binding Macros to Hot Keys” (page 971) and “Binding Macros to Menu Items” (page 971)

A macro can optionally be associated with a keyboard shortcut and/or a menu command.

“Running a Macro” (page 956)

Execute the macro.

L-Edit 14 User Guide Section 4 952


Chapter 34: Introduction to Programming the User Interface Loading a Macro

Loading a Macro

The Macro dialog allows you to load, edit, and compile macros. Choose Tools > Macro to open the
Macro dialog.

Macros The list of macros that have been loaded. Click on a macro to select
it.
Run Executes the macro highlighted in the Macros list.
Close Closes the Macro dialog.
Macro Files The name and complete paths of all loaded macro files. Click on a
macro file to select it.
Load Invokes the Open dialog to load a macro file and add it to the
Macro Files list.
Unload Unloads the highlighted macro file and removes the related
macros.
Edit Opens the C file in an L-Edit text editor window.
Setup Opens the Setup Application—UPI dialog for specifying the
interpreter setup parameters. See
Save as Dll Automatically compiles and saves the C language file as a DLL.
Load Files at Startup When this box is checked, macros and macro files currently loaded
are reloaded when the application is started.

L-Edit 14 User Guide Section 4 953


Chapter 34: Introduction to Programming the User Interface Loading a Macro

Clicking Load in the Macro dialog launches the Open dialog. You can load macros in two forms, as
interpreted C code (.c) which L-Edit compiles in background when you run the macro, or as an already
compiled dynamic-link library (.dll).

L-Edit 14 User Guide Section 4 954


Chapter 34: Introduction to Programming the User Interface Loading a Macro

Entering Library References

Before you run a macro, you must first set the path to any header files, libraries or include files that
macro calls. Click Setup in the Macro dialog to enter these paths, or you can choose
Setup > Application—UPI.

Search path for include Enter the complete path of directories containing any files or libraries
files and libraries referenced by macros currently loaded into L-Edit. See “UPI Include
Files” on page 956.
List of additional libraries Enter the complete path of directories containing libraries with header
to link with files that are referenced by macros currently loaded into L-Edit.
Update display When checked, L-Edit updates the display while UPI code is
executing. When unchecked (default), L-Edit does not update the
display during the execution of a macro or T-Cell generator.
Show warning dialog When checked (default), L-Edit displays warning dialog boxes in the
boxes user interface. When unchecked, L-Edit runs in quiet mode, in which
warning dialog boxes are not displayed.

Note: Batch processing must be run in quiet mode.

L-Edit 14 User Guide Section 4 955


Chapter 34: Introduction to Programming the User Interface Running a Macro

UPI Include Files


The directory <installdir>\Tanner Tools v xx.yy\upi\Include contains a number of include files
required by the L-Edit C interpreter.

The file ldata.h is a standard UPI include file that contains function prototypes of all UPI functions,
including definitions of the “Interface Functions” (page 983). The file ldata.h also contains definitions
of all the supported hot key combinations.

The file lcomp.h is an optional UPI include file that contains function prototypes and inline
documentation for a simple composition library that allows for chip assembly by relative object
placement. The LComp interface is a streamlined interface to the ldata UPI procedures that minimizes
the level of C language programming you need to use the UPI (see “LComp Functions Reference” on
page 1636.) lcomp.h includes ctype.h, malloc.h, math.h, stdarg.h, stdio.h, stdlib.h, string.h, and
time.h, which are L-Edit versions of standard C language header files. The files upistub.c and
upistub.h are required by the L-Edit C interpreter.

Running a Macro

[1] Use File > Open to open <installdir>\Tanner Tools vxx.y\L-Edit and LVS\Upi\upisampl.tdb. Note
that the default installation directory for sample files is ...\My Documents\Tanner EDA.

[2] Select Tools > Macro to open the Macro dialog.

[3] Click Setup to specify interpreter parameters (the locations of the header and log files).

[4] Click Load and select a macro file with a .c or .dll extension. For example, load the file
<installdir>\Samples\UPI\intrpted\mosfet\mosfet.c. This macro prompts the user for MOSFET
parameters and then draws the corresponding NPN MOSFET in L-Edit.

[5] Select the macro from the Macros list and click Run, or double click on the macro name in the dialog to
execute it.

[6] Click Edit to open the active file (in this example, mosfet.c) in the L-Edit text editor.

Writing a Macro

Example 1: Hello World

Here is an example of the structure and content of a simple .c UPI application called Hello, World!.

L-Edit 14 User Guide Section 4 956


Chapter 34: Introduction to Programming the User Interface Writing a Macro

The C code for Hello, World! is provided in the Examples installation directory, typically ...\My
Documents\Tanner EDA\Tanner Tools v14.0>\L-Edit and LVS\Upi\Interpreted\hworld\hello.c,
which creates the message box shown below:

You can create and edit a macro in any text editor. However, the L-Edit text editor offers the advantage
of syntax highlighting and also error marking (see “Debugging Macros” on page 959.) Select
File > New and choose Text from the File Type list then click OK to open a new text window.

Format Outline
A compiled macro file consists of two sections:

ƒ A an application module containing macro function definitions.


ƒ A call to the macro registration function, which is defined within the application module.

In general outline form, the code for a compiled UPI application has the following structure:

module <modulename> {
<include files>

<macro function 1 >


<macro function 2 >
<macro function 3 >
.
.
.

<macro registration function>


}
<call to macro registration function>

Defining the Macro Module


The first line contains the module name. The module name should be unique so that it will not replace
another module loaded at the same time. In hello.c, the module name is Hello_World_module.

To access UPI function definitions, the module definition must include the header file ldata.h. Other
required header files should also be included at the beginning of the module definition. (For information
about header files, see “UPI Include Files” on page 956.)

The module outline for Hello, World! is as follows:

module Hello_World_module {
#include “ldata.h”

<Macro function to display message box>


<Macro registration function>

}
<Call to macro registration function>

L-Edit 14 User Guide Section 4 957


Chapter 34: Introduction to Programming the User Interface Writing a Macro

Displaying a Message Box


“LDialog_MsgBox” (page 985) is a UPI function that displays a message box containing the specified
text. In this example, the macro function HelloWorldMacro invokes LDialog_MsgBox to show the
string “Hello, World!” in a message box.

void HelloMacro( void )


{
LDialog_MsgBox ( “Hello, World!” );
}

Registering the Function as a Macro


To complete a module definition, you must register the defined macro function(s) in a macro
registration function. The macro registration function for the module Hello_World_module consists of
the following code:

void hello_world_macro_register ( void )


{
LMacro_Register ( “Hello, World!”, “HelloMacro” );
}

The function hello_world_macro_register registers the function HelloWorldMacro as an available


macro. “LMacro_Register” (page 1008) registers a macro name that will be displayed in the Macros list
of the Tools > Macro dialog and associates this name with the specified function. In this example,
LMacro_Register associates the name Hello, World! in the Macro dialog with the macro function
HelloWorldMacro.

If a module includes multiple user macro functions, the macro registration function should register each
of them individually using multiple LMacro_Register function calls.

The complete code for the Hello, World! macro is shown below. Note that the last line of the macro file
calls the macro registration function.

module Hello_World_module {
#include “ldata.h”

void HelloMacro( ) {
LDialog_MsgBox ( “Hello, World!” );
}

void hello_world_macro_register ( void ){


LMacro_Register ( “Hello, World!”, “HelloMacro” );
}

}
hello_world_macro_register();

Save your code using the .c filename extension. Use this extension whenever you name a macro file that
you want L-Edit to recognize as a macro.

Example 2: Format for a Compiled (.dll) Macro

In outline form, the code for a UPI macro in DLL has the following structure:

<include files>

L-Edit 14 User Guide Section 4 958


Chapter 34: Introduction to Programming the User Interface Writing a Macro

<macro function 1 >


<macro function 2 >
<macro function 3 >
.
.
.

<UPI_Entry_Point function>

For example, the complete code for the Active-to-Metal macro in the ...samples\upi directory is as
follows:

#include “ldata.h”
void Contact_Active_Metal1_Macro ( )
{
LCell Cell_New = LCell_GetVisible ( );
LFile File_New = LCell_GetFile ( Cell_New );
LLayer Layer_Active = LLayer_Find ( File_New, “Active” );
LLayer Layer_Metal1 = LLayer_Find ( File_New, “Metal1” );
LLayer Layer_ActCnt = LLayer_Find ( File_New, “ActiveContact” );
LLayer Layer_N_Sel = LLayer_Find ( File_New, “N Select” );
LPoint Point_Cursor = LCursor_GetPosition ( );
LCoord X, Y;

X = Point_Cursor.x;
Y = Point_Cursor.y;
LBox_New ( Cell_New, Layer_ActCnt, -1 + X, -1 + Y, 1 + X, 1 + Y );
Box_New ( Cell_New, Layer_Metal1, -2 + X, -2 + Y, 2 + X, 2 + Y );
Box_New ( Cell_New, Layer_Active, -3 + X, -3 + Y, 3 + X, 3 + Y );
LBox_New ( Cell_New, Layer_N_Sel , -5 + X, -5 + Y, 5 + X,5 + Y );
}

int UPI_Entry_Point( void )


{
LMacro_BindToHotKey ( KEY_F1, “My Contact,
Active-Metal1”, “Contact_Active_Metal1_Macro” );
return 1;
}

Debugging Macros

In addition to formatting code files with color and structural indentations, if there are errors in your UPI
code L-Edit will place a marker in the margin of the text editor on each line that has an error.

L-Edit 14 User Guide Section 4 959


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

The error log shows a description of each error that includes the line number, and will jump to the error
line in the text editor when you double-click on the error in the log.

Error marker

Double-click here to
jump to line 28 in the UPI
code, which has the
error described.

A few common mistakes to avoid:

ƒ Make sure that the interpreter header file location is properly set. You set the header file location
using the Setup Application dialog—see “Entering Library References” on page 955.
ƒ Make sure the C-library functions in your code are present in the header files specified in the
Interpreter Setup dialog. If they are not present, L-Edit will not be able to interpret your code.
ƒ Make sure you have proper permissions to the directory where you create your log file.

How to compile UPI with Visual Studio 2005

[1] The first step is to set up paths for UPI in Microsoft Visual Studio 2005. Go to Tools > Options and
select VC++ Directories under Projects and Solutions.

L-Edit 14 User Guide Section 4 960


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

Change Show directories for: to Include files and press the New Line button. Then press the browse
button and browse to the DLL_Include directory of the current installation (typically C:\Program
Files\Tanner EDA\Tanner Tools vxx.y\upi\DLL_Include).

[2] Next, change Show directories for: to Library files and press the New Line button. Again, browse to
the Include directory of the current installation.

L-Edit 14 User Guide Section 4 961


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

Setting up a NON-MFC UPI macro in Microsoft Visual Studio 2005

[1] Use File > New > Project.

[2] Select project type Win32 under Visual C++, choose the template Win32 Project and type your project
name in the Name field.

L-Edit 14 User Guide Section 4 962


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[3] Click Next.

[4] Then select DLL under Application type, and press Finish.

L-Edit 14 User Guide Section 4 963


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[5] Visual Studio will create a .cpp file.

[6] Add a line to include the UPI macro function ldata.h, and add the UPI_Entry_Point function.

L-Edit 14 User Guide Section 4 964


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[7] Right-click on the Source Files entry in the Solution Explorer and select Add > New Item.

[8] Select Module-definition file (.def) and give it a name.

L-Edit 14 User Guide Section 4 965


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[9] Add an EXPORTS section to the def file with UPI_Entry_Point and the name of the UPI macro
function.

[10] Change Character Set to Use Multi-Byte Character Set in the Debug > Configuration
Properties > General property page.

L-Edit 14 User Guide Section 4 966


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[11] Change the Warning Level to Level 4 (/W4) in the Debug > Configuration
Properties > C/C++ > General property page.

[12] Set Enable Minimal Rebuild to Yes (/GM) and set Runtime Library to Multi-threaded debug (/MTd) in
the Debug > C/C++ > Code Generation property page.

L-Edit 14 User Guide Section 4 967


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[13] Add Make_DLL and Compile_AS_V2005 to Preprocessor Definitions in the


Debug > C/C++ > Preprocessor property page.

[14] Change Character Set to Use Multi-Byte Character Set in the Release > General property page.

L-Edit 14 User Guide Section 4 968


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[15] Change the Warning Level to Level 4 (/W4) and Debug Information Format to Disabled in the
Release C/C++ > General property page.

[16] Set Enable String Pooling to Yes (/GF), Runtime Library to Multi-threaded (/MT), Buffer Security
Check to No (/GS-), Enable Function-Level Linking to Yes (/Gy), and Enable Enhanced Instruction
Set to Streaming SIMD Extensions (/arch:SSE) in the Release > C/C++ > Code Generation
property page

L-Edit 14 User Guide Section 4 969


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

[17] Set Inline Function Expansion to Any Suitable (/Ob2), Enable Intrinsic Functions to Yes (/Oi), and
Favor Size or Speed to Favor Fast Code (/Ot) in the Release > C/C++ > Optimization property page.

[18] Add MAKE_DLL and COMPILE_AS_V2005 to Preprocessor Definitions in the


Release > C/C++ > Preprocessor property page.

L-Edit 14 User Guide Section 4 970


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

Binding Macros to Hot Keys

You can modify the L-Edit user interface so that you can execute your macro from a hot key (or a menu
item, see “Binding Macros to Menu Items,” below) instead of using the Macro dialog. The process is
known as binding.

You bind a macro to a hot key using “LMacro_BindToHotKey” (page 1009). This function registers the
macro and binds it to the specified hot key. All the allowed key codes are defined in ldata.h. The
binding operation in a macro will overwrite any existing key binding. To view key bindings for all
macros, use “Keyboard Customization” (page 64).

For example, the following code binds the macro “Contact, Active-Metal1” to the F1 key:

LMacro_BindToHotKey ( KEY_F1, “Contact, Active-Metal1”,


“Contact_Active_Metal1” );

Binding Macros to Menu Items

This section describes how to make your macro accessible as an L-Edit menu command. The UPI
function “LMacro_BindToMenu” (page 1010) registers the macro and binds it to a user-specified menu
item.

void LMacro_BindToMenu( char *menu, char *macro_desc, void *function);

For example, the following command will bind Contact_Active_Metal1 to the Tools menu.

LMacro_BindToMenu ( “Tools”, “My Contact, Active-Metal1”,


“Contact_Active_Metal1” );

Example 3: Layout Palette

In this section, you will learn to create a layout palette that always stays on screen. To follow this
lesson, you will need some knowledge of the Windows application programming interface (API).

Each button on this layout palette represents a user macro that creates layout geometry such as a
MOSFET, spiral, or gear.

The layout palette is called a modeless dialog because it can remain open while you perform other work
in L-Edit. You can use the Windows API to associate tool tips and bitmaps with its buttons.

To implement a layout palette, you must write a DLL with a UPI_Entry_Point() function that registers
the layout palette macro. Running that macro will make the layout palette appear on your screen.

The following procedure explains how to create a DLL that brings up a layout palette.

; Use a resource editor to create resources for the layout palette.

L-Edit 14 User Guide Section 4 971


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

; Create a UPI_Entry_Point() function that registers the layout palette macro.

; Write code for displaying and managing the layout palette.

; Write macros that will generate layout for every button in your layout palette—for example, gear.c,
mosfet.c, polarary.c, spiral.c, or spring.c.

; Compile the DLL.

L-Edit comes with source code that you can adapt for use with your own layout palette. The directory
<installdir>\Samples\UPI\dll\palette contains the complete source code required to create the layout
palette DLL.

Creating Resources
In order to display the graphic elements of a layout palette, including bitmaps, push buttons, and a
modeless dialog box, you must create these items as resources for your DLL project.

Visual C++ provides a resource editor to create and modify project resources. To access the resource
editor, select File > New from the Visual C++ menu. In the New dialog, choose the Files tab and select
Resource Script from the list of file types. Assign the script a name in the File Name field and click OK.

To add an existing resource script to your project, right-click on Source Files in the Projects file tree
and select Add file to folder from the pop-up menu. In the Insert Files into Project dialog, select the
desired resource file (*.rc) and click OK.

After you have added a resource file to your project, you can, create, import, and edit resources. To add
a new resource, change the Projects view to ResourceView and right-click on the resource script.
Select Insert to display a list of resource types:

From this dialog you can create a new resource or import an existing resource, such as a bitmap file. To
open a resource for editing, simply double-click the resource name in the Projects tree.

The resources needed to create the layout palette described in this section are provided in
<install_dir>\Samples\UPI\dll\palette\dll.rc. To load the resources, simply add dll.rc to your project
Source Files.

UPI_Entry_Point() Function
The following sample code contains the UPI_Entry_Point() function that registers the layout palette
macro. When executed, the layout palette macro will call MainFunction(), which displays the layout
palette.

L-Edit 14 User Guide Section 4 972


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

#define STRICT
#include “windows.h”
#include “ldata.h”

extern void LWindow_GetParameters(void **hInst, void **hWnd, void **hLib);


extern void MainFunction(HINSTANCE hInst, HWND hWnd, HINSTANCE hLib);

HINSTANCE hInst=NULL;
HWND hWnd=NULL;
HINSTANCE hLib=NULL;

void LayoutPalette ( void )


{
MainFunction(hInst, hWnd, hLib);
}

int UPI_Entry_Point ( void )


{
LWindow_GetParameters( (void**)&hInst, (void**)&hWnd, (void**)&hLib);
LMacro_Register ( “Layout Palette”, “LayoutPalette” );
return 1;
}

This code is provided for you in <install_dir>\Samples\UPI\dll\palette\user.c.

Displaying and Managing the Palette


Here is sample code for a file called dll.c, which is also provided in your samples directory for this
example. This code implements MainFunction, which displays and manages the layout palette.

You can copy this code and use it to create your own layout palette.

BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam
)
{
switch (message)
{
HANDLE_DLG_MSG( hDlg , WM_COMMAND , DlgOnCommand ) ;
HANDLE_DLG_MSG( hDlg , WM_INITDIALOG , OnInitDialog ) ;
}
return FALSE ;
}

void DlgOnCommand ( HWND hDlg , int iID , HWND hwndCtl , UINT uCodeNotify )
{
switch( iID )
{
case IDC_BUTTON_5:
MosfetMacro();
break;
}
}

BOOL OnInitDialog ( HWND hDlg , HWND hwndFocus , long lInitParam )


{

HBITMAP hBmp;
TOOLINFO info;
HWND hToolTip;

L-Edit 14 User Guide Section 4 973


Chapter 34: Introduction to Programming the User Interface How to compile UPI with Visual Studio 2005

hBmp = LoadBitmap(l_hLib, MAKEINTRESOURCE(IDB_BITMAP5));


SendDlgItemMessage(hDlg, IDC_BUTTON_5, BM_SETIMAGE, 0, (LPARAM)hBmp);
FreeResource(hBmp);
return TRUE ;
}

void OnDestroy ( HWND hDlg )


{
DWORD error;
if ( hDlg )
DestroyWindow( hDlg );
l_hDlg = NULL;
}

void OnClose ( HWND hDlg )


{
DWORD error;
DestroyWindow( hDlg );
l_hDlg = NULL;
}

void MainFunction(HINSTANCE hInst, HWND hWnd, HINSTANCE hLib)


{

/* Check if the resources have already been loaded */


if (!loaded) {
HRSRC hRes;

hRes = FindResource(hLib, “PaletteDialogBox”, RT_DIALOG);


hResLoad = (HRSRC )LoadResource(hLib, hRes);
hTmpl = (DLGTEMPLATE *)LockResource(hResLoad);
hDlg = CreateDialogIndirect(Null, hTmpl, NULL, DlgProc);
l_hDlg = hDlg;
UnlockResource(hResLoad);
FreeResource(hRes);
}
loaded = 1;
hDlg = l_hDlg;
ShowWindow(hDlg, SW_NORMAL);

BOOL WINAPI DllMain( HANDLE hDLL, DWORD dwReason, LPVOID lpReserved )


{
switch( dwReason ) {
case DLL_PROCESS_DETACH:
if ( l_hDlg != NULL ) {
DestroyWindow(l_hDlg);
l_hDlg = NULL;
loaded = 0;
}
break;
}
return TRUE;
}

Macro Definitions
The following sample code creates a gear using the specified parameters. You can copy this code and
adapt it for use with your own layout palette. It is provided in your samples directory as gear.c.

L-Edit 14 User Guide Section 4 974


Chapter 34: Introduction to Programming the User Interface Copy-Protecting Macro DLLs

void GearMacro ( void )


{
LPoint Polygon [ 100 ];
float Angle2, Angle3, R2, R3, Tooth_Angle;
LCoord R_Inner, R_Outer, Teeth_Count, Teeth_Width, Tooth;
LCell Cell_Draw = LCell_GetVisible ( );
LFile File_Draw = LCell_GetFile ( Cell_Draw );
LPoint Translation = LCursor_GetPosition ( );
LDialogItem Dialog_Items [ 3 ] = { { “Inner Radius”, “175” },
{ “Outer Radius”, “200” },
{ “Teeth Count “, “15 “ } };
do {
if ( !LDialog_MultiLineInputBox ( “Gear Properties”, Dialog_Items, 3 ))
return;
R_Inner = atol ( Dialog_Items [ 0 ].value );
R_Outer = atol ( Dialog_Items [ 1 ].value );
Teeth_Count = atol ( Dialog_Items [ 2 ].value );
Teeth_Width = 6.283185307 * R_Inner / ( 2 * Teeth_Count );
} while ( ( Teeth_Count < 3 ) || ( Teeth_Count > 25 )
|| ( Teeth_Width < 2 ) || ( R_Inner >= R_Outer )
|| ( R_Inner < 2 ) );
for ( Tooth = 0; Tooth < Teeth_Count; Tooth++ ) {
Tooth_Angle = 6.283185307 * Tooth / Teeth_Count;
R2 = sqrt ( R_Outer * R_Outer + Teeth_Width * Teeth_Width / 4.0 );
R3 = sqrt ( R_Inner * R_Inner + Teeth_Width * Teeth_Width / 4.0 );
Angle2 = atan2 ( Teeth_Width / 2.0, R_Outer );
Angle3 = atan2 ( Teeth_Width / 2.0, R_Inner );
Polygon [ 4 * Tooth + 0 ] = LPoint_Set (
R3 * sin ( Tooth_Angle - Angle3 ) + Translation.x,
R3 * cos ( Tooth_Angle - Angle3 ) + Translation.y );
Polygon [ 4 * Tooth + 1 ] = LPoint_Set (
R2 * sin ( Tooth_Angle - Angle2 ) + Translation.x,
R2 * cos ( Tooth_Angle - Angle2 ) + Translation.y );
Polygon [ 4 * Tooth + 2 ] = LPoint_Set (
R2 * sin ( Tooth_Angle + Angle2 ) + Translation.x,
R2 * cos ( Tooth_Angle + Angle2 ) + Translation.y );
Polygon [ 4 * Tooth + 3 ] = LPoint_Set (
R3 * sin ( Tooth_Angle + Angle3 ) + Translation.x,
R3 * cos ( Tooth_Angle + Angle3 ) + Translation.y );
}
LPolygon_New ( Cell_Draw, LLayer_Find ( File_Draw, “Metal1” ), Polygon, 4 *
Teeth_Count);
LCell_MakeVisible ( Cell_Draw );
LCell_HomeView(Cell_Draw);
}

Copy-Protecting Macro DLLs

This section describes how to use copy-protected UPI macro DLLs and how to copy-protect your own
macro DLLs.

L-Edit 14 User Guide Section 4 975


Chapter 34: Introduction to Programming the User Interface Copy-Protecting Macro DLLs

Opening a Copy-Protected DLL

When you load a copy-protected DLL, L-Edit will display a dialog similar to the following:

The following procedure explains how to use a copy-protected DLL.

; Call the DLL vendor and ask for a password.

; Provide the vendor with your L-Edit serial number and request a key for the DLL. The vendor will
compute the password and authorize use by providing a function:

password = f(L-Edit Serial number, Request key for DLL)

; Enter the password in the Password field. The DLL will compare the password with the internally
generated password. If they match, the DLL will be loaded.

If the password succeeds, it will be stored in the system registry. That way, you will not have to retype
the password every time you try to load the DLL.

Creating a Copy-Protected DLL

You can add copy-protection to any DLL by adding a password verification routine to the source code.
To generate copy-protection functions, you will need some knowledge of the Windows application
programming interface (API).

The following sections describe the steps involved in adding copy-protection to your DLL macro.

Initiating Password Verification

UPI_Entry_Point is the first function called after the DLL initialization routines have been invoked to
set up UPI function pointers. It is thus an appropriate place for L-Edit/UPI to check for copy protection.

Use UPI_Entry_Point to perform the following functions:

; Call LWindow_GetParameters to initialize the parameters needed to create Windows dialog boxes
from within the DLL.

; Call the Windows API function GetModuleFileName to return the name of the DLL file.

L-Edit 14 User Guide Section 4 976


Chapter 34: Introduction to Programming the User Interface Copy-Protecting Macro DLLs

; Call a user-defined function named VerifyDLLPassword to get and verify a password for the DLL.

; Register the macro and optionally bind it to a hot key or menu item.

A sample version of the UPI_Entry_Point function is shown below.

HINSTANCE hMyInst; /* Application Instance */


HWND hMyWnd; /* Parent handle */
HINSTANCE hMyLib; /* Handle to the DLL */

int UPI_Entry_Point( void )


{
char filename_buf[255];

/* Initialize Graphical Window Parameters */


LWindow_GetParameters((void **)&hMyInst, (void **)&hMyWnd, (void
**)&hMyLib);
GetModuleFileName( (HMODULE )hMyLib, filename_buf, 255);

/* Verify password for this DLL */


if (!VerifyDLLPassword(filename_buf))
return 0;

/* Register the macro */


LMacro_BindToHotKey ( KEY_F2, “Contact, Active-Metal1...”,
“Contact_Active_Metal”);

return 1;
}

Verifying the Password

UPI_Entry_Point calls the user-defined function VerifyDLLPassword() to obtain and verify the user’s
password. The basic tasks of VerifyDLLPassword are:

; Internally generate a correct password for the DLL. You can use almost any algorithm to generate a
password, but it will generally be a function of the DLL filename and a unique identification number,
such as the serial number of L-Edit. You can retrieve the serial number of L-Edit using the function
LUpi_GetSerialNumber.

; Check the registry stored password corresponding to the DLL filename. If one is found, compare this to
the internally generated password. If the stored password and the generated password are identical,
return SUCCESS.

; If no password is found in the registry or if the registry password is incorrect, display a dialog box to
request a password from the user.

; Compare the user-supplied password to the internally generated password. If the user-supplied
password and the generated password are identical, store the new password in the registry and return
SUCCESS. Otherwise, return FAILURE.

In outline form, the code for the VerifyDLLPassword function looks like this:

int VerifyDLLPassword( char *dll_file_name )


/* DESCRIPTION: calculate a challenge based on the dll file and request the
password from the user. If password matches with one produced internally,
then return 1; else return 0*/
{

L-Edit 14 User Guide Section 4 977


Chapter 34: Introduction to Programming the User Interface Copy-Protecting Macro DLLs

/* Extract the filename from the input variable DLL_file_name */


_splitpath(dll_file_name, drive, dir, fname, ext);
strcat(fname, ext);

/* Generate a password from the filename and the L-Edit serial


number */
challenge = f(fname, LUpi_GetSerialNumber());

/* Check the registry for a previously entered password */


password_found_in_registry = get_password_from_registry(fname,
reg_pass);

/* If a password is found, check it against the internally generated


password (challenge). If the password fails or if no password is
found, request a password from the user. Otherwise, return
SUCCESS. */
if ( (password_found_in_registry != SUCCESS) ||
( (password_found_in_registry == SUCCESS) && (strcmp(reg_pass,
challenge) != 0)))
{
if (!GetDLLPassword(usr_pass))
return (FAILURE);
} else if (strcmp(reg_pass, challenge) = 0)
return SUCCESS;

/* Compare the user-supplied password with the internally generated


password (challenge). If they match, store the new password in the
appropriate registry key */
if (strcmp(usr_pass, challenge) == 0){
store_password_in_registry(fname, usr_pass);
return SUCCESS;
}

/* Otherwise, notify the user that the password is incorrect and


return FAILURE */
else {
LDialog_AlertBox(“Incorrect password!”);
return FAILURE;
}
}

Additional Support Routines


The outline of VerifyDLLPassword, above, relies on several additional support routines. A summary of
the necessary functions is provided below; refer to your Visual C++ documentation for help
constructing these functions.

Function Name Action

get_password_from_regist Checks the registry for a current password definition and retrieves it,
ry( fname, reg_pass ) if one is found.
f( fname, Creates an internally generated password from the DLL filename and
LUpi_GetSerialNumber( ) the user’s L-Edit serial number.
)

store_password_in_registr Stores the user-supplied password in the registry key that corresponds
y( fname, usr_pass ) to the DLL filename.
GetDLLPassword( Displays a dialog to request the user’s password.
usr_pass )

L-Edit 14 User Guide Section 4 978


Chapter 34: Introduction to Programming the User Interface Copy-Protecting Macro DLLs

L-Edit 14 User Guide Section 4 979


35 UPI Functions Reference
4

This section provides the reference to the L-Edit User-Programmable Interface (UPI) and its
C-language functions and datatypes.

Function Categories

Functions are arranged in three primary categories.

Interface

“Interface Functions” (page 983) allow you to create interface elements such as dialogs, and to register
UPI macros.

ƒ “Dialog Functions” (page 984)


ƒ “Cursor and Display Functions” (page 996)
ƒ “UPI Macro Functions” (page 1007)
ƒ “UPI Functions” (page 1021)
ƒ “Windows Functions” (page 1035)

Database Functions

“Database Functions” (page 1060) allow you to create and manipulate a design database.

ƒ “Application Functions” (page 1061)


ƒ “File Functions” (page 1100)
ƒ “Cell Functions” (page 1162)
ƒ “Instance Functions” (page 1223)
ƒ “Entity Functions” (page 1244)
ƒ “Object Functions” (page 1270)
ƒ “Selection Functions” (page 1368)
ƒ “Layer Functions” (page 1400)
ƒ “Technology Setup Functions” (page 1452)
ƒ “Import/Export Functions” (page 1470)
ƒ “DRC Functions” (page 1477)
ƒ “Extract Functions” (page 1498)
ƒ “Core Functions” (page 1511)
ƒ “Utility Functions” (page 1517)

L-Edit 14 User Guide Section 4 980


Chapter 35: UPI Functions Reference

Data Types and Typedefs

“Data Types and Typedefs” (page 1540) allow you to create and manipulate data structures.

Data Relationships

UPI functions operate on many different types of data. These data correspond to the various design
components found within L-Edit (e.g., files, cells, drawing objects, selection lists, etc.). The following
diagram shows the relationship between many of these components. In general, arrows denote a
“contains a” relationship, boxes are data types, and boxes with drop shadows represent lists of items.

A primary component of a design database is an L-Edit “file”. All geometry and technology information
is contained within a file.

LFile
LPass

LLayer
LObject LVertex
(Polygons and wires only)
LCell
LPort LLayer
LCore
LInstance LCell
LDrcRule

A primary user interface component is a “selection list”. In the L-Edit UPI, this implicitly corresponds
to the selection list in the “active cell”.

LSelection LVertex
(Polygons and wires only)

GetShape
LObject LPort

LLayer LInstance

L-Edit 14 User Guide Section 4 981


Chapter 35: UPI Functions Reference

Finally, several items in L-Edit can have properties associated with them. In order to present a unified
API interface, all items that can have properties attached to them must be treated as LEntity objects,
usually via an explicit cast:

LFile

LLayer

LCell
(LEntity) cast
LEntity
LObject
(LEntity is only used
to attach properties)
LPort

LInstance

Numerical Limits

Many UPI function variables must fall within a specified range of values to be valid in L-Edit. The
following limits are pre-defined for all UPI functions:

WORLD_MAX The maximum positive value of an x- or y-coordinate in L-Edit.


MAX_LAYER_NAME The maximum number of characters in an L-Edit layer name.
MAX_CELL_NAME The maximum number of characters in an L-Edit cell name.
MAX_TDBFILE_NAME The maximum number of characters in an L-Edit file name.

Obsolete Functions

As the internal L-Edit database changes, some data types and UPI functions have to be updated and/or
replaced. Although we strive to maintain as much backward compatibility as possible, sometimes it is
simply not possible.

Obsolete functions are marked as such in this documentation.

Also, if a UPI program contains:

#define EXCLUDE_LEDIT_LEGACY_UPI

before #including any header files, then the obsolete UPI functions are not exposed to the user program.

L-Edit 14 User Guide Section 4 982


Chapter 35: UPI Functions Reference Interface Functions

Interface Functions

The Dialog Functions group of functions listed below are used to create graphical interface elements
such as dialog and message boxes.

The Cursor and Display Functions are used for tasks such as finding the current mouse position,
displaying a message in the status bar, or getting and setting the visible cell in L-Edit’s layout window.

The UPI Macro Functions are used for loading, registering, and binding UPI macros.

The UPI Functions are used for finding the L-Edit serial number, choosing the selection tool, and
inserting a menu item separator.

The Windows Functions are used to manipulate multiple windows and get window parameters in
L-Edit.

L-Edit 14 User Guide Section 4 983


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions

Dialog Functions

“LDialog_MsgBox” (page 985) “LDialog_MultiLineMsgBox” (page 986)

“LDialog_YesNoBox” (page 988) “LDialog_AlertBox” (page 987)

“LDialog_InputBox” (page 989) “LDialog_MultiLineInputBox” (page 990)

“LDialog_PickList” (page 991) “LDialog_File” (page 992)

Dialog Button Returns


L-Edit UPI recognizes the following dialog button returns. Each is internally mapped to an integer
value.

LOK Indicates that the OK button was selected.


LCANCEL Indicates that the Cancel button was selected.
LYES Indicates that the Yes button was selected.
LNO Indicates that the No button was selected.

L-Edit 14 User Guide Section 4 984


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_MsgBox

LDialog_MsgBox

void LDialog_MsgBox(const char* szMessage)

Description

Produces a single-line message box.

Parameters

szMessage Specifies the message to be displayed.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
char szCellName[MAX_CELL_NAME];
LCell_GetName(pCell, szCellName, sizeof(szCellName));

LDialog_MsgBox(LFormat("Active Cellname = \"%s\".", szCellName));


}

See Also

“Interface Functions” (page 983), “LDialog_MultiLineMsgBox” (page 986),


“LDialog_AlertBox” (page 987)

L-Edit 14 User Guide Section 4 985


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_MultiLineMsgBox

LDialog_MultiLineMsgBox

void LDialog_MultiLineMsgBox( const char* szaMessages[], int nTotalEntries


);

Description

Produces a multiple-line message dialog.

Parameters

szaMessages Array of strings. Each string will be displayed on a separate line in the
dialog.
nTotalEntries Number of message lines.

Example

LCell pCell = LCell_GetVisible();


LFile pTDBFile = LCell_GetFile(pCell);
if(Assigned(pCell) && Assigned(pTDBFile))
{
char szCellName[MAX_CELL_NAME];
LCell_GetName(pCell, szCellName, sizeof(szCellName));

char szTDBFileName[MAX_TDBFILE_NAME];
LFile_GetName(pTDBFile, szTDBFileName, sizeof(szTDBFileName));

const char* szaMessages[2];


szaMessages[0] = szCellName;
szaMessages[1] = szTDBFileName;
LDialog_MultiLineMsgBox(szaMessages, 2);

szaMessages[0] = LFormat("Active Cellname = \"%s\".", szCellName);


szaMessages[1] = LFormat("Active TDB Filename = \"%s\".",
szTDBFileName);
LDialog_MultiLineMsgBox(szaMessages, 2);
}

See Also

“Interface Functions” (page 983), “LDialog_MsgBox” (page 985), “LDialog_AlertBox” (page 987)

L-Edit 14 User Guide Section 4 986


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_AlertBox

LDialog_AlertBox

void LDialog_AlertBox( const char* szMessage );

Description

Produces a warning dialog.

Parameters

szMessage Warning displayed in the dialog.

Example

LFile pTDBFile = LFile_GetVisible();


if(Assigned(pTDBFile))
{
char szTDBFileName[MAX_TDBFILE_NAME];
LFile_GetName(pTDBFile, szTDBFileName, sizeof(szTDBFileName));

LDialog_AlertBox(LFormat("Active TDB Filename = \"%s\".",


szTDBFileName));
}

See Also

“Interface Functions” (page 983), “LDialog_MsgBox” (page 985),


“LDialog_MultiLineMsgBox” (page 986)

L-Edit 14 User Guide Section 4 987


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_YesNoBox

LDialog_YesNoBox

int LDialog_YesNoBox( const char *msg );

Description

Produces a query dialog. One of two choices is clicked in response to the query.

Return Values

If Yes is clicked, the function returns LYES; if No is clicked, it returns LNO.

Parameters

msg Query to be displayed in the dialog.

Example

if ( LDialog_YesNoBox(“Do you want to Continue”) ){


/*Yes is clicked - the program continues*/
}
else {
/*No is clicked - the program exits*/
}

See Also

“Interface Functions” (page 983), “Dialog Button Returns” (page 984)

L-Edit 14 User Guide Section 4 988


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_InputBox

LDialog_InputBox

int LDialog_InputBox( const char *title, const char *msg, char *ibuf );

Description

Produces an input dialog. The value entered by the user is returned as a string. If another datatype is
needed, the string must be converted to the appropriate type.

Return Values

If OK is clicked, the function returns LOK; if Cancel is clicked, it returns LCANCEL.

Parameters

title Title of the dialog box.


msg Prompt displayed in the dialog.
ibuf A buffer used to return the value entered at the prompt.

Example

/*Allocate a buffer to store the return value*/


char value_buffer[50];

/*Initialize buffer to display a default value*/


strcpy(value_buffer, “pcell”);

/*Display an input box with Cell Name Query as the title*/


if ( LDialog_InputBox(“Cell Name Query”, “Enter Name of the cell to be
instanced”, value_buffer) == 0)
return;

See Also

“Interface Functions” (page 983), “Dialog Button Returns” (page 984)

L-Edit 14 User Guide Section 4 989


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_MultiLineInputBox

LDialog_MultiLineInputBox

int LDialog_MultiLineInputBox( const char *title, LDialogItem ibuf[],


int total_entries );

Description

Produces a multiple-line input dialog. Several values are entered in response to prompts.

Return Values

If OK is clicked, the function returns LOK; if Cancel is clicked, then it returns LCANCEL.

Parameters

title Title of the dialog box.


ibuf Prompts displayed and the values entered.
total_entries Number of values expected.

Example

/*Declare an array of dialog items to be displayed*/


LDialogItem Dialog_Items [ 3 ] =
{ { "Inner Radius", "175" },
{ "Outer Radius", "200" },
{ "Teeth Count ", "15 " } };

long R_Inner, R_Outer, Teeth_Count;


float Teeth_Width;

/*Display a multi line dialog box to display the default values of gear
properties and get the modified properties*/
if ( LDialog_MultiLineInputBox ( “Gear Properties”, Dialog_Items, 3 ) ){
/* user selected OK, so get the property value from the Dialog_Items
buffer*/

R_Inner = atol( Dialog_Items[0].value ); // get the inner radius


R_Outer = atol( Dialog_Items[1].value ); // get the outer radius
Teeth_Count = atol( Dialog_Items[2].value ); // get the teeth count
/*Calculate Teeth Width*/
Teeth_Width = 6.283185307 * R_Inner / ( 2 * Teeth_Count );
}

See Also

“LDialogItem” (page 1565), “Interface Functions” (page 983), “Dialog Button Returns” (page 984)

L-Edit 14 User Guide Section 4 990


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_PickList

LDialog_PickList

int LDialog_PickList( const char *title, const char *list[],


int total_entries, int default_choice );

Description

Produces an input dialog. One of a list of possibilities is chosen either by highlighting the desired item
and clicking OK, or by double-clicking the desired item.

Return Values

If OK is clicked (or the highlighted item is double-clicked), the function returns the index of the
highlighted item; if Cancel is clicked, it returns –1.

Parameters

title Title of the dialog.


list Items listed.
total_entries Number of items listed.
default_choice Index of the item shown highlighted when the dialog first appears.

Example

/*This example displays a pick list with three members to choose from*/

/*Declare a buffer to hold all elements of the pick list*/


char *Pick_List [ ] = {
"Inverter",
"Op-Amp",
"Transistor"
};

/*Number of elements in the pick list*/


int Pick_Count = 3;

/*Index of the item picked by user*/


int Picked;

/*Display the pick list with Inverter as the default selection*/


Picked = LDialog_PickList ("Select Element", Pick_List, Pick_Count, 0);

See Also

“Interface Functions” (page 983).

L-Edit 14 User Guide Section 4 991


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_File

LDialog_File

extern void LDialog_File( const char* szDefaultName, const char* szTitle,


char* szFileNameBuffer, const char* szFiltersForBrowser, int iBrowseType,
const char* szMessage, const char* szOkText, const char* szDefaultExt,
const char* szTypeList, const LFile pFile );

Description

Call this function to display a filename edit box. The user may type a filename in the field provided, or
click the Browse button to open a standard Windows file dialog. Clicking the Browse button opens a
File Open or File Choose dialog box, depending on the value of iBrowseType.

The szFilter parameter is used to determine the type of filename a file must have to be displayed in
the file list box. The first string in the string pair describes the filter; the second string indicates the file
extension to use. Multiple extensions may be specified using a semicolon (;) as the delimiter. The string
ends with two '|' characters, followed by a NULL character.

For example, L-Edit permits users to open files with extensions .TDB (layout) or .VDB (LVS Results),
among others. The filter for L-Edit could be written as:

"Layout Files (*.tdb)|*.tdb|LVS Files (*.vdb)|*.vdb|L-Edit Files


(*.tdb;*.vdb)|*.tdb; *.vdb|All Files (*.*)|*.*||"

Return Values

None. The selected filename is written to the szFileNameBuffer input buffer.

Parameters

szFileName The initial filename that appears in the filename edit box. If NULL,
no filename initially appears.
szTitle The title of the filename edit box.
szFileNameBuffer Filename buffer to store the filename selected. If the user cancels this
is set to the empty string.
szFilterForBrowser A series of string pairs that specify filters you can apply to the file. If
you specify file filters, only selected files will appear in the Files list
box. See the description section for more information on how to work
with file filters.
iBrowseType Specifies the type of dialog opened when the user selects the Browse
button in the filename edit box:
ƒ iBrowseType = 1 opens a File Open dialog.
ƒ iBrowseType ≠ 1 opens a File Choose dialog.

szMessage Message to display in the filename edit box, such as instructions to


the user.
szOkText Text displayed on the left-hand button in the filename edit box. The
user clicks this button to accept the displayed filename.

L-Edit 14 User Guide Section 4 992


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_File

szDefaultExt The default filename extension. If the user does not include an
extension in the Filename edit box, the extension specified by
szDefaultExt is automatically appended to the filename. If this
parameter is NULL, no file extension is appended.
szTypeList A series of strings that specify file types to be listed in the File Type:
field of the filename edit box. If this parameter is set to NULL, the
File Type: field is omitted from the filename edit box.

Each string in the series indicates a single file extension, ending with
a '|' character. The series ends with two '|' characters, followed by a
NULL character. For example,

char *szTypeList = "*.tdb|*.vdb|*.txt||"

includes the TDB, VDB, and TXT file extensions in the drop-down
list of file types.
pFile Pointer to an existing file. The location of pFile is the default
directory for the File Open or File Choose dialog. When pFile is set,
szFileNameBuffer contains the selected filename and path relative to
the location of pFile.

Example

/* Parameters for the filename edit box */


char* szFileName = "default_name";
const char* szTitle = "Open File";
char szFileNameBuffer[256];
const char* szMessage = “Please select a file to open:";
const char* szDefaultExt = "tdb”;
const char* szTypeList = "*.tdb|*.vdb||";
const char* szOkText = "OK";

/* Type of Windows file dialog to open with the Browse button */


int iBrowseType = 2;

/* Parameters for the Windows file dialog */


const char* szFilterForBrowser = "Layout Files (*.tdb)|*.tdb|LVS Files
(*.vdb)|*.vdb|L-Edit Files (*.tdb;*.vdb)|*.tdb; *.vdb|All Files
(*.*)|*.*||";
LFile pFile = LFile_Find("C:/Tanner/LEdit90/Samples/T-Cells/alphabet.tdb");

/* Open the file edit box */


LDialog_File(szFileName, szTitle, szFileNameBuffer, szFilterForBrowser,
iBrowseType, szMessage, szOkText, szDefaultExt, szTypeList, pFile);

L-Edit 14 User Guide Section 4 993


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_File

The macro shown above opens the following filename edit dialog:

If the user clicks Browse, L-Edit opens a standard file Open dialog (specified by iBrowseType = 1) in
the directory that contains pFile.

Example 2

void LDialog_File(const char* szDefaultName, const char* szTitle, char*


szFileNameBuffer,
const char* szFiltersForBrowser, int iBrowseType, const char* szMessage,
const char* szOkText, const char* szDefaultExt, const char* szTypeList,
const LFile pFile);

// BrowseType meaning:0 - "Save" dialog, 1 - "Open" dialog


// FiltersForBrowser, DefaultExt and TypeList are strings separated by '|'
character.
// Note: TypeList and DefaultExt are only meaningful for "Save" dialog.
//pFile parameter is used to better support relative file names.
//
//
// Returns: Name of the file (with a path). In case if TypeList was
provided, it returns as string consisting of a
//file name and a 0 based index into the TypeList, separated with '|'
character.

L-Edit 14 User Guide Section 4 994


Chapter 35: UPI Functions Reference Interface Functions Dialog Functions
LDialog_File

const char szFileExt[] = "*.txt";


const char szFilter[] = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*||";

char szTemp[512] = "\0";


LDialog_File("MyFile.txt", // Default filename. This is the string that
is put in the browse dialog including path.
"Please select the Batch Rendering Script file.", // Dialog title
szTemp,// Variable to store the filename
szFilter, // File type file.
1, // Browse Type - 1 Open, 0 - Save As.
"Batch Rendering Script filename:",// Filename message in the Dialog.
NULL, // String for the OK button - NULL means OK.
szFileExt,// Default extension type.
NULL,// Type list - a list of extension typesto indicate which type was
selected.
NULL); // LFile pointer - if yousend a LFile to LDialog_File, then all
relative paths will be relative to the TDB referenced by LFile.

if((strlen(szTemp) > 0))


{
// The user did not cancel the dialog.
//Do my processing here.
}

// Another example
// Example:
//LDialog_File("tanner.tdb",
//"Export File",
//"Tanner Database Files (*.tdb)|*.tdb|GDSII Files (*.gds)|*.gds||",
//0,
//"Current file will be exported to this file name:",
//"&Export",
//"tdb|gds||",
//"Tanner v8 Database File|GDSII File||",
//NULL
//);
// Return value of "C:mpest.gds|1" will indicate that user selected GDSII
file.

See Also

“LFile_GetResolvedFileName” (page 1150)

L-Edit 14 User Guide Section 4 995


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions

Cursor and Display Functions

ƒ “LCursor_GetPosition” (page 997) (Obsolete)


ƒ “LCursor_GetPositionEx99” (page 998)
ƒ “LCursor_GetSnappedPosition” (page 999)
ƒ “LDisplay_Refresh” (page 1000)
ƒ “LStatusBar_SetMsg” (page 1001)
ƒ “LCell_HomeView” (page 1002)
ƒ “LCell_GetVisible” (page 1003)
ƒ “LCell_GetLastVisible” (page 1004)
ƒ “LCell_MakeVisible” (page 1005)
ƒ “LCell_MakeVisibleNoRefresh” (page 1006)
ƒ

L-Edit 14 User Guide Section 4 996


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCursor_GetPosition

LCursor_GetPosition

LPoint LCursor_GetPosition( void );

Description

Gets the current cursor (mouse) position.

Return Value

Returns the current cursor (mouse) position.

Example

LPoint pt = LCursor_GetPosition();
LDialog_MsgBox( LFormat( “( %ld, %ld )”, pt.x, pt.y ) );

Version

As of L-Edit V9, this function has been deprecated, in favor of “LCursor_GetPositionEx99” (page
998)

See Also

“LCursor_GetPositionEx99” (page 998), “LTransform” (page 1626), “Interface Functions” (page


983).

L-Edit 14 User Guide Section 4 997


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCursor_GetPositionEx99

LCursor_GetPositionEx99

LPoint LCursor_GetPositionEx99(
int iSnapped,
int iPauseForInput,
const char* szMessage )

Description

Gets the current cursor (mouse) position. Optionally the cursor position can be snapped to the current
snap grid settings in the Setup > Design—Grid tab. LCursor_GetPositionEx99 gets the current cursor
position and immediately returns. One can optionally pause for user input, allowing the user to press
the left mouse button to indicate the cursor position.

Return Value

Returns the current cursor (mouse) position.

Parameters

iSnapped Snap the cursor position to the current snap settings (1 = True, 0 =
False).
iPauseForInput Pause so the user can press the mouse left button to indicate the cursor
position (1 = True, 0 = False).
szMessage Displays the message when pausing for user input. If szMessage is
NULL, then it displays "Please pick a point."

Example

// get a point from the user, and print out its coordinates
LPoint pt = LCursor_GetPositionEx99( true, true, “click desired point” );
LDialog_MsgBox( LFormat( “( %ld, %ld )”, pt.x, pt.y ) );

See Also

“LCursor_GetPosition” (page 997), “Interface Functions” (page 983).

L-Edit 14 User Guide Section 4 998


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCursor_GetSnappedPosition

LCursor_GetSnappedPosition

LPoint LCursor_GetSnappedPosition( void )

Description

Gets the current snapped cursor (mouse) position.

Return Values

Returns the current snapped cursor (mouse) position as a LPoint.

Version

As of L-Edit V9, this function has been deprecated, in favor of “LCursor_GetPositionEx99” (page
998)

See Also

“LTransform” (page 1626), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 999


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LDisplay_Refresh

LDisplay_Refresh

void LDisplay_Refresh( void );

Description

Updates the display to show layout modifications produced by UPI calls.

See Also

“Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1000


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LStatusBar_SetMsg

LStatusBar_SetMsg

void LStatusBar_SetMsg( const char *msg );

Description

Displays a message in the status bar. To clear the status bar, set msg to “” (an empty string).

Parameters

msg Message to be displayed.

Example

int nBoxes = 5;
LStatusBar_SetMsg( LFormat( “Boxes processed = %d”, nBoxes) );

See Also

“Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1001


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCell_HomeView

LCell_HomeView

LStatus LCell_HomeView( LCell cell );

Description

Displays the home view of a given cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Specified cell.

Example

// zoom to home view and refresh display


LCell pCell = LCell_GetVisible();
if ( pCell )
{
LCell_HomeView( pCell );
LDisplay_Refresh();
}

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1002


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCell_GetVisible

LCell_GetVisible

LCell LCell_GetVisible( void );

Description

Gets the visible (active) cell in the layout window.

Return Values

Returns a pointer to the active cell; otherwise NULL.

Example

LCell pCell = LCell_GetVisible();


if ( pCell )
{
// print the name of the active cell
char buf[ MAX_CELL_NAME ];
LDialog_MsgBox(
LFormat( “Active cell is %s”,
LCell_GetName( pCell, buf, sizeof( buf ) )
)
);
}

See Also

“LStatus” (page 1620), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1003


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCell_GetLastVisible

LCell_GetLastVisible

LCell LCell_GetLastVisible( LFile file );

Description

Gets the cell last open in the specified file.

Return Values

Returns a pointer to the last open cell in the specified file, or NULL on error.

Parameters

file Specified file.

See Also

“LObject” (page 1600), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1004


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCell_MakeVisible

LCell_MakeVisible

LStatus LCell_MakeVisible( LCell cell );

Description

Makes the specified cell the current one and updates the display.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Specified cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1005


Chapter 35: UPI Functions Reference Interface Functions Cursor and Display Functions
LCell_MakeVisibleNoRefresh

LCell_MakeVisibleNoRefresh

LStatus LCell_MakeVisibleNoRefresh( LCell cell );

Description

Makes the specified cell the current one without updating the display.

Return Values

It an error occurs, it returns LBadCell; otherwise returns LStatusOK.

Parameters

cell Specified cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1006


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions

UPI Macro Functions

ƒ “LMacro_Register” (page 1008)


ƒ “LMacro_BindToHotKey” (page 1009)
ƒ “LMacro_BindToMenu” (page 1010)
ƒ “LMacro_BindToMenuAndHotKey_v9_30” (page 1011)
ƒ “LMacro_IsLoaded” (page 1016)
ƒ “LMacro_Load” (page 1017)
ƒ “LMacro_LoadEx1200” (page 1018)
ƒ “LMacro_UnLoad” (page 1019)
ƒ “LMacro_GetNewTCell” (page 1020)

L-Edit 14 User Guide Section 4 1007


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_Register

LMacro_Register

void LMacro_Register( char *macro_desc, char *function );

Description

Registers a user-defined macro in L-Edit.

Parameters

macro_desc Macro name that should be displayed in the Macros list.


function Name of the macro function.

Example

void macro_function( void )


{
// macro code goes here
}

void UPI_Entry_Point( void )


{
LMacro_Register( “My macro’s description”, “macro_function” );
}

See Also

“Interface Functions” (page 983), “Running a Macro” (page 956)

L-Edit 14 User Guide Section 4 1008


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_BindToHotKey

LMacro_BindToHotKey

void LMacro_BindToHotKey( int keycode, char *macro_desc, char *function);

Description

Establishes a relationship between a user-defined macro and a keyboard shortcut (“hot key”) so that
user can invoke the macro by pressing the hot key. Supported key combinations (keycodes) are defined
in <install_dir>\include\lupi_usr.h.

Parameters

keycode Keyboard shortcut (for example, KEY_F2 for the F2 key).


macro_desc String displayed in the Macros list of the Run Macro dialog.
function Macro function name.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“Interface Functions” (page 983), “Binding Macros to Hot Keys” (page 971)

L-Edit 14 User Guide Section 4 1009


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_BindToMenu

LMacro_BindToMenu

void LMacro_BindToMenu( char *menu, char *macro_desc, char *function );

Description

Establishes a relationship between a user-defined macro and a menu command. When the menu item is
selected, the macro is executed.

Parameters

menu Main L-Edit menu in which to add the entry (for example, Tools).
macro_desc Menu entry to add. If this string begins with a space, the menu entry is
preceeded by a separator line. A submenu may be specified by putting
a ‘\’ in the string (for example, “My Program\\My Macro”). The
macro_desc string is also displayed in the Macros list of the Run
Macro dialog.

function Macro function name.

Example

void macro1( void )


{
// macro code goes here
}

void UPI_Entry_Point( void )


{
LMacro_BindToMenu( “Tools”, “My macro”, “macro1” );
LMacro_BindToMenu( “Tools”, “Subdir\\My macro”, “macro1” );
LMacro_BindToMenu( “Tools”, “Subdir\\My macro2”, “macro2” );
}

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“Interface Functions” (page 983), “Binding Macros to Menu Items” (page 971)

L-Edit 14 User Guide Section 4 1010


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_BindToMenuAndHotKey_v9_30

LMacro_BindToMenuAndHotKey_v9_30

unsigned int LMacro_BindToMenuAndHotKey_v9_30(const char* szMenu,


const char* szHotKey, const char* szMacroDescription,
const char* szFunctionName, const char* szHotKeyCategory)

Description

Establishes a relationship between a user-defined macro and a menu command and/or a hotkey. When
the menu item or the hotkey is selected, the macro is executed.

Return Values

If an error occurs, it returns 0; otherwise returns the resource ID number of the binding.

Parameters

szMenu Main L-Edit menu in which to add the entry (for example, File or Edit
or Tools). If this is NULL, then the macro will not be assigned to a
menu.
szHotKey A string of the hotkey to bind the macro to. The string is the actual
key just like in Setup>Application dialog - Keyboard tab. The
following modifiers and special keys are also available:
Shift - Indicates the Shift key is pressed in conjunction with another
key.
Ctrl - Indicates the Control key is pressed in conjunction with another
key.
Alt - Indicates the Alt key is pressed in conjunction with another key.
F1 - Indicates F1 function key.
Num 0 - Indicates the zero key on the numeric key pad.
Backspace - The backspace key.
Tab - The Tab key.
Space - The spacebar.
Page Up - The page up key.
Page Down - The page down key.
End - The end key.
Home - The home key.
Left - The left arrow.
Up - The up arrow.
Right - The right arrow.
Down - The down arrow.
Ins - The insert key.
Del - The delete key.
Num * - The * key on the numeric key pad.
Num + - The + key on the numeric key pad.
Num - - The -key on the numeric key pad.
Num Del - The Delete/decimal key on the numeric key pad.
Num Lock - The Num Lock key.
Scroll Lock - The * key on the numeric key pad.
Break - The Break key.
Esc - The escape key.
Comma - The , key.

L-Edit 14 User Guide Section 4 1011


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_BindToMenuAndHotKey_v9_30

Period - The . key.


To assign shifted keys such as @ or <, the use Shift and the lowercase
key (for Example: @ is Shift+2 and < is Shift+Comma).
If this is NULL, then the macro will not be assigned a hotkey.
szMacroDescription Menu entry to add. If this string begins with a space, the menu entry is
preceded by a separator line. A submenu may be specified by putting
a \ in the string (for example, “My Program\\My Macro”).

The szMacroDescription string is also displayed in the Macros list of


the Tools>Macro dialog. If you want to place the macro at a specific
location in a menu then add a newline \n and the full path to the menu
item that you want your macro to be before (for example: My
Macro\nEdit\\Copy will put the My Macro menu item between Cut
and Copy on the Edit menu).

L-Edit 14 User Guide Section 4 1012


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_BindToMenuAndHotKey_v9_30

If the full path ends in \ then the menu item will be placed at the end
of the menu (for example: My Macro\nView\\Zoom\\ will put the My
Macro menu item at the end of the Zoom submenu after Zoom to
Selections).

If the menu item has a separator before it and if you precede the menu
item with a space, then it will put your macro before the separator,
otherwise it will put it after the separator (for example: My
Macro\nView\\ Home will put the My Macro menu item on the View
menu before the separator that is above the Home menu item).

You can also add a new menu at the top level by indicate a top level
menu to place your macro before (for example: My Program\\My
Macro\nTools puts the My Program menu item before the Tools
menu.

szFunctionName Macro function name.

L-Edit 14 User Guide Section 4 1013


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_BindToMenuAndHotKey_v9_30

szHotKeyCategory This is a string of the category that the hotkey should be in the
Setup>Application dialog - Keyboard tab for remapping hotkeys
(For Example, Macro or Tools or Cell). If this is NULL, then the
category will be Macro. The category does not have to be an existing
category (for example: My Macros category would create a new
category).

Example

void Macro1(void)
{
// macro code goes here
}

void UPI_Entry_Point(void)
{
LMacro_BindToMenuAndHotKey_v9_30("Edit",
"F1",
"My Program\\My Macro",
"Macro1",
"My Macros");
LMacro_BindToMenuAndHotKey_v9_30("Edit",
"Shift+2",
"My Macro\nEdit\\Copy",
"Macro2",
NULL);
LMacro_BindToMenuAndHotKey_v9_30("View",
NULL,
"My Macro\nView\\Zoom\\",
"Macro3", NULL);
LMacro_BindToMenuAndHotKey_v9_30("View",
"Shift+Comma",
"My Macro\nView\\ Home",
"Macro4",
NULL);

L-Edit 14 User Guide Section 4 1014


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_BindToMenuAndHotKey_v9_30

LMacro_BindToMenuAndHotKey_v9_30(NULL,
"End",
"My Program\\My Macro\nTools",
"Macro5",
NULL);
}

Version

Available in L-Edit v10.0 and later versions.

See Also

“Interface Functions” (page 983), “Binding Macros to Menu Items” (page 971)

L-Edit 14 User Guide Section 4 1015


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_IsLoaded

LMacro_IsLoaded

int LMacro_IsLoaded( char *dll_path );

Description

Indicates whether a DLL macro is loaded.

Return Values

1 if macro is loaded, 0 if not.

Parameters

dll path Full path and file name of the macro.

Example

if ( LMacro_IsLoaded("c:\\keyhole.dll") )
LMacro_UnLoad("c:\\keyhole.dll");

Version

Available in L-Edit 8.4 and later versions.

See Also

“LMacro_Load” (page 1017), “LMacro_UnLoad” (page 1019).

L-Edit 14 User Guide Section 4 1016


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_Load

LMacro_Load

int LMacro_Load( char *dll_path );

Description

Loads a DLL macro.

Return Values

1 if the macro loads sucessfully, 0 if not.

Parameters

dll path Full path and file name of the macro.

Example

LMacro_Load("c:\\keyhole.dll");

Version

Available in L-Edit 8.4 and later versions.

See Also

“LMacro_LoadEx1200” (page 1018), “LMacro_IsLoaded” (page 1016), “LMacro_UnLoad” (page


1019)

L-Edit 14 User Guide Section 4 1017


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_LoadEx1200

LMacro_LoadEx1200

int LMacro_LoadEx1200(const char* szDLL_Path, LBoolean bLoadAtStartUp);

Description

Loads a DLL macro and indicates whether to load that macro at startup.

Return Values

1 if the macro loads sucessfully, 0 if not.

Parameters

szDLL_Path Full path and file name of the macro DLL to load.
bLoadAtStartUp LTRUE to load the macro when L-Edit starts up.

Example

LMacro_LoadEx1200("c:\\keyhole.dll", LTRUE);

Version

Available in L-Edit 12.00 and later versions.

See Also

“LMacro_IsLoaded” (page 1016), “LMacro_UnLoad” (page 1019), “LMacro_Load” (page 1017)

L-Edit 14 User Guide Section 4 1018


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_UnLoad

LMacro_UnLoad

void LMacro_UnLoad( char *dll_path );

Description

Unloads a DLL macro.

Parameters

dll path Full path and file name of the macro.

Example

LMacro_UnLoad("c:\\keyhole.dll");

Version

Available in L-Edit 8.4 and later versions.

See Also

“LMacro_IsLoaded” (page 1016), “LMacro_Load” (page 1017)

L-Edit 14 User Guide Section 4 1019


Chapter 35: UPI Functions Reference Interface Functions UPI Macro Functions
LMacro_GetNewTCell

LMacro_GetNewTCell

LCell LMacro_GetNewTCell( void );

Description

Gets a handle to the auto-generated cell created by running T-Cell generator code. L-Edit automatically
generates a call to LMacro_GetNewTCell when it creates a T-Cell generator code template. Normally,
you will not need to add calls to this function.

Return Values

Returns a pointer to the auto-generated cell if successful. Otherwise, returns NULL.

Version

Available in L-Edit v9.0 and later versions.

See Also

“LCell_GetParameter” (page 1208), “LInstance_Generate” (page 1241), “LCell” (page 1547)

L-Edit 14 User Guide Section 4 1020


Chapter 35: UPI Functions Reference Interface Functions UPI Functions

UPI Functions

ƒ “LUpi_GetSerialNumber” (page 1022)


ƒ “LUpi_SetQuietMode” (page 1023)
ƒ “LUpi_InQuietMode” (page 1024)
ƒ “LUpi_SetSelectionTool” (page 1025)
ƒ “LUpi_SetDrawingTool” (page 1026)
ƒ “LUpi_InsertMenuItemSeparator” (page 1027)
ƒ “LUpi_SetReturnCode” (page 1028)
ƒ “LUpi_GetReturnCode” (page 1029)
ƒ “LUpi_SetUpdateDisplayMode” (page 1031)
ƒ “LUpi_GetUpdateDisplayMode” (page 1032)
ƒ “LFormat” (page 1033)
ƒ “LFormatV” (page 1034)

L-Edit 14 User Guide Section 4 1021


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_GetSerialNumber

LUpi_GetSerialNumber

long LUpi_GetSerialNumber( void );

Description

Gets the serial number of L-Edit.

Return Values

Returns the serial number or -1 on error.

See Also

“Interface Functions” (page 983), “Running a Macro” (page 956)

L-Edit 14 User Guide Section 4 1022


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_SetQuietMode

LUpi_SetQuietMode

LStatus LUpi_SetQuietMode( int val );

Description

Sets the quiet mode. When the quiet mode is on, the alert boxes are suppressed. The use of quiet mode
is required for batch processing.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

val Quiet mode control (1=ON, 0=OFF).

See Also

“LUpi_InQuietMode” (page 1024), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1023


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_InQuietMode

LUpi_InQuietMode

int LUpi_InQuietMode( void );

Description

Gets the quiet mode. When the quiet mode is on, the alert boxes are suppressed. The use of quiet mode
is required for batch processing.

Return Values

1 if quiet mode is on, 0 if quiet mode is off

Example

int bQM = LUpi_InQuietMode();


// now turn off all prompts
LUpi_SetQuietMode( true );
// do the macro...
... user code goes here...
// reset original mode
LUpi_SetQuietMode( bQM );

See Also

“LUpi_SetQuietMode” (page 1023), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1024


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_SetSelectionTool

LUpi_SetSelectionTool

void LUpi_SetSelectionTool( void );

Description

Selects the selection tool in L-Edit.

See Also

“Interface Functions” (page 983), “Running a Macro” (page 956)

L-Edit 14 User Guide Section 4 1025


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_SetDrawingTool

LUpi_SetDrawingTool

UPIDrawingToolType LUpi_SetDrawingTool( UPIDrawingToolType eTool );

Description

Selects the specified drawing tool.

Return Values

Returns the previously selected drawing tool.

Parameters

eTool The drawing tool to select.

See Also

“Interface Functions” (page 983), “UPIDrawingToolType” (page 1634)

L-Edit 14 User Guide Section 4 1026


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_InsertMenuItemSeparator

LUpi_InsertMenuItemSeparator

void LUpi_InsertMenuItemSeparator( char *menu );

Description

Appends a separator in the specified L-Edit menu. This function can be used for separating menu items.

Parameters

menu Name of menu where separator is to be inserted.

See Also

“Interface Functions” (page 983), “Running a Macro” (page 956)

L-Edit 14 User Guide Section 4 1027


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_SetReturnCode

LUpi_SetReturnCode

void LUpi_SetReturnCode( int nCode );

Description

Sets the UPI return code, which is global to L-Edit. It is reset to zero just before an outermost macro is
executed. An outermost macro is a macro that is not nested within another.

Note: A nested macro, such as an LC_Generate call within a T-Cell generator, will execute
its code without resetting the UPI return code.

The T-Cell mechanism in L-Edit checks the UPI return code after executing generator code for a T-Cell.
If the UPI return code is nonzero, L-Edit destroys the auto-generated cell and no instance is created.

Parameters

nCode The new value of the UPI return code.

Example

/* This is an excerpt from a T-Cell generator code function. */


char* layername = "Polka Dot";
LFile myFile = LFile_GetVisible();
LLayer mylayer = LLayer_Find( myFile, layername );
if (mylayer == (LLayer)NULL)
{
LUpi_SetReturnCode(-1);
LDialog_MsgBox( LFormat("Could not find layer %s, cell not created.",
layername) );
return;
}

Version

Available in L-Edit 9.0 and later versions.

See Also

“LUpi_GetReturnCode” (page 1029)

L-Edit 14 User Guide Section 4 1028


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_GetReturnCode

LUpi_GetReturnCode

int LUpi_GetReturnCode( void );

Description

Gets the UPI return code, which is global to L-Edit. It is reset to zero just before an outermost macro is
executed. An outermost macro is a macro that is not nested within another.

Note: A nested macro, such as an LC_Generate call within a T-Cell generator, will execute
its code without resetting the UPI return code.

The T-Cell mechanism in L-Edit checks the UPI return code after executing generator code for a T-Cell.
If the UPI return code is nonzero, L-Edit destroys the auto-generated cell and no instance is created.

Return Values

The value of the UPI return code.

Example

/* Check for a valid UPI return code before instancing a T-Cell. */


#include "lcomp.h"

void MetaGen_main(void)
{
/* Parameter variables */
LCell cellCurrent;
LLayer MetaLayer;

/* Other variables */
char szLayerName[128];
char* params[10]; /* array of pointers to character
strings */

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();
MetaLayer= (LLayer)LCell_GetParameter(cellCurrent, "MetaLayer");

/* Initialize L-Comp */
LC_InitializeState();
LC_CurrentCell = cellCurrent;

LLayer_GetName( MetaLayer, szLayerName, sizeof(szLayerName) );


/* parameter 1, name and value */
params[0] = "BoxLayer";params[1] = szLayerName;
/* end parameter list with NULL */
params[2] = NULL;
LC_Generate( "BoxGen", "My Auto Box", params );
if (LUpi_GetReturnCode() != 0)
return;
/* more layout here */
}

L-Edit 14 User Guide Section 4 1029


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_GetReturnCode

Version

Available in L-Edit 9.0 and later versions.

See Also

“LUpi_SetReturnCode” (page 1028)

L-Edit 14 User Guide Section 4 1030


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_SetUpdateDisplayMode

LUpi_SetUpdateDisplayMode

LStatus LUpi_SetUpdateDisplayMode( int val );

Description

Sets the update display mode for UPI. The update display mode determines whether the display is
updated during the execution of a macro or T-Cell generator.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

val Value of the update display mode. There are two possible states for
the update display mode:
ƒ When the update display mode is zero, L-Edit’s display is not
updated during the execution of a macro or T-Cell generator.
ƒ When the update display mode is nonzero, the display is updated
during macro execution.

Version

Available in L-Edit 9.0 and later versions.

See Also

“LUpi_GetUpdateDisplayMode” (page 1032), “LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1031


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LUpi_GetUpdateDisplayMode

LUpi_GetUpdateDisplayMode

int LUpi_GetUpdateDisplayMode( void );

Definition

Gets the current UPI update display mode. The update display mode determines whether the display is
updated during the execution of a macro or T-Cell generator.

Return Values

Returns the current display mode. When the update display mode is zero, L-Edit’s display is not
updated during the execution of a macro or T-Cell generator. When it is nonzero, the display is updated
during macro execution.

Version

Available in L-Edit 9.0 and later versions.

See Also

“LUpi_SetUpdateDisplayMode” (page 1031)

L-Edit 14 User Guide Section 4 1032


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LFormat

LFormat

const char* LFormat( const char* lpszFormat, ... );

Description

LFormat is similar to sprintf, but allocates and returns the storage for results. L-Edit deallocates this
storage automatically when the macro or T-Cell generator code finishes execution.

Return Values

Returns a pointer to the resulting text string if successful; otherwise, returns NULL.

Parameters

The first parameter, lpszFormat, is a format specification string. This is followed by the list of variables
whose values are to be inserted in the lpszFormat string.

Example

/* Generate a message using LFormat */


int Count = 5;
const char *Name = “Boxes”;
const char *Msg = LFormat( “There are %d %s.”, Count, Name );
LDialog_MsgBox(Msg);

Version

Available in L-Edit 9.0 and later versions.

L-Edit 14 User Guide Section 4 1033


Chapter 35: UPI Functions Reference Interface Functions UPI Functions
LFormatV

LFormatV

const char* LFormatV(const char* lpszFormat, char** argList );

Description

LFormatV is similar to vsprintf, but allocates and returns the storage for results. L-Edit deallocates this
storage automatically when the macro or T-Cell generator code finishes execution.

Return Values

Returns a pointer to the resulting text string if successful; otherwise, returns NULL.

Parameters

The first parameter, lpszFormat, is the format specification string.

The second parameter, argList, is an object representing the variable arguments list.

Example

void PrintfError(char* szFormat, ...)


{
va_list args;
va_start(args, szFormat);
LDialog_MsgBox(LFormatV(szFormat, args));
va_end (args);
}

Version

Available in L-Edit 9.0 and later versions.

L-Edit 14 User Guide Section 4 1034


Chapter 35: UPI Functions Reference Interface Functions Windows Functions

Windows Functions

ƒ “LWindow_GetVisible” (page 1036)


ƒ “LWindow_GetList” (page 1037)
ƒ “LWindow_GetNext” (page 1038)
ƒ “LWindow_IsLast” (page 1039)
ƒ “LWindow_MakeVisible” (page 1040)
ƒ “LWindow_Close” (page 1041)
ƒ “LWindow_CloseAll” (page 1042)
ƒ “LWindow_EditInPlacePushIn” (page 1043)
ƒ “LWindow_EditInPlacePopOut” (page 1044)
ƒ “LWindow_EditInPlacePopToTop” (page 1045)
ƒ “LWindow_GetType” (page 1046)
ƒ “LWindow_GetFile” (page 1047)
ƒ “LWindow_GetCell” (page 1048)
ƒ “LWindow_GetEditTransform” (page 1049)
ƒ “LWindow_GetTopCell” (page 1050)
ƒ “LWindow_GetParameters” (page 1051)
ƒ “LWindow_GetWindowHandle” (page 1052)
ƒ “LWindow_NewTextWindow” (page 1053)
ƒ “LWindow_LoadTextFile” (page 1054)
ƒ “LWindow_SaveToFile” (page 1055)
ƒ “LWindow_GetText” (page 1056)
ƒ “LWindow_SetText” (page 1057)
ƒ “LWindow_GetName” (page 1058)
ƒ “LWindow_SetName” (page 1059)
ƒ “LWindow_SetText” (page 1057)
ƒ “LWindow_GetName” (page 1058)
ƒ “LWindow_SetName” (page 1059)

L-Edit 14 User Guide Section 4 1035


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetVisible

LWindow_GetVisible

LWindow LWindow_GetVisible( void )

Description

Retrieves the active window.

Return Values

Returns an LWindow pointer to the active window; otherwise NULL.

Example

LWindow pWindow = LWindow_GetVisible();


if( NotAssigned( pWindow ) )
{
LDialog_AlertBox( "No windows are active." );
return;
}

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow” (page 1629),

L-Edit 14 User Guide Section 4 1036


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetList

LWindow_GetList

LWindow LWindow_GetList( void )

Description

Retrieves the first open window.

Return Values

Returns an LWindow pointer to the first open window. If no windows are open, returns NULL.

Example

// Count the number of layout windows that are open.


long nNumOfLayoutWindows = 0;
LWindow pWindow = NULL;
for( pWindow = LWindow_GetList(); Assigned(pWindow);
pWindow = LWindow_GetNext(pWindow) )
{
if( (LWindow_GetType(pWindow) == LAYOUT) ||
(LWindow_GetType(pWindow) == CROSS_SECTION) )
{
nNumOfLayoutWindows++;
}
}

Version

Available in L-Edit 9.0 and later versions.

See Also

“LWindow_GetList” (page 1037), “Windows Functions” (page 1035), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1037


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetNext

LWindow_GetNext

LWindow LWindow_GetNext( LWindow pWindow )

Description

Retrieves the next open window.

Return Values

Returns a pointer to the next open window. If pWindow is the last open window, returns NULL.

Parameters

pWindow Pointer to an L-Edit window.

Example

// Count the number of layout windows that are open.


long nNumOfLayoutWindows = 0;
LWindow pWindow = NULL;
for( pWindow = LWindow_GetList(); Assigned(pWindow);
pWindow = LWindow_GetNext(pWindow) )
{
if( (LWindow_GetType(pWindow) == LAYOUT) ||
(LWindow_GetType(pWindow) == CROSS_SECTION) )
{
nNumOfLayoutWindows++;
}
}

Version

Available in L-Edit 9.0 and later versions.

See Also

“LWindow_GetList” (page 1037), “Windows Functions” (page 1035), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1038


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_IsLast

LWindow_IsLast

int LWindow_IsLast( LWindow pWindow )

Description

Indicated if pWindow is the only currently open window in L-Edit.

Return Values

Returns 1 if pWindow is the only currently open window in L-Edit, 0 otherwise.

Parameters

pWindow Pointer to an L-Edit window.

Example

// Close all windows except one.


LWindow pWindow = LWindow_GetVisible();
while( Assigned(pWindow) )
{
if( LWindow_IsLast(pWindow) == 0 )
{
LWindow_Close( pWindow );
}
else
break;

pWindow = LWindow_GetVisible();
}

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1039


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_MakeVisible

LWindow_MakeVisible

LStatus LWindow_MakeVisible( LWindow pWindow )

Description

Sets the active window.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

LBadParameter - pWindow is NULL.

Parameters

pWindow Pointer to an L-Edit window.

Example

// Make the first layout window active.


LWindow pWindow = NULL;
for( pWindow = LWindow_GetList(); Assigned(pWindow);
pWindow = LWindow_GetNext(pWindow) )
{
if( (LWindow_GetType(pWindow) == LAYOUT) ||
(LWindow_GetType(pWindow) == CROSS_SECTION) )
{
LWindow_MakeVisible(pWindow);
break;
}
}

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LStatus” (page 1620),
“LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1040


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_Close

LWindow_Close

LStatus LWindow_Close( LWindow pWindow );

Description

Closes the specified window.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

LBadParameter - pWindow is NULL.

Parameters

pWindow Window to be closed.

Example

// Close the active window.


LWindow pWindow = LWindow_GetVisible();
if( Assigned( pWindow ) )
{
LWindow_Close( pWindow );
}

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow_CloseAll” (page
1042), “LStatus” (page 1620), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1041


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_CloseAll

LWindow_CloseAll

LStatus LWindow_CloseAll( void )

Description

Closes all open windows.

Return Values

LStatusOK.

Example

// Close all windows.


LWindow_CloseAll();

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow_Close” (page
1041), “LStatus” (page 1620), “LWindow” (page 1629),

L-Edit 14 User Guide Section 4 1042


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_EditInPlacePushIn

LWindow_EditInPlacePushIn

LStatus LWindow_EditInPlacePushIn( LWindow pWindow, LInstance pInstance );

Description

Set the instance that is being edited in place.

L-Edit 14 User Guide Section 4 1043


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_EditInPlacePopOut

LWindow_EditInPlacePopOut

LStatus LWindow_EditInPlacePopOut( LWindow pWindow );

Description

Pop out the current editing level.

L-Edit 14 User Guide Section 4 1044


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_EditInPlacePopToTop

LWindow_EditInPlacePopToTop

LStatus LWindow_EditInPlacePopToTop( LWindow pWindow );

Description

Pop all the way to the top of the edit-in-place stack.

L-Edit 14 User Guide Section 4 1045


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetType

LWindow_GetType

LWindowType LWindow_GetType( LWindow pWindow )

Description

Retrieves the window type.

Return Values

Returns the type of the specified window.

Parameters

pWindow Pointer to an L-Edit window.

Example

// Count the number of layout windows that are open.


long nNumOfLayoutWindows = 0;
LWindow pWindow = NULL;
for( pWindow = LWindow_GetList(); Assigned(pWindow); pWindow =
LWindow_GetNext(pWindow) )
{
if( (LWindow_GetType(pWindow) == LAYOUT) ||
(LWindow_GetType(pWindow) == CROSS_SECTION) )
{
nNumOfLayoutWindows++;
}
}

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindowType” (page 1630),
“LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1046


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetFile

LWindow_GetFile

LFile LWindow_GetFile( LWindow pWindow );

Description

Retrieves the TDB file associated with a window.

Return Values

Returns a pointer to the TDB file of the specified layout window. If the window is not a layout,
cross-section, or Design Navigator window, then NULL is returned.

Parameters

pWindow Pointer to an L-Edit window.

Example

// Get TDB file of the active window.


LWindow pWindow = LWindow_GetVisible();
if( Assigned( pWindow ) )
{
LFile pTDBFile = LWindow_GetFile( pWindow );
if( Assigned( pTDBFile ) )
{
// More Processing on the edit cell of the active window.
// ...
}
}

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow_GetCell” (page
1048), “LWindow” (page 1629), “LFile” (page 1578)

L-Edit 14 User Guide Section 4 1047


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetCell

LWindow_GetCell

LCell LWindow_GetCell( LWindow pWindow )

Description

Retrieves the edit cell of a window. This is used to get the current cell that is being edited if the user is
editing in place in this window.

Return Values

Returns a pointer to the edit cell of the specified layout window. If the window is not a layout window,
then NULL is returned.

Example

// Get the edit cell of the active window.


LWindow pWindow = LWindow_GetVisible();
if( Assigned( pWindow ) )
{
LCell pCell = LWindow_GetCell( pWindow );
if( Assigned( pCell ) )
{
// More Processing on the edit cell of the active window.
// ...
}
}

Parameters

pWindow Pointer to an L-Edit window.

See Also

“Interface Functions” (page 983), “Cell Functions” (page 1162), “Windows Functions” (page 1035),
“LCell” (page 1547), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1048


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetEditTransform

LWindow_GetEditTransform

LStatus LWindow_GetEditTransform( LWindow pWindow,


LTransform_Ex99 *pEditTransform );

Description

Retrieves the edit transform for the specified window, if that window is a layout window. The edit
transform is the transformation from the cell, which is being edited to the top-level cell. If the user is
not editing in place in this window, then the edit transform will be the unit transform.

Return Values

If no errors occur, it returns LStatusOK. Returns LBadParameters if pWindow or pEditTransform


is NULL or pWindow is not a layout window.

Example

Parameters

pWindow Pointer to an L-Edit layout window.


pEditTransform Pointer to the transform which will be set to the edit transform of the
specified window.

Version

Available in L-Edit 10.1 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “Transformation Functions”
(page 1528),“LStatus” (page 1620), “LWindow” (page 1629), “LTransform_Ex99” (page 1627)

L-Edit 14 User Guide Section 4 1049


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetTopCell

LWindow_GetTopCell

LCell LWindow_GetTopCell( LWindow pWindow )

Description

Retrieves the top-level cell of a window. This is used to get the top-level cell if the user is editing in
place in this window.

Return Values

Returns a pointer to the top-level cell of the specified layout window. If the window is not a layout
window, then NULL is returned.

Example

Parameters

pWindow Pointer to an L-Edit window.

Version

Available in L-Edit 10.1 and later versions.

See Also

“Interface Functions” (page 983), “Cell Functions” (page 1162), “Windows Functions” (page 1035),
“LCell” (page 1547), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1050


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetParameters

LWindow_GetParameters

void LWindow_GetParameters(
void** phAppInst,
void** phParentWnd,
void** phUserDll )

Description

Retrieves the parameters of the L-Edit application window. These parameters can be used with the
Windows API. This call is only supported for compiled DLL macros.

In the example below, the UPI_Entry_Point function gets the L-Edit application window parameters.
These parameters are used by MainFunction to interface with the Windows API.

Parameters

HINSTANCE *phAppInst Pointer to application instance.


HWND *phParentWnd Pointer to parent window handle.
HINSTANCE *phUserDll Pointer to DLL handle.

Example

HINSTANCE hInst = NULL;


HWND hWnd = NULL;
HINSTANCE hLib = NULL;
LWindow_GetParameters(( void**)&hInst, (void**)&hWnd, (void**)&hLib );

char szModuleName[255];
GetModuleFileName( (HMODULE)hLib, szModuleName, sizeof(szModuleName) );

// More Processing
// ...

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035)

L-Edit 14 User Guide Section 4 1051


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetWindowHandle

LWindow_GetWindowHandle

void* LWindow_GetWindowHandle( LWindow pWindow )

Description

Retrieves the window handle to an L-Edit window, creating an interface to the Windows API. This call
is only supported for compiled DLL macros.

Return Values

Returns a windows handle, cast as a void pointer, for the window pointed to by pWindow. To use the
window handle, it must be cast to a HWND data type, as shown in the example.

Parameters

pWindow Pointer to an L-Edit window.

Example

LWindow pWindow = LWindow_GetVisible();


if( Assigned( pWindow ) )
{
void* pvHWnd = LWindow_GetWindowHandle( pWindow );

//Convert the Windows Handle from a void pointer to a HWND


HWND phWnd = (HWND) (pvHWnd);

// Use the Windows API to get the text in the title bar
char szTitleText[256];
GetWindowText( phWnd, szTitleText, sizeof(szTitleText) );

// More processing
// ...
}

Version

Available in L-Edit 9.0 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1052


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_NewTextWindow

LWindow_NewTextWindow

LWindow LWindow_NewTextWindow( const char* cszFileName,


LWindowType eWindowType );

Description

Creates a new text window in L-Edit of the type eWindowType. The type indicates the file type for
syntax highlighting. If szFileName is NULL, then a unique filename will be created.

Return Values

Returns the LWindow pointer to the new window. Returns NULL if eWindowType is not TEXT, CODE,
LW_SPICE, or LW_LOG type.

Parameters

szFileName File name including path of the new text file. If szFileName is
NULL, then a unique filename will be created.

eWindowType Window type to indicate the file type for syntax highlighting.

Example

LCell pCell = LCell_GetVisible();


LFile pTDBFile = LCell_GetFile( pCell );
if( Assigned( pCell ) && Assigned( pTDBFile ))
{
char szCellName[MAX_CELL_NAME];
LCell_GetName( pCell, szCellName, sizeof(szCellName) );

char szTDBFileName[MAX_TDBFILE_NAME];
LFile_GetName( pTDBFile, szTDBFileName, sizeof( szTDBFileName ) );

const char* pszText = LFormat( "Active Cellname = \"%s\".\nActive TDB


Filename = \"%s\".", szCellName, szTDBFileName );

LWindow pWindow = LWindow_NewTextWindow( NULL, TEXT );


LWindow_SetText( pWindow, pszText );
if( LWindow_SaveToFile( pWindow, NULL ) == LStatusOK )
{
LWindow_Close( pWindow );
}
}

Version

Available in L-Edit 10.0 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow” (page 1629),
“LWindowType” (page 1630)

L-Edit 14 User Guide Section 4 1053


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_LoadTextFile

LWindow_LoadTextFile

LWindow LWindow_LoadTextFile( const char* cszFileName,


LWindowType eWindowType );

Description

Loads a text file into a new text window in L-Edit. The type indicates the file type for syntax
highlighting.

Return Values

Returns the LWindow pointer to the new window. If an error occurs, NULL is returned due to one of the
following possible errors:

ƒ szFileName is NULL.
ƒ eWindowType is not TEXT, CODE, LW_SPICE, or LW_LOG type.

Parameters

szFileName Name of the file to load including path.


eWindowType Window type to indicate the file type for syntax highlighting.

Example

char szFileName[] = "C:\\MyData\\Results.dat";

LWindow pWindow = LWindow_LoadTextFile( szFileName, TEXT );

if( LWindow_MakeVisible( pWindow ) == LStatusOK )


{
// More Processing
// ...
}

Version

Available in L-Edit 10.0 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow” (page 1629),
“LWindowType” (page 1630)

L-Edit 14 User Guide Section 4 1054


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_SaveToFile

LWindow_SaveToFile

LStatus LWindow_SaveToFile( LWindow pWindow, const char* cszFileName );

Description

Saves an L-Edit text window to a disk file. The type indicates the file type for syntax highlighting.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

ƒ LBadParameter - pWindow is NULL.


ƒ LBadParameter - szFileName is NULL.

Parameters

szFileName Name of the file to load including path.


eWindowType Window type to indicate the file type for syntax highlighting.

Example

LCell pCell = LCell_GetVisible();


LFile pTDBFile = LCell_GetFile( pCell );
if( Assigned( pCell ) && Assigned( pTDBFile ) )
{
char szCellName[MAX_CELL_NAME];
LCell_GetName( pCell, szCellName, sizeof( szCellName ) );

char szTDBFileName[MAX_TDBFILE_NAME];
LFile_GetName( pTDBFile, szTDBFileName, sizeof( szTDBFileName ) );

const char* pszText = LFormat( "Active Cellname = \"%s\".\nActive TDB


Filename = \"%s\".", szCellName, szTDBFileName );

LWindow pWindow = LWindow_NewTextWindow( NULL, TEXT );


LWindow_SetText( pWindow, pszText );
if( LWindow_SaveToFile( pWindow, NULL ) == LStatusOK )
LWindow_Close( pWindow );
}

Version

Available in L-Edit 10.0 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LStatus” (page 1620),
“LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1055


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetText

LWindow_GetText

unsigned int LWindow_GetText( LWindow pWindow, char* szBuffer,


unsigned int nBufferLength)

Description

Retreives the contents of a text window.

Return Values

ƒ If buffer is large enough, then the number of bytes copied to buffer, including terminating zero, is
returned.
ƒ If the buffer is too small, then the size of needed buffer is returned.
ƒ If pWindow is NULL or it is not a text window, then 0 is returned.

Parameters

pWindow Pointer to an L-Edit window.


szBuffer Buffer string to store the context of the text window in.
nBufferLength Size of the buffer.

Example

LWindow pWindow = LWindow_GetVisible();


if( Assigned( pWindow ) )
{
char* pszText = NULL;
unsigned int nTextSize = LWindow_GetText( pWindow, pszText, 0 );

pszText = (char*)malloc( nTextSize*sizeof(char) );

LWindow_GetText( pWindow, pszText, nTextSize );

// More Processing
// ...

free( pszText );
}

Version

Available in L-Edit 10.0 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1056


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_SetText

LWindow_SetText

LStatus LWindow_SetText( LWindow pWindow, const char* cszText )

Description

Sets the contents of a text window.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

ƒ LBadParameter - pWindow is NULL.


ƒ LBadParameter - szText is NULL.
ƒ LBadParameter - pWindow is not a text window.

Parameters

pWindow Pointer to an L-Edit window.


szText Text to put in the L-Edit text window.

Example

LCell pCell = LCell_GetVisible();


LFile pTDBFile = LCell_GetFile( pCell );
if( Assigned( pCell ) && Assigned( pTDBFile ) )
{
char szCellName[MAX_CELL_NAME];
LCell_GetName( pCell, szCellName, sizeof( szCellName ) );

char szTDBFileName[MAX_TDBFILE_NAME];
LFile_GetName( pTDBFile, szTDBFileName, sizeof(szTDBFileName) );

const char* pszText = LFormat( "Active Cellname = \"%s\".\nActive TDB


Filename = \"%s\".", szCellName, szTDBFileName );

LWindow pWindow = LWindow_NewTextWindow( NULL, TEXT );


LWindow_SetText( pWindow, pszText );
if(LWindow_SaveToFile( pWindow, NULL ) == LStatusOK )
LWindow_Close( pWindow );
}

Version

Available in L-Edit 10.0 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LStatus” (page 1620),
“LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1057


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_GetName

LWindow_GetName

unsigned int LWindow_GetName( LWindow pWindow, char* szFileName, unsigned


int nBufferLength );

Description

Retrieves the filename of a text window.

Return Values

ƒ If buffer is large enough, then the number of bytes copied to buffer, including terminating zero, is
returned.
ƒ If the buffer is too small, then the size of needed buffer is returned.
ƒ If pWindow is NULL or it is not a text window, then 0 is returned.

Parameters

pWindow Pointer to an L-Edit window.


szFileName Buffer string to store the filename.
nBufferLength Size of the buffer.

Example

Version

Available in L-Edit 10.1 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow_SetName” (page
1059), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1058


Chapter 35: UPI Functions Reference Interface Functions Windows Functions
LWindow_SetName

LWindow_SetName

LStatus LWindow_SetName( LWindow pWindow, const char* cszFileName );

Description

Sets the filename of a text window.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

ƒ LBadParameter - pWindow is NULL.


ƒ LBadParameter - szFileName is NULL.
ƒ LBadParameter - pWindow is not a text window.

Parameters

pWindow Pointer to an L-Edit window.


szFileName Filename for the text window.

Example

Version

Available in L-Edit 10.1 and later versions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow_GetName” (page
1058), “LStatus” (page 1620), “LWindow” (page 1629)

L-Edit 14 User Guide Section 4 1059


Chapter 35: UPI Functions Reference Database Functions

Database Functions

Database functions allow you to create and manipulate a design database. These functions are grouped
in the following categories:

ƒ “Application Functions” (page 1061)


ƒ “File Functions” (page 1100)
ƒ “Cell Functions” (page 1162)
ƒ “Instance Functions” (page 1223)
ƒ “Entity Functions” (page 1244)
ƒ “Object Functions” (page 1270)
ƒ “Selection Functions” (page 1368)
ƒ “Layer Functions” (page 1400)
ƒ “Technology Setup Functions” (page 1452)
ƒ “Import/Export Functions” (page 1470)
ƒ “DRC Functions” (page 1477)
ƒ “Extract Functions” (page 1498)
ƒ “Core Functions” (page 1511)
ƒ “Utility Functions” (page 1517)

L-Edit 14 User Guide Section 4 1060


Chapter 35: UPI Functions Reference Database Functions Application Functions

Application Functions

“LApp_GetVersion” (page 1072) “LApp_GetFullVersion” (page 1074)

“LApp_GetVersionDateTime” (page 1073) “LApp_SetExportMaskDataExportHiddenOb


jects” (page 1084)

“LApp_GetCacheInstances” (page 1062) “LApp_SetCacheInstances” (page 1082)

“LApp_GetCacheInstancesSmallerThanNu “LApp_SetCacheInstancesSmallerThanNum
mOfPixels” (page 1063) OfPixels” (page 1083)

“LApp_GetFillObjectsDuringDrawing” (page “LApp_SetFillObjectsDuringDrawing” (page


1064) 1085)
“LApp_GetInterruptableRendering” (page “LApp_SetInterruptableRendering” (page
1070) 1091)
“LApp_GetRedrawAllWindows” (page 1071) “LApp_SetRedrawAllWindows” (page 1092)

“LApp_GetHideSmallObjects” (page 1069) “LApp_SetHideSmallObjects” (page 1090)

“LApp_GetHideObjectsSmallerThanNumOf “LApp_SetHideObjectsSmallerThanNumOfP
Pixels” (page 1067) ixels” (page 1088)

“LApp_GetHideInstanceInsidesIfLessThanN “LApp_SetHideInstanceInsidesIfLessThanN
umOfPixels” (page 1065) umOfPixels” (page 1086)

“LApp_GetHideSmallInstanceInsides” (page “LApp_SetHideSmallInstanceInsides” (page


1068) 1089)
“LApp_GetShowDesignWhileRendering” “LApp_SetShowDesignWhileRendering”
(page 1075) (page 1093)
“LApp_GetShowDesignFirstTimeIncrement “LApp_SetShowDesignTimeIncrement”
” (page 1076) (page 1094)
“LApp_GetShowDesignNextTimeIncrement
” (page 1077)
“LApp_GetRenderingUseCPUForColorMixin “LApp_SetRenderingUseCPUForColorMixin
g” (page 1078) g” (page 1095)

“LApp_GetRenderingUseMMX” (page 1079) “LApp_SetRenderingUseMMX” (page 1096)

“LApp_GetRenderingUsePatBltForPatterns “LApp_SetRenderingUsePatBltForPatterns”
” (page 1080) (page 1097)
“LApp_GetAllowSelectionOnLockedLayers” “LApp_SetAllowSelectionOnLockedLayers”
(page 1081) (page 1098)
“LApp_ExitAfterCompletion” (page 1099)

L-Edit 14 User Guide Section 4 1061


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetCacheInstances

LApp_GetCacheInstances

LBoolean LApp_GetCacheInstances( void );

Description

Retrieves Cache Instances flag.

Return Values

LTRUE or LFALSE depending on Cache Instances flag.

Example

LBoolean bCacheInst = LApp_GetCacheInstances();

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetCacheInstancesSmallerThanNumOfPixels” (page 1063)

L-Edit 14 User Guide Section 4 1062


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetCacheInstancesSmallerThanNumOfPixels

LApp_GetCacheInstancesSmallerThanNumOfPixels

int LApp_GetCacheInstancesSmallerThanNumOfPixels( void );

Description

Retrieves maximum size of cached instances, in pixels.

Return Values

Returns the maximum size, in pixels, of cached instances.

Example

int nCacheInstSize = LApp_GetCacheInstancesSmallerThanNumOfPixels();

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetCacheInstances” (page 1062)

L-Edit 14 User Guide Section 4 1063


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetFillObjectsDuringDrawing

LApp_GetFillObjectsDuringDrawing

LBoolean LApp_GetFillObjectsDuringDrawing( void );

Description

Retrieves Fill Objects During Drawing flag.

Return Values

LTRUE or LFALSE depending on Fill Objects During Drawing flag.

Example

LBoolean bFODD = LApp_GetFillObjectsDuringDrawing();

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_SetFillObjectsDuringDrawing” (page 1085)

L-Edit 14 User Guide Section 4 1064


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetHideInstanceInsidesIfLessThanNumOfPixels

LApp_GetHideInstanceInsidesIfLessThanNumOfPixels

LStatus LApp_GetHideInstanceInsidesIfLessThanNumOfPixels( LPoint *pptPixelSize


);

Description

Gets the pixel size for hiding instance inside. This function stores the results in pptPixelSize. If an
instance is smaller than pptPixelSize then its insides are hidden. This gets the Hide instance
insides if less than--Horizontal and Vertical parameter on the Setup
Application > Rendering tab.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

LBadParameter—pptPixelSize is NULL.

Parameters

pptPixelSize Horizontal number of pixels and vertical number of pixels.

Example

// Save the setting.


LPoint ptCurrentPixelSize;
if( LApp_GetHideInstanceInsidesIfLessThanNumOfPixels(
&ptCurrentPixelSize ) == LStatusOK )
{
LPoint ptNewPixelSize;

ptNewPixelSize.x = 5;
ptNewPixelSize.y = 5;
if( LApp_SetHideInstanceInsidesIfLessThanNumOfPixels(
&ptNewPixelSize ) == LStatusOK )
{
// More Processing
// ...

// Reset the setting.

LApp_SetHideInstanceInsidesIfLessThanNumOfPixels(&ptCurrentPixelSize);
}
}

Version

Available in L-Edit 8.3 and later versions.

L-Edit 14 User Guide Section 4 1065


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetHideInstanceInsidesIfLessThanNumOfPixels

See Also

“Application Functions” on page 1061, “LStatus” (page 1620), “LBoolean” (page 1544),
“LApp_GetHideInstanceInsidesIfLessThanNumOfPixels” (page 1065),
“LApp_SetHideSmallInstanceInsides” (page 1089),
“LApp_SetHideInstanceInsidesIfLessThanNumOfPixels” (page 1086).

L-Edit 14 User Guide Section 4 1066


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetHideObjectsSmallerThanNumOfPixels

LApp_GetHideObjectsSmallerThanNumOfPixels

int LApp_GetHideObjectsSmallerThanNumOfPixels( void );

Description

Gets the pixel size for hiding objects. If an object is smaller than the returned number of pixels then it is
not rendered. This gets the Hide objects smaller than--Pixels parameter on the Setup
Application > Rendering tab (see “Rendering” on page 69).

Return Values

The number of pixels below which objects will be hidden.

Example

// Save the setting.


int iCurrentPixelSize = LApp_GetHideObjectsSmallerThanNumOfPixels();

if( LApp_SetHideObjectsSmallerThanNumOfPixels( 5 ) == LStatusOK )


{
// More Processing
// ...

// Reset the setting.


LApp_SetHideObjectsSmallerThanNumOfPixels( iCurrentPixelSize );
}

Version

Available in L-Edit 8.3 and later versions.

See Also

“Application Functions” on page 1061, “LStatus” (page 1620),


“LApp_GetHideSmallObjects” (page 1069), “LApp_SetHideSmallObjects” (page 1090),
“LApp_SetHideObjectsSmallerThanNumOfPixels” (page 1088).

L-Edit 14 User Guide Section 4 1067


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetHideSmallInstanceInsides

LApp_GetHideSmallInstanceInsides

LBoolean LApp_GetHideSmallInstanceInsides( void );

Description

Gets the flag indicating whether to hide small instance insides. This gets the Hide instance insides if
less than application setting on the Setup Application > Rendering tab (see “Rendering” on page 69).

Return Values

LTRUE if the instance insides less than a certain pixel size are hidden, LFALSE to show them.

Example

// Save the setting.


LBoolean bHideInsides = LApp_GetHideSmallInstanceInsides();

LApp_SetHideSmallInstanceInsides( LTRUE );
// More Processing
// ...

// Reset the setting.


LApp_SetHideSmallInstanceInsides( bHideInsides );

Version

Available in L-Edit 8.3 and later versions.

See Also

“Application Functions” on page 1061, “LApp_SetHideSmallInstanceInsides” (page 1089),


“LApp_GetHideInstanceInsidesIfLessThanNumOfPixels” (page 1065),
“LApp_SetHideInstanceInsidesIfLessThanNumOfPixels” (page 1086), “LStatus” (page 1620),
“LBoolean” (page 1544).

L-Edit 14 User Guide Section 4 1068


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetHideSmallObjects

LApp_GetHideSmallObjects

LBoolean LApp_GetHideSmallObjects( void );

Description

Gets the flag indicating whether to hide small objects. This gets the Hide objects smaller than
application setting on the Setup Application > Rendering tab (see “Rendering” on page 69).

Return Values

LTRUE if the objects smaller than a certain pixel size are hidden, LFALSE to show them.

Example

// Save the setting.


LBoolean bHideObjects = LApp_GetHideSmallObjects();

LApp_SetHideSmallObjects( LTRUE );
// More Processing
// ...

// Reset the setting.


LApp_SetHideSmallObjects( bHideObjects );

Version

Available in L-Edit 8.3 and later versions.

See Also

“Application Functions” on page 1061, “LApp_SetHideSmallObjects” (page 1090),


“LApp_GetHideObjectsSmallerThanNumOfPixels” (page 1067),
“LApp_SetHideObjectsSmallerThanNumOfPixels” (page 1088), “LStatus” (page 1620),
“LBoolean” (page 1544).

L-Edit 14 User Guide Section 4 1069


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetInterruptableRendering

LApp_GetInterruptableRendering

LBoolean LApp_GetInterruptableRendering( void );

Description

Retrieves Interruptable Rendering flag.

Return Values

LTRUE or LFALSE depending on Interruptable Rendering flag.

Example

LBoolean bInterruptable = LApp_GetInterruptableRendering();

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_SetInterruptableRendering” (page 1091)

L-Edit 14 User Guide Section 4 1070


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetRedrawAllWindows

LApp_GetRedrawAllWindows

LBoolean LApp_GetRedrawAllWindows( void );

Description

Retrieves Redraw All Windows flag.

Return Values

LTRUE or LFALSE depending on Redraw All Windows flag.

Example

LBoolean bRedrawAll = LApp_GetRedrawAllWindows();

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_SetRedrawAllWindows” (page 1092)

L-Edit 14 User Guide Section 4 1071


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetVersion

LApp_GetVersion

LStatus LApp_GetVersion( char *VersionString, int BufferLen );

Description

Writes the current L-Edit version number to a string.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadParameters VersionString is NULL.

LBufferTooSmall The buffer size specified by BufferLen is not large enough to store
the version string.

Parameters

VersionString The string buffer in which to store the version number.


BufferLen Size of the VersionString string buffer.

Example

/* This example displays the current L-Edit version and date/time information
in a message box */

char Version[256];
char VersionDateTime[256];
if( (LApp_GetVersion(Version, 255) == LStatusOK) ) &&
(LApp_GetVersionDateTime(VersionDateTime, 255) == LStatusOK) )
{
char LEditFullVersion[600];
sprintf( LEditFullVersion, “L-Edit %s %s”, Version, VersionDateTime );
LDialog_MsgBox( LEditFullVersion );
}

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetVersionDateTime” (page 1073), “LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1072


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetVersionDateTime

LApp_GetVersionDateTime

LStatus LApp_GetVersionDateTime( char *VersionString, int BufferLen );

Description

Writes the date and time of the current L-Edit version to the specified string.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadParameters VersionString is NULL.

LBufferTooSmall The buffer size specified by BufferLen is not large enough to store
the version string.

Parameters

VersionString The string buffer in which to store the version date and time.
BufferLen Size of the VersionString string buffer.

Example

/* This example displays the current L-Edit version and date/time information
in a message box */

char szVer[256];
char szDate[256];
if( ( LApp_GetVersion( szVer, sizeof(szVer) ) == LStatusOK ) ) &&
( LApp_GetVersionDateTime( szDate, sizeof( szDate ) ) == LStatusOK ) )
{
char LEditFullVersion[600];
sprintf( LEditFullVersion, “L-Edit %s %s”, szVer, szDate );
LDialog_MsgBox( LEditFullVersion );
}

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetVersion” (page 1072), “LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1073


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetFullVersion

LApp_GetFullVersion

LStatus LApp_GetFullVersion( char* szVersionString, int nBufferLen );

Description

L-Edit 14 User Guide Section 4 1074


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetShowDesignWhileRendering

LApp_GetShowDesignWhileRendering

LBoolean LApp_GetShowDesignWhileRendering( void );

L-Edit 14 User Guide Section 4 1075


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetShowDesignFirstTimeIncrement

LApp_GetShowDesignFirstTimeIncrement

int LApp_GetShowDesignFirstTimeIncrement( void );

L-Edit 14 User Guide Section 4 1076


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetShowDesignNextTimeIncrement

LApp_GetShowDesignNextTimeIncrement

int LApp_GetShowDesignNextTimeIncrement( void );

L-Edit 14 User Guide Section 4 1077


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetRenderingUseCPUForColorMixing

LApp_GetRenderingUseCPUForColorMixing

LBoolean LApp_GetRenderingUseCPUForColorMixing( void );

L-Edit 14 User Guide Section 4 1078


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetRenderingUseMMX

LApp_GetRenderingUseMMX

LBoolean LApp_GetRenderingUseMMX( void );

L-Edit 14 User Guide Section 4 1079


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetRenderingUsePatBltForPatterns

LApp_GetRenderingUsePatBltForPatterns

LBoolean LApp_GetRenderingUsePatBltForPatterns( void );

L-Edit 14 User Guide Section 4 1080


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_GetAllowSelectionOnLockedLayers

LApp_GetAllowSelectionOnLockedLayers

LBoolean LApp_GetAllowSelectionOnLockedLayers( void );

L-Edit 14 User Guide Section 4 1081


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetCacheInstances

LApp_SetCacheInstances

LStatus LApp_SetCacheInstances( LBoolean bCacheInstances );

Description

Sets Cache Instances flag.

Return Values

Returns LStatusOK if successful.

Parameters

bCacheInstances LTRUE or LFALSE

Example

LApp_SetCacheInstances(LFALSE);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetCacheInstances” (page 1062),


“LApp_GetCacheInstancesSmallerThanNumOfPixels” (page 1063),
“LApp_SetCacheInstancesSmallerThanNumOfPixels” (page 1083)

L-Edit 14 User Guide Section 4 1082


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetCacheInstancesSmallerThanNumOfPixels

LApp_SetCacheInstancesSmallerThanNumOfPixels

LStatus LApp_SetCacheInstancesSmallerThanNumOfPixels( int iPixelSize );

Description

Sets the maximum number of pixels at which an instance will be cached.

Return Values

Returns LStatusOK if successful.

Parameters

iPixelSize The number of pixels at which an instance becomes cached.

Example

LApp_SetCacheInstancesSmallerThanNumOfPixels( 10 );

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetCacheInstances” (page 1062), “LApp_SetCacheInstances” (page 1082),


“LApp_GetCacheInstancesSmallerThanNumOfPixels” (page 1063)

L-Edit 14 User Guide Section 4 1083


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetExportMaskDataExportHiddenObjects

LApp_SetExportMaskDataExportHiddenObjects

LStatus LApp_SetExportMaskDataIgnoreHiddenObjects(LBoolean bOption)

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadParameters—is NULL.

Version

Available in L-Edit 8.2 and later versions.

See Also

“LStatus” (page 1620).

L-Edit 14 User Guide Section 4 1084


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetFillObjectsDuringDrawing

LApp_SetFillObjectsDuringDrawing

LStatus LApp_SetFillObjectsDuringDrawing( LBoolean bFillObjectDuringDrawing );

Description

Sets Fill Objects During Drawing flag.

Return Values

Returns LStatusOK if successful.

Parameters

bFillObjectDuringDrawing LTRUE or LFALSE

Example

LApp_SetFillObjectDuringDrawing( LFALSE );

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetFillObjectsDuringDrawing” (page 1064)

L-Edit 14 User Guide Section 4 1085


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetHideInstanceInsidesIfLessThanNumOfPixels

LApp_SetHideInstanceInsidesIfLessThanNumOfPixels

LStatus LApp_SetHideInstanceInsidesIfLessThanNumOfPixels(
const LPoint *pptPixelSize );

Description

Sets the pixel size for hiding instance inside. If an instance is smaller than pptPixelSize then its
insides are hidden. This sets the Hide instance insides if less than--Horizontal and
Vertical parameter on the Setup Application > Rendering tab (see “Rendering” on page 69).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

LBadParameter—pptPixelSize is NULL, pptPixelSize->x < 0, pptPixelSize->y < 0,


pptPixelSize->x > 32000, or pptPixelSize->y > 32000.

Parameters

pptPixelSize Horizontal number of pixels and vertical number of pixels.

Example

// Save the setting.


LPoint ptCurrentPixelSize;
if( LApp_GetHideInstanceInsidesIfLessThanNumOfPixels(
&ptCurrentPixelSize ) == LStatusOK )
{
LPoint ptNewPixelSize;

ptNewPixelSize.x = 5;
ptNewPixelSize.y = 5;
if( LApp_SetHideInstanceInsidesIfLessThanNumOfPixels(
&ptNewPixelSize) == LStatusOK )
{
// More Processing
// ...

// Reset the setting.

LApp_SetHideInstanceInsidesIfLessThanNumOfPixels(&ptCurrentPixelSize);
}
}

Version

Available in L-Edit 8.3 and later versions.

L-Edit 14 User Guide Section 4 1086


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetHideInstanceInsidesIfLessThanNumOfPixels

See Also

“Application Functions” on page 1061, “LStatus” (page 1620), “LBoolean” (page 1544),
“LApp_GetHideInstanceInsidesIfLessThanNumOfPixels” (page 1065),
“LApp_GetHideSmallInstanceInsides” (page 1068),
“LApp_SetHideSmallInstanceInsides” (page 1089),
“LApp_SetHideInstanceInsidesIfLessThanNumOfPixels” (page 1086).

L-Edit 14 User Guide Section 4 1087


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetHideObjectsSmallerThanNumOfPixels

LApp_SetHideObjectsSmallerThanNumOfPixels

LStatus LApp_SetHideObjectsSmallerThanNumOfPixels( int iPixelSize );

Description

Sets the pixel size for hiding objects. If an object is smaller than iPixelSize then it is not rendered.
This sets the Hide objects smaller than--Pixels parameter on the Setup
Application > Rendering tab (see “Rendering” on page 69).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

LBadParameter —iPixelSize < 0 or iPixelSize > 32000.

Parameters

iPixelSize The number of pixels below which objects will be hidden.

Example

// Save the setting.


int iCurrentPixelSize = LApp_GetHideObjectsSmallerThanNumOfPixels();

if( LApp_SetHideObjectsSmallerThanNumOfPixels( 5 ) == LStatusOK )


{
// More Processing
// ...

// Reset the setting.


LApp_SetHideObjectsSmallerThanNumOfPixels( iCurrentPixelSize );
}

Version

Available in L-Edit 8.3 and later versions.

See Also

“Application Functions” on page 1061, “LApp_GetHideSmallObjects” (page 1069),


“LApp_SetHideSmallObjects” (page 1090),
“LApp_GetHideObjectsSmallerThanNumOfPixels” (page 1067), “LStatus” (page 1620).

L-Edit 14 User Guide Section 4 1088


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetHideSmallInstanceInsides

LApp_SetHideSmallInstanceInsides

LStatus LApp_SetHideSmallInstanceInsides( LBoolean bHideSmallInstanceInsides


);

Description

Sets the flag indicating whether to hide small instance insides. This sets the Hide instance insides
if less than--Pixels application parameter on the Setup Application > Rendering tab (see
“Rendering” on page 69).

Return Values

Always LStatusOK.

Parameters

bHideSmallInstanceInsides LTRUE to hide instance insides, LFALSE to show instance insides.

Example

// Save the setting.

LBoolean bHideInsides = LApp_GetHideSmallInstanceInsides();

LApp_SetHideSmallInstanceInsides(LTRUE);
// More Processing
// ...

// Reset the setting.


LApp_SetHideSmallInstanceInsides( bHideInsides );

Version

Available in L-Edit 8.3 and later versions.

See Also

“Application Functions” on page 1061, “LApp_GetHideSmallInstanceInsides” (page 1068),


“LApp_GetHideInstanceInsidesIfLessThanNumOfPixels” (page 1065),
“LApp_SetHideInstanceInsidesIfLessThanNumOfPixels” (page 1086), “LStatus” (page 1620),
“LBoolean” (page 1544).

L-Edit 14 User Guide Section 4 1089


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetHideSmallObjects

LApp_SetHideSmallObjects

LStatus LApp_SetHideSmallObjects( LBoolean bHideSmallObjects );

Description

Sets the flag indicating whether to hide small objects. This sets the Hide objects smaller than
application parameter on the Setup Application > Rendering tab (see “Rendering” on page 69).

Return Values

Always LStatusOK.

Parameters

bHideSmallObjects LTRUE if the objects smaller than a certain pixel size are hidden,
LFALSE to show them.

Example

// Save the setting.


LBoolean bHideObjects = LApp_GetHideSmallObjects();

LApp_SetHideSmallObjects( LTRUE );
// More Processing
// ...

// Reset the setting.


LApp_SetHideSmallObjects( bHideObjects );

Version

Available in L-Edit 8.3 and later versions.

See Also

“Application Functions” on page 1061, “LApp_GetHideSmallObjects” (page 1069),


“LApp_GetHideObjectsSmallerThanNumOfPixels” (page 1067),
“LApp_SetHideObjectsSmallerThanNumOfPixels” (page 1088), “LStatus” (page 1620),
“LBoolean” (page 1544).

L-Edit 14 User Guide Section 4 1090


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetInterruptableRendering

LApp_SetInterruptableRendering

LStatus LApp_SetInterruptableRendering( LBoolean bInterruptRendering );

Description

Sets the Interruptable Rendering flag.

Return Values

Always LStatusOK..

Parameters

bInterruptRendering LTRUE if trendering can be interrupted, LFALSE if it cannot.

Example

LApp_SetInterruptableRendering( LFALSE );

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetInterruptableRendering” (page 1070).

L-Edit 14 User Guide Section 4 1091


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetRedrawAllWindows

LApp_SetRedrawAllWindows

LStatus LApp_SetRedrawAllWindows( LBoolean bRedrawAllWindows );

Description

Sets the Redraw All Windows flag.

Return Values

Always LStatusOK..

Parameters

bRedrawAllWindows LTRUE if windows should be redrawn, LFALSE if not.

Example

LApp_SetRedrawAllWindows( LFALSE );

Version

Available in L-Edit 8.4 and later versions.

See Also

“LApp_GetRedrawAllWindows” (page 1071).

L-Edit 14 User Guide Section 4 1092


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetShowDesignWhileRendering

LApp_SetShowDesignWhileRendering

LStatus LApp_SetShowDesignWhileRendering( LBoolean bShowDesignWhileRendering


);

L-Edit 14 User Guide Section 4 1093


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetShowDesignTimeIncrement

LApp_SetShowDesignTimeIncrement

LStatus LApp_SetShowDesignTimeIncrement( int nFirstIncrement,


int nNextIncrement );

L-Edit 14 User Guide Section 4 1094


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetRenderingUseCPUForColorMixing

LApp_SetRenderingUseCPUForColorMixing

LStatus LApp_SetRenderingUseCPUForColorMixing( LBoolean bUseCPUForColorMixing


);

L-Edit 14 User Guide Section 4 1095


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetRenderingUseMMX

LApp_SetRenderingUseMMX

LStatus LApp_SetRenderingUseMMX( LBoolean bUseMMX );

L-Edit 14 User Guide Section 4 1096


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetRenderingUsePatBltForPatterns

LApp_SetRenderingUsePatBltForPatterns

LStatus LApp_SetRenderingUsePatBltForPatterns( LBoolean bUsePatBltForPatterns


);

L-Edit 14 User Guide Section 4 1097


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_SetAllowSelectionOnLockedLayers

LApp_SetAllowSelectionOnLockedLayers

LStatus LApp_SetAllowSelectionOnLockedLayers( LBoolean bInterruptRendering );

L-Edit 14 User Guide Section 4 1098


Chapter 35: UPI Functions Reference Database Functions Application Functions
LApp_ExitAfterCompletion

LApp_ExitAfterCompletion

void LApp_ExitAfterCompletion( bool bDiscardUnsavedFiles );

Description

Calling LApp_ExitAfterCompletion will cause L-Edit to exit upon the completion of the macro. Make
sure to make this call after all macros called from within the current one are completed. If
bDiscardUnsavedFiles is not set and any open documents are not saved, L-Edit will not exit.

Parameters

bDiscardUnsavedFiles If bDiscardUnsavedFiles is true L-Edit will exit regardless of


whether any unsaved files (TDB, text, or other) are open. If
bDiscardUnsavedFiles is false L-Edit will exit only if there are no
open unsaved documents.

Example

void MyMacro
{
//perform macro-specific operations
...

//make sure all documents that need to be saved are


...

//signal L-Edit to terminate upon completion of MyMacro


LApp_ExitAfterCompletion( true );
}

Version

Available in L-Edit 8.42 and later versions.

L-Edit 14 User Guide Section 4 1099


Chapter 35: UPI Functions Reference Database Functions File Functions

File Functions

TDB (Tanner Database) files are design files in a Tanner Research proprietary format. A TDB file is the
highest level of the L-Edit database hierarchy. It is composed of linearly linked lists of cells and layers.

A TDB file is the highest level of the L-Edit database hierarchy. A single TDB file usually contains the
complete design for a chip or MCM, but it may also consist of a library of cells or a partial design to be
merged with other design files.

The file functions below allow the user to manipulate an L-Edit design file.

“LFile_New” (page 1102) “LFile_Open” (page 1103)

“LFile_Save” (page 1105) “LFile_SaveAs” (page 1106)

“LFile_Close” (page 1107) “LFile_Find” (page 1108)

“LFile_GetList” (page 1109) “LFile_GetNext” (page 1110)

“LFile_GetLock” (page 1111) “LFile_SetLock” (page 1112)

“LFile_IsChanged” (page 1113) “LFile_SetChanged” (page 1155)

“LFile_GetName” (page 1114) “LFile_OpenCell” (page 1104)

“LFile_GetAuthor” (page 1115) “LFile_SetAuthor” (page 1116)

“LFile_GetOrganization” (page 1119) “LFile_SetOrganization” (page 1120)

“LFile_GetInfoText” (page 1125) “LFile_SetInfoText” (page 1126)

“LFile_GetFabricationCell” (page 1117) “LFile_SetFabricationCell” (page 1118)

“LFile_GetLayoutVersion” (page 1121) “LFile_SetLayoutVersion” (page 1122)

“LFile_GetSetupVersion” (page 1123) “LFile_SetSetupVersion” (page 1124)

“LFile_GetEnvironment” (page 1127) “LFile_SetEnvironment” (page 1128)

“LFile_GetSelectionParam” (page 1140) “LFile_SetSelectionParam” (page 1141)

“LFile_GetUserData” (page 1142) “LFile_SetUserData” (page 1143)

“LFile_DeleteUserData” (page 1144) “LFile_ClearUserData” (page 1145)

“LFile_DisplayCellBrowser” (page 1146) “LFile_GetResolvedFileName” (page 1150)

“LFile_GetVisible” (page 1152) “LFile_SetLastCurrent” (page 1147)

“LFile_GetGrid_v10_00” (page 1131) “LFile_SetGrid_v10_00” (page 1132)

“LFile_GetDisplayUnitInfo” (page 1156) “LFile_SetDisplayUnit” (page 1157)

“LFile_IntUtoDispU” (page 1158) “LFile_DispUtoIntU” (page 1159)

“LFile_IntUtoMicrons” (page 1160) “LFile_MicronsToIntU” (page 1161)

Obsolete
“LFile_GetGrid” (page 1129) “LFile_SetGrid” (page 1134)

“LFile_GetGridEx840” (page 1130) “LFile_SetGridEx840” (page 1135)

“LFile_IntUtoLocU” (page 1153) “LFile_LocUtoIntU” (page 1154)

“LFile_GetCurveSetup” (page 1137) “LFile_SetCurveSetup” (page 1138)

L-Edit 14 User Guide Section 4 1100


Chapter 35: UPI Functions Reference Database Functions File Functions

“LFile_GetDesignRuleFlags” (page 1148) “LFile_SetDesignRuleFlags” (page 1149)

L-Edit 14 User Guide Section 4 1101


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_New

LFile_New

LFile LFile_New( LFile setup_file, char* name );

Description

Creates a new, empty layout file with a technology setup copied from the specified file.

Return Values

Returns a pointer to the new file, or NULL on error.

Parameters

setup_file File whose setup is to be used (if NULL, then the setup of the current
file is used).
name Name of the new file.

Example

// make a new file, based on current file


LFile pCurFile = LFile_GetVisible();
if ( pCurFile )
{
LFile pFile = LFile_New( pCurFile, “My new file” );
if ( ! pFile )
LDialog_AlertBox( “Failed to create file” );
}

See Also

“File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1102


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_Open

LFile_Open

LFile LFile_Open( const char* name, LFileType type );

Description

Opens a TDB, CIF, or GDS II file.

Return Values

A pointer to the file, or NULL on error.

Parameters

name Name of the file to open.


type Format of the file (LTdbFile, LCifFile, or LGdsFile).

Example

LFile pFile = LFile_Open( “c:\\My data\\My file”, LTdbFile );


if ( ! pFile )
LDialog_AlertBox( “File open failed” );

See Also

“LFile” (page 1578), “LFileType” (page 1579), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1103


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_OpenCell

LFile_OpenCell

LWindow LFile_OpenCell( LFile file, char *cell_name );

Description

Opens a layout window for the specified cell in the specified file.

Return Values

Returns a pointer to the newly created window; otherwise NULL.

Parameters

file Specified file.


cell_name Name of the specified cell.

Example

if ( ! LFile_OpenWindow( LFile_GetVisible(), “my cell” ) )


LDialog_AlertBox( “Failed to open ‘my cell’” );

See Also

“UPIDrawingToolType” (page 1634), “LFile” (page 1578), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1104


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_Save

LFile_Save

LStatus LFile_Save( LFile file );

Description

Saves the specified file into a TDB file of the same name (with extension .tdb).

Return Values

LStatusOK if successful. If an error occurs LStatus contains the error value.

Parameters

file Pointer to the file to be saved.

Example

if ( LStatusOK != LFile_Save( LFile_GetVisible() ) )


LDialog_AlertBox( “Failed to save current file” );

See Also

“LStatus” (page 1620), “LFile_SaveAs” (page 1106), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1105


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SaveAs

LFile_SaveAs

LStatus LFile_SaveAs( LFile file, const char* name, LFileType type );

Description

Saves a file as a different file with the specified name and file type.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File to be saved.


name Name under which the file is to be saved.
type Format in which the file is to be saved (LTdbFile, LCifFile, or
LGdsFile).

Example

if ( LStatusOK != LFile_SaveAs( LFile_GetVisible(), “newname”, LTdbFile))


LDialog_AlertBox( “Failed to save new copy of current file” );

See Also

“LStatus” (page 1620), “LFileType” (page 1579), “LFile_Save” (page 1105), “File Functions” (page
1100)

L-Edit 14 User Guide Section 4 1106


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_Close

LFile_Close

LStatus LFile_Close( LFile file );

Description

Closes the specified file without checking for changes.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File to be closed.

Example

// NOTE: pending changes are LOST!


if ( LFile_GetVisible() )
LFile_Close( LFile_GetVisible() );

See Also

“LStatus” (page 1620), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1107


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_Find

LFile_Find

LFile LFile_Find( const char* name );

Description

Finds a file in a list of open files whose name matches the specified string.

Return Values

Returns a pointer to the file, if found; otherwise returns NULL.

Parameters

name Name (without filename extension) of the file to be searched.

Example

LFile pFile = LFile_Find( “my file” );


if ( !pFile )
LDialog_AlertBox( “‘my file’ not open” );

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1108


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetList

LFile_GetList

LFile LFile_GetList( void )

Description

Gets a list of currently open files.

Return Values

Returns the head of the list of open files. Returns NULL if no files are open.

Example

// count open files


int nCount = 0;
LFile pFile;
for( pFile = LFile_GetList(); pFile; pFile = LFile_GetNext( pFile ) )
{
// process each file
nCount++;
}
LDialog_MsgBox( LFormat( “%d files open”, nCount ) );

See Also

“LFile_GetNext” (page 1110), “LCell_GetList” (page 1168), “LInstance_GetList” (page 1231),


“File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1109


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetNext

LFile_GetNext

LFile LFile_GetNext( LFile file );

Description

Gets the next file in the list of open files after the specified file.

Return Values

Returns a pointer to the next file in the currrently opened file list. If no next file exists, it returns a
NULL.

Parameters

file Pointer to a file.

Example

/*This example demonstrates a simple way of traversing all the loaded


files*/

/*Declare a L-Edit file variable*/


LFile pFile;

/*Get a list of all the currently loaded files and traverse the list*/
for( pFile = LFile_GetList(); pFile; pFile = LFile_GetNext( pFile) )
{
/*Do processing specific to a file*/
}

See Also

“LFile_GetList” (page 1109), “LCell_GetNext” (page 1169), “LInstance_GetNext” (page 1232),


“File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1110


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetLock

LFile_GetLock

int LFile_GetLock( LFile file );

Description

Checks whether a file is locked or not.

Return Values

Returns zero if the specified file is unlocked; otherwise returns a nonzero value.

Parameters

file File to be checked.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1111


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetLock

LFile_SetLock

int LFile_SetLock( LFile file, int set );

Description

Locks or unlocks the specified file. If set is nonzero, the file is locked; if set is zero, the file is
unlocked.

Return Values

A nonzero value if the file is locked.

Parameters

file File to be locked or unlocked.


set Value that determines the file’s new status: zero unlocks; anything
else locks.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1112


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_IsChanged

LFile_IsChanged

int LFile_IsChanged( LFile file );

Description

Checks the specified file to determine if it has been changed since it was last saved.

Return Values

The function returns 1 if the file has been changed or zero if it has not.

Parameters

file File to be checked.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1113


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetName

LFile_GetName

char* LFile_GetName( LFile file, char* name, const int maxlen );

Description

Gets the text of the name field in the file information summary.

Return Values

Returns a pointer to the string name; returns NULL if unsuccessful.

Parameters

file File whose name is to be retrieved.


name String containing the name text (the name buffer).
maxlen Maximum length allowed for name.

Example

LFile pFile = LFile_GetVisible();


if ( pFile )
{
char filename[MAX_TDBFILE_NAME];
if ( LFile_GetName( pFile, filename, sizeof(filename) ) )
LDialog_MsgBox( LFormat(“file: %s”, filename ) );
}

See Also

“LCell_GetName” (page 1172), “LInstance_GetName” (page 1233), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1114


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetAuthor

LFile_GetAuthor

char* LFile_GetAuthor( LFile file, char* author, const int maxlen );

Description

Gets the text of the author field in the information summary for the specified file.

Return Values

Returns a pointer to the string author if successful; otherwise returns NULL.

Parameters

file File whose author is to be retrieved.


author String containing the author text.
maxlen Maximum length allowed for author.

Example

LFile pFile = LFile_GetVisible();


if ( pFile )
{
char name[MAX_TDBFILE_NAME];
if ( LFile_GetAuthor( pFile, name, sizeof(name) ) )
LDialog_MsgBox( LFormat(“author: %s”, name ) );
}

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1115


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetAuthor

LFile_SetAuthor

char* LFile_SetAuthor( LFile file, char* author );

Description

Sets the text of the author field in the information summary for the specified file.

Return Values

Returns a pointer to the string author if successful; otherwise NULL.

Parameters

file File whose author text is to be set.


author String containing the author text.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1116


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetFabricationCell

LFile_GetFabricationCell

LCell LFile_GetFabricationCell( LFile file );

Description

Gets the cell marked as the “top” or “root” cell (the fabrication cell) of the specified file for foundry
fabrication.

Return Values

Returns a pointer to the fabrication cell if found; otherwise NULL.

Parameter

file Specified file.

See Also

“LObject” (page 1600), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1117


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetFabricationCell

LFile_SetFabricationCell

LStatus LFile_SetFabricationCell( LFile file, LCell cell );

Description

Marks the specified cell as the “top” or “root” cell (the fabrication cell) of the specified file for foundry
fabrication, conforming to CIF and GDS II conventions.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


cell Cell to be set as the fabrication cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1118


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetOrganization

LFile_GetOrganization

char* LFile_GetOrganization( LFile file, char* org, const int maxlen );

Description

Gets the text of the organization field in the information summary for the specified file.

Return Values

Returns a pointer to the organization string if successful; otherwise returns NULL.

Parameters

file File whose organization is to be retrieved.


org String containing the organization text.
maxlen Maximum length allowed for org.

Example

LFile pFile = LFile_GetVisible();


if ( pFile )
{
char name[MAX_TDBFILE_NAME];
if ( LFile_GetOrganization( pFile, name, sizeof(name) ) )
LDialog_MsgBox( LFormat(“organization: %s”, name ) );
}

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1119


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetOrganization

LFile_SetOrganization

const char* LFile_SetOrganization( LFile pTDBFile, const char* szOrg )

Description

Sets the text of the organization field in the information summary for the specified file.

Return Values

Returns a pointer to the file organization buffer if successful; otherwise returns NULL.

Parameters

pTDBFile File whose organization is to be set.


szOrg String containing the organization text.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1120


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetLayoutVersion

LFile_GetLayoutVersion

void LFile_GetLayoutVersion( LFile file, long* major, long* minor );

Description

Gets the major and minor layout version numbers of the specified file.

Parameters

file File whose layout version numbers are to be retrieved.


major Pointer to the major layout version number.
minor Pointer to the minor layout version number.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1121


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetLayoutVersion

LFile_SetLayoutVersion

void LFile_SetLayoutVersion( LFile file, long* major, long* minor );

Description

Sets the major and minor layout version numbers of the specified file.

Parameters

file file whose layout version numbers are to be set.


major Pointer to the major layout version number.
minor Pointer to the minor layout version number.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1122


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetSetupVersion

LFile_GetSetupVersion

void LFile_GetSetupVersion( LFile file, long* major, long* minor );

Description

Gets the major and minor setup numbers of the specified file.

Parameters

file File whose setup version numbers are to be retrieved.


major Pointer to the major setup version number.
minor Pointer to the minor setup version number.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1123


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetSetupVersion

LFile_SetSetupVersion

void LFile_SetSetupVersion( LFile file, long* major, long* minor );

Description

Sets the major and minor setup version numbers of the specified file.

Return Values

Returns NULL on error.

Parameters

file File whose setup version numbers are to be set.


major Pointer to the major setup version number.
minor Pointer to the minor setup version number.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1124


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetInfoText

LFile_GetInfoText

char* LFile_GetInfoText( LFile file, char* info, const int maxlen );

Description

Gets the text of the information field in the file information summary for the specified file.

Return Values

Returns a pointer to the string info if successful; otherwise returns NULL.

Parameters

file File whose information is to be retrieved.


info String containing the information text.
maxlen Maximum length allowed for info.

Example

LFile pFile = LFile_GetVisible();


if ( pFile )
{
char name[MAX_TDBFILE_NAME];
if ( LFile_GetInfoText( pFile, name, sizeof(name) ) )
LDialog_MsgBox( LFormat(“info text: %s”, name ) );
}

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1125


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetInfoText

LFile_SetInfoText

char* LFile_SetInfoText( LFile file, char* info );

Description

Sets and returns the text of the information field in the file information summary for the specified file. A
NULL value may be given.

Return Values

Returns a pointer to the string info if successful; otherwise returns NULL.

Parameters

file File whose information is to be set.


info String containing the information text.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1126


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetEnvironment

LFile_GetEnvironment

LEnvironment *LFile_GetEnvironment( LFile file, LEnvironment *env );

Description

Gets the environment setting of the specified file.

Return Values

Returns a pointer to the structure env if successful; otherwise returns NULL.

Parameters

file File whose environment setting is to be retrieved.


env Pointer to the file environment structure.

See Also

“LEnvironment” (page 1572), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1127


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetEnvironment

LFile_SetEnvironment

LStatus LFile_SetEnvironment( LFile file, LEnvironment *env );

Description

Sets the environment of the specified file according to the parameters defined in LEnvironment.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File whose environment is to be set.


env Pointer to the file environment structure.

See Also

“LEnvironment” (page 1572), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1128


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetGrid

LFile_GetGrid

LGrid *LFile_GetGrid( LFile file, LGrid *grid );

Description

Gets the grid setting of the specified file.

Note: Note that this function is superseded by “LFile_GetGridEx840” (page 1130).

Return Values

Returns a pointer to the grid structure if successful; otherwise returns NULL.

Parameters

file File whose grid setting is to be retrieved.


grid Pointer to the grid structure.

See Also

“LGrid” (page 1582), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1129


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetGridEx840

LFile_GetGridEx840

LStatus LFile_GetGridEx840( LFile file, LGridEx840 *grid );

Description

Gets the grid setting of the specified file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadFile file is NULL

LBadParameters grid is NULL

Parameters

file File whose grid setting is to be retrieved.


grid Pointer to the grid structure.

Example

LGridEx840 Grid;
LFile_GetGridEx840( MyFile, &Grid );

Version

Available in L-Edit 8.4 and later versions.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LFile_SetGridEx840” (page 1135), “LGridEx840” (page 1583)

L-Edit 14 User Guide Section 4 1130


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetGrid_v10_00

LFile_GetGrid_v10_00

LStatus LFile_GetGrid_v10_00( LFile file, LGrid_v10_00 *grid );

Description

Gets the grid setting of the specified file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadFile file is NULL

LBadParameters grid is NULL

Parameters

file File whose grid setting is to be retrieved.


grid Pointer to the grid structure.

See Also

“LGrid_v10_00” (page 1585), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1131


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetGrid_v10_00

LFile_SetGrid_v10_00

LStatus LFile_SetGrid_v10_00( LFile file, LGrid_v10_00 *grid );

Description

Sets the grid information of the specified file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadFile file is NULL

LBadParameters One or more of the following errors:


ƒ grid is NULL
ƒ grid.displayed_grid_size < 1 or
grid.displayed_grid_size > WORLD_MAX,
ƒ grid.min_grid_pixels > 1 or
grid.min_grid_pixels > WORLD_MAX

ƒ grid.displayed_majorgrid_size < 1 or
grid.displayed_majorgrid_size > WORLD_MAX
ƒ grid.min_majorgrid_pixels < 1 or
grid.min_majorgrid_pixels > WORLD_MAX
ƒ grid.mouse_snap_grid_size < 1 or
grid.mouse_snap_grid_size > WORLD_MAX
ƒ grid.cursor_type is invalid

ƒ grid.locator_scaling < 1 or
grid.locator_scaling > WORLD_MAX

Parameters

file File whose grid is to be set.


grid Pointer to the grid structure.

Example

/* Get the current grid setting for MyFile */


LGrid_v10_00 Grid;
LFile_GetGrid_V10_00( MyFile, &Grid );

/* Specify new grid settings */


Grid.min_majorgrid_pixels = 10 * Grid.min_grid_pixels;
Grid.displayed_majorgrid_size = 10 * Grid.displayed_grid_size;

L-Edit 14 User Guide Section 4 1132


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetGrid_v10_00

/* Apply the new grid structure to MyFile */


LFile_SetGrid_V10_00(MyFile, &Grid);

Version

Available in L-Edit 10 and later versions.

See also

“LFile_GetGrid_v10_00” (page 1131), “LGrid_v10_00” (page 1585)

L-Edit 14 User Guide Section 4 1133


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetGrid

LFile_SetGrid

LStatus LFile_SetGrid( LFile file, LGrid *grid );

Description

Sets the grid of the specified file.

Note: Note that this function is superseded by “LFile_SetGridEx840” (page 1135).

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File whose grid is to be set.


grid Pointer to the grid structure.

See Also

“LStatus” (page 1620), “LGrid” (page 1582), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1134


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetGridEx840

LFile_SetGridEx840

LStatus LFile_SetGridEx840( LFile file, LGridEx840 *grid );

Description

Sets the grid information of the specified file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadFile file is NULL

LBadParameters One or more of the following errors:


ƒ grid is NULL
ƒ grid.displayed_grid_size < 1 or
grid.displayed_grid_size > WORLD_MAX,
ƒ grid.min_grid_pixels > 1 or
grid.min_grid_pixels > WORLD_MAX

ƒ grid.displayed_majorgrid_size < 1 or
grid.displayed_majorgrid_size > WORLD_MAX
ƒ grid.min_majorgrid_pixels < 1 or
grid.min_majorgrid_pixels > WORLD_MAX
ƒ grid.mouse_snap_grid_size < 1 or
grid.mouse_snap_grid_size > WORLD_MAX
ƒ grid.cursor_type is invalid

ƒ grid.locator_scaling < 1 or
grid.locator_scaling > WORLD_MAX

Parameters

file File whose grid is to be set.


grid Pointer to the grid structure.

Example

/* Get the current grid setting for MyFile */


LGridEx840 Grid;
LFile_GetGridEx840( MyFile, &Grid );

/* Specify new grid settings */


Grid.min_majorgrid_pixels = 10*Grid.min_grid_pixels;
Grid.displayed_majorgrid_size = 10*Grid.displayed_grid_size;

L-Edit 14 User Guide Section 4 1135


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetGridEx840

/* Apply the new grid structure to MyFile */


LFile_SetGridEx840( MyFile, &Grid );

Version

Available in L-Edit 8.4 and later versions. In L-Edit V10 and later, the curve representation changed to
use the manufacturing grid, making this function unnecessary.

Note: Note that this function is superseded in L-Edit V10 and later.

See also

“LFile_GetGridEx840” (page 1130), “LGridEx840” (page 1583)

L-Edit 14 User Guide Section 4 1136


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetCurveSetup

LFile_GetCurveSetup

LCurve *LFile_GetCurveSetup( LFile file, LCurve *curve );

Description

Gets the curve properties from the specified file and writes them to the destination specified by curve.
Curve properties include the maximum number of segments per curve, the maximum segment length,
and WYSIWYG display.

Return Values

Returns a pointer to the curve setup properties in case of success; otherwise, returns NULL.

Parameters

file The specified file.


curve Pointer to the curve setup information.

Example

LCurve CurveSetup;
LFile_GetCurveSetup(MyFile, &CurveSetup);

Version

Available in L-Edit 8.4 and later versions. In L-Edit V10 and later, the curve representation changed to
use the manufacturing grid, making this function unnecessary.

See Also

“LFile_SetCurveSetup” (page 1138), “LPolygon_StraightenAllCurves” (page 1349),


“LCurve” (page 1553)

L-Edit 14 User Guide Section 4 1137


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetCurveSetup

LFile_SetCurveSetup

LStatus LFile_SetCurveSetup( LFile file, LCurve *curve );

Description

Sets the curve properties for the specified file. Curve properties include the maximum number of
segments per curve, the maximum segment length, and WYSIWYG display.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadFile file is NULL.

LBadParameters Indicates one or more of the following errors:


ƒ curve is NULL
ƒ VALID PARAMETER RANGES?

Parameters

file The specified file.


curve Pointer to curve setup information.

Example

/* Get the curve setup information for MyFile */


LCurve CurveSetup;
LFile_GetCurveSetup(MyFile, &CurveSetup);

/* Edit curve properties and */


CurveSetup.mMaxNumSegmentsPerCurve = 100;
CurveSetup.mMaxSegmentLength = 50;

/* Assign the new curve properties to MyFile */


LFile_SetCurveSetup(MyFile, &CurveSetup);

/* Straighten curves on the specified polygon */


LPolygon_StraightenAllCurves(MyCell, MyPolygon);

Version

Available in L-Edit 8.4 and later versions. In L-Edit V10 and later, the curve representation changed to
use the manufacturing grid, making this function unnecessary.

L-Edit 14 User Guide Section 4 1138


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetCurveSetup

See Also

“LFile_SetCurveSetup” (page 1138), “LPolygon_StraightenAllCurves” (page 1349),


“LCurve” (page 1553)

L-Edit 14 User Guide Section 4 1139


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetSelectionParam

LFile_GetSelectionParam

LSelectionParam *LFile_GetSelectionParam( LFile file, LSelectionParam *param );

Description

Gets the selection parameters of the specified file.

Return Values

Returns a pointer to the selection structure if successful; otherwise returns NULL.

Parameters

file File whose selection parameter are to be found.


param Pointer to the selection parameter structure.

See Also

“LWireParam” (page 1633), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1140


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetSelectionParam

LFile_SetSelectionParam

LStatus LFile_SetSelectionParam( LFile file, LSelectionParam *param );

Description

Sets the selection parameters of the given file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File whose selection parameters are to be set.


param Pointer to the selection parameter structure.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1141


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetUserData

LFile_GetUserData

void *LFile_GetUserData( LFile file );

Description

Gets a pointer to user-defined data associated with the specified file.

Return Values

Returns a pointer to the user data if successful; otherwise returns NULL.

Parameter

file File whose user-defined data is needed.

See Also

“LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1142


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetUserData

LFile_SetUserData

LStatus LFile_SetUserData( LFile file, void *dataPointer );

Description

Uses a data pointer within a file to associate user-defined data with the file. Data can be integer, string,
or any other type.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameter

file File which will contain the user-defined data.


dataPointer User-defined data.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1143


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_DeleteUserData

LFile_DeleteUserData

LStatus LFile_DeleteUserData( LFile pTDBFile );

Description

Deletes the user-defined expansion pointer in the specified file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

pTDBFile Specified file.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1144


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_ClearUserData

LFile_ClearUserData

LStatus LFile_ClearUserData( LFile TDBFile );

Description

Sets the user-defined data pointer in the specified TDB file to NULL without freeing it.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadFile TDBFile is NULL.

Parameters

TDBFile The specified TDB file.

Example

/* Get the active TDB file */


LFile TDBFile = LFile_GetVisible();
if(Assigned(TDBFile))
{
/* Set the User Data */
LCell MyCell = LCell_GetVisible();
LFile_SetUserData(TDBFile, MyCell);

/* Do some processing on the TDB file */


...

/* Clear the User Data */


LFile_ClearUserData(TDBFile);

Version

Available in L-Edit 8.4 and later versions.

See Also

“File Functions” (page 1100), “LFile_GetUserData” (page 1142), “LFile_SetUserData” (page 1143),
“LFile_DeleteUserData” (page 1144), “LFile” (page 1578)

L-Edit 14 User Guide Section 4 1145


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_DisplayCellBrowser

LFile_DisplayCellBrowser

void LFile_DisplayCellBrowser( LFile file );

Description

Displays the cell browser for the specified file.

Parameters

file Specified file.

See Also

“LFile” (page 1578), “Interface Functions” (page 983)

L-Edit 14 User Guide Section 4 1146


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetLastCurrent

LFile_SetLastCurrent

LStatus LFile_SetLastCurrent( LFile file, LCell cell );

Description

Sets the last open cell in the specified file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


cell Specified cell.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LObject” (page 1600), “File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1147


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetDesignRuleFlags

LFile_GetDesignRuleFlags

LStatus LFile_GetDesignRuleFlags( LFile file, LDesignRuleFlags *pDRCFlags );

Description

Gets DRC flags.

Return Values

Returns LStatusOK if successful or LBadParameter if an error occurred.

Parameters

file Current file.


pDRCFlags Pointer to LDesignRuleFlags.

Example

LAmbiguousFillType GetActionOnPolygonsWithAmbiguousFills( LFile file )


{
LDesignRuleFlags drcFlags; // LDesignRuleFlags structure
LFile_GetDesignRuleFlags( file, &drcFlags ); // get current flags
return drcFlags.PolygonsWithAmbiguousFills; // return one of the values
}

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LDesignRuleFlags” (page 1563), “LAmbiguousFillType” (page 1542),


“LFile_SetDesignRuleFlags” (page 1149)

L-Edit 14 User Guide Section 4 1148


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetDesignRuleFlags

LFile_SetDesignRuleFlags

LStatus LFile_SetDesignRuleFlags( LFile file, LDesignRuleFlags *pDrcFlags );

Description

Sets DRC flags.

Return Values

Returns LStatusOK if successful or LBadParameter if an error occurred.

Parameters

file Specified file.


pDRCFlags Pointer to LDesignRuleFlags.

Example

void SetFlagIgnoredObject( LFile file, LBoolean flagIgnored )


{
LDesignRuleFlags drcFlags; // LDesignRuleFlags structure
LFile_GetDesignRuleFlags( file, &drcFlags ); //get current flags
drcFlags.FlagIgnoredObjects = flagIgnored; // change one of the flags
LFile_SetDesignRuleFlags(file, &drcFlags); // modify current flags
}

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LDesignRuleFlags” (page 1563), “LAmbiguousFillType” (page 1542),


“LFile_GetDesignRuleFlags” (page 1148)

L-Edit 14 User Guide Section 4 1149


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetResolvedFileName

LFile_GetResolvedFileName

LStatus LFile_GetResolvedFileName( LFile pTDBFile,


const char* szRelativeFileName, char* szAbsoluteFileNameBuffer,
int iBufferSize );

Description

Resolves a path that is relative to a TDB file to an absolute path. Absolute paths are not modified. Use
this function to resolve a path that might be relative to the TDB file, such as the extract definition file,
DRC error file, or a file returned from LDialog_File.

Return Values

LBufferTooSmall if the buffer was too small, LStatusOK otherwise.

Parameters

pTDBFile The TDB file that the path might be relative to.
szRelativeFileName Path that is either absolute or relative to the TDB file.
szAbsoluteFileNameBuffer Buffer in which to store the absolute path.
iBufferSize Size o fthe buffer.

Example

LFile pTDBFile = LFile_GetVisible();


if(Assigned(pTDBFile))
{
// Get the filename.
char szFileName[512] = "\0";

LDialog_File(NULL, "Import Filename", szFileName,


"Text file (*.txt)|*.lys|All Files (*.*)|*.*||", 0,
"Import filename:", NULL, "*.txt", NULL, pTDBFile);

// Check if the user cancelled the dialog.


if(strlen(szFileName) > 0)
{
char szAbsoluteFileName[512] = "\0";
if(LFile_GetResolvedFileName(pTDBFile, szFileName,
szAbsoluteFileName, 511) == LStatusOK)
{
// More Processing
// ...
}
else
{
// ERROR: Not enough space in the buffer.
}
} // endif(strlen(szFileName) > 0)
} // endif(Assigned(pTDBFile))

L-Edit 14 User Guide Section 4 1150


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetResolvedFileName

Version

Available in L-Edit 8.2 and later versions.

See Also

“File Functions” (page 1100), “LDialogItem” (page 1565), “LFile” (page 1578)

L-Edit 14 User Guide Section 4 1151


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetVisible

LFile_GetVisible

LFile LFile_GetVisible( void );

Description

Gets the visible (active) TDB file.

Return Values

Returns a pointer to the active TDB file; otherwise NULL. If the visible file is a text file, then NULL is
returned.

Example

LFile pFile = LFile_GetVisible();


if( Assigned( pFile ) )
{
char szFileName[256];
LFile_GetName( pFile, szFileName, 255 );
// More Processing
// ...
}

Version

Available in L-Edit 8.2 and later versions.

See Also

“File Functions” (page 1100).

L-Edit 14 User Guide Section 4 1152


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_IntUtoLocU

LFile_IntUtoLocU

double LFile_IntUtoLocU( LFile pFile, LCoord lcValue )

Description

Returns the value (lcValue) in Locator Units.

Parameters

pFile Specified TDB file.


IcValue Value in Internal Units.

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
double dWidth = LFile_IntUtoLocU(pFile, 1000);
// More Processing
// ...
}

Version

Available in L-Edit 8.2 and later versions.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“File Functions” (page 1100), “LFile_LocUtoIntU” (page 1154), “LFile” (page 1578), “LCoord” (page
1550).

L-Edit 14 User Guide Section 4 1153


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_LocUtoIntU

LFile_LocUtoIntU

LCoord LFile_LocUtoIntU( LFile pFile, double dValue )

Description

Converts a value in Locator Units to Internal Units based on the grid mapping of a TDB file. This
function will round the value if it cannot represent the value exactly in Internal Units. For example, if
the mapping is 1 LU = 10 IU, and the value is 0.25 then it will be rounded to 0.3.

Return Values

Returns the value (dValue) in Internal Units.

Parameters

pFile Specified TDB file.


dValue Value in Locator Units.

Example

LFile pFile = LFile_GetVisible();


if( Assigned( pFile ) )
{
LCoord lcWidth = LFile_LocUtoIntU( pFile, 25.75 );
// More Processing
// ...
}

Version

Available in L-Edit 8.2 and later versions.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“File Functions” (page 1100), “LFile_IntUtoLocU” (page 1153), “LFile” (page 1578), “Technology
Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1154


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetChanged

LFile_SetChanged

void LFile_SetChanged( LFile pTDBFile );

Description

Marks the file as changed. This will also increment the minor version.

Parameters

pTDBFile The file to mark as changed.

Example

LFile pTDBFile = LFile_GetVisible();


if( Assigned( pTDBFile ) )
{
// Do some processing on pTDBFile.
// ...

// Mark the file as changed.


LFile_SetChanged( pTDBFile );
}

Version

Available in L-Edit 8.2 and later versions.

See Also

“File Functions” (page 1100), “LFile” (page 1578), “LFile_IsChanged” (page 1113).

L-Edit 14 User Guide Section 4 1155


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_GetDisplayUnitInfo

LFile_GetDisplayUnitInfo

LStatus LFile_GetDisplayUnitInfo( LFile file, LDisplayUnitInfo *pDispUnitInfo );

Description

Get a structure containing information about the display units.

L-Edit 14 User Guide Section 4 1156


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_SetDisplayUnit

LFile_SetDisplayUnit

LStatus LFile_SetDisplayUnit( LFile file, const char* szDispUnitName );

Description

Configure the display unit settings.

L-Edit 14 User Guide Section 4 1157


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_IntUtoDispU

LFile_IntUtoDispU

double LFile_IntUtoDispU( LFile pFile, LCoord lcValue );

Description

Convert a dimension in Internal Units to the equivalent number of Display Units.

L-Edit 14 User Guide Section 4 1158


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_DispUtoIntU

LFile_DispUtoIntU

LCoord LFile_DispUtoIntU( LFile pFile, double dValue );

Description

Convert a dimension in Display Units to the equivalent number of Internal Units.

L-Edit 14 User Guide Section 4 1159


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_IntUtoMicrons

LFile_IntUtoMicrons

double LFile_IntUtoMicrons( LFile pFile, LCoord lcValue );

Description

Convert a dimension in Internal Units to the equivalent number of microns.

L-Edit 14 User Guide Section 4 1160


Chapter 35: UPI Functions Reference Database Functions File Functions
LFile_MicronsToIntU

LFile_MicronsToIntU

LCoord LFile_MicronsToIntU( LFile pFile, double dValue );

Description

Convert a dimension in microns to the equivalent number of Internal Units.

L-Edit 14 User Guide Section 4 1161


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LFile_MicronsToIntU

Cell Functions

Cell functions allow the user to manipulate an individual cell in an L-Edit design file. Subcategories of
cell functions include:

ƒ “Instance Functions” (page 1223)


ƒ “Entity Functions” (page 1244)
ƒ “Object Functions” (page 1270)

General cell functions are listed below:

“LCell_New” (page 1163) “LCell_Delete” (page 1164)

“LCell_Copy” (page 1165)

“LCell_GetFile” (page 1167) “LCell_Find” (page 1166)

“LCell_GetList” (page 1168) “LCell_GetNext” (page 1169)

“LCell_GetLock” (page 1170) “LCell_SetLock” (page 1171)

“LCell_GetName” (page 1172) “LCell_SetName” (page 1173)

“LCell_GetAuthor” (page 1174) “LCell_SetAuthor” (page 1175)

“LCell_GetOrganization” (page 1176) “LCell_SetOrganization” (page 1177)

“LCell_GetInfoText” (page 1178) “LCell_SetInfoText” (page 1179)

“LCell_GetView” (page 1185) “LCell_SetView” (page 1186)

“LCell_GetUserData” (page 1191) “LCell_SetUserData” (page 1192)

“LCell_DeleteUserData” (page 1193) “LCell_ClearUserData” (page 1190)

“LCell_GetShowInLists” (page 1212) “LCell_SetShowInLists” (page 1211)

“LCell_ClearUndoLists” (page 1207) “LCell_Flatten” (page 1189)

“LCell_IsChanged” (page 1184) “LCell_SetChanged” (page 1200)

“LCell_GetMbb” (page 1187) “LCell_GetMbbAll” (page 1188)

“LCell_CalcMBB” (page 1213) “LCell_AddMarker” (page 1214)

“LCell_RemoveMarker” (page 1215) “LCell_RemoveAllMarkers” (page 1216)

“LCell_GetParameter” (page 1208) “LCell_GetVersion” (page 1180)

“LCell_RunDRCEx01” (page 1204) “LCell_SetVersion” (page 1181)

“LCell_BooleanOperation” (page 1217) “LCell_GetCreatedTime” (page 1182)

“LCell_RunDRCEx01” (page 1204) “LCell_GetModifiedTime” (page 1183)

“LCell_Slice” (page 1219)

Obsolete
“LCell_GenerateLayersEx830” (page 1194) “LCell_GenerateLayersEx99” (page 1196)

“LCell_RunDRCEx00” (page 1202) “LCell_GenerateLayers_v10_00” (page 1197)

L-Edit 14 User Guide Section 4 1162


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_New

LCell_New

LCell LCell_New( LFile file, char *name );

Description

Creates a new cell in the specified file.

Return Values

Returns a pointer to the newly created cell if successful; otherwise returns NULL.

Parameters

file File where new cell need to be created.


name Name of the new cell.

Example

LFile pFile = LFile_GetVisible();


if( Assigned( pFile ) )
{
LCell pCell = LCell_New( pFile, “MyCell” );
if ( pCell )
{
// More Processing
// ...
}
}

See Also

“LObject” (page 1600), “LFile” (page 1578), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1163


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_Delete

LCell_Delete

LStatus LCell_Delete( LCell cell );

Description

Deletes the specified cell from the current file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameter

cell Cell to be deleted.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1164


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_Copy

LCell_Copy

LStatus LCell_Copy( LFile sourceFile, LCell sourceCell, LFile destFile,


char *destCellName );

Description

Copies a cell from one file (the “source” file) to another (the “destination” file—possibly the same) with
a new name. If a cell with the new name already exists in the destination file, it is overwritten.

Return Values

Returns LStatusOK if no name collision occurs, LCellOverWritten if there is a collision. Returns


LBadParameters if null parameters are passed or if sourceCell does not belong to sourceFile. Returns
LLayerMapsDifferent if the layer maps in sourceFile and destFile are not the same.

Parameters

sourceFile Source file.


sourceCell Cell to be copied.
destFile Destination file.
destCellName Name of the new cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LFile” (page 1578), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1165


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_Find

LCell_Find

LCell LCell_Find( LFile file, const char* name );

Description

Searches for a cell of the specified name in the specified file.

Return Values

Returns a pointer to the cell if found; otherwise returns NULL.

Parameters

file File to search.


name Cell name to search for.

Example

LFile pFile = LFile_GetVisible();


if( Assigned( pFile ) )
{
LCell pCell = LCell_Find( pFile, “MyCell” );
if ( !pCell )
LDialog_AlertBox( “Cell not found” );
}

See Also

“LObject” (page 1600), “LFile” (page 1578), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1166


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetFile

LCell_GetFile

LFile LCell_GetFile( LCell cell );

Description

Returns a pointer to the parent file of the specified cell. Note: this function searches the entire list of
cells in each open file, in order to match ‘cell’. This is inefficient in the case of designs with many cells.
It is usually a better idea to explicitly keep track of the file from which ‘cell’ was obtained.

Return Values

Returns a pointer to the file if found; otherwise returns NULL.

Parameters

cell Specified cell.

Example

LCell pCell = LCell_GetVisible();


if ( pCell )
{
LFile pFile = LCell_GetFile( pCell );
if ( pFile != LFile_GetVisible() )
LDialog_AlertBox( “this should never happen!” );
}

See Also

“LObject” (page 1600), “LFile” (page 1578), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1167


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetList

LCell_GetList

LCell LCell_GetList( LFile file );

Description

Gets a list of cells in the specified file.

Return Values

Returns a pointer to the head of the cell list if successful; otherwise returns NULL.

Parameters

file Specified file.

Example

LFile pFile = LFile_GetVisible();


int nCount = 0;
LCell pCell;
for ( pCell = LCell_GetList(pFile); pCell; pCell = LCell_GetNext(pCell) )
nCount ++;
LDialog_MsgBox( LFormat( “%d cells”, nCount ) );

See Also

“LCell_GetNext” (page 1169), “LFile_GetList” (page 1109), “LInstance_GetList” (page 1231),


“Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1168


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetNext

LCell_GetNext

LCell LCell_GetNext( LCell cell );

Description

Gets the next cell in the current file’s list of cells after the specified cell.

Return Values

Returns a pointer to the next cell if successful; otherwise returns NULL.

Parameters

cell Specified cell.

Example

LFile pFile = LFile_GetVisible();


int nCount = 0;
LCell pCell;
for ( pCell = LCell_GetList(pFile); pCell; pCell = LCell_GetNext(pCell) )
nCount ++;
LDialog_MsgBox( LFormat( “%d cells”, nCount ) );

See Also

“LCell_GetList” (page 1168), “LFile_GetNext” (page 1110), “LInstance_GetNext” (page 1232),


“Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1169


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetLock

LCell_GetLock

int LCell_GetLock( LCell cell );

Description

Finds out if a cell is locked or not.

Return Values

Returns zero if the specified cell is unlocked; otherwise returns a nonzero value.

Parameters

cell Cell to be checked.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1170


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetLock

LCell_SetLock

int LCell_SetLock( LCell cell, int set );

Description

Locks or unlocks the specified cell.

Return Values

Returns zero if the specified cell has been unlocked; otherwise returns a nonzero value.

Parameters

cell Cell to be locked or unlocked.


set Value that determines the cell’s new status: zero unlocks; anything
else locks.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1171


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetName

LCell_GetName

char* LCell_GetName( LCell cell, char* name, const int maxlen );

Description

Gets the name of the specified cell.

Return Values

Returns a pointer to the string name if successful; otherwise returns NULL.

Parameters

cell Cell whose name is to be retrieved.


name String containing the name text.
maxlen Maximum length allowed for name.

Example

LCell pCell = LCell_GetVisible();


if ( pCell )
{
char name[MAX_CELL_NAME];
if ( LCell_GetName( pCell, name, MAX_CELL_NAME ) )
LDialog_MsgBox( name ); // print it out
}

See Also

“LObject” (page 1600), “LFile_GetName” (page 1114), “LInstance_GetName” (page 1233),


“Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1172


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetName

LCell_SetName

LStatus LCell_SetName( LFile file, LCell cell, const char* name );

Description

Sets the name of the specified cell in the specified file.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File whose cell is being renamed.


cell Cell to be (re)named.
name New cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LFile” (page 1578), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1173


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetAuthor

LCell_GetAuthor

char* LCell_GetAuthor( LCell cell, char* author, const int maxlen );

Description

Gets the text of the string author for the specified cell.

Return Values

Returns a pointer to the string author if successful; otherwise returns NULL.

Parameters

cell Cell whose author is to be retrieved.


author String containing the author text.
maxlen Maximum length allowed for author.

See Also

“LObject” (page 1600), “LFile” (page 1578), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1174


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetAuthor

LCell_SetAuthor

char* LCell_SetAuthor( LCell cell, char* author );

Description

Sets the text of the string author for the specified cell.

Return Values

Returns a pointer to the structure containing the string author if successful; otherwise returns NULL.

Parameters

cell Cell whose author is to be set.


author String containing the author text.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1175


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetOrganization

LCell_GetOrganization

char* LCell_GetOrganization( LCell cell, char* org, const int maxlen );

Description

Gets the organization text associated with the specified cell.

Return Values

Returns a pointer to the cell organization buffer if successful; otherwise returns NULL.

Parameters

cell Cell whose organization is to be retrieved.


org String containing the organization text.
maxlen Maximum length allowed for org.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1176


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetOrganization

LCell_SetOrganization

char* LCell_SetOrganization( LCell cell, char* org );

Description

Sets the text of the organization field in the information summary of the specified cell. A NULL value
may be given.

Return Values

Returns a pointer to the string containing the organization text if successful; otherwise returns NULL.

Parameters

cell Cell whose organization is to be set.


org String containing the organization text.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1177


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetInfoText

LCell_GetInfoText

char* LCell_GetInfoText( LCell cell, char* info, const int maxlen );

Description

Gets the text of the information field in the information summary of the specified cell.

Return Values

Returns a pointer to the cell info buffer if successful; otherwise returns NULL.

Parameters

cell Cell whose information is to be retrieved.


info String containing the information text.
maxlen Maximum length allowed for info.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1178


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetInfoText

LCell_SetInfoText

char* LCell_SetInfoText( LCell cell, char* info );

Description

Sets the text of the information field in the information summary of the specified cell. A NULL value
may be given.

Return Values

Returns a pointer to the string info if successful; otherwise returns NULL.

Parameters

cell Cell whose information is to be set.


info String containing the new information text.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1179


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetVersion

LCell_GetVersion

LStatus LCell_GetVersion( LCell cell, long *major, long *minor );

Description

Copies the version numbers of the specified cell to the variables pointed to by the major and minor
values.

Return Values

Returns a pointer to a long integer containing the version number (in *major and *minor) and
LStatusOK if successful; otherwise returns NULL.

Parameters

cell Cell whose information is to be retrieved.


major String containing the major version number.
minor String containing the minor version number.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1180


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetVersion

LCell_SetVersion

LStatus LCell_SetVersion( LCell cell, long major, long minor );

Description

Sets the field values of the specified cell to the variables pointed to in a long integer containing the
version numbers.

Return Values

Returns LStatusOK if successful; otherwise returns NULL.

Parameters

cell Cell whose information is to be set.


major String containing the major version number.
minor String containing the minor version number.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1181


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetCreatedTime

LCell_GetCreatedTime

long LCell_GetCreatedTime ( LCell pCell );

Description

Gets the creation date and time associated with the specified cell.

Return Values

Returns the creation time of the specified cell.

The time value is expressed in seconds from Jan 1, 1970, and is compatible with the time_t value
returned by time( ) (in compiled UPI scripts only).

Parameters

pCell Cell to be queried.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1182


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetModifiedTime

LCell_GetModifiedTime

long LCell_GetModifiedTime ( LCell pCell );

Description

Gets the most recent modification date and time for the specified cell.

Return Values

Returns the modified date and time of the specified cell.

The time value is expressed in seconds from Jan 1, 1970, and is compatible with the time_t value
returned by time( ) (in compiled UPI scripts only).

Parameters

pCell Cell to be queried.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1183


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_IsChanged

LCell_IsChanged

int LCell_IsChanged( LCell pCell )

Description

Checks the specified cell to determine if it has been changed since it was last saved.

Return Values

The function returns 1 if the cell has been changed or 0 if it has not.

Parameters

pCell Cell to be checked.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1184


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetView

LCell_GetView

LRect LCell_GetView( LCell cell );

Description

Gets the coordinates of the rectangle that defines the current view of the specified cell.

Return Values

Returns the coordinates of the viewing rectangle if successful; otherwise returns a rectangle whose
coordinates are all zeros.

Parameters

cell Cell whose viewing rectangle is needed.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1185


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetView

LCell_SetView

LStatus LCell_SetView( LCell cell, LRect view );

Description

Sets the coordinates of the rectangle that defines the current view of the specified cell.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Cell whose viewing rectangle needs to be set.


view New viewing rectangle.

See Also

“LStatus” (page 1620), “LTransform” (page 1626), “LObject” (page 1600), “Cell Functions” (page
1162)

L-Edit 14 User Guide Section 4 1186


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetMbb

LCell_GetMbb

LRect LCell_GetMbb( LCell cell );

Description

Gets the coordinates of the rectangle representing the minimum bounding box (Mbb) of the specified
cell, not including port text.

Return Values

Returns the Mbb if successful; otherwise returns a rectangle whose coordinates are all zeros.

Parameters

cell Cell whose Mbb is to be found.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1187


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetMbbAll

LCell_GetMbbAll

LRect LCell_GetMbbAll( LCell cell );

Description

Gets the coordinates of the rectangle representing the minimum bounding box (Mbb) of the specified
cell, including port text.

Return Values

Returns the MbbAll rectangle if successful; otherwise returns a rectangle whose coordinates are all
zeros.

Parameters

cell Cell whose MbbAll is to be found.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1188


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_Flatten

LCell_Flatten

LCell LCell_Flatten( LCell cell );

Description

Flattens the specified cell.

Return Values

Returns a pointer to the flattened cell if successful; otherwise returns NULL.

Parameters

cell Cell to be flattened.

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1189


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_ClearUserData

LCell_ClearUserData

LStatus LCell_ClearUserData( LCell cell );

Description

Sets the user-defined data pointer on the specified cell to NULL without freeing it.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell cell is NULL.

Parameters

cell The specified cell.

Examples

/* Get the active cell */


LCell MyCell = LCell_GetVisible();
if(assigned(MyCell))
{
/* Set the user data */
LFile TDBFile = LFile_GetVisible();
LCell_SetUserData(MyCell, TDBFile);

/* Do some processing on MyCell */


...

/* Clear the user data */


LCell_ClearUserData(MyCell);
}

Version

Available in L-Edit 8.4 and later versions.

See Also

“Cell Functions” (page 1162), “LCell_GetUserData” (page 1191), “LCell_SetUserData” (page 1192),
“LCell_DeleteUserData” (page 1193), “LCell” (page 1547)

L-Edit 14 User Guide Section 4 1190


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetUserData

LCell_GetUserData

void* LCell_GetUserData( LCell cell );

Description

Gets a pointer to user-defined data associated with the specified cell.

Return Values

Returns a pointer to the user data if successful; otherwise returns NULL.

Parameter

cell Cell whose user-defined data is needed.

Example

/*Declare user-defined data to be stored in a cell*/


typedef struct {
int x;
double y;
float z;
} CellUserDataRec;

CellUserDataRec cd, *pd=NULL;

/*The Cell Pointer*/


LCell cell;

/*Get a pointer to the currently open cell*/


cell = LCell_GetVisible();

/*Fill in data into CellUserDataRec*/


cd.x = 1; cd.y = 2.0; cd.z = 1.5;

/*Store cd into cell’s data pointer*/


LCell_SetUserData( cell, (void *) (&cd));

/*Get the data back from cell’s data pointer into pd*/
pd = (CellUserDataRec *) LCell_GetUserData( cell );

/*pd now points to the user-defined data*/

See Also

“LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1191


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetUserData

LCell_SetUserData

LStatus LCell_SetUserData( LCell cell, void* dataPointer );

Description

Uses a data pointer within a cell to associate user-defined data with the cell. Data can be integer, string,
or any other type.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameter

cell Cell which will contain the user-defined data.

Example

/*Declare user-defined data to be stored in a cell*/


typedef struct {
int x;
double y;
float z;
} CellUserDataRec;

CellUserDataRec cd;

/*The Cell Pointer*/


LCell cell;

/*Get a pointer to the currently open cell*/


cell = LCell_GetVisible();

/*Fill in data into CellUserDataRec*/


cd.x = 1; cd.y = 2.0; cd.z = 1.5;

/*Store cd into cell’s data pointer*/


LCell_SetUserData( cell, (void *) (&cd));

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1192


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_DeleteUserData

LCell_DeleteUserData

LStatus LCell_DeleteUserData( LCell cell );

Description

Deletes the user-defined expansion pointer in the specified cell.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Specified cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1193


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GenerateLayersEx830

LCell_GenerateLayersEx830

LStatus LCell_GenerateLayersEx00( LCell pCell, int iBinSize,


LLayer pLayer, LBoolean bDeletePreviousDerivedLayers,
LBoolean bMergeObjectsAfterGeneration )

Description

Generates a layer or all layers in the specified cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadCell —pCell is NULL

LBadParameters —iBinSize is <= 0

Parameters

pCell Cell to generate the layers in.


ibinSize Bin size for generating layers.
pLayer Layer to generate. If pLayer is NULL then all layers are generated.
bDeletePreviousDerivedLa If LTRUE, all existing derived layers will be deleted.
yers
bMergeObjectsAfterGenera If LTRUE, causes objects on the same generated layer to be merged
tion upon completion of the process, which can significantly increase the
processing time for more complex layouts.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LFile pFile = LCell_GetFile(pCell);
if(Assigned(pFile))
{
LLayer pLayer = LLayer_Find(pFile, "ndiff");
if(Assigned(pLayer))
{
if(LCell_GenerateLayersEx00(pCell,
LFile_LocUtoIntU(pFile, 100), pLayer, LTRUE, LFALSE) == LStatusOK)
{
// More Processing
// ...
}
}
else
{
LDialog_AlertBox("Cannot find layer \"ndiff\"");
} // endif(Assigned(pLayer))

L-Edit 14 User Guide Section 4 1194


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GenerateLayersEx830

} // endif(Assigned(pFile))
}

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LCell_GenerateLayers_v11_10” (page 1199), “LCell_GenerateLayers_v10_00” (page 1197),


“LCell_GenerateLayersEx99” (page 1196), “LCell” (page 1547), “LLayer” (page 1589),
“LBoolean” (page 1544), “LStatus” (page 1620), “Generated Layer Functions” (page 1428).

L-Edit 14 User Guide Section 4 1195


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GenerateLayersEx99

LCell_GenerateLayersEx99

LStatus LCell_GenerateLayersEx99( LCell pCell, int iBinSize, LLayer pLayer );

Description

Generates the layer or layers in the specified cell. To generate all layers, set pLayer to NULL.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

pCell Cell to generate the layers in.


ibinSize Bin size for generating layers.
pLayer Layer to generate. If pLayer is NULL then all layers are generated.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LCell_GenerateLayers_v11_10” (page 1199), “LCell_GenerateLayers_v10_00” (page 1197),


“LCell_GenerateLayersEx830” (page 1194), “LStatus” (page 1620), “LCell” (page 1547),
“Generated Layer Functions” (page 1428).

L-Edit 14 User Guide Section 4 1196


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GenerateLayers_v10_00

LCell_GenerateLayers_v10_00

LStatus LCell_GenerateLayers_v10_00( LCell pCell, LLayer* ArrayOfLayers,


unsigned int nNumberOfLayers, LBoolean bClearAllGeneratedLayers, LBoolean
bMergeObjectsAfterGeneration );

Description

Generates a layer or all layers in the specified cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadCell —pCell is NULL

LBadParameters —iBinSize is <= 0

Parameters

pCell Cell to generate the layers in.


ArrayOfLayers Layer(s) to generate.
nNumberOfLayers Number of layers to generate.
bClearAllGeneratedLayers If LTRUE, all existing derived layers will be deleted.
bMergeObjectsAfterGenera If LTRUE, causes objects on the same generated layer to be merged
tion upon completion of the process, which can significantly increase the
processing time for more complex layouts.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LFile pFile = LCell_GetFile(pCell);
if(Assigned(pFile))
{
LLayer pLayer = LLayer_Find(pFile, "ndiff");
if(Assigned(pLayer))
{
if(LCell_GenerateLayers_v10_00( pCell, &pLayer, 1,
LTRUE, LFALSE) == LStatusOK)
{
// More Processing
// ...
}
}
else
LDialog_AlertBox("Cannot find layer \"ndiff\"");
} // endif(Assigned(pFile))
}

L-Edit 14 User Guide Section 4 1197


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GenerateLayers_v10_00

See Also

“LCell_GenerateLayers_v11_10” (page 1199), “LCell_GenerateLayersEx99” (page 1196),,


“LCell_GenerateLayersEx830” (page 1194), “LCell” (page 1547), “LLayer” (page 1589),
“LBoolean” (page 1544), “LStatus” (page 1620), “Generated Layer Functions” (page 1428).

L-Edit 14 User Guide Section 4 1198


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GenerateLayers_v11_10

LCell_GenerateLayers_v11_10

LStatus LCell_GenerateLayers_v11_10(
LCell pCell,
const char* szCommandFile,
const char** pszArrayOfLayerNames,
unsigned int nNumberOfLayers
LBoolean bMergeObjectsAfterGeneration);

Description

This function works similarly to the Generate Layers dialog but instead of showing the dialog, the
layers to be generated are input through the pszArrayOfLayerNames parameter. Layers are generated
in the specified cell according to the following rules.

If a layer name does not exist in the command file, it is ignored. If a layer name does not exist in L-Edit,
it is created with its type as external.

If the layer exists in L-Edit and its type is external, it clears the layer before bringing in the generated
layers. If the layer exists in L-Edit and its type is not external, the layer is still generated but the name is
modified with "_1" appended (using appropriate name collision checking and incrementing).

Return Values

ƒ LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:
ƒ LBadCell—if pCell is NULL
ƒ LBadParameters —if iBinSize is <= 0
ƒ LCopyProtViolation—if no HiPer license exists
ƒ LOpenError—if szCommandFile does not exist
ƒ LUserAbort—if the user aborted the generate layers operation

Parameters

pCell Cell in which to generate the layers.


CommandFile Command file to check.
ArrayOfLayerNames Layer name(s) to generate.
nNumberOfLayers Number of layers to generate.
bMergeObjectsAfterGenera If LTRUE, causes objects on the same generated layer to be merged
tion upon completion of the process, which can significantly increase the
processing time for more complex layouts.

See Also

“LCell_GenerateLayers_v10_00” (page 1197), “LCell_GenerateLayersEx99” (page 1196),,


“LCell_GenerateLayersEx830” (page 1194), “LCell” (page 1547), “LLayer” (page 1589),
“LBoolean” (page 1544), “LStatus” (page 1620), “Generated Layer Functions” (page 1428).

L-Edit 14 User Guide Section 4 1199


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetChanged

LCell_SetChanged

void LCell_SetChanged( LCell pCell )

Description

Marks the cell as changed. This will also increment the minor version.

Parameters

pCell The cell to mark as changed.

Example

if(Assigned(pCell))
{
// Do some processing on pCell.
// ...

// Mark the file as changed.


LCell_SetChanged(pCell);

} // endif(Assigned(pCell))

Version

Available in L-Edit 8.2 and later versions.

See Also

“Cell Functions” (page 1162), “LCell” (page 1547), “LCell_IsChanged” (page 1184).

L-Edit 14 User Guide Section 4 1200


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RunDRC

LCell_RunDRC

LStatus LCell_RunDRC( LCell pCell, const LRect* pDRCArea,


unsigned int *pnNumErrors );

L-Edit 14 User Guide Section 4 1201


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RunDRCEx00

LCell_RunDRCEx00

LStatus LCell_RunDRCEx00( LCell pCell, LRect *pDRCArea, LCoord lcBinSize, const


char* szErrorFile, LBoolean bWriteErrorPorts,
LBoolean bWriteErrorObjects )

Description

Runs DRC on the entire cell or a specified area of a cell. You can specify the bin size, the DRC error
file, and whether to place error ports and objects during DRC. If Quietmode is on, then the RUN DRC
dialog and warning dialogs will not appear.

Note: Note that this function is superseded by “LCell_RunDRCEx01” (page 1204).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadCell —pCell is NULL

LSystemError—L-Edit could not find an active cell layout window or an open one.

LUserAbort—The user canceled DRC while it was running.

Parameters

pCell Cell to run DRC on.


pDRCArea Rectangular area to perform DRC on. If pDRCArea is NULL, then
DRC is performed on the entire cell.
lcBinSize Bin size in Internal Units.
szErrorFile Name of the file to write DRC error to. If szErrorFile is NULL,
no errors are written to a file.
bWriteErrorPorts Instructs L- Edit to place an error port on the specified error layer at
the location of each DRC violation. An error port consists of the
name of the violated design rule and a bracketed expression; the
expression indicates the spacing or nature of the error and the rule
distance.
bWriteErrorObjects Instructs L- Edit to place marker objects on the specified error layer at
the location of each violation.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LFile pFile = LCell_GetFile(pCell);

L-Edit 14 User Guide Section 4 1202


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RunDRCEx00

if(Assigned(pFile))
{
if(LCell_RunDRCEx00(pCell, NULL, LFile_LocUtoIntU(pFile, 100),
NULL, LTRUE, LFALSE) == LStatusOK)
{
// More Processing
// ...
}
} // endif(Assigned(pFile))

} // endif(Assigned(pCell))

Version

Available in L-Edit 8.2 and later versions.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“DRC Functions” (page 1477), “LCell” (page 1547), “LRect” (page 1613), “LCoord” (page 1550),
“LBoolean” (page 1544), “LStatus” (page 1620), “LDrcRule” (page 1568).

L-Edit 14 User Guide Section 4 1203


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RunDRCEx01

LCell_RunDRCEx01

LStatus LCell_RunDRCEx01( LCell pCell, LRect *pDRCArea, LCoord lcBinSize, const


char* szErrorFile, int flags)

[also LBoolean bWriteErrorPorts, LBoolean bWriteErrorObjects,


LBoolean bWriteErrors, LBoolean bWriteTimingStatistics);]

Description

LCell_RunDRCEx01 is similar to LCell_RunDRCEx00 except that it supports timing statistics and all
flags should be passed through the flags parameter.

Runs DRC on the entire cell or a specified area of a cell. You can specify the bin size, the DRC error
file, and whether to place error ports and objects during DRC. If Quietmode is on, then the RUN DRC
dialog and warning dialogs will not appear.

Note: This function supersedes “LDRC_Run” (page 1489) and “LCell_RunDRCEx00”


(page 1202). LCell_RunDRCEx830 can be used interchangeably with
LCell_RunDRCEx01.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadCell —pCell is NULL

LSystemError—L-Edit could not find an active cell layout window or an open one.

LUserAbort—The user canceled DRC while it was running.

L-Edit 14 User Guide Section 4 1204


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RunDRCEx01

Parameters

pCell Cell to run DRC on.


pDRCArea Pointer to an LRect (page 1613) structure that specifies a rectangular
area to perform DRC on. If pDRCArea is NULL, then DRC is
performed on the entire cell.
lcBinSize Bin size in Internal Units.
szErrorFile Name of the file to write DRC error to. If szErrorFile is NULL,
no errors are written to a file.
bWriteErrors Instructs L-Edit to write errors to the specified text file.
bWriteErrorPorts Instructs L-Edit to place an error port on the specified error layer at
the location of each DRC violation. An error port consists of the
name of the violated design rule and a bracketed expression; the
expression indicates the spacing or nature of the error and the rule
distance.
bWriteErrorObjects Instructs L-Edit to place marker objects on the specified error layer at
the location of each violation.
bWriteTimingStatistics Instructs L-Edit to write the elapsed time for each layer derivation and
each DRC rule check to a text file.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LFile pFile = LCell_GetFile(pCell);
if(Assigned(pFile))
{
if(LCell_RunDRCEx00(pCell, NULL, LFile_LocUtoIntU(pFile, 100),
NULL, LTRUE, LFALSE) == LStatusOK)
{
// More Processing
// ...
}
} // endif(Assigned(pFile))

} // endif(Assigned(pCell))

Version

Available in L-Edit 8.2 and later versions.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“DRC Functions” (page 1477), “LCell” (page 1547), “LRect” (page 1613), “LCoord” (page 1550),
“LBoolean” (page 1544), “LStatus” (page 1620), “LDrcRule” (page 1568).

L-Edit 14 User Guide Section 4 1205


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RunDRCCommandFile

LCell_RunDRCCommandFile

LStatus LCell_RunDRCCommandFile( LCell pCell, const char* szCommandFile, const


LRect* pDRCArea, unsigned int* pnNumErrors);

Description

LCell_RunDRCCommandFile runs HiPer using a Calibre, Assura or Dracula DRC command file. It
runs on the entire cell or a specified area of the cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadCell —pCell is NULL

LSystemError—DRC didn't run due to some problem (parsing error, crash, etc).

LUserAbort—The user canceled DRC while it was running.

LCopyProtViolation—HiPer could not get a license.

Parameters

pCell Pointer to the cell.


CommandFile String with the path and filename of the HiPer command file. If this
is an empty string "", then it will run the standard DRC rules.
pDRCArea Rectangular area to perform DRC on. If pDRCArea is NULL, then
DRC is performed on the entire cell.
pnNumErrors This should be the address to a integer variable where the number of
DRC errors found will be stored. It can be NULL.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
unsigned int nNumOfErrors = 0;
if(LCell_RunDRCCommandFile(pCell, "C:\\TSMC\\TSMC_HiPer.cal", NULL,
&nNumOfErrors) == LStatusOK)
{
// More Processing
// ...
}
}

Example

Available in L-Edit 11.0 and later versions.

L-Edit 14 User Guide Section 4 1206


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_ClearUndoLists

LCell_ClearUndoLists

LStatus LCell_ClearUndoLists( LCell cell );

Description

Clears the undo list for a cell. After calling this function the user can no longer undo his previous
changes.

Always call LCell_ClearUndoLists whenever the macro modifies the design in such a way that the
user's prior actions should not be undone. For example, if after manually removing the last polygon
from the layer Active the user runs a macro that removes the layer Active from the design, then
re-introducing of the removed polygon on a non-existing layer should not be permitted. This is why the
function LCell_ClearUndoLists is called internally from LLayer_Delete to prevent the user from
re-introducing invalid features by clicking Undo. It is a good practice to call LCell_ClearUndoLists at
the end of a complex macro.

Return Values

Returns LStatusOK if successful, LBadCell in case of failure.

Parameters

cell The cell for which the Undo should be cleared.

Example

LCell_ClearUndoLists( pCell );

Version

Available in L-Edit 8.4 and later versions.

See Also

“LLayer_Delete” (page 1403)

L-Edit 14 User Guide Section 4 1207


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetParameter

LCell_GetParameter

unsigned long LCell_GetParameter( LCell cell, const char *lpszParamName);

Description

Gets a T-Cell parameter value for the cell and parameter specified. If a T-Cell is specified, this function
gets the default value of the parameter. If a cell generated from a T-Cell is specified, this function gets
the parameter value used to generate the cell.

L-Edit automatically generates a call to LCell_GetParameter when it creates a T-Cell generator code
template. Normally, you will not need to add any calls to this function.

Return Values

Returns the value of the requested parameter.

Parameters

cell Pointer to the T-Cell or auto-generated cell


lpszParamName Name of the T-Cell parameter.

Version

Available in L-Edit 9.0 and later versions.

See Also

“LCell” (page 1547), “LInstance_Generate” (page 1241)

L-Edit 14 User Guide Section 4 1208


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetTCellPreviousValue

LCell_GetTCellPreviousValue

unsigned long LCell_GetTCellPreviousValue( LCell cell, const char*


cszParameterName, char* szBuffer, int nBufferLength );

Description

LCell_GetTCellPreviousValue is used to obtain the previous value of a T-Cell parameter, which is the
value the last time the T-Cell was created or modified. If the T-Cell is newly created, an empty string is
returned.

This function can be used in conjunction with LCell_SetTCellDefaultValue to implement callbacks, in


which a T-Cell can validate and modify parameters that are passed to it.

Return Values

Returns the value of the requested parameter if successful, or an empty string if the T-Cell is new.

Parameters

cell Pointer to the T-Cell or auto-generated cell


cszParameterName Name of the T-Cell parameter.
szbuffer Previous parameter value.
nBufferLength Size of the previous parameter.

Example

The following utility function can be used to determine whether a particular parameter has changed
from the previous invocation of the T-Cell:

int HasChanged( LCell pCell, char *param_name )


{
char old_val[1024], new_val[1024];
LCell_GetTCellPreviousValue(pCell, param_name, old_val, sizeof(old_val));
LCell_GetTCellDefaultValue(pCell, param_name, new_val, sizeof(new_val));
return strcmp( old_val, new_val );
}

Then, in the main T-Cell code body, we can use this information to modify other parameters. For
example, suppose we had a resistor that was parameterized by R, L and W. We want these three to be
consistent, and we need to modify one of them to enforce this consistancy. One possible solution would
be:

// update new parameters accordingly


char new_val[1024];
if ( HasChanged(cellCurrent, "L" ) && HasChanged(cellCurrent, "W" ) )
{
R = L / W * resistivity;
sprintf( new_val, "%g", R );

L-Edit 14 User Guide Section 4 1209


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetTCellPreviousValue

LCell_SetTCellDefaultValue(cellCurrent, "R", new_val);


}
else if ( HasChanged(cellCurrent, "L" ) )
{
W = L * resistivity / R;
sprintf( new_val, "%g", W );
LCell_SetTCellDefaultValue(cellCurrent, "W", new_val);
}
else
{
L = W * R / resistivity;
sprintf( new_val, "%g", L );
LCell_SetTCellDefaultValue(cellCurrent, "L", new_val);
}

Version

Available in L-Edit 12.20 and later versions.

See Also

LCell_GetTCellDefaultValue

L-Edit 14 User Guide Section 4 1210


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetShowInLists

LCell_SetShowInLists

LStatus LCell_SetShowInLists( LCell cell, LBoolean show );

Description

Sets the Show in Lists cell attribute. When this attribute is TRUE, the cell is always listed in the Design
Navigator, Cell > Open, and Cell > Instance dialogs. When FALSE, the cell is hidden from lists. You
can show hidden cells by selecting Show All Cells in the Design Navigator, Cell > Open, or
Cell > Instance dialogs.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Pointer to the cell.


show Show in Lists state. Possible values are:

ƒ LTRUE—Always include the cell in lists.


ƒ LFALSE—Omit the cell from cell lists, except when the Show
All Cells option is selected in L-Edit.

Version

Available in L-Edit 9.0 and later versions.

See Also

“LCell_GetShowInLists” (page 1212), “LStatus” (page 1620), “LCell” (page 1547), “LBoolean”
(page 1544)

L-Edit 14 User Guide Section 4 1211


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetShowInLists

LCell_GetShowInLists

LBoolean LCell_GetShowInLists( LCell cell );

Description

Gets the state of the Show in Lists cell attribute. When this attribute is TRUE, the cell is always listed
in the Design Navigator, Cell > Open, and Cell > Instance dialogs. When FALSE, the cell is hidden
from lists. You can show hidden cells by selecting Show All Cells in the Design Navigator,
Cell > Open, or Cell > Instance dialogs.

Return Values

Returns the state of the Show in Lists attribute, with possible values:

LTRUE—Always include the cell in lists.

LFALSE—Omit the cell from cell lists, except when the Show All Cells option is selected in L-Edit.

Version

Available in L-Edit 9.0 and later versions.

See Also

“LCell_SetShowInLists” (page 1211), “LBoolean” (page 1544), “LCell” (page 1547)

L-Edit 14 User Guide Section 4 1212


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_CalcMBB

LCell_CalcMBB

void LCell_CalcMBB( LCell pCell );

L-Edit 14 User Guide Section 4 1213


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_AddMarker

LCell_AddMarker

LMarker LCell_AddMarker( LCell pCell, const char* cszText, int nNumOfVertices,


LBoolean bPolygon, const LPoint* cpnVertices, const LMarkerParam* cpParam
);

L-Edit 14 User Guide Section 4 1214


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RemoveMarker

LCell_RemoveMarker

void LCell_RemoveMarker( LCell pCell, LMarker MarkerHandle );

L-Edit 14 User Guide Section 4 1215


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_RemoveAllMarkers

LCell_RemoveAllMarkers

void LCell_RemoveAllMarkers( LCell pCell );

L-Edit 14 User Guide Section 4 1216


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_BooleanOperation

LCell_BooleanOperation

LStatus LCell_BooleanOperation( LCell pCell, LBooleanOperation nOp,


LCoord Amount, LObject* ArrayOfObjectsA, unsigned int nNumOfObjectsA,
LObject* ArrayOfObjectsB, unsigned int nNumOfObjectsB,
LLayer pResultLayer, LBoolean bDeleteInputs );

Description

Performs Boolean operations on a group of objects. You can perform OR, AND, XOR, NOT, GROW,
SHRINK, and SUBTRACT on two groups of objects. (This is similar to the Draw > Boolean/Grow
Operations command in L-Edit.)

Return Values

Returns the state of the Show in Lists attribute, with possible values:

LTRUE Always include the cell in lists.


LFALSE Omit the cell from cell lists, except when the Show All Cells option is
selected in L-Edit.

Parameters

pCell Cell in which to put the resultant objects.


nOp Boolean operation to perform (See “LBooleanOperation” (page
1545). BoolOp_OR, LBoolOp_AND, LBoolOp_XOR,
LBoolOp_NOT, LBoolOp_GROW, LBoolOp_SHRINK,
LBoolOp_SUBTRACT)

nAmount The amount by which to grow or shrink the object.


ArrayOfObjectsA Array of objects in group A.
nNumOfObjectsA Number of objects in group A.
ArrayOfObjectsB Array of objects in group B.
nNumOfObjectsA Number of objects in group B.
pResultLayer Layer on which to put the resultant objects.
bDeleteInput Deletes the original objects.

Example

LCell pCell = LCell_GetVisible();


LFile pTDBFile= LCell_GetFile(pCell);

int nNumOfM1Boxes = 0;
LLayer pM1Layer = LLayer_Find(pTDBFile, "Metal1");
LObject pObject = NULL;

L-Edit 14 User Guide Section 4 1217


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_BooleanOperation

// Count the number of boxes on Metal 1


for(pObject = LObject_GetList(pCell, pM1Layer);
Assigned(pObject);
pObject = LObject_GetNext(pObject))
{
if(LObject_GetShape(pObject) == LBox)
nNumOfM1Boxes++;
}

// Allocate the memory for the object array.


LObject* paObjects = (LObject*)malloc(nNumOfM1Boxes*sizeof(LObject));

int nIndex = 0;
for(pObject = LObject_GetList(pCell, pM1Layer);
Assigned(pObject);
pObject = LObject_GetNext(pObject))
{
if(LObject_GetShape(pObject) == LBox)
paObjects[nIndex++] = pObject;
}

// Grow all boxes on M1 by 1 micron.


LCell_BooleanOperation(pCell, LBoolOp_GROW, 1000, paObjects, nNumOfM1Boxes,
NULL, 0, pM1Layer, LTRUE);

// Free the memory for the object array.


free(paObjects);

Version

Available in L-Edit10.0 and later versions.

L-Edit 14 User Guide Section 4 1218


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_Slice

LCell_Slice

LStatus LCell_Slice( LCell pCell, LObject* pObjectArray,


unsigned int nNumOfObjects, const LPoint *cpPoint1, const LPoint *cpPoint2
);

L-Edit 14 User Guide Section 4 1219


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_SetBasePoint

LCell_SetBasePoint

LStatus LCell_SetBasePoint(LCell pCell, LCoord lX, LCoord lY);

L-Edit 14 User Guide Section 4 1220


Chapter 35: UPI Functions Reference Database Functions Cell Functions
LCell_GetBasePoint

LCell_GetBasePoint

LPoint LCell_GetBasePoint( LCell pCell);

L-Edit 14 User Guide Section 4 1221


Chapter 35: UPI Functions Reference Database Functions Cell Functions
l_Slice

l_Slice

LStatus LCell_Slice( LCell pCell, LObject* pObjectArray,


unsigned int nNumOfObjects, const LPoint *cpPoint1, const LPoint *cpPoint2
);

L-Edit 14 User Guide Section 4 1222


Chapter 35: UPI Functions Reference Database Functions Instance Functions
l_Slice

Instance Functions

An instance is a reference to a cell (the instanced cell) from within another cell (the instancing cell).
Each instancing cell maintains a list of instances in an LInstance data structure.

Instance functions allow the user to manipulate an instance of a cell.

“LInstance_New_Ex99” (page 1225) “LInstance_Delete” (page 1226)

“LInstance_Set_Ex99” (page 1228) “LInstance_GetMbb” (page 1240)

“LInstance_Find” (page 1229) “LInstance_FindNext” (page 1230)

“LInstance_GetList” (page 1231) “LInstance_GetNext” (page 1232)

“LInstance_GetName” (page 1233) “LInstance_SetName” (page 1234)

“LInstance_GetTransform_Ex99” (page “LInstance_GetCell” (page 1235)


1237)
“LInstance_GetRepeatCount” (page 1238) “LInstance_GetDelta” (page 1239)

“LInstance_Generate” (page 1241) “LInstance_GenerateV” (page 1242)

Obsolete:
“LInstance_New” (page 1224) “LInstance_Set” (page 1227)

“LInstance_GetTransform” (page 1236)

L-Edit 14 User Guide Section 4 1223


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_New

LInstance_New

LInstance LInstance_New( LCell cell, LCell instance_cell, LTransform transform,


LPoint repeat_cnt, LPoint delta );

Description

Creates a new instance or array of instances in the specified cell. (An array is a geometrically regular
two-dimensional arrangement of instances of a single cell.)

The array repeat count specified in repeat_cnt and array spacing offset specified in delta specify how
an array of instances will be created.

The parameters cell and instance_cell must be in the same file.

Return Values

Returns a pointer to the newly created instance or array if successful; otherwise returns NULL.

Parameters

cell Instancing cell.


instance_cell Instanced cell.
transform Translation and rotation of the new instance.
repeat_cnt Ordered pair specifying the dimensions of the array. The first number
in the pair specifies rows; the second number specified columns.
Minimum value is 1,1.
delta Ordered pair specifying the spacing offset of the array.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LObject” (page 1600), “LTransform” (page 1626), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1224


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_New_Ex99

LInstance_New_Ex99

LInstance LInstance_New_Ex99( LCell cell, LCell instance_cell, LTransform_Ex99


transform, LPoint repeat_cnt, LPoint delta );

Description

Creates a new instance or array of instances in the specified cell. (An array is a geometrically regular
two-dimensional arrangement of instances of a single cell.)

The array repeat count specified in repeat_cnt and array spacing offset specified in delta specify how
an array of instances will be created.

The parameters cell and instance_cell must be in the same file.

Return Values

Returns a pointer to the newly created instance or array if successful; otherwise returns NULL.

Parameters

cell Instancing cell.


instance_cell Instanced cell.
transform Translation and rotation of the new instance.
repeat_cnt Ordered pair specifying the dimensions of the array. The first number
in the pair specifies rows; the second number specified columns.
Minimum value is 1,1.
delta Ordered pair specifying the spacing offset of the array.

See Also

“LInstance_New” (page 1224), “LObject” (page 1600), “LTransform” (page 1626),


“Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1225


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_Delete

LInstance_Delete

LStatus LInstance_Delete( LCell cell, LInstance instance );

Description

Deletes the specified instance from the specified cell.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Instancing cell.


instance Instance to be deleted.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1226


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_Set

LInstance_Set

LStatus LInstance_Set( LCell cell, LInstance instance,


LTransform transform, LPoint repeat_cnt, LPoint delta );

Description

Modifies the specified instance or array of instances in the specified cell with new values for translation,
rotation, dimension, and offset.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Instancing cell.


instance Instance to be modified.
transform Translation, rotation, and magnification of the instance.
repeat_cnt Dimensions of the array.
delta Spacing offset of the array.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LTransform” (page 1626),


“Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1227


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_Set_Ex99

LInstance_Set_Ex99

LStatus LInstance_Set_Ex99( LCell cell, LInstance instance,


LTransform_Ex99 transform, LPoint repeat_cnt, LPoint delta );

Description

Modifies the specified instance or array of instances in the specified cell with new values for translation,
rotation, dimension, and offset.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Instancing cell.


instance Instance to be modified.
transform Translation, rotation, and magnification of the instance.
repeat_cnt Dimensions of the array.
delta Spacing offset of the array.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LTransform” (page 1626),“Instance Functions”
(page 1223)

L-Edit 14 User Guide Section 4 1228


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_Find

LInstance_Find

LInstance LInstance_Find( LCell pCell, const char* szName );

Description

Searches for an instance of the specified name in the specified cell.

Return Values

Returns a pointer to the instance if successful; otherwise returns NULL.

Parameters

pCell Instancing cell to search for instances.


szName Name of instance to search for.

See Also

“LInstance” (page 1587), “LCell” (page 1547), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1229


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_FindNext

LInstance_FindNext

LInstance LInstance_FindNext( LInstance instance, const char* name );

Description

Continues the search for an instance of the specified name (proceeding from the last such instance).

Return Values

Returns a pointer to the next instance if successful; otherwise returns NULL.

Parameters

instance Most recently found instance.


name Name of instance to search for.

See Also

“LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1230


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetList

LInstance_GetList

LInstance LInstance_GetList( LCell cell );

Description

Gets the first instance in the specified cell’s list of instances.

Return Values

Returns a pointer to the instance list if successful; otherwise returns NULL.

Parameters

cell Instancing cell.

See Also

“LInstance_GetNext” (page 1232), “LFile_GetList” (page 1109), “LCell_GetList” (page 1168),


“Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1231


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetNext

LInstance_GetNext

LInstance LInstance_GetNext( LInstance instance );

Description

Gets the next instance after the specified instance in the current cell’s list of instances.

Return Values

Returns a pointer to the next instance if successful; otherwise returns NULL.

Parameters

instance Specified instance.

See Also

“LObject” (page 1600), “LInstance_GetList” (page 1231), “LFile_GetNext” (page 1110),


“LCell_GetNext” (page 1169), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1232


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetName

LInstance_GetName

char* LInstance_GetName( LInstance instance, char* name, const int maxlen );

Description

Gets the name of the specified instance as a string (up to a maximum string length).

Return Values

Returns a pointer to the instance name buffer if successful; otherwise returns NULL.

Parameters

instance Instance whose name is to be retrieved.


name String (buffer) containing the name text.
maxlen Maximum length allowed for name.

See Also

“LObject” (page 1600), “LFile_GetName” (page 1114), “LCell_GetName” (page 1172),


“Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1233


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_SetName

LInstance_SetName

LStatus LInstance_SetName( LCell cell, LInstance instance, char* name );

Description

Sets the name of the specified instance in the specified cell.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Cell containing the instance.


instance Instance to be (re)named.
name New name of the instance.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1234


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetCell

LInstance_GetCell

LCell LInstance_GetCell( LInstance instance );

Description

Gets the parent (instanced) cell of the specified instance.

Return Values

Returns a pointer to the parent cell if successful; otherwise returns NULL.

Parameter

instance Specified instance.

See Also

“LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1235


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetTransform

LInstance_GetTransform

LTransform LInstance_GetTransform( LInstance instance );

Description

Gets the transformation of the specified instance.

Return Values

Returns the translation, magnification, and rotation of the specified instance; returns a zero transform on
error.

Parameters

instance Specified instance.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1236


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetTransform_Ex99

LInstance_GetTransform_Ex99

LTransform_Ex99 LInstance_GetTransform_Ex99( LInstance instance );

Description

Gets the transformation of the specified instance.

Return Values

Returns the translation, magnification, and rotation of the specified instance; returns a zero transform on
error.

Parameters

instance Specified instance.

See Also

“LInstance_GetTransform” (page 1236), “LTransform” (page 1626), “LObject” (page 1600),


“Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1237


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetRepeatCount

LInstance_GetRepeatCount

LPoint LInstance_GetRepeatCount( LInstance instance );

Description

Gets the repeat count of an instance.

Return Values

Returns the array dimensionality of the specified instance as an ordered pair, or (1,1) for non-array
instances; returns (0,0) on error.

Parameters

instance Specified instance.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1238


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetDelta

LInstance_GetDelta

LPoint LInstance_GetDelta( LInstance instance );

Description

Gets the array spacing of the specified instance as an ordered pair.

Return Values

Returns the array spacing of the specified instance as an ordered pair; returns (0,0) on error

Parameters

instance Specified instance.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1239


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GetMbb

LInstance_GetMbb

LRect LInstance_GetMbb( LInstance instance );

Description

Gets the Mbb of an instance.

Return Values

Returns the coordinates of the rectangle representing the minimum bounding box (Mbb) of the specified
instance; on error returns a rectangle whose coordinates are all zeros.

Parameters

instance Specified instance.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1240


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_Generate

LInstance_Generate

LInstance LInstance_Generate( LCell cell, LCell TCell, params...);

Description

Creates an instance of a T-Cell in the specified cell, passing parameters to the T-Cell generator code.

Return Values

Returns a pointer to the newly created instance if successful; otherwise, returns NULL.

Parameters

cell Pointer to the cell in which to place the T-Cell instance.


TCell Pointer to the T-Cell generator to be instanced.
params... T-Cell parameters. Parameters are passed as pairs of strings (i.e.,
const char*), each representing a parameter name and
corresponding value. (See example, below.)

If you pass fewer parameters than are defined for the instanced
T-Cell, you must end the list with a NULL or empty string for the
next parameter name.

Version

Available in L-Edit 9.0 and later versions.

See Also

“LCell” (page 1547), “LInstance” (page 1587), “LInstance_GenerateV” (page 1242)

L-Edit 14 User Guide Section 4 1241


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GenerateV

LInstance_GenerateV

LInstance LInstance_GenerateV( LCell cell, LCell instance_cell, char **argList


);

Description

Creates an instance of a cell in the specified cell.

Return Values

Returns a pointer to the newly created instance if successful; otherwise, returns NULL.

Parameters

cell Pointer to the cell in which to place the cell instance.


LCell Pointer to the cell to be instanced.

Example 1

/* This example creates an instance of cell DecoderGen, passing two


parameter values to the T-Cell generator. */
char* params[5]; /* array of pointers to character strings */

/* Initialize parameter variables*/


int Outputs = 4;
int DecoderBits = 2;

/* Create array of parameter names and values */


/* parameter 1, name and value */
params[0] = "DecoderBits"; params[1] = LFormat("%d", DecoderBits);

/* parameter 2, name and value */


params[2] = "Outputs"; params[3] = LFormat("%d", Outputs);

/* End the parameter list with NULL */


params[4] = NULL;

LInstance_GenerateV(MyCell, DecoderGen, params);

Example 2

int add_contact( LCell cell, char * l)


{
char *params[3];
LCell tcell;
LPoint here;
LFile file;
LTransform_Ex99 xform;
LInstance inst;
LPoint one;
params[0] = "bottom";

L-Edit 14 User Guide Section 4 1242


Chapter 35: UPI Functions Reference Database Functions Instance Functions
LInstance_GenerateV

params[1] = l;
params[2] = NULL;
file = LCell_GetFile(cell);
tcell = LCell_Find( file, "contact");
here = LCursor_GetSnappedPosition();
if (tcell == NULL ) {
LDialog_AlertBox( "failed to find contact");
return 1;
}
inst = LInstance_GenerateV(cell, tcell, params);
xform = LInstance_GetTransform_Ex99(inst);
xform.translation = here;
one.y = one.x = 1.0;
LInstance_Set_Ex99(cell, inst, xform, one, one);

L-Edit 14 User Guide Section 4 1243


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LInstance_GenerateV

Entity Functions

Entity functions control properties for LFile, LCell, LLayer, or LObject (LBox, LPolygon, LWire,
LPort, LCircle, and LInstance) entities. LFile, LCell, LLayer, and LObject must be cast to LEntity for
use with the Entity Functions.

“LEntity_PropertyExists” (page 1245) “LEntity_GetPropertyType” (page 1246)

“LEntity_GetPropertyValueSize” (page 1247) “LEntity_GetPropertyValue” (page 1248)

“LEntity_AssignProperty” (page 1249) “LEntity_AssignBlobProperty” (page 1250)

“LEntity_DeleteProperty” (page 1251) “LEntity_DeleteAllProperties” (page 1252)

“LEntity_CopyAllProperties” (page 1253)

“LEntity_GetFirstProperty” (page 1254) “LEntity_GetNextProperty” (page 1255)

“LEntity_SetCurrentProperty” (page 1256) “LEntity_BrowseProperties” (page 1257)

“LEntity_ValidPropertyNameToString” (page “LEntity_StringToValidPropertyName” (page


1264) 1262)
“LEntity_ReadPropertiesFromFile” (page 1260) “LEntity_WritePropertiesToFile” (page 1266)

“LEntity_LoadBlobProperty” (page 1258) “LEntity_SaveBlobProperty” (page 1259)

“LEntity_StoreAsCompressedBlob” (page 1268) “LEntity_DecompressBlobToFile” (page 1269)

L-Edit 14 User Guide Section 4 1244


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_PropertyExists

LEntity_PropertyExists

LStatus LEntity_PropertyExists( const LEntity entity, const char* name );

Description

Determines whether a property exists.

Return Values

Returns LStatusOK if the property is found. If an error occurs, LStatus contains the error value.

Parameters

entity A pointer to an LEnitity.


name The path of the property.

L-Edit 14 User Guide Section 4 1245


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_GetPropertyType

LEntity_GetPropertyType

LStatus LEntity_GetPropertyType ( const LEntity entity, const char* name,


LPropertyType *type );

Description

Retrieves the property’s type.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

entity A pointer to an LEnitity.


name The path of the property.
type A pointer to the property type.

L-Edit 14 User Guide Section 4 1246


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_GetPropertyValueSize

LEntity_GetPropertyValueSize

unsigned int LEntity_GetPropertyValueSize( const LEntity entity, const char*


name );

Description

Retrieves the size of a property’s value.

Return Values

Returns the size of the value if the property is found and it has a value; otherwise, returns zero.

Parameters

entity A pointer to an LEnitity.


name The path of the property.

L-Edit 14 User Guide Section 4 1247


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_GetPropertyValue

LEntity_GetPropertyValue

LStatus LEntity_GetPropertyValue (const LEntity entity, const char* name, void*


value, unsigned int max_size)

Description

Retrieves a property’s value.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

entity A pointer to an LEnitity.


name The path of the property.
value A pointer to the value.
max_size The maximum size of the buffer pointed to by the value.

L-Edit 14 User Guide Section 4 1248


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_AssignProperty

LEntity_AssignProperty

LStatus LEntity_AssignProperty( LEntity entity, const char* name, LPropertyType


type, const void* value );

Description

Creates a new property and assigns a type and value, or changes or removes the value of an existing
property. An existing property’s type cannot be changed.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

entity A pointer to an LEnitity.


name The path of the property.
value A pointer to the value. If NULL, no value is assigned to a new
property, or the current value of an existing property is removed.
type The property’s type.

L-Edit 14 User Guide Section 4 1249


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_AssignBlobProperty

LEntity_AssignBlobProperty

LStatus LEntity_AssignBlobProperty( LEntity entity, const char* name,


const void* value, unsigned int size );

Description

Creates a new blob property and a value, changes or removes the value of an existing property.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

entity A pointer to an LEnitity.


name The path of the property.
value A pointer to the value. If NULL, no value is assigned to a new
property, or the current value of an existing property is removed.
size The size of the value.

L-Edit 14 User Guide Section 4 1250


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_DeleteProperty

LEntity_DeleteProperty

LStatus LEntity_DeleteProperty( LEntity entity, const char* name );

Description

Deletes a property.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

entity A pointer to an LEnitity.


name The path of the property.

L-Edit 14 User Guide Section 4 1251


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_DeleteAllProperties

LEntity_DeleteAllProperties

LStatus LEntity_DeleteAllProperties( LEntity entity );

Description

Deletes all properties on an entity.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

entity A pointer to an LEnitity.


name The path of the property.

L-Edit 14 User Guide Section 4 1252


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_CopyAllProperties

LEntity_CopyAllProperties

LStatus LEntity_CopyAllProperties( LEntity target_entity,


const LEntity source_entity );

Description

Copies all of one entity’s properties to another entity overwriting the other entity’s properties.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

target_entity A pointer to the target entity.


source_entity A pointer to the source entity.

L-Edit 14 User Guide Section 4 1253


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_GetFirstProperty

LEntity_GetFirstProperty

const char* LEntity_GetFirstProperty( const LEntity entity );

Description

Retrieves the first property of an entity.

Return Values

Returns the name first property on an entity or NULL if the entity has no properties.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

entity A pointer to an LEnitity.

L-Edit 14 User Guide Section 4 1254


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_GetNextProperty

LEntity_GetNextProperty

const char* LEntity_GetNextProperty( void );

Description

Retrieves the next property of an entity or NULL if there are no more properties on the entity.

Note: If the current property is deleted or renamed, the next call will return NULL, unless
an appropriate call to LEntity_SetCurrentProperty is made first.

Return Values

Returns the name of the next property on an entity or NULL if the entity has no more properties.

Parameters

entity A pointer to an LEnitity.

L-Edit 14 User Guide Section 4 1255


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_SetCurrentProperty

LEntity_SetCurrentProperty

void LEntity_SetCurrentProperty( const char* name );

Description

Sets the name of the current property in the traversal of the property tree.

Return Values

Returns the name of the path of the current property on an entity.

Parameters

name The full path of the property.

L-Edit 14 User Guide Section 4 1256


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_BrowseProperties

LEntity_BrowseProperties

LStatus LEntity_BrowseProperties( LEntity entity );

Description

Invokes the standard property browser.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error.

Parameters

entity The entity on which to invoke the browser.

L-Edit 14 User Guide Section 4 1257


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_LoadBlobProperty

LEntity_LoadBlobProperty

LStatus LEntity_LoadBlobProperty( LEntity entity, const char* name, const char*


file_name )

Description

Sets a blob property from a file.

Return Values

Returns the name of the next property on an entity or NULL if the entity has no more properties.

Parameters

entity A pointer to an LEnitity.


name The path of the property
file_name The name of the file containing the value.

L-Edit 14 User Guide Section 4 1258


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_SaveBlobProperty

LEntity_SaveBlobProperty

LStatus LEntity_SaveBlobProperty( const LEntity entity, const char* name, void*


value, const char* file_name)

Description

Saves a blob property’s value to a file.

Return Values

Returns the name of the next property on an entity or NULL if the entity has no more properties.

Parameters

entity A pointer to an LEnitity.


name The path of the property
file_name The name of the file containing the value.

L-Edit 14 User Guide Section 4 1259


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_ReadPropertiesFromFile

LEntity_ReadPropertiesFromFile

LStatus LEntity_ReadPropertiesFromFile( LEntity pEntity, const char *szPath,


const char* szFilename)

Description

Reads a text file with property information in TTX format and assigns the properties to the indicated
property subtree on the specified entity (File, Cell, Layer, or Object).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadObject —if pEntity is NULL.

LBadParameters—if szFilename is NULL.

LCreateError—if the file szFilename could not be opened for reading.

LSystemError—if tpropprs.dll could not be loaded.

LPropertyConversionError—if an error occurred during the importing of the properties from a


file.

Parameters

pEntity Entity that has the properties to write to the file.


szPath Path to the property subtree to write to the file. If szPath = NULL,
then all properties are written to the file.
szFileName Export filename.

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
if(LEntity_ReadPropertiesFromFile((LEntity)pFile, "MyProperties",
"MyProp.ttx") == LStatusOK)
{
// More Processing
// ...
}
} // endif(Assigned(pFile))

Version

Available in L-Edit 8.2 and later versions.

L-Edit 14 User Guide Section 4 1260


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_ReadPropertiesFromFile

See Also

“Entity Functions” (page 1244), “LEntity_WritePropertiesToFile” (page 1266), “Properties” on page


138,
“LStatus” (page 1620).

L-Edit 14 User Guide Section 4 1261


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_StringToValidPropertyName

LEntity_StringToValidPropertyName

LStatus LEntity_StringToValidPropertyName( const char* szString,


char *szPropertyName, int iBufferSize );

Description

Converts a string to a valid property name by replacing all underscores (_) with double underscores (__)
and all invalid characters to _## where ## is the two digit ASCII number in hexadecimal for that
character. A valid property name can consists of letters, numbers, spaces, and underscores.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadParameters —One or more of the following:

szString is NULL.

szPropertyName is NULL.

iBufferSize < 2.

Parameters

szString String to convert.


szPropertyName String buffer to store the result in.
iBufferSize Size of the szPropertyName string buffer.

Example

char szPropertyName[256];
if(LEntity_StringToValidPropertyName("Metal 1 & Metal 2 - DRC",
szPropertyName, 255) == LStatusOK)
{
// szPropertyName now equals "Metal 1 _038 Metal 2 _045 DRC"

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
int iData = 5;
if(LEntity_AssignProperty((LEntity)pFile, szPropertyName,
L_int, &iData) == LStatusOK)
{
// More Processing
// ...
}
} // endif(Assigned(pFile))
} // endif(LEntity_StringToValidPropertyName("Metal 1 & Metal 2 - DRC",
szPropertyName, 255) == LStatusOK)

L-Edit 14 User Guide Section 4 1262


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_StringToValidPropertyName

Version

Available in L-Edit 8.2 and later versions.

See Also

“Entity Functions” (page 1244), “LEntity_ValidPropertyNameToString” (page 1264),


“Properties” on page 138, “LStatus” (page 1620).

L-Edit 14 User Guide Section 4 1263


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_ValidPropertyNameToString

LEntity_ValidPropertyNameToString

LStatus LEntity_ValidPropertyNameToString( const char* szPropertyName, char*


szString, int iBufferSize );

Description

Converts a property name to a string by replacing all double underscores (__) with single underscores
(_) and converting _## to the ASCII character whose number is ## in hexadecimal. A valid property
name can consists of letters, numbers, spaces, and underscores. This function is used in conjunction
with LEntity_StringToValidPropertyName to store strings with invalid characters as property names.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadParameters —one or more of the following:

szPropertyName is NULL.

szString is NULL.

iBufferSize < 2.

Parameters

szPropertyName Property name to convert.


szString String buffer to store the result in.
iBufferSize Size of the szString string buffer.

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
// Get the first property.
const char* pszPropertyName =
LEntity_GetFirstProperty((LEntity)pFile);

char szString[256];
if(LEntity_ValidPropertyNameToString(pszPropertyName, szString, 255)
== LStatusOK)
{
// szString now equals "Metal 1 & Metal 2 - DRC"

// More Processing
// ...
} // endif(LEntity_ValidPropertyNameToString(pszPropertyName,
szString, 255) == LStatusOK)
} // endif(Assigned(pFile))

L-Edit 14 User Guide Section 4 1264


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_ValidPropertyNameToString

Version

Available in L-Edit 8.2 and later versions.

See Also

“Entity Functions” (page 1244), “LEntity_StringToValidPropertyName” (page 1262),


“Properties” on page 138, “LStatus” (page 1620).

L-Edit 14 User Guide Section 4 1265


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_WritePropertiesToFile

LEntity_WritePropertiesToFile

LStatus LEntity_WritePropertiesToFile( const LEntity pEntity,


const char *szPath, const char* szFilename );

Description

Write properties from the indicated property subtree on the specified entity (File, Cell, Layer, or Object)
to a text file in TTX format.

Return Values

StatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadObject —if pEntity is NULL.

LBadParameters—if szFilename is NULL.

LCreateError—if the file szFilename could not be created.

LSystemError—if tpropprs.dll could not be loaded.

LPropertyConversionError—if an error occurred during the exporting of the properties to a file.

Parameters

pEntity Entity that has the properties to write to the file.


szPath Path to the property subtree to write to the file. If szPath = NULL,
then all properties are written to the file.
szFileName Export filename.

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
if(LEntity_WritePropertiesToFile((LEntity)pFile, "MyProperties",
"MyProp.ttx") == LStatusOK)
{
// More Processing
// ...
}
} // endif(Assigned(pFile))

Version

Available in L-Edit 8.2 and later versions.

L-Edit 14 User Guide Section 4 1266


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_WritePropertiesToFile

See Also

“Entity Functions” (page 1244), “LEntity_ReadPropertiesFromFile” (page 1260),


“Properties” on page 138, “LStatus” (page 1620).

L-Edit 14 User Guide Section 4 1267


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_StoreAsCompressedBlob

LEntity_StoreAsCompressedBlob

LStatus LEntity_StoreAsCompressedBlob( LEntity pEntity, const char *szFileName,


const char* szBlobPropName, const char *szUncompressedSizePropName );

L-Edit 14 User Guide Section 4 1268


Chapter 35: UPI Functions Reference Database Functions Entity Functions
LEntity_DecompressBlobToFile

LEntity_DecompressBlobToFile

LStatus LEntity_DecompressBlobToFile( LEntity pEntity, const char *szFileName,


const char* szBlobPropName, const char *szUncompressedSizePropName );

L-Edit 14 User Guide Section 4 1269


Chapter 35: UPI Functions Reference Database Functions Object Functions
LEntity_DecompressBlobToFile

Object Functions

Object functions allow the user to manipulate an object in a cell. uch objects include points, boxes,
circles, wires, and polygons. These functions do not apply to ports (see “Port Functions” on page 1350)
or instances (see “Instance Functions” on page 1223).

General object functions include:

“LObject_GetList” (page 1272) “LObject_GetNext” (page 1273)

“LObject_GetShape” (page 1278) “LObject_GetMbb” (page 1277)

“LObject_GetLayer” (page 1283) “LObject_ChangeLayer” (page 1287)

“LObject_GetGeometry” (page 1279) “LObject_GetInstance” (page 1276)

“LObject_GetVertexList” (page 1280) “LObject_Perimeter” (page 1282)

“LObject_Area” (page 1281) “LObject_SetGDSIIDataType” (page 1285)

“LObject_GetGDSIIDataType” (page 1284) “LObject_Delete” (page 1271)

“LObject_Transform_Ex99” (page 1275) “LObject_Copy” (page 1290)

“LObject_ConvertToPolygon” (page 1289) “LObject_SnapToMfgGrid” (page 1292)

“LObject_SnapToGrid” (page 1291) “LObject_DistanceToPoint” (page 1293)

:“LObject_GetMbb” (page 1277)

Obsolete
“LObject_Transform” (page 1274)

Other categories of object functions include:

“Vertex Functions” (page 1294) “Wire Functions” (page 1330)

“Box Functions” (page 1309) “Polygon Functions” (page 1343)

“Circle Functions” (page 1313) “Port Functions” (page 1350)

“Torus and Pie Functions” (page 1319)

L-Edit 14 User Guide Section 4 1270


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_Delete

LObject_Delete

LStatus LObject_Delete( LCell cell, LObject object );

Description

Removes object from cell.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Cell containing the object to be deleted.


object Object to be deleted.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1271


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetList

LObject_GetList

LObject LObject_GetList( LCell cell, LLayer layer );

Description

Gets a list of objects in the specified cell on the specified layer.

Return Values

Returns a pointer to the head object in the current object list if successful; otherwise returns NULL.

Parameters

cell Specified cell.


layer Layer on which objects are drawn.

See Also

“LObject” (page 1600), “LWireParam” (page 1633), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1272


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetNext

LObject_GetNext

LObject LObject_GetNext( LObject object );

Description

Gets the next object which follows the specified object.

Return Values

Returns a pointer to the next object in the object list if successful; otherwise returns NULL.

Parameters

object Specified object.

See Also

“LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1273


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_Transform

LObject_Transform

void LObject_Transform( LObject object, LTransform transform );

Description

Transforms an object.

Parameters

object Specified object.


transform Specified transform.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LObject” (page 1600), “LTransform” (page 1626), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1274


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_Transform_Ex99

LObject_Transform_Ex99

void LObject_Transform_Ex99( LObject object, LTransform_Ex99 transform );

Description

Transforms an object.

Parameters

object Specified object.


transform Specified transform.

See Also

“LObject_Transform” (page 1274), “LObject” (page 1600), “LTransform” (page 1626),


“Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1275


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetInstance

LObject_GetInstance

LInstance LObject_GetInstance( LObject pObject )

Description

Converts an LObject to an LInstance if possible.

Return Values

If pObject is a LInstance then a LInstance, NULL otherwise.

Parameters

pObject Object to convert.

See Also

“LInstance” (page 1587), “LObject” (page 1600), “Instance Functions” (page 1223),
“Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1276


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetMbb

LObject_GetMbb

LRect LObject_GetMbb( LObject object );

Description

Gets the minimum bounding box of an object.

Return Values

Returns the coordinates of the Mbb rectangle if successful; otherwise returns a rectangle whose
coordinates are all zeros.

Parameters

object Specified object.

See Also

“LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1277


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetShape

LObject_GetShape

LShapeType LObject_GetShape( LObject pObject )

Description

Gets the shape of an object.

Return Values

Returns the shape of object as an LShapeType enum. Possible values include box, circle, wire,
polygon, torus, pie wedge, instance, port, ruler, or other.

Parameters

pObject Specified object.

See Also

“LShapeType” (page 1618), “LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1278


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetGeometry

LObject_GetGeometry

LGeomType LObject_GetGeometry( LObject object );

Description

Gets the geometry specifications of an object.

Return Values

Returns the geometric constraint of object as an LGeomType enum. Geometry types include
orthogonal, 45-degree angle, and all-angle.

Parameters

object Specified object.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1279


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetVertexList

LObject_GetVertexList

LVertex LObject_GetVertexList( LObject object );

Description

Retrieves the first vertex of an object. This works only on LPolygon and LWire.

Return Values

Returns a pointer to the first vertex in a polygon or wire object’s vertex list or NULL if no vertices exist
for the object.

Parameters

object The specified object.

L-Edit 14 User Guide Section 4 1280


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_Area

LObject_Area

double LObject_Area( LObject pObject );

Description

Calculates the area of a box, polygon, wire, circle, pie wedge or torus.

Return Values

The area of the object in Internal Units squared.

Parameters

pObject Specified object.

See Also

“LObject_Perimeter” (page 1282), “LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1281


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_Perimeter

LObject_Perimeter

double LObject_Perimeter( LObject pObject );

Description

Calculates the perimeter of a box, polygon, wire, circle, pie wedge or torus.

Return Values

The perimeter of the object in Internal Units.

Parameters

pObject Specified object.

See Also

“LObject_Area” (page 1281), “LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1282


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetLayer

LObject_GetLayer

LLayer LObject_GetLayer( LCell pCell, LObject pObject );

Description

Retrieves the layer of the specified object.

Return Values

Returns the layer of the object if successful; otherwise returns NULL.

Parameters

pCell Specified cell containing the object.


pObject Specified object.

See Also

“LObject” (page 1600), “Object Functions” (page 1270), “LWireParam” (page 1633)

L-Edit 14 User Guide Section 4 1283


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_GetGDSIIDataType

LObject_GetGDSIIDataType

short LObject_GetGDSIIDataType( LObject pObject );

Description

Retrieves the GDSII data type of an object.

Return Values

The GDSII data type if successful, -1 if an error occurred such as pObject is NULL or pObject is an
instance.

Parameters

pObject Specified object.

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
// Get the GDSII Data Type of the first object in the selected.
LSelection pSelection = LSelection_GetList();
if(Assigned(pSelection))
{
LObject pObject = LSelection_GetObject(pSelection);
if(Assigned(pObject))
{
short iObjectDataType =
LObject_GetGDSIIDataType(pObject);
// More Processing
// ...
}
}
}

Version

Available in L-Edit 8.2 and later versions.

See Also

“LObject_SetGDSIIDataType” (page 1285), “Object Functions” (page 1270), “LObject” (page 1600),
“LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1284


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_SetGDSIIDataType

LObject_SetGDSIIDataType

LStatus LObject_SetGDSIIDataType( LObject pObject, short GDSIIDataType );

Description

Sets the GDSII data type of an object.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadObject —one or more of the following:

pObject is NULL

pObject is an instance

Parameters

pObject Specified object.


GDSIIDataType GDSII data type

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
LCell pCell = LCell_Find(pFile, "MyCell");
LLayer pLayer = LLayer_Find(pFile, "Poly");
if(Assigned(pCell) && Assigned(pLayer))
{
LObject pObject;
// Set the GDSII data type of each object on Poly in cell
MyCell to 12.
for(pObject = LObject_GetList(pCell, pLayer);
Assigned(pObject);
pObject = LObject_GetNext(pObject))
{
if(LObject_SetGDSIIDataType(pObject, 12) != LStatusOK)
{
// Some problem occurred.
break;
}
}
}
}

Version

Available in L-Edit 8.2 and later versions.

L-Edit 14 User Guide Section 4 1285


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_SetGDSIIDataType

See Also

“LObject_GetGDSIIDataType” (page 1284), “Object Functions” (page 1270), “LObject” (page 1600),
“LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1286


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_ChangeLayer

LObject_ChangeLayer

LStatus LObject_ChangeLayer( LCell pCell, LObject pObject, LLayer pNewLayer );

Description

Changes the layer of an object to a different layer. After this function is called, the pObject pointer is no
longer valid for getting the next object (LObject_GetNext—see example below).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error type with possible values:

LBadCell—pCell is NULL.

LBadObject—pObject is NULL, pObject is an instance, or object is corrupted.

LBadLayer —pLayer is NULL.

Parameters

pCell Cell which contains the object.


pObject Object to change the layer of.
pNewLayer New layer.

Example

LCell pCell = LCell_GetVisible(); // The current cell.


if(NotAssigned(pCell))
{
LDialog_AlertBox("ERROR: Could not find a Visible Cell.");
return;
}

LFile pTDBFile = LCell_GetFile(pCell);// The TDB current file.


if(NotAssigned(pTDBFile))
{
LDialog_AlertBox("ERROR: Could not get the TDB file from the Visible
Cell.");
return;
}

// Change all objects on Poly to Metal1.


LLayer pPoly = LLayer_Find(pTDBFile, "Poly");
LLayer pMetal1 = LLayer_Find(pTDBFile, "Metal1");
if(Assigned(pPoly) && Assigned(pMetal1))
{
LObject pObject = NULL, pNextObject = NULL;
for(pObject = LObject_GetList(pCell, pPoly); Assigned(pObject);
pObject = pNextObject)
{

L-Edit 14 User Guide Section 4 1287


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_ChangeLayer

// After the LObject_ChangeLayer call, the pObject pointer will


no longer be valid.
// So get the next object before you change the
layer.
pNextObject = LObject_GetNext(pObject);
if(LObject_ChangeLayer(pCell, pObject, pMetal1) == LStatusOK)
{
// The layer was changed to Metal1.
}
} // endfor(pObject = LObject_GetList(pCell, pPoly);
Assigned(pObject); pObject = pNextObject)
} // endif(Assigned(pLayer))

Version

Available in L-Edit 8.3 and later versions.

See Also

“Object Functions” (page 1270), “LObject” (page 1600), “LStatus” (page 1620), “LCell” (page
1547),“LLayer” (page 1589), “LObject_GetLayer” (page 1283), “LObject_GetNext” (page 1273)

L-Edit 14 User Guide Section 4 1288


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_ConvertToPolygon

LObject_ConvertToPolygon

LStatus LObject_ConvertToPolygon( LCell pCell, LObject* ArrayOfObjects,


unsigned int nNumOfObjects );

L-Edit 14 User Guide Section 4 1289


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_Copy

LObject_Copy

LObject LObject_Copy( LCell pCell, LLayer pLayer, LObject pObject );

L-Edit 14 User Guide Section 4 1290


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_SnapToGrid

LObject_SnapToGrid

LBoolean LObject_SnapToGrid( LObject pObject, LCoord nGridSize );

Description

LObject_SnapToGrid snaps the object to the grid size specified. This is similar to
“Draw > Convert > Snap to Manufacturing Grid” (page 186) except it snaps to the specified grid, not
the manufacturing grid.

Return Values

LTrue—If the object was not on the specified grid and the object was snapped to the grid (changed).

LFalse—If the object was on the specified grid and the object was not changed.

Parameters

pObject The object to snap.


nGridsize The grid size, in internal units.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LFile pTDBFile= LCell_GetFile(pCell);
LGrid_v10_00 oGridInfo;
LFile_GetGrid_v10_00(pTDBFile, &oGridInfo);

// Snap all selected objects to the mouse snap grid.


LSelection pSelection = NULL;
for(pSelection = LSelection_GetList();
Assigned(pSelection);
pSelection = LSelection_GetNext(pSelection))
{
LObject_ SnapToGrid(LSelection_GetObject(pSelection),
oGridInfo.mouse_snap_grid_size);
}
}

Version

Available in L-Edit v13.1 and later versions.

L-Edit 14 User Guide Section 4 1291


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_SnapToMfgGrid

LObject_SnapToMfgGrid

LBoolean LObject_SnapToMfgGrid( LObject pObject, LFile pTDBFile );

Description

LObject_SnapToMfgGrid snaps the object to the manufacturing grid. This is similar to


“Draw > Convert > Snap to Manufacturing Grid” (page 186).

Return Values

LTrue—If the object was not on the manufacturing grid and the object was snapped to the
manufacturing grid (changed).

LFalse—If the object was on the manufacturing grid and the object was not changed.

Parameters

pObject The object to snap.


pTDBFile The TDBFile whose manufacturing grid to snap to.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LFile pTDBFile= LCell_GetFile(pCell);

// Snap all selected objects to the manufacturing grid.


LSelection pSelection = NULL;
for(pSelection = LSelection_GetList();
Assigned(pSelection);
pSelection = LSelection_GetNext(pSelection))
{
LObject_ SnapToGrid(LSelection_GetObject(pSelection),
pTDBFile);
}
}

Version

Available in L-Edit v13.1 and later versions.

L-Edit 14 User Guide Section 4 1292


Chapter 35: UPI Functions Reference Database Functions Object Functions
LObject_DistanceToPoint

LObject_DistanceToPoint

LCoord LObject_DistanceToPoint( LObject pObject, LPoint ptPoint, LFile pTDBFile


);

L-Edit 14 User Guide Section 4 1293


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions

Vertex Functions

“LVertex_GetCount” (page 1295) “LVertex_GetArray” (page 1296)

“LObject_GetVertexList” (page 1280) “LVertex_GetNext” (page 1297)

“LVertex_GetPoint” (page 1298) “LVertex_SetPoint” (page 1299)

“LVertex_GetCurve” (page 1303) “LVertex_GetCurveEX” (page 1304)

“LVertex_Add” (page 1300) “LVertex_Delete” (page 1301)

“LVertex_AddCurve” (page 1302) “LVertex_RemoveCurve” (page 1308)

“LVertex_HasCurve” (page 1306) “LVertex_SetCurve” (page 1307)

“LVertex_GetCurveExactCenter” (page
1305)

L-Edit 14 User Guide Section 4 1294


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_GetCount

LVertex_GetCount

long LVertex_GetCount( LObject object );

Description

Gets the number of vertices in a polygon or wire.

Return Values

Returns the number of vertices in object of type polygon or wire; on error returns -1.

Parameters

object Specified object.

See Also

“LObject” (page 1600), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1295


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_GetArray

LVertex_GetArray

long LVertex_GetArray( LObject object, LPoint point_arr[], const int maxpoints


);

Description

Fills an array with the vertices stored in an object. If the number of vertices is greater than maxpoints,
the extra vertices are ignored.

Return Values

Returns the number of vertices in object of type polygon or wire; on error returns -1.

Parameters

cell Specified object.


point_arr Array of vertices.
maxpoints Maximum number of vertices allowed.

See Also

“LObject” (page 1600), “LTransform” (page 1626), “Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1296


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_GetNext

LVertex_GetNext

LVertex LVertex_GetNext( LVertex vertex );

Description

Gets the next vertex of an object.

Return Values

Returns a pointer to the next vertex in a polygon or wire object’s vertex list or NULL if no vertices exist
for the object.

Parameters

vertex The previous vertex.

Example

/* for each vertex of the polygon */


for (LVertex Vertex = LObject_GetVertexList (MyPolygon);
vertex !=NULL;
Vertex = LVertex_GetNext(Vertex);
{
/* do something with the current vertex */
}

L-Edit 14 User Guide Section 4 1297


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_GetPoint

LVertex_GetPoint

LPoint LVertex_GetPoint( LVertex vertex );

Description

Gets the x and y coordinates for a vertex.

Return Values

Returns a point structure containing the coordinates. If the vertex pointer was invalid, the return value is
not defined.

Parameters

vertex A specified vertex.

L-Edit 14 User Guide Section 4 1298


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_SetPoint

LVertex_SetPoint

LStatus LVertex_SetPoint( LVertex vertex, LPoint point );

Description

Sets the x and y coordinates for a vertex.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

vertex A specified vertex.


point A point structure with the x and y coordinates.

Example

/* get the point information associated with MyVertex */


LPoint Point = LVertex_GetPoint(MyVertex)
/* change the position of the point */
Point.y +=10;
Point.x -=20;

/* update the position of the MyVertex */


LVertex_SetPoint(MyVertex, point);

L-Edit 14 User Guide Section 4 1299


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_Add

LVertex_Add

LVertex LVertex_Add( LObject object, const LVertex prev_vertex, LPoint point );

Description

Adds a vertex to the object. The object can be an LPolygon or LWire. prev_vertex is a pointer to the
previous vertex. If prev_vertex=NULL, the vertex is added to the head of the list.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

object Object to add vertex to.


prev_vertex The previous vertex.
point A point structure with the x and y coordinate.

L-Edit 14 User Guide Section 4 1300


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_Delete

LVertex_Delete

LStatus LVertex_Delete( LObject object, LVertex vertex );

Description

Deletes the vertex from the object. The object can be an LPolygon or LWire. This function will delete
only if more than three vertices exist.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

object The object to delete the vertex from.


vertex The vertex to be deleted.

L-Edit 14 User Guide Section 4 1301


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_AddCurve

LVertex_AddCurve

LStatus LVertex_AddCurve( LObject object, LVertex vertex, LPoint center,


LArcDirection dir );

Description

Adds an arc going from the vertex indicated by the vertex parameter to the next vertex
LVertex_GetNext(vertex). The arc is centered at the center parameter and has clockwise direction if
dir is CW and counterclockwise if dir is CCW.

Return Values

Returns LStatusOK if successful, LBadObject if object is NULL, or LBadParameters if vertex is either


NULL or the last one.

Parameters

object The polygon to add the arc to.


vertex The start of the arc that ends in LVertex_GetNext(vertex).
center The center of the arc.
dir CW for clockwise, CCW for counterclockwise.

Example

LVertex_AddCurve(pPolygon, pStartVertex, Center, CCW);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LVertex_RemoveCurve” (page 1308), “LVertex_GetCurve” (page 1303), “LVertex_GetCurveEX”


(page 1304), “LVertex_SetCurve” (page 1307), “LVertex_GetCurveExactCenter” (page 1305).

L-Edit 14 User Guide Section 4 1302


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_GetCurve

LVertex_GetCurve

LStatus LVertex_GetCurve( LVertex vertex, LPoint *center, LArcDirection *dir );

Description

Retrieves the center and the direction of the curve that starts from the indicated vertex.

Return Values

Returns LStatusOK if successful, LBadParameters upon failure.

Parameters

vertex The start vertex of the curve.


center The destination for the center.
dir The destination for the direction, either CW for clockwise or CCW for
counterclockwise.

Example

LPoint Center;
LArcDirection Dir;
LVertex_GetCurve(pVertex, &Center, &Dir);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LVertex_GetCurveEX” (page 1304), “LVertex_SetCurve” (page 1307), “LVertex_AddCurve” (page


1302)

L-Edit 14 User Guide Section 4 1303


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_GetCurveEX

LVertex_GetCurveEX

LStatus LVertex_GetCurveEX( LObject object, LVertex vertex, LPoint *center,


LCoord *radius, LPoint *start, LPoint *end, LArcDirection *dir );

Description

Retrieves the parameters of the curve that starts from indicated vertex.

Return Values

Returns LStatusOK if successful, LBadParameters on failure.

Parameters

object The curved polygon.


vertex The start vertex of the curve.
center The destination for the center.
radius The destination for the radius.
start The destination for the start of the arc.
end The destination for the end of the arc.
dir The destination for the direction, either CW for clockwise or CCW for
counterclockwise.

Example

LPoint Center, Start, End;


LCoord Radius;
LArcDirection Dir;
LVertex_GetCurve(pPolygon, pVertex, &Center, &Radius, &Start, &End, &Dir);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LVertex_GetCurve” (page 1303), “LVertex_SetCurve” (page 1307), “LVertex_AddCurve” (page


1302)

L-Edit 14 User Guide Section 4 1304


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_GetCurveExactCenter

LVertex_GetCurveExactCenter

DPoint LVertex_GetCurveExactCenter( LObject object, LVertex vertex,


LCoord radius, LArcDirection *dir );

Description

Retrieves the center and the direction of the curve that starts from the indicated vertex.

Return Values

Exact center as DPoint. Unlike LPoint, DPoint has coordinates as doubles, not integers.

Parameters

object The curved polygon.


vertex The start vertex of the curve.
radius The desired radius.
dir (This is supposed to be the destination for the direction but as of
L-Edit version 8.4 is not in use.)

Example

LArcDirection Dir = CCW;


LPoint Center;
DPoint ExactCenter = LVertex_GetCurveExactCenter(pPolygon, pVertex, Radius,
&Dir);
Center.x = ExactCenter.x;
Center.x = ExactCenter.y;
LVertex_AddCurve(pPolygon, pVertex, Center, Dir);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LVertex_GetCurve” (page 1303), “LVertex_SetCurve” (page 1307), “LVertex_AddCurve” (page


1302)

L-Edit 14 User Guide Section 4 1305


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_HasCurve

LVertex_HasCurve

int LVertex_HasCurve( LVertex vertex );

Description

Indicates whether the edge that follows the vertex indicated in the parameter vertex is a curve.

Return Values

1 if the edge following the vertex is a curve, 0 otherwise.

Parameters

vertex The start vertex of the edge to check.

Example

int bIsCurve = LVertex_HasCurve(pVertex);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LPolygon_HasCurve” (page 1347)

L-Edit 14 User Guide Section 4 1306


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_SetCurve

LVertex_SetCurve

LStatus LVertex_SetCurve( LVertex vertex, LPoint center, LArcDirection dir );

Description

Sets the center and the direction of the curve that starts from the indicated vertex.

Return Values

Returns LStatusOK if successful, LBadParameters on failure.

Parameters

vertex The start vertex of the curve.


center The center of the curve.
dir The direction, either CW for clockwise or CCW for counterclockwise.

Example

LPoint Center;
LArcDirection Dir;
Center.x = 50;
Center.y = 100;
Dir = CCW ;
LVertex_SetCurve(pVertex, Center, Dir);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LVertex_GetCurve” (page 1303), “LVertex_GetCurveEX” (page 1304), “LVertex_AddCurve” (page


1302),
“LVertex_GetCurveExactCenter” (page 1305)

L-Edit 14 User Guide Section 4 1307


Chapter 35: UPI Functions Reference Database Functions Object Functions Vertex Functions
LVertex_RemoveCurve

LVertex_RemoveCurve

LStatus LVertex_RemoveCurve( LObject object, LVertex vertex );

Description

Straightens the edge that follows the vertex indicated in the parameter.

Return Values

Returns LStatusOK if successful, LBadParameters if the vertex is either NULL or the last one.

Parameters

object The curved polygon.


vertex The start vertex of the edge to straighten.

Example

LVertex_RemoveCurve(pPolygon, pVertex);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LVertex_HasCurve” (page 1306), “LVertex_AddCurve” (page 1302),


“LVertex_RemoveCurve” (page 1308), “LPolygon_RemoveAllCurves” (page 1348)

L-Edit 14 User Guide Section 4 1308


Chapter 35: UPI Functions Reference Database Functions Object Functions Box Functions

Box Functions

“LBox_New” (page 1310)

“LBox_Set” (page 1311)

“LBox_GetRect” (page 1312)

L-Edit 14 User Guide Section 4 1309


Chapter 35: UPI Functions Reference Database Functions Object Functions Box Functions
LBox_New

LBox_New

LObject LBox_New( LCell cell, LLayer layer,


LCoord x0, LCoord y0, LCoord x1, LCoord y1 );

Description

Creates a new box object in cell on layer with the given coordinates.

Return Values

Returns a pointer to the newly created box if successful; otherwise returns NULL.

Parameters

cell Cell where box will be drawn.


layer Layer on which the box will be drawn.
x0 Lower left x-coordinate of box.
y0 Lower left y-coordinate of box.
x1 Upper right x-coordinate of box.
y1 Upper right y-coordinate of box.

See Also

“LObject” (page 1600), “LWireParam” (page 1633), “Box Functions” (page 1309)

L-Edit 14 User Guide Section 4 1310


Chapter 35: UPI Functions Reference Database Functions Object Functions Box Functions
LBox_Set

LBox_Set

LStatus LBox_Set( LCell cell, LObject object, LRect box );

Description

Modifies the coordinates of the object in cell according to the specification contained in box.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Cell that contains the box.


object Pointer to the box object.
box New coordinates of the box.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LTransform” (page 1626), “Box Functions” (page
1309)

L-Edit 14 User Guide Section 4 1311


Chapter 35: UPI Functions Reference Database Functions Object Functions Box Functions
LBox_GetRect

LBox_GetRect

LRect LBox_GetRect( LObject object );

Description

Returns the minimum bounding box (MBB) of the specified box.

Return Values

If successful, an LRect structure containing the minimum bounding box (MBB) of the specified box; on
error, a rectangle whose coordinates are all zeros.

Parameters

object Specified box object.

See Also

“LObject” (page 1600), “LTransform” (page 1626), “Box Functions” (page 1309)

L-Edit 14 User Guide Section 4 1312


Chapter 35: UPI Functions Reference Database Functions Object Functions Circle Functions
LBox_GetRect

Circle Functions

“LCircle_New” (page 1314) “LCircle_Set” (page 1315)

“LCircle_GetRadius” (page 1317) “LCircle_GetCenter” (page 1316)

“LCircle_GetRect” (page 1318)

L-Edit 14 User Guide Section 4 1313


Chapter 35: UPI Functions Reference Database Functions Object Functions Circle Functions
LCircle_New

LCircle_New

LObject LCircle_New( LCell cell, LLayer layer, LPoint center, LCoord radius );

Description

Creates a new circle in cell on layer with the center and radius specified by center and radius.

Return Values

Returns a pointer to the newly created circle if successful; otherwise returns NULL.

Parameters

cell Cell where the new circle is to be drawn.


layer Layer on which circle is to be drawn.
center x- and y- coordinates of the center.
radius Radius of the circle.

See Also

“LObject” (page 1600), “LWireParam” (page 1633), “LTransform” (page 1626),


“Circle Functions” (page 1313)

L-Edit 14 User Guide Section 4 1314


Chapter 35: UPI Functions Reference Database Functions Object Functions Circle Functions
LCircle_Set

LCircle_Set

LStatus LCircle_Set( LCell cell, LObject object, LPoint center, LCoord radius );

Description

Modifies object in cell to the new center and radius.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Cell where the circle is drawn.


object Circle object.
center New x- and y- coordinates of the center.
radius New circle radius.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LTransform” (page 1626), “Circle Functions” (page
1313)

L-Edit 14 User Guide Section 4 1315


Chapter 35: UPI Functions Reference Database Functions Object Functions Circle Functions
LCircle_GetCenter

LCircle_GetCenter

LPoint LCircle_GetCenter( LObject object );

Description

Gets the coordinates of the center of a circle.

Return Values

Returns the center point of object, or (0,0) on error

Parameters

object Circle object.

See Also

“LTransform” (page 1626), “LObject” (page 1600), “Circle Functions” (page 1313)

L-Edit 14 User Guide Section 4 1316


Chapter 35: UPI Functions Reference Database Functions Object Functions Circle Functions
LCircle_GetRadius

LCircle_GetRadius

LCoord LCircle_GetRadius( LObject pObject );

Description

Gets the radius of a circle.

Return Values

Returns the radius of object, or (0,0) on error

Parameters

pObject Circle object.

See Also

“LCoord” (page 1550), “LObject” (page 1600), “Circle Functions” (page 1313)

L-Edit 14 User Guide Section 4 1317


Chapter 35: UPI Functions Reference Database Functions Object Functions Circle Functions
LCircle_GetRect

LCircle_GetRect

LRect LCircle_GetRect( LObject pObject );

Description

Returns the minimum bounding box (MBB) of the specified circle.

Return Values

If successful, an LRect structure containing the minimum bounding box (MBB) of the specified circle;
on error, a rectangle whose coordinates are all zeros.

Parameters

pObject Specified circle object.

See Also

“LRect” (page 1613), “LObject” (page 1600), “Circle Functions” (page 1313)

L-Edit 14 User Guide Section 4 1318


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions

Torus and Pie Functions

“LPie_CreateNew” (page 1320)

“LPie_GetParams” (page 1322) “LPie_SetParams” (page 1323)

“LTorus_CreateNew” (page 1325)

“LTorus_GetParams” (page 1327) “LTorus_SetParams” (page 1328)

“LTorusParams” (page 1625)

L-Edit 14 User Guide Section 4 1319


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LPie_CreateNew

LPie_CreateNew

LObject LPie_CreateNew( LCell cell, LLayer layer, LPieParams *params );

Description

Creates a new pie in cell on layer with the parameters specified by params.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell cell is NULL

LBadParameters One or more of the following errors:


ƒ layer is NULL
ƒ params is NULL
ƒ |params.center.x| > WORLD_MAX or |params.center.y| >
WORLD_MAX
ƒ params.Radius ≤ 0 or params.Radius > WORLD_MAX
ƒ params.StartAngle < 0 or params.StartAngle > 360
ƒ params.StopAngle < 0 or params.StopAngle > 360

Parameters

cell Cell where the new pie is to be drawn.


layer Layer on which the new pie is to be drawn.
params Parameters of the pie.

Example

/* Define parameters of the new pie */


LPieParams pParams;
pParams.Center = {0, 0};
pParams.Radius = 50;
pParams.StartAngle = 45;
pParams.StopAngle = 90;

/* Use these parameters to define a new pie */


LObject MyPie = LPie_CreateNew(pCell, pLayer, &pParams);

/* Duplicate MyPie in a new cell and layer */


LPie_GetParams(MyPie, &pParams);
LObject NewPie = LPie_CreateNew(newCell, newLayer, &pParams);

L-Edit 14 User Guide Section 4 1320


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LPie_CreateNew

Version

Available in L-Edit 8.4 and later versions.

See Also

“LPie_GetParams” (page 1322), “LPie_SetParams” (page 1323), “LPieParams” (page 1609)

L-Edit 14 User Guide Section 4 1321


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LPie_GetParams

LPie_GetParams

LStatus LPie_GetParams( LObject object, LPieParams *params );

Description

Retrieves the parameters of the specified pie and writes them to the destination params.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with
LBadParameters. An error occurs when either object or params is NULL.

Parameters

object Specified pie object.


params Destination to which pie parameters are written.

Example

/*Write parameter values of MyPie to destination pParams*/


LPieParams pParams;
LPie_GetParams(MyPie, &pParams);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LPie_SetParams” (page 1323), “LPie_CreateNew” (page 1320), “LPieParams” (page 1609)

L-Edit 14 User Guide Section 4 1322


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LPie_SetParams

LPie_SetParams

LStatus LPie_SetParams( LCell cell, LObject object, LPieParams *params );

Description

Sets the parameters of the specified pie on cell to the values defined by params.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell cell is NULL

LBadParameters One or more of the following errors:


ƒ object is NULL
ƒ params is NULL
ƒ |params.center.x| > WORLD_MAX or |params.center.y| >
WORLD_MAX
ƒ params.Radius ≤ 0 or params.Radius > WORLD_MAX
ƒ params.StartAngle < 0 or params.StartAngle > 360
ƒ params.StopAngle < 0 or params.StopAngle > 360

Parameters

cell Cell containing the pie.


object Specified pie object.
params Pie parameter values.

Example

/* Get the current parameters of MyPie */


LPieParams pParams;
LPie_GetParams(MyPie, &pParams);

/* Change the radius of the pie */


pParams.Radius *= 2;

/* Update MyPie with the new parameters */


LPie_SetParams(pCell, MyPie, &pParams)

L-Edit 14 User Guide Section 4 1323


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LPie_SetParams

Version

Available in L-Edit 8.4 and later versions.

See Also

“LPie_GetParams” (page 1322), “LPie_CreateNew” (page 1320), “LPieParams” (page 1609)

L-Edit 14 User Guide Section 4 1324


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LTorus_CreateNew

LTorus_CreateNew

LObject LTorus_CreateNew( LCell cell, LLayer layer, LTorusParams *params );

Description

Creates a new torus in cell on layer with the parameters specified by params.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell cell is NULL

LBadParameters One or more of the following errors:


ƒ layer is NULL
ƒ params is NULL
ƒ |params.center.x| > WORLD_MAX or |params.center.y| >
WORLD_MAX
ƒ params.Center ( LCoord x, LCoord y )
ƒ params.InnerRadius ≤ 0 or
params.InnerRadius > WORLD_MAX
ƒ params.OuterRadius ≤ 0 or
params.OuterRadius > WORLD_MAX
ƒ params.StartAngle < 0 or params.StartAngle > 360
ƒ params.StopAngle < 0 or params.StopAngle > 360

Parameters

cell Cell where the new torus is to be drawn.


layer Layer on which the new torus is to be drawn.
params Torus parameter values.

Example

/* Define parameters for a torus */


LTorusParams tParams;
tParams.ptCenter = LPoint_Set (0,0);
tParams.nInnerRadius = 50;
tParams.nOuterRadius = 100;
tParams.dStartAngle = 45;
tParams.dStopAngle = 90;

/* Use these parameters to define a new torus */

L-Edit 14 User Guide Section 4 1325


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LTorus_CreateNew

LObject MyTorus = LTorus_CreateNew(tCell, tLayer, &tParams);

/*Duplicate MyTorus in a new cell and layer */


LTorus_GetParams(MyTorus, &tParams);
LObject NewTorus = LTorus_CreateNew(newCell, newLayer, &tParams);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LTorus_GetParams” (page 1327), “LTorus_SetParams” (page 1328), “LTorusParams” (page


1625)

L-Edit 14 User Guide Section 4 1326


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LTorus_GetParams

LTorus_GetParams

LStatus LTorus_GetParams( LObject object, LTorusParams *params );

Description

Retrieves the parameters of the specified torus and writes them to the destination params.

Return Values

Returns LStatusOK if successful. If an error occurs, returns the error value LBadParameters . An
error occurs when object or params is NULL.

Parameters

object Specified torus object.


params Destination to which torus parameters are written.

Example

/*Write parameter values of MyTorus to destination tParams*/


LTorusParams tParams;
LTorus_GetParams(MyTorus, &tParams);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LTorus_SetParams” (page 1328), “LTorus_CreateNew” (page 1325), “LTorusParams” (page 1625)

L-Edit 14 User Guide Section 4 1327


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LTorus_SetParams

LTorus_SetParams

LStatus LTorus_SetParams( LCell cell, LObject object, LTorusParams *params);

Description

Sets the parameters of the specified torus on cell to the values defined in params.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell cell is NULL

LBadParameters One or more of the following errors:


ƒ object is NULL
ƒ params is NULL
ƒ |params.center.x| > WORLD_MAX or |params.center.y| >
WORLD_MAX
ƒ params.InnerRadius ≤ 0 or
params.InnerRadius > WORLD_MAX
ƒ params.OuterRadius ≤ 0 or
params.OuterRadius > WORLD_MAX
ƒ params.StartAngle < 0 or params.StartAngle > 360
ƒ params.StopAngle < 0 or params.StopAngle > 360

Parameters

cell Cell containing the torus.


object Specified torus object.
params Torus parameter values.

Example

/* Get the current parameters of MyTorus */


LTorusParams tParams;
LTorus_GetParams(MyTorus, &tParams);

/* Double the outer radius of the torus */


tParams.OuterRadius *= 2;

/* Update MyTorus with the new parameters */


LTorus_SetParams(tCell, MyTorus, &tParams)

L-Edit 14 User Guide Section 4 1328


Chapter 35: UPI Functions Reference Database Functions Object Functions Torus and Pie Functions
LTorus_SetParams

Version

Available in L-Edit 8.4 and later versions.

See Also

“LTorus_GetParams” (page 1327), “LTorus_CreateNew” (page 1325), “LTorusParams” (page


1625)

L-Edit 14 User Guide Section 4 1329


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions

Wire Functions

“LWire_New” (page 1331)

“LWire_GetWidth” (page 1332) “LWire_SetWidth” (page 1339)

“LWire_GetCapType” (page 1333) “LWire_SetCapType” (page 1341)

“LWire_GetJoinType” (page 1334) “LWire_SetJoinType” (page 1340)

“LWire_GetMiterAngle” (page 1335) “LWire_SetMiterAngle” (page 1342)

“LWire_GetLength” (page 1336)

“LWire_GetSquares” (page 1337)

“LWire_GetResistance” (page 1338)

L-Edit 14 User Guide Section 4 1330


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_New

LWire_New

LObject LWire_New( LCell cell, LLayer layer, LWireConfig *config, LWireConfigBits


bits, LPoint point_arr[], const int npoints );

Description

Creates a new wire in cell on layer. The new wire will have npoints set to the values in the array
point_arr. If config is NULL or bits is zero, the wire will have the default width, join, and end styles of
the corresponding layer. If bits is set to a mask of LWireConfigBits enum values, then values from the
structure config will be used to override the defaults for the settings of bits.

Return Values

Pointer to the newly created wire if successful; NULL otherwise.

Parameters

cell Cell which will contain the wire.


layer Wire layer.
config Pointer to the wire configuration structure.
bit Wire configuration bits.
point_arr Array of wire vertices.
npoints Number of wire vertices.

See Also

“LObject” (page 1600), “LWireParam” (page 1633), “LWireConfig” (page 1631), “LWireConfigBits”
(page 1632), “LTransform” (page 1626), “Wire Functions” (page 1330)

L-Edit 14 User Guide Section 4 1331


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_GetWidth

LWire_GetWidth

LCoord LWire_GetWidth( LObject object );

Description

Gets the wire width.

Return Values

Returns the width setting of the object, or zero on error.

Parameters

object Specified wire object.

See Also

“LObject” (page 1600), “LTransform” (page 1626), “Wire Functions” (page 1330)

L-Edit 14 User Guide Section 4 1332


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_GetCapType

LWire_GetCapType

LCapType LWire_GetCapType( LObject pObject );

Description

Gets the wire cap type.

Return Values

Returns the wire cap style of object. The return value is undefined on error.

Parameters

pObject Wire object.

See Also

“LCapType” (page 1546), “LObject” (page 1600), “Wire Functions” (page 1330)

L-Edit 14 User Guide Section 4 1333


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_GetJoinType

LWire_GetJoinType

LJoinType LWire_GetJoinType( LObject object );

Description

Gets the wire join type

Return Values

Returns the wire join style of object—miter, round, or bevel. The return value is undefined on error.

Parameters

object Wire object.

See Also

“LPort” (page 1611), “LObject” (page 1600), “Wire Functions” (page 1330)

L-Edit 14 User Guide Section 4 1334


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_GetMiterAngle

LWire_GetMiterAngle

short LWire_GetMiterAngle( LObject Object );

Description

Gets the wire miter angle

Return Values

Returns the miter angle of object. It returns -1 on error.

Parameters

object Wire object.

See Also

LObject (page 4-698), Wire Functions (page 4-400)

L-Edit 14 User Guide Section 4 1335


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_GetLength

LWire_GetLength

double LWire_GetLength( LObject pObject )

Description

Calculates the centerline length of the wire including end styles.

Return Values

The centerline length of the wire in Internal Units.

Parameters

pObject Specified object.

See Also

“LWire_GetSquares” (page 1337), “LWire_GetResistance” (page 1338), “Wire Functions” (page


1330)

L-Edit 14 User Guide Section 4 1336


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_GetSquares

LWire_GetSquares

double LWire_GetSquares( LObject pObject );

Description

Calculates the number of squares of an orthogonal wire including end styles. In the calculation of the
number of squares, corners are counted as ½ a square.

Return Values

The number of squares of an orthogonal wire in Internal Units. If the object is not an orthogonal wire,
then zero.

Parameters

pObject Specified object.

See Also

“LWire_GetLength” (page 1336), “LWire_GetResistance” (page 1338), “Wire Functions” (page


1330)

L-Edit 14 User Guide Section 4 1337


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_GetResistance

LWire_GetResistance

double LWire_GetResistance( LObject pObject );

Description

Calculates the resistance of an orthogonal wire including end styles. This uses the Resistivity on the
Setup Layers dialog and the number of squares of the wire. In the calculation of the number of squares,
corners are counted as ½ a square.

Return Values

The resistance of an orthogonal wire in Ohms. If the object is not an orthogonal wire, then zero.

Parameters

pObject Specified object.

See Also

“LWire_GetLength” (page 1336), “LWire_GetSquares” (page 1337), “Wire Functions” (page 1330)

L-Edit 14 User Guide Section 4 1338


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_SetWidth

LWire_SetWidth

LStatus LWire_SetWidth( LCell pCell, LObject pObject, LCoord nWidth );

L-Edit 14 User Guide Section 4 1339


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_SetJoinType

LWire_SetJoinType

LStatus LWire_SetJoinType( LCell pCell, LObject pObject, LJoinType eJoinType );

L-Edit 14 User Guide Section 4 1340


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_SetCapType

LWire_SetCapType

LStatus LWire_SetCapType( LCell pCell, LObject pObject, LCapType eCapType );

L-Edit 14 User Guide Section 4 1341


Chapter 35: UPI Functions Reference Database Functions Object Functions Wire Functions
LWire_SetMiterAngle

LWire_SetMiterAngle

LStatus LWire_SetMiterAngle( LCell pCell, LObject pObject, short nAngle );

L-Edit 14 User Guide Section 4 1342


Chapter 35: UPI Functions Reference Database Functions Object Functions Polygon Functions

Polygon Functions

“LPolygon_New” (page 1344)

“LPolygon_HasCurve” (page 1347)

“LPolygon_RemoveAllCurves” (page 1348) “LPolygon_StraightenAllCurves” (page


1349)
Obsolete:
“LPolygon_WireToPolygon” (page 1345)

“LPolygon_CircleToPolygon” (page 1346)

L-Edit 14 User Guide Section 4 1343


Chapter 35: UPI Functions Reference Database Functions Object Functions Polygon Functions
LPolygon_New

LPolygon_New

LObject LPolygon_New( LCell cell, LLayer layer, LPoint point_arr[],


const int npoints );

Description

Creates a new polygon object in cell on layer. The new polygon will have npoints vertices at locations
specified in point_arr.

Return Values

Returns a pointer to the newly created polygon if successful; NULL otherwise.

Parameters

cell Cell which will contain the polygon.


layer Wire layer.
point_arr Array of polygon vertices.
npoints Number of polygon vertices.

See Also

“LObject” (page 1600), “LWireParam” (page 1633), “LTransform” (page 1626), “Polygon
Functions” (page 1343)

L-Edit 14 User Guide Section 4 1344


Chapter 35: UPI Functions Reference Database Functions Object Functions Polygon Functions
LPolygon_WireToPolygon

LPolygon_WireToPolygon

LObject LPolygon_WireToPolygon( LCell cell, LLayer layer, LObject object );

Description

Converts a wire object to a polygon object.

Return Values

Returns a pointer to the newly converted polygon if successful; NULL otherwise.

Parameters

cell Cell containing the wire object.


layer Wire layer.
object Wire object.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LObject” (page 1600), “LWireParam” (page 1633), “Polygon Functions” (page 1343)

L-Edit 14 User Guide Section 4 1345


Chapter 35: UPI Functions Reference Database Functions Object Functions Polygon Functions
LPolygon_CircleToPolygon

LPolygon_CircleToPolygon

LObject LPolygon_CircleToPolygon( LCell cell, LLayer layer,


LObject object, int NumSides );

Description

Converts a circle to a polygon with the given number of sides.

Return Values

Returns a pointer to the newly converted polygon if successful; NULL otherwise.

Parameters

cell Cell containing the circle.


layer Circle layer.
object Circle object.
NumSides Number of sides in the new polygon.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LObject” (page 1600), “LWireParam” (page 1633), “Polygon Functions” (page 1343)

L-Edit 14 User Guide Section 4 1346


Chapter 35: UPI Functions Reference Database Functions Object Functions Polygon Functions
LPolygon_HasCurve

LPolygon_HasCurve

int LPolygon_HasCurve( LObject object );

Description

Indicates whether the specified polygon contains curves.

Return Values

1 if the polygon does contain curves; 0 otherwise.

Parameters

object The polygon to be checked for curves.

Example

int flagCurves = LPolygon_HasCurve(MyPolygon);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LPolygon_RemoveAllCurves” (page 1348), “LPolygon_StraightenAllCurves” (page 1349)

L-Edit 14 User Guide Section 4 1347


Chapter 35: UPI Functions Reference Database Functions Object Functions Polygon Functions
LPolygon_RemoveAllCurves

LPolygon_RemoveAllCurves

LStatus LPolygon_RemoveAllCurves( LObject object );

Description

Removes all curved edges from the specified polygon and replaces them with straight edges. For a
better linear approximation of the curved edges, use “LPolygon_StraightenAllCurves” (page 1349).

Return Values

Returns LStatusOK if successful. If an error occurs, returns the error value LBadParameters.

Parameters

object Polygon from which all curves are removed.

Example

LPolygon_RemoveAllCurves(MyPolygon)

Version

Available in L-Edit 8.4 and later versions.

See Also

“LPolygon_HasCurve” (page 1347), “LPolygon_StraightenAllCurves” (page 1349)

L-Edit 14 User Guide Section 4 1348


Chapter 35: UPI Functions Reference Database Functions Object Functions Polygon Functions
LPolygon_StraightenAllCurves

LPolygon_StraightenAllCurves

LStatus LPolygon_StraightenAllCurves( LCell cell, LObject object );

Description

Removes all curved edges from the specified polygon on cell, and replaces them with an approximation
consisting of straight segments.

Return Values

Returns LStatusOK if successful. If an error occurs, returns the error value LBadParameters.

Parameters

cell Cell containing the specified polygon.


object Polygon in which to straighten curves.

Example

/* Get the current curve properties of the file */


LCurve CurveSetup;
LFile_GetCurveSetup(MyFile, &CurveSetup);

/* Change the curve properties as desired */


CurveSetup.max_segment_per_curve = 100;
CurveSetup.max_length_of_segment = 50;

/* Assign the properties defined in CurveSetup to MyFile */


LFile_SetCurveSetup(pFile, &CurveSetup);

/* Replace curves in MyPolygon with straight segments*/


LPolygon_StraightenAllCurves(pCell, MyPolygon);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LPolygon_HasCurve” (page 1347), “LPolygon_RemoveAllCurves” (page 1348),


“Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1349


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions

Port Functions

“LPort_New” (page 1351) “LPort_Delete” (page 1352)

“LPort_Find” (page 1353) “LPort_FindNext” (page 1354)

“LPort_GetList” (page 1355) “LPort_GetNext” (page 1356)

“LPort_GetText” (page 1357) “LPort_SetText” (page 1358)

“LPort_GetTextSize” (page 1359) “LPort_SetTextSize” (page 1364)

“LPort_GetTextAlignment” (page 1365) “LPort_SetTextAlignment” (page 1366)

“LPort_GetRect” (page 1362) “LPort_Set” (page 1363)

“LPort_GetMbb” (page 1361)

“LPort_GetLayer” (page 1360)

L-Edit 14 User Guide Section 4 1350


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_New

LPort_New

LPort LPort_New( LCell cell, LLayer layer, char* text, LCoord x0, LCoord y0,
LCoord x1, LCoord y1 );

Description

Creates a new port in cell on layer with the specified text and rectangle (location) coordinates x0, y0,
x1, y1.

Return Values

Pointer to the newly created port if successful; NULL otherwise.

Parameters

cell Cell that will contain the port.


layer Port layer.
text Port text string.
x0 Lower left x-coordinate of port rectangle.
y0 Lower left y-coordinate of port rectangle.
x1 Upper right x-coordinate of port rectangle.
y1 Upper right y-coordinate of port rectangle.

See Also

“LPort” (page 1611), “LObject” (page 1600), “LWireParam” (page 1633), “LTransform” (page 1626),
“Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1351


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_Delete

LPort_Delete

LStatus LPort_Delete( LCell cell, LPort port );

Description

Deletes the specified port from the given cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Cell containing the port.


port Port to be deleted.

See Also

“LStatus” (page 1620), “LPort” (page 1611), “LObject” (page 1600), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1352


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_Find

LPort_Find

LPort LPort_Find( LCell cell, const char* name );

Description

Finds the first port in cell with the name specified in name.

Return Values

Pointer to the port if successful; NULL otherwise.

Parameters

cell Cell containing the port.


name Port string to search for.

See Also

“LPort” (page 1611), “LObject” (page 1600), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1353


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_FindNext

LPort_FindNext

LPort LPort_FindNext( LPort pPort, const char* szName );

Description

Finds the next port after pPort that has the name specified in szName.

Return Values

Pointer to the port if successful; NULL otherwise.

Parameters

pPort Specified port.


szName Port string to search for.

See Also

“LPort” (page 1611), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1354


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetList

LPort_GetList

LPort LPort_GetList( LCell cell );

Description

Gets a pointer to the first port in the given cell.

Return Values

Pointer to the head of the port list if successful; NULL otherwise.

Parameters

cell Specified cell.

See Also

“LPort” (page 1611), “LObject” (page 1600), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1355


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetNext

LPort_GetNext

LPort LPort_GetNext( LPort port );

Description

Gets a pointer to the port immediately following port in the port list.

Return Values

Pointer to the next element in the port list if successful; NULL otherwise.

Parameters

port Specified port.

See Also

“LPort” (page 1611), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1356


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetText

LPort_GetText

char* LPort_GetText( LPort port, char* name, const int maxlen );

Description

Gets the text of a port. It the port text is longer than maxlen, the extra characters are ignored.

Return Values

Pointer to the port text buffer if successful; NULL otherwise.

Parameters

port Port whose text is required.


name String (buffer) containing the port text.
maxlen Maximum length allowed for port text.

See Also

“LPort” (page 1611), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1357


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_SetText

LPort_SetText

char* LPort_SetText( LCell cell, LPort port, char* text, LCoord textsize );

Description

Sets the text of a port.

Return Values

Pointer to the port text string if successful; NULL otherwise.

Parameters

cell Cell containing the port.


port Port whose text is being modified.
text String (buffer) containing the port text.
textsize Port text size.

See Also

“LPort” (page 1611), “LObject” (page 1600), “LTransform” (page 1626), “Port Functions” (page
1350)

L-Edit 14 User Guide Section 4 1358


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetTextSize

LPort_GetTextSize

LCoord LPort_GetTextSize( LPort port );

Description

Gets the port text size.

Return Values

The port text size if successful; zero on error

Parameters

port Specified port.

See Also

“LPort” (page 1611), “LTransform” (page 1626), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1359


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetLayer

LPort_GetLayer

LLayer LPort_GetLayer( LPort port );

Description

Gets the layer that a port is drawn on.

Return Values

Pointer to the port layer if successful; NULL otherwise.

Parameters

port Specified port.

See Also

“LWireParam” (page 1633), “LPort” (page 1611), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1360


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetMbb

LPort_GetMbb

LRect LPort_GetMbb( LPort port );

Description

Gets the minimum bounding box (Mbb) of a port.

Return Values

The minimum bounding box if successful, or on error a rectangle whose coordinates are all zeros.

Parameters

port Specified port.

See Also

“LTransform” (page 1626), “LPort” (page 1611), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1361


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetRect

LPort_GetRect

LRect LPort_GetRect( LPort port );

Description

Returns the rectangle (location) of the port.

Return Values

If successful, an LRect structure containing the location of the port; on error, a rectangle whose
coordinates are all zeros.

Parameters

port Specified port.

See Also

“LTransform” (page 1626), “LPort” (page 1611), “Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1362


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_Set

LPort_Set

LStatus LPort_Set( LCell cell, LPort port, LRect rect );

Description

Modifies the rectangle (location) of the specified port in the specified cell according to the value
specified in rect.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Cell containing the port.


port Port to be modified.
rect New location of the port.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LTransform” (page 1626), “LPort” (page 1611),
“Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1363


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_SetTextSize

LPort_SetTextSize

LStatus LPort_SetTextSize( LPort pPort, LCoord lcTextSize );

Description

Sets the text size of a port.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value LBadParameters—
pPort is NULL.

Parameters

pPort Specified port.


lcTextSize Text size in Internal Units.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LPort pPort = LPort_Find(pCell, "Gnd");
if(Assigned(pPort))
{
if(LPort_SetTextSize(pPort,
LFile_LocUtoIntU(LCell_GetFile(pCell), 2.5)) == LStatusOK)
{
// More Processing
// ...
} // endif(LPort_SetTextSize(pPort,
LFile_LocUtoIntU(LCell_GetFile(pCell), 2.5)) == LStatusOK)
} // endif(Assigned(pPort))
} // endif(Assigned(pCell))

Version

Available in L-Edit 8.2 and later versions.

See Also

“Port Functions” (page 1350), “LPort_GetTextSize” (page 1359), “LStatus” (page 1620),
“LPort” (page 1611), “LCoord” (page 1550)

L-Edit 14 User Guide Section 4 1364


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_GetTextAlignment

LPort_GetTextAlignment

int LPort_GetTextAlignment( LPort pPort );

Description

This function returns port text alignment.

Return Values

Returns an OR of port text alignment attributes if successful, -1 in case of failure. See “Port Alignment
Definitions” on page 1367 for details.

Parameters

pPort Specified port.

Examples

Use the following for precise port text alignment:

int nAlignment = LPort_GetTextAlignment(pPort);


switch(nAlignment) { ... }

If you wish to find out whether the port text is on the bottom (regardless of the horizontal placement or
orientation) do this:

int nAlignment = LPort_GetTextAlignment(pPort);


int nVerticalPlacement = nAlignment &
(PORT_TEXT_TOP|PORT_TEXT_CENTER|PORT_TEXT_BOTTOM);
if(nVerticalPlacement == PORT_TEXT_BOTTOM) { ... }

Version

Available in L-Edit 8.3 and later versions.

See Also

“LPort_SetTextAlignment” (page 1366), “Port Alignment Definitions” on page 1367.

L-Edit 14 User Guide Section 4 1365


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_SetTextAlignment

LPort_SetTextAlignment

LStatus LPort_SetTextAlignment( LPort pPort, int nAlignment );

Description

This function sets port text alignment.

Return Values

Returns LStatusOK if successful. If an error occurs, returns the error value LBadParameters .

Parameters

pPort Specified port.


nAlignment An OR of port text alignment attributes (see “Port Alignment
Definitions” on page 1367 for details.

Example

If you want to place the text of pPort on the right bottom of the box use the following:

LPort_SetTextAlignment(pPort, PORT_TEXT_RIGHT|PORT_TEXT_BOTTOM);

If you want the text to be vertical in the middle center of the box use the following:

LPort_SetTextAlignment(pPort,
PORT_TEXT_MIDDLE|PORT_TEXT_CENTER|PORT_TEXT_VERTICAL);

LPort_GetTextAlignment and LPort_SetTextAlignment can be used together. For example, if you


want to move the text to the bottom of the box without changing the horizontal placement or orientation
you can use the following:

int nAlignment = LPort_GetTextAlignment(pPort);


//remove horizontal placement leaving other attributes intact
nAlignment &= ~(PORT_TEXT_TOP|PORT_TEXT_CENTER|PORT_TEXT_BOTTOM);
//set horizontal placement to be the bottom of the box
nAlignment |= PORT_TEXT_BOTTOM;
LPort_SetTextAlignment(pPort, nAlignment);

Version

Available in L-Edit 8.3 and later versions.

See Also

“LPort_GetTextAlignment” (page 1365), “Port Alignment Definitions” on page 1367.

L-Edit 14 User Guide Section 4 1366


Chapter 35: UPI Functions Reference Database Functions Object Functions Port Functions
LPort_SetTextAlignment

Port Alignment Definitions

horizontal placement PORT_TEXT_LEFT


PORT_TEXT_MIDDLE
PORT_TEXT_RIGHT

vertical placement PORT_TEXT_TOP


PORT_TEXT_CENTER
PORT_TEXT_BOTTOM

orientation PORT_TEXT_HORIZONTAL
PORT_TEXT_VERTICAL

Port text alignment is fully specified by an OR of one definition from each group.

Port text orientation is horizontal by default, therefore PORT_TEXT_HORIZONTAL is an optional


definition.

By PORT_TEXT_MIDDLE we understand the horizontal middle and by PORT_TEXT_CENTER the


vertical center, so that you can combine left with center but not left with middle or top with center.

For example:

(PORT_TEXT_LEFT|PORT_TEXT_TOP) corresponds to horizontal text at the left top corner.

(PORT_TEXT_MIDDLE|PORT_TEXT_BOTTOM) corresponds to horizontal text in the middle of the


bottom.

(PORT_TEXT_LEFT|PORT_TEXT_CENTER|PORT_TEXT_VERTICAL) corresponds to vertical text in


the center at the left.

(PORT_TEXT_MIDDLE|PORT_TEXT_CENTER|PORT_TEXT_VERTICAL) corresponds to vertical text


centered in the middle of the port box.

L-Edit 14 User Guide Section 4 1367


Chapter 35: UPI Functions Reference Database Functions Selection Functions

Selection Functions

Selected objects may be those selected with the mouse, those falling into a drawn box, all objects on a
particular layer, or all objects of a particular cell. Once selected, they are entered into an internal
selection list. Several functions may be applied to objects found in the selection list.

Selection functions allow the user to manipulate a selection in L-Edit.

“LSelection_SelectAll” (page 1373) “LSelection_DeselectAll” (page 1374)

“LSelection_AddObject” (page 1375) “LSelection_RemoveObject” (page 1376)

“LSelection_Cut” (page 1369) “LSelection_Copy” (page 1370)

“LSelection_SnapToMfgGrid” (page 1399) “LSelection_PasteToLayer” (page 1371)

“LSelection_Clear” (page 1372) “LSelection_Duplicate” (page 1387)

“LSelection_AddAllObjectsOnLayer” (page “LSelection_RemoveAllObjectsOnLayer”


1378) (page 1379)
“LSelection_AddAllObjectsInRect” (page “LSelection_RemoveAllObjectsInRect”
1380) (page 1381)
“LSelection_GetList” (page 1382) “LSelection_GetNext” (page 1383)

“LSelection_GetLayer” (page 1384) “LSelection_ChangeLayer” (page 1385)

“LSelection_Move” (page 1386) “LSelection_Flatten” (page 1390)

“LSelection_Group” (page 1388) “LSelection_UnGroup” (page 1389)

“LSelection_FlipHorizontal” (page 1392) “LSelection_FlipVertical” (page 1393)

“LSelection_SliceHorizontal” (page 1394) “LSelection_SliceVertical” (page 1395)

“LSelection_Rotate” (page 1396) “LSelection_RotateAroundPoint” (page


1397)
“LSelection_Merge” (page 1391) “LSelection_GetObject” (page 1377)

L-Edit 14 User Guide Section 4 1368


Chapter 35: UPI Functions Reference Database Functions
LSelection_Cut

LSelection_Cut

LStatus LSelection_Cut( void );

Description

Removes all objects in the selection and copies them into the paste buffer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1369


Chapter 35: UPI Functions Reference Database Functions
LSelection_Copy

LSelection_Copy

LStatus LSelection_Copy(void);

Description

Copies all objects in the selection into the paste buffer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1370


Chapter 35: UPI Functions Reference Database Functions
LSelection_PasteToLayer

LSelection_PasteToLayer

LStatus LSelection_PasteToLayer( LLayer layer );

Description

Pastes the contents of the paste buffer to the given layer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

layer Layer on which paste buffer contents are to be pasted.

See Also

“LWireParam” (page 1633), “LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1371


Chapter 35: UPI Functions Reference Database Functions
LSelection_Clear

LSelection_Clear

LStatus LSelection_Clear( void );

Description

Removes all objects in the current selection.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1372


Chapter 35: UPI Functions Reference Database Functions
LSelection_SelectAll

LSelection_SelectAll

LSelection LSelection_SelectAll( void );

Description

Selects all objects in the current cell.

Return Values

Returns a pointer to the head of the selection list if successful; NULL otherwise.

See Also

“LSelection” (page 1616), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1373


Chapter 35: UPI Functions Reference Database Functions
LSelection_DeselectAll

LSelection_DeselectAll

void LSelection_DeselectAll( void );

Description

Deselects all objects in the current cell.

See Also

“Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1374


Chapter 35: UPI Functions Reference Database Functions
LSelection_AddObject

LSelection_AddObject

LStatus LSelection_AddObject( LObject obj );

Description

Adds an object to the selection list.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

obj Object to be added to the selection list.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1375


Chapter 35: UPI Functions Reference Database Functions
LSelection_RemoveObject

LSelection_RemoveObject

LStatus LSelection_RemoveObject( LObject obj );

Description

Removes an object from the selection list.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

obj Object to be removed from the selection list.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1376


Chapter 35: UPI Functions Reference Database Functions
LSelection_GetObject

LSelection_GetObject

LObject LSelection_GetObject( LSelection selection );

Description

Gets the object associated with a selection element.

Return Values

Pointer to the selection object if successful; NULL otherwise.

Parameters

selection Pointer to the selection element.

See Also

“LObject” (page 1600), “LSelection” (page 1616), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1377


Chapter 35: UPI Functions Reference Database Functions
LSelection_AddAllObjectsOnLayer

LSelection_AddAllObjectsOnLayer

LStatus LSelection_AddAllObjectsOnLayer( LLayer layer );

Description

Adds all objects on layer to the selection list.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

layer Layer whose objects are to be added to the selection.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1378


Chapter 35: UPI Functions Reference Database Functions
LSelection_RemoveAllObjectsOnLayer

LSelection_RemoveAllObjectsOnLayer

LStatus LSelection_RemoveAllObjectsOnLayer( LLayer layer );

Description

Removes all objects on layer from the selection list.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

layer Layer whose objects are to be removed from the selection.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1379


Chapter 35: UPI Functions Reference Database Functions
LSelection_AddAllObjectsInRect

LSelection_AddAllObjectsInRect

LStatus LSelection_AddAllObjectsInRect( LRect *box );

Description

Adds all objects in rectangle box to the selection list.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

box Pointer to an LRect that specifies the coordinates of the box.

See Also

“LStatus” (page 1620), “LTransform” (page 1626), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1380


Chapter 35: UPI Functions Reference Database Functions
LSelection_RemoveAllObjectsInRect

LSelection_RemoveAllObjectsInRect

LStatus LSelection_RemoveAllObjectsInRect( LRect *box );

Description

Removes all objects in rectangle box from the selection list.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

box Pointer to an LRect that specifies the coordinates of the box.

See Also

“LStatus” (page 1620), “LTransform” (page 1626), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1381


Chapter 35: UPI Functions Reference Database Functions
LSelection_GetList

LSelection_GetList

LSelection LSelection_GetList( void );

Description

Gets the pointer to the first element in the selection list.

Return Values

Pointer to the head of the selection list if successful; NULL otherwise.

See Also

“LSelection” (page 1616), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1382


Chapter 35: UPI Functions Reference Database Functions
LSelection_GetNext

LSelection_GetNext

LSelection LSelection_GetNext( LSelection selection );

Description

Gets a pointer to the next element in the selection list.

Return Values

Pointer to the next element in the selection list if successful; NULL otherwise.

Parameters

selection Pointer to a selection element.

See Also

“LSelection” (page 1616), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1383


Chapter 35: UPI Functions Reference Database Functions
LSelection_GetLayer

LSelection_GetLayer

LLayer LSelection_GetLayer( LSelection selection );

Description

Gets the layer of a given selection element.

Return Values

Pointer to the layer if successful; NULL otherwise.

Parameters

selection Pointer to the selection element.

See Also

“LWireParam” (page 1633), “LSelection” (page 1616), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1384


Chapter 35: UPI Functions Reference Database Functions
LSelection_ChangeLayer

LSelection_ChangeLayer

LStatus LSelection_ChangeLayer( LLayer srcLayer, LLayer dstLayer );

Description

If srcLayer is NULL, changes the layer of all objects in the selection to dstLayer. If srcLayer is not
NULL, only selected objects that are originally on srcLayer will be changed to dstLayer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

srcLayer Source layer. NULL is a valid entry.


dstLayer Destination layer.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1385


Chapter 35: UPI Functions Reference Database Functions
LSelection_Move

LSelection_Move

LStatus LSelection_Move( long dx, long dy );

Description

Moves the selection by displacements dx (in the x-direction) and dy (in the y-direction).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

dx Displacement value in x-direction.


dy Displacement value in y-direction.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1386


Chapter 35: UPI Functions Reference Database Functions
LSelection_Duplicate

LSelection_Duplicate

LStatus LSelection_Duplicate( void );

Description

Duplicates the contents of the current selection. The duplicate is placed next to the original.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1387


Chapter 35: UPI Functions Reference Database Functions
LSelection_Group

LSelection_Group

LStatus LSelection_Group( char *group_cell_name );

Description

Creates a new cell containing the currently selected objects and an instance of the new cell in the current
cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

group_cell_name Name of the group cell.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1388


Chapter 35: UPI Functions Reference Database Functions
LSelection_UnGroup

LSelection_UnGroup

LStatus LSelection_UnGroup( void );

Description

Ungroups (flattens one level of hierarchy of) the curent selection.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1389


Chapter 35: UPI Functions Reference Database Functions
LSelection_Flatten

LSelection_Flatten

LStatus LSelection_Flatten( void );

Description

Flattens all levels of hierarchy (down to basic objects) in the current selection.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1390


Chapter 35: UPI Functions Reference Database Functions
LSelection_Merge

LSelection_Merge

LStatus LSelection_Merge( void );

Description

Merges all objects in the current selection which share the same layer. If Quiet mode is ON, then the
merge command will automatically combine all properties of the merged objects without notification.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1391


Chapter 35: UPI Functions Reference Database Functions
LSelection_FlipHorizontal

LSelection_FlipHorizontal

LStatus LSelection_FlipHorizontal( void );

Description

Flips all objects in current selection horizontally (left/right).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1392


Chapter 35: UPI Functions Reference Database Functions
LSelection_FlipVertical

LSelection_FlipVertical

LStatus LSelection_FlipVertical( void );

Description

Flips all objects in current selection vertically (up/down).

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1393


Chapter 35: UPI Functions Reference Database Functions
LSelection_SliceHorizontal

LSelection_SliceHorizontal

LStatus LSelection_SliceHorizontal( LPoint *point );

Description

LSelection_SliceHorizontal slices horizontally all objects in current selection at the specified point.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

point Pointer to an LPoint structure that contains an (x,y) point on the


horizontal slice line.

See Also

“LStatus” (page 1620), “LTransform” (page 1626), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1394


Chapter 35: UPI Functions Reference Database Functions
LSelection_SliceVertical

LSelection_SliceVertical

LStatus LSelection_SliceVertical( LPoint *point );

Description

Slices vertically all objects in current selection at the specified point.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

point Pointer to an LPoint structure that contains an (x,y) point on the


vertical slice line.

See Also

“LStatus” (page 1620), “LTransform” (page 1626), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1395


Chapter 35: UPI Functions Reference Database Functions
LSelection_Rotate

LSelection_Rotate

LStatus LSelection_Rotate( void );

Description

Rotates all objects in current selection counterclockwise by 90 degrees.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1396


Chapter 35: UPI Functions Reference Database Functions
LSelection_RotateAroundPoint

LSelection_RotateAroundPoint

LStatus LSelection_RotateAroundPoint( double angle,


LCoord x, LCoord y, LBoolean bRelativetoCenter );

Description

Rotates the selected objects counterclockwise by the specified angle (in degrees) with respect to the
indicated reference point (x, y). The reference point can be specified in absolute coordinates or as
relative distances from the selection’s center point. If the value of angle has more resolution that 6
decimal places, it will be rounded to 6 decimals places.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type
LBadParameters. An error will occur under any of the following conditions:

ƒ |angle| ≥ 360
ƒ |x| ≥ WORLD_MAX
ƒ |y| ≥ WORLD_MAX
ƒ bRelativetoCenter is invalid

Parameters

angle The rotation angle in degrees. A positive angle indicates


counterclockwise rotation. Rotated boxes become polygons when the
specified angle is not orthogonal (a multiple of 90°).
x, y x- and y-coordinates of the specified center of rotation. May be given
relative to the origin or to the selection’s center point.
bRelativeToCenter If LTRUE, indicates that the coordinates (x, y) are given relative to the
selection’s center point. If LFALSE, (x, y) is interpreted relative to the
cell’s origin (i.e., in absolute coordinates).

Example

/* Rotate 45° counter-clockwise around the selection center */


LSelection_RotateAroundPoint(45, 0, 0, LTRUE);

/* Rotate 22.5° clockwise around the point (10, 20) */


LSelection_RotateAroundPoint(-22.5, 10, 20, LFALSE);

Version

Available in L-Edit 8.4 and later versions.

L-Edit 14 User Guide Section 4 1397


Chapter 35: UPI Functions Reference Database Functions
LSelection_RotateAroundPoint

See Also

“LStatus” (page 1620), “Selection Functions” (page 1368), “LCoord” (page 1550), “LBoolean”
(page 1544)

L-Edit 14 User Guide Section 4 1398


Chapter 35: UPI Functions Reference Database Functions
LSelection_SnapToMfgGrid

LSelection_SnapToMfgGrid

LStatus LSelection_SnapToMfgGrid ( void );

Description

Snaps all objects that are currently selected in the active layout view to the manufacturing grid. This is
similar to Draw > Convert > Snap to Manufacturing Grid on page 186

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with
possible values:
ƒ LBadParameters—The active view is not a layout view.
ƒ LNoSelection—No objects are selected.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LSelection_SnapToMfgGrid();
}

Version

Available in L-Edit v13.1 and later versions.

L-Edit 14 User Guide Section 4 1399


Chapter 35: UPI Functions Reference Database Functions Layer Functions

Layer Functions

There are three categories of UPI layer functions.

“Design Layer Functions” (page 1401) allow the user to assign resistance or capacitance values or
wire setup information to a layer. These functions also allow the user to make a layer hidden or visible
in a display.

“Generated Layer Functions” (page 1428) allow the user to manipulate layers generated from other
layers according to equations defined by the user.

“Rendering Functions” (page 1443) are used to edit the information that defines how L-Edit displays a
design layer.

L-Edit 14 User Guide Section 4 1400


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions

Design Layer Functions

L-Edit supports an unlimited number of design layers. Layers may be assigned a capacitance value, a
resistance value, and wire setup information. Layers may also be hidden or visible in the display.

Design layer functions allow the user to create and manipulate design layers in a file.

“LLayer_New” (page 1402) “LLayer_Delete” (page 1403)

“LLayer_Find” (page 1404) “LLayer_FindGDS” (page 1405)

“LLayer_GetList” (page 1406) “LLayer_GetNext” (page 1407)

“LLayer_PrecedingLayer” (page 1408) “LLayer_PrecedingLayerEx99” (page 1409)

“LLayer_GetName” (page 1410) “LLayer_SetName” (page 1411)

“LLayer_GetParameters” (page 1412) “LLayer_GetParametersEx830” (page 1413)

“LLayer_SetParameters” (page 1415) “LLayer_SetParametersEx830” (page 1416)

“LLayer_GetCap” (page 1418) “LLayer_SetCap” (page 1419)

“LLayer_GetRho” (page 1420) “LLayer_SetRho” (page 1421)

“LLayer_GetParameters” (page 1412) “LLayer_SetParameters” (page 1415)

“LLayer_GetParametersEx830” (page 1413) “LLayer_SetParametersEx830” (page 1416)

“LLayer_GetSpecial” (page 1424) “LLayer_SetSpecial” (page 1425)

“LLayer_GetCurrent” (page 1422) “LLayer_SetCurrent” (page 1423)

“LLayer_MoveLayer” (page 1426) “LLayer_Copy” (page 1427)

L-Edit 14 User Guide Section 4 1401


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_New

LLayer_New

LStatus LLayer_New( LFile file, LLayer layer, char *name );

Description

Creates a new layer in the specified file. All layers in a file are arranged in a list. The newly created
layer is added to the layer list directly after the specified layer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File where new layer is to be added.


layer Layer after which the new layer is to be added.
name Name of the new layer.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LWireParam” (page 1633),


“Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1402


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_Delete

LLayer_Delete

LStatus LLayer_Delete( LFile file, LLayer layer );

Description

Deletes the specified layer from the specified file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file File containing the layer.


layer Layer to be deleted.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LWireParam” (page 1633),


“Design Layer Functions” (page 1401), “LCell_ClearUndoLists” (page 1207).

L-Edit 14 User Guide Section 4 1403


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_Find

LLayer_Find

LLayer LLayer_Find( LFile file, const char* name );

Description

Searches the layer list of the specified file for a layer with the given name.

Return Values

Pointer to the matching layer if successful; NULL otherwise.

Parameters

file File whose layer list is to be searched.


name Layer name to look for.

Example

The following example searches for the layer named Metal1 in the file layout.tdb:

/*This example opens layout.tdb and checks to see if it contains a layer


called Metal1*/

LFile file;
LLayer layer;

/*Open layout.tdb file*/


file = LFile_Open(“layout”, TdbFile);

/*Search for layer Metal1 in this file*/


layer = LLayer_Find(file, “Metal1”);

if ( layer == NULL ){
/*Layer not found*/
}
else {
/*layer found*/
}

The above example will return an opaque pointer layer to the layer Metal1. It thus saves the time
required to write code for browsing through all the layers using LLayer_GetList and LLayer_GetNext.

See Also

“LFile” (page 1578), “LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1404


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_FindGDS

LLayer_FindGDS

LLayer LLayer_FindGDS( LFile file, long gdsnum, long datatype);

Description

Searches the layer list of the specified file for a layer with the given GDSII number.

Return Values

Pointer to the matching layer if successful; NULL otherwise.

Parameters

file File whose layer list is to be searched.


gdsnum GDS layer number for which to search.
datatype Datatype for which to search.

See Also

“LFile” (page 1578), “LLayer_Find” (page 1404), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1405


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetList

LLayer_GetList

LLayer LLayer_GetList( LFile file );

Description

Gets a pointer to the first layer in the layer list of file.

Return Values

Pointer to the head of the layer list if successful; NULL otherwise.

Parameters

file Specified file.

See Also

“LFile” (page 1578), “LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1406


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetNext

LLayer_GetNext

LLayer LLayer_GetNext( LLayer layer );

Description

Gets a pointer to the layer immediately following a given layer in the layer list.

Return Values

Pointer to the next element in the layer list if successful; NULL otherwise.

Parameters

layer Specified layer.

See Also

“LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1407


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_PrecedingLayer

LLayer_PrecedingLayer

LLayer LLayer_PrecedingLayer( LFile pFile, char* szName, LLayer pReserved);

Description

Finds the layer that precedes the specified layer’s name. Argument pReserved should set to NULL
when calling this function.

Return Values

Pointer to the preceding layer if successful; NULL otherwise.

Parameters

pFile File whose layers are to be searched.


szName Name of the layer whose preceding layer is required.
pReserved Reserved variable. Set to NULL when calling this function.

See Also

“LWireParam” (page 1633), “LFile” (page 1578), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1408


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_PrecedingLayerEx99

LLayer_PrecedingLayerEx99

LLayer LLayer_PrecedingLayerEx99( LFile pFile, LLayer pLayer );

Description

Finds the layer that precedes the specified layer.

Return Values

Pointer to the preceding layer if successful; NULL otherwise.

Parameters

pFile File whose layers are to be searched.


pLayer Specified layer.

See Also

“LWireParam” (page 1633), “LFile” (page 1578), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1409


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetName

LLayer_GetName

char* LLayer_GetName( LLayer layer, char* name, const int maxlen );

Description

Gets the name of a layer and fills the buffer name with the name of the layer. If the layer name is longer
than maxlen, the extra characters are ignored.

Return Values

Pointer to the layer name buffer if successful; NULL otherwise.

Parameters

layer Layer whose name is to be retrieved.


name String (buffer) containing the name of the layer.
maxlen Maximum length allowed for name.

Example

LFile pFile = LFile_GetVisible();


if ( pFile )
{
LLayer pLayer = LLayer_GetList( pFile );
char layername[MAX_LAYER_NAME];
if ( LLayer_GetName( pLayer, layername, sizeof( layername ) ) )
LDialog_MsgBox( layername ); // print out first layer
}

See Also

“LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1410


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetName

LLayer_SetName

LStatus LLayer_SetName( LLayer layer, const char *name );

Description

Changes the name of a layer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

layer Layer whose name is to be changed.


name String (buffer) that contains the new name of the layer.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1411


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetParameters

LLayer_GetParameters

LLayerParam *LLayer_GetParameters( LLayer layer, LLayerParam *param );

Description

Gets the properties of layer.

Return Values

Pointer to the layer parameter structure if successful; NULL otherwise.

Parameters

layer Specified layer.


param Pointer to a layer parameter structure. This structure will be used for
returning data.

See Also

“LWireParam” (page 1633), “LSpecialLayer” (page 1619), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1412


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetParametersEx830

LLayer_GetParametersEx830

LStatus LLayer_GetParametersEx830( LLayer pLayer,


LLayerParamEx830 *pLayerParam)

Description

Retrieves the parameters of a layer such as CIF name, GDSII layer number, GDSII layer data type, area
and fringe capacitance, resistivity, default wire parameters, and lock and hidden states.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadLayer—pLayer is NULL

LBadParameters—pLayerParam is NULL

Parameters

pLayer Specified layer.


pLayerParameters Pointer to an extended layer parameter structure. This structure will
be used for returning data.

Version

This command is available in L-Edit V8.3 and later. It is also available as


LLayer_GetParameters_Ex00().

Example

double dAreaCap;
LFile pFile = LFile_GetVisible();
if(Assigned(pFile))
{
LLayer pLayer = LLayer_Find(pFile, "Poly");
if(Assigned(pLayer))
{
LLayerParam_Ex00 LayerParameters;
if(LLayer_GetParameters_Ex00(pLayer, &LayerParameters) ==
LStatusOK)
{
dAreaCap = LayerParameters.AreaCapacitance;
// More Processing
// ...
}
}
}

L-Edit 14 User Guide Section 4 1413


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetParametersEx830

Version

Available in L-Edit 8.2 and later versions.

See Also

“Design Layer Functions” (page 1401), “LLayer” (page 1589), “LLayerParamEx830” (page 1591),
“LLayer_SetParametersEx830” (page 1416), “LStatus” (page 1620), “Layer Setup” on page 87.

L-Edit 14 User Guide Section 4 1414


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetParameters

LLayer_SetParameters

LStatus LLayer_SetParameters(LLayer layer, LLayerParam *param);

Description

Sets the parameters of layer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

layer Specified layer.


param Pointer to a layer parameter structure containing the new layer
parameters.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “LSpecialLayer” (page 1619),


“Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1415


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetParametersEx830

LLayer_SetParametersEx830

LStatus LLayer_SetParametersEx830( LLayer pLayer, LLayerParamEx830 *pLayerParam


);

Description

Sets the parameters of a layer such as CIF name, GDSII layer number, GDSII layer data type, area and
fringe capacitance, resistivity, default wire parameters, and lock and hidden states.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadLayer—pLayer is NULL.

LBadParameters—LLayer_SetParametersEx830 returns LBadParameters when the


AreaCapacitance or FringeCapacitance or Resistivity value in the structure specified by
pLayerParam is invalid. One or more of the following error values is returned:

pLayerParam is NULL.

Area Capacitance is invalid (this happens when the pLayerParam specified by


AreaCapacitance < 0 and the pLayerParam specified by AreaCapacitance ≠ -1).

Fringe Capacitance is invalid (this happens when the pLayerParam specified


byFringeCapacitance < 0 and the pLayerParam specified by FringeCapacitance ≠ -1

Resistivity is negative (pLayerParam specified by Resistivity < 0).

Invalid wire parameters are found.

Parameters

pLayer Specified layer.


pLayerParam Pointer to an extended layer parameter structure containing the new
layer parameters.

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
LLayer pLayer = LLayer_Find(pFile, "Poly");
if(Assigned(pLayer))
{
LLayerParamEx830 LayerParameters;
if(LLayer_GetParametersEx830(pLayer, &LayerParameters) ==
LStatusOK){
LayerParameters.AreaCapacitance = 500.3;
if(LLayer_SetParametersEx830(pLayer, &LayerParameters)
== LStatusOK)

L-Edit 14 User Guide Section 4 1416


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetParametersEx830

{
// More Processing
// ...
}
}
}
}

Version

Available in L-Edit 8.2 and later versions. It is also available as LLayer_SetParameters_Ex00().

See Also

“Design Layer Functions” (page 1401), “LLayer” (page 1589), “LLayerParamEx830” (page 1591),
“LStatus” (page 1620), “Layer Setup” on page 87.

L-Edit 14 User Guide Section 4 1417


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetCap

LLayer_GetCap

double LLayer_GetCap( LLayer layer );

Description

Gets the capacitance of layer.

Return Values

The capacitance value of layer. It returns -1 on error.

Parameters

layer Specified layer.

See Also

“LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1418


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetCap

LLayer_SetCap

LStatus LLayer_SetCap( LLayer layer, double cap );

Description

Changes the capacitance value of layer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

layer Specified layer.


cap Capacitance value.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1419


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetRho

LLayer_GetRho

double LLayer_GetRho( LLayer layer );

Description

Gets the resistance value of layer.

Return Values

The resistance value of layer. It returns -1 on error.

Parameters

layer Specified layer.

See Also

“LWireParam” (page 1633), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1420


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetRho

LLayer_SetRho

LStatus LLayer_SetRho( LLayer pLayer, double dRho );

Description

Changes the resistance of pLayer.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

pLayer Specified layer.


dRho New resistance value.

See Also

“LStatus” (page 1620), “LLayer” (page 1589), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1421


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetCurrent

LLayer_GetCurrent

LLayer LLayer_GetCurrent( LFile file );

Description

Gets a pointer to the current layer in the specified file.

Return Values

Pointer to the current layer if successful; NULL otherwise.

Parameters

file Specified file.

See Also

“LWireParam” (page 1633), “LFile” (page 1578), “Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1422


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetCurrent

LLayer_SetCurrent

LStatus LLayer_SetCurrent( LFile file, LLayer layer );

Description

Sets the current layer in the specified file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


layer Specified layer.

See Also

“LStatus” (page 1620), “LWireParam” (page 1633), “LFile” (page 1578),


“Design Layer Functions” (page 1401)

L-Edit 14 User Guide Section 4 1423


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_GetSpecial

LLayer_GetSpecial

LLayer LLayer_GetSpecial( LFile file, LSpecialLayer specialLayer );

Description

Gets a particular type of special layer of a file. Each file employs seven layers for specific purposes
involved with graphic display. Each special layer is assigned a layer selected from the file’s layer list.
(For more information on special layers, see “Rescaling a Design” on page 101.)

Return Values

Pointer to the special layer if successful; NULL otherwise.

Parameters

file Specified file.


specialLayer Type of special layer.

See Also

“LWireParam” (page 1633), “LFile” (page 1578), “LSpecialLayer” (page 1619),


“LLayer_GetSpecial” (page 1424), “LLayer_SetSpecial” (page 1425)

L-Edit 14 User Guide Section 4 1424


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_SetSpecial

LLayer_SetSpecial

LStatus LLayer_SetSpecial( LFile file, LSpecialLayer specialLayer, LLayer layer


);

Description

Sets a special layer of a given file to a particular type. Each file employs seven layers for specific
purposes involved with graphic display. Each special layer is assigned a layer selected from the file’s
layer list. (For more information on special layers, see “Rescaling a Design” on page 101.)

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


specialLayer Type of special layer.
layer New special layer.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LSpecialLayer” (page 1619), “LWireParam” (page
1633),
“LLayer_GetSpecial” (page 1424), “LLayer_SetSpecial” (page 1425)

L-Edit 14 User Guide Section 4 1425


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_MoveLayer

LLayer_MoveLayer

LStatus LLayer_MoveLayer( LFile pTDBFile, LLayer pLayerToMove,


LLayer pLayerNewLocation );

L-Edit 14 User Guide Section 4 1426


Chapter 35: UPI Functions Reference Database Functions Layer Functions Design Layer Functions
LLayer_Copy

LLayer_Copy

LLayer LLayer_Copy( LLayer pLayer );

L-Edit 14 User Guide Section 4 1427


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions

Generated Layer Functions

Generated layers are generated from other layers according to an equation defined by the user.
Generated layer definitions are assigned to each layer in the layer list and can be directly accessed and
modified with the function calls below.

“LLayer_GetDerivedList” (page 1429) “LLayer_GetDerivedNext” (page 1430)

“LLayer_IsDerived” (page 1431)

“LLayer_EnableAllDerived” (page 1432) “LLayer_DisableAllDerived” (page 1433)

“LLayer_GetDerivedParameters” (page “LLayer_SetDerivedParameters” (page


1434) 1436)
“LLayer_GetDerivedParametersEx830” “LLayer_SetDerivedParametersEx830”
(page 1435) (page 1437)
“LLayer_DestroyDerivedParameter” (page “LLayer_DestroyDerivedParameterEx840”
1438) (page 1440)
“LCell_GenerateLayers” (page 1441) “LCell_ClearGenerateLayers” (page 1442)

L-Edit 14 User Guide Section 4 1428


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_GetDerivedList

LLayer_GetDerivedList

LLayer LLayer_GetDerivedList( LFile file );

Description

Gets the list of generated layers in a file.

Return Values

Pointer to the head of the generated layer list if successful; NULL otherwise.

Parameters

file Specified file.

See Also

“LWireParam” (page 1633), “LFile” (page 1578), “Generated Layer Functions” (page 1428)

L-Edit 14 User Guide Section 4 1429


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_GetDerivedNext

LLayer_GetDerivedNext

LLayer LLayer_GetDerivedNext( LLayer layer );

Description

Gets the generated layer following a given generated layer.

Return Values

Pointer to the next element in the generated layer list if successful; NULL otherwise.

Parameters

layer Specified layer.

See Also

“LWireParam” (page 1633), “Generated Layer Functions” (page 1428)

L-Edit 14 User Guide Section 4 1430


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_IsDerived

LLayer_IsDerived

int LLayer_IsDerived( LLayer layer );

Description

Checks whether a layer is a generated layer or not.

Return Values

A nonzero value if the layer is a generated layer, or zero if the layer is not a generated layer.

Parameters

layer Specified layer.

See Also

“LWireParam” (page 1633), “Generated Layer Functions” (page 1428)

L-Edit 14 User Guide Section 4 1431


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_EnableAllDerived

LLayer_EnableAllDerived

LStatus LLayer_EnableAllDerived( LFile file );

Description

Enables the generated layer definition for all layers in a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “Generated Layer Functions” (page 1428)

L-Edit 14 User Guide Section 4 1432


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_DisableAllDerived

LLayer_DisableAllDerived

LStatus LLayer_DisableAllDerived( LFile file );

Description

Disables the generated layer definition for all layers in the specified file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “Generated Layer Functions” (page 1428)

L-Edit 14 User Guide Section 4 1433


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_GetDerivedParameters

LLayer_GetDerivedParameters

LDerivedLayerParam *LLayer_GetDerivedParameters( LLayer layer,


LDerivedLayerParam *param );

Description

Gets the parameters of a generated layer.

Return Values

Pointer to the generated layer parameter structure if successful; NULL otherwise.

Note: Note that this function is superseded by “LLayer_GetDerivedParametersEx830”


(page 1435).

Parameters

layer Specified layer.


param Pointer to a generated layer parameter structure.

See Also

“LSpecialLayer” (page 1619), “LWireParam” (page 1633), “Generated Layer Functions” (page
1428),
“LLayer_GetDerivedParametersEx830” (page 1435).

L-Edit 14 User Guide Section 4 1434


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_GetDerivedParametersEx830

LLayer_GetDerivedParametersEx830

LDerivedLayerParamEx830* LLayer_GetDerivedParametersEx830(LLayer layer,


LDerivedLayerParamEx830 *param);

Note: LLayer_GetDerivedParametersEx830 can be used interchangeably with


LLayer_GetDerivedParametersEx00.

Description

Gets derivation parameters of the specified layer into the LDerivedLayerParamEx00 structure
pointed to by the specified parameter value.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LStipple” (page 1621), “LDerivedLayerAreaOperation” (page 1554),


“LDerivedLayerBoolOperation” (page 1556), “LDerivedLayerSelectOperation” (page 1561).

L-Edit 14 User Guide Section 4 1435


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_SetDerivedParameters

LLayer_SetDerivedParameters

LStatus LLayer_SetDerivedParameters(LFile file, LLayer layer, LDerivedLayerParam


*param);

Description

Sets the generated layer parameters of a layer in a given file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Note: Note that this function is superseded by “LLayer_GetParametersEx830” (page


1413).

Parameters

file File containing the specified layer.


layer Specified layer.
param Pointer to a generated layer parameters structure that contains the new
parameter values.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LWireParam” (page 1633), “LSpecialLayer” (page
1619),
“Generated Layer Functions” (page 1428).

L-Edit 14 User Guide Section 4 1436


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_SetDerivedParametersEx830

LLayer_SetDerivedParametersEx830

LStatus LLayer_SetDerivedParametersEx830(LFile file, LLayer layer,


LDerivedLayerParamEx830 *param)

Note: LLayer_SetDerivedParametersEx830 can be used interchangeably with


LLayer_SetDerivedParametersEx00.

Description

Sets derivation parameters of the specified layer to the values specified in the LDerivedLayerParam
structure pointed to by the specified parameter value.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LStipple” (page 1621), “LDerivedLayerAreaOperation” (page 1554),


“LDerivedLayerBoolOperation” (page 1556), “LDerivedLayerSelectOperation” (page 1561).

L-Edit 14 User Guide Section 4 1437


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_DestroyDerivedParameter

LLayer_DestroyDerivedParameter

LStatus LLayer_DestroyDerivedParameter(
LDerivedLayerParam* pDerivedLayerParam )

Description

Frees the memory associated with the derived layer parameter structure that was allocated by L-Edit
during an LLayer_GetDerivedParameters call.

Note: Do not call Layer_DestroyDerivedParameter if LDrcRule_GetParameter has


not been previously called with pDesignRuleParam..

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadParameters —pDerivedLayerParam is NULL

Example

LFile pTDBFile = LFile_GetVisible();


if(Assigned(pTDBFile))
{
LLayer pLayer = LLayer_Find(pTDBFile, "PolyCnt_And_NotPoly");
if(Assigned(pLayer))
{
LDerivedLayerParam pDerivedLayerParam;
if(Assigned(LLayer_GetDerivedParameters(pLayer,
&pDerivedLayerParam)))
{
long lGrow = pDerivedLayerParam.layer1_grow_amount;

// More Processing
// ...

LLayer_DestroyDerivedParameter(&pDerivedLayerParam);
}
} // endif(Assigned(pLayer))
} // endif(Assigned(pTDBFile))

Version

Available in L-Edit 8.2 and later versions.

Note: Note that this function is superseded in L-Edit V10 and later.

L-Edit 14 User Guide Section 4 1438


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_DestroyDerivedParameter

See Also

“LStatus” (page 1620), “LDerivedLayerParam” (page 1558), “Generated Layer Functions” (page
1428)

L-Edit 14 User Guide Section 4 1439


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LLayer_DestroyDerivedParameterEx840

LLayer_DestroyDerivedParameterEx840

LStatus LLayer_DestroyDerivedParameterEx840(
LDerivedLayerParamEx830 *pDerivedLayerParam );

L-Edit 14 User Guide Section 4 1440


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LCell_GenerateLayers

LCell_GenerateLayers

LStatus LCell_GenerateLayers( LCell cell, int bin_size );

Description

Generates layers in the specified cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Specified cell.


bin_size Bin size.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Generated Layer Functions” (page 1428).

L-Edit 14 User Guide Section 4 1441


Chapter 35: UPI Functions Reference Database Functions Layer Functions Generated Layer Functions
LCell_ClearGenerateLayers

LCell_ClearGenerateLayers

LStatus LCell_ClearGenerateLayers( LCell cell );

Description

Clears all generated layers from a cell.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

cell Specified cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Generated Layer Functions” (page 1428).

L-Edit 14 User Guide Section 4 1442


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions

Rendering Functions

The rendering pass list contains the layer rendering information that L-Edit uses to display a layer.
Information found in this list include stipple pattern, color, pass type and write mode (set or clear). (For
additional information, see “Rendering Layer Parameters” on page 89.)

“LLayer_GetRenderingAttribute” (page “LLayer_SetRenderingAttribute” (page


1449) 1450)
“LLayer_GetRenderingObjectName” (page
1451)
Obsolete:
“LPass_New” (page 1444)

“LPass_GetList” (page 1445) “LPass_GetNext” (page 1446)

“LPass_GetParameters” (page 1447) “LPass_SetParameters” (page 1448)

L-Edit UPI recognizes two fixed values related to rendering. You can use these constants to construct
loops that step through all possible outline styles or rendering attributes:

NumberofOutlineStyles Number of outline styles defined.


NumberofRenderingAttributes Number of rendering attributes per layer.

L-Edit 14 User Guide Section 4 1443


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LPass_New

LPass_New

LPass LPass_New( LPass precedingPass, LPass pass );

Description

Adds a new pass after the preceding pass.

Return Values

Pointer to the newly added pass if successful; NULL otherwise.

Parameters

precedingPass Preceding pass. The new pass will be added after precedingPass.
pass Pass to be deleted.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LPass” (page 1605), “Rendering Functions” (page 1443)

L-Edit 14 User Guide Section 4 1444


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LPass_GetList

LPass_GetList

LPass LPass_GetList( LLayer layer, LPassType passType );

Description

Gets a list of particular pass types associated with a layer.

Return Values

Pointer to the head of the pass list if successful; NULL otherwise.

Parameters

layer Specified layer.


passType Type of pass.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LPass” (page 1605), “LWireParam” (page 1633), “LPassParam” (page 1607),


“Rendering Functions” (page 1443)

L-Edit 14 User Guide Section 4 1445


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LPass_GetNext

LPass_GetNext

LPass LPass_GetNext( LPass pass );

Description

Gets the next pass in the pass list.

Return Values

Pointer to the next element in the pass list if successful; NULL otherwise.

Parameters

pass Specified pass.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LPass” (page 1605), “Rendering Functions” (page 1443)

L-Edit 14 User Guide Section 4 1446


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LPass_GetParameters

LPass_GetParameters

LPassParam *LPass_GetParameters( LPass pass, LPassParam *param );

Description

Gets the parameters of a pass.

Return Values

Pointer to the pass parameters structure if successful; NULL otherwise.

Parameters

pass Specified pass.


param Pointer to a pass structure. This buffer will be filled with the results.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LPassParam” (page 1607), “LPass” (page 1605), “Rendering Functions” (page 1443)

L-Edit 14 User Guide Section 4 1447


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LPass_SetParameters

LPass_SetParameters

LStatus LPass_SetParameters( LPass pass, LPassParam *param );

Description

Sets the parameters of a pass.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

pass Specified pass.


param Pointer to a pass structure. This buffer contains the new parameter
values.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LStatus” (page 1620), “LPassParam” (page 1607), “LPass” (page 1605), “Rendering Functions”
(page 1443)

L-Edit 14 User Guide Section 4 1448


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LLayer_GetRenderingAttribute

LLayer_GetRenderingAttribute

LStatus LLayer_GetRenderingAttribute( LLayer layer,


LRenderingAttributeIndex index, LRenderingAttribute *pRA );

Description

This function returns a rendering attribute.

Return Values

LStatusOK if successful or LBadParameters if not.

Parameters

layer The layer


index The number of the rendering attribute to get.
pRA A pointer to LRenderingAttribute structure.

Example

unsigned int get_port_text_pass(LLayer layer)


{
LRenderingAttribute ra;
LLayer_GetRenderingAttribute( layer, raiPortText, &ra );
return ra.mPass;
}

See Also

“LStipple” (page 1621), “LRenderingAttribute” (page 1614),


“LLayer_GetRenderingObjectName” (page 1451), “LLayer_SetRenderingAttribute” (page 1450)

L-Edit 14 User Guide Section 4 1449


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LLayer_SetRenderingAttribute

LLayer_SetRenderingAttribute

LStatus LLayer_SetRenderingAttribute( LLayer layer,


LRenderingAttributeIndex index, LRenderingAttribute *pRA );

Description

This function sets a rendering attribute.

Return Values

LStatusOK if successful or LBadParameters if not.

Parameters

layer The layer


index The number of the rendering attribute to set.
pRA A pointer to LRenderingAttribute structure.

Example

void make_outline_thin(LLayer layer)


{
unsigned int n;
LRenderingAttribute ra;

for(n=raiFirstRenderingAttribute; n<=raiLastRenderingAttribute; n++)


{
LLayer_GetRenderingAttribute(layer, n; &ra);
ra.mOutlineThicknessUnits = utPixels;
ra.mOutlineThickness = 1;
LLayer_SetRenderingAttribute(layer, n; &ra);
}
}

See Also

“LStipple” (page 1621), “LRenderingAttribute” (page 1614),


“LLayer_GetRenderingObjectName” (page 1451), “LLayer_GetSpecial” (page 1424),
“LLayer_SetSpecial” (page 1425)

L-Edit 14 User Guide Section 4 1450


Chapter 35: UPI Functions Reference Database Functions Layer Functions Rendering Functions
LLayer_GetRenderingObjectName

LLayer_GetRenderingObjectName

LStatus LLayer_GetRenderingObjectName( LLayer layer,


LRenderingAttributeIndex index, char *nameBuf, int nameBufSize );

Description

This function is mainly for debugging purposes. It returns the name of a rendering attribute.

Return Values

LStatusOK if successful or LBadParameters if not. The possible values of nameBuf after a successful
call are: “Object,” “PortBox,” “PortText,” “WireCenterline,” “SelectedObject,” “SelectedPortBox,”
“SelectedPortText,” and “SelectedWireCenterline.”

Parameters

layer The layer


index The number of the rendering attribute to get.
nameBuf The buffer that will contain the rendering attribute name
nameBufSize Maximum number of characters to put into nameBuf

Example

void message_outline_thickness(LLayer layer)


{
unsigned int n;
LRenderingAttribute ra;
char nameBuf[64];
char msgBuf[NumberOfRenderingAttributes][128];

for(n=raiFirstRenderingAttribute; n<=raiLastRenderingAttribute; n++)


{
LLayer_GetRenderingObjectName(layer, n, nameBuf, sizeof(nameBuf));
LLayer_GetRenderingAttribute(layer, n; &ra);

sprintf(msgbuf[n], "Outline thickness for %s is %u %s",


nameBuf,
ra.mOutlineThickness,
(ra.mOutlineThicknessUnits==utPixels)? "Pixels" : "LU");
}

LDialog_MultiLineMsgBox(msgBuf, NumberOfRenderingAttributes);
}

See Also

“LRenderingAttribute” (page 1614), “LLayer_GetRenderingObjectName” (page 1451),


“LLayer_SetRenderingAttribute” (page 1450)

L-Edit 14 User Guide Section 4 1451


Chapter 35: UPI Functions Reference Database Functions Technology Setup Functions Rendering Functions

Technology Setup Functions

Technology functions allow the user to manipulate the technology of a design file. Specifically, these
functions allow the user to get, set, or change the technology setup or individual technology parameters.

“LFile_GetTechnology” (page 1453) “LFile_SetTechnology” (page 1454)

“LFile_SetTechnologyUnitNum” (page 1456) “LFile_SetTechnologyUnitDenom” (page


1457)
“LFile_SetTechnologyLambdaNum” (page “LFile_SetTechnologyLambdaDenom” (page
1458) 1459)
“LFile_SetTechnologyName” (page 1455) “LFile_SetTechnologyUnitName” (page
1462)
“LFile_GetTechnologyEx840” (page 1460) “LFile_SetTechnologyEx840” (page 1461)

L-Edit 14 User Guide Section 4 1452


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_GetTechnology

LFile_GetTechnology

LTechnology LFile_GetTechnology( LFile file );

Description

Gets the technology setup of a file.

Return Values

The LTechnology structure filled with the values of the current technology setup.

Parameters

file Specified file.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LFile” (page 1578), “LTechnology” (page 1623), “Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1453


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnology

LFile_SetTechnology

LStatus LFile_SetTechnology( LFile file, LTechnology *technology );

Description

Sets the technology setup of a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


technology Pointer to an LTechnology structure that contains the new technology
setup.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LTechnology” (page 1623), “Technology Setup
Functions” (page 1452)

L-Edit 14 User Guide Section 4 1454


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnologyName

LFile_SetTechnologyName

char* LFile_SetTechnologyName( LFile file, char* name );

Description

Sets the technology name of file.

Return Values

Pointer to the technology name buffer if successful; NULL otherwise.

Parameters

file Specified file.


name New technology name.

See Also

“LFile” (page 1578), “Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1455


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnologyUnitNum

LFile_SetTechnologyUnitNum

LStatus LFile_SetTechnologyUnitNum( LFile file, long num );

Description

Sets the numerator of the technology unit mapping fraction in file to num.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


num Numerator value.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1456


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnologyUnitDenom

LFile_SetTechnologyUnitDenom

LStatus LFile_SetTechnologyUnitDenom( LFile file, long denom );

Description

Sets the denominator of the technology unit mapping fraction in file to denom.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


denom Denominator value.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1457


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnologyLambdaNum

LFile_SetTechnologyLambdaNum

LStatus LFile_SetTechnologyLambdaNum(LFile file, long num);

Description

Sets the numerator of the technology lambda mapping fraction in file to num.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


num Numerator value.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1458


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnologyLambdaDenom

LFile_SetTechnologyLambdaDenom

LStatus LFile_SetTechnologyLambdaDenom( LFile file, long denom );

Description

Sets the denominator of the technology lambda mapping fraction in file to denom.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


denom Denominator value.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1459


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_GetTechnologyEx840

LFile_GetTechnologyEx840

LStatus LFile_GetTechnologyEx840( LFile pTDBFile, LTechnologyEx840 *pTechnology


);

Description

Gets the technology setup of a file.

Return Values

The LTechnologyEx840 structure filled with the values of the current technology setup.

Parameters

pTDBFile Specified file.


pTechnology pointer to a LTechnologyEx840 structure

See Also

“LFile” (page 1578), “LTechnologyEx840” (page 1624), “Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1460


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnologyEx840

LFile_SetTechnologyEx840

LStatus LFile_SetTechnologyEx840( LFile pTDBFile, LTechnologyEx840 *pTechnology


);

Description

Sets the technology setup of a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

pTDBFile Specified file.


pTechnology Pointer to an LTechnologyEx840 structure that contains the new
technology setup.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LTechnologyEx840” (page 1624),


“Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1461


Chapter 35: UPI Functions Reference Database Functions Rendering Functions
LFile_SetTechnologyUnitName

LFile_SetTechnologyUnitName

LStatus LFile_SetTechnologyUnitName( LFile file, const char* name );

L-Edit 14 User Guide Section 4 1462


Chapter 35: UPI Functions Reference Database Functions Color Palette Functions

Color Palette Functions

L-Edit color palette can contain 16, 32, 64, 128, or 256 colors. (For further information, see “Color
Parameters” on page 59.)

These functions allow the user to manipulate the color palette of a layout.

“LFile_GetColorPalette” (page 1464) “LFile_SetColorPalette” (page 1467)

“LFile_GetColorPaletteNumColors” (page “LFile_SetColorPaletteNumColors” (page


1465) 1468)
“LFile_GetColorPaletteSortBy” (page 1466) “LFile_SetColorPaletteSortBy” (page 1469)

L-Edit 14 User Guide Section 4 1463


Chapter 35: UPI Functions Reference Database Functions Color Palette Functions
LFile_GetColorPalette

LFile_GetColorPalette

LStatus LFile_GetColorPalette( LFile file, LColor *pColor, int index );

Description

Gets a color from the palette.

Return Values

Returns LStatusOK if successful or LBadParameter if an error occurred.

Parameters

file Current file.


pColor Pointer to LColor.
index Index number of the color to get. Must be non-negative and less than
the number of colors in the palette.

Structure

typedef structure {
short LRed
short LBlue
short LGreen
} LColor

See Also

“LFile_SetColorPalette” (page 1467), “LFile_GetColorPaletteNumColors” (page 1465)

L-Edit 14 User Guide Section 4 1464


Chapter 35: UPI Functions Reference Database Functions Color Palette Functions
LFile_GetColorPaletteNumColors

LFile_GetColorPaletteNumColors

int LFile_GetColorPaletteNumColors( LFile file );

Description

Gets the number of colors in the palette.

Return Values

Number of colors in the palette. Possible values are:

ƒ 16
ƒ 32
ƒ 64
ƒ 128
ƒ 256

Returns null if there is an error.

Parameters

file Current file.

See Also

“LFile_SetColorPalette” (page 1467), “LFile_SetColorPaletteNumColors” (page 1468)

L-Edit 14 User Guide Section 4 1465


Chapter 35: UPI Functions Reference Database Functions Color Palette Functions
LFile_GetColorPaletteSortBy

LFile_GetColorPaletteSortBy

const char *LFile_GetColorPaletteSortBy( LFile file );

Description

Sets the name of the palette sort option.

Return Values

The name of the palette sort option. Possible values are:

ƒ “SortByIndex”
ƒ “SortByNumBits”
ƒ “SortByHue”
ƒ “SortByBrightness”

Returns null if an error occurred.

Parameters

file Current file.

See Also

“LFile_SetColorPaletteSortBy” (page 1469)

L-Edit 14 User Guide Section 4 1466


Chapter 35: UPI Functions Reference Database Functions Color Palette Functions
LFile_SetColorPalette

LFile_SetColorPalette

LStatus LFile_SetColorPalette( LFile file, const LColor *pcolor, int index );

Description

Sets a color specified by the index in the palette.

Return Values

Returns LStatusOK if successful or LBadParameter if an error occurred.

Parameters

file Current file.


pcolor Pointer to LColor.
index Index of the color to set. Must be non-negative and less than the
number of colors in the palette.

Structure

typedef structure {
short LRed
short LBlue
short LGreen
} LColor

See Also

“LPalette” (page 1604), “LFile_SetColorPalette” (page 1467),


“LFile_GetColorPaletteNumColors” (page 1465)

L-Edit 14 User Guide Section 4 1467


Chapter 35: UPI Functions Reference Database Functions Color Palette Functions
LFile_SetColorPaletteNumColors

LFile_SetColorPaletteNumColors

LStatus LFile_SetColorPaletteNumColors( LFile file, int numcolors );

Description

Sets the number of colors in the palette. This number must be one of the following values:

ƒ 16
ƒ 32
ƒ 64
ƒ 128
ƒ 256

Return Values

Returns LStatusOK if successful or LBadParameter if an error occurred.

Parameters

file Current file.

See Also

“LFile_GetColorPaletteSortBy” (page 1466)

L-Edit 14 User Guide Section 4 1468


Chapter 35: UPI Functions Reference Database Functions Color Palette Functions
LFile_SetColorPaletteSortBy

LFile_SetColorPaletteSortBy

LStatus LFile_SetColorPaletteSortBy( LFile file, const char *sortby );

Description

Sets a name of the palette sort option. Possible values are:

ƒ “SortByIndex”
ƒ “SortByNumBits”
ƒ “SortByHue”
ƒ “SortByBrightness”

Return Values

Returns LStatusOK if successful or LBadParameter if an error occurred.

Parameters

file Current file.

See Also

“LFile_GetColorPaletteSortBy” (page 1466).

L-Edit 14 User Guide Section 4 1469


Chapter 35: UPI Functions Reference Database Functions Import/Export Functions Color Palette Functions

Import/Export Functions

L-Edit can import a layout from GDS II and CIF files or export a layout to GDS II or CIF files.

“CIF Setup Functions” (page 1471) allow the user to set CIF import/export parameters.

“GDS II Setup Functions” (page 1474) allow the user to set GDS II import/export parameters.

“DRC Functions” (page 1477) allow the user to manipulate the design rules of a layout file and run a
design rule check.

“Extract Functions” (page 1498) are used for netlist extraction.

“Core Functions” (page 1511) allow the user to manipulate the core of a layout file.

L-Edit 14 User Guide Section 4 1470


Chapter 35: UPI Functions Reference Database Functions CIF Setup Functions

CIF Setup Functions

“LFile_GetCIFParameters” (page 1472) “LFile_SetCIFParameters” (page 1473)

L-Edit 14 User Guide Section 4 1471


Chapter 35: UPI Functions Reference Database Functions CIF Setup Functions
LFile_GetCIFParameters

LFile_GetCIFParameters

LCIFParam *LFile_GetCIFParameters( LFile file, LCIFParam *cifparam );

Description

Gets the CIF parameters of a file.

Return Values

Pointer to the CIF parameters structure if successful; NULL otherwise.

Parameters

file Specified file.


cifparam Pointer to a structure that will contain CIF parameters.

See Also

“LGDSParam” (page 1580), “LFile” (page 1578), “CIF Setup Functions” (page 1471)

L-Edit 14 User Guide Section 4 1472


Chapter 35: UPI Functions Reference Database Functions CIF Setup Functions
LFile_SetCIFParameters

LFile_SetCIFParameters

LStatus LFile_SetCIFParameters( LFile file, LCIFParam *cifparam );

Description

Sets the CIF parameters of a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


cifparam Pointer to a structure that contains the new CIF parameter values.

See Also

“LStatus” (page 1620), “LGDSParam” (page 1580), “LFile” (page 1578),


“CIF Setup Functions” (page 1471)

L-Edit 14 User Guide Section 4 1473


Chapter 35: UPI Functions Reference Database Functions GDS II Setup Functions

GDS II Setup Functions

“LFile_GetGDSParameters” (page 1475) “LFile_SetGDSParameters” (page 1476)

Note: These functions are superseded as of L-Edit v10 by “LGDSParam” (page 1580).

L-Edit 14 User Guide Section 4 1474


Chapter 35: UPI Functions Reference Database Functions GDS II Setup Functions
LFile_GetGDSParameters

LFile_GetGDSParameters

LGDSParam *LFile_GetGDSParameters( LFile file, LGDSParam *gdsparam );

Version

Note: Note that this function was available in L-Edit versions 8.2 through 10. It is
superseded in L-Edit v10 and later by “LGDSParam” (page 1580).

Description

Gets GDSII parameters of a file.

Return Values

Pointer to the GDSII parameters structure if successful; LBadParameters if pGDSParam or pfile is null.

Parameters

file Specified file.


gdsparam Pointer to a structure that will contain GDS II parameters.

Example

LGDSParam Params;
LFile_GetGDSParameters(File, &Params);
Params. use_defaults_units=true;
File_SetGDSParameters(File, &Params)

See Also

“LGDSParam” (page 1580), “LFile_SetGDSParameters” (page 1476), “LStatus” (page 1620),


“LFile” (page 1578)

L-Edit 14 User Guide Section 4 1475


Chapter 35: UPI Functions Reference Database Functions GDS II Setup Functions
LFile_SetGDSParameters

LFile_SetGDSParameters

LStatus LFile_SetGDSParameters( LFile file, LGDSParam *gdsparam );

Version

Note: Note that this function was available in L-Edit versions 8.2 through 10. It is
superseded in L-Edit v10 and later by “LGDSParam” (page 1580).

Description

Sets the current GDSII parameters of a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value LBadParameters if
gdsparam or file is null.

Parameters

file Specified file.


gdsparam Pointer to a structure that contains GDSII parameters.

Example

LGDSParam Params;
LFile_GetGDSParameters(File, &Params);
Params. use_defaults_units=true;
File_SetGDSParameters(File, &Params)

See Also

“LGDSParam” (page 1580), “LFile_GetGDSParameters” (page 1475), “LStatus” (page 1620),


“LFile” (page 1578)

L-Edit 14 User Guide Section 4 1476


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions

DRC Functions

DRC functions allow the user to manipulate the design rules of a layout file and run a design rule check.

“LDrcRule_Add” (page 1478) “LDrcRule_Delete” (page 1479)

“LDrcRule_GetList” (page 1481) “LDrcRule_GetNext” (page 1482)

“LDrcRule_Find” (page 1480) “LDrcRule_SetRuleSet” (page 1483)

“LDrcRule_GetParameters” (page 1485) “LDrcRule_SetParameters” (page 1486)

“LDRCRule_DestroyParameter” (page 1487) “LDrcRule_SetTolerance” (page 1484)

“LFile_GetDrcFlags” (page 1492) “LFile_SetDrcFlags” (page 1493)

“LCell_OpenDRCSummary” (page 1494) “LCell_OpenDRCStatistics” (page 1495)

“LCell_GetDRCNumErrors” (page 1496) “LCell_GetDRCStatus” (page 1497)

“LCell_RunDRCEx01” (page 1204)

Obsolete:
“LDRC_Run” (page 1489)

“LFile_GetBinSize” (page 1490) “LFile_SetBinSize” (page 1491)

L-Edit 14 User Guide Section 4 1477


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_Add

LDrcRule_Add

LDrcRule LDrcRule_Add( LFile file, LDrcRule preceding_rule,


LDesignRuleParam *param );

Description

Adds a new design rule to the file. The newly added design rule will be added after the specified
preceding_rule and will have the specified parameters.

Return Values

Pointer to the newly added DRC rule if successful; NULL otherwise.

Parameters

file Specified file.


preceding_rule New rule will be added after this rule.
param Pointer to a design rule parameter structure that specifes the details of
the new rule.

See Also

“LGDSParam” (page 1580), “LFile” (page 1578), “DRC Functions” (page 1477)

L-Edit 14 User Guide Section 4 1478


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_Delete

LDrcRule_Delete

LStatus LDrcRule_Delete( LFile file, LDrcRule rule );

Description

Deletes a design rule from a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


rule Rule to be deleted.

See Also

“LStatus” (page 1620), “LGDSParam” (page 1580), “LFile” (page 1578), “DRC Functions” (page
1477)

L-Edit 14 User Guide Section 4 1479


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_Find

LDrcRule_Find

LDrcRule LDrcRule_Find( LFile file, LDrcRuleType rule_type, char *layer1, char


*layer2 );

Description

Searches for a specific design rule involving two given layers. If layer2 is the blank in the rule (as for
metal1 to metal1 spacing), it should be set to NULL. For example, LDrcRule(File, LSPACING, layer,
NULL) .

Return Values

Pointer to the DRC rule if successful; NULL otherwise.

Parameters

file Specified file.


rule_type Type of DRC rule.
layer1 Source layer 1.
layer2 Source layer 2.

See Also

“LGDSParam” (page 1580), “LFile” (page 1578), “LDrcRuleType” (page 1569),


“DRC Functions” (page 1477)

L-Edit 14 User Guide Section 4 1480


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_GetList

LDrcRule_GetList

LDrcRule LDrcRule_GetList( LFile file );

Description

Gets a list of DRC rules in a file.

Return Values

Pointer to the head of the DRC rule list if successful; NULL otherwise.

Parameters

file Specified file.

See Also

“LGDSParam” (page 1580), “LFile” (page 1578), “DRC Functions” (page 1477)

L-Edit 14 User Guide Section 4 1481


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_GetNext

LDrcRule_GetNext

LDrcRule LDrcRule_GetNext( LDrcRule rule );

Description

Gets the design rule that follows a given design rule.

Return Values

Pointer to the next element in the DRC rule list if successful; NULL otherwise.

Parameters

rule Specified design rule.

See Also

“LGDSParam” (page 1580), “DRC Functions” (page 1477)

L-Edit 14 User Guide Section 4 1482


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_SetRuleSet

LDrcRule_SetRuleSet

LStatus LDrcRule_SetRuleSet( LFile file, char *rule_set );

Description

Sets the name of the design rule set in a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


rule_set Name of the rule set.

See Also

“LStatus” (page 1620), “LGDSParam” (page 1580), “LFile” (page 1578), “DRC Functions” (page
1477)

L-Edit 14 User Guide Section 4 1483


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_SetTolerance

LDrcRule_SetTolerance

LStatus LDrcRule_SetTolerance( LFile file, long tolerance );

Description

Sets the tolerance of the design rule set in a file.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


tolerance Tolerance of the design rule set.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “DRC Functions” (page 1477)

L-Edit 14 User Guide Section 4 1484


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_GetParameters

LDrcRule_GetParameters

LDesignRuleParam *LDrcRule_GetParameters( LDrcRule rule,


LDesignRuleParam *param );

Description

Gets the parameters of a DRC rule.

Return Values

Pointer to the DRC rule parameters structure if successful; NULL otherwise.

Parameters

rule Specified design rule.


param Pointer to a structure that will contain the parameters.

See Also

“LGDSParam” (page 1580), “DRC Functions” (page 1477)

L-Edit 14 User Guide Section 4 1485


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDrcRule_SetParameters

LDrcRule_SetParameters

LStatus LDrcRule_SetParameters( LFile file, LDrcRule rule,


LDesignRuleParam *param );

Description

Sets the parameters of a DRC rule.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

file Specified file.


rule Specified design rule.
param Pointer to a structure that contains the design rule parameters.

See Also

“LStatus” (page 1620), “LFile” (page 1578), “LGDSParam” (page 1580), “DRC Functions” (page
1477)

L-Edit 14 User Guide Section 4 1486


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDRCRule_DestroyParameter

LDRCRule_DestroyParameter

LStatus LDrcRule_DestroyParameter( LDesignRuleParam *pDesignRuleParam );

Description

Frees the memory associated with the design rule parameter structure that was allocated by L-Edit
during a LDrcRule_GetParameter call.

Note: Do not call LDrcRule_DestoryParameter if LDrcRule_GetParameter has not


been previously called with pDesignRuleParam..

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value with possible values:

LBadParameters —pDesignRuleParam is NULL

Parameters

pDesignRuleParam Pointer to a design rule parameter structure.

Example

LFile pTDBFile = LFile_GetVisible();


if(Assigned(pTDBFile))
{
LDrcRule pDRCRule = LDrcRule_Find(pTDBFile, LSPACING, "Poly", NULL);
if(Assigned(pDRCRule))
{
LDesignRuleParam pDesignRuleParameter;
if(Assigned(LDrcRule_GetParameters(pDRCRule,
&pDesignRuleParameter)))
{
long lDist = pDesignRuleParameter.distance;

// More Processing
// ...

LDrcRule_DestroyParameter(&pDesignRuleParameter);
}
} // endif(Assigned(pDRCRule))
} // endif(Assigned(pTDBFile))

Version

Available in L-Edit 8.2 and later versions.

L-Edit 14 User Guide Section 4 1487


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDRCRule_DestroyParameter

See Also

“DRC Functions” (page 1477), “LDesignRuleParam” (page 1564), “LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1488


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LDRC_Run

LDRC_Run

void LDRC_Run( LCell inCell, LRect* onArea, char* errfile,


int writeErrorPorts, int writeErrorObjects );

Description

Runs DRC on the specified area of a cell.

Parameters

cell Cell on which DRC is to be run.


onArea Pointer to a LRect structure that specifies a rectangle where DRC will
be run.
errfile Name of the error file.
writeErrorPorts If 1, error ports will be drawn.
writeErrorObjects If 1, error objects will be written to the output file.

Note: This function is superseded by “LCell_RunDRCEx01” (page 1204).

See Also

“LObject” (page 1600), “LTransform” (page 1626), “DRC Functions” (page 1477)

L-Edit 14 User Guide Section 4 1489


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LFile_GetBinSize

LFile_GetBinSize

LCoord LFile_GetBinSize( LFile pFile );

Description

Gets the DRC bin size.

Return Values

The DRC bin size.

Parameters

pFile A TDB file.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LCoord” (page 1550), “LDRC_Run” (page 1489)

L-Edit 14 User Guide Section 4 1490


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LFile_SetBinSize

LFile_SetBinSize

void LFile_GetBinSize( LFile pFile LCoord lBinSize);

Description

Sets the DRC bin size.

Parameters

pFile A TDB file.


IbinSize The bin size.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LCoord” (page 1550), “LDRC_Run” (page 1489)

L-Edit 14 User Guide Section 4 1491


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LFile_GetDrcFlags

LFile_GetDrcFlags

LStatus LFile_GetDrcFlags( LFile file, LDrcFlags* pDrcFlags );

L-Edit 14 User Guide Section 4 1492


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LFile_SetDrcFlags

LFile_SetDrcFlags

LStatus LFile_SetDrcFlags( LFile file, const LDrcRule *pDrcFlags );

L-Edit 14 User Guide Section 4 1493


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LCell_OpenDRCSummary

LCell_OpenDRCSummary

LWindow LCell_OpenDRCSummary( LCell pCell );

Description

LCell_OpenDRCSummary opens the DRC Summary Report in a new text window in L-Edit for the
specified cell.

Return Values

A pointer to the text window with the DRC Summary Report.

Parameters

pCell Pointer to the cell.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LCell_OpenDRCSummary(pCell)
}

Version

Available in L-Edit v11.0 and later versions.

L-Edit 14 User Guide Section 4 1494


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LCell_OpenDRCStatistics

LCell_OpenDRCStatistics

LWindow LCell_OpenDRCStatistics( LCell pCell );

Description

LCell_OpenDRCStatistics opens the DRC Statistics Report in a new text window in L-Edit for the
specified cell.

Return Values

A pointer to the text window with the DRC Statistics Report.

Parameters

pCell Pointer to the cell.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LCell_OpenDRCStatistics(pCell)
}

Version

Available in L-Edit v11.0 and later versions.

L-Edit 14 User Guide Section 4 1495


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LCell_GetDRCNumErrors

LCell_GetDRCNumErrors

unsigned int LCell_GetDRCNumErrors( LCell pCell );

L-Edit 14 User Guide Section 4 1496


Chapter 35: UPI Functions Reference Database Functions DRC Functions GDS II Setup Functions
LCell_GetDRCStatus

LCell_GetDRCStatus

LDrcStatus LCell_GetDRCStatus( LCell pCell );

L-Edit 14 User Guide Section 4 1497


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions

Extract Functions

These functions are used for netlist extraction.

“LExtract_Run” (page 1499) “LCell_OpenExtractSummary” (page 1502)

“LExtract_Run_Dialog” (page 1500)

Obsolete: “LExtract_RunEx840” (page 1504)

“LExtract_GetOptions_Ex98” (page 1506) “LExtract_SetOptionsEx840” (page 1509)

“LExtract_GetOptionsEx840” (page 1507)

L-Edit 14 User Guide Section 4 1498


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_Run

LExtract_Run

LStatus LExtract_Run(LCell cell, char *extDefFile, char *spiceOutFile,


int writeNodeName, int writeNodeCapacitance );

Description

Runs L-Edit/Extract on a given cell.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “Extract Functions” (page 1498)

L-Edit 14 User Guide Section 4 1499


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_Run_Dialog

LExtract_Run_Dialog

LStatus LExtract_Run_Dialog(LCell topCell );

Description

Runs L-Edit/Extract on a given cell. Invokes the Extract dialog to perform the extract operation. Note
that a layout view should be active as topCell is going to be displayed in it.

LExtract_Run_Dialog differs from LExtract_RunEx840 in that with LExtract_RunEx840 the extract


options are passed as parameters but with LExtract_Run_Dialog a dialog is invoked for user input of
the extract options.

Return Values

LStatusOK if successful, LBadParameters if there is no current layout view, LBadCell if topCell is


not assigned.

Parameters

topcell The cell on which to perform the extract operation.

Example

LCell Cell = LCell_GetVisible();


LExtract_Run_Dialog(Cell);

Version

Available in L-Edit 8.4 and later versions.

See Also

“LExtract_RunEx840” (page 1504), “LExtract_GetOptionsEx840” (page 1507),


“LExtract_SetOptionsEx840” (page 1509)

L-Edit 14 User Guide Section 4 1500


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_RunCommandFile

LExtract_RunCommandFile

LStatus LExtract_RunCommandFile(LCell pTopCell, const char* szCommandFile,


const char* szSpiceOutFile);

Description

LExtract_RunCommandFile runs HiPer using a Calibre, Assura or Dracula LVS command file or a
standard Extract EXT file. It extracts the cell as a hierarchical netlist.

Return Values

LStatusOK— if successful. If an error occurs, LStatus contains the error value with possible values:

LBadCell —pCell is NULL

LOpenError—szCommandFile is null.

LCreateError—szSpiceOutFile is null.

LSystemError—Extract didn't run due to some problem (parsing error, crash, etc).

LUserAbort—The user canceled extract while it was running.

LCopyProtViolation—HiPer could not get a license.

Parameters

pCell Pointer to the cell.


CommandFile String with the path and filename of the HiPer command file. If this
is an empty string "", then it will run the standard extract rules.
SpiceOutFile String with the path and filename of the output SPICE output file.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
if(LCell_RunDRCCommandFile(pCell, "C:\\TSMC\\TSMC_HiPer.cal",
"Cell.sp") == LStatusOK)
{
// More Processing
// ...
}
}

Example

Available in L-Edit 13.0 and later versions.

L-Edit 14 User Guide Section 4 1501


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LCell_OpenExtractSummary

LCell_OpenExtractSummary

LWindow LCell_OpenExtractSummary(LCell pCell);

Description

LCell_OpenExtractSummary opens the Extract Summary Report in a new text window in L-Edit for the
specified cell.

Return Values

A pointer to the text window with the Extract Summary Report.

Parameters

pCell Pointer to the cell.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LCell_OpenExtractSummary(pCell)
}

Version

Available in L-Edit v13.0 and later versions.

L-Edit 14 User Guide Section 4 1502


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LCell_OpenExtractStatistics

LCell_OpenExtractStatistics

LWindow LCell_OpenExtractStatistics(LCell pCell);

Description

LCell_OpenExtractStatistics opens the Extract Statistics Report in a new text window in L-Edit for the
specified cell.

Return Values

A pointer to the text window with the Extract Statistics Report.

Parameters

pCell Pointer to the cell.

Example

LCell pCell = LCell_GetVisible();


if(Assigned(pCell))
{
LCell_OpenExtractStatistics(pCell)
}

Version

Available in L-Edit v13.0 and later versions.

L-Edit 14 User Guide Section 4 1503


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_RunEx840

LExtract_RunEx840

LStatus LExtract_RunEx840( LCell topCell, LExtractOptionsEx840 *ExtOptions );

Description

Runs Extract on the cell topCell, using the options specified in ExtOptions.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell TopCell is NULL.

LBadParameters Indicates one or more of the following errors:


ƒ There is no current view.
ƒ There is no read access to ExtOptions.szExtDefnFile.
ƒ There is no write access to ExtOptions.szExtDefnFile.
ƒ ExtOptions.dExtractBinSize ≥ 0.
ƒ ExtOptions.ParasiticCutoff < 0.
ƒ Any of the specified layers in ExtOptions is not a valid layer.

Parameters

topCell The top cell on which to run Extract.


ExtOptions Pointer to the structure containing Extract options. If this pointer is
NULL, then Extract is run using the most recently set option values.

Examples

/* If the Extract options have previously been set, you can simply call
LExtract_RunEx840: */
LExtract_RunEx840(MyCell, NULL);

/* Otherwise, allocate a structure for the Extract options*/


LExtractOptionsEx840 ExtOptions;
ExtOptions.nMaxIncludeStmtLen = 4096;
ExtOptions.pszExtIncludeStmt = new char[ExtOptions.nMaxIncludeStmtLen];

/* Get the Extract Options for MyCell */


LExtract_GetOptionsEx840(MyCell, &ExtOptions);

/* Change the output file name */


strcpy(ExtOptions.szExtOutFile, “c:\\ExtractOutput.out”);

/* Run Extract */

L-Edit 14 User Guide Section 4 1504


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_RunEx840

LExtract_RunEx840(MyCell, &ExtOptions);
delete [] ExtOptions.pszExtIncludeStmt;
ExtOptions.nMaxIncludeStmtLen = 0;

Version

Available in L-Edit 8.4 and later versions.

See Also

“LCell” (page 1547), “LExtractOptionsEx840” (page 1575), “LExtract_GetOptionsEx840” (page


1507),
“LExtract_SetOptionsEx840” (page 1509)

L-Edit 14 User Guide Section 4 1505


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_GetOptions_Ex98

LExtract_GetOptions_Ex98

LStatus LExtract_GetOptions_Ex98( LCell oCell, LExtractOptions *ExtOptions );

Description

Retrieves the L-Edit/Extract options for the given cell (topcell). The resulting extract options are stored
in ExtOptions.

Note: To properly retrieve the .include statement, the data member szExtIncludeStmt of the
structure ExtOptions must be dynamically allocated to a size big enough to hold the
expected .include statement. The data member lMaxIncludeStmtLen must be set to
the size of the allocated string szExtIncludeStmt. Failure to do so could result in a
general protection fault.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LStatus” (page 1620), “LObject” (page 1600), “LTechnology” (page 1623)

L-Edit 14 User Guide Section 4 1506


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_GetOptionsEx840

LExtract_GetOptionsEx840

LStatus LExtract_GetOptions_Ex840( LCell cell, LExtractOptionsEx840 *ExtOptions


);

Description

Retrieves the L-Edit/Extract options for the given cell (cell). The resulting Extract options are stored in
ExtOptions.

Note: In order to properly retrieve the .include statement, the data member
szExtIncludeStmt of the structure ExtOptions must be dynamically allocated to a
sufficient size. The data member nMaxIncludeStmtLen must be set to the size of the
allocated string szExtIncludeStmt. Failure to do so could result in a general
protection fault. See “LExtractOptionsEx840” (page 1575) for more information
about this data structure.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell cell is NULL.

LBadParameters ExtOptions is NULL.

Parameters

cell The cell from which to read L-Edit/Extract options.


ExtOptions Destination for Extract options to be written.

Examples

/* Allocate a structure for the Extract options */


LExtractOptionEx840 ExtOptions;
ExtOptions.nMaxIncludeStmtLen = 4096;
ExtOptions.pszExtIncludeStmt = new char[ExtOptions.nMaxIncludeStmtLen];

/* Write Extract options to the specified destination */


LExtract_GetOptionsEx840(MyCell, &ExtOptions);

/* Do some processing */
...

/* After processing, release the memory */


delete [] ExtOptions.pszExtIncludeStmt;
ExtOptions.nMaxIncludeStmtLen = 0;

L-Edit 14 User Guide Section 4 1507


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_GetOptionsEx840

Version

Available in L-Edit 8.4 and later versions.

See Also

“LStatus” (page 1620), “LCell” (page 1547), “LExtract_SetOptionsEx840” (page 1509),


“LExtract_RunEx840” (page 1504), “LExtractOptionsEx840” (page 1575)

L-Edit 14 User Guide Section 4 1508


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_SetOptionsEx840

LExtract_SetOptionsEx840

LStatus LExtract_SetOptionsEx840( LCell cell, LExtractOptionsEx840 *ExtOptions


);

Description

Sets Extract options in the specified cell using the values stored in ExtOptions.

Return Values

Returns LStatusOK if successful. If an error occurs, LStatus contains the error type with possible
values:

Value Error

LBadCell cell is NULL.

LBadParameters ExtOptions is NULL.

Parameters

cell The cell in which to set L-Edit/Extract options.


ExtOptions Pointer to Extract options.

Examples

/* Allocate a structure for the Extract options */


LEXtractOptionsEx840 ExtOptions;
ExtOptions.nMaxIncludeStmtLen = 4096;
ExtOptions.pszExtIncludeStmt = new char[ExtOptions.nMaxIncludeStmtLen];

/* Get Extract Options from MyCell*/


LExtract_GetOptionsEx840(MyCell, &ExtOptions);

/* Change the output file name */


strcpy(ExtOptions.szExtOutFile, “c:\\ExtractOutput.out”);

/* Set Extract options */


LExtract_SetOptionsEx840(MyCell, &ExtOptions);

/* Release memory */
delete [] ExtOptions.pszExtIncludeStmt;
ExtOptions.nMaxIncludeStmtLen = 0;

Version

Available in L-Edit 8.4 and later versions.

L-Edit 14 User Guide Section 4 1509


Chapter 35: UPI Functions Reference Database Functions Extract Functions GDS II Setup Functions
LExtract_SetOptionsEx840

See Also

“LExtract_GetOptionsEx840” (page 1507), “LExtract_RunEx840” (page 1504), “LCell” (page 1547),


“LExtractOptionsEx840” (page 1575), “LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1510


Chapter 35: UPI Functions Reference Database Functions Core Functions GDS II Setup Functions

Core Functions

The core is the “heart” of the design, where the functional logic is contained. It may be one large block
containing all of the logic for the design, or it may be composed of several smaller blocks, which
typically each have different functions within the design.

Core functions allow the user to manipulate the core of a layout file. The first function provide a way to
check if a core exists. The other functions allow the user to get or set the layer-to-layer capacitance for
a design’s horizontal or vertical routing layer.

“LCore_GetCore” (page 1512)

“LCore_GetLLHCap” (page 1513) “LCore_SetLLHCap” (page 1514)

“LCore_GetLLVCap” (page 1515) “LCore_SetLLVCap” (page 1516)

L-Edit 14 User Guide Section 4 1511


Chapter 35: UPI Functions Reference Database Functions Core Functions GDS II Setup Functions
LCore_GetCore

LCore_GetCore

LCore LCore_GetCore( LFile file );

Description

Gets the core of the specified file.

Return Values

Pointer to the core if successful; NULL otherwise.

Parameters

file Specified file.

See Also

“LTechnology” (page 1623), “LFile” (page 1578), “Core Functions” (page 1511)

L-Edit 14 User Guide Section 4 1512


Chapter 35: UPI Functions Reference Database Functions Core Functions GDS II Setup Functions
LCore_GetLLHCap

LCore_GetLLHCap

double LCore_GetLLHCap( LCore core );

Description

Gets the layer-to-layer capacitance for the horizontal routing layer of a core.

Return Values

The capacitance value (in aF/sq. micron), or -1 on error.

Parameters

core Specified core.

See Also

“LTechnology” (page 1623), “Core Functions” (page 1511)

L-Edit 14 User Guide Section 4 1513


Chapter 35: UPI Functions Reference Database Functions Core Functions GDS II Setup Functions
LCore_SetLLHCap

LCore_SetLLHCap

LStatus LCore_SetLLHCap( LCore core, double LLHCap );

Description

Sets the layer-to-layer capacitance for the horizontal routing layer of a core.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

core Specified core.


LLHCap New capacitance value (in aF/sq. micron).

See Also

“LStatus” (page 1620), “LTechnology” (page 1623), “Core Functions” (page 1511)

L-Edit 14 User Guide Section 4 1514


Chapter 35: UPI Functions Reference Database Functions Core Functions GDS II Setup Functions
LCore_GetLLVCap

LCore_GetLLVCap

double LCore_GetLLVCap( LCore core );

Description

Gets the layer-to-layer capacitance for the vertical routing layer of a core.

Return Values

The capacitance value (in aF/sq. micron), or -1 on error.

Parameters

core Specified core.

See Also

“LTechnology” (page 1623), “Core Functions” (page 1511)

L-Edit 14 User Guide Section 4 1515


Chapter 35: UPI Functions Reference Database Functions Core Functions GDS II Setup Functions
LCore_SetLLVCap

LCore_SetLLVCap

LStatus LCore_SetLLVCap( LCore core, double LLVCap );

Description

Sets the layer-to-layer capacitance for the vertical routing layer of a core.

Return Values

LStatusOK if successful. If an error occurs, LStatus contains the error value.

Parameters

core Specified core.


LLHCap New capacitance value (in aF/sq. micron).

See Also

“LStatus” (page 1620), “LTechnology” (page 1623), “Core Functions” (page 1511)

L-Edit 14 User Guide Section 4 1516


Chapter 35: UPI Functions Reference Database Functions Utility Functions

Utility Functions

There are four categories of utility functions.

“Point Functions” (page 1518) allow the user to create or transform a point.

“Rectangle Functions” (page 1524) allow the user to create or transform a rectangle.

“Transformation Functions” (page 1528) allow the user to adjust the translation, orientation, or
manipulation of an object.

“Cross Section Functions” (page 1538) allow the user to invoke and use the cross section dialog.

L-Edit 14 User Guide Section 4 1517


Chapter 35: UPI Functions Reference Database Functions Point Functions

Point Functions

“LPoint_Set” (page 1519)

“LPoint_Add” (page 1520) “LPoint_Subtract” (page 1521)

“LPoint_Transform_Ex99” (page 1523)

Obsolete:
“LPoint_Transform” (page 1522)

L-Edit 14 User Guide Section 4 1518


Chapter 35: UPI Functions Reference Database Functions Point Functions
LPoint_Set

LPoint_Set

LPoint LPoint_Set( LCoord x, LCoord y );

Description

Creates an LPoint type from two LCoord types with the values x and y.

Return Values

Returns the newly created LPoint.

Parameters

x x-coordinate.
y y-coordinate.

See Also

“LTransform” (page 1626)

L-Edit 14 User Guide Section 4 1519


Chapter 35: UPI Functions Reference Database Functions Point Functions
LPoint_Add

LPoint_Add

LPoint LPoint_Add( LPoint ptA, LPoint ptB );

Description

Adds two points

Return Values

The resultant point.

Parameters

ptA Point 1.
ptB Point 2.

See Also

“LPoint” (page 1610), “Point Functions” (page 1518)

L-Edit 14 User Guide Section 4 1520


Chapter 35: UPI Functions Reference Database Functions Point Functions
LPoint_Subtract

LPoint_Subtract

LPoint LPoint_Subtract( LPoint ptA, LPoint ptB );

Description

Subtracts two points

Return Values

The resultant point.

Parameters

ptA Point 1.
ptB Point 2.

See Also

“Point Functions” (page 1518)

L-Edit 14 User Guide Section 4 1521


Chapter 35: UPI Functions Reference Database Functions Point Functions
LPoint_Transform

LPoint_Transform

LPoint LPoint_Transform( LPoint point, LTransform transform );

Description

Applies transform to a point.

Return Values

Values of a new point. The original point is not modified.

Parameters

point Specified point.


transform Specified transformation.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LTransform” (page 1626), “LPoint_Transform_Ex99” (page 1523)

L-Edit 14 User Guide Section 4 1522


Chapter 35: UPI Functions Reference Database Functions Point Functions
LPoint_Transform_Ex99

LPoint_Transform_Ex99

LPoint LPoint_Transform_Ex99( LPoint point, LTransform_Ex99 transform );

Description

Applies transform to a point.

Return Values

Values of a new point. The original point is not modified.

Parameters

point Specified point.


transform Specified transformation.

See Also

“LPoint_Transform” (page 1522), “LTransform_Ex99” (page 1627)

L-Edit 14 User Guide Section 4 1523


Chapter 35: UPI Functions Reference Database Functions Rectangle Functions

Rectangle Functions

“LRect_Set” (page 1525)

“LRect_Transform_Ex99” (page 1527)

Obsolete:
“LRect_Transform” (page 1526)

L-Edit 14 User Guide Section 4 1524


Chapter 35: UPI Functions Reference Database Functions Rectangle Functions
LRect_Set

LRect_Set

LRect LRect_Set( LCoord x0, LCoord y0, LCoord x1, LCoord y1 );

Description

Creates an LRect type from the specified lower left and upper right coordinates. A rectangle can be
defined by specifying its lower left and the upper right corners.

Return Values

Returns the newly created LRect.

Parameter

x0 x- coordinate of the lower left point


y0 y- coordinate of the lower left point
X1 x- coordinate of the upper right point
y1 y- coordinate of the upper right point

See Also

“LTransform” (page 1626), “Rectangle Functions” (page 1524)

L-Edit 14 User Guide Section 4 1525


Chapter 35: UPI Functions Reference Database Functions Rectangle Functions
LRect_Transform

LRect_Transform

LRect LRect_Transform( LRect rect, LTransformtransform );

Description

Applies transform to rect.

Return Values

Returns a new transformed rectangle. Original rect is not modified.

Parameters

rect Rectangle that needs to be transformed.


transform Specified transformation.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LRect_Transform_Ex99” (page 1527), “LTransform” (page 1626),


“Rectangle Functions” (page 1524)

L-Edit 14 User Guide Section 4 1526


Chapter 35: UPI Functions Reference Database Functions Rectangle Functions
LRect_Transform_Ex99

LRect_Transform_Ex99

LRect LRect_Transform_Ex99( LRect rect, LTransform_Ex99 transform );

Description

Applies transform to rect.

Return Values

Returns a new transformed rectangle. Original rect is not modified.

Parameters

rect Rectangle that needs to be transformed.


transform Specified transformation.

See Also

“Rectangle Functions” (page 1524), , “LTransform_Ex99” (page 1627)

L-Edit 14 User Guide Section 4 1527


Chapter 35: UPI Functions Reference Database Functions Transformation Functions

Transformation Functions

“LTransform_Set_Ex99” (page 1530) “LTransform_Zero_Ex99” (page 1532)

“LTransform_Add_Ex99” (page 1534) “LTransform_Subtract_Ex99” (page 1536)

“LTransform_GetInverse” (page 1537)

Obsolete:
“LTransform_Set” (page 1529) “LTransform_Zero” (page 1531)

“LTransform_Add” (page 1533) “LTransform_Subtract” (page 1535)

L-Edit 14 User Guide Section 4 1528


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Set

LTransform_Set

LTransformLTransform_Set( LCoord xtrans, LCoord ytrans, LOrientation orient,


LMagnification mag );

Description

Sets a transformation structure.

Return Values

An LTransform structure containing the specified transformation.

Parameters

xtrans Translation amount in the x-direction.


ytrans Translation amount in the y-direction.
orient Orientation.
mag Magnification.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LTransform” (page 1626), “LOrientation” (page 1601), “LMagnification” (page 1595),


“Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1529


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Set_Ex99

LTransform_Set_Ex99

LTransform_Ex99 LTransform_Set_Ex99( LCoord xtrans, LCoord ytrans,


LOrientation_Ex99 orient, LMagnification mag );

Description

Sets a transformation structure.

Return Values

An LTransform_Ex99 structure containing the specified transformation.

Parameters

xtrans Translation amount in the x-direction.


ytrans Translation amount in the y-direction.
orient Orientation as a real number
mag Magnification.

See Also

“LTransform_Ex99” (page 1627), “LOrientation” (page 1601),


“LMagnification” (page 1595), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1530


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Zero

LTransform_Zero

LTransformLTransform_Zero( void );

Description

Makes an identity transformation.

Return Values

Returns the identity transformation.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LTransform” (page 1626), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1531


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Zero_Ex99

LTransform_Zero_Ex99

LTransform_Ex99 LTransform_Zero_Ex99( void );

Description

Makes an identity transformation.

Return Values

Returns the identity transformation.

See Also

“LTransform_Ex99” (page 1627), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1532


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Add

LTransform_Add

LTransformLTransform_Add( LTransform transform_to_be_added,


LTransform current_transform );

Description

Adds two transformations. A transform is the translation, orientation, or magnification of an object.

Return Values

Returns the sum of transform_to_be_added and current_transform as an LTransform.

Parameters

transform_to_be_added Transformation structure 1.


current_transform Transformation structure 2.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LTransform” (page 1626), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1533


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Add_Ex99

LTransform_Add_Ex99

LTransform_Ex99 LTransform_Add_Ex99( LTransform_Ex99 transform_to_be_added,


LTransform_Ex99 current_transform );

Description

Adds two transformations. A transform is the translation, orientation, or magnification of an object.

Return Values

Returns the sum of transform_to_be_added and current_transform as an LTransform.

Parameters

transform_to_be_added Transformation structure 1.


current_transform Transformation structure 2.

See Also

“LTransform_Ex99” (page 1627), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1534


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Subtract

LTransform_Subtract

LTransform LTransform_Subtract( LTransform transform_to_be_subtracted,


LTransform current_transform );

Description

Subtracts transform_to_be_subtracted from current_transform. A transform is the translation,


orientation, or magnification of an object.

Return Values

The resulting transform if successful; zero transform otherwise.

Parameters

transform_to_be_subtracte Transformation structure 1.


d
current_transform Transformation structure 2.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LTransform” (page 1626), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1535


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_Subtract_Ex99

LTransform_Subtract_Ex99

LTransform_Ex99 LTransform_Subtract_Ex99(
LTransform_Ex99 transform_to_be_subtracted,
LTransform_Ex99 current_transform );

Description

Subtracts one transform from another. A transform is the translation, orientation, or magnification of an
object.

Return Values

The resulting transform if successful; zero transform otherwise.

Parameters

transform_to_be_subtracte Transformation structure 1.


d
current_transform Transformation structure 2.

See Also

“LTransform_Subtract” (page 1535), “LTransform_Ex99” (page 1627),


“Transformation Functions” (page 1528).

L-Edit 14 User Guide Section 4 1536


Chapter 35: UPI Functions Reference Database Functions Transformation Functions
LTransform_GetInverse

LTransform_GetInverse

LTransform_Ex99 LTransform_GetInverse( transform_to_be_inverted );

Description

Calculates the inverse transform of the given transform.

Parameters

transform_to_be_inverted Previous edit transformation.

Return Values

Returns the transformation inversion.

Example

LTransform_Ex99 references the cursor location for the specified layout window and retrieves the edit
transformation, where the edit transform is the transformation from the cell which is being edited to the
top-level cell. It is useful if the user is editing in place in the current window and would like to
determine top-level cell coordinates as opposed to local, as shown below.

LTransform_Ex99 oEditTransform;
LWindow_GetEditTransform(pCurrentWindow, &oEditTransform);
oEditTransform = LTransform_GetInverse(oEditTransform);
LPoint ptTranslatedCursorLoc = LPoint_Transform_Ex99(ptCursorLoc,
oEditTransform);

See Also

“LTransform_Ex99” (page 1627),LWindow_GetEditTransform, “LPoint_Transform_Ex99” (page


1523), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1537


Chapter 35: UPI Functions Reference Database Functions Cross Section Functions

Cross Section Functions

“LCSV_Run” (page 1539)

L-Edit 14 User Guide Section 4 1538


Chapter 35: UPI Functions Reference Database Functions Cross Section Functions
LCSV_Run

LCSV_Run

void LCSV_Run( LCell incell );

Description

Invokes the Generate Cross Section dialog, retrieves its default values, waits for user input and then
runs a Cross-Section view for the given cell (incell).

Parameters

incell The cell for which to generate the cross section view.

Examples

LCSV_Run(pCell);

Version

Available in L-Edit 8.4 and later versions.

L-Edit 14 User Guide Section 4 1539


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCSV_Run

Data Types and Typedefs

LAmbiguousFillType (page 1542) LArcDirection (page 1543)


LBoolean (page 1544) LBooleanOperation (page 1545)
LCapType (page 1546) LCell (page 1547)
LCIFParam (page 1548) LColor (page 1549)
LCoord (page 1550) LCore (page 1551)
LCursorType (page 1552) LCurve (page 1553)
LDerivedLayerAreaOperation (page 1554) LDerivedLayerBoolOperation (page 1556)
LDerivedLayerDensityOperation (page 1557) LDerivedLayerParam (page 1558)
LDerivedLayerParamEx830 (page 1559) LDerivedLayerSelectOperation (page 1561)
LDesignRuleFlags (page 1563) LDesignRuleParam (page 1564)
LDialogItem (page 1565) LDisplayUnitInfo (page 1566)
LDrcFlags (page 1567) LDrcRule (page 1568)
LDrcRuleType (page 1569) LDrcStatus (page 1570)
LEntity (page 1571) LEnvironment (page 1572)
LExtractOptions (page 1573) LExtractOptionsEx840 (page 1575)
LFile (page 1578) LFileType (page 1579)
LGDSParam (page 1580) (function removed)
LGeomType (page 1581) LGrid (page 1582)
LGrid_v10_00 (page 1585) LGridEx840 (page 1583)
LInstance (page 1587) LJoinType (page 1588)
LLayer (page 1589) LLayerParam (page 1590)
LLayerParamEx830 (page 1591) LLayerViewStatus (page 1593)
LLen (page 1594) LMagnification (page 1595)
LMarker (page 1596) LObject (page 1600)
LOrientation (page 1601) LOrientation_Ex99 (page 1602)
LOutlineStyle (page 1603) LPalette (page 1604)
LPass (page 1605) LPassMode (page 1606)
LPassParam (page 1607) LPassType (page 1608)
LPieParams (page 1609) LPoint (page 1610)
LPort (page 1611) LPropertyType (page 1612)
LRect (page 1613) LRenderingAttribute (page 1614)
LRenderingAttributeIndex (page 1615) LSelection (page 1616)

L-Edit 14 User Guide Section 4 1540


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCSV_Run

LSelectionParam (page 1617) LShapeType (page 1618)


LSpecialLayer (page 1619) LStatus (page 1620)
LStipple (page 1621) tech_unit_type (page 1622)
LTechnology (page 1623) LTechnologyEx840 (page 1624)
LTorusParams (page 1625) LTransform (page 1626)
LTransform_Ex99 (page 1627) LVertex (page 1628)
LWindow (page 1629) LWindowType (page 1630)
LWireConfig (page 1631) LWireConfigBits (page 1632)
LWireParam (page 1633) UPIDrawingToolType (page 1634)

L-Edit 14 User Guide Section 4 1541


Chapter 35: UPI Functions Reference Data Types and Typedefs
LAmbiguousFillType

LAmbiguousFillType

typedef enum
{
LDo_Not_Flag = 0,
LFlag,
LFix
} LAmbiguousFillType;

Description

LDo_Not_FlagIgnore polygons with ambiguous fills

LFlagFlag polygons with ambiguous fills

LFixFix polygons with ambiguous fills

Note: Note that this data type is superseded in L-Edit V10 and later.

See Also

“LDesignRuleFlags” (page 1563), “LFile_GetDesignRuleFlags” (page 1148),


“LFile_SetDesignRuleFlags” (page 1149)

L-Edit 14 User Guide Section 4 1542


Chapter 35: UPI Functions Reference Data Types and Typedefs
LArcDirection

LArcDirection

typedef enum {
CW,
CCW
} LArcDirection;

Definition

Specifies the direction of an arc with respect to its starting vertex. Choose CW to specify a clockwise
direction or CCW to specify a counterclockwise direction.

Version

Available in L-Edit 8.4 and later versions.

See Also

“LVertex_AddCurve” (page 1302), “LVertex_GetCurve” (page 1303), “LVertex_SetCurve” (page


1307).

L-Edit 14 User Guide Section 4 1543


Chapter 35: UPI Functions Reference Data Types and Typedefs
LBoolean

LBoolean

typedef enum {LFALSE,LTRUE} LBoolean;

Description

An enumerated datatype indicating the Boolean value of an L-Edit property value.

L-Edit 14 User Guide Section 4 1544


Chapter 35: UPI Functions Reference Data Types and Typedefs
LBooleanOperation

LBooleanOperation

typedef enum
{
LBoolOp_OR,
LBoolOp_AND,
LBoolOp_XOR,
LBoolOp_NOT,
LBoolOp_GROW,
LBoolOp_SHRINK,
LBoolOp_SUBTRACT
} LBooleanOperation;

Description

This data type is used to control the boolean operation engine.

Version

This data type is available in V10 and later.

See Also

“LCell_BooleanOperation” (page 1217)

L-Edit 14 User Guide Section 4 1545


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCapType

LCapType

typedef enum {
LCapButt,
LCapRound,
LCapExtend
} LCapType;

Description

Defines the end style of a wire.

See Also

“LWire_GetCapType” (page 1333), “LWire_SetCapType” (page 1341)

L-Edit 14 User Guide Section 4 1546


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCell

LCell

typedef struct _LCell *LCell;

Description

A pointer to an L-Edit cell whose contents can only be accessed or modified through UPI functions.

See Also

“Cell Functions” (page 1162)

L-Edit 14 User Guide Section 4 1547


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCIFParam

LCIFParam

typedef struct {
int poly_to_rect;
int port_rect;
} LCIFParam;

Description

LCIFParam is used to get and set the CIF setup of a file. Rectangular polygons are read as boxes if
poly_to_rect is 1. Port boxes are written out if port_rect is 1.

See Also

“Importing Files” (page 146)

L-Edit 14 User Guide Section 4 1548


Chapter 35: UPI Functions Reference Data Types and Typedefs
LColor

LColor

typedef struct {
short LRed;
short LBlue;
short LGreen;
} LColor;

Description

Defines a color to be used by L-Edit.

See Also

“LFile_GetColorPalette” (page 1464), “LFile_SetColorPalette” (page 1467)

L-Edit 14 User Guide Section 4 1549


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCoord

LCoord

typedef long LCoord;

Description

The basic internal unit coordinate type for the L-Edit layout space.

See Also

“Point Functions” (page 1518)

L-Edit 14 User Guide Section 4 1550


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCore

LCore

typedef struct _LCore *LCore;

Description

A pointer to an L-Edit standard cell place-and-route core, whose contents can only be accessed or
modified through UPI functions. A core is generated by the standard cell place and route utility.

See Also

“Core Functions” (page 1511)

L-Edit 14 User Guide Section 4 1551


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCursorType

LCursorType

typedef enum {
LSnapping,
LSmooth
} LCursorType;

Description

Lists the cursor’s (mouse pointer’s) modes of movement: bound to the mouse snap grid points
(“snapping”) or unconstrained (“smooth”).

See Also

“LGrid_v10_00” (page 1585),

L-Edit 14 User Guide Section 4 1552


Chapter 35: UPI Functions Reference Data Types and Typedefs
LCurve

LCurve

typdef struct
{
int max_segment_per_curve;
long max_length_of_segment;
int display_as_approx;
} LCurve;

Description

Members

max_segment_per_curve The maximum number of line segments that will be used to replace a
curve.
max_length_of_segment The maximum length of any line segment used in replacing a curve.
display_as_approx (Currently this is always be set to true, so that curveswill be
displayed, saved and exported as a series of segments rather than as
smooth curves.)

Version

Available in L-Edit 8.4 and later versions.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LPolygon_StraightenAllCurves” (page 1349), “LFile_GetGridEx840” (page 1130),


“LFile_SetCurveSetup” (page 1138)

L-Edit 14 User Guide Section 4 1553


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerAreaOperation

LDerivedLayerAreaOperation

typedef enum
{
LDOAT_Range,
LDOAT_EQ;
}
LAreaCheckType;

typedef enum
{
LDOUT_LocatorUnits,
LDOUT_TechnologyUnits,
}
LAreaUnitType;

typedef struct _LDerivedLayerAreaOperation


{
char *layer1;
int not_flag;
double n1;
double n2;
double area;
LAreaCheckType area_check_type;
LAreaUnitType area_unit_type;
}
LDerivedLayerAreaOperation;

Description

Used to get and set the parameters of a layer generated using area operations.

Parameter Definition Values

layer1 Name of the existing layer from which The source layer must
the new layer will be created (derived). precede the derived layer in
the layer list.
not_flag When set, the NOT of the 0 = area operation
relation is used, so polygons with area 1 = NOT area operation
outsidethe specified range are flagged.
n1, n2 Minimum and maximum values n1, n2 ≥ 0
(exclusive) of the area range. Valid only
when area_check_type is equal to
LDOAT_Range.

area Exact area of selected polygons when area ≥ 0


area_check_type is equal to
LDOAT_EQ.

area_check_type Indicates whether the derived layer area Possible values are:
operation is range or equality. LDOAT_Range
LDOAT_EQ

area_unit_type Indicates whether the derived layer area is Possible values are:
using locator units or current technology LDOUT_LocatorUnits
units. LDOUT_TechnologyUnits

L-Edit 14 User Guide Section 4 1554


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerAreaOperation

See Also

“LDerivedLayerParam” (page 1558), “LDerivedLayerBoolOperation” (page 1556),


“LDerivedLayerDensityOperation” (page 1557), “LDerivedLayerSelectOperation” (page 1561)

L-Edit 14 User Guide Section 4 1555


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerBoolOperation

LDerivedLayerBoolOperation

typedef struct _LDerivedLayerBoolOperation


{
char *src_layer1;
char *src_layer2;
char *src_layer3;
int layer1_not_op;
long layer1_grow_amount;
int layer2_not_op;
long layer2_grow_amount;
int layer3_not_op;
long layer3_grow_amount;
int layer1_bool_layer2;
int layer2_bool_layer3;
}
LDerivedLayerBoolOperation;

Description

Used to get and set the parameters of a Boolean generated layer.

Parameter Definition Values

src_layer1, Names of existing layers from which the All source layer names must
src_layer2, new layer will be created (derived). precede the derived layer in
src_layer3 the layer list.
layer1_not_op, When set, the complement of the 0 = source layer
layer2_not_op, indicated source layer is used. 1 = complement of source
layer3_not_op layer (NOT)
layer1_grow_amount, The amount, in locator units, by which Integer values between
layer2_grow_amount, objects on the indicated source layer are −WORLD_MAX and
layer3_grow_amount grown or shrunk on the derived layer. +WORLD_MAX, inclusive.
layer1_bool_layer2, Defines the boolean operation (AND or 1 = AND
layer2_bool_layer3 OR) applied to the indicated pair of 0 = OR
source layers.

See Also

“LDerivedLayerParamEx830” (page 1559), “LDerivedLayerAreaOperation” (page 1554),


“LDerivedLayerDensityOperation” (page 1557), “LDerivedLayerSelectOperation” (page 1561)

L-Edit 14 User Guide Section 4 1556


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerDensityOperation

LDerivedLayerDensityOperation

typedef struct _LDerivedLayerDensityOperation


{
char *layer1;
char *layer2;
int not_flag;
double d1;
double d2;
}
LDerivedLayerDensityOperation;

Description

Used to get and set the parameters of a density generated layer. Parameters include:

Parameter Definition Values

layer1, layer2 Names of existing layers from which the All source layer names must
new layer will be created (derived). The precede the derived layer in
density of layer2 is checked with respect the layer list.
to layer1.
not_flag When set, indicates a not density 0 = density operation
operation in which the NOT of the 1 = NOT density operation
density relation is applied.
d1, d2 Minimum and maximum values Between 0 and 100 percent
(exclusive) of the density range. (inclusive), where d1 ≤ d2.

Version

Available in L-Edit 8.4 and later versions.

See Also

“LLayer_GetDerivedParametersEx830” (page 1435),


“LLayer_SetDerivedParametersEx830” (page 1437)

L-Edit 14 User Guide Section 4 1557


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerParam

LDerivedLayerParam

typedef struct _LDerivedLayerParam {


int enable_evaluation; /*if 0 evaluation disabled else enabled*/
char *name; /*Name of the derived layer*/
char *src_layer1; /*Name of the first source layer*/
char *src_layer2; /*Name of the second source layer*/
char *src_layer3; /*Name of the third source layer*/
int layer1_not_op; /*If NOT operator enabled for 1st source layer*/
long layer1_grow_amount; /*grow amount for first source layer*/
int layer2_not_op; /*If NOT operator enabled for 2nd source layer*/
long layer2_grow_amount; /*grow amount for second source layer*/
int layer3_not_op; /*If NOT operator is enabled for layer 3*/
long layer3_grow_amount; /*grow amount for third source layer*/
int layer1_bool_layer2; /*1=> AND, 0=> OR of 1st &2nd source layer*/
int layer2_bool_layer3; /*1=> AND, 0=> OR of 1st &3rd source layer*/
} LDerivedLayerParam;

Description

Used to get and set the parameters of a generated layer.

Note: Note that this function is superseded by “LDerivedLayerParamEx830” (page 1559).

L-Edit 14 User Guide Section 4 1558


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerParamEx830

LDerivedLayerParamEx830

typedef enum {
LDOT_Bool,
LDOT_Area,
LDOT_Select,
LDOT_Density
} LDerivationType;

typedef union _LDerivedLayerOperation {


LDerivedLayerBoolOperation boolean;
LDerivedLayerSelectOperation select;
LDerivedLayerAreaOperation area;
LDerivedLayerDensityOperation density;
} LDerivedLayerOperation;

typedef struct _LDerivedLayerParamEx830 {


char *name;
int enable_evaluation;
LDerivationType derivation_type;
LDerivedLayerOperation operation;
} LDerivedLayerParamEx830;

Description

LDerivedLayerParamEx830 associates the specified layer with derivation parameters for one of four
derived layer types: Boolean, Select, Area, or Density. Its member derivation_type of type
LDerivationType indicates the derivation type of the derived layer, and its member operation of type
LDerivedLayerOperation points to the parameters.

Parameter Definition Values

name Name of the layer for which derivation Any valid layer name.
parameters are defined..
enable_evaluation Flag to enable derivation on the specified 0 = No derivation.
layer. When this flag is not set, the layer 1 = Derivation enabled.
is not considered derived.
derivation_type Indicates the type of derivation for which Possible values are:
parameters are set. There are four LDOT_Bool
possible derivation types: Boolean, Area, LDOT_Area
Select, and Density. LDOT_Select
LDOT_Density

operation Pointer to derivation parameters


corresponding to the type specified by
derivation_type.

Note: This function supersedes “LDerivedLayerParam” (page 1558). Also,


LDerivedLayerParamEx00 can be used interchangeably with
LDerivedLayerParamEx830.

L-Edit 14 User Guide Section 4 1559


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerParamEx830

Version

Available in L-Edit 8.3 and later versions.

See Also

“LDerivedLayerAreaOperation” (page 1554), “LDerivedLayerBoolOperation” (page 1556),


“LDerivedLayerDensityOperation” (page 1557), “LDerivedLayerSelectOperation” (page 1561),
“LLayer_GetDerivedParametersEx830” (page 1435),
“LLayer_SetDerivedParametersEx830” (page 1437)

L-Edit 14 User Guide Section 4 1560


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerSelectOperation

LDerivedLayerSelectOperation

typedef enum {
LDOST_Inside,
LDOST_Outside,
LDOST_Hole,
LDOST_Cut,
LDOST_Touch,
LDOST_Enclose,
LDOST_Overlap,
LDOST_Vertex,
LDOST_Density
} LSelectOperationRelationType;

typdef struct _LDerivedLayerSelectOperation {


char *layer1;
char *layer2;
int not_flag;
int range_enabled_flag;
int n1;
int n2;
double d1;
double d2;
LSelectOperationRelationType relation_type;
} LDerivedLayerSelectOperation;

Description

LDerivedLayerSelectOperation is used to get and set the parameters of a layer generated using select
operations. Its member relation_type of type LSelectOperationRelationType specifies the select
relationship applied.

Parameter Definition Values

layer1, layer2 Existing layers from which the new layer Both layer names must
will be created (derived). precede the derived layer in
the layer list.
not_flag When set, indicates a not select 0 = select operation
operation in which the NOT of the select 1 = NOT select operation
relation is applied.
range_enabled_flag When set, indicates that the select 0 = range disabled
relationship will be defined by a range of 1 = range enabled
vertices. This flag is valid only if
relation_type is equal to LDOST_Vertex.

n1, n2 The minimum and maximum values Integers greater than or


(exclusive) of the vertex count used for equal to 0, where n1 ≤ n2.
vertex selection operations. Valid only if
range_enabled_flag is equal to 1 and
relation_type is equal to LDOST_Vertex.

L-Edit 14 User Guide Section 4 1561


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDerivedLayerSelectOperation

Parameter Definition Values

d1, d2 The minimum and maximum values Between 0 and 100 percent
(exclusive) of the density range used for (inclusive), where d1 ≤ d2.
density select operations. Valid only if
relation_type is equal to
LDOST_Density.

relation_type Specifies the type of select relationship Possible values are:


used for derivation. LDOST_Inside
LDOST_Outside
LDOST_Hole
LDOST_Cut
LDOST_Touch
LDOST_Enclose
LDOST_Overlap
LDOST_Vertext
LDOST_Density

Note: Note that this data type is superseded in L-Edit V10 and later.

See Also

“LDerivedLayerParamEx830” (page 1559), “LDerivedLayerAreaOperation” (page 1554),


“LDerivedLayerBoolOperation” (page 1556), “LDerivedLayerDensityOperation” (page 1557)

L-Edit 14 User Guide Section 4 1562


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDesignRuleFlags

LDesignRuleFlags

typedef struct
{
int FlagSelfIntersection,
LAmbiguousFillType PolygonsWithAmbiguousFills,
int FlagIgnoredObjects
int FlagOffGridObjects
double GridSize
int UseLocatorUnits
}
LDesignRuleFlags;

Description

FlagSelfIntersection Ignore polygons with ambiguous fills.


PolygonsWithAmbiguousFil Flag polygons with ambiguous fills, fix polygons with ambiguous
ls fills, or ignore them.
FlagIgnoredObjects Flag objects not checked by DRC.
FlagOffGridObjects Flags off-grid objects.
GridSize Used to flag off-grid objects.
UselocatorUnits Indicates whether GridSize is in technology units or locator units.

See Also

“LAmbiguousFillType” (page 1542), “LFile_GetDesignRuleFlags” (page 1148),


“LFile_SetDesignRuleFlags” (page 1149)

L-Edit 14 User Guide Section 4 1563


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDesignRuleParam

LDesignRuleParam

typedef struct _LDesignRuleParam {


int enable; /*0=>disabled, 1=>enabled*/
char *name; /*Name of the design rule*/
LDrcRuleType rule_type; /*type of a design rule*/
int ignore_coincidences; /*0=>false, 1=>true*/
int ignore_intersections; /*0=> false, 1=>true*/
int ignore_enclosures; /*0=> false, 1=>true*/
int ignore_45_acute_angles; /*0=> false, 1=>true*/
char *layer1; /*Name of the first layer involved in in design rule*/
char *layer2; /*Name of the second layer involved in design rule*/
long distance; /*Distance value associated with a rule*/
int use_internal_units; /*0=> false, 1=>true :False=> use LAMBDA*/
} LDesignRuleParam;

Description

This structure is used to get and set parameters of a design rule.

See Also

“LDrcRule_GetParameters” (page 1485), “LDrcRule_SetParameters” (page 1486),


“LDrcRule_Add” (page 1478)

L-Edit 14 User Guide Section 4 1564


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDialogItem

LDialogItem

typedef struct {
char prompt[40];
char value[21];
} LDialogItem;

Description

Defines the prompt and value fields associated with a multiple-line input dialog. This structure is used
by LDialog_MultiLineInputBox.

See Also

“Dialog Functions” (page 984)

L-Edit 14 User Guide Section 4 1565


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDisplayUnitInfo

LDisplayUnitInfo

typedef struct
{
char szDispUnitName[128];
double dScaleFactor;
int nEditDecimalDigits;
int nMouseGridDecimalDigits;
} LDisplayUnitInfo;

Description

This struct is used to control the display of L-Edit internal units in the locator bar.

szDispUnitName Name of display unit


dScaleFactor Internal units divided by dScaleFactor equals Display units.
nEditDecimalDigits Number of decimal digits to use when formatting string for editing.
nMouseGridDecimalDigits Number of decimal digits to use when formatting string for display of
mouse position.

Version

This data type is available in V10 and later.

See Also

“LFile_GetDisplayUnitInfo” (page 1156)

L-Edit 14 User Guide Section 4 1566


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDrcFlags

LDrcFlags

typedef struct
{
LBoolean bFlagAcuteAngles;
LBoolean bFlagAllAngleEdges;
LBoolean bFlagOffGridObjects;
} LDrcFlags;

Description

This data type is used to control the DRC tests for acute angle polygons, all-angle edges, and off-grid
vertices.

Version

This data type is available in V10 and later.

See Also

“LFile_GetDrcFlags” (page 1492), “LFile_SetDrcFlags” (page 1493)

L-Edit 14 User Guide Section 4 1567


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDrcRule

LDrcRule

typedef struct _LDrcRule *LDrcRule;

Description

A pointer to an L-Edit design rule whose contents can only be accessed or modified through UPI
functions.

See Also

“LDrcRule_Find” (page 1480), “LDrcRule_GetList” (page 1481)

L-Edit 14 User Guide Section 4 1568


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDrcRuleType

LDrcRuleType

typedef enum {
LMIN_WIDTH,
LEXACT_WIDTH,
LOVERLAP,
LEXTENSION,
LNOT_EXISTS,
LSPACING,
LSURROUND,
LDENSITY
} LDrcRuleType;

Description

LDrcRuleType is an enumerated datatype used to specify the type of a design rule.

See Also

“LDesignRuleParam” (page 1564)

L-Edit 14 User Guide Section 4 1569


Chapter 35: UPI Functions Reference Data Types and Typedefs
LDrcStatus

LDrcStatus

typedef enum
{
LDrcStatus_Needed,
LDrcStatus_Passed,
LDrcStatus_Failed
} LDrcStatus;

Description

This data type is used to report the DRC status of a cell.

Version

This data type is available in V10 and later.

See Also

“LCell_GetDRCStatus” (page 1497)

L-Edit 14 User Guide Section 4 1570


Chapter 35: UPI Functions Reference Data Types and Typedefs
LEntity

LEntity

typedef struct _LEntity *LEntity;

Description

A pointer to an L-Edit entity whose contents can only be accessed or modified through UPI functions.

Version

Available in L-Edit 8.4 and later versions.

See Also

“Entity Functions” (page 1244).

L-Edit 14 User Guide Section 4 1571


Chapter 35: UPI Functions Reference Data Types and Typedefs
LEnvironment

LEnvironment

typedef struct _LEnvironment {


short MenuBackgroundColor;
short MenuForegroundColor;
short MenuSelectColor;
short AlertBackgroundColor;
long DefaultPortTextSize;
int DropDownMenus;
int ActivePushRubberbanding;
int AutoPanning;
int StatusBar;
int HideInsides;
short HorizontalPixels;
short VerticalPixels;
} LEnvironment;

Description

Used to get and set the environment of a design file. All colors take values between 0 and 15. The int
quantities take values of either 0 or 1, equivalent to the off and on states of the corresponding switches
in the Setup Application dialog.

Note: The color parameters are not applicable to L-Edit for Windows.

See Also

“Application Parameters” on page 60.

L-Edit 14 User Guide Section 4 1572


Chapter 35: UPI Functions Reference Data Types and Typedefs
LExtractOptions

LExtractOptions

typedef struct _LExtractOptions


{
char szExtDefnFile[256];
char szExtOutFile[256];
double dExtractBinSize;
int iWriteNodeNames;
int iWriteDeviceCoord;
int iWriteShortedDevices;
int iWriteParasiticCap;
double dParasiticCutoff;
int iWriteNodesAs;
int iWriteSciNotation;
int iWriteVerboseSPICE;
char *szExtIncludeStmt;
int iLabelAllDevices;
LLayer oDeviceLabelLayer;
int iSubCktRecognition;
LLayer oSubCktRecogLayer;
int iUseSubCktNetlistFmt;
int iFlagImproperOverlaps;
LLayer oIgnoreConnPortLayer;
char szIgnoreConnPort[256];
char szIgnoreCrossPort[256];
long lMaxIncludeStmtLen;
} LExtractOptions;

Description

Used to get and set the extract options for a cell. The int quantities take values of either 0 or 1,
equivalent to the off and on states of the corresponding switches in the Extract dialog. All options
available in the extract dialog can be set with the above structure.

Note: Note that this data type is superseded in L-Edit V10 and later.

L-Edit 14 User Guide Section 4 1573


Chapter 35: UPI Functions Reference Data Types and Typedefs
LExtractOptions

General Options

szExtDefnFile Character string of the extract definition file. (256 characters max).
szExtOutFile Character string of the extract SPICE output file. (256 characters
max).
dExtractBinSize Bin size in locator units.

Output Options

iWriteNodeNames Write node names in comments. (0 - False, Otherwise True).


iWriteDeviceCoord Write device coordinates in comments. (0 - False, Otherwise True).
iWriteShortedDevices Write shorted devices in comments. (0 - False, Otherwise True).
iWriteParasiticCap Write parasitic capacitances. (0 - False, Otherwise True).
dParasiticCutoff Cutoff value for parasitic capacitors. (in Femtofarads).
iWriteNodesAs Write nodes as (integers or names). (0 - Integers, Otherwise Names).
iWriteSciNotation Write values in scientific notation. (0 - False, Otherwise True).
iWriteVerboseSPICE Write R, L, C with verbose style (R=, L=, C=). (0 - False, Otherwise
True).
szExtIncludeStmt SPICE include statement.
iLabelAllDevices Create ports for all devices. (0 - False, Otherwise True).
oDeviceLabelLayer Place device labels on this layer.

Subcircuit Options

iSubCktRecognition Recognize subcircuit instances. (0 - False, Otherwise True).


oSubCktRecogLayer Subcircuit recognition layer.
iUseSubCktNetlistFmt Write netlist as a subcircuit. (0 - False, Otherwise True).
iFlagImproperOverlaps Flag improper overlaps. (0 - False, Otherwise True).
oIgnoreConnPortLayer Ignore connection ports on this layer.
szIgnoreConnPort Ignore connection ports with this name.
szIgnoreCrossPort Ignore cross ports with this name.

Miscellaneous

lMaxIncludeStmtLen Length of the .include statement string.

L-Edit 14 User Guide Section 4 1574


Chapter 35: UPI Functions Reference Data Types and Typedefs
LExtractOptionsEx840

LExtractOptionsEx840

typedef struct _LExtractOptionsEx840


{
// General Options
char szExtDefnFile[256];
char szExtOutFile[256];
double dExtractBinSize;
LBoolean bLabelAllDevices;
char szDeviceLabelLayer[256];

// Output Options
LBoolean bWriteNodeNames;
LBoolean bWriteDeviceCoord;
LBoolean bWriteShortedDevices;
LBoolean bWriteCapResWarnings;
LBoolean bWriteParasiticCap;
double dParasiticCutoff;
LBoolean bWriteNodesAsNames;
LBoolean bWriteSciNotation;
LBoolean bWriteVerboseSPICE;
LBoolean bWriteSubCktDefs;
LBoolean bWriteENDStatement;
char* pszExtIncludeStmt;

// Subcircuit Options
LBoolean bSuCktRecognition;
char szSubCktRecogLayer[256];
LBoolean bUseSubCktNetlistFmt;
LBoolean bFlagImproperOverlaps;
char szIgnoreConnPortLayer[256];
char szIgnoreConnPort[256];
char szIgnoreCrossPort[256];

// Miscellaneous
long nMaxIncludeStmtLen;
} LExtractOptionsEx840

Description

Used to get and set the Extract options for a cell. All options available in the Extract dialog can be set
with the above structure.

Note: In order to properly retrieve the .include statement, the data member
pszExtIncludeStmt of this structure must be dynamically allocated to a sufficient
size. The data member nMaxIncludeStmtLen must be set to the size of the allocated
string pszExtIncludeStmt. Failure to do so could result in a general protection fault.
See sample code in the descriptions of “LExtract_RunEx840” (page 1504),
“LExtract_GetOptionsEx840” (page 1507), and “LExtract_SetOptionsEx840”
(page 1509).

L-Edit 14 User Guide Section 4 1575


Chapter 35: UPI Functions Reference Data Types and Typedefs
LExtractOptionsEx840

General Options

szExtDefnFile Character string of the extract definition file. (256 characters max).
szExtOutFile Character string of the extract SPICE output file. (256 characters
max).
dExtractBinSize Bin size in locator units.
szDeviceLabelLayer Character string identifying the layer on which to place device labels
(256 characters max). Leave blank for the recognition layer.

Output Options

bWriteNodeNames Write node names in comments.


bWriteDeviceCoord Write device coordinates in comments.
bWriteShortedDevices Write shorted devices in comments.
bWriteCapResWarnings Write layer capacitance and resistance warnings.
bWriteParasiticCap Write parasitic capacitances.
dParasiticCutoff Cutoff value for parasitic capacitors (in Femtofarads).
bWriteNodesAsNames Write nodes as names. When false, writes nodes as integers.
bWriteSciNotation Write values in scientific notation.
bWriteVerboseSPICE Write R, L, C with verbose style (R=, L=, C=).
bWriteSubCktDefs Write empty subcircuit definitions.
bWriteENDStatement Write the .END statement.
szExtIncludeStmt Pointer to a SPICE .include statement.

Subcircuit Options

bSubCktRecognition Recognize subcircuit instances.


szSubCktRecogLayer Character string identifying the subcircuit recognition layer.
bUseSubCktNetlistFmt Write netlist as a subcircuit.
bFlagImproperOverlaps Flag improper overlaps.
szIgnoreConnPortLayer Ignore connection ports on this layer, specified by a character string.
szIgnoreConnPort Ignore connection ports with this name, specified by a character
string.
szIgnoreCrossPort Ignore cross ports with this name, specified by a character string.

Miscellaneous

nMaxIncludeStmtLen Length of the .include statement string.

L-Edit 14 User Guide Section 4 1576


Chapter 35: UPI Functions Reference Data Types and Typedefs
LExtractOptionsEx840

Version

Available in L-Edit 8.4 and later versions.

See Also

“LExtract_GetOptionsEx840” (page 1507), “LExtract_SetOptionsEx840” (page 1509),


“LExtract_RunEx840” (page 1504)

L-Edit 14 User Guide Section 4 1577


Chapter 35: UPI Functions Reference Data Types and Typedefs
LFile

LFile

typedef struct _LFile *LFile;

Description

A pointer to an L-Edit layout file whose contents can only be accessed or modified through UPI
functions.

See Also

“File Functions” (page 1100)

L-Edit 14 User Guide Section 4 1578


Chapter 35: UPI Functions Reference Data Types and Typedefs
LFileType

LFileType

typedef enum {
LTdbFile,
LCifFile,
LGdsFile,
LV6TdbFile
} LFileType;

Description

Lists the design formats supported by L-Edit: Tanner Database (TDB) format, Caltech Intermediate
Form (CIF), and GDS II (stream) format. CIF and GDS II are standard machine-readable formats for
representing IC layouts. Also, LV6TdbFile is necessary in the special case of opening L-Edit V6 or
previous TDB files.

See Also

“LFile_Open” (page 1103), “LFile_SaveAs” (page 1106)

L-Edit 14 User Guide Section 4 1579


Chapter 35: UPI Functions Reference Data Types and Typedefs
LGDSParam

LGDSParam

typedef struct {
int upcase_cell_name;
short circle_to_polygon_sides; (OBSOLETE)
int use_default_units;
} LGDSParam;

Description

Note: LGDSParam supersedes LFile_SetGDSParameters and LFile_SetGDSParameters for


GDS export options.

LGDSParam is used to get and set the GDSII setup of a file. If upcase_cell_name is 1, L-Edit will write
out all cells with uppercase names. Circle are written out as n-sided polygons with its vertices snapped
to the Manufacturing grid set for the design.

A log file can be generated when LFile_SaveAs is used to export in GDS format if that option is set in
the File > GDS Export dialog,

Version

In L-Edit version 10 and earlier, the structure for LGDSParam had 3 members, upcase_cell name to
write out cells with uppercase names, circle_to_polygon_sides to write circles as n-sided polygons
and use_default_units to use default GDSII units.

In L-Edit version 10 and later, the structure member circle_to_polygon_sides is no longer supported.
Instead, during GDSII export, a circles is approximated as an all-angle polygon with its vertices
snapped to the Manufacturing grid set for the design.

See Also

“Exporting Files” on page 153, “LFile_GetGDSParameters” (page 1475),


“LFile_SetGDSParameters” (page 1476)

L-Edit 14 User Guide Section 4 1580


Chapter 35: UPI Functions Reference Data Types and Typedefs
LGeomType

LGeomType

typedef enum {
LOrthogonal,
LFortyFive,
LAllAngle,
LCurved,
LNonGeometric,
LManhattan = LOrthogonal,
LBoston = LFortyFive,
} LGeomType;

Description

An enumerated datatype indicating the geometry type of an L-Edit object.

See Also

“LObject_GetGeometry” (page 1279)

L-Edit 14 User Guide Section 4 1581


Chapter 35: UPI Functions Reference Data Types and Typedefs
LGrid

LGrid

typedef struct {
long displayed_grid_size;
long min_grid_pixels;
long mouse_snap_grid_size;
LCursorType cursor_type;
long locator_scaling;
} LGrid;

Description

Used to get and set the grid parameters of the design file. The fields appear as corresponding items in
the Setup > Design—Grid.

Note: Note that this function is superseded by “LGridEx840” (page 1583) and
“LGrid_v10_00” (page 1585).

L-Edit 14 User Guide Section 4 1582


Chapter 35: UPI Functions Reference Data Types and Typedefs
LGridEx840

LGridEx840

typedef struct {
long displayed_grid_size;
long min_grid_pixels;
long displayed_majorgrid_size;
long min_majorgrid_pixels;
long mouse_snap_grid_size;
LCursorType cursor_type;
long locator_scaling;
} LGridEx840;

Description

Used to get and set the grid parameters of the design file, which appear as corresponding items in
Setup > Design—Grid.

Members

The valid range for numerical values is 1 ≤ value ≤ WORLD_MAX.

displayed_grid_size The absolute spacing, in Internal Units, of the minor grid display.
min_grid_pixels The number of screen pixels per grid square side below which L-Edit
hides the minor grid.
displayed_majorgrid_size The absolute spacing, in Internal Units, of the major grid display.
min_majorgrid_pixels The number of screen pixels per grid square side below which L-Edit
hides the major grid.
mouse_snap_grid_size Absolute spacing of the mouse snap grid. The value entered in this
field is the length, in Internal Units, of a grid square side.
cursor_type Specifies behavior of the mouse pointer. Possible values are:
ƒ LSnapping—causes the pointer to snap to points on the mouse
snap grid.
ƒ LSmooth—allows the pointer to be unconstrained.

locator_scaling The number of Internal Units equivalent to one Locator Unit.

Examples

/* Get the current grid setting for MyFile */


LGridEx840 Grid;
LFile_GetGridEx840(MyFile, &Grid);

/* Specify new grid settings */


Grid.min_majorgrid_pixels = 10*Grid.min_grid_pixels;
Grid.displayed_majorgrid_size = 10*Grid.displayed_grid_size;

/* Apply the new grid structure to MyFile */


LFile_SetGridEx840(MyFile, &Grid);

L-Edit 14 User Guide Section 4 1583


Chapter 35: UPI Functions Reference Data Types and Typedefs
LGridEx840

Version

Available in L-Edit 8.4 and later versions.

Note: Note that this data type is superseded by “LGrid_v10_00” (page 1585).

See Also

“LFile_GetGridEx840” (page 1130), “LFile_SetGridEx840” (page 1135), “LCursorType” (page 1552)

L-Edit 14 User Guide Section 4 1584


Chapter 35: UPI Functions Reference Data Types and Typedefs
LGrid_v10_00

LGrid_v10_00

Description

typedef struct
{
long displayed_grid_size; /* In internal units */
long min_grid_pixels;
long displayed_majorgrid_size; /* In internal units */
long min_majorgrid_pixels;
long mouse_snap_grid_size; /* In internal units */
LCursorType cursor_type;
long locator_scaling;
long manufacturing_grid_size; /* In internal units */
LBoolean display_curves_using_manufacturing_grid;
} LGrid_v10_00;

Description

Used to get and set the grid parameters of the design file, which appear as corresponding items in
Setup > Design—Grid.

Members

The valid range for numerical values is 1 ≤ value ≤ WORLD_MAX.

displayed_grid_size The absolute spacing, in Internal Units, of the minor grid display.
min_grid_pixels The number of screen pixels per grid square side below which L-Edit
hides the minor grid.
displayed_majorgrid_size The absolute spacing, in Internal Units, of the major grid display.
min_majorgrid_pixels The number of screen pixels per grid square side below which L-Edit
hides the major grid.
mouse_snap_grid_size Absolute spacing of the mouse snap grid. The value entered in this
field is the length, in Internal Units, of a grid square side.
cursor_type Specifies behavior of the mouse pointer. Possible values are:
ƒ LSnapping—causes the pointer to snap to points on the mouse
snap grid.
ƒ LSmooth—allows the pointer to be unconstrained.

locator_scaling The number of Internal Units equivalent to one Locator Unit.


manufacturing_grid_size The size of the manufacturing grid, in Internal Units
display_curves_using_ma If true, polygonize all curve for rendering using the manufacturing
nufacturing_grid grid. This previews the effect of streaming these objects to GDSII.

L-Edit 14 User Guide Section 4 1585


Chapter 35: UPI Functions Reference Data Types and Typedefs
LGrid_v10_00

Examples

/* Get the current grid setting for MyFile */


LGrid_v10_00 Grid;
LFile_GetGrid_V10_00( MyFile, &Grid );

/* Specify new grid settings */


Grid.min_majorgrid_pixels = 10 * Grid.min_grid_pixels;
Grid.displayed_majorgrid_size = 10 * Grid.displayed_grid_size;

/* Apply the new grid structure to MyFile */


LFile_SetGrid_V10_00(MyFile, &Grid);

Version

Available in L-Edit 10 and later versions.

See Also

“LFile_GetGrid_v10_00” (page 1131), “LFile_SetGrid_v10_00” (page 1132), “LCursorType” (page


1552)

L-Edit 14 User Guide Section 4 1586


Chapter 35: UPI Functions Reference Data Types and Typedefs
LInstance

LInstance

typedef struct _LInstance *LInstance;

Description

A pointer to an L-Edit instance whose contents can only be accessed or modified through UPI functions.

See Also

“Instance Functions” (page 1223)

L-Edit 14 User Guide Section 4 1587


Chapter 35: UPI Functions Reference Data Types and Typedefs
LJoinType

LJoinType

typedef enum {
LJoinMiter,
LJoinRound,
LJoinBevel,
LJoinLayout
} LJoinType;

Description

Defines the join style of a wire.

See Also

“LWire_SetJoinType” (page 1340), “LWire_GetJoinType” (page 1334)

L-Edit 14 User Guide Section 4 1588


Chapter 35: UPI Functions Reference Data Types and Typedefs
LLayer

LLayer

typedef struct _LLayer *LLayer;

Description

A pointer to an L-Edit layer whose contents can only be accessed or modified through UPI functions.

See Also

“Layer Functions” (page 1400)

L-Edit 14 User Guide Section 4 1589


Chapter 35: UPI Functions Reference Data Types and Typedefs
LLayerParam

LLayerParam

typedef struct {
char CIFName [7];
short GDSNumber;
double cap;
double rho;
int lock;
LLayerViewStatus viewStatus;
LWireParam wireParam;
} LLayerParam;

Description

A structure where layer information can be stored. It specifies the CIF name, GDS number, capacitance,
and resistance of a layer.

Return Values

When lock is zero, a layer is locked.

Parameters

viewStatus Indicates whether a layer is visible or hidden.


wireParam Specifies the properties of a wire that can be drawn using this layer.

Note: Note that this data type is superseded in L-Edit V10 and later.

See Also

“LSpecialLayer” (page 1619), “LWireParam” (page 1633).

L-Edit 14 User Guide Section 4 1590


Chapter 35: UPI Functions Reference Data Types and Typedefs
LLayerParamEx830

LLayerParamEx830

typedef struct {
char CIFName[7];
short GDSNumber;
short GDSDataType;
double AreaCapacitance;
double FringeCapacitance;
double Resistivity;
LBoolean Locked;
LBoolean Hidden;
LWireParam WireParam;
} LLayerParamEx830;

Description

LLayerParamEx830 is an extended layer parameter structure that stores the parameters of a layer such
as CIF name, GDSII layer number, GDSII layer data type, area and fringe capacitance, resistivity,
default wire parameters, and lock and hidden states.

Members

cifName CIF layer name. It can be 6 characters or less.


GDSNumber GDSII layer number. -32,768 <= GDSNumber <= 32,767. The GDSII
standard requires 0 <= GDSNumber <= 255.
GDSDataType GDSII data type. -32,768 <= GDSDataType <= 32,767. The GDSII
standard requires 0 <= GDSNumber <= 255. A value of -1 indicates an
unassigned GDSII data type.
AreaCapacitance Area capacitance in aF/Sq. micron from the layer to the substrate.
0 <= AreaCapacitance or AreaCapacitance = -1. A value of
-1 indicates an unassigned area capacitance.
FringeCapacitance Fringe capacitance in fF/micron from the layer to the substrate.
0 <= FringeCapacitance or FringeCapacitance = -1. A
value of -1 indicates an unassigned fringe capacitance.
Resistivity Sheet resistance of the layer in ohms/square. 0 <= Resistivity.
Locked Indicates whether the layer is locked.
Hidden Indicates whether the layer is hidden.
WireParam Default wire parameters of the layer.

Example

LFile pFile = LFile_GetVisible();


if(Assigned(pFile))
{
if(LLayer_New(pFile, LLayer_GetList(pFile), "Metal1") == LStatusOK)
{
LLayer pLayer = LLayer_Find(pFile, "Metal1");
if(Assigned(pLayer))
{

L-Edit 14 User Guide Section 4 1591


Chapter 35: UPI Functions Reference Data Types and Typedefs
LLayerParamEx830

LLayerParamEx830 LayerParameters;
strcpy(LayerParameters.CIFName, "CMF");
LayerParameters.GDSNumber =49;
LayerParameters.GDSDataType = -1;
LayerParameters.AreaCapacitance = 36;
LayerParameters.FringeCapacitance = 0.086;
LayerParameters.Resistivity = 0.08;
LayerParameters.Locked = LFALSE;
LayerParameters.Hidden = LFALSE;
LayerParameters.WireParam.defaultWireWidth =
LFile_LocUtoIntU(pFile, 1.5);
LayerParameters.WireParam.defaultWireMiterAngle = 90;
LayerParameters.WireParam.capType = LCapExtend;
LayerParameters.WireParam.joinType = LJoinLayout;

if(LLayer_SetParametersEx830(pLayer, &LayerParameters)
== LStatusOK)
{
// More Processing
// ...
}
}
}
}

Version

Available in L-Edit 8.2 and later versions. This struct is also available as LLayerParam_Ex00

See Also

“Layer Functions” (page 1400), “LLayer_GetDerivedParametersEx830” (page 1435),


“LLayer_SetDerivedParametersEx830” (page 1437), “LBoolean” (page 1544),
“LWireParam” (page 1633), “Layer Setup” on page 87.

L-Edit 14 User Guide Section 4 1592


Chapter 35: UPI Functions Reference Data Types and Typedefs
LLayerViewStatus

LLayerViewStatus

typedef enum {
LHidden,
LVisible
} LLayerViewStatus;

Description

Used to make a layer visible or hidden.

See Also

“LLayerParam” (page 1590)

L-Edit 14 User Guide Section 4 1593


Chapter 35: UPI Functions Reference Data Types and Typedefs
LLen

LLen

typedef unsigned long LLen;

Description

The internal unit used for specifying the magnification ratio.

L-Edit 14 User Guide Section 4 1594


Chapter 35: UPI Functions Reference Data Types and Typedefs
LMagnification

LMagnification

typedef struct LMagnification {


LLen num;
LLen denom;
} LMagnification;

Description

Specifies the scaling of an object.

See Also

“LTransform_Ex99” (page 1627), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1595


Chapter 35: UPI Functions Reference Data Types and Typedefs
LMarker

LMarker

typedef unsigned int LMarker;

See Also

“LCell_AddMarker” (page 1214), “LCell_RemoveMarker” (page 1215),


“LCell_RemoveAllMarkers” (page 1216)

L-Edit 14 User Guide Section 4 1596


Chapter 35: UPI Functions Reference Data Types and Typedefs
LMarkerParam

LMarkerParam

typedef struct _LMarkerParam


{
int StructureSize; // Use sizeof(LMarkerParam) to assign value to
this member
int EdgeThickness; // In pixels. Default is 3.
int EdgeStyle; // PS_... values for Windows API for Pen GUI
objects. Default is 0 for solid.
int CircleThickness; // In pixels. Default is 3. 0 means don't show
the circle.
int CrosshairThickness; // In pixels. Default is 3. 0 means don't show
the crosshair.
} LMarkerParam;

Description

The parameters that control the appearance of an L-Edit marker.

See Also

“LCell_AddMarker” (page 1214), “LMarkerParam_V11” (page 1598)

L-Edit 14 User Guide Section 4 1597


Chapter 35: UPI Functions Reference Data Types and Typedefs
LMarkerParam_V11

LMarkerParam_V11

typedef struct _LMarkerParam_V11


{
int StructureSize; // Use sizeof(LMarkerParam) to assign value to
this member
int EdgeThickness; // In pixels. Default is 3.
int EdgeStyle; // PS_... values for Windows API for Pen GUI
objects.
Default is 0 for solid.
int CircleThickness;// In pixels. Default is 3. 0 means don't show
the circle.
int CrosshairThickness; // In pixels. Default is 3. 0 means don't
show the crosshair.
unsigned int EdgeColor;// This is the edge color. Windows COLORREF,
returned by RGB() macro.
LBooleanGlobal; // Toggled/removed by "universal" buttons. Used
for DRCEN, SDL, and Node Highlighting.
unsigned int FillColor;// This is the fill color. Windows COLORREF,
returned by RGB() macro.
unsigned short FillPattern[8]; // Fill pattern (make it all 0's for
no-fill or all 0xff's for solid fill).
LMarkerStyle Style;
} LMarkerParam_V11;

Description

Parameters that control the appearance of an L-Edit marker.

Use the following settings to control the EdgeStyle. To use EdgeStyle other than 0, the EdgeThickness
must be to set to 1.

ƒ 0 – Solid
ƒ 1 – Dash
ƒ 2 – Dot
ƒ 3 – Dash-Dot
ƒ 4 – Dash-Dot-Dot

Some commonly used color values for setting the EdgeColor:

ƒ Red – 0xFF0000
ƒ Green – 0x00FF00
ƒ Blue – 0x0000FF
ƒ Yellow – 0xFFFF00
ƒ Cyan – 0x00FFFF
ƒ Magenta – 0xFF00FF
ƒ Black – 0x000000

L-Edit 14 User Guide Section 4 1598


Chapter 35: UPI Functions Reference Data Types and Typedefs
LMarkerParam_V11

Example

Example for LCell_AddMarker:

LPoint parr[2];
LMarkerParam_V11 Marker;

parr[0].x = 0;
parr[0].y = 0;
parr[1].x = 1000;
parr[1].y = 0;

memset( &Marker, 0, sizeof(LMarkerParam_V11) );


Marker.StructureSize = sizeof (LMarkerParam_V11);
Marker.Global = LTRUE;
Marker.CircleThickness = 3;
Marker.EdgeColor = 0xFFFF00;
Marker.EdgeThickness = 1;
Marker.EdgeStyle = 1;

LCell_AddMarker (pCell, "", 2, LFALSE, parr, (LMarkerParam*)&Marker);

See Also

“LMarkerParam” (page 1597), “LCell_AddMarker” (page 1214), “LCell_RemoveMarker” (page


1215)

L-Edit 14 User Guide Section 4 1599


Chapter 35: UPI Functions Reference Data Types and Typedefs
LObject

LObject

typedef union _LObject *LObject;

Description

A pointer to an L-Edit object whose contents can only be accessed or modified through UPI functions.

See Also

“Object Functions” (page 1270)

L-Edit 14 User Guide Section 4 1600


Chapter 35: UPI Functions Reference Data Types and Typedefs
LOrientation

LOrientation

typedef long int LOrientation;


#define LNormalOrientation 0
#define LRotate0 0
#define LRotate90 90
#define LRotate180 180
#define LRotate270 270
#define LRotate0MirrorX -360
#define LRotate90MirrorX -90
#define LRotate180MirrorX -180
#define LRotate270MirrorX -270

Version

The LOrientation data type is made obsolete by the LOrientation_Ex99 data type.

Description

A rotation and/or mirror operation that may be applied to any L-Edit objects.

L-Edit 14 User Guide Section 4 1601


Chapter 35: UPI Functions Reference Data Types and Typedefs
LOrientation_Ex99

LOrientation_Ex99

typedef float LOrientation_Ex99;


#define LNormalOrientation 0
#define LRotate0 0
#define LRotate90 90
#define LRotate180 180
#define LRotate270 270
#define LRotate0MirrorX -360
#define LRotate90MirrorX -90
#define LRotate180MirrorX -180
#define LRotate270MirrorX -270

Description

A rotation and/or mirror operation that may be applied to any L-Edit objects. Rotation can be specified
as any real number.

See Also

“LTransform_Ex99” (page 1627).

L-Edit 14 User Guide Section 4 1602


Chapter 35: UPI Functions Reference Data Types and Typedefs
LOutlineStyle

LOutlineStyle

typedef enum _LOutlineStyle


{
osUnknown = -1,
osFirstOutlineStyle = 0,
osSolid = 0,
osDotted = 1,
osShort = 2,
osShortDot = 3,
osLongDot = 4,
osLong = 5,
osLongDotDot = 6,
osLongShortShort = 7,
osLongLongShort = 8,
osLastOutlineStyle = 8
}
LOutlineStyle;

#define NumberOfOutlineStyles (osLastOutlineStyle+1)

Description

This structure defines outline styles. You must use one of the nine predefined outline styles, above;
LOutlineStyle is not available to define new styles. The constant NumberofOutlineStyles represents
the total number of predefined outline styles.

See Also

“LRenderingAttribute” (page 1614), “LStipple” (page 1621),


“LLayer_GetRenderingAttribute” (page 1449), “LLayer_SetRenderingAttribute” (page 1450),
“LLayer_GetRenderingObjectName” (page 1451)

L-Edit 14 User Guide Section 4 1603


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPalette

LPalette

typedef LColor LPalette[16];

Description

Gets and sets the color palette of a layout file.

Note: Note that this data type is superseded in L-Edit V10 and later.

See Also

L-Edit 14 User Guide Section 4 1604


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPass

LPass

typedef struct _LPass *LPass;

Description

A pointer to a layer’s pass list, whose contents can only be accessed or modified through UPI functions.

See Also

“LPass_New” (page 1444), “LPass_GetList” (page 1445)

L-Edit 14 User Guide Section 4 1605


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPassMode

LPassMode

typedef unsigned char LStipple[8];


typedef enum {
LSet=16,
LClear=8
} LPassMode;

Description

LPassMode is used to specify the write mode of a pass (set or clear).

Note: Note that this data type is superseded in L-Edit V10 and later.

See Also

“LPassParam” (page 1607)

L-Edit 14 User Guide Section 4 1606


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPassParam

LPassParam

typedef struct _LPassParam {


unsigned char ColorIndex;
LPassMode WriteMode;
LStipple Stipple;
} LPassParam;

Description

Specifies the properties of a pass, including its color index, pass mode, and stipple pattern.

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LPassMode” (page 1606).

L-Edit 14 User Guide Section 4 1607


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPassType

LPassType

typedef enum {
LObjectPass,
LPortPass,
LTextPass
} LPassType;

Description

Specifies the type of a pass (object, port, or text).

Note: Note that this function is superseded in L-Edit V10 and later.

See Also

“LPass_GetList” (page 1445)

L-Edit 14 User Guide Section 4 1608


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPieParams

LPieParams

typedef struct {
LPoint Center;
LCoord Radius;
double StartAngle;
double StopAngle;
} LPieParams

Description

Specifies the properties of a pie object, including its center, radius, start angle, and stop angle. The valid
ranges for pie parameters are:

ƒ −WORLD_MAX ≤ Center.x ≤ WORLD_MAX


ƒ −WORLD_MAX ≤ Center.y ≤ WORLD_MAX
ƒ 0 < Radius ≤ WORLD_MAX
ƒ 0 ≤ StartAngle ≤ 360
ƒ 0 ≤ StopAngle ≤ 360

See Also

“Torus and Pie Functions” (page 1319)

L-Edit 14 User Guide Section 4 1609


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPoint

LPoint

typedef struct {
LCoord y, x;
} LPoint;

Description

A point in the L-Edit two-dimensional layout space.

See Also

“Point Functions” (page 1518)

L-Edit 14 User Guide Section 4 1610


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPort

LPort

typedef struct _LPort *LPort;

Description

A pointer to an L-Edit port whose contents can only be accessed or modified through UPI functions. A
port is a text whose location in a cell is specified by a rectangle, and it is typically used for
documentation or routing purposes. Each cell has a single list of ports. Each port has a layer, text, and a
location associated with it.

See Also

“Port Functions” (page 1350)

L-Edit 14 User Guide Section 4 1611


Chapter 35: UPI Functions Reference Data Types and Typedefs
LPropertyType

LPropertyType

typedef enum
{
L_unassigned=0,
L_none,
L_int, // int
L_real, // double
L_bool, // 0 if false, otherwise true
L_string, // char *
L_enum, // not used
L_byte,// byte
L_ptr, // void *
L_blob // void *
} LPropertyType;

Description

An enumerated datatype indicating the type of an L-Edit property.

See Also

“Entity Functions” (page 1244)

L-Edit 14 User Guide Section 4 1612


Chapter 35: UPI Functions Reference Data Types and Typedefs
LRect

LRect

typedef struct {
LCoord y0, x0;
LCoord y1, x1;
} LRect;

Description

The coordinates of a rectangle in layout space. Here, (x0, y0) is the lower left corner of a rectangle and
(x1, y1) is the upper right corner.

See Also

“Rectangle Functions” (page 1524)

L-Edit 14 User Guide Section 4 1613


Chapter 35: UPI Functions Reference Data Types and Typedefs
LRenderingAttribute

LRenderingAttribute

typedef enum _LRenderingMode


{
rmPaint,
rmAdd,
rmSubtract
}
LRenderingMode;

typedef enum _LOutlineUnitType


{
utPixels = 0,
utLocatorUnits = 1
}
LOutlineUnitType;

typedef struct _LRenderingAttribute


{
LRenderingMode mMode; /* rmPaint=draw, rmAdd=OR with background,
rmSubtract=AND with background */
unsigned int mPass; /* Pass number from 1 to 10 */
LStipple mFillPattern; /* Pattern */
unsigned int mFillColorIndex; /* Color */
LStipple mOutlinePattern; /* Outline pattern */
unsigned int mOutlineColorIndex; /* Outline color */
LOutlineStyle mOutlineStyle; /* Outline style */
LOutlineUnitType mOutlineWidthUnits; /* utPixels or utLocatorUnits.
utPixels is recommended for better performance */
unsigned int mOutlineWidth; /* 1 is recommended for best
performance */
unsigned char mbBGprevPass;
}
LRenderingAttribute;

typedef LRenderingAttribute *LLRenderingAttribute;

Description

Defines rendering attributes.

See Also

“LStipple” (page 1621), “LLayer_GetRenderingObjectName” (page 1451),


“LLayer_GetRenderingAttribute” (page 1449), “LLayer_SetRenderingAttribute” (page 1450),
“LFile_GetColorPalette” (page 1464)

L-Edit 14 User Guide Section 4 1614


Chapter 35: UPI Functions Reference Data Types and Typedefs
LRenderingAttributeIndex

LRenderingAttributeIndex

typedef enum _LRenderingAttributeIndex


{
raiFirstRenderingAttribute = 0,
raiObject = 0,
raiPortBox = 1,
raiPortText = 2,
raiWireCenterline = 3,
raiSelectedObject = 4,
raiSelectedPortBox = 5,
raiSelectedPortText = 6,
raiSelectedWireCenterline = 7,
raiLastRenderingAttribute = 7
}
LRenderingAttributeIndex;

#define NumberOfRenderingAttributes (raiLastRenderingAttribute+1)

Description

Lists the available rendering attributes. The constant NumberofRenderingAttributes represents the
total number of defined rendering attributes.

See Also

“LLayer_GetRenderingAttribute” (page 1449), “LLayer_SetRenderingAttribute” (page 1450),


“LLayer_GetRenderingObjectName” (page 1451)

L-Edit 14 User Guide Section 4 1615


Chapter 35: UPI Functions Reference Data Types and Typedefs
LSelection

LSelection

typedef struct _LSelection *LSelection;

Description

A pointer to the L-Edit selection list whose contents can only be accessed or modified through UPI
functions.

See Also

“Selection Functions” (page 1368)

L-Edit 14 User Guide Section 4 1616


Chapter 35: UPI Functions Reference Data Types and Typedefs
LSelectionParam

LSelectionParam

typedef struct _LSelectionParam {


long selection_range;
long deselect_distance_2;
long deselect_distance_1;
long lambda_edit_range;
long pixel_edit_range;
int select_draws;
} LSelectionParam;

Description

Used to get and set the selection setup of file. This structure is used to specify the selection range,
deselection range, and the edit range. The switch select_draws determines if an object will be
automatically selected after it is created.

See Also

“LFile_GetSelectionParam” (page 1140), “LFile_SetSelectionParam” (page 1141)

L-Edit 14 User Guide Section 4 1617


Chapter 35: UPI Functions Reference Data Types and Typedefs
LShapeType

LShapeType

typedef enum {
LBox,
LCircle,
LWire,
LPolygon,
LTorus,
LPie,
LOtherObject,
LObjInstance,
LObjPort,
LObjRuler
} LShapeType;

Description

An enumeration of the object type of an L-Edit object.

See Also

“LObject_GetShape” (page 1278)

L-Edit 14 User Guide Section 4 1618


Chapter 35: UPI Functions Reference Data Types and Typedefs
LSpecialLayer

LSpecialLayer

typedef enum {
GridLayer,
OriginLayer,
CellOutlineLayer,
ErrorLayer,
IconLayer,
FirstMaskLayer,
DragBoxLayer
} LSpecialLayer;

Description

An enumerated datatype that specifies the type of a special layer.

See Also

“Layer Functions” (page 1400)

L-Edit 14 User Guide Section 4 1619


Chapter 35: UPI Functions Reference Data Types and Typedefs
LStatus

LStatus

typedef enum {
LStatusOK,
LTooManyInits,
LOpenError,
LCloseError,
LCreateError,
LSaveError,
LBadFile,
LBadCell,
LBadLayer,
LBadParameters,
LBadObject,
LBadHierarchy,
LTmError,
LUserDataError,
LCellOverWritten,
LLayerMapsDifferent,
LNamedCellExists,
LCopyProtViolation,
LNoSelection,
LPropertyNotFound,
LPropertyHasNoValue,
LPropertyTypeMismatch,
LPropertyConversionError,
LBufferTooSmall,
LVertexNotFound,
LCantDeleteVertex,
LSystemError,
LUserAbort,
LExists,
LLayerNotEmpty,
LParameterOutOfRange
} LStatus;

Description

LStatus is an enumeration of various error returns. A return value of zero indicates no errors; a value
greater than zero indicates an error by its position in the list.

L-Edit 14 User Guide Section 4 1620


Chapter 35: UPI Functions Reference Data Types and Typedefs
LStipple

LStipple

typedef unsigned char LStipple[8];

Description

Each unsigned character in the array LStipple is a bitmap of a row in the 8x8 stipple pattern.

See Also

“LRenderingAttribute” (page 1614).

L-Edit 14 User Guide Section 4 1621


Chapter 35: UPI Functions Reference Data Types and Typedefs
tech_unit_type

tech_unit_type

Description

Specifies the units of technology measurement.

typedef enum {
MICRONS,
MILLIMETERS,
CENTIMETERS,
MILS,
INCHES,
LAMBDA,
OTHER
} tech_unit_type;

See Also

“Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1622


Chapter 35: UPI Functions Reference Data Types and Typedefs
LTechnology

LTechnology

Description

A structure where information about the technology of the design file can be stored.

typedef struct _LTechnology {


const char* name; /*Technology name*/
tech_unit_type unit_type; /*Unit of measurement*/
const char* unit_name; /*Other unit name*/
long num; /*Numerator of mapping*/
long denom; /*Denominator of mapping*/
long lambda_num; /*Numerator, lambda mapping*/
long lambda_denom; /*Denominator, Lambda mapping*/
} LTechnology;

Version

This data type is obsoleted by LTechnologyEx840

L-Edit 14 User Guide Section 4 1623


Chapter 35: UPI Functions Reference Data Types and Typedefs
LTechnologyEx840

LTechnologyEx840

Description

typedef struct _LTechnologyEx840


{
char szName[128];
tech_unit_type eUnitType;
char szUnitName[128];
long nNum;
long nDenom;
long nOtherNum;
long nOtherDenom;
} LTechnologyEx840;

See Also

“Technology Setup Functions” (page 1452)

L-Edit 14 User Guide Section 4 1624


Chapter 35: UPI Functions Reference Data Types and Typedefs
LTorusParams

LTorusParams

typedef struct
{
LPoint ptCenter;
LCoord nInnerRadius;
LCoord nOuterRadius;
double dStartAngle;
double dStopAngle;
} LTorusParams;

Description

Specifies the parameters of a torus, including the center point, inner and outer radii, and start and stop
angles. The valid ranges for torus parameters are given below, where [ ] indicate inclused endpoints and
( ) indicate excluded endpoints.

Parameter Valid Range

ptCenter.x [−WORLD_MAX, WORLD_MAX]


ptCenter.y [−WORLD_MAX, WORLD_MAX]
nInnerRadius (0, WORLD_MAX]
nOuterRadius (0, WORLD_MAX]
dStartAngle [0, 360]
dStopAngle [0, 360]

See Also

“Torus and Pie Functions” (page 1319)

L-Edit 14 User Guide Section 4 1625


Chapter 35: UPI Functions Reference Data Types and Typedefs
LTransform

LTransform

typedef struct {
LPoint translation;
LOrientation orientation;
LMagnification magnification;
} LTransform;

Description

Specifies the translation, orientation, and magnification of an object. All objects, ports, and instances
can be transformed.

Note: Note that this function is obsolete in L-Edit V10 and later.

See Also

“LTransform” (page 1626), “LOrientation” (page 1601), “LMagnification” (page 1595),


“LTransform_Ex99” (page 1627)

L-Edit 14 User Guide Section 4 1626


Chapter 35: UPI Functions Reference Data Types and Typedefs
LTransform_Ex99

LTransform_Ex99

typedef struct {
LPoint translation;
LOrientation_Ex99 orientation;
LMagnification magnification;
} LTransform_Ex99;

Description

Specifies the translation, orientation as a real number, and magnification of an object. All objects, ports,
and instances can be transformed.

See Also

“LTransform” (page 1626), “LMagnification” (page 1595), “Transformation Functions” (page 1528)

L-Edit 14 User Guide Section 4 1627


Chapter 35: UPI Functions Reference Data Types and Typedefs
LVertex

LVertex

typedef struct _LVertex *LVertex

Description

A pointer to a polygon’s vertex.

Version

Available in L-Edit 8.4 and later versions.

See Also

“Vertex Functions” (page 1294).

L-Edit 14 User Guide Section 4 1628


Chapter 35: UPI Functions Reference Data Types and Typedefs
LWindow

LWindow

typedef struct _LWindow *LWindow;

Description

A pointer to an L-Edit window whose contents can only be accessed or modified through UPI functions.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035)

L-Edit 14 User Guide Section 4 1629


Chapter 35: UPI Functions Reference Data Types and Typedefs
LWindowType

LWindowType

typedef enum {
UNKNOWN = 0,
CELL_BROWSER,
TEXT,
LAYOUT,
CROSS_SECTION,
CODE,
LW_SPICE,
LW_COMMAND,
LW_HTML,
LW_LOG
} LWindowType;

Description

Enum of different window types that can be opened in L-Edit.

Enumerators

UNKNOWN Unknown window type


CELL_BROWSER Design Navigator window
TEXT General text window
LAYOUT Cell layout window
CROSS_SECTION Layout window that is displaying a cross-section
CODE A text window that is either a T-Cell Code window or a UPI macro
code window (.c file). Code windows have syntax highlighting for c
and UPI functions.
LW_SPICE A text window that contains a SPICE file (.sp, .spc, or .cir files).
SPICE windows have syntax highlighting for SPICE commands.
LW_LOG A text window that contains a log file (.log file). Log windows have
syntax highlighting for log files (Error are in red, Warnings are in
blue).
LW_COMMAND A text window that contains a Calibre, Assura or Dracula DRC
command file.
LW_HTML A text window in HTML format, such as the DRC Summary Report.

See Also

“Interface Functions” (page 983), “Windows Functions” (page 1035), “LWindow_GetType” (page
1046)

L-Edit 14 User Guide Section 4 1630


Chapter 35: UPI Functions Reference Data Types and Typedefs
LWireConfig

LWireConfig

typedef struct {
LCoord width;
LJoinType join;
LCapType cap;
LCoord miter_angle;
} LWireConfig;

Description

Specifies the configuration of a wire. The configuration of a wire includes width, join type, cap type,
and miter angle.

See Also

“LWire_New” (page 1331)

L-Edit 14 User Guide Section 4 1631


Chapter 35: UPI Functions Reference Data Types and Typedefs
LWireConfigBits

LWireConfigBits

typedef enum {
LSetWireWidth = 1 << 0,
LSetWireJoin = 1 << 1,
LSetWireCap = 1 << 2,
LSetWireMiterLimit = 1 << 3,
LSetWireAll = -1
} LWireConfigBits;

Description

Used to mask out configuration properties that you do not wish to set.

See Also

“LWireConfig” (page 1631), “LWire_New” (page 1331)

L-Edit 14 User Guide Section 4 1632


Chapter 35: UPI Functions Reference Data Types and Typedefs
LWireParam

LWireParam

typedef struct {
long defaultWireWidth;
short defaultWireMiterAngle;
LCapType capType;
LJoinType joinType;
} LWireParam;

Description

Specifies the default properties of a wire: wire width, miter angle, join style, and end style.

See Also

“LLayer_SetParametersEx830” (page 1416), “LWire_New” (page 1331)

L-Edit 14 User Guide Section 4 1633


Chapter 35: UPI Functions Reference Data Types and Typedefs
UPIDrawingToolType

UPIDrawingToolType

typedef enum
{
LSelectionTool = 0; /*Selection tool*/
LBoxTool; /*Box tool*/
LPolygon90Tool; /*Orthogonal polygon tool*/
LPolygon45Tool; /*45 degree polygon tool*/
LPolygonAATool; /*All angle polygon tool*/
LWire90Tool; /*Orthogonal wire tool*/
LWire45Tool; /*45 degree wire tool*/
LWireAATool; /*All angle wire tool*/
LCircleTool; /*Circle tool*/
LPieWedgeTool; /*Pie wedge tool*/
LTorusTool; /*Torus tool*/
LPortTool; /*Port tool*/
LRuler90Tool; /*Orthogonal ruler tool*/
LRuler45Tool; /*45 degree tool*/
LRulerAATool; /*All angle tool*/
LInstanceTool; /*Instance tool (Not currently implemented*/
} UPIDrawingToolType;

L-Edit 14 User Guide Section 4 1634


Chapter 35: UPI Functions Reference Data Types and Typedefs
UPIDrawingToolType

L-Edit 14 User Guide Section 4 1635


36 LComp Functions Reference
4

Introduction

LComp is a set of high-level C functions for L-Edit’s User Programmable Interface (UPI). LComp
functions provide a means to easily create and position instances of cells, add cell geometry, and
perform other basic cell operations with simple programming.

Functions are arranged in five primary categories:

ƒ “State Functions” (page 1639)


ƒ “Placement Functions” (page 1660)
ƒ “Position Functions” (page 1667)
ƒ “Geometry Functions” (page 1674)
ƒ “Utility Functions” (page 1684)

Composition with LComp

One of the key features of LComp is a set of functions that facilitate composition, the placement and
interconnection of cells in the layout. Because such composition often requires large-scale repetition of
a layout scheme, LComp functions use a set of state variables to determine how and where consecutive
instances will be placed. Once state variables are initialized, you can begin instancing and placing cells
without repeating key parameter values in each function call.

LComp “Placement Functions” (page 1660) allow you to easily create and/or place instances in the
active cell. Cells, instances, and ports are passed to LComp functions as elements (see “Elements,”
below). There are two basic ways to place an element in the layout:

ƒ You can position the element such that its reference point is placed at the current (x, y) position.
ƒ You can the element so that it lines up with an edge of the last placed element.

Each method uses the values of global state variables to determine factors such as instance boundaries,
orientation, and, composition direction. See “State Variables” on page 1638 for an explanation of these
parameters.

Initializing LComp

Before using LComp functions, you must first call an initialization function as follows:

LC_InitializeState();

LC_InitializeState is required to get handles to the currently open file and the currently open cell.
Composition functions that follow (such as placing an instance or creating geometry) are executed in
the current cell. LC_InitializeState also obtains the default abutment layer (see “State Variables” on
page 1638).

L-Edit 14 User Guide Section 4 1636


Chapter 36: LComp Functions Reference Introduction

Elements

LComp operations are performed on elements. An LComp element can be a cell, an instance, a port, or
a hierarchical combination of cell, instance, and/or port.

The general format for naming LComp elements is:

cellname/instance/port

where a slash (/) is used to separate levels of hierarchy. In addition, the following rules apply:

ƒ If an instance name is not unique within the design, then you must refer to the instance name as
source_cell:instance
ƒ A port may optionally be specified with the corresponding layername:
port:layername
ƒ If the first component of a name is a cell name, the result is in the context of that cell; otherwise, it
is in the context of the current cell.

For example, the element Top/Bottom:BotInst/Out refers to the port named Out in instance of cell
Bottom named BotInst, located in cell Top. The element Top/Bottom:BotInst/Out is illustrated below:

Cell: Bottom Cell: Top

Instance: BotInst
Of Cell: Bottom
Port: Out

Port: Out

“Top/Bottom:BotInst/Out”

The instance named LastInstance refers to the last instance placed using one of the “Placement
Functions” (page 1660).

Note: To refer to an instance or port in an element name, you must use the associated
instance or port name. Unnamed instances and ports are inaccessible as elements.

L-Edit 14 User Guide Section 4 1637


Chapter 36: LComp Functions Reference Introduction

State Variables

LComp functions use a core set of state variables to determine how and where instances are placed in
the layout. The state variables and the key functions used to set them are listed in the following table.
See “State Functions” (page 1639) for additional functions that set or retrieve state variables.

Variable Definition Key Function

placement The (x, y) coordinates at which the next “LC_SetXYPlacementPosition”


position instance or port will be placed. LComp has (page 1652)
an implicit composition capability; after an
instance is placed in the layout, the
placement position is automatically
incremented by the width or height of the
instance’s bounding box. The direction in
which the position is incremented is
determined by the composition direction (see
“LC_SetCompositionDirection” (page
1648)).
composition The location in which an instance is placed “LC_SetCompositionDirection”
direction relative to the last placed instance. You can (page 1648)
build a layout composition in any of four
directions - up, down, left, or right.
reference The location within an instance that “LC_SetReferencePoint” (page
point corresponds to its (x, y) position in the 1640)
layout.
abutment type Determines how cell boundaries are defined. “LC_SetAbutmentType” (page
Instances can be aligned by either their 1642)
minimum bounding boxes or by their
abutment boxes. The abutment box is the
smallest box enclosing all objects on the
abutment layer. The default abutment layer
is the Icon special layer in L-Edit.
orientation The transformation (rotation and/or “LC_SetPlacementOrientation”
reflection) applied to instances when they (page 1644)
are placed in the layout.
overlap The amount by which adjacent instance “LC_SetPlacementOverlap” (page
boundaries overlap. Boundary definitions are 1650)
controlled by the abutment type (see
“LC_SetAbutmentType” (page 1642)).

L-Edit 14 User Guide Section 4 1638


Chapter 36: LComp Functions Reference State Functions

State Functions

LComp functions use a core set of global state variables to determine how and where instances are
placed in the layout. State functions allow you to set and retrieve state variable values.

“LC_SetReferencePoint” (page 1640) “LC_GetReferencePoint” (page 1641)

“LC_SetAbutmentType” (page 1642) “LC_GetAbutmentType” (page 1643)

“LC_SetPlacementOrientation” (page 1644) “LC_GetPlacementOrientation” (page 1645)

“LC_AddPlacementOrientation” (page 1646) “LC_SubtractPlacementOrientation” (page


1647)
“LC_SetCompositionDirection” (page 1648) “LC_GetCompositionDirection” (page 1649)

“LC_SetPlacementOverlap” (page 1650) “LC_GetPlacementOverlap” (page 1651)

“LC_SetXYPlacementPosition” (page 1652) “LC_GetXYPlacementPosition” (page 1653)

“LC_SetXPlacementPosition” (page 1654) “LC_GetXPlacementPosition” (page 1655)

“LC_SetYPlacementPosition” (page 1656) “LC_GetYPlacementPosition” (page 1657)

“LC_IncrementXPlacementPosition” (page “LC_IncrementYPlacementPosition” (page


1658) 1659)

L-Edit 14 User Guide Section 4 1639


Chapter 36: LComp Functions Reference State Functions
LC_SetReferencePoint

LC_SetReferencePoint

RelativeTo LC_SetReferencePoint(RelativeTo place);

Description

Sets the current reference point for LComp placement and position functions. The reference point can
be the origin of the source cell’s coordinate system, or one of nine points on the object’s bounding box:

UL TOP
UR

LEFT RIGHT
CENTER

LL LR
BOTTOM

Return Value

Returns the previous reference point.

Parameters

The reference point place can be set to any of the nine points illustrated above (UL, TOP, UR, etc.).
When the value ORIGIN is used, the reference point is the origin of the source (instanced) cell’s
coordinate system.

See Also

“LC_GetReferencePoint” (page 1641), “LC_SetAbutmentType” (page 1642), “RelativeTo” (page


1704)

L-Edit 14 User Guide Section 4 1640


Chapter 36: LComp Functions Reference State Functions
LC_GetReferencePoint

LC_GetReferencePoint

RelativeTo LC_GetReferencePoint(void);

Description

Returns the current reference point for LComp placement and position functions.

See Also

“LC_SetReferencePoint” (page 1640), “LC_SetAbutmentType” (page 1642), “RelativeTo” (page


1704)

L-Edit 14 User Guide Section 4 1641


Chapter 36: LComp Functions Reference State Functions
LC_SetAbutmentType

LC_SetAbutmentType

AbutTo LC_SetAbutmentType(AbutTo place);

Description

Determines how a cell’s bounding box is defined in LComp placement and position functions.

Return Value

Returns the previous abutment type.

Parameters

The parameter place can be set to either MBB (minimum bounding box) or ABUT.

When MBB is specified, the bounding box of a cell is the smallest box that encloses all geometry in the
cell, ignoring the text portions of labels. When ABUT is specified, the bounding box of a cell is the
smallest box that encloses all geometry on the abutment layer, ignoring the text portions of labels. The
default abutment layer is the Icon special layer in L-Edit; you can change the abutment layer using
LC_SetAbutmentLayer.

Note: A port is always bounded by the port box.

See Also

“LC_GetAbutmentType” (page 1643), “AbutTo” (page 1702)

L-Edit 14 User Guide Section 4 1642


Chapter 36: LComp Functions Reference State Functions
LC_GetAbutmentType

LC_GetAbutmentType

AbutTo LC_GetAbutmentType(void);

Description

Returns the current abutment type.

See Also

“LC_SetAbutmentType” (page 1642), “AbutTo” (page 1702)

L-Edit 14 User Guide Section 4 1643


Chapter 36: LComp Functions Reference State Functions
LC_SetPlacementOrientation

LC_SetPlacementOrientation

LOrientation LC_SetPlacementOrientation(LOrientation orient);

Description

Sets the orientation (rotation) in which instances or ports are placed.

Return Value

Returns the previous orientation setting.

Parameters

The parameter orient specifies a transformation (rotation and/or reflection) of the instance. Only the
following values are supported:

LNormalOrientation No transformation.
LRotate90 90 degree rotation.
LRotate180 180 degree rotation.
LRotate270 270 degree rotation.
LRotate0MirrorX Flips the instance horizontally (reflection).
LRotate90MirrorX Flips horizontally, then applies a 90 degree rotation.
LRotate180MirrorX Flips horizontally, then applies a 180 degree rotation.
LRotate270MirrorX Flips horizontally, then applies a 270 degree rotation.

See Also

“LC_GetPlacementOrientation” (page 1645), “LC_AddPlacementOrientation” (page 1646),


“LC_SubtractPlacementOrientation” (page 1647), “LOrientation” (page 1601)

L-Edit 14 User Guide Section 4 1644


Chapter 36: LComp Functions Reference State Functions
LC_GetPlacementOrientation

LC_GetPlacementOrientation

LOrientation LC_GetPlacementOrientation(void);

Description

Returns the current orientation for placing instances.

See Also

“LC_SetPlacementOrientation” (page 1644), “LC_AddPlacementOrientation” (page 1646),


“LC_SubtractPlacementOrientation” (page 1647), “LOrientation” (page 1601)

L-Edit 14 User Guide Section 4 1645


Chapter 36: LComp Functions Reference State Functions
LC_AddPlacementOrientation

LC_AddPlacementOrientation

LOrientation LC_AddPlacementOrientation(LOrientation orig, LOrientation


new_orientation);

Description

Computes the equivalent transformation obtained by following the transformation specified by orig
with the transformation specified by new_orientation.

Return Value

Returns the new orientation.

Parameters

The parameters orig and new_orientation are the first and second transformations, respectively. Only
the following transformations are supported:

LNormalOrientation No transformation.
LRotate90 90 degree rotation.
LRotate180 180 degree rotation.
LRotate270 270 degree rotation.
LRotate0MirrorX Flips the instance horizontally (reflection).
LRotate90MirrorX Flips horizontally, then applies a 90 degree rotation.
LRotate180MirrorX Flips horizontally, then applies a 180 degree rotation.
LRotate270MirrorX Flips horizontally, then applies a 270 degree rotation.

See Also

“LC_SetPlacementOrientation” (page 1644), “LC_GetPlacementOrientation” (page 1645),


“LC_SubtractPlacementOrientation” (page 1647), “LOrientation” (page 1601)

L-Edit 14 User Guide Section 4 1646


Chapter 36: LComp Functions Reference State Functions
LC_SubtractPlacementOrientation

LC_SubtractPlacementOrientation

LOrientation LC_SubtractPlacementOrientation(LOrientation orig, LOrientation


new_orientation);

Description

Computes the equivalent transformation obtained by first executing the transformation specified by
orig, then reversing the transformation specified by new_orientation.

Return Value

Returns the new orientation.

Parameters

The parameters orig and new_orientation are the original and subtracted transformations, respectively.
Only the following transformations are supported:

LNormalOrientation No transformation.
LRotate90 90 degree rotation.
LRotate180 180 degree rotation.
LRotate270 270 degree rotation.
LRotate0MirrorX Flips the instance horizontally (reflection).
LRotate90MirrorX Flips horizontally, then applies a 90 degree rotation.
LRotate180MirrorX Flips horizontally, then applies a 180 degree rotation.
LRotate270MirrorX Flips horizontally, then applies a 270 degree rotation.

See Also

“LC_SetPlacementOrientation” (page 1644), “LC_GetPlacementOrientation” (page 1645),


“LC_AddPlacementOrientation” (page 1646), “LOrientation” (page 1601)

L-Edit 14 User Guide Section 4 1647


Chapter 36: LComp Functions Reference State Functions
LC_SetCompositionDirection

LC_SetCompositionDirection

CompositionDirectionType LC_SetCompositionDirection(CompositionDirectionType
direction);

Description

Specifies the direction in which LComp places instances next to each other.

Return Value

Returns the previous composition direction.

Parameters

The parameter direction takes one of the following values:

ƒ UP (or VERTICAL)
ƒ DOWN
ƒ LEFT
ƒ RIGHT (or HORIZONTAL)
ƒ NONE

See Also

“LC_GetCompositionDirection” (page 1649), “CompositionDirectionType” (page 1703)

L-Edit 14 User Guide Section 4 1648


Chapter 36: LComp Functions Reference State Functions
LC_GetCompositionDirection

LC_GetCompositionDirection

CompositionDirectionType LC_GetCompositionDirection(void);

Description

Returns the current composition direction.

See Also

“LC_SetCompositionDirection” (page 1648), “CompositionDirectionType” (page 1703)

L-Edit 14 User Guide Section 4 1649


Chapter 36: LComp Functions Reference State Functions
LC_SetPlacementOverlap

LC_SetPlacementOverlap

LCoord LC_SetPlacementOverlap(LCoord overlap);

Description

Sets the placement overlap between instance or port boundaries in LComp positioning functions.

Return Value

Returns the previous placement overlap.

Parameters

The parameter overlap specifies a distance, in internal units, by which to overlap elements in either the
x- or y- direction. The direction of overlap (x or y) depends on the composition direction.

See Also

“LC_GetPlacementOverlap” (page 1651), “LC_SetCompositionDirection” (page 1648), “LCoord”


(page 1550)

L-Edit 14 User Guide Section 4 1650


Chapter 36: LComp Functions Reference State Functions
LC_GetPlacementOverlap

LC_GetPlacementOverlap

LCoord LC_GetPlacementOverlap(void);

Description

Returns the current placement overlap, in internal units, between instance or port boundaries in LComp
positioning functions.

See Also

“LC_GetPlacementOverlap” (page 1651), “LC_SetCompositionDirection” (page 1648), “LCoord”


(page 1550)

L-Edit 14 User Guide Section 4 1651


Chapter 36: LComp Functions Reference State Functions
LC_SetXYPlacementPosition

LC_SetXYPlacementPosition

LPoint LC_SetXYPlacementPosition(LCoord xpos, LCoord ypos);

Description

Sets the current (x, y) placement position to the point (xpos, ypos), where xpos and ypos are in
internal units.

See Also

“LC_GetXYPlacementPosition” (page 1653), “LC_SetXPlacementPosition” (page 1654),


“LC_GetXPlacementPosition” (page 1655), “LC_SetYPlacementPosition” (page 1656),
“LC_GetYPlacementPosition” (page 1657), “LC_IncrementXPlacementPosition” (page 1658),
“LC_IncrementYPlacementPosition” (page 1659)

L-Edit 14 User Guide Section 4 1652


Chapter 36: LComp Functions Reference State Functions
LC_GetXYPlacementPosition

LC_GetXYPlacementPosition

LPoint LC_GetXYPlacementPosition(void);

Description

Returns the current (x, y) placement position in internal units.

See Also

“LC_SetXYPlacementPosition” (page 1652), “LC_SetXPlacementPosition” (page 1654),


“LC_GetXPlacementPosition” (page 1655), “LC_SetYPlacementPosition” (page 1656),
“LC_GetYPlacementPosition” (page 1657), “LC_IncrementXPlacementPosition” (page 1658),
“LC_IncrementYPlacementPosition” (page 1659)

L-Edit 14 User Guide Section 4 1653


Chapter 36: LComp Functions Reference State Functions
LC_SetXPlacementPosition

LC_SetXPlacementPosition

LCoord LC_SetXPlacementPosition(LCoord newx);

Description

Sets the x-coordinate of the (x, y) placement position to newx (internal units).

See Also

“LC_SetXYPlacementPosition” (page 1652), “LC_GetXYPlacementPosition” (page 1653),


“LC_GetXPlacementPosition” (page 1655), “LC_SetYPlacementPosition” (page 1656),
“LC_GetYPlacementPosition” (page 1657), “LC_IncrementXPlacementPosition” (page 1658),
“LC_IncrementYPlacementPosition” (page 1659)

L-Edit 14 User Guide Section 4 1654


Chapter 36: LComp Functions Reference State Functions
LC_GetXPlacementPosition

LC_GetXPlacementPosition

LCoord LC_GetXPlacementPosition(void);

Description

Returns the x-coordinate of the current (x, y) placement position in internal units.

See Also

“LC_SetXYPlacementPosition” (page 1652), “LC_GetXYPlacementPosition” (page 1653),


“LC_SetXPlacementPosition” (page 1654), “LC_SetYPlacementPosition” (page 1656),
“LC_GetYPlacementPosition” (page 1657), “LC_IncrementXPlacementPosition” (page 1658),
“LC_IncrementYPlacementPosition” (page 1659)

L-Edit 14 User Guide Section 4 1655


Chapter 36: LComp Functions Reference State Functions
LC_SetYPlacementPosition

LC_SetYPlacementPosition

LCoord LC_SetYPlacementPosition(LCoord newy);

Description

Sets the y-coordinate of the (x, y) placement position to newy (internal units).

See Also

“LC_SetXYPlacementPosition” (page 1652), “LC_GetXYPlacementPosition” (page 1653),


“LC_SetXPlacementPosition” (page 1654), “LC_GetXPlacementPosition” (page 1655),
“LC_GetYPlacementPosition” (page 1657), “LC_IncrementXPlacementPosition” (page 1658),
“LC_IncrementYPlacementPosition” (page 1659)

L-Edit 14 User Guide Section 4 1656


Chapter 36: LComp Functions Reference State Functions
LC_GetYPlacementPosition

LC_GetYPlacementPosition

LCoord LC_GetYPlacementPosition(void);

Description

Returns the y-coordinate of the current (x, y) placement position.

See Also

“LC_SetXYPlacementPosition” (page 1652), “LC_GetXYPlacementPosition” (page 1653),


“LC_SetXPlacementPosition” (page 1654), “LC_GetXPlacementPosition” (page 1655),
“LC_SetYPlacementPosition” (page 1656), “LC_IncrementXPlacementPosition” (page 1658),
“LC_IncrementYPlacementPosition” (page 1659)

L-Edit 14 User Guide Section 4 1657


Chapter 36: LComp Functions Reference State Functions
LC_IncrementXPlacementPosition

LC_IncrementXPlacementPosition

LCoord LC_IncrementXPlacementPosition(LCoord newx);

Description

Increments the x-coordinate of the current (x, y) placement position by newx internal units.

See Also

“LC_SetXYPlacementPosition” (page 1652), “LC_GetXYPlacementPosition” (page 1653),


“LC_GetXPlacementPosition” (page 1655), “LC_SetYPlacementPosition” (page 1656),
“LC_GetYPlacementPosition” (page 1657), “LC_IncrementYPlacementPosition” (page 1659)

L-Edit 14 User Guide Section 4 1658


Chapter 36: LComp Functions Reference State Functions
LC_IncrementYPlacementPosition

LC_IncrementYPlacementPosition

LCoord LC_IncrementYPlacementPosition(LCoord newy);

Description

Increments the y-coordinate of the current (x, y) placement position by newy internal units.

See Also

“LC_SetXYPlacementPosition” (page 1652), “LC_GetXYPlacementPosition” (page 1653),


“LC_GetXPlacementPosition” (page 1655), “LC_SetYPlacementPosition” (page 1656),
“LC_GetYPlacementPosition” (page 1657), “LC_IncrementXPlacementPosition” (page 1658)

L-Edit 14 User Guide Section 4 1659


Chapter 36: LComp Functions Reference Placement Functions
LC_IncrementYPlacementPosition

Placement Functions

Placement functions allow you to easily create and/or place instances in the active cell. The position and
orientation of instances is determined by the state variables (see “State Functions” on page 1639).

“LC_Position” (page 1661) “LC_Instance” (page 1662)

“LC_Generate” (page 1663) “LC_Align” (page 1664)

“LC_InstanceAlign” (page 1665) “LC_GenerateAlign” (page 1666)

L-Edit 14 User Guide Section 4 1660


Chapter 36: LComp Functions Reference Placement Functions
LC_Position

LC_Position

LStatus LC_Position(char *element);

Description

Places an instance in the layout by placing the instance, a subcell, or a port at the current (x, y) position.
If a cell name is passed as an argument , LC_Position creates an instance of that cell, then places it.
After placing the instance, LC_Position updates the (x, y) placement position according to the current
composition direction.

Note: To create a named instance of a cell, use “LC_Instance” (page 1662). An instance
name is required if you wish to refer to the instance again in LComp functions.

Return Value

LStatusOK if successful. If an error occurs, returns the error value.

Parameters

The parameter element is the name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See
“Elements” on page 1637 for an explanation of element names.

See Also

“LC_Instance” (page 1662)

L-Edit 14 User Guide Section 4 1661


Chapter 36: LComp Functions Reference Placement Functions
LC_Instance

LC_Instance

LInstance LC_Instance(char *classname, char *instname);

Description

Creates an instance named instname of the cell classname, then places the instance in the layout at the
current (x,y) position. After placing the instance, LC_Instance updates the (x, y) placement position
according to the current composition direction.

Note: To create an instance of a parameterized T-Cell, use “LC_Generate” (page 1663).

Return Value

Returns a pointer to the newly created instance if successful. If an error occurs, returns NULL.

Parameters

classname Name of the cell to be instanced.


instname Name of the newly created instance.

See Also

“LC_Position” (page 1661)

L-Edit 14 User Guide Section 4 1662


Chapter 36: LComp Functions Reference Placement Functions
LC_Generate

LC_Generate

LInstance LC_Generate(char *classname, char *instname, char **params);

Description

Creates an instance named instname of the T-Cell named classname, using the T-Cell parameter
values specified by params. After placing the instance, LC_Generate updates the (x, y) placement
position according to the current composition direction. This is similar to “LC_Instance” (page 1662),
with the addition of T-Cell parameter inputs.

Return Value

Returns a pointer to the newly created instance if successful. Otherwise, returns NULL.

Parameters

classname Name of the T-Cell to be instanced.


instname Name of the newly created instance.
params T-Cell parameter values.

See Also

“LC_GenerateAlign” (page 1666)

L-Edit 14 User Guide Section 4 1663


Chapter 36: LComp Functions Reference Placement Functions
LC_Align

LC_Align

LInstance LC_Align(char *element);

Description

Aligns the specified instance, subcell, or port next to the last placed instance. If a cell name is passed as
an argument , LC_Position creates an instance of that cell, then places it. After placing the instance,
LC_Align updates the (x, y) placement position according to the current composition direction.

Note: To create and align a named instance of a cell, use “LC_InstanceAlign” (page 1665).
An instance name is required if you wish to refer to the instance again in LComp
functions.

Return Value

Returns a pointer to the instance if successful. If an error occurs, returns NULL.

Parameters

The parameter element is the name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See
“Elements” on page 1637 for an explanation of element names.

See Also

“LC_InstanceAlign” (page 1665)

L-Edit 14 User Guide Section 4 1664


Chapter 36: LComp Functions Reference Placement Functions
LC_InstanceAlign

LC_InstanceAlign

LInstance LC_InstanceAlign(char *classname, char *instname);

Description

Creates an instance named instname of the cell named classname, and aligns it next to the last placed
instance. This function also increments the current (x,y) position according to the current composition
direction.

Return Value

Returns a pointer to the newly created instance if successful. If an error occurs, returns NULL.

Parameters

classname Name of the cell to be instanced.


instname Name of the newly created instance.

See Also

“LC_Align” (page 1664)

L-Edit 14 User Guide Section 4 1665


Chapter 36: LComp Functions Reference Placement Functions
LC_GenerateAlign

LC_GenerateAlign

LInstance LC_GenerateAlign(char *classname, char *instname, char **params);

Description

Creates an instance of the T-Cell classname and positions it next to the last placed instance. The T-Cell
instance is created using parameter values specified by params, and it is assigned the instance name
instname. This function also increments the current (x,y) position according to the current composition
direction.

Return Value

Returns a pointer to the newly created instance.

Parameters

classname Name of the T-Cell to be instanced.


instname Name of the newly created instance.
params T-Cell parameter values.

Example

LComp_SetPlacementOrientation(LRotate180MirrorX);
LComp_GenerateAlign("CELL", "NAME", tparams);

See Also

“LC_Generate” (page 1663)

L-Edit 14 User Guide Section 4 1666


Chapter 36: LComp Functions Reference Position Functions
LC_GenerateAlign

Position Functions

Position functions allow you to retrieve information about the position or size of an element:

“LC_GetPoint” (page 1668) “LC_GetPointEX” (page 1669)

“LC_GetPlacementRect” (page 1670) “LC_GetPlacementRectEX” (page 1671)

“LC_GetElementWidth” (page 1672) “LC_GetElementHeight” (page 1673)

L-Edit 14 User Guide Section 4 1667


Chapter 36: LComp Functions Reference Position Functions
LC_GetPoint

LC_GetPoint

LPoint LC_GetPoint(char *element);

Description

Gets the (x,y) location, in internal units, of the specified element. The location is specified using the
current settings for the element boundary and reference point. To get the element’s location with respect
to particular boundary and reference point definitions, use “LC_GetPointEX” (page 1669).

Return Value

Returns an (x, y) location in internal units.

Parameters

The parameter element is the name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See
“Elements” on page 1637 for an explanation of element names.

See Also

“LC_GetPointEX” (page 1669), “LPoint” (page 1610)

L-Edit 14 User Guide Section 4 1668


Chapter 36: LComp Functions Reference Position Functions
LC_GetPointEX

LC_GetPointEX

LPoint LC_GetPointEX(AbutTo rect, RelativeTo point, char *element);

Description

Gets the location of the specified element, using the abutment type and reference point specified by
rect and point, respectively.

Return Value

Returns the (x, y) position, in internal units, of the specified element.

Parameters

rect Specifies the abutment type, which determines the boundary


definition for the specified element. Must be one of the following
values:
ƒ MBB—Minimum bounding box of the cell’s geometry, excluding
labels. For ports, MBB is the smallest box that encloses the port
and its associated label.
ƒ ABUT—Smallest box that encloses all geometry on the cell’s
abutment layer. For ports, ABUT is equal to the port box,
excluding its label.
point Reference point at which the element’s location is reported. Possible
values are:
ƒ LEFT—center left point of the bounding box
ƒ RIGHT—center right point of the bounding box
ƒ CENTER—center of the bounding box
ƒ TOP—upper center point of the bounding box
ƒ BOTTOM—lower center point of the bounding box
ƒ UL—upper left corner of the bounding box
ƒ LL—lower left corner of the bounding box
ƒ UR—upper right corner of the bounding box
ƒ LR—lower right corner of the bounding box
ƒ ORIGIN—origin of the instanced cell’s coordinate system

element Name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See


“Elements” on page 1637 for an explanation of element names.

See Also

“LC_GetPoint” (page 1668), “LPoint” (page 1610)

L-Edit 14 User Guide Section 4 1669


Chapter 36: LComp Functions Reference Position Functions
LC_GetPlacementRect

LC_GetPlacementRect

LRect LC_GetPlacementRect(char *element);

Description

Gets the coordinates corresponding to the rectangle that bounds the specified element. The element
boundary is defined according to the current abutment type; see “LC_SetAbutmentType” (page 1642).

Return Value

Returns two pairs of coordinates representing the upper right and lower left corners of the rectangle. See
“LRect” (page 1613) for the structure definition.

Parameters

The parameter element is the name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See
“Elements” on page 1637 for an explanation of element names.

See Also

“LC_GetPlacementRectEX” (page 1671), “LC_GetPoint” (page 1668), “LPoint” (page 1610)

L-Edit 14 User Guide Section 4 1670


Chapter 36: LComp Functions Reference Position Functions
LC_GetPlacementRectEX

LC_GetPlacementRectEX

LRect LC_GetPlacementRectEX(AbutTo recttype, char *element);

Description

Gets the coordinates corresponding to the rectangle that bounds the specified element. The boundary
definition used (abutment or minimum bounding box) is specified by the recttype parameter.

Return Value

Returns two pairs of coordinates representing the upper right and lower left corners of the rectangle. See
“LRect” (page 1613) for the structure definition.

Parameters

recttype Specifies the abutment type, which determines the boundary


definition for the specified element. Must be one of the following
values:
ƒ MBB—Minimum bounding box of the cell’s geometry, excluding
labels. For ports, MBB is the smallest box that encloses the port
and its associated label.
ƒ ABUT—Smallest box that encloses all geometry on the cell’s
abutment layer. For ports, ABUT is equal to the port box,
excluding its label.
element Name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See
“Elements” on page 1637 for an explanation of element names.

See Also

“LC_GetPlacementRect” (page 1670), “LC_GetPoint” (page 1668), “LPoint” (page 1610)

L-Edit 14 User Guide Section 4 1671


Chapter 36: LComp Functions Reference Position Functions
LC_GetElementWidth

LC_GetElementWidth

LCoord LC_GetElementWidth(char *element);

Definition

Gets the width, in internal units, of the default bounding box for the specified element.

Return Value

Returns the width in internal units.

Parameters

The parameter element is the name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See
“Elements” on page 1637 for an explanation of element names.

See Also

“LC_GetElementHeight” (page 1673)

L-Edit 14 User Guide Section 4 1672


Chapter 36: LComp Functions Reference Position Functions
LC_GetElementHeight

LC_GetElementHeight

LCoord LC_GetElementHeight(char *element);

Description

Gets the height of the specified element’s default bounding box.

Return Value

Returns the height in internal units.

Parameters

The parameter element is the name of a cell, instance, or port (e.g., “Topcell/InstA/PortB”). See
“Elements” on page 1637 for an explanation of element names.

See Also

“LC_GetElementWidth” (page 1672)

L-Edit 14 User Guide Section 4 1673


Chapter 36: LComp Functions Reference Geometry Functions
LC_GetElementHeight

Geometry Functions

The following geometry functions allow you to automate creation of drawn objects in the active cell:

“LC_StartWire” (page 1675) “LC_AddWirePoint” (page 1676)

“LC_EndWire” (page 1677) “LC_CreateBox” (page 1678)

“LC_CreateCircle” (page 1679) “LC_CreatePort” (page 1680)

“LC_StartPolygon” (page 1681) “LC_AddPolygonPoint” (page 1682)

“LC_EndPolygon” (page 1683)

L-Edit 14 User Guide Section 4 1674


Chapter 36: LComp Functions Reference Geometry Functions
LC_StartWire

LC_StartWire

LStatus LC_StartWire(char *layername, LCoord width);

Description

Starts a wire of width width on the specified layername. To add points to the wire, including a start and
end point, use “LC_AddWirePoint” (page 1676).

Return Value

LStatusOK if successful. If an error occurs, returns the error value.

Parameters

layername Name of the layer on which to begin drawing a wire (e.g., “Metal1”).
width Width of the wire in internal units.

See Also

“LC_AddWirePoint” (page 1676), “LC_EndWire” (page 1677)

L-Edit 14 User Guide Section 4 1675


Chapter 36: LComp Functions Reference Geometry Functions
LC_AddWirePoint

LC_AddWirePoint

LPoint LC_AddWirePoint(LPoint point);

Description

Adds a point at location point to a wire created with “LC_StartWire” (page 1675).

Note: If a new wire has not been created with LC_StartWire, an error message is displayed.

Return Value

Returns the new wire point.

Parameters

The parameter point is the (x, y) location, in internal units, at which to create the next wire point.

See Also

“LC_StartWire” (page 1675), “LC_EndWire” (page 1677), “LPoint” (page 1610)

L-Edit 14 User Guide Section 4 1676


Chapter 36: LComp Functions Reference Geometry Functions
LC_EndWire

LC_EndWire

LObject LC_EndWire(void);

Description

Ends the wire in progress, which was created with “LC_StartWire” (page 1675).

Note: If a new wire has not been created with LC_StartWire, an error message is displayed.

Return Value

Returns a pointer to the completed wire.

See Also

“LC_StartWire” (page 1675), “LC_AddWirePoint” (page 1676), “LObject” (page 1600)

L-Edit 14 User Guide Section 4 1677


Chapter 36: LComp Functions Reference Geometry Functions
LC_CreateBox

LC_CreateBox

LObject LC_CreateBox(char *layername, LPoint lowerleft, LPoint upperright);

Description

Draws a box on the layer named layername, with the lower left and upper right corners located at the
points lowerleft and upperright, respectively.

Return Value

Returns a pointer to the box.

Parameters

layername Name of the layer on which to draw the box (e.g., “Poly”).
lowerleft Point specifying the (x,y) location, in internal units, of the lower left
corner of the box.
upperright Point specifying the (x,y) location, in internal units, of the upper right
corner of the box.

See Also

“LPoint” (page 1610), “LObject” (page 1600)

L-Edit 14 User Guide Section 4 1678


Chapter 36: LComp Functions Reference Geometry Functions
LC_CreateCircle

LC_CreateCircle

LObject LC_CreateCircle(char *layername, LPoint center, LCoord radius);

Description

Draws a circle on the layer named layername, with the specified center point and radius.

Return Value

Returns a pointer to the newly created circle.

Parameters

layername Name of the layer on which to draw the circle.


center (x, y) coordinates, in internal units, of the circle’s center point.
radius Radius, in internal units, of the circle.

See Also

“LPoint” (page 1610), “LCoord” (page 1550), “LObject” (page 1600)

L-Edit 14 User Guide Section 4 1679


Chapter 36: LComp Functions Reference Geometry Functions
LC_CreatePort

LC_CreatePort

LPort LC_CreatePort(char *layername, LPoint lowerleft, LPoint upperright,


char *portname);

Description

Creates a port named portname on layer layername. The lower left and upper right corners of the port
box are located at the points lowerleft and upperright, respectively.

Return Value

Returns a pointer to the newly created port.

Parameters

layername Layer on which to create the port.


lowerleft (x, y) coordinates, in internal units, of the lower left corner of the port
box.
upperright (x, y) coordinates, in internal units, of the upper right corner of the
port box.
portname Name of the newly created port.

See Also

“LPoint” (page 1610), “LObject” (page 1600)

L-Edit 14 User Guide Section 4 1680


Chapter 36: LComp Functions Reference Geometry Functions
LC_StartPolygon

LC_StartPolygon

LStatus LC_StartPolygon(char *layername);

Description

Starts drawing a polygon on the specified layer.

Return Value

LStatusOK if successful. If an error occurs, returns the error value.

Parameters

The parameter layername is the name of the layer on which to begin drawing a polygon.

See Also

“LC_AddPolygonPoint” (page 1682), “LC_EndPolygon” (page 1683), “LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1681


Chapter 36: LComp Functions Reference Geometry Functions
LC_AddPolygonPoint

LC_AddPolygonPoint

LPoint LC_AddPolygonPoint(LPoint point);

Description

Adds a point at the location point to the current polygon, which is created with “LC_StartPolygon”
(page 1681).

Note: If a new polygon has not been created with LC_StartPolygon, an error message is
displayed.

Return Value

Returns the new polygon point.

Parameters

The parameter point is the (x,y) location, in internal units, at which to create the next polygon point.

See Also

“LC_StartPolygon” (page 1681), “LC_EndPolygon” (page 1683), “LPoint” (page 1610)

L-Edit 14 User Guide Section 4 1682


Chapter 36: LComp Functions Reference Geometry Functions
LC_EndPolygon

LC_EndPolygon

LObject LC_EndPolygon(void);

Description

Ends the polygon in progress, which was created with “LC_StartPolygon” (page 1681).

Note: If a new polygon has not been created with LC_StartPolygon, an error message is
displayed.

Return Value

Returns a pointer to the newly created polygon.

See Also

“LC_StartPolygon” (page 1681), “LC_AddPolygonPoint” (page 1682), “LObject” (page 1600)

L-Edit 14 User Guide Section 4 1683


Chapter 36: LComp Functions Reference Utility Functions
LC_EndPolygon

Utility Functions

Utility functions include file and cell management, conversions between technology units, and “push”
and “pop” functions for saving or retrieving a previous state.

“LC_Push” (page 1685) “LC_Pop” (page 1686) “LC_DiskFileExists” (page


1687)
“LC_DiskFileDelete” (page “LC_DiskFileRename” (page “LC_Lambda” (page 1690)
1688) 1689)
“LC_Microns” (page 1691) “LC_InMicrons” (page 1692) “LC_CellOpen” (page 1693)

“LC_CellNew” (page 1694) “LC_CellClose” (page 1695) “LC_CellExists” (page 1696)

L-Edit 14 User Guide Section 4 1684


Chapter 36: LComp Functions Reference Utility Functions
LC_Push

LC_Push

void LC_Push(void);

Description

Saves the current state to a stack, where it can be retrieved using “LC_Pop” (page 1686). LC_Push
holds the following state variables in memory:

ƒ current file and cell


ƒ last placed instance
ƒ (x,y) placement position
ƒ placement overlap
ƒ abutment type
ƒ reference point
ƒ orientation
ƒ abutment layer

See Also

“LC_Pop” (page 1686)

L-Edit 14 User Guide Section 4 1685


Chapter 36: LComp Functions Reference Utility Functions
LC_Pop

LC_Pop

void LC_Pop(void);

Description

Retrieves the last state saved with “LC_Push” (page 1685).

See Also

“LC_Push” (page 1685)

L-Edit 14 User Guide Section 4 1686


Chapter 36: LComp Functions Reference Utility Functions
LC_DiskFileExists

LC_DiskFileExists

int LC_DiskFileExists(char *name);

Description

Checks to see if the file name or name.tdb exists.

Return Value

Returns 1 if the file exists, 0 otherwise.

Parameters

The parameter name is the filename, in quotes, of the file being checked.

See Also

“LC_CellExists” (page 1696)

L-Edit 14 User Guide Section 4 1687


Chapter 36: LComp Functions Reference Utility Functions
LC_DiskFileDelete

LC_DiskFileDelete

LStatus LC_DiskFileDelete(char *filename);

Description

Deletes the file named filename or filename.tdb.

Return Value

LStatusOK if successful. If an error occurs, returns the error value.

Parameters

The parameter name is the filename, in quotes, of the file being deleted.

See Also

“LC_DiskFileRename” (page 1689), “LC_DiskFileExists” (page 1687), “LStatus” (page 1620)

L-Edit 14 User Guide Section 4 1688


Chapter 36: LComp Functions Reference Utility Functions
LC_DiskFileRename

LC_DiskFileRename

LStatus LC_DiskFileRename(char *from, char *to);

Description

Renames the specified file to the new name.

Return Value

LStatusOK if successful. If an error occurs, returns the error value.

Parameters

from Original filename, in quotes.


to New filename, in quotes.

See Also

“LC_DiskFileExists” (page 1687), “LC_DiskFileDelete” (page 1688)

L-Edit 14 User Guide Section 4 1689


Chapter 36: LComp Functions Reference Utility Functions
LC_Lambda

LC_Lambda

LCoord LC_Lambda(double lambda);

Description

Converts an input value from lambda units to internal units.

Return Value

Returns the input value in internal units.

Parameters

The parameter lambda is a distance expressed in “lambda” units.

See Also

“LC_Microns” (page 1691), “LC_InMicrons” (page 1692)

L-Edit 14 User Guide Section 4 1690


Chapter 36: LComp Functions Reference Utility Functions
LC_Microns

LC_Microns

LCoord LC_Microns(double dist);

Description

Converts an input value from microns to internal units.

Return Value

Returns the input value in internal units.

Parameters

The parameter dist is a distance expressed in microns.

See Also

“LC_Lambda” (page 1690), “LC_InMicrons” (page 1692)

L-Edit 14 User Guide Section 4 1691


Chapter 36: LComp Functions Reference Utility Functions
LC_InMicrons

LC_InMicrons

double LC_InMicrons(LCoord internal);

Description

Converts an input value from internal units to microns.

Return Value

Returns the input value in microns.

Parameters

The parameter internal is a distance expressed in internal units.

See Also

“LC_Lambda” (page 1690), “LC_Microns” (page 1691)

L-Edit 14 User Guide Section 4 1692


Chapter 36: LComp Functions Reference Utility Functions
LC_CellOpen

LC_CellOpen

LCell LC_CellOpen(char *cellname);

Description

Opens the cell named cellname, or creates a new cell named cellname.

Return Value

Returns a pointer to the opened cell.

Parameters

The parameter cellname is the name of the cell to be opened.

See Also

“LC_CellNew” (page 1694), “LC_CellClose” (page 1695), “LC_CellExists” (page 1696), “LCell”
(page 1547)

L-Edit 14 User Guide Section 4 1693


Chapter 36: LComp Functions Reference Utility Functions
LC_CellNew

LC_CellNew

LCell LC_CellNew(char *cellname);

Description

Creates a new cell named cellname. If a cell named cellname already exists, its contents are deleted.

Return Value

Returns a pointer to the new cell.

Parameters

The parameter cellname is the name of the new cell.

See Also

“LC_CellOpen” (page 1693), “LC_CellClose” (page 1695), “LC_CellExists” (page 1696), “LCell”
(page 1547)

L-Edit 14 User Guide Section 4 1694


Chapter 36: LComp Functions Reference Utility Functions
LC_CellClose

LC_CellClose

LStatus LC_CellClose(int flags);

/* flags for CellClose */


#define UPDATE_ABUT 1
#define LOCK_CELL 2
#define UNLOCK_CELL 4
#define NO_LIST 8

Description

Closes the current cell and applies the specified flags.

Return Value

LStatusOK if successful. If an error occurs, returns the error value.

Parameters

Any combination of the following flags may be used:

UPDATE_ABUT Updates the cell’s abutment box on the abutment layer.


LOCK_CELL Locks the cell to prevent editing.
UNLOCK_CELL Unlocks the cell to allow editing.
NO_LIST Hides the cell from the cell list in the Design Navigator and other cell
dialogs.

See Also

“LC_CellNew” (page 1694), “LC_CellOpen” (page 1693), “LC_CellExists” (page 1696), “LStatus”
(page 1620)

L-Edit 14 User Guide Section 4 1695


Chapter 36: LComp Functions Reference Utility Functions
LC_CellExists

LC_CellExists

int LC_CellExists(char *cellname);

Description

Checks to see if the cell named cellname exists in the current TDB file.

Return Value

Returns 1 if the cell exists, 0 otherwise.

Parameters

The parameter cellname is the name of the cell to be checked.

See Also

“LC_CellOpen” (page 1693), “LC_CellClose” (page 1695), “LC_CellNew” (page 1694),


“LC_DiskFileExists” (page 1687)

L-Edit 14 User Guide Section 4 1696


Chapter 36: LComp Functions Reference Utility Functions
LC_PropagatePorts

LC_PropagatePorts

LStatus LC_PropagatePorts(char *instname, char *suffix);

Description

Creates duplicates of all ports in the instance named instname and places them in the current cell. The
duplicate ports are named PORTNAMEsuffix, where PORTNAME is the name of the original port.

Return Value

LStatusOK if successful. If an error occurs, returns the error value.

Parameters

instname Name of the instance, in quotes, from which to duplicate ports.


suffix Text string that will be appended to the names of new (duplicate)
ports (e.g., “.bottom”). If the suffix is NULL, port names are
unchanged from the originals.

L-Edit 14 User Guide Section 4 1697


Chapter 36: LComp Functions Reference Utility Functions
LC_Trace

LC_Trace

void LC_Trace(int trace);

Description

Turns tracing on or off. When tracing is on, every LComp function reports its execution history to the
UPI log file. To specify a separate file for trace output, use “LC_TraceFile” (page 1699).

Parameters

trace On or off state of LComp tracing. Only two values are supported:
ƒ ON—turns tracing on
ƒ OFF—turns tracing off

See Also

“LC_TraceFile” (page 1699)

L-Edit 14 User Guide Section 4 1698


Chapter 36: LComp Functions Reference Utility Functions
LC_TraceFile

LC_TraceFile

void LC_TraceFile(char *filename);

Description

Specifies a file for trace output. When tracing is on, every LComp function traces its execution history
to the trace file filename. Use “LC_Trace” (page 1698) to turn tracing on and off.

Parameters

filename Name of the file for trace output; the filename must be enclosed in
quotes.

See Also

“LC_Trace” (page 1698)

L-Edit 14 User Guide Section 4 1699


Chapter 36: LComp Functions Reference Utility Functions
LC_PlaceMarkerAtCurrentPos

LC_PlaceMarkerAtCurrentPos

LPoint LC_PlaceMarkerAtCurrentPos(char *label);

Description

Places a point port with the text label at the current (x, y) position. Point ports can be useful for
debugging.

Return Value

Returns a pointer to the current (x, y) position.

Parameters

label Text string to label the newly created point port (e.g., “test_port”).

L-Edit 14 User Guide Section 4 1700


Chapter 36: LComp Functions Reference Utility Functions
Typedefs

Typedefs

“AbutTo” (page 1702)

“CompositionDirectionType” (page 1703)

“RelativeTo” (page 1704)

L-Edit 14 User Guide Section 4 1701


Chapter 36: LComp Functions Reference Utility Functions
AbutTo

AbutTo

typedef enum
{
MBB, Mbb = MBB.
ABUT, Abut = ABUT
} AbutTo;

Description

MBB Defines the bounding box of a cell as the smallest box that encloses
all geometry in the cell, ignoring port labels. For a port, the minimum
bounding box is the smallest box that encloses all of the port,
excluding its label.
ABUT Defines the bounding box of a cell as the smallest box that encloses
all geometry on the abutment layer, which is typically the Icon layer
in L-Edit. Specify the abutment layer using LC_SetAbutmentLayer.
For ports, the port box (excluding the label) is the bounding box.

L-Edit 14 User Guide Section 4 1702


Chapter 36: LComp Functions Reference Utility Functions
CompositionDirectionType

CompositionDirectionType

typedef long CompositionDirectionType;

Definition

Direction in which instances are placed consecutively. Only the following values are supported:

ƒ UP (or VERTICAL)
ƒ DOWN
ƒ LEFT
ƒ RIGHT (or HORIZONTAL)
ƒ NONE

When set to NONE, the (x, y) placement position is not incremented after placing an instance.

L-Edit 14 User Guide Section 4 1703


Chapter 36: LComp Functions Reference Utility Functions
RelativeTo

RelativeTo

typedef long RelativeTo;

Description

Reference point for LComp placement and position functions. The reference point can be the origin of
the source cell’s coordinate system, or one of nine points on the object’s bounding box:

UL TOP
UR

LEFT RIGHT
CENTER

LL LR
BOTTOM

When the value ORIGIN is used, the reference point is the origin of the source (instanced) cell’s
coordinate system.

L-Edit 14 User Guide Section 4 1704


Chapter 36: LComp Functions Reference Examples
RelativeTo

Examples

The following pages show the T-Cell code used in four L-Edit design examples:

ƒ “Logo Generator” (page 1706)


ƒ “Buffer” (page 1708)
ƒ “Matched Dual Capacitor Array” (page 1710)
ƒ “Decoder” (page 1717)

All four examples are included as TDB sample files with L-Edit. They are located in the folder
install_dir/Samples/T-Cells, where install_dir is the directory in which L-Edit was installed.

L-Edit 14 User Guide Section 4 1705


Chapter 36: LComp Functions Reference Examples
Logo Generator

Logo Generator

The logo generator is included in the file install_dir/samples/T-Cells/LayoutText.tdb. This file


includes a set of layout cells that each represent a single character. The T-Cell LOGO converts a
user-specified text string to block letters using alphabet cells.

T-Cell Code

module LOGO_code
{
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include "ldata.h"
#include "lcomp.h"

void PlaceCharacter(char ch)


{
if ( isalnum( ch ) )
LC_Position( LFormat("_alphabet_%c", toupper( ch )));
/* otherwise, need to special-case it */
else if (isspace( ch ))
LC_Position("_alphabet_space");
else {
switch ( ch ) {
case '+': LC_Position("_alphabet_+"); break;
case '-': LC_Position("_alphabet_-"); break;
case '_': LC_Position("_alphabet__"); break;
case '*': LC_Position("_alphabet_*"); break;
case ':': LC_Position("_alphabet_colon"); break;
case '\'': LC_Position("_alphabet_apostrophe"); break;
case '/': LC_Position("_alphabet_slash"); break;
case '\\': LC_Position("_alphabet_backslash"); break;
case '.': LC_Position("_alphabet_period"); break;
case ',': LC_Position("_alphabet_comma"); break;
case '(': LC_Position("_alphabet_("); break;
case ')': LC_Position("_alphabet_)"); break;
default:
LDialog_MsgBox ( LFormat ( "Unknown character '%c'
(code %d)\n", ch, ch ));
}
}
}

void convert_string(char *s)


{
while (*s)
{
/* note hardwired check for \ */
if (*s == 92 && *(s+1) == 'n')
{
char *f = s;
*f++ = '\n';
for ( ; *(f+1) ; f++)
*f = *(f+1);
*f = '\0';

L-Edit 14 User Guide Section 4 1706


Chapter 36: LComp Functions Reference Examples
Logo Generator

}
s++;
}
}

/* TODO: Put local variables and functions here. */


void LOGO_main(void)
{
/* Parameter variables */
LCell cellCurrent;
const char* text;
char s[1000];
char *t;
int first = 1;

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();
text = (const char*)LCell_GetParameter(cellCurrent,
"text");

/* TODO: Begin custom generator code.*/


strcpy(s, text);
convert_string(s);

LC_InitializeState();
LC_CurrentCell = cellCurrent;

LC_SetCompositionDirection(HORIZONTAL);
LC_SetReferencePoint(LL);

for (t = s; *t; t++)


{
if ( *t == '\n' )
{
LC_SetXPlacementPosition(0);
LC_IncrementYPlacementPosition(-
LC_GetElementHeight("_alphabet_A"));
}
else {
PlaceCharacter(*t);
}
}

LC_CellClose(UPDATE_ABUT);
/* End custom generator code.*/
}
}
LOGO_main();

L-Edit 14 User Guide Section 4 1707


Chapter 36: LComp Functions Reference Examples
Buffer

Buffer

The file install_dir/samples/T-Cells/buffer.tdb illustrates a buffer generator. The T-Cell buffer


contains code to generate a buffer cell with a user-specified drive value.

T-Cell Code

module BUFFER_code
{
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include "ldata.h"

/* Begin -- Remove this block if you are not using L-Comp. */


#include "lcomp.h"
/* End */

/* TODO: Put local variables and functions here. */


void BUFFER_main(void)
{
/* Parameter variables */
LCell cellCurrent;
int DRIVE;
int in, out;
LPoint pt;

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();
DRIVE = (int)LCell_GetParameter(cellCurrent, "DRIVE");

/* Begin -- Remove this block if you not using L-Comp. */


LC_InitializeState();
LC_CurrentCell = cellCurrent;
/* End */

/* TODO: Begin custom generator code.*/

/* check for sane argument */


if (! ( DRIVE > 0 && DRIVE <= 100 ) )
{
LDialog_MsgBox("Buffer drive must be between 1 and
100");
LUpi_SetReturnCode(1); /* error */
return;
}

LC_SetAbutmentType(ABUT);
LC_SetCompositionDirection(RIGHT);

/* put down a port used for our final Abut box */


pt.x = -LC_Lambda(4.5);
pt.y = 0;
LC_CreatePort( LC_GetAbutmentLayer(), pt, pt, "Lower left");

/* first, figure out how many first-stage drivers we need */

L-Edit 14 User Guide Section 4 1708


Chapter 36: LComp Functions Reference Examples
Buffer

in = 1 + ( DRIVE - 2 ) / 3;

/* now, build the first-stage */


for ( ; in > 0; in-- )
{
if ( in & 1 ) LC_SetPlacementOrientation(NONE);
else LC_SetPlacementOrientation(LRotate0MirrorX);
LC_InstanceAlign("BUFFER_SLICE", LFormat("in_%d", in));
}

/* put down the core */


LC_InstanceAlign("BUFFER_CORE", "core");

/* build the output stage */


for (out = 0; out < DRIVE; out++ )
{
if ( out & 1 )
LC_SetPlacementOrientation(LRotate0MirrorX);
else LC_SetPlacementOrientation(NONE);
LC_InstanceAlign("BUFFER_SLICE", LFormat("out_%d",
out));
}

/* propagate the I/O ports */


LC_PropagatePorts("core", "");

/* now update the Abutment box */


/* put down a port used for our final Abut box */
pt.x = LC_x + LC_Lambda(4.5);
pt.y = 0;
LC_CreatePort( LC_GetAbutmentLayer(), pt, pt, "Lower right");

LC_CellClose(UPDATE_ABUT);

/* End custom generator code.*/


}
}
BUFFER_main();

L-Edit 14 User Guide Section 4 1709


Chapter 36: LComp Functions Reference Examples
Matched Dual Capacitor Array

Matched Dual Capacitor Array

The file for this example is install_dir/samples/T-Cells/MatchedDualCapacitorArray.tdb. The T-Cell


MatchedDualCapacitorArray creates two matched capacitors out of an array of unit capacitors. It also
creates dummy capacitors around the array to improve matching.

T-Cell Code

module capacitorarray_code
{

#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include "ldata.h"

/* Begin -- Remove this block if you are not using L-Comp. */


#include "lcomp.h"
/* End */

//*************************************************************************
//* GLOBAL Variables:
//*************************************************************************
LCoord m1width, m2width, actwidth, polywidth, cntwidth, actovercnt,
polyovercnt, m1overcnt, m2overvia, seloveract;

//*************************************************************************
//* FUNCTIONS:
//*************************************************************************
void square( char * layer, LPoint center, LCoord width )
{
LPoint pt1, pt2;

pt1.x = center.x - width / 2;


pt1.y = center.y - width / 2;
pt2.x = center.x + width / 2;
pt2.y = center.y + width / 2;

LC_CreateBox( layer, pt1, pt2);


}
/*
void cell(LPoint center, int flip, LCoord sz)
{
LPoint pt = center;
}
*/
void capacitorarray_main(void)
{
/* Parameter variables */
LCell cellCurrent;
int x;
int y;
double size;

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();
x = (int)LCell_GetParameter(cellCurrent, "x");

L-Edit 14 User Guide Section 4 1710


Chapter 36: LComp Functions Reference Examples
Matched Dual Capacitor Array

y = (int)LCell_GetParameter(cellCurrent, "y");
size = atof((const
char*)LCell_GetParameter(cellCurrent, "size"));

/* Begin -- Remove this block if you not using L-Comp. */


LC_InitializeState();
LC_CurrentCell = cellCurrent;
/* End */

/* TODO: Begin custom generator code.*/


{
LCoord sz;
int i, j;
LPoint pt;
LCoord xpitch, ypitch;
LCoord xmin, xmax, ymin, ymax;
LPoint newpt;

if(size < 16)


{
LDialog_MsgBox("Can't build T-Cell cap_cell with
dimension less than 16");
LUpi_SetReturnCode(1);
return;
}

//Warn if there are an odd number of unit capacitors.


if((x*y) % 2)
{
if(LDialog_YesNoBox("There are an odd number of
unit capacitors.\nThis will causes the a mismatch
between the two capacitors.\nDo you want to
continue?") == LCANCEL)
{
LUpi_SetReturnCode(1);
return;
}
}

/* initialize all the variables used for design rule


dimensions */
sz = LC_Microns(size);

m1width = LC_Microns(3);
m2width = LC_Microns(3);
actwidth = LC_Microns(3);
polywidth = LC_Microns(2);
cntwidth = LC_Microns(2);
actovercnt = LC_Microns(1.5);
polyovercnt = LC_Microns(1.5);
m1overcnt = LC_Microns(1);
seloveract = LC_Microns(2);
m2overvia = LC_Microns(1);

xpitch = sz + 2*polywidth + 2*polyovercnt + 2*cntwidth +


polyovercnt;
ypitch = sz + 2*polywidth + 2*actovercnt + cntwidth +
2*actwidth;

xmin = xmax = ymin = ymax = 0;

L-Edit 14 User Guide Section 4 1711


Chapter 36: LComp Functions Reference Examples
Matched Dual Capacitor Array

for(j = 0; j < y+2; j++)


{
pt.y = j * ypitch;
for (i = 0; i < x+2; i++ )
{
pt.x = i * xpitch;

/* now actually build the capacitor */


square("Poly", pt, sz);
square("Capacitor ID", pt, sz);

// Don't forget to add Cap ID to the


// section of poly
// that routes to the cap.
{
LPoint pt1, pt2;
if(j & 1)
{
pt1.x = pt.x - sz/2 -
polywidth;
pt2.x = pt.x - sz/2;
}
else
{
pt1.x = pt.x + sz/2;
pt2.x = pt.x + sz/2 +
polywidth;
}
LCoord nPolyRoutingWidth = (cntwidth
+ 2*polyovercnt);
pt1.y = pt.y - (nPolyRoutingWidth/
2);
pt2.y = pt1.y + nPolyRoutingWidth;
LC_CreateBox("Capacitor ID", pt1,
pt2);
}

square("Active", pt, sz + 2*polywidth);

// Mark the caps that are dummy caps for


// matching.
if((j==0) || (j==y+1) || (i==0) ||
(i==x+1))
{
LPoint pt1 = LPoint_Set(pt.x-sz/2,
pt.y-sz/2);
LPoint pt2 = LPoint_Set(pt1.x+sz,
pt1.y+sz);
LPort pPort = LC_CreatePort("Label",
pt1, pt2, "Dummy");
LPort_SetTextAlignment(pPort,
PORT_TEXT_MIDDLE|PORT_TEXT_CENTER);
}

/* poly connection */
newpt = pt;
if (j & 1)
newpt.x -= xpitch/2;
else
newpt.x += xpitch/2;

L-Edit 14 User Guide Section 4 1712


Chapter 36: LComp Functions Reference Examples
Matched Dual Capacitor Array

square("Poly", newpt, cntwidth +


2*polyovercnt);

LC_CreatePort("Metal1", newpt, newpt,


LFormat("A[%d][%d]", i, j));
if ( i > 0 && i <= x && j > 0 && j <= y )
{
square("Poly Contact", newpt,
cntwidth);
square("Metal1", newpt, cntwidth +
2*m1overcnt);
square("Via1", newpt, cntwidth);
square("Metal2", newpt, cntwidth +
m2overvia);
}
LC_StartWire("Poly", cntwidth +
2*polyovercnt);
LC_AddWirePoint(newpt);
LC_AddWirePoint(pt);
LC_EndWire();
if ( newpt.x < xmin ) xmin = newpt.x;
if ( newpt.x > xmax ) xmax = newpt.x;

/* active connection */
newpt = pt;
if (i & 1)
newpt.y -= ypitch/2;
else
newpt.y += ypitch/2;
square("Active", newpt, cntwidth +
2*actovercnt);
if ( i > 0 && i <= x && j > 0 && j <= y )
{
square("Active Contact", newpt,
cntwidth);
square("Metal1", newpt, cntwidth +
2*m1overcnt);
}
LC_CreatePort("Metal1", newpt, newpt,
LFormat("B[%d][%d]", i, j));
LC_StartWire("Active",
cntwidth+2*actovercnt);
LC_AddWirePoint(newpt);
LC_AddWirePoint(pt);
LC_EndWire();
if ( newpt.y < ymin ) ymin = newpt.y;
if ( newpt.y > ymax ) ymax = newpt.y;
}
}

/* now it's time to wire up the array */


/* first, vertical wires */

for ( i = 1; i < x+2; i++ )


{
LPoint a, b;
a = LC_GetPoint(LFormat("A[%d][%d]", i, 1));
LC_StartWire("Metal2", m2width);
b.x = a.x;
if (i & 1 )
{

L-Edit 14 User Guide Section 4 1713


Chapter 36: LComp Functions Reference Examples
Matched Dual Capacitor Array

b.y = ymin + ypitch;


LC_AddWirePoint(b);
b.y = ymax;
LC_AddWirePoint(b);
}
else {
b.y = ymax - ypitch;
LC_AddWirePoint(b);
b.y = ymin;
LC_AddWirePoint(b);
}
LC_EndWire();
}

/* now, the horizontal wires */


for ( j = 1; j < y+2; j++)
{
LPoint a, b;
a = LC_GetPoint(LFormat("B[%d][%d]", 1, j));
LC_StartWire("Metal1", m1width);
b.y = a.y;
if (j & 1)
{
b.x = xmin + xpitch;
LC_AddWirePoint(b);
b.x = xmax;
LC_AddWirePoint(b);
}
else {
b.x = xmax - xpitch;
LC_AddWirePoint(b);
b.x = xmin;
LC_AddWirePoint(b);
}
LC_EndWire();
}

/* wire up the outside */


/* bottom */
newpt.x = 0;
newpt.y = ymin;
LC_StartWire("Metal2", m2width);
LC_AddWirePoint(newpt);
newpt.x = xmax - xpitch/2;
LC_AddWirePoint(newpt);
LC_EndWire();

// Write the capacitance as a port, if possible.


double dUnitCapacitance = 0; // in fF.
LLayer pLayer = LLayer_Find(LC_CurrentFile, "NMOS
Capacitor");
if(Assigned(pLayer))
{
LLayerParamEx830 oLayerParameters;
LLayer_GetParametersEx830(pLayer,
&oLayerParameters);
if(oLayerParameters.AreaCapacitance > 0)
{
LCoord nPolyRoutingWidth = (cntwidth +
2*polyovercnt);

L-Edit 14 User Guide Section 4 1714


Chapter 36: LComp Functions Reference Examples
Matched Dual Capacitor Array

double dArea = size*size +


LC_InMicrons(polywidth)*LC_InMicrons(n
PolyRoutingWidth);
dUnitCapacitance +=
oLayerParameters.AreaCapacitance*dArea
/1000; // Convert to fF.
}
if(oLayerParameters.FringeCapacitance>0)
{
// We don't add nPolyRoutingWidth too the
// perimeter because one of the
// nPolyRoutingWidth sides is shared with
// the main poly capacitor
// perimeter and should not be included.
// The other nPolyRoutingWidth
// side is already included in the main
// poly capacitor perimeter.
(4*MainCapSide - Lrouting) + (2*Lrouting +
2*Wrouting - Lrouting)
double dPerimeter = 4*size +
2*LC_InMicrons(polywidth);
dUnitCapacitance +=
oLayerParameters.FringeCapacitance*dPe
rimeter;
}
} // endif(assigned(pLayer))

// The bottom wire connects to (x*y)/2 unit capacitors.


int iBottom = ((x*y)/2);
double dCapacitance = iBottom*dUnitCapacitance;
if(dCapacitance > 0)
{
LPoint pt1 = LPoint_Set(0, ymin-(m2width/2));
LPoint pt2 = LPoint_Set(xmax - xpitch/2,
ymin+(m2width/2));
LPort pPort = LC_CreatePort("Label Filled", pt1,
pt2, LFormat("Cb = %lG fF", dCapacitance));
LPort_SetTextAlignment(pPort,
PORT_TEXT_LEFT|PORT_TEXT_BOTTOM);
}

/* top */
newpt.y = ymax;
LC_StartWire("Metal2", m2width);
LC_AddWirePoint(newpt);
newpt.x = 0;
LC_AddWirePoint(newpt);
LC_EndWire();

// The top wire connects to (x*y)/2 + 1 unit capacitors


// for odd number arrays.
dCapacitance = ((x*y)-iBottom)*dUnitCapacitance;
if(dCapacitance > 0)
{
LPoint pt1 = LPoint_Set(0, ymax-(m2width/2));
LPoint pt2 = LPoint_Set(xmax - xpitch/2,
ymax+(m2width/2));
LPort pPort = LC_CreatePort("Label Filled", pt1,
pt2, LFormat("Ct = %lG fF", dCapacitance));
LPort_SetTextAlignment(pPort,
PORT_TEXT_LEFT|PORT_TEXT_TOP);

L-Edit 14 User Guide Section 4 1715


Chapter 36: LComp Functions Reference Examples
Matched Dual Capacitor Array

/* left */
newpt.y = 0;
newpt.x = xmin;
LC_StartWire("Metal1", m1width);
LC_AddWirePoint(newpt);
newpt.y = ymax - ypitch/2;
LC_AddWirePoint(newpt);
LC_EndWire();

/* right */
newpt.x = xmax;
LC_StartWire("Metal1", m1width);
LC_AddWirePoint(newpt);
newpt.y = 0;
LC_AddWirePoint(newpt);
LC_EndWire();

pt.x = xmin - LC_Microns(5);


pt.y = ymin - LC_Microns(5);
newpt.x = xmax + LC_Microns(5);
newpt.y = ymax + LC_Microns(5);
LC_CreateBox("N Select", pt, newpt);
}
/* End custom generator code.*/
} // End of Function: capacitorarray_main
} // End of Module: capacitorarray_code

capacitorarray_main();

L-Edit 14 User Guide Section 4 1716


Chapter 36: LComp Functions Reference Examples
Decoder

Decoder

The decoder generator in install_dir/samples/T-Cells/decoder.tdb actually uses three additional


parameterized subcells to generate a decoder cell with user-specified pitch, number of outputs, and
number of bits.

Note: When a T-Cell generates subcells that depend on parameter inputs, these subcells
must also be defined as T-Cells. Otherwise, they will be overwritten when the parent
T-Cell is generated with new parameters.

T-Cell Code: Decoder Generator

module Decoder_Generator_code
{
#include <math.h>
#include "lcomp.h"
#define odd(a) (a&1)

void main(void)
{
/* Parameter variables */
LCell cellCurrent;
int Outputs;
int DecoderBits;
int Pitch;
bool Spacers;
char* params[5]; /* array of pointers to character
strings */
LRect rect;

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();
Outputs = (int)LCell_GetParameter(cellCurrent, "Outputs");
DecoderBits = (int)LCell_GetParameter(cellCurrent,
"DecoderBits");
Pitch = (int)LCell_GetParameter(cellCurrent, "Pitch");
Spacers = (bool)LCell_GetParameter(cellCurrent, "Spacers");

/* Begin custom generator code.*/

if (DecoderBits < 1 || DecoderBits > 8)


{
LDialog_MsgBox("Input bits must be between 1 and 8");
LUpi_SetReturnCode(1);
return;
}
if (Outputs < 1)
{
LDialog_MsgBox("Output bits must be positive integer");
LUpi_SetReturnCode(1);
return;
}
if (DecoderBits < LC_Bits(Outputs-1))
{

L-Edit 14 User Guide Section 4 1717


Chapter 36: LComp Functions Reference Examples
Decoder

LDialog_MsgBox(LFormat("Not enough input bits for


specified outputs! (need %d)", LC_Bits(Outputs-1)));
LUpi_SetReturnCode(1);
return;
}

/* Optional: tracing */
// LC_TraceFile("c:\\tanner\\decoder.log");
// LC_Trace(2);

LC_InitializeState();
LC_CurrentCell = cellCurrent;
LC_SetReferencePoint( LL );
LC_SetCompositionDirection(Vertical);
LC_SetAbutmentType(ABUT);

/* parameter 1, name and value */


params[0] = "DecoderBits";params[1] = LFormat("%d",
DecoderBits);
/* end parameter list with NULL */
params[2] = NULL;
LC_Generate( "decoder bottom", "auto decoder bottom", params );

/* parameter 2, name and value */


params[2] = "Outputs"; params[3] = LFormat("%d",
Outputs);
/* end parameter list with NULL */
params[4] = NULL;
LC_Generate("decoder guts", "auto decoder guts", params);

rect = LC_GetPlacementRect("auto decoder guts");


LC_CreateBox("Metal2", LPoint_Set(rect.x0, rect.y0),
LPoint_Set(rect.x1, rect.y1));

/* end parameter list with NULL */


params[2] = NULL;
LC_Generate( "decoder top", "auto decoder top", params );
/* End custom generator code.*/
}
}
main();

T-Cell Code: decoder bottom

module decoder_bottom_code
{
#include "lcomp.h"
#define odd(a) (a&1)

/* Put local variables and functions here. */


void decoder_bottom_main(void)
{
/* Parameter variables */
LCell cellCurrent;
int DecoderBits;
int i;

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();

L-Edit 14 User Guide Section 4 1718


Chapter 36: LComp Functions Reference Examples
Decoder

DecoderBits = (int)LCell_GetParameter(cellCurrent,
"DecoderBits");

LC_InitializeState();
LC_CurrentCell = cellCurrent;

/* Begin custom generator code.*/


LC_SetCompositionDirection(Horizontal);
LC_SetAbutmentType(ABUT);
LC_Position("row bottom begin");

for (i = 0; i < DecoderBits; i++)


{
/* mirror alternating cells */
if (odd(i))
LC_SetPlacementOrientation(LRotate0MirrorX);
else
LC_SetPlacementOrientation(LNormalOrientation);
LC_Position("row bottom");
}
LC_SetPlacementOrientation(LNormalOrientation);
LC_Position("row bottom end");
LC_CellClose(UPDATE_ABUT);
/* End custom generator code.*/
}
}
decoder_bottom_main();

T-Cell Code: decoder guts

module decoder_guts_code
{
#include "lcomp.h"
#define odd(a) (a&1)

/* Put local variables and functions here. */


void decoder_guts_main(void)
{
/* Parameter variables */
LCell cellCurrent;
int Outputs;
int DecoderBits;
int Pitch;
int i, j;
long data;
LCoord minbitheight;

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();
Outputs = (int)LCell_GetParameter(cellCurrent, "Outputs");
DecoderBits = (int)LCell_GetParameter(cellCurrent,
"DecoderBits");
Pitch = (int)LCell_GetParameter(cellCurrent, "Pitch");

LC_InitializeState();
LC_CurrentCell = cellCurrent;

/* Begin custom generator code.*/

L-Edit 14 User Guide Section 4 1719


Chapter 36: LComp Functions Reference Examples
Decoder

LC_SetAbutmentType(ABUT);

Pitch = LC_Lambda(Pitch);
minbitheight = LC_GetElementHeight("bg bitcell 1");

if (Pitch < minbitheight)


{
LDialog_MsgBox("Pitch is too small");
return;
}

for (i = 0; i < Outputs; i++)


{
LC_SetCompositionDirection(NONE);
LC_SetXPlacementPosition(0);

LC_PlaceMarkerAtCurrentPos("ROW START");

LC_SetPlacementOrientation(LNormalOrientation);
LC_SetCompositionDirection(Horizontal);
LC_Instance("row begin", LFormat("begin[%d]", i));

for (j = 0, data = i; j < DecoderBits; j++, data = data


>> 1)
{
if (odd(j))

LC_SetPlacementOrientation(LRotate0MirrorX);
else

LC_SetPlacementOrientation(LNormalOrientation);

if (odd(data))
LC_Instance("bg bitcell 1",
LFormat("b[%d][%d]", j, i));
else
LC_Instance("bg bitcell 0",
LFormat("b[%d][%d]", j, i));
}

LC_SetPlacementOrientation(LNormalOrientation);
LC_Instance("row end", LFormat("end[%d]", i));

LC_IncrementYPlacementPosition( Pitch );
LC_SetXPlacementPosition(0);
}
/* wire it up */
LC_SetReferencePoint(CENTER);
for (j = 0; j < DecoderBits; j++ )
{
int l;

for (l = 0; l < 4; l++)


{
LC_StartWire("Poly", LC_Lambda(2));

LC_AddWirePoint(LC_GetPoint(LFormat("b[%d][%d]
/A[%d]", j, 0, l)));

LC_AddWirePoint(LC_GetPoint(LFormat("b[%d][%d]
/A[%d]", j, Outputs-1, l)));

L-Edit 14 User Guide Section 4 1720


Chapter 36: LComp Functions Reference Examples
Decoder

LC_EndWire();
}

LC_StartWire("N Well",
LC_GetElementWidth("b[0][0]/WELL"));
LC_AddWirePoint(LC_GetPoint(LFormat("b[%d][%d]/WELL", j,
0)));
LC_AddWirePoint(LC_GetPoint(LFormat("b[%d][%d]/WELL", j,
Outputs-1)));
LC_EndWire();
}

LC_StartWire("Metal1", LC_GetElementWidth("begin[0]/Vdd"));
LC_AddWirePoint(LC_GetPoint(LFormat("begin[%d]/Vdd", 0)));
LC_AddWirePoint(LC_GetPoint(LFormat("begin[%d]/Vdd",
Outputs-1)));
LC_EndWire();

LC_StartWire("Metal1", LC_GetElementWidth("end[0]/Gnd"));
LC_AddWirePoint(LC_GetPoint(LFormat("end[%d]/Gnd", 0)));
LC_AddWirePoint(LC_GetPoint(LFormat("end[%d]/Gnd",
Outputs-1)));
LC_EndWire();

LC_StartWire("Metal1", LC_GetElementWidth("end[0]/Vdd"));
LC_AddWirePoint(LC_GetPoint(LFormat("end[%d]/Vdd", 0)));
LC_AddWirePoint(LC_GetPoint(LFormat("end[%d]/Vdd",
Outputs-1)));
LC_EndWire();

for (j = 0; j < Outputs - 1; j++ )


{
LC_StartWire("Poly", LC_Lambda(2));
LC_AddWirePoint(LC_GetPoint(LFormat("end[%d]/NABL_top",
j)));
LC_AddWirePoint(LC_GetPoint(LFormat("end[%d]/NABL_bot",
j+1)));
LC_EndWire();
}
LC_CellClose(UPDATE_ABUT);
/* End custom generator code.*/
}
}
decoder_guts_main();

T-Cell Code: decoder top

module decoder_top_code
{
#include "lcomp.h"
#define odd(a) (a&1)

/* Put local variables and functions here. */


void decoder_top_main(void)
{
/* Parameter variables */
LCell cellCurrent;
int DecoderBits;
int j;

L-Edit 14 User Guide Section 4 1721


Chapter 36: LComp Functions Reference Examples
Decoder

/* Initialize parameter variables */


cellCurrent = (LCell)LMacro_GetNewTCell();
DecoderBits = (int)LCell_GetParameter(cellCurrent,
"DecoderBits");

LC_InitializeState();
LC_CurrentCell = cellCurrent;

/* Begin custom generator code.*/


LC_SetCompositionDirection(Horizontal);
LC_SetAbutmentType(ABUT);
LC_Position("row top begin");
for (j = 0; j < DecoderBits; j++)
{
if (odd(j))
LC_SetPlacementOrientation(LRotate0MirrorX);
else
LC_SetPlacementOrientation(LNormalOrientation);
LC_Position("row top");
}
LC_SetPlacementOrientation(LNormalOrientation);
LC_Position("row top end");
LC_CellClose(UPDATE_ABUT);
/* End custom generator code.*/
}
}
decoder_top_main();

L-Edit 14 User Guide Section 4 1722


Chapter 37: Alphabetical List of UPI and LComp Functions

37 Alphabetical List of UPI and LComp


Functions

LAmbiguousFillType . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542
LApp_ExitAfterCompletion. . . . . . . . . . . . . . . . . . . . . . . . 1099
LApp_GetAllowSelectionOnLockedLayers . . . . . . . . . . . 1081
LApp_GetCacheInstances. . . . . . . . . . . . . . . . . . . . . . . . 1062
LApp_GetCacheInstancesSmallerThanNumOfPixels . . . 1063
LApp_GetFillObjectsDuringDrawing . . . . . . . . . . . . . . . . 1064
LApp_GetFullVersion. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074
LApp_GetHideInstanceInsidesIfLessThanNumOfPixels . 1065
LApp_GetHideObjectsSmallerThanNumOfPixels . . . . . . 1067
LApp_GetHideSmallInstanceInsides . . . . . . . . . . . . . . . . 1068
LApp_GetHideSmallObjects . . . . . . . . . . . . . . . . . . . . . . 1069
LApp_GetInterruptableRendering . . . . . . . . . . . . . . . . . . 1070
LApp_GetRedrawAllWindows . . . . . . . . . . . . . . . . . . . . . 1071
LApp_GetRenderingUseCPUForColorMixing . . . . . . . . . 1078
LApp_GetRenderingUseMMX . . . . . . . . . . . . . . . . . . . . . 1079
LApp_GetRenderingUsePatBltForPatterns . . . . . . . . . . . 1080
LApp_GetShowDesignFirstTimeIncrement . . . . . . . . . . . 1076
LApp_GetShowDesignNextTimeIncrement . . . . . . . . . . . 1077
LApp_GetShowDesignWhileRendering. . . . . . . . . . . . . . 1075
LApp_GetVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
LApp_GetVersionDateTime. . . . . . . . . . . . . . . . . . . . . . . 1073
LApp_SetAllowSelectionOnLockedLayers . . . . . . . . . . . 1098
LApp_SetCacheInstances . . . . . . . . . . . . . . . . . . . . . . . . 1082
LApp_SetCacheInstancesSmallerThanNumOfPixels . . . 1083
LApp_SetExportMaskDataIgnoreHiddenObjects. . . . . . . 1084
LApp_SetFillObjectsDuringDrawing . . . . . . . . . . . . . . . . 1085
LApp_SetHideInstanceInsidesIfLessThanNumOfPixels . 1086
LApp_SetHideObjectsSmallerThanNumOfPixels . . . . . . 1088
LApp_SetHideSmallInstanceInsides . . . . . . . . . . . . . . . . 1089
LApp_SetHideSmallObjects . . . . . . . . . . . . . . . . . . . . . . 1090
LApp_SetInterruptableRendering . . . . . . . . . . . . . . . . . . 1091
LApp_SetRedrawAllWindows . . . . . . . . . . . . . . . . . . . . . 1092
LApp_SetRenderingUseCPUForColorMixing . . . . . . . . . 1095
LApp_SetRenderingUseMMX . . . . . . . . . . . . . . . . . . . . . 1096
LApp_SetRenderingUsePatBltForPatterns . . . . . . . . . . . 1097
LApp_SetShowDesignTimeIncrement. . . . . . . . . . . . . . . 1094
LApp_SetShowDesignWhileRendering . . . . . . . . . . . . . . 1093
LArcDirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543

L-Edit 14 User Guide Section 1723


Chapter 37: Alphabetical List of UPI and LComp Functions

LBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544
LBooleanOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545
LBox_GetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312
LBox_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310
LBox_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
LC_AddPlacementOrientation . . . . . . . . . . . . . . . . . . . . . 1646
LC_AddPolygonPoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682
LC_AddWirePoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1676
LC_Align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1664
LC_CellClose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695
LC_CellExists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696
LC_CellNew. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694
LC_CellOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693
LC_CreateBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1678
LC_CreateCircle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1679
LC_CreatePort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1680
LC_DiskFileDelete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688
LC_DiskFileExists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1687
LC_DiskFileRename . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689
LC_EndPolygon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1683
LC_EndWire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1677
LC_Generate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663
LC_GenerateAlign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666
LC_GetAbutmentType . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
LC_GetCompositionDirection . . . . . . . . . . . . . . . . . . . . . 1649
LC_GetElementHeight. . . . . . . . . . . . . . . . . . . . . . . . . . . 1673
LC_GetElementWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672
LC_GetPlacementOrientation . . . . . . . . . . . . . . . . . . . . . 1645
LC_GetPlacementOverlap. . . . . . . . . . . . . . . . . . . . . . . . 1651
LC_GetPlacementRect . . . . . . . . . . . . . . . . . . . . . . . . . . 1670
LC_GetPlacementRectEX . . . . . . . . . . . . . . . . . . . . . . . . 1671
LC_GetPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668
LC_GetPointEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1669
LC_GetReferencePoint . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
LC_GetXPlacementPosition . . . . . . . . . . . . . . . . . . . . . . 1655
LC_GetXYPlacementPosition . . . . . . . . . . . . . . . . . . . . . 1653
LC_GetYPlacementPosition . . . . . . . . . . . . . . . . . . . . . . 1657
LC_IncrementXPlacementPosition . . . . . . . . . . . . . . . . . 1658
LC_IncrementYPlacementPosition . . . . . . . . . . . . . . . . . 1659
LC_InMicrons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692
LC_Instance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662
LC_InstanceAlign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1665
LC_Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1690
LC_Microns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1691
LC_PlaceMarkerAtCurrentPos . . . . . . . . . . . . . . . . . . . . 1700
LC_Pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686
LC_Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661
LC_PropagatePorts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697

L-Edit 14 User Guide Section 1724


Chapter 37: Alphabetical List of UPI and LComp Functions

LC_Push . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1685
LC_SetAbutmentType . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
LC_SetCompositionDirection. . . . . . . . . . . . . . . . . . . . . . 1648
LC_SetPlacementOrientation . . . . . . . . . . . . . . . . . . . . . 1644
LC_SetPlacementOverlap . . . . . . . . . . . . . . . . . . . . . . . . 1650
LC_SetReferencePoint . . . . . . . . . . . . . . . . . . . . . . . . . . 1640
LC_SetXPlacementPosition. . . . . . . . . . . . . . . . . . . . . . . 1654
LC_SetXYPlacementPosition . . . . . . . . . . . . . . . . . . . . . 1652
LC_SetYPlacementPosition. . . . . . . . . . . . . . . . . . . . . . . 1656
LC_StartPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1681
LC_StartWire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1675
LC_SubtractPlacementOrientation . . . . . . . . . . . . . . . . . 1647
LC_Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1698
LC_TraceFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1699
LCapType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546
LCell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547
LCell_AddMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214
LCell_BooleanOperation . . . . . . . . . . . . . . . . . . . . . . . . . 1217
LCell_CalcMBB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
LCell_ClearGenerateLayers . . . . . . . . . . . . . . . . . . . . . . 1442
LCell_ClearUndoLists . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207
LCell_ClearUserData. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190
LCell_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165
LCell_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1164
LCell_DeleteUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193
LCell_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166
LCell_Flatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
LCell_GenerateLayers. . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
LCell_GenerateLayers_v10_00 . . . . . . . . . . . . . . . . . . . . 1197
LCell_GenerateLayers_v10_10 . . . . . . . . . . . . . . . . . . . . 1199
LCell_GenerateLayersEx00. . . . . . . . . . . . . . . . . . . . . . . 1194
LCell_GenerateLayersEx99. . . . . . . . . . . . . . . . . . . . . . . 1196
LCell_GetAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
LCell_GetBasePoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
LCell_GetCreatedTime . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
LCell_GetDRCNumErrors . . . . . . . . . . . . . . . . . . . . . . . . 1496
LCell_GetDRCStatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1497
LCell_GetFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1167
LCell_GetInfoText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
LCell_GetLastVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
LCell_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
LCell_GetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
LCell_GetMbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187
LCell_GetMbbAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
LCell_GetModifiedTime . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
LCell_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
LCell_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169
LCell_GetOrganization . . . . . . . . . . . . . . . . . . . . . . . . . . 1176

L-Edit 14 User Guide Section 1725


Chapter 37: Alphabetical List of UPI and LComp Functions

LCell_GetParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
LCell_GetShowInLists . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212
LCell_GetTCellPreviousValue . . . . . . . . . . . . . . . . . . . . . 1209
LCell_GetUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
LCell_GetVersion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
LCell_GetView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
LCell_GetVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
LCell_HomeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
LCell_IsChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184
LCell_MakeVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
LCell_MakeVisibleNoRefresh . . . . . . . . . . . . . . . . . . . . . 1006
LCell_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163
LCell_OpenDRCStatistics . . . . . . . . . . . . . . . . . . . . . . . . 1495
LCell_OpenDRCSummary. . . . . . . . . . . . . . . . . . . . . . . . 1494
LCell_OpenExtractStatistics . . . . . . . . . . . . . . . . . . . . . . 1503
LCell_OpenExtractSummary . . . . . . . . . . . . . . . . . . . . . . 1502
LCell_RemoveAllMarkers . . . . . . . . . . . . . . . . . . . . . . . . 1216
LCell_RemoveMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
LCell_RunDRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201
LCell_RunDRCCommandFile . . . . . . . . . . . . . . . . . . . . . 1206
LCell_RunDRCEx00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202
LCell_RunDRCEx01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
LCell_SetAuthor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
LCell_SetBasePoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220
LCell_SetChanged. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
LCell_SetInfoText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
LCell_SetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171
LCell_SetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
LCell_SetOrganization. . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
LCell_SetShowInLists . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211
LCell_SetUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
LCell_SetVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181
LCell_SetView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
LCell_Slice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219
LCell_Slice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222
LCIFParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548
LCircle_GetCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316
LCircle_GetRadius. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317
LCircle_GetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
LCircle_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1314
LCircle_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315
LColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549
LCoord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550
LCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551
LCore_GetCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512
LCore_GetLLHCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513
LCore_GetLLVCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515
LCore_SetLLHCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514

L-Edit 14 User Guide Section 1726


Chapter 37: Alphabetical List of UPI and LComp Functions

LCore_SetLLVCap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1516
LCSV_Run. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539
LCursor_GetPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
LCursor_GetPositionEx99 . . . . . . . . . . . . . . . . . . . . . . . . . 998
LCursor_GetSnappedPosition . . . . . . . . . . . . . . . . . . . . . . 999
LCursorType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552
LCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1553
LDerivationType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559
LDerivedLayerAreaOperation . . . . . . . . . . . . . . . . . . . . . 1554
LDerivedLayerBoolOperation . . . . . . . . . . . . . . . . . . . . . 1556
LDerivedLayerDensityOperation . . . . . . . . . . . . . . . . . . . 1557
LDerivedLayerParam. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
LDerivedLayerParam. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
LDerivedLayerParamEx830. . . . . . . . . . . . . . . . . . . . . . . 1559
LDerivedLayerSelectOperation . . . . . . . . . . . . . . . . . . . . 1561
LDesignRuleFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563
LDesignRuleParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1564
LDialog_AlertBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
LDialog_File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
LDialog_InputBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
LDialog_MsgBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
LDialog_MultiLineInputBox . . . . . . . . . . . . . . . . . . . . . . . . 990
LDialog_MultiLineMsgBox . . . . . . . . . . . . . . . . . . . . . . . . . 986
LDialog_PickList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
LDialog_YesNoBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
LDialogItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1565
LDisplay_Refresh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
LDisplayUnitInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566
LDRC_Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1489
LDrcFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567
LDrcRule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568
LDrcRule_Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1478
LDrcRule_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479
LDrcRule_DestroyParameter. . . . . . . . . . . . . . . . . . . . . . 1487
LDrcRule_Find. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1480
LDrcRule_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481
LDrcRule_GetNext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482
LDrcRule_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . 1485
LDrcRule_SetParameters . . . . . . . . . . . . . . . . . . . . . . . . 1486
LDrcRule_SetRuleSet . . . . . . . . . . . . . . . . . . . . . . . . . . . 1483
LDrcRule_SetTolerance . . . . . . . . . . . . . . . . . . . . . . . . . 1484
LDrcRuleType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569
LDrcStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570
LEntity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571
LEntity_AssignBlobProperty . . . . . . . . . . . . . . . . . . . . . . 1250
LEntity_AssignProperty . . . . . . . . . . . . . . . . . . . . . . . . . . 1249
LEntity_BrowseProperties . . . . . . . . . . . . . . . . . . . . . . . . 1257
LEntity_CopyAllProperties . . . . . . . . . . . . . . . . . . . . . . . . 1253

L-Edit 14 User Guide Section 1727


Chapter 37: Alphabetical List of UPI and LComp Functions

LEntity_DecompressBlobToFile . . . . . . . . . . . . . . . . . . . 1269
LEntity_DeleteAllProperties . . . . . . . . . . . . . . . . . . . . . . . 1252
LEntity_DeleteProperty . . . . . . . . . . . . . . . . . . . . . . . . . . 1251
LEntity_GetFirstProperty . . . . . . . . . . . . . . . . . . . . . . . . . 1254
LEntity_GetNextProperty . . . . . . . . . . . . . . . . . . . . . . . . . 1255
LEntity_GetPropertyType . . . . . . . . . . . . . . . . . . . . . . . . 1246
LEntity_GetPropertyValue . . . . . . . . . . . . . . . . . . . . . . . . 1248
LEntity_GetPropertyValueSize . . . . . . . . . . . . . . . . . . . . 1247
LEntity_LoadBlobProperty . . . . . . . . . . . . . . . . . . . . . . . . 1258
LEntity_PropertyExists. . . . . . . . . . . . . . . . . . . . . . . . . . . 1245
LEntity_ReadPropertiesFromFile. . . . . . . . . . . . . . . . . . . 1260
LEntity_SaveBlobProperty. . . . . . . . . . . . . . . . . . . . . . . . 1259
LEntity_SetCurrentProperty. . . . . . . . . . . . . . . . . . . . . . . 1256
LEntity_StoreAsCompressedBlob . . . . . . . . . . . . . . . . . . 1268
LEntity_StringToValidPropertyName . . . . . . . . . . . . . . . . 1262
LEntity_ValidPropertyNameToString . . . . . . . . . . . . . . . . 1264
LEntity_WritePropertiesToFile . . . . . . . . . . . . . . . . . . . . . 1266
LEnvironment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572
LExtract_GetOptions_Ex840 . . . . . . . . . . . . . . . . . . . . . . 1507
LExtract_GetOptions_Ex98 . . . . . . . . . . . . . . . . . . . . . . . 1506
LExtract_Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499
LExtract_Run_Dialog. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1500
LExtract_RunCommandFile. . . . . . . . . . . . . . . . . . . . . . . 1501
LExtract_RunEx840. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504
LExtract_SetOptionsEx840 . . . . . . . . . . . . . . . . . . . . . . . 1509
LExtractOptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573
LExtractOptionsEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575
LFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578
LFile_ClearUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145
LFile_Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107
LFile_DeleteUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144
LFile_DisplayCellBrowser . . . . . . . . . . . . . . . . . . . . . . . . 1146
LFile_DispUtoIntU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
LFile_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108
LFile_GetAuthor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115
LFile_GetBinSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1490
LFile_GetCIFParameters. . . . . . . . . . . . . . . . . . . . . . . . . 1472
LFile_GetColorPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . 1464
LFile_GetColorPaletteNumColors . . . . . . . . . . . . . . . . . . 1465
LFile_GetColorPaletteSortBy. . . . . . . . . . . . . . . . . . . . . . 1466
LFile_GetCurveSetup . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137
LFile_GetDesignRuleFlags . . . . . . . . . . . . . . . . . . . . . . . 1148
LFile_GetDisplayUnitInfo . . . . . . . . . . . . . . . . . . . . . . . . . 1156
LFile_GetDrcFlags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492
LFile_GetEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
LFile_GetFabricationCell . . . . . . . . . . . . . . . . . . . . . . . . . 1117
LFile_GetGDSParameters. . . . . . . . . . . . . . . . . . . . . . . . 1475
LFile_GetGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129

L-Edit 14 User Guide Section 1728


Chapter 37: Alphabetical List of UPI and LComp Functions

LFile_GetGrid_v10_00. . . . . . . . . . . . . . . . . . . . . . . . . . . 1131
LFile_GetGridEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
LFile_GetInfoText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
LFile_GetLayoutVersion . . . . . . . . . . . . . . . . . . . . . . . . . 1121
LFile_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
LFile_GetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111
LFile_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114
LFile_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
LFile_GetOrganization. . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
LFile_GetResolvedFileName. . . . . . . . . . . . . . . . . . . . . . 1150
LFile_GetSelectionParam . . . . . . . . . . . . . . . . . . . . . . . . 1140
LFile_GetSetupVersion . . . . . . . . . . . . . . . . . . . . . . . . . . 1123
LFile_GetTechnology. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453
LFile_GetTechnologyEx840 . . . . . . . . . . . . . . . . . . . . . . 1460
LFile_GetUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142
LFile_GetVisible. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
LFile_IntUtoDispU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158
LFile_IntUtoLocU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
LFile_IntUtoMicrons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
LFile_IsChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
LFile_LocUtoIntU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1154
LFile_MicronsToIntU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
LFile_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
LFile_Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103
LFile_OpenCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104
LFile_Save. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
LFile_SaveAs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
LFile_SetAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116
LFile_SetBinSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491
LFile_SetChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155
LFile_SetCIFParameters . . . . . . . . . . . . . . . . . . . . . . . . . 1473
LFile_SetColorPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . 1467
LFile_SetColorPaletteNumColors . . . . . . . . . . . . . . . . . . 1468
LFile_SetColorPaletteSortBy . . . . . . . . . . . . . . . . . . . . . . 1469
LFile_SetCurveSetup. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
LFile_SetDesignRuleFlags . . . . . . . . . . . . . . . . . . . . . . . 1149
LFile_SetDisplayUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157
LFile_SetDrcFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493
LFile_SetEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128
LFile_SetFabricationCell . . . . . . . . . . . . . . . . . . . . . . . . . 1118
LFile_SetGDSParameters . . . . . . . . . . . . . . . . . . . . . . . . 1476
LFile_SetGrid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134
LFile_SetGrid_v10_00 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132
LFile_SetGridEx840. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
LFile_SetInfoText. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126
LFile_SetLastCurrent. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1147
LFile_SetLayoutVersion. . . . . . . . . . . . . . . . . . . . . . . . . . 1122
LFile_SetLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112

L-Edit 14 User Guide Section 1729


Chapter 37: Alphabetical List of UPI and LComp Functions

LFile_SetOrganization . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120
LFile_SetSelectionParam . . . . . . . . . . . . . . . . . . . . . . . . 1141
LFile_SetSetupVersion . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
LFile_SetTechnology . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1454
LFile_SetTechnologyEx840. . . . . . . . . . . . . . . . . . . . . . . 1461
LFile_SetTechnologyLambdaDenom . . . . . . . . . . . . . . . 1459
LFile_SetTechnologyLambdaNum . . . . . . . . . . . . . . . . . 1458
LFile_SetTechnologyName . . . . . . . . . . . . . . . . . . . . . . . 1455
LFile_SetTechnologyUnitDenom . . . . . . . . . . . . . . . . . . . 1457
LFile_SetTechnologyUnitName . . . . . . . . . . . . . . . . . . . . 1462
LFile_SetTechnologyUnitNum . . . . . . . . . . . . . . . . . . . . . 1456
LFile_SetUserData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143
LFileType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579
LFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
LFormatV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
LFormatV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
LGDSParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1580
LGeomType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581
LGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582
LGrid_v10_00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1585
LGridEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583
LInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587
LInstance_Delete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226
LInstance_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1229
LInstance_FindNext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1230
LInstance_Generate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241
LInstance_GenerateV . . . . . . . . . . . . . . . . . . . . . . . . . . . 1242
LInstance_GetCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235
LInstance_GetDelta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239
LInstance_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231
LInstance_GetMbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1240
LInstance_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1233
LInstance_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232
LInstance_GetRepeatCount . . . . . . . . . . . . . . . . . . . . . . 1238
LInstance_GetTransform . . . . . . . . . . . . . . . . . . . . . . . . . 1236
LInstance_GetTransform_Ex99. . . . . . . . . . . . . . . . . . . . 1237
LInstance_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224
LInstance_New_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225
LInstance_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227
LInstance_Set_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1228
LInstance_SetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234
LJoinType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1588
LLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589
LLayer_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
LLayer_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403
LLayer_DestroyDerivedParameter . . . . . . . . . . . . . . . . . 1438
LLayer_DestroyDerivedParameterEx840 . . . . . . . . . . . . 1440
LLayer_DisableAllDerived . . . . . . . . . . . . . . . . . . . . . . . . 1433

L-Edit 14 User Guide Section 1730


Chapter 37: Alphabetical List of UPI and LComp Functions

LLayer_EnableAllDerived . . . . . . . . . . . . . . . . . . . . . . . . 1432
LLayer_Find. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1404
LLayer_FindGDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405
LLayer_GetCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1418
LLayer_GetCurrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422
LLayer_GetDerivedList . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
LLayer_GetDerivedNext . . . . . . . . . . . . . . . . . . . . . . . . . 1430
LLayer_GetDerivedParameters . . . . . . . . . . . . . . . . . . . . 1434
LLayer_GetDerivedParametersEx830. . . . . . . . . . . . . . . 1435
LLayer_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
LLayer_GetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410
LLayer_GetNext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407
LLayer_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
LLayer_GetParametersEx830 . . . . . . . . . . . . . . . . . . . . . 1413
LLayer_GetRenderingAttribute . . . . . . . . . . . . . . . . . . . . 1449
LLayer_GetRenderingObjectName . . . . . . . . . . . . . . . . . 1451
LLayer_GetRho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1420
LLayer_GetSpecial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424
LLayer_IsDerived. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431
LLayer_MoveLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426
LLayer_New. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
LLayer_PrecedingLayer. . . . . . . . . . . . . . . . . . . . . . . . . . 1408
LLayer_PrecedingLayerEx99 . . . . . . . . . . . . . . . . . . . . . 1409
LLayer_SetCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419
LLayer_SetCurrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423
LLayer_SetDerivedParameters . . . . . . . . . . . . . . . . . . . . 1436
LLayer_SetDerivedParametersEx00 . . . . . . . . . . . . . . . . 1437
LLayer_SetName. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411
LLayer_SetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . 1415
LLayer_SetParametersEx830 . . . . . . . . . . . . . . . . . . . . . 1416
LLayer_SetRenderingAttribute . . . . . . . . . . . . . . . . . . . . 1450
LLayer_SetRenderingAttribute . . . . . . . . . . . . . . . . . . . . 1450
LLayer_SetRho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421
LLayer_SetSpecial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
LLayerParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1590
LLayerParam_Ex830 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591
LLayerViewStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1593
LLen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594
LMacro_BindToHotKey . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
LMacro_BindToMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
LMacro_BindToMenuAndHotKey_v9_30 . . . . . . . . . . . . 1011
LMacro_GetNewTCell . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
LMacro_IsLoaded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
LMacro_Load. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
LMacro_LoadEx1200. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
LMacro_Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
LMacro_Unload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
LMagnification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595

L-Edit 14 User Guide Section 1731


Chapter 37: Alphabetical List of UPI and LComp Functions

LMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596
LMarkerParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597
LMarkerParam_V11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598
LObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600
LObject_Area. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281
LObject_ChangeLayer. . . . . . . . . . . . . . . . . . . . . . . . . . . 1287
LObject_ConvertToPolygon. . . . . . . . . . . . . . . . . . . . . . . 1289
LObject_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290
LObject_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1271
LObject_DistanceToPoint . . . . . . . . . . . . . . . . . . . . . . . . 1293
LObject_GetGDSIIDataType . . . . . . . . . . . . . . . . . . . . . . 1284
LObject_GetGeometry. . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
LObject_GetInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276
LObject_GetLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283
LObject_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272
LObject_GetMbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277
LObject_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
LObject_GetShape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1278
LObject_GetVertexList. . . . . . . . . . . . . . . . . . . . . . . . . . . 1280
LObject_Perimeter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
LObject_SetGDSIIDataType . . . . . . . . . . . . . . . . . . . . . . 1285
LObject_SnapToGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
LObject_SnapToMfgGrid . . . . . . . . . . . . . . . . . . . . . . . . . 1292
LObject_Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274
LObject_Transform_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . 1275
LOrientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601
LOrientation_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602
LOutlineStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603
LPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1604
LPass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605
LPass_GetList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445
LPass_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446
LPass_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . . . 1447
LPass_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444
LPass_SetParameters. . . . . . . . . . . . . . . . . . . . . . . . . . . 1448
LPassMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606
LPassParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607
LPassType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1608
LPie_CreateNew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1320
LPie_GetParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
LPie_SetParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
LPieParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609
LPoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1610
LPoint_Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1520
LPoint_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519
LPoint_Subtract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1521
LPoint_Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522
LPoint_Transform_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . 1523

L-Edit 14 User Guide Section 1732


Chapter 37: Alphabetical List of UPI and LComp Functions

LPolygon_CircleToPolygon . . . . . . . . . . . . . . . . . . . . . . . 1346
LPolygon_HasCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347
LPolygon_New. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
LPolygon_RemoveAllCurves . . . . . . . . . . . . . . . . . . . . . . 1348
LPolygon_StraightenAllCurves . . . . . . . . . . . . . . . . . . . . 1349
LPolygon_WireToPolygon . . . . . . . . . . . . . . . . . . . . . . . . 1345
LPort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611
LPort_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352
LPort_Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1353
LPort_FindNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354
LPort_GetLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1360
LPort_GetList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
LPort_GetMbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1361
LPort_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
LPort_GetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362
LPort_GetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357
LPort_GetTextAlignment . . . . . . . . . . . . . . . . . . . . . . . . . 1365
LPort_GetTextSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359
LPort_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
LPort_Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363
LPort_SetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358
LPort_SetTextAlignment . . . . . . . . . . . . . . . . . . . . . . . . . 1366
LPort_SetTextSize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
LPropertyType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612
LRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613
LRect_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525
LRect_Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526
LRect_Transform_Ex99. . . . . . . . . . . . . . . . . . . . . . . . . . 1527
LRenderingAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1614
LRenderingAttributeIndex . . . . . . . . . . . . . . . . . . . . . . . . 1615
LSelection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1616
LSelection_AddAllObjectsInRect . . . . . . . . . . . . . . . . . . . 1380
LSelection_AddAllObjectsOnLayer . . . . . . . . . . . . . . . . . 1378
LSelection_AddObject . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375
LSelection_ChangeLayer . . . . . . . . . . . . . . . . . . . . . . . . 1385
LSelection_Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1372
LSelection_Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1370
LSelection_Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
LSelection_DeselectAll . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
LSelection_Duplicate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387
LSelection_Flatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390
LSelection_FlipHorizontal . . . . . . . . . . . . . . . . . . . . . . . . 1392
LSelection_FlipVertical . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
LSelection_GetLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384
LSelection_GetList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
LSelection_GetNext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383
LSelection_GetObject . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377
LSelection_Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388

L-Edit 14 User Guide Section 1733


Chapter 37: Alphabetical List of UPI and LComp Functions

LSelection_Merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
LSelection_Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
LSelection_PasteToLayer . . . . . . . . . . . . . . . . . . . . . . . . 1371
LSelection_RemoveAllObjectsInRect . . . . . . . . . . . . . . . 1381
LSelection_RemoveAllObjectsOnLayer. . . . . . . . . . . . . . 1379
LSelection_RemoveObject . . . . . . . . . . . . . . . . . . . . . . . 1376
LSelection_Rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396
LSelection_RotateAroundPoint . . . . . . . . . . . . . . . . . . . . 1397
LSelection_SelectAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1373
LSelection_SliceHorizontal . . . . . . . . . . . . . . . . . . . . . . . 1394
LSelection_SliceVertical . . . . . . . . . . . . . . . . . . . . . . . . . 1395
LSelection_SnapToMfgGrid. . . . . . . . . . . . . . . . . . . . . . . 1399
LSelection_UnGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389
LSelectionParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617
LShapeType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1618
LSpecialLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1619
LStatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1620
LStatusBar_SetMsg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001
LStipple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1621
LTechnology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623
LTechnologyEx840 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624
LTorus_CreateNew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325
LTorus_GetParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
LTorus_SetParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328
LTorusParams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625
LTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1626
LTransform_Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533
LTransform_Add_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . 1534
LTransform_Ex99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627
LTransform_GetInverse. . . . . . . . . . . . . . . . . . . . . . . . . . 1537
LTransform_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1529
LTransform_Set_Ex99. . . . . . . . . . . . . . . . . . . . . . . . . . . 1530
LTransform_Subtract . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535
LTransform_Subtract_Ex99. . . . . . . . . . . . . . . . . . . . . . . 1536
LTransform_Zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531
LTransform_Zero_Ex99. . . . . . . . . . . . . . . . . . . . . . . . . . 1532
LUpi_GetReturnCode . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
LUpi_GetSerialNumber . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
LUpi_GetUpdateDisplayMode . . . . . . . . . . . . . . . . . . . . . 1032
LUpi_InQuietMode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
LUpi_InsertMenuItemSeparator. . . . . . . . . . . . . . . . . . . . 1027
LUpi_SetDrawingTool . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
LUpi_SetQuietMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
LUpi_SetReturnCode. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028
LUpi_SetSelectionTool . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
LUpi_SetUpdateDisplayMode . . . . . . . . . . . . . . . . . . . . . 1031
LVertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628
LVertex_Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1300

L-Edit 14 User Guide Section 1734


Chapter 37: Alphabetical List of UPI and LComp Functions

LVertex_AddCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302
LVertex_Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
LVertex_GetArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296
LVertex_GetCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295
LVertex_GetCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
LVertex_GetCurveEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304
LVertex_GetCurveExactCenter . . . . . . . . . . . . . . . . . . . . 1305
LVertex_GetNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297
LVertex_GetPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
LVertex_HasCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306
LVertex_RemoveCurve . . . . . . . . . . . . . . . . . . . . . . . . . . 1308
LVertex_SetCurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
LVertex_SetPoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299
LWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629
LWindow_Close. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
LWindow_CloseAll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
LWindow_EditInPlacePopOut . . . . . . . . . . . . . . . . . . . . . 1044
LWindow_EditInPlacePopToTop . . . . . . . . . . . . . . . . . . . 1045
LWindow_EditInPlacePushIn. . . . . . . . . . . . . . . . . . . . . . 1043
LWindow_GetCell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
LWindow_GetEditTransform . . . . . . . . . . . . . . . . . . . . . . 1049
LWindow_GetFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
LWindow_GetList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
LWindow_GetName. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
LWindow_GetNext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038
LWindow_GetParameters . . . . . . . . . . . . . . . . . . . . . . . . 1051
LWindow_GetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
LWindow_GetTopCell . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
LWindow_GetType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046
LWindow_GetVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036
LWindow_GetWindowHandle . . . . . . . . . . . . . . . . . . . . . 1052
LWindow_IsLast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
LWindow_LoadTextFile . . . . . . . . . . . . . . . . . . . . . . . . . . 1054
LWindow_MakeVisible. . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
LWindow_NewTextWindow . . . . . . . . . . . . . . . . . . . . . . . 1053
LWindow_SaveToFile . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
LWindow_SetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059
LWindow_SetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057
LWindowType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630
LWire_GetCapType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333
LWire_GetJoinType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
LWire_GetLength. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
LWire_GetMiterAngle . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335
LWire_GetResistance . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338
LWire_GetSquares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
LWire_GetWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332
LWire_New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331
LWire_SetCapType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341

L-Edit 14 User Guide Section 1735


Chapter 37: Alphabetical List of UPI and LComp Functions

LWire_SetJoinType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340
LWire_SetMiterAngle. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342
LWire_SetWidth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339
LWireConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631
LWireConfigBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632
LWireParam. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633
tech_unit_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622
UPIDrawingToolType. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634

L-Edit 14 User Guide Section 1736


Index

SYMBOLS aligning to manufacturing grid, 187


by aligning objects, 194
.include statement, 893 creating, 259, 281, 288
.model statement, 894 creating from regular cells, 63
creating in Edit > Objects, 259
editing, 260
editing by stretching, 63
NUMERICS GDSII name for, 165
3-D data generated, 304
in DXF files, 150 grouping instances to create, 281
45-degree layout instances, comprising, 259
design rule checking, 479 instances, creating from, 259
45-degree objects in generated layers, 377 of contact cells, 308
of vias, 308
ungrouping, 282
using the command line, 226
A visibility of, 103
arrays, creating, 288
abutment ports
ASIC design, 926
in pad cells, 449
auto-generated cells See T-Cell
in standard cells, 445
automatic layer generation, 328
abutment ports (SPR)
automorph classes, 880, 933
in core cells, 404
detailed trial matching, 934
abutment type, 1638
example of detailed trial matching, 921
activating drawing tools, 171
fanout, 921
active net, 352
hierarchical information, 921
acute angles, 468
output example, 920
add mode, 92
parameter matching, 935
adding a macro, 954
prematch files, 934
adding wire sections, 202
resolving fragmentation, 922
Add-Ins
auto-panning, 119
Area Calculator, 392
auto-routing
Count Objects, 375
breakouts, 339
GDS Properties, 164
non-routing layers, 332
I/O Pad Cross Reference, 273
routing layers, 332
Legacy Layer Generation, 376
Load Calibre® DRC Results Database, 863
PostScript Mask Separation, 158
Text Resize, 168 B
Transfer File Info to Cells, 138
Aerial View toolbar, 52 base point
algorithms, 936 locating by coordinates, 285
Alignment toolbar, 47 moving objects with respect to, 283, 284
anchor point, 172 setting, 285
AND operation, 315 Base Point toolbar, 48
antenna checks, 715 batch-file syntax, 939
application parameters, 60 batch files, 914
arrays, 259 batch mode, 914

L-Edit 14 User Guide 1737


Index C

bevel style (wire joins), 98 Revert Cell, 244


bin size cell clustering, 418
with Extract, 381 cell grouping in SPR, 418
with Generate Layers, 376, 834 cell hierarchy
binding macros bottom up, 236
to hot keys, 971 display, 235
to menu items, 971 displaying or copying, 238
BJT printing, 241
syntax in EXT file, 844 top down, 235
Boolean operators for generated layers viewing, 233
AND, 315 cell information, 250
Grow, 316 copying from file information, 138
NOT, 315, 321 Cell Instance, 86
OR, 315, 320 cell mapping (SPR), 403, 410
order of operations, 317 cell-cell spacing (SPR), 416
shrink, 316 cell-power spacing (SPR), 416
Boolean/Grow Operations, 196 cells
boxes See also T-Cell
drawing, 172 "clipcut", 249
editing, 209 arrays, 259
merging, 196 buffer, 407
nibbling, 195 chip cell in SPR, 428
breakouts clip out regions, 248
placed by the autorouter, 336 clustering, 418
buffer cells, 407, 452, 453 conflict resolution in naming, 247
input ports in, 453 copying, 240, 245, 247, 288
butt style (wire ends), 98 copying a region of, 249
creating, 241
cross referencing, 241
C cross-referencing, 86
deleting, 249
Calibre results in L-Edit, 863 DRC status, 238
Calibre Results Viewing Environment (RVE), 868 excluding from DRC, 483
callbacks fabrication, 234
for T-Cells, 297 flattening, 282
calls generated, See T-Cell
in CIF, 159 ground pad, 422, 450
CAP format, 460 hidden, 246
capacitance, 438 information, 250
calculation (SPR), 438 instancing, 240, 255
capacitor instancinginstances
syntax in EXT file, 842 creating, 256
CDL Files, 913 layer conflicts, 247
Cell, 250 listing layers with geometry, 251
Save Cell to File, 248 listing objects in by layer, 251
Cell > locked, 234
Close As, 245 locking, 240
Copy, 246 naming conflicts, 247
Delete, 249 new, 241
Fabricate, 273 opening, 243
Flatten, 261, 262 overwriting, 247
Info, 250 renaming, 245, 247
Instance, 255, 256, 258 replacing, 265
New, 241 reverting, 244
Open, 243 saving, 244, 248
Rename, 245 show in lists, 243

L-Edit 14 User Guide 1738


Index C

standard, 398 sc, 225


tie-to-ground, 412 text, 231
tie-to-power, 412 width, 231
version number, increasing & decreasing, 251 command line scripting, 232
channel base name, 413 command-line arguments, 38
channel pitch, 415 change current directoy, 39
chip cells in SPR, 428 disable file association, 39
CIF, 158, 162 hide splash screen, 39
calls, 159 ignore configuration, 39
extensions, 162 ignore directory pointer, 38
geometric primitives, 159 load macro, 39
layer names, 161 register without launch, 39
layers, 161 command-line invocation (for LVS), 939
restrictions, 162 commuter licenses, 41
scaling, 163 commuter licensing, 41
symbols, 158 comparing fragmented classes, 933
wires, 162 compiled macros
CIF extensions, 156 creating, 958
CIF files, 146, 149, 154, 156, 157, 158 composition, 1636
Exporting CIF Files, 156 composition direction, 1638
Importing CIF files, 149 configuration files
CIF format contents, 61
compatible wire styles, 100 editing, 60
fabrication cell, 272 saving, 60
circle approximation conflict resolution
in GDSII, 155, 163, 166 cell names, 247
circles connecting segments
drawing, 172 DXF import, 150, 151
editing, 215 consider parameters (LVS command-line option), 940
circular dependency constraints
in XrefCells, 272 in SPR core generation, 434
class separations, 932 contact cells
clear mode, 92 creating arrays of, 308
clearing objects on generated layers, 329 generated, 304
clip out regions, 248 Converting Objects to Polygons, 198
clipcut converting polygons to boxes, 149
in cell names, 249 coordinate system
clock routing, 406 display, 51, 63
closing files, 129 units, 51
clusters (SPR) coordinates, 51
illustrated, 418 copying
color index, 59 cells, 240, 245
color parameters, 59 objects, 288
command line commands to the Windows clipboard, 289
!!, 225 copyrights
array, 226 adding to layout, 142, 144
box, 227 core generation
copy, 227 constraints in SPR, 434
goto, 228 design rules, illustrated, 416
instance, 228 core with signal ports, illustrated, 404
layer, 228 corner pad cells, 451
move, 229 Create/Update T-Cell Code, 239
paste, 229 creating
path, 229 compiled macros, 958
polygon, 230 files, 126
run, 231 interpreted macros, 956

L-Edit 14 User Guide 1739


Index D

layout palette, 971 clearing error markers, 858


resources for layout palette, 972 density rules, 467
critical nets, 456 exact width rules, 465
in SPR, 417, 458 Excluding Cells from DRC, 483
criticality, 417 extension rules, 466
in EDIF, 458 finding error markers, 858
cross ports, 390 generated layers, 464
cross referencing minimum width rules, 465
cells, 241 not exist rules, 465
cross-section optimization, 474
with etch, 120 overlap rules, 466
with grow/deposit, 120 performance optimization, 474
with implant/diffuse, 121 region-only check, 479
operation of, 121 rule exceptions, 467
process definition files for, 120 rule sets, 476
process steps, 120 setup, 463
single-step display, 123 spacing rules, 465
curve approximation, 187 surround rules, 466
curved polygons types of rules, 464
straightening curves, 172 design rule sets
curves creating, 463
converting to polgons in DXF, 157 editing, 463
drawing, 176 merging, 463
in GDSII, 163 design rule types, 464
customer support, 41 design rule violations
customized elements, 929 clearing, 858
finding, 858
design rules
D core (SPR), 415
density, 467
data types exact width, 465
GDSII, 165 exceptions, 467
debugging macros extension, 466
interpreted, 960 minimum width, 465
default text size, 84 not exist, 465
defining, 87 overlap, 466
deleting pad routing, 429
cells, 249 spacing, 465
objects, 289 specifying, 471
objects on generated layers, 329 surround, 466
density design rules, 467 designs
deselection flat, 255
cycling, 276 detailed trial matching, 934
edge, 276 example, 921
explicit, 275, 278 output, 922
hidden layers, 279 Details button, 50
implicit, 276, 279 diagnostic functions
range, 82, 83 running, 41
universal, 279 diode
design file in SPR, 401 syntax in EXT file, 845
design flow display
in SPR, 399, 401 updates to, 68, 955, 1031–1032
Design Navigator, 233 display grid, 79
Show all cells, 233 displaying layout interface elements, 103
design rule checking Draw
45-degree layout, 479 Clip Out Region, 248

L-Edit 14 User Guide 1740


Index E

Layout Text Generator, 142, 144 connecting segments, 150


Wire Utilities, 202 dynamic-link library, 954
Draw >
Add Wire Section, 202
Flip, 287
Force Move, 285
E
Group, 281 edge selection, 276
Layout Generator, Import Images, 152 EDIF format, 455
Merge, 196 Edit >
Move By, 283, 284 Clear, 290
Nibble, 195 Clipboard, 289
Nudge, 284 Copy, 288
Pick Layer, 171 Cut, 289
Rotate, 286 Deselect All, 279
Slice, 194 Duplicate, 288
Ungroup, 282 Edit In-Place, 265
draw operation Edit Object(s), 207
nudging at fixed amount, 284 Find, 276, 279
selecting a reference point, 285 Find Next, 280
Draw> Find Previous, 280
Base Point, 285 Paste, 289
drawing Paste to Layer, 289
automatic selection, 83 Push to Object, 266
boxes, 172 Redo, 290
changing mode while drawing, 172 Select All, 278
circles, 172 Undo, 290
curves, 176 Edit > Goto, 898
directional constraints, 171 edit operations
layer constraints, 172 flipping, 286
objects, 172 rotating, 286
pie wedges, 172 editing
polygons, 173 aligning objects, 187
ports, 180 boxes, 209
rulers, 180 changing mode during operation, 172
tori, 173 circles, 215
wires, 173 directional constraints, 171, 181
drawing objects, 233 edit range, 83
Drawing toolbar, 45 graphical, 181
drawing tools, 171 multiple objects, 181, 207
selecting, 171 objects in place, 265
DRC polygons, 211
disabling rules, 475 ports, 218
Excluding Cells from DRC, 483 rulers, 220
false errors, 480 textual, 206
DRC rules tiling objects, 187
Hole, 319 wires, 214
inside, 319 effective channel pitch, 415
outside, 319 electrical models, 461
driving force, 419 element description file (LVS command-line option), 941
duplicating objects, 288 element description file, example, 929
DXF files elements, LComp, 1636
connecting segments, 151 Elmore delay, 438
converting polylines, 151 engineering change orders (ECO), 330
Exporting DXF Files, 157 errors
Importing DXF files, 149 design rule checking, 474
DXF import exact width design rules, 465

L-Edit 14 User Guide 1741


Index F

example files EDIF, 455


installing, 41 GDSII, 163
exchanging views, 120 LVS output file, 902
explicit deselection, 278 node and element list file, 903
explicit selection and deselection, 275 SDF, 423, 459
exporting files, 153, 154 SPICE, 903
CIF, 154, 156, 157, 158 TDB, 131
GDSII, 154 TPR, 454
PostScript, 202 XST, 124
extend style (wire ends), 98 file information
extending selection, 276 accessing, 137
extending wires, 202 transfering to cells, 138
extension design rule, 466 file parameters, 84, 86
extension design rules, 466 files, 126
external verification interface (EVI), 868 closing, 129
Extract creating, 126
General, 380 exiting, 145
Output, 382 exporting, 153
Subcircuit, 384 importing, 146
extract definition file locking, 882
comments, 840 new, 126
connections, 840 opening, 127
devices, 841 saving, 129
extract definition files, 829, 839 startup, 38
extraction filtering
capabilities defined, 829 hiding layers
configuring, 829 filtering, 106
defining capacitance for resistors and capacitors, 835 Find Next/Find Previous, 280
defining devices and connections, 833 finding, 834
subcircuit recognition, 379, 386, 839 extract, 834
finding devices and nodes
node, 834
F finding objects, 279
flattening hierarchy, 261
fabrication cell, 272 Flip/Rotate commands, 286
fabrication cells Force Move command, 285
I/O Pad Cross Reference, 273 forcing a move over an edit, 285
fanout, 921 forward references
fast iteration (LVS command-line option), 943 forward references
File > in CIF, 162
Close, 129 Fracturing Polygons, 202
Exit, 145 fracturing polygons, 155
Export Mask Data, 154, 156, 157 curves
Import Mask Data, 146, 149 converting, 154
Info, 137 fragmented classes, 932
New, 126 comparing, 933
Open, 128 output, 924, 933
Print, 131 resolving, 925
Print Preview, 136 fringe capacitance
Print Setup, 135 in capacitance file, 438
Replace Setup, 54 in SDF file, 435
Save, 129
Save As, 130
file formats G
CAP, 438, 460
CIF, 158 GaASFET

L-Edit 14 User Guide 1742


Index H

syntax in EXT file, 845, 846 graphical editing, 181


GDII export options, 86 graphical repositioning, 282
GDSII, 154 grid
arrays, naming, 165 parameters, 79
circle approximation in, 163, 166 ground pad cell, 422, 448, 450
circle approximations in, 155 ground rail width, 420
curves, 163 ground signal
data type, assignment for ports, 219 in SPR, 409
data type, assignment of, 166, 289 grouping instances, 281
data types, 88, 165, 166 grouping objects, 280
exporting GDS Files, 153 Grow operation, 316
file format, 163 guard rings
format, 165 fracturing, 306
compatible wire styles, 100 generated, 304, 309
format, wires, 167
importing files, 146
layer number display, 109
layer numbers, listing, 95
H
layer setup, 88 header files (for UPI), 68, 955, 956
numbers, 88 Help >
port text sizing, 168 About L-Edit, 43
properties,editing, 164 hidden cells, 243
wire formats, 167 hidden layers
wire styles, 100 and geometry flags, 472
GDSII files hiding all, 112
importing, 146, 149, 156 hiding all but one layer, 112
generated cells, 291 hiding generated layers, 113
See also T-Cell hiding one layer, 112
arrays, 304 in Setup Layers dialog, 113
contact cells, 304 ports on, 103
guard rings, 304 selecting and deselecting, 279
vias, 304 setting, 112
generated layers when copying cells, 248
45-degree objects and, 377 hiding
AND operation, 315 insides, 115
defining, 314 layers, 111
design rule checking, 464 objects, 104
for DRC and Extract, 328 hierarchical design, 233
for extract, 376 hierarchical information in automorph classes, 921
Grow operation, 316 hierarchical lock/unlock, 240
legacy, 376 hot keys
NOT operation, 315, 321 binding macros to, 971
OR operation, 315, 320 HStretch, 292
removing generated layers, 329
showing and hiding, 329
shrink operation, 316
geometric primitives I
in CIF, 159 I/O Pad Cross Reference, 273
global input signal routing, 406, 434 I/O signals
cell design for, 452 in EDIF, 457
illustrated, 408 of SPR core, 421, 457
global signal buses, 406 ignore bulk nodes (LVS command-line option), 940
global signal ports, 406, 452 implicit deselection, 279
global signal rail, 407 implicit selection and deselection, 276
Goto, 119, 898 importing files, 146
granularity (LVS command-line option), 942 CIF, 146, 149, 156

L-Edit 14 User Guide 1743


Index J

GDSII, 146, 149, 156 keyword groups, 76


Laker format, 57 keywords, 76
Virtuoso format, 56
include files, 956
indent middle rows, 434, 435
indent ratio, 435
L
inductor label nodes with ports, 435, 437
syntax in EXT file, 844 launching L-Edit, 38
ini file launching LVS, 880
saving to a text file, 65 layer palette
INI files filtering, 106
contents, 61 layer setup, 55
editing, 60 importing from Laker, 57
saving, 60 importing from Virtuoso, 56
initializing setup layer spacing
SPR, 411 in core routing, 416
input file types, 881 in pad routing, 430
inside, 319 layer-cell spacing (SPR), 416
insides layer-core spacing (SPR), 416
hiding, 115 layer-pad spacing (SPR), 416
showing, 115 layers, 87
instances, 233, 255 adding, 87
arrays of, 259 changing palette displays, 107
editing, 260 choosing active, 107
excluding from DRC, 483 CIF, 161
flattening, 261 CIF names, 161
in hierarchical design, 233 displaying, 107
naming, 262 GDSII layer number display, 109
T-Cell parameters GDSII numbers for, 95
toggling selectivity, 276 generating, 376
ungrouping, 282 hidden, 108, 109
instancing hidden, deselection of, 279
cells, 240 hiding, 111
internal units, 78 listing, 95
interpad connections, 450 listing cells with geometry, 251
interpreted macros listing types of objects on, 138
creating, 956 locked, 108
debugging, 960 locking, 109, 114, 282, 329
running, 956 locking & unlocking, 114
merging, 288
merging setups, 58
J protected, 108, 109
rendering, 89
JFET reports on, 95
syntax in EXT file, 846 selecting, 171
joining wires, 204 setting icon size in palettes, 63
setup, 87
showing, 111
K sorting in the palettes, 108
special layers, 96
keyboard assignments unknown, 248
writing to a configuration file, 65 layer-to-layer capacitance, 413
keyboard settings layout area, 52
Setup Application, 64 layout comparison, 821
keyboard shortcuts layout files
print to a text file, 65 in SPR, 402

L-Edit 14 User Guide 1744


Index M

layout palette MBB


creating, 971 setting for an instance, 267
creating resources for, 972 MEMS design example, 929
layout style (wire joins), 98 menu items
LComp functions, 1636 binding macros to, 971
lcomp.h file, 956 menus, 884
ldata.h file, 956 merging objects, 196
leaf-level, 115 MESFET
L-Edit program icon, 38 syntax in EXT file, 845, 846
Legacy Layer Generation, 376 minimum bounding box, 224
leyers minimum width design rules, 465
defining, 87 mirror ports, 452
library files, 86 mirroring, 451
licensing, commuter, 41 miter style (wire joins), 98
list elements and nodes (LVS command-line option), 943 model names
locator, 51, 63 remapping, 909
coordinate system, 79 MOSFET
coordinates, 51, 63 soft connections, 838, 896
units, 51, 63 syntax in EXT file, 847
log files (for UPI), 68 MOSFETs
logo generation, 142, 143, 144, 483 permuted classes, 926
logos mouse buttons bar, 51
adding to a design file, 1706 Mouse snap grid, 80
copyrights mouse snap grid, 47, 79
adding to a design file, 142 Mouse Wheel Functions, 119
adding to layout, 142, 144 Move By, 283
LVS move operation
algorithms, 936 entering numerically, 283
fragmented classes, 933 forcing, 285
limitations, 936 moving
model name syntax for, 894 objects, 282
output, 919 with respect to base point, 284
output file format, 902 moving objects, 288
probing, 933 Multi Grid toolbar, 47
removing parasitics, 893 multiple object editing, 207
shorting nodes, 893
verification errors, 933
N
M naming
LComp elements, 1636
Macro dialog, 953 naming conflicts
macro dialog resolving, 247
adding, 954 net criticality
macros, 952 in EDIF, 458
adding, 954 in SPR, 417
manual placement net delay
in SPR, 418 calculation (SPR), 416
Manufacturing Grid, 81 model formula (SPR), 438
mapping cells and ports (SPR), 403, 410 net length in SPR, 460
mapping table (SPR), 403, 410 net length reduction, 435
mask polarity, 158 netlist comparison, 931
maximum geometrical difference (LVS command-line op- resolving discrepancies, 937
tion), 941 netlists
maximum value difference (LVS command-line option), EDIF format, 403, 455
941 mapping (SPR), 403, 410

L-Edit 14 User Guide 1745


Index O

TPR format, 454 wires, 170


nibbling objects, 195 opening
nodal capacitance, 413 cells, 243
files, 438, 460 files, 127
nodal properties, 438 T-Cell, 294
node and element list file, 903 optimization (SPR)
node highlighting factor, 436
mode enabled, 368, 370 in placement, 436
saving data, 368, 370, 478, 832 in routing, 435
node naming, 368 optimize network, 926
Nominal area, 844, 845, 846, 848 optimize network (LVS command-line option), 945
nonpolarized elements (LVS command-line option), 945 optimizing design rule checking, 474
not exist design rules, 465 OR operation, 315, 320
NOT operation, 315, 321 orientation
number of rows, 434 LComp, 1638
numeric repositioning, 283 origin, 52
absolute, 51
OTC routing (SPR), 413, 414
O output
automorph class example, 920
Objects detailed trial matching, 922
Boolean/Grow Operations, 196 fragmented class, 924
converting to polygon, 198 MEMS design example, 929
fracturing, 202 parameter matching example, 920
snapping to the manufacturing grid, 186 parsing, 919
straighten curved segments, 172 output file (LVS command-line option), 945, 946
objects output file types, 881
aligning, 187 overlap, 1638
boxes, 170 overlap capacitance (SPR), 438
circles, 170 overlap design rules, 466
copying, 288 over-the-cell routing (SPR), 413, 414
deleting, 289
deselecting, 278
drawing, 172 P
duplicating, 288
duplicating with an offset, 288 pad cell abutment ports, 423, 449
finding, 279 pad cell mirror ports, 423, 452
grouping and ungrouping, 280 pad cells, 449
hiding, 104 without bond pads, 451
instances, 170 corner, 451
moving, 282 naming and ordering, 424
moving from layer to layer, 288 orientation, 451
pasting, 289 pad contact layer, 429
pie wedges, 170 pad route design rules
polygons, 170 illustrated, 430
ports, 170 pad routing
reorienting, 286 to a core, 404
resizing and reshaping, 181 to a padframe, 405
rulers, 170 pad via, 430
selecting, 275 padframe
showing, 104 dimensions, 423
slicing, 194 illustrated, 405
snapping, 182 pad name requirements, 424
tiling, 187 ports, 405, 423
tori, 170 routing, 405
types, 170 setup, 422

L-Edit 14 User Guide 1746


Index Q

padframe generation power rails, 446


with netlist, 406 power signal
without netlist, 406 in SPR, 409
padlist, 424 power supply pads, 451
panning, 117 predefined setup files, 127
parameter matching, 920, 935 prematch file, 934
parameterized cells See T-Cell LVS command-line option, 946
parasitic capacitors, 893 preiteration matching, 934
parasitic resistors, 893 prematch files
parsing, 919 input, 923
paste buffer, 289 ouput, 923
Paste to Cursor, 289 resolving fragmentation of an automorph class, 922
pasting objects, 289 primitives, 233
performance settings, 71 printing, 131
permuted classes, 926, 935–936 headers & legends, 133
pie wedges printer memory settings, 134
drawing, 172 printing cell hierarchy, 241
pin-to-pin delay Probing >
calculation (SPR), 438 Go To, 933
model formula, 434 Highlight, 938
syntax, 459 probing verification results, 933
placement (SPR), 417 process definition files, 120, 124
placement position, 1638 process steps
Polygons etch, 120
fracturing, 202 grow/deposit, 120
, 155 implant/diffuse, 121
polygons product documentation
adding vertices, 181 opening, 41
converting to boxes, 149 program icon, 38
drawing, 173 properties, 138
editing, 211 adding properties, 140
merging, 196 deleting properties, 141
nibbling, 195 deleting values, 141
polylines editing properties, 139
converting from wires for DXF export, 157 editing values, 141
port construction GDSII, 164
illustrated, 390 renaming properties, 141
port mapping viewing properties, 139
in SPR, 410 Properties dialog, 139
port text size property tokens, 391
in GDSII format, 168
scaling, 168
ports
definitions for global signals, 452
Q
drawing, 180 quiet mode
editing, 218 dialog control, 68, 955
mapping (SPR), 410 UPI controls, 1023–1024
placement for automatic routing, 338
postiteration matching, 934
PostScript, 158
PostScript files, 202 R
power pad cells, 450 recognition layer, 837, 841, 843, 844
power ports, 445 Redo, 290
in pad cells, 450 redo buffer, 290
in standard cells, 445 redoing operations, 290
power rail width, 420 referenc point, 1636

L-Edit 14 User Guide 1747


Index S

reference point, 1638 drawing, 180


placing a temporary, 285 editing, 220
user-defined, 285 temporary, 180
reference points, 224 running
refreshing the screen, 102 interpreted macros, 956
regenerating T-Cells, 296 LVS batch files, 939
region-only design rule checking, 479
renaming cells, 245
rendering
color, 94
S
layers, 89, 91 saving
modes, 90 cells, 244, 248, 249
outlines, 95 files, 129
passes, 90, 93 schematic driven layout
patterns, 93 command menu, 354
reorienting objects, 286 commands, 350, 355
replace series chain MOSFETs (LVS command-line op- devices, adding, 348
tion), 946 devices, adding to a netlist, 345
Replacing Multiple Instances, 265 devices, naming, 347, 348
repositioning devices, parameters, 348
graphical, 282 flylines, 354
numerical, 283 implicit model definitions, 343
resistor instances, adding, 346, 347
syntax in EXT file, 843 instances, placement for floorplanning, 343
resitors markers, 353
shorting out, 893 navigator, opening, 345, 351
resizing and reshaping objects, 181 navigator, toolbar icons, 351
resolving netlist format, 343
discrepancies, 937 netlist, formats, 345
fragmentation of an automorph class, 922 netlist, importing, 344
with prematch files, 922 netlist, wirelist, 344
fragmented classes, 925 ports, adding, 347
resolving verification errors, 933, 938 ports, box, 340
results viewing environment (RVE) ports, I/O, 336
Calibre, 868 ports, kine, 340
Rotate/Flip commands, 286 ports, on grid, 336
round style (wire ends and joins), 98 ports, point, 339
router routing grid, 334, 335, 336
grid spacing settings, 334 steps, 331
routing subcircuits, adding, 346, 347
clock signals, 406 T-Cells in, 347
over-the-cell, 413, 414 T-Cells, adding, 346, 348
shortcut keys for, 307 T-Cells, naming, 348
three-layer, 413 T-Cells, parameters, 348
routing wires terminals, bulk or substrate, 345
in standard cells, 447 view types, 353
in standard cells (SPR), 447 wire end style, 337
row base name, 413 wirelist, 344
row crosser cells, 435, 448 zooming to routing objects, 354
row crosser ports, 390, 412, 448 SDF calculation, 435
row indent ratio, 435 SDF format, 423, 459
row length, 434 selection
rule exceptions, 467 box, 73
rule sets, 476 cycling, 276
rule types, 464 deselecting objects, 278
rulers edge, 276

L-Edit 14 User Guide 1748


Index S

explicit, 275 insides, 115


extending, 276 layers, 111
implicit, 276 objects, 104
of objects, 275 showing layers, 106
range, 82, 276 shrink operation, 316
universal, 278 signal ports, 450
universal deselection, 279 on core cells, 404
selection box, 73 global, 406, 452
selectivity illustrated, 447
setting, 276 in pad cells, 450
Self-Intersecting Polygons, 173 on padframes, 405
Flag self intersections in DRC, 474 in standard cells, 446
self-intersecting polygons, 155 slicing objects, 194
self-intersecting wires, 155 slicing wires, 206
separation into classes, 932 snapping
series, elements in, 935–936 objects, 182
set mode, 92 snapping cursor, 80
Setup Snapping Objects to the Manufacturing Grid, 186
Merge Layers, 288 snapping vertices, 187
Setup > soft connections
Application, 60 extracting, 838
General, 62 LVS detection of, 896
Keyboard, 64 spacing design rules, 465
UPI, 68 Special Layers Setup, 101
Warnings, 65 special standard cells, 448
Design, 77 specialized elements, 929
Drawing, 84, 86 specifying
Grid, 79 design rules, 471
Selection, 82 SPICE commands
Technology, 78 .END, 912
Xref files, 85 .GLOBAL, 910
Layers, 87, 95, 313 .INCLUDE, 908
General, 88 .MALIAS, 344, 909
Rendering, 89 .MODEL, 908
Palette, 59 .OPTION, 910
Special Layers, 97, 101 .PARAM, 911
Setup > Design—Xref files, 86 .SUBCKT, 907
setup files, 127 SPICE file format, 903
Laker, 57 commands, 908
moving objects from layer to layer, 288 comment lines, 913
Virtuoso, 56 device statements, 903
setup files, replacing, 55 parameter values, 912
setup information restrictions, 913
design rule check, 463 statements, 908
Setup Layers subcircuit defintions
General, 161 subcircuit definitions, 907
setup window, 885 subcircuit instances, 904, 906
Device Parameters, 889 SPICE OUTPUT properties, 391
Input, 886 example, 392
Options, 895 SPR
Output, 887 defined, 400
Performance, 897 design files, 401
shortcut keys design flow, 399, 401
writing to a configuration file, 65 design tips, 403
Show all cells, 243 files required for, 401
showing initializing setup, 411

L-Edit 14 User Guide 1749


Index T

procedure outlined, 401 in CIF, 158


setup, 408
technology setup, 401
SPR Core Setup
Design Rules, 415
T
General, 412 Tanner Place and Route format, 454
Global Signals, 419 T-Cell
I/O Signals, 420 callbacks, 297
Layers, 413 code templates, 239
Placement, 417 code templates for, 291, 292
Power, 420 creating arrays with, 292
SPR layout files, 402 defined, 291
SPR Pad Route Setup, 426 editing, 239, 291
Core Signals, 431 editing in place, 295
Design Rules, 429 generating, 296
General, 428 generating from layout, 291
Layers, 428 hiding, 235
Padframe Signals, 432 hiding or showing, 294
SPR Padframe Setup icons indicating, 294
General, 422 instancing, 255, 295, 296
Layout, 423 layer changing with, 302
SPR Place and Route, 433 opening, 294
stacked vias, 90 parameters
rendering, 90 parameters, parameter types, 291, 292
standard cells, 445 regenerating, 296
libraries, 445 showing, 235
special, 448 stretching, 63
standard delay format files, 459 updating, 255
Standard toolbar, 44 T-Cell builder
starting L-Edit, 38 generating from layout, 298
startup files, 38 locating parameters, 304
state variables, 1638 logical expressions, 303
status bar, 885 parameter, 300
status bar (L-Edit), 50 repeating elements, 301
straightening curved segments, 172 replicating cells, 299
stretch ports stretch ports, 298
T-Cell builder, 298 TDB format, 131
subcircuit technology setup
syntax in EXT file, 847 importing from Laker, 57
subcircuit cell design, 386 importing from Virtuoso, 56
subcircuit connection ports in SPR, 401
illustrated, 389 technology units, 78
subcircuit definition, 379, 383, 384–??, 385, ??–386, 839 tempory rulers, 180
syntax, 907 text
subcircuit recognition, 379, 386, 839 adding to a design file, 142
activation, 385 adding to layout, 142, 144
cell design for, 386 scaling, 142, 144
connection ports, 387 text editor
connections, 387 keyword groups, 76
cross ports, 390 modification conflicts, 75
subcircuit recognition layer, 384, 386 setup, 74
subcircuit recognition polygons, 386 text size
illustrated, 388 instances, 70
subtract mode, 92 rulers, 180
surround design rules, 466 text window, 898
symbols textual descriptions of objects, 50

L-Edit 14 User Guide 1750


Index U

textual editing, 206 UPI operating modes, 954


three-layer routing, 413 user configuration file
tie-to-ground cell, 412, 448 saving to a text file, 65
tie-to-power cell, 412, 448 user files, 60
toolbars, 884–885 user interface, 883–902
Aerial View, 52 user-programmable interface, 952
Alignment, 47
Base Point, 48
Drawing, 45
Multi Grid, 47
V
Verification, 47 .vdb files, 881
Tools > examples, 919
Clear Error Layer, 858 Vdd pad cells, 450
Clear Generated Layers, 329 verification errors, 933, 938
Cross-Section, 122 verification options, 940–949
DRC verification queue, 901–902
Setup Design Rules, 471 verification results
Extract LVS, 933
General, 380 Verification toolbar, 47
Output, 382 verification window, 900
Subcircuit, 384 version
Generate Layers, 327 displaying, 43
Macro, 953 version information
SPR displaying, 41
Place and Route, 433 vertices
Setup, 408 limitations on, 154
Summary, 402 removing, 187
Tools > DRC, 479 vertices, adding, 181
Tools > DRC Box, 479 via reduction
Tools > Goto Device in SPR, 435
device, 834 via surrounds (SPR), 416
Tools > Macro, 397, 953 via widths (SPR), 416
Tools > Repeat Macro vias
repeat macro command, 397 creating arrays of, 308
topological matching, 932 generated, 304
tori View
drawing, 173 by instance, 353
TPR format, 454 by net, 353
tutorial, 915–918 by unrouted segment, 353
View >
Design Navigator, 234
U Display, 103
Exchange, 120
undoing operations, 290 Goto, 119
ungrouping objects, 280 Hierarchy Level >
universal selection, 278 Show one less level, 114
unknown layers, 248 Show one more level, 114
update display, 68, 955, 1031–1032 View hierarchy level, 114
updating, 269 Home, 116
UPI Insides, 115
function prototypes, 956 Layers, 111
header files, 956 Layers >
hot key definitions, 956 Hide Generated, 329
include files, 956 Show Generated, 329
LComp interface, 956 Objects, 103, 104
library files, 956 Pan >

L-Edit 14 User Guide 1751


Index W

Down, 117 GDSII-compatible styles, 100


Left, 117 join styles, 98
Object Pan > joining, 204
Left, 117 merging, 196
Right, 117 nibbling, 195
Settings, 118 self-intersecting, 155
Pan By, 117 slicing, 206
Right, 117 terminology, 97
To Cell Edge, 118 utilities, 202
To Selections, 117 width, 98
Up, 117 workgroup files, 60
Redraw, 102 write CAP file, 435, 438, 460
Toolbars, 44 write SDF file, 404, 423, 459
Zoom >
In, 116
Mouse, 118
Out, 116
X
To Selections, 117 Xref file, 86
Zoom By, 116 XrefCells, 86, 268, 269
viewing circular dependency, 272
layout hierarchy, 114 deleting, 272
views examining, 269
exchanging, 120 XST format, 124
panning, 117
zooming, 116
Virtuoso files
exporting, 155 Y
importing, 56, 146 yes to all questions (LVS command-line option), 949
importing contact cells, 304
importing for Assura, 750
voltage source device definitions, 893
VStretch, 292 Z
zero-volt voltage sources, 893
zoom/selection box, 73
W zooming, 116

warnings
displaying
See quiet mode
winding number, 176
window stretch editing, 181
Windows clipboard
copying to, 289
Wire Utilities, 202
wire widths
in core routing, 416
wires
adding sections, 202
adding vertices to, 181
CIF-compatible styles, 100
converting to DXF polylines, 157
default styles, 100
drawing, 173
editing, 214
end styles, 98
extending, 202

L-Edit 14 User Guide 1752


Credits

Software Development

Seyran Avanesyan David Cardoze


Barry Dyne Radoslav Getov
Nikita Jorniak Dan’l Leviton
Jeff Miller Satoshi Ono
Massimo Sivilotti Ken Van de Houten
Nicolas Williams

Quality Assurance

Luba Gromova Lena Neo

Documentation

Judy Bergstresser Barry Dyne


Karen Lujan Nicolas Williams

L-Edit 14 User Guide 1753

You might also like