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 was designed with this capability in mind. Below are some notes on how to use it.

Synchronizing all daughterboard LOs

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

* Flex400, Flex900, Flex2400

  • 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 and execute one of the following commands to reprogram the dboard EEPROM:
    • usrp/host/apps/burn-db-eeprom -A -t flex_400_mimo_a --force
    • usrp/host/apps/burn-db-eeprom -A -t flex_900_mimo_a --force
    • usrp/host/apps/burn-db-eeprom -A -t flex_2400_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 flex_400_mimo_b --force
    • usrp/host/apps/burn-db-eeprom -A -t flex_900_mimo_b --force
    • usrp/host/apps/burn-db-eeprom -A -t flex_2400_mimo_b --force

Synchronizing multiple USRPs

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 USRPs, you must convert them to use a common reference clock. This is done as follows:

* Rev 3 USRPs

  • 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 USRPs

  • 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 USRPs

  • Rev 4 USRPs 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 off of this one, you can use J2002 to provide a clock out