Skip to content

wrappers

Stream wrappers for upstream components.

AsyncFIFOBuffered

Bases: Component

Wrapper around amaranth.lib.fifo.AsyncFIFOBuffered.

Parameters:

Name Type Description Default
shape ShapeLike

Shape of the stream.

required
depth int

Depth of the FIFO.

required

Attributes:

Name Type Description
input stream

Input stream.

output stream

Output stream.

Source code in katsuo/stream/wrappers.py
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class AsyncFIFOBuffered(wiring.Component):
    '''Wrapper around [amaranth.lib.fifo.AsyncFIFOBuffered][].

    Args:
        shape: Shape of the stream.
        depth: Depth of the FIFO.

    Attributes:
        input (stream): Input stream.
        output (stream): Output stream.
    '''

    def __init__(self, *, shape: ShapeLike, depth: int):
        super().__init__({
            'input': wiring.In(stream.Signature(shape)),
            'output': wiring.Out(stream.Signature(shape)),
        })
        self.shape = shape
        self.depth = depth
        self.fifo = fifo.AsyncFIFOBuffered(width = Shape.cast(self.shape).width, depth = self.depth)

    def elaborate(self, platform):
        m = Module()
        m.submodules.fifo = self.fifo

        m.d.comb += [
            # Input
            self.input.ready.eq(self.fifo.w_rdy),
            self.fifo.w_en.eq(self.input.valid),
            self.fifo.w_data.eq(self.input.payload),

            # Output
            self.output.valid.eq(self.fifo.r_rdy),
            self.output.payload.eq(self.fifo.r_data),
            self.fifo.r_en.eq(self.output.ready),
        ]

        return m

SyncFIFOBuffered

Bases: Component

Wrapper around amaranth.lib.fifo.SyncFIFOBuffered.

Parameters:

Name Type Description Default
shape ShapeLike

Shape of the stream.

required
depth int

Depth of the FIFO.

required

Attributes:

Name Type Description
input stream

Input stream.

output stream

Output stream.

Source code in katsuo/stream/wrappers.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class SyncFIFOBuffered(wiring.Component):
    '''Wrapper around [amaranth.lib.fifo.SyncFIFOBuffered][].

    Args:
        shape: Shape of the stream.
        depth: Depth of the FIFO.

    Attributes:
        input (stream): Input stream.
        output (stream): Output stream.
    '''

    def __init__(self, *, shape: ShapeLike, depth: int):
        super().__init__({
            'input': wiring.In(stream.Signature(shape)),
            'output': wiring.Out(stream.Signature(shape)),
        })
        self.shape = shape
        self.depth = depth
        self.fifo = fifo.SyncFIFOBuffered(width = Shape.cast(self.shape).width, depth = self.depth)

    def elaborate(self, platform):
        m = Module()
        m.submodules.fifo = self.fifo

        m.d.comb += [
            # Input
            self.input.ready.eq(self.fifo.w_rdy),
            self.fifo.w_en.eq(self.input.valid),
            self.fifo.w_data.eq(self.input.payload),

            # Output
            self.output.valid.eq(self.fifo.r_rdy),
            self.output.payload.eq(self.fifo.r_data),
            self.fifo.r_en.eq(self.output.ready),
        ]

        return m