hwt/simulator/hdlSimulator.py
def run(self, until: float) -> None:
        """
        Run simulation until specified time
        :note: can be used to run simulation again after it ends from time when it ends
        """
        assert until > self.now
        events = self._events
        schedule = events.push
        next_event = events.pop

        # add handle to stop simulation
        schedule(until, PRIORITY_URGENT, raise_StopSimulation(self))

        try:
            # for all events
            while True:
                nextTime, priority, process = next_event()
                self.now = nextTime
                # process is python generator or Event
                if isinstance(process, Event):
                    process = iter(process)

                # run process or activate processes dependent on Event
                while True:
                    try:
                        ev = next(process)
                    except StopIteration:
                        break

                    # if process requires waiting put it back in queue
                    if isinstance(ev, Wait):
                        # nextTime is self.now
                        schedule(nextTime + ev.time, priority, process)
                        break
                    elif isinstance(ev, Event):
                        # process going to wait for event
                        # if ev.process_to_wake is None event was already
                        # destroyed
                        ev.process_to_wake.append(process)
                        break
                    else:
                        # else this process spoted new process
                        # and it has to be put in queue
                        schedule(nextTime, priority, ev)

        except StopSimumulation:
            return
def run(self, until: float) -> None:
        """
        Run simulation until specified time
        :note: can be used to run simulation again after it ends from time when it ends
        """
        assert until > self.now
        events = self._events
        schedule = events.push
        next_event = events.pop

        # add handle to stop simulation
        schedule(until, PRIORITY_URGENT, raise_StopSimulation(self))

        try:
            # for all events
            while True:
                nextTime, priority, process = next_event()
                self.now = nextTime
                # process is python generator or Event
                if isinstance(process, Event):
                    process = iter(process)

                # run process or activate processes dependent on Event
                while True:
                    try:
                        ev = next(process)
                    except StopIteration:
                        break

                    # if process requires waiting put it back in queue
                    if isinstance(ev, Wait):
                        # nextTime is self.now
                        schedule(nextTime + ev.time, priority, process)
                        break
                    elif isinstance(ev, Event):
                        # process going to wait for event
                        # if ev.process_to_wake is None event was already
                        # destroyed
                        ev.process_to_wake.append(process)
                        break
                    else:
                        # else this process spoted new process
                        # and it has to be put in queue
                        schedule(nextTime, priority, ev)

        except StopSimumulation:
            return
def run ( self , until : float ) -> None : assert until > self . now events = self . _events schedule = events . push next_event = events . pop # add handle to stop simulation schedule ( until , PRIORITY_URGENT , raise_StopSimulation ( self ) ) try : # for all events while True : nextTime , priority , process = next_event ( ) self . now = nextTime # process is python generator or Event if isinstance ( process , Event ) : process = iter ( process ) # run process or activate processes dependent on Event while True : try : ev = next ( process ) except StopIteration : break # if process requires waiting put it back in queue if isinstance ( ev , Wait ) : # nextTime is self.now schedule ( nextTime + ev . time , priority , process ) break elif isinstance ( ev , Event ) : # process going to wait for event # if ev.process_to_wake is None event was already # destroyed ev . process_to_wake . append ( process ) break else : # else this process spoted new process # and it has to be put in queue schedule ( nextTime , priority , ev ) except StopSimumulation : return
Run simulation until specified time
        :note: can be used to run simulation again after it ends from time when it ends
Run simulation until specified time : note : can be used to run simulation again after it ends from time when it ends