Size and grid
Layout origin and quadrants: where (0,0) sits and which way Y grows
Every cell has an origin and a Y direction. Disagree on zero or up, and every instance lands in the wrong place.

You place a small device onto a larger drawing, and both drawings need to agree on the point they will treat as zero.
The check stays quiet because the rectangles are legal. What is wrong is the neighborhood, when the origin is the center of the device and not a corner. That zero is the origin. Coordinates are measured from it: positive to the right, positive up, in the usual chip drawing, and negative when a shape sits on the other side of the mark. A quadrant is one of the four regions those signs make. Upper right is positive X and positive Y. The other three use a minus sign on X, on Y, or on both. The origin itself is the single point where both numbers are zero. It is a location in the cell, not a shape, until you draw a mark on top of it so you can see it.
After you export, check whether a shape with a negative X is still there. The picture at the top of this page puts a small square on the origin, and a device in each quadrant around it. Two of the devices sit in negative X. Two sit in negative Y. The corner device sits in negative X and negative Y at once. Nothing about the devices is mirrored into a new design. They are copies placed on the four sides of zero. The square is the agreement: this is where (0, 0) lives in this cell, and it is the center, not the corner of the device.
Placing devices around zero
The second picture drops the devices and keeps the crossing, so the signs are easier to see.

A teal strap runs left and right through the orange square. A navy strap runs up and down through the same square. Together they occupy all four quadrants. The part of the teal strap to the left of the orange square has negative X. The part of the navy strap below the square has negative Y. The square itself sits on the origin. If you moved the orange square and left the straps, you would be lying about zero. If you moved the straps and left the square, the devices would leave the quadrants you planned.
An instance is a placement of a cell: which cell, where its origin goes, and whether it is rotated or mirrored. The parent stores that short record. It does not store a second copy of every corner. When the parent says “put this cell at (0, 0),” the child’s origin lands on the parent’s origin. Everything in the child that was drawn at negative coordinates hangs into the parent’s negative space. Everything drawn at positive coordinates hangs the other way. If you believed the child’s origin was the lower-left corner of the device, and the origin is actually the square in the middle, the whole device shifts by half its width and half its height. The shift is silent. The shapes are still legal rectangles. A spacing check has nothing to say, because every edge is still a legal edge. The pads miss their neighbors anyway.
Rotation and mirror are reckoned from the same point. A 90-degree turn swings the device around the orange square, not around a corner you hoped was zero. A mirror in X flips the left side onto the right and sends positive X to negative X. Arrays do the same math at every step. A step of 20 micrometers applied to an origin that is already wrong is a row of devices that are all wrong by the same offset, which looks consistent and is still misplaced.
A placement that used the wrong zero
A script arrayed sixteen of these devices for a pad ring. The person who wrote the script assumed the cell origin was the lower-left corner. In the cell, the origin was the square at the center, the way the top picture draws it. Every placement was off by the distance from that square to the corner, a few micrometers in X and in Y when one micrometer is 1000 database units. The pads no longer met the bond fingers. A geometry check stayed quiet because every rectangle was still a legal size on a legal grid. The error was neighborhood, not width.
A second tool made it worse. Its exporter dropped every shape with a negative coordinate, on the theory that a chip lives in the positive quadrant. Every device except the upper-right one sits partly in negative coordinates, so those three disappeared. The upper-right device survived and sat in the wrong place relative to the package. The file that came back looked like a partial layout. It was a full layout whose origin the exporter did not believe in.
Put a visible mark on the origin, small and on a sheet you can hide later, the way the square in these pictures is a mark and not a transistor. Decide in writing whether that mark is the center of the device, the center of a pin, or a corner. When you instance the cell, place that mark. After the export, check whether a shape with a negative X is still in the file. The straps in the second picture are the test you can see before you export: the teal strap should stick out on both sides of the orange square, and the navy strap should stick out above and below. If a parent or an exporter clips the negative side, you will see a strap that stops on the square, and the shapes that lived in negative X will be gone. Fix the origin agreement before you array anything.
Continue exploring
-
Database units: how layout files store coordinates as integers
A GDSII or OASIS file stores every coordinate as a whole number of database units. How that scale becomes microns, and what breaks when tools disagree.
-
Cells and instances
Draw the pad once and stamp it many times. Each stamp is the same drawing in a new place, not a photocopy of the ink.
-
GDSII in plain language
A 1970s suitcase that still carries almost every chip drawing on Earth.
-
The drawing is not the thing you build
Glass, silicon, and fiberglass are different objects that can share one geometry.
-
Layout grids: display grid, database unit, and manufacturing grid
A corner can sit on the display grid and still miss the manufacturing grid. How the three grids differ, and why an off-grid corner is rounded by the mask writer and can fail a space check.