def bench(self, genFunc, waiterType): a, b, c, d, r, s = [Signal(intbv(0)) for i in range(6)] gen_inst_r = genFunc(a, b, c, d, r) if not isinstance(gen_inst_r, GeneratorType): # decorator type gen_inst_r = gen_inst_r.gen assert type(_inferWaiter(gen_inst_r)) == waiterType gen_inst_s = genFunc(a, b, c, d, s) if not isinstance(gen_inst_s, GeneratorType): # decorator type gen_inst_s = gen_inst_s.gen def stimulus(): for i in range(1000): yield delay(randrange(1, 10)) if randrange(2): a.next = randrange(32) if randrange(2): b.next = randrange(32) c.next = randrange(2) d.next = randrange(2) raise StopSimulation def check(): while 1: yield a, b, c, r, s assert r == s return gen_inst_r, _Waiter(gen_inst_s), _Waiter(stimulus()), _Waiter( check())
def _makeWaiters(arglist): waiters = [] ids = set() cosim = None for arg in arglist: if isinstance(arg, GeneratorType): waiters.append(_inferWaiter(arg)) elif isinstance(arg, _Instantiator): waiters.append(arg.waiter) elif isinstance(arg, Cosimulation): if cosim is not None: raise SimulationError(_error.MultipleCosim) cosim = arg waiters.append(_SignalTupleWaiter(cosim._waiter())) elif isinstance(arg, _Waiter): waiters.append(arg) elif arg == True: pass else: raise SimulationError(_error.ArgType, str(type(arg))) if id(arg) in ids: raise SimulationError(_error.DuplicatedArg) ids.add(id(arg)) # add waiters for shadow signals for sig in _signals: if hasattr(sig, '_waiter'): waiters.append(sig._waiter) return waiters, cosim
def bench(self, genFunc, waiterType): a, b, c, d, r, s = [Signal(intbv(0)) for i in range(6)] gen_inst_r = genFunc(a, b, c, d, r) if not isinstance(gen_inst_r, GeneratorType): # decorator type gen_inst_r = gen_inst_r.gen self.assertEqual(type(_inferWaiter(gen_inst_r)), waiterType) gen_inst_s = genFunc(a, b, c, d, s) if not isinstance(gen_inst_s, GeneratorType): # decorator type gen_inst_s = gen_inst_s.gen def stimulus(): for i in range(1000): yield delay(randrange(1, 10)) if randrange(2): a.next = randrange(32) if randrange(2): b.next = randrange(32) c.next = randrange(2) d.next = randrange(2) raise StopSimulation def check(): while 1: yield a, b, c, r, s self.assertEqual(r, s) return gen_inst_r, _Waiter(gen_inst_s), _Waiter(stimulus()), _Waiter(check())
def __init__(self, genFunc): self.genfunc = genFunc self.gen = genFunc() self.waiter = _inferWaiter(self.gen)