Skip to content

Commit 9eac0a4

Browse files
author
Jean THOMAS
committed
stream: Add BFM methods
1 parent 07c8a03 commit 9eac0a4

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

lambdalib/interface/stream.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,46 @@ def __getattr__(self, name):
5656
except AttributeError:
5757
return self.fields["payload"][name]
5858

59+
def bfm_send(self, pkts, timeout=100):
60+
len_pkts = len(pkts)
61+
for i, pkt in enumerate(pkts):
62+
yield Settle()
63+
yield self.valid.eq(1)
64+
yield self.first.eq(i == 0)
65+
yield self.last .eq(i == len_pkts - 1)
66+
for key, val in pkt.items():
67+
yield getattr(self, key).eq(val)
68+
69+
yield
70+
elapsed = 1
71+
72+
yield Settle()
73+
while not (yield self.ready):
74+
yield
75+
yield Settle()
76+
elapsed += 1
77+
if elapsed >= timeout:
78+
raise Exception("timeout")
79+
80+
yield self.valid.eq(0)
81+
82+
def bfm_read(self, timeout=100):
83+
elapsed = 0
84+
85+
yield self.ready.eq(1)
86+
yield Settle()
87+
while not (yield self.valid):
88+
yield
89+
yield Settle()
90+
elapsed += 1
91+
if elapsed >= timeout:
92+
raise Exception("timeout")
93+
94+
yield
95+
yield self.ready.eq(0)
96+
97+
return {key: getattr(self, key) for key, _ in self.description}
98+
5999

60100
class _FIFOWrapper:
61101
def __init__(self, payload_layout):

0 commit comments

Comments
 (0)