1 from migen
.fhdl
.std
import *
3 from misoclib
.ethmac
.common
import *
4 from misoclib
.ethmac
.preamble
import *
5 from misoclib
.ethmac
.test
.common
import *
8 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xD5
12 0x00, 0x0A, 0xE6, 0xF0, 0x05, 0xA3, 0x00, 0x12,
13 0x34, 0x56, 0x78, 0x90, 0x08, 0x00, 0x45, 0x00,
14 0x00, 0x30, 0xB3, 0xFE, 0x00, 0x00, 0x80, 0x11,
15 0x72, 0xBA, 0x0A, 0x00, 0x00, 0x03, 0x0A, 0x00,
16 0x00, 0x02, 0x04, 0x00, 0x04, 0x00, 0x00, 0x1C,
17 0x89, 0x4D, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
18 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
19 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13
29 def __init__(self
, random_level
=50):
31 sm
.streamer
= PacketStreamer(eth_description(8))
32 sm
.streamer_randomizer
= AckRandomizer(eth_description(8), random_level
)
33 sm
.logger
= PacketLogger(eth_description(8))
34 sm
.logger_randomizer
= AckRandomizer(eth_description(8), random_level
)
37 self
.streamer
.source
.connect(self
.streamer_randomizer
.sink
),
38 self
.logger_randomizer
.source
.connect(self
.logger
.sink
)
41 sm
.preamble_inserter
= PreambleInserter(8)
42 sm
.preamble_checker
= PreambleChecker(8)
46 If(self
.mux
== mux
["inserter"],
47 self
.streamer_randomizer
.source
.connect(self
.preamble_inserter
.sink
),
48 self
.preamble_inserter
.source
.connect(self
.logger_randomizer
.sink
)
49 ).Elif(self
.mux
== mux
["checker"],
50 self
.streamer_randomizer
.source
.connect(self
.preamble_checker
.sink
),
51 self
.preamble_checker
.source
.connect(self
.logger_randomizer
.sink
)
52 ).Elif(self
.mux
== mux
["both"],
53 self
.streamer_randomizer
.source
.connect(self
.preamble_inserter
.sink
),
54 self
.preamble_inserter
.source
.connect(self
.preamble_checker
.sink
),
55 self
.preamble_checker
.source
.connect(self
.logger_randomizer
.sink
)
58 def gen_simulation(self
, selfp
):
59 selfp
.mux
= mux
["inserter"]
60 print("streamer --> preamble_inserter --> logger:")
61 self
.streamer
.send(Packet(payload
))
62 yield from self
.logger
.receive()
63 s
, l
, e
= check(preamble
+payload
, self
.logger
.packet
)
64 print("shift "+ str(s
) + " / length " + str(l
) + " / errors " + str(e
))
66 selfp
.mux
= mux
["checker"]
67 print("streamer --> preamble_checker --> logger:")
68 self
.streamer
.send(Packet(preamble
+payload
))
69 yield from self
.logger
.receive()
70 s
, l
, e
= check(payload
, self
.logger
.packet
)
71 print("shift "+ str(s
) + " / length " + str(l
) + " / errors " + str(e
))
73 selfp
.mux
= mux
["both"]
74 print("streamer --> preamble_inserter --> preamble_checker --> logger:")
75 self
.streamer
.send(Packet(payload
))
76 yield from self
.logger
.receive()
77 s
, l
, e
= check(payload
, self
.logger
.packet
)
78 print("shift "+ str(s
) + " / length " + str(l
) + " / errors " + str(e
))
80 if __name__
== "__main__":
81 from migen
.sim
.generic
import run_simulation
82 run_simulation(TB(), ncycles
=1000, vcd_name
="my.vcd")