Source code for vcd.common

from enum import Enum
from typing import NamedTuple


[docs] class ScopeType(Enum): """Valid VCD scope types.""" begin = "begin" fork = "fork" function = "function" module = "module" task = "task"
[docs] class VarType(Enum): """Valid VCD variable types.""" event = "event" integer = "integer" parameter = "parameter" real = "real" realtime = "realtime" reg = "reg" supply0 = "supply0" supply1 = "supply1" time = "time" tri = "tri" triand = "triand" trior = "trior" trireg = "trireg" tri0 = "tri0" tri1 = "tri1" wand = "wand" wire = "wire" wor = "wor" string = "string" logic = "logic" def __str__(self) -> str: return self.value
[docs] class TimescaleMagnitude(Enum): """Valid timescale magnitudes.""" one = 1 ten = 10 hundred = 100
[docs] class TimescaleUnit(Enum): """Valid timescale units.""" second = "s" millisecond = "ms" microsecond = "us" nanosecond = "ns" picosecond = "ps" femtosecond = "fs"
[docs] class Timescale(NamedTuple): """Timescale magnitude and unit.""" magnitude: TimescaleMagnitude unit: TimescaleUnit
[docs] @classmethod def from_str(cls, s: str) -> "Timescale": for unit in TimescaleUnit: if s == unit.value: mag = TimescaleMagnitude(1) break else: for mag in reversed(TimescaleMagnitude): mag_str = str(mag.value) if s.startswith(mag_str): unit_str = s[len(mag_str) :].lstrip(" ") unit = TimescaleUnit(unit_str) break else: raise ValueError(f"Invalid timescale magnitude {s!r}") return Timescale(mag, unit)
def __str__(self) -> str: return f"{self.magnitude.value} {self.unit.value}"