def __init__(self, name, rect, layer_name_num): self.name = name # repack the rect as a vector, just in case if type(rect[0]) == vector: self.rect = rect else: self.rect = [vector(rect[0]), vector(rect[1])] # snap the rect to the grid self.rect = [x.snap_to_grid() for x in self.rect] # if it's a layer number look up the layer name. this assumes a unique layer number. if type(layer_name_num) == int: self.layer = layer.keys()[layer.values().index(layer_name_num)] else: self.layer = layer_name_num
def __init__(self, name, rect, layer_name_num): self.name = name # repack the rect as a vector, just in case if type(rect[0])==vector: self.rect = rect else: self.rect = [vector(rect[0]),vector(rect[1])] # snap the rect to the grid self.rect = [x.snap_to_grid() for x in self.rect] debug.check(self.width()>0,"Zero width pin.") debug.check(self.height()>0,"Zero height pin.") # if it's a layer number look up the layer name. this assumes a unique layer number. if type(layer_name_num)==int: self.layer = list(layer.keys())[list(layer.values()).index(layer_name_num)] else: self.layer=layer_name_num self.layer_num = layer[self.layer]
def analytical_power(self, corner, load): """ Get total power of a module """ return self.return_power() from sram_factory import factory # This is not instantiated and used for calculations only. # These are static 1x1 contacts to reuse in all the design modules. well = factory.create(module_type="contact", layer_stack=("active", "contact", "metal1"), directions=("H", "V")) active = factory.create(module_type="contact", layer_stack=("active", "contact", "metal1"), directions=("H", "V")) poly = factory.create(module_type="contact", layer_stack=("poly", "contact", "metal1"), directions=("V", "H")) m1m2 = factory.create(module_type="contact", layer_stack=("metal1", "via1", "metal2"), directions=("H", "V")) m2m3 = factory.create(module_type="contact", layer_stack=("metal2", "via2", "metal3"), directions=("V", "H")) if "metal4" in layer.keys(): m3m4 = factory.create(module_type="contact", layer_stack=("metal3", "via3", "metal4"), directions=("H", "V")) else: m3m4 = None