Draws a capacitor of type Poly-Poly or Metal-Metal in 350 nm AMS CMOS technology. More...

Public Member Functions | |
| __init__ (self, device, capacitorType, abutmentBoxPosition, capacitance=0, capDim={}) | |
| This is the class constructor. | |
| __setCapacitorPerUnit__ (self, capacitorType) | |
Sets the area and perimeter capacitances as specified in 350 nm AMS technology and according to capacitorType (MIM or PIP). | |
| __computeCapDim__ (self, capacitance, capacitorType) | |
| Computes width and length of the capacitor. | |
| __isCapacitorUnitOK__ (self, capDim) | |
| Checks if the computed capacitor dimensions exceed or are less than maximum and minimum limits, respectively, as specified in technology rules. | |
| setRules (self) | |
| Selects technological rules according to the capacitor type. | |
| getCapacitorType (self) | |
| getMaximumCapWidth (self) | |
| getMinimumCapWidth (self) | |
| getLayers (self) | |
| Loads the technology file then extracts the adequate layers according to the capacitor type (MIM or PIP). | |
| create (self, t, b, bbMode=False, vEnclosure_botPlate_abtBox=None, hEnclosure_botPlate_abtBox=None) | |
| When bonding box mode is activated, the function draws all layout physical layers of the capacitor after checking its dimensions. | |
| drawCapacitor (self, layerDict, t, b) | |
| Draws all layout physicial layers of the capacitor. | |
| computeBottomPlateCuts (self) | |
| Computes needed parameters to draw bottom plate cuts in its exact position, including : | |
| computeTopPlateCuts (self) | |
| Computes needed parameters to draw top plate cuts in its exact position, including : | |
| drawAbutmentBox (self) | |
Draws the abutment box of the capacitor in position <(abutmentBoxXMin, abutmentBoxYMin)>. | |
| drawOnePlate (self, layer, net, boxDimensions) | |
| Draws the top or bottom plate through inflation of the Box under it. | |
| drawBottomPlateCut (self, layer, b) | |
| Draws the required cuts to connect the bottom plate. | |
| drawTopPlateCut (self, layer, t) | |
| Draws the top plate's cuts after computing the maximal number of cuts that can be placed and its exact enclosure in the top plate. | |
| drawRoutingLayers (self, bottomPlateLayer, topPlateLayer, t, b) | |
| Draws the routing layers of both bottom and top plates after computing widths and the exact position of these layers. | |
| cutMaxNumber (self, width_layer, width_cut, spacing_cut, enclosure_cut) | |
Computes the maximal number of cuts to be placed on a layer of width width_layer considering specifications such as the spacing between the cuts, its width and its enclosure in the layer. | |
| cutLine (self, net, layer, firstCutXCenter, firstCutYCenter, width_cut, height_cut, spacing_cut, cutNumber, direction) | |
| Creates a horizontal or vertical line of contacts according to the specified direction. | |
| cutMatrix (self, net, layer, firstCutXCenter, firstCutYCenter, width_cut, height_cut, spacing_cut, cutColumnNumber, cutRowNumber) | |
| Creates a matrix of cuts by vertically stacking horizontal lines of identical cuts. | |
| getBottomPlateYMax (self) | |
| getBottomPlateLeftCutXMin (self) | |
| getBottomPlateLeftCutYMin (self) | |
| getBottomPlateLeftCutYMax (self) | |
| getBottomPlateRightCutXMin (self) | |
| getBottomPlateRightCutYMin (self) | |
| getBottomPlateRightCutYMax (self) | |
| getBotPlateLeftRLayerXMax (self) | |
| getBottomPlateRightCutYCenter (self) | |
| getBotPlateLeftRLayerXMin (self) | |
| getBotPlateRLayerYMin (self) | |
| getBotPlateRLayerYMax (self) | |
| getBotPlateRLayerWidth (self) | |
| getBotPlateRightRLayerXCenter (self) | |
| getBotPlateLeftRLayerXCenter (self) | |
| getTopPlateRLayerYMin (self) | |
| getTopPlateRLayerYMax (self) | |
| getTopPlateRLayerWidth (self) | |
| getTopPlateRLayerXCenter (self) | |
| getTopPlateRLayerXMin (self) | |
| getTopPlateRLayerXMax (self) | |
Draws a capacitor of type Poly-Poly or Metal-Metal in 350 nm AMS CMOS technology.
PIP and MIM capacitors are the result of surface superposition between poly1 and poly2 or metal2 and metalcap layers, respectively. Given the capacitor value, layout dimensions are computed, then, capacitor layers are drawn. Capacitor value, 


![\[ C = C_{a}A + C_{p}P \]](form_5.png)
The drawn layout shape is square. Thus, metcap or poly2 length and width are equal and are computed using the capacitor expression. Furthermore, given 

| __init__ | ( | self, | |
| device, | |||
| capacitorType, | |||
| abutmentBoxPosition, | |||
| capacitance = 0, | |||
| capDim = {} ) |
This is the class constructor.
Few of the class attributes final values are computed in this level. Most of attributes are only initialized to zero or empty values. Then, it is computed in dedicated class method. Input parameters are :
| device | Hurricane AMS device into which layout is drawn. |
| capacitance | Capacitor value, expressed in ![]() |
| abutmentBoxPosition | A list containing abscissa and ordinate of the bottom left corner of the abutment box. |
Class attributes are described in the list below. Most of class attributes refer to layout dimensions. Dictionaries are used to group attributes related to the same layout varibale. Layout dimensions and variables are described in Figure 1.
| device | Hurricane AMS device into which layout is drawn. |
| capacitance | Capacitor value, expressed in ![]() |
| capacitorType | Can be 'MIMCap' or 'PIPCap' as capacitor type. |
| abutmentBoxDict | A dictionary containing abscissa and ordinate of the bottom left corner of the abutment box, (XMin) and (YMin), respectively. |
| abutmentBox | Abutment box drawn square. It is an object of type Box. |
| bottomPlateBox | Bottom plate drawn square. It is an object of type Box. |
| topPlateBox | Top plate drawn square. It is an object of type Box. |
| cut2MatrixDict | A dictionary containing center position of the left bottom, which is cut the first to be drawn in the matrix of cuts. Initially, the dictionary is empty. It is only updated when self.capacitorType is equal to 'MIMCap'. |
| cutLeftLineDict | A dictionary containing abcissa and ordinate of the bottom cut in the left line of cuts to be drawn on bottom plate's layer. |
| cutRightLineDict | A dictionary containing abcissa and ordinate of the bottom cut in the right line of cuts to be drawn on bottom plate's layer. |
| topCutLineDict | A dictionary containing abcissa and ordinate of the bottom cut in the right line of cuts to be drawn on top plate's layer. Initially, the dictionary is empty. It is only updated when self.capacitorType is equal to 'PIPCap'. |
| topPlateRLayerDict | A dictionary containing position information of the top plate's routing layer. The dictionary includes ordinates of the layer's top and bottom extremities, 'XMin' and 'YMin', respectively, the abcissa of it's center, 'XCenter' and its width, 'width'. |
| bottomPlateRLayerDict | A dictionary containing |
| enclosure_botPlate_topPlate | Top plate's layer encolusre in bottom plate's layer. |
| minheight_topPlatecut | Minimum height of cuts for top plate connection to other metal layer. |
| topCutLineNumber | Maximum possible number cuts to be drawn for top plate's connection. |
| bottomCutLineNumber | Maximum possible number cuts to be drawn for top plate's connection. |
NonUnitCapacitor class must be precisely defined. References __computeCapacitance__(), __computeCapDim__(), __initCapDim__(), abutmentBox, abutmentBoxDict, bottomCutLineNumber, bottomPlateBox, bottomPlateBoxDict, bottomPlateRLayerDict, capacitorType, capDim, cut2MatrixDict, cutLeftLineDict, cutRightLineDict, device, Stack.device, enclosure_botPlate_abtBox, enclosure_botPlate_topPlate, minheight_topPlatecut, topCutLineDict, topCutLineNumber, topPlateBox, topPlateBoxDict, and topPlateRLayerDict.
| __setCapacitorPerUnit__ | ( | self, | |
| capacitorType ) |
Sets the area and perimeter capacitances as specified in 350 nm AMS technology and according to capacitorType (MIM or PIP).
Referenced by __computeCapDim__().
| __computeCapDim__ | ( | self, | |
| capacitance, | |||
| capacitorType ) |
Computes width and length of the capacitor.
Given capacitance value as well as the permiter and area capacitances, a quadratic equation is solved where the unknown parameter is the width (also equivalent to the length).
References __setCapacitorPerUnit__().
Referenced by CapacitorStack.__init__(), __init__(), and CapacitorStack.setRules().
| __isCapacitorUnitOK__ | ( | self, | |
| capDim ) |
Checks if the computed capacitor dimensions exceed or are less than maximum and minimum limits, respectively, as specified in technology rules.
True if all rules are respected. References capacitorType, getMaximumCapWidth(), and getMinimumCapWidth().
Referenced by create(), and CapacitorStack.setRules().
| setRules | ( | self | ) |
Selects technological rules according to the capacitor type.
Reimplemented in CapacitorStack, RoutMatchedCapacitor, and VerticalRoutingTracks.
References capacitorType, hpitch, isVH, Stack.isVH, METAL2Pitch, METAL3Pitch, minEnclo_botPlate_botPlateCut, minEnclo_botPlateRMetal_botPlateCut, minEnclo_routingTrackMetal_cut, minEnclo_topPlate_topPlateCut, minEnclo_topPlateRMetal_topPlateCut, minheight_topPlatecut, minSpacing_botPlate, minSpacing_botPlateCut_topPlate, minSpacingOnBotPlate_cut, minSpacingOnTopPlate_cut, minWidth_botPlatecut, minWidth_botRMetal, minWidth_routingTrackcut, minWidth_topPlate, minWidth_topPlatecut, minWidth_topRMetal, and vpitch.
Referenced by CapacitorStack.create(), create(), VerticalRoutingTracks.create(), and RoutMatchedCapacitor.route().
| getCapacitorType | ( | self | ) |
'MIMCap' or 'PIPCap'. getCapacitorType() is especially useful when an instance of CapacitorUnit class is called in another classes instances to identify the capacitor's type. | getMaximumCapWidth | ( | self | ) |
getMaximumCapWidth() is called to check if capacitor dimensions are within acceptable technological limits. An exception is raised if the entered capacitor type is unknown. getMaximumCapWidth() References capacitorType.
Referenced by __isCapacitorUnitOK__().
| getMinimumCapWidth | ( | self | ) |
References capacitorType.
Referenced by __isCapacitorUnitOK__().
| getLayers | ( | self | ) |
Loads the technology file then extracts the adequate layers according to the capacitor type (MIM or PIP).
References capacitorType.
Referenced by create().
| create | ( | self, | |
| t, | |||
| b, | |||
| bbMode = False, | |||
| vEnclosure_botPlate_abtBox = None, | |||
| hEnclosure_botPlate_abtBox = None ) |
When bonding box mode is activated, the function draws all layout physical layers of the capacitor after checking its dimensions.
All functions are excecuted in a new Update Session. In the contrary, only an exact estimation of layout dimensions is given. An error is raised when dimensions reach technological limits for MIM and PIP capacitors or when bbMode parameters is other than True or False.
| ( | t , b ) nets of top and bottom plates, respectively |
| bbMode | activates bonding box dimensions computing when set to True |
Reimplemented in CapacitorStack, and VerticalRoutingTracks.
References __isCapacitorUnitOK__(), abutmentBoxDict, capDim, computeDimensions(), Stack.computeDimensions(), drawAbutmentBox(), drawCapacitor(), Technology.getLayers(), getLayers(), and setRules().
| drawCapacitor | ( | self, | |
| layerDict, | |||
| t, | |||
| b ) |
Draws all layout physicial layers of the capacitor.
| layerDict | a dictionary containing a description of the required physical layers according to capacitor type |
| ( | t , b ) nets of top and bottom plates, respectively |
References bottomPlateBox, bottomPlateBoxDict, drawBottomPlateCut(), drawOnePlate(), drawRoutingLayers(), drawTopPlateCut(), topPlateBox, and topPlateBoxDict.
Referenced by create().
| computeBottomPlateCuts | ( | self | ) |
Computes needed parameters to draw bottom plate cuts in its exact position, including :
Given parameters described above, it is possible to draw the entire lines of cuts on both sides of bottom plate using cutLine function.
References bottomCutLineNumber, bottomPlateBoxDict, cutLeftLineDict, cutMaxNumber(), cutRightLineDict, minEnclo_botPlate_botPlateCut, minheight_topPlatecut, minSpacing_botPlateCut_topPlate, minSpacingOnBotPlate_cut, minWidth_topPlatecut, and topPlateBoxDict.
Referenced by drawAbutmentBox().
| computeTopPlateCuts | ( | self | ) |
Computes needed parameters to draw top plate cuts in its exact position, including :
Given parameters described above, it is possible to draw the entire lines of cuts on both sides of bottom plate using cutLine function.
References abutmentBoxDict, bottomPlateBoxDict, bottomPlateRLayerDict, capacitorType, cut2MatrixDict, cutLeftLineDict, cutMaxNumber(), cutRightLineDict, enclosure_botPlate_topPlate, minEnclo_botPlate_botPlateCut, minEnclo_botPlateRMetal_botPlateCut, minEnclo_routingTrackMetal_cut, minEnclo_topPlate_topPlateCut, minEnclo_topPlateRMetal_topPlateCut, minheight_topPlatecut, minSpacing_botPlate, minSpacing_botPlateCut_topPlate, minSpacingOnTopPlate_cut, minWidth_botPlatecut, minWidth_botRMetal, minWidth_routingTrackcut, minWidth_topPlatecut, setBottomPlateAbtBoxEnclosure(), topCutLineDict, topCutLineNumber, topPlateBoxDict, and topPlateRLayerDict.
Referenced by drawAbutmentBox().
| drawAbutmentBox | ( | self | ) |
Draws the abutment box of the capacitor in position <(abutmentBoxXMin, abutmentBoxYMin)>.
First, the minimum enclosure of the top plate inside the bottom plate is computed. Second, using this parameters as well as the capacitor dimensions, the width and height of the abutment box are computed. The box is finally drawn.
Reimplemented in CapacitorStack.
References abutmentBox, abutmentBoxDict, bottomPlateBoxDict, computeAbutmentBoxDimensions(), computeBottomPlateCuts(), computeOnePlateBoxDimensions(), computeRoutingLayersDimensions(), computeTopPlateCuts(), enclosure_botPlate_topPlate, and topPlateBoxDict.
Referenced by CapacitorStack.create(), and create().
| drawOnePlate | ( | self, | |
| layer, | |||
| net, | |||
| boxDimensions ) |
Draws the top or bottom plate through inflation of the Box under it.
These boxes are the abutment box in the case of the bottom plate and the bottom plate's box in the case of the top plate. This function also creates a a net for the drawn plate and sets it as external.
Referenced by drawCapacitor().
| drawBottomPlateCut | ( | self, | |
| layer, | |||
| b ) |
Draws the required cuts to connect the bottom plate.
First, the maximal possible number of cuts that can be drawn is computed. Second, using the computed number, the enclosure of this cuts in the bottom plate's layer is adjusted while the minimal enclosure is respected. Third, the relative positions of the cuts on both sides of the plate are computed. Finally, two vertical lines of cuts are drawns.
References bottomCutLineNumber, cutLeftLineDict, cutLine(), cutRightLineDict, minheight_topPlatecut, minSpacingOnBotPlate_cut, and minWidth_botPlatecut.
Referenced by drawCapacitor().
| drawTopPlateCut | ( | self, | |
| layer, | |||
| t ) |
Draws the top plate's cuts after computing the maximal number of cuts that can be placed and its exact enclosure in the top plate.
References capacitorType, cut2MatrixDict, cutLine(), cutMatrix(), minheight_topPlatecut, minSpacingOnTopPlate_cut, minWidth_topPlatecut, topCutLineDict, and topCutLineNumber.
Referenced by drawCapacitor().
| drawRoutingLayers | ( | self, | |
| bottomPlateLayer, | |||
| topPlateLayer, | |||
| t, | |||
| b ) |
Draws the routing layers of both bottom and top plates after computing widths and the exact position of these layers.
Also computes positions if rlayers that are crucial for routing.
References bottomPlateRLayerDict, cutLeftLineDict, cutRightLineDict, and topPlateRLayerDict.
Referenced by drawCapacitor().
| cutMaxNumber | ( | self, | |
| width_layer, | |||
| width_cut, | |||
| spacing_cut, | |||
| enclosure_cut ) |
Computes the maximal number of cuts to be placed on a layer of width width_layer considering specifications such as the spacing between the cuts, its width and its enclosure in the layer.
Referenced by computeBottomPlateCuts(), and computeTopPlateCuts().
| cutLine | ( | self, | |
| net, | |||
| layer, | |||
| firstCutXCenter, | |||
| firstCutYCenter, | |||
| width_cut, | |||
| height_cut, | |||
| spacing_cut, | |||
| cutNumber, | |||
| direction ) |
Creates a horizontal or vertical line of contacts according to the specified direction.
Referenced by cutMatrix(), drawBottomPlateCut(), and drawTopPlateCut().
| cutMatrix | ( | self, | |
| net, | |||
| layer, | |||
| firstCutXCenter, | |||
| firstCutYCenter, | |||
| width_cut, | |||
| height_cut, | |||
| spacing_cut, | |||
| cutColumnNumber, | |||
| cutRowNumber ) |
Creates a matrix of cuts by vertically stacking horizontal lines of identical cuts.
| net | net to which the cuts belong |
| layer | cuts physical layer |
| firstCutXCenter | center's abcissa of the bottom left cut ( that is the first cut to be drawn in the matrix ) |
| firstCutYCenter | center's abcissa of the bottom left cut |
| (width_cut,height_cut,spacing_cut) | cuts dimenions |
| (cutColumnNumber,cutRowNumber) | matrix dimensions |
References cutLine().
Referenced by drawTopPlateCut().
| getBottomPlateYMax | ( | self | ) |
dySource of the bottom plate's box ) . References bottomPlateBoxDict.
| getBottomPlateLeftCutXMin | ( | self | ) |
Referenced by CapacitorStack.drawBottomPlatesRLayers(), and RoutMatchedCapacitor.drawCuts_vRoutingTrack_hRoutingTrack().
| getBottomPlateLeftCutYMin | ( | self | ) |
| getBottomPlateLeftCutYMax | ( | self | ) |
References bottomCutLineNumber, minSpacingOnBotPlate_cut, and minWidth_botPlatecut.
| getBottomPlateRightCutXMin | ( | self | ) |
Referenced by CapacitorStack.drawBottomPlatesRLayers(), and RoutMatchedCapacitor.drawCuts_vRoutingTrack_hRoutingTrack().
| getBottomPlateRightCutYMin | ( | self | ) |
Referenced by RoutMatchedCapacitor.computeHRLayerYCenter(), and getBottomPlateRightCutYCenter().
| getBottomPlateRightCutYMax | ( | self | ) |
References bottomCutLineNumber, minSpacingOnBotPlate_cut, and minWidth_botPlatecut.
Referenced by RoutMatchedCapacitor.computeHRLayerYCenter(), and getBottomPlateRightCutYCenter().
| getBotPlateLeftRLayerXMax | ( | self | ) |
Referenced by CapacitorStack.drawBottomPlatesRLayers().
| getBottomPlateRightCutYCenter | ( | self | ) |
References getBottomPlateRightCutYMax(), and getBottomPlateRightCutYMin().
| getBotPlateLeftRLayerXMin | ( | self | ) |
| getBotPlateRLayerYMin | ( | self | ) |
Referenced by RoutMatchedCapacitor.route().
| getBotPlateRLayerYMax | ( | self | ) |
Referenced by CapacitorStack.drawBottomPlatesRLayers().
| getBotPlateRLayerWidth | ( | self | ) |
Referenced by CapacitorStack.drawBottomPlatesRLayers(), RoutMatchedCapacitor.drawCuts_vRoutingTrack_hRoutingTrack(), and RoutMatchedCapacitor.route().
| getBotPlateRightRLayerXCenter | ( | self | ) |
Referenced by RoutMatchedCapacitor.route().
| getBotPlateLeftRLayerXCenter | ( | self | ) |
Referenced by RoutMatchedCapacitor.route().
| getTopPlateRLayerYMin | ( | self | ) |
Referenced by CapacitorStack.drawTopPlatesRLayers(), and RoutMatchedCapacitor.route().
| getTopPlateRLayerYMax | ( | self | ) |
Referenced by CapacitorStack.drawTopPlatesRLayers().
| getTopPlateRLayerWidth | ( | self | ) |
Referenced by RoutMatchedCapacitor.drawCuts_vRoutingTrack_hRoutingTrack(), CapacitorStack.drawTopPlatesRLayers(), and RoutMatchedCapacitor.route().
| getTopPlateRLayerXCenter | ( | self | ) |
Referenced by CapacitorStack.drawTopPlatesRLayers().
| getTopPlateRLayerXMin | ( | self | ) |
References topPlateRLayerDict.
Referenced by RoutMatchedCapacitor.__computeConnections__(), and RoutMatchedCapacitor.drawCuts_vRoutingTrack_hRoutingTrack().
| getTopPlateRLayerXMax | ( | self | ) |
References topPlateRLayerDict.
| Generated by doxygen 1.13.2 on Fri Sep 27 2024 | Return to top of page |
| Oroshi - Analog Devices Layouts | Copyright © 2018-2020 Sorbonne Universite, All rights reserved |