We mentioned that GDSII is a hierarchical database. This is an essential feature - otherwise it would be impractical to use it to describe IC layouts that have millions or even billions of boundaries and paths. The hierarchy is valuable because IC designs tend to re-use the same geometric patterns over and over again.
The STRUCTURE record holds boundaries, paths, SREFs and AREFs. One can use an SREF (contained in a different structure) to reference or "place" a structure. In that fashion the complete list of boundaries, paths and references need not be explicitly enumerated over and over again.
The SREF record looks like this:
SREF [ELFLAGS] SNAME [<strans>] XYwhere:
SREF - string identifying this as a SREF ELFLAGS - rarely used binary flags (see plex) SNAME - the name of the structure being referenced strans - two byte bit array controlling reflection, magnification and rotation. XY - placement coordinates of the instance
Suppose we have created a GDSII file with two separate structures: TOP and CELL_A. Initially we have no SREFs in the file so the two structures have no relationship. This is shown diagrammatically below:
Now let's add a SREF record to TOP that points to CELL_A. We will only have a simple XY insertion at 2,3 with no transformations.
This time let's place CELL_A at 2,3 but let's also rotate it 90 degrees counter clockwise (CCW).
This time let's place CELL_A at 2,3 and let's turn on the reflection (about X) flag.
This time let's place CELL_A at 2,3 let's turn on the mirror flag and let's rotate 90 CCW.
This time let's place CELL_A at 2,3 let's turn on the mirror flag and let's rotate 180 CCW.
Notice that the combination of reflection about X combined with a 180 degree rotation is equivalent to a reflection around Y. This is useful since there is no Y reflection flag. Reflection is performed prior to rotation.