1 # This file is Copyright (c) 2020 Florent Kermarrec <florent@enjoy-digital.fr>
9 from litex
.soc
.interconnect
.stream
import *
12 class TestStream(unittest
.TestCase
):
13 def pipe_test(self
, dut
):
14 prng
= random
.Random(42)
15 def generator(dut
, valid_rand
=90):
16 for data
in range(128):
17 yield dut
.sink
.valid
.eq(1)
18 yield dut
.sink
.data
.eq(data
)
20 while (yield dut
.sink
.ready
) == 0:
22 yield dut
.sink
.valid
.eq(0)
23 while prng
.randrange(100) < valid_rand
:
26 def checker(dut
, ready_rand
=90):
28 for data
in range(128):
29 yield dut
.source
.ready
.eq(0)
31 while (yield dut
.source
.valid
) == 0:
33 while prng
.randrange(100) < ready_rand
:
35 yield dut
.source
.ready
.eq(1)
37 if ((yield dut
.source
.data
) != data
):
40 run_simulation(dut
, [generator(dut
), checker(dut
)])
41 self
.assertEqual(dut
.errors
, 0)
43 def test_pipe_valid(self
):
44 dut
= PipeValid([("data", 8)])
47 def test_pipe_ready(self
):
48 dut
= PipeReady([("data", 8)])