Source code for hwt.simulator.agentConnector
from hwt.doc_markers import internal
from hwt.hdl.constants import INTF_DIRECTION
from hwt.synthesizer.unit import Unit
from hwtSimApi.hdlSimulator import HdlSimulator
[docs]@internal
def autoAddAgents(unit: Unit, sim: HdlSimulator):
"""
Walk all interfaces on unit and instantiate agent for every interface.
:return: all monitor/driver functions which should be added to simulation
as processes
"""
for intf in unit._interfaces:
assert intf._isExtern, intf
intf._initSimAgent(sim)
assert intf._ag is not None, intf
[docs]@internal
def collect_processes_from_sim_agents(unit: Unit):
proc = []
for intf in unit._interfaces:
a = intf._ag
if not intf._isExtern or a is None:
continue
if intf._direction == INTF_DIRECTION.MASTER:
agProcs = a.getMonitors()
elif intf._direction == INTF_DIRECTION.SLAVE:
agProcs = a.getDrivers()
else:
raise NotImplementedError(f"intf._direction {intf._direction} for {intf}")
proc.extend(agProcs)
return proc