mirror of https://github.com/VLSIDA/OpenRAM.git
base/pin_layout: Make rect and layer properties
only rect and layer are used to compute the hash for a pin. Having those as properties allows us to cache the hash value and only update it if either rect or layer are written. Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
This commit is contained in:
parent
9ad06a7770
commit
14e8a26246
|
|
@ -22,31 +22,47 @@ class pin_layout:
|
|||
self.name = name
|
||||
# repack the rect as a vector, just in case
|
||||
if type(rect[0]) == vector:
|
||||
self.rect = rect
|
||||
self._rect = rect
|
||||
else:
|
||||
self.rect = [vector(rect[0]), vector(rect[1])]
|
||||
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]
|
||||
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 string, use the name
|
||||
if type(layer_name_pp) == str:
|
||||
self.layer = layer_name_pp
|
||||
self._layer = layer_name_pp
|
||||
# else it is required to be a lpp
|
||||
else:
|
||||
for (layer_name, lpp) in layer.items():
|
||||
if not lpp:
|
||||
continue
|
||||
if self.same_lpp(layer_name_pp, lpp):
|
||||
self.layer = layer_name
|
||||
self._layer = layer_name
|
||||
break
|
||||
else:
|
||||
debug.error("Couldn't find layer {}".format(layer_name_pp), -1)
|
||||
|
||||
self.lpp = layer[self.layer]
|
||||
|
||||
@property
|
||||
def layer(self):
|
||||
return self._layer
|
||||
|
||||
@layer.setter
|
||||
def layer(self, l):
|
||||
self._layer = l
|
||||
|
||||
@property
|
||||
def rect(self):
|
||||
return self._rect
|
||||
|
||||
@rect.setter
|
||||
def rect(self, r):
|
||||
self._rect = r
|
||||
|
||||
def __str__(self):
|
||||
""" override print function output """
|
||||
return "({} layer={} ll={} ur={})".format(self.name,
|
||||
|
|
|
|||
Loading…
Reference in New Issue