AXI AION Trigger
The AXI AION Trigger is an FPGA IP core driver that provides precision trigger generation and BSYNC Time-of-Flight (ToF) synchronization for multi-chip high-speed data converter systems. It is a key component in achieving synchronization between AD9084/AD9088 MxFE devices.
The driver integrates with the Linux IIO subsystem and the JESD204 framework to provide:
8 trigger channels with per-channel phase control
BSYNC direction control (input or output mode)
Internal BSYNC generation or external reference support
Time-of-Flight calibration via IIO consumer interface to ADF4030
JESD204 state machine integration for synchronized initialization
Supported IP Cores
AXI AION Trigger IP v1.0.a
Status
Source |
Mainlined? |
|---|---|
No |
Files
Function |
File |
|---|---|
driver |
Overview
The AXI AION Trigger IP core works in conjunction with the ADF4030 precision synchronizer and AD9084/AD9088 MxFE data converters to achieve sub-10ps multi-chip synchronization. During system initialization, the driver performs Time-of-Flight calibration to measure and compensate for PCB trace delays.
The IP core provides 8 independent trigger channels, each with programmable phase offset, allowing precise control over trigger timing relative to the BSYNC synchronization signal.
Adding Linux driver support
Enabling the driver
Configure kernel with make menuconfig:
Note
The AXI AION Trigger driver depends on CONFIG_IIO and CONFIG_HAS_IOMEM
Linux Kernel Configuration
Device Drivers --->
Industrial I/O support --->
Logic analyzers --->
<*> Analog Devices AXI AION Trigger driver
Adding a device tree entry
Required properties
compatible: Must be"adi,axi-aion-trig-1.0.a"reg: Physical base address and size of the IP core registersclocks: Reference to the device clockclock-names: Must be"device_clk"
Optional properties
io-channels: Reference to ADF4030 IIO channel for BSYNC phase controlio-channel-names: Must be"bsync"when io-channels is specifiedjesd204-device: JESD204 device marker#jesd204-cells: Number of JESD204 cells (typically 2)jesd204-inputs: JESD204 topology connections
Device tree example
Basic configuration with JESD204 integration:
axi_aion_trig: axi_aion_trig@7c600000 {
compatible = "adi,axi-aion-trig-1.0.a";
reg = <0x7c600000 0x1000>;
clocks = <&hmc7044 8>;
clock-names = "device_clk";
jesd204-device;
#jesd204-cells = <2>;
io-channels = <&adf4030 8>;
io-channel-names = "bsync";
};
With JESD204 topology connections:
axi_aion_trig: axi_aion_trig@7c900000 {
compatible = "adi,axi-aion-trig-1.0.a";
reg = <0x7c900000 0x1000>;
clocks = <<c6952 4>;
clock-names = "device_clk";
jesd204-device;
#jesd204-cells = <2>;
jesd204-inputs =
<&adf4030 0 FRAMER_LINK_B0_RX>,
<&adf4030 0 DEFRAMER_LINK_B0_TX>;
io-channels = <&adf4030 8>;
io-channel-names = "bsync";
};
Driver testing
This device can be found under /sys/bus/iio/devices/.
Use iio_info to check if the device and driver are present:
~$
iio_info
iio:device0: axi_aion_trig
8 channels found:
voltage0: (input)
voltage1: (input)
...
voltage7: (input)
Navigate to the device folder:
~$
cd $(grep -rw /sys/bus/iio/devices/*/name -e "axi_aion_trig" -l | xargs dirname)
IIO channel attributes
Per-channel attributes
- in_voltageX_phase (read/write)
Phase offset for trigger channel X (16-bit value, 0-65535). Controls the timing of the trigger output relative to the BSYNC signal.
~$
cat in_voltage0_phase
0
~$
echo 1000 > in_voltage0_phase
- in_voltageX_en (read/write)
Enable/disable trigger channel X (0 or 1).
~$
cat in_voltage0_en
1
~$
echo 0 > in_voltage0_en
- in_voltageX_status (read-only)
Status information for channel X including trigger state machine state, BSYNC state, capture status, and alignment information.
~$
cat in_voltage0_status
trig_state=idle bsync_state=bsync_gen bsync_captured=1 bsync_alignment_error=0
bsync_ratio=256 bsync_delay=2 bsync_ready=1
Debug attributes
The driver provides debugfs entries for low-level debugging:
- enable_debug_trig
Enable debug trigger mode.
- debug_trig
Trigger debug output.
Access via debugfs:
$ cd /sys/kernel/debug/iio/iio:device0
$ echo 1 > enable_debug_trig
$ echo 1 > debug_trig
Direct register access:
$ cd /sys/kernel/debug/iio/iio:device0
$ echo 0x10 > direct_reg_access
$ cat direct_reg_access
0x3FC
Theory of operation
BSYNC Time-of-Flight calibration
The AXI AION Trigger performs Time-of-Flight (ToF) calibration during JESD204 initialization to compensate for PCB trace delays and achieve precise multi-chip synchronization:
Reset and Configure: The IP core is reset and configured to receive BSYNC from the ADF4030 precision synchronizer.
BSYNC Detection: The IP waits for BSYNC edges to be detected and captured by the internal state machine.
Phase Measurement: Using the IIO consumer interface, the driver reads the phase from the ADF4030 TDC (Time-to-Digital Converter) which represents the propagation delay in femtoseconds.
Direction Switch: The BSYNC direction is switched to output mode so the FPGA generates BSYNC for the AD9084/AD9088 converters.
Phase Compensation: The negative of the measured phase is applied to the ADF4030 to compensate for the path delay, ensuring BSYNC arrives at the converters at the correct time.
Channel Enable: The trigger channels are enabled with their configured phase offsets.
State machines
The IP core implements two state machines:
Trigger State Machine:
idle: Waiting for trigger eventtrig_edge: Trigger edge detectedphase_read: Reading phase valuetrig_adjust: Adjusting trigger timing
BSYNC State Machine:
idle: Waiting for BSYNCbsync_edge: BSYNC edge detectedcalib: Calibration in progressbsync_gen: Generating BSYNC outputbsync_alignment_error: Alignment error detected
Register map
Address |
Name |
Description |
|---|---|---|
0x000C |
IDENTIFICATION |
IP core identification |
0x0010 |
CONTROL |
Control register (enable, reset, direction) |
0x0014 |
DEBUG |
Debug/status register |
0x0018 |
MANUAL_TRIGGER |
Manual trigger (self-clearing) |
0x001C |
TRIG_CH0_PHASE |
Channel 0 phase offset |
0x0020 |
TRIG_CH1_PHASE |
Channel 1 phase offset |
0x0024 |
TRIG_CH2_PHASE |
Channel 2 phase offset |
0x0028 |
TRIG_CH3_PHASE |
Channel 3 phase offset |
0x002C |
TRIG_CH4_PHASE |
Channel 4 phase offset |
0x0030 |
TRIG_CH5_PHASE |
Channel 5 phase offset |
0x0034 |
TRIG_CH6_PHASE |
Channel 6 phase offset |
0x0038 |
TRIG_CH7_PHASE |
Channel 7 phase offset |
Control register bits
Bit(s) |
Name |
Description |
|---|---|---|
0 |
BSYNC_DIRECTION |
0 = output, 1 = input |
1 |
DISABLE_INTERNAL_BSYNC |
Disable internal BSYNC generation |
9:2 |
TRIG_CHANNEL_ENABLE |
Per-channel trigger enable mask |
10 |
SW_RESET |
Software reset |
11 |
TRIG_SELECT |
GPIO trigger selection |
12 |
ENABLE_DEBUG_TRIG |
Enable debug trigger mode |
13 |
DEBUG_TRIG |
Debug trigger signal |
14 |
ENABLE_MISALIGN_CHECK |
Enable misalignment checking |