mirror of https://github.com/VLSIDA/OpenRAM.git
54 lines
2.5 KiB
Python
54 lines
2.5 KiB
Python
|
|
#!/usr/bin/env python
|
||
|
|
import gdsMill
|
||
|
|
|
||
|
|
#we will add the filler at a higher level of hiearchy
|
||
|
|
#so first, load our top level layout from GDS
|
||
|
|
myTopLevelLayout = gdsMill.VlsiLayout()
|
||
|
|
reader = gdsMill.Gds2reader(myTopLevelLayout)
|
||
|
|
reader.loadFromFile("./gdsFiles/testLayoutA.gds")
|
||
|
|
|
||
|
|
#now create a new layout
|
||
|
|
#be sure to assign a name, since this will be the root object in our hierarchy to which
|
||
|
|
#all other objects are referenced
|
||
|
|
filledLayout = gdsMill.VlsiLayout(name="filledLayout")
|
||
|
|
|
||
|
|
#now place an instnace of our top level layout into the filled layout
|
||
|
|
#hierarchy looks like this:
|
||
|
|
# filled layout
|
||
|
|
# top level layout
|
||
|
|
# layout elements
|
||
|
|
# layout elements
|
||
|
|
# layout elements
|
||
|
|
# fill elements
|
||
|
|
# fill elements .....
|
||
|
|
filledLayout.addInstance(myTopLevelLayout,
|
||
|
|
offsetInMicrons = (0,0),
|
||
|
|
mirror = "",
|
||
|
|
rotate = 0.0)
|
||
|
|
|
||
|
|
#now actaully add the fill - gds mill will create an array of boxes
|
||
|
|
# maintaining spacing from existing layout elements
|
||
|
|
#we'll do it once for two different layers
|
||
|
|
filledLayout.fillAreaDensity(layerToFill = myTopLevelLayout.layerNumbersInUse[5],
|
||
|
|
offsetInMicrons = (-10.0,-10.0), #this is where to start from
|
||
|
|
coverageWidth = 40.0, #size of the fill area in microns
|
||
|
|
coverageHeight = 40.0,
|
||
|
|
minSpacing = 0.5, #distance between fill blocks
|
||
|
|
blockSize = 2.0 #width and height of each filler block in microns
|
||
|
|
)
|
||
|
|
filledLayout.fillAreaDensity(layerToFill = myTopLevelLayout.layerNumbersInUse[7],
|
||
|
|
offsetInMicrons = (-11.0,-11.0), #this is where to start from
|
||
|
|
coverageWidth = 40.0, #size of the fill area in microns
|
||
|
|
coverageHeight = 40.0,
|
||
|
|
minSpacing = 0.5, #distance between fill blocks
|
||
|
|
blockSize = 3.0 #width and height of each filler block in microns
|
||
|
|
)
|
||
|
|
#and now dump the filled layout to a new GDS file
|
||
|
|
writer = gdsMill.Gds2writer(filledLayout)
|
||
|
|
writer.writeToFile("./gdsFiles/filledLayout.gds")
|
||
|
|
#and strea
|
||
|
|
streamer = gdsMill.GdsStreamer()
|
||
|
|
streamer.streamToCadence(cadenceLibraryContainerPath = "~/design/600nmAmi",
|
||
|
|
libraryName = "gdsMillTest",
|
||
|
|
inputPath = "./gdsFiles/filledLayout.gds")
|