Rename tests. Make 4 pin test.

This commit is contained in:
Matt Guthaus 2016-11-17 16:33:38 -08:00
parent 5cef8606b4
commit b5b1f1753e
18 changed files with 327 additions and 21 deletions

View File

@ -192,7 +192,7 @@ class grid:
We will use an A* search, so this cost must be pessimistic. We will use an A* search, so this cost must be pessimistic.
Cost so far will be the length of the path. Cost so far will be the length of the path.
""" """
debug.info(0,"Initializing queue.") debug.info(1,"Initializing queue.")
for s in self.source: for s in self.source:
cost = self.cost_to_target(s) cost = self.cost_to_target(s)
debug.info(2,"Init: cost=" + str(cost) + " " + str([s])) debug.info(2,"Init: cost=" + str(cost) + " " + str([s]))

View File

@ -30,7 +30,6 @@ class router:
self.pin_layers = {} self.pin_layers = {}
self.boundary = self.layout.measureBoundary(self.top_name) self.boundary = self.layout.measureBoundary(self.top_name)
#print "Boundary: ",self.boundary
self.ll = vector(self.boundary[0]) self.ll = vector(self.boundary[0])
self.ur = vector(self.boundary[1]) self.ur = vector(self.boundary[1])
self.size = self.ur - self.ll self.size = self.ur - self.ll
@ -60,7 +59,7 @@ class router:
# This is so we can use a single resolution grid for both layers # This is so we can use a single resolution grid for both layers
self.track_width = max(self.horiz_track_width,self.vert_track_width) self.track_width = max(self.horiz_track_width,self.vert_track_width)
print "Track width:",self.track_width debug.info(1,"Track width:"+str(self.track_width))
@ -72,16 +71,16 @@ class router:
# We will offset so ll is at (-track_halo*track_width,-track_halo*track_width) # We will offset so ll is at (-track_halo*track_width,-track_halo*track_width)
track_width_offset = vector([track_halo*self.track_width]*2) track_width_offset = vector([track_halo*self.track_width]*2)
self.offset = self.ll - track_width_offset self.offset = self.ll - track_width_offset
print "Offset: ",self.offset debug.info(1,"Offset: "+str(self.offset))
width = self.size.x width = self.size.x
height = self.size.y height = self.size.y
print "Size: ", width,height debug.info(1,"Size: {0} x {1}".format(width,height))
# pad the tracks on each side by the halo as well # pad the tracks on each side by the halo as well
self.width_in_tracks = int(math.ceil(width/self.track_width)) + 2*track_halo self.width_in_tracks = int(math.ceil(width/self.track_width)) + 2*track_halo
self.height_in_tracks = int(math.ceil(height/self.track_width)) + 2*track_halo self.height_in_tracks = int(math.ceil(height/self.track_width)) + 2*track_halo
print "Size (in tracks): ", self.width_in_tracks, self.height_in_tracks debug.info(1,"Size (in tracks): {0} x {1}".format(self.width_in_tracks, self.height_in_tracks))
self.rg = grid.grid(self.width_in_tracks,self.height_in_tracks) self.rg = grid.grid(self.width_in_tracks,self.height_in_tracks)
@ -92,9 +91,7 @@ class router:
debug.info(3,"Find pin {0} layer {1} shape {2}".format(pin_name,str(pin_layer),str(pin_shape))) debug.info(3,"Find pin {0} layer {1} shape {2}".format(pin_name,str(pin_layer),str(pin_shape)))
# repack the shape as a pair of vectors rather than four values # repack the shape as a pair of vectors rather than four values
shape=[vector(pin_shape[0],pin_shape[1]),vector(pin_shape[2],pin_shape[3])] shape=[vector(pin_shape[0],pin_shape[1]),vector(pin_shape[2],pin_shape[3])]
print shape
new_shape = self.convert_shape_to_tracks(shape,round_bigger=False) new_shape = self.convert_shape_to_tracks(shape,round_bigger=False)
print new_shape
self.pin_names.append(pin_name) self.pin_names.append(pin_name)
self.pin_shapes[str(pin)] = new_shape self.pin_shapes[str(pin)] = new_shape
self.pin_layers[str(pin)] = pin_layer self.pin_layers[str(pin)] = pin_layer
@ -116,7 +113,7 @@ class router:
self.find_blockages() self.find_blockages()
# returns the path in tracks # returns the path in tracks
path = self.rg.route() path = self.rg.route()
debug.info(0,"Found path. ") debug.info(1,"Found path. ")
debug.info(2,str(path)) debug.info(2,str(path))
self.set_path(path) self.set_path(path)
# First, simplify the path. # First, simplify the path.

View File

@ -54,20 +54,10 @@ class no_blockages_test(unittest.TestCase):
self.add_wire(layer_stack,path) self.add_wire(layer_stack,path)
r = routing("test1", "A_to_B_no_blockages") r = routing("test1", "AB_no_blockages")
self.local_check(r)
r = routing("A_to_B_m1m2_blockages")
self.local_check(r)
r = routing("A_to_B_m1m2_same_layer_pins")
self.local_check(r)
r = routing("A_to_B_m1m2_diff_layer_pins")
self.local_check(r) self.local_check(r)
# fails if there are any DRC errors on any cells # fails if there are any DRC errors on any cells
self.assertEqual(drc_errors, 0)
globals.end_openram() globals.end_openram()
@ -76,7 +66,7 @@ class no_blockages_test(unittest.TestCase):
r.gds_write(tempgds) r.gds_write(tempgds)
self.assertFalse(calibre.run_drc(r.name, tempgds)) self.assertFalse(calibre.run_drc(r.name, tempgds))
os.remove(tempgds) os.remove(tempgds)
assert(0)

View File

@ -0,0 +1,79 @@
#!/usr/bin/env python2.7
"Run a regresion test the library cells for DRC"
import unittest
from testutils import header
import sys,os
sys.path.append(os.path.join(sys.path[0],"../.."))
sys.path.append(os.path.join(sys.path[0],".."))
import globals
import debug
import calibre
class no_blockages_test(unittest.TestCase):
def runTest(self):
globals.init_openram("config_{0}".format(OPTS.tech_name))
import design
import router
class gdscell(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name):
#design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
self.name = name
self.gds_file = name + ".gds"
self.sp_file = name + ".sp"
design.hierarchy_layout.layout.__init__(self, name)
design.hierarchy_spice.spice.__init__(self, name)
class routing(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name, gdsname):
design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
cell = gdscell(gdsname)
self.add_inst(name=gdsname,
mod=cell,
offset=[0,0])
self.connect_inst([])
r=router.router(gdsname+".gds")
layer_stack =("metal1","via1","metal2")
path=r.route(layer_stack,src="A",dest="B")
r.rg.view()
self.add_wire(layer_stack,path)
r = routing("test1", "AB_blockages")
self.local_check(r)
# fails if there are any DRC errors on any cells
globals.end_openram()
def local_check(self, r):
tempgds = OPTS.openram_temp + "temp.gds"
r.gds_write(tempgds)
self.assertFalse(calibre.run_drc(r.name, tempgds))
os.remove(tempgds)
# instantiate a copy of the class to actually run the test
if __name__ == "__main__":
(OPTS, args) = globals.parse_args()
del sys.argv[1:]
header(__file__, OPTS.tech_name)
unittest.main()

View File

@ -0,0 +1,80 @@
#!/usr/bin/env python2.7
"Run a regresion test the library cells for DRC"
import unittest
from testutils import header
import sys,os
sys.path.append(os.path.join(sys.path[0],"../.."))
sys.path.append(os.path.join(sys.path[0],".."))
import globals
import debug
import calibre
class no_blockages_test(unittest.TestCase):
def runTest(self):
globals.init_openram("config_{0}".format(OPTS.tech_name))
import design
import router
class gdscell(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name):
#design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
self.name = name
self.gds_file = name + ".gds"
self.sp_file = name + ".sp"
design.hierarchy_layout.layout.__init__(self, name)
design.hierarchy_spice.spice.__init__(self, name)
class routing(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name, gdsname):
design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
cell = gdscell(gdsname)
self.add_inst(name=gdsname,
mod=cell,
offset=[0,0])
self.connect_inst([])
r=router.router(gdsname+".gds")
layer_stack =("metal1","via1","metal2")
path=r.route(layer_stack,src="A",dest="B")
r.rg.view()
self.add_wire(layer_stack,path)
r = routing("test1", "AB_same_layer_pins")
self.local_check(r)
# fails if there are any DRC errors on any cells
globals.end_openram()
def local_check(self, r):
tempgds = OPTS.openram_temp + "temp.gds"
r.gds_write(tempgds)
self.assertFalse(calibre.run_drc(r.name, tempgds))
os.remove(tempgds)
# instantiate a copy of the class to actually run the test
if __name__ == "__main__":
(OPTS, args) = globals.parse_args()
del sys.argv[1:]
header(__file__, OPTS.tech_name)
unittest.main()

View File

@ -0,0 +1,80 @@
#!/usr/bin/env python2.7
"Run a regresion test the library cells for DRC"
import unittest
from testutils import header
import sys,os
sys.path.append(os.path.join(sys.path[0],"../.."))
sys.path.append(os.path.join(sys.path[0],".."))
import globals
import debug
import calibre
class no_blockages_test(unittest.TestCase):
def runTest(self):
globals.init_openram("config_{0}".format(OPTS.tech_name))
import design
import router
class gdscell(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name):
#design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
self.name = name
self.gds_file = name + ".gds"
self.sp_file = name + ".sp"
design.hierarchy_layout.layout.__init__(self, name)
design.hierarchy_spice.spice.__init__(self, name)
class routing(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name, gdsname):
design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
cell = gdscell(gdsname)
self.add_inst(name=gdsname,
mod=cell,
offset=[0,0])
self.connect_inst([])
r=router.router(gdsname+".gds")
layer_stack =("metal1","via1","metal2")
path=r.route(layer_stack,src="A",dest="B")
r.rg.view()
self.add_wire(layer_stack,path)
r = routing("test1", "AB_diff_layer_pins")
self.local_check(r)
# fails if there are any DRC errors on any cells
globals.end_openram()
def local_check(self, r):
tempgds = OPTS.openram_temp + "temp.gds"
r.gds_write(tempgds)
self.assertFalse(calibre.run_drc(r.name, tempgds))
os.remove(tempgds)
# instantiate a copy of the class to actually run the test
if __name__ == "__main__":
(OPTS, args) = globals.parse_args()
del sys.argv[1:]
header(__file__, OPTS.tech_name)
unittest.main()

View File

@ -0,0 +1,80 @@
#!/usr/bin/env python2.7
"Run a regresion test the library cells for DRC"
import unittest
from testutils import header
import sys,os
sys.path.append(os.path.join(sys.path[0],"../.."))
sys.path.append(os.path.join(sys.path[0],".."))
import globals
import debug
import calibre
class no_blockages_test(unittest.TestCase):
def runTest(self):
globals.init_openram("config_{0}".format(OPTS.tech_name))
import design
import router
class gdscell(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name):
#design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
self.name = name
self.gds_file = name + ".gds"
self.sp_file = name + ".sp"
design.hierarchy_layout.layout.__init__(self, name)
design.hierarchy_spice.spice.__init__(self, name)
class routing(design.design):
"""
A generic GDS design that we can route on.
"""
def __init__(self, name, gdsname):
design.design.__init__(self, name)
debug.info(2, "Create {0} object".format(name))
cell = gdscell(gdsname)
self.add_inst(name=gdsname,
mod=cell,
offset=[0,0])
self.connect_inst([])
r=router.router(gdsname+".gds")
layer_stack =("metal1","via1","metal2")
path=r.route(layer_stack,src="A",dest="B")
r.rg.view()
self.add_wire(layer_stack,path)
r = routing("test1", "AB_diff_layer_pins")
self.local_check(r)
# fails if there are any DRC errors on any cells
globals.end_openram()
def local_check(self, r):
tempgds = OPTS.openram_temp + "temp.gds"
r.gds_write(tempgds)
self.assertFalse(calibre.run_drc(r.name, tempgds))
os.remove(tempgds)
# instantiate a copy of the class to actually run the test
if __name__ == "__main__":
(OPTS, args) = globals.parse_args()
del sys.argv[1:]
header(__file__, OPTS.tech_name)
unittest.main()

Binary file not shown.

Binary file not shown.