diff --git a/scripts/python-skywater-pdk/skywater_pdk/drives.py b/scripts/python-skywater-pdk/skywater_pdk/sizes.py
similarity index 67%
rename from scripts/python-skywater-pdk/skywater_pdk/drives.py
rename to scripts/python-skywater-pdk/skywater_pdk/sizes.py
index e2db6c5..0afddfe 100644
--- a/scripts/python-skywater-pdk/skywater_pdk/drives.py
+++ b/scripts/python-skywater-pdk/skywater_pdk/sizes.py
@@ -17,8 +17,8 @@
 from dataclasses_json import dataclass_json
 
 
-def parse_drive(s):
-    return DriveStrength.from_suffix(s)
+def parse_size(s):
+    return TransistorSize.from_suffix(s)
 
 
 class InvalidSuffixError(ValueError):
@@ -26,23 +26,23 @@
         ValueError.__init__(self, "Invalid suffix: {}".format(s.strip()))
 
 
-class DriveStrength(abc.ABC):
+class TransistorSize(abc.ABC):
     """Drive strength variants of a given cell.
 
-    >>> d1 = DriveStrength.from_suffix("_1")
-    >>> d2 = DriveStrength.from_suffix("_lp")
-    >>> d3 = DriveStrength.from_suffix("_m")
-    >>> d4 = DriveStrength.from_suffix("_2")
-    >>> DriveStrength.from_suffix("_abc")
+    >>> d1 = TransistorSize.from_suffix("_1")
+    >>> d2 = TransistorSize.from_suffix("_lp")
+    >>> d3 = TransistorSize.from_suffix("_m")
+    >>> d4 = TransistorSize.from_suffix("_2")
+    >>> TransistorSize.from_suffix("_abc")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _abc
     >>> l = [d1, d2, d3, d4]
     >>> l
-    [DriveStrengthNumeric(units=1), DriveStrengthLowPower(lp_variant=0), DriveStrengthMinimum(), DriveStrengthNumeric(units=2)]
+    [TransistorSizeNumeric(units=1), TransistorSizeLowPower(lp_variant=0), TransistorSizeMinimum(), TransistorSizeNumeric(units=2)]
     >>> l.sort()
     >>> l
-    [DriveStrengthNumeric(units=1), DriveStrengthNumeric(units=2), DriveStrengthLowPower(lp_variant=0), DriveStrengthMinimum()]
+    [TransistorSizeNumeric(units=1), TransistorSizeNumeric(units=2), TransistorSizeLowPower(lp_variant=0), TransistorSizeMinimum()]
     """
 
     @abc.abstractmethod
@@ -71,10 +71,10 @@
         raise InvalidSuffixError("\n".join(msg))
 
     def __str__(self):
-        return "drive strength {}".format(self.describe())
+        return "transistors with size {}".format(self.describe())
 
     def _cmp(self, op, o):
-        if not isinstance(o, DriveStrength):
+        if not isinstance(o, TransistorSize):
             return False
         return op(self.suffix, o.suffix)
 
@@ -100,33 +100,33 @@
 
 @dataclass_json
 @dataclass(frozen=True)
-class DriveStrengthNumeric(DriveStrength):
+class TransistorSizeNumeric(TransistorSize):
     """
-    >>> s1 = DriveStrengthNumeric.from_suffix("_1")
-    >>> s2 = DriveStrengthNumeric.from_suffix("_2")
-    >>> s3 = DriveStrengthNumeric.from_suffix("_3")
-    >>> DriveStrengthNumeric.from_suffix("_-1")
+    >>> s1 = TransistorSizeNumeric.from_suffix("_1")
+    >>> s2 = TransistorSizeNumeric.from_suffix("_2")
+    >>> s3 = TransistorSizeNumeric.from_suffix("_3")
+    >>> TransistorSizeNumeric.from_suffix("_-1")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _-1
     >>> s1
-    DriveStrengthNumeric(units=1)
+    TransistorSizeNumeric(units=1)
     >>> s2
-    DriveStrengthNumeric(units=2)
+    TransistorSizeNumeric(units=2)
     >>> s3
-    DriveStrengthNumeric(units=3)
+    TransistorSizeNumeric(units=3)
     >>> str(s1)
-    'drive strength 1 units'
+    'transistors with size of 1 units'
     >>> str(s2)
-    'drive strength 2 units'
+    'transistors with size of 2 units'
     >>> str(s3)
-    'drive strength 3 units (invalid?)'
+    'transistors with size of 3 units (invalid?)'
     >>> s1.describe()
-    '1 units'
+    'of 1 units'
     >>> s2.describe()
-    '2 units'
+    'of 2 units'
     >>> s3.describe()
-    '3 units (invalid?)'
+    'of 3 units (invalid?)'
     >>> s1.suffix
     '_1'
     >>> s2.suffix
@@ -136,14 +136,14 @@
     """
     units: int
 
-    VALID_UNIT_VALUES = (0, 1, 2, 4)
+    VALID_UNIT_VALUES = (0, 1, 2, 4, 8, 6, 12, 14, 16, 20, 32)
 
     def describe(self):
         suffix = ""
         if self.units not in self.VALID_UNIT_VALUES:
             suffix = " (invalid?)"
 
-        return "{} units{}".format(self.units, suffix)
+        return "of {} units{}".format(self.units, suffix)
 
     @property
     def suffix(self):
@@ -161,33 +161,33 @@
 
 @dataclass_json
 @dataclass(frozen=True)
-class DriveStrengthLowPower(DriveStrength):
+class TransistorSizeLowPower(TransistorSize):
     """
-    >>> lp = DriveStrengthLowPower.from_suffix("_lp")
-    >>> lp2 = DriveStrengthLowPower.from_suffix("_lp2")
-    >>> lp3 = DriveStrengthLowPower.from_suffix("_lp3")
-    >>> DriveStrengthLowPower.from_suffix("_ld")
+    >>> lp = TransistorSizeLowPower.from_suffix("_lp")
+    >>> lp2 = TransistorSizeLowPower.from_suffix("_lp2")
+    >>> lp3 = TransistorSizeLowPower.from_suffix("_lp3")
+    >>> TransistorSizeLowPower.from_suffix("_ld")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _ld
     >>> lp
-    DriveStrengthLowPower(lp_variant=0)
+    TransistorSizeLowPower(lp_variant=0)
     >>> lp2
-    DriveStrengthLowPower(lp_variant=1)
+    TransistorSizeLowPower(lp_variant=1)
     >>> lp3
-    DriveStrengthLowPower(lp_variant=2)
+    TransistorSizeLowPower(lp_variant=2)
     >>> str(lp)
-    'drive strength Low Power'
+    'transistors with size for low power'
     >>> str(lp2)
-    'drive strength Low Power (alternative)'
+    'transistors with size for low power (alternative)'
     >>> str(lp3)
-    'drive strength Low Power (extra alternative 0)'
+    'transistors with size for low power (extra alternative 0)'
     >>> lp.describe()
-    'Low Power'
+    'for low power'
     >>> lp2.describe()
-    'Low Power (alternative)'
+    'for low power (alternative)'
     >>> lp3.describe()
-    'Low Power (extra alternative 0)'
+    'for low power (extra alternative 0)'
     >>> lp.suffix
     '_lp'
     >>> lp2.suffix
@@ -205,7 +205,7 @@
         else:
             assert self.lp_variant >= 2, self.lp_variant
             suffix = " (extra alternative {})".format(self.lp_variant-2)
-        return "Low Power"+suffix
+        return "for low power"+suffix
 
     @property
     def suffix(self):
@@ -232,24 +232,24 @@
             return cls(i-1)
 
 
-class DriveStrengthMinimum(DriveStrength):
+class TransistorSizeMinimum(TransistorSize):
     """
-    >>> m = DriveStrengthMinimum.from_suffix("_m")
-    >>> DriveStrengthMinimum.from_suffix("_m2")
+    >>> m = TransistorSizeMinimum.from_suffix("_m")
+    >>> TransistorSizeMinimum.from_suffix("_m2")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _m2
     >>> m
-    DriveStrengthMinimum()
+    TransistorSizeMinimum()
     >>> str(m)
-    'drive strength minimum'
+    'transistors with size minimum'
     >>> m.describe()
     'minimum'
     >>> m.suffix
     '_m'
 
-    >>> m1 = DriveStrengthMinimum()
-    >>> m2 = DriveStrengthMinimum()
+    >>> m1 = TransistorSizeMinimum()
+    >>> m2 = TransistorSizeMinimum()
     >>> assert m1 is m2
     """
     _object = None
@@ -259,7 +259,7 @@
         return cls._object
 
     def __repr__(self):
-        return "DriveStrengthMinimum()"
+        return "TransistorSizeMinimum()"
 
     def describe(self):
         return "minimum"
@@ -281,7 +281,7 @@
         return {'minimum': None}
 
 
-DriveStrengthMinimum._object = DriveStrengthMinimum()
+TransistorSizeMinimum._object = TransistorSizeMinimum()
 
 
 if __name__ == "__main__":
