IF (cell ← FetchCell[design, name])=
NIL
THEN {
inputPad: CellType ← CrossRAMPads.CreateInputPad[design: design];
differentialInputPad: CellType ← CrossRAMPads.CreateDifferentialInputPad[design: design];
bidirectionalPad: CellType ← CrossRAMPads.CreateBidirectionalPad[design: design];
dataWire: Wire ← CreateWireSequenceType[design: design, count: dataBits];
addressWire: Wire ← CreateWireSequenceType[design: design, count: addressBits];
cell ← CreateRecordCell[design: design, name: name, attribute: [$GenLayout, $Get]];
[] ← CreatePublicWire[design: design, on: cell, names: LIST["Vdd", "Gnd", "PadVdd", "PadGnd", "nPrecharge", "Access", "Write", "Read"]];
[] ← CreatePublicWire[design: design, on: cell, name: "Address", type: addressWire];
[] ← CreatePublicWire[design: design, on: cell, name: "Data", type: dataWire];
[] ← CreatePublicWire[design: design, on: cell, names: LIST["nPrechargeB", "AccessB", "WriteB", "nWriteB", "ReadB", "nReadB"]];
[] ← CreatePublicWire[design: design, on: cell, name: "AddressB", type: addressWire];
[] ← CreatePublicWire[design: design, on: cell, name: "DataB", type: dataWire];
[] ← CreateCellInstance[design: design, in: cell, type: inputPad, bind: "Vdd: PadVdd, Gnd: PadGnd, Pad: nPrecharge, Output: nPrechargeB"];
[] ← CreateCellInstance[design: design, in: cell, type: inputPad, bind: "Vdd: PadVdd, Gnd: PadGnd, Pad: Access, Output: AccessB"];
[] ← CreateCellInstance[design: design, in: cell, type: differentialInputPad, bind: "Vdd: PadVdd, Gnd: PadGnd, Pad: Write, Output: WriteB, nOutput: nWriteB"];
[] ← CreateCellInstance[design: design, in: cell, type: differentialInputPad, bind: "Vdd: PadVdd, Gnd: PadGnd, Pad: Read, Output: ReadB, nOutput: nReadB"];
FOR addressPad: AddressIndex
IN AddressIndex
DO
[] ← CreateCellInstance[design: design, in: cell, type: inputPad, bind: IO.PutFR["Vdd: PadVdd, Gnd: PadGnd, Pad: Address[%g], Output: AddressB[%g]", IO.int[addressPad], IO.int[addressPad]]];
ENDLOOP;
FOR dataPad: DataIndex
IN DataIndex
DO
[] ← CreateCellInstance[design: design, in: cell, type: bidirectionalPad, bind: IO.PutFR["Vdd: PadVdd, Gnd: PadGnd, Read: ReadB, nRead: ReadB, Write: WriteB, nWrite: nWriteB, Pad: Data[%g], Data: DataB[%g]", IO.int[dataPad], IO.int[dataPad]]];
ENDLOOP;
};