Skip to content

Commit 4062557

Browse files
committed
stream: Fix BFM implementations
1 parent 9eac0a4 commit 4062557

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

lambdalib/interface/stream.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from amaranth import *
44
from amaranth.hdl.rec import *
55
from amaranth.lib import fifo
6+
from amaranth.sim import Settle, Passive
67

78

89
__all__ = ["Endpoint", "SyncFIFO", "AsyncFIFO"]
@@ -66,17 +67,16 @@ def bfm_send(self, pkts, timeout=100):
6667
for key, val in pkt.items():
6768
yield getattr(self, key).eq(val)
6869

69-
yield
70-
elapsed = 1
71-
7270
yield Settle()
71+
elapsed = 1
7372
while not (yield self.ready):
7473
yield
7574
yield Settle()
7675
elapsed += 1
7776
if elapsed >= timeout:
7877
raise Exception("timeout")
7978

79+
yield
8080
yield self.valid.eq(0)
8181

8282
def bfm_read(self, timeout=100):
@@ -91,10 +91,14 @@ def bfm_read(self, timeout=100):
9191
if elapsed >= timeout:
9292
raise Exception("timeout")
9393

94+
res = {}
95+
for key, _ in self.description.payload_layout:
96+
res[key] = yield getattr(self, key)
97+
9498
yield
9599
yield self.ready.eq(0)
96100

97-
return {key: getattr(self, key) for key, _ in self.description}
101+
return res
98102

99103

100104
class _FIFOWrapper:

0 commit comments

Comments
 (0)