2023-07-06 12:08:22 +00:00
|
|
|
###############################################################################
|
|
|
|
## Copyright (C) 2015-2023 Analog Devices, Inc. All rights reserved.
|
|
|
|
### SPDX short identifier: ADIBSD
|
|
|
|
###############################################################################
|
2015-09-18 07:48:26 +00:00
|
|
|
|
|
|
|
proc init {cellpath otherInfo} {
|
2015-09-18 10:46:36 +00:00
|
|
|
set ip [get_bd_cells $cellpath]
|
|
|
|
|
|
|
|
bd::mark_propagate_override $ip \
|
axi_dmac: Add support for DMA Scatter-Gather
This commit introduces a different interface to submit transfers, using
DMA descriptors.
The structure of the DMA descriptor is as follows:
struct dma_desc {
u32 flags,
u32 id,
u64 dest_addr,
u64 src_addr,
u64 next_sg_addr,
u32 y_len,
u32 x_len,
u32 src_stride,
u32 dst_stride,
};
The 'flags' field currently offers two control bits:
- bit 0: if set, the transfer will complete after this last descriptor
is processed, and the DMA core will go back to idle state; if cleared,
the next DMA descriptor pointed to by 'next_sg_addr' will be loaded.
- bit 1: if set, an end-of-transfer interrupt will be raised after the
memory segment pointed to by this descriptor has been transferred.
The 'id' field corresponds to an identifier of the descriptor.
The 'dest_addr' and 'src_addr' contain the destination and source
addresses to use for the transfer, respectively.
The 'x_len' field contains the number of bytes to transfer,
minus one.
The 'y_len', 'src_stride' and 'dst_stride' fields are only useful for
2D transfers, and should be set to zero if 2D transfers are not
required.
To start a transfer, the address of the first DMA descriptor must be
written to register 0x47c and the HWDESC bit of CONTROL register must
be set. The Scatter-Gather transfer is queued similarly to the simple
transfers, by writing 1 in TRANSFER_SUBMIT.
The Scatter-Gather interface has a dedicated AXI-MM bus configured for
read transfers, with its own dedicated clock, which can be asynchronous.
The Scatter-Gather reset is generated by the reset manager to reset the
logic after completing any pending transactions on the bus.
When the Scatter-Gather is enabled during runtime, the legacy cyclic
functionality of the DMA is disabled.
Signed-off-by: Ionut Podgoreanu <ionut.podgoreanu@analog.com>
2023-08-10 10:10:24 +00:00
|
|
|
"ASYNC_CLK_REQ_SRC ASYNC_CLK_SRC_DEST ASYNC_CLK_DEST_REQ ASYNC_CLK_REQ_SG ASYNC_CLK_SRC_SG ASYNC_CLK_DEST_SG"
|
2015-09-18 10:46:36 +00:00
|
|
|
|
2022-09-14 11:28:34 +00:00
|
|
|
bd::mark_propagate_override $ip \
|
2017-04-06 07:30:22 +00:00
|
|
|
"DMA_AXI_ADDR_WIDTH"
|
|
|
|
|
2015-09-18 10:46:36 +00:00
|
|
|
# On ZYNQ the core is most likely connected to the AXI3 HP ports so use AXI3
|
|
|
|
# as the default.
|
|
|
|
set family [string tolower [get_property FAMILY [get_property PART [current_project]]]]
|
|
|
|
if {$family == "zynq"} {
|
|
|
|
set axi_protocol 1
|
|
|
|
} else {
|
|
|
|
set axi_protocol 0
|
|
|
|
}
|
|
|
|
|
2015-09-21 13:53:54 +00:00
|
|
|
foreach dir {SRC DEST} {
|
axi_dmac: Add support for DMA Scatter-Gather
This commit introduces a different interface to submit transfers, using
DMA descriptors.
The structure of the DMA descriptor is as follows:
struct dma_desc {
u32 flags,
u32 id,
u64 dest_addr,
u64 src_addr,
u64 next_sg_addr,
u32 y_len,
u32 x_len,
u32 src_stride,
u32 dst_stride,
};
The 'flags' field currently offers two control bits:
- bit 0: if set, the transfer will complete after this last descriptor
is processed, and the DMA core will go back to idle state; if cleared,
the next DMA descriptor pointed to by 'next_sg_addr' will be loaded.
- bit 1: if set, an end-of-transfer interrupt will be raised after the
memory segment pointed to by this descriptor has been transferred.
The 'id' field corresponds to an identifier of the descriptor.
The 'dest_addr' and 'src_addr' contain the destination and source
addresses to use for the transfer, respectively.
The 'x_len' field contains the number of bytes to transfer,
minus one.
The 'y_len', 'src_stride' and 'dst_stride' fields are only useful for
2D transfers, and should be set to zero if 2D transfers are not
required.
To start a transfer, the address of the first DMA descriptor must be
written to register 0x47c and the HWDESC bit of CONTROL register must
be set. The Scatter-Gather transfer is queued similarly to the simple
transfers, by writing 1 in TRANSFER_SUBMIT.
The Scatter-Gather interface has a dedicated AXI-MM bus configured for
read transfers, with its own dedicated clock, which can be asynchronous.
The Scatter-Gather reset is generated by the reset manager to reset the
logic after completing any pending transactions on the bus.
When the Scatter-Gather is enabled during runtime, the legacy cyclic
functionality of the DMA is disabled.
Signed-off-by: Ionut Podgoreanu <ionut.podgoreanu@analog.com>
2023-08-10 10:10:24 +00:00
|
|
|
# Change the protocol by first enabling the parameter - setting the type to AXI MM
|
2015-09-21 13:53:54 +00:00
|
|
|
set old [get_property "CONFIG.DMA_TYPE_${dir}" $ip]
|
|
|
|
set_property "CONFIG.DMA_TYPE_${dir}" "0" $ip
|
|
|
|
set_property "CONFIG.DMA_AXI_PROTOCOL_${dir}" $axi_protocol $ip
|
|
|
|
set_property "CONFIG.DMA_TYPE_${dir}" $old $ip
|
|
|
|
}
|
2018-06-08 09:43:43 +00:00
|
|
|
|
axi_dmac: Add support for DMA Scatter-Gather
This commit introduces a different interface to submit transfers, using
DMA descriptors.
The structure of the DMA descriptor is as follows:
struct dma_desc {
u32 flags,
u32 id,
u64 dest_addr,
u64 src_addr,
u64 next_sg_addr,
u32 y_len,
u32 x_len,
u32 src_stride,
u32 dst_stride,
};
The 'flags' field currently offers two control bits:
- bit 0: if set, the transfer will complete after this last descriptor
is processed, and the DMA core will go back to idle state; if cleared,
the next DMA descriptor pointed to by 'next_sg_addr' will be loaded.
- bit 1: if set, an end-of-transfer interrupt will be raised after the
memory segment pointed to by this descriptor has been transferred.
The 'id' field corresponds to an identifier of the descriptor.
The 'dest_addr' and 'src_addr' contain the destination and source
addresses to use for the transfer, respectively.
The 'x_len' field contains the number of bytes to transfer,
minus one.
The 'y_len', 'src_stride' and 'dst_stride' fields are only useful for
2D transfers, and should be set to zero if 2D transfers are not
required.
To start a transfer, the address of the first DMA descriptor must be
written to register 0x47c and the HWDESC bit of CONTROL register must
be set. The Scatter-Gather transfer is queued similarly to the simple
transfers, by writing 1 in TRANSFER_SUBMIT.
The Scatter-Gather interface has a dedicated AXI-MM bus configured for
read transfers, with its own dedicated clock, which can be asynchronous.
The Scatter-Gather reset is generated by the reset manager to reset the
logic after completing any pending transactions on the bus.
When the Scatter-Gather is enabled during runtime, the legacy cyclic
functionality of the DMA is disabled.
Signed-off-by: Ionut Podgoreanu <ionut.podgoreanu@analog.com>
2023-08-10 10:10:24 +00:00
|
|
|
# Change the protocol by first enabling the parameter - enabling the SG transfers
|
|
|
|
set old [get_property "CONFIG.DMA_SG_TRANSFER" $ip]
|
|
|
|
set_property "CONFIG.DMA_SG_TRANSFER" "true" $ip
|
|
|
|
set_property "CONFIG.DMA_AXI_PROTOCOL_SG" $axi_protocol $ip
|
|
|
|
set_property "CONFIG.DMA_SG_TRANSFER" $old $ip
|
|
|
|
|
2018-06-08 09:43:43 +00:00
|
|
|
# Versions earlier than 2017.3 infer sub-optimal asymmetric memory
|
|
|
|
# See https://www.xilinx.com/support/answers/69179.html
|
2020-04-02 07:30:36 +00:00
|
|
|
regexp {^[0-9]+\.[0-9]+} [version -short] short_version
|
|
|
|
if {[expr $short_version > 2017.2]} {
|
2018-06-08 09:43:43 +00:00
|
|
|
set_property "CONFIG.ALLOW_ASYM_MEM" 1 $ip
|
|
|
|
}
|
2015-09-18 07:48:26 +00:00
|
|
|
}
|
|
|
|
|
2015-09-18 09:46:44 +00:00
|
|
|
proc post_config_ip {cellpath otherinfo} {
|
|
|
|
set ip [get_bd_cells $cellpath]
|
|
|
|
|
|
|
|
# Update AXI interface properties according to configuration
|
|
|
|
set max_bytes_per_burst [get_property "CONFIG.MAX_BYTES_PER_BURST" $ip]
|
|
|
|
set fifo_size [get_property "CONFIG.FIFO_SIZE" $ip]
|
|
|
|
|
|
|
|
foreach dir {"SRC" "DEST"} {
|
|
|
|
set type [get_property "CONFIG.DMA_TYPE_$dir" $ip]
|
|
|
|
if {$type != 0} {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2018-04-23 14:49:07 +00:00
|
|
|
set axi_protocol [get_property "CONFIG.DMA_AXI_PROTOCOL_$dir" $ip]
|
2015-09-18 09:46:44 +00:00
|
|
|
set data_width [get_property "CONFIG.DMA_DATA_WIDTH_$dir" $ip]
|
|
|
|
set max_beats_per_burst [expr {int(ceil($max_bytes_per_burst * 8.0 / $data_width))}]
|
|
|
|
|
2018-04-23 14:49:07 +00:00
|
|
|
if {$axi_protocol == 0} {
|
|
|
|
set axi_protocol_str "AXI4"
|
|
|
|
if {$max_beats_per_burst > 256} {
|
|
|
|
set max_beats_per_burst 256
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
set axi_protocol_str "AXI3"
|
|
|
|
if {$max_beats_per_burst > 16} {
|
|
|
|
set max_beats_per_burst 16
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-09-18 09:46:44 +00:00
|
|
|
set intf [get_bd_intf_pins [format "%s/m_%s_axi" $cellpath [string tolower $dir]]]
|
2018-04-23 14:49:07 +00:00
|
|
|
set_property CONFIG.PROTOCOL $axi_protocol_str $intf
|
2015-09-18 09:46:44 +00:00
|
|
|
set_property CONFIG.MAX_BURST_LENGTH $max_beats_per_burst $intf
|
|
|
|
|
|
|
|
# The core issues as many requests as the amount of data the FIFO can hold
|
|
|
|
if {$dir == "SRC"} {
|
|
|
|
set_property CONFIG.NUM_WRITE_OUTSTANDING 0 $intf
|
|
|
|
set_property CONFIG.NUM_READ_OUTSTANDING $fifo_size $intf
|
|
|
|
} else {
|
|
|
|
set_property CONFIG.NUM_WRITE_OUTSTANDING $fifo_size $intf
|
|
|
|
set_property CONFIG.NUM_READ_OUTSTANDING 0 $intf
|
|
|
|
}
|
|
|
|
}
|
axi_dmac: Add support for DMA Scatter-Gather
This commit introduces a different interface to submit transfers, using
DMA descriptors.
The structure of the DMA descriptor is as follows:
struct dma_desc {
u32 flags,
u32 id,
u64 dest_addr,
u64 src_addr,
u64 next_sg_addr,
u32 y_len,
u32 x_len,
u32 src_stride,
u32 dst_stride,
};
The 'flags' field currently offers two control bits:
- bit 0: if set, the transfer will complete after this last descriptor
is processed, and the DMA core will go back to idle state; if cleared,
the next DMA descriptor pointed to by 'next_sg_addr' will be loaded.
- bit 1: if set, an end-of-transfer interrupt will be raised after the
memory segment pointed to by this descriptor has been transferred.
The 'id' field corresponds to an identifier of the descriptor.
The 'dest_addr' and 'src_addr' contain the destination and source
addresses to use for the transfer, respectively.
The 'x_len' field contains the number of bytes to transfer,
minus one.
The 'y_len', 'src_stride' and 'dst_stride' fields are only useful for
2D transfers, and should be set to zero if 2D transfers are not
required.
To start a transfer, the address of the first DMA descriptor must be
written to register 0x47c and the HWDESC bit of CONTROL register must
be set. The Scatter-Gather transfer is queued similarly to the simple
transfers, by writing 1 in TRANSFER_SUBMIT.
The Scatter-Gather interface has a dedicated AXI-MM bus configured for
read transfers, with its own dedicated clock, which can be asynchronous.
The Scatter-Gather reset is generated by the reset manager to reset the
logic after completing any pending transactions on the bus.
When the Scatter-Gather is enabled during runtime, the legacy cyclic
functionality of the DMA is disabled.
Signed-off-by: Ionut Podgoreanu <ionut.podgoreanu@analog.com>
2023-08-10 10:10:24 +00:00
|
|
|
|
|
|
|
# SG interface configuration
|
|
|
|
set sg_enabled [get_property CONFIG.DMA_SG_TRANSFER $ip]
|
|
|
|
if {$sg_enabled == "true"} {
|
|
|
|
set axi_protocol [get_property "CONFIG.DMA_AXI_PROTOCOL_SG" $ip]
|
|
|
|
|
|
|
|
if {$axi_protocol == 0} {
|
|
|
|
set axi_protocol_str "AXI4"
|
|
|
|
set max_beats_per_burst 256
|
|
|
|
} else {
|
|
|
|
set axi_protocol_str "AXI3"
|
|
|
|
set max_beats_per_burst 16
|
|
|
|
}
|
|
|
|
|
|
|
|
set intf [get_bd_intf_pins [format "%s/m_sg_axi" $cellpath]]
|
|
|
|
set_property CONFIG.PROTOCOL $axi_protocol_str $intf
|
|
|
|
set_property CONFIG.MAX_BURST_LENGTH $max_beats_per_burst $intf
|
|
|
|
|
|
|
|
set_property CONFIG.NUM_WRITE_OUTSTANDING 0 $intf
|
|
|
|
set_property CONFIG.NUM_READ_OUTSTANDING 0 $intf
|
|
|
|
}
|
2015-09-18 09:46:44 +00:00
|
|
|
}
|
|
|
|
|
2015-09-18 07:48:26 +00:00
|
|
|
proc axi_dmac_detect_async_clk { cellpath ip param_name clk_a clk_b } {
|
|
|
|
set param_src [get_property "CONFIG.$param_name.VALUE_SRC" $ip]
|
|
|
|
if {[string equal $param_src "USER"]} {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
set clk_domain_a [get_property CONFIG.CLK_DOMAIN $clk_a]
|
|
|
|
set clk_domain_b [get_property CONFIG.CLK_DOMAIN $clk_b]
|
|
|
|
set clk_freq_a [get_property CONFIG.FREQ_HZ $clk_a]
|
|
|
|
set clk_freq_b [get_property CONFIG.FREQ_HZ $clk_b]
|
|
|
|
set clk_phase_a [get_property CONFIG.PHASE $clk_a]
|
|
|
|
set clk_phase_b [get_property CONFIG.PHASE $clk_b]
|
|
|
|
|
|
|
|
# Only mark it as sync if we can make sure that it is sync, if the
|
|
|
|
# relationship of the clocks is unknown mark it as async
|
|
|
|
if {$clk_domain_a != {} && $clk_domain_b != {} && \
|
|
|
|
$clk_domain_a == $clk_domain_b && $clk_freq_a == $clk_freq_b && \
|
|
|
|
$clk_phase_a == $clk_phase_b} {
|
|
|
|
set clk_async 0
|
|
|
|
} else {
|
|
|
|
set clk_async 1
|
|
|
|
}
|
|
|
|
|
|
|
|
set_property "CONFIG.$param_name" $clk_async $ip
|
|
|
|
|
|
|
|
# if {$clk_async == 0} {
|
|
|
|
# bd::send_msg -of $cellpath -type INFO -msg_id 1 -text "$clk_a and $clk_b are synchronous"
|
|
|
|
# } else {
|
|
|
|
# bd::send_msg -of $cellpath -type INFO -msg_id 1 -text "$clk_a and $clk_b are asynchronous"
|
|
|
|
# }
|
|
|
|
}
|
|
|
|
|
|
|
|
proc propagate {cellpath otherinfo} {
|
|
|
|
set ip [get_bd_cells $cellpath]
|
|
|
|
set src_type [get_property CONFIG.DMA_TYPE_SRC $ip]
|
|
|
|
set dest_type [get_property CONFIG.DMA_TYPE_DEST $ip]
|
axi_dmac: Add support for DMA Scatter-Gather
This commit introduces a different interface to submit transfers, using
DMA descriptors.
The structure of the DMA descriptor is as follows:
struct dma_desc {
u32 flags,
u32 id,
u64 dest_addr,
u64 src_addr,
u64 next_sg_addr,
u32 y_len,
u32 x_len,
u32 src_stride,
u32 dst_stride,
};
The 'flags' field currently offers two control bits:
- bit 0: if set, the transfer will complete after this last descriptor
is processed, and the DMA core will go back to idle state; if cleared,
the next DMA descriptor pointed to by 'next_sg_addr' will be loaded.
- bit 1: if set, an end-of-transfer interrupt will be raised after the
memory segment pointed to by this descriptor has been transferred.
The 'id' field corresponds to an identifier of the descriptor.
The 'dest_addr' and 'src_addr' contain the destination and source
addresses to use for the transfer, respectively.
The 'x_len' field contains the number of bytes to transfer,
minus one.
The 'y_len', 'src_stride' and 'dst_stride' fields are only useful for
2D transfers, and should be set to zero if 2D transfers are not
required.
To start a transfer, the address of the first DMA descriptor must be
written to register 0x47c and the HWDESC bit of CONTROL register must
be set. The Scatter-Gather transfer is queued similarly to the simple
transfers, by writing 1 in TRANSFER_SUBMIT.
The Scatter-Gather interface has a dedicated AXI-MM bus configured for
read transfers, with its own dedicated clock, which can be asynchronous.
The Scatter-Gather reset is generated by the reset manager to reset the
logic after completing any pending transactions on the bus.
When the Scatter-Gather is enabled during runtime, the legacy cyclic
functionality of the DMA is disabled.
Signed-off-by: Ionut Podgoreanu <ionut.podgoreanu@analog.com>
2023-08-10 10:10:24 +00:00
|
|
|
set sg_enabled [get_property CONFIG.DMA_SG_TRANSFER $ip]
|
2015-09-18 07:48:26 +00:00
|
|
|
|
|
|
|
set req_clk [get_bd_pins "$ip/s_axi_aclk"]
|
|
|
|
|
|
|
|
if {$src_type == 2} {
|
|
|
|
set src_clk [get_bd_pins "$ip/fifo_wr_clk"]
|
|
|
|
} elseif {$src_type == 1} {
|
|
|
|
set src_clk [get_bd_pins "$ip/s_axis_aclk"]
|
|
|
|
} else {
|
|
|
|
set src_clk [get_bd_pins "$ip/m_src_axi_aclk"]
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$dest_type == 2} {
|
|
|
|
set dest_clk [get_bd_pins "$ip/fifo_rd_clk"]
|
2015-09-23 12:51:50 +00:00
|
|
|
} elseif {$dest_type == 1} {
|
2015-09-18 07:48:26 +00:00
|
|
|
set dest_clk [get_bd_pins "$ip/m_axis_aclk"]
|
|
|
|
} else {
|
|
|
|
set dest_clk [get_bd_pins "$ip/m_dest_axi_aclk"]
|
|
|
|
}
|
|
|
|
|
|
|
|
axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_REQ_SRC" $req_clk $src_clk
|
|
|
|
axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_SRC_DEST" $src_clk $dest_clk
|
|
|
|
axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_DEST_REQ" $dest_clk $req_clk
|
axi_dmac: Add support for DMA Scatter-Gather
This commit introduces a different interface to submit transfers, using
DMA descriptors.
The structure of the DMA descriptor is as follows:
struct dma_desc {
u32 flags,
u32 id,
u64 dest_addr,
u64 src_addr,
u64 next_sg_addr,
u32 y_len,
u32 x_len,
u32 src_stride,
u32 dst_stride,
};
The 'flags' field currently offers two control bits:
- bit 0: if set, the transfer will complete after this last descriptor
is processed, and the DMA core will go back to idle state; if cleared,
the next DMA descriptor pointed to by 'next_sg_addr' will be loaded.
- bit 1: if set, an end-of-transfer interrupt will be raised after the
memory segment pointed to by this descriptor has been transferred.
The 'id' field corresponds to an identifier of the descriptor.
The 'dest_addr' and 'src_addr' contain the destination and source
addresses to use for the transfer, respectively.
The 'x_len' field contains the number of bytes to transfer,
minus one.
The 'y_len', 'src_stride' and 'dst_stride' fields are only useful for
2D transfers, and should be set to zero if 2D transfers are not
required.
To start a transfer, the address of the first DMA descriptor must be
written to register 0x47c and the HWDESC bit of CONTROL register must
be set. The Scatter-Gather transfer is queued similarly to the simple
transfers, by writing 1 in TRANSFER_SUBMIT.
The Scatter-Gather interface has a dedicated AXI-MM bus configured for
read transfers, with its own dedicated clock, which can be asynchronous.
The Scatter-Gather reset is generated by the reset manager to reset the
logic after completing any pending transactions on the bus.
When the Scatter-Gather is enabled during runtime, the legacy cyclic
functionality of the DMA is disabled.
Signed-off-by: Ionut Podgoreanu <ionut.podgoreanu@analog.com>
2023-08-10 10:10:24 +00:00
|
|
|
|
|
|
|
if {$sg_enabled == "true"} {
|
|
|
|
set sg_clk [get_bd_pins "$ip/m_sg_axi_aclk"]
|
|
|
|
axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_REQ_SG" $req_clk $sg_clk
|
|
|
|
axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_SRC_SG" $src_clk $sg_clk
|
|
|
|
axi_dmac_detect_async_clk $cellpath $ip "ASYNC_CLK_DEST_SG" $dest_clk $sg_clk
|
|
|
|
}
|
2015-09-18 07:48:26 +00:00
|
|
|
}
|
2017-04-06 07:30:22 +00:00
|
|
|
|
|
|
|
proc post_propagate {cellpath otherinfo} {
|
|
|
|
set ip [get_bd_cells $cellpath]
|
|
|
|
|
|
|
|
set addr_width 16
|
|
|
|
|
|
|
|
foreach dir {"SRC" "DEST"} {
|
|
|
|
set type [get_property "CONFIG.DMA_TYPE_$dir" $ip]
|
|
|
|
if {$type != 0} {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
set intf [get_bd_intf_pins [format "%s/m_%s_axi" $cellpath [string tolower $dir]]]
|
2017-04-19 11:05:44 +00:00
|
|
|
set addr_segs [get_bd_addr_segs -of_objects [get_bd_addr_spaces $intf]]
|
|
|
|
|
|
|
|
if {$addr_segs != {}} {
|
|
|
|
foreach addr_seg $addr_segs {
|
|
|
|
set range [get_property "range" $addr_seg]
|
|
|
|
set offset [get_property "offset" $addr_seg]
|
2018-07-20 06:44:04 +00:00
|
|
|
set addr_width [expr max(int(ceil(log($range - 1 + $offset) / log(2))), $addr_width)]
|
2017-04-19 11:05:44 +00:00
|
|
|
}
|
2017-04-06 07:30:22 +00:00
|
|
|
} else {
|
|
|
|
set addr_width 32
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
set_property "CONFIG.DMA_AXI_ADDR_WIDTH" $addr_width $ip
|
|
|
|
}
|