SimpMask Programmer's Manual

Slicing-tree Based Tiling

A large class of VLSI layout can be created using the so-called tiling methodology. Here a layout is created by the composition of a set of carefully crafted components, called the leaf cells. The leaf cells are planed in such a way that when they are abutted appropriately, no additional wiring or routing is ever needed. Therefore, a floorplan of the layout is good enough to complete the entire layout.

SimpMask provides the SimpSlice class to help create such a floorplan based on the notion of slicing tree. At each level, a slicing tree partitions the geometric space it commands by performing a cut in a particular direction. In SimpMask, the four directions are identified as GEO_NORTH for up, GEO_SOUTH for down, GEO_WEST for right, and GEO_EAST for left.

Each SimpSlice object represents a slicing tree node, and the key service it provides is the expand method. A SimpSlice object claims a zero-sized rectangular geometric space from its parent at the current position when it is initially created. The geometric space can then be expanded according to a supplied rectangle and a transform. The rectangle is usually the binding box or the overlapping box of a cell instance. It returns a composite transform that can be used to instantiate the cell at the desired location. Alternatively, the rectangle can be the geometric space claimed by a child slicing tree node, therefore, the expansion can be carried out hierarchically. For a particular tree node, the expansion can be performed only at the direction specified when the node is created.

This hierarchical procedural expansion process has to be performed in a bottom-up fashion along the tree. Without explicitly building the tree, it is best implemented with a stack. SimpSlice goes one more step by eliminating the need of explicitly creating a stack: it directly uses the program calling stack! To make this work, one needs to embed each SimpSlice object either into a C++ scope (a block statement) or a separate method. When the scope is entered, or a method is called, the constructor of the SimpSlice object is called, which initializes the geometric space it commands into a zero-sized rectangle at the current available position of its parent. When the algorithm leaves the scope, or the method is returned, the destructor of the object will be called, which expands its parent with the geometric space it commands.

alphabetic index hierarchy of classes


generated by doc++