In the next section, we introduce ``physical terminals'', which are
different objects. A physical terminal is a data structure that
stores information about the physical aspects of a terminal, including
its location in the layout, an object that it may be bound to, and the
associated layer. If a schematic has a layout and has been
associated, then each terminal (node property) has a pointer to the
corresponding physical terminal, and vice-versa. Thus, in general
either object can be used to reference data. In fact, in most of the
functions in this section and the next, the "handle" argument can be a
handle to either a node property or physical terminal.
However, cells that are electrical-only will not have physical
terminals, and similarly, a layout without a corresponding schematic
will lack node properties. In these cases, only the existing object
type can be used.
-
- (terminal_handle) ListTerminals()
Return a handle containing a list of the connection terminals of the
current cell. These correspond to the normal contact terminals as
would be defined with the subct command, as represented by node properties of the electrical cell view. On success, a handle is
returned containing the terminal list. If there are no terminals
defined or some other error occurs, a scalar 0 is returned.
- (terminal_handle) FindTerminal(name, index,
use_e, xe, ye, use_p, xp,
yp)
This function will return a handle referencing a single terminal, if
one can be found among the current cell contact terminals that matches
the arguments. The arguments specify parameters, any of which can be
ignored. The non-ignored parameters must all match.
The name can be a string that will match an applied terminal
name (not a default name generated by Xic). The argument will be
ignored if a scalar 0 or null or empty string is passed.
The index is the terminal order index, or -1 if the parameter is
to be ignored. This is the number that is shown within the terminal
box in the subct command.
If use_e is a nonzero value, the next two arguments are taken
as a location in the electrical drawing. These are specified in
fictitious ``microns'' which represent 1000 internal units. These are
the numbers displayed in the coordinate readout area while a schematic
is being edited. A location match will depend of whether the
electrical cell is symbolic or not. If symbolic, a location match to
any of the placement locations will count as a match (terminals can
have more than one ``hot spot'' in the symbolic display). If use_e is 0, the two arguments that follow are ignored and can be any
numeric values.
Similarly, if use_p is nonzero, the next two arguments
represent a coordinate in the layout, given in (real) microns. If a
physical terminal is placed at the given location, a match will be
indicated. If use_p is zero, the two arguments that follow are
ignored, and can be set to any numeric values.
The arguments should provide at least one matchable parameter.
Internally, the list of terminals is scanned, and the first matching
terminal found is returned, referenced by a handle. If no terminals
match, a scalar zero is returned.
- (terminal_handle) CreateTerminal(name, x, y,
termtype)
This function will create a new terminal in the schematic of the
current cell. If a name string is passed, the terminal will be
given that name. If this argument is a scalar 0 or a null or empty
string, the terminal will not have an assigned name but will use an
internally generated name. The terminal will be placed at the
location indicated by the x and y arguments, which are in
fictitious ``microns'' representing 1000 database units. These are
the same coordinates as displayed in the coordinate readout while a
schematic is being edited.
The termtype argument can be a scalar integer or a keyword, from
the list below. This will assign a type to the terminal. The type is
not used by Xic, but this facility may be useful to the user.
0 |
input |
1 |
output |
2 |
inout |
3 |
tristate |
4 |
clock |
5 |
outclock |
6 |
supply |
7 |
outsupply |
8 |
ground |
Keyword matching is case-insensitive. If the argument is not
recognized, and the default ``input'' will be used.
The function returns a handle that references the new terminal on
success, or a scalar zero otherwise.
- (int) DestroyTerminal(thandle)
This function will destroy the terminal referenced by the passed
handle, and will close the handle. This destroys the terminal, which
is actually a node property of the electrical current cell, and
the linkage into the physical layout, if any. If a terminal was
destroyed, value one is returned, or zero on error.
- (string) GetTerminalName(thandle)
Return a string containing the name of the terminal or physical
terminal referenced by the handle passed as an argument. Both objects
have name fields that track. However, if no name was assigned, for a
terminal a default name generated by Xic is returned, whereas the
return from a physical terminal will be null.
- (int) SetTerminalName(thandle, name)
The first argument is a handle that references a terminal or physical
terminal. The second argument is a string which gives a name to
apply. It can also be a scalar 0, or if null or empty any existing
assigned name will be removed. Both terminals and physical terminals
have names that track, this will change both, when both objects exist.
The return value is one on success, zero if error.
- (int) GetTerminalType(thandle)
Return a type code for the terminal referenced by the handle passed as
an argument, which can also be a handle to the corresponding physical
terminal. A non-negative return represents success. The code
represents the terminal type set by the user. The terminal type is
not used by Xic, but is available for user applications. The
defined types are listed below. The default is type 0.
0 |
input |
1 |
output |
2 |
inout |
3 |
tristate |
4 |
clock |
5 |
outclock |
6 |
supply |
7 |
outsupply |
8 |
ground |
- (int) SetTerminalType(thandle, termtype)
This function will apply a terminal type to the terminal referenced by
the handle passed as the first argument, which can also be a handle to
the corresponding physical terminal. The second argument is either an
integer, or a string keyword, from the list below.
0 |
input |
1 |
output |
2 |
inout |
3 |
tristate |
4 |
clock |
5 |
outclock |
6 |
supply |
7 |
outsupply |
8 |
ground |
The function returns one if the type is set successfully, zero
otherwise.
- (int) GetTerminalFlags(thandle)
Return the flags for the terminal referenced by the handle passed as
an argument, which can also be a handle to the corresponding physical
terminal. The return value is an integer with bits representing flags
as listed in the table below. On error, the return value is -1.
- -x1 (BYNAME)
The terminal makes connections in the schematic by name rather
than by location.
- 0x2 (VIRTUAL)
No longer used, reserved.
- 0x4 (FIXED)
The physical terminal has been placed by the user, and Xic
should never move it.
- 0x8 (SCINVIS)
The electrical terminal will not be shown in schematics.
- 0x10 (SYINVIS)
The electrical terminal will not be shown in the symbol.
- 0x100 (UNINIT)
The terminal is not initialized (internal).
- 0x200 (LOCSET)
The physical terminal location has not been set (internal).
- 0x400 (POINTS)
Set when the terminal has multiple hot-spots.
- 0x800 (NOPHYS)
Set if the terminal has no physical implementation, such as a
temperature node. Such terminals have no physical terminals.
- (int) SetTerminalFlags(thandle, flags)
This will set the first five flags listed for GetTerminalFlags
in the terminal referenced by the first argument, which can also be a
handle to the corresponding physical terminal. All but the five least
significant bits in the flags integer are ignored. The bits
that are set will set the corresponding flag in the terminal, unset
bits are ignored. The value one is returned on success, zero
otherwise.
- (int) UnsetTerminalFlags(thandle, flags)
This will unset the first five flags listed for GetTerminalFlags
in the terminal referenced by the first argument, which can also be a
handle to the corresponding physical terminal. All but the five least
significant bits in the flags integer are ignored. The bits
that are set will unset the corresponding flag in the terminal, unset
bits are ignored. The value one is returned on success, zero
otherwise.
- (int) GetElecTerminalLoc(thandle, index,
array)
This will return terminal locations in the electrical schematic, of
the terminal referenced by the first argument. This argument can also
be a handle to the corresponding physical terminal. The return is
dependent on whether the electrical cell is symbolic or not. Values
for x and y are returned in the array, which must
have size two or larger. The returned values are in fictitions
``microns'' that correspond to 1000 database units. This is the same
coordinate system indicated by the coordinate readout when editing a
schematic.
If the electrical cell is not symbolic, the integer index
argument must be zero, and the terminal location in the schematic is
returned.
If the electrical cell is symbolic, there can be arbitrarily many
``copies'' of the terminal, representing multiple ``hot spots'' where
the terminal can make connections. The index argument is a
0-based index for these locations. To get all of the locations, one
should call this function repeatedly while incrementing the index from
zero. A return value of zero indicates that the index is out of range
(or some error occurred). A return value of one indicates success,
with the array containing the location.
- (int) SetElecTerminalLoc(thandle, x, y)
This function specifies a location for the terminal referenced by the
first argument, for use in electrical mode. The x and y
are coordinates in fictitions ``microns'' which are 1000 database
units. This is the same coordinate system used in the coordinate
readout when editing a schematic. As for most of these functions, the
first argument can also be a handle to the corresponding physical
terminal.
The function behaves differently depending on whether the electrical
current cell is symbolic or not. If the electrical current cell not
symbolic, the passed coordinates set the terminal location within the
schematic. Otherwise, in symbolic mode, there can be arbitrarily many
locations set. The function will add the passed location to the list
of locations for the terminal, if it is not already using the
location.
The function returns one on success, zero otherwise.
- (int) ClearElecTerminalLoc(thandle, x, y)
This function applies only when the electric current cell is in
symbolic mode. When true, a terminal may be displayed in arbitrarily
many locations, representing different possible connection points.
The x and y are coordinates in fictitions ``microns''
which are 1000 database units. This is the same coordinate system
used in the coordinate readout when editing a schematic. If the
coordinates match a hot spot of the terminal, that location is
deleted.
It is not possible to delete the last location, there is always at
least one active location. Calling this function when the electrical
current cell is not symbolic has no effect. The function returns one
on success, zero if error.
As for most of these functions, the first argument can also be a
handle to the corresponding physical terminal.