Home → User Notes →
1. How do I verify a portion of a displayed group?
This is possible using the LayVER dialog option; a window may be defined (the default being the displayed window). Run-decks will need to filter edge-related violations.
2. Can I optimize verification speed?
There are a number of factors which determine the rate at which databases are analyzed. Built in to LayVER are certain algorithms and methods that ensure fast handling of data, however, some issues are processor related. These may be controlled by the user using variables which can be defined in the configuration file. For example, the following variables with values that work well for Windows XP systems are:
wrkBufferSize = 16384
wrkClusterSize = 4
3. Why are temporary layers not deleted?
In recent releases, major advances in verification speed have been made. As part of these improvements the option to delete temporary layers (those declared with an asterisk prefix) is left to the user. The verification deck now requires the command:
$DELETE LAYERS * /TEMPORARY
if temporary files are to be deleted. Alternatively, temporary files may be deleted immediately after use, where very large databases are involved.
4. Can I execute operating system commands from within LayVER?
Yes, the command $SPAWN is available for this. Particularly useful is the fact that it will run MSDOS batch files and respond depending on the status of the return variable.
5. Can I include date and time stamping in the report files?
Yes, special variables may be set to allow this (LV_TIME and LV_DATE). Other variables may be set to include additional information that the user might want to appear in a formal report file.
6. The run-deck I have is not an ASCII file – what is it?
TexEDA develops run-decks for certain technologies. Much of the required data is protected by confidentiality agreements with the foundry, and whether the user has appropriate agreements will be unknown to TexEDA. The run-decks are thus developed such that this confidential information is inaccessible to the user. The decks are delivered as encrypted files which, under separate license, can be decrypted by LayVER prior to execution.
7. What’s the list of files at the start of the LayVER run-time output summary?
LayVER decks are often a sequence of files whose execution is determined by process flow variables (switch variables). As a syntax check, LayVER scans the files and expands the files and arguments, checking file existence and reporting the actual command that will be issued in the LayVER Summary file.
In some cases files do not exist at the start of syntax checking (since they are created during the checking sequence). To avoid halting the process, the variable LayverIncludeCheck must be set as follows:
8. How do I use the Pre-processor and Run-time Commands?
The following is a summary of the usage of the two types of LayVER control command.
Pre-processor commands are interpreted before any other commands are executed.
The pre-processor carries out a line-by-line substitution of defined variables, and includes or discards blocks of commands according to the value given to a variable name
Pre-processor variable values are always strings when substituted but may be interpretated as numeric values when used in expressions
The pre-processor commands are:
.define vn st =>define the string value of a variable name
.else =>all other conditions apart from those previously defined in an "if" block
.elseif ex =>alternate condition in an "if" block
.endif =>end the scope of an "if" block
.if ex =>start the interpretation of command lines based on whether a certain expression is true or false
.ifdef vn|sw =>start the interpretation of command lines based only when a certain variable or switch variable name is defined
.ifndef vn|sw =>start the interpretation of command lines based only when a certain variable or switch variable name is not defined
.option sw pr =>allow a switch variable to be defined interactively within LayEd before LayVER runs
.undefine vn =>un-define a variable name
where vn => variable name,
ex => expression
st => string
sw => switch name
pr => prompt text displayed in LayED
Variable names may be used in any context following their definition. In order to substitute the variable name with the defined string, precede the variable name with "&".
In the standard form, variable names must comprise only alphanumeric characters and the underscore. They must not commence with a numeric character.
if characters outside that set are required, then the variable name must be enclosed on single quotes.
The values of these variables will be substituted using:
The value strings defined by ".define" may comprise any characters (as well as included spaces - preceding and succeeding spaces are ignored)).
An expression is evaluated either arithmetically (if the string is numeric) or as a string (if characters other than numeric are included).
Strings may be handled if the arguments are enclosed in double quotation marks.
.define var1 yes
.define var2 7.1
.if ((&var2 > 7) + ("&var1" == "yes"))
$DBLIST TEXT "metal count less than 7"
Note that numeric strings may be decimal
Variable string values may be concatenated with succeeding plain text using the variable &+.
Alternatively, the variable name may be enclosed in single quotation marks. Thus:
.define var1 open
.define var2 shut
.define 'var 3' and shut
$DBLIST TEXT "&var1&+_and_&var2"
! will yield the same as:
$DBLIST TEXT "&'var1'_and_&var2"
! and this is also valid
$DBLIST TEXT "&var1&'var 3'"
Pre-processor commands may not have in-line comments appended to them
Each pre-processor command must occupy a separate line
The ".option" command may only be used in the top-level command file (as submitted to LayVER).
Run-time Control Commands
Run-time control commands are interpreted at run-deck execution.
The run-time control commands (as written in a command file) are:
$DEFINE "sw" => define the existence of a switch variable name (string)
$SET vn ax|"st" => establish a numeric or string value for a variable name
$UNDEFINE "sw" => cancel the existence of a switch variable name
$IF ax|fx => commence the execution of a block based on the condition defined
$WHILE ax|fx => continue the iterative the execution of a block based on the condition defined
$BREAK [ax/fx] => escapes from the current WHILE loop
$CONTINUE [ax|fx] => restarts the current WHILE loop based on the condition define
$ENDWHILE => complete the current while loop
$ELSE => alternative execution of an IF block (original IF condition not satisfied)
$ENDIF => complete the current IF block
where vn => variable name,
ax => arithmetic expression
fx => functional expression
st => string (must appear in double quotation marks)
sw => switch name (must appear in double quotation marks)
scope of variables
Run-time variable values are substituted for the variable name only in run-time control expressions and any other expressions that are used during execusion.
A run-time control expression may be an arithmetic, string, or functional expression
When used, run-time variable names are never prefixed by the "&" character, and will not be recognized outside expressions.
Functional expressions allow the handling of string values. The primary function is:
A secondary function is:
however, neither of these strings may be a run-time variable
A special function exists:
where layer is a defined LayEd layer name.
A operating system interface function exists:
which adopts the return code of a system commanded invoked using the SPAWN command
The operators AND, OR, and NOT may be used with the above functions.
Arithmetic expressions must be enclosed in single quotation marks. They may appear anywhere an arithmetic value is syntatically expected.
The operators that may be used in arithmetic expressions are:
+, -, *, /, ^, >, >=, <, <=, ==, <>, &, |, ~
sin, cos, tan, asin, acos, atan, exp, log, log10, sqrt, abs, floor, ceiling, round
Use of variable names with defined string values is not supported except within the PRINTF command.
End-of-line-line comments are allowed (using the "!" character)
Note that variables preceded by the "&" sign substitute pre-processor variable values
$SET size &1 ! val1 established as a procedure argument
$SET max_size &val2 ! val2 established by a pre-processor command
$WHILE size < max_size
*temp = layer1 sized by 'size'
$SET size = 'size + max_size / 10'
.define val1 met2
.define val1 met2 and met3
$IF EQS(&val1,met2 and met3) ! quotation marks not required
$SET inf "not a pretty picture"