diff --git a/compiler/gdsMill/gdsMill/vlsiLayout.py b/compiler/gdsMill/gdsMill/vlsiLayout.py index a64c562a..43f17cca 100644 --- a/compiler/gdsMill/gdsMill/vlsiLayout.py +++ b/compiler/gdsMill/gdsMill/vlsiLayout.py @@ -2,8 +2,6 @@ from gdsPrimitives import * from datetime import * import mpmath import gdsPrimitives -import debug -debug_level=4 class VlsiLayout: """Class represent a hierarchical layout""" @@ -15,7 +13,7 @@ class VlsiLayout: modDate = datetime.now() self.structures=dict() self.layerNumbersInUse = [] - self.debug = debug + self.debug = False if name: self.rootStructureName=name #create the ROOT structure @@ -260,14 +258,12 @@ class VlsiLayout: Method to change the root pointer to another layout. """ - #if self.debug: print "DEBUG: GdsMill vlsiLayout: changeRoot: %s "%newRoot - debug.info(debug_level,"DEBUG: GdsMill vlsiLayout: changeRoot: %s "%newRoot) + if self.debug: print "DEBUG: GdsMill vlsiLayout: changeRoot: %s "%newRoot # Determine if newRoot exists # layoutToAdd (default) or nameOfLayout if (newRoot == 0 | ((newRoot not in self.structures) & ~create)): - #print "ERROR: vlsiLayout.changeRoot: Name of new root [%s] not found and create flag is false"%newRoot - debug.error(debug_level,"ERROR: vlsiLayout.changeRoot: Name of new root [%s] not found and create flag is false"+str(newRoot)) + print "ERROR: vlsiLayout.changeRoot: Name of new root [%s] not found and create flag is false"%newRoot exit(1) else: if ((newRoot not in self.structures) & create): @@ -281,15 +277,8 @@ class VlsiLayout: Method to insert one layout into another at a particular offset. """ offsetInLayoutUnits = (self.userUnits(offsetInMicrons[0]),self.userUnits(offsetInMicrons[1])) - #print "addInstance:offsetInLayoutUnits",offsetInLayoutUnits - #offsetInLayoutUnits = ((offsetInMicrons[0]),(offsetInMicrons[1])) - #print "DEBUG: addInstance offsetInLayoutUnits: %f, %f"%(self.userUnits(offsetInMicrons[0]), self.userUnits(offsetInMicrons[1])) - #if self.debug==1: - # print "DEBUG: GdsMill vlsiLayout: addInstance: type %s, nameOfLayout "%type(layoutToAdd),nameOfLayout - # print offsetInMicrons - # print offsetInLayoutUnits - debug.info(debug_level,"DEBUG: GdsMill vlsiLayout: addInstance: type "+str(layoutToAdd.rootStructureName)) - debug.info(debug_level,"offset In Microns:"+str(offsetInMicrons)+"offset In LayoutUnits:"+str(offsetInLayoutUnits)) + if self.debug==1: + print "DEBUG: GdsMill vlsiLayout: addInstance: type %s, nameOfLayout "%type(layoutToAdd),nameOfLayout @@ -302,10 +291,8 @@ class VlsiLayout: StructureName = nameOfLayout #layoutToAdd StructureFound = False for structure in layoutToAdd.structures: - # if self.debug: print structure, "N","N" if StructureName in structure: - debug.info(debug_level,"DEBUG: Structure %s Found"+str(StructureName)) - #if self.debug: print "DEBUG: Structure %s Found"%StructureName + if self.debug: print "DEBUG: Structure %s Found"%StructureName StructureFound = True @@ -538,8 +525,7 @@ class VlsiLayout: heightInBlocks = int(coverageHeight/effectiveBlock) passFailRecord = [] - debug.info(debug_level,"Filling layer:"+str(layerToFill)) - #print "Filling layer:",layerToFill + print "Filling layer:",layerToFill def isThisBlockOk(startingStructureName,coordinates,rotateAngle=None): #go through every boundary and check for boundary in self.structures[startingStructureName].boundaries: @@ -585,7 +571,7 @@ class VlsiLayout: #if its bad, this global tempPassFail will be false #if true, we can add the block passFailRecord+=[self.tempPassFail] - debug.info(debug_level,"Percent Complete:"+str(percentDone)) + print "Percent Complete:"+str(percentDone) passFailIndex=0 @@ -596,18 +582,18 @@ class VlsiLayout: if passFailRecord[passFailIndex]: self.addBox(layerToFill, (blockX,blockY), width=blockSize, height=blockSize) passFailIndex+=1 - debug.info(debug_level,"Done\n\n") + print "Done\n\n" def readLayoutBorder(self,borderlayer): for boundary in self.structures[self.rootStructureName].boundaries: if boundary.drawingLayer==borderlayer: - debug.info(debug_level,"Find border "+str(boundary.coordinates)) + if self.debug: print "Find border "+str(boundary.coordinates) left_bottom=boundary.coordinates[0] right_top=boundary.coordinates[2] cellSize=[right_top[0]-left_bottom[0],right_top[1]-left_bottom[1]] cellSizeMicron=[cellSize[0]*self.units[0],cellSize[1]*self.units[0]] if not(cellSizeMicron): - debug.error("Error: "+str(self.rootStructureName)+".cell_size information not found yet") + print "Error: "+str(self.rootStructureName)+".cell_size information not found yet" return cellSizeMicron def measureSize(self,startStructure): @@ -634,10 +620,10 @@ class VlsiLayout: StrutureOrgin=[Struture[1][0],Struture[1][1]] StrutureuVector=[Struture[2][0],Struture[2][1],Struture[2][2]] StruturevVector=[Struture[3][0],Struture[3][1],Struture[3][2]] - debug.info(debug_level,"Checking Structure: "+str(StrutureName)) - debug.info(debug_level,"-Structure Struture Orgin:"+str(StrutureOrgin)) - debug.info(debug_level,"-Structure direction: uVector["+str(StrutureuVector)+"]") - debug.info(debug_level,"-Structure direction: vVector["+str(StruturevVector)+"]") + #debug.info(debug_level,"Checking Structure: "+str(StrutureName)) + #debug.info(debug_level,"-Structure Struture Orgin:"+str(StrutureOrgin)) + #debug.info(debug_level,"-Structure direction: uVector["+str(StrutureuVector)+"]") + #debug.info(debug_level,"-Structure direction: vVector["+str(StruturevVector)+"]") for boundary in self.structures[str(StrutureName)].boundaries: left_bottom=boundary.coordinates[0] @@ -665,24 +651,28 @@ class VlsiLayout: return cellBoundary def readPin(self,label_name,mod="offset"): + """ + Search for a pin label and return all the largest enclosing rectangle. + """ label_layer = None label_coordinate = [None, None] for Text in self.structures[self.rootStructureName].texts: - debug.info(debug_level,"Check Text object "+str(Text.textString)+" in "+str(self.rootStructureName)) - debug.info(debug_level,"Length of text object: "+str(len(Text.textString))) if Text.textString == label_name or Text.textString == label_name+"\x00": label_layer = Text.drawingLayer label_coordinate = Text.coordinates - debug.info(debug_level,"Find label "+str(Text.textString)+" at "+str(Text.coordinates)) pin_boundary=self.readPinInStructureList(label_coordinate, label_layer) - debug.info(debug_level, "Find pin covers "+str(label_name)+" at "+str(pin_boundary)) + # Convert to user units pin_boundary=[pin_boundary[0]*self.units[0],pin_boundary[1]*self.units[0], pin_boundary[2]*self.units[0],pin_boundary[3]*self.units[0]] return [label_name, label_layer, pin_boundary] def readPinInStructureList(self,label_coordinates,layer): + """ + Given the label coordinate, search for enclosing structures on the given layer. + Return the single biggest area rectangle. + """ label_boundary = [None,None,None,None] for TreeUnit in self.xyTree: label_boundary=self.readPinInStruture(label_coordinates,layer,TreeUnit,label_boundary) @@ -690,14 +680,16 @@ class VlsiLayout: def readPinInStruture(self,label_coordinates,layer,Struture,label_boundary): + """ + """ StrutureName=Struture[0] StrutureOrgin=[Struture[1][0],Struture[1][1]] StrutureuVector=[Struture[2][0],Struture[2][1],Struture[2][2]] StruturevVector=[Struture[3][0],Struture[3][1],Struture[3][2]] - debug.info(debug_level,"Checking Structure: "+str(StrutureName)) - debug.info(debug_level,"-Structure Struture Orgin:"+str(StrutureOrgin)) - debug.info(debug_level,"-Structure direction: uVector["+str(StrutureuVector)+"]") - debug.info(debug_level,"-Structure direction: vVector["+str(StruturevVector)+"]") + #debug.info(debug_level,"Checking Structure: "+str(StrutureName)) + #debug.info(debug_level,"-Structure Struture Orgin:"+str(StrutureOrgin)) + #debug.info(debug_level,"-Structure direction: uVector["+str(StrutureuVector)+"]") + #debug.info(debug_level,"-Structure direction: vVector["+str(StruturevVector)+"]") for boundary in self.structures[str(StrutureName)].boundaries: if layer==boundary.drawingLayer: @@ -710,12 +702,16 @@ class VlsiLayout: result = self.labelInRectangle(label_coordinates[0],MetalBoundary) if (result): - debug.info(debug_level,"Rectangle(layer"+str(layer)+") at "+str(MetalBoundary)) - debug.info(debug_level,"covers label (offset"+str(label_coordinates)+")") + #debug.info(debug_level,"Rectangle(layer"+str(layer)+") at "+str(MetalBoundary)) + #debug.info(debug_level,"covers label (offset"+str(label_coordinates)+")") label_boundary=self.returnBiggerBoundary(MetalBoundary,label_boundary) return label_boundary def tranformRectangle(self,orignalRectangle,uVector,vVector): + """ + Transforms the four coordinates of a rectangle in space + and recomputes the left, bottom, right, up values. + """ LeftBottom=mpmath.matrix([orignalRectangle[0],orignalRectangle[1]]) LeftBottom=self.tranformCoordinate(LeftBottom,uVector,vVector) @@ -730,6 +726,9 @@ class VlsiLayout: return [Left,Bottom,Right,Up] def tranformCoordinate(self,Coordinate,uVector,vVector): + """ + Rotate a coordinate in space. + """ x=Coordinate[0]*uVector[0]+Coordinate[1]*uVector[1] y=Coordinate[1]*vVector[1]+Coordinate[0]*vVector[0] tranformCoordinate=[x,y] @@ -737,6 +736,9 @@ class VlsiLayout: def labelInRectangle(self,label_coordinate,Rectangle): + """ + Checks if a coordinate is within a given rectangle. + """ coordinate_In_Rectangle_x_range=(label_coordinate[0]>=int(Rectangle[0]))&(label_coordinate[0]<=int(Rectangle[2])) coordinate_In_Rectangle_y_range=(label_coordinate[1]>=int(Rectangle[1]))&(label_coordinate[1]<=int(Rectangle[3])) if coordinate_In_Rectangle_x_range & coordinate_In_Rectangle_y_range: @@ -745,14 +747,17 @@ class VlsiLayout: return False def returnBiggerBoundary(self,comparedRectangle,label_boundary): + """ + Compares two rectangles and returns the bigger in terms of area. + """ if label_boundary[0]== None: label_boundary=comparedRectangle - debug.info(debug_level,"The label_boundary is initialized to "+str(label_boundary)) + #debug.info(debug_level,"The label_boundary is initialized to "+str(label_boundary)) else: area_label_boundary=(label_boundary[2]-label_boundary[0])*(label_boundary[3]-label_boundary[1]) area_comparedRectangle=(comparedRectangle[2]-comparedRectangle[0])*(comparedRectangle[3]-comparedRectangle[1]) if area_label_boundary<=area_comparedRectangle: label_boundary = comparedRectangle - debug.info(debug_level,"The label_boundary is updated to "+str(label_boundary)) + #debug.info(debug_level,"The label_boundary is updated to "+str(label_boundary)) return label_boundary