Source code for hwt.simulator.rtlSimulatorVcd


import sys
from typing import Union

from hwt.hdl.types.bits import Bits
from hwt.hdl.types.enum import HEnum
from hwt.hdl.value import HValue
from hwt.simulator.rtlSimulator import BasicRtlSimulatorWithSignalRegisterMethods
from hwtSimApi.basic_hdl_simulator.proxy import BasicRtlSimProxy
from hwtSimApi.basic_hdl_simulator.sim_utils import ValueUpdater, \
    ArrayValueUpdater
from pyDigitalWaveTools.vcd.writer import VcdWriter
#from pyMathBitPrecise.array3t import Array3t
from pyMathBitPrecise.bits3t import Bits3t
from pyMathBitPrecise.enum3t import Enum3t


[docs]class BasicRtlSimulatorVcd(BasicRtlSimulatorWithSignalRegisterMethods): supported_type_classes = (Bits, HEnum, Bits3t, Enum3t, #Array3t )
[docs] def create_wave_writer(self, file_name): self.wave_writer = VcdWriter(open(file_name, "w")) self.logChange = self._logChange
[docs] def finalize(self): # because set_trace_file() may not be called # and it this case the vcd config is not set if self.wave_writer is None: return f = self.wave_writer._oFile if f not in (sys.__stderr__, sys.__stdin__, sys.__stdout__): f.close()
[docs] def _logChange(self, nowTime: int, sig: BasicRtlSimProxy, nextVal: HValue, valueUpdater: Union[ValueUpdater, ArrayValueUpdater]): """ This method is called for every value change of any signal. """ try: self.wave_writer.logChange(nowTime, sig, nextVal, valueUpdater) except KeyError: # not every signal has to be registered # (if it is not registered it means it is ignored) pass