<> <> <> <> <> DIRECTORY SCLibGen; SCLibGenCells2: CEDAR PROGRAM IMPORTS SCLibGen = BEGIN OPEN SCLibGen; CreateCellDLatch1: GeneratorProc = BEGIN Setup[design, "p1", "p4", "p1", "p1", "p1", "p1", "p4", "p1", "p4", "p1", "p1", "p4"]; MakeCont[row: 1, start: 1, n: 6]; MakeCont[row: 2, start: 2, n: 7]; MakeCont[row: 3, start: 2, n: 4]; MakeCont[row: 4, start: 1, n: 2]; MakeCont[row: 5, start: 2, n: 5]; MakeCont[row: 6, start: 5, n: 2]; MakeCont[row: 7, start: 2, n: 4]; MakeCont[row: 8, start: 1, n: 5]; MakeCont[row: 9, start: 8, n: 1]; MakeCont[row: 10, start: 2, n: 3]; MakeVia[row: 10, start: 5, n: 1]; MakeCont[row: 11, start: 1, n: 5]; MakeCont[row: 12, start: 2, n: 6]; HorizontalM[rowL: 2, rowR: 4, h: 6]; HorizontalM[rowL: 6, rowR: 11, h: 6]; HorizontalM[rowL: 3, rowR: 7, h: 4, back: TRUE]; HorizontalM[rowL: 9, rowR: 10, h: 8, back: TRUE]; VerticalM[row: 4, h1: 6, h2: 7, front: TRUE]; VerticalM[row: 7, h1: 6, h2: 9]; VerticalM[row: 8, h1: 6, h2: 7, front: TRUE]; VerticalM[row: 11, h1: 6, h2: 7, front: TRUE]; <<>> SetN[]; MakeCont[row: 1, start: 1, n: 1]; MakeVia[row: 1, start: 3, n: 1, back: TRUE]; MakeCont[row: 2, start: 4, n: 1]; MakeCont[row: 3, start: 4, n: 1]; MakeCont[row: 5, start: 1, n: 1]; MakeVia[row: 5, start: 3, n: 1, back: TRUE]; MakeVia[row: 6, start: 3, n: 1, back: TRUE]; MakeCont[row: 7, start: 4, n: 1]; MakeCont[row: 8, start: 1, n: 1]; MakeCont[row: 9, start: 2, n: 3]; MakeCont[row: 10, start: 2, n: 2]; MakeVia[row: 10, start: 4, n: 1]; MakeCont[row: 11, start: 1, n: 4]; MakeCont[row: 12, start: 2, n: 3]; HorizontalM[rowL: 1, rowR: 5, h: 3, back: TRUE]; HorizontalM[rowL: 6, rowR: 9, h: 3, back: TRUE]; HorizontalM[rowL: 3, rowR: 7, h: 4]; PassMs[2, 7, 9, 12]; ContactM2[1, 3, 5, 6, 12]; Pins[12, "NCK", NIL, "D", NIL, NIL, NIL, NIL, NIL, NIL, "NQ", NIL, "Q"]; PinOrder["NCK D Q NQ Vdd Gnd"]; ob _ Finish["C2LT01A.mask"]; END; CreateCellDLatch2: GeneratorProc = BEGIN Setup[design, "p1", "p4", "p1", "p1", "p1", "p4", "p1", "p1", "p1", "p4", "p1", "p1", "p4"]; MakeCont[row: 1, start: 1, n: 1]; MakeVia[row: 1, start: 3, n: 1, back: TRUE]; HorizontalM[rowL: 1, rowR: 7, h: 2]; MakeCont[row: 2, start: 5, n: 4]; HorizontalM[rowL: 2, rowR: 3, h: 8]; MakeCont[row: 3, start: 5, n: 3, back: TRUE]; HorizontalM[rowL: 3, rowR: 5, h: 7, back: TRUE]; MakeCont[row: 4, start: 1, n: 1]; MakeVia[row: 4, start: 4, n: 1, back: TRUE]; HorizontalM[rowL: 4, rowR: 8, h: 3]; MakeCont[row: 5, start: 6, n: 2, back: TRUE]; MakeCont[row: 6, start: 5, n: 1]; MakeVia[row: 6, start: 6, n: 1]; HorizontalM[rowL: 6, rowR: 12, h: 5, back: TRUE]; MakeCont[row: 7, start: 7, n: 1, back: TRUE]; HorizontalM[rowL: 7, rowR: 9, h: 7, back: TRUE]; MakeVia[row: 7, start: 2, n: 1]; MakeCont[row: 8, start: 1, n: 1]; MakeVia[row: 8, start: 3, n: 1]; MakeCont[row: 9, start: 7, n: 1, back: TRUE]; MakeVia[row: 9, start: 5, n: 1, back: TRUE]; MakeCont[row: 10, start: 7, n: 2]; HorizontalM[rowL: 10, rowR: 11, h: 8]; MakeCont[row: 11, start: 2, n: 1]; MakeVia[row: 11, start: 3, n: 1]; MakeCont[row: 12, start: 1, n: 3]; MakeCont[row: 13, start: 2, n: 6]; VerticalM[row: 12, h1: 5, h2: 8, front: TRUE]; <<>> SetN[]; MakeCont[row: 1, start: 1, n: 4]; MakeCont[row: 2, start: 2, n: 3]; MakeCont[row: 3, start: 2, n: 3]; MakeCont[row: 5, start: 1, n: 1]; MakeCont[row: 6, start: 3, n: 1]; MakeVia[row: 6, start: 2, n: 1]; MakeCont[row: 7, start: 2, n: 3]; MakeCont[row: 9, start: 1, n: 3]; MakeCont[row: 10, start: 2, n: 3]; MakeCont[row: 11, start: 2, n: 2]; MakeVia[row: 11, start: 4, n: 1]; MakeCont[row: 12, start: 1, n: 4]; MakeCont[row: 13, start: 2, n: 3]; HorizontalM[rowL: 3, rowR: 6, h: 3]; HorizontalM[rowL: 5, rowR: 10, h: 4]; PassMs[2, 5, 10, 13]; ContactM2[1, 4, 7, 8, 9, 13]; Pins[13, "D", NIL, NIL, "CK", NIL, NIL, NIL, NIL, NIL, NIL, "Q", NIL, "NQ"]; PinOrder["CK D Q NQ Vdd Gnd"]; ob _ Finish["C2LT02A.mask"]; END; XLatch: PROC [n: INT] = { MakeCont[row: 1, start: 1, n: 6]; MakeCont[row: 2, start: 2, n: 7]; HorizontalM[rowL: 2, rowR: 4, h: 7, back: TRUE]; MakeCont[row: 3, start: 2, n: 4]; MakeCont[row: 4, start: 1, n: 2]; VerticalM[row: 4, h1: 7, h2: 8, front: TRUE]; MakeCont[row: 5, start: 2, n: 5]; MakeCont[row: 6, start: 6, n: 2, back: TRUE]; MakeCont[row: n+2, start: 8, n: 1]; HorizontalM[rowL: n+2, rowR: n+3, h: 8, back: TRUE]; MakeCont[row: n+3, start: 2, n: 3]; MakeVia[row: n+3, start: 5, n: 1]; MakeCont[row: n+4, start: 1, n: 5]; VerticalM[row: n+4, h1: 7, h2: 8, front: TRUE]; MakeCont[row: n+5, start: 2, n: 6]; SetN[]; MakeCont[row: 1, start: 1, n: 1]; MakeVia[row: 1, start: 3, n: 1, back: TRUE]; HorizontalM[rowL: 1, rowR: 5, h: 2]; MakeCont[row: 2, start: 4, n: 1]; MakeCont[row: 3, start: 4, n: 1]; MakeCont[row: 5, start: 1, n: 1]; MakeVia[row: 5, start: 3, n: 1, back: TRUE]; MakeVia[row: 6, start: 3, n: 1, back: TRUE]; MakeCont[row: n+3, start: 2, n: 2]; MakeVia[row: n+3, start: 4, n: 1]; MakeCont[row: n+4, start: 1, n: 4]; MakeCont[row: n+5, start: 2, n: 3]; ContactM2[1, 3 , 5, 6, n+5]; PassMs[2, n+2, n+5]; }; CreateCellDLatch3: GeneratorProc = BEGIN Setup[design, "p1", "p4", "p1", "p1", "p1", "p1", "p4", "p1", "p4", "p1", "p4", "p1", "p1", "p4"]; MakeCont[row: 7, start: 2, n: 4]; MakeCont[row: 8, start: 2, n: 5]; MakeCont[row: 9, start: 2, n: 7]; HorizontalM[rowL: 3, rowR: 7, h: 4]; HorizontalM[rowL: 6, rowR: 8, h: 6]; HorizontalM[rowL: 9, rowR: 13, h: 7, back: TRUE]; MakeCont[row: 10, start: 1, n: 5]; VerticalM[row: 10, h1: 7, h2: 9]; <<>> XLatch[9]; MakeCont[row: 7, start: 4, n: 1]; MakeCont[row: 8, start: 4, n: 1]; MakeCont[row: 9, start: 1, n: 1]; HorizontalM[rowL: 3, rowR: 9, h: 4, shortEnd: FALSE]; HorizontalM[rowL: 6, rowR: 11, h: 2]; MakeCont[row: 10, start: 1, n: 1]; MakeCont[row: 11, start: 2, n: 3]; MakeCont[row: 12, start: 2, n: 2]; PassMs[9]; ContactM2[8]; Pins[14, NIL, NIL, "D", NIL, "NCK", NIL, NIL, "P", NIL, NIL, NIL, "NQ", NIL, "Q"]; PinOrder["NCK D P Q NQ Vdd Gnd"]; ob _ Finish["C2LT03A.mask"]; END; CreateCellDLatch4: GeneratorProc = BEGIN Setup[design, "p1", "p4", "p1", "p1", "p1", "p1", "p4", "p1", "p1", "p4", "p1", "p1", "p4"]; MakeCont[row: 7, start: 2, n: 4]; MakeCont[row: 8, start: 1, n: 5]; HorizontalM[rowL: 3, rowR: 7, h: 4]; HorizontalM[rowL: 6, rowR: 12, h: 7, back: TRUE]; VerticalM[row: 7, h1: 7, h2: 9]; VerticalM[row: 8, h1: 7, h2: 9]; MakeVia[row: 9, start: 8, n: 1]; <<>> XLatch[8]; HorizontalM[rowL: 3, rowR: 7, h: 4]; MakeCont[row: 7, start: 4, n: 1]; MakeCont[row: 8, start: 1, n: 1]; HorizontalM[rowL: 6, rowR: 10, h: 2, shortEnd: FALSE]; VerticalM[row: 10, h1: 2, h2: 5]; MakeCont[row: 9, start: 2, n: 3, back: TRUE]; MakeCont[row: 10, start: 1, n: 1]; PassMs[7]; Pins[13 , NIL, NIL, "D", NIL, "NCK", NIL, NIL, NIL, "R", NIL, "NQ", NIL, "Q"]; PinOrder["NCK D R Q NQ X Vdd Gnd"]; ob _ Finish["C2LT04A.mask"]; END; Register["DLatch1", CreateCellDLatch1]; Register["DLatch2", CreateCellDLatch2]; Register["DLatch3", CreateCellDLatch3]; Register["DLatch4", CreateCellDLatch4]; END.