docs: page for AD3552R IP (#1323)
Signed-off-by: Jorge Marques <jorge.marques@analog.com> Signed-off-by: PopPaul2021 <paul.pop@analog.com>main
parent
6f4235a11b
commit
2cacad87bb
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 9.4 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 31 KiB |
|
@ -0,0 +1,194 @@
|
|||
.. _axi_ad3552r:
|
||||
|
||||
AXI AD3552R
|
||||
================================================================================
|
||||
|
||||
.. hdl-component-diagram::
|
||||
|
||||
The :git-hdl:`AXI AD3552R <library/axi_ad3552r>` IP core
|
||||
can be used to interface the :adi:`AD3552R`, a low drift, ultra-fast, 16-bit
|
||||
accuracy, current output digital-to-analog converter (DAC) that can be
|
||||
configured in multiple voltage span ranges.
|
||||
|
||||
Features
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
* AXI-based configuration
|
||||
* Vivado compatible
|
||||
* 8b register read/write SDR/DDR
|
||||
* 16b register read/write SDR/DDR
|
||||
* data stream SDR/DDR ( clk_in/8 or clk_in/4 update rate)
|
||||
* selectable input source: DMA/ADC/TEST_RAMP
|
||||
* data out clock(SCLK) has clk_in/8 frequency when the converter is configured and
|
||||
clk_in/2 when the converter is in stream mode
|
||||
* the IP reference clock (clk_in) can have a maximum frequency of 132MHz
|
||||
* the IP has multiple device synchronization capability when the DMA is set
|
||||
as an input data source
|
||||
|
||||
Files
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Name
|
||||
- Description
|
||||
* - :git-hdl:`library/axi_ad3552r/axi_ad3552r.v`
|
||||
- Verilog source for the AXI AD3552R.
|
||||
* - :git-hdl:`library/axi_ad3552r/axi_ad3552r_channel.v`
|
||||
- Verilog source for the AXI AD3552R channel.
|
||||
* - :git-hdl:`library/axi_ad3552r/axi_ad3552r_core.v`
|
||||
- Verilog source for the AXI AD3552R core.
|
||||
* - :git-hdl:`library/axi_ad3552r/axi_ad3552r_if.v`
|
||||
- Verilog source for the AD3552R interface module.
|
||||
* - :git-hdl:`library/axi_ad3552r/axi_ad3552r_if_tb.v`
|
||||
- Verilog source for the AD3552R interface module testbench.
|
||||
* - :git-hdl:`library/axi_ad3552r/axi_ad3552r_if_tb`
|
||||
- Setup script for the AD3552R interface module testbench.
|
||||
* - :git-hdl:`library/axi_ad3552r/axi_ad3552r_ip.tcl`
|
||||
- TCL script to generate the Vivado IP-integrator project.
|
||||
|
||||
Block Diagram
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
.. image:: block_diagram.svg
|
||||
:alt: AXI AD3552R block diagram
|
||||
|
||||
Configuration Parameters
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
.. hdl-parameters::
|
||||
|
||||
* - ID
|
||||
- Core ID should be unique for each IP in the system
|
||||
- 0
|
||||
* - FPGA_TECHNOLOGY
|
||||
- Encoded value describing the technology/generation of the FPGA device
|
||||
(Arria 10/7series)
|
||||
* - FPGA_FAMILY
|
||||
- Encoded value describing the family variant of the FPGA device(e.g., SX,
|
||||
GX, GT)
|
||||
* - SPEED_GRADE
|
||||
- Encoded value describing the FPGA's speed-grade
|
||||
* - DEV_PACKAGE
|
||||
- Encoded value describing the device package. The package might affect
|
||||
high-speed interfaces
|
||||
|
||||
Interface
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
.. hdl-interfaces::
|
||||
|
||||
* - dac_clk
|
||||
- Reference clock
|
||||
* - dma_data
|
||||
- Data from the DMAC when input source is set to DMA_DATA.
|
||||
* - valid_in_dma
|
||||
- Valid from the DMAC.
|
||||
* - dac_data_ready
|
||||
- Data ready signal for the DMAC.
|
||||
* - data_in_a
|
||||
- Data for channel 1 when input source is set to ADC_DATA.
|
||||
* - data_in_b
|
||||
- Data for channel 2 when input source is set to ADC_DATA.
|
||||
* - valid_in_a
|
||||
- Valid for channel 1.
|
||||
* - valid_in_b
|
||||
- Valid for channel 2.
|
||||
* - valid_in_dma_sec
|
||||
- Valid from a secondary DMAC if synchronization is needed.
|
||||
* - external_sync
|
||||
- External synchronization flag from another axi_ad3552r IP.
|
||||
* - sync_ext_device
|
||||
- Start_sync external device to another axi_ad3552r IP.
|
||||
* - dac_sclk
|
||||
- Serial clock.
|
||||
* - dac_csn
|
||||
- Serial chip select.
|
||||
* - sdio_o
|
||||
- Serial data out to the DAC.
|
||||
* - sdio_i
|
||||
- Serial data in from the DAC.
|
||||
* - sdio_t
|
||||
- I/O buffer control signal.
|
||||
* - s_axi
|
||||
- Standard AXI Slave Memory Map interface.
|
||||
|
||||
Detailed Architecture
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
.. image:: detailed_architecture.svg
|
||||
:alt: AXI AD3552R detailed architecture
|
||||
|
||||
Detailed Description
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
The top module instantiates:
|
||||
|
||||
* The axi_ad3552r interface module
|
||||
* The axi_ad3552r core module
|
||||
* The AXI handling interface
|
||||
|
||||
The axi_ad3552r_if has the state machine that controls the quad SPI interface.
|
||||
The axi_ad3552r_core module instantiates 2 axi_ad3552r channel modules.
|
||||
|
||||
Register Map
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
For the AXI_AD3552R control used registers from DAC Common are:
|
||||
|
||||
.. hdl-regmap::
|
||||
:name: AXI_AD3552R_DAC_COMMON
|
||||
|
||||
|
||||
For the AXI_AD3552R control used registers from DAC Channel are:
|
||||
|
||||
.. hdl-regmap::
|
||||
:name: AXI_AD3552R_DAC_CHANNEL
|
||||
|
||||
For reference, all the register map templates are:
|
||||
|
||||
.. hdl-regmap::
|
||||
:name: COMMON
|
||||
:no-type-info:
|
||||
|
||||
.. hdl-regmap::
|
||||
:name: DAC_COMMON
|
||||
:no-type-info:
|
||||
|
||||
.. hdl-regmap::
|
||||
:name: DAC_CHANNEL
|
||||
:no-type-info:
|
||||
|
||||
Design Guidelines
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
The control of the chip is done through the AXI_AD3552R IP.
|
||||
|
||||
The *DAC interface* must be connected to an IO buffer.
|
||||
|
||||
The example design uses a DMA to move the data from the memory to the CHIP quad
|
||||
SPI interface.
|
||||
|
||||
If the data needs to be processed in HDL before moving to DAC's output, it can be
|
||||
done at the input of the IP (at the system level) or inside the axi_ad3552r_if
|
||||
interface module (at the IP level).
|
||||
|
||||
The example design uses a processor to program all the registers. If no
|
||||
processor is available in your system, you can create your IP starting from the
|
||||
interface module.
|
||||
|
||||
Software Guidelines
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Linux is supported using
|
||||
:dokuwiki:`AD3552R Dual Channel, 16-Bit, 33 MUPS, Multispan, Multi-IO SPI DAC Linux device driver <resources/tools-software/linux-drivers/iio-dac/axi-ad3552r>`.
|
||||
|
||||
References
|
||||
--------------------------------------------------------------------------------
|
||||
* :adi:`AD3552R`
|
||||
* :git-hdl:`projects/ad3552r_evb`
|
||||
* :git-hdl:`library/axi_ad3552r`
|
||||
* :git-linux:`/`
|
||||
* :xilinx:`Zynq-7000 SoC Overview <support/documentation/data_sheets/ds190-Zynq-7000-Overview.pdf>`
|
||||
* :xilinx:`Zynq-7000 SoC Packaging and Pinout <support/documentation/user_guides/ug865-Zynq-7000-Pkg-Pinout.pdf>`
|
|
@ -0,0 +1,155 @@
|
|||
TITLE
|
||||
USING DAC_COMMON
|
||||
AXI AD3552R DAC Common (axi_ad3552r_dac_common)
|
||||
AXI_AD3552R_DAC_COMMON
|
||||
ENDTITLE
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
REG
|
||||
CNTRL_1
|
||||
ENDREG
|
||||
|
||||
FIELD
|
||||
EXT_SYNC_ARM
|
||||
ENDFIELD
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
REG
|
||||
CNTRL_2
|
||||
ENDREG
|
||||
|
||||
FIELD
|
||||
SDR_DDR_N
|
||||
SYMB_8_16B
|
||||
ENDFIELD
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
REG
|
||||
DAC_CUSTOM_WR
|
||||
ENDREG
|
||||
|
||||
FIELD
|
||||
[23:0] 0x00000000
|
||||
DATA_WRITE
|
||||
RW
|
||||
Configuration data for the AD3552R device registers. 8/16 LSB are used depending on the
|
||||
8b/16b configuration.
|
||||
ENDFIELD
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
REG
|
||||
UI_STATUS
|
||||
ENDREG
|
||||
|
||||
FIELD
|
||||
IF_BUSY
|
||||
ENDFIELD
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
REG
|
||||
DAC_CUSTOM_CTRL
|
||||
ENDREG
|
||||
|
||||
FIELD
|
||||
[31:24] 0x00000000
|
||||
ADDRESS
|
||||
RW
|
||||
Register address when the AD3552R is configured or stream start address when the
|
||||
FSM is in stream state.
|
||||
ENDFIELD
|
||||
|
||||
FIELD
|
||||
[1] 0x00000000
|
||||
STREAM
|
||||
RW
|
||||
Setting this bit will trigger a stream transfer based on the SDR/DDR
|
||||
configuration and address.
|
||||
ENDFIELD
|
||||
|
||||
FIELD
|
||||
[0] 0x00000000
|
||||
TRANSFER_DATA
|
||||
RW
|
||||
Setting this bit will trigger a single transfer based on the SDR/DDR,
|
||||
8b/16b configuration, address, and data_write.
|
||||
ENDFIELD
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
TITLE
|
||||
USING DAC_CHANNEL
|
||||
AXI AD3552R DAC Channel (axi_ad3552r_dac_channel)
|
||||
AXI_AD3552R_DAC_CHANNEL
|
||||
ENDTITLE
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
REG
|
||||
0x0100
|
||||
CHAN_CNTRL0_7
|
||||
DAC Channel Control & Status (channel - 0)
|
||||
ENDREG
|
||||
|
||||
FIELD
|
||||
[3:0] 0x00000000
|
||||
DAC_DDS_SEL
|
||||
RW
|
||||
Select internal data sources (available only if the DAC supports it).
|
||||
|
||||
* 0x00: internal tone (DDS)
|
||||
* 0x01: pattern (SED)
|
||||
* 0x02: input data (DMA)
|
||||
* 0x03: 0x00
|
||||
* 0x04: inverted pn7
|
||||
* 0x05: inverted pn15
|
||||
* 0x06: pn7 (standard O.150)
|
||||
* 0x07: pn15 (standard O.150)
|
||||
* 0x08: loopback data (ADC)
|
||||
* 0x09: pnX (Device specific e.g. ad9361)
|
||||
* 0x0A: Nibble ramp (Device specific e.g. adrv9001)
|
||||
* 0x0B: 16 bit ramp (Device specific e.g. adrv9001)
|
||||
ENDFIELD
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
||||
|
||||
REG
|
||||
0x0116
|
||||
CHAN_CNTRL1_7
|
||||
DAC Channel Control & Status (channel - 1)
|
||||
ENDREG
|
||||
|
||||
FIELD
|
||||
[3:0] 0x00000000
|
||||
DAC_DDS_SEL
|
||||
RW
|
||||
Select internal data sources (available only if the DAC supports it).
|
||||
|
||||
* 0x00: internal tone (DDS)
|
||||
* 0x01: pattern (SED)
|
||||
* 0x02: input data (DMA)
|
||||
* 0x03: 0x00
|
||||
* 0x04: inverted pn7
|
||||
* 0x05: inverted pn15
|
||||
* 0x06: pn7 (standard O.150)
|
||||
* 0x07: pn15 (standard O.150)
|
||||
* 0x08: loopback data (ADC)
|
||||
* 0x09: pnX (Device specific e.g. ad9361)
|
||||
* 0x0A: Nibble ramp (Device specific e.g. adrv9001)
|
||||
* 0x0B: 16 bit ramp (Device specific e.g. adrv9001)
|
||||
ENDFIELD
|
||||
|
||||
############################################################################################
|
||||
############################################################################################
|
Loading…
Reference in New Issue