@@ -92,19 +92,30 @@ def __init__(self):
92
92
self .sink = sink = Endpoint ([('channel' , 7 ), ('data' , 8 )])
93
93
self .source = source = Endpoint ([('data' , 8 )])
94
94
95
+ max_size = 1024
96
+
95
97
channel = Signal (7 )
98
+ byte_cnt = Signal (max = max_size )
99
+
100
+ start_new_packet = Signal ()
101
+
102
+ self .comb += start_new_packet .eq ((sink .channel != channel ) | (byte_cnt >= max_size - 1 ))
96
103
97
104
self .submodules .fsm = fsm = FSM ()
98
105
99
106
fsm .act ('DATA' ,
100
107
source .data .eq (sink .data ),
101
- source .valid .eq (sink .valid & ( sink . channel == channel ) ),
102
- sink .ready .eq (source .ready & ( sink . channel == channel ) ),
108
+ source .valid .eq (sink .valid & ~ start_new_packet ),
109
+ sink .ready .eq (source .ready & ~ start_new_packet ),
103
110
104
- If (sink .valid & ( sink . channel != channel ) ,
111
+ If (sink .valid & start_new_packet ,
105
112
NextState ('HEADER' ),
106
113
NextValue (channel , sink .channel ),
107
114
),
115
+
116
+ If (sink .valid & sink .ready ,
117
+ NextValue (byte_cnt , byte_cnt + 1 ),
118
+ ),
108
119
)
109
120
110
121
fsm .act ('HEADER' ,
@@ -114,6 +125,7 @@ def __init__(self):
114
125
115
126
If (source .ready ,
116
127
NextState ('DATA' ),
128
+ NextValue (byte_cnt , 0 ),
117
129
),
118
130
)
119
131
0 commit comments