The Pad Frame generator reads a disk file and places a ring of pads around your chip. The pads are contained in a separate library, and are copied into the current library to construct the pad frame. The format of the pad frame disk file is as follows:

`celllibrary LIBRARYFILE [copy]
cell PADFRAMECELL
views VIEWS
core CORECELL
align PADCELL INPUTPORT OUTPUTPORT
export PADCELL IOPORT [COREPORT]
place PADCELL [GAP] [PORTASSOCIATION]
rotate DIRECTION`

; Identifies the file with the pads
; Creates a cell to hold the pad frame
; A list of views to generate
; Places cell in center of pad frame
; Defines input and output ports on pads
; Defines exports on the pads
; Places a pad into the pad frame
; Turns the corner in pad placement

The file must have exactly one `celllibrary` and `cell` statement, as they identify the pad library and the pad frame cell. If the `celllibrary` line ends with the keyword `copy`, then cells from that library are copied into the library with the pad ring (by default, they are merely instantiated, creating a cross-library reference to the pads library). If there is a `views` statement, it identifies a list of views to generate (such as `sch` or `lay`). Requesting multiple views will produce multiple pad frame cells.

The file may have only one `core` statement to place your top-level circuit inside of the pad frame. If there is no `core` statement, then pads are placed without any circuit in the middle.

The `align` statement is used to identify connection points on the pads that will be used for placement. Each pad should have an input and an output port that define the edges of the pad. These ports are typically the on the power or ground rails that run through the pad. When placing pads, the output port of one pad is aligned with the input port of the next pad.

Each pad that is placed with a `place` statement is aligned with the previous pad according to the alignment factor. A `gap` can be given in the placement that spreads the two pads by the specified distance. For example, the statement:
`place padIn gap=100`
requests that pad "padIn" be placed so that its input port is 100 units from the previous pad's output port.

If a core cell has been given, you can also indicate wiring between the pads and the core ports. This is done by having one or more port associations in the `place` statements. The format of a port association is simply `PADPORT = COREPORT`. For example, the statement:
`place padOut tap=y`
indicates that the "tap" port on the placed pad will connect to the "y" port on the core cell.

The port association can also create an export on the pad. The statement:
`place padOut export io=o7 export tap=core_o7`
creates two exports on the pad, "o7" on its "io" port, and "core_o7" on its "tap" port. For many instances of this pad type, this notation can be condensed with the use of the `name` keyword in conjunction with exports defined for the pad at the start of the file. For example, defining the IO ports as
`export padOut io tap`
and then changing the place statement to
`place padOut name=o7`
results in the same ports being exported with the same names. This shorted notation always prepends name with "core_" on the core port export.

The `rotate` statement rotates subsequent pads by the specified amount. The statement has only two forms: `rotate c` to rotate clockwise, and `rotate cc` to rotate counterclockwise.

Here is an example of a pad frame disk file, with the finished layout. There is a cell in the Samples library called "tool-PadFrame" (get it with the Load Sample Cells Library command, in menu Help). This text makes use of the cell, so save it to disk and use the Pad Frame Generator... command (in menu Tools / Generation).

`; specify library with pads
celllibrary pads4u.txt
; create cell "padframe"
cell padframe
; place this cell as the "core"
core tool-PadFrame
; set the alignment of the pads
; (with input and output export)
align PAD_in{lay} dvddL dvddR
align PAD_out{lay} dvddL dvddR
align PAD_vdd{lay} dvddL dvddR
align PAD_gnd{lay} dvddL dvddR
align PAD_corner{lay} dvddL dvddR
align PAD_spacer{lay} dvddL dvddR`

`; place the top edge of pads
place PAD_corner{lay}
place PAD_gnd{lay} gnd_in=gnd
place PAD_vdd{lay} m1m2=vdd
; place the right edge of pads
rotate c
place PAD_corner{lay}
place PAD_in{lay} out=pulse
place PAD_spacer{lay}
; place the bottom edge of pads
rotate c
place PAD_corner{lay}
place PAD_out{lay} in=out1
place PAD_out{lay} in=out2
; place the left edge of pads
rotate c
place PAD_corner{lay}
place PAD_in{lay} out=in1
place PAD_in{lay} out=in2`

| This file places 8 pads in a ring (2 on each side) and also places corner "pads" for making bends. The input pads connect to the 2 input ports "a1" and "a2". The output pads connect to the 3 output ports "out1", "out2", and "out3" The power and ground pads connect to the "vdd" and "gnd" ports.

Connections between pads and ports of the core cell use Unrouted arcs (from the Generic technology, see Section 7-6-3). After these connections are routed with real geometry, the finished layout is shown here, fully instantiated. |