USRP Clocking Notes

Having synchronized clocks throughout the entire transceiver chain allows you to build MIMO systems, smart antennas, phased arrays, and interferometers. The USRP device was designed with this capability in mind. Below are some notes on how to use it.

It's often useful to change ADC/DAC clock rate to make it an integer multiple of symbol clock rate. Then you don't need to do fractional resampling which requires a good deal of CPU power. E.g. for GSM you need 52MHz clock (GSM symbol rate is 270833 SPS = 52MSPS/192), for WiMAX you need 56MHz clock (sample rate for 10MHz bandwidth is 11.2MSPS = 56MSPS/5), etc. Different USRP hardware versions have different abilities in changing clock rates:
  1. USRP1 has input for external clock which replaces internal 64MHz oscillator. Read below how to use it.
  2. Newer USRP E100/E110 have configurable clock which can be controlled from UHD driver. See also note below.
  3. USRP2 and N200/N210 have fixed 100MHz clock which can't be tuned and do not have option to use external clock. See also note below.

Note, that while USRP2, E100/E110 and N200/N210 don't have option to replace internal clock, they have an input for a 10MHz reference clock, which allows you to synchronize their clocks to a common source. As a possible clock source you could use ClockTamer which has up to 7 outputs or any other reference clock with multiple outputs. The N210/E100 also have a GPSDO option which will provide Stratum 1 accuracy for those devices.

Synchronizing all daughterboard LOs in USRP1

If you have multiple daughterboards in a system, and desire phase coherence, you will have to take these steps, depending on your daughterboards

  • BasicRX, BasicTX, LFRX, LFTX
  • These boards have no LOs, so nothing is necessary.
  • If you have your own external RF sections, you are on your own
  • TVRX -- The TVRX is not suitable for synchronized multi-antenna applications.
  • The TVRX has its own oscillator inside the can.
  • There is no way to make these boards phase-coherent.
  • DBSRX
  • The DBSRX always uses the main USRP clock, so it is always phase-coherent
  • RFX400, RFX900, RFX1200, RFX1800, RFX2400
  • Early boards were shipped configured to use their own crystal oscillators, but newer ones (since late 2006) are configured to use the USRP motherboard oscillator
  • To modify these boards for coherent applications if you have USRP rev 2, 3, or 3B boards:
    • On the daughterboard, Move R64 to R84, Move R142 to R153
      • This disables the daughterboard clocks
    • On the daughterboard, Move R35 to R34, Move R117 to R116
      • This connects the boards to the FPGA clock output
    • Plug the board into side A of your USRP device and execute one of the following commands to reprogram the dboard EEPROM:
      • usrp/host/apps/burn-db-eeprom -A -t rfx400_mimo_a --force
      • usrp/host/apps/burn-db-eeprom -A -t rfx900_mimo_a --force
      • usrp/host/apps/burn-db-eeprom -A -t rfx2400_mimo_a --force
  • To modify these boards for coherent applications if you have USRP rev 4 boards:
    • Recent boards don't need these mods, only early RFX-boards
    • Move R64 to R84, Move R142 to R153
      • This disables the daughterboard clocks
    • Move R35 to R36, Move R117 to R115
      • This connects the boards to the motherboard clock
      • These are all 0-ohm, so if you lose one, just short across the appropriate pads
    • Plug the board into side A of your USRP and execute one of the following commands to reprogram the dboard EEPROM:
      • usrp/host/apps/burn-db-eeprom -A -t rfx400_mimo_b --force
      • usrp/host/apps/burn-db-eeprom -A -t rfx900_mimo_b --force
      • usrp/host/apps/burn-db-eeprom -A -t rfx2400_mimo_b --force

Synchronizing multiple USRP1s

To usefully synchronize multiple USRP boards, there are 2 factors you need to consider.
  • Clock synchronization, which is detailed below
  • Matching samples between boards. Martin DvH has done work on this. Contact him for more info.

To synchronize the clocks on multiple USRP1s, you must convert them to use a common reference clock. This is done as follows:

  • Rev 3 USRP devices
  • Cut the traces coming from X2
  • Replace R2027 with a 0 Ohm resistor (size 0603)
  • Put an SMA connector in J2001
    • Note that you won't be able to fit a TVRX in the RXB slot anymore once you do this
  • Feed your master clock in on this SMA connector. It should be between 10 and 64 MHz, and it will become your sample clock
  • Rev 3B USRP devices
  • Desolder the clock board from J2001
  • Put an SMA connector in J2001
    • Note that you won't be able to fit a TVRX in the RXB slot anymore once you do this
  • Feed your master clock in on this SMA connector. It should be between 10 and 64 MHz, and it will become your sample clock
  • Rev 4 USRP devices
  • Rev 4 USRP devices introduced an enhancement to allow one board to be the master clock, and all other boards will slave to it.
  • For the master clock board:
    • Solder an SMA connector into J2002. This is the master clock output. Be careful when soldering the SMA connector so you don't break the delicate trace from J2002 to R2028.
    • Note that you won't be able to fit a TVRX in the RXB slot anymore once you do this.
  • For the slave boards:
    • Solder an SMA connector into J2001. This is the clock input. Be careful when soldering the SMA connector so you don't break the delicate trace from J2001 to C927.
      • Note that you won't be able to fit a TVRX in the RXB slot anymore once you do this.
    • Move R2029 to R2030. This disables the onboard clock. R2029/R2030 is a 0-ohm resistor.
    • Move C925 to C926.
    • Remove C924.
    • If you want to chain another USRP device off of this one, you can use J2002 to provide a clock out

External clock for USRP1

First, you have to perform hardware modifications as if you want to use your USRP1 as a slave board in MIMO system (read about this in the section above). These modifications just disable internal clock and allow you to use external clock source (master MIMO board or a standalone clock).

If you use external clock with CMOS output, then you have to add terminating 50 Ohm resistor to the USRP clock input. One way to do this is to solder SMD resistor right to the CLOCK_IN SMA connector, like shown here: http://code.google.com/p/clock-tamer/wiki/ClockTamerUSRPInstallation

Popular clock sources for USRP1:
  • http://code.google.com/p/clock-tamer/. The Fairwaves –°lockTamer. A highly configurable 2-65MHz reference clock generator with 0.28ppm frequency stability. Can be calibrated to 50ppb. Has option to sync frequency to GPS to achieve perfect long-term frequency stability. Has up to 2 CMOS outputs and up to 5 LVDS outputs which may have different output frequencies, e.g. 52MHz, 10MHz and 13MHz to synchronize your USRP1, spectrum analyzer and GSM protocol tested to the single clock source.
  • http://www.box73.de/catalog/product_info.php?products_id=1869. The Funkamateur FA-SY 1 kit.