Entity: data_offload

Diagram

ID [ 0:0] MEM_TYPE [33:0] MEM_SIZE MEMC_UIF_DATA_WIDTH MEMC_UIF_ADDRESS_WIDTH [31:0] MEMC_BADDRESS TX_OR_RXN_PATH SRC_DATA_WIDTH SRC_RAW_DATA_EN SRC_ADDR_WIDTH DST_ADDR_WIDTH DST_DATA_WIDTH DST_RAW_DATA_EN DST_CYCLIC_EN AUTO_BRINGUP s_axi_aclk s_axi_aresetn s_axi_awvalid [15:0] s_axi_awaddr [ 2:0] s_axi_awprot s_axi_wvalid [31:0] s_axi_wdata [ 3:0] s_axi_wstrb s_axi_bready s_axi_arvalid [15:0] s_axi_araddr [ 2:0] s_axi_arprot s_axi_rready s_axis_aclk s_axis_aresetn s_axis_valid [SRC_DATA_WIDTH-1:0] s_axis_data s_axis_last [SRC_DATA_WIDTH/8-1:0] s_axis_tkeep m_axis_aclk m_axis_aresetn m_axis_ready init_req sync_ext fifo_dst_ready [DST_DATA_WIDTH-1:0] fifo_dst_rdata ddr_calib_done s_axi_awready s_axi_wready s_axi_bvalid [ 1:0] s_axi_bresp s_axi_arready s_axi_rvalid [ 1:0] s_axi_rresp [31:0] s_axi_rdata s_axis_ready m_axis_valid [DST_DATA_WIDTH-1:0] m_axis_data m_axis_last [DST_DATA_WIDTH/8-1:0] m_axis_tkeep init_ack fifo_src_wen fifo_src_resetn [SRC_ADDR_WIDTH-1:0] fifo_src_waddr [SRC_DATA_WIDTH-1:0] fifo_src_wdata fifo_src_wlast fifo_dst_ren fifo_dst_resetn [DST_ADDR_WIDTH-1:0] fifo_dst_raddr

Description



Copyright 2018 (c) Analog Devices, Inc. All rights reserved.

In this HDL repository, there are many different and unique modules, consisting of various HDL (Verilog or VHDL) components. The individual modules are developed independently, and may be accompanied by separate and unique license terms.

The user should read each of these license terms, and understand the freedoms and responsibilities that he or she has by using this source/core.

This core is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Redistribution and use of source or resulting binaries, with or without modification of this file, are permitted under one of the following two license terms:

  1. The GNU General Public License version 2 as published by the Free Software Foundation, which can be found in the top level directory of this repository (LICENSE_GPL2), and also online at: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

OR

  1. An ADI specific BSD license, which can be found in the top level directory of this repository (LICENSE_ADIBSD), and also on-line at: https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD This will allow to generate bit files and not release the source code, as long as it attaches to an ADI device.


Generics

Generic name Type Value Description
ID 0
MEM_TYPE [ 0:0] 1'b0 1'b0 -FPGA RAM; 1'b1 - external memory
MEM_SIZE [33:0] 1024 memory size in bytes -1 - max 16 GB
MEMC_UIF_DATA_WIDTH 512
MEMC_UIF_ADDRESS_WIDTH 31
MEMC_BADDRESS [31:0] 32'h00000000
TX_OR_RXN_PATH 0 if set IP is used in TX path, other wise in RX path
SRC_DATA_WIDTH 64
SRC_RAW_DATA_EN 1'b0
SRC_ADDR_WIDTH 8
DST_ADDR_WIDTH 7
DST_DATA_WIDTH 128
DST_RAW_DATA_EN 1'b0 TBD
DST_CYCLIC_EN 1'b0 1'b1 - CYCLIC mode enabled; 1'b0 - CYCLIC mode disabled
AUTO_BRINGUP 1

Ports

Port name Direction Type Description
s_axi_aclk input AXI4 Slave for configuration
s_axi_aresetn input
s_axi_awvalid input
s_axi_awaddr input [15:0]
s_axi_awprot input [ 2:0]
s_axi_awready output
s_axi_wvalid input
s_axi_wdata input [31:0]
s_axi_wstrb input [ 3:0]
s_axi_wready output
s_axi_bvalid output
s_axi_bresp output [ 1:0]
s_axi_bready input
s_axi_arvalid input
s_axi_araddr input [15:0]
s_axi_arprot input [ 2:0]
s_axi_arready output
s_axi_rvalid output
s_axi_rready input
s_axi_rresp output [ 1:0]
s_axi_rdata output [31:0]
s_axis_aclk input AXI4 stream slave for source stream (TX_DMA or ADC) -- Source interface
s_axis_aresetn input
s_axis_ready output
s_axis_valid input
s_axis_data input [SRC_DATA_WIDTH-1:0]
s_axis_last input
s_axis_tkeep input [SRC_DATA_WIDTH/8-1:0]
m_axis_aclk input AXI4 stream master for destination stream (RX_DMA or DAC) -- Destination interface
m_axis_aresetn input
m_axis_ready input
m_axis_valid output
m_axis_data output [DST_DATA_WIDTH-1:0]
m_axis_last output
m_axis_tkeep output [DST_DATA_WIDTH/8-1:0]
init_req input initialization request interface
init_ack output
sync_ext input
fifo_src_wen output FIFO interface - Memory UI
fifo_src_resetn output
fifo_src_waddr output [SRC_ADDR_WIDTH-1:0]
fifo_src_wdata output [SRC_DATA_WIDTH-1:0]
fifo_src_wlast output
fifo_dst_ren output
fifo_dst_ready input
fifo_dst_resetn output
fifo_dst_raddr output [DST_ADDR_WIDTH-1:0]
fifo_dst_rdata input [DST_DATA_WIDTH-1:0]
ddr_calib_done input Status and monitor

Signals

Name Type Description
up_clk wire NOTE: Clock domain prefixes src_* - AXI4 Stream Slave interface's clock domain dst_* - AXI4 Stream Master interface's clock domain internal signals
up_rstn wire
up_wreq_s wire
up_waddr_s wire [13:0]
up_wdata_s wire [31:0]
up_rreq_s wire
up_raddr_s wire [13:0]
up_wack_s wire
up_rack_s wire
up_rdata_s wire [31:0]
src_clk wire
src_rstn wire
src_valid_out_s wire
src_wr_addr_s wire [SRC_ADDR_WIDTH-1:0]
src_wr_ready_s wire
src_wr_last_s wire
src_wr_tkeep_s wire [SRC_DATA_WIDTH/8-1:0]
dst_clk wire
dst_rstn wire
dst_raddr_s wire [DST_ADDR_WIDTH-1:0]
dst_mem_data_s wire [DST_DATA_WIDTH-1:0]
src_bypass_s wire
dst_bypass_s wire
oneshot_s wire
sample_count_s wire [63:0]
sync_config_s wire [ 1:0]
sync_int_s wire
valid_bypass_s wire
data_bypass_s wire [DST_DATA_WIDTH-1:0]
ready_bypass_s wire
src_fsm_status_s wire [ 1:0]
dst_fsm_status_s wire [ 1:0]
m_axis_valid_s wire
m_axis_last_s wire
m_axis_data_s wire [DST_DATA_WIDTH-1:0]
dst_mem_valid_s wire
dst_mem_valid_int_s wire
m_axis_reset_int_s wire
src_transfer_length_s wire [33:0]
src_wr_last_int_s wire
src_wr_last_beat_s wire [33:0]
int_not_full wire
src_data_counter reg [33:0] internal registers
dst_mem_valid_d reg

Constants

Name Type Value Description
SRC_ADDR_WIDTH_BYPASS 3 local parameters -- to make the code more readable
DST_ADDR_WIDTH_BYPASS 3 + $clog2(DST_DATA_WIDTH/SRC_DATA_WIDTH)
SRC_BEAT_BYTE $clog2(SRC_DATA_WIDTH/8)

Processes

Type: always

Description
Beat counter on the source interface * * The storage unit can have size of a couple of Gbyte, which in case of an RX * path would mean to fill up all that memory space before pushing over the * stream to the RX DMA. (ADC can not generate a tlast) To make things more * practical, user can set an arbitrary transfer length using the * transfer_length register, which will be used to generate an internal tlast * signal for the source FSM. If the register is set to zero, all the memory * will be filled up, before passing control to the destination FSM. * */

Instantiations

Description
Offload FSM and control

Description
Bypass module instance -- the same FIFO, just a smaller depth
NOTE: Generating an overflow is making sense just in BYPASS mode, and
it's supported just with the FIFO interface

Description
register map