You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update to pipe properties spec to include axi streaming as a protocol
choice.
Existing properties like bits_per_symbol have been explicitly declared
as Avalon-only. Although AXI will require many similar controls, the
intention will be to add separate AXI-only properties for those. They
will be added in the future as we add support for them.
Part of this update includes items 3-8 of this [cleanup
case](https://github.com/intel/llvm/issues/9465l) from @GarveyJoe. Of
particular note, uses_ready has been extracted from the protocol
property into its own property.
---------
Co-authored-by: Steffen Larsen <[email protected]>
using sycl::ext::intel::experimental::bits_per_symbol;
178
+
using sycl::ext::intel::experimental::bits_per_symbol_key;
179
+
using sycl::ext::intel::experimental::first_symbol_in_high_order_bits;
180
+
using sycl::ext::intel::experimental::first_symbol_in_high_order_bits_key;
181
+
using sycl::ext::intel::experimental::ready_latency;
182
+
using sycl::ext::intel::experimental::ready_latency_key;
183
+
using sycl::ext::intel::experimental::uses_ready;
184
+
using sycl::ext::intel::experimental::uses_ready_key;
185
+
using sycl::ext::intel::experimental::uses_valid;
186
+
using sycl::ext::intel::experimental::uses_valid_key;
187
+
} // namespace avalon-st
188
+
189
+
} // namespace experimental
190
+
} // namespace intel
191
+
} // namespace ext
192
+
} // namespace sycl
193
+
165
194
```
166
195
167
196
--
@@ -177,11 +206,12 @@ Default value: 0
177
206
The number of cycles between when the ready signal is deasserted and when the
178
207
pipe can no longer accept new inputs.
179
208
180
-
This property is not guaranteed to be respected if the pipe is an inter-kernel
181
-
pipe. The compiler is allowed to optimize the pipe if both sides are visible.
209
+
This property only applies to the externally visible end of the pipe.
210
+
211
+
This property is only valid when the `protocol` property is *avalon_streaming*.
182
212
183
213
|`bits_per_symbol`
184
-
| Valid values: A positive integer value that evenly divides by the data type size.
214
+
| Valid values: A positive integer value that evenly divides the data type size.
185
215
186
216
Default value: 8
187
217
@@ -190,8 +220,9 @@ Describes how the data is broken into symbols on the data bus.
190
220
Data is broken down according to how you set the `first_symbol_in_high_order_bits`
191
221
property. By default, data is broken down in little endian order.
192
222
193
-
This property is not guaranteed to be respected if the pipe is an inter-kernel
194
-
pipe. The compiler is allowed to optimize the pipe if both sides are visible.
223
+
This property only applies to the externally visible end of the pipe.
224
+
225
+
This property is only valid when the `protocol` property is *avalon_streaming*.
195
226
196
227
|`uses_valid`
197
228
| Valid values: `true` or `false`
@@ -204,11 +235,27 @@ upstream source must provide valid data on every cycle that ready is asserted.
204
235
This is equivalent to changing the pipe read calls to a non-blocking call and assuming that
205
236
success is always true.
206
237
207
-
If set to `false`, the `min_capacity` pipe class template parameter and `ready_latency`
208
-
property must be 0.
238
+
This property only applies to the externally visible end of the pipe, and only valid when
239
+
the valid signal is driven externally from the kernel, i.e., on a host-to-kernel or IO-to-kernel pipe.
240
+
241
+
This property is only valid when the `protocol` property is *avalon_streaming*
242
+
or *avalon_mm*.
243
+
244
+
|`uses_ready`
245
+
| Ready values: `true` or `false`
246
+
247
+
Default value: `true`
248
+
249
+
Controls whether a ready signal is present on the pipe interface. If `false`, the
250
+
downstream sink cannot backpressure the pipe.
251
+
252
+
This is equivalent to changing the pipe write calls to a non-blocking call and assuming that
253
+
success is always true.
254
+
255
+
This property only applies to the externally visible end of the pipe, and only valid when
256
+
the ready signal is driven externally from the kernel, i.e., on a kernel-to-host or IO-to-host pipe.
209
257
210
-
This property is not guaranteed to be respected if the pipe is an inter-kernel
211
-
pipe. The compiler is allowed to optimize the pipe if both sides are visible.
258
+
This property is only valid when the `protocol` property is *avalon_streaming*.
212
259
213
260
|`first_symbol_in_high_order_bits`
214
261
| Valid values: true or false
@@ -218,38 +265,28 @@ Default value: false
218
265
Specifies whether the data symbols in the pipe are in big-endian
219
266
order.
220
267
221
-
This property is not guaranteed to be respected if the pipe is an inter-kernel
222
-
pipe. The compiler is allowed to optimize the pipe if both sides are visible.
268
+
This property only applies to the externally visible end of the pipe.
269
+
270
+
This property is only valid when the `protocol` property is *avalon_streaming*
271
+
or *avalon_mm*.
223
272
224
273
|`protocol`
225
274
| Specifies the protocol for the pipe interface. Currently, the protocols supported
226
-
are: *avalon_streaming*, *avalon_streaming_uses_ready*, *avalon_mm*, and *avalon_mm_uses_ready*.
275
+
are: *avalon_streaming*, *avalon_mm*, and *axi_streaming*.
227
276
228
277
*avalon_streaming*
229
278
230
279
Provide an Avalon streaming interface as described in https://www.intel.com/content/www/us/en/docs/programmable/683091/22-3/introduction-to-the-interface-specifications.html[Intel® Avalon Interface Specifications].
231
280
232
-
With this choice of protocol, no ready signal is exposed by the host pipe, and the sink cannot backpressure.
233
-
234
-
*avalon_streaming_uses_ready*
235
-
236
-
Provide an Avalon streaming interface as described in https://www.intel.com/content/www/us/en/docs/programmable/683091/22-3/introduction-to-the-interface-specifications.html[Intel® Avalon Interface Specifications].
237
-
238
-
This protocol allows the sink to backpressure by deasserting the ready signal asserted. The sink signifies that it is ready to consume data by asserting the ready signal.
239
-
240
281
*avalon_mm*
241
282
242
283
Provide an Avalon memory mapped interface as described in https://www.intel.com/content/www/us/en/docs/programmable/683091/22-3/introduction-to-the-interface-specifications.html[Intel® Avalon Interface Specifications].
243
284
244
-
With this protocol, an implicit ready signal is held high, and the sink cannot backpressure.
245
-
246
-
*avalon_mm_uses_ready*
247
-
248
-
Provide an Avalon memory mapped interface as described in https://www.intel.com/content/www/us/en/docs/programmable/683091/22-3/introduction-to-the-interface-specifications.html[Intel® Avalon Interface Specifications].
285
+
*axi_streaming*
249
286
250
-
With this protocol, an additional memory mapped location is created to hold the ready signal. You must set the `uses_valid` property to `true`.
287
+
Provide an AXI4-Stream interface as described in https://documentation-service.arm.com/static/642583d7314e245d086bc8c9[AMBA 4 AXI4-Stream Protocol Specification].
251
288
252
-
The default protocol is *avalon_streaming_uses_ready*
289
+
The default protocol is *avalon_streaming*
253
290
|====
254
291
--
255
292
@@ -262,6 +299,7 @@ The default protocol is *avalon_streaming_uses_ready*
262
299
|Rev|Date|Author|Changes
263
300
|1|2022-03-18|Peter Colberg|*Initial public working draft*
264
301
|2|2023-04-06|Robert Ho|Removal of unused properties, update protocols
0 commit comments