@@ -87,6 +87,12 @@ foreach {suffix group} { \
87
87
{ " 0:Memory-Mapped AXI" " 1:Streaming AXI" " 2:FIFO Interface" }
88
88
set_parameter_property DMA_TYPE_$suffix GROUP $group
89
89
90
+ add_parameter DMA_AXI_PROTOCOL_$suffix INTEGER 0
91
+ set_parameter_property DMA_AXI_PROTOCOL_$suffix DISPLAY_NAME " AXI Protocol"
92
+ set_parameter_property DMA_AXI_PROTOCOL_$suffix HDL_PARAMETER true
93
+ set_parameter_property DMA_AXI_PROTOCOL_$suffix ALLOWED_RANGES { " 0:AXI4" " 1:AXI3" }
94
+ set_parameter_property DMA_AXI_PROTOCOL_$suffix GROUP $group
95
+
90
96
add_parameter DMA_DATA_WIDTH_$suffix INTEGER 64
91
97
set_parameter_property DMA_DATA_WIDTH_$suffix DISPLAY_NAME " Bus Width"
92
98
set_parameter_property DMA_DATA_WIDTH_$suffix UNITS Bits
@@ -234,6 +240,14 @@ proc axi_dmac_validate {} {
234
240
set_parameter_property ${p} _MANUAL VISIBLE [expr $auto_clk ? false : true]
235
241
set_parameter_property $p VISIBLE $auto_clk
236
242
}
243
+ foreach suffix {SRC DEST} {
244
+ if {[get_parameter_value DMA_TYPE_$suffix ] == 0} {
245
+ set show_axi_protocol true
246
+ } else {
247
+ set show_axi_protocol false
248
+ }
249
+ set_parameter_property DMA_AXI_PROTOCOL_$suffix VISIBLE $show_axi_protocol
250
+ }
237
251
}
238
252
239
253
# conditional interfaces
@@ -247,38 +261,6 @@ add_interface m_dest_axi_reset reset end
247
261
set_interface_property m_dest_axi_reset associatedClock m_dest_axi_clock
248
262
add_interface_port m_dest_axi_reset m_dest_axi_aresetn reset_n Input 1
249
263
250
- add_interface m_dest_axi axi4 start
251
- set_interface_property m_dest_axi associatedClock m_dest_axi_clock
252
- set_interface_property m_dest_axi associatedReset m_dest_axi_reset
253
- set_interface_property m_dest_axi readIssuingCapability 1
254
- add_interface_port m_dest_axi m_dest_axi_awvalid awvalid Output 1
255
- add_interface_port m_dest_axi m_dest_axi_awaddr awaddr Output 32
256
- add_interface_port m_dest_axi m_dest_axi_awready awready Input 1
257
- add_interface_port m_dest_axi m_dest_axi_wvalid wvalid Output 1
258
- add_interface_port m_dest_axi m_dest_axi_wdata wdata Output DMA_DATA_WIDTH_DEST
259
- add_interface_port m_dest_axi m_dest_axi_wstrb wstrb Output DMA_DATA_WIDTH_DEST/8
260
- add_interface_port m_dest_axi m_dest_axi_wready wready Input 1
261
- add_interface_port m_dest_axi m_dest_axi_bvalid bvalid Input 1
262
- add_interface_port m_dest_axi m_dest_axi_bresp bresp Input 2
263
- add_interface_port m_dest_axi m_dest_axi_bready bready Output 1
264
- add_interface_port m_dest_axi m_dest_axi_arvalid arvalid Output 1
265
- add_interface_port m_dest_axi m_dest_axi_araddr araddr Output 32
266
- add_interface_port m_dest_axi m_dest_axi_arready arready Input 1
267
- add_interface_port m_dest_axi m_dest_axi_rvalid rvalid Input 1
268
- add_interface_port m_dest_axi m_dest_axi_rresp rresp Input 2
269
- add_interface_port m_dest_axi m_dest_axi_rdata rdata Input DMA_DATA_WIDTH_DEST
270
- add_interface_port m_dest_axi m_dest_axi_rready rready Output 1
271
- add_interface_port m_dest_axi m_dest_axi_awlen awlen Output 8
272
- add_interface_port m_dest_axi m_dest_axi_awsize awsize Output 3
273
- add_interface_port m_dest_axi m_dest_axi_awburst awburst Output 2
274
- add_interface_port m_dest_axi m_dest_axi_awcache awcache Output 4
275
- add_interface_port m_dest_axi m_dest_axi_awprot awprot Output 3
276
- add_interface_port m_dest_axi m_dest_axi_wlast wlast Output 1
277
- add_interface_port m_dest_axi m_dest_axi_arlen arlen Output 8
278
- add_interface_port m_dest_axi m_dest_axi_arsize arsize Output 3
279
- add_interface_port m_dest_axi m_dest_axi_arburst arburst Output 2
280
- add_interface_port m_dest_axi m_dest_axi_arcache arcache Output 4
281
- add_interface_port m_dest_axi m_dest_axi_arprot arprot Output 3
282
264
283
265
add_interface m_src_axi_clock clock end
284
266
add_interface_port m_src_axi_clock m_src_axi_aclk clk Input 1
@@ -287,41 +269,6 @@ add_interface m_src_axi_reset reset end
287
269
set_interface_property m_src_axi_reset associatedClock m_src_axi_clock
288
270
add_interface_port m_src_axi_reset m_src_axi_aresetn reset_n Input 1
289
271
290
- add_interface m_src_axi axi4 start
291
- set_interface_property m_src_axi associatedClock m_src_axi_clock
292
- set_interface_property m_src_axi associatedReset m_src_axi_reset
293
- set_interface_property m_src_axi readIssuingCapability 1
294
- set_interface_property m_src_axi writeIssuingCapability 1
295
- set_interface_property m_src_axi combinedIssuingCapability 1
296
- add_interface_port m_src_axi m_src_axi_awvalid awvalid Output 1
297
- add_interface_port m_src_axi m_src_axi_awaddr awaddr Output 32
298
- add_interface_port m_src_axi m_src_axi_awready awready Input 1
299
- add_interface_port m_src_axi m_src_axi_wvalid wvalid Output 1
300
- add_interface_port m_src_axi m_src_axi_wdata wdata Output DMA_DATA_WIDTH_SRC
301
- add_interface_port m_src_axi m_src_axi_wstrb wstrb Output DMA_DATA_WIDTH_SRC/8
302
- add_interface_port m_src_axi m_src_axi_wready wready Input 1
303
- add_interface_port m_src_axi m_src_axi_bvalid bvalid Input 1
304
- add_interface_port m_src_axi m_src_axi_bresp bresp Input 2
305
- add_interface_port m_src_axi m_src_axi_bready bready Output 1
306
- add_interface_port m_src_axi m_src_axi_arvalid arvalid Output 1
307
- add_interface_port m_src_axi m_src_axi_araddr araddr Output 32
308
- add_interface_port m_src_axi m_src_axi_arready arready Input 1
309
- add_interface_port m_src_axi m_src_axi_rvalid rvalid Input 1
310
- add_interface_port m_src_axi m_src_axi_rresp rresp Input 2
311
- add_interface_port m_src_axi m_src_axi_rdata rdata Input DMA_DATA_WIDTH_SRC
312
- add_interface_port m_src_axi m_src_axi_rready rready Output 1
313
- add_interface_port m_src_axi m_src_axi_awlen awlen Output 8
314
- add_interface_port m_src_axi m_src_axi_awsize awsize Output 3
315
- add_interface_port m_src_axi m_src_axi_awburst awburst Output 2
316
- add_interface_port m_src_axi m_src_axi_awcache awcache Output 4
317
- add_interface_port m_src_axi m_src_axi_awprot awprot Output 3
318
- add_interface_port m_src_axi m_src_axi_wlast wlast Output 1
319
- add_interface_port m_src_axi m_src_axi_arlen arlen Output 8
320
- add_interface_port m_src_axi m_src_axi_arsize arsize Output 3
321
- add_interface_port m_src_axi m_src_axi_arburst arburst Output 2
322
- add_interface_port m_src_axi m_src_axi_arcache arcache Output 4
323
- add_interface_port m_src_axi m_src_axi_arprot arprot Output 3
324
-
325
272
# axis destination/source
326
273
327
274
ad_alt_intf clock m_axis_aclk input 1 clk
@@ -354,10 +301,75 @@ ad_alt_intf signal fifo_wr_overflow output 1 ovf
354
301
ad_alt_intf signal fifo_wr_sync input 1 sync
355
302
ad_alt_intf signal fifo_wr_xfer_req output 1 xfer_req
356
303
304
+ proc add_axi_master_interface {axi_type port suffix} {
305
+ add_interface $port $axi_type start
306
+ set_interface_property $port associatedClock ${port} _clock
307
+ set_interface_property $port associatedReset ${port} _reset
308
+ set_interface_property $port readIssuingCapability 1
309
+ add_interface_port $port ${port} _awvalid awvalid Output 1
310
+ add_interface_port $port ${port} _awaddr awaddr Output 32
311
+ add_interface_port $port ${port} _awready awready Input 1
312
+ add_interface_port $port ${port} _wvalid wvalid Output 1
313
+ add_interface_port $port ${port} _wdata wdata Output DMA_DATA_WIDTH_${suffix}
314
+ add_interface_port $port ${port} _wstrb wstrb Output DMA_DATA_WIDTH_${suffix} /8
315
+ add_interface_port $port ${port} _wready wready Input 1
316
+ add_interface_port $port ${port} _bvalid bvalid Input 1
317
+ add_interface_port $port ${port} _bresp bresp Input 2
318
+ add_interface_port $port ${port} _bready bready Output 1
319
+ add_interface_port $port ${port} _arvalid arvalid Output 1
320
+ add_interface_port $port ${port} _araddr araddr Output 32
321
+ add_interface_port $port ${port} _arready arready Input 1
322
+ add_interface_port $port ${port} _rvalid rvalid Input 1
323
+ add_interface_port $port ${port} _rresp rresp Input 2
324
+ add_interface_port $port ${port} _rdata rdata Input DMA_DATA_WIDTH_${suffix}
325
+ add_interface_port $port ${port} _rready rready Output 1
326
+ add_interface_port $port ${port} _awlen awlen Output " 8-(4*DMA_AXI_PROTOCOL_${suffix} )"
327
+ add_interface_port $port ${port} _awsize awsize Output 3
328
+ add_interface_port $port ${port} _awburst awburst Output 2
329
+ add_interface_port $port ${port} _awcache awcache Output 4
330
+ add_interface_port $port ${port} _awprot awprot Output 3
331
+ add_interface_port $port ${port} _wlast wlast Output 1
332
+ add_interface_port $port ${port} _arlen arlen Output " 8-(4*DMA_AXI_PROTOCOL_${suffix} )"
333
+ add_interface_port $port ${port} _arsize arsize Output 3
334
+ add_interface_port $port ${port} _arburst arburst Output 2
335
+ add_interface_port $port ${port} _arcache arcache Output 4
336
+ add_interface_port $port ${port} _arprot arprot Output 3
337
+ # Some signals are mandatory in Altera's implementation of AXI3
338
+ # awid, awlock, wid, bid, arid, arlock, rid, rlast
339
+ # Hide them in AXI4
340
+ add_interface_port $port ${port} _awid awid Output 4
341
+ add_interface_port $port ${port} _awlock awlock Output " 1+DMA_AXI_PROTOCOL_${suffix} "
342
+ add_interface_port $port ${port} _wid wid Output 4
343
+ add_interface_port $port ${port} _arid arid Output 4
344
+ add_interface_port $port ${port} _arlock arlock Output " 1+DMA_AXI_PROTOCOL_${suffix} "
345
+ add_interface_port $port ${port} _rid rid Input 4
346
+ add_interface_port $port ${port} _bid bid Input 4
347
+ add_interface_port $port ${port} _rlast rlast Input 1
348
+ if {$axi_type == " axi4" } {
349
+ set_port_property ${port} _awid TERMINATION true
350
+ set_port_property ${port} _awlock TERMINATION true
351
+ set_port_property ${port} _wid TERMINATION true
352
+ set_port_property ${port} _arid TERMINATION true
353
+ set_port_property ${port} _arlock TERMINATION true
354
+ set_port_property ${port} _rid TERMINATION true
355
+ set_port_property ${port} _bid TERMINATION true
356
+ set_port_property ${port} _rlast TERMINATION true
357
+ }
358
+ }
357
359
proc axi_dmac_elaborate {} {
358
360
set fifo_size [get_parameter_value FIFO_SIZE]
359
361
set disabled_intfs {}
360
362
363
+ # add axi3 or axi4 interface depending on user selection
364
+ foreach {suffix port} {SRC m_src_axi DEST m_dest_axi} {
365
+ if {[get_parameter_value DMA_AXI_PROTOCOL_${suffix} ] == 0} {
366
+ set axi_type axi4
367
+ } else {
368
+ set axi_type axi
369
+ }
370
+ add_axi_master_interface $axi_type $port $suffix
371
+ }
372
+
361
373
# axi4 destination/source
362
374
363
375
if {[get_parameter_value DMA_TYPE_DEST] == 0} {
0 commit comments