Product Documentation
Diva Reference
Product Version IC23.1, June 2023

9


Extracting Parameters (LPE)

Introduction

Device and connectivity extraction creates an extracted version of the circuit layout that contains instances of devices and nets in the form of a true electrical network.

The verification system provides tools for measuring parameters of those devices, performing calculations with them, and storing the results on the extracted network as parameter properties.

A parameter is a property associated with a device which contains some information relative to that device. These properties can be accessed by application programs or SKILL routines as required. A good example is the netlister, which can annotate a transistor network listing with width and length parameters.

The verification tools measure a wide range of characteristics of devices and can associate any number of them with a single device as parameters. The measureParameter command definition gives full details of the capabilities.

The extractMOS command has built-in parameter extraction of gate width and length.

The commands available for manipulating parameters are as follows:

Parameters are normally associated with a device via the device recognition polygon. They can also be associated with any shape derived from a device recognition polygon, providing that the shape is created by a selection command, such as geomOverlap, rather than a logical command such as geomAnd.

Measurement Process

The measurement process consists of two operations: measure and calculate.

Measure

The measurement commands associate each measurement with the object being measured. For parameter measurement, this is the device number.

The results from any measurement are given a name. This is a reference to those measurements that can be used in other processing commands.

Calculate

A calculation can be performed on a single measurement result (referenced by name), or a calculation can be performed between measurements of results. All measurement names referenced in the calculation must be associated with the same device type.

You cannot mix device measurements with parasitic measurements. Similarly, you cannot mix device measurements of one device type with those of another device type. For example, it is meaningless to calculate the W/L relationship of devices if the W comes from an nfet and the L comes from a pfet.

The best way to define how the calculation of measured values works is to show an example.

l = calculateParameter( lc - ( w * b * 0.5 ) )

In this example, the effective length of a device is calculated as the center line length minus half the width for each bend.

Measurement Commands

The measurement commands that are available are detailed in the command reference section of this manual. Some, such as area and perimeter, are obvious and need no further explanation. Others, however, do need clarification.

Length

The term length, when applied to a random polygon, is meaningless. For a rectangle, it could mean the length of the longest axis; but for any more complex shape, no simple definition is possible.

For the purposes of parameter and parasitic measurement, the definition of length of a shape on a layer is defined as the length of edges of that shape relative to shapes on other layers.

An example of this is the length of a transistor gate. In this context it is the length of the gate shape which is totally inside the polysilicon shape, divided by two. The division by two is required because the relationship defined measures both sides of the gate.

Many tools are provided to define the relationship. They are as follows:

The relationship can include up to eight layers.

Bends

The definition of bends is not simple. Consider this figure.

The first two figures are squares with a corner cut out. The first one appears to have a bend in it. Based on the first one having a bend in it, the third figure appears to have two bends in it.

Consider this figure, which represents an MOS transistor gate with source and drain diffusions.

Both gates have bends in them, but one has a bend in the length of the gate and the other has a bend in the width of the gate. The bend is relative to the diffusion layer.

As in the definition of length, the definition of bends depends upon a shape’s relationship to shapes on other layers. The measurement command allows you to define this relationship to other layers as part of the bend determination.

By the program’s definition, a bend is created by an inside corner (concave corner) in a shape, so a count of bends is a count of the inside corners.

In addition to counting bends, you can also use the program for counting corners and angles. A corner is an outside corner (convex corner) in a shape, and an angle is any corner, outside or inside. Therefore, a count of angles is the same as a count of bends plus a count of corners.

NULL Measurements

The parameter and figure mode parasitic extraction measurements have these characteristics.

The difference between a value of zero and no measurement is in creation of the resultant property. A value of zero can be used to create a property with a value of zero. If no measurement is made, a property cannot be created.

Measurement Optimization

For general use, the measurement capabilities of the system are designed to be flexible. As a result, the code cannot be optimized as would be the case if the measurements were made from predefined layer relationships, as in the case of MOS transistor width and length in the extractMOS command.

You can achieve some degree of run-time optimization, however, by using other techniques. These techniques can be controlled by the way you write your measurement commands.

Implied Logical Operations

Inside the measurement command, up to eight layers can be defined in a single complex relationship. For example, with five layers you can write

measureParameter( area metal over poly over cut not_over   buried_cut not_over tub )

Such a relationship is processed by looking at all the layers at once. The program does not do a series of two-layer logical operations to derive the required area. This is optimal unless parts of the relationship are used multiple times, in which case it would be better to extract that area separately with logical commands. In the example, if you had a number of relationships involving poly over cut, it would be more efficient to write

pcut = geomAnd( poly cut )
measureParameter( area metal over pcut not_over buried_cut not_over tub )
measureParameter( area metal2 over pcut over well )

This optimization has to be considered with the consolidated measurements.

Consolidated Measurements

Multiple measurement commands can be processed in one pass of the data. This capability is controlled by the system command optimizer, which decides if such consolidation is worthwhile.

The optimization decision is based on the number of common layers in a command. For example, if one measurement involves layers a, b, c, and d, and another measurement involves layers b, c, d, and e, then they are consolidated, and both measurements are made at the same time.

The exact optimization criteria is not given here since it is not a simple heuristic.

Any number of measurement commands can be consolidated provided these criteria are met:

Separate groups of measurement commands in the command stream are optimized separately.

Parameter Measurement Reference Commands

The following section contains the parameter measurement reference commands.

calculateParameter

outValue = calculateParameter( expression [limit] )

Description

This command creates new device parameter measurement values based on calculations with previously measured or calculated values derived through the measureParameter and calculateParameter commands.

Each measureParameter command allows you to make a single device parametric measurement. This command lets you manipulate one or more of these simple measurements to form more complex parameters.

Fields

outValue

The measurement results are stored in a layer that contains parameter values instead of shapes. This layer cannot be processed by any layer manipulation commands. Only commands related to parameter manipulation can reference the layer. Specifically, these are calculateParameter and saveParameter.

expression

This is the calculation expression relating the results of previous measureParameter or calculateParameter commands with mathematical operators. The operators can be any of the following:

Operator Operation Example

if()

conditional expression; returns the second argument if the first argument is non-zero, otherwise the third argument

if(x y z)

and()

logical AND; returns 1 if both of the arguments are non- zero, otherwise 0

and(x y)

or()

logical OR; returns 1 if either of the arguments are non- zero, otherwise 0

or(x y)

==

equal; returns 1 if the arguments have the same value, otherwise 0

x == y

nequal

not equal; returns 1 if the arguments do not have the same value, otherwise 0

nequal(x y)

>=

greater than or equal; returns 1 if the first argument is greater than or equal to the second argument, otherwise 0

x >= y

>

greater than; returns 1 if the first argument is greater than the second argument, otherwise 0

x > y

<=

less than or equal; returns 1 if the first argument is less than or equal to the second argument, otherwise 0

x <= y

<

less than; returns 1 if the first argument is less than the second argument, otherwise 0

x < y

min()

minimum; returns the smaller of the two arguments

min(x y)

max()

maximum; returns the larger of the two arguments

max(x y)

+

add

x + y

-

subtract

x - y

*

multiply

x * y

/

divide

x / y

log()

natural log

log(x)

sin()

sine in radians

sin(x)

cos()

cosine in radians

cos(x)

atan()

arctangent of x with range -pi/2 to pi/2

atan(x)

sqrt()

square root

sqrt(x)

abs()

absolute value

abs(x)

exp()

exponential (e to power x)

exp(x)

ceiling()

smallest integer not less than x

ceiling(x)

floor()

largest integer not greater than x

floor(x)

round()

nearest integer (floor(x + 0.5))

round(x)

log10()

base 10 logarithm; x must be > 0

log10(x)

tanh()

hyperbolic tangent of x

tanh(x)

sinh()

hyperbolic sine of x

sinh(x)

cosh()

hyperbolic cosine of x

cosh(x)

acos()

cos-1 of x in range 0 to pi
x must be in range -1 to +1

acos(x)

asin()

sin-1 of x in range -pi/2 to pi/2
x must be in range -1 to +1

asin(x)

tan()

tangent of x

tan(x)

power()

x raised to power y
if x is 0, y must be > 0
if x is negative, y must be integer

power(x,y)

atan2()

tan-1 of y/x in range -pi to +pi

atan2(y,x)

fmod()

floating point remainder of x/y with same sign as x; y cannot be 0

fmod(x,y)

step()

comparison
returns 1 if the first argument is less than or equal to the second, otherwise 0.

step(x y)

The precedence of the calculation operators follows normal mathematics conventions; that is, multiply and divide have higher precedence than plus or minus with left to right evaluation of operators with the same precedence. You can include parentheses to override the default evaluation order. To avoid conflict with names containing special characters (such as P+), you must use spaces to separate names from operators.

All the layer references from previous measureParameter or calculateParameter commands, used in a calculateParameter command, must be made from a device recognition layer of the same type. You cannot mix measurements made for different device types. In addition, all measurements in a calculation for a device application must be made from the same device recognition layer.

Each parameter used in a calculateParameter command references data stored in a file which has to be opened by Diva. The number of files available when Diva is running depends upon factors outside Diva’s control. To reduce the risk of exceeding the number of files available, a limit of ten parameters within a single calculateParameter command has been set (as a compile-time option). If you exceed this limit, the run does not start. If the required number of files is not available when the calculateParameter command is executed, the program recognizes the fact and stops the run.

If a calculation results in an inappropriate operation, such as dividing by zero, the program issues a warning message and aborts that particular calculation. Such situations are normally the result of a flawed calculation definition, as would be the case if a division is requested by a value that can be measured as zero or nonexistent.

For example

  1. Measure area metal over poly.
  2. Measure area metal over diff.
  3. Divide the result of step 1 by step 2.

If a shape of metal overlaps poly but not diff, there is no second measurement. This results in a value of 0 and the calculation fails.

limit

    This optional argument provides the ability to reject calculated values because they fall outside the specified limits. It can be used to significantly reduce the amount of data being created by rejecting all values which are insignificant.

The format of the limits specification can be one of the following:

low_limit op keyword op high_limit keyword op low_limit keyword op high_limit

The limits can be integer or floating-point values or mathematical expressions defining such values.

You can use the following operators:

< <= > >= ==

The keyword can be either ignore or keep.

The following examples illustrate the format:

ignore < .001 keep >= .3 1 < keep < 5 1.3e-4 <= ignore <= 2.7e-3

Example

The following example illustrates the generation of the effective gate length for a device.

av_length = measureParameter( length gate inside 
poly 0.5 )
width = measureParameter( length gate coincident poly
0.5 )
bends = measureParameter( bends_all gate inside poly )
length = calculateParameter( av_length - ( .1 * bends ) )

The calculation formulates the effective length from the average center line length minus half the width for every bend.

measureParameter

outValue = measureParameter( operator ( layer1 [operator layer2]... ) [coeff] [limit] )

Description

This command measures devices or the relationships between devices and other shapes. Those measurements might later be applied as parameters of the devices using the saveParameter command, or contribute to calculations for subsequent parameters using the calculateParameter command.

Prerequisites

You must process the first layer with an extractDevice or extractMOS device command.

Fields

outValue

The measurement results are stored in a layer that contains parameter values instead of shapes. This layer cannot be processed by any layer manipulation commands. Only commands related to parameter manipulation can reference the layer. Specifically, these are calculateParameter and saveParameter.

operator

    This argument defines the relationship to be measured. It consists of a single operator followed by a layer reference and optional operator-layer reference pairs.

The following are possible operators:

area

Area of the shape or combinations of shapes defined by the over and not_over operators.

perimeter

Perimeter of the shape or combinations of shapes defined by the over and not_over operators.

length

Length of edges conforming to the defined relationship.

If the length operator is used, the operator argument is required.

bends_all

Count of all bends in a shape.

bends_full

Count of full bends (>45 degrees) in a shape.

bends_part

Count of partial bends (<=45 degrees) in a shape.

bends_rad

Count of the angles of all bends measured in radians.

corners_all

Count of all outside (convex) corners in a shape.

corners_full

Count of all outside (convex) full corners ( >= 90 degrees) in a shape.

corners_part

Count of all outside (convex) partial corners ( < 90 degrees) in a shape.

corners_rad

Count of the angles of all corners measured in radians.

angles_all

Count of all corners and bends in a shape.

angles_full

Count of all full corners and bends ( >= 90 degrees) in a shape.

angles_part

Count of all partial corners and bends ( < 90 degrees) in a shape.

figCount

Count of figures (shapes) of inLayer2 enclosed inside inLayer1. A shape of inLayer2 is enclosed in inLayer1 if it does not cross the boundary of inLayer1. The edges of the shapes can be coincident.

You can use this operator only in conjunction with the enclosing operator.

layer1

The first layer referenced must have been used as a device recognition polygon in a device extraction command, or derived from a recognition polygon by a selection command such as geomOverlap.

operator

The operators define the required relationship between the layers referenced before and after them. In these descriptions, the operators are defined relative to a relationship of layerA operator layerB.

The following are possible operators:

butting

Edge coincidence where the shapes of layerA do not overlap shapes of layerB.

coincident

Edge coincidence where the shapes of layerA do overlap shapes of layerB.

over

For area and perimeter, equivalent to a logical AND of layerA and layerB. For length and bend operators, equivalent to inside plus coincident.

not_over

For area and perimeter, equivalent to a logical AND_NOT of layerA and layerB. For length and bend operators, equivalent to outside plus butting.

outside

Edges of layerA outside but not butting shapes of layerB.

inside

Edges of layerA inside but not coincident with shapes of layerB.

enclosing

Used in conjunction with the figCount operator to count the number of shapes on inLayer2 enclosed by the shape on inLayer1.

You cannot use this operator with any other operators. This operator applies only to two layers.

The area and perimeter operators are shape based and can only measure relationships defined with the over and not_over operators. The length and bend operators are edge based and can measure relationships defined by any of the operators.

layer2

Subsequent layers can be derived layer references or original layer names in quotes.

The sequence of layers and operators is read from left to right. There is a limit of eight layers total for any single measurement.

The following figure illustrates the basic operator relationships. The operators other than over and not_over define edges rather than areas.

The following figure illustrates the various bend operator options. The same principles apply to the corner operator options, although the angle measurement is applied to the outside (convex) corners rather than the inside (concave) corners.

The angle of a bend is measured as the deviation of one edge of the bend from being colinear with the other edge, as illustrated in this figure.

The following figure illustrates a complete multilayer relationship.

coeff

An optional coefficient. This is a floating-point number applied as a multiplier to the measured value to change its units. For example, it can be used to change an area measurement in square microns to a capacitance in farads. The choice of the coefficient depends upon the final destination of the data. For example, SPICE™ requires area measurements to be in square meters rather than square microns.

The default value for this coefficient is 1.0.

limit

This optional argument provides the ability to reject measured values because they fall outside the specified limits. It can be used to significantly reduce the amount of data being created by rejecting all measured values which are insignificant.

The format of the limits specification can be one of the following:

low_limit op keyword op high_limit keyword op low_limit keyword op high_limit

The limits can be integer or floating-point values or mathematical expressions defining such values.

Operators (op) you can use are as follows:

< <= > >= ==

The keyword can be either ignore or keep.

The following examples illustrate the format.

ignore < .001 keep >= .3 1 < keep < 5 1.3e-4 <= ignore <= 2.7e-3

Examples

Since the number of permutations of this command is large, these examples illustrate some possibilities.

trans_length = measureParameter( length ( gate inside   poly ) 0.5 )
trans_width = measureParameter( length ( gate 
coincident poly ) 0.5 )
trans_bends = measureParameter( bends_all ( gate inside   poly ) )
poly_perim = measureParameter( perimeter( poly not_over   diff ) ignore <.01 )

Data Storage

The following section discusses the commands to save parameter measurements.

nameParameter

nmaeParameter( measurement propname )

Description

Provided for rule deck compatibility with Assura, this command saves device measurements as properties on the appropriate device instances in the extracted cellview.

Prerequisites

Measurements must have been made by a measureParameter command, or derived from them using the calculateParameter command.

Fields

measurement

    The layer resulting from the measureParameter or calculateParameter commands.

propname

    The name of the property, enclosed in quotes, that is created on the device and references the value of the measurement. The value type of the property is a floating-point number.

Examples

nameParameter( wl "wl" )
nameParameter( width "w" )
nameParameter( length "l" )

saveParameter

saveParameter( measurement propname )

Description

This command saves device measurements as properties on the appropriate device instances in the extracted cellview.

Prerequisites

Measurements must have been made by a measureParameter command, or derived from them using the calculateParameter command.

Fields

measurement

    The layer resulting from the measureParameter or calculateParameter commands.

propname

    The name of the property, enclosed in quotes, that is created on the device and references the value of the measurement. The value type of the property is a floating-point number.

Examples

saveParameter( wl "wl" )
saveParameter( width "w" )
saveParameter( length "l" )

Return to top
 ⠀
X