def simPrepare(unit, modelCls=None, dumpModelIn=None, onAfterToRtl=None): """ Create simulation model and connect it with interfaces of original unit and decorate it with agents :param unit: interface level unit which you wont prepare for simulation :param modelCls: class of rtl simulation model to run simulation on, if is None rtl sim model will be generated from unit :param dumpModelIn: folder to where put sim model files (if is None sim model will be constructed only in memory) :param onAfterToRtl: callback fn(unit) which will be called unit after it will be synthesised to rtl :return: tuple (fully loaded unit with connected sim model, connected simulation model, simulation processes of agents ) """ if modelCls is None: modelCls = toSimModel(unit, dumpModelIn=dumpModelIn) else: synthesised(unit) if onAfterToRtl: onAfterToRtl(unit) reconectUnitSignalsToModel(unit, modelCls) model = modelCls() procs = autoAddAgents(unit) return unit, model, procs
def restartSim(self): """ Set simulator to initial state and connect it to :return: tuple (fully loaded unit with connected simulator, connected simulator, simulation processes ) """ rtl_simulator = self.rtl_simulator_cls() hdl_simulator = HdlSimulator(rtl_simulator) unit = self.u reconnectUnitSignalsToModel(unit, rtl_simulator) autoAddAgents(unit, hdl_simulator) self.procs = [] self.u, self.rtl_simulator, self.hdl_simulator = \ unit, rtl_simulator, hdl_simulator return unit, rtl_simulator, self.procs