ads62p48 HDL Worker

Device worker for the ADS62P48 Dual-Channel, 14-Bit, 210-MSPS ADC.

Detail

Registers

The raw properties corresponding to the ADS62P48 registers are directly connected to the rawprops interface. This is required to be connected to a separate SPI worker that converts reads and writes to the raw properties to SPI transfers to the device.

Data capture

The ADS62P48 transfers captured samples to the worker over a 14-bit parallel LVDS bus with a source synchronous clock. The data is transmitted as centre aligned double data rate (DDR). This is illustrated by the following diagram from the datasheet:

../../../_images/centre-aligned-ddr.png

The circuit used to capture the data is shown below:

../../../_images/ads62p48_capture_logic.svg

For each data lane an IDDR element is used to capture the bits on each edge of the DCLK. In order to correctly sample the signal clock-to-data delay calibration is required (see Calibration); to support this the delay value of the IDELAY elements can be configured via the idelay_value property and a pattern checker is implemented to detect correct data reception.

The Q data channel is inverted. This is to compensate for an inversion data inversion in the PCB layout.

The data is transferred from the source synchronous clock domain to the radclk clock domain, which is created by a MMCM in the LMK04816 worker. This clock domain crossing can be done via a simple synchronizer as these two clock domains are synchronous.

The data is output over a devsignals interface using the qadc-16-signals protocol. This is intended to interface to a data_src_qadc_csts device worker. The data is output on the radclk clock domain. The valid signal on this interface is controlled via the enable property which allows the DRC to enable the data stream when the full RF path has been configured.

Calibration

To calibrate the clock-to-data delay the DRC should use the following process:

  1. Configure the ADC to output the ramp test pattern

  2. Sweep the delay from 0 to 31 by writing to the idelay_value property

  3. For each delay value, poll the pattern_check property until it reaches the locked (value of 2) or failed (value of 3) states.

  4. Determine the largest span of delay values that resulted in the pattern checker reaching the lock state

  5. Set the delay to the value in the centre of this span

  6. Return the ADC to normal operation

Worker Properties

  • idelay_value

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • pattern_check

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • enable

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x00

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x01_to_0x1f

    • Type: uchar

      • Array dimensions: ['31']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x20

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x21_to_0x3e

    • Type: uchar

      • Array dimensions: ['30']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x3f

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • reg_0x40

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • reg_0x41

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x42_to_0x43

    • Type: uchar

      • Array dimensions: ['2']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x44

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x45_to_0x4f

    • Type: uchar

      • Array dimensions: ['11']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x50

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • reg_0x51

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • reg_0x52

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • reg_0x53

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x54_to_0x54

    • Type: uchar

      • Array dimensions: ['1']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x55

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x56_to_0x56

    • Type: uchar

      • Array dimensions: ['1']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x57

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x58_to_0x61

    • Type: uchar

      • Array dimensions: ['10']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x62

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • reg_0x63

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x64_to_0x65

    • Type: uchar

      • Array dimensions: ['2']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x66

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x67_to_0x67

    • Type: uchar

      • Array dimensions: ['1']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x68

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x69_to_0x69

    • Type: uchar

      • Array dimensions: ['1']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x6a

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • ocpi_pad_0x6b_to_0x74

    • Type: uchar

      • Array dimensions: ['10']

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: False

      • Volatile: False

      • Read back: False

    • Default value: None

  • reg_0x75

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

  • reg_0x76

    • Type: uchar

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: True

      • Read back: False

    • Default value: None

Worker Ports

    Interfaces (other than data I/O ports):

  • dev

    • Type: devsignal

  • rfclk

    • Type: devsignal

  • rawprops

    • Type: rawprop

  • Subdevice Connections:

    • Supported device worker: data_src_qadc_csts


      Connections:


      • Subdevice port: dev

      • Supported worker port: dev

        • Index: None


Worker Signals

  • clk

    • Direction: in

    • Differential: false

    • Pin: false

  • data_i

    • Direction: in

    • Width: 16

    • Differential: false

    • Pin: false

  • data_q

    • Direction: in

    • Width: 16

    • Differential: false

    • Pin: false

  • valid

    • Direction: in

    • Differential: false

    • Pin: false

  • present

    • Direction: out

    • Differential: false

    • Pin: false

  • radclk

    • Direction: in

    • Differential: false

    • Pin: false

  • radclk2x

    • Direction: in

    • Differential: false

    • Pin: false

  • dciclk

    • Direction: in

    • Differential: false

    • Pin: false

  • DCLK_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DCLK_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DA0_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DA0_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DB0_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DB0_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DA1_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DA1_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DB1_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DB1_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DA2_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DA2_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DB2_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DB2_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DA3_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DA3_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DB3_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DB3_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DA4_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DA4_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DB4_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DB4_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DA5_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DA5_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DB5_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DB5_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DA6_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DA6_N

    • Direction: in

    • Differential: false

    • Pin: true

  • DB6_P

    • Direction: in

    • Differential: false

    • Pin: true

  • DB6_N

    • Direction: in

    • Differential: false

    • Pin: true

Utilization

Utilization reporting is not currently implemented.