Skip to content

Commit 2f7f185

Browse files
committed
interface/stream_sim: parameter to disable the randomness
1 parent 5837976 commit 2f7f185

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

lambdalib/interface/stream_sim.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@
1616

1717
class StreamSimSender:
1818
def __init__(self, sink, data, speed=0.5, initial_delay=0,
19-
verbose=False, decimal=False, strname=""):
19+
verbose=False, callback=None, decimal=False, strname="",
20+
randomize=True):
2021
self.sink = sink
2122
self.data = data
2223
self.speed = speed
2324
self.initial_delay = initial_delay
2425
self.verbose = verbose
26+
self.callback = callback
2527
self.decimal = decimal
2628
self.strname = strname
29+
self.randomize = randomize
2730

2831
if isinstance(self.data, list):
2932
self.data = {"data": self.data}
@@ -36,6 +39,10 @@ def __init__(self, sink, data, speed=0.5, initial_delay=0,
3639
def sync_process(self):
3740
sink = self.sink
3841

42+
assert (self.speed <= 1)
43+
interval = int(1 / self.speed)
44+
yieldcnt = 0
45+
3946
for i in range(self.initial_delay):
4047
yield
4148

@@ -44,17 +51,28 @@ def sync_process(self):
4451
for k, v in self.data.items():
4552
yield getattr(sink, k).eq(v[i])
4653

54+
if self.randomize:
55+
trigger = (random.random() < self.speed)
56+
else:
57+
trigger = (((yieldcnt+1) % interval) == 0)
58+
4759
if (not (yield sink.valid) \
4860
or ((yield sink.valid) and (yield sink.ready))) \
49-
and (random.random() < self.speed):
61+
and trigger:
5062
yield sink.valid.eq(1)
5163

5264
yield
65+
yieldcnt += 1
5366

5467
if (yield sink.valid) and (yield sink.ready):
5568
if self.verbose:
5669
for k, v in self.data.items():
5770
print(self.strname, "\t", k, hex(v[i]) if not self.decimal else v[i])
71+
if self.callback:
72+
current = {}
73+
for k, v in self.data.items():
74+
current[k] = v[i]
75+
self.callback(current)
5876

5977
i += 1
6078
yield sink.valid.eq(0)

0 commit comments

Comments
 (0)