NCO Frequency Hopping - 2.6 English

Zynq UltraScale+ RFSoC RF Data Converter Gen 1/2/3/DFE LogiCORE IP Product Guide (PG269)

Document ID
Release Date
2.6 English

When the RF-ADC or RF-DAC mixer with numerically controlled oscillator is in use the frequency of the NCO can be tuned in real-time using the RF-ADC and RF-DAC real-time NCO interfaces. This section describes the operation of these interfaces.

When carrying out frequency hopping information on the required phase and frequency of the NCO must be conveyed to the IP core. The NCO frequency is set by the 48-bit twos complement signed number nco_freq. The nco_freq signal has a range of -Fs/2 to Fs/2-Fs/(2^48). The maximum positive value (0x7FFF_FFFF_FFFF) results in a NCO frequency of Fs/2- Fs(2^48) while the maximum negative value (0x8000_0000_0000) produces a NCO frequency of -Fs/2. This is shown in the following table.

Table 1. NCO Frequency Mapping
NCO Frequency nco_freq
-Fs/2 0x8000_0000_0000
-Fs/4 0xc000_0000_0000
0 0x0000_0000_0000
Fs/4 0x4000_0000_0000
Fs/2 - Fs/(2^48) 0x7FFF_FFFF_FFFF

If the required NCO frequency is higher than Fs/2 the frequency should be folded down into the -Fs/2 to Fs/2 - Fs/(2^48) range by subtracting the sampling frequency as required. Similarly, for large negative frequencies, the sampling frequency is added to the required NCO frequency until it is in range. For NCO frequencies in even Nyquist zones the resultant frequency should be negated. For Gen 1 and Gen 2 RF-ADCs where calibration mode 1 is selected the mixer frequency should be reduced by Fs/2.

The phase information is carried by nco_phase. This is a phase offset added to the output of the NCO accumulator. The nco_phase input is an 18-bit twos complement signed number in the range -180 to 180 - 180/(2^17) degrees. The maximum positive value (0x1_FFFF) gives a phase shift of 180 - 180/(2^17) degrees. The maximum negative value (0x2_0000) gives a phase shift of -180 degrees. This is shown in the following table.
Table 2. NCO Phase Mapping
NCO Phase nco_phase
-1800 0x2_0000
-900 0x3_0000
00 0x0_0000
900 0x1_0000
180 - 180/(2^17) 0x1_FFFF

The nco_update_en signal is used to determine what frequency and phase words are modified on an update event. The bits in the nco_update_en vector are set High to modify the following bits of the frequency and phase numbers.

  • Bit 5: Reset the phase offset to 0
  • Bit 4: nco_phase[17:16]
  • Bit 3: nco_phase[15:0]
  • Bit 2: nco_freq[47:32]
  • Bit 1: nco_freq[31:16]
  • Bit 0: nco_freq[15:0]

For example, if only bits 2:0 of nco_update_en are set High, only the frequency value is changed on an update event.