A method of calibrating a voltage-controlled oscillator, VCO in a phase-locked loop circuit, the method comprising a dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004) in a set of candidate frequency bands (VCOBAND; 0, 31) via a sequence of subsequent halving steps with index i = 1,..., N that produce reduced subsets (0, 15; 7, 15; 11, 15; 13, 15; 12, 14; 12, 13) of the set of candidate frequency bands (0, 31), wherein the reduced subsets (0, 15; 7, 15; 11, 15; 13, 15; 12, 14; 12, 13) have respective upper bound values (max; 15, 15, 15, 15, 14, 13), lower bound values (min; 0, 7, 11, 13, 12, 12) as well as central values (center; 7, 11, 13, 14, 13, 12), the central value of the subset resulting from the halving step of index i in the sequence being a function of the average ((max + min/2)) of the upper bound value (max) and the lower bound (min) value of the subset resulting from the halving step of index i-1 in the sequence, wherein the method comprises: identifying a desired calibration frequency for the VCO, f_des_cycle as a number of cycles counted in a reference clock signal (RefClk), reading a current frequency value, read_freq, which is a function of the current operation frequency of the VCO, performing the dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004) by: storing a stored frequency value store_read_freq[i] = read_freq for i=1, calculating a first modulus value, |f_des_cycle - store_read_freq[i]| and a second modulus value, |f_des_cycle - store_read_freq[i-1]|. checking whether the first modulus value, |f_des_cycle - store_read_freq[i]|is lower than the second modulus value |f_des_cycle - store_read_freq[i-1]|, in response to said checking yielding a positive outcome, performing a further halving step in the dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004) with index i increased by one, in response to said checking yielding a negative outcome, reducing by one the respective upper bound (max) and lower bound (min) of the current subset in the dichotomous search prior to resuming the dichotomous search in response (3003, I) to read_freq being higher than f_des_cycle plus a tolerance value, tol or increasing by one the respective upper bound (max) and lower bound (min) of the current subset in the dichotomous search prior to resuming the dichotomous search in response (3003, II) to read_freq being lower than f_des_cycle minus said tolerance value, tol, and calibrating the VCO to the frequency resulting from said dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004). identifying a desired calibration frequency for the VCO, f_des_cycle as a number of cycles counted in a reference clock signal (RefClk), reading a current frequency value, read_freq, which is a function of the current operation frequency of the VCO, performing the dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004) by: storing a stored frequency value store_read_freq[i] = read_freq for i=1, calculating a first modulus value, |f_des_cycle - store_read_freq[i]| and a second modulus value, |f_des_cycle - store_read_freq[i-1]|. checking whether the first modulus value, |f_des_cycle - store_read_freq[i]|is lower than the second modulus value |f_des_cycle - store_read_freq[i-1]|, in response to said checking yielding a positive outcome, performing a further halving step in the dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004) with index i increased by one, in response to said checking yielding a negative outcome, reducing by one the respective upper bound (max) and lower bound (min) of the current subset in the dichotomous search prior to resuming the dichotomous search in response (3003, I) to read_freq being higher than f_des_cycle plus a tolerance value, tol or increasing by one the respective upper bound (max) and lower bound (min) of the current subset in the dichotomous search prior to resuming the dichotomous search in response (3003, II) to read_freq being lower than f_des_cycle minus said tolerance value, tol, and calibrating the VCO to the frequency resulting from said dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004). storing a stored frequency value store_read_freq[i] = read_freq for i=1, calculating a first modulus value, |f_des_cycle - store_read_freq[i]| and a second modulus value, |f_des_cycle - store_read_freq[i-1]|. checking whether the first modulus value, |f_des_cycle - store_read_freq[i]|is lower than the second modulus value |f_des_cycle - store_read_freq[i-1]|, in response to said checking yielding a positive outcome, performing a further halving step in the dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004) with index i increased by one, in response to said checking yielding a negative outcome, reducing by one the respective upper bound (max) and lower bound (min) of the current subset in the dichotomous search prior to resuming the dichotomous search in response (3003, I) to read_freq being higher than f_des_cycle plus a tolerance value, tol or increasing by one the respective upper bound (max) and lower bound (min) of the current subset in the dichotomous search prior to resuming the dichotomous search in response (3003, II) to read_freq being lower than f_des_cycle minus said tolerance value, tol, and calibrating the VCO to the frequency resulting from said dichotomous search (1000 to 2021; 3000a, 3000b, 3000, 3001, 3002, 3003, 3004).