LIBRARY sampleLib { KEYWORD TIMECONSTANT = arithmetic_model ; SEMANTICS TIMECONSTANT { SI_MODEL = TIME ; } WIRE ElmorePi { NODE gnd { NODETYPE = ground ; } NODE virtual { NODETYPE = source ; } NODE near { NODETYPE = driver ; } NODE far { NODETYPE = receiver ; } RESISTANCE rdriver { NODE { virtual near } } CAPACITANCE cnear { NODE { near gnd } } RESISTANCE rwire { NODE { near far } } CAPACITANCE cfar { NODE { far gnd } } TIMECONSTANT tnear { HEADER { RESISTANCE r1 { MODEL = rdriver ; } CAPACITANCE c1 { MODEL = cnear ; } } EQUATION { r1 * c1 } } TIMECONSTANT tfar { HEADER { RESISTANCE r1 { MODEL = rdriver ; } RESISTANCE r2 { MODEL = rwire ; } CAPACITANCE c2 { MODEL = cfar ; } } EQUATION { ( r1 + r2 ) * c2 } } CAPACITANCE ceff { HEADER { RESISTANCE r1 { MODEL = rdriver ; } RESISTANCE r2 { MODEL = rwire ; } TIMECONSTANT t1 { MODEL = tnear ; } TIMECONSTANT t2 { MODEL = tfar ; } } EQUATION { ( t1 + t2 ) / ( r1 + r2 ) } } VECTOR ( 01 near -> 01 far ) { CAPACITANCE { PIN = near ; MODEL = ceff ; } DELAY { FROM { PIN = near ; } TO { PIN = far ; } HEADER { TIMECONSTANT t1 { MODEL = tnear ; } TIMECONSTANT t2 { MODEL = tfar ; } } EQUATION { 0.3 * t1 + 0.7 * t2 } } } VECTOR ( 10 near -> 10 far ) { CAPACITANCE { PIN = near ; MODEL = ceff ; } DELAY { FROM { PIN = near ; } TO { PIN = far ; } HEADER { TIMECONSTANT t1 { MODEL = tnear ; } TIMECONSTANT t2 { MODEL = tfar ; } } EQUATION { 0.4 * t1 + 0.6 * t2 } } } } // end WIRE ElmorePi TEMPLATE CellTimingPower { DELAY { FROM { PIN = ; } TO { PIN = ; } HEADER { CAPACITANCE { PIN = ; TABLE { } } SLEWRATE { PIN = ; TABLE { } } } TABLE { } } SLEWRATE { PIN = ; HEADER { CAPACITANCE { PIN = ; TABLE { } } SLEWRATE { PIN = ; TABLE { } } } TABLE { } } ENERGY { HEADER { CAPACITANCE { PIN = ; TABLE { } } SLEWRATE { PIN = ; TABLE { } } } TABLE { } } } // end TEMPLATE CellTimingPower CELL sampleInv { PIN A { DIRECTION = input ; CAPACITANCE = 0.01 ; } PIN Y { DIRECTION = output ; LIMIT { CAPACITANCE { MAX = 1.0 ; } } } VECTOR ( 10 A -> 01 Y ) { CellTimingPower { FromPin = A ; ToPin = Y ; CapIndex { 0 0.5 1 } SlewIndex { 0 1 } DelayTable { 0 0.5 1 1 1.5 2 } SlewTable { 0 0.5 1 1 1.5 2 } PowerTable { 0 0.5 1 1 1.5 2 } } } VECTOR ( 01 A -> 10 Y ) { CellTimingPower { FromPin = A ; ToPin = Y ; CapIndex { 0 0.5 1 } SlewIndex { 0 1 } DelayTable { 0 0.5 1 1 1.5 2 } SlewTable { 0 0.5 1 1 1.5 2 } PowerTable { 0 0.5 1 1 1.5 2 } } } } // end CELL sampleInv CELL sampleNand2 { PIN A { DIRECTION = input ; CAPACITANCE = 0.01 ; } PIN B { DIRECTION = input ; CAPACITANCE = 0.01 ; } PIN Y { DIRECTION = output ; LIMIT { CAPACITANCE { MAX = 1.0 ; } } } VECTOR ( 10 A -> 01 Y ) { CellTimingPower { FromPin = A ; ToPin = Y ; CapIndex { 0 0.5 1 } SlewIndex { 0 1 } DelayTable { 0 0.5 1 1 1.5 2 } SlewTable { 0 0.5 1 1 1.5 2 } PowerTable { 0 0.5 1 1 1.5 2 } } } VECTOR ( 01 A -> 10 Y ) { CellTimingPower { FromPin = A ; ToPin = Y ; CapIndex { 0 0.5 1 } SlewIndex { 0 1 } DelayTable { 0 0.5 1 1 1.5 2 } SlewTable { 0 0.5 1 1 1.5 2 } PowerTable { 0 0.5 1 1 1.5 2 } } } VECTOR ( 10 B -> 01 Y ) { CellTimingPower { FromPin = B ; ToPin = Y ; CapIndex { 0 0.5 1 } SlewIndex { 0 1 } DelayTable { 0 0.5 1 1 1.5 2 } SlewTable { 0 0.5 1 1 1.5 2 } PowerTable { 0 0.5 1 1 1.5 2 } } } VECTOR ( 01 B -> 10 Y ) { CellTimingPower { FromPin = B ; ToPin = Y ; CapIndex { 0 0.5 1 } SlewIndex { 0 1 } DelayTable { 0 0.5 1 1 1.5 2 } SlewTable { 0 0.5 1 1 1.5 2 } PowerTable { 0 0.5 1 1 1.5 2 } } } } // end CELL sampleNand2 } // end LIBRARY sampleLib