/* Value encoding ab.cd ab = TG number, 1, 2, 3, etc cd = edge pair: 11 = RR 12 = RF 21 = FR 22 = FF 30 = R->HZ 31 = R->ZH 32 = R->LZ 33 = R->ZL 40 = L->HZ 41 = L->ZH 42 = L->LZ 43 = L->ZL 51 = rise slew 52 = fall slew */ /* CASE A 1 */ /* NOWHEN1 Only default timing groups (no when). Single, default TG for a given EC. */ cell (NOWHEN1) { cell_footprint : when; area : 55.0; pin(A) { direction : input; capacitance : 0.01; } pin(B) { direction : input; capacitance : 0.01; } pin(Y) { direction : output; capacitance : 0.0; /* function : "A + B"; */ /* A,Y PIN PAIR: RR RF FR FF WHEN TG1 x x TG2 x x */ /* TG1 */ timing() { related_pin : "A"; timing_sense : positive_unate; cell_rise(scalar) {values("1.11");} rise_transition(scalar) {values("1.51");} cell_fall(scalar) {values("1.22");} fall_transition(scalar) {values("1.52");} } /* TG2 */ timing() { related_pin : "A"; timing_sense : negative_unate; cell_fall(scalar) {values("2.12");} fall_transition(scalar) {values("2.52");} cell_rise(scalar) {values("2.21");} rise_transition(scalar) {values("2.51");} } /* B,Y PIN PAIR: RR RF FR FF WHEN TG3 x x TG4 x x */ /* TG3 */ timing() { related_pin : "B"; timing_sense : positive_unate; cell_fall(scalar) {values("3.22");} fall_transition(scalar) {values("3.52");} cell_rise(scalar) {values("3.11");} rise_transition(scalar) {values("3.51");} } /* TG4 */ timing() { related_pin : "B"; timing_sense : negative_unate; cell_rise(scalar) {values("4.21");} rise_transition(scalar) {values("4.51");} cell_fall(scalar) {values("4.12");} fall_transition(scalar) {values("4.52");} } max_capacitance : 1.1; } cell_leakage_power : 4000.0; } /* CASE A 2 */ /* NOWHEN2 Only default timing groups (no when). Multiple, default TG for a given EC. */ cell (NOWHEN2) { cell_footprint : when; area : 55.0; pin(A) { direction : input; capacitance : 0.01; } pin(B) { direction : input; capacitance : 0.01; } pin(Y) { direction : output; capacitance : 0.0; /* function : "A + B"; */ /* A,Y PIN PAIR: RR RF FR FF WHEN TG1 x x TG2 x x TG3 x x TG4 x x */ /* MIN MAX DELAY DELAY ------ ------ RR TG1 TG2 RF TG3 TG4 FR TG3 TG4 FF TG1 TG2 */ /* TG1 */ timing() { related_pin : "A"; timing_sense : positive_unate; cell_rise(scalar) {values("1.11");} rise_transition(scalar) {values("1.51");} cell_fall(scalar) {values("1.22");} fall_transition(scalar) {values("1.52");} } /* TG2 */ timing() { related_pin : "A"; timing_sense : positive_unate; cell_rise(scalar) {values("2.11");} rise_transition(scalar) {values("2.51");} cell_fall(scalar) {values("2.22");} fall_transition(scalar) {values("2.52");} } /* TG3 */ timing() { related_pin : "A"; timing_sense : negative_unate; cell_fall(scalar) {values("3.12");} fall_transition(scalar) {values("3.52");} cell_rise(scalar) {values("3.21");} rise_transition(scalar) {values("3.51");} } /* TG4 */ timing() { related_pin : "A"; timing_sense : negative_unate; cell_fall(scalar) {values("4.12");} fall_transition(scalar) {values("4.52");} cell_rise(scalar) {values("4.21");} rise_transition(scalar) {values("4.51");} } /* B,Y PIN PAIR: RR RF FR FF WHEN TG5 x x TG6 x x TG7 x x TG8 x x */ /* MIN MAX DELAY DELAY ------ ------ RR TG5 TG6 RF TG7 TG8 FR TG7 TG8 FF TG5 TG6 */ /* TG5 */ timing() { related_pin : "B"; timing_sense : positive_unate; cell_fall(scalar) {values("5.22");} fall_transition(scalar) {values("5.52");} cell_rise(scalar) {values("5.11");} rise_transition(scalar) {values("5.51");} } /* TG6 */ timing() { related_pin : "B"; timing_sense : positive_unate; cell_fall(scalar) {values("6.22");} fall_transition(scalar) {values("6.52");} cell_rise(scalar) {values("6.11");} rise_transition(scalar) {values("6.51");} } /* TG7 */ timing() { related_pin : "B"; timing_sense : negative_unate; cell_rise(scalar) {values("7.21");} rise_transition(scalar) {values("7.51");} cell_fall(scalar) {values("7.12");} fall_transition(scalar) {values("7.52");} } /* TG8 */ timing() { related_pin : "B"; timing_sense : negative_unate; cell_rise(scalar) {values("8.21");} rise_transition(scalar) {values("8.51");} cell_fall(scalar) {values("8.12");} fall_transition(scalar) {values("8.52");} } max_capacitance : 1.1; } cell_leakage_power : 4000.0; } /* CASE B 1 */ /* WHEN1 Only when timing groups (no default). Single, when TG for a given EC. */ cell (WHEN1) { cell_footprint : when; area : 55.0; pin(A) { direction : input; capacitance : 0.01; } pin(B) { direction : input; capacitance : 0.01; } pin(CA1) { direction : input; capacitance : 0.01; } pin(CA2) { direction : input; capacitance : 0.01; } pin(CB1) { direction : input; capacitance : 0.01; } pin(CB2) { direction : input; capacitance : 0.01; } pin(Y) { direction : output; capacitance : 0.0; /* A,Y PIN PAIR: RR RF FR FF WHEN TG1 x !CA1 * !CA2 */ /* TG1 */ timing() { related_pin : "A"; timing_sense : positive_unate; when : "!CA1 * !CA2"; cell_rise(scalar) {values("1.11");} rise_transition(scalar) {values("1.51");} } /* B,Y PIN PAIR: RR RF FR FF WHEN TG5 x !CB1 * !CB2 TG6 x !CB1 * CB2 TG7 x CB1 * !CB2 TG8 x CB1 * CB2 */ /* TG5 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "!CB1 * !CB2"; cell_fall(scalar) {values("5.22");} fall_transition(scalar) {values("5.52");} } /* TG6 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "!CB1 * CB2"; cell_rise(scalar) {values("6.21");} rise_transition(scalar) {values("6.51");} } /* TG7 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "CB1 * !CB2"; cell_fall(scalar) {values("7.12");} fall_transition(scalar) {values("7.52");} } /* TG8 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "CB1 * CB2"; cell_rise(scalar) {values("8.11");} rise_transition(scalar) {values("8.51");} } max_capacitance : 1.1; } cell_leakage_power : 4000.0; } /* CASE B 2 */ /* WHEN2 Only when timing groups (no default). Multiple "when" for a pin-pair. */ cell (WHEN2) { cell_footprint : when1; area : 55.0; pin(A) { direction : input; capacitance : 0.01; } pin(B) { direction : input; capacitance : 0.01; } pin(CA1) { direction : input; capacitance : 0.01; } pin(CA2) { direction : input; capacitance : 0.01; } pin(CB1) { direction : input; capacitance : 0.01; } pin(CB2) { direction : input; capacitance : 0.01; } pin(Y) { direction : output; capacitance : 0.0; /* function : "A + B"; */ /* A,Y PIN PAIR: RR RF FR FF WHEN TG1 x !CA1 * !CA2 TG2 x !CA1 * !CA2 */ /* MIN MAX DELAY DELAY ------ ------ RR TG1 TG2 */ /* TG1 */ timing() { related_pin : "A"; timing_sense : positive_unate; when : "!CA1 * !CA2"; cell_rise(scalar) {values("1.11");} rise_transition(scalar) {values("1.51");} } /* TG2 */ timing() { related_pin : "A"; timing_sense : positive_unate; when : "!CA1 * !CA2"; cell_rise(scalar) {values("2.11");} rise_transition(scalar) {values("2.51");} } /* B,Y PIN PAIR: RR RF FR FF WHEN TG3 x !CB1 * !CB2 TG4 x !CB1 * !CB2 TG5 x !CB1 * CB2 TG6 x !CB1 * CB2 TG7 x CB1 * !CB2 TG8 x CB1 * !CB2 TG9 x CB1 * CB2 TG10 x CB1 * CB2 */ /* MIN MAX DELAY DELAY ------ ------ RR TG3 TG4 RF TG5 TG6 FR TG7 TG8 FF TG9 TG10 */ /* TG3 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "!CB1 * !CB2"; cell_rise(scalar) {values("3.11");} rise_transition(scalar) {values("3.51");} } /* TG4 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "!CB1 * !CB2"; cell_rise(scalar) {values("4.11");} rise_transition(scalar) {values("4.51");} } /* TG5 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "!CB1 * CB2"; cell_fall(scalar) {values("5.12");} fall_transition(scalar) {values("5.52");} } /* TG6 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "!CB1 * CB2"; cell_fall(scalar) {values("6.12");} fall_transition(scalar) {values("6.52");} } /* TG7 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "CB1 * !CB2"; cell_rise(scalar) {values("7.21");} rise_transition(scalar) {values("7.51");} } /* TG8 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "CB1 * !CB2"; cell_rise(scalar) {values("8.21");} rise_transition(scalar) {values("8.51");} } /* TG9 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "CB1 * CB2"; cell_fall(scalar) {values("9.22");} fall_transition(scalar) {values("9.52");} } /* TG10 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "CB1 * CB2"; cell_fall(scalar) {values("10.22");} fall_transition(scalar) {values("10.52");} } max_capacitance : 1.1; } cell_leakage_power : 4000.0; } /* CASE C 1,2,3,4 */ /* WHEN3 A-Y: Single "when" and single "default" for a given EC (and nothing else for this pin-pair). B-Y: Multiple "when" and single "default" for a given EC. */ cell (WHEN3) { cell_footprint : when1; area : 56.548800; pin(A) { direction : input; capacitance : 0.01; } pin(B) { direction : input; capacitance : 0.01; } pin(CA1) { direction : input; capacitance : 0.01; } pin(CA2) { direction : input; capacitance : 0.01; } pin(CA3) { direction : input; capacitance : 0.01; } pin(CB1) { direction : input; capacitance : 0.01; } pin(CB2) { direction : input; capacitance : 0.01; } pin(CB3) { direction : input; capacitance : 0.01; } pin(Y) { direction : output; capacitance : 0.0; /* function : "A + B"; */ /* CASE C 1 A-Y contains: (1) Single "when" and single "default" for a given EC (and nothing else for this pin-pair). A,Y PIN PAIR: RR RF FR FF WHEN TG1 x CA1 * CA2 TG2 x */ /* TG1 */ timing() { related_pin : "A"; timing_sense : positive_unate; when : "CA1 * CA2"; cell_rise(scalar) {values("1.11");} rise_transition(scalar) {values("1.51");} } /* TG2 */ timing() { related_pin : "A"; timing_sense : positive_unate; cell_rise(scalar) {values("2.11");} rise_transition(scalar) {values("2.51");} } /* B-Y contains: (1) Multiple "when" and single "default" for a given EC (TG3, TG4, TG5). CASE C 2 (2) Single "when" and multiple "default" for a given EC (TG6, TG7, TG8). CASE C 3 (3) Multiple "when" and multiple "default for a given EC (TG9, TG10, TG11, TG12). CASE C 4 B,Y PIN PAIR: RR RF FR FF WHEN TG3 x TG4 x !CB1 * !CB2 * !CB3 TG5 x !CB1 * !CB2 * CB3 TG6 x !CB1 * CB2 * !CB3 TG7 x TG8 x TG9 x TG10 x CB1 * !CB2 * !CB3 TG11 x TG12 x CB1 * !CB2 * CB3 TG13 x */ /* TG3 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "!CB1 * !CB2 * !CB3"; cell_rise(scalar) {values("3.11");} rise_transition(scalar) {values("3.51");} } /* TG4 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "!CB1 * !CB2 * !CB3"; cell_rise(scalar) {values("4.11");} rise_transition(scalar) {values("4.51");} } /* TG5 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "!CB1 * !CB2 * CB3"; cell_rise(scalar) {values("5.11");} rise_transition(scalar) {values("5.51");} } /* TG6 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "!CB1 * CB2 * !CB3"; cell_fall(scalar) {values("6.12");} fall_transition(scalar) {values("6.52");} } /* TG7 */ timing() { related_pin : "B"; timing_sense : negative_unate; cell_fall(scalar) {values("7.12");} fall_transition(scalar) {values("7.52");} } /* TG8 */ timing() { related_pin : "B"; timing_sense : negative_unate; cell_fall(scalar) {values("8.12");} fall_transition(scalar) {values("8.52");} } /* TG9 */ timing() { related_pin : "B"; timing_sense : negative_unate; cell_rise(scalar) {values("9.21");} rise_transition(scalar) {values("9.51");} } /* TG10 */ timing() { related_pin : "B"; timing_sense : negative_unate; when : "CB1 * !CB2 * !CB3"; cell_rise(scalar) {values("10.21");} rise_transition(scalar) {values("10.51");} } /* TG11 */ timing() { related_pin : "B"; timing_sense : negative_unate; cell_rise(scalar) {values("11.21");} rise_transition(scalar) {values("11.51");} } /* TG12 */ timing() { related_pin : "B"; timing_sense : positive_unate; when : "CB1 * !CB2 * CB3"; cell_fall(scalar) {values("12.22");} fall_transition(scalar) {values("12.52");} } /* TG13 */ timing() { related_pin : "B"; timing_sense : positive_unate; cell_fall(scalar) {values("13.22");} fall_transition(scalar) {values("13.52");} } max_capacitance : 1.1; } cell_leakage_power : 4000.0; } }