Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
tools:layout:start [2025/09/21 11:52] – [Cell generation] rajittools:layout:start [2025/09/21 11:52] (current) rajit
Line 15: Line 15:
  
 ''.rect'' files can be converted to/from magic layer types as well as to/from gds layer types. The details of the ''..rect'' [[.rect|file format]] converts the syntax as well as conversion methods. ''.rect'' files can be converted to/from magic layer types as well as to/from gds layer types. The details of the ''..rect'' [[.rect|file format]] converts the syntax as well as conversion methods.
-===== The rect file format ===== 
  
-Preliminary layout files for cells required for place and route are generated in the ''.rect'' file format. As the name suggests, this file contains a list of rectangles.  The purpose of this format is to be layout editor neutral; it is very easy to translate this file into commands to draw the cell in a layout editor.  
- 
-An example ''.rect'' file is shown below: 
- 
-<code> 
-bbox 0 0 24 72 
-rect in[0] polysilicon 15 2 16 5 
-rect in[0] polysilicon 13 6 15 8 
-rect out ndiffusion 19 24 20 27 
-rect # polysilicon 13 65 15 67 
-rect in[0] polysilicon 13 28 15 35 
-outrect out m1 19 24 21 27 
-outrect out m1 18 28 21 30 
-inrect in[0] m2 11 1 16 2 
-inrect in[0] m2 15 2 16 5 
-... 
-</code> 
- 
-The file begins with the bounding box (''bbox'') directive. The four numbers are integer coordinates (in units of the layout scale factor), and the four-tuple corresponds to the lower left x-coordinate, lower left y-coordinate, upper right x-coordinate, and upper right y-coordinate. The rest of the file contains rectangle definitions.  
- 
-An ''inrect'' is a rectangle corresponding to an input pin, and an ''outrect'' corresponds to an output pin, while a ''rect'' is just paint to be drawn. Note that ''inrect'' and ''outrect'' are optional; they could also be simply specified as ''rect'' directives, but are useful as hints in terms of specifying which pins correspond to inputs v/s outputs. 
- 
-A rectangle specifier (''rect'', ''inrect'', or ''outrect'') has an optional signal name (''#'' means that there is no label directly attached to the rectangle), followed by the drawing layer name (from ''layout.conf''), and followed by the coordinates for the rectangle. Even if a rectangle does not have a label, it may be electrically connected to another rectangle that has a label. If two rectangles are connected to each other electrically and have different labels, this is reported as an error. 
- 
-A rectangle can be followed by an optional string that is ''left'', ''center'', or ''right''. This is simply a hint that says this diffusion region has a transistor to the left only, to the right only, or on both sides. (A cell is drawn with vertical polysilicon.) 
- 
-==== Coordinate system ==== 
- 
-The internal coordinate system used by rectangles in this file are designed to work directly with ''magic'''s ''box'' command. In the ''magic'' layout editor, a box specified by 
-<code> 
-:box 0 0 10 20 
-</code> 
-is of size 10 by 20 units. If we view a box as a collection of 1 by 1 pixels, then this box occupies pixels starting from (0,0) to (9,19). All ''rect''s must be non-overlapping on their respective layers. Note that transistors, diffusion, and poly are all viewed as the same layer. 
- 
-The rect command is specifed by 2 coordinate pairs, following the above example: 
-<code> 
-rect <label> <layer> <x0> <y0> <x1> <y1> 
- 
-rect # m1 0 0 10 20 
-</code> 
- 
-This would occupy the pixels at coordinates (0,0) to (9,19). 
-==== Bounding box ==== 
- 
-This bounding box corresponds to the place and route boundary for the cell. Note that this is for convenience only; this box is automatically re-computed by the ACT layout library based on the geometry of the cell. The ''.rect'' file reader used by the ACT layout flow ignores this line. 
- 
-A user-specified place and route boundary and bounding box can be specified using the ''sbox'' directive. This has the same syntax as ''bbox'', except it is used to override the bounding box computation within the ACT library. 
- 
-==== Abutment and alignment ==== 
- 
-The layout library has support for manipulating layout. To aid in this, a ''.rect'' file can include information about how one cell can be abutted with another during procedural layout generation. A special layer name called ''$align'' is reserved for this purpose.  
- 
-A aliment box is required to mark the boundary the next cell is abutted to: 
- 
-<code> 
-rect # $align 2 2 8 8 
-</code> 
-This means that the box used for abutting this cell with another has the specified coordinates. 
- 
-The layout engine checks if it can abut 2 cells by looking up if they have a matching label, so next to the abutmentbox you need to specify abutment markers: 
-these markers are just a single coordinate thus the first coordinate pair is just repeated. 
- 
-<code> 
-rect $l:name1 $align 2 2 2 2 
-</code> 
-This means that a left edge alignment marker called ''name1'' is located at the specified coordintes. 
- 
-<code> 
-rect $r:name2 $align 2 8 2 8 
-</code> 
-This means that a right edge alignment marker called ''name2'' is located at the specified coordinates. 
- 
-Similarly, ''$t:'' and ''$b:'' prefixes are used for top and bottom alignment markers. 
- 
-For ''$l:''/''$r:'' labels, the x-coordinate is taken from the lower left/upper right x-coordinate of the abutment bounding box. Similarly, for ''$b:''/''$t:'' labels, the y-coordinate is taken from the lower left/upper right y-coordinate of the abutment bounding box.