# Hurricane Documentation

# Hurricane VLSI Database

List of all members | Public Types | Public Member Functions
Hurricane::Layer Class Referenceabstract

Layer description (API) More...

Inheritance diagram for Hurricane::Layer:
[legend]

## Public Types

typedef Hurricane::Mask< unsigned long long > | Mask

## Public Member Functions

Technology * | getTechnology () const
const Name & | getName () const
const Mask & | getMask () const
const Mask & | getExtractMask () const
const DbU::Unit & | getMinimalSize () const
const DbU::Unit & | getMinimalSpacing () const
virtual BasicLayers | getBasicLayers () const =0
virtual const Layer * | getTop () const
virtual const Layer * | getBottom () const
virtual const Layer * | getOpposite (const Layer *) const
Layer * | getMetalAbove (bool useSymbolic=true) const
Layer * | getMetalBelow (bool useSymbolic=true) const
Layer * | getCutAbove (bool useSymbolic=true) const
Layer * | getCutBelow (bool useSymbolic=true) const
bool | above (const Layer *layer) const
bool | below (const Layer *layer) const
bool | contains (const Layer *layer) const
bool | intersect (const Layer *layer) const
void | setName (const Name &name)
void | setMinimalSize (const DbU::Unit &minimalSize)
void | setMinimalSpacing (const DbU::Unit &minimalSpacing)
virtual void | setEnclosure (const BasicLayer *layer, DbU::Unit, uint32_t flags)
virtual void | setExtentionCap (const BasicLayer *layer, DbU::Unit)
virtual void | setExtentionWidth (const BasicLayer *layer, DbU::Unit)
Public Member Functions inherited from Hurricane::DBo
virtual void | destroy ()
Property * | getProperty (const Name &) const
Properties | getProperties () const
bool | hasProperty () const
void | put (Property *)
void | remove (Property *)
void | removeProperty (const Name &)
void | clearProperties ()

## Detailed Description

Layer description (API)

# Introduction

Layers are divideds in three categories:

- Layer : the base class, it supplies a generic interface sufficent for most manipulations. However, there are cases when a specific derived class may be needed. Mostly when assembling the symbolic layers.
- BasicLayer : they represents the real process layers (GDS ones). They possesses the following characteristics:
  - Each BasicLayer is associated with an unique bit in the Layer::Mask. This bit is used to find if a symbolic layer contains that particular BasicLayer.
  - No dimension extentions. Database objects drawn with those layers have rectangles the exact size specified by the user. This is mandatory if you want to create a real layout (by opposition to a symbolic one).
  - They have a material field hinting the purpose of the layer (is a routing metal, a cut, a diffusion and so on).
  - They may have an associated blockage layer (for routing layers).
- Symbolic Layers : used to draw the various components of a symbolic layout. They are made of a list of BasicLayers and how to extend their dimensions from the user specified sizes.
  - RegularLayer : contains one BasicLayer, use for wires.
  - ViaLayer : contains three BasicLayer, for contact between metal layers. The BasicLayers must be of ``(metal,cut,metal) materials.
  - ContactLayer : contains four or five BasicLayers, for contact towards active layers or transistor gates. The fifth optional parameter is the well. Materials of the components must be of type ``(metal,cut,active,diffusion[,well])
  - DiffusionLayer : contains three BasicLayer, for diffusion area. Materials of the components must be of type ``(active,diffusion,well).
  - TransistorLayer : contains three to four layers, for representing digital transistors. Materials are of type : ``(gate,active,diffusion,well).

Like for the Technology object, a layer must not be deleted, else all components located on it will have a dangling pointer to an deleted object ...

## BasicLayer Creation Ordering

The creation order is significant regarding the metal connectivity. The metal & cut layers must be created in alternately fashion, for example:

BasicLayer | Material | Layer::Mask
--- | --- | ---
`cut0` | `cut` | `0x00000010`
`metal1` | `metal` | `0x00000020`
`cut1` | `cut` | `0x00000040`
`metal2` | `metal` | `0x00000080`
`cut2` | `cut` | `0x00000100`
`metal3` | `metal` | `0x00000200`

## Looking Up a Layer from a Mask

A BasicLayer is uniquely associated to a bit in the Layer::Mask. But, multiple symbolic layers could be built over that BasicLayer. In that case all those layers will have the same mask. For the mask lookup functions not to be confused, we introduce the concept of working layer in all the symbolic layers with the same mask, this is the one that will be returned.

## Member Typedef Documentation

## ◆ Mask

Hurricane::Layer::Mask

This type represents a mask bit field characterising efficiently the constituents of any kind of layer. It associates to each basic layer a bit and to each symbolic layer the union of the bits corresponding to its basic layers.

## Member Function Documentation

## ◆ getTechnology()

Technology * Hurricane::Layer::getTechnology | ( |  | ) | const

inline

Returns: the technolgy owning the layer.

## ◆ getName()

const Name & Hurricane::Layer::getName | ( |  | ) | const

inline

Returns: the name of the layer.

## ◆ getMask()

const Layer::Mask & Hurricane::Layer::getMask | ( |  | ) | const

inline

Returns: the mask associated to the layer.

Referenced by above(), below(), and Hurricane::Technology::isMetal().

## ◆ getExtractMask()

const Layer::Mask & Hurricane::Layer::getExtractMask | ( |  | ) | const

inline

Returns: the mask used for extraction.

Two differents basic layers have different masks but may have same extraction masks (ie CP layer which represent poly and CPG which represent poly used to realize transistor gates).

## ◆ getMinimalSize()

const DbU::Unit & Hurricane::Layer::getMinimalSize | ( |  | ) | const

inline

Returns: the minimal size allowed for a rectangular layout pad on this layer.

## ◆ getMinimalSpacing()

const DbU::Unit & Hurricane::Layer::getMinimalSpacing | ( |  | ) | const

inline

Returns: the minimal spacing between two pads on this layer.

## ◆ getBasicLayers()

BasicLayers Hurricane::Layer::getBasicLayers | ( |  | ) | const

pure virtual

Returns: the collection of basic layers within this layer.

Remarks
  For a basic layer the collection contains this one only.

## ◆ getTop()

const Layer * Hurricane::Layer::getTop | ( |  | ) | const

virtual

Returns: The uppermost layer of that layer. On BasicLayer, it is always the layer itself. In symbolic layers the meaning depends on the object structure.

Remarks
  In symbolic layers, top & bottom are not related to the Layer::Mask but to the structuration of the layer. It is advisable that the designer create layers and symbolic layers in way that ensure the top layer is indeed the one with the greater mask.

## ◆ getBottom()

const Layer * Hurricane::Layer::getBottom | ( |  | ) | const

virtual

Returns: The lowermost layer of that layer. On BasicLayer, it is always the layer itself. In symbolic layers the meaning depends on the object structure.

## ◆ getOpposite()

const Layer * Hurricane::Layer::getOpposite | ( | const Layer * | source | ) | const

virtual

Returns: This method is only meaningful for ViaLayer. It returns the metal Layer opposite to the one given in arguments.

## ◆ getMetalAbove()

Layer * Hurricane::Layer::getMetalAbove | ( | bool | useSymbolic = `true` | ) | const

Returns: The metal working layer whose mask is immediatly above this one.

## ◆ getMetalBelow()

Layer * Hurricane::Layer::getMetalBelow | ( | bool | useSymbolic = `true` | ) | const

Returns: The metal working layer whose mask is immediatly below this one.

## ◆ getCutAbove()

Layer * Hurricane::Layer::getCutAbove | ( | bool | useSymbolic = `true` | ) | const

Returns: The cut working layer whose mask is immediatly above this one.

## ◆ getCutBelow()

Layer * Hurricane::Layer::getCutBelow | ( | bool | useSymbolic = `true` | ) | const

Returns: The cut working layer whose mask is immediatly below this one.

## ◆ above()

bool Hurricane::Layer::above | ( | const Layer * | layer | ) | const

inline

Returns: true, if `layer` is above this one.

References getMask().

## ◆ below()

bool Hurricane::Layer::below | ( | const Layer * | layer | ) | const

inline

Returns: true, if `layer` is below this one.

References getMask().

## ◆ contains()

bool Hurricane::Layer::contains | ( | const Layer * | layer | ) | const

Returns: true if the `<layer>` is completely included in the layer `<this>` (that is if the basic layers of `<layer>` are a sub-set of the basic layers of `<this>`), else false.

## ◆ intersect()

bool Hurricane::Layer::intersect | ( | const Layer * | layer | ) | const

Returns: true if the `<layer>` and the layer `<this>` have at least a common basic layer, else false.

## ◆ setName()

void Hurricane::Layer::setName | ( | const Name & | name | ) |

sets or changes the layer name.

Remarks
  An exception is thrown if the name is empty or if there is an other layer with that name.

## ◆ setMinimalSize()

void Hurricane::Layer::setMinimalSize | ( | const DbU::Unit & | minimalSize | ) |

Sets the minimal size of a pad on this layer.

## ◆ setMinimalSpacing()

void Hurricane::Layer::setMinimalSpacing | ( | const DbU::Unit & | minimalSpacing | ) |

Sets the minimal spacing between two pads on this layer.

## ◆ setEnclosure()

void Hurricane::Layer::setEnclosure | ( | const BasicLayer * | layer,
|  | DbU::Unit | ,
|  | uint32_t | flags
| ) |  |

virtual

Sets the enclosure for the given BasicLayer.

## ◆ setExtentionCap()

void Hurricane::Layer::setExtentionCap | ( | const BasicLayer * | layer,
|  | DbU::Unit | ecap
| ) |  |

virtual

Sets the extention cap for the given BasicLayer.

## ◆ setExtentionWidth()

void Hurricane::Layer::setExtentionWidth | ( | const BasicLayer * | layer,
|  | DbU::Unit | ewidth
| ) |  |

virtual

Sets the extention width for the given BasicLayer.

The documentation for this class was generated from the following files:

- Layer.h
- Layer.dox