-
Notifications
You must be signed in to change notification settings - Fork 178
/
Copy pathtest_lib_stream.py
140 lines (128 loc) · 5.64 KB
/
test_lib_stream.py
1
2
3
4
5
6
7
8
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
47
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from amaranth.hdl import *
from amaranth.lib import stream, wiring, fifo
from amaranth.lib.wiring import In, Out
from .utils import *
class StreamTestCase(FHDLTestCase):
def test_nav_nar(self):
sig = stream.Signature(2)
self.assertRepr(sig, f"stream.Signature(2)")
self.assertEqual(sig.always_valid, False)
self.assertEqual(sig.always_ready, False)
self.assertEqual(sig.members, wiring.SignatureMembers({
"payload": Out(2),
"valid": Out(1),
"ready": In(1)
}))
intf = sig.create()
self.assertRepr(intf,
f"stream.Interface(payload=(sig intf__payload), valid=(sig intf__valid), "
f"ready=(sig intf__ready))")
self.assertIs(intf.signature, sig)
self.assertIsInstance(intf.payload, Signal)
self.assertIs(intf.p, intf.payload)
self.assertIsInstance(intf.valid, Signal)
self.assertIsInstance(intf.ready, Signal)
def test_av_nar(self):
sig = stream.Signature(2, always_valid=True)
self.assertRepr(sig, f"stream.Signature(2, always_valid=True)")
self.assertEqual(sig.always_valid, True)
self.assertEqual(sig.always_ready, False)
self.assertEqual(sig.members, wiring.SignatureMembers({
"payload": Out(2),
"valid": Out(1),
"ready": In(1)
}))
intf = sig.create()
self.assertRepr(intf,
f"stream.Interface(payload=(sig intf__payload), valid=(const 1'd1), "
f"ready=(sig intf__ready))")
self.assertIs(intf.signature, sig)
self.assertIsInstance(intf.payload, Signal)
self.assertIs(intf.p, intf.payload)
self.assertIsInstance(intf.valid, Const)
self.assertEqual(intf.valid.value, 1)
self.assertIsInstance(intf.ready, Signal)
def test_nav_ar(self):
sig = stream.Signature(2, always_ready=True)
self.assertRepr(sig, f"stream.Signature(2, always_ready=True)")
self.assertEqual(sig.always_valid, False)
self.assertEqual(sig.always_ready, True)
self.assertEqual(sig.members, wiring.SignatureMembers({
"payload": Out(2),
"valid": Out(1),
"ready": In(1)
}))
intf = sig.create()
self.assertRepr(intf,
f"stream.Interface(payload=(sig intf__payload), valid=(sig intf__valid), "
f"ready=(const 1'd1))")
self.assertIs(intf.signature, sig)
self.assertIsInstance(intf.payload, Signal)
self.assertIs(intf.p, intf.payload)
self.assertIsInstance(intf.valid, Signal)
self.assertIsInstance(intf.ready, Const)
self.assertEqual(intf.ready.value, 1)
def test_av_ar(self):
sig = stream.Signature(2, always_valid=True, always_ready=True)
self.assertRepr(sig, f"stream.Signature(2, always_valid=True, always_ready=True)")
self.assertEqual(sig.always_valid, True)
self.assertEqual(sig.always_ready, True)
self.assertEqual(sig.members, wiring.SignatureMembers({
"payload": Out(2),
"valid": Out(1),
"ready": In(1)
}))
intf = sig.create()
self.assertRepr(intf,
f"stream.Interface(payload=(sig intf__payload), valid=(const 1'd1), "
f"ready=(const 1'd1))")
self.assertIs(intf.signature, sig)
self.assertIsInstance(intf.payload, Signal)
self.assertIs(intf.p, intf.payload)
self.assertIsInstance(intf.valid, Const)
self.assertEqual(intf.valid.value, 1)
self.assertIsInstance(intf.ready, Const)
self.assertEqual(intf.ready.value, 1)
def test_eq(self):
sig_nav_nar = stream.Signature(2)
sig_av_nar = stream.Signature(2, always_valid=True)
sig_nav_ar = stream.Signature(2, always_ready=True)
sig_av_ar = stream.Signature(2, always_valid=True, always_ready=True)
sig_av_ar2 = stream.Signature(3, always_valid=True, always_ready=True)
self.assertNotEqual(sig_nav_nar, None)
self.assertEqual(sig_nav_nar, sig_nav_nar)
self.assertEqual(sig_av_nar, sig_av_nar)
self.assertEqual(sig_nav_ar, sig_nav_ar)
self.assertEqual(sig_av_ar, sig_av_ar)
self.assertEqual(sig_av_ar2, sig_av_ar2)
self.assertNotEqual(sig_nav_nar, sig_av_nar)
self.assertNotEqual(sig_av_nar, sig_nav_ar)
self.assertNotEqual(sig_nav_ar, sig_av_ar)
self.assertNotEqual(sig_av_ar, sig_nav_nar)
self.assertNotEqual(sig_av_ar, sig_av_ar2)
def test_payload_init(self):
sig = stream.Signature(2, payload_init=0b10)
intf = sig.create()
self.assertEqual(intf.payload.init, 0b10)
def test_interface_create_bad(self):
with self.assertRaisesRegex(TypeError,
r"^Signature of stream\.Interface must be a stream\.Signature, not "
r"Signature\(\{\}\)$"):
stream.Interface(wiring.Signature({}))
class FIFOStreamCompatTestCase(FHDLTestCase):
def test_r_stream(self):
queue = fifo.SyncFIFOBuffered(width=4, depth=16)
r = queue.r_stream
self.assertFalse(r.signature.always_valid)
self.assertFalse(r.signature.always_ready)
self.assertIs(r.payload, queue.r_data)
self.assertIs(r.valid, queue.r_rdy)
self.assertIs(r.ready, queue.r_en)
def test_w_stream(self):
queue = fifo.SyncFIFOBuffered(width=4, depth=16)
w = queue.w_stream
self.assertFalse(w.signature.always_valid)
self.assertFalse(w.signature.always_ready)
self.assertIs(w.payload, queue.w_data)
self.assertIs(w.valid, queue.w_en)
self.assertIs(w.ready, queue.w_rdy)