hwt/simulator/hdlSimulator.py
def write(self, val, sig: SimSignal)-> None:
        """
        Write value to signal or interface.
        """
        # get target RtlSignal
        try:
            simSensProcs = sig.simSensProcs
        except AttributeError:
            sig = sig._sigInside
            simSensProcs = sig.simSensProcs

        # type cast of input value
        t = sig._dtype

        if isinstance(val, Value):
            v = val.clone()
            v = v._auto_cast(t)
        else:
            v = t.fromPy(val)

        # can not update value in signal directly due singnal proxies
        sig.simUpdateVal(self, lambda curentV: (
            valueHasChanged(curentV, v), v))

        if not self._applyValPlaned:
            if not (simSensProcs or
                    sig.simRisingSensProcs or
                    sig.simFallingSensProcs):
                # signal value was changed but there are no sensitive processes
                # to it because of this _applyValues is never planed
                # and should be
                self._scheduleApplyValues()
            elif (sig._writeCallbacks or
                  sig._writeCallbacksToEn):
                # signal write did not caused any change on any other signal
                # but there are still simulation agets waiting on
                # updateComplete event
                self._scheduleApplyValues()
def write(self, val, sig: SimSignal)-> None:
        # get target RtlSignal
        try:
            simSensProcs = sig.simSensProcs
        except AttributeError:
            sig = sig._sigInside
            simSensProcs = sig.simSensProcs

        # type cast of input value
        t = sig._dtype

        if isinstance(val, Value):
            v = val.clone()
            v = v._auto_cast(t)
        else:
            v = t.fromPy(val)

        # can not update value in signal directly due singnal proxies
        sig.simUpdateVal(self, lambda curentV: (
            valueHasChanged(curentV, v), v))

        if not self._applyValPlaned:
            if not (simSensProcs or
                    sig.simRisingSensProcs or
                    sig.simFallingSensProcs):
                # signal value was changed but there are no sensitive processes
                # to it because of this _applyValues is never planed
                # and should be
                self._scheduleApplyValues()
            elif (sig._writeCallbacks or
                  sig._writeCallbacksToEn):
                # signal write did not caused any change on any other signal
                # but there are still simulation agets waiting on
                # updateComplete event
                self._scheduleApplyValues()
def write ( self , val , sig : SimSignal ) -> None : # get target RtlSignal try : simSensProcs = sig . simSensProcs except AttributeError : sig = sig . _sigInside simSensProcs = sig . simSensProcs # type cast of input value t = sig . _dtype if isinstance ( val , Value ) : v = val . clone ( ) v = v . _auto_cast ( t ) else : v = t . fromPy ( val ) # can not update value in signal directly due singnal proxies sig . simUpdateVal ( self , lambda curentV : ( valueHasChanged ( curentV , v ) , v ) ) if not self . _applyValPlaned : if not ( simSensProcs or sig . simRisingSensProcs or sig . simFallingSensProcs ) : # signal value was changed but there are no sensitive processes # to it because of this _applyValues is never planed # and should be self . _scheduleApplyValues ( ) elif ( sig . _writeCallbacks or sig . _writeCallbacksToEn ) : # signal write did not caused any change on any other signal # but there are still simulation agets waiting on # updateComplete event self . _scheduleApplyValues ( )
Write value to signal or interface.
Write value to signal or interface .