mirror of https://github.com/VLSIDA/OpenRAM.git
78 lines
3.5 KiB
Python
78 lines
3.5 KiB
Python
#!/usr/bin/env python
|
|
import gdsMill
|
|
|
|
gds_file = "sram_lib2.gds" #"gds_sram_tgate2.gds"
|
|
#creater a streamer object to interact with the cadence libraries
|
|
#streamer = gdsMill.GdsStreamer()
|
|
|
|
#use the streamer to take a cadence layout, and convert it to GDS 2 for us to work with
|
|
#the GDS will be named testLayoutA.gds
|
|
#streamer.streamFromCadence(cadenceLibraryContainerPath = "~/design/600nmAmi",
|
|
# libraryName = "gdsMillTest",
|
|
# cellName = "testLayoutA",
|
|
# outputPath = "./gdsFiles")
|
|
|
|
#create a layout object - this object represents all of the elements within the layout
|
|
myLayout = gdsMill.VlsiLayout()
|
|
|
|
#give our layout object to a gds reader object. The gds reader will look at the binary gds 2 file and
|
|
#populate the layout object with the file's contents
|
|
reader = gdsMill.Gds2reader(myLayout)
|
|
|
|
#tell the reader object to process the gds file that we streamed in above
|
|
#un-comment the next line to see some details about the gds contents
|
|
#reader.debugToTerminal=1
|
|
reader.loadFromFile(gds_file)
|
|
|
|
#our layout object now contains all of the elements of the layout
|
|
#let add a box to the layout
|
|
#myLayout.addBox(layerNumber = myLayout.layerNumbersInUse[0], #pick some layer
|
|
# offsetInMicrons = (-10,0), #location
|
|
# width = 1.0, #units are microns
|
|
# height = 2.0,
|
|
# updateInternalMap = True, #This is important for visualization - see note 1 below
|
|
# center = True) #origin is in the center or the bottom left corner
|
|
#Note 1:the layout object keeps track of its elements in a 2D map (no hiearachy)
|
|
#this makes visualization more efficient. Therefore, to do a PDF output or some other
|
|
#flat output, you need to "update the internal map" of the layout object. Only do this
|
|
# ONE TIME after all the objects you are manipulating are fixed
|
|
|
|
#let's take out new layout and stream it back into a cadence library
|
|
#first, create a new GDS
|
|
#we change the root structure name (this will be the cellview name upon stream in)
|
|
myLayout.rename("testLayoutB")
|
|
writer = gdsMill.Gds2writer(myLayout)
|
|
writer.writeToFile("testLayoutB.gds")
|
|
|
|
streamer.streamToCadence(cadenceLibraryContainerPath = "~/design/600nmAmi",
|
|
libraryName = "gdsMillTest",
|
|
inputPath = "./gdsFiles/testLayoutB.gds")
|
|
|
|
#let's create a PDF view of the layout object
|
|
#first, create the object to represent the visual output
|
|
visualizer = gdsMill.PdfLayout(myLayout)
|
|
|
|
#since we have no knowledge of what the layer numbers mean for this particular technology
|
|
#we need to assign some colors to them
|
|
|
|
#uncomment the following line if you want to actually see the layout numbers in use
|
|
#print myLayout.layerNumbersInUse
|
|
|
|
#for each layer number used in the layout, we will asign it a layer color as a RGB Hex
|
|
visualizer.layerColors[myLayout.layerNumbersInUse[0]]="#219E1C"
|
|
visualizer.layerColors[myLayout.layerNumbersInUse[1]]="#271C9E"
|
|
visualizer.layerColors[myLayout.layerNumbersInUse[2]]="#CC54C8"
|
|
visualizer.layerColors[myLayout.layerNumbersInUse[3]]="#E9C514"
|
|
visualizer.layerColors[myLayout.layerNumbersInUse[4]]="#856F00"
|
|
#visualizer.layerColors[myLayout.layerNumbersInUse[5]]="#BD1444"
|
|
#visualizer.layerColors[myLayout.layerNumbersInUse[6]]="#FD1444"
|
|
#visualizer.layerColors[myLayout.layerNumbersInUse[7]]="#FD1414"
|
|
|
|
#set the scale so that our PDF isn't enormous
|
|
visualizer.setScale(500)
|
|
#tell the pdf layout object to draw everything in our layout
|
|
visualizer.drawLayout()
|
|
#and finally, dump it out to a file
|
|
visualizer.writeToFile("./gdsFiles/gdsOut.pdf")
|
|
|