/***************************************** This ALF "header" file defines context sensitive keywords using the ALF language itself. The applicable version is "IEEE1603-2002". To accomodate this, the syntax of the KEYWORD statement has been extended with the following features: VALUETYPE ::= single_value_annotation SI_MODEL ::= single_value_annotation CONTEXT ::= one_level_annotation VALUES ::= multi_value_annotation DEFAULT ::= single_value_annotation Note: THIS FILE IS TENTATIVE AND SUBJECT TO CHANGE. *****************************************/ /*** Arithmetic models ***/ /** classes for arithmetic models **/ CLASS static_measurement { KEYWORD LOW = arithmetic_submodel; KEYWORD HIGH = arithmetic_submodel; } CLASS transient_measurement { KEYWORD RISE = arithmetic_submodel; KEYWORD FALL = arithmetic_submodel; } /** Arithmetic models within SI-system Mathematical symbols: t TIME f FREQUENCY I CURRENT V VOLTAGE E ENERGY P POWER C CAPACITANCE R RESISTANCE L INDUCTANCE S DISTANCE A AREA ? FLUENCE ? FLUX T TEMPERATURE Relations between units: [t] = 1/[f] = [R]*[C] [P] = [E]/[t] = [E]*[f] = [V]*[I] [V] = [R]*[I] [I] = [C]*[V]/[t] [V] = [L]*[I]/[t] [f]*[f] = [L]*[C] [A] = [S]*[S] [Fluence] = 1/[A] [Flux] = [Fluence]/[t] **/ KEYWORD TIME = arithmetic_model { VALUETYPE = number; } TIME { UNIT = 1e-9; } KEYWORD CURRENT = arithmetic_model { VALUETYPE = number; } CURRENT { UNIT = 1e-3; CLASS { static_measurement transient_measurement } } KEYWORD VOLTAGE = arithmetic_model { VALUETYPE = number; } VOLTAGE { UNIT = 1; CLASS { static_measurement transient_measurement } } KEYWORD ENERGY = arithmetic_model { VALUETYPE = number; } ENERGY { UNIT = 1e-12; } KEYWORD FREQUENCY = arithmetic_model { VALUETYPE = number; } FREQUENCY { UNIT = 1e+9; MIN = 0; } KEYWORD POWER = arithmetic_model { VALUETYPE = number; } POWER { UNIT = 1e-3; } KEYWORD CAPACITANCE = arithmetic_model { VALUETYPE = number; } CAPACITANCE { UNIT = 1e-12; MIN = 0; CLASS { static_measurement transient_measurement } } KEYWORD RESISTANCE = arithmetic_model { VALUETYPE = number; } RESISTANCE { UNIT = 1e+3; MIN = 0; CLASS { static_measurement transient_measurement } } KEYWORD INDUCTANCE = arithmetic_model { VALUETYPE = number; } INDUCTANCE { UNIT = 1e-6; MIN = 0; CLASS { static_measurement transient_measurement } } KEYWORD DISTANCE = arithmetic_model { VALUETYPE = number; } DISTANCE { UNIT = 1e-6; MIN = 0; } KEYWORD AREA = arithmetic_model { VALUETYPE = number; } AREA { UNIT = 1e-12; MIN = 0; } KEYWORD FLUENCE = arithmetic_model { VALUETYPE = number; } FLUENCE { UNIT = 1e+12; } KEYWORD FLUX = arithmetic_model { VALUETYPE = number; } FLUX { UNIT = 1e+21; } KEYWORD TEMPERATURE = arithmetic_model { VALUETYPE = number; } TEMPERATURE { UNIT = 1; MIN = -273; } /** arithmetic models related to SI-system **/ KEYWORD DELAY = arithmetic_model { SI_MODEL = TIME; } KEYWORD RETAIN = arithmetic_model { SI_MODEL = TIME; } KEYWORD SLEWRATE = arithmetic_model { SI_MODEL = TIME; CLASS = transient_measurement; } SLEWRATE { MIN = 0; } KEYWORD SKEW = arithmetic_model { SI_MODEL = TIME; } KEYWORD JITTER = arithmetic_model { SI_MODEL = TIME; } JITTER { MIN = 0; } KEYWORD SETUP = arithmetic_model { SI_MODEL = TIME; } KEYWORD HOLD = arithmetic_model { SI_MODEL = TIME; } KEYWORD RECOVERY = arithmetic_model { SI_MODEL = TIME; } KEYWORD REMOVAL = arithmetic_model { SI_MODEL = TIME; } KEYWORD PULSEWIDTH = arithmetic_model { SI_MODEL = TIME; CLASS = transient_measurement; } PULSEWIDTH { MIN = 0; } KEYWORD PERIOD = arithmetic_model { SI_MODEL = TIME; } PERIOD { MIN = 0; } KEYWORD NOCHANGE = arithmetic_model { SI_MODEL = TIME; } NOCHANGE { MIN = 0; } KEYWORD ILLEGAL = arithmetic_model { SI_MODEL = TIME; } ILLEGAL { DEFAULT = 0; MIN = 0; } KEYWORD LENGTH = arithmetic_model { SI_MODEL = DISTANCE; } KEYWORD WIDTH = arithmetic_model { SI_MODEL = DISTANCE; } KEYWORD HEIGHT = arithmetic_model { SI_MODEL = DISTANCE; } KEYWORD THICKNESS = arithmetic_model { SI_MODEL = DISTANCE; } KEYWORD PERIMETER = arithmetic_model { SI_MODEL = DISTANCE; } KEYWORD OVERHANG = arithmetic_model { SI_MODEL = DISTANCE; } KEYWORD EXTENSION = arithmetic_model { SI_MODEL = DISTANCE; } /** other arithmetic models **/ KEYWORD THRESHOLD = arithmetic_model { VALUETYPE = number; } THRESHOLD { UNIT = 1; MIN = 0; MAX = 1; CLASS = transient_measurement; } KEYWORD NOISE = arithmetic_model { VALUETYPE = number; CLASS = static_measurement; } NOISE { UNIT = 1; } KEYWORD NOISE_MARGIN = arithmetic_model { VALUETYPE = number; CLASS = static_measurement; } NOISE_MARGIN { UNIT = 1; MIN = 0; } KEYWORD SIZE = arithmetic_model { VALUETYPE = number; } SIZE { UNIT = 1; MIN = 0; } KEYWORD DENSITY = arithmetic_model { VALUETYPE = number; } // new IEEE P1603 feature DENSITY { UNIT = 1; MIN = 0; } KEYWORD DRIVE_STRENGTH = arithmetic_model { VALUETYPE = number; CLASS { static_measurement transient_measurement } } DRIVE_STRENGTH { UNIT = 1; MIN = 0; } KEYWORD FANOUT = arithmetic_model { VALUETYPE = unsigned; } KEYWORD FANIN = arithmetic_model { VALUETYPE = unsigned; } KEYWORD CONNECTIONS = arithmetic_model { VALUETYPE = unsigned; } CONNECTIONS { HEADER { FANIN {} FANOUT {} } EQUATION { FANIN + FANOUT } } KEYWORD SWITCHING_BITS = arithmetic_model { VALUETYPE = unsigned; } KEYWORD PROCESS = arithmetic_model { VALUETYPE = identifier; } PROCESS { TABLE { snsp snwp wnsp wnwp } } KEYWORD DERATE_CASE = arithmetic_model { VALUETYPE = identifier; } DERATE_CASE { TABLE { nom bccom wccom bcind wcind bcmil wcmil } } KEYWORD CONNECTIVITY = arithmetic_model { VALUETYPE = bit_literal; } KEYWORD DRIVER = arithmetic_model { VALUETYPE = identifier; } KEYWORD RECEIVER = arithmetic_model { VALUETYPE = identifier; } /*** Annotations ***/ /** Annotations for CELL **/ KEYWORD CELLTYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CELL; VALUES { buffer combinational multiplexor latch flipflop memory block core special } } KEYWORD BUFFERTYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CELL; VALUES { input output inout internal } DEFAULT = internal; } KEYWORD DRIVERTYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CELL; VALUES { predriver slotdriver both } } KEYWORD PLACEMENT_TYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CELL; VALUES { pad core ring block connector } DEFAULT = core; } KEYWORD SCAN_TYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CELL; VALUES { muxscan clocked lssd control_0 control_1 } } KEYWORD SCAN_USAGE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CELL; VALUES { input output hold } } KEYWORD SWAP_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = CELL; } KEYWORD RESTRICT_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = { CLASS CELL } } KEYWORD PARALLEL_DRIVE = single_value_annotation { VALUETYPE = unsigned; CONTEXT = CELL; } /** Annotations for PINGROUP (formerly PIN_GROUP), PIN, and PORT **/ KEYWORD MEMBERS = multi_value_annotation { VALUETYPE = identifier; CONTEXT = PINGROUP; } KEYWORD VIEW = single_value_annotation { VALUETYPE = identifier; CONTEXT { PIN PORT } VALUES { functional physical both none } DEFAULT = both; } KEYWORD PINTYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { digital analog supply } DEFAULT = digital; } KEYWORD DIRECTION = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { input output both none } } KEYWORD SIGNALTYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { data address control select enable out_enable tie clear set clock master_clock slave_clock } DEFAULT = data; } KEYWORD SIGNAL_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = PIN; } // proposed for IEEE 1603 to reduce values for SIGNALTYPE // old: SIGNALTYPE = read_write_enable; // new: SIGNALTYPEE = enable; CONTROL { read write } KEYWORD CONTROL = one_level_annotation { VALUETYPE = identifier; CONTEXT = PIN; } KEYWORD POLARITY = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { high low rising_edge falling_edge double_edge } } // proposed for IEEE 1603 to reduce values for SIGNALTYPE KEYWORD CONTROL_POLARITY = one_level_annotation_container { VALUETYPE = identifier; CONTEXT = PIN; VALUES { high low rising_edge falling_edge double_edge } } KEYWORD ACTION = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { synchronous asynchronous } } KEYWORD DATATYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT { PINGROUP PIN } VALUES { signed unsigned } } KEYWORD INITIAL_VALUE = single_value_annotation { VALUETYPE = boolean_value; CONTEXT { PINGROUP PIN } } KEYWORD SCAN_POSITION = single_value_annotation { VALUETYPE = unsigned; CONTEXT = PIN; } KEYWORD STUCK = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { stuck_at_1 stuck_at_0 both none } DEFAULT = both; } KEYWORD SUPPLYTYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT { CLASS PIN } VALUES { power ground reference } } KEYWORD SUPPLY_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = { CLASS PIN ENERGY POWER } } KEYWORD DRIVETYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { cmos nmos pmos nmos_pass pmos_pass cmos_pass ttl open_drain open_source } DEFAULT = cmos; } KEYWORD SCOPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = PIN; VALUES { behavior measure both none } DEFAULT = both; } KEYWORD CONNECT_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT { PIN PORT } } KEYWORD SIDE = single_value_annotation { VALUETYPE = identifier; CONTEXT { PINGROUP PIN } VALUES { left right top bottom } } KEYWORD ROW = one_level_annotation { VALUETYPE = unsigned; CONTEXT = PIN; } KEYWORD COLUMN = one_level_annotation { VALUETYPE = unsigned; CONTEXT = PIN; } KEYWORD ROUTING_TYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT { PIN PORT } VALUES { regular abutment ring feedthrough } DEFAULT = regular; } /** Annotations for WIRE **/ KEYWORD WIRETYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = WIRE; } // since we have CELLTYPE, PINTYPE, NODETYPE ... KEYWORD SELECT_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = WIRE; } /** Annotations for NODE **/ KEYWORD NODETYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = NODE; VALUES { power ground source sink driver receiver } } KEYWORD NODE_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = NODE; } /** Annotations for VECTOR **/ KEYWORD LABEL = single_value_annotation { VALUETYPE = string; CONTEXT = VECTOR; } KEYWORD OPERATION = single_value_annotation { VALUETYPE = identifier; CONTEXT = VECTOR; VALUES { read write read_modify_write write_through start end refresh load iddq } } KEYWORD MONITOR = one_level_annotation { VALUETYPE = identifier; CONTEXT = VECTOR; } KEYWORD EXISTENCE_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = VECTOR; } KEYWORD EXISTENCE_CONDITION = single_value_annotation { VALUETYPE = boolean_expression; CONTEXT { CLASS VECTOR } } KEYWORD CHARACTERIZATION_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = VECTOR; } KEYWORD CHARACTERIZATION_CONDITION = single_value_annotation { VALUETYPE = boolean_expression; CONTEXT { CLASS VECTOR } } KEYWORD CHARACTERIZATION_VECTOR = single_value_annotation { VALUETYPE = control_expression; CONTEXT { CLASS VECTOR } } /** Annotations for LAYER **/ KEYWORD PITCH = single_value_annotation { VALUETYPE = non_negative_number; CONTEXT = LAYER; } KEYWORD PREFERENCE = single_value_annotation { VALUETYPE = identifier; CONTEXT = LAYER; VALUES { horizontal vertical } } /** Annotations for VIA **/ KEYWORD USAGE = single_value_annotation { VALUETYPE = identifier; CONTEXT = VIA; VALUES { default non_default partial_stack full_stack } DEFAULT = default; } /** Annotations for SITE **/ KEYWORD ORIENTATION_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = SITE; } KEYWORD SYMMETRY_CLASS = one_level_annotation { VALUETYPE = identifier; CONTEXT = SITE; } /** Annotations for PATTERN **/ KEYWORD SHAPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = PATTERN; VALUES { line tee cross jog corner end } DEFAULT = line; } KEYWORD ROUTE = single_value_annotation { VALUETYPE = identifier; CONTEXT { PATTERN WIDTH HEIGHT LENGTH } VALUES { horizontal acute vertical obtuse } } KEYWORD VERTEX = single_value_annotation { VALUETYPE = identifier; CONTEXT = PATTERN; VALUES { round straight } DEFAULT = straight; } /** Annotations for arithmetic models **/ KEYWORD CONNECT_RULE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CONNECTIVITY; VALUES { must_short can_short cannot_short } } KEYWORD CONNECT_TYPE = single_value_annotation { VALUETYPE = identifier; CONTEXT = CONNECTIVITY; VALUES { electrical physical } DEFAULT = electrical; } KEYWORD BETWEEN = one_level_annotation { VALUETYPE = identifier; CONTEXT { CONNECTIVITY DISTANCE LENGTH } } KEYWORD REFERENCE = one_level_annotation_container { VALUETYPE = identifier; CONTEXT = DISTANCE; VALUES { center origin edge } } KEYWORD FLOW = single_value_annotation { VALUETYPE = identifier; CONTEXT = CURRENT; VALUES { in out } DEFAULT = in; } KEYWORD TARGET = single_value_annotation { VALUETYPE = identifier; CONTEXT = SIZE; } /** Annotations with context-specific value set (need to be re-visited) **/ KEYWORD MEASUREMENT = single_value_annotation { VALUETYPE = identifier; CONTEXT { ENERGY POWER } VALUES { average absolute_average rms peak static transient } } // keyword redefined in different context! KEYWORD MEASUREMENT = single_value_annotation { VALUETYPE = identifier; CONTEXT = DISTANCE; VALUES { straight horizontal vertical manhattan } DEFAULT = straight; } // change to "KEYWORD PATH" ? /* alternative suggestion: context-specific definition of keyword KEYWORD MEASUREMENT = single_value_annotation { VALUETYPE = identifier; VALUE_CONTEXT { electrical_measurement { ENERGY POWER } distance_measurement { DISTANCE } } VALUE_SET { electrical_measurement { average absolute_average rms peak static transient } distance_measurement { straight horizontal vertical manhattan } } DEFAULT_SET { distance_measurement = straight; } } */ KEYWORD PURPOSE = one_level_annotation { VALUETYPE = identifier; CONTEXT { CLASS VECTOR } VALUES { timing power integrity bist test } } // keyword redefined in different context! KEYWORD PURPOSE = single_value_annotation { VALUETYPE = identifier; CONTEXT = LAYER; VALUES { routing cut substrate dielectric reserved abstract } } // change to "KEYWORD LAYERTYPE" ? // keyword redefined in different context! KEYWORD PURPOSE = single_value_annotation { VALUETYPE = identifier; CONTEXT = ARRAY; VALUES { global floorplan placement routing } } // change to "KEYWORD ARRAYTYPE" ?