| class StreamInterface(PureInterface):
def wrap(self):
signals = [self.data]
if 'first' in self.signature.members:
signals.append(self.first)
if 'last' in self.signature.members:
signals.append(self.last)
return Cat(signals)
class Buffer(Component):
def __init__(self, stream_signature):
super().__init__({
'input': In(stream_signature),
'output': Out(stream_signature),
})
def elaborate(self, platform):
m = Module()
with m.If(self.output.valid & self.output.ready):
m.d.sync += self.output.valid.eq(0)
with m.If(~self.output.valid | self.output.ready):
m.d.comb += self.input.ready.eq(1)
with m.If(self.input.valid):
m.d.sync += self.output.valid.eq(1)
m.d.sync += self.output.wrap().eq(self.input.wrap())
return m
|