Numerically Controlled Oscillator¶
Instance: i_phase_wheel_counter_1, file: phase_wheel_counter.vhd
The code is actually pretty simple. The phase wheel (Fig. 7) is actually a counter (s_phase_wheel_counter) which gets incremented by a fixed quantity, the jump size (u_M).
The “LUT” (which is not really a LUT) which generates the clock signal from the counter is represented by the last line. Essentially you just take one bit of the counter, and these will oscillate between 0 and 1 with 50% duty cycle. Fig. 8 of the paper shows you an example of why 8 different clocks (2 in the figure) increase the phase resolution. For visual reason the wave in the paper is a sine wave, but the principle is the same with a digital wave.
In this module a grain and fine clock frequency selection is allowed. The grain selection is carried out during the extraction of the clock from the counter. The LSB oscillate faster than the MSB. The fine selection is performed by the jump_size (M_i port) which is what is used to match the NCO clock frequency with the data rate.