LL_PROCESS(5ICD)

NAME
ll_process - ldmc technology data

SYNOPSIS
# include <ll_process.h>

DESCRIPTION
The ldmc system has a limited but useful knowledge of technology and design rules. This knowledge is not built into the code, but is obtained from the design environment during initialization (see ll_init(5ICD)). This allows the system to be used for different technologies and even to write layout generators that are, to a certain extend, layout independent.

During initialization, the identification of the actual technology and some elementary technology info such as layer names, is obtained from the design management system (the ``maskdata'' file). Furthermore, the ldmc technology file as present in the system process library is read. All technology data is stored in the ldmc process descriptor, accessible through a global pointer ll_process.

The format of the ldmc technology descriptor is as follows:

typedef struct {
	int	nomasks;	/* number of masks */
	char	*pr_name;	/* process name */
	char	*pr_type;	/* process type */
	char	*pr_info;	/* process info */
	char	**mask_name;	/* mask name */
	char	**mask_info;	/* mask name info */
	int	*mask_no;	/* mask number */
	int	*mask_type;	/* mask type */
	int	*mask_id;	/* short name */
	int	*mask_width;	/* minimum width */
	int	**mask_sep;	/* minimum separation */
} LL_PROCESS;

The meaning of its members is as follows: An integer specifying the number of layers in the technology A pointer to a string giving the short process name. A pointer to a string specifying the process type (e.g. nmos or bipo). A one-sentence process identification. A vector of pointers to masknames. The indices of the array are from 0 to nomasks-1. If m is the number of a mask, its name can be found by ll_process -> mask_name[m]. Some information on the mask. The sequence number of the mask. This number is in fact redundant, since, for all m with 0 <= m < ll_process -> nomasks, ll_process -> mask_no[m] == m. An integer array specifying the type of masks. Valid mask types are predefined in ll_process.h as follows:
    Regular mask. Interconnection mask. Symbolic mask (e.g. bounding box).
The short (one character) mask name (layer specifier) to be used e.g in the key argument of mgetterm. The minimum width of a mask, to be used by the ldmc routing functions. For a mask with mask-number m, its minimum width is given by ll_process -> mask_width[m]. The separation between two masks, to be used by the ldmc routing functions. For two masks with mask-numbers m1 and m2, their minimum mutual separation is given by ll_process -> mask_sep[m1][m2].

As stated above, the information in the ldmc process desccriptor is partly obtained from the maskdata file and partly from the ldmc technology file, ldmcdata, in the system process library. This file contains one line per layer, but not all layers need be present. In fact, it typically only contains information for the interconnect layers. Comments are surrounded by sharp (#) and newline. Each line has a number of fields, the first three specify maskname, maskid and minimum width. Then, a number of fields equal to the number of layers specified give the separation between masks. This is in fact one row of the (symmetrical) mask_sep matrix of the ldmc process descriptor. As an example, here is the ldmc technology description for a standard 4u nmos process for a value of lambda of 2:

# SccsId = "@(#)ldmcdata 3.2 (TU-Delft) 7/30/87"
# Ldmc technology description for standard 4u nmos process
# name  id      width   sep
np      p       2       2 1 0
nd      d       2       1 2 0
nm      m       2       0 0 2

FILES
ICDPATH/lib/process/PROCESS/ldmcdata    ldmc technology file

SEE ALSO
ldmcdata(3ICD) ll_init(5ICD)